Index: /issm/oecreview/Archive/21724-22754/Date.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/Date.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/Date.tex	(revision 22755)
@@ -0,0 +1,1 @@
+May-10-2018
Index: /issm/oecreview/Archive/21724-22754/ISSM-21724-21725.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21724-21725.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21724-21725.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/plot/scaleruler.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/scaleruler.m	(revision 21724)
++++ ../trunk-jpl/src/m/plot/scaleruler.m	(revision 21725)
+@@ -25,9 +25,12 @@
+ 
+ %If only one tick, just draw a rectangle
+ if numberofticks==1,
+-	text(x0+lengthscale/2,y0+2*widthscale,2,[num2str(lengthscale*unitscale/1000) ' km'],...
++	t=text(x0+lengthscale/2,y0+2*widthscale,2,[num2str(lengthscale*unitscale/1000) ' km'],...
+ 		'FontSize',fontsize,'FontWeight',fontweight,'Color',fontcolor,'HorizontalAlignment','center','VerticalAlignment','baseline');
+-	patch([x0 x0+lengthscale x0+lengthscale x0],[y0 y0 y0+widthscale y0+widthscale],2*ones(1,4),fontcolor,'Edgecolor',fontcolor);
++	if ~verLessThan('matlab', '8.3')
++		set(t,'Layer','front');
++	end
++	p=patch([x0 x0+lengthscale x0+lengthscale x0],[y0 y0 y0+widthscale y0+widthscale],2*ones(1,4),fontcolor,'Edgecolor',fontcolor);
+ else
+ 	%initialize some coordinates
+ 	unitlength=lengthscale/(numberofticks -1);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21730-21731.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21730-21731.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21730-21731.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 21730)
++++ ../trunk-jpl/configure.ac	(revision 21731)
+@@ -1,7 +1,7 @@
+ # Process this file with autoconf to produce a configure script.
+ 
+ #AUTOCONF
+-AC_INIT([Ice Sheet System Model (ISSM)],[4.12],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
++AC_INIT([Ice Sheet System Model (ISSM)],[4.13],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
+ AC_CONFIG_AUX_DIR([./aux-config])         #Put config files in aux-config
+ AC_CONFIG_MACRO_DIR([m4])                 #m4 macros are located in m4
+ m4_include([m4/issm_options.m4])
Index: /issm/oecreview/Archive/21724-22754/ISSM-21736-21737.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21736-21737.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21736-21737.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/plot/plot_unit.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.m	(revision 21736)
++++ ../trunk-jpl/src/m/plot/plot_unit.m	(revision 21737)
+@@ -29,8 +29,17 @@
+ 			patch( 'Faces',[B C D],'Vertices', [x y z],'CData',data(pos),'FaceColor','flat','EdgeColor',edgecolor);
+ 			patch( 'Faces',[C A D],'Vertices', [x y z],'CData',data(pos),'FaceColor','flat','EdgeColor',edgecolor);
+ 		else
+-			A=elements(pos,1); B=elements(pos,2); C=elements(pos,3);
+-			patch( 'Faces', [A B C], 'Vertices', [x y z],'CData', data(pos),'FaceColor','flat','EdgeColor',edgecolor);
++			A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); data=data(pos);
++			patch( 'Faces', [A B C], 'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
++			
++			%mask value NaN, plot white faces.
++			if getfieldvalue(options,'maskwhite',0),
++				pos2=find(data==getfieldvalue(options,'maskvalue',NaN));
++				if ~isempty(pos2),
++					A=elements(pos(pos2),1); B=elements(pos(pos2),2); C=elements(pos(pos2),3); data=data(pos2);
++					patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceColor','w','EdgeColor',edgecolor);
++				end
++			end
+ 		end
+ 
+ 		if is2d,
Index: /issm/oecreview/Archive/21724-22754/ISSM-21737-21738.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21737-21738.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21737-21738.diff	(revision 22755)
@@ -0,0 +1,223 @@
+Index: ../trunk-jpl/src/m/classes/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/misfit.m	(revision 21737)
++++ ../trunk-jpl/src/m/classes/misfit.m	(revision 21738)
+@@ -17,13 +17,13 @@
+ classdef misfit
+ 	properties (SetAccess=public)
+ 		%misfit
+-		name						= '';
++		name					= '';
+ 		definitionstring		= ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
+ 		model_string			= ''; %string for field that is modeled
+ 		observation				= NaN; %observed field that we compare the model against
+ 		observation_string	= ''; %string for observed field.
+ 		timeinterpolation		= '';
+-		local						= 1;
++		local					= 1;
+ 		weights					= NaN; %weight coefficients for every vertex
+ 		weights_string			= ''; %string to identify this particular set of weights
+ 		cumulated				= NaN; %do we cumulate misfit through time?
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21737)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21738)
+@@ -786,6 +786,8 @@
+ 	SealevelEmotionEnum,
+ 	SealevelAbsoluteEnum,
+ 	SealevelEustaticEnum,
++	SealevelObsEnum,
++	SealevelWeightsEnum,
+ 	SealevelriseDeltathicknessEnum,
+ 	SealevelriseMaxiterEnum,
+ 	SealevelriseReltolEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21737)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21738)
+@@ -766,6 +766,8 @@
+ 		case SealevelEmotionEnum : return "SealevelEmotion";
+ 		case SealevelAbsoluteEnum : return "SealevelAbsolute";
+ 		case SealevelEustaticEnum : return "SealevelEustatic";
++		case SealevelObsEnum : return "SealevelObs";
++		case SealevelWeightsEnum : return "SealevelWeights";
+ 		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
+ 		case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
+ 		case SealevelriseReltolEnum : return "SealevelriseReltol";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21737)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21738)
+@@ -784,6 +784,8 @@
+ 	      else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum;
+ 	      else if (strcmp(name,"SealevelAbsolute")==0) return SealevelAbsoluteEnum;
+ 	      else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
++	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
++	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
+ 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
+ 	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
+ 	      else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+-	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+-	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Seg")==0) return SegEnum;
++	      if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
++	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
++	      else if (strcmp(name,"Seg")==0) return SegEnum;
+ 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+-	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++	      if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      else if (strcmp(name,"MINI")==0) return MINIEnum;
++	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+ 	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21737)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21738)
+@@ -95,7 +95,7 @@
+ 				for(j=0;j<nummisfits;j++){
+ 
+ 					/*First create a misfit object for that specific string (misfit_model_string_s[j]):*/
+-					output_definitions->AddObject(new Misfit(misfit_name_s[j],StringToEnumx(misfit_definitionstring_s[j]),StringToEnumx(misfit_model_string_s[j]),StringToEnumx(misfit_observation_string_s[j]),misfit_timeinterpolation_s[j],(bool)misfit_local_s[j],StringToEnumx(misfit_weights_string_s[j])));
++					output_definitions->AddObject(new Misfit(misfit_name_s[j],StringToEnumx(misfit_definitionstring_s[j]),StringToEnumx(misfit_model_string_s[j]),StringToEnumx(misfit_observation_string_s[j]),misfit_timeinterpolation_s[j],misfit_local_s[j],StringToEnumx(misfit_weights_string_s[j])));
+ 
+ 					/*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/
+ 					for(int k=0;k<elements->Size();k++){
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 21737)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 21738)
+@@ -18,13 +18,15 @@
+ #include "../classes/gauss/Gauss.h"
+ /*}}}*/
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
++void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
+ 
++
+ class Misfit: public Object, public Definition{
+ 
+ 	public: 
+ 
+ 		int         definitionenum;
+-		bool        local;     
++		int         local;     
+ 		int         model_enum;
+ 		char*       name;
+ 		int         observation_enum;
+@@ -43,13 +45,13 @@
+ 			this->observation_enum = UNDEF;
+ 			this->weights_enum = UNDEF;
+ 			this->timeinterpolation=NULL;
+-			this->local=true;
++			this->local=1;
+ 			this->misfit=0;
+ 			this->lock=0;
+ 
+ 		}
+ 		/*}}}*/
+-		Misfit(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, char* in_timeinterpolation, bool in_local, int in_weights_enum){/*{{{*/
++		Misfit(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, char* in_timeinterpolation, int in_local, int in_weights_enum){/*{{{*/
+ 
+ 			this->definitionenum=in_definitionenum;
+ 			
+@@ -132,7 +134,7 @@
+ 			 femmodel->parameters->FindParam(&time,TimeEnum);
+ 			 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 
+-			 if (this->local){ /*local computation: {{{*/
++			 if (this->local==1){ /*area integration using elements: {{{*/
+ 
+ 				 int i;
+ 				 IssmDouble misfit_t=0.;
+@@ -167,6 +169,72 @@
+ 				 /*What we return is the value of misfit / time: */
+ 				 return misfit/(time-starttime);
+ 			 } /*}}}*/
++			 else if (this->local==2){ /*vertex by vertex computation: {{{*/
++
++				 IssmDouble* model = NULL;
++				 IssmDouble* observation= NULL;
++				 IssmDouble* weights= NULL;
++				 
++				 /*Are we transient?:*/
++				 if (time==0){
++					 IssmDouble misfit_t=0.;
++					 
++					 /*get global vectors: */
++					 GetVectorFromInputsx(&model,femmodel,model_enum,VertexSIdEnum);
++					 GetVectorFromInputsx(&observation,femmodel,observation_enum,VertexSIdEnum);
++					 GetVectorFromInputsx(&weights,femmodel,weights_enum,VertexSIdEnum);
++
++					 int count=0;
++					 for (int i=0;i<femmodel->vertices->NumberOfVertices();i++){
++						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
++						 if (weights[i]!=0)count++;
++					 }
++					 misfit=sqrt(misfit_t)/count;
++
++					 /*Free ressources:*/
++					 xDelete<IssmDouble>(model);
++					 xDelete<IssmDouble>(observation);
++					 xDelete<IssmDouble>(weights);
++
++					 /*return value: */
++					 return misfit;
++				 }
++				 else{
++					 
++					 IssmDouble misfit_t=0.;
++					 IssmDouble all_misfit_t=0.;
++
++					 /*If we are locked, return time average: */
++					 if(this->lock)return misfit/(time-starttime);
++
++					 /*get global vectors: */
++					 GetVectorFromInputsx(&model,femmodel,model_enum,VertexSIdEnum);
++					 GetVectorFromInputsx(&observation,femmodel,observation_enum,VertexSIdEnum);
++					 GetVectorFromInputsx(&weights,femmodel,weights_enum,VertexSIdEnum);
++
++					 int count=0;
++					 for (int i=0;i<femmodel->vertices->NumberOfVertices();i++){
++						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
++						 if (weights[i]!=0)count++;
++					 }
++
++					 /*Add this time's contribution to curent misfit: */
++					 misfit=sqrt(misfit_t)/count;
++					 misfit+=dt*misfit_t;
++
++					 /*Do we lock? i.e. are we at final_time? :*/
++					 if(time==finaltime)this->lock=1;
++					 
++					 /*Free ressources:*/
++					 xDelete<IssmDouble>(model);
++					 xDelete<IssmDouble>(observation);
++					 xDelete<IssmDouble>(weights);
++
++					 /*What we return is the value of misfit / time: */
++					 return misfit/(time-starttime);
++				 }
++
++			 } /*}}}*/
+ 			 else{ /*global computation: {{{ */
+ 				 
+ 				 IssmDouble model, observation;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21738-21739.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21738-21739.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21738-21739.diff	(revision 22755)
@@ -0,0 +1,335 @@
+Index: ../trunk-jpl/src/m/classes/frictionhydro.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictionhydro.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/frictionhydro.py	(revision 21739)
+@@ -0,0 +1,93 @@
++import numpy as np
++from project3d import project3d
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++
++class frictionhydro(object):
++	"""
++	FRICTIONWEERTMAN class definition
++
++	Usage:
++		friction=frictionhydro();
++	"""
++	def __init__(self): # {{{
++		self.coupling  		  		= 0
++		self.q    				= float('NaN')
++		self.C    				= float('NaN')
++		self.As    				= float('NaN')
++		self.effective_pressure			= float('NaN')
++		#set defaults
++		self.setdefaultparameters()
++	#}}}
++
++		#what is this:
++		#function self = frictionhydro(varargin) % {{{
++		#	switch nargin
++		#		case 0
++		#			self=setdefaultparameters(self);
++		#		otherwise
++		#			error('constructor not supported');
++		#	end
++		#end % }}}
++		
++	def checkconsistency(self,md,solution,analyses): #{{{ 
++
++		#Early return
++		if 'StressbalanceAnalysis' in analyses and 'ThermalAnalysis' in analyses:
++			return md
++		
++		md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0,1,2])
++		md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements,1])
++		md = checkfield(md,'fieldname','friction.C','NaN',1,'Inf',1,'size',[md.mesh.numberofelements,1])
++		md = checkfield(md,'fieldname','friction.As','NaN',1,'Inf',1,'size',[md.mesh.numberofelements,1])
++		if self.coupling==1:
++			md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')
++	# }}}
++
++	def extrude(self,md): # {{{
++		self.q=project3d(md,'vector',self.q,'type','element')
++		self.C=project3d(md,'vector',self.C,'type','element')
++		self.As=project3d(md,'vector',self.As,'type','element')
++		if self.coupling==1:
++			self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')		
++		return self	
++	 # }}} 
++
++
++	def __repr__(self): # {{{
++		string='Effective Pressure based friction law described in Gagliardini 2007'
++		string="%s\n%s"%(string,fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)'))
++		string="%s\n%s"%(string,fielddisplay(self,'q','friction law exponent q>=1'))
++		string="%s\n%s"%(string,fielddisplay(self,'C','friction law max value [SI]'))
++		string="%s\n%s"%(string,fielddisplay(self,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]'))
++		string="%s\n%s"%(string,fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]'))
++
++		return string
++	#}}}
++
++
++	def marshall(self,prefix,md,fid): #{{{
++		WriteData(fid,prefix,'name','md.friction.law','data',3,'format','Integer')
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer')
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2)
++		if self.coupling==1:
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')
++	#}}}
++
++
+Index: ../trunk-jpl/src/m/classes/friction.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.py	(revision 21738)
++++ ../trunk-jpl/src/m/classes/friction.py	(revision 21739)
+@@ -1,3 +1,4 @@
++import numpy as np
+ from fielddisplay import fielddisplay
+ from project3d import project3d
+ from checkfield import checkfield
+@@ -15,17 +16,20 @@
+ 		self.coefficient = float('NaN')
+ 		self.p           = float('NaN')
+ 		self.q           = float('NaN')
+-
++                self.coupling  	 = 0
++                self.effective_pressure	= float('NaN')
+ 		#set defaults
+ 		self.setdefaultparameters()
+ 
+ 		#}}}
+ 	def __repr__(self): # {{{
+-		string="Basal shear stress parameters: Sigma_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b,\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)"
++		string="Basal shear stress parameters: Sigma_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b,\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*base, r=q/p and s=1/p)"
+ 
+ 		string="%s\n%s"%(string,fielddisplay(self,"coefficient","friction coefficient [SI]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"p","p exponent"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"q","q exponent"))
++		string="%s\n%s"%(string,fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)'))
++		string="%s\n%s"%(string,fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]'))
+ 		return string
+ 		#}}}
+ 	def extrude(self,md): # {{{
+@@ -32,6 +36,13 @@
+ 		self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1)
+ 		self.p=project3d(md,'vector',self.p,'type','element')
+ 		self.q=project3d(md,'vector',self.q,'type','element')
++		#if self.coupling==0: #doesnt work with empty loop, so just skip it?
++		if self.coupling==1:
++			self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')	
+ 		return self
+ 	#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -46,7 +57,13 @@
+ 		md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
+ 		md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
+-
++		md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0,1,2])
++		if self.coupling==1:
++			md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')
+ 		return md
+ 	# }}}
+ 	def marshall(self,prefix,md,fid):    # {{{
+@@ -54,4 +71,11 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
+ 		WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer')
++		if self.coupling==1:
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		elif self.coupling==2:
++			raise ValueError('coupling not supported yet')
++		elif self.coupling > 2:
++			raise ValueError('md.friction.coupling larger than 2, not supported yet')			
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/frictionhydro.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictionhydro.m	(revision 21738)
++++ ../trunk-jpl/src/m/classes/frictionhydro.m	(revision 21739)
+@@ -5,7 +5,7 @@
+ 
+ classdef frictionhydro
+ 	properties (SetAccess=public) 
+-		Coupling           = 0;
++		coupling           = 0;
+ 		q                  = NaN;
+ 		C                  = NaN;
+ 		As                 = NaN;
+@@ -27,12 +27,19 @@
+ 
+ 			%Early return
+ 			if ~ismember('StressbalanceAnalysis',analyses) & ~ismember('ThermalAnalysis',analyses), return; end
+-			md = checkfield(md,'fieldname','friction.Coupling','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);
+ 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','friction.C','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','friction.As','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+-			if self.Coupling==0,
+-				md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
++			switch self.coupling
++				case 0
++				case 1
++					md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 	    end
+ 		end % }}}
+ 		function self = extrude(self,md) % {{{
+@@ -39,13 +46,19 @@
+ 			self.q=project3d(md,'vector',self.q,'type','element');
+ 			self.C=project3d(md,'vector',self.C,'type','element');
+ 			self.As=project3d(md,'vector',self.As,'type','element');
+-			if self.Coupling==0,
+-				self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
++			switch self.coupling
++				case 0
++				case 1
++					self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
+ 			end
+ 	  end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('Effective Pressure based friction law described in Gagliardini 2007'));
+-			fielddisplay(self,'Coupling','Coupling flag, 1 for coupling and 0 for forcing');
++			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');
+ 			fielddisplay(self,'q','friction law exponent q>=1');
+ 			fielddisplay(self,'C','friction law max value [SI]');
+ 			fielddisplay(self,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]');
+@@ -53,12 +66,18 @@
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			WriteData(fid,prefix,'name','md.friction.law','data',3,'format','Integer');
+-			WriteData(fid,prefix,'class','friction','object',self,'fieldname','Coupling','format','Integer');
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
+ 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2);
+-			if self.Coupling==0,
+-				WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			switch self.coupling
++				case 0
++				case 1
++					WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
+ 			end
+ 	  end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/friction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.m	(revision 21738)
++++ ../trunk-jpl/src/m/classes/friction.m	(revision 21739)
+@@ -8,6 +8,8 @@
+ 		coefficient = NaN;
+ 		p           = NaN;
+ 		q           = NaN;
++		coupling    = 0;	%Silje
++		effective_pressure = NaN;	%Silje
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+@@ -14,6 +16,15 @@
+ 			self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1);
+ 			self.p=project3d(md,'vector',self.p,'type','element');
+ 			self.q=project3d(md,'vector',self.q,'type','element');
++			switch self.coupling
++				case 0
++				case 1
++					self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 		end % }}}
+ 		function self = friction(varargin) % {{{
+ 			switch nargin
+@@ -35,6 +46,16 @@
+ 			md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
++			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);%Silje
++			switch self.coupling
++				case 0
++				case 1
++					md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('Basal shear stress parameters: Sigma_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)'));
+@@ -41,6 +62,8 @@
+ 			fielddisplay(self,'coefficient','friction coefficient [SI]');
+ 			fielddisplay(self,'p','p exponent');
+ 			fielddisplay(self,'q','q exponent');
++			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');%Silje
++			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');%Silje
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			yts=md.constants.yts;
+@@ -49,8 +72,16 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
+-			
+-
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer'); %Silje
++			switch self.coupling
++				case 0
++				case 1
++					WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+@@ -57,6 +88,8 @@
+ 			writejs1Darray(fid,[modelname '.friction.coefficient'],self.coefficient);
+ 			writejs1Darray(fid,[modelname '.friction.p'],self.p);
+ 			writejs1Darray(fid,[modelname '.friction.q'],self.q);
++			writejs1Darray(fid,[modelname '.friction.coupling'],self.coupling);%Silje
++			writejs1Darray(fid,[modelname '.friction.effective_pressure'],self.effective_pressure);%Silje
+ 
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21739-21740.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21739-21740.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21739-21740.diff	(revision 22755)
@@ -0,0 +1,397 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Friction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 21739)
++++ ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 21740)
+@@ -69,6 +69,7 @@
+ 	IssmDouble  Chi,Gamma;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  alpha_complement;
++	IssmDouble  base,sealevel,thickness;
+ 
+ 	/*Recover parameters: */
+ 	element->GetInputValue(&q_exp,FrictionQEnum);
+@@ -76,14 +77,28 @@
+ 
+ 	element->GetInputValue(&As,gauss,FrictionAsEnum);
+ 	element->GetInputValue(&n,gauss,MaterialsRheologyNEnum);
++	element->GetInputValue(&thickness, gauss,ThicknessEnum);
++	element->GetInputValue(&base, gauss,BaseEnum);
++	element->GetInputValue(&sealevel, gauss,SealevelEnum);
++
++	IssmDouble rho_water   = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	IssmDouble rho_ice     = element->GetMaterialParameter(MaterialsRhoIceEnum);
++	IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
+ 	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+ 
+-	if (CoupledFlag==1){
+-		element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++	switch(CoupledFlag){
++		case 0:
++			Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++			break;
++		case 1:
++			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
++			break;
++		case 2:
++			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++			break;
++		default:
++			_error_("not supported");
+ 	}
+-	else{
+-		element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
+-	}
+ 
+ 	if(Neff<0)Neff=0;
+ 
+@@ -158,17 +173,18 @@
+ }/*}}}*/
+ void Friction::GetAlphaViscousComplement(IssmDouble* palpha_complement, Gauss* gauss){/*{{{*/
+ 
+-	/* FrictionGetAlpha2 computes alpha2= drag^2 * Neff ^r * vel ^s, with Neff=rho_ice*g*thickness+rho_ice*g*bed, r=q/p and s=1/p. 
++	/* FrictionGetAlpha2 computes alpha2= drag^2 * Neff ^r * vel ^s, with Neff=rho_ice*g*thickness+rho_ice*g*base, r=q/p and s=1/p. 
+ 	 * FrictionGetAlphaComplement is used in control methods on drag, and it computes: 
+ 	 * alpha_complement= Neff ^r * vel ^s*/
+ 
+ 	/*diverse: */
++	int         CoupledFlag;
+ 	IssmDouble  r,s;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  drag_p,drag_q;
+ 	IssmDouble  Neff;
+ 	IssmDouble  drag_coefficient;
+-	IssmDouble  bed,thickness,sealevel;
++	IssmDouble  base,thickness,sealevel;
+ 	IssmDouble  alpha_complement;
+ 
+ 	/*Recover parameters: */
+@@ -175,19 +191,31 @@
+ 	element->GetInputValue(&drag_p,FrictionPEnum);
+ 	element->GetInputValue(&drag_q,FrictionQEnum);
+ 	element->GetInputValue(&thickness, gauss,ThicknessEnum);
+-	element->GetInputValue(&bed, gauss,BaseEnum);
++	element->GetInputValue(&base, gauss,BaseEnum);
+ 	element->GetInputValue(&sealevel, gauss,SealevelEnum);
+ 	element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum);
+ 	IssmDouble rho_water   = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	IssmDouble rho_ice     = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
+-
++	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+ 	//compute r and q coefficients: */
+ 	r=drag_q/drag_p;
+ 	s=1./drag_p;
+ 
+-	//From bed and thickness, compute effective pressure when drag is viscous:
+-	Neff=gravity*(rho_ice*thickness+rho_water*(bed-sealevel));
++	//From base and thickness, compute effective pressure when drag is viscous, or get Neff from forcing or coupled to hydrologymodel:
++	switch(CoupledFlag){
++		case 0:
++			Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++			break;	
++		case 1:
++			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
++			break;
++		case 2:
++			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++			break;
++		default:
++			_error_("not supported");
++	}
+ 	if(Neff<0)Neff=0;
+ 
+ 	//We need the velocity magnitude to evaluate the basal stress:
+@@ -263,7 +291,7 @@
+ 	IssmDouble  r,s;
+ 	IssmDouble  drag_p, drag_q;
+ 	IssmDouble  Neff;
+-	IssmDouble  thickness,base,bed,floatation_thickness,sealevel;
++	IssmDouble  thickness,base,floatation_thickness,sealevel;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  drag_coefficient,drag_coefficient_coulomb;
+ 	IssmDouble  alpha2,alpha2_coulomb;
+@@ -274,7 +302,6 @@
+ 	element->GetInputValue(&thickness, gauss,ThicknessEnum);
+ 	element->GetInputValue(&base, gauss,BaseEnum);
+ 	element->GetInputValue(&sealevel, gauss,SealevelEnum);
+-	element->GetInputValue(&bed, gauss,BedEnum);
+ 	element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum);
+ 	element->GetInputValue(&drag_coefficient_coulomb, gauss,FrictionCoefficientcoulombEnum);
+ 	IssmDouble rho_water        = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+@@ -314,7 +341,7 @@
+ 	else alpha2=drag_coefficient*drag_coefficient*pow(Neff,r)*pow(vmag,(s-1.));
+ 
+ 	floatation_thickness=0;
+-	if(bed<0) floatation_thickness=-rho_water/rho_ice*bed;
++	if(base<0) floatation_thickness=-rho_water/rho_ice*base;
+ 	if(vmag==0.) alpha2_coulomb=0.;
+ 	else alpha2_coulomb=drag_coefficient_coulomb*drag_coefficient_coulomb*rho_water*gravity*(thickness-floatation_thickness)/vmag;
+ 
+@@ -348,6 +375,7 @@
+ 
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  alpha2;
++	IssmDouble  base,thickness,sealevel;
+ 
+ 	/*Recover parameters: */
+ 	element->GetInputValue(&q_exp,FrictionQEnum);
+@@ -354,15 +382,28 @@
+ 	element->GetInputValue(&C_param,FrictionCEnum);
+ 	element->GetInputValue(&As,gauss,FrictionAsEnum);
+ 	element->GetInputValue(&n,gauss,MaterialsRheologyNEnum);
++	element->GetInputValue(&thickness, gauss,ThicknessEnum);
++	element->GetInputValue(&base, gauss,BaseEnum);
++	element->GetInputValue(&sealevel, gauss,SealevelEnum);
++	IssmDouble rho_water   = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	IssmDouble rho_ice     = element->GetMaterialParameter(MaterialsRhoIceEnum);
++	IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
++	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+ 	
+-	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+-	if (CoupledFlag==1){
+-		element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++	switch(CoupledFlag){
++		case 0:
++			Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++			break;	
++		case 1:
++			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
++			break;
++		case 2:
++			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++			break;
++		default:
++			_error_("not supported");
+ 	}
+-	else{
+-		element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
+-	}
+-		
++
+ 	if(Neff<0)Neff=0;
+ 
+ 	switch(dim){
+@@ -406,18 +447,18 @@
+ }/*}}}*/
+ void Friction::GetAlpha2Sommers(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
+ 
+-	/* FrictionGetAlpha2 computes alpha2= drag^2 * Neff, with Neff=rho_ice*g*thickness+rho_ice*g*(head-bed)*/
++	/* FrictionGetAlpha2 computes alpha2= drag^2 * Neff, with Neff=rho_ice*g*thickness+rho_ice*g*(head-base)*/
+ 
+ 	/*diverse: */
+ 	IssmDouble  pressure_ice,pressure_water;
+ 	IssmDouble  Neff;
+ 	IssmDouble  drag_coefficient;
+-	IssmDouble  bed,thickness,head,sealevel;
++	IssmDouble  base,thickness,head,sealevel;
+ 	IssmDouble  alpha2;
+ 
+ 	/*Recover parameters: */
+ 	element->GetInputValue(&thickness, gauss,ThicknessEnum);
+-	element->GetInputValue(&bed, gauss,BaseEnum);
++	element->GetInputValue(&base, gauss,BaseEnum);
+ 	element->GetInputValue(&head, gauss,HydrologyHeadEnum);
+ 	element->GetInputValue(&sealevel, gauss,SealevelEnum);
+ 	element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum);
+@@ -425,9 +466,9 @@
+ 	IssmDouble rho_ice     = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
+ 
+-	//From bed and thickness, compute effective pressure when drag is viscous:
++	//From base and thickness, compute effective pressure when drag is viscous:
+ 	pressure_ice   = rho_ice*gravity*thickness;
+-	pressure_water = rho_water*gravity*(head-bed+sealevel);
++	pressure_water = rho_water*gravity*(head-base+sealevel);
+ 	Neff=pressure_ice-pressure_water;
+ 	if(Neff<0.) Neff=0.;
+ 
+@@ -510,9 +551,10 @@
+ void Friction::GetAlpha2Viscous(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
+ 
+ 	/*This routine calculates the basal friction coefficient 
+-	  alpha2= drag^2 * Neff ^r * | vel | ^(s-1), with Neff=rho_ice*g*thickness+rho_ice*g*bed, r=q/p and s=1/p**/
++	  alpha2= drag^2 * Neff ^r * | vel | ^(s-1), with Neff=rho_ice*g*thickness+rho_ice*g*base, r=q/p and s=1/p**/
+ 
+ 	/*diverse: */
++	int         CoupledFlag;
+ 	IssmDouble  r,s;
+ 	IssmDouble  drag_p, drag_q;
+ 	IssmDouble  Neff;
+@@ -531,13 +573,25 @@
+ 	IssmDouble rho_water   = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	IssmDouble rho_ice     = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
+-
++	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+ 	//compute r and q coefficients: */
+ 	r=drag_q/drag_p;
+ 	s=1./drag_p;
+ 
+-	//From base and thickness, compute effective pressure when drag is viscous:
+-	Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++	//From base and thickness, compute effective pressure when drag is viscous, or get Neff from forcing:
++	switch(CoupledFlag){
++		case 0:
++			Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++			break;
++		case 1:
++			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
++			break;
++		case 2:
++			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++			break;
++		default:
++			_error_("not supported");
++	}
+ 	if(Neff<0)Neff=0;
+ 
+ 	switch(dim){
+@@ -571,13 +625,13 @@
+ void Friction::GetAlpha2WaterLayer(IssmDouble* palpha2, Gauss* gauss){/*{{{*/
+ 
+ 	/*This routine calculates the basal friction coefficient 
+-	  alpha2= drag^2 * Neff ^r * | vel | ^(s-1), with Neff=rho_ice*g*thickness+rho_ice*g*bed, r=q/p and s=1/p**/
++	  alpha2= drag^2 * Neff ^r * | vel | ^(s-1), with Neff=rho_ice*g*thickness+rho_ice*g*base, r=q/p and s=1/p**/
+ 
+ 	/*diverse: */
+ 	IssmDouble  r,s;
+ 	IssmDouble  drag_p, drag_q;
+ 	IssmDouble  Neff,F;
+-	IssmDouble  thickness,bed,sealevel;
++	IssmDouble  thickness,base,sealevel;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  drag_coefficient,water_layer;
+ 	IssmDouble  alpha2;
+@@ -587,7 +641,7 @@
+ 	element->GetInputValue(&drag_p,FrictionPEnum);
+ 	element->GetInputValue(&drag_q,FrictionQEnum);
+ 	element->GetInputValue(&thickness, gauss,ThicknessEnum);
+-	element->GetInputValue(&bed, gauss,BaseEnum);
++	element->GetInputValue(&base, gauss,BaseEnum);
+ 	element->GetInputValue(&sealevel, gauss,SealevelEnum);
+ 	element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum);
+ 	element->GetInputValue(&water_layer, gauss,FrictionWaterLayerEnum);
+@@ -599,9 +653,9 @@
+ 	r=drag_q/drag_p;
+ 	s=1./drag_p;
+ 
+-	//From bed and thickness, compute effective pressure when drag is viscous:
+-	if(bed>0) bed=0;
+-	if(water_layer==0) Neff=gravity*rho_ice*thickness+gravity*rho_water*(bed-sealevel);
++	//From base and thickness, compute effective pressure when drag is viscous:
++	if(base>0) base=0;
++	if(water_layer==0) Neff=gravity*rho_ice*thickness+gravity*rho_water*(base-sealevel);
+ 	else if(water_layer>0) Neff=gravity*rho_ice*thickness*F;
+ 	else _error_("negative water layer thickness");
+ 	if(Neff<0) Neff=0;
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 21739)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 21740)
+@@ -780,9 +780,13 @@
+ 	/*Friction law variables*/
+ 	switch(frictionlaw){
+ 		case 1:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if(FrictionCoupling==1){
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
+ 			break;
+ 		case 2:
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+@@ -793,7 +797,7 @@
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+-			if(FrictionCoupling==0){
++			if(FrictionCoupling==1){
+ 				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
+ 			}
+ 			break;
+@@ -892,7 +896,7 @@
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 	if(frictionlaw==5) parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum));
+ 	if(frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+ 
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21739)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21740)
+@@ -156,9 +156,13 @@
+ 	/*Friction law variables*/
+ 	switch(frictionlaw){
+ 		case 1:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if (FrictionCoupling==1){
++			  iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
+ 			break;
+ 		case 2:
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+@@ -169,8 +173,8 @@
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+-			if (FrictionCoupling==0){
+-				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			if (FrictionCoupling==1){
++			  iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
+ 			}
+ 			break;
+ 		case 4:
+@@ -219,7 +223,8 @@
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++
+ }/*}}}*/
+ 
+ /*Finite Element Analysis*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21739)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21740)
+@@ -173,9 +173,13 @@
+ 	/*Friction law variables*/
+ 	switch(frictionlaw){
+ 		case 1:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if (FrictionCoupling==1){
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
+ 			break;
+ 		case 2:
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+@@ -186,7 +190,7 @@
+ 			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+-			if (FrictionCoupling==0){
++			if (FrictionCoupling==1){
+ 				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
+ 			}
+ 			break;
+@@ -244,7 +248,7 @@
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 	if(frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21740-21741.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21740-21741.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21740-21741.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21740)
++++ ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21741)
+@@ -89,16 +89,16 @@
+ 		/*compute elastic green function for a range of angles*/
+ 		iomodel->FetchData(&degacc,"md.slr.degacc");
+ 		M=reCast<int,IssmDouble>(180./degacc+1.);
+-		G_elastic=xNew<IssmDouble>(M);
+-		U_elastic=xNew<IssmDouble>(M);
+-		H_elastic=xNew<IssmDouble>(M);
++		G_elastic=xNew<IssmDouble>(M,"t");
++		U_elastic=xNew<IssmDouble>(M,"t");
++		H_elastic=xNew<IssmDouble>(M,"t");
+ 		
+ 		/*compute combined legendre + love number (elastic green function:*/
+ 		m=DetermineLocalSize(M,IssmComm::GetComm());
+ 		GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm());
+-		G_elastic_local=xNew<IssmDouble>(m);
+-		U_elastic_local=xNew<IssmDouble>(m);
+-		H_elastic_local=xNew<IssmDouble>(m);
++		G_elastic_local=xNew<IssmDouble>(m,"t");
++		U_elastic_local=xNew<IssmDouble>(m,"t");
++		H_elastic_local=xNew<IssmDouble>(m,"t");
+ 
+ 		for(int i=lower_row;i<upper_row;i++){
+ 			IssmDouble alpha,x;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21741-21742.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21741-21742.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21741-21742.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21741)
++++ ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21742)
+@@ -89,16 +89,34 @@
+ 		/*compute elastic green function for a range of angles*/
+ 		iomodel->FetchData(&degacc,"md.slr.degacc");
+ 		M=reCast<int,IssmDouble>(180./degacc+1.);
++
++		// AD performance is sensitive to calls to ensurecontiguous.
++		// // Providing "t" will cause ensurecontiguous to be called.
++		#ifdef _HAVE_AD_
+ 		G_elastic=xNew<IssmDouble>(M,"t");
+ 		U_elastic=xNew<IssmDouble>(M,"t");
+ 		H_elastic=xNew<IssmDouble>(M,"t");
++		#else
++		G_elastic=xNew<IssmDouble>(M);
++		U_elastic=xNew<IssmDouble>(M);
++		H_elastic=xNew<IssmDouble>(M);
++		#endif
++
+ 		
+ 		/*compute combined legendre + love number (elastic green function:*/
+ 		m=DetermineLocalSize(M,IssmComm::GetComm());
+ 		GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm());
++		// AD performance is sensitive to calls to ensurecontiguous.
++		// // Providing "t" will cause ensurecontiguous to be called.
++		#ifdef _HAVE_AD_
+ 		G_elastic_local=xNew<IssmDouble>(m,"t");
+ 		U_elastic_local=xNew<IssmDouble>(m,"t");
+ 		H_elastic_local=xNew<IssmDouble>(m,"t");
++		#else
++		G_elastic_local=xNew<IssmDouble>(m);
++		U_elastic_local=xNew<IssmDouble>(m);
++		H_elastic_local=xNew<IssmDouble>(m);
++		#endif
+ 
+ 		for(int i=lower_row;i<upper_row;i++){
+ 			IssmDouble alpha,x;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21742-21743.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21742-21743.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21742-21743.diff	(revision 22755)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/m/classes/friction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.m	(revision 21742)
++++ ../trunk-jpl/src/m/classes/friction.m	(revision 21743)
+@@ -8,8 +8,8 @@
+ 		coefficient = NaN;
+ 		p           = NaN;
+ 		q           = NaN;
+-		coupling    = 0;	%Silje
+-		effective_pressure = NaN;	%Silje
++		coupling    = 0;
++		effective_pressure = NaN;
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+@@ -46,7 +46,7 @@
+ 			md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+-			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);%Silje
++			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);
+ 			switch self.coupling
+ 				case 0
+ 				case 1
+@@ -62,8 +62,8 @@
+ 			fielddisplay(self,'coefficient','friction coefficient [SI]');
+ 			fielddisplay(self,'p','p exponent');
+ 			fielddisplay(self,'q','q exponent');
+-			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');%Silje
+-			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');%Silje
++			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
++			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			yts=md.constants.yts;
+@@ -72,7 +72,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer'); %Silje
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
+ 			switch self.coupling
+ 				case 0
+ 				case 1
+@@ -88,8 +88,8 @@
+ 			writejs1Darray(fid,[modelname '.friction.coefficient'],self.coefficient);
+ 			writejs1Darray(fid,[modelname '.friction.p'],self.p);
+ 			writejs1Darray(fid,[modelname '.friction.q'],self.q);
+-			writejs1Darray(fid,[modelname '.friction.coupling'],self.coupling);%Silje
+-			writejs1Darray(fid,[modelname '.friction.effective_pressure'],self.effective_pressure);%Silje
++			writejs1Darray(fid,[modelname '.friction.coupling'],self.coupling);
++			writejs1Darray(fid,[modelname '.friction.effective_pressure'],self.effective_pressure);
+ 
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21743-21744.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21743-21744.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21743-21744.diff	(revision 22755)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21743)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21744)
+@@ -52,9 +52,8 @@
+ 				}
+ 				/*Free ressources:*/
+ 				for(j=0;j<numgates;j++){
+-					char*       string  = gatenames[j];             xDelete<char>(string);
+-					char*       string2 = gatedefinitionstrings[j]; xDelete<char>(string2);
+-					IssmDouble* gate    = gatesegments[j];          xDelete<IssmDouble>(gate);
++					char*       string = gatenames[j];    xDelete<char>(string);
++					IssmDouble* gate   = gatesegments[j]; xDelete<IssmDouble>(gate);
+ 				}
+ 				xDelete<char*>(gatenames);
+ 				xDelete<IssmDouble*>(gatesegments);
+@@ -94,6 +93,14 @@
+ 
+ 				for(j=0;j<nummisfits;j++){
+ 
++					int obs_vector_type=0;
++					if ((misfit_observation_M_s[j]==iomodel->numberofvertices) || (misfit_observation_M_s[j]==iomodel->numberofvertices+1))obs_vector_type=1;
++					if ((misfit_observation_M_s[j]==iomodel->numberofelements) || (misfit_observation_M_s[j]==iomodel->numberofelements+1))obs_vector_type=2;
++					int weight_vector_type=0;
++					if ((misfit_weights_M_s[j]==iomodel->numberofvertices) || (misfit_weights_M_s[j]==iomodel->numberofvertices+1))weight_vector_type=1;
++					if ((misfit_weights_M_s[j]==iomodel->numberofelements) || (misfit_weights_M_s[j]==iomodel->numberofelements+1))weight_vector_type=2;
++
++
+ 					/*First create a misfit object for that specific string (misfit_model_string_s[j]):*/
+ 					output_definitions->AddObject(new Misfit(misfit_name_s[j],StringToEnumx(misfit_definitionstring_s[j]),StringToEnumx(misfit_model_string_s[j]),StringToEnumx(misfit_observation_string_s[j]),misfit_timeinterpolation_s[j],misfit_local_s[j],StringToEnumx(misfit_weights_string_s[j])));
+ 
+@@ -100,8 +107,8 @@
+ 					/*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/
+ 					for(int k=0;k<elements->Size();k++){
+ 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
+-						element->InputCreate(misfit_observation_s[j], iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],1,StringToEnumx(misfit_observation_string_s[j]),7);
+-						element->InputCreate(misfit_weights_s[j], iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],1,StringToEnumx(misfit_weights_string_s[j]),7);
++						element->InputCreate(misfit_observation_s[j], iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],obs_vector_type,StringToEnumx(misfit_observation_string_s[j]),7);
++						element->InputCreate(misfit_weights_s[j], iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],weight_vector_type,StringToEnumx(misfit_weights_string_s[j]),7);
+ 					}
+ 
+ 				}
+@@ -211,7 +218,7 @@
+ 				
+ 				/*masscon variables: */
+ 				char**       masscon_name_s             = NULL;    
+-				int*         masscon_definitionenum_s             = NULL;    
++				char**		 masscon_definitionstring_s		= NULL;    
+ 				char**       masscon_namex_s             = NULL;    
+ 				char**       masscon_namey_s             = NULL;    
+ 				IssmDouble*  masscon_alpha_s     = NULL;
+@@ -220,7 +227,7 @@
+ 
+ 				/*Fetch names and multiplicators, etc ... (see src/m/classes/masscon_axpby.m): */
+ 				iomodel->FetchMultipleData(&masscon_name_s,&num,          "md.massconaxpby.name");
+-				iomodel->FetchMultipleData(&masscon_definitionenum_s,&num,"md.massconaxpby.definitionenum");
++				iomodel->FetchMultipleData(&masscon_definitionstring_s,&num,"md.massconaxpby.definitionstring");
+ 				iomodel->FetchMultipleData(&masscon_namex_s,&num,         "md.massconaxpby.namex");
+ 				iomodel->FetchMultipleData(&masscon_namey_s,&num,         "md.massconaxpby.namey");
+ 				iomodel->FetchMultipleData(&masscon_alpha_s,&num,         "md.massconaxpby.alpha");
+@@ -228,7 +235,7 @@
+ 				for(j=0;j<num;j++){
+ 
+ 					/*Create a masscon axpyb object: */
+-					output_definitions->AddObject(new Massconaxpby(masscon_name_s[j],masscon_definitionenum_s[j],masscon_namex_s[j],masscon_namey_s[j],masscon_alpha_s[j],masscon_beta_s[j]));
++					output_definitions->AddObject(new Massconaxpby(masscon_name_s[j],StringToEnumx(masscon_definitionstring_s[j]),masscon_namex_s[j],masscon_namey_s[j],masscon_alpha_s[j],masscon_beta_s[j]));
+ 
+ 				}
+ 
+@@ -235,14 +242,15 @@
+ 				/*Free ressources:*/
+ 				for(j=0;j<num;j++){
+ 					char* string=NULL;
++					string = masscon_definitionstring_s[j];    xDelete<char>(string);
+ 					string = masscon_name_s[j];    xDelete<char>(string);
+ 					string = masscon_namex_s[j];    xDelete<char>(string);
+ 					string = masscon_namey_s[j];    xDelete<char>(string);
+ 				}
++				xDelete<char*>(masscon_definitionstring_s);
+ 				xDelete<char*>(masscon_name_s);
+ 				xDelete<char*>(masscon_namex_s);
+ 				xDelete<char*>(masscon_namey_s);
+-				xDelete<int>(masscon_definitionenum_s);
+ 				xDelete<IssmDouble>(masscon_alpha_s);
+ 				xDelete<IssmDouble>(masscon_beta_s);
+ 				/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21744-21745.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21744-21745.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21744-21745.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/classes/massconaxpby.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massconaxpby.m	(revision 21744)
++++ ../trunk-jpl/src/m/classes/massconaxpby.m	(revision 21745)
+@@ -2,7 +2,7 @@
+ %
+ %   Usage:
+ %      massconaxpby=massconaxpby();
+-%      massconsumaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5); 
++%      massconaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5); 
+ % 
+ %   where name is the name of the massconaxpby object, namex is the name of the first masscon, namey the name of the second masscon and alpha,beta the 
+ %         multiplicators. The meaning of axpby here is: resulting masscon is the linear combination (alpha *x + beta * y) 
+@@ -76,13 +76,12 @@
+ 		end % }}}
+ 		function md = marshall(self,prefix,md,fid) % {{{
+ 
+-		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
+-		WriteData(fid,prefix,'object',self,'fieldname','definitionstring','format','Integer');
+-		WriteData(fid,prefix,'object',self,'fieldname','namex','format','String');
+-		WriteData(fid,prefix,'object',self,'fieldname','namey','format','String');
+-		WriteData(fid,prefix,'object',self,'fieldname','alpha','format','Double');
+-		WriteData(fid,prefix,'object',self,'fieldname','beta','format','Double');
+-
++		WriteData(fid,prefix,'data',self.name,'name','md.massconaxpby.name','format','String');
++		WriteData(fid,prefix,'data',self.definitionstring,'name','md.massconaxpby.definitionstring','format','String');
++		WriteData(fid,prefix,'data',self.namex,'name','md.massconaxpby.namex','format','String');
++		WriteData(fid,prefix,'data',self.namey,'name','md.massconaxpby.namey','format','String');
++		WriteData(fid,prefix,'data',self.alpha,'name','md.massconaxpby.alpha','format','Double');
++		WriteData(fid,prefix,'data',self.beta,'name','md.massconaxpby.beta','format','Double');
+ 		end % }}}
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21745-21746.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21745-21746.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21745-21746.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 21745)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 21746)
+@@ -53,3 +53,26 @@
+ 	/*Assign output pointers:*/
+ 	*pvector=vector;
+ }
++
++void GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name){
++
++	int interpolation_type;
++	/*this one is special: we don't specify the type, but let the nature of the inputs dictace. 
++	 * P0 -> ElementSIdEnum, P1 ->VertexSIdEnum: */
++	
++	/*We go find the input of the first element, and query its interpolation type: */
++	Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(0));
++	Input* input=element->GetInput(name); 
++	if (!input) _error_("could not find input: " << name);
++
++	interpolation_type=input->GetInputInterpolationType(); 
++	if(interpolation_type==P0Enum){
++		*pvector_size=femmodel->elements->NumberOfElements();
++		GetVectorFromInputsx(pvector,femmodel,name, ElementSIdEnum);
++	}
++	else if(interpolation_type==P1Enum){
++		*pvector_size=femmodel->vertices->NumberOfVertices();
++		GetVectorFromInputsx(pvector,femmodel,name, VertexSIdEnum);
++	}
++	else _error_("interpolation type : " << interpolation_type << " not supported yet!");
++}
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 21745)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 21746)
+@@ -9,5 +9,6 @@
+ /* local prototypes: */
+ void	GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type);
+ void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
++void    GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name);
+ 
+ #endif  /* _GETVECTORFROMINPUTSXX_H */
Index: /issm/oecreview/Archive/21724-22754/ISSM-21746-21747.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21746-21747.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21746-21747.diff	(revision 22755)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 21746)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 21747)
+@@ -18,9 +18,8 @@
+ #include "../classes/gauss/Gauss.h"
+ /*}}}*/
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+-void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
++void	GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+ 
+-
+ class Misfit: public Object, public Definition{
+ 
+ 	public: 
+@@ -174,6 +173,7 @@
+ 				 IssmDouble* model = NULL;
+ 				 IssmDouble* observation= NULL;
+ 				 IssmDouble* weights= NULL;
++				 int msize,osize,wsize;
+ 				 
+ 				 /*Are we transient?:*/
+ 				 if (time==0){
+@@ -180,16 +180,16 @@
+ 					 IssmDouble misfit_t=0.;
+ 					 
+ 					 /*get global vectors: */
+-					 GetVectorFromInputsx(&model,femmodel,model_enum,VertexSIdEnum);
+-					 GetVectorFromInputsx(&observation,femmodel,observation_enum,VertexSIdEnum);
+-					 GetVectorFromInputsx(&weights,femmodel,weights_enum,VertexSIdEnum);
++					 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
++					 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
++					 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
+ 
+ 					 int count=0;
+-					 for (int i=0;i<femmodel->vertices->NumberOfVertices();i++){
++					 for (int i=0;i<msize;i++){
+ 						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
+ 						 if (weights[i]!=0)count++;
+ 					 }
+-					 misfit=sqrt(misfit_t)/count;
++					 misfit=sqrt(misfit_t/count);
+ 
+ 					 /*Free ressources:*/
+ 					 xDelete<IssmDouble>(model);
+@@ -208,15 +208,16 @@
+ 					 if(this->lock)return misfit/(time-starttime);
+ 
+ 					 /*get global vectors: */
+-					 GetVectorFromInputsx(&model,femmodel,model_enum,VertexSIdEnum);
+-					 GetVectorFromInputsx(&observation,femmodel,observation_enum,VertexSIdEnum);
+-					 GetVectorFromInputsx(&weights,femmodel,weights_enum,VertexSIdEnum);
+-
++					 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
++					 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
++					 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
++					 
+ 					 int count=0;
+-					 for (int i=0;i<femmodel->vertices->NumberOfVertices();i++){
++					 for (int i=0;i<msize;i++){
+ 						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
+ 						 if (weights[i]!=0)count++;
+ 					 }
++					 misfit=sqrt(misfit_t/count);
+ 
+ 					 /*Add this time's contribution to curent misfit: */
+ 					 misfit=sqrt(misfit_t)/count;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21747-21748.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21747-21748.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21747-21748.diff	(revision 22755)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21748)
+@@ -62,6 +62,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void){_error_("not implemented yet");};
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21748)
+@@ -62,6 +62,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){return P0Enum; };
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21748)
+@@ -65,6 +65,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void){_error_("not implemented yet");};
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TetraInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21748)
+@@ -65,6 +65,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21748)
+@@ -36,6 +36,7 @@
+ 		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index)=0;
++		virtual int  GetInputInterpolationType()=0;
+ 		virtual void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime)=0;
+ 		virtual int  InstanceEnum()=0; 
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21748)
+@@ -66,6 +66,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		int  GetResultArraySize(void){return 1;};
+ 		int  GetResultInterpolation(void);
+ 		int  GetResultNumberOfNodes(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21748)
+@@ -63,6 +63,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index);
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		int GetResultArraySize(void){_error_("not implemented yet");};
+ 		int GetResultInterpolation(void){_error_("not implemented yet");};
+ 		int GetResultNumberOfNodes(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21748)
+@@ -63,6 +63,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		IssmDouble InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
+ 		IssmDouble Max(void){_error_("Max not implemented for integers");};
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21748)
+@@ -60,6 +60,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void){_error_("InfinityNorm not implemented for booleans");};
+ 		IssmDouble Max(void){_error_("Max not implemented for booleans");};
+ 		IssmDouble MaxAbs(void){_error_("Max not implemented for booleans");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21748)
+@@ -64,6 +64,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
++		int  GetInputInterpolationType(){return interpolation_type;};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21748)
+@@ -62,6 +62,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21747)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21748)
+@@ -68,6 +68,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time);
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
++		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		Input* GetTimeInput(IssmDouble time);
+ 		void GetTimeValues(IssmDouble* values,IssmDouble time){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21748-21749.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21748-21749.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21748-21749.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21749)
+@@ -240,6 +240,9 @@
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+  	#ifdef _HAVE_ADOLC_
++	if(VerboseMProcessor()) _printf0_("   starting autodiff parameters \n");
+ 	CreateParametersAutodiff(parameters,iomodel);
++	if(VerboseMProcessor()) _printf0_("   ending autodiff parameters \n");
++
+ 	#endif
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-21749-21750.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21749-21750.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21749-21750.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21749)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21750)
+@@ -1171,7 +1171,7 @@
+ 			xDelete<uint8_t>(rawmatrix);
+ 
+ 			/*read time now*/
+-			IssmPDouble* timematrix=xNew<IssmDouble>(N);
++			IssmPDouble* timematrix=xNew<IssmPDouble>(N);
+ 			if(my_rank==0) if(fread(timematrix,N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read time in compressed matrix");
+ 			ISSM_MPI_Bcast(timematrix,N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21750-21751.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21750-21751.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21750-21751.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 21750)
++++ ../trunk-jpl/configure.ac	(revision 21751)
+@@ -19,6 +19,7 @@
+ AC_PROG_CPP
+ AC_PROG_CXX([icpc cl icl g++])
+ AC_PROG_F77([ifort g77 gfortran])
++AC_PROG_FC([gfortran])
+ 
+ #AUTOMAKE
+ #Initialize automake and declare foreign so that we don't need a ChangeLog, INSTALL, etc
Index: /issm/oecreview/Archive/21724-22754/ISSM-21751-21752.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21751-21752.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21751-21752.diff	(revision 22755)
@@ -0,0 +1,206 @@
+Index: ../trunk-jpl/src/m/classes/slr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/slr.m	(revision 21751)
++++ ../trunk-jpl/src/m/classes/slr.m	(revision 21752)
+@@ -23,6 +23,7 @@
+ 		elastic        = 0;
+ 		rotation       = 0;
+ 		ocean_area_scaling = 0;
++		steric_rate    = 0; %rate of ocean expansion from steric effects. 
+ 		degacc         = 0;
+ 		requested_outputs      = {};
+ 		transitions    = {};
+@@ -67,7 +68,11 @@
+ 
+ 		%numerical discretization accuracy
+ 		self.degacc=.01;
+-		
++
++		%steric: 
++		self.steric_rate=0;
++	
++	
+ 		%output default:
+ 		self.requested_outputs={'default'};
+ 
+@@ -92,6 +97,7 @@
+ 			md = checkfield(md,'fieldname','slr.reltol','size',[1 1]);
+ 			md = checkfield(md,'fieldname','slr.abstol','size',[1 1]);
+ 			md = checkfield(md,'fieldname','slr.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'fieldname','slr.steric_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','slr.degacc','size',[1 1],'>=',1e-10);
+ 			md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
+ 
+@@ -133,6 +139,7 @@
+ 			fielddisplay(self,'elastic','elastic earth graviational potential perturbation');
+ 			fielddisplay(self,'rotation','earth rotational potential perturbation');
+ 			fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
++			fielddisplay(self,'steric_rate','rate of steric ocean expansion (in mm/yr)'); 
+ 			fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions');
+ 			fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
+ 			fielddisplay(self,'requested_outputs','additional outputs requested');
+@@ -158,6 +165,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','steric_rate','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
+ 			
+@@ -191,6 +199,7 @@
+ 			writejsdouble(fid,[modelname '.slr.elastic'],self.elastic);
+ 			writejsdouble(fid,[modelname '.slr.rotation'],self.rotation);
+ 			writejsdouble(fid,[modelname '.slr.ocean_area_scaling'],self.ocean_area_scaling);
++			writejs1Darray(fid,[modelname '.slr.steric_rate'],self.steric_rate);
+ 			writejsdouble(fid,[modelname '.slr.degacc'],self.degacc);
+ 			writejscellstring(fid,[modelname '.slr.requested_outputs'],self.requested_outputs);
+ 			writejscellarray(fid,[modelname '.slr.transitions'],self.transitions);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21751)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21752)
+@@ -802,6 +802,7 @@
+ 	SealevelrisePolarMoiEnum, 
+ 	SealevelriseAngularVelocityEnum,
+ 	SealevelriseOceanAreaScalingEnum,
++	SealevelriseStericRateEnum,
+ 	SealevelriseGElasticEnum,
+ 	SealevelriseUElasticEnum,
+ 	SealevelriseHElasticEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21751)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21752)
+@@ -782,6 +782,7 @@
+ 		case SealevelrisePolarMoiEnum : return "SealevelrisePolarMoi";
+ 		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
+ 		case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
++		case SealevelriseStericRateEnum : return "SealevelriseStericRate";
+ 		case SealevelriseGElasticEnum : return "SealevelriseGElastic";
+ 		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
+ 		case SealevelriseHElasticEnum : return "SealevelriseHElastic";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21751)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21752)
+@@ -800,6 +800,7 @@
+ 	      else if (strcmp(name,"SealevelrisePolarMoi")==0) return SealevelrisePolarMoiEnum;
+ 	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
+ 	      else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
++	      else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
+ 	      else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
+ 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+ 	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+-	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
++	      if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
++	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+ 	      else if (strcmp(name,"Seg")==0) return SegEnum;
+ 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+Index: ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21751)
++++ ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21752)
+@@ -35,6 +35,7 @@
+ 	iomodel->FetchDataToInput(elements,"md.mask.land_levelset",MaskLandLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,"md.slr.deltathickness",SealevelriseDeltathicknessEnum);
+ 	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
++	iomodel->FetchDataToInput(elements,"md.slr.steric_rate",SealevelriseStericRateEnum);
+ 
+ }/*}}}*/
+ void SealevelriseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+Index: ../trunk-jpl/src/c/cores/sealevelrise_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 21751)
++++ ../trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 21752)
+@@ -14,6 +14,7 @@
+ 	Vector<IssmDouble> *Sg    = NULL;
+ 	Vector<IssmDouble> *Sg_absolute  = NULL; 
+ 	Vector<IssmDouble> *Sg_eustatic  = NULL; 
++	Vector<IssmDouble> *steric_rate_g  = NULL; 
+ 	Vector<IssmDouble> *U_radial  = NULL; 
+ 	Vector<IssmDouble> *U_north   = NULL; 
+ 	Vector<IssmDouble> *U_east    = NULL; 
+@@ -32,6 +33,7 @@
+ 	IssmDouble          *xx     = NULL;
+ 	IssmDouble          *yy     = NULL;
+ 	IssmDouble          *zz     = NULL;
++	IssmDouble          dt;
+ 
+ 	/*Recover some parameters: */
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+@@ -39,7 +41,7 @@
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&isslr,TransientIsslrEnum);
+ 	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
+-
++	
+ 	/*first, recover lat,long and radius vectors from vertices: */
+ 	VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical); 
+ 
+@@ -79,11 +81,9 @@
+ 		Sg_eustatic=sealevelrise_core_eustatic(femmodel); //generalized eustatic (Farrel and Clark, Eq 4, 1st, 3rd and 4rd terms on the RHS.
+ 
+ 		Sg=sealevelrise_core_noneustatic(femmodel,Sg_eustatic); //ocean loading tems  (2nd and 5th terms on the RHS of Farrel and Clark)
+-		
+-		/*get results into elements:*/
+-		//InputUpdateFromSolutionx(femmodel,Sg);		// from Eric 
+-		InputUpdateFromVectorx(femmodel,Sg,SealevelEnum,VertexSIdEnum);
+ 
++				
++	
+ 		/*compute other geodetic signatures, such as absolute sea level chagne, components of 3-D crustal motion: */
+ 		/*Initialize:*/
+ 		U_radial = new Vector<IssmDouble>(gsize);
+@@ -94,6 +94,11 @@
+ 		/*call the geodetic main modlule:*/ 
+ 		femmodel->SealevelriseGeodetic(U_radial,U_north,U_east,Sg,latitude,longitude,radius,xx,yy,zz); 
+ 
++		/*Now deal with steric ocean expansion by just shifting Sg by a spatial rate pattern : */
++		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++		GetVectorFromInputsx(&steric_rate_g,femmodel,SealevelriseStericRateEnum,VertexPIdEnum);
++		Sg->AXPY(steric_rate_g,dt);
++		
+ 		/*compute: absolute sea level change = relative sea level change + vertical motion*/
+ 		Sg->Copy(Sg_absolute); Sg_absolute->AXPY(U_radial,1); 
+ 		
+@@ -101,7 +106,8 @@
+ 		InputUpdateFromVectorx(femmodel,U_radial,SealevelUmotionEnum,VertexSIdEnum);	// radial displacement 
+ 		InputUpdateFromVectorx(femmodel,U_north,SealevelNmotionEnum,VertexSIdEnum);	// north motion 
+ 		InputUpdateFromVectorx(femmodel,U_east,SealevelEmotionEnum,VertexSIdEnum);		// east motion 
+-		InputUpdateFromVectorx(femmodel,Sg_absolute,SealevelAbsoluteEnum,VertexSIdEnum);
++		InputUpdateFromVectorx(femmodel,Sg_absolute,SealevelAbsoluteEnum,VertexSIdEnum); //absolute sea level
++		InputUpdateFromVectorx(femmodel,Sg,SealevelEnum,VertexSIdEnum); //relative sea level
+ 		
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving results\n");
+@@ -118,6 +124,7 @@
+ 		delete U_north;
+ 		delete U_east;
+ 		delete Sg_absolute;
++		delete steric_rate_g;
+ 		if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21752-21753.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21752-21753.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21752-21753.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/test2002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2002.m	(revision 21752)
++++ ../trunk-jpl/test/NightlyRun/test2002.m	(revision 21753)
+@@ -8,6 +8,7 @@
+ %slr loading:  {{{
+ md.slr.deltathickness=zeros(md.mesh.numberofelements,1);
+ md.slr.sealevel=zeros(md.mesh.numberofvertices,1);
++md.slr.steric_rate=zeros(md.mesh.numberofvertices,1);
+ %antarctica
+ late=sum(md.mesh.lat(md.mesh.elements),2)/3;
+ longe=sum(md.mesh.long(md.mesh.elements),2)/3;
+Index: ../trunk-jpl/test/NightlyRun/test2003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2003.m	(revision 21752)
++++ ../trunk-jpl/test/NightlyRun/test2003.m	(revision 21753)
+@@ -8,6 +8,7 @@
+ %slr loading:  {{{
+ md.slr.deltathickness=zeros(md.mesh.numberofelements,1);
+ md.slr.sealevel=zeros(md.mesh.numberofvertices,1);
++md.slr.steric_rate=zeros(md.mesh.numberofvertices,1);
+ %antarctica
+ late=sum(md.mesh.lat(md.mesh.elements),2)/3;
+ longe=sum(md.mesh.long(md.mesh.elements),2)/3;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21762-21763.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21762-21763.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21762-21763.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/plot/plot_unit.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.py	(revision 21762)
++++ ../trunk-jpl/src/m/plot/plot_unit.py	(revision 21763)
+@@ -93,8 +93,6 @@
+ 				triangles=mpl.tri.Triangulation(x,y,elements)
+ 			tri=ax.tripcolor(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha,edgecolors=edgecolor)
+ 		else:
+-
+-
+ 			#first deal with colormap
+ 			loccmap = plt.cm.ScalarMappable(cmap=cmap)
+ 			loccmap.set_array([min(data),max(data)])
+@@ -151,7 +149,8 @@
+ 				triangles=mpl.tri.Triangulation(x,y,elements,EltMask)
+ 			else:
+ 				triangles=mpl.tri.Triangulation(x,y,elements)
+-			tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha)
++			#tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha)
++			tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha,extend='both')
+ 			if edgecolor != 'None':
+ 				ax.triplot(x,y,elements,color=edgecolor)
+ 		else:
Index: /issm/oecreview/Archive/21724-22754/ISSM-21763-21764.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21763-21764.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21763-21764.diff	(revision 22755)
@@ -0,0 +1,244 @@
+Index: ../trunk-jpl/src/m/classes/clusters/localpfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/localpfe.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21764)
+@@ -0,0 +1,239 @@
++%localpfe cluster class definition
++%
++%   Usage:
++%      cluster=localpfe('name','astrid','np',3);
++%      cluster=localpfe('name',oshostname(),'np',3,'login','username');
++
++classdef localpfe
++	properties (SetAccess=public) 
++		% {{{
++		name          = '';
++		login         = '';
++		np            = 1;
++		port          = 0;
++		interactive   = 1;
++		codepath      = [IssmConfig('ISSM_PREFIX') '/bin'];
++		etcpath       = [issmdir() '/etc'];
++		executionpath = [issmdir() '/execution'];
++		valgrind      = [issmdir() '/externalpackages/valgrind/install/bin/valgrind'];
++		valgrindlib   = [issmdir() '/externalpackages/valgrind/install/lib/libmpidebug.so'];
++		valgrindsup   = [issmdir() '/externalpackages/valgrind/issm.supp'];
++		verbose       = 1;
++		shell         = '/bin/sh';
++		%}}}
++	end
++	methods
++		function cluster=localpfe(varargin) % {{{
++
++			%Change the defaults if ispc
++			if ispc,
++				cluster.codepath      = [issmdir() '\bin'];
++				cluster.etcpath       = [issmdir() '\etc'];
++				cluster.executionpath = [issmdir() '\execution'];
++			end
++
++			%use provided options to change fields
++			options=pairoptions(varargin{:});
++
++			%get name
++			cluster.name=getfieldvalue(options,'name',oshostname());
++
++			%initialize cluster using user settings if provided
++			if (exist([cluster.name '_settings'])==2), eval([cluster.name '_settings']); end
++
++			%OK get other fields
++			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
++		end
++		%}}}
++		function disp(cluster) % {{{
++			%  display the object
++			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
++			disp(sprintf('    name: %s',cluster.name));
++			disp(sprintf('    login: %s',cluster.login));
++			disp(sprintf('    np: %i',cluster.np));
++			disp(sprintf('    port: %i',cluster.port));
++			disp(sprintf('    codepath: %s',cluster.codepath));
++			disp(sprintf('    executionpath: %s',cluster.executionpath));
++			disp(sprintf('    etcpath: %s',cluster.etcpath));
++			disp(sprintf('    valgrind: %s',cluster.valgrind));
++			disp(sprintf('    valgrindlib: %s',cluster.valgrindlib));
++			disp(sprintf('    valgrindsup: %s',cluster.valgrindsup));
++			disp(sprintf('    verbose: %s',cluster.verbose));
++			disp(sprintf('    shell: %s',cluster.shell));
++		end
++		%}}}
++		function md = checkconsistency(cluster,md,solution,analyses) % {{{
++			if cluster.np<1
++				md = checkmessage(md,['number of processors should be at least 1']);
++			end
++			if isnan(cluster.np),
++				md = checkmessage(md,'number of processors should not be NaN!');
++			end
++		end
++		%}}}
++		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota) % {{{
++
++			%write queuing script 
++			%what is the executable being called? 
++			executable='issm.exe';
++			if isdakota,
++				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
++				if (version>=6),
++					executable='issm_dakota.exe';
++				end
++			end
++
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#!%s\n',cluster.shell);
++			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s \n',cluster.np,cluster.codepath,executable,solution,cluster.executionpath,modelname);
++			fclose(fid);
++
++
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.errlog'],'w'); fclose(fid);
++				fid=fopen([modelname '.outlog'],'w'); fclose(fid);
++			end
++		end
++		%}}}
++		function BuildQueueScriptMultipleModels(cluster,dirname,modelname,solution,dirnames,modelnames,nps) % {{{
++		
++			%some checks: 
++			if isempty(modelname), error('BuildQueueScriptMultipleModels error message: need a non empty model name!');end
++
++			%what is the executable being called? 
++			executable='issm_slr.exe';
++
++			if ispc(), error('BuildQueueScriptMultipleModels not support yet on windows machines');end;
++			
++			%write queuing script 
++			fid=fopen([modelname '.queue'],'w');
++			
++			fprintf(fid,'#!%s\n',cluster.shell);
++
++			%number of cpus: 
++			mpistring=sprintf('mpiexec -np %i ',cluster.np);
++
++			%executable: 
++			mpistring=[mpistring sprintf('%s/%s ',cluster.codepath,executable)];
++			
++			%solution name: 
++			mpistring=[mpistring sprintf('%s ',solution)];
++
++			%execution directory and model name: 
++			mpistring=[mpistring sprintf('%s/%s %s',cluster.executionpath,dirname,modelname)];
++
++			%inform main executable of how many icecaps, glaciers and earth models are being run: 
++			mpistring=[mpistring sprintf(' %i ',length(dirnames))];
++			
++			%icecaps, glaciers and earth location, names and number of processors associated:
++			for i=1:length(dirnames),
++			mpistring=[mpistring sprintf(' %s/%s %s %i ',cluster.executionpath,dirnames{i},modelnames{i},nps{i})];
++			end
++
++			%log files: 
++			if ~cluster.interactive,
++				mpistring=[mpistring sprintf('2> %s.errlog> %s.outlog',modelname,modelname)];
++			end
++
++			%write this long string to disk: 
++			fprintf(fid,mpistring);
++			fclose(fid);
++
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.errlog'],'w'); fclose(fid);
++				fid=fopen([modelname '.outlog'],'w'); fclose(fid);
++			end
++		end
++		%}}}
++		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
++
++			%write queuing script 
++			if ~ispc(),
++
++				fid=fopen([modelname '.queue'],'w');
++				fprintf(fid,'#!/bin/sh\n');
++				if ~isvalgrind,
++					if cluster.interactive
++						fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s ',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
++					else
++						fprintf(fid,'mpiexec -np %i %s/kriging.exe %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname,modelname,modelname);
++					end
++				elseif isgprof,
++					fprintf(fid,'\n gprof %s/kriging.exe gmon.out > %s.performance',cluster.codepath,modelname);
++				else
++					%Add --gen-suppressions=all to get suppression lines
++					fprintf(fid,'LD_PRELOAD=%s \\\n',cluster.valgrindlib);
++					fprintf(fid,'mpiexec -np %i %s --leak-check=full --suppressions=%s %s/kriging.exe %s %s 2> %s.errlog >%s.outlog ',...
++						cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,[cluster.executionpath '/' modelname],modelname,modelname,modelname);
++				end
++				if ~io_gather, %concatenate the output files:
++					fprintf(fid,'\ncat %s.outbin.* > %s.outbin',modelname,modelname);
++				end
++				fclose(fid);
++
++			else % Windows
++
++				fid=fopen([modelname '.bat'],'w');
++				fprintf(fid,'@echo off\n');
++				if cluster.interactive
++					fprintf(fid,'"%s/issm.exe" %s "%s" %s ',cluster.codepath,solution,[cluster.executionpath '/' modelname],modelname);
++				else
++					fprintf(fid,'"%s/issm.exe" %s "%s" %s 2> %s.errlog >%s.outlog',...
++						cluster.codepath,solution,[cluster.executionpath '/' modelname],modelname,modelname,modelname);
++				end
++				fclose(fid);
++			end
++
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.errlog'],'w'); fclose(fid);
++				fid=fopen([modelname '.outlog'],'w'); fclose(fid);
++			end
++		end
++		%}}}
++		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
++			if ~ispc,
++
++				%compress the files into one zip.
++				compressstring=['tar -zcf ' dirname '.tar.gz '];
++				for i=1:numel(filelist),
++					compressstring = [compressstring ' ' filelist{i}];
++				end
++				if cluster.interactive,
++					compressstring = [compressstring ' ' modelname '.errlog ' modelname '.outlog '];
++				end
++				system(compressstring);
++
++				if cluster.verbose, disp('uploading input file and queueing script'); end
++				issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
++			end
++		end %}}}
++		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
++
++			%figure out what shell extension we will use:
++			if isempty(strfind(cluster.shell,'csh')),
++				shellext='sh';
++			else
++				shellext='csh';
++			end
++
++			if cluster.verbose, disp('launching solution sequence on remote cluster'); end
++
++			launchcommand=['cd ' cluster.executionpath ' && rm -rf *.lock && rm -rf ADOLC* && tar -zxf ' dirname '.tar.gz  && rm -rf *.tar.gz'];
++			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
++
++		end %}}}
++		function Download(cluster,dirname,filelist)% {{{
++
++			if ispc(),
++				%do nothing
++				return;
++			end
++
++			%copy files from cluster to current directory
++			issmscpin(cluster.name,cluster.login,cluster.port,cluster.executionpath,filelist);
++		end %}}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21764-21765.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21764-21765.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21764-21765.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/localpfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21764)
++++ ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21765)
+@@ -71,7 +71,7 @@
+ 			end
+ 		end
+ 		%}}}
+-		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota) % {{{
++		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+ 
+ 			%write queuing script 
+ 			%what is the executable being called? 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21765-21766.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21765-21766.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21765-21766.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/solve/waitonlock.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/waitonlock.m	(revision 21765)
++++ ../trunk-jpl/src/m/solve/waitonlock.m	(revision 21766)
+@@ -19,6 +19,9 @@
+ if isa(cluster,'pfe') && cluster.interactive>0
+ 	lockfilename  = [executionpath '/Interactive' num2str(cluster.interactive) '/' md.miscellaneous.name '.lock'];
+ 	logfilename   = [executionpath '/Interactive' num2str(cluster.interactive) '/' md.miscellaneous.name '.outlog'];
++elseif isa(cluster,'localpfe'),
++	lockfilename  = [executionpath '/' md.miscellaneous.name '.lock'];
++	logfilename   = [executionpath '/' md.miscellaneous.name '.outlog'];
+ else
+ 	lockfilename  = [executionpath '/' md.private.runtimename '/' md.miscellaneous.name '.lock'];
+ 	logfilename   = [executionpath '/' md.private.runtimename '/' md.miscellaneous.name '.outlog'];
Index: /issm/oecreview/Archive/21724-22754/ISSM-21766-21767.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21766-21767.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21766-21767.diff	(revision 22755)
@@ -0,0 +1,119 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 21766)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 21767)
+@@ -89,7 +89,7 @@
+ 
+ 		 end
+ 		 %}}}
+-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,ioceancoupling) % {{{
++		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+ 
+ 			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+ 
+@@ -115,7 +115,7 @@
+ 			 fprintf(fid,'#SBATCH -n %i \n',cluster.numnodes*cluster.cpuspernode);
+ 			 fprintf(fid,'#SBATCH -N %i \n',cluster.numnodes);
+ 			 fprintf(fid,'#SBATCH -t %02i:%02i:00 \n',floor(cluster.time/3600),floor(mod(cluster.time,3600)/60));
+-			 fprintf(fid,'#SBATCH -A s1010 \n\n');
++			 fprintf(fid,'#SBATCH -A s1690 \n\n');
+ 			 for i=1:numel(cluster.modules),
+ 				 fprintf(fid,['module load ' cluster.modules{i} '\n']);
+ 			 end
+@@ -126,6 +126,7 @@
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module load comp/intel-15.0.0.090\n');
+ 			 fprintf(fid,'module load mpi/impi-4.0.3.008\n');
++			 fprintf(fid,'module load other/cmake-3.8.2\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+ 			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 21766)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 21767)
+@@ -1319,11 +1319,7 @@
+ 	
+ 	dnl scalapack headers and libraries
+ 	if test "x$HAVE_SCALAPACK" == "xyes"; then
+-		if test x$VENDOR = xintel-discover; then
+-		 SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lmkl_scalapack_lp64"
+-		else
+-		 SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
+-		fi
++		SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
+ 		AC_DEFINE([_HAVE_SCALAPACK_],[1],[with Scalapack in ISSM src])
+ 		AC_SUBST([SCALAPACKLIB])
+ 	fi
+@@ -1348,25 +1344,18 @@
+ 	dnl blas-lapack headers and libraries
+ 	if test "x$HAVE_BLASLAPACK" == "xyes"; then
+ 		BLASLAPACKINCL=""
+-		if test x$VENDOR = xintel-discover; then
+-		   dnl works for intel 11
+-			dnl BLASLAPACKLIB=-L"$BLASLAPACK_ROOT -lmkl_lapack -lmkl -lguide -lpthread "
+-			dnl dnl works for intel 13
+-			BLASLAPACKLIB=-L"$BLASLAPACK_ROOT -lmkl_lapack95_lp64 -lmkl_rt " 
+-		else
+-			dnl: branch on whether we are running on windows or linux.
+-			case "${host_os}" in
+-				*cygwin*)
+-				BLASLAPACKLIB="-L`cygpath -m $BLASLAPACK_ROOT` -Wl,libf2cblas.lib  -Wl,libf2clapack.lib"
+-				;;
+-				*linux*)
+-				BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
+-				;;
+-				*darwin*)
+-				BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
+-				;;
+-			esac
+-		fi
++		dnl: branch on whether we are running on windows or linux.
++		case "${host_os}" in
++		*cygwin*)
++		  BLASLAPACKLIB="-L`cygpath -m $BLASLAPACK_ROOT` -Wl,libf2cblas.lib  -Wl,libf2clapack.lib"
++		  ;;
++		*linux*)
++		  BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
++		  ;;
++		*darwin*)
++		  BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
++		  ;;
++		esac
+ 		AC_DEFINE([_HAVE_BLASLAPACK_],[1],[with blas lapack in ISSM src])
+ 		AC_SUBST([BLASLAPACKLIB])
+ 		AC_SUBST([BLASLAPACKINCL])
+@@ -1471,11 +1460,7 @@
+ 	dnl blacs headers and libraries
+ 	if test "x$HAVE_BLACS" == "xyes"; then
+ 		BLACSINCL=""
+-		if test x$VENDOR = xintel-discover; then
+-		 BLACSLIB=-L"$BLACS_ROOT/ -lmkl_blacs_intelmpi_lp64"
+-		else
+-		 BLACSLIB=-L"$BLACS_ROOT/ -lblacs"
+-		fi
++		BLACSLIB=-L"$BLACS_ROOT/ -lblacs"
+ 		AC_DEFINE([_HAVE_BLACS_],[1],[with Blacs in ISSM src])
+ 		AC_SUBST([BLACSINCL])
+ 		AC_SUBST([BLACSLIB])
+Index: ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh	(revision 21766)
++++ ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh	(revision 21767)
+@@ -41,7 +41,7 @@
+ #SBATCH -J petscinstall # Job Name
+ #SBATCH -N 1
+ #SBATCH -n 1
+-#SBATCH -A s1010
++#SBATCH -A s1690
+ #SBATCH -t 00:01:00 # Run time (hh:mm:ss) - 1.5 hours
+ #SBATCH --qos=debug
+ #SBATCH -o petscinstall.outlog
+@@ -50,6 +50,7 @@
+ . /usr/share/modules/init/bash
+ module load comp/intel-15.0.0.090
+ module load mpi/impi-4.0.3.008
++module load other/cmake-3.8.2
+ 
+ export PATH="$PATH:."
+ export MPI_GROUP_MAX=64
Index: /issm/oecreview/Archive/21724-22754/ISSM-21767-21768.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21767-21768.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21767-21768.diff	(revision 22755)
@@ -0,0 +1,3168 @@
+Index: ../trunk-jpl/src/m/plot/webgl.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/webgl.js	(revision 21768)
+@@ -5,12 +5,10 @@
+ 	canvas = document.getElementById(options.getfieldvalue('canvasid'));
+ 	//var canvas = document.getElementById(options.getfieldvalue('canvasid'));
+ 	if (!canvas.initialized) {
+-		typedArraySliceSupport();
+ 		if (!isEmptyOrUndefined(canvas.draw) && canvas.draw.handler !== 0)	{ window.cancelAnimationFrame(canvas.draw.handler); }
+ 		if (!isEmptyOrUndefined(canvas.animation) && canvas.animation.handler !== 0) { clearInterval(canvas.animation.handler); }
+ 		initWebGL(canvas, options);
+ 		initializeMarker(canvas);
+-		canvas.nodes = [];
+ 		draw(canvas);
+ 		canvas.initialized = true;
+ 	}
+@@ -18,8 +16,8 @@
+ }
+ function initWebGL(canvas, options) { //{{{
+ 	//Initialize canvas.gl on page load, reusing gl context on additional runs
+-	var gl;
+-	if (!canvas.gl) {
++	var gl = canvas.gl;
++	if (isEmptyOrUndefined(gl)) {
+ 		gl = GL.create({canvas: canvas});
+ 		gl.enable(gl.DEPTH_TEST); // Enable depth testing
+ 		gl.depthFunc(gl.LEQUAL); // Near things obscure far things
+@@ -30,34 +28,35 @@
+ 		gl.textures = {};
+ 		
+ 		// Add event listeners for canvas
+-		var displayview = options.getfieldvalue('displayview', 'off') == 'on';
+-		var displayzoom = options.getfieldvalue('displayzoom', 'off') == 'on';
+-		var mc = new Hammer.Manager(canvas);
+-		
+-		mc.add( new Hammer.Tap({event: 'singletap' }) );
++		var displayview = options.getfieldvalue('displayview', 'off') === 'on';
++		var displayzoom = options.getfieldvalue('displayzoom', 'off') === 'on';
++		var mc = new Hammer(canvas);	
+ 		mc.add(new Hammer.Pan({threshold: 0, pointers: 0}));
+ 		mc.add(new Hammer.Pinch({threshold: 0})).recognizeWith(mc.get('pan'));
+-		mc.on('singletap', function (ev) {onTap(ev, canvas);});
++		mc.on('tap press', function (ev) {onTap(ev, canvas);});
+ 		mc.on('panstart panmove', function (ev) {onPan(ev, canvas, displayview);});
+-		mc.on('pinchstart pinchmove', function (ev) {onPinch(ev, canvas, displayview);});
+-		
++		mc.on('pinchstart pinchmove', function (ev) {onPinch(ev, canvas, displayview);});		
+ 		canvas.addEventListener('mousewheel', function (ev) {onZoom(ev, canvas, displayzoom)}, false);
+ 		canvas.addEventListener('DOMMouseScroll', function (ev) {onZoom(ev, canvas, displayzoom)}, false);
++		
++		//Add persistent state variables
++		canvas.nodes = {};
++		canvas.octrees = {};
++		canvas.unitNode = {};
++		canvas.unitData = {};
++		canvas.unitMovieData = {};
++		canvas.gl = gl;
++		canvas.rootPath = options.getfieldvalue('rootpath', '../../../js/');
++		canvas.id = options.getfieldvalue('canvasid', '.sim-canvas');
++		canvas.selector = $('#' + canvas.id);
++		canvas.textcanvas = null;
++		canvas.overlaycanvas = null;
++		
++		typedArraySliceSupport();
+ 	}
+-	else {
+-		gl = canvas.gl;
+-	}
+ 	
+-	// Add context state variables
+-	canvas.gl = gl;
+-	canvas.textcanvas = null;
+-	canvas.overlaycanvas = null;
+-	canvas.unitNode = {};
+-	canvas.unitData = {};
++	//Add context state variables
+ 	canvas.controlSensitivity = options.getfieldvalue('controlsensitivity', 1);
+-	canvas.id = options.getfieldvalue('canvasid', '.sim-canvas');
+-	canvas.rootPath = options.getfieldvalue('rootpath', '../../../js/');
+-	canvas.selector = $('#' + canvas.id);
+ 	var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor', 'lightcyan'));
+ 	if (backgroundcolor.ok) { canvas.backgroundcolor = [backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0]; }
+ 	else { throw Error(sprintf('s%s%s\n','initWebGL error message: cound not find out background color for curent canvas ', canvas)); }
+@@ -69,6 +68,7 @@
+ 		play: defaultFor(animation.play, true),
+ 		increment: defaultFor(animation.increment, true),
+ 		fps: defaultFor(animation.fps, 4),
++		interval: defaultFor(animation.interval, 1000 / animation.fps),
+ 		loop: defaultFor(animation.loop, true),
+ 		handler: defaultFor(animation.handler, 0)
+ 	}
+@@ -98,7 +98,8 @@
+ 	canvas.clouds = {
+ 		enabled: defaultFor(clouds.enabled, false),
+ 		height: defaultFor(clouds.height, 7500),
+-		quantity: defaultFor(clouds.quantity, 10)
++		quantity: defaultFor(clouds.quantity, 10),
++		hit: defaultFor(clouds.hit, {})
+ 	};
+ 	var dataMarkers = options.getfieldvalue('datamarkers', {});
+ 	canvas.dataMarkers = {
+@@ -110,7 +111,8 @@
+ 		animated: defaultFor(dataMarkers.animated, false),
+ 		labels: defaultFor(dataMarkers.labels, []),
+ 		font: defaultFor(dataMarkers.font, ''),
+-		marker: defaultFor(dataMarkers.marker, document.getElementById('sim-data-marker-' + canvas.id))
++		marker: defaultFor(dataMarkers.marker, document.getElementById('sim-data-marker-' + canvas.id)),
++		reposition: defaultFor(dataMarkers.reposition, true)
+ 	};
+ 	var draw = options.getfieldvalue('draw', {});
+ 	canvas.draw = {
+@@ -133,27 +135,23 @@
+ 	//Override with parameters from URL, if any
+ 	//TODO: Make permalinks more robust and less interdependent on UI
+ 	if (!canvas.usedparemters) {
+-		function getJsonFromUrl() {
+-			var query = location.search.substr(1);
+-			var result = {};
+-			query.split('&').forEach(function(part) {
+-				var item = part.split('=');
+-				result[item[0]] = decodeURIComponent(item[1]);
+-			});
+-			return result;
+-		}
+-		parameters = getJsonFromUrl();
+-		
+-		if (parameters['view']) {
+-			canvas.view = JSON.parse(parameters['view']);
+-		}
++		var parameters = {};
++		location.search.substr(1).split('&').forEach(function(part) {
++			var item = part.split('=');
++			parameters[item[0]] = decodeURIComponent(item[1]);
++		});
++
++		if (parameters['pos']) { canvas.view.position = JSON.parse(parameters['pos']); }
++		if (parameters['rot']) { canvas.view.rotation = JSON.parse(parameters['rot']); }
++		if (parameters['zoom']) { canvas.view.zoom = JSON.parse(parameters['zoom']); }
++		if (parameters['twod']) { canvas.view.twod = JSON.parse(parameters['twod']); }
+ 		if (parameters['initial']) {
+ 			initial = JSON.parse(parameters['initial']);
+ 			if (!initial) {
+-				if (typeof SolveGlacier == 'function') {
++				if (typeof SolveGlacier === 'function') {
+ 					SolveGlacier();
+ 				}
+-				if (typeof SolveSlr == 'function') {
++				if (typeof SolveSlr === 'function') {
+ 					SolveSlr();
+ 				}
+ 			}
+@@ -162,7 +160,11 @@
+ 	}
+ } //}}}
+ function generatePermalink() { //{{{
+-	var permalink = window.location.origin + window.location.pathname + '&view=' + JSON.stringify(canvas.view) + '&initial=' + JSON.stringify(initial);
++	var permalink = window.location.origin + window.location.pathname + '?'
++	+ '&pos=' + encodeURIComponent(JSON.stringify(canvas.view.position))
++	+ '&rot=' + encodeURIComponent(JSON.stringify(canvas.view.rotation)) 
++	+ '&zoom=' + encodeURIComponent(JSON.stringify(canvas.view.zoom))
++	+ '&twod=' + encodeURIComponent(JSON.stringify(canvas.view.twod));
+ 	window.prompt('Share this simulation: ', permalink);
+ } //}}}
+ function loadShaders(gl, rootPath) { //{{{
+@@ -181,83 +183,6 @@
+ 	}
+ 	return gl.textures[imageSource];
+ } //}}}
+-function Node(gl) { //{{{
+-	//Returns a Node object that contains default display states for webgl object. center represents pivot point of rotation.
+-	return {
+-		alpha: 1.0,
+-		buffers: [],
+-		cullFace: gl.BACK,
+-		disableDepthTest: false, 
+-		drawMode: gl.TRIANGLES,
+-		drawOrder: 0,
+-		enabled: true,
+-		enableCullFace: true,
+-		hideOcean: false,
+-		lineWidth: 1.0,
+-		maskEnabled: false,
+-		maskHeight: 150.0,
+-		maskColor: vec4.fromValues(0.0, 0.0, 1.0, 1.0),
+-		mesh: null,
+-		name: 'node',
+-		shaderName: 'Colored',
+-		shader: gl.shaders.Colored,
+-		texture: null,
+-		useIndexBuffer: true,
+-		center: vec3.create(), 
+-		scale: vec3.fromValues(1, 1, 1),
+-		rotation: vec3.create(),
+-		translation: vec3.create(),
+-		modelMatrix: mat4.create(),
+-		rotationMatrix: mat4.create(),
+-		inverseModelMatrix: mat4.create(),
+-		inverseRotationMatrix: mat4.create()
+-	};
+-} //}}}
+-function debugNodes(canvasid) { //{{{
+-	var canvasid = canvasid || '.sim-canvas';
+-	var nodes = document.getElementById(canvasid).nodes;
+-	console.log(canvasid, 'Nodes:');
+-	for (var node in nodes) {
+-		console.log('name: ', nodes[node].name, ' node: ', nodes[node], ' mesh: ', nodes[node].mesh, ' translation: ', nodes[node].translation, ' center:', nodes[node].center, ' rotation:', nodes[node].rotation);
+-	}
+-	return nodes;
+-} //}}}
+-function updateModelMatrix(node) { //{{{
+-	var modelMatrix = mat4.create();
+-
+-	var translationMatrix = mat4.create();
+-	mat4.translate(translationMatrix, translationMatrix, vec3.negate(vec3.create(), node.center)); //scale/rotation centering
+-	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
+-	
+-	var scaleMatrix = mat4.create();
+-	mat4.scale(scaleMatrix, scaleMatrix, node.scale);
+-	mat4.multiply(modelMatrix, scaleMatrix, modelMatrix);
+-	
+-	var rotationMatrix = mat4.create();
+-	var zRotationMatrix = mat4.create();	
+-	mat4.rotate(zRotationMatrix, zRotationMatrix, DEG2RAD * node.rotation[2], [0.0, 0.0, 1.0]);
+-	mat4.multiply(rotationMatrix, zRotationMatrix, rotationMatrix);
+-	var yRotationMatrix = mat4.create();	
+-	mat4.rotate(yRotationMatrix, yRotationMatrix, DEG2RAD * node.rotation[1], [0.0, 1.0, 0.0]);
+-	mat4.multiply(rotationMatrix, yRotationMatrix, rotationMatrix);
+-	var xRotationMatrix = mat4.create();	
+-	mat4.rotate(xRotationMatrix, xRotationMatrix, DEG2RAD * node.rotation[0], [1.0, 0.0, 0.0]);
+-	mat4.multiply(rotationMatrix, xRotationMatrix, rotationMatrix);
+-	mat4.multiply(modelMatrix, rotationMatrix, modelMatrix);	
+-	
+-	mat4.identity(translationMatrix);
+-	mat4.translate(translationMatrix, translationMatrix, node.center); //relative translation
+-	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
+-	
+-	mat4.identity(translationMatrix);
+-	mat4.translate(translationMatrix, translationMatrix, node.translation); //absolute translation
+-	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
+-	
+-	node.modelMatrix = modelMatrix;
+-	node.inverseModelMatrix = mat4.invert(mat4.create(), modelMatrix);
+-	node.rotationMatrix = rotationMatrix;
+-	node.inverseRotationMatrix = mat4.invert(mat4.create(), rotationMatrix);
+-} //}}}
+ function clamp(value, min, max) { //{{{
+ 	return Math.max(min, Math.min(value, max));
+ } //}}}
+@@ -265,15 +190,21 @@
+ 	return typeof name !== 'undefined' ? name : value;
+ } //}}}
+ function isEmptyOrUndefined(object) { //{{{
+-	return object === undefined || Object.getOwnPropertyNames(object).length === 0;
++	return object === undefined || isEmpty(object);
+ } //}}}
++function isEmpty(object) { //{{{
++	for (var key in object) {
++		return false;
++	}
++	return true;
++} //}}}
+ function recover(canvasid, name, value) { //{{{
+ 	//Traverse canvas object tree for property defined by dot delimited string, returning it, or a default value if it is not found.
+ 	var object = document.getElementById(canvasid);
+ 	var properties = name.split('.');
+-	for (var i = 0; i < properties.length; ++i) {
++	for (var i = 0; i < properties.length; i++) {
+ 		object = object[properties[i]];
+-		if (typeof object === 'undefined') { break; }
++		if (isEmptyOrUndefined(object)) { break; }
+     }
+ 	return defaultFor(object, value);
+ } //}}}
+@@ -325,26 +256,51 @@
+ function onTap(ev, canvas) { //{{{
+ 	//Sets up a marker on a canvas that will track a point on the mesh. Can be dismissed by closing the display or clicking the marker.
+ 	ev.preventDefault();
+-	if (!canvas.dataMarkers.enabled) { return; }
+-	var hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY);
+-	canvas.dataMarkers.marker.hit = hit;
++	
++	if (canvas.clouds.enabled) {
++		for (var i = 0; i < canvas.clouds.quantity; i++) {
++			raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes["clouds" + i]);
++		}
++	}
++	var hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.unitNode);
++	if ('cities' in canvas.nodes) {
++		var hitCities = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes.cities);
++		canvas.nodes.cities.hit = hitCities;
++		updateCities(canvas);
++	}
++
+ 	canvas.brush.hit = hit;
+-	updateMarker(canvas, true);
++	
++	if (canvas.dataMarkers.enabled) {
++		canvas.dataMarkers.marker.selector.closed = false;
++		canvas.dataMarkers.marker.hit = hit;
++		updateMarker(canvas, true);
++	}
++	
+ 	brushModify(canvas);
+ } //}}}
+ function onPan(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+ 	
+-	if (canvas.dataMarkers.enabled == 'on') {
+-		canvas.brush.hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY);
+-		brushModify(canvas);
++	if (canvas.dataMarkers.enabled) {
++		if (!isEmptyOrUndefined(canvas.unitNode)) {
++			canvas.brush.hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.unitNode);
++			brushModify(canvas);
++		}
+ 	}
+ 	
+-	if (ev.type == 'panstart') {
++	if (canvas.clouds.enabled) {
++		if (!isEmptyOrUndefined(canvas.nodes['overlay'])) {
++			canvas.clouds.hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes['overlay']);
++			updateClouds(canvas);
++		}
++	}
++	
++	if (ev.type === 'panstart') {
+ 		canvas.lastDeltaX = 0;
+ 		canvas.lastDeltaY = 0;
+ 	}
+-	if (ev.srcEvent.shiftKey || ev.pointers.length == 2) {
++	if (ev.srcEvent.shiftKey || ev.pointers.length === 2) {
+ 		if (!canvas.view.panningEnabled) return;
+ 		var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
+ 		var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
+@@ -360,7 +316,7 @@
+ 	}
+ 	
+ 	else {
+-		canvas.view.rotation[0] += (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth * -2 * canvas.controlSensitivity * RAD2DEG;
++		canvas.view.rotation[0] += (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth * 2 * canvas.controlSensitivity * RAD2DEG;
+ 		canvas.view.rotation[1] += (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight * -2 * canvas.controlSensitivity * RAD2DEG;
+ 		
+ 		if (canvas.view.rotation[0] > 360) { canvas.view.rotation[0] -= 360; };
+@@ -374,13 +330,13 @@
+ 	canvas.lastDeltaX = ev.deltaX;
+ 	canvas.lastDeltaY = ev.deltaY;
+ 	
+-	repositionMarker(canvas);
++	canvas.dataMarkers.reposition = true;
+ 	
+ 	if (displaylog) { console.log(canvas.view.rotation); }
+ } //}}}
+ function onPinch(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+-	if (ev.type == 'pinchstart') { canvas.view.lastZoom = canvas.view.zoom; }
++	if (ev.type === 'pinchstart') { canvas.view.lastZoom = canvas.view.zoom; }
+ 	else { modifyZoom(ev.scale * canvas.view.lastZoom, canvas, displaylog); }
+ } //}}}
+ function onZoom(ev, canvas, displaylog) { //{{{
+@@ -390,7 +346,7 @@
+ } //}}}
+ function modifyZoom(value, canvas, displaylog) { //{{{
+ 	canvas.view.zoom = clamp(value, canvas.view.zoomLimits[0], canvas.view.zoomLimits[1]);
+-	repositionMarker(canvas);
++	canvas.dataMarkers.reposition = true;
+ 	if (displaylog) { console.log(canvas.view.zoom); }
+ } //}}}
+ function modifyDataMarkersEnabled(value, canvas) { //{{{
+@@ -407,53 +363,45 @@
+ 		canvas.playButton.find('span').addClass('fa-play');
+ 	}
+ } //}}}
+-function onSlideStart(canvas, progressBar) { //{{{
+-	if (!isEmptyOrUndefined(canvas.animation)) {
+-		canvas.animation.increment = false;	
+-		canvas.animation.frame = parseInt($(progressBar).val());
+-		//console.log(canvas.animation.frame);
+-		//updateMarker(canvas, false);
+-	}
+-} //}}}
+-function onSlideChange(canvas, progressBar) { //{{{
+-	if (!isEmptyOrUndefined(canvas.animation)) {
+-		canvas.animation.frame = parseInt($(progressBar).val());
+-		//console.log("change");
+-		updateMarker(canvas, false);
+-	}
+-} //}}}
+-function onSlideStop(canvas, progressBar) { //{{{
+-	if (!isEmptyOrUndefined(canvas.animation)) {
+-		canvas.animation.increment = true;	
+-		canvas.animation.frame = parseInt($(progressBar).val());
+-		//console.log(canvas.animation.frame);
+-		//updateMarker(canvas, false);
+-	}
+-} //}}}
+ //}}}
+ //{{{ Interaction Functions
+-function raycast(canvas, x, y) { //{{{
++function raycast(canvas, x, y, node) { //{{{
+ 	//Performs raycast on canvas.unitNode.mesh using x/y screen coordinates. Returns hit objects with hit position, coords, and indicies of ray-triangle intersection.
+ 	//TODO: Diagnose marker issues with orthographic views and slr-eustatic updates when switching between basins.
+-	var inverseMVPMatrix = mat4.invert(mat4.create(), mat4.multiply(mat4.create(), canvas.camera.vpMatrix, canvas.unitNode.modelMatrix));
++	var inverseMVPMatrix = mat4.invert(mat4.create(), mat4.multiply(mat4.create(), canvas.camera.vpMatrix, node.modelMatrix));
+ 	var origin = vec3.transformMat4(vec3.create(), [(x - canvas.width / 2) / (canvas.width / 2), (canvas.height / 2 - y) / (canvas.height / 2), 0], inverseMVPMatrix);
+ 	var far = far || vec3.transformMat4(vec3.create(), [(x - canvas.width / 2) / (canvas.width / 2), (canvas.height / 2 - y) / (canvas.height / 2), 1.0], inverseMVPMatrix);
+ 	var ray = vec3.subtract(vec3.create(), far, origin);
+ 
+-	var mesh = canvas.unitNode.mesh;
++	var mesh = node.mesh;
++
+ 	if (!mesh) { return; }
+-	if (!mesh.octree) { mesh.octree = new GL.Octree(mesh); }
++	if (!node.octree) { node.octree = new GL.Octree(mesh); }
+ 	
+-	var hit = mesh.octree.testRay(origin, ray, 1e3, 1e10);
++	var hit = node.octree.testRay(origin, ray, 1e3, 1e10);
+ 	
+ 	if(!hit) { return; }
+-	
++
++	if (node.name.startsWith("clouds")) { canvas.clouds.selected = node.name; alert("New selected cloud: " + canvas.clouds.selected); }
++
+ 	hit.modelPos = vec3.copy(vec3.create(), hit.pos);
+-	vec3.transformMat4(hit.pos, hit.pos, canvas.unitNode.modelMatrix);
+-	vec3.transformMat4(hit.normal, hit.normal, canvas.unitNode.modelMatrix);
++	vec3.transformMat4(hit.pos, hit.pos, node.modelMatrix);
++	vec3.transformMat4(hit.normal, hit.normal, node.modelMatrix);
+ 
+ 	return hit;
+ } //}}}
++function updateCities(canvas) {
++	//Update selected city
++	var hit = canvas.nodes.cities.hit;
++	if (hit) {
++		citiesIndex = Math.floor(hit.indices[0] / ((ArrayMax(canvas.nodes.cities.mesh.getIndexBuffer('triangles').data) + 1) / cities.length));
++		cityName = cities[citiesIndex];
++		if (cityName !== $('#gfm-sim-controls-select-city').val()) {
++			$('#gfm-sim-controls-select-city').val(cityName).selectmenu("refresh");
++			changeCity(canvas);
++		}
++	}
++}
+ function brushModify(canvas) { //{{{
+ 	//This function takes in the canvas and x/y coordinates, performing a raycast against the mesh, and modifies the mesh using a the canvas.brush.strength and canvas.brush.falloff properties.
+ 	//Currently the brush extends to the raycasted element and its immediate neighbors.
+@@ -506,27 +454,26 @@
+ 		//Update mesh on GPU
+ 		bufferVertices.upload(canvas.gl.DYNAMIC_DRAW);
+ 		bufferCoords.upload(canvas.gl.DYNAMIC_DRAW);
+-		canvas.unitNode.mesh.octree = new GL.Octree(canvas.unitNode.mesh);	
+-		
+-		//Update clouds if rendered
+-		//TODO: Steven, once you update the cloud generation in applyoptions.js, modify this code block to move the clouds as well. We'll want to move them individually later, but moving them all is ok for now.
+-		for (var i = 0; i < canvas.clouds.quantity; i++) {
+-			if (canvas.nodes['clouds' + i]) {
+-				var v1 = vec3.fromValues(vertices[hit.indices[0] * 3], vertices[hit.indices[0] * 3 + 1], vertices[hit.indices[0] * 3 + 2]);
+-				var v2 = vec3.fromValues(vertices[hit.indices[1] * 3], vertices[hit.indices[1] * 3 + 1], vertices[hit.indices[1] * 3 + 2]);
+-				var v3 = vec3.fromValues(vertices[hit.indices[2] * 3], vertices[hit.indices[2] * 3 + 1], vertices[hit.indices[2] * 3 + 2]);
+-				vec3.transformMat4(v1, v1, canvas.unitNode.modelMatrix);
+-				vec3.transformMat4(v2, v2, canvas.unitNode.modelMatrix);
+-				vec3.transformMat4(v3, v3, canvas.unitNode.modelMatrix);
+-				var x  = (v1[0] + v2[0] + v3[0]) / 3 + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
+-				var y  = (v1[1] + v2[1] + v3[1]) / 3 + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
+-				var z  = (v1[2] + v2[2] + v3[2]) / 3;
+-				canvas.nodes['clouds' + i].translation = [x, y + canvas.clouds.height, z];
+-				updateModelMatrix(canvas.nodes['clouds' + i]);
+-			}
+-		}
++		canvas.unitNode.octree = new GL.Octree(canvas.unitNode.mesh);	
+ 	}
+ } //}}}
++function updateClouds(canvas) {
++	//Update clouds if rendered
++	//TODO: Steven, the hit now queries the radaroverlay.
++	if (canvas.nodes[canvas.clouds.selected]) {
++		var v1 = vec3.fromValues(vertices[hit.indices[0] * 3], vertices[hit.indices[0] * 3 + 1], vertices[hit.indices[0] * 3 + 2]);
++		var v2 = vec3.fromValues(vertices[hit.indices[1] * 3], vertices[hit.indices[1] * 3 + 1], vertices[hit.indices[1] * 3 + 2]);
++		var v3 = vec3.fromValues(vertices[hit.indices[2] * 3], vertices[hit.indices[2] * 3 + 1], vertices[hit.indices[2] * 3 + 2]);
++		vec3.transformMat4(v1, v1, canvas.unitNode.modelMatrix);//move out of brushModify, perhaps onto onPan
++		vec3.transformMat4(v2, v2, canvas.unitNode.modelMatrix);
++		vec3.transformMat4(v3, v3, canvas.unitNode.modelMatrix);
++		var x  = (v1[0] + v2[0] + v3[0]) / 3;// + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
++		var y  = (v1[1] + v2[1] + v3[1]) / 3;// + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
++		var z  = (v1[2] + v2[2] + v3[2]) / 3;
++		canvas.nodes[canvas.clouds.selected].translation = [x, y + canvas.clouds.height, z];
++		updateModelMatrix(canvas.nodes[canvas.clouds.selected]);
++	}
++}
+ function initializeMarker(canvas) { //{{{
+ 	//Initialize data marker and tooltip display once per page load
+ 	var marker = $('#' + canvas.dataMarkers.marker.id);
+@@ -562,7 +509,9 @@
+ 		marker.on('click touch', function () {
+ 			marker.fadeOut(175);
+ 			marker.tooltipster('close');
++			marker.closed = true;
+ 		});
++		marker.closed = false;
+ 		canvas.dataMarkers.marker.selector = marker;
+ 	}
+ 	updateMarker(canvas, true);
+@@ -569,10 +518,10 @@
+ } //}}}
+ function repositionMarker(canvas) { //{{{
+ 	//Mover marker to point to mouse position, offset in y by 1 to enable immediate clicking.
+-	if (isEmptyOrUndefined(canvas.dataMarkers.marker.hit) || !canvas.camera.ready) { return; }
++	//Return if no marker hit exists, the camera is not rendering, or if no reposition has been scheduled.
++	if (isEmptyOrUndefined(canvas.dataMarkers.marker.hit) || !canvas.camera.ready || !canvas.dataMarkers.reposition) { return; }
+ 	var size = canvas.dataMarkers.size;
+ 	var screenPoint = vec3.transformMat4(vec3.create(), canvas.dataMarkers.marker.hit.pos, canvas.camera.vpMatrix);
+-	//console.log(canvas, canvas.selector, $(canvas.id)
+ 	var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
+ 	var y = (-screenPoint[1] + 1.0) * (canvas.height / 2) + canvas.selector.offset().top;
+ 	canvas.dataMarkers.marker.selector.css({
+@@ -579,15 +528,15 @@
+ 		'left': (Math.round(x) - size[0] / 2) + 'px', 
+ 		'top': (Math.round(y) - size[1] + 1) + 'px'
+ 	});
+-	
+ 	if (canvas.dataMarkers.marker.selector.tooltipster('status').state != 'closed') { canvas.dataMarkers.marker.selector.tooltipster('reposition'); }
++	canvas.dataMarkers.reposition = false;
+ } //}}}
+ function updateMarker(canvas, reset) { //{{{
+ 	//Retrieve data value fields and plots them on data marker popup if a hit has been registered.
+ 	//TODO: Automatically pick up any field of size md.mesh.numberofelements
+ 	//If no marker has been placed, no update is needed. If canvas is resimulating and unitNode has not been set yet, wait and try again.
+-	if (isEmptyOrUndefined(canvas.dataMarkers.marker.hit)) { return; }
+-	if (isEmptyOrUndefined(canvas.unitNode)) { setTimeout( function(){ updateMarker(canvas, reset); }, 750); return; }
++	if (!canvas.dataMarkers.enabled || isEmptyOrUndefined(canvas.dataMarkers.marker.hit)) { return; }
++	if (isEmptyOrUndefined(canvas.unitNode) || isEmptyOrUndefined(canvas.unitNode.mesh)) { setTimeout( function(){ updateMarker(canvas, reset); }, 750); return; }
+ 	
+ 	var hit = canvas.dataMarkers.marker.hit;
+ 	
+@@ -605,41 +554,49 @@
+ 		velocity = md.initialization.vel;
+ 	}
+ 	
+-	//Determine data values at hit position.
+-	var hitCoords = [coords[hit.indices[0]*2], coords[hit.indices[0]*2+1], coords[hit.indices[1]*2], coords[hit.indices[1]*2+1], coords[hit.indices[2]*2], coords[hit.indices[2]*2+1]];
+-	var hitLatitude = [latitude[hit.indices[0]], latitude[hit.indices[1]], latitude[hit.indices[2]]];
+-	var hitLongitude = [longitude[hit.indices[0]], longitude[hit.indices[1]], longitude[hit.indices[2]]];
+-	var hitThickness = [thickness[hit.indices[0]], thickness[hit.indices[1]], thickness[hit.indices[2]]];
+-	var hitVelocity = [velocity[hit.indices[0]], velocity[hit.indices[1]], velocity[hit.indices[2]]];
+-	var u = hitCoords[0] * hit.uvw[0] + hitCoords[2] * hit.uvw[1] + hitCoords[4] * hit.uvw[2];
+-	var v = hitCoords[1] * hit.uvw[0] + hitCoords[3] * hit.uvw[1] + hitCoords[5] * hit.uvw[2];
+-	var value = canvas.unitNode.caxis[0] * (1.0 - v) + canvas.unitNode.caxis[1] * v;
+-	var valueLatitude = Math.abs(hitLatitude[0] * hit.uvw[0] + hitLatitude[1] * hit.uvw[1] + hitLatitude[2] * hit.uvw[2]);
+-	var valueLongitude = Math.abs(hitLongitude[0] * hit.uvw[0] + hitLongitude[1] * hit.uvw[1] + hitLongitude[2] * hit.uvw[2]);
+-	var valueThickness = hitThickness[0] * hit.uvw[0] + hitThickness[1] * hit.uvw[1] + hitThickness[2] * hit.uvw[2];
+-	var valueVelocity = hitVelocity[0] * hit.uvw[0] + hitVelocity[1] * hit.uvw[1] + hitVelocity[2] * hit.uvw[2];	
+-
+ 	//Construct new argument array of the data display format for sprintf using first first argument as the formatSpecifier string and the rest as the additional arguments.
+-	var format = canvas.dataMarkers.format.slice();
+-	for (var i = 1; i < format.length; i++) {
+-		if (format[i].toLowerCase() == 'x') { format[i] = hit.modelPos[0]; }
+-		else if (format[i].toLowerCase() == 'y') { format[i] = hit.modelPos[1]; }
+-		else if (format[i].toLowerCase() == 'z') { format[i] = hit.modelPos[2]; }
+-		else if (format[i].toLowerCase() == 'lat') { format[i] = valueLatitude; }
+-		else if (format[i].toLowerCase() == 'long') { format[i] = valueLongitude; }
+-		else if (format[i].toLowerCase() == 'thickness') { format[i] = valueThickness; }
+-		else if (format[i].toLowerCase() == 'vel') { format[i] = valueVelocity; }
+-		else if (format[i].toLowerCase() == 'value') { format[i] = value; }
++	var labels = canvas.dataMarkers.labels.slice();
++	for (var i = 0; i < labels.length; i++) {
++		if (labels[i].toLowerCase() === 'x') { labels[i] = hit.modelPos[0]; }
++		else if (labels[i].toLowerCase() === 'y') { labels[i] = hit.modelPos[1]; }
++		else if (labels[i].toLowerCase() === 'z') { labels[i] = hit.modelPos[2]; }
++		else if (labels[i].toLowerCase() === 'latitude') {
++			var hitLatitude = [latitude[hit.indices[0]], latitude[hit.indices[1]], latitude[hit.indices[2]]];
++			var valueLatitude = Math.abs(hitLatitude[0] * hit.uvw[0] + hitLatitude[1] * hit.uvw[1] + hitLatitude[2] * hit.uvw[2]);
++			labels[i] = valueLatitude;
++		}
++		else if (labels[i].toLowerCase() === 'longitude') {
++			var hitLongitude = [longitude[hit.indices[0]], longitude[hit.indices[1]], longitude[hit.indices[2]]];
++			var valueLongitude = Math.abs(hitLongitude[0] * hit.uvw[0] + hitLongitude[1] * hit.uvw[1] + hitLongitude[2] * hit.uvw[2]);
++			labels[i] = valueLongitude;
++		}
++		else if (labels[i].toLowerCase() === 'thickness') {
++			var hitThickness = [thickness[hit.indices[0]], thickness[hit.indices[1]], thickness[hit.indices[2]]];
++			var valueThickness = hitThickness[0] * hit.uvw[0] + hitThickness[1] * hit.uvw[1] + hitThickness[2] * hit.uvw[2];
++			labels[i] = valueThickness; 
++		}
++		else if (labels[i].toLowerCase() === 'velocity') {
++			var hitVelocity = [velocity[hit.indices[0]], velocity[hit.indices[1]], velocity[hit.indices[2]]];
++			var valueVelocity = hitVelocity[0] * hit.uvw[0] + hitVelocity[1] * hit.uvw[1] + hitVelocity[2] * hit.uvw[2];	
++			labels[i] = valueVelocity; 
++		}
++		else if (labels[i].toLowerCase() === 'value') {
++			var hitCoords = [coords[hit.indices[0]*2], coords[hit.indices[0]*2+1], coords[hit.indices[1]*2], coords[hit.indices[1]*2+1], coords[hit.indices[2]*2], coords[hit.indices[2]*2+1]];
++			var u = hitCoords[0] * hit.uvw[0] + hitCoords[2] * hit.uvw[1] + hitCoords[4] * hit.uvw[2];
++			var v = hitCoords[1] * hit.uvw[0] + hitCoords[3] * hit.uvw[1] + hitCoords[5] * hit.uvw[2];
++			var value = canvas.unitNode.caxis[0] * (1.0 - v) + canvas.unitNode.caxis[1] * v;
++			labels[i] = value; 
++		}
+ 	}
+ 	
+ 	//Apply changes to tooltip
+-	$('#tooltip-content-data-marker-' + canvas.id).html(sprintf.apply(null, format));
++	$('#tooltip-content-data-marker-' + canvas.id).html(sprintf.apply(null, canvas.dataMarkers.format.concat(labels)));
+ 	$('#tooltip-content-data-marker-' + canvas.id).css({'font': canvas.dataMarkers.font});				
+ 	
+ 	//If animated, setup animation loop to update plot as movie plays.
+ 	if (canvas.dataMarkers.animated) {
+-		var isEmpty = (canvas.dataMarkers.values.length == 0);
+-		var lastUpdatedIndex = (canvas.dataMarkers.values.length-1);
++		var isEmpty = (canvas.dataMarkers.values.length === 0);
++		var lastUpdatedIndex = (canvas.dataMarkers.values.length - 1);
+ 		var newMovieFrame = (!isEmpty && canvas.dataMarkers.values[lastUpdatedIndex][0] != canvas.animation.frame);
+ 		//If new data marker has been placed, reinitialize plot. If not, push new value into plot value array.
+ 		if (reset) {
+@@ -646,7 +603,7 @@
+ 			canvas.dataMarkers.values = [];
+ 			newMovieFrame = true;
+ 			for (var currentFrame = 0; currentFrame < (canvas.unitNode.movieLength); currentFrame++) {
+-				coords = canvas.unitNode.texcoords[currentFrame];
++				coords = canvas.unitMovieData[currentFrame];
+ 				var hitCoords = [coords[hit.indices[0]*2], coords[hit.indices[0]*2+1], coords[hit.indices[1]*2], coords[hit.indices[1]*2+1], coords[hit.indices[2]*2], coords[hit.indices[2]*2+1]];
+ 				var u = hitCoords[0] * hit.uvw[0] + hitCoords[2] * hit.uvw[1] + hitCoords[4] * hit.uvw[2];
+ 				var v = hitCoords[1] * hit.uvw[0] + hitCoords[3] * hit.uvw[1] + hitCoords[5] * hit.uvw[2];
+@@ -655,7 +612,13 @@
+ 			}
+ 		}
+ 		else {
++			if (canvas.animation.lastFrame > canvas.animation.frame) {
++				canvas.dataMarkers.values = [];
++			}
+ 			if (isEmpty || newMovieFrame) {
++				coords = canvas.unitMovieData[canvas.animation.frame];
++				var hitValues = [coords[hit.indices[0]], coords[hit.indices[1]], coords[hit.indices[2]]];
++				var value = hitValues[0] * hit.uvw[0] + hitValues[1] * hit.uvw[1] + hitValues[2] * hit.uvw[2];	
+ 				canvas.dataMarkers.values.push([canvas.animation.frame, value]);
+ 			}
+ 		}
+@@ -663,7 +626,7 @@
+ 		//Replot data marker popup using update data value array.
+ 		if (isEmpty || newMovieFrame) {
+ 			var dataLabels = {'latitude': valueLatitude, 'longitude': valueLongitude, 'thickness': valueThickness, 'velocity': valueVelocity, 'value': value};
+-			var dataDisplay = canvas.dataMarkers.values.slice(0, canvas.animation.frame+1);					
++			var dataDisplay = canvas.dataMarkers.values.slice(0, canvas.animation.frame + 1);		
+ 			plot(
+ 				'id', '#sim-plot', 
+ 				'type', 'bar', 
+@@ -679,12 +642,21 @@
+ 			);
+ 		}
+ 	}
+-	repositionMarker(canvas);
+-	if (reset) {
++	canvas.dataMarkers.reposition = true;
++	if (reset && !canvas.dataMarkers.marker.selector.closed) {
+ 		canvas.dataMarkers.marker.selector.fadeIn(175);
+ 		canvas.dataMarkers.marker.selector.tooltipster('open');
+ 	}
+ } //}}}
++function animateValue(current, target, duration, stepCallback, doneCallback) { //{{{
++	//Animates scalar value for length duration, calling callback each step.
++	//TODO: Specify lerp easing as option (cubic, linear, cosine).
++	$({'value':current}).animate({'value':target}, {
++		duration: duration,
++		step: stepCallback,
++		done: doneCallback
++	});
++} //}}}
+ //}}}
+ //{{{ Drawing Functions
+ function updateCameraMatrix(canvas) { //{{{
+@@ -706,12 +678,12 @@
+ 	
+ 	//Calculate rotation around camera focal point about worldspace origin
+ 	if (canvas.view.twod) {
+-		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, DEG2RAD * 0, [0, 1, 0]);
++		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, -DEG2RAD * 0, [0, 1, 0]);
+ 		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, DEG2RAD * 90, [1, 0, 0]);
+ 		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
+ 	}
+ 	else {
+-		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, DEG2RAD * canvas.view.rotation[0], [0, 1, 0]);
++		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, -DEG2RAD * (canvas.view.rotation[0] + 90), [0, 1, 0]);
+ 		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, DEG2RAD * canvas.view.rotation[1], [1, 0, 0]);
+ 		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
+ 	}
+@@ -734,6 +706,7 @@
+ 	
+ 	vec3.transformMat4(canvas.camera.position, cameraPosition, canvas.camera.vpInverseMatrix);
+ 	canvas.camera.ready = true;
++	repositionMarker(canvas);
+ }//}}}
+ function drawSceneGraphNode(canvas, node) { //{{{
+ 	if (!node.enabled) { return; }
+@@ -748,7 +721,7 @@
+ 	mat4.multiply(mvMatrix, canvas.camera.vMatrix, node.modelMatrix);
+ 	
+ 	var normalMatrix = mat4.create();
+-	mat4.invert(normalMatrix, mvMatrix);
++	mat4.invert(normalMatrix, node.modelMatrix);
+ 	mat4.transpose(normalMatrix, normalMatrix);
+ 	
+ 	if (node.texture) { node.texture.bind(0); }
+@@ -768,23 +741,23 @@
+ 	vec3.sub(cameraPositionRelative, origin, node.translation);
+ 	cameraHeight = vec3.length(cameraPositionRelative);
+ 	
+-	var atm = { 							//Default Values
+-				wavelength_r: 0.65, 		//0.65		Red wavelength (micrometers)
+-				wavelength_g: 0.57,			//0.57		Green wavelength (micrometers)
+-				wavelength_b: 0.475,		//0.475		Green wavelength (micrometers)
+-				eSun: 100.0,				//20.0		Sun intensity	
+-				kRayleigh: 0.0025,			//0.0025	Rayleigh scattering amount
+-				kMie: 0.000, 				//0.01		Mie scattering amount
+-				g: -0.99,					//-0.99		Mie phase asymmetry/direction factor
+-				hdr_exposure: 0.8,			//0.8		High Dynamic Range Exposure
+-				scale: 1.25, 				//1.025		Scale of atmosphere. WARNING: Change atmosphereScale in applyoptions.js, and scaling constants.
+-				scaleDepth: 0.25, 			//0.25		Percentage altitude at which the atmosphere's average density is found
+-				a: -0.00287,				//-0.00287	Scaling constant a
+-				b: 0.459,					//0.459		Scaling constant b
+-				c: 3.83,					//3.83		Scaling constant c
+-				d: -6.80,					//-6.80		Scaling constant d
+-				e: 3.6,						//5.25		Scaling constant e. Lower when increasing atmosphere scale.
+-				attenuation: 0.5			//0.5		Strength of atmospheric scattering on ground shading.
++	var atm = { 					//Default Values
++		wavelength_r: 0.65, 		//0.65		Red wavelength (micrometers)
++		wavelength_g: 0.57,			//0.57		Green wavelength (micrometers)
++		wavelength_b: 0.475,		//0.475		Green wavelength (micrometers)
++		eSun: 100.0,				//20.0		Sun intensity	
++		kRayleigh: 0.0025,			//0.0025	Rayleigh scattering amount
++		kMie: 0.000, 				//0.01		Mie scattering amount
++		g: -0.99,					//-0.99		Mie phase asymmetry/direction factor
++		hdr_exposure: 0.8,			//0.8		High Dynamic Range Exposure
++		scale: 1.25, 				//1.025		Scale of atmosphere. WARNING: Change atmosphereScale in applyoptions.js, and scaling constants.
++		scaleDepth: 0.25, 			//0.25		Percentage altitude at which the atmosphere's average density is found
++		a: -0.00287,				//-0.00287	Scaling constant a
++		b: 0.459,					//0.459		Scaling constant b
++		c: 3.83,					//3.83		Scaling constant c
++		d: -6.80,					//-6.80		Scaling constant d
++		e: 3.6,						//5.25		Scaling constant e. Lower when increasing atmosphere scale.
++		attenuation: 0.5			//0.5		Strength of atmospheric scattering on ground shading.
+ 	};
+ 			
+ 	var inv_wavelength4 = [1.0 / Math.pow(atm.wavelength_r, 4), 1.0 / Math.pow(atm.wavelength_g, 4), 1.0 / Math.pow(atm.wavelength_b, 4)];
+@@ -797,14 +770,19 @@
+ 		m4MVP: mvpMatrix,
+ 		m4Normal: normalMatrix,
+ 		m4Model: node.modelMatrix,
+-		//u_lightPosition: [-lightOrigin[0], -lightOrigin[1], -lightOrigin[2]],
+-		u_lightPosition: [1.0, 1.0, 1.0],
+-		u_diffuseColor: [1.0, 0.9, 0.9],
++		u_lightPosition: lightOrigin,
++		//u_lightPosition: [1.0, 1.0, 1.0],
++		u_diffuseColor: node.diffuseColor,
+ 		u_texture: 0,
+ 		u_alpha: node.alpha,
++		u_maskZerosColor: node.maskZerosColor,
++		u_maskZerosEnabled: node.maskZerosEnabled,
++		u_maskZerosTolerance: node.maskZerosTolerance,
++		u_maskZerosZeroValue: node.maskZerosZeroValue,
+ 		u_maskEnabled: node.maskEnabled,
+ 		u_maskHeight: node.maskHeight,
+ 		u_maskColor: node.maskColor,
++		u_pointSize: node.pointSize,
+ 		v3CameraPosition: origin,
+ 		v3Translate: node.translation,
+ 		v3LightPos: lightOrigin,
+@@ -840,10 +818,10 @@
+ 	//TODO: Come up with better way to check if shaders are ready, or move outside of main draw function
+ 	var nodes = canvas.nodes;
+ 	if (!canvas.draw.ready) {
+-		if (nodes.length !== 0) {
++		if (Object.keys(nodes).length !== 0) {
+ 			canvas.draw.ready = true;
+ 			for (var node in nodes) {
+-				if (nodes[node].shader.ready == false) {
++				if (nodes[node].shader.ready === false) {
+ 					canvas.draw.ready = false;
+ 					break;
+ 				}
+@@ -854,9 +832,6 @@
+ 	
+ 	//Begin rendering nodes
+ 	if (canvas.draw.ready) {
+-		if (canvas.textcanvas) { canvas.textcanvas.draw(canvas); }
+-		if (canvas.overlaycanvas) { canvas.overlaycanvas.draw(canvas); }
+-	
+ 		var rect = canvas.getBoundingClientRect();
+ 		canvas.width  = rect.width;
+ 		canvas.height = rect.height;
+@@ -869,10 +844,13 @@
+ 		
+ 		updateCameraMatrix(canvas);
+ 		
++		if (canvas.textcanvas) { canvas.textcanvas.draw(canvas); }
++		if (canvas.overlaycanvas) { canvas.overlaycanvas.draw(canvas); }
++		
+ 		var drawPassNumber = 3;
+-		for (var i = drawPassNumber - 1; i >= 0; i--) {
++		for (var i = drawPassNumber - 1; i >= 0; --i) {
+ 			for (var node in nodes) {
+-				if (nodes[node].drawOrder == i) { drawSceneGraphNode(canvas, nodes[node]); }
++				if (nodes[node].drawOrder === i) { drawSceneGraphNode(canvas, nodes[node]); }
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/m/plot/applyoptions.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/applyoptions.js	(revision 21768)
+@@ -1,4 +1,4 @@
+-function applyoptions(md, data, datatype, options, canvas, gl, node){ //{{{
++function applyoptions(md, data, options, canvas){ //{{{
+ 	//APPLYOPTIONS - apply colobar, text, cloud, and expdisp options to current plot
+ 	//
+ 	//   Usage:
+@@ -7,14 +7,11 @@
+ 	//   See also: PLOTMODEL, PARSE_OPTIONS
+ 	
+ 	//{{{ colorbar
++	var gl = canvas.gl;
+ 	if (options.exist('colorbar')) {
+ 		if (options.getfieldvalue('colorbar')==1) {
+-			//{{{ Handle movie data
+-			if (datatype == 5) {
+-				data = data[0];
+-			} //}}}
+ 			//{{{ Variable options initialization
+-			var caxis = options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]);
++			var caxis = options.getfieldvalue('caxis');
+ 			var colorbarinnerlabels = options.getfieldvalue('colorbarinnerlabels','off');
+ 			var ccanvasid, ctitleid, clabelsid, ccanvas, ctitle, clabels, ccontext, cmap, colorbar, cwidth, cheight, cgradient, color, y, x;
+ 			//}}}
+@@ -23,14 +20,31 @@
+ 			var cdivisions = options.getfieldvalue('colorbarnticks', 6);
+ 			var caxisdelta = caxis[1] - caxis[0];
+ 			var precision = options.getfieldvalue('colorbarprecision', 3);
++			var format = options.getfieldvalue('colorbarformat', 'f').toLowerCase();
+ 			if (options.getfieldvalue('log','off')!='off') {
+ 				for (var i=cdivisions; i >= 0; i--) {
+ 					var scale = (Math.log10(caxis[1])-Math.log10(caxis[0]))/Math.log10(options.getfieldvalue('log', 10));
+-					labels[i] = (Math.pow(options.getfieldvalue('log', 10), Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10))+scale*(cdivisions-i)/cdivisions)).toFixed(precision);
++					if (format === 'f') {
++						labels[i] = (Math.pow(options.getfieldvalue('log', 10), Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10))+scale*(cdivisions-i)/cdivisions)).toFixed(precision);
++					}
++					else if (format === 'e') {
++						labels[i] = (Math.pow(options.getfieldvalue('log', 10), Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10))+scale*(cdivisions-i)/cdivisions)).toPrecision(precision);
++					}
++					else {
++						labels[i] = (Math.pow(options.getfieldvalue('log', 10), Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10))+scale*(cdivisions-i)/cdivisions)).toFixed(precision);
++					}
+ 				}
+ 			} else {
+ 				for (var i=cdivisions; i >= 0; i--) {
+-					labels[i] = (caxisdelta*(cdivisions-i)/cdivisions+caxis[0]).toFixed(precision);
++					if (format === 'f') {
++						labels[i] = (caxisdelta*(cdivisions-i)/cdivisions+caxis[0]).toFixed(precision);
++					}
++					else if (format === 'e') {
++						labels[i] = (caxisdelta*(cdivisions-i)/cdivisions+caxis[0]).toPrecision(precision);
++					}
++					else {
++						labels[i] = (caxisdelta*(cdivisions-i)/cdivisions+caxis[0]).toFixed(precision);
++					}
+ 				}
+ 			} //}}}
+ 			//{{{ Initialize colorbar canvas
+@@ -116,166 +130,8 @@
+ 	tcontext.fillStyle = tgradient;
+ 	tcontext.fillRect(0, 0, 256, 256);
+ 	tURL = tcanvas.toDataURL();
+-	node.texture = initTexture(gl, tURL);
+-	node.textureCanvas = tcanvas;
+-	node.caxis = options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]);
++	canvas.unitNode.texture = initTexture(canvas.gl, tURL);
+ 	//}}}
+-	//{{{ expdisp contours
+-	if (options.exist('expdisp')) {
+-		canvas.nodes.expdisp = Node(gl, options);
+-		var node = canvas.nodes.expdisp;
+-		
+-		//declare variables:  {{{
+-		var vertices = [];
+-		var indices = [];
+-		var colors = [];
+-		var rgbcolor = [];
+-		var xmin, xmax;
+-		var ymin, ymax;
+-		var zmin, zmax;
+-		var scale;
+-		
+-		//Process data and model
+-		var x = options.getfieldvalue('expdisp').x;
+-		var y = options.getfieldvalue('expdisp').y;
+-		var z = Array.apply(null, Array(x.length)).map(Number.prototype.valueOf, 0);
+-		
+-		if (options.getfieldvalue('expdisp').z) {
+-			z = options.getfieldvalue('expdisp').z;
+-		}
+-		//}}}
+-
+-		//Compute coordinates and data range: //{{{
+-		var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-		var modelylim = [ArrayMin(y), ArrayMax(y)];
+-		var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-		var xlim = options.getfieldvalue('xlim', modelxlim);
+-		var ylim = options.getfieldvalue('ylim', modelylim);
+-		var zlim = options.getfieldvalue('zlim', modelzlim);
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		//}}}
+-
+-		//Compute scaling: //{{{
+-		var scale = 1 / (xmax - xmin);
+-		node.shaderName = 'colored';
+-		node.shader = gl.shaders[node.shaderName].program;
+-		node.scale = [scale, scale, scale*options.getfieldvalue('heightscale', 1)];
+-		node.translation = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (-2 / scale)];
+-		node.modelMatrix = updateModelMatrix(node);
+-		node.drawMode = gl.LINE_LOOP;
+-		node.drawOrder = 0;
+-		node.useIndexBuffer = false;
+-		node.disableDepthTest = true;
+-		//}}}
+-
+-		//some defaults:
+-		colors.itemSize = 4;
+-
+-		//retrieve some options
+-		var linewidth=options.getfieldvalue('linewidth', 1);
+-		var edgecolor=options.getfieldvalue('edgecolor','black'); //RGBCOLOR?
+-
+-		vertices.itemSize = 3;
+-		for(var i=0; i < x.length; i++){
+-			vertices[vertices.length] = x[i];
+-			vertices[vertices.length] = y[i];
+-			vertices[vertices.length] = z[i];
+-
+-			//edgecolor
+-			rgbcolor = [0.0, 0.0, 0.0];
+-			colors[colors.length] = rgbcolor[0];
+-			colors[colors.length] = rgbcolor[1];
+-			colors[colors.length] = rgbcolor[2];
+-			colors[colors.length] = 1.0;
+-		}
+-
+-		//Initalize buffers:
+-		node.arrays = [vertices, colors];
+-		node.buffers = initBuffers(gl, node.arrays);
+-	} //}}}
+-	//{{{ cloud of points
+-	if (options.exist('cloud')) {
+-		canvas.nodes.cloud = Node(gl, options);
+-		var node = canvas.nodes.cloud;
+-
+-		//declare variables:  {{{
+-		var vertices = [];
+-		var indices = [];
+-		var colors = [];
+-		var rgbcolor = [];
+-		var xmin, xmax;
+-		var ymin, ymax;
+-		var zmin, zmax;
+-		var scale;
+-		
+-		//Process data and model
+-		var x = options.getfieldvalue('cloud').x;
+-		var y = options.getfieldvalue('cloud').y;
+-		var z = Array.apply(null, Array(x.length)).map(Number.prototype.valueOf, 0);
+-		
+-		if (options.getfieldvalue('cloud').z) {
+-			z = options.getfieldvalue('cloud').z;
+-		}
+-		//}}}
+-
+-		//Compute coordinates and data range: //{{{
+-		var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-		var modelylim = [ArrayMin(y), ArrayMax(y)];
+-		var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-		var xlim = options.getfieldvalue('xlim', modelxlim);
+-		var ylim = options.getfieldvalue('ylim', modelylim);
+-		var zlim = options.getfieldvalue('zlim', modelzlim);
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		//}}}
+-
+-		//Compute scaling: //{{{
+-		var scale = 1 / (xmax - xmin);
+-		node.shaderName = 'colored';
+-		node.shader = gl.shaders[node.shaderName].program;
+-		node.scale = [scale, scale, scale*options.getfieldvalue('heightscale', 1)];
+-		node.translation = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (-2 / scale)];
+-		node.modelMatrix = updateModelMatrix(node);
+-		node.drawMode = gl.POINTS;
+-		node.drawOrder = 0;
+-		node.useIndexBuffer = false;
+-		node.disableDepthTest = true;
+-		//}}}
+-
+-		//some defaults:
+-		colors.itemSize = 4;
+-
+-		//retrieve some options
+-		var linewidth=options.getfieldvalue('linewidth', 1);
+-		var edgecolor=options.getfieldvalue('edgecolor','black'); //RGBCOLOR?
+-
+-		vertices.itemSize = 3;
+-		for(var i=0; i < x.length; i++){
+-			vertices[vertices.length] = x[i];
+-			vertices[vertices.length] = y[i];
+-			vertices[vertices.length] = z[i];
+-
+-			//edgecolor
+-			rgbcolor = [0.0, 0.0, 0.0];
+-			colors[colors.length] = rgbcolor[0];
+-			colors[colors.length] = rgbcolor[1];
+-			colors[colors.length] = rgbcolor[2];
+-			colors[colors.length] = 1.0;
+-		}
+-
+-		//Initalize buffers:
+-		node.arrays = [vertices, colors];
+-		node.buffers = initBuffers(gl, node.arrays);
+-	} //}}}
+ 	//{{{ text display
+ 	if (options.exist('textlabels')) {
+ 		var textcanvas, textcanvasid;	
+@@ -324,39 +180,39 @@
+ 		var overlaycanvasid = options.getfieldvalue('latlongoverlayid', options.getfieldvalue('canvasid')+'-overlay');
+ 		var overlaycanvas = $('#'+overlaycanvasid)[0];
+ 		var latitudes = {
+-			//"-90": 1,
+-			//"-65": .999,
+-			"-60": 0.994046875,
+-			//"-55": 0.983187500000002,
+-			//"-50": 0.97173550854167,
+-			"-45": 0.955729166666666,
+-			//"-40": 0.94218750000000218,
+-			//"-35": 0.94218750000000218,
+-			"-30": 0.9226562500000024,
+-			//"-25": 0.87934895833333526,
+-			//"-20": 0.856572916666669,
+-			//"-15": 0.830729166666665,
+-			//"-10": 0.803552708333336,
+-			//"-5": 0.77395833333333541,
+-			"0": 0.74218749999999811,
+-			//"5": 0.70950364583333347,
+-			//"10": 0.67479166666666823,
+-			//"15": 0.63932291666666663,
+-			//"20": 0.60171875,
+-			//"25": 0.563453125,
+-			"30": 0.523390625000001,
+-			//"35": 0.48401875,
+-			//"40": 0.44296875,
+-			"45": 0.4020001,
+-			//"50": 0.3578125,
+-			//"55": 0.311875,
+-			"60": 0.26953124999999978,
+-			//"65": 0.225390625,
+-			//"70": 0.18125,
+-			//"75": 0.13541666666666671,
+-			//"80": 0.08953125,
+-			//"85": 0.046250000000000013,
+-			//"90": 0.0,
++			//'-90': 1,
++			//'-65': .999,
++			'-60': 0.994046875,
++			//'-55': 0.983187500000002,
++			//'-50': 0.97173550854167,
++			'-45': 0.955729166666666,
++			//'-40': 0.94218750000000218,
++			//'-35': 0.94218750000000218,
++			'-30': 0.9226562500000024,
++			//'-25': 0.87934895833333526,
++			//'-20': 0.856572916666669,
++			//'-15': 0.830729166666665,
++			//'-10': 0.803552708333336,
++			//'-5': 0.77395833333333541,
++			'0': 0.74218749999999811,
++			//'5': 0.70950364583333347,
++			//'10': 0.67479166666666823,
++			//'15': 0.63932291666666663,
++			//'20': 0.60171875,
++			//'25': 0.563453125,
++			'30': 0.523390625000001,
++			//'35': 0.48401875,
++			//'40': 0.44296875,
++			'45': 0.4020001,
++			//'50': 0.3578125,
++			//'55': 0.311875,
++			'60': 0.26953124999999978,
++			//'65': 0.225390625,
++			//'70': 0.18125,
++			//'75': 0.13541666666666671,
++			//'80': 0.08953125,
++			//'85': 0.046250000000000013,
++			//'90': 0.0,
+ 		}
+ 		var longitudes = [-150, -120, -90, -60, -30, 0, 30, 60, 90, 120, 150, 180];
+ 		overlaycanvas.draw = function(canvas) {
+@@ -400,96 +256,197 @@
+ 		var is2d = meshresults[4]; 
+ 		var isplanet = meshresults[5];
+ 		
+-		var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-		var modelylim = [ArrayMin(y), ArrayMax(y)];
+-		var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-		var xlim = options.getfieldvalue('xlim', modelxlim);
+-		var ylim = options.getfieldvalue('ylim', modelylim);
+-		var zlim = options.getfieldvalue('zlim', modelzlim);
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
++		var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
++		var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
++		var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
++
++		var global = vec3.length([(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2]) < 6371000/10; //tolerance for global models = center is 637100 meters away from center of earth	
++		var translation = global ? [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2] : [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) - 6371000, (zlim[0] + zlim[1]) / 2];
+ 		
+-		var global = vec3.length([(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2]) < 6371000/10; //tolerance for global models = center is 637100 meters away from center of earth
+-		var atmosphereScale = 1.25;
+-		var translation = global ? [(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2] : [(xmin + xmax) / 2, (ymin + ymax) - 6371000, (zmin + zmax) / 2];
+-		
+-		if (options.getfieldvalue('render',[]).indexOf('sky')!=-1) {	
+-			//atmosphere
+-			var node = Node(gl);
+-			node.name = "atmosphere";
+-			node.shaderName = "SkyFromSpace";
+-			node.shader = gl.shaders[node.shaderName];
+-			node.drawOrder = 1;
+-			node.cullFace = gl.FRONT;
+-			node.enableCullFace = true;
+-			node.mesh = GL.Mesh.icosahedron({size: 6371000*atmosphereScale, subdivisions: 6});
+-			node.rotation = [0, 0, 0];
+-			node.translation = translation;
+-			node.center = [0, 0, 0];
+-			updateModelMatrix(node);
+-			canvas.nodes[node.name] = node;
++		var renderObjects = options.getfieldvalue('render',{});
++		if ('sky' in renderObjects && !('sky' in canvas.nodes)) {
++			var object = renderObjects.sky;
++			object = {
++				enabled: defaultFor(object.enabled, true),
++				scale: defaultFor(object.scale, 1),
++			};
++			if (object.enabled) {
++				var atmosphereScale = 1.25;
++				var mesh = GL.Mesh.icosahedron({size: 6371000 * atmosphereScale, subdivisions: 5});
++				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'sky',
++					'shaderName', 'SkyFromSpace',
++					'cullFace', gl.FRONT,
++					'mesh', mesh,
++					'texture',texture,
++					'translation',translation
++				);
++			}
+ 		}
+-		if (options.getfieldvalue('render',[]).indexOf('space')!=-1) {	
+-			//skysphere
+-			node = Node(gl);
+-			node.name = "skysphere";
+-			node.shaderName = "Textured";
+-			node.shader = gl.shaders[node.shaderName];
+-			node.drawOrder = 2;
+-			node.cullFace = gl.FRONT;
+-			node.enableCullFace = true;
+-			node.mesh = GL.Mesh.sphere({size: 6371000*20});
+-			node.texture = initTexture(gl, canvas.rootPath+'textures/TychoSkymapII_t4_2k.jpg');
+-			node.rotation = [0, 0, 0];
+-			node.translation = translation;
+-			node.center = [0, 0, 0];
+-			updateModelMatrix(node);
+-			canvas.nodes[node.name] = node;
++		if ('space' in renderObjects && !('space' in canvas.nodes)) {
++			var object = renderObjects.space;
++			object = {
++				enabled: defaultFor(object.enabled, true),
++				scale: defaultFor(object.scale, 1),
++			};
++			if (object.enabled) {
++				var mesh = GL.Mesh.sphere({size: 6371000 * 20});
++				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'space',
++					'shaderName', 'Textured',
++					'cullFace', gl.FRONT,
++					'drawOrder', 2,
++					'mesh', mesh,
++					'texture',texture,
++					'translation',translation
++				);
++			}
+ 		}
++		if ('coastlines' in renderObjects && !('coastlines' in canvas.nodes)) {
++			var object = renderObjects.coastlines;
++			object = {
++				enabled: defaultFor(object.enabled, false),
++				scale: defaultFor(object.scale, 1),
++				x: defaultFor(object.x, {}),
++				y: defaultFor(object.y, {}),
++				z: defaultFor(object.z, {})
++			};
++			if (object.enabled) {
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'coastlines',
++					'shaderName', 'Colored',
++					'drawMode', gl.LINE_STRIP,
++					'lineWidth', options.getfieldvalue('linewidth', 1),
++					'scale', [object.scale, object.scale, object.scale],
++					'rotation', [-90, 0, 0]
++				);
++				node.patch('Vertices', [object.x, object.y, object.z], 'FaceColor', 'none');
++			}
++		}
++		if ('graticule' in renderObjects && !('graticule' in canvas.nodes)) {
++			var object = renderObjects.graticule;
++			object = {
++				enabled: defaultFor(object.enabled, false),
++				scale: defaultFor(object.scale, 1),
++				x: defaultFor(object.x, {}),
++				y: defaultFor(object.y, {}),
++				z: defaultFor(object.z, {})
++			};
++			if (object.enabled) {			
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'graticule',
++					'shaderName', 'Colored',
++					'drawMode', gl.LINE_STRIP,
++					'lineWidth', options.getfieldvalue('linewidth', 1),
++					'scale', [object.scale, object.scale, object.scale],
++					'rotation', [-90, 0, 0]
++				);
++				node.patch('Vertices', [object.x, object.y, object.z], 'FaceColor', 'none');
++			}
++		}
++		if ('cities' in renderObjects && !('cities' in canvas.nodes)) {
++			var object = renderObjects.cities;
++			object = {
++				enabled: defaultFor(object.enabled, false),
++				scale: defaultFor(object.scale, 1),
++				size: defaultFor(object.size, 1.5),
++				color: defaultFor(object.color, 'black'),
++				x: defaultFor(object.x, {}),
++				y: defaultFor(object.y, {}),
++				z: defaultFor(object.z, {}),
++				indices: defaultFor(object.indices, {})
++			};
++			if (object.enabled) {
++				var mesh = GL.Mesh.icosahedron({size: object.size, subdivisions: 1});
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'cities',
++					'shaderName', 'Colored',
++					'diffuseColor', object.color,
++					'lineWidth', options.getfieldvalue('linewidth', 1),
++					'scale', [object.scale, object.scale, object.scale],
++					'rotation', [-90, 0, 0]
++				);
++				node.geometryShader('Mesh', mesh, 'Vertices', [object.x, object.y, object.z], 'Indices', object.indices);
++			}
++		}
++		if ('city' in renderObjects) {
++			var object = renderObjects.city;
++			object = {
++				enabled: defaultFor(object.enabled, false),
++				name: defaultFor(object.name, 'NY'),
++				size: defaultFor(object.size, 15000),
++				color: defaultFor(object.color, 'magenta'),
++				x: defaultFor(object.x, {}),
++				y: defaultFor(object.y, {}),
++				z: defaultFor(object.z, {})
++			};
++			if (object.enabled) {
++				//city
++				var mesh = GL.Mesh.sphere({size: object.size});
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'city',
++					'shaderName', 'Colored',
++					'diffuseColor', object.color,
++					'mesh', mesh,
++					'translation', [object.x, object.z, -object.y]
++				);
++				
++				var overlaycanvasid = options.getfieldvalue('overlayid', options.getfieldvalue('canvasid')+'-overlay');
++				var overlaycanvas = $('#'+overlaycanvasid)[0];
++				overlaycanvas.draw = function(canvas) {
++					var rect = overlaycanvas.getBoundingClientRect();
++					overlaycanvas.width  = rect.width;
++					overlaycanvas.height = rect.height;
++					var ctx = overlaycanvas.getContext('2d');
++					var node = canvas.nodes['city'];
++					node.translation = [object.x, object.z, -object.y];
++					node.updateModelMatrix();
++					var screenPoint = vec3.transformMat4(vec3.create(), node.translation, canvas.camera.vpMatrix);
++					var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
++					var y = (-screenPoint[1] + 1.0) * (canvas.height / 2) + canvas.selector.offset().top;
++
++					ctx.font = String(options.getfieldvalue('colorbarfontsize', 22))+'px Arial Black, sans-serif';
++					ctx.fillStyle = options.getfieldvalue('colorbarfontcolor','black');
++					ctx.strokeStyle = 'white';
++					ctx.textAlign = 'center';
++					ctx.textBaseline = 'middle';
++					ctx.fillText(object.name, x, y);
++					ctx.strokeText(object.name, x, y);
++				}
++				canvas.overlaycanvas = overlaycanvas;
++			}
++		}
+ 		if (canvas.clouds.enabled) {
+ 			//clouds
+ 			for (var i = 0; i < canvas.clouds.quantity; i++) {
+-				node = Node(gl);
+-				node.name = "clouds" + i;
+-				node.shaderName = "Clouds";
+-				node.shader = gl.shaders[node.shaderName];
+-				node.drawOrder = 2;
+-				node.cullFace = gl.BACK;
+-				node.enableCullFace = true;
+-				node.mesh = GL.Mesh.fromURL(canvas.rootPath+'obj/cloud.obj');
+-				node.rotation = [0, 0, 0];
+-				node.scale = [2500, 2500, 2500];
+-				node.translation = [translation[0], translation[1] - 405000, translation[2]];
+-				node.center = [0, 0, 0];
+-				node.animation = {"time": Date.now(),"target": node.translation,"current": node.translation};
+-				updateModelMatrix(node);
+-				canvas.nodes[node.name] = node;
+-				//canvas.clouds.list
++				var mesh = GL.Mesh.fromURL(canvas.rootPath+'obj/cloud.obj');
++				translation = [translation[0] + Math.floor((Math.random() * (1 + 12000 - (-12000)) + (-12000))), translation[1] - 405000, translation[2]  + Math.floor((Math.random() * (1 + 12000 - (-12000)) + (-12000)))];
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'name', 'clouds' + i,
++					'shaderName', 'Textured',
++					'animation', {'time': Date.now(),'target': translation,'current': translation},
++					'diffuseColor', [0.7,0.7,0.7,1.0],
++					'mesh', mesh,
++					'scale', [2500, 2500, 2500],
++					'translation', translation
++				);
+ 			}
+-			//TODO: Steven, please add <canvas.clouds.quantity> total cloud nodes, randomly spread over the mesh, giving each one a new name and adding them to the canvas.clouds.list so that we can track them later.
+-			
+ 		}
+-		if (options.getfieldvalue('render',[]).indexOf('latlong')!=-1) {	
+-			//latlong
+-			node = Node(gl);
+-			node.name = "clouds";
+-			node.shaderName = "Clouds";
+-			node.shader = gl.shaders[node.shaderName];
+-			node.drawOrder = 2;
+-			node.cullFace = gl.BACK;
+-			node.enableCullFace = true;
+-			node.mesh = GL.Mesh.fromURL(canvas.rootPath+'obj/cloud.obj');
+-			node.rotation = [0, 0, 0];
+-			node.scale = [2500, 2500, 2500];
+-			node.translation = [translation[0], translation[1] - 405000, translation[2]];
+-			node.center = [0, 0, 0];
+-			node.animation = {"time": Date.now(),"target": node.translation,"current": node.translation};
+-			updateModelMatrix(node);
+-			canvas.nodes[node.name] = node;
+-		}
+ 	} //}}}
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_transient_movie.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_transient_movie.m	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_transient_movie.m	(revision 21768)
+@@ -6,7 +6,7 @@
+ %   See also: PLOTMODEL, PLOT_UNIT, PLOT_MANAGER
+ 
+ 	%prepare subplot
+-	subplot(width,width,i); 
++	subplot(width,width,i);
+ 
+ 	%xlim
+ 	if exist(options,'transient_movie_field'),
+Index: ../trunk-jpl/src/m/plot/webgl_node.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl_node.js	(nonexistent)
++++ ../trunk-jpl/src/m/plot/webgl_node.js	(revision 21768)
+@@ -0,0 +1,464 @@
++//NODE class definition //{{{
++//	Description:
++//		Contains all information for rendering an object in WebGL, including mesh, materials, shaders, and other attributes.	
++//	Usage:
++//		node=new Node('canvas', canvas);
++
++function Node() { //{{{
++	//properties 
++	// {{{
++	var args = Array.prototype.slice.call(arguments);
++	var options = new pairoptions(args.slice(0,args.length));
++
++	this.canvas = options.getfieldvalue('canvas', 								null),
++	this.options = options.getfieldvalue('options', 							null),
++	this.gl = canvas.gl;
++	
++	this.alpha = options.getfieldvalue('alpha', 								1.0),
++	this.animation = options.getfieldvalue('animation', 						{}),
++	this.arrays = options.getfieldvalue('arrays', 								{}),
++	this.caxis = options.getfieldvalue('caxis', 								[0.0, 1.0]),
++	this.center = options.getfieldvalue('center', 								vec3.create()),
++	this.cullFace = options.getfieldvalue('cullFace', 							this.gl.BACK),
++	this.computeIndices = options.getfieldvalue('computeIndices', 				true),
++	this.disableDepthTest = options.getfieldvalue('disableDepthTest', 			false),
++	this.diffuseColor = options.getfieldvalue('diffuseColor', 					[0.0, 0.0, 0.0, 1.0]),
++	this.drawMode = options.getfieldvalue('drawMode', 							this.gl.TRIANGLES),
++	this.drawOrder = options.getfieldvalue('drawOrder', 						1),
++	this.enabled = options.getfieldvalue('enabled', 							true),
++	this.enableCullFace = options.getfieldvalue('enableCullFace', 				true),
++	this.hideOcean = options.getfieldvalue('hideOcean', 						false),
++	this.lineWidth = options.getfieldvalue('lineWidth', 						1.0),
++	this.log = options.getfieldvalue('log', 									false),
++	this.maskColor = options.getfieldvalue('maskColor', 						vec4.fromValues(0.0, 0.0, 1.0, 1.0)),
++	this.maskEnabled = options.getfieldvalue('maskEnabled', 					false),
++	this.maskHeight = options.getfieldvalue('maskHeight', 						150.0),
++	this.maskZerosColor = options.getfieldvalue('maskZerosColor', 				[1.0, 1.0, 1.0, 1.0]),
++	this.maskZerosEnabled = options.getfieldvalue('maskZerosEnabled', 			false),
++	this.maskZerosTolerance = options.getfieldvalue('maskZerosTolerance', 		1e-6),
++	this.maskZerosZeroValue = options.getfieldvalue('maskZerosZeroValue', 		0.5),
++	this.mesh = options.getfieldvalue('mesh', 									undefined),
++	this.name = options.getfieldvalue('name', 									'node'),
++	this.nanIndices = options.getfieldvalue('nanIndices', 						new Set()),
++	this.octree = options.getfieldvalue('octree', 								undefined),
++	this.pointSize = options.getfieldvalue('pointSize', 						15.0),
++	this.shaderName = options.getfieldvalue('shaderName', 						'Colored'),
++	this.shader = options.getfieldvalue('shader', 								this.gl.shaders[this.shaderName]),
++	this.texture = options.getfieldvalue('texture', 							undefined),
++	this.scale = options.getfieldvalue('scale', 								vec3.fromValues(1, 1, 1)),
++	this.rotation = options.getfieldvalue('rotation', 							vec3.create()),
++	this.translation = options.getfieldvalue('translation', 					vec3.create()),
++	this.modelMatrix = options.getfieldvalue('modelMatrix', 					mat4.create()),
++	this.rotationMatrix = options.getfieldvalue('rotationMatrix', 				mat4.create()),
++	this.inverseModelMatrix = options.getfieldvalue('inverseModelMatrix', 		mat4.create()),
++	this.inverseRotationMatrix = options.getfieldvalue('inverseRotationMatrix', mat4.create())
++	//}}}
++	//initialize {{{
++	//if (this.name in canvas.nodes) abort? 
++	this.updateModelMatrix();
++	this.updateDiffuseColor();
++	canvas.nodes[this.name] = this;
++	//}}}
++} //}}}
++Node.prototype.updateModelMatrix = function() { //{{{
++	//Update the model matrix if rotation, scale, or translation have been manually modified.
++	var modelMatrix = mat4.create();
++
++	var translationMatrix = mat4.create();
++	mat4.translate(translationMatrix, translationMatrix, vec3.negate(vec3.create(), this.center)); //scale/rotation centering
++	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
++	
++	var scaleMatrix = mat4.create();
++	mat4.scale(scaleMatrix, scaleMatrix, this.scale);
++	mat4.multiply(modelMatrix, scaleMatrix, modelMatrix);
++	
++	var rotationMatrix = mat4.create();
++	var zRotationMatrix = mat4.create();	
++	mat4.rotate(zRotationMatrix, zRotationMatrix, DEG2RAD * this.rotation[2], [0.0, 0.0, 1.0]);
++	mat4.multiply(rotationMatrix, zRotationMatrix, rotationMatrix);
++	var yRotationMatrix = mat4.create();	
++	mat4.rotate(yRotationMatrix, yRotationMatrix, DEG2RAD * this.rotation[1], [0.0, 1.0, 0.0]);
++	mat4.multiply(rotationMatrix, yRotationMatrix, rotationMatrix);
++	var xRotationMatrix = mat4.create();	
++	mat4.rotate(xRotationMatrix, xRotationMatrix, DEG2RAD * this.rotation[0], [1.0, 0.0, 0.0]);
++	mat4.multiply(rotationMatrix, xRotationMatrix, rotationMatrix);
++	mat4.multiply(modelMatrix, rotationMatrix, modelMatrix);	
++	
++	mat4.identity(translationMatrix);
++	mat4.translate(translationMatrix, translationMatrix, this.center); //relative translation
++	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
++	
++	mat4.identity(translationMatrix);
++	mat4.translate(translationMatrix, translationMatrix, this.translation); //absolute translation
++	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
++	
++	this.modelMatrix = modelMatrix;
++	this.inverseModelMatrix = mat4.invert(mat4.create(), modelMatrix);
++	this.rotationMatrix = rotationMatrix;
++	this.inverseRotationMatrix = mat4.invert(mat4.create(), rotationMatrix);
++} //}}}
++Node.prototype.updateDiffuseColor = function() { //{{{
++	//Update the diffuse color with an RGB color name or vec4 containing r, g, b, and alpha values from 0.0 to 1.0
++	var color = this.diffuseColor;
++	if (typeof color === 'string') {
++		color = new RGBColor(color);
++		if (color.ok) color = [color.r/255.0, color.g/255.0, color.b/255.0, 1.0];
++		else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out edgecolor color for curent canvas ", canvas));
++	}
++	this.diffuseColor = color;
++} //}}}
++Node.prototype.transform = function() { //{{{
++	//Transforms the translation, rotation, or scle fo the node and updates the model matrix.
++	var args = Array.prototype.slice.call(arguments);
++	var options = new pairoptions(args.slice(0,args.length));
++	
++	var translation = options.getfieldvalue('translation', undefined);
++	var rotation = options.getfieldvalue('rotation', undefined);
++	var scale = options.getfieldvalue('scale', undefined);
++	
++	if (!isEmptyOrUndefined(translation)) this.translation = translation;
++	if (!isEmptyOrUndefined(rotation)) this.rotation = rotation;
++	if (!isEmptyOrUndefined(scale)) this.scale = scale;
++	this.updateModelMatrix();
++} //}}}
++Node.prototype.patch = function() { //{{{
++	//Emulates the behavior of MATLAB patch function by constructing a mesh from arguments.
++	//Limitations: 
++	//	-Expects pair labeled arguments ('FaceColor','none',...).
++	//	-Only handles Face/Vertices/FaceVertexCData element/node plots.
++	//	-Only supports FaceColor 'interp' and 'none'.
++	
++	var args = Array.prototype.slice.call(arguments);
++	var options = new pairoptions(args.slice(0,args.length));
++
++	var faces = options.getfieldvalue('Faces', undefined);
++	var vertices = options.getfieldvalue('Vertices', undefined);
++	var faceVertexCData = options.getfieldvalue('FaceVertexCData', undefined);
++	var faceColor = options.getfieldvalue('FaceColor', 'interp');
++	var edgeColor = options.getfieldvalue('EdgeColor', this.diffuseColor);
++	var lineWidth = options.getfieldvalue('linewidth', 1);
++	
++	this.faces = faces;
++	this.vertices = vertices;
++	this.diffuseColor = edgeColor;
++	this.updateDiffuseColor();
++	
++	this.patchVertices(faceVertexCData, faces, vertices);
++	this.patchCoords(faceVertexCData, faces, vertices);
++	this.patchIndices(faces, faceColor);
++
++	this.mesh = GL.Mesh.load(this.arrays, null, null, this.gl);
++	//this.mesh.computeNormals();
++	this.computeOctree();
++} //}}}
++Node.prototype.patchVertices = function(faceVertexCData, faces, vertices) { //{{{
++	//Patch subfunction for processing xyz vertices.
++	var vertexArray;
++	var face;
++	
++	if (isEmptyOrUndefined(faceVertexCData)) {
++		vertexArray = new Float32Array(vertices[0].length * 3);
++		for(var i = 0, v = 0; i < vertices[0].length; i++) {	
++			vertexArray[v++] = vertices[0][i];
++			vertexArray[v++] = vertices[1][i];
++			vertexArray[v++] = vertices[2][i];
++		}
++	}
++	else if (!Array.isArray(faceVertexCData[0])) { //indexed plot - faceVertexCData = [0, 2.32, 231.1, ...]
++		if (faceVertexCData.length === faces.length) { //element plot
++			vertexArray = new Float32Array(faces.length * 3 * 3);
++			for(var i = 0, v = 0, t = 0; i < faces.length; i++) {
++				face = [faces[i][0] - 1, faces[i][1] - 1, faces[i][2] - 1];
++				for(var j = 0; j < face.length; j++) {
++					if (isNaN(faceVertexCData[i])) {
++						this.nanIndices.add(i);
++						vertexArray[v++] = 0.0;
++						vertexArray[v++] = 0.0;
++						vertexArray[v++] = 0.0;
++					}
++					else {
++						vertexArray[v++] = vertices[0][face[j]];
++						vertexArray[v++] = vertices[1][face[j]];
++						vertexArray[v++] = vertices[2][face[j]];
++					}
++				}
++			}
++			this.computeIndices = false;
++		}
++		else if (faceVertexCData.length === vertices[0].length) { //node plot
++			vertexArray = new Float32Array(vertices[0].length * 3);
++			for(var i = 0, v = 0, t = 0; i < vertices[0].length; i++) {
++				if (isNaN(faceVertexCData[i])) {
++					this.nanIndices.add(i);
++					vertexArray[v++] = 0.0;
++					vertexArray[v++] = 0.0;
++					vertexArray[v++] = 0.0;
++				}
++				else {
++					vertexArray[v++] = vertices[0][i];
++					vertexArray[v++] = vertices[1][i];
++					vertexArray[v++] = vertices[2][i];
++				}
++			}
++		}
++	}
++	else if (Array.isArray(faceVertexCData[0])) { //JS specific: precomputed UV coord plot - faceVertexCData = [[0, 0.99, 0.4, ...],[0, 0.99, 0.4, ...]]
++		if (faceVertexCData[0].length === faces.length) { //element plot
++			vertexArray = new Float32Array(faces.length * 3 * 3);
++			for(var i = 0, v = 0, t = 0; i < faces.length; i++) {
++				face = [faces[i][0] - 1, faces[i][1] - 1, faces[i][2] - 1];
++				for(var j = 0; j < face.length; j++) {					
++					vertexArray[v++] = vertices[0][face[j]];
++					vertexArray[v++] = vertices[1][face[j]];
++					vertexArray[v++] = vertices[2][face[j]];
++				}
++			}
++			this.computeIndices = false;
++		}
++		else if (faceVertexCData[0].length === vertices[0].length) { //node plot
++			vertexArray = new Float32Array(vertices[0].length * 3);
++			for(var i = 0, v = 0, t = 0; i < vertices[0].length; i++) {
++				vertexArray[v++] = vertices[0][i];
++				vertexArray[v++] = vertices[1][i];
++				vertexArray[v++] = vertices[2][i];
++			}
++		}
++	}
++	this.arrays.vertices = vertexArray;
++} //}}}
++Node.prototype.patchCoords = function(faceVertexCData, faces, vertices) { //{{{
++	//Patch subfunction for processing texture coords/UVs.
++	var coordArray;
++	var cramge;
++	var caxis = this.caxis;
++	var face;
++	
++	if (isEmptyOrUndefined(faceVertexCData)) { return; }
++	
++	//Use logarithmic scaling if it is valid
++	if (this.log !== false && this.log !== 'off') {	
++		caxis = [
++			Math.log10(caxis[0]) / Math.log10(this.log), 
++			Math.log10(caxis[1]) / Math.log10(this.log)
++		];
++	}
++	
++	if (!Array.isArray(faceVertexCData[0])) { //indexed plot - faceVertexCData = [0, 2.32, 231.1, ...]
++		if (faceVertexCData.length === faces.length) { //element plot
++			coordArray = new Float32Array(faces.length * 3 * 2);
++			crange = caxis[1] - caxis[0];
++			for(var i = 0, v = 0, t = 0; i < faces.length; i++) {
++				face = [faces[i][0] - 1, faces[i][1] - 1, faces[i][2] - 1];
++				for(var j = 0; j < face.length; j++) {
++					if (isNaN(faceVertexCData[i])) {
++						this.nanIndices.add(i);
++						coordArray[t++] = 0.0;
++						coordArray[t++] = 0.0;
++					}
++					else {
++						coordArray[t++] = 0.5;
++						coordArray[t++] = clamp((faceVertexCData[i] - caxis[0]) / crange, 0.0, 1.0);
++					}
++				}
++			}
++			this.computeIndices = false;
++		}
++		else if (faceVertexCData.length === vertices[0].length) { //node plot
++			coordArray = new Float32Array(vertices[0].length * 2);
++			crange = caxis[1] - caxis[0];
++			for(var i = 0, v = 0, t = 0; i < vertices[0].length; i++) {
++				if (isNaN(faceVertexCData[i])) {
++					this.nanIndices.add(i);
++					coordArray[t++] = 0.0;
++					coordArray[t++] = 0.0;
++				}
++				else {
++					coordArray[t++] = 0.5;
++					coordArray[t++] = clamp((faceVertexCData[i] - caxis[0]) / crange, 0.0, 1.0);
++				}
++			}
++		}
++	}
++	else if (Array.isArray(faceVertexCData[0])) { //JS specific: precomputed UV coord plot - faceVertexCData = [[0, 0.99, 0.4, ...],[0, 0.99, 0.4, ...]]
++		if (faceVertexCData[0].length === faces.length) { //element plot
++			coordArray = new Float32Array(faces.length * 3 * 2);
++			for(var i = 0, v = 0, t = 0; i < faces.length; i++) {
++				face = [faces[i][0] - 1, faces[i][1] - 1, faces[i][2] - 1];
++				for(var j = 0; j < face.length; j++) {					
++					coordArray[t++] = faceVertexCData[0][i];
++					coordArray[t++] = faceVertexCData[1][i];
++				}
++			}
++			this.computeIndices = false;
++		}
++		else if (faceVertexCData[0].length === vertices[0].length) { //node plot
++			coordArray = new Float32Array(vertices[0].length * 2);
++			for(var i = 0, v = 0, t = 0; i < vertices[0].length; i++) {
++				coordArray[t++] = faceVertexCData[0][i];
++				coordArray[t++] = faceVertexCData[1][i];
++			}
++		}
++	}
++	this.arrays.coords = coordArray;
++} //}}}
++Node.prototype.patchIndices = function(faces, faceColor) { //{{{
++	//Patch subfunction for processing faces/elements/triangles/indices.
++	var indexArray;
++	var face;
++	
++	if (faceColor === 'none') { //Check for wireframe mesh rendering
++		if (this.drawMode === this.gl.TRIANGLES) { //NOTE: Stopgap to allow gl.LINE_STRIP nodes render normally. Only use case for faceColor === 'none' is for plot_mesh
++			this.drawMode = this.gl.LINES;
++		}
++	}
++	
++	if (this.computeIndices === true && !isEmptyOrUndefined(faces)) {
++		if (!isEmptyOrUndefined(faces[0])) { //Check for 2D format and process if needed
++			if (faceColor !== 'none') { //Check for triangle rendering
++				indexArray = new Uint16Array(faces.length * 3);
++				for(var i = 0, f = 0; i < faces.length; i++) {
++					face = [faces[i][0] - 1, faces[i][1] - 1, faces[i][2] - 1];
++					if (this.nanIndices.has(face[0]) || this.nanIndices.has(face[1]) || this.nanIndices.has(face[2])) continue; //Skip triangle if contains NaN value.
++					indexArray[f++] = faces[i][0] - 1;
++					indexArray[f++] = faces[i][1] - 1;
++					indexArray[f++] = faces[i][2] - 1;
++				}
++			}
++			else { //Check for wireframe mesh rendering
++				indexArray = new Uint16Array(faces.length * 6);
++				for(var i = 0, f = 0; i < faces.length; i++) {
++					indexArray[f++] = faces[i][0] - 1;
++					indexArray[f++] = faces[i][1] - 1;
++					indexArray[f++] = faces[i][1] - 1;
++					indexArray[f++] = faces[i][2] - 1;
++					indexArray[f++] = faces[i][2] - 1;
++					indexArray[f++] = faces[i][0] - 1;
++				}
++			}
++		}
++		else { //Else, assume face indices have already been processed
++			indexArray = faces;
++		}
++		this.arrays.triangles = indexArray;
++	}
++} //}}}
++Node.prototype.updateBuffer = function() { //{{{
++	//Updates the mesh buffers provided in place.
++	//NOTE: Only support coord buffers currently.
++	var args = Array.prototype.slice.call(arguments);
++	var options = new pairoptions(args.slice(0,args.length));
++
++	var coords = options.getfieldvalue('Coords', undefined);
++	var cacheIndex = options.getfieldvalue('CacheIndex', false);
++	
++	if (!isEmptyOrUndefined(coords)) {
++		this.patchCoords(coords, this.faces, this.vertices);
++		var buffer = this.mesh.getBuffer("coords");
++		buffer.data = this.arrays.coords;
++		buffer.upload(this.gl.DYNAMIC_DRAW);
++	}
++} //}}}
++Node.prototype.computeOctree = function() { //{{{
++	//Computes and caches octrees for a node.
++	var octree = this.canvas.octrees[this.name];
++	if (isEmptyOrUndefined(octree)) {
++		octree = new GL.Octree(this.mesh);
++	}
++	this.canvas.octrees[this.name] = octree;
++	this.octree = octree;
++} //}}}
++Node.prototype.geometryShader = function() { //{{{
++	//Emulates OpenGL geometry shaders by rendering each point as a mesh.
++	//Parameters:
++	//	Mesh - the geometry to duplicate for each point.
++	//	Vertices - the list of points to shade.
++	//	Indices - (optional) ordered list for non-ordered Vertices objects.
++	
++	var args = Array.prototype.slice.call(arguments);
++	var options = new pairoptions(args.slice(0,args.length));
++
++	var mesh = options.getfieldvalue('Mesh', undefined);
++	var vertices = options.getfieldvalue('Vertices', undefined);
++	var indices = options.getfieldvalue('Indices', undefined);
++	
++	//For handling key-value object arrays, like xcity
++	for (var i = 0; i < vertices.length; i++) {
++		if (!Array.isArray(vertices[i])) {
++			var array = [];
++			var coordinateObject = vertices[i];
++			var j = 0;
++			if (isEmptyOrUndefined(indices)) {
++				for (var key in object) {
++					array[j++] = coordinateObject[key];
++				}
++			}
++			else {
++				for (var k = 0; k < indices.length; k++) {
++					array[j++] = coordinateObject[indices[k]];
++				}
++			}
++			vertices[i] = array;
++		}
++	}
++	
++	var x = vertices[0];
++	var y = vertices[1];
++	var z = vertices[2];
++	var meshVertices = mesh.getBuffer('vertices').data;
++	var meshIndicies = mesh.getIndexBuffer('triangles').data;
++	var indicies = new Uint16Array(meshIndicies.length * x.length);
++	var size = meshVertices.length * x.length / 3;
++	newX = new Float32Array(size);
++	newY = new Float32Array(size);
++	newZ = new Float32Array(size);
++	
++	//For each vertex in vertices, instantiate mesh geomtry centered around that point.
++	for(var i = 0, v = 0, e = 0; i < x.length; i++){
++		var vector = [x[i], y[i], z[i]];
++		for (var j = 0; j < meshVertices.length;) {
++			newX[v] = meshVertices[j++] + x[i];
++			newY[v] = meshVertices[j++] + y[i];
++			newZ[v++] = meshVertices[j++] + z[i];
++		}
++		var offset = i * meshVertices.length / 3;
++		for (var j = 0; j < meshIndicies.length;) {
++			indicies[e++] = meshIndicies[j++] + offset;
++		}
++	}
++	
++	this.patch('Faces', indicies, 'Vertices', [newX, newY, newZ], 'FaceColor', 'interp');
++} //}}}
++Node.prototype.scaleVertices = function(md, x, y, z, scale) { //{{{
++	//Scales and returns vertices x, y, and z by factor scale. Uses md.geometry.scale for heightscaling in 3d meshes.
++	if (md.mesh.classname() === 'mesh3dsurface') {
++		var xyz, magnitude;
++		x = x.slice();
++		y = y.slice();
++		z = z.slice();
++		for(var i = 0; i < x.length; i++) {
++			xyz = vec3.fromValues(x[i], y[i], z[i]);
++			magnitude = 1 + md.geometry.surface[i] * scale / vec3.length(xyz);
++			vec3.scale(xyz, xyz, magnitude);
++			x[i] = xyz[0];
++			y[i] = xyz[1];
++			z[i] = xyz[2];
++		}
++	}
++	else {
++		z = z.slice();
++		var zMin = ArrayMin(md.geometry.surface);
++		for(var i = 0; i < z.length; i++) {
++			z[i] = (z[i] - zMin) * scale + zMin;
++		}
++	}
++	return [x, y, z];
++} //}}}
++Node.prototype.mergeVertices = function(x1, y1, z1, elements1, x2, y2, z2, elements2) { //{{{
++	//Merges and returns two sets of indexed xyz vertices.
++	elements2 = elements2.slice();
++	for (var i = 0, offset = x1.length; i < elements2.length; i++) {
++		elements2[i] = [elements2[i][0] + offset, elements2[i][1] + offset, elements2[i][2] + offset];
++	}
++	return {x:x1.concat(x2), y:y1.concat(y2), z:z1.concat(z2), elements:elements1.concat(elements2)};
++} //}}}
++//}}}
+Index: ../trunk-jpl/src/m/plot/plot_manager.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_manager.js	(revision 21768)
+@@ -13,7 +13,7 @@
+ 	var data = options.getfieldvalue('data');
+ 	var canvas = initCanvas(options);
+ 	var gl = canvas.gl;
+-	//TODO: each plot_ should add their node to the canvas.node array
++
+ 	//figure out if this is a special plot
+ 	if (typeof data === 'string'){
+ 		
+@@ -80,9 +80,9 @@
+ 				plot_mesh(md,options,canvas);
+ 				return;
+ 			case 'none':
+-				if (!(options.exist('overlay'))){
+-					plot_none(md,options,nlines,ncols,i);
+-				}
++				//if (!(options.exist('overlay'))){
++				//	plot_none(md,options,nlines,ncols,i);
++				//}
+ 				return;
+ 			case 'penalties':
+ 				plot_penalties(md,options,subplotwidth,i);
+@@ -150,7 +150,7 @@
+ 				plot_thermaltransient_results(md,options,subplotwidth,i);
+ 				return;
+ 			case 'transient_movie':
+-				plot_transient_movie(md,options,subplotwidth,i);
++				plot_transient_movie(md,options,canvas);
+ 				return;
+ 			case 'transient_results':
+ 				plot_transient_results(md,options,subplotwidth,i);
+@@ -204,5 +204,5 @@
+ 	//plot unit
+ 	plot_unit(md,data2,datatype,options,canvas);
+ 
+-	applyoptions(md,data2,datatype,options,canvas,gl,canvas.nodes[canvas.nodes.length-1]);
++	applyoptions(md,data2,options,canvas);
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_unit.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_unit.js	(revision 21768)
+@@ -6,7 +6,14 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
+-	//{{{ declare variables: 
++	//if ('unit' in canvas.nodes) {
++	//	if (
++	//	canvas.nodes.unit.updateBuffer('Coords', data);
++	//	return;
++	//}
++	//else {
++		
++	//{{{ declare variables:
+ 	//Process data and model
+ 	var meshresults = processmesh(md, data, options);
+ 	var x = meshresults[0]; 
+@@ -15,78 +22,64 @@
+ 	var elements = meshresults[3];
+ 	var is2d = meshresults[4]; 
+ 	var isplanet = meshresults[5];
++	if (md.mesh.classname() !== 'mesh3dsurface') z = md.geometry.surface;
+ 	
+-	var vertices = new Float32Array(x.length * 3);
+-	var texcoords = new Float32Array(x.length * 2);
+-	var indices = new Uint16Array(elements.length * 3);
+-	var nanindices = {};
+-	var xmin, xmax;
+-	var ymin, ymax;
+-	var zmin, zmax;
+-	var datamin, datamax, datadelta;
+-	var matrixscale, vertexscale;
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length, 0);
++	//Compute coordinates and data range:
++	var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
++	var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
++	var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
++	
++	//Handle heightscale
++	var vertices, scale;
++	if (md.mesh.classname() !== 'mesh3dsurface') {
++		vertices = [x, y, z];
++		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale', 1);
+-	}
+ 	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale', 1);
+-		vertexscale = 0;
++		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		scale = [1, 1, 1];
+ 	}
+-	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-	var modelylim = [ArrayMin(y), ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim', modelxlim);
+-	var ylim = options.getfieldvalue('ylim', modelylim);
+-	var zlim = options.getfieldvalue('zlim', modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-	var caxis;
+-
++	
+ 	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl);
+-	canvas.nodes[canvas.nodes.length] = node;
++	var edgecolor = options.getfieldvalue('edgecolor', 'black');
++	var maskzeros = options.getfieldvalue('maskzeros', {});
++	var node = new Node(
++		'canvas', canvas,
++		'options', options,
++		'name', 'unit',
++		'shaderName', 'Textured',
++		'alpha', options.getfieldvalue('alpha', 1.0),
++		'caxis', options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]),
++		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
++		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
++		'diffuseColor', edgecolor,
++		'enabled', options.getfieldvalue('nodata','off') == 'off',
++		'log', options.getfieldvalue('log',false),
++		'maskEnabled', options.getfieldvalue('innermask','off') == 'on',
++		'maskHeight', options.getfieldvalue('innermaskheight', 150.0) / options.getfieldvalue('heightscale', 1),
++		'maskColor', options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]),
++		'maskZerosColor', defaultFor(maskzeros.color,[1.0, 1.0, 1.0, 1.0]),
++		'maskZerosEnabled', defaultFor(maskzeros.enabled,false),
++		'maskZerosTolerance', defaultFor(maskzeros.tolerance,1e-3),
++		'maskZerosZeroValue', defaultFor(maskzeros.zeroValue,0.5),
++		'rotation', [-90, 0, 0],
++		'scale', scale
++	);
++	//}
+ 	canvas.unitNode = node;
+ 	canvas.unitData = data;
+-	node.name = "unit";
+-	node.shaderName = "Textured";
+-	node.shader = gl.shaders[node.shaderName];
+-	node.scale = [1, 1, matrixscale];
+-	node.rotation = [-90, 0, 0];
+-	node.translation = [0, 0, 0];
+-	node.center = [(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2];
+-	node.alpha = options.getfieldvalue('alpha', 1.0);
+-	node.drawOrder = 1;
+-	node.maskEnabled = options.getfieldvalue('innermask','off') == 'on';
+-	node.maskHeight = options.getfieldvalue('innermaskheight', 150.0);
+-	node.maskColor = options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]);
+-	node.enabled = options.getfieldvalue('nodata','off') == 'off';
+-	updateModelMatrix(node);
+-
++	//}}}
+ 	switch(datatype){
+ 		//{{{ element plot
+ 		case 1:
++			//WARNING: NaN are not properly found (NaN != NaN = true)
+ 			pos=ArrayFindNot(data, NaN); //needed for element on water
+ 			if (elements[0].length==6){ //prisms
+ 			}
+ 			else if (elements[0].length==4){ //tetras
+ 			}
+-			else{ //2D triangular elements
++			else{ //triangular elements
++				node.patch('Faces', elements, 'Vertices', vertices, 'FaceVertexCData', data, 'FaceColor', 'flat', 'EdgeColor', edgecolor);
+ 			}
+ 			break;
+ 		//}}}
+@@ -97,55 +90,8 @@
+ 			else if (elements[0].length==4){ //tetras
+ 			}
+ 			else{ //triangular elements	
+-				caxis = options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]);
+-				if (options.getfieldvalue('log','off')!='off') caxis = [Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10)), Math.log10(caxis[1])/Math.log10(options.getfieldvalue('log', 10))];
+-				datamin = caxis[0];
+-				datamax = caxis[1];
+-				datadelta = datamax - datamin;
+-
+-				var xyz = vec3.create();
+-				var direction = vec3.create();
+-				var vertex = vec3.create();
+-				var magnitude;
+-
+-				for(var i = 0, vindex = 0, tindex = 0; i < x.length; i++){
+-					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i]) || isNaN(data[i])) {
+-						nanindices[i] = i;
+-						vertices[vindex++] = vertex[0];
+-						vertices[vindex++] = vertex[1];
+-						vertices[vindex++] = vertex[2];
+-						
+-						texcoords[tindex++] = 0.5;
+-						texcoords[tindex++] = 0.0;
+-						continue;
+-					}
+-
+-					//Scale vertices
+-					xyz = vec3.fromValues(x[i], y[i], z[i]);
+-					magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-					vec3.normalize(direction, xyz);
+-					vec3.scale(vertex, direction, magnitude);
+-					vertices[vindex++] = vertex[0];
+-					vertices[vindex++] = vertex[1];
+-					vertices[vindex++] = vertex[2];
+-
+-					texcoords[tindex++] = 0.5;
+-					texcoords[tindex++] = clamp((data[i] - datamin) / datadelta, 0.0, 1.0);
+-				}
+-
+-				//linearize the elements array: 
+-				var element;
+-				for(var i = 0, iindex = 0; i < elements.length; i++){
+-					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-					indices[iindex++] = element[0];
+-					indices[iindex++] = element[1];
+-					indices[iindex++] = element[2];
+-				}
++				node.patch('Faces', elements, 'Vertices', vertices, 'FaceVertexCData', data, 'FaceColor', 'interp', 'EdgeColor', edgecolor);
+ 			}
+-			node.mesh = GL.Mesh.load({vertices: vertices, coords: texcoords, triangles: indices}, null, null, gl);
+-			node.mesh.octree = new GL.Octree(node.mesh);
+ 			break;
+ 		//}}}
+ 		//{{{ quiver plot 
+@@ -158,135 +104,7 @@
+ 			}
+ 			break;
+ 		//}}}
+-		//{{{ node transient plot
+-		case 5:
+-			if (elements[0].length==6){ //prisms
+-			}
+-			else if (elements[0].length==4){//tetras
+-			}
+-			else{ //triangular elements
+-				var xyz = vec3.create();
+-				var direction = vec3.create();
+-				var vertex = vec3.create();
+-				var magnitude;
+-				var timestamps = data[data.length-1];
+-				for(var i = 0, vindex = 0, tindex = 0; i < x.length; i++){
+-					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i]) || isNaN(data[i][0])) {
+-						nanindices[i] = i;
+-					}
+-					else {
+-						//Scale vertices
+-						xyz = vec3.fromValues(x[i], y[i], z[i]);
+-						magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-						vec3.normalize(direction, xyz);
+-						vec3.scale(vertex, direction, magnitude);
+-					}
+-					vertices[vindex++] = vertex[0];
+-					vertices[vindex++] = vertex[1];
+-					vertices[vindex++] = vertex[2];
+-				}	
+-				//Transpose data to obtain column addressable data matrix
+-				data = data[0].map(function(col, i) { 
+-					return data.map(function(row) { 
+-						return row[i]
+-					})
+-				});
+-				//Prevent evaluation of datasubarray min/max if caxis exists
+-				if (options.exist('caxis')) caxis = options.getfieldvalue('caxis');
+-				else caxis = [ArrayMin(data[0]), ArrayMax(data[0].slice(0,-1))];
+-				if (options.getfieldvalue('log','off')!='off') caxis = [Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log', 10)), Math.log10(caxis[1])/Math.log10(options.getfieldvalue('log', 10))];
+-				//Prepare texcoords to hold array of data values
+-				texcoords = [];
+-				for(var i = 0; i < data.length; i++){					
+-					datamin = caxis[0];
+-					datamax = caxis[1];
+-					datadelta = datamax - datamin;
+-					//Precalculate arrays for each datasubarray, trimming off timestamp value by using x.length instead of data[i].length
+-					texcoords[i] = new Float32Array(x.length * 2);
+-					for(var j = 0, index = 0; j < x.length; j++){
+-						texcoords[i][index++] = 0.5;
+-						texcoords[i][index++] = clamp((data[i][j] - datamin) / datadelta, 0.0, 1.0);
+-					}
+-				}
+-				
+-				//linearize the elements array:
+-				var element;
+-				for(var i = 0, iindex = 0; i < elements.length; i++){
+-					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-					indices[iindex++] = element[0];
+-					indices[iindex++] = element[1];
+-					indices[iindex++] = element[2];
+-				}
+-			
+-				//Initialize movie loop
+-				node.movieLoop = canvas.animation.loop;
+-				node.movieInterval = 1000 / canvas.animation.fps;
+-				node.movieTimestamps = timestamps;
+-				node.movieLength = timestamps.length;
+-				node.movieFrame = 0;
+-				canvas.dataMarkers.values = [];
+-				var quiverVelFrames = {};
+-				for(var i=0; i < md.results.length; i++){
+-					quiverVelFrames[Math.floor(md.results[i].time)] = md.results[i];
+-				}
+-
+-				if (canvas.animation.handler !== 0) {
+-					console.log("clearing...");
+-					clearInterval(canvas.animation.handler)
+-				}
+-				//TODO: Move this into webgl.js
+-				canvas.animation.handler = setInterval(function () {
+-					node.movieFrame = canvas.animation.frame;
+-					if (canvas.animation.play && canvas.animation.increment) {
+-						if (node.movieFrame == node.movieLength - 1) {
+-							if (node.movieLoop) {
+-								node.movieFrame = 0;
+-							}
+-							else { 
+-								toggleMoviePlay(canvas);
+-							}
+-						}
+-						else {
+-							node.movieFrame = node.movieFrame + 1;
+-						}
+-						if (canvas.animation.lastFrame != canvas.animation.frame) {
+-							updateMarker(canvas, false);
+-						}
+-					}
+-					
+-					if (canvas.progressBar) {
+-						canvas.progressBar.val(node.movieFrame);
+-						canvas.progressBar.slider('refresh');
+-					}
+-					if (canvas.timeLabel) { canvas.timeLabel.html(node.movieTimestamps[node.movieFrame].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr")); }
+-					
+-					var buffer = node.mesh.getBuffer("coords");
+-					buffer.data = texcoords[node.movieFrame];
+-					buffer.upload(canvas.gl.DYNAMIC_DRAW);
+-					node.mesh.octree = new GL.Octree(node.mesh);
+-					node.texcoords = texcoords;
+-					if(options.getfieldvalue('quiver') == 'on'){
+-						plot_quiver(md, options, canvas, {vel: quiverVelFrames[node.movieFrame].Vel, vx: quiverVelFrames[node.movieFrame].Vx, vy: quiverVelFrames[node.movieFrame].Vy});
+-					}
+-					canvas.animation.lastFrame = canvas.animation.frame;
+-					canvas.animation.frame = node.movieFrame;					
+-				}, node.movieInterval);
+-				
+-				if (canvas.progressBar) {
+-					canvas.animation.frame = 0;
+-					canvas.progressBar.val(0);
+-					canvas.progressBar.attr('max', node.movieLength-1);
+-					canvas.progressBar.slider('refresh');
+-				}
+-				
+-			}
+-			node.mesh = GL.Mesh.load({vertices: vertices, coords: texcoords[0], triangles: indices}, null, null, gl);
+-			node.mesh.octree = new GL.Octree(node.mesh);
+-			break;
+-		//}}}
+ 		default:
+-			throw Error(sprintf("%s%i%s\n",'case ', datatype,' not supported'));
++			throw Error(sprintf('%s%i%s\n','case ', datatype,' not supported'));
+ 	}
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_overlay.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 21768)
+@@ -6,18 +6,11 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
++	if ('overlay' in  canvas.nodes && options.getfieldvalue('cachenodes','on') === 'on') return;
++	
+ 	//{{{ declare variables:
+-	var vertices = [];
+-	var indices = [];
+-	var texcoords = [];
+-	var nanindices = {};
+-	var xmin, xmax;
+-	var ymin, ymax;
+-	var zmin, zmax;
+-	var matrixscale, vertexscale;
+-
+ 	//Process data and model
+-	var meshresults = processmesh(md, data, options);
++	var meshresults = processmesh(md, [], options);
+ 	var x = meshresults[0]; 
+ 	var y = meshresults[1]; 
+ 	var z = meshresults[2]; 
+@@ -24,139 +17,74 @@
+ 	var elements = meshresults[3]; 
+ 	var is2d = meshresults[4]; 
+ 	var isplanet = meshresults[5];
+-
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length, 0);
++	if (md.mesh.classname() !== 'mesh3dsurface') z = md.geometry.surface;
++	
++	//Compute coordinates and data range:
++	var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
++	var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
++	var zlim = options.getfieldvalue('zlim', [ArrayMin(md.geometry.surface), ArrayMax(md.geometry.surface)]);
++	
++	//Handle radaroverlay
++	if (md.radaroverlay.outerx) {
++		var result = Node.prototype.mergeVertices(x, y, z, elements, md.radaroverlay.outerx, md.radaroverlay.outery, md.radaroverlay.outerheight, md.radaroverlay.outerindex);
++		x = result.x;
++		y = result.y;
++		z = result.z;
++		elements = result.elements;
+ 	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale', 1);
++	
++	//Handle heightscale
++	var vertices, scale;
++	if (md.mesh.classname() !== 'mesh3dsurface') {
++		vertices = [x, y, z];
++		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale', 1);
+-		vertexscale = 0;
++		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		scale = [1, 1, 1];
+ 	}
+-	//}}}
+ 	
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-	var modelylim = [ArrayMin(y), ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim', modelxlim);
+-	var ylim = options.getfieldvalue('ylim', modelylim);
+-	var zlim = options.getfieldvalue('zlim', modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-		
+ 	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	node.name = "overlay";
+-	node.shaderName = (options.getfieldvalue('render',[]).indexOf('ground')!=-1) ? "GroundFromSpace" : "Textured";
+-	node.shader = gl.shaders[node.shaderName];
+-	node.scale = [1, 1, matrixscale];
+-	node.rotation = [-90, 0, 0];
+-	node.translation = [0, 0, 0];
+-	node.center = [(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2];
+-	node.texture = initTexture(gl, options.getfieldvalue('overlay_image'));
+-	node.alpha = options.getfieldvalue('outeralpha', 1.0);
+-	node.drawOrder = 1;
+-	node.maskEnabled = options.getfieldvalue('outermask','off') == 'on';
+-	node.maskHeight = options.getfieldvalue('outermaskheight', 150.0);
+-	node.maskColor = options.getfieldvalue('outermaskcolor',[0.0, 0.0, 1.0, 1.0]);
+-	updateModelMatrix(node);
++	var edgecolor = options.getfieldvalue('edgecolor', 'black');
++	var texture = initTexture(gl, options.getfieldvalue('overlay_image'));
++	var node = new Node(
++		'canvas', canvas,
++		'options', options,
++		'name', 'overlay',
++		'shaderName', 'ground' in options.getfieldvalue('render', {}) ? 'GroundFromSpace' : 'Textured',
++		'alpha', options.getfieldvalue('outeralpha', 1.0),
++		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
++		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
++		'diffuseColor', 'white',
++		'maskEnabled', options.getfieldvalue('outermask','off') == 'on',
++		'maskHeight', options.getfieldvalue('outermaskheight', 150.0),
++		'maskColor', options.getfieldvalue('outermaskcolor',[0.0, 0.0, 1.0, 1.0]),
++		'texture', texture,
++		'rotation', [-90, 0, 0],
++		'scale', scale
++	);
++	//}}}
+ 	
+-	//Handle outer radaroverlay
+-	if (md.radaroverlay.outerx) {
+-		var newelements = [];
+-		for (var i = 0; i < md.radaroverlay.outerindex.length; i++) {
+-			newelements[newelements.length] = [md.radaroverlay.outerindex[i][0] + x.length, md.radaroverlay.outerindex[i][1] + y.length, md.radaroverlay.outerindex[i][2] + z.length];
+-		}
+-		x = [].concat(x, md.radaroverlay.outerx);
+-		y = [].concat(y, md.radaroverlay.outery);
+-		z = [].concat(z, md.radaroverlay.outerheight);
+-		elements = [].concat(elements, newelements);
+-		
+-		//Reclaculate bounds based on otuer radaroverlay
+-		modelxlim = [ArrayMin(x), ArrayMax(x)];
+-		modelylim = [ArrayMin(y), ArrayMax(y)];
+-		modelzlim = [ArrayMin(z), ArrayMax(z)];
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		
+-		node.center = [node.center[0], node.center[1], -zmax];
+-	}
++	var xRange = xlim[1] - xlim[0];
++	var yRange = ylim[1] - ylim[0];
++	var coordArray = [new Array(x.length), new Array(x.length)];
++	//generate mesh:
+ 	
+-	var xrange = modelxlim[1] - modelxlim[0];
+-	var yrange = modelylim[1] - modelylim[0];
+-	
+-	var xyz = vec3.create();
+-	var direction = vec3.create();
+-	var vertex = vec3.create();
+-	var magnitude;
+-
+-	//generate mesh:
+-	for(var i = 0; i < x.length; i++){
+-		//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-		if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+-			nanindices[i] = i;
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = 0.0;
+-			texcoords[texcoords.length] = 0.0;
+-			continue;
+-		}
+-
+-		if (md.mesh.classname() == 'mesh3dsurface') {
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = Math.atan2(vertex[1], vertex[0]) / (2 * Math.PI) + 0.5;
+-			texcoords[texcoords.length] = Math.asin(vertex[2] / magnitude) / Math.PI + 0.5;
+-		}
+-		else {
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
++	if (md.mesh.classname() == 'mesh3dsurface') {
++		var xyz, magnitude;
++		for(var i = 0; i < x.length; i++){
++			xyz = vec3.fromValues(vertices[0][i], vertices[1][i], vertices[2][i]);
+ 			magnitude = vec3.length(xyz);
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = (x[i] - modelxlim[0]) / xrange;
+-			texcoords[texcoords.length] = (y[i] - modelylim[0]) / yrange;
++		
++			coordArray[0][i] = Math.atan2(xyz[1], xyz[0]) / (2 * Math.PI) + 0.5;
++			coordArray[1][i] = Math.asin(xyz[2] / magnitude) / Math.PI + 0.5;
+ 		}
+ 	}
+-	//linearize the elements array:
+-	var element;
+-	for(var i = 0; i < elements.length; i++){
+-		element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-		if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-		indices[indices.length] = element[0];
+-		indices[indices.length] = element[1];
+-		indices[indices.length] = element[2];
++	else {
++		for(var i = 0; i < x.length; i++){
++			coordArray[0][i] = (vertices[0][i] - xlim[0]) / xRange;
++			coordArray[1][i] = (vertices[1][i] - ylim[0]) / yRange;
++		}
+ 	}
+-	node.mesh = GL.Mesh.load({vertices: vertices, coords: texcoords, triangles: indices}, null, null, gl);
++	node.patch('Faces', elements, 'Vertices', vertices, 'FaceVertexCData', coordArray, 'FaceColor', 'interp', 'EdgeColor', edgecolor);
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_transient_movie.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_transient_movie.js	(nonexistent)
++++ ../trunk-jpl/src/m/plot/plot_transient_movie.js	(revision 21768)
+@@ -0,0 +1,100 @@
++function plot_transient_movie(md, options, canvas) { //{{{
++	//PLOT_TRANSIENT_MOVIE - plot a transient result as a movie
++	//
++	//   Usage:
++	//      plot_transient_movie(md, options, canvas);
++	//
++	//   See also: PLOTMODEL, PLOT_MANAGER
++	
++	//loop over the time steps
++	var data = options.getfieldvalue('transient_field_data');
++	var datatype;
++	var steps = new Array(data.length); 
++	for (i = 0; i < steps.length; i++) {
++		steps[i] = i;
++	}
++	
++	//calculate caxis
++	if (!options.exist('caxis')) {
++		var range = [Infinity, -Infinity];
++		var	dataresults;
++		for (var i in steps) {
++			dataresults = processdata(md, data[i], options);
++			range[1] = Math.min(range[0], ArrayMin(dataresults[0]));
++			range[2] = Math.max(range[1], ArrayMax(dataresults[0]));
++		}
++		datatype = dataresults[1];
++		options.addfielddefault('caxis', range);
++		
++	}
++	
++	//Create unit node if it does not already exist
++	if (!('unit' in canvas.nodes)) {
++		var	dataresults = processdata(md, data[i],options);
++		var	data2 = dataresults[0]; 
++		var	datatype = dataresults[1];
++	
++		//plot unit
++		plot_unit(md,data2,datatype,options,canvas);
++	}
++	
++	//display movie
++	var node = canvas.nodes.unit;
++	node.options = options;
++	node.alpha = options.getfieldvalue('alpha', 1.0);
++	node.caxis = options.getfieldvalue('caxis');
++	node.enabled = options.getfieldvalue('nodata', 'off') == 'off';
++	node.log = options.getfieldvalue('log', false);
++	canvas.unitMovieData = data;
++	canvas.animation.frame = 0;
++	canvas.animation.handler = setInterval(function () {
++		//Update current animation frame
++		var frame = canvas.animation.frame;
++		if (canvas.animation.play) {
++			if (canvas.animation.increment) {
++				if (frame > steps.length - 1) {
++					if (node.movieLoop) {
++						frame = 0;
++					}
++					else {
++						toggleMoviePlay(canvas);
++					}
++				}
++				else {
++					frame = (frame + 1) % steps.length;
++				}
++			}
++		}
++		
++		//If frame has changed, update unit node and data marker display.
++		if (frame !== canvas.animation.lastFrame) {
++			node.updateBuffer('Coords', data[frame]);
++			canvas.unitData = data[frame];
++			if (canvas.dataMarkers.enabled) {
++				updateMarker(canvas, false);
++			}
++			if (canvas.progressBar) {
++				canvas.progressBar.val(frame).slider('refresh');
++			}
++			if (canvas.timeLabel) {
++				canvas.timeLabel.html(steps[frame].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
++			}
++			if (!isEmptyOrUndefined(canvas.nodes.quiver)) {
++				plot_quiver(md,options,canvas,false);
++			}
++		}
++		
++		//Save new frame info.
++		canvas.animation.lastFrame = canvas.animation.frame;
++		canvas.animation.frame = frame;
++	}, canvas.animation.interval);
++	
++	//Update progress bar with new frame info.
++	if (canvas.progressBar) {
++		canvas.progressBar.val(canvas.animation.frame);
++		canvas.progressBar.attr('max', steps.length - 1);
++		canvas.progressBar.slider('refresh');
++	}
++				
++	applyoptions(md, [], options, canvas);
++} //}}}
+Index: ../trunk-jpl/src/m/plot/plotdoc.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotdoc.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plotdoc.js	(revision 21768)
+@@ -4,20 +4,25 @@
+ 	//   Usage:
+ 	//      plotdoc()
+ 	
+-	//TODO: Standardize image to overlay_image, heightscale to scaling, colorbarfontsize/color, clarify innermask/outermask, edgecolor implementation, check colormap, 
++	//TODO: rename innermask/outermask/maskzero and combine
+ 
+-	console.log(' WARNING: starred methods (*) are experimental and not guarenteed to be stable');
+ 	console.log('   Plot usage: plotmodel(model,varargin)');
+ 	console.log('   Options: ');
+ 	console.log('       "canvasid": canvas id');
+ 	console.log('       "data" : what we want to plot');
+-	console.log('                Available values for "data" are: ');
+-	console.log('                  - any field of the model structure. ex: plot(md,"data","vel"), or plot(md,"data",md.initialization.vel)');
+-	console.log('                  - "mesh": draw mesh using trisurf');
+-	console.log('                  - "quiver": quiver plot');
+-	console.log('       "2d": renders orthographic camera with view set to [0, 90] (default "off", ex: "on", "off")');
++	console.log('       	Available values for "data" are: ');
++	console.log('       		- any field of the model structure. ex: plot(md,"data","vel"), or plot(md,"data",md.initialization.vel)');
++	console.log('       		- "mesh": draw mesh using trisurf');
++	console.log('       		- "quiver": quiver plot');
+ 	console.log('       "backgroundcolor": plot background color. (default "lightcyan", ex: "green","blue")');
+ 	console.log('       "brush": specify brush options (default {"strength":0.075,"falloff":0.5})');
++	console.log('       	"enabled": toggle brush (default false, ex: true)');
++	console.log('       	"strength": value that brush will change data points by (ex: 0.075)');
++	console.log('       	"falloff": multiplier that brush will decrease strength by for each successive point away from brush center (ex: 0.5)');
++	console.log('       "clouds": specify brush options (default {"strength":0.075,"falloff":0.5})');
++	console.log('       	"enabled": toggle clouds (default false, ex: true)');
++	console.log('       	"height": height to spawn clouds at (ex: 7500)');
++	console.log('       	"quantity": quantity of clouds to spawn (ex: 10)');
+ 	console.log('       "caxis": modify  colorbar range. (array of type [a, b] where b>=a)');
+ 	console.log('       "colorbar": add colorbar (default "off", ex: "on", "off")');
+ 	console.log('       "colorbarid": colorbar canvas id (string)');
+@@ -31,18 +36,26 @@
+ 	console.log('       "colorbarheight": multiplier (default 1) to the default height colorbar');
+ 	console.log('       "colormap": same as standard matlab option (default "jet", ex: "hsv","cool","spring","gray","Ala","Rignot",...)');
+ 	console.log('       "controlsensitivity": sensitivty of view/zoom changes as a percentage of default (default 1, ex: 0.5, 2.75)');
+-	console.log('       "datamarkers": toggle data marker displays (default "on", ex: "on", "off")');
+-	console.log('       "datamarkers_image": toggle data marker displays (default "on", ex: "on", "off")');
+-	console.log('       "datamarkerssize": specifiy the width and height of the data markers (default [32,32], ex: [24,32], [105,10])');
+-	console.log('       "datamarkersoptions": specifiy options for data markers (default {"enabled":"on","image":canvas.rootPath+"textures/data_marker.svg","size":[32,32],"format":["X: %.2e<br>Y: %.2e<br>Z: %.2e]<br>Value: %0.1f","x","y","z","value"]}');
++	console.log('       "datamarkers": object cotaining data marker parameters. See webgl.js for defaults. (ex: {"enabled":true,"format":["<div id="sim-plot"></div>"],"labels":["thickness","velocity","value"],"animated":true})');
++	console.log('       	"enabled": toggle data marker displays (default true, ex: false)');
++	console.log('       	"image": image used for marking the clicked point (ex: "/textures/data_marker.svg")');
++	console.log('       	"labels": when displaying a sim-plot graph, display these model fields. (ex: ["thickness","velocity","value"])');
++	console.log('       	"font": font to be used for display (ex: "24px "Comic Sans MS", cursive")');
++	console.log('       	"format": an array compatible with sprintf that will be displayed as html (ex: ["X: %.2e<br>Y: %.2e<br>Z: %.2e]<br>Value: %0.1f","x","y","z","value"])');
++	console.log('      		"size": specifiy the width and height of the data markers (default [32,32], ex: [24,32], [105,10])');
+ 	console.log('       "displayview": print view value to console (default "off", ex: "on", "off")');
+ 	console.log('       "displayzoom": print zoom value to console (default "off", ex: "on", "off")');
+ 	console.log('       "edgecolor": same as standard matlab option EdgeColor (default "black", ex: color name: "blue" or RGB array: [0.5, 0.2, 0.8])');
+ 	console.log('       "heightscale": scaling factor to accentuate height. (default 1, ex: 0.5, 100)');
+-	console.log('       "linewidth*": line width for mesh, quiver, and contour plots, currently limited by WebGL to 1. (default 1, ex: 2, 5)');
++	console.log('       "linewidth": line width for mesh, quiver, and contour plots, currently limited by WebGL to 1. (default 1, ex: 2, 5)');
+ 	console.log('       "log": value of log (default 10, ex: 2, Math.E)');
+ 	console.log('       "mask": list of flags of size numberofnodes or numberofelements. Only "true" values are plotted ');
+-	console.log('       "movieoptions": specify movie options (default {"fps":4,"loop":true})');
++	console.log('       "movies": object cotaining transient plot animation options (ex: {"fps":4,"loop":true})');
++	console.log('       "maskzeros": object cotaining transient plot animation options (ex: "enabled":true,"color":[1.0, 1.0, 1.0, 1.0],"tolerance":1e-3,"zeroValue":0.5})');
++	console.log('       	"enabled": toggle maskzeros (default false, ex: true)');
++	console.log('       	"color": RGBA color value array with ranges 0.0 to 1.0 (ex: [1.0, 1.0, 1.0, 1.0])');
++	console.log('       	"tolerance": values within this tolerance of the zeroValue will be masked. (default: 1e-3, ex: 2.5e-2)');
++	console.log('       	"zeroValue": the percentage value with range 0.0, to 1.0 of the caxis value around which the data will be masked with the color. (default: 0.5, ex: 0, 1.0, 0.75)');
+ 	console.log('       "innermask*": Special mask that colors all parts of a data mesh below a height a certain color. provide innermaskheight and innermaskcolor options also (default "off", ex: "on", "off")');
+ 	console.log('       "outermask*": Special mask that colors all parts of a overlay mesh below a height a certain color. provide outermaskheight and outermaskcolor options also (default "off", ex: "on", "off")');
+ 	console.log('       "overlay": overlay a radar amplitude image behind (default "off", ex: "on", "off")');
+@@ -50,20 +63,51 @@
+ 	console.log('       "quiver": add quiver plot overlay for velocities. (default "off", ex: "on", "off")');
+ 	console.log('       "scaling": scaling factor used by quiver plots. Default is 0.4');
+ 	console.log('       "alpha": transparency coefficient 0.0 to 1.0, the lower, the more transparent. (default 1.0, ex: 0.5, 0.25)');
+-	console.log('       "azlim": azimuth view limits (ex: [0, 180])');
+-	console.log('       "ellim": elevation view limits (ex: [-90, 90])');
+-	console.log('       "origin": initial camera offset from model center (default [0,0,0.0], ex: [-2, 1.5, 0.01])');
+-	console.log('       "render": toggle sky, ground, and space rendering. (default [], ex: ["sky", "space"], ["ground"])');
+-	console.log('       "viewPanning": enable view origin panning with two-finger touch or shift+mouse drag. (default "off", ex: "on", "off")');
+-	console.log('       "view": initial azimuth and elevation angles for camera (default [0,90], ex: [90, 180]');
++	console.log('       "render": a object containing a list of default object to render. (default {}, ex: {"sky", "space"})');
++	console.log('       	"sky": render the atmosphere. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle sky (default false, ex: true)');
++	console.log('       	"space": render space. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle space (default false, ex: true)');
++	console.log('       	"coastlines": render coastlines. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle coastlines (default false, ex: true)');
++	console.log('       		"scale": scale coastlines factor (default 1.0, ex: 1.004)');
++	console.log('       		"x": x coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"y": y coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"z": z coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       	"city": render city. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle city (default false, ex: true)');
++	console.log('       		"size": radius of city sphere, in meters (default 1.0, ex: 150000)');
++	console.log('       		"color": color of city sphere (ex: "magenta")');
++	console.log('       		"x": x coordinate of city. (ex: 0.0)');
++	console.log('       		"y": y coordinate of city. (ex: 0.0)');
++	console.log('       		"z": z coordinate of city. (ex: 6356700.0)');
++	console.log('       	"cities": render cities. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle cities (default false, ex: true)');
++	console.log('       		"size": radius of cities spheres, in meters (default 1.0, ex: 80000)');
++	console.log('       		"color": color of cities spheres (ex: "darkviolet")');
++	console.log('       		"x": x coordinate array of cities. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"y": y coordinate array of cities. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"z": z coordinate array of cities. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       	"graticule": render graticule. (ex: {"enabled":true})');
++	console.log('       		"enabled": toggle graticule (default false, ex: true)');
++	console.log('       		"scale": scale graticule factor (default 1.0, ex: 1.004)');
++	console.log('       		"x": x coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"y": y coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       		"z": z coordinate array. (ex: [0.0, 10.0, -25.0,...])');
++	console.log('       "view": object cotaining view parameters. See webgl.js for defaults. (ex: {"position":[0.0,0.0,0.0],"rotation":[0.0,0.0,0.0],"zoom":1.0,"zoomLimits":[0.01,100.0],"azimuthLimits":[-180,180.0],"elevationLimits":[-90,90.0],"panningEnabled":false,"twod":false})');
++	console.log('       	"position": camera position (ex: [0.0,0.0,0.0])');
++	console.log('       	"rotation": camera rotation (ex: [0.0,0.0,0.0])');
++	console.log('       	"zoom": initial camera zoom as a percentage of default (default 1, ex: 1.5, 0.01)');
++	console.log('       	"zoomLimits": zoom view limits (ex: [0.05, 10])');
++	console.log('      	 	"azimuthLimits": zoom view limits (ex: [0.05, 10])');
++	console.log('       	"elevationLimits": zoom view limits (ex: [0.05, 10])');
++	console.log('       	"panningEnabled": controls panning with shift + drag mouse or pan gestures (default: false, ex: true)');
++	console.log('       	"twod": controls twod orthographic view (default: false, ex: true)');
+ 	console.log('       "xlim": x coordinates to fit inside camera (ex: [0, 500])');
+ 	console.log('       "ylim": y coordinates to fit inside camera (ex: [0, 500])');
+ 	console.log('       "zlim": z coordinates to fit inside camera (ex: [0, 500])');
+-	console.log('       "zoomlim": zoom view limits (ex: [0.05, 10])');
+-	console.log('       "zoom": initial camera zoom as a percentage of default (default 1, ex: 1.5, 0.01)');
+-	console.log('       "cloud*": plot a cloud of points, given a flat array of 3d coordinates (ex: [0.0, 0.0, 0.0, 1.0, 1.0, 1.0])');
+-	console.log('       "expdisp*": plot exp file on top of a data plot. provide exp file as an argument (use a cell of strings if more than one)');
+-	console.log('       "textlabels*": plot text labels rendered in 3d space, using an array of text/coordinate pairs (ex: [{"pos":[0.0,0.0,0.0],"text":"origin"}])');
++	console.log('       "transient_field_data": array of data objects (ex: [[0.0,1.0, 2.5, 12.0...],[0.0,1.0, 2.5, 12.0...],...])');
++	console.log('       "textlabels": plot text labels rendered in 3d space, using an array of text/coordinate pairs (ex: [{"pos":[0.0,0.0,0.0],"text":"origin"}])');
+ 	
+ 	console.log('  ');
+ 	console.log('   Examples:');
+Index: ../trunk-jpl/src/m/plot/processdata.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/processdata.js	(revision 21768)
+@@ -14,9 +14,6 @@
+ 	//
+ 	//   See also: PLOTMODEL, PROCESSMESH
+ 
+-	//variables: 
+-	var datatype;
+-	
+ 	//check format
+ 	if ( data.length ==0 | data === [] | typeof data === 'number' | ArrayAnyNaN(data) ){
+ 		throw Error('plotmodel error message: data provided is empty');
+@@ -34,6 +31,7 @@
+ 	}
+ 
+ 	//needed later on
++	var numberofvertices2d, numberofelements2d;
+ 	if ('numberofvertices2d' in md.mesh){
+ 		numberofvertices2d=md.mesh.numberofvertices2d; 
+ 		numberofelements2d=md.mesh.numberofelements2d; 
+@@ -44,10 +42,10 @@
+ 	}
+ 
+ 	//initialize datatype
+-	datatype=0;
++	var datatype=0;
+ 
+ 	//get datasize
+-	datasize=data.length;
++	var datasize=data.length;
+ 
+ 	//transpose data if necessary
+ 	if (data[0].length > data.length){
+@@ -63,7 +61,7 @@
+ 
+ 
+ 	//quiver?
+-	if (data[0].length>1){
++	if (Array.isArray(data[0])){
+ 		datatype=3;
+ 
+ 		//check number of columns, add zeros if necessary,
+@@ -114,7 +112,7 @@
+ 	}
+ 
+ 	//element data
+-	if (datasize==md.mesh.numberofelements & data[0].length==1){
++	if (datasize==md.mesh.numberofelements & !Array.isArray(data[0])){
+ 
+ 		//Initialize datatype if non patch
+ 		if(datatype!=4 & datatype!=5){
+@@ -157,7 +155,7 @@
+ 	}
+ 
+ 	//node data
+-	if (datasize==md.mesh.numberofvertices){
++	if (datasize==md.mesh.numberofvertices & !Array.isArray(data[0])){
+ 		datatype=2;
+ 
+ 		//Mask?
+Index: ../trunk-jpl/src/m/plot/plot_quiver.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 21768)
+@@ -1,4 +1,4 @@
+-function plot_quiver(md, options, canvas, updateVel) { //{{{
++function plot_quiver(md, options, canvas, noCacheNodesOverride) { //{{{
+ 	//PLOT_QUIVER - quiver plot with colors
+ 	//
+ 	//   Usage:
+@@ -6,18 +6,11 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
++	if ('quiver' in  canvas.nodes && noCacheNodesOverride && options.getfieldvalue('cachenodes','on') === 'on') return;
++	
+ 	//{{{ declare variables:
+-	var vertices = [];
+-	var indices = [];
+-	var colors = [];
+-	var xmin, xmax;
+-	var ymin, ymax;
+-	var zmin, zmax;
+-	var scale, matrixscale, vertexscale;
+-	
+ 	//Process data and model
+-	var meshresults = processmesh(md,[], options);
+-
++	var meshresults = processmesh(md, [], options);
+ 	var x = meshresults[0]; 
+ 	var y = meshresults[1]; 
+ 	var z = meshresults[2]; 
+@@ -24,66 +17,50 @@
+ 	var elements = meshresults[3]; 
+ 	var is2d = meshresults[4]; 
+ 	var isplanet = meshresults[5];
+-	var v = updateVel != undefined ? updateVel.vel : md.initialization.vel;
+-	var vx = updateVel != undefined ? updateVel.vx : md.initialization.vx;
+-	var vy = updateVel != undefined ? updateVel.vy : md.initialization.vy;
++	if (md.mesh.classname() !== 'mesh3dsurface') z = md.geometry.surface;
+ 		
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length, 0);
++	//Compute coordinates and data range:
++	var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
++	var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
++	var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
++
++	//Only displaying velocity fields for now
++	var v = isEmptyOrUndefined(md.results) ?  md.initialization.vel : md.results[canvas.animation.frame].Vel;
++	var vx = isEmptyOrUndefined(md.results) ? md.initialization.vx : md.results[canvas.animation.frame].Vx;
++	var vy = isEmptyOrUndefined(md.results) ? md.initialization.vy : md.results[canvas.animation.frame].Vy;
++
++	//Handle heightscale
++	var vertices, scale;
++	if (md.mesh.classname() !== 'mesh3dsurface') {
++		vertices = [x, y, z];
++		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale', 1);
+-	}
+ 	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale', 1);
+-		vertexscale = 0;
++		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		scale = [1, 1, 1];
+ 	}
+-	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-	var modelylim = [ArrayMin(y), ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim', modelxlim);
+-	var ylim = options.getfieldvalue('ylim', modelylim);
+-	var zlim = options.getfieldvalue('zlim', modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-
++	
+ 	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl);
+-	canvas.nodes["velocity"] = node;
+-	node.name = "quiver";
+-	node.shaderName = "Colored";
+-	node.shader = gl.shaders[node.shaderName];
+-	node.lineWidth = options.getfieldvalue('linewidth', 1);
+-	node.scale = [1, 1, matrixscale];
+-	node.rotation = [-90, 0, 0];
+-	node.translation = [0, 0, 0];
+-	node.center = [(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2];
+-	node.drawMode = gl.LINES;
+-	node.useIndexBuffer = false;
+-	node.drawOrder = 0;
+-	node.maskEnabled = options.getfieldvalue('innermask','off') == 'on';
+-	node.maskHeight = options.getfieldvalue('innermaskheight', 150.0)*options.getfieldvalue('heightscale', 1);
+-	node.maskColor = options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]);
+-	updateModelMatrix(node);
+-
+-	//retrieve some options
+-	var edgecolor=new RGBColor(options.getfieldvalue('edgecolor','black'));
+-	if (edgecolor.ok) edgecolor = [edgecolor.r/255.0, edgecolor.g/255.0, edgecolor.b/255.0, 1.0];
+-	else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out edgecolor color for curent canvas ", canvas));
+-
++	var edgecolor = options.getfieldvalue('edgecolor', 'black');
++	var node = new Node(
++		'canvas', canvas,
++		'options', options,
++		'name', 'quiver',
++		'shaderName', 'Colored',
++		'alpha', options.getfieldvalue('alpha', 1.0),
++		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
++		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
++		'drawMode', canvas.gl.LINES,
++		'diffuseColor', edgecolor,
++		'lineWidth', options.getfieldvalue('linewidth', 1),
++		'maskEnabled', options.getfieldvalue('innermask','off') == 'on',
++		'maskHeight', options.getfieldvalue('innermaskheight', 150.0) / options.getfieldvalue('heightscale', 1),
++		'maskColor', options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]),
++		'rotation', [-90, 0, 0],
++		'scale', scale
++	);
++	
++	
+ 	//{{{ node plot
+ 	if (elements[0].length==6){ //prisms
+ 	}
+@@ -90,49 +67,37 @@
+ 	else if (elements[0].length==4){ //tetras
+ 	}
+ 	else{ //2D triangular elements
++		//Create arow vertices, and use vx/vy to determine rotation before adding to quiver mesh.
++		var verticesArrow = [vec3.fromValues(0.0, 0.0, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, -0.167, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, 0.166, 0.0), vec3.fromValues(1.0, 0.0, 0.0)];
++		
++		var newX = [];
++		var newY = [];
++		var newZ = [];
+ 		var xyz = vec3.create();
+-		var xyz = vec3.create();
+-		var direction = vec3.create();
+ 		var vertex = vec3.create();
+-		var vertexBase = vec3.create();
+-		var verticesArrow = [vec3.fromValues(0.0, 0.0, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, -0.167, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, 0.166, 0.0), vec3.fromValues(1.0, 0.0, 0.0)];
+-		var magnitude;
+-		var color = edgecolor;
+ 		var scaling = options.getfieldvalue('scaling', 1);
+-		var scale;
+-		for(var i = 0; i < x.length; i++){
+-			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) continue;
+-			//Scale vertices
++		var heightScale = options.getfieldvalue('heightscale', 1);
++		var arrowScale;
++		var modelMatrix = mat4.create();
++		var scaleMatrix = mat4.create();
++		var rotationMatrix = mat4.create();
++		
++		for(var i = 0, iX = 0, iY = 0, iZ = 0; i < x.length; i++){
+ 			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vec3.copy(vertexBase, vertex);
+-			
+-			scale = scaling*v[i];
+-			var modelMatrix = mat4.create();
+-			var scaleMatrix = mat4.create();
+-			var rotationMatrix = mat4.create();
+-			mat4.scale(scaleMatrix, scaleMatrix, vec3.fromValues(scale, scale, scale));
+-			mat4.rotate(rotationMatrix, rotationMatrix, Math.atan2(vy[i], vx[i]), [0.0, 0.0, 1.0]);
++			arrowScale = v[i] * scaling;
++			scaleMatrix = mat4.create();
++			mat4.scale(scaleMatrix, mat4.create(), vec3.fromValues(arrowScale, arrowScale, arrowScale));
++			mat4.rotate(rotationMatrix, mat4.create(), Math.atan2(vy[i], vx[i]), [0.0, 0.0, 1.0]);
+ 			mat4.multiply(modelMatrix, rotationMatrix, scaleMatrix);
+-
+-			var temp = vec3.fromValues(0.0, 0.0, 0.0);
+ 			for (var j = 0; j < 6; j++){
+ 				vec3.transformMat4(vertex, verticesArrow[j], modelMatrix);
+-				vec3.add(vertex, vertex, vertexBase);
+-				vertices[vertices.length] = vertex[0];
+-				vertices[vertices.length] = vertex[1];
+-				vertices[vertices.length] = vertex[2];
+-				
+-				colors[colors.length] = color[0];
+-				colors[colors.length] = color[1];
+-				colors[colors.length] = color[2];
+-				colors[colors.length] = color[3];
++				vec3.add(vertex, vertex, xyz);
++				newX[iX++] = vertex[0];
++				newY[iY++] = vertex[1];
++				newZ[iZ++] = vertex[2];
+ 			}
+ 		}
++		node.patch('Vertices', [newX, newY, newZ], 'FaceColor', 'none');
+ 	}
+ 	//}}}
+-	node.mesh = GL.Mesh.load({vertices: vertices, colors: colors}, null, null, gl);
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_mesh.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 21767)
++++ ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 21768)
+@@ -6,18 +6,11 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
++	if ('mesh' in  canvas.nodes && options.getfieldvalue('cachenodes','on') === 'on') return;
++	
+ 	//{{{ declare variables:
+-	var vertices = [];
+-	var indices = [];
+-	var colors = [];
+-	var nanindices = {};
+-	var xmin, xmax;
+-	var ymin, ymax;
+-	var zmin, zmax;
+-	var scale, matrixscale, vertexscale;
+-	
+ 	//Process data and model
+-	var meshresults = processmesh(md,[], options);
++	var meshresults = processmesh(md, [], options);
+ 	var x = meshresults[0]; 
+ 	var y = meshresults[1]; 
+ 	var z = meshresults[2]; 
+@@ -25,62 +18,42 @@
+ 	var is2d = meshresults[4]; 
+ 	var isplanet = meshresults[5];
+ 		
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length, 0);
++	//Compute coordinates and data range:
++	var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
++	var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
++	var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
++	
++	//Handle heightscale
++	var vertices, scale;
++	if (md.mesh.classname() !== 'mesh3dsurface') {
++		vertices = [x, y, z];
++		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale', 1);
+-	}
+ 	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale', 1);
+-		vertexscale = 0;
++		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		scale = [1, 1, 1];
+ 	}
++	
++	//Compute gl variables:
++	var edgecolor = options.getfieldvalue('edgecolor', 'black');
++	var node = new Node(
++		'canvas', canvas,
++		'options', options,
++		'name', 'mesh',
++		'shaderName', 'Colored',
++		'alpha', options.getfieldvalue('alpha', 1.0),
++		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
++		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
++		'drawMode', canvas.gl.LINES,
++		'diffuseColor', edgecolor,
++		'lineWidth', options.getfieldvalue('linewidth', 1),
++		'maskEnabled', options.getfieldvalue('innermask','off') == 'on',
++		'maskHeight', options.getfieldvalue('innermaskheight', 150.0) / options.getfieldvalue('heightscale', 1),
++		'maskColor', options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]),
++		'rotation', [-90, 0, 0],
++		'scale', scale
++	);
+ 	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x), ArrayMax(x)];
+-	var modelylim = [ArrayMin(y), ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z), ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim', modelxlim);
+-	var ylim = options.getfieldvalue('ylim', modelylim);
+-	var zlim = options.getfieldvalue('zlim', modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-
+-	//Compute gl variables:
+-	var gl = canvas.gl;
+-	gl.makeCurrent();
+-	var node = Node(gl);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	node.name = "mesh";
+-	node.shaderName = "Colored";
+-	node.shader = gl.shaders[node.shaderName];
+-	node.lineWidth = options.getfieldvalue('linewidth', 1);
+-	node.scale = [1, 1, matrixscale];
+-	node.rotation = [-90, 0, 0];
+-	node.translation = [0, 0, 0];
+-	node.center = [(xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2];
+-	node.drawMode = gl.LINES;
+-	node.drawOrder = 0;
+-	node.maskEnabled = options.getfieldvalue('innermask','off') == 'on';
+-	node.maskHeight = options.getfieldvalue('innermaskheight', 150.0)*options.getfieldvalue('heightscale', 1);
+-	node.maskColor = options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]);
+-	updateModelMatrix(node);
+-
+-	//retrieve some options
+-	var edgecolor = new RGBColor(options.getfieldvalue('edgecolor','black'));
+-	if (edgecolor.ok) edgecolor = [edgecolor.r/255.0, edgecolor.g/255.0, edgecolor.b/255.0, 1.0];
+-	else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out edgecolor color for curent canvas ", canvas));
+-
+ 	//{{{ node plot
+ 	if (elements[0].length==6){ //prisms
+ 	}
+@@ -87,53 +60,10 @@
+ 	else if (elements[0].length==4){ //tetras
+ 	}
+ 	else{ //2D triangular elements
+-		var xyz = vec3.create();
+-		var direction = vec3.create();
+-		var vertex = vec3.create();
+-		var magnitude;
+-		var color = edgecolor;
+-		for(var i = 0; i < x.length; i++){
+-			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+-				nanindices[i] = i;
+-				vertices[vertices.length] = vertex[0];
+-				vertices[vertices.length] = vertex[1];
+-				vertices[vertices.length] = vertex[2];
+-				
+-				colors[colors.length] = color[0];
+-				colors[colors.length] = color[1];
+-				colors[colors.length] = color[2];
+-				colors[colors.length] = color[3];
+-				continue;
+-			}
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-
+-			colors[colors.length] = color[0];
+-			colors[colors.length] = color[1];
+-			colors[colors.length] = color[2];
+-			colors[colors.length] = color[3];
+-		}
+-		
+-		//linearize the elements array: 
+-		var element;
+-		for(var i = 0; i < elements.length; i++){
+-			element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-			if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-			indices[indices.length] = element[0];
+-			indices[indices.length] = element[1];
+-			indices[indices.length] = element[1];
+-			indices[indices.length] = element[2];
+-			indices[indices.length] = element[2];
+-			indices[indices.length] = element[0];
+-		}
++		node.patch('Faces', elements, 'Vertices', vertices, 'FaceColor', 'none', 'EdgeColor', edgecolor);
+ 	}
+ 	//}}}
+-	node.mesh = GL.Mesh.load({vertices: vertices, colors: colors, triangles: indices}, null, null, gl);
++	//options=options.addfielddefault('title','Mesh');
++	//options=addfielddefault('colorbar','off');
++	//applyoptions(md,[],options,canvas);
+ } //}}}
+Index: ../trunk-jpl/src/m/classes/clusters/generic.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.js	(revision 21767)
++++ ../trunk-jpl/src/m/classes/clusters/generic.js	(revision 21768)
+@@ -171,4 +171,4 @@
+ 		}
+ 		return buf;
+ 	} //}}}
+-}
++} 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21768-21769.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21768-21769.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21768-21769.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/m/miscellaneous/transientrestart.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/transientrestart.m	(revision 21768)
++++ ../trunk-jpl/src/m/miscellaneous/transientrestart.m	(revision 21769)
+@@ -1,11 +1,22 @@
+-function md = transientrestart(md)
++function md = transientrestart(md,step)
+ %TRANSIENTRESTART - reinitialize model from last transient step
+ %
+ %   Usage:
+ %      md = transientrestart(md)
++%      md = transientrestart(md,step)
++%
++%   By default, transientrestart will use the last step provided in md.results.TransientSolution
+ 
+ %Get result and save it again
+-results = md.results.TransientSolution(end);
++if nargin==1,
++	step = numel(md.results.TransientSolution(end));
++end
++if step<1,
++	error('step needs to be >0');
++elseif step>numel(md.results.TransientSolution)
++	error(['md.results.TransientSolution has only ' num2str(numel(md.results.TransientSolution)) ' steps']);
++end
++results = md.results.TransientSolution(step);
+ 
+ newname = ['TransientSolution' num2str(numel(fields(md.results))+1)];
+ if isfield(md.results,newname)
Index: /issm/oecreview/Archive/21724-22754/ISSM-21769-21770.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21769-21770.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21769-21770.diff	(revision 22755)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21769)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21770)
+@@ -10,7 +10,7 @@
+ 		 % {{{
+ 		 name           = 'pfe'
+ 		 login          = '';
+-		 modules        = {'comp-intel/2016.2.181' 'mpi-sgi/mpt'};
++		 modules        = {'comp-intel/2015.0.090' 'mpi-sgi/mpt.2.12r26' 'math/intel_mkl_64_10.0.011'};
+ 		 numnodes       = 20;
+ 		 cpuspernode    = 8;
+ 		 port           = 1025;
+@@ -162,8 +162,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2016.2.181\n');
+-			 fprintf(fid,'module load mpi-sgi/mpt\n');
++			 fprintf(fid,'module load comp-intel/2015.0.090\n');
++			 fprintf(fid,'module load mpi-sgi/mpt.2.12r16\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+@@ -225,8 +225,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2016.2.181\n');
+-			 fprintf(fid,'module load mpi-sgi/mpt\n');
++			 fprintf(fid,'module load comp-intel/2015.0.090\n');
++			 fprintf(fid,'module load mpi-sgi/mpt.2.12r16\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
Index: /issm/oecreview/Archive/21724-22754/ISSM-21770-21771.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21770-21771.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21770-21771.diff	(revision 22755)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21770)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21771)
+@@ -10,7 +10,7 @@
+ 		 % {{{
+ 		 name           = 'pfe'
+ 		 login          = '';
+-		 modules        = {'comp-intel/2015.0.090' 'mpi-sgi/mpt.2.12r26' 'math/intel_mkl_64_10.0.011'};
++		 modules        = {'comp-intel/2016.2.181' 'mpi-sgi/mpt'};
+ 		 numnodes       = 20;
+ 		 cpuspernode    = 8;
+ 		 port           = 1025;
+@@ -162,8 +162,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2015.0.090\n');
+-			 fprintf(fid,'module load mpi-sgi/mpt.2.12r16\n');
++			 fprintf(fid,'module load comp-intel/2016.2.181\n');
++			 fprintf(fid,'module load mpi-sgi/mpt\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+@@ -225,8 +225,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2015.0.090\n');
+-			 fprintf(fid,'module load mpi-sgi/mpt.2.12r16\n');
++			 fprintf(fid,'module load comp-intel/2016.2.181\n');
++			 fprintf(fid,'module load mpi-sgi/mpt\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+@@ -352,8 +352,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2015.0.090\n');
+-			 fprintf(fid,'module load test/mpt.2.11r8\n');
++			 fprintf(fid,'module load comp-intel/2016.2.181\n');
++			 fprintf(fid,'module load mpi-sgi/mpt\n');
+ 			 fprintf(fid,'module load netcdf/4.0\n');
+ 			 fprintf(fid,'module load mpi-mvapich2/1.4.1/gcc\n');
+ 			 fprintf(fid,'module load gcc/4.4.4\n');
Index: /issm/oecreview/Archive/21724-22754/ISSM-21771-21772.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21771-21772.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21771-21772.diff	(revision 22755)
@@ -0,0 +1,131 @@
+Index: ../trunk-jpl/src/m/classes/timestepping.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.py	(revision 21771)
++++ ../trunk-jpl/src/m/classes/timestepping.py	(revision 21772)
+@@ -65,6 +65,7 @@
+ 	def marshall(self,prefix,md,fid):    # {{{
+ 
+ 		yts=md.constants.yts
++		WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
+ 		WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',yts)
+Index: ../trunk-jpl/src/m/classes/timeadaptation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timeadaptation.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/timeadaptation.m	(revision 21772)
+@@ -0,0 +1,90 @@
++%TIMESTEPPING Class definition
++%
++%   Usage:
++%      timeadaptation=timeadaptation();
++
++classdef timeadaptation
++	properties (SetAccess=public) 
++		start_time      = 0.;
++		final_time      = 0.;
++		time_step_min   = 0.;
++		time_step_max   = 0.;
++		cfl_coefficient = 0.;
++		interp_forcings = 1;
++	end
++	methods
++		function self = timeadaptation(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(timeadaptation(),varargin{1});
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%time between 2 time steps
++			self.time_step_min = 0.01;
++			self.time_step_max = 1.;
++
++			%final time
++			self.final_time=10.*self.time_step_max;
++
++			%default CFL coefficient
++			self.cfl_coefficient=0.5;
++
++			%should we interpolate forcings between timesteps?
++			self.interp_forcings=1;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			if (self.time_step_min>self.time_step_max)
++				md = checkmessage(md,['base not equal to bed on grounded ice!']);
++			end
++			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
++			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
++			if self.final_time-self.start_time<0,
++				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
++			end 
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   timeadaptation parameters:'));
++
++			unit = 'yr';
++			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
++			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
++			fielddisplay(self,'time_step_min',['minimum length of time step [' unit ']']);
++			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
++			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
++			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			scale = md.constants.yts;
++			WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejsdouble(fid,[modelname '.timeadaptation.start_time'],self.start_time);
++			writejsdouble(fid,[modelname '.timeadaptation.final_time'],self.final_time);
++			writejsdouble(fid,[modelname '.timeadaptation.time_step_min'],self.time_step_min);
++			writejsdouble(fid,[modelname '.timeadaptation.time_step_max'],self.time_step_max);
++			writejsdouble(fid,[modelname '.timeadaptation.cfl_coefficient'],self.cfl_coefficient);
++			writejsdouble(fid,[modelname '.timeadaptation.interp_forcings'],self.interp_forcings);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/timestepping.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.js	(revision 21771)
++++ ../trunk-jpl/src/m/classes/timestepping.js	(revision 21772)
+@@ -53,6 +53,7 @@
+ 			var scale;
+ 			scale = md.constants.yts;
+ 			
++			WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
+ 			WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+Index: ../trunk-jpl/src/m/classes/timestepping.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.m	(revision 21771)
++++ ../trunk-jpl/src/m/classes/timestepping.m	(revision 21772)
+@@ -63,6 +63,7 @@
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+ 			scale = md.constants.yts;
++			WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21772-21773.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21772-21773.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21772-21773.diff	(revision 22755)
@@ -0,0 +1,373 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21773)
+@@ -18,7 +18,7 @@
+ void CreateParameters(Parameters* parameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type){
+ 
+ 	int         i,j,m,k;
+-	int         numoutputs,materialtype,smb_model,basalforcing_model;
++	int         numoutputs,materialtype,smb_model,basalforcing_model,timestepping_type;
+ 	char**      requestedoutputs = NULL;
+ 	IssmDouble  time;
+ 
+@@ -45,12 +45,6 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.output_frequency",SettingsOutputFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.recording_frequency",SettingsRecordingFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.constants.yts",ConstantsYtsEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_adapt",TimesteppingTimeAdaptEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.lowmem",SettingsLowmemEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.debug.profiling",DebugProfilingEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.average_vertex_connectivity",MeshAverageVertexConnectivityEnum));
+@@ -141,6 +135,30 @@
+ 	/*some parameters that did not come with the iomodel: */
+ 	parameters->AddObject(new IntParam(SolutionTypeEnum,solution_type));
+ 
++	/*Time stepping*/
++	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.type",TimesteppingTypeEnum));
++	iomodel->FindConstant(&timestepping_type,"md.timestepping.type");
++	switch(timestepping_type){
++		case FixedTimesteppingEnum:
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_adapt",TimesteppingTimeAdaptEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
++			break;
++		case TimeAdaptationEnum:
++			parameters->AddObject(new BoolParam(TimesteppingTimeAdaptEnum,true));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step_min",TimesteppingTimeStepMinEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step_max",TimesteppingTimeStepMaxEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
++			break;
++		default:
++			_error_(EnumToStringx(timestepping_type) <<" not supported yet");
++	}
+ 	iomodel->FindConstant(&time,"md.timestepping.start_time");
+ 	parameters->AddObject(new DoubleParam(TimeEnum,time));  
+ 	parameters->AddObject(new IntParam(StepEnum,0));  
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21773)
+@@ -43,7 +43,6 @@
+ 	femmodel->parameters->FindParam(&step,StepEnum);
+ 	femmodel->parameters->FindParam(&time,TimeEnum);
+ 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
+-	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+@@ -77,6 +76,9 @@
+ 			if(time+dt>finaltime) dt=finaltime-time;
+ 			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
+ 		}
++		else{
++			femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++		}
+ 		step+=1;
+ 		time+=dt;
+ 		femmodel->parameters->SetParam(time,TimeEnum);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21773)
+@@ -602,6 +602,7 @@
+ 					if(strcmp(record_name,"md.calving.law")==0) integer = IoCodeToEnumCalving(integer);
+ 					if(strcmp(record_name,"md.hydrology.model")==0) integer = IoCodeToEnumHydrology(integer);
+ 					if(strcmp(record_name,"md.materials.type")==0) integer = IoCodeToEnumMaterials(integer);
++					if(strcmp(record_name,"md.timestepping.type")==0) integer = IoCodeToEnumTimestepping(integer);
+ 
+ 					/*Broadcast to other cpus*/
+ 					ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21773)
+@@ -2070,12 +2070,11 @@
+ 	IssmDouble   dt;
+ 
+ 	/*intermediary: */
+-	Element *element     = NULL;
+ 	IssmDouble   min_dt      = 0;
+ 	IssmDouble   node_min_dt = 0;
+ 
+ 	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
+-	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
++	Element* element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+ 
+ 	for (i=1;i<elements->Size();i++){
+ 		element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+@@ -2088,6 +2087,17 @@
+ 	ISSM_MPI_Bcast(&node_min_dt,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	min_dt=node_min_dt;
+ 
++	/*Constrain dt if necessary*/
++	int timestepping_type;
++	IssmDouble dt_low,dt_high;
++	parameters->FindParam(&timestepping_type,TimesteppingTypeEnum);
++	if(timestepping_type==TimeAdaptationEnum){
++		parameters->FindParam(&dt_low,TimesteppingTimeStepMinEnum);
++		parameters->FindParam(&dt_high,TimesteppingTimeStepMaxEnum);
++		if(min_dt<dt_low)  min_dt = dt_low;
++		if(min_dt>dt_high) min_dt = dt_high;
++	}
++
+ 	/*Assign output pointers:*/
+ 	*pdt=min_dt;
+ }
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21772)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21773)
+@@ -29,6 +29,11 @@
+ 	InputToSmoothEnum,
+ 	SmoothThicknessMultiplierEnum,
+ 	LevelsetStabilizationEnum,
++	TimesteppingTypeEnum,
++	FixedTimesteppingEnum,
++	TimeAdaptationEnum,
++	TimesteppingTimeStepMinEnum,
++	TimesteppingTimeStepMaxEnum,
+ 	/*}}}*/
+ 	/*Model fields {{{*/
+ 	AutodiffIsautodiffEnum, 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21773)
+@@ -37,6 +37,11 @@
+ 		case InputToSmoothEnum : return "InputToSmooth";
+ 		case SmoothThicknessMultiplierEnum : return "SmoothThicknessMultiplier";
+ 		case LevelsetStabilizationEnum : return "LevelsetStabilization";
++		case TimesteppingTypeEnum : return "TimesteppingType";
++		case FixedTimesteppingEnum : return "FixedTimestepping";
++		case TimeAdaptationEnum : return "TimeAdaptation";
++		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
++		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
+ 		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+ 		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
+ 		case AutodiffDependentObjectsEnum : return "AutodiffDependentObjects";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21773)
+@@ -37,6 +37,11 @@
+ 	      else if (strcmp(name,"InputToSmooth")==0) return InputToSmoothEnum;
+ 	      else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
+ 	      else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum;
++	      else if (strcmp(name,"TimesteppingType")==0) return TimesteppingTypeEnum;
++	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
++	      else if (strcmp(name,"TimeAdaptation")==0) return TimeAdaptationEnum;
++	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
++	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
+ 	      else if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+ 	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjects")==0) return AutodiffDependentObjectsEnum;
+@@ -131,15 +136,15 @@
+ 	      else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+-	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
++         else stage=2;
++   }
++   if(stage==2){
++	      if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+ 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+ 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
+ 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
+ 	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
+-         else stage=2;
+-   }
+-   if(stage==2){
+-	      if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
++	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+ 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+@@ -254,15 +259,15 @@
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+ 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+-	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+ 	      else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
++	      else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
+@@ -377,15 +382,15 @@
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+ 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+-	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+ 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
+ 	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
++	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
+ 	      else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
+@@ -500,15 +505,15 @@
+ 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+-	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"Pressure")==0) return PressureEnum;
+ 	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+ 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
++	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+ 	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+@@ -623,15 +628,15 @@
+ 	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+ 	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+ 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+-	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+ 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+ 	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+ 	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
+ 	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
++	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
+ 	      else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
+ 	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
+ 	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
+@@ -746,15 +751,15 @@
+ 	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+ 	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+ 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+-	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
+ 	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+ 	      else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
++	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+ 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
+ 	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
+ 	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+@@ -869,15 +874,15 @@
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
++	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+ 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+ 	      else if (strcmp(name,"Seg")==0) return SegEnum;
+@@ -992,15 +997,15 @@
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+-	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21772)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21773)
+@@ -120,6 +120,13 @@
+ 		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
+ 	}
+ }/*}}}*/
++int IoCodeToEnumTimestepping(int enum_in){/*{{{*/
++	switch(enum_in){
++		case 1: return FixedTimesteppingEnum;
++		case 2: return TimeAdaptationEnum; 
++		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
++	}
++}/*}}}*/
+ 
+ int IoCodeToEnumVertexEquation(int enum_in){/*{{{*/
+ 	switch(enum_in){
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 21772)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 21773)
+@@ -8,6 +8,7 @@
+ int IoCodeToEnumCalving(int enum_in);
+ int IoCodeToEnumHydrology(int enum_in);
+ int IoCodeToEnumMaterials(int enum_in);
++int IoCodeToEnumTimestepping(int enum_in);
+ 
+ int IoCodeToEnumVertexEquation(int enum_in);
+ int IoCodeToEnumElementEquation(int enum_in);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21773-21774.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21773-21774.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21773-21774.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Friction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 21773)
++++ ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 21774)
+@@ -545,6 +545,10 @@
+ 	/*Compute scaling parameter*/
+ 	alpha2 = alpha2 * exp((deltaTref - deltaT)/(2*gamma));
+ 
++	/*Final checks in debuging mode*/
++	_assert_(!xIsNan<IssmDouble>(alpha2));
++	_assert_(!xIsInf<IssmDouble>(alpha2));
++
+ 	/*Assign output pointers:*/
+ 	*palpha2=alpha2;
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21774-21775.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21774-21775.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21774-21775.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21774)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21775)
+@@ -21,6 +21,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stdarg.h>
++#include <stdint.h>
+ 
+ #include "./classes.h"
+ #include "../shared/io/io.h"
Index: /issm/oecreview/Archive/21724-22754/ISSM-21775-21776.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21775-21776.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21775-21776.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21775)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21776)
+@@ -247,9 +247,16 @@
+ 	/*Deal with friction parameters*/
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+-	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+-	if(frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++	if(frictionlaw==4 || frictionlaw==6){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++		parameters->AddObject(new BoolParam(FrictionCouplingEnum,false));
++	}
++	if(frictionlaw==3 || frictionlaw==1){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	}
++	if(frictionlaw==9){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++	}
+ }/*}}}*/
+ 
+ /*Finite Element Analysis*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21776-21777.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21776-21777.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21776-21777.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21776)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21777)
+@@ -249,7 +249,6 @@
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-		parameters->AddObject(new BoolParam(FrictionCouplingEnum,false));
+ 	}
+ 	if(frictionlaw==3 || frictionlaw==1){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+@@ -256,6 +255,7 @@
+ 	}
+ 	if(frictionlaw==9){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++		parameters->AddObject(new BoolParam(FrictionCouplingEnum,false));
+ 	}
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21777-21778.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21777-21778.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21777-21778.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21777)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21778)
+@@ -255,7 +255,7 @@
+ 	}
+ 	if(frictionlaw==9){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-		parameters->AddObject(new BoolParam(FrictionCouplingEnum,false));
++		parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
+ 	}
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21778-21779.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21778-21779.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21778-21779.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21778)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21779)
+@@ -3178,8 +3178,6 @@
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble phi;
+-	IssmDouble viscosity;
+-	IssmDouble epsilon[6];
+ 	IssmDouble thickness;
+ 	IssmDouble *xyz_list = NULL;
+ 
+@@ -3188,11 +3186,10 @@
+ 	IssmDouble* viscousheating = xNew<IssmDouble>(numvertices);
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	this->GetVerticesCoordinatesBase(&xyz_list);
++	this->GetVerticesCoordinates(&xyz_list);
+ 	Input* vx_input        = this->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input        = this->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input        = this->GetInput(VzEnum); _assert_(vz_input);
+-	Input* thickness_input = this->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 
+ 	/*loop over vertices: */
+ 	Gauss* gauss=this->NewGauss();
+@@ -3199,13 +3196,9 @@
+ 	for (int iv=0;iv<numvertices;iv++){
+ 		gauss->GaussVertex(iv);
+ 
+-		thickness_input->GetInputValue(&thickness,gauss);
++		this->ViscousHeating(&phi,xyz_list,gauss,vx_input,vy_input,vz_input);
+ 
+-		this->StrainRateFS(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vz_input);
+-		this->material->ViscosityFS(&viscosity,3,xyz_list,gauss,vx_input,vy_input,vz_input);
+-		this->GetPhi(&phi,&epsilon[0],viscosity);
+-
+-		viscousheating[iv]=phi*thickness;
++		viscousheating[iv]=phi;
+ 	}
+ 
+ 	/*Create PentaVertex input, which will hold the basal friction:*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21778)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21779)
+@@ -1073,8 +1073,8 @@
+ 
+ 		xDelete<IssmDouble>(watercolumn);
+ 		xDelete<IssmDouble>(drainage_int);
++		xDelete<int>(basalnodeindices);
+ 	}
+-	xDelete<int>(basalnodeindices);
+ }/*}}}*/
+ void				EnthalpyAnalysis::DrainageUpdateEnthalpy(FemModel* femmodel){/*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21779-21780.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21779-21780.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21779-21780.diff	(revision 22755)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/m/exp/expcoarsen.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcoarsen.m	(revision 21779)
++++ ../trunk-jpl/src/m/exp/expcoarsen.m	(revision 21780)
+@@ -1,4 +1,4 @@
+-function expcoarsen(newfile,oldfile,resolution)
++function expcoarsen(newfile,varargin)
+ %EXPCOARSEN - coarsen an exp contour
+ %
+ %   This routine read an Argus file and remove points with respect to
+@@ -6,15 +6,24 @@
+ %
+ %   Usage:
+ %      expcoarsen(newfile,oldfile,resolution)
++%      expcoarsen(file,resolution)
+ %
+ %   Example:
+ %       expcoarsen('DomainOutline.exp','Antarctica.exp',4000)
+ 
+ %Some checks
+-if nargin~=3 | nargout
+-	error('expcoarsen usage: expcoarsen(newfile,oldfile,resolution)')
+-elseif ~exist(oldfile)
+-	error(['expcut error message: the file ' oldfile ' does not exist'])
++if nargin==2,
++	resolution = varargin{1};
++	oldfile= newfile;
++elseif nargin==3,
++	oldfile = varargin{1};
++	resolution = varargin{2};
++else
++	error('bad usage');
++end
++
++if ~exist(oldfile)
++	error(['expcoarsen error message: file ''' oldfile ''' does not exist'])
+ elseif exist(newfile),
+ 	choice=input(['A file ' newfile ' already exists, do you want to modify it? (y/n)'],'s');
+ 	if ~strcmpi(choice,'y'),
+Index: ../trunk-jpl/src/m/exp/expread.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expread.m	(revision 21779)
++++ ../trunk-jpl/src/m/exp/expread.m	(revision 21780)
+@@ -64,6 +64,9 @@
+ 	A=fscanf(fid,'%f %f',[2 Struct(count).nods]);
+ 	Struct(count).x=A(1,:)';
+ 	Struct(count).y=A(2,:)';
++	if any(isnan(A))
++		warning('NaNs found in coordinates, note that some tools like exptool will not work properly with NaNs');
++	end
+ 
+ 	if(Struct(count).nods~=length(Struct(count).x))error(['Profile ' num2str(count) ' reports incorrect length']); end;
+ 
+@@ -77,5 +80,6 @@
+ 	end
+ end
+ 
++
+ %close file
+ fclose(fid);
+Index: ../trunk-jpl/src/m/exp/exptool.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/exptool.m	(revision 21779)
++++ ../trunk-jpl/src/m/exp/exptool.m	(revision 21780)
+@@ -98,7 +98,7 @@
+ [path root ext]=fileparts(newfile);
+ 
+ %get current figure
+-nofigurecopy=getfieldvalue(options,'nofigurecopy',1);
++nofigurecopy=getfieldvalue(options,'nofigurecopy',0);
+ if ~nofigurecopy,
+ 	if ~isempty(get(0,'children')),%if there is already a figure (return the number of opened figures)
+ 		set(gcf,'Renderer','zbuffer'); %fixes a bug on Mac OS X (not needed in future Matlab version)
Index: /issm/oecreview/Archive/21724-22754/ISSM-21780-21781.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21780-21781.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21780-21781.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/shp/shp2exp.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shp2exp.m	(revision 21780)
++++ ../trunk-jpl/src/m/shp/shp2exp.m	(revision 21781)
+@@ -36,7 +36,15 @@
+ 		expstruct(end).nods=length(x);
+ 		expstruct(end).density=1;
+ 		expstruct(end).closed=1;
+-		expstruct(end).name=num2str(shp(i).id);
++		if isfield(shp(i),'id'),
++			expstruct(end).name=num2str(shp(i).id);
++		elseif isfield(shp(i),'NAME'),
++			expstruct(end).name=num2str(shp(i).SUBREGION1);
++		elseif isfield(shp(i),'SUBREGION1'),
++			expstruct(end).name=num2str(shp(i).SUBREGION1);
++		else
++			expstruct(end).name='unknown';
++		end
+ 	elseif strcmpi(shp(i).Geometry,'Point'),
+ 		x=shp(i).X; y=shp(i).Y;
+ 		expstruct(end+1).x=x;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21781-21782.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21781-21782.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21781-21782.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/m/plot/kmlgroundoverlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/kmlgroundoverlay.m	(revision 21781)
++++ ../trunk-jpl/src/m/plot/kmlgroundoverlay.m	(revision 21782)
+@@ -27,13 +27,24 @@
+ kmlgroundoverlaydescription=getfieldvalue(options,'kmlgroundoverlaydescription','');
+ 
+ %figure out  min and max for lat and long of this image:
+-west=min(md.mesh.long);
+-east=max(md.mesh.long);
+-south=min(md.mesh.lat);
+-north=max(md.mesh.lat);
++if strcmpi(getfieldvalue(options,'coord',''),'latlon'),
++	%need to plot with option 'coord','latlon'
++	XLIM=xlim();
++	YLIM=ylim();
++	west=XLIM(1);
++	east=XLIM(2);
++	south=YLIM(1);
++	north=YLIM(2);
++else
++	west=min(md.mesh.long);
++	east=max(md.mesh.long);
++	south=min(md.mesh.lat);
++	north=max(md.mesh.lat);
++end
+ 
+ %print image at high resolution
+-export_fig([kmlroot '/' kmlimagename],'-transparent','-zbuffer'); %zbuffer to avoid "Bad data returned by HARDCOPY. Not calling IMWRITE"
++%export_fig([kmlroot '/' kmlimagename],'-transparent','-zbuffer'); %zbuffer to avoid "Bad data returned by HARDCOPY. Not calling IMWRITE"
++export_fig([kmlroot '/' kmlimagename],'-transparent');
+ %printmodel([kmlroot '/' kmlimagename],kmlimagetype,'trim','on','resolution',kmlresolution,'margin','off','frame','off');
+ 
+ %now write kml file
+@@ -60,3 +71,13 @@
+ fprintf(fid,'%s\n','</kml>');
+ 
+ fclose(fid);
++
++if strcmpi(getfieldvalue(options,'kmz','on'),'on')
++	disp('Converting to kmz...');
++	system(['cat ' kmlroot '/' kmlfilename '| sed -e "s/' kmlimagename '\.png/files\/' kmlimagename '.png/g" > doc.kml']);
++	system('mkdir files');
++	system(['mv ' kmlroot '/' kmlimagename  '.png files/']);
++	system(['zip -r  ' kmlfilename '.zip  files doc.kml']);
++	system(['mv ' kmlfilename '.zip ' kmlfilename]);
++	system(['rm -rf  files doc.kml']);
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21782-21783.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21782-21783.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21782-21783.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/plot/plot_overlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 21782)
++++ ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 21783)
+@@ -40,12 +40,18 @@
+ 	md=radarpower(md,options);
+ end
+ contrast = getfieldvalue(options,'contrast',1);  
+-radar = (md.radaroverlay.pwr).^(contrast);
+-radar = radar./max(radar(:));
++radar    = md.radaroverlay.pwr;
+ if size(radar,3)>1,
+ 	disp('WARNING: color image converted to greyscale intensity image');
+-	radar=sum(radar,3)/3;
++	if strcmp(class(radar),'uint8'),
++		radar=double(sum(radar,3))/(255*3);
++	else
++		radar=sum(radar,3)/3;
++	end
+ end
++radar = radar.^(contrast);
++radar = radar./max(radar(:));
++
+ if getfieldvalue(options,'backgroundbtw',0)
+ 	radar(find(radar==0))=1; %Change background from black to white
+ end
+@@ -53,8 +59,14 @@
+ %InterpFromMeshToGrid
+ xmin=min(md.radaroverlay.x);
+ ymax=max(md.radaroverlay.y);
+-xspacing=(max(md.radaroverlay.x)-min(md.radaroverlay.x))/(length(md.radaroverlay.x));
+-yspacing=(max(md.radaroverlay.y)-min(md.radaroverlay.y))/(length(md.radaroverlay.y));
++xspacing=(max(md.radaroverlay.x)-min(md.radaroverlay.x))/(length(md.radaroverlay.x) -1);
++yspacing=(max(md.radaroverlay.y)-min(md.radaroverlay.y))/(length(md.radaroverlay.y) -1);
++if(md.radaroverlay.x(end)-md.radaroverlay.x(1)<0)
++	xspacing= -xspacing; 
++end
++if(md.radaroverlay.y(end)-md.radaroverlay.y(1)<0)
++	yspacing= -yspacing; 
++end
+ nlines=length(md.radaroverlay.y);
+ ncols =length(md.radaroverlay.x);
+ disp('Interpolating data on grid...');
Index: /issm/oecreview/Archive/21724-22754/ISSM-21783-21784.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21783-21784.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21783-21784.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/plot/googlemaps.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/googlemaps.m	(revision 21783)
++++ ../trunk-jpl/src/m/plot/googlemaps.m	(revision 21784)
+@@ -140,6 +140,9 @@
+ 		[X Y]=ll2xy(LAT,LON,+1,45,70);
+ 	elseif md.mesh.epsg==3031,
+ 		[X Y]=ll2xy(LAT,LON,-1,0,71);
++	elseif md.mesh.epsg==4326,
++		X=LON;
++		Y=LAT;
+ 	else
+ 		error('EPSG code not supported yet');
+ 	end
+@@ -164,6 +167,9 @@
+ 		[X Y]=ll2xy(LAT,LON,+1,45,70);
+ 	elseif md.mesh.epsg==3031,
+ 		[X Y]=ll2xy(LAT,LON,-1,0,71);
++	elseif md.mesh.epsg==4326,
++		X=LON;
++		Y=LAT;
+ 	else
+ 		error('EPSG code not supported yet');
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21784-21785.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21784-21785.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21784-21785.diff	(revision 22755)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 21785)
+@@ -0,0 +1,76 @@
++%Test Name: MISMIP3D
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%Boundary conditions:
++md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(md.mesh.x==max(md.mesh.x)))=0;
++md.stressbalance.spcvx(:)=NaN;
++md.stressbalance.spcvy(:)=NaN;
++md.stressbalance.spcvz(:)=NaN;
++pos=find((md.mesh.y<1000000.1 & md.mesh.y>999999.9) | (md.mesh.y<0.1 & md.mesh.y>-0.1));
++md.stressbalance.spcvy(pos)=0;
++pos2=find(md.mesh.x<0.1 & md.mesh.x>-0.1);
++md.stressbalance.spcvx(pos2)=0;
++md.stressbalance.spcvy(pos2)=0;
++
++md.materials.rheology_B=1/((10^-25)^(1/3))*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_law='None';
++md.friction.coefficient(:)=sqrt(10^7)*ones(md.mesh.numberofvertices,1);
++md.friction.p=3*ones(md.mesh.numberofelements,1);
++md.smb.mass_balance(:)=1;
++md.basalforcings.groundedice_melting_rate(:)=0;
++md.basalforcings.floatingice_melting_rate(:)=0;
++md.transient.isthermal=0;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=1;
++md.groundingline.migration='SubelementMigration';
++md.timestepping.final_time=30;
++md.timestepping.time_step=10;
++
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3'};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,...
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10};
++field_values={...
++	(md.results.TransientSolution(1).Base),...
++	(md.results.TransientSolution(1).Surface),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(2).Base),...
++	(md.results.TransientSolution(2).Surface),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(3).Base),...
++	(md.results.TransientSolution(3).Surface),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Pressure),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive430.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21785-21786.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21785-21786.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21785-21786.diff	(revision 22755)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21785)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21786)
+@@ -38,6 +38,7 @@
+ md.transient.isgroundingline=1;
+ md.transient.ismasstransport=1;
+ md.transient.issmb=1;
++md.transient.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
+ md.groundingline.migration='SubelementMigration';
+ md.timestepping.final_time=30;
+ md.timestepping.time_step=10;
+@@ -46,12 +47,12 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3'};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,...
+-	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13,...
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+@@ -61,6 +62,7 @@
+ 	(md.results.TransientSolution(1).Vy),...
+ 	(md.results.TransientSolution(1).Vz),...
+ 	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+@@ -69,6 +71,7 @@
+ 	(md.results.TransientSolution(2).Vy),...
+ 	(md.results.TransientSolution(2).Vz),...
+ 	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
+ 	(md.results.TransientSolution(3).Base),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+@@ -77,4 +80,5 @@
+ 	(md.results.TransientSolution(3).Vy),...
+ 	(md.results.TransientSolution(3).Vz),...
+ 	(md.results.TransientSolution(3).Pressure),...
++	(md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 21785)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 21786)
+@@ -37,6 +37,7 @@
+ md.transient.isgroundingline=1;
+ md.transient.ismasstransport=1;
+ md.transient.issmb=1;
++md.transient.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
+ md.groundingline.migration='SubelementMigration';
+ md.timestepping.final_time=30;
+ md.timestepping.time_step=10;
+@@ -45,12 +46,12 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3'};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,...
+-	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+@@ -59,6 +60,7 @@
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+ 	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+@@ -66,6 +68,7 @@
+ 	(md.results.TransientSolution(2).Vx),...
+ 	(md.results.TransientSolution(2).Vy),...
+ 	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
+ 	(md.results.TransientSolution(3).Base),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+@@ -73,4 +76,5 @@
+ 	(md.results.TransientSolution(3).Vx),...
+ 	(md.results.TransientSolution(3).Vy),...
+ 	(md.results.TransientSolution(3).Pressure),...
++	(md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
+ 	};
+Index: ../trunk-jpl/test/Archives/Archive435.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21786-21787.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21786-21787.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21786-21787.diff	(revision 22755)
@@ -0,0 +1,908 @@
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 21787)
+@@ -4,7 +4,8 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1;
++md.timestepping = timesteppingadaptive(md.timestepping);
++md.timestepping.time_step_max = 10000.;
+ md.timestepping.final_time=1120.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 21787)
+@@ -5,7 +5,8 @@
+ md=extrude(md,5,1.2);
+ md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1;
++md.timestepping = timesteppingadaptive(md.timestepping);
++md.timestepping.time_step_max = 10000.;
+ md.timestepping.final_time=16000.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test226.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.m	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test226.m	(revision 21787)
+@@ -4,7 +4,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1.;
++md.timestepping = timesteppingadaptive(md.timestepping);
+ md.timestepping.final_time=15.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test226.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.js	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test226.js	(revision 21787)
+@@ -5,7 +5,7 @@
+ parameterize(md);
+ setflowequation(md,'SSA','all');
+ //md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1.;
++md.timestepping = timesteppingadaptive(md.timestepping);
+ md.timestepping.final_time=15.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 21787)
+@@ -5,7 +5,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1.;
++md.timestepping = timesteppingadaptive(md.timestepping);
+ md.timestepping.final_time=20.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 21787)
+@@ -14,7 +14,8 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+-md.timestepping.time_adapt=1
++md.timestepping = timesteppingadaptive(md.timestepping);
++md.timestepping.time_step_max = 10000.;
+ md.timestepping.final_time=1120.
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test227.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.js	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test227.js	(revision 21787)
+@@ -6,7 +6,7 @@
+ md.extrude(md,3,1.);
+ setflowequation(md,'HO','all');
+ //md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1.;
++md.timestepping = timesteppingadaptive(md.timestepping);
+ md.timestepping.final_time=20.;
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 21787)
+@@ -15,7 +15,8 @@
+ md.extrude(5,1.2)
+ md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+-md.timestepping.time_adapt=1
++md.timestepping = timesteppingadaptive(md.timestepping);
++md.timestepping.time_step_max = 10000.;
+ md.timestepping.final_time=16000.
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test226.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.py	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test226.py	(revision 21787)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+-md.timestepping.time_adapt=1.
++md.timestepping = timesteppingadaptive(md.timestepping);
+ md.timestepping.final_time=15.
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 21787)
+@@ -14,7 +14,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+-md.timestepping.time_adapt=1.
++md.timestepping = timesteppingadaptive(md.timestepping)
+ md.timestepping.final_time=20.
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test4001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4001.m	(revision 21786)
++++ ../trunk-jpl/test/NightlyRun/test4001.m	(revision 21787)
+@@ -538,7 +538,6 @@
+ 	%timestepping: 
+ 	md.timestepping.final_time=final_time;
+ 	md.timestepping.time_step=time_step;
+-	md.timestepping.time_adapt=0;
+ 	md.transient.isgroundingline=1;
+ 	md.transient.isthermal=0;
+ 	md.groundingline.migration='SubelementMigration2';
+@@ -652,7 +651,6 @@
+ 	md.timestepping.start_time=start_time;
+ 	md.timestepping.final_time=final_time;
+ 	md.timestepping.time_step=time_step;
+-	md.timestepping.time_adapt=0;
+ 	md.cluster=generic('name',oshostname(),'np',2);
+ 	md.results.TransientSolution.Base=md.geometry.base;
+ 	md.transient.isgroundingline=1;
+Index: ../trunk-jpl/src/m/classes/timeadaptation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timeadaptation.m	(revision 21786)
++++ ../trunk-jpl/src/m/classes/timeadaptation.m	(nonexistent)
+@@ -1,90 +0,0 @@
+-%TIMESTEPPING Class definition
+-%
+-%   Usage:
+-%      timeadaptation=timeadaptation();
+-
+-classdef timeadaptation
+-	properties (SetAccess=public) 
+-		start_time      = 0.;
+-		final_time      = 0.;
+-		time_step_min   = 0.;
+-		time_step_max   = 0.;
+-		cfl_coefficient = 0.;
+-		interp_forcings = 1;
+-	end
+-	methods
+-		function self = timeadaptation(varargin) % {{{
+-			switch nargin
+-				case 0
+-					self=setdefaultparameters(self);
+-				case 1
+-					self=structtoobj(timeadaptation(),varargin{1});
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			%time between 2 time steps
+-			self.time_step_min = 0.01;
+-			self.time_step_max = 1.;
+-
+-			%final time
+-			self.final_time=10.*self.time_step_max;
+-
+-			%default CFL coefficient
+-			self.cfl_coefficient=0.5;
+-
+-			%should we interpolate forcings between timesteps?
+-			self.interp_forcings=1;
+-		end % }}}
+-		function md = checkconsistency(self,md,solution,analyses) % {{{
+-
+-			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			if (self.time_step_min>self.time_step_max)
+-				md = checkmessage(md,['base not equal to bed on grounded ice!']);
+-			end
+-			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+-			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
+-			if self.final_time-self.start_time<0,
+-				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
+-			end 
+-		end % }}}
+-		function disp(self) % {{{
+-			disp(sprintf('   timeadaptation parameters:'));
+-
+-			unit = 'yr';
+-			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
+-			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
+-			fielddisplay(self,'time_step_min',['minimum length of time step [' unit ']']);
+-			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
+-			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
+-			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+-
+-		end % }}}
+-		function marshall(self,prefix,md,fid) % {{{
+-
+-			scale = md.constants.yts;
+-			WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
+-		end % }}}
+-		function savemodeljs(self,fid,modelname) % {{{
+-		
+-			writejsdouble(fid,[modelname '.timeadaptation.start_time'],self.start_time);
+-			writejsdouble(fid,[modelname '.timeadaptation.final_time'],self.final_time);
+-			writejsdouble(fid,[modelname '.timeadaptation.time_step_min'],self.time_step_min);
+-			writejsdouble(fid,[modelname '.timeadaptation.time_step_max'],self.time_step_max);
+-			writejsdouble(fid,[modelname '.timeadaptation.cfl_coefficient'],self.cfl_coefficient);
+-			writejsdouble(fid,[modelname '.timeadaptation.interp_forcings'],self.interp_forcings);
+-
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 21787)
+@@ -0,0 +1,86 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++class timesteppingadaptive(object):
++	"""
++	TIMESTEPPINGADAPTIVE Class definition
++
++	   Usage:
++	      timesteppingadaptive=timesteppingadaptive();
++	"""
++
++	def __init__(self,*args): # {{{
++		if not len(args):
++			self.start_time      = 0.
++			self.final_time      = 0.
++			self.time_step_min   = 0.
++			self.time_step_max   = 0.
++			self.cfl_coefficient = 0.
++			self.interp_forcings = 1
++			
++			#set defaults
++			self.setdefaultparameters()
++
++		elif len(args)==1 and args[0].__module__=='timestepping':
++			old=args[0]
++			#first call setdefaultparameters: 
++			self.setdefaultparameters()
++			self.start_time      = old.start_time      
++			self.final_time      = old.final_time      
++			self.interp_forcings = old.interp_forcings 
++
++		else:
++			raise Exception('constructor not supported')
++		#}}}
++	def __repr__(self): # {{{
++		string="   timesteppingadaptive parameters:"
++		string="%s\n%s"%(string,fielddisplay(self,"start_time","simulation starting time [yr]"))
++		string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
++		string="%s\n%s"%(string,fielddisplay(self,"time_step_min","minimum length of time steps [yr]"))
++		string="%s\n%s"%(string,fielddisplay(self,"time_step_max","maximum length of time steps [yr]"))
++		string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
++		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		
++		#time between 2 time steps
++		self.time_step_min=0.01
++		self.time_step_max=10.
++
++		#final time
++		self.final_time=10.*self.time_step_max
++
++		#time adaptation? 
++		self.cfl_coefficient=0.5
++		
++		#should we interpolate forcings between timesteps?
++		self.interp_forcings=1
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1)
++		if self.final_time-self.start_time<0:
++			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
++		md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++
++		yts=md.constants.yts
++		WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',yts)
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',yts)
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',yts)
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',yts)
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double')
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.js	(nonexistent)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.js	(revision 21787)
+@@ -0,0 +1,78 @@
++//TIMESTEPPINGADAPTIVE class definition
++//
++//   Usage:
++//      timesteppingadaptive=new timesteppingadaptive();
++
++function timesteppingadaptive (){
++	//methods
++	this.setdefaultparameters = function(){// {{{
++		//time between 2 time steps
++		this.time_step_min=0.01;
++		this.time_step_max=10.;
++
++		//final time
++		this.final_time=10.*this.time_step_max;
++
++		//time adaptation? 
++		this.cfl_coefficient=0.5;
++
++		//should we interpolate forcings between timesteps?
++		this.interp_forcings=1;
++	}// }}}
++	this.disp= function(){// {{{
++
++		var unit;
++		console.log(sprintf('   timesteppingadaptive parameters:'));
++		unit = 'yr';
++		fielddisplay(this,'start_time','simulation starting time ['+ unit + ']');
++		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
++		fielddisplay(this,'time_step_min','minimum length of time steps [' +unit+ ']');
++		fielddisplay(this,'time_step_max','maximum length of time steps [' +unit+ ']');
++		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
++		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++
++	}// }}}
++	this.classname= function(){// {{{
++		return "timesteppingadaptive";
++
++	}// }}}
++	this.checkconsistency = function(md,solution,analyses) { //{{{
++
++		checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_max,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
++		checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
++		if (this.final_time-this.start_time<0){
++			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
++		}
++	} // }}}
++	this.marshall=function(md,prefix,fid) { //{{{
++
++		var scale;
++		scale = md.constants.yts;
++
++		WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','cfl_coefficient','format','Double');
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','interp_forcings','format','Boolean');
++
++	}//}}}
++	this.fix=function() { //{{{
++	}//}}}
++	//properties 
++	// {{{
++	this.start_time      = 0.;
++	this.final_time      = 0.;
++	this.time_step_min   = 0.;
++	this.time_step_max   = 0.;
++	this.cfl_coefficient = 0.;
++	this.interp_forcings = 1;
++
++	this.setdefaultparameters();
++	//}}}
++}
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 21787)
+@@ -0,0 +1,87 @@
++%TIMESTEPPINGADAPTIVE Class definition
++%
++%   Usage:
++%      timesteppingadaptive=timesteppingadaptive();
++
++classdef timesteppingadaptive
++	properties (SetAccess=public) 
++		start_time      = 0.;
++		final_time      = 0.;
++		time_step_min   = 0.;
++		time_step_max   = 0.;
++		cfl_coefficient = 0.;
++		interp_forcings = 1;
++	end
++	methods
++		function self = timesteppingadaptive(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(timesteppingadaptive(),varargin{1});
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%time between 2 time steps
++			self.time_step_min = 0.01;
++			self.time_step_max = 10.;
++
++			%final time
++			self.final_time=10.*self.time_step_max;
++
++			%default CFL coefficient
++			self.cfl_coefficient=0.5;
++
++			%should we interpolate forcings between timesteps?
++			self.interp_forcings=1;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
++			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
++			if self.final_time-self.start_time<0,
++				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
++			end 
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   timesteppingadaptive parameters:'));
++
++			unit = 'yr';
++			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
++			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
++			fielddisplay(self,'time_step_min',['minimum length of time step [' unit ']']);
++			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
++			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
++			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			scale = md.constants.yts;
++			WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejsdouble(fid,[modelname '.timesteppingadaptive.start_time'],self.start_time);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.final_time'],self.final_time);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_min'],self.time_step_min);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_max'],self.time_step_max);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.cfl_coefficient'],self.cfl_coefficient);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcings'],self.interp_forcings);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/timestepping.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.py	(revision 21786)
++++ ../trunk-jpl/src/m/classes/timestepping.py	(revision 21787)
+@@ -14,8 +14,6 @@
+ 		self.start_time      = 0.
+ 		self.final_time      = 0.
+ 		self.time_step       = 0.
+-		self.time_adapt      = 0
+-		self.cfl_coefficient = 0.
+ 		self.interp_forcings = 1
+ 		
+ 		#set defaults
+@@ -27,8 +25,6 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"start_time","simulation starting time [yr]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"time_step","length of time steps [yr]"))
+-		string="%s\n%s"%(string,fielddisplay(self,"time_adapt","use cfl condition to define time step ? (0 or 1) "))
+-		string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
+ 		return string
+ 		#}}}
+@@ -40,10 +36,6 @@
+ 		#final time
+ 		self.final_time=10.*self.time_step
+ 
+-		#time adaptation? 
+-		self.time_adapt=0
+-		self.cfl_coefficient=0.5
+-		
+ 		#should we interpolate forcings between timesteps?
+ 		self.interp_forcings=1
+ 
+@@ -54,8 +46,6 @@
+ 		md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1)
+-		md = checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0,1])
+-		md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1)
+ 		if self.final_time-self.start_time<0:
+ 			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
+ 		md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
+@@ -69,7 +59,5 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',yts)
+-		WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean')
+-		WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double')
+ 		WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/timestepping.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.m	(revision 21786)
++++ ../trunk-jpl/src/m/classes/timestepping.m	(revision 21787)
+@@ -8,8 +8,6 @@
+ 		start_time      = 0.;
+ 		final_time      = 0.;
+ 		time_step       = 0.;
+-		time_adapt      = 0;
+-		cfl_coefficient = 0.;
+ 		interp_forcings = 1;
+ 	end
+ 	methods
+@@ -29,10 +27,6 @@
+ 			%final time
+ 			self.final_time=10.*self.time_step;
+ 
+-			%time adaptation? 
+-			self.time_adapt=0;
+-			self.cfl_coefficient=0.5;
+-
+ 			%should we interpolate forcings between timesteps?
+ 			self.interp_forcings=1;
+ 		end % }}}
+@@ -41,8 +35,6 @@
+ 			md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+ 			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
+ 			if self.final_time-self.start_time<0,
+ 				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
+@@ -55,8 +47,6 @@
+ 			fielddisplay(self,'start_time',['simulation starting time [' unit ']']);
+ 			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
+ 			fielddisplay(self,'time_step',['length of time steps [' unit ']']);
+-			fielddisplay(self,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
+-			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
+ 			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+ 
+ 		end % }}}
+@@ -67,8 +57,6 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean');
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+@@ -76,8 +64,6 @@
+ 			writejsdouble(fid,[modelname '.timestepping.start_time'],self.start_time);
+ 			writejsdouble(fid,[modelname '.timestepping.final_time'],self.final_time);
+ 			writejsdouble(fid,[modelname '.timestepping.time_step'],self.time_step);
+-			writejsdouble(fid,[modelname '.timestepping.time_adapt'],self.time_adapt);
+-			writejsdouble(fid,[modelname '.timestepping.cfl_coefficient'],self.cfl_coefficient);
+ 			writejsdouble(fid,[modelname '.timestepping.interp_forcings'],self.interp_forcings);
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/timestepping.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.js	(revision 21786)
++++ ../trunk-jpl/src/m/classes/timestepping.js	(revision 21787)
+@@ -12,10 +12,6 @@
+ 		//final time
+ 		this.final_time=10.*this.time_step;
+ 
+-		//time adaptation? 
+-		this.time_adapt=0;
+-		this.cfl_coefficient=0.5;
+-
+ 		//should we interpolate forcings between timesteps?
+ 		this.interp_forcings=1;
+ 	}// }}}
+@@ -27,8 +23,6 @@
+ 		fielddisplay(this,'start_time','simulation starting time ['+ unit + ']');
+ 		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
+ 		fielddisplay(this,'time_step','length of time steps [' +unit+ ']');
+-		fielddisplay(this,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
+-		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
+ 		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+ 
+ 	}// }}}
+@@ -36,41 +30,35 @@
+ 		return "timestepping";
+ 
+ 	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			
+-			checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0,1]);
+-			checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+-			checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
+-			if (this.final_time-this.start_time<0){
+-				md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
++	this.checkconsistency = function(md,solution,analyses) { //{{{
+ 
+-			var scale;
+-			scale = md.constants.yts;
+-			
+-			WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','time_adapt','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','cfl_coefficient','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
++		checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
++		if (this.final_time-this.start_time<0){
++			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
++		}
++	} // }}}
++	this.marshall=function(md,prefix,fid) { //{{{
+ 
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
++		var scale;
++		scale = md.constants.yts;
++
++		WriteData(fid,prefix,'name','md.timestepping.type','data',1,'format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
++		WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
++
++	}//}}}
++	this.fix=function() { //{{{
++	}//}}}
+ 	//properties 
+ 	// {{{
+ 	this.start_time      = 0.;
+ 	this.final_time      = 0.;
+ 	this.time_step       = 0.;
+-	this.time_adapt      = 0;
+-	this.cfl_coefficient = 0.;
+ 	this.interp_forcings = 1;
+ 
+ 	this.setdefaultparameters();
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 21786)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 21787)
+@@ -23,6 +23,7 @@
+ from friction import friction
+ from flowequation import flowequation
+ from timestepping import timestepping
++from timesteppingadaptive import timesteppingadaptive
+ from initialization import initialization
+ from rifts import rifts
+ from slr import slr
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21786)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21787)
+@@ -31,7 +31,7 @@
+ 	LevelsetStabilizationEnum,
+ 	TimesteppingTypeEnum,
+ 	FixedTimesteppingEnum,
+-	TimeAdaptationEnum,
++	AdaptiveTimesteppingEnum,
+ 	TimesteppingTimeStepMinEnum,
+ 	TimesteppingTimeStepMaxEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21787)
+@@ -39,7 +39,7 @@
+ 		case LevelsetStabilizationEnum : return "LevelsetStabilization";
+ 		case TimesteppingTypeEnum : return "TimesteppingType";
+ 		case FixedTimesteppingEnum : return "FixedTimestepping";
+-		case TimeAdaptationEnum : return "TimeAdaptation";
++		case AdaptiveTimesteppingEnum : return "AdaptiveTimestepping";
+ 		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
+ 		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
+ 		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21787)
+@@ -39,7 +39,7 @@
+ 	      else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum;
+ 	      else if (strcmp(name,"TimesteppingType")==0) return TimesteppingTypeEnum;
+ 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
+-	      else if (strcmp(name,"TimeAdaptation")==0) return TimeAdaptationEnum;
++	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
+ 	      else if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21787)
+@@ -123,7 +123,7 @@
+ int IoCodeToEnumTimestepping(int enum_in){/*{{{*/
+ 	switch(enum_in){
+ 		case 1: return FixedTimesteppingEnum;
+-		case 2: return TimeAdaptationEnum; 
++		case 2: return AdaptiveTimesteppingEnum; 
+ 		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
+ 	}
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21787)
+@@ -142,13 +142,10 @@
+ 		case FixedTimesteppingEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_adapt",TimesteppingTimeAdaptEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+ 			break;
+-		case TimeAdaptationEnum:
+-			parameters->AddObject(new BoolParam(TimesteppingTimeAdaptEnum,true));
++		case AdaptiveTimesteppingEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step_min",TimesteppingTimeStepMinEnum));
+@@ -157,7 +154,7 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+ 			break;
+ 		default:
+-			_error_(EnumToStringx(timestepping_type) <<" not supported yet");
++			_error_("Time stepping \""<<EnumToStringx(timestepping_type)<<"\" not supported yet");
+ 	}
+ 	iomodel->FindConstant(&time,"md.timestepping.start_time");
+ 	parameters->AddObject(new DoubleParam(TimeEnum,time));  
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21787)
+@@ -22,7 +22,7 @@
+ 	IssmDouble finaltime,dt,yts;
+ 	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology;
+ 	bool       save_results,dakota_analysis;
+-	bool       time_adapt;
++	int        timestepping;
+ 	int        output_frequency;
+ 	int        recording_frequency;
+ 	int        domaintype,groundingline_migration,smb_model,amr_frequency;
+@@ -46,7 +46,7 @@
+ 	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+-	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
++	femmodel->parameters->FindParam(&timestepping,TimesteppingTypeEnum);
+ 	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
+ 	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
+ 	femmodel->parameters->FindParam(&issmb,TransientIssmbEnum);
+@@ -70,15 +70,20 @@
+ 	#endif
+ 
+ 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
+-		/*Increment*/
+-		if(time_adapt){
+-			femmodel->TimeAdaptx(&dt);
+-			if(time+dt>finaltime) dt=finaltime-time;
+-			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
++
++		/*Time Increment*/
++		switch(timestepping){
++			case AdaptiveTimesteppingEnum:
++				femmodel->TimeAdaptx(&dt);
++				if(time+dt>finaltime) dt=finaltime-time;
++				femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
++				break;
++			case FixedTimesteppingEnum:
++				femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++				break;
++			default:
++				_error_("Time stepping \""<<EnumToStringx(timestepping)<<"\" not supported yet");
+ 		}
+-		else{
+-			femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-		}
+ 		step+=1;
+ 		time+=dt;
+ 		femmodel->parameters->SetParam(time,TimeEnum);
+@@ -182,7 +187,6 @@
+ 			if(step%amr_frequency==0 && time<finaltime) femmodel->ReMesh();//Do not refine the last step
+ 		}
+ 		#endif
+-	
+ 	}
+ 	
+ 	femmodel->RequestedDependentsx();
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21786)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21787)
+@@ -2064,8 +2064,6 @@
+ /*}}}*/
+ void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
+ 
+-	int      i;
+-
+ 	/*output: */
+ 	IssmDouble   dt;
+ 
+@@ -2076,7 +2074,7 @@
+ 	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
+ 	Element* element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+ 
+-	for (i=1;i<elements->Size();i++){
++	for(int i=1;i<elements->Size();i++){
+ 		element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+ 		dt=element->TimeAdapt();
+ 		if(dt<min_dt)min_dt=dt;
+@@ -2087,16 +2085,12 @@
+ 	ISSM_MPI_Bcast(&node_min_dt,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	min_dt=node_min_dt;
+ 
+-	/*Constrain dt if necessary*/
+-	int timestepping_type;
++	/*Constrain dt */
+ 	IssmDouble dt_low,dt_high;
+-	parameters->FindParam(&timestepping_type,TimesteppingTypeEnum);
+-	if(timestepping_type==TimeAdaptationEnum){
+-		parameters->FindParam(&dt_low,TimesteppingTimeStepMinEnum);
+-		parameters->FindParam(&dt_high,TimesteppingTimeStepMaxEnum);
+-		if(min_dt<dt_low)  min_dt = dt_low;
+-		if(min_dt>dt_high) min_dt = dt_high;
+-	}
++	parameters->FindParam(&dt_low,TimesteppingTimeStepMinEnum);
++	parameters->FindParam(&dt_high,TimesteppingTimeStepMaxEnum);
++	if(min_dt<dt_low)  min_dt = dt_low;
++	if(min_dt>dt_high) min_dt = dt_high;
+ 
+ 	/*Assign output pointers:*/
+ 	*pdt=min_dt;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21787-21788.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21787-21788.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21787-21788.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 21787)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 21788)
+@@ -44,9 +44,6 @@
+ 			if sum(isice)==0,
+ 				warning('no ice present in the domain');
+ 			end
+-			if max(md.mask.ice_levelset)<0,
+-				disp('WARNING: no ice front provided');
+-			end
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   masks:'));
Index: /issm/oecreview/Archive/21724-22754/ISSM-21788-21789.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21788-21789.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21788-21789.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21788)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21789)
+@@ -45,7 +45,7 @@
+ 				/*Fetch segments and names: */
+ 				iomodel->FetchMultipleData(&gatenames,&numgates,                     "md.massfluxatgate.name");
+ 				iomodel->FetchMultipleData(&gatedefinitionstrings,&temp,             "md.massfluxatgate.definitionstring"); _assert_(temp==numgates);
+-				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,NULL,&temp, "md.massfluxatgate.segments");       _assert_(temp==numgates);
++				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,NULL,&temp, "md.massfluxatgate.segments");         _assert_(temp==numgates);
+ 
+ 				for(j=0;j<numgates;j++){
+ 					output_definitions->AddObject(new Massfluxatgate<IssmDouble>(gatenames[j],StringToEnumx(gatedefinitionstrings[j]),gatesegments_M[j],gatesegments[j]));
+@@ -52,8 +52,9 @@
+ 				}
+ 				/*Free ressources:*/
+ 				for(j=0;j<numgates;j++){
+-					char*       string = gatenames[j];    xDelete<char>(string);
+-					IssmDouble* gate   = gatesegments[j]; xDelete<IssmDouble>(gate);
++					char*       string  = gatenames[j];             xDelete<char>(string);
++					char*       string2 = gatedefinitionstrings[j]; xDelete<char>(string2);
++					IssmDouble* gate    = gatesegments[j];          xDelete<IssmDouble>(gate);
+ 				}
+ 				xDelete<char*>(gatenames);
+ 				xDelete<IssmDouble*>(gatesegments);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21789-21790.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21789-21790.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21789-21790.diff	(revision 22755)
@@ -0,0 +1,204 @@
+Index: ../trunk-jpl/test/NightlyRun/test441.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test441.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test441.m	(revision 21790)
+@@ -0,0 +1,80 @@
++%Test Name: MISMIP3D
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%Boundary conditions:
++md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(md.mesh.x==max(md.mesh.x)))=0;
++md.stressbalance.spcvx(:)=NaN;
++md.stressbalance.spcvy(:)=NaN;
++md.stressbalance.spcvz(:)=NaN;
++pos=find((md.mesh.y<1000000.1 & md.mesh.y>999999.9) | (md.mesh.y<0.1 & md.mesh.y>-0.1));
++md.stressbalance.spcvy(pos)=0;
++pos2=find(md.mesh.x<0.1 & md.mesh.x>-0.1);
++md.stressbalance.spcvx(pos2)=0;
++md.stressbalance.spcvy(pos2)=0;
++
++md.materials.rheology_B=1/((10^-25)^(1/3))*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_law='None';
++md.friction.coefficient(:)=sqrt(10^7)*ones(md.mesh.numberofvertices,1);
++md.friction.p=3*ones(md.mesh.numberofelements,1);
++md.smb.mass_balance(:)=1;
++md.basalforcings.groundedice_melting_rate(:)=0;
++md.basalforcings.floatingice_melting_rate(:)=30;
++md.transient.isthermal=0;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=1;
++md.transient.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
++md.groundingline.migration='SubelementMigration2';
++md.timestepping.final_time=30;
++md.timestepping.time_step=10;
++
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
++field_values={...
++	(md.results.TransientSolution(1).Base),...
++	(md.results.TransientSolution(1).Surface),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
++	(md.results.TransientSolution(2).Base),...
++	(md.results.TransientSolution(2).Surface),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
++	(md.results.TransientSolution(3).Base),...
++	(md.results.TransientSolution(3).Surface),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Pressure),...
++	(md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21790)
+@@ -0,0 +1,84 @@
++%Test Name: MISMIP3DHO
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=extrude(md,4,1.);
++md=setflowequation(md,'HO','all');
++
++%Boundary conditions:
++md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(md.mesh.x==max(md.mesh.x)))=0;
++md.stressbalance.spcvx(:)=NaN;
++md.stressbalance.spcvy(:)=NaN;
++md.stressbalance.spcvz(:)=NaN;
++pos=find((md.mesh.y<1000000.1 & md.mesh.y>999999.9) | (md.mesh.y<0.1 & md.mesh.y>-0.1));
++md.stressbalance.spcvy(pos)=0;
++pos2=find(md.mesh.x<0.1 & md.mesh.x>-0.1);
++md.stressbalance.spcvx(pos2)=0;
++md.stressbalance.spcvy(pos2)=0;
++
++md.materials.rheology_B=1/((10^-25)^(1/3))*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_law='None';
++md.friction.coefficient(:)=sqrt(10^7)*ones(md.mesh.numberofvertices,1);
++md.friction.p=3*ones(md.mesh.numberofelements,1);
++md.smb.mass_balance(:)=1;
++md.basalforcings.groundedice_melting_rate(:)=0;
++md.basalforcings.floatingice_melting_rate(:)=30;
++md.transient.isthermal=0;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=1;
++md.transient.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
++md.groundingline.migration='SubelementMigration2';
++md.timestepping.final_time=30;
++md.timestepping.time_step=10;
++
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13,...
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13};
++field_values={...
++	(md.results.TransientSolution(1).Base),...
++	(md.results.TransientSolution(1).Surface),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(1).Vz),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
++	(md.results.TransientSolution(2).Base),...
++	(md.results.TransientSolution(2).Surface),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Vz),...
++	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
++	(md.results.TransientSolution(3).Base),...
++	(md.results.TransientSolution(3).Surface),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vz),...
++	(md.results.TransientSolution(3).Pressure),...
++	(md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive442.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive442.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive442.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive442.arch	(revision 21790)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive442.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive441.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive441.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive441.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive441.arch	(revision 21790)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive441.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21790-21791.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21790-21791.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21790-21791.diff	(revision 22755)
@@ -0,0 +1,369 @@
+Index: ../trunk-jpl/src/c/bamg/typedefs.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/typedefs.h	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/typedefs.h	(revision 21791)
+@@ -6,11 +6,9 @@
+ namespace bamg {
+ 
+ 	/*Integer coordinates types*/
+-	typedef int  Icoor1; 
+-	typedef long long Icoor2;
+ 
+ 	/*I2 and R2*/
+-	typedef P2<Icoor1,Icoor2>  I2;
++	typedef P2<int,long long>  I2;
+ 	typedef P2<double,double>  R2;
+ }
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21791)
+@@ -1048,7 +1048,7 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	void Mesh::AddVertex( BamgVertex &s,Triangle* t, Icoor2* det3){/*{{{*/
++	void Mesh::AddVertex( BamgVertex &s,Triangle* t, long long* det3){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Add)*/
+ 		// -------------------------------
+ 		//             s2
+@@ -1067,7 +1067,7 @@
+ 		
+ 		/*Intermediaries*/
+ 		Triangle* tt[3];       //the three triangles
+-		Icoor2 det3local[3];   //three determinants (integer)
++		long long det3local[3];   //three determinants (integer)
+ 		int nbzerodet =0;      //number of zeros in det3
+ 		int izerodet=-1;       //egde containing the vertex s
+ 		int iedge; 
+@@ -1078,7 +1078,7 @@
+ 		BamgVertex* s2=t->GetVertex(2);
+ 
+ 		//determinant of t
+-		Icoor2 detOld=t->det;
++		long long detOld=t->det;
+ 
+ 		/* infvertexindex = index of the infinite vertex (NULL)
+ 			if no infinite vertex (NULL) infvertexindex=-1
+@@ -2804,7 +2804,7 @@
+ 			BamgVertex *newvertex=orderedvertices[icount];
+ 
+ 			//Find the triangle in which newvertex is located
+-			Icoor2 det3[3];
++			long long det3[3];
+ 			Triangle* tcvi = TriangleFindFromCoord(newvertex->i,det3); //(newvertex->i = integer coordinates)
+ 
+ 			//Add newvertex to the quadtree
+@@ -2831,7 +2831,7 @@
+ 		double seuil= 1.414/2 ;// for two close point 
+ 		long i;
+ 		long NbSwap=0;
+-		Icoor2 det3[3];
++		long long det3[3];
+ 
+ 		//number of new points
+ 		const long nbvnew=nbv-nbvold;
+@@ -3016,7 +3016,7 @@
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/MetricAt)*/
+ 
+ 		I2 a = R2ToI2(A);
+-		Icoor2 deta[3];
++		long long deta[3];
+ 		Triangle * t =TriangleFindFromCoord(a,deta);
+ 		if (t->det <0) { // outside
+ 			double ba,bb;
+@@ -3475,7 +3475,7 @@
+ 		long NbSwap=0;
+ 		for (int icount=2; icount<nbvb; icount++) {
+ 			BamgVertex *vi  = orderedvertices[icount];
+-			Icoor2 det3[3];
++			long long det3[3];
+ 			Triangle *tcvi = TriangleFindFromCoord(vi->i,det3);
+ 			quadtree->Add(*vi); 
+ 			AddVertex(*vi,tcvi,det3);
+@@ -3892,7 +3892,7 @@
+ 		if (nbvold!=nbv){
+ 			long  iv = nbvold;
+ 			long NbSwap = 0;
+-			Icoor2 det3[3];  
++			long long det3[3];  
+ 			for (int i=nbvold;i<nbv;i++) {// for all the new point
+ 				BamgVertex & vi = vertices[i];
+ 				vi.i = R2ToI2(vi.r);
+@@ -3933,7 +3933,7 @@
+ 		return  R2( (double) P.x/coefIcoor+pmin.x, (double) P.y/coefIcoor+pmin.y);
+ 	}
+ 	/*}}}*/
+-	Triangle * Mesh::TriangleFindFromCoord(const I2 & B,Icoor2 det3[3], Triangle *tstart) const {/*{{{*/
++	Triangle * Mesh::TriangleFindFromCoord(const I2 & B,long long det3[3], Triangle *tstart) const {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindTriangleContening)*/
+ 
+ 		Triangle * t=0;	
+@@ -3962,7 +3962,7 @@
+ 			_assert_(t>=triangles && t<triangles+nbt);
+ 		}
+ 
+-		Icoor2  detop ;
++		long long  detop ;
+ 
+ 		/*initialize number of test triangle*/
+ 		counter=0; 
+@@ -4747,7 +4747,7 @@
+ 			_error_("k<0");
+ 		}
+ 		int kkk=0;  
+-		Icoor2 IJ_IA,IJ_AJ;
++		long long IJ_IA,IJ_AJ;
+ 		AdjacentTriangle edge(t,OppositeEdge[k]);          
+ 		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
+ 			kkk++;
+@@ -4791,7 +4791,7 @@
+ 		BamgVertex   *v1, *v2 = tta.EdgeVertex(0),*vbegin =v2;
+ 		// we turn around a in the  direct direction  
+ 
+-		Icoor2 det2 = v2 ? det(*v2,a,b): -1 , det1;
++		long long det2 = v2 ? det(*v2,a,b): -1 , det1;
+ 		if(v2) // normal case 
+ 		 det2 = det(*v2,a,b);
+ 		else { // no chance infini vertex try the next
+@@ -4818,7 +4818,7 @@
+ 				if (!v1 || !v2){
+ 					_error_("!v1 || !v2");
+ 				}
+-				Icoor2 detss = 0,l=0;
++				long long detss = 0,l=0;
+ 				while ((SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
+ 				 if(l++ > 10000000) {
+ 					 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+@@ -4852,7 +4852,7 @@
+ 		return NbSwap; 
+ 	}
+ 	/*}}}*/
+-	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,Icoor2 det1,Icoor2 det2){ /*{{{*/
++	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
+ 		// --------------------------------------------------------------
+ 		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
+@@ -4896,7 +4896,7 @@
+ 		t2->SetSingleVertexToTriangleConnectivity();
+ 	} // end swap 
+ 	/*}}}*/
+-	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,Icoor2 & dets1, Icoor2 & detsa,Icoor2 & detsb, int & NbSwap) {/*{{{*/
++	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SwapForForcingEdge)*/
+ 		// l'arete ta coupe l'arete pva pvb
+ 		// de cas apres le swap sa coupe toujours
+@@ -4917,9 +4917,9 @@
+ 		BamgVertex & s1= (*t1)[OppositeVertex[a1]];
+ 		BamgVertex & s2= (*t2)[OppositeVertex[a2]];
+ 
+-		Icoor2 dets2 = det(*pva,*pvb,s2);
+-		Icoor2 det1=t1->det , det2=t2->det ;
+-		Icoor2 detT = det1+det2;
++		long long dets2 = det(*pva,*pvb,s2);
++		long long det1=t1->det , det2=t2->det ;
++		long long detT = det1+det2;
+ 		if ((det1<=0 ) || (det2<=0)){
+ 			_error_("(det1<=0 ) || (det2<=0)");
+ 		}
+@@ -4926,8 +4926,8 @@
+ 		if ( (detsa>=0) || (detsb<=0) ){ // [a,b] cut infinite line va,bb
+ 			_error_("(detsa>=0) || (detsb<=0)");
+ 		}
+-		Icoor2 ndet1 = bamg::det(s1,sa,s2);
+-		Icoor2 ndet2 = detT - ndet1;
++		long long ndet1 = bamg::det(s1,sa,s2);
++		long long ndet2 = detT - ndet1;
+ 
+ 		int ToSwap =0; //pas de swap
+ 		if ((ndet1 >0) && (ndet2 >0)) 
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 21791)
+@@ -36,7 +36,7 @@
+ 			int  swap();
+ 			AdjacentTriangle Adj() const;
+ 			BamgVertex* EdgeVertex(const int & i) const;
+-			Icoor2& det() const;
++			long long& det() const;
+ 	};
+ }
+ #endif
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21791)
+@@ -237,10 +237,10 @@
+ 		BamgVertex  *s1=t1->vertices[OppositeVertex[a1]];
+ 		BamgVertex  *s2=t2->vertices[OppositeVertex[a2]];
+ 
+-		Icoor2 det1=t1->det , det2=t2->det ;
+-		Icoor2 detT = det1+det2;
+-		Icoor2 detA = Abs(det1) + Abs(det2);
+-		Icoor2 detMin = Min(det1,det2);
++		long long det1=t1->det , det2=t2->det ;
++		long long detT = det1+det2;
++		long long detA = Abs(det1) + Abs(det2);
++		long long detMin = Min(det1,det2);
+ 
+ 		int OnSwap = 0;       
+ 		// si 2 triangle infini (bord) => detT = -2;
+@@ -255,7 +255,7 @@
+ 			det2 = detT - det1;
+ 			OnSwap = (Abs(det1) + Abs(det2)) < detA;
+ 
+-			Icoor2 detMinNew=Min(det1,det2);
++			long long detMinNew=Min(det1,det2);
+ 			//     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test   
+ 			if (! OnSwap &&(detMinNew>0)) {
+ 				OnSwap = detMin ==0;
+@@ -264,7 +264,7 @@
+ 					while (1)
+ 					 if(kopt) {
+ 						 // critere de Delaunay pure isotrope
+-						 Icoor2 xb1 = sb->i.x - s1->i.x,
++						 long long xb1 = sb->i.x - s1->i.x,
+ 								  x21 = s2->i.x - s1->i.x,
+ 								  yb1 = sb->i.y - s1->i.y,
+ 								  y21 = s2->i.y - s1->i.y,
+Index: ../trunk-jpl/src/c/bamg/det.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/det.h	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/det.h	(revision 21791)
+@@ -5,9 +5,9 @@
+ 
+ namespace bamg {
+ 
+-	Icoor2 inline det(const I2 &a,const I2 & b,const I2 &c){
+-		Icoor2 bax = b.x - a.x ,bay = b.y - a.y; 
+-		Icoor2 cax = c.x - a.x ,cay = c.y - a.y; 
++	long long inline det(const I2 &a,const I2 & b,const I2 &c){
++		long long bax = b.x - a.x ,bay = b.y - a.y; 
++		long long cax = c.x - a.x ,cay = c.y - a.y; 
+ 		return  bax*cay - bay*cax;
+ 	}
+ 
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 21791)
+@@ -33,7 +33,7 @@
+ 		return t->vertices[VerticesOfTriangularEdge[a][i]];
+ 	}
+ 	/*}}}*/
+-	Icoor2 & AdjacentTriangle::det() const {/*{{{*/
++	long long & AdjacentTriangle::det() const {/*{{{*/
+ 		return t->det;
+ 	}
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 21791)
+@@ -192,13 +192,13 @@
+ 
+ 		Triangle *tbegin, *t;
+ 
+-		Icoor2 deta[3], deti,detj;
++		long long deta[3], deti,detj;
+ 		double ba[3];
+ 		int ifirst=-1,ilast;
+ 		int i0,i1,i2;
+ 		int ocut,i,j,k=-1;
+ 		//  int OnAVertices =0;
+-		Icoor2 dt[3];
++		long long dt[3];
+ 		I2 a = Bh.R2ToI2(A) ,b= Bh.R2ToI2(B);// compute  the Icoor a,b
+ 		I2 vi,vj;  
+ 		int iedge =-1;// not a edge
+@@ -355,7 +355,7 @@
+ 
+ 				k = OppositeVertex[ocut];
+ 
+-				Icoor2 detbij = bamg::det((*t)[i],(*t)[j],b);
++				long long detbij = bamg::det((*t)[i],(*t)[j],b);
+ 
+ 				if (detbij >= 0) { //we find the triangle contening b
+ 					dt[0]=bamg::det((*t)[1],(*t)[2],b);
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21791)
+@@ -37,7 +37,7 @@
+ 			long                          nbtout;                // Nb of oudeside triangle
+ 
+ 			R2                            pmin,pmax;             // extrema
+-			double                        coefIcoor;             // coef to integer Icoor1;
++			double                        coefIcoor;             // coef to integer
+ 			ListofIntersectionTriangles   lIntTria;
+ 
+ 			long                          NbVerticesOnGeomVertex;
+@@ -75,7 +75,7 @@
+ 			double MaximalHmax();
+ 			I2 R2ToI2(const R2 & P) const;
+ 			R2 I2ToR2(const I2 & P) const;
+-			void AddVertex(BamgVertex & s,Triangle * t,Icoor2 *  =0) ;
++			void AddVertex(BamgVertex & s,Triangle * t,long long *  =0) ;
+ 			void Insert(bool random);
+ 			void Echo(void);
+ 			void ForceBoundary();
+@@ -102,7 +102,7 @@
+ 			long GetId(const Edge & t) const;
+ 			long GetId(const Edge * t) const;
+ 			BamgVertex* NearestVertex(int i,int j) ;
+-			Triangle* TriangleFindFromCoord(const I2 & ,Icoor2 [3],Triangle *tstart=0) const;
++			Triangle* TriangleFindFromCoord(const I2 & ,long long [3],Triangle *tstart=0) const;
+ 			void ReadMesh(int* index,double* x,double* y,int nods,int nels);
+ 			void ReadMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts);
+ 			void WriteMesh(BamgMesh* bamgmesh,BamgOpts* bamgopts);
+@@ -148,10 +148,10 @@
+ 	AdjacentTriangle CloseBoundaryEdge(I2 ,Triangle *, double &,double &) ;
+ 	void  swap(Triangle *t1,short a1,
+ 				Triangle *t2,short a2,
+-				BamgVertex *s1,BamgVertex *s2,Icoor2 det1,Icoor2 det2);
++				BamgVertex *s1,BamgVertex *s2,long long det1,long long det2);
+ 	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
+-				AdjacentTriangle & tt1,Icoor2 & dets1,
+-				Icoor2 & detsa,Icoor2 & detsb, int & nbswap);
++				AdjacentTriangle & tt1,long long & dets1,
++				long long & detsa,long long & detsb, int & nbswap);
+ 	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
+ 	inline AdjacentTriangle Previous(const AdjacentTriangle & ta){
+ 		return AdjacentTriangle(ta.t,PreviousEdge[ta.a]);
+@@ -169,7 +169,7 @@
+ 		double ret; 
+ 		I2 ia=va,ib=vb,ic=vc;
+ 		I2 ab=ib-ia,bc=ic-ib,ac=ic-ia;
+-		Icoor2 deta=Det(ab,ac);
++		long long deta=Det(ab,ac);
+ 		if (deta <=0) ret = -1;
+ 		else {
+ 			double a = sqrt((double) (ac,ac)),
+Index: ../trunk-jpl/src/c/bamg/BamgVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21791)
+@@ -156,7 +156,7 @@
+ 		PNew = P+Xmove;
+ 		double delta=Norme2_2(Xmove); 
+ 
+-		Icoor2 deta[3];
++		long long deta[3];
+ 		I2 IBTh  = BTh.R2ToI2(PNew);
+ 
+ 		tstart=BTh.TriangleFindFromCoord(IBTh,deta,tstart);  
+Index: ../trunk-jpl/src/c/bamg/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.h	(revision 21790)
++++ ../trunk-jpl/src/c/bamg/Triangle.h	(revision 21791)
+@@ -20,7 +20,7 @@
+ 			short       AdjEdgeIndex[3];   // edge id in the adjacent triangles. The edge number 1 is the edge number AdjEdgeIndex[1] in the Adjacent triangle 1
+ 
+ 		public: 
+-			Icoor2 det; //Integer determinant (twice its area)
++			long long det; //Integer determinant (twice its area)
+ 			union { 
+ 				Triangle *link;
+ 				long      color;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21791-21792.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21791-21792.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21791-21792.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21791)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21792)
+@@ -28,7 +28,7 @@
+ 	int    i0,i1,i2;
+ 	double areacoord[3];
+ 	double aa,bb;
+-	Icoor2 dete[3];
++	long long dete[3];
+ 
+ 	/*Checks*/
+ 	if (M_data!=nods_data && M_data!=nels_data){
Index: /issm/oecreview/Archive/21724-22754/ISSM-21792-21793.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21792-21793.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21792-21793.diff	(revision 22755)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21792)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21793)
+@@ -720,6 +720,7 @@
+ 	SoftMigrationEnum,
+ 	SubelementMigrationEnum,
+ 	SubelementMigration2Enum,
++	SubelementMigration3Enum,
+ 	ContactEnum,
+ 	GroundingOnlyEnum,
+ 	MaskGroundediceLevelsetEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21792)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21793)
+@@ -710,6 +710,7 @@
+ 		case SoftMigrationEnum : return "SoftMigration";
+ 		case SubelementMigrationEnum : return "SubelementMigration";
+ 		case SubelementMigration2Enum : return "SubelementMigration2";
++		case SubelementMigration3Enum : return "SubelementMigration3";
+ 		case ContactEnum : return "Contact";
+ 		case GroundingOnlyEnum : return "GroundingOnly";
+ 		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21792)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21793)
+@@ -725,6 +725,7 @@
+ 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
++	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+ 	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+ 	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+-	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
++	      if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
++	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
+ 	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
++	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
++	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21793-21794.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21793-21794.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21793-21794.diff	(revision 22755)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21793)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21794)
+@@ -469,7 +469,8 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  Jdet,dt;
+-	IssmDouble  ms,mb,gmb,fmb,thickness,phi;
++	IssmDouble  ms,mb,gmb,fmb,thickness;
++	IssmDouble  gllevelset,phi=1.;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -484,7 +485,7 @@
+ 	element->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	Input* gmb_input           = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
+ 	Input* fmb_input           = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
+-	Input* groundedice_input   = element->GetInput(MaskGroundediceLevelsetEnum);              _assert_(groundedice_input);
++	Input* gllevelset_input   = element->GetInput(MaskGroundediceLevelsetEnum);              _assert_(gllevelset_input);
+ 	Input* ms_input            = element->GetInput(SmbMassBalanceEnum);                       _assert_(ms_input);
+ 	Input* thickness_input     = element->GetInput(ThicknessEnum);                            _assert_(thickness_input);
+ 
+@@ -499,7 +500,7 @@
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		gmb_input->GetInputValue(&gmb,gauss);
+ 		fmb_input->GetInputValue(&fmb,gauss);
+-		groundedice_input->GetInputValue(&phi,gauss);
++		gllevelset_input->GetInputValue(&phi,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		if(phi>0.) mb=gmb;
+ 		else mb=fmb;
+@@ -519,9 +520,13 @@
+ 	if(!element->IsIceInElement()) return NULL;
+ 
+ 	/*Intermediaries */
+-	IssmDouble  Jdet,dt;
+-	IssmDouble  ms,mb,gmb,fmb,thickness,phi;
++	int         migration_style,point1;
++	bool        mainlyfloating;
++	IssmDouble  Jdet,fraction1,fraction2;
++	IssmDouble  dt,gllevelset;
++	IssmDouble  ms,mb,gmb,fmb,thickness,phi=1.;
+ 	IssmDouble* xyz_list = NULL;
++	Gauss*      gauss     = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = element->GetNumberOfNodes();
+@@ -536,11 +541,21 @@
+ 	Input* gmb_input           = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);
+ 	Input* fmb_input           = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);
+ 	Input* ms_input            = element->GetInput(SmbMassBalanceEnum);          _assert_(ms_input);
+-	Input* groundedice_input   = element->GetInput(MaskGroundediceLevelsetEnum);             _assert_(groundedice_input);
++	Input* gllevelset_input   = element->GetInput(MaskGroundediceLevelsetEnum);             _assert_(gllevelset_input);
+ 	Input* thickness_input     = element->GetInput(ThicknessEnum);                           _assert_(thickness_input);
+ 
++	/*Recover portion of element that is grounded*/
++	phi=element->GetGroundedPortion(xyz_list);
++	if(migration_style==SubelementMigration2Enum){
++		gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
++	   gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,3);
++	}
++	else{
++		gauss = element->NewGauss(3);
++	}
++
+ 	/* Start  looping on the number of gaussian points: */
+-	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 		gauss->GaussPoint(ig);
+ 
+@@ -550,10 +565,24 @@
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		gmb_input->GetInputValue(&gmb,gauss);
+ 		fmb_input->GetInputValue(&fmb,gauss);
+-		groundedice_input->GetInputValue(&phi,gauss);
++		gllevelset_input->GetInputValue(&gllevelset,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+-		if(phi>0) mb=gmb;
+-		else mb=fmb;
++		if(migration_style==SubelementMigrationEnum){
++			if (phi<0.00000001) mb=gmb;
++			else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
++		}
++		else if(migration_style==SubelementMigration2Enum){
++			if(gllevelset>0.) mb=gmb;
++			else mb=fmb;
++		}
++		else if(migration_style==SubelementMigration3Enum){
++			if (phi<0.00000001) mb=gmb;
++			else mb=gmb;
++		}
++		else{
++			if(gllevelset>0) mb=gmb;
++			else mb=fmb;
++		}
+ 
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-21794-21795.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21794-21795.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21794-21795.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21794)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21795)
+@@ -51,8 +51,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13};
++	3e-11,3e-11,9e-10,7e-11,2e-09,5e-08,1e-09,1e-10,1e-13,...
++	3e-10,4e-11,3e-10,2e-10,7e-05,9e-05,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21795-21796.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21795-21796.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21795-21796.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21795)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21796)
+@@ -51,8 +51,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,2e-09,5e-08,1e-09,1e-10,1e-13,...
+-	3e-10,4e-11,3e-10,2e-10,7e-05,9e-05,1e-09,1e-10,1e-13};
++	3e-11,3e-11,9e-10,7e-11,3e-09,5e-08,1e-09,1e-10,1e-13,...
++	4e-10,4e-10,3e-10,2e-10,7e-05,9e-05,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21796-21797.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21796-21797.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21796-21797.diff	(revision 22755)
@@ -0,0 +1,134 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21796)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21797)
+@@ -468,10 +468,14 @@
+ 	if(!element->IsIceInElement()) return NULL;
+ 
+ 	/*Intermediaries */
++	int         migration_style,point1;
++	bool        mainlyfloating;
++	IssmDouble  fraction1,fraction2;
+ 	IssmDouble  Jdet,dt;
+ 	IssmDouble  ms,mb,gmb,fmb,thickness;
+ 	IssmDouble  gllevelset,phi=1.;
+ 	IssmDouble* xyz_list = NULL;
++	Gauss*      gauss     = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = element->GetNumberOfNodes();
+@@ -489,8 +493,18 @@
+ 	Input* ms_input            = element->GetInput(SmbMassBalanceEnum);                       _assert_(ms_input);
+ 	Input* thickness_input     = element->GetInput(ThicknessEnum);                            _assert_(thickness_input);
+ 
++	/*Recover portion of element that is grounded*/
++	phi=element->GetGroundedPortion(xyz_list);
++	if(migration_style==SubelementMigration2Enum){
++		gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
++	   gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,3);
++	}
++	else{
++		gauss = element->NewGauss(3);
++	}
++
+ 	/* Start  looping on the number of gaussian points: */
+-	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 		gauss->GaussPoint(ig);
+ 
+@@ -500,11 +514,26 @@
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		gmb_input->GetInputValue(&gmb,gauss);
+ 		fmb_input->GetInputValue(&fmb,gauss);
+-		gllevelset_input->GetInputValue(&phi,gauss);
++		gllevelset_input->GetInputValue(&gllevelset,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+-		if(phi>0.) mb=gmb;
+-		else mb=fmb;
+ 
++		if(migration_style==SubelementMigrationEnum){
++			if (phi<0.00000001) mb=gmb;
++			else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
++		}
++		else if(migration_style==SubelementMigration2Enum){
++			if(gllevelset>0.) mb=gmb;
++			else mb=fmb;
++		}
++		else if(migration_style==SubelementMigration3Enum){
++			if (phi<0.00000001) mb=gmb;
++			else mb=gmb;
++		}
++		else{
++			if(gllevelset>0) mb=gmb;
++			else mb=fmb;
++		}
++
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
+ 	}
+ 
+@@ -520,13 +549,9 @@
+ 	if(!element->IsIceInElement()) return NULL;
+ 
+ 	/*Intermediaries */
+-	int         migration_style,point1;
+-	bool        mainlyfloating;
+-	IssmDouble  Jdet,fraction1,fraction2;
+-	IssmDouble  dt,gllevelset;
++	IssmDouble  Jdet,dt;
+ 	IssmDouble  ms,mb,gmb,fmb,thickness,phi=1.;
+ 	IssmDouble* xyz_list = NULL;
+-	Gauss*      gauss     = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = element->GetNumberOfNodes();
+@@ -544,18 +569,8 @@
+ 	Input* gllevelset_input   = element->GetInput(MaskGroundediceLevelsetEnum);             _assert_(gllevelset_input);
+ 	Input* thickness_input     = element->GetInput(ThicknessEnum);                           _assert_(thickness_input);
+ 
+-	/*Recover portion of element that is grounded*/
+-	phi=element->GetGroundedPortion(xyz_list);
+-	if(migration_style==SubelementMigration2Enum){
+-		gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
+-		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+-	   gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,3);
+-	}
+-	else{
+-		gauss = element->NewGauss(3);
+-	}
+-
+ 	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 		gauss->GaussPoint(ig);
+ 
+@@ -565,25 +580,12 @@
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		gmb_input->GetInputValue(&gmb,gauss);
+ 		fmb_input->GetInputValue(&fmb,gauss);
+-		gllevelset_input->GetInputValue(&gllevelset,gauss);
++		gllevelset_input->GetInputValue(&phi,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+-		if(migration_style==SubelementMigrationEnum){
+-			if (phi<0.00000001) mb=gmb;
+-			else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
+-		}
+-		else if(migration_style==SubelementMigration2Enum){
+-			if(gllevelset>0.) mb=gmb;
+-			else mb=fmb;
+-		}
+-		else if(migration_style==SubelementMigration3Enum){
+-			if (phi<0.00000001) mb=gmb;
+-			else mb=gmb;
+-		}
+-		else{
+-			if(gllevelset>0) mb=gmb;
+-			else mb=fmb;
+-		}
+ 
++		if(phi>0.) mb=gmb;
++		else mb=fmb;
++
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21797-21798.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21797-21798.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21797-21798.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21797)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21798)
+@@ -526,7 +526,7 @@
+ 			else mb=fmb;
+ 		}
+ 		else if(migration_style==SubelementMigration3Enum){
+-			if (phi<0.00000001) mb=gmb;
++			if (phi<0.00000001) mb=fmb;
+ 			else mb=gmb;
+ 		}
+ 		else{
Index: /issm/oecreview/Archive/21724-22754/ISSM-21798-21799.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21798-21799.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21798-21799.diff	(revision 22755)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp	(revision 21798)
++++ ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp	(revision 21799)
+@@ -14,7 +14,7 @@
+ 	/*Intermediaries*/
+ 	int elementtype,domaintype;
+ 
+-	if(VerboseSolution()) _printf0_("extruding solution from base...\n");
++	if(VerboseSolution()) _printf0_("   extruding solution from base...\n");
+ 
+ 	/*Get parameters*/
+ 	femmodel->parameters->FindParam(&domaintype,DomainTypeEnum);
+Index: ../trunk-jpl/src/c/cores/depthaverage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/depthaverage_core.cpp	(revision 21798)
++++ ../trunk-jpl/src/c/cores/depthaverage_core.cpp	(revision 21799)
+@@ -15,7 +15,7 @@
+ 	int domaintype,elementtype;
+ 	int inputenum,input_average_enum;
+ 
+-	if(VerboseSolution()) _printf0_("depth averaging solution...\n");
++	if(VerboseSolution()) _printf0_("   depth averaging solution...\n");
+ 
+ 	/*Get parameters*/
+ 	femmodel->parameters->FindParam(&domaintype,DomainTypeEnum);
+Index: ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp	(revision 21798)
++++ ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp	(revision 21799)
+@@ -14,7 +14,7 @@
+ 	/*Intermediaries*/
+ 	int elementtype,domaintype;
+ 
+-	if(VerboseSolution()) _printf0_("extruding solution from top...\n");
++	if(VerboseSolution()) _printf0_("   extruding solution from top...\n");
+ 
+ 	/*Get parameters*/
+ 	femmodel->parameters->FindParam(&domaintype,DomainTypeEnum);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21798)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21799)
+@@ -1689,7 +1689,13 @@
+ 								}
+ 								vector_result->Assemble();
+ 
+-								if(save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
++								if(save_results){
++									results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
++									/*We do not do a copy for Vectors, so don't delete*/
++								}
++								else{
++									delete vector_result;
++								}
+ 							}
+ 							else{
+ 								IssmDouble* values    = xNewZeroInit<IssmDouble>(nlines*ncols);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21799-21800.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21799-21800.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21799-21800.diff	(revision 22755)
@@ -0,0 +1,82 @@
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 21799)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 21800)
+@@ -31,7 +31,7 @@
+ md.friction.p=3*ones(md.mesh.numberofelements,1);
+ md.smb.mass_balance(:)=1;
+ md.basalforcings.groundedice_melting_rate(:)=0;
+-md.basalforcings.floatingice_melting_rate(:)=0;
++md.basalforcings.floatingice_melting_rate(:)=30;
+ md.transient.isthermal=0;
+ md.transient.isstressbalance=1;
+ md.transient.isgroundingline=1;
+Index: ../trunk-jpl/test/Archives/Archive441.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive439.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive442.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive426.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive435.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive427.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive805.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21799)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21800)
+@@ -32,7 +32,7 @@
+ md.friction.p=3*ones(md.mesh.numberofelements,1);
+ md.smb.mass_balance(:)=1;
+ md.basalforcings.groundedice_melting_rate(:)=0;
+-md.basalforcings.floatingice_melting_rate(:)=0;
++md.basalforcings.floatingice_melting_rate(:)=30;
+ md.transient.isthermal=0;
+ md.transient.isstressbalance=1;
+ md.transient.isgroundingline=1;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21800-21801.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21800-21801.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21800-21801.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21800)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21801)
+@@ -51,8 +51,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,3e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,4e-10,3e-10,2e-10,7e-05,9e-05,1e-09,1e-10,1e-13};
++	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
++	4e-10,1e-09,1e-09,1e-09,2e-04,2e-04,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21800)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21801)
+@@ -51,8 +51,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-09,1e-10,1e-13};
++	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
++	1e-10,4e-09,2e-09,2e-09,4e-04,4e-04,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21801-21802.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21801-21802.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21801-21802.diff	(revision 22755)
@@ -0,0 +1,3287 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21801)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21802)
+@@ -46,6 +46,7 @@
+ 					 ./bamg/VertexOnVertex.cpp\
+ 					 ./bamg/Mesh.cpp\
+ 					 ./shared/Bamg/BigPrimeNumber.cpp\
++					 ./classes/AmrBamg.cpp\
+ 					 ./modules/Bamgx/Bamgx.cpp\
+ 					 ./modules/BamgConvertMeshx/BamgConvertMeshx.cpp\
+ 					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 21802)
+@@ -604,6 +604,7 @@
+ 					if(strcmp(record_name,"md.hydrology.model")==0) integer = IoCodeToEnumHydrology(integer);
+ 					if(strcmp(record_name,"md.materials.type")==0) integer = IoCodeToEnumMaterials(integer);
+ 					if(strcmp(record_name,"md.timestepping.type")==0) integer = IoCodeToEnumTimestepping(integer);
++					if(strcmp(record_name,"md.amr.type")==0) integer = IoCodeToEnumAmr(integer);
+ 
+ 					/*Broadcast to other cpus*/
+ 					ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21802)
+@@ -697,7 +697,7 @@
+ 			bamgmesh->SubDomains=xNew<double>(4*nbsubdomains);
+ 			for (i=0;i<nbsubdomains;i++){
+ 				bamgmesh->SubDomains[i*4+0]=3;
+-				bamgmesh->SubDomains[i*4+1]=reft[GetId(subdomains[i].head)];
++				bamgmesh->SubDomains[i*4+1]=reft[GetId(subdomains[i].head)]+1;//MATLAB indexing
+ 				bamgmesh->SubDomains[i*4+2]=1;
+ 				bamgmesh->SubDomains[i*4+3]=subdomains[i].ReferenceNumber;
+ 			}
+@@ -3075,10 +3075,10 @@
+ 						- ((*tcvj)(0)->r.y -(*tcvj)(2)->r.y)*(bv.r.x -(*tcvj)(2)->r.x));
+ 				IssmDouble area_3 =((bv.r.x -(*tcvj)(1)->r.x)*((*tcvj)(0)->r.y-(*tcvj)(1)->r.y)
+ 						- (bv.r.y -(*tcvj)(1)->r.y)*((*tcvj)(0)->r.x-(*tcvj)(1)->r.x));
+-				if(area_1<0 || area_2<0 || area_3<0){
+-					pointsoutside = true;
+-					continue;
+-				}
++			//	if(area_1<0 || area_2<0 || area_3<0){
++			//		pointsoutside = true;
++			//		continue;
++			//	}
+ 				if(!bv.GeomEdgeHook){
+ 					vertices[nbv].r              = bv.r;
+ 					vertices[nbv].PreviousNumber = i+1;
+@@ -3085,7 +3085,7 @@
+ 					vertices[nbv++].m = bv.m;
+ 				}
+ 			}
+-			if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
++			//if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
+ 			Bh.CreateSingleVertexToTriangleConnectivity();     
+ 			InsertNewPoints(nbvold,NbTSwap,bamgopts->random);
+ 		}
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21802)
+@@ -4,30 +4,30 @@
+ /*Constructors/Destructors*/
+ BamgOpts::BamgOpts(){/*{{{*/
+ 
+-	this->anisomax=0;
+-	this->cutoff=0;
+-	this->coeff=0;
+-	this->errg=0;
+-	this->gradation=0;
+-	this->Hessiantype=0;
+-	this->MaxCornerAngle=0;
+-	this->maxnbv=0;
+-	this->maxsubdiv=0;
+-	this->Metrictype=0;
+-	this->nbjacobi=0;
+-	this->nbsmooth=0;
+-	this->omega=0;
+-	this->power=0;
+-	this->random=0;
+-	this->verbose=0;
++	this->anisomax          = 0;
++	this->cutoff            = 0;
++	this->coeff             = 0;
++	this->errg              = 0;
++	this->gradation         = 0;
++	this->Hessiantype       = 0;
++	this->MaxCornerAngle    = 0;
++	this->maxnbv            = 0;
++	this->maxsubdiv         = 0;
++	this->Metrictype        = 0;
++	this->nbjacobi          = 0;
++	this->nbsmooth          = 0;
++	this->omega             = 0;
++	this->power             = 0;
++	this->random            = 0;
++	this->verbose           = 0;
+ 
+-	this->Crack=0;
+-	this->geometricalmetric=0;
+-	this->KeepVertices=0;
+-	this->splitcorners=0;
++	this->Crack             = 0;
++	this->geometricalmetric = 0;
++	this->KeepVertices      = 0;
++	this->splitcorners      = 0;
+ 
+-	this->hmin=0;
+-	this->hmax=0;
++	this->hmin              = 0;
++	this->hmax              = 0;
+ 	this->hminVertices=NULL; this->hminVerticesSize[0]=this->hminVerticesSize[1]=0;
+ 	this->hmaxVertices=NULL; this->hmaxVerticesSize[0]=this->hmaxVerticesSize[1]=0;
+ 	this->hVertices=NULL;    this->hVerticesSize[0]=this->hVerticesSize[1]=0;
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 21801)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 21802)
+@@ -9,6 +9,7 @@
+ int IoCodeToEnumHydrology(int enum_in);
+ int IoCodeToEnumMaterials(int enum_in);
+ int IoCodeToEnumTimestepping(int enum_in);
++int IoCodeToEnumAmr(int enum_in);
+ 
+ int IoCodeToEnumVertexEquation(int enum_in);
+ int IoCodeToEnumElementEquation(int enum_in);
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 21802)
+@@ -127,6 +127,13 @@
+ 		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
+ 	}
+ }/*}}}*/
++int IoCodeToEnumAmr(int enum_in){/*{{{*/
++	switch(enum_in){
++		case 1: return AmrBamgEnum;
++		case 2: return AmrNeopzEnum; 
++		default: _error_("Marshalled AMR code \""<<enum_in<<"\" not supported yet"); 
++	}
++}/*}}}*/
+ 
+ int IoCodeToEnumVertexEquation(int enum_in){/*{{{*/
+ 	switch(enum_in){
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21802)
+@@ -23,7 +23,7 @@
+ 	double defaultvalue;
+ 	R2     r;
+ 	I2     I;
+-	int    i,j;
++	int    i,j,k;
+ 	int    it;
+ 	int    i0,i1,i2;
+ 	double areacoord[3];
+@@ -65,6 +65,16 @@
+ 		if(y_data[i]>ymax) ymax=y_data[i];
+ 	}
+ 
++	/*Create Single vertex to element connectivity*/
++	int* connectivity = xNew<int>(nods_data);
++	for(i=0;i<nels_data;i++){
++		for(j=0;j<3;j++){
++			k = index_data[i*3+j]-1;
++			_assert_(k>=0 & k<nods_data);
++			connectivity[k]=i;
++		}
++	}
++
+ 	/*Loop over output nodes*/
+ 	for(i=0;i<N_interp;i++){
+ 		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(N_interp)*100.<<"%   ");
+@@ -136,19 +146,18 @@
+ 			/*For the P0 implementation*/
+ 			/*If we fall outside of the convex or outside of the mesh, return NaN*/
+ 			if(tb.det<0 || reft[it]<0){
+-				for (j=0;j<N_data;j++){
+-					data_interp[i*N_data+j]=NAN;
+-				}
++				_assert_(i0>=0 & i0<nods_data);
++				it=connectivity[i0]; //or i1 or i2
++				_assert_(it>=0 && it<nels_data);
++				for(j=0;j<N_data;j++) data_interp[i*N_data+j]=data[N_data*it+j];
+ 			}
+ 			else{
++				/*Inside the mesh!*/
+ 				if(it<0 || it>=nels_data){
+ 					_error_("Triangle number " << it << " not in [0 " << nels_data
+ 								<< "], report bug to developers (interpolation point: " <<x_interp[i]<<" "<<y_interp[i]<<")");
+ 				}
+-				for (j=0;j<N_data;j++){
+-
+-					data_interp[i*N_data+j]=data[N_data*it+j];
+-				}
++				for (j=0;j<N_data;j++) data_interp[i*N_data+j]=data[N_data*it+j];
+ 			}
+ 		}
+ 	}
+@@ -157,6 +166,7 @@
+ 	/*clean-up and return*/
+ 	delete Th;
+ 	xDelete<long>(reft);
++	xDelete<int>(connectivity);
+ 	*pdata_interp=data_interp;
+ 	return 1;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21802)
+@@ -20,6 +20,7 @@
+ 	int         i,j,m,k;
+ 	int         numoutputs,materialtype,smb_model,basalforcing_model,timestepping_type;
+ 	char**      requestedoutputs = NULL;
++	char*       fieldname = NULL;
+ 	IssmDouble  time;
+ 
+ 	/*parameters for mass flux:*/
+@@ -59,7 +60,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.iscontrol",InversionIscontrolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.type",InversionTypeEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.calving.law",CalvingLawEnum));
+-	{/*This is specific to ice...*/
++	  {/*This is specific to ice...*/
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.mesh.elementtype",MeshElementtypeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.reltol",SteadystateReltolEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.maxiter",SteadystateMaxiterEnum));
+@@ -80,10 +81,6 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
+-		/*amr properties*/	
+-		parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_1",AmrRegionLevel1Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_max",AmrRegionLevelMaxEnum));
+ 
+ 		/*For stress balance only*/
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isFS",FlowequationIsFSEnum));
+@@ -94,9 +91,40 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.abstol",StressbalanceAbstolEnum));
+ 		if(iomodel->domaintype==Domain3DEnum)
+ 		 parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberoflayers",MeshNumberoflayersEnum));
++	  }
++
++	/*amr properties*/	
++	int amrtype,amr_frequency;
++	iomodel->FindConstant(&amr_frequency,"md.transient.amr_frequency");
++	if(solution_type==TransientSolutionEnum && amr_frequency){
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.type",AmrTypeEnum));
++		iomodel->FindConstant(&amrtype,"md.amr.type");
++		switch(amrtype){
++			#ifdef _HAVE_NEOPZ_
++			case AmrNeopzEnum:
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_1",AmrRegionLevel1Enum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_max",AmrRegionLevelMaxEnum));
++				break;
++			#endif
++
++			#ifdef _HAVE_BAMG_
++			case AmrBamgEnum:
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.hmin",AmrHminEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.hmax",AmrHmaxEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.err",AmrErrEnum));
++				/*Convert fieldname to enum and put it in params*/
++				iomodel->FindConstant(&fieldname,"md.amr.fieldname");
++				parameters->AddObject(new IntParam(AmrFieldEnum,StringToEnumx(fieldname)));
++				xDelete<char>(fieldname);
++				break;
++			#endif
++
++			default:
++				_error_("Adaptive mesh refinement "<<EnumToStringx(amrtype)<<" not implemented yet");
++		}
+ 	}
+ 
+-	
+ 	/*Basal forcing parameters*/
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.model",BasalforcingsEnum));
+ 	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+@@ -254,7 +282,7 @@
+ 	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+- 	#ifdef _HAVE_ADOLC_
++	#ifdef _HAVE_ADOLC_
+ 	if(VerboseMProcessor()) _printf0_("   starting autodiff parameters \n");
+ 	CreateParametersAutodiff(parameters,iomodel);
+ 	if(VerboseMProcessor()) _printf0_("   ending autodiff parameters \n");
+Index: ../trunk-jpl/src/m/classes/amr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.m	(revision 21801)
++++ ../trunk-jpl/src/m/classes/amr.m	(revision 21802)
+@@ -49,7 +49,7 @@
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+-			scale = md.constants.yts;
++			WriteData(fid,prefix,'name','md.amr.type','data',2,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double');
+Index: ../trunk-jpl/src/m/classes/trans.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/trans.js	(revision 21801)
++++ ../trunk-jpl/src/m/classes/trans.js	(revision 21802)
+@@ -8,18 +8,18 @@
+ 	this.setdefaultparameters = function(){// {{{
+ 
+ 		//full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+-		this.issmb           = 1;
+-		this.ismasstransport = 1;
+-		this.isstressbalance = 1;
+-		this.isthermal       = 1;
+-		this.isgroundingline = 0;
+-		this.isgia           = 0;
++		this.issmb             = 1;
++		this.ismasstransport   = 1;
++		this.isstressbalance   = 1;
++		this.isthermal         = 1;
++		this.isgroundingline   = 0;
++		this.isgia             = 0;
+ 		this.isdamageevolution = 0;
+-		this.ismovingfront   = 0;
+-		this.ishydrology     = 0;
+-		this.isslr           = 0;
+-		this.iscoupler       = 0;
+-		this.amr_frequency   = 1;
++		this.ismovingfront     = 0;
++		this.ishydrology       = 0;
++		this.isslr             = 0;
++		this.iscoupler         = 0;
++		this.amr_frequency     = 0;
+ 
+ 		//default output
+ 		this.requested_outputs=['default'];
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 21801)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 21802)
+@@ -83,20 +83,20 @@
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+-		self.issmb = True
+-		self.ismasstransport = True
+-		self.isstressbalance = True
+-		self.isthermal       = True
+-		self.isgroundingline = False
+-		self.isgia           = False
+-		self.isesa           = False
++		self.issmb             = True
++		self.ismasstransport   = True
++		self.isstressbalance   = True
++		self.isthermal         = True
++		self.isgroundingline   = False
++		self.isgia             = False
++		self.isesa             = False
+ 		self.isdamageevolution = False
+-		self.ismovingfront   = False
+-		self.ishydrology     = False
+-		self.isslr           = False
+-		self.isoceancoupling = False
+-		self.iscoupler       = False
+-		self.amr_frequency	= 1
++		self.ismovingfront     = False
++		self.ishydrology       = False
++		self.isslr             = False
++		self.isoceancoupling   = False
++		self.iscoupler         = False
++		self.amr_frequency     = 0
+ 
+ 		#default output
+ 		self.requested_outputs=['default']
+Index: ../trunk-jpl/src/m/classes/amrbamg.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrbamg.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/amrbamg.m	(revision 21802)
+@@ -0,0 +1,57 @@
++%AMRBAMG Class definition
++%
++%   Usage:
++%      amrbamg=amrbamg();
++
++classdef amrbamg
++	properties (SetAccess=public) 
++		hmin = 0.; 
++		hmax = 0.;
++		fieldname = '';
++		err = 0.;
++	end
++	methods
++		function self = amrbamg(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%hmin and hmax
++			self.hmin=100.;
++			self.hmax=100.e3;
++
++			%fields
++			self.fieldname ='Vel';
++			self.err=3.;
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
++			md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			%md = checkfield(md,'fieldname','amr.fieldname','string',[1]);
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   amrbamg parameters:'));
++
++			fielddisplay(self,'hmin',['minimum element length']);
++			fielddisplay(self,'hmax',['maximum element length']);
++			fielddisplay(self,'fieldname',['name of input that will be used to compute the metric (should be an input of FemModel)']);
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmin','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmax','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','fieldname','format','String');
++			WriteData(fid,prefix,'object',self,'class','err','fieldname','err','format','Double');
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 21801)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 21802)
+@@ -67,7 +67,7 @@
+ 			self.isslr           = 0;
+ 			self.isoceancoupling = 0;
+ 			self.iscoupler       = 0;
+-			self.amr_frequency	= 1;
++			self.amr_frequency	= 0;
+ 
+ 			%default output
+ 			self.requested_outputs={'default'};
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21802)
+@@ -110,7 +110,6 @@
+ 					if(smb_model==SMBd18opddEnum) ResetBoundaryConditions(femmodel,ThermalAnalysisEnum);
+ 				}
+ 			}
+-			if(VerboseSolution()) _printf0_("   computing thermal regime\n");
+ 			thermal_core(femmodel);
+ 		}
+ 
+@@ -181,12 +180,18 @@
+ 		}
+ 
+ 		/*Adaptive mesh refinement*/
+-		#ifdef _HAVE_NEOPZ_
+ 		if(amr_frequency){
+ 			if(save_results) femmodel->WriteMeshInResults();
+-			if(step%amr_frequency==0 && time<finaltime) femmodel->ReMesh();//Do not refine the last step
++			if(step%amr_frequency==0 && time<finaltime){
++				if(VerboseSolution()) _printf0_("   refining mesh\n");
++				femmodel->ReMesh();//Do not refine the last step
++			}
++			//if(save_results){
++			//	printf("-------------- file: transient_core.cpp line: %i\n",__LINE__); 
++			//	femmodel->WriteMeshInResults();
++			//	OutputResultsx(femmodel);
++			//}
+ 		}
+-		#endif
+ 	}
+ 	
+ 	femmodel->RequestedDependentsx();
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21801)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21802)
+@@ -22,6 +22,9 @@
+ #ifdef _HAVE_NEOPZ_
+ #include "./AdaptiveMeshRefinement.h"
+ #endif
++#ifdef _HAVE_BAMG_
++#include "./AmrBamg.h"
++#endif
+ /*}}}*/
+ 
+ class FemModel {
+@@ -46,10 +49,15 @@
+ 		Results     *results;              //results that cannot be fit into the elements 
+ 		Vertices    *vertices;             //one set of vertices
+ 
++		//FIXME: do we want only one class and have virtual functions? or keep 2 classes, at least rename AdaptiveMeshRefinement -> AmrNeopz
+ 		#ifdef _HAVE_NEOPZ_
+ 		AdaptiveMeshRefinement *amr;		  //adaptive mesh refinement object. It keeps coarse mesh and execute refinement process
+ 		#endif
+ 
++		#ifdef _HAVE_BAMG_
++		AmrBamg *amrbamg; //adaptive mesh refinement object. It keeps coarse mesh and execute refinement process
++		#endif
++
+ 		/*constructors, destructors: */
+ 		FemModel(int argc,char** argv,ISSM_MPI_Comm comm_init,bool trace=false);
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* toolkitsfilename, char* lockfilename, char* restartfilename, ISSM_MPI_Comm incomm, int solution_type,IssmPDouble* X);
+@@ -60,9 +68,11 @@
+ 		void CleanUp(void);
+ 		FemModel* copy();
+ 		void Echo();
++		int  GetElementsWidth(){return 3;};//just tria elements in this first version
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, char* restartfilename, const int solution_type,bool trace,IssmPDouble* X=NULL);
+ 		void InitFromFids(char* rootpath, FILE* IOMODEL, FILE* toolkitsoptionsfid, int in_solution_type, bool trace, IssmPDouble* X=NULL);
+ 		void Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction);
++		void ReMesh(void);
+ 		void Restart(void);
+ 		void SetCurrentConfiguration(int configuration_type);
+ 		void SetCurrentConfiguration(int configuration_type,int analysis_type);
+@@ -145,15 +155,10 @@
+ 		void InitFromBuffers(char* buffer, int buffersize, char* toolkits, int solution_type,bool trace,IssmPDouble* X=NULL);
+ 		#endif
+ 
+-		#ifdef _HAVE_NEOPZ_
+-		/*Adaptive mesh refinement methods*/
+-		void InitializeAdaptiveRefinement(void);
+-		void ReMesh(void);
++		/*AMR*/
+ 		void BedrockFromMismipPlus(void);
+ 		void AdjustBaseThicknessAndMask(void);
+ 		void GetMesh(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist);
+-		int GetElementsWidth(){return 3;};//just tria elements in this first version
+-		void ExecuteRefinement(int &numberofvertices,int &numberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
+ 		void GetGroundediceLevelSet(IssmDouble** pmasklevelset);
+ 		void CreateVertices(int newnumberofvertices,int newnumberofelements,int elementswidth,int* newelementslist,int* my_vertices,IssmDouble* newx,IssmDouble* newy,IssmDouble* newz,Vertices* vertices);
+ 		void CreateElements(int newnumberofelements,int elementswidth,int* newelementslist,bool* my_elements,Elements* elements);
+@@ -167,8 +172,17 @@
+ 		void SetRefPatterns(void);
+ 		void SmoothedDeviatoricStressTensor(IssmDouble** ptauxx,IssmDouble** ptauyy,IssmDouble** ptauxy); //nodal values, just for SSA-P1: TauXX, TauYY, TauXY
+ 		void ZZErrorEstimator(IssmDouble** pelementerror);
++
++		#ifdef _HAVE_BAMG_
++		void ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
++		void InitializeAdaptiveRefinementBamg(void);
+ 		#endif
++
++		#ifdef _HAVE_NEOPZ_
++		/*Adaptive mesh refinement methods*/
++		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
++		void InitializeAdaptiveRefinementNeopz(void);
++		#endif
+ };
+-		
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21802)
+@@ -0,0 +1,131 @@
++/*!\file AmrBamg.cpp
++ * \brief: implementation of the adaptive mesh refinement tool based on bamg
++ */
++
++#ifdef HAVE_CONFIG_H
++    #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./AmrBamg.h"
++#include "../bamg/bamgobjects.h"
++#include "../modules/Bamgx/Bamgx.h"
++
++using namespace bamg;
++using namespace std;
++
++/*Constructor, copy, clean up and destructor*/
++AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax){/*{{{*/
++
++	this->geometry     = NULL;
++	this->fathermesh   = NULL;
++	this->previousmesh = NULL;
++
++	/*Only initialize options for now (same as bamg.m)*/
++	this->options = new BamgOpts();
++	this->options->anisomax          = 10.e30;
++	this->options->cutoff            = 10.e-5;
++	this->options->coeff             = 1;
++	this->options->errg              = 0.1;
++	this->options->gradation         = 1.5;
++	this->options->Hessiantype       = 0;
++	this->options->MaxCornerAngle    = 10;
++	this->options->maxnbv            = 1e6;
++	this->options->maxsubdiv         = 10;
++	this->options->Metrictype        = 0;
++	this->options->nbjacobi          = 1;
++	this->options->nbsmooth          = 3;
++	this->options->omega             = 1.8;
++	this->options->power             = 1;
++	this->options->random            = 0;
++	this->options->verbose           = 0;
++	this->options->Crack             = 0;
++	this->options->geometricalmetric = 0;
++	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!!*/
++	this->options->splitcorners      = 1;
++	this->options->hmin              = hmin;
++	this->options->hmax              = hmax;
++}
++/*}}}*/
++AmrBamg::~AmrBamg(){/*{{{*/
++
++	if(this->geometry) delete this->geometry;
++	if(this->fathermesh) delete this->fathermesh;
++	if(this->previousmesh) delete this->previousmesh;
++	if(this->options) delete this->options;
++
++}
++/*}}}*/
++
++/*Methods*/
++void AmrBamg::Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements){/*{{{*/
++
++	/*Check options*/
++	_assert_(this->options);
++	this->options->Check();
++
++	/*Read father mesh and create geometry*/
++	Mesh* Th=new Mesh(elements,x,y,numberofvertices,numberofelements);
++
++	/*Write geometry*/
++	this->geometry = new BamgGeom();
++	Th->Gh.WriteGeometry(this->geometry,this->options);
++
++	/*Write father mesh*/
++	this->fathermesh = new BamgMesh();
++	Th->WriteMesh(this->fathermesh,this->options);
++
++	/*Cleanup and return*/
++	delete Th;
++}/*}}}*/
++void AmrBamg::ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
++
++	/*Intermediaries*/
++	BamgGeom* geomout=new BamgGeom();
++	BamgMesh* meshout=new BamgMesh();
++
++	/*Some checks*/
++	_assert_(this->geometry);
++	_assert_(this->options);
++	_assert_(this->fathermesh);
++
++	/*remesh*/
++	if(this->previousmesh){
++		Bamgx(meshout,geomout,this->previousmesh,this->geometry,this->options);
++	}
++	else{
++		Bamgx(meshout,geomout,this->fathermesh,this->geometry,this->options);
++	}
++
++	/*Change previous mesh*/
++	if(this->previousmesh) delete this->previousmesh;
++	this->previousmesh = meshout;
++
++	/*Prepare output*/
++	int nbv = meshout->VerticesSize[0];
++	int nbt = meshout->TrianglesSize[0];
++	IssmDouble *x = xNew<IssmDouble>(nbv);
++	IssmDouble *y = xNew<IssmDouble>(nbv);
++	IssmDouble *z = xNew<IssmDouble>(nbv);
++	for(int i=0;i<nbv;i++){
++		x[i] = meshout->Vertices[i*2+0];
++		y[i] = meshout->Vertices[i*2+1];
++		z[i] = 0.;
++	}
++	int* elementslist= xNew<int>(nbt*3);
++	for(int i=0;i<nbt;i++){
++		elementslist[3*i+0] = reCast<int>(meshout->Triangles[4*i+0]);
++		elementslist[3*i+1] = reCast<int>(meshout->Triangles[4*i+1]);
++		elementslist[3*i+2] = reCast<int>(meshout->Triangles[4*i+2]);
++	}
++
++	/*Cleanup and return*/
++	delete geomout;
++	*pnewnumberofvertices = nbv;
++	*pnewnumberofelements = nbt;
++	*px = x;
++	*py = y;
++	*pz = z;
++	*pelementslist = elementslist;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21802)
+@@ -44,7 +44,7 @@
+ FemModel::FemModel(int argc,char** argv,ISSM_MPI_Comm incomm,bool trace){/*{{{*/
+ 
+ 	/*configuration: */
+-	int  solution_type;
++	int  solution_type,amrtype,amr_frequency;
+ 	int  ierr;
+ 
+ 	/*File names*/
+@@ -79,10 +79,24 @@
+ 	/*Save communicator in the parameters dataset: */
+ 	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
+ 
+-	#ifdef _HAVE_NEOPZ_
+-	this->InitializeAdaptiveRefinement();
+-	#endif
++   /*AMR stuff*/
++	this->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
++	if(amr_frequency){
++		this->parameters->FindParam(&amrtype,AmrTypeEnum);
++		switch(amrtype){
+ 
++			#ifdef _HAVE_NEOPZ_
++			case AmrNeopzEnum: this->InitializeAdaptiveRefinementNeopz(); break;
++			#endif
++
++			#ifdef _HAVE_BAMG_
++			case AmrBamgEnum: this->InitializeAdaptiveRefinementBamg(); break;
++			#endif
++
++			default: _error_("not implemented yet");
++		}
++	}
++
+ 	/*Free resources */
+ 	xDelete<char>(lockfilename);
+ 	xDelete<char>(binfilename);
+@@ -141,6 +155,10 @@
+ 	if(amr)delete amr;
+ 	#endif
+ 
++	#ifdef _HAVE_BAMG_
++	if(amrbamg)delete amrbamg;
++	#endif
++
+ 	/*Now delete: */
+ 	if(profiler)delete profiler;
+ 	
+@@ -1501,6 +1519,150 @@
+ 	xDelete<int>(control_type);
+ }
+ /*}}}*/
++void FemModel::ReMesh(void){/*{{{*/
++
++	/*Intermediaries*/
++	IssmDouble *newx			= NULL;
++	IssmDouble *newy			= NULL;
++	IssmDouble *newz			= NULL;
++	int *newelementslist		= NULL;
++	int newnumberofvertices	= -1;
++	int newnumberofelements = -1;
++	bool* my_elements			= NULL; 
++	int* my_vertices			= NULL;
++	int elementswidth       = this->GetElementsWidth();//just tria elements in this version
++	int amrtype;
++
++	/*Branch to specific amr depending on requested method*/	
++	parameters->FindParam(&amrtype,AmrTypeEnum);
++	switch(amrtype){
++		#ifdef _HAVE_NEOPZ_
++		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
++		#endif
++
++		#ifdef _HAVE_BAMG_
++		case AmrBamgEnum: this->ReMeshBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
++		#endif
++
++		default: _error_("not implemented yet");
++	}
++
++	/*Partitioning the new mesh. Maybe ElementsAndVerticesPartitioning.cpp could be modified to set this without iomodel.*/
++	this->ElementsAndVerticesPartitioning(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,&my_elements,&my_vertices);
++
++	if(this->loads->Size()!=0) _error_("not supported yet");
++
++	/*Create vertices*/
++	Vertices* new_vertices=new Vertices();
++	this->CreateVertices(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,my_vertices,newx,newy,newz,new_vertices);
++
++	/*Creating elements*/
++	/*Just Tria in this version*/
++	Elements* new_elements=new Elements();
++	this->CreateElements(newnumberofelements,elementswidth,newelementslist,my_elements,new_elements);
++
++	/*Creating materials*/
++	Materials* new_materials=new Materials();
++	this->CreateMaterials(newnumberofelements,my_elements,new_materials);
++
++	/*Creating nodes and constraints*/
++	/*Just SSA (2D) and P1 in this version*/
++	Nodes* new_nodes=new Nodes();
++	Constraints* new_constraints=new Constraints();
++
++	int nodecounter=0;
++	int constraintcounter=0;
++	for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
++
++		int analysis_enum = this->analysis_type_list[i];
++
++		/*As the domain is 2D, it is not necessary to create nodes for this analysis*/
++		/*itapopo must verify if domain is not 3D. Only 2D in this version!*/
++		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;	    
++
++		this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes);
++		if(analysis_enum==StressbalanceAnalysisEnum) this->CreateConstraints(newnumberofvertices,newnumberofelements,nodecounter,constraintcounter,newx,newy,my_vertices,new_constraints);
++		this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
++
++		if(new_nodes->Size()) nodecounter=new_nodes->MaximumId();
++		constraintcounter = new_constraints->NumberOfConstraints();
++		/*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
++		_assert_(nodecounter>=0);
++	}
++
++	new_elements->Presort();
++	new_nodes->Presort();
++	new_vertices->Presort();
++	this->loads->Presort();
++	new_materials->Presort();
++	new_constraints->Presort();
++
++	/*reset hooks for elements, loads and nodes: */
++	new_elements->ResetHooks();
++	this->loads->ResetHooks();
++	new_materials->ResetHooks();
++
++	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
++	int analysis_type;
++	for(int i=0;i<this->nummodels;i++){
++		analysis_type=this->analysis_type_list[i];
++		//SetCurrentConfiguration(analysis_type);
++
++		this->analysis_counter=i;	
++		/*Now, plug analysis_counter and analysis_type inside the parameters: */
++		this->parameters->SetParam(this->analysis_counter,AnalysisCounterEnum);
++		this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
++		this->parameters->SetParam(analysis_type,ConfigurationTypeEnum);
++
++		/*configure elements, loads and nodes, for this new analysis: */
++		new_elements->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++		this->loads->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++
++		/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
++		if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
++			ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
++			if(VerboseSolver()) _printf0_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
++		}
++
++		ConfigureObjectsx(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++		if(i==0){ 
++			VerticesDofx(new_vertices,this->parameters); //only call once, we only have one set of vertices
++		}
++		SpcNodesx(new_nodes,new_constraints,this->parameters,analysis_type);
++		NodesDofx(new_nodes,this->parameters,analysis_type);
++	}
++
++	/*Finally: interpolate all inputs and insert them into the new elements.*/
++	this->InterpolateInputs(new_vertices,new_elements);
++
++	/*Delete old structure and set new pointers*/
++	delete this->vertices;		this->vertices		= new_vertices;
++	delete this->elements;		this->elements		= new_elements;
++	delete this->nodes;			this->nodes			= new_nodes;
++	delete this->constraints;	this->constraints	= new_constraints;
++	delete this->materials;		this->materials	= new_materials;
++
++	GetMaskOfIceVerticesLSMx(this);
++
++	/*Insert MISMIP+ bed topography*/
++	if(false) this->BedrockFromMismipPlus();
++
++	/*Adjust base, thickness and mask grounded ice leve set*/
++	if(true) this->AdjustBaseThicknessAndMask();
++
++	/*Reset current configuration: */
++	analysis_type=this->analysis_type_list[this->analysis_counter];
++	SetCurrentConfiguration(analysis_type);
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(newx);
++	xDelete<IssmDouble>(newy);
++	xDelete<IssmDouble>(newz);
++	xDelete<int>(newelementslist);
++	xDelete<int>(my_vertices);
++	xDelete<bool>(my_elements);
++}
++/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+@@ -2233,949 +2395,8 @@
+ 	return 1;
+ }
+ /*}}}*/
+-#ifdef  _HAVE_DAKOTA_
+-void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+ 
+-	int        i,j;
+-	int        my_rank;
+-
+-	/*intermediary: */
+-	char   root[50];
+-	int    index;
+-	int    npart;
+-	double femmodel_response;
+-	int    flag;
+-	double *vertex_response   = NULL;
+-	double *qmu_response      = NULL;
+-	double *responses_pointer = NULL;
+-
+-	/*retrieve npart: */
+-	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+-	my_rank=IssmComm::GetRank();
+-
+-	/*save the d_responses pointer: */
+-	responses_pointer=d_responses;
+-
+-	//watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled. 
+-	//because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
+-
+-	for(i=0;i<numresponsedescriptors;i++){
+-
+-		flag=DescriptorIndex(root,&index,responses_descriptors[i]);
+-
+-		if(flag==ScaledEnum){
+-
+-			/*this response was scaled. pick up the response from the inputs: */
+-			GetVectorFromInputsx(&vertex_response,this, StringToEnumx(root),VertexPIdEnum);
+-
+-			/*Now, average it onto the partition nodes: */
+-			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
+-
+-			/*Copy onto our dakota responses: */
+-			if(my_rank==0){
+-				/*plug response: */
+-				for(j=0;j<npart;j++)responses_pointer[j]=qmu_response[j];
+-
+-				/*increment response_pointer :*/
+-				responses_pointer+=npart;
+-			}
+-
+-			/*Free ressources:*/
+-			xDelete<double>(vertex_response);
+-			xDelete<double>(qmu_response);
+-
+-		}
+-		else if (flag==IndexedEnum){
+-
+-			/*indexed response: plug index into parameters and call response module: */
+-			parameters->SetParam(index,IndexEnum);
+-
+-			this->Responsex(&femmodel_response,root);
+-
+-			if(my_rank==0){
+-				/*plug response: */
+-				responses_pointer[0]=femmodel_response;
+-
+-				/*increment response_pointer :*/
+-				responses_pointer++;
+-			}
+-		}
+-		else if (flag==NodalEnum){
+-			_error_("nodal response functions not supported yet!");
+-
+-			/*increment response_pointer :*/
+-			responses_pointer++;
+-		}
+-		else if (flag==RegularEnum){
+-
+-			/*perfectly normal response function: */
+-			this->Responsex(&femmodel_response,root);
+-
+-			if(my_rank==0){
+-				/*plug response: */
+-				responses_pointer[0]=femmodel_response;
+-
+-				/*increment response_pointer :*/
+-				responses_pointer++;
+-			}
+-		}
+-		else _error_("flag type " << flag << " not supported yet for response analysis");
+-	}
+-
+-	/*Synthesize echo: {{{*/
+-	if(my_rank==0){
+-		_printf_("   responses: " << d_numresponses << ": ");
+-		for(i=0;i<d_numresponses-1;i++)_printf_(d_responses[i] << "|");
+-		_printf_(d_responses[d_numresponses-1]);
+-		_printf_("\n");
+-	}
+-	/*}}}*/
+-
+-}
+-/*}}}*/
+-#endif
+-#ifdef _HAVE_GIAIVINS_
+-void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
+-
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		element->GiaDeflection(wg,dwgdt, x,y);
+-	}
+-}
+-/*}}}*/
+-#endif
+-#ifdef _HAVE_ESA_
+-void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy){/*{{{*/
+-
+-	int         ns,nsmax;
+-	
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	ns = elements->Size();
+-	
+-	/*Figure out max of ns: */
+-	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*Call the esa geodetic core: */
+-	for(int i=0;i<nsmax;i++){
+-		if(i<ns){
+-			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->EsaGeodetic2D(pUp,pNorth,pEast,xx,yy);
+-		}
+-		if(i%100==0){
+-			pUp->Assemble();
+-			pNorth->Assemble();
+-			pEast->Assemble();
+-		}
+-	}
+-	
+-	/*One last time: */
+-	pUp->Assemble();
+-	pNorth->Assemble();
+-	pEast->Assemble();
+-
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(xx);
+-	xDelete<IssmDouble>(yy);
+-}
+-/*}}}*/
+-void FemModel::EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/
+-
+-	IssmDouble  eartharea=0;
+-	IssmDouble  eartharea_cpu=0;
+-
+-	int         ns,nsmax;
+-	
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	ns = elements->Size();
+-	
+-	/*First, figure out the surface area of Earth: */ 
+-	for(int i=0;i<ns;i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		eartharea_cpu += element->GetAreaSpherical();
+-	}
+-	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	/*Figure out max of ns: */
+-	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*Call the esa geodetic core: */
+-	for(int i=0;i<nsmax;i++){
+-		if(i<ns){
+-			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->EsaGeodetic3D(pUp,pNorth,pEast,latitude,longitude,radius,xx,yy,zz,eartharea);
+-		}
+-		if(i%100==0){
+-			pUp->Assemble();
+-			pNorth->Assemble();
+-			pEast->Assemble();
+-		}
+-	}
+-	
+-	/*One last time: */
+-	pUp->Assemble();
+-	pNorth->Assemble();
+-	pEast->Assemble();
+-
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(latitude);
+-	xDelete<IssmDouble>(longitude);
+-	xDelete<IssmDouble>(radius);
+-	xDelete<IssmDouble>(xx);
+-	xDelete<IssmDouble>(yy);
+-	xDelete<IssmDouble>(zz);
+-}
+-/*}}}*/
+-#endif
+-#ifdef _HAVE_SEALEVELRISE_
+-void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* peustatic, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius) { /*{{{*/
+-
+-	/*serialized vectors:*/
+-	IssmDouble  eustatic       = 0.;
+-	IssmDouble  eustatic_cpu   = 0.;
+-	IssmDouble  eustatic_cpu_e = 0.;
+-	IssmDouble  oceanarea      = 0.;
+-	IssmDouble  oceanarea_cpu  = 0.;
+-	IssmDouble  eartharea      = 0.;
+-	IssmDouble  eartharea_cpu  = 0.;
+-	int         ns,nsmax;
+-	
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	ns = elements->Size();
+-
+-	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
+-	for(int i=0;i<ns;i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		oceanarea_cpu += element->OceanArea();
+-		eartharea_cpu += element->GetAreaSpherical();
+-	}
+-	ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	_assert_(oceanarea>0.);
+-
+-	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	/*Figure out max of ns: */
+-	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*Call the sea level rise core: */
+-	for(int i=0;i<nsmax;i++){
+-		if(i<ns){
+-		
+-			if(VerboseConvergence())if(i%100==0)_printf0_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%  ");
+-		
+-			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->SealevelriseEustatic(pSgi,&eustatic_cpu_e,latitude,longitude,radius,oceanarea,eartharea);
+-			eustatic_cpu+=eustatic_cpu_e;
+-		}
+-		if(i%100==0)pSgi->Assemble();
+-	}
+-	if(VerboseConvergence())_printf0_("\n");
+-		
+-	/*One last time: */
+-	pSgi->Assemble();
+-
+-	/*Sum all eustatic components from all cpus:*/
+-	ISSM_MPI_Reduce (&eustatic_cpu,&eustatic,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eustatic,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	_assert_(!xIsNan<IssmDouble>(eustatic));
+-
+-	/*Assign output pointers:*/
+-	*peustatic=eustatic;
+-
+-}
+-/*}}}*/
+-void FemModel::SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, bool verboseconvolution){/*{{{*/
+-
+-	/*serialized vectors:*/
+-	IssmDouble* Sg_old=NULL;
+-	
+-	IssmDouble  eartharea=0;
+-	IssmDouble  eartharea_cpu=0;
+-
+-	int         ns,nsmax;
+-	
+-	/*Serialize vectors from previous iteration:*/
+-	Sg_old=pSg_old->ToMPISerial();
+-
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	ns = elements->Size();
+-
+-	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
+-	for(int i=0;i<ns;i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		eartharea_cpu += element->GetAreaSpherical();
+-	}
+-	
+-	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	/*Figure out max of ns: */
+-	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*Call the sea level rise core: */
+-	for(int i=0;i<nsmax;i++){
+-		if(i<ns){
+-			if(verboseconvolution)if(VerboseConvergence())if(i%100==0)_printf_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%   ");
+-			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->SealevelriseNonEustatic(pSgo,Sg_old,latitude,longitude,radius,eartharea);
+-		}
+-		if(i%100==0)pSgo->Assemble();
+-	}
+-	if(verboseconvolution)if(VerboseConvergence())_printf_("\n");
+-	
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(Sg_old);
+-}
+-/*}}}*/
+-void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/
+-
+-	/*serialized vectors:*/
+-	IssmDouble* Sg_old=NULL;
+-	IssmDouble  eartharea=0;
+-	IssmDouble  eartharea_cpu=0;
+-	IssmDouble	tide_love_h, tide_love_k, fluid_love, moi_e, moi_p, omega, g;
+-	IssmDouble	load_love_k2 = -0.30922675; //degree 2 load Love number 
+-	IssmDouble	m1, m2, m3; 
+-	IssmDouble	lati, longi, radi, value; 
+-
+-	/*Serialize vectors from previous iteration:*/
+-	Sg_old=pSg_old->ToMPISerial();
+-
+-	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		eartharea_cpu += element->GetAreaSpherical();
+-	}
+-	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	IssmDouble moi_list[3]={0,0,0}; 
+-	IssmDouble moi_list_cpu[3]={0,0,0}; 
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		element->SealevelriseMomentOfInertia(&moi_list[0],Sg_old,eartharea);
+-		moi_list_cpu[0] += moi_list[0]; 
+-		moi_list_cpu[1] += moi_list[1]; 
+-		moi_list_cpu[2] += moi_list[2]; 
+-	}
+-	ISSM_MPI_Reduce (&moi_list_cpu[0],&moi_list[0],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&moi_list[0],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	// 	
+-	ISSM_MPI_Reduce (&moi_list_cpu[1],&moi_list[1],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&moi_list[1],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	// 	
+-	ISSM_MPI_Reduce (&moi_list_cpu[2],&moi_list[2],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&moi_list[2],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	
+-	/*pull out some useful parameters: */
+-	parameters->FindParam(&tide_love_h,SealevelriseTidalLoveHEnum);
+-	parameters->FindParam(&tide_love_k,SealevelriseTidalLoveKEnum);
+-	parameters->FindParam(&fluid_love,SealevelriseFluidLoveEnum);
+-	parameters->FindParam(&moi_e,SealevelriseEquatorialMoiEnum);
+-	parameters->FindParam(&moi_p,SealevelrisePolarMoiEnum);
+-	parameters->FindParam(&omega,SealevelriseAngularVelocityEnum);
+-
+-	/*compute perturbation terms for angular velocity vector: */
+-	m1 = 1/(1-tide_love_k/fluid_love) * (1+load_love_k2)/(moi_p-moi_e) * moi_list[0]; 
+-	m2 = 1/(1-tide_love_k/fluid_love) * (1+load_love_k2)/(moi_p-moi_e) * moi_list[1]; 
+-	m3 = -(1+load_love_k2)/moi_p * moi_list[2];	// term associated with fluid number (3-order-of-magnitude smaller) is negelected  
+-
+-	/* Green's function (1+k_2-h_2/g): checked against Glenn Milne's thesis Chapter 3 (eqs: 3.3-4, 3.10-11)
+-	 * Perturbation terms for angular velocity vector (m1, m2, m3): checked against Mitrovica (2005 Appendix) & Jensen et al (2013 Appendix A3) 
+-	 * Sea level rotational feedback: checked against GMD eqs 8-9 (only first order terms, i.e., degree 2 order 0 & 1 considered) 
+-	 * all DONE in Geographic coordinates: theta \in [-90,90], lambda \in [-180 180] 
+-	 */
+-	for(int i=0;i<vertices->Size();i++){
+-		int sid;
+-		//Vertex* vertex=(Vertex*)vertices->GetObjectByOffset(i);
+-		Vertex* vertex=xDynamicCast<Vertex*>(vertices->GetObjectByOffset(i));
+-		sid=vertex->Sid();
+-
+-		lati=latitude[sid]/180*PI;	longi=longitude[sid]/180*PI; radi=radius[sid];
+-
+-		/*only first order terms are considered now: */ 
+-		value=((1.0+tide_love_k-tide_love_h)/9.81)*pow(omega*radi,2.0)*
+-						(-m3/6.0 + 0.5*m3*cos(2.0*lati) - 0.5*sin(2.*lati)*(m1*cos(longi)+m2*sin(longi))); 
+-	
+-		pSgo_rot->SetValue(sid,value,INS_VAL); //INS_VAL ensures that you don't add several times
+-	}
+-
+-	/*Assemble mesh velocity*/
+-	pSgo_rot->Assemble();
+-	
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(Sg_old);
+-	
+-}
+-/*}}}*/
+-void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/
+-
+-	/*serialized vectors:*/
+-	IssmDouble* Sg=NULL;
+-	
+-	IssmDouble  eartharea=0;
+-	IssmDouble  eartharea_cpu=0;
+-
+-	int         ns,nsmax;
+-	
+-	/*Serialize vectors from previous iteration:*/
+-	Sg=pSg->ToMPISerial();
+-
+-	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	ns = elements->Size();
+-	
+-	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
+-	for(int i=0;i<ns;i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		eartharea_cpu += element->GetAreaSpherical();
+-	}
+-	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	/*Figure out max of ns: */
+-	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*Call the sea level rise core: */
+-	for(int i=0;i<nsmax;i++){
+-		if(i<ns){
+-			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea);
+-		}
+-		if(i%100==0){
+-			pUp->Assemble();
+-			pNorth->Assemble();
+-			pEast->Assemble();
+-		}
+-	}
+-	
+-	/*One last time: */
+-	pUp->Assemble();
+-	pNorth->Assemble();
+-	pEast->Assemble();
+-
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(Sg);
+-	xDelete<IssmDouble>(latitude);
+-	xDelete<IssmDouble>(longitude);
+-	xDelete<IssmDouble>(radius);
+-	xDelete<IssmDouble>(xx);
+-	xDelete<IssmDouble>(yy);
+-	xDelete<IssmDouble>(zz);
+-}
+-/*}}}*/
+-IssmDouble FemModel::SealevelriseOceanAverage(Vector<IssmDouble>* Sg) { /*{{{*/
+-
+-	IssmDouble* Sg_serial=NULL;
+-	IssmDouble  oceanvalue,oceanvalue_cpu;
+-	IssmDouble  oceanarea,oceanarea_cpu;
+-
+-	/*Serialize vectors from previous iteration:*/
+-	Sg_serial=Sg->ToMPISerial();
+-
+-	/*Initialize:*/
+-	oceanvalue_cpu=0;
+-	oceanarea_cpu=0;
+-
+-	/*Go through elements, and add contribution from each element and divide by overall ocean area:*/
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		oceanarea_cpu += element->OceanArea();
+-		oceanvalue_cpu += element->OceanAverage(Sg_serial);
+-	}
+-	ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	
+-	ISSM_MPI_Reduce (&oceanvalue_cpu,&oceanvalue,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&oceanvalue,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(Sg_serial);
+-	
+-	return oceanvalue/oceanarea;
+-}
+-/*}}}*/
+-#endif
+-void FemModel::HydrologyEPLupdateDomainx(IssmDouble* pEplcount){ /*{{{*/
+-
+-	Vector<IssmDouble>* mask							= NULL;
+-	Vector<IssmDouble>* recurence  				= NULL;
+-	Vector<IssmDouble>* active						= NULL;
+-	IssmDouble*         serial_mask				= NULL;
+-	IssmDouble*         serial_rec  			= NULL;
+-	IssmDouble*         serial_active			= NULL;
+-	IssmDouble*         old_active        = NULL;
+-	int*                eplzigzag_counter =	NULL;
+-	int                 eplflip_lock;
+-	
+-	HydrologyDCEfficientAnalysis* effanalysis =  new HydrologyDCEfficientAnalysis();
+-	HydrologyDCInefficientAnalysis* inefanalysis =  new HydrologyDCInefficientAnalysis();
+-
+-	/*Step 1: update mask, the mask might be extended by residual and/or using downstream sediment head*/
+-	mask=new Vector<IssmDouble>(this->nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
+-	recurence=new Vector<IssmDouble>(this->nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
+-	this->parameters->FindParam(&eplzigzag_counter,NULL,EplZigZagCounterEnum); 
+-	this->parameters->FindParam(&eplflip_lock,HydrologydcEplflipLockEnum); 
+-	GetVectorFromInputsx(&old_active,this,HydrologydcMaskEplactiveNodeEnum,NodeSIdEnum);
+-	
+-	for (int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		effanalysis->HydrologyEPLGetMask(mask,recurence,eplzigzag_counter,element);
+-	}
+-	/*check for changes and increment zigzag counter, change the mask if necessary*/
+-	recurence->Assemble();
+-	serial_rec=recurence->ToMPISerial();
+-	for (int i=0;i<nodes->Size();i++){
+-		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
+-		if(serial_rec[node->Sid()]==1.)eplzigzag_counter[node->Lid()] ++;
+-		if(eplzigzag_counter[node->Lid()]>eplflip_lock & eplflip_lock!=0){
+-			mask->SetValue(node->Sid(),old_active[node->Sid()],INS_VAL);
+-		}
+-	}
+-	this->parameters->SetParam(eplzigzag_counter,this->nodes->Size(),EplZigZagCounterEnum);
+-	/*Assemble and serialize*/
+-	mask->Assemble();
+-	serial_mask=mask->ToMPISerial();	
+-	
+-	xDelete<int>(eplzigzag_counter);
+-	xDelete<IssmDouble>(serial_rec);
+-	xDelete<IssmDouble>(old_active);
+-	delete mask;
+-	delete recurence;
+-
+-	/*Update Mask*/
+-	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskEplactiveNodeEnum,NodeSIdEnum);
+-	xDelete<IssmDouble>(serial_mask);
+-	inefanalysis->ElementizeEplMask(this);
+-	/*Step 2: update node activity. If one element is connected to mask=1, all nodes are active*/
+-	active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
+-	for (int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		effanalysis->HydrologyEPLGetActive(active,element);
+-	}
+-
+-	/*Assemble and serialize*/
+-	active->Assemble();
+-	serial_active=active->ToMPISerial();
+-	delete active;
+-
+-	/*Update node activation accordingly*/
+-	int counter =0;
+-	for (int i=0;i<nodes->Size();i++){
+-		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
+-		if(node->InAnalysis(HydrologyDCEfficientAnalysisEnum)){
+-			if(serial_active[node->Sid()]==1.){
+-				node->Activate();
+-				if(!node->IsClone()) counter++;
+-			}
+-			else{
+-				node->Deactivate();
+-			}
+-		}
+-	}
+-	xDelete<IssmDouble>(serial_active);
+-	delete effanalysis;
+-	delete inefanalysis;
+-	int sum_counter;
+-	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_counter,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	counter=sum_counter;
+-	*pEplcount = counter;
+-	if(VerboseSolution()) _printf0_("   Number of active nodes in EPL layer: "<< counter <<"\n");
+-
+-	/*Update dof indexings*/
+-	this->UpdateConstraintsx();
+-
+-}
+-/*}}}*/
+-void FemModel::UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count){ /*{{{*/
+-
+-	Vector<IssmDouble>* active        = NULL;
+-	IssmDouble*         serial_active = NULL;
+-	HydrologyDCEfficientAnalysis* effanalysis = new HydrologyDCEfficientAnalysis();
+-
+-	/*update node activity. If one element is connected to mask=1, all nodes are active*/
+-	active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
+-	for (int i=0;i<elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-		effanalysis->HydrologyEPLGetActive(active,element);
+-	}
+-
+-	/*Assemble and serialize*/
+-	active->Assemble();
+-	serial_active=active->ToMPISerial();
+-	delete active;
+-	delete effanalysis;
+-
+-	/*Update node activation accordingly*/
+-	int counter =0;
+-	for (int i=0;i<nodes->Size();i++){
+-		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
+-		if(node->InAnalysis(L2ProjectionEPLAnalysisEnum)){
+-			if(serial_active[node->Sid()]==1.){
+-				node->Activate();
+-				if(!node->IsClone()) counter++;
+-			}
+-			else{
+-				node->Deactivate();
+-			}
+-		}
+-	}
+-	xDelete<IssmDouble>(serial_active);
+-	int sum_counter;
+-	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_counter,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	counter=sum_counter;
+-	*pL2count = counter;
+-	if(VerboseSolution()) _printf0_("   Number of active nodes L2 Projection: "<< counter <<"\n");
+-}
+-/*}}}*/
+-#ifdef _HAVE_JAVASCRIPT_ 
+-FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
+-	/*configuration: */
+-	int  solution_type;
+-	int  ierr;
+-
+-	/*First things first, store the communicator, and set it as a global variable: */
+-	IssmComm::SetComm(incomm);
+-
+-	/*Start profiler: */
+-	this->profiler=new Profiler();
+-	profiler->Tag(START);
+-
+-	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
+-	solution_type=StringToEnumx(solution);
+-	
+-	/*Create femmodel from input files: */
+-	profiler->Tag(STARTINIT);
+-	this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
+-	profiler->Tag(FINISHINIT);
+-	
+-	/*Save communicator in the parameters dataset: */
+-	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
+-
+-}
+-/*}}}*/
+-void FemModel::CleanUpJs(char** poutput, size_t* psize){/*{{{*/
+-
+-	/*Intermediary*/
+-	FILE *output_fid;
+-	GenericParam<char**>* outputbufferparam=NULL;
+-	GenericParam<size_t*>* outputbuffersizeparam=NULL;
+-	char** poutputbuffer;
+-	size_t* poutputbuffersize;
+-
+-	
+-	/*Before we delete the profiler, report statistics for this run: */
+-	profiler->Tag(FINISH);  //final tagging
+-	_printf0_("\n");
+-	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
+-	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
+-	_printf0_("\n");
+-	_printf0_("   Total elapsed time: "
+-				<<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
+-				<<profiler->DeltaTimeModMin(START,FINISH)<<" min "
+-				<<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
+-				);
+-	_printf0_("\n");
+-	
+-	/*Before we close the output file, recover the buffer and size:*/
+-	outputbufferparam = xDynamicCast<GenericParam<char**>*>(this->parameters->FindParamObject(OutputBufferPointerEnum));
+-	poutputbuffer=outputbufferparam->GetParameterValue();
+-	outputbuffersizeparam = xDynamicCast<GenericParam<size_t*>*>(this->parameters->FindParamObject(OutputBufferSizePointerEnum));
+-	poutputbuffersize=outputbuffersizeparam->GetParameterValue();
+-
+-	/*Assign output values: */
+-	*poutput=*poutputbuffer;
+-	*psize=*poutputbuffersize;
+-}
+-/*}}}*/
+-void FemModel::InitFromBuffers(char* buffer, int buffersize, char* toolkits, int in_solution_type, bool trace, IssmPDouble* X){/*{{{*/
+-
+-	/*intermediary*/
+-	FILE       *IOMODEL = NULL;
+-	FILE       *toolkitsoptionsfid = NULL;
+-	FILE       *output_fid = NULL;
+-	int         my_rank;
+-	size_t      outputsize;
+-	char       *outputbuffer;
+-	const char *rootpath = "";   //needed for Dakota runs only, which we won't do here.
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	/*Open input file descriptor on cpu 0: */
+-	if(my_rank==0) IOMODEL = fmemopen((void*)buffer, buffersize, "rb");
+-
+-	/*Open toolkits file descriptor: */
+-	toolkitsoptionsfid=fmemopen((void*)toolkits, strlen(toolkits)+1, "r");
+-
+-	/*Now, go create FemModel:*/
+-	this->InitFromFids((char*)rootpath,IOMODEL,toolkitsoptionsfid,in_solution_type,trace,X);
+-
+-	/*Close input file and toolkits file descriptors: */
+-	if(my_rank==0) fclose(IOMODEL);
+-	fclose(toolkitsoptionsfid);
+-
+-	/*Open output file once for all and add output file descriptor to parameters*/
+-	output_fid=open_memstream(&outputbuffer,&outputsize); 
+-	if(output_fid==NULL)_error_("could not initialize output stream");
+-	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
+-	this->parameters->AddObject(new GenericParam<char**>(&outputbuffer,OutputBufferPointerEnum));
+-	this->parameters->AddObject(new GenericParam<size_t*>(&outputsize,OutputBufferSizePointerEnum));
+-
+-}/*}}}*/
+-#endif
+-
+-#ifdef _HAVE_NEOPZ_
+-void FemModel::InitializeAdaptiveRefinement(void){/*{{{*/
+-	
+-	/*Define variables*/
+-	int my_rank						= IssmComm::GetRank();
+-	this->amr						= NULL;//initialize amr as NULL
+-	int numberofvertices			= this->vertices->NumberOfVertices();
+-	int numberofelements			= this->elements->NumberOfElements();
+-	int numberofsegments			= 0; //used on matlab
+-	IssmDouble* x					= NULL;
+-	IssmDouble* y					= NULL;
+-	IssmDouble* z					= NULL;
+-	int* elements					= NULL;
+-	int elementswidth				= this->GetElementsWidth(); //just tria elements in this version. Itapopo:
+-	int levelmax					= 0;
+-	IssmDouble regionlevel1		= 0.;
+-	IssmDouble regionlevelmax	= 0.;
+-
+-	/*Get vertices coordinates of the coarse mesh (father mesh)*/
+-	/*elements comes in Matlab indexing*/
+-	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
+-	
+-	/*Get amr parameters*/
+-	this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
+-	this->parameters->FindParam(&regionlevel1,AmrRegionLevel1Enum);
+-	this->parameters->FindParam(&regionlevelmax,AmrRegionLevelMaxEnum);
+-
+-	/*Create initial mesh (coarse mesh) in neopz data structure*/ 
+-	/*Just CPU #0 should keep AMR object*/
+-   this->SetRefPatterns();
+-	if(my_rank==0){ 
+-	   bool ismisomip	= false;
+-		if(ismisomip){//itapopo
+-			TPZFileStream fstr;
+-			std::stringstream ss;
+-			int frictionlaw;
+-			
+-			this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
+-		
+-			ss	<< levelmax;
+-			if(frictionlaw==1){
+-				ss << "_viscous/amr.txt";
+-			}else if(frictionlaw==7){
+-				ss << "_tsai/amr.txt";
+-			}else{
+-				_error_("friction law not supported here.");
+-			}
+-			
+-			std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
+-			fstr.OpenRead(AMRfile.c_str());
+-			
+-			TPZSaveable *sv		= TPZSaveable::Restore(fstr,0);
+-			this->amr				= dynamic_cast<AdaptiveMeshRefinement*>(sv);
+-		}
+-		else{
+-			this->amr = new AdaptiveMeshRefinement();
+-			//this->amr->SetLevelMax(levelmax); //Set max level of refinement
+-			//this->amr->SetRegions(regionlevel1,regionlevelmax);
+-			this->amr->CreateInitialMesh(numberofvertices,numberofelements,numberofsegments,elementswidth,x,y,z,elements,NULL);
+-		}
+-		this->amr->SetLevelMax(levelmax); //Set max level of refinement
+-		this->amr->SetRegions(regionlevel1,regionlevelmax);
+-	}
+-
+-	/*Free the vectors*/
+-	xDelete<IssmDouble>(x);
+-	xDelete<IssmDouble>(y);
+-	xDelete<IssmDouble>(z);
+-	xDelete<int>(elements);
+-
+-}
+-/*}}}*/
+-void FemModel::SetRefPatterns(){/*{{{*/
+-
+-   /*Initialize the global variable of refinement patterns*/
+-   gRefDBase.InitializeUniformRefPattern(EOned);
+-   gRefDBase.InitializeUniformRefPattern(ETriangle);
+-
+-    //gRefDBase.InitializeRefPatterns();
+-   /*Insert specifics patterns to ISSM core*/
+-   std::string filepath  = REFPATTERNDIR;
+-   std::string filename1 = filepath + "/2D_Triang_Rib_3.rpt";
+-   std::string filename2 = filepath + "/2D_Triang_Rib_4.rpt";
+-   std::string filename3 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4.rpt";
+-   std::string filename4 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4_permuted.rpt";
+-   std::string filename5 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5.rpt";
+-   std::string filename6 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5_permuted.rpt";
+-   std::string filename7 = filepath + "/2D_Triang_Rib_5.rpt";
+-
+-   TPZAutoPointer<TPZRefPattern> refpat1 = new TPZRefPattern(filename1);
+-   TPZAutoPointer<TPZRefPattern> refpat2 = new TPZRefPattern(filename2);
+-   TPZAutoPointer<TPZRefPattern> refpat3 = new TPZRefPattern(filename3);
+-   TPZAutoPointer<TPZRefPattern> refpat4 = new TPZRefPattern(filename4);
+-   TPZAutoPointer<TPZRefPattern> refpat5 = new TPZRefPattern(filename5);
+-   TPZAutoPointer<TPZRefPattern> refpat6 = new TPZRefPattern(filename6);
+-   TPZAutoPointer<TPZRefPattern> refpat7 = new TPZRefPattern(filename7);
+-
+-   if(!gRefDBase.FindRefPattern(refpat1)) gRefDBase.InsertRefPattern(refpat1);
+-   if(!gRefDBase.FindRefPattern(refpat2)) gRefDBase.InsertRefPattern(refpat2);
+-   if(!gRefDBase.FindRefPattern(refpat3)) gRefDBase.InsertRefPattern(refpat3);
+-   if(!gRefDBase.FindRefPattern(refpat4)) gRefDBase.InsertRefPattern(refpat4);
+-   if(!gRefDBase.FindRefPattern(refpat5)) gRefDBase.InsertRefPattern(refpat5);
+-   if(!gRefDBase.FindRefPattern(refpat6)) gRefDBase.InsertRefPattern(refpat6);
+-   if(!gRefDBase.FindRefPattern(refpat7)) gRefDBase.InsertRefPattern(refpat7);
+-}
+-/*}}}*/
+-void FemModel::ReMesh(void){/*{{{*/
+-
+-	/*Variables*/
+-	IssmDouble *newx			= NULL;
+-	IssmDouble *newy			= NULL;
+-	IssmDouble *newz			= NULL;
+-	int *newelementslist		= NULL;
+-	int newnumberofvertices	= -1;
+-	int newnumberofelements = -1;
+-	bool* my_elements			= NULL; 
+-	int* my_vertices			= NULL;
+-	int elementswidth			= this->GetElementsWidth();//just tria elements in this version
+-
+-	/*Execute refinement and get the new mesh*/
+-	/*newelementslist come in Matlab indexing*/
+-	this->ExecuteRefinement(newnumberofvertices,newnumberofelements,&newx,&newy,&newz,&newelementslist);
+-
+-	/*Partitioning the new mesh. Maybe ElementsAndVerticesPartitioning.cpp could be modified to set this without iomodel.*/
+-	this->ElementsAndVerticesPartitioning(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,&my_elements,&my_vertices);
+-
+-	if(this->loads->Size()!=0) _error_("not supported yet");
+-
+-	/*Create vertices*/
+-	Vertices* new_vertices=new Vertices();
+-	this->CreateVertices(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,my_vertices,newx,newy,newz,new_vertices);
+- 
+-	/*Creating elements*/
+-	/*Just Tria in this version*/
+-	Elements* new_elements=new Elements();
+-	this->CreateElements(newnumberofelements,elementswidth,newelementslist,my_elements,new_elements);
+-
+-	/*Creating materials*/
+-	Materials* new_materials=new Materials();
+-	this->CreateMaterials(newnumberofelements,my_elements,new_materials);
+-	
+-	/*Creating nodes and constraints*/
+-	/*Just SSA (2D) and P1 in this version*/
+-	Nodes* new_nodes=new Nodes();
+-	Constraints* new_constraints=new Constraints();
+-
+-	int nodecounter=0;
+-	int constraintcounter=0;
+-	for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
+-	
+-		int analysis_enum = this->analysis_type_list[i];
+-		
+-		/*As the domain is 2D, it is not necessary to create nodes for this analysis*/
+-		/*itapopo must verify if domain is not 3D. Only 2D in this version!*/
+-		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;	    
+-		
+-		this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes);
+-		if(analysis_enum==StressbalanceAnalysisEnum) this->CreateConstraints(newnumberofvertices,newnumberofelements,nodecounter,constraintcounter,newx,newy,my_vertices,new_constraints);
+-		this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
+-
+-		if(new_nodes->Size()) nodecounter=new_nodes->MaximumId();
+-		constraintcounter = new_constraints->NumberOfConstraints();
+-		/*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
+-		_assert_(nodecounter>=0);
+-	}
+-
+-	new_elements->Presort();
+-	new_nodes->Presort();
+-	new_vertices->Presort();
+-	this->loads->Presort();
+-	new_materials->Presort();
+-	new_constraints->Presort();
+-
+-	/*reset hooks for elements, loads and nodes: */
+-	new_elements->ResetHooks();
+-	this->loads->ResetHooks();
+-	new_materials->ResetHooks();
+-
+-	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
+-	int analysis_type;
+-	for(int i=0;i<this->nummodels;i++){
+-		analysis_type=this->analysis_type_list[i];
+-		//SetCurrentConfiguration(analysis_type);
+-
+-		this->analysis_counter=i;	
+-		/*Now, plug analysis_counter and analysis_type inside the parameters: */
+-		this->parameters->SetParam(this->analysis_counter,AnalysisCounterEnum);
+-		this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
+-		this->parameters->SetParam(analysis_type,ConfigurationTypeEnum);
+-
+-		/*configure elements, loads and nodes, for this new analysis: */
+-		new_elements->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-		this->loads->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-
+-		/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
+-		if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
+-			ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
+-			if(VerboseSolver()) _printf0_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
+-		}
+-		
+-		ConfigureObjectsx(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-		if(i==0){ 
+-			VerticesDofx(new_vertices,this->parameters); //only call once, we only have one set of vertices
+-		}
+-		SpcNodesx(new_nodes,new_constraints,this->parameters,analysis_type);
+-		NodesDofx(new_nodes,this->parameters,analysis_type);
+-	}
+-
+-	/*Finally: interpolate all inputs and insert them into the new elements.*/
+-	this->InterpolateInputs(new_vertices,new_elements);
+-
+-	/*Delete old structure and set new pointers*/
+-	delete this->vertices;		this->vertices		= new_vertices;
+-	delete this->elements;		this->elements		= new_elements;
+-	delete this->nodes;			this->nodes			= new_nodes;
+-	delete this->constraints;	this->constraints	= new_constraints;
+-	delete this->materials;		this->materials	= new_materials;
+-	
+-	GetMaskOfIceVerticesLSMx(this);
+-
+-	/*Insert MISMIP+ bed topography*/
+-	if(false) this->BedrockFromMismipPlus();
+-	
+-	/*Adjust base, thickness and mask grounded ice leve set*/
+-	if(true) this->AdjustBaseThicknessAndMask();
+-
+-	/*Reset current configuration: */
+-	analysis_type=this->analysis_type_list[this->analysis_counter];
+-	SetCurrentConfiguration(analysis_type);
+-
+-	/*Cleanup*/
+-	xDelete<IssmDouble>(newx);
+-	xDelete<IssmDouble>(newy);
+-	xDelete<IssmDouble>(newz);
+-	xDelete<int>(newelementslist);
+-	xDelete<int>(my_vertices);
+-	xDelete<bool>(my_elements);
+-
+-	return;
+-
+-}
+-/*}}}*/
++/*AMR*/
+ void FemModel::BedrockFromMismipPlus(void){/*{{{*/
+ 
+ 	/*Insert bedrock from mismip+ setup*/
+@@ -3244,7 +2465,7 @@
+ 				b[i] = base_float;	
+ 			} 
+ 
+-			if(abs(sl[i])>0) _error_("Sea level value not supported!");
++			if(abs(sl[i])>0) _error_("Sea level value "<<sl[i]<<" not supported!");
+ 			/*update thickness and mask grounded ice level set*/
+ 			h[i]	  = s[i]-b[i];
+ 			phi[i]  = h[i]+r[i]/density;	
+@@ -3254,7 +2475,6 @@
+ 		element->AddInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum);
+ 		element->AddInput(ThicknessEnum,&h[0],P1Enum);
+ 		element->AddInput(BaseEnum,&b[0],P1Enum);
+-
+ 	}
+ 	
+    /*Delete*/
+@@ -3264,72 +2484,8 @@
+    xDelete<IssmDouble>(b);
+    xDelete<IssmDouble>(r);
+    xDelete<IssmDouble>(sl);
+-
+-	return;
+ }
+ /*}}}*/
+-void FemModel::WriteMeshInResults(void){/*{{{*/
+-
+-	int step					= -1;
+-	int numberofelements = -1;
+-	int numberofvertices = -1;
+-	IssmDouble time		= -1;
+-	IssmDouble* x			= NULL;
+-	IssmDouble* y			= NULL;
+-	IssmDouble* z			= NULL;
+-	int* elementslist		= NULL;
+-
+-	if(!this->elements || !this->vertices || !this->results || !this->parameters) return;
+-	 
+-	parameters->FindParam(&step,StepEnum);
+-	parameters->FindParam(&time,TimeEnum);
+-	numberofelements=this->elements->NumberOfElements();
+-	numberofvertices=this->vertices->NumberOfVertices();
+-
+-	/*Get mesh. Elementslist comes in Matlab indexing*/
+-	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
+-
+-	/*Write mesh in Results*/
+-	this->results->AddResult(new GenericExternalResult<int*>(this->results->Size()+1,MeshElementsEnum,
+-																					elementslist,numberofelements,this->GetElementsWidth(),step,time));
+-
+-	this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,MeshXEnum,
+-																					x,numberofvertices,1,step,time));
+-
+-	this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,MeshYEnum,
+-																					y,numberofvertices,1,step,time));
+-	
+-	//itapopo
+-	if(IssmComm::GetRank()==0){
+-		TPZFileStream fstr;
+-		std::stringstream ss;
+-		int frictionlaw,levelmax;
+-		this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
+-		this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
+-		ss << levelmax;
+-		if(frictionlaw==1){
+-			ss << "_viscous/amr.txt";
+-		}else if(frictionlaw==7){
+-			ss << "_tsai/amr.txt";
+-		}else{
+-			_error_("friction law not supported here.");
+-		}
+-		std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
+-		fstr.OpenWrite(AMRfile.c_str());
+-		int withclassid = 1;
+-		this->amr->Write(fstr,withclassid);
+-	}
+-	//itapopo
+-	
+-	/*Cleanup*/
+-	xDelete<IssmDouble>(x);
+-	xDelete<IssmDouble>(y);
+-	xDelete<IssmDouble>(z);
+-	xDelete<int>(elementslist);
+-
+-	return;
+-}
+-/*}}}*/
+ void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements){/*{{{*/
+ 
+ 	int maxinputs = MaximumNumberOfDefinitionsEnum;
+@@ -3341,7 +2497,7 @@
+ 		element->GetInputsInterpolations(input_interpolations);
+ 	}
+ 	input_interpolations->Assemble();
+-	
++
+ 	/*Serialize and set output*/
+ 	IssmDouble* input_interpolations_serial = input_interpolations->ToMPISerial();
+ 	delete input_interpolations;
+@@ -3373,7 +2529,7 @@
+ 						P1input_enums[numP1inputs]  = i;
+ 						P1input_interp[numP1inputs] = inputinterp;
+ 					}
+-					 numP1inputs++;
++					numP1inputs++;
+ 					break;
+ 				case P0Enum:
+ 				case DoubleInputEnum:
+@@ -3420,7 +2576,7 @@
+ 		for(int j=0;j<numverticesold;j++) P1inputsold[j*numP1inputs+i] = vector[j];
+ 		xDelete<IssmDouble>(vector);
+ 	}
+-	
++
+ 	/*Old mesh coordinates*/
+ 	IssmDouble *Xold     = NULL;
+ 	IssmDouble *Yold     = NULL;
+@@ -3432,7 +2588,7 @@
+ 	IssmDouble* XC_new   = NULL;
+ 	IssmDouble* YC_new   = NULL;
+ 	int        *Indexnew = NULL;
+-	
++
+ 	/*Get the old mesh*/
+ 	this->GetMesh(this->vertices,this->elements,&Xold,&Yold,&Zold,&Indexold);
+ 
+@@ -3458,16 +2614,16 @@
+ 	InterpFromMeshToMesh2dx(&P0inputsnew,Indexold,Xold,Yold,numverticesold,numelementsold,
+ 				P0inputsold,numelementsold,numP0inputs,
+ 				XC_new,YC_new,numelementsnew,NULL);
+-	
++
+ 	/*Interpolate P1 inputs in the new mesh*/
+ 	InterpFromMeshToMesh2dx(&P1inputsnew,Indexold,Xold,Yold,numverticesold,numelementsold,
+ 				P1inputsold,numverticesold,numP1inputs,
+ 				Xnew,Ynew,numverticesnew,NULL);
+-	
++
+ 	/*Insert P0 inputs into the new elements.*/
+ 	vector=NULL;
+ 	for(int i=0;i<numP0inputs;i++){
+-		
++
+ 		/*Get P0 input vector from the interpolated matrix*/
+ 		vector=xNew<IssmDouble>(numelementsnew);
+ 		for(int j=0;j<numelementsnew;j++) vector[j]=P0inputsnew[j*numP0inputs+i];//vector has values for all elements (serial)
+@@ -3532,67 +2688,69 @@
+ 	xDelete<IssmDouble>(XC_new);
+ 	xDelete<IssmDouble>(YC_new);
+ 	xDelete<int>(Indexnew);
+-
+ }
+ /*}}}*/
+-void FemModel::ExecuteRefinement(int &numberofvertices,int &numberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
+-	
+-	/*elements is in Matlab indexing*/
+-	int my_rank						= IssmComm::GetRank();
+-	int numberofsegments			= -1;
+-	IssmDouble* vx					= NULL; //itapopo this is not being used
+-	IssmDouble* vy					= NULL; //itapopo this is not being used
+-	IssmDouble* x					= NULL;
+-	IssmDouble* y					= NULL;
+-	IssmDouble* z					= NULL;
+-	int* elementslist				= NULL;
+-	int* segments					= NULL;
+-	IssmDouble* masklevelset	= NULL;
+-	IssmDouble* pelementerror	= NULL;
+-   const int elementswidth		= this->GetElementsWidth();//just 2D mesh, tria elements
+-	
+-	/*Solutions which will be used to refine the elements*/
+-	this->GetGroundediceLevelSet(&masklevelset);//itapopo verificar se já existe um método igual a esse
++void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+-	//Compute the ZZ error estimator per element
+-	this->ZZErrorEstimator(&pelementerror);
+-	
+-	_printf0_("P Element error\n");
+-	for(int i=0;i<this->elements->NumberOfElements();i++)	_printf0_(""<<pelementerror[i]<< "\n");
+-	_printf0_("\n");
++	int step					= -1;
++	int numberofelements = -1;
++	int numberofvertices = -1;
++	IssmDouble time		= -1;
++	IssmDouble* x			= NULL;
++	IssmDouble* y			= NULL;
++	IssmDouble* z			= NULL;
++	int* elementslist		= NULL;
+ 
+-	if(my_rank==0){
+-		int type_process=1; //1: it refines father mesh. See AdaptiveMeshRefinement.h (.cpp)
+-		this->amr->ExecuteRefinement(type_process,vx,vy,masklevelset,
+-												numberofvertices,numberofelements,numberofsegments,&x,&y,&z,&elementslist,&segments);
+-		if(numberofvertices<=0 || numberofelements<=0 /*|| newnumberofsegments<=0*/) _error_("Error in the refinement process.");
+-	}
+-	else{
+-		x=xNew<IssmDouble>(numberofvertices);
+-		y=xNew<IssmDouble>(numberofvertices);
+-		z=xNew<IssmDouble>(numberofvertices);
+-		elementslist=xNew<int>(numberofelements*this->GetElementsWidth());
+-	}
++	if(!this->elements || !this->vertices || !this->results || !this->parameters) return;
++	 
++	parameters->FindParam(&step,StepEnum);
++	parameters->FindParam(&time,TimeEnum);
++	numberofelements=this->elements->NumberOfElements();
++	numberofvertices=this->vertices->NumberOfVertices();
+ 
+-	/*Send new mesh to others CPU*/
+-	ISSM_MPI_Bcast(&numberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&numberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(x,numberofvertices,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(y,numberofvertices,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(z,numberofvertices,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(elementslist,numberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
++	/*Get mesh. Elementslist comes in Matlab indexing*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
+ 
+-	/*Assign the pointers*/	
+-	(*pelementslist) = elementslist; //Matlab indexing
+-	(*px)				  = x;
+-	(*py)				  = y;
+-	(*pz)				  = z;
++	/*Write mesh in Results*/
++	printf("-------------- file: FemModel.cpp line: %i\n",__LINE__); 
++	this->results->AddResult(new GenericExternalResult<int*>(this->results->Size()+1,MeshElementsEnum,
++					elementslist,numberofelements,this->GetElementsWidth(),step,time));
+ 
++	this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,MeshXEnum,
++					x,numberofvertices,1,step,time));
++
++	this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,MeshYEnum,
++					y,numberofvertices,1,step,time));
++	
++	//itapopo
++	#ifdef _HAVE_NEOPZ_
++	if(IssmComm::GetRank()==0){
++		TPZFileStream fstr;
++		std::stringstream ss;
++		int frictionlaw,levelmax;
++		this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
++		this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
++		ss << levelmax;
++		if(frictionlaw==1){
++			ss << "_viscous/amr.txt";
++		}else if(frictionlaw==7){
++			ss << "_tsai/amr.txt";
++		}else{
++			_error_("friction law not supported here.");
++		}
++		std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
++		fstr.OpenWrite(AMRfile.c_str());
++		int withclassid = 1;
++		this->amr->Write(fstr,withclassid);
++	}
++	#endif
++	//itapopo
++	
+ 	/*Cleanup*/
+-	if(segments) xDelete<int>(segments);
+-	xDelete<IssmDouble>(masklevelset);
+-	xDelete<IssmDouble>(pelementerror);
+-
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++	xDelete<int>(elementslist);
+ }
+ /*}}}*/
+ void FemModel::GetGroundediceLevelSet(IssmDouble **pmasklevelset){/*{{{*/
+@@ -3634,8 +2792,8 @@
+ 	int* connectivity=NULL;
+ 	connectivity=xNewZeroInit<int>(newnumberofvertices);
+ 
+-	for (int i=0;i<newnumberofelements;i++){
+-		for (int j=0;j<elementswidth;j++){
++	for(int i=0;i<newnumberofelements;i++){
++		for(int j=0;j<elementswidth;j++){
+ 			int vertexid = newelementslist[elementswidth*i+j];
+ 			_assert_(vertexid>0 && vertexid-1<newnumberofvertices);//Matlab indexing
+ 			connectivity[vertexid-1]+=1;//Matlab to C indexing
+@@ -3721,7 +2879,6 @@
+ 	Matpar *newmatpar=static_cast<Matpar*>(this->materials->GetObjectByOffset(this->materials->Size()-1)->copy());
+ 	newmatpar->SetMid(newnumberofelements+1);
+ 	materials->AddObject(newmatpar);//put it at the end of the materials	    
+-
+ }
+ /*}}}*/
+ void FemModel::CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes){/*{{{*/
+@@ -3953,7 +3110,6 @@
+ 	delete vspcvy;	
+ 	delete vspcvxflag;
+ 	delete vspcvyflag;
+-
+ }
+ /*}}}*/
+ void FemModel::UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements){/*{{{*/
+@@ -4052,7 +3208,6 @@
+ 	xDelete<int>(epart);
+ 	xDelete<int>(npart);	    
+ 	xDelete<int>(index);
+-
+ }
+ /*}}}*/
+ void FemModel::SmoothedDeviatoricStressTensor(IssmDouble** ptauxx,IssmDouble** ptauyy,IssmDouble** ptauxy){/*{{{*/
+@@ -4140,7 +3295,6 @@
+    xDelete<IssmDouble>(deviatoricstressxy);
+    xDelete<IssmDouble>(totalweight);
+    xDelete<int>(elem_vertices);
+-
+ }
+ /*}}}*/
+ void FemModel::ZZErrorEstimator(IssmDouble** pelementerror){/*{{{*/
+@@ -4214,7 +3368,965 @@
+ 	xDelete<IssmDouble>(basis);
+ 	xDelete<int>(elem_vertices);
+ 	delete velementerror;
++}
++/*}}}*/
+ 
++#ifdef  _HAVE_DAKOTA_
++void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
++
++	int        i,j;
++	int        my_rank;
++
++	/*intermediary: */
++	char   root[50];
++	int    index;
++	int    npart;
++	double femmodel_response;
++	int    flag;
++	double *vertex_response   = NULL;
++	double *qmu_response      = NULL;
++	double *responses_pointer = NULL;
++
++	/*retrieve npart: */
++	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
++	my_rank=IssmComm::GetRank();
++
++	/*save the d_responses pointer: */
++	responses_pointer=d_responses;
++
++	//watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled. 
++	//because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
++
++	for(i=0;i<numresponsedescriptors;i++){
++
++		flag=DescriptorIndex(root,&index,responses_descriptors[i]);
++
++		if(flag==ScaledEnum){
++
++			/*this response was scaled. pick up the response from the inputs: */
++			GetVectorFromInputsx(&vertex_response,this, StringToEnumx(root),VertexPIdEnum);
++
++			/*Now, average it onto the partition nodes: */
++			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
++
++			/*Copy onto our dakota responses: */
++			if(my_rank==0){
++				/*plug response: */
++				for(j=0;j<npart;j++)responses_pointer[j]=qmu_response[j];
++
++				/*increment response_pointer :*/
++				responses_pointer+=npart;
++			}
++
++			/*Free ressources:*/
++			xDelete<double>(vertex_response);
++			xDelete<double>(qmu_response);
++
++		}
++		else if (flag==IndexedEnum){
++
++			/*indexed response: plug index into parameters and call response module: */
++			parameters->SetParam(index,IndexEnum);
++
++			this->Responsex(&femmodel_response,root);
++
++			if(my_rank==0){
++				/*plug response: */
++				responses_pointer[0]=femmodel_response;
++
++				/*increment response_pointer :*/
++				responses_pointer++;
++			}
++		}
++		else if (flag==NodalEnum){
++			_error_("nodal response functions not supported yet!");
++
++			/*increment response_pointer :*/
++			responses_pointer++;
++		}
++		else if (flag==RegularEnum){
++
++			/*perfectly normal response function: */
++			this->Responsex(&femmodel_response,root);
++
++			if(my_rank==0){
++				/*plug response: */
++				responses_pointer[0]=femmodel_response;
++
++				/*increment response_pointer :*/
++				responses_pointer++;
++			}
++		}
++		else _error_("flag type " << flag << " not supported yet for response analysis");
++	}
++
++	/*Synthesize echo: {{{*/
++	if(my_rank==0){
++		_printf_("   responses: " << d_numresponses << ": ");
++		for(i=0;i<d_numresponses-1;i++)_printf_(d_responses[i] << "|");
++		_printf_(d_responses[d_numresponses-1]);
++		_printf_("\n");
++	}
++	/*}}}*/
++
+ }
+ /*}}}*/
+ #endif
++#ifdef _HAVE_GIAIVINS_
++void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
++
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		element->GiaDeflection(wg,dwgdt, x,y);
++	}
++}
++/*}}}*/
++#endif
++#ifdef _HAVE_ESA_
++void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy){/*{{{*/
++
++	int         ns,nsmax;
++	
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	ns = elements->Size();
++	
++	/*Figure out max of ns: */
++	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/*Call the esa geodetic core: */
++	for(int i=0;i<nsmax;i++){
++		if(i<ns){
++			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++			element->EsaGeodetic2D(pUp,pNorth,pEast,xx,yy);
++		}
++		if(i%100==0){
++			pUp->Assemble();
++			pNorth->Assemble();
++			pEast->Assemble();
++		}
++	}
++	
++	/*One last time: */
++	pUp->Assemble();
++	pNorth->Assemble();
++	pEast->Assemble();
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(xx);
++	xDelete<IssmDouble>(yy);
++}
++/*}}}*/
++void FemModel::EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/
++
++	IssmDouble  eartharea=0;
++	IssmDouble  eartharea_cpu=0;
++
++	int         ns,nsmax;
++	
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	ns = elements->Size();
++	
++	/*First, figure out the surface area of Earth: */ 
++	for(int i=0;i<ns;i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		eartharea_cpu += element->GetAreaSpherical();
++	}
++	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Figure out max of ns: */
++	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/*Call the esa geodetic core: */
++	for(int i=0;i<nsmax;i++){
++		if(i<ns){
++			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++			element->EsaGeodetic3D(pUp,pNorth,pEast,latitude,longitude,radius,xx,yy,zz,eartharea);
++		}
++		if(i%100==0){
++			pUp->Assemble();
++			pNorth->Assemble();
++			pEast->Assemble();
++		}
++	}
++	
++	/*One last time: */
++	pUp->Assemble();
++	pNorth->Assemble();
++	pEast->Assemble();
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(latitude);
++	xDelete<IssmDouble>(longitude);
++	xDelete<IssmDouble>(radius);
++	xDelete<IssmDouble>(xx);
++	xDelete<IssmDouble>(yy);
++	xDelete<IssmDouble>(zz);
++}
++/*}}}*/
++#endif
++#ifdef _HAVE_SEALEVELRISE_
++void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* peustatic, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius) { /*{{{*/
++
++	/*serialized vectors:*/
++	IssmDouble  eustatic       = 0.;
++	IssmDouble  eustatic_cpu   = 0.;
++	IssmDouble  eustatic_cpu_e = 0.;
++	IssmDouble  oceanarea      = 0.;
++	IssmDouble  oceanarea_cpu  = 0.;
++	IssmDouble  eartharea      = 0.;
++	IssmDouble  eartharea_cpu  = 0.;
++	int         ns,nsmax;
++	
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	ns = elements->Size();
++
++	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
++	for(int i=0;i<ns;i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		oceanarea_cpu += element->OceanArea();
++		eartharea_cpu += element->GetAreaSpherical();
++	}
++	ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	_assert_(oceanarea>0.);
++
++	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Figure out max of ns: */
++	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/*Call the sea level rise core: */
++	for(int i=0;i<nsmax;i++){
++		if(i<ns){
++		
++			if(VerboseConvergence())if(i%100==0)_printf0_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%  ");
++		
++			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++			element->SealevelriseEustatic(pSgi,&eustatic_cpu_e,latitude,longitude,radius,oceanarea,eartharea);
++			eustatic_cpu+=eustatic_cpu_e;
++		}
++		if(i%100==0)pSgi->Assemble();
++	}
++	if(VerboseConvergence())_printf0_("\n");
++		
++	/*One last time: */
++	pSgi->Assemble();
++
++	/*Sum all eustatic components from all cpus:*/
++	ISSM_MPI_Reduce (&eustatic_cpu,&eustatic,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eustatic,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	_assert_(!xIsNan<IssmDouble>(eustatic));
++
++	/*Assign output pointers:*/
++	*peustatic=eustatic;
++
++}
++/*}}}*/
++void FemModel::SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, bool verboseconvolution){/*{{{*/
++
++	/*serialized vectors:*/
++	IssmDouble* Sg_old=NULL;
++	
++	IssmDouble  eartharea=0;
++	IssmDouble  eartharea_cpu=0;
++
++	int         ns,nsmax;
++	
++	/*Serialize vectors from previous iteration:*/
++	Sg_old=pSg_old->ToMPISerial();
++
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	ns = elements->Size();
++
++	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
++	for(int i=0;i<ns;i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		eartharea_cpu += element->GetAreaSpherical();
++	}
++	
++	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Figure out max of ns: */
++	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/*Call the sea level rise core: */
++	for(int i=0;i<nsmax;i++){
++		if(i<ns){
++			if(verboseconvolution)if(VerboseConvergence())if(i%100==0)_printf_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%   ");
++			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++			element->SealevelriseNonEustatic(pSgo,Sg_old,latitude,longitude,radius,eartharea);
++		}
++		if(i%100==0)pSgo->Assemble();
++	}
++	if(verboseconvolution)if(VerboseConvergence())_printf_("\n");
++	
++	/*Free ressources:*/
++	xDelete<IssmDouble>(Sg_old);
++}
++/*}}}*/
++void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/
++
++	/*serialized vectors:*/
++	IssmDouble* Sg_old=NULL;
++	IssmDouble  eartharea=0;
++	IssmDouble  eartharea_cpu=0;
++	IssmDouble	tide_love_h, tide_love_k, fluid_love, moi_e, moi_p, omega, g;
++	IssmDouble	load_love_k2 = -0.30922675; //degree 2 load Love number 
++	IssmDouble	m1, m2, m3; 
++	IssmDouble	lati, longi, radi, value; 
++
++	/*Serialize vectors from previous iteration:*/
++	Sg_old=pSg_old->ToMPISerial();
++
++	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		eartharea_cpu += element->GetAreaSpherical();
++	}
++	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	IssmDouble moi_list[3]={0,0,0}; 
++	IssmDouble moi_list_cpu[3]={0,0,0}; 
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		element->SealevelriseMomentOfInertia(&moi_list[0],Sg_old,eartharea);
++		moi_list_cpu[0] += moi_list[0]; 
++		moi_list_cpu[1] += moi_list[1]; 
++		moi_list_cpu[2] += moi_list[2]; 
++	}
++	ISSM_MPI_Reduce (&moi_list_cpu[0],&moi_list[0],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&moi_list[0],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	// 	
++	ISSM_MPI_Reduce (&moi_list_cpu[1],&moi_list[1],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&moi_list[1],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	// 	
++	ISSM_MPI_Reduce (&moi_list_cpu[2],&moi_list[2],1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&moi_list[2],1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	
++	/*pull out some useful parameters: */
++	parameters->FindParam(&tide_love_h,SealevelriseTidalLoveHEnum);
++	parameters->FindParam(&tide_love_k,SealevelriseTidalLoveKEnum);
++	parameters->FindParam(&fluid_love,SealevelriseFluidLoveEnum);
++	parameters->FindParam(&moi_e,SealevelriseEquatorialMoiEnum);
++	parameters->FindParam(&moi_p,SealevelrisePolarMoiEnum);
++	parameters->FindParam(&omega,SealevelriseAngularVelocityEnum);
++
++	/*compute perturbation terms for angular velocity vector: */
++	m1 = 1/(1-tide_love_k/fluid_love) * (1+load_love_k2)/(moi_p-moi_e) * moi_list[0]; 
++	m2 = 1/(1-tide_love_k/fluid_love) * (1+load_love_k2)/(moi_p-moi_e) * moi_list[1]; 
++	m3 = -(1+load_love_k2)/moi_p * moi_list[2];	// term associated with fluid number (3-order-of-magnitude smaller) is negelected  
++
++	/* Green's function (1+k_2-h_2/g): checked against Glenn Milne's thesis Chapter 3 (eqs: 3.3-4, 3.10-11)
++	 * Perturbation terms for angular velocity vector (m1, m2, m3): checked against Mitrovica (2005 Appendix) & Jensen et al (2013 Appendix A3) 
++	 * Sea level rotational feedback: checked against GMD eqs 8-9 (only first order terms, i.e., degree 2 order 0 & 1 considered) 
++	 * all DONE in Geographic coordinates: theta \in [-90,90], lambda \in [-180 180] 
++	 */
++	for(int i=0;i<vertices->Size();i++){
++		int sid;
++		//Vertex* vertex=(Vertex*)vertices->GetObjectByOffset(i);
++		Vertex* vertex=xDynamicCast<Vertex*>(vertices->GetObjectByOffset(i));
++		sid=vertex->Sid();
++
++		lati=latitude[sid]/180*PI;	longi=longitude[sid]/180*PI; radi=radius[sid];
++
++		/*only first order terms are considered now: */ 
++		value=((1.0+tide_love_k-tide_love_h)/9.81)*pow(omega*radi,2.0)*
++						(-m3/6.0 + 0.5*m3*cos(2.0*lati) - 0.5*sin(2.*lati)*(m1*cos(longi)+m2*sin(longi))); 
++	
++		pSgo_rot->SetValue(sid,value,INS_VAL); //INS_VAL ensures that you don't add several times
++	}
++
++	/*Assemble mesh velocity*/
++	pSgo_rot->Assemble();
++	
++	/*Free ressources:*/
++	xDelete<IssmDouble>(Sg_old);
++	
++}
++/*}}}*/
++void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/
++
++	/*serialized vectors:*/
++	IssmDouble* Sg=NULL;
++	
++	IssmDouble  eartharea=0;
++	IssmDouble  eartharea_cpu=0;
++
++	int         ns,nsmax;
++	
++	/*Serialize vectors from previous iteration:*/
++	Sg=pSg->ToMPISerial();
++
++	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
++	ns = elements->Size();
++	
++	/*First, figure out the area of the ocean, which is needed to compute the eustatic component: */
++	for(int i=0;i<ns;i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		eartharea_cpu += element->GetAreaSpherical();
++	}
++	ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Figure out max of ns: */
++	ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&nsmax,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/*Call the sea level rise core: */
++	for(int i=0;i<nsmax;i++){
++		if(i<ns){
++			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++			element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea);
++		}
++		if(i%100==0){
++			pUp->Assemble();
++			pNorth->Assemble();
++			pEast->Assemble();
++		}
++	}
++	
++	/*One last time: */
++	pUp->Assemble();
++	pNorth->Assemble();
++	pEast->Assemble();
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(Sg);
++	xDelete<IssmDouble>(latitude);
++	xDelete<IssmDouble>(longitude);
++	xDelete<IssmDouble>(radius);
++	xDelete<IssmDouble>(xx);
++	xDelete<IssmDouble>(yy);
++	xDelete<IssmDouble>(zz);
++}
++/*}}}*/
++IssmDouble FemModel::SealevelriseOceanAverage(Vector<IssmDouble>* Sg) { /*{{{*/
++
++	IssmDouble* Sg_serial=NULL;
++	IssmDouble  oceanvalue,oceanvalue_cpu;
++	IssmDouble  oceanarea,oceanarea_cpu;
++
++	/*Serialize vectors from previous iteration:*/
++	Sg_serial=Sg->ToMPISerial();
++
++	/*Initialize:*/
++	oceanvalue_cpu=0;
++	oceanarea_cpu=0;
++
++	/*Go through elements, and add contribution from each element and divide by overall ocean area:*/
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		oceanarea_cpu += element->OceanArea();
++		oceanvalue_cpu += element->OceanAverage(Sg_serial);
++	}
++	ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	
++	ISSM_MPI_Reduce (&oceanvalue_cpu,&oceanvalue,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&oceanvalue,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(Sg_serial);
++	
++	return oceanvalue/oceanarea;
++}
++/*}}}*/
++#endif
++void FemModel::HydrologyEPLupdateDomainx(IssmDouble* pEplcount){ /*{{{*/
++
++	Vector<IssmDouble>* mask							= NULL;
++	Vector<IssmDouble>* recurence  				= NULL;
++	Vector<IssmDouble>* active						= NULL;
++	IssmDouble*         serial_mask				= NULL;
++	IssmDouble*         serial_rec  			= NULL;
++	IssmDouble*         serial_active			= NULL;
++	IssmDouble*         old_active        = NULL;
++	int*                eplzigzag_counter =	NULL;
++	int                 eplflip_lock;
++	
++	HydrologyDCEfficientAnalysis* effanalysis =  new HydrologyDCEfficientAnalysis();
++	HydrologyDCInefficientAnalysis* inefanalysis =  new HydrologyDCInefficientAnalysis();
++
++	/*Step 1: update mask, the mask might be extended by residual and/or using downstream sediment head*/
++	mask=new Vector<IssmDouble>(this->nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
++	recurence=new Vector<IssmDouble>(this->nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
++	this->parameters->FindParam(&eplzigzag_counter,NULL,EplZigZagCounterEnum); 
++	this->parameters->FindParam(&eplflip_lock,HydrologydcEplflipLockEnum); 
++	GetVectorFromInputsx(&old_active,this,HydrologydcMaskEplactiveNodeEnum,NodeSIdEnum);
++	
++	for (int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		effanalysis->HydrologyEPLGetMask(mask,recurence,eplzigzag_counter,element);
++	}
++	/*check for changes and increment zigzag counter, change the mask if necessary*/
++	recurence->Assemble();
++	serial_rec=recurence->ToMPISerial();
++	for (int i=0;i<nodes->Size();i++){
++		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
++		if(serial_rec[node->Sid()]==1.)eplzigzag_counter[node->Lid()] ++;
++		if(eplzigzag_counter[node->Lid()]>eplflip_lock & eplflip_lock!=0){
++			mask->SetValue(node->Sid(),old_active[node->Sid()],INS_VAL);
++		}
++	}
++	this->parameters->SetParam(eplzigzag_counter,this->nodes->Size(),EplZigZagCounterEnum);
++	/*Assemble and serialize*/
++	mask->Assemble();
++	serial_mask=mask->ToMPISerial();	
++	
++	xDelete<int>(eplzigzag_counter);
++	xDelete<IssmDouble>(serial_rec);
++	xDelete<IssmDouble>(old_active);
++	delete mask;
++	delete recurence;
++
++	/*Update Mask*/
++	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskEplactiveNodeEnum,NodeSIdEnum);
++	xDelete<IssmDouble>(serial_mask);
++	inefanalysis->ElementizeEplMask(this);
++	/*Step 2: update node activity. If one element is connected to mask=1, all nodes are active*/
++	active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
++	for (int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		effanalysis->HydrologyEPLGetActive(active,element);
++	}
++
++	/*Assemble and serialize*/
++	active->Assemble();
++	serial_active=active->ToMPISerial();
++	delete active;
++
++	/*Update node activation accordingly*/
++	int counter =0;
++	for (int i=0;i<nodes->Size();i++){
++		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
++		if(node->InAnalysis(HydrologyDCEfficientAnalysisEnum)){
++			if(serial_active[node->Sid()]==1.){
++				node->Activate();
++				if(!node->IsClone()) counter++;
++			}
++			else{
++				node->Deactivate();
++			}
++		}
++	}
++	xDelete<IssmDouble>(serial_active);
++	delete effanalysis;
++	delete inefanalysis;
++	int sum_counter;
++	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_counter,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
++	counter=sum_counter;
++	*pEplcount = counter;
++	if(VerboseSolution()) _printf0_("   Number of active nodes in EPL layer: "<< counter <<"\n");
++
++	/*Update dof indexings*/
++	this->UpdateConstraintsx();
++
++}
++/*}}}*/
++void FemModel::UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count){ /*{{{*/
++
++	Vector<IssmDouble>* active        = NULL;
++	IssmDouble*         serial_active = NULL;
++	HydrologyDCEfficientAnalysis* effanalysis = new HydrologyDCEfficientAnalysis();
++
++	/*update node activity. If one element is connected to mask=1, all nodes are active*/
++	active=new Vector<IssmDouble>(nodes->NumberOfNodes(HydrologyDCEfficientAnalysisEnum));
++	for (int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++		effanalysis->HydrologyEPLGetActive(active,element);
++	}
++
++	/*Assemble and serialize*/
++	active->Assemble();
++	serial_active=active->ToMPISerial();
++	delete active;
++	delete effanalysis;
++
++	/*Update node activation accordingly*/
++	int counter =0;
++	for (int i=0;i<nodes->Size();i++){
++		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
++		if(node->InAnalysis(L2ProjectionEPLAnalysisEnum)){
++			if(serial_active[node->Sid()]==1.){
++				node->Activate();
++				if(!node->IsClone()) counter++;
++			}
++			else{
++				node->Deactivate();
++			}
++		}
++	}
++	xDelete<IssmDouble>(serial_active);
++	int sum_counter;
++	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_counter,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
++	counter=sum_counter;
++	*pL2count = counter;
++	if(VerboseSolution()) _printf0_("   Number of active nodes L2 Projection: "<< counter <<"\n");
++}
++/*}}}*/
++#ifdef _HAVE_JAVASCRIPT_ 
++FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
++	/*configuration: */
++	int  solution_type;
++	int  ierr;
++
++	/*First things first, store the communicator, and set it as a global variable: */
++	IssmComm::SetComm(incomm);
++
++	/*Start profiler: */
++	this->profiler=new Profiler();
++	profiler->Tag(START);
++
++	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
++	solution_type=StringToEnumx(solution);
++	
++	/*Create femmodel from input files: */
++	profiler->Tag(STARTINIT);
++	this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
++	profiler->Tag(FINISHINIT);
++	
++	/*Save communicator in the parameters dataset: */
++	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
++
++}
++/*}}}*/
++void FemModel::CleanUpJs(char** poutput, size_t* psize){/*{{{*/
++
++	/*Intermediary*/
++	FILE *output_fid;
++	GenericParam<char**>* outputbufferparam=NULL;
++	GenericParam<size_t*>* outputbuffersizeparam=NULL;
++	char** poutputbuffer;
++	size_t* poutputbuffersize;
++
++	
++	/*Before we delete the profiler, report statistics for this run: */
++	profiler->Tag(FINISH);  //final tagging
++	_printf0_("\n");
++	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
++	_printf0_("\n");
++	_printf0_("   Total elapsed time: "
++				<<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
++				<<profiler->DeltaTimeModMin(START,FINISH)<<" min "
++				<<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
++				);
++	_printf0_("\n");
++	
++	/*Before we close the output file, recover the buffer and size:*/
++	outputbufferparam = xDynamicCast<GenericParam<char**>*>(this->parameters->FindParamObject(OutputBufferPointerEnum));
++	poutputbuffer=outputbufferparam->GetParameterValue();
++	outputbuffersizeparam = xDynamicCast<GenericParam<size_t*>*>(this->parameters->FindParamObject(OutputBufferSizePointerEnum));
++	poutputbuffersize=outputbuffersizeparam->GetParameterValue();
++
++	/*Assign output values: */
++	*poutput=*poutputbuffer;
++	*psize=*poutputbuffersize;
++}
++/*}}}*/
++void FemModel::InitFromBuffers(char* buffer, int buffersize, char* toolkits, int in_solution_type, bool trace, IssmPDouble* X){/*{{{*/
++
++	/*intermediary*/
++	FILE       *IOMODEL = NULL;
++	FILE       *toolkitsoptionsfid = NULL;
++	FILE       *output_fid = NULL;
++	int         my_rank;
++	size_t      outputsize;
++	char       *outputbuffer;
++	const char *rootpath = "";   //needed for Dakota runs only, which we won't do here.
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Open input file descriptor on cpu 0: */
++	if(my_rank==0) IOMODEL = fmemopen((void*)buffer, buffersize, "rb");
++
++	/*Open toolkits file descriptor: */
++	toolkitsoptionsfid=fmemopen((void*)toolkits, strlen(toolkits)+1, "r");
++
++	/*Now, go create FemModel:*/
++	this->InitFromFids((char*)rootpath,IOMODEL,toolkitsoptionsfid,in_solution_type,trace,X);
++
++	/*Close input file and toolkits file descriptors: */
++	if(my_rank==0) fclose(IOMODEL);
++	fclose(toolkitsoptionsfid);
++
++	/*Open output file once for all and add output file descriptor to parameters*/
++	output_fid=open_memstream(&outputbuffer,&outputsize); 
++	if(output_fid==NULL)_error_("could not initialize output stream");
++	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
++	this->parameters->AddObject(new GenericParam<char**>(&outputbuffer,OutputBufferPointerEnum));
++	this->parameters->AddObject(new GenericParam<size_t*>(&outputsize,OutputBufferSizePointerEnum));
++
++}/*}}}*/
++#endif
++
++#ifdef _HAVE_BAMG_
++void FemModel::ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist){/*{{{*/
++
++	/*Output*/
++	IssmDouble *newx			= NULL;
++	IssmDouble *newy			= NULL;
++	IssmDouble *newz			= NULL;
++	int *newelementslist		= NULL;
++	int newnumberofvertices	= -1;
++	int newnumberofelements = -1;
++
++	/*Get Rank*/
++	int my_rank	= IssmComm::GetRank();
++
++	if(my_rank==0){
++		this->amrbamg->ExecuteRefinementBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
++		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
++	}
++	else{
++		newx=xNew<IssmDouble>(newnumberofvertices);
++		newy=xNew<IssmDouble>(newnumberofvertices);
++		newz=xNew<IssmDouble>(newnumberofvertices);
++		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
++	}
++
++	/*Send new mesh to others CPU*/
++	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
++
++	/*Assign output pointers*/
++	*pnewnumberofvertices = newnumberofvertices;
++	*pnewnumberofelements = newnumberofelements;
++	*pnewx = newx;
++	*pnewy = newy;
++	*pnewz = newz;
++	*pnewelementslist = newelementslist;
++}
++/*}}}*/
++void FemModel::InitializeAdaptiveRefinementBamg(void){/*{{{*/
++
++	/*Define variables*/
++	int numberofvertices      = this->vertices->NumberOfVertices();
++	int numberofelements      = this->elements->NumberOfElements();
++	int numberofsegments      = 0; //used on matlab
++	IssmDouble* x             = NULL;
++	IssmDouble* y             = NULL;
++	IssmDouble* z             = NULL;
++	int* elements             = NULL;
++	int elementswidth         = this->GetElementsWidth(); //just tria elements in this version. Itapopo:
++	IssmDouble hmin,hmax,err;
++	int        fieldenum;
++
++   /*Get rank*/
++	int my_rank = IssmComm::GetRank();
++
++	/*Initialize field as NULL for now*/
++	this->amrbamg = NULL;
++
++	/*Get vertices coordinates of the coarse mesh (father mesh)*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
++
++	/*Get amr parameters*/
++	this->parameters->FindParam(&hmin,AmrHminEnum);
++	this->parameters->FindParam(&hmax,AmrHmaxEnum);
++	this->parameters->FindParam(&fieldenum,AmrFieldEnum);
++	this->parameters->FindParam(&err,AmrErrEnum);
++
++	/*Create bamg data structures for bamg (only cpu 0)*/
++	if(my_rank==0){ 
++		/*Re-create original mesh and put it in bamg structure*/
++		this->amrbamg = new AmrBamg(hmin,hmax);
++		this->amrbamg->Initialize(elements,x,y,numberofvertices,numberofelements);
++	}
++
++	/*Free the vectors*/
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++	xDelete<int>(elements);
++}
++/*}}}*/
++#endif
++
++#ifdef _HAVE_NEOPZ_
++void FemModel::ReMeshNeopz(int* pnumberofvertices,int* pnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
++
++	/*elements is in Matlab indexing*/
++	int my_rank						= IssmComm::GetRank();
++	int numberofsegments			= -1;
++	int numberofvertices,numberofelements;
++	IssmDouble* vx					= NULL; //itapopo this is not being used
++	IssmDouble* vy					= NULL; //itapopo this is not being used
++	IssmDouble* x					= NULL;
++	IssmDouble* y					= NULL;
++	IssmDouble* z					= NULL;
++	int* elementslist				= NULL;
++	int* segments					= NULL;
++	IssmDouble* masklevelset	= NULL;
++	IssmDouble* pelementerror	= NULL;
++	const int elementswidth		= this->GetElementsWidth();//just 2D mesh, tria elements
++
++	/*Solutions which will be used to refine the elements*/
++	this->GetGroundediceLevelSet(&masklevelset);//itapopo verificar se já existe um método igual a esse
++
++	//Compute the ZZ error estimator per element
++	this->ZZErrorEstimator(&pelementerror);
++
++	_printf0_("P Element error\n");
++	for(int i=0;i<this->elements->NumberOfElements();i++)	_printf0_(""<<pelementerror[i]<< "\n");
++	_printf0_("\n");
++
++	if(my_rank==0){
++		int type_process=1; //1: it refines father mesh. See AdaptiveMeshRefinement.h (.cpp)
++		this->amr->ExecuteRefinement(type_process,vx,vy,masklevelset,
++					numberofvertices,numberofelements,numberofsegments,&x,&y,&z,&elementslist,&segments);
++		if(numberofvertices<=0 || numberofelements<=0 /*|| newnumberofsegments<=0*/) _error_("Error in the refinement process.");
++	}
++	else{
++		x=xNew<IssmDouble>(numberofvertices);
++		y=xNew<IssmDouble>(numberofvertices);
++		z=xNew<IssmDouble>(numberofvertices);
++		elementslist=xNew<int>(numberofelements*this->GetElementsWidth());
++	}
++
++	/*Send new mesh to others CPU*/
++	ISSM_MPI_Bcast(&numberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&numberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(x,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(y,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(z,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(elementslist,numberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
++
++	/*Assign the pointers*/	
++	(*pelementslist) = elementslist; //Matlab indexing
++	(*px)				  = x;
++	(*py)				  = y;
++	(*pz)				  = z;
++	*pnumberofelements = numberofelements;
++	*pnumberofvertices = numberofvertices;
++
++	/*Cleanup*/
++	if(segments) xDelete<int>(segments);
++	xDelete<IssmDouble>(masklevelset);
++	xDelete<IssmDouble>(pelementerror);
++
++}
++/*}}}*/
++void FemModel::InitializeAdaptiveRefinementNeopz(void){/*{{{*/
++	
++	/*Define variables*/
++	int my_rank						= IssmComm::GetRank();
++	int numberofvertices			= this->vertices->NumberOfVertices();
++	int numberofelements			= this->elements->NumberOfElements();
++	int numberofsegments			= 0; //used on matlab
++	IssmDouble* x					= NULL;
++	IssmDouble* y					= NULL;
++	IssmDouble* z					= NULL;
++	int* elements					= NULL;
++	int elementswidth				= this->GetElementsWidth(); //just tria elements in this version. Itapopo:
++	int levelmax					= 0;
++	IssmDouble regionlevel1		= 0.;
++	IssmDouble regionlevelmax	= 0.;
++
++	/*Initialize field as NULL for now*/
++	this->amr = NULL;
++
++	/*Get vertices coordinates of the coarse mesh (father mesh)*/
++	/*elements comes in Matlab indexing*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
++	
++	/*Get amr parameters*/
++	this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
++	this->parameters->FindParam(&regionlevel1,AmrRegionLevel1Enum);
++	this->parameters->FindParam(&regionlevelmax,AmrRegionLevelMaxEnum);
++
++	/*Create initial mesh (coarse mesh) in neopz data structure*/ 
++	/*Just CPU #0 should keep AMR object*/
++   this->SetRefPatterns();
++	if(my_rank==0){ 
++	   bool ismisomip	= false;
++		if(ismisomip){//itapopo
++			TPZFileStream fstr;
++			std::stringstream ss;
++			int frictionlaw;
++			
++			this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
++		
++			ss	<< levelmax;
++			if(frictionlaw==1){
++				ss << "_viscous/amr.txt";
++			}else if(frictionlaw==7){
++				ss << "_tsai/amr.txt";
++			}else{
++				_error_("friction law not supported here.");
++			}
++			
++			std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
++			fstr.OpenRead(AMRfile.c_str());
++			
++			TPZSaveable *sv		= TPZSaveable::Restore(fstr,0);
++			this->amr				= dynamic_cast<AdaptiveMeshRefinement*>(sv);
++		}
++		else{
++			this->amr = new AdaptiveMeshRefinement();
++			//this->amr->SetLevelMax(levelmax); //Set max level of refinement
++			//this->amr->SetRegions(regionlevel1,regionlevelmax);
++			this->amr->CreateInitialMesh(numberofvertices,numberofelements,numberofsegments,elementswidth,x,y,z,elements,NULL);
++		}
++		this->amr->SetLevelMax(levelmax); //Set max level of refinement
++		this->amr->SetRegions(regionlevel1,regionlevelmax);
++	}
++
++	/*Free the vectors*/
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++	xDelete<int>(elements);
++}
++/*}}}*/
++void FemModel::SetRefPatterns(){/*{{{*/
++
++   /*Initialize the global variable of refinement patterns*/
++   gRefDBase.InitializeUniformRefPattern(EOned);
++   gRefDBase.InitializeUniformRefPattern(ETriangle);
++
++    //gRefDBase.InitializeRefPatterns();
++   /*Insert specifics patterns to ISSM core*/
++   std::string filepath  = REFPATTERNDIR;
++   std::string filename1 = filepath + "/2D_Triang_Rib_3.rpt";
++   std::string filename2 = filepath + "/2D_Triang_Rib_4.rpt";
++   std::string filename3 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4.rpt";
++   std::string filename4 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4_permuted.rpt";
++   std::string filename5 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5.rpt";
++   std::string filename6 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5_permuted.rpt";
++   std::string filename7 = filepath + "/2D_Triang_Rib_5.rpt";
++
++   TPZAutoPointer<TPZRefPattern> refpat1 = new TPZRefPattern(filename1);
++   TPZAutoPointer<TPZRefPattern> refpat2 = new TPZRefPattern(filename2);
++   TPZAutoPointer<TPZRefPattern> refpat3 = new TPZRefPattern(filename3);
++   TPZAutoPointer<TPZRefPattern> refpat4 = new TPZRefPattern(filename4);
++   TPZAutoPointer<TPZRefPattern> refpat5 = new TPZRefPattern(filename5);
++   TPZAutoPointer<TPZRefPattern> refpat6 = new TPZRefPattern(filename6);
++   TPZAutoPointer<TPZRefPattern> refpat7 = new TPZRefPattern(filename7);
++
++   if(!gRefDBase.FindRefPattern(refpat1)) gRefDBase.InsertRefPattern(refpat1);
++   if(!gRefDBase.FindRefPattern(refpat2)) gRefDBase.InsertRefPattern(refpat2);
++   if(!gRefDBase.FindRefPattern(refpat3)) gRefDBase.InsertRefPattern(refpat3);
++   if(!gRefDBase.FindRefPattern(refpat4)) gRefDBase.InsertRefPattern(refpat4);
++   if(!gRefDBase.FindRefPattern(refpat5)) gRefDBase.InsertRefPattern(refpat5);
++   if(!gRefDBase.FindRefPattern(refpat6)) gRefDBase.InsertRefPattern(refpat6);
++   if(!gRefDBase.FindRefPattern(refpat7)) gRefDBase.InsertRefPattern(refpat7);
++}
++/*}}}*/
++#endif
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21802)
+@@ -0,0 +1,30 @@
++#ifndef AMRBAMG
++#define AMRBAMG
++
++/*Includes*/
++#include "../shared/shared.h"
++#include "../toolkits/toolkits.h"
++
++#include "../bamg/BamgMesh.h"
++#include "../bamg/BamgGeom.h"
++#include "../bamg/BamgOpts.h"
++
++class AmrBamg{
++
++	public:
++		/* Constructor, destructor etc*/
++		AmrBamg(IssmDouble hmin, IssmDouble hmax);
++		~AmrBamg();
++
++		/*General methods*/
++		void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
++		void ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
++
++	private:
++		BamgGeom* geometry;
++		BamgMesh* fathermesh;
++		BamgMesh* previousmesh;
++		BamgOpts* options;
++};
++
++#endif
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21801)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21802)
+@@ -832,10 +832,17 @@
+ 	EsaNumRequestedOutputsEnum,
+ 	/*}}}*/
+ 	/*Adaptive mesh refinement (AMR){{{*/
++	TransientAmrFrequencyEnum,
++	AmrTypeEnum,
++	AmrNeopzEnum,
+ 	AmrLevelMaxEnum,
+ 	AmrRegionLevel1Enum,
+ 	AmrRegionLevelMaxEnum,
+-	TransientAmrFrequencyEnum,
++	AmrBamgEnum,
++	AmrHminEnum,
++	AmrHmaxEnum,
++	AmrFieldEnum,
++	AmrErrEnum,
+ 	/*}}}*/
+ 	ParametersENDEnum,
+ 	/*Coordinate Systems{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21802)
+@@ -808,10 +808,17 @@
+ 		case EsaTransitionsEnum : return "EsaTransitions";
+ 		case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
+ 		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
++		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
++		case AmrTypeEnum : return "AmrType";
++		case AmrNeopzEnum : return "AmrNeopz";
+ 		case AmrLevelMaxEnum : return "AmrLevelMax";
+ 		case AmrRegionLevel1Enum : return "AmrRegionLevel1";
+ 		case AmrRegionLevelMaxEnum : return "AmrRegionLevelMax";
+-		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
++		case AmrBamgEnum : return "AmrBamg";
++		case AmrHminEnum : return "AmrHmin";
++		case AmrHmaxEnum : return "AmrHmax";
++		case AmrFieldEnum : return "AmrField";
++		case AmrErrEnum : return "AmrErr";
+ 		case ParametersENDEnum : return "ParametersEND";
+ 		case XYEnum : return "XY";
+ 		case XYZEnum : return "XYZ";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21801)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21802)
+@@ -826,10 +826,17 @@
+ 	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+ 	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
++	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
++	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
++	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrRegionLevel1")==0) return AmrRegionLevel1Enum;
+ 	      else if (strcmp(name,"AmrRegionLevelMax")==0) return AmrRegionLevelMaxEnum;
+-	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
++	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
++	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
++	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
++	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
++	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+@@ -867,7 +874,10 @@
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+-	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
+@@ -874,10 +884,7 @@
+ 	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+@@ -990,7 +997,10 @@
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+-	      else if (strcmp(name,"P0")==0) return P0Enum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+@@ -997,10 +1007,7 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
++	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+ 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21802-21803.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21802-21803.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21802-21803.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21802)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21803)
+@@ -2712,7 +2712,6 @@
+ 	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
+ 
+ 	/*Write mesh in Results*/
+-	printf("-------------- file: FemModel.cpp line: %i\n",__LINE__); 
+ 	this->results->AddResult(new GenericExternalResult<int*>(this->results->Size()+1,MeshElementsEnum,
+ 					elementslist,numberofelements,this->GetElementsWidth(),step,time));
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21803-21804.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21803-21804.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21803-21804.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21803)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21804)
+@@ -186,11 +186,6 @@
+ 				if(VerboseSolution()) _printf0_("   refining mesh\n");
+ 				femmodel->ReMesh();//Do not refine the last step
+ 			}
+-			//if(save_results){
+-			//	printf("-------------- file: transient_core.cpp line: %i\n",__LINE__); 
+-			//	femmodel->WriteMeshInResults();
+-			//	OutputResultsx(femmodel);
+-			//}
+ 		}
+ 	}
+ 	
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21803)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21804)
+@@ -109,8 +109,8 @@
+ 	IssmDouble *y = xNew<IssmDouble>(nbv);
+ 	IssmDouble *z = xNew<IssmDouble>(nbv);
+ 	for(int i=0;i<nbv;i++){
+-		x[i] = meshout->Vertices[i*2+0];
+-		y[i] = meshout->Vertices[i*2+1];
++		x[i] = meshout->Vertices[i*3+0];
++		y[i] = meshout->Vertices[i*3+1];
+ 		z[i] = 0.;
+ 	}
+ 	int* elementslist= xNew<int>(nbt*3);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21804-21805.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21804-21805.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21804-21805.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/plot/plotmodel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.m	(revision 21804)
++++ ../trunk-jpl/src/m/plot/plotmodel.m	(revision 21805)
+@@ -47,6 +47,8 @@
+ 				set(gcf,'Position',[756    62   827   504]);
+ 			elseif strcmpi(figposition,'mathieu'),
+ 				set(gcf,'Position',[300 1 1580 1150]);
++			elseif strcmpi(figposition,'byron'),
++				set(gcf,'Position',[40 1580 560*1.25 420*1.25]);  %left, bottom, width, height; W=560 H=420 is default
+ 			elseif strcmpi(figposition,'fullscreen'),
+ 				set(gcf,'Position',get(0,'ScreenSize'));
+ 			elseif strcmpi(figposition,'halfright'),
Index: /issm/oecreview/Archive/21724-22754/ISSM-21805-21806.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21805-21806.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21805-21806.diff	(revision 22755)
@@ -0,0 +1,1617 @@
+Index: ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m	(revision 21805)
++++ ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m	(revision 21806)
+@@ -36,7 +36,7 @@
+ 	error('Your Element definition is not taken into account \n');
+ end
+ 
+-%this is the result structure
++%this is the result structure (just the Transient solution)
+ res_struct=model.results;
+ %checking for results
+ if (length(fields(res_struct))>0);
+@@ -50,7 +50,7 @@
+ 		%looking for multiple time steps
+ 		if(size(sol_struct{i},2)>num_of_timesteps);
+ 			num_of_timesteps=size(sol_struct{i},2);
+-      outstep=model.timestepping.time_step*model.settings.output_frequency;
++			outstep=model.timestepping.time_step*model.settings.output_frequency;
+ 	  end
+   end
+ else
+@@ -100,7 +100,7 @@
+ 				timestep = step;
+ 			else
+ 				timestep = size(sol_struct{j},2);
+-	    end
++			end
+ 			
+ 			%getting the number of fields in the solution
+ 			fieldnames=fields(sol_struct{j}(timestep));
+@@ -119,8 +119,23 @@
+ 					fprintf(fid,'LOOKUP_TABLE default\n');
+ 					s='%e\n';
+ 					fprintf(fid,s,sol_struct{j}(timestep).(fieldnames{k}));
+-		    end		
+-	    end 
++				end
++			end
++			fprintf(fid,'CELL_DATA %s \n',num2str(num_of_elt));
++			for k=1:num_of_fields
++				if ((numel(sol_struct{j}(timestep).(fieldnames{k})))==num_of_elt);
++					%paraview does not like NaN, replacing
++					nanval=find(isnan(sol_struct{j}(timestep).(fieldnames{k})));
++					sol_struct{j}(timestep).(fieldnames{k})(nanval)=-9999;
++					%also checking for verry small value that mess up
++					smallval=(abs(sol_struct{j}(timestep).(fieldnames{k}))<1.0e-20);
++					sol_struct{j}(timestep).(fieldnames{k})(smallval)=0.0;
++					fprintf(fid,'SCALARS %s float 1 \n',fieldnames{k});
++					fprintf(fid,'LOOKUP_TABLE default\n');
++					s='%e\n';
++					fprintf(fid,s,sol_struct{j}(timestep).(fieldnames{k}));
++				end		
++			end
+ 	  end
+   end
+ 	%loop on arguments, if something other than result is asked, do
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 21805)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 21806)
+@@ -44,48 +44,47 @@
+ 
+ 	/*Public methods*/
+ 	/* Constructor, destructor etc*/
+-	AdaptiveMeshRefinement();																// Default constructor
+-	AdaptiveMeshRefinement(const AdaptiveMeshRefinement &cp); 					// Copy constructor
+-	AdaptiveMeshRefinement & operator= (const AdaptiveMeshRefinement &cp);	// Operator of copy
+-	virtual ~AdaptiveMeshRefinement();													// Destructor
++	AdaptiveMeshRefinement();															
++	AdaptiveMeshRefinement(const AdaptiveMeshRefinement &cp); 					
++	AdaptiveMeshRefinement & operator= (const AdaptiveMeshRefinement &cp);	
++	virtual ~AdaptiveMeshRefinement();												
+ 
+     /*Savable methods*/
+-	virtual int ClassId() const;                                            // ClassId to save the class
+-   virtual void Read(TPZStream &buf, void *context);								// Read this class
+-   virtual void Write(TPZStream &buf, int withclassid);                    // Write this class, using ClassId to identify
++	virtual int ClassId() const;                                   
++   virtual void Read(TPZStream &buf,void *context);							
++   virtual void Write(TPZStream &buf,int withclassid);
+     
+ 	/*General methods*/
+-	void CleanUp();																			// Clean all attributes
+-	void Initialize();																		// Initialize the attributes with NULL and values out of usually range
+-	void SetLevelMax(int &h);                                               // Define the max level of refinement
+-   void SetRegions(double &D1,double Dhmax);										// Define the regions which will be refined
+-	void SetElementWidth(int &width);                                       // Define elements width
+-	void ExecuteRefinement(int &type_process,double *vx,double *vy,double *masklevelset,int &nvertices,int &nelements,int &nsegments,double** px,double** py,double** pz,int** pelements,int** psegments=NULL);					// A new mesh will be created and refined. This returns the new mesh
+-	void CreateInitialMesh(int &nvertices,int &nelements,int &nsegments,int &width,double* x,double* y,double* z,int* elements,int* segments=NULL); // Create a NeoPZ geometric mesh by coords and elements
++	void CleanUp();
++	void Initialize();
++	void SetLevelMax(int &h);
++   void SetRegions(double &D1,double Dhmax);
++	void SetElementWidth(int &width);
++	void Execute(bool &amr_verbose,int &numberofelements,
++						double* partiallyfloatedelements,double *masklevelset,double* deviatorictensorerror,double* thicknesserror,
++						int &newnumberofvertices,int &newnumberofelements,double** x,double** y,int** elementslist);
++	void CreateInitialMesh(int &nvertices,int &nelements,int &width,double* x,double* y,int* elements);
+ 	TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
+-	void CheckMesh(int &nvertices,int &nelements,int &nsegments,int &width,double** px,double** py,double** pz,int** pelements,int** psegments=NULL); // Check the consistency of the mesh
++	void CheckMesh(int &nvertices,int &nelements,int &width,double** px,double** py,int** pelements);
+ 
+ private:
+-
+ 	/*Private attributes*/
+-   int elementswidth;                                                      // Geometric nodes for element: 3 == Tria, 4 == Tetra, 6 == Penta
+-   int levelmax;                                                           // Max level of refinement
+-	double regionlevel1;																		// Region which will be refined with level 1
+-	double regionlevelmax;																	// Region which will be refined with level max
+-	TPZGeoMesh *fathermesh;																	// Father Mesh is the entire mesh without refinement
+-	TPZGeoMesh *previousmesh;																// Previous mesh is a refined mesh of last step
++   int elementswidth;                                    // Geometric nodes for element: 3 == Tria, 4 == Tetra, 6 == Penta
++   int levelmax;                                         // Max level of refinement
++	double regionlevel1;												// Region which will be refined with level 1
++	double regionlevelmax;											// Region which will be refined with level max
++	std::vector<int> sid2index;									// Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid) 
++	TPZGeoMesh *fathermesh;											// Father Mesh is the entire mesh without refinement
++	TPZGeoMesh *currentmesh;										// Current Mesh is the refined mesh
+ 
+ 	/*Private methods*/
+-   void RefinementProcess(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec);  // Start the refinement process
+-	void RefineMesh(TPZGeoMesh *gmesh, std::vector<int> &ElemVec); 					// Refine the elements in ElemVec
+-   void RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh);                        // Refine the elements to avoid hanging nodes
+-	void SetElementsToRefine(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec,int &hlevel, std::vector<int> &ElemVec); 	//Define wich elements will be refined
+-   void TagAllElements(TPZGeoMesh *gmesh,std::vector<int> &ElemVec);				 // This tag all elements to be refined, that is, refine all elements
+-   void TagElementsNearGroundingLine(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec,int &hlevel,std::vector<int> &ElemVec);    // This tag elements near the grounding line
+-   void CalcGroundingLinePosition(double *masklevelset,std::vector<TPZVec<REAL> > &GLvec);	// Calculate the grounding line position using previous mesh
+-	void GetMesh(TPZGeoMesh *gmesh,int &nvertices,int &nelements,int &nsegments,double** px,double** py,double** pz,int** pelements,int** psegments=NULL); // Return coords and elements in ISSM data structure
+-   inline int GetElemMaterialID(){return 1;}                               // Return element material ID
+-   inline int GetBoundaryMaterialID(){return 2;}                           // Return segment (2D boundary) material ID
++   void RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror);
++	void RefineMesh(TPZGeoMesh *gmesh,std::vector<int> &elements); 
++   void RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh);
++	void GetMesh(int &nvertices,int &nelements,double** px,double** py,int** pelements);
++	void FindElements(int &numberofpoints,double* xp,double* yp,TPZGeoMesh *gmesh,int &hlevel,std::vector<int> &elements);
++   void AllElements(TPZGeoMesh *gmesh,std::vector<int> &elements);
++   inline int GetElemMaterialID(){return 1;}          
+ };
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21805)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21806)
+@@ -169,9 +169,12 @@
+ 		void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements);
+ 		void ElementsAndVerticesPartitioning(int& newnumberofvertices,int& newnumberofelements,int& elementswidth,int* newelementslist,bool** pmy_elements,int** pmy_vertices);
+ 		void WriteMeshInResults(void);
+-		void SetRefPatterns(void);
++		void WriteErrorEstimatorsInResults(void);
+ 		void SmoothedDeviatoricStressTensor(IssmDouble** ptauxx,IssmDouble** ptauyy,IssmDouble** ptauxy); //nodal values, just for SSA-P1: TauXX, TauYY, TauXY
+ 		void ZZErrorEstimator(IssmDouble** pelementerror);
++		void SmoothedGradThickness(IssmDouble** pdHdx,IssmDouble** pdHdy);
++		void ThicknessZZErrorEstimator(IssmDouble** pelementerror);
++		void MeanGroundedIceLevelSet(IssmDouble** pmasklevelset);
+ 
+ 		#ifdef _HAVE_BAMG_
+ 		void ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+@@ -182,6 +185,7 @@
+ 		/*Adaptive mesh refinement methods*/
+ 		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementNeopz(void);
++		void SetRefPatterns(void);
+ 		#endif
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 21805)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 21806)
+@@ -9,6 +9,11 @@
+ #endif
+ 
+ #include "./AdaptiveMeshRefinement.h"
++#include "TPZVTKGeoMesh.h"
++#include "../shared/shared.h"
++#include "pzgeotriangle.h"
++#include "pzreftriangle.h"
++using namespace pzgeom;
+ 
+ /*Constructor, copy, clean up and destructor*/
+ AdaptiveMeshRefinement::AdaptiveMeshRefinement(){/*{{{*/
+@@ -16,7 +21,7 @@
+ }
+ /*}}}*/
+ AdaptiveMeshRefinement::AdaptiveMeshRefinement(const AdaptiveMeshRefinement &cp){/*{{{*/
+-   this->Initialize(); 
++	this->Initialize(); 
+ 	this->operator =(cp);
+ }
+ /*}}}*/
+@@ -24,14 +29,17 @@
+ 
+ 	/*Clean all attributes*/
+ 	this->CleanUp();
+-
+ 	/*Copy all data*/
+-	this->fathermesh     = new TPZGeoMesh(*cp.fathermesh);
+-	this->previousmesh   = new TPZGeoMesh(*cp.previousmesh); 
+-	this->levelmax       = cp.levelmax;
+-	this->elementswidth  = cp.elementswidth;
+-	this->regionlevel1   = cp.regionlevel1;
+-	this->regionlevelmax = cp.regionlevelmax;
++	this->fathermesh			= new TPZGeoMesh(*cp.fathermesh);
++	this->currentmesh			= new TPZGeoMesh(*cp.currentmesh);
++	this->levelmax				= cp.levelmax;
++	this->elementswidth		= cp.elementswidth;
++	this->regionlevel1		= cp.regionlevel1;
++	this->regionlevelmax		= cp.regionlevelmax;
++	this->sid2index.clear();
++	this->sid2index.resize(cp.sid2index.size());
++	for(int i=0;i<cp.sid2index.size();i++) this->sid2index[i]=cp.sid2index[i];
++	
+ 	return *this;
+ 
+ }
+@@ -38,18 +46,18 @@
+ /*}}}*/
+ AdaptiveMeshRefinement::~AdaptiveMeshRefinement(){/*{{{*/
+ 	
+-	//bool ismismip = false;
+-	//if(ismismip){//itapopo
+-	//	TPZFileStream fstr;
+-	//	std::stringstream ss;
++	bool ismismip = false;
++	if(ismismip){//itapopo
++		TPZFileStream fstr;
++		std::stringstream ss;
+ 	    
+-	//	ss << this->levelmax;
+-	//	std::string AMRfile	= "/home/santos/Misomip2/L" + ss.str() + "_tsai/amr.txt"; 
++		ss << this->levelmax;
++		std::string AMRfile	= "/home/santos/L" + ss.str() + "_amr.txt"; 
+ 	
+-	//	fstr.OpenWrite(AMRfile.c_str());
+-	//	int withclassid = 1;
+-	//	this->Write(fstr,withclassid);
+-	//}
++		fstr.OpenWrite(AMRfile.c_str());
++		int withclassid = 1;
++		this->Write(fstr,withclassid);
++	}
+ 	this->CleanUp();
+ 	gRefDBase.clear();
+ }
+@@ -56,24 +64,26 @@
+ /*}}}*/
+ void AdaptiveMeshRefinement::CleanUp(){/*{{{*/
+ 
+-    /*Verify and delete all data*/
++	/*Verify and delete all data*/
+ 	if(this->fathermesh)    delete this->fathermesh;
+-   if(this->previousmesh)  delete this->previousmesh;
+-	this->levelmax			= -1;
+-	this->elementswidth  = -1;
+-	this->regionlevel1	= -1;
+-	this->regionlevelmax = -1;
++	if(this->currentmesh)   delete this->currentmesh;
++	this->levelmax				= -1;
++	this->elementswidth		= -1;
++	this->regionlevel1		= -1;
++	this->regionlevelmax		= -1;
++	this->sid2index.clear();
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::Initialize(){/*{{{*/
+ 
+ 	/*Set pointers to NULL*/
+-	this->fathermesh		= NULL;
+-	this->previousmesh	= NULL;
+-	this->levelmax			= -1;
+-	this->elementswidth	= -1;
+-	this->regionlevel1	= -1;
+-	this->regionlevelmax = -1;
++	this->fathermesh			= NULL;
++	this->currentmesh			= NULL;
++	this->levelmax				= -1;
++	this->elementswidth		= -1;
++	this->regionlevel1		= -1;
++	this->regionlevelmax		= -1;
++	this->sid2index.clear();
+ }
+ /*}}}*/
+ int AdaptiveMeshRefinement::ClassId() const{/*{{{*/
+@@ -80,428 +90,347 @@
+     return 13829430; //Antartic area with ice shelves (km^2)
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::Read(TPZStream &buf, void *context){/*{{{*/
++void AdaptiveMeshRefinement::Read(TPZStream &buf,void *context){/*{{{*/
+ 
+-    try
+-    {
+-        /* Read the id context*/
+-        TPZSaveable::Read(buf,context);
++	try
++	{
++		/* Read the id context*/
++		TPZSaveable::Read(buf,context);
++		/* Read class id*/
++		int classid;
++		buf.Read(&classid,1); 
++		/* Verify the class id*/
++      if(classid!=this->ClassId()) _error_("AdaptiveMeshRefinement::Read: Error in restoring AdaptiveMeshRefinement!\n"); 
++		/* Read simple attributes */
++		buf.Read(&this->levelmax,1);
++		buf.Read(&this->elementswidth,1);
++		buf.Read(&this->regionlevel1,1);
++		buf.Read(&this->regionlevelmax,1);
++		/* Read vector attributes*/
++		int size;
++		buf.Read(&size,1);
++		int* psid2index=xNew<int>(size);
++		buf.Read(psid2index,size);
++		this->sid2index.clear();
++		this->sid2index.assign(psid2index,psid2index+size);
++		/* Read geometric mesh (father)*/
++		TPZSaveable *sv1 = TPZSaveable::Restore(buf,0);
++		this->fathermesh = dynamic_cast<TPZGeoMesh*>(sv1);
++		/* Read geometric mesh (current)*/
++		TPZSaveable *sv2 = TPZSaveable::Restore(buf,0);
++		this->currentmesh = dynamic_cast<TPZGeoMesh*>(sv2);
++		/* Cleanup*/
++		xDelete<int>(psid2index);
++	}
++	catch(const std::exception& e)
++	{
++		_error_("AdaptiveMeshRefinement::Read: Exception catched!\n");
++	}
+ 
+-        /* Read class id*/
+-        int classid;
+-        buf.Read(&classid,1);
+-        
+-        /* Verify the class id*/
+-        if (classid != this->ClassId() )
+-        {
+-            std::cout << "Error in restoring AdaptiveMeshRefinement!\n";
+-            std::cout.flush();
+-            DebugStop();
+-        }
+-        
+-        /* Read simple attributes */
+-        buf.Read(&this->levelmax,1);
+-        buf.Read(&this->elementswidth,1);
+-        buf.Read(&this->regionlevel1,1);
+-        buf.Read(&this->regionlevelmax,1);
+-        
+-		/* Read geometric mesh*/
+-        TPZSaveable *sv1 = TPZSaveable::Restore(buf,0);
+-        this->fathermesh = dynamic_cast<TPZGeoMesh*>(sv1);
+-        
+-        TPZSaveable *sv2 = TPZSaveable::Restore(buf,0);
+-        this->previousmesh = dynamic_cast<TPZGeoMesh*>(sv2);
+-    }
+-    catch(const std::exception& e)
+-    {
+-        std::cout << "Exception catched! " << e.what() << std::endl;
+-        std::cout.flush();
+-        DebugStop();
+-    }
+ }
+ /*}}}*/
+ template class TPZRestoreClass<AdaptiveMeshRefinement,13829430>;/*{{{*/
+ /*}}}*/
+-void AdaptiveMeshRefinement::Write(TPZStream &buf, int withclassid){/*{{{*/
++void AdaptiveMeshRefinement::Write(TPZStream &buf,int withclassid){/*{{{*/
+     
+-    try
+-    {
+-        /* Write context (this class) class ID*/
+-        TPZSaveable::Write(buf,withclassid);
+-
+-        /* Write this class id*/
+-        int classid = ClassId();
+-        buf.Write(&classid,1);
+-
+-        /* Write simple attributes */
+-        buf.Write(&this->levelmax,1);
+-        buf.Write(&this->elementswidth,1);
+-        buf.Write(&this->regionlevel1,1);
+-        buf.Write(&this->regionlevelmax,1);
+-			
+-        /* Write the geometric mesh*/
+-        this->fathermesh->Write(buf, this->ClassId());
+-        this->previousmesh->Write(buf, this->ClassId());
++	try
++	{
++		/* Write context (this class) class ID*/
++		TPZSaveable::Write(buf,withclassid);
++		/* Write this class id*/
++		int classid = this->ClassId();
++		buf.Write(&classid,1);
++		/* Write simple attributes */
++		buf.Write(&this->levelmax,1);
++		buf.Write(&this->elementswidth,1);
++		buf.Write(&this->regionlevel1,1);
++		buf.Write(&this->regionlevelmax,1);
++		/* Write vector attributes*/
++		int size=this->sid2index.size();
++		int* psid2index=&this->sid2index[0];
++		buf.Write(&size,1);//vector size
++		buf.Write(psid2index,this->sid2index.size());
++		/* Write the geometric mesh*/
++		this->fathermesh->Write(buf,this->ClassId());
++		this->currentmesh->Write(buf,this->ClassId());
+     }
+     catch(const std::exception& e)
+     {
+-        std::cout << "Exception catched! " << e.what() << std::endl;
+-        std::cout.flush();
+-        DebugStop();
++		_error_("AdaptiveMeshRefinement::Write: Exception catched!\n");
+     }
+ }
+ /*}}}*/
+ 
+ /*Mesh refinement methods*/
+-#include "TPZVTKGeoMesh.h" //itapopo
+-#include "../shared/shared.h" //itapopo
+-void AdaptiveMeshRefinement::ExecuteRefinement(int &type_process,double *vx, double *vy, double *masklevelset, int &nvertices, int &nelements, int &nsegments, double** px, double** py, double** pz, int** pelements, int** psegments){/*{{{*/
++void AdaptiveMeshRefinement::Execute(bool &amr_verbose,
++												int &numberofelements,
++												double* partiallyfloatedelements,
++												double *masklevelset,
++												double* deviatorictensorerror,
++												double* thicknesserror,
++												int &newnumberofvertices,int &newnumberofelements,double** x,double** y,int** elementslist){/*{{{*/
+ 
+-	/*IMPORTANT! pelements (and psegments) are in Matlab indexing*/
++	/*IMPORTANT! newelements are in Matlab indexing*/
+ 	/*NEOPZ works only in C indexing*/
++	if(!this->fathermesh || !this->currentmesh) _error_("Impossible to execute refinement: fathermesh or currentmesh is NULL!\n");
++	if(numberofelements!=this->sid2index.size()) _error_("Impossible to execute refinement: sid2index.size is not equal to numberofelements!\n");
+ 
+-    _assert_(this->fathermesh);
+-    _assert_(this->previousmesh);
++	/*Execute the refinement.*/
++	this->RefinementProcess(amr_verbose,partiallyfloatedelements,masklevelset,deviatorictensorerror,thicknesserror);
+     
+-    /*Calculate the position of the grounding line using previous mesh*/
+-    std::vector<TPZVec<REAL> > GLvec;
+-    this->CalcGroundingLinePosition(masklevelset, GLvec);
+-    
+-   // std::ofstream file1("/home/santos/mesh0.vtk");
+-   // TPZVTKGeoMesh::PrintGMeshVTK(this->fathermesh,file1 );
+-    
+-    /*run refinement or unrefinement process*/
+-    TPZGeoMesh *newmesh;
+-    switch (type_process) {
+-        case 0: newmesh = this->previousmesh; break;                    // refine previous mesh
+-        case 1: newmesh = new TPZGeoMesh(*this->fathermesh); break;     // refine mesh 0 (unrefine process)
+-        default: DebugStop(); break;//itapopo verificar se irá usar _assert_
+-    }
+-    
+-    this->RefinementProcess(newmesh,GLvec);
++	/*Get new geometric mesh in ISSM data structure*/
++	this->GetMesh(newnumberofvertices,newnumberofelements,x,y,elementslist);
+ 	
+-    //std::ofstream file2("/home/santos/mesh1.vtk");
+-    //TPZVTKGeoMesh::PrintGMeshVTK(this->previousmesh,file2 );
+-    
+-    /*Set new mesh pointer. Previous mesh just have uniform elements*/
+-    if(type_process==1){
+-        if(this->previousmesh) delete this->previousmesh;
+-        this->previousmesh = newmesh;
+-    }
+-    
+-    /*Refine elements to avoid hanging nodes*/
+-	//TPZGeoMesh *nohangingnodesmesh = new TPZGeoMesh(*newmesh);//itapopo testando, este era o original
+-   TPZGeoMesh *nohangingnodesmesh = this->CreateRefPatternMesh(newmesh);//itapopo testando, este eh novo metodo
+-    
+-    //std::ofstream file3("/home/santos/mesh2.vtk");
+-    //TPZVTKGeoMesh::PrintGMeshVTK(this->previousmesh,file3);
+-    
+-    this->RefineMeshToAvoidHangingNodes(nohangingnodesmesh);
+-    
+-	 //std::ofstream file4("/home/santos/mesh3.vtk");
+-    //TPZVTKGeoMesh::PrintGMeshVTK(nohangingnodesmesh,file4);
+-    
+-    /*Get new geometric mesh in ISSM data structure*/
+-    this->GetMesh(nohangingnodesmesh,nvertices,nelements,nsegments,px,py,pz,pelements,psegments);
+-	 
+-    /*Verify the new geometry*/
+-    this->CheckMesh(nvertices,nelements,nsegments,this->elementswidth,px,py,pz,pelements,psegments);
++	/*Verify the new geometry*/
++	this->CheckMesh(newnumberofvertices,newnumberofelements,this->elementswidth,x,y,elementslist);
+ 
+-	 _printf_("\trefinement process done!\n\n");
+-
+-    delete nohangingnodesmesh;
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefinementProcess(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec){/*{{{*/
+-    
+-    /*Refine mesh levelmax times*/
+-   _printf_("\n\trefinement process (level max = " << this->levelmax << ")\n");
+-	_printf_("\tprogress:  ");
+-	for(int hlevel=1;hlevel<=this->levelmax;hlevel++){
+-        
+-        /*Set elements to be refined using some criteria*/
+-        std::vector<int> ElemVec; //elements without children
+-        this->SetElementsToRefine(gmesh,GLvec,hlevel,ElemVec);
+-        
+-        /*Refine the mesh*/
+-        this->RefineMesh(gmesh, ElemVec);
+-		  
+-		  _printf_("*  ");
+-    }
+-    _printf_("\n");
++void AdaptiveMeshRefinement::RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,
++																double* deviatorictensorerror,double* thicknesserror){/*{{{*/
++   
++	if(amr_verbose) _printf_("\n\trefinement process started (level max = " << this->levelmax << ")\n");
++	
++	/*Intermediaries*/
++	TPZGeoMesh* nohangingnodesmesh=NULL;
++	double mean_mask		= 0;
++	double mean_tauerror = 0;
++	double mean_Herror	= 0;
++	double group_error	= 0;
++   
++	/*Calculate mean values*/
++	for(int i=0;i<this->sid2index.size();i++){
++		mean_mask		+= masklevelset[i]; 
++		mean_tauerror	+= deviatorictensorerror[i]; 
++		mean_Herror		+= thicknesserror[i];
++	}
++	mean_mask		/= this->sid2index.size();
++	mean_tauerror	/= this->sid2index.size();
++	mean_Herror		/= this->sid2index.size();
++
++	if(amr_verbose) _printf_("\t\tuniform refinement...\n");
++	for(int i=0;i<this->sid2index.size();i++){
++		TPZGeoEl* geoel=this->currentmesh->Element(this->sid2index[i]);
++		if(geoel->HasSubElement()) _error_("Impossible to refine: geoel (index) "<<this->sid2index[i]<<" has subelements!\n");
++		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("Impossible to refine: geoel->MaterialId is not GetElemMaterialID!\n");
++		/*Refine*/
++		if(thicknesserror[i]>mean_Herror){
++			TPZVec<TPZGeoEl *> sons;
++			if(geoel->Level()<this->levelmax) geoel->Divide(sons);
++		} 
++		else if(geoel->Level()>0){ /*try to unrefine*/
++			TPZVec<TPZGeoEl *> sons;
++			geoel->Father()->GetHigherSubElements(sons);
++			group_error=0;
++			for(int j=0;j<sons.size();j++){
++				sons[j]->Index();
++			}
++		}
++	}
++	this->currentmesh->BuildConnectivity();
++	
++	if(amr_verbose) _printf_("\t\trefine to avoid hanging nodes...\n");
++	this->RefineMeshToAvoidHangingNodes(this->currentmesh);
++	this->currentmesh->BuildConnectivity();
++	
++		//nohangingnodesmesh = this->CreateRefPatternMesh(newmesh); itapopo tentar otimizar
++	
++	if(amr_verbose) _printf_("\trefinement process done!\n");
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefineMesh(TPZGeoMesh *gmesh, std::vector<int> &ElemVec){/*{{{*/
++void AdaptiveMeshRefinement::RefineMesh(TPZGeoMesh *gmesh,std::vector<int> &elements){/*{{{*/
+ 
+-	/*Refine elements in ElemVec: uniform pattern refinement*/
+-	for(int i = 0; i < ElemVec.size(); i++){
+-		
+-        /*Get geometric element and verify if it has already been refined*/
+-        int index = ElemVec[i];
+-        TPZGeoEl * geoel = gmesh->Element(index);
+-        if(geoel->HasSubElement()) DebugStop();                              //itapopo _assert_(!geoel->HasSubElement());
+-        if(geoel->MaterialId() != this->GetElemMaterialID()) DebugStop();   //itapopo verificar se usará _assert_
+-        
+-        /*Divide geoel*/
+-        TPZVec<TPZGeoEl *> Sons;
+-		  geoel->Divide(Sons);
+-        
+-        /*If a 1D segment is neighbor, it must be divided too*/
+-        if(this->elementswidth != 3) DebugStop(); //itapopo verificar o segment para malha 3D
+-        
+-        std::vector<int> sides(3);
+-        sides[0] = 3; sides[1] = 4; sides[2] = 5;
+-        for(int j = 0; j < sides.size(); j++ ){
+-            
+-            TPZGeoElSide Neighbour = geoel->Neighbour(sides[j]);
+-            
+-            if( Neighbour.Element()->MaterialId() == this->GetBoundaryMaterialID() && !Neighbour.Element()->HasSubElement() ){
+-                TPZVec<TPZGeoEl *> pv2;
+-                Neighbour.Element()->Divide(pv2);
+-            }
+-        }
++	/*Refine elements: uniform pattern refinement*/
++	for(int i=0;i<elements.size();i++){
++		/*Get geometric element and verify if it has already been refined*/
++		int index = elements[i];
++		TPZGeoEl * geoel = gmesh->Element(index);
++		if(geoel->HasSubElement()) _error_("Impossible to refine: geoel (index) " << index << " has subelements!\n");
++		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("Impossible to refine: geoel->MaterialId is not GetElemMaterialID!\n");
++		/*Divide geoel*/
++		TPZVec<TPZGeoEl *> Sons;
++		geoel->Divide(Sons);
+ 	}
+-    
+-    gmesh->BuildConnectivity();
+-
++	gmesh->BuildConnectivity();
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh){/*{{{*/
+    
+-	 _printf_("\trefine to avoid hanging nodes...\n");
+-    /*Refine elements to avoid hanging nodes: non-uniform refinement*/
+-	 const int NElem = gmesh->NElements();
+-    for(int i = 0; i < NElem; i++){
+-        
+-        /*Get geometric element and verify if it has already been refined. Geoel may not have been previously refined*/
+-        TPZGeoEl * geoel = gmesh->Element(i);
+-        if(!geoel) continue;
+-        if(geoel->HasSubElement()) continue;
+-        if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
+-        
+-        /*Get the refinement pattern for this element and refine it*/
+-        TPZAutoPointer<TPZRefPattern> refp = TPZRefPatternTools::PerfectMatchRefPattern(geoel);
+-        if(refp){
+-            TPZVec<TPZGeoEl *> Sons;
+-            geoel->SetRefPattern(refp);
+-            geoel->Divide(Sons);
+-        }
+-        
+-    }
++	/*Refine elements to avoid hanging nodes: non-uniform refinement*/
++	const int NElem = gmesh->NElements();
++	for(int i=0;i<NElem;i++){
++		/*Get geometric element and verify if it has already been refined. Geoel may not have been previously refined*/
++		TPZGeoEl * geoel=gmesh->Element(i);
++		if(!geoel) continue;
++		if(geoel->HasSubElement()) continue;
++		if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
++		/*Get the refinement pattern for this element and refine it*/
++		TPZAutoPointer<TPZRefPattern> refp=TPZRefPatternTools::PerfectMatchRefPattern(geoel);
++		if(refp){
++			TPZVec<TPZGeoEl *> Sons;
++			geoel->SetRefPattern(refp);
++			geoel->Divide(Sons);
++      }
++	}
++   gmesh->BuildConnectivity();
+     
+-    gmesh->BuildConnectivity();
+-    
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::GetMesh(TPZGeoMesh *gmesh,int &nvertices,int &nelements,int &nsegments,double** px,double** py,double** pz, int** pelements, int** psegments){/*{{{*/
++void AdaptiveMeshRefinement::GetMesh(int &nvertices,int &nelements,double** px,double** py, int** pelements){/*{{{*/
+ 
+-	/*IMPORTANT! pelements (and psegments) are in Matlab indexing*/
+-	/*NEOPZ works only in C indexing*/
++	/* IMPORTANT! pelements are in Matlab indexing
++	   NEOPZ works only in C indexing.
++		This method cleans up and updated the this->sid2index 
++		and fills in it with the new mesh.
++		Avoid to call this method before Refinement Process.*/
+ 
+-	/* vertices */
+-    int ntotalvertices = gmesh->NNodes();//total
+-    
+-    /* mesh coords */
+-	 double* newmeshX = xNew<IssmDouble>(ntotalvertices);
+-    double* newmeshY = xNew<IssmDouble>(ntotalvertices);
+-    double* newmeshZ = xNew<IssmDouble>(ntotalvertices);
+-   	
+-   /* getting mesh coords */
+-    for(int i = 0; i < ntotalvertices; i++ ){
+-        TPZVec<REAL> coords(3,0.);
+-        gmesh->NodeVec()[i].GetCoordinates(coords);
+-        newmeshX[i] = coords[0];
+-        newmeshY[i] = coords[1];
+-        newmeshZ[i] = coords[2];
+-    }
+-    
+-	/* elements */
+-    std::vector<TPZGeoEl*> GeoVec; GeoVec.clear();
+-    for(int i = 0; i < gmesh->NElements(); i++){ 
+-        if( gmesh->ElementVec()[i]->HasSubElement() ) continue;
+-        if( gmesh->ElementVec()[i]->MaterialId() != this->GetElemMaterialID() ) continue;
+-        GeoVec.push_back( gmesh->ElementVec()[i]);
+-    }
+-    
+-    int ntotalelements = (int)GeoVec.size();
+-    int* newelements = xNew<int>(ntotalelements*this->elementswidth);
++	/*Intermediaries */
++	TPZGeoMesh* gmesh = this->currentmesh;//itapopo confirmar
++	
++	long sid,nodeindex;
++	int nconformelements,nconformvertices;	
++	int* newelements			= NULL;
++	double* newmeshX			= NULL;//xNew<double>(ntotalvertices);
++	double* newmeshY			= NULL;//xNew<double>(ntotalvertices);
++	TPZGeoEl* geoel			= NULL;
++	long* vertex_index2sid 	= xNew<long>(gmesh->NNodes());
++	this->sid2index.clear();
++	
++	/*Get mesh coords */
++	//for(int i=0;i<ntotalvertices;i++ ){
++	//	TPZVec<REAL> coords(3,0.);
++	//	gmesh->NodeVec()[i].GetCoordinates(coords);
++	//	newmeshX[i] = coords[0];
++	//	newmeshY[i] = coords[1];
++	//}
+ 
+-    if ( !(this->elementswidth == 3) && !(this->elementswidth == 4) && !(this->elementswidth == 6) ) DebugStop();
++	/*Fill in the vertex_index2sid vector with non usual index value*/
++	for(int i=0;i<gmesh->NNodes();i++) vertex_index2sid[i]=-1;
++	
++	/*Get elements without sons and fill in the vertex_index2sid with used vertices (indexes) */
++	sid=0;
++	for(int i=0;i<gmesh->NElements();i++){//over gmesh elements index 
++		geoel=gmesh->ElementVec()[i];
++		if(!geoel) continue;
++		if(geoel->HasSubElement()) continue;
++		if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
++		this->sid2index.push_back(i);//keep the element index
++		for(int j=0;j<this->elementswidth;j++){
++      	nodeindex=geoel->NodeIndex(j);
++      	if(vertex_index2sid[nodeindex]==-1){
++      		vertex_index2sid[nodeindex]=sid; 
++				sid++;
++			}
++      }	
++	}
+ 
+-    for(int i=0;i<GeoVec.size();i++){
+-        for(int j=0;j<this->elementswidth;j++) newelements[i*this->elementswidth+j]=(int)GeoVec[i]->NodeIndex(j)+1;//C to Matlab indexing
+-	 }
+-    
+-    /* segments */
+-    std::vector<TPZGeoEl*> SegVec; SegVec.clear();
+-    for(int i = 0; i < gmesh->NElements(); i++){
+-        if( gmesh->ElementVec()[i]->HasSubElement() ) continue;
+-        if( gmesh->ElementVec()[i]->MaterialId() != this->GetBoundaryMaterialID() ) continue;
+-        SegVec.push_back( gmesh->ElementVec()[i]);
+-    }
+-    
+-    int ntotalsegments = (int)SegVec.size();
+-    int *newsegments=NULL;
+-	 if(ntotalsegments>0) newsegments=xNew<int>(ntotalsegments*3);
+-    
+-    for(int i=0;i<SegVec.size();i++){
+-        
+-        for(int j=0;j<2;j++) newsegments[i*3+j]=(int)SegVec[i]->NodeIndex(j)+1;//C to Matlab indexing
+-        
+-        int neighborindex = SegVec[i]->Neighbour(2).Element()->Index();
+-        int neighbourid = -1;
+-        
+-        for(int j = 0; j < GeoVec.size(); j++){
+-            if( GeoVec[j]->Index() == neighborindex || GeoVec[j]->FatherIndex() == neighborindex){
+-                neighbourid = j;
+-                break;
+-            }
+-        }
+-        
+-        if(neighbourid==-1) DebugStop(); //itapopo talvez passar para _assert_
+-        newsegments[i*3+2] = neighbourid+1;//C to Matlab indexing
+-    }
+-    
+-    //setting outputs
+-    nvertices  = ntotalvertices;
+-    nelements  = ntotalelements;
+-    nsegments  = ntotalsegments;
+-    *px		   = newmeshX;
+-    *py		   = newmeshY;
+-    *pz		   = newmeshZ;
+-    *pelements = newelements;
+-    *psegments = newsegments;
+-    
++	nconformelements	= (int)this->sid2index.size();
++	nconformvertices	= (int)sid;
++	newelements			= xNew<int>(nconformelements*this->elementswidth);
++	newmeshX				= xNew<double>(nconformvertices);
++   newmeshY				= xNew<double>(nconformvertices);
++
++	for(int i=0;i<nconformvertices;i++){//over the TPZNode index (fill in the ISSM vertices coords)
++		sid = vertex_index2sid[i];
++		if(sid!=-1){
++			TPZVec<REAL> coords(3,0.);
++			gmesh->NodeVec()[i].GetCoordinates(coords);
++			newmeshX[sid] = coords[0];
++			newmeshY[sid] = coords[1];
++		}
++	}
++		
++	for(int i=0;i<this->sid2index.size();i++){//over the sid (fill the ISSM elements)
++		for(int j=0;j<this->elementswidth;j++) {
++			geoel	= gmesh->ElementVec()[this->sid2index[i]];
++			sid	= vertex_index2sid[geoel->NodeIndex(j)];
++			newelements[i*this->elementswidth+j]=(int)sid+1;//C to Matlab indexing
++		}
++	}
++ 
++	/*Setting outputs*/
++	nvertices	= nconformvertices;
++	nelements	= nconformelements;
++	*px			= newmeshX;
++	*py		   = newmeshY;
++	*pelements	= newelements;
++   
++	/*Cleanup*/
++	xDelete<long>(vertex_index2sid);
++
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::CalcGroundingLinePosition(double *masklevelset,std::vector<TPZVec<REAL> > &GLvec){/*{{{*/
+-    
+-    /* Find grounding line using elments center point */
+-    GLvec.clear();
+-    for(int i=0;i<this->previousmesh->NElements();i++){
+-        
+-        if(this->previousmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+-        if(this->previousmesh->Element(i)->HasSubElement()) continue;
+-        
+-        //itapopo apenas malha 2D triangular!
+-        int vertex0 = this->previousmesh->Element(i)->NodeIndex(0);
+-        int vertex1 = this->previousmesh->Element(i)->NodeIndex(1);
+-        int vertex2 = this->previousmesh->Element(i)->NodeIndex(2);
+-        
+-		  //itapopo inserir uma verificação para não acessar fora da memória
+-        double mls0 = masklevelset[vertex0];
+-        double mls1 = masklevelset[vertex1];
+-        double mls2 = masklevelset[vertex2];
+-        
+-        if( mls0*mls1 < 0. || mls1*mls2 < 0. ){
+-            const int side = 6;
+-            TPZVec<double> qsi(2,0.);
+-            TPZVec<double> X(3,0.);
+-            this->previousmesh->Element(i)->CenterPoint(side, qsi);
+-            this->previousmesh->Element(i)->X(qsi, X);
+-            GLvec.push_back(X);
+-        }
+-    }
+-    
+-//    itapopo apenas para debugar
+-//    std::ofstream fileGL("/Users/santos/Desktop/gl.nb");
+-//    fileGL << "ListPlot[{";
+-//    for(int i = 0; i < GLvec.size(); i++){
+-//        fileGL << "{" << GLvec[i][0] << "," << GLvec[i][1] << /*"," << 0. << */"}";
+-//        if(i != GLvec.size()-1) fileGL << ",";
+-//    }
+-//    fileGL << "}]";
+-//    fileGL.flush();
+-//    fileGL.close();
+-    
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::SetElementsToRefine(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec,int &hlevel,std::vector<int> &ElemVec){/*{{{*/
++void AdaptiveMeshRefinement::FindElements(int &numberofpoints,double* xp,double* yp,TPZGeoMesh *gmesh,int &hlevel,std::vector<int> &elements){/*{{{*/
+ 
+-    if(!gmesh) DebugStop(); //itapopo verificar se usará _assert_
++	if(!gmesh) _error_("Impossible to set elements: gmesh is NULL!\n");
+ 
+-    ElemVec.clear();
++	if(false){
++		this->AllElements(gmesh,elements); //uniform, refine all elements!
++		return;
++	}
++
++	/*Intermediaries*/
++	elements.clear();
++	double D1		= this->regionlevel1;
++	double Dhmax	= this->regionlevelmax;
++	int hmax			= this->levelmax;
++	double alpha	= (hmax==1) ? 0. : log(D1/Dhmax)/(hmax-1.);
++	double Di		= D1/exp(alpha*(hlevel-1));
++	int side2D		= 6;
++	double distance,value;
+     
+-    // itapopo inserir modo de encontrar criterio TESTING!!!! Come to false!
+-	 if(false) this->TagAllElements(gmesh,ElemVec); //uniform, refine all elements!
++	/*Find elements near the points */ 
++	for(int i=0;i<gmesh->NElements();i++){
++		if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
++		if(gmesh->Element(i)->HasSubElement()) continue;
++		if(gmesh->Element(i)->Level()>=hlevel) continue;
++		TPZVec<REAL> qsi(2,0.);
++		TPZVec<REAL> centerPoint(3,0.);
++		gmesh->Element(i)->CenterPoint(side2D, qsi);
++		gmesh->Element(i)->X(qsi, centerPoint);
++		distance = Di;
++		for (int j=0;j<numberofpoints;j++){
++			value = std::sqrt( (xp[j]-centerPoint[0])*(xp[j]-centerPoint[0])+(yp[j]-centerPoint[1] )*(yp[j]-centerPoint[1]) );//sqrt( (x2-x1)^2 + (y2-y1)^2 )
++			if(value<distance) distance=value; //min distance to the point
++		}  
++		if(distance<Di) elements.push_back(i);
++	}
+ 
+-    /* Adaptive refinement. This refines some elements following some criteria*/
+-    this->TagElementsNearGroundingLine(gmesh, GLvec, hlevel, ElemVec);
+-
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::TagAllElements(TPZGeoMesh *gmesh,std::vector<int> &ElemVec){/*{{{*/
+-    
++void AdaptiveMeshRefinement::AllElements(TPZGeoMesh *gmesh,std::vector<int> &elements){/*{{{*/
+     /* Uniform refinement. This refines the entire mesh */
+     int nelements = gmesh->NElements();
++	 elements.clear();
+     for(int i=0;i<nelements;i++){
+         if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+         if(gmesh->Element(i)->HasSubElement()) continue;
+-        ElemVec.push_back(i);
++        elements.push_back(i);
+     }
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::TagElementsNearGroundingLine(TPZGeoMesh *gmesh,std::vector<TPZVec<REAL> > &GLvec,int &hlevel,std::vector<int> &ElemVec){/*{{{*/
+-    
+-    /* Tag elements near grounding line */ 
+-	 double D1		= this->regionlevel1;
+-	 double Dhmax  = this->regionlevelmax;
+-	 int hmax		= this->levelmax;
+-    double alpha	= (hmax==1) ? 0. : log(D1/Dhmax)/(hmax-1.);
+-	 double Di		= D1/exp(alpha*(hlevel-1));
+-    
+-    for(int i=0;i<gmesh->NElements();i++){
+-        
+-        if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+-        if(gmesh->Element(i)->HasSubElement()) continue;
+-        if(gmesh->Element(i)->Level()>=hlevel) continue;
+-        
+-        const int side2D = 6;
+-        TPZVec<REAL> qsi(2,0.);
+-        TPZVec<REAL> centerPoint(3,0.);
+-        gmesh->Element(i)->CenterPoint(side2D, qsi);
+-        gmesh->Element(i)->X(qsi, centerPoint);
+-        
+-        REAL distance = Di;
+-        
+-        for (int j = 0; j < GLvec.size(); j++) {
+-            
+-            REAL value = ( GLvec[j][0] - centerPoint[0] ) * ( GLvec[j][0] - centerPoint[0] ); // (x2-x1)^2
+-            value += ( GLvec[j][1] - centerPoint[1] ) * ( GLvec[j][1] - centerPoint[1] );// (y2-y1)^2
+-            value = std::sqrt(value); //Radius
+-            
+-            //finding the min distance to the grounding line
+-            if(value < distance) distance = value;
+-            
+-        }
+-        
+-        if(distance < Di) ElemVec.push_back(i);
+-    }
+-    
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::CreateInitialMesh(int &nvertices,int &nelements,int &nsegments,int &width,double* x,double* y,double* z,int* elements,int* segments){/*{{{*/
++void AdaptiveMeshRefinement::CreateInitialMesh(int &nvertices,int &nelements,int &width,double* x,double* y,int* elements){/*{{{*/
+ 
+-	/*IMPORTANT! elements come in Matlab indexing*/
+-	/*NEOPZ works only in C indexing*/
++	/* IMPORTANT! elements come in Matlab indexing
++		NEOPZ works only in C indexing*/
+ 	
+-	_assert_(nvertices>0);
+-   _assert_(nelements>0);
++	if(nvertices<=0) _error_("Impossible to create initial mesh: nvertices is <= 0!\n");
++   if(nelements<=0) _error_("Impossible to create initial mesh: nelements is <= 0!\n");
+ 	this->SetElementWidth(width);
+ 
+     /*Verify and creating initial mesh*/
+-   if(this->fathermesh) _error_("Initial mesh already exists!");
++   if(this->fathermesh || this->currentmesh) _error_("Initial mesh already exists!");
+     
+    this->fathermesh = new TPZGeoMesh();
+-	this->fathermesh->NodeVec().Resize( nvertices );
++	this->fathermesh->NodeVec().Resize(nvertices);
+ 
+-    /*Set the vertices (geometric nodes in NeoPZ context)*/
++	/*Set the vertices (geometric nodes in NeoPZ context)*/
+ 	for(int i=0;i<nvertices;i++){  
+       /*x,y,z coords*/
+ 		TPZManVector<REAL,3> coord(3,0.);
+       coord[0]= x[i];
+       coord[1]= y[i];
+-      coord[2]= z[i];
++      coord[2]= 0.;
+       /*Insert in the mesh*/
+       this->fathermesh->NodeVec()[i].SetCoord(coord);
+ 		this->fathermesh->NodeVec()[i].SetNodeId(i);
+@@ -511,48 +440,27 @@
+ 	long index;
+    const int mat = this->GetElemMaterialID();
+    TPZManVector<long> elem(this->elementswidth,0);
+-    
+-	for(int iel=0;iel<nelements;iel++){
++   this->sid2index.clear();
+ 
+-		for(int jel=0;jel<this->elementswidth;jel++) elem[jel]=elements[iel*this->elementswidth+jel]-1;//Convert Matlab to C indexing
+-
++	for(int i=0;i<nelements;i++){
++		for(int j=0;j<this->elementswidth;j++) elem[j]=elements[i*this->elementswidth+j]-1;//Convert Matlab to C indexing
+       /*reftype = 0: uniform, fast / reftype = 1: uniform and non-uniform (avoid hanging nodes), it is not too fast */
+-      const int reftype = 0;
++      const int reftype = 1;
+       switch(this->elementswidth){
+-			case 3: this->fathermesh->CreateGeoElement(ETriangle, elem, mat, index, reftype);	break;
+-         case 4: this->fathermesh->CreateGeoElement(ETetraedro, elem, mat, index, reftype); DebugStop(); break;
+-			case 6: this->fathermesh->CreateGeoElement(EPrisma, elem, mat, index, reftype); DebugStop(); break;
+-         default:	DebugStop();//itapopo _error_("mesh not supported yet");
++			case 3: this->fathermesh->CreateGeoElement(ETriangle,elem,mat,index,reftype);	break;
++         default:	_error_("mesh not supported yet");
+ 		}
+-        
+       /*Define the element ID*/        
+-      this->fathermesh->ElementVec()[index]->SetId(iel); 
++      this->fathermesh->ElementVec()[index]->SetId(i);
++		/*Initialize sid2index*/
++		this->sid2index.push_back((int)index);
+ 	}
+-    
+-   /*Generate the 1D segments elements (boundary)*/
+-   const int matboundary = this->GetBoundaryMaterialID();
+-   TPZManVector<long> boundary(2,0.);
+-    
+-   for(int iel=nelements;iel<nelements+nsegments;iel++){     
+-		boundary[0] = segments[(iel-nelements)*2+0]-1;//Convert Matlab to C indexing
+-      boundary[1] = segments[(iel-nelements)*2+1]-1;//Convert Matlab to C indexing
+-      /*reftype = 0: uniform, fast / reftype = 1: uniform and non-uniform (avoid hanging nodes), it is not too fast */
+-      const int reftype = 0;
+-      this->fathermesh->CreateGeoElement(EOned, boundary, matboundary, index, reftype);//cria elemento unidimensional
+-      this->fathermesh->ElementVec()[index]->SetId(iel);
+-	}
+-    
+    /*Build element and node connectivities*/
+    this->fathermesh->BuildConnectivity();
+-    
+-	/*Create previous mesh as a copy of father mesh*/
+-   this->previousmesh = new TPZGeoMesh(*this->fathermesh);
+-
++	/*Set current mesh*/
++	this->currentmesh=new TPZGeoMesh(*this->fathermesh);
+ }
+ /*}}}*/
+-#include "pzgeotriangle.h" //itapopo
+-#include "pzreftriangle.h" //itapopo
+-using namespace pzgeom;
+ TPZGeoMesh* AdaptiveMeshRefinement::CreateRefPatternMesh(TPZGeoMesh* gmesh){/*{{{*/
+ 	
+ 	TPZGeoMesh *newgmesh = new TPZGeoMesh();
+@@ -645,39 +553,40 @@
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::SetElementWidth(int &width){/*{{{*/
+-    this->elementswidth = width;
++	if(width!=3) _error_("elementswidth not supported yet!");
++   this->elementswidth = width;
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::CheckMesh(int &nvertices,int &nelements,int &nsegments,int &width,double** px,double** py,double** pz,int** pelements, int** psegments){/*{{{*/
++void AdaptiveMeshRefinement::CheckMesh(int &nvertices,int &nelements,int &width,double** px,double** py,int** pelements){/*{{{*/
+ 
+-    /*Basic verification*/
+-    if( !(nvertices > 0) || !(nelements > 0) ) DebugStop(); //itapopo verificar se irá usar o _assert_
+-    
+-    if ( !(width == 3) && !(width == 4) && !(width == 6) ) DebugStop(); // itapopo verifcar se irá usar o _assert_
+-    
+-    if( !px || !py || !pz || !pelements ) DebugStop(); // itapopo verifcar se irá usar o _assert_
+-    
+-    /*Verify if there are orphan nodes*/
+-    std::set<int> elemvertices;
+-    elemvertices.clear(); 
+-    for(int i = 0; i < nelements; i++){
+-        for(int j = 0; j < width; j++) {
+-            elemvertices.insert((*pelements)[i*width+j]);
+-		  }
+-	 }
+-    
+-    if( elemvertices.size() != nvertices ) DebugStop();//itapopo verificar se irá usar o _assert_
++	/*Basic verification*/
++	if(nvertices<=0) _error_("Impossible to continue: nvertices <=0!\n");
++	if(nelements<=0) _error_("Impossible to continue: nelements <=0!\n");
++	if(width!=3) _error_("Impossible to continue: width !=3!\n"); 
++	if(!px) _error_("Impossible to continue: px is NULL!\n");
++	if(!py) _error_("Impossible to continue: py is NULL!\n");
++	if(!pelements) _error_("Impossible to continue: pelements is NULL!\n");
++
++	/*Verify if there are orphan nodes*/
++	std::set<int> elemvertices;
++	elemvertices.clear(); 
++	for(int i=0;i<nelements;i++){
++		for(int j=0;j<width;j++) {
++			elemvertices.insert((*pelements)[i*width+j]);
++		}
++	}
++	if(elemvertices.size()!=nvertices) _error_("Impossible to continue: elemvertices.size() != nvertices!\n");
+ 	
+-    //Verify if there are inf or NaN in coords
+-    for(int i = 0; i < nvertices; i++) if(isnan((*px)[i]) || isinf((*px)[i])) DebugStop();
+-    for(int i = 0; i < nvertices; i++) if(isnan((*py)[i]) || isinf((*py)[i])) DebugStop();
+-    for(int i = 0; i < nvertices; i++) if(isnan((*pz)[i]) || isinf((*pz)[i])) DebugStop();
+-   
+-	 for(int i = 0; i < nelements; i++){
+-        for(int j = 0; j < width; j++){
+-            if( isnan((*pelements)[i*width+j]) || isinf((*pelements)[i*width+j]) ) DebugStop();
+-        }
+-    }
++	//Verify if there are inf or NaN in coords
++	for(int i=0;i<nvertices;i++){
++		if(isnan((*px)[i]) || isinf((*px)[i])) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n"); 
++		if(isnan((*py)[i]) || isinf((*py)[i])) _error_("Impossible to continue: py i=" << i <<" is NaN or Inf!\n");
++	}
++	for(int i=0;i<nelements;i++){
++		for(int j=0;j<width;j++){
++			if(isnan((*pelements)[i*width+j]) || isinf((*pelements)[i*width+j]) ) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n");
++		}
++	}
+     
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21805)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21806)
+@@ -2692,6 +2692,12 @@
+ /*}}}*/
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
++	//itapopo
++	#ifdef _HAVE_NEOPZ_
++	this->WriteErrorEstimatorsInResults();
++	#endif
++	//itapopo
++
+ 	int step					= -1;
+ 	int numberofelements = -1;
+ 	int numberofvertices = -1;
+@@ -2752,6 +2758,39 @@
+ 	xDelete<int>(elementslist);
+ }
+ /*}}}*/
++void FemModel::WriteErrorEstimatorsInResults(void){/*{{{*/
++
++   int step                   = -1;
++   int numberofelements       = -1;
++   IssmDouble time            = -1;
++   IssmDouble* stresserror    = NULL;
++   IssmDouble* thicknesserror = NULL;
++
++   if(!this->elements || !this->vertices || !this->results || !this->parameters) return;
++
++   parameters->FindParam(&step,StepEnum);
++   parameters->FindParam(&time,TimeEnum);
++   numberofelements=this->elements->NumberOfElements();
++
++   /*Compute the deviatoric stress tensor*/
++   this->ZZErrorEstimator(&stresserror);
++
++   /*Compute the thickness error*/
++   this->ThicknessZZErrorEstimator(&thicknesserror);
++
++   /*Write error estimators in Results*/
++   this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,DeviatoricStressErrorEstimatorEnum,
++                                                                  stresserror,numberofelements,1,step,time));
++
++   this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,ThicknessErrorEstimatorEnum,
++                                                                  thicknesserror,numberofelements,1,step,time));
++   /*Cleanup*/
++   xDelete<IssmDouble>(stresserror);
++   xDelete<IssmDouble>(thicknesserror);
++
++   return;
++}
++/*}}}*/
+ void FemModel::GetGroundediceLevelSet(IssmDouble **pmasklevelset){/*{{{*/
+ 
+ 	int elementswidth		= this->GetElementsWidth();//just 2D mesh, tria elements
+@@ -3211,11 +3250,8 @@
+ /*}}}*/
+ void FemModel::SmoothedDeviatoricStressTensor(IssmDouble** ptauxx,IssmDouble** ptauyy,IssmDouble** ptauxy){/*{{{*/
+ 	
+-	this->DeviatoricStressx();//itapopo
+-
+ 	int elementswidth							= this->GetElementsWidth();//just 2D mesh, tria elements
+    int numberofvertices						= this->vertices->NumberOfVertices();
+-
+    IssmDouble weight 						= 0.;
+ 	IssmDouble*	tauxx							= NULL; 
+ 	IssmDouble*	tauyy							= NULL; 
+@@ -3230,7 +3266,11 @@
+    Vector<IssmDouble>* vectauxy			= new Vector<IssmDouble>(numberofvertices);
+    Vector<IssmDouble>* vectotalweight	= new Vector<IssmDouble>(numberofvertices);
+ 	
+-   for(int i=0;i<this->elements->Size();i++){
++	/*Update the Deviatoric Stress tensor over the elements*/
++	this->DeviatoricStressx();
++	
++   /*Calculate the Smoothed Deviatoric Stress tensor*/
++	for(int i=0;i<this->elements->Size();i++){
+       Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+       element->GetInputListOnVertices(deviatoricstressxx,DeviatoricStressxxEnum);
+       element->GetInputListOnVertices(deviatoricstressyy,DeviatoricStressyyEnum);
+@@ -3298,7 +3338,7 @@
+ /*}}}*/
+ void FemModel::ZZErrorEstimator(IssmDouble** pelementerror){/*{{{*/
+ 
+-	/*Compute the Zienkiewicz and Zhu (ZZ) error estimator. 
++	/*Compute the Zienkiewicz and Zhu (ZZ) error estimator for the deviatoric stress tensor. 
+ 	 * Ref.: Zienkiewicz and Zhu, A Simple Error Estimator and Adaptive Procedure for Practical Engineering Analysis, Int. J. Numer. Meth. Eng, 1987*/
+ 
+ 	IssmDouble Jdet,error,ftxx,ftyy,ftxy;
+@@ -3341,11 +3381,11 @@
+ 				ftyy+=(tauyy[n]-smoothedtauyy[elem_vertices[n]])*basis[n];
+ 				ftxy+=(tauxy[n]-smoothedtauxy[elem_vertices[n]])*basis[n];
+ 			}
+-			error+=Jdet*gauss->weight*( std::pow(ftxx,2)+std::pow(ftyy,2)+std::pow(ftxy,2) ); 
++			error+=Jdet*gauss->weight*( std::pow(ftxx,2)+std::pow(ftyy,2)+std::pow(ftxy,2) ); //e^2 
+ 		}
+ 		/*Set the error in the global vector*/	
+       sid=element->Sid();
+-		velementerror->SetValue(sid,error,INS_VAL);	
++		velementerror->SetValue(sid,std::sqrt(error),INS_VAL);//sqrt( e^2 )
+ 		/*Cleanup intermediaries*/
+ 		xDelete<IssmDouble>(xyz_list);
+ 		delete gauss;
+@@ -3369,7 +3409,182 @@
+ 	delete velementerror;
+ }
+ /*}}}*/
++void FemModel::SmoothedGradThickness(IssmDouble** pdHdx,IssmDouble** pdHdy){/*{{{*/
+ 
++   int elementswidth                   = this->GetElementsWidth();//just 2D mesh, tria elements
++   int numberofvertices                = this->vertices->NumberOfVertices();
++
++   IssmDouble weight                   = 0.;
++   IssmDouble* dHdx                    = NULL;
++   IssmDouble* dHdy                    = NULL;
++   IssmDouble* totalweight             = NULL;
++   IssmDouble* xyz_list                = NULL;
++   IssmDouble* H                       = xNew<IssmDouble>(elementswidth);
++   IssmDouble* GradH                   = xNew<IssmDouble>(2);
++   int* elem_vertices                  = xNew<int>(elementswidth);
++   Vector<IssmDouble>* vecdHdx         = new Vector<IssmDouble>(numberofvertices);
++   Vector<IssmDouble>* vecdHdy         = new Vector<IssmDouble>(numberofvertices);
++   Vector<IssmDouble>* vectotalweight  = new Vector<IssmDouble>(numberofvertices);
++
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(H,ThicknessEnum);
++      element->GetVerticesSidList(elem_vertices);
++      element->GetVerticesCoordinates(&xyz_list);
++
++      /*Get the gradient of thickness at the center point (in fact, GradH is constante over the element)*/
++      Gauss* gauss=element->NewGauss(1);
++      gauss->GaussPoint(gauss->begin());
++      element->ValueP1DerivativesOnGauss(GradH,H,xyz_list,gauss);
++
++      /*weight to calculate the smoothed grad H*/
++      Tria* triaelement = xDynamicCast<Tria*>(element);
++      weight            = triaelement->GetArea();//the tria area is a choice for the weight
++      
++		/*dH/dx*/
++      vecdHdx->SetValue(elem_vertices[0],weight*GradH[0],ADD_VAL);
++      vecdHdx->SetValue(elem_vertices[1],weight*GradH[0],ADD_VAL);
++      vecdHdx->SetValue(elem_vertices[2],weight*GradH[0],ADD_VAL);
++      /*dH/dy*/
++      vecdHdy->SetValue(elem_vertices[0],weight*GradH[1],ADD_VAL);
++      vecdHdy->SetValue(elem_vertices[1],weight*GradH[1],ADD_VAL);
++      vecdHdy->SetValue(elem_vertices[2],weight*GradH[1],ADD_VAL);
++      /*total weight*/
++      vectotalweight->SetValue(elem_vertices[0],weight,ADD_VAL);
++      vectotalweight->SetValue(elem_vertices[1],weight,ADD_VAL);
++      vectotalweight->SetValue(elem_vertices[2],weight,ADD_VAL);
++      /*Cleanup intermediaries*/
++      xDelete<IssmDouble>(xyz_list);
++      delete gauss;
++   }
++
++   /*Assemble*/
++   vecdHdx->Assemble();
++   vecdHdy->Assemble();
++   vectotalweight->Assemble();
++
++   /*Serialize*/
++   dHdx        = vecdHdx->ToMPISerial();
++   dHdy        = vecdHdy->ToMPISerial();
++   totalweight = vectotalweight->ToMPISerial();
++
++   /*Divide for the total weight*/
++   for(int i=0;i<numberofvertices;i++){
++      _assert_(totalweight[i]>0);
++      dHdx[i] = dHdx[i]/totalweight[i];
++      dHdy[i] = dHdy[i]/totalweight[i];
++   }
++
++   /*Set output*/
++   (*pdHdx) = dHdx;
++   (*pdHdy) = dHdy;
++
++ 	/*Cleanup*/
++   delete vecdHdx;
++   delete vecdHdy;
++   delete vectotalweight;
++   xDelete<IssmDouble>(H);
++   xDelete<IssmDouble>(GradH);
++   xDelete<IssmDouble>(totalweight);
++   xDelete<int>(elem_vertices);
++}
++/*}}}*/
++void FemModel::ThicknessZZErrorEstimator(IssmDouble** pelementerror){/*{{{*/
++   /*Compute the Zienkiewicz and Zhu (ZZ) error estimator for the thickness
++    * Ref.: Zienkiewicz and Zhu, A Simple Error Estimator and Adaptive Procedure for Practical Engineering Analysis, Int. J. Numer. Meth. Eng, 1987*/
++
++   IssmDouble Jdet,error,fdHdx,fdHdy;
++   int sid;
++   int numnodes                     = this->GetElementsWidth();//just 2D mesh, tria elements, P1
++   int numberofelements             = this->elements->NumberOfElements();
++   IssmDouble* xyz_list             = NULL;
++   IssmDouble* smoothed_dHdx        = NULL;
++   IssmDouble* smoothed_dHdy        = NULL;
++   IssmDouble* H                    = xNew<IssmDouble>(numnodes);
++   IssmDouble* GradH                = xNew<IssmDouble>(2);
++   IssmDouble* basis                = xNew<IssmDouble>(numnodes);
++   int* elem_vertices               = xNew<int>(numnodes);
++   Vector<IssmDouble>* velementerror= new Vector<IssmDouble>(numberofelements);
++
++   /*Get smoothed deviatoric stress tensor*/
++   this->SmoothedGradThickness(&smoothed_dHdx,&smoothed_dHdy);
++   
++	/*Integrate the error over elements*/
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(H,ThicknessEnum);
++      element->GetVerticesSidList(elem_vertices);
++      element->GetVerticesCoordinates(&xyz_list);
++      /*Get the gradient of thickness*/
++      Gauss* gaussH=element->NewGauss(1);
++      gaussH->GaussPoint(gaussH->begin());
++      element->ValueP1DerivativesOnGauss(GradH,H,xyz_list,gaussH);
++      /*Integrate*/
++      Gauss* gauss=element->NewGauss(2);
++      error=0.;
++      for(int ig=gauss->begin();ig<gauss->end();ig++){
++         gauss->GaussPoint(ig);
++         element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++         element->NodalFunctions(basis,gauss);
++         fdHdx=0;fdHdy=0;
++         for(int n=0;n<numnodes;n++) {
++            fdHdx+=(GradH[0]-smoothed_dHdx[elem_vertices[n]])*basis[n];
++            fdHdy+=(GradH[1]-smoothed_dHdy[elem_vertices[n]])*basis[n];
++         }
++         error+=Jdet*gauss->weight*( std::pow(fdHdx,2)+std::pow(fdHdy,2) ); //e^2
++      }
++      /*Set the error in the global vector*/
++      sid=element->Sid();
++      velementerror->SetValue(sid,std::sqrt(error),INS_VAL);//sqrt( e^2 )
++      /*Cleanup intermediaries*/
++      xDelete<IssmDouble>(xyz_list);
++      delete gaussH;
++      delete gauss;
++   }
++
++   /*Assemble*/
++   velementerror->Assemble();
++
++   /*Serialize and set output*/
++   (*pelementerror)=velementerror->ToMPISerial();
++
++   /*Cleanup*/
++   xDelete<IssmDouble>(smoothed_dHdx);
++   xDelete<IssmDouble>(smoothed_dHdy);
++   xDelete<IssmDouble>(H);
++   xDelete<IssmDouble>(GradH);
++   xDelete<IssmDouble>(basis);
++   xDelete<int>(elem_vertices);
++   delete velementerror;
++}
++/*}}}*/
++void FemModel::MeanGroundedIceLevelSet(IssmDouble** pmasklevelset){/*{{{*/
++
++   int elementswidth                   = this->GetElementsWidth();
++   int numberofelements                = this->elements->NumberOfElements();
++   IssmDouble* elementlevelset         = xNew<IssmDouble>(elementswidth);
++   Vector<IssmDouble>* vmasklevelset   = new Vector<IssmDouble>(numberofelements);
++
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(elementlevelset,MaskGroundediceLevelsetEnum);
++      int sid = element->Sid();
++      vmasklevelset->SetValue(sid,(elementlevelset[0]+elementlevelset[1]+elementlevelset[2])/3.,INS_VAL);
++   }
++
++   /*Assemble*/
++   vmasklevelset->Assemble();
++
++   /*Serialize and set output*/
++   (*pmasklevelset)=vmasklevelset->ToMPISerial();
++
++   /*Cleanup*/
++   xDelete<IssmDouble>(elementlevelset);
++   delete vmasklevelset;
++
++}
++/*}}}*/
++
+ #ifdef  _HAVE_DAKOTA_
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+ 
+@@ -4159,66 +4374,65 @@
+ #endif
+ 
+ #ifdef _HAVE_NEOPZ_
+-void FemModel::ReMeshNeopz(int* pnumberofvertices,int* pnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
++void FemModel::ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist){/*{{{*/
+ 
+-	/*elements is in Matlab indexing*/
+-	int my_rank						= IssmComm::GetRank();
+-	int numberofsegments			= -1;
+-	int numberofvertices,numberofelements;
+-	IssmDouble* vx					= NULL; //itapopo this is not being used
+-	IssmDouble* vy					= NULL; //itapopo this is not being used
+-	IssmDouble* x					= NULL;
+-	IssmDouble* y					= NULL;
+-	IssmDouble* z					= NULL;
+-	int* elementslist				= NULL;
+-	int* segments					= NULL;
+-	IssmDouble* masklevelset	= NULL;
+-	IssmDouble* pelementerror	= NULL;
+-	const int elementswidth		= this->GetElementsWidth();//just 2D mesh, tria elements
++	/*pnewelementslist keep vertices in Matlab indexing*/
++   int my_rank                         = IssmComm::GetRank();
++   bool amr_verbose                    = true; //itapopo
++   IssmDouble* x                       = NULL;
++   IssmDouble* y                       = NULL;
++   IssmDouble* z                       = NULL;
++   int* elementslist                   = NULL;
++   int oldnumberofelements             = this->elements->NumberOfElements();
++   int newnumberofvertices 				= -1;
++	int newnumberofelements 				= -1;
++	IssmDouble* partiallyfloatedelements= NULL;//itapopo verify if it will be used
++   IssmDouble* masklevelset            = NULL;
++   IssmDouble* deviatorictensorerror   = NULL;
++   IssmDouble* thicknesserror          = NULL;	
+ 
+-	/*Solutions which will be used to refine the elements*/
+-	this->GetGroundediceLevelSet(&masklevelset);//itapopo verificar se já existe um método igual a esse
++	/*Get the elements in which grounding line goes through*/
++   //itapopo verificar se irá usar esse this->GetPartiallyFloatedElements(&partiallyfloatedelements);
++   /*Get mean mask level set over each element*/
++   this->MeanGroundedIceLevelSet(&masklevelset);
++   /*Get the deviatoric error estimator*/
++   this->ZZErrorEstimator(&deviatorictensorerror);
++   /*Get the thickness error estimator*/
++   this->ThicknessZZErrorEstimator(&thicknesserror);
+ 
+-	//Compute the ZZ error estimator per element
+-	this->ZZErrorEstimator(&pelementerror);
+-
+-	_printf0_("P Element error\n");
+-	for(int i=0;i<this->elements->NumberOfElements();i++)	_printf0_(""<<pelementerror[i]<< "\n");
+-	_printf0_("\n");
+-
+ 	if(my_rank==0){
+-		int type_process=1; //1: it refines father mesh. See AdaptiveMeshRefinement.h (.cpp)
+-		this->amr->ExecuteRefinement(type_process,vx,vy,masklevelset,
+-					numberofvertices,numberofelements,numberofsegments,&x,&y,&z,&elementslist,&segments);
+-		if(numberofvertices<=0 || numberofelements<=0 /*|| newnumberofsegments<=0*/) _error_("Error in the refinement process.");
++		this->amr->Execute(amr_verbose,oldnumberofelements,partiallyfloatedelements,masklevelset,deviatorictensorerror,thicknesserror,
++                           newnumberofvertices,newnumberofelements,&x,&y,&elementslist);
++      z=xNewZeroInit<IssmDouble>(newnumberofvertices);
++		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the ReMeshNeopz.");
+ 	}
+ 	else{
+-		x=xNew<IssmDouble>(numberofvertices);
+-		y=xNew<IssmDouble>(numberofvertices);
+-		z=xNew<IssmDouble>(numberofvertices);
+-		elementslist=xNew<int>(numberofelements*this->GetElementsWidth());
++		x=xNew<IssmDouble>(newnumberofvertices);
++		y=xNew<IssmDouble>(newnumberofvertices);
++		z=xNew<IssmDouble>(newnumberofvertices);
++		elementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
+ 	}
+ 
+ 	/*Send new mesh to others CPU*/
+-	ISSM_MPI_Bcast(&numberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&numberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(x,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(y,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(z,numberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(elementslist,numberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(x,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(y,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(z,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(elementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
+ 
+ 	/*Assign the pointers*/	
+-	(*pelementslist) = elementslist; //Matlab indexing
+-	(*px)				  = x;
+-	(*py)				  = y;
+-	(*pz)				  = z;
+-	*pnumberofelements = numberofelements;
+-	*pnumberofvertices = numberofvertices;
++	(*pnewelementslist) 	= elementslist; //Matlab indexing
++	(*pnewx)				  	= x;
++	(*pnewy)				  	= y;
++	(*pnewz)				  	= z;
++	*pnewnumberofvertices= newnumberofvertices;
++	*pnewnumberofelements= newnumberofelements;
+ 
+ 	/*Cleanup*/
+-	if(segments) xDelete<int>(segments);
+ 	xDelete<IssmDouble>(masklevelset);
+-	xDelete<IssmDouble>(pelementerror);
++	xDelete<IssmDouble>(deviatorictensorerror);
++   xDelete<IssmDouble>(thicknesserror);
+ 
+ }
+ /*}}}*/
+@@ -4228,7 +4442,6 @@
+ 	int my_rank						= IssmComm::GetRank();
+ 	int numberofvertices			= this->vertices->NumberOfVertices();
+ 	int numberofelements			= this->elements->NumberOfElements();
+-	int numberofsegments			= 0; //used on matlab
+ 	IssmDouble* x					= NULL;
+ 	IssmDouble* y					= NULL;
+ 	IssmDouble* z					= NULL;
+@@ -4281,7 +4494,7 @@
+ 			this->amr = new AdaptiveMeshRefinement();
+ 			//this->amr->SetLevelMax(levelmax); //Set max level of refinement
+ 			//this->amr->SetRegions(regionlevel1,regionlevelmax);
+-			this->amr->CreateInitialMesh(numberofvertices,numberofelements,numberofsegments,elementswidth,x,y,z,elements,NULL);
++			this->amr->CreateInitialMesh(numberofvertices,numberofelements,elementswidth,x,y,elements);
+ 		}
+ 		this->amr->SetLevelMax(levelmax); //Set max level of refinement
+ 		this->amr->SetRegions(regionlevel1,regionlevelmax);
+@@ -4297,10 +4510,8 @@
+ void FemModel::SetRefPatterns(){/*{{{*/
+ 
+    /*Initialize the global variable of refinement patterns*/
+-   gRefDBase.InitializeUniformRefPattern(EOned);
+    gRefDBase.InitializeUniformRefPattern(ETriangle);
+ 
+-    //gRefDBase.InitializeRefPatterns();
+    /*Insert specifics patterns to ISSM core*/
+    std::string filepath  = REFPATTERNDIR;
+    std::string filename1 = filepath + "/2D_Triang_Rib_3.rpt";
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21805)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21806)
+@@ -843,6 +843,8 @@
+ 	AmrHmaxEnum,
+ 	AmrFieldEnum,
+ 	AmrErrEnum,
++	DeviatoricStressErrorEstimatorEnum,
++	ThicknessErrorEstimatorEnum,
+ 	/*}}}*/
+ 	ParametersENDEnum,
+ 	/*Coordinate Systems{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21805)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21806)
+@@ -819,6 +819,8 @@
+ 		case AmrHmaxEnum : return "AmrHmax";
+ 		case AmrFieldEnum : return "AmrField";
+ 		case AmrErrEnum : return "AmrErr";
++		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
++		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+ 		case ParametersENDEnum : return "ParametersEND";
+ 		case XYEnum : return "XY";
+ 		case XYZEnum : return "XYZ";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21805)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21806)
+@@ -837,6 +837,8 @@
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+ 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+ 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
++	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
++	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+-	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+-	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Penpair")==0) return PenpairEnum;
++	      if (strcmp(name,"Moulin")==0) return MoulinEnum;
++	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
++	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+ 	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+-	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+-	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"P0")==0) return P0Enum;
++	      if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
++	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
++	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21806-21807.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21806-21807.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21806-21807.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21806)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21807)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,1e-09,1e-09,1e-09,2e-04,2e-04,1e-09,1e-10,1e-13};
++	4e-10,9e-09,5e-09,1e-09,6e-04,3e-04,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21806)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21807)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,4e-09,2e-09,2e-09,4e-04,4e-04,1e-09,1e-10,1e-13};
++	1e-10,5e-09,3e-09,2e-7,4e-04,4e-04,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21807-21808.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21807-21808.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21807-21808.diff	(revision 22755)
@@ -0,0 +1,1187 @@
+Index: ../trunk-jpl/src/m/classes/regionaloutput.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/regionaloutput.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/regionaloutput.m	(revision 21808)
+@@ -0,0 +1,106 @@
++%REGIONALOUTPUT class definition
++%
++%   Usage:
++%      regionaloutput=regionaloutput();
++%      regionaloutput=regionaloutput('name','Volume1','definitionstring','Outputdefinition1','outputnamestring','IceVolume',...
++%                    'mask',mask);
++%      regionaloutput=regionaloutput('name','Volume1','definitionstring','Outputdefinition1','outputnamestring','IceVolume',...
++%                    'maskexpstring','Exp/Mask.exp','model',md)
++% 
++%   where mask is a vectorial field of size md.mesh.numberofvertices,1 : where vertices with values > 1 are to be included in the calculated region.
++%   Alternatively, the user can pass in an Argus file and model object instead of a mask, and mask will be calculated for the user
++%
++%   See also: MISFIT, MASSCON, MASSCONAXPBY
++
++classdef regionaloutput
++	properties (SetAccess=public)
++		%regionaloutput
++		name              = '';
++		definitionstring  = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
++		outputnamestring  = ''; %string that identifies the type of output you want, eg. IceVolume, TotalSmb, GroudedArea
++		mask              = NaN; %mask vectorial field which identifies the region of interest (value > 0 will be included)
++		maskexpstring     = '';
++	end
++	
++	methods
++		function self = extrude(self,md) % {{{
++			if ~isnan(self.mask)
++				self.mask=project3d(md,'vector',self.mask,'type','node');
++			end
++		end % }}}
++		function self = regionaloutput(varargin) % {{{
++			if nargin==0,
++				self=setdefaultparameters(self);
++			else
++				%use provided options to change fields
++				options=pairoptions(varargin{:});
++
++				%get name
++				self.name=getfieldvalue(options,'name','');
++				if nargin==8
++					self.mask=getfieldvalue(options,'mask',NaN);
++					if isnan(self.mask)
++						error('regionaloutput error message: ''mask'' field or ''maskexpstring'' and ''model'' fields should be defined!');
++					end
++				elseif nargin==10
++					modelname=getfieldvalue(options,'model');
++					self.maskexpstring=getfieldvalue(options,'maskexpstring');
++					self=setmaskfromexp(self,modelname);
++				else
++					error('regionaloutput error message: ''mask'' field or ''maskexpstring'' and ''model'' fields should be defined!');
++				end
++		
++				self.definitionstring=getfieldvalue(options,'definitionstring');
++				self.outputnamestring=getfieldvalue(options,'outputnamestring');
++
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++		end % }}}
++		function self = setmaskfromexp(self,md) % {{{
++
++			if length(self.maskexpstring)>0
++				self.mask=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,self.maskexpstring,'node',1);
++			end
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			if ~ischar(self.name),
++				error('regionaloutput error message: ''name'' field should be a string!');
++			end
++			if ~ischar(self.outputnamestring),
++				error('regionaloutput error message: ''outputnamestring'' field should be a string!');
++			end
++			
++			OutputdefinitionStringArray={};
++			for i=1:100
++				OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
++			end
++			self=setmaskfromexp(self,md);
++
++			md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
++			md = checkfield(md,'fieldname','self.mask','field',self.mask,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++
++		end % }}}
++		function md = disp(self) % {{{
++		
++			disp(sprintf('   Regionaloutput:\n'));
++
++			fielddisplay(self,'name','identifier for this regional response');
++			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-100]''');
++			fielddisplay(self,'outputnamestring','string that identifies the type of output you want, eg. IceVolume, TotalSmb, GroudedArea');
++			fielddisplay(self,'mask','mask vectorial field which identifies the region of interest (value > 0 will be included)');
++			fielddisplay(self,'maskexpstring','name of Argus file that can be passed in to define the regional mask');
++
++		end % }}}
++		function md = marshall(self,prefix,md,fid) % {{{
++
++			self=setmaskfromexp(self,md);
++			WriteData(fid,prefix,'data',self.name,'name','md.regionaloutput.name','format','String');
++			WriteData(fid,prefix,'data',self.definitionstring,'name','md.regionaloutput.definitionstring','format','String');
++			WriteData(fid,prefix,'data',self.outputnamestring,'name','md.regionaloutput.outputnamestring','format','String');
++			WriteData(fid,prefix,'data',self.mask,'name','md.regionaloutput.mask','format','DoubleMat','mattype',1);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 21807)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 21808)
+@@ -34,10 +34,13 @@
+ 
+ 		string="   Massfluxatgate:"
+ 		string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this massfluxatgate response'))
+-		string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-10]'))
++		string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-100]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)'))
+ 		return string
+ 		#}}}
++	def extrude(self,md): # {{{
++		return self
++	   #}}}
+ 	def setdefaultparameters(self): # {{{
+ 		return self
+ 	#}}}
+@@ -48,9 +51,14 @@
+ 			
+ 		if  not isinstance(self.profilename, basestring):
+ 			raise RuntimeError("massfluxatgate error message: 'profilename' field should be a string!") 
+-
+-			md = checkfield(md,'field',self.definitionstring,'values',['Outputdefinition1','Outputdefinition2','Outputdefinition3','Outputdefinition4','Outputdefinition5','Outputdefinition6','Outputdefinition7','Outputdefinition8','Outputdefinition9','Outputdefinition10'])
+ 		
++		OutputdefinitionStringArray=[]
++		for i in range(1,100):
++			x='Outputdefinition'+str(i)
++			OutputdefinitionStringArray.append(x)
++			
++		md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray)
++		
+ 		#check the profilename points to a file!: 
+ 		if not os.path.isfile(self.profilename):
+ 			raise RuntimeError("massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!")
+Index: ../trunk-jpl/src/m/classes/outputdefinition.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 21807)
++++ ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 21808)
+@@ -21,6 +21,12 @@
+ 
+ 		return string
+ 		#}}}
++	def extrude(self,md): # {{{
++		for definition in self.definitions:
++			definition.extrude(md);
++
++		return self
++	 #}}}
+ 	def setdefaultparameters(self): # {{{
+ 		return self
+ 		#}}}
+Index: ../trunk-jpl/src/m/classes/massconaxpby.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massconaxpby.m	(revision 21807)
++++ ../trunk-jpl/src/m/classes/massconaxpby.m	(revision 21808)
+@@ -2,26 +2,28 @@
+ %
+ %   Usage:
+ %      massconaxpby=massconaxpby();
+-%      massconaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5); 
++%      massconaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5,'definitionstring','Outputdefinition1'); 
+ % 
+ %   where name is the name of the massconaxpby object, namex is the name of the first masscon, namey the name of the second masscon and alpha,beta the 
+ %         multiplicators. The meaning of axpby here is: resulting masscon is the linear combination (alpha *x + beta * y) 
+ %         of two masscons.
+ %
+-%   See also: MASSCON
++%   See also: MASSCON, REGIONALOUTPUT
+ 
+ classdef massconaxpby
+ 	properties (SetAccess=public)
+ 		%masscon axpby
+-		name              = '';
++		name               = '';
+ 		definitionstring   = ''; %String that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
+ 		namex              = '';
+ 		namey              = '';
+ 		alpha              = NaN;
+-		beta              = NaN;
++		beta               = NaN;
+ 	end
+ 	
+ 	methods
++		function self = extrude(self,md) % {{{
++		end % }}}
+ 		function self = massconaxpby(varargin) % {{{
+ 			if nargin==0,
+ 				self=setdefaultparameters(self);
+@@ -64,7 +66,7 @@
+ 		end % }}}
+ 		function md = disp(self) % {{{
+ 		
+-			disp(sprintf('   Misfit:\n'));
++			disp(sprintf('   Massconaxpby:\n'));
+ 
+ 			fielddisplay(self,'name','name');
+ 			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-10]');
+@@ -76,12 +78,13 @@
+ 		end % }}}
+ 		function md = marshall(self,prefix,md,fid) % {{{
+ 
+-		WriteData(fid,prefix,'data',self.name,'name','md.massconaxpby.name','format','String');
+-		WriteData(fid,prefix,'data',self.definitionstring,'name','md.massconaxpby.definitionstring','format','String');
+-		WriteData(fid,prefix,'data',self.namex,'name','md.massconaxpby.namex','format','String');
+-		WriteData(fid,prefix,'data',self.namey,'name','md.massconaxpby.namey','format','String');
+-		WriteData(fid,prefix,'data',self.alpha,'name','md.massconaxpby.alpha','format','Double');
+-		WriteData(fid,prefix,'data',self.beta,'name','md.massconaxpby.beta','format','Double');
++			WriteData(fid,prefix,'data',self.name,'name','md.massconaxpby.name','format','String');
++			WriteData(fid,prefix,'data',self.definitionstring,'name','md.massconaxpby.definitionstring','format','String');
++			WriteData(fid,prefix,'data',self.namex,'name','md.massconaxpby.namex','format','String');
++			WriteData(fid,prefix,'data',self.namey,'name','md.massconaxpby.namey','format','String');
++			WriteData(fid,prefix,'data',self.alpha,'name','md.massconaxpby.alpha','format','Double');
++			WriteData(fid,prefix,'data',self.beta,'name','md.massconaxpby.beta','format','Double');
++
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/regionaloutput.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/regionaloutput.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/regionaloutput.py	(revision 21808)
+@@ -0,0 +1,103 @@
++from fielddisplay import fielddisplay
++from pairoptions import pairoptions
++from checkfield import checkfield
++from WriteData import WriteData
++from MeshProfileIntersection import MeshProfileIntersection
++import os
++
++class regionaloutput(object):
++	"""
++	REGIONALOUTPUT class definition
++	
++	   Usage:
++	      regionaloutput=regionaloutput();
++	      regionaloutput=regionaloutput('name','Volume1','definitionstring','Outputdefinition1','outputnamestring','IceVolume','mask',mask);
++	      regionaloutput=regionaloutput('name','Volume1','definitionstring','Outputdefinition1','outputnamestring','IceVolume','maskexpstring','Exp/Mask.exp','model',md)
++	
++	   where mask is a vectorial field of size md.mesh.numberofvertices,1 : where vertices with values > 1 are to be included in the calculated region.
++	   Alternatively, the user can pass in an Argus file and model object instead of a mask, and mask will be calculated for the user
++	"""
++
++	def __init__(self,*args): # {{{
++
++		self.name              = ''
++		self.definitionstring  = ''
++		self.outputnamestring  = ''
++		self.mask              = float('NaN')
++		self.maskexpstring     = ''
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#use provided options to change fields
++		options=pairoptions(*args)
++
++		#OK get other fields
++		self=options.AssignObjectFields(self)
++
++		#get name
++		modelname=getfieldvalue(options,'model');
++		self.maskexpstring=getfieldvalue(options,'maskexpstring');
++		self.setmaskfromexp(self,md)
++		error('regionaloutput error message: ''mask'' field or ''maskexpstring'' and ''model'' fields should be defined!');
++
++		#}}}
++	def __repr__(self): # {{{
++
++		string="   Regionaloutput:"
++		string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this regional response'))
++		string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-100]'))
++		string="%s\n%s"%(string,fielddisplay(self,'outputnamestring','string that identifies the type of output you want, eg. IceVolume, TotalSmb, GroudedArea'))
++		string="%s\n%s"%(string,fielddisplay(self,'mask','mask vectorial field which identifies the region of interest (value > 0 will be included)'))
++		string="%s\n%s"%(string,fielddisplay(self,'maskexpstring','name of Argus file that can be passed in to define the regional mask'))
++		return string
++		#}}}
++	def extrude(self,md): # {{{
++		self.mask=project3d(md,'vector',self.mask,'type','node')
++		return self
++	   #}}}
++	def setdefaultparameters(self): # {{{
++		return self
++	#}}}
++	def setmaskfromexp(self,md):    # {{{
++		if len(self.maskexpstring,0) > 0:
++			self.mask=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,self.maskexpstring,'node',1)
++			
++		return self
++	 # }}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		
++		if  not isinstance(self.name, basestring):
++			raise RuntimeError("regionaloutput error message: 'name' field should be a string!")
++			
++		if  not isinstance(self.outputnamestring, basestring):
++			raise RuntimeError("regionaloutput error message: 'outputnamestring' field should be a string!") 
++		
++		if len(self.maskexpstring,0) > 0:
++			if not os.path.isfile(self.profilename):
++				raise RuntimeError("regionaloutput error message: file name for mask exp does not point to a legitimate file on disk!")
++			else:
++				self.setmaskfromexp(self,md)
++
++		OutputdefinitionStringArray=[]
++		for i in range(1,100):
++			x='Outputdefinition'+str(i)
++			OutputdefinitionStringArray.append(x)
++
++		md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray])
++      md = checkfield(md,'field',self.mask,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1)
++		
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++
++		#before marshalling, make sure mask is set: 
++		self.setmaskfromexp(self,md)
++
++		#ok, marshall strings and mask: 
++		WriteData(fid,prefix,'data',self.name,'name','md.regionaloutput.name','format','String')
++		WriteData(fid,prefix,'data',self.definitionstring,'name','md.regionaloutput.definitionstring','format','String')
++		WriteData(fid,prefix,'data',self.outputnamestring,'name','md.regionaloutput.outputnamestring','format','String');
++		WriteData(fid,prefix,'data',self.mask,'name','md.regionaloutput.mask','format','DoubleMat','mattype',1);
++
++	# }}}
+
+Property changes on: ../trunk-jpl/src/m/classes/regionaloutput.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 21807)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 21808)
+@@ -466,6 +466,23 @@
+ 							else:
+ 								setattr(fieldr,solutionsubfield,subfield)
+ 
++		#OutputDefinitions fields
++		if md1.outputdefinition.definitions:
++			for solutionfield,field in md1.outputdefinition.__dict__.iteritems():
++				if isinstance(field,list):
++					#get each definition
++					for i,fieldi in enumerate(field):
++						if fieldi:
++							fieldr=getattr(md2.outputdefinition,solutionfield)[i]
++							#get subfields
++							for solutionsubfield,subfield in fieldi.__dict__.iteritems():
++								if   np.size(subfield)==numberofvertices1:
++									setattr(fieldr,solutionsubfield,subfield[pos_node])
++								elif np.size(subfield)==numberofelements1:
++									setattr(fieldr,solutionsubfield,subfield[pos_elem])
++								else:
++									setattr(fieldr,solutionsubfield,subfield)
++
+ 		#Keep track of pos_node and pos_elem
+ 		md2.mesh.extractedvertices=pos_node+1
+ 		md2.mesh.extractedelements=pos_elem+1
+@@ -648,6 +665,7 @@
+ 		md.mask.extrude(md)
+ 		md.qmu.extrude(md)
+ 		md.basalforcings.extrude(md)
++		md.outputdefinition.extrude(md)
+ 
+ 		#increase connectivity if less than 25:
+ 		if md.mesh.average_vertex_connectivity<=25:
+@@ -713,14 +731,14 @@
+ 			md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1)
+ 
+ 
+-                # Hydrologydc variables
+-                if hasattr(md.hydrology,'hydrologydc'):
+-                    md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1)
+-                    md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1)
+-                    md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1)
+-                    md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1)
+-                    if md.hydrology.isefficientlayer == 1:
+-                        md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1)
++      # Hydrologydc variables
++		if hasattr(md.hydrology,'hydrologydc'):
++			md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1)
++			md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1)
++			md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1)
++			md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1)
++			if md.hydrology.isefficientlayer == 1:
++				md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1)
+ 
+ 		#boundary conditions
+ 		md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers)
+@@ -761,6 +779,23 @@
+ 		md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1)
+ 		md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1)
+ 
++		#OutputDefinitions
++		if md.outputdefinition.definitions:
++			for solutionfield,field in md.outputdefinition.__dict__.iteritems():
++				if isinstance(field,list):
++					#get each definition
++					for i,fieldi in enumerate(field):
++						if fieldi:
++							fieldr=getattr(md.outputdefinition,solutionfield)[i]
++							#get subfields
++							for solutionsubfield,subfield in fieldi.__dict__.iteritems():
++								if   np.size(subfield)==md.mesh.numberofvertices:
++									setattr(fieldr,solutionsubfield,project2d(md,subfield,1))
++								elif np.size(subfield)==md.mesh.numberofelements:
++									setattr(fieldr,solutionsubfield,project2d(md,subfield,1))
++								else:
++									setattr(fieldr,solutionsubfield,subfield)
++
+ 		#Initialize with the 2d mesh
+ 		mesh=mesh2d()
+ 		mesh.x=md.mesh.x2d
+Index: ../trunk-jpl/src/m/classes/masscon.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masscon.m	(revision 21807)
++++ ../trunk-jpl/src/m/classes/masscon.m	(revision 21808)
+@@ -2,22 +2,27 @@
+ %
+ %   Usage:
+ %      masscon=masscon();
+-%      masscon=masscon('name','MassCon58',... %name of a North-East Greenland JPL MassCon
++%      masscon=masscon('name','MassCon58','definitionstring','Outputdefinition1',... %name of a North-East Greenland JPL MassCon
+ %                    'levelset',level);
+ % 
+ %   where level is a levelset vectorial field.
+ %
+-%   See also: MISFIT
++%   See also: MISFIT, MASSCONAXPBY, REGIONALOUTPUT
+ 
+ classdef masscon
+ 	properties (SetAccess=public)
+ 		%masscon
+ 		name              = '';
+-		definitionstring   = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
++		definitionstring  = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
+ 		levelset          = NaN; %levelset vectorial field which identifies the boundaries of the masscon
+ 	end
+ 	
+ 	methods
++		function self = extrude(self,md) % {{{
++			if ~isnan(self.levelset)
++				self.levelset=project3d(md,'vector',self.levelset,'type','node');
++			end
++		end % }}}
+ 		function self = masscon(varargin) % {{{
+ 			if nargin==0,
+ 				self=setdefaultparameters(self);
+@@ -39,20 +44,20 @@
+ 			if ~ischar(self.name),
+ 				error('masscon error message: ''name'' field should be a string!');
+ 			end
+-			
++
+ 			OutputdefinitionStringArray={};
+ 			for i=1:100
+ 				OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
+ 			end
+ 
+-			md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values','Outputdefinition');
++			md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
+ 			md = checkfield(md,'fieldname','self.levelset','field',self.levelset,'timeseries',1,'NaN',1,'Inf',1);
+ 
+ 		end % }}}
+ 		function md = disp(self) % {{{
+-		
+-			disp(sprintf('   Misfit:\n'));
+ 
++			disp(sprintf('   Masscon:\n'));
++
+ 			fielddisplay(self,'name','identifier for this masscon response');
+ 			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10]''');
+ 			fielddisplay(self,'levelset','levelset vectorial field which identifies the boundaries of the masscon');
+@@ -60,9 +65,9 @@
+ 		end % }}}
+ 		function md = marshall(self,prefix,md,fid) % {{{
+ 
+-		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
+-		WriteData(fid,prefix,'object',self,'fieldname','definitionstring','format','String');
+-		WriteData(fid,prefix,'object',self,'fieldname','levelset','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'data',self.name,'name','md.masscon.name','format','String');
++			WriteData(fid,prefix,'data',self.definitionstring,'name','md.masscon.definitionstring','format','String');
++			WriteData(fid,prefix,'data',self.levelset,'name','md.masscon.levelset','format','DoubleMat','mattype',1);
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 21807)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 21808)
+@@ -8,6 +8,11 @@
+ 		definitions                 = {};
+ 	end
+ 	methods
++		function self = extrude(self,md) % {{{
++			for i=1:length(self.definitions)
++				self.definitions{i}=extrude(self.definitions{i},md);
++			end
++		end % }}}
+ 		function self = outputdefinition(varargin) % {{{
+ 			switch nargin
+ 				case 0
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 21807)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 21808)
+@@ -15,6 +15,8 @@
+ 		segments        = NaN;
+ 	end
+ 	methods
++		function self = extrude(self,md) % {{{
++		end % }}}
+ 		function self = massfluxatgate(varargin) % {{{
+ 			if nargin==0,
+ 				self=setdefaultparameters(self);
+@@ -55,7 +57,7 @@
+ 
+ 			fielddisplay(self,'name','identifier for this massfluxatgate response');
+ 			fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)');
+-			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10]''');
++			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-100]''');
+ 			
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21807)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21808)
+@@ -702,6 +702,7 @@
+ 	OutputdefinitionListEnum,
+ 	MassfluxatgateEnum,
+ 	NodalvalueEnum,
++	RegionaloutputEnum,
+ 	VxObsEnum,
+ 	VyObsEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21808)
+@@ -696,6 +696,7 @@
+ 		case OutputdefinitionListEnum : return "OutputdefinitionList";
+ 		case MassfluxatgateEnum : return "Massfluxatgate";
+ 		case NodalvalueEnum : return "Nodalvalue";
++		case RegionaloutputEnum : return "Regionaloutput";
+ 		case VxObsEnum : return "VxObs";
+ 		case VyObsEnum : return "VyObs";
+ 		case AbsoluteEnum : return "Absolute";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21808)
+@@ -711,6 +711,7 @@
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+ 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
++	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+ 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 21808)
+@@ -182,20 +182,21 @@
+ 
+ 				/*masscon variables: */
+ 				int          nummasscons;
+-				char**       masscon_name_s					= NULL;    
+-				int*         masscon_definitionenum_s		= NULL;    
++				char**       masscon_name_s               = NULL;
++				char**       masscon_definitionstring_s   = NULL;
+ 				IssmDouble** masscon_levelset_s           = NULL;
+-				int*         masscon_levelset_M_s			= NULL;
+-				int*         masscon_levelset_N_s			= NULL;
++				int*         masscon_levelset_M_s         = NULL;
++				int*         masscon_levelset_N_s         = NULL;
+ 
+ 				/*Fetch name and levelset, etc ... (see src/m/classes/masscon.m): */
+ 				iomodel->FetchMultipleData(&masscon_name_s,&nummasscons,                                                "md.masscon.name");
+-				iomodel->FetchMultipleData(&masscon_definitionenum_s,&nummasscons,                                      "md.masscon.definitionenum");
++				iomodel->FetchMultipleData(&masscon_definitionstring_s,&nummasscons,                                    "md.masscon.definitionstring");
+ 				iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,"md.masscon.levelset");
++
+ 				for(j=0;j<nummasscons;j++){
+ 
+ 					/*Create a masscon object: */
+-					output_definitions->AddObject(new Masscon(masscon_name_s[j],masscon_definitionenum_s[j],masscon_levelset_s[j],masscon_levelset_M_s[j]));
++					output_definitions->AddObject(new Masscon(masscon_name_s[j],StringToEnumx(masscon_definitionstring_s[j]),masscon_levelset_s[j],masscon_levelset_M_s[j]));
+ 
+ 				}
+ 
+@@ -205,6 +206,7 @@
+ 					IssmDouble* matrix = NULL;
+ 
+ 					string = masscon_name_s[j];    xDelete<char>(string);
++					string = masscon_definitionstring_s[j];    xDelete<char>(string);
+ 					matrix = masscon_levelset_s[j]; xDelete<IssmDouble>(matrix);
+ 				}
+ 				xDelete<char*>(masscon_name_s);
+@@ -211,7 +213,8 @@
+ 				xDelete<IssmDouble*>(masscon_levelset_s);
+ 				xDelete<int>(masscon_levelset_M_s);
+ 				xDelete<int>(masscon_levelset_N_s);
+-				xDelete<int>(masscon_definitionenum_s);
++				xDelete<char*>(masscon_definitionstring_s);
++
+ 				/*}}}*/
+ 			}
+ 			else if (output_definition_enums[i]==MassconaxpbyEnum){
+@@ -256,6 +259,48 @@
+ 				xDelete<IssmDouble>(masscon_beta_s);
+ 				/*}}}*/
+ 			}
++			else if (output_definition_enums[i]==RegionaloutputEnum){
++				/*Deal with regional output: {{{*/
++
++				/*masscon variables: */
++				int          numout;
++				char**       reg_name_s               = NULL;
++				char**       reg_definitionstring_s   = NULL;
++				char**       reg_outputnamestring_s   = NULL;
++				IssmDouble** reg_mask_s               = NULL;
++				int*         reg_mask_M_s             = NULL;
++				int*         reg_mask_N_s             = NULL;
++
++				/*Fetch name and mask, etc ... (see src/m/classes/regionaloutput.m): */
++				iomodel->FetchMultipleData(&reg_name_s,&numout,                                                "md.regionaloutput.name");
++				iomodel->FetchMultipleData(&reg_definitionstring_s,&numout,                                    "md.regionaloutput.definitionstring");
++				iomodel->FetchMultipleData(&reg_outputnamestring_s,&numout,                                    "md.regionaloutput.outputnamestring");
++				iomodel->FetchMultipleData(&reg_mask_s,&reg_mask_M_s,&reg_mask_N_s,&numout,                    "md.regionaloutput.mask");
++				for(j=0;j<numout;j++){
++
++					/*Create a masscon object: */
++					output_definitions->AddObject(new Regionaloutput(reg_name_s[j],StringToEnumx(reg_definitionstring_s[j]),reg_outputnamestring_s[j],reg_mask_s[j],reg_mask_M_s[j]));
++
++				}
++
++				/*Free ressources:*/
++				for(j=0;j<numout;j++){
++					char* string=NULL;
++					IssmDouble* matrix = NULL;
++
++					string = reg_name_s[j];    xDelete<char>(string);
++					string = reg_definitionstring_s[j];    xDelete<char>(string);
++					string = reg_outputnamestring_s[j];    xDelete<char>(string);
++					matrix = reg_mask_s[j]; xDelete<IssmDouble>(matrix);
++				}
++				xDelete<char*>(reg_name_s);
++				xDelete<IssmDouble*>(reg_mask_s);
++				xDelete<int>(reg_mask_M_s);
++				xDelete<int>(reg_mask_N_s);
++				xDelete<char*>(reg_outputnamestring_s);
++				xDelete<char*>(reg_definitionstring_s);
++			}
++			/*}}}*/
+ 			else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!");
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/Massfluxatgate.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 21808)
+@@ -83,11 +83,13 @@
+ 		}
+ 		/*}}}*/
+ 		~Massfluxatgate(){/*{{{*/
+-			xDelete<doubletype>(this->x1);
+-			xDelete<doubletype>(this->y1);
+-			xDelete<doubletype>(this->x2);
+-			xDelete<doubletype>(this->y2);
+-			xDelete<int>(this->elements);
++			if(this->numsegments){
++				xDelete<doubletype>(this->x1);
++				xDelete<doubletype>(this->y1);
++				xDelete<doubletype>(this->x2);
++				xDelete<doubletype>(this->y2);
++				xDelete<int>(this->elements);
++			}
+ 			xDelete<char>(this->name);
+ 		}
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 21808)
+@@ -20,6 +20,7 @@
+ #include "./Nodalvalue.h"
+ #include "./Masscon.h"
+ #include "./Massconaxpby.h"
++#include "./Regionaloutput.h"
+ 
+ /*Constraints: */
+ #include "./Constraints/Constraints.h"
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21808)
+@@ -1224,18 +1224,6 @@
+ 	return phi*base_area;
+ }
+ /*}}}*/
+-IssmDouble Penta::IceMass(void){/*{{{*/
+-
+-	IssmDouble rho_ice; 
+-	
+-	if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!
+-
+-	/*recover ice density: */
+-	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+-
+-	return rho_ice*this->IceVolume();
+-}
+-/*}}}*/
+ IssmDouble Penta::IceVolume(void){/*{{{*/
+ 
+ 	/*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21808)
+@@ -91,7 +91,6 @@
+ 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+ 		IssmDouble     GroundedArea(void);
+-		IssmDouble     IceMass(void);
+ 		IssmDouble     IceVolume(void);
+ 		IssmDouble     IceVolumeAboveFloatation(void);
+ 		void           InputControlUpdate(IssmDouble scalar,bool save_parameter);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21808)
+@@ -78,7 +78,6 @@
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");};
+ 		IssmDouble  GroundedArea(void){_error_("not implemented yet");};
+-		IssmDouble  IceMass(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolume(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
+ 		void        InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21808)
+@@ -86,7 +86,6 @@
+ 		IssmDouble  GroundedArea(void){_error_("not implemented yet");};
+ 		bool        HasFaceOnBase();
+ 		bool        HasFaceOnSurface();
+-		IssmDouble  IceMass(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolume(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
+ 		bool        IsFaceOnBoundary(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21808)
+@@ -1589,18 +1589,6 @@
+ 	}
+ }
+ /*}}}*/
+-IssmDouble Tria::IceMass(void){/*{{{*/
+-
+-	IssmDouble rho_ice; 
+-	
+-	if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!
+-
+-	/*recover ice density: */
+-	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+-
+-	return rho_ice*this->IceVolume();
+-}
+-/*}}}*/
+ IssmDouble Tria::IceVolume(void){/*{{{*/
+ 
+ 	/*The volume of a truncated prism is area_base * 1/numedges sum(length of edges)*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21808)
+@@ -90,7 +90,6 @@
+ 		IssmDouble  GroundedArea(void);
+ 		bool        HasEdgeOnBase();
+ 		bool        HasEdgeOnSurface();
+-		IssmDouble  IceMass(void);
+ 		IssmDouble  IceVolume(void);
+ 		IssmDouble  IceVolumeAboveFloatation(void);
+ 		void        InputControlUpdate(IssmDouble scalar,bool save_parameter);
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 21807)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 21808)
+@@ -259,8 +259,8 @@
+ 				md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1);
+ 				if(md.hydrology.isefficientlayer==1)
+ 					md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1);
+-		    end
+-	    end
++				end
++			end
+ 			
+ 			%materials
+ 			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+@@ -309,6 +309,20 @@
+ 				md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+ 			end
+ 
++			%outputdefinitions
++			for i=1:length(md.outputdefinition.definitions)
++				if isobject(md.outputdefinition.definitions{i})
++					%get subfields
++					solutionsubfields=fields(md.outputdefinition.definitions{i});
++					for j=1:length(solutionsubfields),
++						field=md.outputdefinition.definitions{i}.(solutionsubfields{j});
++						if length(field)==md.mesh.numberofvertices | length(field)==md.mesh.numberofelements,
++							md.outputdefinition.definitions{i}.(solutionsubfields{j})=project2d(md,md.outputdefinition.definitions{i}.(solutionsubfields{j}),1);
++						end
++					end
++				end
++			end
++
+ 			%Initialize with the 2d mesh
+ 			mesh=mesh2d();
+ 			mesh.x=md.mesh.x2d;
+@@ -606,6 +620,22 @@
+ 				end
+ 			end
+ 
++			%OutputDefinitions fields
++			for i=1:length(md1.outputdefinition.definitions),
++				if isobject(md1.outputdefinition.definitions{i})
++					%get subfields
++					solutionsubfields=fields(md1.outputdefinition.definitions{i});
++					for j=1:length(solutionsubfields),
++						field=md1.outputdefinition.definitions{i}.(solutionsubfields{j});
++						if length(field)==numberofvertices1,
++							md2.outputdefinition.definitions{i}.(solutionsubfields{j})=field(pos_node);
++						elseif length(field)==numberofelements1,
++							md2.outputdefinition.definitions{i}.(solutionsubfields{j})=field(pos_elem);
++						end
++					end
++				end
++			end
++
+ 			%Keep track of pos_node and pos_elem
+ 			md2.mesh.extractedvertices=pos_node;
+ 			md2.mesh.extractedelements=pos_elem;
+@@ -792,6 +822,7 @@
+ 			md.mask=extrude(md.mask,md);
+ 			md.qmu=extrude(md.qmu,md);
+ 			md.basalforcings=extrude(md.basalforcings,md);
++			md.outputdefinition=extrude(md.outputdefinition,md);
+ 
+ 			%increase connectivity if less than 25:
+ 			if md.mesh.average_vertex_connectivity<=25,
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 21808)
+@@ -0,0 +1,148 @@
++/*!\file Regionaloutput.h
++ * \brief: header file for Regionaloutput object
++ */
++
++#ifndef _REGIONALOUTPUT_H_
++#define _REGIONALOUTPUT_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../classes/Params/Parameters.h"
++
++/*}}}*/
++
++class Regionaloutput: public Object, public Definition{
++
++	public: 
++
++		int         definitionenum;
++		char*       outputname;
++		char*       name;
++		IssmDouble* mask;
++		int         M;
++		
++		/*Regionalicevolume: constructors, destructors :*/
++		Regionaloutput(){/*{{{*/
++
++			this->definitionenum = -1;
++			this->outputname = NULL;
++			this->name = NULL;
++			this->mask=NULL;
++			this->M=0;
++
++		}
++		/*}}}*/
++		Regionaloutput(char* in_name, int in_definitionenum, char* in_outputname, IssmDouble* maskin, int Min){ /*{{{*/
++
++			this->definitionenum=in_definitionenum;
++			this->outputname = xNew<char>(strlen(in_outputname)+1);
++			xMemCpy<char>(this->outputname,in_outputname,strlen(in_outputname)+1);
++			this->name = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->mask   = xNew<IssmDouble>(Min);
++			xMemCpy<IssmDouble>(this->mask, maskin, Min);
++
++			this->M=Min;
++
++		}
++		/*}}}*/
++		~Regionaloutput(){/*{{{*/
++			if(this->name)xDelete(this->name); 
++			if(this->outputname)xDelete(this->outputname);
++			if(this->mask)xDelete(this->mask);
++		}
++		/*}}}*/
++		/*Object virtual function resolutoin: */
++		Object* copy() {/*{{{*/
++			Regionaloutput* mf = new Regionaloutput(this->name,this->definitionenum,this->outputname,this->mask,this->M);
++			return (Object*) mf;
++		}
++		/*}}}*/
++		void DeepEcho(void){/*{{{*/
++			this->Echo();
++		}
++		/*}}}*/
++		void Echo(void){/*{{{*/
++			_printf_(" Regionaloutput: " << this->name << " " << this->definitionenum << "\n");
++			_printf_("    outputname enum: " << this->outputname << "Enum\n");
++			_printf_("    mask: " << this->mask << "\n");
++			_printf_("    M: " << this->M << "\n");
++		}
++		/*}}}*/
++		int Id(void){/*{{{*/
++			return -1;
++		}
++		/*}}}*/
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++			_error_("not implemented yet!"); 
++		} 
++		/*}}}*/
++		int ObjectEnum(void){/*{{{*/
++			return RegionaloutputEnum;
++		}
++		/*}}}*/
++		/*Definition virtual function resolutoin: */
++		int DefinitionEnum(){/*{{{*/
++
++			return this->definitionenum;
++		}
++		/*}}}*/
++		char* Name(){/*{{{*/
++
++			char* name2=xNew<char>(strlen(this->name)+1);
++			xMemCpy(name2,this->name,strlen(this->name)+1);
++
++			return name2;
++		}
++		/*}}}*/
++		IssmDouble Response(FemModel* femmodel){/*{{{*/
++
++			int i;
++			IssmDouble val_t=0.;
++			IssmDouble all_val_t=0.;
++			int outputenum = StringToEnumx(this->outputname);
++
++			for(i=0;i<femmodel->elements->Size();i++){
++				Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++				switch(outputenum){
++					case GroundedAreaEnum:
++						val_t+=element->GroundedArea(this->mask);
++						break;
++					case IceMassEnum:
++						val_t+=element->IceMass(this->mask);
++						break;
++					case IceVolumeEnum:
++						val_t+=element->IceVolume(this->mask);
++						break;
++					case IceVolumeAboveFloatationEnum:
++						val_t+=element->IceVolumeAboveFloatation(this->mask);
++						break;
++					case TotalFloatingBmbEnum:
++						val_t+=element->TotalFloatingBmb(this->mask);
++						break;
++					case TotalGroundedBmbEnum:
++						val_t+=element->TotalGroundedBmb(this->mask);
++						break;
++					case TotalSmbEnum:
++						val_t+=element->TotalSmb(this->mask);
++						break;
++					default:
++						_error_("Regional output type " << this->outputname << " not supported yet!");
++				}
++			}
++
++			ISSM_MPI_Allreduce ( (void*)&val_t,(void*)&all_val_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++			val_t=all_val_t;
++
++			return val_t;
++		}
++		/*}}}*/
++};
++
++#endif  /* _REGIONALOUTPUT_H_ */
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21808)
+@@ -1340,6 +1340,19 @@
+ 
+ }
+ /*}}}*/
++IssmDouble Element::GroundedArea(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->GroundedArea();
++}
++/*}}}*/
+ bool       Element::HasNodeOnBase(){/*{{{*/
+ 	return (this->inputs->Max(MeshVertexonbaseEnum)>0.);
+ }/*}}}*/
+@@ -1346,6 +1359,57 @@
+ bool       Element::HasNodeOnSurface(){/*{{{*/
+ 	return (this->inputs->Max(MeshVertexonsurfaceEnum)>0.);
+ }/*}}}*/
++IssmDouble Element::IceMass(void){/*{{{*/
++
++	IssmDouble rho_ice;
++
++	if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!
++
++	/*recover ice density: */
++	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
++
++	return rho_ice*this->IceVolume();
++}
++/*}}}*/
++IssmDouble Element::IceMass(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->IceMass();
++}
++/*}}}*/
++IssmDouble Element::IceVolume(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->IceVolume();
++}
++/*}}}*/
++IssmDouble Element::IceVolumeAboveFloatation(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->IceVolumeAboveFloatation();
++}
++/*}}}*/
+ int        Element::Id(){/*{{{*/
+ 
+ 	return this->id;
+@@ -2951,6 +3015,45 @@
+ 	_assert_(matpar);
+ 	return this->matpar->TMeltingPoint(pressure);
+ }/*}}}*/
++IssmDouble Element::TotalFloatingBmb(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->TotalFloatingBmb();
++}
++/*}}}*/
++IssmDouble Element::TotalGroundedBmb(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->TotalGroundedBmb();
++}
++/*}}}*/
++IssmDouble Element::TotalSmb(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->TotalSmb();
++}
++/*}}}*/
+ void       Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/
+ 
+ 	/*All nodes have the same Coordinate System*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21807)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21808)
+@@ -108,8 +108,13 @@
+ 		IssmDouble         GetYcoord(IssmDouble* xyz_list,Gauss* gauss);
+ 		IssmDouble         GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
+ 		void               GradientIndexing(int* indexing,int control_index,bool onsid=false);
++		IssmDouble         GroundedArea(IssmDouble* mask);
+ 		bool               HasNodeOnBase();
+ 		bool               HasNodeOnSurface();
++		IssmDouble         IceMass();
++		IssmDouble         IceMass(IssmDouble* mask);
++		IssmDouble         IceVolume(IssmDouble* mask);
++		IssmDouble         IceVolumeAboveFloatation(IssmDouble* mask);
+ 		int                Id();
+ 		void               InputChangeName(int enum_type,int enum_type_old);
+ 		void               InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+@@ -149,6 +154,9 @@
+ 		void               StressMaxPrincipalCreateInput(void);
+ 		void               ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
+ 		IssmDouble         TMeltingPoint(IssmDouble pressure);
++		IssmDouble         TotalFloatingBmb(IssmDouble* mask);
++		IssmDouble         TotalGroundedBmb(IssmDouble* mask);
++		IssmDouble         TotalSmb(IssmDouble* mask);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
+@@ -211,7 +219,6 @@
+ 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
+ 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+ 		virtual IssmDouble GroundedArea(void)=0;
+-		virtual IssmDouble IceMass(void)=0;
+ 		virtual IssmDouble IceVolume(void)=0;
+ 		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
+ 		virtual void       InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21808-21809.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21808-21809.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21808-21809.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/classes/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/misfit.m	(revision 21808)
++++ ../trunk-jpl/src/m/classes/misfit.m	(revision 21809)
+@@ -18,7 +18,7 @@
+ 	properties (SetAccess=public)
+ 		%misfit
+ 		name					= '';
+-		definitionstring		= ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
++		definitionstring		= ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
+ 		model_string			= ''; %string for field that is modeled
+ 		observation				= NaN; %observed field that we compare the model against
+ 		observation_string	= ''; %string for observed field.
+@@ -30,6 +30,14 @@
+ 	end
+ 	
+ 	methods
++		function self = extrude(self,md) % {{{
++			if ~isnan(self.weights)
++				self.weights=project3d(md,'vector',self.weights,'type','node');
++			end
++			if ~isnan(self.observation)
++				self.observation=project3d(md,'vector',self.observation,'type','node');
++			end
++		end % }}}
+ 		function self = misfit(varargin) % {{{
+ 			if nargin==0,
+ 				self=setdefaultparameters(self);
+Index: ../trunk-jpl/src/m/classes/SMBforcing.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBforcing.m	(revision 21808)
++++ ../trunk-jpl/src/m/classes/SMBforcing.m	(revision 21809)
+@@ -67,8 +67,8 @@
+ 			yts=md.constants.yts;
+ 
+ 			WriteData(fid,prefix,'name','md.smb.model','data',1,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+-			%WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','CompressedMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			%WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','CompressedMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			
+ 			%process requested outputs
+ 			outputs = self.requested_outputs;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21809-21810.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21809-21810.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21809-21810.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/SMBforcing.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBforcing.m	(revision 21809)
++++ ../trunk-jpl/src/m/classes/SMBforcing.m	(revision 21810)
+@@ -67,8 +67,8 @@
+ 			yts=md.constants.yts;
+ 
+ 			WriteData(fid,prefix,'name','md.smb.model','data',1,'format','Integer');
+-			%WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+-			WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','CompressedMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			%WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','CompressedMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			
+ 			%process requested outputs
+ 			outputs = self.requested_outputs;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21810-21811.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21810-21811.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21810-21811.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 21810)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 21811)
+@@ -114,6 +114,9 @@
+ 					case GroundedAreaEnum:
+ 						val_t+=element->GroundedArea(this->mask);
+ 						break;
++					case FloatingAreaEnum:
++						val_t+=element->FloatingArea(this->mask);
++						break;
+ 					case IceMassEnum:
+ 						val_t+=element->IceMass(this->mask);
+ 						break;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21810)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21811)
+@@ -842,6 +842,19 @@
+ void       Element::FindParam(int** pvalues,int* psize,int paramenum){/*{{{*/
+ 	this->parameters->FindParam(pvalues,psize,paramenum);
+ }/*}}}*/
++IssmDouble Element::FloatingArea(IssmDouble* mask){/*{{{*/
++
++	/*Retrieve values of the mask defining the element: */
++	for(int i=0;i<this->GetNumberOfVertices();i++){
++		if(mask[this->vertices[i]->Sid()]<=0.){
++			return 0.;
++		}
++	}
++
++	/*Return: */
++	return this->FloatingArea();
++}
++/*}}}*/
+ void       Element::GetDofList(int** pdoflist,int approximation_enum,int setenum){/*{{{*/
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21810)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21811)
+@@ -80,6 +80,7 @@
+ 		void               FindParam(int* pvalue,int paramenum);
+ 		void               FindParam(IssmDouble* pvalue,int paramenum);
+ 		void               FindParam(int** pvalues,int* psize,int paramenum);
++		IssmDouble         FloatingArea(IssmDouble* mask);
+ 		void	             GetDofList(int** pdoflist,int approximation_enum,int setenum);
+ 		void	             GetDofListPressure(int** pdoflist,int setenum);
+ 		void	             GetDofListVelocity(int** pdoflist,int setenum);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21811-21812.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21811-21812.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21811-21812.diff	(revision 22755)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21811)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21812)
+@@ -12,13 +12,15 @@
+ class AmrBamg{
+ 
+ 	public:
++		int fieldenum;
++
+ 		/* Constructor, destructor etc*/
+-		AmrBamg(IssmDouble hmin, IssmDouble hmax);
++		AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err_in);
+ 		~AmrBamg();
+ 
+ 		/*General methods*/
+ 		void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
+-		void ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
++		void ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
+ 
+ 	private:
+ 		BamgGeom* geometry;
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21811)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21812)
+@@ -16,8 +16,9 @@
+ using namespace std;
+ 
+ /*Constructor, copy, clean up and destructor*/
+-AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax){/*{{{*/
++AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err){/*{{{*/
+ 
++	this->fieldenum    = fieldenum_in;
+ 	this->geometry     = NULL;
+ 	this->fathermesh   = NULL;
+ 	this->previousmesh = NULL;
+@@ -46,6 +47,11 @@
+ 	this->options->splitcorners      = 1;
+ 	this->options->hmin              = hmin;
+ 	this->options->hmax              = hmax;
++
++	this->options->err=xNew<IssmDouble>(1);
++	this->options->errSize[0]=1;
++	this->options->errSize[1]=1;
++	this->options->err[0] = err;
+ }
+ /*}}}*/
+ AmrBamg::~AmrBamg(){/*{{{*/
+@@ -79,7 +85,7 @@
+ 	/*Cleanup and return*/
+ 	delete Th;
+ }/*}}}*/
+-void AmrBamg::ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
++void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	BamgGeom* geomout=new BamgGeom();
+@@ -89,15 +95,28 @@
+ 	_assert_(this->geometry);
+ 	_assert_(this->options);
+ 	_assert_(this->fathermesh);
++	_assert_(field);
+ 
++	/*Prepare field for metric*/
++	this->options->field = field;
++
+ 	/*remesh*/
+ 	if(this->previousmesh){
++		this->options->fieldSize[0] = this->previousmesh->VerticesSize[0];
++		this->options->fieldSize[1] = 1;
+ 		Bamgx(meshout,geomout,this->previousmesh,this->geometry,this->options);
+ 	}
+ 	else{
++		this->options->fieldSize[0] = this->fathermesh->VerticesSize[0];
++		this->options->fieldSize[1] = 1;
+ 		Bamgx(meshout,geomout,this->fathermesh,this->geometry,this->options);
+ 	}
+ 
++	/*remove field for memory management (FemModel is taking care of deleting it)*/
++	this->options->field = NULL;
++	this->options->fieldSize[0] = 0;
++	this->options->fieldSize[1] = 0;
++
+ 	/*Change previous mesh*/
+ 	if(this->previousmesh) delete this->previousmesh;
+ 	this->previousmesh = meshout;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21811)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21812)
+@@ -4300,8 +4300,16 @@
+ 	/*Get Rank*/
+ 	int my_rank	= IssmComm::GetRank();
+ 
++	/*Get vector to create metric*/
++	int numberofvertices = this->vertices->NumberOfVertices();
++	Vector<IssmDouble> *vector = new Vector<IssmDouble>(numberofvertices);
++	GetVectorFromInputsx(&vector,this,this->amrbamg->fieldenum,VertexSIdEnum);
++	vector->Assemble();
++	IssmDouble* vector_serial = vector->ToMPISerial();
++	delete vector;
++
+ 	if(my_rank==0){
+-		this->amrbamg->ExecuteRefinementBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
++		this->amrbamg->ExecuteRefinementBamg(vector_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
+ 	}
+ 	else{
+@@ -4310,6 +4318,7 @@
+ 		newz=xNew<IssmDouble>(newnumberofvertices);
+ 		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
+ 	}
++	xDelete<IssmDouble>(vector_serial);
+ 
+ 	/*Send new mesh to others CPU*/
+ 	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+@@ -4357,10 +4366,11 @@
+ 	this->parameters->FindParam(&fieldenum,AmrFieldEnum);
+ 	this->parameters->FindParam(&err,AmrErrEnum);
+ 
+-	/*Create bamg data structures for bamg (only cpu 0)*/
++	/*Create bamg data structures for bamg*/
++	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err);
++
++	/*Re-create original mesh and put it in bamg structure (only cpu 0)*/
+ 	if(my_rank==0){ 
+-		/*Re-create original mesh and put it in bamg structure*/
+-		this->amrbamg = new AmrBamg(hmin,hmax);
+ 		this->amrbamg->Initialize(elements,x,y,numberofvertices,numberofelements);
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21812-21813.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21812-21813.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21812-21813.diff	(revision 22755)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(revision 21813)
+@@ -0,0 +1,52 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install petsc-3.7.6 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.7.6.tar.gz' 'petsc-3.7.6.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.7.6.tar.gz
++mv petsc-3.7.6/* src/
++rm -rf petsc-3.7.6
++
++#configure
++cd src
++./config/configure.py \
++	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++	--with-blas-lapack-dir="/opt/intel/compilers_and_libraries_2016.3.210/linux/mkl/lib/" \
++	--with-mpi-dir="/opt/intel/compilers_and_libraries_2016.3.210/linux/mpi/intel64/" \
++	--known-mpi-shared-libraries=1 \
++	--with-debugging=0 \
++	--with-valgrind=0 \
++	--with-x=0 \
++	--with-ssl=0 \
++	--with-batch=1  \
++	--with-shared-libraries=1 \
++	--download-metis=1 \
++	--download-parmetis=1 \
++	--download-mumps=1 \
++	--download-scalapack=1 
++
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
++#PBS -A open
++#PBS -l nodes=1:ppn=1
++#PBS -l walltime=200 
++
++module load intel/16.0.3
++module load impi/5.1.3
++module load mkl/11.3.3
++
++export PATH="$PATH:." 
++mpiexec -np 1 ./conftest-arch-linux2-c-opt
++EOF
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub -q devel script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21813-21814.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21813-21814.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21813-21814.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(revision 21813)
++++ ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(revision 21814)
+@@ -35,7 +35,7 @@
+ #prepare script to reconfigure petsc
+ cat > script.queue << EOF
+ #PBS -A open
+-#PBS -l nodes=1:ppn=1
++#PBS -l nodes=1:ppn=1:stmem
+ #PBS -l walltime=200 
+ 
+ module load intel/16.0.3
+@@ -48,5 +48,5 @@
+ 
+ #print instructions
+ echo "== Now: cd src/ "
+-echo "== qsub -q devel script.queue "
++echo "== qsub script.queue "
+ echo "== Then run reconfigure script generated by PETSc and follow instructions"
Index: /issm/oecreview/Archive/21724-22754/ISSM-21814-21815.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21814-21815.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21814-21815.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(revision 21814)
++++ ../trunk-jpl/externalpackages/petsc/install-3.7-aci.sh	(revision 21815)
+@@ -43,7 +43,8 @@
+ module load mkl/11.3.3
+ 
+ export PATH="$PATH:." 
+-mpiexec -np 1 ./conftest-arch-linux2-c-opt
++cd $ISSM_DIR/externalpackages/petsc/src
++mpirun -np 1 ./conftest-arch-linux2-c-opt
+ EOF
+ 
+ #print instructions
Index: /issm/oecreview/Archive/21724-22754/ISSM-21815-21816.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21815-21816.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21815-21816.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 21815)
++++ ../trunk-jpl/configure.ac	(revision 21816)
+@@ -19,7 +19,7 @@
+ AC_PROG_CPP
+ AC_PROG_CXX([icpc cl icl g++])
+ AC_PROG_F77([ifort g77 gfortran])
+-AC_PROG_FC([gfortran])
++AC_PROG_FC([ifort gfortran])
+ 
+ #AUTOMAKE
+ #Initialize automake and declare foreign so that we don't need a ChangeLog, INSTALL, etc
Index: /issm/oecreview/Archive/21724-22754/ISSM-21816-21817.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21816-21817.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21816-21817.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21816)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21817)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,9e-09,5e-09,1e-09,6e-04,3e-04,1e-09,1e-10,1e-13};
++	4e-10,9e-09,5e-09,3e-09,6e-04,5e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21816)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21817)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,5e-09,3e-09,2e-7,4e-04,4e-04,1e-09,1e-10,1e-13};
++	1e-10,5e-09,3e-09,2e-7,5e-04,4e-04,1e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21817-21818.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21817-21818.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21817-21818.diff	(revision 22755)
@@ -0,0 +1,129 @@
+Index: ../trunk-jpl/src/m/classes/clusters/aci.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/aci.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/clusters/aci.m	(revision 21818)
+@@ -0,0 +1,117 @@
++%ACI class definition
++%
++%   Usage:
++%      cluster=aci();
++%      cluster=aci('np',3);
++%      cluster=aci('np',3,'login','username');
++
++classdef aci
++	properties (SetAccess=public)  
++		% {{{
++		name='';
++		login='';
++		nodes=0;
++		ppn=0;
++		time=0;
++		port=0;
++		queue='';
++		codepath='';
++		executionpath='';
++		modules={};
++	end
++	%}}}
++	methods
++		function cluster=aci(varargin) % {{{
++
++			%initialize cluster using default settings if provided
++			if (exist('aci_settings')==2), aci_settings; end
++
++			%use provided options to change fields
++			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
++		end
++		%}}}
++		function disp(cluster) % {{{
++			%  display the object
++			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
++			disp(sprintf('    name: %s',cluster.name));
++			disp(sprintf('    login: %s',cluster.login));
++			disp(sprintf('    port: %i',cluster.port));
++			disp(sprintf('    time: %i (in minutes)',cluster.time));
++			disp(sprintf('    nodes: %i (number of nodes)',cluster.nodes));
++			disp(sprintf('    ppn: %i (process per nodes)',cluster.ppn));
++			disp(sprintf('    queue: %s',cluster.queue));
++			disp(sprintf('    codepath: %s',cluster.codepath));
++			disp(sprintf('    executionpath: %s',cluster.executionpath));
++		end
++		%}}}
++		function md = checkconsistency(cluster,md,solution,analyses) % {{{
++
++			available_queues={'brp106_a_g_sc_default','open'};
++			queue_requirements_time=[Inf 48*60];
++			queue_requirements_np=[260 260];
++
++			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.ppn*cluster.nodes,1)
++
++			%Miscelaneous
++			if cluster.ppn>20, md = checkmessage(md,'cannot request more that 20 cores per node'); end
++			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
++			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
++			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
++		end
++		%}}}
++		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
++
++			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
++			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
++
++			%write queuing script 
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#PBS -A %s\n', cluster.queue); %open or brp106....
++			fprintf(fid,'#PBS -l nodes=%i:ppn=%i:stmem\n',cluster.nodes,cluster.ppn);
++			fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); % walltime is in seconds
++			fprintf(fid,'#PBS -o %s.outlog\n',(modelname));
++			fprintf(fid,'#PBS -e %s.errlog\n',(modelname));
++			fprintf(fid,'source ~/.bashrc\n');
++			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');
++			for i=1:numel(cluster.modules)
++				fprintf(fid,'module load %s\n', cluster.modules{i});
++			end
++			fprintf(fid,'mpirun -np %i %s/issm.exe %s %s %s\n',cluster.nodes*cluster.ppn,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
++			if ~io_gather, %concatenate the output files:
++				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
++			end
++			fclose(fid);
++		end %}}}
++		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
++
++			%compress the files into one zip.
++			compressstring=['tar -zcf ' dirname '.tar.gz '];
++			for i=1:numel(filelist),
++				compressstring = [compressstring ' ' filelist{i}];
++			end
++			system(compressstring);
++
++			disp('uploading input file and queueing script');
++			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
++
++		end %}}}
++		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
++
++			disp('launching solution sequence on remote cluster');
++			if ~isempty(restart)
++				launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
++			else
++				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
++			end
++			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
++		end %}}}
++		function Download(cluster,dirname,filelist)% {{{
++
++			%copy files from cluster to current directory
++			directory=[cluster.executionpath '/' dirname '/'];
++			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
++
++		end %}}}
++	end
++end
+
+Property changes on: ../trunk-jpl/src/m/classes/clusters/aci.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21818-21819.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21818-21819.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21818-21819.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21818)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21819)
+@@ -1735,7 +1735,7 @@
+ 		}
+ 		else{
+ 			/*last chance for the output definition, if the enum is one of Outputdefinition[1-10]Enum:*/
+-			if(output_enum>=Outputdefinition1Enum && output_enum <=Outputdefinition10Enum){
++			if(output_enum>=Outputdefinition1Enum && output_enum <=Outputdefinition100Enum){
+ 				double_result = OutputDefinitionsResponsex(this,output_enum);
+ 				if(save_results){
+ 					results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
+@@ -2031,7 +2031,13 @@
+ 		case MaterialsRheologyBbarEnum:    this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
+ 		case VelEnum:                      this->ElementResponsex(responses,VelEnum); break;
+ 		case FrictionCoefficientEnum:      NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
+-		default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break; 
++		default: 
++			if(response_descriptor_enum>=Outputdefinition1Enum && response_descriptor_enum <=Outputdefinition100Enum){
++				IssmDouble double_result = OutputDefinitionsResponsex(this,response_descriptor_enum);
++				*responses=double_result;
++			}
++			else _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); 
++			break; 
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 21818)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 21819)
+@@ -182,6 +182,11 @@
+ 				md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+ 				md.friction.p=project2d(md,md.friction.p,1);
+ 				md.friction.q=project2d(md,md.friction.q,1);
++			elseif isa(md.friction,'frictioncoulomb'),
++				md.friction.coefficient=project2d(md,md.friction.coefficient,1);
++				md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1);
++				md.friction.p=project2d(md,md.friction.p,1);
++				md.friction.q=project2d(md,md.friction.q,1);
+ 			elseif isa(md.friction,'frictionhydro'),
+ 				md.friction.q=project2d(md,md.friction.q,1);
+ 				md.friction.C=project2d(md,md.friction.C,1);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21819-21820.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21819-21820.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21819-21820.diff	(revision 22755)
@@ -0,0 +1,303 @@
+Index: ../trunk-jpl/test/NightlyRun/test408.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.m	(revision 21819)
++++ ../trunk-jpl/test/NightlyRun/test408.m	(revision 21820)
+@@ -10,12 +10,12 @@
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ md.friction.coefficientcoulomb=0.02*ones(md.mesh.numberofvertices,1);
+-md=extrude(md,3,1);
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=1;
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs={'default','GroundedArea','FloatingArea','TotalFloatingBmb','TotalGroundedBmb','TotalSmb'};
++md=extrude(md,3,1);
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 21819)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 21820)
+@@ -9,23 +9,23 @@
+ md.geometry.thickness(:)=1000.;
+ md.geometry.surface=md.geometry.base+md.geometry.thickness;
+ md.smb.mass_balance(:)=100.;
+-md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
+-md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation'};
++md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceMass'};
++md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,...
+-	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,...
++	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+@@ -33,6 +33,7 @@
+ 	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(1).IceVolume),...
+ 	(md.results.TransientSolution(1).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(1).IceMass),...
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+@@ -39,6 +40,7 @@
+ 	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).IceVolume),...
+ 	(md.results.TransientSolution(2).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(2).IceMass),...
+ 	(md.results.TransientSolution(3).Base),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+@@ -45,4 +47,5 @@
+ 	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).IceVolume),...
+ 	(md.results.TransientSolution(3).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(3).IceMass),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test444.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test444.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test444.m	(revision 21820)
+@@ -0,0 +1,107 @@
++%Test Name: SquareSheetShelfTranSSA2dAggressiveDakotaSampRegionalOutput
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.geometry.bed=md.geometry.base;
++pos=find(md.mask.groundedice_levelset<0);
++md.geometry.bed(pos)=md.geometry.base(pos)-10;
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
++md.friction.p=ones(md.mesh.numberofelements,1);
++md.friction.q=ones(md.mesh.numberofelements,1);
++md.transient.isthermal=0;
++md.transient.isgroundingline=1;
++md.groundingline.migration='AggressiveMigration';
++
++md.settings.output_frequency=3;
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++regionalmask=zeros(md.mesh.numberofvertices,1);
++in=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1);
++regionalmask(find(in))=1;
++md.transient.requested_outputs={'default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
++	'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation'};
++md.outputdefinition.definitions{1}=regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,...
++	'definitionstring','Outputdefinition1');
++md.outputdefinition.definitions{2}=regionaloutput('name','FloatingArea1','outputnamestring','FloatingArea','mask',regionalmask,...
++	'definitionstring','Outputdefinition2');
++md.outputdefinition.definitions{3}=regionaloutput('name','TotalFloatingBmb1','outputnamestring','TotalFloatingBmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition3');
++md.outputdefinition.definitions{4}=regionaloutput('name','TotalGroundedBmb1','outputnamestring','TotalGroundedBmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition4');
++md.outputdefinition.definitions{5}=regionaloutput('name','IceMass1','outputnamestring','IceMass','mask',regionalmask,...
++	'definitionstring','Outputdefinition5');
++md.outputdefinition.definitions{6}=regionaloutput('name','IceVolume1','outputnamestring','IceVolume','mask',regionalmask,...
++	'definitionstring','Outputdefinition6');
++md.outputdefinition.definitions{7}=regionaloutput('name','IceVolumeAboveFloatation1','outputnamestring','IceVolumeAboveFloatation','mask',regionalmask,...
++	'definitionstring','Outputdefinition7');
++md.outputdefinition.definitions{8}=regionaloutput('name','TotalSmb1','outputnamestring','TotalSmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition8');
++
++md=extrude(md,3,1);
++md=collapse(md);
++
++%Dakota options
++
++%dakota version
++version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version);
++
++md.qmu.variables.drag_coefficient=normal_uncertain('scaled_BasalforcingsFloatingiceMeltingRate',1,0.1);
++
++md.qmu.responses.IceMass1=response_function('Outputdefinition5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.IceVolume1=response_function('Outputdefinition6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.IceVolumeAboveFloatation1=response_function('Outputdefinition7',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.IceVolumeAboveFloatation=response_function('IceVolumeAboveFloatation',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.GroundedArea1=response_function('Outputdefinition1',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.FloatingArea1=response_function('Outputdefinition2',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.TotalFloatingBmb1=response_function('Outputdefinition3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.TotalGroundedBmb1=response_function('Outputdefinition4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.TotalSmb1=response_function('Outputdefinition8',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++
++md.qmu.method     =dakota_method('nond_samp');
++md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),...
++	'seed',1234,...
++	'samples',20,...
++	'sample_type','random');
++
++%%  a variety of parameters
++md.qmu.params.direct=true;
++md.qmu.params.analysis_components='';
++md.qmu.params.tabular_graphics_data=true;
++
++if version>=6,
++	md.qmu.params.analysis_driver='matlab';
++	md.qmu.params.evaluation_scheduling='master';
++	md.qmu.params.processors_per_evaluation=2;
++else
++	md.qmu.params.analysis_driver='stressbalance';
++	md.qmu.params.evaluation_concurrency=1;
++end
++
++%partitioning
++md.qmu.numberofpartitions=20;
++md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
++md.qmu.partition=md.qmu.partition-1;
++md.qmu.isdakota=1;
++
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
++
++md=solve(md,'Transient','overwrite','y');
++
++%Fields and tolerances to track changes
++md.qmu.results=md.results.dakota;
++
++%we put all the mean and stdev data in the montecarlo field, which we will use to test for success.
++md.results.dakota.montecarlo=[];
++for i=1:8,
++	md.results.dakota.montecarlo=[md.results.dakota.montecarlo md.results.dakota.dresp_out(i).mean];
++end
++for i=1:8,
++	md.results.dakota.montecarlo=[md.results.dakota.montecarlo md.results.dakota.dresp_out(i).stddev];
++end
++field_names     ={'montecarlo'};
++field_tolerances={1e-11};
++field_values={...
++	md.results.dakota.montecarlo,...
++	};
++
+Index: ../trunk-jpl/test/Archives/Archive444.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive444.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive444.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive444.arch	(revision 21820)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive444.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/NightlyRun/test443.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test443.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test443.m	(revision 21820)
+@@ -0,0 +1,76 @@
++%Test Name: SquareSheetShelfTranSSA3dAggressiveRegionalOutput
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.geometry.bed=md.geometry.base;
++pos=find(md.mask.groundedice_levelset<0);
++md.geometry.bed(pos)=md.geometry.base(pos)-10;
++md.friction=frictioncoulomb();
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
++md.friction.p=ones(md.mesh.numberofelements,1);
++md.friction.q=ones(md.mesh.numberofelements,1);
++md.friction.coefficientcoulomb=0.02*ones(md.mesh.numberofvertices,1);
++md.transient.isthermal=0;
++md.transient.isgroundingline=1;
++md.groundingline.migration='AggressiveMigration';
++
++md.settings.output_frequency=2;
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++regionalmask=zeros(md.mesh.numberofvertices,1);
++in=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1);
++regionalmask(find(in))=1;
++md.transient.requested_outputs={'default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
++	'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation'};
++md.outputdefinition.definitions{1}=regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,...
++	'definitionstring','Outputdefinition1');
++md.outputdefinition.definitions{2}=regionaloutput('name','FloatingArea1','outputnamestring','FloatingArea','mask',regionalmask,...
++	'definitionstring','Outputdefinition2');
++md.outputdefinition.definitions{3}=regionaloutput('name','TotalFloatingBmb1','outputnamestring','TotalFloatingBmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition3');
++md.outputdefinition.definitions{4}=regionaloutput('name','TotalGroundedBmb1','outputnamestring','TotalGroundedBmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition4');
++md.outputdefinition.definitions{5}=regionaloutput('name','IceMass1','outputnamestring','IceMass','mask',regionalmask,...
++	'definitionstring','Outputdefinition5');
++md.outputdefinition.definitions{6}=regionaloutput('name','IceVolume1','outputnamestring','IceVolume','mask',regionalmask,...
++	'definitionstring','Outputdefinition6');
++md.outputdefinition.definitions{7}=regionaloutput('name','IceVolumeAboveFloatation1','outputnamestring','IceVolumeAboveFloatation','mask',regionalmask,...
++	'definitionstring','Outputdefinition7');
++md.outputdefinition.definitions{8}=regionaloutput('name','TotalSmb1','outputnamestring','TotalSmb','mask',regionalmask,...
++	'definitionstring','Outputdefinition8');
++md.outputdefinition.definitions{9}=regionaloutput('name','IceVolumeAboveFloatation2','outputnamestring','IceVolumeAboveFloatation',...
++	'maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md);
++
++md=extrude(md,3,1);
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21',...
++	'Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
++	'IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23',...
++	'Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(1).IceMass1),...
++	(md.results.TransientSolution(1).IceVolume1),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatation1),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatation2),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).GroundedArea1),...
++	(md.results.TransientSolution(1).FloatingArea1),...
++	(md.results.TransientSolution(1).TotalFloatingBmb1),...
++	(md.results.TransientSolution(1).TotalGroundedBmb1),...
++	(md.results.TransientSolution(1).TotalSmb1),...
++	(md.results.TransientSolution(3).IceMass1),...
++	(md.results.TransientSolution(3).IceVolume1),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatation1),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatation2),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).GroundedArea1),...
++	(md.results.TransientSolution(3).FloatingArea1),...
++	(md.results.TransientSolution(3).TotalFloatingBmb1),...
++	(md.results.TransientSolution(3).TotalGroundedBmb1),...
++	(md.results.TransientSolution(3).TotalSmb1),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive443.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive443.arch	(revision 21820)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive443.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive426.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21820-21821.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21820-21821.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21820-21821.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21820)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21821)
+@@ -3075,10 +3075,10 @@
+ 						- ((*tcvj)(0)->r.y -(*tcvj)(2)->r.y)*(bv.r.x -(*tcvj)(2)->r.x));
+ 				IssmDouble area_3 =((bv.r.x -(*tcvj)(1)->r.x)*((*tcvj)(0)->r.y-(*tcvj)(1)->r.y)
+ 						- (bv.r.y -(*tcvj)(1)->r.y)*((*tcvj)(0)->r.x-(*tcvj)(1)->r.x));
+-			//	if(area_1<0 || area_2<0 || area_3<0){
+-			//		pointsoutside = true;
+-			//		continue;
+-			//	}
++				if(area_1<0 || area_2<0 || area_3<0){
++					pointsoutside = true;
++					continue;
++				}
+ 				if(!bv.GeomEdgeHook){
+ 					vertices[nbv].r              = bv.r;
+ 					vertices[nbv].PreviousNumber = i+1;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21821-21822.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21821-21822.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21821-21822.diff	(revision 22755)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21821)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21822)
+@@ -4308,7 +4308,7 @@
+ 
+ 	/*Get vector to create metric*/
+ 	int numberofvertices = this->vertices->NumberOfVertices();
+-	Vector<IssmDouble> *vector = new Vector<IssmDouble>(numberofvertices);
++	Vector<IssmDouble> *vector = NULL;
+ 	GetVectorFromInputsx(&vector,this,this->amrbamg->fieldenum,VertexSIdEnum);
+ 	vector->Assemble();
+ 	IssmDouble* vector_serial = vector->ToMPISerial();
+@@ -4318,17 +4318,18 @@
+ 		this->amrbamg->ExecuteRefinementBamg(vector_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
+ 	}
+-	else{
++
++	xDelete<IssmDouble>(vector_serial);
++
++	/*Send new mesh to others CPU*/
++	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	if(my_rank){
+ 		newx=xNew<IssmDouble>(newnumberofvertices);
+ 		newy=xNew<IssmDouble>(newnumberofvertices);
+ 		newz=xNew<IssmDouble>(newnumberofvertices);
+ 		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
+ 	}
+-	xDelete<IssmDouble>(vector_serial);
+-
+-	/*Send new mesh to others CPU*/
+-	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+ 	ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+ 	ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21821)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21822)
+@@ -31,7 +31,7 @@
+ 	this->options->errg              = 0.1;
+ 	this->options->gradation         = 1.5;
+ 	this->options->Hessiantype       = 0;
+-	this->options->MaxCornerAngle    = 10;
++	this->options->MaxCornerAngle    = 1.e-12;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
+ 	this->options->Metrictype        = 0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21822-21823.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21822-21823.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21822-21823.diff	(revision 22755)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive426.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21823-21824.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21823-21824.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21823-21824.diff	(revision 22755)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/m/exp/contourlevelzero.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/contourlevelzero.m	(revision 21823)
++++ ../trunk-jpl/src/m/exp/contourlevelzero.m	(revision 21824)
+@@ -18,7 +18,7 @@
+ index=md.mesh.elements;
+ 
+ if isempty(mask), error('mask provided is empty'); end
+-	if length(mask)~=md.mesh.numberofvertices, error('mask provided should be specified at the vertices of the mesh'); end
++if length(mask)~=md.mesh.numberofvertices, error('mask provided should be specified at the vertices of the mesh'); end
+ 
+ %initialization of some variables
+ numberofelements=size(index,1);
+@@ -58,9 +58,9 @@
+ Range3=sort(Data3,2);
+ 
+ %find the segments that contain this value
+-pos1=(Range1(:,1)<level & Range1(:,2)>level);
+-pos2=(Range2(:,1)<level & Range2(:,2)>level);
+-pos3=(Range3(:,1)<level & Range3(:,2)>level);
++pos1=(Range1(:,1)<level & Range1(:,2)>=level);
++pos2=(Range2(:,1)<level & Range2(:,2)>=level);
++pos3=(Range3(:,1)<level & Range3(:,2)>=level);
+ 
+ %get elements
+ poselem12=(pos1 & pos2);
+Index: ../trunk-jpl/src/m/plot/plot_contour.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_contour.m	(revision 21823)
++++ ../trunk-jpl/src/m/plot/plot_contour.m	(revision 21824)
+@@ -269,6 +269,6 @@
+ 		clabel(c,h);
+ 	else
+ 		%clabel(c,h,'color',color,'FontSize',10,'labelspacing',20000);
+-		clabel(c,h,'FontSize',10,'labelspacing',20000);
++		%clabel(c,h,'FontSize',10,'labelspacing',20000);
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21824-21825.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21824-21825.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21824-21825.diff	(revision 22755)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 21824)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 21825)
+@@ -17,40 +17,43 @@
+ md.geometry.thickness[:]=1000.
+ md.geometry.surface=md.geometry.base+md.geometry.thickness
+ md.smb.mass_balance[:]=100.
+-md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+-md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation']
++md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceMass']
++md.extrude(3,1.)
+ md.cluster=generic('name',gethostname(),'np',3)
+ 
+ md=solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',
+-									'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',
+-									'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3',]
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1',
++        'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2',
++        'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3']
+ 
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-									1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,
+-									1e-10,1e-10,1e-10,5e-11,2e-12,5e-12]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+-							md.results.TransientSolution[0].Surface,
+-							md.results.TransientSolution[0].Thickness,
+-							md.results.TransientSolution[0].MaskGroundediceLevelset,
+-							md.results.TransientSolution[0].IceVolume,
+-							md.results.TransientSolution[0].IceVolumeAboveFloatation,
+-							md.results.TransientSolution[1].Base,
+-							md.results.TransientSolution[1].Surface,
+-							md.results.TransientSolution[1].Thickness,
+-							md.results.TransientSolution[1].MaskGroundediceLevelset,
+-							md.results.TransientSolution[1].IceVolume,
+-							md.results.TransientSolution[1].IceVolumeAboveFloatation,
+-							md.results.TransientSolution[2].Base,
+-							md.results.TransientSolution[2].Surface,
+-							md.results.TransientSolution[2].Thickness,
+-							md.results.TransientSolution[2].MaskGroundediceLevelset,
+-							md.results.TransientSolution[2].IceVolume,
+-							md.results.TransientSolution[2].IceVolumeAboveFloatation]
++        md.results.TransientSolution[0].Surface,
++        md.results.TransientSolution[0].Thickness,
++        md.results.TransientSolution[0].MaskGroundediceLevelset,
++        md.results.TransientSolution[0].IceVolume,
++        md.results.TransientSolution[0].IceVolumeAboveFloatation,
++		  md.results.TransientSolution[0].IceMass,
++        md.results.TransientSolution[1].Base,
++        md.results.TransientSolution[1].Surface,
++        md.results.TransientSolution[1].Thickness,
++        md.results.TransientSolution[1].MaskGroundediceLevelset,
++        md.results.TransientSolution[1].IceVolume,
++        md.results.TransientSolution[1].IceVolumeAboveFloatation,
++		  md.results.TransientSolution[1].IceMass,
++        md.results.TransientSolution[2].Base,
++        md.results.TransientSolution[2].Surface,
++        md.results.TransientSolution[2].Thickness,
++        md.results.TransientSolution[2].MaskGroundediceLevelset,
++        md.results.TransientSolution[2].IceVolume,
++        md.results.TransientSolution[2].IceVolumeAboveFloatation,
++		  md.results.TransientSolution[2].IceMass]
Index: /issm/oecreview/Archive/21724-22754/ISSM-21825-21826.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21825-21826.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21825-21826.diff	(revision 22755)
@@ -0,0 +1,420 @@
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 21825)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 21826)
+@@ -16,7 +16,7 @@
+ // IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n);
+ IssmDouble EstarLambdaS(IssmDouble epseff, IssmDouble epsprime_norm);
+ void EstarOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag);
+-void EstarStrainrateQuantities(IssmDouble *pepseff, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag);
++void EstarStrainrateQuantities(IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag);
+ IssmDouble PddSurfaceMassBalance(IssmDouble* monthlytemperatures,  IssmDouble* monthlyprec,
+ 				 IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, IssmDouble signorm, 
+ 				 IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,IssmDouble s0t,
+Index: ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp	(revision 21825)
++++ ../trunk-jpl/src/c/shared/Elements/EstarComponents.cpp	(revision 21826)
+@@ -2,12 +2,12 @@
+ #include "../Numerics/types.h"
+ #include "../Exceptions/exceptions.h"
+ #include "./elements.h"
+-void EstarStrainrateQuantities(IssmDouble *pepseff, IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/
++void EstarStrainrateQuantities(IssmDouble *pepsprime_norm, IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble* dvmag){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble omega[3];
+ 	IssmDouble nrsp[3],nrsp_norm;
+-	IssmDouble eps[3][3],epseff;
++	IssmDouble eps[3][3];
+ 	IssmDouble epsprime[3],epsprime_norm;
+ 
+ 	/*Get omega, correction for rigid body rotation*/
+@@ -36,11 +36,6 @@
+ 	eps[1][0] = .5*(dvx[1]+dvy[0]); eps[1][1] = dvy[1];             eps[1][2] = .5*(dvy[2]+dvz[1]);
+ 	eps[2][0] = .5*(dvx[2]+dvz[0]); eps[2][1] = .5*(dvy[2]+dvz[1]); eps[2][2] = dvz[2];
+ 
+-	/*effective strain rate*/
+-	epseff = 0.;
+-	/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
+-	epseff = sqrt(eps[0][0]*eps[0][0] + eps[1][1]*eps[1][1] + eps[0][1]*eps[0][1] +  eps[0][2]*eps[0][2] + eps[1][2]*eps[1][2] + eps[0][0]*eps[1][1]);
+-
+ 	/*Compute the shear strain rate on the non rotating shear plane*/
+ 	epsprime[0]=0.;
+ 	epsprime[1]=0.;
+@@ -72,7 +67,6 @@
+ 	epsprime_norm = sqrt(epsprime[0]*epsprime[0] + epsprime[1]*epsprime[1] + epsprime[2]*epsprime[2]);
+ 	
+ 	/*Assign output pointers*/
+-	*pepseff=epseff;
+ 	*pepsprime_norm=epsprime_norm;
+ }/*}}}*/
+ void EstarOmega(IssmDouble* omega,IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble vmag,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz, IssmDouble* dvmag){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21826)
+@@ -47,7 +47,7 @@
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz,vmag;
+ 	IssmDouble dvx[3],dvy[3],dvz[3],dvmag[3];
+-	IssmDouble epseff,epsprime;
++	IssmDouble eps[3][3],epseff,epsprime;
+ 	int         dim;
+ 	IssmDouble *xyz_list = NULL;
+ 
+@@ -100,7 +100,18 @@
+ 			dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]);
+ 			dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
+ 		}
+-		EstarStrainrateQuantities(&epseff,&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]);
++
++		/*Build strain rate tensor*/
++		eps[0][0] = dvx[0];             eps[0][1] = .5*(dvx[1]+dvy[0]); eps[0][2] = .5*(dvx[2]+dvz[0]);
++		eps[1][0] = .5*(dvx[1]+dvy[0]); eps[1][1] = dvy[1];             eps[1][2] = .5*(dvy[2]+dvz[1]);
++		eps[2][0] = .5*(dvx[2]+dvz[0]); eps[2][1] = .5*(dvy[2]+dvz[1]); eps[2][2] = dvz[2];
++
++		/*effective strain rate*/
++		epseff = 0.;
++		/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
++		epseff = sqrt(eps[0][0]*eps[0][0] + eps[1][1]*eps[1][1] + eps[0][1]*eps[0][1] +  eps[0][2]*eps[0][2] + eps[1][2]*eps[1][2] + eps[0][0]*eps[1][1]);
++
++		EstarStrainrateQuantities(&epsprime,vx,vy,vz,vmag,&dvx[0],&dvy[0],&dvz[0],&dvmag[0]);
+ 		lambdas[iv]=EstarLambdaS(epseff,epsprime);
+ 	}
+ 
+@@ -676,7 +687,7 @@
+ 			material->GetViscosity_B(&dmudB,eps_eff);
+ 			break;
+ 		case MatestarEnum:
+-			material->ViscosityBFS(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,vz_input);
++			material->ViscosityBFS(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,vz_input,eps_eff);
+ 			break;
+ 		default: _error_("not supported");
+ 	}
+@@ -713,7 +724,7 @@
+ 			material->GetViscosity_B(&dmudB,eps_eff);
+ 			break;
+ 		case MatestarEnum:
+-			material->ViscosityBHO(&dmudB,dim,xyz_list,gauss,vx_input,vy_input);
++			material->ViscosityBHO(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
+ 			break;
+ 		default: _error_("not supported");
+ 	}
+@@ -750,7 +761,7 @@
+ 			material->GetViscosity_B(&dmudB,eps_eff);
+ 			break;
+ 		case MatestarEnum:
+-			material->ViscosityBSSA(&dmudB,dim,xyz_list,gauss,vx_input,vy_input);
++			material->ViscosityBSSA(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
+ 			break;
+ 		default: _error_("not supported");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 21826)
+@@ -87,9 +87,9 @@
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+ 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
+-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
+-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
++		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
++		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
++		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+ 		/*}}}*/
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 21826)
+@@ -124,9 +124,9 @@
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+ 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
+-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
+-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
++		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
++		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
++		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+ 		/*}}}*/
+ 		/*Numerics: {{{*/
+ 		void       EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure);
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 21826)
+@@ -248,13 +248,13 @@
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/
++IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble viscosity;
+ 
+ 	/*Intermediaries*/
+-	IssmDouble epseff,epsprime_norm;
++	IssmDouble epsprime_norm;
+ 	IssmDouble lambdas;
+ 	IssmDouble vmag,dvmag[3];
+ 	IssmDouble B,Ec,Es,E,n;
+@@ -272,8 +272,8 @@
+ 		dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
+ 	}
+ 
+-	EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
+-	lambdas=EstarLambdaS(epseff,epsprime_norm);
++	EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
++	lambdas=EstarLambdaS(eps_eff,epsprime_norm);
+ 
+ 	/*Get B and enhancement*/
+ 	n=GetN(); _assert_(n>0.);
+@@ -293,24 +293,27 @@
+ 
+ 	/*Compute viscosity*/
+ 	/*if no strain rate, return maximum viscosity*/
+-	if(epseff==0.){
++	if(eps_eff==0.){
+ 		viscosity = 1.e+14/2.;
+ 		//viscosity = B;
+ 		//viscosity=2.5*pow(10.,17);
+ 	}
+ 	else{
+-		viscosity = B/(2.*pow(E,1./n)*pow(epseff,2./n));
++		viscosity = B/(2.*pow(E,1./n)*pow(eps_eff,2./n));
+ 	}
+ 
++   /*Checks in debugging mode*/
++	if(viscosity<=0) _error_("Negative viscosity");
++
+ 	/*Assign output pointer*/
+ 	return viscosity;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged){/*{{{*/
++IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble dmudB;
+-	IssmDouble epseff,epsprime_norm;
++	IssmDouble epsprime_norm;
+ 	IssmDouble lambdas;
+ 	IssmDouble vmag,dvmag[3];
+ 	IssmDouble Ec,Es,E;
+@@ -328,8 +331,8 @@
+ 		dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
+ 	}
+ 
+-	EstarStrainrateQuantities(&epseff,&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
+-	lambdas=EstarLambdaS(epseff,epsprime_norm);
++	EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
++	lambdas=EstarLambdaS(eps_eff,epsprime_norm);
+ 
+ 	/*Get enhancement*/
+ 	if (isdepthaveraged==0.){
+@@ -345,8 +348,8 @@
+ 	E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.);
+ 
+ 	/*Compute dmudB*/
+-	if(epseff==0.) dmudB = 0.;
+-	else           dmudB = 1./(2.*pow(E,1./3.)*pow(epseff,2./3.));
++	if(eps_eff==0.) dmudB = 0.;
++	else           dmudB = 1./(2.*pow(E,1./3.)*pow(eps_eff,2./3.));
+ 
+ 	/*Assign output*/
+ 	return dmudB;
+@@ -407,7 +410,7 @@
+ 
+ }
+ /*}}}*/
+-void  Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
++void  Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+@@ -433,10 +436,10 @@
+ 	}
+ 
+ 	/*Compute dmudB*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }
+ /*}}}*/
+-void  Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
++void  Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+@@ -462,9 +465,9 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }/*}}}*/
+-void  Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
++void  Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+ 	IssmDouble dvx[3],dvy[3],dvz[3];
+@@ -492,7 +495,7 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }/*}}}*/
+ void  Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
+ 
+@@ -499,6 +502,9 @@
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+ 	IssmDouble dvx[3],dvy[3],dvz[3];
++	IssmDouble epsilon3d[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble epsilon2d[3]; /* epsilon=[exx,eyy,exy];*/
++	IssmDouble eps_eff,eps0=1.e-27;
+ 	bool isdepthaveraged=0.;
+ 
+ 	/*Get velocity derivatives in all directions*/
+@@ -519,8 +525,19 @@
+ 		dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.;
+ 	}
+ 
++	if(dim==3){
++      /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
++		element->StrainRateFS(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input,vz_input);
++		eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[3]*epsilon3d[3] +  epsilon3d[4]*epsilon3d[4] + epsilon3d[5]*epsilon3d[5] + epsilon3d[0]*epsilon3d[1]+eps0*eps0);
++	}
++	else{
++		/* eps_eff^2 = 1/2 ( exx^2 + eyy^2 + 2*exy^2 )*/
++		element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
++		eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]);
++	}
++
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }
+ /*}}}*/
+ void  Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+@@ -531,8 +548,22 @@
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+ 	IssmDouble dvx[3],dvy[3],dvz[3];
++	IssmDouble epsilon3d[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble epsilon2d[5]; /* epsilon=[exx,exy];*/
++	IssmDouble eps_eff;
+ 	bool isdepthaveraged=0.;
+ 
++   if(dim==3){
++		/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
++		element->StrainRateHO(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input);
++		eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[2]*epsilon3d[2] +  epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[0]*epsilon3d[1]);
++	}
++	else{
++		/* eps_eff^2 = 1/2 (2*exx^2 + 2*exy^2 ) (since eps_zz = - eps_xx)*/
++		element->StrainRateHO2dvertical(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
++		eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]);
++	}
++
+ 	/*Get velocity derivatives in all directions*/
+ 	_assert_(dim==2 || dim==3);
+ 	_assert_(vx_input);
+@@ -552,7 +583,7 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }/*}}}*/
+ void  Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+ 	_error_("not implemented yet");
+@@ -565,6 +596,9 @@
+ 	/*Intermediaries*/
+ 	IssmDouble vx,vy,vz;
+ 	IssmDouble dvx[3],dvy[3],dvz[3];
++	IssmDouble epsilon2d[3];/* epsilon=[exx,eyy,exy]; */
++	IssmDouble epsilon1d;   /* epsilon=[exx];         */
++	IssmDouble eps_eff;
+ 	bool isdepthaveraged=1.;
+ 
+ 	/*Get velocity derivatives in all directions*/
+@@ -588,8 +622,19 @@
+ 	vz = 0.;
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
++   if(dim==2){
++		/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exx*eyy*/
++		element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
++		eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]);
++	}
++	else{
++		/* eps_eff^2 = exx^2*/
++		element->StrainRateSSA1d(&epsilon1d,xyz_list,gauss,vx_input);
++		eps_eff = fabs(epsilon1d);
++	}
++
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
+ }/*}}}*/
+ void  Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+ 	_error_("not implemented yet");
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 21826)
+@@ -723,7 +723,7 @@
+ 	IssmDouble viscosity;
+ 	IssmDouble epsilon3d[5];/* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble epsilon2d[2];/* epsilon=[exx,exy];            */
+-	IssmDouble eps_eff,E=1.0;
++	IssmDouble eps_eff;
+ 
+ 	if(dim==3){
+ 		/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 21826)
+@@ -52,9 +52,9 @@
+ 		virtual void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0;
+ 		virtual void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+ 		virtual void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
+-		virtual void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
+-		virtual void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+-		virtual void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
++		virtual void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff)=0;
++		virtual void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
++		virtual void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
+ 
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 21825)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 21826)
+@@ -85,12 +85,12 @@
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+ 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
+-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
++		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff);
++		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
++		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
+ 		/*}}}*/
+-		IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged);
+-		IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,bool isdepthaveraged);
++		IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
++		IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
+ };
+ 
+ #endif  /* _MATESTAR_H_ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-21826-21827.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21826-21827.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21826-21827.diff	(revision 22755)
@@ -0,0 +1,296 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 21826)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 21827)
+@@ -176,7 +176,7 @@
+ 
+ 			%Start with changing all the fields from the 3d mesh 
+ 
+-			%dealing with the friciton law
++			%dealing with the friction law
+ 			%drag is limited to nodes that are on the bedrock.
+ 			if isa(md.friction,'friction'),
+ 				md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+@@ -205,7 +205,7 @@
+ 				md.friction.m=project2d(md,md.friction.m,1);
+ 			else
+ 				disp('friction type not supported');
+-	    end
++			end
+ 
+ 			%observations
+ 			if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers); end;
+Index: ../trunk-jpl/src/m/classes/regionaloutput.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/regionaloutput.py	(revision 21826)
++++ ../trunk-jpl/src/m/classes/regionaloutput.py	(revision 21827)
+@@ -1,8 +1,11 @@
++from project3d import project3d
+ from fielddisplay import fielddisplay
+ from pairoptions import pairoptions
+ from checkfield import checkfield
+ from WriteData import WriteData
+ from MeshProfileIntersection import MeshProfileIntersection
++from ContourToMesh import ContourToMesh
++import numpy as np
+ import os
+ 
+ class regionaloutput(object):
+@@ -36,10 +39,14 @@
+ 		self=options.AssignObjectFields(self)
+ 
+ 		#get name
+-		modelname=getfieldvalue(options,'model');
+-		self.maskexpstring=getfieldvalue(options,'maskexpstring');
+-		self.setmaskfromexp(self,md)
+-		error('regionaloutput error message: ''mask'' field or ''maskexpstring'' and ''model'' fields should be defined!');
++		if options.getfieldvalue('model',0):
++			if options.getfieldvalue('maskexpstring',0):
++				modelname=options.getfieldvalue('model')
++				self.maskexpstring=options.getfieldvalue('maskexpstring')
++				self.setmaskfromexp(modelname)
++			
++		if (len(self.mask)<=1 & np.any(np.isnan(self.mask))):
++			error('regionaloutput error message: ''mask'' field or ''maskexpstring'' and ''model'' fields should be defined!');
+ 
+ 		#}}}
+ 	def __repr__(self): # {{{
+@@ -60,7 +67,7 @@
+ 		return self
+ 	#}}}
+ 	def setmaskfromexp(self,md):    # {{{
+-		if len(self.maskexpstring,0) > 0:
++		if len(self.maskexpstring) > 0:
+ 			self.mask=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,self.maskexpstring,'node',1)
+ 			
+ 		return self
+@@ -73,11 +80,11 @@
+ 		if  not isinstance(self.outputnamestring, basestring):
+ 			raise RuntimeError("regionaloutput error message: 'outputnamestring' field should be a string!") 
+ 		
+-		if len(self.maskexpstring,0) > 0:
+-			if not os.path.isfile(self.profilename):
++		if len(self.maskexpstring) > 0:
++			if not os.path.isfile(self.maskexpstring):
+ 				raise RuntimeError("regionaloutput error message: file name for mask exp does not point to a legitimate file on disk!")
+ 			else:
+-				self.setmaskfromexp(self,md)
++				self.setmaskfromexp(md)
+ 
+ 		OutputdefinitionStringArray=[]
+ 		for i in range(1,100):
+@@ -84,15 +91,14 @@
+ 			x='Outputdefinition'+str(i)
+ 			OutputdefinitionStringArray.append(x)
+ 
+-		md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray])
+-      md = checkfield(md,'field',self.mask,'size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1)
+-		
++		md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray)
++		md = checkfield(md,'field',self.mask,'size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
+ 		return md
+ 	# }}}
+ 	def marshall(self,prefix,md,fid):    # {{{
+ 
+ 		#before marshalling, make sure mask is set: 
+-		self.setmaskfromexp(self,md)
++		self.setmaskfromexp(md)
+ 
+ 		#ok, marshall strings and mask: 
+ 		WriteData(fid,prefix,'data',self.name,'name','md.regionaloutput.name','format','String')
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 21826)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 21827)
+@@ -688,12 +688,20 @@
+ 		if md.mesh.domaintype().lower() != '3d':
+ 			raise StandardError("only a 3D model can be collapsed")
+ 		
++		#dealing with the friction law
+ 		#drag is limited to nodes that are on the bedrock.
+-		md.friction.coefficient=project2d(md,md.friction.coefficient,1)
++		if hasattr(md.friction,'coefficient'): md.friction.coefficient=project2d(md,md.friction.coefficient,1)
+ 
+ 		#p and q (same deal, except for element that are on the bedrock: )
+-		md.friction.p=project2d(md,md.friction.p,1)
+-		md.friction.q=project2d(md,md.friction.q,1)
++		if hasattr(md.friction,'p'): md.friction.p=project2d(md,md.friction.p,1)
++		if hasattr(md.friction,'q'): md.friction.q=project2d(md,md.friction.q,1)
++		
++		if hasattr(md.friction,'coefficientcoulomb'): md.friction.q=project2d(md,md.friction.coefficientcoulomb,1)
++		if hasattr(md.friction,'C'): md.friction.q=project2d(md,md.friction.C,1)
++		if hasattr(md.friction,'As'): md.friction.q=project2d(md,md.friction.As,1)
++		if hasattr(md.friction,'effective_pressure'): md.friction.q=project2d(md,md.friction.effective_pressure,1)
++		if hasattr(md.friction,'water_layer'): md.friction.q=project2d(md,md.friction.water_layer,1)
++		if hasattr(md.friction,'m'): md.friction.q=project2d(md,md.friction.m,1)
+ 
+ 		#observations
+ 		if not np.isnan(md.inversion.vx_obs).all(): md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 
+@@ -730,8 +738,7 @@
+ 			md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1)
+ 			md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1)
+ 
+-
+-      # Hydrologydc variables
++		# Hydrologydc variables
+ 		if hasattr(md.hydrology,'hydrologydc'):
+ 			md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1)
+ 			md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1)
+@@ -793,9 +800,8 @@
+ 									setattr(fieldr,solutionsubfield,project2d(md,subfield,1))
+ 								elif np.size(subfield)==md.mesh.numberofelements:
+ 									setattr(fieldr,solutionsubfield,project2d(md,subfield,1))
+-								else:
+-									setattr(fieldr,solutionsubfield,subfield)
+ 
++
+ 		#Initialize with the 2d mesh
+ 		mesh=mesh2d()
+ 		mesh.x=md.mesh.x2d
+@@ -811,6 +817,9 @@
+ 			if md.mesh.long.size==md.mesh.numberofvertices: mesh.long=project2d(md,md.mesh.long,1) 
+ 		mesh.epsg=md.mesh.epsg
+ 		md.mesh=mesh
++		md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)[0]
++		md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity)[0]
++		md.mesh.segments=contourenvelope(md)
+ 
+ 		return md
+ 
+Index: ../trunk-jpl/test/NightlyRun/test443.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test443.m	(revision 21826)
++++ ../trunk-jpl/test/NightlyRun/test443.m	(revision 21827)
+@@ -43,6 +43,7 @@
+ 	'maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md);
+ 
+ md=extrude(md,3,1);
++md2=collapse(md);
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+@@ -49,9 +50,10 @@
+ field_names     ={'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21',...
+ 	'Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
+ 	'IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23',...
+-	'Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3'};
++	'Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3',...
++	'ExtrudedMask','CollapsedMask'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).IceMass1),...
+ 	(md.results.TransientSolution(1).IceVolume1),...
+@@ -73,4 +75,6 @@
+ 	(md.results.TransientSolution(3).TotalFloatingBmb1),...
+ 	(md.results.TransientSolution(3).TotalGroundedBmb1),...
+ 	(md.results.TransientSolution(3).TotalSmb1),...
++	length(md.outputdefinition.definitions{1}.mask),...
++	length(md2.outputdefinition.definitions{1}.mask),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test408.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.py	(revision 21826)
++++ ../trunk-jpl/test/NightlyRun/test408.py	(revision 21827)
+@@ -23,10 +23,10 @@
+ md.friction.coefficientcoulomb=0.02*np.ones(md.mesh.numberofvertices)
+ md.transient.isthermal=False
+ md.transient.isgroundingline=True
+-md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+ md.transient.requested_outputs=['default','GroundedArea','FloatingArea','TotalFloatingBmb','TotalGroundedBmb','TotalSmb']
++md.extrude(3,1.)
+ md=solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test443.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test443.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test443.py	(revision 21827)
+@@ -0,0 +1,80 @@
++#Test Name: SquareSheetShelfTranSSA3dAggressiveRegionalOutput
++import numpy as np
++from model import *
++from socket import gethostname
++
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from frictioncoulomb import frictioncoulomb
++from ContourToMesh import ContourToMesh
++from regionaloutput import regionaloutput
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.geometry.bed=copy.deepcopy(md.geometry.base)
++pos=np.nonzero(md.mask.groundedice_levelset<0.)
++md.geometry.bed[pos]=md.geometry.bed[pos]-10
++md.friction=frictioncoulomb()
++md.friction.coefficient=20*np.ones(md.mesh.numberofvertices)
++md.friction.p=1*np.ones(md.mesh.numberofelements)
++md.friction.q=1*np.ones(md.mesh.numberofelements)
++md.friction.coefficientcoulomb=0.02*np.ones(md.mesh.numberofvertices)
++md.transient.isthermal=False
++md.transient.isgroundingline=True
++md.groundingline.migration='AggressiveMigration';
++
++md.settings.output_frequency=2
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',gethostname(),'np',3)
++
++regionalmask=np.zeros((md.mesh.numberofvertices))
++inflag=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1)
++regionalmask[np.nonzero(inflag)[0]] = 1.
++md.transient.requested_outputs=['default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation']
++
++md.outputdefinition.definitions=[regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,'definitionstring','Outputdefinition1'),
++		regionaloutput('name','FloatingArea1','outputnamestring','FloatingArea','mask',regionalmask,'definitionstring','Outputdefinition2'),
++		regionaloutput('name','TotalFloatingBmb1','outputnamestring','TotalFloatingBmb','mask',regionalmask,'definitionstring','Outputdefinition3'),
++		regionaloutput('name','TotalGroundedBmb1','outputnamestring','TotalGroundedBmb','mask',regionalmask,'definitionstring','Outputdefinition4'),
++		regionaloutput('name','IceMass1','outputnamestring','IceMass','mask',regionalmask,'definitionstring','Outputdefinition5'),
++		regionaloutput('name','IceVolume1','outputnamestring','IceVolume','mask',regionalmask,'definitionstring','Outputdefinition6'),
++		regionaloutput('name','IceVolumeAboveFloatation1','outputnamestring','IceVolumeAboveFloatation','mask',regionalmask,'definitionstring','Outputdefinition7'),
++		regionaloutput('name','TotalSmb1','outputnamestring','TotalSmb','mask',regionalmask,'definitionstring','Outputdefinition8'),
++		regionaloutput('name','IceVolumeAboveFloatation2','outputnamestring','IceVolumeAboveFloatation','maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md)]
++
++md.extrude(3,1.)
++md2=copy.deepcopy(md)
++md2.collapse()
++md=solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     =['IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21','Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23','Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3','ExtrudedMask','CollapsedMask']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.TransientSolution[0].IceMass1,\
++	md.results.TransientSolution[0].IceVolume1,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatation1,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatation2,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].GroundedArea1,\
++	md.results.TransientSolution[0].FloatingArea1,\
++	md.results.TransientSolution[0].TotalFloatingBmb1,\
++	md.results.TransientSolution[0].TotalGroundedBmb1,\
++	md.results.TransientSolution[0].TotalSmb1,\
++	md.results.TransientSolution[2].IceMass1,\
++	md.results.TransientSolution[2].IceVolume1,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatation1,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatation2,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].GroundedArea1,\
++	md.results.TransientSolution[2].FloatingArea1,\
++	md.results.TransientSolution[2].TotalFloatingBmb1,\
++	md.results.TransientSolution[2].TotalGroundedBmb1,\
++	md.results.TransientSolution[2].TotalSmb1,\
++	len(md.outputdefinition.definitions[0].mask),\
++	len(md2.outputdefinition.definitions[0].mask),\
++	]
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21827-21828.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21827-21828.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21827-21828.diff	(revision 22755)
@@ -0,0 +1,536 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 21827)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 21828)
+@@ -5,19 +5,12 @@
+ #include "./InterpFromMeshToGridx.h"
+ #include "../../shared/shared.h"
+ 
+-void InterpFromMeshToGridx(double** px_m,double** py_m,double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh, int data_length, double xmin,double ymax,double xposting,double yposting,int nlines,int ncols,double default_value) {
++void InterpFromMeshToGridx(double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value){
+ 
+-	/*Output*/
+-	double* griddata=NULL;
+-	double* x_grid=NULL;
+-	double* y_grid=NULL;
+-
+ 	/*Intermediary*/
+-	int    i,j,n;
++	int    i,j;
+ 	int    i1,i2,j1,j2;
+ 	int    interpolation_type;
+-	bool   debug;
+-	int    xflip,yflip;
+ 	double area;
+ 	double area_1,area_2,area_3;
+ 	double x_tria_min,y_tria_min;
+@@ -27,74 +20,59 @@
+ 	double data_value;
+ 
+ 	/*some checks*/
+-	if (nels<1 || nods<3 || nlines<1 || ncols<1 || xposting==0 || yposting==0){
+-		_error_("nothing to be done according to the mesh given in input");
+-	}
++	if(nels<1 || nods<3 || nlines<2 || ncols<2) _error_("nothing to be done according to the mesh given in input");
+ 
+ 	/*figure out what kind of interpolation is needed*/
+-	if (data_length==nods){
+-		interpolation_type=1;
+-	}
+-	else if (data_length==nels){
+-		interpolation_type=2;
+-	}
+-	else{
+-		_error_("length of vector data not supported yet. It should be of length (number of nodes) or (number of elements)!");
+-	}
++	if(data_length==nods)      interpolation_type=1;
++	else if(data_length==nels) interpolation_type=2;
++	else _error_("length of vector data not supported yet. It should be of length (number of nodes) or (number of elements)!");
+ 
+ 	/*First, allocate pointers: */
+-	griddata=xNewZeroInit<double>(nlines*ncols);
+-	x_grid=xNewZeroInit<double>(ncols);
+-	y_grid=xNewZeroInit<double>(nlines);
++	double* griddata=xNewZeroInit<double>(nlines*ncols);
+ 
+ 	/*Set debug to 1 if there are lots of elements*/
+-	debug=(bool)((double)ncols*nlines*nels >= 5*pow(10.,10.));
++	bool debug=(bool)((double)ncols*nlines*nels >= 5.e10);
+ 
+ 	/*Initialize coordintes and griddata*/
+-	for(i=0;i<nlines;i++){
+-		for(j=0;j<ncols; j++){
+-			griddata[i*ncols+j]=default_value;
+-		}
+-	}
++	for(i=0;i<nlines;i++) for(j=0;j<ncols; j++) griddata[i*ncols+j]=default_value;
++
+ 	/*figure out if x or y are flipped*/
+-	if (xposting<0) xflip=1;
+-	else xflip=0;
+-	if (yposting<0) yflip=1;
+-	else yflip=0;
++	bool xflip = false;
++	bool yflip = false;
++	if (x_grid[1]-x_grid[0]<0) xflip=true;
++	if (y_grid[1]-y_grid[0]<0) yflip=true;
+ 
+-	/*Get extreme coordinates of the grid*/
+-	if (xflip){
+-		for(i=0;i<ncols; i++) x_grid[ncols-1-i] = xmin - xposting*i;
++	/*Get min/max coordinates of the grid*/
++	double xposting = x_grid[1]-x_grid[0];
++	double yposting = y_grid[1]-y_grid[0];
++	if(xflip){
+ 		x_grid_min=x_grid[ncols-1];
+ 		x_grid_max=x_grid[0];
+ 	}
+ 	else{
+-		for(i=0;i<ncols; i++) x_grid[i]= xmin + xposting*i;
+ 		x_grid_min=x_grid[0];
+ 		x_grid_max=x_grid[ncols-1];
+ 	}
+-	if (yflip){
+-		for(i=0;i<nlines;i++) y_grid[i] = ymax + yposting*i;
++	if(yflip){
+ 		y_grid_min=y_grid[nlines-1];
+ 		y_grid_max=y_grid[0];
+ 	}
+ 	else{
+-		for(i=0;i<nlines;i++) y_grid[nlines-1-i]= ymax - yposting*i;
+ 		y_grid_min=y_grid[0];
+ 		y_grid_max=y_grid[nlines-1];
+ 	}
+ 
+ 	/*Loop over the elements*/
+-	for (n=0;n<nels;n++){
++	for(int n=0;n<nels;n++){
+ 
+ 		/*display current iteration*/
+-		if (debug && fmod((double)n,(double)100)==0)
++		if(debug && fmod((double)n,(double)100)==0)
+ 		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(n)/double(nels)*100<<"%   ");
+ 
+ 		/*Get extrema coordinates of current elements*/
+ 		x_tria_min=x_mesh[(int)index_mesh[3*n+0]-1]; x_tria_max=x_tria_min;
+ 		y_tria_min=y_mesh[(int)index_mesh[3*n+0]-1]; y_tria_max=y_tria_min;
+-		for (i=1;i<3;i++){
++		for(i=1;i<3;i++){
+ 			if(x_mesh[(int)index_mesh[3*n+i]-1]<x_tria_min) x_tria_min=x_mesh[(int)index_mesh[3*n+i]-1];
+ 			if(x_mesh[(int)index_mesh[3*n+i]-1]>x_tria_max) x_tria_max=x_mesh[(int)index_mesh[3*n+i]-1];
+ 			if(y_mesh[(int)index_mesh[3*n+i]-1]<y_tria_min) y_tria_min=y_mesh[(int)index_mesh[3*n+i]-1];
+@@ -102,10 +80,10 @@
+ 		}
+ 
+ 		/*if the current triangle is not in the grid, continue*/
+-		if ( (x_tria_min>x_grid_max) || (x_tria_max<x_grid_min) || (y_tria_min>y_grid_max) || (y_tria_max<y_grid_min) ) continue;
++		if( (x_tria_min>x_grid_max) || (x_tria_max<x_grid_min) || (y_tria_min>y_grid_max) || (y_tria_max<y_grid_min) ) continue;
+ 
+ 		/*Get indices i and j that form a square around the currant triangle*/
+-		if (yflip){
++		if(yflip){
+ 			i1=max(0,       (int)floor((y_tria_max-y_grid_max)/yposting)-1);
+ 			i2=min(nlines-1,(int)ceil((y_tria_min-y_grid_max)/yposting));
+ 		}
+@@ -113,7 +91,7 @@
+ 			i1=max(0,       (int)floor((y_tria_min-y_grid_min)/yposting)-1);
+ 			i2=min(nlines-1,(int)ceil((y_tria_max-y_grid_min)/yposting));
+ 		}
+-		if (xflip){
++		if(xflip){
+ 			j1=max(0,      (int)floor((x_tria_max-x_grid_max)/xposting)-1);
+ 			j2=min(ncols-1,(int)ceil((x_tria_min-x_grid_max)/xposting));
+ 		}
+@@ -129,7 +107,7 @@
+ 		  +  x_mesh[(int)index_mesh[3*n+2]-1]*y_mesh[(int)index_mesh[3*n+0]-1]-y_mesh[(int)index_mesh[3*n+2]-1]*x_mesh[(int)index_mesh[3*n+0]-1];
+ 
+ 		/*Go through x_grid and y_grid and interpolate if necessary*/
+-		for (i=i1;i<=i2;i++){
++		for(i=i1;i<=i2;i++){
+ 
+ 			//exit if y not between y_tria_min and y_tria_max
+ 			if((y_grid[i]>y_tria_max) || (y_grid[i]<y_tria_min)) continue;
+@@ -146,13 +124,13 @@
+ 				area_2=((x_mesh[(int)index_mesh[3*n+0]-1]-x_mesh[(int)index_mesh[3*n+2]-1])*(y_grid[i]-y_mesh[(int)index_mesh[3*n+2]-1]) 
+ 							- (y_mesh[(int)index_mesh[3*n+0]-1]-y_mesh[(int)index_mesh[3*n+2]-1])*(x_grid[j]-x_mesh[(int)index_mesh[3*n+2]-1]))/area;
+ 				/*Get third area coordinate = 1-area1-area2*/
+-				area_3=1-area_1-area_2;
++				area_3=1.-area_1-area_2;
+ 
+ 				/*is the current point in the current element?*/
+-				if (area_1>-10e-12 && area_2>-10e-12 && area_3>-10e-12){
++				if(area_1>-10e-12 && area_2>-10e-12 && area_3>-10e-12){
+ 
+ 					/*Yes ! compute the value on the point*/
+-					if (interpolation_type==1){
++					if(interpolation_type==1){
+ 						/*nodal interpolation*/
+ 						data_value=area_1*data_mesh[(int)index_mesh[3*n+0]-1]+area_2*data_mesh[(int)index_mesh[3*n+1]-1]+area_3*data_mesh[(int)index_mesh[3*n+2]-1];
+ 					}
+@@ -168,11 +146,8 @@
+ 			}
+ 		}
+ 	}
+-	if (debug)
+-	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
++	if(debug) _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Assign output pointers:*/
+ 	*pgriddata=griddata;
+-	*px_m=x_grid;
+-	*py_m=y_grid;
+ }
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h	(revision 21827)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h	(revision 21828)
+@@ -7,6 +7,6 @@
+ 
+ #include "../../toolkits/toolkits.h"
+ 
+-void InterpFromMeshToGridx(double** px_m,double** py_m,double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh, int data_length, double xmin,double ymax,double xposting,double yposting,int nlines,int ncols,double default_value);
++void InterpFromMeshToGridx(double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value);
+ 
+ #endif /* _INTERPFROMMESHTOGRIDX_H */
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 21827)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 21828)
+@@ -11,35 +11,30 @@
+ 	_printf0_("   defined on a triangular mesh onto a regular grid\n");
+ 	_printf0_("\n");
+ 	_printf0_("   Usage:\n");
+-	_printf0_("      [x_m,y_m,griddata]=InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)\n");
++	_printf0_("      grid=InterpFromMeshToGrid(index,x,y,data,x_grid,y_grid,default_value)\n");
+ 	_printf0_("\n");
+ 	_printf0_("      index,x,y: delaunay triangulation defining the mesh.\n");
+ 	_printf0_("      meshdata: vertex values of data to be interpolated.\n");
+-	_printf0_("      xmin,ymax,posting,nlines,ncols: parameters that define the grid\n");
++	_printf0_("      xgrid,ygrid: parameters that define the grid\n");
+ 	_printf0_("      default_value: value of points located out of the mesh.\n");
+ 	_printf0_("\n");
+ }/*}}}*/
+ WRAPPER(InterpFromMeshToGrid_python){
+ 
+-	/*input datasets: */
++	/*inputs */
+ 	double* index=NULL;
+-	int     nel;
+ 	double* x=NULL;
+-	int     nods;
+ 	double* y=NULL;
++	int     nel,nods;
+ 	double* meshdata=NULL;
+ 	int     meshdata_length;
+-	double  xmin;
+-	double  ymax;
+-	double  xposting;
+-	double  yposting;
+-	int     nlines,ncols;
++	double* xgrid=NULL;
++	double* ygrid=NULL;
++	int     nlines,ncols,test;
+ 	double  default_value;
+ 
+-	/* output datasets: */
++	/* outputs */
+ 	double* griddata=NULL;
+-	double* x_m=NULL;
+-	double* y_m=NULL;
+ 
+ 	/*Boot module: */
+ 	MODULEBOOT();
+@@ -50,24 +45,20 @@
+ 	#endif
+ 
+ 	/*Input datasets: */
+-	FetchData(&index,&nel,NULL,INDEX);
+-	FetchData(&x,&nods,NULL,X);
+-	FetchData(&y,NULL,NULL,Y);
+-	FetchData(&meshdata,&meshdata_length,NULL,MESHDATA);
+-	FetchData(&xmin,XMIN);
+-	FetchData(&ymax,YMAX);
+-	FetchData(&xposting,XPOSTING);
+-	FetchData(&yposting,YPOSTING);
+-	FetchData(&nlines,NLINES);
+-	FetchData(&ncols,NCOLS);
++	FetchData(&index,&nel,&test,INDEX);
++	if(test!=3) _error_("size not supported yet");
++	FetchData(&x,&nods,X);
++	FetchData(&y,&test,Y);
++	if(test!=nods) _error_("size not supported yet");
++	FetchData(&meshdata,&meshdata_length,MESHDATA);
++	FetchData(&xgrid,&ncols,XGRID); 
++	FetchData(&ygrid,&nlines,YGRID);
+ 	FetchData(&default_value,DEFAULTVALUE);
+ 
+ 	/*Call core of computation: */
+-	InterpFromMeshToGridx(&x_m,&y_m,&griddata,index,x,y,nods,nel,meshdata,meshdata_length,xmin,ymax,xposting,yposting,nlines,ncols,default_value);
++	InterpFromMeshToGridx(&griddata,index,x,y,nods,nel,meshdata,meshdata_length,xgrid,ygrid,nlines,ncols,default_value);
+ 
+ 	/*Write results: */
+-	WriteData(XM,x_m,ncols);
+-	WriteData(YM,y_m,nlines);
+ 	WriteData(GRIDDATA,griddata,nlines,ncols);
+ 
+ 	/*Free ressources: */
+@@ -76,8 +67,8 @@
+ 	xDelete<double>(y);
+ 	xDelete<double>(meshdata);
+ 	xDelete<double>(griddata);
+-	xDelete<double>(x_m);
+-	xDelete<double>(y_m);
++	xDelete<double>(xgrid);
++	xDelete<double>(ygrid);
+ 
+ 	/*end module: */
+ 	MODULEEND();
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 21827)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 21828)
+@@ -32,17 +32,11 @@
+ #define X            prhs[1]
+ #define Y            prhs[2]
+ #define MESHDATA     prhs[3]
+-#define XMIN         prhs[4]
+-#define YMAX         prhs[5]
+-#define XPOSTING     prhs[6]
+-#define YPOSTING     prhs[7]
+-#define NLINES       prhs[8]
+-#define NCOLS        prhs[9]
+-#define DEFAULTVALUE prhs[10]
++#define XGRID        prhs[4]
++#define YGRID        prhs[5]
++#define DEFAULTVALUE prhs[6]
+ /* serial output macros: */
+-#define XM (mxArray**)&plhs[0]
+-#define YM (mxArray**)&plhs[1]
+-#define GRIDDATA (mxArray**)&plhs[2]
++#define GRIDDATA (mxArray**)&plhs[0]
+ #endif
+ 
+ #ifdef _HAVE_PYTHON_MODULES_
+@@ -51,23 +45,17 @@
+ #define X            PyTuple_GetItem(args,1)
+ #define Y            PyTuple_GetItem(args,2)
+ #define MESHDATA     PyTuple_GetItem(args,3)
+-#define XMIN         PyTuple_GetItem(args,4)
+-#define YMAX         PyTuple_GetItem(args,5)
+-#define XPOSTING     PyTuple_GetItem(args,6)
+-#define YPOSTING     PyTuple_GetItem(args,7)
+-#define NLINES       PyTuple_GetItem(args,8)
+-#define NCOLS        PyTuple_GetItem(args,9)
++#define XGRID        PyTuple_GetItem(args,4)
++#define YGRID        PyTuple_GetItem(args,5)
+ #define DEFAULTVALUE PyTuple_GetItem(args,10)
+ /* serial output macros: */
+-#define XM output,0
+-#define YM output,1
+-#define GRIDDATA output,2
++#define GRIDDATA output,0
+ #endif
+ 
+ /* serial arg counts: */
+ #undef NLHS
+-#define NLHS  3
++#define NLHS  1
+ #undef NRHS
+-#define NRHS  11
++#define NRHS  7
+ 
+ #endif  /* _INTERPFROMMESHTOGRID_H*/
+Index: ../trunk-jpl/src/m/miscellaneous/diagnostics.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/diagnostics.m	(revision 21827)
++++ ../trunk-jpl/src/m/miscellaneous/diagnostics.m	(revision 21828)
+@@ -45,11 +45,10 @@
+ 		xposting=getfieldvalue(options,'velposting',500);
+ 		yposting=getfieldvalue(options,'velposting',500);
+ 
+-		xmin=min(md.mesh.x); ymax=max(md.mesh.y); 
+-		ncols=(max(md.mesh.x)-min(md.mesh.x))/xposting+1;
+-		nlines=(max(md.mesh.y)-min(md.mesh.y))/yposting+1;
++		xm=min(md.mesh.x):posting:max(md.mesh.x);
++		ym=min(md.mesh.y):posting:max(md.mesh.y);
+ 		
+-		[xm,ym,vel]=InterpFromMeshToGrid(md.mesh.elements,md.mesh.x,md.mesh.y,vel,xmin,ymax,xposting,yposting,nlines,ncols,0);
++		vel=InterpFromMeshToGrid(md.mesh.elements,md.mesh.x,md.mesh.y,vel,xm,ym,0.);
+ 		vel=uint16(flipud(vel));
+ 
+ 		imwrite(vel,[path '/veltemp.tif'],'tiff');
+Index: ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.py
+===================================================================
+--- ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.py	(revision 21827)
++++ ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.py	(revision 21828)
+@@ -1,6 +1,6 @@
+ from InterpFromMeshToGrid_python import InterpFromMeshToGrid_python
+ 
+-def InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value):
++def InterpFromMeshToGrid(index,x,y,data,xgrid,ygrid,default_value):
+ 	"""
+ 	INTERPFROMMESHTOGRID - Interpolation of a data defined on a mesh onto a grid
+ 
+@@ -10,10 +10,10 @@
+ 		index,x,y:	delaunay triangulation defining the mesh
+ 		meshdata:	vertex values of data to be interpolated
+ 
+-		xmin,ymax,posting,nlines,ncols:	parameters that define the grid
++		xgrid,ygrid,:	parameters that define the grid
+ 		default_value:	value of points located out of the mesh
+ 	"""
+ 	# Call mex module
+-	x_m,y_m,griddata=InterpFromMeshToGrid_python(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)
++	grid=InterpFromMeshToGrid_python(index,x,y,data,xgrid,ygrid,default_value)
+ 	# Return
+-	return x_m,y_m,griddate
++	return grid
+Index: ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.m	(revision 21827)
++++ ../trunk-jpl/src/m/modules/InterpFromMeshToGrid.m	(revision 21828)
+@@ -1,6 +1,9 @@
+-function [x_m,y_m,griddata] = InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value);
++function grid = InterpFromMeshToGrid(index,x,y,data,xgrid,ygrid,default_value);
+ %INTERPFROMMESHTOGRID - Interpolation of a data defined on a mesh onto a grid
+ %
++%   Usage:
++%      grid = InterpFromMeshToGrid(index,x,y,data,xgrid,ygrid,default_value)
++%
+ %   This function is a multi-threaded mex file that interpolates a field defined on a triangular
+ %   mesh onto a regular grid.
+ %
+@@ -7,14 +10,14 @@
+ %   index,x,y:	delaunay triangulation defining the mesh
+ %   meshdata:	vertex values of data to be interpolated
+ %
+-%   xmin,ymax,posting,nlines,ncols: parameters that define the grid
+-%   default_value:	value of points located out of the mesh
++%   xgrid,ygrid:   parameters that define the grid
++%   default_value: value of points located out of the mesh
+ 
+ % Check usage
+-if nargin~=11
++if nargin~=7
+ 	help InterpFromMeshToGrid
+ 	error('Wrong usage (see above)');
+ end
+ 
+ % Call mex module
+-[x_m,y_m,griddata] = InterpFromMeshToGrid_matlab(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value);
++grid = InterpFromMeshToGrid_matlab(index,x,y,data,xgrid,ygrid,default_value);
+Index: ../trunk-jpl/src/m/plot/plot_overlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 21827)
++++ ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 21828)
+@@ -57,26 +57,13 @@
+ end
+ 
+ %InterpFromMeshToGrid
+-xmin=min(md.radaroverlay.x);
+-ymax=max(md.radaroverlay.y);
+-xspacing=(max(md.radaroverlay.x)-min(md.radaroverlay.x))/(length(md.radaroverlay.x) -1);
+-yspacing=(max(md.radaroverlay.y)-min(md.radaroverlay.y))/(length(md.radaroverlay.y) -1);
+-if(md.radaroverlay.x(end)-md.radaroverlay.x(1)<0)
+-	xspacing= -xspacing; 
+-end
+-if(md.radaroverlay.y(end)-md.radaroverlay.y(1)<0)
+-	yspacing= -yspacing; 
+-end
+-nlines=length(md.radaroverlay.y);
+-ncols =length(md.radaroverlay.x);
+ disp('Interpolating data on grid...');
++x_m = md.radaroverlay.x;
++y_m = md.radaroverlay.y;
+ if radaronly,
+-	x_m=xmin:xspacing:xmin+ncols*xspacing;
+-	y_m=ymax-nlines*yspacing:yspacing:ymax;
+-	data_grid=NaN*ones(nlines,ncols);
++	data_grid=NaN(size(radar));
+ else
+-	[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x/getfieldvalue(options,'unit',1),y/getfieldvalue(options,'unit',1),...
+-		data,xmin,ymax,xspacing,yspacing,nlines,ncols,NaN);
++	data_grid=InterpFromMeshToGrid(elements,x/getfieldvalue(options,'unit',1),y/getfieldvalue(options,'unit',1),data,x_m,y_m,NaN);
+ end
+ 
+ %Process data_grid (For processing, it is better not to have nan)
+@@ -151,7 +138,7 @@
+ subplotmodel(plotlines,plotcols,i,options);
+ 
+ %Plot: 
+-imagesc(md.radaroverlay.x*getfieldvalue(options,'unit',1),md.radaroverlay.y*getfieldvalue(options,'unit',1),image_rgb);set(gca,'YDir','normal');
++imagesc(x_m*getfieldvalue(options,'unit',1),y_m*getfieldvalue(options,'unit',1),image_rgb);set(gca,'YDir','normal');
+ 
+ %last step: mesh overlay?
+ if exist(options,'edgecolor'),
+Index: ../trunk-jpl/src/m/plot/plot_googlemaps.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_googlemaps.m	(revision 21827)
++++ ../trunk-jpl/src/m/plot/plot_googlemaps.m	(revision 21828)
+@@ -61,14 +61,9 @@
+ 
+ %Prepare grid
+ if size(md.radaroverlay.x,1)==1 | size(md.radaroverlay.x,2)==1,
+-	xmin=min(md.radaroverlay.x);
+-	ymax=max(md.radaroverlay.y);
+-	xspacing=md.radaroverlay.x(2)-md.radaroverlay.x(1);
+-	yspacing=md.radaroverlay.y(2)-md.radaroverlay.y(1);
+-	nlines=length(md.radaroverlay.y);
+-	ncols =length(md.radaroverlay.x);
+-		[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x/getfieldvalue(options,'unit',1),y/getfieldvalue(options,'unit',1),...
+-			data,xmin,ymax,xspacing,yspacing,nlines,ncols,NaN);
++	x_m = md.radaroverlay.x;
++	y_m = md.radaroverlay.y;
++	data_grid=InterpFromMeshToGrid(elements,x/getfieldvalue(options,'unit',1),y/getfieldvalue(options,'unit',1),data,x_m,y_m,NaN);
+ else
+ 	X = md.radaroverlay.x;
+ 	Y = md.radaroverlay.y;
+Index: ../trunk-jpl/src/m/plot/plot_gridded.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 21827)
++++ ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 21828)
+@@ -22,7 +22,9 @@
+ posty=getfieldvalue(options,'posting',diff(ylim)/1000);
+ 
+ %Interpolating data on grid
+-[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x,y,data,xlim(1),ylim(2),postx,posty,round(diff(ylim)/posty),round(diff(xlim)/postx),NaN);
++x_m = xlim(1):postx:xlim(2);
++y_m = ylim(1):posty:ylim(2);
++data_grid=InterpFromMeshToGrid(elements,x,y,data,x_m,y_m,NaN);
+ data_grid_save = data_grid;
+ if size(data_grid,1)<3 | size(data_grid,2)<3,
+ 	error('data_grid size too small in plot_gridded, check posting and units');
+Index: ../trunk-jpl/src/m/plot/kmlgridded.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/kmlgridded.m	(revision 21827)
++++ ../trunk-jpl/src/m/plot/kmlgridded.m	(revision 21828)
+@@ -24,7 +24,9 @@
+ end
+ 
+ %Interpolating data on grid
+-[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x,y,data,xlim(1),ylim(2),post,post,round(diff(ylim)/post),round(diff(xlim)/post),NaN);
++x_m = xlim(1):post:xlim(2);
++y_m = ylim(1):post:ylim(2);
++data_grid=InterpFromMeshToGrid(elements,x,y,data,x_m,y_m,NaN);
+ if size(data_grid,1)<3 | size(data_grid,2)<3,
+ 	error('data_grid size too small, check posting and units');
+ end
+Index: ../trunk-jpl/src/m/kml/kmlimagesc.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kmlimagesc.m	(revision 21827)
++++ ../trunk-jpl/src/m/kml/kmlimagesc.m	(revision 21828)
+@@ -45,11 +45,11 @@
+ end
+ 
+ %figure out nlines and ncols in our image
+-nlines=(maxlat-minlat)/posting;
+-ncols=(maxlong-minlong)/posting;
++x_m = minlong:posting:maxlong;
++y_m = minlat:posting:maxlat;
+ 
+ %regrid to lat,long grid
+-[x_m,y_m,field]=InterpFromMeshToGrid(md.mesh.elements,md.mesh.long,md.mesh.lat,field,minlong,maxlat,posting,posting,nlines,ncols,NaN);
++field=InterpFromMeshToGrid(md.mesh.elements,md.mesh.long,md.mesh.lat,field,x_m,y_m,NaN);
+ field=flipud(field);
+ 
+ %massage  and log:
Index: /issm/oecreview/Archive/21724-22754/ISSM-21828-21829.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21828-21829.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21828-21829.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21828)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21829)
+@@ -2418,13 +2418,14 @@
+  		
+ 		element->GetVerticesCoordinates(&xyz_list);
+ 		for(int i=0;i<numvertices;i++){
+-			x = *(xyz_list+3*i+0);
+-			y = *(xyz_list+3*i+1);
++			x = xyz_list[3*i+0];
++			y = xyz_list[3*i+1];
+ 			
+ 			bx=-150.-728.8*std::pow(x/300000.,2)+343.91*std::pow(x/300000.,4)-50.57*std::pow(x/300000.,6);
+ 			by=500./(1.+std::exp((-2./4000.)*(y-80000./2.-24000.)))+500./(1.+std::exp((2./4000.)*(y-80000./2.+24000.)));
+ 			
+-			r[i]=std::max(bx+by,-720.);
++			r[i] = -720.;
++			if(bx+by>-720.) r[i] = bx+by;
+ 		}	
+ 
+ 		/*insert new bedrock*/
+@@ -2436,8 +2437,6 @@
+ 
+    /*Delete*/
+    xDelete<IssmDouble>(r);
+-	
+-	return;
+ }
+ /*}}}*/
+ void FemModel::AdjustBaseThicknessAndMask(void){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21829-21830.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21829-21830.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21829-21830.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21829)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21830)
+@@ -157,7 +157,7 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.lowercrustheat",BasalforcingsLowercrustheatEnum));
+ 			break;
+ 		default:
+-			_error_("Basal forcing model "<<EnumToStringx(smb_model)<<" not supported yet");
++			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+ 	}
+ 
+ 	/*some parameters that did not come with the iomodel: */
Index: /issm/oecreview/Archive/21724-22754/ISSM-21830-21831.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21830-21831.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21830-21831.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 21830)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 21831)
+@@ -119,11 +119,11 @@
+ 						end
+ 					else
+ 						if IssmConfig('_HAVE_MPI_'),
+-							fprintf(fid,'mpiexec -np %i %s --leak-check=full --error-limit=no --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+-							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname,modelname,modelname);
++							fprintf(fid,'mpiexec -np %i %s --leak-check=full --error-limit=no --suppressions=%s %s/%s %s %s %s 2> %s.errlog >%s.outlog ',...
++							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 						else
+-							fprintf(fid,'%s --leak-check=full --error-limit=no --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+-							cluster.valgrind,cluster.valgrindsup,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname,modelname,modelname);
++							fprintf(fid,'%s --leak-check=full --error-limit=no --suppressions=%s %s/%s %s %s %s 2> %s.errlog >%s.outlog ',...
++							cluster.valgrind,cluster.valgrindsup,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 						end
+ 					end
+ 				end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21831-21832.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21831-21832.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21831-21832.diff	(revision 22755)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21831)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21832)
+@@ -81,6 +81,12 @@
+ 
+    /*AMR stuff*/
+ 	this->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
++	#ifdef _HAVE_NEOPZ_
++	this->amr = NULL;
++	#endif
++	#ifdef _HAVE_BAMG_
++	this->amrbamg = NULL;
++	#endif
+ 	if(amr_frequency){
+ 		this->parameters->FindParam(&amrtype,AmrTypeEnum);
+ 		switch(amrtype){
+@@ -120,6 +126,13 @@
+ 	profiler->Tag(STARTINIT);
+ 	this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, solution_type,traceon,X);
+ 	profiler->Tag(FINISHINIT);
++
++	#ifdef _HAVE_NEOPZ_
++	this->amr = NULL;
++	#endif
++	#ifdef _HAVE_BAMG_
++	this->amrbamg = NULL;
++	#endif
+ 	
+ 	/*Save communicator in the parameters dataset: */
+ 	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
+@@ -288,6 +301,14 @@
+ 		ConfigureObjectsx(output->elements,output->loads,output->nodes,output->vertices,output->materials,output->parameters);
+ 	}
+ 
++	/*AMR, no copy for now*/
++	#ifdef _HAVE_NEOPZ_
++	this->amr = NULL;
++	#endif
++	#ifdef _HAVE_BAMG_
++	this->amrbamg = NULL;
++	#endif
++
+ 	/*Reset current configuration: */
+ 	analysis_type=output->analysis_type_list[analysis_counter];
+ 	output->SetCurrentConfiguration(analysis_type);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21832-21833.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21832-21833.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21832-21833.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21832)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21833)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,9e-09,5e-09,3e-09,6e-04,5e-04,2e-09,1e-10,1e-13};
++	4e-10,3e-08,8e-09,5e-09,7e-04,5e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21832)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21833)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,5e-09,3e-09,2e-7,5e-04,4e-04,1e-09,1e-10,1e-13};
++	1e-10,2e-08,7e-09,2e-7,9e-04,7e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21833-21834.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21833-21834.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21833-21834.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 21833)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 21834)
+@@ -182,6 +182,7 @@
+ 						if archive == None:
+ 							raise NameError("Field name '"+archive_name+'_field'+str(k+1)+"' does not exist in archive file.")
+ 						error_diff=np.amax(np.abs(archive-field),axis=0)/(np.amax(np.abs(archive),axis=0)+float_info.epsilon)
++                                                error_diff=error_diff[0]
+ 
+ 						#disp test result
+ 						if (np.any(error_diff>tolerance) or np.isnan(error_diff)):
Index: /issm/oecreview/Archive/21724-22754/ISSM-21834-21835.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21834-21835.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21834-21835.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 21834)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 21835)
+@@ -18,9 +18,9 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1', \
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2']
+-field_tolerances=[1e-12,1e-12,1e-10,1e-12,1e-13,3e-13,7e-13,3e-13,1e-13,6e-10, \
+-						2e-12,5e-12,1e-10,4e-12,3e-13,1e-11,1e-11,2e-12,1e-11,1e-8]
++        'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2']
++field_tolerances=[1e-12,1e-12,3e-10,1e-12,1e-13,1e-11,5e-12,9e-12,1e-13,5e-9, \
++        5e-11,5e-11,1e-10,2e-11,7e-12,1e-11,1e-11,5e-12,1e-11,2e-8]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-21835-21836.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21835-21836.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21835-21836.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 21835)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 21836)
+@@ -182,7 +182,7 @@
+ 						if archive == None:
+ 							raise NameError("Field name '"+archive_name+'_field'+str(k+1)+"' does not exist in archive file.")
+ 						error_diff=np.amax(np.abs(archive-field),axis=0)/(np.amax(np.abs(archive),axis=0)+float_info.epsilon)
+-                                                error_diff=error_diff[0]
++                                                if not np.isscalar(error_diff): error_diff=error_diff[0]
+ 
+ 						#disp test result
+ 						if (np.any(error_diff>tolerance) or np.isnan(error_diff)):
Index: /issm/oecreview/Archive/21724-22754/ISSM-21836-21837.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21836-21837.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21836-21837.diff	(revision 22755)
@@ -0,0 +1,761 @@
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21837)
+@@ -186,12 +186,6 @@
+ 			}
+ 		}
+ 
+-		//MaxCornerAngle
+-		if (bamgopts->MaxCornerAngle){
+-			if(verbose>5) _printf_("      processing MaxCornerAngle\n");
+-			MaxCornerAngle=bamgopts->MaxCornerAngle*Pi/180;
+-		}
+-
+ 		//TangentAtEdges
+ 		if (bamggeom->TangentAtEdges){
+ 			if(verbose>5) _printf_("      processing TangentAtEdges");
+@@ -400,7 +394,6 @@
+ 		_printf_("   pmin (x,y): (" << pmin.x << " " << pmin.y << ")\n");
+ 		_printf_("   pmax (x,y): (" << pmax.x << " " << pmax.y << ")\n");
+ 		_printf_("   coefIcoor: " << coefIcoor << "\n");
+-		_printf_("   MaxCornerAngle: " << MaxCornerAngle << "\n");
+ 
+ 		return;
+ 	}
+@@ -418,7 +411,6 @@
+ 		nbsubdomains=0;
+ 		nbcurves=0;
+ 		subdomains=NULL;
+-		MaxCornerAngle = 10*Pi/180; //default is 10 degres
+ 	}
+ 	/*}}}*/
+ 	double Geometry::MinimalHmin() {/*{{{*/
+@@ -613,19 +605,14 @@
+ 				}
+ 			}
+ 
+-			// angular test on current vertex to guess whether it is a corner (ord = number of edges holding i)
+-			if(ord==2) { 
++			//all vertices provided in geometry are corners (ord = number of edges holding i)
++			vertices[i].SetCorner() ; 
++			if(ord==2){ 
+ 				long  n1 = head_v[i];
+ 				long  n2 = next_p[n1];
+ 				long  i1 = n1/2, i2 = n2/2; // edge number
+-				long  j1 = n1%2, j2 = n2%2; // vertex in the edge 
+-				float angle1=  j1 ? OppositeAngle(eangle[i1]) : eangle[i1];
+-				float angle2= !j2 ? OppositeAngle(eangle[i2]) : eangle[i2];
+-				float da12 = Abs(angle2-angle1);
+-				if (( da12 >= MaxCornerAngle ) && (da12 <= 2*Pi -MaxCornerAngle)) {
+-					vertices[i].SetCorner() ; 
+-				}
+-				// if the edge type/referencenumber a changing then is SetRequired();
++				long  j1 = n1%2, j2 = n2%2; // vertex in the edge
++				/* if the edge type/referencenumber a changing then is SetRequired();*/
+ 				if (edges[i1].type != edges[i2].type || edges[i1].Required()){
+ 					vertices[i].SetRequired();
+ 				}
+@@ -633,9 +620,6 @@
+ 					vertices[i].SetRequired();
+ 				}
+ 			}
+-			if(ord != 2) {
+-				vertices[i].SetCorner();
+-			}
+ 
+ 			/*close the list around the vertex to have a circular loop*/
+ 			long no=-1, ne = head_v[i];
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21837)
+@@ -39,6 +39,7 @@
+ 			R2                            pmin,pmax;             // extrema
+ 			double                        coefIcoor;             // coef to integer
+ 			ListofIntersectionTriangles   lIntTria;
++			int                           randomseed;            //used for random number generation
+ 
+ 			long                          NbVerticesOnGeomVertex;
+ 			VertexOnGeom                 *VerticesOnGeomVertex;
+@@ -76,7 +77,7 @@
+ 			I2 R2ToI2(const R2 & P) const;
+ 			R2 I2ToR2(const I2 & P) const;
+ 			void AddVertex(BamgVertex & s,Triangle * t,long long *  =0) ;
+-			void Insert(bool random);
++			void Insert();
+ 			void Echo(void);
+ 			void ForceBoundary();
+ 			void FindSubDomain(int OutSide=0);
+@@ -90,7 +91,7 @@
+ 			void MakeBamgQuadtree();
+ 			void MaxSubDivision(double maxsubdiv);
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+-			long InsertNewPoints(long nbvold,long & NbTSwap,bool random); 
++			long InsertNewPoints(long nbvold,long & NbTSwap); 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+ 			void SmoothingVertex(int =3,double=0.3);
+ 			Metric MetricAt (const R2 &) const;
+@@ -112,8 +113,8 @@
+ 			void AddMetric(BamgOpts* bamgopts);
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
+-			void AddGeometryMetric(BamgOpts* bamgopts);
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
++			int  RandomNumber(int max);
+ 			void ReconstructExistingMesh();
+ 
+ 			//Inline methods
+@@ -142,6 +143,10 @@
+ 			void TriangulateFromGeom0(BamgOpts* bamgopts);// the real constructor mesh generator
+ 			void Triangulate(double* x,double* y,int nods);
+ 			void Init(long);
++			int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
++			int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
++						AdjacentTriangle & tt1,long long & dets1,
++						long long & detsa,long long & detsb, int & nbswap);
+ 	};
+ 
+ 	/*Intermediary*/
+@@ -149,10 +154,7 @@
+ 	void  swap(Triangle *t1,short a1,
+ 				Triangle *t2,short a2,
+ 				BamgVertex *s1,BamgVertex *s2,long long det1,long long det2);
+-	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
+-				AdjacentTriangle & tt1,long long & dets1,
+-				long long & detsa,long long & detsb, int & nbswap);
+-	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
++
+ 	inline AdjacentTriangle Previous(const AdjacentTriangle & ta){
+ 		return AdjacentTriangle(ta.t,PreviousEdge[ta.a]);
+ 	}
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21837)
+@@ -16,7 +16,6 @@
+ 		double  errg;
+ 		double  gradation;
+ 		int     Hessiantype;
+-		double  MaxCornerAngle;
+ 		int     maxnbv;
+ 		double  maxsubdiv;
+ 		int     Metrictype;
+@@ -24,12 +23,10 @@
+ 		int     nbsmooth;
+ 		double  omega;
+ 		double  power;
+-		bool    random;
+ 		int     verbose;
+ 
+ 		/*Flags*/
+ 		int     Crack;
+-		int     geometricalmetric;
+ 		int     KeepVertices;
+ 		int     splitcorners;
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21837)
+@@ -979,57 +979,6 @@
+ 	/*}}}*/
+ 
+ 	/*Methods*/
+-	void Mesh::AddGeometryMetric(BamgOpts* bamgopts){/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/IntersectGeomMetric)*/
+-
+-		/*Get options*/
+-		double anisomax = bamgopts->anisomax;
+-		double errg     = bamgopts->errg;
+-
+-		double ss[2]={0.00001,0.99999};
+-		double errC = 2*sqrt(2*errg);
+-		double hmax = Gh.MaximalHmax();
+-		double hmin = Gh.MinimalHmin();
+-
+-		//check that hmax is positive
+-		_assert_(hmax>0); 
+-
+-		//errC cannot be higher than 1
+-		if(errC>1) errC=1;
+-
+-		//Set all vertices to "on"
+-		SetVertexFieldOn();
+-
+-		//loop over all the vertices on edges
+-		for(int  i=0;i<nbe;i++){
+-			for (int j=0;j<2;j++){
+-
+-				BamgVertex V;
+-				VertexOnGeom GV;
+-				Gh.ProjectOnCurve(edges[i],ss[j],V,GV);
+-
+-				GeomEdge* eg = GV;
+-				double s = GV;
+-				R2 tg;
+-				double  R1= eg->R1tg(s,tg);
+-				double  ht=hmax;
+-				// err relative to the length of the edge
+-				if (R1>1.0e-20) {  
+-					ht = Min(Max(errC/R1,hmin),hmax);
+-				}
+-				double hn=Min(hmax,ht*anisomax);
+-
+-				if (ht<=0 || hn<=0){
+-					_error_("ht<=0 || hn<=0");
+-				}
+-				EigenMetric Vp(1/(ht*ht),1/(hn*hn),tg);
+-				Metric MVp(Vp);
+-				edges[i][j].m.IntersectWith(MVp);
+-			}
+-		}
+-		// the problem is for the vertex on vertex 
+-	}
+-	/*}}}*/
+ 	void Mesh::AddMetric(BamgOpts* bamgopts){/*{{{*/
+ 		//  Hessiantype = 0 =>  H is computed using double L2 projection
+ 		//  Hessiantype = 1 =>  H is computed with green formula
+@@ -1230,12 +1179,10 @@
+ 		/*Intermediary*/
+ 		int i,j,k,kk,it,jt;
+ 		int    verbose=0;
+-		double cutoffradian=10*Pi/180;
+ 
+ 		/*Recover options*/
+-		if (bamgopts){
++		if(bamgopts){
+ 			verbose=bamgopts->verbose;
+-			cutoffradian=bamgopts->MaxCornerAngle*Pi/180;
+ 		}
+ 
+ 		//display info
+@@ -1242,13 +1189,8 @@
+ 		if (verbose>1) _printf_("   construction of the geometry from the 2d mesh\n");
+ 
+ 		//check that the mesh is not empty
+-		if (nbt<=0 || nbv <=0 ) {
+-			_error_("nbt or nbv is negative (Mesh empty?)");
+-		}
++		if(nbt<=0 || nbv <=0 ) _error_("nbt or nbv is negative (Mesh empty?)");
+ 
+-		//Gh is the geometry of the mesh (this), initialize MaxCornerAngle
+-		if (cutoffradian>=0) Gh.MaxCornerAngle = cutoffradian;
+-
+ 		/*Construction of the edges*/
+ 
+ 		//initialize st and edge4
+@@ -1446,9 +1388,7 @@
+ 		/*Reconstruct subdomains info*/
+ 
+ 		//check that nbsubdomains is empty
+-		if (nbsubdomains){
+-			_error_("nbsubdomains should be 0");
+-		}
++		if(nbsubdomains) _error_("nbsubdomains should be 0");
+ 		nbsubdomains=0;
+ 
+ 		//color the subdomains
+@@ -2648,51 +2588,51 @@
+ 	void Mesh::Init(long maxnbv_in) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/PreInit)*/
+ 
+-		/* initialize random seed: */
+-		srand(19999999);
+-
+ 		/*Initialize fields*/
+-		NbRef=0;
+-		quadtree=NULL;
+-		nbv=0;
+-		nbt=0;
+-		nbe=0;
+-		edges=NULL;
+-		nbsubdomains=0;
+-		subdomains=NULL;
+-		maxnbv=maxnbv_in;
+-		maxnbt=2 *maxnbv_in-2;
+-		NbVertexOnBThVertex=0;
+-		VertexOnBThVertex=NULL;
+-		NbVertexOnBThEdge=0;
+-		VertexOnBThEdge=NULL;
+-		NbCrackedVertices=0;
+-		CrackedVertices =NULL;
+-		NbCrackedEdges =0;
+-		CrackedEdges =NULL;
+-		NbVerticesOnGeomVertex=0;
+-		VerticesOnGeomVertex=NULL;
+-		NbVerticesOnGeomEdge=0;
+-		VerticesOnGeomEdge=NULL;
++		this->NbRef                  = 0;
++		this->quadtree               = NULL;
++		this->nbv                    = 0;
++		this->nbt                    = 0;
++		this->nbe                    = 0;
++		this->edges                  = NULL;
++		this->nbsubdomains           = 0;
++		this->subdomains             = NULL;
++		this->maxnbv                 = maxnbv_in;
++		this->maxnbt                 = 2 *maxnbv_in-2;
++		this->NbVertexOnBThVertex    = 0;
++		this->VertexOnBThVertex      = NULL;
++		this->NbVertexOnBThEdge      = 0;
++		this->VertexOnBThEdge        = NULL;
++		this->NbCrackedVertices      = 0;
++		this->CrackedVertices        = NULL;
++		this->NbCrackedEdges         = 0;
++		this->CrackedEdges           = NULL;
++		this->NbVerticesOnGeomVertex = 0;
++		this->VerticesOnGeomVertex   = NULL;
++		this->NbVerticesOnGeomEdge   = 0;
++		this->VerticesOnGeomEdge     = NULL;
+ 
++		/*Initialize random seed*/
++		this->randomseed = 1;
++
+ 		/*Allocate if maxnbv_in>0*/
+ 		if(maxnbv_in){
+-			vertices=new BamgVertex[maxnbv];
+-			_assert_(vertices);
+-			orderedvertices=new BamgVertex* [maxnbv];
+-			_assert_(orderedvertices);
+-			triangles=new Triangle[maxnbt];
+-			_assert_(triangles);
++			this->vertices=new BamgVertex[this->maxnbv];
++			this->orderedvertices=new BamgVertex* [this->maxnbv];
++			this->triangles=new Triangle[this->maxnbt];
++         _assert_(this->vertices);
++         _assert_(this->orderedvertices);
++			_assert_(this->triangles);
+ 		}
+ 		else{
+-			vertices=NULL;
+-			orderedvertices=NULL;
+-			triangles=NULL;
+-			maxnbt=0;
++			this->vertices        = NULL;
++			this->orderedvertices = NULL;
++			this->triangles       = NULL;
++			this->maxnbt          = 0;
+ 		} 
+ 	}
+ 	/*}}}*/
+-	void Mesh::Insert(bool random) {/*{{{*/
++	void Mesh::Insert(){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Insert)*/
+ 
+ 		/*Insert points in the existing Geometry*/
+@@ -2739,8 +2679,7 @@
+ 
+ 		//Get Prime number
+ 		const long PrimeNumber= BigPrimeNumber(nbv);
+-		int temp = rand(); if(!random) temp = 756804110;
+-		int  k0=temp%nbv; 
++		int  k0=this->RandomNumber(nbv);
+ 
+ 		//Build orderedvertices
+ 		for (i=0; i<nbv; i++){
+@@ -2824,7 +2763,7 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap,bool random) {/*{{{*/
++	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/InsertNewPoints)*/
+ 
+ 		long int verbose=0;
+@@ -2844,9 +2783,7 @@
+ 
+ 		/*construction of a random order*/
+ 		const long PrimeNumber= BigPrimeNumber(nbv)  ;
+-		//remainder of the division of rand() by nbvnew
+-		int  temp = rand(); if(!random) temp = 1098566905;
+-		long k3 = temp%nbvnew;
++		long k3 = long(this->RandomNumber(nbvnew));
+ 		//loop over the new points
+ 		for (int is3=0; is3<nbvnew; is3++){
+ 			long j=nbvold +(k3 = (k3+PrimeNumber)%nbvnew);
+@@ -3087,7 +3024,7 @@
+ 			}
+ 			//if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
+ 			Bh.CreateSingleVertexToTriangleConnectivity();     
+-			InsertNewPoints(nbvold,NbTSwap,bamgopts->random);
++			InsertNewPoints(nbvold,NbTSwap);
+ 		}
+ 		else Bh.CreateSingleVertexToTriangleConnectivity();     
+ 
+@@ -3145,7 +3082,7 @@
+ 				} // end loop for each edge 
+ 			}// for triangle   
+ 
+-			if (!InsertNewPoints(nbvold,NbTSwap,bamgopts->random)) break;
++			if (!InsertNewPoints(nbvold,NbTSwap)) break;
+ 			for (i=nbtold;i<nbt;i++) first_np_or_next_t[i]=iter;
+ 			Headt = nbt; // empty list 
+ 
+@@ -4094,7 +4031,7 @@
+ 		maxnbt=2*maxnbv-2; // for filling The Holes and quadrilaterals 
+ 
+ 		/*Insert Vertices*/
+-		Insert(true);
++		Insert();
+ 	}
+ 	/*}}}*/
+ 	void Mesh::TriangulateFromGeom0(BamgOpts* bamgopts){/*{{{*/
+@@ -4395,7 +4332,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert(bamgopts->random);
++		Insert();
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4721,7 +4658,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert(bamgopts->random);
++		Insert();
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4736,48 +4673,14 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 	}
+ 	/*}}}*/
++	int  Mesh::RandomNumber(int max){/*{{{*/
++		/*  Generate a random number from 0 to max-1 using linear congruential
++		 *  random number generator*/
+ 
+-	/*Intermediary*/
+-	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
+-
+-		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
+-		int dir=0;
+-		if (k<0){
+-			_error_("k<0");
+-		}
+-		int kkk=0;  
+-		long long IJ_IA,IJ_AJ;
+-		AdjacentTriangle edge(t,OppositeEdge[k]);          
+-		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
+-			kkk++;
+-			if (kkk>=1000){
+-				_error_("kkk>=1000");
+-			}
+-			BamgVertex  &vI =  *edge.EdgeVertex(0);
+-			BamgVertex  &vJ =  *edge.EdgeVertex(1);
+-			I2 I=vI, J=vJ, IJ= J-I;
+-			IJ_IA = (IJ ,(A-I));
+-			if (IJ_IA<0) {
+-				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
+-				else {dir=-1;
+-					continue;}};// go in direction i 
+-					IJ_AJ = (IJ ,(J-A));
+-					if (IJ_AJ<0) {
+-						if(dir<0)  {a=0;b=1;return edge;}            
+-						else {dir = 1;
+-							continue;}}// go in direction j
+-							double IJ2 = IJ_IA + IJ_AJ;
+-							if (IJ2==0){
+-								_error_("IJ2==0");
+-							}
+-							a= IJ_AJ/IJ2;
+-							b= IJ_IA/IJ2;
+-							return edge;
+-		} 
+-	}
+-	/*}}}*/
+-	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
++		this->randomseed = (this->randomseed * 1366l + 150889l) % 714025l;
++		return this->randomseed / (714025l / max + 1);
++	} /*}}}*/
++	int Mesh::ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ForceEdge)*/
+ 
+ 		int NbSwap =0;
+@@ -4819,7 +4722,7 @@
+ 					_error_("!v1 || !v2");
+ 				}
+ 				long long detss = 0,l=0;
+-				while ((SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
++				while ((this->SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
+ 				 if(l++ > 10000000) {
+ 					 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+ 				 }
+@@ -4852,51 +4755,7 @@
+ 		return NbSwap; 
+ 	}
+ 	/*}}}*/
+-	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
+-		// --------------------------------------------------------------
+-		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
+-		//                               
+-		//               sb                     sb    
+-		//             / | \                   /   \                      !
+-		//         as1/  |  \                 /a2   \                     !
+-		//           /   |   \               /    t2 \                    !
+-		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
+-		//          \  a1|a2  /             \   as1   /  
+-		//           \   |   /               \ t1    /   
+-		//            \  |  / as2             \   a1/    
+-		//             \ | /                   \   /     
+-		//              sa                       sa   
+-		//  -------------------------------------------------------------
+-		int as1 = NextEdge[a1];
+-		int as2 = NextEdge[a2];
+-		int ap1 = PreviousEdge[a1];
+-		int ap2 = PreviousEdge[a2];
+-		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
+-		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
+-		// mise a jour des 2 adjacences externes 
+-		AdjacentTriangle taas1 = t1->Adj(as1),
+-							  taas2 = t2->Adj(as2),
+-							  tas1(t1,as1), tas2(t2,as2),
+-							  ta1(t1,a1),ta2(t2,a2);
+-		// externe haut gauche
+-		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
+-		// externe bas droite
+-		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
+-		// remove the Mark  UnMarkSwap 
+-		t1->SetUnMarkUnSwap(ap1);
+-		t2->SetUnMarkUnSwap(ap2);
+-		// interne 
+-		tas1.SetAdj2(tas2);
+-
+-		t1->det = det1;
+-		t2->det = det2;
+-
+-		t1->SetSingleVertexToTriangleConnectivity();
+-		t2->SetSingleVertexToTriangleConnectivity();
+-	} // end swap 
+-	/*}}}*/
+-	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
++	int Mesh::SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SwapForForcingEdge)*/
+ 		// l'arete ta coupe l'arete pva pvb
+ 		// de cas apres le swap sa coupe toujours
+@@ -4983,4 +4842,89 @@
+ 		return ret;
+ 	}
+ 	/*}}}*/
++
++	/*Intermediary*/
++	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
++
++		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
++		int dir=0;
++		if (k<0){
++			_error_("k<0");
++		}
++		int kkk=0;  
++		long long IJ_IA,IJ_AJ;
++		AdjacentTriangle edge(t,OppositeEdge[k]);          
++		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
++			kkk++;
++			if (kkk>=1000){
++				_error_("kkk>=1000");
++			}
++			BamgVertex  &vI =  *edge.EdgeVertex(0);
++			BamgVertex  &vJ =  *edge.EdgeVertex(1);
++			I2 I=vI, J=vJ, IJ= J-I;
++			IJ_IA = (IJ ,(A-I));
++			if (IJ_IA<0) {
++				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
++				else {dir=-1;
++					continue;}};// go in direction i 
++					IJ_AJ = (IJ ,(J-A));
++					if (IJ_AJ<0) {
++						if(dir<0)  {a=0;b=1;return edge;}            
++						else {dir = 1;
++							continue;}}// go in direction j
++							double IJ2 = IJ_IA + IJ_AJ;
++							if (IJ2==0){
++								_error_("IJ2==0");
++							}
++							a= IJ_AJ/IJ2;
++							b= IJ_IA/IJ2;
++							return edge;
++		} 
++	}
++	/*}}}*/
++	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
++		// --------------------------------------------------------------
++		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
++		//                               
++		//               sb                     sb    
++		//             / | \                   /   \                      !
++		//         as1/  |  \                 /a2   \                     !
++		//           /   |   \               /    t2 \                    !
++		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
++		//          \  a1|a2  /             \   as1   /  
++		//           \   |   /               \ t1    /   
++		//            \  |  / as2             \   a1/    
++		//             \ | /                   \   /     
++		//              sa                       sa   
++		//  -------------------------------------------------------------
++		int as1 = NextEdge[a1];
++		int as2 = NextEdge[a2];
++		int ap1 = PreviousEdge[a1];
++		int ap2 = PreviousEdge[a2];
++		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
++		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
++		// mise a jour des 2 adjacences externes 
++		AdjacentTriangle taas1 = t1->Adj(as1),
++							  taas2 = t2->Adj(as2),
++							  tas1(t1,as1), tas2(t2,as2),
++							  ta1(t1,a1),ta2(t2,a2);
++		// externe haut gauche
++		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
++		// externe bas droite
++		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
++		// remove the Mark  UnMarkSwap 
++		t1->SetUnMarkUnSwap(ap1);
++		t2->SetUnMarkUnSwap(ap2);
++		// interne 
++		tas1.SetAdj2(tas2);
++
++		t1->det = det1;
++		t2->det = det2;
++
++		t1->SetSingleVertexToTriangleConnectivity();
++		t2->SetSingleVertexToTriangleConnectivity();
++	} // end swap 
++	/*}}}*/
+ }
+Index: ../trunk-jpl/src/c/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21837)
+@@ -31,7 +31,6 @@
+ 			Curve         *curves;
+ 			R2             pmin,pmax;             // domain extrema coordinates
+ 			double         coefIcoor;             // coef to integer coordinates;
+-			double         MaxCornerAngle;
+ 
+ 			//Constructor/Destructors
+ 			~Geometry(); 
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21837)
+@@ -256,7 +256,6 @@
+ 			OnSwap = (Abs(det1) + Abs(det2)) < detA;
+ 
+ 			long long detMinNew=Min(det1,det2);
+-			//     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test   
+ 			if (! OnSwap &&(detMinNew>0)) {
+ 				OnSwap = detMin ==0;
+ 				if (! OnSwap) {
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21837)
+@@ -10,7 +10,6 @@
+ 	this->errg              = 0;
+ 	this->gradation         = 0;
+ 	this->Hessiantype       = 0;
+-	this->MaxCornerAngle    = 0;
+ 	this->maxnbv            = 0;
+ 	this->maxsubdiv         = 0;
+ 	this->Metrictype        = 0;
+@@ -18,11 +17,9 @@
+ 	this->nbsmooth          = 0;
+ 	this->omega             = 0;
+ 	this->power             = 0;
+-	this->random            = 0;
+ 	this->verbose           = 0;
+ 
+ 	this->Crack             = 0;
+-	this->geometricalmetric = 0;
+ 	this->KeepVertices      = 0;
+ 	this->splitcorners      = 0;
+ 
+@@ -67,7 +64,6 @@
+ 
+ 	if (this->Crack!=0  && this->Crack!=1) _error_("'Crack' supported options are 0 and 1");
+ 	if (this->KeepVertices!=0 && this->KeepVertices!=1) _error_("'KeepVertices' supported options are 0 and 1");
+-	if (this->geometricalmetric!=0  && this->geometricalmetric!=1) _error_("'geometricalmetric' supported options are 0 and 1");
+ 
+ 	if (this->hmin<=0) _error_("'hmin' option should be >0");
+ 	if (this->hmax<=0 || this->hmax<this->hmin) _error_("'hmax' option should be between 0 and hmin=" << this->hmin);
+Index: ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21837)
+@@ -148,9 +148,6 @@
+ 			}
+ 		}
+ 
+-		//Add geometry metric if provided
+-		if(bamgopts->geometricalmetric) BTh.AddGeometryMetric(bamgopts);
+-
+ 		//Smoothe metric
+ 		BTh.SmoothMetric(bamgopts->gradation);
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21836)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21837)
+@@ -453,8 +453,9 @@
+ issm_sources += ./analyses/ExtrapolationAnalysis.cpp
+ endif
+ #}}}
+-#Gia sources  {{{
++#Gia sources  (only if have fortran){{{
+ if GIAIVINS
++if FORTRAN
+ issm_sources +=  ./cores/gia_core.cpp\
+ 					./analyses/GiaIvinsAnalysis.cpp\
+ 					./modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp\
+@@ -466,6 +467,7 @@
+ 					./modules/GiaDeflectionCorex/stot.f\
+ 					./modules/GiaDeflectionCorex/what0.f
+ endif
++endif
+ #}}}
+ #Esa sources  {{{
+ if ESA 
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21836)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21837)
+@@ -31,7 +31,6 @@
+ 	this->options->errg              = 0.1;
+ 	this->options->gradation         = 1.5;
+ 	this->options->Hessiantype       = 0;
+-	this->options->MaxCornerAngle    = 1.e-12;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
+ 	this->options->Metrictype        = 0;
+@@ -39,10 +38,8 @@
+ 	this->options->nbsmooth          = 3;
+ 	this->options->omega             = 1.8;
+ 	this->options->power             = 1;
+-	this->options->random            = 0;
+ 	this->options->verbose           = 0;
+ 	this->options->Crack             = 0;
+-	this->options->geometricalmetric = 0;
+ 	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!!*/
+ 	this->options->splitcorners      = 1;
+ 	this->options->hmin              = hmin;
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 21836)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 21837)
+@@ -2059,6 +2059,11 @@
+ 				AC_MSG_ERROR([need at least python or matlab support to compile modules (or use --with-modules=no)]);
+ 		  fi
+ 
++       dnl check that fortran is provided if GiaIvins is on
++		 if test "$HAVE_GIAIVINS" = "yes" &&  test "$HAVE_FORTRAN" = "no" ; then
++			  AC_MSG_ERROR([need fortran compiler to compile GiaIvins (or use --without-GiaIvins )]);
++		 fi
++
+ 		  dnl check that if we have MPI, we have metis
+ 		  if test "$HAVE_METIS" = "yes"  && test "$HAVE_MPI" = "no" ; then
+ 				AC_MSG_ERROR([need mpi if using the metis partitioner!]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21837-21838.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21837-21838.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21837-21838.diff	(revision 22755)
@@ -0,0 +1,722 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21838)
+@@ -39,7 +39,6 @@
+ 			R2                            pmin,pmax;             // extrema
+ 			double                        coefIcoor;             // coef to integer
+ 			ListofIntersectionTriangles   lIntTria;
+-			int                           randomseed;            //used for random number generation
+ 
+ 			long                          NbVerticesOnGeomVertex;
+ 			VertexOnGeom                 *VerticesOnGeomVertex;
+@@ -77,7 +76,7 @@
+ 			I2 R2ToI2(const R2 & P) const;
+ 			R2 I2ToR2(const I2 & P) const;
+ 			void AddVertex(BamgVertex & s,Triangle * t,long long *  =0) ;
+-			void Insert();
++			void Insert(bool random);
+ 			void Echo(void);
+ 			void ForceBoundary();
+ 			void FindSubDomain(int OutSide=0);
+@@ -91,7 +90,7 @@
+ 			void MakeBamgQuadtree();
+ 			void MaxSubDivision(double maxsubdiv);
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+-			long InsertNewPoints(long nbvold,long & NbTSwap); 
++			long InsertNewPoints(long nbvold,long & NbTSwap,bool random); 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+ 			void SmoothingVertex(int =3,double=0.3);
+ 			Metric MetricAt (const R2 &) const;
+@@ -113,8 +112,8 @@
+ 			void AddMetric(BamgOpts* bamgopts);
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
++			void AddGeometryMetric(BamgOpts* bamgopts);
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
+-			int  RandomNumber(int max);
+ 			void ReconstructExistingMesh();
+ 
+ 			//Inline methods
+@@ -143,10 +142,6 @@
+ 			void TriangulateFromGeom0(BamgOpts* bamgopts);// the real constructor mesh generator
+ 			void Triangulate(double* x,double* y,int nods);
+ 			void Init(long);
+-			int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
+-			int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
+-						AdjacentTriangle & tt1,long long & dets1,
+-						long long & detsa,long long & detsb, int & nbswap);
+ 	};
+ 
+ 	/*Intermediary*/
+@@ -154,7 +149,10 @@
+ 	void  swap(Triangle *t1,short a1,
+ 				Triangle *t2,short a2,
+ 				BamgVertex *s1,BamgVertex *s2,long long det1,long long det2);
+-
++	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
++				AdjacentTriangle & tt1,long long & dets1,
++				long long & detsa,long long & detsb, int & nbswap);
++	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
+ 	inline AdjacentTriangle Previous(const AdjacentTriangle & ta){
+ 		return AdjacentTriangle(ta.t,PreviousEdge[ta.a]);
+ 	}
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21838)
+@@ -16,6 +16,7 @@
+ 		double  errg;
+ 		double  gradation;
+ 		int     Hessiantype;
++		double  MaxCornerAngle;
+ 		int     maxnbv;
+ 		double  maxsubdiv;
+ 		int     Metrictype;
+@@ -23,10 +24,12 @@
+ 		int     nbsmooth;
+ 		double  omega;
+ 		double  power;
++		bool    random;
+ 		int     verbose;
+ 
+ 		/*Flags*/
+ 		int     Crack;
++		int     geometricalmetric;
+ 		int     KeepVertices;
+ 		int     splitcorners;
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21838)
+@@ -979,6 +979,57 @@
+ 	/*}}}*/
+ 
+ 	/*Methods*/
++	void Mesh::AddGeometryMetric(BamgOpts* bamgopts){/*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/IntersectGeomMetric)*/
++
++		/*Get options*/
++		double anisomax = bamgopts->anisomax;
++		double errg     = bamgopts->errg;
++
++		double ss[2]={0.00001,0.99999};
++		double errC = 2*sqrt(2*errg);
++		double hmax = Gh.MaximalHmax();
++		double hmin = Gh.MinimalHmin();
++
++		//check that hmax is positive
++		_assert_(hmax>0); 
++
++		//errC cannot be higher than 1
++		if(errC>1) errC=1;
++
++		//Set all vertices to "on"
++		SetVertexFieldOn();
++
++		//loop over all the vertices on edges
++		for(int  i=0;i<nbe;i++){
++			for (int j=0;j<2;j++){
++
++				BamgVertex V;
++				VertexOnGeom GV;
++				Gh.ProjectOnCurve(edges[i],ss[j],V,GV);
++
++				GeomEdge* eg = GV;
++				double s = GV;
++				R2 tg;
++				double  R1= eg->R1tg(s,tg);
++				double  ht=hmax;
++				// err relative to the length of the edge
++				if (R1>1.0e-20) {  
++					ht = Min(Max(errC/R1,hmin),hmax);
++				}
++				double hn=Min(hmax,ht*anisomax);
++
++				if (ht<=0 || hn<=0){
++					_error_("ht<=0 || hn<=0");
++				}
++				EigenMetric Vp(1/(ht*ht),1/(hn*hn),tg);
++				Metric MVp(Vp);
++				edges[i][j].m.IntersectWith(MVp);
++			}
++		}
++		// the problem is for the vertex on vertex 
++	}
++	/*}}}*/
+ 	void Mesh::AddMetric(BamgOpts* bamgopts){/*{{{*/
+ 		//  Hessiantype = 0 =>  H is computed using double L2 projection
+ 		//  Hessiantype = 1 =>  H is computed with green formula
+@@ -1179,10 +1230,12 @@
+ 		/*Intermediary*/
+ 		int i,j,k,kk,it,jt;
+ 		int    verbose=0;
++		double cutoffradian=10*Pi/180;
+ 
+ 		/*Recover options*/
+-		if(bamgopts){
++		if (bamgopts){
+ 			verbose=bamgopts->verbose;
++			cutoffradian=bamgopts->MaxCornerAngle*Pi/180;
+ 		}
+ 
+ 		//display info
+@@ -1189,8 +1242,13 @@
+ 		if (verbose>1) _printf_("   construction of the geometry from the 2d mesh\n");
+ 
+ 		//check that the mesh is not empty
+-		if(nbt<=0 || nbv <=0 ) _error_("nbt or nbv is negative (Mesh empty?)");
++		if (nbt<=0 || nbv <=0 ) {
++			_error_("nbt or nbv is negative (Mesh empty?)");
++		}
+ 
++		//Gh is the geometry of the mesh (this), initialize MaxCornerAngle
++		if (cutoffradian>=0) Gh.MaxCornerAngle = cutoffradian;
++
+ 		/*Construction of the edges*/
+ 
+ 		//initialize st and edge4
+@@ -1388,7 +1446,9 @@
+ 		/*Reconstruct subdomains info*/
+ 
+ 		//check that nbsubdomains is empty
+-		if(nbsubdomains) _error_("nbsubdomains should be 0");
++		if (nbsubdomains){
++			_error_("nbsubdomains should be 0");
++		}
+ 		nbsubdomains=0;
+ 
+ 		//color the subdomains
+@@ -2588,51 +2648,51 @@
+ 	void Mesh::Init(long maxnbv_in) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/PreInit)*/
+ 
++		/* initialize random seed: */
++		srand(19999999);
++
+ 		/*Initialize fields*/
+-		this->NbRef                  = 0;
+-		this->quadtree               = NULL;
+-		this->nbv                    = 0;
+-		this->nbt                    = 0;
+-		this->nbe                    = 0;
+-		this->edges                  = NULL;
+-		this->nbsubdomains           = 0;
+-		this->subdomains             = NULL;
+-		this->maxnbv                 = maxnbv_in;
+-		this->maxnbt                 = 2 *maxnbv_in-2;
+-		this->NbVertexOnBThVertex    = 0;
+-		this->VertexOnBThVertex      = NULL;
+-		this->NbVertexOnBThEdge      = 0;
+-		this->VertexOnBThEdge        = NULL;
+-		this->NbCrackedVertices      = 0;
+-		this->CrackedVertices        = NULL;
+-		this->NbCrackedEdges         = 0;
+-		this->CrackedEdges           = NULL;
+-		this->NbVerticesOnGeomVertex = 0;
+-		this->VerticesOnGeomVertex   = NULL;
+-		this->NbVerticesOnGeomEdge   = 0;
+-		this->VerticesOnGeomEdge     = NULL;
++		NbRef=0;
++		quadtree=NULL;
++		nbv=0;
++		nbt=0;
++		nbe=0;
++		edges=NULL;
++		nbsubdomains=0;
++		subdomains=NULL;
++		maxnbv=maxnbv_in;
++		maxnbt=2 *maxnbv_in-2;
++		NbVertexOnBThVertex=0;
++		VertexOnBThVertex=NULL;
++		NbVertexOnBThEdge=0;
++		VertexOnBThEdge=NULL;
++		NbCrackedVertices=0;
++		CrackedVertices =NULL;
++		NbCrackedEdges =0;
++		CrackedEdges =NULL;
++		NbVerticesOnGeomVertex=0;
++		VerticesOnGeomVertex=NULL;
++		NbVerticesOnGeomEdge=0;
++		VerticesOnGeomEdge=NULL;
+ 
+-		/*Initialize random seed*/
+-		this->randomseed = 1;
+-
+ 		/*Allocate if maxnbv_in>0*/
+ 		if(maxnbv_in){
+-			this->vertices=new BamgVertex[this->maxnbv];
+-			this->orderedvertices=new BamgVertex* [this->maxnbv];
+-			this->triangles=new Triangle[this->maxnbt];
+-         _assert_(this->vertices);
+-         _assert_(this->orderedvertices);
+-			_assert_(this->triangles);
++			vertices=new BamgVertex[maxnbv];
++			_assert_(vertices);
++			orderedvertices=new BamgVertex* [maxnbv];
++			_assert_(orderedvertices);
++			triangles=new Triangle[maxnbt];
++			_assert_(triangles);
+ 		}
+ 		else{
+-			this->vertices        = NULL;
+-			this->orderedvertices = NULL;
+-			this->triangles       = NULL;
+-			this->maxnbt          = 0;
++			vertices=NULL;
++			orderedvertices=NULL;
++			triangles=NULL;
++			maxnbt=0;
+ 		} 
+ 	}
+ 	/*}}}*/
+-	void Mesh::Insert(){/*{{{*/
++	void Mesh::Insert(bool random) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Insert)*/
+ 
+ 		/*Insert points in the existing Geometry*/
+@@ -2679,7 +2739,8 @@
+ 
+ 		//Get Prime number
+ 		const long PrimeNumber= BigPrimeNumber(nbv);
+-		int  k0=this->RandomNumber(nbv);
++		int temp = rand(); if(!random) temp = 756804110;
++		int  k0=temp%nbv; 
+ 
+ 		//Build orderedvertices
+ 		for (i=0; i<nbv; i++){
+@@ -2763,7 +2824,7 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap) {/*{{{*/
++	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap,bool random) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/InsertNewPoints)*/
+ 
+ 		long int verbose=0;
+@@ -2783,7 +2844,9 @@
+ 
+ 		/*construction of a random order*/
+ 		const long PrimeNumber= BigPrimeNumber(nbv)  ;
+-		long k3 = long(this->RandomNumber(nbvnew));
++		//remainder of the division of rand() by nbvnew
++		int  temp = rand(); if(!random) temp = 1098566905;
++		long k3 = temp%nbvnew;
+ 		//loop over the new points
+ 		for (int is3=0; is3<nbvnew; is3++){
+ 			long j=nbvold +(k3 = (k3+PrimeNumber)%nbvnew);
+@@ -3024,7 +3087,7 @@
+ 			}
+ 			//if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
+ 			Bh.CreateSingleVertexToTriangleConnectivity();     
+-			InsertNewPoints(nbvold,NbTSwap);
++			InsertNewPoints(nbvold,NbTSwap,bamgopts->random);
+ 		}
+ 		else Bh.CreateSingleVertexToTriangleConnectivity();     
+ 
+@@ -3082,7 +3145,7 @@
+ 				} // end loop for each edge 
+ 			}// for triangle   
+ 
+-			if (!InsertNewPoints(nbvold,NbTSwap)) break;
++			if (!InsertNewPoints(nbvold,NbTSwap,bamgopts->random)) break;
+ 			for (i=nbtold;i<nbt;i++) first_np_or_next_t[i]=iter;
+ 			Headt = nbt; // empty list 
+ 
+@@ -4031,7 +4094,7 @@
+ 		maxnbt=2*maxnbv-2; // for filling The Holes and quadrilaterals 
+ 
+ 		/*Insert Vertices*/
+-		Insert();
++		Insert(true);
+ 	}
+ 	/*}}}*/
+ 	void Mesh::TriangulateFromGeom0(BamgOpts* bamgopts){/*{{{*/
+@@ -4332,7 +4395,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert();
++		Insert(bamgopts->random);
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4658,7 +4721,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert();
++		Insert(bamgopts->random);
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4673,14 +4736,48 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 	}
+ 	/*}}}*/
+-	int  Mesh::RandomNumber(int max){/*{{{*/
+-		/*  Generate a random number from 0 to max-1 using linear congruential
+-		 *  random number generator*/
+ 
+-		this->randomseed = (this->randomseed * 1366l + 150889l) % 714025l;
+-		return this->randomseed / (714025l / max + 1);
+-	} /*}}}*/
+-	int Mesh::ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
++	/*Intermediary*/
++	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
++
++		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
++		int dir=0;
++		if (k<0){
++			_error_("k<0");
++		}
++		int kkk=0;  
++		long long IJ_IA,IJ_AJ;
++		AdjacentTriangle edge(t,OppositeEdge[k]);          
++		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
++			kkk++;
++			if (kkk>=1000){
++				_error_("kkk>=1000");
++			}
++			BamgVertex  &vI =  *edge.EdgeVertex(0);
++			BamgVertex  &vJ =  *edge.EdgeVertex(1);
++			I2 I=vI, J=vJ, IJ= J-I;
++			IJ_IA = (IJ ,(A-I));
++			if (IJ_IA<0) {
++				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
++				else {dir=-1;
++					continue;}};// go in direction i 
++					IJ_AJ = (IJ ,(J-A));
++					if (IJ_AJ<0) {
++						if(dir<0)  {a=0;b=1;return edge;}            
++						else {dir = 1;
++							continue;}}// go in direction j
++							double IJ2 = IJ_IA + IJ_AJ;
++							if (IJ2==0){
++								_error_("IJ2==0");
++							}
++							a= IJ_AJ/IJ2;
++							b= IJ_IA/IJ2;
++							return edge;
++		} 
++	}
++	/*}}}*/
++	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ForceEdge)*/
+ 
+ 		int NbSwap =0;
+@@ -4722,7 +4819,7 @@
+ 					_error_("!v1 || !v2");
+ 				}
+ 				long long detss = 0,l=0;
+-				while ((this->SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
++				while ((SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
+ 				 if(l++ > 10000000) {
+ 					 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+ 				 }
+@@ -4755,7 +4852,51 @@
+ 		return NbSwap; 
+ 	}
+ 	/*}}}*/
+-	int Mesh::SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
++	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
++		// --------------------------------------------------------------
++		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
++		//                               
++		//               sb                     sb    
++		//             / | \                   /   \                      !
++		//         as1/  |  \                 /a2   \                     !
++		//           /   |   \               /    t2 \                    !
++		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
++		//          \  a1|a2  /             \   as1   /  
++		//           \   |   /               \ t1    /   
++		//            \  |  / as2             \   a1/    
++		//             \ | /                   \   /     
++		//              sa                       sa   
++		//  -------------------------------------------------------------
++		int as1 = NextEdge[a1];
++		int as2 = NextEdge[a2];
++		int ap1 = PreviousEdge[a1];
++		int ap2 = PreviousEdge[a2];
++		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
++		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
++		// mise a jour des 2 adjacences externes 
++		AdjacentTriangle taas1 = t1->Adj(as1),
++							  taas2 = t2->Adj(as2),
++							  tas1(t1,as1), tas2(t2,as2),
++							  ta1(t1,a1),ta2(t2,a2);
++		// externe haut gauche
++		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
++		// externe bas droite
++		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
++		// remove the Mark  UnMarkSwap 
++		t1->SetUnMarkUnSwap(ap1);
++		t2->SetUnMarkUnSwap(ap2);
++		// interne 
++		tas1.SetAdj2(tas2);
++
++		t1->det = det1;
++		t2->det = det2;
++
++		t1->SetSingleVertexToTriangleConnectivity();
++		t2->SetSingleVertexToTriangleConnectivity();
++	} // end swap 
++	/*}}}*/
++	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SwapForForcingEdge)*/
+ 		// l'arete ta coupe l'arete pva pvb
+ 		// de cas apres le swap sa coupe toujours
+@@ -4842,89 +4983,4 @@
+ 		return ret;
+ 	}
+ 	/*}}}*/
+-
+-	/*Intermediary*/
+-	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
+-
+-		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
+-		int dir=0;
+-		if (k<0){
+-			_error_("k<0");
+-		}
+-		int kkk=0;  
+-		long long IJ_IA,IJ_AJ;
+-		AdjacentTriangle edge(t,OppositeEdge[k]);          
+-		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
+-			kkk++;
+-			if (kkk>=1000){
+-				_error_("kkk>=1000");
+-			}
+-			BamgVertex  &vI =  *edge.EdgeVertex(0);
+-			BamgVertex  &vJ =  *edge.EdgeVertex(1);
+-			I2 I=vI, J=vJ, IJ= J-I;
+-			IJ_IA = (IJ ,(A-I));
+-			if (IJ_IA<0) {
+-				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
+-				else {dir=-1;
+-					continue;}};// go in direction i 
+-					IJ_AJ = (IJ ,(J-A));
+-					if (IJ_AJ<0) {
+-						if(dir<0)  {a=0;b=1;return edge;}            
+-						else {dir = 1;
+-							continue;}}// go in direction j
+-							double IJ2 = IJ_IA + IJ_AJ;
+-							if (IJ2==0){
+-								_error_("IJ2==0");
+-							}
+-							a= IJ_AJ/IJ2;
+-							b= IJ_IA/IJ2;
+-							return edge;
+-		} 
+-	}
+-	/*}}}*/
+-	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
+-		// --------------------------------------------------------------
+-		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
+-		//                               
+-		//               sb                     sb    
+-		//             / | \                   /   \                      !
+-		//         as1/  |  \                 /a2   \                     !
+-		//           /   |   \               /    t2 \                    !
+-		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
+-		//          \  a1|a2  /             \   as1   /  
+-		//           \   |   /               \ t1    /   
+-		//            \  |  / as2             \   a1/    
+-		//             \ | /                   \   /     
+-		//              sa                       sa   
+-		//  -------------------------------------------------------------
+-		int as1 = NextEdge[a1];
+-		int as2 = NextEdge[a2];
+-		int ap1 = PreviousEdge[a1];
+-		int ap2 = PreviousEdge[a2];
+-		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
+-		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
+-		// mise a jour des 2 adjacences externes 
+-		AdjacentTriangle taas1 = t1->Adj(as1),
+-							  taas2 = t2->Adj(as2),
+-							  tas1(t1,as1), tas2(t2,as2),
+-							  ta1(t1,a1),ta2(t2,a2);
+-		// externe haut gauche
+-		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
+-		// externe bas droite
+-		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
+-		// remove the Mark  UnMarkSwap 
+-		t1->SetUnMarkUnSwap(ap1);
+-		t2->SetUnMarkUnSwap(ap2);
+-		// interne 
+-		tas1.SetAdj2(tas2);
+-
+-		t1->det = det1;
+-		t2->det = det2;
+-
+-		t1->SetSingleVertexToTriangleConnectivity();
+-		t2->SetSingleVertexToTriangleConnectivity();
+-	} // end swap 
+-	/*}}}*/
+ }
+Index: ../trunk-jpl/src/c/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21838)
+@@ -31,6 +31,7 @@
+ 			Curve         *curves;
+ 			R2             pmin,pmax;             // domain extrema coordinates
+ 			double         coefIcoor;             // coef to integer coordinates;
++			double         MaxCornerAngle;
+ 
+ 			//Constructor/Destructors
+ 			~Geometry(); 
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21838)
+@@ -256,6 +256,7 @@
+ 			OnSwap = (Abs(det1) + Abs(det2)) < detA;
+ 
+ 			long long detMinNew=Min(det1,det2);
++			//     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test   
+ 			if (! OnSwap &&(detMinNew>0)) {
+ 				OnSwap = detMin ==0;
+ 				if (! OnSwap) {
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21838)
+@@ -10,6 +10,7 @@
+ 	this->errg              = 0;
+ 	this->gradation         = 0;
+ 	this->Hessiantype       = 0;
++	this->MaxCornerAngle    = 0;
+ 	this->maxnbv            = 0;
+ 	this->maxsubdiv         = 0;
+ 	this->Metrictype        = 0;
+@@ -17,9 +18,11 @@
+ 	this->nbsmooth          = 0;
+ 	this->omega             = 0;
+ 	this->power             = 0;
++	this->random            = 0;
+ 	this->verbose           = 0;
+ 
+ 	this->Crack             = 0;
++	this->geometricalmetric = 0;
+ 	this->KeepVertices      = 0;
+ 	this->splitcorners      = 0;
+ 
+@@ -64,6 +67,7 @@
+ 
+ 	if (this->Crack!=0  && this->Crack!=1) _error_("'Crack' supported options are 0 and 1");
+ 	if (this->KeepVertices!=0 && this->KeepVertices!=1) _error_("'KeepVertices' supported options are 0 and 1");
++	if (this->geometricalmetric!=0  && this->geometricalmetric!=1) _error_("'geometricalmetric' supported options are 0 and 1");
+ 
+ 	if (this->hmin<=0) _error_("'hmin' option should be >0");
+ 	if (this->hmax<=0 || this->hmax<this->hmin) _error_("'hmax' option should be between 0 and hmin=" << this->hmin);
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21838)
+@@ -186,6 +186,12 @@
+ 			}
+ 		}
+ 
++		//MaxCornerAngle
++		if (bamgopts->MaxCornerAngle){
++			if(verbose>5) _printf_("      processing MaxCornerAngle\n");
++			MaxCornerAngle=bamgopts->MaxCornerAngle*Pi/180;
++		}
++
+ 		//TangentAtEdges
+ 		if (bamggeom->TangentAtEdges){
+ 			if(verbose>5) _printf_("      processing TangentAtEdges");
+@@ -394,6 +400,7 @@
+ 		_printf_("   pmin (x,y): (" << pmin.x << " " << pmin.y << ")\n");
+ 		_printf_("   pmax (x,y): (" << pmax.x << " " << pmax.y << ")\n");
+ 		_printf_("   coefIcoor: " << coefIcoor << "\n");
++		_printf_("   MaxCornerAngle: " << MaxCornerAngle << "\n");
+ 
+ 		return;
+ 	}
+@@ -411,6 +418,7 @@
+ 		nbsubdomains=0;
+ 		nbcurves=0;
+ 		subdomains=NULL;
++		MaxCornerAngle = 10*Pi/180; //default is 10 degres
+ 	}
+ 	/*}}}*/
+ 	double Geometry::MinimalHmin() {/*{{{*/
+@@ -605,14 +613,19 @@
+ 				}
+ 			}
+ 
+-			//all vertices provided in geometry are corners (ord = number of edges holding i)
+-			vertices[i].SetCorner() ; 
+-			if(ord==2){ 
++			// angular test on current vertex to guess whether it is a corner (ord = number of edges holding i)
++			if(ord==2) { 
+ 				long  n1 = head_v[i];
+ 				long  n2 = next_p[n1];
+ 				long  i1 = n1/2, i2 = n2/2; // edge number
+-				long  j1 = n1%2, j2 = n2%2; // vertex in the edge
+-				/* if the edge type/referencenumber a changing then is SetRequired();*/
++				long  j1 = n1%2, j2 = n2%2; // vertex in the edge 
++				float angle1=  j1 ? OppositeAngle(eangle[i1]) : eangle[i1];
++				float angle2= !j2 ? OppositeAngle(eangle[i2]) : eangle[i2];
++				float da12 = Abs(angle2-angle1);
++				if (( da12 >= MaxCornerAngle ) && (da12 <= 2*Pi -MaxCornerAngle)) {
++					vertices[i].SetCorner() ; 
++				}
++				// if the edge type/referencenumber a changing then is SetRequired();
+ 				if (edges[i1].type != edges[i2].type || edges[i1].Required()){
+ 					vertices[i].SetRequired();
+ 				}
+@@ -620,6 +633,9 @@
+ 					vertices[i].SetRequired();
+ 				}
+ 			}
++			if(ord != 2) {
++				vertices[i].SetCorner();
++			}
+ 
+ 			/*close the list around the vertex to have a circular loop*/
+ 			long no=-1, ne = head_v[i];
+Index: ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21838)
+@@ -148,6 +148,9 @@
+ 			}
+ 		}
+ 
++		//Add geometry metric if provided
++		if(bamgopts->geometricalmetric) BTh.AddGeometryMetric(bamgopts);
++
+ 		//Smoothe metric
+ 		BTh.SmoothMetric(bamgopts->gradation);
+ 
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21837)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21838)
+@@ -31,6 +31,7 @@
+ 	this->options->errg              = 0.1;
+ 	this->options->gradation         = 1.5;
+ 	this->options->Hessiantype       = 0;
++	this->options->MaxCornerAngle    = 1.e-12;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
+ 	this->options->Metrictype        = 0;
+@@ -38,8 +39,10 @@
+ 	this->options->nbsmooth          = 3;
+ 	this->options->omega             = 1.8;
+ 	this->options->power             = 1;
++	this->options->random            = 0;
+ 	this->options->verbose           = 0;
+ 	this->options->Crack             = 0;
++	this->options->geometricalmetric = 0;
+ 	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!!*/
+ 	this->options->splitcorners      = 1;
+ 	this->options->hmin              = hmin;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21838-21839.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21838-21839.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21838-21839.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 21838)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 21839)
+@@ -25,7 +25,7 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',\
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
+ field_tolerances=[1e-13,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+-	5*1e-11,1e-13,5e-13,1e-13,1e-13,1e-13,5e-13,1e-13,1e-13,1e-13,\
++	5e-11,1e-13,5e-13,5e-11,1e-13,1e-13,5e-13,1e-13,1e-13,1e-13,\
+ 	1e-10,  1e-12,1e-12,1e-12,1e-13,1e-13,1e-12,1e-12,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 21838)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 21839)
+@@ -15,7 +15,7 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'};
+ field_tolerances={1e-13,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	5*1e-11,1e-13,5e-13,1e-13,1e-13,1e-13,5e-13,1e-13,1e-13,1e-13,...
++	5e-11,1e-13,5e-13,5e-11,1e-13,1e-13,5e-13,1e-13,1e-13,1e-13,...
+ 	1e-10,  1e-12,1e-12,1e-12,1e-13,1e-13,1e-12,1e-12,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21839-21840.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21839-21840.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21839-21840.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21839)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21840)
+@@ -199,7 +199,17 @@
+ 		make uninstall
+ 		make distclean
+ 		./scripts/automakererun.sh
++		if [ $? -ne 0 ]; then 
++			echo "autoreconf failed!"
++			exit 1
++		fi
+ 		eval "./configure $ISSM_CONFIG"
++		if [ $? -ne 0 ]; then 
++			echo "ISSM configuration failed (see options below)"
++			echo $ISSM_CONFIG
++			echo "ISSM configuration failed!"
++			exit 1
++		fi
+ 	fi
+ 
+ 	#4: compile and install ISSM
Index: /issm/oecreview/Archive/21724-22754/ISSM-21840-21841.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21840-21841.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21840-21841.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 21840)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 21841)
+@@ -21,7 +21,7 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',\
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+-	1e-10,1e-13,5e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-10,1e-13,5e-13,5e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-10,2e-13,5e-13,2e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test316.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.py	(revision 21840)
++++ ../trunk-jpl/test/NightlyRun/test316.py	(revision 21841)
+@@ -17,7 +17,9 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						2e-13,1e-13,1e-13,2e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 21840)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 21841)
+@@ -12,7 +12,7 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...,
+-	1e-10,1e-13,5e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-10,1e-13,5e-13,5e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-10,2e-13,5e-13,2e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test316.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.m	(revision 21840)
++++ ../trunk-jpl/test/NightlyRun/test316.m	(revision 21841)
+@@ -7,8 +7,13 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',...
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',...
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
++field_tolerances={...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	2e-13,1e-13,1e-13,2e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test293.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test293.m	(revision 21840)
++++ ../trunk-jpl/test/NightlyRun/test293.m	(revision 21841)
+@@ -15,7 +15,10 @@
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','BasalforcingsFloatingiceMeltingRate1',...
+ 	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','BasalforcingsFloatingiceMeltingRate2',...
+ 	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','BasalforcingsFloatingiceMeltingRate3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21841-21842.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21841-21842.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21841-21842.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 21841)
++++ ../trunk-jpl/jenkins/windows	(revision 21842)
+@@ -10,7 +10,7 @@
+ ISSM_CONFIG='--prefix=$ISSM_DIR \
+ 	--with-vendor=MSVC-Win64  \
+ 	--with-cxxoptflags='-fp:strict' \
+-   --disable-static \
++	--disable-static \
+ 	--enable-standalone-libraries \
+ 	--with-fortran=no  \
+ 	--without-GiaIvins \
+@@ -59,5 +59,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243]"
++MATLAB_NROPTIONS="'exclude',[104, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-21842-21843.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21842-21843.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21842-21843.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21842)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21843)
+@@ -47,12 +47,14 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
++field_names     ={...
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
++field_tolerances={...
++	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,3e-08,8e-09,5e-09,7e-04,5e-04,2e-09,1e-10,1e-13};
++	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21843-21844.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21843-21844.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21843-21844.diff	(revision 22755)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21843)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21844)
+@@ -9,6 +9,7 @@
+ #endif
+ 
+ #include <stdio.h>
++#include <math.h>
+ #include "../cores/cores.h"
+ #include "../shared/io/io.h"
+ #include "./classes.h"
+@@ -2442,8 +2443,8 @@
+ 			x = xyz_list[3*i+0];
+ 			y = xyz_list[3*i+1];
+ 			
+-			bx=-150.-728.8*std::pow(x/300000.,2)+343.91*std::pow(x/300000.,4)-50.57*std::pow(x/300000.,6);
+-			by=500./(1.+std::exp((-2./4000.)*(y-80000./2.-24000.)))+500./(1.+std::exp((2./4000.)*(y-80000./2.+24000.)));
++			bx=-150.-728.8*pow(x/300000.,2)+343.91*pow(x/300000.,4)-50.57*pow(x/300000.,6);
++			by=500./(1.+exp((-2./4000.)*(y-80000./2.-24000.)))+500./(1.+exp((2./4000.)*(y-80000./2.+24000.)));
+ 			
+ 			r[i] = -720.;
+ 			if(bx+by>-720.) r[i] = bx+by;
+@@ -3407,11 +3408,12 @@
+ 				ftyy+=(tauyy[n]-smoothedtauyy[elem_vertices[n]])*basis[n];
+ 				ftxy+=(tauxy[n]-smoothedtauxy[elem_vertices[n]])*basis[n];
+ 			}
+-			error+=Jdet*gauss->weight*( std::pow(ftxx,2)+std::pow(ftyy,2)+std::pow(ftxy,2) ); //e^2 
++			error+=Jdet*gauss->weight*( pow(ftxx,2)+pow(ftyy,2)+pow(ftxy,2) ); //e^2 
+ 		}
+ 		/*Set the error in the global vector*/	
+       sid=element->Sid();
+-		velementerror->SetValue(sid,std::sqrt(error),INS_VAL);//sqrt( e^2 )
++		error = sqrt(error);//sqrt(e^2)
++		velementerror->SetValue(sid,error,INS_VAL);
+ 		/*Cleanup intermediaries*/
+ 		xDelete<IssmDouble>(xyz_list);
+ 		delete gauss;
+@@ -3557,11 +3559,12 @@
+             fdHdx+=(GradH[0]-smoothed_dHdx[elem_vertices[n]])*basis[n];
+             fdHdy+=(GradH[1]-smoothed_dHdy[elem_vertices[n]])*basis[n];
+          }
+-         error+=Jdet*gauss->weight*( std::pow(fdHdx,2)+std::pow(fdHdy,2) ); //e^2
++         error+=Jdet*gauss->weight*(pow(fdHdx,2)+pow(fdHdy,2) ); //e^2
+       }
+       /*Set the error in the global vector*/
+       sid=element->Sid();
+-      velementerror->SetValue(sid,std::sqrt(error),INS_VAL);//sqrt( e^2 )
++		error = sqrt(error); //sqrt( e^2 )
++      velementerror->SetValue(sid,error,INS_VAL);
+       /*Cleanup intermediaries*/
+       xDelete<IssmDouble>(xyz_list);
+       delete gaussH;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21844-21845.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21844-21845.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21844-21845.diff	(revision 22755)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21844)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21845)
+@@ -461,53 +461,7 @@
+ 	MARSHALLING(time);
+ 
+ }  /*}}}*/
+-/*Specific instantiations for int*: */
+-#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
+-template <> inline void GenericExternalResult<int*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+-	int     i;
+-	int     my_rank;
+-	int     type;
+-	int     rows,cols;
+-	char   *name    = NULL;
+-	IssmPDouble passiveDouble;
+-	int* passiveInts;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	if(io_gather){
+-		/*we are gathering the data on cpu 0, don't write on other cpus: */
+-		if(my_rank) return;
+-	}
+-
+-	/*First write enum: */
+-	int length=(strlen(this->result_name)+1)*sizeof(char);
+-	fwrite(&length,sizeof(int),1,fid);
+-	fwrite(this->result_name,length,1,fid);
+-
+-	/*Now write time and step: */
+-	passiveDouble=reCast<IssmPDouble>(time);
+-	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
+-	fwrite(&step,sizeof(int),1,fid);
+-
+-	/*writing a int array, type is 4 (see parseresultsfromdisk.m):*/
+-	type=4;
+-	fwrite(&type,sizeof(int),1,fid);
+-	rows=this->M;
+-	fwrite(&rows,sizeof(int),1,fid);
+-	cols=this->N;
+-	fwrite(&cols,sizeof(int),1,fid);
+-
+-	passiveInts=xNew<int>(this->M*this->N);
+-	for (i=0;i<this->M*this->N;i++)passiveInts[i]=reCast<int>(value[i]);
+-	fwrite(passiveInts,cols*rows*sizeof(int),1,fid);
+-	xDelete<int>(int);
+-
+-}
+-/*}}}*/
+-#endif
+-
+ /*Specific instantiations for IssmPDouble*: */
+ template <> inline GenericExternalResult<IssmPDouble*>::GenericExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21845-21846.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21845-21846.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21845-21846.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21845)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21846)
+@@ -2492,7 +2492,7 @@
+ 				b[i] = base_float;	
+ 			} 
+ 
+-			if(abs(sl[i])>0) _error_("Sea level value "<<sl[i]<<" not supported!");
++			if(fabs(sl[i])>0) _error_("Sea level value "<<sl[i]<<" not supported!");
+ 			/*update thickness and mask grounded ice level set*/
+ 			h[i]	  = s[i]-b[i];
+ 			phi[i]  = h[i]+r[i]/density;	
Index: /issm/oecreview/Archive/21724-22754/ISSM-21846-21847.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21846-21847.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21846-21847.diff	(revision 22755)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h	(revision 21846)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h	(revision 21847)
+@@ -7,7 +7,7 @@
+ 
+ #include "../../classes/classes.h"
+ 
+-int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
+-			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options);
++int InterpFromMeshToMesh2dx(IssmDouble** pdata_interp,int* index_data,IssmDouble* x_data,IssmDouble* y_data,int nods_data,int nels_data,
++			IssmDouble* data,int M_data,int N_data,IssmDouble* x_interp,IssmDouble* y_interp,int N_interp,Options* options);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21846)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21847)
+@@ -11,23 +11,23 @@
+ using namespace bamg;
+ using namespace std;
+ 
+-int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
+-			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options){
++int InterpFromMeshToMesh2dx(IssmDouble** pdata_interp,int* index_data,IssmDouble* x_data,IssmDouble* y_data,int nods_data,int nels_data,
++			IssmDouble* data,int M_data,int N_data,IssmDouble* x_interp,IssmDouble* y_interp,int N_interp,Options* options){
+ 
+ 	/*Output*/
+-	double* data_interp=NULL;
++	IssmDouble* data_interp=NULL;
+ 
+ 	/*Intermediary*/
+-	double xmin,xmax,ymin,ymax;
++	IssmDouble xmin,xmax,ymin,ymax;
+ 	bool   isdefault;
+-	double defaultvalue;
++	IssmDouble defaultvalue;
+ 	R2     r;
+ 	I2     I;
+ 	int    i,j,k;
+ 	int    it;
+ 	int    i0,i1,i2;
+-	double areacoord[3];
+-	double aa,bb;
++	IssmDouble areacoord[3];
++	IssmDouble aa,bb;
+ 	long long dete[3];
+ 
+ 	/*Checks*/
+@@ -45,7 +45,7 @@
+ 	}
+ 
+ 	/*Initialize output*/
+-	data_interp=xNew<double>(N_interp*N_data);
++	data_interp=xNew<IssmDouble>(N_interp*N_data);
+ 
+ 	/*read background mesh*/
+ 	Mesh* Th=new Mesh(index_data,x_data,y_data,nods_data,nels_data); 
+@@ -77,7 +77,7 @@
+ 
+ 	/*Loop over output nodes*/
+ 	for(i=0;i<N_interp;i++){
+-		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(N_interp)*100.<<"%   ");
++		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<IssmDouble(i)/IssmDouble(N_interp)*100.<<"%   ");
+ 
+ 		if(isdefault){
+ 			if(x_interp[i]<xmin || x_interp[i]>xmax || y_interp[i]<ymin || y_interp[i]>ymax){
+@@ -97,9 +97,9 @@
+ 		if (tb.det>0){ 
+ 
+ 			/*Area coordinates*/
+-			areacoord[0]= (double) dete[0]/tb.det;
+-			areacoord[1]= (double) dete[1]/tb.det;
+-			areacoord[2]= (double) dete[2]/tb.det;
++			areacoord[0]= reCast<IssmDouble>(dete[0])/reCast<IssmDouble>(tb.det);
++			areacoord[1]= reCast<IssmDouble>(dete[1])/reCast<IssmDouble>(tb.det);
++			areacoord[2]= reCast<IssmDouble>(dete[2])/reCast<IssmDouble>(tb.det);
+ 			/*3 vertices of the triangle*/
+ 			i0=Th->GetId(tb[0]);
+ 			i1=Th->GetId(tb[1]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21847-21848.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21847-21848.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21847-21848.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21847)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21848)
+@@ -2664,10 +2664,10 @@
+ 					element->AddInput(new DoubleInput(P0input_enums[i],vector[element->sid]));//sid because newfemmodel has just a partitioning 
+ 					break;
+ 				case IntInputEnum: 
+-					element->AddInput(new IntInput(P0input_enums[i],vector[element->sid]));//sid because newfemmodel has just a partitioning
++					element->AddInput(new IntInput(P0input_enums[i],reCast<int>(vector[element->sid])));//sid because newfemmodel has just a partitioning
+ 					break;
+ 				case BoolInputEnum:
+-					element->AddInput(new BoolInput(P0input_enums[i],vector[element->sid]));//sid because newfemmodel has just a partitioning
++					element->AddInput(new BoolInput(P0input_enums[i],reCast<bool>(vector[element->sid])));//sid because newfemmodel has just a partitioning
+ 					break;
+ 				default:
+ 					_error_(EnumToStringx(P0input_enums[i])<<" Not supported yet");
Index: /issm/oecreview/Archive/21724-22754/ISSM-21848-21849.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21848-21849.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21848-21849.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21848)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21849)
+@@ -3039,9 +3039,9 @@
+ 	elementslist=xNew<int>(numberofelements*elementswidth);
+ 	if(numberofelements*elementswidth<0) _error_("numberofelements negative.");
+ 	for(int i=0;i<numberofelements;i++){
+-		elementslist[elementswidth*i+0] = (int)id1[i]+1; //InterpMesh wants Matlab indexing
+-		elementslist[elementswidth*i+1] = (int)id2[i]+1; //InterpMesh wants Matlab indexing
+-		elementslist[elementswidth*i+2] = (int)id3[i]+1; //InterpMesh wants Matlab indexinf
++		elementslist[elementswidth*i+0] = reCast<int>(id1[i])+1; //InterpMesh wants Matlab indexing
++		elementslist[elementswidth*i+1] = reCast<int>(id2[i])+1; //InterpMesh wants Matlab indexing
++		elementslist[elementswidth*i+2] = reCast<int>(id3[i])+1; //InterpMesh wants Matlab indexinf
+ 	}
+ 	
+ 	/*Assign pointers*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21849-21850.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21849-21850.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21849-21850.diff	(revision 22755)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21849)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21850)
+@@ -4315,7 +4315,7 @@
+ }/*}}}*/
+ #endif
+ 
+-#ifdef _HAVE_BAMG_
++#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ void FemModel::ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist){/*{{{*/
+ 
+ 	/*Output*/
+@@ -4413,7 +4413,7 @@
+ /*}}}*/
+ #endif
+ 
+-#ifdef _HAVE_NEOPZ_
++#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ void FemModel::ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist){/*{{{*/
+ 
+ 	/*pnewelementslist keep vertices in Matlab indexing*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21849)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21850)
+@@ -19,10 +19,10 @@
+ class Materials;
+ class Profiler;
+ class Elements;
+-#ifdef _HAVE_NEOPZ_
++#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ #include "./AdaptiveMeshRefinement.h"
+ #endif
+-#ifdef _HAVE_BAMG_
++#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ #include "./AmrBamg.h"
+ #endif
+ /*}}}*/
+@@ -50,11 +50,11 @@
+ 		Vertices    *vertices;             //one set of vertices
+ 
+ 		//FIXME: do we want only one class and have virtual functions? or keep 2 classes, at least rename AdaptiveMeshRefinement -> AmrNeopz
+-		#ifdef _HAVE_NEOPZ_
++		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		AdaptiveMeshRefinement *amr;		  //adaptive mesh refinement object. It keeps coarse mesh and execute refinement process
+ 		#endif
+ 
+-		#ifdef _HAVE_BAMG_
++		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		AmrBamg *amrbamg; //adaptive mesh refinement object. It keeps coarse mesh and execute refinement process
+ 		#endif
+ 
+@@ -176,12 +176,12 @@
+ 		void ThicknessZZErrorEstimator(IssmDouble** pelementerror);
+ 		void MeanGroundedIceLevelSet(IssmDouble** pmasklevelset);
+ 
+-		#ifdef _HAVE_BAMG_
++		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		void ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementBamg(void);
+ 		#endif
+ 
+-		#ifdef _HAVE_NEOPZ_
++		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		/*Adaptive mesh refinement methods*/
+ 		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementNeopz(void);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21850-21851.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21850-21851.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21850-21851.diff	(revision 22755)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21850)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21851)
+@@ -82,10 +82,10 @@
+ 
+    /*AMR stuff*/
+ 	this->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->amr = NULL;
+ 	#endif
+-	#ifdef _HAVE_BAMG_
++	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	this->amrbamg = NULL;
+ 	#endif
+ 	if(amr_frequency){
+@@ -92,11 +92,11 @@
+ 		this->parameters->FindParam(&amrtype,AmrTypeEnum);
+ 		switch(amrtype){
+ 
+-			#ifdef _HAVE_NEOPZ_
++			#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 			case AmrNeopzEnum: this->InitializeAdaptiveRefinementNeopz(); break;
+ 			#endif
+ 
+-			#ifdef _HAVE_BAMG_
++			#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 			case AmrBamgEnum: this->InitializeAdaptiveRefinementBamg(); break;
+ 			#endif
+ 
+@@ -128,10 +128,10 @@
+ 	this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, solution_type,traceon,X);
+ 	profiler->Tag(FINISHINIT);
+ 
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->amr = NULL;
+ 	#endif
+-	#ifdef _HAVE_BAMG_
++	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	this->amrbamg = NULL;
+ 	#endif
+ 	
+@@ -165,11 +165,11 @@
+ 	if(parameters)delete parameters;
+ 	if(results)delete results;
+ 	
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	if(amr)delete amr;
+ 	#endif
+ 
+-	#ifdef _HAVE_BAMG_
++	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	if(amrbamg)delete amrbamg;
+ 	#endif
+ 
+@@ -303,10 +303,10 @@
+ 	}
+ 
+ 	/*AMR, no copy for now*/
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->amr = NULL;
+ 	#endif
+-	#ifdef _HAVE_BAMG_
++	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	this->amrbamg = NULL;
+ 	#endif
+ 
+@@ -1558,11 +1558,11 @@
+ 	/*Branch to specific amr depending on requested method*/	
+ 	parameters->FindParam(&amrtype,AmrTypeEnum);
+ 	switch(amrtype){
+-		#ifdef _HAVE_NEOPZ_
++		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+ 		#endif
+ 
+-		#ifdef _HAVE_BAMG_
++		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		case AmrBamgEnum: this->ReMeshBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+ 		#endif
+ 
+@@ -2720,7 +2720,7 @@
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+ 	//itapopo
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->WriteErrorEstimatorsInResults();
+ 	#endif
+ 	//itapopo
+@@ -2755,7 +2755,7 @@
+ 					y,numberofvertices,1,step,time));
+ 	
+ 	//itapopo
+-	#ifdef _HAVE_NEOPZ_
++	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	if(IssmComm::GetRank()==0){
+ 		TPZFileStream fstr;
+ 		std::stringstream ss;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21851-21852.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21851-21852.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21851-21852.diff	(revision 22755)
@@ -0,0 +1,503 @@
+Index: ../trunk-jpl/src/m/solve/solveiceocean.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solveiceocean.m	(nonexistent)
++++ ../trunk-jpl/src/m/solve/solveiceocean.m	(revision 21852)
+@@ -0,0 +1,143 @@
++function md=solveiceocean(md,solutionstring,varargin)
++%SOLVE - apply ice/ocean solution sequence for this model
++%
++%   Usage:
++%      md=solveiceocean(md,solutionstring,varargin)
++%      where varargin is a lit of paired arguments of string OR enums
++%
++%   solution types available comprise:
++%		 - 'Stressbalance'      or 'sb'
++%		 - 'Masstransport'      or 'mt'
++%		 - 'Transient'          or 'tr'
++%
++%  extra options:
++%      - loadonly    : does not solve. only load results
++%      - runtimename : true or false (default is true), makes name unique
++%      - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model
++%      - restart: 'directory name (relative to the execution directory) where the restart file is located.
++%      - outbinread  : if 0, download the outbin but do not process is (md.results is not updated)
++%
++%   Examples:
++%      md=solve(md,'Transient');
++%      md=solve(md,'tr');
++
++if ~ischar(solutionstring)
++	error('ISSM''s solve function only accepts strings for solution sequences. Type help solve to get a list of supported solutions');
++end
++
++%recover and process solve options
++if strcmpi(solutionstring,'sb') || strcmpi(solutionstring,'Stressbalance')
++	solutionstring = 'StressbalanceSolution';
++elseif strcmpi(solutionstring,'mt') || strcmpi(solutionstring,'Masstransport')
++	solutionstring = 'MasstransportSolution';
++elseif strcmpi(solutionstring,'tr') || strcmpi(solutionstring,'Transient')
++	solutionstring = 'TransientSolution';
++else
++	error(['solutionstring ' solutionstring ' not supported!']);
++end
++options=pairoptions(varargin{:},'solutionstring',solutionstring);
++
++%recover some fields
++md.private.solution=solutionstring;
++cluster=md.cluster;
++if strcmpi(getfieldvalue(options,'batch','no'),'yes') batch=1; else batch=0; end
++if ~isclass(cluster,'localpfe'),
++	error('cannot run ice/ocean simulation on any other cluster than localpfe');
++end
++
++%check model consistency
++if strcmpi(getfieldvalue(options,'checkconsistency','yes'),'yes'),
++	if md.verbose.solution,
++		disp('checking model consistency');
++	end
++	ismodelselfconsistent(md),
++end
++
++%If we are restarting, actually use the provided runtime name:
++restart=getfieldvalue(options,'restart','');
++%First, build a runtime name that is unique
++if restart==1 
++	%Leave the runtimename as is
++else
++	if ~isempty(restart),
++		md.private.runtimename=restart;
++	elseif getfieldvalue(options,'runtimename',true),
++		c=clock;
++		md.private.runtimename=sprintf('%s-%02i-%02i-%04i-%02i-%02i-%02i-%i',md.miscellaneous.name,c(2),c(3),c(1),c(4),c(5),floor(c(6)),feature('GetPid'));
++	else
++		md.private.runtimename=md.miscellaneous.name;
++	end
++end
++
++%if running qmu analysis, some preprocessing of dakota files using models
++%fields needs to be carried out. 
++if md.qmu.isdakota,
++	md=preqmu(md,options);
++end
++
++%Do we load results only?
++if getfieldvalue(options,'loadonly',false),
++	md=loadresultsfromcluster(md);
++	return;
++end
++
++%Write all input files
++marshall(md);                                          % bin file
++ToolkitsFile(md.toolkits,[md.miscellaneous.name '.toolkits']); % toolkits file
++BuildQueueScriptIceOcean(cluster,md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof,md.qmu.isdakota); % queue file
++
++%Upload all required files
++modelname = md.miscellaneous.name;
++filelist  = {[modelname '.bin '] [modelname '.toolkits ']};
++if ispc,
++	filelist{end+1}=[modelname '.bat '];
++else
++	filelist{end+1}=[modelname '.queue '];
++end
++
++if md.qmu.isdakota,
++	filelist{end+1} = [modelname '.qmu.in'];
++end
++
++if isempty(restart),
++	UploadQueueJob(cluster,md.miscellaneous.name,md.private.runtimename,filelist);
++end
++
++%launch queue job: 
++LaunchQueueJobIceOcean(cluster,md.miscellaneous.name,md.private.runtimename,filelist,restart,batch);
++
++%return if batch: 
++if batch,
++	if md.verbose.solution,
++		disp('batch mode requested: not launching job interactively');
++		disp('launch solution sequence on remote cluster by hand');
++	end
++	return;
++end
++%wait on lock
++if isnan(md.settings.waitonlock),
++	%load when user enters 'y'
++	disp('solution launched on remote cluster. log in to detect job completion.');
++	choice=input('Is the job successfully completed? (y/n)','s');
++	if ~strcmp(choice,'y'), 
++		disp('Results not loaded... exiting'); 
++	else
++		md=loadresultsfromcluster(md);
++	end
++elseif md.settings.waitonlock>0,
++	%we wait for the done file
++	done=waitonlock(md);
++	if md.verbose.solution,
++		disp('loading results from cluster');
++	end
++	md=loadresultsfromcluster(md);
++elseif md.settings.waitonlock==0,
++	 disp('Model results must be loaded manually with md=loadresultsfromcluster(md);');
++end
++
++%post processes qmu results if necessary
++if md.qmu.isdakota,
++	if ~strncmpi(getfieldvalue(options,'keep','y'),'y',1)
++		system(['rm -rf qmu' num2str(feature('GetPid'))]);
++	end
++end
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 21851)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 21852)
+@@ -6,98 +6,46 @@
+ 
+ int main(int argc,char **argv){
+ 
+-//	/*diverse:*/
+-//	int    nummodels = 2;
+-//	int*   commsizes=xNew<int>(nummodels);
+-//	int*   rankzeros=xNew<int>(nummodels);
+-//	char** modelnames=xNew<char*>(nummodels);
+-//	char** dirnames=xNew<char*>(nummodels);
+-//	int    iceid=0; 
+-//	int    oceanid=1; 
++	/*diverse:*/
++	int    icecommsize;
++	int    rankzeros[2];
++	int    my_rank;
++	ISSM_MPI_Comm worldcomm;
++
+ //	int    modelid;
+-//	int    my_rank;
+ //	int    count=0;
+-//	ISSM_MPI_Comm worldcomm;
+-//	ISSM_MPI_Comm modelcomm;
+-//	ISSM_MPI_Comm toonceancomm;
+-//	ISSM_MPI_Comm fromicecomms;
++	ISSM_MPI_Comm modelcomm;
++	ISSM_MPI_Comm frommitgcm;
++	ISSM_MPI_Comm tomitgcmcomm;
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+-//	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-//	worldcomm=EnvironmentInit(argc,argv);
+-//	
+-//	/*What is my rank?:*/
+-//	ISSM_MPI_Comm_rank(worldcomm,&my_rank);
+-//
+-//	/*First model is ice, second is ocean*/
+-//	for(int i=0;i<nummodels;i++){
+-//		char* string=NULL;
+-//		
+-//		string=xNew<char>(strlen(argv[5+3*i])+1);
+-//		xMemCpy<char>(string,argv[5+3*i],strlen(argv[5+3*i])+1);
+-//		dirnames[i]=string;
+-//		
+-//		string=xNew<char>(strlen(argv[5+3*i+1])+1);
+-//		xMemCpy<char>(string,argv[5+3*i+1],strlen(argv[5+3*i+1])+1);
+-//		modelnames[i]=string;
+-//
+-//		commsizes[i]=(int) strtol(argv[5+3*i+2], (char **)NULL, 10);
+-//	}
+-//
+-//	/*Figure out which model each cpu will belong to: */
+-//	count=0;
+-//	for(int i=0;i<nummodels;i++){
+-//		if(my_rank>=count && my_rank<(count+commsizes[i])){
+-//			modelid=i;
+-//			break;
+-//		}
+-//		count+=commsizes[i];
+-//	} 
+-//	/*Buil array of who is rank 0 of their own group:*/
+-//	count=0;
+-//	for(int i=0;i<nummodels;i++){
+-//		rankzeros[i]=count;
+-//		count+=commsizes[i];
+-//	}
+-//	/*}}}*/
+-//
+-//	/*Split world into sub-communicators for each and every model:*/
+-//	ISSM_MPI_Comm_split(worldcomm,modelid, my_rank, &modelcomm);
+-//
+-//	/*Build inter communicators:*/ // change to Dimitris solution
+-//	if(modelid==iceid){
+-//		ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, rankzeros[oceanid], iceid, fromicecomms+i); //communicate from local erth comm 9rank 0) to ice comm (rank 0) using modelid tag.
+-//	}
+-//	else{
+-//		ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, rankzeros[iceid], oceanid, &toearthcomm); //communicate from local ice comm (rank 0) to earth comm (rank 0) using modelid tag.
+-//	}
++	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
++	worldcomm=EnvironmentInit(argc,argv);
++	
++	/*What is my rank?:*/
++	ISSM_MPI_Comm_rank(worldcomm,&my_rank);
+ 
+-//	/*Supply specific argc and argv for each sub-communicator (corresponding to each  model specificatiions):{{{*/
+-//	char** arguments=xNew<char*>(4);
+-//	arguments[0]=xNew<char>(strlen(argv[0])+1); xMemCpy<char>(arguments[0],argv[0],strlen(argv[0])+1); //executable name
+-//	arguments[1]=xNew<char>(strlen(argv[1])+1); xMemCpy<char>(arguments[1],argv[1],strlen(argv[1])+1); //solution name
+-//	arguments[2]=xNew<char>(strlen(argv[5+3*modelid])+1); xMemCpy<char>(arguments[2],argv[5+3*modelid],strlen(argv[5+3*modelid])+1); //directory name
+-//	arguments[3]=xNew<char>(strlen(argv[5+3*modelid+1])+1); xMemCpy<char>(arguments[3],argv[5+3*modelid+1],strlen(argv[5+3*modelid+1])+1); //model name
+-//	/*}}}*/
+-//
++	/*First model is ice, second is ocean*/
++	/*ice comm size: */
++	icecommsize=(int) strtol(argv[2], (char **)NULL, 10);
+ 
+-	//REMOVE
+-	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	ISSM_MPI_Comm comm_init=EnvironmentInit(argc,argv);
++	/*Buil array of who is rank 0 of their own group:*/
++	rankzeros[0]=0; 
++	rankzeros[1]=icecommsize; 
++
++	/*Split world into sub-communicators for each and every model:*/
++	ISSM_MPI_Comm_split(worldcomm,0, my_rank, &modelcomm);
++
++	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, rankzeros[1], 0, &tomitgcmcomm); 
++
+ 	/*Initialize femmodel from arguments provided command line: */
+-	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+-	///*Initialize femmodel from arguments provided command line: */
+-	//FemModel *femmodel = new FemModel(1,arguments,modelcomm);
++	FemModel *femmodel = new FemModel(argc,argv,modelcomm);
+ 	
+-//	/*Now that the models are initialized, keep communicator information in the parameters datasets of each model: */
+-//	femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(worldcomm,WorldCommEnum));
+-//	femmodel->parameters->AddObject(new IntParam(NumModelsEnum,nummodels));
+-//	femmodel->parameters->AddObject(new IntParam(ModelIdEnum,oceanid));
+-//	femmodel->parameters->AddObject(new IntParam(EarthIdEnum,iceid));
+-//	if(modelid==earthid) femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm*>(fromicecomms,IcecapToEarthCommEnum));
+-//	else femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(toearthcomm,IcecapToEarthCommEnum));
++	/*Now that the models are initialized, keep communicator information in the parameters datasets of each model: */
++	femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(worldcomm,WorldCommEnum));
++	femmodel->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(tomitgcmcomm,ToMITgcmCommEnum));
+ 
+ 	/*Solve: */
+ 	femmodel->Solve();
+@@ -117,15 +65,8 @@
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
+ 
+-//	/*Free ressources:*/
++	/*Free ressources:*/
+ //	xDelete<int>(commsizes);
+-//	for(int i=0;i<nummodels;i++){
+-//		char* string=NULL;
+-//		string=dirnames[i]; xDelete<char>(string);
+-//		string=modelnames[i]; xDelete<char>(string);
+-//	}
+-//	xDelete<char*>(dirnames);
+-//	xDelete<char*>(modelnames);
+ 
+ 	/*Return unix success: */
+ 	return 0; 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21851)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21852)
+@@ -15,6 +15,7 @@
+ 	FemModelCommEnum,
+ 	WorldCommEnum,
+ 	IcecapToEarthCommEnum,
++	ToMITgcmCommEnum,
+ 	NumModelsEnum,
+ 	ModelIdEnum,
+ 	EarthIdEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21851)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21852)
+@@ -23,6 +23,7 @@
+ 		case FemModelCommEnum : return "FemModelComm";
+ 		case WorldCommEnum : return "WorldComm";
+ 		case IcecapToEarthCommEnum : return "IcecapToEarthComm";
++		case ToMITgcmCommEnum : return "ToMITgcmComm";
+ 		case NumModelsEnum : return "NumModels";
+ 		case ModelIdEnum : return "ModelId";
+ 		case EarthIdEnum : return "EarthId";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21851)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21852)
+@@ -23,6 +23,7 @@
+ 	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
+ 	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
+ 	      else if (strcmp(name,"IcecapToEarthComm")==0) return IcecapToEarthCommEnum;
++	      else if (strcmp(name,"ToMITgcmComm")==0) return ToMITgcmCommEnum;
+ 	      else if (strcmp(name,"NumModels")==0) return NumModelsEnum;
+ 	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
+ 	      else if (strcmp(name,"EarthId")==0) return EarthIdEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
+ 	      else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+-	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
++	      if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
++	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+ 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+ 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
+ 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+-	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
++	      if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
++	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+ 	      else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+ 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+-	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
++	      if (strcmp(name,"Smb")==0) return SmbEnum;
++	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+ 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
+ 	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
+ 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+-	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Pressure")==0) return PressureEnum;
++	      if (strcmp(name,"Misfit")==0) return MisfitEnum;
++	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+ 	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
+ 	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+ 	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+-	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
++	      if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
++	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+ 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+ 	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+ 	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
+@@ -750,12 +751,12 @@
+ 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
+ 	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
+ 	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+-	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+-	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
++	      if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
++	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
++	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+ 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
+@@ -873,12 +874,12 @@
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+-	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+-	      else if (strcmp(name,"Param")==0) return ParamEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Moulin")==0) return MoulinEnum;
++	      if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
++	      else if (strcmp(name,"Param")==0) return ParamEnum;
++	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+@@ -996,12 +997,12 @@
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
+ 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+-	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+-	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
++	      if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
++	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
++	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+Index: ../trunk-jpl/src/m/classes/clusters/localpfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21851)
++++ ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21852)
+@@ -147,6 +147,24 @@
+ 			end
+ 		end
+ 		%}}}
++		function BuildQueueScriptIceOcean(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota) % {{{
++
++			%write queuing script 
++			%what is the executable being called? 
++			executable='issm_ocean.exe';
++
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#!%s\n',cluster.shell);
++			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s: -np %i ./mitgcmuv\n',cluster.np,cluster.codepath,executable,solution,cluster.executionpath,modelname,cluster.npocean);
++			fclose(fid);
++
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.errlog'],'w'); fclose(fid);
++				fid=fopen([modelname '.outlog'],'w'); fclose(fid);
++			end
++		end
++		%}}}
+ 		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+ 
+ 			%write queuing script 
+@@ -225,6 +243,21 @@
+ 			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+ 
+ 		end %}}}
++		function LaunchQueueJobIceOcean(cluster,modelname,dirname,filelist,restart,batch)% {{{
++
++			%figure out what shell extension we will use:
++			if isempty(strfind(cluster.shell,'csh')),
++				shellext='sh';
++			else
++				shellext='csh';
++			end
++
++			if cluster.verbose, disp('launching solution sequence on remote cluster'); end
++
++			launchcommand=['cd ' cluster.executionpath ' && rm -rf *.lock && tar -zxf ' dirname '.tar.gz  && rm -rf *.tar.gz'];
++			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
++
++		end %}}}
+ 		function Download(cluster,dirname,filelist)% {{{
+ 
+ 			if ispc(),
Index: /issm/oecreview/Archive/21724-22754/ISSM-21852-21853.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21852-21853.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21852-21853.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/clusters/localpfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21852)
++++ ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 21853)
+@@ -10,6 +10,7 @@
+ 		name          = '';
+ 		login         = '';
+ 		np            = 1;
++		npocean       = 0;
+ 		port          = 0;
+ 		interactive   = 1;
+ 		codepath      = [IssmConfig('ISSM_PREFIX') '/bin'];
Index: /issm/oecreview/Archive/21724-22754/ISSM-21853-21854.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21853-21854.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21853-21854.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21853)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21854)
+@@ -88,15 +88,16 @@
+ 	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	this->amrbamg = NULL;
+ 	#endif
++	#if !defined(_HAVE_ADOLC_)
+ 	if(amr_frequency){
+ 		this->parameters->FindParam(&amrtype,AmrTypeEnum);
+ 		switch(amrtype){
+ 
+-			#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
++			#if defined(_HAVE_NEOPZ_)
+ 			case AmrNeopzEnum: this->InitializeAdaptiveRefinementNeopz(); break;
+ 			#endif
+ 
+-			#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
++			#if defined(_HAVE_BAMG_)
+ 			case AmrBamgEnum: this->InitializeAdaptiveRefinementBamg(); break;
+ 			#endif
+ 
+@@ -103,6 +104,7 @@
+ 			default: _error_("not implemented yet");
+ 		}
+ 	}
++	#endif
+ 
+ 	/*Free resources */
+ 	xDelete<char>(lockfilename);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21854-21855.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21854-21855.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21854-21855.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21854)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21855)
+@@ -46,11 +46,15 @@
+ 					 ./bamg/VertexOnVertex.cpp\
+ 					 ./bamg/Mesh.cpp\
+ 					 ./shared/Bamg/BigPrimeNumber.cpp\
+-					 ./classes/AmrBamg.cpp\
+ 					 ./modules/Bamgx/Bamgx.cpp\
+ 					 ./modules/BamgConvertMeshx/BamgConvertMeshx.cpp\
+ 					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp
++
++#do not include AmrBamg with ADOLC
++if !ADOLC
++	issm_sources += ./classes/AmrBamg.cpp
+ endif
++endif
+ #}}}
+ #Core sources{{{
+ issm_sources += ./datastructures/DataSet.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-21855-21856.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21855-21856.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21855-21856.diff	(revision 22755)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21855)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 21856)
+@@ -11,23 +11,23 @@
+ using namespace bamg;
+ using namespace std;
+ 
+-int InterpFromMeshToMesh2dx(IssmDouble** pdata_interp,int* index_data,IssmDouble* x_data,IssmDouble* y_data,int nods_data,int nels_data,
+-			IssmDouble* data,int M_data,int N_data,IssmDouble* x_interp,IssmDouble* y_interp,int N_interp,Options* options){
++int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
++			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options){
+ 
+ 	/*Output*/
+-	IssmDouble* data_interp=NULL;
++	double* data_interp=NULL;
+ 
+ 	/*Intermediary*/
+-	IssmDouble xmin,xmax,ymin,ymax;
++	double xmin,xmax,ymin,ymax;
+ 	bool   isdefault;
+-	IssmDouble defaultvalue;
++	double defaultvalue;
+ 	R2     r;
+ 	I2     I;
+ 	int    i,j,k;
+ 	int    it;
+ 	int    i0,i1,i2;
+-	IssmDouble areacoord[3];
+-	IssmDouble aa,bb;
++	double areacoord[3];
++	double aa,bb;
+ 	long long dete[3];
+ 
+ 	/*Checks*/
+@@ -45,7 +45,7 @@
+ 	}
+ 
+ 	/*Initialize output*/
+-	data_interp=xNew<IssmDouble>(N_interp*N_data);
++	data_interp=xNew<double>(N_interp*N_data);
+ 
+ 	/*read background mesh*/
+ 	Mesh* Th=new Mesh(index_data,x_data,y_data,nods_data,nels_data); 
+@@ -77,7 +77,7 @@
+ 
+ 	/*Loop over output nodes*/
+ 	for(i=0;i<N_interp;i++){
+-		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<IssmDouble(i)/IssmDouble(N_interp)*100.<<"%   ");
++		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(N_interp)*100.<<"%   ");
+ 
+ 		if(isdefault){
+ 			if(x_interp[i]<xmin || x_interp[i]>xmax || y_interp[i]<ymin || y_interp[i]>ymax){
+@@ -97,9 +97,9 @@
+ 		if (tb.det>0){ 
+ 
+ 			/*Area coordinates*/
+-			areacoord[0]= reCast<IssmDouble>(dete[0])/reCast<IssmDouble>(tb.det);
+-			areacoord[1]= reCast<IssmDouble>(dete[1])/reCast<IssmDouble>(tb.det);
+-			areacoord[2]= reCast<IssmDouble>(dete[2])/reCast<IssmDouble>(tb.det);
++			areacoord[0]= reCast<double>(dete[0])/reCast<double>(tb.det);
++			areacoord[1]= reCast<double>(dete[1])/reCast<double>(tb.det);
++			areacoord[2]= reCast<double>(dete[2])/reCast<double>(tb.det);
+ 			/*3 vertices of the triangle*/
+ 			i0=Th->GetId(tb[0]);
+ 			i1=Th->GetId(tb[1]);
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h	(revision 21855)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h	(revision 21856)
+@@ -7,7 +7,7 @@
+ 
+ #include "../../classes/classes.h"
+ 
+-int InterpFromMeshToMesh2dx(IssmDouble** pdata_interp,int* index_data,IssmDouble* x_data,IssmDouble* y_data,int nods_data,int nels_data,
+-			IssmDouble* data,int M_data,int N_data,IssmDouble* x_interp,IssmDouble* y_interp,int N_interp,Options* options);
++int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
++			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options);
+ 
+ #endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-21856-21857.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21856-21857.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21856-21857.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21856)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21857)
+@@ -156,6 +156,7 @@
+ 		#endif
+ 
+ 		/*AMR*/
++		#if !defined(_HAVE_ADOLC_)
+ 		void BedrockFromMismipPlus(void);
+ 		void AdjustBaseThicknessAndMask(void);
+ 		void GetMesh(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist);
+@@ -175,6 +176,7 @@
+ 		void SmoothedGradThickness(IssmDouble** pdHdx,IssmDouble** pdHdy);
+ 		void ThicknessZZErrorEstimator(IssmDouble** pelementerror);
+ 		void MeanGroundedIceLevelSet(IssmDouble** pmasklevelset);
++		#endif
+ 
+ 		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		void ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21856)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21857)
+@@ -2427,6 +2427,7 @@
+ /*}}}*/
+ 
+ /*AMR*/
++#if !defined(_HAVE_ADOLC_)
+ void FemModel::BedrockFromMismipPlus(void){/*{{{*/
+ 
+ 	/*Insert bedrock from mismip+ setup*/
+@@ -3615,6 +3616,7 @@
+ 
+ }
+ /*}}}*/
++#endif
+ 
+ #ifdef  _HAVE_DAKOTA_
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21857-21858.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21857-21858.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21857-21858.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21857)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21858)
+@@ -181,11 +181,17 @@
+ 
+ 		/*Adaptive mesh refinement*/
+ 		if(amr_frequency){
++
++			#if !defined(_HAVE_ADOLC_)
+ 			if(save_results) femmodel->WriteMeshInResults();
+ 			if(step%amr_frequency==0 && time<finaltime){
+ 				if(VerboseSolution()) _printf0_("   refining mesh\n");
+ 				femmodel->ReMesh();//Do not refine the last step
+ 			}
++
++			#else
++			_error_("AMR not suppored with ADOLC");
++			#endif
+ 		}
+ 	}
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-21858-21859.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21858-21859.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21858-21859.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21858)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21859)
+@@ -51,7 +51,8 @@
+ 					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp
+ 
+ #do not include AmrBamg with ADOLC
+-if !ADOLC
++if ADOLC
++else
+ 	issm_sources += ./classes/AmrBamg.cpp
+ endif
+ endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-21859-21860.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21859-21860.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21859-21860.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21859)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21860)
+@@ -53,7 +53,7 @@
+ #do not include AmrBamg with ADOLC
+ if ADOLC
+ else
+-	issm_sources += ./classes/AmrBamg.cpp
++issm_sources += ./classes/AmrBamg.cpp
+ endif
+ endif
+ #}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-21860-21861.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21860-21861.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21860-21861.diff	(revision 22755)
@@ -0,0 +1,326 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21860)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21861)
+@@ -72,7 +72,6 @@
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, char* restartfilename, const int solution_type,bool trace,IssmPDouble* X=NULL);
+ 		void InitFromFids(char* rootpath, FILE* IOMODEL, FILE* toolkitsoptionsfid, int in_solution_type, bool trace, IssmPDouble* X=NULL);
+ 		void Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction);
+-		void ReMesh(void);
+ 		void Restart(void);
+ 		void SetCurrentConfiguration(int configuration_type);
+ 		void SetCurrentConfiguration(int configuration_type,int analysis_type);
+@@ -157,6 +156,7 @@
+ 
+ 		/*AMR*/
+ 		#if !defined(_HAVE_ADOLC_)
++		void ReMesh(void);
+ 		void BedrockFromMismipPlus(void);
+ 		void AdjustBaseThicknessAndMask(void);
+ 		void GetMesh(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21860)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21861)
+@@ -1543,150 +1543,6 @@
+ 	xDelete<int>(control_type);
+ }
+ /*}}}*/
+-void FemModel::ReMesh(void){/*{{{*/
+-
+-	/*Intermediaries*/
+-	IssmDouble *newx			= NULL;
+-	IssmDouble *newy			= NULL;
+-	IssmDouble *newz			= NULL;
+-	int *newelementslist		= NULL;
+-	int newnumberofvertices	= -1;
+-	int newnumberofelements = -1;
+-	bool* my_elements			= NULL; 
+-	int* my_vertices			= NULL;
+-	int elementswidth       = this->GetElementsWidth();//just tria elements in this version
+-	int amrtype;
+-
+-	/*Branch to specific amr depending on requested method*/	
+-	parameters->FindParam(&amrtype,AmrTypeEnum);
+-	switch(amrtype){
+-		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+-		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+-		#endif
+-
+-		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+-		case AmrBamgEnum: this->ReMeshBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+-		#endif
+-
+-		default: _error_("not implemented yet");
+-	}
+-
+-	/*Partitioning the new mesh. Maybe ElementsAndVerticesPartitioning.cpp could be modified to set this without iomodel.*/
+-	this->ElementsAndVerticesPartitioning(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,&my_elements,&my_vertices);
+-
+-	if(this->loads->Size()!=0) _error_("not supported yet");
+-
+-	/*Create vertices*/
+-	Vertices* new_vertices=new Vertices();
+-	this->CreateVertices(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,my_vertices,newx,newy,newz,new_vertices);
+-
+-	/*Creating elements*/
+-	/*Just Tria in this version*/
+-	Elements* new_elements=new Elements();
+-	this->CreateElements(newnumberofelements,elementswidth,newelementslist,my_elements,new_elements);
+-
+-	/*Creating materials*/
+-	Materials* new_materials=new Materials();
+-	this->CreateMaterials(newnumberofelements,my_elements,new_materials);
+-
+-	/*Creating nodes and constraints*/
+-	/*Just SSA (2D) and P1 in this version*/
+-	Nodes* new_nodes=new Nodes();
+-	Constraints* new_constraints=new Constraints();
+-
+-	int nodecounter=0;
+-	int constraintcounter=0;
+-	for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
+-
+-		int analysis_enum = this->analysis_type_list[i];
+-
+-		/*As the domain is 2D, it is not necessary to create nodes for this analysis*/
+-		/*itapopo must verify if domain is not 3D. Only 2D in this version!*/
+-		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;	    
+-
+-		this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes);
+-		if(analysis_enum==StressbalanceAnalysisEnum) this->CreateConstraints(newnumberofvertices,newnumberofelements,nodecounter,constraintcounter,newx,newy,my_vertices,new_constraints);
+-		this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
+-
+-		if(new_nodes->Size()) nodecounter=new_nodes->MaximumId();
+-		constraintcounter = new_constraints->NumberOfConstraints();
+-		/*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
+-		_assert_(nodecounter>=0);
+-	}
+-
+-	new_elements->Presort();
+-	new_nodes->Presort();
+-	new_vertices->Presort();
+-	this->loads->Presort();
+-	new_materials->Presort();
+-	new_constraints->Presort();
+-
+-	/*reset hooks for elements, loads and nodes: */
+-	new_elements->ResetHooks();
+-	this->loads->ResetHooks();
+-	new_materials->ResetHooks();
+-
+-	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
+-	int analysis_type;
+-	for(int i=0;i<this->nummodels;i++){
+-		analysis_type=this->analysis_type_list[i];
+-		//SetCurrentConfiguration(analysis_type);
+-
+-		this->analysis_counter=i;	
+-		/*Now, plug analysis_counter and analysis_type inside the parameters: */
+-		this->parameters->SetParam(this->analysis_counter,AnalysisCounterEnum);
+-		this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
+-		this->parameters->SetParam(analysis_type,ConfigurationTypeEnum);
+-
+-		/*configure elements, loads and nodes, for this new analysis: */
+-		new_elements->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-		this->loads->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-
+-		/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
+-		if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
+-			ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
+-			if(VerboseSolver()) _printf0_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
+-		}
+-
+-		ConfigureObjectsx(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
+-		if(i==0){ 
+-			VerticesDofx(new_vertices,this->parameters); //only call once, we only have one set of vertices
+-		}
+-		SpcNodesx(new_nodes,new_constraints,this->parameters,analysis_type);
+-		NodesDofx(new_nodes,this->parameters,analysis_type);
+-	}
+-
+-	/*Finally: interpolate all inputs and insert them into the new elements.*/
+-	this->InterpolateInputs(new_vertices,new_elements);
+-
+-	/*Delete old structure and set new pointers*/
+-	delete this->vertices;		this->vertices		= new_vertices;
+-	delete this->elements;		this->elements		= new_elements;
+-	delete this->nodes;			this->nodes			= new_nodes;
+-	delete this->constraints;	this->constraints	= new_constraints;
+-	delete this->materials;		this->materials	= new_materials;
+-
+-	GetMaskOfIceVerticesLSMx(this);
+-
+-	/*Insert MISMIP+ bed topography*/
+-	if(false) this->BedrockFromMismipPlus();
+-
+-	/*Adjust base, thickness and mask grounded ice leve set*/
+-	if(true) this->AdjustBaseThicknessAndMask();
+-
+-	/*Reset current configuration: */
+-	analysis_type=this->analysis_type_list[this->analysis_counter];
+-	SetCurrentConfiguration(analysis_type);
+-
+-	/*Cleanup*/
+-	xDelete<IssmDouble>(newx);
+-	xDelete<IssmDouble>(newy);
+-	xDelete<IssmDouble>(newz);
+-	xDelete<int>(newelementslist);
+-	xDelete<int>(my_vertices);
+-	xDelete<bool>(my_elements);
+-}
+-/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+@@ -2428,6 +2284,150 @@
+ 
+ /*AMR*/
+ #if !defined(_HAVE_ADOLC_)
++void FemModel::ReMesh(void){/*{{{*/
++
++	/*Intermediaries*/
++	IssmDouble *newx			= NULL;
++	IssmDouble *newy			= NULL;
++	IssmDouble *newz			= NULL;
++	int *newelementslist		= NULL;
++	int newnumberofvertices	= -1;
++	int newnumberofelements = -1;
++	bool* my_elements			= NULL; 
++	int* my_vertices			= NULL;
++	int elementswidth       = this->GetElementsWidth();//just tria elements in this version
++	int amrtype;
++
++	/*Branch to specific amr depending on requested method*/	
++	parameters->FindParam(&amrtype,AmrTypeEnum);
++	switch(amrtype){
++		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
++		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
++								 #endif
++
++								 #if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
++		case AmrBamgEnum: this->ReMeshBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
++								#endif
++
++		default: _error_("not implemented yet");
++	}
++
++	/*Partitioning the new mesh. Maybe ElementsAndVerticesPartitioning.cpp could be modified to set this without iomodel.*/
++	this->ElementsAndVerticesPartitioning(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,&my_elements,&my_vertices);
++
++	if(this->loads->Size()!=0) _error_("not supported yet");
++
++	/*Create vertices*/
++	Vertices* new_vertices=new Vertices();
++	this->CreateVertices(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,my_vertices,newx,newy,newz,new_vertices);
++
++	/*Creating elements*/
++	/*Just Tria in this version*/
++	Elements* new_elements=new Elements();
++	this->CreateElements(newnumberofelements,elementswidth,newelementslist,my_elements,new_elements);
++
++	/*Creating materials*/
++	Materials* new_materials=new Materials();
++	this->CreateMaterials(newnumberofelements,my_elements,new_materials);
++
++	/*Creating nodes and constraints*/
++	/*Just SSA (2D) and P1 in this version*/
++	Nodes* new_nodes=new Nodes();
++	Constraints* new_constraints=new Constraints();
++
++	int nodecounter=0;
++	int constraintcounter=0;
++	for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
++
++		int analysis_enum = this->analysis_type_list[i];
++
++		/*As the domain is 2D, it is not necessary to create nodes for this analysis*/
++		/*itapopo must verify if domain is not 3D. Only 2D in this version!*/
++		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;	    
++
++		this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes);
++		if(analysis_enum==StressbalanceAnalysisEnum) this->CreateConstraints(newnumberofvertices,newnumberofelements,nodecounter,constraintcounter,newx,newy,my_vertices,new_constraints);
++		this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
++
++		if(new_nodes->Size()) nodecounter=new_nodes->MaximumId();
++		constraintcounter = new_constraints->NumberOfConstraints();
++		/*Make sure nodecounter is at least 0 (if no node exists, maxid will be -1*/
++		_assert_(nodecounter>=0);
++	}
++
++	new_elements->Presort();
++	new_nodes->Presort();
++	new_vertices->Presort();
++	this->loads->Presort();
++	new_materials->Presort();
++	new_constraints->Presort();
++
++	/*reset hooks for elements, loads and nodes: */
++	new_elements->ResetHooks();
++	this->loads->ResetHooks();
++	new_materials->ResetHooks();
++
++	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
++	int analysis_type;
++	for(int i=0;i<this->nummodels;i++){
++		analysis_type=this->analysis_type_list[i];
++		//SetCurrentConfiguration(analysis_type);
++
++		this->analysis_counter=i;	
++		/*Now, plug analysis_counter and analysis_type inside the parameters: */
++		this->parameters->SetParam(this->analysis_counter,AnalysisCounterEnum);
++		this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
++		this->parameters->SetParam(analysis_type,ConfigurationTypeEnum);
++
++		/*configure elements, loads and nodes, for this new analysis: */
++		new_elements->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++		this->loads->SetCurrentConfiguration(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++
++		/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
++		if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
++			ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
++			if(VerboseSolver()) _printf0_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
++		}
++
++		ConfigureObjectsx(new_elements,this->loads,new_nodes,new_vertices,new_materials,this->parameters);
++		if(i==0){ 
++			VerticesDofx(new_vertices,this->parameters); //only call once, we only have one set of vertices
++		}
++		SpcNodesx(new_nodes,new_constraints,this->parameters,analysis_type);
++		NodesDofx(new_nodes,this->parameters,analysis_type);
++	}
++
++	/*Finally: interpolate all inputs and insert them into the new elements.*/
++	this->InterpolateInputs(new_vertices,new_elements);
++
++	/*Delete old structure and set new pointers*/
++	delete this->vertices;		this->vertices		= new_vertices;
++	delete this->elements;		this->elements		= new_elements;
++	delete this->nodes;			this->nodes			= new_nodes;
++	delete this->constraints;	this->constraints	= new_constraints;
++	delete this->materials;		this->materials	= new_materials;
++
++	GetMaskOfIceVerticesLSMx(this);
++
++	/*Insert MISMIP+ bed topography*/
++	if(false) this->BedrockFromMismipPlus();
++
++	/*Adjust base, thickness and mask grounded ice leve set*/
++	if(true) this->AdjustBaseThicknessAndMask();
++
++	/*Reset current configuration: */
++	analysis_type=this->analysis_type_list[this->analysis_counter];
++	SetCurrentConfiguration(analysis_type);
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(newx);
++	xDelete<IssmDouble>(newy);
++	xDelete<IssmDouble>(newz);
++	xDelete<int>(newelementslist);
++	xDelete<int>(my_vertices);
++	xDelete<bool>(my_elements);
++}
++/*}}}*/
+ void FemModel::BedrockFromMismipPlus(void){/*{{{*/
+ 
+ 	/*Insert bedrock from mismip+ setup*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21861-21862.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21861-21862.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21861-21862.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21861)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21862)
+@@ -354,9 +354,8 @@
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module load comp-intel/2016.2.181\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt\n');
+-			 fprintf(fid,'module load netcdf/4.0\n');
+-			 fprintf(fid,'module load mpi-mvapich2/1.4.1/gcc\n');
+-			 fprintf(fid,'module load gcc/4.4.4\n');
++			 fprintf(fid,'module load netcdf/4.4.1.1_mpt\n');
++			 fprintf(fid,'module load mpi-sgi/mpt.2.15r20\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,['cd ' pwd() ' \n\n']);
+@@ -369,7 +368,7 @@
+ 			 %in interactive mode, create a run file, and errlog and outlog file
+ 			 if cluster.interactive,
+ 				 fid=fopen([modelname '.run'],'w');
+-				 fprintf(fid,'module load mpi-mvapich2/1.4.1/gcc\n');
++				 fprintf(fid,'module load mpi-sgi/mpt.2.15r20\n');
+ 				 fprintf(fid,['mpiexec -np %i ./mitgcmuv \n'],np);
+ 				 fprintf(fid,['touch ' modelname '.lock %s\n']);
+ 				 fclose(fid);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21862-21863.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21862-21863.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21862-21863.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_ampi
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_ampi	(revision 21862)
++++ ../trunk-jpl/jenkins/linux64_ross_ampi	(revision 21863)
+@@ -20,7 +20,7 @@
+ 				--with-python-numpy-dir=/usr/lib/python2.7/dist-packages/numpy\
+ 				--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 				--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-				--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi" \
++				--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpifort -lmpi" \
+ 				--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 				--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 				--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/21724-22754/ISSM-21863-21864.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21863-21864.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21863-21864.diff	(revision 22755)
@@ -0,0 +1,844 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 21863)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 21864)
+@@ -21,7 +21,6 @@
+ %   - Hessiantype :       0 -> use double L2 projection (default)
+ %                         1 -> use Green formula
+ %   - KeepVertices :      try to keep initial vertices when adaptation is done on an existing mesh (default 1)
+-%   - MaxCornerAngle :    maximum angle of corners in degree (default is 10)
+ %   - maxnbv :            maximum number of vertices used to allocate memory (default is 10^6)
+ %   - maxsubdiv :         maximum subdivision of exisiting elements (default is 10)
+ %   - metric :            matrix (numberofnodes x 3) used as a metric
+@@ -33,7 +32,6 @@
+ %   - omega :             relaxation parameter of the smoothing procedure (default is 1.8)
+ %   - power :             power applied to the metric (default is 1)
+ %   - splitcorners :      split triangles whuch have 3 vertices on the outline (default is 1)
+-%   - geometricalmetric : take the geometry into account to generate the metric (default is 0)
+ %   - verbose :           level of verbosity (default is 1)
+ %
+ %   - vertical :          is this a 2d vertical mesh (flowband, default is 0)
+@@ -329,7 +327,6 @@
+ bamg_options.hmaxVertices=getfieldvalue(options,'hmaxVertices',[]);
+ bamg_options.hVertices=getfieldvalue(options,'hVertices',[]);
+ bamg_options.KeepVertices=getfieldvalue(options,'KeepVertices',1);
+-bamg_options.MaxCornerAngle=getfieldvalue(options,'MaxCornerAngle',10.);
+ bamg_options.maxnbv=getfieldvalue(options,'maxnbv',10^6);
+ bamg_options.maxsubdiv=getfieldvalue(options,'maxsubdiv',10.);
+ bamg_options.metric=getfieldvalue(options,'metric',[]);
+@@ -339,8 +336,6 @@
+ bamg_options.omega=getfieldvalue(options,'omega',1.8);
+ bamg_options.power=getfieldvalue(options,'power',1.);
+ bamg_options.splitcorners=getfieldvalue(options,'splitcorners',1);
+-bamg_options.geometricalmetric=getfieldvalue(options,'geometricalmetric',0);
+-bamg_options.random=getfieldvalue(options,'rand',true);
+ bamg_options.verbose=getfieldvalue(options,'verbose',1);
+ %}}}
+ 
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 21863)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 21864)
+@@ -36,7 +36,6 @@
+ 	   - Hessiantype :       0 -> use double P2 projection (default)
+ 	                         1 -> use Green formula
+ 	   - KeepVertices :      try to keep initial vertices when adaptation is done on an existing mesh (default 1)
+-	   - MaxCornerAngle :    maximum angle of corners in degree (default is 10)
+ 	   - maxnbv :            maximum number of vertices used to allocate memory (default is 10^6)
+ 	   - maxsubdiv :         maximum subdivision of exisiting elements (default is 10)
+ 	   - metric :            matrix (numberofnodes x 3) used as a metric
+@@ -48,7 +47,6 @@
+ 	   - omega :             relaxation parameter of the smoothing procedure (default is 1.8)
+ 	   - power :             power applied to the metric (default is 1)
+ 	   - splitcorners :      split triangles whuch have 3 vertices on the outline (default is 1)
+-	   - geometricalmetric : take the geometry into account to generate the metric (default is 0)
+ 	   - verbose :           level of verbosity (default is 1)
+ 
+ 	   - rifts :             followed by an ARGUS file that prescribes the rifts
+@@ -302,7 +300,6 @@
+ 	bamg_options['hmaxVertices']=options.getfieldvalue('hmaxVertices',np.empty((0,1)))
+ 	bamg_options['hVertices']=options.getfieldvalue('hVertices',np.empty((0,1)))
+ 	bamg_options['KeepVertices']=options.getfieldvalue('KeepVertices',1)
+-	bamg_options['MaxCornerAngle']=options.getfieldvalue('MaxCornerAngle',10.)
+ 	bamg_options['maxnbv']=options.getfieldvalue('maxnbv',10**6)
+ 	bamg_options['maxsubdiv']=options.getfieldvalue('maxsubdiv',10.)
+ 	bamg_options['metric']=options.getfieldvalue('metric',np.empty((0,1)))
+@@ -312,8 +309,6 @@
+ 	bamg_options['omega']=options.getfieldvalue('omega',1.8)
+ 	bamg_options['power']=options.getfieldvalue('power',1.)
+ 	bamg_options['splitcorners']=options.getfieldvalue('splitcorners',1)
+-	bamg_options['geometricalmetric']=options.getfieldvalue('geometricalmetric',0)
+-	bamg_options['random']=options.getfieldvalue('rand',True)
+ 	bamg_options['verbose']=options.getfieldvalue('verbose',1)
+ 	#}}}
+ 
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21864)
+@@ -31,7 +31,6 @@
+ 	this->options->errg              = 0.1;
+ 	this->options->gradation         = 1.5;
+ 	this->options->Hessiantype       = 0;
+-	this->options->MaxCornerAngle    = 1.e-12;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
+ 	this->options->Metrictype        = 0;
+@@ -39,10 +38,8 @@
+ 	this->options->nbsmooth          = 3;
+ 	this->options->omega             = 1.8;
+ 	this->options->power             = 1;
+-	this->options->random            = 0;
+ 	this->options->verbose           = 0;
+ 	this->options->Crack             = 0;
+-	this->options->geometricalmetric = 0;
+ 	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!!*/
+ 	this->options->splitcorners      = 1;
+ 	this->options->hmin              = hmin;
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.h	(revision 21864)
+@@ -16,7 +16,6 @@
+ 		double  errg;
+ 		double  gradation;
+ 		int     Hessiantype;
+-		double  MaxCornerAngle;
+ 		int     maxnbv;
+ 		double  maxsubdiv;
+ 		int     Metrictype;
+@@ -24,12 +23,10 @@
+ 		int     nbsmooth;
+ 		double  omega;
+ 		double  power;
+-		bool    random;
+ 		int     verbose;
+ 
+ 		/*Flags*/
+ 		int     Crack;
+-		int     geometricalmetric;
+ 		int     KeepVertices;
+ 		int     splitcorners;
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21864)
+@@ -979,57 +979,6 @@
+ 	/*}}}*/
+ 
+ 	/*Methods*/
+-	void Mesh::AddGeometryMetric(BamgOpts* bamgopts){/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/IntersectGeomMetric)*/
+-
+-		/*Get options*/
+-		double anisomax = bamgopts->anisomax;
+-		double errg     = bamgopts->errg;
+-
+-		double ss[2]={0.00001,0.99999};
+-		double errC = 2*sqrt(2*errg);
+-		double hmax = Gh.MaximalHmax();
+-		double hmin = Gh.MinimalHmin();
+-
+-		//check that hmax is positive
+-		_assert_(hmax>0); 
+-
+-		//errC cannot be higher than 1
+-		if(errC>1) errC=1;
+-
+-		//Set all vertices to "on"
+-		SetVertexFieldOn();
+-
+-		//loop over all the vertices on edges
+-		for(int  i=0;i<nbe;i++){
+-			for (int j=0;j<2;j++){
+-
+-				BamgVertex V;
+-				VertexOnGeom GV;
+-				Gh.ProjectOnCurve(edges[i],ss[j],V,GV);
+-
+-				GeomEdge* eg = GV;
+-				double s = GV;
+-				R2 tg;
+-				double  R1= eg->R1tg(s,tg);
+-				double  ht=hmax;
+-				// err relative to the length of the edge
+-				if (R1>1.0e-20) {  
+-					ht = Min(Max(errC/R1,hmin),hmax);
+-				}
+-				double hn=Min(hmax,ht*anisomax);
+-
+-				if (ht<=0 || hn<=0){
+-					_error_("ht<=0 || hn<=0");
+-				}
+-				EigenMetric Vp(1/(ht*ht),1/(hn*hn),tg);
+-				Metric MVp(Vp);
+-				edges[i][j].m.IntersectWith(MVp);
+-			}
+-		}
+-		// the problem is for the vertex on vertex 
+-	}
+-	/*}}}*/
+ 	void Mesh::AddMetric(BamgOpts* bamgopts){/*{{{*/
+ 		//  Hessiantype = 0 =>  H is computed using double L2 projection
+ 		//  Hessiantype = 1 =>  H is computed with green formula
+@@ -1230,12 +1179,10 @@
+ 		/*Intermediary*/
+ 		int i,j,k,kk,it,jt;
+ 		int    verbose=0;
+-		double cutoffradian=10*Pi/180;
+ 
+ 		/*Recover options*/
+-		if (bamgopts){
++		if(bamgopts){
+ 			verbose=bamgopts->verbose;
+-			cutoffradian=bamgopts->MaxCornerAngle*Pi/180;
+ 		}
+ 
+ 		//display info
+@@ -1242,13 +1189,8 @@
+ 		if (verbose>1) _printf_("   construction of the geometry from the 2d mesh\n");
+ 
+ 		//check that the mesh is not empty
+-		if (nbt<=0 || nbv <=0 ) {
+-			_error_("nbt or nbv is negative (Mesh empty?)");
+-		}
++		if(nbt<=0 || nbv <=0 ) _error_("nbt or nbv is negative (Mesh empty?)");
+ 
+-		//Gh is the geometry of the mesh (this), initialize MaxCornerAngle
+-		if (cutoffradian>=0) Gh.MaxCornerAngle = cutoffradian;
+-
+ 		/*Construction of the edges*/
+ 
+ 		//initialize st and edge4
+@@ -1446,9 +1388,7 @@
+ 		/*Reconstruct subdomains info*/
+ 
+ 		//check that nbsubdomains is empty
+-		if (nbsubdomains){
+-			_error_("nbsubdomains should be 0");
+-		}
++		if(nbsubdomains) _error_("nbsubdomains should be 0");
+ 		nbsubdomains=0;
+ 
+ 		//color the subdomains
+@@ -2648,51 +2588,51 @@
+ 	void Mesh::Init(long maxnbv_in) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/PreInit)*/
+ 
+-		/* initialize random seed: */
+-		srand(19999999);
+-
+ 		/*Initialize fields*/
+-		NbRef=0;
+-		quadtree=NULL;
+-		nbv=0;
+-		nbt=0;
+-		nbe=0;
+-		edges=NULL;
+-		nbsubdomains=0;
+-		subdomains=NULL;
+-		maxnbv=maxnbv_in;
+-		maxnbt=2 *maxnbv_in-2;
+-		NbVertexOnBThVertex=0;
+-		VertexOnBThVertex=NULL;
+-		NbVertexOnBThEdge=0;
+-		VertexOnBThEdge=NULL;
+-		NbCrackedVertices=0;
+-		CrackedVertices =NULL;
+-		NbCrackedEdges =0;
+-		CrackedEdges =NULL;
+-		NbVerticesOnGeomVertex=0;
+-		VerticesOnGeomVertex=NULL;
+-		NbVerticesOnGeomEdge=0;
+-		VerticesOnGeomEdge=NULL;
++		this->NbRef                  = 0;
++		this->quadtree               = NULL;
++		this->nbv                    = 0;
++		this->nbt                    = 0;
++		this->nbe                    = 0;
++		this->edges                  = NULL;
++		this->nbsubdomains           = 0;
++		this->subdomains             = NULL;
++		this->maxnbv                 = maxnbv_in;
++		this->maxnbt                 = 2 *maxnbv_in-2;
++		this->NbVertexOnBThVertex    = 0;
++		this->VertexOnBThVertex      = NULL;
++		this->NbVertexOnBThEdge      = 0;
++		this->VertexOnBThEdge        = NULL;
++		this->NbCrackedVertices      = 0;
++		this->CrackedVertices        = NULL;
++		this->NbCrackedEdges         = 0;
++		this->CrackedEdges           = NULL;
++		this->NbVerticesOnGeomVertex = 0;
++		this->VerticesOnGeomVertex   = NULL;
++		this->NbVerticesOnGeomEdge   = 0;
++		this->VerticesOnGeomEdge     = NULL;
+ 
++		/*Initialize random seed*/
++		this->randomseed = 1;
++
+ 		/*Allocate if maxnbv_in>0*/
+ 		if(maxnbv_in){
+-			vertices=new BamgVertex[maxnbv];
+-			_assert_(vertices);
+-			orderedvertices=new BamgVertex* [maxnbv];
+-			_assert_(orderedvertices);
+-			triangles=new Triangle[maxnbt];
+-			_assert_(triangles);
++			this->vertices=new BamgVertex[this->maxnbv];
++			this->orderedvertices=new BamgVertex* [this->maxnbv];
++			this->triangles=new Triangle[this->maxnbt];
++         _assert_(this->vertices);
++         _assert_(this->orderedvertices);
++			_assert_(this->triangles);
+ 		}
+ 		else{
+-			vertices=NULL;
+-			orderedvertices=NULL;
+-			triangles=NULL;
+-			maxnbt=0;
++			this->vertices        = NULL;
++			this->orderedvertices = NULL;
++			this->triangles       = NULL;
++			this->maxnbt          = 0;
+ 		} 
+ 	}
+ 	/*}}}*/
+-	void Mesh::Insert(bool random) {/*{{{*/
++	void Mesh::Insert(){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Insert)*/
+ 
+ 		/*Insert points in the existing Geometry*/
+@@ -2739,8 +2679,7 @@
+ 
+ 		//Get Prime number
+ 		const long PrimeNumber= BigPrimeNumber(nbv);
+-		int temp = rand(); if(!random) temp = 756804110;
+-		int  k0=temp%nbv; 
++		int  k0=this->RandomNumber(nbv);
+ 
+ 		//Build orderedvertices
+ 		for (i=0; i<nbv; i++){
+@@ -2824,7 +2763,7 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap,bool random) {/*{{{*/
++	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/InsertNewPoints)*/
+ 
+ 		long int verbose=0;
+@@ -2844,9 +2783,7 @@
+ 
+ 		/*construction of a random order*/
+ 		const long PrimeNumber= BigPrimeNumber(nbv)  ;
+-		//remainder of the division of rand() by nbvnew
+-		int  temp = rand(); if(!random) temp = 1098566905;
+-		long k3 = temp%nbvnew;
++		long k3 = long(this->RandomNumber(nbvnew));
+ 		//loop over the new points
+ 		for (int is3=0; is3<nbvnew; is3++){
+ 			long j=nbvold +(k3 = (k3+PrimeNumber)%nbvnew);
+@@ -3087,7 +3024,7 @@
+ 			}
+ 			//if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
+ 			Bh.CreateSingleVertexToTriangleConnectivity();     
+-			InsertNewPoints(nbvold,NbTSwap,bamgopts->random);
++			InsertNewPoints(nbvold,NbTSwap);
+ 		}
+ 		else Bh.CreateSingleVertexToTriangleConnectivity();     
+ 
+@@ -3145,7 +3082,7 @@
+ 				} // end loop for each edge 
+ 			}// for triangle   
+ 
+-			if (!InsertNewPoints(nbvold,NbTSwap,bamgopts->random)) break;
++			if (!InsertNewPoints(nbvold,NbTSwap)) break;
+ 			for (i=nbtold;i<nbt;i++) first_np_or_next_t[i]=iter;
+ 			Headt = nbt; // empty list 
+ 
+@@ -4094,7 +4031,7 @@
+ 		maxnbt=2*maxnbv-2; // for filling The Holes and quadrilaterals 
+ 
+ 		/*Insert Vertices*/
+-		Insert(true);
++		Insert();
+ 	}
+ 	/*}}}*/
+ 	void Mesh::TriangulateFromGeom0(BamgOpts* bamgopts){/*{{{*/
+@@ -4395,7 +4332,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert(bamgopts->random);
++		Insert();
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4721,7 +4658,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert(bamgopts->random);
++		Insert();
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+@@ -4736,48 +4673,14 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 	}
+ 	/*}}}*/
++	int  Mesh::RandomNumber(int max){/*{{{*/
++		/*  Generate a random number from 0 to max-1 using linear congruential
++		 *  random number generator*/
+ 
+-	/*Intermediary*/
+-	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
+-
+-		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
+-		int dir=0;
+-		if (k<0){
+-			_error_("k<0");
+-		}
+-		int kkk=0;  
+-		long long IJ_IA,IJ_AJ;
+-		AdjacentTriangle edge(t,OppositeEdge[k]);          
+-		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
+-			kkk++;
+-			if (kkk>=1000){
+-				_error_("kkk>=1000");
+-			}
+-			BamgVertex  &vI =  *edge.EdgeVertex(0);
+-			BamgVertex  &vJ =  *edge.EdgeVertex(1);
+-			I2 I=vI, J=vJ, IJ= J-I;
+-			IJ_IA = (IJ ,(A-I));
+-			if (IJ_IA<0) {
+-				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
+-				else {dir=-1;
+-					continue;}};// go in direction i 
+-					IJ_AJ = (IJ ,(J-A));
+-					if (IJ_AJ<0) {
+-						if(dir<0)  {a=0;b=1;return edge;}            
+-						else {dir = 1;
+-							continue;}}// go in direction j
+-							double IJ2 = IJ_IA + IJ_AJ;
+-							if (IJ2==0){
+-								_error_("IJ2==0");
+-							}
+-							a= IJ_AJ/IJ2;
+-							b= IJ_IA/IJ2;
+-							return edge;
+-		} 
+-	}
+-	/*}}}*/
+-	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
++		this->randomseed = (this->randomseed * 1366l + 150889l) % 714025l;
++		return this->randomseed / (714025l / max + 1);
++	} /*}}}*/
++	int Mesh::ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret)  { /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ForceEdge)*/
+ 
+ 		int NbSwap =0;
+@@ -4819,7 +4722,7 @@
+ 					_error_("!v1 || !v2");
+ 				}
+ 				long long detss = 0,l=0;
+-				while ((SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
++				while ((this->SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
+ 				 if(l++ > 10000000) {
+ 					 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+ 				 }
+@@ -4852,51 +4755,7 @@
+ 		return NbSwap; 
+ 	}
+ 	/*}}}*/
+-	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
+-		// --------------------------------------------------------------
+-		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
+-		//                               
+-		//               sb                     sb    
+-		//             / | \                   /   \                      !
+-		//         as1/  |  \                 /a2   \                     !
+-		//           /   |   \               /    t2 \                    !
+-		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
+-		//          \  a1|a2  /             \   as1   /  
+-		//           \   |   /               \ t1    /   
+-		//            \  |  / as2             \   a1/    
+-		//             \ | /                   \   /     
+-		//              sa                       sa   
+-		//  -------------------------------------------------------------
+-		int as1 = NextEdge[a1];
+-		int as2 = NextEdge[a2];
+-		int ap1 = PreviousEdge[a1];
+-		int ap2 = PreviousEdge[a2];
+-		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
+-		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
+-		// mise a jour des 2 adjacences externes 
+-		AdjacentTriangle taas1 = t1->Adj(as1),
+-							  taas2 = t2->Adj(as2),
+-							  tas1(t1,as1), tas2(t2,as2),
+-							  ta1(t1,a1),ta2(t2,a2);
+-		// externe haut gauche
+-		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
+-		// externe bas droite
+-		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
+-		// remove the Mark  UnMarkSwap 
+-		t1->SetUnMarkUnSwap(ap1);
+-		t2->SetUnMarkUnSwap(ap2);
+-		// interne 
+-		tas1.SetAdj2(tas2);
+-
+-		t1->det = det1;
+-		t2->det = det2;
+-
+-		t1->SetSingleVertexToTriangleConnectivity();
+-		t2->SetSingleVertexToTriangleConnectivity();
+-	} // end swap 
+-	/*}}}*/
+-	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
++	int Mesh::SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,AdjacentTriangle & tt1,long long & dets1, long long & detsa,long long & detsb, int & NbSwap) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SwapForForcingEdge)*/
+ 		// l'arete ta coupe l'arete pva pvb
+ 		// de cas apres le swap sa coupe toujours
+@@ -4983,4 +4842,89 @@
+ 		return ret;
+ 	}
+ 	/*}}}*/
++
++	/*Intermediary*/
++	AdjacentTriangle CloseBoundaryEdge(I2 A,Triangle *t, double &a,double &b) {/*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/CloseBoundaryEdge)*/
++
++		int k=(*t)(0) ?  ((  (*t)(1) ? ( (*t)(2) ? -1 : 2) : 1  )) : 0;
++		int dir=0;
++		if (k<0){
++			_error_("k<0");
++		}
++		int kkk=0;  
++		long long IJ_IA,IJ_AJ;
++		AdjacentTriangle edge(t,OppositeEdge[k]);          
++		for (;;edge = dir >0 ? Next(Adj(Next(edge))) : Previous(Adj(Previous(edge)))) {  
++			kkk++;
++			if (kkk>=1000){
++				_error_("kkk>=1000");
++			}
++			BamgVertex  &vI =  *edge.EdgeVertex(0);
++			BamgVertex  &vJ =  *edge.EdgeVertex(1);
++			I2 I=vI, J=vJ, IJ= J-I;
++			IJ_IA = (IJ ,(A-I));
++			if (IJ_IA<0) {
++				if (dir>0) {a=1;b=0;return edge;}// change of signe => I
++				else {dir=-1;
++					continue;}};// go in direction i 
++					IJ_AJ = (IJ ,(J-A));
++					if (IJ_AJ<0) {
++						if(dir<0)  {a=0;b=1;return edge;}            
++						else {dir = 1;
++							continue;}}// go in direction j
++							double IJ2 = IJ_IA + IJ_AJ;
++							if (IJ2==0){
++								_error_("IJ2==0");
++							}
++							a= IJ_AJ/IJ2;
++							b= IJ_IA/IJ2;
++							return edge;
++		} 
++	}
++	/*}}}*/
++	void  swap(Triangle *t1,short a1, Triangle *t2,short a2, BamgVertex *s1,BamgVertex *s2,long long det1,long long det2){ /*{{{*/
++		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/swap)*/
++		// --------------------------------------------------------------
++		// short a2=aa[a];// les 2 numero de l arete dans les 2 triangles
++		//                               
++		//               sb                     sb    
++		//             / | \                   /   \                      !
++		//         as1/  |  \                 /a2   \                     !
++		//           /   |   \               /    t2 \                    !
++		//       s1 /t1  | t2 \s2  -->   s1 /___as2___\s2                 !
++		//          \  a1|a2  /             \   as1   /  
++		//           \   |   /               \ t1    /   
++		//            \  |  / as2             \   a1/    
++		//             \ | /                   \   /     
++		//              sa                       sa   
++		//  -------------------------------------------------------------
++		int as1 = NextEdge[a1];
++		int as2 = NextEdge[a2];
++		int ap1 = PreviousEdge[a1];
++		int ap2 = PreviousEdge[a2];
++		(*t1)(VerticesOfTriangularEdge[a1][1]) = s2 ; // avant sb
++		(*t2)(VerticesOfTriangularEdge[a2][1]) = s1  ; // avant sa
++		// mise a jour des 2 adjacences externes 
++		AdjacentTriangle taas1 = t1->Adj(as1),
++							  taas2 = t2->Adj(as2),
++							  tas1(t1,as1), tas2(t2,as2),
++							  ta1(t1,a1),ta2(t2,a2);
++		// externe haut gauche
++		taas1.SetAdj2(ta2, taas1.GetAllFlag_UnSwap());
++		// externe bas droite
++		taas2.SetAdj2(ta1, taas2.GetAllFlag_UnSwap());
++		// remove the Mark  UnMarkSwap 
++		t1->SetUnMarkUnSwap(ap1);
++		t2->SetUnMarkUnSwap(ap2);
++		// interne 
++		tas1.SetAdj2(tas2);
++
++		t1->det = det1;
++		t2->det = det2;
++
++		t1->SetSingleVertexToTriangleConnectivity();
++		t2->SetSingleVertexToTriangleConnectivity();
++	} // end swap 
++	/*}}}*/
+ }
+Index: ../trunk-jpl/src/c/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/Geometry.h	(revision 21864)
+@@ -31,7 +31,6 @@
+ 			Curve         *curves;
+ 			R2             pmin,pmax;             // domain extrema coordinates
+ 			double         coefIcoor;             // coef to integer coordinates;
+-			double         MaxCornerAngle;
+ 
+ 			//Constructor/Destructors
+ 			~Geometry(); 
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 21864)
+@@ -256,7 +256,6 @@
+ 			OnSwap = (Abs(det1) + Abs(det2)) < detA;
+ 
+ 			long long detMinNew=Min(det1,det2);
+-			//     if (detMin<0 && (Abs(det1) + Abs(det2) == detA)) OnSwap=BinaryRand();// just for test   
+ 			if (! OnSwap &&(detMinNew>0)) {
+ 				OnSwap = detMin ==0;
+ 				if (! OnSwap) {
+Index: ../trunk-jpl/src/c/bamg/BamgOpts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/BamgOpts.cpp	(revision 21864)
+@@ -10,7 +10,6 @@
+ 	this->errg              = 0;
+ 	this->gradation         = 0;
+ 	this->Hessiantype       = 0;
+-	this->MaxCornerAngle    = 0;
+ 	this->maxnbv            = 0;
+ 	this->maxsubdiv         = 0;
+ 	this->Metrictype        = 0;
+@@ -18,11 +17,9 @@
+ 	this->nbsmooth          = 0;
+ 	this->omega             = 0;
+ 	this->power             = 0;
+-	this->random            = 0;
+ 	this->verbose           = 0;
+ 
+ 	this->Crack             = 0;
+-	this->geometricalmetric = 0;
+ 	this->KeepVertices      = 0;
+ 	this->splitcorners      = 0;
+ 
+@@ -67,7 +64,6 @@
+ 
+ 	if (this->Crack!=0  && this->Crack!=1) _error_("'Crack' supported options are 0 and 1");
+ 	if (this->KeepVertices!=0 && this->KeepVertices!=1) _error_("'KeepVertices' supported options are 0 and 1");
+-	if (this->geometricalmetric!=0  && this->geometricalmetric!=1) _error_("'geometricalmetric' supported options are 0 and 1");
+ 
+ 	if (this->hmin<=0) _error_("'hmin' option should be >0");
+ 	if (this->hmax<=0 || this->hmax<this->hmin) _error_("'hmax' option should be between 0 and hmin=" << this->hmin);
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 21864)
+@@ -186,12 +186,6 @@
+ 			}
+ 		}
+ 
+-		//MaxCornerAngle
+-		if (bamgopts->MaxCornerAngle){
+-			if(verbose>5) _printf_("      processing MaxCornerAngle\n");
+-			MaxCornerAngle=bamgopts->MaxCornerAngle*Pi/180;
+-		}
+-
+ 		//TangentAtEdges
+ 		if (bamggeom->TangentAtEdges){
+ 			if(verbose>5) _printf_("      processing TangentAtEdges");
+@@ -400,7 +394,6 @@
+ 		_printf_("   pmin (x,y): (" << pmin.x << " " << pmin.y << ")\n");
+ 		_printf_("   pmax (x,y): (" << pmax.x << " " << pmax.y << ")\n");
+ 		_printf_("   coefIcoor: " << coefIcoor << "\n");
+-		_printf_("   MaxCornerAngle: " << MaxCornerAngle << "\n");
+ 
+ 		return;
+ 	}
+@@ -418,7 +411,6 @@
+ 		nbsubdomains=0;
+ 		nbcurves=0;
+ 		subdomains=NULL;
+-		MaxCornerAngle = 10*Pi/180; //default is 10 degres
+ 	}
+ 	/*}}}*/
+ 	double Geometry::MinimalHmin() {/*{{{*/
+@@ -613,19 +605,14 @@
+ 				}
+ 			}
+ 
+-			// angular test on current vertex to guess whether it is a corner (ord = number of edges holding i)
+-			if(ord==2) { 
++			//all vertices provided in geometry are corners (ord = number of edges holding i)
++			vertices[i].SetCorner() ; 
++			if(ord==2){ 
+ 				long  n1 = head_v[i];
+ 				long  n2 = next_p[n1];
+ 				long  i1 = n1/2, i2 = n2/2; // edge number
+-				long  j1 = n1%2, j2 = n2%2; // vertex in the edge 
+-				float angle1=  j1 ? OppositeAngle(eangle[i1]) : eangle[i1];
+-				float angle2= !j2 ? OppositeAngle(eangle[i2]) : eangle[i2];
+-				float da12 = Abs(angle2-angle1);
+-				if (( da12 >= MaxCornerAngle ) && (da12 <= 2*Pi -MaxCornerAngle)) {
+-					vertices[i].SetCorner() ; 
+-				}
+-				// if the edge type/referencenumber a changing then is SetRequired();
++				long  j1 = n1%2, j2 = n2%2; // vertex in the edge
++				/* if the edge type/referencenumber a changing then is SetRequired();*/
+ 				if (edges[i1].type != edges[i2].type || edges[i1].Required()){
+ 					vertices[i].SetRequired();
+ 				}
+@@ -633,9 +620,6 @@
+ 					vertices[i].SetRequired();
+ 				}
+ 			}
+-			if(ord != 2) {
+-				vertices[i].SetCorner();
+-			}
+ 
+ 			/*close the list around the vertex to have a circular loop*/
+ 			long no=-1, ne = head_v[i];
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21863)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21864)
+@@ -39,6 +39,7 @@
+ 			R2                            pmin,pmax;             // extrema
+ 			double                        coefIcoor;             // coef to integer
+ 			ListofIntersectionTriangles   lIntTria;
++			int                           randomseed;            //used for random number generation
+ 
+ 			long                          NbVerticesOnGeomVertex;
+ 			VertexOnGeom                 *VerticesOnGeomVertex;
+@@ -76,7 +77,7 @@
+ 			I2 R2ToI2(const R2 & P) const;
+ 			R2 I2ToR2(const I2 & P) const;
+ 			void AddVertex(BamgVertex & s,Triangle * t,long long *  =0) ;
+-			void Insert(bool random);
++			void Insert();
+ 			void Echo(void);
+ 			void ForceBoundary();
+ 			void FindSubDomain(int OutSide=0);
+@@ -90,7 +91,7 @@
+ 			void MakeBamgQuadtree();
+ 			void MaxSubDivision(double maxsubdiv);
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+-			long InsertNewPoints(long nbvold,long & NbTSwap,bool random); 
++			long InsertNewPoints(long nbvold,long & NbTSwap); 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+ 			void SmoothingVertex(int =3,double=0.3);
+ 			Metric MetricAt (const R2 &) const;
+@@ -112,8 +113,8 @@
+ 			void AddMetric(BamgOpts* bamgopts);
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
+-			void AddGeometryMetric(BamgOpts* bamgopts);
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
++			int  RandomNumber(int max);
+ 			void ReconstructExistingMesh();
+ 
+ 			//Inline methods
+@@ -142,6 +143,10 @@
+ 			void TriangulateFromGeom0(BamgOpts* bamgopts);// the real constructor mesh generator
+ 			void Triangulate(double* x,double* y,int nods);
+ 			void Init(long);
++			int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
++			int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
++						AdjacentTriangle & tt1,long long & dets1,
++						long long & detsa,long long & detsb, int & nbswap);
+ 	};
+ 
+ 	/*Intermediary*/
+@@ -149,10 +154,7 @@
+ 	void  swap(Triangle *t1,short a1,
+ 				Triangle *t2,short a2,
+ 				BamgVertex *s1,BamgVertex *s2,long long det1,long long det2);
+-	int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
+-				AdjacentTriangle & tt1,long long & dets1,
+-				long long & detsa,long long & detsb, int & nbswap);
+-	int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
++
+ 	inline AdjacentTriangle Previous(const AdjacentTriangle & ta){
+ 		return AdjacentTriangle(ta.t,PreviousEdge[ta.a]);
+ 	}
+Index: ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21863)
++++ ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 21864)
+@@ -148,9 +148,6 @@
+ 			}
+ 		}
+ 
+-		//Add geometry metric if provided
+-		if(bamgopts->geometricalmetric) BTh.AddGeometryMetric(bamgopts);
+-
+ 		//Smoothe metric
+ 		BTh.SmoothMetric(bamgopts->gradation);
+ 
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 21863)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 21864)
+@@ -536,7 +536,6 @@
+ 	FetchData(&bamgopts->errg,mxGetField(dataref,0,"errg"));
+ 	FetchData(&bamgopts->gradation,mxGetField(dataref,0,"gradation"));
+ 	FetchData(&bamgopts->Hessiantype,mxGetField(dataref,0,"Hessiantype"));
+-	FetchData(&bamgopts->MaxCornerAngle,mxGetField(dataref,0,"MaxCornerAngle"));
+ 	FetchData(&bamgopts->maxnbv,mxGetField(dataref,0,"maxnbv"));
+ 	FetchData(&bamgopts->maxsubdiv,mxGetField(dataref,0,"maxsubdiv"));
+ 	FetchData(&bamgopts->Metrictype,mxGetField(dataref,0,"Metrictype"));
+@@ -544,11 +543,9 @@
+ 	FetchData(&bamgopts->nbsmooth,mxGetField(dataref,0,"nbsmooth"));
+ 	FetchData(&bamgopts->omega,mxGetField(dataref,0,"omega"));
+ 	FetchData(&bamgopts->power,mxGetField(dataref,0,"power"));
+-	FetchData(&bamgopts->random,mxGetField(dataref,0,"random"));
+ 	FetchData(&bamgopts->verbose,mxGetField(dataref,0,"verbose"));
+ 
+ 	FetchData(&bamgopts->Crack,mxGetField(dataref,0,"Crack"));
+-	FetchData(&bamgopts->geometricalmetric,mxGetField(dataref,0,"geometricalmetric"));
+ 	FetchData(&bamgopts->KeepVertices,mxGetField(dataref,0,"KeepVertices"));
+ 	FetchData(&bamgopts->splitcorners,mxGetField(dataref,0,"splitcorners"));
+ 
+Index: ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 21863)
++++ ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 21864)
+@@ -691,7 +691,6 @@
+ 	FetchData(&bamgopts->errg,PyDict_GetItemString(py_dict,"errg"));
+ 	FetchData(&bamgopts->gradation,PyDict_GetItemString(py_dict,"gradation"));
+ 	FetchData(&bamgopts->Hessiantype,PyDict_GetItemString(py_dict,"Hessiantype"));
+-	FetchData(&bamgopts->MaxCornerAngle,PyDict_GetItemString(py_dict,"MaxCornerAngle"));
+ 	FetchData(&bamgopts->maxnbv,PyDict_GetItemString(py_dict,"maxnbv"));
+ 	FetchData(&bamgopts->maxsubdiv,PyDict_GetItemString(py_dict,"maxsubdiv"));
+ 	FetchData(&bamgopts->Metrictype,PyDict_GetItemString(py_dict,"Metrictype"));
+@@ -699,11 +698,9 @@
+ 	FetchData(&bamgopts->nbsmooth,PyDict_GetItemString(py_dict,"nbsmooth"));
+ 	FetchData(&bamgopts->omega,PyDict_GetItemString(py_dict,"omega"));
+ 	FetchData(&bamgopts->power,PyDict_GetItemString(py_dict,"power"));
+-	FetchData(&bamgopts->random,PyDict_GetItemString(py_dict,"random"));
+ 	FetchData(&bamgopts->verbose,PyDict_GetItemString(py_dict,"verbose"));
+ 
+ 	FetchData(&bamgopts->Crack,PyDict_GetItemString(py_dict,"Crack"));
+-	FetchData(&bamgopts->geometricalmetric,PyDict_GetItemString(py_dict,"geometricalmetric"));
+ 	FetchData(&bamgopts->KeepVertices,PyDict_GetItemString(py_dict,"KeepVertices"));
+ 	FetchData(&bamgopts->splitcorners,PyDict_GetItemString(py_dict,"splitcorners"));
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21864-21865.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21864-21865.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21864-21865.diff	(revision 22755)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21865)
+@@ -94,7 +94,7 @@
+ 			long InsertNewPoints(long nbvold,long & NbTSwap); 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+ 			void SmoothingVertex(int =3,double=0.3);
+-			Metric MetricAt (const R2 &) const;
++			Metric MetricAt (const R2 &);
+ 			GeomEdge* ProjectOnCurve( Edge & AB, BamgVertex &  A, BamgVertex & B,double theta, BamgVertex & R,VertexOnEdge & BR,VertexOnGeom & GR);
+ 			long GetId(const Triangle & t) const;
+ 			long GetId(const Triangle * t) const;
+@@ -103,7 +103,7 @@
+ 			long GetId(const Edge & t) const;
+ 			long GetId(const Edge * t) const;
+ 			BamgVertex* NearestVertex(int i,int j) ;
+-			Triangle* TriangleFindFromCoord(const I2 & ,long long [3],Triangle *tstart=0) const;
++			Triangle* TriangleFindFromCoord(const I2 & ,long long [3],Triangle *tstart=0);
+ 			void ReadMesh(int* index,double* x,double* y,int nods,int nels);
+ 			void ReadMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts);
+ 			void WriteMesh(BamgMesh* bamgmesh,BamgOpts* bamgopts);
+Index: ../trunk-jpl/src/c/bamg/BamgVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21865)
+@@ -121,7 +121,7 @@
+ 		return ret;
+ 	}
+ 	/*}}}*/
+-	double  BamgVertex::Smoothing(Mesh &Th,const Mesh &BTh,Triangle* &tstart ,double omega){/*{{{*/
++	double  BamgVertex::Smoothing(Mesh &Th,Mesh &BTh,Triangle* &tstart ,double omega){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Smoothing)*/
+ 
+ 		BamgVertex* s=this;
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21865)
+@@ -2949,7 +2949,7 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	Metric Mesh::MetricAt(const R2 & A) const { /*{{{*/
++	Metric Mesh::MetricAt(const R2 & A){ /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/MetricAt)*/
+ 
+ 		I2 a = R2ToI2(A);
+@@ -3870,7 +3870,7 @@
+ 		return  R2( (double) P.x/coefIcoor+pmin.x, (double) P.y/coefIcoor+pmin.y);
+ 	}
+ 	/*}}}*/
+-	Triangle * Mesh::TriangleFindFromCoord(const I2 & B,long long det3[3], Triangle *tstart) const {/*{{{*/
++	Triangle * Mesh::TriangleFindFromCoord(const I2 & B,long long det3[3], Triangle *tstart){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindTriangleContening)*/
+ 
+ 		Triangle * t=0;	
+@@ -3945,7 +3945,7 @@
+ 			// 2 => two way go in way 1 or 2 randomly
+ 
+ 			if (k==0) break;
+-			if (k==2 && BinaryRand()) Exchange(ii[0],ii[1]);
++			if (k==2 && this->RandomNumber(1)) Exchange(ii[0],ii[1]);
+ 			_assert_(k<3);
+ 			AdjacentTriangle t1 = t->Adj(jj=ii[0]);
+ 			if ((t1.det() < 0 ) && (k == 2))
+@@ -4794,7 +4794,7 @@
+ 			if ((dets1 <=0 && dets2 <=0) || (dets2 >=0 && detsb >=0))
+ 			 ToSwap =1; 
+ 			else // swap alleatoire 
+-			 if (BinaryRand()) 
++			 if (this->RandomNumber(1)) 
+ 			  ToSwap =2; 
+ 		  }
+ 		if (ToSwap) NbSwap++,
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h	(revision 21865)
+@@ -62,7 +62,7 @@
+ 			void   Init();
+ 			int    NewItem(Triangle *tt,double d0,double d1,double d2);
+ 			int    NewItem(R2 ,const Metric &);
+-			void   SplitEdge(const Mesh &,const R2 &,const R2 &,int nbegin=0);
++			void   SplitEdge(Mesh &,const R2 &,const R2 &,int nbegin=0);
+ 			double Length();
+ 			long   NewPoints(BamgVertex *,long &nbv,long maxnbv);
+ 			void   ReShape();
+Index: ../trunk-jpl/src/c/bamg/BamgVertex.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgVertex.h	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/BamgVertex.h	(revision 21865)
+@@ -41,7 +41,7 @@
+ 
+ 			/*methods (No constructor and no destructors...)*/
+ 			BamgVertex();
+-			double Smoothing(Mesh & ,const Mesh & ,Triangle  * & ,double =1);
++			double Smoothing(Mesh & ,Mesh & ,Triangle  * & ,double =1);
+ 			void   MetricFromHessian(const double Hxx,const double Hyx, const double Hyy, const double smin,const double smax,const double s,const double err,BamgOpts* bamgopts);
+ 			void   Echo();
+ 			int    GetReferenceNumber() const;
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 21864)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 21865)
+@@ -187,7 +187,7 @@
+ 		lIntTria = nw; // copy pointer
+ 	}
+ 	/*}}}*/
+-	void ListofIntersectionTriangles::SplitEdge(const Mesh & Bh, const R2 &A,const R2  &B,int nbegin) {/*{{{*/
++	void ListofIntersectionTriangles::SplitEdge(Mesh & Bh, const R2 &A,const R2  &B,int nbegin) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ListofIntersectionTriangles)*/
+ 
+ 		Triangle *tbegin, *t;
+Index: ../trunk-jpl/src/c/shared/Bamg/BinaryRand.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/BinaryRand.h	(revision 21864)
++++ ../trunk-jpl/src/c/shared/Bamg/BinaryRand.h	(nonexistent)
+@@ -1,18 +0,0 @@
+-#ifndef _BINARYRAND_H_
+-#define _BINARYRAND_H_
+-
+-#include <cstdlib>
+-
+-/*Return 1 or 0 randomly*/
+-inline int BinaryRand(){
+-	#ifdef RAND_MAX
+-		/*RAND_MAX is defined by stdlib.h and is usually 32767*/
+-		const long HalfRandMax = RAND_MAX/2;
+-		return rand() < HalfRandMax;
+-	#else
+-		/*For sun machines, RAND_MAX is not defined, use 2^24*/
+-		return rand() & 16384;
+-	#endif
+-} 
+-
+-#endif
+Index: ../trunk-jpl/src/c/shared/Bamg/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/shared.h	(revision 21864)
++++ ../trunk-jpl/src/c/shared/Bamg/shared.h	(revision 21865)
+@@ -7,7 +7,6 @@
+ 
+ #include "Abs.h"
+ #include "BigPrimeNumber.h"
+-#include "BinaryRand.h"
+ #include "Exchange.h"
+ #include "extrema.h"
+ #include "HeapSort.h"
Index: /issm/oecreview/Archive/21724-22754/ISSM-21865-21866.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21865-21866.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21865-21866.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21865)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21866)
+@@ -9,6 +9,7 @@
+ 
+ #Server URI
+ SERVER='https://ross.ics.uci.edu:8080'
++SERVER='http://ross.ics.uci.edu:8080'
+ 
+ #Get configuration
+ #Source config file{{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-21866-21867.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21866-21867.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21866-21867.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21866)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 21867)
+@@ -167,22 +167,5 @@
+ 	inline void Adj(GeomEdge * & on,int &i){
+ 		int j=i;i=on->AdjVertexIndex[i];on=on->Adj[j];
+ 	}
+-	inline double qualite(const BamgVertex &va,const BamgVertex &vb,const BamgVertex &vc){
+-		double ret; 
+-		I2 ia=va,ib=vb,ic=vc;
+-		I2 ab=ib-ia,bc=ic-ib,ac=ic-ia;
+-		long long deta=Det(ab,ac);
+-		if (deta <=0) ret = -1;
+-		else {
+-			double a = sqrt((double) (ac,ac)),
+-					 b = sqrt((double) (bc,bc)),
+-					 c = sqrt((double) (ab,ab)),
+-					 p = a+b+c;
+-			double h= Max(Max(a,b),c),ro=deta/p;
+-			ret = ro/h;
+-		}
+-		return ret;
+-	}
+-
+ }
+ #endif
+Index: ../trunk-jpl/src/c/bamg/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.h	(revision 21866)
++++ ../trunk-jpl/src/c/bamg/Triangle.h	(revision 21867)
+@@ -59,7 +59,6 @@
+ 			void              SetUnMarkUnSwap(int a);
+ 
+ 			//Inline methods
+-			double qualite() ;
+ 			void  Set(const Triangle &,const Mesh &,Mesh &);
+ 			int   In(BamgVertex *v) const { return vertices[0]==v || vertices[1]==v || vertices[2]==v ;}
+ 			BamgVertex* GetVertex(int i){return vertices[i];}; // FIXME: this is used to avoid BamgVertex * operator()
Index: /issm/oecreview/Archive/21724-22754/ISSM-21868-21869.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21868-21869.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21868-21869.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21868)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21869)
+@@ -9,7 +9,7 @@
+ 
+ #Server URI
+ SERVER='https://ross.ics.uci.edu:8080'
+-SERVER='http://ross.ics.uci.edu:8080'
++#SERVER='http://ross.ics.uci.edu:8080'
+ 
+ #Get configuration
+ #Source config file{{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-21869-21870.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21869-21870.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21869-21870.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/Archives/Archive703.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive701.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive119.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive702.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive514.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21870-21871.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21870-21871.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21870-21871.diff	(revision 22755)
@@ -0,0 +1,93 @@
+Index: ../trunk-jpl/jenkins/linux64_caladan
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_caladan	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_caladan	(revision 21871)
+@@ -63,5 +63,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 119 514 701 702 435"
+-MATLAB_NROPTIONS="'exclude',[119,514,701,702,435]"
++PYTHON_NROPTIONS="--exclude 701 702 435"
++MATLAB_NROPTIONS="'exclude',[701,702,435]"
+Index: ../trunk-jpl/jenkins/macosx_pine-island
+===================================================================
+--- ../trunk-jpl/jenkins/macosx_pine-island	(revision 21870)
++++ ../trunk-jpl/jenkins/macosx_pine-island	(revision 21871)
+@@ -53,6 +53,6 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-##                           bamg mesh   FS                     
++##                           FS                     
+ PYTHON_NROPTIONS=""
+-MATLAB_NROPTIONS="'exclude',[119,514,701,702,703,435,IdFromString('Dakota')]"
++MATLAB_NROPTIONS="'exclude',[701,702,703,435,IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_test
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_test	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_ross_test	(revision 21871)
+@@ -63,5 +63,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 119 243 514 701 702 435"
+-MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,435]"
++PYTHON_NROPTIONS="--exclude 243 701 702 435"
++MATLAB_NROPTIONS="'exclude',[243,701,702,435]"
+Index: ../trunk-jpl/jenkins/linux64_ross
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_ross	(revision 21871)
+@@ -66,6 +66,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 119 243 514 701 702 435"
++PYTHON_NROPTIONS="--exclude 243 701 702 435"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
+-#MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,435,IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_python
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_python	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_ross_python	(revision 21871)
+@@ -57,5 +57,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 119 243 514 701 702 435"
++PYTHON_NROPTIONS="--exclude 243 701 702 435"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_static
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_static	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_ross_static	(revision 21871)
+@@ -57,6 +57,6 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-##                           bamg mesh   FS                     
++##                           FS                     
+ #PYTHON_NROPTIONS=""
+-#MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,703,435,IdFromString('Dakota')]"
++#MATLAB_NROPTIONS="'exclude',[243,701,702,703,435,IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 21870)
++++ ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 21871)
+@@ -62,4 +62,4 @@
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+ PYTHON_NROPTIONS=""
+-MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,435]"
++MATLAB_NROPTIONS="'exclude',[243,701,702,435]"
+Index: ../trunk-jpl/jenkins/macosx_pine-island_dakota_static
+===================================================================
+--- ../trunk-jpl/jenkins/macosx_pine-island_dakota_static	(revision 21870)
++++ ../trunk-jpl/jenkins/macosx_pine-island_dakota_static	(revision 21871)
+@@ -63,4 +63,4 @@
+ #ex: "'id',[101 102 103]"
+ ##                           bamg mesh   FS                     
+ #PYTHON_NROPTIONS=""
+-#MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,703,435,IdFromString('Dakota')]"
++#MATLAB_NROPTIONS="'exclude',[243,701,702,703,435,IdFromString('Dakota')]"
Index: /issm/oecreview/Archive/21724-22754/ISSM-21871-21872.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21871-21872.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21871-21872.diff	(revision 22755)
@@ -0,0 +1,598 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21872)
+@@ -83,7 +83,6 @@
+ 		int         GetNumberOfNodes(int enum_type);
+ 		int         GetNumberOfVertices(void);
+ 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
+-		Element*    GetUpperElement(void){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21872)
+@@ -1126,33 +1126,6 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-Penta*     Penta::GetSurfacePenta(void){/*{{{*/
+-
+-	/*Output*/
+-	Penta* penta=NULL;
+-
+-	/*Go through all pentas till the surface is reached*/
+-	penta=this;
+-	for(;;){
+-		/*Stop if we have reached the surface, else, take upper penta*/
+-		if (penta->IsOnSurface()) break;
+-
+-		/* get upper Penta*/
+-		penta=penta->GetUpperPenta();
+-		_assert_(penta->Id()!=this->id);
+-	}
+-
+-	/*return output*/
+-	return penta;
+-}
+-/*}}}*/
+-Element*   Penta::GetUpperElement(void){/*{{{*/
+-
+-	/*Output*/
+-	Element* upper_element=this->GetUpperPenta();
+-	return upper_element;
+-}
+-/*}}}*/
+ Penta*     Penta::GetUpperPenta(void){/*{{{*/
+ 
+ 	Penta* upper_penta=NULL;
+@@ -1319,103 +1292,70 @@
+ 	xDelete<int>(control_type);
+ }
+ /*}}}*/
+-void       Penta::InputDepthAverageAtBase(int enum_type,int average_enum_type){/*{{{*/
++void       Penta::InputDepthAverageAtBase(int original_enum,int average_enum){/*{{{*/
+ 
+-	int  step,i;
++	IssmDouble  Jdet,value;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	IssmDouble  Helem_list[NUMVERTICES];
+-	IssmDouble  zeros_list[NUMVERTICES]={0.0};
+-	IssmDouble  p0top1_list[NUMVERTICES];
+-	Penta* penta=NULL;
+-	Input* original_input=NULL;
+-	Input* element_integrated_input=NULL;
+-	Input* total_integrated_input=NULL;
+-	Input* element_thickness_input=NULL;
+-	Input* total_thickness_input=NULL;
+-	Input* depth_averaged_input=NULL;
++	IssmDouble  xyz_list_line[2][3];
++	IssmDouble  total[NUMVERTICES]       = {0.};
++	IssmDouble  intz[NUMVERTICES]        = {0.};
++	Input      *original_input           = NULL;
++	Input      *depth_averaged_input     = NULL;
+ 
+-	/*recover parameters: */
+-
+ 	/*Are we on the base? If not, return*/
+ 	if(!IsOnBase()) return;
+ 
+-	/*OK, we are on bed. Initialize global inputs as 0*/
+-	total_thickness_input =new PentaInput(ThicknessEnum,zeros_list,P1Enum);
+-
+ 	/*Now follow all the upper element from the base to the surface to integrate the input*/
+-	penta=this;
+-	step =0;
++	Penta* penta = this;
++	int    step  = 0;
+ 	for(;;){
+ 
+-		/*Step1: Get original input (to be depth avegaged): */
+-		original_input=(Input*)penta->inputs->GetInput(enum_type);
+-		if(!original_input) _error_("could not find input with enum " << EnumToStringx(enum_type));
++		/*Step1: Get original input (to be depth-avegaged): */
++		original_input=(Input*)penta->inputs->GetInput(original_enum);
++		if(!original_input) _error_("could not find input with enum " << EnumToStringx(original_enum));
+ 
+-		/*If first time, initialize total_integrated_input*/
+-		if (step==0){
+-			if (original_input->ObjectEnum()==PentaInputEnum)
+-			 total_integrated_input=new PentaInput(average_enum_type,zeros_list,P1Enum);
+-			else if (original_input->ObjectEnum()==ControlInputEnum)
+-			 total_integrated_input=new PentaInput(average_enum_type,zeros_list,P1Enum);
+-			else if (original_input->ObjectEnum()==DoubleInputEnum)
+-			 total_integrated_input=new DoubleInput(average_enum_type,0.0);
+-			else{
+-			 _error_("object " << EnumToStringx(original_input->ObjectEnum()) << " not supported yet");
+-			}
+-		}
+-
+ 		/*Step2: Create element thickness input*/
+ 		::GetVerticesCoordinates(&xyz_list[0][0],penta->vertices,NUMVERTICES);
+-		for(i=0;i<3;i++){
+-			Helem_list[i]=xyz_list[i+3][2]-xyz_list[i][2];
+-			Helem_list[i+3]=Helem_list[i];
+-		}
+-		element_thickness_input=new PentaInput(ThicknessEnum,Helem_list,P1Enum);
+-
+-		/*Step3: Vertically integrate A COPY of the original*/
+-		if(original_input->ObjectEnum()==PentaInputEnum){
+-			if(((PentaInput*)original_input)->interpolation_type==P0Enum){
+-				original_input->GetInputValue(&p0top1_list[i]);
+-				element_integrated_input= new  PentaInput(original_input->InstanceEnum(),p0top1_list,P1Enum);
+-				element_integrated_input->VerticallyIntegrate(element_thickness_input);
++		for(int iv=0;iv<3;iv++){
++			/*Get segment length*/
++			for(int i=0;i<3;i++){
++				xyz_list_line[0][i]=xyz_list[iv][i];
++				xyz_list_line[1][i]=xyz_list[iv+3][i];
+ 			}
+-			else{
+-				element_integrated_input= (Input*)original_input->copy();
+-				element_integrated_input->VerticallyIntegrate(element_thickness_input);
++			/*Integrate over edge*/
++			Gauss* gauss=penta->NewGaussLine(iv,iv+3,3);
++			for(int ig=gauss->begin();ig<gauss->end();ig++){
++				gauss->GaussPoint(ig);
++				penta->JacobianDeterminantLine(&Jdet,&xyz_list_line[0][0],gauss);
++				original_input->GetInputValue(&value,gauss);
++				total[iv] += value*Jdet*gauss->weight;
++				intz[iv]  += Jdet*gauss->weight;
+ 			}
++			delete gauss;
+ 		}
+-		else{
+-			element_integrated_input= (Input*)original_input->copy();
+-			element_integrated_input->VerticallyIntegrate(element_thickness_input);
+-		}
+ 
+-		/*Add contributions to global inputs*/
+-		total_integrated_input->AXPY(element_integrated_input,1.0);
+-		total_thickness_input ->AXPY(element_thickness_input,1.0);
+-
+-		/*Clean up*/
+-		delete element_thickness_input;
+-		delete element_integrated_input;
+-
+ 		/*Stop if we have reached the surface, else, take upper penta*/
+-		if (penta->IsOnSurface()) break;
++		if(penta->IsOnSurface()) break;
+ 
+ 		/* get upper Penta*/
+-		penta=penta->GetUpperPenta();
+-		_assert_(penta->Id()!=this->id);
+-
+-		/*increase couter*/
++		penta=penta->GetUpperPenta(); _assert_(penta->Id()!=this->id);
+ 		step++;
+ 	}
+ 
+-	/*OK, now we only need to divide the depth integrated input by the total thickness!*/
+-	depth_averaged_input=total_integrated_input->PointwiseDivide(total_thickness_input);
+-	depth_averaged_input->ChangeEnum(average_enum_type);
++	/*Now we only need to divide the depth integrated input by the total thickness!*/
++	for(int iv=0;iv<3;iv++){
++		total[iv  ] = total[iv]/intz[iv];
++		total[iv+3] = total[iv];
++	}
++	switch(original_input->ObjectEnum()){
++		case PentaInputEnum:
++		case ControlInputEnum:
++			depth_averaged_input=new PentaInput(average_enum,&total[0],P1Enum); 
++			break;
++		default:
++			_error_("Interpolation " << EnumToStringx(original_input->ObjectEnum()) << " not supported yet");
++	}
+ 
+-	/*Clean up*/
+-	delete total_thickness_input;
+-	delete total_integrated_input;
+-
+ 	/*Finally, add to inputs*/
+ 	this->inputs->AddInput((Input*)depth_averaged_input);
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21872)
+@@ -84,8 +84,6 @@
+ 		int            GetNumberOfVertices(void);
+ 		Penta*         GetLowerPenta(void);
+ 		void           GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
+-		Penta*         GetSurfacePenta(void);
+-		Element*       GetUpperElement(void);
+ 		Penta*         GetUpperPenta(void);
+ 		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21872)
+@@ -72,7 +72,6 @@
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
+ 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
+-		Element*    GetUpperElement(void){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinates(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21872)
+@@ -78,7 +78,6 @@
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
+ 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
+-		Element*    GetUpperElement(void){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21872)
+@@ -215,7 +215,6 @@
+ 		virtual int        GetNumberOfNodes(int enum_type)=0;
+ 		virtual int        GetNumberOfVertices(void)=0;
+ 		virtual void       GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum)=0;
+-		virtual Element*   GetUpperElement(void)=0;
+ 		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
+ 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
+ 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21872)
+@@ -70,8 +70,6 @@
+ 		IssmDouble MinAbs(void){_error_("not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21872)
+@@ -71,8 +71,6 @@
+ 		IssmDouble MinAbs(void);
+ 		void Scale(IssmDouble scale_factor);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input);
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 21872)
+@@ -417,17 +417,3 @@
+ 	for(int i=0;i<numnodes;i++)values[i]=setvalue;
+ }
+ /*}}}*/
+-void TetraInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	int        numnodes=this->NumberofNodes(this->interpolation_type);
+-	IssmDouble squaremin;
+-
+-	/*Now, figure out minimum of valuescopy: */
+-	squaremin=pow(this->values[0],2);
+-	for(int i=1;i<numnodes;i++){
+-		if(pow(this->values[i],2)<squaremin)squaremin=pow(this->values[i],2);
+-	}
+-	/*Assign output pointers:*/
+-	*psquaremin=squaremin;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21872)
+@@ -281,6 +281,3 @@
+ 	this->values=xDynamicCast<Input*>(this->savedvalues->copy());
+ 	this->values->AXPY(gradient,scalar);
+ }/*}}}*/
+-void ControlInput::VerticallyIntegrate(Input* thickness_input){/*{{{*/
+-	values->VerticallyIntegrate(thickness_input);
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21872)
+@@ -73,8 +73,6 @@
+ 		IssmDouble MinAbs(void){_error_("not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 
+ };
+ #endif  /* _SEGINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21872)
+@@ -52,8 +52,6 @@
+ 		virtual IssmDouble MinAbs(void)=0;
+ 		virtual void   Scale(IssmDouble scale_factor)=0;
+ 		virtual void   Set(IssmDouble setvalue)=0;
+-		virtual void   SquareMin(IssmDouble* psquaremin,Parameters* parameters)=0;
+-		virtual void   VerticallyIntegrate(Input* thickness_input)=0;
+ 
+ 		virtual int  GetResultArraySize(void)=0;
+ 		virtual int  GetResultInterpolation(void)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/TetraInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21872)
+@@ -73,8 +73,6 @@
+ 		IssmDouble MinAbs(void);
+ 		void Scale(IssmDouble scale_factor);
+ 		void Set(IssmDouble setvalue);
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 
+ };
+ #endif  /* _TETRAINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21872)
+@@ -84,9 +84,7 @@
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void SetGradient(Input* gradient_in);
+ 		void SetInput(Input* in_input);
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void UpdateValue(IssmDouble scalar);
+-		void VerticallyIntegrate(Input* thickness_input);
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 21872)
+@@ -160,9 +160,3 @@
+ 	value=reCast<int>(dvalue);
+ }
+ /*}}}*/
+-void IntInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	/*square min of an integer is the square of the integer itself: */
+-	*psquaremin=pow((IssmDouble)value,2);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21872)
+@@ -79,9 +79,7 @@
+ 		void ScaleGradient(IssmDouble scale){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void SetGradient(Input* gradient_in){_error_("not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void UpdateValue(IssmDouble scalar){_error_("not implemented yet");};
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 21872)
+@@ -156,8 +156,3 @@
+ 	/*a bool cannot be scaled: */
+ }
+ /*}}}*/
+-void BoolInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-	/*square of a bool is the bool itself: */
+-	*psquaremin=value;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21872)
+@@ -72,8 +72,6 @@
+ 		IssmDouble MinAbs(void){_error_("Min not implemented for integers");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 21872)
+@@ -450,17 +450,3 @@
+ 	for(int i=0;i<numnodes;i++)values[i]=setvalue;
+ }
+ /*}}}*/
+-void TriaInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	int        numnodes=this->NumberofNodes(this->interpolation_type);
+-	IssmDouble squaremin;
+-
+-	/*Now, figure out minimum of valuescopy: */
+-	squaremin=pow(this->values[0],2);
+-	for(int i=1;i<numnodes;i++){
+-		if(pow(this->values[i],2)<squaremin)squaremin=pow(this->values[i],2);
+-	}
+-	/*Assign output pointers:*/
+-	*psquaremin=squaremin;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21872)
+@@ -68,8 +68,6 @@
+ 		IssmDouble MinAbs(void){_error_("Min not implemented for booleans");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin, Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21872)
+@@ -73,8 +73,6 @@
+ 		IssmDouble MinAbs(void);
+ 		void Scale(IssmDouble scale_factor);
+ 		void Set(IssmDouble setvalue);
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 
+ };
+ #endif  /* _TRIAINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21872)
+@@ -406,49 +406,3 @@
+ 	for(int i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
+ }
+ /*}}}*/
+-void PentaInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	int        numnodes=this->NumberofNodes(this->interpolation_type);
+-	IssmDouble squaremin;
+-
+-	/*Now, figure out minimum of valuescopy: */
+-	squaremin=pow(this->values[0],2);
+-	for(int i=1;i<numnodes;i++){
+-		if(pow(this->values[i],2)<squaremin)squaremin=pow(this->values[i],2);
+-	}
+-	/*Assign output pointers:*/
+-	*psquaremin=squaremin;
+-}
+-/*}}}*/
+-void PentaInput::VerticallyIntegrate(Input* thickness_input){/*{{{*/
+-
+-	IssmDouble thickness;
+-	IssmDouble value=0.;
+-
+-	/*Check that input provided is a thickness*/
+-	if (thickness_input->InstanceEnum()!=ThicknessEnum) _error_("Input provided is not a Thickness (enum_type is " << EnumToStringx(thickness_input->InstanceEnum()) << ")");
+-
+-	/*vertically integrate depending on type (and use P1 interpolation from now on)*/
+-	switch(this->interpolation_type){
+-		case P1Enum:
+-		case P1bubbleEnum:
+-		case P1xP2Enum:
+-		case P1xP3Enum:
+-		case P2Enum:
+-			  {
+-				this->interpolation_type=P1Enum;
+-				GaussPenta *gauss=new GaussPenta();
+-				for(int iv=0;iv<3;iv++){
+-					gauss->GaussVertex(iv);
+-					thickness_input->GetInputValue(&thickness,gauss);
+-					this->values[iv]=0.5*(this->values[iv]+this->values[iv+3]) * thickness;
+-					this->values[iv+3]=this->values[iv];
+-				}
+-				delete gauss;
+-				return; 
+-			  }
+-		default:
+-			_error_("not supported yet for type "<<EnumToStringx(this->interpolation_type));
+-	}
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21872)
+@@ -534,20 +534,3 @@
+ 	return minabs;
+ }
+ /*}}}*/
+-void TransientInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	IssmDouble time;
+-
+-	/*First, recover current time from parameters: */
+-	parameters->FindParam(&time,TimeEnum);
+-
+-   /*Retrieve interpolated values for this time step: */
+-	Input* input=GetTimeInput(time);
+-
+-	/*Call input function*/
+-	input->SquareMin(psquaremin,parameters);
+-
+-	delete input;
+-
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 21872)
+@@ -244,30 +244,3 @@
+ 	value=value*scale_factor;
+ }
+ /*}}}*/
+-void DoubleInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){/*{{{*/
+-
+-	/*square min of a IssmDouble is the square of the IssmDouble itself: */
+-	*psquaremin=pow(value,2);
+-}
+-/*}}}*/
+-void DoubleInput::VerticallyIntegrate(Input* thickness_input){/*{{{*/
+-
+-	/*Intermediaries*/
+-	IssmDouble thickness_value;
+-
+-	/*Check that input provided is a thickness*/
+-	if (thickness_input->InstanceEnum()!=ThicknessEnum) _error_("Input provided is not a Thickness (enum_type is " << EnumToStringx(thickness_input->InstanceEnum()) << ")");
+-
+-	/*vertically integrate depending on type:*/
+-	switch(thickness_input->ObjectEnum()){
+-
+-		case PentaInputEnum:
+-			thickness_input->GetInputAverage(&thickness_value);
+-			this->value=this->value*thickness_value;
+-			return;
+-
+-		default:
+-			_error_("not implemented yet");
+-	}
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21872)
+@@ -72,8 +72,6 @@
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		Input* SpawnTriaInput(int index1,int index2,int index3);
+ 		Input* SpawnSegInput(int index1,int index2);
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_input);
+ 
+ };
+ #endif  /* _PENTAINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21871)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21872)
+@@ -79,8 +79,6 @@
+ 		IssmDouble MinAbs(void);
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void VerticallyIntegrate(Input* thickness_forcing){_error_("not supported yet");};
+ 		/*}}}*/
+ 
+ };
Index: /issm/oecreview/Archive/21724-22754/ISSM-21872-21873.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21872-21873.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21872-21873.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21872)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21873)
+@@ -220,7 +220,7 @@
+ 			InputUpdateFromConstantx(elements,1.,FrictionQEnum);
+ 			break;
+ 		default:
+-			_error_("not supported");
++			_error_("friction law not supported");
+ 	}
+ 
+ 	/*Free data: */
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21872)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21873)
+@@ -196,8 +196,14 @@
+ 			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+ 			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+ 			break;
++		case 9:
++			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
++			InputUpdateFromConstantx(elements,1.,FrictionPEnum);
++			InputUpdateFromConstantx(elements,1.,FrictionQEnum);
++			break;
+ 		default:
+-			_error_("not supported");
++			_error_("friction law not supported");
+ 	}
+ }/*}}}*/
+ void ThermalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21873-21874.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21873-21874.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21873-21874.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21873)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21874)
+@@ -229,7 +229,7 @@
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21874-21875.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21874-21875.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21874-21875.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21874)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 21875)
+@@ -228,8 +228,16 @@
+ 	/*Deal with friction parameters*/
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+-	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==4 || frictionlaw==6){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++	}
++	if(frictionlaw==3 || frictionlaw==1){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	}
++	if(frictionlaw==9){
++		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
++		parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
++	}
+ 
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21875-21876.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21875-21876.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21875-21876.diff	(revision 22755)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21875)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21876)
+@@ -2679,6 +2679,7 @@
+ /*}}}*/
+ void       Tria::ResetHooks(){/*{{{*/
+ 
++	if(this->nodes) xDelete<Node*>(this->nodes);
+ 	this->nodes=NULL;
+ 	this->vertices=NULL;
+ 	this->material=NULL;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21875)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21876)
+@@ -171,7 +171,7 @@
+ 	this->inputs->AddInput(new PentaInput(input_enum,values,interpolation_enum));
+ }
+ /*}}}*/
+-void     Penta::BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){/*{{{*/
++void       Penta::BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){/*{{{*/
+ 
+ 	PentaRef::BasalNodeIndices(pnumindices,pindices,finiteelement);
+ 
+@@ -2212,6 +2212,7 @@
+ /*}}}*/
+ void       Penta::ResetHooks(){/*{{{*/
+ 
++	if(this->nodes) xDelete<Node*>(this->nodes);
+ 	this->nodes=NULL;
+ 	this->vertices=NULL;
+ 	this->material=NULL;
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 21875)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 21876)
+@@ -807,6 +807,7 @@
+ /*}}}*/
+ void     Tetra::ResetHooks(){/*{{{*/
+ 
++	if(this->nodes) xDelete<Node*>(this->nodes);
+ 	this->nodes=NULL;
+ 	this->vertices=NULL;
+ 	this->material=NULL;
+Index: ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 21875)
++++ ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 21876)
+@@ -48,7 +48,8 @@
+ 
+ 				FemModel* femmodel;
+ 				
+-				char     **responses_descriptors    = NULL;      //these are our! there are only numresponsedescriptors of them, not d_numresponses!!!
++				char     **responses_descriptors    = NULL;      //these are ours! there are only numresponsedescriptors of them, not d_numresponses!!!
++				char      *response_descriptor      = NULL;
+ 				int        numresponsedescriptors;
+ 				int        solution_type;
+ 				bool       control_analysis         = false;
+@@ -127,6 +128,11 @@
+ 					xDelete<char>(variable_descriptor);
+ 				}
+ 				xDelete<char*>(variable_descriptors);
++				for(i=0;i<numFns;i++){
++					response_descriptor=responses_descriptors[i];
++					xDelete<char>(response_descriptor);
++				}
++				if(responses_descriptors) xDelete<char*>(responses_descriptors);
+ 				xDelete<IssmDouble>(responses);
+ 				delete femmodel;
+ 
+Index: ../trunk-jpl/src/c/main/issm_dakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_dakota.cpp	(revision 21875)
++++ ../trunk-jpl/src/c/main/issm_dakota.cpp	(revision 21876)
+@@ -83,6 +83,10 @@
+ 	/* Execute the environment:*/
+ 	env.execute();
+ 
++	xDelete<char>(dakota_input_file);
++	xDelete<char>(dakota_output_file);
++	xDelete<char>(dakota_error_file);
++
+ 	/*Return unix success: */
+ 	return 0; 
+ 	#else 
+@@ -89,4 +93,5 @@
+ 	Cout <<  "ISSM Dakota  executable was compiled without support of Dakota! Will just return now!" << "\n";
+ 	return 1;
+ 	#endif
++
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-21876-21877.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21876-21877.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21876-21877.diff	(revision 22755)
@@ -0,0 +1,150 @@
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 21876)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 21877)
+@@ -1,18 +1,18 @@
+ %Test Name: SquareBamgMesh
+ 
+ %Simple mesh
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.,'rand',false);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+ %hVertices
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',[10000. 100000. 400000. 100000.]','rand',false);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',[10000. 100000. 400000. 100000.]');
+ x2=md.mesh.x;
+ y2=md.mesh.y;
+ 
+ %big mesh
+ t0=clock;
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.,'rand',false);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.);
+ nbelements=md.mesh.numberofelements;
+ if nbelements>267895-50 & nbelements<267895+50
+ 	nbewithinrange = 1.;
+Index: ../trunk-jpl/test/NightlyRun/test119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.py	(revision 21876)
++++ ../trunk-jpl/test/NightlyRun/test119.py	(revision 21877)
+@@ -7,18 +7,18 @@
+ 
+ 
+ #Simple mesh
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.,'rand',False)
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.)
+ x1=md.mesh.x
+ y1=md.mesh.y
+ 
+ #hVertices
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',np.array([10000.,100000.,400000.,100000.]).reshape(-1,1),'rand',False)
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',np.array([10000.,100000.,400000.,100000.]).reshape(-1,1))
+ x2=md.mesh.x
+ y2=md.mesh.y
+ 
+ #big mesh
+ t0=time.time()
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.,'rand',False)
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.)
+ nbelements=md.mesh.numberofelements
+ elapsedtime=time.time()-t0
+ if nbelements>267895-50 and nbelements<267895+50:
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 21876)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 21877)
+@@ -2,7 +2,7 @@
+ %Simple mesh 1
+ hVertices=10000.*ones(27,1);
+ hVertices(1:5)=1000.;
+-md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1);
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+@@ -17,12 +17,12 @@
+ hessian=ComputeHessian(md.mesh.elements,md.mesh.x,md.mesh.y,md.inversion.vy_obs,'node');
+ metric=ComputeMetric(hessian,2./9.,1.,1000.,25.*10.^3,[]);
+ md.miscellaneous.dummy=metric;
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.);
+ x3=md2.mesh.x;
+ y3=md2.mesh.y;
+ 
+ %refine existing mesh 2
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'anisomax',1.);
+ x4=md2.mesh.x;
+ y4=md2.mesh.y;
+ 
+@@ -29,17 +29,17 @@
+ %refine existing mesh 3
+ hVertices=NaN*ones(md.mesh.numberofvertices,1);
+ hVertices(find(md.mesh.vertexonboundary))=500;
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.,'hVertices',hVertices);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'anisomax',1.,'hVertices',hVertices);
+ x5=md2.mesh.x;
+ y5=md2.mesh.y;
+ 
+ %refine existing mesh 4
+-md2=bamg(md,'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',0,'err',1.);
++md2=bamg(md,'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'Hessiantype',0,'err',1.);
+ x6=md2.mesh.x;
+ y6=md2.mesh.y;
+ 
+ %refine existing mesh 5
+-md2=bamg(md,'field',[md.inversion.vy_obs md.geometry.thickness],'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',1,'err',[10. 100.]); 
++md2=bamg(md,'field',[md.inversion.vy_obs md.geometry.thickness],'hmin',1000.,'hmax',20000.,'gradation',3.,'Hessiantype',1,'err',[10. 100.]); 
+ x7=md2.mesh.x;
+ y7=md2.mesh.y;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test514.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.py	(revision 21876)
++++ ../trunk-jpl/test/NightlyRun/test514.py	(revision 21877)
+@@ -13,7 +13,7 @@
+ #Simple mesh 1
+ hVertices=10000.*np.ones((27))
+ hVertices[0:5]=1000.
+-md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1)
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.)
+ x1=md.mesh.x
+ y1=md.mesh.y
+ 
+@@ -28,12 +28,12 @@
+ hessian=ComputeHessian(md.mesh.elements,md.mesh.x,md.mesh.y,md.inversion.vy_obs,'node')
+ metric=ComputeMetric(hessian,2./9.,1.,1000.,25.*10.**3,[])
+ md.miscellaneous.dummy=metric
+-md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1)
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.)
+ x3=md2.mesh.x
+ y3=md2.mesh.y
+ 
+ #refine existing mesh 2
+-md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.)
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'anisomax',1.)
+ x4=md2.mesh.x
+ y4=md2.mesh.y
+ 
+@@ -40,17 +40,17 @@
+ #refine existing mesh 3
+ hVertices=np.nan*np.ones((md.mesh.numberofvertices))
+ hVertices[np.nonzero(md.mesh.vertexonboundary)]=500.
+-md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.,'hVertices',hVertices)
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'anisomax',1.,'hVertices',hVertices)
+ x5=md2.mesh.x
+ y5=md2.mesh.y
+ 
+ #refine existing mesh 4
+-md2=bamg(copy.deepcopy(md),'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',0,'err',np.array([[1.]]))
++md2=bamg(copy.deepcopy(md),'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'Hessiantype',0,'err',np.array([[1.]]))
+ x6=md2.mesh.x
+ y6=md2.mesh.y
+ 
+ #refine existing mesh 5
+-md2=bamg(copy.deepcopy(md),'field',np.hstack((md.inversion.vy_obs,md.geometry.thickness)),'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',1,'err',np.array([[10.,100.]])) 
++md2=bamg(copy.deepcopy(md),'field',np.hstack((md.inversion.vy_obs,md.geometry.thickness)),'hmin',1000.,'hmax',20000.,'gradation',3.,'Hessiantype',1,'err',np.array([[10.,100.]])) 
+ x7=md2.mesh.x
+ y7=md2.mesh.y
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21877-21878.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21877-21878.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21877-21878.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 21877)
++++ ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 21878)
+@@ -128,7 +128,7 @@
+ 					xDelete<char>(variable_descriptor);
+ 				}
+ 				xDelete<char*>(variable_descriptors);
+-				for(i=0;i<numFns;i++){
++				for(i=0;i<numresponsedescriptors;i++){
+ 					response_descriptor=responses_descriptors[i];
+ 					xDelete<char>(response_descriptor);
+ 				}
Index: /issm/oecreview/Archive/21724-22754/ISSM-21878-21879.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21878-21879.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21878-21879.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21878)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21879)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,2e-08,7e-09,2e-7,9e-04,7e-04,2e-09,1e-10,1e-13};
++	1e-10,2e-08,7e-09,2e-7,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21879-21880.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21879-21880.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21879-21880.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/test/NightlyRun/test343.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test343.m	(revision 21879)
++++ ../trunk-jpl/test/NightlyRun/test343.m	(revision 21880)
+@@ -20,8 +20,14 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1','Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2','Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1.5e-13,1e-13};
++field_names     ={...
++	'Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1',...
++	'Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2',...
++	'Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3'};
++field_tolerances={...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1.5e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21880-21881.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21880-21881.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21880-21881.diff	(revision 22755)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 21880)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 21881)
+@@ -995,30 +995,34 @@
+ /*FUNCTION mxGetAssignedField{{{*/
+ mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
+ 
+-	//output
+-	mxArray* mxfield=NULL;
++	/*Output*/
++	mxArray *mxfield = NULL;
+ 
+-	//input
+-	mxArray    *inputs[2];
+-	mxArray    *pindex      = NULL;
+-	const char *fnames[2];
+-	mwSize      ndim        = 2;
+-	mwSize      onebyone[2] = {1,1};
++	if(mxIsStruct(pmxa_array)){
++		mxfield = mxGetField(pmxa_array,number,field);
++	}
++	else{
++		/*This is an object, mxGetField returns NULL in old version of matlab (we do not have access to them)*/
+ 
+-	//We want to call the subsasgn method, and get the returned array.This ensures that if we are running 
+-	//large sized problems, the data is truly loaded from disk by the model subsasgn class method.
+-	inputs[0]=(mxArray*)pmxa_array; //this is the model
++		/*Intermediaries*/
++		mxArray    *inputs[2];
++		mwSize      ndim        = 2;
++		mwSize      onebyone[2] = {1,1};
+ 
+-	//create index structure used in the assignment (index.type='.' and index.subs='x' for field x for ex)
+-	fnames[0] = "type";
+-	fnames[1] = "subs";
+-	pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
+-	mxSetField( pindex, 0, "type",mxCreateString("."));
+-	mxSetField( pindex, 0, "subs",mxCreateString(field));
+-	inputs[1]=pindex;
++		/*create index structure used in the assignment (index.type='.' and index.subs='x' for field x*/
++		const char *fnames[2];
++		fnames[0] = "type"; fnames[1] = "subs";
++		mxArray* pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
++		mxSetField( pindex, 0, "type",mxCreateString("."));
++		mxSetField( pindex, 0, "subs",mxCreateString(field));
++		inputs[0]=(mxArray*)pmxa_array; //this is the model
++		inputs[1]=pindex;
+ 
+-	mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
++		mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
++	}
+ 
++	if(mxfield == NULL) _error_("Could not find field "<< field <<" in structure");
++
+ 	return mxfield;
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21881-21882.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21881-21882.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21881-21882.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21881)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21882)
+@@ -486,6 +486,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
++	element->FindParam(&migration_style,GroundinglineMigrationEnum);
+ 	element->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	Input* gmb_input           = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
+ 	Input* fmb_input           = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21882-21883.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21882-21883.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21882-21883.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 21882)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 21883)
+@@ -2171,6 +2171,8 @@
+ 		else{
+ 			alpha=(pow(q_exp-1,q_exp-1))/pow(q_exp,q_exp);
+ 		}
++
++		vmag  = sqrt(vx*vx + vy*vy);
+ 		Chi   = vmag/(pow(C_param,n)*pow(Neff,n)*As);
+ 		Gamma = (Chi/(1.+alpha*pow(Chi,q_exp)));
+ 		
Index: /issm/oecreview/Archive/21724-22754/ISSM-21883-21884.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21883-21884.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21883-21884.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 21883)
++++ ../trunk-jpl/jenkins/windows	(revision 21884)
+@@ -59,5 +59,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243]"
++MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-21884-21885.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21884-21885.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21884-21885.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/Archives/Archive442.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive805.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive441.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21885-21886.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21885-21886.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21885-21886.diff	(revision 22755)
@@ -0,0 +1,195 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21886)
+@@ -1192,6 +1192,38 @@
+ 	*phi=4.*epsilon_eff*epsilon_eff*viscosity;
+ }
+ /*}}}*/
++void       Element::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
++
++	int        *doflist = NULL;
++	IssmDouble  value;
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->GetNumberOfNodes();
++
++	/*Fetch dof list and allocate solution vector*/
++	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values = xNew<IssmDouble>(numnodes);
++
++	/*Get inputs*/
++	Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
++
++	/*Ok, we have the values, fill in the array: */
++	Gauss* gauss=this->NewGauss();
++	for(int i=0;i<numnodes;i++){
++		gauss->GaussNode(this->element_type,i);
++
++		enum_input->GetInputValue(&value,gauss);
++		values[i]=value;
++	}
++
++	solution->SetValues(numnodes,doflist,values,INS_VAL);
++
++	/*Free ressources:*/
++	xDelete<int>(doflist);
++	xDelete<IssmDouble>(values);
++	delete gauss;
++}
++/*}}}*/
+ /* void       Element::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){/\*{{{*\/ */
+ 
+ /* 	/\*Fetch number vertices for this element and allocate arrays*\/ */
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21886)
+@@ -100,6 +100,7 @@
+ 		void               GetNodesLidList(int* lidlist);
+ 		void               GetNodesSidList(int* sidlist);
+ 		void               GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
++		void               GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum);
+ 		void               GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type);
+ 		void	             GetVertexPidList(int* pidlist);
+ 		void               GetVerticesConnectivityList(int* connectivitylist);
+@@ -214,7 +215,6 @@
+ 		virtual int        GetNumberOfNodes(void)=0;
+ 		virtual int        GetNumberOfNodes(int enum_type)=0;
+ 		virtual int        GetNumberOfVertices(void)=0;
+-		virtual void       GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum)=0;
+ 		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
+ 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
+ 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21886)
+@@ -1438,38 +1438,6 @@
+ 	return NUMVERTICES;
+ }
+ /*}}}*/
+-void       Tria::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
+-
+-	int        *doflist = NULL;
+-	IssmDouble  value;
+-
+-	/*Fetch number of nodes for this finite element*/
+-	int numnodes = this->NumberofNodes(this->element_type);
+-
+-	/*Fetch dof list and allocate solution vector*/
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	IssmDouble* values = xNew<IssmDouble>(numnodes);
+-
+-	/*Get inputs*/
+-	Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
+-
+-	/*Ok, we have the values, fill in the array: */
+-	GaussTria* gauss=new GaussTria();
+-	for(int i=0;i<numnodes;i++){
+-		gauss->GaussNode(this->element_type,i);
+-
+-		enum_input->GetInputValue(&value,gauss);
+-		values[i]=value;
+-	}
+-
+-	solution->SetValues(numnodes,doflist,values,INS_VAL);
+-
+-	/*Free ressources:*/
+-	xDelete<int>(doflist);
+-	xDelete<IssmDouble>(values);
+-	delete gauss;
+-}
+-/*}}}*/
+ void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,bool onsid){/*{{{*/
+ 
+ 	int vertexidlist[NUMVERTICES];
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21886)
+@@ -82,7 +82,6 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type);
+ 		int         GetNumberOfVertices(void);
+-		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21886)
+@@ -1096,36 +1096,6 @@
+ 	return NUMVERTICES; 
+ }
+ /*}}}*/
+-void       Penta::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
+-
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+-	int          i;
+-	int*         doflist=NULL;
+-	IssmDouble   values[numdof];
+-	IssmDouble   enum_value;
+-	GaussPenta   *gauss=NULL;
+-
+-	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
+-
+-	gauss=new GaussPenta();
+-	for(i=0;i<NUMVERTICES;i++){
+-		/*Recover temperature*/
+-		gauss->GaussVertex(i);
+-		enum_input->GetInputValue(&enum_value,gauss);
+-		values[i]=enum_value;
+-	}
+-
+-	/*Add value to global vector*/
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<int>(doflist);
+-}
+-/*}}}*/
+ Penta*     Penta::GetUpperPenta(void){/*{{{*/
+ 
+ 	Penta* upper_penta=NULL;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21886)
+@@ -83,7 +83,6 @@
+ 		int            GetNumberOfNodes(int enum_type);
+ 		int            GetNumberOfVertices(void);
+ 		Penta*         GetLowerPenta(void);
+-		void           GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
+ 		Penta*         GetUpperPenta(void);
+ 		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21886)
+@@ -71,7 +71,6 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
+-		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinates(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21885)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21886)
+@@ -77,7 +77,6 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
+-		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21886-21887.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21886-21887.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21886-21887.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21886)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21887)
+@@ -53,8 +53,8 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,6e-09,5e-08,1e-09,1e-10,1e-13,...
+-	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-10,1e-13};
++	5e-09,5e-09,5e-09,5e-09,6e-09,9e-05,9e-05,5e-09,1e-13,...
++	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-10,4e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21887-21888.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21887-21888.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21887-21888.diff	(revision 22755)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21887)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21888)
+@@ -53,8 +53,8 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	5e-09,5e-09,5e-09,5e-09,6e-09,9e-05,9e-05,5e-09,1e-13,...
+-	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-10,4e-10};
++	5e-09,5e-09,5e-09,5e-09,9e-05,9e-05,9e-05,5e-09,1e-13,...
++	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-8,4e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 21887)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 21888)
+@@ -1,7 +1,10 @@
+ %Test Name: SquareBamgMesh
+ 
+ %Simple mesh
+-md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.);
++disp(' -======== STARTING===========');
++md=model();
++disp('ok');
++md=bamg(md,'domain','../Exp/Square.exp','hmax',100000.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+Index: ../trunk-jpl/test/Archives/Archive435.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21888-21889.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21888-21889.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21888-21889.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 21888)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 21889)
+@@ -194,7 +194,7 @@
+ 
+ 			/*Reinitialize flags to false*/
+ 			j=0;
+-			while(true){
++			while(j<localnumnodes){
+ 				if(flagsindices[j]>=0){
+ 					flags[flagsindices[j]] = false;
+ 					flagsindices[j]        = -1;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21889-21890.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21889-21890.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21889-21890.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21889)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21890)
+@@ -519,8 +519,15 @@
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 
+ 		if(migration_style==SubelementMigrationEnum){
+-			if (phi<0.00000001) mb=gmb;
+-			else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
++			if (phi>0.999999999) mb=gmb;
++			else{
++				mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
++				printf("mg %g \n",mb);
++				printf("phi %g \n",phi);
++				printf("fmb%g \n",fmb);
++				printf("gmb%g \n",gmb);
++				printf("\n");
++			}
+ 		}
+ 		else if(migration_style==SubelementMigration2Enum){
+ 			if(gllevelset>0.) mb=gmb;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21890-21891.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21890-21891.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21890-21891.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21890)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21891)
+@@ -520,14 +520,7 @@
+ 
+ 		if(migration_style==SubelementMigrationEnum){
+ 			if (phi>0.999999999) mb=gmb;
+-			else{
+-				mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
+-				printf("mg %g \n",mb);
+-				printf("phi %g \n",phi);
+-				printf("fmb%g \n",fmb);
+-				printf("gmb%g \n",gmb);
+-				printf("\n");
+-			}
++			else mb=(1-phi)*fmb+phi*gmb; // phi is the fraction of grounded ice so (1-phi) is floating
+ 		}
+ 		else if(migration_style==SubelementMigration2Enum){
+ 			if(gllevelset>0.) mb=gmb;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21891-21892.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21891-21892.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21891-21892.diff	(revision 22755)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21892)
+@@ -250,6 +250,7 @@
+       virtual Gauss*     NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order)=0;
+       virtual Gauss*     NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert)=0;
+       virtual Gauss*     NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order)=0;
++      virtual Gauss*     NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order)=0;
+ 		virtual Gauss*     NewGaussBase(int order)=0;
+ 		virtual Gauss*     NewGaussLine(int vertex1,int vertex2,int order)=0;
+ 		virtual Gauss*     NewGaussTop(int order)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21892)
+@@ -2347,6 +2347,11 @@
+ 	return new GaussTria(point1,fraction1,fraction2,mainlyfloating,order);
+ }
+ /*}}}*/
++Gauss*     Tria::NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order){/*{{{*/
++
++	return new GaussTria(point1,fraction1,fraction2,order);
++}
++/*}}}*/
+ Gauss*     Tria::NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert){/*{{{*/
+ 
+ 	IssmDouble  area_coordinates[2][3];
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21892)
+@@ -180,6 +180,7 @@
+ 		Gauss*         NewGauss(int order);
+       Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order);
+       Gauss*         NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order);
++      Gauss*         NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order);
+       Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert);
+ 		Gauss*         NewGaussBase(int order);
+ 		Gauss*         NewGaussLine(int vertex1,int vertex2,int order){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21892)
+@@ -109,6 +109,7 @@
+       Gauss*      NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order);
+       Gauss*      NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert){_error_("not implemented yet");};
+       Gauss*      NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order){_error_("not implemented yet");};
++      Gauss*      NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order){_error_("not implemented yet");};
+ 		Gauss*      NewGaussBase(int order){_error_("not implemented yet");};
+ 		Gauss*      NewGaussLine(int vertex1,int vertex2,int order){_error_("not implemented yet");};
+ 		Gauss*      NewGaussTop(int order){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21892)
+@@ -117,6 +117,7 @@
+       Gauss*      NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order){_error_("not implemented yet");};
+       Gauss*      NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert);
+       Gauss*      NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order){_error_("not implemented yet");};
++      Gauss*      NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order){_error_("not implemented yet");};
+ 		Gauss*      NewGaussBase(int order);
+ 		Gauss*      NewGaussLine(int vertex1,int vertex2,int order){_error_("not implemented yet");};
+ 		Gauss*      NewGaussTop(int order);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 21891)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 21892)
+@@ -286,6 +286,63 @@
+ 	coord3=UNDEF;
+ }
+ /*}}}*/
++GaussTria::GaussTria(int index,IssmDouble r1,IssmDouble r2,int order){/*{{{*/
++
++	/*
++	 *  ^ 
++	 *  ------------------
++	 * 1|\              |
++	 *  |  \            |
++	 *  |    \          |
++	 *  |      \        |
++	 *  |        \      |
++	 *  |          \    |
++	 *  |    +(x,y)  \  |
++	 *  |              \|
++	 *  +---------------+-->
++	 *  0               1
++	 *
++	 */
++	int         ig;
++	IssmDouble x,y;
++	IssmDouble xy_list[3][2];
++
++	/*Double number of gauss points*/
++	GaussTria *gauss1    = NULL;
++	GaussTria *gauss2    = NULL;
++	gauss1=new GaussTria(index,r1,r2,1,order); //for the mainly floating part
++	gauss2=new GaussTria(index,r1,r2,0,order); //for the mainly grounded part
++
++	this->numgauss = gauss1->numgauss + gauss2->numgauss;
++	this->coords1=xNew<IssmDouble>(this->numgauss);
++	this->coords2=xNew<IssmDouble>(this->numgauss);
++	this->coords3=xNew<IssmDouble>(this->numgauss);
++	this->weights=xNew<IssmDouble>(this->numgauss);
++
++	for(ig=0;ig<gauss1->numgauss;ig++){ // Add the first triangle gauss points
++		this->coords1[ig]=gauss1->coords1[ig];
++		this->coords2[ig]=gauss1->coords2[ig];
++		this->coords3[ig]=gauss1->coords3[ig];
++		this->weights[ig]=gauss1->weights[ig];
++	}
++	for(ig=0;ig<gauss2->numgauss;ig++){ // Add the second triangle gauss points
++		this->coords1[gauss1->numgauss+ig]=gauss2->coords1[ig];
++		this->coords2[gauss1->numgauss+ig]=gauss2->coords2[ig];
++		this->coords3[gauss1->numgauss+ig]=gauss2->coords3[ig];
++		this->weights[gauss1->numgauss+ig]=gauss2->weights[ig];
++	}
++
++	/*Delete gauss points*/
++	delete gauss1;
++	delete gauss2;
++
++	/*Initialize static fields as undefined*/
++	weight=UNDEF;
++	coord1=UNDEF;
++	coord2=UNDEF;
++	coord3=UNDEF;
++}
++/*}}}*/
+ GaussTria::~GaussTria(){/*{{{*/
+ 	xDelete<IssmDouble>(weights);
+ 	xDelete<IssmDouble>(coords3);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 21892)
+@@ -30,6 +30,7 @@
+ 		GaussTria(int order);
+ 		GaussTria(int index1,int index2,int order);
+ 		GaussTria(int index,IssmDouble r1, IssmDouble r2,bool maintlyfloating,int order);
++		GaussTria(int index,IssmDouble r1, IssmDouble r2,int order);
+ 		GaussTria(IssmDouble area_coordinates[2][3],int order);
+ 		~GaussTria();
+ 
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21891)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21892)
+@@ -499,7 +499,7 @@
+ 	if(migration_style==SubelementMigration2Enum){
+ 		gllevelset_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
+ 		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+-	   gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,3);
++	   gauss = element->NewGauss(point1,fraction1,fraction2,3);
+ 	}
+ 	else{
+ 		gauss = element->NewGauss(3);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21891)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21892)
+@@ -120,6 +120,7 @@
+ 		Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order){_error_("not implemented yet");};
+ 		Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert);
+ 		Gauss*         NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order);
++		Gauss*         NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order){_error_("not implemented yet");};
+ 		Gauss*         NewGaussBase(int order);
+ 		Gauss*         NewGaussLine(int vertex1,int vertex2,int order);
+ 		Gauss*         NewGaussTop(int order);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21892-21893.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21892-21893.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21892-21893.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive441.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive442.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive435.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21893-21894.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21893-21894.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21893-21894.diff	(revision 22755)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21893)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21894)
+@@ -245,6 +245,18 @@
+ 				for(int i=0;i<3;i++) this->values[i]  =this->values[3+i];
+ 			}
+ 			break;
++		case P1xP3Enum:
++			if(start==-1){
++				for(int i=0+3;i<12;i+=3) this->values[i]=this->values[0];
++				for(int i=1+3;i<12;i+=3) this->values[i]=this->values[1];
++				for(int i=2+3;i<12;i+=3) this->values[i]=this->values[2];
++			}
++			else{
++				for(int i=0;i<9;i+=3) this->values[i]=this->values[9];
++				for(int i=1;i<9;i+=3) this->values[i]=this->values[10];
++				for(int i=2;i<9;i+=3) this->values[i]=this->values[11];
++			}
++			break;
+ 		default:
+ 			_error_("not supported yet for type "<<EnumToStringx(this->interpolation_type));
+ 	}
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21893)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21894)
+@@ -312,6 +312,8 @@
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		ComputeBasalMeltingrate(element);
+ 	}
++	femmodel->parameters->SetParam(BasalforcingsGroundediceMeltingRateEnum,InputToExtrudeEnum);
++	extrudefrombase_core(femmodel);
+ }/*}}}*/
+ void           EnthalpyAnalysis::ComputeBasalMeltingrate(Element* element){/*{{{*/
+ 	/*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21894-21895.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21894-21895.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21894-21895.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21894)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 21895)
+@@ -312,6 +312,8 @@
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		ComputeBasalMeltingrate(element);
+ 	}
++
++	/*extrude inputs*/
+ 	femmodel->parameters->SetParam(BasalforcingsGroundediceMeltingRateEnum,InputToExtrudeEnum);
+ 	extrudefrombase_core(femmodel);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21894)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21895)
+@@ -1517,7 +1517,21 @@
+             this->inputs->AddInput(transientinput);
+             xDelete<IssmDouble>(times);
+         }
+-        else _error_("nodal vector is either numberofvertices or numberofvertices+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++        else if(M==iomodel->numberofelements){
++
++			  /*This is a Patch!*/
++			  xDelete<IssmDouble>(values);
++			  values = xNew<IssmDouble>(N);
++			  for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j];
++
++			  if     (N==this->GetNumberOfNodes(P1Enum)   ) this->AddInput(vector_enum,values,P1Enum);
++			  else if(N==this->GetNumberOfNodes(P1xP3Enum)) this->AddInput(vector_enum,values,P1xP3Enum);
++			  else _error_("Patch interpolation not supported yet");
++
++		  }
++		  else{
++			  _error_("nodal vector is either numberofvertices or numberofvertices+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++		  }
+         
+         xDelete<IssmDouble>(values);
+         xDelete<int>(vertexids);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21895-21896.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21895-21896.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21895-21896.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21895)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21896)
+@@ -54,7 +54,7 @@
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	5e-09,5e-09,5e-09,5e-09,9e-05,9e-05,9e-05,5e-09,1e-13,...
+-	4e-10,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-8,4e-10};
++	4e-09,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-8,4e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21895)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21896)
+@@ -52,7 +52,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
+-	1e-10,2e-08,7e-09,2e-7,1e-03,8e-04,2e-09,1e-10,1e-13};
++	9e-10,2e-08,7e-09,2e-7,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21896-21897.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21896-21897.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21896-21897.diff	(revision 22755)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21896)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21897)
+@@ -67,7 +67,7 @@
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+-		IssmDouble Max(void){_error_("not implemented yet");};
++		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+ 		IssmDouble Min(void);
+ 		IssmDouble MinAbs(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 21896)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 21897)
+@@ -113,6 +113,17 @@
+ 
+ }
+ /*}}}*/
++IssmDouble SegInput::Max(void){/*{{{*/
++
++	const int  numnodes=this->NumberofNodes(this->interpolation_type);
++	IssmDouble max=values[0];
++
++	for(int i=1;i<numnodes;i++){
++		if(values[i]>max) max=values[i];
++	}
++	return max;
++}
++/*}}}*/
+ IssmDouble SegInput::Min(void){/*{{{*/
+ 
+ 	const int  numnodes=this->NumberofNodes(this->interpolation_type);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21896)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21897)
+@@ -500,9 +500,6 @@
+ #}}}
+ 
+ #Wrapper sources
+-#Bamg sources  {{{
+-
+-#}}}
+ #Kml sources  {{{
+ kml_sources = ./modules/Exp2Kmlx/Exp2Kmlx.cpp\
+ 				  ./modules/Kml2Expx/Kml2Expx.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-21897-21898.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21897-21898.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21897-21898.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 21897)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 21898)
+@@ -167,6 +167,36 @@
+ 
+ 	*pxyz_front=xyz_front;
+ }/*}}}*/
++IssmDouble Seg::GetGroundedPortion(IssmDouble* xyz_list){/*{{{*/
++	/*Computeportion of the element that is grounded*/ 
++
++	bool              mainlyfloating = true;
++	const IssmPDouble epsilon        = 1.e-15;
++	IssmDouble        phi;
++	IssmDouble        gl[NUMVERTICES];
++
++	/*Recover parameters and values*/
++	parameters->FindParam(&domaintype,DomainTypeEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
++
++	/*Be sure that values are not zero*/
++	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0.) gl[1]=gl[1]+epsilon;
++
++	if(gl[0]>0 && gl[1]>0) phi=1; // All grounded
++	else if(gl[0]<0 && gl[1]<0) phi=0; // All floating
++	else if(gl[0]<0 && gl[1]>0){ //1 grounded
++		phi=1./(1.-gl[0]/gl[1]);
++	}
++	else if(gl[1]<0 && gl[0]>0){ //0 grounded
++		phi=1./(1.-gl[1]/gl[0]);
++	}
++
++	if(phi>1 || phi<0) _error_("Error. Problem with portion of grounded element: value should be between 0 and 1");
++
++	return phi;
++}
++/*}}}*/
+ int        Seg::GetNumberOfNodes(void){/*{{{*/
+ 	return this->NumberofNodes(this->element_type);
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21897)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21898)
+@@ -61,7 +61,7 @@
+ 		Element*    GetBasalElement(void){_error_("not implemented yet");};
+ 		int         GetElementType(void){_error_("not implemented yet");};
+ 		void        GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating){_error_("not implemented yet");};
+-		IssmDouble  GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");};
++		IssmDouble  GetGroundedPortion(IssmDouble* xyz_list);
+ 		void		   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
+ 		void        GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
+ 		void		   GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented");};
Index: /issm/oecreview/Archive/21724-22754/ISSM-21898-21899.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21898-21899.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21898-21899.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 21898)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 21899)
+@@ -176,7 +176,6 @@
+ 	IssmDouble        gl[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+-	parameters->FindParam(&domaintype,DomainTypeEnum);
+ 	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21899-21900.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21899-21900.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21899-21900.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21899)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 21900)
+@@ -268,7 +268,9 @@
+ 	element->FindParam(&stabilization,MasstransportStabilizationEnum);
+ 	Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+ 	Input* vyaverage_input=NULL;
+-	if(dim==2) vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
++	if(dim==2){
++		vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
++	}
+ 
+ 	h = element->CharacteristicLength();
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21900-21901.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21900-21901.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21900-21901.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21900)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21901)
+@@ -51,7 +51,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,4e-09,5e-08,1e-09,1e-10,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,6e-09,7e-08,1e-09,1e-10,1e-13,...
+ 	9e-10,2e-08,7e-09,2e-7,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21901-21902.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21901-21902.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21901-21902.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive437.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21902-21903.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21902-21903.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21902-21903.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21902)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21903)
+@@ -47,12 +47,14 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
++field_names     ={...
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',...
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,6e-09,7e-08,1e-09,1e-10,1e-13,...
+-	9e-10,2e-08,7e-09,2e-7,1e-03,8e-04,2e-09,1e-10,1e-13};
++field_tolerances={...
++	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,6e-09,9e-08,1e-09,1e-10,1e-13,...
++	9e-10,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21903-21904.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21903-21904.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21903-21904.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test442.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.m	(revision 21903)
++++ ../trunk-jpl/test/NightlyRun/test442.m	(revision 21904)
+@@ -54,7 +54,7 @@
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,6e-10,1e-13,1e-13,...
+ 	5e-09,5e-09,5e-09,5e-09,9e-05,9e-05,9e-05,5e-09,1e-13,...
+-	4e-09,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-8,4e-10};
++	8e-09,3e-08,8e-09,5e-09,8e-04,6e-04,2e-09,1e-8,4e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21904-21905.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21904-21905.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21904-21905.diff	(revision 22755)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 21904)
++++ ../trunk-jpl/etc/environment.sh	(revision 21905)
+@@ -96,6 +96,9 @@
+ 	libpathappend "$PETSC_DIR/lib"
+ fi
+ 
++SCOTCH_DIR="$ISSM_DIR/externalpackages/scotch/install"
++libpathappend "$SCOTCH_DIR/lib"
++
+ SLEPC_DIR="$ISSM_DIR/externalpackages/slepc/install"
+ libpathappend "$SLEPC_DIR/lib"
+ 
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 21904)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 21905)
+@@ -713,7 +713,7 @@
+ 	dnl scotch libraries
+ 	if test "x$HAVE_SCOTCH" = "xyes"; then
+ 		SCOTCHINCL="-DNOFILEIO -I$SCOTCH_ROOT/include -DSCOTCH_VERSION=\\\"UNKNOWN\\\""
+-		SCOTCHLIB="-L$SCOTCH_ROOT/lib -lnfioscotch -lnfioscotcherr -lnfioscotcherrexit -lscotchmetis"
++		SCOTCHLIB="-L$SCOTCH_ROOT/lib -lnfioscotch -lnfioscotcherr -lnfioscotcherrexit "
+ 		AC_DEFINE([_HAVE_SCOTCH_],[1],[with Scotch in ISSM src])
+ 		AC_SUBST([SCOTCHINCL])
+ 		AC_SUBST([SCOTCHLIB])
+Index: ../trunk-jpl/externalpackages/scotch/scotch.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/scotch/scotch.patch	(revision 21904)
++++ ../trunk-jpl/externalpackages/scotch/scotch.patch	(revision 21905)
+@@ -2226,12 +2226,11 @@
+ --- src/src/libscotch/parser_ll.l	2013-05-06 14:14:21.000000000 -0700
+ ***************
+ *** 192,197 ****
+---- 192,214 ----
++--- 192,213 ----
+   stratParserInit (
+   const char * const          string)               /*+ Strategy string to parse +*/
+   {
+ + /*  reset static variables from previous runs (jes, 4/29/10)  */
+-+   yy_current_buffer = 0;
+ +   yy_hold_char = (char) 0;
+ +   yy_n_chars=0;          /* number of characters read into yy_ch_buf */
+ +   yy_c_buf_p = (char *) 0;
+Index: ../trunk-jpl/src/m/partition/partitioner.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/partitioner.m	(revision 21904)
++++ ../trunk-jpl/src/m/partition/partitioner.m	(revision 21905)
+@@ -40,6 +40,7 @@
+ 	md.mesh.numberofelements=md.mesh.numberofelements2d;
+ 	md.qmu.vertex_weight=[];
+ 	md.mesh.vertexconnectivity=[];
++	recomputeadjacency='on';
+ end
+ 
+ %adjacency matrix if needed:
+@@ -79,10 +80,12 @@
+ 	%are we using weights? 
+ 	if strcmpi(getfieldvalue(options,'weighting'),'on'),
+ 		weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight));
++	else
++		weights=[];
+ 	end
+ 	maptab=Scotch(md.qmu.adjacency,[],weights,[],'cmplt',[npart]);
+ 
+-	part=maptab(:,2);%index partitions from 1 up. like metis.
++	part=maptab(:,2)+1;%index partitions from 1 up. like metis.
+ 
+ elseif strcmpi(package,'linear'),
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21905-21906.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21905-21906.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21905-21906.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/etc/environment.csh
+===================================================================
+--- ../trunk-jpl/etc/environment.csh	(revision 21905)
++++ ../trunk-jpl/etc/environment.csh	(revision 21906)
+@@ -19,6 +19,11 @@
+ 	setenv LD_LIBRARY_PATH {$LD_LIBRARY_PATH}:$PETSC_DIR/lib
+ endif
+ 
++set SCOTCH_DIR="$ISSM_DIR/externalpackages/scotch/install"
++if (-d $SCOTCH_DIR) then
++	setenv LD_LIBRARY_PATH {$LD_LIBRARY_PATH}:$SCOTCH_DIR/lib
++endif
++
+ #SLEPC
+ set SLEPC_DIR="$ISSM_DIR/externalpackages/slepc/install"
+ if (-d $SLEPC_DIR) then
Index: /issm/oecreview/Archive/21724-22754/ISSM-21906-21907.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21906-21907.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21906-21907.diff	(revision 22755)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/externalpackages/scotch/install_macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/scotch/install_macosx64.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/scotch/install_macosx64.sh	(revision 21907)
+@@ -0,0 +1,57 @@
++#!/bin/bash
++set -eu
++
++# Some cleanup
++rm -rf scotch_5.1
++rm -rf src 
++rm -rf install 
++
++# Create src and install directories
++mkdir src install 
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/scotch_5.1.6.tar.gz' 'scotch_5.1.6.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/ptscotch_user5.1.pdf' 'ptscotch_user5.1.pdf'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/scotch_user5.1.pdf' 'scotch_user5.1.pdf'
++
++# Untar 
++tar -xvzf scotch_5.1.6.tar.gz
++
++# Apply patches (all at once, since many)
++# (written by diff -rc old_src new_src > scotch.patch)
++patch -p0 < scotch.patch
++
++# Move scotch to src directory
++mv scotch_5.1/* src
++rm -rf scotch_5.1
++
++# Build scotch
++cp -p Makefile.inc.mac src/src/Makefile.inc
++cp -p gmap_mex.c src/src/scotch
++cp -p gmapx.c src/src/scotch
++cd src/src
++# For stand-alone scotch modules:
++make scotch
++make clean
++# For no-file-io scotch modules:
++make nfioscotch
++# Clean up
++make clean
++cd ../..
++
++# Populate install directory
++cp -pr src/grf install
++cp -pr src/tgt install
++cp -pr src/doc install
++cp -pr src/man install
++mkdir install/include
++cp -p src/src/libscotch/module.h install/include/scotch_module.h
++cp -p src/src/libscotch/common.h install/include/scotch_common.h
++cp -p src/include/scotch.h install/include/
++cp -p src/src/scotch/gmap.h install/include/scotch_gmap.h
++mkdir install/lib
++mv src/lib/* install/lib
++mkdir install/bin
++mv src/bin/* install/bin
++#cp -p gmap.m install/bin
++#cp -p gpart.m install/bin
+
+Property changes on: ../trunk-jpl/externalpackages/scotch/install_macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/scotch/Makefile.inc.mac
+===================================================================
+--- ../trunk-jpl/externalpackages/scotch/Makefile.inc.mac	(nonexistent)
++++ ../trunk-jpl/externalpackages/scotch/Makefile.inc.mac	(revision 21907)
+@@ -0,0 +1,26 @@
++EXE	=
++LIB	= .a
++OBJ	= .o
++MEX	= .mexa64
++
++MAKE	= make
++AR	= ar
++ARFLAGS	= -ruv
++CAT	= cat
++CCS	= gcc
++CCP     = mpicc
++CCD     = mpicc
++CCM	= ${MATLAB_DIR}/bin/mex
++#CFLAGS	= -m64 -O3 -std=c99 -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -Du_int32_t=uint32_t -Du_int64_t=uint64_t -DCOMMON_TIMING_OLD -DMATLAB -fPIC -I${MATLAB_DIR}/extern/include
++CFLAGS	= -m64 -O3 -std=c99 -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -Du_int32_t=uint32_t -Du_int64_t=uint64_t -DCOMMON_TIMING_OLD -fPIC
++#LDFLAGS	= -lz -lm -L${MATLAB_DIR}/bin/glnxa64 -lmex -lmat
++#LDFLAGS	= -lz -lm -Wl,-rpath-link,${MATLAB_DIR}/bin/glnxa64 -L${MATLAB_DIR}/bin/glnxa64 -lmex -lmat
++LDFLAGS	= -lz -lm 
++MFLAGS	= -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -Du_int32_t=uint32_t -Du_int64_t=uint64_t -DCOMMON_TIMING_OLD -DNOFILEIO -DMATLAB -I${MATLAB_DIR}/extern/include -largeArrayDims
++CP	= cp
++LEX	= flex
++LN	= ln
++MKDIR	= mkdir
++MV	= mv
++RANLIB	= ranlib
++YACC	= yacc
Index: /issm/oecreview/Archive/21724-22754/ISSM-21907-21908.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21907-21908.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21907-21908.diff	(revision 22755)
@@ -0,0 +1,220 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21907)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21908)
+@@ -794,6 +794,9 @@
+ 	SealevelEmotionEnum,
+ 	SealevelAbsoluteEnum,
+ 	SealevelEustaticEnum,
++	SealevelInertiaTensorXZEnum,
++	SealevelInertiaTensorYZEnum,
++	SealevelInertiaTensorZZEnum,
+ 	SealevelObsEnum,
+ 	SealevelWeightsEnum,
+ 	SealevelriseDeltathicknessEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21908)
+@@ -774,6 +774,9 @@
+ 		case SealevelEmotionEnum : return "SealevelEmotion";
+ 		case SealevelAbsoluteEnum : return "SealevelAbsolute";
+ 		case SealevelEustaticEnum : return "SealevelEustatic";
++		case SealevelInertiaTensorXZEnum : return "SealevelInertiaTensorXZ";
++		case SealevelInertiaTensorYZEnum : return "SealevelInertiaTensorYZ";
++		case SealevelInertiaTensorZZEnum : return "SealevelInertiaTensorZZ";
+ 		case SealevelObsEnum : return "SealevelObs";
+ 		case SealevelWeightsEnum : return "SealevelWeights";
+ 		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21908)
+@@ -792,6 +792,9 @@
+ 	      else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum;
+ 	      else if (strcmp(name,"SealevelAbsolute")==0) return SealevelAbsoluteEnum;
+ 	      else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum;
+ 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+ 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
+ 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
+@@ -871,13 +874,13 @@
+ 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+ 	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
+ 	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+-	      else if (strcmp(name,"Node")==0) return NodeEnum;
+-	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
++	      if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"Node")==0) return NodeEnum;
++	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
++	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+@@ -994,13 +997,13 @@
+ 	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+ 	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+ 	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
+-	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+-	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
+-	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
++	      if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
++	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
++	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
++	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+Index: ../trunk-jpl/src/c/cores/sealevelrise_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 21908)
+@@ -82,8 +82,6 @@
+ 
+ 		Sg=sealevelrise_core_noneustatic(femmodel,Sg_eustatic); //ocean loading tems  (2nd and 5th terms on the RHS of Farrel and Clark)
+ 
+-				
+-	
+ 		/*compute other geodetic signatures, such as absolute sea level chagne, components of 3-D crustal motion: */
+ 		/*Initialize:*/
+ 		U_radial = new Vector<IssmDouble>(gsize);
+Index: ../trunk-jpl/src/c/cores/sealevelrise_core_noneustatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/sealevelrise_core_noneustatic.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/cores/sealevelrise_core_noneustatic.cpp	(revision 21908)
+@@ -36,6 +36,9 @@
+ 	IssmDouble          *longitude    = NULL;
+ 	IssmDouble          *radius    = NULL;
+ 	IssmDouble           eustatic;
++	IssmDouble				Ixz; 
++	IssmDouble				Iyz; 
++	IssmDouble				Izz; 
+ 
+ 	/*Recover some parameters: */
+ 	femmodel->parameters->FindParam(&max_nonlinear_iterations,SealevelriseMaxiterEnum);
+@@ -82,10 +85,16 @@
+ 		if(rotation){
+ 			/*call rotational feedback  module: */
+ 			Sgo_rot = new Vector<IssmDouble>(gsize); Sgo_rot->Assemble();
+-			femmodel->SealevelriseRotationalFeedback(Sgo_rot,Sg_old,latitude,longitude,radius); 
++			femmodel->SealevelriseRotationalFeedback(Sgo_rot,Sg_old,&Ixz,&Iyz,&Izz,latitude,longitude,radius); 
+ 			Sgo_rot->Assemble(); 
+ 
++			/*save changes in inertia tensor as results: */
++			femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,SealevelInertiaTensorXZEnum,Ixz));
++			femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,SealevelInertiaTensorYZEnum,Iyz));
++			femmodel->results->AddResult(new GenericExternalResult<IssmDouble>(femmodel->results->Size()+1,SealevelInertiaTensorZZEnum,Izz));
++		
+ 			Sgo->AXPY(Sgo_rot,1); 
++			delete Sgo_rot; 
+ 		}
+ 		
+ 		/*we need to average Sgo over the ocean: RHS term  5 in Eq.4 of Farrel and clarke. Only the elements can do that: */
+@@ -92,7 +101,7 @@
+ 		Sgo_oceanaverage=femmodel->SealevelriseOceanAverage(Sgo);
+ 	
+ 		/*Sg is the sum of the eustatic term, and the ocean terms: */
+-		Sg_eustatic->Copy(Sg); Sg->AXPY(Sgo,1); 
++		Sg_eustatic->Copy(Sg); Sg->AXPY(Sgo,1); delete Sgo; 
+ 		Sg->Shift(-Sgo_oceanaverage);
+ 
+ 		/*convergence criterion:*/
+@@ -111,7 +120,6 @@
+ 		
+ 		/*some minor verbosing adjustment:*/
+ 		if(count>1)verboseconvolution=false;
+-		
+ 	}
+ 	if(VerboseConvergence()) _printf0_("\n   total number of iterations: " << count-1 << "\n");
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21907)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21908)
+@@ -136,7 +136,7 @@
+ 		#ifdef _HAVE_SEALEVELRISE_
+ 		void SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* peustatic, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);
+ 		void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution);
+-		void SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);
++		void SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);
+ 		void SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 
+ 		IssmDouble SealevelriseOceanAverage(Vector<IssmDouble>* Sg);
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21908)
+@@ -3919,7 +3919,7 @@
+ 	xDelete<IssmDouble>(Sg_old);
+ }
+ /*}}}*/
+-void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/
++void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/
+ 
+ 	/*serialized vectors:*/
+ 	IssmDouble* Sg_old=NULL;
+@@ -3995,6 +3995,11 @@
+ 	/*Assemble mesh velocity*/
+ 	pSgo_rot->Assemble();
+ 	
++	/*Assign output pointers:*/
++	*pIxz=moi_list[0];
++	*pIyz=moi_list[1];
++	*pIzz=moi_list[2];
++
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(Sg_old);
+ 	
+Index: ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 21908)
+@@ -126,8 +126,13 @@
+ 			G_elastic_local[i-lower_row]= (love_k[nl-1]-love_h[nl-1])/2.0/sin(alpha/2.0);
+ 			U_elastic_local[i-lower_row]= (love_h[nl-1])/2.0/sin(alpha/2.0);
+ 			H_elastic_local[i-lower_row]= 0; 
+-			IssmDouble Pn,Pn1,Pn2;
+-			IssmDouble Pn_p,Pn_p1,Pn_p2;
++			IssmDouble Pn = 0.; 
++			IssmDouble Pn1 = 0.; 
++			IssmDouble Pn2 = 0.; 
++			IssmDouble Pn_p = 0.; 
++			IssmDouble Pn_p1 = 0.; 
++			IssmDouble Pn_p2 = 0.; 
++
+ 			for (int n=0;n<nl;n++) {
+ 				IssmDouble deltalove_G;
+ 				IssmDouble deltalove_U;
+Index: ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 21907)
++++ ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 21908)
+@@ -79,8 +79,15 @@
+ 
+ 		U_elastic_local[i-lower_row]= (love_h[nl-1])/2.0/sin(alpha/2.0);
+ 		H_elastic_local[i-lower_row]= 0; 
+-		IssmDouble Pn,Pn1,Pn2;
+-		IssmDouble Pn_p,Pn_p1,Pn_p2;
++		//IssmDouble Pn,Pn1,Pn2;
++		//IssmDouble Pn_p,Pn_p1,Pn_p2;
++		IssmDouble Pn = 0.; 
++		IssmDouble Pn1 = 0.; 
++		IssmDouble Pn2 = 0.; 
++		IssmDouble Pn_p = 0.; 
++		IssmDouble Pn_p1 = 0.; 
++		IssmDouble Pn_p2 = 0.; 
++
+ 		for (int n=0;n<nl;n++) {
+ 			IssmDouble deltalove_U;
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21908-21909.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21908-21909.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21908-21909.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test437.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test437.m	(revision 21908)
++++ ../trunk-jpl/test/NightlyRun/test437.m	(revision 21909)
+@@ -52,9 +52,9 @@
+ 						'Enthalpy3','Temperature3','Waterfraction3','BasalMeltingRate3','Watercolumn3',...
+ 						'Enthalpy4','Temperature4','Waterfraction4','BasalMeltingRate4','Watercolumn4'};
+ field_tolerances={1.e-10,1.e-10,1.e-10,1.e-9,1.e-10,...
+-						1.e-10,1.e-10,1.e-10,1.e-9,2.e-10,...
+-						1.e-10,1.e-10,1.e-10,1.e-9,1.e-10,...
+-						1.e-10,1.e-10,1.e-10,1.e-9,1.e-10};
++						1.e-10,1.e-10,1.e-10,2.e-9,2.e-10,...
++						1.e-10,1.e-10,1.e-10,2.e-9,1.e-10,...
++						1.e-10,1.e-10,1.e-10,2.e-9,1.e-10};
+ i1=1;	i2=ceil(t2/md.timestepping.time_step)+2;	i3=ceil(md.timestepping.final_time/(2.*md.timestepping.time_step));	i4=size(md.results.TransientSolution,2);
+ field_values={...
+ 	(md.results.TransientSolution(i1).Enthalpy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21909-21910.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21909-21910.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21909-21910.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21909)
++++ ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21910)
+@@ -37,6 +37,9 @@
+ #endif
+ WRAPPER(M1qn3_python){
+ 
++	/*Boot module: */
++	MODULEBOOT();
++
+ #ifdef _HAVE_M1QN3_
+ 	/*input: */
+ 	double* Xs=NULL;
+@@ -51,16 +54,11 @@
+ 	double* X_out = NULL;
+ 
+ 	/*intermediary: */
+-	double* G=NULL;
+-	double* X=NULL;
+ 	double f;
+ 	double dxmin=.01;
+ 	double gttol=.0001;
+ 	long   omode;
+ 
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+ 	/*checks on arguments on the matlab side: */
+ 	if(nlhs!=NLHS){
+ 		M1qn3Usage();
+@@ -159,10 +157,11 @@
+ 	xDelete<double>(X_out);
+ 	xDelete<double>(G);
+ 	xDelete<double>(X);
+-	MODULEEND();
+ 	#else
+ 	_error_("m1qn3 is not installed");
+ 	#endif
++	MODULEEND();
++
+ }
+ 
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21910-21911.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21910-21911.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21910-21911.diff	(revision 22755)
@@ -0,0 +1,2045 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.js	(revision 21910)
++++ ../trunk-jpl/src/m/classes/clusters/generic.js	(revision 21911)
+@@ -52,6 +52,7 @@
+ 			return;
+ 		} //}}}
+ 		var request = new XMLHttpRequest();
++		request.open("POST", this.url, true);
+ 		$(callbackid).html(sprintf("%-16s", "CONNECTING...")).prop("disabled", true);
+ 		request.position = 0; //Keep track of current parsing position in repsonseText
+ 		request.timeout = 180000;
+@@ -156,7 +157,6 @@
+ 		
+ 		var data = new Blob([nplength,npbuffer,codeversionlength,codeversionbuffer,runtimenamelength,runtimenamebuffer,namelength,namebuffer,toolkitslength,toolkitsbuffer,solutionlength,solutionbuffer,binlength,binbuffer]);
+ 		
+-		request.open("POST", this.url, true);
+ 		request.responseType = 'application/octet-stream';
+ 		request.send(data);
+ 		
+Index: ../trunk-jpl/src/m/plot/plot_mesh.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 21911)
+@@ -30,7 +30,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+Index: ../trunk-jpl/src/m/plot/webgl.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/webgl.js	(revision 21911)
+@@ -8,9 +8,11 @@
+ 		if (!isEmptyOrUndefined(canvas.draw) && canvas.draw.handler !== 0)	{ window.cancelAnimationFrame(canvas.draw.handler); }
+ 		if (!isEmptyOrUndefined(canvas.animation) && canvas.animation.handler !== 0) { clearInterval(canvas.animation.handler); }
+ 		initWebGL(canvas, options);
+-		initializeMarker(canvas);
+ 		draw(canvas);
+ 		canvas.initialized = true;
++		
++		//The onStart event triggers once per plotmodel call load after WebGL and canvas initialization are complete
++		canvas.selector.trigger('onStart', [canvas]);
+ 	}
+ 	return canvas;
+ }
+@@ -33,9 +35,9 @@
+ 		var mc = new Hammer(canvas);	
+ 		mc.add(new Hammer.Pan({threshold: 0, pointers: 0}));
+ 		mc.add(new Hammer.Pinch({threshold: 0})).recognizeWith(mc.get('pan'));
+-		mc.on('tap press', function (ev) {onTap(ev, canvas);});
++		mc.on('tap', function (ev) {onTap(ev, canvas);});
+ 		mc.on('panstart panmove', function (ev) {onPan(ev, canvas, displayview);});
+-		mc.on('pinchstart pinchmove', function (ev) {onPinch(ev, canvas, displayview);});		
++		mc.on('pinchstart pinchmove', function (ev) {onPinch(ev, canvas, displayview);});
+ 		canvas.addEventListener('mousewheel', function (ev) {onZoom(ev, canvas, displayzoom)}, false);
+ 		canvas.addEventListener('DOMMouseScroll', function (ev) {onZoom(ev, canvas, displayzoom)}, false);
+ 		
+@@ -45,6 +47,7 @@
+ 		canvas.unitNode = {};
+ 		canvas.unitData = {};
+ 		canvas.unitMovieData = {};
++		
+ 		canvas.gl = gl;
+ 		canvas.rootPath = options.getfieldvalue('rootpath', '../../../js/');
+ 		canvas.id = options.getfieldvalue('canvasid', '.sim-canvas');
+@@ -56,80 +59,98 @@
+ 	}
+ 	
+ 	//Add context state variables
++	canvas.render = options.getfieldvalue('render', {});
+ 	canvas.controlSensitivity = options.getfieldvalue('controlsensitivity', 1);
++	canvas.overlayHandlers = {};
+ 	var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor', 'lightcyan'));
+ 	if (backgroundcolor.ok) { canvas.backgroundcolor = [backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0]; }
+ 	else { throw Error(sprintf('s%s%s\n','initWebGL error message: cound not find out background color for curent canvas ', canvas)); }
+ 	
+ 	//Property intiialization, using values from options first, then from default values.
++	var atmosphere = options.getfieldvalue('atmosphere', {});
++	canvas.atmosphere = { 												//Default Values
++		wavelength_r: defaultFor(atmosphere.wavelength_r, 			0.65), 		//0.65		Red wavelength (micrometers)
++		wavelength_g: defaultFor(atmosphere.wavelength_g, 			0.57),		//0.57		Green wavelength (micrometers)
++		wavelength_b: defaultFor(atmosphere.wavelength_b, 			0.475),		//0.475		Green wavelength (micrometers)
++		eSun: 	defaultFor(atmosphere.eSun, 						100.0),		//20.0		Sun intensity	
++		kRayleigh: defaultFor(atmosphere.kRayleigh, 				0.0025),	//0.0025	Rayleigh scattering amount
++		kMie: defaultFor(atmosphere.kMie, 							0.000), 	//0.01		Mie scattering amount
++		g: defaultFor(atmosphere.g, 								-0.99),		//-0.99		Mie phase asymmetry/direction factor
++		hdr_exposure: defaultFor(atmosphere.hdr_exposure, 			0.8),		//0.8		High Dynamic Range Exposure
++		scaleHeight: defaultFor(atmosphere.scaleHeight, 			1.25), 		//1.025		Scale of height of atmosphere to earth radius.
++		scaleDepth: defaultFor(atmosphere.scaleDepth, 				0.25), 		//0.25		Percentage altitude at which the atmosphere's average density is found
++		a: defaultFor(atmosphere.a, 								-0.00287),	//-0.00287	Scaling constant a
++		b: defaultFor(atmosphere.b, 								0.459),		//0.459		Scaling constant b
++		c: defaultFor(atmosphere.c, 								3.83),		//3.83		Scaling constant c
++		d: defaultFor(atmosphere.d, 								-6.80),		//-6.80		Scaling constant d
++		e: defaultFor(atmosphere.e, 								3.6),		//5.25		Scaling constant e. Lower when increasing atmosphere scale.
++		attenuation: defaultFor(atmosphere.attenuation, 			0.5)		//0.5		Strength of atmospheric scattering on ground shading.
++	};
++	updateAtmosphereParameters(canvas);
+ 	var animation = options.getfieldvalue('movies', {});
+ 	canvas.animation = {
+-		frame: defaultFor(animation.frame, 0),
+-		play: defaultFor(animation.play, true),
+-		increment: defaultFor(animation.increment, true),
+-		fps: defaultFor(animation.fps, 4),
+-		interval: defaultFor(animation.interval, 1000 / animation.fps),
+-		loop: defaultFor(animation.loop, true),
+-		handler: defaultFor(animation.handler, 0)
++		frame: defaultFor(animation.frame, 							0),
++		play: defaultFor(animation.play, 							true),
++		increment: defaultFor(animation.increment, 					true),
++		fps: defaultFor(animation.fps, 								4),
++		interval: defaultFor(animation.interval, 					1000 / defaultFor(animation.fps, 4)),
++		loop: defaultFor(animation.loop, 							true),
++		handler: defaultFor(animation.handler, 						0)
+ 	}
+ 	var brush = options.getfieldvalue('brush', {});
+ 	canvas.brush = {
+-		enabled: defaultFor(brush.enabled, false),
+-		strength: defaultFor(brush.strength, 0.075),
+-		falloff: defaultFor(brush.falloff, 0.5),
+-		hit: defaultFor(brush.hit, {})
++		enabled: defaultFor(brush.enabled, 							false),
++		strength: defaultFor(brush.strength, 						0.075),
++		falloff: defaultFor(brush.falloff, 							0.5),
++		hit: defaultFor(brush.hit, 									{})
+ 	};
+ 	var camera = options.getfieldvalue('camera', {});
+ 	canvas.camera = {
+-		position: defaultFor(camera.position, vec3.create()),
+-		rotation: defaultFor(camera.rotation, vec3.create()),
+-		near: defaultFor(camera.near, 1e3),
+-		far: defaultFor(camera.far, 1e10),
+-		fov: defaultFor(camera.fov, 45),
+-		vMatrix: defaultFor(camera.vMatrix, mat4.create()),
+-		pMatrix: defaultFor(camera.pMatrix, mat4.create()),
+-		vpMatrix: defaultFor(camera.vpMatrix, mat4.create()),
+-		vInverseMatrix: defaultFor(camera.vInverseMatrix, mat4.create()),
+-		pInverseMatrix: defaultFor(camera.pInverseMatrix, mat4.create()),
+-		vpInverseMatrix: defaultFor(camera.vpInverseMatrix, mat4.create()),
+-		ready: defaultFor(camera.ready, false)
++		position: defaultFor(camera.position, 						vec3.create()),
++		rotation: defaultFor(camera.rotation, 						quat.create()),
++		relativePosition: defaultFor(camera.relativePosition, 		vec3.create()),
++		direction: defaultFor(camera.direction, 					vec3.create()),
++		near: defaultFor(camera.near, 								1e3),
++		far: defaultFor(camera.far, 								1e10),
++		fov: defaultFor(camera.fov, 								45),
++		vMatrix: defaultFor(camera.vMatrix, 						mat4.create()),
++		pMatrix: defaultFor(camera.pMatrix, 						mat4.create()),
++		vpMatrix: defaultFor(camera.vpMatrix, 						mat4.create()),
++		vInverseMatrix: defaultFor(camera.vInverseMatrix, 			mat4.create()),
++		pInverseMatrix: defaultFor(camera.pInverseMatrix, 			mat4.create()),
++		vpInverseMatrix: defaultFor(camera.vpInverseMatrix, 		mat4.create()),
++		ready: defaultFor(camera.ready, 							false)
+ 	};
+-	var clouds = options.getfieldvalue('clouds', {});
+-	canvas.clouds = {
+-		enabled: defaultFor(clouds.enabled, false),
+-		height: defaultFor(clouds.height, 7500),
+-		quantity: defaultFor(clouds.quantity, 10),
+-		hit: defaultFor(clouds.hit, {})
+-	};
+ 	var dataMarkers = options.getfieldvalue('datamarkers', {});
+ 	canvas.dataMarkers = {
+-		enabled: defaultFor(dataMarkers.enabled, true),
+-		values: defaultFor(dataMarkers.values, []),
+-		image: defaultFor(dataMarkers.image, canvas.rootPath+'textures/data_marker.svg'),
+-		size: defaultFor(dataMarkers.size, [32, 32]),
+-		format: defaultFor(dataMarkers.format, ['X: %.2e<br>Y: %.2e<br>Z: %.2e<br>Value: %0.1f', 'x', 'y', 'z', 'value']),
+-		animated: defaultFor(dataMarkers.animated, false),
+-		labels: defaultFor(dataMarkers.labels, []),
+-		font: defaultFor(dataMarkers.font, ''),
+-		marker: defaultFor(dataMarkers.marker, document.getElementById('sim-data-marker-' + canvas.id)),
+-		reposition: defaultFor(dataMarkers.reposition, true)
++		enabled: defaultFor(dataMarkers.enabled, 					true),
++		values: defaultFor(dataMarkers.values, 						[]),
++		image: defaultFor(dataMarkers.image, 						canvas.rootPath + 'textures/data_marker.svg'),
++		size: defaultFor(dataMarkers.size, 							[32, 32]),
++		format: defaultFor(dataMarkers.format, 						['X: %.2e<br>Y: %.2e<br>Z: %.2e<br>Value: %0.1f', 'x', 'y', 'z', 'value']),
++		animated: defaultFor(dataMarkers.animated, 					false),
++		labels: defaultFor(dataMarkers.labels, 						[]),
++		font: defaultFor(dataMarkers.font, 							''),
++		marker: defaultFor(dataMarkers.marker, 						document.getElementById('sim-data-marker-' + canvas.id)),
++		reposition: defaultFor(dataMarkers.reposition, 				true)
+ 	};
+ 	var draw = options.getfieldvalue('draw', {});
+ 	canvas.draw = {
+-		ready: defaultFor(draw.ready, false),
+-		handler: defaultFor(draw.handler, null)
++		ready: defaultFor(draw.ready, 								false),
++		handler: defaultFor(draw.handler, 							null)
+ 	};
+ 	var view = options.getfieldvalue('view', {});
+ 	canvas.view = {
+-		position: defaultFor(view.position, [0.0, 0.0, 0.0]),
+-		rotation: defaultFor(view.rotation, [0, 90]),
+-		zoom: defaultFor(view.zoom, 1.0),
+-		zoomLimits: defaultFor(view.zoomLimits, [0.001, 100.0]),
+-		lastZoom: defaultFor(view.lastZoom, 1.0),
+-		azimuthLimits: defaultFor(view.azimuthLimits, [0, 360]),
+-		elevationLimits: defaultFor(view.elevationLimits, [-180, 180]),
+-		panningEnabled: defaultFor(view.panningEnabled, false),
+-		twod: defaultFor(view.twod, false)
++		position: defaultFor(view.position, 						[0.0, 0.0, 0.0]),
++		rotation: defaultFor(view.rotation, 						[0, 90]),
++		zoom: defaultFor(view.zoom, 								1.0),
++		zoomLimits: defaultFor(view.zoomLimits, 					[0.001, 100.0]),
++		lastZoom: defaultFor(view.lastZoom, 						1.0),
++		azimuthLimits: defaultFor(view.azimuthLimits, 				[0, 360]),
++		elevationLimits: defaultFor(view.elevationLimits, 			[-180, 180]),
++		panningEnabled: defaultFor(view.panningEnabled, 			false),
++		preventDefaultOnPan: defaultFor(view.preventDefaultOnPan, 	false),
++		twod: defaultFor(view.twod, 								false)
+ 	};
+ 
+ 	//Override with parameters from URL, if any
+@@ -170,10 +191,11 @@
+ function loadShaders(gl, rootPath) { //{{{
+ 	var shaders = {};
+ 	shaders.Colored = new GL.Shader.fromURL(rootPath+'shaders/Colored.vsh', rootPath+'shaders/Colored.fsh', null, gl);
++	shaders.ColoredDiffuse = new GL.Shader.fromURL(rootPath+'shaders/ColoredDiffuse.vsh', rootPath+'shaders/ColoredDiffuse.fsh', null, gl);
+ 	shaders.Textured = new GL.Shader.fromURL(rootPath+'shaders/Textured.vsh', rootPath+'shaders/Textured.fsh', null, gl);
++	shaders.TexturedDiffuse = new GL.Shader.fromURL(rootPath+'shaders/TexturedDiffuse.vsh', rootPath+'shaders/TexturedDiffuse.fsh', null, gl);
+ 	shaders.SkyFromSpace = new GL.Shader.fromURL(rootPath+'shaders/SkyFromSpace.vert', rootPath+'shaders/SkyFromSpace.frag', null, gl);
+ 	shaders.GroundFromSpace = new GL.Shader.fromURL(rootPath+'shaders/GroundFromSpace.vert', rootPath+'shaders/GroundFromSpace.frag', null, gl);
+-	shaders.Clouds = new GL.Shader.fromURL(rootPath+'shaders/Clouds.vert', rootPath+'shaders/Clouds.frag', null, gl);
+ 	return shaders;
+ } //}}}
+ function initTexture(gl, imageSource) { //{{{
+@@ -183,6 +205,24 @@
+ 	}
+ 	return gl.textures[imageSource];
+ } //}}}
++function updateAtmosphereParameters(canvas) {
++	//Precalculate derived atmosphere shader parameters
++	//TODO: Find a better way to structure this
++	var atm = canvas.atmosphere;
++	atm.inv_wavelength4 = [1.0 / Math.pow(atm.wavelength_r, 4), 1.0 / Math.pow(atm.wavelength_g, 4), 1.0 / Math.pow(atm.wavelength_b, 4)];
++	atm.innerRadius = 6.371e6;
++	atm.innerRadius2 = atm.innerRadius * atm.innerRadius;
++	atm.outerRadius = atm.innerRadius * atm.scaleHeight;
++	atm.outerRadius2 = atm.outerRadius * atm.outerRadius;
++	atm.krESun = atm.kRayleigh * atm.eSun;
++	atm.kmESun = atm.kMie * atm.eSun;
++	atm.kr4PI = atm.kRayleigh * 4 * Math.PI;
++	atm.km4PI = atm.kMie * 4 * Math.PI;
++	atm.scale = 1.0 / (atm.outerRadius - atm.innerRadius);
++	atm.scaleOverScaleDepth = atm.scale / atm.scaleDepth;
++	atm.g2 = atm.g * atm.g;
++	canvas.atmosphere = atm;
++}
+ function clamp(value, min, max) { //{{{
+ 	return Math.max(min, Math.min(value, max));
+ } //}}}
+@@ -252,106 +292,93 @@
+ 	}
+ } //}}}
+ //}}}
+-//{{{ Interface Functions
++//{{{ Interaction Functions
+ function onTap(ev, canvas) { //{{{
+-	//Sets up a marker on a canvas that will track a point on the mesh. Can be dismissed by closing the display or clicking the marker.
+ 	ev.preventDefault();
+ 	
+-	if (canvas.clouds.enabled) {
+-		for (var i = 0; i < canvas.clouds.quantity; i++) {
+-			raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes["clouds" + i]);
+-		}
+-	}
+-	var hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.unitNode);
+-	if ('cities' in canvas.nodes) {
+-		var hitCities = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes.cities);
+-		canvas.nodes.cities.hit = hitCities;
+-		updateCities(canvas);
+-	}
++	var hit = raycastXY(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.unitNode);
+ 
+-	canvas.brush.hit = hit;
+-	
+-	if (canvas.dataMarkers.enabled) {
+-		canvas.dataMarkers.marker.selector.closed = false;
+-		canvas.dataMarkers.marker.hit = hit;
+-		updateMarker(canvas, true);
+-	}
+-	
+-	brushModify(canvas);
++	//Trigger any handlers attatched to this canvas event.
++	canvas.selector.trigger('onTap', [ev, canvas, hit]);
+ } //}}}
+ function onPan(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+ 	
+-	if (canvas.dataMarkers.enabled) {
+-		if (!isEmptyOrUndefined(canvas.unitNode)) {
+-			canvas.brush.hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.unitNode);
+-			brushModify(canvas);
+-		}
+-	}
+-	
+-	if (canvas.clouds.enabled) {
+-		if (!isEmptyOrUndefined(canvas.nodes['overlay'])) {
+-			canvas.clouds.hit = raycast(canvas, ev.srcEvent.layerX, ev.srcEvent.layerY, canvas.nodes['overlay']);
+-			updateClouds(canvas);
+-		}
+-	}
+-	
+ 	if (ev.type === 'panstart') {
+ 		canvas.lastDeltaX = 0;
+ 		canvas.lastDeltaY = 0;
+ 	}
+-	if (ev.srcEvent.shiftKey || ev.pointers.length === 2) {
+-		if (!canvas.view.panningEnabled) return;
+-		var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
+-		var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
+-		
+-		if (canvas.view.twod) {
+-			canvas.view.position[0] += Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaX - Math.sin(DEG2RAD * 0) * deltaY;
+-			canvas.view.position[2] += Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaX + Math.cos(DEG2RAD * 0) * deltaY;
++	
++	//Trigger any handlers attatched to this canvas event.
++	canvas.selector.trigger('onPan', [ev, canvas]);
++	
++	//If any onPan handler sets preventDefaultOnPan to true, skips default onPan camera behavior
++	if (!canvas.view.preventDefaultOnPan) {
++		//If panning with two fingers or shift key, translate camera center
++		if (ev.srcEvent.shiftKey || ev.pointers.length === 2) {
++			if (canvas.view.panningEnabled) {
++				var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
++				var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.view.zoom * 2 * canvas.controlSensitivity * 6.371e6;
++				
++				//TODO: convert canvas.view.rotation from az/el euler to quaternion
++				if (canvas.view.twod) {
++					canvas.view.position[0] += Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaX - Math.sin(DEG2RAD * 0) * deltaY;
++					canvas.view.position[2] += Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaX + Math.cos(DEG2RAD * 0) * deltaY;
++				}
++				else {
++					canvas.view.position[0] += Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaX - Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaY;
++					canvas.view.position[2] += Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaX + Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaY;
++				}
++			}
+ 		}
++		//Else, rotate around camera center
+ 		else {
+-			canvas.view.position[0] += Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaX - Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaY;
+-			canvas.view.position[2] += Math.sin(DEG2RAD * canvas.view.rotation[0]) * deltaX + Math.cos(DEG2RAD * canvas.view.rotation[0]) * deltaY;
++			canvas.view.rotation[0] += (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth * 2 * canvas.controlSensitivity * RAD2DEG;
++			canvas.view.rotation[1] += (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight * -2 * canvas.controlSensitivity * RAD2DEG;
++			
++			if (canvas.view.rotation[0] > 360) { canvas.view.rotation[0] -= 360; };
++			if (canvas.view.rotation[0] < -360) { canvas.view.rotation[0] += 360; };
++			if (canvas.view.rotation[1] > 180) { canvas.view.rotation[1] -= 360; };
++			if (canvas.view.rotation[1] < -180) { canvas.view.rotation[1] += 360; };
++			
++			canvas.view.rotation[0] = clamp(canvas.view.rotation[0], canvas.view.azimuthLimits[0], canvas.view.azimuthLimits[1]);
++			canvas.view.rotation[1] = clamp(canvas.view.rotation[1], canvas.view.elevationLimits[0], canvas.view.elevationLimits[1]);
++			
++			if (displaylog) { console.log(canvas.view.rotation); }
+ 		}
+-	}
++	}	
+ 	
+-	else {
+-		canvas.view.rotation[0] += (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth * 2 * canvas.controlSensitivity * RAD2DEG;
+-		canvas.view.rotation[1] += (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight * -2 * canvas.controlSensitivity * RAD2DEG;
+-		
+-		if (canvas.view.rotation[0] > 360) { canvas.view.rotation[0] -= 360; };
+-		if (canvas.view.rotation[0] < -360) { canvas.view.rotation[0] += 360; };
+-		if (canvas.view.rotation[1] > 180) { canvas.view.rotation[1] -= 360; };
+-		if (canvas.view.rotation[1] < -180) { canvas.view.rotation[1] += 360; };
+-		
+-		canvas.view.rotation[0] = clamp(canvas.view.rotation[0], canvas.view.azimuthLimits[0], canvas.view.azimuthLimits[1]);
+-		canvas.view.rotation[1] = clamp(canvas.view.rotation[1], canvas.view.elevationLimits[0], canvas.view.elevationLimits[1])
+-	}
++	canvas.view.preventDefaultOnPan = false;
+ 	canvas.lastDeltaX = ev.deltaX;
+ 	canvas.lastDeltaY = ev.deltaY;
+-	
+-	canvas.dataMarkers.reposition = true;
+-	
+-	if (displaylog) { console.log(canvas.view.rotation); }
+ } //}}}
+ function onPinch(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+ 	if (ev.type === 'pinchstart') { canvas.view.lastZoom = canvas.view.zoom; }
+-	else { modifyZoom(ev.scale * canvas.view.lastZoom, canvas, displaylog); }
++	else { modifyZoom(ev.scale * canvas.view.lastZoom, canvas, displaylog, ev, 0); }
+ } //}}}
+ function onZoom(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+-	var delta = clamp(ev.scale || ev.wheelDelta || -ev.detail, -1, 1) * canvas.controlSensitivity * canvas.view.zoom / 20;
+-	modifyZoom(canvas.view.zoom + delta, canvas, displaylog);
++	var delta = clamp(ev.scale || ev.wheelDelta || -ev.detail, -1, 1) * canvas.controlSensitivity * canvas.view.zoom / 2;
++	modifyZoom(canvas.view.zoom + delta, canvas, displaylog, ev, 0);
+ } //}}}
+-function modifyZoom(value, canvas, displaylog) { //{{{
+-	canvas.view.zoom = clamp(value, canvas.view.zoomLimits[0], canvas.view.zoomLimits[1]);
+-	canvas.dataMarkers.reposition = true;
+-	if (displaylog) { console.log(canvas.view.zoom); }
++function modifyZoom(value, canvas, displaylog, ev, duration) { //{{{
++	if (isEmptyOrUndefined(duration)) duration = 200;
++	var targetZoom = clamp(value, canvas.view.zoomLimits[0], canvas.view.zoomLimits[1]);
++	var currentZoom = canvas.view.zoom;
++	animateValue(
++		0,
++		1.0,
++		duration,
++		function(value, info) {
++			canvas.view.zoom = currentZoom * (1 - value) + targetZoom * value;
++			if (displaylog) { console.log(canvas.view.zoom); }
++			
++			//Trigger any handlers attatched to this canvas event.
++			canvas.selector.trigger('onZoom', [ev, canvas]);
++		}
++	);
+ } //}}}
+-function modifyDataMarkersEnabled(value, canvas) { //{{{
+-	canvas.dataMarkers.enabled = value;
+-} //}}}
+ function toggleMoviePlay(canvas) { //{{{
+ 	canvas.animation.play = !canvas.animation.play;
+ 	if (canvas.animation.play){
+@@ -363,291 +390,42 @@
+ 		canvas.playButton.find('span').addClass('fa-play');
+ 	}
+ } //}}}
+-//}}}
+-//{{{ Interaction Functions
+-function raycast(canvas, x, y, node) { //{{{
+-	//Performs raycast on canvas.unitNode.mesh using x/y screen coordinates. Returns hit objects with hit position, coords, and indicies of ray-triangle intersection.
++function screenToWorldPoint(canvas, x, y) { //{{{
++	var viewportX = (x - canvas.width / 2) / (canvas.width / 2);
++	var viewportY = (canvas.height / 2 - y) / (canvas.height / 2);
++	var origin = vec3.transformMat4(vec3.create(), [viewportX, viewportY, 0], canvas.camera.vpInverseMatrix);
++	return origin;
++} //}}}
++function screenToModelRay(canvas, x, y, node) { //{{{
++	var inverseMVPMatrix = mat4.invert(mat4.create(), mat4.multiply(mat4.create(), canvas.camera.vpMatrix, node.modelMatrix));
++	var viewportX = (x - canvas.width / 2) / (canvas.width / 2);
++	var viewportY = (canvas.height / 2 - y) / (canvas.height / 2);
++	var origin = vec3.transformMat4(vec3.create(), [viewportX, viewportY, 0], inverseMVPMatrix);
++	var far = vec3.transformMat4(vec3.create(), [viewportX, viewportY, 1.0], inverseMVPMatrix);
++	var direction = vec3.subtract(vec3.create(), far, origin);
++	return {'origin':origin, 'direction':direction};
++} //}}}
++function raycast(canvas, origin, direction, node) { //{{{
++	//Performs raycast on given node using ray origin and direction vectors.
++	//Returns hit objects with hit position, normals, barycentric coordinates, element number, and indices of ray-triangle intersection.
+ 	//TODO: Diagnose marker issues with orthographic views and slr-eustatic updates when switching between basins.
+-	var inverseMVPMatrix = mat4.invert(mat4.create(), mat4.multiply(mat4.create(), canvas.camera.vpMatrix, node.modelMatrix));
+-	var origin = vec3.transformMat4(vec3.create(), [(x - canvas.width / 2) / (canvas.width / 2), (canvas.height / 2 - y) / (canvas.height / 2), 0], inverseMVPMatrix);
+-	var far = far || vec3.transformMat4(vec3.create(), [(x - canvas.width / 2) / (canvas.width / 2), (canvas.height / 2 - y) / (canvas.height / 2), 1.0], inverseMVPMatrix);
+-	var ray = vec3.subtract(vec3.create(), far, origin);
+-
+-	var mesh = node.mesh;
+-
+-	if (!mesh) { return; }
+-	if (!node.octree) { node.octree = new GL.Octree(mesh); }
++	if (!node.octree) { node.octree = new GL.Octree(node.mesh); }
+ 	
+-	var hit = node.octree.testRay(origin, ray, 1e3, 1e10);
+-	
+-	if(!hit) { return; }
++	var hit = node.octree.testRay(origin, direction, 1e3, 1e10);
++	if (!hit) { return; }
+ 
+-	if (node.name.startsWith("clouds")) { canvas.clouds.selected = node.name; alert("New selected cloud: " + canvas.clouds.selected); }
+-
+ 	hit.modelPos = vec3.copy(vec3.create(), hit.pos);
+ 	vec3.transformMat4(hit.pos, hit.pos, node.modelMatrix);
+-	vec3.transformMat4(hit.normal, hit.normal, node.modelMatrix);
+-
++	
+ 	return hit;
+ } //}}}
+-function updateCities(canvas) {
+-	//Update selected city
+-	var hit = canvas.nodes.cities.hit;
+-	if (hit) {
+-		citiesIndex = Math.floor(hit.indices[0] / ((ArrayMax(canvas.nodes.cities.mesh.getIndexBuffer('triangles').data) + 1) / cities.length));
+-		cityName = cities[citiesIndex];
+-		if (cityName !== $('#gfm-sim-controls-select-city').val()) {
+-			$('#gfm-sim-controls-select-city').val(cityName).selectmenu("refresh");
+-			changeCity(canvas);
+-		}
+-	}
+-}
+-function brushModify(canvas) { //{{{
+-	//This function takes in the canvas and x/y coordinates, performing a raycast against the mesh, and modifies the mesh using a the canvas.brush.strength and canvas.brush.falloff properties.
+-	//Currently the brush extends to the raycasted element and its immediate neighbors.
+-	//TODO: Allow variable brush size/additional neighbors. Allow the function to work on multiple models (currently hardcoded to md model).
+-	if (!canvas.unitNode || canvas.brush.enabled != 'on') { return; }
+-	
+-	var hit = canvas.brush.hit;
+-
+-	if (hit) {
+-		var bufferVertices = canvas.unitNode.mesh.getBuffer('vertices');
+-		var vertices = bufferVertices.data;
+-		var bufferCoords = canvas.unitNode.mesh.getBuffer('coords');
+-		var coords = bufferCoords.data;
+-
+-		//Query nearby elements and store indicies of affected vertices using pregenerated vertexconnectivity list (from NodeConnectivity)
+-		var baseIndices = new Set(hit.indices);
+-		var connectedIndices = new Set(hit.indices);
+-		var connectedElement;
+-		var indices;
+-		var lengthIndex = md.mesh.vertexconnectivity[0].length - 1;
+-		var length;
+-		for (var i = 0; i < 3; i++) {
+-			length = md.mesh.vertexconnectivity[hit.indices[i]][lengthIndex];
+-			for (var j = 0; j < length; j++) {
+-				//Shift elements down by one (matlab 1-based index to 0-based index)
+-				connectedElement = md.mesh.vertexconnectivity[hit.indices[i]][j] - 1;
+-				indices = md.mesh.elements[connectedElement];
+-				connectedIndices.add(indices[0] - 1);
+-				connectedIndices.add(indices[1] - 1);
+-				connectedIndices.add(indices[2] - 1);
+-			}
+-		}
+-
+-		//Apply modifications to included vertices in mesh using brush strength and falloff.
+-		var strength;
+-		for (var index of connectedIndices) {
+-			if (!baseIndices.has(index)) {
+-				strength = canvas.brush.strength * canvas.brush.falloff;
+-			}
+-			else {
+-				strength = canvas.brush.strength;
+-			}
+-			vertices[index*3+2] += strength * 100;
+-			md.geometry.surface[index] += strength;	
+-			md.geometry.thickness[index] += strength;
+-			coords[index*2+1] += strength;
+-			canvas.unitData[index] += strength;
+-		}
+-		
+-		//Update mesh on GPU
+-		bufferVertices.upload(canvas.gl.DYNAMIC_DRAW);
+-		bufferCoords.upload(canvas.gl.DYNAMIC_DRAW);
+-		canvas.unitNode.octree = new GL.Octree(canvas.unitNode.mesh);	
+-	}
++function raycastXY(canvas, x, y, node) { //{{{
++	//Performs raycast on given node using x and y screenspace coordinates.
++	//Returns hit objects with hit position, normals, barycentric coordinates, element number, and indices of ray-triangle intersection.
++	//TODO: Diagnose marker issues with orthographic views and slr-eustatic updates when switching between basins.
++	var ray = screenToModelRay(canvas, x, y, node);
++	return raycast(canvas, ray.origin, ray.direction, node);
+ } //}}}
+-function updateClouds(canvas) {
+-	//Update clouds if rendered
+-	//TODO: Steven, the hit now queries the radaroverlay.
+-	if (canvas.nodes[canvas.clouds.selected]) {
+-		var v1 = vec3.fromValues(vertices[hit.indices[0] * 3], vertices[hit.indices[0] * 3 + 1], vertices[hit.indices[0] * 3 + 2]);
+-		var v2 = vec3.fromValues(vertices[hit.indices[1] * 3], vertices[hit.indices[1] * 3 + 1], vertices[hit.indices[1] * 3 + 2]);
+-		var v3 = vec3.fromValues(vertices[hit.indices[2] * 3], vertices[hit.indices[2] * 3 + 1], vertices[hit.indices[2] * 3 + 2]);
+-		vec3.transformMat4(v1, v1, canvas.unitNode.modelMatrix);//move out of brushModify, perhaps onto onPan
+-		vec3.transformMat4(v2, v2, canvas.unitNode.modelMatrix);
+-		vec3.transformMat4(v3, v3, canvas.unitNode.modelMatrix);
+-		var x  = (v1[0] + v2[0] + v3[0]) / 3;// + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
+-		var y  = (v1[1] + v2[1] + v3[1]) / 3;// + Math.floor((Math.random() * (1 + 10000 - (-10000)) + (-10000)));
+-		var z  = (v1[2] + v2[2] + v3[2]) / 3;
+-		canvas.nodes[canvas.clouds.selected].translation = [x, y + canvas.clouds.height, z];
+-		updateModelMatrix(canvas.nodes[canvas.clouds.selected]);
+-	}
+-}
+-function initializeMarker(canvas) { //{{{
+-	//Initialize data marker and tooltip display once per page load
+-	var marker = $('#' + canvas.dataMarkers.marker.id);
+-	var size = canvas.dataMarkers.size;
+-	if (!marker.hasClass('tooltipstered')) {
+-		marker.css({
+-			'position': 'absolute',
+-			'left': -size[0] + 'px',
+-			'top': -size[1] + '0px',
+-			'width': size[0] + 'px',
+-			'height': size[1] + 'px',
+-			'pointer-events': 'all',
+-			'cursor': 'pointer',
+-			'display': 'none'
+-		});
+-		marker.tooltipster({
+-			contentAsHTML: true,
+-			maxWidth: 320,
+-			maxHeight: 320,
+-			zIndex: 1000,
+-			trigger: 'custom',
+-			triggerOpen: {
+-				mouseenter: false,
+-				originClick: true,
+-				touchstart: false
+-			},
+-			triggerClose: {
+-				mouseleave: false,
+-				originClick: true,
+-				touchleave: false
+-			},
+-		});
+-		marker.on('click touch', function () {
+-			marker.fadeOut(175);
+-			marker.tooltipster('close');
+-			marker.closed = true;
+-		});
+-		marker.closed = false;
+-		canvas.dataMarkers.marker.selector = marker;
+-	}
+-	updateMarker(canvas, true);
+-} //}}}
+-function repositionMarker(canvas) { //{{{
+-	//Mover marker to point to mouse position, offset in y by 1 to enable immediate clicking.
+-	//Return if no marker hit exists, the camera is not rendering, or if no reposition has been scheduled.
+-	if (isEmptyOrUndefined(canvas.dataMarkers.marker.hit) || !canvas.camera.ready || !canvas.dataMarkers.reposition) { return; }
+-	var size = canvas.dataMarkers.size;
+-	var screenPoint = vec3.transformMat4(vec3.create(), canvas.dataMarkers.marker.hit.pos, canvas.camera.vpMatrix);
+-	var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
+-	var y = (-screenPoint[1] + 1.0) * (canvas.height / 2) + canvas.selector.offset().top;
+-	canvas.dataMarkers.marker.selector.css({
+-		'left': (Math.round(x) - size[0] / 2) + 'px', 
+-		'top': (Math.round(y) - size[1] + 1) + 'px'
+-	});
+-	if (canvas.dataMarkers.marker.selector.tooltipster('status').state != 'closed') { canvas.dataMarkers.marker.selector.tooltipster('reposition'); }
+-	canvas.dataMarkers.reposition = false;
+-} //}}}
+-function updateMarker(canvas, reset) { //{{{
+-	//Retrieve data value fields and plots them on data marker popup if a hit has been registered.
+-	//TODO: Automatically pick up any field of size md.mesh.numberofelements
+-	//If no marker has been placed, no update is needed. If canvas is resimulating and unitNode has not been set yet, wait and try again.
+-	if (!canvas.dataMarkers.enabled || isEmptyOrUndefined(canvas.dataMarkers.marker.hit)) { return; }
+-	if (isEmptyOrUndefined(canvas.unitNode) || isEmptyOrUndefined(canvas.unitNode.mesh)) { setTimeout( function(){ updateMarker(canvas, reset); }, 750); return; }
+-	
+-	var hit = canvas.dataMarkers.marker.hit;
+-	
+-	var coords = canvas.unitNode.mesh.vertexBuffers.coords.data;
+-	var latitude = md.mesh.lat;
+-	var longitude = md.mesh.long;
+-	var thickness;
+-	var velocity;
+-	if (md.results[0]) {
+-		thickness = md.results[canvas.animation.frame].Thickness;
+-		velocity = md.results[canvas.animation.frame].Vel;
+-	}
+-	else {
+-		thickness = md.geometry.thickness;
+-		velocity = md.initialization.vel;
+-	}
+-	
+-	//Construct new argument array of the data display format for sprintf using first first argument as the formatSpecifier string and the rest as the additional arguments.
+-	var labels = canvas.dataMarkers.labels.slice();
+-	for (var i = 0; i < labels.length; i++) {
+-		if (labels[i].toLowerCase() === 'x') { labels[i] = hit.modelPos[0]; }
+-		else if (labels[i].toLowerCase() === 'y') { labels[i] = hit.modelPos[1]; }
+-		else if (labels[i].toLowerCase() === 'z') { labels[i] = hit.modelPos[2]; }
+-		else if (labels[i].toLowerCase() === 'latitude') {
+-			var hitLatitude = [latitude[hit.indices[0]], latitude[hit.indices[1]], latitude[hit.indices[2]]];
+-			var valueLatitude = Math.abs(hitLatitude[0] * hit.uvw[0] + hitLatitude[1] * hit.uvw[1] + hitLatitude[2] * hit.uvw[2]);
+-			labels[i] = valueLatitude;
+-		}
+-		else if (labels[i].toLowerCase() === 'longitude') {
+-			var hitLongitude = [longitude[hit.indices[0]], longitude[hit.indices[1]], longitude[hit.indices[2]]];
+-			var valueLongitude = Math.abs(hitLongitude[0] * hit.uvw[0] + hitLongitude[1] * hit.uvw[1] + hitLongitude[2] * hit.uvw[2]);
+-			labels[i] = valueLongitude;
+-		}
+-		else if (labels[i].toLowerCase() === 'thickness') {
+-			var hitThickness = [thickness[hit.indices[0]], thickness[hit.indices[1]], thickness[hit.indices[2]]];
+-			var valueThickness = hitThickness[0] * hit.uvw[0] + hitThickness[1] * hit.uvw[1] + hitThickness[2] * hit.uvw[2];
+-			labels[i] = valueThickness; 
+-		}
+-		else if (labels[i].toLowerCase() === 'velocity') {
+-			var hitVelocity = [velocity[hit.indices[0]], velocity[hit.indices[1]], velocity[hit.indices[2]]];
+-			var valueVelocity = hitVelocity[0] * hit.uvw[0] + hitVelocity[1] * hit.uvw[1] + hitVelocity[2] * hit.uvw[2];	
+-			labels[i] = valueVelocity; 
+-		}
+-		else if (labels[i].toLowerCase() === 'value') {
+-			var hitCoords = [coords[hit.indices[0]*2], coords[hit.indices[0]*2+1], coords[hit.indices[1]*2], coords[hit.indices[1]*2+1], coords[hit.indices[2]*2], coords[hit.indices[2]*2+1]];
+-			var u = hitCoords[0] * hit.uvw[0] + hitCoords[2] * hit.uvw[1] + hitCoords[4] * hit.uvw[2];
+-			var v = hitCoords[1] * hit.uvw[0] + hitCoords[3] * hit.uvw[1] + hitCoords[5] * hit.uvw[2];
+-			var value = canvas.unitNode.caxis[0] * (1.0 - v) + canvas.unitNode.caxis[1] * v;
+-			labels[i] = value; 
+-		}
+-	}
+-	
+-	//Apply changes to tooltip
+-	$('#tooltip-content-data-marker-' + canvas.id).html(sprintf.apply(null, canvas.dataMarkers.format.concat(labels)));
+-	$('#tooltip-content-data-marker-' + canvas.id).css({'font': canvas.dataMarkers.font});				
+-	
+-	//If animated, setup animation loop to update plot as movie plays.
+-	if (canvas.dataMarkers.animated) {
+-		var isEmpty = (canvas.dataMarkers.values.length === 0);
+-		var lastUpdatedIndex = (canvas.dataMarkers.values.length - 1);
+-		var newMovieFrame = (!isEmpty && canvas.dataMarkers.values[lastUpdatedIndex][0] != canvas.animation.frame);
+-		//If new data marker has been placed, reinitialize plot. If not, push new value into plot value array.
+-		if (reset) {
+-			canvas.dataMarkers.values = [];
+-			newMovieFrame = true;
+-			for (var currentFrame = 0; currentFrame < (canvas.unitNode.movieLength); currentFrame++) {
+-				coords = canvas.unitMovieData[currentFrame];
+-				var hitCoords = [coords[hit.indices[0]*2], coords[hit.indices[0]*2+1], coords[hit.indices[1]*2], coords[hit.indices[1]*2+1], coords[hit.indices[2]*2], coords[hit.indices[2]*2+1]];
+-				var u = hitCoords[0] * hit.uvw[0] + hitCoords[2] * hit.uvw[1] + hitCoords[4] * hit.uvw[2];
+-				var v = hitCoords[1] * hit.uvw[0] + hitCoords[3] * hit.uvw[1] + hitCoords[5] * hit.uvw[2];
+-				var value = canvas.unitNode.caxis[0] * (1.0 - v) + canvas.unitNode.caxis[1] * v;
+-				canvas.dataMarkers.values.push([currentFrame, value]);
+-			}
+-		}
+-		else {
+-			if (canvas.animation.lastFrame > canvas.animation.frame) {
+-				canvas.dataMarkers.values = [];
+-			}
+-			if (isEmpty || newMovieFrame) {
+-				coords = canvas.unitMovieData[canvas.animation.frame];
+-				var hitValues = [coords[hit.indices[0]], coords[hit.indices[1]], coords[hit.indices[2]]];
+-				var value = hitValues[0] * hit.uvw[0] + hitValues[1] * hit.uvw[1] + hitValues[2] * hit.uvw[2];	
+-				canvas.dataMarkers.values.push([canvas.animation.frame, value]);
+-			}
+-		}
+-		
+-		//Replot data marker popup using update data value array.
+-		if (isEmpty || newMovieFrame) {
+-			var dataLabels = {'latitude': valueLatitude, 'longitude': valueLongitude, 'thickness': valueThickness, 'velocity': valueVelocity, 'value': value};
+-			var dataDisplay = canvas.dataMarkers.values.slice(0, canvas.animation.frame + 1);		
+-			plot(
+-				'id', '#sim-plot', 
+-				'type', 'bar', 
+-				'width', 400, 
+-				'height', 300, 
+-				'nticks', 25, 
+-				'xlabel', 'Time', 
+-				'ylabel', 'Value', 
+-				'title', 'Changes Over Time', 
+-				'datalabels', canvas.dataMarkers.labels,
+-				'labelvalues', dataLabels,
+-				'data', dataDisplay
+-			);
+-		}
+-	}
+-	canvas.dataMarkers.reposition = true;
+-	if (reset && !canvas.dataMarkers.marker.selector.closed) {
+-		canvas.dataMarkers.marker.selector.fadeIn(175);
+-		canvas.dataMarkers.marker.selector.tooltipster('open');
+-	}
+-} //}}}
+ function animateValue(current, target, duration, stepCallback, doneCallback) { //{{{
+ 	//Animates scalar value for length duration, calling callback each step.
+ 	//TODO: Specify lerp easing as option (cubic, linear, cosine).
+@@ -668,24 +446,31 @@
+ 	var azimuthRotationMatrix = mat4.create();
+ 	var elevationRotationMatrix = mat4.create();
+ 	var aspectRatio = canvas.clientWidth / canvas.clientHeight;
+-	var cameraPosition = vec3.create();
++	var camera = canvas.camera;
++	var view = canvas.view;
+ 
+-	if (canvas.view.twod) { mat4.ortho(pMatrix, -aspectRatio*6.371e6/canvas.view.zoom, aspectRatio*6.371e6/canvas.view.zoom, -6.371e6/canvas.view.zoom, 6.371e6/canvas.view.zoom, canvas.camera.near, canvas.camera.far); }
+-	else { mat4.perspective(pMatrix, canvas.camera.fov * DEG2RAD, aspectRatio, canvas.camera.near, canvas.camera.far); }
++	if (view.twod) { mat4.ortho(pMatrix, -aspectRatio*6.371e6/view.zoom, aspectRatio*6.371e6/view.zoom, -6.371e6/view.zoom, 6.371e6/view.zoom, camera.near, camera.far); }
++	else { mat4.perspective(pMatrix, camera.fov * DEG2RAD, aspectRatio, camera.near, camera.far); }
+ 	
+ 	//Apply worldspace translation
+-	mat4.translate(vMatrix, translateMatrix, vec3.negate(vec3.create(), canvas.view.position));
++	mat4.translate(vMatrix, translateMatrix, vec3.negate(vec3.create(), view.position));
+ 	
+ 	//Calculate rotation around camera focal point about worldspace origin
+-	if (canvas.view.twod) {
++	if (view.twod) {
+ 		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, -DEG2RAD * 0, [0, 1, 0]);
+ 		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, DEG2RAD * 90, [1, 0, 0]);
+ 		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
+ 	}
+ 	else {
+-		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, -DEG2RAD * (canvas.view.rotation[0] + 90), [0, 1, 0]);
+-		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, DEG2RAD * canvas.view.rotation[1], [1, 0, 0]);
++		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, -DEG2RAD * (view.rotation[0] + 90), [0, 1, 0]);
++		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, DEG2RAD * view.rotation[1], [1, 0, 0]);
+ 		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
++		//var quaternionWorldX = Node.prototype.eulerToQuaternion(0, 0, DEG2RAD * (view.rotation[0]));
++		//var quaternionWorldY = Node.prototype.eulerToQuaternion(0, DEG2RAD * (view.rotation[1]), 0);
++		//var quaternionWorldZ = Node.prototype.eulerToQuaternion(DEG2RAD * (view.rotation[2]), 0, 0);
++		//var quaternionTemp = quat.multiply(quat.create(), quaternionWorldY, quaternionWorldX);
++		//quat.multiply(camera.rotation, quaternionWorldZ, quaternionTemp);
++		//mat4.fromQuat(rotationMatrix, camera.rotation);	
+ 	}
+ 
+ 	//Apply rotation transform
+@@ -693,20 +478,22 @@
+ 	
+ 	//Apply screenspace translation to emulate rotation around point
+ 	mat4.identity(translateMatrix);
+-	mat4.translate(translateMatrix, translateMatrix, [0.0, 0.0, -6.371e6/canvas.view.zoom]);
++	mat4.translate(translateMatrix, translateMatrix, [0.0, 0.0, -6.371e6/view.zoom]);
+ 	mat4.multiply(vMatrix, translateMatrix, vMatrix);
+ 	
+ 	//Apply projection matrix to get camera matrix
+-	mat4.copy(canvas.camera.vMatrix, vMatrix);
+-	mat4.multiply(canvas.camera.vpMatrix, pMatrix, vMatrix);
++	mat4.copy(camera.vMatrix, vMatrix);
++	mat4.multiply(camera.vpMatrix, pMatrix, vMatrix);
+ 	
+ 	//Calculate inverse view matrix fields for lighting and raycasts
+-	mat4.invert(canvas.camera.vInverseMatrix, canvas.camera.vMatrix);
+-	mat4.invert(canvas.camera.vpInverseMatrix, canvas.camera.vpMatrix);
++	mat4.invert(camera.vInverseMatrix, camera.vMatrix);
++	mat4.invert(camera.vpInverseMatrix, camera.vpMatrix);
+ 	
+-	vec3.transformMat4(canvas.camera.position, cameraPosition, canvas.camera.vpInverseMatrix);
+-	canvas.camera.ready = true;
+-	repositionMarker(canvas);
++	vec3.transformMat4(camera.position, vec3.create(), camera.vInverseMatrix);
++	vec3.sub(camera.relativePosition, camera.position, view.position);
++	vec3.normalize(camera.direction, camera.relativePosition);
++	
++	camera.ready = true;
+ }//}}}
+ function drawSceneGraphNode(canvas, node) { //{{{
+ 	if (!node.enabled) { return; }
+@@ -717,13 +504,12 @@
+ 	var mvpMatrix = mat4.create();
+ 	mat4.multiply(mvpMatrix, canvas.camera.vpMatrix, node.modelMatrix);
+ 	
+-	var mvMatrix = mat4.create();
+-	mat4.multiply(mvMatrix, canvas.camera.vMatrix, node.modelMatrix);
++	var normalMatrix = mat3.create();
++	var tempMatrix = mat4.create();
++	mat4.invert(tempMatrix, node.modelMatrix);
++	mat4.transpose(tempMatrix, tempMatrix);
++	mat3.fromMat4(normalMatrix, tempMatrix);
+ 	
+-	var normalMatrix = mat4.create();
+-	mat4.invert(normalMatrix, node.modelMatrix);
+-	mat4.transpose(normalMatrix, normalMatrix);
+-	
+ 	if (node.texture) { node.texture.bind(0); }
+ 	if (node.disableDepthTest) { gl.disable(gl.DEPTH_TEST); }
+ 	if (node.enableCullFace) { gl.enable(gl.CULL_FACE); }
+@@ -731,88 +517,75 @@
+ 	gl.cullFace(node.cullFace);
+ 	gl.lineWidth(node.lineWidth);
+ 	gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+-
++	
+ 	//Setup for light that originates from camera
+-	var origin = vec3.fromValues(0, 0, 0);
+-	var lightOrigin = vec3.fromValues(0, 0, 0);
+-	var cameraPositionRelative = vec3.create();
+-	vec3.transformMat4(origin, origin, canvas.camera.vInverseMatrix);
+-	vec3.normalize(lightOrigin, lightOrigin);
+-	vec3.sub(cameraPositionRelative, origin, node.translation);
+-	cameraHeight = vec3.length(cameraPositionRelative);
++	var atm = canvas.atmosphere;
++	var lightOrigin = vec3.create();
+ 	
+-	var atm = { 					//Default Values
+-		wavelength_r: 0.65, 		//0.65		Red wavelength (micrometers)
+-		wavelength_g: 0.57,			//0.57		Green wavelength (micrometers)
+-		wavelength_b: 0.475,		//0.475		Green wavelength (micrometers)
+-		eSun: 100.0,				//20.0		Sun intensity	
+-		kRayleigh: 0.0025,			//0.0025	Rayleigh scattering amount
+-		kMie: 0.000, 				//0.01		Mie scattering amount
+-		g: -0.99,					//-0.99		Mie phase asymmetry/direction factor
+-		hdr_exposure: 0.8,			//0.8		High Dynamic Range Exposure
+-		scale: 1.25, 				//1.025		Scale of atmosphere. WARNING: Change atmosphereScale in applyoptions.js, and scaling constants.
+-		scaleDepth: 0.25, 			//0.25		Percentage altitude at which the atmosphere's average density is found
+-		a: -0.00287,				//-0.00287	Scaling constant a
+-		b: 0.459,					//0.459		Scaling constant b
+-		c: 3.83,					//3.83		Scaling constant c
+-		d: -6.80,					//-6.80		Scaling constant d
+-		e: 3.6,						//5.25		Scaling constant e. Lower when increasing atmosphere scale.
+-		attenuation: 0.5			//0.5		Strength of atmospheric scattering on ground shading.
+-	};
+-			
+-	var inv_wavelength4 = [1.0 / Math.pow(atm.wavelength_r, 4), 1.0 / Math.pow(atm.wavelength_g, 4), 1.0 / Math.pow(atm.wavelength_b, 4)];
+-	var innerRadius = 6.371e6;
+-	var outerRadius = innerRadius*atm.scale;
+-	var scale = 1.0 / (outerRadius - innerRadius);
+-	var scaleDepth = atm.scaleDepth;
+-	
+ 	node.shader.uniforms({
+-		m4MVP: mvpMatrix,
+-		m4Normal: normalMatrix,
+-		m4Model: node.modelMatrix,
+-		u_lightPosition: lightOrigin,
+-		//u_lightPosition: [1.0, 1.0, 1.0],
+-		u_diffuseColor: node.diffuseColor,
+-		u_texture: 0,
+-		u_alpha: node.alpha,
+-		u_maskZerosColor: node.maskZerosColor,
+-		u_maskZerosEnabled: node.maskZerosEnabled,
+-		u_maskZerosTolerance: node.maskZerosTolerance,
+-		u_maskZerosZeroValue: node.maskZerosZeroValue,
+-		u_maskEnabled: node.maskEnabled,
+-		u_maskHeight: node.maskHeight,
+-		u_maskColor: node.maskColor,
+-		u_pointSize: node.pointSize,
+-		v3CameraPosition: origin,
+-		v3Translate: node.translation,
+-		v3LightPos: lightOrigin,
+-		v3InvWavelength: inv_wavelength4,
+-		fOuterRadius: outerRadius,
+-		fOuterRadius2: outerRadius * outerRadius,
+-		fInnerRadius: innerRadius,
+-		fInnerRadius2: innerRadius * innerRadius,
+-		fKrESun: atm.kRayleigh * atm.eSun, 
+-		fKmESun: atm.kMie * atm.eSun, 
+-		fKr4PI: atm.kRayleigh * 4 * Math.PI, 
+-		fKm4PI: atm.kMie * 4 * Math.PI,
+-		fScale: scale, 
+-		fScaleDepth: scaleDepth,
+-		fScaleOverScaleDepth: scale/scaleDepth, 
+-		v3LightPosFrag: lightOrigin,
+-		fHdrExposure: atm.hdr_exposure,	
+-		g: atm.g,			
+-		g2: atm.g * atm.g,
+-		a: atm.a,
+-		b: atm.b,
+-		c: atm.c,
+-		d: atm.d,		
+-		e: atm.e,
+-		attenuation: atm.attenuation
++		m4MVP: 					mvpMatrix,
++		m3Normal: 				normalMatrix,
++		m4Model: 				node.modelMatrix,
++		u_alpha: 				node.alpha,
++		u_ambientColor: 		node.ambientColor,
++		u_cameraPosition: 		canvas.camera.position,
++		u_diffuseColor: 		node.diffuseColor,
++		u_lightDirection: 		canvas.camera.direction,
++		u_lightingBias: 		node.lightingBias,
++		u_maskZerosColor: 		node.maskZerosColor,
++		u_maskZerosEnabled: 	node.maskZerosEnabled,
++		u_maskZerosTolerance: 	node.maskZerosTolerance,
++		u_maskZerosZeroValue: 	node.maskZerosZeroValue,
++		u_maskEnabled: 			node.maskEnabled,
++		u_maskHeight: 			node.maskHeight,
++		u_maskColor: 			node.maskColor,
++		u_pointSize: 			node.pointSize,
++		u_specularColor: 		node.specularColor,
++		u_specularPower: 		node.specularPower,
++		u_specularStrength: 	node.specularStrength,
++		u_texture: 				0,
++		v3CameraPosition: 		canvas.camera.position,
++		v3Translate: 			node.translation,
++		v3LightPos: 			lightOrigin,
++		v3InvWavelength: 		atm.inv_wavelength4,
++		fOuterRadius: 			atm.outerRadius,
++		fOuterRadius2: 			atm.outerRadius2,
++		fInnerRadius: 			atm.innerRadius,
++		fInnerRadius2: 			atm.innerRadius2,
++		fKrESun: 				atm.krESun,
++		fKmESun: 				atm.kmESun,
++		fKr4PI: 				atm.kr4PI,
++		fKm4PI: 				atm.km4PI,
++		fScale: 				atm.scale, 
++		fScaleDepth: 			atm.scaleDepth,
++		fScaleOverScaleDepth: 	atm.scaleOverScaleDepth, 
++		v3LightPosFrag: 		lightOrigin,
++		fHdrExposure: 			atm.hdr_exposure,	
++		g: 						atm.g,			
++		g2: 					atm.g2,
++		a: 						atm.a,
++		b: 						atm.b,
++		c: 						atm.c,
++		d: 						atm.d,		
++		e: 						atm.e,
++		attenuation: 			atm.attenuation
+ 	}).draw(node.mesh, node.drawMode, 'triangles');
+ 	
+ 	gl.enable(gl.DEPTH_TEST);
+ 	gl.disable(gl.CULL_FACE);
+ } //}}}
++function canvasResize(canvas) {
++	var rect = canvas.getBoundingClientRect();
++	canvas.width  = rect.width;
++	canvas.height = rect.height;
++	canvas.gl.viewport(0, 0, canvas.width, canvas.height);
++	
++	if (!isEmptyOrUndefined(canvas.overlaycanvas)) {
++		rect = canvas.overlaycanvas.getBoundingClientRect();
++		canvas.overlaycanvas.width  = rect.width;
++		canvas.overlaycanvas.height = rect.height;
++	}
++}
+ function draw(canvas) { //{{{
+ 	//Ensure all nodes are ready to render
+ 	//TODO: Come up with better way to check if shaders are ready, or move outside of main draw function
+@@ -832,21 +605,21 @@
+ 	
+ 	//Begin rendering nodes
+ 	if (canvas.draw.ready) {
+-		var rect = canvas.getBoundingClientRect();
+-		canvas.width  = rect.width;
+-		canvas.height = rect.height;
++		//Handle canvas resizing and viewport/screenspace coordinate synchronization
++		canvasResize(canvas);	
+ 		
+ 		var gl = canvas.gl;
+ 		gl.makeCurrent(); //litegl function to handle switching between multiple canvases
+-		gl.viewport(0, 0, canvas.width, canvas.height);
+ 		gl.clearColor(canvas.backgroundcolor[0], canvas.backgroundcolor[1], canvas.backgroundcolor[2], canvas.backgroundcolor[3]);
+ 		gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+ 		
+ 		updateCameraMatrix(canvas);
+ 		
+-		if (canvas.textcanvas) { canvas.textcanvas.draw(canvas); }
+-		if (canvas.overlaycanvas) { canvas.overlaycanvas.draw(canvas); }
++		//Trigger any handlers attatched to this canvas event.
++		canvas.selector.trigger('onPreRender', [canvas]);
+ 		
++		for (var handler in canvas.overlayHandlers) { canvas.overlayHandlers[handler](canvas); }
++		
+ 		var drawPassNumber = 3;
+ 		for (var i = drawPassNumber - 1; i >= 0; --i) {
+ 			for (var node in nodes) {
+Index: ../trunk-jpl/src/m/plot/plot_overlay.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 21911)
+@@ -40,7 +40,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+@@ -51,11 +51,13 @@
+ 		'canvas', canvas,
+ 		'options', options,
+ 		'name', 'overlay',
+-		'shaderName', 'ground' in options.getfieldvalue('render', {}) ? 'GroundFromSpace' : 'Textured',
++		'shaderName', 'ground' in options.getfieldvalue('render', {}) ? 'GroundFromSpace' : 'TexturedDiffuse',
+ 		'alpha', options.getfieldvalue('outeralpha', 1.0),
+ 		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
+ 		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
+-		'diffuseColor', 'white',
++		'ambientColor', [0.1, 0.1, 0.1 ,1.0],
++		'diffuseColor', [1.0, 1.0, 1.0 ,1.0],
++		'specularStrength', 0.0,
+ 		'maskEnabled', options.getfieldvalue('outermask','off') == 'on',
+ 		'maskHeight', options.getfieldvalue('outermaskheight', 150.0),
+ 		'maskColor', options.getfieldvalue('outermaskcolor',[0.0, 0.0, 1.0, 1.0]),
+@@ -64,12 +66,12 @@
+ 		'scale', scale
+ 	);
+ 	//}}}
+-	
++
+ 	var xRange = xlim[1] - xlim[0];
+ 	var yRange = ylim[1] - ylim[0];
+ 	var coordArray = [new Array(x.length), new Array(x.length)];
++	
+ 	//generate mesh:
+-	
+ 	if (md.mesh.classname() == 'mesh3dsurface') {
+ 		var xyz, magnitude;
+ 		for(var i = 0; i < x.length; i++){
+@@ -86,5 +88,5 @@
+ 			coordArray[1][i] = (vertices[1][i] - ylim[0]) / yRange;
+ 		}
+ 	}
+-	node.patch('Faces', elements, 'Vertices', vertices, 'FaceVertexCData', coordArray, 'FaceColor', 'interp', 'EdgeColor', edgecolor);
++	node.patch('Faces', elements, 'Vertices', vertices, 'FaceVertexCData', coordArray, 'FaceColor', 'interp');
+ } //}}}
+Index: ../trunk-jpl/src/m/plot/plot_quiver.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 21911)
+@@ -36,7 +36,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+Index: ../trunk-jpl/src/m/plot/plot_unit.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/plot_unit.js	(revision 21911)
+@@ -12,7 +12,7 @@
+ 	//	return;
+ 	//}
+ 	//else {
+-		
++
+ 	//{{{ declare variables:
+ 	//Process data and model
+ 	var meshresults = processmesh(md, data, options);
+@@ -36,23 +36,25 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, options.getfieldvalue('heightscale', 1));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+ 	//Compute gl variables:
+-	var edgecolor = options.getfieldvalue('edgecolor', 'black');
++	var edgecolor = options.getfieldvalue('edgecolor', [1.0, 1.0, 1.0 ,1.0]);
+ 	var maskzeros = options.getfieldvalue('maskzeros', {});
+ 	var node = new Node(
+ 		'canvas', canvas,
+ 		'options', options,
+ 		'name', 'unit',
+-		'shaderName', 'Textured',
++		'shaderName', 'TexturedDiffuse',
+ 		'alpha', options.getfieldvalue('alpha', 1.0),
+ 		'caxis', options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]),
+ 		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
+ 		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
++		'lightingBias', 0.8,
+ 		'diffuseColor', edgecolor,
++		'specularStrength', 0.0,
+ 		'enabled', options.getfieldvalue('nodata','off') == 'off',
+ 		'log', options.getfieldvalue('log',false),
+ 		'maskEnabled', options.getfieldvalue('innermask','off') == 'on',
+Index: ../trunk-jpl/src/m/plot/webgl_node.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl_node.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/webgl_node.js	(revision 21911)
+@@ -5,7 +5,7 @@
+ //		node=new Node('canvas', canvas);
+ 
+ function Node() { //{{{
+-	//properties 
++	//properties
+ 	// {{{
+ 	var args = Array.prototype.slice.call(arguments);
+ 	var options = new pairoptions(args.slice(0,args.length));
+@@ -14,52 +14,96 @@
+ 	this.options = options.getfieldvalue('options', 							null),
+ 	this.gl = canvas.gl;
+ 	
+-	this.alpha = options.getfieldvalue('alpha', 								1.0),
+-	this.animation = options.getfieldvalue('animation', 						{}),
+-	this.arrays = options.getfieldvalue('arrays', 								{}),
+-	this.caxis = options.getfieldvalue('caxis', 								[0.0, 1.0]),
+-	this.center = options.getfieldvalue('center', 								vec3.create()),
+-	this.cullFace = options.getfieldvalue('cullFace', 							this.gl.BACK),
+-	this.computeIndices = options.getfieldvalue('computeIndices', 				true),
+-	this.disableDepthTest = options.getfieldvalue('disableDepthTest', 			false),
+-	this.diffuseColor = options.getfieldvalue('diffuseColor', 					[0.0, 0.0, 0.0, 1.0]),
+-	this.drawMode = options.getfieldvalue('drawMode', 							this.gl.TRIANGLES),
+-	this.drawOrder = options.getfieldvalue('drawOrder', 						1),
+-	this.enabled = options.getfieldvalue('enabled', 							true),
+-	this.enableCullFace = options.getfieldvalue('enableCullFace', 				true),
+-	this.hideOcean = options.getfieldvalue('hideOcean', 						false),
+-	this.lineWidth = options.getfieldvalue('lineWidth', 						1.0),
+-	this.log = options.getfieldvalue('log', 									false),
+-	this.maskColor = options.getfieldvalue('maskColor', 						vec4.fromValues(0.0, 0.0, 1.0, 1.0)),
+-	this.maskEnabled = options.getfieldvalue('maskEnabled', 					false),
+-	this.maskHeight = options.getfieldvalue('maskHeight', 						150.0),
+-	this.maskZerosColor = options.getfieldvalue('maskZerosColor', 				[1.0, 1.0, 1.0, 1.0]),
+-	this.maskZerosEnabled = options.getfieldvalue('maskZerosEnabled', 			false),
+-	this.maskZerosTolerance = options.getfieldvalue('maskZerosTolerance', 		1e-6),
+-	this.maskZerosZeroValue = options.getfieldvalue('maskZerosZeroValue', 		0.5),
+-	this.mesh = options.getfieldvalue('mesh', 									undefined),
+-	this.name = options.getfieldvalue('name', 									'node'),
+-	this.nanIndices = options.getfieldvalue('nanIndices', 						new Set()),
+-	this.octree = options.getfieldvalue('octree', 								undefined),
+-	this.pointSize = options.getfieldvalue('pointSize', 						15.0),
+-	this.shaderName = options.getfieldvalue('shaderName', 						'Colored'),
+-	this.shader = options.getfieldvalue('shader', 								this.gl.shaders[this.shaderName]),
+-	this.texture = options.getfieldvalue('texture', 							undefined),
+-	this.scale = options.getfieldvalue('scale', 								vec3.fromValues(1, 1, 1)),
+-	this.rotation = options.getfieldvalue('rotation', 							vec3.create()),
+-	this.translation = options.getfieldvalue('translation', 					vec3.create()),
+-	this.modelMatrix = options.getfieldvalue('modelMatrix', 					mat4.create()),
+-	this.rotationMatrix = options.getfieldvalue('rotationMatrix', 				mat4.create()),
+-	this.inverseModelMatrix = options.getfieldvalue('inverseModelMatrix', 		mat4.create()),
+-	this.inverseRotationMatrix = options.getfieldvalue('inverseRotationMatrix', mat4.create())
++	this.alpha = options.getfieldvalue('alpha', 								1.0);									//Shading transparency.
++	this.ambientColor = options.getfieldvalue('ambientColor', 					[0.0, 0.0, 0.0, 1.0]);					//Ambient color used in lighting.
++	this.animation = options.getfieldvalue('animation', 						{});									//Animtation parameters.
++	this.arrays = options.getfieldvalue('arrays', 								{});									//Storage for webgl arrays.
++	this.caxis = options.getfieldvalue('caxis', 								[0.0, 1.0]);							//Color axis for texturing.
++	this.center = options.getfieldvalue('center', 								vec3.create());							//Center of rotation/scaling.
++	this.cullFace = options.getfieldvalue('cullFace', 							this.gl.BACK);							//GL enum for face culling back/front faces.
++	this.computeIndices = options.getfieldvalue('computeIndices', 				true);									//Specifies whether or not indices need to be computed during patching.
++	this.disableDepthTest = options.getfieldvalue('disableDepthTest', 			false);									//GL enum for enabling/disabling depth testing.
++	this.diffuseColor = options.getfieldvalue('diffuseColor', 					[0.0, 0.0, 0.0, 1.0]);					//Diffuse color in vec4 rgba format.
++	this.drawMode = options.getfieldvalue('drawMode', 							this.gl.TRIANGLES);						//GL enum for draw mode.
++	this.drawOrder = options.getfieldvalue('drawOrder', 						1);										//Drawing order for non-depth tested/transparent objects. Higher numbers are drawn. first.
++	this.enabled = options.getfieldvalue('enabled', 							true);									//Toggles display of this nodde.
++	this.enableCullFace = options.getfieldvalue('enableCullFace', 				true);									//Toggles use of face culling.
++	this.hideOcean = options.getfieldvalue('hideOcean', 						false);									//ISSM shader uniform controlling ocean masking
++	this.lineWidth = options.getfieldvalue('lineWidth', 						1.0);									//Controls width of gl lines. No reliable support across windows platforms.
++	this.lightingBias = options.getfieldvalue('lightingBias', 					0.0);									//Controls width of gl lines. No reliable support across windows platforms.
++	this.log = options.getfieldvalue('log', 									false);									//Controls logarithmic color axis scaling for texturing.
++	this.maskColor = options.getfieldvalue('maskColor', 						vec4.fromValues(0.0, 0.0, 1.0, 1.0));	//ISSM shader uniform controlling ocean masking color.
++	this.maskEnabled = options.getfieldvalue('maskEnabled', 					false);									//ISSM shader uniform toggling ocean masking.
++	this.maskHeight = options.getfieldvalue('maskHeight', 						150.0);									//ISSM shader uniform controlling height at which ocean masking is cut off.
++	this.maskZerosColor = options.getfieldvalue('maskZerosColor', 				[1.0, 1.0, 1.0, 1.0]);					//ISSM shader uniform controlling value masking color.
++	this.maskZerosEnabled = options.getfieldvalue('maskZerosEnabled', 			false);									//ISSM shader uniform toggling value masking.
++	this.maskZerosTolerance = options.getfieldvalue('maskZerosTolerance', 		1e-6);									//ISSM shader uniform controlling tolerance of value to zero value when masking.
++	this.maskZerosZeroValue = options.getfieldvalue('maskZerosZeroValue', 		0.5);									//ISSM shader uniform controlling zero value masking offset.
++	this.mesh = options.getfieldvalue('mesh', 									undefined);								//Litegl GL.Mesh class used for drawing.
++	this.name = options.getfieldvalue('name', 									'node');								//Name of node.
++	this.nanIndices = options.getfieldvalue('nanIndices', 						new Set());								//Set of NaN indices to mask out of mesh.
++	this.octree = options.getfieldvalue('octree', 								undefined);								//Fast raytracing octree object.
++	this.pointSize = options.getfieldvalue('pointSize', 						15.0);									//Size of points when displaying GL.POINTS.
++	this.shaderName = options.getfieldvalue('shaderName', 						'Colored');								//Name of shader to use.
++	this.shader = options.getfieldvalue('shader', 								this.gl.shaders[this.shaderName]);		//Compiled shader object.
++	this.specularColor = options.getfieldvalue('specularColor', 				[1.0, 1.0, 1.0, 1.0]);					//Specular reflection color used in lighting.
++	this.specularStrength = options.getfieldvalue('specularStrength', 			1.0);									//Specular reflection power - represents specular highlight sharpness.
++	this.specularPower = options.getfieldvalue('specularPower', 				5);										//Specular reflection power - represents specular highlight sharpness.
++	this.texture = options.getfieldvalue('texture', 							undefined);								//GL texture object.
++	this.scale = options.getfieldvalue('scale', 								vec3.fromValues(1, 1, 1));				//XYZ scaling of the node.
++	this.renderObject = options.getfieldvalue('renderObject', 					{});									//Field for additional render object state information not necessarily related to node display.
++	this.rotation = options.getfieldvalue('rotation', 							vec3.create());							//XYZ rotation of the node.
++	this.rotationQuaternion = options.getfieldvalue('rotationQuaternion',		quat.create());							//Quaternion rotation of the node. Not currently in use.
++	this.translation = options.getfieldvalue('translation', 					vec3.create());							//XYZ translation of the node.
++	this.modelMatrix = options.getfieldvalue('modelMatrix', 					mat4.create());							//Model matrix computed from updateModelMatrix function.
++	this.translationMatrix = options.getfieldvalue('translationMatrix', 		mat4.create());							//Intermediate translation matrix computed from updateModelMatrix function.
++	this.rotationMatrix = options.getfieldvalue('rotationMatrix', 				mat4.create());							//Intermediate rotation matrix computed from updateModelMatrix function.
++	this.scaleMatrix = options.getfieldvalue('scaleMatrix', 					mat4.create());							//Intermediate scale matrix computed from updateModelMatrix function.
++	this.inverseModelMatrix = options.getfieldvalue('inverseModelMatrix', 		mat4.create());							//Inverse model matrix.
++	this.inverseRotationMatrix = options.getfieldvalue('inverseRotationMatrix', mat4.create());							//Inverse rotation matrix.
+ 	//}}}
+ 	//initialize {{{
+-	//if (this.name in canvas.nodes) abort? 
++	//if (this.name in canvas.nodes) abort?
+ 	this.updateModelMatrix();
+ 	this.updateDiffuseColor();
+ 	canvas.nodes[this.name] = this;
+ 	//}}}
+ } //}}}
++Node.prototype.eulerToQuaternion = function(pitch, roll, yaw) { //{{{
++	var t0 = Math.cos(yaw * 0.5);
++	var t1 = Math.sin(yaw * 0.5);
++	var t2 = Math.cos(roll * 0.5);
++	var t3 = Math.sin(roll * 0.5);
++	var t4 = Math.cos(pitch * 0.5);
++	var t5 = Math.sin(pitch * 0.5);
++
++	var w = t0 * t2 * t4 + t1 * t3 * t5;
++	var x = t0 * t3 * t4 - t1 * t2 * t5;
++	var y = t0 * t2 * t5 + t1 * t3 * t4;
++	var z = t1 * t2 * t4 - t0 * t3 * t5;
++	return quat.fromValues(x, y, z, w);
++} //}}}
++Node.prototype.quaternionToEuler = function(q) { //{{{
++	var ysqr = q[1] * q[1];
++
++	// roll (x-axis rotation)
++	var t0 = +2.0 * (q[3] * q[0] + q[1] * q[2]);
++	var t1 = +1.0 - 2.0 * (q[0] * q[0] + ysqr);
++	var roll = Math.atan2(t0, t1);
++
++	// pitch (y-axis rotation)
++	var t2 = +2.0 * (q[3] * q[1] - q[2] * q[0]);
++	t2 = t2 > 1.0 ? 1.0 : t2;
++	t2 = t2 < -1.0 ? -1.0 : t2;
++	var pitch = Math.asin(t2);
++
++	// yaw (z-axis rotation)
++	var t3 = +2.0 * (q[3] * q[2] + q[0] * q[1]);
++	var t4 = +1.0 - 2.0 * (ysqr + q[2] * q[2]);
++	var yaw = Math.atan2(t3, t4);
++	
++	return [pitch * RAD2DEG, roll * RAD2DEG, yaw * RAD2DEG];
++} //}}}
+ Node.prototype.updateModelMatrix = function() { //{{{
+ 	//Update the model matrix if rotation, scale, or translation have been manually modified.
+ 	var modelMatrix = mat4.create();
+@@ -82,7 +126,14 @@
+ 	var xRotationMatrix = mat4.create();	
+ 	mat4.rotate(xRotationMatrix, xRotationMatrix, DEG2RAD * this.rotation[0], [1.0, 0.0, 0.0]);
+ 	mat4.multiply(rotationMatrix, xRotationMatrix, rotationMatrix);
+-	mat4.multiply(modelMatrix, rotationMatrix, modelMatrix);	
++	mat4.multiply(modelMatrix, rotationMatrix, modelMatrix);
++
++	//var rotationQuaternionX = this.eulerToQuaternion(0, -DEG2RAD * this.rotation[0], 0);
++	//var rotationQuaternionY = this.eulerToQuaternion(DEG2RAD * this.rotation[1], 0, 0);
++	//mat4.fromQuat(this.rotationMatrix, quat.multiply(quat.create(), rotationQuaternionY, rotationQuaternionX));
++
++	//mat4.multiply(this.modelMatrix, this.rotationMatrix, this.modelMatrix);	
++		
+ 	
+ 	mat4.identity(translationMatrix);
+ 	mat4.translate(translationMatrix, translationMatrix, this.center); //relative translation
+@@ -123,7 +174,7 @@
+ } //}}}
+ Node.prototype.patch = function() { //{{{
+ 	//Emulates the behavior of MATLAB patch function by constructing a mesh from arguments.
+-	//Limitations: 
++	//Limitations:
+ 	//	-Expects pair labeled arguments ('FaceColor','none',...).
+ 	//	-Only handles Face/Vertices/FaceVertexCData element/node plots.
+ 	//	-Only supports FaceColor 'interp' and 'none'.
+@@ -148,7 +199,7 @@
+ 	this.patchIndices(faces, faceColor);
+ 
+ 	this.mesh = GL.Mesh.load(this.arrays, null, null, this.gl);
+-	//this.mesh.computeNormals();
++	this.mesh.computeNormals();
+ 	this.computeOctree();
+ } //}}}
+ Node.prototype.patchVertices = function(faceVertexCData, faces, vertices) { //{{{
+@@ -238,7 +289,7 @@
+ 	//Use logarithmic scaling if it is valid
+ 	if (this.log !== false && this.log !== 'off') {	
+ 		caxis = [
+-			Math.log10(caxis[0]) / Math.log10(this.log), 
++			Math.log10(caxis[0]) / Math.log10(this.log),
+ 			Math.log10(caxis[1]) / Math.log10(this.log)
+ 		];
+ 	}
+@@ -388,7 +439,8 @@
+ 			var coordinateObject = vertices[i];
+ 			var j = 0;
+ 			if (isEmptyOrUndefined(indices)) {
+-				for (var key in object) {
++				for (var key in coordinateObject) {
++					console.log(key);
+ 					array[j++] = coordinateObject[key];
+ 				}
+ 			}
+@@ -406,7 +458,7 @@
+ 	var z = vertices[2];
+ 	var meshVertices = mesh.getBuffer('vertices').data;
+ 	var meshIndicies = mesh.getIndexBuffer('triangles').data;
+-	var indicies = new Uint16Array(meshIndicies.length * x.length);
++	var indices = new Uint16Array(meshIndicies.length * x.length);
+ 	var size = meshVertices.length * x.length / 3;
+ 	newX = new Float32Array(size);
+ 	newY = new Float32Array(size);
+@@ -422,27 +474,48 @@
+ 		}
+ 		var offset = i * meshVertices.length / 3;
+ 		for (var j = 0; j < meshIndicies.length;) {
+-			indicies[e++] = meshIndicies[j++] + offset;
++			indices[e++] = meshIndicies[j++] + offset;
+ 		}
+ 	}
+ 	
+-	this.patch('Faces', indicies, 'Vertices', [newX, newY, newZ], 'FaceColor', 'interp');
++	this.patch('Faces', indices, 'Vertices', [newX, newY, newZ], 'FaceColor', 'interp');
+ } //}}}
+-Node.prototype.scaleVertices = function(md, x, y, z, scale) { //{{{
++Node.prototype.scaleVertices = function(md, x, y, z, elements, scale, maskObject) { //{{{
+ 	//Scales and returns vertices x, y, and z by factor scale. Uses md.geometry.scale for heightscaling in 3d meshes.
+ 	if (md.mesh.classname() === 'mesh3dsurface') {
+-		var xyz, magnitude;
+-		x = x.slice();
+-		y = y.slice();
+-		z = z.slice();
+-		for(var i = 0; i < x.length; i++) {
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = 1 + md.geometry.surface[i] * scale / vec3.length(xyz);
+-			vec3.scale(xyz, xyz, magnitude);
+-			x[i] = xyz[0];
+-			y[i] = xyz[1];
+-			z[i] = xyz[2];
++		if (!maskObject.enabled) {
++			var xyz, magnitude;
++			x = x.slice();
++			y = y.slice();
++			z = z.slice();
++			for(var i = 0; i < x.length; i++) {
++				xyz = vec3.fromValues(x[i], y[i], z[i]);
++				magnitude = 1 + md.geometry.surface[i] * scale / vec3.length(xyz);
++				vec3.scale(xyz, xyz, magnitude);
++				x[i] = xyz[0];
++				y[i] = xyz[1];
++				z[i] = xyz[2];
++			}
+ 		}
++		else {
++			var mask = maskObject.mask;
++			var maskScale = maskObject.scale;
++			var element;
++			for (var i = 0; i < mask.length; i++) {
++				if (mask[i] === 1) {
++					element = elements[i];
++					for (var j = 0; j < 3; j++) {
++						xyz = vec3.fromValues(x[element[j] - 1], y[element[j] - 1], z[element[j] - 1]);
++						magnitude = 1 + md.geometry.surface[element[j] - 1] * scale * maskScale / vec3.length(xyz);
++						vec3.scale(xyz, xyz, magnitude);
++						x[element[j] - 1] = xyz[0];
++						y[element[j] - 1] = xyz[1];
++						z[element[j] - 1] = xyz[2];
++					}
++					
++				}
++			}
++		}
+ 	}
+ 	else {
+ 		z = z.slice();
+Index: ../trunk-jpl/src/m/plot/applyoptions.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.js	(revision 21910)
++++ ../trunk-jpl/src/m/plot/applyoptions.js	(revision 21911)
+@@ -5,7 +5,7 @@
+ 	//      applyoptions(md, data, options)
+ 	//
+ 	//   See also: PLOTMODEL, PARSE_OPTIONS
+-	
++
+ 	//{{{ colorbar
+ 	var gl = canvas.gl;
+ 	if (options.exist('colorbar')) {
+@@ -15,7 +15,7 @@
+ 			var colorbarinnerlabels = options.getfieldvalue('colorbarinnerlabels','off');
+ 			var ccanvasid, ctitleid, clabelsid, ccanvas, ctitle, clabels, ccontext, cmap, colorbar, cwidth, cheight, cgradient, color, y, x;
+ 			//}}}
+-			//{{{ Create colorbar labels 
++			//{{{ Create colorbar labels
+ 			var labels = [];
+ 			var cdivisions = options.getfieldvalue('colorbarnticks', 6);
+ 			var caxisdelta = caxis[1] - caxis[0];
+@@ -48,7 +48,7 @@
+ 				}
+ 			} //}}}
+ 			//{{{ Initialize colorbar canvas
+-			ccanvasid = options.getfieldvalue('colorbarid', options.getfieldvalue('canvasid').replace('canvas','colorbar-canvas'));			
++			ccanvasid = options.getfieldvalue('colorbarid', options.getfieldvalue('canvasid').replace('canvas','colorbar-canvas'));
+ 			ccanvas = $('#'+ccanvasid)[0];
+ 			cwidth = ccanvas.width*options.getfieldvalue('colorbarwidth', 1);
+ 			cheight = ccanvas.height*options.getfieldvalue('colorbarheight', 1);
+@@ -62,7 +62,7 @@
+ 			//{{{ Draw colorbar gradient
+ 			for (var i=0; i < colorbar.length; i++) {
+ 				color = colorbar[colorbar.length-i-1];
+-				color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];	
++				color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];
+ 				cgradient.addColorStop(i/colorbar.length*(cdivisions/(cdivisions+1.0))+(1.0/(cdivisions+1.0)),'rgba('+color.toString()+', 1.0)');
+ 			}
+ 			ccontext.fillStyle=cgradient;
+@@ -106,7 +106,7 @@
+ 			ctitle = $('#'+ctitleid);
+ 			if (options.exist('colorbartitle')) { ctitle.html(options.getfieldvalue('colorbartitle')); }
+ 			//}}}
+-		} 
++		}
+ 	} //}}}
+ 	//{{{ texture canvas
+ 	var tcontext, tcanvas, tcanvasid, tURL, tgradient;
+@@ -118,15 +118,15 @@
+ 	}
+ 	tcontext = tcanvas.getContext('2d');
+ 	tgradient = tcontext.createLinearGradient(0, 0, 0, 256);
+-		
++
+ 	var cmap = options.getfieldvalue('colormap','jet');
+ 	var colorbar = colorbars[cmap];
+ 	for (var i=0; i < colorbar.length; i++) {
+ 		color = colorbar[colorbar.length-i-1];
+-		color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];	
++		color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];
+ 		tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+', 1.0)');
+ 	}
+-	
++
+ 	tcontext.fillStyle = tgradient;
+ 	tcontext.fillRect(0, 0, 256, 256);
+ 	tURL = tcanvas.toDataURL();
+@@ -133,102 +133,54 @@
+ 	canvas.unitNode.texture = initTexture(canvas.gl, tURL);
+ 	//}}}
+ 	//{{{ text display
+-	if (options.exist('textlabels')) {
+-		var textcanvas, textcanvasid;	
+-		textcanvasid = options.getfieldvalue('textcanvasid', options.getfieldvalue('canvasid')+'-text');
+-		textcanvas = $('#'+textcanvasid);
+-		textcanvas.textlabels = options.getfieldvalue('textlabels',[]);
++	var overlaycanvasid = options.getfieldvalue('overlayid', options.getfieldvalue('canvasid')+'-overlay');
++	var overlaycanvas = $('#'+overlaycanvasid)[0];
++	if (!isEmptyOrUndefined(overlaycanvas)) {
++		//Get drawing context and save reference on main WebGL canvas
++		var ctx = overlaycanvas.getContext('2d');
++		canvas.overlaycanvas = overlaycanvas;
+ 		
+-		//setup drawing function for text canvas draw calls
+-		textcanvas.draw = function(canvas) {
+-			var textcontext, textlabels, textlabel, textcanvaswidth, textcanvasheight, textcoordinates;	
+-			var textposition = vec3.create();
+-			var mvpMatrix = mat4.create();
+-			
+-			//ensure correct canvas coordinate scaling
+-			textcanvaswidth = this[0].clientWidth;
+-			textcanvasheight = this[0].clientHeight;
+-			this[0].width  = textcanvaswidth;
+-			this[0].height = textcanvasheight;
+-			
+-			textcontext = this[0].getContext('2d');
+-			textlabels = options.getfieldvalue('textlabels',[]);
+-			textcontext.clearRect(0, 0, textcanvaswidth, textcanvasheight);
+-			
+-			//worldspace to screenspace transformation for text
+-			for (text in textlabels) {
+-				textlabel = textlabels[text];
+-				mat4.multiply(mvpMatrix, canvas.camera.vpMatrix, canvas.nodes.overlay.modelMatrix);
+-				textposition = vec3.transformMat4(textposition, textlabel.pos, mvpMatrix);
+-				if (textposition[2] > 1) { //clip coordinates with z > 1
+-					continue;
+-				}
+-				textcoordinates = [(textposition[0]+1.0)/2.0*textcanvaswidth, (-textposition[1]+1.0)/2.0*textcanvasheight]; //NDC to screenspace
+-				textcontext.font = String(options.getfieldvalue('colorbarfontsize', 18))+'px "Lato", Helvetica, Arial, sans-serif';
+-				textcontext.fillStyle = options.getfieldvalue('colorbarfontcolor','black');
+-				textcontext.strokeStyle = options.getfieldvalue('colorbarfontcolor','black');
+-				textcontext.textAlign = 'center';
+-				textcontext.textBaseline = 'middle';
+-				textcontext.fillText(textlabel.text, textcoordinates[0], textcoordinates[1]);
+-				textcontext.strokeText(textlabel.text, textcoordinates[0], textcoordinates[1]);
+-			}
++		//Resize interal viewport coordinates to match screenspace coordinates
++		var rect = overlaycanvas.getBoundingClientRect();
++		overlaycanvas.width  = rect.width;
++		overlaycanvas.height = rect.height;
++		
++		//Clear canvas each frame for any new drawings
++		canvas.overlayHandlers['draw'] = function(overlaycanvas) {
++			ctx.clearRect(0, 0, overlaycanvas.width, overlaycanvas.height);
+ 		}
+-		canvas.textcanvas = textcanvas;
+-	} //}}}
++	}
+ 	//{{{ lat long overlay
+ 	if (options.exist('latlongoverlay')) {
+-		var overlaycanvasid = options.getfieldvalue('latlongoverlayid', options.getfieldvalue('canvasid')+'-overlay');
+-		var overlaycanvas = $('#'+overlaycanvasid)[0];
+ 		var latitudes = {
+ 			//'-90': 1,
+ 			//'-65': .999,
+ 			'-60': 0.994046875,
+-			//'-55': 0.983187500000002,
+-			//'-50': 0.97173550854167,
+ 			'-45': 0.955729166666666,
+-			//'-40': 0.94218750000000218,
+-			//'-35': 0.94218750000000218,
+ 			'-30': 0.9226562500000024,
+-			//'-25': 0.87934895833333526,
+-			//'-20': 0.856572916666669,
+ 			//'-15': 0.830729166666665,
+-			//'-10': 0.803552708333336,
+-			//'-5': 0.77395833333333541,
+ 			'0': 0.74218749999999811,
+-			//'5': 0.70950364583333347,
+-			//'10': 0.67479166666666823,
+ 			//'15': 0.63932291666666663,
+-			//'20': 0.60171875,
+-			//'25': 0.563453125,
+ 			'30': 0.523390625000001,
+-			//'35': 0.48401875,
+-			//'40': 0.44296875,
+ 			'45': 0.4020001,
+-			//'50': 0.3578125,
+-			//'55': 0.311875,
+ 			'60': 0.26953124999999978,
+ 			//'65': 0.225390625,
+-			//'70': 0.18125,
+-			//'75': 0.13541666666666671,
+-			//'80': 0.08953125,
+-			//'85': 0.046250000000000013,
+ 			//'90': 0.0,
+ 		}
+ 		var longitudes = [-150, -120, -90, -60, -30, 0, 30, 60, 90, 120, 150, 180];
+-		overlaycanvas.draw = function(canvas) {
+-			var rect = overlaycanvas.getBoundingClientRect();
+-			overlaycanvas.width  = rect.width;
+-			overlaycanvas.height = rect.height;
+-			var ctx = overlaycanvas.getContext('2d');
++		canvas.overlayHandlers['latlong'] = function(canvas) {
++			//Transform from world space to viewport space
+ 			var centerx = overlaycanvas.width / 2;
+ 			var centery = overlaycanvas.height / 2;
+ 			var radius = (overlaycanvas.height) / 2;
++
++			//Draw latitudes
+ 			ctx.setLineDash([5, 10]);
+ 			for(latitude in latitudes) {
+ 				ctx.beginPath();
+ 				ctx.arc(centerx, centery, radius * latitudes[latitude], 0, 2 * Math.PI);
+ 				ctx.stroke();
+-				ctx.font = String(options.getfieldvalue('colorbarfontsize', 18))+'px "Lato", Helvetica, Arial, sans-serif';
++				ctx.font = 'bold ' + String(options.getfieldvalue('colorbarfontsize', 18))+'px "Lato", Helvetica, Arial, sans-serif';
+ 				ctx.fillStyle = options.getfieldvalue('colorbarfontcolor','black');
+ 				ctx.strokeStyle = options.getfieldvalue('colorbarfontcolor','black');
+ 				ctx.textAlign = 'center';
+@@ -236,6 +188,7 @@
+ 				ctx.fillText(latitude, centerx, centery + radius * latitudes[latitude]);
+ 				ctx.strokeText(latitude, centerx, centery + radius * latitudes[latitude]);
+ 			}
++			//Draw longitudes
+ 			ctx.setLineDash([1, 0]);
+ 			for (longitude in longitudes) {
+ 				ctx.beginPath();
+@@ -244,39 +197,85 @@
+ 				ctx.stroke();
+ 			}
+ 		}
+-		canvas.overlaycanvas = overlaycanvas;
+ 	} //}}}
++	if (options.exist('textlabels')) {
++		//Attatch new overlay handler to display text labels
++		var textLabels = options.getfieldvalue('textlabels',[]);
++		canvas.overlayHandlers['text'] = function(canvas) {
++			for (var i = 0; i < textLabels.length; i++) {
++				//Get text label to display
++				var textLabel = textLabels[i];
++				textLabel = {
++					position: defaultFor(textLabel.position, vec3.create()),
++					text: defaultFor(textLabel.text, ''),
++					fontSize: defaultFor(textLabel.fontSize, 18),
++					fontColor: defaultFor(textLabel.fontColor, 'black'),
++
++				};
++				
++				// function declared in slr-gfm sim-front-end-controller.js
++				// if labels are behind the globe sphere then skip iteartion and do not display them
++				if (isLabelVisible(textLabel)) {
++					//Transform from world space to viewport space
++					var screenPoint = vec3.transformMat4(vec3.create(), textLabel.position, canvas.camera.vpMatrix);
++					var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
++					var y = (-screenPoint[1] + 1.0) * (canvas.height / 2) + canvas.selector.offset().top;
++					
++					//Draw text
++					ctx.font = 'bold ' + String(textLabel.fontSize) + 'px Arial Black, sans-serif';
++					ctx.fillStyle = textLabel.fontColor;
++					ctx.strokeStyle = 'white';
++					ctx.textAlign = 'center';
++					ctx.textBaseline = 'middle';
++					ctx.fillText(textLabel.text, x, y);
++					ctx.strokeText(textLabel.text, x, y);
++				}
++			}
++		}
++	} //}}}
+ 	//{{{ additional rendering nodes
+ 	if (options.exist('render')) {
+ 		var meshresults = processmesh(md, data, options);
+-		var x = meshresults[0]; 
+-		var y = meshresults[1]; 
+-		var z = meshresults[2]; 
++		var x = meshresults[0];
++		var y = meshresults[1];
++		var z = meshresults[2];
+ 		var elements = meshresults[3];
+-		var is2d = meshresults[4]; 
++		var is2d = meshresults[4];
+ 		var isplanet = meshresults[5];
+-		
++
+ 		var xlim = options.getfieldvalue('xlim', [ArrayMin(x), ArrayMax(x)]);
+ 		var ylim = options.getfieldvalue('ylim', [ArrayMin(y), ArrayMax(y)]);
+ 		var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
+ 
+-		var global = vec3.length([(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2]) < 6371000/10; //tolerance for global models = center is 637100 meters away from center of earth	
+-		var translation = global ? [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2] : [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) - 6371000, (zlim[0] + zlim[1]) / 2];
+-		
++		var global = vec3.length([(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2]) < 6371000/10; //tolerance for global models = center is 637100 meters away from center of earth
++		var translation = global ? [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2] : canvas.view.position;
++
+ 		var renderObjects = options.getfieldvalue('render',{});
+-		if ('sky' in renderObjects && !('sky' in canvas.nodes)) {
+-			var object = renderObjects.sky;
++		for (var renderObject in renderObjects) {
++			//Modify renderObejct?
++			var object = renderObjects[renderObject];
+ 			object = {
+-				enabled: defaultFor(object.enabled, true),
+-				scale: defaultFor(object.scale, 1),
++				enabled: defaultFor(object.enabled, true),					//Toggle display of the render object node
++				scale: defaultFor(object.scale, 1),							//Model matrix scaling
++				x: defaultFor(object.x, [0.0, 1.0, 0.0, 0.0, 0.0, 0.0]),	//x coordinate array
++				y: defaultFor(object.y, [0.0, 0.0, 0.0, 1.0, 0.0, 0.0]),	//y coordinate array
++				z: defaultFor(object.z, [0.0, 0.0, 0.0, 0.0, 0.0, 1.0]),	//z coordinate array
++				indices: defaultFor(object.indices, []),					//indices array
++				name: defaultFor(object.name, 'NY'),						//Text to display for cities.
++				size: defaultFor(object.size, 1),							//Physical size of the object in meters
++				color: defaultFor(object.color, 'black'),					//Diffuse color of object
++				height: defaultFor(object.height, 25000),					//Height of object along y axis, currently for clouds only
++				range: defaultFor(object.range, 120000),						//Range of sz plane to spawn object, currently for clouds only
++				quantity: defaultFor(object.quantity, 15)					//Quantity of objects to display, currently for clouds only
+ 			};
+-			if (object.enabled) {
+-				var atmosphereScale = 1.25;
+-				var mesh = GL.Mesh.icosahedron({size: 6371000 * atmosphereScale, subdivisions: 5});
++			if (!object.enabled) { continue; }
++			if ('sky' === renderObject && !('sky' in canvas.nodes)) {
++				var mesh = GL.Mesh.icosahedron({size: 6371000 * canvas.atmosphere.scaleHeight, subdivisions: 5});
+ 				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'sky',
+ 					'shaderName', 'SkyFromSpace',
+ 					'cullFace', gl.FRONT,
+@@ -285,19 +284,13 @@
+ 					'translation',translation
+ 				);
+ 			}
+-		}
+-		if ('space' in renderObjects && !('space' in canvas.nodes)) {
+-			var object = renderObjects.space;
+-			object = {
+-				enabled: defaultFor(object.enabled, true),
+-				scale: defaultFor(object.scale, 1),
+-			};
+-			if (object.enabled) {
++			if ('space' === renderObject && !('space' in canvas.nodes)) {
+ 				var mesh = GL.Mesh.sphere({size: 6371000 * 20});
+ 				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'space',
+ 					'shaderName', 'Textured',
+ 					'cullFace', gl.FRONT,
+@@ -307,20 +300,11 @@
+ 					'translation',translation
+ 				);
+ 			}
+-		}
+-		if ('coastlines' in renderObjects && !('coastlines' in canvas.nodes)) {
+-			var object = renderObjects.coastlines;
+-			object = {
+-				enabled: defaultFor(object.enabled, false),
+-				scale: defaultFor(object.scale, 1),
+-				x: defaultFor(object.x, {}),
+-				y: defaultFor(object.y, {}),
+-				z: defaultFor(object.z, {})
+-			};
+-			if (object.enabled) {
++			if ('coastlines' === renderObject && !('coastlines' in canvas.nodes)) {
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'coastlines',
+ 					'shaderName', 'Colored',
+ 					'drawMode', gl.LINE_STRIP,
+@@ -330,49 +314,28 @@
+ 				);
+ 				node.patch('Vertices', [object.x, object.y, object.z], 'FaceColor', 'none');
+ 			}
+-		}
+-		if ('graticule' in renderObjects && !('graticule' in canvas.nodes)) {
+-			var object = renderObjects.graticule;
+-			object = {
+-				enabled: defaultFor(object.enabled, false),
+-				scale: defaultFor(object.scale, 1),
+-				x: defaultFor(object.x, {}),
+-				y: defaultFor(object.y, {}),
+-				z: defaultFor(object.z, {})
+-			};
+-			if (object.enabled) {			
++			if ('graticule' === renderObject && !('graticule' in canvas.nodes)) {
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'graticule',
+ 					'shaderName', 'Colored',
+ 					'drawMode', gl.LINE_STRIP,
+ 					'lineWidth', options.getfieldvalue('linewidth', 1),
+ 					'scale', [object.scale, object.scale, object.scale],
+-					'rotation', [-90, 0, 0]
++					'rotation', [-90, 180, 0]
+ 				);
+ 				node.patch('Vertices', [object.x, object.y, object.z], 'FaceColor', 'none');
+ 			}
+-		}
+-		if ('cities' in renderObjects && !('cities' in canvas.nodes)) {
+-			var object = renderObjects.cities;
+-			object = {
+-				enabled: defaultFor(object.enabled, false),
+-				scale: defaultFor(object.scale, 1),
+-				size: defaultFor(object.size, 1.5),
+-				color: defaultFor(object.color, 'black'),
+-				x: defaultFor(object.x, {}),
+-				y: defaultFor(object.y, {}),
+-				z: defaultFor(object.z, {}),
+-				indices: defaultFor(object.indices, {})
+-			};
+-			if (object.enabled) {
++			if ('cities' === renderObject && !('cities' in canvas.nodes)) {
+ 				var mesh = GL.Mesh.icosahedron({size: object.size, subdivisions: 1});
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'cities',
+-					'shaderName', 'Colored',
++					'shaderName', 'ColoredDiffuse',
+ 					'diffuseColor', object.color,
+ 					'lineWidth', options.getfieldvalue('linewidth', 1),
+ 					'scale', [object.scale, object.scale, object.scale],
+@@ -380,46 +343,42 @@
+ 				);
+ 				node.geometryShader('Mesh', mesh, 'Vertices', [object.x, object.y, object.z], 'Indices', object.indices);
+ 			}
+-		}
+-		if ('city' in renderObjects) {
+-			var object = renderObjects.city;
+-			object = {
+-				enabled: defaultFor(object.enabled, false),
+-				name: defaultFor(object.name, 'NY'),
+-				size: defaultFor(object.size, 15000),
+-				color: defaultFor(object.color, 'magenta'),
+-				x: defaultFor(object.x, {}),
+-				y: defaultFor(object.y, {}),
+-				z: defaultFor(object.z, {})
+-			};
+-			if (object.enabled) {
++			if ('axis' === renderObject && !('axis' in canvas.nodes)) {		
++				node = new Node(
++					'canvas', canvas,
++					'options', options,
++					'renderObject', object,
++					'name', 'axis',
++					'shaderName', 'Colored',
++					'drawMode', gl.LINES,
++					'lineWidth', options.getfieldvalue('linewidth', 1),
++					'scale', [object.scale, object.scale, object.scale],
++					'rotation', [0, 0, 0]
++				);
++				node.patch('Vertices', [object.x, object.y, object.z], 'FaceColor', 'none');
++			}
++			if ('city' === renderObject) {
+ 				//city
+ 				var mesh = GL.Mesh.sphere({size: object.size});
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
++					'renderObject', object,
+ 					'name', 'city',
+-					'shaderName', 'Colored',
++					'shaderName', 'ColoredDiffuse',
+ 					'diffuseColor', object.color,
+ 					'mesh', mesh,
+ 					'translation', [object.x, object.z, -object.y]
+ 				);
+-				
+-				var overlaycanvasid = options.getfieldvalue('overlayid', options.getfieldvalue('canvasid')+'-overlay');
+-				var overlaycanvas = $('#'+overlaycanvasid)[0];
+-				overlaycanvas.draw = function(canvas) {
+-					var rect = overlaycanvas.getBoundingClientRect();
+-					overlaycanvas.width  = rect.width;
+-					overlaycanvas.height = rect.height;
+-					var ctx = overlaycanvas.getContext('2d');
++				//Attatch new overlay handler to display city name
++				canvas.overlayHandlers['city'] = function(canvas) {
+ 					var node = canvas.nodes['city'];
+-					node.translation = [object.x, object.z, -object.y];
+-					node.updateModelMatrix();
++					var object = node.renderObject;
+ 					var screenPoint = vec3.transformMat4(vec3.create(), node.translation, canvas.camera.vpMatrix);
+ 					var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
+ 					var y = (-screenPoint[1] + 1.0) * (canvas.height / 2) + canvas.selector.offset().top;
+ 
+-					ctx.font = String(options.getfieldvalue('colorbarfontsize', 22))+'px Arial Black, sans-serif';
++					ctx.font = 'bold ' + String(options.getfieldvalue('colorbarfontsize', 22))+'px Arial Black, sans-serif';
+ 					ctx.fillStyle = options.getfieldvalue('colorbarfontcolor','black');
+ 					ctx.strokeStyle = 'white';
+ 					ctx.textAlign = 'center';
+@@ -427,25 +386,29 @@
+ 					ctx.fillText(object.name, x, y);
+ 					ctx.strokeText(object.name, x, y);
+ 				}
+-				canvas.overlaycanvas = overlaycanvas;
+ 			}
+-		}
+-		if (canvas.clouds.enabled) {
+-			//clouds
+-			for (var i = 0; i < canvas.clouds.quantity; i++) {
++			if ('clouds' === renderObject && !('clouds0' in canvas.nodes)) {
++				//clouds				
+ 				var mesh = GL.Mesh.fromURL(canvas.rootPath+'obj/cloud.obj');
+-				translation = [translation[0] + Math.floor((Math.random() * (1 + 12000 - (-12000)) + (-12000))), translation[1] - 405000, translation[2]  + Math.floor((Math.random() * (1 + 12000 - (-12000)) + (-12000)))];
+-				node = new Node(
+-					'canvas', canvas,
+-					'options', options,
+-					'name', 'clouds' + i,
+-					'shaderName', 'Textured',
+-					'animation', {'time': Date.now(),'target': translation,'current': translation},
+-					'diffuseColor', [0.7,0.7,0.7,1.0],
+-					'mesh', mesh,
+-					'scale', [2500, 2500, 2500],
+-					'translation', translation
+-				);
++				for (var i = 0; i < object.quantity; i++) {
++					//TODO: More options, less magic numbers. Add animation. Better shading.
++					var offset = [	translation[0] + (Math.random() - 0.5) * 2 * object.range, 
++									translation[1] + object.height + (Math.random() - 0.5) * 0.2 * object.range, 
++									translation[2] + (Math.random() - 0.5) * 2 * object.range];
++					node = new Node(
++						'canvas', canvas,
++						'options', options,
++						'renderObject', object,
++						'name', 'clouds' + i,
++						'shaderName', 'ColoredDiffuse',
++						'animation', {'time': Date.now(),'target': translation,'current': translation},
++						'diffuseColor', [0.7,0.7,0.7,1.0],
++						'specularColor', [0.0,0.0,0.0,1.0],
++						'mesh', mesh,
++						'scale', [object.scale, object.scale, object.scale],
++						'translation', offset
++					);
++				}
+ 			}
+ 		}
+ 	} //}}}
+Index: ../trunk-jpl/src/m/array/arrayoperations.js
+===================================================================
+--- ../trunk-jpl/src/m/array/arrayoperations.js	(revision 21910)
++++ ../trunk-jpl/src/m/array/arrayoperations.js	(revision 21911)
+@@ -1,9 +1,17 @@
+ function ArrayMax(array){ //{{{
+-	return Math.max.apply(null,array);
++	//Calculate array max using for loop instead of Math.max.apply(null, array) to avoid recursive stack overflow in mobile browsers
++	
++	var max=-Infinity;
++	
++	for (var i=0;i<array.length; i++) {
++		max=Math.max(max,array[i]);
++	}
++	
++	return max;
+ } //}}}
+ function ArrayMax2D(array){ //{{{
+ 	
+-	var max=0;
++	var max=-Infinity;
+ 
+ 	for (var i=0;i<array.length;i++){
+ 		var subarray=array[i];
+@@ -13,8 +21,27 @@
+ 	return max;
+ } //}}}
+ function ArrayMin(array){ //{{{
+-	return Math.min.apply(null,array);
++	//Calculate array min using for loop instead of Math.min.apply(null, array) to avoid recursive stack overflow in mobile browsers
++	
++	var min=Infinity;
++	
++	for (var i=0;i<array.length; i++) {
++		min=Math.min(min,array[i]);
++	}
++	
++	return min;
+ } //}}}
++function ArrayMin2D(array){ //{{{
++	
++	var min=Infinity;
++
++	for (var i=0;i<array.length;i++){
++		var subarray=array[i];
++		min=Math.min(min,ArrayMin(subarray));
++	}
++
++	return min;
++} //}}}
+ function ArraySum(array){ //{{{
+ 	var sum=0;
+ 	for(var i=0;i<array.length;i++)sum+=array[i];
+@@ -66,17 +93,6 @@
+ 	return or;
+ 
+ } //}}}
+-function ArrayMin2D(array){ //{{{
+-	
+-	var min=ArrayMax2D(array);
+-
+-	for (var i=0;i<array.length;i++){
+-		var subarray=array[i];
+-		min=Math.min(min,ArrayMin(subarray));
+-	}
+-
+-	return min;
+-} //}}}
+ function ListToMatrix(list, elementsPerSubArray) { //{{{
+ 	var matrix = [], i, k;
+ 
+@@ -125,7 +141,7 @@
+ } //}}}
+ function ArrayNot(array) { //{{{
+ 
+-	var notarray=array;
++	var notarray=array.slice();
+ 	for (var i=0;i<array.length;i++)notarray[i]=-array[i];
+ 	return notarray;
+ } //}}}
+@@ -137,20 +153,21 @@
+ } //}}}
+ function ArrayPow(array,coefficient) { //{{{
+ 
+-	var powarray=array;
++	var powarray=array.slice();
+ 	for (var i=0;i<array.length;i++)powarray[i]=Math.pow(array[i],coefficient);
+ 	return powarray;
+ } //}}}
+ function ArraySqrt(array) { //{{{
+ 
+-	var sqrtarray=array;
++	var sqrtarray=array.slice();
+ 	for (var i=0;i<array.length;i++)sqrtarray[i]=Math.sqrt(array[i]);
+ 	return sqrtarray;
+ } //}}}
+ function ArrayScale(array,alpha) { //{{{
+ 
+-	for (var i=0;i<array.length;i++)array[i]=array[i]*alpha;
+-
++	var scalearray=array.slice();
++	for (var i=0;i<array.length;i++)scalearray[i]=array[i]*alpha;
++	return scalearray;
+ } //}}}
+ function ArrayMag(array1,array2) { //{{{
+ 
+@@ -249,8 +266,14 @@
+ 	return array;
+ } //}}}
+ function NewArrayFill(size,value) { //{{{
+-
+-	return new Array(size).fill(value);
++	
++	var array = new Array(size);
++	
++	for (var i = 0; i < size; i++) {
++		array[i] = value;
++	}
++	
++	return array;
+ } //}}}
+ function NewArrayFillIncrement(size,start,increment) { //{{{
+ 
+Index: ../trunk-jpl/src/m/solve/WriteData.js
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.js	(revision 21910)
++++ ../trunk-jpl/src/m/solve/WriteData.js	(revision 21911)
+@@ -59,7 +59,7 @@
+ 		}
+ 		else{
+ 			if (!IsArray(data)) data=data*scale;
+-			else ArrayScale(data,scale);
++			else data=ArrayScale(data,scale);
+ 		}
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21911-21912.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21911-21912.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21911-21912.diff	(revision 22755)
@@ -0,0 +1,128 @@
+Index: ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21911)
++++ ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21912)
+@@ -47,7 +47,6 @@
+ 	double* Js=NULL;
+ 	int     intn;
+ 	int     priorn;
+-	int     maxsteps,maxiter;
+ 	Data    data_struct;
+ 
+ 	/* output: */
+@@ -55,33 +54,21 @@
+ 
+ 	/*intermediary: */
+ 	double f;
+-	double dxmin=.01;
+-	double gttol=.0001;
++	double dxmin=0.01;
++	double gttol=0.0001;
+ 	long   omode;
+ 
+ 	/*checks on arguments on the matlab side: */
+-	if(nlhs!=NLHS){
++	if(nlhs!=NLHS || nrhs!=3){
+ 		M1qn3Usage();
+ 		_error_("M1qn3 usage error");
+ 	}
+-	if(nrhs!=5){
+-		M1qn3Usage();
+-		_error_("M1qn3 usage error");
+-	}
+ 
+ 	/*Input datasets: */
+ 	FetchData(&Xs,&intn,&priorn,XHANDLE);
+ 	FetchData(&Gs,&intn,&priorn,GHANDLE);
+ 	FetchData(&Js,&priorn,JHANDLE);
+-	FetchData(&maxsteps,MAXSTEPSHANDLE);
+-	FetchData(&maxiter,MAXITERHANDLE);
+ 
+-	/*_printf_("Xs: " << Xs[0] << "\n");
+-	_printf_("Gs: " << Gs[0] << "\n");
+-	_printf_("Js: " << Js[0] << "\n");
+-	_printf_("maxiter: " << maxiter << "\n");
+-	_printf_("maxsteps: " << maxsteps << "\n");*/
+-
+ 	/*Initialize M1QN3 parameters*/
+ 	SimulFunc costfuncion  = &fakesimul;  /*Cost function address*/
+ 	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
+@@ -96,23 +83,15 @@
+ 	long      io           = 6;         /*Channel number for the output*/
+ 
+ 	/*Optimization criterions*/
+-	long niter = long(maxsteps); /*Maximum number of iterations*/
+-	long nsim  = long(maxiter);/*Maximum number of function calls*/
++	long niter = long(intn); /*Maximum number of iterations*/
++	long nsim  = long(intn); /*Maximum number of function calls*/
+ 
+ 	/*Get problem dimension and initialize X, G and f: */
+-	/*_printf_("intn: " << intn << "\n");
+-	_printf_("priorn: " << priorn << "\n");*/
+ 	long n = long(intn);
+-	IssmPDouble* G = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)G[i]=Gs[i*priorn];
+-	IssmPDouble* X = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)X[i]=Xs[i*priorn];
++	IssmPDouble* G = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)G[i]=Gs[i*priorn+0];
++	IssmPDouble* X = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)X[i]=Xs[i*priorn+0];
+ 	f = Js[0];
+ 	
+-	/*_printf_("X: " << X[0] << "\n");
+-	_printf_("G: " << G[0] << "\n");
+-	_printf_("J: " << f << "\n");
+-	_printf_("n: " << n << "\n");*/
+-
+-
+ 	/*Allocate m1qn3 working arrays (see doc)*/
+ 	long      m   = 100;
+ 	long      ndz = 4*n+m*(2*n+1);
+@@ -132,7 +111,7 @@
+ 				&reverse,&indic,izs,rzs,(void*)&data_struct);
+ 
+ 	switch(int(omode)){
+-		case 0: /*_printf0_("   Stop requested (indic = 0)\n"); */ break;
++		case 0:  _printf0_("   Stop requested\n"); break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+ 		case 2:  _printf0_("   Bad initialization\n"); break;
+ 		case 3:  _printf0_("   Line search failure\n"); break;
+@@ -179,12 +158,12 @@
+ 		return;
+ 	}
+ 	else{
+-		//_printf0_("counter: " << ds->counter << "\n");
+ 		ds->counter++;
+ 		*pf=Js[ds->counter];
+-		for(int i=0;i<*n;i++)X[i]=Xs[ds->priorn*i+ds->counter];
+-		for(int i=0;i<*n;i++)G[i]=Gs[ds->priorn*i+ds->counter];
++		for(int i=0;i<*n;i++) X[i]=Xs[ds->priorn*i+ds->counter];
++		for(int i=0;i<*n;i++) G[i]=Gs[ds->priorn*i+ds->counter];
+ 	}
+ 
++	printf("J [i] = %g\n",*pf);
+ }
+ #endif
+Index: ../trunk-jpl/src/wrappers/M1qn3/M1qn3.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/M1qn3/M1qn3.h	(revision 21911)
++++ ../trunk-jpl/src/wrappers/M1qn3/M1qn3.h	(revision 21912)
+@@ -29,8 +29,6 @@
+ #define XHANDLE       prhs[0]
+ #define GHANDLE       prhs[1]
+ #define JHANDLE       prhs[2]
+-#define MAXSTEPSHANDLE prhs[3]
+-#define MAXITERHANDLE prhs[4]
+ /* serial output macros: */
+ #define XOUT (mxArray**)&plhs[0]
+ #endif
+@@ -38,10 +36,8 @@
+ #ifdef _HAVE_PYTHON_MODULES_
+ /* serial input macros: */
+ #define XHANDLE   PyTuple_GetItem(args,0)
+-#define GHANDLE       PyTuple_GetItem(args,1)
+-#define JHANDLE       PyTuple_GetItem(args,2)
+-#define MAXSTEPSHANDLE PyTuple_GetItem(args,3)
+-#define MAXITERHANDLE PyTuple_GetItem(args,4)
++#define GHANDLE   PyTuple_GetItem(args,1)
++#define JHANDLE   PyTuple_GetItem(args,2)
+ /* serial output macros: */
+ #define XOUT output,0
+ #endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-21912-21913.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21912-21913.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21912-21913.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21912)
++++ ../trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp	(revision 21913)
+@@ -111,7 +111,7 @@
+ 				&reverse,&indic,izs,rzs,(void*)&data_struct);
+ 
+ 	switch(int(omode)){
+-		case 0:  _printf0_("   Stop requested\n"); break;
++		case 0: /* _printf0_("   Stop requested\n");*/ break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+ 		case 2:  _printf0_("   Bad initialization\n"); break;
+ 		case 3:  _printf0_("   Line search failure\n"); break;
+@@ -163,7 +163,5 @@
+ 		for(int i=0;i<*n;i++) X[i]=Xs[ds->priorn*i+ds->counter];
+ 		for(int i=0;i<*n;i++) G[i]=Gs[ds->priorn*i+ds->counter];
+ 	}
+-
+-	printf("J [i] = %g\n",*pf);
+ }
+ #endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-21913-21914.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21913-21914.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21913-21914.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21913)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 21914)
+@@ -353,7 +353,6 @@
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module load comp-intel/2016.2.181\n');
+-			 fprintf(fid,'module load mpi-sgi/mpt\n');
+ 			 fprintf(fid,'module load netcdf/4.4.1.1_mpt\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt.2.15r20\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n');
Index: /issm/oecreview/Archive/21724-22754/ISSM-21914-21915.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21914-21915.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21914-21915.diff	(revision 22755)
@@ -0,0 +1,188 @@
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 21915)
+@@ -38,8 +38,6 @@
+ }/*}}}*/
+ void MeltingAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+-	int frictionlaw;
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if(iomodel->domaintype==Domain2DhorizontalEnum)return;
+ 
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 21915)
+@@ -58,7 +58,6 @@
+ void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+ 	bool   isefficientlayer;
+-	bool   element_active;
+ 	int    hydrology_model;
+ 	
+ 	/*Fetch data needed: */
+Index: ../trunk-jpl/src/c/bamg/BamgVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 21915)
+@@ -193,7 +193,6 @@
+ 				double detold = tria->det;
+ 				tria->det =  bamg::det( (*tria)[0],(*tria)[1]  ,(*tria)[2]);
+ 				if (loop) {
+-					BamgVertex *v0,*v1,*v2,*v3;
+ 					if (tria->det<0) ok =1;			       
+ 					else if ( (double)tria->det < detold/2 ) ok=1;
+ 				}
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21915)
+@@ -132,7 +132,8 @@
+ 				triangles[nbt].color = Tho.subdomains[reft[i]].ReferenceNumber; 
+ 				nbt++;           
+ 			  }
+-		  if (nbt==0 && nbv==0) {
++		  if (nbt==0 && nbv==0){
++			  delete [] refv;
+ 			  _error_("All triangles have been removed");
+ 		  }
+ 		  delete [] kk;
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 21915)
+@@ -14,8 +14,8 @@
+ int binary_search(int* poffset,int target,int* sorted_integers,int num_integers){ /*{{{*/
+ 
+ 	/*output: */
+-	int offset;  //offset, if found
+-	int found=0; //found=0 if target is not found, 1 otherwise.
++	int offset=0;  //offset, if found
++	int found=0;   //found=0 if target is not found, 1 otherwise.
+ 
+ 	/*intermediary: */
+ 	int *beg = NULL;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 21915)
+@@ -148,7 +148,8 @@
+ 	int    edge1,edge2,edge3;
+ 
+ 	double xel[2],yel[2];
+-	double coord1,coord2;
++	double coord1 = 0.;
++	double coord2 = 0.;
+ 	double xfinal[2],yfinal[2];
+ 
+ 	/*edge 1: */
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 21915)
+@@ -32,7 +32,6 @@
+ 	IssmDouble* dzB=NULL;
+ 
+ 	/*output: */
+-	int m;
+ 	IssmDouble* dz=NULL;
+ 
+ 	//----------------------Calculate Grid Lengths------------------------------
+Index: ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetx.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetx.cpp	(revision 21915)
+@@ -11,12 +11,8 @@
+ 
+ int ExpToLevelSetx(double** pdistance,double* x, double* y, int nods, Contours* contours){
+ 
+-	/*Contour:*/
+-	double value;
+-
+ 	/*output: */
+-	double*  distance;
+-	distance = xNew<double>(nods);
++	double* distance = xNew<double>(nods);
+ 	for(int i=0;i<nods;i++) distance[i]=1e50;
+ 
+ 	/*initialize thread parameters: */
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 21914)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 21915)
+@@ -45,7 +45,7 @@
+ 
+ 		/*Pengrid constructors, destructors {{{*/
+ 		Pengrid();
+-		Pengrid(int index, int id, IoModel* iomodel,int analysis_type);
++		Pengrid(int id, int index, IoModel* iomodel,int analysis_type);
+ 		~Pengrid();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21914)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 21915)
+@@ -320,7 +320,7 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<char*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+ 
+-	int size;
++	int size = 0;
+ 
+ 	if(marshall_direction==MARSHALLING_FORWARD || marshall_direction == MARSHALLING_SIZE)size=strlen(value)+1;
+ 
+Index: ../trunk-jpl/src/c/classes/Params/StringParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 21915)
+@@ -51,7 +51,7 @@
+ /*}}}*/
+ void StringParam::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+ 
+-	int size;
++	int size = 0;
+ 
+ 	if(marshall_direction==MARSHALLING_FORWARD || marshall_direction == MARSHALLING_SIZE)size=strlen(value)+1;
+ 	
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21915)
+@@ -151,7 +151,7 @@
+ 
+ 	#ifndef _HAVE_JAVASCRIPT_
+ 	if(this->parameters->Exist(OutputFileNameEnum)) this->parameters->FindParam(&outbinfilename,OutputFileNameEnum);
+-	if(this-parameters->Exist(LockFileNameEnum)) this->parameters->FindParam(&lockfilename,LockFileNameEnum);
++	if(this->parameters->Exist(LockFileNameEnum)) this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+ 	#endif
+ 
+ 	/*Delete all the datasets: */
+@@ -177,10 +177,7 @@
+ 
+ 	/*Now delete: */
+ 	if(profiler)delete profiler;
+-	
+-	
+-}
+-/*}}}*/
++}/*}}}*/
+ 
+ /*Object management*/
+ void FemModel::CheckPoint(void){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/kriging/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 21914)
++++ ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 21915)
+@@ -256,6 +256,9 @@
+ 	/*If radius is not provided or is 0, return all observations*/
+ 	if(radius==0) radius=this->quadtree->root->length;
+ 
++	/*For CPPcheck*/
++	hmin = 2*radius;
++
+ 	/*First, find closest point in Quadtree (fast but might not be the true closest obs)*/
+ 	this->quadtree->ClosestObs(&index,x_interp,y_interp);
+ 	if(index>=0){
Index: /issm/oecreview/Archive/21724-22754/ISSM-21915-21916.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21915-21916.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21915-21916.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21915)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21916)
+@@ -1069,6 +1069,7 @@
+ 			f1=gl[1]/(gl[1]-gl[2]);
+ 			f2=gl[1]/(gl[1]-gl[0]);
+ 		}
++		else _error_("case not possible");
+ 	}
+ 	*point1=point;
+ 	*fraction1=f1;
+@@ -1179,6 +1180,7 @@
+ 				xyz_bis[2][1]=*(xyz_list+3*1+1)+s2*(*(xyz_list+3*2+1)-*(xyz_list+3*1+1));
+ 				xyz_bis[2][2]=*(xyz_list+3*1+2)+s2*(*(xyz_list+3*2+2)-*(xyz_list+3*1+2));
+ 			}
++			else _error_("case not possible");
+ 
+ 			/*Compute fraction of grounded element*/
+ 			GetJacobianDeterminant(&area_init, xyz_list,NULL);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21915)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21916)
+@@ -895,6 +895,7 @@
+ 			f1=gl[1]/(gl[1]-gl[2]);
+ 			f2=gl[1]/(gl[1]-gl[0]);
+ 		}
++		else _error_("case not possible");
+ 	}
+ 	*point1=point;
+ 	*fraction1=f1;
+@@ -990,6 +991,7 @@
+ 			xyz_bis[2][1]=*(xyz_list+3*1+1)+s2*(*(xyz_list+3*2+1)-*(xyz_list+3*1+1));
+ 			xyz_bis[2][2]=*(xyz_list+3*1+2)+s2*(*(xyz_list+3*2+2)-*(xyz_list+3*1+2));
+ 		}
++		else _error_("case not possible");
+ 
+ 		/*Compute fraction of grounded element*/
+ 		GetTriaJacobianDeterminant(&area_init, xyz_list,NULL);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21916-21917.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21916-21917.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21916-21917.diff	(revision 22755)
@@ -0,0 +1,125 @@
+Index: ../trunk-jpl/src/m/classes/SMBd18opdd.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 21916)
++++ ../trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 21917)
+@@ -96,8 +96,12 @@
+ 			md = checkfield(md,'fieldname','smb.rlapslgm','>=',0,'numel',[1])
+ 
+ 			if self.isd18opd:
+-				md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1,'Inf',1,'timeseries',1)
+-				md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1,'Inf',1,'timeseries',1)
++				lent=float(np.size(self.temperatures_presentday,1))
++				lenp=float(np.size(self.precipitations_presentday,1))
++				multt=np.ceil(lent/12.)*12.
++				multp=np.ceil(lenp/12.)*12.
++				md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices+1,multt],'NaN',1,'Inf',1,'timeseries',1)
++				md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices+1,multp],'NaN',1,'Inf',1,'timeseries',1)
+ 				md = checkfield(md,'fieldname','smb.delta18o','NaN',1,'Inf',1,'size',[2,np.nan],'singletimeseries',1)
+ 				md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',[1])
+ 				md = checkfield(md,'fieldname','smb.f','>=',0,'numel',[1])
+Index: ../trunk-jpl/src/m/classes/SMBd18opdd.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 21916)
++++ ../trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 21917)
+@@ -75,8 +75,12 @@
+ 				md = checkfield(md,'fieldname','smb.rlaps','>=',0,'numel',1);
+ 				md = checkfield(md,'fieldname','smb.rlapslgm','>=',0,'numel',1);
+ 				if(self.isd18opd==1) 
+-					md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1,'Inf',1,'timeseries',1);
+-					md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1,'Inf',1,'timeseries',1);
++					lent=size(self.temperatures_presentday,2);
++					lenp=size(self.precipitations_presentday,2);
++					multt=ceil(lent/12)*12;
++					multp=ceil(lenp/12)*12;
++					md = checkfield(md,'fieldname','smb.temperatures_presentday','size',[md.mesh.numberofvertices+1 multt],'NaN',1,'Inf',1,'timeseries',1);
++					md = checkfield(md,'fieldname','smb.precipitations_presentday','size',[md.mesh.numberofvertices+1 multp],'NaN',1,'Inf',1,'timeseries',1);
+ 					md = checkfield(md,'fieldname','smb.delta18o','NaN',1,'Inf',1,'size',[2,NaN],'singletimeseries',1);
+ 					md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',1);
+ 				   md = checkfield(md,'fieldname','smb.f','>=',0,'numel',1);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21916)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21917)
+@@ -69,7 +69,9 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
++		IssmDouble  GetTimeByOffset(int offset);
+ 		Input* GetTimeInput(IssmDouble time);
++		int  GetTimeInputOffset(IssmDouble time);
+ 		void GetTimeValues(IssmDouble* values,IssmDouble time){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		IssmDouble InfinityNorm(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21916)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21917)
+@@ -538,11 +538,12 @@
+ 	IssmDouble* tmp=xNew<IssmDouble>(numvertices);
+ 	IssmDouble Delta18oTime;
+ 	IssmDouble dpermil,f;
+-	IssmDouble time,yts,time_yr,month;
++	IssmDouble time,yts,time_yr,month,time_clim;
+ 	this->parameters->FindParam(&time,TimeEnum);
+ 	this->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	this->parameters->FindParam(&f,SmbFEnum);
+ 	time_yr=floor(time/yts)*yts;
++	time_clim=time_yr;
+ 
+ 	/*Get some pdd parameters*/
+ 	dpermil=this->matpar->GetMaterialParameter(SmbDpermilEnum);
+@@ -550,13 +551,20 @@
+ 	/*Recover present day temperature and precipitation*/
+ 	Input*     input=this->inputs->GetInput(SmbTemperaturesPresentdayEnum);    _assert_(input);
+ 	Input*     input2=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input2);
++	int offset;
++
++	offset=dynamic_cast<TransientInput*>(input)->GetTimeInputOffset(time_yr);
++	if (fmod(offset,12)!=1){
++		time_clim=floor(dynamic_cast<TransientInput*>(input)->GetTimeByOffset(offset-fmod(offset,12)+1)/yts)*yts;
++	}
++
+ 	/*loop over vertices: */
+ 	Gauss* gauss=this->NewGauss();
+ 	for(int month=0;month<12;month++) {
+ 		for(int iv=0;iv<numvertices;iv++) {
+ 			gauss->GaussVertex(iv);
+-			input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,month/12.*yts);
+-			input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,month/12.*yts);
++			input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,time_clim+month/12.*yts);
++			input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss,time_clim+month/12.*yts);
+ 
+ 			PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts;
+ 		}
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21916)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21917)
+@@ -247,6 +247,27 @@
+ 	delete input;
+ }
+ /*}}}*/
++int  TransientInput::GetTimeInputOffset(IssmDouble time){/*{{{*/
++
++	int        found;
++	int        offset;
++
++	/*go through the timesteps, and figure out which interval we
++	 *     *fall within. Then interpolate the values on this interval: */
++	found=binary_search(&offset,time,this->timesteps,this->numtimesteps);
++	if(!found) _error_("Input not found (is TransientInput sorted ?)");
++
++	return offset;
++}
++/*}}}*/
++IssmDouble  TransientInput::GetTimeByOffset(int offset){/*{{{*/
++
++	if (offset < 0) offset=0;
++	_assert_(this->timesteps[offset]);
++
++	return this->timesteps[offset];
++}
++/*}}}*/
+ void TransientInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){/*{{{*/
+ 
+ 	int         i;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21917-21918.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21917-21918.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21917-21918.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test436.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test436.m	(revision 21917)
++++ ../trunk-jpl/test/NightlyRun/test436.m	(revision 21918)
+@@ -22,7 +22,7 @@
+ 	md=solve(md,'Steadystate');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}],...
+ 		['Temperature' i{1}],['Waterfraction' i{1}],['Enthalpy' i{1}]};
+-	field_tolerances={field_tolerances{:},2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,5e-10,5e-10};
++	field_tolerances={field_tolerances{:},2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,5e-10};
+ 	field_values={field_values{:},...
+ 		(md.results.SteadystateSolution.Vx),...
+ 		(md.results.SteadystateSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21918-21919.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21918-21919.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21918-21919.diff	(revision 22755)
@@ -0,0 +1,1445 @@
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 21918)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 21919)
+@@ -11,7 +11,7 @@
+ /*NeoPZ includes*/
+ /*REAL and STATE definitions, NeoPZ variables itapopo should be read by NeoPZ's config.h*/
+ #ifndef REFPATTERNDIR
+-	# define REFPATTERNDIR "/home/santos/trunk-jpl/externalpackages/neopz/install/include/refpatterns"
++	#define REFPATTERNDIR "/home/santos/trunk-jpl/externalpackages/neopz/install/include/refpatterns"
+ #endif
+ 
+ #ifndef REALdouble
+@@ -23,7 +23,6 @@
+ #endif
+ 
+ #include <pzreal.h>
+-#include <pzsave.h>
+ #include <pzgmesh.h>
+ #include <pzvec.h>
+ #include <pzeltype.h>
+@@ -35,10 +34,15 @@
+ #include <tpzchangeel.h>
+ #include <TPZGeoElement.h>
+ #include <pzreftriangle.h>
++#include <pzgeotriangle.h>
+ #include <tpzgeoelrefpattern.h>
++#include <TPZVTKGeoMesh.h>
++
++#include "../shared/shared.h"
++
+ /*}}}*/
+ 
+-class AdaptiveMeshRefinement : public TPZSaveable {
++class AdaptiveMeshRefinement{
+ 
+ public:
+ 
+@@ -48,11 +52,6 @@
+ 	AdaptiveMeshRefinement(const AdaptiveMeshRefinement &cp); 					
+ 	AdaptiveMeshRefinement & operator= (const AdaptiveMeshRefinement &cp);	
+ 	virtual ~AdaptiveMeshRefinement();												
+-
+-    /*Savable methods*/
+-	virtual int ClassId() const;                                   
+-   virtual void Read(TPZStream &buf,void *context);							
+-   virtual void Write(TPZStream &buf,int withclassid);
+     
+ 	/*General methods*/
+ 	void CleanUp();
+@@ -69,11 +68,15 @@
+ 
+ private:
+ 	/*Private attributes*/
+-   int elementswidth;                                    // Geometric nodes for element: 3 == Tria, 4 == Tetra, 6 == Penta
++	int elementswidth;                                    // Geometric nodes for element: 3 == Tria, 4 == Tetra, 6 == Penta
+    int levelmax;                                         // Max level of refinement
+ 	double regionlevel1;												// Region which will be refined with level 1
+ 	double regionlevelmax;											// Region which will be refined with level max
++	int step;	//itapopo testando
++	int smooth_frequency; //itapopo testando
+ 	std::vector<int> sid2index;									// Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid) 
++	std::vector<int> index2sid;									// Vector that keeps sid of issm mesh elements used in the neopz mesh (index) 
++	std::vector<int> specialelementsindex;						// Vector that keeps index of the special elements (created to avoid haning nodes) 
+ 	TPZGeoMesh *fathermesh;											// Father Mesh is the entire mesh without refinement
+ 	TPZGeoMesh *currentmesh;										// Current Mesh is the refined mesh
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 21918)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 21919)
+@@ -176,15 +176,18 @@
+ 		void SmoothedGradThickness(IssmDouble** pdHdx,IssmDouble** pdHdy);
+ 		void ThicknessZZErrorEstimator(IssmDouble** pelementerror);
+ 		void MeanGroundedIceLevelSet(IssmDouble** pmasklevelset);
++		void GetElementCenterCoordinates(IssmDouble** pxc,IssmDouble** pyc);
+ 		#endif
+ 
+ 		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		void ReMeshBamg(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementBamg(void);
++		void GethmaxVerticesFromZeroLevelSetDistance(IssmDouble* hmaxvertices,int levelset_type);
++		void GethmaxVerticesFromEstimators(IssmDouble* hmaxvertices,int errorestimator_type);
++		void GetVerticeDistanceToZeroLevelSet(IssmDouble** pverticedistance,int leveset_type);
+ 		#endif
+ 
+ 		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+-		/*Adaptive mesh refinement methods*/
+ 		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementNeopz(void);
+ 		void SetRefPatterns(void);
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 21919)
+@@ -9,10 +9,7 @@
+ #endif
+ 
+ #include "./AdaptiveMeshRefinement.h"
+-#include "TPZVTKGeoMesh.h"
+-#include "../shared/shared.h"
+-#include "pzgeotriangle.h"
+-#include "pzreftriangle.h"
++
+ using namespace pzgeom;
+ 
+ /*Constructor, copy, clean up and destructor*/
+@@ -39,25 +36,17 @@
+ 	this->sid2index.clear();
+ 	this->sid2index.resize(cp.sid2index.size());
+ 	for(int i=0;i<cp.sid2index.size();i++) this->sid2index[i]=cp.sid2index[i];
+-	
++	this->index2sid.clear();
++	this->index2sid.resize(cp.index2sid.size());
++	for(int i=0;i<cp.index2sid.size();i++) this->index2sid[i]=cp.index2sid[i];
++	this->specialelementsindex.clear();
++	this->specialelementsindex.resize(cp.specialelementsindex.size());
++	for(int i=0;i<cp.specialelementsindex.size();i++) this->specialelementsindex[i]=cp.specialelementsindex[i];
++
+ 	return *this;
+-
+ }
+ /*}}}*/
+ AdaptiveMeshRefinement::~AdaptiveMeshRefinement(){/*{{{*/
+-	
+-	bool ismismip = false;
+-	if(ismismip){//itapopo
+-		TPZFileStream fstr;
+-		std::stringstream ss;
+-	    
+-		ss << this->levelmax;
+-		std::string AMRfile	= "/home/santos/L" + ss.str() + "_amr.txt"; 
+-	
+-		fstr.OpenWrite(AMRfile.c_str());
+-		int withclassid = 1;
+-		this->Write(fstr,withclassid);
+-	}
+ 	this->CleanUp();
+ 	gRefDBase.clear();
+ }
+@@ -72,6 +61,8 @@
+ 	this->regionlevel1		= -1;
+ 	this->regionlevelmax		= -1;
+ 	this->sid2index.clear();
++	this->index2sid.clear();
++	this->specialelementsindex.clear();
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::Initialize(){/*{{{*/
+@@ -83,84 +74,14 @@
+ 	this->elementswidth		= -1;
+ 	this->regionlevel1		= -1;
+ 	this->regionlevelmax		= -1;
++	this->step					= 0;
++	this->smooth_frequency	= 1;
+ 	this->sid2index.clear();
++	this->index2sid.clear();
++	this->specialelementsindex.clear();
+ }
+ /*}}}*/
+-int AdaptiveMeshRefinement::ClassId() const{/*{{{*/
+-    return 13829430; //Antartic area with ice shelves (km^2)
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::Read(TPZStream &buf,void *context){/*{{{*/
+ 
+-	try
+-	{
+-		/* Read the id context*/
+-		TPZSaveable::Read(buf,context);
+-		/* Read class id*/
+-		int classid;
+-		buf.Read(&classid,1); 
+-		/* Verify the class id*/
+-      if(classid!=this->ClassId()) _error_("AdaptiveMeshRefinement::Read: Error in restoring AdaptiveMeshRefinement!\n"); 
+-		/* Read simple attributes */
+-		buf.Read(&this->levelmax,1);
+-		buf.Read(&this->elementswidth,1);
+-		buf.Read(&this->regionlevel1,1);
+-		buf.Read(&this->regionlevelmax,1);
+-		/* Read vector attributes*/
+-		int size;
+-		buf.Read(&size,1);
+-		int* psid2index=xNew<int>(size);
+-		buf.Read(psid2index,size);
+-		this->sid2index.clear();
+-		this->sid2index.assign(psid2index,psid2index+size);
+-		/* Read geometric mesh (father)*/
+-		TPZSaveable *sv1 = TPZSaveable::Restore(buf,0);
+-		this->fathermesh = dynamic_cast<TPZGeoMesh*>(sv1);
+-		/* Read geometric mesh (current)*/
+-		TPZSaveable *sv2 = TPZSaveable::Restore(buf,0);
+-		this->currentmesh = dynamic_cast<TPZGeoMesh*>(sv2);
+-		/* Cleanup*/
+-		xDelete<int>(psid2index);
+-	}
+-	catch(const std::exception& e)
+-	{
+-		_error_("AdaptiveMeshRefinement::Read: Exception catched!\n");
+-	}
+-
+-}
+-/*}}}*/
+-template class TPZRestoreClass<AdaptiveMeshRefinement,13829430>;/*{{{*/
+-/*}}}*/
+-void AdaptiveMeshRefinement::Write(TPZStream &buf,int withclassid){/*{{{*/
+-    
+-	try
+-	{
+-		/* Write context (this class) class ID*/
+-		TPZSaveable::Write(buf,withclassid);
+-		/* Write this class id*/
+-		int classid = this->ClassId();
+-		buf.Write(&classid,1);
+-		/* Write simple attributes */
+-		buf.Write(&this->levelmax,1);
+-		buf.Write(&this->elementswidth,1);
+-		buf.Write(&this->regionlevel1,1);
+-		buf.Write(&this->regionlevelmax,1);
+-		/* Write vector attributes*/
+-		int size=this->sid2index.size();
+-		int* psid2index=&this->sid2index[0];
+-		buf.Write(&size,1);//vector size
+-		buf.Write(psid2index,this->sid2index.size());
+-		/* Write the geometric mesh*/
+-		this->fathermesh->Write(buf,this->ClassId());
+-		this->currentmesh->Write(buf,this->ClassId());
+-    }
+-    catch(const std::exception& e)
+-    {
+-		_error_("AdaptiveMeshRefinement::Write: Exception catched!\n");
+-    }
+-}
+-/*}}}*/
+-
+ /*Mesh refinement methods*/
+ void AdaptiveMeshRefinement::Execute(bool &amr_verbose,
+ 												int &numberofelements,
+@@ -175,29 +96,69 @@
+ 	if(!this->fathermesh || !this->currentmesh) _error_("Impossible to execute refinement: fathermesh or currentmesh is NULL!\n");
+ 	if(numberofelements!=this->sid2index.size()) _error_("Impossible to execute refinement: sid2index.size is not equal to numberofelements!\n");
+ 
++	/*Combine the fields*/
++	double mean_mask		= 0;
++	double mean_tauerror = 0;
++	double mean_Herror	= 0;
++	int* fmask				= xNew<int>(numberofelements);
++	int* ftauerror			= xNew<int>(numberofelements);
++	int* fHerror			= xNew<int>(numberofelements);
++	int* phi					= xNew<int>(numberofelements);
++	/*Calculate mean values*/
++	for(int i=0;i<this->sid2index.size();i++){
++		mean_mask		+= masklevelset[i]; 
++		mean_tauerror	+= deviatorictensorerror[i]; 
++		mean_Herror		+= thicknesserror[i];
++	}
++	mean_mask		/= this->sid2index.size();
++	mean_tauerror	/= this->sid2index.size();
++	mean_Herror		/= this->sid2index.size();
++	/*Filter to thickness*/
++	for(int i=0;i<this->sid2index.size();i++){
++		fmask[i]=0;
++		if(thicknesserror[i]>mean_Herror) fmask[i]=1;
++	}
++	/*Filter to tau*/
++	for(int i=0;i<this->sid2index.size();i++){
++		ftauerror[i]=0;
++		if(deviatorictensorerror[i]>mean_tauerror) ftauerror[i]=1;
++	}
++	/*Sum*/
++	for(int i=0;i<this->sid2index.size();i++){
++		phi[i]=ftauerror[i]+fmask[i];
++	}
++
+ 	/*Execute the refinement.*/
+ 	this->RefinementProcess(amr_verbose,partiallyfloatedelements,masklevelset,deviatorictensorerror,thicknesserror);
+-    
++   
+ 	/*Get new geometric mesh in ISSM data structure*/
+ 	this->GetMesh(newnumberofvertices,newnumberofelements,x,y,elementslist);
+-	
++
++	std::ofstream file("/home/santos/mesh.vtk");
++	TPZVTKGeoMesh::PrintGMeshVTK(this->currentmesh,file);
++
+ 	/*Verify the new geometry*/
+ 	this->CheckMesh(newnumberofvertices,newnumberofelements,this->elementswidth,x,y,elementslist);
+ 
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,
+-																double* deviatorictensorerror,double* thicknesserror){/*{{{*/
++void AdaptiveMeshRefinement::RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror){/*{{{*/
+    
+ 	if(amr_verbose) _printf_("\n\trefinement process started (level max = " << this->levelmax << ")\n");
+ 	
+ 	/*Intermediaries*/
+ 	TPZGeoMesh* nohangingnodesmesh=NULL;
++
++	//itapopo
++	this->step++;
++
+ 	double mean_mask		= 0;
+ 	double mean_tauerror = 0;
+ 	double mean_Herror	= 0;
+-	double group_error	= 0;
+-   
++	double group_Herror	= 0;
++	int index,sid;
++	std::vector<int> specialfatherindex; specialfatherindex.clear();
++
+ 	/*Calculate mean values*/
+ 	for(int i=0;i<this->sid2index.size();i++){
+ 		mean_mask		+= masklevelset[i]; 
+@@ -208,33 +169,129 @@
+ 	mean_tauerror	/= this->sid2index.size();
+ 	mean_Herror		/= this->sid2index.size();
+ 
++	if(amr_verbose) _printf_("\t\tdeal with special elements...\n");
++	/*Deal with special elements*/
++	for(int i=0;i<this->specialelementsindex.size();i++){
++		if(this->specialelementsindex[i]==-1) continue;
++		/*Get special element and verify*/
++		TPZGeoEl* geoel=this->currentmesh->Element(this->specialelementsindex[i]);
++		if(!geoel)_error_("special element (sid) "<<i<<" is null!\n");
++		if(geoel->HasSubElement())_error_("special element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
++		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
++		if(!geoel->Father())_error_("father of special element (sid) "<<i<<" is null!\n");
++		
++		/*Get element's siblings and verify*/
++		TPZGeoEl* father=geoel->Father();
++		TPZVec<TPZGeoEl *> siblings;
++		father->GetHigherSubElements(siblings);
++		std::vector<int> sidvec; sidvec.resize(siblings.size());
++		for (int j=0;j<siblings.size();j++){
++			if(!siblings[j]) _error_("special element (sid) "<<i<<" has a null siblings null!\n"); 
++			sidvec[j]=this->index2sid[siblings[j]->Index()];
++		}
++		
++		/*Now, reset the data strucure and verify if the siblings should be deleted*/	
++		if(siblings.size()<4){
++			/*Reset subelements in the father*/
++			father->ResetSubElements();
++		}else{
++			if(siblings.size()!=4) _error_("element (index) "<<father->Index()<<" has "<<father->NSubElements()<<" subelements!\n");
++		}
++		for (int j=0;j<siblings.size();j++){
++			for(int k=0;k<this->specialelementsindex.size();k++){
++				if(this->specialelementsindex[k]==siblings[j]->Index()){ 
++					index									= siblings[j]->Index();
++					if(index<0) _error_("index is null!\n");
++					sid									= this->index2sid[index];
++					if(sid<0) _error_("sid is null!\n");
++					this->specialelementsindex[k]	= -1;
++					this->index2sid[index]			= -1;
++					this->sid2index[sid]				= -1;
++				}
++			}
++			if(siblings.size()<4){
++				/*Ok, the special element can be deleted*/
++				siblings[j]->ResetSubElements();
++				this->currentmesh->DeleteElement(siblings[j],siblings[j]->Index());
++			}
++		}
++		
++		/*Now, verify if the father should be refined with uniform pattern (smoother)*/
++		this->smooth_frequency=10000000;
++		if(siblings.size()==3 || this->step%this->smooth_frequency==0){//it keeps the mesh with uniform elements
++			/*Father has uniform subelements now*/
++			TPZVec<TPZGeoEl *> sons;
++			father->Divide(sons);
++			this->smooth_frequency=this->step;
++		}else{
++			specialfatherindex.push_back(father->Index());
++		}
++		if(this->specialelementsindex[i]!=-1) _error_("special element "<<i<<" was not deleted!\n");	
++	}
++	this->currentmesh->BuildConnectivity();
++	
+ 	if(amr_verbose) _printf_("\t\tuniform refinement...\n");
++	/*Deal with uniform elemnts*/
+ 	for(int i=0;i<this->sid2index.size();i++){
++		if(this->sid2index[i]==-1) continue;
++		/*Get element and verify*/
+ 		TPZGeoEl* geoel=this->currentmesh->Element(this->sid2index[i]);
+-		if(geoel->HasSubElement()) _error_("Impossible to refine: geoel (index) "<<this->sid2index[i]<<" has subelements!\n");
+-		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("Impossible to refine: geoel->MaterialId is not GetElemMaterialID!\n");
+-		/*Refine*/
+-		if(thicknesserror[i]>mean_Herror){
++		if(geoel->HasSubElement()) _error_("element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
++		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
++
++		/*Refine process*/
++		if(thicknesserror[i]>mean_Herror)
++		{	
++			int count=0;
++			TPZGeoEl* father=geoel->Father();
++			if(father){
++				for(int j=3;j<6;j++){
++					index=father->Neighbour(j).Element()->Index();
++					for(int k=0;k<specialfatherindex.size();k++) if(specialfatherindex[k]==index) count++;
++				}
++			}
+ 			TPZVec<TPZGeoEl *> sons;
+-			if(geoel->Level()<this->levelmax) geoel->Divide(sons);
++			if(geoel->Level()<this->levelmax && count==0) geoel->Divide(sons);
+ 		} 
+-		else if(geoel->Level()>0){ /*try to unrefine*/
+-			TPZVec<TPZGeoEl *> sons;
+-			geoel->Father()->GetHigherSubElements(sons);
+-			group_error=0;
+-			for(int j=0;j<sons.size();j++){
+-				sons[j]->Index();
++		else if(geoel->Level()>0)
++		{/*Unrefine process*/
++			
++			/*Get siblings and verify*/
++			TPZVec<TPZGeoEl *> siblings;
++			geoel->Father()->GetHigherSubElements(siblings);
++			//if(siblings.size()<4) _error_("Impossible to refine: geoel (index) "<<this->sid2index[i]<<" has less than 3 siblings!\n");	
++			if(siblings.size()>4) continue;//Father has more then 4 sons, this group should not be unrefined.
++			
++			/*Compute the error of the group*/
++			group_Herror=0;
++			for(int j=0;j<siblings.size();j++){
++				index		= siblings[j]->Index();
++				sid		= this->index2sid[index];
++				if(sid==-1) continue;
++				group_Herror+=thicknesserror[sid];
+ 			}
+-		}
+-	}
++			/*Verify if this group should be unrefined*/
++			if(group_Herror>0 && group_Herror<0*mean_Herror){ //itapopo
++				/*Reset subelements in the father*/
++				this->currentmesh->Element(geoel->Father()->Index())->ResetSubElements();
++				/*Delete the elements and set their indexes in the index2sid and sid2index*/
++				for (int j=0;j<siblings.size();j++){
++					index	= siblings[j]->Index();
++					sid	= this->index2sid[index];
++					this->index2sid[index]=-1;
++					if(sid!=-1) this->sid2index[sid]=-1;
++					this->currentmesh->DeleteElement(siblings[j],siblings[j]->Index());
++				}//for j
++			}//if
++		}/*Unrefine process*/
++	}//for i
+ 	this->currentmesh->BuildConnectivity();
+ 	
+ 	if(amr_verbose) _printf_("\t\trefine to avoid hanging nodes...\n");
+ 	this->RefineMeshToAvoidHangingNodes(this->currentmesh);
+-	this->currentmesh->BuildConnectivity();
+ 	
+ 		//nohangingnodesmesh = this->CreateRefPatternMesh(newmesh); itapopo tentar otimizar
+-	
++
+ 	if(amr_verbose) _printf_("\trefinement process done!\n");
+ }
+ /*}}}*/
+@@ -256,7 +313,8 @@
+ /*}}}*/
+ void AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh){/*{{{*/
+    
+-	/*Refine elements to avoid hanging nodes: non-uniform refinement*/
++	/*Now, insert special elements to avoid hanging nodes*/
++	this->specialelementsindex.clear();
+ 	const int NElem = gmesh->NElements();
+ 	for(int i=0;i<NElem;i++){
+ 		/*Get geometric element and verify if it has already been refined. Geoel may not have been previously refined*/
+@@ -267,13 +325,15 @@
+ 		/*Get the refinement pattern for this element and refine it*/
+ 		TPZAutoPointer<TPZRefPattern> refp=TPZRefPatternTools::PerfectMatchRefPattern(geoel);
+ 		if(refp){
++			/*Non-uniform refinement*/
+ 			TPZVec<TPZGeoEl *> Sons;
+ 			geoel->SetRefPattern(refp);
+ 			geoel->Divide(Sons);
+-      }
++			/*Keep the index of the special elements*/
++			for(int j=0;j<Sons.size();j++) this->specialelementsindex.push_back(Sons[j]->Index());
++		}
+ 	}
+-   gmesh->BuildConnectivity();
+-    
++	gmesh->BuildConnectivity();
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::GetMesh(int &nvertices,int &nelements,double** px,double** py, int** pelements){/*{{{*/
+@@ -280,8 +340,8 @@
+ 
+ 	/* IMPORTANT! pelements are in Matlab indexing
+ 	   NEOPZ works only in C indexing.
+-		This method cleans up and updated the this->sid2index 
+-		and fills in it with the new mesh.
++		This method cleans up and updated the this->sid2index
++		and this->index2sid and fills in it with the new mesh.
+ 		Avoid to call this method before Refinement Process.*/
+ 
+ 	/*Intermediaries */
+@@ -294,6 +354,7 @@
+ 	double* newmeshY			= NULL;//xNew<double>(ntotalvertices);
+ 	TPZGeoEl* geoel			= NULL;
+ 	long* vertex_index2sid 	= xNew<long>(gmesh->NNodes());
++	this->index2sid.clear(); this->index2sid.resize(gmesh->NElements());
+ 	this->sid2index.clear();
+ 	
+ 	/*Get mesh coords */
+@@ -307,6 +368,9 @@
+ 	/*Fill in the vertex_index2sid vector with non usual index value*/
+ 	for(int i=0;i<gmesh->NNodes();i++) vertex_index2sid[i]=-1;
+ 	
++	/*Fill in the this->index2sid vector with non usual index value*/
++	for(int i=0;i<gmesh->NElements();i++) this->index2sid[i]=-1;
++	
+ 	/*Get elements without sons and fill in the vertex_index2sid with used vertices (indexes) */
+ 	sid=0;
+ 	for(int i=0;i<gmesh->NElements();i++){//over gmesh elements index 
+@@ -315,6 +379,7 @@
+ 		if(geoel->HasSubElement()) continue;
+ 		if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
+ 		this->sid2index.push_back(i);//keep the element index
++		this->index2sid[i]=this->sid2index.size()-1;//keep the element sid
+ 		for(int j=0;j<this->elementswidth;j++){
+       	nodeindex=geoel->NodeIndex(j);
+       	if(vertex_index2sid[nodeindex]==-1){
+@@ -346,8 +411,29 @@
+ 			sid	= vertex_index2sid[geoel->NodeIndex(j)];
+ 			newelements[i*this->elementswidth+j]=(int)sid+1;//C to Matlab indexing
+ 		}
++		/*Verify the Jacobian determinant. If detJ<0, swap the 2 first postions:
++		  a -> b
++		  b -> a */
++		double detJ,xa,xb,xc,ya,yb,yc;
++		int a,b,c;
++
++		a=newelements[i*this->elementswidth+0]-1;
++		b=newelements[i*this->elementswidth+1]-1;
++		c=newelements[i*this->elementswidth+2]-1;
++
++		xa=newmeshX[a]; ya=newmeshY[a];
++		xb=newmeshX[b]; yb=newmeshY[b];
++		xc=newmeshX[c]; yc=newmeshY[c];
++
++		detJ=(xb-xa)*(yc-ya)-(xc-xa)*(yb-ya);
++	
++		/*verify and swap, if necessary*/
++		if(detJ<0) {
++			newelements[i*this->elementswidth+0]=b+1;//a->b
++			newelements[i*this->elementswidth+1]=a+1;//b->a
++		}
+ 	}
+- 
++
+ 	/*Setting outputs*/
+ 	nvertices	= nconformvertices;
+ 	nelements	= nconformelements;
+@@ -357,7 +443,6 @@
+    
+ 	/*Cleanup*/
+ 	xDelete<long>(vertex_index2sid);
+-
+ }
+ /*}}}*/
+ void AdaptiveMeshRefinement::FindElements(int &numberofpoints,double* xp,double* yp,TPZGeoMesh *gmesh,int &hlevel,std::vector<int> &elements){/*{{{*/
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 21918)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 21919)
+@@ -24,9 +24,9 @@
+ %   - maxnbv :            maximum number of vertices used to allocate memory (default is 10^6)
+ %   - maxsubdiv :         maximum subdivision of exisiting elements (default is 10)
+ %   - metric :            matrix (numberofnodes x 3) used as a metric
+-%   - Metrictype :        1 -> absolute error          c/(err coeff^2) * Abs(H)        (default)
+-%                         2 -> relative error          c/(err coeff^2) * Abs(H)/max(s,cutoff*max(s))
+-%                         3 -> rescaled absolute error c/(err coeff^2) * Abs(H)/(smax-smin)
++%   - Metrictype :        0 -> absolute error          c/(err coeff^2) * Abs(H)        (default)
++%                         1 -> relative error          c/(err coeff^2) * Abs(H)/max(s,cutoff*max(s))
++%                         2 -> rescaled absolute error c/(err coeff^2) * Abs(H)/(smax-smin)
+ %   - nbjacoby :          correction used by Hessiantype=1 (default is 1)
+ %   - nbsmooth :          number of metric smoothing procedure (default is 3)
+ %   - omega :             relaxation parameter of the smoothing procedure (default is 1.8)
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21919)
+@@ -113,6 +113,15 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.hmin",AmrHminEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.hmax",AmrHmaxEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.err",AmrErrEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.keepmetric",AmrKeepMetricEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_resolution",AmrGroundingLineResolutionEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_resolution",AmrIceFrontResolutionEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_resolution",AmrThicknessErrorResolutionEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_resolution",AmrDeviatoricErrorResolutionEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
+ 				/*Convert fieldname to enum and put it in params*/
+ 				iomodel->FindConstant(&fieldname,"md.amr.fieldname");
+ 				parameters->AddObject(new IntParam(AmrFieldEnum,StringToEnumx(fieldname)));
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21918)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21919)
+@@ -13,14 +13,27 @@
+ 
+ 	public:
+ 		int fieldenum;
++		int keepmetric;
++		IssmDouble groundingline_resolution;
++		IssmDouble groundingline_distance;
++		IssmDouble icefront_resolution;
++		IssmDouble icefront_distance;
++		IssmDouble thicknesserror_resolution;
++		IssmDouble thicknesserror_threshold;
++		IssmDouble deviatoricerror_resolution;
++		IssmDouble deviatoricerror_threshold;
+ 
+ 		/* Constructor, destructor etc*/
+-		AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err_in);
++		AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,
++            		IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
++                  IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
++                  IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
++                  IssmDouble deviatoricerror_resolution_in,IssmDouble deviatoricerror_threshold_in);
+ 		~AmrBamg();
+ 
+ 		/*General methods*/
+ 		void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
+-		void ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
++		void ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
+ 
+ 	private:
+ 		BamgGeom* geometry;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21919)
+@@ -2302,9 +2302,9 @@
+ 		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+ 								 #endif
+ 
+-								 #if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
++		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 		case AmrBamgEnum: this->ReMeshBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+-								#endif
++		#endif
+ 
+ 		default: _error_("not implemented yet");
+ 	}
+@@ -2719,11 +2719,9 @@
+ /*}}}*/
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+-	//itapopo
+ 	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->WriteErrorEstimatorsInResults();
+ 	#endif
+-	//itapopo
+ 
+ 	int step					= -1;
+ 	int numberofelements = -1;
+@@ -2754,30 +2752,6 @@
+ 	this->results->AddResult(new GenericExternalResult<IssmDouble*>(this->results->Size()+1,MeshYEnum,
+ 					y,numberofvertices,1,step,time));
+ 	
+-	//itapopo
+-	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+-	if(IssmComm::GetRank()==0){
+-		TPZFileStream fstr;
+-		std::stringstream ss;
+-		int frictionlaw,levelmax;
+-		this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
+-		this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
+-		ss << levelmax;
+-		if(frictionlaw==1){
+-			ss << "_viscous/amr.txt";
+-		}else if(frictionlaw==7){
+-			ss << "_tsai/amr.txt";
+-		}else{
+-			_error_("friction law not supported here.");
+-		}
+-		std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
+-		fstr.OpenWrite(AMRfile.c_str());
+-		int withclassid = 1;
+-		this->amr->Write(fstr,withclassid);
+-	}
+-	#endif
+-	//itapopo
+-	
+ 	/*Cleanup*/
+ 	xDelete<IssmDouble>(x);
+ 	xDelete<IssmDouble>(y);
+@@ -3613,6 +3587,47 @@
+ 
+ }
+ /*}}}*/
++void FemModel::GetElementCenterCoordinates(IssmDouble** pxc,IssmDouble** pyc){/*{{{*/
++
++	/*Intermediaries*/
++   int elementswidth          = this->GetElementsWidth();
++   int numberofelements       = this->elements->NumberOfElements();
++   int* elem_vertices			= xNew<int>(elementswidth);
++   Vector<IssmDouble>* vxc		= new Vector<IssmDouble>(numberofelements);
++   Vector<IssmDouble>* vyc		= new Vector<IssmDouble>(numberofelements);
++	IssmDouble *x					= NULL;
++	IssmDouble *y					= NULL;
++	IssmDouble *z					= NULL;	
++
++	/*Get vertices coordinates*/
++	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
++
++	/*Insert the element center coordinates*/
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetVerticesSidList(elem_vertices);
++      int sid = element->Sid();
++      vxc->SetValue(sid,(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.,INS_VAL);
++      vyc->SetValue(sid,(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.,INS_VAL);
++   }
++
++   /*Assemble*/
++   vxc->Assemble();
++   vyc->Assemble();
++
++   /*Serialize and set output*/
++   (*pxc)=vxc->ToMPISerial();
++   (*pyc)=vyc->ToMPISerial();
++
++   /*Cleanup*/
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++   xDelete<int>(elem_vertices);
++   delete vxc;
++   delete vyc;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef  _HAVE_DAKOTA_
+@@ -4335,20 +4350,41 @@
+ 	/*Get Rank*/
+ 	int my_rank	= IssmComm::GetRank();
+ 
++	/*Intermediaries*/
++	int numberofvertices 				= this->vertices->NumberOfVertices();
++	IssmDouble* vector_serial			= NULL;
++	IssmDouble* hmaxvertices_serial	= NULL;
++	Vector<IssmDouble> *vector			= NULL;
++
+ 	/*Get vector to create metric*/
+-	int numberofvertices = this->vertices->NumberOfVertices();
+-	Vector<IssmDouble> *vector = NULL;
+-	GetVectorFromInputsx(&vector,this,this->amrbamg->fieldenum,VertexSIdEnum);
+-	vector->Assemble();
+-	IssmDouble* vector_serial = vector->ToMPISerial();
+-	delete vector;
++	if(this->amrbamg->fieldenum!=NoneEnum){
++		GetVectorFromInputsx(&vector,this,this->amrbamg->fieldenum,VertexSIdEnum);
++		vector->Assemble();
++		vector_serial = vector->ToMPISerial();
++	}
+ 
++	/*Get hmaxVertices to create metric*/
++	if(this->amrbamg->groundingline_distance>0||this->amrbamg->icefront_distance>0||
++		this->amrbamg->thicknesserror_threshold>0||this->amrbamg->deviatoricerror_threshold>0){
++		/*Initialize hmaxvertices with NAN*/
++		hmaxvertices_serial=xNew<IssmDouble>(numberofvertices);
++		for(int i=0;i<numberofvertices;i++) hmaxvertices_serial[i]=NAN; 
++		/*Fill hmaxvertices*/
++		if(this->amrbamg->groundingline_distance>0)		this->GethmaxVerticesFromZeroLevelSetDistance(hmaxvertices_serial,MaskGroundediceLevelsetEnum);
++		if(this->amrbamg->icefront_distance>0)				this->GethmaxVerticesFromZeroLevelSetDistance(hmaxvertices_serial,MaskIceLevelsetEnum);
++		if(this->amrbamg->thicknesserror_threshold>0)	this->GethmaxVerticesFromEstimators(hmaxvertices_serial,ThicknessErrorEstimatorEnum);
++		if(this->amrbamg->deviatoricerror_threshold>0)	this->GethmaxVerticesFromEstimators(hmaxvertices_serial,DeviatoricStressErrorEstimatorEnum);
++	}
++
+ 	if(my_rank==0){
+-		this->amrbamg->ExecuteRefinementBamg(vector_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
++		this->amrbamg->ExecuteRefinementBamg(vector_serial,hmaxvertices_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
+ 	}
+ 
++	/*Cleanup*/
+ 	xDelete<IssmDouble>(vector_serial);
++	xDelete<IssmDouble>(hmaxvertices_serial);
++	delete vector;
+ 
+ 	/*Send new mesh to others CPU*/
+ 	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+@@ -4378,14 +4414,14 @@
+ 	/*Define variables*/
+ 	int numberofvertices      = this->vertices->NumberOfVertices();
+ 	int numberofelements      = this->elements->NumberOfElements();
+-	int numberofsegments      = 0; //used on matlab
+ 	IssmDouble* x             = NULL;
+ 	IssmDouble* y             = NULL;
+ 	IssmDouble* z             = NULL;
+ 	int* elements             = NULL;
+-	int elementswidth         = this->GetElementsWidth(); //just tria elements in this version. Itapopo:
+ 	IssmDouble hmin,hmax,err;
+-	int        fieldenum;
++	IssmDouble groundingline_resolution,groundingline_distance,icefront_resolution,icefront_distance;
++	IssmDouble thicknesserror_resolution,thicknesserror_threshold,deviatoricerror_resolution,deviatoricerror_threshold;
++	int        fieldenum,keepmetric;
+ 
+    /*Get rank*/
+ 	int my_rank = IssmComm::GetRank();
+@@ -4401,9 +4437,22 @@
+ 	this->parameters->FindParam(&hmax,AmrHmaxEnum);
+ 	this->parameters->FindParam(&fieldenum,AmrFieldEnum);
+ 	this->parameters->FindParam(&err,AmrErrEnum);
++	this->parameters->FindParam(&keepmetric,AmrKeepMetricEnum);
++	this->parameters->FindParam(&groundingline_resolution,AmrGroundingLineResolutionEnum);
++	this->parameters->FindParam(&groundingline_distance,AmrGroundingLineDistanceEnum);
++	this->parameters->FindParam(&icefront_resolution,AmrIceFrontResolutionEnum);
++	this->parameters->FindParam(&icefront_distance,AmrIceFrontDistanceEnum);
++	this->parameters->FindParam(&thicknesserror_resolution,AmrThicknessErrorResolutionEnum);
++	this->parameters->FindParam(&thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&deviatoricerror_resolution,AmrDeviatoricErrorResolutionEnum);
++	this->parameters->FindParam(&deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
+ 
+ 	/*Create bamg data structures for bamg*/
+-	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err);
++	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err,keepmetric,
++										 groundingline_resolution,groundingline_distance,
++										 icefront_resolution,icefront_distance,
++										 thicknesserror_resolution,thicknesserror_threshold,
++										 deviatoricerror_resolution,deviatoricerror_threshold);
+ 
+ 	/*Re-create original mesh and put it in bamg structure (only cpu 0)*/
+ 	if(my_rank==0){ 
+@@ -4417,6 +4466,204 @@
+ 	xDelete<int>(elements);
+ }
+ /*}}}*/
++void FemModel::GethmaxVerticesFromZeroLevelSetDistance(IssmDouble* hmaxvertices,int levelset_type){/*{{{*/
++
++	if(!hmaxvertices) _error_("hmaxvertices is NULL!\n");
++	
++	/*Intermediaries*/
++	int numberofvertices			 = this->vertices->NumberOfVertices();
++	IssmDouble* verticedistance = NULL;
++	IssmDouble threshold,resolution;
++
++	switch(levelset_type){
++		case MaskGroundediceLevelsetEnum: 
++			threshold	= this->amrbamg->groundingline_distance;
++			resolution	= this->amrbamg->groundingline_resolution;
++			break;
++		case MaskIceLevelsetEnum:
++			threshold	= this->amrbamg->icefront_distance;
++			resolution	= this->amrbamg->icefront_resolution;
++			break;
++		default: _error_("not implemented yet");
++	}
++
++	/*Get vertice distance to zero level set points*/
++	this->GetVerticeDistanceToZeroLevelSet(&verticedistance,levelset_type);
++	if(!verticedistance) _error_("verticedistance is NULL!\n");
++	
++	/*Fill hmaxVertices*/
++	for(int i=0;i<numberofvertices;i++){
++		if(verticedistance[i]<threshold){
++			if(xIsNan<IssmDouble>(hmaxvertices[i])) hmaxvertices[i]=resolution;
++			else hmaxvertices[i]=min(resolution,hmaxvertices[i]);
++		}
++	}
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(verticedistance);
++}
++/*}}}*/
++void FemModel::GethmaxVerticesFromEstimators(IssmDouble* hmaxvertices,int errorestimator_type){/*{{{*/
++   
++	if(!hmaxvertices) _error_("hmaxvertices is NULL!\n");
++
++	/*Intermediaries*/
++	int numberofelements				= this->elements->NumberOfElements();
++	int numberofvertices				= this->vertices->NumberOfVertices();
++	IssmDouble* error_elements		= NULL;
++	IssmDouble* error_vertices		= NULL;
++	IssmDouble *x						= NULL;
++	IssmDouble *y						= NULL;
++	IssmDouble *z						= NULL;
++	int *index							= NULL;
++	IssmDouble maxerror,threshold,resolution;
++	
++	switch(errorestimator_type){
++		case ThicknessErrorEstimatorEnum: 
++			threshold	= this->amrbamg->thicknesserror_threshold;
++			resolution	= this->amrbamg->thicknesserror_resolution;
++			this->ThicknessZZErrorEstimator(&error_elements);
++			break;
++		case DeviatoricStressErrorEstimatorEnum:
++			threshold	= this->amrbamg->deviatoricerror_threshold;
++			resolution	= this->amrbamg->deviatoricerror_resolution;
++			this->ZZErrorEstimator(&error_elements);
++			break;
++		default: _error_("not implemented yet");
++	}
++
++	if(!error_elements) _error_("error_elements is NULL!\n");
++
++	/*Get mesh*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&index);
++
++	/*Sum the estimators over the vertices*/
++	error_vertices=xNewZeroInit<IssmDouble>(numberofvertices);
++	for(int i=0;i<numberofelements;i++){
++		for(int j=0;j<this->GetElementsWidth();j++){
++			int vid=index[i*this->GetElementsWidth()+j]-1;//Matlab to C indexing
++			error_vertices[vid]+=error_elements[i];
++		}
++	}
++
++	/*Find the max of the estimators (use error_elements)*/
++	maxerror=error_elements[0];
++	for(int i=0;i<numberofelements;i++) maxerror=max(maxerror,error_elements[i]);
++	
++	/*Fill hmaxvertices*/
++	for(int i=0;i<numberofvertices;i++){
++		if(error_vertices[i]>threshold*maxerror){
++			if(xIsNan<IssmDouble>(hmaxvertices[i])) hmaxvertices[i]=resolution;
++			else  hmaxvertices[i]=min(resolution,hmaxvertices[i]);
++		}
++	}
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++	xDelete<int>(index);
++   xDelete<IssmDouble>(error_elements);
++   xDelete<IssmDouble>(error_vertices);
++}
++/*}}}*/
++void FemModel::GetVerticeDistanceToZeroLevelSet(IssmDouble** pverticedistance,int levelset_type){/*{{{*/
++
++	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
++	/*pverticedistance is the minimal vertice distance to the grounding line or ice front*/
++	if(levelset_type!=MaskGroundediceLevelsetEnum && levelset_type!=MaskIceLevelsetEnum){
++		_error_("level set type not implemented yet!");
++	}
++
++	/*Output*/
++	IssmDouble* verticedistance;
++	
++	/*Intermediaries*/
++ 	int elementswidth                   	= this->GetElementsWidth();
++   int numberofvertices                	= this->vertices->NumberOfVertices();
++   int numberofelements                	= this->elements->NumberOfElements();
++	int* elem_vertices         				= xNew<int>(elementswidth);
++   IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
++   IssmDouble* xp									= NULL;
++   IssmDouble* yp									= NULL;
++   IssmDouble* x									= NULL;
++   IssmDouble* y									= NULL;
++   IssmDouble* z									= NULL;
++	Vector<IssmDouble>* vx_zerolevelset		= new Vector<IssmDouble>(numberofelements);
++	Vector<IssmDouble>* vy_zerolevelset		= new Vector<IssmDouble>(numberofelements);
++	IssmDouble* x_zerolevelset					= NULL;
++	IssmDouble* y_zerolevelset					= NULL;
++	int count,sid,npoints;
++	IssmDouble xcenter,ycenter,distance;
++
++	/*Get vertices coordinates*/
++	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
++	
++	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(levelset,levelset_type);
++		element->GetVerticesSidList(elem_vertices);
++		sid 			= element->Sid();
++		xcenter		= NAN;
++		ycenter	 	= NAN;	
++     	Tria* tria 	= xDynamicCast<Tria*>(element);
++		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
++			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
++				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
++				xcenter=(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.;
++				ycenter=(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.;
++			}
++		}
++		vx_zerolevelset->SetValue(sid,xcenter,INS_VAL);
++		vy_zerolevelset->SetValue(sid,ycenter,INS_VAL);
++	}
++   /*Assemble and serialize*/
++   vx_zerolevelset->Assemble();
++   vy_zerolevelset->Assemble();
++   x_zerolevelset=vx_zerolevelset->ToMPISerial();
++   y_zerolevelset=vy_zerolevelset->ToMPISerial();
++
++	/*keep just the element center coordinates with zero level set (compact the structure to save time in the next step)*/
++	count = 0;
++	xp 	= xNewZeroInit<IssmDouble>(numberofelements);
++	yp 	= xNewZeroInit<IssmDouble>(numberofelements);
++	for(int i=0;i<numberofelements;i++){
++		if(!xIsNan<IssmDouble>(x_zerolevelset[i])){
++			xp[count]=x_zerolevelset[i];
++			yp[count]=y_zerolevelset[i];
++			count++;
++		}
++	}
++	npoints=count;
++
++	/*Find the minimal vertice distance to the zero levelset (grounding line or ice front)*/
++	verticedistance=xNew<IssmDouble>(numberofvertices);
++	for(int i=0;i<numberofvertices;i++){
++		verticedistance[i]=INFINITY;
++		for(int j=0;j<npoints;j++){
++			distance=sqrt((x[i]-xp[j])*(x[i]-xp[j])+(y[i]-yp[j])*(y[i]-yp[j]));
++			verticedistance[i]=min(distance,verticedistance[i]);		
++		}
++	}	
++
++	/*Assign the pointer*/
++	(*pverticedistance)=verticedistance;
++
++	/*Cleanup*/
++   xDelete<int>(elem_vertices);
++   xDelete<IssmDouble>(levelset);
++	xDelete<IssmDouble>(x_zerolevelset);
++	xDelete<IssmDouble>(y_zerolevelset);
++   xDelete<IssmDouble>(xp);
++   xDelete<IssmDouble>(yp);
++   xDelete<IssmDouble>(x);
++   xDelete<IssmDouble>(y);
++   xDelete<IssmDouble>(z);
++	delete vx_zerolevelset;
++	delete vy_zerolevelset;
++}
++/*}}}*/
+ #endif
+ 
+ #if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+@@ -4479,7 +4726,6 @@
+ 	xDelete<IssmDouble>(masklevelset);
+ 	xDelete<IssmDouble>(deviatorictensorerror);
+    xDelete<IssmDouble>(thicknesserror);
+-
+ }
+ /*}}}*/
+ void FemModel::InitializeAdaptiveRefinementNeopz(void){/*{{{*/
+@@ -4511,37 +4757,11 @@
+ 
+ 	/*Create initial mesh (coarse mesh) in neopz data structure*/ 
+ 	/*Just CPU #0 should keep AMR object*/
+-   this->SetRefPatterns();
++   /*Initialize refinement pattern*/
++	this->SetRefPatterns();
+ 	if(my_rank==0){ 
+-	   bool ismisomip	= false;
+-		if(ismisomip){//itapopo
+-			TPZFileStream fstr;
+-			std::stringstream ss;
+-			int frictionlaw;
+-			
+-			this->parameters->FindParam(&frictionlaw,FrictionLawEnum);
+-		
+-			ss	<< levelmax;
+-			if(frictionlaw==1){
+-				ss << "_viscous/amr.txt";
+-			}else if(frictionlaw==7){
+-				ss << "_tsai/amr.txt";
+-			}else{
+-				_error_("friction law not supported here.");
+-			}
+-			
+-			std::string AMRfile  = "/home/santos/Misomip2/L" + ss.str();
+-			fstr.OpenRead(AMRfile.c_str());
+-			
+-			TPZSaveable *sv		= TPZSaveable::Restore(fstr,0);
+-			this->amr				= dynamic_cast<AdaptiveMeshRefinement*>(sv);
+-		}
+-		else{
+-			this->amr = new AdaptiveMeshRefinement();
+-			//this->amr->SetLevelMax(levelmax); //Set max level of refinement
+-			//this->amr->SetRegions(regionlevel1,regionlevelmax);
+-			this->amr->CreateInitialMesh(numberofvertices,numberofelements,elementswidth,x,y,elements);
+-		}
++		this->amr = new AdaptiveMeshRefinement();
++		this->amr->CreateInitialMesh(numberofvertices,numberofelements,elementswidth,x,y,elements);
+ 		this->amr->SetLevelMax(levelmax); //Set max level of refinement
+ 		this->amr->SetRegions(regionlevel1,regionlevelmax);
+ 	}
+@@ -4558,15 +4778,17 @@
+    /*Initialize the global variable of refinement patterns*/
+    gRefDBase.InitializeUniformRefPattern(ETriangle);
+ 
+-   /*Insert specifics patterns to ISSM core*/
++	/*Insert specifics patterns to ISSM core*/
+    std::string filepath  = REFPATTERNDIR;
+    std::string filename1 = filepath + "/2D_Triang_Rib_3.rpt";
+    std::string filename2 = filepath + "/2D_Triang_Rib_4.rpt";
+-   std::string filename3 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4.rpt";
+-   std::string filename4 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4_permuted.rpt";
+-   std::string filename5 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5.rpt";
+-   std::string filename6 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5_permuted.rpt";
+-   std::string filename7 = filepath + "/2D_Triang_Rib_5.rpt";
++   std::string filename3 = filepath + "/2D_Triang_Rib_5.rpt";
++   std::string filename4 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4.rpt";
++   std::string filename5 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_4_permuted.rpt";
++   std::string filename6 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5.rpt";
++   std::string filename7 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_3_5_permuted.rpt";
++   std::string filename8 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_4_5.rpt";
++   std::string filename9 = filepath + "/2D_Triang_Rib_OnlyTriang_Side_4_5_permuted.rpt";
+ 
+    TPZAutoPointer<TPZRefPattern> refpat1 = new TPZRefPattern(filename1);
+    TPZAutoPointer<TPZRefPattern> refpat2 = new TPZRefPattern(filename2);
+@@ -4575,6 +4797,8 @@
+    TPZAutoPointer<TPZRefPattern> refpat5 = new TPZRefPattern(filename5);
+    TPZAutoPointer<TPZRefPattern> refpat6 = new TPZRefPattern(filename6);
+    TPZAutoPointer<TPZRefPattern> refpat7 = new TPZRefPattern(filename7);
++   TPZAutoPointer<TPZRefPattern> refpat8 = new TPZRefPattern(filename8);
++   TPZAutoPointer<TPZRefPattern> refpat9 = new TPZRefPattern(filename9);
+ 
+    if(!gRefDBase.FindRefPattern(refpat1)) gRefDBase.InsertRefPattern(refpat1);
+    if(!gRefDBase.FindRefPattern(refpat2)) gRefDBase.InsertRefPattern(refpat2);
+@@ -4583,6 +4807,8 @@
+    if(!gRefDBase.FindRefPattern(refpat5)) gRefDBase.InsertRefPattern(refpat5);
+    if(!gRefDBase.FindRefPattern(refpat6)) gRefDBase.InsertRefPattern(refpat6);
+    if(!gRefDBase.FindRefPattern(refpat7)) gRefDBase.InsertRefPattern(refpat7);
++   if(!gRefDBase.FindRefPattern(refpat8)) gRefDBase.InsertRefPattern(refpat8);
++   if(!gRefDBase.FindRefPattern(refpat9)) gRefDBase.InsertRefPattern(refpat9);
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21919)
+@@ -1710,7 +1710,8 @@
+ 				name==LevelsetfunctionSlopeXEnum ||
+ 				name==LevelsetfunctionSlopeYEnum ||
+ 				name==LevelsetfunctionPicardEnum ||
+-				//name==CalvingCalvingrateEnum ||
++				name==CalvingCalvingrateEnum ||
++				name==CalvingMeltingrateEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum  ||
+ 				name==ConvergedEnum || 
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21919)
+@@ -16,12 +16,25 @@
+ using namespace std;
+ 
+ /*Constructor, copy, clean up and destructor*/
+-AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err){/*{{{*/
++AmrBamg::AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,
++						IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
++						IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
++						IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
++						IssmDouble deviatoricerror_resolution_in,IssmDouble deviatoricerror_threshold_in){/*{{{*/
+ 
+-	this->fieldenum    = fieldenum_in;
+-	this->geometry     = NULL;
+-	this->fathermesh   = NULL;
+-	this->previousmesh = NULL;
++	this->fieldenum    					= fieldenum_in;
++	this->keepmetric   					= keepmetric_in;
++	this->groundingline_resolution	= groundingline_resolution_in;
++	this->groundingline_distance 		= groundingline_distance_in;
++	this->icefront_resolution 			= icefront_resolution_in;
++	this->icefront_distance 			= icefront_distance_in;
++	this->thicknesserror_resolution 	= thicknesserror_resolution_in;
++	this->thicknesserror_threshold 	= thicknesserror_threshold_in;
++	this->deviatoricerror_resolution = deviatoricerror_resolution_in;
++	this->deviatoricerror_threshold  = deviatoricerror_threshold_in;
++	this->geometry     					= NULL;
++	this->fathermesh   					= NULL;
++	this->previousmesh 					= NULL;
+ 
+ 	/*Only initialize options for now (same as bamg.m)*/
+ 	this->options = new BamgOpts();
+@@ -48,7 +61,7 @@
+ 	this->options->err=xNew<IssmDouble>(1);
+ 	this->options->errSize[0]=1;
+ 	this->options->errSize[1]=1;
+-	this->options->err[0] = err;
++	this->options->err[0] = err_in;
+ }
+ /*}}}*/
+ AmrBamg::~AmrBamg(){/*{{{*/
+@@ -82,7 +95,7 @@
+ 	/*Cleanup and return*/
+ 	delete Th;
+ }/*}}}*/
+-void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
++void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	BamgGeom* geomout=new BamgGeom();
+@@ -92,27 +105,42 @@
+ 	_assert_(this->geometry);
+ 	_assert_(this->options);
+ 	_assert_(this->fathermesh);
+-	_assert_(field);
++	_assert_(field || hmaxVertices);//at least one is necessary
+ 
+ 	/*Prepare field for metric*/
+-	this->options->field = field;
++	this->options->field			 = field;
++	this->options->hmaxVertices = hmaxVertices;
+ 
+ 	/*remesh*/
+ 	if(this->previousmesh){
+-		this->options->fieldSize[0] = this->previousmesh->VerticesSize[0];
+-		this->options->fieldSize[1] = 1;
++		this->options->fieldSize[0]			= this->previousmesh->VerticesSize[0];
++		this->options->fieldSize[1]			= 1;
++		this->options->hmaxVerticesSize[0]	= this->previousmesh->VerticesSize[0];
++		this->options->hmaxVerticesSize[1]	= 1;
+ 		Bamgx(meshout,geomout,this->previousmesh,this->geometry,this->options);
+ 	}
+ 	else{
+-		this->options->fieldSize[0] = this->fathermesh->VerticesSize[0];
+-		this->options->fieldSize[1] = 1;
++		this->options->fieldSize[0]			= this->fathermesh->VerticesSize[0];
++		this->options->fieldSize[1]			= 1;
++		this->options->hmaxVerticesSize[0]	= this->fathermesh->VerticesSize[0];
++		this->options->hmaxVerticesSize[1]	= 1;
+ 		Bamgx(meshout,geomout,this->fathermesh,this->geometry,this->options);
+ 	}
+ 
+-	/*remove field for memory management (FemModel is taking care of deleting it)*/
++	/*remove field and hmaxVertices for memory management (FemModel is taking care of deleting it)*/
+ 	this->options->field = NULL;
+ 	this->options->fieldSize[0] = 0;
+ 	this->options->fieldSize[1] = 0;
++	this->options->hmaxVertices = NULL;
++	this->options->hmaxVerticesSize[0] = 0;
++	this->options->hmaxVerticesSize[1] = 0;
++	
++	/*verify if the metric will be reseted or not*/
++	if(!this->keepmetric){
++		if(this->options->metric) xDelete<IssmDouble>(this->options->metric);
++		this->options->metricSize[0] = 0;
++		this->options->metricSize[1] = 0;
++	}
+ 
+ 	/*Change previous mesh*/
+ 	if(this->previousmesh) delete this->previousmesh;
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21918)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21919)
+@@ -848,6 +848,15 @@
+ 	AmrHmaxEnum,
+ 	AmrFieldEnum,
+ 	AmrErrEnum,
++	AmrKeepMetricEnum,
++	AmrGroundingLineResolutionEnum,
++	AmrGroundingLineDistanceEnum,
++	AmrIceFrontResolutionEnum,
++	AmrIceFrontDistanceEnum,
++	AmrThicknessErrorResolutionEnum,
++	AmrThicknessErrorThresholdEnum,
++	AmrDeviatoricErrorResolutionEnum,
++	AmrDeviatoricErrorThresholdEnum,
+ 	DeviatoricStressErrorEstimatorEnum,
+ 	ThicknessErrorEstimatorEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21919)
+@@ -824,6 +824,15 @@
+ 		case AmrHmaxEnum : return "AmrHmax";
+ 		case AmrFieldEnum : return "AmrField";
+ 		case AmrErrEnum : return "AmrErr";
++		case AmrKeepMetricEnum : return "AmrKeepMetric";
++		case AmrGroundingLineResolutionEnum : return "AmrGroundingLineResolution";
++		case AmrGroundingLineDistanceEnum : return "AmrGroundingLineDistance";
++		case AmrIceFrontResolutionEnum : return "AmrIceFrontResolution";
++		case AmrIceFrontDistanceEnum : return "AmrIceFrontDistance";
++		case AmrThicknessErrorResolutionEnum : return "AmrThicknessErrorResolution";
++		case AmrThicknessErrorThresholdEnum : return "AmrThicknessErrorThreshold";
++		case AmrDeviatoricErrorResolutionEnum : return "AmrDeviatoricErrorResolution";
++		case AmrDeviatoricErrorThresholdEnum : return "AmrDeviatoricErrorThreshold";
+ 		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+ 		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+ 		case ParametersENDEnum : return "ParametersEND";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21918)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21919)
+@@ -842,6 +842,15 @@
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+ 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+ 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
++	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
++	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
++	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
++	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
++	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
++	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
++	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+@@ -865,7 +874,10 @@
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+-	      else if (strcmp(name,"Input")==0) return InputEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+@@ -874,10 +886,7 @@
+ 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+ 	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
+ 	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+@@ -988,7 +997,10 @@
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+ 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+@@ -997,10 +1009,7 @@
+ 	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+ 	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+ 	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
++	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
+ 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+ 	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+Index: ../trunk-jpl/src/m/classes/amrbamg.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrbamg.m	(revision 21918)
++++ ../trunk-jpl/src/m/classes/amrbamg.m	(revision 21919)
+@@ -9,6 +9,15 @@
+ 		hmax = 0.;
+ 		fieldname = '';
+ 		err = 0.;
++		keepmetric = 0;
++		groundingline_resolution = 0.;
++		groundingline_distance = 0.;
++		icefront_resolution = 0.;
++		icefront_distance = 0.;
++		thicknesserror_resolution = 0.;
++		thicknesserror_threshold = 0.;
++		deviatoricerror_resolution = 0.;
++		deviatoricerror_threshold = 0.;
+ 	end
+ 	methods
+ 		function self = amrbamg(varargin) % {{{
+@@ -29,6 +38,19 @@
+ 			self.fieldname ='Vel';
+ 			self.err=3.;
+ 
++			%keep metric?
++			self.keepmetric=1;
++
++			%other criterias
++			self.groundingline_resolution=500.;
++			self.groundingline_distance=0.;
++			self.icefront_resolution=500.;
++			self.icefront_distance=0.;
++			self.thicknesserror_resolution=500.;
++			self.thicknesserror_threshold=0.;
++			self.deviatoricerror_resolution=500.;
++			self.deviatoricerror_threshold=0.;
++
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+@@ -35,6 +57,15 @@
+ 			md = checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			%md = checkfield(md,'fieldname','amr.fieldname','string',[1]);
++			md = checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   amrbamg parameters:'));
+@@ -42,6 +73,15 @@
+ 			fielddisplay(self,'hmin',['minimum element length']);
+ 			fielddisplay(self,'hmax',['maximum element length']);
+ 			fielddisplay(self,'fieldname',['name of input that will be used to compute the metric (should be an input of FemModel)']);
++			fielddisplay(self,'keepmetric',['indicates whether the metric should be kept every remeshing time']);
++			fielddisplay(self,'groundingline_resolution',['element length near the grounding line']);
++			fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
++			fielddisplay(self,'icefront_resolution',['element length near the ice front']);
++			fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
++			fielddisplay(self,'thicknesserror_resolution',['element length when thickness error estimator is used']);
++			fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++			fielddisplay(self,'deviatoricerror_resolution',['element length when deviatoric stress error estimator is used']);
++			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -50,7 +90,16 @@
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmin','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmax','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','fieldname','format','String');
+-			WriteData(fid,prefix,'object',self,'class','err','fieldname','err','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','err','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','keepmetric','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
+ 
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21919-21920.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21919-21920.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21919-21920.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21919)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 21920)
+@@ -554,8 +554,8 @@
+ 	int offset;
+ 
+ 	offset=dynamic_cast<TransientInput*>(input)->GetTimeInputOffset(time_yr);
+-	if (fmod(offset,12)!=1){
+-		time_clim=floor(dynamic_cast<TransientInput*>(input)->GetTimeByOffset(offset-fmod(offset,12)+1)/yts)*yts;
++	if (fmod(offset,12.)!=1){
++		time_clim=floor(dynamic_cast<TransientInput*>(input)->GetTimeByOffset(offset-fmod(offset,12.)+1)/yts)*yts;
+ 	}
+ 
+ 	/*loop over vertices: */
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21919)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 21920)
+@@ -263,7 +263,7 @@
+ IssmDouble  TransientInput::GetTimeByOffset(int offset){/*{{{*/
+ 
+ 	if (offset < 0) offset=0;
+-	_assert_(this->timesteps[offset]);
++	_assert_(offset<this->numtimesteps);
+ 
+ 	return this->timesteps[offset];
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-21920-21921.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21920-21921.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21920-21921.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 21920)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 21921)
+@@ -35,7 +35,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+-field_tolerances=[5e-05,1e-08,7e-08,5e-09,1e-08,1e-08,1e-08]
++field_tolerances=[5e-05,1e-08,7e-08,5e-09,5e-08,5e-08,5e-08]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 21920)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 21921)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+-field_tolerances={5e-05,1e-08,7e-08,5e-09,1e-08,1e-08,1e-08};
++field_tolerances={5e-05,1e-08,7e-08,5e-09,5e-08,5e-08,5e-08};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21921-21922.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21921-21922.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21921-21922.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 21921)
++++ ../trunk-jpl/jenkins/windows	(revision 21922)
+@@ -59,5 +59,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243]"
++MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243,430,441,442]"
+ PYTHON_NROPTIONS=""
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21921)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21922)
+@@ -23,10 +23,10 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="emscripten	  install.sh        
+-						gsl			  install-javascript.sh    
++EXTERNALPACKAGES="gsl			  install-javascript.sh    
+ 						triangle      install-javascript.sh        
+-						shell2junit   install.sh"
++						shell2junit   install.sh
++						emscripten	  install.sh"
+ 
+ #-----------------#
+ # 4: test options #
Index: /issm/oecreview/Archive/21724-22754/ISSM-21922-21923.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21922-21923.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21922-21923.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 21922)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 21923)
+@@ -32,5 +32,5 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
+-field_tolerances={1e-8,1e-8,1e-6};
++field_tolerances={1e-8,1e-8,5e-6};
+ field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
+Index: ../trunk-jpl/test/NightlyRun/test3019.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.py	(revision 21922)
++++ ../trunk-jpl/test/NightlyRun/test3019.py	(revision 21923)
+@@ -44,5 +44,5 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Jac Forward','Jac Reverse','Jac Forward - Reverse']
+-field_tolerances=[1e-8,1e-8,1e-6]
++field_tolerances=[1e-8,1e-8,5e-6]
+ field_values=[jac_forward,jac_reverse,jac_forward-jac_reverse]
Index: /issm/oecreview/Archive/21724-22754/ISSM-21923-21924.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21923-21924.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21923-21924.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/Archives/Archive3015.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 21923)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 21924)
+@@ -76,4 +76,4 @@
+ %Fields and tolerances to track changes
+ field_names     ={'dV/dh-dV/dh0'};
+ field_tolerances={1e-13};
+-field_values={dVdh_ad-dVdh_an};
++field_values={dVdh_ad};
Index: /issm/oecreview/Archive/21724-22754/ISSM-21924-21925.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21924-21925.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21924-21925.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 21924)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 21925)
+@@ -74,6 +74,6 @@
+ disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'dV/dh-dV/dh0'};
+-field_tolerances={1e-13};
++field_names     ={'dV/dh'};
++field_tolerances={1e-8};
+ field_values={dVdh_ad};
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 21924)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 21925)
+@@ -90,6 +90,6 @@
+ print "dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dVdh_an,dVdh_ad)
+ 
+ #Fields and tolerances to track changes
+-field_names     =['dV/dh-dV/dh0']
+-field_tolerances=[1e-13]
+-field_values=[dVdh_ad-dVdh_an]
++field_names     =['dV/dh']
++field_tolerances=[1e-8]
++field_values=[dVdh_ad]
Index: /issm/oecreview/Archive/21724-22754/ISSM-21925-21926.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21925-21926.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21925-21926.diff	(revision 22755)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 21925)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 21926)
+@@ -134,9 +134,7 @@
+ 				${ISSM_DIR}/src/m/io/fileptr.js \
+ 				${ISSM_DIR}/src/m/io/savemodel.js \
+ 				${ISSM_DIR}/src/m/io/loadmodel.js \
+-				${ISSM_DIR}/src/m/io/saveAsFile.js \
+ 				${ISSM_DIR}/src/m/io/writetofile.js \
+-				${ISSM_DIR}/src/m/io/download.js \
+ 				${ISSM_DIR}/src/m/io/writetofile.js \
+ 				${ISSM_DIR}/src/m/materials/paterson.js \
+ 				${ISSM_DIR}/src/m/mesh/triangle.js \
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21925)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21926)
+@@ -23,10 +23,12 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="gsl			  install-javascript.sh    
++EXTERNALPACKAGES="autotools     install.sh
++						cmake         install.sh
++						emscripten    install.sh        
++						gsl           install-javascript.sh    
+ 						triangle      install-javascript.sh        
+-						shell2junit   install.sh
+-						emscripten	  install.sh"
++						shell2junit   install.sh"
+ 
+ #-----------------#
+ # 4: test options #
+Index: ../trunk-jpl/externalpackages/emscripten/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21925)
++++ ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21926)
+@@ -19,3 +19,9 @@
+ ./emsdk update
+ ./emsdk install latest
+ ./emsdk activate latest
++
++cd ../
++mv src install
++cd install
++
++source ./emsdk_env.sh
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21925)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21926)
+@@ -29,6 +29,7 @@
+ EXAMPLES_TEST=0
+ MATLAB_TEST=0
+ PYTHON_TEST=0
++JAVASCRIPT_TEST=0
+ 
+ #source configuration script
+ source $1;
+@@ -140,7 +141,7 @@
+ 	cd $ISSM_DIR/externalpackages/$PACKAGENAME
+ 
+ 	#install if requested or if previous install has not been successful
+-	if [ "$ISSM_EXTERNALPACKAGES" == "yes" ] || [ ! -d ./install ] || [ ! "$(ls -A ./install)" ]; then
++	if [ "$ISSM_EXTERNALPACKAGES" == "yes" ] || [ ! -d ./install -a ! -d ./install-javascript ] || ([ -d ./install ] && [ ! "$(ls -A ./install)" ]) || ([ -d ./install-javascript ] && [ ! "$(ls -A ./install-javascript)" ]); then
+ 		echo "======================================================";
+ 		echo "       Installing $PACKAGENAME                        ";
+ 		echo "======================================================";
+@@ -180,10 +181,17 @@
+ 	exit 1;
+ fi
+ 
++#Set CXX/CC flags for JS runs after exnteralpackages to avoid conflicts during their compilation
++CXX_PREVIOUS=$CXX
++CC_PREVIOUS=$CC
++if [ $JAVASCRIPT_TEST -eq 1 ]; then
++	export CXX=em++
++	export CC=emcc
++fi
++
+ source $ISSM_DIR/etc/environment.sh
+ 
+-if [ "$OS" == "win" ]
+-then
++if [ "$OS" == "win" ]; then
+ 	echo " == WINDOWS ENVIRONMENT DETECTED =="
+ 	source $ISSM_DIR/externalpackages/windows/windows_environment.sh
+ fi
+@@ -237,6 +245,10 @@
+ fi
+ #}}}
+ 
++#Restore CXX/CC to their previous values 
++export CXX=$CXX_PREVIOUS
++export CC=$CC_PREVIOUS
++
+ #matlab tests
+ # {{{
+ if [ $MATLAB_TEST -eq 1 ]; then
Index: /issm/oecreview/Archive/21724-22754/ISSM-21926-21927.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21926-21927.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21926-21927.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/test/NightlyRun/test444.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test444.m	(revision 21926)
++++ ../trunk-jpl/test/NightlyRun/test444.m	(revision 21927)
+@@ -19,7 +19,7 @@
+ regionalmask=zeros(md.mesh.numberofvertices,1);
+ in=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1);
+ regionalmask(find(in))=1;
+-md.transient.requested_outputs={'default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
++md.transient.requested_outputs={'default','GroundedArea','FloatingArea','IceVolumeAboveFloatation','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
+ 	'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation'};
+ md.outputdefinition.definitions{1}=regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,...
+ 	'definitionstring','Outputdefinition1');
+@@ -37,6 +37,8 @@
+ 	'definitionstring','Outputdefinition7');
+ md.outputdefinition.definitions{8}=regionaloutput('name','TotalSmb1','outputnamestring','TotalSmb','mask',regionalmask,...
+ 	'definitionstring','Outputdefinition8');
++md.outputdefinition.definitions{9}=regionaloutput('name','TotalSmb2','outputnamestring','TotalSmb','mask',regionalmask,...
++	 'definitionstring','Outputdefinition9');
+ 
+ md=extrude(md,3,1);
+ md=collapse(md);
+@@ -57,6 +59,8 @@
+ md.qmu.responses.TotalFloatingBmb1=response_function('Outputdefinition3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ md.qmu.responses.TotalGroundedBmb1=response_function('Outputdefinition4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ md.qmu.responses.TotalSmb1=response_function('Outputdefinition8',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.TotalSmb2=response_function('Outputdefinition9',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.FloatingArea=response_function('FloatingArea',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ 
+ md.qmu.method     =dakota_method('nond_samp');
+ md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),...
+@@ -93,10 +97,10 @@
+ 
+ %we put all the mean and stdev data in the montecarlo field, which we will use to test for success.
+ md.results.dakota.montecarlo=[];
+-for i=1:8,
++for i=1:11,
+ 	md.results.dakota.montecarlo=[md.results.dakota.montecarlo md.results.dakota.dresp_out(i).mean];
+ end
+-for i=1:8,
++for i=1:11,
+ 	md.results.dakota.montecarlo=[md.results.dakota.montecarlo md.results.dakota.dresp_out(i).stddev];
+ end
+ field_names     ={'montecarlo'};
+Index: ../trunk-jpl/test/Archives/Archive444.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21927-21928.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21927-21928.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21927-21928.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/externalpackages/emscripten/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21927)
++++ ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21928)
+@@ -11,7 +11,7 @@
+ tar -zxvf  emsdk-portable.tar.gz
+ mv emsdk_portable src
+ 
+-cd src
++cd src 
+ 
+ export CXX=g++
+ export CC=gcc
+@@ -20,8 +20,6 @@
+ ./emsdk install latest
+ ./emsdk activate latest
+ 
+-cd ../
+-mv src install
+-cd install
+-
+-source ./emsdk_env.sh
++#Related to moving the install path after installation - However, not safe to install in dir named "install" since a failure would not be noticed by jenkins when triggering
++#Not reliable - when executed in subshell without sourcing the install file, this has no effect. Safer to explicitly source for each dependent externalpackage.
++source emsdk_env.sh
+Index: ../trunk-jpl/externalpackages/triangle/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21927)
++++ ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21928)
+@@ -8,6 +8,9 @@
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/triangle.zip' 'triangle.zip'
+ 
++#Source emscripten to ensure emcc/em++ compiler are in env
++source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
++
+ #Untar 
+ cd install-javascript
+ cp ../triangle.zip ./
+Index: ../trunk-jpl/externalpackages/gsl/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21927)
++++ ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21928)
+@@ -20,6 +20,8 @@
+ 
+ export CC=emcc
+ export CXX=em++
++#Source emscripten to ensure emcc/em++ compiler are in env
++source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
+ 
+ # Issue with variadic function signatures.
+ export CFLAGS=-DSTDC_HEADERS
Index: /issm/oecreview/Archive/21724-22754/ISSM-21928-21929.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21928-21929.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21928-21929.diff	(revision 22755)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21928)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21929)
+@@ -181,6 +181,14 @@
+ 	exit 1;
+ fi
+ 
++
++source $ISSM_DIR/etc/environment.sh
++
++if [ "$OS" == "win" ]; then
++	echo " == WINDOWS ENVIRONMENT DETECTED =="
++	source $ISSM_DIR/externalpackages/windows/windows_environment.sh
++fi
++
+ #Set CXX/CC flags for JS runs after exnteralpackages to avoid conflicts during their compilation
+ CXX_PREVIOUS=$CXX
+ CC_PREVIOUS=$CC
+@@ -187,14 +195,8 @@
+ if [ $JAVASCRIPT_TEST -eq 1 ]; then
+ 	export CXX=em++
+ 	export CC=emcc
++	source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
+ fi
+-
+-source $ISSM_DIR/etc/environment.sh
+-
+-if [ "$OS" == "win" ]; then
+-	echo " == WINDOWS ENVIRONMENT DETECTED =="
+-	source $ISSM_DIR/externalpackages/windows/windows_environment.sh
+-fi
+ #}}}
+ #ISSM compilation yes/no                (ISSM_COMPILATION) {{{
+ if [ "$ISSM_COMPILATION" == "yes" ]
Index: /issm/oecreview/Archive/21724-22754/ISSM-21929-21930.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21929-21930.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21929-21930.diff	(revision 22755)
@@ -0,0 +1,198 @@
+Index: ../trunk-jpl/src/m/classes/amrbamg.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrbamg.m	(revision 21929)
++++ ../trunk-jpl/src/m/classes/amrbamg.m	(revision 21930)
+@@ -10,6 +10,7 @@
+ 		fieldname = '';
+ 		err = 0.;
+ 		keepmetric = 0;
++		gradation = 0.;
+ 		groundingline_resolution = 0.;
+ 		groundingline_distance = 0.;
+ 		icefront_resolution = 0.;
+@@ -41,6 +42,9 @@
+ 			%keep metric?
+ 			self.keepmetric=1;
+ 
++			%control of element lengths
++			self.gradation=1.5;
++
+ 			%other criterias
+ 			self.groundingline_resolution=500.;
+ 			self.groundingline_distance=0.;
+@@ -58,6 +62,7 @@
+ 			md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			%md = checkfield(md,'fieldname','amr.fieldname','string',[1]);
+ 			md = checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+@@ -74,6 +79,7 @@
+ 			fielddisplay(self,'hmax',['maximum element length']);
+ 			fielddisplay(self,'fieldname',['name of input that will be used to compute the metric (should be an input of FemModel)']);
+ 			fielddisplay(self,'keepmetric',['indicates whether the metric should be kept every remeshing time']);
++			fielddisplay(self,'gradation',['maximum ratio between two adjacent edges']);
+ 			fielddisplay(self,'groundingline_resolution',['element length near the grounding line']);
+ 			fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
+ 			fielddisplay(self,'icefront_resolution',['element length near the ice front']);
+@@ -92,6 +98,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','fieldname','format','String');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','err','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','keepmetric','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','gradation','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_resolution','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_resolution','format','Double');
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21929)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21930)
+@@ -849,6 +849,7 @@
+ 	AmrFieldEnum,
+ 	AmrErrEnum,
+ 	AmrKeepMetricEnum,
++	AmrGradationEnum,
+ 	AmrGroundingLineResolutionEnum,
+ 	AmrGroundingLineDistanceEnum,
+ 	AmrIceFrontResolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21929)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21930)
+@@ -825,6 +825,7 @@
+ 		case AmrFieldEnum : return "AmrField";
+ 		case AmrErrEnum : return "AmrErr";
+ 		case AmrKeepMetricEnum : return "AmrKeepMetric";
++		case AmrGradationEnum : return "AmrGradation";
+ 		case AmrGroundingLineResolutionEnum : return "AmrGroundingLineResolution";
+ 		case AmrGroundingLineDistanceEnum : return "AmrGroundingLineDistance";
+ 		case AmrIceFrontResolutionEnum : return "AmrIceFrontResolution";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21929)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21930)
+@@ -843,6 +843,7 @@
+ 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+ 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
+ 	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
++	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+ 	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+-	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Input")==0) return InputEnum;
++	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+-	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
++	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
++	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+ 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21929)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 21930)
+@@ -114,6 +114,7 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.hmax",AmrHmaxEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.err",AmrErrEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.keepmetric",AmrKeepMetricEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.gradation",AmrGradationEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_resolution",AmrGroundingLineResolutionEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_resolution",AmrIceFrontResolutionEnum));
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21929)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21930)
+@@ -2719,9 +2719,8 @@
+ /*}}}*/
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+-	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
++	/*Write the erros estimators*/
+ 	this->WriteErrorEstimatorsInResults();
+-	#endif
+ 
+ 	int step					= -1;
+ 	int numberofelements = -1;
+@@ -4418,7 +4417,7 @@
+ 	IssmDouble* y             = NULL;
+ 	IssmDouble* z             = NULL;
+ 	int* elements             = NULL;
+-	IssmDouble hmin,hmax,err;
++	IssmDouble hmin,hmax,err,gradation;
+ 	IssmDouble groundingline_resolution,groundingline_distance,icefront_resolution,icefront_distance;
+ 	IssmDouble thicknesserror_resolution,thicknesserror_threshold,deviatoricerror_resolution,deviatoricerror_threshold;
+ 	int        fieldenum,keepmetric;
+@@ -4438,6 +4437,7 @@
+ 	this->parameters->FindParam(&fieldenum,AmrFieldEnum);
+ 	this->parameters->FindParam(&err,AmrErrEnum);
+ 	this->parameters->FindParam(&keepmetric,AmrKeepMetricEnum);
++	this->parameters->FindParam(&gradation,AmrGradationEnum);
+ 	this->parameters->FindParam(&groundingline_resolution,AmrGroundingLineResolutionEnum);
+ 	this->parameters->FindParam(&groundingline_distance,AmrGroundingLineDistanceEnum);
+ 	this->parameters->FindParam(&icefront_resolution,AmrIceFrontResolutionEnum);
+@@ -4448,7 +4448,7 @@
+ 	this->parameters->FindParam(&deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
+ 
+ 	/*Create bamg data structures for bamg*/
+-	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err,keepmetric,
++	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err,keepmetric,gradation,
+ 										 groundingline_resolution,groundingline_distance,
+ 										 icefront_resolution,icefront_distance,
+ 										 thicknesserror_resolution,thicknesserror_threshold,
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21929)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 21930)
+@@ -24,7 +24,7 @@
+ 		IssmDouble deviatoricerror_threshold;
+ 
+ 		/* Constructor, destructor etc*/
+-		AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,
++		AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,IssmDouble gradation_in,
+             		IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
+                   IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
+                   IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21929)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21930)
+@@ -16,7 +16,7 @@
+ using namespace std;
+ 
+ /*Constructor, copy, clean up and destructor*/
+-AmrBamg::AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,
++AmrBamg::AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,IssmDouble gradation_in,
+ 						IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
+ 						IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
+ 						IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
+@@ -42,7 +42,7 @@
+ 	this->options->cutoff            = 10.e-5;
+ 	this->options->coeff             = 1;
+ 	this->options->errg              = 0.1;
+-	this->options->gradation         = 1.5;
++	this->options->gradation         = gradation_in;
+ 	this->options->Hessiantype       = 0;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21930-21931.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21930-21931.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21930-21931.diff	(revision 22755)
@@ -0,0 +1,804 @@
+Index: ../trunk-jpl/src/c/bamg/GeomEdge.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/GeomEdge.h	(revision 21930)
++++ ../trunk-jpl/src/c/bamg/GeomEdge.h	(revision 21931)
+@@ -26,7 +26,6 @@
+ 
+ 			//Methods
+ 			R2     F(double theta) const ; // parametrization of the curve edge
+-			double R1tg(double theta,R2 &t) const ; // 1/radius of curvature + tangente
+ 			int    Cracked() const;
+ 			int    TgA()     const;
+ 			int    TgB()     const;
+Index: ../trunk-jpl/src/c/bamg/GeomEdge.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 21931)
+@@ -62,77 +62,6 @@
+ 	int    GeomEdge::Mark()    const  {/*{{{*/
+ 		return type &16; 
+ 	}/*}}}*/
+-	double GeomEdge::R1tg(double theta,R2 & t) const{/*{{{*/
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/R1tg)*/
+-		// 1/R of radius of cuvature
+-
+-		R2 A=v[0]->r,B=v[1]->r;
+-		double dca,dcb,dcta,dctb;
+-		double ddca,ddcb,ddcta,ddctb;
+-		double tt = theta*theta;
+-
+-		//check theta
+-		_assert_(theta>=0 && theta<=1);
+-
+-		if (TgA()){ 
+-			if (TgB()){
+-				// Tangent A and B provided:
+-				// interpolation d'hermite
+-				dcb = 6*theta*(1-theta);
+-				ddcb = 6*(1-2*theta);
+-				dca = -dcb;
+-				ddca = -ddcb;
+-				dcta =  (3*theta - 4)*theta + 1;
+-				ddcta=6*theta-4;
+-				dctb = 3*tt - 2*theta;
+-				ddctb = 6*theta-2;
+-			}
+-			else {
+-				//Tangent A provided but tangent B not provided
+-				// 1-t*t, t-t*t, t*t
+-				double t = theta;
+-				dcb = 2*t;
+-				ddcb = 2;
+-				dca = -dcb;
+-				ddca = -2;
+-				dcta = 1-dcb;
+-				ddcta = -ddcb;
+-				dctb=0;    
+-				ddctb=0;    
+-			}
+-		}
+-		else{
+-			if (TgB()){
+-				//Tangent B provided but tangent A not provided
+-				double t = 1-theta;
+-				dca = -2*t;
+-				ddca = 2;
+-				dcb = -dca;
+-				ddcb = -2;
+-				dctb = 1+dca;
+-				ddctb= ddca;
+-				dcta =0;
+-				ddcta =0;
+-			}
+-			else {
+-				//Neither thangent A nor tangent B provided
+-				// lagrange P1
+-				t=B-A;
+-				return 0;
+-			} 
+-		}
+-		R2 d  =  A*dca  + B*dcb  + tg[0]* dcta  + tg[1] * dctb;
+-		R2 dd =  A*ddca + B*ddcb + tg[0]* ddcta + tg[1] * ddctb;
+-		double d2=(d,d);
+-		double sd2 = sqrt(d2);
+-		t=d;
+-		if(d2>1.0e-20){
+-			t/=sd2;
+-			return Abs(Det(d,dd))/(d2*sd2);
+-		}
+-		else return 0;
+-	}
+-	/*}}}*/
+ 	int    GeomEdge::Required()       {/*{{{*/
+ 		return type &64; 
+ 	}/*}}}*/
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 21931)
+@@ -1593,7 +1593,10 @@
+ 			long i0 = GetId(triangles[it][VerticesOfTriangularEdge[j][0]]);
+ 			long i1 = GetId(triangles[it][VerticesOfTriangularEdge[j][1]]);
+ 			k = edge4->SortAndFind(i0,i1);
+-			_assert_(k>=0);
++			if(k<0){
++				delete [] colorV;
++				_error_("This should not happen");
++			}
+ 			subdomains[i].direction = (vertices + i0 == edges[k].v[0]) ? 1 : -1;
+ 			subdomains[i].edge = edges+k;
+ 			Gh.subdomains[i].edge = Gh.edges + k;
+@@ -2053,7 +2056,15 @@
+ 					if      (xy==0) dd=dxdx;
+ 					else if (xy==1) dd=dxdy;
+ 					else if (xy==2) dd=dydy;
+-					else    _error_("not supported yet");
++					else{
++						delete [] detT;
++						delete [] Mmass;
++						delete [] workT;
++						delete [] workV;
++						delete [] Mmassxx;
++						delete [] OnBoundary;
++						_error_("not supported yet");
++					}
+ 					// do leat 2 iteration for boundary problem
+ 					for (int ijacobi=0;ijacobi<Max(NbJacobi,2);ijacobi++){
+ 						for (i=0;i<nbt;i++) 
+@@ -2102,10 +2113,10 @@
+ 		delete [] dxdx;
+ 		delete [] dxdy;
+ 		delete [] dydy;
+-		delete []  workT;
++		delete [] workT;
+ 		delete [] workV;
+ 		delete [] Mmassxx;
+-		delete []  OnBoundary;
++		delete [] OnBoundary;
+ 
+ 	}
+ 	/*}}}*/
+@@ -2393,6 +2404,7 @@
+ 			it++;} // end while (it<nbt)
+ 			if (nbt == nbtout ||  !NbSubDomTot) {
+ 				delete [] HeapArete;
++				delete [] HeapTriangle;
+ 				_error_("The boundary is not close: all triangles are outside");
+ 			}
+ 
+@@ -2882,7 +2894,10 @@
+ 				if(kk<10) _printf_("BUG: the geometrical edge " << i << " is on no edge curve\n");
+ 			}
+ 		}
+-		if(kk) _error_("See above");
++		if(kk){
++			delete [] e;
++			_error_("See above");
++		}
+ 
+ 		return e;
+ 	}
+@@ -4397,6 +4412,7 @@
+ 		for (i=0;i<Gh.nbv;i++) if (Gh[i].Required()) NbVerticesOnGeomVertex++;
+ 		printf("\n");
+ 		if(NbVerticesOnGeomVertex >= maxnbv){
++			delete [] bcurve;
+ 			_error_("too many vertices on geometry: " << NbVerticesOnGeomVertex << " >= " << maxnbv);
+ 		}
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21930)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21931)
+@@ -984,7 +984,6 @@
+ 	GiaIvinsAnalysisEnum,
+ 	EsaSolutionEnum,
+ 	EsaAnalysisEnum,
+-	MeshdeformationAnalysisEnum,
+ 	LevelsetAnalysisEnum,
+ 	ExtrapolationAnalysisEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21931)
+@@ -952,7 +952,6 @@
+ 		case GiaIvinsAnalysisEnum : return "GiaIvinsAnalysis";
+ 		case EsaSolutionEnum : return "EsaSolution";
+ 		case EsaAnalysisEnum : return "EsaAnalysis";
+-		case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
+ 		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
+ 		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+ 		case ApproximationEnum : return "Approximation";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21931)
+@@ -973,7 +973,6 @@
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+ 	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+-	      else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+@@ -997,11 +996,11 @@
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
++	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
++	      if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+ 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+Index: ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 21931)
+@@ -1690,20 +1690,3 @@
+ 	xDelete<IssmPDouble>(work);
+ 
+ }/*}}}*/
+-
+-/*Element Gauss points TO BE REMOVED*/
+-void gaussQuad( IssmPDouble** pxgaus, IssmPDouble** pxwgt, IssmPDouble** pegaus, IssmPDouble** pewgt, int nigaus, int njgaus ) {/*{{{*/
+-	/*Gauss quadrature points for the quadrilaterial.*/
+-
+-	/*get the gauss points using the product of two line rules  */
+-	GaussLegendreLinear(pxgaus, pxwgt, nigaus);
+-	GaussLegendreLinear(pegaus, pewgt, njgaus);
+-}/*}}}*/
+-void gaussHexa( IssmPDouble** pxgaus, IssmPDouble** pxwgt, IssmPDouble** pegaus, IssmPDouble** pewgt, IssmPDouble** pzgaus, IssmPDouble ** pzwgt, int nigaus, int njgaus, int nkgaus ) {/*{{{*/
+-	/*Gauss quadrature points for the hexahedron.*/
+-
+-	/*  get the gauss points using the product of three line rules  */
+-	GaussLegendreLinear(pxgaus, pxwgt, nigaus);
+-	GaussLegendreLinear(pegaus, pewgt, njgaus);
+-	GaussLegendreLinear(pzgaus, pzwgt, nkgaus);
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Numerics/GaussPoints.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/GaussPoints.h	(revision 21930)
++++ ../trunk-jpl/src/c/shared/Numerics/GaussPoints.h	(revision 21931)
+@@ -17,7 +17,4 @@
+ #define MAX_GAUS_ITER   30
+ void GaussRecur(IssmPDouble* zero, IssmPDouble* weight, int n, IssmPDouble* alpha, IssmPDouble* beta);
+ 
+-void gaussQuad(IssmPDouble** pxgaus, IssmPDouble** pxwgt, IssmPDouble** pegaus, IssmPDouble** pewgt, int nigaus, int njgaus);
+-void gaussHexa(IssmPDouble** pxgaus, IssmPDouble** pxwgt, IssmPDouble** pegaus, IssmPDouble** pewgt, IssmPDouble** pzgaus, IssmPDouble ** pzwgt, int nigaus, int njgaus, int nkgaus);
+-
+ #endif
+Index: ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 21931)
+@@ -67,18 +67,8 @@
+ 	}
+ 
+ }
+-double ddistance(double x1,double y1,double x2,double y2){
+-	return sqrt(pow(x2-x1,2)+pow(y2-y1,2));
+-}
+-double ddot(double x1, double y1, double x2, double y2){
+-	return x1*x2+y1*y2;
+-}
+-
+-bool isPointLeftOfRay(double x, double y, double raySx, double raySy, double rayEx, double rayEy) {
+-	  return (y-raySy)*(rayEx-raySx)
+-		    >      (x-raySx)*(rayEy-raySy); 
+-}
+-
++double ddistance(double x1,double y1,double x2,double y2){ return sqrt(pow(x2-x1,2)+pow(y2-y1,2)); }
++double ddot(double x1, double y1, double x2, double y2){ return x1*x2+y1*y2; }
+ double minimum_distance(double x1, double y1, double x2, double y2, double x0, double y0){
+ 	
+ 	// Return minimum distance between line segment [(x1,y1) (x2,y2)] and point (x0,y0) (v=(x1,y1), w=(x2,y2) and p=(x0,y0)
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 21930)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 21931)
+@@ -293,7 +293,6 @@
+ 					./cores/dummy_core.cpp\
+ 					./cores/surfaceslope_core.cpp\
+ 					./cores/bedslope_core.cpp\
+-					./cores/meshdeformation_core.cpp\
+ 					./cores/damage_core.cpp\
+ 					./cores/levelsetfunctionslope_core.cpp\
+ 					./cores/movingfront_core.cpp\
+@@ -447,9 +446,6 @@
+ if SMOOTH
+ issm_sources += ./analyses/SmoothAnalysis.cpp
+ endif
+-if MESHDEFORMATION
+-issm_sources += ./analyses/MeshdeformationAnalysis.cpp
+-endif
+ if LEVELSET
+ issm_sources += ./analyses/LevelsetAnalysis.cpp
+ issm_sources += ./modules/Calvingx/Calvingx.cpp
+Index: ../trunk-jpl/src/c/cores/meshdeformation_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/meshdeformation_core.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/cores/meshdeformation_core.cpp	(nonexistent)
+@@ -1,30 +0,0 @@
+-/*!\file: meshdeformation_core.cpp
+- * \brief: core of the slope solution 
+- */ 
+-
+-#include "./cores.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-
+-void meshdeformation_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-
+-	/*Recover some parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	if(VerboseSolution()) _printf0_("computing mesh deformation (elasticity)...\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(MeshdeformationAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("saving results:\n");
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21931)
+@@ -1221,49 +1221,6 @@
+ 	return base*(surface - bed + min( rho_water/rho_ice * bathymetry, 0.) );
+ }
+ /*}}}*/
+-void       Penta::InputControlUpdate(IssmDouble scalar,bool save_parameter){/*{{{*/
+-
+-	/*Intermediary*/
+-	int    num_controls;
+-	int*   control_type=NULL;
+-	Input* input=NULL;
+-
+-	/*retrieve some parameters: */
+-	this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+-
+-	for(int i=0;i<num_controls;i++){
+-
+-		if(control_type[i]==MaterialsRheologyBbarEnum){
+-			if (!IsOnBase()) goto cleanup_and_return;
+-			input=(Input*)this->inputs->GetInput(MaterialsRheologyBEnum); _assert_(input);
+-		}
+-		else if(control_type[i]==DamageDbarEnum){
+-			if (!IsOnBase()) goto cleanup_and_return;
+-			input=(Input*)this->inputs->GetInput(DamageDEnum); _assert_(input);
+-		}
+-		else{
+-			input=(Input*)this->inputs->GetInput(control_type[i]); _assert_(input);
+-		}
+-		if(input->ObjectEnum()!=ControlInputEnum) _error_("input " << EnumToStringx(control_type[i]) << " is not a ControlInput");
+-
+-		((ControlInput*)input)->UpdateValue(scalar);
+-		((ControlInput*)input)->Constrain();
+-		if (save_parameter) ((ControlInput*)input)->SaveValue();
+-
+-		if(control_type[i]==MaterialsRheologyBbarEnum){
+-			this->InputExtrude(MaterialsRheologyBEnum,-1);
+-		}
+-		else if(control_type[i]==DamageDbarEnum){
+-			this->InputExtrude(DamageDEnum,-1);
+-		}
+-	}
+-
+-	/*Clean up and return*/
+-cleanup_and_return:
+-	xDelete<int>(control_type);
+-}
+-/*}}}*/
+ void       Penta::InputDepthAverageAtBase(int original_enum,int average_enum){/*{{{*/
+ 
+ 	IssmDouble  Jdet,value;
+@@ -1367,18 +1324,6 @@
+ 	}
+ }
+ /*}}}*/
+-void       Penta::InputScale(int enum_type,IssmDouble scale_factor){/*{{{*/
+-
+-	Input* input=NULL;
+-
+-	/*Make a copy of the original input: */
+-	input=(Input*)this->inputs->GetInput(enum_type);
+-	if(!input)_error_("could not find old input with enum: " << EnumToStringx(enum_type));
+-
+-	/*Scale: */
+-	input->Scale(scale_factor);
+-}
+-/*}}}*/
+ void       Penta::InputUpdateFromIoModel(int index,IoModel* iomodel){ /*{{{*/
+ 
+ 	/*Intermediaries*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21931)
+@@ -90,10 +90,8 @@
+ 		IssmDouble     GroundedArea(void);
+ 		IssmDouble     IceVolume(void);
+ 		IssmDouble     IceVolumeAboveFloatation(void);
+-		void           InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		void           InputDepthAverageAtBase(int enum_type,int average_enum_type);
+ 		void	         InputExtrude(int enum_type,int start);
+-		void           InputScale(int enum_type,IssmDouble scale_factor);
+ 		void           InputUpdateFromIoModel(int index, IoModel* iomodel);
+ 		void           InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
+ 		void           InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21931)
+@@ -78,10 +78,8 @@
+ 		IssmDouble  GroundedArea(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolume(void){_error_("not implemented yet");};
+ 		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
+-		void        InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
+ 		void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
+-		void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void        InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
+ 		void        InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum){_error_("not implemented yet");};
+ 		void        InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21931)
+@@ -92,10 +92,8 @@
+ 		bool        IsOnBase();
+ 		bool        IsOnSurface();
+ 		bool        IsZeroLevelset(int levelset_enum){_error_("not implemented");};
+-		void        InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
+ 		void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
+-		void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void        InputUpdateFromIoModel(int index, IoModel* iomodel);
+ 		void        InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum);
+ 		void        InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 21931)
+@@ -221,10 +221,8 @@
+ 		virtual IssmDouble GroundedArea(void)=0;
+ 		virtual IssmDouble IceVolume(void)=0;
+ 		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
+-		virtual void       InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
+ 		virtual void       InputDepthAverageAtBase(int enum_type,int average_enum_type)=0;
+ 		virtual void       InputExtrude(int input_enum,int start)=0;
+-		virtual void       InputScale(int enum_type,IssmDouble scale_factor)=0;
+ 		virtual void       InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0;
+ 		virtual void       InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0;
+ 		virtual bool       IsFaceOnBoundary(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21931)
+@@ -1366,7 +1366,7 @@
+ 	/*Computeportion of the element that has a positive levelset*/ 
+ 
+ 	bool               negative=true;
+-	int                point;
++	int                point=0;
+ 	const IssmPDouble  epsilon= 1.e-15;
+ 	IssmDouble         f1,f2;
+ 
+@@ -1404,6 +1404,9 @@
+ 			f1=gl[1]/(gl[1]-gl[2]);
+ 			f2=gl[1]/(gl[1]-gl[0]);
+ 		}
++		else{
++			_error_("This case should NOT be happening");
++		}
+ 	}
+ 	*point1=point;
+ 	*fraction1=f1;
+@@ -1660,33 +1663,6 @@
+ 	return base*(surface-bed+min(rho_water/rho_ice*bathymetry,0.));
+ }
+ /*}}}*/
+-void       Tria::InputControlUpdate(IssmDouble scalar,bool save_parameter){/*{{{*/
+-
+-	/*Intermediary*/
+-	int    num_controls;
+-	int*   control_type=NULL;
+-	Input* input=NULL;
+-
+-	/*retrieve some parameters: */
+-	this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+-
+-	for(int i=0;i<num_controls;i++){
+-		input=(Input*)this->inputs->GetInput(control_type[i]);   _assert_(input);
+-		if (input->ObjectEnum()!=ControlInputEnum){
+-			_error_("input " << EnumToStringx(control_type[i]) << " is not a ControlInput");
+-		}
+-
+-		((ControlInput*)input)->UpdateValue(scalar);
+-		((ControlInput*)input)->Constrain();
+-		if (save_parameter) ((ControlInput*)input)->SaveValue();
+-
+-	}
+-
+-	/*Clean up and return*/
+-	xDelete<int>(control_type);
+-}
+-/*}}}*/
+ void       Tria::InputDepthAverageAtBase(int enum_type,int average_enum_type){/*{{{*/
+ 
+ 	/*New input*/
+@@ -1705,18 +1681,6 @@
+ 	this->inputs->AddInput((Input*)newinput);
+ }
+ /*}}}*/
+-void       Tria::InputScale(int enum_type,IssmDouble scale_factor){/*{{{*/
+-
+-	Input* input=NULL;
+-
+-	/*Make a copy of the original input: */
+-	input=(Input*)this->inputs->GetInput(enum_type);
+-	if(!input)_error_("could not find old input with enum: " << EnumToStringx(enum_type));
+-
+-	/*Scale: */
+-	input->Scale(scale_factor);
+-}
+-/*}}}*/
+ void       Tria::InputUpdateFromIoModel(int index, IoModel* iomodel){ //i is the element index/*{{{*/
+ 
+ 	/*Intermediaries*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21931)
+@@ -90,10 +90,8 @@
+ 		bool        HasEdgeOnSurface();
+ 		IssmDouble  IceVolume(void);
+ 		IssmDouble  IceVolumeAboveFloatation(void);
+-		void        InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type);
+ 		void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
+-		void        InputScale(int enum_type,IssmDouble scale_factor);
+ 		bool	   	IsFaceOnBoundary(void);
+ 		bool	   	IsIcefront(void);
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21931)
+@@ -80,7 +80,6 @@
+ 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
+ 		void SaveValue(void);
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+-		void ScaleGradient(IssmDouble scale);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void SetGradient(Input* gradient_in);
+ 		void SetInput(Input* in_input);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21931)
+@@ -76,7 +76,6 @@
+ 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
+ 		void SaveValue(void){_error_("not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+-		void ScaleGradient(IssmDouble scale){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void SetGradient(Input* gradient_in){_error_("not implemented yet");};
+ 		void UpdateValue(IssmDouble scalar){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21931)
+@@ -235,10 +235,6 @@
+ 	if(savedvalues) delete this->savedvalues;
+ 	this->savedvalues=xDynamicCast<Input*>(this->values->copy());
+ }/*}}}*/
+-void ControlInput::ScaleGradient(IssmDouble scaling_factor){/*{{{*/
+-	if(!gradient) _error_("Gradient of ControlInput " << EnumToStringx(enum_type) << " not found");
+-	gradient->Scale(scaling_factor);
+-}/*}}}*/
+ void ControlInput::SetGradient(Input* gradient_in){/*{{{*/
+ 
+ 	/*Get enum for current gradient*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(nonexistent)
+@@ -1,56 +0,0 @@
+-#include "./MeshdeformationAnalysis.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-
+-/*Model processing*/
+-void MeshdeformationAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-void MeshdeformationAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-void MeshdeformationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-int  MeshdeformationAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
+-	_error_("not implemented");
+-}/*}}}*/
+-void MeshdeformationAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-void MeshdeformationAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-
+-/*Finite Element Analysis*/
+-void           MeshdeformationAnalysis::Core(FemModel* femmodel){/*{{{*/
+-	_error_("not implemented");
+-}/*}}}*/
+-ElementVector* MeshdeformationAnalysis::CreateDVector(Element* element){/*{{{*/
+-	/*Default, return NULL*/
+-	return NULL;
+-}/*}}}*/
+-ElementMatrix* MeshdeformationAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
+-_error_("Not implemented");
+-}/*}}}*/
+-ElementMatrix* MeshdeformationAnalysis::CreateKMatrix(Element* element){/*{{{*/
+-	_error_("not implemented yet");
+-}/*}}}*/
+-ElementVector* MeshdeformationAnalysis::CreatePVector(Element* element){/*{{{*/
+-_error_("not implemented yet");
+-}/*}}}*/
+-void           MeshdeformationAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+-	   _error_("not implemented yet");
+-}/*}}}*/
+-void           MeshdeformationAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
+-	_error_("Not implemented yet");
+-}/*}}}*/
+-void           MeshdeformationAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+-	_error_("not implemented yet");
+-}/*}}}*/
+-void           MeshdeformationAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+-	/*Default, do nothing*/
+-	return;
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(nonexistent)
+@@ -1,33 +0,0 @@
+-/*! \file MeshdeformationAnalysis.h 
+- *  \brief: header file for generic external result object
+- */
+-
+-#ifndef _MeshdeformationAnalysis_
+-#define _MeshdeformationAnalysis_
+-
+-/*Headers*/
+-#include "./Analysis.h"
+-
+-class MeshdeformationAnalysis: public Analysis{
+-
+-	public:
+-		/*Model processing*/
+-		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
+-		void CreateLoads(Loads* loads, IoModel* iomodel);
+-		void CreateNodes(Nodes* nodes,IoModel* iomodel);
+-		int  DofsPerNode(int** doflist,int domaintype,int approximation);
+-		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+-
+-		/*Finite element Analysis*/
+-		void           Core(FemModel* femmodel);
+-		ElementVector* CreateDVector(Element* element);
+-		ElementMatrix* CreateJacobianMatrix(Element* element);
+-		ElementMatrix* CreateKMatrix(Element* element);
+-		ElementVector* CreatePVector(Element* element);
+-		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+-		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
+-		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+-		void           UpdateConstraints(FemModel* femmodel);
+-};
+-#endif
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 21931)
+@@ -551,62 +551,6 @@
+ 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
+ 	}
+ }/*}}}*/
+-void           LevelsetAnalysis::SetDistanceOnIntersectedElements(FemModel* femmodel){/*{{{*/
+-
+-	/* Intermediaries */
+-	int i,k;
+-	IssmDouble dmaxp=0.,dmaxm=0,val=0.;
+-
+-	/*Initialize vector with number of vertices*/
+-	int numvertices=femmodel->vertices->NumberOfVertices();
+-	Element* element;
+-
+-	Vector<IssmDouble>* vec_dist_zerolevelset = NULL;
+-	GetVectorFromInputsx(&vec_dist_zerolevelset, femmodel, MaskIceLevelsetEnum, VertexPIdEnum);
+-	
+-	/* set NaN on elements intersected by zero levelset */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		if(element->IsZeroLevelset(MaskIceLevelsetEnum))
+-			for(k=0;k<element->GetNumberOfVertices();k++)
+-				vec_dist_zerolevelset->SetValue(element->vertices[k]->Sid(),NAN,INS_VAL); 
+-	}
+-
+-	/* set distance on elements intersected by zero levelset */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		if(element->IsZeroLevelset(MaskIceLevelsetEnum)){
+-			SetDistanceToZeroLevelsetElement(vec_dist_zerolevelset, element);
+-
+-			/* Get maximum distance to interface along vertices */
+-			for(k=0;k<element->GetNumberOfVertices();k++){
+-					vec_dist_zerolevelset->GetValue(&val,element->vertices[k]->Sid()); 
+-					if((val>0.) && (val>dmaxp))
+-						 dmaxp=val;
+-					else if((val<0.) && (val<dmaxm))
+-						 dmaxm=val;
+-			}
+-		}
+-	}
+-
+-	/* set all none intersected vertices to max/min distance */
+-	for(i=0;i<numvertices;i++){
+-		vec_dist_zerolevelset->GetValue(&val,i);
+-		if(val==1.) //FIXME: improve check
+-			vec_dist_zerolevelset->SetValue(i,3.*dmaxp,INS_VAL);
+-		else if(val==-1.)
+-			vec_dist_zerolevelset->SetValue(i,3.*dmaxm,INS_VAL);
+-	}
+-
+-	/*Assemble vector and serialize */
+-	vec_dist_zerolevelset->Assemble();
+-	IssmDouble* dist_zerolevelset=vec_dist_zerolevelset->ToMPISerial();
+-	InputUpdateFromVectorx(femmodel,dist_zerolevelset,MaskIceLevelsetEnum,VertexSIdEnum);
+-
+-	/*Clean up and return*/
+-	delete vec_dist_zerolevelset;
+-	delete dist_zerolevelset;
+-}/*}}}*/
+ void           LevelsetAnalysis::SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element){/*{{{*/
+ 
+ 	if(!element->IsZeroLevelset(MaskIceLevelsetEnum))
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 21931)
+@@ -33,7 +33,6 @@
+ #include "./SmbAnalysis.h"
+ #include "./SealevelriseAnalysis.h"
+ #include "./MeltingAnalysis.h"
+-#include "./MeshdeformationAnalysis.h"
+ #include "./SmoothAnalysis.h"
+ #include "./StressbalanceAnalysis.h"
+ #include "./StressbalanceSIAAnalysis.h"
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 21931)
+@@ -31,7 +31,6 @@
+ 		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+ 		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
+ 		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+-		void           SetDistanceOnIntersectedElements(FemModel* femmodel);
+ 		void           SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element);
+ 		void           UpdateConstraints(FemModel* femmodel);
+ };
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 21930)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 21931)
+@@ -109,9 +109,6 @@
+ 		#ifdef _HAVE_ESA_
+ 		case EsaAnalysisEnum : return new EsaAnalysis();
+ 		#endif
+-		#ifdef _HAVE_MESHDEFORMATION_
+-		case MeshdeformationAnalysisEnum : return new MeshdeformationAnalysis();
+-		#endif
+ 		#ifdef _HAVE_LEVELSET_
+ 		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
+ 		#endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-21931-21932.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21931-21932.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21931-21932.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 21931)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 21932)
+@@ -24,8 +24,8 @@
+ 	int *elements         = NULL;
+ 	int  elements_width;
+ 
+-	int numberofelements2d;
+-	int numberofvertices2d;
++	int numberofelements2d=0;
++	int numberofvertices2d=0;
+ 	int* elements2d=NULL;
+ 
+ 	int numberoflayers;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21932-21933.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21932-21933.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21932-21933.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/plot/plot_scatter.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 21932)
++++ ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 21933)
+@@ -7,6 +7,7 @@
+ %   Available options:
+ %      'caxis'      : default is full range
+ %      'MarkerSize' : default is 3
++%      'subset'     : only plot the indices provided
+ %      'Line'       : use line instead of circles
+ %      'Cutoff'     : cut the line if the distance between 2 points is
+ %                     greater than Cutoff (default is 1000)
+@@ -22,6 +23,13 @@
+ 	error('x, y and data should have the same size');
+ end
+ 
++if exist(options,'subset'),
++	pos=getfieldvalue(options,'subset');
++	x=x(pos);
++	y=y(pos);
++	level=level(pos);
++end
++
+ %Some processing
+ Min=min(level);
+ Max=max(level);
+@@ -58,6 +66,7 @@
+ 	levels=round_ice(linspace(ylim(1),ylim(2),numcolors+1),2);
+ else
+ 	palette=getcolormap(options);
++	colormap(palette);
+ 	numcolors=size(palette,1);
+ 	levels=round_ice(linspace(Min,Max,numcolors+1),2);
+ end
+@@ -75,7 +84,8 @@
+ if ~exist(options,'line'),
+ 	for i=1:numcolors
+ 		pos=find(colorind==i);
+-		hprime=plot3(x(pos),y(pos),ones(size(x(pos))),...
++	%	hprime=plot3(x(pos),y(pos),ones(size(x(pos))),...
++		hprime=plot(x(pos),y(pos),...
+ 			'o','MarkerSize',getfieldvalue(options,'MarkerSize',3),'MarkerEdgeColor',palette(i,:),...
+ 			'MarkerFaceColor',palette(i,:));
+ 		hp=[hp;hprime];
Index: /issm/oecreview/Archive/21724-22754/ISSM-21933-21934.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21933-21934.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21933-21934.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 21933)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 21934)
+@@ -111,11 +111,11 @@
+ 					fprintf(fid,'LD_PRELOAD=%s \\\n',cluster.valgrindlib);
+ 					if ismac, 
+ 						if IssmConfig('_HAVE_MPI_'),
+-							fprintf(fid,'mpiexec -np %i %s --leak-check=full --error-limit=no --dsymutil=yes --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+-							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,solution,[cluster.executionpath '/' dirname], modelname,modelname,modelname);
++							fprintf(fid,'mpiexec -np %i %s --leak-check=full --error-limit=no --dsymutil=yes --suppressions=%s %s/%s %s %s %s 2> %s.errlog >%s.outlog ',...
++							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname], modelname,modelname,modelname);
+ 						else
+-							fprintf(fid,'%s --leak-check=full --dsymutil=yes --error-limit=no --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+-							cluster.valgrind,cluster.valgrindsup,cluster.codepath,solution,[cluster.executionpath '/' dirname], modelname,modelname,modelname);
++							fprintf(fid,'%s --leak-check=full --dsymutil=yes --error-limit=no --suppressions=%s %s/%s %s %s %s 2> %s.errlog >%s.outlog ',...
++							cluster.valgrind,cluster.valgrindsup,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname], modelname,modelname,modelname);
+ 						end
+ 					else
+ 						if IssmConfig('_HAVE_MPI_'),
+@@ -143,9 +143,9 @@
+ 				end
+ 
+ 				if cluster.np>1,
+-					fprintf(fid,'"C:\\Program Files\\MPICH2\\bin\\mpiexec.exe" -n %i "%s/issm.exe" %s ./ %s ',cluster.np,cluster.codepath,solution,modelname);
++					fprintf(fid,'"C:\\Program Files\\MPICH2\\bin\\mpiexec.exe" -n %i "%s/%s" %s ./ %s ',cluster.np,cluster.codepath,executable,solution,modelname);
+ 				else
+-					fprintf(fid,'"%s/issm.exe" %s ./ %s ',cluster.codepath,solution,modelname);
++					fprintf(fid,'"%s/%s" %s ./ %s ',cluster.codepath,executable,solution,modelname);
+ 				end
+ 				fclose(fid);
+ 			end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21934-21935.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21934-21935.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21934-21935.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/friction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.m	(revision 21934)
++++ ../trunk-jpl/src/m/classes/friction.m	(revision 21935)
+@@ -30,6 +30,8 @@
+ 			switch nargin
+ 				case 0
+ 					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(friction(),varargin{1});
+ 				otherwise
+ 					error('constructor not supported');
+ 			end
+Index: ../trunk-jpl/src/m/classes/timestepping.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.m	(revision 21934)
++++ ../trunk-jpl/src/m/classes/timestepping.m	(revision 21935)
+@@ -15,6 +15,8 @@
+ 			switch nargin
+ 				case 0
+ 					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(timestepping(),varargin{1});
+ 				otherwise
+ 					error('constructor not supported');
+ 			end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21935-21936.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21935-21936.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21935-21936.diff	(revision 22755)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 21935)
++++ ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 21936)
+@@ -21,23 +21,21 @@
+ /*}}}*/
+ StringArrayParam::StringArrayParam(int in_enum_type,char** in_values, int in_numstrings){/*{{{*/
+ 
+-	int i;
+-	int size;
++	this->enum_type=in_enum_type;
++	this->numstrings=in_numstrings;
+ 
+-	enum_type=in_enum_type;
+-	numstrings=in_numstrings;
+-
+ 	if(numstrings){
+-		value=xNew<char*>(numstrings);
+-		for(i=0;i<numstrings;i++){
+-			char* string=NULL;
+-			size=strlen(in_values[i])+1;
+-			string=xNew<char>(size);
++		this->value=xNew<char*>(numstrings);
++		for(int i=0;i<numstrings;i++){
++			int   size=strlen(in_values[i])+1;
++			char* string=xNew<char>(size);
+ 			xMemCpy<char>(string,in_values[i],size);
+-			value[i]=string;
++			this->value[i]=string;
+ 		}
+ 	}
+-	else value=NULL;
++	else{
++		this->value=NULL;
++	}
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21936-21937.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21936-21937.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21936-21937.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test444.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test444.m	(revision 21936)
++++ ../trunk-jpl/test/NightlyRun/test444.m	(revision 21937)
+@@ -83,7 +83,7 @@
+ end
+ 
+ %partitioning
+-md.qmu.numberofpartitions=20;
++md.qmu.numberofpartitions=10;
+ md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
+ md.qmu.partition=md.qmu.partition-1;
+ md.qmu.isdakota=1;
+Index: ../trunk-jpl/test/Archives/Archive444.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21937-21938.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21937-21938.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21937-21938.diff	(revision 22755)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 21937)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 21938)
+@@ -22,9 +22,9 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', \
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
+ field_tolerances=[\
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+-	1e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+-	1e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++	2e-09,2e-09,2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	2e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	2e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 21937)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 21938)
+@@ -13,9 +13,9 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', ...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'};
+ field_tolerances={...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
+-	1e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
++	2e-09,2e-09,2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
++	2e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
++	2e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test224.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.js	(revision 21937)
++++ ../trunk-jpl/test/NightlyRun/test224.js	(revision 21938)
+@@ -14,9 +14,9 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', 
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'];
+ field_tolerances=[
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
+-	1e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
+-	1e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05];
++	2e-09,2e-09,2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
++	2e-09,5e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
++	2e-09,5e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05];
+ field_values=[
+ 	(md.results.TransientSolution[0](1).Vx),
+ 	(md.results.TransientSolution[0](1).Vy),
Index: /issm/oecreview/Archive/21724-22754/ISSM-21938-21939.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21938-21939.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21938-21939.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/slr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/slr.m	(revision 21938)
++++ ../trunk-jpl/src/m/classes/slr.m	(revision 21939)
+@@ -146,8 +146,8 @@
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+-			WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2);
+-			%WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofelements+1);
++			%WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2);
++			WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','abstol','format','Double');
Index: /issm/oecreview/Archive/21724-22754/ISSM-21939-21940.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21939-21940.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21939-21940.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_se
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_se	(revision 21939)
++++ ../trunk-jpl/jenkins/linux64_ross_se	(revision 21940)
+@@ -62,8 +62,8 @@
+ #safer as some packages are very sensitive to parallel compilation)
+ NUMCPUS_INSTALL=5
+ 
+-#number of cpus used in the nightly runs.
+-NUMCPUS_RUN=4
++#number of cpus used in the nightly runs. (pb of access to all_vertices.txt if more than 1)
++NUMCPUS_RUN=1
+ 
+ #Nightly run options. The matlab routine runme.m will be called
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
Index: /issm/oecreview/Archive/21724-22754/ISSM-21940-21941.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21940-21941.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21940-21941.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/coordsystems/gmtmask.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/gmtmask.m	(revision 21940)
++++ ../trunk-jpl/src/m/coordsystems/gmtmask.m	(revision 21941)
+@@ -30,8 +30,10 @@
+ 	
+ 	%First, write our lat,long file for gmt:
+ 	nv=length(lat);
+-	dlmwrite('./all_vertices.txt',[long lat (1:nv)'],'delimiter','\t','precision',10);
++	filename = ['all_vertices-' num2str(feature('GetPid')) '.txt']
++	dlmwrite(filename,[long lat (1:nv)'],'delimiter','\t','precision',10);
+ 
++
+ 	%Avoid bypassing of the ld library path by Matlab (:()
+ 	if ismac,
+ 		dyld_library_path_old=getenv('DYLD_LIBRARY_PATH');
+@@ -39,7 +41,7 @@
+ 	end
+ 
+ 	%figure out which vertices are on the ocean, which one on the continent:
+-	[status,result] = system('gmt gmtselect ./all_vertices.txt -h0 -Df -R0/360/-90/90  -A0 -JQ180/200 -Nk/s/s/k/s > ./oce_vertices.txt');
++	[status,result] = system(['gmt gmtselect ./' filename ' -h0 -Df -R0/360/-90/90  -A0 -JQ180/200 -Nk/s/s/k/s > ./oce_vertices.txt']);
+ 	if status~=0,
+ 		error(result);
+ 	end
+@@ -63,5 +65,5 @@
+ 	mask=zeros(nv,1);
+ 	mask(oce_vertices)=1;
+ 	
+-	system('rm -rf ./all_vertices.txt ./oce_vertices.txt ./gmt.history');
++	system(['rm -rf ./' filename ' ./oce_vertices.txt ./gmt.history']);
+ 	if ~recursive, disp(sprintf('gmtmask: done')); end;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21941-21942.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21941-21942.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21941-21942.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/coordsystems/gmtmask.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/gmtmask.m	(revision 21941)
++++ ../trunk-jpl/src/m/coordsystems/gmtmask.m	(revision 21942)
+@@ -30,10 +30,10 @@
+ 	
+ 	%First, write our lat,long file for gmt:
+ 	nv=length(lat);
+-	filename = ['all_vertices-' num2str(feature('GetPid')) '.txt']
+-	dlmwrite(filename,[long lat (1:nv)'],'delimiter','\t','precision',10);
++	filename_all = ['all_vertices-' num2str(feature('GetPid')) '.txt']; 
++	filename_oce = ['oce_vertices-' num2str(feature('GetPid')) '.txt']; 
++	dlmwrite(filename_all,[long lat (1:nv)'],'delimiter','\t','precision',10);
+ 
+-
+ 	%Avoid bypassing of the ld library path by Matlab (:()
+ 	if ismac,
+ 		dyld_library_path_old=getenv('DYLD_LIBRARY_PATH');
+@@ -41,7 +41,7 @@
+ 	end
+ 
+ 	%figure out which vertices are on the ocean, which one on the continent:
+-	[status,result] = system(['gmt gmtselect ./' filename ' -h0 -Df -R0/360/-90/90  -A0 -JQ180/200 -Nk/s/s/k/s > ./oce_vertices.txt']);
++	[status,result] = system(['gmt gmtselect ./' filename_all ' -h0 -Df -R0/360/-90/90  -A0 -JQ180/200 -Nk/s/s/k/s > ./' filename_oce]);
+ 	if status~=0,
+ 		error(result);
+ 	end
+@@ -51,7 +51,7 @@
+ 		setenv('DYLD_LIBRARY_PATH',dyld_library_path_old);
+ 	end
+ 	%read the con_vertices.txt file and flag our mesh vertices on the continent
+-	fid=fopen('./oce_vertices.txt','r');
++	fid=fopen(['./' filename_oce],'r');
+ 	line=fgets(fid); 
+ 	line=fgets(fid);
+ 	oce_vertices=[];
+@@ -65,5 +65,5 @@
+ 	mask=zeros(nv,1);
+ 	mask(oce_vertices)=1;
+ 	
+-	system(['rm -rf ./' filename ' ./oce_vertices.txt ./gmt.history']);
++	system(['rm -rf ./' filename_all ' ./' filename_oce ' ./gmt.history']);
+ 	if ~recursive, disp(sprintf('gmtmask: done')); end;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21942-21943.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21942-21943.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21942-21943.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test2002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2002.py	(revision 21942)
++++ ../trunk-jpl/test/NightlyRun/test2002.py	(revision 21943)
+@@ -18,6 +18,8 @@
+ #slr loading:
+ md.slr.deltathickness=np.zeros((md.mesh.numberofelements))
+ md.slr.sealevel=np.zeros((md.mesh.numberofvertices))
++md.slr.steric_rate=np.zeros((md.mesh.numberofvertices))
++
+ #antarctica
+ late=np.sum(md.mesh.lat[md.mesh.elements-1],axis=1)/3
+ longe=np.sum(md.mesh.long[md.mesh.elements-1],axis=1)/3
Index: /issm/oecreview/Archive/21724-22754/ISSM-21943-21944.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21943-21944.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21943-21944.diff	(revision 22755)
@@ -0,0 +1,15142 @@
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Par/SquareShelfConstrained.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Par/SquareShelfConstrained.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Par/SquareShelfConstrained.js	(nonexistent)
+@@ -1,70 +0,0 @@
+-function parameterize(md){
+-
+-	//Geometry
+-	var hmin=300;
+-	var hmax=1000;
+-	var ymin=ArrayMin(md.mesh.y);
+-	var ymax=ArrayMax(md.mesh.y);
+-	var xmin=ArrayMin(md.mesh.x);
+-	var xmax=ArrayMax(md.mesh.x);
+-	
+-	md.geometry.thickness=NewArrayFill(md.mesh.numberofvertices,0);
+-	md.geometry.base=NewArrayFill(md.mesh.numberofvertices,0);
+-	md.geometry.surface=NewArrayFill(md.mesh.numberofvertices,0);
+-	md.geometry.bed=NewArrayFill(md.mesh.numberofvertices,0);
+-
+-	for(i=0;i<md.mesh.numberofvertices;i++){
+-		md.geometry.thickness[i]=hmax+(hmin-hmax)*(md.mesh.y[i]-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x[i]-xmin)/(xmax-xmin);
+-		md.geometry.base[i]=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness[i];
+-		md.geometry.surface[i]=md.geometry.base[i]+md.geometry.thickness[i];
+-		md.geometry.bed[i]=md.geometry.base[i]-10;
+-	}
+-	
+-	//Initial velocity: no ncreader for now, so we just load arrays.
+-	/*x     = transpose(ncread('../Data/SquareShelfConstrained.nc','x'));
+-	y     = transpose(ncread('../Data/SquareShelfConstrained.nc','y'));
+-	vx    = transpose(ncread('../Data/SquareShelfConstrained.nc','vx'));
+-	vy    = transpose(ncread('../Data/SquareShelfConstrained.nc','vy'));
+-	index = transpose(ncread('../Data/SquareShelfConstrained.nc','index'));*/
+-	
+-	md.initialization.vx=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y);
+-	md.initialization.vy=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y);
+-	md.initialization.vel=ArrayMag(md.initialization.vx,md.initialization.vy);
+-	md.initialization.vz=NewArrayFill(md.mesh.numberofvertices,0);
+-	md.initialization.pressure=NewArrayFill(md.mesh.numberofvertices,0);
+-
+-	//Materials
+-	md.initialization.temperature=NewArrayFill(md.mesh.numberofvertices,273-20);
+-	md.materials.rheology_B=paterson(md.initialization.temperature);
+-	md.materials.rheology_n=NewArrayFill(md.mesh.numberofelements,3);
+-
+-	//Surface mass balance and basal melting
+-	md.smb.mass_balance=NewArrayFill(md.mesh.numberofvertices,10);
+-	md.basalforcings.floatingice_melting_rate=NewArrayFill(md.mesh.numberofvertices,5.0);
+-	md.basalforcings.groundedice_melting_rate=NewArrayFill(md.mesh.numberofvertices,5.0);
+-
+-	//Friction
+-	md.friction.coefficient=NewArrayFill(md.mesh.numberofvertices,20);
+-	for(var i=0;i<md.mesh.numberofvertices;i++)if(md.mask.groundedice_levelset[i]<0)md.friction.coefficient[i]=0;
+-	md.friction.p=NewArrayFill(md.mesh.numberofelements,1);
+-	md.friction.q=NewArrayFill(md.mesh.numberofelements,1);
+-
+-	//Numerical parameters
+-	md.stressbalance.viscosity_overshoot=0.0;
+-	md.masstransport.stabilization=1;
+-	md.thermal.stabilization=1;
+-	md.verbose=new verbose(0);
+-	md.settings.waitonlock=30;
+-	md.stressbalance.restol=0.05;
+-	md.stressbalance.reltol=0.05;
+-	md.steadystate.reltol=0.05;
+-	md.stressbalance.abstol=NaN;
+-	md.timestepping.time_step=1;
+-	md.timestepping.final_time=3;
+-
+-	//Deal with boundary conditions:
+-	SetIceShelfBC(md);
+-
+-	//Change name so that no tests have the same name
+-	md.miscellaneous.name='test101';
+-}
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Par
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Par	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Par	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/Par
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/basalforcings.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/basalforcings.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/basalforcings.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/basalforcings.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/basalforcings.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/damage.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/damage.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/damage.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/damage.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/damage.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh3dprisms.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh3dprisms.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh3dprisms.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/mesh3dprisms.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh3dprisms.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/levelset.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/levelset.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/levelset.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/levelset.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/levelset.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/GetAreas.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/GetAreas.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/GetAreas.js	(nonexistent)
+@@ -1,95 +0,0 @@
+-GetAreas = function(index,x,y,varargin) {
+-    //GETAREAS - compute areas or volumes of elements
+-    //
+-    //   compute areas of triangular elements or volumes 
+-    //   of pentahedrons
+-    //
+-    //   Usage:
+-    //      areas  =GetAreas(index,x,y);
+-    //      volumes=GetAreas(index,x,y,z);
+-    //
+-    //   Examples:
+-    //      areas  =GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y);
+-    //      volumes=GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y,md.z);
+-
+-    //get number of elements and number of nodes
+-    function zeros(...args) {
+-        var array = [];
+-        for (var i = 0; i < args[0]; ++i) {
+-            array.push(args.length == 1 ? 0 : zeros(args.slice(1)));
+-        }
+-        return array;
+-    }
+-    nels=index.length;
+-    nods=x.length;
+-    if (arguments.length===4)
+-        z=varargin[0];
+-
+-    //some checks
+-    if (arguments.length!==3 && arguments.length!==4) {
+-        //help GetAreas
+-        console.error('GetAreas error message: bad usage')
+-    }
+-    if ((y.length!==nods) || (arguments.length===4 && z.length!==nods)) {
+-        console.error('GetAreas error message: x,y and z do not have the same length')
+-    }
+-    if (Math.max.apply(null, index)>nods) {
+-        console.error(['GetAreas error message: index should not have values above ' + nods.toString() ]);
+-    }
+-    if ((arguments.length===3 && index[0].length!==3)) {
+-        console.error('GetAreas error message: index should have 3 columns for 2d meshes.')
+-    }
+-    if ((arguments.length===4 && index[0].length!==6)) {
+-        console.error('GetAreas error message: index should have 6 columns for 3d meshes.')
+-    }
+-
+-    //initialization
+-    areas=zeros(nels,1);
+-
+-    var getColumnArray = function(arr, col) {
+-       return arr.map(function(value,index) { return value[col]; }); 
+-    };
+-
+-    x1=getColumnArray(index, 0).map(function(value) { return x[value]; }).map(function(v) { return v === undefined ? 0 : v; }); 
+-    x2=getColumnArray(index, 1).map(function(value) { return x[value]; }).map(function(v) { return v === undefined ? 0 : v; }); 
+-    x3=getColumnArray(index, 2).map(function(value) { return x[value]; }).map(function(v) { return v === undefined ? 0 : v; });
+-    y1=getColumnArray(index, 0).map(function(value) { return y[value]; }).map(function(v) { return v === undefined ? 0 : v; }); 
+-    y2=getColumnArray(index, 1).map(function(value) { return y[value]; }).map(function(v) { return v === undefined ? 0 : v; }); 
+-    y3=getColumnArray(index, 2).map(function(value) { return y[value]; }).map(function(v) { return v === undefined ? 0 : v; });
+-
+-    //compute the volume of each element
+-    if (arguments.length===3) {
+-        //compute the surface of the triangle
+-        areas=math.multiply(0.5, math.subtract(math.multiply(math.subtract(x2,x1), math.subtract(y3,y1)), math.multiply(math.subtract(y2,y1), math.subtract(x3,x1))));
+-    } else {
+-        //V=area(triangle)*1/3(z1+z2+z3)
+-
+-        var tempind1 = [];
+-        index.forEach(function(value, idx) {
+-            tempind1.push(value[3]);
+-            tempind1.push(value[4]);
+-            tempind1.push(value[5]);
+-        });
+-
+-        var tempind2 = [];
+-        index.forEach(function(value, idx) {
+-            tempind2.push(value[0]);
+-            tempind2.push(value[1]);
+-            tempind2.push(value[2]);
+-        });
+-        
+-        var tempz1 = tempind1.map(function(value, idx) {
+-            return z[value][2];
+-        });
+-
+-        var tempz2 = tempind2.map(function(value, idx) {
+-            return z[value][2];
+-        })
+-
+-        thickness = math.subtract(math.mean(tempz1), math.mean(tempz2));
+-
+-        areas=math.multiply(math.multiply(0.5, math.subtract(math.multiply(math.subtract(x2,x1), math.subtract(y3,y1)), math.multiply(math.subtract(y2,y1), math.subtract(x3,x1)))), thickness);
+-    }
+-
+-    return areas;
+-};
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/geometry.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/thermal.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/thermal.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/thermal.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/thermal.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/thermal.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/DepthAverage.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/DepthAverage.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/DepthAverage.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/extrusion/DepthAverage.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/DepthAverage.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/partitioner.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/partitioner.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/partitioner.js	(nonexistent)
+@@ -1,116 +0,0 @@
+-partitioner = function(md,...args) {
+-function zeros(...args) {
+-	var array = [];
+-	for (var i = 0; i < args[0]; ++i) {
+-		array.push(args.length == 1 ? 0 : zeros(args.slice(1)));
+-	}
+-	return array;
+-}
+-//PARTITIONER - partition mesh 
+-//
+-//   List of options to partitioner: 
+-//
+-//   package: 'chaco', 'metis' or 'scotch'
+-//   npart: number of partitions.
+-//   weighting: 'on' or 'off': default off
+-//   section:  1 by defaults(1=bisection, 2=quadrisection, 3=octasection)
+-//   recomputeadjacency:  'on' by default (set to 'off' to compute existing one)
+-//   Output: md.qmu.partition recover the partition vector
+-//   
+-//   Usage:
+-//      md=partitioner(md,'package','chaco','npart',100,'weighting','on');
+-//
+-
+-//get options: 
+-options= new pairoptions(args.slice());
+-
+-//set defaults
+-options.addfielddefault('package','chaco');
+-options.addfielddefault('npart',10);
+-options.addfielddefault('weighting','on');
+-options.addfielddefault('section',1);
+-options.addfielddefault('recomputeadjacency','on');
+-
+-//get package: 
+-package=options.getfieldvalue('package');
+-npart=options.getfieldvalue('npart');
+-recomputeadjacency=options.getfieldvalue('recomputeadjacency');
+-
+-if(md.mesh.dimension()===3) {
+-	//partitioning essentially happens in 2D. So partition in 2D, then 
+-    //extrude the partition vector vertically. 
+-	md3d=md; //save  for later
+-	md.mesh.elements=md.mesh.elements2d;
+-	md.mesh.x=md.mesh.x2d;
+-	md.mesh.y=md.mesh.y2d;
+-	md.mesh.numberofvertices=md.mesh.numberofvertices2d;
+-	md.mesh.numberofelements=md.mesh.numberofelements2d;
+-	md.qmu.vertex_weight=[];
+-	md.mesh.vertexconnectivity=[];
+-}
+-
+-//adjacency matrix if needed:
+-if (recomputeadjacency.toLowerCase() === 'on') {
+-	md=adjacency(md);
+-} else {
+-	disp('skipping adjacency matrix computation as requested in the options');
+-}
+-
+-if (package.toLowerCase() === 'chaco') {
+-
+-	//  default method (from chaco.m)
+-	method=[[1], [1], [0], [0], [1], [1], [50], [0], [.001], [7654321]];
+-	method[0]=3;    //  global method (3=inertial (geometric))
+-	method[2]=0;    //  vertex weights (0=off, 1=on)
+-
+-	//specify bisection
+-	method[5]=options.getfieldvalue('section');//  ndims (1=bisection, 2=quadrisection, 3=octasection)
+-
+-    //are we using weights? 
+-    if (options.getfieldvalue('weighting').toLowerCase() === 'on') {
+-            weights=Math.floor(md.qmu.vertex_weight/math.min(md.qmu.vertex_weight));
+-            method[2]=1;
+-    } else { 
+-        weights=[];
+-    }
+-
+-	//  partition into nparts
+-    if (md.mesh.classname() === 'mesh2d') {
+-        //TODO convert to column
+-		part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,zeros(md.mesh.numberofvertices,1),method,npart,[])+1; //index partitions from 1 up. like metis.
+-	} else {
+-        //TODO convert to column
+-		part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,md.mesh.z,method,npart,[])+1; //index partitions from 1 up. like metis.
+-	}
+-} else if (package.toLowerCase() === 'scotch') {
+-	//are we using weights? 
+-    if (options.getfieldvalue('weighting').toLowerCase() === 'on') {
+-		weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight));
+-	}
+-	maptab=Scotch(md.qmu.adjacency,[],weights,[],'cmplt',[npart]);
+-
+-    part=maptab.filter(function(x, idx) { return idx });//index partitions from 1 up. like metis.
+-} else if (package.toLowerCase() === 'linear') {
+-
+-    part = part.slice(0, md.mesh.numberofvertices);
+-} else if (package.toLowerCase() === 'metis') {
+-	[element_partitioning,part]=MeshPartition(md.mesh,md.qmu.numberofpartitions);
+-} else {
+-	console.error(['partitioner error message: could not find ' + package + ' partitioner']);
+-	//help partitioner
+-}
+-
+-//extrude if we are in 3d
+-if (md.mesh.dimension() === 3) {
+-	md3d.qmu.vertex_weight=md.qmu.vertex_weight;
+-	md3d.qmu.adjacency=md.qmu.adjacency;
+-	md=md3d;
+-
+-    //TODO convert to column vec
+-	part=project3d(md,'vector',part,'type','node');
+-}
+-
+-md.qmu.partition=part;
+-
+-return md;
+-};
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/model.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/model.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/model.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/model.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/model.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/matice.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/matice.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/matice.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/matice.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/matice.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-extlibraries.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-extlibraries.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-extlibraries.js	(nonexistent)
+@@ -1,119 +0,0 @@
+-/**
+- * @fileoverview gl-matrix - High performance matrix and vector operations
+- * @author Brandon Jones
+- * @author Colin MacKenzie IV
+- * @version 2.3.2
+- */
+-
+-/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
+-
+-Permission is hereby granted, free of charge, to any person obtaining a copy
+-of this software and associated documentation files (the "Software"), to deal
+-in the Software without restriction, including without limitation the rights
+-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+-copies of the Software, and to permit persons to whom the Software is
+-furnished to do so, subject to the following conditions:
+-
+-The above copyright notice and this permission notice shall be included in
+-all copies or substantial portions of the Software.
+-
+-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+-THE SOFTWARE. */
+-
+-!function(t,a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define(a);else{var n=a();for(var r in n)("object"==typeof exports?exports:t)[r]=n[r]}}(this,function(){return function(t){function a(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,a),o.loaded=!0,o.exports}var n={};return a.m=t,a.c=n,a.p="",a(0)}([function(t,a,n){a.glMatrix=n(1),a.mat2=n(2),a.mat2d=n(3),a.mat3=n(4),a.mat4=n(5),a.quat=n(6),a.vec2=n(9),a.vec3=n(7),a.vec4=n(8)},function(t,a){var n={};n.EPSILON=1e-6,n.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,n.RANDOM=Math.random,n.ENABLE_SIMD=!1,n.SIMD_AVAILABLE=n.ARRAY_TYPE===Float32Array&&"SIMD"in this,n.USE_SIMD=n.ENABLE_SIMD&&n.SIMD_AVAILABLE,n.setMatrixArrayType=function(t){n.ARRAY_TYPE=t};var r=Math.PI/180;n.toRadian=function(t){return t*r},t.exports=n},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},o.clone=function(t){var a=new r.ARRAY_TYPE(4);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},o.transpose=function(t,a){if(t===a){var n=a[1];t[1]=a[2],t[2]=n}else t[0]=a[0],t[1]=a[2],t[2]=a[1],t[3]=a[3];return t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=n*l-o*r;return u?(u=1/u,t[0]=l*u,t[1]=-r*u,t[2]=-o*u,t[3]=n*u,t):null},o.adjoint=function(t,a){var n=a[0];return t[0]=a[3],t[1]=-a[1],t[2]=-a[2],t[3]=n,t},o.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},o.multiply=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=n[0],M=n[1],i=n[2],s=n[3];return t[0]=r*e+l*M,t[1]=o*e+u*M,t[2]=r*i+l*s,t[3]=o*i+u*s,t},o.mul=o.multiply,o.rotate=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+l*e,t[1]=o*M+u*e,t[2]=r*-e+l*M,t[3]=o*-e+u*M,t},o.scale=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=n[0],M=n[1];return t[0]=r*e,t[1]=o*e,t[2]=l*M,t[3]=u*M,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=a[1],t},o.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))},o.LDU=function(t,a,n,r){return t[2]=r[2]/r[0],n[0]=r[0],n[1]=r[1],n[3]=r[3]-t[2]*n[1],[t,a,n]},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(6);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(6);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=n*l-r*o;return M?(M=1/M,t[0]=l*M,t[1]=-r*M,t[2]=-o*M,t[3]=n*M,t[4]=(o*e-l*u)*M,t[5]=(r*u-n*e)*M,t):null},o.determinant=function(t){return t[0]*t[3]-t[1]*t[2]},o.multiply=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=n[0],s=n[1],c=n[2],D=n[3],S=n[4],I=n[5];return t[0]=r*i+l*s,t[1]=o*i+u*s,t[2]=r*c+l*D,t[3]=o*c+u*D,t[4]=r*S+l*I+e,t[5]=o*S+u*I+M,t},o.mul=o.multiply,o.rotate=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=Math.sin(n),s=Math.cos(n);return t[0]=r*s+l*i,t[1]=o*s+u*i,t[2]=r*-i+l*s,t[3]=o*-i+u*s,t[4]=e,t[5]=M,t},o.scale=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=n[0],s=n[1];return t[0]=r*i,t[1]=o*i,t[2]=l*s,t[3]=u*s,t[4]=e,t[5]=M,t},o.translate=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=n[0],s=n[1];return t[0]=r,t[1]=o,t[2]=l,t[3]=u,t[4]=r*i+l*s+e,t[5]=o*i+u*s+M,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t[4]=0,t[5]=0,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=a[1],t[4]=0,t[5]=0,t},o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=a[0],t[5]=a[1],t},o.str=function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromMat4=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[4],t[4]=a[5],t[5]=a[6],t[6]=a[8],t[7]=a[9],t[8]=a[10],t},o.clone=function(t){var a=new r.ARRAY_TYPE(9);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a[6]=t[6],a[7]=t[7],a[8]=t[8],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.transpose=function(t,a){if(t===a){var n=a[1],r=a[2],o=a[5];t[1]=a[3],t[2]=a[6],t[3]=n,t[5]=a[7],t[6]=r,t[7]=o}else t[0]=a[0],t[1]=a[3],t[2]=a[6],t[3]=a[1],t[4]=a[4],t[5]=a[7],t[6]=a[2],t[7]=a[5],t[8]=a[8];return t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=a[6],i=a[7],s=a[8],c=s*u-e*i,D=-s*l+e*M,S=i*l-u*M,I=n*c+r*D+o*S;return I?(I=1/I,t[0]=c*I,t[1]=(-s*r+o*i)*I,t[2]=(e*r-o*u)*I,t[3]=D*I,t[4]=(s*n-o*M)*I,t[5]=(-e*n+o*l)*I,t[6]=S*I,t[7]=(-i*n+r*M)*I,t[8]=(u*n-r*l)*I,t):null},o.adjoint=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=a[6],i=a[7],s=a[8];return t[0]=u*s-e*i,t[1]=o*i-r*s,t[2]=r*e-o*u,t[3]=e*M-l*s,t[4]=n*s-o*M,t[5]=o*l-n*e,t[6]=l*i-u*M,t[7]=r*M-n*i,t[8]=n*u-r*l,t},o.determinant=function(t){var a=t[0],n=t[1],r=t[2],o=t[3],l=t[4],u=t[5],e=t[6],M=t[7],i=t[8];return a*(i*l-u*M)+n*(-i*o+u*e)+r*(M*o-l*e)},o.multiply=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=a[6],s=a[7],c=a[8],D=n[0],S=n[1],I=n[2],x=n[3],f=n[4],F=n[5],m=n[6],h=n[7],d=n[8];return t[0]=D*r+S*u+I*i,t[1]=D*o+S*e+I*s,t[2]=D*l+S*M+I*c,t[3]=x*r+f*u+F*i,t[4]=x*o+f*e+F*s,t[5]=x*l+f*M+F*c,t[6]=m*r+h*u+d*i,t[7]=m*o+h*e+d*s,t[8]=m*l+h*M+d*c,t},o.mul=o.multiply,o.translate=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=a[6],s=a[7],c=a[8],D=n[0],S=n[1];return t[0]=r,t[1]=o,t[2]=l,t[3]=u,t[4]=e,t[5]=M,t[6]=D*r+S*u+i,t[7]=D*o+S*e+s,t[8]=D*l+S*M+c,t},o.rotate=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=a[6],s=a[7],c=a[8],D=Math.sin(n),S=Math.cos(n);return t[0]=S*r+D*u,t[1]=S*o+D*e,t[2]=S*l+D*M,t[3]=S*u-D*r,t[4]=S*e-D*o,t[5]=S*M-D*l,t[6]=i,t[7]=s,t[8]=c,t},o.scale=function(t,a,n){var r=n[0],o=n[1];return t[0]=r*a[0],t[1]=r*a[1],t[2]=r*a[2],t[3]=o*a[3],t[4]=o*a[4],t[5]=o*a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t},o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=a[0],t[7]=a[1],t[8]=1,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=0,t[3]=-n,t[4]=r,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=0,t[4]=a[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromMat2d=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=0,t[3]=a[2],t[4]=a[3],t[5]=0,t[6]=a[4],t[7]=a[5],t[8]=1,t},o.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=n+n,e=r+r,M=o+o,i=n*u,s=r*u,c=r*e,D=o*u,S=o*e,I=o*M,x=l*u,f=l*e,F=l*M;return t[0]=1-c-I,t[3]=s-F,t[6]=D+f,t[1]=s+F,t[4]=1-i-I,t[7]=S-x,t[2]=D-f,t[5]=S+x,t[8]=1-i-c,t},o.normalFromMat4=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=a[6],i=a[7],s=a[8],c=a[9],D=a[10],S=a[11],I=a[12],x=a[13],f=a[14],F=a[15],m=n*e-r*u,h=n*M-o*u,d=n*i-l*u,v=r*M-o*e,z=r*i-l*e,p=o*i-l*M,w=s*x-c*I,A=s*f-D*I,R=s*F-S*I,b=c*f-D*x,Y=c*F-S*x,q=D*F-S*f,y=m*q-h*Y+d*b+v*R-z*A+p*w;return y?(y=1/y,t[0]=(e*q-M*Y+i*b)*y,t[1]=(M*R-u*q-i*A)*y,t[2]=(u*Y-e*R+i*w)*y,t[3]=(o*Y-r*q-l*b)*y,t[4]=(n*q-o*R+l*A)*y,t[5]=(r*R-n*Y-l*w)*y,t[6]=(x*p-f*z+F*v)*y,t[7]=(f*d-I*p-F*h)*y,t[8]=(I*z-x*d+F*m)*y,t):null},o.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))},t.exports=o},function(t,a,n){var r=n(1),o={scalar:{},SIMD:{}};o.create=function(){var t=new r.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.clone=function(t){var a=new r.ARRAY_TYPE(16);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a[6]=t[6],a[7]=t[7],a[8]=t[8],a[9]=t[9],a[10]=t[10],a[11]=t[11],a[12]=t[12],a[13]=t[13],a[14]=t[14],a[15]=t[15],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.scalar.transpose=function(t,a){if(t===a){var n=a[1],r=a[2],o=a[3],l=a[6],u=a[7],e=a[11];t[1]=a[4],t[2]=a[8],t[3]=a[12],t[4]=n,t[6]=a[9],t[7]=a[13],t[8]=r,t[9]=l,t[11]=a[14],t[12]=o,t[13]=u,t[14]=e}else t[0]=a[0],t[1]=a[4],t[2]=a[8],t[3]=a[12],t[4]=a[1],t[5]=a[5],t[6]=a[9],t[7]=a[13],t[8]=a[2],t[9]=a[6],t[10]=a[10],t[11]=a[14],t[12]=a[3],t[13]=a[7],t[14]=a[11],t[15]=a[15];return t},o.SIMD.transpose=function(t,a){var n,r,o,l,u,e,M,i,s,c;return n=SIMD.Float32x4.load(a,0),r=SIMD.Float32x4.load(a,4),o=SIMD.Float32x4.load(a,8),l=SIMD.Float32x4.load(a,12),u=SIMD.Float32x4.shuffle(n,r,0,1,4,5),e=SIMD.Float32x4.shuffle(o,l,0,1,4,5),M=SIMD.Float32x4.shuffle(u,e,0,2,4,6),i=SIMD.Float32x4.shuffle(u,e,1,3,5,7),SIMD.Float32x4.store(t,0,M),SIMD.Float32x4.store(t,4,i),u=SIMD.Float32x4.shuffle(n,r,2,3,6,7),e=SIMD.Float32x4.shuffle(o,l,2,3,6,7),s=SIMD.Float32x4.shuffle(u,e,0,2,4,6),c=SIMD.Float32x4.shuffle(u,e,1,3,5,7),SIMD.Float32x4.store(t,8,s),SIMD.Float32x4.store(t,12,c),t},o.transpose=r.USE_SIMD?o.SIMD.transpose:o.scalar.transpose,o.scalar.invert=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=a[6],i=a[7],s=a[8],c=a[9],D=a[10],S=a[11],I=a[12],x=a[13],f=a[14],F=a[15],m=n*e-r*u,h=n*M-o*u,d=n*i-l*u,v=r*M-o*e,z=r*i-l*e,p=o*i-l*M,w=s*x-c*I,A=s*f-D*I,R=s*F-S*I,b=c*f-D*x,Y=c*F-S*x,q=D*F-S*f,y=m*q-h*Y+d*b+v*R-z*A+p*w;return y?(y=1/y,t[0]=(e*q-M*Y+i*b)*y,t[1]=(o*Y-r*q-l*b)*y,t[2]=(x*p-f*z+F*v)*y,t[3]=(D*z-c*p-S*v)*y,t[4]=(M*R-u*q-i*A)*y,t[5]=(n*q-o*R+l*A)*y,t[6]=(f*d-I*p-F*h)*y,t[7]=(s*p-D*d+S*h)*y,t[8]=(u*Y-e*R+i*w)*y,t[9]=(r*R-n*Y-l*w)*y,t[10]=(I*z-x*d+F*m)*y,t[11]=(c*d-s*z-S*m)*y,t[12]=(e*A-u*b-M*w)*y,t[13]=(n*b-r*A+o*w)*y,t[14]=(x*h-I*v-f*m)*y,t[15]=(s*v-c*h+D*m)*y,t):null},o.SIMD.invert=function(t,a){var n,r,o,l,u,e,M,i,s,c,D=SIMD.Float32x4.load(a,0),S=SIMD.Float32x4.load(a,4),I=SIMD.Float32x4.load(a,8),x=SIMD.Float32x4.load(a,12);return u=SIMD.Float32x4.shuffle(D,S,0,1,4,5),r=SIMD.Float32x4.shuffle(I,x,0,1,4,5),n=SIMD.Float32x4.shuffle(u,r,0,2,4,6),r=SIMD.Float32x4.shuffle(r,u,1,3,5,7),u=SIMD.Float32x4.shuffle(D,S,2,3,6,7),l=SIMD.Float32x4.shuffle(I,x,2,3,6,7),o=SIMD.Float32x4.shuffle(u,l,0,2,4,6),l=SIMD.Float32x4.shuffle(l,u,1,3,5,7),u=SIMD.Float32x4.mul(o,l),u=SIMD.Float32x4.swizzle(u,1,0,3,2),e=SIMD.Float32x4.mul(r,u),M=SIMD.Float32x4.mul(n,u),u=SIMD.Float32x4.swizzle(u,2,3,0,1),e=SIMD.Float32x4.sub(SIMD.Float32x4.mul(r,u),e),M=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,u),M),M=SIMD.Float32x4.swizzle(M,2,3,0,1),u=SIMD.Float32x4.mul(r,o),u=SIMD.Float32x4.swizzle(u,1,0,3,2),e=SIMD.Float32x4.add(SIMD.Float32x4.mul(l,u),e),s=SIMD.Float32x4.mul(n,u),u=SIMD.Float32x4.swizzle(u,2,3,0,1),e=SIMD.Float32x4.sub(e,SIMD.Float32x4.mul(l,u)),s=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,u),s),s=SIMD.Float32x4.swizzle(s,2,3,0,1),u=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(r,2,3,0,1),l),u=SIMD.Float32x4.swizzle(u,1,0,3,2),o=SIMD.Float32x4.swizzle(o,2,3,0,1),e=SIMD.Float32x4.add(SIMD.Float32x4.mul(o,u),e),i=SIMD.Float32x4.mul(n,u),u=SIMD.Float32x4.swizzle(u,2,3,0,1),e=SIMD.Float32x4.sub(e,SIMD.Float32x4.mul(o,u)),i=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,u),i),i=SIMD.Float32x4.swizzle(i,2,3,0,1),u=SIMD.Float32x4.mul(n,r),u=SIMD.Float32x4.swizzle(u,1,0,3,2),i=SIMD.Float32x4.add(SIMD.Float32x4.mul(l,u),i),s=SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,u),s),u=SIMD.Float32x4.swizzle(u,2,3,0,1),i=SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,u),i),s=SIMD.Float32x4.sub(s,SIMD.Float32x4.mul(o,u)),u=SIMD.Float32x4.mul(n,l),u=SIMD.Float32x4.swizzle(u,1,0,3,2),M=SIMD.Float32x4.sub(M,SIMD.Float32x4.mul(o,u)),i=SIMD.Float32x4.add(SIMD.Float32x4.mul(r,u),i),u=SIMD.Float32x4.swizzle(u,2,3,0,1),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(o,u),M),i=SIMD.Float32x4.sub(i,SIMD.Float32x4.mul(r,u)),u=SIMD.Float32x4.mul(n,o),u=SIMD.Float32x4.swizzle(u,1,0,3,2),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(l,u),M),s=SIMD.Float32x4.sub(s,SIMD.Float32x4.mul(r,u)),u=SIMD.Float32x4.swizzle(u,2,3,0,1),M=SIMD.Float32x4.sub(M,SIMD.Float32x4.mul(l,u)),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(r,u),s),c=SIMD.Float32x4.mul(n,e),c=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(c,2,3,0,1),c),c=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(c,1,0,3,2),c),u=SIMD.Float32x4.reciprocalApproximation(c),c=SIMD.Float32x4.sub(SIMD.Float32x4.add(u,u),SIMD.Float32x4.mul(c,SIMD.Float32x4.mul(u,u))),(c=SIMD.Float32x4.swizzle(c,0,0,0,0))?(SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(c,e)),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(c,M)),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(c,i)),SIMD.Float32x4.store(t,12,SIMD.Float32x4.mul(c,s)),t):null},o.invert=r.USE_SIMD?o.SIMD.invert:o.scalar.invert,o.scalar.adjoint=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=a[4],e=a[5],M=a[6],i=a[7],s=a[8],c=a[9],D=a[10],S=a[11],I=a[12],x=a[13],f=a[14],F=a[15];return t[0]=e*(D*F-S*f)-c*(M*F-i*f)+x*(M*S-i*D),t[1]=-(r*(D*F-S*f)-c*(o*F-l*f)+x*(o*S-l*D)),t[2]=r*(M*F-i*f)-e*(o*F-l*f)+x*(o*i-l*M),t[3]=-(r*(M*S-i*D)-e*(o*S-l*D)+c*(o*i-l*M)),t[4]=-(u*(D*F-S*f)-s*(M*F-i*f)+I*(M*S-i*D)),t[5]=n*(D*F-S*f)-s*(o*F-l*f)+I*(o*S-l*D),t[6]=-(n*(M*F-i*f)-u*(o*F-l*f)+I*(o*i-l*M)),t[7]=n*(M*S-i*D)-u*(o*S-l*D)+s*(o*i-l*M),t[8]=u*(c*F-S*x)-s*(e*F-i*x)+I*(e*S-i*c),t[9]=-(n*(c*F-S*x)-s*(r*F-l*x)+I*(r*S-l*c)),t[10]=n*(e*F-i*x)-u*(r*F-l*x)+I*(r*i-l*e),t[11]=-(n*(e*S-i*c)-u*(r*S-l*c)+s*(r*i-l*e)),t[12]=-(u*(c*f-D*x)-s*(e*f-M*x)+I*(e*D-M*c)),t[13]=n*(c*f-D*x)-s*(r*f-o*x)+I*(r*D-o*c),t[14]=-(n*(e*f-M*x)-u*(r*f-o*x)+I*(r*M-o*e)),t[15]=n*(e*D-M*c)-u*(r*D-o*c)+s*(r*M-o*e),t},o.SIMD.adjoint=function(t,a){var n,r,o,l,u,e,M,i,s,c,D,S,I,n=SIMD.Float32x4.load(a,0),r=SIMD.Float32x4.load(a,4),o=SIMD.Float32x4.load(a,8),l=SIMD.Float32x4.load(a,12);return s=SIMD.Float32x4.shuffle(n,r,0,1,4,5),e=SIMD.Float32x4.shuffle(o,l,0,1,4,5),u=SIMD.Float32x4.shuffle(s,e,0,2,4,6),e=SIMD.Float32x4.shuffle(e,s,1,3,5,7),s=SIMD.Float32x4.shuffle(n,r,2,3,6,7),i=SIMD.Float32x4.shuffle(o,l,2,3,6,7),M=SIMD.Float32x4.shuffle(s,i,0,2,4,6),i=SIMD.Float32x4.shuffle(i,s,1,3,5,7),s=SIMD.Float32x4.mul(M,i),s=SIMD.Float32x4.swizzle(s,1,0,3,2),c=SIMD.Float32x4.mul(e,s),D=SIMD.Float32x4.mul(u,s),s=SIMD.Float32x4.swizzle(s,2,3,0,1),c=SIMD.Float32x4.sub(SIMD.Float32x4.mul(e,s),c),D=SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,s),D),D=SIMD.Float32x4.swizzle(D,2,3,0,1),s=SIMD.Float32x4.mul(e,M),s=SIMD.Float32x4.swizzle(s,1,0,3,2),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(i,s),c),I=SIMD.Float32x4.mul(u,s),s=SIMD.Float32x4.swizzle(s,2,3,0,1),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(i,s)),I=SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,s),I),I=SIMD.Float32x4.swizzle(I,2,3,0,1),s=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,2,3,0,1),i),s=SIMD.Float32x4.swizzle(s,1,0,3,2),M=SIMD.Float32x4.swizzle(M,2,3,0,1),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(M,s),c),S=SIMD.Float32x4.mul(u,s),s=SIMD.Float32x4.swizzle(s,2,3,0,1),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(M,s)),S=SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,s),S),S=SIMD.Float32x4.swizzle(S,2,3,0,1),s=SIMD.Float32x4.mul(u,e),s=SIMD.Float32x4.swizzle(s,1,0,3,2),S=SIMD.Float32x4.add(SIMD.Float32x4.mul(i,s),S),I=SIMD.Float32x4.sub(SIMD.Float32x4.mul(M,s),I),s=SIMD.Float32x4.swizzle(s,2,3,0,1),S=SIMD.Float32x4.sub(SIMD.Float32x4.mul(i,s),S),I=SIMD.Float32x4.sub(I,SIMD.Float32x4.mul(M,s)),s=SIMD.Float32x4.mul(u,i),s=SIMD.Float32x4.swizzle(s,1,0,3,2),D=SIMD.Float32x4.sub(D,SIMD.Float32x4.mul(M,s)),S=SIMD.Float32x4.add(SIMD.Float32x4.mul(e,s),S),s=SIMD.Float32x4.swizzle(s,2,3,0,1),D=SIMD.Float32x4.add(SIMD.Float32x4.mul(M,s),D),S=SIMD.Float32x4.sub(S,SIMD.Float32x4.mul(e,s)),s=SIMD.Float32x4.mul(u,M),s=SIMD.Float32x4.swizzle(s,1,0,3,2),D=SIMD.Float32x4.add(SIMD.Float32x4.mul(i,s),D),I=SIMD.Float32x4.sub(I,SIMD.Float32x4.mul(e,s)),s=SIMD.Float32x4.swizzle(s,2,3,0,1),D=SIMD.Float32x4.sub(D,SIMD.Float32x4.mul(i,s)),I=SIMD.Float32x4.add(SIMD.Float32x4.mul(e,s),I),SIMD.Float32x4.store(t,0,c),SIMD.Float32x4.store(t,4,D),SIMD.Float32x4.store(t,8,S),SIMD.Float32x4.store(t,12,I),t},o.adjoint=r.USE_SIMD?o.SIMD.adjoint:o.scalar.adjoint,o.determinant=function(t){var a=t[0],n=t[1],r=t[2],o=t[3],l=t[4],u=t[5],e=t[6],M=t[7],i=t[8],s=t[9],c=t[10],D=t[11],S=t[12],I=t[13],x=t[14],f=t[15],F=a*u-n*l,m=a*e-r*l,h=a*M-o*l,d=n*e-r*u,v=n*M-o*u,z=r*M-o*e,p=i*I-s*S,w=i*x-c*S,A=i*f-D*S,R=s*x-c*I,b=s*f-D*I,Y=c*f-D*x;return F*Y-m*b+h*R+d*A-v*w+z*p},o.SIMD.multiply=function(t,a,n){var r=SIMD.Float32x4.load(a,0),o=SIMD.Float32x4.load(a,4),l=SIMD.Float32x4.load(a,8),u=SIMD.Float32x4.load(a,12),e=SIMD.Float32x4.load(n,0),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,2,2,2,2),l),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,3,3,3,3),u))));SIMD.Float32x4.store(t,0,M);var i=SIMD.Float32x4.load(n,4),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(i,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(i,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(i,2,2,2,2),l),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(i,3,3,3,3),u))));SIMD.Float32x4.store(t,4,s);var c=SIMD.Float32x4.load(n,8),D=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,2,2,2,2),l),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,3,3,3,3),u))));SIMD.Float32x4.store(t,8,D);var S=SIMD.Float32x4.load(n,12),I=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,2,2,2,2),l),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,3,3,3,3),u))));return SIMD.Float32x4.store(t,12,I),t},o.scalar.multiply=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=a[6],s=a[7],c=a[8],D=a[9],S=a[10],I=a[11],x=a[12],f=a[13],F=a[14],m=a[15],h=n[0],d=n[1],v=n[2],z=n[3];return t[0]=h*r+d*e+v*c+z*x,t[1]=h*o+d*M+v*D+z*f,t[2]=h*l+d*i+v*S+z*F,t[3]=h*u+d*s+v*I+z*m,h=n[4],d=n[5],v=n[6],z=n[7],t[4]=h*r+d*e+v*c+z*x,t[5]=h*o+d*M+v*D+z*f,t[6]=h*l+d*i+v*S+z*F,t[7]=h*u+d*s+v*I+z*m,h=n[8],d=n[9],v=n[10],z=n[11],t[8]=h*r+d*e+v*c+z*x,t[9]=h*o+d*M+v*D+z*f,t[10]=h*l+d*i+v*S+z*F,t[11]=h*u+d*s+v*I+z*m,h=n[12],d=n[13],v=n[14],z=n[15],t[12]=h*r+d*e+v*c+z*x,t[13]=h*o+d*M+v*D+z*f,t[14]=h*l+d*i+v*S+z*F,t[15]=h*u+d*s+v*I+z*m,t},o.multiply=r.USE_SIMD?o.SIMD.multiply:o.scalar.multiply,o.mul=o.multiply,o.scalar.translate=function(t,a,n){var r,o,l,u,e,M,i,s,c,D,S,I,x=n[0],f=n[1],F=n[2];return a===t?(t[12]=a[0]*x+a[4]*f+a[8]*F+a[12],t[13]=a[1]*x+a[5]*f+a[9]*F+a[13],t[14]=a[2]*x+a[6]*f+a[10]*F+a[14],t[15]=a[3]*x+a[7]*f+a[11]*F+a[15]):(r=a[0],o=a[1],l=a[2],u=a[3],e=a[4],M=a[5],i=a[6],s=a[7],c=a[8],D=a[9],S=a[10],I=a[11],t[0]=r,t[1]=o,t[2]=l,t[3]=u,t[4]=e,t[5]=M,t[6]=i,t[7]=s,t[8]=c,t[9]=D,t[10]=S,t[11]=I,t[12]=r*x+e*f+c*F+a[12],t[13]=o*x+M*f+D*F+a[13],t[14]=l*x+i*f+S*F+a[14],t[15]=u*x+s*f+I*F+a[15]),t},o.SIMD.translate=function(t,a,n){var r=SIMD.Float32x4.load(a,0),o=SIMD.Float32x4.load(a,4),l=SIMD.Float32x4.load(a,8),u=SIMD.Float32x4.load(a,12),e=SIMD.Float32x4(n[0],n[1],n[2],0);a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11]),r=SIMD.Float32x4.mul(r,SIMD.Float32x4.swizzle(e,0,0,0,0)),o=SIMD.Float32x4.mul(o,SIMD.Float32x4.swizzle(e,1,1,1,1)),l=SIMD.Float32x4.mul(l,SIMD.Float32x4.swizzle(e,2,2,2,2));var M=SIMD.Float32x4.add(r,SIMD.Float32x4.add(o,SIMD.Float32x4.add(l,u)));return SIMD.Float32x4.store(t,12,M),t},o.translate=r.USE_SIMD?o.SIMD.translate:o.scalar.translate,o.scalar.scale=function(t,a,n){var r=n[0],o=n[1],l=n[2];return t[0]=a[0]*r,t[1]=a[1]*r,t[2]=a[2]*r,t[3]=a[3]*r,t[4]=a[4]*o,t[5]=a[5]*o,t[6]=a[6]*o,t[7]=a[7]*o,t[8]=a[8]*l,t[9]=a[9]*l,t[10]=a[10]*l,t[11]=a[11]*l,t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.SIMD.scale=function(t,a,n){var r,o,l,u=SIMD.Float32x4(n[0],n[1],n[2],0);return r=SIMD.Float32x4.load(a,0),SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(r,SIMD.Float32x4.swizzle(u,0,0,0,0))),o=SIMD.Float32x4.load(a,4),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(o,SIMD.Float32x4.swizzle(u,1,1,1,1))),l=SIMD.Float32x4.load(a,8),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(l,SIMD.Float32x4.swizzle(u,2,2,2,2))),t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.scale=r.USE_SIMD?o.SIMD.scale:o.scalar.scale,o.rotate=function(t,a,n,o){var l,u,e,M,i,s,c,D,S,I,x,f,F,m,h,d,v,z,p,w,A,R,b,Y,q=o[0],y=o[1],E=o[2],g=Math.sqrt(q*q+y*y+E*E);return Math.abs(g)<r.EPSILON?null:(g=1/g,q*=g,y*=g,E*=g,l=Math.sin(n),u=Math.cos(n),e=1-u,M=a[0],i=a[1],s=a[2],c=a[3],D=a[4],S=a[5],I=a[6],x=a[7],f=a[8],F=a[9],m=a[10],h=a[11],d=q*q*e+u,v=y*q*e+E*l,z=E*q*e-y*l,p=q*y*e-E*l,w=y*y*e+u,A=E*y*e+q*l,R=q*E*e+y*l,b=y*E*e-q*l,Y=E*E*e+u,t[0]=M*d+D*v+f*z,t[1]=i*d+S*v+F*z,t[2]=s*d+I*v+m*z,t[3]=c*d+x*v+h*z,t[4]=M*p+D*w+f*A,t[5]=i*p+S*w+F*A,t[6]=s*p+I*w+m*A,t[7]=c*p+x*w+h*A,t[8]=M*R+D*b+f*Y,t[9]=i*R+S*b+F*Y,t[10]=s*R+I*b+m*Y,t[11]=c*R+x*b+h*Y,a!==t&&(t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t)},o.scalar.rotateX=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),l=a[4],u=a[5],e=a[6],M=a[7],i=a[8],s=a[9],c=a[10],D=a[11];return a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[4]=l*o+i*r,t[5]=u*o+s*r,t[6]=e*o+c*r,t[7]=M*o+D*r,t[8]=i*o-l*r,t[9]=s*o-u*r,t[10]=c*o-e*r,t[11]=D*o-M*r,t},o.SIMD.rotateX=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var l=SIMD.Float32x4.load(a,4),u=SIMD.Float32x4.load(a,8);return SIMD.Float32x4.store(t,4,SIMD.Float32x4.add(SIMD.Float32x4.mul(l,o),SIMD.Float32x4.mul(u,r))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,o),SIMD.Float32x4.mul(l,r))),t},o.rotateX=r.USE_SIMD?o.SIMD.rotateX:o.scalar.rotateX,o.scalar.rotateY=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),l=a[0],u=a[1],e=a[2],M=a[3],i=a[8],s=a[9],c=a[10],D=a[11];return a!==t&&(t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[0]=l*o-i*r,t[1]=u*o-s*r,t[2]=e*o-c*r,t[3]=M*o-D*r,t[8]=l*r+i*o,t[9]=u*r+s*o,t[10]=e*r+c*o,t[11]=M*r+D*o,t},o.SIMD.rotateY=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var l=SIMD.Float32x4.load(a,0),u=SIMD.Float32x4.load(a,8);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,o),SIMD.Float32x4.mul(u,r))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.add(SIMD.Float32x4.mul(l,r),SIMD.Float32x4.mul(u,o))),t},o.rotateY=r.USE_SIMD?o.SIMD.rotateY:o.scalar.rotateY,o.scalar.rotateZ=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),l=a[0],u=a[1],e=a[2],M=a[3],i=a[4],s=a[5],c=a[6],D=a[7];return a!==t&&(t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[0]=l*o+i*r,t[1]=u*o+s*r,t[2]=e*o+c*r,t[3]=M*o+D*r,t[4]=i*o-l*r,t[5]=s*o-u*r,t[6]=c*o-e*r,t[7]=D*o-M*r,t},o.SIMD.rotateZ=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var l=SIMD.Float32x4.load(a,0),u=SIMD.Float32x4.load(a,4);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.add(SIMD.Float32x4.mul(l,o),SIMD.Float32x4.mul(u,r))),SIMD.Float32x4.store(t,4,SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,o),SIMD.Float32x4.mul(l,r))),t},o.rotateZ=r.USE_SIMD?o.SIMD.rotateZ:o.scalar.rotateZ,o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=a[0],t[13]=a[1],t[14]=a[2],t[15]=1,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=a[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromRotation=function(t,a,n){var o,l,u,e=n[0],M=n[1],i=n[2],s=Math.sqrt(e*e+M*M+i*i);return Math.abs(s)<r.EPSILON?null:(s=1/s,e*=s,M*=s,i*=s,o=Math.sin(a),l=Math.cos(a),u=1-l,t[0]=e*e*u+l,t[1]=M*e*u+i*o,t[2]=i*e*u-M*o,t[3]=0,t[4]=e*M*u-i*o,t[5]=M*M*u+l,t[6]=i*M*u+e*o,t[7]=0,t[8]=e*i*u+M*o,t[9]=M*i*u-e*o,t[10]=i*i*u+l,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},o.fromXRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=n,t[7]=0,t[8]=0,t[9]=-n,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromYRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=0,t[2]=-n,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=n,t[9]=0,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromZRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=0,t[3]=0,t[4]=-n,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromRotationTranslation=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=r+r,M=o+o,i=l+l,s=r*e,c=r*M,D=r*i,S=o*M,I=o*i,x=l*i,f=u*e,F=u*M,m=u*i;return t[0]=1-(S+x),t[1]=c+m,t[2]=D-F,t[3]=0,t[4]=c-m,t[5]=1-(s+x),t[6]=I+f,t[7]=0,t[8]=D+F,t[9]=I-f,t[10]=1-(s+S),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},o.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],l=a[1],u=a[2],e=a[3],M=o+o,i=l+l,s=u+u,c=o*M,D=o*i,S=o*s,I=l*i,x=l*s,f=u*s,F=e*M,m=e*i,h=e*s,d=r[0],v=r[1],z=r[2];return t[0]=(1-(I+f))*d,t[1]=(D+h)*d,t[2]=(S-m)*d,t[3]=0,t[4]=(D-h)*v,t[5]=(1-(c+f))*v,t[6]=(x+F)*v,t[7]=0,t[8]=(S+m)*z,t[9]=(x-F)*z,t[10]=(1-(c+I))*z,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},o.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){var l=a[0],u=a[1],e=a[2],M=a[3],i=l+l,s=u+u,c=e+e,D=l*i,S=l*s,I=l*c,x=u*s,f=u*c,F=e*c,m=M*i,h=M*s,d=M*c,v=r[0],z=r[1],p=r[2],w=o[0],A=o[1],R=o[2];return t[0]=(1-(x+F))*v,t[1]=(S+d)*v,t[2]=(I-h)*v,t[3]=0,t[4]=(S-d)*z,t[5]=(1-(D+F))*z,t[6]=(f+m)*z,t[7]=0,t[8]=(I+h)*p,t[9]=(f-m)*p,t[10]=(1-(D+x))*p,t[11]=0,t[12]=n[0]+w-(t[0]*w+t[4]*A+t[8]*R),t[13]=n[1]+A-(t[1]*w+t[5]*A+t[9]*R),t[14]=n[2]+R-(t[2]*w+t[6]*A+t[10]*R),t[15]=1,t},o.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=n+n,e=r+r,M=o+o,i=n*u,s=r*u,c=r*e,D=o*u,S=o*e,I=o*M,x=l*u,f=l*e,F=l*M;return t[0]=1-c-I,t[1]=s+F,t[2]=D-f,t[3]=0,t[4]=s-F,t[5]=1-i-I,t[6]=S+x,t[7]=0,t[8]=D+f,t[9]=S-x,t[10]=1-i-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.frustum=function(t,a,n,r,o,l,u){var e=1/(n-a),M=1/(o-r),i=1/(l-u);return t[0]=2*l*e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*l*M,t[6]=0,t[7]=0,t[8]=(n+a)*e,t[9]=(o+r)*M,t[10]=(u+l)*i,t[11]=-1,t[12]=0,t[13]=0,t[14]=u*l*2*i,t[15]=0,t},o.perspective=function(t,a,n,r,o){var l=1/Math.tan(a/2),u=1/(r-o);return t[0]=l/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(o+r)*u,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*o*r*u,t[15]=0,t},o.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),l=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),e=Math.tan(a.rightDegrees*Math.PI/180),M=2/(u+e),i=2/(o+l);return t[0]=M,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=-((u-e)*M*.5),t[9]=(o-l)*i*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},o.ortho=function(t,a,n,r,o,l,u){var e=1/(a-n),M=1/(r-o),i=1/(l-u);return t[0]=-2*e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*M,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*i,t[11]=0,t[12]=(a+n)*e,t[13]=(o+r)*M,t[14]=(u+l)*i,t[15]=1,t},o.lookAt=function(t,a,n,l){var u,e,M,i,s,c,D,S,I,x,f=a[0],F=a[1],m=a[2],h=l[0],d=l[1],v=l[2],z=n[0],p=n[1],w=n[2];return Math.abs(f-z)<r.EPSILON&&Math.abs(F-p)<r.EPSILON&&Math.abs(m-w)<r.EPSILON?o.identity(t):(D=f-z,S=F-p,I=m-w,x=1/Math.sqrt(D*D+S*S+I*I),D*=x,S*=x,I*=x,u=d*I-v*S,e=v*D-h*I,M=h*S-d*D,x=Math.sqrt(u*u+e*e+M*M),x?(x=1/x,u*=x,e*=x,M*=x):(u=0,e=0,M=0),i=S*M-I*e,s=I*u-D*M,c=D*e-S*u,x=Math.sqrt(i*i+s*s+c*c),x?(x=1/x,i*=x,s*=x,c*=x):(i=0,s=0,c=0),t[0]=u,t[1]=i,t[2]=D,t[3]=0,t[4]=e,t[5]=s,t[6]=S,t[7]=0,t[8]=M,t[9]=c,t[10]=I,t[11]=0,t[12]=-(u*f+e*F+M*m),t[13]=-(i*f+s*F+c*m),t[14]=-(D*f+S*F+I*m),t[15]=1,t)},o.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))},t.exports=o},function(t,a,n){var r=n(1),o=n(4),l=n(7),u=n(8),e={};e.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},e.rotationTo=function(){var t=l.create(),a=l.fromValues(1,0,0),n=l.fromValues(0,1,0);return function(r,o,u){var M=l.dot(o,u);return-.999999>M?(l.cross(t,a,o),l.length(t)<1e-6&&l.cross(t,n,o),l.normalize(t,t),e.setAxisAngle(r,t,Math.PI),r):M>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(l.cross(t,o,u),r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=1+M,e.normalize(r,r))}}(),e.setAxes=function(){var t=o.create();return function(a,n,r,o){return t[0]=r[0],t[3]=r[1],t[6]=r[2],t[1]=o[0],t[4]=o[1],t[7]=o[2],t[2]=-n[0],t[5]=-n[1],t[8]=-n[2],e.normalize(a,e.fromMat3(a,t))}}(),e.clone=u.clone,e.fromValues=u.fromValues,e.copy=u.copy,e.set=u.set,e.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},e.setAxisAngle=function(t,a,n){n=.5*n;var r=Math.sin(n);return t[0]=r*a[0],t[1]=r*a[1],t[2]=r*a[2],t[3]=Math.cos(n),t},e.add=u.add,e.multiply=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3],e=n[0],M=n[1],i=n[2],s=n[3];return t[0]=r*s+u*e+o*i-l*M,t[1]=o*s+u*M+l*e-r*i,t[2]=l*s+u*i+r*M-o*e,t[3]=u*s-r*e-o*M-l*i,t},e.mul=e.multiply,e.scale=u.scale,e.rotateX=function(t,a,n){n*=.5;var r=a[0],o=a[1],l=a[2],u=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+u*e,t[1]=o*M+l*e,t[2]=l*M-o*e,t[3]=u*M-r*e,t},e.rotateY=function(t,a,n){n*=.5;var r=a[0],o=a[1],l=a[2],u=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M-l*e,t[1]=o*M+u*e,t[2]=l*M+r*e,t[3]=u*M-o*e,t},e.rotateZ=function(t,a,n){n*=.5;var r=a[0],o=a[1],l=a[2],u=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+o*e,t[1]=o*M-r*e,t[2]=l*M+u*e,t[3]=u*M-l*e,t},e.calculateW=function(t,a){var n=a[0],r=a[1],o=a[2];return t[0]=n,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-n*n-r*r-o*o)),t},e.dot=u.dot,e.lerp=u.lerp,e.slerp=function(t,a,n,r){var o,l,u,e,M,i=a[0],s=a[1],c=a[2],D=a[3],S=n[0],I=n[1],x=n[2],f=n[3];return l=i*S+s*I+c*x+D*f,0>l&&(l=-l,S=-S,I=-I,x=-x,f=-f),1-l>1e-6?(o=Math.acos(l),u=Math.sin(o),e=Math.sin((1-r)*o)/u,M=Math.sin(r*o)/u):(e=1-r,M=r),t[0]=e*i+M*S,t[1]=e*s+M*I,t[2]=e*c+M*x,t[3]=e*D+M*f,t},e.sqlerp=function(){var t=e.create(),a=e.create();return function(n,r,o,l,u,M){return e.slerp(t,r,u,M),e.slerp(a,o,l,M),e.slerp(n,t,a,2*M*(1-M)),n}}(),e.invert=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=n*n+r*r+o*o+l*l,e=u?1/u:0;
+-return t[0]=-n*e,t[1]=-r*e,t[2]=-o*e,t[3]=l*e,t},e.conjugate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t[3]=a[3],t},e.length=u.length,e.len=e.length,e.squaredLength=u.squaredLength,e.sqrLen=e.squaredLength,e.normalize=u.normalize,e.fromMat3=function(t,a){var n,r=a[0]+a[4]+a[8];if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(a[5]-a[7])*n,t[1]=(a[6]-a[2])*n,t[2]=(a[1]-a[3])*n;else{var o=0;a[4]>a[0]&&(o=1),a[8]>a[3*o+o]&&(o=2);var l=(o+1)%3,u=(o+2)%3;n=Math.sqrt(a[3*o+o]-a[3*l+l]-a[3*u+u]+1),t[o]=.5*n,n=.5/n,t[3]=(a[3*l+u]-a[3*u+l])*n,t[l]=(a[3*l+o]+a[3*o+l])*n,t[u]=(a[3*u+o]+a[3*o+u])*n}return t},e.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=e},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(3);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a},o.fromValues=function(t,a,n){var o=new r.ARRAY_TYPE(3);return o[0]=t,o[1]=a,o[2]=n,o},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t},o.set=function(t,a,n,r){return t[0]=a,t[1]=n,t[2]=r,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t[2]=a[2]*n[2],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t[2]=a[2]/n[2],t},o.div=o.divide,o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t[2]=Math.min(a[2],n[2]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t[2]=Math.max(a[2],n[2]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2];return Math.sqrt(n*n+r*r+o*o)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2];return n*n+r*r+o*o},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1],r=t[2];return Math.sqrt(a*a+n*n+r*r)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1],r=t[2];return a*a+n*n+r*r},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t[2]=1/a[2],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=a[2],l=n*n+r*r+o*o;return l>0&&(l=1/Math.sqrt(l),t[0]=a[0]*l,t[1]=a[1]*l,t[2]=a[2]*l),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]+t[2]*a[2]},o.cross=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=n[0],e=n[1],M=n[2];return t[0]=o*M-l*e,t[1]=l*u-r*M,t[2]=r*e-o*u,t},o.lerp=function(t,a,n,r){var o=a[0],l=a[1],u=a[2];return t[0]=o+r*(n[0]-o),t[1]=l+r*(n[1]-l),t[2]=u+r*(n[2]-u),t},o.hermite=function(t,a,n,r,o,l){var u=l*l,e=u*(2*l-3)+1,M=u*(l-2)+l,i=u*(l-1),s=u*(3-2*l);return t[0]=a[0]*e+n[0]*M+r[0]*i+o[0]*s,t[1]=a[1]*e+n[1]*M+r[1]*i+o[1]*s,t[2]=a[2]*e+n[2]*M+r[2]*i+o[2]*s,t},o.bezier=function(t,a,n,r,o,l){var u=1-l,e=u*u,M=l*l,i=e*u,s=3*l*e,c=3*M*u,D=M*l;return t[0]=a[0]*i+n[0]*s+r[0]*c+o[0]*D,t[1]=a[1]*i+n[1]*s+r[1]*c+o[1]*D,t[2]=a[2]*i+n[2]*s+r[2]*c+o[2]*D,t},o.random=function(t,a){a=a||1;var n=2*r.RANDOM()*Math.PI,o=2*r.RANDOM()-1,l=Math.sqrt(1-o*o)*a;return t[0]=Math.cos(n)*l,t[1]=Math.sin(n)*l,t[2]=o*a,t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=n[3]*r+n[7]*o+n[11]*l+n[15];return u=u||1,t[0]=(n[0]*r+n[4]*o+n[8]*l+n[12])/u,t[1]=(n[1]*r+n[5]*o+n[9]*l+n[13])/u,t[2]=(n[2]*r+n[6]*o+n[10]*l+n[14])/u,t},o.transformMat3=function(t,a,n){var r=a[0],o=a[1],l=a[2];return t[0]=r*n[0]+o*n[3]+l*n[6],t[1]=r*n[1]+o*n[4]+l*n[7],t[2]=r*n[2]+o*n[5]+l*n[8],t},o.transformQuat=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=n[0],e=n[1],M=n[2],i=n[3],s=i*r+e*l-M*o,c=i*o+M*r-u*l,D=i*l+u*o-e*r,S=-u*r-e*o-M*l;return t[0]=s*i+S*-u+c*-M-D*-e,t[1]=c*i+S*-e+D*-u-s*-M,t[2]=D*i+S*-M+s*-e-c*-u,t},o.rotateX=function(t,a,n,r){var o=[],l=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],l[0]=o[0],l[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),l[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=l[0]+n[0],t[1]=l[1]+n[1],t[2]=l[2]+n[2],t},o.rotateY=function(t,a,n,r){var o=[],l=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],l[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),l[1]=o[1],l[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=l[0]+n[0],t[1]=l[1]+n[1],t[2]=l[2]+n[2],t},o.rotateZ=function(t,a,n,r){var o=[],l=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],l[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),l[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),l[2]=o[2],t[0]=l[0]+n[0],t[1]=l[1]+n[1],t[2]=l[2]+n[2],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,l,u){var e,M;for(n||(n=3),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;M>e;e+=n)t[0]=a[e],t[1]=a[e+1],t[2]=a[e+2],l(t,t,u),a[e]=t[0],a[e+1]=t[1],a[e+2]=t[2];return a}}(),o.angle=function(t,a){var n=o.fromValues(t[0],t[1],t[2]),r=o.fromValues(a[0],a[1],a[2]);o.normalize(n,n),o.normalize(r,r);var l=o.dot(n,r);return l>1?0:Math.acos(l)},o.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(4);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a},o.fromValues=function(t,a,n,o){var l=new r.ARRAY_TYPE(4);return l[0]=t,l[1]=a,l[2]=n,l[3]=o,l},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t},o.set=function(t,a,n,r,o){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t[2]=a[2]*n[2],t[3]=a[3]*n[3],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t[2]=a[2]/n[2],t[3]=a[3]/n[3],t},o.div=o.divide,o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t[2]=Math.min(a[2],n[2]),t[3]=Math.min(a[3],n[3]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t[2]=Math.max(a[2],n[2]),t[3]=Math.max(a[3],n[3]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2],l=a[3]-t[3];return Math.sqrt(n*n+r*r+o*o+l*l)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2],l=a[3]-t[3];return n*n+r*r+o*o+l*l},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1],r=t[2],o=t[3];return Math.sqrt(a*a+n*n+r*r+o*o)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1],r=t[2],o=t[3];return a*a+n*n+r*r+o*o},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t[3]=-a[3],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t[2]=1/a[2],t[3]=1/a[3],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=a[2],l=a[3],u=n*n+r*r+o*o+l*l;return u>0&&(u=1/Math.sqrt(u),t[0]=n*u,t[1]=r*u,t[2]=o*u,t[3]=l*u),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]+t[2]*a[2]+t[3]*a[3]},o.lerp=function(t,a,n,r){var o=a[0],l=a[1],u=a[2],e=a[3];return t[0]=o+r*(n[0]-o),t[1]=l+r*(n[1]-l),t[2]=u+r*(n[2]-u),t[3]=e+r*(n[3]-e),t},o.random=function(t,a){return a=a||1,t[0]=r.RANDOM(),t[1]=r.RANDOM(),t[2]=r.RANDOM(),t[3]=r.RANDOM(),o.normalize(t,t),o.scale(t,t,a),t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=a[3];return t[0]=n[0]*r+n[4]*o+n[8]*l+n[12]*u,t[1]=n[1]*r+n[5]*o+n[9]*l+n[13]*u,t[2]=n[2]*r+n[6]*o+n[10]*l+n[14]*u,t[3]=n[3]*r+n[7]*o+n[11]*l+n[15]*u,t},o.transformQuat=function(t,a,n){var r=a[0],o=a[1],l=a[2],u=n[0],e=n[1],M=n[2],i=n[3],s=i*r+e*l-M*o,c=i*o+M*r-u*l,D=i*l+u*o-e*r,S=-u*r-e*o-M*l;return t[0]=s*i+S*-u+c*-M-D*-e,t[1]=c*i+S*-e+D*-u-s*-M,t[2]=D*i+S*-M+s*-e-c*-u,t[3]=a[3],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,l,u){var e,M;for(n||(n=4),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;M>e;e+=n)t[0]=a[e],t[1]=a[e+1],t[2]=a[e+2],t[3]=a[e+3],l(t,t,u),a[e]=t[0],a[e+1]=t[1],a[e+2]=t[2],a[e+3]=t[3];return a}}(),o.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(2);return a[0]=t[0],a[1]=t[1],a},o.fromValues=function(t,a){var n=new r.ARRAY_TYPE(2);return n[0]=t,n[1]=a,n},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t},o.set=function(t,a,n){return t[0]=a,t[1]=n,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t},o.div=o.divide,o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1];return Math.sqrt(n*n+r*r)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1];return n*n+r*r},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1];return Math.sqrt(a*a+n*n)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1];return a*a+n*n},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=n*n+r*r;return o>0&&(o=1/Math.sqrt(o),t[0]=a[0]*o,t[1]=a[1]*o),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]},o.cross=function(t,a,n){var r=a[0]*n[1]-a[1]*n[0];return t[0]=t[1]=0,t[2]=r,t},o.lerp=function(t,a,n,r){var o=a[0],l=a[1];return t[0]=o+r*(n[0]-o),t[1]=l+r*(n[1]-l),t},o.random=function(t,a){a=a||1;var n=2*r.RANDOM()*Math.PI;return t[0]=Math.cos(n)*a,t[1]=Math.sin(n)*a,t},o.transformMat2=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[2]*o,t[1]=n[1]*r+n[3]*o,t},o.transformMat2d=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[2]*o+n[4],t[1]=n[1]*r+n[3]*o+n[5],t},o.transformMat3=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[3]*o+n[6],t[1]=n[1]*r+n[4]*o+n[7],t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[4]*o+n[12],t[1]=n[1]*r+n[5]*o+n[13],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,l,u){var e,M;for(n||(n=2),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;M>e;e+=n)t[0]=a[e],t[1]=a[e+1],l(t,t,u),a[e]=t[0],a[e+1]=t[1];return a}}(),o.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},t.exports=o}])});/*! Hammer.JS - v2.0.4 - 2014-09-28
+- * http://hammerjs.github.io/
+- *
+- * Copyright (c) 2014 Jorik Tangelder;
+- * Licensed under the MIT license */
+-!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function i(a,b){return h(a,b,!0)}function j(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}function k(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){return typeof a==kb?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}function n(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}function p(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){return a.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}function u(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ib.length;){if(c=ib[g],e=c?c+f:b,e in a)return e;g++}return d}function w(){return ob++}function x(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}function z(a){var b,c=a.options.inputClass;return new(b=c?c:rb?N:sb?Q:qb?S:M)(a,A)}function A(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&yb&&d-e===0,g=b&(Ab|Bb)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function B(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=nb(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===yb||f.eventType===Ab)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Bb&&(i>xb||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=mb(l.x)>mb(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:lb(a.pointers[c].clientX),clientY:lb(a.pointers[c].clientY)},c++;return{timeStamp:nb(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}function F(a){var b=a.length;if(1===b)return{x:lb(a[0].clientX),y:lb(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:lb(c/b),y:lb(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Cb:mb(a)>=mb(b)?a>0?Db:Eb:b>0?Fb:Gb}function I(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],Lb)-J(a[1],a[0],Lb)}function L(a,b){return I(b[0],b[1],Lb)/I(a[0],a[1],Lb)}function M(){this.evEl=Nb,this.evWin=Ob,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Rb,this.evWin=Sb,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ub,this.evWin=Vb,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Ab|Bb)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xb,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(yb|zb)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===yb)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ab|Bb)&&delete d[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void 0}function S(){y.apply(this,arguments);var a=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=new M(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}function U(a){if(q(a,bc))return bc;var b=q(a,cc),c=q(a,dc);return b&&c?cc+" "+dc:b||c?b?cc:dc:q(a,ac)?ac:_b}function V(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=ec,this.simultaneous={},this.requireFail=[]}function W(a){return a&jc?"cancel":a&hc?"end":a&gc?"move":a&fc?"start":""}function X(a){return a==Gb?"down":a==Fb?"up":a==Db?"left":a==Eb?"right":""}function Y(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function $(){Z.apply(this,arguments),this.pX=null,this.pY=null}function _(){Z.apply(this,arguments)}function ab(){V.apply(this,arguments),this._timer=null,this._input=null}function bb(){Z.apply(this,arguments)}function cb(){Z.apply(this,arguments)}function db(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function eb(a,b){return b=b||{},b.recognizers=m(b.recognizers,eb.defaults.preset),new fb(a,b)}function fb(a,b){b=b||{},this.options=i(b,eb.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=new T(this,this.options.touchAction),gb(this,!0),g(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function gb(a,b){var c=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}function hb(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ib=["","webkit","moz","MS","ms","o"],jb=b.createElement("div"),kb="function",lb=Math.round,mb=Math.abs,nb=Date.now,ob=1,pb=/mobile|tablet|ip(ad|hone|od)|android/i,qb="ontouchstart"in a,rb=v(a,"PointerEvent")!==d,sb=qb&&pb.test(navigator.userAgent),tb="touch",ub="pen",vb="mouse",wb="kinect",xb=25,yb=1,zb=2,Ab=4,Bb=8,Cb=1,Db=2,Eb=4,Fb=8,Gb=16,Hb=Db|Eb,Ib=Fb|Gb,Jb=Hb|Ib,Kb=["x","y"],Lb=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};var Mb={mousedown:yb,mousemove:zb,mouseup:Ab},Nb="mousedown",Ob="mousemove mouseup";j(M,y,{handler:function(a){var b=Mb[a.type];b&yb&&0===a.button&&(this.pressed=!0),b&zb&&1!==a.which&&(b=Ab),this.pressed&&this.allow&&(b&Ab&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:vb,srcEvent:a}))}});var Pb={pointerdown:yb,pointermove:zb,pointerup:Ab,pointercancel:Bb,pointerout:Bb},Qb={2:tb,3:ub,4:vb,5:wb},Rb="pointerdown",Sb="pointermove pointerup pointercancel";a.MSPointerEvent&&(Rb="MSPointerDown",Sb="MSPointerMove MSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pb[d],f=Qb[a.pointerType]||a.pointerType,g=f==tb,h=s(b,a.pointerId,"pointerId");e&yb&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ab|Bb)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Tb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Ub="touchstart",Vb="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Tb[a.type];if(b===yb&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Ab|Bb)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}});var Wb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Xb="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wb[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==tb,e=c.pointerType==vb;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Ab|Bb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Yb=v(jb.style,"touchAction"),Zb=Yb!==d,$b="compute",_b="auto",ac="manipulation",bc="none",cc="pan-x",dc="pan-y";T.prototype={set:function(a){a==$b&&(a=this.compute()),Zb&&(this.manager.element.style[Yb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Zb){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bc),f=q(d,dc),g=q(d,cc);return e||f&&c&Hb||g&&c&Ib?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var ec=1,fc=2,gc=4,hc=8,ic=hc,jc=16,kc=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hc>d&&b(!0),b(),d>=hc&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kc)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kc|ec)))return!1;a++}return!0},recognize:function(a){var b=h({},a);return l(this.options.enable,[this,b])?(this.state&(ic|jc|kc)&&(this.state=ec),this.state=this.process(b),void(this.state&(fc|gc|hc|jc)&&this.tryEmit(b))):(this.reset(),void(this.state=kc))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fc|gc),e=this.attrTest(a);return d&&(c&Bb||!e)?b|jc:d||e?c&Ab?b|hc:b&fc?b|gc:fc:kc}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Jb},getTouchAction:function(){var a=this.options.direction,b=[];return a&Hb&&b.push(dc),a&Ib&&b.push(cc),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Hb?(e=0===f?Cb:0>f?Db:Eb,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Cb:0>g?Fb:Gb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fc||!(this.state&fc)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fc)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(ab,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_b]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ab|Bb)&&!f)this.reset();else if(a.eventType&yb)this.reset(),this._timer=e(function(){this.state=ic,this.tryEmit()},b.time,this);else if(a.eventType&Ab)return ic;return kc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ic&&(a&&a.eventType&Ab?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=nb(),this.manager.emit(this.options.event,this._input)))}}),j(bb,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fc)}}),j(cb,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Hb|Ib,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Hb|Ib)?b=a.velocity:c&Hb?b=a.velocityX:c&Ib&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&mb(b)>this.options.velocity&&a.eventType&Ab},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(db,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ac]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&yb&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ab)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=ic,this.tryEmit()},b.interval,this),fc):ic}return kc},failTimeout:function(){return this._timer=e(function(){this.state=kc},this.options.interval,this),kc},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ic&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),eb.VERSION="2.0.4",eb.defaults={domEvents:!1,touchAction:$b,enable:!0,inputTarget:null,inputClass:null,preset:[[bb,{enable:!1}],[_,{enable:!1},["rotate"]],[cb,{direction:Hb}],[$,{direction:Hb},["swipe"]],[db],[db,{event:"doubletap",taps:2},["tap"]],[ab]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var lc=1,mc=2;fb.prototype={set:function(a){return h(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mc:lc},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ic)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===mc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fc|gc|hc)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof V)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&hb(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&gb(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(eb,{INPUT_START:yb,INPUT_MOVE:zb,INPUT_END:Ab,INPUT_CANCEL:Bb,STATE_POSSIBLE:ec,STATE_BEGAN:fc,STATE_CHANGED:gc,STATE_ENDED:hc,STATE_RECOGNIZED:ic,STATE_CANCELLED:jc,STATE_FAILED:kc,DIRECTION_NONE:Cb,DIRECTION_LEFT:Db,DIRECTION_RIGHT:Eb,DIRECTION_UP:Fb,DIRECTION_DOWN:Gb,DIRECTION_HORIZONTAL:Hb,DIRECTION_VERTICAL:Ib,DIRECTION_ALL:Jb,Manager:fb,Input:y,TouchAction:T,TouchInput:Q,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:db,Pan:$,Swipe:cb,Pinch:_,Rotate:bb,Press:ab,on:n,off:o,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeof define==kb&&define.amd?define(function(){return eb}):"undefined"!=typeof module&&module.exports?module.exports=eb:a[c]=eb}(window,document,"Hammer");
+-/**
+-* JSONfn - javascript (both node.js and browser) plugin to stringify, 
+-*          parse and clone objects with Functions, Regexp and Date.
+-*  
+-* Version - 0.60.00
+-* Copyright (c) 2012 - 2015 Vadim Kiryukhin
+-* vkiryukhin @ gmail.com
+-* http://www.eslinstructor.net/jsonfn/
+-* 
+-* Licensed under the MIT license ( http://www.opensource.org/licenses/mit-license.php )
+-*
+-*   USAGE:
+-*     browser:
+-*         JSONfn.stringify(obj);
+-*         JSONfn.parse(str[, date2obj]);
+-*         JSONfn.clone(obj[, date2obj]);
+-*
+-*     nodejs:
+-*       var JSONfn = require('path/to/json-fn');
+-*       JSONfn.stringify(obj);
+-*       JSONfn.parse(str[, date2obj]);
+-*       JSONfn.clone(obj[, date2obj]);
+-*
+-*
+-*     @obj      -  Object;
+-*     @str      -  String, which is returned by JSONfn.stringify() function; 
+-*     @date2obj - Boolean (optional); if true, date string in ISO8061 format
+-*                 is converted into a Date object; otherwise, it is left as a String.
+-*/
+-
+-"use strict";
+-
+-(function (exports) {
+-
+-  exports.stringify = function (obj) {
+-
+-    return JSON.stringify(obj, function (key, value) {
+-      if (value instanceof Function || typeof value == 'function') {
+-        return value.toString();
+-      }
+-      if (value instanceof RegExp) {
+-        return '_PxEgEr_' + value;
+-      }
+-      return value;
+-    });
+-  };
+-
+-  exports.parse = function (str, date2obj) {
+-
+-    var iso8061 = date2obj ? /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/ : false;
+-
+-    return JSON.parse(str, function (key, value) {
+-      var prefix;
+-
+-      if (typeof value != 'string') {
+-        return value;
+-      }
+-      if (value.length < 8) {
+-        return value;
+-      }
+-
+-      prefix = value.substring(0, 8);
+-
+-      if (iso8061 && value.match(iso8061)) {
+-        return new Date(value);
+-      }
+-      if (prefix === 'function') {
+-        return eval('(' + value + ')');
+-      }
+-      if (prefix === '_PxEgEr_') {
+-        return eval(value.slice(8));
+-      }
+-
+-      return value;
+-    });
+-  };
+-
+-  exports.clone = function (obj, date2obj) {
+-    return exports.parse(exports.stringify(obj), date2obj);
+-  };
+-
+-}(typeof exports === 'undefined' ? (window.JSONfn = {}) : exports));
+-
+-
+-(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q={}.hasOwnProperty,r=function(a,b){function c(){this.constructor=a}for(var d in b)q.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};!function(){var a,b,c,d,e,f,g;for(g=["ms","moz","webkit","o"],c=0,e=g.length;e>c&&(f=g[c],!window.requestAnimationFrame);c++)window.requestAnimationFrame=window[f+"RequestAnimationFrame"],window.cancelAnimationFrame=window[f+"CancelAnimationFrame"]||window[f+"CancelRequestAnimationFrame"];return a=null,d=0,b={},requestAnimationFrame?window.cancelAnimationFrame?void 0:(a=window.requestAnimationFrame,window.requestAnimationFrame=function(c,e){var f;return f=++d,a(function(){return b[f]?void 0:c()},e),f},window.cancelAnimationFrame=function(a){return b[a]=!0}):(window.requestAnimationFrame=function(a,b){var c,d,e,f;return c=(new Date).getTime(),f=Math.max(0,16-(c-e)),d=window.setTimeout(function(){return a(c+f)},f),e=c+f,d},window.cancelAnimationFrame=function(a){return clearTimeout(a)})}(),String.prototype.hashCode=function(){var a,b,c,d,e;if(b=0,0===this.length)return b;for(c=d=0,e=this.length;e>=0?e>d:d>e;c=e>=0?++d:--d)a=this.charCodeAt(c),b=(b<<5)-b+a,b&=b;return b},o=function(a){var b,c;for(b=Math.floor(a/3600),c=Math.floor((a-3600*b)/60),a-=3600*b+60*c,a+="",c+="";c.length<2;)c="0"+c;for(;a.length<2;)a="0"+a;return b=b?b+":":"",b+c+":"+a},m=function(a){return k(a.toFixed(0))},p=function(a,b){var c,d;for(c in b)q.call(b,c)&&(d=b[c],a[c]=d);return a},n=function(a,b){var c,d,e;d={};for(c in a)q.call(a,c)&&(e=a[c],d[c]=e);for(c in b)q.call(b,c)&&(e=b[c],d[c]=e);return d},k=function(a){var b,c,d,e;for(a+="",c=a.split("."),d=c[0],e="",c.length>1&&(e="."+c[1]),b=/(\d+)(\d{3})/;b.test(d);)d=d.replace(b,"$1,$2");return d+e},l=function(a){return"#"===a.charAt(0)?a.substring(1,7):a},j=function(){function a(a,b){null==a&&(a=!0),this.clear=null!=b?b:!0,a&&AnimationUpdater.add(this)}return a.prototype.animationSpeed=32,a.prototype.update=function(a){var b;return null==a&&(a=!1),a||this.displayedValue!==this.value?(this.ctx&&this.clear&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),b=this.value-this.displayedValue,Math.abs(b/this.animationSpeed)<=.001?this.displayedValue=this.value:this.displayedValue=this.displayedValue+b/this.animationSpeed,this.render(),!0):!1},a}(),e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return r(b,a),b.prototype.displayScale=1,b.prototype.setTextField=function(a){return this.textField=a instanceof i?a:new i(a)},b.prototype.setMinValue=function(a,b){var c,d,e,f,g;if(this.minValue=a,null==b&&(b=!0),b){for(this.displayedValue=this.minValue,f=this.gp||[],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.displayedValue=this.minValue);return g}},b.prototype.setOptions=function(a){return null==a&&(a=null),this.options=n(this.options,a),this.textField&&(this.textField.el.style.fontSize=a.fontSize+"px"),this.options.angle>.5&&(this.gauge.options.angle=.5),this.configDisplayScale(),this},b.prototype.configDisplayScale=function(){var a,b,c,d,e;return d=this.displayScale,this.options.highDpiSupport===!1?delete this.displayScale:(b=window.devicePixelRatio||1,a=this.ctx.webkitBackingStorePixelRatio||this.ctx.mozBackingStorePixelRatio||this.ctx.msBackingStorePixelRatio||this.ctx.oBackingStorePixelRatio||this.ctx.backingStorePixelRatio||1,this.displayScale=b/a),this.displayScale!==d&&(e=this.canvas.G__width||this.canvas.width,c=this.canvas.G__height||this.canvas.height,this.canvas.width=e*this.displayScale,this.canvas.height=c*this.displayScale,this.canvas.style.width=e+"px",this.canvas.style.height=c+"px",this.canvas.G__width=e,this.canvas.G__height=c),this},b}(j),i=function(){function a(a){this.el=a}return a.prototype.render=function(a){return this.el.innerHTML=m(a.displayedValue)},a}(),a=function(a){function b(a,b){this.elem=a,this.text=null!=b?b:!1,this.value=1*this.elem.innerHTML,this.text&&(this.value=0)}return r(b,a),b.prototype.displayedValue=0,b.prototype.value=0,b.prototype.setVal=function(a){return this.value=1*a},b.prototype.render=function(){var a;return a=this.text?o(this.displayedValue.toFixed(0)):k(m(this.displayedValue)),this.elem.innerHTML=a},b}(j),b={create:function(b){var c,d,e,f;for(f=[],d=0,e=b.length;e>d;d++)c=b[d],f.push(new a(c));return f}},h=function(a){function b(a){this.gauge=a,this.ctx=this.gauge.ctx,this.canvas=this.gauge.canvas,b.__super__.constructor.call(this,!1,!1),this.setOptions()}return r(b,a),b.prototype.displayedValue=0,b.prototype.value=0,b.prototype.options={strokeWidth:.035,length:.1,color:"#000000"},b.prototype.setOptions=function(a){return null==a&&(a=null),p(this.options,a),this.length=this.canvas.height*this.options.length,this.strokeWidth=this.canvas.height*this.options.strokeWidth,this.maxValue=this.gauge.maxValue,this.minValue=this.gauge.minValue,this.animationSpeed=this.gauge.animationSpeed,this.options.angle=this.gauge.options.angle},b.prototype.render=function(){var a,b,c,d,e,f,g,h,i;return a=this.gauge.getAngle.call(this,this.displayedValue),b=this.canvas.width/2,c=.9*this.canvas.height,h=Math.round(b+this.length*Math.cos(a)),i=Math.round(c+this.length*Math.sin(a)),f=Math.round(b+this.strokeWidth*Math.cos(a-Math.PI/2)),g=Math.round(c+this.strokeWidth*Math.sin(a-Math.PI/2)),d=Math.round(b+this.strokeWidth*Math.cos(a+Math.PI/2)),e=Math.round(c+this.strokeWidth*Math.sin(a+Math.PI/2)),this.ctx.fillStyle=this.options.color,this.ctx.beginPath(),this.ctx.arc(b,c,this.strokeWidth,0,2*Math.PI,!0),this.ctx.fill(),this.ctx.beginPath(),this.ctx.moveTo(f,g),this.ctx.lineTo(h,i),this.ctx.lineTo(d,e),this.ctx.fill()},b}(j),c=function(){function a(a){this.elem=a}return a.prototype.updateValues=function(a){return this.value=a[0],this.maxValue=a[1],this.avgValue=a[2],this.render()},a.prototype.render=function(){var a,b;return this.textField&&this.textField.text(m(this.value)),0===this.maxValue&&(this.maxValue=2*this.avgValue),b=this.value/this.maxValue*100,a=this.avgValue/this.maxValue*100,$(".bar-value",this.elem).css({width:b+"%"}),$(".typical-value",this.elem).css({width:a+"%"})},a}(),g=function(a){function b(a){this.canvas=a,b.__super__.constructor.call(this),this.percentColors=null,"undefined"!=typeof G_vmlCanvasManager&&(this.canvas=window.G_vmlCanvasManager.initElement(this.canvas)),this.ctx=this.canvas.getContext("2d"),this.gp=[new h(this)],this.setOptions(),this.render()}return r(b,a),b.prototype.elem=null,b.prototype.value=[20],b.prototype.maxValue=80,b.prototype.minValue=0,b.prototype.displayedAngle=0,b.prototype.displayedValue=0,b.prototype.lineWidth=40,b.prototype.paddingBottom=.1,b.prototype.percentColors=null,b.prototype.options={colorStart:"#6fadcf",colorStop:void 0,gradientType:0,strokeColor:"#e0e0e0",pointer:{length:.8,strokeWidth:.035},angle:.15,lineWidth:.44,fontSize:40,limitMax:!1},b.prototype.setOptions=function(a){var c,d,e,f;for(null==a&&(a=null),b.__super__.setOptions.call(this,a),this.configPercentColors(),this.lineWidth=this.canvas.height*(1-this.paddingBottom)*this.options.lineWidth,this.radius=this.canvas.height*(1-this.paddingBottom)-this.lineWidth,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.render(),f=this.gp,d=0,e=f.length;e>d;d++)c=f[d],c.setOptions(this.options.pointer),c.render();return this},b.prototype.configPercentColors=function(){var a,b,c,d,e,f,g;if(this.percentColors=null,void 0!==this.options.percentColors){for(this.percentColors=new Array,f=[],c=d=0,e=this.options.percentColors.length-1;e>=0?e>=d:d>=e;c=e>=0?++d:--d)g=parseInt(l(this.options.percentColors[c][1]).substring(0,2),16),b=parseInt(l(this.options.percentColors[c][1]).substring(2,4),16),a=parseInt(l(this.options.percentColors[c][1]).substring(4,6),16),f.push(this.percentColors[c]={pct:this.options.percentColors[c][0],color:{r:g,g:b,b:a}});return f}},b.prototype.set=function(a){var b,c,d,e,f,g,i;if(a instanceof Array||(a=[a]),a.length>this.gp.length)for(b=c=0,g=a.length-this.gp.length;g>=0?g>c:c>g;b=g>=0?++c:--c)this.gp.push(new h(this));for(b=0,f=!1,d=0,e=a.length;e>d;d++)i=a[d],i>this.maxValue&&(this.maxValue=1.1*this.value,f=!0),this.gp[b].value=i,this.gp[b++].setOptions({maxValue:this.maxValue,angle:this.options.angle});return this.value=a[a.length-1],f&&this.options.limitMax?void 0:AnimationUpdater.run()},b.prototype.getAngle=function(a){return(1+this.options.angle)*Math.PI+(a-this.minValue)/(this.maxValue-this.minValue)*(1-2*this.options.angle)*Math.PI},b.prototype.getColorForPercentage=function(a,b){var c,d,e,f,g,h,i;if(0===a)c=this.percentColors[0].color;else for(c=this.percentColors[this.percentColors.length-1].color,e=f=0,h=this.percentColors.length-1;h>=0?h>=f:f>=h;e=h>=0?++f:--f)if(a<=this.percentColors[e].pct){b===!0?(i=this.percentColors[e-1],d=this.percentColors[e],g=(a-i.pct)/(d.pct-i.pct),c={r:Math.floor(i.color.r*(1-g)+d.color.r*g),g:Math.floor(i.color.g*(1-g)+d.color.g*g),b:Math.floor(i.color.b*(1-g)+d.color.b*g)}):c=this.percentColors[e].color;break}return"rgb("+[c.r,c.g,c.b].join(",")+")"},b.prototype.getColorForValue=function(a,b){var c;return c=(a-this.minValue)/(this.maxValue-this.minValue),this.getColorForPercentage(c,b)},b.prototype.render=function(){var a,b,c,d,e,f,g,h,i;for(i=this.canvas.width/2,d=this.canvas.height*(1-this.paddingBottom),a=this.getAngle(this.displayedValue),this.textField&&this.textField.render(this),this.ctx.lineCap="butt",void 0!==this.options.customFillStyle?b=this.options.customFillStyle(this):null!==this.percentColors?b=this.getColorForValue(this.displayedValue,!0):void 0!==this.options.colorStop?(b=0===this.options.gradientType?this.ctx.createRadialGradient(i,d,9,i,d,70):this.ctx.createLinearGradient(0,0,i,0),b.addColorStop(0,this.options.colorStart),b.addColorStop(1,this.options.colorStop)):b=this.options.colorStart,this.ctx.strokeStyle=b,this.ctx.beginPath(),this.ctx.arc(i,d,this.radius,(1+this.options.angle)*Math.PI,a,!1),this.ctx.lineWidth=this.lineWidth,this.ctx.stroke(),this.ctx.strokeStyle=this.options.strokeColor,this.ctx.beginPath(),this.ctx.arc(i,d,this.radius,a,(2-this.options.angle)*Math.PI,!1),this.ctx.stroke(),g=this.gp,h=[],e=0,f=g.length;f>e;e++)c=g[e],h.push(c.update(!0));return h},b}(e),d=function(a){function b(a){this.canvas=a,b.__super__.constructor.call(this),"undefined"!=typeof G_vmlCanvasManager&&(this.canvas=window.G_vmlCanvasManager.initElement(this.canvas)),this.ctx=this.canvas.getContext("2d"),this.setOptions(),this.render()}return r(b,a),b.prototype.lineWidth=15,b.prototype.displayedValue=0,b.prototype.value=33,b.prototype.maxValue=80,b.prototype.minValue=0,b.prototype.options={lineWidth:.1,colorStart:"#6f6ea0",colorStop:"#c0c0db",strokeColor:"#eeeeee",shadowColor:"#d5d5d5",angle:.35},b.prototype.getAngle=function(a){return(1-this.options.angle)*Math.PI+(a-this.minValue)/(this.maxValue-this.minValue)*(2+this.options.angle-(1-this.options.angle))*Math.PI},b.prototype.setOptions=function(a){return null==a&&(a=null),b.__super__.setOptions.call(this,a),this.lineWidth=this.canvas.height*this.options.lineWidth,this.radius=this.canvas.height/2-this.lineWidth/2,this},b.prototype.set=function(a){return this.value=a,this.value>this.maxValue&&(this.maxValue=1.1*this.value),AnimationUpdater.run()},b.prototype.render=function(){var a,b,c,d,e,f;return a=this.getAngle(this.displayedValue),f=this.canvas.width/2,c=this.canvas.height/2,this.textField&&this.textField.render(this),b=this.ctx.createRadialGradient(f,c,39,f,c,70),b.addColorStop(0,this.options.colorStart),b.addColorStop(1,this.options.colorStop),d=this.radius-this.lineWidth/2,e=this.radius+this.lineWidth/2,this.ctx.strokeStyle=this.options.strokeColor,this.ctx.beginPath(),this.ctx.arc(f,c,this.radius,(1-this.options.angle)*Math.PI,(2+this.options.angle)*Math.PI,!1),this.ctx.lineWidth=this.lineWidth,this.ctx.lineCap="round",this.ctx.stroke(),this.ctx.strokeStyle=b,this.ctx.beginPath(),this.ctx.arc(f,c,this.radius,(1-this.options.angle)*Math.PI,a,!1),this.ctx.stroke()},b}(e),f=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return r(b,a),b.prototype.strokeGradient=function(a,b,c,d){var e;return e=this.ctx.createRadialGradient(a,b,c,a,b,d),e.addColorStop(0,this.options.shadowColor),e.addColorStop(.12,this.options._orgStrokeColor),e.addColorStop(.88,this.options._orgStrokeColor),e.addColorStop(1,this.options.shadowColor),e},b.prototype.setOptions=function(a){var c,d,e,f;return null==a&&(a=null),b.__super__.setOptions.call(this,a),f=this.canvas.width/2,c=this.canvas.height/2,d=this.radius-this.lineWidth/2,e=this.radius+this.lineWidth/2,this.options._orgStrokeColor=this.options.strokeColor,this.options.strokeColor=this.strokeGradient(f,c,d,e),this},b}(d),window.AnimationUpdater={elements:[],animId:null,addAll:function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(AnimationUpdater.elements.push(b));return e},add:function(a){return AnimationUpdater.elements.push(a)},run:function(){var a,b,c,d,e;for(a=!0,e=AnimationUpdater.elements,c=0,d=e.length;d>c;c++)b=e[c],b.update()&&(a=!1);return a?cancelAnimationFrame(AnimationUpdater.animId):AnimationUpdater.animId=requestAnimationFrame(AnimationUpdater.run)}},"function"==typeof window.define&&null!=window.define.amd?define(function(){return{Gauge:g,Donut:f,BaseDonut:d,TextRenderer:i}}):"undefined"!=typeof module&&null!=module.exports?module.exports={Gauge:g,Donut:f,BaseDonut:d,TextRenderer:i}:(window.Gauge=g,window.Donut=f,window.BaseDonut=d,window.TextRenderer=i)}).call(this);
+\ No newline at end of file
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcontrols.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcontrols.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcontrols.js	(nonexistent)
+@@ -1,16 +0,0 @@
+-function supportedcontrols() {
+-    var list = [
+-        'BalancethicknessThickeningRate',
+-        'FrictionCoefficient',
+-        'FrictionAs',
+-        'MaterialsRheologyBbar',
+-        'DamageDbar',
+-        'Vx',
+-        'Vy',
+-        'Thickness',
+-        'BalancethicknessOmega',
+-        'BalancethicknessApparentMassbalance',
+-        'MaterialsRheologyB'];
+-
+-    return list;
+-}
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/flowequation.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/flowequation.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/flowequation.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/flowequation.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/flowequation.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/friction.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/masstransport.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/masstransport.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/masstransport.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/masstransport.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/masstransport.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/adjacency.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/adjacency.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/adjacency.js	(nonexistent)
+@@ -1,61 +0,0 @@
+-adjacency = function(md) {
+-    //ADJACENCY -  compute adjacency matrix, list of vertices and list of weights.
+-    //
+-    //  function to create the adjacency matrix from the connectivity table.
+-    //
+-    //  the required output is:
+-    //    md.adj_mat     (double [sparse nv x nv], vertex adjacency matrix)
+-    //    md.qmu.vertex_weight        (double [nv], vertex weights)
+-
+-    var indi=[[md.mesh.elements.map(function(x) { return x[0]; })], [md.mesh.elements.map(function(x) { return x[1]; })], [md.mesh.elements.map(function(x) { return x[2]; })]];
+-    var indj=[md.mesh.elements.map(function(x) { return x[1];  }), [md.mesh.elements.map(function(x) { return x[2]; })], [md.mesh.elements.map(function(x) { return x[0]; })]];
+-    var values=1;
+-
+-    md.qmu.adjacency=math.eye(md.mesh.numberofvertices, md.mesh.numberofvertices, 'sparse');
+-
+-    for (var i = 0; i < indi.length; ++i) {
+-        for (var j = 0; j < indj.length; ++j) {
+-            //md.qmu.adjacency[indi[i]][indj[j]] = values;
+-            md.qmu.adjacency.subset(math.index(i, j), values);
+-        }
+-    }
+-
+-    var tempadj = math.subset(md.qmu.adjacency, math.index(0,math.range(0, math.size(md.qmu.adjacency)._data[1])))
+-
+-    //var tempadj = md.qmu.adjacency[0].map(function(col, i) { return md.qmu.adjacency.map(function(row) { return row[i]; }); });
+-    //md.qmu.adjacency=[md.qmu.adjacency[0].map(function(x, idx) { return md.qmu.adjacency.map(function(row, jdx) { return md.qmu.adjacency[idx][jdx] | tempadj[i][j]; })})];
+-    //md.qmu.adjacency=[tempadj.map(function(x, idx) { return md.qmu.adjacency.map(function(row, jdx) { return md.qmu.adjacency.subset(math.index(idx, jdx), md.qmu.adjacency.get([idx, jdx]) | tempadj.get([idx,jdx]));})})];
+-
+-    for (var i = 0; i < math.size(md.qmu.adjacency)._data[0]; ++i) {
+-        for (var j = 0; j < math.size(md.qmu.adjacency)._data[1]; ++j) {
+-            md.qmu.adjacency.subset(math.index(i,j), md.qmu.adjacency.subset(math.index(i,j)) | md.qmu.adjacency.subset(math.index(j,i)));
+-        }
+-    }
+-    //[tempadj.forEach(function(x, idx) { md.qmu.adjacency.forEach(function(y, jdx) { console.log(idx, jdx); return md.qmu.adjacency.subset(math.index(idx, jdx), md.qmu.adjacency.subset(math.index(idx, jdx)) );})})];
+-
+-    //now, build vwgt:
+-    areas=GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y);
+-
+-    //get node connectivity
+-    md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
+-
+-    connectivity=md.mesh.vertexconnectivity.map(function(row) { return row.slice(0,row.length-1); });
+-    pos=[];
+-    for (var i = 0; i < connectivity.length; ++i) {
+-        if ((connectivity[i] !== 0)) {
+-                pos.push(i);
+-        }
+-    }
+-
+-    console.log(areas);
+-
+-    var tempconn = pos.map(function(val, idx) { return connectivity[val]; });
+-
+-    pos.forEach(function(val, idx) {
+-        connectivity[val] = areas[connectivity[val]]/3;
+-    });
+-
+-    md.qmu.vertex_weight=math.sum(connectivity);
+-
+-    return md;
+-};
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/link-libs.sh
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/link-libs.sh	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/link-libs.sh	(nonexistent)
+@@ -1,7 +0,0 @@
+-# Create hard links for lib files
+-ln $ISSM_DIR/src/m/enum/EnumDefinitions.js .
+-ln $ISSM_DIR/src/m/classes/levelset.js .
+-ln $ISSM_DIR/src/m/classes/mask.js .
+-ln $ISSM_DIR/src/m/classes/mesh2d.js .
+-ln $ISSM_DIR/src/m/classes/mesh3dprisms.js .
+-ln $ISSM_DIR/src/m/classes/model.js .
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/link-libs.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh2d.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh2d.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh2d.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/mesh2d.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mesh2d.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/calving.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/calving.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/calving.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/calving.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/calving.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/contourenvelope.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/contourenvelope.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/contourenvelope.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/parameterization/contourenvelope.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/contourenvelope.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/initialization.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/stressbalance.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/stressbalance.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/stressbalance.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/stressbalance.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/stressbalance.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/SMBforcing.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mask.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/mask.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/mask.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/mask.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/mask.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/project2d.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/project2d.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/project2d.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/extrusion/project2d.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/project2d.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/extrusion/project3d.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/hydrologyshreve.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/hydrologyshreve.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/hydrologyshreve.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/hydrologyshreve.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/hydrologyshreve.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/EnumDefinitions.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/EnumDefinitions.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/EnumDefinitions.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/enum/EnumDefinitions.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/EnumDefinitions.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/qmu.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/qmu.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/qmu.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/qmu.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/qmu.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-binaries.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-binaries.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/issm-binaries.js	(nonexistent)
+@@ -1,12024 +0,0 @@
+-function ArrayMax(array){ //{{{
+-	return Math.max.apply(null,array);
+-} //}}}
+-function ArrayMax2D(array){ //{{{
+-	
+-	var max=0;
+-
+-	for (var i=0;i<array.length;i++){
+-		var subarray=array[i];
+-		max=Math.max(max,ArrayMax(subarray));
+-	}
+-
+-	return max;
+-} //}}}
+-function ArrayMin(array){ //{{{
+-	return Math.min.apply(null,array);
+-} //}}}
+-function ArraySum(array){ //{{{
+-	var sum=0;
+-	for(var i=0;i<array.length;i++)sum+=array[i];
+-	return sum;
+-} //}}}
+-function ArrayXPY(){ //{{{
+-    if (arguments.length<2)throw Error("ArrayXPY error message: sum has to be for at least two arrays!");
+-
+-	//check internal consistency of arrays provided!: 
+-	var firstarray=arguments[0];
+-	var firstsize=firstarray.length;
+-	
+-	for(var a=1;a<arguments.length;a++){
+-		var array=arguments[a];
+-		if(array.length!=firstsize)throw Error("ArrayXPY error message: arrays provided as arguments are not of the same length!");
+-	}
+-
+-	//do the sum:
+-	var sum=NewArrayFill(firstsize,0);
+-	for(var a=0;a<arguments.length;a++){
+-		var array=arguments[a];
+-		for(var i=0;i<array.length;i++){
+-			sum[i]+=array[i];
+-		}
+-	}
+-	return sum;
+-
+-} //}}}
+-function ArrayOr(){ //{{{
+-    if (arguments.length<2)throw Error("ArrayOr error message: sum has to be for at least two arrays!");
+-
+-	//check internal consistency of arrays provided!: 
+-	var firstarray=arguments[0];
+-	var firstsize=firstarray.length;
+-	
+-	for(var a=1;a<arguments.length;a++){
+-		var array=arguments[a];
+-		if(array.length!=firstsize)throw Error("ArrayOr error message: arrays provided as arguments are not of the same length!");
+-	}
+-
+-	//do the or:
+-	var or=NewArrayFill(firstsize,0);
+-	for(var a=0;a<arguments.length;a++){
+-		var array=arguments[a];
+-		for(var i=0;i<array.length;i++){
+-			or[i] = or[i] | array[i];
+-		}
+-	}
+-	return or;
+-
+-} //}}}
+-function ArrayMin2D(array){ //{{{
+-	
+-	var min=ArrayMax2D(array);
+-
+-	for (var i=0;i<array.length;i++){
+-		var subarray=array[i];
+-		min=Math.min(min,ArrayMin(subarray));
+-	}
+-
+-	return min;
+-} //}}}
+-function ListToMatrix(list, elementsPerSubArray) { //{{{
+-	var matrix = [], i, k;
+-
+-	for (i = 0, k = -1; i < list.length; i++) {
+-		if (i % elementsPerSubArray === 0) {
+-			k++;
+-			matrix[k] = [];
+-		}
+-
+-		matrix[k].push(list[i]);
+-	}
+-
+-	return matrix;
+-} //}}}
+-function MatrixToList(matrixin) { //{{{
+-
+-	var matrix=matrixin;
+-
+-	if (!IsArray(matrix[0])) return matrix;
+-	else{
+-		var width = matrix[0].length;
+-		var length = matrix.length;
+-		var list= new Array(width*length);
+-
+-		for(var i=0;i<length;i++){
+-			for(var j=0;j<width;j++){
+-				list[i*width+j]=matrix[i][j];
+-			}
+-		}
+-		return list;
+-	}
+-} //}}}
+-function IsArray(object) { //{{{
+-
+-	var type=Object.prototype.toString.call( object );
+-	if( type === '[object Array]' ) return 1;
+-	if( type === '[object Float64Array]' ) return 1;
+-	if( type === '[object Float32Array]' ) return 1;
+-	if( type === '[object Int32Array]' ) return 1;
+-	if( type === '[object Int16Array]' ) return 1;
+-	if( type === '[object Uint32Array]' ) return 1;
+-	if( type === '[object Uint16Array]' ) return 1;
+-	if( type === '[object Uint8Array]' ) return 1;
+-	return 0;
+-
+-} //}}}
+-function ArrayNot(array) { //{{{
+-
+-	var notarray=array;
+-	for (var i=0;i<array.length;i++)notarray[i]=-array[i];
+-	return notarray;
+-} //}}}
+-function ArrayCopy(array) { //{{{
+-
+-	var copy=[];
+-	for(var i=0;i<array.length;i++)copy[i]=array[i];
+-	return copy;
+-} //}}}
+-function ArrayPow(array,coefficient) { //{{{
+-
+-	var powarray=array;
+-	for (var i=0;i<array.length;i++)powarray[i]=Math.pow(array[i],coefficient);
+-	return powarray;
+-} //}}}
+-function ArraySqrt(array) { //{{{
+-
+-	var sqrtarray=array;
+-	for (var i=0;i<array.length;i++)sqrtarray[i]=Math.sqrt(array[i]);
+-	return sqrtarray;
+-} //}}}
+-function ArrayScale(array,alpha) { //{{{
+-
+-	for (var i=0;i<array.length;i++)array[i]=array[i]*alpha;
+-
+-} //}}}
+-function ArrayMag(array1,array2) { //{{{
+-
+-	var arraymag=NewArrayFill(array1.length,0);
+-	for (var i=0;i<array1.length;i++)arraymag[i]=Math.sqrt(Math.pow(array1[i],2)+Math.pow(array2[i],2));
+-	return arraymag;
+-} //}}}
+-function ArrayAnyNaN(array) { //{{{
+-
+-    if(IsArray(array[0])){
+-        for(var i=0;i<array.length;i++){
+-            for(var j=0;j<array[0].length;j++){
+-                if (isNaN(array[i][j])) return 1;
+-            }
+-        }
+-    }
+-    else{
+-        for(var i=0;i<array.length;i++){
+-            if (isNaN(array[i])) return 1;
+-        }
+-    }
+-    return 0;
+-} //}}}
+-function ArrayUnique(arr) { //{{{
+-
+-	return arr.reverse().filter(function (e, i, arr) {
+-		    return arr.indexOf(e, i+1) === -1;
+-	}).reverse();
+-} //}}}
+-function ArraySort(array) { //{{{
+-
+-	return array.sort(function(a, b) {
+-		return a - b;
+-	});
+-
+-} //}}}
+-function ArrayAnyEqual(array,value) { //{{{
+-	
+-	if(!isNaN(value)){
+-		for(var i=0;i<array.length;i++){
+-			if (array[i]==value)return 1;
+-		}
+-	}
+-	else{
+-		for(var i=0;i<array.length;i++){
+-			if (isNaN(array[i]))return 1;
+-		}
+-	}
+-	return 0;
+-} //}}}
+-function ArrayAnyBelowOrEqual(array,value) { //{{{
+-
+-	for(var i=0;i<array.length;i++){
+-		if (array[i]<=value)return 1;
+-	}
+-	return 0;
+-} //}}}
+-function ArrayAnyBelowStrict(array,value) { //{{{
+-
+-	for(var i=0;i<array.length;i++){
+-		if (array[i]<value)return 1;
+-	}
+-	return 0;
+-} //}}}
+-function ArrayAnyAboveOrEqual(array,value) { //{{{
+-
+-	for(var i=0;i<array.length;i++){
+-		if (array[i]>=value)return 1;
+-	}
+-	return 0;
+-} //}}}
+-function ArrayAnyAboveStrict(array,value) { //{{{
+-
+-	for(var i=0;i<array.length;i++){
+-		if (array[i]>value)return 1;
+-	}
+-	return 0;
+-} //}}}
+-function ArrayAnd(array1,array2) { //{{{
+-
+-	var array=array1;
+-	for (var i=0;i<array1.length;i++)array[i]=array1[i] & array2[i];
+-	return array;
+-} //}}}
+-function ArrayIsMember(array1,array2) { //{{{
+-
+-	var array=NewArrayFill(array1.length,0);
+-	for (var i=0;i<array1.length;i++){
+-		for(var j=0;j<array2.length;j++){
+-			if (array1[i] == array2[j]){
+-				array[i]=1;
+-				break;
+-			}
+-		}
+-	}
+-	return array;
+-} //}}}
+-function NewArrayFill(size,value) { //{{{
+-
+-	return new Array(size).fill(value);
+-} //}}}
+-function NewArrayFillIncrement(size,start,increment) { //{{{
+-
+-	var array=new Array(size); 
+-
+-	for(var i=0;i<size;i++){
+-		array[i]=start+i*increment;
+-	}
+-
+-	return array;
+-} //}}}
+-function ArrayFind(array,value) { //{{{
+-	
+-	//find number of indices
+-	var count=0;
+-	for (var i=0;i<array.length;i++)if(array[i]==value)count++;
+-
+-	//allocate:
+-	var indices= NewArrayFill(count,0);
+-
+-	//fill in:
+-	count=0;
+-	for (var i=0;i<array.length;i++){
+-		if(array[i]==value){
+-			indices[count]=i;
+-			count++;
+-		}
+-	}
+-	return indices;
+-} //}}}
+-function ArrayFindNot(array,value) { //{{{
+-	
+-	//find number of indices
+-	var count=0;
+-	for (var i=0;i<array.length;i++)if(array[i]!=value)count++;
+-
+-	//allocate:
+-	var indices= NewArrayFill(count,0);
+-
+-	//fill in:
+-	count=0;
+-	for (var i=0;i<array.length;i++){
+-		if(array[i]!=value){
+-			indices[count]=i;
+-			count++;
+-		}
+-	}
+-	return indices;
+-} //}}}
+-function Create2DArray(rows,cols) { //{{{
+-	var arr = [];
+-
+-	for (var i=0;i<rows;i++) {
+-		arr[i] = new Array(cols);
+-	}
+-
+-	return arr;
+-} //}}}
+-function MapIsEmpty(map) { //{{{
+-	for (var key in map){
+-		if(map.hasOwnProperty(key)){
+-			return false;
+-		}
+-	}
+-	return true;
+-} //}}}
+-function clone(obj) {//{{{
+-	
+-	var copy;
+-
+-	// Handle the 3 simple types, and null or undefined
+-	if (null == obj || "object" != typeof obj) return obj;
+-
+-	// Handle Date
+-	if (obj instanceof Date) {
+-		copy = new Date();
+-		copy.setTime(obj.getTime());
+-		return copy;
+-	}
+-
+-	// Handle Array
+-	if (obj instanceof Array) {
+-		copy = [];
+-		for (var i = 0, len = obj.length; i < len; i++) {
+-			copy[i] = clone(obj[i]);
+-		}
+-		return copy;
+-	}
+-
+-	// Handle Object
+-	if (obj instanceof Object) {
+-		copy = {};
+-		for (var attr in obj) {
+-			if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
+-		}
+-		return copy;
+-	}
+-
+-	throw new Error("Unable to copy obj! Its type isn't supported.");
+-} //}}}
+-function FloatFix(pointer,size) {//{{{
+-
+-	var buffer=new Float64Array(size);
+-	for(var i=0;i<size;i++)buffer[i]=pointer[i];
+-	return buffer;
+-
+-
+-} //}}}
+-function NullFix(pointer,value) {//{{{
+-
+-	if(pointer==null)return value;
+-	else{
+-		//check that the pointer values are not null: 
+-		if(IsArray(pointer)){
+-			if(IsArray(pointer[0])){
+-				for(var i=0;i<pointer.length;i++){
+-					for(var j=0;j<pointer[0].length;j++){
+-						if(pointer[i][j]==null)pointer[i][j]=value;
+-					}
+-				}	
+-			}
+-			else{
+-				for(var i=0;i<pointer.length;i++){
+-					if(pointer[i]==null)pointer[i]=value;
+-				}
+-			}
+-		}
+-		return pointer;
+-	}
+-
+-} //}}}
+-function SetIceShelfBC(md) { 
+-//SETICESHELFBC - Create the boundary conditions for stressbalance and thermal models for a  Ice Shelf with Ice Front
+-//
+-//   Neumann BC are used on the ice front (an ANRGUS contour around the ice front
+-//   must be given in input)
+-//   Dirichlet BC are used elsewhere for stressbalance
+-//
+-//   Usage:
+-//      md=SetIceShelfBC(md,varargin)
+-//
+-//   Example:
+-//      SetIceShelfBC(md);
+-//      SetIceShelfBC(md,'Front.exp');
+-//
+-//   See also: SETICESHEETBC, SETMARINEICESHEETBC
+-
+-	//node on Dirichlet (boundary and ~icefront)
+-	if (arguments.length==2){
+-		icefront=arguments[1];
+-		nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefront,'node',2);
+-		nodeonicefront=ArrayAnd(md.mesh.vertexonboundary,nodeinsideicefront);
+-	}
+-	else if(arguments.length==1){
+-		nodeonicefront=NewArrayFill(md.mesh.numberofvertices,0);
+-	}
+-	else{
+-		throw Error('SetIceShelfBC usage error');
+-	}
+-
+-	md.stressbalance.spcvx=NewArrayFill(md.mesh.numberofvertices,NaN); 
+-	md.stressbalance.spcvy=NewArrayFill(md.mesh.numberofvertices,NaN);
+-	md.stressbalance.spcvz=NewArrayFill(md.mesh.numberofvertices,NaN);
+-	md.stressbalance.referential=Create2DArray(md.mesh.numberofvertices,6);
+-	for(var i=0;i<md.mesh.numberofvertices;i++)for(var j=0;j<6;j++)md.stressbalance.referential[i][j]=NaN;
+-	md.stressbalance.loadingforce=NewArrayFill(md.mesh.numberofvertices,0);
+-
+-	//Ice front position: 
+-	pos=ArrayFind(nodeonicefront,1);
+-	for(var i=0;i<pos.length;i++)md.mask.ice_levelset[pos[i]]=0;
+-
+-	//First find segments that are not completely on the front
+-	if (md.mesh.elementtype() === 'Penta'){
+-		numbernodesfront=4;
+-	}
+-	else if (md.mesh.elementtype() === 'Tria'){
+-		numbernodesfront=2;
+-	}
+-	else{
+-		throw Error('mesh type not supported yet');
+-	}
+-	var obs=false;
+-	if((md.inversion.vx_obs.length == md.mesh.numberofvertices) & (md.inversion.vy_obs.length==md.mesh.numberofvertices))obs=true;
+-
+-	if(obs==true){
+-		console.log('      boundary conditions for stressbalance model: setting spc as observed velocities');
+-	}
+-	else{
+-		console.log('      boundary conditions for stressbalance model: setting spc as zero');
+-	}
+-	for(var i=0;i<md.mesh.segments.length;i++){
+-		var sum=0;
+-		for (var j=0;j<numbernodesfront;j++) sum+=md.mask.ice_levelset[md.mesh.segments[i][j]-1];
+-		if(sum!=0){
+-			for (var j=0;j<numbernodesfront;j++){
+-				if(obs==false){
+-					md.stressbalance.spcvx[md.mesh.segments[i][j]-1]=0;
+-					md.stressbalance.spcvy[md.mesh.segments[i][j]-1]=0;
+-				}
+-				else{
+-					md.stressbalance.spcvx[md.mesh.segments[i][j]-1]=md.inversion.vx_obs[md.mesh.segments[i][j]-1];
+-					md.stressbalance.spcvy[md.mesh.segments[i][j]-1]=md.inversion.vy_obs[md.mesh.segments[i][j]-1];
+-				}
+-				md.stressbalance.spcvz[md.mesh.segments[i][j]-1]=0;
+-
+-			}
+-		}
+-	}
+-
+-	//Initialize surface and basal forcings
+-	md.smb.initialize(md);
+-	md.basalforcings.initialize(md);
+-
+-	//Deal with other boundary conditions
+-	if (isNaN(md.balancethickness.thickening_rate)){
+-		md.balancethickness.thickening_rate=NewArrayFill(md.mesh.numberofvertices,0);
+-		console.log('      no balancethickness.thickening_rate specified: values set as zero');
+-	}
+-		
+-	md.masstransport.spcthickness=NewArrayFill(md.mesh.numberofvertices,NaN);
+-	md.balancethickness.spcthickness=NewArrayFill(md.mesh.numberofvertices,NaN);
+-	md.damage.spcdamage=NewArrayFill(md.mesh.numberofvertices,NaN);
+-
+-	if (md.initialization.temperature.length==md.mesh.numberofvertices){
+-		md.thermal.spctemperature=NewArrayFill(md.mesh.numberofvertices,NaN);
+-		if ('vertexonsurface' in md.mesh){
+-			pos=ArrayFind(md.mesh.vertexonsurface,1);
+-			for(var i=0;i<pos.length;i++)md.thermal.spctemperature[i]=md.initialization.temperature[i]; //impose observed temperature on surface
+-		}
+-		if (md.basalforcings.geothermalflux.length != md.mesh.numberofvertices){
+-			md.basalforcings.geothermalflux=NewArrayFill(md.mesh.numberofvertices,0);
+-		}
+-	}
+-	else{
+-		console.log('      no thermal boundary conditions created: no observed temperature found');
+-	}
+-}
+-//AUTODIFF class definition
+-//
+-//   Usage:
+-//      autodiff=new autodiff();
+-
+-function autodiff (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		this.obufsize     = 524288;
+-		this.lbufsize     = 524288;
+-		this.cbufsize     = 524288;
+-		this.tbufsize     = 524288;
+-		this.gcTriggerRatio=2.0;
+-		this.gcTriggerMaxSize=65536;
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   automatic differentiation parameters:'));
+-		fielddisplay(this,'isautodiff','indicates if the automatic differentiation is activated');
+-		fielddisplay(this,'dependents','list of dependent variables');
+-		fielddisplay(this,'independents','list of independent variables');
+-		fielddisplay(this,'driver',"ADOLC driver ('fos_forward' or 'fov_forward')");
+-		fielddisplay(this,'obufsize','Number of operations per buffer (==OBUFSIZE in usrparms.h)');
+-		fielddisplay(this,'lbufsize','Number of locations per buffer (==LBUFSIZE in usrparms.h)');
+-		fielddisplay(this,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)');
+-		fielddisplay(this,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)');
+-		fielddisplay(this,'gcTriggerRatio','free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio');
+-		fielddisplay(this,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "autodiff";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			//Early return 
+-			if (!this.isautodiff) return; 
+-
+-			//Driver value:
+-			checkfield(md,'fieldname','autodiff.driver','values',['fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all']);
+-			
+-			//buffer values: 
+-			checkfield(md,'fieldname','autodiff.obufsize','>=',16);
+-			checkfield(md,'fieldname','autodiff.lbufsize','>=',16);
+-			checkfield(md,'fieldname','autodiff.cbufsize','>=',16);
+-			checkfield(md,'fieldname','autodiff.tbufsize','>=',16);
+-			checkfield(md,'fieldname','autodiff.gcTriggerRatio','>=',0);
+-			checkfield(md,'fieldname','autodiff.gcTriggerMaxSize','>=',65536);
+-
+-			//go through our dependents and independents and check consistency: 
+-			for (var i=0;i<this.dependents.length;i++){
+-				dep=this.dependents[i];
+-				dep.checkconsistency(md,solution,analyses);
+-			}
+-			for (var i=0;i<this.independents.length;i++){
+-				indep=this.independents[i];
+-				indep.checkconsistency(md,i,solution,analyses,this.driver);
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','isautodiff','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','driver','format','String');
+-
+-			//early return
+-			if (!this.isautodiff){
+-				WriteData(fid,prefix,'data',false,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
+-				WriteData(fid,prefix,'data',false,'name','md.autodiff.keep','format','Boolean');
+-				return;
+-			}
+-
+-			//buffer sizes {{{
+-			WriteData(fid,prefix,'object',this,'fieldname','obufsize','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','lbufsize','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','cbufsize','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','tbufsize','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','gcTriggerRatio','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','gcTriggerMaxSize','format','Double');
+-			//}}}
+-			//process dependent variables {{{
+-			num_dependent_objects=this.dependents.length;
+-			WriteData(fid,prefix,'data',num_dependent_objects,'name','md.autodiff.num_dependent_objects','format','Integer');
+-
+-			if(num_dependent_objects){
+-				var names=[];
+-				types=NewArrayFill(num_dependent_objects,0);
+-				indices=NewArrayFill(num_dependent_objects,0);
+-
+-				for (var i=0;i<num_dependent_objects;i++){
+-					dep=this.dependents[i];
+-
+-					names.push(dep.name);
+-					types[i]=dep.typetoscalar();
+-					indices[i]=dep.index;
+-				}
+-				WriteData(fid,prefix,'data',names,'name','md.autodiff.dependent_object_names','format','StringArray');
+-				WriteData(fid,prefix,'data',types,'name','md.autodiff.dependent_object_types','format','IntMat','mattype',3);
+-				WriteData(fid,prefix,'data',indices,'name','md.autodiff.dependent_object_indices','format','IntMat','mattype',3);
+-			}
+-			//}}}
+-			//process independent variables {{{
+-			num_independent_objects=this.independents.length;
+-			WriteData(fid,prefix,'data',num_independent_objects,'name','md.autodiff.num_independent_objects','format','Integer');
+-
+-			if(num_independent_objects){
+-				names=NewArrayFill(num_independent_objects,0);
+-				types=NewArrayFill(num_independent_objects,0);
+-
+-				for (var i=0;i<num_independent_objects;i++){
+-					indep=this.independents[i];
+-
+-					names[i]=StringToEnum(indep.name);
+-					types[i]=indep.typetoscalar();
+-				}
+-				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','IntMat','mattype',3);
+-				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
+-			}
+-			//}}}
+-			//if driver is fos_forward, build index:  {{{
+-			if (this.driver == 'fos_forward'){
+-				var index=0;
+-
+-				for (var i=0;i<num_independent_objects;i++){
+-					indep=this.independents[i];
+-					if (!(isNaN(indep.fos_forward_index))){
+-						index=index+indep.fos_forward_index;
+-						break;
+-					}
+-					else{
+-						if (indep.type=='scalar') index=index+1;
+-						else index=index+indep.nods;
+-					}
+-				}
+-				index=index-1; //get c-index numbering going
+-				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_forward_index','format','Integer');
+-			}
+-			//}}}
+-			//if driver is fos_reverse, build index:  {{{
+-			if (this.driver  == 'fos_reverse'){
+-				var index=0;
+-
+-				for (var i=0;i<num_dependent_objects;i++){
+-					dep=this.dependents[i];
+-					if (!(isNaN(dep.fos_reverse_index))){
+-						index=index+dep.fos_reverse_index;
+-						break;
+-					}
+-					else{
+-						if (dep.type =='scalar') index=index+1;
+-						else index=index+dep.nods;
+-					}
+-				}
+-				index=index-1; //get c-index numbering going
+-				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_reverse_index','format','Integer');
+-			}
+-			//}}}
+-			//if driver is fov_forward, build indices:  {{{
+-			if (this.driver == 'fov_forward'){
+-				var indices=0;
+-
+-				for (var i=0;i<num_independent_objects;i++){
+-					indep=this.independents[i];
+-					if (!indep.fos_forward_index.length){
+-						indices=indices+indep.fov_forward_indices;
+-						break;
+-					}
+-					else{
+-						if (indep.type =='scalar') indices=indices+1;
+-						else indices=indices+indep.nods;
+-					}
+-				}
+-				indices=indices-1; //get c-indices numbering going
+-				WriteData(fid,prefix,'data',indices,'name','md.autodiff.fov_forward_indices','format','IntMat','mattype',3);
+-			}
+-			//}}}
+-			//deal with mass fluxes:  {{{
+-			mass_flux_segments=[];
+-			for (var i=0;i<num_dependent_objects;i++){
+-				dep=this.dependents[i];
+-				if (dep.name =='MassFlux'){
+-					mass_flux_segments.push(dep.segments);
+-				}
+-			}
+-			if (mass_flux_segments.length){
+-				WriteData(fid,prefix,'data',mass_flux_segments,'name','md.autodiff.mass_flux_segments','format','MatArray');
+-				flag=true;
+-			}
+-			else flag=false;
+-			WriteData(fid,prefix,'data',flag,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
+-			//}}}
+-			//deal with trace keep on: {{{
+-			keep=false;
+-
+-			//From ADOLC userdoc: 
+-			// The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
+-			// recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
+-			// prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
+-			// mode as described in the Section 4 and Section 5. 
+-			//
+-
+-			if (this.driver.length<=3) keep=false; //there is no "_reverse" string within the driver string: 
+-			else{
+-				if (this.driver.splice(4) == '_reverse') keep=true;
+-				else keep=false;
+-			}
+-			WriteData(fid,prefix,'data',keep,'name','md.autodiff.keep','format','Boolean');
+-			//}}}
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.obufsize=NullFix(this.obufsize,NaN);
+-			this.lbufsize=NullFix(this.lbufsize,NaN);
+-			this.cbufsize=NullFix(this.cbufsize,NaN);
+-			this.tbufsize=NullFix(this.tbufsize,NaN);
+-			this.gcTriggerRatio=NullFix(this.gcTriggerRatio,NaN);
+-			this.gcTriggerMaxSize=NullFix(this.gcTriggerMaxSize,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.isautodiff   = false;
+-	this.dependents   = [];
+-	this.independents = [];
+-	this.driver       = 'fos_forward';
+-	this.obufsize     = NaN;
+-	this.lbufsize     = NaN;
+-	this.cbufsize     = NaN;
+-	this.tbufsize     = NaN;
+-	this.gcTriggerRatio = NaN;
+-	this.gcTriggerMaxSize = NaN;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//BALANCETHICKNESS class definition
+-//
+-//   Usage:
+-//      balancethickness=new balancethickness();
+-
+-function balancethickness (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//Type of stabilization used
+-		this.stabilization=1;
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   balance thickness solution parameters:'));
+-
+-		fielddisplay(this,'spcthickness','thickness constraints (NaN means no constraint) [m]');
+-		fielddisplay(this,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt) [m/yr]');
+-		fielddisplay(this,'stabilization',"0: None, 1: SU, 2: SSA's artificial diffusivity, 3:DG");
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "balancethickness";
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses){ // {{{
+-			//Early return
+-			if (solution!=BalancethicknessSolutionEnum())return;
+-
+-			checkfield(md,'fieldname','balancethickness.spcthickness');
+-			checkfield(md,'fieldname','balancethickness.thickening_rate','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','balancethickness.stabilization','size',[1, 1],'values',[0, 1, 2 ,3]);
+-			//checkfield(md,'fieldname','balancethickness.omega','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1,'>=',0);
+-		} //}}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1/yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','omega','format','DoubleMat','mattype',1);
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.spcthickness=NullFix(this.spcthickness,NaN);
+-			this.thicknening_rate=NullFix(this.thicknening_rate,NaN);
+-			this.omega=NullFix(this.omega,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.spcthickness      = NaN;
+-	this.thickening_rate   = NaN;
+-	this.stabilization     = 0;
+-	this.omega             = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//BASAL FORCINGS class definition
+-//
+-//   Usage:
+-//      basalforcings=basalforcings();
+-
+-function basalforcings(){
+-	//methods
+-	this.setdefaultparameters = function() {//{{{
+-
+-	} // }}}
+-	this.disp = function(){ // {{{
+-		console.log(sprintf('   basal forcings parameters:'));
+-
+-		fielddisplay(this,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]');
+-		fielddisplay(this,'floatingice_melting_rate','basal melting rate (positive if melting) [m/yr]');
+-		fielddisplay(this,'geothermalflux','geothermal heat flux [W/m^2]');
+-
+-	} // }}}
+-	this.classname = function(){ // {{{
+-		return "basalforcings";
+-	} // }}}
+-		this.initialize = function (md){ // {{{
+-
+-			if (isNaN(this.groundedice_melting_rate)){
+-				this.groundedice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
+-				console.log('      no basalforcings.groundedice_melting_rate specified: values set as zero');
+-			}
+-
+-			if (isNaN(this.floatingice_melting_rate)){
+-				this.floatingice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
+-				console.log('      no basalforcings.floatingice_melting_rate specified: values set as zero');
+-			}
+-
+-		} // }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+-				if (!(solution==TransientSolutionEnum() & md.trans.ismasstransport==0)){
+-					checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-					checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-				}
+-			}
+-
+-			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessAnalysisEnum(),analyses),1)){
+-				checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1)){
+-				if (!(solution==TransientSolutionEnum() & md.trans.isthermal==0)){
+-					checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-					checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-					checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'timeseries',1,'>=',0);
+-				}
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'name','md.basalforcings.model','data',FloatingMeltRateEnum(),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+-			WriteData(fid,prefix,'object',this,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+-			WriteData(fid,prefix,'object',this,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties
+-	//{{{
+-	this.groundedice_melting_rate  = NaN;
+-	this.floatingice_melting_rate  = NaN;
+-	this.geothermalflux            = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//CALVING class definition
+-//
+-//   Usage:
+-//      calving=new calving();
+-
+-function calving (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   Calving parameters:'));
+-		fielddisplay(this,'calvingrate','calving rate at given location [m/a]');
+-		fielddisplay(this,'meltingrate','melting rate at given location [m/a]');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "calving";
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses) { // {{{
+-		//Early return
+-		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
+-
+-		checkfield(md,'fieldname','calving.calvingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
+-		checkfield(md,'fieldname','calving.meltingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
+-	} //}}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			var yts=365.0*24.0*3600.0;
+-			WriteData(fid,prefix,'name','md.calving.law','data',DefaultCalvingEnum(),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.calvingrate=NullFix(this.calvingrate,NaN);
+-			this.meltingrate=NullFix(this.meltingrate,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.calvingrate   = NaN;
+-	this.meltingrate   = NaN;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//GENERIC class definition
+-//
+-//   Usage:
+-//      generic=new generic();
+-
+-function generic (){
+-	//properties 
+-	// {{{
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice(0,args.length));
+-
+-	this.url=options.getfieldvalue('url','');
+-	this.np=options.getfieldvalue('np',3);
+-	this.codeversion=options.getfieldvalue('codeversion',20486);
+-	this.codepath=options.getfieldvalue('codepath','issmdir/bin');
+-	this.executionpath=options.getfieldvalue('executionpath','issmdir/execution');
+-	//}}}
+-	//methods
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   generic class echo:'));
+-		console.log(sprintf('    url: "%s"',this.url));
+-		console.log(sprintf('    np: %i',this.np));
+-		console.log(sprintf('    codepath: "%s"',this.codepath));
+-		console.log(sprintf('    executionpath: "%s"',this.executionpath));
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "generic";
+-	}// }}}
+-	this.checkconsistency = function (md,solution,analyses) { //{{{
+-		if (cluster.np<1){
+-			md.checkmessage('number of processors should be at least 1');
+-		}
+-		if (isNaN(cluster.np)){
+-			md.checkmessage('number of processors should not be NaN!');
+-		}
+-	} //}}}
+-	this.BuildQueueScript = function (cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota) { // {{{
+-
+-			//write queuing script 
+-			//what is the executable being called? 
+-			executable='issm.exe';
+-
+-			fid=fopen(modelname+'.queue','w');
+-			fprintf(fid,'#!%s\n',cluster.shell);
+-			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,executable,EnumToString(solution),cluster.executionpath+'/'+dirname,modelname,modelname,modelname);					
+-			fclose(fid);
+-	} //}}}
+-	this.UploadAndRun = function (md,callbackfunction,fid,toolkitsstring,solutionstring,name,runtimename) { //{{{
+-
+-		var request = new XMLHttpRequest();
+-		$(".run-button").html(sprintf("%-16s", "CONNECTING...")).prop("disabled", true);
+-		request.position = 0; //Keep track of current parsing position in repsonseText
+-		request.timeout = 30000;
+-		request.ontimeout = function (event) { //{{{
+-			$(".run-button").html(sprintf("%-16s", "RUN")).prop("disabled", false);
+-		} //}}}
+-		request.upload.onprogress = function(event) { //{{{
+-			var progress = (event.loaded / event.total * 100).toFixed(0);
+-			$(".run-button").html(sprintf("%-20s", "UPLOADING: " + progress + "%"));
+-        } //}}}
+-		request.onprogress = function (event) { //{{{
+-			//Receive updates by parsing message length as a 32-bit hex string of form 0x*09ABCDEF))
+-			var startIndex = request.position;
+-			var endIndex = request.position + 10;
+-			if (request.responseText.length >= endIndex) { //Ensure entire hex string is loaded
+-				var chunkSize = parseInt(request.responseText.slice(startIndex, endIndex));
+-				startIndex = endIndex;
+-				endIndex = startIndex + chunkSize;
+-				if (chunkSize >= 1024) { //Arbitrary maximium size of message (Must be below minimium size of model results)
+-					$(".run-button").html(sprintf("%-20s", "DOWNLOADING: " + ((request.responseText.length - request.position) / chunkSize * 100).toFixed(0) + "%")).prop("disabled", true);
+-				}
+-				else if (request.responseText.length >= endIndex) { //Ensure entire chunk is loaded
+-					var responseChunk = request.responseText.slice(startIndex, endIndex);
+-					$(".run-button").html(responseChunk);
+-					request.position = endIndex;
+-				}
+-			}
+-		}; //}}}
+-		request.onload = function (event) { //{{{
+-			//get context to this.str2ab to avoid duplciation
+-			function str2ab(str) {
+-				var buf = new Uint8Array(str.length);
+-				for (var i=0, strLen=str.length; i < strLen; i++) {
+-					buf[i] = str.charCodeAt(i);
+-				}
+-				return buf;
+-			}
+-			var responseText = request.responseText.slice(request.position + 10).replace(/\s/g, '');
+-            var buffer = str2ab(window.atob(responseText));
+-			var returnBuffer = new Uint8Array(buffer);
+-			var returnBuffer_size = returnBuffer.byteLength;
+-			try {
+-				md.results = parseresultsfrombuffer(returnBuffer,returnBuffer_size);
+-			}
+-			catch (e) {
+-				console.log(e);
+-			}
+-			$(".run-button").html(sprintf("%-16s", "RUN")).prop("disabled", false);
+-			callbackfunction();
+-		}; //}}}
+-		
+-		var npbuffer = this.str2ab(md.cluster.np.toString());
+-		var nplength = new Uint32Array(1);
+-		nplength[0] = npbuffer.byteLength;
+-		
+-		var codeversionbuffer = this.str2ab(md.cluster.codeversion.toString());
+-		var codeversionlength = new Uint32Array(1);
+-		codeversionlength[0] = codeversionbuffer.byteLength;
+-		
+-		var runtimenamebuffer = this.str2ab(runtimename);
+-		var runtimenamelength = new Uint32Array(1);
+-		runtimenamelength[0] = runtimenamebuffer.byteLength;
+-		
+-		var namebuffer = this.str2ab(name);
+-		var namelength = new Uint32Array(1);
+-		namelength[0] = namebuffer.byteLength;
+-		
+-		var toolkitsbuffer = this.str2ab(toolkitsstring);
+-		var toolkitslength = new Uint32Array(1);
+-		toolkitslength[0] = toolkitsbuffer.byteLength;
+-		
+-		var solutionbuffer = this.str2ab(solutionstring);
+-		var solutionlength = new Uint32Array(1);
+-		solutionlength[0] = solutionbuffer.byteLength;
+-		
+-		var binbuffer = new Uint8Array(fid.rawbuffer()); //seems that 16 array bytes length could be incompatible.
+-		var binlength = new Uint32Array(1);
+-		binlength[0] = binbuffer.byteLength;
+-		
+-		var data = new Blob([nplength,npbuffer,codeversionlength,codeversionbuffer,runtimenamelength,runtimenamebuffer,namelength,namebuffer,toolkitslength,toolkitsbuffer,solutionlength,solutionbuffer,binlength,binbuffer]);
+-	
+-		request.open("POST", this.url, true);
+-		request.responseType = 'application/octet-stream';
+-		request.send(data);
+-		
+-	} //}}}
+-	this.ab2str = function(buf) { //{{{
+-		return String.fromCharCode.apply(null, new Uint16Array(buf));
+-	} //}}}
+-	this.str2ab = function(str) { //{{{
+-		var buf = new Uint8Array(str.length);
+-		for (var i=0, strLen=str.length; i < strLen; i++) {
+-			buf[i] = str.charCodeAt(i);
+-		}
+-		return buf;
+-	} //}}}
+-}
+-//LOCAL cluster class definition
+-//
+-//   Usage:
+-//      local=new local();
+-
+-function local (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   local cluster class echo: []'));
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "local";
+-	}// }}}
+-		this.checkconsistency = function (md,solution,analyses) { //{{{
+-		} //}}}
+-	//properties 
+-	// {{{
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//CONSTANTS class definition
+-//
+-//   Usage:
+-//      constants=constants();
+-
+-function constants() {
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-
+-			//acceleration due to gravity (m/s^2)
+-			this.g=9.81;
+-
+-			//Earth's rotation speed 
+-			this.omega = 7.292*1e-5;
+-
+-			//converstion from year to seconds
+-			this.yts=365*24*3600;
+-
+-			//the reference temperature for enthalpy model (cf Aschwanden)
+-			this.referencetemperature=223.15;
+-		}// }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   Constants parameters:")); 
+-			
+-			fielddisplay(this,'g','gravitational acceleration [m/s^2]');
+-			fielddisplay(this,'omega','angular velocity of Earth [rad/s]');
+-			fielddisplay(this,'yts','number of seconds in a year [s/yr]');
+-			fielddisplay(this,'referencetemperature','reference temperature used in the enthalpy model [K]');
+-
+-		} //}}}
+-		this.classname = function () { //{{{
+-			return "constants";
+-
+-		} //}}}
+-		this.checkconsistency = function(md,solution,analyses) {//% {{{
+-
+-			checkfield(md,'fieldname','constants.g','>=',0,'size',[1,1]); //We allow 0 for validation tests
+-			checkfield(md,'fieldname','constants.omega','>=',0,'size',[1,1]);
+-			checkfield(md,'fieldname','constants.yts','>',0,'size',[1,1]);
+-			checkfield(md,'fieldname','constants.referencetemperature','size',[1,1]);
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','g','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','yts','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','referencetemperature','format','Double');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-		this.g                    = 0.;
+-		this.omega                = 0.;
+-		this.yts                  = 0.;
+-		this.referencetemperature = 0.;
+-		this.setdefaultparameters();
+-		//}}}
+-}
+-//DAMAGE class definition
+-//
+-//   Usage:
+-//      damage=new damage();
+-
+-function damage (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		
+-		//damage parameters: 
+-		this.isdamage=0;
+-		this.D=0;
+-		this.law=0;
+-
+-		this.max_damage=1-1e-5; //if damage reaches 1, solve becomes singular, as viscosity becomes nil
+-
+-		//Type of stabilization used
+-		this.stabilization=4;
+-
+-		//Maximum number of iterations
+-		this.maxiter=100;
+-
+-		//finite element interpolation
+-		this.elementinterp='P1';
+-
+-		//damage evolution parameters 
+-		this.stress_threshold=1.3e5;
+-		this.kappa=2.8;
+-		this.healing=0;
+-		this.c1=0;
+-		this.c2=0;
+-		this.c3=0;
+-		this.c4=0;
+-		this.equiv_stress=0;
+-
+-		//output default:
+-		this.requested_outputs=['default'];
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   Damage:\n'));
+-
+-		fielddisplay(this,'isdamage','is damage mechanics being used? {true,false}');
+-		if (this.isdamage){
+-			fielddisplay(this,'law',"damage law ['0: analytical','1: pralong']");
+-			fielddisplay(this,'D','damage tensor (scalar)');
+-			fielddisplay(this,'spcdamage','damage constraints (NaN means no constraint)');
+-			fielddisplay(this,'max_damage','maximum possible damage (0<=max_damage<1)');
+-
+-			fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG (not working), 4: flux corrected transport');
+-			fielddisplay(this,'maxiter','maximum number of non linear iterations');
+-			fielddisplay(this,'elementinterp',"interpolation scheme for finite elements {'P1','P2'}");
+-			fielddisplay(this,'stress_threshold','stress threshold for damage initiation [Pa]');
+-			fielddisplay(this,'kappa','ductility parameter for stress softening and damage');
+-			fielddisplay(this,'c1','damage parameter 1');
+-			fielddisplay(this,'c2','damage parameter 2');
+-			fielddisplay(this,'c3','damage parameter 3');
+-			fielddisplay(this,'c4','damage parameter 4');
+-			fielddisplay(this,'healing','damage healing parameter');
+-			fielddisplay(this,'equiv_stress','0: von Mises, 1: max principal');
+-			fielddisplay(this,'requested_outputs','additional outputs requested');
+-		}
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "damage";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			
+-			checkfield(md,'fieldname','damage.isdamage','values',[1,0]);
+-			if (this.isdamage){
+-				checkfield(md,'fieldname','damage.law','numel',[1],'values',[0,1,2]);
+-				checkfield(md,'fieldname','damage.D','>=',0,'<=',this.max_damage,'size',[md.mesh.numberofvertices ,1]);
+-				checkfield(md,'fieldname','damage.spcdamage','Inf',1,'timeseries',1);
+-				checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0);
+-				checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0, 1, 2, 4]);
+-				checkfield(md,'fieldname','damage.maxiter','>=0',0);
+-				checkfield(md,'fieldname','damage.elementinterp','values',['P1','P2']);
+-				checkfield(md,'fieldname','damage.stress_threshold','>=',0);
+-				checkfield(md,'fieldname','damage.kappa','>',1);
+-				checkfield(md,'fieldname','damage.healing','>=',0);
+-				checkfield(md,'fieldname','damage.c1','>=',0);
+-				checkfield(md,'fieldname','damage.c2','>=',0);
+-				checkfield(md,'fieldname','damage.c3','>=',0);
+-				checkfield(md,'fieldname','damage.c4','>=',0);
+-				checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0, 1]);
+-				checkfield(md,'fieldname','damage.requested_outputs','stringrow',1);
+-			}
+-			else if (this.law!=0){
+-				if (solution==DamageEvolutionSolutionEnum()){
+-					throw Error('Invalid evolution law (md.damage.law) for a damage solution');
+-				}
+-			}
+-		} //}}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-		
+-			WriteData(fid,prefix,'object',this,'fieldname','isdamage','format','Boolean');
+-			if (this.isdamage){
+-				WriteData(fid,prefix,'object',this,'fieldname','law','format','Integer');
+-				WriteData(fid,prefix,'object',this,'fieldname','D','format','DoubleMat','mattype',1);
+-				WriteData(fid,prefix,'object',this,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-				WriteData(fid,prefix,'object',this,'fieldname','max_damage','format','Double');
+-
+-				WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+-				WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+-				WriteData(fid,prefix,'name','md.damage.elementinterp','data',StringToEnum(this.elementinterp),'format','Integer');
+-				WriteData(fid,prefix,'object',this,'fieldname','stress_threshold','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','kappa','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','c1','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','c2','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','c3','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','c4','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','healing','format','Double');
+-				WriteData(fid,prefix,'object',this,'fieldname','equiv_stress','format','Integer');
+-			}
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					outputs.push(this.defaultoutputs(md));
+-				}
+-			}
+-			if (this.isdamage){
+-				WriteData(fid,prefix,'data',outputs,'name','md.damage.requested_outputs','format','StringArray');
+-			}
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-		this.defaultoutputs = function(md){ //{{{
+-
+-			if (md.mesh.domaintype() == '2Dhorizontal') return 'DamageDbar';
+-			else return 'DamageD';
+-
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.isdamage            = 0;
+-	this.D                   = NaN;
+-	this.law                 = 0;
+-	this.spcdamage           = NaN; 
+-	this.max_damage          = 0;
+-
+-	//numerical
+-	this.stabilization       = 0;
+-	this.maxiter             = 0;
+-	this.elementinterp       = '';
+-
+-	//general parameters for evolution law: 
+-	this.stress_threshold    = 0;
+-	this.kappa               = 0;
+-	this.c1                  = 0;
+-	this.c2                  = 0;
+-	this.c3                  = 0;
+-	this.c4                  = 0;
+-	this.healing             = 0;
+-	this.equiv_stress		  = 0;
+-	this.requested_outputs   = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//DEBUG class definition
+-//
+-//   Usage:
+-//      debug=new debug();
+-
+-function debug (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "debug";
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   debug parameters:'));
+-		console.log(sprintf('   debug parameters:'));
+-
+-		fielddisplay(this,'valgrind','use Valgrind to debug (0 or 1)');
+-		fielddisplay(this,'gprof','use gnu-profiler to find out where the time is spent');
+-		fielddisplay(this,'profiling','enables profiling (memory, flops, time)');
+-
+-	}// }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','profiling','format','Boolean');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-
+-	//properties 
+-	// {{{
+-	this.valgrind = false;
+-	this.gprof    = false;
+-	this.profiling = false;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//FLAIM class definition
+-//
+-//   Usage:
+-//      flaim=new flaim();
+-
+-function flaim (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   FLAIM - Flight Line Adaptation using Ice sheet Modeling:')); 
+-
+-		console.log(sprintf('\n      Input:'));
+-		fielddisplay(this,'targets'            ,'name of kml output targets file ');
+-		fielddisplay(this,'tracks'             ,'name of kml input tracks file ');
+-		fielddisplay(this,'flightreqs'         ,'structure of kml flight requirements (not used yet)');
+-		fielddisplay(this,'criterion'          ,'element or nodal criterion for flight path evaluation (metric)');
+-
+-		console.log(sprintf('\n      Arguments:'));
+-		fielddisplay(this,'gridsatequator'     ,'number of grids at equator (determines resolution)');
+-		fielddisplay(this,'usevalueordering'   ,'flag to consider target values for flight path evaluation');
+-		fielddisplay(this,'split_antimeridian' ,'flag to split polygons on the antimeridian');
+-
+-		console.log(sprintf('\n      Optimization:'));
+-		fielddisplay(this,'path_optimize'     ,'optimize? (default false)');
+-		fielddisplay(this,'opt_ndir'     ,['number of directions to test when moving a point.  If this value = 1, a random direction is tested.', 'A value > 1 results in directions equally spaced from [0, 2*PI] being tested.', 'For example, 4 would result in directions [0, PI/2, PI, 3PI/2].']);
+-		fielddisplay(this,'opt_dist'     ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration');
+-		fielddisplay(this,'opt_niter'     ,['number of iterations (default 30,000) to run for flightplan optimization', 'i.e. the number of times to randomly select a point and move it.']);
+-
+-		console.log(sprintf('\n      Output:'));
+-		fielddisplay(this,'solution'           ,'name of kml solution file');
+-		fielddisplay(this,'quality'            ,'quality of kml solution');
+-
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses) { // {{{
+-
+-		//Early return
+-		if (solution!=FlaimSolutionEnum()) return;
+-
+-		checkfield(md,'fieldname','flaim.tracks','file',1);
+-		if (isNaN(md.flaim.criterion) | md.flaim.criterion.length==0){
+-			checkfield(md,'fieldname','flaim.targets','file',1);
+-		}
+-		else{
+-			checkfield(md,'fieldname','flaim.criterion','numel',[md.mesh.numberofvertices, md.mesh.numberofelements]);
+-		}
+-	} //}}}
+-	//properties 
+-	// {{{
+-
+-	this.targets            = '';
+-	this.tracks             = '';
+-	this.flightreqs         = {};
+-	this.criterion          = NaN;
+-	this.gridsatequator     = 200000;
+-	this.usevalueordering   = true;
+-	this.split_antimeridian = true;
+-	this.solution           = '';
+-	this.quality            = 0;
+-	this.path_optimize      = false;
+-	this.opt_ndir           = 1;
+-	this.opt_dist           = 25;
+-	this.opt_niter          = 30000;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//FLOWEQUATION class definition
+-//
+-//   Usage:
+-//      flowequation=new flowequation();
+-
+-function flowequation (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		//P1 for SSA
+-		this.fe_SSA= 'P1';
+-
+-		//P1 for HO
+-		this.fe_HO= 'P1';
+-
+-		//MINI condensed element for FS by default
+-		this.fe_FS = 'MINIcondensed';
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   flow equation parameters:'));
+-
+-		fielddisplay(this,'isSIA','is the Shallow Ice Approximation (SIA) used ?');
+-		fielddisplay(this,'isSSA','is the Shelfy-Stream Approximation (SSA) used ?');
+-		fielddisplay(this,'isL1L2','is the L1L2 approximation used ?');
+-		fielddisplay(this,'isHO','is the Higher-Order (HO) approximation used ?');
+-		fielddisplay(this,'isFS','are the Full-FS (FS) equations used ?');
+-		fielddisplay(this,'fe_SSA',"Finite Element for SSA  'P1', 'P1bubble' 'P1bubblecondensed' 'P2'");
+-		fielddisplay(this,'fe_HO', "Finite Element for HO   'P1' 'P1bubble' 'P1bubblecondensed' 'P1xP2' 'P2xP1' 'P2'");
+-		fielddisplay(this,'fe_FS', "Finite Element for FS   'P1P1' (debugging only) 'P1P1GLS' 'MINIcondensed' 'MINI' 'TaylorHood' 'XTaylorHood'");
+-		fielddisplay(this,'vertex_equation','flow equation for each vertex');
+-		fielddisplay(this,'element_equation','flow equation for each element');
+-		fielddisplay(this,'borderSSA',"vertices on SSA's border (for tiling)");
+-		fielddisplay(this,'borderHO',"vertices on HO's border (for tiling)");
+-		fielddisplay(this,'borderFS',"vertices on FS' border (for tiling)");
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "flowequation";
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) {//{{{
+-
+-			//Early return
+-			if ( ((!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)) & (!ArrayAnyEqual(ArrayIsMember(StressbalanceSIAAnalysisEnum(),analyses),1))) | 
+-					(solution==TransientSolutionEnum() & md.trans.isstressbalance==0)
+-			   ) return ;
+-
+-			checkfield(md,'fieldname','flowequation.isSIA','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.isSSA','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.isL1L2','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.isHO','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.isFS','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.fe_SSA','values',['P1','P1bubble','P1bubblecondensed','P2','P2bubble']);
+-			checkfield(md,'fieldname','flowequation.fe_HO' ,'values',['P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2','P2bubble','P1xP3','P2xP4']);
+-			checkfield(md,'fieldname','flowequation.fe_FS' ,'values',['P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood','LATaylorHood','XTaylorHood','OneLayerP4z','CrouzeixRaviart','LACrouzeixRaviart']);
+-			checkfield(md,'fieldname','flowequation.augmented_lagrangian_r','numel',[1],'>=',0.);
+-			checkfield(md,'fieldname','flowequation.augmented_lagrangian_rlambda','numel',[1],'>=',0.);
+-			checkfield(md,'fieldname','flowequation.augmented_lagrangian_rhop','numel',[1],'>=',0.);
+-			checkfield(md,'fieldname','flowequation.augmented_lagrangian_rholambda','numel',[1],'>=',0.);
+-			checkfield(md,'fieldname','flowequation.XTH_theta','numel',[1],'>=',0.,'<',0.5);
+-			checkfield(md,'fieldname','flowequation.borderSSA','size',[md.mesh.numberofvertices, 1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.borderHO','size',[md.mesh.numberofvertices, 1],'values',[0, 1]);
+-			checkfield(md,'fieldname','flowequation.borderFS','size',[md.mesh.numberofvertices, 1],'values',[0, 1]);
+-			if (md.mesh.domaintype() == '2Dhorizontal'){
+-				checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices, 1],'values',[1,2]);
+-				checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements, 1],'values',[1,2]);
+-			}
+-			else if (md.mesh.domaintype() == '3Dsurface'){
+-				checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices, 1],'values',[1,2]);
+-				checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements, 1],'values',[1,2]);
+-			}
+-			else if (md.mesh.domaintype() =='2Dvertical'){
+-				checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices, 1],'values',[2,4,5]);
+-				checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements, 1],'values',[2,4,5]);
+-			}
+-			else if (md.mesh.domaintype() =='3D'){
+-				checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices, 1],'values',[0,1,2,3,4,5,6,7,8]);
+-				checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements, 1],'values',[0,1,2,3,4,5,6,7,8]);
+-			}
+-			else throw Error('Case not supported yet');
+-			
+-			if (!(this.isSIA | this.isSSA | this.isL1L2 | this.isHO | this.isFS)){
+-				md = checkmessage(md,['no element types set for this model']);
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(StressbalanceSIAAnalysisEnum(), analyses),1)){
+-				if (ArrayAnyEqual(this.element_equation,1)){
+-					if(this.vertex_equation & ArrayAnyBelowStrict(md.mask.groundedice_levelset)){
+-						console.log(sprintf("\n !!! Warning: SIA's model is not consistent on ice shelves !!!\n"));
+-					}
+-				}
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','isSIA','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isSSA','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isL1L2','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isHO','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isFS','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','fe_SSA','data',StringToEnum(this.fe_SSA),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','fe_HO','data',StringToEnum(this.fe_HO) ,'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','fe_FS','data',StringToEnum(this.fe_FS) ,'format','Integer');
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_r','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rhop','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rlambda','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rholambda','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','XTH_theta','data',this.XTH_theta ,'format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','borderHO','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','borderFS','format','DoubleMat','mattype',1);
+-
+-			//convert approximations to enums
+-			data=this.vertex_equation;
+-			
+-			//some optimization: 
+-			var noneap=NoneApproximationEnum();
+-			var siaap=SIAApproximationEnum();
+-			var ssaap=SSAApproximationEnum();
+-			var l1l2ap=L1L2ApproximationEnum();
+-			var hoap=HOApproximationEnum();
+-			var fsap=FSApproximationEnum();
+-			var ssahoap=SSAHOApproximationEnum();
+-			var hofsaap=HOFSApproximationEnum();
+-			var ssafsap=SSAFSApproximationEnum();
+-
+-			for(var i=0;i<data.length;i++){
+-				if(data[i]==0)data[i]=nonap;
+-				if(data[i]==1) data[i]=siaap;
+-				if(data[i]==2) data[i]=ssaap;
+-				if(data[i]==3) data[i]=l1l2ap;
+-				if(data[i]==4) data[i]=hoap;
+-				if(data[i]==5) data[i]=fsap;
+-				if(data[i]==6) data[i]=ssahoap;
+-				if(data[i]==7) data[i]=hofsaap;
+-				if(data[i]==8) data[i]=ssafsap;
+-			}
+-			WriteData(fid,prefix,'data',data,'name','md.flowequation.vertex_equation','format','DoubleMat','mattype',1);
+-
+-			data=this.element_equation;
+-			for(var i=0;i<data.length;i++){
+-				if(data[i]==0) data[i]=nonap;
+-				if(data[i]==1) data[i]=siaap;
+-				if(data[i]==2) data[i]=ssaap;
+-				if(data[i]==3) data[i]=l1l2ap;
+-				if(data[i]==4) data[i]=hoap;
+-				if(data[i]==5) data[i]=fsap;
+-				if(data[i]==6) data[i]=ssahoap;
+-				if(data[i]==7) data[i]=ssafsap;
+-				if(data[i]==8) data[i]=hofsaap;
+-			}
+-			WriteData(fid,prefix,'data',data,'name','md.flowequation.element_equation','format','DoubleMat','mattype',2);
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.isSIA                          = 0;
+-	this.isSSA                          = 0;
+-	this.isL1L2                         = 0;
+-	this.isHO                           = 0;
+-	this.isFS                           = 0;
+-	this.fe_SSA                         = '';
+-	this.fe_HO                          = '';
+-	this.fe_FS                          = '';
+-	this.augmented_lagrangian_r         = 1.;
+-	this.augmented_lagrangian_rhop      = 1.;
+-	this.augmented_lagrangian_rlambda   = 1.;
+-	this.augmented_lagrangian_rholambda = 1.;
+-	this.XTH_theta                      = 0.;
+-	this.vertex_equation                = NaN;
+-	this.element_equation               = NaN;
+-	this.borderSSA                      = NaN;
+-	this.borderHO                       = NaN;
+-	this.borderFS                       = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//FRICTION class definition
+-//
+-//   Usage:
+-//      friction=friction();
+-
+-function friction (){
+-	//methods
+-	this.setdefaultparameters = function(){ // {{{
+-
+-	} // }}}
+-	this.disp= function (){// {{{
+-		console.log(sprintf('Basal shear stress parameters: Sigma_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)'));
+-		fielddisplay(this,'coefficient','friction coefficient [SI]');
+-		fielddisplay(this,'p','p exponent');
+-		fielddisplay(this,'q','q exponent');
+-	} // }}}
+-    this.extrude = function(md) {//{{{
+-
+-        console.log("coefficient");
+-        console.log(self.coefficient);
+-        console.log("p");
+-        console.log(self.p);
+-        console.log("q");
+-        console.log(self.q);
+-        self.coefficient = project3d(md, 'vector', self.coefficient, 'type', 'node', 'layer', 1);
+-        self.p = project3d(md, 'vector', self.p, 'type', 'element');
+-        self.q = project3d(md, 'vector', self.q, 'type', 'element');
+-    }//}}}
+-	this.classname= function (){// {{{
+-		return "friction";
+-	} // }}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			//Early return
+-			if ((!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)) & (!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1))){
+-				return; 
+-			}
+-			md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements ,1]);
+-			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements ,1]);
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'name','md.friction.law','data',1,'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			//WriteData(fid,prefix,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','p','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'object',this,'fieldname','q','format','DoubleMat','mattype',2);
+-			
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	//{{{
+-	this.coefficient = NaN;
+-	this.p           = NaN;
+-	this.q           = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//GEOMETRY class definition
+-//
+-//   Usage:
+-//      geometry=geometry();
+-
+-function geometry(){
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-		}// }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   Geometry parameters:"));
+-
+-			fielddisplay(this,'surface','ice upper surface elevation [m]');
+-			fielddisplay(this,'thickness','ice thickness [m]');
+-			fielddisplay(this,'base','ice base elevation [m]');
+-			fielddisplay(this,'bed','bed elevation [m]');
+-		} //}}}
+-        this.extrude = function(md) {//{{{
+-            this.surface=project3d(md,'vector',this.surface,'type','node');
+-            this.thickness=project3d(md,'vector',this.thickness,'type','node');
+-            this.hydrostatic_ratio=project3d(md,'vector',this.hydrostatic_ratio,'type','node');
+-            this.base=project3d(md,'vector',this.base,'type','node');
+-            this.bed=project3d(md,'vector',this.bed,'type','node');
+-        }//}}}
+-		this.classname = function () { //{{{
+-			return 'geometry';
+-		} //}}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			if ((solution==TransientSolutionEnum() & md.trans.isgia) | (solution==GiaSolutionEnum())){
+-				checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1,'>=',0);
+-			}
+-			else{
+-				checkfield(md,'fieldname','geometry.surface'  ,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','geometry.base'      ,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','geometry.thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1],'>',0);
+-				for(var i=0;i<md.mesh.numberofvertices;i++){
+-					if (Math.abs(md.geometry.thickness.thickness-md.geometry.surface+md.geometry.base)>Math.pow(10,9)){
+-						md = checkmessage(md,'equality thickness=surface-base violated');
+-						break;
+-					}
+-				}
+-				if (solution==TransientSolutionEnum() & md.trans.isgroundingline){
+-					checkfield(md,'fieldname','geometry.bed','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				}
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','surface','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'fieldname','base','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','bed','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.hydrostatic_ratio=NullFix(this.hydrostatic_ratio,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-		this.surface           = NaN;
+-		this.thickness         = NaN;
+-		this.base              = NaN;
+-		this.bed               = NaN;
+-		this.hydrostatic_ratio = NaN;
+-		this.setdefaultparameters();
+-		//}}}
+-}
+-//GIA class definition
+-//
+-//   Usage:
+-//      gia=new gia();
+-
+-function gia (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		this.cross_section_shape=1; //square as default (see iedge in GiaDeflectionCorex)
+-	
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   gia parameters:'));
+-
+-		fielddisplay(this,'mantle_viscosity','mantle viscosity[Pa s]');
+-		fielddisplay(this,'lithosphere_thickness','lithosphere thickness (km)');
+-		fielddisplay(this,'cross_section_shape','1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "gia";
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses) { // {{{
+-
+-		if(!ArrayAnyEqual(ArrayIsMember(GiaAnalysisEnum(),analyses),1))return;
+-
+-		checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);
+-		checkfield(md,'fieldname','gia.lithosphere_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);
+-		checkfield(md,'fieldname','gia.cross_section_shape','numel',[1],'values',[1,2]);
+-
+-		//be sure that if we are running a masstransport ice flow model coupled with gia, that thickness forcings 
+-		//are not provided into the future.
+-		if (solution==TransientSolutionEnum() & md.trans.ismasstransport & md.trans.isgia){
+-			//figure out if thickness is a transient forcing: 
+-			if (md.geometry.thickness.length == (md.mesh.numberofvertices+1)){
+-				//recover the furthest time "in time": 
+-				t=md.geometry.thickness[0].length;
+-				if(md.geometry.thickness[md.geometry.thickness.length-1][t-1]!=md.timestepping.start_time){
+-					md.checkmessage('if ismasstransport is on, transient thickness forcing for the gia model should not be provided in the future. Synchronize your start_time to correspond to the most recent transient thickness forcing timestep');
+-				}
+-			}
+-		}
+-	} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',Math.pow(10,3)); //from km to m
+-			WriteData(fid,prefix,'object',this,'fieldname','cross_section_shape','format','Integer');
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.mantle_viscosity=NullFix(this.mantle_viscosity,NaN);
+-			this.lithosphere_thickness=NullFix(this.lithosphere_thickness,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.mantle_viscosity              = NaN;
+-	this.lithosphere_thickness         = NaN;
+-	this.cross_section_shape           = 0;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//GROUNDINGLINE class definition
+-//
+-//   Usage:
+-//      groundingline=new groundingline();
+-
+-function groundingline (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		//Type of migration
+-		this.migration='None';
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   grounding line migration parameters:'));
+-		fielddisplay(this,'migration',"type of grounding line migration: 'SoftMigration','AggressiveMigration','SubelementMigration','SubelementMigration2' or 'None'");
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "groundingline";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) {// {{{
+-
+-			checkfield(md,'fieldname','groundingline.migration','values',['None', 'AggressiveMigration', 'SoftMigration', 'SubelementMigration', 'SubelementMigration2', 'Contact', 'None', 'GroundingOnly']);
+-
+-			if (this.migration !='None'){
+-				if (isNaN(md.geometry.bed)){
+-					md.checkmessage('requesting grounding line migration, but bathymetry is absent!');
+-				}
+-				for (var i=0;i<md.mesh.numberofvertices;i++){
+-					if(md.mask.groundedice_levelset[i]>0){
+-						md.checkmessage('base not equal to bed on grounded ice!');
+-						break;
+-					}
+-					if(md.geometry.bed[i] - md.geometry.base[i] > Math.pow(10,-9)){
+-						md = checkmessage(md,'bed superior to base on floating ice!');
+-						break;
+-					}
+-				}
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'data',StringToEnum(this.migration),'name','md.groundingline.migration','format','Integer');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.migration    = '';
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//HYDROLOGYSHREVE class definition
+-//
+-//   Usage:
+-//      hydrologyshreve=new hydrologyshreve();
+-
+-function hydrologyshreve (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//Type of stabilization to use 0:nothing 1:artificial_diffusivity
+-		this.stabilization=1;
+-
+-	}// }}}
+-		this.disp= function(){// {{{
+-
+-		console.log(sprintf('   hydrologyshreve solution parameters:'));
+-		fielddisplay(this,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]');
+-		fielddisplay(this,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.');
+-
+-	}// }}}
+-		this.classname= function(){// {{{
+-			return "hydrologyshreve";
+-
+-		}// }}}
+-	this.type= function(){// {{{
+-
+-		return "hydrologyshreve";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			//Early return
+-			if(!ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1)) return;
+-
+-			checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1);
+-			checkfield(md,'fieldname','hydrology.stabilization','>=',0);
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologyshreveEnum(),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Double');
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.spcwatercolumn=NullFix(this.spcwatercolumn,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.spcwatercolumn = NaN;
+-	this.stabilization  = 0;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//INITIALIZATION class definition
+-//
+-//   Usage:
+-//      initialization=new initialization();
+-
+-function initialization (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   initial field values:'));
+-
+-		fielddisplay(this,'vx','x component of velocity [m/yr]');
+-		fielddisplay(this,'vy','y component of velocity [m/yr]');
+-		fielddisplay(this,'vz','z component of velocity [m/yr]');
+-		fielddisplay(this,'vel','velocity norm [m/yr]');
+-		fielddisplay(this,'pressure','pressure field [Pa]');
+-		fielddisplay(this,'temperature','temperature [K]');
+-		fielddisplay(this,'waterfraction','fraction of water in the ice');
+-		fielddisplay(this,'sediment_head','sediment water head of subglacial system [m]');
+-		fielddisplay(this,'epl_head','epl water head of subglacial system [m]');
+-		fielddisplay(this,'epl_thickness','epl layer thickness [m]');
+-		fielddisplay(this,'watercolumn','thickness of subglacial water [m]');
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)){
+-				if (!(isNaN(md.initialization.vx) | isNaN(md.initialization.vy))){
+-					checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-					checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				}
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+-				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum())){
+-				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				//Triangle with zero velocity
+-				for(var i=0;i<md.mesh.numberofelements;i++){
+-					var sum=0;
+-					for(var j=0;j<md.mesh.elements[0].length;j++){
+-						if  ((md.initialization.vx[md.mesh.elements[i][j]-1]==0) & (md.initialization.vy[md.mesh.elements[i][j]-1]==0)) sum+=1;
+-					}
+-					if (sum==md.mesh.elements[0].length){
+-						md.checkmessage('at least one triangle has all its vertices with a zero velocity');
+-					}
+-				}
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1)){
+-				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				if (md.mesh.dimension() == 3){
+-					checkfield(md,'fieldname','initialization.vz','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-				}
+-				checkfield(md,'fieldname','initialization.pressure','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-				checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-			}
+-			if( ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1) & md.thermal.isenthalpy){
+-				checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices, 1]);
+-				checkfield(md,'fieldname','initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices, 1]);
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1)){
+-				if (md.hydrology.type() == 'hydrologyshreve'){
+-					checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-				}
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCInefficientAnalysisEnum(),analyses),1)){
+-				if (md.hydrology.type() == 'hydrologydc'){
+-					checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-				}
+-			}
+-			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCEfficientAnalysisEnum(),analyses),1)){
+-				if (md.hydrology.type() == 'hydrologydc'){
+-					if (md.hydrology.isefficientlayer==1){
+-						checkfield(md,'fieldname','initialization.epl_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-						checkfield(md,'fieldname','initialization.epl_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+-					}
+-				}
+-			}
+-		} //}}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','pressure','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','temperature','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','waterfraction','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','sediment_head','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','epl_head','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','epl_thickness','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','watercolumn','format','DoubleMat','mattype',1);
+-
+-			if (md.thermal.isenthalpy){
+-				tpmp=NewArrayFill(md.mesh.numberofvertices,0);
+-				for (var i=0;i<md.mesh.numberofvertices;i++) tpmp[i]= md.materials.meltingpoint - md.materials.beta*md.initialization.pressure[i];
+-				enthalpy=NewArrayFill(md.mesh.numberofvertices,0); 
+-				for (var i=0;i<md.mesh.numberofvertices;i++)enthalpy[i] = md.materials.heatcapacity*(md.initialization.temperature[i]-md.constants.referencetemperature);
+-				
+-				for (var i=0;i<md.mesh.numberofvertices;i++)if(md.initialization.temperature[i]>=tpmp[i]){
+-					enthalpy[i] = md.materials.heatcapacity*(tpmp[i] - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[i];
+-				}
+-				WriteData(fid,prefix,'data',enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
+-			}
+-		}//}}}
+-		this.fix=function(md) { //{{{
+-			this.vx=FloatFix(this.vx,md.mesh.numberofvertices); 
+-			this.vy=FloatFix(this.vx,md.mesh.numberofvertices); 
+-			this.vy=FloatFix(this.vx,md.mesh.numberofvertices); 
+-			this.waterfraction=NullFix(this.waterfraction,NaN);
+-			this.sediment_head=NullFix(this.sediment_head,NaN);
+-			this.epl_head=NullFix(this.epl_head,NaN);
+-			this.epl_thickness=NullFix(this.epl_thickness,NaN);
+-			this.watercolumn=NullFix(this.watercolumn,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.vx            = NaN;
+-	this.vy            = NaN;
+-	this.vz            = NaN;
+-	this.vel           = NaN;
+-	this.pressure      = NaN;
+-	this.temperature   = NaN;
+-	this.waterfraction = NaN;
+-	this.sediment_head = NaN;
+-	this.epl_head      = NaN;
+-	this.epl_thickness = NaN;
+-	this.watercolumn   = NaN;
+-	this.setdefaultparameters();
+-
+-	//}}}
+-}
+-//INVERSION class definition
+-//
+-//   Usage:
+-//      inversion=new inversion();
+-
+-function inversion (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//default is incomplete adjoint for now
+-		this.incomplete_adjoint=1;
+-
+-		//parameter to be inferred by control methods (only
+-		//drag and B are supported yet)
+-		this.control_parameters=['FrictionCoefficient'];
+-
+-		//number of steps in the control methods
+-		this.nsteps=20;
+-
+-		//maximum number of iteration in the optimization algorithm for
+-		//each step
+-		this.maxiter_per_step=20*NewArrayFill(this.nsteps,1);
+-
+-		//the inversed parameter is updated as follows:
+-		//new_par=old_par + gradient_scaling(n)*C*gradient with C in [0 1];
+-		//usually the gradient_scaling must be of the order of magnitude of the 
+-		//inversed parameter (10^8 for B, 50 for drag) and can be decreased
+-		//after the first iterations
+-		this.gradient_scaling=NewArrayFill(this.nsteps,50);
+-
+-		//several responses can be used:
+-		this.cost_functions=101;
+-
+-		//step_threshold is used to speed up control method. When
+-		//misfit(1)/misfit(0) < this.step_threshold, we go directly to
+-		//the next step
+-		this.step_threshold=NewArrayFill(this.nsteps,.7); //30 per cent decrement.
+-
+-		//cost_function_threshold is a criteria to stop the control methods.
+-		//if J[n]-J[n-1]/J[n] < criteria, the control run stops
+-		//NaN if not applied
+-		this.cost_function_threshold=NaN; //not activated
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   inversion parameters:'));
+-		fielddisplay(this,'iscontrol','is inversion activated?');
+-		fielddisplay(this,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');
+-		fielddisplay(this,'control_parameters',"ex: {'FrictionCoefficient'}, or {'MaterialsRheologyBbar'}");
+-		fielddisplay(this,'nsteps','number of optimization searches');
+-		fielddisplay(this,'cost_functions','indicate the type of response for each optimization step');
+-		fielddisplay(this,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
+-		fielddisplay(this,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied');
+-		fielddisplay(this,'maxiter_per_step','maximum iterations during each optimization step');
+-		fielddisplay(this,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step');
+-		fielddisplay(this,'step_threshold','decrease threshold for misfit, default is 30%');
+-		fielddisplay(this,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
+-		fielddisplay(this,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
+-		fielddisplay(this,'vx_obs','observed velocity x component [m/yr]');
+-		fielddisplay(this,'vy_obs','observed velocity y component [m/yr]');
+-		fielddisplay(this,'vel_obs','observed velocity magnitude [m/yr]');
+-		fielddisplay(this,'thickness_obs','observed thickness [m]');
+-		fielddisplay(this,'surface_obs','observed surface elevation [m]');
+-		console.log('Available cost functions:');
+-		console.log('   101: SurfaceAbsVelMisfit');
+-		console.log('   102: SurfaceRelVelMisfit');
+-		console.log('   103: SurfaceLogVelMisfit');
+-		console.log('   104: SurfaceLogVxVyMisfit');
+-		console.log('   105: SurfaceAverageVelMisfit');
+-		console.log('   201: ThicknessAbsMisfit');
+-		console.log('   501: DragCoefficientAbsGradient');
+-		console.log('   502: RheologyBbarAbsGradient');
+-		console.log('   503: ThicknessAbsGradient');
+-
+-	}// }}}
+-    this.extrude = function(md) {//{{{
+-        this.vx_obs=project3d(md, 'vector', this.vx_obs, 'type', 'node');
+-        this.vy_obs=project3d(md,'vector',this.vy_obs,'type','node');
+-        this.vel_obs=project3d(md,'vector',this.vel_obs,'type','node');
+-        this.thickness_obs=project3d(md,'vector',this.thickness_obs,'type','node');
+-
+-        if (numel(this.cost_functions_coefficients)>1) {
+-            this.cost_functions_coefficients=project3d(md,'vector',this.cost_functions_coefficients,'type','node');
+-        }			
+-        if (numel(this.min_parameters)>1) {
+-            this.min_parameters=project3d(md,'vector',this.min_parameters,'type','node');
+-        }
+-        if (numel(this.max_parameters)>1) {
+-            this.max_parameters=project3d(md,'vector',this.max_parameters,'type','node');
+-        }
+-    }//}}}
+-	this.classname= function(){// {{{
+-		return "inversion";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			//Early return
+-			if (!this.iscontrol) return;
+-
+-			num_controls=md.inversion.control_parameters.length;
+-			num_costfunc=md.inversion.control_parameters[0].length;
+-
+-			checkfield(md,'fieldname','inversion.iscontrol','values',[0, 1]);
+-			checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 ,1]);
+-			checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
+-			checkfield(md,'fieldname','inversion.nsteps','numel',1,'>=',0);
+-			checkfield(md,'fieldname','inversion.maxiter_per_step','size',[md.inversion.nsteps, 1],'>=',0);
+-			checkfield(md,'fieldname','inversion.step_threshold','size',[md.inversion.nsteps, 1]);
+-			checkfield(md,'fieldname','inversion.cost_functions','size',[1, num_costfunc],'values',supportedcostfunctions());
+-			checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices, num_costfunc],'>=',0);
+-			checkfield(md,'fieldname','inversion.gradient_scaling','size',[md.inversion.nsteps, num_controls]);
+-			checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices , num_controls]);
+-			checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices ,num_controls]);
+-
+-			//Only SSA, HO and FS are supported right now
+-			if (solution==StressbalanceSolutionEnum()){
+-				if (!(md.flowequation.isSSA | md.flowequation.isHO | md.flowequation.isFS | md.flowequation.isL1L2)){
+-					md.checkmessage('inversion can only be performed for SSA, HO or FS ice flow models');
+-				}
+-			}
+-
+-			if (solution==BalancethicknessSolutionEnum()){
+-				checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1);
+-			}
+-			else if (solution==BalancethicknessSoftSolutionEnum()){
+-				checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices, 1],'NaN',1,'Inf',1);
+-			}
+-			else{
+-				checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1);
+-				checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1);
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'name','md.inversion.type','data',0,'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','iscontrol','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','incomplete_adjoint','format','Boolean');
+-			if (!this.iscontrol) return;
+-			WriteData(fid,prefix,'object',this,'fieldname','nsteps','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','cost_function_threshold','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','min_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','max_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','step_threshold','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			if(this.thickness_obs.length==md.mesh.numberofelements) mattype=2;
+-			else mattype=1;
+-			WriteData(fid,prefix,'object',this,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+-			WriteData(fid,prefix,'object',this,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+-
+-			//process control parameters
+-			num_control_parameters=this.control_parameters.length;
+-			WriteData(fid,prefix,'object',this,'fieldname','control_parameters','format','StringArray');
+-			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
+-
+-			//process cost functions
+-			num_cost_functions=this.cost_functions[0].length;
+-			data=marshallcostfunctions(this.cost_functions);
+-			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.control_parameters=NullFix(this.control_parameters,NaN);
+-			this.maxiter_per_step=NullFix(this.maxiter_per_step,NaN);
+-			this.cost_functions=NullFix(this.cost_functions,NaN);
+-			this.cost_functions_coefficients=NullFix(this.cost_functions_coefficients,NaN);
+-			this.cost_function_threshold=NullFix(this.cost_function_threshold,NaN);
+-			this.gradient_scaling=NullFix(this.gradient_scaling,NaN);
+-			this.min_parameters=NullFix(this.min_parameters,NaN);
+-			this.max_parameters=NullFix(this.max_parameters,NaN);
+-			this.step_threshold=NullFix(this.step_threshold,NaN);
+-			this.vx_obs=NullFix(this.vx_obs,NaN);
+-			this.vy_obs=NullFix(this.vy_obs,NaN);
+-			this.vz_obs=NullFix(this.vz_obs,NaN);
+-			this.vel_obs=NullFix(this.vel_obs,NaN);
+-			this.thickness_obs=NullFix(this.thickness_obs,NaN);
+-			this.surface_obs=NullFix(this.surface_obs,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.iscontrol                   = 0;
+-	this.incomplete_adjoint          = 0;
+-	this.control_parameters          = NaN;
+-	this.nsteps                      = 0;
+-	this.maxiter_per_step            = NaN;
+-	this.cost_functions              = NaN;
+-	this.cost_functions_coefficients = NaN;
+-	this.gradient_scaling            = NaN;
+-	this.cost_function_threshold     = 0;
+-	this.min_parameters              = NaN;
+-	this.max_parameters              = NaN;
+-	this.step_threshold              = NaN;
+-	this.vx_obs                      = NaN;
+-	this.vy_obs                      = NaN;
+-	this.vz_obs                      = NaN;
+-	this.vel_obs                     = NaN;
+-	this.thickness_obs               = NaN;
+-	this.surface_obs                 = NaN;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//MASK class definition
+-//
+-//   Usage:
+-//      mask= new mask();
+-
+-function mask () {
+-	//properties 
+-	// {{{
+-		this.groundedice_levelset                           = NaN;
+-		this.ice_levelset                           = NaN;
+-		//}}}
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-		} // }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   mask:")); 
+-
+-			fielddisplay(this,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0");
+-			fielddisplay(this,"ice_levelset","presence of ice if < 0, icefront position if = 0, no ice if > 0");
+-		} //}}}
+-		this.classname = function () { //{{{
+-			return "mask";
+-		} //}}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			checkfield(md,'fieldname','mask.groundedice_levelset','size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mask.ice_levelset'        ,'size',[md.mesh.numberofvertices, 1]);
+-			var isice=NewArrayFill(md.mesh.numberofvertices,0); 
+-			for(var i=0;i<md.mesh.numberofvertices;i++)if(md.mask.ice_levelset[i]<=0)isice[i]=1;
+-			if (ArraySum(isice)==0){
+-				console.log('no ice present in the domain');
+-			}
+-			if (ArrayMax(md.mask.ice_levelset)<0){
+-				console.log('no ice front provided');
+-			}
+-				
+-			var icefront=NewArrayFill(md.mesh.numberofelements,0);
+-			for(var i=0;i<md.mesh.numberofelements;i++){
+-				for(var j=0;j<md.mesh.elements[0].length;j++){
+-					icefront[i]+=(md.mask.ice_levelset[md.mesh.elements[i][j]-1]==0);
+-				}
+-			}
+-			if ((ArrayMax(icefront)==3 & (md.mesh.elementtype() == 'Tria')) | (ArrayMax(icefront)==6 & md.mesh.elementtype() == 'Penta')){
+-				if (md.mesh.elementtype()=='Tria'){
+-					var pos=ArrayFindEqual(icefront,3); numberemptyelements=pos.length;
+-				}
+-				else if (md.mesh.elementtype() == 'Penta'){
+-					var pos=ArrayFindEqual(icefront,6); numberemptyelements=pos.length;
+-				}
+-				throw Error(sprintf(" %i have all nodes on ice front, change md.mask.ice_levelset to fix it",numberemptyelements));
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','ice_levelset','format','DoubleMat','mattype',1);
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-
+-}
+-//MASKPSL class definition
+-//
+-//   Usage:
+-//      maskpsl= new maskpsl();
+-
+-function maskpsl () {
+-	//properties 
+-	// {{{
+-		this.groundedice_levelset                           = NaN;
+-		this.ice_levelset                           = NaN;
+-		this.land_levelset                           = NaN;
+-		this.ocean_levelset                           = NaN;
+-		//}}}
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-		} // }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   mask:")); 
+-
+-			fielddisplay(this,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0");
+-			fielddisplay(this,"ice_levelset","presence of ice if < 0, icefront position if = 0, no ice if > 0");
+-			fielddisplay(this,"ocean_levelset","is the vertex on the ocean? yes if = 1, no if = 0");
+-			fielddisplay(this,"land_levelset","is the vertex on land? yes if = 1, no if = 0");
+-		} //}}}
+-		this.classname = function () { //{{{
+-			return "maskpsl";
+-		} //}}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			checkfield(md,'fieldname','mask.groundedice_levelset','size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mask.ice_levelset'        ,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mask.ocean_levelset'        ,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mask.land_levelset'        ,'size',[md.mesh.numberofvertices, 1]);
+-			
+-			var isice=NewArrayFill(md.mesh.numberofvertices,0); 
+-			for(var i=0;i<md.mesh.numberofvertices;i++)if(md.mask.ice_levelset[i]<=0)isice[i]=1;
+-			if (ArraySum(isice)==0){
+-				console.log('no ice present in the domain');
+-			}
+-			if (ArrayMax(md.mask.ice_levelset)<0){
+-				console.log('no ice front provided');
+-			}
+-				
+-			var icefront=NewArrayFill(md.mesh.numberofelements,0);
+-			for(var i=0;i<md.mesh.numberofelements;i++){
+-				for(var j=0;j<md.mesh.elements[0].length;j++){
+-					icefront[i]+=(md.mask.ice_levelset[md.mesh.elements[i][j]-1]==0);
+-				}
+-			}
+-			if ((ArrayMax(icefront)==3 & (md.mesh.elementtype() == 'Tria')) | (ArrayMax(icefront)==6 & md.mesh.elementtype() == 'Penta')){
+-				if (md.mesh.elementtype()=='Tria'){
+-					var pos=ArrayFindEqual(icefront,3); numberemptyelements=pos.length;
+-				}
+-				else if (md.mesh.elementtype() == 'Penta'){
+-					var pos=ArrayFindEqual(icefront,6); numberemptyelements=pos.length;
+-				}
+-				throw Error(sprintf(" %i have all nodes on ice front, change md.mask.ice_levelset to fix it",numberemptyelements));
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-
+-}
+-//MASSTRANSPORT class definition
+-//
+-//   Usage:
+-//      masstransport=new masstransport();
+-
+-function masstransport (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
+-		this.stabilization=1;
+-
+-		//Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
+-		this.penalty_factor=3;
+-
+-		//Minimum ice thickness that can be used
+-		this.min_thickness=1;
+-
+-		//Hydrostatic adjustment
+-		this.hydrostatic_adjustment='Absolute';
+-
+-		//default output
+-		this.requested_outputs=['default'];
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   Masstransport solution parameters:'));
+-		fielddisplay(this,'spcthickness','thickness constraints (NaN means no constraint) [m]');
+-		fielddisplay(this,'isfreesurface','do we use free surfaces (FS only) are mass conservation');
+-		fielddisplay(this,'min_thickness','minimum ice thickness allowed [m]');
+-		fielddisplay(this,'hydrostatic_adjustment',"adjustment of ice shelves surface and bed elevations: 'Incremental' or 'Absolute' ");
+-		fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin, 4: Flux Correction Transport');
+-
+-		console.log(sprintf('\n      %s','Penalty options:'));
+-		fielddisplay(this,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+-		fielddisplay(this,'vertex_pairing','pairs of vertices that are penalized');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "masstransport";
+-	}// }}}
+-		this.checkconsistency = function (md,solution,analyses){  // {{{
+-
+-			//Early return
+-			if(!ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1) | (solution==TransientSolutionEnum() & md.trans.ismasstransport==0)) return; 
+-
+-			checkfield(md,'fieldname','masstransport.spcthickness','Inf',1,'timeseries',1);
+-			checkfield(md,'fieldname','masstransport.isfreesurface','values',[0 ,1]);
+-			checkfield(md,'fieldname','masstransport.hydrostatic_adjustment','values',['Absolute', 'Incremental']);
+-			checkfield(md,'fieldname','masstransport.stabilization','values',[0,1,2,3,4]);
+-			checkfield(md,'fieldname','masstransport.min_thickness','>',0);
+-			checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1);
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var yts=365.*24.*3600.;
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'fieldname','isfreesurface','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','min_thickness','format','Double');
+-			WriteData(fid,prefix,'data',StringToEnum(this.hydrostatic_adjustment),'format','Integer','name','md.masstransport.hydrostatic_adjustment');
+-			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',this,'fieldname','penalty_factor','format','Double');
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}
+-			WriteData(fid,prefix,'data',outputs,'name','md.masstransport.requested_outputs','format','StringArray');
+-		}//}}}
+-		this.defaultoutputs = function(md) { //{{{
+-			return ['Thickness','Surface','Base'];
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.spcthickness=NullFix(this.spcthickness,NaN);
+-			this.vertex_pairing=NullFix(this.vertex_pairing,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.spcthickness           = NaN;
+-	this.isfreesurface          = 0;
+-	this.min_thickness          = 0;
+-	this.hydrostatic_adjustment = 0;
+-	this.stabilization          = 0;
+-	this.vertex_pairing         = NaN;
+-	this.penalty_factor         = 0;
+-	this.requested_outputs      = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//MATICE class definition
+-//
+-//   Usage:
+-//      matice=matice();
+-
+-function matice(){
+-	//methods
+-		this.setdefaultparameters = function(){ // {{{
+-
+-			//ice density (kg/m^3)
+-			this.rho_ice=917.;
+-
+-			//ocean water density (kg/m^3)
+-			this.rho_water=1023.;
+-
+-			//fresh water density (kg/m^3)
+-			this.rho_freshwater=1000.;
+-
+-			//water viscosity (N.s/m^2)
+-			this.mu_water=0.001787;  
+-
+-			//ice heat capacity cp (J/kg/K)
+-			this.heatcapacity=2093.;
+-
+-			//ice latent heat of fusion L (J/kg)
+-			this.latentheat=3.34*10^5;
+-
+-			//ice thermal conductivity (W/m/K)
+-			this.thermalconductivity=2.4;
+-			
+-			//wet ice thermal conductivity (W/m/K)
+-			this.temperateiceconductivity=.24;
+-
+-			//the melting point of ice at 1 atmosphere of pressure in K
+-			this.meltingpoint=273.15;
+-
+-			//rate of change of melting point with pressure (K/Pa)
+-			this.beta=9.8*10^-8;
+-
+-			//mixed layer (ice-water interface) heat capacity (J/kg/K)
+-			this.mixed_layer_capacity=3974.;
+-
+-			//thermal exchange velocity (ice-water interface) (m/s)
+-			this.thermal_exchange_velocity=1.00*10^-4;
+-
+-			//Rheology law: what is the temperature dependence of B with T
+-			//available: none, paterson and arrhenius
+-			this.rheology_law='Paterson';
+-
+-			// GIA:
+-			this.lithosphere_shear_modulus  = 6.7*Math.pow(10,10);  // (Pa)
+-			this.lithosphere_density        = 3.32;       // (g/cm^-3)
+-			this.mantle_shear_modulus       = 1.45*Math.pow(10,11); // (Pa)
+-			this.mantle_density             = 3.34;       // (g/cm^-3)
+-			
+-			//SLR
+-			this.earth_density= 5512;  // average density of the Earth, (kg/m^3)
+-
+-
+-		} //}}}
+-		this.disp = function() {// {{{
+-			console.log(sprintf('   Materials:'));
+-
+-			fielddisplay(this,'rho_ice','ice density [kg/m^3]');
+-			fielddisplay(this,'rho_water','ocean water density [kg/m^3]');
+-			fielddisplay(this,'rho_freshwater','fresh water density [kg/m^3]');
+-			fielddisplay(this,'mu_water','water viscosity [N s/m^2]');
+-			fielddisplay(this,'heatcapacity','heat capacity [J/kg/K]');
+-			fielddisplay(this,'thermalconductivity','ice thermal conductivity [W/m/K]');
+-			fielddisplay(this,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
+-			fielddisplay(this,'meltingpoint','melting point of ice at 1atm in K');
+-			fielddisplay(this,'latentheat','latent heat of fusion [J/kg]');
+-			fielddisplay(this,'beta','rate of change of melting point with pressure [K/Pa]');
+-			fielddisplay(this,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
+-			fielddisplay(this,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+-			fielddisplay(this,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+-			fielddisplay(this,'rheology_n',"Glen's flow law exponent");
+-			fielddisplay(this,'rheology_law',"law for the temperature dependance of the rheology: 'None', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'");
+-			fielddisplay(this,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+-			fielddisplay(this,'lithosphere_density','Lithosphere density [g/cm^-3]');
+-			fielddisplay(this,'mantle_shear_modulus','Mantle shear modulus [Pa]');
+-			fielddisplay(this,'mantle_density','Mantle density [g/cm^-3]');
+-			fielddisplay(this,'earth_density','Mantle density [kg/m^-3]');
+-
+-		} // }}}
+-		this.classname = function() {// {{{
+-			return "matice";
+-		} // }}}
+-		this.checkconsistency = function(md,solution,analyses) { // {{{
+-			checkfield(md,'fieldname','materials.rho_ice','>',0);
+-			checkfield(md,'fieldname','materials.rho_water','>',0);
+-			checkfield(md,'fieldname','materials.rho_freshwater','>',0);
+-			checkfield(md,'fieldname','materials.mu_water','>',0);
+-			checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1]);
+-			checkfield(md,'fieldname','materials.rheology_law','values',['None','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval']);
+-
+-			if(ArrayAnyEqual(ArrayIsMember(GiaAnalysisEnum(),analyses),1)){
+-				checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
+-			}
+-			if (ArrayAnyEqual(ArrayIsMember(SealevelriseAnalysisEnum(),analyses),1)){
+-				checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
+-			}
+-
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'name','md.materials.type','data',MaticeEnum(),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_ice','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_water','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_freshwater','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mu_water','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','heatcapacity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','latentheat','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermalconductivity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','temperateiceconductivity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','meltingpoint','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','beta','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'data',StringToEnum(this.rheology_law),'name','md.materials.rheology_law','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','earth_density','format','Double');
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-		this.rho_ice                    = 0.;
+-		this.rho_water                  = 0.;
+-		this.rho_freshwater             = 0.;
+-		this.mu_water                   = 0.;
+-		this.heatcapacity               = 0.;
+-		this.latentheat                 = 0.;
+-		this.thermalconductivity        = 0.;
+-		this.temperateiceconductivity   = 0.;
+-		this.meltingpoint               = 0.;
+-		this.beta                       = 0.;
+-		this.mixed_layer_capacity       = 0.;
+-		this.thermal_exchange_velocity  = 0.;
+-		this.rheology_B   = NaN;
+-		this.rheology_n   = NaN;
+-		this.rheology_law = '';
+-
+-		//gia: 
+-		this.lithosphere_shear_modulus  = 0.;
+-		this.lithosphere_density        = 0.;
+-		this.mantle_shear_modulus       = 0.;
+-		this.mantle_density             = 0.;
+-
+-		//SLR
+-		this.earth_density= 5512;  // average density of the Earth, (kg/m^3)
+-
+-		this.setdefaultparameters();
+-		//}}}
+-}
+-//MESH2D class definition
+-//
+-//   Usage:
+-//      mesh2d= new mesh2d();
+-
+-function mesh2d () {
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-
+-			//the connectivity is the averaged number of nodes linked to a
+-			//given node through an edge. This connectivity is used to initially
+-			//allocate memory to the stiffness matrix. A value of 16 seems to
+-			//give a good memory/time ration. This value can be checked in
+-			//trunk/test/Miscellaneous/runme.m
+-			this.average_vertex_connectivity=25;
+-		}
+-		// }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   2D tria Mesh (horizontal):")); 
+-
+-			console.log(sprintf("\n      Elements and vertices:"));
+-			fielddisplay(this,"numberofelements","number of elements");
+-			fielddisplay(this,"numberofvertices","number of vertices");
+-			fielddisplay(this,"elements","vertex indices of the mesh elements");
+-			fielddisplay(this,"x","vertices x coordinate [m]");
+-			fielddisplay(this,"y","vertices y coordinate [m]");
+-			fielddisplay(this,"edges","edges of the 2d mesh (vertex1 vertex2 element1 element2)");
+-			fielddisplay(this,"numberofedges","number of edges of the 2d mesh");
+-
+-			console.log(sprintf("\n      Properties:"));
+-			fielddisplay(this,"vertexonboundary","vertices on the boundary of the domain flag list");
+-			fielddisplay(this,"segments","edges on domain boundary (vertex1 vertex2 element)");
+-			fielddisplay(this,"segmentmarkers","number associated to each segment");
+-			fielddisplay(this,"vertexconnectivity","list of vertices connected to vertex_i");
+-			fielddisplay(this,"elementconnectivity","list of vertices connected to element_i");
+-			fielddisplay(this,"average_vertex_connectivity","average number of vertices connected to one vertex");
+-
+-			console.log(sprintf("\n      Extracted model:"));
+-			fielddisplay(this,"extractedvertices","vertices extracted from the model");
+-			fielddisplay(this,"extractedelements","elements extracted from the model");
+-
+-			console.log(sprintf("\n      Projection:"));
+-			fielddisplay(this,"lat","vertices latitude [degrees]");
+-			fielddisplay(this,"long","vertices longitude [degrees]");
+-			fielddisplay(this,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)");
+-		} //}}}
+-		this.classname = function () { //{{{
+-			return "mesh2d";
+-		} //}}}
+-		this.domaintype=function (){ // {{{
+-			return '2Dhorizontal';
+-		} // }}}
+-		this.dimension = function () { //{{{
+-			return 2;
+-		} //}}}
+-		this.elementtype = function() {//{{{
+-			return 'Tria';
+-		} // }}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.elements','NaN',1,'Inf',1,'>',0,'values',NewArrayFillIncrement(md.mesh.numberofvertices,1,1));
+-			checkfield(md,'fieldname','mesh.elements','size',[md.mesh.numberofelements, 3]);
+-			if(ArrayAnyEqual(ArrayIsMember(NewArrayFillIncrement(md.mesh.numberofvertices,1,1),ArraySort(ArrayUnique(MatrixToList(md.mesh.elements)))),0)){
+-				md.checkmessage('orphan nodes have been found. Check the mesh outline');
+-			}
+-			checkfield(md,'fieldname','mesh.numberofelements','>',0);
+-			checkfield(md,'fieldname','mesh.numberofvertices','>',0);
+-			checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d");
+-			checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[NaN, 3]);
+-
+-			switch(solution){
+-			case ThermalSolutionEnum():
+-				checkmessage(md,'thermal not supported for 2d mesh');
+-				break;
+-			default:
+-				break
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
+-			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',this.dimension(),'format','Integer');
+-			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(this.elementtype()),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'name','md.mesh.z','data',NewArrayFill(this.numberofvertices,0),'format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofelements','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofvertices','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
+-		}//}}}
+-		this.fix=function() { //{{{
+-			//Transform objects into Float64Arrays:
+-			this.x=FloatFix(this.x,this.numberofvertices); 
+-			this.y=FloatFix(this.y,this.numberofvertices); 
+-			this.edges=NullFix(this.edges,NaN);
+-			this.vertexonboundary=FloatFix(this.vertexonboundary,this.numberofvertices); 
+-			this.segmentmarkers=FloatFix(this.segmentmarkers,this.segments.length);
+-			this.extractedvertices=NullFix(this.extractedvertices,NaN);
+-			this.extractedelements=NullFix(this.extractedelements,NaN);
+-			this.lat=NullFix(this.lat,NaN);
+-			this.long=NullFix(this.long,NaN);
+-		}//}}}
+-
+-	//properties 
+-	// {{{
+-		this.x                           = NaN;
+-		this.y                           = NaN;
+-		this.elements                    = NaN;
+-		this.numberofelements            = 0;
+-		this.numberofvertices            = 0;
+-		this.numberofedges               = 0;
+-
+-		this.lat                         = NaN;
+-		this.long                        = NaN;
+-		this.epsg                        = 0;
+-
+-		this.vertexonboundary            = NaN;
+-
+-		this.edges                       = NaN;
+-		this.segments                    = NaN;
+-		this.segmentmarkers              = NaN;
+-		this.vertexconnectivity          = NaN;
+-		this.elementconnectivity         = NaN;
+-		this.average_vertex_connectivity = 0;
+-
+-		this.extractedvertices           = NaN;
+-		this.extractedelements           = NaN;
+-
+-		this.setdefaultparameters();
+-		//}}}
+-}
+-//MESH3DSURFACE class definition
+-//
+-//   Usage:
+-//      mesh3dsurface= new mesh3dsurface();
+-
+-function mesh3dsurface () {
+-	//methods 
+-		this.setdefaultparameters = function (){ //{{{
+-
+-			//the connectivity is the averaged number of nodes linked to a
+-			//given node through an edge. This connectivity is used to initially
+-			//allocate memory to the stiffness matrix. A value of 16 seems to
+-			//give a good memory/time ration. This value can be checked in
+-			//trunk/test/Miscellaneous/runme.m
+-			this.average_vertex_connectivity=25;
+-		}
+-		// }}}
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   2D tria Mesh (3D surface):")); 
+-
+-			console.log(sprintf("\n      Elements and vertices:"));
+-			fielddisplay(this,"numberofelements","number of elements");
+-			fielddisplay(this,"numberofvertices","number of vertices");
+-			fielddisplay(this,"elements","vertex indices of the mesh elements");
+-			fielddisplay(this,"x","vertices x coordinate [m]");
+-			fielddisplay(this,"y","vertices y coordinate [m]");
+-			fielddisplay(this,"z","vertices z coordinate [m]");
+-			fielddisplay(this,"edges","edges of the 2d mesh (vertex1 vertex2 element1 element2)");
+-			fielddisplay(this,"numberofedges","number of edges of the 2d mesh");
+-
+-			console.log(sprintf("\n      Properties:"));
+-			fielddisplay(this,"vertexonboundary","vertices on the boundary of the domain flag list");
+-			fielddisplay(this,"segments","edges on domain boundary (vertex1 vertex2 element)");
+-			fielddisplay(this,"segmentmarkers","number associated to each segment");
+-			fielddisplay(this,"vertexconnectivity","list of vertices connected to vertex_i");
+-			fielddisplay(this,"elementconnectivity","list of vertices connected to element_i");
+-			fielddisplay(this,"average_vertex_connectivity","average number of vertices connected to one vertex");
+-
+-			console.log(sprintf("\n      Extracted model:"));
+-			fielddisplay(this,"extractedvertices","vertices extracted from the model");
+-			fielddisplay(this,"extractedelements","elements extracted from the model");
+-
+-			console.log(sprintf("\n      Projection:"));
+-			fielddisplay(this,"lat","vertices latitude [degrees]");
+-			fielddisplay(this,"long","vertices longitude [degrees]");
+-			fielddisplay(this,"r","vertices radius [m]");
+-		} //}}}
+-		this.classname = function () { //{{{
+-			return "mesh3dsurface";
+-		} //}}}
+-		this.domaintype=function (){ // {{{
+-			return '3Dsurface';
+-		} // }}}
+-		this.dimension = function () { //{{{
+-			return 2;
+-		} //}}}
+-		this.elementtype = function() {//{{{
+-			return 'Tria';
+-		} // }}}
+-		this.checkconsistency = function(md,solution,analyses){ //{{{
+-
+-			checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.z','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.lat','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.long','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.r','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			checkfield(md,'fieldname','mesh.elements','NaN',1,'Inf',1,'>',0,'values',NewArrayFillIncrement(md.mesh.numberofvertices,1,1));
+-			checkfield(md,'fieldname','mesh.elements','size',[md.mesh.numberofelements, 3]);
+-			if(ArrayAnyEqual(ArrayIsMember(NewArrayFillIncrement(md.mesh.numberofvertices,1,1),ArraySort(ArrayUnique(MatrixToList(md.mesh.elements)))),0)){
+-				md.checkmessage('orphan nodes have been found. Check the mesh outline');
+-			}
+-			checkfield(md,'fieldname','mesh.numberofelements','>',0);
+-			checkfield(md,'fieldname','mesh.numberofvertices','>',0);
+-			checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d");
+-			checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[NaN, 3]);
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
+-			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',this.dimension(),'format','Integer');
+-			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(this.elementtype()),'format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','x','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','y','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','z','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','lat','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','long','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','r','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','elements','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'object',this,'fieldname','numberofelements','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','numberofvertices','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','average_vertex_connectivity','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','segments','format','DoubleMat','mattype',3);
+-		}//}}}
+-		this.fix=function() { //{{{
+-			//Transform objects into Float64Arrays:
+-			this.x=FloatFix(this.x,this.numberofvertices); 
+-			this.y=FloatFix(this.y,this.numberofvertices); 
+-			this.z=FloatFix(this.y,this.numberofvertices); 
+-			this.r=FloatFix(this.y,this.numberofvertices); 
+-			this.edges=NullFix(this.edges,NaN);
+-			this.vertexonboundary=FloatFix(this.vertexonboundary,this.numberofvertices); 
+-			this.segmentmarkers=FloatFix(this.segmentmarkers,this.segments.length);
+-			this.extractedvertices=NullFix(this.extractedvertices,NaN);
+-			this.extractedelements=NullFix(this.extractedelements,NaN);
+-			this.lat=NullFix(this.lat,NaN);
+-			this.long=NullFix(this.long,NaN);
+-		}//}}}
+-
+-	//properties 
+-	// {{{
+-		this.x                           = NaN;
+-		this.y                           = NaN;
+-		this.z                           = NaN;
+-		this.elements                    = NaN;
+-		this.numberofelements            = 0;
+-		this.numberofvertices            = 0;
+-		this.numberofedges               = 0;
+-
+-		this.lat                         = NaN;
+-		this.long                        = NaN;
+-		this.r                           = NaN;
+-
+-		this.vertexonboundary            = NaN;
+-		this.edges                       = NaN;
+-		this.segments                    = NaN;
+-		this.segmentmarkers              = NaN;
+-		this.vertexconnectivity          = NaN;
+-		this.elementconnectivity         = NaN;
+-		this.average_vertex_connectivity = 0;
+-
+-		this.extractedvertices           = NaN;
+-		this.extractedelements           = NaN;
+-
+-		this.setdefaultparameters();
+-		//}}}
+-}
+-//MISCELLANEOUS class definition
+-//
+-//   Usage:
+-//      miscellaneous=new miscellaneous();
+-
+-function miscellaneous (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   miscellaneous parameters:'));
+-
+-		fielddisplay(this,'notes','notes in a cell of strings');
+-		fielddisplay(this,'name','model name');
+-		fielddisplay(this,'dummy','empty field to store some data');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "miscellaneous";
+-	}// }}}
+-		this.checkconsistency= function(md,solution,analyses) {// {{{
+-
+-			checkfield(md,'fieldname','miscellaneous.name','empty',1);
+-		}// }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','name','format','String');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.notes = '';
+-	this.name  = '';
+-	this.dummy = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//MODEL class definition
+-//
+-//   Usage:
+-//      md = new model()
+-
+-function model () {
+-	//methods
+-		this.disp = function() { //{{{
+-			console.log(sprintf("class model echo: "));
+-			console.log(sprintf("%19s: %-22s -- %s","mesh"            ,"[1x1 " + typeof(this.mesh) + "]","mesh properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","mask"            ,"[1x1 " + typeof(this.mask) + "]","defines grounded and floating elements"));
+-			console.log(sprintf("%19s: %-22s -- %s","geometry"        ,"[1x1 " + typeof(this.geometry) + "]","surface elevation, bedrock topography, ice thickness,..."));
+-			console.log(sprintf("%19s: %-22s -- %s","constants"       ,"[1x1 " + typeof(this.constants) + "]","physical constants"));
+-			console.log(sprintf("%19s: %-22s -- %s","smb"             ,"[1x1 " + typeof(this.smb) + "]","surface mass balance"));
+-			console.log(sprintf("%19s: %-22s -- %s","basalforcings"   ,"[1x1 " + typeof(this.basalforcings) + "]","bed forcings"));
+-			console.log(sprintf("%19s: %-22s -- %s","materials"       ,"[1x1 " + typeof(this.materials) + "]","material properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","damage"          ,"[1x1 " + typeof(this.damage) + "]","parameters for damage evolution solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","friction"        ,"[1x1 " + typeof(this.friction) + "]","basal friction/drag properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","flowequation"    ,"[1x1 " + typeof(this.flowequation) + "]","flow equations"));
+-			console.log(sprintf("%19s: %-22s -- %s","timestepping"    ,"[1x1 " + typeof(this.timestepping) + "]","time stepping for trans models"));
+-			console.log(sprintf("%19s: %-22s -- %s","initialization"  ,"[1x1 " + typeof(this.initialization) + "]","initial guess/state"));
+-			console.log(sprintf("%19s: %-22s -- %s","rifts"           ,"[1x1 " + typeof(this.rifts) + "]","rifts properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","slr"             ,"[1x1 " + typeof(this.slr) + "]","slr forcings"));
+-			console.log(sprintf("%19s: %-22s -- %s","debug"           ,"[1x1 " + typeof(this.debug) + "]","debugging tools (valgrind, gprof)"));
+-			console.log(sprintf("%19s: %-22s -- %s","verbose"         ,"[1x1 " + typeof(this.verbose) + "]","verbosity level in solve"));
+-			console.log(sprintf("%19s: %-22s -- %s","settings"        ,"[1x1 " + typeof(this.settings) + "]","settings properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","toolkits"        ,"[1x1 " + typeof(this.toolkits) + "]","PETSc options for each solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","cluster"         ,"[1x1 " + typeof(this.cluster) + "]","cluster parameters (number of cpus...)"));
+-			console.log(sprintf("%19s: %-22s -- %s","balancethickness","[1x1 " + typeof(this.balancethickness) + "]","parameters for balancethickness solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","stressbalance"   ,"[1x1 " + typeof(this.stressbalance) + "]","parameters for stressbalance solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","groundingline"   ,"[1x1 " + typeof(this.groundingline) + "]","parameters for groundingline solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","hydrology"       ,"[1x1 " + typeof(this.hydrology) + "]","parameters for hydrology solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","masstransport"   ,"[1x1 " + typeof(this.masstransport) + "]","parameters for masstransport solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","thermal"         ,"[1x1 " + typeof(this.thermal) + "]","parameters for thermal solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","steadystate"     ,"[1x1 " + typeof(this.steadystate) + "]","parameters for steadystate solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","trans"       ,"[1x1 " + typeof(this.trans) + "]","parameters for trans solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","levelset"        ,"[1x1 " + typeof(this.levelset) + "]","parameters for moving boundaries (level-set method)"));
+-			console.log(sprintf("%19s: %-22s -- %s","calving"         ,"[1x1 " + typeof(this.calving) + "]","parameters for calving"));
+-			console.log(sprintf("%19s: %-22s -- %s","gia"             ,"[1x1 " + typeof(this.gia) + "]","parameters for gia solution"));
+-			console.log(sprintf("%19s: %-22s -- %s","autodiff"        ,"[1x1 " + typeof(this.autodiff) + "]","automatic differentiation parameters"));
+-			console.log(sprintf("%19s: %-22s -- %s","flaim"           ,"[1x1 " + typeof(this.flaim) + "]","flaim parameters"));
+-			console.log(sprintf("%19s: %-22s -- %s","inversion"       ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods"));
+-			console.log(sprintf("%19s: %-22s -- %s","qmu"             ,"[1x1 " + typeof(this.qmu) + "]","dakota properties"));
+-			console.log(sprintf("%19s: %-22s -- %s","outputdefinition","[1x1 " + typeof(this.outputdefinition) + "]","output definition"));
+-			console.log(sprintf("%19s: %-22s -- %s","results"         ,"[1x1 " + typeof(this.results) + "]","model results"));
+-			console.log(sprintf("%19s: %-22s -- %s","radaroverlay"    ,"[1x1 " + typeof(this.radaroverlay) + "]","radar image for plot overlay"));
+-			console.log(sprintf("%19s: %-22s -- %s","miscellaneous"   ,"[1x1 " + typeof(this.miscellaneous) + "]","miscellaneous fields"));
+-		} //}}}
+-		this.setdefaultparameters = function () { // {{{
+-
+-			//initialize subclasses
+-			this.mesh             = new mesh2d();
+-			this.mask             = new mask();
+-			this.constants        = new constants();
+-			this.geometry         = new geometry();
+-			this.initialization   = new initialization();
+-			this.smb              = new SMBforcing();
+-			this.basalforcings    = new basalforcings();
+-			this.friction         = new friction();
+-			this.rifts            = new rifts();
+-			this.slr              = new slr();
+-			this.timestepping     = new timestepping();
+-			this.groundingline    = new groundingline();
+-			this.materials        = new matice();
+-			this.damage           = new damage();
+-			this.flowequation     = new flowequation();
+-			this.debug            = new debug();
+-			this.verbose          = new verbose();
+-			this.settings         = new settings();
+-			this.toolkits         = new toolkits();
+-			this.cluster          = new local();
+-			this.balancethickness = new balancethickness();
+-			this.stressbalance    = new stressbalance();
+-			this.hydrology        = new hydrologyshreve();
+-			this.masstransport    = new masstransport();
+-			this.thermal          = new thermal();
+-			this.steadystate      = new steadystate();
+-			this.trans            = new trans();
+-			this.levelset		  = new levelset();
+-			this.calving          = new calving();
+-			this.gia              = new gia();
+-			this.autodiff         = new autodiff();
+-			this.flaim            = new flaim();
+-			this.inversion        = new inversion();
+-			this.qmu              = new qmu();
+-			this.radaroverlay     = new radaroverlay();
+-			this.results          = {};
+-			this.outputdefinition = new outputdefinition();
+-			this.miscellaneous    = new miscellaneous();
+-			this.priv             = new priv();
+-		} //}}}
+-		this.checkmessage = function(string){ //{{{
+-			console.log('model not consistent: ' + string);
+-			md.private.isconsistent=false;
+-		} //}}}
+-		this.fix = function(){ //{{{
+-
+-			for (var field in this){
+-
+-				//Some properties do not need to be fixed
+-				if (field == 'results' | field =='radaroverlay' | field == 'toolkits' | field =='cluster' | field == 'flaim' | field == 'priv') continue;
+-
+-				//Check that current field is a class
+-				if(typeof this[field] == 'function'){
+-					continue;
+-				}
+-
+-				//Fix current object
+-				this[field].fix(this);
+-			}
+-
+-		} //}}}
+-	//properties
+-	// {{{
+-		//Careful here: no other class should be used as default value this is a bug of matlab
+-		this.mesh             = 0;
+-		this.mask             = 0;
+-
+-		this.geometry         = 0;
+-		this.constants        = 0;
+-		this.smb              = 0;
+-		this.basalforcings    = 0;
+-		this.materials        = 0;
+-		this.damage           = 0;
+-		this.friction         = 0;
+-		this.flowequation     = 0;
+-		this.timestepping     = 0;
+-		this.initialization   = 0;
+-		this.rifts            = 0;
+-		this.slr              = 0;
+-
+-		this.debug            = 0;
+-		this.verbose          = 0;
+-		this.settings         = 0;
+-		this.toolkits         = 0;
+-		this.cluster          = 0;
+-
+-		this.balancethickness = 0;
+-		this.stressbalance    = 0;
+-		this.groundingline    = 0;
+-		this.hydrology        = 0;
+-		this.masstransport    = 0;
+-		this.thermal          = 0;
+-		this.steadystate      = 0;
+-		this.trans            = 0;
+-		this.levelset         = 0;
+-		this.calving          = 0;
+-		this.gia              = 0;
+-
+-		this.autodiff         = 0;
+-		this.flaim            = 0;
+-		this.inversion        = 0;
+-		this.qmu              = 0;
+-
+-		this.results          = 0;
+-		this.outputdefinition = 0;
+-		this.radaroverlay     = 0;
+-		this.miscellaneous    = 0;
+-		this.priv             = 0;
+-
+-		//set default values for fields
+-		this.setdefaultparameters();
+-
+-		//}}}
+-}
+-//OUTPUTDEFINITION class definition
+-//
+-//   Usage:
+-//      outputdefinition=new outputdefinition();
+-
+-function outputdefinition (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		this.definitions=[];
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   outputdefinition:'));
+-		fielddisplay(this,'definitions','list of potential outputs that can be requested, but which need additional data to be defined');
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "outputdefinition";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			checkfield(md,'fieldname','outputdefinition.definitions','cell',1);
+-
+-			for (var i=0;i<this.definitions.length;i++){
+-				this.definitions[i].checkconsistency(md,solution,analyses);
+-			}
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-		var enums=NewArrayFill(this.definitions.length,0);
+-		for (var i=0;i<this.definitions.length;i++){
+-			this.definitions[i].marshall(md,fid,prefix);
+-			classdefinition=this.definitions[i].classname();
+-			classdefinition=classdefinition.charAt(0).tuUpperCase() + classdefinition.slice(1); //so it matches our enums definitions.
+-			enums[i]=StringToEnum(classdefinition);
+-		}
+-		enums=ArrayUnique(enums);
+-		if (enums.length==0){ enums=NaN; }
+-		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.definitions                 = [];
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//PAIROPTIONS class definition
+-//
+-//   Usage:
+-//      pairoptions=pairoptions();
+-//      pairoptions=pairoptions('module',true,'solver',false);
+-
+-function pairoptions(args) { 
+-
+-
+-	//methods
+-	this.constructor = function (args) {// {{{
+-
+-		//initialize list
+-		if (args.length==0){
+-			this.list=[];
+-		}
+-		else{
+-
+-			//check length of input
+-			if (args.length % 2){
+-				throw Error('pairoptions error message: invalid parameter/value pair arguments') 
+-			}
+-			numoptions = args.length/2;
+-
+-			//Allocate memory
+-			this.list= Create2DArray(numoptions,3);
+-
+-			//go through args and build list of obj
+-			for (var i=0;i<numoptions;i++){
+-				if (typeof args[2*i] === 'string'){
+-					this.list[i][0]=args[2*i];
+-					this.list[i][1]=args[2*i+1];
+-					this.list[i][2]=false;  //used?
+-				}
+-				else{
+-					//option is not a string, ignore it
+-					console.log(sprintf('%s%i%s\n','WARNING: option number ',i,' is not a string, it will be ignored'));
+-					this.list[i][0]=[];
+-					this.list[i][1]=[];
+-					this.list[i][2]=[];
+-					continue
+-				}
+-			}
+-		}
+-	}// }}}
+-	this.addfield = function (field, value){ // {{{
+-		if (typeof field === 'string'){
+-			this.list.push([field,value,false]);
+-		}
+-	}// }}}
+-	this.numoptions = function (){ // {{{
+-		return this.list.length;
+-	}// }}}
+-	this.addfielddefault = function (field,value){ // {{{
+-		//ADDFIELDDEFAULT - add a field to an options list if it does not exist
+-		if (typeof field === 'string'){
+-			if (!this.exist(field)){
+-				this.list.push([field,value,true]); //true is a default so user will not be notified if not used
+-			}
+-		}
+-	} // }}}
+-	this.AssignObjectFields = function(object){ // {{{
+-		//ASSIGNOBJECTFIELDS - assign object fields from options
+-		for (var i=0;i<list.length;i++){
+-			fieldname=list[i][0];
+-			fieldvalue=list[i][1];
+-			if (fieldname in object){
+-				obj2[fieldname]=fieldvalue;
+-			}
+-			else{
+-				console.log(sprintf("%s'%s'%s%s\n",'WARNING: ',fieldname, 'is not a property of ',typeof object));
+-			}
+-		}
+-	} // }}}
+-	this.changefieldvalue = function(field,newvalue){ // {{{
+-		//CHANGEOPTIONVALUE - change the value of an option in an option list
+-
+-		var found=0;
+-		for (var i=0;i<this.list.length;i++){
+-			if (this.list[i][0] === field){
+-				found=1;
+-			}
+-		}
+-
+-		if (found==0){
+-			this.list.push([field,newvalue,true]); // do not notify user if unused
+-		}
+-		else{
+-			for (var i=0;i<this.list.length;i++){
+-				if (this.list[i][0] === field){
+-					this.list[i][1] = newvalue;
+-				}
+-			}
+-		}
+-	} // }}}
+-	this.deleteduplicates = function(warn){ // {{{
+-		//DELETEDUPLICATES - delete duplicates in an option list
+-
+-		//track the first occurrence of each option
+-		var indices=NewArrayFill(this.list.length,0);
+-		for (var i=0;i<this.list.length;i++){
+-			if(indices[i]==0){
+-				for(var j=i+1;j<this.list.length;j++){
+-					if (this.list[i][0] === this.list[j][0])indices[j]=1;
+-				}
+-			}
+-		}
+-		sumindices=ArraySum(indices);
+-
+-		//remove duplicates from the options list
+-		newlist=Create2DArray(sumindices,3);
+-		var count=0;
+-		for (var i=0;i<this.list.length;i++){
+-			if (indices[i]==1) if (warn) console.log(sprintf("%s%s%s\n",'WARNING: option ', this.list[i,0],' appeared more than once. Only its first occurrence will be kept'));
+-			else{
+-				newlist[count]=this.list[i];
+-				count++;
+-			}
+-		}
+-	} // }}}
+-	this.displayunused = function (){ // {{{
+-		//DISPLAYUNUSED - display unused options
+-
+-		for (var i=0;i<this.list.length;i++){
+-			if (!(this.list[i][2])){
+-				console.log(sprintf("%s%s%s\n",'WARNING: option ',this.list[i][0],' was not used'));
+-			}
+-		}
+-	}// }}}
+-	this.disp = function (){ //{{{
+-		if (this.list.length){
+-			console.log(sprintf('   pairoptions: (%i)\n',this.list.length));
+-			for (var i=0;i<this.list.length;i++){
+-				if (typeof this.list[i][1] === 'string'){
+-					console.log(sprintf("     field: '%s' value(string): ''%s''",this.list[i][0],this.list[i][1]));
+-				}
+-				else if( typeof this.list[i][1] === 'number'){
+-					console.log(sprintf("     field: '%s' value(number): %g",this.list[i][0],this.list[i][1]));
+-				}
+-				else if( IsArray(this.list[i][1])){
+-					console.log(sprintf("     field: '%s' value(array): [%i]",this.list[i][0],this.list[i][1].length));
+-				}
+-			}
+-		}
+-		else{
+-			console.log(sprintf('   list: empty'));
+-		}
+-	}// }}}
+-	this.exist = function (field) { //{{{
+-
+-		//EXIST - check if the option exists
+-		//some argument checking: 
+-		if (!(typeof field === 'string')){
+-			throw Error('exist error message: field should be a string');
+-		}
+-
+-		//Recover option
+-		var bool=0;
+-		for (var i=0;i<this.list.length;i++){
+-			if (this.list[i][0] === field){
+-				bool=1;
+-				this.list[i][2]=1; //It is a default so user will not be notified if not used
+-				break;
+-			}
+-		}
+-		return bool;
+-	} // }}}
+-	this.fieldoccurrences = function(field){ // {{{
+-
+-		//FIELDOCCURRENCES - get number of occurrence of a field
+-		var num=0;
+-
+-		//check input 
+-		if (!(typeof field === 'string')){
+-			throw Error('exist error message: field should be a string');
+-		}
+-
+-		//count number of occurrences:
+-		for (var i=0;i<this.list.length;i++) if (this.list[i][0] === field)num++;
+-
+-		return num;
+-
+-	} // }}}
+-	this.getfieldvalue = function(field){ // {{{
+-		//GETOPTION - get the value of an option
+-		//
+-		//   Usage:
+-		//      value=pairoptions.getfieldvalue(field,varargin)
+-		//
+-		//   Find an option value from a field. A default option
+-		//   can be given in input if the field does not exist
+-		//
+-		//   Examples:
+-		//      value=pairoptions.getfieldvalue('caxis');
+-		//      value=pairoptions.getfieldvalue('caxis',[0 2]);
+-
+-		//some argument checking: 
+-		if(!(arguments.length==1 | arguments.length==2)){
+-			error('pairoptions usage error: getfieldvalue bad usage');
+-		}
+-
+-		if (!(typeof field === 'string')){
+-			throw Error('pairoptions error message: field should be a string');
+-		}
+-
+-		//Recover option
+-		for(var i=0;i<this.list.length;i++){
+-			if (this.list[i][0] === field){
+-				this.list[i][2]=1; //option used
+-				return value=this.list[i][1];
+-			}
+-		}
+-
+-		//The option has not been found, output default if provided
+-		if (arguments.length==2){
+-			return arguments[1];
+-		}
+-		else{
+-            console.log(arguments);
+-			throw Error(sprintf("%s%s%s\n",'error message: field ',field,' has not been provided by user (and no default value has been specified)'));
+-		}
+-	} // }}}
+-	this.removefield = function(field,warn){// {{{
+-
+-		//REMOVEFIELD - delete a field in an option list
+-		//
+-		//   Usage:
+-		//      options.removefield(field,warn)
+-		//
+-		//   if warn==1 display an info message to warn user that
+-		//   some of his options have been removed.
+-
+-		//check if field exists
+-		if (this.exist(field)){
+-
+-			var indices;
+-			var count;
+-
+-			//find where the field is located
+-			indices=NewArrayFill(this.list.length,1);
+-			for (var i=0;i<this.list.length;i++)if(this.list[i][1] === field)indices[i]=0;
+-			sumindices=ArraySum(indices);
+-
+-			//remove duplicates from the options list
+-			newlist=Create2DArray(sumindices,3);
+-
+-			count=0;
+-			for (var i=0;i<this.list.length;i++){
+-				if(!(this.list[i][1] === field)){
+-					newlist[count]=this.list[i];
+-					count++;
+-				}
+-			}
+-			this.list=newlist;
+-
+-			//warn user if requested
+-			if (warn){
+-				console.log(sprintf("%s%s%s\n",'removefield info: option ',field,' has been removed from the list of options.'));
+-			}
+-		}
+-	} // }}}
+-	this.marshall = function(fid,firstindex){// {{{
+-
+-		throw Error('pairoptions marshall error: not implemented yet!');
+-	} // }}}
+-
+-	//properties 
+-	this.list         = [];
+-	this.constructor(args);
+-}
+-//PLOTOPTIONS class definition
+-//
+-//   Usage:
+-//      plotoptions = plotoptions(varargin)
+-
+-function plotoptions(args) {
+-	//methods
+-	this.disp = function (){ // {{{
+-		console.log(sprintf('\nplotoptions = \n'));
+-		console.log(sprintf('   figurenumber: %i',this.figurenumber));
+-		console.log(sprintf('   numberofplots: %i',this.numberofplots));
+-		if (this.list.length){
+-			for (var i=0;i<this.list.length;i++){
+-				console.log(sprintf('\n   options of plot number %i',i+1));
+-				this.list[i].disp();
+-			}
+-		}
+-		else{
+-			console.log(sprintf('   list: empty'));
+-		}
+-	}
+-	//}}}
+-	this.constructor = function (args){ // {{{
+-
+-		//check length of input
+-		if (args.length % 2){
+-			for (i=0;i<args.length;i+=2){
+-				if (!(typeof args[i] === 'string')){
+-					console.log('Last valid option: ' + args[i-2]);
+-					break;
+-				}
+-			}
+-			throw Error('plotoptions error message: invalid parameter/value pair arguments');
+-		}
+-
+-		//go through varargin and build list (like pairoptions)
+-		var rawoptions=new pairoptions(args);
+-		numoptions=rawoptions.numoptions();
+-
+-		var counter=0;
+-		for (i=0;i<numoptions;i++){
+-			if(typeof args[2*i] === 'string')counter++;
+-		}
+-		rawlist=Create2DArray(counter,2);
+-		var counter=0;
+-		for (i=0;i<numoptions;i++){
+-			optionname=args[2*i];
+-			optionval=args[2*i+1];
+-			if(typeof optionname === 'string'){
+-				rawlist[counter][0]=optionname;
+-				rawlist[counter][1]=optionval;
+-				counter++;
+-			}
+-			else{
+-				//option is not a string, ignore it
+-				console.log(sprintf("%s%i%s\n",'WARNING: option number ',i,' is not a string, it will be ignored'));
+-				rawlist[counter]=[];
+-				continue
+-			}
+-		}
+-		
+-			
+-		//get number of data to be plotted
+-		numberofplots=rawoptions.fieldoccurrences('data');
+-		this.numberofplots=numberofplots;
+-
+-		//figure out wether alloptions flog is on
+-		if (rawoptions.getfieldvalue('alloptions','off') === 'on') allflag=1;
+-		else allflag=0;
+-
+-		//initialize list
+-		var list=new Array(numberofplots);
+-		for (i=0;i<numberofplots;i++){
+-			list[i]=new pairoptions([]);
+-		}
+-				
+-		//process plot options
+-		for(var i=0;i<rawlist.length;i++){
+-
+-			//If alloptions flag has is on, apply to all plots
+-			if (allflag & !(rawlist[i][0] === 'data') & (rawlist[i][0].indexOf('#') == -1)){
+-				for(var j=0;j<numberofplots;j++){
+-					list[j].addfield(rawlist[i][0],rawlist[i][1]);
+-				}
+-			}
+-			else if (rawlist[i][0].indexOf('#') != -1){ //option contains '#'
+-
+-				//get suplot(s) associated
+-				string=rawlist[i][0].split('#');
+-				plotnums=string[1];
+-				field=string[0];
+-
+-				//divide plotnums if there is a comma ','
+-				plotnums=plotnums.split(',');
+-
+-				//loop over plotnums
+-				for (k=0;k<plotnums.length;k++){
+-					plotnum=plotnums[k];
+-
+-					//Empty
+-					if (plotnum === '') continue;
+-
+-					else if (plotnum === 'all'){ //pound all
+-						for(var j=0;j<numberofplots;j++){
+-							list[j].addfield(field,rawlist[i][1]);
+-						}
+-					}
+-					else if (plotnum.indexOf('-')!=-1){  //pound i-j
+-						nums=plotnum.split('-');
+-						if (nums.length!=2) continue;
+-						if ((nums[0] == '') | (nums[1] === '')){
+-							throw Error(sprintf("%s%s\n",'the option #i-j is not set properly for ',field));
+-						}
+-						for (j=(Number(nums[0])-1);j<(Number(nums[1])); j++){
+-							list[j].addfield(field,rawlist[i][1]);
+-						}
+-					}
+-					else{ //pound i
+-						//assign to subplot
+-						if (Number(plotnum)>numberofplots){
+-							throw Error(sprintf("%s%s%s%i%s\n",'plotoptions error message: ',field,' cannot be assigned (',plotnum,' exceeds maximum number of plot)'));
+-						}
+-						list[Number(plotnum)-1].addfield(field,rawlist[i][1]);
+-					}
+-				}
+-			}
+-			else{ //assign option field to corresponding subplot
+-
+-				
+-				//go through all subplot and assign to the first one free
+-				var inc=0;
+-				
+-				while (inc<numberofplots){
+-					
+-					if (!list[inc].exist(rawlist[i][0])){
+-						list[inc].addfield(rawlist[i][0],rawlist[i][1]);
+-						break
+-					}
+-					else inc++;
+-				}
+-
+-				if (inc>numberofplots-1){
+-					console.log(sprintf("%s%s%s\n",'plot info message: too many ',rawlist[i][0],' options'));
+-				}
+-			}
+-		}
+-
+-		//check that there is no duplicates
+-		for (var i=0;i<numberofplots;i++) list[i].deleteduplicates();
+-
+-		//allocate canvasid automatically
+-		for (var i=0;i<numberofplots;i++) {
+-			if (!list[i].exist('canvasid')) {
+-				list[i].addfield('canvasid',i);
+-			}
+-		}
+-
+-		//Get figure number (should be in options for subplot 1)
+-		this.figurenumber=list[0].getfieldvalue('figure',1);
+-		list[0].removefield('figure',0);
+-
+-		//asign output
+-		this.list=list;
+-
+-	} //}}}
+-	//properties
+-	// {{{
+-	this.numberofplots = 0;
+-	this.figurenumber  = 1;
+-	this.list          = [];
+-	this.constructor(args);
+-	//}}}
+-}
+-//PRIV class definition
+-//
+-//   Usage:
+-//      priv =new priv();
+-
+-function priv (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   private parameters: do not change'));
+-
+-		fielddisplay(this,'isconsistent','is model this consistent');
+-		fielddisplay(this,'runtimename','name of the run launched');
+-		fielddisplay(this,'bamg','structure with mesh properties constructed if bamg is used to mesh the domain');
+-		fielddisplay(this,'solution','type of solution launched');
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses){ // {{{
+-
+-	}// % }}}
+-	//properties 
+-	// {{{
+-	this.isconsistent = true;
+-	this.runtimename  = '';
+-	this.bamg         = {};
+-	this.solution     = '';
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//QMU class definition
+-//
+-//   Usage:
+-//      qmu=new qmu();
+-
+-function qmu (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   qmu parameters:'));
+-
+-		/*fielddisplay(this,'isdakota','is qmu analysis activated?');
+-		for (var i=0;i<this.variables.length;i++){
+-			console.log(sprintf('         variables%s:  (arrays of each variable class)',...
+-						string_dim(this.variables,i)));
+-		}
+-		fnames=fieldnames(this.variables(i));
+-		maxlen=0;
+-		for j=1:numel(fnames)
+-			maxlen=max(maxlen,length(fnames{j}));
+-		end
+-
+-			for j=1:numel(fnames)
+-				console.log(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+-							fnames{j},size(this.variables.(fnames{j})),class(this.variables.(fnames{j}))));
+-		end
+-			end
+-			for i=1:numel(this.responses)
+-				console.log(sprintf('         responses%s:  (arrays of each response class)',...
+-							string_dim(this.responses,i)));
+-		fnames=fieldnames(this.responses(i));
+-		maxlen=0;
+-		for j=1:numel(fnames)
+-			maxlen=max(maxlen,length(fnames{j}));
+-		end
+-
+-			for j=1:numel(fnames)
+-				console.log(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+-							fnames{j},size(this.responses.(fnames{j})),class(this.responses.(fnames{j}))));
+-		end
+-			end
+-			fielddisplay(this,'numberofresponses','number of responses') 
+-			for i=1:numel(this.method);
+-		if strcmp(class(this.method(i)),'dakota_method')
+-			console.log(sprintf('            method%s :    ''%s''',...
+-						string_dim(this.method,i),this.method(i).method));
+-		end
+-			end
+-			for i=1:numel(this.params)
+-				console.log(sprintf('         params%s:  (array of method-independent parameters)',...
+-							string_dim(this.params,i)));
+-		fnames=fieldnames(this.params(i));
+-		maxlen=0;
+-		for j=1:numel(fnames)
+-			maxlen=max(maxlen,length(fnames{j}));
+-		end
+-
+-			for j=1:numel(fnames)
+-				console.log(sprintf(['            %-' num2str(maxlen+1) 's: %s'],...
+-							fnames{j},any2str(this.params(i).(fnames{j}))));
+-		end
+-			end
+-			for i=1:numel(this.results)
+-				console.log(sprintf('         results%s:  (information from dakota files)',...
+-							string_dim(this.results,i)));
+-		fnames=fieldnames(this.results(i));
+-		maxlen=0;
+-		for j=1:numel(fnames)
+-			maxlen=max(maxlen,length(fnames{j}));
+-		end
+-
+-			for j=1:numel(fnames)
+-				console.log(sprintf(['            %-' num2str(maxlen+1) 's:    [%ix%i]    ''%s'''],...
+-							fnames{j},size(this.results.(fnames{j})),class(this.results.(fnames{j}))));
+-		end
+-			end
+-			fielddisplay(this,'partition','user provided mesh partitioning, defaults to metis if not specified') 
+-			fielddisplay(this,'numberofpartitions','number of partitions for semi-discrete qmu') 
+-			fielddisplay(this,'variabledescriptors','');
+-		fielddisplay(this,'responsedescriptors','');
+-		fielddisplay(this,'method','array of dakota_method class');
+-		fielddisplay(this,'mass_flux_profile_directory','directory for mass flux profiles');
+-		fielddisplay(this,'mass_flux_profiles','list of mass_flux profiles');
+-		fielddisplay(this,'mass_flux_segments','');
+-		fielddisplay(this,'adjacency','');
+-		fielddisplay(this,'vertex_weight','weight applied to each mesh vertex');
+-		*/
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "qmu";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			///Early return
+-			if (!md.qmu.isdakota) return;
+-			else md.checkmessage('qmu runs not supported yet!');
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','isdakota','format','Boolean');
+-			if (!this.isdakota){
+-				WriteData(fid,prefix,'data',0,'name','md.qmu.mass_flux_segments_present','format','Boolean');
+-			}
+-			else{
+-				WriteData(fid,prefix,'object',this,'fieldname','partition','format','DoubleMat','mattype',2);
+-				WriteData(fid,prefix,'object',this,'fieldname','numberofpartitions','format','Integer');
+-				WriteData(fid,prefix,'object',this,'fieldname','numberofresponses','format','Integer');
+-				WriteData(fid,prefix,'object',this,'fieldname','variabledescriptors','format','StringArray');
+-				WriteData(fid,prefix,'object',this,'fieldname','responsedescriptors','format','StringArray');
+-				if (this.mass_flux_segments.length){
+-					WriteData(fid,prefix,'data',this.mass_flux_segments,'name','md.qmu.mass_flux_segments','format','MatArray');
+-					flag=true; 
+-				}
+-				else flag=false; 
+-				WriteData(fid,prefix,'data',flag,'name','md.qmu.mass_flux_segments_present','format','Boolean');
+-			}
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.isdakota                    = 0;
+-	this.variables                   = []
+-	this.responses                   = [];
+-	this.method                      = []
+-	this.params                      = []
+-	this.results                     = []
+-	this.partition                   = NaN;
+-	this.numberofpartitions          = 0;
+-	this.numberofresponses           = 0;
+-	this.variabledescriptors         = []
+-	this.responsedescriptors         = []
+-	this.mass_flux_profile_directory = NaN;
+-	this.mass_flux_profiles          = NaN;
+-	this.mass_flux_segments          = []
+-	this.adjacency                   = NaN;
+-	this.vertex_weight               = NaN;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//RADAROVERLAY class definition
+-//
+-//   Usage:
+-//      radaroverlay=new radaroverlay();
+-
+-function radaroverlay (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   radaroverlay parameters:'));
+-
+-		fielddisplay(this,'xlim','corresponding x boundaries[m]');
+-		fielddisplay(this,'ylim','corresponding y boundaries [m]');
+-		fielddisplay(this,'outerindex','outer triangulation between mesh and bounding box');
+-		fielddisplay(this,'outerx','outer triangulation x coordinate between mesh and bounding box');
+-		fielddisplay(this,'outery','outer triangulation y coordinate between mesh and bounding box');
+-
+-	}// }}}
+-	//properties 
+-	// {{{
+-	this.xlim   = NaN;
+-	this.ylim   = NaN;
+-	this.outerindex   = NaN;
+-	this.outerx   = NaN;
+-	this.outery   = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//RIFTS class definition
+-//
+-//   Usage:
+-//      rifts=new rifts();
+-
+-function rifts (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "rifts";
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   rifts class echo:'));
+-		fielddisplay(this,'riftstruct','structure containing all rift information (vertices coordinates, segments, type of melange, ...)');
+-		fielddisplay(this,'riftproperties','');
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			var numrifts;
+-			if (isNaN(this.riftstruct) | this.riftstruct.length==0){
+-				numrifts=0;
+-			}
+-			else{
+-				numrifts=this.riftstruct.length;
+-			}
+-			if (numrifts){
+-				if (!(md.mesh.domaintype() == '2Dhorizontal')){
+-					md.checkmessage('models with rifts are only supported in 2d for now!');
+-				}
+-				if (!IsArray(this.riftstruct)){
+-					md.checkmessage('rifts.riftstruct should be a structure!');
+-				}
+-				for(var i=0;i<md.mesh.segmentmarkers.length;i++){
+-					if (md.mesh.segmentmarkers[i]>=2){
+-						//We have segments with rift markers, but no rift structure!
+-						md.checkmessage(['model should be processed for rifts (run meshprocessrifts)!']);
+-						break;
+-					}
+-				}
+-				for (var i=0;i<numrifts;i++){
+-					md = checkfield(md,'fieldname',sprintf('rifts.riftstruct[%i].fill',i),'values',[WaterEnum(), AirEnum(), IceEnum(), MelangeEnum()]);
+-				}
+-			}
+-			else{
+-				if (!isNaN(this.riftstruct)) md.checkmessage('riftstruct should be NaN since numrifts is 0!');
+-			}
+-		} //}}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var numrifts;
+-			//Process rift info
+-			if ((this.riftstruct.length==0) | isNaN(this.riftstruct)){
+-				numrifts=0;
+-			}
+-			else{
+-				numrifts=this.riftstruct.length;
+-			}
+-			var numpairs=0;
+-			for (var i=0;i<numrifts;i++){
+-				numpairs=numpairs+this.riftstruct[i].penaltypairs.length;
+-			}
+-
+-			// 2 for nodes + 2 for elements+ 2 for  normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state.
+-			data=Create2DArray(numpairs,12);
+-			var count=0;
+-			for (var i=0;i<numrifts;i++){
+-				numpairsforthisrift=this.riftstruct[i].penaltypairs.length;
+-				for(var j=0;j<numpairsforthisrift;j++){
+-					for(var k=0;k<7;k++)data[count+j][k]=this.riftstruct[i].penaltypairs;
+-					data[count+j][7]=this.riftstruct[i].fill;
+-					data[count+j][8]=this.riftstruct[i].friction;
+-					data[count+j][9]=this.riftstruct[i].fraction;
+-					data[count+j][10]=this.riftstruct[i].fractionincrement;
+-					data[count+j][11]=this.riftstruct[i].state;
+-					count+=numpairsforthisrift;
+-				}
+-			}
+-			WriteData(fid,prefix,'data',numrifts,'name','md.rifts.numrifts','format','Integer');
+-			WriteData(fid,prefix,'data',data,'name','md.rifts.riftstruct','format','DoubleMat','mattype',3);
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.riftstruct=NullFix(this.riftstruct,NaN);
+-			this.riftproperties=NullFix(this.riftproperties,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.riftstruct     = NaN;
+-	this.riftproperties = NaN;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//SLR class definition
+-//
+-//   Usage:
+-//      slr=slr();
+-
+-function slr(){
+-	//methods
+-		this.setdefaultparameters = function (){ //{{{
+-		
+-		//Convergence criterion: absolute, relative and residual
+-		this.reltol=NaN; //default
+-		this.abstol=0.001; //1 mm of sea level rise
+-
+-		//maximum of non-linear iterations.
+-		this.maxiter=10;
+-
+-		//computational flags: 
+-		this.rigid=1;
+-		this.elastic=1;
+-		this.rotation=1;
+-		
+-		//tidal love numbers: 
+-		this.tide_love_h=0.6149; //degree 2
+-		this.tide_love_k=0.3055; //degree 2
+-
+-		//numerical discretization accuracy
+-		this.degacc=.01;
+-		
+-		//output default:
+-		this.requested_outputs=['default'];
+-
+-		//transitions should be a cell array of vectors: 
+-		this.transitions=[];
+-		
+-		}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			//Early return
+-			if(ArrayAnyEqual(ArrayIsMember(SealevelriseAnalysisEnum(),analyses),0))return;
+-			
+-			md = checkfield(md,'fieldname','slr.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements, 1]);
+-			md = checkfield(md,'fieldname','slr.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+-			md = checkfield(md,'fieldname','slr.love_h','NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','slr.love_k','NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','slr.tide_love_h','NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','slr.tide_love_k','NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','slr.reltol','size',[1, 1]);
+-			md = checkfield(md,'fieldname','slr.abstol','size',[1, 1]);
+-			md = checkfield(md,'fieldname','slr.maxiter','size',[1, 1],'>=',1);
+-			md = checkfield(md,'fieldname','slr.degacc','size',[1, 1],'>=',1e-10);
+-			md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
+-			
+-			//check that love numbers are provided at the same level of accuracy: 
+-			if (this.love_h.length != this.love_k.length){
+-				throw Error('slr error message: love numbers should be provided at the same level of accuracy');
+-			}
+-
+-		} // }}}
+-		this.defaultoutputs = function(md){ // {{{
+-			return ['Sealevel'];
+-		}//}}}
+-	this.classname= function(){// {{{
+-		return "slr";
+-	}// }}}
+-		this.disp= function(){// {{{
+-			
+-		console.log(sprintf('   Sealevelrise solution parameters:'));
+-
+-		fielddisplay(this,'deltathickness','thickness change (main loading of the slr solution core [m]');
+-		fielddisplay(this,'sealevel','current sea level (prior to computation) [m]');
+-		fielddisplay(this,'reltol','sea level rise relative convergence criterion, (default, NaN: not applied)');
+-		fielddisplay(this,'abstol','sea level rise absolute convergence criterion, NaN: not applied');
+-		fielddisplay(this,'maxiter','maximum number of nonlinear iterations');
+-		fielddisplay(this,'love_h','love load number for radial displacement');
+-		fielddisplay(this,'love_k','love load number for gravitational potential perturbation');
+-		fielddisplay(this,'tide_love_h','tidal love number (degree 2)');
+-		fielddisplay(this,'tide_love_k','tidal love number (degree 2)');
+-		fielddisplay(this,'rigid','rigid earth graviational potential perturbation');
+-		fielddisplay(this,'elastic','elastic earth graviational potential perturbation');
+-		fielddisplay(this,'rotation','rotational earth potential perturbation');
+-		fielddisplay(this,'degacc',"accuracy (default .01 deg) for numerical discretization of the Green's functions");
+-		fielddisplay(this,'transitions','indices into parts of the mesh that will be icecaps');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
+-		} //}}}
+-			this.marshall=function(md,prefix,fid) { //{{{
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','deltathickness','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'object',this,'fieldname','sealevel','mattype',1,'format','DoubleMat','enum',SealevelEnum(),'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'fieldname','reltol','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','abstol','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','love_h','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','love_k','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',this,'fieldname','tide_love_h','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','tide_love_k','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','rigid','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','elastic','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','rotation','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','degacc','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','transitions','format','MatArray');
+-			
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}
+-			WriteData(fid,prefix,'data',outputs,'name','md.slr.requested_outputs','format','StringArray');
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.deltathickness=NullFix(this.deltathickness,NaN);
+-			this.sealevel=NullFix(this.sealevel,NaN);
+-			this.maxiter=NullFix(this.maxiter,NaN);
+-			this.reltol=NullFix(this.reltol,NaN);
+-			this.abstol=NullFix(this.abstol,NaN);
+-			this.love_h=NullFix(this.love_h,NaN);
+-			this.love_k=NullFix(this.love_k,NaN);
+-			this.tide_love_h=NullFix(this.tide_love_h,NaN);
+-			this.tide_love_k=NullFix(this.tide_love_k,NaN);
+-			this.rigid=NullFix(this.rigid,NaN);
+-			this.elastic=NullFix(this.elastic,NaN);
+-			this.rotation=NullFix(this.rotation,NaN);
+-			this.degacc=NullFix(this.degacc,NaN);
+-		}//}}}
+-	//properties
+-	//{{{
+-	this.deltathickness = NaN;
+-	this.sealevel       = NaN; 
+-	this.maxiter        = 0;
+-	this.reltol         = 0;
+-	this.abstol         = 0;
+-	this.love_h         = 0; //provided by PREM model
+-	this.love_k         = 0; //idam
+-	this.tide_love_h    = 0; 
+-	this.tide_love_k    = 0; 
+-	this.rigid          = 0;
+-	this.elastic        = 0;
+-	this.rotation       = 0;
+-	this.degacc         = 0;
+-	this.requested_outputs = [];
+-	this.transitions    = [];
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//SETTINGS class definition
+-//
+-//   Usage:
+-//      settings=new settings();
+-
+-function settings (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		//are we short in memory ? (0 faster but requires more memory)
+-		this.lowmem=0;
+-
+-		//i/o:
+-		this.io_gather=1;
+-
+-		//results frequency by default every step
+-		this.output_frequency=1;
+-
+-		//checkpoints frequency, by default never: 
+-		this.recording_frequency=0;
+-
+-		//this option can be activated to load automatically the results
+-		//onto the model after a parallel run by waiting for the lock file
+-		//N minutes that is generated once the solution has converged
+-		//0 to deactivate
+-		this.waitonlock=Infinity;
+-
+-		//upload options: 
+-		upload_port         = 0;
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   settings class echo:'));
+-		
+-		fielddisplay(this,'results_on_nodes','results are output for all the nodes of each element');
+-		fielddisplay(this,'io_gather','I/O gathering strategy for result outputs (default 1)');
+-		fielddisplay(this,'lowmem','is the memory limited ? (0 or 1)');
+-		fielddisplay(this,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+-		fielddisplay(this,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
+-		fielddisplay(this,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
+-		fielddisplay(this,'upload_server','server hostname where model should be uploaded');
+-		fielddisplay(this,'upload_path','path on server where model should be uploaded');
+-		fielddisplay(this,'upload_login','server login');
+-		fielddisplay(this,'upload_port','port login (default is 0)');
+-		fielddisplay(this,'upload_filename','unique id generated when uploading the file to server');
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "settings";
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { // {{{
+-
+-			checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
+-			checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
+-			checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','results_on_nodes','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','io_gather','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','lowmem','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','output_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','recording_frequency','format','Integer');
+-			if (this.waitonlock>0) WriteData(fid,prefix,'name','md.settings.waitonlock','data',true,'format','Boolean');
+-			else WriteData(fid,prefix,'name','md.settings.waitonlock','data',false,'format','Boolean');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.results_on_nodes    = 0;
+-	this.io_gather           = 0;
+-	this.lowmem              = 0;
+-	this.output_frequency    = 0;
+-	this.recording_frequency   = 0;
+-	this.waitonlock          = 0;
+-	this.upload_server       = '';
+-	this.upload_path         = '';
+-	this.upload_login        = '';
+-	this.upload_port         = 0;
+-	this.upload_filename     = '';
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//SMBforcing Class definition
+-//
+-//   Usage:
+-//      SMB=SMBforcing();
+-
+-function SMBforcing(){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		this.requested_outputs=['default'];
+-	} // }}}
+-	this.disp = function(){ // {{{
+-		console.log(sprintf('   surface forcings parameters:'));
+-		fielddisplay(this,'mass_balance','surface mass balance [m/yr ice eq]');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
+-	} // }}}
+-	this.defaultoutputs = function(){ // {{{
+-		return '';
+-	}//}}}
+-    this.classname = function(){ // {{{
+-        return "SMBforcing";
+-    } // }}}
+-    this.extrude = function(md) {//{{{
+-        this.mass_balance=project3d(md,'vector',this.mass_balance,'type','node');
+-    }//}}}
+-    this.initialize = function(md) {// {{{
+-
+-        if (isNaN(this.mass_balance)){
+-            this.mass_balance=NewArrayFill(md.mesh.numberofvertices,0);
+-            console.log('      no smb.mass_balance specified: values set as zero');
+-        }
+-
+-    } // }}}
+-    this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-        if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+-            checkfield(md,'fieldname','smb.mass_balance','timeseries',1,'NaN',1,'Inf',1);
+-        }
+-        if(ArrayAnyEqual(ArrayIsMember(BalancethicknessAnalysisEnum(),analyses),1)){
+-            checkfield(md,'fieldname','smb.mass_balance','size',[md.mesh.numberofvertices,1],'NaN',1,'Inf',1);
+-        }
+-        checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
+-
+-    } // }}}
+-    this.marshall=function(md,prefix,fid) { //{{{
+-
+-        var yts=365.0*24.0*3600.0;
+-
+-        WriteData(fid,prefix,'name','md.smb.model','data',SMBforcingEnum(),'format','Integer');
+-        WriteData(fid,prefix,'object',this,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+-
+-        //process requested outputs
+-        var outputs = this.requested_outputs.slice();
+-        for (var i=0;i<outputs.length;i++){
+-            if (outputs[i] == 'default') {
+-                outputs.splice(i,1);
+-                var newoutputs=this.defaultoutputs(md);
+-                for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-            }
+-        }
+-        WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
+-
+-    }//}}}
+-    this.fix=function() { //{{{
+-    }//}}}
+-	//properties 
+-	this.mass_balance = NaN;
+-	this.requested_outputs      = [];
+-	this.setdefaultparameters();
+-}
+-//STEADYSTATE class definition
+-//
+-//   Usage:
+-//      steadystate=new steadystate();
+-
+-function steadystate (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//maximum of steady state iterations
+-		this.maxiter=100;
+-
+-		//Relative tolerance for the steadystate convertgence
+-		this.reltol=0.01;
+-
+-		//default output
+-		this.requested_outputs=['default'];
+-
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   steadystate solution parameters:'));
+-
+-		fielddisplay(this,'reltol','relative tolerance criterion');
+-		fielddisplay(this,'maxiter','maximum number of iterations');
+-		fielddisplay(this,'requested_outputs','additional requested outputs');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "steadystate";
+-
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses) {// {{{
+-
+-		//Early return
+-		if (solution!=SteadystateSolutionEnum()) return;
+-
+-		if (md.timestepping.time_step!=0){
+-			md.checkmessage('for a steadystate computation, timestepping.time_step must be zero.');
+-		}
+-		checkfield(md,'fieldname','steadystate.requested_outputs','stringrow',1);
+-
+-		if (isNaN(md.stressbalance.reltol)){
+-			md.checkmessage('for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!');
+-		}
+-	} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','reltol','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}
+-			WriteData(fid,prefix,'data',outputs,'name','md.steadystate.requested_outputs','format','StringArray');
+-		}//}}}
+-		this.defaultoutputs = function(md) { //{{{
+-
+-			var list=[];
+-
+-			for (var i=0;i<md.stressbalance.defaultoutputs(md).length;i++)list.push(md.stressbalance.defaultoutputs(md)[i]);
+-			for (var i=0;i<md.thermal.defaultoutputs(md).length;i++)list.push(md.thermal.defaultoutputs(md)[i]);
+-
+-			return list;
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.reltol            = 0;
+-	this.maxiter           = 0;
+-	this.requested_outputs = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//STRESSBALANCE class definition
+-//
+-//   Usage:
+-//      stressbalance=new stressbalance();
+-
+-function stressbalance (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//maximum of non-linear iterations.
+-		this.maxiter=100;
+-
+-		//Convergence criterion: absolute, relative and residual
+-		this.restol=Math.pow(10,-4); 
+-		this.reltol=0.01;
+-		this.abstol=10;
+-
+-		this.FSreconditioning=Math.pow(10,13);
+-		this.shelf_dampening=0;
+-
+-		//Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+-		this.penalty_factor=3;
+-
+-		//coefficient to update the viscosity between each iteration of
+-		//a stressbalance according to the following formula
+-		//viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-		this.viscosity_overshoot=0;
+-
+-		//Stop the iterations of rift if below a threshold
+-		this.rift_penalty_threshold=0;
+-
+-		//in some solutions, it might be needed to stop a run when only
+-		//a few constraints remain unstable. For thermal computation, this
+-		//parameter is often used.
+-		this.rift_penalty_lock=10;
+-
+-		//output default:
+-		this.requested_outputs=['default'];
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   StressBalance solution parameters:'));
+-
+-		console.log(sprintf('\n      %s','Convergence criteria:'));
+-		fielddisplay(this,'restol','mechanical equilibrium residual convergence criterion');
+-		fielddisplay(this,'reltol','velocity relative convergence criterion, NaN: not applied');
+-		fielddisplay(this,'abstol','velocity absolute convergence criterion, NaN: not applied');
+-		fielddisplay(this,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid");
+-		fielddisplay(this,'maxiter','maximum number of nonlinear iterations');
+-		fielddisplay(this,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
+-
+-		console.log(sprintf('\n      %s','boundary conditions:'));
+-		fielddisplay(this,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
+-		fielddisplay(this,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
+-		fielddisplay(this,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
+-
+-		console.log(sprintf('\n      %s','Rift options:'));
+-		fielddisplay(this,'rift_penalty_threshold','threshold for instability of mechanical constraints');
+-		fielddisplay(this,'rift_penalty_lock','number of iterations before rift penalties are locked');
+-
+-		console.log(sprintf('\n      %s','Penalty options:'));
+-		fielddisplay(this,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+-		fielddisplay(this,'vertex_pairing','pairs of vertices that are penalized');
+-
+-		console.log(sprintf('\n      %s','Other:'));
+-		fielddisplay(this,'shelf_dampening','use dampening for floating ice ? Only for FS model');
+-		fielddisplay(this,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
+-		fielddisplay(this,'referential','local referential');
+-		fielddisplay(this,'loadingforce','loading force applied on each point [N/m^3]');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
+-
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "stressbalance";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-
+-			//Early return
+-			if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),0))return;
+-
+-			checkfield(md,'fieldname','stressbalance.spcvx','Inf',1,'timeseries',1);
+-			checkfield(md,'fieldname','stressbalance.spcvy','Inf',1,'timeseries',1);
+-			checkfield(md,'fieldname','stressbalance.spcvz','Inf',1,'timeseries',1);
+-			checkfield(md,'fieldname','stressbalance.restol','size',[1, 1],'>',0,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','stressbalance.reltol','size',[1, 1]);
+-			checkfield(md,'fieldname','stressbalance.abstol','size',[1, 1]);
+-			checkfield(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0, 1, 2]);
+-			checkfield(md,'fieldname','stressbalance.FSreconditioning','size',[1, 1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','stressbalance.viscosity_overshoot','size',[1, 1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','stressbalance.maxiter','size',[1, 1],'>=',1);
+-			checkfield(md,'fieldname','stressbalance.referential','size',[md.mesh.numberofvertices, 6]);
+-			checkfield(md,'fieldname','stressbalance.loadingforce','size',[md.mesh.numberofvertices, 3]);
+-			checkfield(md,'fieldname','stressbalance.requested_outputs','stringrow',1);
+-
+-			//singular solution
+-			if(!ArrayAnyNaN(md.stressbalance.spcvx) | !ArrayAnyNaN(md.stressbalance.spcvy) |  !ArrayAnyAboveStrict(md.mask.groundedice_levelset,0)){
+-				md = checkmessage(md,'model is not well posed (singular). You need at least one node with fixed velocity!');
+-				console.log(sprintf('\n !!! Warning: no spc applied, model might not be well posed if no basal friction is applied, check for solution crash\n'));
+-			}
+-			//CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			for(var i=0;i<md.stressbalance.referential.length;i++){
+-				var sum=0;
+-				for(j=0;j<md.stressbalance.referential[0].length;j++)sum+=md.stressbalance.referential[i][j];
+-				if (sum!=0 & sum!=6){
+-					md = checkmessage(md,'Each line of stressbalance.referential should contain either only NaN values or no NaN values');
+-					break;
+-				}
+-			}
+-			//CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			for(var i=0;i<md.stressbalance.referential.length;i++){
+-				var sum=0;
+-				for(j=0;j<md.stressbalance.referential[0].length;j++)sum+=md.stressbalance.referential[i][j];
+-				if(sum==0){
+-					var dot=0;
+-					for(j=0;j<3;j++)dot+=md.stressbalance.referential[i][j]*md.stressbalance.referential[i][j+3];
+-					dot=Math.abs(dot);
+-					if(dot>Math.pow(10,-18)){
+-						md.checkmessage('Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal');
+-						break;
+-					}
+-				}
+-			}
+-			//CHECK THAT NO rotation specified for FS Grounded ice at base
+-			if (md.mesh.domaintype() == '3D' & md.flowequation.isFS){
+-				for(var i=0;i<md.mask.groundedice_levelset.length;i++){
+-					if(md.mask.groundedice_levelset[i]>0 & md.mesh.vertexonbase[i]){
+-						if(!ArrayIsNan(md.stressbalance.referential[i])){
+-							md.checkmessage('no referential should be specified for basal vertices of grounded ice');
+-							break;
+-						}
+-					}
+-				}
+-				checkfield(md,'fieldname','stressbalance.FSreconditioning','>',0);
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+-
+-			var yts=365.0*24.0*3600.0;
+-
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','restol','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','reltol','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','isnewton','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','FSreconditioning','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','maxiter','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','penalty_factor','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
+-
+-			var lx=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lx[i]=this.loadingforce[i][0];
+-			var ly=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)ly[i]=this.loadingforce[i][1];
+-			var lz=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lz[i]=this.loadingforce[i][2];
+-
+-			WriteData(fid,prefix,'data',lx,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex');
+-			WriteData(fid,prefix,'data',ly,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey');
+-			WriteData(fid,prefix,'data',lz,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez');
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}
+-			WriteData(fid,prefix,'data',outputs,'name','md.stressbalance.requested_outputs','format','StringArray');
+-		}//}}}
+-		this.defaultoutputs = function(md){ // {{{
+-
+-			var list;
+-			if (md.mesh.dimension() == 3) list = ['Vx','Vy','Vz','Vel','Pressure'];
+-			else if (md.mesh.dimension()==2) list = ['Vx','Vy','Vel','Pressure'];
+-			else throw Error('mesh type not supported yet');
+-			return list;
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.abstol=NullFix(this.abstol,NaN);
+-			this.rift_penalty_lock=NullFix(this.rift_penalty_lock,NaN);
+-			this.referential=NullFix(this.referential,NaN);
+-			this.loadingforce=NullFix(this.loadingforce,NaN);
+-			this.spcvx=NullFix(this.spcvx,NaN);
+-			this.spcvy=NullFix(this.spcvy,NaN);
+-			this.spcvz=NullFix(this.spcvz,NaN);
+-			if(this.vertex_pairing=[])this.vertex_pairing=NaN;
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.spcvx                  = NaN;
+-	this.spcvy                  = NaN;
+-	this.spcvz                  = NaN;
+-	this.restol                 = 0;
+-	this.reltol                 = 0;
+-	this.abstol                 = 0;
+-	this.isnewton               = 0;
+-	this.FSreconditioning       = 0;
+-	this.viscosity_overshoot    = 0;
+-	this.maxiter                = 0;
+-	this.shelf_dampening        = 0;
+-	this.vertex_pairing         = NaN;
+-	this.penalty_factor         = NaN;
+-	this.rift_penalty_lock      = NaN;
+-	this.rift_penalty_threshold = 0;
+-	this.referential            = NaN;
+-	this.loadingforce           = NaN;
+-	this.requested_outputs      = []
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//TEMPLATE class definition
+-//
+-//   Usage:
+-//      template=new template();
+-
+-function template (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   template class echo:'));
+-
+-	}// }}}
+-	//properties 
+-	// {{{
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//THERMAL class definition
+-//
+-//   Usage:
+-//      thermal=new thermal();
+-
+-function thermal (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//Number of unstable constraints acceptable
+-		this.penalty_threshold=0;
+-
+-		//Type of stabilization used
+-		this.stabilization=1;
+-
+-		//Relative tolerance for the enthalpy convergence
+-		this.reltol=0.01;
+-
+-		//Maximum number of iterations
+-		this.maxiter=100;
+-
+-		//factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor
+-		this.penalty_factor=3;
+-
+-		//Should we use cold ice (default) or enthalpy formulation
+-		this.isenthalpy=0;
+-
+-		//will basal boundary conditions be set dynamically
+-		this.isdynamicbasalspc=0;
+-
+-		//default output
+-		this.requested_outputs=['default'];
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   Thermal solution parameters:'));
+-
+-		fielddisplay(this,'spctemperature','temperature constraints (NaN means no constraint) [K]');
+-		fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
+-		fielddisplay(this,'reltol','relative tolerance convergence criterion for enthalpy');
+-		fielddisplay(this,'maxiter','maximum number of non linear iterations');
+-		fielddisplay(this,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
+-		fielddisplay(this,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');
+-		fielddisplay(this,'penalty_factor','scaling exponent (default is 3)');
+-		fielddisplay(this,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+-		fielddisplay(this,'isdynamicbasalspc','enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "thermal";
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses){ // {{{
+-
+-		//Early return
+-		if(!ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1) & !ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1)  | (solution == TransientSolutionEnum() & md.trans.isthermal==0)) return;
+-
+-		checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 ,1, 2]);
+-		checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1);
+-		if(ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1) & md.thermal.isenthalpy & md.mesh.dimension() == 3){
+-			
+-			for(var i=0;i<md.mesh.numberofvertices;i++){
+-				for(var j=0;j<md.thermal.spctemperature[0].length;j++){
+-					if (!isNaN(md.thermal.spctemperature[i][j])){
+-						var rep=md.geometry.surface[i]-md.mesh.z[i];
+-						if (md.thermal.spctemperature[i][j] <= md.materials.melting-md.materials.beta*md.materials.rho_ice*md.constants.g*rep+Math.pow(10,-5)){
+-
+-							md.checkmessage('spctemperature should be less or equal than the adjusted melting point');
+-							break;
+-						}
+-					}
+-				}
+-			}
+-			checkfield(md,'fieldname','thermal.isenthalpy','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel', [1],'values',[0, 1]);
+-			if(md.thermal.isenthalpy){
+-				if (isNan(md.stressbalance.reltol)){
+-					md.checkmessage('for a steadystate computation, thermal.reltol (relative convergence criterion) must be defined!');
+-				}
+-			}
+-			checkfield(md,'fieldname','thermal.reltol','>',0.,'message','reltol must be larger than zero');
+-		}
+-		checkfield(md,'fieldname','thermal.requested_outputs','stringrow',1);
+-	} // }}} 
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-			WriteData(fid,prefix,'object',this,'fieldname','penalty_threshold','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','reltol','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','penalty_lock','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','penalty_factor','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','isenthalpy','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isdynamicbasalspc','format','Boolean');
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}
+-			WriteData(fid,prefix,'data',outputs,'name','md.thermal.requested_outputs','format','StringArray');
+-        	}//}}}
+-		this.defaultoutputs = function(md) { //{{{
+-
+-			if (this.isenthalpy) return ['Enthalpy','Temperature','Waterfraction','Watercolumn','BasalforcingsGroundediceMeltingRate'];
+-			else return ['Temperature','BasalforcingsGroundediceMeltingRate'];
+-		}//}}}
+-		this.fix=function() { //{{{
+-			this.spctemperature=NullFix(this.spctemperature,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.spctemperature    = NaN;
+-	this.penalty_threshold = 0;
+-	this.stabilization     = 0;
+-	this.reltol				= 0;
+-	this.maxiter           = 0;
+-	this.penalty_lock      = 0;
+-	this.penalty_factor    = 0;
+-	this.isenthalpy        = 0;
+-	this.isdynamicbasalspc = 0;
+-	this.requested_outputs = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//TIMESTEPPING class definition
+-//
+-//   Usage:
+-//      timestepping=new timestepping();
+-
+-function timestepping (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		//time between 2 time steps
+-		this.time_step=1./2.;
+-
+-		//final time
+-		this.final_time=10.*this.time_step;
+-
+-		//time adaptation? 
+-		this.time_adapt=0;
+-		this.cfl_coefficient=0.5;
+-
+-		//should we interpolate forcings between timesteps?
+-		this.interp_forcings=1;
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		var unit;
+-		console.log(sprintf('   timestepping parameters:'));
+-		unit = 'yr';
+-		fielddisplay(this,'start_time','simulation starting time ['+ unit + ']');
+-		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
+-		fielddisplay(this,'time_step','length of time steps [' +unit+ ']');
+-		fielddisplay(this,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
+-		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
+-		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "timestepping";
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			
+-			checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','timestepping.time_adapt','numel',[1],'values',[0,1]);
+-			checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+-			checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
+-			if (this.final_time-this.start_time<0){
+-				md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+-			}
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			var scale;
+-			scale = 365.0*24.0*3600.0;
+-			
+-			WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+-			WriteData(fid,prefix,'object',this,'fieldname','time_adapt','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','cfl_coefficient','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
+-
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.start_time      = 0.;
+-	this.final_time      = 0.;
+-	this.time_step       = 0.;
+-	this.time_adapt      = 0;
+-	this.cfl_coefficient = 0.;
+-	this.interp_forcings = 1;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//TOOLKITS class definition
+-//
+-//   Usage:
+-//      toolkits=new toolkits();
+-
+-function toolkits (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//default toolkits: 
+-		if (IssmConfig('_HAVE_PETSC_')){
+-			//MUMPS is the default toolkits
+-			if (IssmConfig('_HAVE_MUMPS_')){
+-				this.DefaultAnalysis           = mumpsoptions();
+-			}
+-			else{
+-				this.DefaultAnalysis           = iluasmoptions(); 
+-			}
+-		}
+-		else{
+-			if (IssmConfig('_HAVE_MUMPS_')){
+-				this.DefaultAnalysis           = issmmumpssolver(); 
+-			}
+-			else if (IssmConfig('_HAVE_GSL_')){
+-				this.DefaultAnalysis           = issmgslsolver(); 
+-			}
+-			else{
+-				console.warn('toolkits setdefaultparameters message: need at least Mumps or Gsl to define an issm solver type, no default solver assigned');
+-			}
+-		}
+-	}// }}}
+-	this.disp = function(){// {{{
+-		console.log(sprintf('List of toolkits options per analysis:\n'));
+-		for(var prop in this){
+-			if(typeof this[prop] == 'object'){
+-				console.log(prop+ ':',this[prop]);
+-			}
+-		}
+-	}// }}}
+-	this.checkconsistency = function (md,solution,analyses) { // {{{
+-		for(var prop in this){
+-			if(typeof this[prop] == 'object'){
+-				if (this[prop] == ''){
+-					md.checkmessage(sprintf("md.toolkits.%s is empty",prop));
+-				}
+-			}
+-		}
+-	} // }}}
+-		 this.ToolkitsFile = function(filename) { //{{{
+-		 //TOOLKITSFILE - build toolkits file (in string format)
+-		 //
+-		 //   Build a Petsc compatible options string, from the toolkits model field  + return options string. 
+-		 //   This file string will also be used when the toolkit used is 'issm' instead of 'petsc'
+-		 //
+-		 //   Usage:     var toolkitsstring = toolkits.ToolkitsFile();
+-
+-			 var string = '';
+-
+-			 //write header
+-			 string += sprintf('%s%s%s\n','\%Toolkits options file: ',filename,' written from Javascript toolkits array');
+-
+-			 //start writing options
+-			 for (var analysis in this){
+-				 var options;
+-				 
+-				 if(typeof this[analysis] == 'object') options=this[analysis]; else continue;
+-
+-				 //first write analysis:
+-				 string += sprintf('\n+%s\n',analysis); //append a + to recognize it's an analysis enum
+-
+-				 //now, write options
+-			
+-				 for(var optionname in options){
+-					 var optionvalue=options[optionname];
+-
+-					 if (optionvalue.length==0){
+-						 //this option has only one argument
+-						 string+=sprintf('-%s\n',optionname);
+-					 }
+-					 else{
+-						 //option with value. value can be string or scalar
+-						 if (typeof optionvalue == 'number'){
+-							 string+=sprintf('-%s %g\n',optionname,optionvalue);
+-						 }
+-						 else if (typeof optionvalue == 'string'){
+-							 string+=sprintf('-%s %s\n',optionname,optionvalue);
+-						 }
+-						 else throw Error(sprintf("ToolkitsFile error: option '%s' is not well formatted",optionname));
+-					 }
+-				 }
+-			 }
+-			 return string;
+-		 } //}}}
+-	//properties 
+-	// {{{
+-	this.DefaultAnalysis           = [];
+-	//The other properties are dynamic
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//LEVELSET class definition
+-//
+-//   Usage:
+-//      levelset=new levelset();
+-
+-function levelset (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//stabilization = 2 by default
+-		this.stabilization		= 2;
+-		this.reinit_frequency	= NaN;
+-	
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   Level-set parameters:'));
+-		fielddisplay(this,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');
+-		fielddisplay(this,'spclevelset','Levelset constraints (NaN means no constraint)');
+-		fielddisplay(this,'reinit_frequency','Amount of time steps after which the levelset function in re-initialized (NaN: no re-initialization).');
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "levelset";
+-	}// }}}
+-	this.checkconsistency = function(md,solution,analyses) { // {{{
+-		//Early return
+-		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
+-
+-		checkfield(md,'fieldname','levelset.spclevelset','Inf',1,'timeseries',1);
+-		checkfield(md,'fieldname','levelset.stabilization','values',[0,1,2]);
+-	} //}}}
+-	this.marshall=function(md,prefix,fid) { //{{{
+-		WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+-		WriteData(fid,prefix,'object',this,'fieldname','spclevelset','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+-		WriteData(fid,prefix,'object',this,'fieldname','reinit_frequency','format','Integer');
+-
+-	}//}}}
+-		this.fix=function() { //{{{
+-			this.spclevelset=NullFix(this.spclevelset,NaN);
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.stabilization		= 0;
+-	this.spclevelset			= NaN;
+-	this.reinit_frequency	= NaN;
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//TRANS class definition
+-//
+-//   Usage:
+-//      trans =new trans();
+-
+-function trans (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-
+-		//full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+-		this.issmb           = 1;
+-		this.ismasstransport = 1;
+-		this.isstressbalance = 1;
+-		this.isthermal       = 1;
+-		this.isgroundingline = 0;
+-		this.isgia           = 0;
+-		this.isdamageevolution = 0;
+-		this.ismovingfront   = 0;
+-		this.ishydrology     = 0;
+-		this.isslr           = 0;
+-		this.iscoupler       = 0;
+-
+-		//default output
+-		this.requested_outputs=['default'];
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-
+-		console.log(sprintf('   transient solution parameters:'));
+-
+-		fielddisplay(this,'issmb','indicates whether a surface mass balance solution is used in the transient');
+-		fielddisplay(this,'ismasstransport','indicates whether a masstransport solution is used in the transient');
+-		fielddisplay(this,'isstressbalance','indicates whether a stressbalance solution is used in the transient');
+-		fielddisplay(this,'isthermal','indicates whether a thermal solution is used in the transient');
+-		fielddisplay(this,'isgroundingline','indicates whether a groundingline migration is used in the transient');
+-		fielddisplay(this,'isgia','indicates whether a postglacial rebound model is used in the transient');
+-		fielddisplay(this,'isdamageevolution','indicates whether damage evolution is used in the transient');
+-		fielddisplay(this,'ismovingfront','indicates whether a moving front capability is used in the transient');
+-		fielddisplay(this,'ishydrology','indicates whether an hydrology model is used');
+-		fielddisplay(this,'isslr','indicates whether a sea-level rise model is used');
+-		fielddisplay(this,'iscoupler','indicates whether different models are being run with need for coupling');
+-		fielddisplay(this,'requested_outputs','list of additional outputs requested');
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "transient";
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { // {{{
+-
+-			//Early return
+-			if (solution!=TransientSolutionEnum()) return;
+-
+-			checkfield(md,'fieldname','trans.issmb','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.ismasstransport','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isstressbalance','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isthermal','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isgroundingline','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','trans.isgia','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','trans.isdamageevolution','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','trans.ismovingfront','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','trans.ishydrology','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.iscoupler','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isslr','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.requested_outputs','stringrow',1);
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			prefix='md.transient';
+-			WriteData(fid,prefix,'object',this,'fieldname','issmb','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','ismasstransport','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isstressbalance','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isthermal','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isgroundingline','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isgia','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isdamageevolution','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','ishydrology','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','ismovingfront','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','isslr','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','iscoupler','format','Boolean');
+-
+-			//process requested outputs
+-			var outputs = this.requested_outputs;
+-			for (var i=0;i<outputs.length;i++){
+-				if (outputs[i] == 'default') {
+-					outputs.splice(i,1);
+-					var newoutputs=this.defaultoutputs(md);
+-					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+-				}
+-			}			
+-			WriteData(fid,prefix,'data',outputs,'name','md.transient.requested_outputs','format','StringArray');
+-		}//}}}
+-		this.defaultoutputs = function(md) { //{{{
+-			if(this.issmb)return ['SmbMassBalance'];
+-			else return [];
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-
+-	this.issmb             = 0;
+-	this.ismasstransport   = 0;
+-	this.isstressbalance   = 0;
+-	this.isthermal         = 0;
+-	this.isgroundingline   = 0;
+-	this.isgia             = 0;
+-	this.isdamageevolution = 0;
+-	this.ismovingfront     = 0;
+-	this.ishydrology       = 0;
+-	this.isslr             = 0;
+-	this.iscoupler         = 0;
+-	this.requested_outputs = [];
+-
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-//VERBOSE class definition
+-//
+-//   Available verbosity levels:
+-//      mprocessor  : model processing 
+-//      module      : modules
+-//      solution    : solution sequence
+-//      solver      : solver info (extensive)
+-//      convergence : convergence criteria
+-//      control     : control method
+-//      qmu         : sensitivity analysis
+-//      autodiff    : AD analysis
+-//      smb         : smb analysis
+-//
+-//   Usage:
+-//      verbose=verbose();
+-//      verbose=verbose(3);
+-//      verbose=verbose('all');
+-//      verbose=verbose('001100');
+-//      verbose=verbose('module',true,'solver',false);
+-
+-//WARNING: some parts of this file are Synchronized with src/c/shared/Numerics/Verbosity.h
+-//         Do not modify these sections. See src/c/shared/Numerics/README for more info
+-
+-function verbose (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-	}// }}}
+-	this.disp= function(){// {{{
+-		//BEGINDISP
+-		console.log(sprintf('verbose class echo:'));
+-		console.log(sprintf('   %s : %i','mprocessor',this.mprocessor));
+-		console.log(sprintf('   %s : %i','module',this.module));
+-		console.log(sprintf('   %s : %i','solution',this.solution));
+-		console.log(sprintf('   %s : %i','solver',this.solver));
+-		console.log(sprintf('   %s : %i','convergence',this.convergence));
+-		console.log(sprintf('   %s : %i','control',this.control));
+-		console.log(sprintf('   %s : %i','qmu',this.qmu));
+-		console.log(sprintf('   %s : %i','autodiff',this.autodiff));
+-		console.log(sprintf('   %s : %i','smb',this.smb));
+-		//ENDDISP
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses){ // {{{
+-
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'data',this.VerboseToBinary(),'name','md.verbose','format','Integer');
+-		}//}}}
+-		this.VerboseToBinary = function () { //{{{
+-
+-			//BEGINVERB2BIN
+-			var binary=0;
+-			if (this.mprocessor) binary=binary|1; 
+-			if (this.module) binary=binary|2; 
+-			if (this.solution) binary=binary|4; 
+-			if (this.solver) binary=binary|8; 
+-			if (this.convergence) binary=binary|16; 
+-			if (this.control) binary=binary|32; 
+-			if (this.qmu) binary=binary|64; 
+-			if (this.autodiff) binary=binary|128; 
+-			if (this.smb) binary=binary|256; 
+-			//ENDVERB2BIN
+-			return binary;
+-
+-		} //}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	//BEGINFIELDS
+-	this.mprocessor=false;
+-	this.module=false;
+-	this.solution=false;
+-	this.solver=false;
+-	this.convergence=false;
+-	this.control=false;
+-	this.qmu=false;
+-	this.autodiff=false;
+-	this.smb=false;
+-	//ENDFIELDS
+-	// }}}
+-	this.setdefaultparameters();
+-	//}}}
+-}
+-function checkfield(md){
+-//CHECKFIELD - check field consistency
+-//
+-//   Used to check model consistency.
+-//   Requires: 
+-//     'field' or 'fieldname' option. If 'fieldname' is provided, it will retrieve it from the model md. (md.(fieldname)) 
+-//             If 'field' is provided, it will assume the argument following 'field' is a numeric array.
+-//   Available options:
+-//      - NaN: 1 if check that there is no NaN
+-//      - Inf: 1 if check that there is no Inf
+-//      - size: [lines cols], NaN for non checked dimensions
+-//      - >:  greater than provided value
+-//      - >=: greater or equal to provided value
+-//      - <:  smallerthan provided value
+-//      - <=: smaller or equal to provided value
+-//      - < vec:  smallerthan provided values on each vertex
+-//      - timeseries: 1 if check time series consistency (size and time)
+-//      - values: array of strings or vector of acceptable values
+-//      - numel: list of acceptable number of elements
+-//      - array: 1 if check that is array
+-//      - empty: 1 if check that non empty
+-//      - message: overloaded error message
+-//
+-//   Usage:
+-//      checkfield(md,fieldname,options);
+-
+-	//get options
+-	var args = Array.prototype.slice.call(arguments);
+-	var  options = new pairoptions(args.slice(1,args.length));
+-	
+-	//get field: 
+-	if (options.exist('field')){
+-		field=options.getfieldvalue('field'); 
+-		fieldname=options.getfieldvalue('fieldname','no fieldname'); 
+-	}
+-	else{
+-		fieldname=options.getfieldvalue('fieldname'); 
+-		eval("field=md." + fieldname + ";");
+-	}
+-
+-	//check empty
+-	if (options.exist('empty')){
+-		if (field.length == 0){
+-			md.checkmessage(options.getfieldvalue('message','field ' + "'" + fieldname + "'" + 'is empty'));
+-		}
+-	}
+-
+-	//Check size
+-	if (options.exist('size')){
+-		fieldsize=options.getfieldvalue('size');
+-		if (isNaN(fieldsize[0])){
+-			if (field[0].length !=fieldsize[1]){
+-				md.checkmessage(options.getfieldvalue('message', sprintf("field '%s' should have %i columns",fieldname,fieldsize[1])));
+-			}
+-		}
+-		else if (isNaN(fieldsize[1])){
+-			if (field.length!= fieldsize[0]){
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have %i lines",fieldname,fieldsize[0])));
+-			}
+-		}
+-		else{
+-			if (IsArray(field)){
+-				if ((field.length!=fieldsize[0])){
+-					md.checkmessage(options.getfieldvalue('message', sprintf("field '%s' should be %ix%i",fieldname,fieldsize[0],fieldsize[1])));
+-				}
+-			}
+-			if (IsArray(field[0])){
+-				if(field[0].length!=fieldsize[1]){
+-					md.checkmessage(options.getfieldvalue('message', sprintf("field '%s' should be %ix%i",fieldname,fieldsize[0],fieldsize[1])));
+-				}
+-			}
+-		}
+-	}
+-
+-	//Check numel
+-	if (options.exist('numel')){
+-		fieldnumel=options.getfieldvalue('numel');
+-		if (!ArrayIsMember(fieldnumel,[field.length])){
+-			if (fieldnumel.length==1){
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' size should be %i",fieldname,fieldnumel[0])));
+-			}
+-			else if (fieldnumel.length==2){
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' size should be %i or %i",fieldname,fieldnumel[0],fieldnumel[1])));
+-			}
+-			else{
+-				var string=''; 
+-				for (var i=0;i<fieldnumel.length;i++)string=sprintf("%s or %i",string,fieldnumel[i]);
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' size should be %s",fieldname,string)));
+-			}
+-		}
+-	}
+-
+-	//check NaN
+-	if (options.getfieldvalue('NaN',0)){
+-		field2=MatrixToList(field);
+-		if (ArrayAnyEqual(field2,NaN)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("NaN values found in field %s",field)));
+-		}
+-	}
+-
+-	//check Inf
+-	if (options.getfieldvalue('Inf',0)){
+-		field2=MatrixToList(field);
+-		if (ArrayAnyEqual(field2,Infinity)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("Inf values found in field %s",field)));
+-		}
+-	}
+-
+-	//check arry
+-	if (options.getfieldvalue('array',0)){
+-		if (!IsArray(field)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should be an array!",fieldname)));
+-		}
+-	}
+-
+-	//check values
+-	if (options.exist('values')){
+-		fieldvalues=options.getfieldvalue('values');
+-		if (typeof fieldvalues[0]== 'string'){
+-			if (typeof field == 'string'){
+-				if(ArrayAnyEqual(ArrayIsMember([field],fieldvalues),0)){
+-					if (fieldvalues.length==1){
+-						md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' value should be %s",fieldname,fieldvalues[0])));
+-					}
+-					else if (fieldvalues.length==2){
+-						md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' values should be %s or %s",fieldname,fieldvalues[0],fieldvalues[1])));
+-					}
+-					else{
+-						var string=''; 
+-						for (var i=0;i<fieldvalues.length;i++)string=sprintf("%s or %s",string,fieldvalues[i]);
+-						md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values in %s",fieldname,string)));
+-					}
+-				}
+-			}
+-			else{
+-				var string=''; for (var i=0;i<fieldvalues.length;i++)string=sprintf("%s or %s",string,fieldvalues[i]);
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values in %s",fieldname,string)));
+-			}
+-		}
+-		else{
+-			if (typeof field == 'number') field2=MatrixToList([field]);
+-			else field2=MatrixToList(field);
+-			if (typeof field2[0] == 'number'){
+-				if(ArrayAnyEqual(ArrayIsMember(field2,fieldvalues),0)){
+-					var string=''; for (var i=0;i<fieldvalues.length;i++)string=sprintf("%s or %g",string,fieldvalues[i]);
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values in %s",fieldname,string)));
+-				}
+-			}
+-			else{
+-				var string=''; for (var i=0;i<fieldvalues.length;i++)string=sprintf("%s or %g",string,fieldvalues[i]);
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should be a number in %s",fieldname,string)));
+-			}
+-		}
+-	}
+-	
+-	//check greater
+-	if (options.exist('>=')){
+-		lowerbound=options.getfieldvalue('>=');
+-		field2=MatrixToList(field);
+-		if (options.getfieldvalue('timeseries',0)) field2=MatrixToList(ArrayCopy(field).splice(-1,1));
+-
+-		if (ArrayAnyBelowStrict(field2,lowerbound)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values above %g",fieldname,lowerbound)));
+-		}
+-	}
+-	if (options.exist('>')){
+-		lowerbound=options.getfieldvalue('>');
+-		field2=MatrixToList(field);
+-		if (options.getfieldvalue('timeseries',0)) field2=MatrixToList(ArrayCopy(field).splice(-1,1));
+-
+-		if (ArrayAnyBelowOrEqual(field2,lowerbound)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values above %g",fieldname,lowerbound)));
+-		}
+-	}
+-	
+-	//check smaller
+-	if (options.exist('<=')){
+-		upperbound=options.getfieldvalue('<=');
+-		field2=MatrixToList(field);
+-		if (options.getfieldvalue('timeseries',0)) field2=MatrixToList(ArrayCopy(field).splice(-1,1));
+-
+-		if (ArrayAnyAboveOrEqual(field2,upperbound)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values below %g",fieldname,upperbound)));
+-		}
+-	}
+-	
+-	
+-	if (options.exist('<')){
+-		upperbound=options.getfieldvalue('<');
+-		field2=MatrixToList(field);
+-		if (options.getfieldvalue('timeseries',0)) field2=MatrixToList(ArrayCopy(field).splice(-1,1));
+-		if (ArrayAnyAboveStrict(field2,upperbound)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have values below %g",fieldname,upperbound)));
+-		}
+-	}
+-
+-	//Check row of stringrow
+-	if (options.getfieldvalue('stringrow',0)){
+-		if (IsArray(field[0])){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have only one row",field)));
+-		}
+-		if (!IsArray(field)){
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should be an array of string",fieldname)));
+-		}
+-		else{
+-			for(var i=0;i<field.length;i++){
+-				if (!(typeof field[i] == 'string')){
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' values should be a cell of strings",fieldname)));
+-				}
+-			}
+-		}
+-	}
+-
+-	//check file
+-	if (options.getfieldvalue('file',0)){
+-		/*if ~exist(field,'file')
+-			md.checkmessage(['file provided in ''' fieldname ''': ''' field ''' does not exist']);
+-		end*/
+-		throw Error("checkfield error message: file checking on javascript not supported yet!");
+-	}
+-
+-	//Check forcings (size and times)
+-	if (options.getfieldvalue('timeseries',0)){
+-		if (field.length==md.mesh.numberofvertices | field.length==md.mesh.numberofelements){
+-			if (IsArray(field[0])){
+-				md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have only one column as there are md.mesh.numberofvertices lines",fieldname)));
+-			}
+-		}
+-		else if ((field.length==md.mesh.numberofvertices+1) | (field.length==md.mesh.numberofelements+1)){
+-			var times=field[field.length-1]; var sorted_times=ArraySort(times);
+-			for(var i=0;i<times.length;i++){
+-				if(times[i] !=sorted_times[i]){
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' columns should be sorted chronologically",fieldname)));
+-					break;
+-				}
+-			}
+-			var timesm=ArrayCopy(times).splice(0,-1); var timesp=ArrayCopy(times).shift();
+-			for(var i=0;i<timesm.length;i++){
+-				if(timesm[i]==timesp[i]){
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' columns must not contain duplicate timesteps",fieldname)));
+-					break;
+-				}
+-			}
+-		}
+-		else{
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have md.mesh.numberofvertices or md.mesh.numberofvertices+1 lines",fieldname)));
+-		}
+-	}
+-
+-	//Check single value forcings (size and times)
+-	if (options.getfieldvalue('singletimeseries',0)){
+-		if (field.length==2){
+-			var times=field[1]; var sorted_times=ArraySort(times);
+-			for(var i=0;i<times.length;i++){
+-				if(times[i] !=sorted_times[i]){
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' columns should be sorted chronologically",fieldname)));
+-					break;
+-				}
+-			}
+-			var timesm=ArrayCopy(times).splice(0,-1); var timesp=ArrayCopy(times).shift();
+-			for(var i=0;i<timesm.length;i++){
+-				if(timesm[i]==timesp[i]){
+-					md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' columns must not contain duplicate timesteps",fieldname)));
+-					break;
+-				}
+-			}
+-		}
+-		else{
+-			md.checkmessage(options.getfieldvalue('message',sprintf("field '%s' should have 2 lines",fieldname)));
+-		}
+-	}
+-}
+-function ismodelselfconsistent(md){
+-//ISMODELSELFCONSISTENT - check that model forms a closed form solvable problem.
+-//
+-//   Usage:
+-//      ismodelselfconsistent(md),
+-
+-	//initialize consistency as true
+-	md.priv.isconsistent=true;
+-
+-	//Get solution and associated analyses
+-	solution=md.priv.solution;
+-	if(typeof solution != 'number')throw Error('ismodelselfconsistent: did not provide solution type in the private class!');
+-	
+-	var analyses = AnalysisConfiguration(solution);
+-
+-	//Go through a model field, check that it is a class, and call checkconsistency
+-	for(field in md){
+-
+-		//Some properties do not need to be checked
+-		if (field == 'results' | field == 'debug' | field == 'radaroverlay'){
+-			continue;
+-		}
+-
+-		//Check that current field is a class
+-		if(typeof md[field] == 'function'){
+-			continue;
+-		}
+-
+-		//Check consistency of the class
+-		md[field].checkconsistency(md,solution,analyses);
+-	}
+-
+-	//error message if mode is not consistent
+-	if (md.priv.isconsistent==false){
+-		throw Error('Model not consistent, see messages above');
+-	}
+-}
+-
+-function AnalysisConfiguration(solutiontype){ // {{{
+-	//ANALYSISCONFIGURATION - return type of analyses, number of analyses 
+-	//
+-	//   Usage:
+-	//      [analyses]=AnalysisConfiguration(solutiontype);
+-
+-	var analyses=[];
+-	switch (solutiontype){
+-
+-		case StressbalanceSolutionEnum():
+-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum()];
+-			break;
+-
+-		case SteadystateSolutionEnum():
+-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()];
+-			break;
+-
+-		case ThermalSolutionEnum():
+-			analyses=[EnthalpyAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()];
+-			break;
+-
+-		case MasstransportSolutionEnum():
+-			analyses=[MasstransportAnalysisEnum()];
+-			break;
+-
+-		case BalancethicknessSolutionEnum():
+-			analyses=[BalancethicknessAnalysisEnum()];
+-			break;
+-
+-		case Balancethickness2SolutionEnum():
+-			analyses=[Balancethickness2AnalysisEnum()];
+-			break;
+-
+-		case BalancethicknessSoftSolutionEnum():
+-			analyses=[BalancethicknessAnalysisEnum()];
+-			break;
+-
+-		case BalancevelocitySolutionEnum():
+-			analyses=[BalancevelocityAnalysisEnum()];
+-			break;
+-
+-		case SurfaceSlopeSolutionEnum():
+-			analyses=[L2ProjectionBaseAnalysisEnum()];
+-			break;
+-
+-		case BedSlopeSolutionEnum():
+-			analyses=[L2ProjectionBaseAnalysisEnum()];
+-			break;
+-
+-		case GiaSolutionEnum():
+-			analyses=[GiaAnalysisEnum()];
+-			break;
+-
+-		case TransientSolutionEnum():
+-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum(),HydrologySommersAnalysisEnum];
+-			break;
+-
+-		case FlaimSolutionEnum():
+-			analyses=[FlaimAnalysisEnum()];
+-			break;
+-	
+-		case SealevelriseSolutionEnum():
+-			analyses=[SealevelriseAnalysisEnum()];
+-			break;
+-
+-		case HydrologySolutionEnum():
+-			analyses=[L2ProjectionBaseAnalysisEnum(),HydrologyShreveAnalysisEnum(),HydrologyDCInefficientAnalysisEnum(),HydrologyDCEfficientAnalysisEnum()];
+-			break;
+-
+-		case DamageEvolutionSolutionEnum():
+-			analyses=[DamageEvolutionAnalysisEnum()];
+-			break;
+-
+-		default:
+-			throw Error(sprintf("%s%s%s\n",' solution type: ',EnumToString(solutiontype),' not supported yet!'));
+-	}
+-	return analyses;
+-} // }}}
+-//WARNING: DO NOT MODIFY THIS FILE
+-//this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-//Please read src/c/shared/Enum/README for more information
+-function ParametersSTARTEnum(){ return 0;}
+-function FemModelEnum(){ return 1;}
+-function FemModelCommEnum(){ return 2;}
+-function WorldCommEnum(){ return 3;}
+-function IcecapToEarthCommEnum(){ return 4;}
+-function NumModelsEnum(){ return 5;}
+-function ModelIdEnum(){ return 6;}
+-function EarthIdEnum(){ return 7;}
+-function AutodiffIsautodiffEnum(){ return 8;}
+-function AutodiffNumDependentsEnum(){ return 9;}
+-function AutodiffNumDependentObjectsEnum(){ return 10;}
+-function AutodiffDependentObjectNamesEnum(){ return 11;}
+-function AutodiffDependentObjectTypesEnum(){ return 12;}
+-function AutodiffDependentObjectIndicesEnum(){ return 13;}
+-function AutodiffDependentObjectsEnum(){ return 14;}
+-function AutodiffNumIndependentsEnum(){ return 15;}
+-function AutodiffNumIndependentObjectsEnum(){ return 16;}
+-function AutodiffIndependentObjectNamesEnum(){ return 17;}
+-function AutodiffIndependentObjectTypesEnum(){ return 18;}
+-function AutodiffIndependentObjectsEnum(){ return 19;}
+-function AutodiffJacobianEnum(){ return 20;}
+-function AutodiffXpEnum(){ return 21;}
+-function AutodiffDriverEnum(){ return 22;}
+-function AutodiffFosForwardIndexEnum(){ return 23;}
+-function AutodiffFovForwardIndicesEnum(){ return 24;}
+-function AutodiffFosReverseIndexEnum(){ return 25;}
+-function AutodiffMassFluxSegmentsPresentEnum(){ return 26;}
+-function AutodiffKeepEnum(){ return 27;}
+-function AutodiffObufsizeEnum(){ return 28;}
+-function AutodiffLbufsizeEnum(){ return 29;}
+-function AutodiffCbufsizeEnum(){ return 30;}
+-function AutodiffTbufsizeEnum(){ return 31;}
+-function AutodiffGcTriggerRatioEnum(){ return 32;}
+-function AutodiffGcTriggerMaxSizeEnum(){ return 33;}
+-function BalancethicknessSpcthicknessEnum(){ return 34;}
+-function BalancethicknessStabilizationEnum(){ return 35;}
+-function BalancethicknessThickeningRateEnum(){ return 36;}
+-function BasalforcingsEnum(){ return 37;}
+-function BasalforcingsGeothermalfluxEnum(){ return 38;}
+-function BasalforcingsGroundediceMeltingRateEnum(){ return 39;}
+-function BasalforcingsFloatingiceMeltingRateEnum(){ return 40;}
+-function BasalforcingsDeepwaterMeltingRateEnum(){ return 41;}
+-function BasalforcingsDeepwaterElevationEnum(){ return 42;}
+-function BasalforcingsUpperwaterElevationEnum(){ return 43;}
+-function BasalforcingsMeltrateFactorEnum(){ return 44;}
+-function BasalforcingsThresholdThicknessEnum(){ return 45;}
+-function BasalforcingsUpperdepthMeltEnum(){ return 46;}
+-function BasalforcingsMantleconductivityEnum(){ return 47;}
+-function BasalforcingsNusseltEnum(){ return 48;}
+-function BasalforcingsDtbgEnum(){ return 49;}
+-function BasalforcingsPlumeradiusEnum(){ return 50;}
+-function BasalforcingsTopplumedepthEnum(){ return 51;}
+-function BasalforcingsBottomplumedepthEnum(){ return 52;}
+-function BasalforcingsPlumexEnum(){ return 53;}
+-function BasalforcingsPlumeyEnum(){ return 54;}
+-function BasalforcingsCrustthicknessEnum(){ return 55;}
+-function BasalforcingsUppercrustthicknessEnum(){ return 56;}
+-function BasalforcingsUppercrustheatEnum(){ return 57;}
+-function BasalforcingsLowercrustheatEnum(){ return 58;}
+-function FloatingMeltRateEnum(){ return 59;}
+-function LinearFloatingMeltRateEnum(){ return 60;}
+-function MismipFloatingMeltRateEnum(){ return 61;}
+-function MantlePlumeGeothermalFluxEnum(){ return 62;}
+-function BedEnum(){ return 63;}
+-function BaseEnum(){ return 64;}
+-function ConstantsGEnum(){ return 65;}
+-function ConstantsReferencetemperatureEnum(){ return 66;}
+-function ConstantsYtsEnum(){ return 67;}
+-function DependentObjectEnum(){ return 68;}
+-function StressbalanceAbstolEnum(){ return 69;}
+-function StressbalanceConvergenceNumStepsEnum(){ return 70;}
+-function StressbalanceIsnewtonEnum(){ return 71;}
+-function StressbalanceMaxiterEnum(){ return 72;}
+-function StressbalancePenaltyFactorEnum(){ return 73;}
+-function StressbalanceReferentialEnum(){ return 74;}
+-function StressbalanceReltolEnum(){ return 75;}
+-function StressbalanceNumRequestedOutputsEnum(){ return 76;}
+-function StressbalanceRequestedOutputsEnum(){ return 77;}
+-function StressbalanceRestolEnum(){ return 78;}
+-function StressbalanceRiftPenaltyLockEnum(){ return 79;}
+-function StressbalanceRiftPenaltyThresholdEnum(){ return 80;}
+-function StressbalanceShelfDampeningEnum(){ return 81;}
+-function StressbalanceSpcvxEnum(){ return 82;}
+-function StressbalanceSpcvyEnum(){ return 83;}
+-function StressbalanceSpcvzEnum(){ return 84;}
+-function StressbalanceFSreconditioningEnum(){ return 85;}
+-function StressbalanceVertexPairingEnum(){ return 86;}
+-function StressbalanceViscosityOvershootEnum(){ return 87;}
+-function LoadingforceXEnum(){ return 88;}
+-function LoadingforceYEnum(){ return 89;}
+-function LoadingforceZEnum(){ return 90;}
+-function FlowequationBorderSSAEnum(){ return 91;}
+-function FlowequationBorderHOEnum(){ return 92;}
+-function FlowequationBorderFSEnum(){ return 93;}
+-function FlowequationElementEquationEnum(){ return 94;}
+-function FlowequationIsSIAEnum(){ return 95;}
+-function FlowequationIsSSAEnum(){ return 96;}
+-function FlowequationIsL1L2Enum(){ return 97;}
+-function FlowequationIsHOEnum(){ return 98;}
+-function FlowequationIsFSEnum(){ return 99;}
+-function FlowequationFeSSAEnum(){ return 100;}
+-function FlowequationFeHOEnum(){ return 101;}
+-function FlowequationFeFSEnum(){ return 102;}
+-function FlowequationVertexEquationEnum(){ return 103;}
+-function FrictionAsEnum(){ return 104;}
+-function FrictionCoefficientEnum(){ return 105;}
+-function FrictionCoefficientcoulombEnum(){ return 106;}
+-function FrictionPEnum(){ return 107;}
+-function FrictionQEnum(){ return 108;}
+-function FrictionMEnum(){ return 109;}
+-function FrictionCEnum(){ return 110;}
+-function FrictionLawEnum(){ return 111;}
+-function FrictionGammaEnum(){ return 112;}
+-function FrictionFEnum(){ return 113;}
+-function FrictionWaterLayerEnum(){ return 114;}
+-function FrictionEffectivePressureEnum(){ return 115;}
+-function FrictionCouplingEnum(){ return 116;}
+-function GeometryHydrostaticRatioEnum(){ return 117;}
+-function HydrologyModelEnum(){ return 118;}
+-function HydrologyshreveEnum(){ return 119;}
+-function HydrologyshreveSpcwatercolumnEnum(){ return 120;}
+-function HydrologyshreveStabilizationEnum(){ return 121;}
+-function HydrologydcEnum(){ return 122;}
+-function SedimentHeadEnum(){ return 123;}
+-function SedimentHeadOldEnum(){ return 124;}
+-function SedimentHeadResidualEnum(){ return 125;}
+-function EffectivePressureEnum(){ return 126;}
+-function EplHeadEnum(){ return 127;}
+-function EplHeadOldEnum(){ return 128;}
+-function EplHeadSlopeXEnum(){ return 129;}
+-function EplHeadSlopeYEnum(){ return 130;}
+-function EplZigZagCounterEnum(){ return 131;}
+-function HydrologydcMaxIterEnum(){ return 132;}
+-function HydrologydcRelTolEnum(){ return 133;}
+-function HydrologydcSpcsedimentHeadEnum(){ return 134;}
+-function HydrologydcSedimentCompressibilityEnum(){ return 135;}
+-function HydrologydcSedimentPorosityEnum(){ return 136;}
+-function HydrologydcSedimentThicknessEnum(){ return 137;}
+-function HydrologydcSedimentTransmitivityEnum(){ return 138;}
+-function HydrologydcWaterCompressibilityEnum(){ return 139;}
+-function HydrologydcSpceplHeadEnum(){ return 140;}
+-function HydrologydcMaskEplactiveNodeEnum(){ return 141;}
+-function HydrologydcMaskEplactiveEltEnum(){ return 142;}
+-function HydrologydcEplCompressibilityEnum(){ return 143;}
+-function HydrologydcEplPorosityEnum(){ return 144;}
+-function HydrologydcEplInitialThicknessEnum(){ return 145;}
+-function HydrologydcEplColapseThicknessEnum(){ return 146;}
+-function HydrologydcEplMaxThicknessEnum(){ return 147;}
+-function HydrologydcEplThicknessEnum(){ return 148;}
+-function HydrologydcEplThicknessOldEnum(){ return 149;}
+-function HydrologydcEplThickCompEnum(){ return 150;}
+-function HydrologydcEplConductivityEnum(){ return 151;}
+-function HydrologydcIsefficientlayerEnum(){ return 152;}
+-function HydrologydcSedimentlimitFlagEnum(){ return 153;}
+-function HydrologydcSedimentlimitEnum(){ return 154;}
+-function HydrologydcTransferFlagEnum(){ return 155;}
+-function HydrologydcLeakageFactorEnum(){ return 156;}
+-function HydrologydcPenaltyFactorEnum(){ return 157;}
+-function HydrologydcPenaltyLockEnum(){ return 158;}
+-function HydrologydcEplflipLockEnum(){ return 159;}
+-function HydrologydcBasalMoulinInputEnum(){ return 160;}
+-function HydrologyLayerEnum(){ return 161;}
+-function HydrologySedimentEnum(){ return 162;}
+-function HydrologyEfficientEnum(){ return 163;}
+-function HydrologySedimentKmaxEnum(){ return 164;}
+-function HydrologysommersEnum(){ return 165;}
+-function HydrologyHeadEnum(){ return 166;}
+-function HydrologyGapHeightEnum(){ return 167;}
+-function HydrologyBumpSpacingEnum(){ return 168;}
+-function HydrologyBumpHeightEnum(){ return 169;}
+-function HydrologyEnglacialInputEnum(){ return 170;}
+-function HydrologyMoulinInputEnum(){ return 171;}
+-function HydrologyReynoldsEnum(){ return 172;}
+-function HydrologyNeumannfluxEnum(){ return 173;}
+-function HydrologySpcheadEnum(){ return 174;}
+-function HydrologyConductivityEnum(){ return 175;}
+-function InversionControlParametersEnum(){ return 176;}
+-function InversionControlScalingFactorsEnum(){ return 177;}
+-function InversionCostFunctionThresholdEnum(){ return 178;}
+-function InversionCostFunctionsCoefficientsEnum(){ return 179;}
+-function InversionCostFunctionsEnum(){ return 180;}
+-function InversionGradientScalingEnum(){ return 181;}
+-function InversionIscontrolEnum(){ return 182;}
+-function InversionTypeEnum(){ return 183;}
+-function InversionIncompleteAdjointEnum(){ return 184;}
+-function InversionMaxParametersEnum(){ return 185;}
+-function InversionMaxiterPerStepEnum(){ return 186;}
+-function InversionMaxiterEnum(){ return 187;}
+-function InversionMaxstepsEnum(){ return 188;}
+-function InversionFatolEnum(){ return 189;}
+-function InversionFrtolEnum(){ return 190;}
+-function InversionGatolEnum(){ return 191;}
+-function InversionGrtolEnum(){ return 192;}
+-function InversionGttolEnum(){ return 193;}
+-function InversionAlgorithmEnum(){ return 194;}
+-function InversionMinParametersEnum(){ return 195;}
+-function InversionNstepsEnum(){ return 196;}
+-function InversionDxminEnum(){ return 197;}
+-function InversionNumControlParametersEnum(){ return 198;}
+-function InversionNumCostFunctionsEnum(){ return 199;}
+-function InversionStepThresholdEnum(){ return 200;}
+-function InversionThicknessObsEnum(){ return 201;}
+-function InversionSurfaceObsEnum(){ return 202;}
+-function InversionVxObsEnum(){ return 203;}
+-function InversionVyObsEnum(){ return 204;}
+-function InversionVzObsEnum(){ return 205;}
+-function MaskIceLevelsetEnum(){ return 206;}
+-function MaskOceanLevelsetEnum(){ return 207;}
+-function MaskLandLevelsetEnum(){ return 208;}
+-function MaterialsBetaEnum(){ return 209;}
+-function MaterialsHeatcapacityEnum(){ return 210;}
+-function MaterialsLatentheatEnum(){ return 211;}
+-function MaterialsMeltingpointEnum(){ return 212;}
+-function MaterialsMixedLayerCapacityEnum(){ return 213;}
+-function MaterialsRheologyBEnum(){ return 214;}
+-function MaterialsRheologyBbarEnum(){ return 215;}
+-function MaterialsRheologyLawEnum(){ return 216;}
+-function MaterialsRheologyNEnum(){ return 217;}
+-function MaterialsRheologyKoEnum(){ return 218;}
+-function MaterialsRheologyKobarEnum(){ return 219;}
+-function MaterialsRheologyEcEnum(){ return 220;}
+-function MaterialsRheologyEcbarEnum(){ return 221;}
+-function MaterialsRheologyEsEnum(){ return 222;}
+-function MaterialsRheologyEsbarEnum(){ return 223;}
+-function DamageIsdamageEnum(){ return 224;}
+-function DamageDEnum(){ return 225;}
+-function DamageFEnum(){ return 226;}
+-function DamageDbarEnum(){ return 227;}
+-function DamageLawEnum(){ return 228;}
+-function DamageC1Enum(){ return 229;}
+-function DamageC2Enum(){ return 230;}
+-function DamageC3Enum(){ return 231;}
+-function DamageC4Enum(){ return 232;}
+-function DamageElementinterpEnum(){ return 233;}
+-function DamageHealingEnum(){ return 234;}
+-function DamageStressThresholdEnum(){ return 235;}
+-function DamageKappaEnum(){ return 236;}
+-function DamageStabilizationEnum(){ return 237;}
+-function DamageMaxiterEnum(){ return 238;}
+-function DamageSpcdamageEnum(){ return 239;}
+-function DamageMaxDamageEnum(){ return 240;}
+-function DamageEquivStressEnum(){ return 241;}
+-function DamageEvolutionNumRequestedOutputsEnum(){ return 242;}
+-function DamageEvolutionRequestedOutputsEnum(){ return 243;}
+-function DamageEnum(){ return 244;}
+-function NewDamageEnum(){ return 245;}
+-function StressIntensityFactorEnum(){ return 246;}
+-function CalvingLawEnum(){ return 247;}
+-function CalvingCalvingrateEnum(){ return 248;}
+-function CalvingMeltingrateEnum(){ return 249;}
+-function CalvingLevermannEnum(){ return 250;}
+-function CalvingDevEnum(){ return 251;}
+-function CalvingMinthicknessEnum(){ return 252;}
+-function DefaultCalvingEnum(){ return 253;}
+-function CalvingRequestedOutputsEnum(){ return 254;}
+-function CalvinglevermannCoeffEnum(){ return 255;}
+-function CalvinglevermannMeltingrateEnum(){ return 256;}
+-function CalvingdevCoeffEnum(){ return 257;}
+-function CalvingratexEnum(){ return 258;}
+-function CalvingrateyEnum(){ return 259;}
+-function CalvingratexAverageEnum(){ return 260;}
+-function CalvingrateyAverageEnum(){ return 261;}
+-function StrainRateparallelEnum(){ return 262;}
+-function StrainRateperpendicularEnum(){ return 263;}
+-function StrainRateeffectiveEnum(){ return 264;}
+-function MaterialsRhoIceEnum(){ return 265;}
+-function MaterialsRhoSeawaterEnum(){ return 266;}
+-function MaterialsRhoFreshwaterEnum(){ return 267;}
+-function MaterialsMuWaterEnum(){ return 268;}
+-function MaterialsThermalExchangeVelocityEnum(){ return 269;}
+-function MaterialsThermalconductivityEnum(){ return 270;}
+-function MaterialsTemperateiceconductivityEnum(){ return 271;}
+-function MaterialsLithosphereShearModulusEnum(){ return 272;}
+-function MaterialsLithosphereDensityEnum(){ return 273;}
+-function MaterialsMantleShearModulusEnum(){ return 274;}
+-function MaterialsMantleDensityEnum(){ return 275;}
+-function MaterialsEarthDensityEnum(){ return 276;}
+-function MeshAverageVertexConnectivityEnum(){ return 277;}
+-function MeshElements2dEnum(){ return 278;}
+-function MeshElementsEnum(){ return 279;}
+-function MeshLowerelementsEnum(){ return 280;}
+-function MeshNumberofelements2dEnum(){ return 281;}
+-function MeshNumberofelementsEnum(){ return 282;}
+-function MeshNumberoflayersEnum(){ return 283;}
+-function MeshNumberofvertices2dEnum(){ return 284;}
+-function MeshNumberofverticesEnum(){ return 285;}
+-function MeshUpperelementsEnum(){ return 286;}
+-function MeshVertexonbaseEnum(){ return 287;}
+-function MeshVertexonsurfaceEnum(){ return 288;}
+-function MeshVertexonboundaryEnum(){ return 289;}
+-function MeshXEnum(){ return 290;}
+-function MeshYEnum(){ return 291;}
+-function MeshZEnum(){ return 292;}
+-function MeshLatEnum(){ return 293;}
+-function MeshLongEnum(){ return 294;}
+-function MeshREnum(){ return 295;}
+-function MeshElementtypeEnum(){ return 296;}
+-function MeshSegmentsEnum(){ return 297;}
+-function DomainTypeEnum(){ return 298;}
+-function DomainDimensionEnum(){ return 299;}
+-function Domain2DhorizontalEnum(){ return 300;}
+-function Domain2DverticalEnum(){ return 301;}
+-function Domain3DEnum(){ return 302;}
+-function Domain3DsurfaceEnum(){ return 303;}
+-function MiscellaneousNameEnum(){ return 304;}
+-function MasstransportHydrostaticAdjustmentEnum(){ return 305;}
+-function MasstransportIsfreesurfaceEnum(){ return 306;}
+-function MasstransportMinThicknessEnum(){ return 307;}
+-function MasstransportPenaltyFactorEnum(){ return 308;}
+-function MasstransportSpcthicknessEnum(){ return 309;}
+-function MasstransportStabilizationEnum(){ return 310;}
+-function MasstransportVertexPairingEnum(){ return 311;}
+-function MasstransportNumRequestedOutputsEnum(){ return 312;}
+-function MasstransportRequestedOutputsEnum(){ return 313;}
+-function QmuIsdakotaEnum(){ return 314;}
+-function MassFluxSegmentsEnum(){ return 315;}
+-function MassFluxSegmentsPresentEnum(){ return 316;}
+-function QmuMassFluxSegmentsPresentEnum(){ return 317;}
+-function QmuNumberofpartitionsEnum(){ return 318;}
+-function QmuNumberofresponsesEnum(){ return 319;}
+-function QmuPartitionEnum(){ return 320;}
+-function QmuResponsedescriptorsEnum(){ return 321;}
+-function QmuVariabledescriptorsEnum(){ return 322;}
+-function RiftsNumriftsEnum(){ return 323;}
+-function RiftsRiftstructEnum(){ return 324;}
+-function SettingsResultsOnNodesEnum(){ return 325;}
+-function SettingsIoGatherEnum(){ return 326;}
+-function SettingsLowmemEnum(){ return 327;}
+-function SettingsOutputFrequencyEnum(){ return 328;}
+-function SettingsRecordingFrequencyEnum(){ return 329;}
+-function SettingsWaitonlockEnum(){ return 330;}
+-function DebugProfilingEnum(){ return 331;}
+-function ProfilingCurrentMemEnum(){ return 332;}
+-function ProfilingCurrentFlopsEnum(){ return 333;}
+-function ProfilingSolutionTimeEnum(){ return 334;}
+-function SteadystateMaxiterEnum(){ return 335;}
+-function SteadystateNumRequestedOutputsEnum(){ return 336;}
+-function SteadystateReltolEnum(){ return 337;}
+-function SteadystateRequestedOutputsEnum(){ return 338;}
+-function SurfaceEnum(){ return 339;}
+-function ThermalIsenthalpyEnum(){ return 340;}
+-function ThermalIsdynamicbasalspcEnum(){ return 341;}
+-function ThermalReltolEnum(){ return 342;}
+-function ThermalMaxiterEnum(){ return 343;}
+-function ThermalPenaltyFactorEnum(){ return 344;}
+-function ThermalPenaltyLockEnum(){ return 345;}
+-function ThermalPenaltyThresholdEnum(){ return 346;}
+-function ThermalSpctemperatureEnum(){ return 347;}
+-function ThermalStabilizationEnum(){ return 348;}
+-function ThermalNumRequestedOutputsEnum(){ return 349;}
+-function ThermalRequestedOutputsEnum(){ return 350;}
+-function GiaMantleViscosityEnum(){ return 351;}
+-function GiaLithosphereThicknessEnum(){ return 352;}
+-function ThicknessEnum(){ return 353;}
+-function TimesteppingStartTimeEnum(){ return 354;}
+-function TimesteppingFinalTimeEnum(){ return 355;}
+-function TimesteppingCflCoefficientEnum(){ return 356;}
+-function TimesteppingTimeAdaptEnum(){ return 357;}
+-function TimesteppingTimeStepEnum(){ return 358;}
+-function TimesteppingInterpForcingsEnum(){ return 359;}
+-function TransientIssmbEnum(){ return 360;}
+-function TransientIscouplerEnum(){ return 361;}
+-function TransientIsstressbalanceEnum(){ return 362;}
+-function TransientIsgroundinglineEnum(){ return 363;}
+-function TransientIsmasstransportEnum(){ return 364;}
+-function TransientIsthermalEnum(){ return 365;}
+-function TransientIsgiaEnum(){ return 366;}
+-function TransientIsdamageevolutionEnum(){ return 367;}
+-function TransientIshydrologyEnum(){ return 368;}
+-function TransientIsmovingfrontEnum(){ return 369;}
+-function TransientIsslrEnum(){ return 370;}
+-function TransientNumRequestedOutputsEnum(){ return 371;}
+-function TransientRequestedOutputsEnum(){ return 372;}
+-function PotentialEnum(){ return 373;}
+-function BalancethicknessSpcpotentialEnum(){ return 374;}
+-function BalancethicknessApparentMassbalanceEnum(){ return 375;}
+-function Balancethickness2MisfitEnum(){ return 376;}
+-function BalancethicknessDiffusionCoefficientEnum(){ return 377;}
+-function BalancethicknessCmuEnum(){ return 378;}
+-function BalancethicknessOmegaEnum(){ return 379;}
+-function BalancethicknessD0Enum(){ return 380;}
+-function SmbEnum(){ return 381;}
+-function SmbAnalysisEnum(){ return 382;}
+-function SmbSolutionEnum(){ return 383;}
+-function SmbNumRequestedOutputsEnum(){ return 384;}
+-function SmbRequestedOutputsEnum(){ return 385;}
+-function SmbIsInitializedEnum(){ return 386;}
+-function SMBforcingEnum(){ return 387;}
+-function SmbMassBalanceEnum(){ return 388;}
+-function SMBgembEnum(){ return 389;}
+-function SmbInitDensityScalingEnum(){ return 390;}
+-function SmbTaEnum(){ return 391;}
+-function SmbVEnum(){ return 392;}
+-function SmbDswrfEnum(){ return 393;}
+-function SmbDlwrfEnum(){ return 394;}
+-function SmbPEnum(){ return 395;}
+-function SmbSwfEnum(){ return 396;}
+-function SmbEAirEnum(){ return 397;}
+-function SmbPAirEnum(){ return 398;}
+-function SmbTmeanEnum(){ return 399;}
+-function SmbCEnum(){ return 400;}
+-function SmbTzEnum(){ return 401;}
+-function SmbVzEnum(){ return 402;}
+-function SmbDtEnum(){ return 403;}
+-function SmbDzEnum(){ return 404;}
+-function SmbAIdxEnum(){ return 405;}
+-function SmbSwIdxEnum(){ return 406;}
+-function SmbDenIdxEnum(){ return 407;}
+-function SmbZTopEnum(){ return 408;}
+-function SmbDzTopEnum(){ return 409;}
+-function SmbDzMinEnum(){ return 410;}
+-function SmbZYEnum(){ return 411;}
+-function SmbZMaxEnum(){ return 412;}
+-function SmbZMinEnum(){ return 413;}
+-function SmbOutputFreqEnum(){ return 414;}
+-function SmbASnowEnum(){ return 415;}
+-function SmbAIceEnum(){ return 416;}
+-function SmbCldFracEnum(){ return 417;}
+-function SmbT0wetEnum(){ return 418;}
+-function SmbT0dryEnum(){ return 419;}
+-function SmbKEnum(){ return 420;}
+-function SmbDEnum(){ return 421;}
+-function SmbReEnum(){ return 422;}
+-function SmbGdnEnum(){ return 423;}
+-function SmbGspEnum(){ return 424;}
+-function SmbECEnum(){ return 425;}
+-function SmbCondensationEnum(){ return 426;}
+-function SmbWEnum(){ return 427;}
+-function SmbAEnum(){ return 428;}
+-function SmbTEnum(){ return 429;}
+-function SmbIsgraingrowthEnum(){ return 430;}
+-function SmbIsalbedoEnum(){ return 431;}
+-function SmbIsshortwaveEnum(){ return 432;}
+-function SmbIsthermalEnum(){ return 433;}
+-function SmbIsaccumulationEnum(){ return 434;}
+-function SmbIsmeltEnum(){ return 435;}
+-function SmbIsdensificationEnum(){ return 436;}
+-function SmbIsturbulentfluxEnum(){ return 437;}
+-function SMBpddEnum(){ return 438;}
+-function SmbDelta18oEnum(){ return 439;}
+-function SmbDelta18oSurfaceEnum(){ return 440;}
+-function SmbIsdelta18oEnum(){ return 441;}
+-function SmbIsmungsmEnum(){ return 442;}
+-function SmbIsd18opdEnum(){ return 443;}
+-function SmbPrecipitationsPresentdayEnum(){ return 444;}
+-function SmbPrecipitationsLgmEnum(){ return 445;}
+-function SmbTemperaturesPresentdayEnum(){ return 446;}
+-function SmbTemperaturesLgmEnum(){ return 447;}
+-function SmbPrecipitationEnum(){ return 448;}
+-function SmbDesfacEnum(){ return 449;}
+-function SmbS0pEnum(){ return 450;}
+-function SmbS0tEnum(){ return 451;}
+-function SmbRlapsEnum(){ return 452;}
+-function SmbRlapslgmEnum(){ return 453;}
+-function SmbPfacEnum(){ return 454;}
+-function SmbTdiffEnum(){ return 455;}
+-function SmbSealevEnum(){ return 456;}
+-function SMBd18opddEnum(){ return 457;}
+-function SmbDpermilEnum(){ return 458;}
+-function SMBgradientsEnum(){ return 459;}
+-function SmbMonthlytemperaturesEnum(){ return 460;}
+-function SmbHrefEnum(){ return 461;}
+-function SmbSmbrefEnum(){ return 462;}
+-function SmbBPosEnum(){ return 463;}
+-function SmbBNegEnum(){ return 464;}
+-function SMBhenningEnum(){ return 465;}
+-function SMBcomponentsEnum(){ return 466;}
+-function SmbAccumulationEnum(){ return 467;}
+-function SmbEvaporationEnum(){ return 468;}
+-function SmbRunoffEnum(){ return 469;}
+-function SMBmeltcomponentsEnum(){ return 470;}
+-function SmbMeltEnum(){ return 471;}
+-function SmbRefreezeEnum(){ return 472;}
+-function SMBgcmEnum(){ return 473;}
+-function SmbIspddEnum(){ return 474;}
+-function SmbIssmbgradientsEnum(){ return 475;}
+-function SolutionTypeEnum(){ return 476;}
+-function AnalysisTypeEnum(){ return 477;}
+-function ConfigurationTypeEnum(){ return 478;}
+-function AdjointBalancethicknessAnalysisEnum(){ return 479;}
+-function AdjointBalancethickness2AnalysisEnum(){ return 480;}
+-function AdjointHorizAnalysisEnum(){ return 481;}
+-function AnalysisCounterEnum(){ return 482;}
+-function DefaultAnalysisEnum(){ return 483;}
+-function BalancethicknessAnalysisEnum(){ return 484;}
+-function BalancethicknessSolutionEnum(){ return 485;}
+-function Balancethickness2AnalysisEnum(){ return 486;}
+-function Balancethickness2SolutionEnum(){ return 487;}
+-function BalancethicknessSoftAnalysisEnum(){ return 488;}
+-function BalancethicknessSoftSolutionEnum(){ return 489;}
+-function BalancevelocityAnalysisEnum(){ return 490;}
+-function BalancevelocitySolutionEnum(){ return 491;}
+-function L2ProjectionEPLAnalysisEnum(){ return 492;}
+-function L2ProjectionBaseAnalysisEnum(){ return 493;}
+-function BedSlopeSolutionEnum(){ return 494;}
+-function DamageEvolutionSolutionEnum(){ return 495;}
+-function DamageEvolutionAnalysisEnum(){ return 496;}
+-function StressbalanceAnalysisEnum(){ return 497;}
+-function StressbalanceSIAAnalysisEnum(){ return 498;}
+-function StressbalanceSolutionEnum(){ return 499;}
+-function StressbalanceVerticalAnalysisEnum(){ return 500;}
+-function EnthalpyAnalysisEnum(){ return 501;}
+-function FlaimAnalysisEnum(){ return 502;}
+-function FlaimSolutionEnum(){ return 503;}
+-function HydrologyShreveAnalysisEnum(){ return 504;}
+-function HydrologyDCInefficientAnalysisEnum(){ return 505;}
+-function HydrologyDCEfficientAnalysisEnum(){ return 506;}
+-function HydrologySommersAnalysisEnum(){ return 507;}
+-function HydrologySolutionEnum(){ return 508;}
+-function MeltingAnalysisEnum(){ return 509;}
+-function MasstransportAnalysisEnum(){ return 510;}
+-function MasstransportSolutionEnum(){ return 511;}
+-function FreeSurfaceBaseAnalysisEnum(){ return 512;}
+-function FreeSurfaceTopAnalysisEnum(){ return 513;}
+-function SurfaceNormalVelocityEnum(){ return 514;}
+-function ExtrudeFromBaseAnalysisEnum(){ return 515;}
+-function ExtrudeFromTopAnalysisEnum(){ return 516;}
+-function DepthAverageAnalysisEnum(){ return 517;}
+-function SteadystateSolutionEnum(){ return 518;}
+-function SurfaceSlopeSolutionEnum(){ return 519;}
+-function SmoothAnalysisEnum(){ return 520;}
+-function ThermalAnalysisEnum(){ return 521;}
+-function ThermalSolutionEnum(){ return 522;}
+-function TransientSolutionEnum(){ return 523;}
+-function UzawaPressureAnalysisEnum(){ return 524;}
+-function GiaSolutionEnum(){ return 525;}
+-function GiaAnalysisEnum(){ return 526;}
+-function MeshdeformationSolutionEnum(){ return 527;}
+-function MeshdeformationAnalysisEnum(){ return 528;}
+-function LevelsetAnalysisEnum(){ return 529;}
+-function LevelsetStabilizationEnum(){ return 530;}
+-function ExtrapolationAnalysisEnum(){ return 531;}
+-function LsfReinitializationAnalysisEnum(){ return 532;}
+-function ApproximationEnum(){ return 533;}
+-function NoneApproximationEnum(){ return 534;}
+-function SIAApproximationEnum(){ return 535;}
+-function SSAApproximationEnum(){ return 536;}
+-function SSAHOApproximationEnum(){ return 537;}
+-function SSAFSApproximationEnum(){ return 538;}
+-function L1L2ApproximationEnum(){ return 539;}
+-function HOApproximationEnum(){ return 540;}
+-function HOFSApproximationEnum(){ return 541;}
+-function FSApproximationEnum(){ return 542;}
+-function FSvelocityEnum(){ return 543;}
+-function FSpressureEnum(){ return 544;}
+-function DataSetEnum(){ return 545;}
+-function ConstraintsEnum(){ return 546;}
+-function LoadsEnum(){ return 547;}
+-function MaterialsEnum(){ return 548;}
+-function NodesEnum(){ return 549;}
+-function ContoursEnum(){ return 550;}
+-function ParametersEnum(){ return 551;}
+-function VerticesEnum(){ return 552;}
+-function ResultsEnum(){ return 553;}
+-function GenericParamEnum(){ return 554;}
+-function AdolcParamEnum(){ return 555;}
+-function BoolInputEnum(){ return 556;}
+-function BoolParamEnum(){ return 557;}
+-function ContourEnum(){ return 558;}
+-function ControlInputEnum(){ return 559;}
+-function DatasetInputEnum(){ return 560;}
+-function DoubleInputEnum(){ return 561;}
+-function DoubleArrayInputEnum(){ return 562;}
+-function DataSetParamEnum(){ return 563;}
+-function DoubleMatArrayParamEnum(){ return 564;}
+-function DoubleMatParamEnum(){ return 565;}
+-function DoubleParamEnum(){ return 566;}
+-function DoubleVecParamEnum(){ return 567;}
+-function ElementEnum(){ return 568;}
+-function ElementHookEnum(){ return 569;}
+-function HookEnum(){ return 570;}
+-function ExternalResultEnum(){ return 571;}
+-function FileParamEnum(){ return 572;}
+-function InputEnum(){ return 573;}
+-function IntInputEnum(){ return 574;}
+-function InputToExtrudeEnum(){ return 575;}
+-function InputToL2ProjectEnum(){ return 576;}
+-function InputToDepthaverageEnum(){ return 577;}
+-function InputToSmoothEnum(){ return 578;}
+-function SmoothThicknessMultiplierEnum(){ return 579;}
+-function IntParamEnum(){ return 580;}
+-function IntVecParamEnum(){ return 581;}
+-function TransientParamEnum(){ return 582;}
+-function MaticeEnum(){ return 583;}
+-function MatdamageiceEnum(){ return 584;}
+-function MatestarEnum(){ return 585;}
+-function MatparEnum(){ return 586;}
+-function NodeEnum(){ return 587;}
+-function NumericalfluxEnum(){ return 588;}
+-function NumericalfluxTypeEnum(){ return 589;}
+-function NeumannfluxEnum(){ return 590;}
+-function ParamEnum(){ return 591;}
+-function MoulinEnum(){ return 592;}
+-function PengridEnum(){ return 593;}
+-function PenpairEnum(){ return 594;}
+-function ProfilerEnum(){ return 595;}
+-function MatrixParamEnum(){ return 596;}
+-function MassconEnum(){ return 597;}
+-function MassconNameEnum(){ return 598;}
+-function MassconDefinitionenumEnum(){ return 599;}
+-function MassconLevelsetEnum(){ return 600;}
+-function MassconaxpbyEnum(){ return 601;}
+-function MassconaxpbyNameEnum(){ return 602;}
+-function MassconaxpbyDefinitionenumEnum(){ return 603;}
+-function MassconaxpbyNamexEnum(){ return 604;}
+-function MassconaxpbyNameyEnum(){ return 605;}
+-function MassconaxpbyAlphaEnum(){ return 606;}
+-function MassconaxpbyBetaEnum(){ return 607;}
+-function NodeSIdEnum(){ return 608;}
+-function VectorParamEnum(){ return 609;}
+-function RiftfrontEnum(){ return 610;}
+-function RiftfrontTypeEnum(){ return 611;}
+-function SegmentEnum(){ return 612;}
+-function SegmentRiftfrontEnum(){ return 613;}
+-function SpcDynamicEnum(){ return 614;}
+-function SpcStaticEnum(){ return 615;}
+-function SpcTransientEnum(){ return 616;}
+-function StringArrayParamEnum(){ return 617;}
+-function StringParamEnum(){ return 618;}
+-function SegEnum(){ return 619;}
+-function SegInputEnum(){ return 620;}
+-function TriaEnum(){ return 621;}
+-function TriaInputEnum(){ return 622;}
+-function TetraEnum(){ return 623;}
+-function TetraInputEnum(){ return 624;}
+-function PentaEnum(){ return 625;}
+-function PentaInputEnum(){ return 626;}
+-function VertexEnum(){ return 627;}
+-function VertexPIdEnum(){ return 628;}
+-function VertexSIdEnum(){ return 629;}
+-function AirEnum(){ return 630;}
+-function IceEnum(){ return 631;}
+-function MelangeEnum(){ return 632;}
+-function WaterEnum(){ return 633;}
+-function ClosedEnum(){ return 634;}
+-function FreeEnum(){ return 635;}
+-function OpenEnum(){ return 636;}
+-function AdjointpEnum(){ return 637;}
+-function AdjointxEnum(){ return 638;}
+-function AdjointyEnum(){ return 639;}
+-function AdjointzEnum(){ return 640;}
+-function BalancethicknessMisfitEnum(){ return 641;}
+-function BedSlopeXEnum(){ return 642;}
+-function BedSlopeYEnum(){ return 643;}
+-function BoundaryEnum(){ return 644;}
+-function ConvergedEnum(){ return 645;}
+-function FillEnum(){ return 646;}
+-function FractionIncrementEnum(){ return 647;}
+-function FrictionEnum(){ return 648;}
+-function InternalEnum(){ return 649;}
+-function MassFluxEnum(){ return 650;}
+-function MeltingOffsetEnum(){ return 651;}
+-function MisfitEnum(){ return 652;}
+-function PressureEnum(){ return 653;}
+-function PressurePicardEnum(){ return 654;}
+-function AndroidFrictionCoefficientEnum(){ return 655;}
+-function ResetPenaltiesEnum(){ return 656;}
+-function SegmentOnIceShelfEnum(){ return 657;}
+-function SurfaceAbsVelMisfitEnum(){ return 658;}
+-function SurfaceAreaEnum(){ return 659;}
+-function SurfaceAverageVelMisfitEnum(){ return 660;}
+-function SurfaceLogVelMisfitEnum(){ return 661;}
+-function SurfaceLogVxVyMisfitEnum(){ return 662;}
+-function SurfaceRelVelMisfitEnum(){ return 663;}
+-function SurfaceSlopeXEnum(){ return 664;}
+-function SurfaceSlopeYEnum(){ return 665;}
+-function TemperatureEnum(){ return 666;}
+-function TemperaturePicardEnum(){ return 667;}
+-function TemperaturePDDEnum(){ return 668;}
+-function ThicknessAbsMisfitEnum(){ return 669;}
+-function SurfaceAbsMisfitEnum(){ return 670;}
+-function VelEnum(){ return 671;}
+-function VelocityEnum(){ return 672;}
+-function VxAverageEnum(){ return 673;}
+-function VxEnum(){ return 674;}
+-function VxPicardEnum(){ return 675;}
+-function VyAverageEnum(){ return 676;}
+-function VyEnum(){ return 677;}
+-function VyPicardEnum(){ return 678;}
+-function VzEnum(){ return 679;}
+-function VzSSAEnum(){ return 680;}
+-function VzHOEnum(){ return 681;}
+-function VzPicardEnum(){ return 682;}
+-function VzFSEnum(){ return 683;}
+-function VxMeshEnum(){ return 684;}
+-function VyMeshEnum(){ return 685;}
+-function VzMeshEnum(){ return 686;}
+-function EnthalpyEnum(){ return 687;}
+-function EnthalpyPicardEnum(){ return 688;}
+-function ThicknessAbsGradientEnum(){ return 689;}
+-function ThicknessAlongGradientEnum(){ return 690;}
+-function ThicknessAcrossGradientEnum(){ return 691;}
+-function ThicknessPositiveEnum(){ return 692;}
+-function IntMatParamEnum(){ return 693;}
+-function RheologyBbarAbsGradientEnum(){ return 694;}
+-function RheologyBAbsGradientEnum(){ return 695;}
+-function DragCoefficientAbsGradientEnum(){ return 696;}
+-function TransientInputEnum(){ return 697;}
+-function WaterfractionEnum(){ return 698;}
+-function WatercolumnEnum(){ return 699;}
+-function BasalFrictionEnum(){ return 700;}
+-function ViscousHeatingEnum(){ return 701;}
+-function HydrologyWaterVxEnum(){ return 702;}
+-function HydrologyWaterVyEnum(){ return 703;}
+-function DrivingStressXEnum(){ return 704;}
+-function DrivingStressYEnum(){ return 705;}
+-function SigmaNNEnum(){ return 706;}
+-function StressTensorEnum(){ return 707;}
+-function StressTensorxxEnum(){ return 708;}
+-function StressTensorxyEnum(){ return 709;}
+-function StressTensorxzEnum(){ return 710;}
+-function StressTensoryyEnum(){ return 711;}
+-function StressTensoryzEnum(){ return 712;}
+-function StressTensorzzEnum(){ return 713;}
+-function StressMaxPrincipalEnum(){ return 714;}
+-function DeviatoricStressEnum(){ return 715;}
+-function DeviatoricStressxxEnum(){ return 716;}
+-function DeviatoricStressxyEnum(){ return 717;}
+-function DeviatoricStressxzEnum(){ return 718;}
+-function DeviatoricStressyyEnum(){ return 719;}
+-function DeviatoricStressyzEnum(){ return 720;}
+-function DeviatoricStresszzEnum(){ return 721;}
+-function DeviatoricStresseffectiveEnum(){ return 722;}
+-function LambdaSEnum(){ return 723;}
+-function StrainRateEnum(){ return 724;}
+-function StrainRatexxEnum(){ return 725;}
+-function StrainRatexyEnum(){ return 726;}
+-function StrainRatexzEnum(){ return 727;}
+-function StrainRateyyEnum(){ return 728;}
+-function StrainRateyzEnum(){ return 729;}
+-function StrainRatezzEnum(){ return 730;}
+-function DivergenceEnum(){ return 731;}
+-function MaxDivergenceEnum(){ return 732;}
+-function GiaCrossSectionShapeEnum(){ return 733;}
+-function GiadWdtEnum(){ return 734;}
+-function GiaWEnum(){ return 735;}
+-function P0Enum(){ return 736;}
+-function P0ArrayEnum(){ return 737;}
+-function P1Enum(){ return 738;}
+-function P1DGEnum(){ return 739;}
+-function P1bubbleEnum(){ return 740;}
+-function P1bubblecondensedEnum(){ return 741;}
+-function P2Enum(){ return 742;}
+-function P2bubbleEnum(){ return 743;}
+-function P2bubblecondensedEnum(){ return 744;}
+-function P2xP1Enum(){ return 745;}
+-function P1xP2Enum(){ return 746;}
+-function P1xP3Enum(){ return 747;}
+-function P2xP4Enum(){ return 748;}
+-function P1P1Enum(){ return 749;}
+-function P1P1GLSEnum(){ return 750;}
+-function MINIEnum(){ return 751;}
+-function MINIcondensedEnum(){ return 752;}
+-function TaylorHoodEnum(){ return 753;}
+-function LATaylorHoodEnum(){ return 754;}
+-function XTaylorHoodEnum(){ return 755;}
+-function OneLayerP4zEnum(){ return 756;}
+-function CrouzeixRaviartEnum(){ return 757;}
+-function LACrouzeixRaviartEnum(){ return 758;}
+-function SaveResultsEnum(){ return 759;}
+-function BoolExternalResultEnum(){ return 760;}
+-function DoubleExternalResultEnum(){ return 761;}
+-function DoubleMatExternalResultEnum(){ return 762;}
+-function IntExternalResultEnum(){ return 763;}
+-function JEnum(){ return 764;}
+-function StringExternalResultEnum(){ return 765;}
+-function StepEnum(){ return 766;}
+-function TimeEnum(){ return 767;}
+-function WaterColumnOldEnum(){ return 768;}
+-function OutputdefinitionEnum(){ return 769;}
+-function Outputdefinition1Enum(){ return 770;}
+-function Outputdefinition2Enum(){ return 771;}
+-function Outputdefinition3Enum(){ return 772;}
+-function Outputdefinition4Enum(){ return 773;}
+-function Outputdefinition5Enum(){ return 774;}
+-function Outputdefinition6Enum(){ return 775;}
+-function Outputdefinition7Enum(){ return 776;}
+-function Outputdefinition8Enum(){ return 777;}
+-function Outputdefinition9Enum(){ return 778;}
+-function Outputdefinition10Enum(){ return 779;}
+-function Outputdefinition11Enum(){ return 780;}
+-function Outputdefinition12Enum(){ return 781;}
+-function Outputdefinition13Enum(){ return 782;}
+-function Outputdefinition14Enum(){ return 783;}
+-function Outputdefinition15Enum(){ return 784;}
+-function Outputdefinition16Enum(){ return 785;}
+-function Outputdefinition17Enum(){ return 786;}
+-function Outputdefinition18Enum(){ return 787;}
+-function Outputdefinition19Enum(){ return 788;}
+-function Outputdefinition20Enum(){ return 789;}
+-function Outputdefinition21Enum(){ return 790;}
+-function Outputdefinition22Enum(){ return 791;}
+-function Outputdefinition23Enum(){ return 792;}
+-function Outputdefinition24Enum(){ return 793;}
+-function Outputdefinition25Enum(){ return 794;}
+-function Outputdefinition26Enum(){ return 795;}
+-function Outputdefinition27Enum(){ return 796;}
+-function Outputdefinition28Enum(){ return 797;}
+-function Outputdefinition29Enum(){ return 798;}
+-function Outputdefinition30Enum(){ return 799;}
+-function Outputdefinition31Enum(){ return 800;}
+-function Outputdefinition32Enum(){ return 801;}
+-function Outputdefinition33Enum(){ return 802;}
+-function Outputdefinition34Enum(){ return 803;}
+-function Outputdefinition35Enum(){ return 804;}
+-function Outputdefinition36Enum(){ return 805;}
+-function Outputdefinition37Enum(){ return 806;}
+-function Outputdefinition38Enum(){ return 807;}
+-function Outputdefinition39Enum(){ return 808;}
+-function Outputdefinition40Enum(){ return 809;}
+-function Outputdefinition41Enum(){ return 810;}
+-function Outputdefinition42Enum(){ return 811;}
+-function Outputdefinition43Enum(){ return 812;}
+-function Outputdefinition44Enum(){ return 813;}
+-function Outputdefinition45Enum(){ return 814;}
+-function Outputdefinition46Enum(){ return 815;}
+-function Outputdefinition47Enum(){ return 816;}
+-function Outputdefinition48Enum(){ return 817;}
+-function Outputdefinition49Enum(){ return 818;}
+-function Outputdefinition50Enum(){ return 819;}
+-function Outputdefinition51Enum(){ return 820;}
+-function Outputdefinition52Enum(){ return 821;}
+-function Outputdefinition53Enum(){ return 822;}
+-function Outputdefinition54Enum(){ return 823;}
+-function Outputdefinition55Enum(){ return 824;}
+-function Outputdefinition56Enum(){ return 825;}
+-function Outputdefinition57Enum(){ return 826;}
+-function Outputdefinition58Enum(){ return 827;}
+-function Outputdefinition59Enum(){ return 828;}
+-function Outputdefinition60Enum(){ return 829;}
+-function Outputdefinition61Enum(){ return 830;}
+-function Outputdefinition62Enum(){ return 831;}
+-function Outputdefinition63Enum(){ return 832;}
+-function Outputdefinition64Enum(){ return 833;}
+-function Outputdefinition65Enum(){ return 834;}
+-function Outputdefinition66Enum(){ return 835;}
+-function Outputdefinition67Enum(){ return 836;}
+-function Outputdefinition68Enum(){ return 837;}
+-function Outputdefinition69Enum(){ return 838;}
+-function Outputdefinition70Enum(){ return 839;}
+-function Outputdefinition71Enum(){ return 840;}
+-function Outputdefinition72Enum(){ return 841;}
+-function Outputdefinition73Enum(){ return 842;}
+-function Outputdefinition74Enum(){ return 843;}
+-function Outputdefinition75Enum(){ return 844;}
+-function Outputdefinition76Enum(){ return 845;}
+-function Outputdefinition77Enum(){ return 846;}
+-function Outputdefinition78Enum(){ return 847;}
+-function Outputdefinition79Enum(){ return 848;}
+-function Outputdefinition80Enum(){ return 849;}
+-function Outputdefinition81Enum(){ return 850;}
+-function Outputdefinition82Enum(){ return 851;}
+-function Outputdefinition83Enum(){ return 852;}
+-function Outputdefinition84Enum(){ return 853;}
+-function Outputdefinition85Enum(){ return 854;}
+-function Outputdefinition86Enum(){ return 855;}
+-function Outputdefinition87Enum(){ return 856;}
+-function Outputdefinition88Enum(){ return 857;}
+-function Outputdefinition89Enum(){ return 858;}
+-function Outputdefinition90Enum(){ return 859;}
+-function Outputdefinition91Enum(){ return 860;}
+-function Outputdefinition92Enum(){ return 861;}
+-function Outputdefinition93Enum(){ return 862;}
+-function Outputdefinition94Enum(){ return 863;}
+-function Outputdefinition95Enum(){ return 864;}
+-function Outputdefinition96Enum(){ return 865;}
+-function Outputdefinition97Enum(){ return 866;}
+-function Outputdefinition98Enum(){ return 867;}
+-function Outputdefinition99Enum(){ return 868;}
+-function Outputdefinition100Enum(){ return 869;}
+-function OutputdefinitionListEnum(){ return 870;}
+-function MassfluxatgateEnum(){ return 871;}
+-function MassfluxatgateNameEnum(){ return 872;}
+-function MassfluxatgateDefinitionenumEnum(){ return 873;}
+-function MassfluxatgateSegmentsEnum(){ return 874;}
+-function NodalvalueEnum(){ return 875;}
+-function NodalvalueNameEnum(){ return 876;}
+-function NodalvalueDefinitionenumEnum(){ return 877;}
+-function NodalvalueModelEnum(){ return 878;}
+-function NodalvalueNodeEnum(){ return 879;}
+-function MisfitNameEnum(){ return 880;}
+-function MisfitDefinitionenumEnum(){ return 881;}
+-function MisfitModelEnum(){ return 882;}
+-function MisfitObservationEnum(){ return 883;}
+-function MisfitObservationEnum(){ return 884;}
+-function MisfitLocalEnum(){ return 885;}
+-function MisfitTimeinterpolationEnum(){ return 886;}
+-function MisfitWeightsEnum(){ return 887;}
+-function MisfitWeightsEnum(){ return 888;}
+-function SurfaceObservationEnum(){ return 889;}
+-function WeightsSurfaceObservationEnum(){ return 890;}
+-function VxObsEnum(){ return 891;}
+-function WeightsVxObsEnum(){ return 892;}
+-function VyObsEnum(){ return 893;}
+-function WeightsVyObsEnum(){ return 894;}
+-function MinVelEnum(){ return 895;}
+-function MaxVelEnum(){ return 896;}
+-function MinVxEnum(){ return 897;}
+-function MaxVxEnum(){ return 898;}
+-function MaxAbsVxEnum(){ return 899;}
+-function MinVyEnum(){ return 900;}
+-function MaxVyEnum(){ return 901;}
+-function MaxAbsVyEnum(){ return 902;}
+-function MinVzEnum(){ return 903;}
+-function MaxVzEnum(){ return 904;}
+-function MaxAbsVzEnum(){ return 905;}
+-function FloatingAreaEnum(){ return 906;}
+-function GroundedAreaEnum(){ return 907;}
+-function IceMassEnum(){ return 908;}
+-function IceVolumeEnum(){ return 909;}
+-function IceVolumeAboveFloatationEnum(){ return 910;}
+-function TotalFloatingBmbEnum(){ return 911;}
+-function TotalGroundedBmbEnum(){ return 912;}
+-function TotalSmbEnum(){ return 913;}
+-function AbsoluteEnum(){ return 914;}
+-function IncrementalEnum(){ return 915;}
+-function AugmentedLagrangianREnum(){ return 916;}
+-function AugmentedLagrangianRhopEnum(){ return 917;}
+-function AugmentedLagrangianRlambdaEnum(){ return 918;}
+-function AugmentedLagrangianRholambdaEnum(){ return 919;}
+-function AugmentedLagrangianThetaEnum(){ return 920;}
+-function NoneEnum(){ return 921;}
+-function AggressiveMigrationEnum(){ return 922;}
+-function SoftMigrationEnum(){ return 923;}
+-function SubelementMigrationEnum(){ return 924;}
+-function SubelementMigration2Enum(){ return 925;}
+-function ContactEnum(){ return 926;}
+-function GroundingOnlyEnum(){ return 927;}
+-function MaskGroundediceLevelsetEnum(){ return 928;}
+-function GaussSegEnum(){ return 929;}
+-function GaussTriaEnum(){ return 930;}
+-function GaussTetraEnum(){ return 931;}
+-function GaussPentaEnum(){ return 932;}
+-function FSSolverEnum(){ return 933;}
+-function AdjointEnum(){ return 934;}
+-function ColinearEnum(){ return 935;}
+-function ControlSteadyEnum(){ return 936;}
+-function FsetEnum(){ return 937;}
+-function Gradient1Enum(){ return 938;}
+-function Gradient2Enum(){ return 939;}
+-function Gradient3Enum(){ return 940;}
+-function GradientEnum(){ return 941;}
+-function GroundinglineMigrationEnum(){ return 942;}
+-function GsetEnum(){ return 943;}
+-function IndexEnum(){ return 944;}
+-function IndexedEnum(){ return 945;}
+-function IntersectEnum(){ return 946;}
+-function NodalEnum(){ return 947;}
+-function OldGradientEnum(){ return 948;}
+-function OutputBufferPointerEnum(){ return 949;}
+-function OutputBufferSizePointerEnum(){ return 950;}
+-function OutputFilePointerEnum(){ return 951;}
+-function ToolkitsFileNameEnum(){ return 952;}
+-function RootPathEnum(){ return 953;}
+-function OutputFileNameEnum(){ return 954;}
+-function InputFileNameEnum(){ return 955;}
+-function LockFileNameEnum(){ return 956;}
+-function RestartFileNameEnum(){ return 957;}
+-function ToolkitsOptionsAnalysesEnum(){ return 958;}
+-function ToolkitsOptionsStringsEnum(){ return 959;}
+-function QmuErrNameEnum(){ return 960;}
+-function QmuInNameEnum(){ return 961;}
+-function QmuOutNameEnum(){ return 962;}
+-function RegularEnum(){ return 963;}
+-function ScaledEnum(){ return 964;}
+-function SeparateEnum(){ return 965;}
+-function SsetEnum(){ return 966;}
+-function VerboseEnum(){ return 967;}
+-function TriangleInterpEnum(){ return 968;}
+-function BilinearInterpEnum(){ return 969;}
+-function NearestInterpEnum(){ return 970;}
+-function XYEnum(){ return 971;}
+-function XYZEnum(){ return 972;}
+-function DenseEnum(){ return 973;}
+-function MpiDenseEnum(){ return 974;}
+-function MpiSparseEnum(){ return 975;}
+-function SeqEnum(){ return 976;}
+-function MpiEnum(){ return 977;}
+-function MumpsEnum(){ return 978;}
+-function GslEnum(){ return 979;}
+-function OptionEnum(){ return 980;}
+-function GenericOptionEnum(){ return 981;}
+-function OptionCellEnum(){ return 982;}
+-function OptionStructEnum(){ return 983;}
+-function CuffeyEnum(){ return 984;}
+-function BuddJackaEnum(){ return 985;}
+-function CuffeyTemperateEnum(){ return 986;}
+-function PatersonEnum(){ return 987;}
+-function ArrheniusEnum(){ return 988;}
+-function LliboutryDuvalEnum(){ return 989;}
+-function SpclevelsetEnum(){ return 990;}
+-function ExtrapolationVariableEnum(){ return 991;}
+-function IceMaskNodeActivationEnum(){ return 992;}
+-function LevelsetfunctionSlopeXEnum(){ return 993;}
+-function LevelsetfunctionSlopeYEnum(){ return 994;}
+-function LevelsetfunctionPicardEnum(){ return 995;}
+-function LevelsetReinitFrequencyEnum(){ return 996;}
+-function SealevelriseSolutionEnum(){ return 997;}
+-function SealevelriseAnalysisEnum(){ return 998;}
+-function SealevelEnum(){ return 999;}
+-function SealevelEustaticEnum(){ return 1000;}
+-function SealevelriseDeltathicknessEnum(){ return 1001;}
+-function SealevelriseMaxiterEnum(){ return 1002;}
+-function SealevelriseReltolEnum(){ return 1003;}
+-function SealevelriseAbstolEnum(){ return 1004;}
+-function SealevelriseLoveHEnum(){ return 1005;}
+-function SealevelriseLoveKEnum(){ return 1006;}
+-function SealevelriseTideLoveHEnum(){ return 1007;}
+-function SealevelriseTideLoveKEnum(){ return 1008;}
+-function SealevelriseRigidEnum(){ return 1009;}
+-function SealevelriseElasticEnum(){ return 1010;}
+-function SealevelriseRotationEnum(){ return 1011;}
+-function SealevelriseGElasticEnum(){ return 1012;}
+-function SealevelriseDegaccEnum(){ return 1013;}
+-function SealevelriseTransitionsEnum(){ return 1014;}
+-function SealevelriseRequestedOutputsEnum(){ return 1015;}
+-function SealevelriseNumRequestedOutputsEnum(){ return 1016;}
+-function ParametersENDEnum(){ return 1017;}
+-function MaximumNumberOfDefinitionsEnum(){ return 1018;}
+-function FlagElements(md,region){
+-//FLAGELEMENTS - flag the elements in an region
+-//
+-//   The region can be given as a string, or as a javascript array
+-//
+-//   Usage: 
+-//      flag=FlagElements(md,region);
+-//
+-//   Example:
+-//      flag=FlagElements(md,'all');
+-//      flag=FlagElements(md,'');
+-//      flag=FlagElements(md,domain);
+-
+-	//variables
+-	var flag;
+-	
+-	if (typeof region == 'string'){
+-		if (region === ''){
+-			flag=NewArrayFill(md.mesh.numberofelements,0);
+-		}
+-		else if (region === 'all'){
+-			flag=NewArrayFill(md.mesh.numberofelements,1);
+-		}
+-		else{
+-			flag=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,region,'element',1);
+-		}
+-	}
+-	else if(IsArray(region)){
+-		if (region.length==md.mesh.numberofelements){
+-			flag=region;
+-		}
+-		else if (region.length==md.mesh.numberofvertices){
+-			var flag=NewArrayFill(md.mesh.numberofelements,0);
+-			for (var i=0;i<md.mesh.numberofelements;i++)
+-				var sum=0;
+-				for(var j=0;j<md.mesh.elements[0].length;j++){
+-					sum += region[md.mesh.element[i][j]-1];
+-				}
+-				if (sum==md.mesh.elements[0].length)flag[i]=1;
+-		}
+-		else{
+-			throw Error('Flaglist for region must be of same size as number of elements in model');
+-		}
+-	}
+-	else{
+-		throw Error('Invalid region option');
+-	}
+-	return flag;
+-}
+-function  marshallcostfunctions(cost_functions){
+-	for(var i=0;i<cost_functions.length;i++){
+-		if(cost_functions[i]==101) data[i]=SurfaceAbsVelMisfitEnum();
+-		if(cost_functions[i]==102) data[i]=SurfaceRelVelMisfitEnum();
+-		if(cost_functions[i]==103) data[i]=SurfaceLogVelMisfitEnum();
+-		if(cost_functions[i]==104) data[i]=SurfaceLogVxVyMisfitEnum();
+-		if(cost_functions[i]==105) data[i]=SurfaceAverageVelMisfitEnum();
+-		if(cost_functions[i]==201) data[i]=ThicknessAbsMisfitEnum();
+-		if(cost_functions[i]==501) data[i]=DragCoefficientAbsGradientEnum();
+-		if(cost_functions[i]==502) data[i]=RheologyBbarAbsGradientEnum();
+-		if(cost_functions[i]==503) data[i]=ThicknessAbsGradientEnum();
+-		if(cost_functions[i]==504) data[i]=ThicknessAlongGradientEnum();
+-		if(cost_functions[i]==505) data[i]=ThicknessAcrossGradientEnum();
+-		if(cost_functions[i]==506) data[i]=BalancethicknessMisfitEnum();
+-		if(cost_functions[i]==507) data[i]=RheologyBAbsGradientEnum();
+-		if(cost_functions[i]==601) data[i]=SurfaceAbsMisfitEnum();
+-	}
+-	return data;
+-}
+-//FILEPTR class definition
+-////
+-//// Usage: 
+-//// var fid = new fileptr(); 
+-//
+-//
+-
+-function fileptr() {
+-	//properties
+-	this.increment=NaN;
+-	this.buffer =NaN;
+-	this.view =NaN;
+-	this.ptr =NaN;
+-	this.buffersize =NaN;
+-	this.mode ='';
+-	this.options = new pairoptions(Array.prototype.slice.call(arguments));
+-	
+-	//methods
+-		this.disp = function () { //{{{
+-			console.log(sprintf("   fileptr:")); 
+-
+-			console.log(sprintf("       buffer: ArrayBuffer{ byteLength: %i }\n",this.buffer.byteLength));
+-			console.log(sprintf("       ptr: %i\n",this.ptr));
+-			console.log(sprintf("       increment: %i\n",this.increment));
+-			console.log(sprintf("       mode: %s\n",this.mode));
+-
+-		} //}}}
+-		this.setdefaultparameters = function (options) { //{{{
+-	
+-			this.mode=options.getfieldvalue('mode');
+-			this.ptr=0;
+-			this.increment=0;
+-			this.buffersize=0;
+-			if (this.mode=='w'){
+-				this.increment=options.getfieldvalue('increment',800000); //80000 bytes,  10000 doubles.
+-				this.buffer=new ArrayBuffer(this.increment);
+-				this.view=new DataView(this.buffer);
+-			}
+-			else if(this.mode == 'r'){
+-				
+-				/*recover buffer and its size: */
+-				var bufferin= options.getfieldvalue('buffer');
+-				this.buffersize= options.getfieldvalue('buffersize');
+-				
+-				/*crete a typed array buffer: */
+-				this.buffer=new ArrayBuffer(this.buffersize);
+-				this.view=new DataView(this.buffer); 
+-				for(var i=0;i<this.buffersize;i++) this.view.setUint8(i,bufferin[i]);
+-			}
+-
+-		} //}}}
+-		this.fwrite = function (value,format) { //{{{
+-
+-			
+-			if(format == 'int'){
+-				if(this.ptr+4>=this.buffer.byteLength)this.resize();
+-				this.view.setUint32(this.ptr,value,true); this.ptr+=4;
+-			}
+-			else if(format == 'char'){
+-				if(this.ptr+value.length>=this.buffer.byteLength)this.resize();
+-				for(var i=0;i<value.length;i++){
+-					this.view.setUint8(this.ptr,value.charCodeAt(i),true); 
+-					this.ptr+=1;
+-				}
+-			}
+-			else if(format == 'double'){
+-				if(this.ptr+8>=this.buffer.byteLength)this.resize();
+-				if (!IsArray(value)){
+-					this.view.setFloat64(this.ptr,value,true);
+-					this.ptr+=8;
+-				}
+-				else{
+-					if (!IsArray(value[0])){
+-						if(this.ptr+value.length*8>=this.buffer.byteLength){
+-							this.resize();
+-							if(this.ptr+value.length*8>=this.buffer.byteLength)throw Error('fileptr.fwrite error: need to increase increment size!');
+-						}
+-						for(var i=0;i<value.length;i++){
+-							this.view.setFloat64(this.ptr,value[i],true);
+-							this.ptr+=8;
+-						}
+-					}
+-					else{
+-						if(this.ptr+value.length*value[0].length*8>=this.buffer.byteLength)this.resize();
+-						for(var i=0;i<value.length;i++){
+-							for(var j=0;j<value[0].length;j++){
+-								this.view.setFloat64(this.ptr,value[i][j],true);
+-								this.ptr+=8;
+-							}
+-						}
+-					}
+-				}
+-			}
+-			else throw Error('fileptr.fwrite error message: wrong type of format');
+-		} //}}}
+-		this.fread = function (size,format) { //{{{
+-			
+-			var value;
+-
+-			if(this.ptr==this.buffersize)return -1;
+-			if(format == 'int'){
+-				if(size==1){
+-					value=this.view.getInt32(this.ptr,true); 
+-					this.ptr+=4;
+-				}
+-				else{
+-					value = new Int32Array(size);
+-					for(var i=0;i<size;i++){
+-						value[i]=this.view.getInt32(this.ptr,true); 
+-						this.ptr+=4;
+-					}
+-				}
+-			}
+-			else if(format == 'char'){
+-				value = ''; 
+-				for(var i=0;i<(size-1);i++){
+-					value+= String.fromCharCode(this.view.getUint8(this.ptr,true));
+-					this.ptr+=1;
+-				}
+-				this.ptr+=1; //pass over the '\0';
+-
+-			}
+-			else if(format == 'double'){
+-				if(size==1){
+-					value=this.view.getFloat64(this.ptr,true);
+-					this.ptr+=8;
+-				}
+-				else{ 
+-					value = new Float64Array(size);
+-					for(var i=0;i<size;i++){
+-						value[i]=this.view.getFloat64(this.ptr,true);
+-						this.ptr+=8;
+-					}
+-				}
+-			}
+-			else throw Error('fileptr.fwrite error message: wrong type of format');
+-			
+-			return value;
+-		} //}}}
+-		this.rawbuffer = function () { //{{{
+-			return this.buffer.slice(0,this.ptr);
+-		} //}}}
+-		this.resize = function () { //{{{
+-			var  newbuffer = new ArrayBuffer(this.buffer.byteLength+this.increment);
+-			new Uint8Array(newbuffer).set(new Uint8Array(this.buffer));
+-			this.buffer=newbuffer;
+-			this.view=new DataView(this.buffer);
+-		} //}}}
+-	//set defaults
+-	this.setdefaultparameters(this.options);
+-}
+-function savemodel(md) {
+-
+-	var string=encodeURI(JSONfn.stringify(md));
+-
+-	var url='data:text/json:charset=utf8,' + encodeURIComponent(string);
+-	window.open(url, '_blank');
+-	window.focus();
+-}
+-function loadmodel(modelstring) {
+-
+-	var md=JSONfn.parse(decodeURI(modelstring));
+-	md.fix();
+-	return md;
+-}
+-function saveAsFile(content) {
+-
+-	var url='data:text/json:charset=utf8,' + encodeURIComponent(content);
+-	window.open(url, '_blank');
+-	window.focus();
+-}
+-function download() {
+-	//DOWNLOAD - save model/variable data to file
+-	//
+-	//   Usage:
+-	//      download=download('id','slr-download');
+-	//      download=download('id','slr-download','data',md.geometry.thickness,'data',md.results.Stressbalance.Vel);
+-
+-	//Convert arguments to options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice());
+-	
+-	//Recover option values:
+-	var id = options.getfieldvalue('id','');
+-	
+-	document.getElementById(id).addEventListener('click', function() {
+-		var data = {'elements':md.mesh.elements,'x':md.mesh.x,'y':md.mesh.y,'z':md.mesh.z};
+-		for (var i=2; i < args.length; i+=2) {
+-			try { 
+-				data[args[i]] = args[i+1];
+-			}
+-			catch (e) { 
+-				console.log(e); 
+-			}
+-		}
+-		string = JSONfn.stringify(data);
+-		
+-		var url='data:text/json:charset=utf8,' + encodeURIComponent(string);
+-		window.open(url, '_blank');
+-		window.focus();
+-	});
+-}
+-function paterson(temperature){
+-//PATERSON - figure out the rigidity of ice for a given temperature
+-//
+-//   rigidity (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
+-//   temperature is in Kelvin degrees
+-//
+-//   Usage:
+-//      var rigidity=paterson(temperature)
+-
+-	//variables:
+-	var T=[];
+-
+-	if (ArrayAnyBelowStrict(temperature,0)){
+-		throw Error('input temperature should be in Kelvin (positive)');
+-	}
+-	
+-	T=temperature;
+-	for(var i=0;i<temperature.length;i++)T[i]=temperature[i]-273.15;
+-
+-	//The routine below is equivalent to:
+-
+-	// n=3; T=temperature-273;
+-	// //From paterson,
+-	// Temp=[0;-2;-5;-10;-15;-20;-25;-30;-35;-40;-45;-50];
+-	// A=[6.8*10^-15;2.4*10^-15;1.6*10^-15;4.9*10^-16;2.9*10^-16;1.7*10^-16;9.4*
+-	// 10^-17;5.1*10^-17;2.7*10^-17;1.4*10^-17;7.3*10^-18;3.6*10^-18];;//s-1(kPa-3)
+-	// //Convert into rigidity B
+-	// B=A.^(-1/n)*10^3; //s^(1/3)Pa
+-	// //Now, do a cubic fit between Temp and B: 
+-	// fittedmodel=fit(Temp,B,'cubicspline');
+-	// rigidity=fittedmodel(temperature);
+-
+-	var rigidity=NewArrayFill(T.length,0);
+-	
+-	for (var i=0;i<T.length;i++){
+-		
+-		if(T[i]<=-45)              rigidity[i]=Math.pow(10,8)*(-0.000292866376675*Math.pow(T[i]+50,3)+ 0.011672640664130*Math.pow(T[i]+50,2)  -0.325004442485481*(T[i]+50)+  6.524779401948101);
+-		if(-45<=T[i] & T[i]<-40)   rigidity[i]=Math.pow(10,8)*(-0.000292866376675*Math.pow(T[i]+45,3)+ 0.007279645014004*Math.pow(T[i]+45,2)  -0.230243014094813*(T[i]+45)+  5.154964909039554);
+-		if(-40<=T[i] & T[i]<-35)   rigidity[i]=Math.pow(10,8)*(0.000072737147457*Math.pow(T[i]+40,3)+  0.002886649363879*Math.pow(T[i]+40,2)  -0.179411542205399*(T[i]+40)+  4.149132666831214);
+-		if(-35<=T[i] & T[i]<-30)   rigidity[i]=Math.pow(10,8)*(-0.000086144770023*Math.pow(T[i]+35,3)+ 0.003977706575736*Math.pow(T[i]+35,2)  -0.145089762507325*(T[i]+35)+  3.333333333333331);
+-		if(-30<=T[i] & T[i]<-25)   rigidity[i]=Math.pow(10,8)*(-0.000043984685769*Math.pow(T[i]+30,3)+ 0.002685535025386*Math.pow(T[i]+30,2)  -0.111773554501713*(T[i]+30)+  2.696559088937191);
+-		if(-25<=T[i] & T[i]<-20)   rigidity[i]=Math.pow(10,8)*(-0.000029799523463*Math.pow(T[i]+25,3)+ 0.002025764738854*Math.pow(T[i]+25,2)  -0.088217055680511*(T[i]+25)+  2.199331606342181);
+-		if(-20<=T[i] & T[i]<-15)   rigidity[i]=Math.pow(10,8)*(0.000136920904777*Math.pow(T[i]+20,3)+  0.001578771886910*Math.pow(T[i]+20,2)  -0.070194372551690*(T[i]+20)+  1.805165505978111);
+-		if(-15<=T[i] & T[i]<-10)   rigidity[i]=Math.pow(10,8)*(-0.000899763781026*Math.pow(T[i]+15,3)+ 0.003632585458564*Math.pow(T[i]+15,2)  -0.044137585824322*(T[i]+15)+  1.510778053489523);
+-		if(-10<=T[i] & T[i]<-5)    rigidity[i]=Math.pow(10,8)*(0.001676964325070*Math.pow(T[i]+10,3)-  0.009863871256831*Math.pow(T[i]+10,2)  -0.075294014815659*(T[i]+10)+  1.268434288203714);
+-		if(-5<=T[i] & T[i]<-2)     rigidity[i]=Math.pow(10,8)*(-0.003748937622487*Math.pow(T[i]+5,3)+0.015290593619213*Math.pow(T[i]+5,2)  -0.048160403003748*(T[i]+5)+  0.854987973338348);
+-		if(-2<=T[i])              rigidity[i]=Math.pow(10,8)*(-0.003748937622488*Math.pow(T[i]+2,3)-0.018449844983174*Math.pow(T[i]+2,2)  -0.057638157095631*(T[i]+2)+  0.746900791092860);
+-
+-		//Now make sure that rigidity is positive
+-		if(rigidity[i]<0)          rigidity[i]=Math.pow(10,6);
+-	}
+-	return rigidity;
+-}
+-function triangle(md){
+-//TRIANGLE - create model mesh using the triangle package
+-//
+-//   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
+-//   where md is a @model object, domainname is the name of an Argus domain outline file, 
+-//   and resolution is a characteristic length for the mesh (same unit as the domain outline
+-//   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+-//
+-//   Usage:
+-//      triangle(md,domain,resolution)
+-//   or triangle(md,domain,riftname, resolution)
+-//
+-//   Examples:
+-//      triangle(md,domain,1000);
+-//      triangle(md,domain, rifts, 1500);
+-
+-	if (!(arguments.length==3 | arguments.length==4)){
+-		console.log('triangle usage error.');
+-	}
+-	
+-	var md=arguments[0];
+-	var domain=arguments[1];
+-
+-	if (arguments.length==3){
+-		var resolution=arguments[2];
+-		var rifts=[];
+-	}
+-	if (arguments.length==4){
+-		var rifts=arguments[2];
+-		var resolution=arguments[3];
+-	}
+-
+-	//Figure out a characteristic area. Resolution is a node oriented concept (ex a 1000m  resolution node would 
+-	//be made of 1000*1000 area squares). 
+-	var area=Math.pow(resolution,2);
+-
+-	//Call mesher: 
+-	var return_array=TriMesh(md, domain, rifts, area); 
+-
+-	//Plug into md:
+-	md.mesh.elements=return_array[0];
+-	md.mesh.x=return_array[1];
+-	md.mesh.y=return_array[2];
+-	md.mesh.segments=return_array[3];
+-	md.mesh.segmentmarkers=return_array[4];
+-	
+-	//Fill in rest of fields:
+-	md.mesh.numberofelements=md.mesh.elements.length;
+-	md.mesh.numberofvertices=md.mesh.x.length;
+-	md.mesh.vertexonboundary=new Float64Array(md.mesh.numberofvertices); 
+-
+-	for (i=0;i<md.mesh.segments.length;i++) for(var j=0;j<2;j++) md.mesh.vertexonboundary[md.mesh.segments[i][j]-1]=1;
+-
+-	//Now, build the connectivity tables for this mesh.
+-	md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
+-	md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);	
+-
+-}
+-var colorbars={};
+-colorbars["jet"]=[[0.000000,0.000000,0.750000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.250000,1.000000],
+-[0.000000,0.500000,1.000000],
+-[0.000000,0.750000,1.000000],
+-[0.000000,1.000000,1.000000],
+-[0.250000,1.000000,0.750000],
+-[0.500000,1.000000,0.500000],
+-[0.750000,1.000000,0.250000],
+-[1.000000,1.000000,0.000000],
+-[1.000000,0.750000,0.000000],
+-[1.000000,0.500000,0.000000],
+-[1.000000,0.250000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[0.750000,0.000000,0.000000],
+-[0.500000,0.000000,0.000000]];
+-colorbars["hsv"]=[[1.000000,0.000000,0.000000],
+-[1.000000,0.375000,0.000000],
+-[1.000000,0.750000,0.000000],
+-[0.875000,1.000000,0.000000],
+-[0.500000,1.000000,0.000000],
+-[0.125000,1.000000,0.000000],
+-[0.000000,1.000000,0.250000],
+-[0.000000,1.000000,0.625000],
+-[0.000000,1.000000,1.000000],
+-[0.000000,0.625000,1.000000],
+-[0.000000,0.250000,1.000000],
+-[0.125000,0.000000,1.000000],
+-[0.500000,0.000000,1.000000],
+-[0.875000,0.000000,1.000000],
+-[1.000000,0.000000,0.750000],
+-[1.000000,0.000000,0.375000]];
+-colorbars["hot"]=[[0.166667,0.000000,0.000000],
+-[0.333333,0.000000,0.000000],
+-[0.500000,0.000000,0.000000],
+-[0.666667,0.000000,0.000000],
+-[0.833333,0.000000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,0.166667,0.000000],
+-[1.000000,0.333333,0.000000],
+-[1.000000,0.500000,0.000000],
+-[1.000000,0.666667,0.000000],
+-[1.000000,0.833333,0.000000],
+-[1.000000,1.000000,0.000000],
+-[1.000000,1.000000,0.250000],
+-[1.000000,1.000000,0.500000],
+-[1.000000,1.000000,0.750000],
+-[1.000000,1.000000,1.000000]];
+-colorbars["gray"]=[[0.000000,0.000000,0.000000],
+-[0.066667,0.066667,0.066667],
+-[0.133333,0.133333,0.133333],
+-[0.200000,0.200000,0.200000],
+-[0.266667,0.266667,0.266667],
+-[0.333333,0.333333,0.333333],
+-[0.400000,0.400000,0.400000],
+-[0.466667,0.466667,0.466667],
+-[0.533333,0.533333,0.533333],
+-[0.600000,0.600000,0.600000],
+-[0.666667,0.666667,0.666667],
+-[0.733333,0.733333,0.733333],
+-[0.800000,0.800000,0.800000],
+-[0.866667,0.866667,0.866667],
+-[0.933333,0.933333,0.933333],
+-[1.000000,1.000000,1.000000]];
+-colorbars["bone"]=[[0.000000,0.000000,0.020833],
+-[0.058333,0.058333,0.100000],
+-[0.116667,0.116667,0.179167],
+-[0.175000,0.175000,0.258333],
+-[0.233333,0.233333,0.337500],
+-[0.291667,0.291667,0.416667],
+-[0.350000,0.370833,0.475000],
+-[0.408333,0.450000,0.533333],
+-[0.466667,0.529167,0.591667],
+-[0.525000,0.608333,0.650000],
+-[0.583333,0.687500,0.708333],
+-[0.641667,0.766667,0.766667],
+-[0.731250,0.825000,0.825000],
+-[0.820833,0.883333,0.883333],
+-[0.910417,0.941667,0.941667],
+-[1.000000,1.000000,1.000000]];
+-colorbars["copper"]=[[0.000000,0.000000,0.000000],
+-[0.083333,0.052080,0.033167],
+-[0.166667,0.104160,0.066333],
+-[0.250000,0.156240,0.099500],
+-[0.333333,0.208320,0.132667],
+-[0.416667,0.260400,0.165833],
+-[0.500000,0.312480,0.199000],
+-[0.583333,0.364560,0.232167],
+-[0.666667,0.416640,0.265333],
+-[0.750000,0.468720,0.298500],
+-[0.833333,0.520800,0.331667],
+-[0.916667,0.572880,0.364833],
+-[1.000000,0.624960,0.398000],
+-[1.000000,0.677040,0.431167],
+-[1.000000,0.729120,0.464333],
+-[1.000000,0.781200,0.497500]];
+-colorbars["pink"]=[[0.235702,0.000000,0.000000],
+-[0.394405,0.210819,0.210819],
+-[0.505525,0.298142,0.298142],
+-[0.596285,0.365148,0.365148],
+-[0.674949,0.421637,0.421637],
+-[0.745356,0.471405,0.471405],
+-[0.774597,0.567646,0.516398],
+-[0.802773,0.649786,0.557773],
+-[0.829993,0.722649,0.596285],
+-[0.856349,0.788811,0.632456],
+-[0.881917,0.849837,0.666667],
+-[0.906765,0.906765,0.699206],
+-[0.930949,0.930949,0.785281],
+-[0.954521,0.954521,0.862812],
+-[0.977525,0.977525,0.933928],
+-[1.000000,1.000000,1.000000]];
+-colorbars["white"]=[[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000],
+-[1.000000,1.000000,1.000000]];
+-colorbars["flag"]=[[1.000000,0.000000,0.000000],
+-[1.000000,1.000000,1.000000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,1.000000,1.000000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,1.000000,1.000000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,1.000000,1.000000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000]];
+-colorbars["lines"]=[[0.000000,0.000000,1.000000],
+-[0.000000,0.500000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[0.000000,0.750000,0.750000],
+-[0.750000,0.000000,0.750000],
+-[0.750000,0.750000,0.000000],
+-[0.250000,0.250000,0.250000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.500000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[0.000000,0.750000,0.750000],
+-[0.750000,0.000000,0.750000],
+-[0.750000,0.750000,0.000000],
+-[0.250000,0.250000,0.250000],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.500000,0.000000]];
+-colorbars["colorcube"]=[[1.000000,1.000000,0.000000],
+-[0.000000,1.000000,1.000000],
+-[1.000000,0.000000,1.000000],
+-[0.333333,0.000000,0.000000],
+-[0.666667,0.000000,0.000000],
+-[1.000000,0.000000,0.000000],
+-[0.000000,0.333333,0.000000],
+-[0.000000,0.666667,0.000000],
+-[0.000000,1.000000,0.000000],
+-[0.000000,0.000000,0.333333],
+-[0.000000,0.000000,0.666667],
+-[0.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000],
+-[0.333333,0.333333,0.333333],
+-[0.666667,0.666667,0.666667],
+-[1.000000,1.000000,1.000000]];
+-colorbars["vga"]=[[1.000000,1.000000,1.000000],
+-[0.750000,0.750000,0.750000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,1.000000,0.000000],
+-[0.000000,1.000000,0.000000],
+-[0.000000,1.000000,1.000000],
+-[0.000000,0.000000,1.000000],
+-[1.000000,0.000000,1.000000],
+-[0.000000,0.000000,0.000000],
+-[0.500000,0.500000,0.500000],
+-[0.500000,0.000000,0.000000],
+-[0.500000,0.500000,0.000000],
+-[0.000000,0.500000,0.000000],
+-[0.000000,0.500000,0.500000],
+-[0.000000,0.000000,0.500000],
+-[0.500000,0.000000,0.500000]];
+-colorbars["prism"]=[[1.000000,0.000000,0.000000],
+-[1.000000,0.500000,0.000000],
+-[1.000000,1.000000,0.000000],
+-[0.000000,1.000000,0.000000],
+-[0.000000,0.000000,1.000000],
+-[0.666667,0.000000,1.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,0.500000,0.000000],
+-[1.000000,1.000000,0.000000],
+-[0.000000,1.000000,0.000000],
+-[0.000000,0.000000,1.000000],
+-[0.666667,0.000000,1.000000],
+-[1.000000,0.000000,0.000000],
+-[1.000000,0.500000,0.000000],
+-[1.000000,1.000000,0.000000],
+-[0.000000,1.000000,0.000000]];
+-colorbars["cool"]=[[0.000000,1.000000,1.000000],
+-[0.066667,0.933333,1.000000],
+-[0.133333,0.866667,1.000000],
+-[0.200000,0.800000,1.000000],
+-[0.266667,0.733333,1.000000],
+-[0.333333,0.666667,1.000000],
+-[0.400000,0.600000,1.000000],
+-[0.466667,0.533333,1.000000],
+-[0.533333,0.466667,1.000000],
+-[0.600000,0.400000,1.000000],
+-[0.666667,0.333333,1.000000],
+-[0.733333,0.266667,1.000000],
+-[0.800000,0.200000,1.000000],
+-[0.866667,0.133333,1.000000],
+-[0.933333,0.066667,1.000000],
+-[1.000000,0.000000,1.000000]];
+-colorbars["autumn"]=[[1.000000,0.000000,0.000000],
+-[1.000000,0.066667,0.000000],
+-[1.000000,0.133333,0.000000],
+-[1.000000,0.200000,0.000000],
+-[1.000000,0.266667,0.000000],
+-[1.000000,0.333333,0.000000],
+-[1.000000,0.400000,0.000000],
+-[1.000000,0.466667,0.000000],
+-[1.000000,0.533333,0.000000],
+-[1.000000,0.600000,0.000000],
+-[1.000000,0.666667,0.000000],
+-[1.000000,0.733333,0.000000],
+-[1.000000,0.800000,0.000000],
+-[1.000000,0.866667,0.000000],
+-[1.000000,0.933333,0.000000],
+-[1.000000,1.000000,0.000000]];
+-colorbars["spring"]=[[1.000000,0.000000,1.000000],
+-[1.000000,0.066667,0.933333],
+-[1.000000,0.133333,0.866667],
+-[1.000000,0.200000,0.800000],
+-[1.000000,0.266667,0.733333],
+-[1.000000,0.333333,0.666667],
+-[1.000000,0.400000,0.600000],
+-[1.000000,0.466667,0.533333],
+-[1.000000,0.533333,0.466667],
+-[1.000000,0.600000,0.400000],
+-[1.000000,0.666667,0.333333],
+-[1.000000,0.733333,0.266667],
+-[1.000000,0.800000,0.200000],
+-[1.000000,0.866667,0.133333],
+-[1.000000,0.933333,0.066667],
+-[1.000000,1.000000,0.000000]];
+-colorbars["winter"]=[[0.000000,0.000000,1.000000],
+-[0.000000,0.066667,0.966667],
+-[0.000000,0.133333,0.933333],
+-[0.000000,0.200000,0.900000],
+-[0.000000,0.266667,0.866667],
+-[0.000000,0.333333,0.833333],
+-[0.000000,0.400000,0.800000],
+-[0.000000,0.466667,0.766667],
+-[0.000000,0.533333,0.733333],
+-[0.000000,0.600000,0.700000],
+-[0.000000,0.666667,0.666667],
+-[0.000000,0.733333,0.633333],
+-[0.000000,0.800000,0.600000],
+-[0.000000,0.866667,0.566667],
+-[0.000000,0.933333,0.533333],
+-[0.000000,1.000000,0.500000]];
+-colorbars["summer"]=[[0.000000,0.500000,0.400000],
+-[0.066667,0.533333,0.400000],
+-[0.133333,0.566667,0.400000],
+-[0.200000,0.600000,0.400000],
+-[0.266667,0.633333,0.400000],
+-[0.333333,0.666667,0.400000],
+-[0.400000,0.700000,0.400000],
+-[0.466667,0.733333,0.400000],
+-[0.533333,0.766667,0.400000],
+-[0.600000,0.800000,0.400000],
+-[0.666667,0.833333,0.400000],
+-[0.733333,0.866667,0.400000],
+-[0.800000,0.900000,0.400000],
+-[0.866667,0.933333,0.400000],
+-[0.933333,0.966667,0.400000],
+-[1.000000,1.000000,0.400000]];
+-function fielddisplay(md,name,comment){
+-//FIELDDISPLAY - display model field
+-//
+-//   Usage:
+-//      fielddisplay(md,name,comment)
+-
+-	//get field
+-	field=md[name];
+-
+-	//disp corresponding line as a function of field type (offset set as 9 spaces)
+-	parsedisplay('         ',name,field,comment);
+-}
+-
+-function parsedisplay(offset,name,field,comment) { //{{{
+-
+-	//string
+-	if (typeof(field) == "string"){
+-
+-		if (field.length > 30){
+-			displayunit(offset,name,"not displayed",comment);
+-		}
+-		else{
+-			displayunit(offset,name,"'"+field+"'",comment);
+-		}
+-	}
+-	//numeric
+-	else if (typeof(field) == "number"){
+-		
+-		displayunit(offset,name,sprintf("%g",field),comment);
+-
+-	}
+-	//logical
+-	else if (typeof(field) == "boolean") {
+-
+-		if (field){
+-			displayunit(offset,name,"true",comment);
+-		}
+-		else{
+-			displayunit(offset,name,"false",comment);
+-		}
+-
+-	}
+-	//object
+-	else if (typeof(field) == "object"){
+-
+-		if(field.length == 0) displayunit(offset,name,sprintf("(%i)",field.length),comment);
+-		else if ((field[0].length==0) | (typeof field[0].length =='undefined')){
+-			displayunit(offset,name,sprintf("(%i)",field.length),comment);
+-		}
+-		else{
+-			displayunit(offset,name,sprintf("(%i,%i)",field.length,field[0].length),comment);
+-		}
+-
+-	}
+-	else{
+-		displayunit(offset,name,"not displayed",comment);
+-	}
+-} //}}}
+-
+-function displayunit(offset,name,characterization,comment){ // {{{
+-
+-	//take care of name
+-	if (name.length>23){
+-		name=name.slice(0,21) + "...";
+-	}
+-
+-	//take care of characterization
+-	if ( characterization == "\" \"" || characterization == "NaN" ){
+-	
+-		characterization="N/A";
+-	}
+-	if (characterization.length>15){
+-		characterization=characterization.slice(0,13) + "...";
+-	}
+-
+-	//print
+-	if (comment.length==0){
+-		console.log(sprintf("%s%-23s: %-15s",offset,name,characterization));
+-	}
+-	else{
+-		if (typeof(comment) == "string"){
+-			//console.log(sprintf("%s%-23s: %-15s -- %s",offset,name,characterization,comment));
+-			console.log(sprintf("%s%s: %-15s -- %s",offset,name,characterization,comment));
+-		}
+-		else{
+-			throw Error("fielddisplay error message: format for comment not supported yet");
+-		}
+-	}
+-} //}}}
+-/**
+- * A class to parse color values
+- * @author Stoyan Stefanov <sstoo@gmail.com>
+- * @link   http://www.phpied.com/rgb-color-parser-in-javascript/
+- * @license Use it if you like it
+- */
+-function RGBColor(color_string)
+-{
+-    this.ok = false;
+-
+-    // strip any leading #
+-    if (color_string.charAt(0) == '#') { // remove # if any
+-        color_string = color_string.substr(1,6);
+-    }
+-
+-    color_string = color_string.replace(/ /g,'');
+-    color_string = color_string.toLowerCase();
+-
+-    // before getting into regexps, try simple matches
+-    // and overwrite the input
+-    var simple_colors = {
+-        aliceblue: 'f0f8ff',
+-        antiquewhite: 'faebd7',
+-        aqua: '00ffff',
+-        aquamarine: '7fffd4',
+-        azure: 'f0ffff',
+-        beige: 'f5f5dc',
+-        bisque: 'ffe4c4',
+-        black: '000000',
+-        blanchedalmond: 'ffebcd',
+-        blue: '0000ff',
+-        blueviolet: '8a2be2',
+-        brown: 'a52a2a',
+-        burlywood: 'deb887',
+-        cadetblue: '5f9ea0',
+-        chartreuse: '7fff00',
+-        chocolate: 'd2691e',
+-        coral: 'ff7f50',
+-        cornflowerblue: '6495ed',
+-        cornsilk: 'fff8dc',
+-        crimson: 'dc143c',
+-        cyan: '00ffff',
+-        darkblue: '00008b',
+-        darkcyan: '008b8b',
+-        darkgoldenrod: 'b8860b',
+-        darkgray: 'a9a9a9',
+-        darkgreen: '006400',
+-        darkkhaki: 'bdb76b',
+-        darkmagenta: '8b008b',
+-        darkolivegreen: '556b2f',
+-        darkorange: 'ff8c00',
+-        darkorchid: '9932cc',
+-        darkred: '8b0000',
+-        darksalmon: 'e9967a',
+-        darkseagreen: '8fbc8f',
+-        darkslateblue: '483d8b',
+-        darkslategray: '2f4f4f',
+-        darkturquoise: '00ced1',
+-        darkviolet: '9400d3',
+-        deeppink: 'ff1493',
+-        deepskyblue: '00bfff',
+-        dimgray: '696969',
+-        dodgerblue: '1e90ff',
+-        feldspar: 'd19275',
+-        firebrick: 'b22222',
+-        floralwhite: 'fffaf0',
+-        forestgreen: '228b22',
+-        fuchsia: 'ff00ff',
+-        gainsboro: 'dcdcdc',
+-        ghostwhite: 'f8f8ff',
+-        gold: 'ffd700',
+-        goldenrod: 'daa520',
+-        gray: '808080',
+-        green: '008000',
+-        greenyellow: 'adff2f',
+-        honeydew: 'f0fff0',
+-        hotpink: 'ff69b4',
+-        indianred : 'cd5c5c',
+-        indigo : '4b0082',
+-        ivory: 'fffff0',
+-        khaki: 'f0e68c',
+-        lavender: 'e6e6fa',
+-        lavenderblush: 'fff0f5',
+-        lawngreen: '7cfc00',
+-        lemonchiffon: 'fffacd',
+-        lightblue: 'add8e6',
+-        lightcoral: 'f08080',
+-        lightcyan: 'e0ffff',
+-        lightgoldenrodyellow: 'fafad2',
+-        lightgrey: 'd3d3d3',
+-        lightgreen: '90ee90',
+-        lightpink: 'ffb6c1',
+-        lightsalmon: 'ffa07a',
+-        lightseagreen: '20b2aa',
+-        lightskyblue: '87cefa',
+-        lightslateblue: '8470ff',
+-        lightslategray: '778899',
+-        lightsteelblue: 'b0c4de',
+-        lightyellow: 'ffffe0',
+-        lime: '00ff00',
+-        limegreen: '32cd32',
+-        linen: 'faf0e6',
+-        magenta: 'ff00ff',
+-        maroon: '800000',
+-        mediumaquamarine: '66cdaa',
+-        mediumblue: '0000cd',
+-        mediumorchid: 'ba55d3',
+-        mediumpurple: '9370d8',
+-        mediumseagreen: '3cb371',
+-        mediumslateblue: '7b68ee',
+-        mediumspringgreen: '00fa9a',
+-        mediumturquoise: '48d1cc',
+-        mediumvioletred: 'c71585',
+-        midnightblue: '191970',
+-        mintcream: 'f5fffa',
+-        mistyrose: 'ffe4e1',
+-        moccasin: 'ffe4b5',
+-        navajowhite: 'ffdead',
+-        navy: '000080',
+-        oldlace: 'fdf5e6',
+-        olive: '808000',
+-        olivedrab: '6b8e23',
+-        orange: 'ffa500',
+-        orangered: 'ff4500',
+-        orchid: 'da70d6',
+-        palegoldenrod: 'eee8aa',
+-        palegreen: '98fb98',
+-        paleturquoise: 'afeeee',
+-        palevioletred: 'd87093',
+-        papayawhip: 'ffefd5',
+-        peachpuff: 'ffdab9',
+-        peru: 'cd853f',
+-        pink: 'ffc0cb',
+-        plum: 'dda0dd',
+-        powderblue: 'b0e0e6',
+-        purple: '800080',
+-        red: 'ff0000',
+-        rosybrown: 'bc8f8f',
+-        royalblue: '4169e1',
+-        saddlebrown: '8b4513',
+-        salmon: 'fa8072',
+-        sandybrown: 'f4a460',
+-        seagreen: '2e8b57',
+-        seashell: 'fff5ee',
+-        sienna: 'a0522d',
+-        silver: 'c0c0c0',
+-        skyblue: '87ceeb',
+-        slateblue: '6a5acd',
+-        slategray: '708090',
+-        snow: 'fffafa',
+-        springgreen: '00ff7f',
+-        steelblue: '4682b4',
+-        tan: 'd2b48c',
+-        teal: '008080',
+-        thistle: 'd8bfd8',
+-        tomato: 'ff6347',
+-        turquoise: '40e0d0',
+-        violet: 'ee82ee',
+-        violetred: 'd02090',
+-        wheat: 'f5deb3',
+-        white: 'ffffff',
+-        whitesmoke: 'f5f5f5',
+-        yellow: 'ffff00',
+-        yellowgreen: '9acd32'
+-    };
+-    for (var key in simple_colors) {
+-        if (color_string == key) {
+-            color_string = simple_colors[key];
+-        }
+-    }
+-    // emd of simple type-in colors
+-
+-    // array of color definition objects
+-    var color_defs = [
+-        {
+-            re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
+-            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
+-            process: function (bits){
+-                return [
+-                    parseInt(bits[1]),
+-                    parseInt(bits[2]),
+-                    parseInt(bits[3])
+-                ];
+-            }
+-        },
+-        {
+-            re: /^(\w{2})(\w{2})(\w{2})$/,
+-            example: ['#00ff00', '336699'],
+-            process: function (bits){
+-                return [
+-                    parseInt(bits[1], 16),
+-                    parseInt(bits[2], 16),
+-                    parseInt(bits[3], 16)
+-                ];
+-            }
+-        },
+-        {
+-            re: /^(\w{1})(\w{1})(\w{1})$/,
+-            example: ['#fb0', 'f0f'],
+-            process: function (bits){
+-                return [
+-                    parseInt(bits[1] + bits[1], 16),
+-                    parseInt(bits[2] + bits[2], 16),
+-                    parseInt(bits[3] + bits[3], 16)
+-                ];
+-            }
+-        }
+-    ];
+-
+-    // search through the definitions to find a match
+-    for (var i = 0; i < color_defs.length; i++) {
+-        var re = color_defs[i].re;
+-        var processor = color_defs[i].process;
+-        var bits = re.exec(color_string);
+-        if (bits) {
+-            channels = processor(bits);
+-            this.r = channels[0];
+-            this.g = channels[1];
+-            this.b = channels[2];
+-            this.ok = true;
+-        }
+-
+-    }
+-
+-    // validate/cleanup values
+-    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
+-    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
+-    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);
+-
+-    // some getters
+-    this.toRGB = function () {
+-        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
+-    }
+-    this.toHex = function () {
+-        var r = this.r.toString(16);
+-        var g = this.g.toString(16);
+-        var b = this.b.toString(16);
+-        if (r.length == 1) r = '0' + r;
+-        if (g.length == 1) g = '0' + g;
+-        if (b.length == 1) b = '0' + b;
+-        return '#' + r + g + b;
+-    }
+-
+-    // help
+-    this.getHelpXML = function () {
+-
+-        var examples = new Array();
+-        // add regexps
+-        for (var i = 0; i < color_defs.length; i++) {
+-            var example = color_defs[i].example;
+-            for (var j = 0; j < example.length; j++) {
+-                examples[examples.length] = example[j];
+-            }
+-        }
+-        // add type-in colors
+-        for (var sc in simple_colors) {
+-            examples[examples.length] = sc;
+-        }
+-
+-        var xml = document.createElement('ul');
+-        xml.setAttribute('id', 'rgbcolor-examples');
+-        for (var i = 0; i < examples.length; i++) {
+-            try {
+-                var list_item = document.createElement('li');
+-                var list_color = new RGBColor(examples[i]);
+-                var example_div = document.createElement('div');
+-                example_div.style.cssText =
+-                        'margin: 3px; '
+-                        + 'border: 1px solid black; '
+-                        + 'background:' + list_color.toHex() + '; '
+-                        + 'color:' + list_color.toHex()
+-                ;
+-                example_div.appendChild(document.createTextNode('test'));
+-                var list_item_value = document.createTextNode(
+-                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()
+-                );
+-                list_item.appendChild(example_div);
+-                list_item.appendChild(list_item_value);
+-                xml.appendChild(list_item);
+-
+-            } catch(e){}
+-        }
+-        return xml;
+-
+-    }
+-
+-}
+-
+-function setflowequation(md){
+-//SETFLOWEQUATION - associate a solution type to each element
+-//
+-//   This routine works like plotmodel: it works with an even number of inputs
+-//   'SIA','SSA','L1L2','HO','FS' and 'fill' are the possible options
+-//   that must be followed by the corresponding exp file or flags list
+-//   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+-//   If user wants every element outside the domain to be 
+-//   setflowequationd, add '~' to the name of the domain file (ex: '~HO.exp');
+-//   an empty string '' will be considered as an empty domain
+-//   a string 'all' will be considered as the entire domain
+-//   You can specify the type of coupling, 'penalties' or 'tiling', to use with the input 'coupling'
+-//   NB: L1L2 cannot currently be coupled to any other ice flow model
+-//
+-//   Usage:
+-//      setflowequation(md,varargin)
+-//
+-//   Example:
+-//      setflowequation(md,'HO',HO,'fill','SIA','coupling','tiling');
+-
+-	//some checks on list of arguments
+-	if(arguments.length<3) throw Error('setflowequation error message');
+-
+-	//Process options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice(1,args.length));
+-	options.deleteduplicates(1);
+-
+-	//Find_out what kind of coupling to use
+-	coupling_method=options.getfieldvalue('coupling','tiling');
+-	if ((coupling_method != 'tiling') & !(coupling_method != 'penalties')){
+-		throw error('coupling type can only be: tiling or penalties');
+-	}
+-
+-	//recover elements distribution
+-	SIAflag  = FlagElements(md,options.getfieldvalue('SIA',''));
+-	SSAflag  = FlagElements(md,options.getfieldvalue('SSA',''));
+-	HOflag   = FlagElements(md,options.getfieldvalue('HO',''));
+-	L1L2flag = FlagElements(md,options.getfieldvalue('L1L2',''));
+-	FSflag   = FlagElements(md,options.getfieldvalue('FS',''));
+-	filltype = options.getfieldvalue('fill','none');
+-	options.displayunused();
+-
+-	//Flag the elements that have not been flagged as filltype
+-	if (filltype === 'SIA'){
+-		for(var i=0;i<md.mesh.numberofelements;i++)if(!(SSAflag[i] | HOflag[i]))SIAflag[i]=1;
+-	}
+-	else if (filltype === 'SSA'){
+-		for(var i=0;i<md.mesh.numberofelements;i++)if(!(SIAflag[i] | HOflag[i] | FSflag[i]))SSAflag[i]=1;
+-	}
+-	else if (filltype === 'HO'){
+-		for(var i=0;i<md.mesh.numberofelements;i++)if(!(SIAflag[i] | SSAflag[i] | FSflag[i]))HOflag[i]=1;
+-	}
+-
+-	//check that each element has at least one flag
+-	for(var i=0;i<md.mesh.numberofelements;i++)if((SIAflag[i] + SSAflag[i] + HOflag[i] + L1L2flag[i] + FSflag[i])==0)
+-	throw Error("elements type not assigned, supported models are 'SIA','SSA','HO' and 'FS'");
+-
+-	//check that each element has only one flag
+-	if (ArrayAnyAboveStrict(ArrayXPY(SIAflag,SSAflag,HOflag,L1L2flag),1)){
+-		console.log('setflowequation warning message: some elements have several types, higher order type is used for them')
+-
+-		for(var i=0;i<md.mesh.numberofelements;i++){
+-			if(SIAflag[i] & SSAflag[i])SIAflag[i]=0;
+-			if(SIAflag[i] & HOflag[i])SIAflag[i]=0;
+-			if(SSAflag[i] & HOflag[i])SSAflag[i]=0;
+-		}
+-	}
+-
+-	//check that L1L2 is not coupled to any other model for now
+-	if (ArrayAnyEqual(L1L2flag,1) & ArrayAnyEqual(ArrayOr(SIAflag,SSAflag,HOflag,FSflag),1)) throw Error('L1L2 cannot be coupled to any other model');
+-
+-	//Check that no HO or FS for 2d mesh
+-	if (md.mesh.domaintype() == '2Dhorizontal'){
+-		for(var i=0;i<FSflag.length;i++){
+-			if(FSflag[i] | HOflag[i]) throw Error('FS and HO elements not allowed in 2d mesh, extrude it first')
+-		}
+-	}
+-
+-	//FS can only be used alone for now:
+-	if (ArrayAnyEqual(FSflag,1) & ArrayAnyEqual(SIAflag,1)) throw Error('FS cannot be used with any other model for now, put FS everywhere')
+-
+-	//Initialize node fields
+-	nodeonSIA=NewArrayFill(md.mesh.numberofvertices,0);
+-	pos=ArrayFind(SIAflag,1);
+-	for(var i=0;i<pos.length;i++) for(var j=0;j<md.mesh.elements[0].length;j++) nodeonSIA[md.mesh.elements[pos[i]][j]-1]=1;
+-	
+-	nodeonSSA=NewArrayFill(md.mesh.numberofvertices,0);
+-	pos=ArrayFind(SSAflag,1);
+-	for(var i=0;i<pos.length;i++) for(var j=0;j<md.mesh.elements[0].length;j++) nodeonSSA[md.mesh.elements[pos[i]][j]-1]=1;
+-	
+-	nodeonHO=NewArrayFill(md.mesh.numberofvertices,0);
+-	pos=ArrayFind(HOflag,1);
+-	for(var i=0;i<pos.length;i++) for(var j=0;j<md.mesh.elements[0].length;j++) nodeonHO[md.mesh.elements[pos[i]][j]-1]=1;
+-	
+-	nodeonL1L2=NewArrayFill(md.mesh.numberofvertices,0);
+-	pos=ArrayFind(L1L2flag,1);
+-	for(var i=0;i<pos.length;i++) for(var j=0;j<md.mesh.elements[0].length;j++) nodeonL1L2[md.mesh.elements[pos[i]][j]-1]=1;
+-
+-	nodeonFS=NewArrayFill(md.mesh.numberofvertices,0);
+-	noneflag=NewArrayFill(md.mesh.numberofvertices,0);
+-	
+-	
+-	//First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
+-	if (ArrayAnyEqual(FSflag,1)){
+-		throw Error("FS elements not supported yet!");
+-		/*fullspcnodes=double((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy)+~isnan(md.stressbalance.spcvz))==3 | (nodeonHO & nodeonFS));         //find all the nodes on the boundary of the domain without icefront
+-		fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         //find all the nodes on the boundary of the domain without icefront
+-		FSflag(find(fullspcelems))=0;
+-		nodeonFS(md.mesh.elements(find(FSflag),:))=1;*/
+-	}
+-
+-	//Then complete with NoneApproximation or the other model used if there is no FS
+-	if (ArrayAnyEqual(FSflag,1)){
+-		throw Error("FS elements not supported yet!");
+-		/*if any(HOflag), //fill with HO
+-			HOflag(~FSflag)=1;
+-			nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+-		elseif any(SSAflag), //fill with SSA
+-			SSAflag(~FSflag)=1;
+-			nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+-		else //fill with none 
+-			noneflag(find(~FSflag))=1;
+-		end*/
+-	}
+-
+-	//Now take care of the coupling between SSA and HO
+-	md.stressbalance.vertex_pairing=[];
+-	nodeonSSAHO=NewArrayFill(md.mesh.numberofvertices,0);
+-	nodeonHOFS=NewArrayFill(md.mesh.numberofvertices,0);
+-	nodeonSSAFS=NewArrayFill(md.mesh.numberofvertices,0);
+-	SSAHOflag=NewArrayFill(md.mesh.numberofelements,0);
+-	SSAFSflag=NewArrayFill(md.mesh.numberofelements,0);
+-	HOFSflag=NewArrayFill(md.mesh.numberofelements,0);
+-
+-	/*if strcmpi(coupling_method,'penalties'),
+-		//Create the border nodes between HO and SSA and extrude them
+-		numnodes2d=md.mesh.numberofvertices2d;
+-		numlayers=md.mesh.numberoflayers;
+-		bordernodes2d=find(nodeonHO(1:numnodes2d) & nodeonSSA(1:numnodes2d)); //Nodes connected to two different types of elements
+-
+-		//initialize and fill in penalties structure
+-		if ~isnan(bordernodes2d),
+-			penalties=[];
+-			for	i=1:numlayers-1,
+-				penalties=[penalties; [bordernodes2d bordernodes2d+md.mesh.numberofvertices2d*(i)]];
+-			end
+-			md.stressbalance.vertex_pairing=penalties;
+-		end
+-	elseif strcmpi(coupling_method,'tiling'),
+-		if any(SSAflag) & any(HOflag), //coupling SSA HO
+-			//Find node at the border
+-			nodeonSSAHO(find(nodeonSSA & nodeonHO))=1;
+-			//SSA elements in contact with this layer become SSAHO elements
+-			matrixelements=ismember(md.mesh.elements,find(nodeonSSAHO));
+-			commonelements=sum(matrixelements,2)~=0;
+-			commonelements(find(HOflag))=0; //only one layer: the elements previously in SSA
+-			SSAflag(find(commonelements))=0; //these elements are now SSAHOelements
+-			SSAHOflag(find(commonelements))=1;
+-			nodeonSSA(:)=0;
+-			nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+-
+-			//rule out elements that don't touch the 2 boundaries
+-			pos=find(SSAHOflag);
+-			elist=zeros(length(pos),1);
+-			elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
+-			elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:))  ,2),2);
+-			pos1=find(elist==1);
+-			SSAflag(pos(pos1))=1;
+-			SSAHOflag(pos(pos1))=0;
+-			pos2=find(elist==-1);
+-			HOflag(pos(pos2))=1;
+-			SSAHOflag(pos(pos2))=0;
+-
+-			//Recompute nodes associated to these elements
+-			nodeonSSA(:)=0;
+-			nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+-			nodeonHO(:)=0;
+-			nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+-			nodeonSSAHO(:)=0;
+-			nodeonSSAHO(md.mesh.elements(find(SSAHOflag),:))=1;
+-
+-		elseif any(HOflag) & any(FSflag), //coupling HO FS
+-			//Find node at the border
+-			nodeonHOFS(find(nodeonHO & nodeonFS))=1;
+-			//FS elements in contact with this layer become HOFS elements
+-			matrixelements=ismember(md.mesh.elements,find(nodeonHOFS));
+-			commonelements=sum(matrixelements,2)~=0;
+-			commonelements(find(HOflag))=0; //only one layer: the elements previously in SSA
+-			FSflag(find(commonelements))=0; //these elements are now SSAHOelements
+-			HOFSflag(find(commonelements))=1;
+-			nodeonFS=zeros(md.mesh.numberofvertices,1);
+-			nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+-
+-			//rule out elements that don't touch the 2 boundaries
+-			pos=find(HOFSflag);
+-			elist=zeros(length(pos),1);
+-			elist = elist + any(sum(nodeonFS(md.mesh.elements(pos,:)),2),2);
+-			elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:)),2),2);
+-			pos1=find(elist==1);
+-			FSflag(pos(pos1))=1;
+-			HOFSflag(pos(pos1))=0;
+-			pos2=find(elist==-1);
+-			HOflag(pos(pos2))=1;
+-			HOFSflag(pos(pos2))=0;
+-
+-			//Recompute nodes associated to these elements
+-			nodeonFS(:)=0;
+-			nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+-			nodeonHO(:)=0;
+-			nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+-			nodeonHOFS(:)=0;
+-			nodeonHOFS(md.mesh.elements(find(HOFSflag),:))=1;
+-
+-		elseif any(FSflag) & any(SSAflag),
+-			//Find node at the border
+-			nodeonSSAFS(find(nodeonSSA & nodeonFS))=1;
+-			//FS elements in contact with this layer become SSAFS elements
+-			matrixelements=ismember(md.mesh.elements,find(nodeonSSAFS));
+-			commonelements=sum(matrixelements,2)~=0;
+-			commonelements(find(SSAflag))=0; //only one layer: the elements previously in SSA
+-			FSflag(find(commonelements))=0; //these elements are now SSASSAelements
+-			SSAFSflag(find(commonelements))=1;
+-			nodeonFS=zeros(md.mesh.numberofvertices,1);
+-			nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+-
+-			//rule out elements that don't touch the 2 boundaries
+-			pos=find(SSAFSflag);
+-			elist=zeros(length(pos),1);
+-			elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
+-			elist = elist - any(sum(nodeonFS(md.mesh.elements(pos,:))  ,2),2);
+-			pos1=find(elist==1);
+-			SSAflag(pos(pos1))=1;
+-			SSAFSflag(pos(pos1))=0;
+-			pos2=find(elist==-1);
+-			FSflag(pos(pos2))=1;
+-			SSAFSflag(pos(pos2))=0;
+-
+-			//Recompute nodes associated to these elements
+-			nodeonSSA(:)=0;
+-			nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+-			nodeonFS(:)=0;
+-			nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+-			nodeonSSAFS(:)=0;
+-			nodeonSSAFS(md.mesh.elements(find(SSAFSflag),:))=1;
+-
+-		elseif any(FSflag) & any(SIAflag),
+-			error('type of coupling not supported yet');
+-		end
+-	end*/
+-
+-	//Create element equations
+-	md.flowequation.element_equation=NewArrayFill(md.mesh.numberofelements,0);
+-	pos=ArrayFind(noneflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=0;
+-	pos=ArrayFind(SIAflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=1;
+-	pos=ArrayFind(SSAflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=2;
+-	pos=ArrayFind(L1L2flag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=3;
+-	pos=ArrayFind(HOflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=4;
+-	pos=ArrayFind(FSflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=5;
+-	pos=ArrayFind(SSAHOflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=6;
+-	pos=ArrayFind(SSAFSflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=7;
+-	pos=ArrayFind(HOFSflag,1);for(var i=0;i<pos.length;i++)md.flowequation.element_equation[pos[i]]=8;
+-
+-
+-	//border
+-	md.flowequation.borderHO=nodeonHO;
+-	md.flowequation.borderSSA=nodeonSSA;
+-	md.flowequation.borderFS=nodeonFS;
+-	
+-
+-	//Create vertices_type
+-	md.flowequation.vertex_equation=NewArrayFill(md.mesh.numberofvertices,0);
+-
+-	pos=ArrayFind(nodeonSSA,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=2;
+-	pos=ArrayFind(nodeonL1L2,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=3;
+-	pos=ArrayFind(nodeonHO,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=4;
+-	pos=ArrayFind(nodeonFS,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=5;
+-	//DO SIA LAST! Otherwise spcs might not be set up correctly (SIA should have priority)
+-	pos=ArrayFind(nodeonSIA,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=1;
+-	if (ArrayAnyEqual(FSflag,1)){
+-		pos=ArrayFind(nodeonFS==0);
+-		if(ArrayAnyEqual(HOflag,0) & ArrayAnyEqual(SSA,0)){
+-			for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=0;
+-		}
+-	}
+-
+-	pos=ArrayFind(nodeonSSAHO,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=6;
+-	pos=ArrayFind(nodeonHOFS,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=7;
+-	pos=ArrayFind(nodeonSSAFS,1);for(var i=0;i<pos.length;i++)md.flowequation.vertex_equation[pos[i]]=8;
+-
+-	//figure out solution types
+-	md.flowequation.isSIA  = ArrayAnyEqual(md.flowequation.element_equation,1);
+-	md.flowequation.isSSA  = ArrayAnyEqual(md.flowequation.element_equation,2);
+-	md.flowequation.isL1L2 = ArrayAnyEqual(md.flowequation.element_equation,3);
+-	md.flowequation.isHO   = ArrayAnyEqual(md.flowequation.element_equation,4);
+-	md.flowequation.isFS   = ArrayAnyEqual(md.flowequation.element_equation,5);
+-	return
+-
+-	//Check that tiling can work:
+-	/*if any(md.flowequation.borderSSA) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderSSA ~=1),
+-		error('error coupling domain too irregular');
+-	end
+-	if any(md.flowequation.borderSSA) & any(md.flowequation.borderFS) & any(md.flowequation.borderFS + md.flowequation.borderSSA ~=1),
+-		error('error coupling domain too irregular');
+-	end
+-	if any(md.flowequation.borderFS) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderFS~=1),
+-		error('error coupling domain too irregular');
+-	end*/
+-}
+-function setmask(md,floatingice,groundedice){
+-//SETMASK - establish boundaries between grounded and floating ice.
+-//
+-//   By default, ice is considered grounded. The contour floatingice defines nodes 
+-//   for which ice is floating. The contour groundedice defines nodes inside a floatingice, 
+-//   that are grounded (ie: ice rises, islands, etc ...)
+-//   All inputs are either strings or actually javascript arrays (included in the html file)
+-//   For example: 
+-//
+-//	   floatingice[0]['x']=[0,0,0,1];
+-//	   floatingice[0]['y']=[0,1,1,1];
+-//	   floatingice[1]['x']=[0,0.5,0.5,.5];
+-//	   floatingice[1]['y']=[0,.5,.5,.5];
+-//
+-//
+-//   Usage:
+-//      md=setmask(md,floatingice,groundedice)
+-//
+-//   Examples:
+-//      md=setmask(md,'all','');
+-//      md=setmask(md,iceshelves,islands);
+-
+-	//variables: 
+-	var  icedomain=[];
+-	
+-	//some checks on list of arguments
+-	if (!((arguments.length==3) | (arguments.length==5))){
+-		throw Error('mask error message: wrong usage.');
+-	}
+-
+-	if(arguments.length>3){
+-		if (arguments[3]=='icedomain'){
+-			icedomain=arguments[4];
+-		}
+-		else{
+-			throw Error('mask error message: wrong field specified. Only icedomain allowed for now.');
+-		}
+-		if (IsArray(icedomain)){
+-			throw Error('setmask error message: icedomain should be an array!');
+-		}
+-	}
+-	
+-	//Get assigned fields
+-	var x=md.mesh.x;
+-	var y=md.mesh.y;
+-	var elements=md.mesh.elements;
+-
+-	//Assign elementonfloatingice, elementongroundedice, vertexongroundedice and vertexonfloatingice. 
+-	//Only change at your own peril! This is synchronized heavily with the GroundingLineMigration module. 
+-	elementonfloatingice=FlagElements(md,floatingice);
+-	elementongroundedice=FlagElements(md,groundedice);
+-
+-	//Because groundedice nodes and elements can be included into an floatingice, we need to update. Remember, all the previous 
+-	//arrays come from domain outlines that can intersect one another: 
+-	elementonfloatingice=ArrayAnd(elementonfloatingice,ArrayNot(elementongroundedice));
+-	elementongroundedice=ArrayNot(elementonfloatingice);
+-
+-	//the order here is important. we choose vertexongroundedice as default on the grounding line.
+-	vertexonfloatingice=NewArrayFill(md.mesh.numberofvertices,0);
+-	vertexongroundedice=NewArrayFill(md.mesh.numberofvertices,0);
+-	pos=ArrayFind(elementongroundedice,1); for (var i=0;i<pos.length;i++)for(var j=0;j<3;j++) vertexongroundedice[md.mesh.elements[i,j]-1]=1;
+-	pos=ArrayFind(vertexongroundedice,0); for (var i=0;i<pos.length;i++)vertexonfloatingice[i]=1;
+-
+-	//level sets
+-	groundedice_levelset=vertexongroundedice;
+-	pos=ArrayFind(vertexongroundedice,0);for(var i=0;i<pos.length;i++) groundedice_levelset[i]=-1;
+-	md.mask.groundedice_levelset=groundedice_levelset;
+-
+-	if(arguments.length>3){
+-		md.mask.ice_levelset = NewArrayFill(md.mesh.numberofvertices,1.0);
+-		//use contourtomesh to set ice values inside ice domain
+-		//[vertexinsideicedomain,elementinsideicedomain]=ContourToMesh(elements,x,y,icedomain,'node',1);
+-		pos=ArrayFind(vertexinsideicedomain,1.0);for(var i=0;i<pos.length;i++) md.mask.ice_levelset[pos]=-1;
+-	}
+-	else{
+-		md.mask.ice_levelset = NewArrayFill(md.mesh.numberofvertices,-1);
+-	}
+-}
+-/*
+-	Name:
+-		sliderInit
+-	
+-	Description:
+-		Initialize slider corresponding to passed selector with passed value,
+-		minimum and maximum values, step (which is the increment for the 
+-		slider), and callback function (which is called when slider is changed). 
+-	
+-		Options are passed as pairs to the function according to the usage 
+-		example below.
+-	
+-	Usage:
+-		sliderInit(
+-			'selector', #some-element, 
+-			'value', 0,
+-			'min', -1,
+-			'max', 1,
+-			'step', 0.1,
+-			'callback', function(value){someEngineFunction(value)}
+-		);
+-	
+-	NOTE:	jQuery Mobile will reflect changes to slider in its input "label" 
+-			based on the width of the slider. For example, step might be set to
+-			0.1, but if the width of the slider is too narrow, changes to the 
+-			slider will only be reflected in whole numeral increments in the
+-			slider' label. That said, *all* sliders can be adjusted via the
+-			"up" and "down" keys by whatever increment step is set to.
+-*/
+-function sliderInit(){
+-	
+-	// Convert arguments to options
+-	var args 		= Array.prototype.slice.call(arguments);
+-	var options 	= new pairoptions(args.slice());
+-
+-	// Recover option values
+-	var selector	= options.getfieldvalue('selector', '');
+-	var value 		= options.getfieldvalue('value', 0);
+-	var callback 	= options.getfieldvalue('callback', function(event, ui){});
+-	var min 		= options.getfieldvalue('min', 0.6 * value);
+-	var max 		= options.getfieldvalue('max', 1.4 * value);
+-	var step 		= options.getfieldvalue('step', 1);
+-
+-	/*
+-		Update slider attributes.
+-		
+-		NOTE:	Although slider has already been created, need to call slider() 
+-				in order to avoid:
+-				
+-					Error: cannot call methods on slider prior to 
+-					initialization; attempted to call method 'refresh'
+-					
+-				Attempted all other methods for intialization of slider widget
+-				from jQuery Mobile, and this is the only one that seemed to work
+-				(see index.php for related markup).
+-	*/
+-	$(selector).slider();
+-	$(selector).val(value);
+-	$(selector).attr('min', min);
+-	$(selector).attr('max', max);
+-	$(selector).attr('step', step);
+-	$(selector).on('slidestop', function(event, ui){
+-		callback(parseFloat($(selector).val()));
+-	});
+-
+-	/*
+-		NOTE:	Slider must be "refreshed" after any JavaScript change to it, as
+-				it is an AJAX object.
+-	*/
+-	$(selector).slider('refresh');
+-}
+-/* exported sliderInit, refreshErrorMessages */
+-
+-
+-/*
+-	Name:
+-		sliderMoveInput
+-	
+-	Description:
+-		Appends a jQuery Mobile slider input to an element whose selector 
+-		adheres to the following protocol,
+-		
+-			destination = sliderSelector + '-value'
+-			
+-	Usage:
+-		sliderMoveInput('#someSliderSelector');
+-		
+-	NOTE:	Destination element must, obviously, be hardcoded into markup for a
+-			call to this function to work as expected.
+-*/
+-function sliderMoveInput(selector){
+-	
+-	$(selector).appendTo(selector + '-value');
+-	$(selector).slider('refresh');
+-}
+-
+-/*
+-	value/label updated by node transient runs in plot_unit.	
+-*/
+-function progressInit(){
+-	
+-	// Convert arguments to options.
+-	var args 			= Array.prototype.slice.call(arguments);
+-	var options 		= new pairoptions(args.slice());
+-	
+-	// Recover option values
+-	var sim 			= options.getfieldvalue('sim', '');
+-	
+-	var canvas 			= $(sim + '-canvas')[0];
+-	var progressBar 	= $(sim + '-controls-slider-progress');
+-	var playButton 		= $(sim + '-controls-button-play');
+-	var reverseButton 	= $(sim + '-controls-button-reverse');
+-	var timeText 		= $(sim + '-controls-text-time');
+-	
+-	/*
+-		Update progress bar slider attributes.
+-		
+-		NOTE:	Although slider has already been created, need to call slider() 
+-				in order to avoid:
+-				
+-					Error: cannot call methods on slider prior to 
+-					initialization; attempted to call method 'refresh'
+-					
+-				Attempted all other methods for intialization of slider widget
+-				from jQuery Mobile, and this is the only one that seemed to work
+-				(see index.php for related markup).
+-	*/
+-	$(progressBar).slider();
+-	$(progressBar).val(value);
+-	$(progressBar).attr('min', 0);
+-	$(progressBar).attr('max', 1);
+-	$(progressBar).attr('step', 1);
+-	$(progressBar).on('slidestop', function(event, ui){
+-		canvas.movieIncrement = true;
+-		canvas.movieFrame = parseInt($(progressBar).val());
+-	});
+-	$(progressBar).on('change', function(event, ui){
+-		canvas.movieFrame = parseInt($(progressBar).val());
+-	});
+-	$(progressBar).on('slidestart', function(event, ui){
+-		canvas.movieIncrement = false;	
+-		canvas.movieFrame = parseInt($(progressBar).val());
+-	});
+-
+-	/*
+-		NOTE:	Slider must be "refreshed" after any JavaScript change to it, as
+-				it is an AJAX object.
+-	*/
+-	$(progressBar).slider('refresh');
+-	
+-	// Attach progress bar slider to simulation.
+-	canvas.progressBar = progressBar;
+-
+-	playButton.click(function(){
+-		canvas.moviePlay = !canvas.moviePlay;
+-		if (canvas.moviePlay){
+-			playButton.find("span").removeClass("fa-play");
+-			playButton.find("span").addClass("fa-pause");
+-		}
+-		else{
+-			playButton.find("span").removeClass("fa-pause");
+-			playButton.find("span").addClass("fa-play");
+-		}
+-	});
+-	
+-	reverseButton.click(function(){
+-		canvas.movieReverse = !canvas.movieReverse;
+-		if (canvas.movieReverse) {
+-			reverseButton.find("span").removeClass("fa-backward");
+-			reverseButton.find("span").addClass("fa-forward");
+-		}
+-		else {
+-			reverseButton.find("span").removeClass("fa-forward");
+-			reverseButton.find("span").addClass("fa-backward");
+-		}
+-	});
+-	
+-	canvas.timeLabel = timeText;
+-}function tooltip() {
+-	//TOOLTIP - create a hidden toolip with value text that shows html formatted info on hover over the tooltipdiv.
+-	//
+-	//   Usage:
+-	//      tooltip('value','<h4>HAIG Glacier (Canadian Rocky Mountains) 30 year transient simulation</h4>','tooltipdiv','info-tooltipdiv');
+-
+-	//Convert arguments to options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice());
+-
+-	//Recover option values:
+-	var value = options.getfieldvalue('value','');
+-	var tooltipdiv = options.getfieldvalue('tooltipdiv','tooltipdiv');
+-
+-	$('<div class="bordered">' + value + '</div>').appendTo('#'+tooltipdiv);	
+-	$("#"+tooltipdiv).hover(function() {
+-		var tooltip = $("> div", this).show();
+-		var pos = tooltip.offset();
+-		tooltip.hide();
+-		var right = pos.left + tooltip.width();
+-		var pageWidth = $(document).width();
+-		if (pos.left < 0) {
+-			tooltip.css("marginLeft", "+=" + (-pos.left) + "px");
+-		}
+-		else if (right > pageWidth) {
+-			tooltip.css("marginLeft", "-=" + (right - pageWidth));
+-		}
+-		tooltip.fadeIn();
+-		}, function() {
+-			$("> div", this).fadeOut(function() {$(this).css("marginLeft", "");
+-		});
+-	});
+-}
+-function applyoptions(md,data,datatype,options,canvas,gl,node){
+-	//APPLYOPTIONS - apply colobar, text, cloud, and expdisp options to current plot
+-	//
+-	//   Usage:
+-	//      applyoptions(md,data,options)
+-	//
+-	//   See also: PLOTMODEL, PARSE_OPTIONS
+-	
+-	//colorbar {{{
+-	if (options.exist('colorbar')) {
+-		if (options.getfieldvalue('colorbar')==1) {
+-			//Handle movie data {{{
+-			if (datatype == 5) {
+-				data = data[0];
+-			} //}}}
+-			//Variable options initialization {{{
+-			var caxis = options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+-			var colorbarorientiation = options.getfieldvalue('colorbarorientation','vertical');
+-			var colorbarinnerlabels = options.getfieldvalue('colorbarinnerlabels','off');
+-			var cheightoffset = options.getfieldvalue('colorbarfontsize',18);
+-			var cwidthoffset = options.getfieldvalue('colorbarfontsize',18)*3;
+-			var cwidthscale = 0.5; //Default size of actual colorbar width, relative to canvas width (range [0,1])
+-			var cheightscale = 0.875; //Default size of actual colorbar height, relative to canvas height (range [0,1])
+-			var ccontext,ccanvas,ccanvasid,ccanvashtml,cheight,cwidth,color,y,x,cgradient,cmap,colorbar,textAlign,a,b,c,d,e,f,g,h;
+-			//}}}
+-			//Set colorbar lables {{{
+-			var labels = [];
+-			var cdivisions = options.getfieldvalue('colorbarnticks',6);
+-			var caxisdelta = caxis[1] - caxis[0];
+-			var clabelitem;
+-			var precision = options.getfieldvalue('colorbarprecision',3);
+-			if (options.getfieldvalue('log','off')!='off') {
+-				for (var i=cdivisions; i >= 0; i--) {
+-					var scale = (Math.log10(caxis[1])-Math.log10(caxis[0]))/Math.log10(options.getfieldvalue('log',10));
+-					labels[i] = (Math.pow(options.getfieldvalue('log',10),Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log',10))+scale*(cdivisions-i)/cdivisions)).toPrecision(precision);
+-				}
+-			} else {
+-				for (var i=cdivisions; i >= 0; i--) {
+-					labels[i] = (caxisdelta*(cdivisions-i)/cdivisions+caxis[0]).toPrecision(precision);
+-				}
+-			} //}}}
+-			ccanvasid = options.getfieldvalue('colorbarid',options.getfieldvalue('canvasid')+'_colorbar');
+-			ccanvashtml = document.getElementById(ccanvasid);
+-			ccanvas = $('#'+ccanvasid);
+-			ccontext = ccanvas[0].getContext('2d');
+-			ccontext.clearRect(0,0, ccanvashtml.width, ccanvashtml.height);
+-			ccontext.beginPath();
+-			cmap = options.getfieldvalue('colormap','jet');
+-			colorbar = colorbars[cmap];
+-			//Handle orientation {{{
+-			if (colorbarorientiation=='vertical') {
+-				cwidth = ccanvashtml.width*cwidthscale*options.getfieldvalue('colorbarwidth',1);
+-				cheight = ccanvashtml.height*cheightscale*options.getfieldvalue('colorbarheight',1);
+-				cgradient = ccontext.createLinearGradient(0,cheightoffset/2,0,cheight);
+-				textAlign = 'left';
+-				a = 0;
+-				b = cheightoffset*3/2;
+-				c = 0;
+-			}
+-			else {
+-				cwidth = ccanvashtml.width*0.7*options.getfieldvalue('colorbarwidth',1);
+-				cheight = ccanvashtml.height*0.4*options.getfieldvalue('colorbarheight',1);
+-				cgradient = ccontext.createLinearGradient(cwidth+cwidthoffset,0,cwidthoffset,0);		
+-				textAlign = 'center';
+-				a = cwidthoffset;
+-				b = cheightoffset;
+-				c = cwidth/2+cwidthoffset;
+-			} //}}}
+-			//Handle internal labels {{{
+-			if (colorbarinnerlabels=='on') {
+-				textAlign = 'center';
+-				d = (cdivisions/(cdivisions+1.0));
+-				e = (1.0/(cdivisions+1.0));
+-				f = 2;
+-				g = 1;
+-				h = cwidth/2;
+-			}
+-			else {
+-				d = 1;
+-				e = 0;
+-				f = 1;
+-				g = 0;
+-				h = cwidth+0.2*cwidth;
+-			} //}}}
+-
+-			for (var i=0; i < colorbar.length; i++) {
+-				color = colorbar[colorbar.length-i-1];
+-				color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)];	
+-				cgradient.addColorStop(i/colorbar.length*d+e,'rgba('+color.toString()+',1.0)');
+-			}
+-			ccontext.fillStyle=cgradient;
+-			ccontext.fillRect(a,b,cwidth,cheight);
+-			
+-			//Draw colorbar border
+-			ccontext.beginPath();
+-			ccontext.lineWidth='1';
+-			ccontext.strokeStyle=options.getfieldvalue('colorbarfontcolor','black');
+-			ccontext.rect(a,b,cwidth,cheight);
+-			ccontext.stroke();
+-			
+-			if (colorbarorientiation=='vertical') { //{{{
+-				for (var i=0; i <= cdivisions; i++) {
+-					y = i/(cdivisions+g)*cheight+cheightoffset/2;
+-					x = 0.2*cwidth;
+-					ccontext.font=String(options.getfieldvalue('colorbarfontsize',18))+'px "Lato",Helvetica,Arial,sans-serif';
+-					ccontext.fillStyle=options.getfieldvalue('colorbarfontcolor','black');
+-					ccontext.textAlign=textAlign;
+-					ccontext.textBaseline='top';
+-					ccontext.fillText(labels[i],h,y+cheightoffset*(g+0.5));					
+-					ccontext.beginPath();
+-					ccontext.moveTo(0,y+cheightoffset*f);
+-					ccontext.lineTo(x,y+cheightoffset*f);
+-					ccontext.moveTo(cwidth-x,y+cheightoffset*f);
+-					ccontext.lineTo(cwidth,y+cheightoffset*f);
+-					ccontext.stroke();
+-				}
+-			}
+-			else {
+-				for (var i=0; i <= cdivisions; i++) {
+-					y = 0.2*cheight;
+-					x = i/cdivisions*cwidth;
+-					ccontext.font=String(options.getfieldvalue('colorbarfontsize',18))+'px "Lato",Helvetica,Arial,sans-serif';
+-					ccontext.fillStyle=options.getfieldvalue('colorbarfontcolor','black');
+-					ccontext.textAlign=textAlign;
+-					ccontext.fillText(labels[cdivisions-i],x+cwidthoffset,cheight+cheightoffset*2);
+-					ccontext.beginPath();
+-					ccontext.moveTo(x+cwidthoffset,cheightoffset);
+-					ccontext.lineTo(x+cwidthoffset,y+cheightoffset);
+-					ccontext.moveTo(x+cwidthoffset,cheight-y+cheightoffset);
+-					ccontext.lineTo(x+cwidthoffset,cheight+cheightoffset);
+-					ccontext.stroke();
+-				}
+-			}
+-			if (options.exist('colorbartitle')) {
+-				ccontext.font=String(options.getfieldvalue('colorbarfontsize',18))+'px "Lato",Helvetica,Arial,sans-serif';
+-				ccontext.fillStyle=options.getfieldvalue('colorbarfontcolor','black');
+-				ccontext.textAlign='left';
+-				ccontext.textBaseline='bottom';
+-				ccontext.fillText(options.getfieldvalue('colorbartitle'),c,cheightoffset);
+-			} //}}}
+-			//}}}
+-		} 
+-	}
+-	//}}}
+-	//texture canvas //{{{
+-	var tcontext,tcanvas,tcanvasid,tcanvashtml,tURL,tgradient;
+-	tcanvasid = 'texturecanvas';
+-	var tcanvashtml = document.getElementById(tcanvasid);
+-	if (tcanvashtml == null) {
+-		tcanvas = $('<canvas id="texturecanvas" width="256" height="256"></canvas>').insertAfter('#'+String(options.getfieldvalue('canvasid')));
+-		tcanvas.css({'display':'none'});
+-		tcanvashtml = document.getElementById(tcanvasid);
+-	}
+-	else {
+-		tcanvas = $('#' + tcanvasid);
+-	}
+-	tcontext = tcanvashtml.getContext('2d');
+-	tgradient = tcontext.createLinearGradient(0,0,0,256);
+-		
+-	var cmap = options.getfieldvalue('colormap','jet');
+-	var colorbar = colorbars[cmap];
+-	for (var i=0; i < colorbar.length; i++) {
+-		color = colorbar[colorbar.length-i-1];
+-		color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)];	
+-		tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+',1.0)');
+-	}
+-	
+-	tcontext.fillStyle = tgradient;
+-	tcontext.fillRect(0,0,256,256);
+-	tURL = tcanvashtml.toDataURL();
+-	node['texture'] = initTexture(gl,tURL);
+-	//}}}
+-	//expdisp contours {{{
+-	if (options.exist('expdisp')) {
+-		canvas.nodes['expdisp'] = Node(gl,options);
+-		var node = canvas.nodes['expdisp'];
+-		
+-		//declare variables:  {{{
+-		var vertices = [];
+-		var indices = [];
+-		var colors = [];
+-		var rgbcolor = [];
+-		var xmin,xmax;
+-		var ymin,ymax;
+-		var zmin,zmax;
+-		var scale;
+-		
+-		//Process data and model
+-		var x = options.getfieldvalue('expdisp')['x'];
+-		var y = options.getfieldvalue('expdisp')['y'];
+-		var z = Array.apply(null, Array(x.length)).map(Number.prototype.valueOf,0);
+-		
+-		if (options.getfieldvalue('expdisp')['z']) {
+-			z = options.getfieldvalue('expdisp')['z'];
+-		}
+-		//}}}
+-
+-		//Compute coordinates and data range: //{{{
+-		var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-		var modelylim = [ArrayMin(y),ArrayMax(y)];
+-		var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-		var xlim = options.getfieldvalue('xlim',modelxlim);
+-		var ylim = options.getfieldvalue('ylim',modelylim);
+-		var zlim = options.getfieldvalue('zlim',modelzlim);
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		//}}}
+-
+-		//Compute scaling: //{{{
+-		var scale = 1 / (xmax - xmin);
+-		node['shaderName'] = 'colored';
+-		node['shader'] = gl['shaders'][node['shaderName']]['program'];
+-		node['scale'] = [scale, scale, scale*options.getfieldvalue('heightscale',1)];
+-		node['translation'] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (-2 / scale)];
+-		node['modelMatrix'] = recalculateModelMatrix(node);
+-		node['drawMode'] = gl.LINE_LOOP;
+-		node['drawOrder'] = 0;
+-		node['useIndexBuffer'] = false;
+-		node['disableDepthTest'] = true;
+-		//}}}
+-
+-		//some defaults:
+-		colors.itemSize = 4;
+-
+-		//retrieve some options
+-		var linewidth=options.getfieldvalue('linewidth',1);
+-		var edgecolor=options.getfieldvalue('edgecolor','black'); //RGBCOLOR?
+-
+-		vertices.itemSize = 3;
+-		for(var i=0; i < x.length; i++){
+-			vertices[vertices.length] = x[i];
+-			vertices[vertices.length] = y[i];
+-			vertices[vertices.length] = z[i];
+-
+-			//edgecolor
+-			rgbcolor = [0.0, 0.0, 0.0];
+-			colors[colors.length] = rgbcolor[0];
+-			colors[colors.length] = rgbcolor[1];
+-			colors[colors.length] = rgbcolor[2];
+-			colors[colors.length] = 1.0;
+-		}
+-
+-		//Initalize buffers:
+-		node['arrays'] = [vertices, colors];
+-		node['buffers'] = initBuffers(gl, node['arrays']);
+-	} //}}}
+-	//cloud of points {{{
+-	if (options.exist('cloud')) {
+-		canvas.nodes['cloud'] = Node(gl,options);
+-		var node = canvas.nodes['cloud'];
+-
+-		//declare variables:  {{{
+-		var vertices = [];
+-		var indices = [];
+-		var colors = [];
+-		var rgbcolor = [];
+-		var xmin,xmax;
+-		var ymin,ymax;
+-		var zmin,zmax;
+-		var scale;
+-		
+-		//Process data and model
+-		var x = options.getfieldvalue('cloud')['x'];
+-		var y = options.getfieldvalue('cloud')['y'];
+-		var z = Array.apply(null, Array(x.length)).map(Number.prototype.valueOf,0);
+-		
+-		if (options.getfieldvalue('cloud')['z']) {
+-			z = options.getfieldvalue('cloud')['z'];
+-		}
+-		//}}}
+-
+-		//Compute coordinates and data range: //{{{
+-		var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-		var modelylim = [ArrayMin(y),ArrayMax(y)];
+-		var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-		var xlim = options.getfieldvalue('xlim',modelxlim);
+-		var ylim = options.getfieldvalue('ylim',modelylim);
+-		var zlim = options.getfieldvalue('zlim',modelzlim);
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		//}}}
+-
+-		//Compute scaling: //{{{
+-		var scale = 1 / (xmax - xmin);
+-		node['shaderName'] = 'colored';
+-		node['shader'] = gl['shaders'][node['shaderName']]['program'];
+-		node['scale'] = [scale, scale, scale*options.getfieldvalue('heightscale',1)];
+-		node['translation'] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (-2 / scale)];
+-		node['modelMatrix'] = recalculateModelMatrix(node);
+-		node['drawMode'] = gl.POINTS;
+-		node['drawOrder'] = 0;
+-		node['useIndexBuffer'] = false;
+-		node['disableDepthTest'] = true;
+-		//}}}
+-
+-		//some defaults:
+-		colors.itemSize = 4;
+-
+-		//retrieve some options
+-		var linewidth=options.getfieldvalue('linewidth',1);
+-		var edgecolor=options.getfieldvalue('edgecolor','black'); //RGBCOLOR?
+-
+-		vertices.itemSize = 3;
+-		for(var i=0; i < x.length; i++){
+-			vertices[vertices.length] = x[i];
+-			vertices[vertices.length] = y[i];
+-			vertices[vertices.length] = z[i];
+-
+-			//edgecolor
+-			rgbcolor = [0.0, 0.0, 0.0];
+-			colors[colors.length] = rgbcolor[0];
+-			colors[colors.length] = rgbcolor[1];
+-			colors[colors.length] = rgbcolor[2];
+-			colors[colors.length] = 1.0;
+-		}
+-
+-		//Initalize buffers:
+-		node['arrays'] = [vertices, colors];
+-		node['buffers'] = initBuffers(gl, node['arrays']);
+-	} //}}}
+-	
+-	//text display //{{{
+-	if (options.exist('textlabels')) {
+-		var textcanvas,textcanvasid;	
+-		textcanvasid = options.getfieldvalue('textcanvasid',options.getfieldvalue('canvasid')+'-text');
+-		textcanvas = $('#'+textcanvasid);
+-		textcanvas.textlabels = options.getfieldvalue('textlabels',[]);
+-		
+-		//setup drawing function for text canvas draw calls
+-		textcanvas.draw = function(canvas) {
+-			var textcontext,textlabels,textlabel,textcanvaswidth,textcanvasheight,textcoordinates;	
+-			var textposition = vec3.create();
+-			var mvpMatrix = mat4.create();
+-			
+-			//ensure correct canvas coordinate scaling
+-			textcanvaswidth = this[0].clientWidth;
+-			textcanvasheight = this[0].clientHeight;
+-			this[0].width  = textcanvaswidth;
+-			this[0].height = textcanvasheight;
+-			
+-			textcontext = this[0].getContext('2d');
+-			textlabels = options.getfieldvalue('textlabels',[]);
+-			textcontext.clearRect(0, 0, textcanvaswidth, textcanvasheight);
+-			
+-			//worldspace to screenspace transformation for text
+-			for (text in textlabels) {
+-				textlabel = textlabels[text];
+-				mat4.multiply(mvpMatrix, canvas.cameraMatrix, canvas.nodes['overlay']['modelMatrix']);
+-				textposition = vec3.transformMat4(textposition, textlabel['pos'], mvpMatrix);
+-				if (textposition[2] > 1) { //clip coordinates with z > 1
+-					continue;
+-				}
+-				textcoordinates = [(textposition[0]+1.0)/2.0*textcanvaswidth, (-textposition[1]+1.0)/2.0*textcanvasheight]; //NDC to screenspace
+-				textcontext.font = String(options.getfieldvalue('colorbarfontsize',18))+'px "Lato",Helvetica,Arial,sans-serif';
+-				textcontext.fillStyle = options.getfieldvalue('colorbarfontcolor','black');
+-				textcontext.strokeStyle = options.getfieldvalue('colorbarfontcolor','black');
+-				textcontext.textAlign = 'center';
+-				textcontext.textBaseline = 'middle';
+-				textcontext.fillText(textlabel['text'], textcoordinates[0], textcoordinates[1]);
+-				textcontext.strokeText(textlabel['text'], textcoordinates[0], textcoordinates[1]);
+-			}
+-		}
+-		canvas.textcanvas = textcanvas;
+-	} //}}}
+-}
+-function checkplotoptions(md,options){
+-	//PARSE_OPTIONS - build a structure that holds all plot options
+-	//
+-	//   Usage:
+-	//      checkplotoptions(md,options);
+-	//
+-	//   See also: PLOTMODEL
+-
+-	//units
+-	if (options.exist('unit')){
+-		if (options.getfieldvalue('unit') === 'km'){
+-			options.changefieldvalue('unit',10^-3);
+-		}
+-		if (options.getfieldvalue('unit') === '100km'){
+-			options.changefieldvalue('unit',10^-5);
+-		}
+-	}
+-
+-	//density
+-	if (options.exist('density')){
+-		density=options.getfieldvalue('density');
+-		options.changefieldvalue('density',Math.abs(Math.ceil(density)));
+-	}
+-
+-	//Show section
+-	if (options.exist('showsection')){
+-		if (options.getfieldvalue('showsection') === 'on'){
+-			options.changefieldvalue('showsection',4);
+-		}
+-	}
+-
+-	//smooth values
+-	if (options.exist('smooth')){
+-		if (options.getfieldvalue('smooth') === 'on'){
+-			options.changefieldvalue('smooth',0);
+-		}
+-	}
+-
+-	//contouronly values
+-	if (options.exist('contouronly')){
+-		if (options.getfieldvalue('contouronly') === 'on'){
+-			options.changefieldvalue('contouronly',1);
+-		}
+-	}
+-
+-	//Colorbar;
+-	if (options.exist('colorbar')){
+-		if (options.getfieldvalue('colorbar') === 'on'){
+-			options.changefieldvalue('colorbar',1);
+-		}
+-		else if (options.getfieldvalue('colorbar') === 'off'){
+-			options.changefieldvalue('colorbar',0);
+-		}
+-	}
+-
+-	//text
+-	if (options.exist('text')){
+-
+-		//1: textvalue
+-		textvalues=options.getfieldvalue('text');
+-
+-		//ischar if only one expstyle -> create a cell
+-		if (typeof textvalues === 'string'){
+-			textvalues=[textvalues];
+-			numtext=1;
+-		}
+-		else if (IsArray(textvalues)){
+-			numtext=textvalues.length;
+-		}
+-		else throw Error("plot error message: ''text'' option should be either a string or a cell");
+-
+-		//2: textweight
+-		if (options.exist('textweight')){
+-
+-			textweightvalues=options.getfieldvalue('textweight');
+-
+-			//ischar if only one textweight -> create a cell
+-			if (typeof textweightvalues === 'string'){
+-				textweightvalues=[textweightvalues];
+-			}
+-			else if (!IsArray(textweightvalues)){
+-				throw Error("plot error message: ''textweight'' option should be either a string or a cell");
+-			}
+-		}
+-		else{
+-			textweightvalues=['n'];
+-		}
+-		if (textweightvalues.length==1){
+-			var value=textweightvalues[0];
+-			for (var i=0;i<numtext-1;i++)textweightvalues.push(value);
+-		}
+-
+-		//3: textsize
+-		if (options.exist('textsize')){
+-			textsizevalues=options.getfieldvalue('textsize');
+-		}
+-		//ischar if only one textsize -> create a cell
+-		if (typeof textsizevalues === 'number'){
+-			textsizevalues=[textsizevalues];
+-		}
+-		else if (!IsArray(textsizevalues)){
+-			throw Error("plot error message: ''textsize'' option should be either a number or a cell");
+-		}
+-		else{
+-			textsizevalues=[14];
+-		}
+-		if (textsizevalues.length==1){
+-			var value=textsizevalues[0];
+-			for (var i=0;i<numtext-1;i++)textsizevalues.push(value);
+-		}
+-			
+-		//4: textcolor
+-		if (options.exist('textcolor')){
+-			textcolorvalues=options.getfieldvalue('textcolor');
+-		}
+-		if (typeof textcolorvalues === 'string'){ //ischar if only one textcolor -> create a cell
+-			textcolorvalues=[textcolorvalues];
+-		}
+-		else if (!IsArray(textcolorvalues)){
+-			throw Error("plot error message: ''textcolor'' option should be either a string or a cell");
+-		}
+-		else textcolorvalues=['k'];
+-
+-		if (textcolorvalues.length==1){
+-			var value=textcolorvalues[0];
+-			for (var i=0;i<numtext-1;i++)textcolorvalues.push(value);
+-		}
+-		
+-		//5: textposition
+-		if (options.exist('textposition')){
+-			textpositionvalues=options.getfieldvalue('textposition');
+-		}
+-		//ischar if only one textposition -> create a cell
+-		if (typeof textpositionvalues === 'number'){
+-			textpositionvalues=[textpositionvalues];
+-		}
+-		else if(!IsArray(textpositionvalues)){
+-			throw Error("plot error message: ''textposition'' option should be either a string or a cell");
+-		}
+-		else throw Error("plot error message: ''textposition'' option is missing");
+-			
+-		//6: textrotation
+-		if (options.exist('textrotation')){
+-			textrotationvalues=options.getfieldvalue('textrotation');
+-		}
+-		//ischar if only one textsize -> create a cell
+-		if (typeof textrotationvalues === 'number'){
+-			textrotationvalues=[textrotationvalues];
+-		}
+-		else if (!IsArray(textrotationvalues)){
+-			throw Error("plot error message: ''textrotation'' option should be either a number or a cell");
+-		}
+-		else textrotationvalues=[0];
+-		
+-		if (textrotationvalues.length==1){
+-			var value=textrotationvalues[0];
+-			for (var i=0;i<numtext-1;i++)textrotationvalues.push(value);
+-		}
+-			
+-		options.changefieldvalue('text',textvalues);
+-		options.changefieldvalue('textsize',textsizevalues);
+-		options.changefieldvalue('textweight',textweightvalues);
+-		options.changefieldvalue('textcolor',textcolorvalues);
+-		options.changefieldvalue('textposition',textpositionvalues);
+-		options.changefieldvalue('textrotation',textrotationvalues);
+-	}
+-
+-	//expdisp
+-	expdispvaluesarray=[];
+-	expstylevaluesarray=[];
+-	expstylevalues=[];
+-	if (options.exist('expstyle')){
+-		expstylevalues=options.getfieldvalue('expstyle');
+-		//ischar if only one expstyle -> create a cell
+-		if (typeof expstylevalues === 'string'){
+-			expstylevalues=[expstylevalues];
+-		}
+-		options.changefieldvalue('expdisp',expdispvaluesarray);
+-	}
+-		
+-	if (options.exist('expdisp')){
+-		expdispvalues=options.getfieldvalue('expdisp');
+-	
+-		//ischar if only one expstyle -> create a cell
+-		if (typeof expdispvalues === 'string'){
+-			expdispvalues=[expdispvalues];
+-		}
+-		for (var i=0; i< expdispvalues.length;i++){
+-			expdispvaluesarray.push(expdispvalues[i]);
+-			if (expstylevalues.length>i){
+-				expstylevaluesarray.push(expstylevalues[i]);
+-			}
+-			else{
+-				expstylevaluesarray.push('g-');
+-			}
+-		}
+-		options.changefieldvalue('expstyle',expstylevaluesarray);
+-	}
+-
+-	//latlonnumbering
+-	if (options.exist('latlonclick')){
+-		if (options.getfieldvalue('latlonclick') === 'on'){
+-			options.changefieldvalue('latlonclick',1);
+-		}
+-	}
+-
+-	//north arrow
+-	if (options.exist('northarrow')){
+-	   if (options.getfieldvalue('northarrow') === 'on'){
+-		   
+-		   //default values
+-		   Lx=ArrayMax(md.mesh.y)-ArrayMin(md.mesh.y);
+-		   Ly=ArrayMax(md.mesh.y)-ArrayMin(md.mesh.y);
+-		  
+-		   //default values
+-		   options.changefieldvalue('northarrow',[ArrayMin(md.mesh.x)+1/6*Lx,ArrayMin(md.mesh.y)+5/6*Ly,1/15*Ly,0.25,1/250*Ly]);
+-	   }
+-	}
+-
+-	//scale ruler
+-	if (options.exist('scaleruler')){
+-	   if (options.getfieldvalue('scaleruler') === 'on'){
+-		   //default values
+-		   Lx=ArrayMax(md.mesh.x)-ArrayMin(md.mesh.x);
+-		   Ly=ArrayMax(md.mesh.y)-ArrayMin(md.mesh.y);
+-		   
+-		   //default values
+-		   options.changefieldvalue('scaleruler',[ArrayMin(md.mesh.x)+6/8*Lx, ArrayMin(md.mesh.y)+1/10*Ly, 10^(Mat.ceil(Mat.log10(Lx)))/5, Math.floor(Lx/100), 5]);
+-	   }
+-	}
+-}
+-function plot_manager(md,options,subplotwidth,nlines,ncols,i){
+-	//PLOT__MANAGER - distribute the plots, called by plotmodel
+-	//
+-	//   Usage:
+-	//      plot_manager(md,options,subplotwidth,i);
+-	//
+-	//   See also: PLOTMODEL, PLOT_UNIT
+-			
+-	//parse options and get a structure of options. 
+-	checkplotoptions(md,options);
+-	
+-	//get data to be displayed
+-	var data = options.getfieldvalue('data');
+-	var canvas = initCanvas(options);
+-	var gl = canvas.gl;
+-	//TODO: each plot_ should add their node to the canvas.node array
+-
+-	//figure out if this is a special plot
+-	if (typeof data === 'string'){
+-
+-		switch(data){
+-
+-			case 'boundaries':
+-				plot_boundaries(md,options,subplotwidth,i);
+-				return;
+-			case 'BC':
+-				plot_BC(md,options,subplotwidth,i,data);
+-				return;
+-			case 'edges':
+-				plot_edges(md,options,subplotwidth,i,data);
+-				return;
+-			case 'elementnumbering':
+-				plot_elementnumbering(md,options,subplotwidth,i);
+-				return;
+-			case 'highlightelements':
+-				plot_highlightelements(md,options,subplotwidth,i);
+-				return;
+-			case 'qmumean':
+-				plot_qmumean(md,options,nlines,ncols,i);
+-				return;
+-			case 'qmustddev':
+-				plot_qmustddev(md,options,nlines,ncols,i);
+-				return;
+-			case 'qmuhistnorm':
+-				plot_qmuhistnorm(md,options,nlines,ncols,i);
+-				return;
+-			case 'qmu_mass_flux_segments':
+-				plot_qmu_mass_flux_segments(md,options,nlines,ncols,i);
+-				return;
+-			case 'part_hist':
+-				plot_parthist(md,options,nlines,ncols,i);
+-				return;
+-			case 'part_hist_n':
+-				plot_parthistn(md,options,nlines,ncols,i);
+-				return;
+-			case 'part_hist_w':
+-				plot_parthistw(md,options,nlines,ncols,i);
+-				return;
+-			case 'elements_type':
+-				plot_elementstype(md,options,subplotwidth,i);
+-				return;
+-			case 'vertexnumbering':
+-				plot_vertexnumbering(md,options,subplotwidth,i);
+-				return;
+-			case 'highlightvertices':
+-				plot_highlightvertices(md,options,subplotwidth,i);
+-				return;
+-			case 'basal_drag':
+-				plot_basaldrag(md,options,subplotwidth,i,data);
+-				return;
+-			case 'basal_dragx':
+-				plot_basaldrag(md,options,subplotwidth,i,data);
+-				return;
+-			case 'basal_dragy':
+-				plot_basaldrag(md,options,subplotwidth,i,data);
+-				return;
+-			case 'driving_stress':
+-				plot_drivingstress(md,options,subplotwidth,i);
+-				return;
+-			case 'mesh':
+-				plot_mesh(md,options,canvas);
+-				return;
+-			case 'none':
+-				if (!(options.exist('overlay'))){
+-					plot_none(md,options,nlines,ncols,i);
+-				}
+-				return;
+-			case 'penalties':
+-				plot_penalties(md,options,subplotwidth,i);
+-				return;
+-			case 'partition':
+-				plot_partition(md,options,nlines,ncols,i);
+-				return;
+-			case 'referential':
+-				plot_referential(md,options,nlines,ncols,i);
+-				return;
+-			case 'riftvel':
+-				plot_riftvel(md,options,nlines,ncols,i);
+-				return;
+-			case 'riftnumbering':
+-				plot_riftnumbering(md,options,nlines,ncols,i);
+-				return;
+-			case 'rifts':
+-				plot_rifts(md,options,nlines,ncols,i);
+-				return;
+-			case 'riftrelvel':
+-				plot_riftrelvel(md,options,nlines,ncols,i);
+-				return;
+-			case 'riftpenetration':
+-				plot_riftpenetration(md,options,nlines,ncols,i);
+-				return;
+-			case 'riftfraction':
+-				plot_riftfraction(md,options,nlines,ncols,i);
+-				return;
+-			case 'sarpwr':
+-				plot_sarpwr(md,options,subplotwidth,i);
+-				return;
+-			case 'time_dependant':
+-				plot_vstime(md,options,nlines,ncols,i);
+-				return;
+-			case 'icefront':
+-				plot_icefront(md,options,subplotwidth,i,data);
+-				return;
+-			case 'segments':
+-				plot_segments(md,options,subplotwidth,i,data);
+-				return;
+-			case 'quiver':
+-				plot_quiver(md,options,canvas);
+-				return;
+-			case 'strainrate_tensor':
+-			case 'strainrate':
+-			case 'strainrate_principal':
+-			case 'strainrate_principalaxis1':
+-			case 'strainrate_principalaxis2':
+-			case 'strainrate_principalaxis3':
+-			case 'stress_tensor':
+-			case 'stress':
+-			case 'stress_principal':
+-			case 'stress_principalaxis1':
+-			case 'stress_principalaxis2':
+-			case 'stress_principalaxis3':
+-			case 'deviatoricstress_tensor':
+-			case 'deviatoricstress':
+-			case 'deviatoricstress_principal':
+-			case 'deviatoricstress_principalaxis1':
+-			case 'deviatoricstress_principalaxis2':
+-			case 'deviatoricstress_principalaxis3':
+-				plot_tensor(md,options,subplotwidth,i,data);
+-				return;
+-			case 'thermaltransient_results':
+-				plot_thermaltransient_results(md,options,subplotwidth,i);
+-				return;
+-			case 'transient_movie':
+-				plot_transient_movie(md,options,subplotwidth,i);
+-				return;
+-			case 'transient_results':
+-				plot_transient_results(md,options,subplotwidth,i);
+-				return;
+-			case 'transient_field':
+-				plot_transient_field(md,options,subplotwidth,i);
+-				return;
+-			default:
+-				if (data in md){
+-					data=md[data];
+-				}
+-				else{
+-					error('plot error message: data provided not supported yet. Type plotdoc for help');
+-				}
+-		}
+-	}
+-
+-	//Figure out if this is a semi-transparent plot.
+-	if (options.getfieldvalue('overlay','off')=='on'){
+-		plot_overlay(md,data,options,canvas);
+-	}
+-
+-	//Figure out if this is a semi-transparent plot.
+-	if (options.exist('googlemaps')){
+-		plot_googlemaps(md,data,options,nlines,ncols,i);
+-		return;
+-	}
+-
+-	//Figure out if this is a semi-transparent plot.
+-	if (options.exist('gridded')){
+-		plot_gridded(md,data,options,nlines,ncols,i);
+-		return;
+-	}
+-
+-	//Figure out if this is a Section plot
+-	if (options.exist('sectionvalue')){
+-		plot_section(md,data,options,nlines,ncols,i);
+-		return;
+-	}
+-
+-	//Figure out if this is a Profile plot
+-	if (options.exist('profile')){
+-		plot_profile(md,data,options,nlines,ncols,i);
+-		return;
+-	}
+-	
+-	var	dataresults = processdata(md,data,options);
+-	var	data2 = dataresults[0]; 
+-	var	datatype = dataresults[1];
+-	
+-	//plot unit
+-	plot_unit(md,data2,datatype,options,canvas);
+-
+-	applyoptions(md,data2,datatype,options,canvas,gl,canvas.nodes[canvas.nodes.length-1]);
+-}
+-function plot_mesh(md,options,canvas) {
+-	//PLOT_MESH - Function for plotting wireframe mesh.
+-	//
+-	//   Usage:
+-	//      plot_mesh(md,options,canvas);
+-	//
+-	//   See also: PLOTMODEL, PLOT_MANAGER
+-
+-	//declare variables:  {{{
+-	var vertices = [];
+-	var indices = [];
+-	var colors = [];
+-	var nanindices = {};
+-	var xmin,xmax;
+-	var ymin,ymax;
+-	var zmin,zmax;
+-	var scale,matrixscale,vertexscale;
+-	
+-	//Process data and model
+-	var meshresults = processmesh(md,[],options);
+-	var x = meshresults[0]; 
+-	var y = meshresults[1]; 
+-	var z = meshresults[2]; 
+-	var elements = meshresults[3]; 
+-	var is2d = meshresults[4]; 
+-	var isplanet = meshresults[5];
+-		
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+-	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale',1);
+-	}
+-	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale',1);
+-		vertexscale = 0;
+-	}
+-	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-	var modelylim = [ArrayMin(y),ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim',modelxlim);
+-	var ylim = options.getfieldvalue('ylim',modelylim);
+-	var zlim = options.getfieldvalue('zlim',modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-
+-	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl,options);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	scale = 1 / (xmax - xmin);
+-	node["shaderName"] = "colored";
+-	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
+-	node["lineWidth"] = options.getfieldvalue('linewidth',1);
+-	node["scale"] = [scale, scale, scale * matrixscale];
+-	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
+-	node["modelMatrix"] = recalculateModelMatrix(node);
+-	node["drawMode"] = gl.LINES;
+-	node["drawOrder"] = 0;
+-	node["maskEnabled"] = options.getfieldvalue('innermask','off') == 'on';
+-	node["maskHeight"] = options.getfieldvalue('innermaskheight',150.0)*options.getfieldvalue('heightscale',1);
+-	node["maskColor"] = options.getfieldvalue('innermaskcolor',[0.0,0.0,1.0,1.0]);
+-				
+-	//some defaults:
+-	colors.itemSize = 4;
+-
+-	//retrieve some options
+-	var edgecolor = new RGBColor(options.getfieldvalue('edgecolor','black'));
+-	if (edgecolor.ok) edgecolor = [edgecolor.r/255.0, edgecolor.g/255.0, edgecolor.b/255.0, 1.0];
+-	else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out edgecolor color for curent canvas ",canvas));
+-
+-	//node plot {{{
+-	if (elements[0].length==6){ //prisms
+-	}
+-	else if (elements[0].length==4){ //tetras
+-	}
+-	else{ //2D triangular elements
+-		vertices.itemSize = 3;
+-		var xyz = vec3.create();
+-		var direction = vec3.create();
+-		var vertex = vec3.create();
+-		var magnitude;
+-		var color = edgecolor;
+-		for(var i = 0; i < x.length; i++){
+-			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+-				nanindices[i] = i;
+-				vertices[vertices.length] = vertex[0];
+-				vertices[vertices.length] = vertex[1];
+-				vertices[vertices.length] = vertex[2];
+-				
+-				colors[colors.length] = color[0];
+-				colors[colors.length] = color[1];
+-				colors[colors.length] = color[2];
+-				colors[colors.length] = color[3];
+-				continue;
+-			}
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-
+-			colors[colors.length] = color[0];
+-			colors[colors.length] = color[1];
+-			colors[colors.length] = color[2];
+-			colors[colors.length] = color[3];
+-		}
+-		
+-		//linearize the elements array: 
+-		var element;
+-		for(var i = 0; i < elements.length; i++){
+-			element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-			if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-			indices[indices.length] = element[0];
+-			indices[indices.length] = element[1];
+-			indices[indices.length] = element[1];
+-			indices[indices.length] = element[2];
+-			indices[indices.length] = element[2];
+-			indices[indices.length] = element[0];
+-		}
+-		indices.itemSize = 1;
+-	}
+-	//}}}
+-
+-	/*Initalize buffers: */
+-	node["arrays"] = [vertices, colors, indices];
+-	node["buffers"] = initBuffers(gl, node["arrays"]);
+-}
+-function plot_overlay(md,data,options,canvas){
+-	//PLOT_OVERLAY - Function for plotting a georeferenced image.  
+-	//
+-	//   Usage:
+-	//      plot_overlay(md,data,options,canvas);
+-	//
+-	//   See also: PLOTMODEL, PLOT_MANAGER
+-
+-	//declare variables:  {{{
+-	var vertices = [];
+-	var indices = [];
+-	var texcoords = [];
+-	var nanindices = {};
+-	var xmin,xmax;
+-	var ymin,ymax;
+-	var zmin,zmax;
+-	var scale,matrixscale,vertexscale;
+-
+-	//Process data and model
+-	var meshresults = processmesh(md,data,options);
+-	var x = meshresults[0]; 
+-	var y = meshresults[1]; 
+-	var z = meshresults[2]; 
+-	var elements = meshresults[3]; 
+-	var is2d = meshresults[4]; 
+-	var isplanet = meshresults[5];
+-
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+-	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale',1);
+-	}
+-	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale',1);
+-		vertexscale = 0;
+-	}
+-	//}}}
+-	
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-	var modelylim = [ArrayMin(y),ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim',modelxlim);
+-	var ylim = options.getfieldvalue('ylim',modelylim);
+-	var zlim = options.getfieldvalue('zlim',modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-		
+-	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl,options);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	scale = 1 / (xmax - xmin);
+-	node["shaderName"] = "unlit_textured";
+-	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
+-	node["scale"] = [scale, scale, scale * matrixscale];
+-	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
+-	node["modelMatrix"] = recalculateModelMatrix(node);
+-	node["texture"] = initTexture(gl,options.getfieldvalue('overlay_image'));
+-	node["alpha"] = options.getfieldvalue('outeralpha',1.0);
+-	node["drawOrder"] = 1;
+-	node["maskEnabled"] = options.getfieldvalue('outermask','off') == 'on';
+-	node["maskHeight"] = options.getfieldvalue('outermaskheight',150.0);
+-	node["maskColor"] = options.getfieldvalue('outermaskcolor',[0.0,0.0,1.0,1.0]);
+-				
+-	//some defaults:
+-	texcoords.itemSize = 2;
+-	vertices.itemSize = 3;
+-	
+-	//Handle outer radaroverlay
+-	if (md.radaroverlay.outerx) {
+-		var newelements = [];
+-		for (var i = 0; i < md.radaroverlay.outerindex.length; i++) {
+-			newelements[newelements.length] = [md.radaroverlay.outerindex[i][0] + x.length, md.radaroverlay.outerindex[i][1] + y.length, md.radaroverlay.outerindex[i][2] + z.length];
+-		}
+-		x = [].concat(x, md.radaroverlay.outerx);
+-		y = [].concat(y, md.radaroverlay.outery);
+-		z = [].concat(z, md.radaroverlay.outerheight);
+-		elements = [].concat(elements, newelements);
+-		
+-		//Reclaculate bounds based on otuer radaroverlay
+-		modelxlim = [ArrayMin(x),ArrayMax(x)];
+-		modelylim = [ArrayMin(y),ArrayMax(y)];
+-		modelzlim = [ArrayMin(z),ArrayMax(z)];
+-		xmin = xlim[0];
+-		xmax = xlim[1];
+-		ymin = ylim[0];
+-		ymax = ylim[1];
+-		zmin = zlim[0];
+-		zmax = zlim[1];
+-		
+-		node["translation"] = [node["translation"][0], node["translation"][1], (zmax) / (-1 / scale)];
+-	}
+-	
+-	var xrange = modelxlim[1] - modelxlim[0];
+-	var yrange = modelylim[1] - modelylim[0];
+-	
+-	var xyz = vec3.create();
+-	var direction = vec3.create();
+-	var vertex = vec3.create();
+-	var magnitude;
+-
+-	//generate mesh:
+-	for(var i = 0; i < x.length; i++){
+-		//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-		if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+-			nanindices[i] = i;
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = 0.0;
+-			texcoords[texcoords.length] = 0.0;
+-			continue;
+-		}
+-
+-		if (md.mesh.classname() == 'mesh3dsurface') {
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = degrees(Math.atan2(vertex[1], vertex[0])) / 360 + 0.5;
+-			texcoords[texcoords.length] = degrees(Math.asin(vertex[2] / magnitude)) / 180 + 0.5;
+-		}
+-		else {
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz);
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vertices[vertices.length] = vertex[0];
+-			vertices[vertices.length] = vertex[1];
+-			vertices[vertices.length] = vertex[2];
+-			
+-			texcoords[texcoords.length] = (x[i] - modelxlim[0]) / xrange;
+-			texcoords[texcoords.length] = (y[i] - modelylim[0]) / yrange;
+-		}
+-	}
+-
+-	//linearize the elements array:
+-	var element;
+-	for(var i = 0; i < elements.length; i++){
+-		element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-		if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-		indices[indices.length] = element[0];
+-		indices[indices.length] = element[1];
+-		indices[indices.length] = element[2];
+-	}
+-	indices.itemSize = 1;
+-	
+-	/*Initalize buffers: */
+-	node["arrays"] = [vertices, texcoords, indices];
+-	node["buffers"] = initBuffers(gl,node["arrays"]);	
+-}
+-function plot_unit(md,data,datatype,options,canvas) {
+-	//PLOT_UNIT - unit plot, display data
+-	//
+-	//   Usage:
+-	//      plot_unit(md,data,options,canvas);
+-	//
+-	//   See also: PLOTMODEL, PLOT_MANAGER
+-
+-	//declare variables:  {{{
+-	var vertices = [];
+-	var indices = [];
+-	var texcoords = [];
+-	var nanindices = {};
+-	var xmin,xmax;
+-	var ymin,ymax;
+-	var zmin,zmax;
+-	var datamin,datamax,datadelta;
+-	var scale,matrixscale,vertexscale;
+-
+-	//Process data and model
+-	var meshresults = processmesh(md,data,options);
+-	var x = meshresults[0]; 
+-	var y = meshresults[1]; 
+-	var z = meshresults[2]; 
+-	var elements = meshresults[3];
+-	var is2d = meshresults[4]; 
+-	var isplanet = meshresults[5];
+-
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+-	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale',1);
+-	}
+-	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale',1);
+-		vertexscale = 0;
+-	}
+-	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-	var modelylim = [ArrayMin(y),ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim',modelxlim);
+-	var ylim = options.getfieldvalue('ylim',modelylim);
+-	var zlim = options.getfieldvalue('zlim',modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-	var caxis;
+-	
+-	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl,options);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	scale = 1 / (xmax - xmin);
+-	node["shaderName"] = "unlit_textured";
+-	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
+-	node["scale"] = [scale, scale, scale * matrixscale];
+-	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
+-	node["modelMatrix"] = recalculateModelMatrix(node);
+-	node["alpha"] = options.getfieldvalue('alpha',1.0);
+-	node["drawOrder"] = 0;
+-	node["maskEnabled"] = options.getfieldvalue('innermask','off') == 'on';
+-	node["maskHeight"] = options.getfieldvalue('innermaskheight',150.0);
+-	node["maskColor"] = options.getfieldvalue('innermaskcolor',[0.0,0.0,1.0,1.0]);
+-	node["enabled"] = options.getfieldvalue('nodata','off') == 'off';
+-	
+-	switch(datatype){
+-		//element plot {{{
+-		case 1:
+-			pos=ArrayFindNot(data,NaN); //needed for element on water
+-			if (elements[0].length==6){ //prisms
+-			}
+-			else if (elements[0].length==4){ //tetras
+-			}
+-			else{ //2D triangular elements
+-			}
+-			break;
+-		//}}}
+-		//node plot {{{
+-		case 2:
+-			if (elements[0].length==6){ //prisms
+-			}
+-			else if (elements[0].length==4){ //tetras
+-			}
+-			else{ //triangular elements	
+-				caxis = options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+-				if (options.getfieldvalue('log','off')!='off') caxis = [Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log',10)),Math.log10(caxis[1])/Math.log10(options.getfieldvalue('log',10))];
+-				datamin = caxis[0];
+-				datamax = caxis[1];
+-				datadelta = datamax - datamin;
+-
+-				vertices.itemSize = 3;
+-				texcoords.itemSize = 2;
+-				
+-				var xyz = vec3.create();
+-				var direction = vec3.create();
+-				var vertex = vec3.create();
+-				var magnitude;
+-
+-				for(var i = 0; i < x.length; i++){
+-					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i]) || isNaN(data[i])) {
+-						nanindices[i] = i;
+-						vertices[vertices.length] = vertex[0];
+-						vertices[vertices.length] = vertex[1];
+-						vertices[vertices.length] = vertex[2];
+-						
+-						texcoords[texcoords.length] = 0.0;
+-						texcoords[texcoords.length] = 0.0;
+-						continue;
+-					}
+-					//Scale vertices
+-					xyz = vec3.fromValues(x[i], y[i], z[i]);
+-					magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-					vec3.normalize(direction, xyz);
+-					vec3.scale(vertex, direction, magnitude);
+-					vertices[vertices.length] = vertex[0];
+-					vertices[vertices.length] = vertex[1];
+-					vertices[vertices.length] = vertex[2];
+-
+-					texcoords[texcoords.length] = 0.5;
+-					texcoords[texcoords.length] = (data[i] - datamin) / datadelta;
+-				}
+-
+-				//linearize the elements array: 
+-				var element;
+-				for(var i = 0; i < elements.length; i++){
+-					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-					indices[indices.length] = element[0];
+-					indices[indices.length] = element[1];
+-					indices[indices.length] = element[2];
+-				}
+-				indices.itemSize = 1;
+-
+-			}
+-		
+-			//Initalize buffers
+-			node["arrays"] = [vertices, texcoords, indices];
+-			node["buffers"] = initBuffers(gl,node["arrays"]);
+-			break;
+-		//}}}
+-		//quiver plot {{{
+-		case 3:
+-			if (is2d){
+-				//plot_quiver(x,y,data(:,1),data(:,2),options);
+-			}
+-			else{
+-				//plot_quiver3(x,y,z,data(:,1),data(:,2),data(:,3),options);
+-			}
+-			break;
+-		//}}}
+-		//node transient plot {{{
+-		case 5:
+-			if (elements[0].length==6){ //prisms
+-			}
+-			else if (elements[0].length==4){//tetras
+-			}
+-			else{ //triangular elements
+-				vertices.itemSize = 3;
+-				
+-				var xyz = vec3.create();
+-				var direction = vec3.create();
+-				var vertex = vec3.create();
+-				var magnitude;
+-				var timestamps = data[data.length-1];
+-				for(var i = 0; i < x.length; i++){
+-					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i]) || isNaN(data[i][0])) {
+-						nanindices[i] = i;
+-						vertices[vertices.length] = vertex[0];
+-						vertices[vertices.length] = vertex[1];
+-						vertices[vertices.length] = vertex[2];
+-						
+-						texcoords[texcoords.length] = 0.0;
+-						texcoords[texcoords.length] = 0.0;
+-						continue;
+-					}
+-					//Scale vertices
+-					xyz = vec3.fromValues(x[i], y[i], z[i]);
+-					magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-					vec3.normalize(direction, xyz);
+-					vec3.scale(vertex, direction, magnitude);
+-					vertices[vertices.length] = vertex[0];
+-					vertices[vertices.length] = vertex[1];
+-					vertices[vertices.length] = vertex[2];
+-				}	
+-				//Transpose data to obtain column addressable data matrix
+-				data = data[0].map(function(col, i) { 
+-					return data.map(function(row) { 
+-						return row[i]
+-					})
+-				});
+-				//Prevent evaluation of datasubarray min/max if caxis exists
+-				if (options.exist('caxis')) {
+-					caxis = options.getfieldvalue('caxis');
+-				}
+-				else {
+-					caxis = [ArrayMin(data[0]),ArrayMax(data[0].slice(0,-1))];
+-				}
+-				if (options.getfieldvalue('log','off')!='off') caxis = [Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log',10)),Math.log10(caxis[1])/Math.log10(options.getfieldvalue('log',10))];
+-				
+-				for(var i = 0; i < data.length; i++){					
+-					datamin = caxis[0];
+-					datamax = caxis[1];
+-					datadelta = datamax - datamin;
+-
+-					//Precalculate arrays for each datasubarray, trimming off timestamp value by using x.length instead of data[i].length
+-					texcoords[i] = [];
+-					texcoords[i].itemSize = 2;
+-					for(var j = 0; j < x.length; j++){
+-						texcoords[i][texcoords[i].length] = 0.5;
+-						texcoords[i][texcoords[i].length] = (data[i][j] - datamin) / datadelta;
+-					}
+-				}
+-				
+-				//linearize the elements array:
+-				var element;
+-				for(var i = 0; i < elements.length; i++){
+-					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+-					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+-					indices[indices.length] = element[0];
+-					indices[indices.length] = element[1];
+-					indices[indices.length] = element[2];
+-				}
+-				indices.itemSize = 1;
+-				
+-				//Initialize movie loop
+-				node["movieInterval"] = 1000 / canvas.moviefps;
+-				node["movieTimestamps"] = timestamps;
+-				node["movieLength"] = timestamps.length;
+-				node["movieFrame"] = 0;
+-			
+-				if (canvas["movieHandler"])	clearInterval(canvas["movieHandler"]);
+-				canvas["movieHandler"] = setInterval(function () {
+-						node["movieFrame"] = canvas["movieFrame"];
+-						if (canvas["moviePlay"] && canvas["movieIncrement"]) {
+-							if (canvas["movieReverse"]) {
+-								node["movieFrame"] = (((node["movieFrame"] - 1) % node["movieLength"]) + node["movieLength"]) % node["movieLength"]; //Handle negative modulus
+-							}
+-							else {
+-								node["movieFrame"] = (((node["movieFrame"] + 1) % node["movieLength"]) + node["movieLength"]) % node["movieLength"]; //Handle negative modulus
+-							}
+-						}
+-						if (canvas["timeLabel"]) {
+-							canvas["timeLabel"].html(node["movieTimestamps"][node["movieFrame"]].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
+-						}
+-						if (canvas["progressBar"]) {
+-							canvas["progressBar"].val(node["movieFrame"]);
+-							canvas["progressBar"].slider('refresh');
+-						}
+-						node["buffers"] = initBuffers(gl,[node["arrays"][0],node["arrays"][1][node["movieFrame"]],node["arrays"][2]]);
+-						canvas["movieFrame"] = node["movieFrame"];
+-					}, node["movieInterval"]);
+-				if (canvas["progressBar"]) {
+-					canvas["movieFrame"] = 0;
+-					canvas["progressBar"].val(0);
+-					canvas["progressBar"].attr('max', node["movieLength"]-1);
+-					canvas["progressBar"].slider('refresh');
+-				}
+-			}
+-			
+-			//Initalize buffers
+-			node["arrays"] = [vertices, texcoords, indices];
+-			node["buffers"] = initBuffers(gl,[node["arrays"][0],node["arrays"][1][0],node["arrays"][2]]);
+-			break;
+-		//}}}
+-		default:
+-			throw Error(sprintf("%s%i%s\n",'case ',datatype,' not supported'));
+-	}
+-}
+-function plot_quiver(md,options,canvas) {
+-	//PLOT_QUIVER - quiver plot with colors
+-	//
+-	//   Usage:
+-	//      plot_quiver(md,options,canvas)
+-	//
+-	//   See also: PLOTMODEL, PLOT_MANAGER
+-
+-	//declare variables:  {{{
+-	var vertices = [];
+-	var indices = [];
+-	var colors = [];
+-	var rgbcolor = [];
+-	var xmin,xmax;
+-	var ymin,ymax;
+-	var zmin,zmax;
+-	var scale,matrixscale,vertexscale;
+-	
+-	//Process data and model
+-	var meshresults = processmesh(md,[],options);
+-	var x = meshresults[0]; 
+-	var y = meshresults[1]; 
+-	var z = meshresults[2]; 
+-	var elements = meshresults[3]; 
+-	var is2d = meshresults[4]; 
+-	var isplanet = meshresults[5];
+-	var v = md.initialization.vel;
+-	var vx = md.initialization.vx;
+-	var vy = md.initialization.vy;
+-		
+-	//Compue scaling through matrices for 2d meshes and vertices for 3d meshes
+-	if (!md.geometry.surface) {
+-		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+-	}
+-	if (md.mesh.classname() == 'mesh3dsurface') {
+-		matrixscale = 1;
+-		vertexscale = options.getfieldvalue('heightscale',1);
+-	}
+-	else {
+-		if (md.geometry.surface) {
+-			z=md.geometry.surface;
+-		}	
+-		matrixscale = options.getfieldvalue('heightscale',1);
+-		vertexscale = 0;
+-	}
+-	//}}}
+-
+-	//Compute coordinates and data range:
+-	var modelxlim = [ArrayMin(x),ArrayMax(x)];
+-	var modelylim = [ArrayMin(y),ArrayMax(y)];
+-	var modelzlim = [ArrayMin(z),ArrayMax(z)];
+-	var xlim = options.getfieldvalue('xlim',modelxlim);
+-	var ylim = options.getfieldvalue('ylim',modelylim);
+-	var zlim = options.getfieldvalue('zlim',modelzlim);
+-	xmin = xlim[0];
+-	xmax = xlim[1];
+-	ymin = ylim[0];
+-	ymax = ylim[1];
+-	zmin = zlim[0];
+-	zmax = zlim[1];
+-
+-	//Compute gl variables:
+-	var gl = canvas.gl;
+-	var node = Node(gl,options);
+-	canvas.nodes[canvas.nodes.length] = node;
+-	scale = 1 / (xmax - xmin);
+-	node["shaderName"] = "colored";
+-	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
+-	node["lineWidth"] = options.getfieldvalue('linewidth',1);
+-	node["scale"] = [scale, scale, scale * matrixscale];
+-	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
+-	node["modelMatrix"] = recalculateModelMatrix(node);
+-	node["drawMode"] = gl.LINES;
+-	node["useIndexBuffer"] = false;
+-	node["drawOrder"] = 0;
+-	node["maskEnabled"] = options.getfieldvalue('innermask','off') == 'on';
+-	node["maskHeight"] = options.getfieldvalue('innermaskheight',150.0)*options.getfieldvalue('heightscale',1);
+-	node["maskColor"] = options.getfieldvalue('innermaskcolor',[0.0,0.0,1.0,1.0]);
+-				
+-	//some defaults:
+-	colors.itemSize = 4;
+-
+-	//retrieve some options
+-	var edgecolor=new RGBColor(options.getfieldvalue('edgecolor','black'));
+-	if (edgecolor.ok) edgecolor = [edgecolor.r/255.0, edgecolor.g/255.0, edgecolor.b/255.0, 1.0];
+-	else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out edgecolor color for curent canvas ",canvas));
+-
+-	//node plot {{{
+-	if (elements[0].length==6){ //prisms
+-	}
+-	else if (elements[0].length==4){ //tetras
+-	}
+-	else{ //2D triangular elements
+-		vertices.itemSize = 3;
+-		var xyz = vec3.create();
+-		var xyz = vec3.create();
+-		var direction = vec3.create();
+-		var vertex = vec3.create();
+-		var vertexBase = vec3.create();
+-		var verticesArrow = [vec3.fromValues(0.0, 0.0, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, -0.167, 0.0), vec3.fromValues(1.0, 0.0, 0.0), vec3.fromValues(0.667, 0.166, 0.0), vec3.fromValues(1.0, 0.0, 0.0)];
+-		var magnitude;
+-		var color = edgecolor;
+-		var scaling = options.getfieldvalue('scaling',1);
+-		var scale;
+-		for(var i = 0; i < x.length; i++){
+-			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+-			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) continue;
+-			//Scale vertices
+-			xyz = vec3.fromValues(x[i], y[i], z[i]);
+-			magnitude = vec3.length(xyz) + md.geometry.surface[i] * vertexscale;
+-			vec3.normalize(direction, xyz);
+-			vec3.scale(vertex, direction, magnitude);
+-			vec3.copy(vertexBase, vertex);
+-			
+-			scale = scaling*v[i];
+-			var modelMatrix = mat4.create();
+-			var scaleMatrix = mat4.create();
+-			var rotationMatrix = mat4.create();
+-			mat4.scale(scaleMatrix, scaleMatrix, vec3.fromValues(scale, scale, scale));
+-			mat4.rotate(rotationMatrix, rotationMatrix, Math.atan2(vy[i], vx[i]), [0.0, 0.0, 1.0]);
+-			mat4.multiply(modelMatrix, rotationMatrix, scaleMatrix);
+-
+-			var temp = vec3.fromValues(0.0, 0.0, 0.0);
+-			for (var j = 0; j < 6; j++){
+-				vec3.transformMat4(vertex, verticesArrow[j], modelMatrix);
+-				vec3.add(vertex, vertex, vertexBase);
+-				vertices[vertices.length] = vertex[0];
+-				vertices[vertices.length] = vertex[1];
+-				vertices[vertices.length] = vertex[2];
+-				
+-				colors[colors.length] = color[0];
+-				colors[colors.length] = color[1];
+-				colors[colors.length] = color[2];
+-				colors[colors.length] = color[3];
+-			}
+-		}
+-	}
+-	//}}}
+-
+-	/*Initalize buffers: */
+-	node["arrays"] = [vertices, colors];
+-	node["buffers"] = initBuffers(gl, node["arrays"]);
+-}
+-function plotdoc() {
+-	//PLOTDOC - plot documentation
+-	//
+-	//   Usage:
+-	//      plotdoc()
+-	
+-	//TODO: Standardize image to overlay_image, heightscale to scaling, colorbarfontsize/color, clarify innermask/outermask, edgecolor implementation, check colormap, 
+-
+-	console.log(' WARNING: starred methods (*) are experimental and not guarenteed to be stable');
+-	console.log('   Plot usage: plotmodel(model,varargin)');
+-	console.log('   Options: ');
+-	console.log('       "canvasid": canvas id');
+-	console.log('       "data" : what we want to plot');
+-	console.log('                Available values for "data" are: ');
+-	console.log('                  - any field of the model structure. ex: plot(md,"data","vel"), or plot(md,"data",md.initialization.vel)');
+-	console.log('                  - "mesh": draw mesh using trisurf');
+-	console.log('                  - "quiver": quiver plot');
+-	console.log('       "caxis": modify  colorbar range. (array of type [a, b] where b>=a)');
+-	console.log('       "backgroundcolor": plot background color. (default "lightcyan", ex: "green","blue")');
+-	console.log('       "colorbar": add colorbar (default "off", ex: "on", "off")');
+-	console.log('       "colorbarid": colorbar canvas id (string)');
+-	console.log('       "colorbartitle": colorbar title (string)');	
+-	console.log('       "colorbarnticks": number of colorbar ticks (default 6, ex: 2, 10)');	
+-	console.log('       "colorbarprecision": colorbar label digit precision (default 3, ex: 1, 4)');	
+-	console.log('       "colorbarorientation": oreintation of colorbar (default "vertical", ex: "horizontal")');
+-	console.log('       "colorbarinnerlabels": choose whether labels are inside colorbar (default "off", ex: "on", "off")');
+-	console.log('       "colorbarfontsize": specify colorbar font size (default 1, ex: 14, 22)');
+-	console.log('       "colorbarfontcolor": specify colorbar font color (default "black", ex: "green","blue")');
+-	console.log('       "colorbarwidth": multiplier (default 1) to the default width colorbar');
+-	console.log('       "colorbarheight": multiplier (default 1) to the default height colorbar');
+-	console.log('       "colormap": same as standard matlab option (default "jet", ex: "hsv","cool","spring","gray","Ala","Rignot",...)');
+-	console.log('       "edgecolor": same as standard matlab option EdgeColor (default "black", ex: color name: "blue" or RGB array: [0.5, 0.2, 0.8])');
+-	console.log('       "view": initial azimuth and elevation angles for camera (default [0,90], ex: [90, 180]');
+-	console.log('       "zoom": initial camera zoom as a percentage of default (default 1, ex: 1.5, 0.01)');
+-	console.log('       "centeroffset": initial camera offset from model center (default [0,0,0.0], ex: [-2, 1.5, 0.01])');
+-	console.log('       "xlim": x coordinates to fit inside camera (ex: [0, 500])');
+-	console.log('       "ylim": y coordinates to fit inside camera (ex: [0, 500])');
+-	console.log('       "zlim": z coordinates to fit inside camera (ex: [0, 500])');
+-	console.log('       "azlim": azimuth view limits (ex: [0, 180])');
+-	console.log('       "ellim": elevation view limits (ex: [-90, 90])');
+-	console.log('       "zoomlim": zoom view limits (ex: [0.05, 10])');
+-	console.log('       "displayview": print view value to console');
+-	console.log('       "displayzoom": print zoom value to console');
+-	console.log('       "controlsensitivity": sensitivty of view/zoom changes as a percentage of default (default 1, ex: 0.5, 2.75)');
+-	console.log('       "2d": renders orthographic camera with view set to [0, 90] (default "off", ex: "on", "off")');
+-	console.log('       "moviefps": frames per second when displaying transient runs (default 5, ex: 1, 10)');
+-	console.log('       "overlay": overlay a radar amplitude image behind (default "off", ex: "on", "off")');
+-	console.log('       "overlay_image": path to overlay image (default "off", ex: "on", "off")');
+-	console.log('       "alpha": transparency coefficient 0.0 to 1.0, the lower, the more transparent. (default 1.0, ex: 0.5, 0.25)');
+-	console.log('       "heightscale": scaling factor to accentuate height. (default 1, ex: 0.5, 100)');
+-	console.log('       "scaling*": scaling factor used by quiver plots. Default is 0.4');
+-	console.log('       "linewidth*": line width for mesh, quiver, and contour plots, currently limited by WebGL to 1. (default 1, ex: 2, 5)');
+-	console.log('       "cloud*": plot a cloud of points, given a flat array of 3d coordinates (ex: [0.0, 0.0, 0.0, 1.0, 1.0, 1.0])');
+-	console.log('       "expdisp*": plot exp file on top of a data plot. provide exp file as an argument (use a cell of strings if more than one)');
+-	console.log('       "textlabels*": plot text labels rendered in 3d space, using an array of text/coordinate pairs (ex: [{"pos":[0.0,0.0,0.0],"text":"origin"}])');
+-	console.log('       "outermask*": Special mask that colors all parts of a overlay mesh below a height a certain color. provide outermaskheight and outermaskcolor options also (default "off", ex: "on", "off")');
+-	console.log('       "innermask*": Special mask that colors all parts of a data mesh below a height a certain color. provide innermaskheight and innermaskcolor options also (default "off", ex: "on", "off")');
+-	console.log('       "mask": list of flags of size numberofnodes or numberofelements. Only "true" values are plotted ');
+-	console.log('       "log": value of log');
+-	console.log('  ');
+-	console.log('   Examples:');
+-	console.log('       plotmodel(md,"data","vel","data","mesh","view#2",3,"colorbar#all","on")');
+-	console.log('       plotmodel(md,"data",md.geomtery.surface)');
+-}function plotmodel(md){
+-
+-	//Convert arguments to array: 
+-	var args = Array.prototype.slice.call(arguments);
+-
+-	//First process options
+-	var  options = new plotoptions(args.slice(1,args.length));
+-
+-	
+-	//get number of subplots
+-	subplotwidth=Math.ceil(Math.sqrt(options.numberofplots)); 
+-	
+-	//Get figure number and number of plots
+-	numberofplots=options.numberofplots;
+-
+-	//if nlines and ncols specified, then bypass.
+-	var nlines,ncols;
+-	if (options.list[0].exist('nlines')){
+-		nlines=options.list[0].getfieldvalue('nlines');
+-	}
+-	else {
+-		nlines=Math.ceil(numberofplots/subplotwidth);
+-	}
+-	if (options.list[0].exist('ncols')){
+-		ncols=options.list[0].getfieldvalue('ncols');
+-	}
+-	else {
+-		ncols=subplotwidth;
+-	}
+-	
+-	//check that nlines and ncols were given at the same time!
+-	if ((options.list[0].exist('ncols') & !options.list[0].exist('nlines')) | (options.list[0].exist('nlines') & !options.list[0].exist('ncols'))) throw Error('plotmodel error message: nlines and ncols  need to be specified together, or not at all');
+-
+-	//go through subplots
+-	if (numberofplots){
+-		//Reinitialize all canvases
+-		for (var i=0;i<numberofplots;i++){
+-			document.getElementById(options.list[i].getfieldvalue('canvasid')).initialized = false;
+-		}
+-		//Go through all data plottable and close window if an error occurs
+-		for (var i=0;i<numberofplots;i++){
+-			plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i);
+-
+-			//List all unused options
+-			options.list[i].displayunused();
+-		}
+-	}
+-}
+-function processdata(md,data,options){
+-	//PROCESSDATA - process data to be plotted
+-	//
+-	//   datatype = 1 -> elements
+-	//   datatype = 2 -> nodes
+-	//   datatype = 3 -> node quivers
+-	//   datatype = 4 -> patch
+-	//   datatype = 5 -> nodes transient
+-	//
+-	//   Usage:
+-	//      var array = processdata(md,data,options);
+-	//      var data = array[0]; 
+-	//      var datatype = array[1];
+-	//
+-	//   See also: PLOTMODEL, PROCESSMESH
+-
+-	//variables: 
+-	var datatype;
+-	
+-	//check format
+-	if ( data.length ==0 | data === [] | typeof data === 'number' | ArrayAnyNaN(data) ){
+-		throw Error('plotmodel error message: data provided is empty');
+-	}
+-
+-	//Process NaN if any (do not know before mask is applied)
+-	if (options.exist('nan')){
+-		var valuefornan=options.getfieldvalue('nan',0);
+-		for (var i=0;i<data.length;i++)if(IsNaN(data[i]))data[i]=valuefornan;
+-	}
+-
+-	//special case for mesh 2dvertical
+-	if (md.mesh.domaintype() === '2Dvertical'){
+-		return processdata(md.mesh,md,data,options);
+-	}
+-
+-	//needed later on
+-	if ('numberofvertices2d' in md.mesh){
+-		numberofvertices2d=md.mesh.numberofvertices2d; 
+-		numberofelements2d=md.mesh.numberofelements2d; 
+-	}
+-	else {
+-		numberofvertices2d=NaN;
+-		numberofelements2d=NaN;
+-	}
+-
+-	//initialize datatype
+-	datatype=0;
+-
+-	//get datasize
+-	datasize=data.length;
+-
+-	//transpose data if necessary
+-	if (data[0].length > data.length){
+-		throw Error('processdata error message: you need to tranpose your data!');
+-	}
+-
+-
+-	//check length
+-	if (datasize != md.mesh.numberofvertices & datasize !=md.mesh.numberofelements & datasize!=md.mesh.numberofvertices*6 & 
+-			((md.mesh.domaintype() === '3D') & !(datasize==numberofelements2d | datasize==numberofvertices2d))){
+-		throw Error('plotmodel error message: data not supported yet');
+-	}
+-
+-
+-	//quiver?
+-	if (data[0].length>1){
+-		datatype=3;
+-
+-		//check number of columns, add zeros if necessary,
+-		if (md.mesh.dimension()==3){
+-			if (data[0].length==2){
+-				data=[data, NewArrayFill(data.length,1)];
+-			}
+-			else if (data[0].length!=3){
+-				throw Error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
+-			}
+-		}
+-	}
+-
+-	//treat the case datasize(1)=6*nodes
+-	if (datasize==6*md.mesh.numberofvertices){
+-		//keep the only norm of data
+-		data1=new Array(md.mesh.numberofvertices);
+-		data2=new Array(md.mesh.numberofvertices);
+-		data=new Array(md.mesh.numberofvertices);
+-		for(var i=0;i<md.mesh.numberofvertices;i++){
+-			data1[i]=data[6*i+0];
+-			data2[i]=data[6*i+1];
+-			data[i]=Math.sqrt(pow(data1[i],2),pow(data2[i],2));
+-		}
+-		datasize=md.mesh.numberofvertices;
+-		//---> go to node data
+-	}
+-
+-	//treat the case datasize(1)=nodes2d
+-	if (md.mesh.dimension()==3 & datasize==numberofvertices2d){
+-		data=project3d(md,'vector',data,'type','node');
+-		datasize=md.mesh.numberofvertices;
+-		//---> go to node data
+-	}
+-
+-	//treat the case datasize=nodes2d
+-	if (md.mesh.dimension()==3 & datasize==numberofelements2d){
+-		data=project3d(md,'vector',data,'type','element');
+-		datasize=md.mesh.numberofelements;
+-		//---> go to node data
+-	}
+-
+-	//smoothing?
+-	if (options.exist('smooth')){
+-		data=averaging(md,data,options.getfieldvalue('smooth'));
+-		datasize=md.mesh.numberofvertices;
+-		//---> go to node data
+-	}
+-
+-	//element data
+-	if (datasize==md.mesh.numberofelements & data[0].length==1){
+-
+-		//Initialize datatype if non patch
+-		if(datatype!=4 & datatype!=5){
+-			datatype=1;
+-		}
+-
+-		//Mask?
+-		if(options.exist('mask')){
+-			flags=options.getfieldvalue('mask');
+-			if(flags.length==md.mesh.numberofvertices){
+-				for(var i=0;i<md.mesh.numberofelements;i++){
+-					var nanify=0;
+-					for(var j=0;j<md.mesh.elements[0].length;j++){
+-						if (flags[md.mesh.elements[i][j]-1]==0)nanify=1;
+-					}
+-					if(nanify) for(var j=0;j<md.mesh.elements[0].length;j++)data[md.mesh.elements[i][j]-1]=NaN;
+-				}
+-			}
+-			else if (flags.length==md.mesh.numberofelements){
+-				for(var i=0;i<md.mesh.numberofelements;i++)if (flags[i]==0)data[i]=NaN;
+-			}
+-			else{
+-				console.log('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements)');
+-			}
+-		}
+-
+-		//log?
+-		if (options.getfieldvalue('log','off')!='off'){
+-			var bounds=options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+-			for(var i=0;i<md.mesh.numberofelements;i++)if(data[i]<bounds[0])data[i]=bounds[0];
+-			for(var i=0;i<md.mesh.numberofelements;i++)if(data[i]<=0){
+-				throw Error("Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])");
+-			}
+-			for(var i=0;i<md.mesh.numberofelements;i++){
+-				if(!IsNaN(data[i])){
+-					data[i]=Math.log10(data[i])/Math.log10(options.getfieldvalue('log',10));
+-				}
+-			}
+-		}
+-	}
+-
+-	//node data
+-	if (datasize==md.mesh.numberofvertices){
+-		datatype=2;
+-
+-		//Mask?
+-		if (options.exist('mask')){
+-			flags=options.getfieldvalue('mask');
+-			if (flags.length==md.mesh.numberofvertices){
+-				for(var i=0;i<md.mesh.numberofvertices;i++){
+-					if(flags[i]==0)data[i]=NaN;
+-				}
+-			}
+-			else if( length(flags)==md.mesh.numberofelements){
+-				for(var i=0;i<md.mesh.numberofelements;i++){
+-					if(flags[i]==0){
+-						for(var j=0;j<md.mesh.elements[0].length;j++){
+-							data[md.mesh.elements[i][j]-1]=NaN;
+-						}
+-					}
+-				}
+-			}
+-			else{
+-				console.log("plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements");
+-			}
+-		}
+-
+-		//log?
+-		if (options.getfieldvalue('log','off')!='off'){
+-			var bounds=options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+-			for(var i=0;i<md.mesh.numberofvertices;i++)if(data[i]<bounds[0])data[i]=bounds[0];
+-			for(var i=0;i<md.mesh.numberofvertices;i++)if(data[i]>bounds[1])data[i]=bounds[1];
+-			for(var i=0;i<md.mesh.numberofvertices;i++)if(data[i]<=0){
+-				throw Error("Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])");
+-			}
+-			for(var i=0;i<md.mesh.numberofvertices;i++){
+-			   data[i]=Math.log10(data[i])/Math.log10(options.getfieldvalue('log',10));
+-			}
+-		}
+-	}
+-	
+-	//node transient data
+-    if (datasize==md.mesh.numberofvertices+1){
+-        datatype=5;
+-		
+-		//log?	
+-		if (options.getfieldvalue('log','off')!='off'){
+-			var bounds=options.getfieldvalue('caxis',[ArrayMin(data),ArrayMax(data)]);
+-			for(var i=0;i<md.mesh.numberofvertices;i++) {
+-				for(var j=0;j<data[i].length;j++) {
+-					if(data[i][j]<bounds[0])data[i][j]=bounds[0];
+-				}
+-			}
+-			for(var i=0;i<md.mesh.numberofvertices;i++) {
+-				for(var j=0;j<data[i].length;j++) {
+-					if(data[i][j]>bounds[1])data[i][j]=bounds[1];
+-				}
+-			}
+-			for(var i=0;i<md.mesh.numberofvertices;i++) {
+-				for(var j=0;j<data[i].length;j++) {
+-					if(data[i][j]<=0) {
+-						throw Error("Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])");
+-					}
+-				}
+-			}
+-			for(var i=0;i<md.mesh.numberofvertices;i++){
+-				for(var j=0;j<data[i].length;j++) {
+-					data[i][j]=Math.log10(data[i][j])/Math.log10(options.getfieldvalue('log',10));
+-				}
+-			}
+-		}
+-    }
+-	
+-
+-	//layer projection? 
+-	if (options.getfieldvalue('layer',0)>=1){
+-		data=project2d(md,data,options.getfieldvalue('layer')); //project onto 2d mesh
+-	}
+-
+-	//control arrow density if quiverplot: not done yet since conversion of matlab to javascript.
+-	/*if (datatype==3 & options.exist('density')){
+-		databak=data;
+-		data=NewArrayFill(datasize,NaN);
+-
+-		density=options.getfieldvalue('density');
+-		data(1:density:end,:)=databak(1:density:end,:);
+-		clear databak
+-	}*/
+-
+-	/*if (datatype==3){ //not done yet
+-		//Mask?
+-		if (options.exist('mask')){
+-			flags=options.getfieldvalue('mask');
+-			pos=find(~flags);
+-			if (flags.length==md.mesh.numberofvertices){
+-			   data(pos,:)=NaN;
+-			}
+-			else if (flags.length==md.mesh.numberofelements){
+-				data(md.mesh.elements(pos,:),:)=NaN;
+-			}
+-			else{
+-				console.log("plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements");
+-			}
+-		}
+-	}*/
+-
+-	//OK, if datatype=0 error out
+-	if (datatype==0){
+-	   throw Error('data provided not recognized or not supported');
+-	}
+-
+-	return [data,datatype];
+-}
+-function processmesh(md,data,options){
+-//PROCESSMESH - process mesh to be plotted
+-//
+-//   Usage:
+-//      var meshresults=processmesh(md,data,options)
+-//      var x=meshresults[0]; 
+-//      var y=meshresults[1]; 
+-//      var z=meshresults[2]; 
+-//      var elements=meshresults[3]; 
+-//      var is2d=meshresults[4]; 
+-//      var isplanet=meshresults[5]; 
+-//
+-//   See also: PLOTMODEL, PROCESSDATA
+-
+-	var x,y,z,elements,is2d,isplanet;
+-
+-	if (md.mesh.numberofvertices==0){
+-		throw Error('plot error message: mesh is empty');
+-	}
+-
+-
+-	if (md.mesh.numberofvertices==md.mesh.numberofelements){
+-		throw Error(['plot error message: the number of elements is the same as the number of nodes...']);
+-	}
+-
+-	if (options.getfieldvalue('coord','xy') !== 'latlon'){
+-		x=md.mesh.x.slice();
+-		if ('x2d' in md.mesh) x2d=md.mesh.x2d.slice();
+-		y=md.mesh.y.slice();
+-		if ('y2d' in md.mesh) y2d=md.mesh.y2d.slice();
+-	}
+-	else{
+-		x=md.mesh.long.slice();
+-		y=md.mesh.lat.slice();
+-	}
+-
+-	if ('z' in md.mesh){
+-		z=md.mesh.z.slice();
+-	}
+-	else{
+-		z=NewArrayFill(x.length,0);
+-	}
+-	z=options.getfieldvalue('z',z);
+-	if (typeof z === 'string'){
+-		z=md[z];
+-	}
+-	
+-	//TODO: Make deep copy of elements array to prevent unwanted modification of model (slice creates deep copies for primitive types, shallow copies for obejcts)
+-	if ('elements2d' in md.mesh) elements2d=md.mesh.elements2d.slice();
+-	elements=md.mesh.elements.slice();
+-
+-	//is it a 2d plot?
+-	if (md.mesh.dimension()==2){
+-		is2d=1;
+-	}
+-	else{
+-		if (options.getfieldvalue('layer',0)>=1){
+-			is2d=1;
+-		}
+-		else{
+-			is2d=0;
+-		}
+-	}
+-
+-	//layer projection? 
+-	if (options.getfieldvalue('layer',0)>=1){
+-		if (options.getfieldvalue('coord','xy') === 'latlon'){
+-			throw Error('processmesh error message: cannot work with 3D meshes for now');
+-		}
+-		
+-		//we modify the mesh temporarily to a 2d mesh from which the 3d mesh was extruded. 
+-		x=x2d;
+-		y=y2d;
+-		z=NewArrayFill(x2d.length,0);
+-		elements=elements2d;
+-	}
+-
+-	//units
+-	if (options.exist('unit')){
+-		unit=options.getfieldvalue('unit');
+-		x=x*unit;
+-		y=y*unit;
+-		z=z*unit;
+-	}
+-
+-	//for now, always isplanet = 0, as we don't have the isa capability: 
+-	//if isa(md,'planet'),
+-	//	isplanet=1;
+-	//else
+-	isplanet=0;
+-	//end
+-
+-	return  [x,y,z,elements,is2d,isplanet];
+-}
+-function gauge() {
+-	//GAGUE - create a gague and label that display a value with unit label
+-	//
+-	//   Usage:
+-	//      gaugeslr = gauge('gaugediv','slr-controldiv','label','m');
+-	
+-	//Convert arguments to options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args);
+-
+-	gaugecanvas = options.getfieldvalue('gaugecanvas','gauge');
+-	gaugetext = options.getfieldvalue('gaugetext','gauge-text');
+-	gaugediv = options.getfieldvalue('gaugediv','slr-controldiv');
+-	gaugevalue = options.getfieldvalue('value',0);
+-	min = options.getfieldvalue('min',0);
+-	max = options.getfieldvalue('max',22);
+-	colors = options.getfieldvalue('colors',[[0.0, "#000000" ], [0.50, "#880000"], [1.0, "#ff0000"]]);
+-	label = options.getfieldvalue('label','');
+-	
+-	$('<div class="bordered margin-8 padding-8"><canvas id="'+gaugecanvas+'" width="100px" height="50%" class="gauge-canvas"></canvas><div id="'+gaugetext+'" class="gauge-text"></div></div>').appendTo('#'+gaugediv);
+-	
+-	var opts = {
+-		lines: 12, // The number of lines to draw
+-		angle: 0, // The length of each line
+-		lineWidth: 0.38, // The line thickness
+-		pointer: {
+-			length: 0, // The radius of the inner circle
+-			strokeWidth: 0, // The rotation offset
+-			color: '#000000' // Fill color
+-		},
+-		limitMax: 'false',   // If true, the pointer will not go past the end of the gauge
+-		colorStart: '#6F6EA0',   // Colors
+-		colorStop: '#C0C0DB',    // just experiment with them
+-		strokeColor: '#EEEEEE',   // to see which ones work best for you
+-		percentColors: colors,
+-		generateGradient: true
+-	};
+-	var target = document.getElementById(gaugecanvas)
+-	var gauge = new Gauge(target).setOptions(opts);
+-	gauge.setTextField(document.getElementById(gaugetext));
+-	gauge.label = label;
+-	gauge.textField.render = function(gauge) {
+-      return this.el.innerHTML = gauge.displayedValue.toFixed(0) + ' ' + gauge.label;
+-    };
+-	gauge.minValue = min;
+-	gauge.maxValue = max;
+-	gauge.animationSpeed = 1;
+-	gauge.set(1); // set once to initialize?
+-	gauge.set(gaugevalue); // set actual value
+-	
+-	return gauge;
+-}
+-/*This is where we have all our webgl relevant functionality for the plotting routines: */
+-//{{{ Canvas Initialization
+-function initCanvas(options) {
+-	//Initialize open Gl for each canvas, if needed: 
+-	var canvas=document.getElementById(options.getfieldvalue('canvasid'));
+-	if (!canvas.initialized) {
+-		canvas.gl = initWebGL(canvas,options);
+-		canvas.nodes = [];
+-		if (canvas.drawHandler)	window.cancelAnimationFrame(canvas.drawHandler);
+-		draw(canvas,options);
+-		canvas.initialized = true;
+-	}
+-	return canvas;
+-}
+-function initWebGL(canvas,options) { //{{{
+-	var gl;
+-
+-	try {
+-		// Try to grab the standard context. If it fails, fallback to experimental.
+-		gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
+-	}
+-	catch(e) {}
+-
+-	// If we don't have a GL context, give up now
+-	if (!gl) {
+-		alert("Unable to initialize WebGL. Your browser may not support it.");
+-	}
+-		
+-	// Enable depth testing
+-	gl.enable(gl.DEPTH_TEST);
+-	// Near things obscure far things
+-	gl.depthFunc(gl.LEQUAL);
+-	// Clear the color as well as the depth buffer.
+-	gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+-	// Enable color blending/overlay
+-	gl.enable(gl.BLEND);
+-
+-	// Allocate arrays equal to maximium number of attributes used by any one shader
+-	gl.enableVertexAttribArray(0);
+-	gl.enableVertexAttribArray(1);
+-
+-	// Load shaders and store them in gl object
+-	gl.shaders = loadShaders(gl);
+-	
+-	// Add context state variables
+-	//TODO:Group variables in objects for organization and naming
+-	canvas.gl = gl;
+-	canvas.zoomBounds = options.getfieldvalue('zoomlim',[0.001,100.0]);
+-	canvas.zoom = clamp(options.getfieldvalue('zoom',1.0), canvas.zoomBounds[0], canvas.zoomBounds[1]);
+-	canvas.zoomLast = canvas.zoom;
+-	canvas.cameraMatrix = mat4.create();
+-	canvas.translation = options.getfieldvalue('origin',[0,0,0.0]);
+-	canvas.rotationAzimuthBounds = options.getfieldvalue('azlim',[0,360]);
+-	canvas.rotationElevationBounds = options.getfieldvalue('ellim',[-180,180]);
+-	canvas.view = options.getfieldvalue('view',[0,90]); //0 azimuth - up is north, 90 elevation - looking straight down
+-	canvas.rotation = canvas.view;
+-	canvas.controlsensitivity = options.getfieldvalue('controlsensitivity',1);
+-	canvas.twod = options.getfieldvalue('2d','off') == 'on';
+-	canvas.moviePlay = true;
+-	canvas.movieReverse = false;
+-	canvas.movieIncrement = true;
+-	canvas.moviefps = options.getfieldvalue('moviefps',5);
+-	
+-	// Add event listeners for canvas
+-	var displayview = options.getfieldvalue('displayview','off') == 'on';
+-	var displayzoom = options.getfieldvalue('displayzoom','off') == 'on';
+-	var mc = new Hammer.Manager(canvas);
+-	
+-    mc.add(new Hammer.Pan({threshold:0, pointers:0}));
+-    mc.add(new Hammer.Pinch({threshold:0})).recognizeWith(mc.get('pan'));
+-    mc.on("panstart panmove", function (ev) {onPan(ev,canvas,displayview);});
+-    mc.on("pinchstart pinchmove", function (ev) {onPinch(ev,canvas,displayview);});
+-	//mc.on("mousewheel DOMMouseScroll", function (ev) {onZoom(ev,canvas,options);});
+-	
+-	canvas.addEventListener("mousewheel", function (ev) {onZoom(ev,canvas,displayzoom)}, false);
+-	canvas.addEventListener("DOMMouseScroll", function (ev) {onZoom(ev,canvas,displayzoom)}, false);
+-	
+-	return gl;
+-} //}}}
+-function initBuffers(gl,arrays) { //{{{	
+-	var bufferArray = [];
+-	for (var i = 0; i < arrays.length; i++) {
+-		bufferArray[i] = gl.createBuffer();	
+-		bufferArray[i].itemSize = arrays[i].itemSize;
+-		bufferArray[i].numItems = arrays[i].length/bufferArray[i].itemSize;
+-		
+-		if (bufferArray[i].itemSize > 1) {
+-			gl.bindBuffer(gl.ARRAY_BUFFER, bufferArray[i]);
+-			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(arrays[i]), gl.STATIC_DRAW);
+-		}
+-		else {
+-			//TODO: identify index buffers uniquely (by name)
+-			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, bufferArray[i]);
+-			gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(arrays[i]), gl.STATIC_DRAW);
+-		}
+-	}	
+-	return bufferArray;
+-} //}}}
+-function initTexture(gl,imageSource) { //{{{
+-	var texture = gl.createTexture();
+-	texture.image = new Image();
+-	texture.isLoaded = false;
+-	texture.image.onload = function () {
+-		handleLoadedTexture(gl,texture);
+-	}
+-	texture.image.src = imageSource;
+-	return texture;
+-} //}}}
+-function handleLoadedTexture(gl,texture) { //{{{
+-	gl.activeTexture(gl.TEXTURE0);
+-	gl.bindTexture(gl.TEXTURE_2D, texture);
+-	gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
+-	gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+-	gl.generateMipmap(gl.TEXTURE_2D);
+-	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR);
+-	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+-	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+-	gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+-	gl.bindTexture(gl.TEXTURE_2D, null);
+-	texture.isLoaded = true;
+-} //}}}
+-function Node(gl,options) { //{{{
+-	//Returns a Node object that contains default display states for webgl object
+-	return {buffers:[],
+-		shader:gl.shaders["colored"]["program"],
+-		draw:null,
+-		hideOcean:false,
+-		level:0,
+-		useIndexBuffer:true,
+-		alpha:1.0,
+-		lineWidth:1.0,
+-		disableDepthTest:false, 
+-		enableCullFace:false,
+-		cullFace:gl.FRONT,
+-		drawMode:gl.TRIANGLES,
+-		texture:null,
+-		translation:vec3.create(),
+-		rotation:vec3.fromValues(-90, 0, 0),
+-		scale:vec3.fromValues(1, 1, 1),
+-		modelMatrix:mat4.create(),
+-		shaderName:"colored",
+-		drawOrder:0,
+-		maskEnabled:false,
+-		maskHeight:150.0,
+-		maskColor:vec4.fromValues(0.0, 0.0, 1.0, 1.0),
+-		enabled:true,
+-	};
+-} //}}}
+-function recalculateModelMatrix(node) { //{{{
+-	//TODO: move to 0,0,0, rotate,move back to normal space, then apply transform
+-	var modelMatrix = mat4.create();
+-
+-	var scaleMatrix = mat4.create();
+-	mat4.scale(scaleMatrix, scaleMatrix, node["scale"]);
+-	mat4.multiply(modelMatrix, scaleMatrix, modelMatrix);
+-
+-	var translationMatrix = mat4.create();
+-	mat4.translate(translationMatrix, translationMatrix, node["translation"]); //relative translation
+-	mat4.multiply(modelMatrix, translationMatrix, modelMatrix);
+-	
+-	var zRotationMatrix = mat4.create();	
+-	mat4.rotate(zRotationMatrix, zRotationMatrix, radians(node["rotation"][2]), [0.0, 0.0, 1.0]);
+-	mat4.multiply(modelMatrix, zRotationMatrix, modelMatrix);
+-	var yRotationMatrix = mat4.create();	
+-	mat4.rotate(yRotationMatrix, yRotationMatrix, radians(node["rotation"][1]), [0.0, 1.0, 0.0]);
+-	mat4.multiply(modelMatrix, yRotationMatrix, modelMatrix);
+-	var xRotationMatrix = mat4.create();	
+-	mat4.rotate(xRotationMatrix, xRotationMatrix, radians(node["rotation"][0]), [1.0, 0.0, 0.0]);
+-	mat4.multiply(modelMatrix, xRotationMatrix, modelMatrix);
+-
+-	return modelMatrix;
+-} //}}}
+-function radians (degrees) { //{{{
+-  return degrees * Math.PI / 180;
+-} //}}}
+-function degrees (radians) { //{{{
+-  return radians * 180 / Math.PI;
+-} //}}}
+-function clamp(value, min, max) { //{{{
+-	return Math.max(min, Math.min(value, max));
+-} //}}}
+-function recover(canvasid,name,defaultvalue) { //{{{
+-	var canvas  = document.getElementById(canvasid);
+-	if (canvas && canvas.hasOwnProperty(name)) {
+-		return canvas[name];
+-	}
+-	return defaultvalue;
+-} //}}}
+-//}}}
+-//{{{ Shader Loading
+-function loadShaders(gl) { //{{{
+-	var shaderNames = ["colored", "unlit_textured"];
+-	shaders = {};
+-	shaders["colored"] = {loaded:false, vsh:{}, fsh:{}};
+-	shaders["colored"]["vsh"]["string"] = 
+-		['attribute vec3 aVertexPosition;',
+-		'attribute vec4 aVertexColor;',
+-		'',
+-		'uniform mat4 uMVPMatrix;',
+-		'uniform float uAlpha;',
+-		'',
+-		'varying vec4 vColor;',
+-		'',
+-		'void main(void) {',
+-		'	gl_PointSize = 3.0;',
+-		'	gl_Position = uMVPMatrix * vec4(aVertexPosition.xyz, 1.0);',
+-		'	vColor = vec4(aVertexColor.xyz, uAlpha);',
+-		'}'].join('\n');
+-	shaders["colored"]["fsh"]["string"] =
+-		['precision mediump float;',
+-		'',
+-		'varying vec4 vColor;',
+-		'',
+-		'void main(void) {',
+-		'	gl_FragColor = vColor;',
+-		'}'].join('\n');
+-	shaders["unlit_textured"] = {loaded:false, vsh:{}, fsh:{}};
+-	shaders["unlit_textured"]["vsh"]["string"] = 
+-		['attribute vec3 aVertexPosition;',
+-		'attribute vec2 aTextureCoord;',
+-		'',
+-		'uniform mat4 uMVPMatrix;',
+-		'',
+-		'varying vec2 vTextureCoord;',
+-		'varying float vZCoord;',
+-		'',
+-		'void main(void) {',
+-		'	gl_PointSize = 3.0;',
+-		'	gl_Position = uMVPMatrix * vec4(aVertexPosition.xyz, 1.0);',
+-		'	vTextureCoord = aTextureCoord;',
+-		'	vZCoord = aVertexPosition.z;',
+-		'}'].join('\n');
+-	shaders["unlit_textured"]["fsh"]["string"] =
+-		['precision mediump float;',
+-		'',
+-		'varying vec2 vTextureCoord;',
+-		'varying float vZCoord;',
+-		'',
+-		'uniform sampler2D uColorSampler;',
+-		'uniform float uAlpha;',
+-		'uniform bool uMaskEnabled;',
+-		'uniform float uMaskHeight;',
+-		'uniform vec4 uMaskColor;',
+-		'',
+-		'void main(void) {',
+-		'	if (uMaskEnabled && (vZCoord < uMaskHeight)) {',
+-		'		gl_FragColor = vec4(uMaskColor.xyz, uAlpha);',
+-		'	}',
+-		'	else {',
+-		'		gl_FragColor = vec4(texture2D(uColorSampler, vec2(vTextureCoord.s, vTextureCoord.t)).rgb, uAlpha);',
+-		'	}',
+-		'}'].join('\n');
+-	shaderNames.forEach(function(shaderName){
+-		shaders[shaderName]["vsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["vsh"]["string"], "vsh");
+-		shaders[shaderName]["fsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["fsh"]["string"], "fsh");
+-
+-		shaders[shaderName]["program"] = gl.createProgram();
+-		gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["vsh"]["shader"]);
+-		gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["fsh"]["shader"]);
+-		gl.linkProgram(shaders[shaderName]["program"]);
+-
+-		if (!gl.getProgramParameter(shaders[shaderName]["program"], gl.LINK_STATUS)) {
+-			alert("Could not initialise shaders");
+-		}
+-
+-		var vshStringArray = shaders[shaderName]["vsh"]["string"].split("\n");
+-		var fshStringArray = shaders[shaderName]["fsh"]["string"].split("\n");
+-		var line = "";
+-		var property = "";
+-		for (var i = 0; i < vshStringArray.length; i++) {
+-			line = vshStringArray[i];
+-			if (line.search("attribute") != -1) {
+-				property = nameFromLine(line);
+-				shaders[shaderName]["program"][property] = gl.getAttribLocation(shaders[shaderName]["program"], property);
+-			}
+-			else if (line.search("uniform") != -1) {
+-				property = nameFromLine(line);
+-				shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property);
+-			}
+-			else if (line.search("void main") != -1) {
+-				break;
+-			}
+-		}
+-		for (var i = 0; i < fshStringArray.length; i++) {
+-			line = fshStringArray[i];
+-			if (line.search("uniform") != -1) {
+-				property = nameFromLine(line);
+-				shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property);
+-			}
+-			else if (line.search("void main") != -1) {
+-				break;
+-			}
+-		}
+-		shaders[shaderName]["loaded"] = true;
+-	});
+-	return shaders;
+-} //}}}
+-function getShaderByString(gl,str,type) { //{{{
+-	var shader;
+-	if (type == "fsh") {
+-		shader = gl.createShader(gl.FRAGMENT_SHADER);
+-	}
+-	else if (type == "vsh") {
+-		shader = gl.createShader(gl.VERTEX_SHADER);
+-	}
+-	else {
+-		return null;
+-	}
+-	
+-	gl.shaderSource(shader, str);
+-	gl.compileShader(shader);
+-
+-	if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {	
+-		alert(gl.getShaderInfoLog(shader));
+-		return null;
+-	}
+-
+-	return shader;
+-} //}}}
+-function nameFromLine(line) { //{{{
+-	//returns lowerCamelCase property name from shader line
+-	var fullName = line.split(" ")[2];
+-	return fullName.slice(0, fullName.search(";"));
+-} //}}}
+-//}}}
+-//{{{ Interface Functions
+-function onPan(ev,canvas,displaylog) { //{{{
+-	ev.preventDefault();
+-	if (ev.type == 'panstart') {
+-		canvas.lastDeltaX = 0;
+-		canvas.lastDeltaY = 0;
+-	}
+-	if (ev.srcEvent.shiftKey || ev.pointers.length == 2) {
+-		var deltaX = (canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoom * -2 * canvas.controlsensitivity;
+-		var deltaY = (canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoom * -2 * canvas.controlsensitivity;
+-		
+-		if (canvas.twod) {
+-			canvas.translation[0] += Math.cos(radians(canvas.rotation[0])) * deltaX - Math.sin(radians(0)) * deltaY;
+-			canvas.translation[1] += Math.sin(radians(canvas.rotation[0])) * deltaX + Math.cos(radians(0)) * deltaY;
+-		}
+-		else {
+-			canvas.translation[0] += Math.cos(radians(canvas.rotation[0])) * deltaX - Math.sin(radians(canvas.rotation[0])) * deltaY;
+-			canvas.translation[1] += Math.sin(radians(canvas.rotation[0])) * deltaX + Math.cos(radians(canvas.rotation[0])) * deltaY;
+-		}
+-	}
+-	else {
+-		canvas.rotation[0] += degrees((canvas.lastDeltaX - ev.deltaX) / canvas.clientWidth / canvas.zoom * -2 * canvas.controlsensitivity);
+-		canvas.rotation[1] += degrees((canvas.lastDeltaY - ev.deltaY) / canvas.clientHeight / canvas.zoom * -2 * canvas.controlsensitivity);
+-		
+-		if (canvas.rotation[0] > 360) {canvas.rotation[0] -= 360};
+-		if (canvas.rotation[0] < -360) {canvas.rotation[0] += 360};
+-		if (canvas.rotation[1] > 180) {canvas.rotation[1] -= 360};
+-		if (canvas.rotation[1] < -180) {canvas.rotation[1] += 360};
+-		
+-		canvas.rotation[0] = clamp(canvas.rotation[0], canvas.rotationAzimuthBounds[0], canvas.rotationAzimuthBounds[1]);
+-		canvas.rotation[1] = clamp(canvas.rotation[1], canvas.rotationElevationBounds[0], canvas.rotationElevationBounds[1])
+-	}
+-	canvas.lastDeltaX = ev.deltaX;
+-	canvas.lastDeltaY = ev.deltaY;
+-	
+-	if (displaylog) console.log(canvas.rotation);
+-} //}}}
+-function onPinch(ev,canvas,displaylog) { //{{{
+-	ev.preventDefault();
+-	if (ev.type == 'pinchstart') {
+-		canvas.zoomLast = canvas.zoom;
+-	}
+-	else {
+-		canvas.zoom = clamp(ev.scale * canvas.zoomLast, canvas.zoomBounds[0], canvas.zoomBounds[1]);
+-		if (displaylog) console.log(canvas.zoom);
+-	}
+-} //}}}
+-function onZoom(ev,canvas,displaylog) { //{{{
+-	ev.preventDefault();
+-	var delta = clamp(clamp(ev.scale || ev.wheelDelta || -ev.detail, -1, 1) * canvas.controlsensitivity * canvas.zoom / 20, -1.0, 1.0);
+-	canvas.zoom = clamp(canvas.zoom + delta, canvas.zoomBounds[0], canvas.zoomBounds[1]);
+-	
+-	if (displaylog) console.log(canvas.zoom);
+-} //}}}
+-//}}}
+-//{{{ Drawing Functions
+-function updateCameraMatrix(canvas) { //{{{
+-    //Update view matrix and multiply with projection matrix to get the view-projection (camera) matrix.
+-	var vMatrix = mat4.create();
+-	var pMatrix = mat4.create();
+-	var translateMatrix = mat4.create();
+-	var rotationMatrix = mat4.create();
+-	var azimuthRotationMatrix = mat4.create();
+-	var elevationRotationMatrix = mat4.create();
+-	var aspectRatio = canvas.clientWidth / canvas.clientHeight;
+-
+-	if (canvas.twod) {
+-		mat4.ortho(pMatrix, -aspectRatio/canvas.zoom, aspectRatio/canvas.zoom, -1/canvas.zoom, 1/canvas.zoom, -1.0, 10000.0);
+-	}
+-	else {
+-		mat4.perspective(pMatrix, 60 * Math.PI / 180, aspectRatio, 0.001, 10000.0);
+-	}
+-	
+-	//Apply worldspace translation
+-	mat4.translate(translateMatrix, translateMatrix, [canvas.translation[0], canvas.translation[2], canvas.translation[1]]);
+-	mat4.multiply(vMatrix, translateMatrix, vMatrix);
+-	
+-	//Calculate rotation around camera focal point about worldspace origin
+-	if (canvas.twod) {
+-		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, radians(0), [0, 1, 0]);
+-		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, radians(90), [1, 0, 0]);
+-		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
+-	}
+-	else {
+-		mat4.rotate(azimuthRotationMatrix, azimuthRotationMatrix, radians(canvas.rotation[0]), [0, 1, 0]);
+-		mat4.rotate(elevationRotationMatrix, elevationRotationMatrix, radians(canvas.rotation[1]), [1, 0, 0]);
+-		mat4.multiply(rotationMatrix, elevationRotationMatrix, azimuthRotationMatrix);
+-	}
+-	
+-	//Apply rotation and scaling transform
+-	mat4.multiply(vMatrix, rotationMatrix, vMatrix);
+-	
+-	//Apply screenspace translation
+-	mat4.identity(translateMatrix);
+-	mat4.translate(translateMatrix, translateMatrix, [0.0, 0.0, -1/canvas.zoom]);
+-	mat4.multiply(vMatrix, translateMatrix, vMatrix);
+-
+-	//Apply projection matrix to get camera matrix
+-	mat4.multiply(canvas.cameraMatrix, pMatrix, vMatrix);
+-}//}}}
+-function drawSceneGraphNode(canvas,node) { //{{{
+-	if (!node["enabled"]) {
+-		return;
+-	}
+-	if (node["texture"]) {
+-		if (!node["texture"]["isLoaded"]) {
+-			return;
+-		}
+-	}
+-	var gl = canvas.gl;
+-	bindAttributes(gl, node["shader"], node["buffers"]);
+-	var mvpMatrix = mat4.create();
+-	mat4.multiply(mvpMatrix, canvas.cameraMatrix, node["modelMatrix"]);
+-	gl.uniformMatrix4fv(node["shader"]["uMVPMatrix"], false, mvpMatrix);
+-	gl.uniform1f(node["shader"]["uAlpha"], node["alpha"]);
+-	gl.uniform1i(node["shader"]["uMaskEnabled"], node["maskEnabled"]);
+-	gl.uniform1f(node["shader"]["uMaskHeight"], node["maskHeight"]);
+-	gl.uniform4fv(node["shader"]["uMaskColor"], node["maskColor"]);
+-	if (node["texture"]) {
+-		gl.activeTexture(gl.TEXTURE0);
+-		gl.bindTexture(gl.TEXTURE_2D, node["texture"]);
+-		gl.uniform1i(node["shader"]["uColorSampler"], 0);	
+-	}
+-	if (node["disableDepthTest"]) {
+-		gl.disable(gl.DEPTH_TEST);
+-	}
+-	gl.lineWidth(node["lineWidth"]);
+-	gl.blendFunc (gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+-	if  (node["useIndexBuffer"] == true) {
+-		gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, node["buffers"][node["buffers"].length - 1]);
+-		gl.drawElements(node["drawMode"], node["buffers"][node["buffers"].length - 1].numItems, gl.UNSIGNED_SHORT, 0);
+-	}
+-	else {
+-		gl.drawArrays(node["drawMode"], 0, node["buffers"][0].numItems);
+-	}	
+-	gl.enable(gl.DEPTH_TEST);
+-} //}}}
+-function bindAttributes(gl,shaderProgram,bufferArray) { //{{{
+-	gl.useProgram(shaderProgram);
+-	var arrayNumber = 0;
+-	for (var propertyName in shaderProgram) {
+-		if (propertyName[0] == "a") {
+-			if (bufferArray[arrayNumber].itemSize > 1) {
+-				gl.bindBuffer(gl.ARRAY_BUFFER, bufferArray[arrayNumber]);
+-				gl.vertexAttribPointer(shaderProgram[propertyName], bufferArray[arrayNumber].itemSize, gl.FLOAT, false, 0, 0);
+-				arrayNumber++;
+-			}
+-		}
+-	}
+-} //}}}
+-function draw(canvas,options) { //{{{
+-	if (!canvas.nodes) {
+-		canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
+-		return;
+-	}
+-	// Ensure canvas and gl viewport sizes are the same
+-	var displayWidth  = canvas.clientWidth;
+-	var displayHeight = canvas.clientHeight;
+-	if (canvas.width  != displayWidth || canvas.height != displayHeight) {
+-		canvas.width  = displayWidth;
+-		canvas.height = displayHeight;
+-		canvas.gl.viewport(0, 0, canvas.width, canvas.height);
+-	}
+-	
+-	if (canvas.textcanvas) {
+-		canvas.textcanvas.draw(canvas);
+-	}
+-
+-	// Set clear color to black, fully opaque
+-	var gl = canvas.gl;
+-	var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor','lightcyan'));
+-	if (backgroundcolor.ok) gl.clearColor(backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0);
+-	else throw Error(sprintf("s%s%s\n","initWebGL error message: cound not find out background color for curent canvas ",canvas));
+-		
+-	// Skip drawing of new frame if any texture is not yet loaded
+-	var nodes = canvas.nodes;
+-	for (var node in nodes) {
+-		if (nodes[node]["texture"] && !nodes[node]["texture"]["isLoaded"]) {
+-			canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
+-			return;
+-		}
+-	}
+-	// Else, clear the color as well as the depth buffer for new frame
+-	gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+-	
+-	updateCameraMatrix(canvas);
+-	
+-	var drawPassNumber = 2;
+-	for (var i = drawPassNumber - 1; i >= 0; i--) {
+-		for (var node in nodes) {
+-			if (nodes[node]["drawOrder"] == i) {
+-				drawSceneGraphNode(canvas,nodes[node]);
+-			}
+-		}
+-	}
+-	canvas.drawHandler = window.requestAnimationFrame(function(time) {draw(canvas,options)});
+-} //}}}
+-//}}}
+-function sprintf() {
+-  //  discuss at: http://phpjs.org/functions/sprintf/
+-  // original by: Ash Searle (http://hexmen.com/blog/)
+-  // improved by: Michael White (http://getsprink.com)
+-  // improved by: Jack
+-  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+-  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+-  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+-  // improved by: Dj
+-  // improved by: Allidylls
+-  //    input by: Paulo Freitas
+-  //    input by: Brett Zamir (http://brett-zamir.me)
+-  //   example 1: sprintf("%01.2f", 123.1);
+-  //   returns 1: 123.10
+-  //   example 2: sprintf("[%10s]", 'monkey');
+-  //   returns 2: '[    monkey]'
+-  //   example 3: sprintf("[%'#10s]", 'monkey');
+-  //   returns 3: '[####monkey]'
+-  //   example 4: sprintf("%d", 123456789012345);
+-  //   returns 4: '123456789012345'
+-  //   example 5: sprintf('%-03s', 'E');
+-  //   returns 5: 'E00'
+-
+-  var regex = /%%|%(\d+\$)?([\-+\'#0 ]*)(\*\d+\$|\*|\d+)?(?:\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g;
+-  var a = arguments;
+-  var i = 0;
+-  var format = a[i++];
+-
+-  // pad()
+-  var pad = function(str, len, chr, leftJustify) {
+-    if (!chr) {
+-      chr = ' ';
+-    }
+-    var padding = (str.length >= len) ? '' : new Array(1 + len - str.length >>> 0)
+-      .join(chr);
+-    return leftJustify ? str + padding : padding + str;
+-  };
+-
+-  // justify()
+-  var justify = function(value, prefix, leftJustify, minWidth, zeroPad, customPadChar) {
+-    var diff = minWidth - value.length;
+-    if (diff > 0) {
+-      if (leftJustify || !zeroPad) {
+-        value = pad(value, minWidth, customPadChar, leftJustify);
+-      } else {
+-        value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
+-      }
+-    }
+-    return value;
+-  };
+-
+-  // formatBaseX()
+-  var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
+-    // Note: casts negative numbers to positive ones
+-    var number = value >>> 0;
+-    prefix = (prefix && number && {
+-      '2'  : '0b',
+-      '8'  : '0',
+-      '16' : '0x'
+-    }[base]) || '';
+-    value = prefix + pad(number.toString(base), precision || 0, '0', false);
+-    return justify(value, prefix, leftJustify, minWidth, zeroPad);
+-  };
+-
+-  // formatString()
+-  var formatString = function(value, leftJustify, minWidth, precision, zeroPad, customPadChar) {
+-    if (precision !== null && precision !== undefined) {
+-      value = value.slice(0, precision);
+-    }
+-    return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar);
+-  };
+-
+-  // doFormat()
+-  var doFormat = function(substring, valueIndex, flags, minWidth, precision, type) {
+-    var number, prefix, method, textTransform, value;
+-
+-    if (substring === '%%') {
+-      return '%';
+-    }
+-
+-    // parse flags
+-    var leftJustify = false;
+-    var positivePrefix = '';
+-    var zeroPad = false;
+-    var prefixBaseX = false;
+-    var customPadChar = ' ';
+-    var flagsl = flags.length;
+-    var j;
+-    for (j = 0; flags && j < flagsl; j++) {
+-      switch (flags.charAt(j)) {
+-      case ' ':
+-        positivePrefix = ' ';
+-        break;
+-      case '+':
+-        positivePrefix = '+';
+-        break;
+-      case '-':
+-        leftJustify = true;
+-        break;
+-      case "'":
+-        customPadChar = flags.charAt(j + 1);
+-        break;
+-      case '0':
+-        zeroPad = true;
+-        customPadChar = '0';
+-        break;
+-      case '#':
+-        prefixBaseX = true;
+-        break;
+-      }
+-    }
+-
+-    // parameters may be null, undefined, empty-string or real valued
+-    // we want to ignore null, undefined and empty-string values
+-    if (!minWidth) {
+-      minWidth = 0;
+-    } else if (minWidth === '*') {
+-      minWidth = +a[i++];
+-    } else if (minWidth.charAt(0) === '*') {
+-      minWidth = +a[minWidth.slice(1, -1)];
+-    } else {
+-      minWidth = +minWidth;
+-    }
+-
+-    // Note: undocumented perl feature:
+-    if (minWidth < 0) {
+-      minWidth = -minWidth;
+-      leftJustify = true;
+-    }
+-
+-    if (!isFinite(minWidth)) {
+-      throw new Error('sprintf: (minimum-)width must be finite');
+-    }
+-
+-    if (!precision) {
+-      precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type === 'd') ? 0 : undefined;
+-    } else if (precision === '*') {
+-      precision = +a[i++];
+-    } else if (precision.charAt(0) === '*') {
+-      precision = +a[precision.slice(1, -1)];
+-    } else {
+-      precision = +precision;
+-    }
+-
+-    // grab value using valueIndex if required?
+-    value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
+-
+-    switch (type) {
+-    case 's':
+-      return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar);
+-    case 'c':
+-      return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
+-    case 'b':
+-      return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+-    case 'o':
+-      return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+-    case 'x':
+-      return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+-    case 'X':
+-      return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad)
+-        .toUpperCase();
+-    case 'u':
+-      return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+-    case 'i':
+-    case 'd':
+-      number = +value || 0;
+-      // Plain Math.round doesn't just truncate
+-      number = Math.round(number - number % 1);
+-      prefix = number < 0 ? '-' : positivePrefix;
+-      value = prefix + pad(String(Math.abs(number)), precision, '0', false);
+-      return justify(value, prefix, leftJustify, minWidth, zeroPad);
+-    case 'e':
+-    case 'E':
+-    case 'f': // Should handle locales (as per setlocale)
+-    case 'F':
+-    case 'g':
+-    case 'G':
+-      number = +value;
+-      prefix = number < 0 ? '-' : positivePrefix;
+-      method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
+-      textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
+-      value = prefix + Math.abs(number)[method](precision);
+-      return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
+-    default:
+-      return substring;
+-    }
+-  };
+-
+-  return format.replace(regex, doFormat);
+-}
+-function loadresultsfrombuffer(md,buffer,buffersize){
+-//LOADRESULTSFROMBUFFER - load results of solution sequence from memory buffer 
+-//
+-//   Usage:
+-//      loadresultsfrombuffer(md,buffer,buffersize);
+-
+-	//check number of inputs/outputs
+-	if (arguments.length!=3) throw Error('loadresultsfrombuffer error message: wrong usage!');
+-
+-	if (!md.qmu.isdakota){
+-
+-		//initialize md.results if not a structure yet
+-		if (MapIsEmpty(md.results)) md.results={};
+-
+-		//load results: 
+-		structure=parseresultsfrombuffer(buffer,buffersize);
+-
+-		//load structure onto results: 
+-		solutiontype=structure[0].SolutionType;
+-		md.results[solutiontype]=structure;
+-
+-		return md;
+-
+-	}
+-	else throw Error('loadresultsfrombuffer error message: qmu results not supported yet!');
+-}
+-function marshall(md){
+-//MARSHALL - outputs a typed array buffer to be send to the issm module.
+-//
+-//   The routine creates a compatible binary stream from @model md
+-//   This binary stream will be used for single cpu runs using the issm module.
+-//
+-//   Usage:
+-//      fid=marshall(md)
+-
+-	if (md.verbose.solution){
+-		console.log('marshalling file ' + md.miscellaneous.name + '.bin');
+-	}
+-
+-	//open file for binary writing
+-	var fid=new fileptr('mode','w');
+-
+-	//Go through all model fields: check that it is a class and call checkconsistency
+-	for (field in md){
+-
+-		//Some properties do not need to be marshalled
+-		if (field == 'results' | field =='radaroverlay' | field == 'toolkits' | field =='cluster' | field == 'flaim' | field == 'priv') continue;
+-		
+-		//Check that current field is a class
+-		if(typeof md[field] == 'function'){
+-			continue;
+-		}
+-
+-		//Marshall current object
+-		md[field].marshall(md,['md.'+field],fid);
+-	}
+-
+-	//Last, write "md.EOF" to make sure that the binary file is not corrupt
+-	WriteData(fid,'XXX','name','md.EOF','data',true,'format','Boolean');
+-	return fid;
+-}
+-function parseresultsfrombuffer(buffer,buffersize){ //{{{
+-//PARSERESULTSFROMDISK - ...
+-//
+-//   Usage:
+-//      results=parseresultsfrombuffer(buffer,buffersize);
+-
+-	//Open file
+-	results=[];
+-	
+-	var fid = new fileptr('mode','r','buffer',buffer,'buffersize',buffersize);
+-
+-	//Read fields until the end of the file.
+-	result  = ReadData(fid);
+-
+-	if (MapIsEmpty(result))throw Error('no results found in binary memory buffer');
+-	
+-	var counter = 0;
+-	var check_nomoresteps=0;
+-	var step    = result['step'];
+-	var index;
+-
+-	while (!MapIsEmpty(result)){
+-
+-		if (check_nomoresteps){
+-			//check that the new result does not add a step, which would be an error: 
+-			if (result['step']>=1)throw Error('parsing results for a steady-state core, which incorporates transient results!');
+-		}
+-
+-		//Check step, increase counter if this is a new step
+-		if(step!=result['step'] & result['step']>1){
+-			counter = counter + 1;
+-			step    = result['step'];
+-		}
+-
+-		//Add result
+-		if(result['step']==0){
+-			//if we have a step = 0, this is a steady state solutoin, don't expect more steps. 
+-			index = 0;
+-			check_nomoresteps=1;
+-		}
+-		else if(result['step']==1){
+-			index = 0;
+-		}
+-		else index = counter;
+-
+-		if(index>results.length-1)results.push({});
+-		for(var i=results.length-1;i<index-1;i++)results[i]={};
+-		results[index][result['fieldname']]=result['field'];
+-		
+-		//Get time and step
+-		if(result['time']!=-9999){
+-			results[index]['step']=result['step'];
+-		}
+-		if(result['time']!=-9999){
+-			results[index]['time']=result['time'];
+-		}
+-
+-		//read next result
+-		result  = ReadData(fid);
+-	}
+-	return results;
+-} // }}}
+-function ReadData(fid){ //{{{
+-//READDATA - ...
+-//
+-//   Usage:
+-//      field=ReadData(fid)
+-
+-	//read field
+-	var length=fid.fread(1,'int');
+-	
+-	var result={};
+-
+-	if (length!==-1){
+-		fieldname=fid.fread(length,'char');
+-		time=fid.fread(1,'double');
+-		step=fid.fread(1,'int');
+-		type=fid.fread(1,'int');
+-		M=fid.fread(1,'int');
+-
+-		if (type==1) field=fid.fread(M,'double');
+-		else if (type==2) field=fid.fread(M,'char');
+-		else if (type==3) {
+-			N=fid.fread(1,'int');
+-			field=fid.fread(N*M,'double');
+-		}
+-		else throw Error(sprintf("%s%i",'ReadData error message: cannot read data of type ',type));
+-
+-		//Process units here FIXME: this should not be done here!
+-		var yts=365.0*24.0*3600.0;
+-		if (fieldname == 'BalancethicknessThickeningRate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'HydrologyWaterVx') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'HydrologyWaterVy') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'Vx') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'Vy') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'Vz') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'Vel') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'BasalforcingsGroundediceMeltingRate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'BasalforcingsFloatingiceMeltingRate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'TotalSmb') for (var i=0;i<field.length;i++)field[i]= field[i]/Math.pow(10,12)*yts; //(GigaTon/year)
+-		else if (fieldname == 'SmbMassBalance') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'SmbPrecipitation') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'SmbRunoff') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'SmbCondensation') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'SmbAccumulation') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'SmbMelt') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-		else if (fieldname == 'CalvingCalvingrate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+-
+-		result['fieldname']=fieldname;
+-		result['time']=time;
+-		if (result['time']!=-9999) result['time']=time/yts;
+-		result['step']=step;
+-		result['field']=field;
+-	}
+-	return result;
+-
+-} // }}}
+-function solve(md,solutionenum){
+-//SOLVE - apply solution sequence for this model
+-//
+-//   Usage:
+-//      solve(md,solutionenum,varargin)
+-//      where varargin is a lit of paired arguments of string OR enums
+-//
+-//   solution types available comprise:
+-//		 - StressbalanceSolutionEnum
+-//		 - MasstransportSolutionEnum
+-//		 - ThermalSolutionEnum
+-//		 - SteadystateSolutionEnum
+-//		 - TransientSolutionEnum
+-//		 - BalancethicknessSolutionEnum
+-//		 - BedSlopeSolutionEnum
+-//		 - SurfaceSlopeSolutionEnum
+-//		 - HydrologySolutionEnum
+-//		 - FlaimSolutionEnum
+-//
+-//  extra options:
+-//      - loadonly    : does not solve. only load results
+-//      - runtimename : true or false (default is true), makes name unique
+-//      - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model
+-//      - restart: 'directory name (relative to the execution directory) where the restart file is located.
+-//      - callback: callback function to be called upon receiving the results from the server, or local computations. 
+-//
+-//   Examples:
+-//      md=solve(md,StressbalanceSolutionEnum);
+-
+-	solutionstring=EnumToString(solutionenum);
+-	
+-	//recover and process solve options
+-	if (solutionstring.slice(-8) !== 'Solution'){
+-		throw Error(sprintf("%s%s%s\n",'solutionenum ',solutionstring,' not supported!'));
+-	}
+-	
+-	//Process options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice(2,args.length));
+-	options.addfield('solutionenum',solutionenum);
+-
+-	//recover some fields
+-	md.priv.solution=solutionenum;
+-	cluster=md.cluster;
+-
+-	//check model consistency
+-	if (options.getfieldvalue('checkconsistency','yes') == 'yes'){
+-		if (md.verbose.solution){
+-			console.log('checking model consistency');
+-		}
+-		if (solutionenum == FlaimSolutionEnum()){
+-			md.priv.isconsistent=true;
+-			md.mesh.checkconsistency(md,solutionenum);
+-			md.flaim.checkconsistency(md,solutionenum);
+-			if (md.priv.isconsistent==false){
+-				throw error('solve error message: model not consistent, see messages above');
+-			}
+-		}
+-		else{
+-			ismodelselfconsistent(md);
+-		}
+-	}
+-
+-	//If we are restarting, actually use the provided runtime name:
+-	restart=options.getfieldvalue('restart','');
+-
+-	//First, build a runtime name that is unique
+-	if (restart==1 ){
+-		//Leave the runtimename as is
+-		}
+-	else{
+-		if (!(restart == '')){
+-			md.priv.runtimename=restart;
+-		}
+-		else if (options.getfieldvalue('runtimename',true)){
+-			c=new Date().getTime();
+-			md.priv.runtimename=sprintf('%s-%g',md.miscellaneous.name,c);
+-		}
+-		else{
+-			md.priv.runtimename=md.miscellaneous.name;
+-		}
+-	}
+-
+-	//if running qmu analysis, some preprocessing of dakota files using models
+-	//fields needs to be carried out. 
+-	if (md.qmu.isdakota){
+-		throw Error("solve error message: qmu runs not supported yet!");
+-		//md.preqmu(options);
+-	}
+-
+-
+-	//Do we load results only?
+-	if (options.getfieldvalue('loadonly',false)){
+-		loadresultsfromcluster(md);
+-		return;
+-	}
+-
+-	//Marshall into a binary array (fid) all the fields of model.
+-	var fid = marshall(md);                                          // bin file
+-	//deal with toolkits options: 
+-	toolkitsstring= md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits'); // toolkits file
+-
+-	//callback function: 
+-	function callbackfunction(){}; //default, do nothing if no callback requested.
+-	if (options.getfieldvalue('callback',false)){
+-		callbackfunction=options.getfieldvalue('callback');
+-	}
+-
+-	if (cluster.classname() == 'local'){  //{{{
+-
+-		/*We are running locally on the machine, using the issm module:*/
+-		console.log('running issm locally');
+-		
+-		//Call issm:
+-		var outputs = issm(fid, toolkitsstring, solutionstring, md.miscellaneous.name); 
+-		
+-		//Recover output arguments: 
+-		var outputbuffer = outputs[0]; var outputbuffersize = outputs[1];
+-			
+-		//Load results: 
+-		md = loadresultsfrombuffer(md,outputbuffer,outputbuffersize); 
+-		
+-		//Call back? 
+-		callbackfunction();
+-
+-		return md;
+-
+-	} //}}}
+-	else { //{{{
+-
+-		/*We are running somewhere else on a computational server. Send the buffer to that server and retrieve output: */
+-		cluster.UploadAndRun(md,callbackfunction,fid,toolkitsstring,solutionstring,md.miscellaneous.name,md.priv.runtimename);
+-
+-		return md;
+-
+-	} //}}}
+-}
+-function WriteData(fid,prefix){
+-//WRITEDATA - write model field into binary buffer 
+-//
+-//   Usage:
+-//      WriteData(fid,varargin);
+-
+-	//process options
+-	var args = Array.prototype.slice.call(arguments);
+-	var options = new pairoptions(args.slice(2,args.length));
+-	var enumm;
+-	var dataini;
+-	var data;
+-
+-	//Get data properties
+-	if (options.exist('object')){
+-		//This is a object field, construct enum and data
+-		obj       = options.getfieldvalue('object');
+-		fieldname = options.getfieldvalue('fieldname');
+-		name      = options.getfieldvalue('name',[prefix+'.'+fieldname ]);
+-		if (options.exist('data')){
+-			dataini = options.getfieldvalue('data');
+-		}
+-		else{
+-			dataini  = obj[fieldname];
+-		}
+-	}
+-	else{
+-		//No processing required
+-		dataini = options.getfieldvalue('data');
+-		name = options.getfieldvalue('name');
+-	}
+-	if (IsArray(dataini)){
+-	   data=dataini.slice(0);
+-	}
+-	else{
+-		data=dataini;
+-	}
+-
+-	format  = options.getfieldvalue('format');
+-	mattype = options.getfieldvalue('mattype',0);    //only required for matrices
+-	timeserieslength = options.getfieldvalue('timeserieslength',-1);
+-
+-	//Scale data if necesarry
+-	if (options.exist('scale')){
+-		scale = options.getfieldvalue('scale');
+-		if (data.length==timeserieslength){
+-			if (IsArray(data[0])){
+-				for(var i=0;i<data.length-1;i++){
+-					for(var j=0;j<data[0].length;j++){
+-						data[i][j]=scale*data[i][j];
+-					}
+-				}
+-			}
+-			else{
+-				for(var i=0;i<data.length-1;i++){
+-					data[i]=scale*data[i];
+-				}
+-			}
+-		}
+-		else{
+-			if (!IsArray(data)) data=data*scale;
+-			else ArrayScale(data,scale);
+-		}
+-	}
+-
+-	if(IsArray(data)){
+-		if(data.length == timeserieslength){
+-			var yts=365.0*24.0*3600.0;
+-			if (IsArray(data[0])){
+-				for(var j=0;j<data[0].length;j++)data[timeserieslength-1][j]=data[timeserieslength-1][j]*yts;
+-			}
+-			else data[timeserieslength-1]=data[timeserieslength-1]*yts;
+-		}
+-	}
+-
+-	//Step 1: write the name to identify this record uniquely
+-	fid.fwrite(name.length,'int'); 
+-	fid.fwrite(name,'char'); 
+-
+-	//Step 2: write the data itself.
+-	if (format == 'Boolean'){// {{{
+-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+-
+-		//first write length of record
+-		fid.fwrite(4+4,'int');  //1 bool (disguised as an int)+code
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//now write integer
+-		fid.fwrite(data,'int');  //send an int, not easy to send a bool
+-	} // }}}
+-	else if (format == 'Integer'){ // {{{
+-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+-
+-		//first write length of record
+-		fid.fwrite(4+4,'int');  //1 integer + code
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//now write integer
+-		fid.fwrite(data,'int'); 
+-	} // }}}
+-	else if (format == 'Double'){ // {{{
+-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+-
+-		//first write length of record
+-		fid.fwrite(8+4,'int');  //1 double+code
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//now write double
+-		fid.fwrite(data,'double'); 
+-	} // }}}
+-	else if (format == 'String'){ // {{{
+-		//first write length of record
+-		fid.fwrite(data.length+4+4,'int');  //string + string size + code
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//now write string
+-		fid.fwrite(data.length,'int'); 
+-		fid.fwrite(data,'char'); 
+-	} // }}}
+-	else if (format == 'BooleanMat'){ // {{{
+-
+-		//Get size
+-		var s=[data.length,1];
+-		if(IsArray(data[0]))s[1]=data[0].length;
+-
+-		//if matrix = NaN, then do not write anything
+-		if (s[0]==1 & s[1]==1 & isNaN(data)){
+-			s[0]=0; s[1]=0;
+-		}
+-		if (s[0]==1 & s[1]==1 & isNaN(data[0])){
+-			s[0]=0; s[1]=0;
+-		}
+-
+-		//first write length of record
+-		fid.fwrite(4+4+8*s[0]*s[1]+4+4,'int');  //2 integers (32 bits) + the double matrix + code + matrix type
+-
+-		//write data code and matrix type: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-		fid.fwrite(mattype,'int');
+-
+-		//now write matrix
+-		fid.fwrite(s[0],'int'); 
+-		fid.fwrite(s[1],'int'); 
+-		if (s[0]*s[1]) fid.fwrite(MatrixToList(data),'double'); //get to the "c" convention, hence the transpose
+-	} // }}}
+-	else if (format == 'IntMat'){ // {{{
+-
+-		//Get size
+-		var s=[data.length,1];
+-		if(IsArray(data[0]))s[1]=data[0].length;
+-
+-		//if matrix = NaN, then do not write anything
+-		if (s[0]==1 & s[1]==1 & isNaN(data)){
+-			s[0]=0; s[1]=0;
+-		}
+-		if (s[0]==1 & s[1]==1 & isNaN(data[0])){
+-			s[0]=0; s[1]=0;
+-		}
+-
+-		//first write length of record
+-		fid.fwrite(4+4+8*s[0]*s[1]+4+4,'int');  //2 integers (32 bits) + the double matrix + code + matrix type
+-
+-		//write data code and matrix type: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-		fid.fwrite(mattype,'int');
+-
+-		//now write matrix
+-		fid.fwrite(s[0],'int'); 
+-		fid.fwrite(s[1],'int'); 
+-		if (s[0]*s[1]) fid.fwrite(MatrixToList(data),'double'); //get to the "c" convention, hence the transpose
+-
+-	} // }}}
+-	else if (format == 'DoubleMat'){ // {{{
+-
+-		//Get size
+-		var s=[data.length,1];
+-		if(IsArray(data[0]))s[1]=data[0].length;
+-		if(typeof data == 'number'){s[0]=1; s[1]=1}
+-
+-		//if matrix = NaN, then do not write anything
+-		if (s[0]==1 & s[1]==1 & isNaN(data)){
+-			s[0]=0; s[1]=0;
+-		}
+-		if (s[0]==1 & s[1]==1 & isNaN(data[0])){
+-			s[0]=0; s[1]=0;
+-		}
+-
+-		//first write length of record
+-		var recordlength=4+4+8*s[0]*s[1]+4+4; //2 integers (32 bits) + the double matrix + code + matrix type
+-		if (recordlength>Math.pow(2,31)) throw Error(sprintf("field '%s' cannot be marshalled because it is larger than 2^31 bytes!",EnumToString(enumm)));
+-		fid.fwrite(recordlength,'int');
+-
+-		//write data code and matrix type: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-		fid.fwrite(mattype,'int');
+-
+-		//now write matrix
+-		fid.fwrite(s[0],'int'); 
+-		fid.fwrite(s[1],'int'); 
+-		if (s[0]*s[1]) fid.fwrite(MatrixToList(data),'double'); //get to the "c" convention, hence the transpose
+-	} // }}}
+-	else if (format == 'MatArray'){ // {{{
+-
+-		numrecords=data.length;
+-
+-		//first get length of record
+-		recordlength=4+4; //number of records + code
+-		for (var i=0;i<numrecords;i++){
+-			matrix=data[i];
+-			var s=[matrix.length,1];
+-			if(IsArray(matrix[0]))s[1]=matrix[0].length;
+-
+-			recordlength=recordlength+4*2+ //row and col of matrix
+-				s[0]*s[1]*8; //matrix of doubles
+-		}
+-
+-		//write length of record
+-		fid.fwrite(recordlength,'int'); 
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//write data, first number of records
+-		fid.fwrite(numrecords,'int'); 
+-
+-		//write each matrix: 
+-		for (var i=0;i<numrecords;i++){
+-			matrix=data[i];
+-			var s=[matrix.length,1];
+-			if(IsArray(matrix[0]))s[1]=matrix[0].length;
+-
+-			fid.fwrite(s[0],'int'); 
+-			fid.fwrite(s[1],'int'); 
+-			fid.fwrite(MatrixToList(matrix),'double');
+-		}
+-	} // }}}
+-	else if (format == 'StringArray'){ // {{{
+-
+-		//first get length of string array: 
+-		num=data.length;
+-		if ((typeof data[0] == 'numeric') & num==1 & isNaN(data[0])){
+-			num = 0;
+-		}
+-
+-		//now get length of record: 
+-		recordlength=4+4; //for length of array + code
+-		for (var i=0;i<num;i++){
+-			string=data[i];
+-			recordlength=recordlength+4+string.length; //for each string
+-		}
+-
+-		//write length of record
+-		fid.fwrite(recordlength,'int'); 
+-
+-		//write data code: 
+-		fid.fwrite(FormatToCode(format),'int'); 
+-
+-		//now write length of string array
+-		fid.fwrite(num,'int'); 
+-
+-		//now write the strings
+-		for (var i=0;i<num;i++){
+-			string=data[i];
+-			fid.fwrite(string.length,'int'); 
+-			fid.fwrite(string,'char'); 
+-		}
+-	} // }}}
+-	else { 
+-		throw Error(sprintf("WriteData error message: data type: %s not supported yet! ('%s')",
+-					format.toString(),EnumToString(enumm)));
+-	}
+-}
+-
+-function FormatToCode(format){ // {{{
+-	//This routine takes the format string, and hardcodes it into an integer, which 
+-	//is passed along the record, in order to identify the nature of the dataset being 
+-	//sent.
+-	if  (format == 'Boolean') code=1;
+-	else if (format == 'Integer') code=2;
+-	else if (format == 'Double') code=3;
+-	else if (format == 'String') code=4;
+-	else if (format == 'BooleanMat') code=5;
+-	else if (format == 'IntMat') code=6;
+-	else if (format == 'DoubleMat') code=7;
+-	else if (format == 'MatArray') code=8;
+-	else if (format == 'StringArray') code=9;
+-	else throw Error('FormatToCode error message: data type not supported yet!');
+-	return code;
+-}// }}}
+-function issmgslsolver(){
+-//ISSMSOLVER - 
+-//
+-//   Usage:
+-//      options=issmsolver(varargin);
+-
+-	//Retrieve options provided in varargin. First convert arguments to array:
+-	var args = Array.prototype.slice.call(arguments);
+-
+-	//Then process options
+-	var  options = new pairoptions(args.slice(1,args.length));
+-
+-	//default issmoptions options
+-	var issmoptions={};
+-	issmoptions['toolkit']='issm';
+-	issmoptions['mat_type']=options.getfieldvalue('mat_type','dense');
+-	issmoptions['vec_type']=options.getfieldvalue('vec_type','seq');
+-	issmoptions['solver_type']=options.getfieldvalue('solver_type','gsl');
+-
+-	return issmoptions;
+-}
+-function TriMesh(md,domain,rifts, area){
+-/*TriMesh 
+-	   usage: var array = TriMesh(domain,rifts,area);
+-	      where: array is made of [index,x,y,segments,segmentmarkers]
+-		  and index,x,y defines a triangulation, segments is an array made 
+-	      of exterior segments to the mesh domain outline, segmentmarkers is an array 
+-		  flagging each segment, domain a js array defining the domain outline  (sames for 
+-		  rifts) and area is the maximum area desired for any element of the resulting mesh.
+-
+-		  Ok, for now, we are not dealing with rifts. Also, the domain is made of only one 
+-		  profile, this to avoid passing a double** pointer to js. 
+-*/
+-
+-	//Dynamic allocations: {{{
+-	//Retrieve domain arrays, and allocate on Module heap: 
+-	
+-	//input
+-	var dx=new Float64Array(domain['x']); var nx=dx.length * dx.BYTES_PER_ELEMENT;
+-	var dxPtr= Module._malloc(nx); var domainxHeap = new Uint8Array(Module.HEAPU8.buffer,dxPtr,nx);
+-	domainxHeap.set(new Uint8Array(dx.buffer)); var domainx=domainxHeap.byteOffset;
+-
+-	var dy=new Float64Array(domain['y']); var ny=dy.length * dy.BYTES_PER_ELEMENT;
+-	var dyPtr = Module._malloc(ny); var domainyHeap = new Uint8Array(Module.HEAPU8.buffer,dyPtr,ny);
+-	domainyHeap.set(new Uint8Array(dy.buffer)); var domainy=domainyHeap.byteOffset;
+-	
+-	//output
+-	var nel,indexlinear,index,nods,x,y;
+-	var pnel= Module._malloc(4); 
+-	var pindex= Module._malloc(4); 
+-	var pnods= Module._malloc(4); 
+-	var px= Module._malloc(4); 
+-	var py= Module._malloc(4); 
+-	var psegments= Module._malloc(4); 
+-	var psegmentmarkers= Module._malloc(4); 
+-	var pnsegs= Module._malloc(4); 
+-	//}}}
+-
+-	//Declare TriMesh module: 
+-	TriMeshModule = Module.cwrap('TriMeshModule','number',['number','number','number','number','number','number','number','number','number','number','number','number']);
+-	
+-	//Call TriMesh module: 
+-	TriMeshModule(pindex,px,py,pnel,pnods,psegments,psegmentmarkers,pnsegs, domainx,domainy,dx.length,area);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	//recover mesh: 
+-	nel = Module.getValue(pnel, 'i32');
+-	var indexptr = Module.getValue(pindex,'i32');
+-	indexlinear = Module.HEAPF64.slice(indexptr /8, indexptr/8 + nel*3);
+-	index = ListToMatrix(indexlinear,3);
+-
+-	nods = Module.getValue(pnods, 'i32');
+-	var xptr = Module.getValue(px,'i32');
+-	var yptr = Module.getValue(py,'i32');
+-	x = Module.HEAPF64.slice(xptr /8, xptr/8 + nods);
+-	y = Module.HEAPF64.slice(yptr /8, yptr/8 + nods);
+-	
+-	nsegs = Module.getValue(pnsegs, 'i32');
+-	var segmentsptr = Module.getValue(psegments,'i32');
+-	segmentslinear = Module.HEAPF64.slice(segmentsptr /8, segmentsptr/8 + nsegs*3);
+-	segments = ListToMatrix(segmentslinear,3);
+-	
+-	var segmentmarkersptr = Module.getValue(psegmentmarkers,'i32');
+-	segmentmarkers = Module.HEAPF64.slice(segmentmarkersptr /8, segmentmarkersptr/8 + nsegs);
+-	/*}}}*/
+-
+-	var return_array=[index,x,y,segments,segmentmarkers];
+-
+-	/*Free ressources: */
+-	Module._free(pindex); 
+-	Module._free(indexlinear); 
+-	Module._free(px); 
+-	Module._free(x); 
+-	Module._free(py); 
+-	Module._free(y); 
+-	Module._free(pnel); 
+-	Module._free(pnods); 
+-	Module._free(psegments); 
+-	Module._free(psegmentmarkers); 
+-	Module._free(pnsegs); 
+-
+-	return return_array;
+-}
+-function NodeConnectivity(elementsin,nods){
+-/*NodeConnectivity 
+-	   usage: var md.mesh.vertexconnectivity = NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
+-*/
+-
+-	//Dynamic allocations: {{{
+-	//Retrieve elements and allocate on Module heap: 
+-	
+-	//input
+-	var delements=new Int32Array(MatrixToList(elementsin)); var nelements=delements.length * delements.BYTES_PER_ELEMENT;
+-	var delementsPtr= Module._malloc(nelements); var elementsHeap = new Uint8Array(Module.HEAPU8.buffer,delementsPtr,nelements);
+-	elementsHeap.set(new Uint8Array(delements.buffer)); var elements=elementsHeap.byteOffset;
+-
+-	//output
+-	var width,connectivitylinear,connectivity;
+-	var pwidth= Module._malloc(4); 
+-	var pnods= Module._malloc(4); 
+-	var pconnectivity= Module._malloc(4); 
+-	var nels=elementsin.length;
+-	//}}}
+-
+-	//Declare NodeConnectivity module: 
+-	NodeConnectivityModule = Module.cwrap('NodeConnectivityModule','number',['number','number','number','number']);
+-	
+-	//Call NodeConnectivity module: 
+-	NodeConnectivityModule(pconnectivity,pnods,pwidth,elements,nels,nods);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	//recover mesh: 
+-	width = Module.getValue(pwidth, 'i32');
+-	var connectivityptr = Module.getValue(pconnectivity,'i32');
+-	connectivitylinear = Module.HEAPF64.slice(connectivityptr /8, connectivityptr/8 + nods*width);
+-	connectivity = ListToMatrix(connectivitylinear,width);
+-	/*}}}*/
+-
+-	/*Free ressources: */
+-	Module._free(pconnectivity); 
+-	Module._free(connectivitylinear); 
+-	Module._free(pwidth); 
+-	Module._free(pnods); 
+-
+-	return connectivity;
+-}
+-function ContourToMesh(indexin,xin,yin,contour,interptype,edgevalue){
+-/* CONTOURTOMESH - Flag the elements or nodes inside a contour;
+-	
+-	      Usage: ;
+-	         [in_nod,in_elem]=ContourToMesh(index,x,y,contourname,interptype,edgevalue);
+-	
+-	         index,x,y: mesh triangulation
+-	         contourname: name of .exp file containing the contours
+-	         interptype: string definining type of interpolation ('element', or 'node')
+-	         edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.
+-	         in_nod: vector of flags (0 or 1), of size nods if interptype is set to 'node' or 'element and node',
+-	            or of size 0 otherwise.
+-	         in_elem: vector of flags (0 or 1), of size nel if interptype is set to 'element' or 'element and node', 
+-	            or of size 0 otherwise.
+-	
+-	      Example: 
+-	         in_nod=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','node',1)
+-	         in_elements=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element',0)
+-	         return_values=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element and node',0); in_nodes=return_values[0]; in_elements=return_values[1];
+-*/
+-
+-	//Dynamic allocations: {{{
+-	//Retrieve elements and allocate on Module heap: 
+-	
+-	//input
+-	
+-	var dindex=new Int32Array(MatrixToList(indexin)); var nindex=dindex.length * dindex.BYTES_PER_ELEMENT;
+-	var dindexPtr= Module._malloc(nindex); var indexHeap = new Uint8Array(Module.HEAPU8.buffer,dindexPtr,nindex);
+-	indexHeap.set(new Uint8Array(dindex.buffer)); var index=indexHeap.byteOffset;
+-
+-	var dx=new Float64Array(xin); var nx=dx.length * dx.BYTES_PER_ELEMENT;
+-	var dxPtr= Module._malloc(nx); var dxHeap = new Uint8Array(Module.HEAPU8.buffer,dxPtr,nx);
+-	dxHeap.set(new Uint8Array(dx.buffer)); var x=dxHeap.byteOffset;
+-	
+-	var dy=new Float64Array(yin); var ny=dy.length * dy.BYTES_PER_ELEMENT;
+-	var dyPtr= Module._malloc(nx); var dyHeap = new Uint8Array(Module.HEAPU8.buffer,dyPtr,ny);
+-	dyHeap.set(new Uint8Array(dy.buffer)); var y=dyHeap.byteOffset;
+-	
+-	var dcontourx=new Float64Array(contour['x']); var nx=dcontourx.length * dcontourx.BYTES_PER_ELEMENT;
+-	var dcontourxPtr= Module._malloc(nx); var contourxHeap = new Uint8Array(Module.HEAPU8.buffer,dcontourxPtr,nx);
+-	contourxHeap.set(new Uint8Array(dcontourx.buffer)); var contourx=contourxHeap.byteOffset;
+-
+-	var dcontoury=new Float64Array(contour['y']); var ny=dcontoury.length * dcontoury.BYTES_PER_ELEMENT;
+-	var dcontouryPtr = Module._malloc(ny); var contouryHeap = new Uint8Array(Module.HEAPU8.buffer,dcontouryPtr,ny);
+-	contouryHeap.set(new Uint8Array(dcontoury.buffer)); var contoury=contouryHeap.byteOffset;
+-	
+-	nel=indexin.length;
+-	nods=xin.length;
+-	contour_nods=dcontourx.length;
+-
+-	//output
+-	var in_nod;
+-	var pin_nod= Module._malloc(4); 
+-	var in_nel;
+-	var pin_nel= Module._malloc(4); 
+-	//}}}
+-
+-	//Declare ContourToMesh module: 
+-	ContourToMeshModule = Module.cwrap('ContourToMeshModule','number',['number','number','number','number','number','number','number','string','number','number','number']);
+-	
+-	//Call ContourToMesh module: 
+-	ContourToMeshModule(pin_nod,pin_nel,index,x,y,contourx,contoury,interptype,nel, nods, contour_nods, edgevalue);
+-
+-	/*Dynamic copying from heap: {{{*/
+-	if(interptype == 'node'){
+-		var in_nodptr = Module.getValue(pin_nod,'i32');
+-		in_nod = Module.HEAPF64.slice(in_nodptr /8, in_nodptr/8 + nods);
+-	}
+-	else if (interptype == 'element'){
+-		var in_nelptr = Module.getValue(pin_nel,'i32');
+-		in_nel = Module.HEAPF64.slice(in_nelptr /8, in_nelptr/8 + nel);
+-	}
+-	else if (interptype == 'element and node'){
+-		var in_nodptr = Module.getValue(pin_nod,'i32');
+-		in_nod = Module.HEAPF64.slice(in_nodptr /8, in_nodptr/8 + nods);
+-		var in_nelptr = Module.getValue(pin_nel,'i32');
+-		in_nel = Module.HEAPF64.slice(in_nelptr /8, in_nelptr/8 + nel);
+-	}
+-	else throw Error('ContourToMeshModule error message: wrong interpolation type!');
+-	/*}}}*/
+-
+-	/*Free ressources: */
+-	Module._free(pin_nod); 
+-	Module._free(pin_nel); 
+-	
+-	if(interptype == 'node'){
+-		return in_nod;
+-	}
+-	else if (interptype == 'element'){
+-		return in_nel;
+-	}
+-	else if (interptype == 'element and node'){
+-		return [in_nod,in_nel];
+-	}
+-}
+-function ElementConnectivity(elementsin,nodeconnectivityin){
+-/*ElementConnectivity 
+-	   usage: var md.mesh.elementconnectivity= ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
+-*/
+-
+-	//Dynamic allocations: {{{
+-	//Retrieve elements and allocate on Module heap: 
+-	
+-	//input
+-	nel=elementsin.length;
+-	nods=nodeconnectivityin.length;
+-	width=nodeconnectivityin[0].length;
+-	
+-	var delements=new Int32Array(MatrixToList(elementsin)); var nelements=delements.length * delements.BYTES_PER_ELEMENT;
+-	var delementsPtr= Module._malloc(nelements); var elementsHeap = new Uint8Array(Module.HEAPU8.buffer,delementsPtr,nelements);
+-	elementsHeap.set(new Uint8Array(delements.buffer)); var elements=elementsHeap.byteOffset;
+-	
+-	var dnodeconnectivity=new Int32Array(MatrixToList(nodeconnectivityin)); var nnodeconnectivity=dnodeconnectivity.length * dnodeconnectivity.BYTES_PER_ELEMENT;
+-	var dnodeconnectivityPtr= Module._malloc(nnodeconnectivity); var nodeconnectivityHeap = new Uint8Array(Module.HEAPU8.buffer,dnodeconnectivityPtr,nnodeconnectivity);
+-	nodeconnectivityHeap.set(new Uint8Array(dnodeconnectivity.buffer)); var nodeconnectivity=nodeconnectivityHeap.byteOffset;
+-
+-	//output
+-	var connectivitylinear,connectivity;
+-	var pconnectivity= Module._malloc(4); 
+-	//}}}
+-
+-	//Declare ElementConnectivity module: 
+-	ElementConnectivityModule = Module.cwrap('ElementConnectivityModule','number',['number','number','number','number','number','number']);
+-	
+-	//Call ElementConnectivity module: 
+-	ElementConnectivityModule(pconnectivity,elements, nodeconnectivity, nel, nods, width);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	//recover mesh: 
+-	var connectivityptr = Module.getValue(pconnectivity,'i32');
+-	connectivitylinear = Module.HEAPF64.slice(connectivityptr /8, connectivityptr/8 + nel*3);
+-	connectivity = ListToMatrix(connectivitylinear,3);
+-	/*}}}*/
+-
+-	/*Free ressources: */
+-	Module._free(pconnectivity); 
+-	Module._free(connectivitylinear); 
+-
+-	return connectivity;
+-}
+-function InterpFromMeshToMesh2d(indexin,xin,yin,datain,x_interpin,y_interpin){
+-
+-/* INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point
+-  
+-  This function interpolates a field defined on a Delaunay triangulation onto a list of points.
+-
+-  Usage:
+-	  var data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp); or
+-	  var data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,default_value);
+-
+-	  index             : index of the mesh where data is defined
+-	  x,y               : coordinates of the nodes where data is defined
+-	  data              : matrix holding the data to be interpolated onto the mesh. (one column per field)
+-	  x_interp,y_interp : coordinates of the points onto which we interpolate.
+-	  default_value     : default value if point is outsite of triangulation (instead of linear interpolation)
+-	  data_interp       : vector of mesh interpolated data.
+-
+-*/
+-
+-	/*Figure out default_value: */
+-	if (arguments.length==7)default_value=arguments[6];
+-	else default_value=0;
+-	
+-	//Dynamic allocations: {{{
+-	//Retrieve elements and allocate on Module heap: 
+-	
+-	//input
+-	
+-	var dindex=new Int32Array(MatrixToList(indexin)); var nindex=dindex.length * dindex.BYTES_PER_ELEMENT;
+-	var dindexPtr= Module._malloc(nindex); var indexHeap = new Uint8Array(Module.HEAPU8.buffer,dindexPtr,nindex);
+-	indexHeap.set(new Uint8Array(dindex.buffer)); var index=indexHeap.byteOffset;
+-
+-	var dx=new Float64Array(xin); var nx=dx.length * dx.BYTES_PER_ELEMENT;
+-	var dxPtr= Module._malloc(nx); var dxHeap = new Uint8Array(Module.HEAPU8.buffer,dxPtr,nx);
+-	dxHeap.set(new Uint8Array(dx.buffer)); var x=dxHeap.byteOffset;
+-	
+-	var dy=new Float64Array(yin); var ny=dy.length * dy.BYTES_PER_ELEMENT;
+-	var dyPtr= Module._malloc(nx); var dyHeap = new Uint8Array(Module.HEAPU8.buffer,dyPtr,ny);
+-	dyHeap.set(new Uint8Array(dy.buffer)); var y=dyHeap.byteOffset;
+-	
+-	var ddata=new Float64Array(datain); var ndata=ddata.length * ddata.BYTES_PER_ELEMENT;
+-	var ddataPtr= Module._malloc(ndata); var ddataHeap = new Uint8Array(Module.HEAPU8.buffer,ddataPtr,ndata);
+-	ddataHeap.set(new Uint8Array(ddata.buffer)); var data=ddataHeap.byteOffset;
+-	
+-	var dx_interp=new Float64Array(x_interpin); var nx_interp=dx_interp.length * dx_interp.BYTES_PER_ELEMENT;
+-	var dx_interpPtr= Module._malloc(nx_interp); var dx_interpHeap = new Uint8Array(Module.HEAPU8.buffer,dx_interpPtr,nx_interp);
+-	dx_interpHeap.set(new Uint8Array(dx_interp.buffer)); var x_interp=dx_interpHeap.byteOffset;
+-	
+-	var dy_interp=new Float64Array(y_interpin); var ny_interp=dy_interp.length * dy_interp.BYTES_PER_ELEMENT;
+-	var dy_interpPtr= Module._malloc(ny_interp); var dy_interpHeap = new Uint8Array(Module.HEAPU8.buffer,dy_interpPtr,ny_interp);
+-	dy_interpHeap.set(new Uint8Array(dy_interp.buffer)); var y_interp=dy_interpHeap.byteOffset;
+-	
+-	nel=indexin.length;
+-	nods=xin.length;
+-	nods_interp=x_interpin.length;
+-
+-	//output
+-	var data_interp;
+-	var pdata_interp= Module._malloc(4); 
+-	//}}}
+-
+-	//Declare InterpFromMeshToMesh2d module: 
+-	InterpFromMeshToMesh2dModule = Module.cwrap('InterpFromMeshToMesh2dModule','number',['number','number','number','number','number','number','number','number','number','number','number']);
+-	
+-	//Call InterpFromMeshToMesh2d module: 
+-	InterpFromMeshToMesh2dModule(pdata_interp,index,x,y,data,x_interp,y_interp,nel,nods,nods_interp,default_value);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	//recover mesh: 
+-	var data_interpptr = Module.getValue(pdata_interp,'i32');
+-	data_interp = Module.HEAPF64.slice(data_interpptr /8, data_interpptr/8 + nods_interp);
+-	/*}}}*/
+-
+-	/*Free ressources: */
+-	Module._free(pdata_interp); 
+-
+-	return data_interp;
+-}
+-function IssmConfig(string){
+-/*IssmConfig 
+-	   usage: var config = IssmConfig('_HAVE_PETSC_');
+-*/
+-
+-	//output
+-	var pvalue= Module._malloc(4); 
+-	var psvalue= Module._malloc(4); 
+-
+-	//Declare IssmConfig module: 
+-	IssmConfigModule = Module.cwrap('IssmConfigModule','number',['number','string','string']);
+-	
+-	//Call IssmConfig module: 
+-	IssmConfigModule(pvalue, psvalue, string);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	var value = Module.getValue(pvalue, 'double');
+-	/*}}}*/
+-
+-	/*Free ressources: */
+-	Module._free(pvalue); 
+-
+-	return value;
+-}
+-function EnumToString(enumin){
+-/*EnumToString 
+-	   usage: var string = EnumToString(enumin);
+-*/
+-
+-	var pstring= Module._malloc(4); 
+-
+-	//Declare EnumToString module: 
+-	EnumToStringModule = Module.cwrap('EnumToStringModule','number',['number','number']);
+-	
+-	//Call EnumToString module: 
+-	EnumToStringModule(pstring, enumin);
+-	
+-	string_ptr= Module.getValue(pstring,'i32');
+-
+-	/*Free ressources: */
+-	Module._free(pstring); 
+-	
+-	return UTF8ToString(string_ptr);
+-}
+-function StringToEnum(string){
+-/*StringToEnum 
+-	   usage: var enum = StringToEnum(string);
+-*/
+-
+-	var penum= Module._malloc(4); 
+-
+-	//Declare StringToEnum module: 
+-	StringToEnumModule = Module.cwrap('StringToEnumModule','number',['number','string']);
+-	
+-	//Call StringToEnum module: 
+-	StringToEnumModule(penum, string);
+-	
+-	enumout= Module.getValue(penum,'double');
+-
+-	/*Free ressources: */
+-	Module._free(penum); 
+-	
+-	return enumout;
+-}
+-function issm(fid,toolkitstring,solutionstring,modelname){
+-/*issm 
+-	   usage: var output = issm(fid,toolkitstring);
+-	      where: fid is a pointer to a memory buffer created by marshall, toolkitstring is a toolkits 
+-		  string created by ToolkitsToFile and 
+-		  output is a binary buffer to be read by loadresultsfromcluster.
+-*/
+-	
+-	/*variables: */
+-	var poutput,output,poutputsize,outputsize;
+-	var dbinaryPtr,binHeap,binary,binarybuffer,nb
+-
+-	/*recover input buffer: */
+-	binarybuffer=fid.rawbuffer(); //binarybuffer is now an arraybuffer
+-	nb = fid.ptr; //size of array buffer in bytes.
+-
+-	/*dyanmically allocate the raw buffer onto the Module heap: */
+-	dbinaryPtr= Module._malloc(nb); binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
+-	binHeap.set(new Uint8Array(binarybuffer)); binary=binHeap.byteOffset;
+-
+-	/*allocate output pointers: */
+-	poutputsize = Module._malloc(4); 
+-	poutput = Module._malloc(4); 
+-
+-	//Declare TriMesh module: 
+-	issmmodule= Module.cwrap('IssmModule','number',['number','number','number','number','string','string','string']);
+-	
+-	//Call issm:
+-	issmmodule(poutput, poutputsize,binary, nb, toolkitstring,solutionstring,modelname);
+-
+-	//recover outputs from pointers: 
+-	var outputsize = Module.getValue(poutputsize,'i32');
+-	
+-	var outputptr = Module.getValue(poutput,'i32');
+-	output = Module.HEAP8.slice(outputptr, outputptr + outputsize);
+-	
+-	return [output,outputsize];
+-}
+-var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.length;i++){if(!Runtime.functionPointers[i]){Runtime.functionPointers[i]=func;return 2*(1+i)}}throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}),removeFunction:(function(index){Runtime.functionPointers[(index-2)/2]=null}),warnOnce:(function(text){if(!Runtime.warnOnce.shown)Runtime.warnOnce.shown={};if(!Runtime.warnOnce.shown[text]){Runtime.warnOnce.shown[text]=1;Module.printErr(text)}}),funcWrappers:{},getFuncWrapper:(function(func,sig){assert(sig);if(!Runtime.funcWrappers[sig]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,arguments)}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=DYNAMICTOP;DYNAMICTOP=DYNAMICTOP+size|0;DYNAMICTOP=DYNAMICTOP+15&-16;if(DYNAMICTOP>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0){if(opts&&opts.async){EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(stack)}));return}Runtime.stackRestore(stack)}return ret};var sourceRegex=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"="+convertCode.returnValue+";"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();Module["ccall"]=ccall;Module["cwrap"]=cwrap;function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];if(typeof curr==="function"){curr=Runtime.getFunctionIndex(curr)}type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=Runtime.getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}Module["allocate"]=allocate;function getMemory(size){if(!staticSealed)return Runtime.staticAlloc(size);if(typeof _sbrk!=="undefined"&&!_sbrk.called||!runtimeInitialized)return Runtime.dynamicAlloc(size);return _malloc(size)}Module["getMemory"]=getMemory;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a<i;a++)pre+=" ";Module.print(pre+"^")}function parseNested(){i++;if(func[i]==="K")i++;var parts=[];while(func[i]!=="E"){if(func[i]==="S"){i++;var next=func.indexOf("_",i);var num=func.substring(i,next)||0;parts.push(subs[num]||"?");i=next+1;continue}if(func[i]==="C"){parts.push(parts[parts.length-1]);i+=2;continue}var size=parseInt(func.substr(i));var pre=size.toString().length;if(!size||!pre){i--;break}var curr=func.substr(i+pre,size);parts.push(curr);subs.push(curr);i+=pre+size}i++;return parts}function parse(rawList,limit,allowVoid){limit=limit||Infinity;var ret="",list=[];function flushList(){return"("+list.join(", ")+")"}var name;if(func[i]==="N"){name=parseNested().join("::");limit--;if(limit===0)return rawList?[name]:name}else{if(func[i]==="K"||first&&func[i]==="L")i++;var size=parseInt(func.substr(i));if(size){var pre=size.toString().length;name=func.substr(i+pre,size);i+=pre+size}}first=false;if(func[i]==="I"){i++;var iList=parse(true);var iRet=parse(true,1,true);ret+=iRet[0]+" "+name+"<"+iList.join(", ")+">"}else{ret=name}paramLoop:while(i<func.length&&limit-->0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){var OLD_TOTAL_MEMORY=TOTAL_MEMORY;var LIMIT=Math.pow(2,31);if(DYNAMICTOP>=LIMIT)return false;while(TOTAL_MEMORY<=DYNAMICTOP){if(TOTAL_MEMORY<LIMIT/2){TOTAL_MEMORY=alignMemoryPage(2*TOTAL_MEMORY)}else{var last=TOTAL_MEMORY;TOTAL_MEMORY=alignMemoryPage((3*TOTAL_MEMORY+LIMIT)/4);if(TOTAL_MEMORY<=last)return false}}TOTAL_MEMORY=Math.max(TOTAL_MEMORY,16*1024*1024);if(TOTAL_MEMORY>=LIMIT)return false;try{if(ArrayBuffer.transfer){buffer=ArrayBuffer.transfer(buffer,TOTAL_MEMORY)}else{var oldHEAP8=HEAP8;buffer=new ArrayBuffer(TOTAL_MEMORY)}}catch(e){return false}var success=_emscripten_replace_memory(buffer);if(!success)return false;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer);if(!ArrayBuffer.transfer){HEAP8.set(oldHEAP8)}return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;var totalMemory=64*1024;while(totalMemory<TOTAL_MEMORY||totalMemory<2*TOTAL_STACK){if(totalMemory<16*1024*1024){totalMemory*=2}else{totalMemory+=16*1024*1024}}totalMemory=Math.max(totalMemory,16*1024*1024);if(totalMemory!==TOTAL_MEMORY){TOTAL_MEMORY=totalMemory}assert(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&!!(new Int32Array(1))["subarray"]&&!!(new Int32Array(1))["set"],"JS engine does not provide full typed array support");var buffer;if(Module["buffer"]){buffer=Module["buffer"];assert(buffer.byteLength===TOTAL_MEMORY,"provided buffer should be "+TOTAL_MEMORY+" bytes, but it is "+buffer.byteLength)}else{buffer=new ArrayBuffer(TOTAL_MEMORY)}HEAP8=new Int8Array(buffer);HEAP16=new Int16Array(buffer);HEAP32=new Int32Array(buffer);HEAPU8=new Uint8Array(buffer);HEAPU16=new Uint16Array(buffer);HEAPU32=new Uint32Array(buffer);HEAPF32=new Float32Array(buffer);HEAPF64=new Float64Array(buffer);HEAP32[0]=255;assert(HEAPU8[0]===255&&HEAPU8[3]===0,"Typed arrays 2 must be run on a little-endian system");Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i<array.length){var chr=array[i];HEAP8[buffer+i>>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i<array.length;i++){HEAP8[buffer++>>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function reSign(value,bits,ignore){if(value<=0){return value}var half=bits<=32?Math.abs(1<<bits-1):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+160064;__ATINIT__.push({func:(function(){__GLOBAL__I_000101()})},{func:(function(){__GLOBAL__sub_I_Mesh_cpp()})},{func:(function(){__GLOBAL__sub_I_Geometry_cpp()})},{func:(function(){__GLOBAL__sub_I_iostream_cpp()})});allocate([156,164,0,0,227,209,0,0,208,99,0,0,0,0,0,0,156,164,0,0,41,210,0,0,144,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,164,0,0,248,250,0,0,152,0,0,0,0,0,0,0,156,164,0,0,11,251,0,0,168,0,0,0,0,0,0,0,116,164,0,0,19,251,0,0,156,164,0,0,170,251,0,0,168,0,0,0,0,0,0,0,156,164,0,0,163,4,1,0,208,0,0,0,0,0,0,0,116,164,0,0,182,4,1,0,156,164,0,0,189,4,1,0,208,0,0,0,0,0,0,0,156,164,0,0,178,5,1,0,248,0,0,0,0,0,0,0,156,164,0,0,215,5,1,0,168,0,0,0,0,0,0,0,156,164,0,0,24,6,1,0,248,0,0,0,0,0,0,0,156,164,0,0,13,7,1,0,40,1,0,0,0,0,0,0,116,164,0,0,29,7,1,0,156,164,0,0,232,7,1,0,248,0,0,0,0,0,0,0,156,164,0,0,3,8,1,0,208,0,0,0,0,0,0,0,156,164,0,0,21,8,1,0,96,1,0,0,0,0,0,0,156,164,0,0,236,8,1,0,168,0,0,0,0,0,0,0,156,164,0,0,78,9,1,0,128,1,0,0,0,0,0,0,156,164,0,0,181,10,1,0,168,0,0,0,0,0,0,0,156,164,0,0,53,12,1,0,160,1,0,0,0,0,0,0,116,164,0,0,71,12,1,0,156,164,0,0,31,13,1,0,168,0,0,0,0,0,0,0,156,164,0,0,198,14,1,0,168,0,0,0,0,0,0,0,196,164,0,0,110,15,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,232,1,0,0,2,4,0,0,116,164,0,0,224,20,1,0,196,164,0,0,209,21,1,0,0,0,0,0,3,0,0,0,200,1,0,0,2,0,0,0,24,2,0,0,2,48,0,0,32,2,0,0,2,0,0,0,116,164,0,0,75,22,1,0,116,164,0,0,67,22,1,0,196,164,0,0,139,24,1,0,0,0,0,0,3,0,0,0,200,1,0,0,2,0,0,0,24,2,0,0,2,48,0,0,80,2,0,0,2,0,0,0,116,164,0,0,137,28,1,0,196,164,0,0,141,29,1,0,0,0,0,0,3,0,0,0,200,1,0,0,2,0,0,0,24,2,0,0,2,48,0,0,128,2,0,0,2,0,0,0,116,164,0,0,57,30,1,0,196,164,0,0,116,33,1,0,0,0,0,0,3,0,0,0,200,1,0,0,2,0,0,0,24,2,0,0,2,48,0,0,176,2,0,0,2,0,0,0,116,164,0,0,29,37,1,0,196,164,0,0,95,40,1,0,0,0,0,0,2,0,0,0,96,1,0,0,2,0,0,0,32,2,0,0,2,0,0,0,196,164,0,0,113,41,1,0,0,0,0,0,2,0,0,0,96,1,0,0,2,0,0,0,80,2,0,0,2,0,0,0,156,164,0,0,75,42,1,0,96,1,0,0,0,0,0,0,156,164,0,0,153,43,1,0,96,1,0,0,0,0,0,0,156,164,0,0,236,44,1,0,96,1,0,0,0,0,0,0,156,164,0,0,241,45,1,0,96,1,0,0,0,0,0,0,156,164,0,0,224,46,1,0,96,1,0,0,0,0,0,0,156,164,0,0,164,48,1,0,88,3,0,0,0,0,0,0,196,164,0,0,63,49,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,232,1,0,0,2,4,0,0,156,164,0,0,149,49,1,0,88,3,0,0,0,0,0,0,156,164,0,0,247,54,1,0,128,1,0,0,0,0,0,0,156,164,0,0,191,55,1,0,128,1,0,0,0,0,0,0,156,164,0,0,200,56,1,0,184,3,0,0,0,0,0,0,196,164,0,0,36,57,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,232,1,0,0,2,4,0,0,156,164,0,0,124,57,1,0,184,3,0,0,0,0,0,0,156,164,0,0,102,58,1,0,184,3,0,0,0,0,0,0,156,164,0,0,62,63,1,0,208,0,0,0,0,0,0,0,156,164,0,0,41,64,1,0,208,0,0,0,0,0,0,0,156,164,0,0,41,65,1,0,208,0,0,0,0,0,0,0,156,164,0,0,73,66,1,0,208,0,0,0,0,0,0,0,156,164,0,0,11,67,1,0,208,0,0,0,0,0,0,0,156,164,0,0,100,68,1,0,208,0,0,0,0,0,0,0,156,164,0,0,51,69,1,0,208,0,0,0,0,0,0,0,156,164,0,0,41,70,1,0,208,0,0,0,0,0,0,0,156,164,0,0,29,71,1,0,208,0,0,0,0,0,0,0,156,164,0,0,73,74,1,0,208,0,0,0,0,0,0,0,156,164,0,0,126,75,1,0,208,0,0,0,0,0,0,0,156,164,0,0,109,76,1,0,208,0,0,0,0,0,0,0,156,164,0,0,62,79,1,0,208,0,0,0,0,0,0,0,156,164,0,0,71,82,1,0,168,0,0,0,0,0,0,0,156,164,0,0,191,153,1,0,128,98,0,0,0,0,0,0,156,164,0,0,64,170,1,0,248,0,0,0,0,0,0,0,156,164,0,0,180,191,1,0,96,1,0,0,0,0,0,0,156,164,0,0,208,203,1,0,184,3,0,0,0,0,0,0,196,164,0,0,87,211,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,56,5,0,0,2,4,0,0,116,164,0,0,102,211,1,0,196,164,0,0,246,211,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,56,5,0,0,2,4,0,0,196,164,0,0,141,212,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,56,5,0,0,2,4,0,0,196,164,0,0,82,213,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,56,5,0,0,2,4,0,0,196,164,0,0,3,214,1,0,0,0,0,0,2,0,0,0,168,0,0,0,2,0,0,0,56,5,0,0,2,4,0,0,196,164,0,0,5,215,1,0,0,0,0,0,2,0,0,0,96,1,0,0,2,0,0,0,176,2,0,0,2,0,0,0,196,164,0,0,102,216,1,0,0,0,0,0,2,0,0,0,96,1,0,0,2,0,0,0,128,2,0,0,2,0,0,0,156,164,0,0,74,231,1,0,16,6,0,0,0,0,0,0,116,164,0,0,200,231,1,0,156,164,0,0,210,231,1,0,16,6,0,0,0,0,0,0,156,164,0,0,82,232,1,0,16,6,0,0,0,0,0,0,156,164,0,0,252,233,1,0,16,6,0,0,0,0,0,0,156,164,0,0,161,234,1,0,16,6,0,0,0,0,0,0,156,164,0,0,109,235,1,0,16,6,0,0,0,0,0,0,156,164,0,0,229,235,1,0,16,6,0,0,0,0,0,0,156,164,0,0,119,236,1,0,16,6,0,0,0,0,0,0,156,164,0,0,231,236,1,0,16,6,0,0,0,0,0,0,156,164,0,0,202,239,1,0,16,6,0,0,0,0,0,0,156,164,0,0,228,246,1,0,16,6,0,0,0,0,0,0,156,164,0,0,249,247,1,0,16,6,0,0,0,0,0,0,156,164,0,0,12,249,1,0,16,6,0,0,0,0,0,0,156,164,0,0,16,251,1,0,16,6,0,0,0,0,0,0,156,164,0,0,116,252,1,0,16,6,0,0,0,0,0,0,156,164,0,0,61,253,1,0,16,6,0,0,0,0,0,0,156,164,0,0,150,254,1,0,16,6,0,0,0,0,0,0,156,164,0,0,104,0,2,0,16,6,0,0,0,0,0,0,156,164,0,0,152,2,2,0,16,6,0,0,0,0,0,0,156,164,0,0,82,3,2,0,16,6,0,0,0,0,0,0,156,164,0,0,176,3,2,0,16,6,0,0,0,0,0,0,156,164,0,0,164,5,2,0,16,6,0,0,0,0,0,0,156,164,0,0,113,11,2,0,16,6,0,0,0,0,0,0,156,164,0,0,51,12,2,0,16,6,0,0,0,0,0,0,156,164,0,0,211,12,2,0,16,6,0,0,0,0,0,0,156,164,0,0,65,13,2,0,16,6,0,0,0,0,0,0,156,164,0,0,173,13,2,0,16,6,0,0,0,0,0,0,156,164,0,0,21,14,2,0,16,6,0,0,0,0,0,0,156,164,0,0,212,17,2,0,16,6,0,0,0,0,0,0,156,164,0,0,48,18,2,0,16,6,0,0,0,0,0,0,156,164,0,0,200,18,2,0,16,6,0,0,0,0,0,0,156,164,0,0,241,20,2,0,16,6,0,0,0,0,0,0,156,164,0,0,137,21,2,0,16,6,0,0,0,0,0,0,156,164,0,0,78,23,2,0,16,6,0,0,0,0,0,0,156,164,0,0,164,25,2,0,208,0,0,0,0,0,0,0,156,164,0,0,116,26,2,0,16,6,0,0,0,0,0,0,156,164,0,0,22,28,2,0,88,8,0,0,0,0,0,0,116,164,0,0,179,28,2,0,156,164,0,0,186,28,2,0,88,8,0,0,0,0,0,0,156,164,0,0,72,30,2,0,88,8,0,0,0,0,0,0,156,164,0,0,91,31,2,0,88,8,0,0,0,0,0,0,156,164,0,0,113,47,2,0,88,3,0,0,0,0,0,0,156,164,0,0,118,49,2,0,184,3,0,0,0,0,0,0,156,164,0,0,65,50,2,0,184,3,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,154,153,153,153,153,153,233,191,205,204,204,204,204,204,220,63,205,204,204,204,204,204,220,63,205,204,204,204,204,204,220,63,205,204,204,204,204,204,220,63,238,126,249,198,76,241,138,191,29,54,173,178,122,56,127,63,29,54,173,178,122,56,127,63,29,54,173,178,122,56,127,63,29,54,173,178,122,56,127,63,139,8,63,15,121,124,153,63,139,8,63,15,121,124,153,63,139,8,63,15,121,124,153,63,139,8,63,15,121,124,153,63,139,8,63,15,121,124,153,63,139,8,63,15,121,124,153,63,133,76,30,60,175,2,159,63,66,140,175,248,138,175,120,63,66,140,175,248,138,175,120,63,66,140,175,248,138,175,120,63,66,140,175,248,138,175,120,63,104,126,211,223,118,217,135,63,104,126,211,223,118,217,135,63,104,126,211,223,118,217,135,63,104,126,211,223,118,217,135,63,102,70,103,231,128,108,134,63,102,70,103,231,128,108,134,63,102,70,103,231,128,108,134,63,102,70,103,231,128,108,134,63,102,70,103,231,128,108,134,63,102,70,103,231,128,108,134,63,76,191,153,156,1,65,123,63,76,191,153,156,1,65,123,63,76,191,153,156,1,65,123,63,76,191,153,156,1,65,123,63,86,97,201,41,123,132,91,63,86,97,201,41,123,132,91,63,86,97,201,41,123,132,91,63,86,97,201,41,123,132,91,63,1,52,112,48,47,229,130,63,1,52,112,48,47,229,130,63,1,52,112,48,47,229,130,63,1,52,112,48,47,229,130,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,172,6,117,80,7,117,128,63,0,0,0,0,0,0,208,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,54,249,39,42,174,187,226,63,0,0,0,0,0,0,208,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,208,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,76,146,36,73,146,36,233,63,136,73,117,238,175,192,185,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,158,173,98,4,212,143,217,63,0,0,0,0,0,0,208,63,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,0,0,0,0,0,0,0,0,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,67,23,93,116,209,69,231,63,150,222,182,108,164,189,219,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,168,133,36,77,110,9,177,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,200,85,188,244,214,203,214,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,136,81,92,148,101,24,236,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,201,181,118,141,149,227,160,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,0,0,0,0,0,0,208,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,54,249,39,42,174,187,226,63,37,9,32,29,109,176,193,63,0,0,0,0,0,0,208,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,224,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,208,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,76,146,36,73,146,36,233,63,115,36,73,146,36,73,178,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,0,0,0,0,0,0,208,63,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,0,0,0,0,0,0,0,0,79,85,85,85,85,85,213,63,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,67,23,93,116,209,69,231,63,76,23,93,116,209,69,183,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,200,85,188,244,214,203,214,63,220,198,215,92,27,120,203,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,136,81,92,148,101,24,236,63,163,247,104,147,55,211,164,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,201,181,118,141,149,227,160,63,200,13,27,26,47,161,212,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,0,0,0,0,0,0,208,63,37,9,32,29,109,176,193,63,54,249,39,42,174,187,226,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,0,0,0,0,0,0,208,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,224,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,208,63,115,36,73,146,36,73,178,63,76,146,36,73,146,36,233,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,136,73,117,238,175,192,185,63,158,173,98,4,212,143,217,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,0,0,0,0,0,0,208,63,79,85,85,85,85,85,213,63,0,0,0,0,0,0,0,0,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,76,23,93,116,209,69,183,63,67,23,93,116,209,69,231,63,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,150,222,182,108,164,189,219,63,168,133,36,77,110,9,177,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,220,198,215,92,27,120,203,63,200,85,188,244,214,203,214,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,163,247,104,147,55,211,164,63,136,81,92,148,101,24,236,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,200,13,27,26,47,161,212,63,201,181,118,141,149,227,160,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,0,0,0,0,0,0,208,63,54,249,39,42,174,187,226,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,37,9,32,29,109,176,193,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,224,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,0,0,0,0,0,0,208,63,76,146,36,73,146,36,233,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,115,36,73,146,36,73,178,63,158,173,98,4,212,143,217,63,158,173,98,4,212,143,217,63,158,173,98,4,212,143,217,63,136,73,117,238,175,192,185,63,136,73,117,238,175,192,185,63,136,73,117,238,175,192,185,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,0,0,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,79,85,85,85,85,85,213,63,67,23,93,116,209,69,231,63,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,76,23,93,116,209,69,183,63,168,133,36,77,110,9,177,63,168,133,36,77,110,9,177,63,168,133,36,77,110,9,177,63,150,222,182,108,164,189,219,63,150,222,182,108,164,189,219,63,150,222,182,108,164,189,219,63,200,85,188,244,214,203,214,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,220,198,215,92,27,120,203,63,136,81,92,148,101,24,236,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,163,247,104,147,55,211,164,63,201,181,118,141,149,227,160,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,200,13,27,26,47,161,212,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,184,115,21,97,22,76,176,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,115,248,15,189,79,66,209,63,225,166,50,137,210,75,227,63,169,76,88,232,122,182,251,63,21,51,144,69,167,121,226,63,21,51,144,69,167,121,226,63,21,51,144,69,167,121,226,63,59,86,99,69,74,45,239,191,218,79,177,92,21,222,236,63,218,79,177,92,21,222,236,63,218,79,177,92,21,222,236,63,30,52,209,223,26,195,216,63,30,52,209,223,26,195,216,63,30,52,209,223,26,195,216,63,61,100,158,86,103,96,200,63,61,100,158,86,103,96,200,63,61,100,158,86,103,96,200,63,95,171,130,55,8,241,216,63,26,181,42,55,36,90,205,63,26,181,42,55,36,90,205,63,26,181,42,55,36,90,205,63,154,79,20,186,200,235,203,63,154,79,20,186,200,235,203,63,154,79,20,186,200,235,203,63,93,192,194,163,77,228,201,63,93,192,194,163,77,228,201,63,93,192,194,163,77,228,201,63,168,232,251,166,125,139,182,63,168,232,251,166,125,139,182,63,168,232,251,166,125,139,182,63,247,11,128,79,72,94,194,63,247,11,128,79,72,94,194,63,247,11,128,79,72,94,194,63,247,11,128,79,72,94,194,63,247,11,128,79,72,94,194,63,247,11,128,79,72,94,194,63,180,166,73,160,124,148,208,191,247,239,121,134,152,119,211,63,247,239,121,134,152,119,211,63,247,239,121,134,152,119,211,63,255,78,92,208,136,167,183,63,255,78,92,208,136,167,183,63,255,78,92,208,136,167,183,63,164,68,253,5,168,24,193,63,164,68,253,5,168,24,193,63,164,68,253,5,168,24,193,63,164,68,253,5,168,24,193,63,164,68,253,5,168,24,193,63,164,68,253,5,168,24,193,63,130,94,20,240,192,254,207,63,199,152,13,115,1,21,197,63,199,152,13,115,1,21,197,63,199,152,13,115,1,21,197,63,155,150,199,75,48,226,198,63,155,150,199,75,48,226,198,63,155,150,199,75,48,226,198,63,168,78,124,89,214,200,172,63,168,78,124,89,214,200,172,63,168,78,124,89,214,200,172,63,37,126,11,226,234,37,168,63,37,126,11,226,234,37,168,63,37,126,11,226,234,37,168,63,37,126,11,226,234,37,168,63,37,126,11,226,234,37,168,63,37,126,11,226,234,37,168,63,107,118,124,23,6,137,197,63,203,232,135,131,181,201,171,63,203,232,135,131,181,201,171,63,203,232,135,131,181,201,171,63,247,55,96,227,42,65,193,63,247,55,96,227,42,65,193,63,247,55,96,227,42,65,193,63,204,132,253,113,121,168,193,63,204,132,253,113,121,168,193,63,204,132,253,113,121,168,193,63,81,169,122,222,186,174,166,63,81,169,122,222,186,174,166,63,81,169,122,222,186,174,166,63,220,152,227,245,47,49,179,63,220,152,227,245,47,49,179,63,220,152,227,245,47,49,179,63,220,152,227,245,47,49,179,63,220,152,227,245,47,49,179,63,220,152,227,245,47,49,179,63,243,127,148,143,115,34,196,63,229,150,34,66,211,72,176,63,229,150,34,66,211,72,176,63,229,150,34,66,211,72,176,63,106,116,143,60,120,24,180,63,106,116,143,60,120,24,180,63,106,116,143,60,120,24,180,63,32,105,216,206,111,33,192,63,32,105,216,206,111,33,192,63,32,105,216,206,111,33,192,63,32,105,216,206,111,33,192,63,32,105,216,206,111,33,192,63,32,105,216,206,111,33,192,63,158,243,248,36,242,30,169,63,158,243,248,36,242,30,169,63,158,243,248,36,242,30,169,63,158,243,248,36,242,30,169,63,158,243,248,36,242,30,169,63,158,243,248,36,242,30,169,63,26,235,35,134,224,181,144,63,26,235,35,134,224,181,144,63,26,235,35,134,224,181,144,63,26,235,35,134,224,181,144,63,26,235,35,134,224,181,144,63,26,235,35,134,224,181,144,63,113,69,99,143,119,78,90,63,113,69,99,143,119,78,90,63,113,69,99,143,119,78,90,63,237,94,74,205,175,26,193,63,237,94,74,205,175,26,193,63,237,94,74,205,175,26,193,63,200,14,97,214,217,77,186,63,200,14,97,214,217,77,186,63,200,14,97,214,217,77,186,63,246,46,50,56,94,11,176,63,246,46,50,56,94,11,176,63,246,46,50,56,94,11,176,63,99,93,149,249,39,58,152,63,99,93,149,249,39,58,152,63,99,93,149,249,39,58,152,63,163,146,243,163,223,52,183,63,163,146,243,163,223,52,183,63,163,146,243,163,223,52,183,63,163,146,243,163,223,52,183,63,163,146,243,163,223,52,183,63,163,146,243,163,223,52,183,63,238,147,207,94,31,93,162,63,238,147,207,94,31,93,162,63,238,147,207,94,31,93,162,63,238,147,207,94,31,93,162,63,238,147,207,94,31,93,162,63,238,147,207,94,31,93,162,63,25,230,176,161,141,209,166,63,25,230,176,161,141,209,166,63,25,230,176,161,141,209,166,63,195,238,210,60,157,95,179,63,195,238,210,60,157,95,179,63,195,238,210,60,157,95,179,63,143,23,176,138,36,223,187,63,143,23,176,138,36,223,187,63,143,23,176,138,36,223,187,63,34,12,233,212,135,219,174,63,34,12,233,212,135,219,174,63,34,12,233,212,135,219,174,63,69,190,84,146,138,223,133,63,69,190,84,146,138,223,133,63,69,190,84,146,138,223,133,63,237,192,231,182,164,230,177,63,237,192,231,182,164,230,177,63,237,192,231,182,164,230,177,63,237,192,231,182,164,230,177,63,237,192,231,182,164,230,177,63,237,192,231,182,164,230,177,63,227,133,106,133,130,211,163,63,227,133,106,133,130,211,163,63,227,133,106,133,130,211,163,63,227,133,106,133,130,211,163,63,227,133,106,133,130,211,163,63,227,133,106,133,130,211,163,63,75,242,89,200,96,182,158,63,75,242,89,200,96,182,158,63,75,242,89,200,96,182,158,63,75,242,89,200,96,182,158,63,75,242,89,200,96,182,158,63,75,242,89,200,96,182,158,63,36,223,233,3,189,73,183,63,226,172,231,135,182,1,148,63,226,172,231,135,182,1,148,63,226,172,231,135,182,1,148,63,136,143,202,113,223,221,171,63,136,143,202,113,223,221,171,63,136,143,202,113,223,221,171,63,40,203,114,103,71,223,180,63,40,203,114,103,71,223,180,63,40,203,114,103,71,223,180,63,116,77,33,3,82,0,181,63,116,77,33,3,82,0,181,63,116,77,33,3,82,0,181,63,19,9,188,220,193,163,171,63,19,9,188,220,193,163,171,63,19,9,188,220,193,163,171,63,254,100,114,240,190,74,140,63,254,100,114,240,190,74,140,63,254,100,114,240,190,74,140,63,206,144,184,98,185,86,176,63,206,144,184,98,185,86,176,63,206,144,184,98,185,86,176,63,206,144,184,98,185,86,176,63,206,144,184,98,185,86,176,63,206,144,184,98,185,86,176,63,228,17,46,212,19,221,158,63,228,17,46,212,19,221,158,63,228,17,46,212,19,221,158,63,228,17,46,212,19,221,158,63,228,17,46,212,19,221,158,63,228,17,46,212,19,221,158,63,224,183,151,211,157,135,155,63,224,183,151,211,157,135,155,63,224,183,151,211,157,135,155,63,224,183,151,211,157,135,155,63,224,183,151,211,157,135,155,63,224,183,151,211,157,135,155,63,154,247,50,145,21,104,163,63,154,247,50,145,21,104,163,63,154,247,50,145,21,104,163,63,210,233,226,232,184,19,173,63,210,233,226,232,184,19,173,63,210,233,226,232,184,19,173,63,194,198,78,54,247,244,182,63,194,198,78,54,247,244,182,63,194,198,78,54,247,244,182,63,108,140,55,68,242,177,178,63,108,140,55,68,242,177,178,63,108,140,55,68,242,177,178,63,160,86,179,247,146,153,153,63,160,86,179,247,146,153,153,63,160,86,179,247,146,153,153,63,6,172,226,27,233,118,129,63,6,172,226,27,233,118,129,63,6,172,226,27,233,118,129,63,79,59,18,199,179,223,165,63,79,59,18,199,179,223,165,63,79,59,18,199,179,223,165,63,79,59,18,199,179,223,165,63,79,59,18,199,179,223,165,63,79,59,18,199,179,223,165,63,22,202,150,42,81,26,177,63,22,202,150,42,81,26,177,63,22,202,150,42,81,26,177,63,22,202,150,42,81,26,177,63,22,202,150,42,81,26,177,63,22,202,150,42,81,26,177,63,166,222,156,41,194,154,153,63,166,222,156,41,194,154,153,63,166,222,156,41,194,154,153,63,166,222,156,41,194,154,153,63,166,222,156,41,194,154,153,63,166,222,156,41,194,154,153,63,64,180,227,137,193,197,129,63,64,180,227,137,193,197,129,63,64,180,227,137,193,197,129,63,64,180,227,137,193,197,129,63,64,180,227,137,193,197,129,63,64,180,227,137,193,197,129,63,172,249,140,19,207,50,107,63,172,249,140,19,207,50,107,63,172,249,140,19,207,50,107,63,49,66,102,16,200,158,179,63,49,66,102,16,200,158,179,63,49,66,102,16,200,158,179,63,34,14,30,111,69,178,182,63,34,14,30,111,69,178,182,63,34,14,30,111,69,178,182,63,25,161,96,98,171,1,165,63,25,161,96,98,171,1,165,63,25,161,96,98,171,1,165,63,40,72,253,220,45,146,151,63,40,72,253,220,45,146,151,63,40,72,253,220,45,146,151,63,133,158,25,200,117,216,128,63,133,158,25,200,117,216,128,63,133,158,25,200,117,216,128,63,251,33,188,49,226,23,177,63,251,33,188,49,226,23,177,63,251,33,188,49,226,23,177,63,251,33,188,49,226,23,177,63,251,33,188,49,226,23,177,63,251,33,188,49,226,23,177,63,238,55,70,46,160,34,168,63,238,55,70,46,160,34,168,63,238,55,70,46,160,34,168,63,238,55,70,46,160,34,168,63,238,55,70,46,160,34,168,63,238,55,70,46,160,34,168,63,57,62,136,229,30,246,110,63,57,62,136,229,30,246,110,63,57,62,136,229,30,246,110,63,57,62,136,229,30,246,110,63,57,62,136,229,30,246,110,63,57,62,136,229,30,246,110,63,254,193,111,197,53,18,163,63,254,193,111,197,53,18,163,63,254,193,111,197,53,18,163,63,254,193,111,197,53,18,163,63,254,193,111,197,53,18,163,63,254,193,111,197,53,18,163,63,220,36,157,53,168,56,139,63,220,36,157,53,168,56,139,63,220,36,157,53,168,56,139,63,220,36,157,53,168,56,139,63,220,36,157,53,168,56,139,63,220,36,157,53,168,56,139,63,19,103,126,114,240,200,180,63,129,76,79,235,34,185,134,63,129,76,79,235,34,185,134,63,129,76,79,235,34,185,134,63,193,28,27,30,155,126,178,63,193,28,27,30,155,126,178,63,193,28,27,30,155,126,178,63,2,10,153,197,254,216,167,63,2,10,153,197,254,216,167,63,2,10,153,197,254,216,167,63,104,92,95,148,136,174,178,63,104,92,95,148,136,174,178,63,104,92,95,148,136,174,178,63,19,87,141,240,194,154,170,63,19,87,141,240,194,154,170,63,19,87,141,240,194,154,170,63,100,113,7,41,130,47,153,63,100,113,7,41,130,47,153,63,100,113,7,41,130,47,153,63,224,225,7,213,107,106,121,63,224,225,7,213,107,106,121,63,224,225,7,213,107,106,121,63,197,224,175,41,69,16,173,63,197,224,175,41,69,16,173,63,197,224,175,41,69,16,173,63,197,224,175,41,69,16,173,63,197,224,175,41,69,16,173,63,197,224,175,41,69,16,173,63,133,252,86,88,37,34,155,63,133,252,86,88,37,34,155,63,133,252,86,88,37,34,155,63,133,252,86,88,37,34,155,63,133,252,86,88,37,34,155,63,133,252,86,88,37,34,155,63,119,62,224,142,221,237,112,63,119,62,224,142,221,237,112,63,119,62,224,142,221,237,112,63,119,62,224,142,221,237,112,63,119,62,224,142,221,237,112,63,119,62,224,142,221,237,112,63,87,49,164,159,177,236,160,63,87,49,164,159,177,236,160,63,87,49,164,159,177,236,160,63,87,49,164,159,177,236,160,63,87,49,164,159,177,236,160,63,87,49,164,159,177,236,160,63,239,107,114,92,125,76,136,63,239,107,114,92,125,76,136,63,239,107,114,92,125,76,136,63,239,107,114,92,125,76,136,63,239,107,114,92,125,76,136,63,239,107,114,92,125,76,136,63,119,111,183,131,6,167,173,63,67,99,139,22,76,17,130,63,67,99,139,22,76,17,130,63,67,99,139,22,76,17,130,63,165,217,145,13,66,5,154,63,165,217,145,13,66,5,154,63,165,217,145,13,66,5,154,63,10,105,244,226,55,152,165,63,10,105,244,226,55,152,165,63,10,105,244,226,55,152,165,63,55,62,60,13,36,150,171,63,55,62,60,13,36,150,171,63,55,62,60,13,36,150,171,63,58,11,128,50,24,184,171,63,58,11,128,50,24,184,171,63,58,11,128,50,24,184,171,63,177,0,126,186,187,1,166,63,177,0,126,186,187,1,166,63,177,0,126,186,187,1,166,63,7,203,47,45,29,238,152,63,7,203,47,45,29,238,152,63,7,203,47,45,29,238,152,63,101,227,209,8,33,170,118,63,101,227,209,8,33,170,118,63,101,227,209,8,33,170,118,63,167,148,71,229,103,205,140,63,167,148,71,229,103,205,140,63,167,148,71,229,103,205,140,63,167,148,71,229,103,205,140,63,167,148,71,229,103,205,140,63,167,148,71,229,103,205,140,63,55,47,50,159,135,197,167,63,55,47,50,159,135,197,167,63,55,47,50,159,135,197,167,63,55,47,50,159,135,197,167,63,55,47,50,159,135,197,167,63,55,47,50,159,135,197,167,63,217,98,21,137,217,94,160,63,217,98,21,137,217,94,160,63,217,98,21,137,217,94,160,63,217,98,21,137,217,94,160,63,217,98,21,137,217,94,160,63,217,98,21,137,217,94,160,63,231,247,106,240,201,17,142,63,231,247,106,240,201,17,142,63,231,247,106,240,201,17,142,63,231,247,106,240,201,17,142,63,231,247,106,240,201,17,142,63,231,247,106,240,201,17,142,63,127,206,120,106,228,56,160,63,127,206,120,106,228,56,160,63,127,206,120,106,228,56,160,63,127,206,120,106,228,56,160,63,127,206,120,106,228,56,160,63,127,206,120,106,228,56,160,63,150,213,62,76,4,165,135,63,150,213,62,76,4,165,135,63,150,213,62,76,4,165,135,63,150,213,62,76,4,165,135,63,150,213,62,76,4,165,135,63,150,213,62,76,4,165,135,63,19,32,87,129,147,82,171,63,42,220,232,103,79,23,144,63,42,220,232,103,79,23,144,63,42,220,232,103,79,23,144,63,252,180,187,220,65,163,160,63,252,180,187,220,65,163,160,63,252,180,187,220,65,163,160,63,12,185,58,93,149,61,161,63,12,185,58,93,149,61,161,63,12,185,58,93,149,61,161,63,9,103,144,117,203,156,168,63,9,103,144,117,203,156,168,63,9,103,144,117,203,156,168,63,244,28,137,177,234,154,172,63,244,28,137,177,234,154,172,63,244,28,137,177,234,154,172,63,28,113,253,38,100,60,166,63,28,113,253,38,100,60,166,63,28,113,253,38,100,60,166,63,24,169,159,61,43,22,155,63,24,169,159,61,43,22,155,63,24,169,159,61,43,22,155,63,61,82,23,32,132,25,136,63,61,82,23,32,132,25,136,63,61,82,23,32,132,25,136,63,168,143,80,40,32,139,111,191,168,143,80,40,32,139,111,191,168,143,80,40,32,139,111,191,134,224,192,63,248,117,134,63,134,224,192,63,248,117,134,63,134,224,192,63,248,117,134,63,134,224,192,63,248,117,134,63,134,224,192,63,248,117,134,63,134,224,192,63,248,117,134,63,0,24,98,20,25,44,168,63,0,24,98,20,25,44,168,63,0,24,98,20,25,44,168,63,0,24,98,20,25,44,168,63,0,24,98,20,25,44,168,63,0,24,98,20,25,44,168,63,216,61,194,47,22,90,159,63,216,61,194,47,22,90,159,63,216,61,194,47,22,90,159,63,216,61,194,47,22,90,159,63,216,61,194,47,22,90,159,63,216,61,194,47,22,90,159,63,5,221,46,138,146,76,160,63,5,221,46,138,146,76,160,63,5,221,46,138,146,76,160,63,5,221,46,138,146,76,160,63,5,221,46,138,146,76,160,63,5,221,46,138,146,76,160,63,218,226,176,212,218,191,140,63,218,226,176,212,218,191,140,63,218,226,176,212,218,191,140,63,218,226,176,212,218,191,140,63,218,226,176,212,218,191,140,63,218,226,176,212,218,191,140,63,51,232,168,172,128,20,139,63,51,232,168,172,128,20,139,63,51,232,168,172,128,20,139,63,51,232,168,172,128,20,139,63,51,232,168,172,128,20,139,63,51,232,168,172,128,20,139,63,218,96,228,204,170,248,20,63,218,96,228,204,170,248,20,63,218,96,228,204,170,248,20,63,218,96,228,204,170,248,20,63,218,96,228,204,170,248,20,63,218,96,228,204,170,248,20,63,191,98,58,139,129,46,173,63,168,202,120,143,162,82,146,63,168,202,120,143,162,82,146,63,168,202,120,143,162,82,146,63,192,158,174,156,109,218,163,63,192,158,174,156,109,218,163,63,192,158,174,156,109,218,163,63,46,229,40,33,30,215,170,63,46,229,40,33,30,215,170,63,46,229,40,33,30,215,170,63,197,98,28,125,41,10,171,63,197,98,28,125,41,10,171,63,197,98,28,125,41,10,171,63,6,234,10,171,180,108,165,63,6,234,10,171,180,108,165,63,6,234,10,171,180,108,165,63,236,15,224,152,208,119,156,63,236,15,224,152,208,119,156,63,236,15,224,152,208,119,156,63,66,48,249,237,141,173,140,63,66,48,249,237,141,173,140,63,66,48,249,237,141,173,140,63,199,21,148,42,5,129,109,63,199,21,148,42,5,129,109,63,199,21,148,42,5,129,109,63,30,44,89,158,169,143,123,63,30,44,89,158,169,143,123,63,30,44,89,158,169,143,123,63,30,44,89,158,169,143,123,63,30,44,89,158,169,143,123,63,30,44,89,158,169,143,123,63,135,143,230,148,238,173,166,63,135,143,230,148,238,173,166,63,135,143,230,148,238,173,166,63,135,143,230,148,238,173,166,63,135,143,230,148,238,173,166,63,135,143,230,148,238,173,166,63,245,53,249,189,176,128,143,63,245,53,249,189,176,128,143,63,245,53,249,189,176,128,143,63,245,53,249,189,176,128,143,63,245,53,249,189,176,128,143,63,245,53,249,189,176,128,143,63,151,247,191,52,76,153,156,63,151,247,191,52,76,153,156,63,151,247,191,52,76,153,156,63,151,247,191,52,76,153,156,63,151,247,191,52,76,153,156,63,151,247,191,52,76,153,156,63,106,214,186,4,213,173,113,63,106,214,186,4,213,173,113,63,106,214,186,4,213,173,113,63,106,214,186,4,213,173,113,63,106,214,186,4,213,173,113,63,106,214,186,4,213,173,113,63,14,200,68,9,141,45,160,63,14,200,68,9,141,45,160,63,14,200,68,9,141,45,160,63,14,200,68,9,141,45,160,63,14,200,68,9,141,45,160,63,14,200,68,9,141,45,160,63,180,42,135,6,222,49,146,63,180,42,135,6,222,49,146,63,180,42,135,6,222,49,146,63,180,42,135,6,222,49,146,63,180,42,135,6,222,49,146,63,180,42,135,6,222,49,146,63,189,181,160,139,97,245,122,63,189,181,160,139,97,245,122,63,189,181,160,139,97,245,122,63,189,181,160,139,97,245,122,63,189,181,160,139,97,245,122,63,189,181,160,139,97,245,122,63,211,138,202,83,185,80,173,63,135,21,116,242,172,154,88,63,135,21,116,242,172,154,88,63,135,21,116,242,172,154,88,63,187,123,10,114,53,174,148,63,187,123,10,114,53,174,148,63,187,123,10,114,53,174,148,63,66,32,126,90,153,73,164,63,66,32,126,90,153,73,164,63,66,32,126,90,153,73,164,63,202,237,215,101,161,0,171,63,202,237,215,101,161,0,171,63,202,237,215,101,161,0,171,63,247,35,114,224,144,40,171,63,247,35,114,224,144,40,171,63,247,35,114,224,144,40,171,63,219,5,106,80,30,156,165,63,219,5,106,80,30,156,165,63,219,5,106,80,30,156,165,63,97,237,52,231,148,95,156,63,97,237,52,231,148,95,156,63,97,237,52,231,148,95,156,63,125,236,50,9,199,78,139,63,125,236,50,9,199,78,139,63,125,236,50,9,199,78,139,63,176,108,115,143,194,239,81,191,176,108,115,143,194,239,81,191,176,108,115,143,194,239,81,191,104,48,239,61,198,216,104,63,104,48,239,61,198,216,104,63,104,48,239,61,198,216,104,63,234,221,229,168,66,52,157,63,234,221,229,168,66,52,157,63,234,221,229,168,66,52,157,63,234,221,229,168,66,52,157,63,234,221,229,168,66,52,157,63,234,221,229,168,66,52,157,63,84,225,51,112,75,42,129,63,84,225,51,112,75,42,129,63,84,225,51,112,75,42,129,63,84,225,51,112,75,42,129,63,84,225,51,112,75,42,129,63,84,225,51,112,75,42,129,63,228,226,156,17,81,226,166,63,228,226,156,17,81,226,166,63,228,226,156,17,81,226,166,63,228,226,156,17,81,226,166,63,228,226,156,17,81,226,166,63,228,226,156,17,81,226,166,63,171,16,87,214,138,12,142,63,171,16,87,214,138,12,142,63,171,16,87,214,138,12,142,63,171,16,87,214,138,12,142,63,171,16,87,214,138,12,142,63,171,16,87,214,138,12,142,63,59,213,209,140,254,70,160,63,59,213,209,140,254,70,160,63,59,213,209,140,254,70,160,63,59,213,209,140,254,70,160,63,59,213,209,140,254,70,160,63,59,213,209,140,254,70,160,63,64,21,169,124,82,253,83,63,64,21,169,124,82,253,83,63,64,21,169,124,82,253,83,63,64,21,169,124,82,253,83,63,64,21,169,124,82,253,83,63,64,21,169,124,82,253,83,63,26,239,108,169,161,239,145,63,26,239,108,169,161,239,145,63,26,239,108,169,161,239,145,63,26,239,108,169,161,239,145,63,26,239,108,169,161,239,145,63,26,239,108,169,161,239,145,63,75,117,252,46,227,90,121,63,75,117,252,46,227,90,121,63,75,117,252,46,227,90,121,63,75,117,252,46,227,90,121,63,75,117,252,46,227,90,121,63,75,117,252,46,227,90,121,63,79,85,85,85,85,85,213,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,88,85,85,85,85,85,229,63,79,85,85,85,85,85,213,63,154,153,153,153,153,153,201,63,154,153,153,153,153,153,201,63,51,51,51,51,51,51,227,63,220,208,11,138,107,138,220,63,220,208,11,138,107,138,220,63,32,121,161,175,163,172,187,63,219,176,29,234,137,113,183,63,219,176,29,234,137,113,183,63,210,147,120,133,157,35,234,63,79,85,85,85,85,85,213,63,191,139,115,189,206,22,222,63,191,139,115,189,206,22,222,63,16,68,199,40,20,147,174,63,119,245,122,156,233,237,185,63,119,245,122,156,233,237,185,63,153,66,225,152,133,132,233,63,145,236,234,200,160,232,207,63,145,236,234,200,160,232,207,63,175,137,138,155,175,11,224,63,196,85,250,5,154,38,176,63,196,85,250,5,154,38,176,63,143,106,129,126,89,246,235,63,196,142,49,125,58,94,228,63,87,27,219,134,208,220,211,63,196,142,49,125,58,94,228,63,87,27,219,134,208,220,211,63,9,57,14,246,211,53,171,63,9,57,14,246,211,53,171,63,79,85,85,85,85,85,213,63,193,30,125,32,130,169,208,63,193,30,125,32,130,169,208,63,125,194,5,191,251,172,222,63,225,59,243,205,93,172,176,63,225,59,243,205,93,172,176,63,8,49,131,140,232,212,235,63,158,80,199,129,34,110,228,63,240,208,88,0,253,5,212,63,158,80,199,129,34,110,228,63,240,208,88,0,253,5,212,63,162,110,196,224,239,237,168,63,162,110,196,224,239,237,168,63,79,85,85,85,85,85,213,63,200,203,128,189,12,101,221,63,200,203,128,189,12,101,221,63,194,161,249,19,154,215,180,63,174,97,63,15,55,213,197,63,174,97,63,15,55,213,197,63,41,79,96,120,100,21,229,63,6,217,12,137,83,225,169,63,6,217,12,137,83,225,169,63,223,100,222,142,213,195,236,63,141,26,100,71,207,79,231,63,34,21,156,49,215,214,208,63,141,26,100,71,207,79,231,63,34,21,156,49,215,214,208,63,142,184,118,243,71,49,129,63,142,184,118,243,71,49,129,63,79,85,85,85,85,85,213,63,9,106,88,89,245,86,223,63,9,106,88,89,245,86,223,63,5,192,242,212,84,33,149,63,38,150,56,159,70,249,219,63,38,150,56,159,70,249,219,63,142,167,29,131,229,26,192,63,55,215,60,175,13,23,200,63,55,215,60,175,13,23,200,63,109,148,97,40,121,244,227,63,68,237,99,106,201,230,166,63],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([68,237,99,106,201,230,166,63,96,130,179,210,38,35,237,63,174,218,179,31,230,183,231,63,26,23,175,129,72,105,204,63,174,218,179,31,230,183,231,63,26,23,175,129,72,105,204,63,187,248,5,254,123,220,162,63,187,248,5,254,123,220,162,63,79,85,85,85,85,85,213,63,20,82,195,53,180,19,223,63,20,82,195,53,180,19,223,63,98,188,149,71,121,137,157,63,183,8,57,10,252,6,188,63,183,8,57,10,252,6,188,63,210,189,113,253,64,254,232,63,87,29,204,197,125,156,225,63,136,39,40,76,73,181,211,63,87,29,204,197,125,156,225,63,136,39,40,76,73,181,211,63,149,59,127,80,118,35,194,63,149,59,127,80,118,35,194,63,74,130,228,238,109,78,231,63,74,109,98,106,247,146,207,63,74,130,228,238,109,78,231,63,74,109,98,106,247,146,207,63,122,76,92,208,134,154,153,63,122,76,92,208,134,154,153,63,25,120,112,227,150,142,237,63,26,39,93,146,4,26,177,63,25,120,112,227,150,142,237,63,26,39,93,146,4,26,177,63,162,190,248,144,34,138,131,63,162,190,248,144,34,138,131,63,224,230,12,161,136,27,225,63,224,230,12,161,136,27,225,63,71,110,206,16,138,184,177,191,44,41,22,139,182,136,217,63,44,41,22,139,182,136,217,63,78,91,167,211,37,221,201,63,114,22,167,14,15,6,202,63,114,22,167,14,15,6,202,63,190,116,172,120,248,252,226,63,9,95,0,9,200,141,190,63,9,95,0,9,200,141,190,63,53,232,191,253,141,92,232,63,1,110,89,115,35,146,160,63,1,110,89,115,35,146,160,63,64,210,148,145,187,237,237,63,228,228,115,28,129,251,226,63,160,19,87,105,223,210,214,63,228,228,115,28,129,251,226,63,160,19,87,105,223,210,214,63,80,21,9,238,242,176,169,63,80,21,9,238,242,176,169,63,41,110,142,45,243,214,233,63,47,223,3,213,89,243,197,63,41,110,142,45,243,214,233,63,47,223,3,213,89,243,197,63,103,65,19,166,203,134,149,63,103,65,19,166,203,134,149,63,194,175,154,38,244,62,223,63,194,175,154,38,244,62,223,63,204,7,170,44,123,33,152,63,159,31,10,199,113,36,220,63,159,31,10,199,113,36,220,63,188,2,175,199,113,220,190,63,89,155,125,205,130,91,209,63,89,155,125,205,130,91,209,63,77,201,4,101,250,72,221,63,151,232,108,70,106,84,192,63,151,232,108,70,106,84,192,63,181,139,201,220,202,213,231,63,181,184,34,44,55,212,149,63,181,184,34,44,55,212,149,63,108,212,61,141,188,162,238,63,107,109,89,134,118,124,227,63,56,215,23,69,73,165,209,63,107,109,89,134,118,124,227,63,56,215,23,69,73,165,209,63,204,55,213,184,38,135,189,63,204,55,213,184,38,135,189,63,219,42,132,10,74,68,230,63,200,81,120,2,61,1,210,63,219,42,132,10,74,68,230,63,200,81,120,2,61,1,210,63,14,136,245,135,238,98,151,63,14,136,245,135,238,98,151,63,63,150,178,216,217,116,235,63,1,164,235,128,175,194,189,63,63,150,178,216,217,116,235,63,1,164,235,128,175,194,189,63,32,168,254,229,6,90,154,63,32,168,254,229,6,90,154,63,79,85,85,85,85,85,213,63,255,166,16,149,222,174,223,63,255,166,16,149,222,174,223,63,109,66,214,187,90,72,132,63,25,193,184,14,116,255,221,63,25,193,184,14,116,255,221,63,57,247,57,138,95,4,176,63,92,144,67,128,132,135,218,63,92,144,67,128,132,135,218,63,181,190,241,254,237,225,197,63,40,247,209,21,247,92,205,63,40,247,209,21,247,92,205,63,99,4,23,117,132,81,225,63,142,195,186,120,236,74,189,63,142,195,186,120,236,74,189,63,28,79,209,225,68,173,232,63,96,178,229,73,40,104,153,63,96,178,229,73,40,104,153,63,218,164,97,123,125,105,238,63,187,110,112,35,253,92,228,63,230,135,108,238,239,51,209,63,187,110,112,35,253,92,228,63,230,135,108,238,239,51,209,63,143,106,202,42,87,72,184,63,143,106,202,42,87,72,184,63,227,63,91,162,221,21,230,63,245,141,248,149,180,171,210,63,227,63,91,162,221,21,230,63,245,141,248,149,180,171,210,63,66,36,15,85,2,137,146,63,66,36,15,85,2,137,146,63,108,4,16,55,191,62,235,63,117,187,37,147,122,44,192,63,108,4,16,55,191,62,235,63,117,187,37,147,122,44,192,63,217,150,209,132,68,196,150,63,217,150,209,132,68,196,150,63,104,130,251,72,47,75,223,63,104,130,251,72,47,75,223,63,38,180,143,224,22,154,150,63,176,132,186,234,176,186,218,63,176,132,186,234,176,186,218,63,64,237,21,85,60,21,197,63,142,192,17,228,167,128,209,63,142,192,17,228,167,128,209,63,245,126,220,55,176,254,220,63,248,233,48,191,171,174,198,63,248,233,48,191,171,174,198,63,251,138,103,32,170,168,228,63,124,57,139,249,59,164,175,63,124,57,139,249,59,164,175,63,218,152,206,128,120,11,236,63,99,205,154,97,57,219,147,63,99,205,154,97,57,219,147,63,42,83,230,105,76,194,238,63,137,216,152,69,211,168,232,63,4,5,49,183,213,12,198,63,137,216,152,69,211,168,232,63,4,5,49,183,213,12,198,63,100,99,174,201,116,63,173,63,100,99,174,201,116,63,173,63,224,95,84,209,66,63,226,63,115,235,70,94,35,143,213,63,224,95,84,209,66,63,226,63,115,235,70,94,35,143,213,63,51,83,65,252,91,201,183,63,51,83,65,252,91,201,183,63,4,144,55,213,189,251,229,63,162,118,178,146,138,24,211,63,4,144,55,213,189,251,229,63,162,118,178,146,138,24,211,63,207,42,205,91,56,255,141,63,207,42,205,91,56,255,141,63,111,154,238,130,248,38,236,63,248,156,170,216,28,117,190,63,111,154,238,130,248,38,236,63,248,156,170,216,28,117,190,63,64,227,35,248,195,199,84,63,64,227,35,248,195,199,84,63,233,164,59,68,31,57,224,63,233,164,59,68,31,57,224,63,160,116,210,29,162,143,140,191,186,168,187,101,41,156,219,63,186,168,187,101,41,156,219,63,59,93,17,105,90,143,193,63,194,59,187,144,187,197,209,63,194,59,187,144,187,197,209,63,105,136,137,222,136,116,220,63,79,164,142,101,0,48,192,63,79,164,142,101,0,48,192,63,216,173,56,205,255,231,231,63,226,55,11,150,127,32,178,63,226,55,11,150,127,32,178,63,8,50,125,26,224,119,235,63,152,62,203,7,155,107,147,63,152,62,203,7,155,107,147,63,13,76,131,79,70,201,238,63,141,6,92,120,201,91,227,63,101,167,71,84,83,185,208,63,141,6,92,120,201,91,227,63,101,167,71,84,83,185,208,63,223,150,0,118,51,30,193,63,223,150,0,118,51,30,193,63,1,60,254,126,52,107,226,63,180,40,126,27,194,213,216,63,1,60,254,126,52,107,226,63,180,40,126,27,194,213,216,63,78,250,42,52,167,158,162,63,78,250,42,52,167,158,162,63,41,203,162,82,204,46,231,63,251,164,75,232,27,73,210,63,41,203,162,82,204,46,231,63,251,164,75,232,27,73,210,63,192,105,39,178,145,214,132,191,192,105,39,178,145,214,132,191,45,100,179,137,251,235,231,63,179,9,28,17,197,152,203,63,45,100,179,137,251,235,231,63,179,9,28,17,197,152,203,63,103,150,89,32,51,221,162,63,103,150,89,32,51,221,162,63,120,149,17,19,112,73,236,63,22,206,219,125,238,131,186,63,120,149,17,19,112,73,236,63,22,206,219,125,238,131,186,63,159,51,188,76,135,132,137,63,159,51,188,76,135,132,137,63,79,85,85,85,85,85,213,63,131,117,85,50,21,213,223,63,131,117,85,50,21,213,223,63,9,58,69,213,102,117,117,63,183,193,29,133,72,118,218,63,183,193,29,133,72,118,218,63,254,248,136,235,221,38,198,63,73,87,71,98,254,27,222,63,73,87,71,98,254,27,222,63,224,138,138,219,25,64,174,63,242,77,134,28,119,202,206,63,242,77,134,28,119,202,206,63,7,217,188,113,196,154,224,63,58,106,142,11,139,240,194,63,58,106,142,11,139,240,194,63,227,202,56,122,186,135,230,63,199,176,249,192,175,81,179,63,199,176,249,192,175,81,179,63,206,147,193,15,148,43,235,63,135,18,253,185,165,254,144,63,135,18,253,185,165,254,144,63,216,46,96,164,21,240,238,63,103,120,12,222,31,50,227,63,153,104,48,83,196,250,210,63,103,120,12,222,31,50,227,63,153,104,48,83,196,250,210,63,97,154,218,194,239,131,186,63,97,154,218,194,239,131,186,63,134,116,106,111,217,140,228,63,68,244,26,50,65,157,213,63,134,116,106,111,217,140,228,63,68,244,26,50,65,157,213,63,242,42,2,241,190,144,148,63,242,42,2,241,190,144,148,63,203,32,86,121,67,150,233,63,172,182,200,18,49,53,202,63,203,32,86,121,67,150,233,63,172,182,200,18,49,53,202,63,192,58,39,4,223,199,113,191,192,58,39,4,223,199,113,191,58,159,123,40,48,153,232,63,6,224,117,41,230,60,200,63,58,159,123,40,48,153,232,63,6,224,117,41,230,60,200,63,216,140,110,210,100,121,165,63,216,140,110,210,100,121,165,63,44,61,179,178,17,208,236,63,106,220,61,164,37,213,181,63,44,61,179,178,17,208,236,63,106,220,61,164,37,213,181,63,130,207,65,49,102,82,141,63,130,207,65,49,102,82,141,63,79,85,85,85,85,85,213,63,142,118,14,99,164,209,223,63,142,118,14,99,164,209,223,63,23,185,196,120,206,45,119,63,5,3,37,20,250,219,222,63,5,3,37,20,250,219,222,63,67,208,175,189,94,64,162,63,198,246,146,77,187,208,220,63,198,246,146,77,187,208,220,63,25,74,104,147,37,122,185,63,172,103,244,73,246,157,217,63,172,103,244,73,246,157,217,63,82,97,46,216,38,136,201,63,209,15,250,32,21,35,208,63,209,15,250,32,21,35,208,63,112,224,11,190,213,185,223,63,240,31,182,204,244,189,196,63,240,31,182,204,244,189,196,63,255,239,164,153,5,161,229,63,245,115,221,16,154,108,179,63,245,115,221,16,154,108,179,63,3,163,200,123,217,36,235,63,129,29,107,241,202,7,144,63,129,29,107,241,202,7,144,63,40,78,233,80,131,255,238,63,84,147,35,226,204,249,228,63,207,183,46,40,127,101,213,63,84,147,35,226,204,249,228,63,207,183,46,40,127,101,213,63,22,49,68,113,226,220,132,63,22,49,68,113,226,220,132,63,42,104,51,236,150,80,226,63,185,148,1,247,193,179,210,63,42,104,51,236,150,80,226,63,185,148,1,247,193,179,210,63,231,53,47,97,32,86,193,63,231,53,47,97,32,86,193,63,95,42,241,165,51,8,228,63,190,254,96,56,234,115,212,63,95,42,241,165,51,8,228,63,190,254,96,56,234,115,212,63,182,100,229,221,115,221,171,63,182,100,229,221,115,221,171,63,232,167,62,237,84,124,233,63,142,182,14,251,254,104,200,63,232,167,62,237,84,124,233,63,142,182,14,251,254,104,200,63,20,157,106,255,212,90,138,63,20,157,106,255,212,90,138,63,28,176,179,106,66,19,232,63,151,19,193,233,18,26,199,63,28,176,179,106,66,19,232,63,151,19,193,233,18,26,199,63,168,87,224,214,198,49,177,63,168,87,224,214,198,49,177,63,23,251,102,47,177,242,236,63,186,193,171,36,127,169,180,63,23,251,102,47,177,242,236,63,186,193,171,36,127,169,180,63,136,44,227,0,187,7,142,63,136,44,227,0,187,7,142,63,79,85,85,85,85,85,213,63,226,39,174,26,246,146,223,63,226,39,174,26,246,146,223,63,70,5,118,84,121,66,139,63,250,45,77,223,139,7,222,63,250,45,77,223,139,7,222,63,93,32,45,11,66,135,175,63,224,6,204,205,8,236,219,63,224,6,204,205,8,236,219,63,163,228,207,200,220,79,192,63,222,143,127,223,40,69,217,63,222,143,127,223,40,69,217,63,135,192,1,130,92,235,202,63,125,46,221,183,68,249,207,63,125,46,221,183,68,249,207,63,194,104,17,164,93,3,224,63,40,95,83,100,207,169,196,63,40,95,83,100,207,169,196,63,117,80,214,77,24,171,229,63,85,50,251,1,241,155,179,63,85,50,251,1,241,155,179,63,98,51,129,191,3,25,235,63,190,51,124,167,161,213,152,63,190,51,124,167,161,213,152,63,196,60,136,229,165,114,238,63,69,177,70,216,71,23,166,63,69,177,70,216,71,23,166,63,224,41,247,4,23,61,237,63,146,96,185,236,187,62,228,63,60,130,59,235,103,248,214,63,146,96,185,236,187,62,228,63,60,130,59,235,103,248,214,63,24,148,55,106,7,68,129,63,24,148,55,106,7,68,129,63,102,73,35,30,147,97,226,63,35,181,96,124,125,215,210,63,102,73,35,30,147,97,226,63,35,181,96,124,125,215,210,63,33,112,177,142,184,202,192,63,33,112,177,142,184,202,192,63,133,101,166,160,48,254,227,63,141,215,42,119,23,205,212,63,133,101,166,160,48,254,227,63,141,215,42,119,23,205,212,63,207,235,66,60,58,180,169,63,207,235,66,60,58,180,169,63,111,201,129,181,66,247,231,63,220,227,141,248,122,165,199,63,111,201,129,181,66,247,231,63,220,227,141,248,122,165,199,63,138,236,213,98,244,250,176,63,138,236,213,98,244,250,176,63,20,81,132,2,88,157,232,63,203,105,67,150,136,1,204,63,20,81,132,2,88,157,232,63,203,105,67,150,136,1,204,63,54,30,181,250,117,145,136,63,54,30,181,250,117,145,136,63,63,42,101,79,107,73,236,63,0,44,185,244,231,230,185,63,63,42,101,79,107,73,236,63,0,44,185,244,231,230,185,63,38,16,236,128,236,109,142,63,38,16,236,128,236,109,142,63,244,41,72,49,196,58,240,63,39,186,0,29,49,96,149,63,244,41,72,49,196,58,240,63,39,186,0,29,49,96,149,63,161,155,133,183,158,8,162,191,161,155,133,183,158,8,162,191,79,85,85,85,85,85,213,63,189,129,145,32,197,85,223,63,189,129,145,32,197,85,223,63,72,199,207,237,91,71,149,63,88,160,61,232,33,23,221,63,88,160,61,232,33,23,221,63,135,253,18,190,240,70,183,63,219,82,221,150,207,176,217,63,219,82,221,150,207,176,217,63,146,180,138,164,193,60,201,63,104,102,134,83,245,90,208,63,104,102,134,83,245,90,208,63,67,51,243,88,21,74,223,63,215,116,49,113,125,170,198,63,215,116,49,113,125,170,198,63,157,69,103,71,193,170,228,63,15,104,45,16,246,44,188,63,15,104,45,16,246,44,188,63,252,165,244,123,194,244,232,63,221,154,78,114,63,110,172,63,221,154,78,114,63,110,172,63,173,44,182,17,56,114,236,63,216,36,26,225,125,217,137,63,216,36,26,225,125,217,137,63,226,46,247,16,52,49,239,63,244,125,48,93,100,56,227,63,138,190,59,227,11,84,217,63,244,125,48,93,100,56,227,63,138,190,59,227,11,84,217,63,226,198,162,49,177,149,109,63,226,198,162,49,177,149,109,63,26,86,149,203,226,215,225,63,154,90,142,246,31,181,211,63,26,86,149,203,226,215,225,63,154,90,142,246,31,181,211,63,102,242,141,228,52,54,193,63,102,242,141,228,52,54,193,63,126,58,23,98,83,18,231,63,163,139,192,53,170,238,208,63,126,58,23,98,83,18,231,63,163,139,192,53,170,238,208,63,12,236,31,194,224,149,141,63,12,236,31,194,224,149,141,63,12,18,184,161,93,6,227,63,240,109,3,10,79,242,214,63,12,18,184,161,93,6,227,63,240,109,3,10,79,242,214,63,200,111,99,148,173,7,168,63,200,111,99,148,173,7,168,63,88,206,190,173,205,219,234,63,168,209,217,119,8,51,196,63,88,206,190,173,205,219,234,63,168,209,217,119,8,51,196,63,94,71,189,74,52,112,103,63,94,71,189,74,52,112,103,63,174,105,163,14,80,111,230,63,97,139,142,19,132,54,179,63,174,105,163,14,80,111,230,63,97,139,142,19,132,54,179,63,153,19,171,187,125,167,204,63,153,19,171,187,125,167,204,63,10,125,119,18,116,85,234,63,233,81,131,251,222,58,194,63,10,125,119,18,116,85,234,63,233,81,131,251,222,58,194,63,193,231,122,234,66,189,161,63,193,231,122,234,66,189,161,63,253,14,232,101,58,148,237,63,13,14,174,133,65,196,176,63,253,14,232,101,58,148,237,63,13,14,174,133,65,196,176,63,97,208,139,88,90,207,132,63,97,208,139,88,90,207,132,63,79,85,85,85,85,85,213,63,250,224,169,68,201,7,224,63,250,224,169,68,201,7,224,63,225,230,131,167,18,37,95,191,149,9,244,143,225,62,223,63,149,9,244,143,225,62,223,63,139,206,126,1,206,35,152,63,74,238,11,155,245,32,221,63,74,238,11,155,245,32,221,63,249,141,160,39,83,248,182,63,142,186,184,132,78,186,217,63,142,186,184,132,78,186,217,63,162,21,29,237,197,22,201,63,193,122,172,167,140,96,208,63,193,122,172,167,140,96,208,63,107,10,167,176,230,62,223,63,97,67,208,203,42,151,198,63,97,67,208,203,42,151,198,63,80,222,23,154,106,180,228,63,19,35,222,240,240,170,186,63,19,35,222,240,240,170,186,63,50,119,200,195,67,85,233,63,214,64,66,240,218,43,171,63,214,64,66,240,218,43,171,63,229,183,247,161,132,154,236,63,96,67,86,89,12,79,165,63,96,67,86,89,12,79,165,63,148,55,213,116,30,86,237,63,247,78,86,45,67,184,135,63,247,78,86,45,67,184,135,63,136,77,149,230,61,66,239,63,114,123,167,133,166,103,227,63,217,27,190,239,29,18,214,63,114,123,167,133,166,103,227,63,217,27,190,239,29,18,214,63,25,106,151,39,168,244,168,63,25,106,151,39,168,244,168,63,12,94,18,146,251,180,227,63,105,28,123,137,149,46,216,63,12,94,18,146,251,180,227,63,105,28,123,137,149,46,216,63,149,223,9,152,212,220,121,63,149,223,9,152,212,220,121,63,163,65,210,161,184,227,225,63,114,110,151,106,234,159,211,63,163,65,210,161,184,227,225,63,114,110,151,106,234,159,211,63,144,28,136,163,72,49,193,63,144,28,136,163,72,49,193,63,108,119,10,78,72,146,231,63,149,167,13,67,249,236,207,63,108,119,10,78,72,146,231,63,149,167,13,67,249,236,207,63,184,171,135,76,88,158,140,63,184,171,135,76,88,158,140,63,137,5,176,242,10,198,230,63,210,146,180,37,60,60,203,63,137,5,176,242,10,198,230,63,210,146,180,37,60,60,203,63,20,174,22,31,48,87,179,63,20,174,22,31,48,87,179,63,248,183,91,110,156,144,235,63,109,218,190,110,195,207,194,63,248,183,91,110,156,144,235,63,109,218,190,110,195,207,194,63,43,167,219,130,82,35,129,191,43,167,219,130,82,35,129,191,201,83,38,220,32,189,234,63,15,110,236,162,9,161,193,63,201,83,38,220,32,189,234,63,15,110,236,162,9,161,193,63,119,22,210,99,151,83,155,63,119,22,210,99,151,83,155,63,60,232,194,3,144,192,237,63,12,163,252,8,125,144,174,63,60,232,194,3,144,192,237,63,12,163,252,8,125,144,174,63,0,103,83,235,10,154,133,63,0,103,83,235,10,154,133,63,79,85,85,85,85,85,213,63,97,85,85,85,85,85,197,63,88,85,85,85,85,85,229,63,97,85,85,85,85,85,197,63,79,85,85,85,85,85,213,63,154,153,153,153,153,153,201,63,51,51,51,51,51,51,227,63,154,153,153,153,153,153,201,63,220,208,11,138,107,138,220,63,32,121,161,175,163,172,187,63,220,208,11,138,107,138,220,63,219,176,29,234,137,113,183,63,210,147,120,133,157,35,234,63,219,176,29,234,137,113,183,63,79,85,85,85,85,85,213,63,191,139,115,189,206,22,222,63,16,68,199,40,20,147,174,63,191,139,115,189,206,22,222,63,119,245,122,156,233,237,185,63,153,66,225,152,133,132,233,63,119,245,122,156,233,237,185,63,145,236,234,200,160,232,207,63,175,137,138,155,175,11,224,63,145,236,234,200,160,232,207,63,196,85,250,5,154,38,176,63,143,106,129,126,89,246,235,63,196,85,250,5,154,38,176,63,87,27,219,134,208,220,211,63,196,142,49,125,58,94,228,63,9,57,14,246,211,53,171,63,9,57,14,246,211,53,171,63,196,142,49,125,58,94,228,63,87,27,219,134,208,220,211,63,79,85,85,85,85,85,213,63,193,30,125,32,130,169,208,63,125,194,5,191,251,172,222,63,193,30,125,32,130,169,208,63,225,59,243,205,93,172,176,63,8,49,131,140,232,212,235,63,225,59,243,205,93,172,176,63,240,208,88,0,253,5,212,63,158,80,199,129,34,110,228,63,162,110,196,224,239,237,168,63,162,110,196,224,239,237,168,63,158,80,199,129,34,110,228,63,240,208,88,0,253,5,212,63,79,85,85,85,85,85,213,63,200,203,128,189,12,101,221,63,194,161,249,19,154,215,180,63,200,203,128,189,12,101,221,63,174,97,63,15,55,213,197,63,41,79,96,120,100,21,229,63,174,97,63,15,55,213,197,63,6,217,12,137,83,225,169,63,223,100,222,142,213,195,236,63,6,217,12,137,83,225,169,63,34,21,156,49,215,214,208,63,141,26,100,71,207,79,231,63,142,184,118,243,71,49,129,63,142,184,118,243,71,49,129,63,141,26,100,71,207,79,231,63,34,21,156,49,215,214,208,63,79,85,85,85,85,85,213,63,9,106,88,89,245,86,223,63,5,192,242,212,84,33,149,63,9,106,88,89,245,86,223,63,38,150,56,159,70,249,219,63,142,167,29,131,229,26,192,63,38,150,56,159,70,249,219,63,55,215,60,175,13,23,200,63,109,148,97,40,121,244,227,63,55,215,60,175,13,23,200,63,68,237,99,106,201,230,166,63,96,130,179,210,38,35,237,63,68,237,99,106,201,230,166,63,26,23,175,129,72,105,204,63,174,218,179,31,230,183,231,63,187,248,5,254,123,220,162,63,187,248,5,254,123,220,162,63,174,218,179,31,230,183,231,63,26,23,175,129,72,105,204,63,79,85,85,85,85,85,213,63,20,82,195,53,180,19,223,63,98,188,149,71,121,137,157,63,20,82,195,53,180,19,223,63,183,8,57,10,252,6,188,63,210,189,113,253,64,254,232,63,183,8,57,10,252,6,188,63,136,39,40,76,73,181,211,63,87,29,204,197,125,156,225,63,149,59,127,80,118,35,194,63,149,59,127,80,118,35,194,63,87,29,204,197,125,156,225,63,136,39,40,76,73,181,211,63,74,109,98,106,247,146,207,63,74,130,228,238,109,78,231,63,122,76,92,208,134,154,153,63,122,76,92,208,134,154,153,63,74,130,228,238,109,78,231,63,74,109,98,106,247,146,207,63,26,39,93,146,4,26,177,63,25,120,112,227,150,142,237,63,162,190,248,144,34,138,131,63,162,190,248,144,34,138,131,63,25,120,112,227,150,142,237,63,26,39,93,146,4,26,177,63,224,230,12,161,136,27,225,63,71,110,206,16,138,184,177,191,224,230,12,161,136,27,225,63,44,41,22,139,182,136,217,63,78,91,167,211,37,221,201,63,44,41,22,139,182,136,217,63,114,22,167,14,15,6,202,63,190,116,172,120,248,252,226,63,114,22,167,14,15,6,202,63,9,95,0,9,200,141,190,63,53,232,191,253,141,92,232,63,9,95,0,9,200,141,190,63,1,110,89,115,35,146,160,63,64,210,148,145,187,237,237,63,1,110,89,115,35,146,160,63,160,19,87,105,223,210,214,63,228,228,115,28,129,251,226,63,80,21,9,238,242,176,169,63,80,21,9,238,242,176,169,63,228,228,115,28,129,251,226,63,160,19,87,105,223,210,214,63,47,223,3,213,89,243,197,63,41,110,142,45,243,214,233,63,103,65,19,166,203,134,149,63,103,65,19,166,203,134,149,63,41,110,142,45,243,214,233,63,47,223,3,213,89,243,197,63,194,175,154,38,244,62,223,63,204,7,170,44,123,33,152,63,194,175,154,38,244,62,223,63,159,31,10,199,113,36,220,63,188,2,175,199,113,220,190,63,159,31,10,199,113,36,220,63,89,155,125,205,130,91,209,63,77,201,4,101,250,72,221,63,89,155,125,205,130,91,209,63,151,232,108,70,106,84,192,63,181,139,201,220,202,213,231,63,151,232,108,70,106,84,192,63,181,184,34,44,55,212,149,63,108,212,61,141,188,162,238,63,181,184,34,44,55,212,149,63,56,215,23,69,73,165,209,63,107,109,89,134,118,124,227,63,204,55,213,184,38,135,189,63,204,55,213,184,38,135,189,63,107,109,89,134,118,124,227,63,56,215,23,69,73,165,209,63,200,81,120,2,61,1,210,63,219,42,132,10,74,68,230,63,14,136,245,135,238,98,151,63,14,136,245,135,238,98,151,63,219,42,132,10,74,68,230,63,200,81,120,2,61,1,210,63,1,164,235,128,175,194,189,63,63,150,178,216,217,116,235,63,32,168,254,229,6,90,154,63,32,168,254,229,6,90,154,63,63,150,178,216,217,116,235,63,1,164,235,128,175,194,189,63,79,85,85,85,85,85,213,63,255,166,16,149,222,174,223,63,109,66,214,187,90,72,132,63,255,166,16,149,222,174,223,63,25,193,184,14,116,255,221,63,57,247,57,138,95,4,176,63,25,193,184,14,116,255,221,63,92,144,67,128,132,135,218,63,181,190,241,254,237,225,197,63,92,144,67,128,132,135,218,63,40,247,209,21,247,92,205,63,99,4,23,117,132,81,225,63,40,247,209,21,247,92,205,63,142,195,186,120,236,74,189,63,28,79,209,225,68,173,232,63,142,195,186,120,236,74,189,63,96,178,229,73,40,104,153,63,218,164,97,123,125,105,238,63,96,178,229,73,40,104,153,63,230,135,108,238,239,51,209,63,187,110,112,35,253,92,228,63,143,106,202,42,87,72,184,63,143,106,202,42,87,72,184,63,187,110,112,35,253,92,228,63,230,135,108,238,239,51,209,63,245,141,248,149,180,171,210,63,227,63,91,162,221,21,230,63,66,36,15,85,2,137,146,63,66,36,15,85,2,137,146,63,227,63,91,162,221,21,230,63,245,141,248,149,180,171,210,63,117,187,37,147,122,44,192,63,108,4,16,55,191,62,235,63,217,150,209,132,68,196,150,63,217,150,209,132,68,196,150,63,108,4,16,55,191,62,235,63,117,187,37,147,122,44,192,63,104,130,251,72,47,75,223,63,38,180,143,224,22,154,150,63,104,130,251,72,47,75,223,63,176,132,186,234,176,186,218,63,64,237,21,85,60,21,197,63,176,132,186,234,176,186,218,63,142,192,17,228,167,128,209,63,245,126,220,55,176,254,220,63,142,192,17,228,167,128,209,63,248,233,48,191,171,174,198,63,251,138,103,32,170,168,228,63,248,233,48,191,171,174,198,63,124,57,139,249,59,164,175,63,218,152,206,128,120,11,236,63,124,57,139,249,59,164,175,63,99,205,154,97,57,219,147,63,42,83,230,105,76,194,238,63,99,205,154,97,57,219,147,63,4,5,49,183,213,12,198,63,137,216,152,69,211,168,232,63,100,99,174,201,116,63,173,63,100,99,174,201,116,63,173,63,137,216,152,69,211,168,232,63,4,5,49,183,213,12,198,63,115,235,70,94,35,143,213,63,224,95,84,209,66,63,226,63,51,83,65,252,91,201,183,63,51,83,65,252,91,201,183,63,224,95,84,209,66,63,226,63,115,235,70,94,35,143,213,63,162,118,178,146,138,24,211,63,4,144,55,213,189,251,229,63,207,42,205,91,56,255,141,63,207,42,205,91,56,255,141,63,4,144,55,213,189,251,229,63,162,118,178,146,138,24,211,63,248,156,170,216,28,117,190,63,111,154,238,130,248,38,236,63,64,227,35,248,195,199,84,63,64,227,35,248,195,199,84,63,111,154,238,130,248,38,236,63,248,156,170,216,28,117,190,63,233,164,59,68,31,57,224,63,160,116,210,29,162,143,140,191,233,164,59,68,31,57,224,63,186,168,187,101,41,156,219,63,59,93,17,105,90,143,193,63,186,168,187,101,41,156,219,63,194,59,187,144,187,197,209,63,105,136,137,222,136,116,220,63,194,59,187,144,187,197,209,63,79,164,142,101,0,48,192,63,216,173,56,205,255,231,231,63,79,164,142,101,0,48,192,63,226,55,11,150,127,32,178,63,8,50,125,26,224,119,235,63,226,55,11,150,127,32,178,63,152,62,203,7,155,107,147,63,13,76,131,79,70,201,238,63,152,62,203,7,155,107,147,63,101,167,71,84,83,185,208,63,141,6,92,120,201,91,227,63,223,150,0,118,51,30,193,63,223,150,0,118,51,30,193,63,141,6,92,120,201,91,227,63,101,167,71,84,83,185,208,63,180,40,126,27,194,213,216,63,1,60,254,126,52,107,226,63,78,250,42,52,167,158,162,63,78,250,42,52,167,158,162,63,1,60,254,126,52,107,226,63,180,40,126,27,194,213,216,63,251,164,75,232,27,73,210,63,41,203,162,82,204,46,231,63,192,105,39,178,145,214,132,191,192,105,39,178,145,214,132,191,41,203,162,82,204,46,231,63,251,164,75,232,27,73,210,63,179,9,28,17,197,152,203,63,45,100,179,137,251,235,231,63,103,150,89,32,51,221,162,63,103,150,89,32,51,221,162,63,45,100,179,137,251,235,231,63,179,9,28,17,197,152,203,63,22,206,219,125,238,131,186,63,120,149,17,19,112,73,236,63,159,51,188,76,135,132,137,63,159,51,188,76,135,132,137,63,120,149,17,19,112,73,236,63,22,206,219,125,238,131,186,63,79,85,85,85,85,85,213,63,131,117,85,50,21,213,223,63,9,58,69,213,102,117,117,63,131,117,85,50,21,213,223,63,183,193,29,133,72,118,218,63,254,248,136,235,221,38,198,63,183,193,29,133,72,118,218,63,73,87,71,98,254,27,222,63,224,138,138,219,25,64,174,63,73,87,71,98,254,27,222,63,242,77,134,28,119,202,206,63,7,217,188,113,196,154,224,63,242,77,134,28,119,202,206,63,58,106,142,11,139,240,194,63,227,202,56,122,186,135,230,63,58,106,142,11,139,240,194,63,199,176,249,192,175,81,179,63,206,147,193,15,148,43,235,63,199,176,249,192,175,81,179,63,135,18,253,185,165,254,144,63,216,46,96,164,21,240,238,63,135,18,253,185,165,254,144,63,153,104,48,83,196,250,210,63,103,120,12,222,31,50,227,63,97,154,218,194,239,131,186,63,97,154,218,194,239,131,186,63,103,120,12,222,31,50,227,63,153,104,48,83,196,250,210,63,68,244,26,50,65,157,213,63,134,116,106,111,217,140,228,63,242,42,2,241,190,144,148,63,242,42,2,241,190,144,148,63,134,116,106,111,217,140,228,63,68,244,26,50,65,157,213,63,172,182,200,18,49,53,202,63,203,32,86,121,67,150,233,63,192,58,39,4,223,199,113,191,192,58,39,4,223,199,113,191,203,32,86,121,67,150,233,63,172,182,200,18,49,53,202,63,6,224,117,41,230,60,200,63,58,159,123,40,48,153,232,63,216,140,110,210,100,121,165,63,216,140,110,210,100,121,165,63,58,159,123,40,48,153,232,63,6,224,117,41,230,60,200,63,106,220,61,164,37,213,181,63,44,61,179,178,17,208,236,63,130,207,65,49,102,82,141,63,130,207,65,49,102,82,141,63,44,61,179,178,17,208,236,63,106,220,61,164,37,213,181,63,79,85,85,85,85,85,213,63,142,118,14,99,164,209,223,63,23,185,196,120,206,45,119,63,142,118,14,99,164,209,223,63,5,3,37,20,250,219,222,63,67,208,175,189,94,64,162,63,5,3,37,20,250,219,222,63,198,246,146,77,187,208,220,63,25,74,104,147,37,122,185,63,198,246,146,77,187,208,220,63,172,103,244,73,246,157,217,63,82,97,46,216,38,136,201,63,172,103,244,73,246,157,217,63,209,15,250,32,21,35,208,63,112,224,11,190,213,185,223,63,209,15,250,32,21,35,208,63,240,31,182,204,244,189,196,63,255,239,164,153,5,161,229,63,240,31,182,204,244,189,196,63,245,115,221,16,154,108,179,63,3,163,200,123,217,36,235,63,245,115,221,16,154,108,179,63,129,29,107,241,202,7,144,63,40,78,233,80,131,255,238,63,129,29,107,241,202,7,144,63,207,183,46,40,127,101,213,63,84,147,35,226,204,249,228,63,22,49,68,113,226,220,132,63,22,49,68,113,226,220,132,63,84,147,35,226,204,249,228,63,207,183,46,40,127,101,213,63,185,148,1,247,193,179,210,63,42,104,51,236,150,80,226,63,231,53,47,97,32,86,193,63,231,53,47,97,32,86,193,63,42,104,51,236,150,80,226,63,185,148,1,247,193,179,210,63,190,254,96,56,234,115,212,63,95,42,241,165,51,8,228,63,182,100,229,221,115,221,171,63,182,100,229,221,115,221,171,63,95,42,241,165,51,8,228,63,190,254,96,56,234,115,212,63,142,182,14,251,254,104,200,63,232,167,62,237,84,124,233,63,20,157,106,255,212,90,138,63,20,157,106,255,212,90,138,63,232,167,62,237,84,124,233,63,142,182,14,251,254,104,200,63,151,19,193,233,18,26,199,63,28,176,179,106,66,19,232,63,168,87,224,214,198,49,177,63,168,87,224,214,198,49,177,63,28,176,179,106,66,19,232,63,151,19,193,233,18,26,199,63,186,193,171,36,127,169,180,63,23,251,102,47,177,242,236,63,136,44,227,0,187,7,142,63,136,44,227,0,187,7,142,63,23,251,102,47,177,242,236,63,186,193,171,36,127,169,180,63,79,85,85,85,85,85,213,63,226,39,174,26,246,146,223,63,70,5,118,84,121,66,139,63,226,39,174,26,246,146,223,63,250,45,77,223,139,7,222,63,93,32,45,11,66,135,175,63,250,45,77,223,139,7,222,63,224,6,204,205,8,236,219,63,163,228,207,200,220,79,192,63,224,6,204,205,8,236,219,63,222,143,127,223,40,69,217,63,135,192,1,130,92,235,202,63,222,143,127,223,40,69,217,63,125,46,221,183,68,249,207,63,194,104,17,164,93,3,224,63,125,46,221,183,68,249,207,63,40,95,83,100,207,169,196,63,117,80,214,77,24,171,229,63,40,95,83,100,207,169,196,63,85,50,251,1,241,155,179,63,98,51,129,191,3,25,235,63,85,50,251,1,241,155,179,63,190,51,124,167,161,213,152,63,196,60,136,229,165,114,238,63,190,51,124,167,161,213,152,63,69,177,70,216,71,23,166,63,224,41,247,4,23,61,237,63,69,177,70,216,71,23,166,63,60,130,59,235,103,248,214,63,146,96,185,236,187,62,228,63,24,148,55,106,7,68,129,63,24,148,55,106,7,68,129,63,146,96,185,236,187,62,228,63,60,130,59,235,103,248,214,63,35,181,96,124,125,215,210,63,102,73,35,30,147,97,226,63,33,112,177,142,184,202,192,63,33,112,177,142,184,202,192,63,102,73,35,30,147,97,226,63,35,181,96,124,125,215,210,63,141,215,42,119,23,205,212,63,133,101,166,160,48,254,227,63,207,235,66,60,58,180,169,63,207,235,66,60,58,180,169,63,133,101,166,160,48,254,227,63,141,215,42,119,23,205,212,63,220,227,141,248,122,165,199,63,111,201,129,181,66,247,231,63,138,236,213,98,244,250,176,63,138,236,213,98,244,250,176,63,111,201,129,181,66,247,231,63,220,227,141,248,122,165,199,63,203,105,67,150,136,1,204,63,20,81,132,2,88,157,232,63,54,30,181,250,117,145,136,63,54,30,181,250,117,145,136,63,20,81,132,2,88,157,232,63,203,105,67,150,136,1,204,63,0,44,185,244,231,230,185,63,63,42,101,79,107,73,236,63,38,16,236,128,236,109,142,63,38,16,236,128,236,109,142,63,63,42,101,79,107,73,236,63,0,44,185,244,231,230,185,63,39,186,0,29,49,96,149,63,244,41,72,49,196,58,240,63,161,155,133,183,158,8,162,191,161,155,133,183,158,8,162,191,244,41,72,49,196,58,240,63,39,186,0,29,49,96,149,63,79,85,85,85,85,85,213,63,189,129,145,32,197,85,223,63,72,199,207,237,91,71,149,63,189,129,145,32,197,85,223,63,88,160,61,232,33,23,221,63,135,253,18,190,240,70,183,63,88,160,61,232,33,23,221,63,219,82,221,150,207,176,217,63,146,180,138,164,193,60,201,63,219,82,221,150,207,176,217,63,104,102,134,83,245,90,208,63,67,51,243,88,21,74,223,63,104,102,134,83,245,90,208,63,215,116,49,113,125,170,198,63,157,69,103,71,193,170,228,63,215,116,49,113,125,170,198,63,15,104,45,16,246,44,188,63,252,165,244,123,194,244,232,63,15,104,45,16,246,44,188,63,221,154,78,114,63,110,172,63,173,44,182,17,56,114,236,63,221,154,78,114,63,110,172,63,216,36,26,225,125,217,137,63,226,46,247,16,52,49,239,63,216,36,26,225,125,217,137,63,138,190,59,227,11,84,217,63,244,125,48,93,100,56,227,63,226,198,162,49,177,149,109,63,226,198,162,49,177,149,109,63,244,125,48,93,100,56,227,63,138,190,59,227,11,84,217,63,154,90,142,246,31,181,211,63,26,86,149,203,226,215,225,63,102,242,141,228,52,54,193,63,102,242,141,228,52,54,193,63,26,86,149,203,226,215,225,63,154,90,142,246,31,181,211,63,163,139,192,53,170,238,208,63,126,58,23,98,83,18,231,63,12,236,31,194,224,149,141,63,12,236,31,194,224,149,141,63,126,58,23,98,83,18,231,63,163,139,192,53,170,238,208,63,240,109,3,10,79,242,214,63,12,18,184,161,93,6,227,63,200,111,99,148,173,7,168,63,200,111,99,148,173,7,168,63,12,18,184,161,93,6,227,63,240,109,3,10,79,242,214,63,168,209,217,119,8,51,196,63,88,206,190,173,205,219,234,63,94,71,189,74,52,112,103,63,94,71,189,74,52,112,103,63,88,206,190,173,205,219,234,63,168,209,217,119,8,51,196,63,97,139,142,19,132,54,179,63,174,105,163,14,80,111,230,63,153,19,171,187,125,167,204,63,153,19,171,187,125,167,204,63,174,105,163,14,80,111,230,63,97,139,142,19,132,54,179,63,233,81,131,251,222,58,194,63,10,125,119,18,116,85,234,63,193,231,122,234,66,189,161,63,193,231,122,234,66,189,161,63,10,125,119,18,116,85,234,63,233,81,131,251,222,58,194,63,13,14,174,133,65,196,176,63,253,14,232,101,58,148,237,63,97,208,139,88,90,207,132,63,97,208,139,88,90,207,132,63,253,14,232,101,58,148,237,63,13,14,174,133,65,196,176,63,79,85,85,85,85,85,213,63,250,224,169,68,201,7,224,63,225,230,131,167,18,37,95,191,250,224,169,68,201,7,224,63,149,9,244,143,225,62,223,63,139,206,126,1,206,35,152,63,149,9,244,143,225,62,223,63,74,238,11,155,245,32,221,63,249,141,160,39,83,248,182,63,74,238,11,155,245,32,221,63,142,186,184,132,78,186,217,63,162,21,29,237,197,22,201,63,142,186,184,132,78,186,217,63,193,122,172,167,140,96,208,63,107,10,167,176,230,62,223,63,193,122,172,167,140,96,208,63,97,67,208,203,42,151,198,63,80,222,23,154,106,180,228,63,97,67,208,203,42,151,198,63,19,35,222,240,240,170,186,63,50,119,200,195,67,85,233,63,19,35,222,240,240,170,186,63,214,64,66,240,218,43,171,63,229,183,247,161,132,154,236,63,214,64,66,240,218,43,171,63,96,67,86,89,12,79,165,63,148,55,213,116,30,86,237,63,96,67,86,89,12,79,165,63,247,78,86,45,67,184,135,63,136,77,149,230,61,66,239,63,247,78,86,45,67,184,135,63,217,27,190,239,29,18,214,63,114,123,167,133,166,103,227,63,25,106,151,39,168,244,168,63,25,106,151,39,168,244,168,63,114,123,167,133,166,103,227,63,217,27,190,239,29,18,214,63,105,28,123,137,149,46,216,63,12,94,18,146,251,180,227,63,149,223,9,152,212,220,121,63,149,223,9,152,212,220,121,63,12,94,18,146,251,180,227,63,105,28,123,137,149,46,216,63,114,110,151,106,234,159,211,63,163,65,210,161,184,227,225,63,144,28,136,163,72,49,193,63,144,28,136,163,72,49,193,63,163,65,210,161,184,227,225,63,114,110,151,106,234,159,211,63,149,167,13,67,249,236,207,63,108,119,10,78,72,146,231,63,184,171,135,76,88,158,140,63,184,171,135,76,88,158,140,63,108,119,10,78,72,146,231,63,149,167,13,67,249,236,207,63,210,146,180,37,60,60,203,63,137,5,176,242,10,198,230,63,20,174,22,31,48,87,179,63,20,174,22,31,48,87,179,63,137,5,176,242,10,198,230,63,210,146,180,37,60,60,203,63,109,218,190,110,195,207,194,63,248,183,91,110,156,144,235,63,43,167,219,130,82,35,129,191,43,167,219,130,82,35,129,191,248,183,91,110,156,144,235,63,109,218,190,110,195,207,194,63,15,110,236,162,9,161,193,63,201,83,38,220,32,189,234,63,119,22,210,99,151,83,155,63,119,22,210,99,151,83,155,63,201,83,38,220,32,189,234,63,15,110,236,162,9,161,193,63,12,163,252,8,125,144,174,63,60,232,194,3,144,192,237,63,0,103,83,235,10,154,133,63,0,103,83,235,10,154,133,63,60,232,194,3,144,192,237,63,12,163,252,8,125,144,174,63,79,85,85,85,85,85,213,63,88,85,85,85,85,85,229,63,97,85,85,85,85,85,197,63,97,85,85,85,85,85,197,63,79,85,85,85,85,85,213,63,51,51,51,51,51,51,227,63,154,153,153,153,153,153,201,63,154,153,153,153,153,153,201,63,32,121,161,175,163,172,187,63,220,208,11,138,107,138,220,63,220,208,11,138,107,138,220,63,210,147,120,133,157,35,234,63,219,176,29,234,137,113,183,63,219,176,29,234,137,113,183,63,79,85,85,85,85,85,213,63,16,68,199,40,20,147,174,63,191,139,115,189,206,22,222,63,191,139,115,189,206,22,222,63,153,66,225,152,133,132,233,63,119,245,122,156,233,237,185,63,119,245,122,156,233,237,185,63,175,137,138,155,175,11,224,63,145,236,234,200,160,232,207,63,145,236,234,200,160,232,207,63,143,106,129,126,89,246,235,63,196,85,250,5,154,38,176,63,196,85,250,5,154,38,176,63,9,57,14,246,211,53,171,63,9,57,14,246,211,53,171,63,87,27,219,134,208,220,211,63,196,142,49,125,58,94,228,63,87,27,219,134,208,220,211,63,196,142,49,125,58,94,228,63,79,85,85,85,85,85,213,63,125,194,5,191,251,172,222,63,193,30,125,32,130,169,208,63,193,30,125,32,130,169,208,63,8,49,131,140,232,212,235,63,225,59,243,205,93,172,176,63,225,59,243,205,93,172,176,63,162,110,196,224,239,237,168,63,162,110,196,224,239,237,168,63,240,208,88,0,253,5,212,63,158,80,199,129,34,110,228,63,240,208,88,0,253,5,212,63,158,80,199,129,34,110,228,63,79,85,85,85,85,85,213,63,194,161,249,19,154,215,180,63,200,203,128,189,12,101,221,63,200,203,128,189,12,101,221,63,41,79,96,120,100,21,229,63,174,97,63,15,55,213,197,63,174,97,63,15,55,213,197,63,223,100,222,142,213,195,236,63,6,217,12,137,83,225,169,63,6,217,12,137,83,225,169,63,142,184,118,243,71,49,129,63,142,184,118,243,71,49,129,63,34,21,156,49,215,214,208,63,141,26,100,71,207,79,231,63,34,21,156,49,215,214,208,63,141,26,100,71,207,79,231,63,79,85,85,85,85,85,213,63,5,192,242,212,84,33,149,63,9,106,88,89,245,86,223,63,9,106,88,89,245,86,223,63,142,167,29,131,229,26,192,63,38,150,56,159,70,249,219,63,38,150,56,159,70,249,219,63,109,148,97,40,121,244,227,63,55,215,60,175,13,23,200,63,55,215,60,175,13,23,200,63,96,130,179,210,38,35,237,63,68,237,99,106,201,230,166,63,68,237,99,106,201,230,166,63,187,248,5,254,123,220,162,63,187,248,5,254,123,220,162,63,26,23,175,129,72,105,204,63,174,218,179,31,230,183,231,63,26,23,175,129,72,105,204,63,174,218,179,31,230,183,231,63,79,85,85,85,85,85,213,63,98,188,149,71,121,137,157,63,20,82,195,53,180,19,223,63,20,82,195,53,180,19,223,63,210,189,113,253,64,254,232,63,183,8,57,10,252,6,188,63,183,8,57,10,252,6,188,63,149,59,127,80,118,35,194,63,149,59,127,80,118,35,194,63,136,39,40,76,73,181,211,63,87,29,204,197,125,156,225,63,136,39,40,76,73,181,211,63,87,29,204,197,125,156,225,63,122,76,92,208,134,154,153,63,122,76,92,208,134,154,153,63,74,109,98,106,247,146,207,63],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([74,130,228,238,109,78,231,63,74,109,98,106,247,146,207,63,74,130,228,238,109,78,231,63,162,190,248,144,34,138,131,63,162,190,248,144,34,138,131,63,26,39,93,146,4,26,177,63,25,120,112,227,150,142,237,63,26,39,93,146,4,26,177,63,25,120,112,227,150,142,237,63,71,110,206,16,138,184,177,191,224,230,12,161,136,27,225,63,224,230,12,161,136,27,225,63,78,91,167,211,37,221,201,63,44,41,22,139,182,136,217,63,44,41,22,139,182,136,217,63,190,116,172,120,248,252,226,63,114,22,167,14,15,6,202,63,114,22,167,14,15,6,202,63,53,232,191,253,141,92,232,63,9,95,0,9,200,141,190,63,9,95,0,9,200,141,190,63,64,210,148,145,187,237,237,63,1,110,89,115,35,146,160,63,1,110,89,115,35,146,160,63,80,21,9,238,242,176,169,63,80,21,9,238,242,176,169,63,160,19,87,105,223,210,214,63,228,228,115,28,129,251,226,63,160,19,87,105,223,210,214,63,228,228,115,28,129,251,226,63,103,65,19,166,203,134,149,63,103,65,19,166,203,134,149,63,47,223,3,213,89,243,197,63,41,110,142,45,243,214,233,63,47,223,3,213,89,243,197,63,41,110,142,45,243,214,233,63,204,7,170,44,123,33,152,63,194,175,154,38,244,62,223,63,194,175,154,38,244,62,223,63,188,2,175,199,113,220,190,63,159,31,10,199,113,36,220,63,159,31,10,199,113,36,220,63,77,201,4,101,250,72,221,63,89,155,125,205,130,91,209,63,89,155,125,205,130,91,209,63,181,139,201,220,202,213,231,63,151,232,108,70,106,84,192,63,151,232,108,70,106,84,192,63,108,212,61,141,188,162,238,63,181,184,34,44,55,212,149,63,181,184,34,44,55,212,149,63,204,55,213,184,38,135,189,63,204,55,213,184,38,135,189,63,56,215,23,69,73,165,209,63,107,109,89,134,118,124,227,63,56,215,23,69,73,165,209,63,107,109,89,134,118,124,227,63,14,136,245,135,238,98,151,63,14,136,245,135,238,98,151,63,200,81,120,2,61,1,210,63,219,42,132,10,74,68,230,63,200,81,120,2,61,1,210,63,219,42,132,10,74,68,230,63,32,168,254,229,6,90,154,63,32,168,254,229,6,90,154,63,1,164,235,128,175,194,189,63,63,150,178,216,217,116,235,63,1,164,235,128,175,194,189,63,63,150,178,216,217,116,235,63,79,85,85,85,85,85,213,63,109,66,214,187,90,72,132,63,255,166,16,149,222,174,223,63,255,166,16,149,222,174,223,63,57,247,57,138,95,4,176,63,25,193,184,14,116,255,221,63,25,193,184,14,116,255,221,63,181,190,241,254,237,225,197,63,92,144,67,128,132,135,218,63,92,144,67,128,132,135,218,63,99,4,23,117,132,81,225,63,40,247,209,21,247,92,205,63,40,247,209,21,247,92,205,63,28,79,209,225,68,173,232,63,142,195,186,120,236,74,189,63,142,195,186,120,236,74,189,63,218,164,97,123,125,105,238,63,96,178,229,73,40,104,153,63,96,178,229,73,40,104,153,63,143,106,202,42,87,72,184,63,143,106,202,42,87,72,184,63,230,135,108,238,239,51,209,63,187,110,112,35,253,92,228,63,230,135,108,238,239,51,209,63,187,110,112,35,253,92,228,63,66,36,15,85,2,137,146,63,66,36,15,85,2,137,146,63,245,141,248,149,180,171,210,63,227,63,91,162,221,21,230,63,245,141,248,149,180,171,210,63,227,63,91,162,221,21,230,63,217,150,209,132,68,196,150,63,217,150,209,132,68,196,150,63,117,187,37,147,122,44,192,63,108,4,16,55,191,62,235,63,117,187,37,147,122,44,192,63,108,4,16,55,191,62,235,63,38,180,143,224,22,154,150,63,104,130,251,72,47,75,223,63,104,130,251,72,47,75,223,63,64,237,21,85,60,21,197,63,176,132,186,234,176,186,218,63,176,132,186,234,176,186,218,63,245,126,220,55,176,254,220,63,142,192,17,228,167,128,209,63,142,192,17,228,167,128,209,63,251,138,103,32,170,168,228,63,248,233,48,191,171,174,198,63,248,233,48,191,171,174,198,63,218,152,206,128,120,11,236,63,124,57,139,249,59,164,175,63,124,57,139,249,59,164,175,63,42,83,230,105,76,194,238,63,99,205,154,97,57,219,147,63,99,205,154,97,57,219,147,63,100,99,174,201,116,63,173,63,100,99,174,201,116,63,173,63,4,5,49,183,213,12,198,63,137,216,152,69,211,168,232,63,4,5,49,183,213,12,198,63,137,216,152,69,211,168,232,63,51,83,65,252,91,201,183,63,51,83,65,252,91,201,183,63,115,235,70,94,35,143,213,63,224,95,84,209,66,63,226,63,115,235,70,94,35,143,213,63,224,95,84,209,66,63,226,63,207,42,205,91,56,255,141,63,207,42,205,91,56,255,141,63,162,118,178,146,138,24,211,63,4,144,55,213,189,251,229,63,162,118,178,146,138,24,211,63,4,144,55,213,189,251,229,63,64,227,35,248,195,199,84,63,64,227,35,248,195,199,84,63,248,156,170,216,28,117,190,63,111,154,238,130,248,38,236,63,248,156,170,216,28,117,190,63,111,154,238,130,248,38,236,63,160,116,210,29,162,143,140,191,233,164,59,68,31,57,224,63,233,164,59,68,31,57,224,63,59,93,17,105,90,143,193,63,186,168,187,101,41,156,219,63,186,168,187,101,41,156,219,63,105,136,137,222,136,116,220,63,194,59,187,144,187,197,209,63,194,59,187,144,187,197,209,63,216,173,56,205,255,231,231,63,79,164,142,101,0,48,192,63,79,164,142,101,0,48,192,63,8,50,125,26,224,119,235,63,226,55,11,150,127,32,178,63,226,55,11,150,127,32,178,63,13,76,131,79,70,201,238,63,152,62,203,7,155,107,147,63,152,62,203,7,155,107,147,63,223,150,0,118,51,30,193,63,223,150,0,118,51,30,193,63,101,167,71,84,83,185,208,63,141,6,92,120,201,91,227,63,101,167,71,84,83,185,208,63,141,6,92,120,201,91,227,63,78,250,42,52,167,158,162,63,78,250,42,52,167,158,162,63,180,40,126,27,194,213,216,63,1,60,254,126,52,107,226,63,180,40,126,27,194,213,216,63,1,60,254,126,52,107,226,63,192,105,39,178,145,214,132,191,192,105,39,178,145,214,132,191,251,164,75,232,27,73,210,63,41,203,162,82,204,46,231,63,251,164,75,232,27,73,210,63,41,203,162,82,204,46,231,63,103,150,89,32,51,221,162,63,103,150,89,32,51,221,162,63,179,9,28,17,197,152,203,63,45,100,179,137,251,235,231,63,179,9,28,17,197,152,203,63,45,100,179,137,251,235,231,63,159,51,188,76,135,132,137,63,159,51,188,76,135,132,137,63,22,206,219,125,238,131,186,63,120,149,17,19,112,73,236,63,22,206,219,125,238,131,186,63,120,149,17,19,112,73,236,63,79,85,85,85,85,85,213,63,9,58,69,213,102,117,117,63,131,117,85,50,21,213,223,63,131,117,85,50,21,213,223,63,254,248,136,235,221,38,198,63,183,193,29,133,72,118,218,63,183,193,29,133,72,118,218,63,224,138,138,219,25,64,174,63,73,87,71,98,254,27,222,63,73,87,71,98,254,27,222,63,7,217,188,113,196,154,224,63,242,77,134,28,119,202,206,63,242,77,134,28,119,202,206,63,227,202,56,122,186,135,230,63,58,106,142,11,139,240,194,63,58,106,142,11,139,240,194,63,206,147,193,15,148,43,235,63,199,176,249,192,175,81,179,63,199,176,249,192,175,81,179,63,216,46,96,164,21,240,238,63,135,18,253,185,165,254,144,63,135,18,253,185,165,254,144,63,97,154,218,194,239,131,186,63,97,154,218,194,239,131,186,63,153,104,48,83,196,250,210,63,103,120,12,222,31,50,227,63,153,104,48,83,196,250,210,63,103,120,12,222,31,50,227,63,242,42,2,241,190,144,148,63,242,42,2,241,190,144,148,63,68,244,26,50,65,157,213,63,134,116,106,111,217,140,228,63,68,244,26,50,65,157,213,63,134,116,106,111,217,140,228,63,192,58,39,4,223,199,113,191,192,58,39,4,223,199,113,191,172,182,200,18,49,53,202,63,203,32,86,121,67,150,233,63,172,182,200,18,49,53,202,63,203,32,86,121,67,150,233,63,216,140,110,210,100,121,165,63,216,140,110,210,100,121,165,63,6,224,117,41,230,60,200,63,58,159,123,40,48,153,232,63,6,224,117,41,230,60,200,63,58,159,123,40,48,153,232,63,130,207,65,49,102,82,141,63,130,207,65,49,102,82,141,63,106,220,61,164,37,213,181,63,44,61,179,178,17,208,236,63,106,220,61,164,37,213,181,63,44,61,179,178,17,208,236,63,79,85,85,85,85,85,213,63,23,185,196,120,206,45,119,63,142,118,14,99,164,209,223,63,142,118,14,99,164,209,223,63,67,208,175,189,94,64,162,63,5,3,37,20,250,219,222,63,5,3,37,20,250,219,222,63,25,74,104,147,37,122,185,63,198,246,146,77,187,208,220,63,198,246,146,77,187,208,220,63,82,97,46,216,38,136,201,63,172,103,244,73,246,157,217,63,172,103,244,73,246,157,217,63,112,224,11,190,213,185,223,63,209,15,250,32,21,35,208,63,209,15,250,32,21,35,208,63,255,239,164,153,5,161,229,63,240,31,182,204,244,189,196,63,240,31,182,204,244,189,196,63,3,163,200,123,217,36,235,63,245,115,221,16,154,108,179,63,245,115,221,16,154,108,179,63,40,78,233,80,131,255,238,63,129,29,107,241,202,7,144,63,129,29,107,241,202,7,144,63,22,49,68,113,226,220,132,63,22,49,68,113,226,220,132,63,207,183,46,40,127,101,213,63,84,147,35,226,204,249,228,63,207,183,46,40,127,101,213,63,84,147,35,226,204,249,228,63,231,53,47,97,32,86,193,63,231,53,47,97,32,86,193,63,185,148,1,247,193,179,210,63,42,104,51,236,150,80,226,63,185,148,1,247,193,179,210,63,42,104,51,236,150,80,226,63,182,100,229,221,115,221,171,63,182,100,229,221,115,221,171,63,190,254,96,56,234,115,212,63,95,42,241,165,51,8,228,63,190,254,96,56,234,115,212,63,95,42,241,165,51,8,228,63,20,157,106,255,212,90,138,63,20,157,106,255,212,90,138,63,142,182,14,251,254,104,200,63,232,167,62,237,84,124,233,63,142,182,14,251,254,104,200,63,232,167,62,237,84,124,233,63,168,87,224,214,198,49,177,63,168,87,224,214,198,49,177,63,151,19,193,233,18,26,199,63,28,176,179,106,66,19,232,63,151,19,193,233,18,26,199,63,28,176,179,106,66,19,232,63,136,44,227,0,187,7,142,63,136,44,227,0,187,7,142,63,186,193,171,36,127,169,180,63,23,251,102,47,177,242,236,63,186,193,171,36,127,169,180,63,23,251,102,47,177,242,236,63,79,85,85,85,85,85,213,63,70,5,118,84,121,66,139,63,226,39,174,26,246,146,223,63,226,39,174,26,246,146,223,63,93,32,45,11,66,135,175,63,250,45,77,223,139,7,222,63,250,45,77,223,139,7,222,63,163,228,207,200,220,79,192,63,224,6,204,205,8,236,219,63,224,6,204,205,8,236,219,63,135,192,1,130,92,235,202,63,222,143,127,223,40,69,217,63,222,143,127,223,40,69,217,63,194,104,17,164,93,3,224,63,125,46,221,183,68,249,207,63,125,46,221,183,68,249,207,63,117,80,214,77,24,171,229,63,40,95,83,100,207,169,196,63,40,95,83,100,207,169,196,63,98,51,129,191,3,25,235,63,85,50,251,1,241,155,179,63,85,50,251,1,241,155,179,63,196,60,136,229,165,114,238,63,190,51,124,167,161,213,152,63,190,51,124,167,161,213,152,63,224,41,247,4,23,61,237,63,69,177,70,216,71,23,166,63,69,177,70,216,71,23,166,63,24,148,55,106,7,68,129,63,24,148,55,106,7,68,129,63,60,130,59,235,103,248,214,63,146,96,185,236,187,62,228,63,60,130,59,235,103,248,214,63,146,96,185,236,187,62,228,63,33,112,177,142,184,202,192,63,33,112,177,142,184,202,192,63,35,181,96,124,125,215,210,63,102,73,35,30,147,97,226,63,35,181,96,124,125,215,210,63,102,73,35,30,147,97,226,63,207,235,66,60,58,180,169,63,207,235,66,60,58,180,169,63,141,215,42,119,23,205,212,63,133,101,166,160,48,254,227,63,141,215,42,119,23,205,212,63,133,101,166,160,48,254,227,63,138,236,213,98,244,250,176,63,138,236,213,98,244,250,176,63,220,227,141,248,122,165,199,63,111,201,129,181,66,247,231,63,220,227,141,248,122,165,199,63,111,201,129,181,66,247,231,63,54,30,181,250,117,145,136,63,54,30,181,250,117,145,136,63,203,105,67,150,136,1,204,63,20,81,132,2,88,157,232,63,203,105,67,150,136,1,204,63,20,81,132,2,88,157,232,63,38,16,236,128,236,109,142,63,38,16,236,128,236,109,142,63,0,44,185,244,231,230,185,63,63,42,101,79,107,73,236,63,0,44,185,244,231,230,185,63,63,42,101,79,107,73,236,63,161,155,133,183,158,8,162,191,161,155,133,183,158,8,162,191,39,186,0,29,49,96,149,63,244,41,72,49,196,58,240,63,39,186,0,29,49,96,149,63,244,41,72,49,196,58,240,63,79,85,85,85,85,85,213,63,72,199,207,237,91,71,149,63,189,129,145,32,197,85,223,63,189,129,145,32,197,85,223,63,135,253,18,190,240,70,183,63,88,160,61,232,33,23,221,63,88,160,61,232,33,23,221,63,146,180,138,164,193,60,201,63,219,82,221,150,207,176,217,63,219,82,221,150,207,176,217,63,67,51,243,88,21,74,223,63,104,102,134,83,245,90,208,63,104,102,134,83,245,90,208,63,157,69,103,71,193,170,228,63,215,116,49,113,125,170,198,63,215,116,49,113,125,170,198,63,252,165,244,123,194,244,232,63,15,104,45,16,246,44,188,63,15,104,45,16,246,44,188,63,173,44,182,17,56,114,236,63,221,154,78,114,63,110,172,63,221,154,78,114,63,110,172,63,226,46,247,16,52,49,239,63,216,36,26,225,125,217,137,63,216,36,26,225,125,217,137,63,226,198,162,49,177,149,109,63,226,198,162,49,177,149,109,63,138,190,59,227,11,84,217,63,244,125,48,93,100,56,227,63,138,190,59,227,11,84,217,63,244,125,48,93,100,56,227,63,102,242,141,228,52,54,193,63,102,242,141,228,52,54,193,63,154,90,142,246,31,181,211,63,26,86,149,203,226,215,225,63,154,90,142,246,31,181,211,63,26,86,149,203,226,215,225,63,12,236,31,194,224,149,141,63,12,236,31,194,224,149,141,63,163,139,192,53,170,238,208,63,126,58,23,98,83,18,231,63,163,139,192,53,170,238,208,63,126,58,23,98,83,18,231,63,200,111,99,148,173,7,168,63,200,111,99,148,173,7,168,63,240,109,3,10,79,242,214,63,12,18,184,161,93,6,227,63,240,109,3,10,79,242,214,63,12,18,184,161,93,6,227,63,94,71,189,74,52,112,103,63,94,71,189,74,52,112,103,63,168,209,217,119,8,51,196,63,88,206,190,173,205,219,234,63,168,209,217,119,8,51,196,63,88,206,190,173,205,219,234,63,153,19,171,187,125,167,204,63,153,19,171,187,125,167,204,63,97,139,142,19,132,54,179,63,174,105,163,14,80,111,230,63,97,139,142,19,132,54,179,63,174,105,163,14,80,111,230,63,193,231,122,234,66,189,161,63,193,231,122,234,66,189,161,63,233,81,131,251,222,58,194,63,10,125,119,18,116,85,234,63,233,81,131,251,222,58,194,63,10,125,119,18,116,85,234,63,97,208,139,88,90,207,132,63,97,208,139,88,90,207,132,63,13,14,174,133,65,196,176,63,253,14,232,101,58,148,237,63,13,14,174,133,65,196,176,63,253,14,232,101,58,148,237,63,79,85,85,85,85,85,213,63,225,230,131,167,18,37,95,191,250,224,169,68,201,7,224,63,250,224,169,68,201,7,224,63,139,206,126,1,206,35,152,63,149,9,244,143,225,62,223,63,149,9,244,143,225,62,223,63,249,141,160,39,83,248,182,63,74,238,11,155,245,32,221,63,74,238,11,155,245,32,221,63,162,21,29,237,197,22,201,63,142,186,184,132,78,186,217,63,142,186,184,132,78,186,217,63,107,10,167,176,230,62,223,63,193,122,172,167,140,96,208,63,193,122,172,167,140,96,208,63,80,222,23,154,106,180,228,63,97,67,208,203,42,151,198,63,97,67,208,203,42,151,198,63,50,119,200,195,67,85,233,63,19,35,222,240,240,170,186,63,19,35,222,240,240,170,186,63,229,183,247,161,132,154,236,63,214,64,66,240,218,43,171,63,214,64,66,240,218,43,171,63,148,55,213,116,30,86,237,63,96,67,86,89,12,79,165,63,96,67,86,89,12,79,165,63,136,77,149,230,61,66,239,63,247,78,86,45,67,184,135,63,247,78,86,45,67,184,135,63,25,106,151,39,168,244,168,63,25,106,151,39,168,244,168,63,217,27,190,239,29,18,214,63,114,123,167,133,166,103,227,63,217,27,190,239,29,18,214,63,114,123,167,133,166,103,227,63,149,223,9,152,212,220,121,63,149,223,9,152,212,220,121,63,105,28,123,137,149,46,216,63,12,94,18,146,251,180,227,63,105,28,123,137,149,46,216,63,12,94,18,146,251,180,227,63,144,28,136,163,72,49,193,63,144,28,136,163,72,49,193,63,114,110,151,106,234,159,211,63,163,65,210,161,184,227,225,63,114,110,151,106,234,159,211,63,163,65,210,161,184,227,225,63,184,171,135,76,88,158,140,63,184,171,135,76,88,158,140,63,149,167,13,67,249,236,207,63,108,119,10,78,72,146,231,63,149,167,13,67,249,236,207,63,108,119,10,78,72,146,231,63,20,174,22,31,48,87,179,63,20,174,22,31,48,87,179,63,210,146,180,37,60,60,203,63,137,5,176,242,10,198,230,63,210,146,180,37,60,60,203,63,137,5,176,242,10,198,230,63,43,167,219,130,82,35,129,191,43,167,219,130,82,35,129,191,109,218,190,110,195,207,194,63,248,183,91,110,156,144,235,63,109,218,190,110,195,207,194,63,248,183,91,110,156,144,235,63,119,22,210,99,151,83,155,63,119,22,210,99,151,83,155,63,15,110,236,162,9,161,193,63,201,83,38,220,32,189,234,63,15,110,236,162,9,161,193,63,201,83,38,220,32,189,234,63,0,103,83,235,10,154,133,63,0,103,83,235,10,154,133,63,12,163,252,8,125,144,174,63,60,232,194,3,144,192,237,63,12,163,252,8,125,144,174,63,60,232,194,3,144,192,237,63,0,0,0,0,0,0,0,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,118,28,199,113,28,199,225,63,29,199,113,28,199,113,236,63,118,28,199,113,28,199,225,63,110,182,231,247,64,67,214,63,201,36,12,132,95,222,228,63,201,36,12,132,95,222,228,63,110,182,231,247,64,67,214,63,223,188,154,120,86,52,226,63,92,65,174,37,218,161,222,63,92,65,174,37,218,161,222,63,141,3,110,195,158,83,206,63,141,3,110,195,158,83,206,63,28,76,121,181,183,22,215,63,28,76,121,181,183,22,215,63,231,69,149,73,77,242,221,63,231,69,149,73,77,242,221,63,250,219,226,1,246,237,197,63,250,219,226,1,246,237,197,63,166,47,60,224,215,191,218,63,61,43,227,78,231,111,216,63,61,43,227,78,231,111,216,63,67,134,61,113,177,230,209,63,67,134,61,113,177,230,209,63,87,109,130,159,246,146,192,63,87,109,130,159,246,146,192,63,0,0,0,0,0,0,0,0,30,51,144,69,167,121,226,191,30,51,144,69,167,121,226,63,68,114,63,244,126,201,232,191,0,0,0,0,0,0,0,0,68,114,63,244,126,201,232,63,137,57,246,188,109,142,235,191,247,61,221,217,63,194,213,191,247,61,221,217,63,194,213,63,137,57,246,188,109,142,235,63,0,0,0,0,0,0,0,0,5,183,153,253,35,59,225,191,5,183,153,253,35,59,225,63,105,58,83,224,108,255,236,191,105,58,83,224,108,255,236,63,94,201,85,150,160,40,229,191,94,201,85,150,160,40,229,63,197,117,54,208,18,139,206,191,197,117,54,208,18,139,206,63,30,160,128,78,202,214,237,191,30,160,128,78,202,214,237,63,0,0,0,0,0,0,0,0,98,253,25,241,93,249,217,191,98,253,25,241,93,249,217,63,214,161,227,155,159,186,231,191,214,161,227,155,159,186,231,63,41,98,124,142,23,95,238,191,41,98,124,142,23,95,238,63,156,164,0,0,63,72,2,0,168,0,0,0,0,0,0,0,156,164,0,0,14,79,2,0,128,98,0,0,0,0,0,0,116,164,0,0,27,79,2,0,156,164,0,0,40,79,2,0,128,98,0,0,0,0,0,0,116,164,0,0,58,79,2,0,156,164,0,0,71,79,2,0,128,98,0,0,0,0,0,0,156,164,0,0,83,79,2,0,152,98,0,0,0,0,0,0,156,164,0,0,116,79,2,0,176,98,0,0,0,0,0,0,156,164,0,0,186,79,2,0,176,98,0,0,0,0,0,0,156,164,0,0,150,79,2,0,208,98,0,0,0,0,0,0,156,164,0,0,220,79,2,0,192,98,0,0,0,0,0,0,156,164,0,0,1,80,2,0,192,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,164,0,0,152,101,2,0,152,99,0,0,0,0,0,0,156,164,0,0,215,101,2,0,152,99,0,0,0,0,0,0,156,164,0,0,239,101,2,0,144,99,0,0,0,0,0,0,156,164,0,0,8,102,2,0,144,99,0,0,0,0,0,0,156,164,0,0,32,102,2,0,16,107,0,0,0,0,0,0,116,164,0,0,58,102,2,0,156,164,0,0,76,102,2,0,104,99,0,0,0,0,0,0,156,164,0,0,118,102,2,0,104,99,0,0,0,0,0,0,116,164,0,0,160,102,2,0,116,164,0,0,209,102,2,0,196,164,0,0,2,103,2,0,0,0,0,0,1,0,0,0,112,99,0,0,3,244,255,255,196,164,0,0,49,103,2,0,0,0,0,0,1,0,0,0,128,99,0,0,3,244,255,255,196,164,0,0,96,103,2,0,0,0,0,0,1,0,0,0,112,99,0,0,3,244,255,255,196,164,0,0,143,103,2,0,0,0,0,0,1,0,0,0,128,99,0,0,3,244,255,255,156,164,0,0,190,103,2,0,40,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,164,0,0,58,104,2,0,8,107,0,0,0,0,0,0,196,164,0,0,80,104,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,56,106,0,0,2,0,0,0,196,164,0,0,98,104,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,64,106,0,0,2,0,0,0,196,164,0,0,132,104,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,64,106,0,0,2,0,0,0,196,164,0,0,167,104,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,64,106,0,0,2,0,0,0,156,164,0,0,202,104,2,0,136,100,0,0,0,0,0,0,156,164,0,0,236,104,2,0,136,100,0,0,0,0,0,0,196,164,0,0,15,105,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,64,106,0,0,2,0,0,0,156,164,0,0,49,105,2,0,24,100,0,0,0,0,0,0,156,164,0,0,71,105,2,0,24,100,0,0,0,0,0,0,156,164,0,0,91,105,2,0,24,100,0,0,0,0,0,0,196,164,0,0,111,105,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,56,106,0,0,2,0,0,0,156,164,0,0,129,105,2,0,24,100,0,0,0,0,0,0,156,164,0,0,150,105,2,0,24,100,0,0,0,0,0,0,196,164,0,0,171,105,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,72,106,0,0,0,0,0,0,196,164,0,0,239,105,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,96,106,0,0,0,0,0,0,196,164,0,0,51,106,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,120,106,0,0,0,0,0,0,196,164,0,0,119,106,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,144,106,0,0,0,0,0,0,196,164,0,0,187,106,2,0,0,0,0,0,3,0,0,0,24,100,0,0,2,0,0,0,168,106,0,0,2,0,0,0,176,106,0,0,0,8,0,0,196,164,0,0,0,107,2,0,0,0,0,0,3,0,0,0,24,100,0,0,2,0,0,0,168,106,0,0,2,0,0,0,184,106,0,0,0,8,0,0,196,164,0,0,69,107,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,192,106,0,0,0,8,0,0,196,164,0,0,138,107,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,192,106,0,0,0,8,0,0,196,164,0,0,207,107,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,200,106,0,0,2,0,0,0,196,164,0,0,235,107,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,200,106,0,0,2,0,0,0,196,164,0,0,7,108,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,200,106,0,0,2,0,0,0,196,164,0,0,35,108,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,200,106,0,0,2,0,0,0,196,164,0,0,63,108,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,208,106,0,0,0,0,0,0,196,164,0,0,133,108,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,216,106,0,0,0,0,0,0,196,164,0,0,203,108,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,224,106,0,0,0,0,0,0,196,164,0,0,17,109,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,232,106,0,0,0,0,0,0,196,164,0,0,87,109,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,240,106,0,0,2,0,0,0,196,164,0,0,108,109,2,0,0,0,0,0,2,0,0,0,24,100,0,0,2,0,0,0,240,106,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,164,0,0,200,112,2,0,116,164,0,0,177,112,2,0,196,164,0,0,155,112,2,0,0,0,0,0,1,0,0,0,0,107,0,0,0,0,0,0,196,164,0,0,108,112,2,0,0,0,0,0,1,0,0,0,0,107,0,0,0,0,0,0,196,164,0,0,86,112,2,0,0,0,0,0,1,0,0,0,248,106,0,0,0,0,0,0,196,164,0,0,39,112,2,0,0,0,0,0,1,0,0,0,248,106,0,0,0,0,0,0,116,164,0,0,20,112,2,0,116,164,0,0,242,111,2,0,116,164,0,0,208,111,2,0,116,164,0,0,187,111,2,0,116,164,0,0,166,111,2,0,116,164,0,0,141,111,2,0,116,164,0,0,116,111,2,0,116,164,0,0,91,111,2,0,116,164,0,0,66,111,2,0,116,164,0,0,42,111,2,0,116,164,0,0,61,112,2,0,116,164,0,0,130,112,2,0,116,164,0,0,221,112,2,0,156,164,0,0,246,112,2,0,136,98,0,0,0,0,0,0,116,164,0,0,13,113,2,0,156,164,0,0,38,113,2,0,32,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,8,0,0,0,1,0,0,0,2,0,0,0,200,255,255,255,200,255,255,255,8,0,0,0,3,0,0,0,4,0,0,0,76,107,0,0,132,107,0,0,152,107,0,0,96,107,0,0,56,0,0,0,0,0,0,0,208,99,0,0,5,0,0,0,6,0,0,0,200,255,255,255,200,255,255,255,208,99,0,0,7,0,0,0,8,0,0,0,0,0,0,0,24,0,0,0,9,0,0,0,10,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,176,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,2,0,0,0,0,0,0,0,136,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,3,0,0,0,2,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,0,0,0,0,64,1,0,0,19,0,0,0,20,0,0,0,21,0,0,0,15,0,0,0,16,0,0,0,4,0,0,0,17,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,5,0,0,0,5,0,0,0,1,0,0,0,6,0,0,0,2,0,0,0,3,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,4,0,0,0,5,0,0,0,7,0,0,0,6,0,0,0,8,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,2,0,0,0,17,0,0,0,0,0,0,0,48,1,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,9,0,0,0,7,0,0,0,21,0,0,0,22,0,0,0,1,0,0,0,23,0,0,0,0,0,0,0,8,1,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,10,0,0,0,8,0,0,0,27,0,0,0,28,0,0,0,2,0,0,0,29,0,0,0,0,0,0,0,232,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,11,0,0,0,9,0,0,0,33,0,0,0,34,0,0,0,3,0,0,0,35,0,0,0,0,0,0,0,216,0,0,0,19,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,12,0,0,0,38,0,0,0,18,0,0,0,19,0,0,0,10,0,0,0,13,0,0,0,20,0,0,0,2,0,0,0,21,0,0,0,11,0,0,0,12,0,0,0,14,0,0,0,3,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,2,0,0,0,28,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,15,0,0,0,16,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,4,0,0,0,32,0,0,0,0,0,0,0,192,0,0,0,19,0,0,0,36,0,0,0,37,0,0,0,39,0,0,0,40,0,0,0,17,0,0,0,41,0,0,0,33,0,0,0,34,0,0,0,16,0,0,0,18,0,0,0,35,0,0,0,3,0,0,0,36,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,5,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,3,0,0,0,43,0,0,0,19,0,0,0,20,0,0,0,20,0,0,0,21,0,0,0,21,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,6,0,0,0,47,0,0,0,0,0,0,0,24,1,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,7,0,0,0,1,0,0,0,22,0,0,0,48,0,0,0,49,0,0,0,42,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,43,0,0,0,5,0,0,0,50,0,0,0,1,0,0,0,6,0,0,0,2,0,0,0,23,0,0,0,0,0,0,0,80,1,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,22,0,0,0,47,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,24,0,0,0,1,0,0,0,23,0,0,0,24,0,0,0,54,0,0,0,25,0,0,0,25,0,0,0,1,0,0,0,55,0,0,0,56,0,0,0,26,0,0,0,7,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,6,0,0,0,1,0,0,0,57,0,0,0,58,0,0,0,27,0,0,0,1,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,26,0,0,0,27,0,0,0,0,0,0,0,112,1,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,28,0,0,0,50,0,0,0,28,0,0,0,6,0,0,0,8,0,0,0,0,0,0,0,144,1,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,3,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,54,0,0,0,55,0,0,0,1,0,0,0,59,0,0,0,5,0,0,0,0,0,0,0,168,1,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,29,0,0,0,0,0,0,0,184,1,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,30,0,0,0,0,0,0,0,200,1,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,62,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,32,0,0,0,33,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,60,0,0,0,34,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,252,255,255,255,200,1,0,0,1,0,0,0,2,0,0,0,35,0,0,0,36,0,0,0,1,0,0,0,0,0,0,0,240,1,0,0,68,0,0,0,69,0,0,0,65,0,0,0,66,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,31,0,0,0,1,0,0,0,32,0,0,0,33,0,0,0,32,0,0,0,33,0,0,0,9,0,0,0,70,0,0,0,67,0,0,0,60,0,0,0,34,0,0,0,9,0,0,0,61,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,2,0,0,0,34,0,0,0,35,0,0,0,37,0,0,0,36,0,0,0,65,0,0,0,10,0,0,0,38,0,0,0,66,0,0,0,67,0,0,0,10,0,0,0,4,0,0,0,37,0,0,0,38,0,0,0,2,0,0,0,2,0,0,0,7,0,0,0,8,0,0,0,68,0,0,0,9,0,0,0,69,0,0,0,39,0,0,0,70,0,0,0,3,0,0,0,62,0,0,0,63,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,3,0,0,0,40,0,0,0,41,0,0,0,7,0,0,0,42,0,0,0,43,0,0,0,71,0,0,0,72,0,0,0,10,0,0,0,73,0,0,0,74,0,0,0,11,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,1,0,0,0,8,0,0,0,75,0,0,0,12,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,13,0,0,0,3,0,0,0,14,0,0,0,44,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,4,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,76,0,0,0,77,0,0,0,64,0,0,0,78,0,0,0,53,0,0,0,74,0,0,0,75,0,0,0,48,0,0,0,4,0,0,0,65,0,0,0,79,0,0,0,80,0,0,0,1,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,15,0,0,0,81,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,5,0,0,0,79,0,0,0,80,0,0,0,5,0,0,0,11,0,0,0,49,0,0,0,82,0,0,0,15,0,0,0,54,0,0,0,3,0,0,0,50,0,0,0,12,0,0,0,1,0,0,0,2,0,0,0,9,0,0,0,20,0,0,0,21,0,0,0,55,0,0,0,51,0,0,0,252,255,255,255,240,1,0,0,52,0,0,0,2,0,0,0,35,0,0,0,36,0,0,0,56,0,0,0,0,0,0,0,40,2,0,0,81,0,0,0,82,0,0,0,65,0,0,0,66,0,0,0,62,0,0,0,83,0,0,0,84,0,0,0,53,0,0,0,1,0,0,0,32,0,0,0,33,0,0,0,54,0,0,0,55,0,0,0,13,0,0,0,83,0,0,0,84,0,0,0,66,0,0,0,57,0,0,0,22,0,0,0,67,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,4,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,58,0,0,0,85,0,0,0,23,0,0,0,59,0,0,0,86,0,0,0,87,0,0,0,14,0,0,0,10,0,0,0,59,0,0,0,60,0,0,0,3,0,0,0,6,0,0,0,16,0,0,0,17,0,0,0,88,0,0,0,18,0,0,0,89,0,0,0,60,0,0,0,90,0,0,0,7,0,0,0,68,0,0,0,69,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,4,0,0,0,61,0,0,0,62,0,0,0,8,0,0,0,63,0,0,0,64,0,0,0,91,0,0,0,92,0,0,0,19,0,0,0,93,0,0,0,94,0,0,0,20,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,11,0,0,0,12,0,0,0,2,0,0,0,13,0,0,0,2,0,0,0,14,0,0,0,95,0,0,0,21,0,0,0,6,0,0,0,2,0,0,0,2,0,0,0,22,0,0,0,7,0,0,0,23,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,66,0,0,0,67,0,0,0,69,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,8,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,96,0,0,0,97,0,0,0,70,0,0,0,98,0,0,0,74,0,0,0,88,0,0,0,89,0,0,0,70,0,0,0,8,0,0,0,71,0,0,0,99,0,0,0,100,0,0,0,2,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,28,0,0,0,101,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,9,0,0,0,93,0,0,0,94,0,0,0,9,0,0,0,15,0,0,0,71,0,0,0,102,0,0,0,24,0,0,0,75,0,0,0,5,0,0,0,72,0,0,0,16,0,0,0,3,0,0,0,4,0,0,0,15,0,0,0,33,0,0,0,34,0,0,0,76,0,0,0,73,0,0,0,252,255,255,255,40,2,0,0,74,0,0,0,2,0,0,0,35,0,0,0,36,0,0,0,77,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,88,2,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,62,0,0,0,103,0,0,0,104,0,0,0,75,0,0,0,1,0,0,0,32,0,0,0,33,0,0,0,76,0,0,0,77,0,0,0,17,0,0,0,97,0,0,0,67,0,0,0,60,0,0,0,34],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([35,0,0,0,72,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,6,0,0,0,78,0,0,0,79,0,0,0,78,0,0,0,80,0,0,0,105,0,0,0,36,0,0,0,79,0,0,0,106,0,0,0,107,0,0,0,18,0,0,0,16,0,0,0,81,0,0,0,82,0,0,0,4,0,0,0,10,0,0,0,25,0,0,0,26,0,0,0,108,0,0,0,27,0,0,0,109,0,0,0,80,0,0,0,110,0,0,0,11,0,0,0,73,0,0,0,74,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,5,0,0,0,81,0,0,0,82,0,0,0,9,0,0,0,83,0,0,0,84,0,0,0,111,0,0,0,112,0,0,0,28,0,0,0,113,0,0,0,114,0,0,0,29,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,17,0,0,0,18,0,0,0,3,0,0,0,19,0,0,0,3,0,0,0,20,0,0,0,115,0,0,0,30,0,0,0,10,0,0,0,3,0,0,0,3,0,0,0,31,0,0,0,11,0,0,0,32,0,0,0,85,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,86,0,0,0,87,0,0,0,91,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,12,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,116,0,0,0,117,0,0,0,75,0,0,0,118,0,0,0,94,0,0,0,101,0,0,0,102,0,0,0,92,0,0,0,12,0,0,0,76,0,0,0,119,0,0,0,120,0,0,0,3,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,41,0,0,0,121,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,13,0,0,0,106,0,0,0,107,0,0,0,13,0,0,0,19,0,0,0,93,0,0,0,122,0,0,0,33,0,0,0,95,0,0,0,7,0,0,0,94,0,0,0,20,0,0,0,5,0,0,0,6,0,0,0,21,0,0,0,46,0,0,0,47,0,0,0,96,0,0,0,95,0,0,0,252,255,255,255,88,2,0,0,96,0,0,0,2,0,0,0,35,0,0,0,36,0,0,0,97,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,0,0,0,0,136,2,0,0,108,0,0,0,109,0,0,0,65,0,0,0,66,0,0,0,62,0,0,0,123,0,0,0,124,0,0,0,97,0,0,0,1,0,0,0,32,0,0,0,33,0,0,0,98,0,0,0,99,0,0,0,21,0,0,0,110,0,0,0,67,0,0,0,60,0,0,0,34,0,0,0,48,0,0,0,77,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,8,0,0,0,100,0,0,0,101,0,0,0,98,0,0,0,102,0,0,0,125,0,0,0,49,0,0,0,99,0,0,0,126,0,0,0,127,0,0,0,22,0,0,0,22,0,0,0,103,0,0,0,104,0,0,0,5,0,0,0,14,0,0,0,34,0,0,0,35,0,0,0,128,0,0,0,36,0,0,0,129,0,0,0,100,0,0,0,130,0,0,0,15,0,0,0,78,0,0,0,79,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,6,0,0,0,101,0,0,0,102,0,0,0,10,0,0,0,103,0,0,0,104,0,0,0,131,0,0,0,132,0,0,0,37,0,0,0,133,0,0,0,134,0,0,0,38,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,23,0,0,0,24,0,0,0,4,0,0,0,25,0,0,0,4,0,0,0,26,0,0,0,135,0,0,0,39,0,0,0,14,0,0,0,4,0,0,0,4,0,0,0,40,0,0,0,15,0,0,0,41,0,0,0,105,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,106,0,0,0,107,0,0,0,113,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,16,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,136,0,0,0,137,0,0,0,80,0,0,0,138,0,0,0,114,0,0,0,114,0,0,0,115,0,0,0,114,0,0,0,16,0,0,0,81,0,0,0,139,0,0,0,140,0,0,0,4,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,54,0,0,0,141,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,17,0,0,0,119,0,0,0,120,0,0,0,17,0,0,0,23,0,0,0,115,0,0,0,142,0,0,0,42,0,0,0,115,0,0,0,9,0,0,0,116,0,0,0,24,0,0,0,7,0,0,0,8,0,0,0,27,0,0,0,59,0,0,0,60,0,0,0,116,0,0,0,117,0,0,0,252,255,255,255,136,2,0,0,118,0,0,0,2,0,0,0,35,0,0,0,36,0,0,0,117,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,2,0,0,0,5,0,0,0,0,0,0,0,184,2,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,143,0,0,0,144,0,0,0,145,0,0,0,119,0,0,0,146,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,118,0,0,0,2,0,0,0,120,0,0,0,121,0,0,0,85,0,0,0,119,0,0,0,122,0,0,0,6,0,0,0,86,0,0,0,87,0,0,0,120,0,0,0,10,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,11,0,0,0,12,0,0,0,11,0,0,0,2,0,0,0,88,0,0,0,89,0,0,0,121,0,0,0,18,0,0,0,6,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,147,0,0,0,148,0,0,0,149,0,0,0,123,0,0,0,27,0,0,0,0,0,0,0,96,1,0,0,125,0,0,0,126,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,124,0,0,0,27,0,0,0,0,0,0,0,216,2,0,0,127,0,0,0,128,0,0,0,129,0,0,0,130,0,0,0,150,0,0,0,151,0,0,0,152,0,0,0,125,0,0,0,153,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,122,0,0,0,3,0,0,0,126,0,0,0,127,0,0,0,93,0,0,0,123,0,0,0,128,0,0,0,7,0,0,0,94,0,0,0,95,0,0,0,124,0,0,0,13,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,14,0,0,0,15,0,0,0,12,0,0,0,3,0,0,0,96,0,0,0,97,0,0,0,125,0,0,0,19,0,0,0,7,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,154,0,0,0,155,0,0,0,156,0,0,0,129,0,0,0,27,0,0,0,0,0,0,0,248,2,0,0,131,0,0,0,132,0,0,0,133,0,0,0,134,0,0,0,157,0,0,0,158,0,0,0,159,0,0,0,130,0,0,0,160,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,126,0,0,0,4,0,0,0,131,0,0,0,132,0,0,0,101,0,0,0,127,0,0,0,133,0,0,0,8,0,0,0,102,0,0,0,103,0,0,0,128,0,0,0,16,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,17,0,0,0,18,0,0,0,13,0,0,0,4,0,0,0,104,0,0,0,105,0,0,0,129,0,0,0,20,0,0,0,8,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,161,0,0,0,162,0,0,0,163,0,0,0,134,0,0,0,27,0,0,0,0,0,0,0,8,3,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,164,0,0,0,165,0,0,0,166,0,0,0,135,0,0,0,167,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,130,0,0,0,5,0,0,0,136,0,0,0,137,0,0,0,109,0,0,0,131,0,0,0,138,0,0,0,9,0,0,0,110,0,0,0,111,0,0,0,132,0,0,0,19,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,20,0,0,0,21,0,0,0,14,0,0,0,5,0,0,0,112,0,0,0,113,0,0,0,133,0,0,0,21,0,0,0,9,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,168,0,0,0,169,0,0,0,170,0,0,0,139,0,0,0,27,0,0,0,0,0,0,0,24,3,0,0,139,0,0,0,140,0,0,0,141,0,0,0,142,0,0,0,171,0,0,0,172,0,0,0,173,0,0,0,140,0,0,0,174,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,134,0,0,0,6,0,0,0,141,0,0,0,142,0,0,0,117,0,0,0,135,0,0,0,143,0,0,0,10,0,0,0,118,0,0,0,119,0,0,0,136,0,0,0,22,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,23,0,0,0,24,0,0,0,15,0,0,0,6,0,0,0,120,0,0,0,121,0,0,0,137,0,0,0,22,0,0,0,10,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,175,0,0,0,176,0,0,0,177,0,0,0,144,0,0,0,27,0,0,0,0,0,0,0,40,3,0,0,143,0,0,0,144,0,0,0,145,0,0,0,146,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,145,0,0,0,181,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,138,0,0,0,7,0,0,0,146,0,0,0,147,0,0,0,125,0,0,0,139,0,0,0,148,0,0,0,11,0,0,0,126,0,0,0,127,0,0,0,140,0,0,0,25,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,26,0,0,0,27,0,0,0,16,0,0,0,7,0,0,0,128,0,0,0,129,0,0,0,141,0,0,0,23,0,0,0,11,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,182,0,0,0,183,0,0,0,184,0,0,0,124,0,0,0,149,0,0,0,0,0,0,0,56,3,0,0,147,0,0,0,148,0,0,0,149,0,0,0,150,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,150,0,0,0,188,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,142,0,0,0,8,0,0,0,151,0,0,0,152,0,0,0,133,0,0,0,143,0,0,0,153,0,0,0,12,0,0,0,134,0,0,0,135,0,0,0,144,0,0,0,28,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,29,0,0,0,30,0,0,0,17,0,0,0,8,0,0,0,136,0,0,0,137,0,0,0,145,0,0,0,24,0,0,0,12,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,154,0,0,0,27,0,0,0,0,0,0,0,72,3,0,0,151,0,0,0,152,0,0,0,153,0,0,0,154,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,155,0,0,0,64,0,0,0,138,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,18,0,0,0,19,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,20,0,0,0,21,0,0,0,149,0,0,0,195,0,0,0,155,0,0,0,1,0,0,0,150,0,0,0,10,0,0,0,151,0,0,0,11,0,0,0,12,0,0,0,152,0,0,0,156,0,0,0,7,0,0,0,153,0,0,0,154,0,0,0,155,0,0,0,252,255,255,255,72,3,0,0,157,0,0,0,8,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,0,0,0,0,120,3,0,0,156,0,0,0,157,0,0,0,158,0,0,0,159,0,0,0,196,0,0,0,197,0,0,0,198,0,0,0,158,0,0,0,65,0,0,0,139,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,22,0,0,0,23,0,0,0,159,0,0,0,160,0,0,0,161,0,0,0,24,0,0,0,25,0,0,0,162,0,0,0,199,0,0,0,160,0,0,0,2,0,0,0,163,0,0,0,13,0,0,0,164,0,0,0,14,0,0,0,15,0,0,0,165,0,0,0,159,0,0,0,9,0,0,0,166,0,0,0,167,0,0,0,168,0,0,0,252,255,255,255,120,3,0,0,160,0,0,0,10,0,0,0,169,0,0,0,170,0,0,0,171,0,0,0,0,0,0,0,136,3,0,0,161,0,0,0,162,0,0,0,163,0,0,0,164,0,0,0,200,0,0,0,201,0,0,0,202,0,0,0,161,0,0,0,165,0,0,0,172,0,0,0,66,0,0,0,25,0,0,0,0,0,0,0,152,3,0,0,166,0,0,0,167,0,0,0,168,0,0,0,169,0,0,0,203,0,0,0,204,0,0,0,205,0,0,0,162,0,0,0,170,0,0,0,173,0,0,0,67,0,0,0,26,0,0,0,0,0,0,0,168,3,0,0,171,0,0,0,172,0,0,0,173,0,0,0,174,0,0,0,206,0,0,0,207,0,0,0,208,0,0,0,163,0,0,0,16,0,0,0,140,0,0,0,174,0,0,0,141,0,0,0,142,0,0,0,143,0,0,0,209,0,0,0,68,0,0,0,210,0,0,0,26,0,0,0,9,0,0,0,27,0,0,0,175,0,0,0,17,0,0,0,3,0,0,0,11,0,0,0,175,0,0,0,176,0,0,0,177,0,0,0,164,0,0,0,252,255,255,255,168,3,0,0,165,0,0,0,12,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,0,0,0,0,216,3,0,0,176,0,0,0,177,0,0,0,178,0,0,0,179,0,0,0,211,0,0,0,212,0,0,0,213,0,0,0,166,0,0,0,18,0,0,0,144,0,0,0,181,0,0,0,145,0,0,0,146,0,0,0,147,0,0,0,214,0,0,0,69,0,0,0,215,0,0,0,28,0,0,0,10,0,0,0,29,0,0,0,180,0,0,0,19,0,0,0,4,0,0,0,167,0,0,0,13,0,0,0,182,0,0,0,183,0,0,0,184,0,0,0,252,255,255,255,216,3,0,0,168,0,0,0,14,0,0,0,185,0,0,0,186,0,0,0,187,0,0,0,0,0,0,0,232,3,0,0,181,0,0,0,182,0,0,0,183,0,0,0,184,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,169,0,0,0,20,0,0,0,148,0,0,0,188,0,0,0,149,0,0,0,150,0,0,0,151,0,0,0,219,0,0,0,70,0,0,0,220,0,0,0,30,0,0,0,11,0,0,0,31,0,0,0,185,0,0,0,21,0,0,0,5,0,0,0,15,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,170,0,0,0,252,255,255,255,232,3,0,0,171,0,0,0,16,0,0,0,192,0,0,0,193,0,0,0,194,0,0,0,0,0,0,0,248,3,0,0,186,0,0,0,187,0,0,0,188,0,0,0,221,0,0,0,222,0,0,0,172,0,0,0,223,0,0,0,152,0,0,0,153,0,0,0,195,0,0,0,173,0,0,0,154,0,0,0,32,0,0,0,155,0,0,0,196,0,0,0,197,0,0,0,174,0,0,0,27,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,159,0,0,0,160,0,0,0,161,0,0,0,31,0,0,0,162,0,0,0,198,0,0,0,199,0,0,0,175,0,0,0,200,0,0,0,176,0,0,0,163,0,0,0,164,0,0,0,165,0,0,0,28,0,0,0,166,0,0,0,0,0,0,0,8,4,0,0,189,0,0,0,190,0,0,0,191,0,0,0,224,0,0,0,225,0,0,0,177,0,0,0,226,0,0,0,167,0,0,0,168,0,0,0,201,0,0,0,178,0,0,0,169,0,0,0,33,0,0,0,170,0,0,0,202,0,0,0,203,0,0,0,179,0,0,0,29,0,0,0,171,0,0,0,172,0,0,0,173,0,0,0,174,0,0,0,175,0,0,0,176,0,0,0,32,0,0,0,177,0,0,0,204,0,0,0,205,0,0,0,180,0,0,0,206,0,0,0,181,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,30,0,0,0,181,0,0,0,0,0,0,0,24,4,0,0,192,0,0,0,193,0,0,0,194,0,0,0,227,0,0,0,228,0,0,0,182,0,0,0,229,0,0,0,182,0,0,0,183,0,0,0,207,0,0,0,183,0,0,0,184,0,0,0,34,0,0,0,185,0,0,0,208,0,0,0,209,0,0,0,184,0,0,0,31,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,189,0,0,0,190,0,0,0,191,0,0,0,33,0,0,0,192,0,0,0,210,0,0,0,211,0,0,0,185,0,0,0,212,0,0,0,186,0,0,0,193,0,0,0,194,0,0,0,195,0,0,0,32,0,0,0,196,0,0,0,0,0,0,0,40,4,0,0,195,0,0,0,196,0,0,0,197,0,0,0,230,0,0,0,231,0,0,0,187,0,0,0,232,0,0,0,197,0,0,0,198,0,0,0,213,0,0,0,188,0,0,0,199,0,0,0,35,0,0,0,200,0,0,0,214,0,0,0,215,0,0,0,189,0,0,0,33,0,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,205,0,0,0,206,0,0,0,34,0,0,0,207,0,0,0,216,0,0,0,217,0,0,0,190,0,0,0,218,0,0,0,191,0,0,0,208,0,0,0,209,0,0,0,210,0,0,0,34,0,0,0,211,0,0,0,0,0,0,0,56,4,0,0,198,0,0,0,199,0,0,0,200,0,0,0,233,0,0,0,234,0,0,0,192,0,0,0,235,0,0,0,212,0,0,0,213,0,0,0,219,0,0,0,193,0,0,0,214,0,0,0,36,0,0,0,215,0,0,0,220,0,0,0,221,0,0,0,194,0,0,0,35,0,0,0,216,0,0,0,217,0,0,0,218,0,0,0,219,0,0,0,220,0,0,0,221,0,0,0,35,0,0,0,222,0,0,0,222,0,0,0,223,0,0,0,195,0,0,0,224,0,0,0,196,0,0,0,223,0,0,0,224,0,0,0,225,0,0,0,36,0,0,0,226,0,0,0,0,0,0,0,72,4,0,0,201,0,0,0,202,0,0,0,203,0,0,0,236,0,0,0,237,0,0,0,197,0,0,0,238,0,0,0,227,0,0,0,228,0,0,0,225,0,0,0,198,0,0,0,229,0,0,0,37,0,0,0,230,0,0,0,226,0,0,0,227,0,0,0,199,0,0,0,37,0,0,0,231,0,0,0,232,0,0,0,233,0,0,0,234,0,0,0,235,0,0,0,236,0,0,0,36,0,0,0,237,0,0,0,228,0,0,0,229,0,0,0,200,0,0,0,230,0,0,0,201,0,0,0,238,0,0,0,239,0,0,0,240,0,0,0,38,0,0,0,241,0,0,0,0,0,0,0,88,4,0,0,204,0,0,0,205,0,0,0,206,0,0,0,239,0,0,0,240,0,0,0,202,0,0,0,241,0,0,0,242,0,0,0,243,0,0,0,231,0,0,0,203,0,0,0,244,0,0,0,38,0,0,0,245,0,0,0,232,0,0,0,233,0,0,0,204,0,0,0,39,0,0,0,246,0,0,0,247,0,0,0,248,0,0,0,249,0,0,0,250,0,0,0,251,0,0,0,37,0,0,0,252,0,0,0,234,0,0,0,235,0,0,0,205,0,0,0,236,0,0,0,206,0,0,0,253,0,0,0,254,0,0,0,255,0,0,0,40,0,0,0,0,1,0,0,0,0,0,0,104,4,0,0,207,0,0,0,208,0,0,0,209,0,0,0,242,0,0,0,243,0,0,0,207,0,0,0,244,0,0,0,1,1,0,0,2,1,0,0,237,0,0,0,208,0,0,0,3,1,0,0,39,0,0,0,4,1,0,0,238,0,0,0,239,0,0,0,209,0,0,0,41,0,0,0,5,1,0,0,6,1,0,0,7,1,0,0,8,1,0,0,9,1,0,0,10,1,0,0,38,0,0,0,11,1,0,0,240,0,0,0,241,0,0,0,210,0,0,0,242,0,0,0,211,0,0,0,12,1,0,0,13,1,0,0,14,1,0,0,42,0,0,0,15,1,0,0,0,0,0,0,120,4,0,0,210,0,0,0,211,0,0,0,212,0,0,0,245,0,0,0,246,0,0,0,212,0,0,0,247,0,0,0,16,1,0,0,17,1,0,0,243,0,0,0,213,0,0,0,18,1,0,0,40,0,0,0,19,1,0,0,244,0,0,0,245,0,0,0,214,0,0,0,43,0,0,0,20,1,0,0,21,1,0,0,22,1,0,0,23,1,0,0,24,1,0,0,25,1,0,0,39,0,0,0,26,1,0,0,246,0,0,0,247,0,0,0,215,0,0,0,248,0,0,0,216,0,0,0,27,1,0,0,28,1,0,0,29,1,0,0,44,0,0,0,30,1,0,0,0,0,0,0,136,4,0,0,213,0,0,0,214,0,0,0,215,0,0,0,248,0,0,0,249,0,0,0,217,0,0,0,250,0,0,0,31,1,0,0,32,1,0,0,249,0,0,0,218,0,0,0,33,1,0,0,41,0,0,0,34,1,0,0,250,0,0,0,251,0,0,0,219,0,0,0,45,0,0,0,35,1,0,0,36,1,0,0,37,1,0,0,38,1,0,0,39,1,0,0,40,1,0,0,40,0,0,0,41,1,0,0,252,0,0,0,253,0,0,0,220,0,0,0,254,0,0,0,221,0,0,0,42,1,0,0,43,1,0,0,44,1,0,0,46,0,0,0,45,1,0,0,0,0,0,0,152,4,0,0,216,0,0,0,217,0,0,0,218,0,0,0,251,0,0,0,252,0,0,0,222,0,0,0,253,0,0,0,46,1,0,0,47,1,0,0,255,0,0,0,223,0,0,0,48,1,0,0,42,0,0,0,49,1,0,0,0,1,0,0,1,1,0,0,224,0,0,0,47,0,0,0,50,1,0,0,51,1,0,0,52,1,0,0,53,1,0,0,54,1,0,0,55,1,0,0,41,0,0,0,56,1,0,0,2,1,0,0,3,1,0,0,225,0,0,0,4,1,0,0,226,0,0,0,57,1,0,0,58,1,0,0,59,1,0,0,48,0,0,0,60,1,0,0,0,0,0,0,168,4,0,0,219,0,0,0,220,0,0,0,221,0,0,0,254,0,0,0,255,0,0,0,227,0,0,0,0,1,0,0,61,1,0,0,62,1,0,0,5,1,0,0,228,0,0,0,63,1,0,0,43,0,0,0,64,1,0,0,6,1,0,0,7,1,0,0,229,0,0,0,49,0,0,0,65,1,0,0,66,1,0,0,67,1,0,0,68,1,0,0,69,1,0,0,70,1,0,0,42,0,0,0,71,1,0,0,8,1,0,0,9,1,0,0,230,0,0,0,10,1,0,0,231,0,0,0,72,1,0,0,73,1,0,0,74,1,0,0,50,0,0,0,75,1,0,0,0,0,0,0,184,4,0,0,222,0,0,0,223,0,0,0,224,0,0,0,1,1,0,0,2,1,0,0,232,0,0,0,3,1,0,0,76,1,0,0,77,1,0,0,11,1,0,0,233,0,0,0,78,1,0,0,44,0,0,0,79,1,0,0,12,1,0,0,13,1,0,0,234,0,0,0,51,0,0,0,80,1,0,0,81,1,0,0,82,1,0,0,83,1,0,0,84,1,0,0,85,1,0,0,43,0,0,0,86,1,0,0,14,1,0,0,15,1,0,0,235,0,0,0,16,1,0,0,236,0,0,0,87,1,0,0,88,1,0,0,89,1,0,0,52,0,0,0,90,1,0,0,0,0,0,0,200,4,0,0,225,0,0,0,226,0,0,0,227,0,0,0,228,0,0,0,4,1,0,0,5,1,0,0,6,1,0,0,237,0,0,0,255,255,255,255,0,0,0,0,216,4,0,0,229,0,0,0,230,0,0,0,7,1,0,0,11,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,0,0,0,0,232,4,0,0,231,0,0,0,232,0,0,0,233,0,0,0,234,0,0,0,8,1,0,0,9,1,0,0,10,1,0,0,238,0,0,0,17,1,0,0,11,1,0,0,12,1,0,0,110,0,0,0,13,1,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,12,0,0,0,15,0,0,0,16,0,0,0,18,0,0,0,20,0,0,0,24,0,0,0,25,0,0,0,30,0,0,0,36,0,0,0,40,0,0,0,45,0,0,0,48,0,0,0,50,0,0,0,60,0,0,0,72,0,0,0,75,0,0,0,80,0,0,0,90,0,0,0,100,0,0,0,120,0,0,0,144,0,0,0,150,0,0,0,180,0,0,0,200,0,0,0,225,0,0,0,240,0,0,0,44,1,0,0,104,1,0,0,144,1,0,0,194,1,0,0,88,2,0,0,208,2,0,0,132,3,0,0,176,4,0,0,8,7,0,0,16,14,0,0,83,1,0,0,64,0,0,0,160,3,0,0,0,0,0,0,248,4,0,0,235,0,0,0,236,0,0,0,237,0,0,0,238,0,0,0,14,1,0,0,15,1,0,0,16,1,0,0,239,0,0,0,17,1,0,0,91,1,0,0,92,1,0,0,93,1,0,0,18,1,0,0,12,0,0,0,240,0,0,0,241,0,0,0,94,1,0,0,19,1,0,0,242,0,0,0,13,0,0,0,95,1,0,0,96,1,0,0,20,1,0,0,44,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,45,0,0,0,46,0,0,0,45,0,0,0,9,0,0,0,97,1,0,0,98,1,0,0,21,1,0,0,25,0,0,0,13,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,18,1,0,0,19,1,0,0,20,1,0,0,243,0,0,0,27,0,0,0,187,2,0,0,190,2,0,0,191,2,0,0,123,0,0,0,125,0,0,0,127,0,0,0,141,0,0,0,142,0,0,0,129,0,0,0,130,0,0,0,148,0,0,0,126,0,0,0,123,0,0,0,125,0,0,0,126,0,0,0,83,1,0,0,152,2,0,0,153,2,0,0,162,2,0,0,165,2,0,0,159,2,0,0,192,2,0,0,193,2,0,0,159,2,0,0,0,0,0,0,8,5,0,0,239,0,0,0,240,0,0,0,241,0,0,0,242,0,0,0,21,1,0,0,22,1,0,0,23,1,0,0,244,0,0,0,22,0,0,0,99,1,0,0,22,1,0,0,100,1,0,0,101,1,0,0,102,1,0,0,24,1,0,0,74,0,0,0,25,1,0,0,46,0,0,0,13,0,0,0,47,0,0,0,243,0,0,0,23,0,0,0,6,0,0,0,17,0,0,0,23,1,0,0,24,1,0,0,25,1,0,0,245,0,0,0,252,255,255,255,8,5,0,0,246,0,0,0,18,0,0,0,26,1,0,0,27,1,0,0,28,1,0,0,0,0,0,0,96,5,0,0,244,0,0,0,245,0,0,0,246,0,0,0,247,0,0,0,26,1,0,0,27,1,0,0,28,1,0,0,247,0,0,0,29,1,0,0,30,1,0,0,28,0,0,0,252,255,255,255,96,5,0,0,248,0,0,0,249,0,0,0,31,1,0,0,32,1,0,0,29,0,0,0,0,0,0,0,24,5,0,0,250,0,0,0,251,0,0,0,252,0,0,0,253,0,0,0,33,1,0,0,34,1,0,0,35,1,0,0,248,0,0,0,36,1,0,0,37,1,0,0,30,0,0,0,252,255,255,255,24,5,0,0,254,0,0,0,255,0,0,0,38,1,0,0,39,1,0,0,31,0,0,0,0,0,0,0,64,5,0,0,0,1,0,0,1,1,0,0,2,1,0,0,3,1,0,0,40,1,0,0,41,1,0,0,42,1,0,0,249,0,0,0,43,1,0,0,44,1,0,0,32,0,0,0,252,255,255,255,64,5,0,0,4,1,0,0,5,1,0,0,45,1,0,0,46,1,0,0,33,0,0,0,0,0,0,0,128,5,0,0,6,1,0,0,7,1,0,0,8,1,0,0,9,1,0,0,47,1,0,0,48,1,0,0,49,1,0,0,250,0,0,0,50,1,0,0,51,1,0,0,34,0,0,0,252,255,255,255,128,5,0,0,10,1,0,0,11,1,0,0,52,1,0,0,53,1,0,0,35,0,0,0,0,0,0,0,160,5,0,0,12,1,0,0,13,1,0,0,14,1,0,0,15,1,0,0,54,1,0,0,55,1,0,0,56,1,0,0,251,0,0,0,57,1,0,0,58,1,0,0,36,0,0,0,252,255,255,255,160,5,0,0,16,1,0,0,17,1,0,0,59,1,0,0,60,1,0,0,37,0,0,0,0,0,0,0,192,5,0,0,18,1,0,0,19,1,0,0,20,1,0,0,21,1,0,0,61,1,0,0,62,1,0,0,63,1,0,0,252,0,0,0,64,1,0,0,103,1,0,0,104,1,0,0,105,1,0,0,29,1,0,0,14,0,0,0,253,0,0,0,254,0,0,0,106,1,0,0,30,1,0,0,255,0,0,0,14,0,0,0,107,1,0,0,108,1,0,0,31,1,0,0,47,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,48,0,0,0,49,0,0,0,48,0,0,0,10,0,0,0,109,1,0,0,110,1,0,0,32,1,0,0,26,0,0,0,14,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,65,1,0,0,66,1,0,0,67,1,0,0,0,1,0,0,27,0,0,0,0,0,0,0,224,5,0,0,22,1,0,0,23,1,0,0,24,1,0,0,25,1,0,0,68,1,0,0,69,1,0,0,70,1,0,0,1,1,0,0,71,1,0,0,111,1,0,0,112,1,0,0,113,1,0,0,33,1,0,0,15,0,0,0,2,1,0,0,3,1,0,0,114,1,0,0,34,1,0,0,4,1,0,0,15,0,0,0,115,1,0,0,116,1,0,0,35,1,0,0,50,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,51,0,0,0,52,0,0,0,49,0,0,0,11,0,0,0,117,1,0,0,118,1,0,0,36,1,0,0,27,0,0,0,15,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,72,1,0,0,73,1,0,0,74,1,0,0,5,1,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,26,1,0,0,27,1,0,0,37,1,0,0,38,1,0,0,39,1,0,0,28,0,0,0,53,0,0,0,54,0,0,0,119,1,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,40,1,0,0,55,0,0,0,41,1,0,0,120,1,0,0,0,0,0,0,24,6,0,0,26,1,0,0,28,1,0,0,42,1,0,0,43,1,0,0,44,1,0,0,29,0,0,0,56,0,0,0,57,0,0,0,121,1,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,45,1,0,0,58,0,0,0,46,1,0,0,122,1,0,0,0,0,0,0,40,6,0,0,26,1,0,0,29,1,0,0,47,1,0,0,48,1,0,0,49,1,0,0,30,0,0,0,59,0,0,0,60,0,0,0,123,1,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,50,1,0,0,61,0,0,0,51,1,0,0,124,1,0,0,0,0,0,0,56,6,0,0,26,1,0,0,30,1,0,0,52,1,0,0,53,1,0,0,54,1,0,0,31,0,0,0,62,0,0,0,63,0,0,0,125,1,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,55,1,0,0,64,0,0,0,56,1,0,0,126,1,0,0,0,0,0,0,72,6,0,0,26,1,0,0,31,1,0,0,57,1,0,0,58,1,0,0,59,1,0,0,32,0,0,0,65,0,0,0,66,0,0,0,127,1,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,60,1,0,0,67,0,0,0,61,1,0,0,128,1,0,0,0,0,0,0,88,6,0,0,26,1,0,0,32,1,0,0,62,1,0,0,63,1,0,0,64,1,0,0,33,0,0,0,68,0,0,0,69,0,0,0,129,1,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,65,1,0,0,70,0,0,0,66,1,0,0,130,1,0,0,0,0,0,0,104,6,0,0,26,1,0,0,33,1,0,0,67,1,0,0,68,1,0,0,69,1,0,0,34,0,0,0,71,0,0,0,72,0,0,0,131,1,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,70,1,0,0,73,0,0,0,71,1,0,0,132,1,0,0,0,0,0,0,120,6,0,0,26,1,0,0,34,1,0,0,72,1,0,0,73,1,0,0,74,1,0,0,35,0,0,0,74,0,0,0,75,0,0,0,133,1,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,75,1,0,0,76,0,0,0,76,1,0,0,134,1,0,0,0,0,0,0,136,6,0,0,26,1,0,0,35,1,0,0,77,1,0,0,78,1,0,0,79,1,0,0,36,0,0,0,77,0,0,0,78,0,0,0,135,1,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,80,1,0,0,79,0,0,0,81,1,0,0,136,1,0,0,0,0,0,0,152,6,0,0,26,1,0,0,36,1,0,0,82,1,0,0,83,1,0,0,84,1,0,0,37,0,0,0,80,0,0,0,81,0,0,0,137,1,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,85,1,0,0,82,0,0,0,86,1,0,0,138,1,0,0,18,0,0,0,19,0,0,0,20,0,0,0,0,0,0,0,168,6,0,0,26,1,0,0,37,1,0,0,87,1,0,0,88,1,0,0,89,1,0,0,38,0,0,0,83,0,0,0,84,0,0,0,139,1,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,90,1,0,0,85,0,0,0,91,1,0,0,140,1,0,0,0,0,0,0,184,6,0,0,26,1,0,0,38,1,0,0,92,1,0,0,93,1,0,0,94,1,0,0,39,0,0,0,86,0,0,0,87,0,0,0,141,1,0,0,125,0,0,0,126,0,0,0,127,0,0,0,128,0,0,0,95,1,0,0,88,0,0,0,96,1,0,0,142,1,0,0,0,0,0,0,200,6,0,0,26,1,0,0,39,1,0,0,97,1,0,0,98,1,0,0,99,1,0,0,40,0,0,0,89,0,0,0,90,0,0,0,143,1,0,0,129,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,100,1,0,0,91,0,0,0,101,1,0,0,144,1,0,0,0,0,0,0,216,6,0,0,26,1,0,0,40,1,0,0,102,1,0,0,103,1,0,0,104,1,0,0,41,0,0,0,92,0,0,0,93,0,0,0,145,1,0,0,133,0,0,0,134,0,0,0,135,0,0,0,136,0,0,0,105,1,0,0,94,0,0,0,106,1,0,0,146,1,0,0,0,0,0,0,232,6,0,0,26,1,0,0,41,1,0,0,107,1,0,0,108,1,0,0,109,1,0,0,42,0,0,0,95,0,0,0,96,0,0,0,147,1,0,0,137,0,0,0,138,0,0,0,139,0,0,0,140,0,0,0,110,1,0,0,97,0,0,0,111,1,0,0,148,1,0,0,0,0,0,0,248,6,0,0,26,1,0,0,42,1,0,0,112,1,0,0,113,1,0,0,114,1,0,0,43,0,0,0,98,0,0,0,99,0,0,0,149,1,0,0,141,0,0,0,142,0,0,0,143,0,0,0,144,0,0,0,115,1,0,0,100,0,0,0,116,1,0,0,150,1,0,0,0,0,0,0,8,7,0,0,26,1,0,0,43,1,0,0,117,1,0,0,118,1,0,0,119,1,0,0,44,0,0,0,101,0,0,0,102,0,0,0,151,1,0,0,145,0,0,0,146,0,0,0,147,0,0,0,148,0,0,0,120,1,0,0,103,0,0,0,121,1,0,0,152,1,0,0,0,0,0,0,24,7,0,0,26,1,0,0,44,1,0,0,122,1,0,0,123,1,0,0,124,1,0,0,45,0,0,0,104,0,0,0,105,0,0,0,153,1,0,0,149,0,0,0,150,0,0,0,151,0,0,0,152,0,0,0,125,1,0,0,106,0,0,0,126,1,0,0,154,1,0,0,0,0,0,0,40,7,0,0,26,1,0,0,45,1,0,0,127,1,0,0,128,1,0,0,129,1,0,0,46,0,0,0,107,0,0,0,108,0,0,0,155,1,0,0,153,0,0,0,154,0,0,0,155,0,0,0,156,0,0,0,130,1,0,0,109,0,0,0,131,1,0,0,156,1,0,0,0,0,0,0,56,7,0,0,26,1,0,0,46,1,0,0,132,1,0,0,133,1,0,0,134,1,0,0,47,0,0,0,110,0,0,0,111,0,0,0,157,1,0,0,157,0,0,0,158,0,0,0,159,0,0,0,160,0,0,0,135,1,0,0,112,0,0,0,136,1,0,0,158,1,0,0,0,0,0,0,72,7,0,0,26,1,0,0,47,1,0,0,137,1,0,0,138,1,0,0,139,1,0,0,48,0,0,0,113,0,0,0,114,0,0,0,159,1,0,0,161,0,0,0,162,0,0,0,163,0,0,0,164,0,0,0,140,1,0,0,115,0,0,0,141,1,0,0,160,1,0,0,0,0,0,0,88,7,0,0,26,1,0,0,48,1,0,0,142,1,0,0,143,1,0,0,144,1,0,0,49,0,0,0,116,0,0,0,117,0,0,0,161,1,0,0,165,0,0,0,166,0,0,0,167,0,0,0,168,0,0,0,145,1,0,0,118,0,0,0,146,1,0,0,162,1,0,0,0,0,0,0,104,7,0,0,26,1,0,0,49,1,0,0,147,1,0,0,148,1,0,0,149,1,0,0,50,0,0,0,119,0,0,0,120,0,0,0,163,1,0,0,169,0,0,0,170,0,0,0,171,0,0,0,172,0,0,0,150,1,0,0,121,0,0,0,151,1,0,0,164,1,0,0,0,0,0,0,120,7,0,0,26,1,0,0,50,1,0,0,152,1,0,0,153,1,0,0,154,1,0,0,51,0,0,0,122,0,0,0,123,0,0,0,165,1,0,0,173,0,0,0,174,0,0,0,175,0,0,0,176,0,0,0,155,1,0,0,124,0,0,0,156,1,0,0,166,1,0,0,0,0,0,0,136,7,0,0,26,1,0,0,51,1,0,0,157,1,0,0,158,1,0,0,159,1,0,0,52,0,0,0,125,0,0,0,126,0,0,0,167,1,0,0,177,0,0,0,178,0,0,0,179,0,0,0,180,0,0,0,160,1,0,0,127,0,0,0,161,1,0,0,168,1,0,0,0,0,0,0,152,7,0,0,26,1,0,0,52,1,0,0,162,1,0,0,163,1,0,0,164,1,0,0,53,0,0,0,128,0,0,0,129,0,0,0,169,1,0,0,181,0,0,0,182,0,0,0,183,0,0,0,184,0,0,0,165,1,0,0,130,0,0,0,166,1,0,0,170,1,0,0,0,0,0,0,168,7,0,0,26,1,0,0,53,1,0,0,167,1,0,0,168,1,0,0,169,1,0,0,54,0,0,0,131,0,0,0,132,0,0,0,171,1,0,0,185,0,0,0,186,0,0,0,187,0,0,0,188,0,0,0,170,1,0,0,133,0,0,0,171,1,0,0,172,1,0,0,0,0,0,0,184,7,0,0,26,1,0,0,54,1,0,0,172,1,0,0,173,1,0,0,174,1,0,0,55,0,0,0,134,0,0,0,135,0,0,0,173,1,0,0,189,0,0,0,190,0,0,0,191,0,0,0,192,0,0,0,175,1,0,0,136,0,0,0,176,1,0,0,174,1,0,0,0,0,0,0,200,7,0,0,26,1,0,0,55,1,0,0,177,1,0,0,178,1,0,0,179,1,0,0,56,0,0,0,137,0,0,0,138,0,0,0,175,1,0,0,193,0,0,0,194,0,0,0,195,0,0,0,196,0,0,0,180,1,0,0,139,0,0,0,181,1,0,0,176,1,0,0,0,0,0,0,216,7,0,0,26,1,0,0,56,1,0,0,182,1,0,0,183,1,0,0,184,1,0,0,57,0,0,0,140,0,0,0,141,0,0,0,177,1,0,0,197,0,0,0,198,0,0,0,199,0,0,0,200,0,0,0,185,1,0,0,142,0,0,0,186,1,0,0,178,1,0,0,0,0,0,0,232,7,0,0,26,1,0,0,57,1,0,0,187,1,0,0,188,1,0,0,189,1,0,0,58,0,0,0,143,0,0,0,144,0,0,0,179,1,0,0,201,0,0,0,202,0,0,0,203,0,0,0,204,0,0,0,190,1,0,0,145,0,0,0,191,1,0,0,180,1,0,0,0,0,0,0,248,7,0,0,26,1,0,0,58,1,0,0,192,1,0,0,193,1,0,0,194,1,0,0,59,0,0,0,146,0,0,0,147,0,0,0,181,1,0,0,205,0,0,0,206,0,0,0,207,0,0,0,208,0,0,0,195,1,0,0,148,0,0,0,196,1,0,0,182,1,0,0,0,0,0,0,8,8,0,0,26,1,0,0,59,1,0,0,197,1,0,0,198,1,0,0,199,1,0,0,60,0,0,0,149,0,0,0,150,0,0,0,183,1,0,0,209,0,0,0,210,0,0,0,211,0,0,0,212,0,0,0,200,1,0,0,151,0,0,0,201,1,0,0,184,1,0,0,0,0,0,0,24,8,0,0,26,1,0,0,60,1,0,0,202,1,0,0,203,1,0,0,204,1,0,0,61,0,0,0,152,0,0,0,153,0,0,0,185,1,0,0,213,0,0,0,214,0,0,0,215,0,0,0,216,0,0,0,205,1,0,0,154,0,0,0,206,1,0,0,186,1,0,0,0,0,0,0,56,8,0,0,26,1,0,0,61,1,0,0,207,1,0,0,208,1,0,0,209,1,0,0,62,0,0,0,155,0,0,0,156,0,0,0,187,1,0,0,217,0,0,0,218,0,0,0,219,0,0,0,220,0,0,0,210,1,0,0,157,0,0,0,211,1,0,0,188,1,0,0,0,0,0,0,72,8,0,0,62,1,0,0,63,1,0,0,75,1,0,0,76,1,0,0,64,1,0,0,77,1,0,0,189,1,0,0,190,1,0,0,212,1,0,0,191,1,0,0,0,0,0,0,96,8,0,0,65,1,0,0,66,1,0,0,78,1,0,0,79,1,0,0,67,1,0,0,80,1,0,0,192,1,0,0,193,1,0,0,213,1,0,0,194,1,0,0,0,0,0,0,112,8,0,0,68,1,0,0,69,1,0,0,81,1,0,0,82,1,0,0,70,1,0,0,83,1,0,0,195,1,0,0,196,1,0,0,214,1,0,0,197,1,0,0,0,0,0,0,128,8,0,0,71,1,0,0,72,1,0,0,84,1,0,0,85,1,0,0,73,1,0,0,86,1,0,0,198,1,0,0,199,1,0,0,215,1,0,0,200,1,0,0,0,0,0,0,144,8,0,0,74,1,0,0,75,1,0,0,76,1,0,0,77,1,0,0,87,1,0,0,88,1,0,0,89,1,0,0,6,1,0,0,221,0,0,0,201,1,0,0,126,0,0,0,127,0,0,0,128,0,0,0,129,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,50,0,0,0,51,0,0,0,216,1,0,0,217,1,0,0,218,1,0,0,52],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30720);allocate([53,0,0,0,219,1,0,0,90,1,0,0,78,1,0,0,7,0,0,0,220,1,0,0,24,0,0,0,221,1,0,0,25,0,0,0,26,0,0,0,222,1,0,0,7,1,0,0,19,0,0,0,223,1,0,0,224,1,0,0,225,1,0,0,252,255,255,255,144,8,0,0,8,1,0,0,20,0,0,0,226,1,0,0,227,1,0,0,228,1,0,0,0,0,0,0,160,8,0,0,79,1,0,0,80,1,0,0,81,1,0,0,82,1,0,0,91,1,0,0,92,1,0,0,93,1,0,0,9,1,0,0,27,0,0,0,202,1,0,0,229,1,0,0,203,1,0,0,204,1,0,0,205,1,0,0,94,1,0,0,222,0,0,0,95,1,0,0,54,0,0,0,16,0,0,0,55,0,0,0,83,1,0,0,28,0,0,0,8,0,0,0,10,1,0,0,21,0,0,0,230,1,0,0,231,1,0,0,232,1,0,0,252,255,255,255,160,8,0,0,11,1,0,0,22,0,0,0,233,1,0,0,234,1,0,0,235,1,0,0,0,0,0,0,176,8,0,0,84,1,0,0,85,1,0,0,86,1,0,0,87,1,0,0,96,1,0,0,97,1,0,0,98,1,0,0,12,1,0,0,29,0,0,0,206,1,0,0,236,1,0,0,207,1,0,0,208,1,0,0,209,1,0,0,99,1,0,0,223,0,0,0,100,1,0,0,56,0,0,0,17,0,0,0,57,0,0,0,88,1,0,0,30,0,0,0,9,0,0,0,23,0,0,0,237,1,0,0,238,1,0,0,239,1,0,0,13,1,0,0,252,255,255,255,176,8,0,0,14,1,0,0,24,0,0,0,240,1,0,0,241,1,0,0,242,1,0,0,128,97,0,0,136,97,0,0,152,97,0,0,176,97,0,0,208,97,0,0,248,97,0,0,40,98,0,0,160,96,0,0,168,96,0,0,184,96,0,0,208,96,0,0,240,96,0,0,24,97,0,0,72,97,0,0,1,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,7,0,0,0,12,0,0,0,13,0,0,0,16,0,0,0,19,0,0,0,25,0,0,0,27,0,0,0,33,0,0,0,37,0,0,0,42,0,0,0,48,0,0,0,52,0,0,0,61,0,0,0,70,0,0,0,73,0,0,0,79,0,0,0,0,77,0,0,8,77,0,0,32,77,0,0,64,77,0,0,112,77,0,0,168,77,0,0,8,78,0,0,112,78,0,0,240,78,0,0,136,79,0,0,80,80,0,0,40,81,0,0,48,82,0,0,88,83,0,0,168,84,0,0,40,86,0,0,200,87,0,0,176,89,0,0,224,91,0,0,40,94,0,0,96,57,0,0,104,57,0,0,128,57,0,0,160,57,0,0,208,57,0,0,8,58,0,0,104,58,0,0,208,58,0,0,80,59,0,0,232,59,0,0,176,60,0,0,136,61,0,0,144,62,0,0,184,63,0,0,8,65,0,0,136,66,0,0,40,68,0,0,16,70,0,0,64,72,0,0,136,74,0,0,192,37,0,0,200,37,0,0,224,37,0,0,0,38,0,0,48,38,0,0,104,38,0,0,200,38,0,0,48,39,0,0,176,39,0,0,72,40,0,0,16,41,0,0,232,41,0,0,240,42,0,0,24,44,0,0,104,45,0,0,232,46,0,0,136,48,0,0,112,50,0,0,160,52,0,0,232,54,0,0,32,18,0,0,40,18,0,0,64,18,0,0,96,18,0,0,144,18,0,0,200,18,0,0,40,19,0,0,144,19,0,0,16,20,0,0,168,20,0,0,112,21,0,0,72,22,0,0,80,23,0,0,120,24,0,0,200,25,0,0,72,27,0,0,232,28,0,0,208,30,0,0,0,33,0,0,72,35,0,0,1,0,0,0,4,0,0,0,5,0,0,0,11,0,0,0,15,0,0,0,24,0,0,0,64,16,0,0,72,16,0,0,104,16,0,0,144,16,0,0,232,16,0,0,96,17,0,0,96,14,0,0,104,14,0,0,136,14,0,0,176,14,0,0,8,15,0,0,128,15,0,0,128,12,0,0,136,12,0,0,168,12,0,0,208,12,0,0,40,13,0,0,160,13,0,0,160,10,0,0,168,10,0,0,200,10,0,0,240,10,0,0,72,11,0,0,192,11,0,0,192,8,0,0,200,8,0,0,232,8,0,0,16,9,0,0,104,9,0,0,224,9,0,0,126,2,0,0,127,2,0,0,125,2,0,0,0,0,0,0,0,0,0,0,96,98,0,0,125,0,0,0,89,1,0,0,90,1,0,0,91,1,0,0,101,1,0,0,102,1,0,0,103,1,0,0,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,112,98,0,0,92,1,0,0,93,1,0,0,104,1,0,0,0,0,0,0,0,0,0,0,136,98,0,0,94,1,0,0,95,1,0,0,105,1,0,0,0,0,0,0,160,98,0,0,96,1,0,0,97,1,0,0,106,1,0,0,0,0,0,0,192,98,0,0,98,1,0,0,99,1,0,0,100,1,0,0,101,1,0,0,16,0,0,0,18,0,0,0,158,0,0,0,16,1,0,0,0,0,0,0,240,98,0,0,98,1,0,0,102,1,0,0,100,1,0,0,101,1,0,0,16,0,0,0,19,0,0,0,159,0,0,0,17,1,0,0,0,0,0,0,0,99,0,0,98,1,0,0,103,1,0,0,100,1,0,0,101,1,0,0,16,0,0,0,20,0,0,0,160,0,0,0,18,1,0,0,0,0,0,0,0,0,0,0,223,82,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,164,166,0,0,20,167,0,0,132,167,0,0,132,167,0,0,226,207,0,0,244,175,0,0,244,169,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,107,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,19,0,0,0,129,99,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,107,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,19,0,0,0,121,95,2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,107,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,19,0,0,0,113,91,2,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+40960);allocate([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+45040);allocate([24,99,0,0,104,1,0,0,105,1,0,0,210,1,0,0,22,0,0,0,21,0,0,0,19,1,0,0,108,1,0,0,109,1,0,0,23,0,0,0,110,1,0,0,111,1,0,0,224,0,0,0,24,0,0,0,225,0,0,0,0,0,0,0,40,99,0,0,104,1,0,0,106,1,0,0,211,1,0,0,22,0,0,0,21,0,0,0,19,1,0,0,112,1,0,0,109,1,0,0,23,0,0,0,113,1,0,0,114,1,0,0,226,0,0,0,25,0,0,0,227,0,0,0,0,0,0,0,56,99,0,0,107,1,0,0,108,1,0,0,212,1,0,0,1,0,0,0,22,0,0,0,20,1,0,0,115,1,0,0,2,0,0,0,2,0,0,0,116,1,0,0,4,0,0,0,228,0,0,0,26,0,0,0,229,0,0,0,0,0,0,0,72,99,0,0,107,1,0,0,109,1,0,0,213,1,0,0,1,0,0,0,22,0,0,0,20,1,0,0,1,0,0,0,2,0,0,0,2,0,0,0,117,1,0,0,118,1,0,0,230,0,0,0,3,0,0,0,231,0,0,0,0,0,0,0,144,99,0,0,107,1,0,0,110,1,0,0,1,0,0,0,1,0,0,0,22,0,0,0,20,1,0,0,1,0,0,0,2,0,0,0,2,0,0,0,116,1,0,0,4,0,0,0,228,0,0,0,3,0,0,0,231,0,0,0,0,0,0,0,152,99,0,0,104,1,0,0,111,1,0,0,214,1,0,0,22,0,0,0,21,0,0,0,19,1,0,0,112,1,0,0,109,1,0,0,23,0,0,0,110,1,0,0,111,1,0,0,224,0,0,0,25,0,0,0,227,0,0,0,8,0,0,0,0,0,0,0,160,99,0,0,112,1,0,0,113,1,0,0,248,255,255,255,248,255,255,255,160,99,0,0,114,1,0,0,115,1,0,0,8,0,0,0,0,0,0,0,184,99,0,0,116,1,0,0,117,1,0,0,248,255,255,255,248,255,255,255,184,99,0,0,118,1,0,0,119,1,0,0,4,0,0,0,0,0,0,0,208,99,0,0,5,0,0,0,6,0,0,0,252,255,255,255,252,255,255,255,208,99,0,0,7,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,232,99,0,0,120,1,0,0,121,1,0,0,252,255,255,255,252,255,255,255,232,99,0,0,122,1,0,0,123,1,0,0,0,0,0,0,88,99,0,0,124,1,0,0,125,1,0,0,105,1,0,0,0,0,0,0,104,99,0,0,126,1,0,0,127,1,0,0,0,0,0,0,0,100,0,0,128,1,0,0,129,1,0,0,119,1,0,0,243,1,0,0,27,0,0,0,28,0,0,0,244,1,0,0,0,0,0,0,0,0,0,0,248,100,0,0,130,1,0,0,131,1,0,0,132,1,0,0,5,0,0,0,21,1,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,101,0,0,133,1,0,0,134,1,0,0,132,1,0,0,6,0,0,0,22,1,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,101,0,0,135,1,0,0,136,1,0,0,132,1,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,101,0,0,137,1,0,0,138,1,0,0,132,1,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,101,0,0,139,1,0,0,140,1,0,0,132,1,0,0,7,0,0,0,8,0,0,0,23,0,0,0,9,0,0,0,24,0,0,0,1,0,0,0,2,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,101,0,0,141,1,0,0,142,1,0,0,132,1,0,0,11,0,0,0,12,0,0,0,25,0,0,0,13,0,0,0,26,0,0,0,3,0,0,0,4,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,101,0,0,143,1,0,0,144,1,0,0,132,1,0,0,120,1,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,1,0,0,0,248,255,255,255,216,101,0,0,121,1,0,0,122,1,0,0,123,1,0,0,124,1,0,0,125,1,0,0,126,1,0,0,127,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,145,1,0,0,146,1,0,0,132,1,0,0,128,1,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,2,0,0,0,248,255,255,255,0,102,0,0,129,1,0,0,130,1,0,0,131,1,0,0,132,1,0,0,133,1,0,0,134,1,0,0,135,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,102,0,0,147,1,0,0,148,1,0,0,132,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,102,0,0,149,1,0,0,150,1,0,0,132,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,102,0,0,151,1,0,0,152,1,0,0,132,1,0,0,136,1,0,0,137,1,0,0,215,1,0,0,216,1,0,0,217,1,0,0,218,1,0,0,138,1,0,0,219,1,0,0,220,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,102,0,0,153,1,0,0,154,1,0,0,132,1,0,0,139,1,0,0,140,1,0,0,221,1,0,0,222,1,0,0,223,1,0,0,224,1,0,0,141,1,0,0,225,1,0,0,226,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,102,0,0,155,1,0,0,156,1,0,0,132,1,0,0,142,1,0,0,143,1,0,0,227,1,0,0,228,1,0,0,229,1,0,0,230,1,0,0,144,1,0,0,231,1,0,0,232,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,102,0,0,157,1,0,0,158,1,0,0,132,1,0,0,145,1,0,0,146,1,0,0,233,1,0,0,234,1,0,0,235,1,0,0,236,1,0,0,147,1,0,0,237,1,0,0,238,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,102,0,0,159,1,0,0,160,1,0,0,132,1,0,0,3,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,103,0,0,161,1,0,0,162,1,0,0,132,1,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,103,0,0,163,1,0,0,164,1,0,0,132,1,0,0,1,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,103,0,0,165,1,0,0,166,1,0,0,132,1,0,0,2,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,103,0,0,167,1,0,0,168,1,0,0,132,1,0,0,31,0,0,0,23,0,0,0,239,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,103,0,0,169,1,0,0,170,1,0,0,132,1,0,0,32,0,0,0,24,0,0,0,240,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,100,0,0,171,1,0,0,172,1,0,0,132,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,101,0,0,173,1,0,0,174,1,0,0,132,1,0,0,232,0,0,0,33,0,0,0,233,0,0,0,34,0,0,0,234,0,0,0,63,0,0,0,35,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,100,0,0,175,1,0,0,176,1,0,0,132,1,0,0,3,0,0,0,4,0,0,0,16,0,0,0,148,1,0,0,149,1,0,0,17,0,0,0,150,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,101,0,0,177,1,0,0,178,1,0,0,132,1,0,0,151,1,0,0,152,1,0,0,241,1,0,0,242,1,0,0,243,1,0,0,0,0,0,0,72,101,0,0,179,1,0,0,180,1,0,0,132,1,0,0,153,1,0,0,154,1,0,0,244,1,0,0,245,1,0,0,246,1,0,0,0,0,0,0,24,100,0,0,181,1,0,0,182,1,0,0,132,1,0,0,0,0,0,0,40,100,0,0,181,1,0,0,183,1,0,0,132,1,0,0,36,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,235,0,0,0,37,0,0,0,236,0,0,0,38,0,0,0,237,0,0,0,67,0,0,0,39,0,0,0,18,0,0,0,0,0,0,0,72,100,0,0,181,1,0,0,184,1,0,0,132,1,0,0,5,0,0,0,6,0,0,0,19,0,0,0,155,1,0,0,156,1,0,0,20,0,0,0,157,1,0,0,0,0,0,0,104,100,0,0,181,1,0,0,185,1,0,0,132,1,0,0,7,0,0,0,8,0,0,0,21,0,0,0,158,1,0,0,159,1,0,0,22,0,0,0,160,1,0,0,0,0,0,0,136,100,0,0,181,1,0,0,186,1,0,0,132,1,0,0,9,0,0,0,10,0,0,0,23,0,0,0,161,1,0,0,162,1,0,0,24,0,0,0,163,1,0,0,0,0,0,0,168,100,0,0,181,1,0,0,187,1,0,0,132,1,0,0,9,0,0,0,10,0,0,0,23,0,0,0,161,1,0,0,162,1,0,0,24,0,0,0,163,1,0,0,0,0,0,0,184,100,0,0,181,1,0,0,188,1,0,0,132,1,0,0,9,0,0,0,10,0,0,0,23,0,0,0,161,1,0,0,162,1,0,0,24,0,0,0,163,1,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,107,0,0,189,1,0,0,190,1,0,0,105,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,2,0,0,0,0,0,1,0,0,0,1,0,2,0,1,0,2,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,3,32,2,32,2,32,2,32,2,32,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,96,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,213,8,213,8,213,8,213,8,213,8,213,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,4,192,4,192,4,192,4,192,4,192,4,192,8,214,8,214,8,214,8,214,8,214,8,214,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,4,192,4,192,4,192,4,192,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,111,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,105,110,103,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,110,111,100,101,0,119,114,111,110,103,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,116,121,112,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,46,47,67,111,110,116,111,117,114,84,111,77,101,115,104,47,67,111,110,116,111,117,114,84,111,77,101,115,104,46,99,112,112,0,67,111,110,116,111,117,114,84,111,77,101,115,104,77,111,100,117,108,101,0,105,110,100,101,120,32,115,104,111,117,108,100,32,104,97,118,101,32,51,32,99,111,108,117,109,110,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,46,47,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,47,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,46,99,112,112,0,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,77,111,100,117,108,101,0,116,104,101,114,101,32,115,104,111,117,108,100,32,98,101,32,97,116,32,108,101,97,115,116,32,116,104,114,101,101,32,112,111,105,110,116,115,0,118,101,99,116,111,114,115,32,120,32,97,110,100,32,121,32,115,104,111,117,108,100,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,0,100,97,116,97,32,105,115,32,101,109,112,116,121,0,110,111,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,114,101,113,117,101,115,116,101,100,0,118,101,99,116,111,114,115,32,120,95,105,110,116,101,114,112,32,97,110,100,32,121,95,105,110,116,101,114,112,32,115,104,111,117,108,100,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,0,100,101,102,97,117,108,116,95,118,97,108,117,101,0,95,72,65,86,69,95,77,80,73,95,0,95,72,65,86,69,95,80,69,84,83,67,95,77,80,73,95,0,95,72,65,86,69,95,68,65,75,79,84,65,95,0,95,72,65,86,69,95,77,85,77,80,83,95,0,95,72,65,86,69,95,71,83,76,95,0,95,72,65,86,69,95,84,65,79,95,0,95,72,65,86,69,95,77,49,81,78,51,95,0,95,72,65,86,69,95,80,69,84,83,67,95,0,95,80,69,84,83,67,95,77,65,74,79,82,95,0,95,80,69,84,83,67,95,77,65,74,79,82,95,32,110,111,116,32,102,111,117,110,100,32,105,110,32,99,111,110,102,105,103,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,46,47,73,115,115,109,67,111,110,102,105,103,47,73,115,115,109,67,111,110,102,105,103,46,99,112,112,0,73,115,115,109,67,111,110,102,105,103,77,111,100,117,108,101,0,95,80,69,84,83,67,95,77,73,78,79,82,95,0,95,80,69,84,83,67,95,77,73,78,79,82,95,32,110,111,116,32,102,111,117,110,100,32,105,110,32,99,111,110,102,105,103,46,104,0,95,68,65,75,79,84,65,95,86,69,82,83,73,79,78,95,0,95,68,65,75,79,84,65,95,86,69,82,83,73,79,78,95,32,110,111,116,32,102,111,117,110,100,32,105,110,32,99,111,110,102,105,103,46,104,0,73,83,83,77,95,80,82,69,70,73,88,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,98,117,105,108,100,45,106,115,0,80,65,67,75,65,71,69,95,78,65,77,69,0,80,65,67,75,65,71,69,95,86,69,82,83,73,79,78,0,80,65,67,75,65,71,69,95,85,82,76,0,80,65,67,75,65,71,69,95,66,85,71,82,69,80,79,82,84,0,80,65,67,75,65,71,69,95,66,85,73,76,68,95,68,65,84,69,0,77,111,110,32,65,112,114,32,50,53,32,49,53,58,51,51,58,50,55,32,80,68,84,32,50,48,49,54,0,72,79,83,84,95,79,83,0,100,97,114,119,105,110,49,52,46,53,46,48,0,85,83,69,82,95,78,65,77,69,0,108,97,114,111,117,114,0,72,79,83,84,95,86,69,78,68,79,82,0,97,112,112,108,101,0,72,79,83,84,95,65,82,67,72,0,120,56,54,95,54,52,0,118,97,114,105,97,98,108,101,32,0,65,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,0,83,116,97,110,100,97,114,100,32,101,120,99,101,112,116,105,111,110,58,32,0,65,110,32,117,110,101,120,112,101,99,116,101,100,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,10,10,0,69,114,114,111,114,58,32,32,79,117,116,32,111,102,32,109,101,109,111,114,121,46,10,0,32,32,80,108,101,97,115,101,32,114,101,112,111,114,116,32,116,104,105,115,32,98,117,103,32,116,111,32,106,114,115,64,99,115,46,98,101,114,107,101,108,101,121,46,101,100,117,10,0,32,32,73,110,99,108,117,100,101,32,116,104,101,32,109,101,115,115,97,103,101,32,97,98,111,118,101,44,32,121,111,117,114,32,105,110,112,117,116,32,100,97,116,97,32,115,101,116,44,32,97,110,100,32,116,104,101,32,101,120,97,99,116,10,0,32,32,32,32,99,111,109,109,97,110,100,32,108,105,110,101,32,121,111,117,32,117,115,101,100,32,116,111,32,114,117,110,32,84,114,105,97,110,103,108,101,46,10,0,69,114,114,111,114,58,32,32,77,97,120,105,109,117,109,32,97,114,101,97,32,109,117,115,116,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,122,101,114,111,46,10,0,69,114,114,111,114,58,32,32,89,111,117,32,99,97,110,110,111,116,32,117,115,101,32,116,104,101,32,45,73,32,115,119,105,116,99,104,32,119,104,101,110,32,114,101,102,105,110,105,110,103,32,97,32,116,114,105,97,110,103,117,108,97,116,105,111,110,46,10,0,87,97,114,110,105,110,103,58,32,32,119,101,105,103,104,116,101,100,32,116,114,105,97,110,103,117,108,97,116,105,111,110,115,32,40,45,119,44,32,45,87,41,32,97,114,101,32,105,110,99,111,109,112,97,116,105,98,108,101,10,0,32,32,119,105,116,104,32,80,83,76,71,115,32,40,45,112,41,32,97,110,100,32,109,101,115,104,105,110,103,32,40,45,113,44,32,45,97,44,32,45,117,41,46,32,32,87,101,105,103,104,116,115,32,105,103,110,111,114,101,100,46,10,0,87,97,114,110,105,110,103,58,32,32,45,106,32,97,110,100,32,45,78,32,115,119,105,116,99,104,101,115,32,97,114,101,32,115,111,109,101,119,104,97,116,32,105,110,99,111,109,112,97,116,105,98,108,101,46,10,0,32,32,73,102,32,97,110,121,32,118,101,114,116,105,99,101,115,32,97,114,101,32,106,101,116,116,105,115,111,110,101,100,44,32,121,111,117,32,119,105,108,108,32,110,101,101,100,32,116,104,101,32,111,117,116,112,117,116,10,0,32,32,46,110,111,100,101,32,102,105,108,101,32,116,111,32,114,101,99,111,110,115,116,114,117,99,116,32,116,104,101,32,110,101,119,32,110,111,100,101,32,105,110,100,105,99,101,115,46,0,116,114,105,97,110,103,108,101,32,120,37,108,120,32,119,105,116,104,32,111,114,105,101,110,116,97,116,105,111,110,32,37,100,58,10,0,32,32,32,32,91,48,93,32,61,32,79,117,116,101,114,32,115,112,97,99,101,10,0,32,32,32,32,91,48,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,91,49,93,32,61,32,79,117,116,101,114,32,115,112,97,99,101,10,0,32,32,32,32,91,49,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,91,50,93,32,61,32,79,117,116,101,114,32,115,112,97,99,101,10,0,32,32,32,32,91,50,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,79,114,105,103,105,110,91,37,100,93,32,61,32,78,85,76,76,10,0,32,32,32,32,79,114,105,103,105,110,91,37,100,93,32,61,32,120,37,108,120,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,68,101,115,116,32,32,91,37,100,93,32,61,32,78,85,76,76,10,0,32,32,32,32,68,101,115,116,32,32,91,37,100,93,32,61,32,120,37,108,120,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,65,112,101,120,32,32,91,37,100,93,32,61,32,78,85,76,76,10,0,32,32,32,32,65,112,101,120,32,32,91,37,100,93,32,61,32,120,37,108,120,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,91,54,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,91,55,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,91,56,93,32,61,32,120,37,108,120,32,32,37,100,10,0,32,32,32,32,65,114,101,97,32,99,111,110,115,116,114,97,105,110,116,58,32,32,37,46,52,103,10,0,115,117,98,115,101,103,109,101,110,116,32,120,37,108,120,32,119,105,116,104,32,111,114,105,101,110,116,97,116,105,111,110,32,37,100,32,97,110,100,32,109,97,114,107,32,37,100,58,10,0,32,32,32,32,91,48,93,32,61,32,78,111,32,115,117,98,115,101,103,109,101,110,116,10,0,32,32,32,32,91,49,93,32,61,32,78,111,32,115,117,98,115,101,103,109,101,110,116,10,0,32,32,32,32,91,54,93,32,61,32,79,117,116,101,114,32,115,112,97,99,101,10,0,32,32,32,32,91,55,93,32,61,32,79,117,116,101,114,32,115,112,97,99,101,10,0,32,32,32,32,83,101,103,109,101,110,116,32,111,114,105,103,105,110,91,37,100,93,32,61,32,78,85,76,76,10,0,32,32,32,32,83,101,103,109,101,110,116,32,111,114,105,103,105,110,91,37,100,93,32,61,32,120,37,108,120,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,83,101,103,109,101,110,116,32,100,101,115,116,32,32,91,37,100,93,32,61,32,78,85,76,76,10,0,32,32,32,32,83,101,103,109,101,110,116,32,100,101,115,116,32,32,91,37,100,93,32,61,32,120,37,108,120,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,67,104,101,99,107,105,110,103,32,99,111,110,115,105,115,116,101,110,99,121,32,111,102,32,109,101,115,104,46,46,46,10,0,32,32,33,33,32,33,33,32,73,110,118,101,114,116,101,100,32,0,32,32,33,33,32,33,33,32,65,115,121,109,109,101,116,114,105,99,32,116,114,105,97,110,103,108,101,45,116,114,105,97,110,103,108,101,32,98,111,110,100,58,10,0,32,32,32,40,82,105,103,104,116,32,116,114,105,97,110,103,108,101,44,32,119,114,111,110,103,32,111,114,105,101,110,116,97,116,105,111,110,41,10,0,32,32,32,32,70,105,114,115,116,32,0,32,32,32,32,83,101,99,111,110,100,32,40,110,111,110,114,101,99,105,112,114,111,99,97,116,105,110,103,41,32,0,32,32,33,33,32,33,33,32,77,105,115,109,97,116,99,104,101,100,32,101,100,103,101,32,99,111,111,114,100,105,110,97,116,101,115,32,98,101,116,119,101,101,110,32,116,119,111,32,116,114,105,97,110,103,108,101,115,58,10,0,32,32,32,32,70,105,114,115,116,32,109,105,115,109,97,116,99,104,101,100,32,0,32,32,32,32,83,101,99,111,110,100,32,109,105,115,109,97,116,99,104,101,100,32,0,32,32,73,110,32,109,121,32,115,116,117,100,105,101,100,32,111,112,105,110,105,111,110,44,32,116,104,101,32,109,101,115,104,32,97,112,112,101,97,114,115,32,116,111,32,98,101,32,99,111,110,115,105,115,116,101,110,116,46,10,0,32,32,33,33,32,33,33,32,33,33,32,33,33,32,80,114,101,99,105,115,101,108,121,32,111,110,101,32,102,101,115,116,101,114,105,110,103,32,119,111,117,110,100,32,100,105,115,99,111,118,101,114,101,100,46,10,0,32,32,33,33,32,33,33,32,33,33,32,33,33,32,37,100,32,97,98,111,109,105,110,97,116,105,111,110,115,32,119,105,116,110,101,115,115,101,100,46,10,0,32,32,67,104,101,99,107,105,110,103,32,68,101,108,97,117,110,97,121,32,112,114,111,112,101,114,116,121,32,111,102,32,109,101,115,104,46,46,46,10,0,32,32,33,33,32,33,33,32,78,111,110,45,68,101,108,97,117,110,97,121,32,112,97,105,114,32,111,102,32,116,114,105,97,110,103,108,101,115,58,10,0,32,32,32,32,70,105,114,115,116,32,110,111,110,45,68,101,108,97,117,110,97,121,32,0,32,32,32,32,83,101,99,111,110,100,32,110,111,110,45,68,101,108,97,117,110,97,121,32,0,32,32,33,33,32,33,33,32,78,111,110,45,114,101,103,117,108,97,114,32,112,97,105,114,32,111,102,32,116,114,105,97,110,103,108,101,115,58,10,0,32,32,32,32,70,105,114,115,116,32,110,111,110,45,114,101,103,117,108,97,114,32,0,32,32,32,32,83,101,99,111,110,100,32,110,111,110,45,114,101,103,117,108,97,114,32,0,32,32,66,121,32,118,105,114,116,117,101,32,111,102,32,109,121,32,112,101,114,99,101,112,116,105,118,101,32,105,110,116,101,108,108,105,103,101,110,99,101,44,32,73,32,100,101,99,108,97,114,101,32,116,104,101,32,109,101,115,104,32,68,101,108,97,117,110,97,121,46,10,0,32,32,33,33,32,33,33,32,33,33,32,33,33,32,80,114,101,99,105,115,101,108,121,32,111,110,101,32,116,101,114,114,105,102,121,105,110,103,32,116,114,97,110,115,103,114,101,115,115,105,111,110,32,105,100,101,110,116,105,102,105,101,100,46,10,0,32,32,33,33,32,33,33,32,33,33,32,33,33,32,37,100,32,111,98,115,99,101,110,105,116,105,101,115,32,118,105,101,119,101,100,32,119,105,116,104,32,104,111,114,114,111,114,46,10,0,32,32,81,117,101,117,101,105,110,103,32,98,97,100,32,116,114,105,97,110,103,108,101,58,10,0,32,32,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,81,117,101,117,101,105,110,103,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,32,32,67,111,110,115,116,114,117,99,116,105,110,103,32,109,97,112,112,105,110,103,32,102,114,111,109,32,118,101,114,116,105,99,101,115,32,116,111,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,83,101,97,114,99,104,105,110,103,32,102,111,114,32,112,111,105,110,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,32,32,65,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,82,97,110,100,111,109,108,121,32,115,97,109,112,108,105,110,103,32,102,111,114,32,97,32,116,114,105,97,110,103,108,101,32,110,101,97,114,32,112,111,105,110,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,32,32,66,111,117,110,100,97,114,121,32,116,114,105,97,110,103,108,101,32,104,97,115,32,111,114,105,103,105,110,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,32,32,67,104,111,111,115,105,110,103,32,114,101,99,101,110,116,32,116,114,105,97,110,103,108,101,32,119,105,116,104,32,111,114,105,103,105,110,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,32,32,67,104,111,111,115,105,110,103,32,116,114,105,97,110,103,108,101,32,119,105,116,104,32,111,114,105,103,105,110,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,73,110,115,101,114,116,105,110,103,32,110,101,119,32,0,32,32,69,100,103,101,32,102,108,105,112,32,114,101,115,117,108,116,115,32,105,110,32,108,101,102,116,32,0,32,32,97,110,100,32,114,105,103,104,116,32,0,32,32,69,100,103,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+47592);allocate([32,117,110,102,108,105,112,32,114,101,115,117,108,116,115,32,105,110,32,108,101,102,116,32,0,32,32,73,110,115,101,114,116,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,85,112,100,97,116,105,110,103,32,98,111,116,116,111,109,32,108,101,102,116,32,0,32,32,85,112,100,97,116,105,110,103,32,116,111,112,32,108,101,102,116,32,0,32,32,67,114,101,97,116,105,110,103,32,116,111,112,32,114,105,103,104,116,32,0,32,32,67,114,101,97,116,105,110,103,32,98,111,116,116,111,109,32,114,105,103,104,116,32,0,32,32,85,112,100,97,116,105,110,103,32,116,111,112,32,0,32,32,67,114,101,97,116,105,110,103,32,108,101,102,116,32,0,32,32,67,114,101,97,116,105,110,103,32,114,105,103,104,116,32,0,32,32,84,114,105,97,110,103,117,108,97,116,105,110,103,32,105,110,116,101,114,105,111,114,32,112,111,108,121,103,111,110,32,97,116,32,101,100,103,101,10,0,32,32,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,67,111,110,110,101,99,116,105,110,103,32,101,100,103,101,32,116,111,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,68,101,108,101,116,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,67,114,101,97,116,105,110,103,32,98,97,115,101,32,98,111,117,110,100,105,110,103,32,0,32,32,67,114,101,97,116,105,110,103,32,116,111,112,32,98,111,117,110,100,105,110,103,32,0,32,32,67,111,110,110,101,99,116,105,110,103,32,0,32,32,84,114,105,97,110,103,117,108,97,116,105,110,103,32,37,100,32,118,101,114,116,105,99,101,115,46,10,0,32,32,67,114,101,97,116,105,110,103,32,0,32,32,74,111,105,110,105,110,103,32,116,114,105,97,110,103,117,108,97,116,105,111,110,115,32,119,105,116,104,32,37,100,32,97,110,100,32,37,100,32,118,101,114,116,105,99,101,115,46,10,0,32,32,82,101,109,111,118,105,110,103,32,103,104,111,115,116,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,83,111,114,116,105,110,103,32,118,101,114,116,105,99,101,115,46,10,0,87,97,114,110,105,110,103,58,32,32,65,32,100,117,112,108,105,99,97,116,101,32,118,101,114,116,101,120,32,97,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,97,112,112,101,97,114,101,100,32,97,110,100,32,119,97,115,32,105,103,110,111,114,101,100,46,10,0,32,32,70,111,114,109,105,110,103,32,116,114,105,97,110,103,117,108,97,116,105,111,110,46,10,0,32,32,67,114,101,97,116,105,110,103,32,116,114,105,97,110,103,117,108,97,114,32,98,111,117,110,100,105,110,103,32,98,111,120,46,10,0,32,32,82,101,109,111,118,105,110,103,32,116,114,105,97,110,103,117,108,97,114,32,98,111,117,110,100,105,110,103,32,98,111,120,46,10,0,32,32,73,110,99,114,101,109,101,110,116,97,108,108,121,32,105,110,115,101,114,116,105,110,103,32,118,101,114,116,105,99,101,115,46,10,0,32,32,80,108,97,99,105,110,103,32,118,101,114,116,105,99,101,115,32,105,110,32,101,118,101,110,116,32,104,101,97,112,46,10,0,69,114,114,111,114,58,32,32,73,110,112,117,116,32,118,101,114,116,105,99,101,115,32,97,114,101,32,97,108,108,32,105,100,101,110,116,105,99,97,108,46,10,0,67,111,110,115,116,114,117,99,116,105,110,103,32,68,101,108,97,117,110,97,121,32,116,114,105,97,110,103,117,108,97,116,105,111,110,32,0,98,121,32,105,110,99,114,101,109,101,110,116,97,108,32,109,101,116,104,111,100,46,10,0,98,121,32,115,119,101,101,112,108,105,110,101,32,109,101,116,104,111,100,46,10,0,98,121,32,100,105,118,105,100,101,45,97,110,100,45,99,111,110,113,117,101,114,32,109,101,116,104,111,100,46,10,0,69,114,114,111,114,58,32,32,84,114,105,97,110,103,108,101,115,32,109,117,115,116,32,104,97,118,101,32,97,116,32,108,101,97,115,116,32,51,32,118,101,114,116,105,99,101,115,46,10,0,82,101,99,111,110,115,116,114,117,99,116,105,110,103,32,109,101,115,104,46,10,0,32,32,65,115,115,101,109,98,108,105,110,103,32,116,114,105,97,110,103,108,101,115,46,10,0,69,114,114,111,114,58,32,32,84,114,105,97,110,103,108,101,32,37,108,100,32,104,97,115,32,97,110,32,105,110,118,97,108,105,100,32,118,101,114,116,101,120,32,105,110,100,101,120,46,10,0,32,32,77,97,114,107,105,110,103,32,115,101,103,109,101,110,116,115,32,105,110,32,116,114,105,97,110,103,117,108,97,116,105,111,110,46,10,0,69,114,114,111,114,58,32,32,83,101,103,109,101,110,116,32,37,108,100,32,104,97,115,32,97,110,32,105,110,118,97,108,105,100,32,118,101,114,116,101,120,32,105,110,100,101,120,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,102,105,110,100,100,105,114,101,99,116,105,111,110,40,41,58,32,32,85,110,97,98,108,101,32,116,111,32,102,105,110,100,32,97,10,0,32,32,116,114,105,97,110,103,108,101,32,108,101,97,100,105,110,103,32,102,114,111,109,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,116,111,0,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,115,101,103,109,101,110,116,105,110,116,101,114,115,101,99,116,105,111,110,40,41,58,0,32,32,65,116,116,101,109,112,116,32,116,111,32,102,105,110,100,32,105,110,116,101,114,115,101,99,116,105,111,110,32,111,102,32,112,97,114,97,108,108,101,108,32,115,101,103,109,101,110,116,115,46,10,0,32,32,83,112,108,105,116,116,105,110,103,32,115,117,98,115,101,103,109,101,110,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,97,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,115,101,103,109,101,110,116,105,110,116,101,114,115,101,99,116,105,111,110,40,41,58,10,0,32,32,70,97,105,108,117,114,101,32,116,111,32,115,112,108,105,116,32,97,32,115,101,103,109,101,110,116,46,10,0,32,32,84,111,112,111,108,111,103,105,99,97,108,32,105,110,99,111,110,115,105,115,116,101,110,99,121,32,97,102,116,101,114,32,115,112,108,105,116,116,105,110,103,32,97,32,115,101,103,109,101,110,116,46,10,0,70,111,114,99,105,110,103,32,115,101,103,109,101,110,116,32,105,110,116,111,32,116,114,105,97,110,103,117,108,97,116,105,111,110,32,98,121,32,114,101,99,117,114,115,105,118,101,32,115,112,108,105,116,116,105,110,103,58,10,0,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,83,101,103,109,101,110,116,32,105,110,116,101,114,115,101,99,116,115,32,101,120,105,115,116,105,110,103,32,118,101,114,116,101,120,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,84,119,111,32,115,101,103,109,101,110,116,115,32,105,110,116,101,114,115,101,99,116,32,97,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,99,111,110,102,111,114,109,105,110,103,101,100,103,101,40,41,58,10,0,32,32,67,111,110,110,101,99,116,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,116,111,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,105,110,115,101,114,116,115,101,103,109,101,110,116,40,41,58,32,32,85,110,97,98,108,101,32,116,111,32,108,111,99,97,116,101,32,80,83,76,71,32,118,101,114,116,101,120,10,0,32,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,105,110,32,116,114,105,97,110,103,117,108,97,116,105,111,110,46,10,0,82,101,99,111,118,101,114,105,110,103,32,115,101,103,109,101,110,116,115,32,105,110,32,68,101,108,97,117,110,97,121,32,116,114,105,97,110,103,117,108,97,116,105,111,110,46,10,0,105,110,112,117,116,0,32,32,82,101,99,111,118,101,114,105,110,103,32,80,83,76,71,32,115,101,103,109,101,110,116,115,46,10,0,87,97,114,110,105,110,103,58,32,32,73,110,118,97,108,105,100,32,102,105,114,115,116,32,101,110,100,112,111,105,110,116,32,111,102,32,115,101,103,109,101,110,116,32,37,100,32,105,110,32,37,115,46,10,0,87,97,114,110,105,110,103,58,32,32,73,110,118,97,108,105,100,32,115,101,99,111,110,100,32,101,110,100,112,111,105,110,116,32,111,102,32,115,101,103,109,101,110,116,32,37,100,32,105,110,32,37,115,46,10,0,87,97,114,110,105,110,103,58,32,32,69,110,100,112,111,105,110,116,115,32,111,102,32,115,101,103,109,101,110,116,32,37,100,32,97,114,101,32,99,111,105,110,99,105,100,101,110,116,32,105,110,32,37,115,46,10,0,32,32,69,110,99,108,111,115,105,110,103,32,99,111,110,118,101,120,32,104,117,108,108,32,119,105,116,104,32,115,101,103,109,101,110,116,115,46,10,0,32,32,77,97,114,107,105,110,103,32,99,111,110,99,97,118,105,116,105,101,115,32,40,101,120,116,101,114,110,97,108,32,116,114,105,97,110,103,108,101,115,41,32,102,111,114,32,101,108,105,109,105,110,97,116,105,111,110,46,10,0,32,32,77,97,114,107,105,110,103,32,110,101,105,103,104,98,111,114,115,32,111,102,32,109,97,114,107,101,100,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,32,32,67,104,101,99,107,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,32,32,77,97,114,107,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,68,101,108,101,116,105,110,103,32,109,97,114,107,101,100,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,32,32,68,101,108,101,116,105,110,103,32,118,101,114,116,101,120,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,10,0,32,32,85,110,109,97,114,107,105,110,103,32,109,97,114,107,101,100,32,116,114,105,97,110,103,108,101,115,46,10,0,82,101,109,111,118,105,110,103,32,117,110,119,97,110,116,101,100,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,77,97,114,107,105,110,103,32,104,111,108,101,115,32,102,111,114,32,101,108,105,109,105,110,97,116,105,111,110,46,10,0,83,112,114,101,97,100,105,110,103,32,114,101,103,105,111,110,97,108,32,97,116,116,114,105,98,117,116,101,115,32,97,110,100,32,97,114,101,97,32,99,111,110,115,116,114,97,105,110,116,115,46,10,0,83,112,114,101,97,100,105,110,103,32,114,101,103,105,111,110,97,108,32,97,116,116,114,105,98,117,116,101,115,46,10,0,83,112,114,101,97,100,105,110,103,32,114,101,103,105,111,110,97,108,32,97,114,101,97,32,99,111,110,115,116,114,97,105,110,116,115,46,10,0,84,114,121,32,105,110,99,114,101,97,115,105,110,103,32,116,104,101,32,97,114,101,97,32,99,114,105,116,101,114,105,111,110,32,97,110,100,47,111,114,32,114,101,100,117,99,105,110,103,32,116,104,101,32,109,105,110,105,109,117,109,10,0,32,32,97,108,108,111,119,97,98,108,101,32,97,110,103,108,101,32,115,111,32,116,104,97,116,32,116,105,110,121,32,116,114,105,97,110,103,108,101,115,32,97,114,101,32,110,111,116,32,99,114,101,97,116,101,100,46,10,0,69,114,114,111,114,58,32,32,82,97,110,32,111,117,116,32,111,102,32,112,114,101,99,105,115,105,111,110,32,97,116,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,73,32,97,116,116,101,109,112,116,101,100,32,116,111,32,115,112,108,105,116,32,97,32,115,101,103,109,101,110,116,32,116,111,32,97,32,115,109,97,108,108,101,114,32,115,105,122,101,32,116,104,97,110,10,0,32,32,99,97,110,32,98,101,32,97,99,99,111,109,109,111,100,97,116,101,100,32,98,121,32,116,104,101,32,102,105,110,105,116,101,32,112,114,101,99,105,115,105,111,110,32,111,102,10,0,32,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,97,114,105,116,104,109,101,116,105,99,46,10,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,115,112,108,105,116,101,110,99,115,101,103,115,40,41,58,10,0,32,32,77,97,107,105,110,103,32,97,32,108,105,115,116,32,111,102,32,98,97,100,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,83,112,108,105,116,116,105,110,103,32,116,104,105,115,32,116,114,105,97,110,103,108,101,32,97,116,32,105,116,115,32,99,105,114,99,117,109,99,101,110,116,101,114,58,10,0,87,97,114,110,105,110,103,58,32,32,78,101,119,32,118,101,114,116,101,120,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,32,102,97,108,108,115,32,111,110,32,101,120,105,115,116,105,110,103,32,118,101,114,116,101,120,46,10,0,32,32,82,101,106,101,99,116,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,32,32,84,104,101,32,110,101,119,32,118,101,114,116,101,120,32,105,115,32,97,116,32,116,104,101,32,99,105,114,99,117,109,99,101,110,116,101,114,32,111,102,32,116,114,105,97,110,103,108,101,10,0,84,104,105,115,32,112,114,111,98,97,98,108,121,32,109,101,97,110,115,32,116,104,97,116,32,73,32,97,109,32,116,114,121,105,110,103,32,116,111,32,114,101,102,105,110,101,32,116,114,105,97,110,103,108,101,115,10,0,32,32,116,111,32,97,32,115,109,97,108,108,101,114,32,115,105,122,101,32,116,104,97,110,32,99,97,110,32,98,101,32,97,99,99,111,109,109,111,100,97,116,101,100,32,98,121,32,116,104,101,32,102,105,110,105,116,101,10,0,32,32,112,114,101,99,105,115,105,111,110,32,111,102,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,97,114,105,116,104,109,101,116,105,99,46,32,32,40,89,111,117,32,99,97,110,32,98,101,10,0,32,32,115,117,114,101,32,111,102,32,116,104,105,115,32,105,102,32,73,32,102,97,105,108,32,116,111,32,116,101,114,109,105,110,97,116,101,46,41,10,0,65,100,100,105,110,103,32,83,116,101,105,110,101,114,32,112,111,105,110,116,115,32,116,111,32,101,110,102,111,114,99,101,32,113,117,97,108,105,116,121,46,10,0,32,32,76,111,111,107,105,110,103,32,102,111,114,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,115,46,10,0,32,32,83,112,108,105,116,116,105,110,103,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,115,46,10,0,32,32,83,112,108,105,116,116,105,110,103,32,98,97,100,32,116,114,105,97,110,103,108,101,115,46,10,0,10,87,97,114,110,105,110,103,58,32,32,73,32,114,97,110,32,111,117,116,32,111,102,32,83,116,101,105,110,101,114,32,112,111,105,110,116,115,44,32,98,117,116,32,116,104,101,32,109,101,115,104,32,104,97,115,10,0,32,32,111,110,101,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,44,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,109,105,103,104,116,32,110,111,116,32,98,101,32,116,114,117,108,121,10,0,32,32,37,108,100,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,115,44,32,97,110,100,32,116,104,101,114,101,102,111,114,101,32,109,105,103,104,116,32,110,111,116,32,98,101,32,116,114,117,108,121,10,0,32,32,68,101,108,97,117,110,97,121,46,32,32,73,102,32,116,104,101,32,68,101,108,97,117,110,97,121,32,112,114,111,112,101,114,116,121,32,105,115,32,105,109,112,111,114,116,97,110,116,32,116,111,32,121,111,117,44,10,0,32,32,116,114,121,32,105,110,99,114,101,97,115,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,83,116,101,105,110,101,114,32,112,111,105,110,116,115,32,40,99,111,110,116,114,111,108,108,101,100,32,98,121,10,0,32,32,116,104,101,32,45,83,32,115,119,105,116,99,104,41,32,115,108,105,103,104,116,108,121,32,97,110,100,32,116,114,121,32,97,103,97,105,110,46,10,10,0,65,100,100,105,110,103,32,118,101,114,116,105,99,101,115,32,102,111,114,32,115,101,99,111,110,100,45,111,114,100,101,114,32,116,114,105,97,110,103,108,101,115,46,10,0,32,32,67,114,101,97,116,105,110,103,32,40,37,46,49,50,103,44,32,37,46,49,50,103,41,46,10,0,69,114,114,111,114,58,32,32,73,110,112,117,116,32,109,117,115,116,32,104,97,118,101,32,97,116,32,108,101,97,115,116,32,116,104,114,101,101,32,105,110,112,117,116,32,118,101,114,116,105,99,101,115,46,10,0,87,114,105,116,105,110,103,32,118,101,114,116,105,99,101,115,46,10,0,87,114,105,116,105,110,103,32,116,114,105,97,110,103,108,101,115,46,10,0,87,114,105,116,105,110,103,32,115,101,103,109,101,110,116,115,46,10,0,87,114,105,116,105,110,103,32,101,100,103,101,115,46,10,0,87,114,105,116,105,110,103,32,86,111,114,111,110,111,105,32,118,101,114,116,105,99,101,115,46,10,0,87,114,105,116,105,110,103,32,86,111,114,111,110,111,105,32,101,100,103,101,115,46,10,0,87,114,105,116,105,110,103,32,110,101,105,103,104,98,111,114,115,46,10,0,77,101,115,104,32,113,117,97,108,105,116,121,32,115,116,97,116,105,115,116,105,99,115,58,10,10,0,32,32,83,109,97,108,108,101,115,116,32,97,114,101,97,58,32,37,49,54,46,53,103,32,32,32,124,32,32,76,97,114,103,101,115,116,32,97,114,101,97,58,32,37,49,54,46,53,103,10,0,32,32,83,104,111,114,116,101,115,116,32,101,100,103,101,58,32,37,49,54,46,53,103,32,32,32,124,32,32,76,111,110,103,101,115,116,32,101,100,103,101,58,32,37,49,54,46,53,103,10,0,32,32,83,104,111,114,116,101,115,116,32,97,108,116,105,116,117,100,101,58,32,37,49,50,46,53,103,32,32,32,124,32,32,76,97,114,103,101,115,116,32,97,115,112,101,99,116,32,114,97,116,105,111,58,32,37,56,46,53,103,10,10,0,32,32,84,114,105,97,110,103,108,101,32,97,115,112,101,99,116,32,114,97,116,105,111,32,104,105,115,116,111,103,114,97,109,58,10,0,32,32,49,46,49,53,52,55,32,45,32,37,45,54,46,54,103,32,32,32,32,58,32,32,37,56,100,32,32,32,32,124,32,37,54,46,54,103,32,45,32,37,45,54,46,54,103,32,32,32,32,32,58,32,32,37,56,100,10,0,32,32,37,54,46,54,103,32,45,32,37,45,54,46,54,103,32,32,32,32,58,32,32,37,56,100,32,32,32,32,124,32,37,54,46,54,103,32,45,32,37,45,54,46,54,103,32,32,32,32,32,58,32,32,37,56,100,10,0,32,32,37,54,46,54,103,32,45,32,37,45,54,46,54,103,32,32,32,32,58,32,32,37,56,100,32,32,32,32,124,32,37,54,46,54,103,32,45,32,32,32,32,32,32,32,32,32,32,32,32,58,32,32,37,56,100,10,0,32,32,40,65,115,112,101,99,116,32,114,97,116,105,111,32,105,115,32,108,111,110,103,101,115,116,32,101,100,103,101,32,100,105,118,105,100,101,100,32,98,121,32,115,104,111,114,116,101,115,116,32,97,108,116,105,116,117,100,101,41,10,10,0,32,32,83,109,97,108,108,101,115,116,32,97,110,103,108,101,58,32,37,49,53,46,53,103,32,32,32,124,32,32,76,97,114,103,101,115,116,32,97,110,103,108,101,58,32,37,49,53,46,53,103,10,10,0,32,32,65,110,103,108,101,32,104,105,115,116,111,103,114,97,109,58,10,0,32,32,32,32,37,51,100,32,45,32,37,51,100,32,100,101,103,114,101,101,115,58,32,32,37,56,100,32,32,32,32,124,32,32,32,32,37,51,100,32,45,32,37,51,100,32,100,101,103,114,101,101,115,58,32,32,37,56,100,10,0,10,83,116,97,116,105,115,116,105,99,115,58,10,10,0,32,32,73,110,112,117,116,32,118,101,114,116,105,99,101,115,58,32,37,100,10,0,32,32,73,110,112,117,116,32,116,114,105,97,110,103,108,101,115,58,32,37,100,10,0,32,32,73,110,112,117,116,32,115,101,103,109,101,110,116,115,58,32,37,100,10,0,32,32,73,110,112,117,116,32,104,111,108,101,115,58,32,37,100,10,0,10,32,32,77,101,115,104,32,118,101,114,116,105,99,101,115,58,32,37,108,100,10,0,32,32,77,101,115,104,32,116,114,105,97,110,103,108,101,115,58,32,37,108,100,10,0,32,32,77,101,115,104,32,101,100,103,101,115,58,32,37,108,100,10,0,32,32,77,101,115,104,32,101,120,116,101,114,105,111,114,32,98,111,117,110,100,97,114,121,32,101,100,103,101,115,58,32,37,108,100,10,0,32,32,77,101,115,104,32,105,110,116,101,114,105,111,114,32,98,111,117,110,100,97,114,121,32,101,100,103,101,115,58,32,37,108,100,10,0,32,32,77,101,115,104,32,115,117,98,115,101,103,109,101,110,116,115,32,40,99,111,110,115,116,114,97,105,110,101,100,32,101,100,103,101,115,41,58,32,37,108,100,10,0,77,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,115,116,97,116,105,115,116,105,99,115,58,10,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,118,101,114,116,105,99,101,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,116,114,105,97,110,103,108,101,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,117,98,115,101,103,109,101,110,116,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,118,105,114,105,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,101,110,99,114,111,97,99,104,101,100,32,115,117,98,115,101,103,109,101,110,116,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,98,97,100,32,116,114,105,97,110,103,108,101,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,116,97,99,107,101,100,32,116,114,105,97,110,103,108,101,32,102,108,105,112,115,58,32,37,108,100,10,0,32,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,115,112,108,97,121,32,116,114,101,101,32,110,111,100,101,115,58,32,37,108,100,10,0,32,32,65,112,112,114,111,120,105,109,97,116,101,32,104,101,97,112,32,109,101,109,111,114,121,32,117,115,101,32,40,98,121,116,101,115,41,58,32,37,108,100,10,10,0,65,108,103,111,114,105,116,104,109,105,99,32,115,116,97,116,105,115,116,105,99,115,58,10,10,0,32,32,78,117,109,98,101,114,32,111,102,32,105,110,99,105,114,99,108,101,32,116,101,115,116,115,58,32,37,108,100,10,0,32,32,78,117,109,98,101,114,32,111,102,32,51,68,32,111,114,105,101,110,116,97,116,105,111,110,32,116,101,115,116,115,58,32,37,108,100,10,0,32,32,78,117,109,98,101,114,32,111,102,32,50,68,32,111,114,105,101,110,116,97,116,105,111,110,32,116,101,115,116,115,58,32,37,108,100,10,0,32,32,78,117,109,98,101,114,32,111,102,32,114,105,103,104,116,45,111,102,45,104,121,112,101,114,98,111,108,97,32,116,101,115,116,115,58,32,37,108,100,10,0,32,32,78,117,109,98,101,114,32,111,102,32,99,105,114,99,108,101,32,116,111,112,32,99,111,109,112,117,116,97,116,105,111,110,115,58,32,37,108,100,10,0,32,32,78,117,109,98,101,114,32,111,102,32,116,114,105,97,110,103,108,101,32,99,105,114,99,117,109,99,101,110,116,101,114,32,99,111,109,112,117,116,97,116,105,111,110,115,58,32,37,108,100,10,0,78,79,84,32,119,114,105,116,105,110,103,32,118,101,114,116,105,99,101,115,46,10,0,78,79,84,32,119,114,105,116,105,110,103,32,116,114,105,97,110,103,108,101,115,46,10,0,78,79,84,32,119,114,105,116,105,110,103,32,115,101,103,109,101,110,116,115,46,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,47,105,111,47,46,46,47,46,46,47,46,46,47,99,47,98,97,109,103,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,32,32,32,32,32,32,32,32,32,110,97,109,101,58,32,34,0,34,10,0,32,32,32,32,32,32,32,32,32,110,117,109,101,108,58,32,0,32,32,32,32,32,32,32,32,32,110,100,105,109,115,58,32,0,32,32,32,32,32,32,32,32,32,32,115,105,122,101,58,32,0,32,32,32,32,32,32,32,32,32,32,115,105,122,101,58,32,91,101,109,112,116,121,93,10,0,32,32,32,32,32,32,32,32,32,118,97,108,117,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,47,105,111,47,46,46,47,46,46,47,46,46,47,99,47,99,108,97,115,115,101,115,47,46,47,79,112,116,105,111,110,115,47,79,112,116,105,111,110,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,47,105,111,47,46,46,47,46,46,47,46,46,47,99,47,99,108,97,115,115,101,115,47,46,47,79,112,116,105,111,110,115,47,46,47,71,101,110,101,114,105,99,79,112,116,105,111,110,46,104,0,49,51,71,101,110,101,114,105,99,79,112,116,105,111,110,73,100,69,0,54,79,112,116,105,111,110,0,54,79,98,106,101,99,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,119,114,97,112,112,101,114,115,47,106,97,118,97,115,99,114,105,112,116,47,46,47,105,111,47,46,46,47,46,46,47,46,46,47,99,47,99,108,97,115,115,101,115,47,46,47,67,111,110,116,111,117,114,46,104,0,32,67,111,110,116,111,117,114,58,32,0,32,32,32,32,110,111,100,115,58,32,0,32,32,99,108,111,115,101,100,58,32,0,32,32,32,120,32,44,32,121,58,10,0,55,67,111,110,116,111,117,114,73,100,69,0,37,115,37,108,102,0,112,81,122,68,113,51,48,105,97,0,100,97,116,97,32,112,114,111,118,105,100,101,100,32,115,104,111,117,108,100,32,104,97,118,101,32,101,105,116,104,101,114,32,0,32,111,114,32,0,32,108,105,110,101,115,32,40,110,111,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,120,47,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,120,46,99,112,112,0,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,120,0,100,101,102,97,117,108,116,0,84,114,105,97,110,103,108,101,32,110,117,109,98,101,114,32,0,32,110,111,116,32,105,110,32,91,48,32,0,93,44,32,114,101,112,111,114,116,32,98,117,103,32,116,111,32,100,101,118,101,108,111,112,101,114,115,32,40,105,110,116,101,114,112,111,108,97,116,105,111,110,32,112,111,105,110,116,58,32,0,111,112,116,105,111,110,32,111,102,32,110,97,109,101,32,34,0,34,32,110,111,116,32,102,111,117,110,100,44,32,97,110,100,32,110,111,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,104,97,115,32,98,101,101,110,32,112,114,111,118,105,100,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,73,110,116,101,114,112,70,114,111,109,77,101,115,104,84,111,77,101,115,104,50,100,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,79,112,116,105,111,110,115,47,79,112,116,105,111,110,115,46,104,0,71,101,116,0,101,108,101,109,101,110,116,0,101,108,101,109,101,110,116,32,97,110,100,32,110,111,100,101,0,109,97,120,32,99,111,110,110,101,99,116,105,118,105,116,121,32,119,105,100,116,104,32,114,101,97,99,104,101,100,32,40,0,41,33,32,105,110,99,114,101,97,115,101,32,119,105,100,116,104,32,111,102,32,99,111,110,110,101,99,116,105,118,105,116,121,32,116,97,98,108,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,78,111,100,101,67,111,110,110,101,99,116,105,118,105,116,121,120,47,78,111,100,101,67,111,110,110,101,99,116,105,118,105,116,121,120,46,99,112,112,0,78,111,100,101,67,111,110,110,101,99,116,105,118,105,116,121,120,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,100,97,116,97,115,116,114,117,99,116,117,114,101,115,47,68,97,116,97,83,101,116,46,99,112,112,0,99,111,117,108,100,32,110,111,116,32,114,101,99,111,103,110,105,122,101,32,101,110,117,109,32,116,121,112,101,58,32,0,68,97,116,97,83,101,116,32,101,99,104,111,58,32,0,32,111,98,106,101,99,116,115,10,0,116,114,121,105,110,103,32,116,111,32,98,105,110,97,114,121,32,115,101,97,114,99,104,32,111,110,32,97,32,110,111,110,45,115,111,114,116,101,100,32,100,97,116,97,115,101,116,33,0,71,101,116,79,98,106,101,99,116,66,121,73,100,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,111,98,106,101,99,116,32,119,105,116,104,32,105,100,32,0,32,105,110,32,68,97,116,97,83,101,116,32,0,114,98,0,114,0,32,32,32,80,114,111,99,101,115,115,105,110,103,32,102,105,110,105,116,101,32,101,108,101,109,101,110,116,32,109,111,100,101,108,32,111,102,32,97,110,97,108,121,115,105,115,32,0,32,32,32,32,32,32,99,111,110,102,105,103,117,114,105,110,103,32,101,108,101,109,101,110,116,32,97,110,100,32,108,111,97,100,115,10,0,32,32,32,32,32,32,99,114,101,97,116,105,110,103,32,118,101,114,116,101,120,32,80,73,68,115,10,0,32,32,32,32,32,32,114,101,115,111,108,118,105,110,103,32,110,111,100,101,32,99,111,110,115,116,114,97,105,110,116,115,10,0,32,32,32,32,32,32,99,114,101,97,116,105,110,103,32,110,111,100,97,108,32,100,101,103,114,101,101,115,32,111,102,32,102,114,101,101,100,111,109,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,70,101,109,77,111,100,101,108,46,99,112,112,0,83,111,108,117,116,105,111,110,65,110,97,108,121,115,101,115,76,105,115,116,0,32,32,32,0,70,101,109,77,111,100,101,108,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,101,108,97,112,115,101,100,32,116,105,109,101,58,0,67,111,114,101,32,115,111,108,117,116,105,111,110,32,101,108,97,112,115,101,100,32,116,105,109,101,58,0,32,32,32,84,111,116,97,108,32,101,108,97,112,115,101,100,32,116,105,109,101,58,32,0,32,104,114,115,32,0,32,109,105,110,32,0,32,115,101,99,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,97,108,105,97,115,32,102,111,114,32,97,110,97,108,121,115,105,115,95,116,121,112,101,32,0,32,105,110,32,108,105,115,116,32,111,102,32,70,101,109,77,111,100,101,108,32,97,110,97,108,121,115,101,115,0,32,32,32,32,32,32,116,111,111,108,107,105,116,115,32,79,112,116,105,111,110,115,32,115,101,116,32,102,111,114,32,97,110,97,108,121,115,105,115,32,116,121,112,101,58,32,0,67,111,114,101,32,115,111,108,117,116,105,111,110,32,101,108,97,112,115,101,100,32,116,105,109,101,32,32,32,32,58,32,0,32,83,101,99,111,110,100,115,10,0,67,111,114,101,32,115,111,108,117,116,105,111,110,32,110,117,109,98,101,114,32,111,102,32,102,108,111,112,115,32,58,32,0,32,70,108,111,112,115,10,0,67,111,114,101,32,115,111,108,117,116,105,111,110,32,109,101,109,111,114,121,32,117,115,101,100,32,32,32,32,32,58,32,0,32,66,121,116,101,115,10,0,101,114,114,111,114,32,114,101,97,100,105,110,103,32,116,104,101,32,98,117,102,102,101,114,32,102,114,111,109,32,109,97,114,115,104,97,108,108,101,100,32,102,105,108,101,33,0,82,101,115,116,97,114,116,0,32,32,32,117,112,100,97,116,105,110,103,32,118,101,114,116,105,99,101,115,32,112,111,115,105,116,105,111,110,115,10,0,32,32,32,85,112,100,97,116,105,110,103,32,99,111,110,115,116,114,97,105,110,116,115,32,97,110,100,32,97,99,116,105,118,101,32,100,111,109,97,105,110,32,111,102,32,97,110,97,108,121,115,105,115,32,0,32,102,111,114,32,116,105,109,101,58,32,0,110,111,32,109,97,115,115,32,102,108,117,120,32,115,101,103,109,101,110,116,115,32,97,118,97,105,108,97,98,108,101,33,0,77,97,115,115,70,108,117,120,120,0,73,110,116,101,114,112,111,108,97,116,105,111,110,32,0,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,120,0,83,104,111,117,108,100,32,110,111,116,32,98,101,32,114,101,113,117,101,115,116,105,110,103,32,100,101,112,101,110,100,101,110,116,115,32,119,104,101,110,32,97,110,32,65,68,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,33,0,82,101,113,117,101,115,116,101,100,68,101,112,101,110,100,101,110,116,115,120,0,109,111,114,101,32,116,104,97,110,32,51,32,99,111,110,116,114,111,108,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,79,117,116,112,117,116,67,111,110,116,114,111,108,115,120,0,13,0,32,32,32,32,32,32,99,111,110,118,111,108,117,116,105,111,110,32,112,114,111,103,114,101,115,115,58,32,0,37,32,32,0,37,32,32,32,0,32,32,32,78,117,109,98,101,114,32,111,102,32,97,99,116,105,118,101,32,110,111,100,101,115,32,105,110,32,69,80,76,32,108,97,121,101,114,58,32,0,32,32,32,78,117,109,98,101,114,32,111,102,32,97,99,116,105,118,101,32,110,111,100,101,115,32,76,50,32,80,114,111,106,101,99,116,105,111,110,58,32,0,99,111,117,108,100,32,110,111,116,32,105,110,105,116,105,97,108,105,122,101,32,111,117,116,112,117,116,32,115,116,114,101,97,109,0,73,110,105,116,70,114,111,109,66,117,102,102,101,114,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,47,80,97,114,97,109,115,47,71,101,110,101,114,105,99,80,97,114,97,109,46,104,0,32,32,32,87,65,82,78,73,78,71,58,32,112,97,114,97,109,101,116,101,114,32,0,32,105,115,32,97,32,71,101,110,101,114,105,99,80,97,114,97,109,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,109,97,114,115,104,97,108,108,101,100,10,0,71,101,110,101,114,105,99,80,97,114,97,109,58,10,0,32,32,32,101,110,117,109,58,32,32,0,49,50,71,101,110,101,114,105,99,80,97,114,97,109,73,80,106,69,0,53,80,97,114,97,109,0,49,50,71,101,110,101,114,105,99,80,97,114,97,109,73,80,80,99,69,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,47,69,120,116,101,114,110,97,108,82,101,115,117,108,116,115,47,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,46,104,0,87,114,105,116,101,68,97,116,97,0,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,32,105,110,115,116,97,110,116,105,97,116,101,100,32,102,111,114,32,116,121,112,101,32,86,101,99,116,111,114,60,73,115,115,109,68,111,117,98,108,101,62,42,32,99,97,108,108,101,100,32,0,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,60,86,101,99,116,111,114,60,73,115,115,109,80,68,111,117,98,108,101,62,42,62,58,10,0,50,49,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,73,80,54,86,101,99,116,111,114,73,100,69,69,0,49,52,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,60,73,115,115,109,80,68,111,117,98,108,101,42,62,58,10,0,32,32,32,91,32,0,32,93,10,0,50,49,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,73,80,100,69,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,47,73,115,115,109,86,101,99,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,47,73,115,115,109,83,101,113,86,101,99,46,104,0,73,115,115,109,83,101,113,86,101,99,32,115,105,122,101,32,0,10,32,0,49,48,73,115,115,109,83,101,113,86,101,99,73,100,69,0,49,48,73,115,115,109,65,98,115,86,101,99,73,100,69,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,101,116,115,99,32,118,101,99,116,111,114,32,119,105,116,104,111,117,116,32,80,69,84,83,67,32,99,111,109,112,105,108,101,100,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,47,86,101,99,116,111,114,46,104,0,71,101,110,101,114,105,99,77,97,114,115,104,97,108,108,0,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,60,100,111,117,98,108,101,62,58,10,0,50,49,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,73,100,69,0,49,50,71,101,110,101,114,105,99,80,97,114,97,109,73,105,69,0,49,52,84,114,97,110,115,105,101,110,116,73,110,112,117,116,0,84,114,97,110,115,105,101,110,116,73,110,112,117,116,58,10,0,32,32,32,110,117,109,116,105,109,101,115,116,101,112,115,58,32,0,45,45,45,105,110,112,117,116,115,58,32,10,0,32,32,32,116,105,109,101,58,32,0,32,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,84,114,97,110,115,105,101,110,116,73,110,112,117,116,46,99,112,112,0,116,105,109,101,115,116,101,112,32,118,97,108,117,101,115,32,109,117,115,116,32,105,110,99,114,101,97,115,101,32,115,101,113,117,101,110,116,105,97,108,108,121,0,65,100,100,84,105,109,101,73,110,112,117,116,0,53,73,110,112,117,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,84,114,97,110,115,105,101,110,116,73,110,112,117,116,46,104,0,49,50,83,112,99,84,114,97,110,115,105,101,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,83,112,99,84,114,97,110,115,105,101,110,116,58,10,0,32,32,32,110,115,116,101,112,115,58,32,0,32,32,32,115,116,101,112,115,124,116,105,109,101,115,124,118,97,108,117,101,115,10],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+57832);allocate([0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,83,112,99,84,114,97,110,115,105,101,110,116,46,99,112,112,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,116,105,109,101,32,115,101,103,109,101,110,116,32,102,111,114,32,99,111,110,115,116,114,97,105,110,116,0,67,111,110,115,116,114,97,105,110,78,111,100,101,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,100,111,102,32,97,110,100,32,118,97,108,117,101,32,102,111,114,32,110,111,110,32,112,101,110,97,108,116,121,32,99,111,110,115,116,114,97,105,110,116,0,49,48,67,111,110,115,116,114,97,105,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,117,110,107,110,111,119,110,32,105,110,115,101,114,116,32,109,111,100,101,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,47,69,108,101,109,101,110,116,115,47,46,46,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,47,73,115,115,109,68,101,110,115,101,77,97,116,46,104,0,83,101,116,86,97,108,117,101,115,0,65,32,97,110,100,32,65,88,32,115,104,111,117,108,100,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,114,111,119,115,33,0,77,97,116,77,117,108,116,0,65,32,97,110,100,32,88,32,115,104,111,117,108,100,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,33,0,117,110,107,110,111,119,110,32,110,111,114,109,32,33,0,78,111,114,109,0,73,115,115,109,68,101,110,115,101,77,97,116,32,115,105,122,101,32,0,49,50,73,115,115,109,68,101,110,115,101,77,97,116,73,100,69,0,49,48,73,115,115,109,65,98,115,77,97,116,73,100,69,0,112,101,116,115,99,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,101,116,115,99,32,109,97,116,114,105,120,32,119,105,116,104,111,117,116,32,80,69,84,83,67,32,99,111,109,112,105,108,101,100,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,47,69,108,101,109,101,110,116,115,47,46,46,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,47,77,97,116,114,105,120,46,104,0,73,110,105,116,67,104,101,99,107,65,110,100,83,101,116,84,121,112,101,0,117,110,107,110,111,119,32,116,111,111,108,107,105,116,32,116,121,112,101,32,0,52,78,111,100,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,78,111,100,101,46,99,112,112,0,78,111,100,101,58,10,0,32,32,32,97,110,97,108,121,115,105,115,95,101,110,117,109,58,32,0,32,32,32,97,112,112,114,111,120,105,109,97,116,105,111,110,58,32,0,32,32,32,105,110,100,101,120,105,110,103,117,112,100,97,116,101,58,32,0,71,101,116,68,111,102,0,71,101,116,68,111,102,76,105,115,116,0,71,101,116,76,111,99,97,108,68,111,102,76,105,115,116,0,67,97,110,110,111,116,32,99,104,97,110,103,101,32,100,111,102,32,111,102,32,102,114,111,122,101,110,32,110,111,100,101,0,68,111,102,73,110,70,83,101,116,0,71,101,116,78,117,109,98,101,114,79,102,68,111,102,115,0,86,101,99,77,101,114,103,101,32,99,97,110,32,111,110,108,121,32,109,101,114,103,101,32,102,114,111,109,32,116,104,101,32,115,32,111,114,32,102,45,115,101,116,32,111,110,116,111,32,116,104,101,32,103,45,115,101,116,33,0,86,101,99,77,101,114,103,101,0,86,101,99,82,101,100,117,99,101,32,99,97,110,32,111,110,108,121,32,109,101,114,103,101,32,102,114,111,109,32,116,104,101,32,115,32,111,114,32,102,45,115,101,116,32,111,110,116,111,32,116,104,101,32,103,45,115,101,116,33,0,86,101,99,82,101,100,117,99,101,0,68,105,115,116,114,105,98,117,116,101,68,111,102,115,0,79,102,102,115,101,116,68,111,102,115,0,83,104,111,119,84,114,117,101,68,111,102,115,0,85,112,100,97,116,101,67,108,111,110,101,68,111,102,115,0,54,86,101,114,116,101,120,0,86,101,114,116,101,120,58,10,0,32,32,32,112,105,100,58,32,0,32,32,32,120,58,32,0,32,32,32,121,58,32,0,32,32,32,122,58,32,0,32,32,32,115,105,103,109,97,58,32,0,32,32,32,99,111,110,110,101,99,116,105,118,105,116,121,58,32,0,32,32,32,99,108,111,110,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,86,101,114,116,101,120,46,99,112,112,0,85,112,100,97,116,101,80,111,115,105,116,105,111,110,0,55,69,108,101,109,101,110,116,0,73,110,112,117,116,32,109,105,115,115,105,110,103,46,32,72,101,114,101,32,97,114,101,32,116,104,101,32,105,110,112,117,116,32,112,111,105,110,116,101,114,115,32,119,101,32,104,97,118,101,32,102,111,114,32,118,120,58,32,0,44,32,118,121,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,69,108,101,109,101,110,116,46,99,112,112,0,83,116,114,97,105,110,82,97,116,101,83,83,65,0,44,32,118,122,58,32,0,83,116,114,97,105,110,82,97,116,101,70,83,0,67,111,111,114,100,105,110,97,116,101,32,115,121,115,116,101,109,32,0,67,111,111,114,100,105,110,97,116,101,83,121,115,116,101,109,84,114,97,110,115,102,111,114,109,0,32,101,108,101,109,101,110,116,58,10,0,32,32,32,105,100,32,58,32,0,118,101,114,116,105,99,101,115,32,61,32,78,85,76,76,10,0,110,111,100,101,115,32,61,32,78,85,76,76,10,0,109,97,116,101,114,105,97,108,32,61,32,78,85,76,76,10,0,109,97,116,112,97,114,32,61,32,78,85,76,76,10,0,112,97,114,97,109,101,116,101,114,115,32,61,32,78,85,76,76,10,0,32,32,32,105,110,112,117,116,115,10,0,105,110,112,117,116,115,61,78,85,76,76,10,0,83,116,114,97,105,110,82,97,116,101,72,79,0,83,116,114,97,105,110,82,97,116,101,72,79,50,100,118,101,114,116,105,99,97,108,0,83,116,114,97,105,110,82,97,116,101,83,83,65,49,100,0,68,101,108,116,97,49,56,111,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,0,77,117,110,103,115,109,116,112,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,0,68,101,108,116,97,49,56,111,112,100,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,0,110,111,100,101,115,91,0,93,32,61,32,0,71,101,116,73,110,112,117,116,76,105,115,116,79,110,78,111,100,101,115,0,71,101,116,73,110,112,117,116,76,105,115,116,79,110,78,111,100,101,115,86,101,108,111,99,105,116,121,0,71,101,116,73,110,112,117,116,76,105,115,116,79,110,86,101,114,116,105,99,101,115,0,73,110,112,117,116,67,114,101,97,116,101,0,110,111,100,97,108,32,118,101,99,116,111,114,32,105,115,32,101,105,116,104,101,114,32,110,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,32,111,114,32,110,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,43,49,32,108,111,110,103,46,32,70,105,101,108,100,32,112,114,111,118,105,100,101,100,32,40,0,41,32,105,115,32,0,32,108,111,110,103,0,99,111,117,108,100,32,110,111,116,32,114,101,99,111,103,110,105,122,101,32,110,97,116,117,114,101,32,111,102,32,118,101,99,116,111,114,32,102,114,111,109,32,99,111,100,101,32,0,101,108,101,109,101,110,116,32,118,101,99,116,111,114,32,105,115,32,101,105,116,104,101,114,32,110,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,32,111,114,32,110,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,43,49,32,108,111,110,103,46,32,70,105,101,108,100,32,112,114,111,118,105,100,101,100,32,40,0,67,97,110,110,111,116,32,97,100,100,32,105,110,112,117,116,32,102,111,114,32,118,101,99,116,111,114,32,116,121,112,101,32,0,32,40,110,111,116,32,115,117,112,112,111,114,116,101,100,41,0,109,105,103,114,97,116,105,111,110,95,115,116,121,108,101,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,73,115,70,108,111,97,116,105,110,103,0,77,97,114,115,104,97,108,108,69,108,101,109,101,110,116,0,69,114,114,111,114,58,32,109,105,103,114,97,116,105,111,110,32,115,104,111,117,108,100,32,98,101,32,65,103,103,114,101,115,115,105,118,101,44,32,83,111,102,116,44,32,83,117,98,101,108,101,109,101,110,116,44,32,67,111,110,116,97,99,116,32,111,114,32,71,114,111,117,110,100,105,110,103,79,110,108,121,0,77,105,103,114,97,116,101,71,114,111,117,110,100,105,110,103,76,105,110,101,0,80,111,115,105,116,105,118,101,68,101,103,114,101,101,68,97,121,0,82,101,115,117,108,116,73,110,116,101,114,112,111,108,97,116,105,111,110,0,78,111,32,101,105,103,101,110,32,118,97,108,117,101,32,102,111,117,110,100,0,83,116,114,101,115,115,77,97,120,80,114,105,110,99,105,112,97,108,67,114,101,97,116,101,73,110,112,117,116,0,82,101,115,117,108,116,84,111,77,97,116,114,105,120,0,82,101,115,117,108,116,84,111,86,101,99,116,111,114,0,105,110,116,101,114,112,111,108,97,116,105,111,110,32,0,115,109,98,32,99,111,114,101,58,32,73,110,105,116,105,97,108,105,122,105,110,103,32,103,114,105,100,10,0,84,105,109,101,58,32,116,61,0,32,121,114,47,0,32,121,114,0,32,83,116,101,112,58,32,0,116,111,116,97,108,32,115,121,115,116,101,109,32,109,97,115,115,32,110,111,116,32,99,111,110,115,101,114,118,101,100,32,105,110,32,77,66,32,102,117,110,99,116,105,111,110,0,84,40,101,110,100,41,126,61,84,95,98,111,116,116,111,109,0,84,114,97,110,115,102,111,114,109,73,110,118,83,116,105,102,102,110,101,115,115,77,97,116,114,105,120,67,111,111,114,100,0,84,114,97,110,115,102,111,114,109,76,111,97,100,86,101,99,116,111,114,67,111,111,114,100,0,84,114,97,110,115,102,111,114,109,83,111,108,117,116,105,111,110,67,111,111,114,100,0,84,114,97,110,115,102,111,114,109,83,116,105,102,102,110,101,115,115,77,97,116,114,105,120,67,111,111,114,100,0,54,85,112,100,97,116,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,46,46,47,46,47,69,108,101,109,101,110,116,115,47,69,108,101,109,101,110,116,46,104,0,82,101,115,101,116,76,101,118,101,108,115,101,116,70,114,111,109,83,101,103,109,101,110,116,108,105,115,116,0,87,114,105,116,101,76,101,118,101,108,115,101,116,83,101,103,109,101,110,116,0,67,97,108,118,105,110,103,82,97,116,101,68,101,118,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,69,108,101,109,101,110,116,72,111,111,107,46,99,112,112,0,51,83,101,103,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,83,101,103,46,99,112,112,0,102,114,111,110,116,32,105,115,32,110,111,116,32,108,111,99,97,116,101,100,32,111,110,32,101,108,101,109,101,110,116,32,101,100,103,101,0,54,83,101,103,82,101,102,0,49,49,69,108,101,109,101,110,116,72,111,111,107,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,46,46,47,46,47,69,108,101,109,101,110,116,115,47,83,101,103,46,104,0,86,97,108,117,101,80,49,79,110,71,97,117,115,115,0,83,101,116,67,117,114,114,101,110,116,67,111,110,102,105,103,117,114,97,116,105,111,110,0,82,101,115,101,116,72,111,111,107,115,0,82,101,100,117,99,101,77,97,116,114,105,99,101,115,0,78,117,109,98,101,114,111,102,78,111,100,101,115,86,101,108,111,99,105,116,121,0,78,117,109,98,101,114,111,102,78,111,100,101,115,80,114,101,115,115,117,114,101,0,78,111,114,109,97,108,84,111,112,0,78,111,114,109,97,108,66,97,115,101,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,84,101,110,115,111,114,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,86,101,108,111,99,105,116,121,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,80,114,101,115,115,117,114,101,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,68,101,114,105,118,97,116,105,118,101,115,86,101,108,111,99,105,116,121,0,78,101,119,71,97,117,115,115,84,111,112,0,78,101,119,71,97,117,115,115,66,97,115,101,0,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,84,111,112,0,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,66,97,115,101,0,71,101,116,86,101,114,116,105,99,101,115,67,111,111,114,100,105,110,97,116,101,115,84,111,112,0,71,101,116,86,101,114,116,105,99,101,115,67,111,111,114,100,105,110,97,116,101,115,66,97,115,101,0,71,101,116,69,108,101,109,101,110,116,84,121,112,101,0,69,108,101,109,101,110,116,83,105,122,101,115,0,67,111,110,102,105,103,117,114,101,0,65,100,100,73,110,112,117,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,83,101,103,82,101,102,46,99,112,112,0,52,84,114,105,97,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,84,114,105,97,46,99,112,112,0,108,105,115,116,32,111,102,32,118,101,114,116,105,99,101,115,32,111,110,32,98,101,100,58,32,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,50,32,118,101,114,116,105,99,101,115,32,111,110,32,98,101,100,0,69,100,103,101,79,110,66,97,115,101,73,110,100,101,120,0,78,111,116,32,73,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,115,116,114,101,115,115,32,116,101,110,115,111,114,32,99,97,108,99,117,108,97,116,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,109,101,115,104,32,111,102,32,116,121,112,101,32,0,44,32,101,120,116,114,117,100,101,32,109,101,115,104,32,111,114,32,99,97,108,108,32,67,111,109,112,117,116,101,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,84,101,110,115,111,114,0,69,100,103,101,79,110,66,97,115,101,73,110,100,105,99,101,115,0,108,105,115,116,32,111,102,32,118,101,114,116,105,99,101,115,32,111,110,32,115,117,114,102,97,99,101,58,32,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,50,32,118,101,114,116,105,99,101,115,32,111,110,32,115,117,114,102,97,99,101,0,69,100,103,101,79,110,83,117,114,102,97,99,101,73,110,100,105,99,101,115,0,87,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,105,99,101,32,118,101,114,116,105,99,101,115,32,105,110,32,84,114,105,97,58,58,71,101,116,76,101,118,101,108,115,101,116,73,110,116,101,114,115,101,99,116,105,111,110,33,0,71,101,116,76,101,118,101,108,115,101,116,73,110,116,101,114,115,101,99,116,105,111,110,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,0,84,119,111,32,101,100,103,101,115,32,111,110,32,98,101,100,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,46,46,46,0,72,97,115,69,100,103,101,79,110,66,97,115,101,0,84,119,111,32,101,100,103,101,115,32,111,110,32,115,117,114,102,97,99,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,46,46,46,0,72,97,115,69,100,103,101,79,110,83,117,114,102,97,99,101,0,78,97,78,32,102,111,117,110,100,32,105,110,32,118,101,99,116,111,114,0,73,110,102,32,102,111,117,110,100,32,105,110,32,118,101,99,116,111,114,0,84,119,111,32,101,100,103,101,115,32,111,110,32,98,111,117,110,100,97,114,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,46,46,46,0,73,115,79,110,66,97,115,101,0,73,115,79,110,83,117,114,102,97,99,101,0,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,115,101,103,109,101,110,116,32,119,105,116,104,32,105,100,32,0,32,100,111,101,115,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,101,108,101,109,101,110,116,32,119,105,116,104,32,105,100,58,0,83,112,97,119,110,84,111,112,69,108,101,109,101,110,116,0,116,104,105,99,107,110,101,115,115,32,105,110,112,117,116,32,110,101,101,100,101,100,32,116,111,32,99,111,109,112,117,116,101,32,103,105,97,32,100,101,102,108,101,99,116,105,111,110,33,0,109,97,110,116,108,101,32,118,105,115,99,111,115,105,116,121,32,105,110,112,117,116,32,110,101,101,100,101,100,32,116,111,32,99,111,109,112,117,116,101,32,103,105,97,32,100,101,102,108,101,99,116,105,111,110,33,0,108,105,116,104,111,115,112,104,101,114,101,32,116,104,105,99,107,110,101,115,115,32,105,110,112,117,116,32,110,101,101,100,101,100,32,116,111,32,99,111,109,112,117,116,101,32,103,105,97,32,100,101,102,108,101,99,116,105,111,110,33,0,100,101,108,116,97,32,116,104,105,99,107,110,101,115,115,32,105,110,112,117,116,32,110,101,101,100,101,100,32,116,111,32,99,111,109,112,117,116,101,32,115,101,97,32,108,101,118,101,108,32,114,105,115,101,33,0,55,84,114,105,97,82,101,102,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,46,46,47,46,47,69,108,101,109,101,110,116,115,47,84,114,105,97,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,84,114,105,97,82,101,102,46,99,112,112,0,71,101,116,83,101,103,109,101,110,116,78,111,100,97,108,70,117,110,99,116,105,111,110,115,0,69,100,103,101,32,105,110,100,101,120,32,112,114,111,118,105,100,101,100,32,40,0,41,32,105,115,32,110,111,116,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,50,0,78,111,100,101,79,110,69,100,103,101,73,110,100,105,99,101,115,0,53,84,101,116,114,97,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,84,101,116,114,97,46,99,112,112,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,51,32,118,101,114,116,105,99,101,115,32,111,110,32,98,101,100,0,70,97,99,101,79,110,66,97,115,101,73,110,100,105,99,101,115,0,70,97,99,101,79,110,70,114,111,110,116,73,110,100,105,99,101,115,0,70,97,99,101,79,110,83,117,114,102,97,99,101,73,110,100,105,99,101,115,0,56,84,101,116,114,97,82,101,102,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,46,46,47,46,47,69,108,101,109,101,110,116,115,47,84,101,116,114,97,46,104,0,86,101,114,116,105,99,97,108,83,101,103,109,101,110,116,73,110,100,105,99,101,115,0,86,101,114,116,101,120,67,111,110,110,101,99,116,105,118,105,116,121,0,86,97,108,117,101,80,49,68,101,114,105,118,97,116,105,118,101,115,79,110,71,97,117,115,115,0,85,112,100,97,116,101,80,111,116,101,110,116,105,97,108,85,110,103,114,111,117,110,100,105,110,103,0,85,112,100,97,116,101,67,111,110,115,116,114,97,105,110,116,115,69,120,116,114,117,100,101,70,114,111,109,84,111,112,0,85,112,100,97,116,101,67,111,110,115,116,114,97,105,110,116,115,69,120,116,114,117,100,101,70,114,111,109,66,97,115,101,0,84,105,109,101,65,100,97,112,116,0,83,116,97,98,105,108,105,122,97,116,105,111,110,80,97,114,97,109,101,116,101,114,0,83,101,116,84,101,109,112,111,114,97,114,121,69,108,101,109,101,110,116,84,121,112,101,0,80,111,116,101,110,116,105,97,108,85,110,103,114,111,117,110,100,105,110,103,0,78,111,100,97,108,86,97,108,117,101,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,80,50,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,80,49,68,101,114,105,118,97,116,105,118,101,115,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,80,49,0,78,111,100,97,108,70,117,110,99,116,105,111,110,115,77,73,78,73,68,101,114,105,118,97,116,105,118,101,115,0,78,101,119,71,97,117,115,115,76,105,110,101,0,77,105,110,69,100,103,101,76,101,110,103,116,104,0,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,76,105,110,101,0,73,115,90,101,114,111,76,101,118,101,108,115,101,116,0,73,115,78,111,100,101,79,110,83,104,101,108,102,70,114,111,109,70,108,97,103,115,0,71,101,116,85,112,112,101,114,69,108,101,109,101,110,116,0,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,79,110,101,68,111,102,0,71,101,116,78,111,100,101,0,71,101,116,73,99,101,102,114,111,110,116,67,111,111,114,100,105,110,97,116,101,115,0,71,101,116,71,114,111,117,110,100,101,100,80,97,114,116,0,71,101,116,66,97,115,97,108,69,108,101,109,101,110,116,0,70,83,67,111,110,116,97,99,116,77,105,103,114,97,116,105,111,110,0,67,111,109,112,117,116,101,83,116,114,101,115,115,84,101,110,115,111,114,0,67,111,109,112,117,116,101,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,84,101,110,115,111,114,0,67,97,108,118,105,110,103,82,97,116,101,76,101,118,101,114,109,97,110,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,84,101,116,114,97,82,101,102,46,99,112,112,0,71,101,116,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,70,97,99,101,0,53,80,101,110,116,97,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,80,101,110,116,97,46,99,112,112,0,65,100,100,66,97,115,97,108,73,110,112,117,116,0,78,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,65,118,101,114,97,103,101,79,110,116,111,80,97,114,116,105,116,105,111,110,0,67,111,109,112,117,116,101,66,97,115,97,108,83,116,114,101,115,115,0,67,111,110,116,114,111,108,73,110,112,117,116,83,101,116,71,114,97,100,105,101,110,116,0,32,105,115,32,110,111,116,32,97,32,67,111,110,116,114,111,108,73,110,112,117,116,0,67,111,110,116,114,111,108,84,111,86,101,99,116,111,114,115,0,82,101,115,112,111,110,115,101,32,116,121,112,101,32,0,69,108,101,109,101,110,116,82,101,115,112,111,110,115,101,0,69,114,114,111,114,46,32,80,114,111,98,108,101,109,32,119,105,116,104,32,112,111,114,116,105,111,110,32,111,102,32,103,114,111,117,110,100,101,100,32,101,108,101,109,101,110,116,58,32,118,97,108,117,101,32,115,104,111,117,108,100,32,98,101,32,98,101,116,119,101,101,110,32,48,32,97,110,100,32,49,0,71,101,116,71,114,111,117,110,100,101,100,80,111,114,116,105,111,110,0,78,111,32,105,110,112,117,116,32,111,102,32,116,121,112,101,32,0,32,102,111,117,110,100,32,105,110,32,116,114,105,97,0,78,111,100,101,32,112,114,111,118,105,100,101,100,32,110,111,116,32,102,111,117,110,100,32,97,109,111,110,103,32,101,108,101,109,101,110,116,32,110,111,100,101,115,0,71,101,116,78,111,100,101,73,110,100,101,120,0,71,101,116,86,101,99,116,111,114,70,114,111,109,67,111,110,116,114,111,108,73,110,112,117,116,115,0,105,110,112,117,116,32,0,73,110,112,117,116,67,111,110,116,114,111,108,85,112,100,97,116,101,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,105,110,112,117,116,32,119,105,116,104,32,101,110,117,109,32,0,73,110,112,117,116,68,101,112,116,104,65,118,101,114,97,103,101,65,116,66,97,115,101,0,111,98,106,101,99,116,32,0,73,110,112,117,116,69,120,116,114,117,100,101,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,111,108,100,32,105,110,112,117,116,32,119,105,116,104,32,101,110,117,109,58,32,0,73,110,112,117,116,83,99,97,108,101,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,79,110,101,68,111,102,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,79,110,101,68,111,102,67,111,108,108,97,112,115,101,100,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,86,101,99,116,111,114,0,116,121,112,101,32,0,41,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,70,108,111,119,32,101,113,117,97,116,105,111,110,32,97,112,112,114,111,120,105,109,97,116,105,111,110,0,82,101,115,101,116,70,83,66,97,115,97,108,66,111,117,110,100,97,114,121,67,111,110,100,105,116,105,111,110,0,83,101,116,67,111,110,116,114,111,108,73,110,112,117,116,115,70,114,111,109,86,101,99,116,111,114,0,83,112,97,119,110,66,97,115,97,108,69,108,101,109,101,110,116,0,85,112,100,97,116,101,0,67,97,115,101,32,110,111,116,32,99,111,118,101,114,101,100,0,90,101,114,111,76,101,118,101,108,115,101,116,67,111,111,114,100,105,110,97,116,101,115,0,71,73,65,32,100,101,102,108,101,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,33,0,71,105,97,68,101,102,108,101,99,116,105,111,110,0,56,80,101,110,116,97,82,101,102,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,46,46,47,46,47,69,108,101,109,101,110,116,115,47,80,101,110,116,97,46,104,0,71,101,116,65,114,101,97,51,68,0,79,99,101,97,110,65,114,101,97,0,79,99,101,97,110,65,118,101,114,97,103,101,0,83,101,97,108,101,118,101,108,114,105,115,101,78,111,110,69,117,115,116,97,116,105,99,0,83,101,97,108,101,118,101,108,114,105,115,101,69,117,115,116,97,116,105,99,0,84,101,110,115,111,114,73,110,116,101,114,112,111,108,97,116,105,111,110,0,78,101,119,71,97,117,115,115,0,77,105,115,102,105,116,65,114,101,97,0,73,115,70,97,99,101,79,110,66,111,117,110,100,97,114,121,0,71,101,116,76,101,118,101,108,115,101,116,80,111,115,105,116,105,118,101,80,97,114,116,0,71,101,116,76,101,118,101,108,67,111,111,114,100,105,110,97,116,101,115,0,67,111,109,112,117,116,101,83,105,103,109,97,78,78,0,67,104,97,114,97,99,116,101,114,105,115,116,105,99,76,101,110,103,116,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,69,108,101,109,101,110,116,115,47,80,101,110,116,97,82,101,102,46,99,112,112,0,66,97,115,97,108,78,111,100,101,73,110,100,105,99,101,115,0,78,117,109,98,101,114,111,102,78,111,100,101,115,0,71,101,116,78,111,100,97,108,70,117,110,99,116,105,111,110,115,0,110,101,103,97,116,105,118,101,32,106,97,99,111,98,105,97,110,32,100,101,116,101,114,109,105,110,97,110,116,33,0,71,101,116,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,0,71,101,116,78,111,100,97,108,70,117,110,99,116,105,111,110,115,68,101,114,105,118,97,116,105,118,101,115,82,101,102,101,114,101,110,99,101,0,71,101,116,81,117,97,100,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,0,71,101,116,83,101,103,109,101,110,116,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,0,71,101,116,84,114,105,97,74,97,99,111,98,105,97,110,68,101,116,101,114,109,105,110,97,110,116,0,80,114,101,115,115,117,114,101,73,110,116,101,114,112,111,108,97,116,105,111,110,0,83,117,114,102,97,99,101,78,111,100,101,73,110,100,105,99,101,115,0,86,101,108,111,99,105,116,121,73,110,116,101,114,112,111,108,97,116,105,111,110,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,105,110,112,117,116,32,119,105,116,104,32,101,110,117,109,32,116,121,112,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,73,110,112,117,116,115,46,99,112,112,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,105,110,112,117,116,32,119,105,116,104,32,101,110,117,109,58,32,0,68,117,112,108,105,99,97,116,101,73,110,112,117,116,0,56,83,101,103,73,110,112,117,116,0,32,32,32,83,101,103,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,83,101,103,73,110,112,117,116,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,83,101,103,73,110,112,117,116,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,73,110,112,117,116,46,104,0,57,84,114,105,97,73,110,112,117,116,0,32,32,32,84,114,105,97,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,84,114,105,97,73,110,112,117,116,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,84,114,105,97,73,110,112,117,116,46,104,0,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,32,40,73,110,112,117,116,32,105,115,32,0,57,66,111,111,108,73,110,112,117,116,0,32,32,32,66,111,111,108,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,66,111,111,108,73,110,112,117,116,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,66,111,111,108,73,110,112,117,116,46,104,0,67,111,110,115,116,114,97,105,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,98,111,111,108,101,97,110,115,0,77,105,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,98,111,111,108,101,97,110,115,0,77,97,120,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,98,111,111,108,101,97,110,115,0,73,110,102,105,110,105,116,121,78,111,114,109,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,98,111,111,108,101,97,110,115,0,56,73,110,116,73,110,112,117,116,0,32,32,32,73,110,116,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,73,110,116,73,110,112,117,116,46,99,112,112,0,73,110,116,73,110,112,117,116,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,32,105,110,32,112,97,114,97,108,108,101,108,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,73,110,116,73,110,112,117,116,46,104,0,77,105,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,105,110,116,101,103,101,114,115,0,77,97,120,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,105,110,116,101,103,101,114,115,0,73,110,102,105,110,105,116,121,78,111,114,109,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,105,110,116,101,103,101,114,115,0,49,49,68,111,117,98,108,101,73,110,112,117,116,0,32,32,32,68,111,117,98,108,101,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,68,111,117,98,108,101,73,110,112,117,116,46,99,112,112,0,68,111,117,98,108,101,32,105,110,112,117,116,32,111,102,32,101,110,117,109,32,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,98,111,111,108,101,97,110,0,110,111,116,32,115,117,112,112,111,114,116,101,32,121,101,116,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,68,111,117,98,108,101,73,110,112,117,116,46,104,0,49,54,68,111,117,98,108,101,65,114,114,97,121,73,110,112,117,116,0,32,32,32,68,111,117,98,108,101,65,114,114,97,121,73,110,112,117,116,32,0,32,83,105,122,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,68,111,117,98,108,101,65,114,114,97,121,73,110,112,117,116,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,68,111,117,98,108,101,65,114,114,97,121,73,110,112,117,116,46,104,0,83,112,97,119,110,84,114,105,97,73,110,112,117,116,0,49,50,68,97,116,97,115,101,116,73,110,112,117,116,0,68,97,116,97,115,101,116,73,110,112,117,116,58,10,0,32,32,32,110,117,109,105,100,115,58,0,32,32,32,105,110,112,117,116,115,58,32,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,68,97,116,97,115,101,116,73,110,112,117,116,46,99,112,112,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,105,110,112,117,116,32,111,102,32,105,100,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,68,97,116,97,115,101,116,73,110,112,117,116,46,104,0,71,101,116,82,101,115,117,108,116,65,114,114,97,121,83,105,122,101,0,71,101,116,82,101,115,117,108,116,78,117,109,98,101,114,79,102,78,111,100,101,115,0,71,101,116,82,101,115,117,108,116,73,110,116,101,114,112,111,108,97,116,105,111,110,0,77,105,110,0,71,101,116,73,110,112,117,116,65,118,101,114,97,103,101,0,71,101,116,73,110,112,117,116,68,101,114,105,118,97,116,105,118,101,86,97,108,117,101,0,54,77,97,116,105,99,101,0,77,97,116,101,114,105,97,108,32,116,121,112,101,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,77,97,116,105,99,101,46,99,112,112,0,77,97,116,105,99,101,58,10,0,78,101,103,97,116,105,118,101,32,118,105,115,99,111,115,105,116,121,0,73,110,112,117,116,32,109,105,115,115,105,110,103,0,56,77,97,116,101,114,105,97,108,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,46,47,77,97,116,105,99,101,46,104,0,54,77,97,116,112,97,114,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,111,95,119,97,116,101,114,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,111,95,102,114,101,115,104,119,97,116,101,114,0,109,100,46,109,97,116,101,114,105,97,108,115,46,109,117,95,119,97,116,101,114,0,109,100,46,109,97,116,101,114,105,97],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+68072);allocate([108,115,46,116,104,101,114,109,97,108,99,111,110,100,117,99,116,105,118,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,116,101,109,112,101,114,97,116,101,105,99,101,99,111,110,100,117,99,116,105,118,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,108,97,116,101,110,116,104,101,97,116,0,109,100,46,109,97,116,101,114,105,97,108,115,46,98,101,116,97,0,109,100,46,109,97,116,101,114,105,97,108,115,46,109,101,108,116,105,110,103,112,111,105,110,116,0,109,100,46,109,97,116,101,114,105,97,108,115,46,109,105,120,101,100,95,108,97,121,101,114,95,99,97,112,97,99,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,116,104,101,114,109,97,108,95,101,120,99,104,97,110,103,101,95,118,101,108,111,99,105,116,121,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,77,97,116,112,97,114,46,99,112,112,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,95,99,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,95,112,111,114,111,115,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,95,116,104,105,99,107,110,101,115,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,119,97,116,101,114,95,99,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,99,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,112,111,114,111,115,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,105,110,105,116,105,97,108,95,116,104,105,99,107,110,101,115,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,99,111,108,97,112,115,101,95,116,104,105,99,107,110,101,115,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,109,97,120,95,116,104,105,99,107,110,101,115,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,99,111,110,100,117,99,116,105,118,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,108,105,116,104,111,115,112,104,101,114,101,95,115,104,101,97,114,95,109,111,100,117,108,117,115,0,109,100,46,109,97,116,101,114,105,97,108,115,46,108,105,116,104,111,115,112,104,101,114,101,95,100,101,110,115,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,109,97,110,116,108,101,95,115,104,101,97,114,95,109,111,100,117,108,117,115,0,109,100,46,109,97,116,101,114,105,97,108,115,46,109,97,110,116,108,101,95,100,101,110,115,105,116,121,0,109,100,46,109,97,116,101,114,105,97,108,115,46,101,97,114,116,104,95,100,101,110,115,105,116,121,0,77,97,116,101,114,105,97,108,32,0,77,97,116,112,97,114,58,10,0,32,32,32,114,104,111,95,105,99,101,58,32,0,32,32,32,114,104,111,95,119,97,116,101,114,58,32,0,32,32,32,114,104,111,95,102,114,101,115,104,119,97,116,101,114,58,32,0,32,32,32,109,117,95,119,97,116,101,114,58,32,0,32,32,32,104,101,97,116,99,97,112,97,99,105,116,121,58,32,0,32,32,32,116,104,101,114,109,97,108,99,111,110,100,117,99,116,105,118,105,116,121,58,32,0,32,32,32,116,101,109,112,101,114,97,116,101,105,99,101,99,111,110,100,117,99,116,105,118,105,116,121,58,32,0,32,32,32,108,97,116,101,110,116,104,101,97,116,58,32,0,32,32,32,98,101,116,97,58,32,0,32,32,32,109,101,108,116,105,110,103,112,111,105,110,116,58,32,0,32,32,32,114,101,102,101,114,101,110,99,101,116,101,109,112,101,114,97,116,117,114,101,58,32,0,32,32,32,109,105,120,101,100,95,108,97,121,101,114,95,99,97,112,97,99,105,116,121,58,32,0,32,32,32,116,104,101,114,109,97,108,95,101,120,99,104,97,110,103,101,95,118,101,108,111,99,105,116,121,58,32,0,32,32,32,103,58,32,0,32,32,32,100,101,115,102,97,99,58,32,0,32,32,32,114,108,97,112,115,58,32,0,32,32,32,114,108,97,112,115,108,103,109,58,32,0,32,32,32,100,112,101,114,109,105,108,58,32,0,71,101,116,77,97,116,101,114,105,97,108,80,97,114,97,109,101,116,101,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,46,46,47,46,47,77,97,116,101,114,105,97,108,115,47,77,97,116,112,97,114,46,104,0,86,105,115,99,111,115,105,116,121,83,83,65,0,86,105,115,99,111,115,105,116,121,72,79,0,86,105,115,99,111,115,105,116,121,70,83,68,101,114,105,118,97,116,105,118,101,69,112,115,83,113,117,97,114,101,0,86,105,115,99,111,115,105,116,121,70,83,0,99,111,112,121,50,0,57,83,112,99,83,116,97,116,105,99,0,83,112,99,83,116,97,116,105,99,58,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,83,112,99,83,116,97,116,105,99,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,46,46,47,46,47,67,111,110,115,116,114,97,105,110,116,115,47,83,112,99,83,116,97,116,105,99,46,104,0,49,48,83,112,99,68,121,110,97,109,105,99,0,83,112,99,68,121,110,97,109,105,99,58,10,0,32,32,32,115,105,100,58,32,0,32,32,32,110,111,100,101,105,100,58,32,0,32,32,32,100,111,102,58,32,0,32,32,32,105,115,115,101,116,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,83,112,99,68,121,110,97,109,105,99,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,67,111,110,115,116,114,97,105,110,116,115,47,46,46,47,46,47,67,111,110,115,116,114,97,105,110,116,115,47,83,112,99,68,121,110,97,109,105,99,46,104,0,80,101,110,97,108,116,121,68,111,102,65,110,100,86,97,108,117,101,0,55,80,101,110,112,97,105,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,80,101,110,112,97,105,114,46,99,112,112,0,80,101,110,112,97,105,114,58,10,0,52,76,111,97,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,46,46,47,46,47,76,111,97,100,115,47,80,101,110,112,97,105,114,46,104,0,55,80,101,110,103,114,105,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,80,101,110,103,114,105,100,46,99,112,112,0,80,101,110,103,114,105,100,58,10,0,32,32,32,97,99,116,105,118,101,32,0,32,32,32,122,105,103,122,97,103,95,99,111,117,110,116,101,114,32,0,97,110,97,108,121,115,105,115,58,32,0,67,111,110,115,116,114,97,105,110,116,65,99,116,105,118,97,116,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,46,46,47,46,47,76,111,97,100,115,47,80,101,110,103,114,105,100,46,104,0,49,51,78,117,109,101,114,105,99,97,108,102,108,117,120,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,78,117,109,101,114,105,99,97,108,102,108,117,120,46,99,112,112,0,78,117,109,101,114,105,99,97,108,102,108,117,120,58,10,0,32,32,32,102,108,117,120,95,116,121,112,101,58,32,0,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,67,114,101,97,116,101,75,77,97,116,114,105,120,77,97,115,115,116,114,97,110,115,112,111,114,116,0,67,114,101,97,116,101,75,77,97,116,114,105,120,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,0,67,114,101,97,116,101,75,77,97,116,114,105,120,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,0,67,114,101,97,116,101,80,86,101,99,116,111,114,77,97,115,115,116,114,97,110,115,112,111,114,116,0,67,114,101,97,116,101,80,86,101,99,116,111,114,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,0,78,117,109,101,114,105,99,97,108,102,108,117,120,32,116,121,112,101,32,0,71,101,116,78,111,100,101,115,76,105,100,76,105,115,116,0,71,101,116,78,111,100,101,115,83,105,100,76,105,115,116,0,71,101,116,78,117,109,98,101,114,79,102,78,111,100,101,115,0,67,97,110,110,111,116,32,119,101,97,107,108,121,32,97,112,112,108,121,32,99,111,110,115,116,114,97,105,110,116,32,98,101,99,97,117,115,101,32,78,97,78,32,119,97,115,32,112,114,111,118,105,100,101,100,0,67,114,101,97,116,101,80,86,101,99,116,111,114,77,97,115,115,116,114,97,110,115,112,111,114,116,66,111,117,110,100,97,114,121,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,46,46,47,46,47,76,111,97,100,115,47,78,117,109,101,114,105,99,97,108,102,108,117,120,46,104,0,73,110,112,117,116,32,69,108,101,109,101,110,116,32,77,97,116,114,105,120,32,105,115,32,97,32,78,85,76,76,32,112,111,105,110,116,101,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,109,97,116,114,105,120,47,69,108,101,109,101,110,116,77,97,116,114,105,120,46,99,112,112,0,69,108,101,109,101,110,116,77,97,116,114,105,120,0,109,101,114,103,105,110,103,32,50,32,110,111,110,32,100,111,102,115,121,109,109,101,116,114,105,99,97,108,32,109,97,116,114,105,99,101,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,110,111,110,32,100,111,102,115,121,109,109,101,116,114,105,99,97,108,32,109,97,116,114,105,120,32,65,100,100,84,111,71,108,111,98,97,108,32,114,111,117,116,105,110,101,32,110,111,116,32,115,117,112,112,111,114,116,32,121,101,116,33,0,65,100,100,84,111,71,108,111,98,97,108,0,65,100,100,68,105,97,103,111,110,97,108,84,111,71,108,111,98,97,108,0,76,117,109,112,0,84,114,97,110,115,112,111,115,101,0,84,119,111,32,105,110,112,117,116,32,101,108,101,109,101,110,116,32,109,97,116,114,105,99,101,115,32,97,114,101,32,78,85,76,76,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,109,97,116,114,105,120,47,69,108,101,109,101,110,116,86,101,99,116,111,114,46,99,112,112,0,69,108,101,109,101,110,116,86,101,99,116,111,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,109,97,116,114,105,120,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,80,97,114,97,109,101,116,101,114,115,46,99,112,112,0,32,110,111,116,32,115,101,116,0,70,105,110,100,80,97,114,97,109,0,99,111,117,108,100,32,102,105,110,100,32,110,101,105,116,104,101,114,32,97,32,100,101,102,97,117,108,116,32,97,110,97,108,121,115,105,115,32,110,111,114,32,97,110,97,108,121,115,105,115,32,0,79,112,116,105,111,110,115,70,114,111,109,65,110,97,108,121,115,105,115,0,57,66,111,111,108,80,97,114,97,109,0,32,32,32,66,111,111,108,80,97,114,97,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,66,111,111,108,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,66,111,111,108,80,97,114,97,109,46,104,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,73,115,115,109,80,68,111,117,98,108,101,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,105,110,116,0,56,73,110,116,80,97,114,97,109,0,32,32,32,73,110,116,80,97,114,97,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,73,110,116,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,73,110,116,80,97,114,97,109,46,104,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,105,110,116,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,73,115,115,109,68,111,117,98,108,101,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,98,111,111,108,0,49,49,73,110,116,86,101,99,80,97,114,97,109,0,73,110,116,86,101,99,80,97,114,97,109,58,10,0,32,32,32,118,101,99,116,111,114,32,115,105,122,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,73,110,116,86,101,99,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,73,110,116,86,101,99,80,97,114,97,109,46,104,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,32,97,114,114,97,121,32,40,109,97,121,98,101,32,105,110,32,115,101,114,105,97,108,63,41,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,109,97,116,114,105,120,0,49,49,73,110,116,77,97,116,80,97,114,97,109,0,73,110,116,77,97,116,80,97,114,97,109,58,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,73,110,116,77,97,116,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,73,110,116,77,97,116,80,97,114,97,109,46,104,0,49,49,68,111,117,98,108,101,80,97,114,97,109,0,32,32,32,68,111,117,98,108,101,80,97,114,97,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,68,111,117,98,108,101,80,97,114,97,109,46,99,112,112,0,68,111,117,98,108,101,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,105,110,116,101,103,101,114,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,98,111,111,108,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,97,114,114,97,121,32,111,102,32,105,110,116,101,103,101,114,115,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,97,114,114,97,121,32,111,102,32,73,115,115,109,68,111,117,98,108,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,68,111,117,98,108,101,80,97,114,97,109,46,104,0,57,70,105,108,101,80,97,114,97,109,0,32,32,32,70,105,108,101,80,97,114,97,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,70,105,108,101,80,97,114,97,109,46,99,112,112,0,70,105,108,101,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,70,105,108,101,80,97,114,97,109,46,104,0,49,54,83,116,114,105,110,103,65,114,114,97,121,80,97,114,97,109,0,32,32,32,83,116,114,105,110,103,65,114,114,97,121,80,97,114,97,109,32,0,32,123,0,125,10,0,32,39,0,39,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,83,116,114,105,110,103,65,114,114,97,121,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,83,116,114,105,110,103,65,114,114,97,121,80,97,114,97,109,46,104,0,86,101,99,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,49,52,68,111,117,98,108,101,77,97,116,80,97,114,97,109,0,68,111,117,98,108,101,77,97,116,80,97,114,97,109,58,10,0,32,32,32,109,97,116,114,105,120,32,115,105,122,101,58,32,0,120,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,68,111,117,98,108,101,77,97,116,80,97,114,97,109,46,99,112,112,0,68,111,117,98,108,101,77,97,116,32,111,102,32,101,110,117,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,68,111,117,98,108,101,77,97,116,80,97,114,97,109,46,104,0,49,57,68,111,117,98,108,101,77,97,116,65,114,114,97,121,80,97,114,97,109,0,68,111,117,98,108,101,77,97,116,65,114,114,97,121,80,97,114,97,109,58,10,0,32,32,32,97,114,114,97,121,32,115,105,122,101,58,32,0,32,32,32,97,114,114,97,121,32,112,111,105,110,116,101,114,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,68,111,117,98,108,101,77,97,116,65,114,114,97,121,80,97,114,97,109,46,99,112,112,0,41,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,70,73,76,69,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,68,111,117,98,108,101,77,97,116,65,114,114,97,121,80,97,114,97,109,46,104,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,77,97,116,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,86,101,99,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,105,110,116,32,109,97,116,32,97,114,114,97,121,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,105,110,116,32,118,101,99,32,97,114,114,97,121,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,73,115,115,109,68,111,117,98,108,101,32,109,97,116,32,97,114,114,97,121,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,73,115,115,109,68,111,117,98,108,101,32,118,101,99,32,97,114,114,97,121,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,116,114,105,110,103,32,97,114,114,97,121,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,116,114,105,110,103,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,99,97,108,97,114,0,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,105,110,116,101,103,101,114,0,99,97,110,110,111,116,32,104,111,108,100,32,97,32,98,111,111,108,101,97,110,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,70,73,76,69,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,77,97,116,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,86,101,99,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,32,97,114,114,97,121,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,32,97,114,114,97,121,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,97,114,114,97,121,32,111,102,32,105,110,116,101,103,101,114,115,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,105,110,116,101,103,101,114,0,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,98,111,111,108,0,49,52,68,111,117,98,108,101,86,101,99,80,97,114,97,109,0,32,32,32,68,111,117,98,108,101,86,101,99,80,97,114,97,109,32,0,32,115,105,122,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,68,111,117,98,108,101,86,101,99,80,97,114,97,109,46,99,112,112,0,68,111,117,98,108,101,86,101,99,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,97,114,114,97,121,32,111,102,32,105,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,68,111,117,98,108,101,86,101,99,80,97,114,97,109,46,104,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,73,115,115,109,68,111,117,98,108,101,32,109,97,116,32,97,114,114,97,121,0,49,49,83,116,114,105,110,103,80,97,114,97,109,0,32,32,32,83,116,114,105,110,103,80,97,114,97,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,83,116,114,105,110,103,80,97,114,97,109,46,99,112,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,83,116,114,105,110,103,80,97,114,97,109,46,104,0,66,111,111,108,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,70,73,76,69,0,49,52,84,114,97,110,115,105,101,110,116,80,97,114,97,109,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,84,114,97,110,115,105,101,110,116,80,97,114,97,109,58,10,0,32,32,32,101,110,117,109,58,32,0,32,32,32,115,105,122,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,84,114,97,110,115,105,101,110,116,80,97,114,97,109,46,99,112,112,0,80,97,114,97,109,101,116,101,114,32,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,97,114,114,97,121,32,111,102,32,109,97,116,114,105,99,101,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,84,114,97,110,115,105,101,110,116,80,97,114,97,109,46,104,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,70,73,76,69,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,105,110,116,32,109,97,116,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,105,110,116,32,118,101,99,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,73,115,115,109,68,111,117,98,108,101,32,118,101,99,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,99,97,108,97,114,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,105,110,116,101,103,101,114,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,98,111,111,108,101,97,110,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,68,97,116,97,83,101,116,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,70,73,76,69,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,109,97,116,114,105,120,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,97,114,114,97,121,32,111,102,32,105,110,116,101,103,101,114,115,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,97,114,114,97,121,32,111,102,32,105,110,116,101,103,101,114,115,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,110,32,105,110,116,101,103,101,114,0,49,50,68,97,116,97,83,101,116,80,97,114,97,109,0,32,32,32,68,97,116,97,83,101,116,80,97,114,97,109,32,0,32,45,45,45,45,45,32,98,101,103,105,110,10,0,32,45,45,45,45,45,32,101,110,100,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,68,97,116,97,83,101,116,80,97,114,97,109,46,99,112,112,0,68,97,116,97,83,101,116,32,112,97,114,97,109,32,111,102,32,101,110,117,109,32,0,41,32,99,97,110,110,111,116,32,104,111,108,100,32,97,110,32,97,114,114,97,121,32,111,102,32,109,97,116,114,105,99,101,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,97,114,97,109,115,47,46,46,47,46,47,80,97,114,97,109,115,47,68,97,116,97,83,101,116,80,97,114,97,109,46,104,0,83,101,116,86,97,108,117,101,0,80,97,114,97,109,32,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,102,105,108,101,32,112,111,105,110,116,101,114,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,77,97,116,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,86,101,99,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,105,110,116,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,73,115,115,109,68,111,117,98,108,101,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,116,114,105,110,103,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,104,111,108,100,32,97,32,115,116,114,105,110,103,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,102,105,108,101,32,112,111,105,110,116,101,114,0,71,101,116,80,97,114,97,109,101,116,101,114,86,97,108,117,101,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,77,97,116,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,86,101,99,0,41,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,109,97,116,114,105,120,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,32,97,114,114,97,121,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,32,102,111,114,32,97,32,103,105,118,101,110,32,116,105,109,101,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,73,115,115,109,68,111,117,98,108,101,0,32,99,97,110,110,111,116,32,114,101,116,117,114,110,32,97,32,98,111,111,108,0,56,80,114,111,102,105,108,101,114,0,80,114,111,102,105,108,101,114,58,10,0,32,32,32,116,105,109,101,32,116,97,103,115,58,32,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,80,114,111,102,105,108,101,114,46,99,112,112,0,84,97,103,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,0,84,97,103,0,84,97,103,32,110,111,116,32,115,101,116,0,68,101,108,116,97,84,105,109,101,0,68,101,108,116,97,70,108,111,112,115,0,77,101,109,111,114,121,0,77,97,116,114,105,120,32,65,32,97,110,100,32,66,32,105,110,110,101,114,32,118,101,99,116,111,114,115,32,110,111,116,32,101,113,117,97,108,32,115,105,122,101,46,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,77,97,116,114,105,120,47,77,97,116,114,105,120,85,116,105,108,115,46,99,112,112,0,84,114,105,112,108,101,77,117,108,116,105,112,108,121,0,77,97,116,114,105,120,32,66,32,97,110,100,32,67,32,105,110,110,101,114,32,118,101,99,116,111,114,115,32,110,111,116,32,101,113,117,97,108,32,115,105,122,101,46,0,77,97,116,114,105,120,32,65,32,97,110,100,32,66,32,105,110,110,101,114,32,118,101,99,116,111,114,115,32,110,111,116,32,101,113,117,97,108,32,115,105,122,101,0,77,97,116,114,105,120,77,117,108,116,105,112,108,121,0,78,111,32,114,105,103,104,116,45,104,97,110,100,32,115,105,100,101,32,102,111,114,32,110,118,101,99,61,0,77,97,116,114,105,120,73,110,118,101,114,115,101,0,80,105,118,111,116,32,0,32,108,101,115,115,32,116,104,97,110,32,109,97,99,104,105,110,101,32,101,112,115,105,108,111,110,0,68,101,116,101,114,109,105,110,97,110,116,32,115,109,97,108,108,101,114,32,116,104,97,110,32,109,97,99,104,105,110,101,32,101,112,115,105,108,111,110,0,77,97,116,114,105,120,50,120,50,73,110,118,101,114,116,0,77,97,116,114,105,120,51,120,51,73,110,118,101,114,116,0,77,97,116,114,105,120,52,120,52,73,110,118,101,114,116,0,84,104,105,115,32,102,117,110,99,116,105,111,110,32,115,104,111,117,108,100,32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32,98,121,32,99,112,117,32,48,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,105,111,47,68,105,115,107,47,112,102,111,112,101,110,46,99,112,112,0,112,102,111,112,101,110,48,0,99,111,117,108,100,32,110,111,116,32,111,112,101,110,32,102,105,108,101,32,0,32,102,111,114,32,98,105,110,97,114,121,32,114,101,97,100,105,110,103,32,111,114,32,119,114,105,116,105,110,103,0,112,102,111,112,101,110,0,99,111,117,108,100,32,110,111,116,32,99,108,111,115,101,32,102,105,108,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,105,111,47,68,105,115,107,47,112,102,99,108,111,115,101,46,99,112,112,0,112,102,99,108,111,115,101,0,67,97,110,110,111,116,32,114,101,116,117,114,110,32,99,111,109,109,32,105,110,32,115,101,114,105,97,108,32,109,111,100,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,105,111,47,67,111,109,109,47,73,115,115,109,67,111,109,109,46,99,112,112,0,71,101,116,67,111,109,109,0,117,110,107,110,111,119,110,0,80,97,114,97,109,101,116,101,114,115,83,84,65,82,84,0,70,101,109,77,111,100,101,108,0,70,101,109,77,111,100,101,108,67,111,109,109,0,87,111,114,108,100,67,111,109,109,0,73,99,101,99,97,112,84,111,69,97,114,116,104,67,111,109,109,0,78,117,109,77,111,100,101,108,115,0,77,111,100,101,108,73,100,0,69,97,114,116,104,73,100,0,65,117,116,111,100,105,102,102,73,115,97,117,116,111,100,105,102,102,0,65,117,116,111,100,105,102,102,78,117,109,68,101,112,101,110,100,101,110,116,115,0,65,117,116,111,100,105,102,102,78,117,109,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,115,0,65,117,116,111,100,105,102,102,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,78,97,109,101,115,0,65,117,116,111,100,105,102,102,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,84,121,112,101,115,0,65,117,116,111,100,105,102,102,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,73,110,100,105,99,101,115,0,65,117,116,111,100,105,102,102,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,115,0,65,117,116,111,100,105,102,102,78,117,109,73,110,100,101,112,101,110,100,101,110,116,115,0,65,117,116,111,100,105,102,102,78,117,109,73,110,100,101,112,101,110,100,101,110,116,79,98,106,101,99,116,115,0,65,117,116,111,100,105,102,102,73,110,100,101,112,101,110,100,101,110,116,79,98,106,101,99,116,78,97,109,101,115,0,65,117,116,111,100,105,102,102,73,110,100,101,112,101,110,100,101,110,116,79,98,106,101,99,116,84,121,112,101,115,0,65,117,116,111,100,105,102,102,73,110,100,101,112,101,110,100,101,110,116,79,98,106,101,99,116,115,0,65,117,116,111,100,105,102,102,74,97,99,111,98,105,97,110,0,65,117,116,111,100,105,102,102,88,112,0,65,117,116,111,100,105,102,102,68,114,105,118,101,114,0,65,117,116,111,100,105,102,102,70,111,115,70,111,114,119,97,114,100,73,110,100,101,120,0,65,117,116,111,100,105,102,102,70,111,118,70,111,114,119,97,114,100,73,110,100,105,99,101,115,0,65,117,116,111,100,105,102,102,70,111,115,82,101,118,101,114,115,101,73,110,100,101,120,0,65,117,116,111,100,105,102,102,77,97,115,115,70,108,117,120,83,101,103,109,101,110,116,115,80,114,101,115,101,110,116,0,65,117,116,111,100,105,102,102,75,101,101,112,0,65,117,116,111,100,105,102,102,79,98,117,102,115,105,122,101,0,65,117,116,111,100,105,102,102,76,98,117,102,115,105,122,101,0,65,117,116,111,100,105,102,102,67,98,117,102,115,105,122,101,0,65,117,116,111,100,105,102,102,84,98,117,102,115,105,122,101,0,65,117,116,111,100,105,102,102,71,99,84,114,105,103,103,101,114,82,97,116,105,111,0,65,117,116,111,100,105,102,102,71,99,84,114,105,103,103,101,114,77,97,120,83,105,122,101,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,112,99,116,104,105,99,107,110,101,115,115,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,116,97,98,105,108,105,122,97,116,105,111,110,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,84,104,105,99,107,101,110,105,110,103,82,97,116,101,0,66,97,115,97,108,102,111,114,99,105,110,103,115,0,66,97,115,97,108,102,111,114,99,105,110,103,115,71,101,111,116,104,101,114,109,97,108,102,108,117,120,0,66,97,115,97,108,102,111,114,99,105,110,103,115,71,114,111,117,110,100,101,100,105,99,101,77,101,108,116,105,110,103,82,97,116,101,0,66,97,115,97,108,102,111,114,99,105,110,103,115,70,108,111,97,116,105,110,103,105,99,101,77,101,108,116,105,110,103,82,97,116,101,0,66,97,115,97,108,102,111,114,99,105,110,103,115,68,101,101,112,119,97,116,101,114,77,101,108,116,105,110,103,82,97,116,101,0,66,97,115,97,108,102,111,114,99,105,110,103,115,68,101,101,112,119,97,116,101,114,69,108,101,118,97,116,105,111,110,0,66,97,115,97,108,102],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+78312);allocate([111,114,99,105,110,103,115,85,112,112,101,114,119,97,116,101,114,69,108,101,118,97,116,105,111,110,0,66,97,115,97,108,102,111,114,99,105,110,103,115,77,101,108,116,114,97,116,101,70,97,99,116,111,114,0,66,97,115,97,108,102,111,114,99,105,110,103,115,84,104,114,101,115,104,111,108,100,84,104,105,99,107,110,101,115,115,0,66,97,115,97,108,102,111,114,99,105,110,103,115,85,112,112,101,114,100,101,112,116,104,77,101,108,116,0,66,97,115,97,108,102,111,114,99,105,110,103,115,77,97,110,116,108,101,99,111,110,100,117,99,116,105,118,105,116,121,0,66,97,115,97,108,102,111,114,99,105,110,103,115,78,117,115,115,101,108,116,0,66,97,115,97,108,102,111,114,99,105,110,103,115,68,116,98,103,0,66,97,115,97,108,102,111,114,99,105,110,103,115,80,108,117,109,101,114,97,100,105,117,115,0,66,97,115,97,108,102,111,114,99,105,110,103,115,84,111,112,112,108,117,109,101,100,101,112,116,104,0,66,97,115,97,108,102,111,114,99,105,110,103,115,66,111,116,116,111,109,112,108,117,109,101,100,101,112,116,104,0,66,97,115,97,108,102,111,114,99,105,110,103,115,80,108,117,109,101,120,0,66,97,115,97,108,102,111,114,99,105,110,103,115,80,108,117,109,101,121,0,66,97,115,97,108,102,111,114,99,105,110,103,115,67,114,117,115,116,116,104,105,99,107,110,101,115,115,0,66,97,115,97,108,102,111,114,99,105,110,103,115,85,112,112,101,114,99,114,117,115,116,116,104,105,99,107,110,101,115,115,0,66,97,115,97,108,102,111,114,99,105,110,103,115,85,112,112,101,114,99,114,117,115,116,104,101,97,116,0,66,97,115,97,108,102,111,114,99,105,110,103,115,76,111,119,101,114,99,114,117,115,116,104,101,97,116,0,70,108,111,97,116,105,110,103,77,101,108,116,82,97,116,101,0,76,105,110,101,97,114,70,108,111,97,116,105,110,103,77,101,108,116,82,97,116,101,0,77,105,115,109,105,112,70,108,111,97,116,105,110,103,77,101,108,116,82,97,116,101,0,77,97,110,116,108,101,80,108,117,109,101,71,101,111,116,104,101,114,109,97,108,70,108,117,120,0,66,101,100,0,66,97,115,101,0,67,111,110,115,116,97,110,116,115,71,0,67,111,110,115,116,97,110,116,115,82,101,102,101,114,101,110,99,101,116,101,109,112,101,114,97,116,117,114,101,0,67,111,110,115,116,97,110,116,115,89,116,115,0,68,101,112,101,110,100,101,110,116,79,98,106,101,99,116,0,83,116,114,101,115,115,98,97,108,97,110,99,101,65,98,115,116,111,108,0,83,116,114,101,115,115,98,97,108,97,110,99,101,67,111,110,118,101,114,103,101,110,99,101,78,117,109,83,116,101,112,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,73,115,110,101,119,116,111,110,0,83,116,114,101,115,115,98,97,108,97,110,99,101,77,97,120,105,116,101,114,0,83,116,114,101,115,115,98,97,108,97,110,99,101,80,101,110,97,108,116,121,70,97,99,116,111,114,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,101,102,101,114,101,110,116,105,97,108,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,101,108,116,111,108,0,83,116,114,101,115,115,98,97,108,97,110,99,101,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,101,115,116,111,108,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,105,102,116,80,101,110,97,108,116,121,76,111,99,107,0,83,116,114,101,115,115,98,97,108,97,110,99,101,82,105,102,116,80,101,110,97,108,116,121,84,104,114,101,115,104,111,108,100,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,104,101,108,102,68,97,109,112,101,110,105,110,103,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,112,99,118,120,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,112,99,118,121,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,112,99,118,122,0,83,116,114,101,115,115,98,97,108,97,110,99,101,70,83,114,101,99,111,110,100,105,116,105,111,110,105,110,103,0,83,116,114,101,115,115,98,97,108,97,110,99,101,86,101,114,116,101,120,80,97,105,114,105,110,103,0,83,116,114,101,115,115,98,97,108,97,110,99,101,86,105,115,99,111,115,105,116,121,79,118,101,114,115,104,111,111,116,0,76,111,97,100,105,110,103,102,111,114,99,101,88,0,76,111,97,100,105,110,103,102,111,114,99,101,89,0,76,111,97,100,105,110,103,102,111,114,99,101,90,0,70,108,111,119,101,113,117,97,116,105,111,110,66,111,114,100,101,114,83,83,65,0,70,108,111,119,101,113,117,97,116,105,111,110,66,111,114,100,101,114,72,79,0,70,108,111,119,101,113,117,97,116,105,111,110,66,111,114,100,101,114,70,83,0,70,108,111,119,101,113,117,97,116,105,111,110,69,108,101,109,101,110,116,69,113,117,97,116,105,111,110,0,70,108,111,119,101,113,117,97,116,105,111,110,73,115,83,73,65,0,70,108,111,119,101,113,117,97,116,105,111,110,73,115,83,83,65,0,70,108,111,119,101,113,117,97,116,105,111,110,73,115,76,49,76,50,0,70,108,111,119,101,113,117,97,116,105,111,110,73,115,72,79,0,70,108,111,119,101,113,117,97,116,105,111,110,73,115,70,83,0,70,108,111,119,101,113,117,97,116,105,111,110,70,101,83,83,65,0,70,108,111,119,101,113,117,97,116,105,111,110,70,101,72,79,0,70,108,111,119,101,113,117,97,116,105,111,110,70,101,70,83,0,70,108,111,119,101,113,117,97,116,105,111,110,86,101,114,116,101,120,69,113,117,97,116,105,111,110,0,70,114,105,99,116,105,111,110,65,115,0,70,114,105,99,116,105,111,110,67,111,101,102,102,105,99,105,101,110,116,0,70,114,105,99,116,105,111,110,67,111,101,102,102,105,99,105,101,110,116,99,111,117,108,111,109,98,0,70,114,105,99,116,105,111,110,80,0,70,114,105,99,116,105,111,110,81,0,70,114,105,99,116,105,111,110,77,0,70,114,105,99,116,105,111,110,67,0,70,114,105,99,116,105,111,110,76,97,119,0,70,114,105,99,116,105,111,110,71,97,109,109,97,0,70,114,105,99,116,105,111,110,70,0,70,114,105,99,116,105,111,110,87,97,116,101,114,76,97,121,101,114,0,70,114,105,99,116,105,111,110,69,102,102,101,99,116,105,118,101,80,114,101,115,115,117,114,101,0,70,114,105,99,116,105,111,110,67,111,117,112,108,105,110,103,0,71,101,111,109,101,116,114,121,72,121,100,114,111,115,116,97,116,105,99,82,97,116,105,111,0,72,121,100,114,111,108,111,103,121,77,111,100,101,108,0,72,121,100,114,111,108,111,103,121,115,104,114,101,118,101,0,72,121,100,114,111,108,111,103,121,115,104,114,101,118,101,83,112,99,119,97,116,101,114,99,111,108,117,109,110,0,72,121,100,114,111,108,111,103,121,115,104,114,101,118,101,83,116,97,98,105,108,105,122,97,116,105,111,110,0,72,121,100,114,111,108,111,103,121,100,99,0,83,101,100,105,109,101,110,116,72,101,97,100,0,83,101,100,105,109,101,110,116,72,101,97,100,79,108,100,0,83,101,100,105,109,101,110,116,72,101,97,100,82,101,115,105,100,117,97,108,0,69,102,102,101,99,116,105,118,101,80,114,101,115,115,117,114,101,0,69,112,108,72,101,97,100,0,69,112,108,72,101,97,100,79,108,100,0,69,112,108,72,101,97,100,83,108,111,112,101,88,0,69,112,108,72,101,97,100,83,108,111,112,101,89,0,69,112,108,90,105,103,90,97,103,67,111,117,110,116,101,114,0,72,121,100,114,111,108,111,103,121,100,99,77,97,120,73,116,101,114,0,72,121,100,114,111,108,111,103,121,100,99,82,101,108,84,111,108,0,72,121,100,114,111,108,111,103,121,100,99,83,112,99,115,101,100,105,109,101,110,116,72,101,97,100,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,67,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,80,111,114,111,115,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,84,114,97,110,115,109,105,116,105,118,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,87,97,116,101,114,67,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,83,112,99,101,112,108,72,101,97,100,0,72,121,100,114,111,108,111,103,121,100,99,77,97,115,107,69,112,108,97,99,116,105,118,101,78,111,100,101,0,72,121,100,114,111,108,111,103,121,100,99,77,97,115,107,69,112,108,97,99,116,105,118,101,69,108,116,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,67,111,109,112,114,101,115,115,105,98,105,108,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,80,111,114,111,115,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,73,110,105,116,105,97,108,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,67,111,108,97,112,115,101,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,77,97,120,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,84,104,105,99,107,110,101,115,115,79,108,100,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,84,104,105,99,107,67,111,109,112,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,67,111,110,100,117,99,116,105,118,105,116,121,0,72,121,100,114,111,108,111,103,121,100,99,73,115,101,102,102,105,99,105,101,110,116,108,97,121,101,114,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,108,105,109,105,116,70,108,97,103,0,72,121,100,114,111,108,111,103,121,100,99,83,101,100,105,109,101,110,116,108,105,109,105,116,0,72,121,100,114,111,108,111,103,121,100,99,84,114,97,110,115,102,101,114,70,108,97,103,0,72,121,100,114,111,108,111,103,121,100,99,76,101,97,107,97,103,101,70,97,99,116,111,114,0,72,121,100,114,111,108,111,103,121,100,99,80,101,110,97,108,116,121,70,97,99,116,111,114,0,72,121,100,114,111,108,111,103,121,100,99,80,101,110,97,108,116,121,76,111,99,107,0,72,121,100,114,111,108,111,103,121,100,99,69,112,108,102,108,105,112,76,111,99,107,0,72,121,100,114,111,108,111,103,121,100,99,66,97,115,97,108,77,111,117,108,105,110,73,110,112,117,116,0,72,121,100,114,111,108,111,103,121,76,97,121,101,114,0,72,121,100,114,111,108,111,103,121,83,101,100,105,109,101,110,116,0,72,121,100,114,111,108,111,103,121,69,102,102,105,99,105,101,110,116,0,72,121,100,114,111,108,111,103,121,83,101,100,105,109,101,110,116,75,109,97,120,0,72,121,100,114,111,108,111,103,121,115,111,109,109,101,114,115,0,72,121,100,114,111,108,111,103,121,72,101,97,100,0,72,121,100,114,111,108,111,103,121,71,97,112,72,101,105,103,104,116,0,72,121,100,114,111,108,111,103,121,66,117,109,112,83,112,97,99,105,110,103,0,72,121,100,114,111,108,111,103,121,66,117,109,112,72,101,105,103,104,116,0,72,121,100,114,111,108,111,103,121,69,110,103,108,97,99,105,97,108,73,110,112,117,116,0,72,121,100,114,111,108,111,103,121,77,111,117,108,105,110,73,110,112,117,116,0,72,121,100,114,111,108,111,103,121,82,101,121,110,111,108,100,115,0,72,121,100,114,111,108,111,103,121,78,101,117,109,97,110,110,102,108,117,120,0,72,121,100,114,111,108,111,103,121,83,112,99,104,101,97,100,0,72,121,100,114,111,108,111,103,121,67,111,110,100,117,99,116,105,118,105,116,121,0,73,110,118,101,114,115,105,111,110,67,111,110,116,114,111,108,80,97,114,97,109,101,116,101,114,115,0,73,110,118,101,114,115,105,111,110,67,111,110,116,114,111,108,83,99,97,108,105,110,103,70,97,99,116,111,114,115,0,73,110,118,101,114,115,105,111,110,67,111,115,116,70,117,110,99,116,105,111,110,84,104,114,101,115,104,111,108,100,0,73,110,118,101,114,115,105,111,110,67,111,115,116,70,117,110,99,116,105,111,110,115,67,111,101,102,102,105,99,105,101,110,116,115,0,73,110,118,101,114,115,105,111,110,67,111,115,116,70,117,110,99,116,105,111,110,115,0,73,110,118,101,114,115,105,111,110,71,114,97,100,105,101,110,116,83,99,97,108,105,110,103,0,73,110,118,101,114,115,105,111,110,73,115,99,111,110,116,114,111,108,0,73,110,118,101,114,115,105,111,110,84,121,112,101,0,73,110,118,101,114,115,105,111,110,73,110,99,111,109,112,108,101,116,101,65,100,106,111,105,110,116,0,73,110,118,101,114,115,105,111,110,77,97,120,80,97,114,97,109,101,116,101,114,115,0,73,110,118,101,114,115,105,111,110,77,97,120,105,116,101,114,80,101,114,83,116,101,112,0,73,110,118,101,114,115,105,111,110,77,97,120,105,116,101,114,0,73,110,118,101,114,115,105,111,110,77,97,120,115,116,101,112,115,0,73,110,118,101,114,115,105,111,110,70,97,116,111,108,0,73,110,118,101,114,115,105,111,110,70,114,116,111,108,0,73,110,118,101,114,115,105,111,110,71,97,116,111,108,0,73,110,118,101,114,115,105,111,110,71,114,116,111,108,0,73,110,118,101,114,115,105,111,110,71,116,116,111,108,0,73,110,118,101,114,115,105,111,110,65,108,103,111,114,105,116,104,109,0,73,110,118,101,114,115,105,111,110,77,105,110,80,97,114,97,109,101,116,101,114,115,0,73,110,118,101,114,115,105,111,110,78,115,116,101,112,115,0,73,110,118,101,114,115,105,111,110,68,120,109,105,110,0,73,110,118,101,114,115,105,111,110,78,117,109,67,111,110,116,114,111,108,80,97,114,97,109,101,116,101,114,115,0,73,110,118,101,114,115,105,111,110,78,117,109,67,111,115,116,70,117,110,99,116,105,111,110,115,0,73,110,118,101,114,115,105,111,110,83,116,101,112,84,104,114,101,115,104,111,108,100,0,73,110,118,101,114,115,105,111,110,84,104,105,99,107,110,101,115,115,79,98,115,0,73,110,118,101,114,115,105,111,110,83,117,114,102,97,99,101,79,98,115,0,73,110,118,101,114,115,105,111,110,86,120,79,98,115,0,73,110,118,101,114,115,105,111,110,86,121,79,98,115,0,73,110,118,101,114,115,105,111,110,86,122,79,98,115,0,77,97,115,107,73,99,101,76,101,118,101,108,115,101,116,0,77,97,115,107,79,99,101,97,110,76,101,118,101,108,115,101,116,0,77,97,115,107,76,97,110,100,76,101,118,101,108,115,101,116,0,77,97,116,101,114,105,97,108,115,66,101,116,97,0,77,97,116,101,114,105,97,108,115,72,101,97,116,99,97,112,97,99,105,116,121,0,77,97,116,101,114,105,97,108,115,76,97,116,101,110,116,104,101,97,116,0,77,97,116,101,114,105,97,108,115,77,101,108,116,105,110,103,112,111,105,110,116,0,77,97,116,101,114,105,97,108,115,77,105,120,101,100,76,97,121,101,114,67,97,112,97,99,105,116,121,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,66,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,66,98,97,114,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,76,97,119,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,78,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,75,111,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,75,111,98,97,114,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,69,99,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,69,99,98,97,114,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,69,115,0,77,97,116,101,114,105,97,108,115,82,104,101,111,108,111,103,121,69,115,98,97,114,0,68,97,109,97,103,101,73,115,100,97,109,97,103,101,0,68,97,109,97,103,101,68,0,68,97,109,97,103,101,70,0,68,97,109,97,103,101,68,98,97,114,0,68,97,109,97,103,101,76,97,119,0,68,97,109,97,103,101,67,49,0,68,97,109,97,103,101,67,50,0,68,97,109,97,103,101,67,51,0,68,97,109,97,103,101,67,52,0,68,97,109,97,103,101,69,108,101,109,101,110,116,105,110,116,101,114,112,0,68,97,109,97,103,101,72,101,97,108,105,110,103,0,68,97,109,97,103,101,83,116,114,101,115,115,84,104,114,101,115,104,111,108,100,0,68,97,109,97,103,101,75,97,112,112,97,0,68,97,109,97,103,101,83,116,97,98,105,108,105,122,97,116,105,111,110,0,68,97,109,97,103,101,77,97,120,105,116,101,114,0,68,97,109,97,103,101,83,112,99,100,97,109,97,103,101,0,68,97,109,97,103,101,77,97,120,68,97,109,97,103,101,0,68,97,109,97,103,101,69,113,117,105,118,83,116,114,101,115,115,0,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,68,97,109,97,103,101,0,78,101,119,68,97,109,97,103,101,0,83,116,114,101,115,115,73,110,116,101,110,115,105,116,121,70,97,99,116,111,114,0,67,97,108,118,105,110,103,76,97,119,0,67,97,108,118,105,110,103,67,97,108,118,105,110,103,114,97,116,101,0,67,97,108,118,105,110,103,77,101,108,116,105,110,103,114,97,116,101,0,67,97,108,118,105,110,103,76,101,118,101,114,109,97,110,110,0,67,97,108,118,105,110,103,68,101,118,0,67,97,108,118,105,110,103,77,105,110,116,104,105,99,107,110,101,115,115,0,68,101,102,97,117,108,116,67,97,108,118,105,110,103,0,67,97,108,118,105,110,103,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,67,97,108,118,105,110,103,108,101,118,101,114,109,97,110,110,67,111,101,102,102,0,67,97,108,118,105,110,103,108,101,118,101,114,109,97,110,110,77,101,108,116,105,110,103,114,97,116,101,0,67,97,108,118,105,110,103,100,101,118,67,111,101,102,102,0,67,97,108,118,105,110,103,114,97,116,101,120,0,67,97,108,118,105,110,103,114,97,116,101,121,0,67,97,108,118,105,110,103,114,97,116,101,120,65,118,101,114,97,103,101,0,67,97,108,118,105,110,103,114,97,116,101,121,65,118,101,114,97,103,101,0,83,116,114,97,105,110,82,97,116,101,112,97,114,97,108,108,101,108,0,83,116,114,97,105,110,82,97,116,101,112,101,114,112,101,110,100,105,99,117,108,97,114,0,83,116,114,97,105,110,82,97,116,101,101,102,102,101,99,116,105,118,101,0,77,97,116,101,114,105,97,108,115,82,104,111,73,99,101,0,77,97,116,101,114,105,97,108,115,82,104,111,83,101,97,119,97,116,101,114,0,77,97,116,101,114,105,97,108,115,82,104,111,70,114,101,115,104,119,97,116,101,114,0,77,97,116,101,114,105,97,108,115,77,117,87,97,116,101,114,0,77,97,116,101,114,105,97,108,115,84,104,101,114,109,97,108,69,120,99,104,97,110,103,101,86,101,108,111,99,105,116,121,0,77,97,116,101,114,105,97,108,115,84,104,101,114,109,97,108,99,111,110,100,117,99,116,105,118,105,116,121,0,77,97,116,101,114,105,97,108,115,84,101,109,112,101,114,97,116,101,105,99,101,99,111,110,100,117,99,116,105,118,105,116,121,0,77,97,116,101,114,105,97,108,115,76,105,116,104,111,115,112,104,101,114,101,83,104,101,97,114,77,111,100,117,108,117,115,0,77,97,116,101,114,105,97,108,115,76,105,116,104,111,115,112,104,101,114,101,68,101,110,115,105,116,121,0,77,97,116,101,114,105,97,108,115,77,97,110,116,108,101,83,104,101,97,114,77,111,100,117,108,117,115,0,77,97,116,101,114,105,97,108,115,77,97,110,116,108,101,68,101,110,115,105,116,121,0,77,97,116,101,114,105,97,108,115,69,97,114,116,104,68,101,110,115,105,116,121,0,77,101,115,104,65,118,101,114,97,103,101,86,101,114,116,101,120,67,111,110,110,101,99,116,105,118,105,116,121,0,77,101,115,104,69,108,101,109,101,110,116,115,50,100,0,77,101,115,104,69,108,101,109,101,110,116,115,0,77,101,115,104,76,111,119,101,114,101,108,101,109,101,110,116,115,0,77,101,115,104,78,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,50,100,0,77,101,115,104,78,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,0,77,101,115,104,78,117,109,98,101,114,111,102,108,97,121,101,114,115,0,77,101,115,104,78,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,50,100,0,77,101,115,104,78,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,0,77,101,115,104,85,112,112,101,114,101,108,101,109,101,110,116,115,0,77,101,115,104,86,101,114,116,101,120,111,110,98,97,115,101,0,77,101,115,104,86,101,114,116,101,120,111,110,115,117,114,102,97,99,101,0,77,101,115,104,86,101,114,116,101,120,111,110,98,111,117,110,100,97,114,121,0,77,101,115,104,88,0,77,101,115,104,89,0,77,101,115,104,90,0,77,101,115,104,76,97,116,0,77,101,115,104,76,111,110,103,0,77,101,115,104,82,0,77,101,115,104,69,108,101,109,101,110,116,116,121,112,101,0,77,101,115,104,83,101,103,109,101,110,116,115,0,68,111,109,97,105,110,84,121,112,101,0,68,111,109,97,105,110,68,105,109,101,110,115,105,111,110,0,68,111,109,97,105,110,50,68,104,111,114,105,122,111,110,116,97,108,0,68,111,109,97,105,110,50,68,118,101,114,116,105,99,97,108,0,68,111,109,97,105,110,51,68,0,68,111,109,97,105,110,51,68,115,117,114,102,97,99,101,0,77,105,115,99,101,108,108,97,110,101,111,117,115,78,97,109,101,0,77,97,115,115,116,114,97,110,115,112,111,114,116,72,121,100,114,111,115,116,97,116,105,99,65,100,106,117,115,116,109,101,110,116,0,77,97,115,115,116,114,97,110,115,112,111,114,116,73,115,102,114,101,101,115,117,114,102,97,99,101,0,77,97,115,115,116,114,97,110,115,112,111,114,116,77,105,110,84,104,105,99,107,110,101,115,115,0,77,97,115,115,116,114,97,110,115,112,111,114,116,80,101,110,97,108,116,121,70,97,99,116,111,114,0,77,97,115,115,116,114,97,110,115,112,111,114,116,83,112,99,116,104,105,99,107,110,101,115,115,0,77,97,115,115,116,114,97,110,115,112,111,114,116,83,116,97,98,105,108,105,122,97,116,105,111,110,0,77,97,115,115,116,114,97,110,115,112,111,114,116,86,101,114,116,101,120,80,97,105,114,105,110,103,0,77,97,115,115,116,114,97,110,115,112,111,114,116,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,77,97,115,115,116,114,97,110,115,112,111,114,116,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,81,109,117,73,115,100,97,107,111,116,97,0,77,97,115,115,70,108,117,120,83,101,103,109,101,110,116,115,0,77,97,115,115,70,108,117,120,83,101,103,109,101,110,116,115,80,114,101,115,101,110,116,0,81,109,117,77,97,115,115,70,108,117,120,83,101,103,109,101,110,116,115,80,114,101,115,101,110,116,0,81,109,117,78,117,109,98,101,114,111,102,112,97,114,116,105,116,105,111,110,115,0,81,109,117,78,117,109,98,101,114,111,102,114,101,115,112,111,110,115,101,115,0,81,109,117,80,97,114,116,105,116,105,111,110,0,81,109,117,82,101,115,112,111,110,115,101,100,101,115,99,114,105,112,116,111,114,115,0,81,109,117,86,97,114,105,97,98,108,101,100,101,115,99,114,105,112,116,111,114,115,0,82,105,102,116,115,78,117,109,114,105,102,116,115,0,82,105,102,116,115,82,105,102,116,115,116,114,117,99,116,0,83,101,116,116,105,110,103,115,82,101,115,117,108,116,115,79,110,78,111,100,101,115,0,83,101,116,116,105,110,103,115,73,111,71,97,116,104,101,114,0,83,101,116,116,105,110,103,115,76,111,119,109,101,109,0,83,101,116,116,105,110,103,115,79,117,116,112,117,116,70,114,101,113,117,101,110,99,121,0,83,101,116,116,105,110,103,115,82,101,99,111,114,100,105,110,103,70,114,101,113,117,101,110,99,121,0,83,101,116,116,105,110,103,115,87,97,105,116,111,110,108,111,99,107,0,68,101,98,117,103,80,114,111,102,105,108,105,110,103,0,80,114,111,102,105,108,105,110,103,67,117,114,114,101,110,116,77,101,109,0,80,114,111,102,105,108,105,110,103,67,117,114,114,101,110,116,70,108,111,112,115,0,80,114,111,102,105,108,105,110,103,83,111,108,117,116,105,111,110,84,105,109,101,0,83,116,101,97,100,121,115,116,97,116,101,77,97,120,105,116,101,114,0,83,116,101,97,100,121,115,116,97,116,101,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,116,101,97,100,121,115,116,97,116,101,82,101,108,116,111,108,0,83,116,101,97,100,121,115,116,97,116,101,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,117,114,102,97,99,101,0,84,104,101,114,109,97,108,73,115,101,110,116,104,97,108,112,121,0,84,104,101,114,109,97,108,73,115,100,121,110,97,109,105,99,98,97,115,97,108,115,112,99,0,84,104,101,114,109,97,108,82,101,108,116,111,108,0,84,104,101,114,109,97,108,77,97,120,105,116,101,114,0,84,104,101,114,109,97,108,80,101,110,97,108,116,121,70,97,99,116,111,114,0,84,104,101,114,109,97,108,80,101,110,97,108,116,121,76,111,99,107,0,84,104,101,114,109,97,108,80,101,110,97,108,116,121,84,104,114,101,115,104,111,108,100,0,84,104,101,114,109,97,108,83,112,99,116,101,109,112,101,114,97,116,117,114,101,0,84,104,101,114,109,97,108,83,116,97,98,105,108,105,122,97,116,105,111,110,0,84,104,101,114,109,97,108,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,84,104,101,114,109,97,108,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,71,105,97,77,97,110,116,108,101,86,105,115,99,111,115,105,116,121,0,71,105,97,76,105,116,104,111,115,112,104,101,114,101,84,104,105,99,107,110,101,115,115,0,84,104,105,99,107,110,101,115,115,0,84,105,109,101,115,116,101,112,112,105,110,103,83,116,97,114,116,84,105,109,101,0,84,105,109,101,115,116,101,112,112,105,110,103,70,105,110,97,108,84,105,109,101,0,84,105,109,101,115,116,101,112,112,105,110,103,67,102,108,67,111,101,102,102,105,99,105,101,110,116,0,84,105,109,101,115,116,101,112,112,105,110,103,84,105,109,101,65,100,97,112,116,0,84,105,109,101,115,116,101,112,112,105,110,103,84,105,109,101,83,116,101,112,0,84,105,109,101,115,116,101,112,112,105,110,103,73,110,116,101,114,112,70,111,114,99,105,110,103,115,0,84,114,97,110,115,105,101,110,116,73,115,115,109,98,0,84,114,97,110,115,105,101,110,116,73,115,99,111,117,112,108,101,114,0,84,114,97,110,115,105,101,110,116,73,115,115,116,114,101,115,115,98,97,108,97,110,99,101,0,84,114,97,110,115,105,101,110,116,73,115,103,114,111,117,110,100,105,110,103,108,105,110,101,0,84,114,97,110,115,105,101,110,116,73,115,109,97,115,115,116,114,97,110,115,112,111,114,116,0,84,114,97,110,115,105,101,110,116,73,115,116,104,101,114,109,97,108,0,84,114,97,110,115,105,101,110,116,73,115,103,105,97,0,84,114,97,110,115,105,101,110,116,73,115,100,97,109,97,103,101,101,118,111,108,117,116,105,111,110,0,84,114,97,110,115,105,101,110,116,73,115,104,121,100,114,111,108,111,103,121,0,84,114,97,110,115,105,101,110,116,73,115,109,111,118,105,110,103,102,114,111,110,116,0,84,114,97,110,115,105,101,110,116,73,115,115,108,114,0,84,114,97,110,115,105,101,110,116,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,84,114,97,110,115,105,101,110,116,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,80,111,116,101,110,116,105,97,108,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,112,99,112,111,116,101,110,116,105,97,108,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,112,112,97,114,101,110,116,77,97,115,115,98,97,108,97,110,99,101,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,77,105,115,102,105,116,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,68,105,102,102,117,115,105,111,110,67,111,101,102,102,105,99,105,101,110,116,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,67,109,117,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,79,109,101,103,97,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,68,48,0,83,109,98,0,83,109,98,65,110,97,108,121,115,105,115,0,83,109,98,83,111,108,117,116,105,111,110,0,83,109,98,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,109,98,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,109,98,73,115,73,110,105,116,105,97,108,105,122,101,100,0,83,77,66,102,111,114,99,105,110,103,0,83,109,98,77,97,115,115,66,97,108,97,110,99,101,0,83,77,66,103,101,109,98,0,83,109,98,73,110,105,116,68,101,110,115,105,116,121,83,99,97,108,105,110,103,0,83,109,98,84,97,0,83,109,98,86,0,83,109,98,68,115,119,114,102,0,83,109,98,68,108,119,114,102,0,83,109,98,80,0,83,109,98,83,119,102,0,83,109,98,69,65,105,114,0,83,109,98,80,65,105,114,0,83,109,98,84,109,101,97,110,0,83,109,98,67,0,83,109,98,84,122,0,83,109,98,86,122,0,83,109,98,68,116,0,83,109,98,68,122,0,83,109,98,65,73,100,120,0,83,109,98,83,119,73,100,120,0,83,109,98,68,101,110,73,100,120,0,83,109,98,90,84,111,112,0,83,109,98,68,122,84,111,112,0,83,109,98,68,122,77,105,110,0,83,109,98,90,89,0,83,109,98,90,77,97,120,0,83,109,98,90,77,105,110,0,83,109,98,79,117,116,112,117,116,70,114,101,113,0,83,109,98,65,83,110,111,119,0,83,109,98,65,73,99,101,0,83,109,98,67,108,100,70,114,97,99,0,83,109,98,84,48,119,101,116,0,83,109,98,84,48,100,114,121,0,83,109,98,75,0,83,109,98,68,0,83,109,98,82,101,0,83,109,98,71,100,110,0,83,109,98,71,115,112,0,83,109,98,69,67,0,83,109,98,67,111,110,100,101,110,115,97,116,105,111,110,0,83,109,98,87,0,83,109,98,65,0,83,109,98,84,0,83,109,98,73,115,103,114,97,105,110,103,114,111,119,116,104,0,83,109,98,73,115,97,108,98,101,100,111,0,83,109,98,73,115,115,104,111,114,116,119,97,118,101,0,83,109,98,73,115,116,104,101,114,109,97,108,0,83,109,98,73,115,97,99,99,117,109,117,108,97,116,105,111,110,0,83,109,98,73,115,109,101,108,116,0,83,109,98,73,115,100,101,110,115,105,102,105,99,97,116,105,111,110,0,83,109,98,73,115,116,117,114,98,117,108,101,110,116,102,108,117,120,0,83,77,66,112,100,100,0,83,109,98,68,101,108,116,97,49,56,111,0,83,109,98,68,101,108,116,97,49,56,111,83,117,114,102,97,99,101,0,83,109,98,73,115,100,101,108,116,97,49,56,111,0,83,109,98,73,115,109,117,110,103,115,109,0,83,109,98,73,115,100,49,56,111,112,100,0,83,109,98,80,114,101,99,105,112,105,116,97,116,105,111,110,115,80,114,101,115,101,110,116,100,97,121,0,83,109,98,80,114,101,99,105,112,105,116,97,116,105,111,110,115,76,103,109,0,83,109,98,84,101,109,112,101,114,97,116,117,114,101,115,80,114,101,115,101,110,116,100,97,121,0,83,109,98,84,101,109,112,101,114,97,116,117,114,101,115,76,103,109,0,83,109,98,80,114,101,99,105,112,105,116,97,116,105,111,110,0,83,109,98,68,101,115,102,97,99,0,83,109,98,83,48,112,0,83,109,98,83,48,116,0,83,109,98,82,108,97,112,115,0,83,109,98,82,108,97,112,115,108,103,109,0,83,109,98,80,102,97,99,0,83,109,98,84,100,105,102,102,0,83,109,98,83,101,97,108,101,118,0,83,77,66,100,49,56,111,112,100,100,0,83,109,98,68,112,101,114,109,105,108,0,83,77,66,103,114,97,100,105,101,110,116,115,0,83,109,98,77,111,110,116,104,108,121,116,101,109,112,101,114,97,116,117,114,101,115,0,83,109,98,72,114,101,102,0,83,109,98,83,109,98,114,101,102,0,83,109,98,66,80,111,115,0,83,109,98,66,78,101,103,0,83,77,66,104,101,110,110,105,110,103,0,83,77,66,99,111,109,112,111,110,101,110,116,115,0,83,109,98,65,99,99,117,109,117,108,97,116,105,111,110,0,83,109,98,69,118,97,112,111,114,97,116,105,111,110,0,83,109,98,82,117,110,111,102,102,0,83,77,66,109,101,108,116,99,111,109,112,111,110,101,110,116,115,0,83,109,98,77,101,108,116,0,83,109,98,82,101,102,114,101,101,122,101,0,83,77,66,103,99,109,0,83,109,98,73,115,112,100,100,0,83,109,98,73,115,115,109,98,103,114,97,100,105,101,110,116,115,0,83,111,108,117,116,105,111,110,84,121,112,101,0,65,110,97,108,121,115,105,115,84,121,112,101,0,67,111,110,102,105,103,117,114,97,116,105,111,110,84,121,112,101,0,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,0,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,0,65,100,106,111,105,110,116,72,111,114,105,122,65,110,97,108,121,115,105,115,0,65,110,97,108,121,115,105,115,67,111,117,110,116,101,114,0,68,101,102,97,117,108,116,65,110,97,108,121,115,105,115,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,111,108,117,116,105,111,110,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,83,111,108,117,116,105,111,110,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,111,102,116,65,110,97,108,121,115,105,115,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,111,102,116,83,111,108,117,116,105,111,110,0,66,97,108,97,110,99,101,118,101,108,111,99,105,116,121,65,110,97,108,121,115,105,115,0,66,97,108,97,110,99,101,118,101,108,111,99,105,116,121,83,111,108,117,116,105,111,110,0,76,50,80,114,111,106,101,99,116,105,111,110,69,80,76,65,110,97,108,121,115,105,115,0,76,50,80,114,111,106,101,99,116,105,111,110,66,97,115,101,65,110,97,108,121,115,105,115,0,66,101,100,83,108,111,112,101,83,111,108,117,116,105,111,110,0,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,83,111,108,117,116,105,111,110,0,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,65,110,97,108,121,115,105,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,65,110,97,108,121,115,105,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,73,65,65,110,97,108,121,115,105,115,0,83,116,114,101,115,115,98,97,108,97,110,99,101,83,111,108,117,116,105,111,110,0,83,116,114,101,115,115,98,97,108,97,110,99,101,86,101,114,116,105,99,97,108,65,110,97,108,121,115,105,115,0,69,110,116,104,97,108,112,121,65,110,97,108,121,115,105,115,0,70,108,97,105,109,65,110,97,108,121,115,105,115,0,70,108,97,105,109,83,111,108,117,116,105,111,110,0,72,121,100,114,111,108,111,103,121,83,104,114,101,118,101,65,110,97,108,121,115,105,115,0,72,121,100,114,111,108,111,103,121,68,67,73,110,101,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,0,72,121,100,114,111,108,111,103,121,68,67,69,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,0,72,121,100,114,111,108,111,103,121,83,111,109,109,101,114,115,65,110,97,108,121,115,105,115,0,72,121,100,114,111,108,111,103,121,83,111,108,117,116,105,111,110,0,77,101,108,116,105,110,103,65,110,97,108,121,115,105,115,0,77,97,115,115,116,114,97,110,115,112,111,114,116,65,110,97,108,121,115,105,115,0,77,97,115,115,116,114,97,110,115,112,111,114,116,83,111,108,117,116,105,111,110,0,70,114,101,101,83,117,114,102,97,99,101,66,97,115,101,65,110,97,108,121,115,105,115,0,70,114,101,101,83,117,114,102,97,99,101,84,111,112,65,110,97,108,121,115,105,115,0,83,117,114,102,97,99,101,78,111,114,109,97,108,86,101,108,111,99,105,116,121,0,69,120,116,114,117,100,101,70,114,111,109,66,97,115,101,65,110,97,108,121,115,105,115,0,69,120,116,114,117,100,101,70,114,111,109,84,111,112,65,110,97,108,121,115,105,115,0,68,101,112,116,104,65,118,101,114,97,103,101,65,110,97,108,121,115,105,115,0,83,116,101,97,100,121,115,116,97,116,101,83,111,108,117,116,105,111,110,0,83,117,114,102,97,99,101,83,108,111,112,101,83,111,108,117,116,105,111,110,0,83,109,111,111,116,104,65,110,97,108,121,115,105,115,0,84,104,101,114,109,97,108,65,110,97,108,121,115,105,115,0,84,104,101,114,109,97,108,83,111,108,117,116,105,111,110,0,84,114,97,110,115,105,101,110,116,83,111,108,117,116,105,111,110,0,85,122,97,119,97,80,114,101,115,115,117,114,101,65,110,97,108,121,115,105,115,0,71,105,97,83,111,108,117,116,105,111,110,0,71,105,97,65,110,97,108,121,115,105,115,0,77,101,115,104,100,101,102,111,114,109,97,116,105,111,110,83,111,108,117,116,105,111,110,0,77,101,115,104,100,101,102,111,114,109,97,116,105,111,110,65,110,97,108,121,115,105,115,0,76,101,118,101,108,115,101,116,65,110,97,108,121,115,105,115,0,76,101,118,101,108,115,101,116,83,116,97,98,105,108,105,122,97,116,105,111,110,0,69,120,116,114,97,112,111,108,97,116,105,111,110,65,110,97,108,121,115,105,115,0,76,115,102,82,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,65,110,97,108,121,115,105,115,0,65,112,112,114,111,120,105,109,97,116,105,111,110,0,78,111,110,101,65,112,112,114,111,120,105,109,97,116,105,111,110,0,83,73,65,65,112,112,114,111,120,105,109,97,116,105,111,110,0,83,83,65,65,112,112,114,111,120,105,109,97,116,105,111,110,0,83,83,65,72,79,65,112,112,114,111,120,105,109,97,116,105,111,110,0,83,83,65,70,83,65,112,112,114,111,120,105,109,97,116,105,111,110,0,76,49,76,50,65,112,112,114,111,120,105,109,97,116,105,111,110,0,72,79,65,112,112,114,111,120,105,109,97,116,105,111,110,0,72,79,70,83,65,112,112,114,111,120,105,109,97,116,105,111,110,0,70,83,65,112,112,114,111,120,105,109,97,116,105,111,110,0,70,83,118,101,108,111,99,105,116,121,0,70,83,112,114,101,115,115,117,114,101,0,68,97,116,97,83,101,116,0,67,111,110,115,116,114,97,105,110,116,115,0,76,111,97,100,115,0,77,97,116,101,114,105,97,108,115,0,78,111,100,101,115,0,67,111,110,116,111,117,114,115,0,80,97,114,97,109,101,116,101,114,115,0,86,101,114,116,105,99,101,115,0,82,101,115,117,108,116,115,0,71,101,110,101,114,105,99,80,97,114,97,109,0,65,100,111,108,99,80,97,114,97,109,0,66,111,111,108,73,110,112,117,116,0,66,111,111,108,80,97,114,97,109,0,67,111,110,116,111,117,114,0,68,97,116,97,115,101,116,73,110,112,117,116,0,68,111,117,98,108,101,73,110,112,117,116,0,68,111,117,98,108,101,65,114,114,97,121,73,110,112,117,116,0,68,97,116,97,83,101,116,80,97,114,97,109,0,68,111,117,98,108,101,77,97,116,65,114,114,97,121,80,97,114,97,109,0,68,111,117,98,108,101,77,97,116,80,97,114,97,109,0,68,111,117,98,108,101,80,97,114,97,109,0,68,111,117,98,108,101,86,101,99,80,97,114,97,109,0,69,108,101,109,101,110,116,0,69,108,101,109,101,110,116,72,111,111,107,0,72,111,111,107,0,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,70,105,108,101,80,97,114,97,109,0,73,110,112,117,116,0,73,110,116,73,110,112,117,116,0,73,110,112,117,116,84,111,69,120,116,114,117,100,101,0,73,110,112,117,116,84,111,76,50,80,114,111,106,101,99,116,0,73,110,112,117,116,84,111,68,101,112,116,104,97,118,101,114,97,103,101,0,73,110,112,117,116,84,111,83,109,111,111,116,104,0,83,109,111,111,116,104,84,104,105,99,107,110,101,115,115,77,117,108,116,105,112,108,105,101,114,0,73,110,116,80,97,114,97,109,0,73,110,116,86,101,99,80,97,114,97,109,0,84,114,97,110,115,105,101,110,116,80,97,114,97,109,0,77,97,116,105,99,101,0,77,97,116,100,97,109,97,103,101,105,99,101,0,77,97,116,101,115,116,97,114,0,77,97,116,112,97,114,0,78,111,100,101,0,78,117,109,101,114,105,99,97,108,102,108,117,120,0,78,117,109,101,114,105,99,97,108,102,108,117,120,84,121,112,101,0,78,101,117,109,97,110,110,102,108,117,120,0,80,97,114,97,109,0,77,111,117,108,105,110,0,80,101,110,103,114,105,100,0,80,101,110,112,97,105,114,0,80,114,111,102,105,108,101,114,0,77,97,116,114,105,120,80,97,114,97,109,0,77,97,115,115,99,111,110,0,77,97,115,115,99,111,110,78,97,109,101,0,77,97,115,115,99,111,110,68,101,102,105,110,105,116,105,111,110,101,110,117,109,0,77,97,115,115,99,111,110,76,101,118,101,108,115,101,116,0,77,97,115,115,99,111,110,97,120,112,98,121,0,77,97,115,115,99,111,110,97,120,112,98,121,78,97,109,101,0,77,97,115,115,99,111,110,97,120,112,98,121,68,101,102,105,110,105,116,105,111,110,101,110,117,109,0,77,97,115,115,99,111,110,97,120,112,98,121,78,97,109,101,120,0,77,97,115,115,99,111,110,97,120,112,98,121,78,97,109,101,121,0,77,97,115,115,99,111,110,97,120,112,98,121,65,108,112,104,97,0,77,97,115,115,99,111,110,97,120,112],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+88552);allocate([98,121,66,101,116,97,0,78,111,100,101,83,73,100,0,86,101,99,116,111,114,80,97,114,97,109,0,82,105,102,116,102,114,111,110,116,0,82,105,102,116,102,114,111,110,116,84,121,112,101,0,83,101,103,109,101,110,116,0,83,101,103,109,101,110,116,82,105,102,116,102,114,111,110,116,0,83,112,99,68,121,110,97,109,105,99,0,83,112,99,83,116,97,116,105,99,0,83,112,99,84,114,97,110,115,105,101,110,116,0,83,116,114,105,110,103,65,114,114,97,121,80,97,114,97,109,0,83,116,114,105,110,103,80,97,114,97,109,0,83,101,103,0,83,101,103,73,110,112,117,116,0,84,114,105,97,0,84,114,105,97,73,110,112,117,116,0,84,101,116,114,97,0,84,101,116,114,97,73,110,112,117,116,0,80,101,110,116,97,0,80,101,110,116,97,73,110,112,117,116,0,86,101,114,116,101,120,0,86,101,114,116,101,120,80,73,100,0,86,101,114,116,101,120,83,73,100,0,65,105,114,0,73,99,101,0,77,101,108,97,110,103,101,0,87,97,116,101,114,0,67,108,111,115,101,100,0,70,114,101,101,0,79,112,101,110,0,65,100,106,111,105,110,116,112,0,65,100,106,111,105,110,116,120,0,65,100,106,111,105,110,116,121,0,65,100,106,111,105,110,116,122,0,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,77,105,115,102,105,116,0,66,101,100,83,108,111,112,101,88,0,66,101,100,83,108,111,112,101,89,0,66,111,117,110,100,97,114,121,0,67,111,110,118,101,114,103,101,100,0,70,105,108,108,0,70,114,97,99,116,105,111,110,73,110,99,114,101,109,101,110,116,0,70,114,105,99,116,105,111,110,0,73,110,116,101,114,110,97,108,0,77,97,115,115,70,108,117,120,0,77,101,108,116,105,110,103,79,102,102,115,101,116,0,77,105,115,102,105,116,0,80,114,101,115,115,117,114,101,0,80,114,101,115,115,117,114,101,80,105,99,97,114,100,0,65,110,100,114,111,105,100,70,114,105,99,116,105,111,110,67,111,101,102,102,105,99,105,101,110,116,0,82,101,115,101,116,80,101,110,97,108,116,105,101,115,0,83,101,103,109,101,110,116,79,110,73,99,101,83,104,101,108,102,0,83,117,114,102,97,99,101,65,114,101,97,0,83,117,114,102,97,99,101,83,108,111,112,101,88,0,83,117,114,102,97,99,101,83,108,111,112,101,89,0,84,101,109,112,101,114,97,116,117,114,101,0,84,101,109,112,101,114,97,116,117,114,101,80,105,99,97,114,100,0,84,101,109,112,101,114,97,116,117,114,101,80,68,68,0,84,104,105,99,107,110,101,115,115,65,98,115,77,105,115,102,105,116,0,83,117,114,102,97,99,101,65,98,115,77,105,115,102,105,116,0,86,101,108,0,86,101,108,111,99,105,116,121,0,86,120,65,118,101,114,97,103,101,0,86,120,0,86,120,80,105,99,97,114,100,0,86,121,65,118,101,114,97,103,101,0,86,121,0,86,121,80,105,99,97,114,100,0,86,122,0,86,122,83,83,65,0,86,122,72,79,0,86,122,80,105,99,97,114,100,0,86,122,70,83,0,86,120,77,101,115,104,0,86,121,77,101,115,104,0,86,122,77,101,115,104,0,69,110,116,104,97,108,112,121,0,69,110,116,104,97,108,112,121,80,105,99,97,114,100,0,84,104,105,99,107,110,101,115,115,65,98,115,71,114,97,100,105,101,110,116,0,84,104,105,99,107,110,101,115,115,65,108,111,110,103,71,114,97,100,105,101,110,116,0,84,104,105,99,107,110,101,115,115,65,99,114,111,115,115,71,114,97,100,105,101,110,116,0,84,104,105,99,107,110,101,115,115,80,111,115,105,116,105,118,101,0,73,110,116,77,97,116,80,97,114,97,109,0,84,114,97,110,115,105,101,110,116,73,110,112,117,116,0,87,97,116,101,114,102,114,97,99,116,105,111,110,0,87,97,116,101,114,99,111,108,117,109,110,0,66,97,115,97,108,70,114,105,99,116,105,111,110,0,86,105,115,99,111,117,115,72,101,97,116,105,110,103,0,72,121,100,114,111,108,111,103,121,87,97,116,101,114,86,120,0,72,121,100,114,111,108,111,103,121,87,97,116,101,114,86,121,0,68,114,105,118,105,110,103,83,116,114,101,115,115,88,0,68,114,105,118,105,110,103,83,116,114,101,115,115,89,0,83,105,103,109,97,78,78,0,83,116,114,101,115,115,84,101,110,115,111,114,0,83,116,114,101,115,115,84,101,110,115,111,114,120,120,0,83,116,114,101,115,115,84,101,110,115,111,114,120,121,0,83,116,114,101,115,115,84,101,110,115,111,114,120,122,0,83,116,114,101,115,115,84,101,110,115,111,114,121,121,0,83,116,114,101,115,115,84,101,110,115,111,114,121,122,0,83,116,114,101,115,115,84,101,110,115,111,114,122,122,0,83,116,114,101,115,115,77,97,120,80,114,105,110,99,105,112,97,108,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,120,120,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,120,121,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,120,122,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,121,121,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,121,122,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,122,122,0,68,101,118,105,97,116,111,114,105,99,83,116,114,101,115,115,101,102,102,101,99,116,105,118,101,0,76,97,109,98,100,97,83,0,83,116,114,97,105,110,82,97,116,101,0,83,116,114,97,105,110,82,97,116,101,120,120,0,83,116,114,97,105,110,82,97,116,101,120,121,0,83,116,114,97,105,110,82,97,116,101,120,122,0,83,116,114,97,105,110,82,97,116,101,121,121,0,83,116,114,97,105,110,82,97,116,101,121,122,0,83,116,114,97,105,110,82,97,116,101,122,122,0,68,105,118,101,114,103,101,110,99,101,0,77,97,120,68,105,118,101,114,103,101,110,99,101,0,71,105,97,67,114,111,115,115,83,101,99,116,105,111,110,83,104,97,112,101,0,71,105,97,100,87,100,116,0,71,105,97,87,0,80,48,0,80,48,65,114,114,97,121,0,80,49,0,80,49,68,71,0,80,49,98,117,98,98,108,101,0,80,49,98,117,98,98,108,101,99,111,110,100,101,110,115,101,100,0,80,50,0,80,50,98,117,98,98,108,101,0,80,50,98,117,98,98,108,101,99,111,110,100,101,110,115,101,100,0,80,50,120,80,49,0,80,49,120,80,50,0,80,49,120,80,51,0,80,50,120,80,52,0,80,49,80,49,0,80,49,80,49,71,76,83,0,77,73,78,73,0,77,73,78,73,99,111,110,100,101,110,115,101,100,0,84,97,121,108,111,114,72,111,111,100,0,76,65,84,97,121,108,111,114,72,111,111,100,0,88,84,97,121,108,111,114,72,111,111,100,0,79,110,101,76,97,121,101,114,80,52,122,0,67,114,111,117,122,101,105,120,82,97,118,105,97,114,116,0,76,65,67,114,111,117,122,101,105,120,82,97,118,105,97,114,116,0,83,97,118,101,82,101,115,117,108,116,115,0,66,111,111,108,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,68,111,117,98,108,101,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,68,111,117,98,108,101,77,97,116,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,73,110,116,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,74,0,83,116,114,105,110,103,69,120,116,101,114,110,97,108,82,101,115,117,108,116,0,83,116,101,112,0,84,105,109,101,0,87,97,116,101,114,67,111,108,117,109,110,79,108,100,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,50,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,51,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,52,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,53,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,54,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,55,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,56,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,49,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,50,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,51,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,52,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,53,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,54,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,55,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,56,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,57,57,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,49,48,48,0,79,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,76,105,115,116,0,77,97,115,115,102,108,117,120,97,116,103,97,116,101,0,77,97,115,115,102,108,117,120,97,116,103,97,116,101,78,97,109,101,0,77,97,115,115,102,108,117,120,97,116,103,97,116,101,68,101,102,105,110,105,116,105,111,110,101,110,117,109,0,77,97,115,115,102,108,117,120,97,116,103,97,116,101,83,101,103,109,101,110,116,115,0,78,111,100,97,108,118,97,108,117,101,0,78,111,100,97,108,118,97,108,117,101,78,97,109,101,0,78,111,100,97,108,118,97,108,117,101,68,101,102,105,110,105,116,105,111,110,101,110,117,109,0,78,111,100,97,108,118,97,108,117,101,77,111,100,101,108,69,110,117,109,0,78,111,100,97,108,118,97,108,117,101,78,111,100,101,0,77,105,115,102,105,116,78,97,109,101,0,77,105,115,102,105,116,68,101,102,105,110,105,116,105,111,110,101,110,117,109,0,77,105,115,102,105,116,77,111,100,101,108,69,110,117,109,0,77,105,115,102,105,116,79,98,115,101,114,118,97,116,105,111,110,0,77,105,115,102,105,116,79,98,115,101,114,118,97,116,105,111,110,69,110,117,109,0,77,105,115,102,105,116,76,111,99,97,108,0,77,105,115,102,105,116,84,105,109,101,105,110,116,101,114,112,111,108,97,116,105,111,110,0,77,105,115,102,105,116,87,101,105,103,104,116,115,0,77,105,115,102,105,116,87,101,105,103,104,116,115,69,110,117,109,0,83,117,114,102,97,99,101,79,98,115,101,114,118,97,116,105,111,110,0,87,101,105,103,104,116,115,83,117,114,102,97,99,101,79,98,115,101,114,118,97,116,105,111,110,0,86,120,79,98,115,0,87,101,105,103,104,116,115,86,120,79,98,115,0,86,121,79,98,115,0,87,101,105,103,104,116,115,86,121,79,98,115,0,77,105,110,86,101,108,0,77,97,120,86,101,108,0,77,105,110,86,120,0,77,97,120,86,120,0,77,97,120,65,98,115,86,120,0,77,105,110,86,121,0,77,97,120,86,121,0,77,97,120,65,98,115,86,121,0,77,105,110,86,122,0,77,97,120,86,122,0,77,97,120,65,98,115,86,122,0,70,108,111,97,116,105,110,103,65,114,101,97,0,71,114,111,117,110,100,101,100,65,114,101,97,0,73,99,101,77,97,115,115,0,73,99,101,86,111,108,117,109,101,0,73,99,101,86,111,108,117,109,101,65,98,111,118,101,70,108,111,97,116,97,116,105,111,110,0,84,111,116,97,108,70,108,111,97,116,105,110,103,66,109,98,0,84,111,116,97,108,71,114,111,117,110,100,101,100,66,109,98,0,84,111,116,97,108,83,109,98,0,65,98,115,111,108,117,116,101,0,73,110,99,114,101,109,101,110,116,97,108,0,65,117,103,109,101,110,116,101,100,76,97,103,114,97,110,103,105,97,110,82,0,65,117,103,109,101,110,116,101,100,76,97,103,114,97,110,103,105,97,110,82,104,111,112,0,65,117,103,109,101,110,116,101,100,76,97,103,114,97,110,103,105,97,110,82,108,97,109,98,100,97,0,65,117,103,109,101,110,116,101,100,76,97,103,114,97,110,103,105,97,110,82,104,111,108,97,109,98,100,97,0,65,117,103,109,101,110,116,101,100,76,97,103,114,97,110,103,105,97,110,84,104,101,116,97,0,78,111,110,101,0,65,103,103,114,101,115,115,105,118,101,77,105,103,114,97,116,105,111,110,0,83,111,102,116,77,105,103,114,97,116,105,111,110,0,83,117,98,101,108,101,109,101,110,116,77,105,103,114,97,116,105,111,110,0,83,117,98,101,108,101,109,101,110,116,77,105,103,114,97,116,105,111,110,50,0,67,111,110,116,97,99,116,0,71,114,111,117,110,100,105,110,103,79,110,108,121,0,77,97,115,107,71,114,111,117,110,100,101,100,105,99,101,76,101,118,101,108,115,101,116,0,71,97,117,115,115,83,101,103,0,70,83,83,111,108,118,101,114,0,65,100,106,111,105,110,116,0,67,111,108,105,110,101,97,114,0,67,111,110,116,114,111,108,83,116,101,97,100,121,0,70,115,101,116,0,71,114,97,100,105,101,110,116,49,0,71,114,97,100,105,101,110,116,50,0,71,114,97,100,105,101,110,116,51,0,71,114,97,100,105,101,110,116,0,71,114,111,117,110,100,105,110,103,108,105,110,101,77,105,103,114,97,116,105,111,110,0,71,115,101,116,0,73,110,100,101,120,0,73,110,100,101,120,101,100,0,73,110,116,101,114,115,101,99,116,0,78,111,100,97,108,0,79,108,100,71,114,97,100,105,101,110,116,0,79,117,116,112,117,116,66,117,102,102,101,114,80,111,105,110,116,101,114,0,79,117,116,112,117,116,66,117,102,102,101,114,83,105,122,101,80,111,105,110,116,101,114,0,79,117,116,112,117,116,70,105,108,101,80,111,105,110,116,101,114,0,84,111,111,108,107,105,116,115,70,105,108,101,78,97,109,101,0,82,111,111,116,80,97,116,104,0,79,117,116,112,117,116,70,105,108,101,78,97,109,101,0,73,110,112,117,116,70,105,108,101,78,97,109,101,0,76,111,99,107,70,105,108,101,78,97,109,101,0,82,101,115,116,97,114,116,70,105,108,101,78,97,109,101,0,84,111,111,108,107,105,116,115,79,112,116,105,111,110,115,65,110,97,108,121,115,101,115,0,84,111,111,108,107,105,116,115,79,112,116,105,111,110,115,83,116,114,105,110,103,115,0,81,109,117,69,114,114,78,97,109,101,0,81,109,117,73,110,78,97,109,101,0,81,109,117,79,117,116,78,97,109,101,0,82,101,103,117,108,97,114,0,83,99,97,108,101,100,0,83,101,112,97,114,97,116,101,0,83,115,101,116,0,86,101,114,98,111,115,101,0,84,114,105,97,110,103,108,101,73,110,116,101,114,112,0,66,105,108,105,110,101,97,114,73,110,116,101,114,112,0,78,101,97,114,101,115,116,73,110,116,101,114,112,0,88,89,0,88,89,90,0,68,101,110,115,101,0,77,112,105,68,101,110,115,101,0,77,112,105,83,112,97,114,115,101,0,83,101,113,0,77,112,105,0,77,117,109,112,115,0,71,115,108,0,79,112,116,105,111,110,0,71,101,110,101,114,105,99,79,112,116,105,111,110,0,79,112,116,105,111,110,67,101,108,108,0,79,112,116,105,111,110,83,116,114,117,99,116,0,67,117,102,102,101,121,0,66,117,100,100,74,97,99,107,97,0,67,117,102,102,101,121,84,101,109,112,101,114,97,116,101,0,80,97,116,101,114,115,111,110,0,65,114,114,104,101,110,105,117,115,0,76,108,105,98,111,117,116,114,121,68,117,118,97,108,0,83,112,99,108,101,118,101,108,115,101,116,0,69,120,116,114,97,112,111,108,97,116,105,111,110,86,97,114,105,97,98,108,101,0,73,99,101,77,97,115,107,78,111,100,101,65,99,116,105,118,97,116,105,111,110,0,76,101,118,101,108,115,101,116,102,117,110,99,116,105,111,110,83,108,111,112,101,88,0,76,101,118,101,108,115,101,116,102,117,110,99,116,105,111,110,83,108,111,112,101,89,0,76,101,118,101,108,115,101,116,102,117,110,99,116,105,111,110,80,105,99,97,114,100,0,76,101,118,101,108,115,101,116,82,101,105,110,105,116,70,114,101,113,117,101,110,99,121,0,83,101,97,108,101,118,101,108,114,105,115,101,83,111,108,117,116,105,111,110,0,83,101,97,108,101,118,101,108,114,105,115,101,65,110,97,108,121,115,105,115,0,83,101,97,108,101,118,101,108,0,83,101,97,108,101,118,101,108,69,117,115,116,97,116,105,99,0,83,101,97,108,101,118,101,108,114,105,115,101,68,101,108,116,97,116,104,105,99,107,110,101,115,115,0,83,101,97,108,101,118,101,108,114,105,115,101,77,97,120,105,116,101,114,0,83,101,97,108,101,118,101,108,114,105,115,101,82,101,108,116,111,108,0,83,101,97,108,101,118,101,108,114,105,115,101,65,98,115,116,111,108,0,83,101,97,108,101,118,101,108,114,105,115,101,76,111,118,101,72,0,83,101,97,108,101,118,101,108,114,105,115,101,76,111,118,101,75,0,83,101,97,108,101,118,101,108,114,105,115,101,84,105,100,101,76,111,118,101,72,0,83,101,97,108,101,118,101,108,114,105,115,101,84,105,100,101,76,111,118,101,75,0,83,101,97,108,101,118,101,108,114,105,115,101,82,105,103,105,100,0,83,101,97,108,101,118,101,108,114,105,115,101,69,108,97,115,116,105,99,0,83,101,97,108,101,118,101,108,114,105,115,101,82,111,116,97,116,105,111,110,0,83,101,97,108,101,118,101,108,114,105,115,101,71,69,108,97,115,116,105,99,0,83,101,97,108,101,118,101,108,114,105,115,101,68,101,103,97,99,99,0,83,101,97,108,101,118,101,108,114,105,115,101,84,114,97,110,115,105,116,105,111,110,115,0,83,101,97,108,101,118,101,108,114,105,115,101,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,83,101,97,108,101,118,101,108,114,105,115,101,78,117,109,82,101,113,117,101,115,116,101,100,79,117,116,112,117,116,115,0,80,97,114,97,109,101,116,101,114,115,69,78,68,0,77,97,120,105,109,117,109,78,117,109,98,101,114,79,102,68,101,102,105,110,105,116,105,111,110,115,0,69,110,117,109,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,69,110,117,109,47,83,116,114,105,110,103,84,111,69,110,117,109,120,46,99,112,112,0,83,116,114,105,110,103,84,111,69,110,117,109,120,0,118,101,98,111,115,105,116,121,32,108,101,118,101,108,32,115,104,111,117,108,100,32,98,101,32,97,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,32,40,117,115,101,114,32,112,114,111,118,105,100,101,100,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,78,117,109,101,114,105,99,115,47,86,101,114,98,111,115,105,116,121,46,99,112,112,0,83,101,116,86,101,114,98,111,115,105,116,121,76,101,118,101,108,0,49,52,69,114,114,111,114,69,120,99,101,112,116,105,111,110,0,69,114,114,111,114,32,109,101,115,115,97,103,101,58,32,0,10,63,63,63,32,69,114,114,111,114,32,105,110,32,61,61,62,32,0,58,0,32,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,0,10,10,0,10,91,0,93,32,63,63,63,32,69,114,114,111,114,32,117,115,105,110,103,32,61,61,62,32,0,91,0,93,32,0,10,69,114,114,111,114,32,105,110,32,61,61,62,32,0,109,97,116,95,116,121,112,101,0,109,112,105,100,101,110,115,101,0,109,112,105,115,112,97,114,115,101,0,100,101,110,115,101,0,68,101,110,115,101,32,109,97,116,114,105,120,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,112,97,114,97,108,108,101,108,32,114,117,110,115,32,119,105,116,104,32,110,117,109,95,112,114,111,99,115,62,49,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,116,111,111,108,107,105,116,115,47,105,115,115,109,47,73,115,115,109,84,111,111,108,107,105,116,85,116,105,108,115,46,99,112,112,0,73,115,115,109,77,97,116,84,121,112,101,70,114,111,109,84,111,111,108,107,105,116,79,112,116,105,111,110,115,0,118,101,99,95,116,121,112,101,0,109,112,105,0,115,101,113,0,68,101,110,115,101,32,118,101,99,116,111,114,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,112,97,114,97,108,108,101,108,32,114,117,110,115,32,119,105,116,104,32,110,117,109,95,112,114,111,99,115,62,49,0,73,115,115,109,86,101,99,84,121,112,101,70,114,111,109,84,111,111,108,107,105,116,79,112,116,105,111,110,115,0,48,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,116,111,111,108,107,105,116,115,47,109,112,105,47,105,115,115,109,109,112,105,46,99,112,112,0,115,105,122,101,72,101,108,112,101,114,0,115,101,110,100,99,111,117,110,116,61,61,114,101,99,118,99,111,117,110,116,32,124,124,32,115,101,110,100,116,121,112,101,61,61,114,101,99,118,116,121,112,101,0,73,83,83,77,95,77,80,73,95,65,108,108,103,97,116,104,101,114,0,115,101,110,100,116,121,112,101,61,61,114,101,99,118,116,121,112,101,0,73,83,83,77,95,77,80,73,95,65,108,108,103,97,116,104,101,114,118,0,115,101,110,100,99,111,117,110,116,61,61,114,101,99,118,99,111,117,110,116,115,91,48,93,0,115,101,110,100,116,121,112,101,61,61,114,101,99,118,116,121,112,101,32,38,38,32,115,101,110,100,99,110,116,61,61,114,101,99,118,99,110,116,0,73,83,83,77,95,77,80,73,95,71,97,116,104,101,114,0,116,111,111,108,107,105,116,0,116,111,107,101,110,32,108,105,115,116,32,115,104,111,117,108,100,32,115,116,97,114,116,32,119,105,116,104,32,97,110,32,111,112,116,105,111,110,44,32,110,111,116,32,97,32,118,97,108,117,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,116,111,111,108,107,105,116,115,47,84,111,111,108,107,105,116,79,112,116,105,111,110,115,46,99,112,112,0,84,111,107,101,110,86,97,108,117,101,0,109,100,46,118,101,114,98,111,115,101,0,32,32,32,115,116,97,114,116,105,110,103,32,109,111,100,101,108,32,112,114,111,99,101,115,115,111,114,32,10,0,32,32,32,99,114,101,97,116,105,110,103,32,100,97,116,97,115,101,116,115,32,102,111,114,32,97,110,97,108,121,115,105,115,32,0,32,32,32,100,111,110,101,32,119,105,116,104,32,109,111,100,101,108,32,112,114,111,99,101,115,115,111,114,32,10,0,109,100,46,109,101,115,104,46,101,108,101,109,101,110,116,115,50,100,0,109,100,46,109,101,115,104,46,110,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,50,100,0,109,100,46,109,101,115,104,46,110,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,50,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,69,108,101,109,101,110,116,115,65,110,100,86,101,114,116,105,99,101,115,80,97,114,116,105,116,105,111,110,105,110,103,46,99,112,112,0,69,108,101,109,101,110,116,115,65,110,100,86,101,114,116,105,99,101,115,80,97,114,116,105,116,105,111,110,105,110,103,0,109,101,116,105,115,32,104,97,115,32,110,111,116,32,98,101,101,100,32,105,110,115,116,97,108,108,101,100,46,32,67,97,110,110,111,116,32,114,117,110,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,49,32,99,112,117,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,77,101,115,104,80,97,114,116,105,116,105,111,110,120,47,77,101,115,104,80,97,114,116,105,116,105,111,110,120,46,104,0,77,101,115,104,80,97,114,116,105,116,105,111,110,120,0,65,116,32,108,101,97,115,116,32,111,110,101,32,112,114,111,99,101,115,115,111,114,32,105,115,32,114,101,113,117,105,114,101,100,0,109,100,46,115,101,116,116,105,110,103,115,46,111,117,116,112,117,116,95,102,114,101,113,117,101,110,99,121,0,109,100,46,115,101,116,116,105,110,103,115,46,114,101,99,111,114,100,105,110,103,95,102,114,101,113,117,101,110,99,121,0,109,100,46,99,111,110,115,116,97,110,116,115,46,121,116,115,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,115,116,97,114,116,95,116,105,109,101,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,102,105,110,97,108,95,116,105,109,101,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,116,105,109,101,95,97,100,97,112,116,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,116,105,109,101,95,115,116,101,112,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,99,102,108,95,99,111,101,102,102,105,99,105,101,110,116,0,109,100,46,115,101,116,116,105,110,103,115,46,108,111,119,109,101,109,0,109,100,46,100,101,98,117,103,46,112,114,111,102,105,108,105,110,103,0,109,100,46,109,101,115,104,46,97,118,101,114,97,103,101,95,118,101,114,116,101,120,95,99,111,110,110,101,99,116,105,118,105,116,121,0,109,100,46,115,101,116,116,105,110,103,115,46,119,97,105,116,111,110,108,111,99,107,0,109,100,46,115,101,116,116,105,110,103,115,46,114,101,115,117,108,116,115,95,111,110,95,110,111,100,101,115,0,109,100,46,115,101,116,116,105,110,103,115,46,105,111,95,103,97,116,104,101,114,0,109,100,46,115,116,101,97,100,121,115,116,97,116,101,46,114,101,108,116,111,108,0,109,100,46,115,116,101,97,100,121,115,116,97,116,101,46,109,97,120,105,116,101,114,0,109,100,46,103,114,111,117,110,100,105,110,103,108,105,110,101,46,109,105,103,114,97,116,105,111,110,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,115,116,114,101,115,115,98,97,108,97,110,99,101,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,109,97,115,115,116,114,97,110,115,112,111,114,116,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,116,104,101,114,109,97,108,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,103,105,97,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,100,97,109,97,103,101,101,118,111,108,117,116,105,111,110,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,104,121,100,114,111,108,111,103,121,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,115,108,114,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,99,111,117,112,108,101,114,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,108,97,119,0,109,100,46,103,105,97,46,99,114,111,115,115,95,115,101,99,116,105,111,110,95,115,104,97,112,101,0,109,100,46,109,101,115,104,46,110,117,109,98,101,114,111,102,108,97,121,101,114,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,100,101,101,112,119,97,116,101,114,95,109,101,108,116,105,110,103,95,114,97,116,101,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,100,101,101,112,119,97,116,101,114,95,101,108,101,118,97,116,105,111,110,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,117,112,112,101,114,119,97,116,101,114,95,101,108,101,118,97,116,105,111,110,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,109,101,108,116,114,97,116,101,95,102,97,99,116,111,114,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,116,104,114,101,115,104,111,108,100,95,116,104,105,99,107,110,101,115,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,117,112,112,101,114,100,101,112,116,104,95,109,101,108,116,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,109,97,110,116,108,101,99,111,110,100,117,99,116,105,118,105,116,121,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,110,117,115,115,101,108,116,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,100,116,98,103,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,112,108,117,109,101,114,97,100,105,117,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,116,111,112,112,108,117,109,101,100,101,112,116,104,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,98,111,116,116,111,109,112,108,117,109,101,100,101,112,116,104,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,112,108,117,109,101,120,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,112,108,117,109,101,121,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,99,114,117,115,116,116,104,105,99,107,110,101,115,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,117,112,112,101,114,99,114,117,115,116,116,104,105,99,107,110,101,115,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,117,112,112,101,114,99,114,117,115,116,104,101,97,116,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,108,111,119,101,114,99,114,117,115,116,104,101,97,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,80,97,114,97,109,101,116,101,114,115,46,99,112,112,0,67,114,101,97,116,101,80,97,114,97,109,101,116,101,114,115,0,109,100,46,116,114,97,110,115,105,101,110,116,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,109,100,46,115,116,101,97,100,121,115,116,97,116,101,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,109,100,46,113,109,117,46,109,97,115,115,95,102,108,117,120,95,115,101,103,109,101,110,116,115,95,112,114,101,115,101,110,116,0,109,100,46,97,117,116,111,100,105,102,102,46,109,97,115,115,95,102,108,117,120,95,115,101,103,109,101,110,116,115,95,112,114,101,115,101,110,116,0,109,100,46,113,109,117,46,109,97,115,115,95,102,108,117,120,95,115,101,103,109,101,110,116,115,0,109,97,115,115,95,102,108,117,120,95,110,117,109,95,112,114,111,102,105,108,101,115,32,105,115,32,48,44,32,119,104,101,110,32,77,97,115,115,70,108,117,120,32,99,111,109,112,117,116,97,116,105,111,110,115,32,119,101,114,101,32,114,101,113,117,101,115,116,101,100,33,0,109,100,46,109,101,115,104,46,117,112,112,101,114,101,108,101,109,101,110,116,115,0,109,100,46,109,101,115,104,46,108,111,119,101,114,101,108,101,109,101,110,116,115,0,77,101,115,104,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,69,108,101,109,101,110,116,115,86,101,114,116,105,99,101,115,65,110,100,77,97,116,101,114,105,97,108,115,46,99,112,112,0,67,114,101,97,116,101,69,108,101,109,101,110,116,115,86,101,114,116,105,99,101,115,65,110,100,77,97,116,101,114,105,97,108,115,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,107,111,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,69,99,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,69,115,0,77,97,116,101,114,105,97,108,115,32,0,109,100,46,109,97,116,101,114,105,97,108,46,114,104,101,111,108,111,103,121,95,66,0,109,100,46,109,97,116,101,114,105,97,108,46,114,104,101,111,108,111,103,121,95,110,0,109,100,46,109,101,115,104,46,120,0,109,100,46,109,101,115,104,46,121,0,109,100,46,109,101,115,104,46,108,97,116,0,109,100,46,109,101,115,104,46,108,111,110,103,0,109,100,46,109,101,115,104,46,114,0,80,69,84,83,99,32,111,112,116,105,111,110,115,32,102,111,114,32,97,110,97,108,121,115,105,115,32,0,32,104,97,118,101,32,98,101,101,110,32,100,101,99,108,97,114,101,100,32,98,117,116,32,119,101,114,101,32,110,111,116,32,102,111,117,110,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,80,97,114,115,101,84,111,111,108,107,105,116,115,79,112,116,105,111,110,115,120,47,80,97,114,115,101,84,111,111,108,107,105,116,115,79,112,116,105,111,110,115,120,46,99,112,112,0,80,97,114,115,101,84,111,111,108,107,105,116,115,79,112,116,105,111,110,115,120,0,32,32,32,82,101,110,117,109,98,101,114,105,110,103,32,100,101,103,114,101,101,115,32,111,102,32,102,114,101,101,100,111,109,10,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,101,108,101,109,101,110,116,32,119,105,116,104,32,118,101,114,116,101,120,32,119,105,116,104,32,105,100,32,0,32,116,111,32,99,111,109,112,117,116,101,32,110,111,100,97,108,32,118,97,108,117,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,78,111,100,97,108,86,97,108,117,101,120,47,78,111,100,97,108,86,97,108,117,101,120,46,99,112,112,0,78,111,100,97,108,86,97,108,117,101,120,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,79,117,116,112,117,116,82,101,115,117,108,116,115,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,119,98,0,37,115,46,37,105,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,116,104,105,115,32,116,121,112,101,32,111,102,32,114,101,115,117,108,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,79,117,116,112,117,116,82,101,115,117,108,116,115,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,69,120,116,101,114,110,97,108,82,101,115,117,108,116,115,47,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,46,104,0,71,101,116,86,97,108,117,101,0,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,60,99,104,97,114,42,62,58,10,0,32,32,32],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+98792);allocate([118,97,108,117,101,58,32,0,32,32,32,105,100,32,32,32,32,32,32,32,32,32,32,58,32,0,32,32,32,114,101,115,117,108,116,95,110,97,109,101,32,58,32,0,32,32,32,115,116,101,112,32,32,32,32,32,32,32,32,58,32,0,32,32,32,116,105,109,101,32,32,32,32,32,32,32,32,58,32,0,50,49,71,101,110,101,114,105,99,69,120,116,101,114,110,97,108,82,101,115,117,108,116,73,80,99,69,0,73,110,112,117,116,32,0,32,110,111,116,32,102,111,117,110,100,32,105,110,32,101,108,101,109,101,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,101,116,65,99,116,105,118,101,78,111,100,101,115,76,83,77,120,47,83,101,116,65,99,116,105,118,101,78,111,100,101,115,76,83,77,120,46,99,112,112,0,83,101,116,65,99,116,105,118,101,78,111,100,101,115,76,83,77,120,0,118,101,99,116,111,114,32,116,121,112,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,71,101,116,86,101,99,116,111,114,70,114,111,109,73,110,112,117,116,115,120,47,71,101,116,86,101,99,116,111,114,70,114,111,109,73,110,112,117,116,115,120,46,99,112,112,0,71,101,116,86,101,99,116,111,114,70,114,111,109,73,110,112,117,116,115,120,0,32,32,32,32,32,32,67,111,110,102,105,103,117,114,105,110,103,32,101,108,101,109,101,110,116,115,46,46,46,10,0,32,32,32,32,32,32,67,111,110,102,105,103,117,114,105,110,103,32,108,111,97,100,115,46,46,46,10,0,32,32,32,32,32,32,67,111,110,102,105,103,117,114,105,110,103,32,109,97,116,101,114,105,97,108,115,46,46,46,10,0,116,111,112,32,103,114,105,100,32,99,101,108,108,32,115,116,114,117,99,116,117,114,101,32,108,101,110,103,116,104,32,100,111,101,115,32,110,111,116,32,103,111,32,101,118,101,110,108,121,32,105,110,116,111,32,115,112,101,99,105,102,105,101,100,32,116,111,112,32,115,116,114,117,99,116,117,114,101,32,100,101,112,116,104,44,32,97,100,106,117,115,116,32,100,122,84,111,112,32,111,114,32,122,84,111,112,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,77,97,115,115,66,97,108,97,110,99,101,120,47,71,101,109,98,120,46,99,112,112,0,71,101,109,98,103,114,105,100,73,110,105,116,105,97,108,105,122,101,0,105,110,105,116,105,97,108,32,116,111,112,32,103,114,105,100,32,99,101,108,108,32,108,101,110,103,116,104,32,40,100,122,84,111,112,41,32,105,115,32,60,32,48,46,48,53,32,109,0,32,32,32,103,114,97,105,110,32,103,114,111,119,116,104,32,109,111,100,117,108,101,10,0,32,32,32,97,108,98,101,100,111,32,109,111,100,117,108,101,10,0,97,108,98,101,100,111,32,109,101,116,104,111,100,32,115,119,105,116,99,104,32,115,104,111,117,108,100,32,114,97,110,103,101,32,102,114,111,109,32,49,32,116,111,32,52,33,0,97,108,98,101,100,111,0,97,108,98,101,100,111,32,62,32,49,46,48,10,0,97,108,98,101,100,111,32,105,115,32,110,101,103,97,116,105,118,101,10,0,97,108,98,101,100,111,32,61,61,32,78,65,78,10,0,32,32,32,116,104,101,114,109,97,108,32,109,111,100,117,108,101,10,0,32,32,32,115,104,111,114,116,119,97,118,101,32,109,111,100,117,108,101,10,0,32,32,32,97,99,99,117,109,117,108,97,116,105,111,110,32,109,111,100,117,108,101,10,0,109,97,115,115,32,110,111,116,32,99,111,110,115,101,114,118,101,100,32,105,110,32,97,99,99,117,109,117,108,97,116,105,111,110,32,102,117,110,99,116,105,111,110,0,97,99,99,117,109,117,108,97,116,105,111,110,0,32,32,32,109,101,108,116,32,109,111,100,117,108,101,10,0,32,32,32,32,32,32,112,111,114,101,32,119,97,116,101,114,32,114,101,102,114,101,101,122,101,10,0,110,101,103,97,116,105,118,101,32,112,111,114,101,32,119,97,116,101,114,32,103,101,110,101,114,97,116,101,100,32,105,110,32,109,101,108,116,32,101,113,117,97,116,105,111,110,115,0,109,101,108,116,0,110,101,103,97,116,105,118,101,32,112,111,114,101,32,119,97,116,101,114,32,103,101,110,101,114,97,116,101,100,32,105,110,32,109,101,108,116,32,101,113,117,97,116,105,111,110,115,10,0,109,97,115,115,32,111,114,32,101,110,101,114,103,121,32,97,114,101,32,110,111,116,32,99,111,110,115,101,114,118,101,100,32,105,110,32,109,101,108,116,32,101,113,117,97,116,105,111,110,115,10,0,100,109,58,32,0,32,100,69,58,32,0,32,32,32,100,101,110,115,105,102,105,99,97,116,105,111,110,32,109,111,100,117,108,101,10,0,32,32,32,116,117,114,98,117,108,101,110,116,70,108,117,120,32,109,111,100,117,108,101,10,0,73,83,83,77,32,119,97,115,32,110,111,116,32,99,111,109,112,105,108,101,100,32,119,105,116,104,32,100,97,107,111,116,97,32,115,117,112,112,111,114,116,44,32,99,97,110,110,111,116,32,99,97,114,114,121,32,111,117,116,32,100,97,107,111,116,97,32,97,110,97,108,121,115,105,115,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,87,114,97,112,112,101,114,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,46,99,112,112,0,87,114,97,112,112,101,114,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,0,99,111,110,116,114,111,108,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,115,111,108,117,116,105,111,110,32,116,121,112,101,58,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,46,99,112,112,0,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,0,83,104,111,117,108,100,32,110,111,116,32,98,101,32,114,101,113,117,101,115,116,105,110,103,32,65,68,32,100,114,105,118,101,114,115,32,119,104,101,110,32,97,110,32,65,68,32,108,105,98,114,97,114,121,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,97,100,95,99,111,114,101,46,99,112,112,0,97,100,95,99,111,114,101,0,37,115,32,118,101,114,115,105,111,110,32,32,37,115,10,0,73,99,101,32,83,104,101,101,116,32,83,121,115,116,101,109,32,77,111,100,101,108,32,40,73,83,83,77,41,0,52,46,57,0,40,119,101,98,115,105,116,101,58,32,37,115,32,99,111,110,116,97,99,116,58,32,37,115,41,10,0,104,116,116,112,58,47,47,105,115,115,109,46,106,112,108,46,110,97,115,97,46,103,111,118,0,105,115,115,109,64,106,112,108,46,110,97,115,97,46,103,111,118,0,99,108,111,115,105,110,103,32,77,80,73,0,101,110,117,109,32,112,114,111,118,105,100,101,100,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,40,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,69,110,117,109,84,111,65,110,97,108,121,115,105,115,46,99,112,112,0,69,110,117,109,84,111,65,110,97,108,121,115,105,115,0,105,110,112,117,116,32,111,112,116,105,111,110,32,104,97,115,32,97,110,32,101,109,112,116,121,32,110,97,109,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,79,112,116,105,111,110,115,47,79,112,116,105,111,110,115,46,99,112,112,0,65,100,100,79,112,116,105,111,110,0,79,112,116,105,111,110,32,34,0,34,32,104,97,115,32,97,32,112,114,111,116,101,99,116,101,100,32,99,104,97,114,97,99,116,101,114,32,34,46,34,0,34,32,104,97,115,32,97,32,112,114,111,116,101,99,116,101,100,32,99,104,97,114,97,99,116,101,114,32,34,91,34,0,34,32,104,97,115,32,97,32,112,114,111,116,101,99,116,101,100,32,99,104,97,114,97,99,116,101,114,32,34,93,34,0,79,112,116,105,111,110,115,32,34,0,34,32,102,111,117,110,100,32,109,117,108,116,105,112,108,101,32,116,105,109,101,115,0,84,104,101,32,100,121,110,97,109,105,99,95,99,97,115,116,32,102,114,111,109,32,79,98,106,101,99,116,42,32,116,111,32,79,112,116,105,111,110,42,32,105,115,32,102,97,105,108,105,110,103,46,10,0,65,32,113,117,105,99,107,32,113,111,114,107,97,114,111,117,110,100,32,99,111,110,115,105,115,116,115,32,111,102,32,117,115,105,110,103,32,97,32,67,45,108,105,107,101,32,99,97,115,116,10,0,79,112,101,110,32,79,112,116,105,111,110,115,46,99,112,112,32,97,110,100,32,99,104,97,110,103,101,32,116,104,101,32,100,121,110,97,109,105,99,95,99,97,115,116,32,105,110,32,79,112,116,105,111,110,115,58,58,71,101,116,79,112,116,105,111,110,32,98,121,32,97,32,67,45,108,105,107,101,32,99,97,115,116,10,0,77,97,107,101,32,116,104,101,32,102,105,120,32,97,98,111,118,101,32,97,110,100,32,114,101,99,111,109,112,105,108,101,32,73,83,83,77,0,71,101,116,79,112,116,105,111,110,0,67,97,110,110,111,116,32,114,101,99,111,118,101,114,32,102,105,101,108,100,32,34,0,34,32,102,111,114,32,97,110,32,111,112,116,105,111,110,32,111,102,32,116,121,112,101,32,0,37,100,93,0,37,100,120,0,109,100,46,103,101,111,109,101,116,114,121,46,98,101,100,0,105,116,101,114,97,116,105,111,110,32,0,32,32,116,105,109,101,32,91,121,114,93,58,32,0,32,40,116,105,109,101,32,115,116,101,112,58,32,0,32,32,32,99,111,109,112,117,116,105,110,103,32,116,104,101,114,109,97,108,32,114,101,103,105,109,101,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,110,101,119,32,103,114,111,117,110,100,105,110,103,32,108,105,110,101,32,112,111,115,105,116,105,111,110,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,103,108,97,99,105,97,108,32,105,115,111,115,116,97,116,105,99,32,97,100,106,117,115,116,109,101,110,116,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,114,101,113,117,101,115,116,101,100,32,111,117,116,112,117,116,115,10,0,32,32,32,99,104,101,99,107,112,111,105,110,116,105,110,103,32,109,111,100,101,108,32,10,0,10,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,118,101,108,111,99,105,116,121,32,97,110,100,32,116,101,109,112,101,114,97,116,117,114,101,32,102,111,114,32,115,116,101,112,58,32,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,0,10,32,32,32,45,45,32,99,111,109,112,117,116,105,110,103,32,110,101,119,32,118,101,108,111,99,105,116,121,32,45,45,32,10,10,0,10,32,32,32,45,45,32,99,111,109,112,117,116,105,110,103,32,110,101,119,32,116,101,109,112,101,114,97,116,117,114,101,32,45,45,10,10,0,32,32,32,99,104,101,99,107,105,110,103,32,115,116,101,97,100,121,115,116,97,116,101,32,99,111,110,118,101,114,103,101,110,99,101,10,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,115,116,101,97,100,121,115,116,97,116,101,32,105,116,101,114,97,116,105,111,110,115,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,115,116,101,97,100,121,115,116,97,116,101,95,99,111,114,101,46,99,112,112,0,115,116,101,97,100,121,115,116,97,116,101,99,111,110,118,101,114,103,101,110,99,101,0,32,32,32,84,101,109,112,101,114,97,116,117,114,101,32,99,111,110,118,101,114,103,101,110,99,101,58,32,110,111,114,109,40,100,116,41,47,110,111,114,109,40,116,41,0,32,32,32,99,111,109,112,117,116,105,110,103,32,109,97,115,115,32,116,114,97,110,115,112,111,114,116,10,0,32,32,32,99,97,108,108,32,102,114,101,101,32,115,117,114,102,97,99,101,32,99,111,109,112,117,116,97,116,105,111,110,97,108,32,99,111,114,101,10,0,32,32,32,99,97,108,108,32,99,111,109,112,117,116,97,116,105,111,110,97,108,32,99,111,114,101,10,0,101,120,116,114,117,100,105,110,103,32,115,111,108,117,116,105,111,110,32,102,114,111,109,32,98,97,115,101,46,46,46,10,0,101,120,116,114,117,100,105,110,103,32,115,111,108,117,116,105,111,110,32,102,114,111,109,32,116,111,112,46,46,46,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,116,101,109,112,101,114,97,116,117,114,101,115,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,109,101,108,116,105,110,103,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,115,109,98,32,10,0,109,100,46,105,110,118,101,114,115,105,111,110,46,116,121,112,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,111,110,116,114,111,108,47,67,114,101,97,116,101,80,97,114,97,109,101,116,101,114,115,67,111,110,116,114,111,108,46,99,112,112,0,67,114,101,97,116,101,80,97,114,97,109,101,116,101,114,115,67,111,110,116,114,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,105,110,99,111,109,112,108,101,116,101,95,97,100,106,111,105,110,116,0,109,100,46,105,110,118,101,114,115,105,111,110,46,110,115,116,101,112,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,99,111,115,116,95,102,117,110,99,116,105,111,110,95,116,104,114,101,115,104,111,108,100,0,109,100,46,105,110,118,101,114,115,105,111,110,46,115,116,101,112,95,116,104,114,101,115,104,111,108,100,0,109,100,46,105,110,118,101,114,115,105,111,110,46,103,114,97,100,105,101,110,116,95,115,99,97,108,105,110,103,0,109,100,46,105,110,118,101,114,115,105,111,110,46,109,97,120,105,116,101,114,95,112,101,114,95,115,116,101,112,0,109,100,46,105,110,118,101,114,115,105,111,110,46,102,97,116,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,102,114,116,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,103,97,116,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,103,114,116,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,103,116,116,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,109,97,120,115,116,101,112,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,109,97,120,105,116,101,114,0,109,100,46,105,110,118,101,114,115,105,111,110,46,97,108,103,111,114,105,116,104,109,0,109,100,46,105,110,118,101,114,115,105,111,110,46,100,120,109,105,110,0,109,100,46,105,110,118,101,114,115,105,111,110,46,99,111,110,116,114,111,108,95,115,99,97,108,105,110,103,95,102,97,99,116,111,114,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,110,117,109,95,99,111,110,116,114,111,108,95,112,97,114,97,109,101,116,101,114,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,99,111,110,116,114,111,108,95,112,97,114,97,109,101,116,101,114,115,0,110,111,32,99,111,110,116,114,111,108,115,32,102,111,117,110,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,111,110,116,114,111,108,47,85,112,100,97,116,101,69,108,101,109,101,110,116,115,65,110,100,77,97,116,101,114,105,97,108,115,67,111,110,116,114,111,108,46,99,112,112,0,85,112,100,97,116,101,69,108,101,109,101,110,116,115,65,110,100,77,97,116,101,114,105,97,108,115,67,111,110,116,114,111,108,0,109,100,46,105,110,118,101,114,115,105,111,110,46,99,111,115,116,95,102,117,110,99,116,105,111,110,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,99,111,115,116,95,102,117,110,99,116,105,111,110,115,95,99,111,101,102,102,105,99,105,101,110,116,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,109,105,110,95,112,97,114,97,109,101,116,101,114,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,109,97,120,95,112,97,114,97,109,101,116,101,114,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,110,117,109,95,99,111,115,116,95,102,117,110,99,116,105,111,110,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,116,104,105,99,107,110,101,115,115,95,111,98,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,115,117,114,102,97,99,101,95,111,98,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,118,120,95,111,98,115,0,109,100,46,105,110,118,101,114,115,105,111,110,46,118,121,95,111,98,115,0,109,100,46,98,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,46,97,112,112,97,114,101,110,116,95,109,97,115,115,98,97,108,97,110,99,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,65,98,115,86,101,108,77,105,115,102,105,116,120,47,83,117,114,102,97,99,101,65,98,115,86,101,108,77,105,115,102,105,116,120,46,99,112,112,0,83,117,114,102,97,99,101,65,98,115,86,101,108,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,82,101,108,86,101,108,77,105,115,102,105,116,120,47,83,117,114,102,97,99,101,82,101,108,86,101,108,77,105,115,102,105,116,120,46,99,112,112,0,83,117,114,102,97,99,101,82,101,108,86,101,108,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,76,111,103,86,101,108,77,105,115,102,105,116,120,47,83,117,114,102,97,99,101,76,111,103,86,101,108,77,105,115,102,105,116,120,46,99,112,112,0,83,117,114,102,97,99,101,76,111,103,86,101,108,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,76,111,103,86,120,86,121,77,105,115,102,105,116,120,47,83,117,114,102,97,99,101,76,111,103,86,120,86,121,77,105,115,102,105,116,120,46,99,112,112,0,83,117,114,102,97,99,101,76,111,103,86,120,86,121,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,117,114,102,97,99,101,65,118,101,114,97,103,101,86,101,108,77,105,115,102,105,116,120,47,83,117,114,102,97,99,101,65,118,101,114,97,103,101,86,101,108,77,105,115,102,105,116,120,46,99,112,112,0,83,117,114,102,97,99,101,65,118,101,114,97,103,101,86,101,108,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,68,114,97,103,67,111,101,102,102,105,99,105,101,110,116,65,98,115,71,114,97,100,105,101,110,116,120,47,68,114,97,103,67,111,101,102,102,105,99,105,101,110,116,65,98,115,71,114,97,100,105,101,110,116,120,46,99,112,112,0,68,114,97,103,67,111,101,102,102,105,99,105,101,110,116,65,98,115,71,114,97,100,105,101,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,82,104,101,111,108,111,103,121,66,98,97,114,65,98,115,71,114,97,100,105,101,110,116,120,47,82,104,101,111,108,111,103,121,66,98,97,114,65,98,115,71,114,97,100,105,101,110,116,120,46,99,112,112,0,82,104,101,111,108,111,103,121,66,98,97,114,65,98,115,71,114,97,100,105,101,110,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,82,104,101,111,108,111,103,121,66,65,98,115,71,114,97,100,105,101,110,116,120,47,82,104,101,111,108,111,103,121,66,65,98,115,71,114,97,100,105,101,110,116,120,46,99,112,112,0,82,104,101,111,108,111,103,121,66,65,98,115,71,114,97,100,105,101,110,116,0,49,50,67,111,110,116,114,111,108,73,110,112,117,116,0,73,110,112,117,116,32,111,102,32,69,110,117,109,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,98,121,32,67,111,110,116,114,111,108,73,110,112,117,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,67,111,110,116,114,111,108,73,110,112,117,116,46,99,112,112,0,67,111,110,116,114,111,108,73,110,112,117,116,0,67,111,110,116,114,111,108,73,110,112,117,116,58,10,0,32,32,32,67,111,110,116,114,111,108,73,110,112,117,116,32,0,45,45,45,118,97,108,117,101,115,58,32,10,0,45,45,45,115,97,118,101,100,118,97,108,117,101,115,58,32,10,0,45,45,45,109,105,110,118,97,108,117,101,115,58,32,10,0,45,45,45,109,97,120,118,97,108,117,101,115,58,32,10,0,45,45,45,103,114,97,100,105,101,110,116,58,32,10,0,32,110,111,116,32,102,111,117,110,100,0,109,111,114,101,32,116,104,97,110,32,51,32,99,111,110,116,114,111,108,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,32,40,71,114,97,100,105,101,110,116,32,0,32,119,97,115,32,114,101,113,117,101,115,116,101,100,41,46,32,69,110,117,109,68,101,102,105,110,105,116,105,111,110,115,46,104,32,110,101,101,100,115,32,116,111,32,98,101,32,117,112,100,97,116,101,100,46,0,83,101,116,71,114,97,100,105,101,110,116,0,86,97,108,117,101,115,32,111,102,32,0,83,97,118,101,86,97,108,117,101,0,103,114,97,100,105,101,110,116,0,68,97,116,97,32,0,71,101,116,86,101,99,116,111,114,70,114,111,109,73,110,112,117,116,115,0,71,114,97,100,105,101,110,116,32,111,102,32,0,85,112,100,97,116,101,86,97,108,117,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,67,111,110,116,114,111,108,73,110,112,117,116,46,104,0,82,101,115,117,108,116,84,111,80,97,116,99,104,0,83,99,97,108,101,0,77,97,120,0,77,105,110,65,98,115,0,77,97,120,65,98,115,0,73,110,102,105,110,105,116,121,78,111,114,109,0,67,111,110,115,116,114,97,105,110,77,105,110,0,83,113,117,97,114,101,77,105,110,0,67,104,97,110,103,101,69,110,117,109,0,32,32,32,112,114,101,112,97,114,105,110,103,32,105,110,105,116,105,97,108,32,115,111,108,117,116,105,111,110,10,0,32,32,32,112,114,101,112,97,114,105,110,103,32,102,105,110,97,108,32,115,111,108,117,116,105,111,110,10,0,108,111,119,101,114,98,111,117,110,100,0,117,112,112,101,114,98,111,117,110,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,99,111,110,116,114,111,108,95,99,111,114,101,46,99,112,112,0,70,111,114,109,70,117,110,99,116,105,111,110,0,102,40,120,41,32,61,32,0,32,32,124,32,32,0,84,65,79,32,110,111,116,32,105,110,115,116,97,108,108,101,100,32,111,114,32,80,69,84,83,99,32,118,101,114,115,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,99,111,110,116,114,111,108,116,97,111,95,99,111,114,101,46,99,112,112,0,99,111,110,116,114,111,108,116,97,111,95,99,111,114,101,0,65,68,32,97,110,100,47,111,114,32,77,49,81,78,51,32,110,111,116,32,105,110,115,116,97,108,108,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,99,111,110,116,114,111,108,97,100,95,99,111,114,101,46,99,112,112,0,99,111,110,116,114,111,108,97,100,95,99,111,114,101,0,77,49,81,78,51,32,110,111,116,32,105,110,115,116,97,108,108,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,99,111,110,116,114,111,108,109,49,113,110,51,95,99,111,114,101,46,99,112,112,0,99,111,110,116,114,111,108,109,49,113,110,51,95,99,111,114,101,0,118,97,108,117,101,0,32,32,32,67,111,109,112,117,116,101,32,73,110,105,116,105,97,108,32,115,111,108,117,116,105,111,110,10,0,32,32,32,67,111,109,112,117,116,101,32,65,100,106,111,105,110,116,10,0,32,32,32,67,111,109,112,117,116,101,32,73,110,105,116,105,97,108,32,99,111,115,116,32,102,117,110,99,116,105,111,110,10,0,73,110,105,116,105,97,108,32,99,111,115,116,32,102,117,110,99,116,105,111,110,32,74,40,120,41,32,61,32,0,32,32,32,67,111,109,112,117,116,101,32,71,114,97,100,105,101,110,116,10,0,32,32,32,32,32,32,32,97,108,112,104,97,32,32,32,32,32,32,73,97,108,112,104,97,32,10,0,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,10,0,78,111,32,97,100,106,111,105,110,116,32,104,97,115,32,98,101,101,110,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,115,111,108,117,116,105,111,110,32,0,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,65,100,106,111,105,110,116,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,46,99,112,112,0,65,100,106,111,105,110,116,67,111,114,101,80,111,105,110,116,101,114,70,114,111,109,83,111,108,117,116,105,111,110,69,110,117,109,0,32,32,32,99,111,109,112,117,116,105,110,103,32,119,97,116,101,114,32,104,101,97,100,115,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,119,97,116,101,114,32,99,111,108,117,109,110,10,0,32,32,32,115,97,118,105,110,103,32,114,101,115,117,108,116,115,32,10,0,32,32,32,115,97,118,105,110,103,32,116,101,109,112,111,114,97,114,121,32,114,101,115,117,108,116,115,10,0,32,32,32,117,112,100,97,116,105,110,103,32,103,97,112,32,104,101,105,103,104,116,10,0,72,121,100,114,111,108,111,103,121,32,109,111,100,101,108,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,104,121,100,114,111,108,111,103,121,95,99,111,114,101,46,99,112,112,0,104,121,100,114,111,108,111,103,121,95,99,111,114,101,0,66,117,105,108,100,105,110,103,32,83,101,100,105,109,101,110,116,32,77,97,116,114,105,120,46,46,46,10,0,32,32,32,35,32,83,101,100,105,109,101,110,116,32,117,110,115,116,97,98,108,101,32,99,111,110,115,116,114,97,105,110,116,115,32,61,32,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,83,101,100,105,109,101,110,116,32,105,116,101,114,97,116,105,111,110,115,32,40,0,41,32,101,120,99,101,101,100,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,104,121,100,114,111,95,110,111,110,108,105,110,101,97,114,46,99,112,112,0,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,104,121,100,114,111,95,110,111,110,108,105,110,101,97,114,0,32,32,32,73,110,110,101,114,32,83,101,100,105,109,101,110,116,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,0,37,44,32,97,105,109,105,110,103,32,108,111,119,101,114,32,116,104,97,110,32,0,32,32,32,35,32,73,110,110,101,114,32,115,101,100,105,109,101,110,116,32,99,111,110,118,101,114,103,101,110,99,101,32,97,99,104,105,101,118,101,32,10,0,99,111,109,112,117,116,105,110,103,32,69,80,76,32,72,101,97,100,32,115,108,111,112,101,46,46,46,10,0,66,117,105,108,100,105,110,103,32,69,80,76,32,77,97,116,114,105,120,46,46,46,10,0,32,32,32,73,110,110,101,114,32,69,80,76,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,69,80,76,32,105,116,101,114,97,116,105,111,110,115,32,40,0,101,112,108,99,111,110,118,101,114,103,101,100,46,46,46,10,0,83,101,100,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,32,105,115,32,78,97,78,33,0,69,80,76,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,32,105,115,32,78,97,78,33,0,32,32,32,67,111,110,118,101,114,103,101,100,32,97,102,116,101,114,44,32,0,32,105,116,101,114,97,116,105,111,110,115,32,10,0,32,32,32,83,101,100,105,109,101,110,116,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,0,32,32,32,69,80,76,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,0,32,32,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,102,111,114,32,104,121,100,114,111,108,111,103,105,99,97,108,32,103,108,111,98,97,108,32,105,116,101,114,97,116,105,111,110,115,32,40,0,32,32,32,99,111,109,112,117,116,105,110,103,32,110,101,119,32,118,101,108,111,99,105,116,121,10,0,99,111,109,112,117,116,105,110,103,32,115,109,111,111,116,104,32,115,117,114,102,97,99,101,32,115,108,111,112,101,115,58,10,0,99,111,109,112,117,116,105,110,103,32,115,109,111,111,116,104,32,100,114,105,118,105,110,103,32,115,116,114,101,115,115,58,10,0,99,111,109,112,117,116,105,110,103,32,115,108,111,112,101,46,46,46,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,115,108,111,112,101,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,100,97,109,97,103,101,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,108,101,118,101,108,115,101,116,32,116,114,97,110,115,112,111,114,116,10,0,32,32,32,77,105,103,114,97,116,105,110,103,32,103,114,111,117,110,100,105,110,103,32,108,105,110,101,10,0,71,114,111,117,110,100,105,110,103,32,108,105,110,101,32,109,105,103,114,97,116,105,111,110,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,71,114,111,117,110,100,105,110,103,108,105,110,101,77,105,103,114,97,116,105,111,110,120,47,71,114,111,117,110,100,105,110,103,108,105,110,101,77,105,103,114,97,116,105,111,110,120,46,99,112,112,0,71,114,111,117,110,100,105,110,103,108,105,110,101,77,105,103,114,97,116,105,111,110,120,0,32,32,32,65,100,100,105,116,105,111,110,97,108,32,110,117,109,98,101,114,32,111,102,32,118,101,114,116,105,99,101,115,32,97,108,108,111,119,101,100,32,116,111,32,117,110,103,114,111,117,110,100,58,32,0,57,82,105,102,116,102,114,111,110,116,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,105,102,116,95,112,101,110,97,108,116,121,95,108,111,99,107,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,82,105,102,116,102,114,111,110,116,46,99,112,112,0,82,105,102,116,102,114,111,110,116,58,10,0,32,32,32,104,110,111,100,101,115,58,32,0,32,32,32,104,101,108,101,109,101,110,116,115,58,32,0,32,32,32,104,109,97,116,112,97,114,58,32,0,32,32,32,105,110,116,101,114,110,97,108,32,112,97,114,97,109,101,116,101,114,115,58,32,10,0,32,32,32,110,111,114,109,97,108,58,32,0,124,0,32,32,32,108,101,110,103,116,104,58,32,0,32,32,32,112,101,110,97,108,116,121,95,108,111,99,107,58,32,0,32,32,32,99,111,117,110,116,101,114,58,32,0,32,32,32,112,114,101,115,116,97,98,108,101,58,32,0,32,32,32,109,97,116,101,114,105,97,108,95,99,111,110,118,101,114,103,101,100,58,32,0,32,32,32,102,105,108,108,58,32,0,32,32,32,102,114,105,99,116,105,111,110,58,32,0,32,32,32,102,114,97,99,116,105,111,110,58,32,0,32,32,32,102,114,97,99,116,105,111,110,105,110,99,114,101,109,101,110,116,58,32,0,32,32,32,115,116,97,116,101,58,32,0,32,32,32,102,114,111,122,101,110,58,32,0,80,101,110,97,108,116,121,67,114,101,97,116,101,75,77,97,116,114,105,120,0,111,110,108,121,32,84,114,105,97,32,101,108,101,109,101,110,116,32,97,108,108,111,119,101,100,32,102,111,114,32,82,105,102,116,102,114,111,110,116,32,108,111,97,100,33,0,80,101,110,97,108,116,121,67,114,101,97,116,101,75,77,97,116,114,105,120,83,116,114,101,115,115,98,97,108,97,110,99,101,72,111,114,105,122,0,100,105,102,102,101,114,101,110,116,32,116,104,105,99,107,110,101,115,115,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,114,105,102,116,32,102,114,111,110,116,115,0,80,101,110,97,108,116,121,67,114,101,97,116,101,80,86,101,99,116,111,114,0,80,101,110,97,108,116,121,67,114,101,97,116,101,80,86,101,99,116,111,114,83,116,114,101,115,115,98,97,108,97,110,99,101,72,111,114,105,122,0,100,105,102,102,101,114,101,110,116,32,98,101,100,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,114,105,102,116,32,102,114,111,110,116,115,0,102,105,108,108,32,116,121,112,101,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,111,110,32,105,99,101,32,115,104,101,101,116,115,32,121,101,116,46,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,46,0,67,111,110,115,116,114,97,105,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,76,111,97,100,115,47,82,105,102,116,102,114,111,110,116,46,104,0,78,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,33,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,67,111,110,115,116,97,110,116,0,109,100,46,111,117,116,112,117,116,100,101,102,105,110,105,116,105,111,110,46,108,105,115,116,0,109,100,46,109,97,115,115,102,108,117,120,97,116,103,97,116,101,46,110,97,109,101,0,109,100,46,109,97,115,115,102,108,117,120,97,116,103,97,116,101,46,100,101,102,105,110,105,116,105,111,110,101,110,117,109,0,109,100,46,109,97,115,115,102,108,117,120,97,116,103,97,116,101,46,115,101,103,109,101,110,116,115,0,109,100,46,109,105,115,102,105,116,46,110,97,109,101,0,109,100,46,109,105,115,102,105,116,46,100,101,102,105,110,105,116,105,111,110,101,110,117,109,0,109,100,46,109,105,115,102,105,116,46,109,111,100,101,108,95,101,110,117,109,0,109,100,46,109,105,115,102,105,116,46,111,98,115,101,114,118,97,116,105,111,110,0,109,100,46,109,105,115,102,105,116,46,111,98,115,101,114,118,97,116,105,111,110,95,101,110,117,109,0,109,100,46,109,105,115,102,105,116,46,116,105,109,101,105,110,116,101,114,112,111,108,97,116,105,111,110,0,109,100,46,109,105,115,102,105,116,46,108,111,99,97,108,0,109,100,46,109,105,115,102,105,116,46,119,101,105,103,104,116,115,0,109,100,46,109,105,115,102,105,116,46,119,101,105,103,104,116,115,95,101,110,117,109,0,109,100,46,110,111,100,97,108,118,97,108,117,101,46,110,97,109,101,0,109,100,46,110,111,100,97,108,118,97,108,117,101,46,100,101,102,105,110,105,116,105,111,110,101,110,117,109,0,109,100,46,110,111,100,97,108,118,97,108,117,101,46,109,111,100,101,108,95,101,110,117,109,0,109,100,46,110,111,100,97,108,118,97,108,117,101,46,110,111,100,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,109,100,46,109,97,115,115,99,111,110,46,110,97,109,101,0,109,100,46,109,97,115,115,99,111,110,46,100,101,102,105,110,105,116,105,111,110,101,110,117,109,0,109,100,46,109,97,115,115,99,111,110,46,108,101,118,101,108,115,101,116,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121,46,110,97,109,101,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121,46,100,101,102,105,110,105,116,105,111,110,101,110,117,109,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121,46,110,97,109,101,120,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121,46,110,97,109,101,121,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+109032);allocate([46,97,108,112,104,97,0,109,100,46,109,97,115,115,99,111,110,97,120,112,98,121,46,98,101,116,97,0,111,117,116,112,117,116,32,100,101,102,105,110,105,116,105,111,110,32,101,110,117,109,32,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,79,117,116,112,117,116,68,101,102,105,110,105,116,105,111,110,115,46,99,112,112,0,67,114,101,97,116,101,79,117,116,112,117,116,68,101,102,105,110,105,116,105,111,110,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,77,97,115,115,99,111,110,97,120,112,98,121,46,104,0,32,77,97,115,115,99,111,110,97,120,112,98,121,58,32,0,32,32,32,32,110,97,109,101,120,58,32,0,32,32,32,32,110,97,109,101,121,58,32,0,32,32,32,32,97,108,112,104,97,58,32,0,32,32,32,32,98,101,116,97,58,32,0,49,50,77,97,115,115,99,111,110,97,120,112,98,121,0,49,48,68,101,102,105,110,105,116,105,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,77,97,115,115,99,111,110,46,104,0,32,77,97,115,115,99,111,110,58,32,0,32,32,32,32,108,101,118,101,108,115,101,116,58,32,0,32,32,32,32,77,58,32,0,55,77,97,115,115,99,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,78,111,100,97,108,118,97,108,117,101,46,104,0,32,78,111,100,97,108,118,97,108,117,101,58,32,0,32,32,32,32,109,111,100,101,108,95,101,110,117,109,58,32,0,32,32,32,32,110,111,100,101,58,32,0,49,48,78,111,100,97,108,118,97,108,117,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,77,105,115,102,105,116,46,104,0,32,77,105,115,102,105,116,58,32,0,32,32,32,32,111,98,115,101,114,118,97,116,105,111,110,95,101,110,117,109,58,32,0,32,32,32,32,119,101,105,103,104,116,115,95,101,110,117,109,58,32,0,32,32,32,32,116,105,109,101,105,110,116,101,114,112,111,108,97,116,105,111,110,58,32,0,32,32,32,32,108,111,99,97,108,58,32,0,54,77,105,115,102,105,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,47,77,97,115,115,102,108,117,120,97,116,103,97,116,101,46,104,0,32,77,97,115,115,102,108,117,120,97,116,103,97,116,101,58,32,0,32,32,32,32,110,117,109,115,101,103,109,101,110,116,115,58,32,0,32,32,32,101,108,101,109,101,110,116,58,32,120,49,44,32,121,49,44,32,120,50,44,32,121,50,58,10,0,49,52,77,97,115,115,102,108,117,120,97,116,103,97,116,101,73,100,69,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,116,104,101,32,114,101,115,112,111,110,115,101,32,102,111,114,32,111,117,116,112,117,116,32,100,101,102,105,110,105,116,105,111,110,32,0,32,98,101,99,97,117,115,101,32,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,105,116,115,101,108,102,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,79,117,116,112,117,116,68,101,102,105,110,105,116,105,111,110,115,82,101,115,112,111,110,115,101,120,47,79,117,116,112,117,116,68,101,102,105,110,105,116,105,111,110,115,82,101,115,112,111,110,115,101,120,46,99,112,112,0,79,117,116,112,117,116,68,101,102,105,110,105,116,105,111,110,115,82,101,115,112,111,110,115,101,120,0,49,48,80,101,110,116,97,73,110,112,117,116,0,32,32,32,80,101,110,116,97,73,110,112,117,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,80,101,110,116,97,73,110,112,117,116,46,99,112,112,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,102,111,114,32,116,121,112,101,32,0,73,110,112,117,116,32,112,114,111,118,105,100,101,100,32,105,115,32,110,111,116,32,97,32,84,104,105,99,107,110,101,115,115,32,40,101,110,117,109,95,116,121,112,101,32,105,115,32,0,83,101,116,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,80,101,110,116,97,73,110,112,117,116,46,104,0,83,101,116,0,71,101,116,73,110,112,117,116,85,112,84,111,67,117,114,114,101,110,116,84,105,109,101,65,118,101,114,97,103,101,115,0,71,101,116,73,110,112,117,116,65,108,108,84,105,109,101,65,118,101,114,97,103,101,115,0,49,48,84,101,116,114,97,73,110,112,117,116,0,32,32,32,84,101,116,114,97,73,110,112,117,116,32,0,32,91,0,93,32,40,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,84,101,116,114,97,73,110,112,117,116,46,99,112,112,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,98,101,99,97,117,115,101,32,120,105,110,112,117,116,32,105,115,32,111,102,32,116,121,112,101,32,0,65,88,80,89,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,98,101,99,97,117,115,101,32,105,110,112,117,116,66,32,105,115,32,111,102,32,116,121,112,101,32,0,80,111,105,110,116,119,105,115,101,77,105,110,0,80,111,105,110,116,119,105,115,101,77,97,120,0,80,111,105,110,116,119,105,115,101,68,105,118,105,100,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,110,112,117,116,115,47,46,46,47,46,47,73,110,112,117,116,115,47,84,101,116,114,97,73,110,112,117,116,46,104,0,83,112,97,119,110,83,101,103,73,110,112,117,116,0,69,120,116,114,117,100,101,0,86,101,114,116,105,99,97,108,108,121,73,110,116,101,103,114,97,116,101,0,71,101,116,73,110,112,117,116,68,101,114,105,118,97,116,105,118,101,65,118,101,114,97,103,101,86,97,108,117,101,0,71,101,116,73,110,112,117,116,86,97,108,117,101,0,105,60,48,32,124,124,32,106,60,48,32,124,124,32,107,60,48,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,98,97,109,103,47,84,114,105,97,110,103,108,101,46,99,112,112,0,84,114,105,97,110,103,108,101,0,105,62,61,110,98,118,32,124,124,32,106,62,61,110,98,118,32,124,124,32,107,62,61,110,98,118,0,107,62,61,50,48,48,48,48,0,79,112,116,105,109,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,98,97,109,103,47,77,101,115,104,46,99,112,112,0,82,101,97,100,77,101,115,104,0,58,32,91,0,32,32,32,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,101,32,103,101,111,109,101,116,114,121,32,102,114,111,109,32,116,104,101,32,50,100,32,109,101,115,104,10,0,110,98,116,32,111,114,32,110,98,118,32,105,115,32,110,101,103,97,116,105,118,101,32,40,77,101,115,104,32,101,109,112,116,121,63,41,0,66,117,105,108,100,71,101,111,109,101,116,114,121,70,114,111,109,77,101,115,104,0,83,111,109,101,32,68,111,117,98,108,101,32,101,100,103,101,32,105,110,32,116,104,101,32,109,101,115,104,44,32,116,104,101,32,110,117,109,98,101,114,32,105,115,32,0,44,32,110,98,101,52,61,0,112,114,111,98,108,101,109,32,105,110,32,71,101,111,109,101,116,114,121,32,114,101,99,111,110,115,116,114,117,99,116,105,111,110,58,32,97,110,32,101,100,103,101,32,111,110,32,98,111,117,110,100,97,114,121,32,105,115,32,100,117,112,108,105,99,97,116,101,100,32,40,100,111,117,98,108,101,32,101,108,101,109,101,110,116,63,41,0,84,104,101,32,101,100,103,101,32,40,0,44,0,41,32,98,101,108,111,110,103,115,32,116,111,32,109,111,114,101,32,116,104,97,110,32,50,32,116,114,105,97,110,103,108,101,115,32,40,0,69,100,103,101,32,0,32,111,102,32,116,114,105,97,110,103,108,101,32,0,65,110,32,101,100,103,101,32,98,101,108,111,110,103,115,32,116,111,32,109,111,114,101,32,116,104,97,110,32,50,32,116,114,105,97,110,103,108,101,115,0,32,32,32,32,32,32,32,32,32,105,110,102,111,32,111,110,32,77,101,115,104,58,10,0,32,32,32,32,32,32,32,32,32,32,32,32,45,32,110,117,109,98,101,114,32,111,102,32,118,101,114,116,105,99,101,115,32,32,32,32,61,32,0,32,32,32,32,32,32,32,32,32,32,32,32,45,32,110,117,109,98,101,114,32,111,102,32,116,114,105,97,110,103,108,101,115,32,32,32,61,32,0,32,32,32,32,32,32,32,32,32,32,32,32,45,32,110,117,109,98,101,114,32,111,102,32,103,105,118,101,110,32,101,100,103,101,115,32,61,32,0,32,32,32,32,32,32,32,32,32,32,32,32,45,32,110,117,109,98,101,114,32,111,102,32,97,108,108,32,101,100,103,101,115,32,32,32,61,32,0,32,32,32,32,32,32,32,32,32,32,32,32,45,32,69,117,108,101,114,32,110,117,109,98,101,114,32,49,32,45,32,110,98,32,111,102,32,104,111,108,101,115,32,61,32,0,32,32,32,67,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,101,32,101,100,103,101,115,32,0,111,104,32,110,111,46,46,46,10,0,112,114,111,98,108,101,109,32,105,110,32,101,100,103,101,32,99,111,110,115,116,114,117,99,116,105,111,110,32,112,114,111,99,101,115,115,58,32,107,33,61,110,98,101,32,40,115,104,111,117,108,100,32,110,111,116,32,104,97,112,112,101,110,41,0,118,33,61,101,100,103,101,115,91,105,48,32,93,46,118,91,106,48,93,58,32,116,104,105,115,32,115,104,111,117,108,100,32,110,111,116,32,104,97,112,112,101,110,32,97,115,32,116,104,101,32,118,101,114,116,101,120,32,98,101,108,111,110,103,115,32,116,111,32,116,104,105,115,32,101,100,103,101,0,110,98,115,117,98,100,111,109,97,105,110,115,32,115,104,111,117,108,100,32,98,101,32,48,0,32,32,32,32,32,32,84,104,101,32,78,117,109,98,101,114,32,111,102,32,115,117,98,32,100,111,109,97,105,110,32,61,32,0,107,33,61,32,110,98,115,117,98,100,111,109,97,105,110,115,0,32,32,32,110,117,109,98,101,114,32,111,102,32,118,101,114,116,105,99,101,115,32,61,32,0,10,32,32,32,110,117,109,98,101,114,32,111,102,32,101,100,103,101,115,32,61,32,0,71,104,46,99,111,101,102,73,99,111,111,114,60,61,48,32,105,110,32,105,110,102,101,114,101,100,32,71,101,111,109,101,116,114,121,32,40,116,104,105,115,32,115,104,111,117,108,100,32,110,111,116,32,104,97,112,112,101,110,41,0,112,114,111,98,108,101,109,32,105,110,32,69,100,103,101,52,32,99,111,110,115,116,114,117,99,116,105,111,110,58,32,107,32,33,61,32,105,0,99,111,101,102,73,99,111,111,114,32,115,104,111,117,108,100,32,98,101,32,112,111,115,105,116,105,118,101,44,32,97,32,112,114,111,98,108,101,109,32,105,110,32,116,104,101,32,103,101,111,109,101,116,114,121,32,105,115,32,108,105,107,101,108,121,0,83,101,116,73,110,116,67,111,111,114,0,65,114,101,97,32,111,102,32,84,114,105,97,110,103,108,101,32,0,32,60,32,48,32,40,100,101,116,61,0,70,97,116,97,108,32,101,114,114,111,114,58,32,115,111,109,101,32,116,114,105,97,110,103,108,101,115,32,104,97,118,101,32,110,101,103,97,116,105,118,101,32,97,114,101,97,115,44,32,115,101,101,32,97,98,111,118,101,0,84,104,101,114,101,32,97,114,101,32,0,32,100,111,117,98,108,101,32,101,100,103,101,115,32,105,110,32,116,104,101,32,109,101,115,104,0,82,101,99,111,110,115,116,114,117,99,116,69,120,105,115,116,105,110,103,77,101,115,104,0,32,44,32,0,41,32,98,101,108,111,110,103,115,32,116,111,32,109,111,114,101,32,116,104,97,110,32,50,32,116,114,105,97,110,103,108,101,115,0,76,111,115,116,32,98,111,117,110,100,97,114,121,32,101,100,103,101,115,32,0,32,58,32,0,79,116,104,101,114,32,108,111,115,116,32,98,111,117,110,100,97,114,121,32,101,100,103,101,115,32,110,111,116,32,115,104,111,119,110,46,46,46,10,0,32,98,111,117,110,100,97,114,121,32,101,100,103,101,115,32,40,102,114,111,109,32,116,104,101,32,103,101,111,109,101,116,114,121,41,32,97,114,101,32,110,111,116,32,100,101,102,105,110,101,100,32,97,115,32,109,101,115,104,32,101,100,103,101,115,0,82,101,99,111,110,115,116,114,117,99,116,69,120,105,115,116,105,110,103,77,101,115,104,58,32,65,108,108,32,116,104,101,32,118,101,114,116,105,99,101,115,32,97,114,101,32,97,108,105,103,110,101,100,0,119,101,32,108,111,115,116,32,0,32,101,120,105,115,116,105,110,103,32,101,100,103,101,115,32,111,116,104,101,114,32,0,110,117,109,98,101,114,32,111,102,32,116,114,105,97,110,103,108,101,115,32,101,100,103,101,115,32,97,108,111,110,101,32,61,32,0,82,101,99,111,110,115,116,114,117,99,116,69,120,105,115,116,105,110,103,77,101,115,104,32,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,112,114,111,98,108,101,109,32,119,105,116,104,32,116,104,101,32,101,100,103,101,32,110,117,109,98,101,114,32,0,84,104,105,115,32,101,100,103,101,32,105,115,32,111,110,32,103,101,111,109,101,116,114,105,99,97,108,32,101,100,103,101,32,110,117,109,98,101,114,32,0,116,104,101,32,118,101,114,116,101,120,32,110,117,109,98,101,114,32,0,32,111,102,32,116,104,105,115,32,101,100,103,101,32,105,115,32,97,32,103,101,111,109,101,116,114,105,99,32,66,97,109,103,86,101,114,116,101,120,32,110,117,109,98,101,114,32,0,32,111,102,32,116,104,105,115,32,101,100,103,101,32,105,115,32,97,32,103,101,111,109,101,116,114,105,99,32,69,100,103,101,32,110,117,109,98,101,114,32,0,73,116,115,32,112,111,105,110,116,101,114,32,105,115,32,0,84,104,105,115,32,101,100,103,101,32,105,115,32,111,110,32,103,101,111,109,101,116,114,121,32,97,110,100,32,104,97,115,32,110,111,32,97,100,106,97,99,101,110,116,32,101,100,103,101,32,40,111,112,101,110,32,99,117,114,118,101,41,32,97,110,100,32,111,110,101,32,111,102,32,116,104,101,32,116,105,112,32,105,115,32,110,111,116,32,114,101,113,117,105,114,101,100,10,0,83,101,101,32,97,98,111,118,101,32,40,109,105,103,104,116,32,98,101,32,99,114,121,112,116,105,99,46,46,46,41,0,86,101,114,116,101,120,32,0,32,100,111,101,115,32,110,111,116,32,98,101,108,111,110,103,32,116,111,32,97,110,121,32,101,108,101,109,101,110,116,10,0,79,114,112,104,97,110,32,102,111,117,110,100,32,105,110,32,109,101,115,104,44,32,115,101,101,32,105,100,115,32,97,98,111,118,101,0,65,116,32,108,101,97,115,116,32,111,110,101,32,115,117,98,100,111,109,97,105,110,32,105,115,32,101,109,112,116,121,0,84,114,105,97,110,103,108,101,82,101,102,101,114,101,110,99,101,76,105,115,116,0,105,110,99,111,110,115,105,115,116,101,110,116,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,40,67,111,110,116,97,99,116,32,73,83,83,77,32,100,101,118,101,108,111,112,101,114,115,41,0,65,100,100,86,101,114,116,101,120,0,67,97,110,110,111,116,32,97,100,100,32,97,32,118,101,114,116,101,120,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,46,32,67,104,101,99,107,32,100,117,112,108,105,99,97,116,101,115,0,78,111,116,32,101,110,111,117,103,104,32,116,114,105,97,110,103,108,101,115,0,115,119,97,112,32,116,104,101,32,112,111,105,110,116,32,115,32,105,115,32,111,110,32,97,32,101,100,103,101,0,33,97,46,116,32,124,124,32,33,98,46,116,0,70,111,114,99,101,69,100,103,101,0,33,118,50,0,33,118,49,32,124,124,32,33,118,50,0,76,111,111,112,32,105,110,32,102,111,114,99,105,110,103,32,69,103,100,101,44,32,110,98,32,100,101,32,115,119,97,112,61,0,44,32,110,98,32,111,102,32,116,114,121,32,115,119,97,112,32,40,0,41,32,116,111,111,32,98,105,103,0,107,62,61,50,48,48,48,0,84,104,101,32,98,111,117,110,100,97,114,121,32,105,115,32,110,111,116,32,99,108,111,115,101,58,32,97,108,108,32,116,114,105,97,110,103,108,101,115,32,97,114,101,32,111,117,116,115,105,100,101,0,70,105,110,100,83,117,98,68,111,109,97,105,110,0,107,33,61,110,98,115,117,98,100,111,109,97,105,110,115,0,98,97,100,32,100,101,102,105,110,105,116,105,111,110,32,111,102,32,83,117,98,83,111,109,97,105,110,32,0,109,97,114,107,91,71,101,116,73,100,40,116,116,41,93,62,61,48,0,33,71,104,46,110,98,101,0,77,97,107,101,71,101,111,109,69,100,103,101,84,111,69,100,103,101,0,66,85,71,58,32,116,104,101,32,103,101,111,109,101,116,114,105,99,97,108,32,101,100,103,101,32,0,32,105,115,32,111,110,32,110,111,32,101,100,103,101,32,99,117,114,118,101,10,0,83,101,101,32,97,98,111,118,101,0,110,111,32,115,116,97,114,116,105,110,103,32,116,114,105,97,110,103,108,101,32,112,114,111,118,105,100,101,100,32,97,110,100,32,110,111,32,113,117,97,100,116,114,101,101,32,97,118,97,105,108,97,98,108,101,0,84,114,105,97,110,103,108,101,70,105,110,100,70,114,111,109,67,111,111,114,100,0,112,114,111,98,108,101,109,32,119,104,105,108,101,32,116,114,121,105,110,103,32,116,111,32,102,105,110,100,32,110,101,97,114,101,115,116,32,118,101,114,116,101,120,32,102,114,111,109,32,97,32,103,105,118,101,110,32,112,111,105,110,116,46,32,78,111,32,111,117,116,112,117,116,32,102,111,117,110,100,0,110,111,32,116,114,105,97,110,103,108,101,32,105,115,32,97,115,115,111,99,105,97,116,101,100,32,116,111,32,118,101,114,116,101,120,32,110,117,109,98,101,114,32,0,32,40,111,114,112,104,97,110,63,41,0,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,105,116,101,114,97,116,105,111,110,32,114,101,97,99,104,101,100,32,40,116,104,114,101,115,104,111,108,100,32,61,32,0,41,46,0,107,60,48,0,67,108,111,115,101,66,111,117,110,100,97,114,121,69,100,103,101,0,107,107,107,62,61,49,48,48,48,0,73,74,50,61,61,48,0,97,49,60,48,32,124,124,32,97,49,62,61,51,0,83,119,97,112,70,111,114,70,111,114,99,105,110,103,69,100,103,101,0,40,100,101,116,49,60,61,48,32,41,32,124,124,32,40,100,101,116,50,60,61,48,41,0,40,100,101,116,115,97,62,61,48,41,32,124,124,32,40,100,101,116,115,98,60,61,48,41,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,116,111,111,108,107,105,116,115,47,103,115,108,47,46,46,47,46,46,47,115,104,97,114,101,100,47,46,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,82,105,103,104,116,32,104,97,110,100,32,115,105,100,101,32,118,101,99,116,111,114,32,111,102,32,115,105,122,101,32,0,44,32,119,104,101,110,32,109,97,116,114,105,120,32,105,115,32,111,102,32,115,105,122,101,32,0,45,0,32,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,116,111,111,108,107,105,116,115,47,103,115,108,47,68,101,110,115,101,71,115,108,83,111,108,118,101,46,99,112,112,0,68,101,110,115,101,71,115,108,83,111,108,118,101,0,83,116,105,102,102,110,101,115,115,32,109,97,116,114,105,120,32,115,104,111,117,108,100,32,98,101,32,115,113,117,97,114,101,33,0,51,49,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,46,99,112,112,0,56,65,110,97,108,121,115,105,115,0,51,50,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,65,100,106,111,105,110,116,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,46,99,112,112,0,50,48,65,100,106,111,105,110,116,72,111,114,105,122,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,65,100,106,111,105,110,116,72,111,114,105,122,65,110,97,108,121,115,105,115,46,99,112,112,0,69,120,97,99,116,32,97,100,106,111,105,110,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,102,111,114,32,76,49,76,50,32,109,111,100,101,108,0,67,114,101,97,116,101,75,77,97,116,114,105,120,76,49,76,50,0,67,114,101,97,116,101,75,77,97,116,114,105,120,70,83,0,67,114,101,97,116,101,80,86,101,99,116,111,114,72,79,0,67,114,101,97,116,101,80,86,101,99,116,111,114,70,83,0,99,111,110,116,114,111,108,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,58,32,0,71,114,97,100,105,101,110,116,74,68,114,97,103,71,114,97,100,105,101,110,116,0,71,114,97,100,105,101,110,116,74,66,98,97,114,71,114,97,100,105,101,110,116,0,71,114,97,100,105,101,110,116,74,66,71,114,97,100,105,101,110,116,0,71,114,97,100,105,101,110,116,74,68,114,97,103,83,83,65,0,71,114,97,100,105,101,110,116,74,68,114,97,103,72,121,100,114,111,83,83,65,0,71,114,97,100,105,101,110,116,74,66,98,97,114,83,83,65,0,71,114,97,100,105,101,110,116,74,66,83,83,65,0,71,114,97,100,105,101,110,116,74,68,83,83,65,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,72,111,114,105,122,0,50,52,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,0,109,100,46,98,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,65,110,97,108,121,115,105,115,46,99,112,112,0,67,111,110,116,114,111,108,32,0,114,101,115,112,111,110,115,101,32,0,50,53,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,0,109,100,46,98,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,46,115,112,99,116,104,105,99,107,110,101,115,115,0,109,100,46,98,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,46,111,109,101,103,97,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,50,65,110,97,108,121,115,105,115,46,99,112,112,0,115,117,114,102,97,99,101,32,115,108,111,112,101,32,105,115,32,122,101,114,111,0,67,114,101,97,116,101,68,48,0,50,56,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,111,102,116,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,66,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,83,111,102,116,65,110,97,108,121,115,105,115,46,99,112,112,0,50,51,66,97,108,97,110,99,101,118,101,108,111,99,105,116,121,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,66,97,108,97,110,99,101,118,101,108,111,99,105,116,121,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,98,97,108,97,110,99,101,116,104,105,99,107,110,101,115,115,46,116,104,105,99,107,101,110,105,110,103,95,114,97,116,101,0,50,52,76,50,80,114,111,106,101,99,116,105,111,110,66,97,115,101,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,76,50,80,114,111,106,101,99,116,105,111,110,66,97,115,101,65,110,97,108,121,115,105,115,46,99,112,112,0,50,51,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,65,110,97,108,121,115,105,115,0,109,100,46,100,97,109,97,103,101,46,101,108,101,109,101,110,116,105,110,116,101,114,112,0,109,100,46,100,97,109,97,103,101,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,109,100,46,100,97,109,97,103,101,46,115,112,99,100,97,109,97,103,101,0,109,100,46,100,97,109,97,103,101,46,68,0,109,100,46,100,97,109,97,103,101,46,109,97,120,105,116,101,114,0,109,100,46,100,97,109,97,103,101,46,109,97,120,95,100,97,109,97,103,101,0,109,100,46,100,97,109,97,103,101,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,109,100,46,100,97,109,97,103,101,46,99,49,0,109,100,46,100,97,109,97,103,101,46,99,50,0,109,100,46,100,97,109,97,103,101,46,99,51,0,109,100,46,100,97,109,97,103,101,46,99,52,0,109,100,46,100,97,109,97,103,101,46,104,101,97,108,105,110,103,0,109,100,46,100,97,109,97,103,101,46,101,113,117,105,118,95,115,116,114,101,115,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,68,97,109,97,103,101,69,118,111,108,117,116,105,111,110,65,110,97,108,121,115,105,115,46,99,112,112,0,67,114,101,97,116,101,68,97,109,97,103,101,70,73,110,112,117,116,80,114,97,108,111,110,103,0,77,112,105,32,118,101,99,116,111,114,32,114,101,113,117,105,114,101,115,32,99,111,109,112,105,108,97,116,105,111,110,32,111,102,32,77,80,73,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,47,73,115,115,109,86,101,99,46,104,0,73,115,115,109,86,101,99,0,118,101,99,116,111,114,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,32,32,32,99,111,109,112,117,116,105,110,103,32,100,97,109,97,103,101,32,97,110,97,108,121,116,105,99,97,108,108,121,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,100,97,109,97,103,101,32,117,115,105,110,103,32,115,111,117,114,99,101,32,116,101,114,109,32,105,110,32,97,100,118,101,99,116,105,111,110,32,115,99,104,101,109,101,10,0,68,97,109,97,103,101,32,108,97,119,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,68,97,109,97,103,101,120,47,68,97,109,97,103,101,120,46,99,112,112,0,68,97,109,97,103,101,120,0,50,49,83,116,114,101,115,115,98,97,108,97,110,99,101,65,110,97,108,121,115,105,115,0,109,100,46,99,111,110,115,116,97,110,116,115,46,103,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,111,95,105,99,101,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,70,83,114,101,99,111,110,100,105,116,105,111,110,105,110,103,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,102,101,95,83,83,65,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,102,101,95,72,79,0,102,105,110,105,116,101,32,101,108,101,109,101,110,116,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,116,114,101,115,115,98,97,108,97,110,99,101,65,110,97,108,121,115,105,115,46,99,112,112,0,109,111,100,101,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,109,100,46,109,101,115,104,46,122,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,98,111,114,100,101,114,72,79,0,105,102,32,118,101,114,116,105,99,101,115,95,116,121,112,101,32,105,115,32,83,83,65,72,79,44,32,121,111,117,32,115,104,111,117,100,32,104,97,118,101,32,110,111,100,101,111,110,72,79,32,111,114,32,110,111,100,101,111,110,83,83,65,0,105,102,32,118,101,114,116,105,99,101,115,95,116,121,112,101,32,105,115,32,72,79,70,83,44,32,121,111,117,32,115,104,111,117,100,32,104,97,118,101,32,110,111,100,101,111,110,72,79,32,111,114,32,110,111,100,101,111,110,70,83,0,105,102,32,118,101,114,116,105,99,101,115,95,116,121,112,101,32,105,115,32,83,83,65,70,83,44,32,121,111,117,32,115,104,111,117,100,32,104,97,118,101,32,110,111,100,101,111,110,83,83,65,32,111,114,32,110,111,100,101,111,110,70,83,0,109,100,46,114,105,102,116,115,46,110,117,109,114,105,102,116,115,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,118,101,114,116,101,120,95,112,97,105,114,105,110,103,0,109,100,46,114,105,102,116,115,46,114,105,102,116,115,116,114,117,99,116,0,65,112,112,114,111,120,105,109,97,116,105,111,110,32,0,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,109,100,46,109,97,116,101,114,105,97,108,115,46,116,121,112,101,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,108,111,97,100,105,110,103,102,111,114,99,101,120,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,108,111,97,100,105,110,103,102,111,114,99,101,121,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,108,111,97,100,105,110,103,102,111,114,99,101,122,0,109,100,46,102,114,105,99,116,105,111,110,46,99,111,101,102,102,105,99,105,101,110,116,99,111,117,108,111,109,98,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,101,115,116,111,108,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,101,108,116,111,108,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,97,98,115,116,111,108,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,105,115,110,101,119,116,111,110,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,109,97,120,105,116,101,114,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,112,101,110,97,108,116,121,95,102,97,99,116,111,114,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,105,102,116,95,112,101,110,97,108,116,121,95,116,104,114,101,115,104,111,108,100,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,115,104,101,108,102,95,100,97,109,112,101,110,105,110,103,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,118,105,115,99,111,115,105,116,121,95,111,118,101,114,115,104,111,111,116,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,97,117,103,109,101,110,116,101,100,95,108,97,103,114,97,110,103,105,97,110,95,114,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,97,117,103,109,101,110,116,101,100,95,108,97,103,114,97,110,103,105,97,110,95,114,108,97,109,98,100,97,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,88,84,72,95,116,104,101,116,97,0,109,100,46,100,97,109,97,103,101,46,108,97,119,0,109,100,46,100,97,109,97,103,101,46,107,97,112,112,97,0,109,100,46,100,97,109,97,103,101,46,115,116,114,101,115,115,95,116,104,114,101,115,104,111,108,100,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,109,100,46,102,114,105,99,116,105,111,110,46,102,0,32,32,32,99,111,109,112,117,116,105,110,103,32,99,111,117,112,108,105,110,103,32,98,101,116,119,101,101,110,32,108,111,119,101,114,32,111,114,100,101,114,32,109,111,100,101,108,115,32,97,110,100,32,70,83,10,0,67,114,101,97,116,101,74,97,99,111,98,105,97,110,77,97,116,114,105,120,83,83,65,0,67,114,101,97,116,101,75,77,97,116,114,105,120,83,83,65,0,67,114,101,97,116,101,80,86,101,99,116,111,114,83,83,65,0,67,114,101,97,116,101,80,86,101,99,116,111,114,76,49,76,50,0,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,72,111,114,105,122,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,70,83,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,83,83,65,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,72,79,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,76,49,76,50,0,67,111,117,112,108,105,110,103,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,83,83,65,72,79,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,72,79,70,83,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,83,83,65,70,83,0,67,114,101,97,116,101,75,77,97,116,114,105,120,83,83,65,86,105,115,99,111,117,115,0,67,114,101,97,116,101,75,77,97,116,114,105,120,83,83,65,70,114,105,99,116,105,111,110,0,67,114,101,97,116,101,80,86,101,99,116,111,114,83,83,65,68,114,105,118,105,110,103,83,116,114,101,115,115,0,67,114,101,97,116,101,80,86,101,99,116,111,114,83,83,65,70,114,111,110,116,0,83,117,98,101,108,101,109,101,110,116,32,77,105,103,114,97,116,105,111,110,32,50,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,32,102,111,114,32,70,108,111,119,108,105,110,101,0,67,114,101,97,116,101,75,77,97,116,114,105,120,70,83,70,114,105,99,116,105,111,110,0,97,112,112,114,111,120,105,109,97,116,105,111,110,32,0,67,114,101,97,116,101,75,77,97,116,114,105,120,83,83,65,51,100,86,105,115,99,111,117,115,0,50,49,85,122,97,119,97,80,114,101,115,115,117,114,101,65,110,97,108,121,115,105,115,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,102,101,95,70,83,0,115,111,108,117,116,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,85,122,97,119,97,80,114,101,115,115,117,114,101,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,97,117,103,109,101,110,116,101,100,95,108,97,103,114,97,110,103,105,97,110,95,114,104,111,112,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,97,117,103,109,101,110,116,101,100,95,108,97,103,114,97,110,103,105,97,110,95,114,104,111,108,97,109,98,100,97,0,102,105,110,105,116,101,32,101,108,101,109,101,110,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,50,52,83,116,114,101,115,115,98,97,108,97,110,99,101,83,73,65,65,110,97,108,121,115,105,115,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,115,112,99,118,120,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,115,112,99,118,121,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,98,111,114,100,101,114,83,83,65,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,114,101,102,101,114,101,110,116,105,97,108,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,101,108,101,109,101,110,116,95,101,113,117,97,116,105,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,116,114,101,115,115,98,97,108,97,110,99,101,83,73,65,65,110,97,108,121,115,105,115,46,99,112,112,0,32,32,32,99,111,109,112,117,116,105,110,103,32,83,73,65,32,118,101,108,111,99,105,116,105,101,115,10,0,50,57,83,116,114,101,115,115,98,97,108,97,110,99,101,86,101,114,116,105,99,97,108,65,110,97,108,121,115,105,115,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,105,115,83,73,65,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,105,115,83,83,65,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,105,115,76,49,76,50,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,105,115,72,79,0,109,100,46,115,116,114,101,115,115,98,97,108,97,110,99,101,46,115,112,99,118,122,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,98,111,114,100,101,114,70,83,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,40,110,101,101,100,115,32,116,111,32,98,101,32,99,111,100,101,100,41,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+119272);allocate([110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,116,114,101,115,115,98,97,108,97,110,99,101,86,101,114,116,105,99,97,108,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,118,101,114,116,101,120,95,101,113,117,97,116,105,111,110,0,32,32,32,99,111,109,112,117,116,105,110,103,32,118,101,114,116,105,99,97,108,32,118,101,108,111,99,105,116,105,101,115,10,0,67,97,110,110,111,116,32,99,111,109,112,117,116,101,32,86,101,108,32,97,115,32,86,122,70,83,32,105,115,32,111,102,32,116,121,112,101,32,0,67,97,110,110,111,116,32,99,111,109,112,117,116,101,32,86,122,32,97,115,32,86,122,70,83,32,105,110,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,72,79,70,83,32,101,108,101,109,101,110,116,0,67,97,110,110,111,116,32,99,111,109,112,117,116,101,32,86,122,32,97,115,32,86,122,70,83,32,105,110,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,83,83,65,70,83,32,101,108,101,109,101,110,116,0,49,54,69,110,116,104,97,108,112,121,65,110,97,108,121,115,105,115,0,109,100,46,109,97,116,101,114,105,97,108,115,46,104,101,97,116,99,97,112,97,99,105,116,121,0,109,100,46,99,111,110,115,116,97,110,116,115,46,114,101,102,101,114,101,110,99,101,116,101,109,112,101,114,97,116,117,114,101,0,83,105,122,101,32,111,102,32,102,105,101,108,100,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,69,110,116,104,97,108,112,121,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,119,97,116,101,114,102,114,97,99,116,105,111,110,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,101,110,116,104,97,108,112,121,0,109,100,46,116,104,101,114,109,97,108,46,114,101,108,116,111,108,0,9,117,110,107,110,111,119,110,32,116,104,101,114,109,97,108,32,98,97,115,97,108,32,115,116,97,116,101,32,102,111,117,110,100,33,0,32,32,32,99,111,109,112,117,116,105,110,103,32,101,110,116,104,97,108,112,121,10,0,78,101,103,97,116,105,118,101,32,119,97,116,101,114,32,102,114,97,99,116,105,111,110,32,102,111,117,110,100,32,105,110,32,115,111,108,117,116,105,111,110,32,118,101,99,116,111,114,0,50,51,72,121,100,114,111,108,111,103,121,83,104,114,101,118,101,65,110,97,108,121,115,105,115,0,109,100,46,104,121,100,114,111,108,111,103,121,115,104,114,101,118,101,46,115,112,99,119,97,116,101,114,99,111,108,117,109,110,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,119,97,116,101,114,99,111,108,117,109,110,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,72,121,100,114,111,108,111,103,121,83,104,114,101,118,101,65,110,97,108,121,115,105,115,46,99,112,112,0,50,52,72,121,100,114,111,108,111,103,121,83,111,109,109,101,114,115,65,110,97,108,121,115,105,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,112,99,104,101,97,100,0,109,100,46,109,101,115,104,46,115,101,103,109,101,110,116,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,104,101,97,100,0,109,100,46,104,121,100,114,111,108,111,103,121,46,103,97,112,95,104,101,105,103,104,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,110,103,108,97,99,105,97,108,95,105,110,112,117,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,109,111,117,108,105,110,95,105,110,112,117,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,98,117,109,112,95,115,112,97,99,105,110,103,0,109,100,46,104,121,100,114,111,108,111,103,121,46,98,117,109,112,95,104,101,105,103,104,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,114,101,121,110,111,108,100,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,110,101,117,109,97,110,110,102,108,117,120,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,72,121,100,114,111,108,111,103,121,83,111,109,109,101,114,115,65,110,97,108,121,115,105,115,46,99,112,112,0,51,48,72,121,100,114,111,108,111,103,121,68,67,73,110,101,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,108,105,109,105,116,95,102,108,97,103,0,109,100,46,104,121,100,114,111,108,111,103,121,46,116,114,97,110,115,102,101,114,95,102,108,97,103,0,109,100,46,104,121,100,114,111,108,111,103,121,46,112,101,110,97,108,116,121,95,102,97,99,116,111,114,0,109,100,46,104,121,100,114,111,108,111,103,121,46,114,101,108,95,116,111,108,0,109,100,46,104,121,100,114,111,108,111,103,121,46,112,101,110,97,108,116,121,95,108,111,99,107,0,109,100,46,104,121,100,114,111,108,111,103,121,46,109,97,120,95,105,116,101,114,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,108,105,109,105,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,108,101,97,107,97,103,101,95,102,97,99,116,111,114,0,109,100,46,104,121,100,114,111,108,111,103,121,46,98,97,115,97,108,95,109,111,117,108,105,110,95,105,110,112,117,116,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,101,100,105,109,101,110,116,95,116,114,97,110,115,109,105,116,105,118,105,116,121,0,109,100,46,104,121,100,114,111,108,111,103,121,46,109,97,115,107,95,101,112,108,97,99,116,105,118,101,95,110,111,100,101,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,112,99,115,101,100,105,109,101,110,116,95,104,101,97,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,72,121,100,114,111,108,111,103,121,68,67,73,110,101,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,46,99,112,112,0,50,56,72,121,100,114,111,108,111,103,121,68,67,69,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,102,108,105,112,95,108,111,99,107,0,109,100,46,104,121,100,114,111,108,111,103,121,46,101,112,108,95,116,104,105,99,107,95,99,111,109,112,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,115,101,100,105,109,101,110,116,95,104,101,97,100,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,101,112,108,95,116,104,105,99,107,110,101,115,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,115,112,99,101,112,108,95,104,101,97,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,72,121,100,114,111,108,111,103,121,68,67,69,102,102,105,99,105,101,110,116,65,110,97,108,121,115,105,115,46,99,112,112,0,110,111,32,99,97,115,101,32,104,105,103,104,101,114,32,116,104,97,110,32,49,32,102,111,114,32,116,104,101,32,84,114,97,110,115,102,101,114,32,109,101,116,104,111,100,0,71,101,116,72,121,100,114,111,108,111,103,121,75,77,97,116,114,105,120,84,114,97,110,115,102,101,114,0,71,101,116,72,121,100,114,111,108,111,103,121,80,86,101,99,116,111,114,84,114,97,110,115,102,101,114,0,110,111,116,32,73,109,112,108,101,109,101,110,116,101,100,32,89,101,116,0,67,111,109,112,117,116,101,69,80,76,84,104,105,99,107,110,101,115,115,0,72,121,100,114,111,108,111,103,121,69,80,76,71,101,116,77,97,115,107,0,85,115,105,110,103,32,110,111,114,109,97,108,32,115,116,114,101,115,115,32,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,71,101,116,72,121,100,114,111,108,111,103,121,68,67,73,110,101,102,102,105,99,105,101,110,116,72,109,97,120,0,110,111,32,99,97,115,101,32,104,105,103,104,101,114,32,116,104,97,110,32,51,32,102,111,114,32,83,101,100,105,109,101,110,116,108,105,109,105,116,70,108,97,103,0,72,121,100,114,111,108,111,103,121,69,80,76,71,101,116,65,99,116,105,118,101,0,50,51,76,50,80,114,111,106,101,99,116,105,111,110,69,80,76,65,110,97,108,121,115,105,115,0,109,100,46,104,121,100,114,111,108,111,103,121,46,109,111,100,101,108,0,109,100,46,104,121,100,114,111,108,111,103,121,46,105,115,101,102,102,105,99,105,101,110,116,108,97,121,101,114,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,101,112,108,95,104,101,97,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,76,50,80,114,111,106,101,99,116,105,111,110,69,80,76,65,110,97,108,121,115,105,115,46,99,112,112,0,49,53,77,101,108,116,105,110,103,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,77,101,108,116,105,110,103,65,110,97,108,121,115,105,115,46,99,112,112,0,50,49,77,97,115,115,116,114,97,110,115,112,111,114,116,65,110,97,108,121,115,105,115,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,115,112,99,116,104,105,99,107,110,101,115,115,0,68,71,32,51,100,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,77,97,115,115,116,114,97,110,115,112,111,114,116,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,103,114,111,117,110,100,105,110,103,108,105,110,101,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,115,109,98,0,109,100,46,102,108,111,119,101,113,117,97,116,105,111,110,46,105,115,70,83,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,105,115,102,114,101,101,115,117,114,102,97,99,101,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,104,121,100,114,111,115,116,97,116,105,99,95,97,100,106,117,115,116,109,101,110,116,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,109,105,110,95,116,104,105,99,107,110,101,115,115,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,112,101,110,97,108,116,121,95,102,97,99,116,111,114,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,69,108,101,109,101,110,116,32,116,121,112,101,32,0,67,114,101,97,116,101,75,77,97,116,114,105,120,67,71,0,83,116,97,98,105,108,105,122,97,116,105,111,110,32,0,72,121,100,114,111,115,116,97,116,105,99,32,97,100,106,117,115,116,109,101,110,116,32,0,49,49,83,109,98,65,110,97,108,121,115,105,115,0,109,100,46,115,109,98,46,84,97,0,109,100,46,115,109,98,46,86,0,109,100,46,115,109,98,46,100,115,119,114,102,0,109,100,46,115,109,98,46,100,108,119,114,102,0,109,100,46,115,109,98,46,80,0,109,100,46,115,109,98,46,101,65,105,114,0,109,100,46,115,109,98,46,112,65,105,114,0,109,100,46,115,109,98,46,122,84,111,112,0,109,100,46,115,109,98,46,100,122,84,111,112,0,109,100,46,115,109,98,46,100,122,77,105,110,0,109,100,46,115,109,98,46,122,89,0,109,100,46,115,109,98,46,122,77,97,120,0,109,100,46,115,109,98,46,122,77,105,110,0,109,100,46,115,109,98,46,84,109,101,97,110,0,109,100,46,115,109,98,46,67,0,109,100,46,115,109,98,46,84,122,0,109,100,46,115,109,98,46,86,122,0,109,100,46,115,109,98,46,105,115,100,101,108,116,97,49,56,111,0,109,100,46,115,109,98,46,105,115,109,117,110,103,115,109,0,109,100,46,115,109,98,46,115,48,112,0,109,100,46,115,109,98,46,115,48,116,0,109,100,46,115,109,98,46,116,101,109,112,101,114,97,116,117,114,101,115,95,108,103,109,0,109,100,46,115,109,98,46,116,101,109,112,101,114,97,116,117,114,101,115,95,112,114,101,115,101,110,116,100,97,121,0,109,100,46,115,109,98,46,112,114,101,99,105,112,105,116,97,116,105,111,110,115,95,112,114,101,115,101,110,116,100,97,121,0,109,100,46,115,109,98,46,112,114,101,99,105,112,105,116,97,116,105,111,110,115,95,108,103,109,0,109,100,46,115,109,98,46,112,114,101,99,105,112,105,116,97,116,105,111,110,0,109,100,46,115,109,98,46,109,111,110,116,104,108,121,116,101,109,112,101,114,97,116,117,114,101,115,0,109,100,46,115,109,98,46,105,115,100,49,56,111,112,100,0,109,100,46,115,109,98,46,104,114,101,102,0,109,100,46,115,109,98,46,115,109,98,114,101,102,0,109,100,46,115,109,98,46,98,95,112,111,115,0,109,100,46,115,109,98,46,98,95,110,101,103,0,109,100,46,115,109,98,46,97,99,99,117,109,117,108,97,116,105,111,110,0,109,100,46,115,109,98,46,101,118,97,112,111,114,97,116,105,111,110,0,109,100,46,115,109,98,46,114,117,110,111,102,102,0,109,100,46,115,109,98,46,109,101,108,116,0,109,100,46,115,109,98,46,114,101,102,114,101,101,122,101,0,83,117,114,102,97,99,101,32,109,97,115,115,32,98,97,108,97,110,99,101,32,109,111,100,101,108,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,109,98,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,116,105,109,101,115,116,101,112,112,105,110,103,46,105,110,116,101,114,112,95,102,111,114,99,105,110,103,115,0,109,100,46,115,109,98,46,97,73,100,120,0,109,100,46,115,109,98,46,115,119,73,100,120,0,109,100,46,115,109,98,46,100,101,110,73,100,120,0,109,100,46,115,109,98,46,111,117,116,112,117,116,70,114,101,113,0,109,100,46,115,109,98,46,99,108,100,70,114,97,99,0,109,100,46,115,109,98,46,116,48,119,101,116,0,109,100,46,115,109,98,46,116,48,100,114,121,0,109,100,46,115,109,98,46,75,0,109,100,46,115,109,98,46,97,83,110,111,119,0,109,100,46,115,109,98,46,97,73,99,101,0,109,100,46,115,109,98,46,100,116,0,109,100,46,115,109,98,46,105,115,103,114,97,105,110,103,114,111,119,116,104,0,109,100,46,115,109,98,46,105,115,97,108,98,101,100,111,0,109,100,46,115,109,98,46,105,115,115,104,111,114,116,119,97,118,101,0,109,100,46,115,109,98,46,105,115,116,104,101,114,109,97,108,0,109,100,46,115,109,98,46,105,115,97,99,99,117,109,117,108,97,116,105,111,110,0,109,100,46,115,109,98,46,105,115,109,101,108,116,0,109,100,46,115,109,98,46,105,115,100,101,110,115,105,102,105,99,97,116,105,111,110,0,109,100,46,115,109,98,46,105,115,116,117,114,98,117,108,101,110,116,102,108,117,120,0,109,100,46,115,109,98,46,73,110,105,116,68,101,110,115,105,116,121,83,99,97,108,105,110,103,0,109,100,46,115,109,98,46,100,101,115,102,97,99,0,109,100,46,115,109,98,46,114,108,97,112,115,0,109,100,46,115,109,98,46,114,108,97,112,115,108,103,109,0,109,100,46,115,109,98,46,80,102,97,99,0,109,100,46,115,109,98,46,84,100,105,102,102,0,109,100,46,115,109,98,46,115,101,97,108,101,118,0,109,100,46,115,109,98,46,100,101,108,116,97,49,56,111,0,109,100,46,115,109,98,46,100,101,108,116,97,49,56,111,95,115,117,114,102,97,99,101,0,109,100,46,115,109,98,46,100,112,101,114,109,105,108,0,109,100,46,115,109,98,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,32,32,32,99,97,108,108,32,68,101,108,116,97,49,56,111,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,109,111,100,117,108,101,10,0,32,32,32,99,97,108,108,32,77,117,110,103,115,109,116,112,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,109,111,100,117,108,101,10,0,32,32,32,99,97,108,108,32,112,111,115,105,116,105,118,101,32,100,101,103,114,101,101,32,100,97,121,32,109,111,100,117,108,101,10,0,32,32,32,99,97,108,108,32,68,101,108,116,97,49,56,111,112,100,80,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,109,111,100,117,108,101,10,0,9,99,97,108,108,32,115,109,98,32,103,114,97,100,105,101,110,116,115,32,109,111,100,117,108,101,10,0,32,32,99,97,108,108,32,115,109,98,32,72,101,110,110,105,110,103,32,109,111,100,117,108,101,10,0,32,32,99,97,108,108,32,115,109,98,32,67,111,109,112,111,110,101,110,116,115,32,109,111,100,117,108,101,10,0,32,32,99,97,108,108,32,115,109,98,32,77,101,108,116,32,67,111,109,112,111,110,101,110,116,115,32,109,111,100,117,108,101,10,0,67,114,101,97,116,101,68,86,101,99,116,111,114,0,50,51,70,114,101,101,83,117,114,102,97,99,101,66,97,115,101,65,110,97,108,121,115,105,115,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,103,114,111,117,110,100,101,100,105,99,101,95,109,101,108,116,105,110,103,95,114,97,116,101,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,102,108,111,97,116,105,110,103,105,99,101,95,109,101,108,116,105,110,103,95,114,97,116,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,70,114,101,101,83,117,114,102,97,99,101,66,97,115,101,65,110,97,108,121,115,105,115,46,99,112,112,0,50,50,70,114,101,101,83,117,114,102,97,99,101,84,111,112,65,110,97,108,121,115,105,115,0,109,100,46,109,97,115,115,116,114,97,110,115,112,111,114,116,46,118,101,114,116,101,120,95,112,97,105,114,105,110,103,0,109,100,46,115,109,98,46,109,97,115,115,95,98,97,108,97,110,99,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,70,114,101,101,83,117,114,102,97,99,101,84,111,112,65,110,97,108,121,115,105,115,46,99,112,112,0,50,51,69,120,116,114,117,100,101,70,114,111,109,66,97,115,101,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,69,120,116,114,117,100,101,70,114,111,109,66,97,115,101,65,110,97,108,121,115,105,115,46,99,112,112,0,50,50,69,120,116,114,117,100,101,70,114,111,109,84,111,112,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,69,120,116,114,117,100,101,70,114,111,109,84,111,112,65,110,97,108,121,115,105,115,46,99,112,112,0,50,48,68,101,112,116,104,65,118,101,114,97,103,101,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,68,101,112,116,104,65,118,101,114,97,103,101,65,110,97,108,121,115,105,115,46,99,112,112,0,49,53,84,104,101,114,109,97,108,65,110,97,108,121,115,105,115,0,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,84,104,101,114,109,97,108,65,110,97,108,121,115,105,115,46,99,112,112,0,109,100,46,115,109,98,46,109,111,100,101,108,0,83,111,108,117,116,105,111,110,32,0,109,100,46,116,104,101,114,109,97,108,46,115,112,99,116,101,109,112,101,114,97,116,117,114,101,0,50,100,32,109,101,115,104,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,109,100,46,113,109,117,46,105,115,100,97,107,111,116,97,0,109,100,46,116,114,97,110,115,105,101,110,116,46,105,115,109,111,118,105,110,103,102,114,111,110,116,0,109,100,46,102,114,105,99,116,105,111,110,46,108,97,119,0,109,100,46,103,101,111,109,101,116,114,121,46,115,117,114,102,97,99,101,0,109,100,46,103,101,111,109,101,116,114,121,46,98,97,115,101,0,109,100,46,109,97,115,107,46,103,114,111,117,110,100,101,100,105,99,101,95,108,101,118,101,108,115,101,116,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,66,0,109,100,46,109,97,116,101,114,105,97,108,115,46,114,104,101,111,108,111,103,121,95,110,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,112,114,101,115,115,117,114,101,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,116,101,109,112,101,114,97,116,117,114,101,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,118,122,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,109,111,100,101,108,0,109,100,46,98,97,115,97,108,102,111,114,99,105,110,103,115,46,103,101,111,116,104,101,114,109,97,108,102,108,117,120,0,109,100,46,102,114,105,99,116,105,111,110,46,99,111,101,102,102,105,99,105,101,110,116,0,109,100,46,102,114,105,99,116,105,111,110,46,112,0,109,100,46,102,114,105,99,116,105,111,110,46,113,0,109,100,46,102,114,105,99,116,105,111,110,46,67,0,109,100,46,102,114,105,99,116,105,111,110,46,109,0,109,100,46,102,114,105,99,116,105,111,110,46,99,111,117,112,108,105,110,103,0,109,100,46,102,114,105,99,116,105,111,110,46,65,115,0,109,100,46,102,114,105,99,116,105,111,110,46,101,102,102,101,99,116,105,118,101,95,112,114,101,115,115,117,114,101,0,109,100,46,102,114,105,99,116,105,111,110,46,119,97,116,101,114,95,108,97,121,101,114,0,109,100,46,116,104,101,114,109,97,108,46,109,97,120,105,116,101,114,0,109,100,46,116,104,101,114,109,97,108,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,109,100,46,116,104,101,114,109,97,108,46,112,101,110,97,108,116,121,95,102,97,99,116,111,114,0,109,100,46,116,104,101,114,109,97,108,46,112,101,110,97,108,116,121,95,116,104,114,101,115,104,111,108,100,0,109,100,46,116,104,101,114,109,97,108,46,112,101,110,97,108,116,121,95,108,111,99,107,0,109,100,46,116,104,101,114,109,97,108,46,105,115,101,110,116,104,97,108,112,121,0,109,100,46,116,104,101,114,109,97,108,46,105,115,100,121,110,97,109,105,99,98,97,115,97,108,115,112,99,0,109,100,46,116,104,101,114,109,97,108,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,109,100,46,102,114,105,99,116,105,111,110,46,103,97,109,109,97,0,78,97,78,32,102,111,117,110,100,32,105,110,32,115,111,108,117,116,105,111,110,32,118,101,99,116,111,114,0,73,110,102,32,102,111,117,110,100,32,105,110,32,115,111,108,117,116,105,111,110,32,118,101,99,116,111,114,0,82,104,101,111,108,111,103,121,32,108,97,119,32,0,49,52,83,109,111,111,116,104,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,109,111,111,116,104,65,110,97,108,121,115,105,115,46,99,112,112,0,50,51,77,101,115,104,100,101,102,111,114,109,97,116,105,111,110,65,110,97,108,121,115,105,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,77,101,115,104,100,101,102,111,114,109,97,116,105,111,110,65,110,97,108,121,115,105,115,46,99,112,112,0,67,114,101,97,116,101,67,111,110,115,116,114,97,105,110,116,115,0,67,114,101,97,116,101,76,111,97,100,115,0,68,111,102,115,80,101,114,78,111,100,101,0,49,54,76,101,118,101,108,115,101,116,65,110,97,108,121,115,105,115,0,109,100,46,108,101,118,101,108,115,101,116,46,115,112,99,108,101,118,101,108,115,101,116,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,118,120,0,109,100,46,105,110,105,116,105,97,108,105,122,97,116,105,111,110,46,118,121,0,109,100,46,99,97,108,118,105,110,103,46,108,97,119,0,109,100,46,99,97,108,118,105,110,103,46,99,97,108,118,105,110,103,114,97,116,101,0,109,100,46,99,97,108,118,105,110,103,46,109,101,108,116,105,110,103,114,97,116,101,0,109,100,46,99,97,108,118,105,110,103,46,99,111,101,102,102,0,67,97,108,118,105,110,103,32,108,97,119,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,76,101,118,101,108,115,101,116,65,110,97,108,121,115,105,115,46,99,112,112,0,85,112,100,97,116,101,69,108,101,109,101,110,116,115,0,109,100,46,108,101,118,101,108,115,101,116,46,115,116,97,98,105,108,105,122,97,116,105,111,110,0,109,100,46,99,97,108,118,105,110,103,46,109,105,110,95,116,104,105,99,107,110,101,115,115,0,85,112,100,97,116,101,80,97,114,97,109,101,116,101,114,115,0,99,97,108,108,32,99,111,109,112,117,116,97,116,105,111,110,97,108,32,99,111,114,101,58,10,0,117,110,107,110,111,119,110,32,116,121,112,101,32,111,102,32,115,116,97,98,105,108,105,122,97,116,105,111,110,32,105,110,32,76,101,118,101,108,115,101,116,65,110,97,108,121,115,105,115,46,99,112,112,0,32,32,32,99,111,109,112,117,116,105,110,103,32,76,101,118,101,114,109,97,110,110,39,115,32,99,97,108,118,105,110,103,32,114,97,116,101,10,0,67,97,118,105,110,103,32,108,97,119,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,67,97,108,118,105,110,103,120,47,67,97,108,118,105,110,103,120,46,99,112,112,0,67,97,108,118,105,110,103,120,0,50,49,69,120,116,114,97,112,111,108,97,116,105,111,110,65,110,97,108,121,115,105,115,0,101,120,116,114,97,112,111,108,97,116,105,111,110,32,111,102,32,0,58,32,99,97,108,108,32,99,111,109,112,117,116,97,116,105,111,110,97,108,32,99,111,114,101,58,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,69,120,116,114,97,112,111,108,97,116,105,111,110,65,110,97,108,121,115,105,115,46,99,112,112,0,50,55,76,115,102,82,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,65,110,97,108,121,115,105,115,0,109,100,46,109,101,115,104,46,118,101,114,116,101,120,111,110,98,97,115,101,0,109,100,46,109,101,115,104,46,118,101,114,116,101,120,111,110,115,117,114,102,97,99,101,0,85,112,100,97,116,101,32,115,112,99,115,32,102,111,114,32,114,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,58,10,0,115,109,111,111,116,104,105,110,103,32,108,115,102,32,115,108,111,112,101,10,0,99,97,108,108,32,99,111,109,112,117,116,97,116,105,111,110,97,108,32,99,111,114,101,32,102,111,114,32,114,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,105,110,32,115,116,101,112,32,0,58,10,0,32,32,32,99,104,101,99,107,105,110,103,32,114,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,99,111,110,118,101,114,103,101,110,99,101,10,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,114,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,105,116,101,114,97,116,105,111,110,115,32,0,32,114,101,97,99,104,101,100,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,76,115,102,82,101,105,110,105,116,105,97,108,105,122,97,116,105,111,110,65,110,97,108,121,115,105,115,46,99,112,112,0,82,101,105,110,105,116,67,111,110,118,101,114,103,101,110,99,101,0,32,32,32,86,101,108,111,99,105,116,121,32,99,111,110,118,101,114,103,101,110,99,101,58,32,110,111,114,109,40,100,117,41,47,110,111,114,109,40,117,41,0,32,32,32,99,111,109,112,117,116,105,110,103,32,71,73,65,10,0,49,49,71,105,97,65,110,97,108,121,115,105,115,0,109,100,46,103,101,111,109,101,116,114,121,46,116,104,105,99,107,110,101,115,115,0,109,100,46,103,105,97,46,109,97,110,116,108,101,95,118,105,115,99,111,115,105,116,121,0,109,100,46,103,105,97,46,108,105,116,104,111,115,112,104,101,114,101,95,116,104,105,99,107,110,101,115,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,71,105,97,65,110,97,108,121,115,105,115,46,99,112,112,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,83,111,108,117,116,105,111,110,0,32,32,32,99,111,109,112,117,116,105,110,103,32,115,101,97,32,108,101,118,101,108,32,114,105,115,101,10,0,84,114,97,110,115,102,101,114,70,111,114,99,105,110,103,32,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,73,99,101,99,97,112,84,111,69,97,114,116,104,67,111,109,109,32,99,111,109,109,117,110,105,99,97,116,111,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,115,101,97,108,101,118,101,108,114,105,115,101,95,99,111,114,101,46,99,112,112,0,84,114,97,110,115,102,101,114,70,111,114,99,105,110,103,0,84,114,97,110,115,102,101,114,70,111,114,99,105,110,103,32,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,110,117,109,98,101,114,32,111,102,32,116,114,97,110,115,105,116,105,111,110,32,118,101,99,116,111,114,115,32,105,115,32,110,111,116,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,99,101,99,97,112,115,33,0,84,114,97,110,115,102,101,114,83,101,97,76,101,118,101,108,32,101,114,114,111,114,32,109,101,115,115,97,103,101,58,32,110,117,109,98,101,114,32,111,102,32,116,114,97,110,115,105,116,105,111,110,32,118,101,99,116,111,114,115,32,105,115,32,110,111,116,32,101,113,117,97,108,32,116,111,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,99,101,99,97,112,115,33,0,84,114,97,110,115,102,101,114,83,101,97,108,101,118,101,108,0,49,50,71,101,110,101,114,105,99,80,97,114,97,109,73,80,105,69,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,111,114,101,115,47,115,101,97,108,101,118,101,108,114,105,115,101,95,99,111,114,101,95,110,111,110,101,117,115,116,97,116,105,99,46,99,112,112,0,115,108,114,99,111,110,118,101,114,103,101,110,99,101,0,32,32,32,32,32,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,110,111,114,109,40,100,83,41,47,110,111,114,109,40,83,41,0,32,32,32,32,32,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,110,111,114,109,40,100,83,41,0,32,10,0,50,48,83,101,97,108,101,118,101,108,114,105,115,101,65,110,97,108,121,115,105,115,0,109,100,46,109,97,115,107,46,105,99,101,95,108,101,118,101,108,115,101,116,0,109,100,46,109,97,115,107,46,111,99,101,97,110,95,108,101,118,101,108,115,101,116,0,109,100,46,109,97,115,107,46,108,97,110,100,95,108,101,118,101,108,115,101,116,0,109,100,46,115,108,114,46,100,101,108,116,97,116,104,105,99,107,110,101,115,115,0,109,100,46,115,108,114,46,115,101,97,108,101,118,101,108,0,109,100,46,115,108,114,46,114,101,108,116,111,108,0,109,100,46,115,108,114,46,97,98,115,116,111,108,0,109,100,46,115,108,114,46,109,97,120,105,116,101,114,0,109,100,46,115,108,114,46,114,105,103,105,100,0,109,100,46,115,108,114,46,101,108,97,115,116,105,99,0,109,100,46,115,108,114,46,108,111,118,101,95,104,0,109,100,46,115,108,114,46,108,111,118,101,95,107,0,109,100,46,115,108,114,46,100,101,103,97,99,99,0,109,100,46,115,108,114,46,116,114,97,110,115,105,116,105,111,110,115,0,109,100,46,115,108,114,46,114,101,113,117,101,115,116,101,100,95,111,117,116,112,117,116,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,97,110,97,108,121,115,101,115,47,83,101,97,108,101,118,101,108,114,105,115,101,65,110,97,108,121,115,105,115,46,99,112,112,0,67,111,114,101,0,78,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,0,71,114,97,100,105,101,110,116,74,0,56,71,97,117,115,115,83,101,103,0,71,97,117,115,115,83,101,103,58,10,0,118,101,114,116,101,120,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,49,93,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,103,97,117,115,115,47,71,97,117,115,115,83,101,103,46,99,112,112,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,49,93,0,53,71,97,117,115,115,0,57,71,97,117,115,115,84,114,105,97,0,70,105,114,115,116,32,105,110,100,105,99,101,32,112,114,111,118,105,100,101,100,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,40,117,115,101,114,32,112,114,111,118,105,100,101,100,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,103,97,117,115,115,47,71,97,117,115,115,84,114,105,97,46,99,112,112,0,71,97,117,115,115,84,114,105,97,0,83,101,99,111,110,100,32,105,110,100,105,99,101,32,112,114,111,118,105,100,101,100,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,40,117,115,101,114,32,112,114,111,118,105,100,101,100,32,0,32,41,0,71,97,117,115,115,84,114,105,97,58,10,0,84,104,101,32,50,32,105,110,100,105,99,101,115,32,112,114,111,118,105,100,101,100,32,97,114,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,40,117,115,101,114,32,112,114,111,118,105,100,101,100,32,0,32,97,110,100,32,0,71,97,117,115,115,69,100,103,101,67,101,110,116,101,114,0,118,101,114,116,101,120,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,50,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,48,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,50,93,0,49,48,71,97,117,115,115,84,101,116,114,97,0,32,78,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,103,97,117,115,115,47,71,97,117,115,115,84,101,116,114,97,46,99,112,112,0,71,97,117,115,115,84,101,116,114,97,0,71,97,117,115,115,84,101,116,114,97,58,10,0,118,101,114,116,101,120,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,51,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,51,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,52,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,57,93,0,83,121,110,99,104,114,111,110,105,122,101,71,97,117,115,115,66,97,115,101,0,49,48,71,97,117,115,115,80,101,110,116,97,0,80,101,110,116,97,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,103,97,117,115,115,47,71,97,117,115,115,80,101,110,116,97,46,99,112,112,0,71,97,117,115,115,80,101,110,116,97,0,84,114,105,97,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,105,110,100,101,120,32,0,71,97,117,115,115,80,101,110,116,97,58,10,0,32,32,32,110,117,109,103,97,117,115,115,58,32,0,32,32,32,119,101,105,103,104,116,115,32,61,32,91,0,119,101,105,103,104,116,115,32,61,32,78,85,76,76,10,0,32,32,32,99,111,111,114,100,115,49,32,61,32,91,0,99,111,111,114,100,115,49,32,61,32,78,85,76,76,10,0,32,32,32,99,111,111,114,100,115,50,32,61,32,91,0,99,111,111,114,100,115,50,32,61,32,78,85,76,76,10,0,32,32,32,99,111,111,114,100,115,51,32,61,32,91,0,99,111,111,114,100,115,51,32,61,32,78,85,76,76,10,0,32,32,32,99,111,111,114,100,115,52,32,61,32,91,0,99,111,111,114,100,115,52,32,61,32,78,85,76,76,10,0,32,32,32,119,101,105,103,104,116,32,61,32,0,32,32,32,99,111,111,114,100,49,32,61,32,0,32,32,32,99,111,111,114,100,50,32,61,32,0,32,32,32,99,111,111,114,100,51,32,61,32,0,32,32,32,99,111,111,114,100,52,32,61,32,0,118,101,114,116,101,120,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,53,93,0,71,97,117,115,115,86,101,114,116,101,120,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,53,93,0,71,97,117,115,115,78,111,100,101,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,56,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,49,49,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,54,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,49,55,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110,32,91,48,32,49,56,93,0,110,111,100,101,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,105,110],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+129512);allocate([32,91,48,32,50,57,93,0,109,100,46,97,117,116,111,100,105,102,102,46,105,115,97,117,116,111,100,105,102,102,0,109,100,46,105,110,118,101,114,115,105,111,110,46,105,115,99,111,110,116,114,111,108,0,109,100,46,109,101,115,104,46,100,111,109,97,105,110,95,116,121,112,101,0,109,100,46,109,101,115,104,46,100,111,109,97,105,110,95,100,105,109,101,110,115,105,111,110,0,109,100,46,109,101,115,104,46,101,108,101,109,101,110,116,116,121,112,101,0,109,100,46,109,101,115,104,46,110,117,109,98,101,114,111,102,118,101,114,116,105,99,101,115,0,109,100,46,109,101,115,104,46,110,117,109,98,101,114,111,102,101,108,101,109,101,110,116,115,0,109,100,46,109,101,115,104,46,101,108,101,109,101,110,116,115,0,101,114,114,111,114,32,119,104,105,108,101,32,108,111,111,107,105,110,103,32,105,110,32,98,105,110,97,114,121,32,102,105,108,101,46,32,70,111,117,110,100,32,97,32,115,116,114,105,110,103,32,111,102,32,115,105,122,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,73,111,77,111,100,101,108,46,99,112,112,0,67,104,101,99,107,70,105,108,101,0,109,100,46,0,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,98,105,110,97,114,121,32,102,105,108,101,58,32,114,101,99,111,114,100,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,32,34,109,100,46,34,58,32,0,109,100,46,69,79,70,0,67,111,117,108,100,32,110,111,116,32,114,101,97,100,32,114,101,99,111,114,100,95,108,101,110,103,116,104,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,0,32,77,97,114,115,104,97,108,108,101,100,32,102,105,108,101,32,105,115,32,99,111,114,114,117,112,116,101,100,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,32,32,32,42,32,76,97,115,116,32,114,101,99,111,114,100,32,102,111,117,110,100,32,105,115,32,58,32,10,0,32,32,32,32,32,116,104,101,32,99,111,114,114,101,115,112,111,110,100,105,110,103,32,109,111,100,101,108,32,102,105,101,108,100,32,104,97,115,32,112,114,111,98,97,98,108,121,32,98,101,101,110,32,109,97,114,115,104,97,108,108,101,100,32,32,32,32,32,32,32,32,32,32,10,0,32,32,32,32,32,105,110,99,111,114,114,101,99,116,108,121,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,66,105,110,97,114,121,32,102,105,108,101,32,99,111,114,114,117,112,116,101,100,32,40,83,101,101,32,101,114,114,111,114,32,109,101,115,115,97,103,101,32,97,98,111,118,101,41,0,67,97,110,110,111,116,32,99,97,114,114,121,32,111,117,116,32,65,68,32,109,111,100,101,32,99,111,109,112,117,116,97,116,105,111,110,115,32,119,105,116,104,111,117,116,32,115,117,112,112,111,114,116,32,111,102,32,65,68,79,76,67,32,99,111,109,112,105,108,101,100,32,105,110,33,0,68,101,99,108,97,114,101,73,110,100,101,112,101,110,100,101,110,116,115,0,70,101,116,99,104,67,111,110,115,116,97,110,116,115,0,67,111,117,108,100,32,110,111,116,32,114,101,97,100,32,114,101,99,111,114,100,32,110,97,109,101,0,67,111,117,110,100,32,110,111,116,32,114,101,97,100,32,114,101,99,111,114,100,95,108,101,110,103,116,104,0,67,111,117,110,100,32,110,111,116,32,114,101,97,100,32,114,101,99,111,114,100,95,99,111,100,101,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,98,111,111,108,101,97,110,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,105,110,116,101,103,101,114,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,115,99,97,108,97,114,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,108,101,110,103,116,104,32,111,102,32,115,116,114,105,110,103,32,0,32,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,115,116,114,105,110,103,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,108,101,110,103,116,104,32,111,102,32,115,116,114,105,110,103,32,97,114,114,97,121,0,117,110,107,110,111,119,110,32,114,101,99,111,114,100,32,116,121,112,101,58,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,99,111,110,115,116,97,110,116,32,34,0,34,0,70,105,110,100,67,111,110,115,116,97,110,116,0,101,120,112,101,99,116,105,110,103,32,97,110,32,105,110,116,101,103,101,114,32,102,111,114,32,34,0,70,101,116,99,104,68,97,116,97,0,101,120,112,101,99,116,105,110,103,32,97,32,73,115,115,109,68,111,117,98,108,101,44,32,105,110,116,101,103,101,114,32,111,114,32,98,111,111,108,101,97,110,32,109,97,116,114,105,120,32,102,111,114,32,34,0,32,40,67,111,100,101,32,105,115,32,0,41,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,110,117,109,98,101,114,32,111,102,32,114,111,119,115,32,102,111,114,32,109,97,116,114,105,120,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,102,111,114,32,109,97,116,114,105,120,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,109,97,116,114,105,120,32,0,67,111,110,115,116,97,110,116,32,34,0,34,32,110,111,116,32,102,111,117,110,100,32,105,110,32,105,111,109,111,100,101,108,0,67,111,112,121,67,111,110,115,116,97,110,116,79,98,106,101,99,116,0,101,120,112,101,99,116,105,110,103,32,97,32,98,111,111,108,101,97,110,32,102,111,114,32,34,0,83,116,114,105,110,103,32,112,114,111,118,105,100,101,100,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,32,34,109,100,46,34,32,40,0,68,101,108,101,116,101,68,97,116,97,0,83,101,116,70,105,108,101,80,111,105,110,116,101,114,84,111,68,97,116,97,0,67,111,117,108,100,32,110,111,116,32,114,101,97,100,32,114,101,99,111,114,100,95,99,111,100,101,0,67,111,117,108,100,32,110,111,116,32,114,101,97,100,32,118,101,99,116,111,114,95,116,121,112,101,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,100,97,116,97,32,119,105,116,104,32,110,97,109,101,32,34,0,34,32,105,110,32,98,105,110,97,114,121,32,102,105,108,101,0,101,120,112,101,99,116,105,110,103,32,97,32,73,115,115,109,68,111,117,98,108,101,32,102,111,114,32,34,0,101,120,112,101,99,116,105,110,103,32,97,32,115,116,114,105,110,103,32,102,111,114,32,34,0,101,120,112,101,99,116,105,110,103,32,97,32,73,115,115,109,68,111,117,98,108,101,32,109,97,116,32,97,114,114,97,121,32,102,111,114,32,34,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,110,117,109,98,101,114,32,111,102,32,114,101,99,111,114,100,115,32,105,110,32,109,97,116,114,105,120,32,97,114,114,97,121,32,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,110,117,109,98,101,114,32,111,102,32,114,111,119,115,32,105,110,32,0,116,104,32,109,97,116,114,105,120,32,111,102,32,109,97,116,114,105,120,32,97,114,114,97,121,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,110,32,0,70,101,116,99,104,77,117,108,116,105,112,108,101,68,97,116,97,0,83,101,116,70,105,108,101,80,111,105,110,116,101,114,115,84,111,68,97,116,97,0,101,120,112,101,99,116,105,110,103,32,97,32,100,111,117,98,108,101,32,102,111,114,32,34,0,32,105,115,32,110,111,116,32,97,32,100,111,117,98,108,101,32,97,114,114,97,121,0,70,101,116,99,104,68,97,116,97,84,111,73,110,112,117,116,0,34,32,110,111,116,32,102,111,117,110,100,32,105,110,32,98,105,110,97,114,121,32,102,105,108,101,0,100,97,116,97,32,99,111,100,101,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,32,40,100,101,116,101,99,116,101,100,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,34,0,34,41,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,70,114,105,99,116,105,111,110,46,99,112,112,0,71,101,116,65,108,112,104,97,67,111,109,112,108,101,109,101,110,116,0,71,101,116,65,108,112,104,97,86,105,115,99,111,117,115,67,111,109,112,108,101,109,101,110,116,0,71,101,116,65,108,112,104,97,72,121,100,114,111,67,111,109,112,108,101,109,101,110,116,0,70,114,105,99,116,105,111,110,32,108,97,119,32,0,71,101,116,65,108,112,104,97,50,0,71,101,116,65,108,112,104,97,50,86,105,115,99,111,117,115,0,71,101,116,65,108,112,104,97,50,87,101,101,114,116,109,97,110,0,71,101,116,65,108,112,104,97,50,72,121,100,114,111,0,110,101,103,97,116,105,118,101,32,119,97,116,101,114,32,108,97,121,101,114,32,116,104,105,99,107,110,101,115,115,0,71,101,116,65,108,112,104,97,50,87,97,116,101,114,76,97,121,101,114,0,71,101,116,65,108,112,104,97,50,67,111,117,108,111,109,98,0,100,101,115,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,46,46,47,115,104,97,114,101,100,47,77,101,109,79,112,115,47,77,101,109,79,112,115,46,104,0,120,77,101,109,67,112,121,0,115,114,99,0,115,101,116,32,111,102,32,101,110,117,109,32,116,121,112,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,68,111,102,73,110,100,101,120,105,110,103,46,99,112,112,0,73,110,105,116,83,101,116,0,68,111,102,73,110,100,101,120,105,110,103,58,10,0,32,32,32,103,115,105,122,101,58,32,32,0,32,32,32,102,115,105,122,101,58,32,32,0,32,32,32,115,115,105,122,101,58,32,32,0,32,32,32,99,108,111,110,101,58,32,32,0,32,32,32,97,99,116,105,118,101,58,32,0,32,32,32,102,114,101,101,122,101,58,32,0,32,32,32,115,101,116,32,109,101,109,98,101,114,115,104,105,112,58,32,102,44,115,32,115,101,116,115,32,10,0,32,32,32,32,32,32,100,111,102,32,0,32,32,32,115,118,97,108,117,101,115,32,40,0,41,58,32,124,0,32,124,0,32,32,32,100,111,102,116,121,112,101,58,32,124,0,32,32,32,100,111,102,116,121,112,101,58,32,78,85,76,76,10,0,32,32,32,103,95,100,111,102,108,105,115,116,32,40,0,32,32,32,102,95,100,111,102,108,105,115,116,32,40,0,32,32,32,115,95,100,111,102,108,105,115,116,32,40,0,32,32,32,72,111,111,107,58,32,10,0,32,32,32,32,32,32,110,117,109,61,0,32,32,32,32,32,32,105,100,115,58,32,0,32,32,32,32,32,32,111,102,102,115,101,116,115,58,32,0,32,32,32,72,111,111,107,58,32,110,117,109,61,48,32,10,0,32,32,32,32,32,32,119,97,114,110,105,110,103,58,32,111,98,106,101,99,116,32,110,111,116,32,104,111,111,107,101,100,32,121,101,116,10,0,32,32,32,32,32,32,111,98,106,101,99,116,115,58,10,32,32,32,0,32,32,32,32,32,32,32,32,32,111,98,106,101,99,116,32,0,32,32,32,32,32,32,32,32,32,32,32,32,110,111,32,111,98,106,101,99,116,32,104,111,111,107,101,100,32,121,101,116,32,40,110,111,116,32,99,111,110,102,105,103,117,114,101,100,41,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,72,111,111,107,46,99,112,112,0,119,114,111,110,103,32,105,100,58,32,0,32,118,115,32,0,32,32,105,110,32,114,101,115,111,108,118,101,100,32,112,111,105,110,116,101,114,33,0,99,111,110,102,105,103,117,114,101,0,116,114,121,105,110,103,32,116,111,32,100,101,108,105,118,101,114,32,97,32,115,105,110,103,108,101,32,104,111,111,107,32,111,98,106,101,99,116,32,119,104,101,110,32,104,111,111,107,32,104,111,108,100,115,32,0,32,111,98,106,101,99,116,115,0,100,101,108,105,118,101,114,115,0,104,111,111,107,32,105,115,32,110,111,116,32,112,111,105,110,116,105,110,103,32,116,111,32,97,110,121,32,111,98,106,101,99,116,44,32,111,98,106,101,99,116,115,32,112,111,105,110,116,101,114,32,105,115,32,78,85,76,76,0,67,97,110,110,111,116,32,115,112,97,119,110,32,104,111,111,107,32,119,105,116,104,32,0,32,111,98,106,101,99,116,115,32,102,114,111,109,32,97,32,72,111,111,107,32,111,102,32,0,83,112,97,119,110,0,84,114,121,105,110,103,32,116,111,32,115,112,97,119,110,32,97,110,32,101,109,112,116,121,32,69,108,101,109,101,110,116,80,114,111,112,101,114,116,105,101,115,33,0,56,77,97,116,101,115,116,97,114,0,77,97,116,101,115,116,97,114,58,10,0,32,32,32,109,105,100,58,32,0,32,32,32,101,108,101,109,101,110,116,58,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,77,97,116,101,115,116,97,114,46,99,112,112,0,71,101,116,65,0,71,101,116,65,98,97,114,0,71,101,116,66,0,71,101,116,66,98,97,114,0,71,101,116,78,0,71,101,116,68,0,71,101,116,68,98,97,114,0,73,115,68,97,109,97,103,101,0,71,101,116,86,105,115,99,111,115,105,116,121,0,71,101,116,86,105,115,99,111,115,105,116,121,95,66,0,71,101,116,86,105,115,99,111,115,105,116,121,95,68,0,71,101,116,86,105,115,99,111,115,105,116,121,66,97,114,0,71,101,116,86,105,115,99,111,115,105,116,121,67,111,109,112,108,101,109,101,110,116,0,71,101,116,86,105,115,99,111,115,105,116,121,68,67,111,109,112,108,101,109,101,110,116,0,71,101,116,86,105,115,99,111,115,105,116,121,68,101,114,105,118,97,116,105,118,101,69,112,115,83,113,117,97,114,101,0,71,101,116,86,105,115,99,111,115,105,116,121,50,100,68,101,114,105,118,97,116,105,118,101,69,112,115,83,113,117,97,114,101,0,86,105,115,99,111,115,105,116,121,72,79,68,101,114,105,118,97,116,105,118,101,69,112,115,83,113,117,97,114,101,0,86,105,115,99,111,115,105,116,121,76,49,76,50,0,86,105,115,99,111,115,105,116,121,83,83,65,68,101,114,105,118,97,116,105,118,101,69,112,115,83,113,117,97,114,101,0,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,77,97,116,101,114,105,97,108,115,47,46,47,77,97,116,101,115,116,97,114,46,104,0,54,77,111,117,108,105,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,77,111,117,108,105,110,46,99,112,112,0,77,111,117,108,105,110,58,10,0,68,111,110,39,116,32,107,110,111,119,32,119,104,121,32,119,101,32,115,104,111,117,108,100,32,98,101,32,104,101,114,101,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,46,46,47,46,47,76,111,97,100,115,47,77,111,117,108,105,110,46,104,0,49,49,78,101,117,109,97,110,110,102,108,117,120,0,87,114,111,110,103,32,100,105,114,101,99,116,105,111,110,32,100,117,114,105,110,103,32,116,104,101,32,77,97,114,115,104,97,108,108,32,112,114,111,99,101,115,115,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,78,101,117,109,97,110,110,102,108,117,120,46,99,112,112,0,78,101,117,109,97,110,110,102,108,117,120,58,10,0,32,32,32,105,100,58,32,0,32,32,32,97,110,97,108,121,115,105,115,95,116,121,112,101,58,32,0,32,32,32,112,97,114,97,109,101,116,101,114,115,10,0,32,32,32,32,32,32,78,85,76,76,10,0,32,32,32,112,97,114,97,109,101,116,101,114,115,58,32,0,97,110,97,108,121,115,105,115,32,0,32,40,0,41,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,67,114,101,97,116,101,75,77,97,116,114,105,120,0,67,114,101,97,116,101,80,86,101,99,116,111,114,0,83,101,116,119,105,115,101,78,111,100,101,67,111,110,110,101,99,116,105,118,105,116,121,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,99,108,97,115,115,101,115,47,76,111,97,100,115,47,46,46,47,46,47,76,111,97,100,115,47,78,101,117,109,97,110,110,102,108,117,120,46,104,0,73,110,112,117,116,85,112,100,97,116,101,70,114,111,109,73,111,77,111,100,101,108,0,78,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,80,101,110,97,108,116,121,67,114,101,97,116,101,74,97,99,111,98,105,97,110,77,97,116,114,105,120,0,67,114,101,97,116,101,74,97,99,111,98,105,97,110,77,97,116,114,105,120,0,77,97,120,32,105,116,101,114,97,116,105,111,110,115,32,101,120,99,101,101,100,101,100,32,102,111,114,32,108,61,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,78,117,109,101,114,105,99,115,47,71,97,117,115,115,80,111,105,110,116,115,46,99,112,112,0,71,97,117,115,115,82,101,99,117,114,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,70,97,99,101,115,46,99,112,112,0,67,114,101,97,116,101,70,97,99,101,115,0,109,101,115,104,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,67,114,101,97,116,101,70,97,99,101,115,51,100,0,109,101,115,104,32,116,121,112,101,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,83,105,110,103,108,101,78,111,100,101,84,111,69,108,101,109,101,110,116,67,111,110,110,101,99,116,105,118,105,116,121,46,99,112,112,0,67,114,101,97,116,101,83,105,110,103,108,101,78,111,100,101,84,111,69,108,101,109,101,110,116,67,111,110,110,101,99,116,105,118,105,116,121,0,109,101,115,104,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,78,117,109,98,101,114,78,111,100,101,84,111,69,108,101,109,101,110,116,67,111,110,110,101,99,116,105,118,105,116,121,46,99,112,112,0,67,114,101,97,116,101,78,117,109,98,101,114,78,111,100,101,84,111,69,108,101,109,101,110,116,67,111,110,110,101,99,116,105,118,105,116,121,0,110,111,116,32,115,117,112,112,111,114,116,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,78,111,100,101,115,46,99,112,112,0,67,114,101,97,116,101,78,111,100,101,115,0,105,115,115,109,0,83,84,79,80,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,65,108,108,111,99,97,116,101,83,121,115,116,101,109,77,97,116,114,105,99,101,115,120,47,65,108,108,111,99,97,116,101,83,121,115,116,101,109,77,97,116,114,105,99,101,115,120,46,99,112,112,0,77,97,116,114,105,120,78,111,110,122,101,114,111,115,0,77,112,105,68,101,110,115,101,32,109,97,116,114,105,120,32,114,101,113,117,105,114,101,115,32,99,111,109,112,105,108,97,116,105,111,110,32,111,102,32,77,80,73,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,65,108,108,111,99,97,116,101,83,121,115,116,101,109,77,97,116,114,105,99,101,115,120,47,46,46,47,46,46,47,99,108,97,115,115,101,115,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,46,47,105,115,115,109,47,46,47,73,115,115,109,77,97,116,46,104,0,73,115,115,109,77,97,116,0,77,112,105,83,112,97,114,115,101,32,109,97,116,114,105,120,32,114,101,113,117,105,114,101,115,32,99,111,109,112,105,108,97,116,105,111,110,32,111,102,32,77,80,73,33,0,109,97,116,114,105,120,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,32,32,32,71,101,110,101,114,97,116,105,110,103,32,109,97,116,114,105,99,101,115,0,32,40,75,102,102,32,115,116,105,102,102,110,101,115,115,32,109,97,116,114,105,120,32,115,105,122,101,58,32,0,32,120,32,0,41,10,0,32,32,32,67,114,101,97,116,101,32,110,111,100,97,108,32,99,111,110,115,116,114,97,105,110,116,115,10,0,101,120,112,101,99,116,105,110,103,32,97,32,73,115,115,109,68,111,117,98,108,101,32,118,101,99,116,111,114,32,102,111,114,32,99,111,110,115,116,114,97,105,110,116,115,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,73,111,77,111,100,101,108,84,111,67,111,110,115,116,114,97,105,110,116,115,120,47,73,111,77,111,100,101,108,84,111,67,111,110,115,116,114,97,105,110,116,115,120,46,99,112,112,0,73,111,77,111,100,101,108,84,111,67,111,110,115,116,114,97,105,110,116,115,120,0,101,120,112,101,99,116,105,110,103,32,97,32,110,111,100,97,108,32,118,101,99,116,111,114,32,102,111,114,32,99,111,110,115,116,114,97,105,110,116,115,32,0,109,101,115,104,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,70,105,110,105,116,101,32,101,108,101,109,101,110,116,32,0,83,105,122,101,32,111,102,32,115,112,99,32,102,105,101,108,100,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,73,111,77,111,100,101,108,84,111,68,121,110,97,109,105,99,67,111,110,115,116,114,97,105,110,116,115,120,0,32,32,32,73,110,112,117,116,32,117,112,100,97,116,101,115,32,102,114,111,109,32,99,111,110,115,116,97,110,116,10,0,32,32,32,85,112,100,97,116,105,110,103,32,105,110,112,117,116,115,32,102,114,111,109,32,115,111,108,117,116,105,111,110,10,0,9,99,97,108,108,32,77,97,110,116,108,101,32,80,108,117,109,101,32,71,101,111,116,104,101,114,109,97,108,32,70,108,117,120,32,109,111,100,117,108,101,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,71,101,111,116,104,101,114,109,97,108,70,108,117,120,120,47,71,101,111,116,104,101,114,109,97,108,70,108,117,120,120,46,99,112,112,0,71,101,111,116,104,101,114,109,97,108,70,108,117,120,120,0,32,32,32,71,101,116,32,115,111,108,117,116,105,111,110,32,102,114,111,109,32,105,110,112,117,116,115,10,0,65,108,108,111,99,97,116,105,110,103,32,97,32,86,101,99,32,111,102,32,115,105,122,101,32,48,32,97,115,32,103,115,105,122,101,61,48,32,102,111,114,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,120,47,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,120,46,99,112,112,0,71,101,116,83,111,108,117,116,105,111,110,70,114,111,109,73,110,112,117,116,115,120,0,9,99,97,108,108,32,76,105,110,101,97,114,32,70,108,111,97,116,105,110,103,32,109,101,108,116,105,110,103,32,114,97,116,101,32,109,111,100,117,108,101,10,0,9,99,97,108,108,32,77,105,115,109,105,112,32,70,108,111,97,116,105,110,103,32,109,101,108,116,105,110,103,32,114,97,116,101,32,109,111,100,117,108,101,10,0,66,97,115,97,108,32,102,111,114,99,105,110,103,32,109,111,100,101,108,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,70,108,111,97,116,105,110,103,105,99,101,77,101,108,116,105,110,103,82,97,116,101,120,47,70,108,111,97,116,105,110,103,105,99,101,77,101,108,116,105,110,103,82,97,116,101,120,46,99,112,112,0,70,108,111,97,116,105,110,103,105,99,101,77,101,108,116,105,110,103,82,97,116,101,120,0,32,32,32,82,101,100,117,99,101,32,118,101,99,116,111,114,32,102,114,111,109,32,103,32,116,111,32,102,32,115,101,116,10,0,32,32,32,68,105,114,105,99,104,108,101,116,32,108,105,102,116,105,110,103,32,97,112,112,108,105,101,100,32,116,111,32,108,111,97,100,32,118,101,99,116,111,114,10,0,32,32,32,67,111,110,115,116,114,97,105,110,105,110,103,32,112,101,110,97,108,116,105,101,115,10,0,32,32,32,82,101,115,101,116,116,105,110,103,32,112,101,110,97,108,116,105,101,115,10,0,114,105,102,116,32,99,111,110,115,116,114,97,105,110,116,115,32,114,101,115,101,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,82,101,115,101,116,67,111,110,115,116,114,97,105,110,116,115,120,47,82,101,115,101,116,67,111,110,115,116,114,97,105,110,116,115,120,46,99,112,112,0,82,101,115,101,116,67,111,110,115,116,114,97,105,110,116,115,120,0,32,32,32,83,111,108,118,105,110,103,32,109,97,116,114,105,120,32,115,121,115,116,101,109,10,0,77,97,116,114,105,120,32,116,121,112,101,58,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,83,111,108,118,101,114,120,47,46,46,47,46,46,47,116,111,111,108,107,105,116,115,47,46,47,111,98,106,101,99,116,115,47,46,47,83,111,108,118,101,114,46,104,0,83,111,108,118,101,0,32,32,32,77,101,114,103,105,110,103,32,115,111,108,117,116,105,111,110,32,118,101,99,116,111,114,32,102,114,111,109,32,102,115,101,116,32,116,111,32,103,115,101,116,10,0,32,32,32,117,112,100,97,116,105,110,103,32,98,111,117,110,100,97,114,121,32,99,111,110,100,105,116,105,111,110,115,46,46,46,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,97,46,99,112,112,0,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,97,0,32,32,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,110,111,114,109,40,100,112,41,47,110,111,114,109,40,112,41,0,32,32,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,110,111,114,109,40,100,112,47,41,47,110,111,114,109,40,112,41,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,97,95,116,104,101,116,97,46,99,112,112,0,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,97,95,116,104,101,116,97,0,32,32,32,115,111,108,118,101,114,32,114,101,115,105,100,117,101,32,116,111,111,32,104,105,103,104,33,58,32,110,111,114,109,40,75,85,45,70,41,47,110,111,114,109,40,70,41,61,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,105,110,101,97,114,46,99,112,112,0,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,108,105,110,101,97,114,0,32,32,32,110,117,109,98,101,114,32,111,102,32,117,110,115,116,97,98,108,101,32,99,111,110,115,116,114,97,105,110,116,115,58,32,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,110,111,110,108,105,110,101,97,114,32,105,116,101,114,97,116,105,111,110,115,32,40,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,78,101,119,116,111,110,32,105,116,101,114,97,116,105,111,110,115,32,40,0,10,32,32,32,116,111,116,97,108,32,110,117,109,98,101,114,32,111,102,32,105,116,101,114,97,116,105,111,110,115,58,32,0,97,110,97,108,121,115,105,115,32,116,121,112,101,32,0,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,70,67,84,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,102,99,116,46,99,112,112,0,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,95,102,99,116,0,80,69,84,83,99,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,115,116,97,108,108,101,100,0,32,32,32,99,104,101,99,107,105,110,103,32,99,111,110,118,101,114,103,101,110,99,101,10,0,32,32,32,115,111,108,118,101,114,32,114,101,115,105,100,117,101,58,32,110,111,114,109,40,75,85,45,70,41,47,110,111,114,109,40,70,41,61,0,110,111,114,109,32,110,102,32,61,32,0,102,32,97,110,100,32,110,111,114,109,32,107,117,111,108,100,32,61,32,0,102,10,0,109,101,99,104,97,110,105,99,97,108,32,101,113,117,105,108,105,98,114,105,117,109,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,32,105,115,32,78,97,78,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,111,108,117,116,105,111,110,115,101,113,117,101,110,99,101,115,47,99,111,110,118,101,114,103,101,110,99,101,46,99,112,112,0,99,111,110,118,101,114,103,101,110,99,101,0,32,32,32,109,101,99,104,97,110,105,99,97,108,32,101,113,117,105,108,105,98,114,105,117,109,32,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,0,32,60,32,0,32,37,10,0,32,62,32,0,99,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,32,105,115,32,78,97,78,33,0,32,32,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,110,111,114,109,40,100,117,41,47,110,111,114,109,40,117,41,0,32,32,32,67,111,110,118,101,114,103,101,110,99,101,32,99,114,105,116,101,114,105,111,110,58,32,109,97,120,40,100,117,41,0,32,32,32,67,111,109,112,117,116,105,110,103,32,99,111,115,116,32,102,117,110,99,116,105,111,110,32,103,114,97,100,105,101,110,116,10,0,124,124,100,74,47,100,107,124,124,32,61,32,48,32,32,32,32,103,114,97,100,105,101,110,116,32,110,111,114,109,32,105,115,32,122,101,114,111,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,71,114,97,100,106,120,47,71,114,97,100,106,120,46,99,112,112,0,71,114,97,100,106,120,0,124,124,100,74,47,100,107,124,124,32,61,32,78,97,78,32,32,103,114,97,100,105,101,110,116,32,110,111,114,109,32,105,115,32,78,97,78,0,32,32,32,32,32,32,32,120,32,32,32,32,32,32,32,124,32,32,67,111,115,116,32,102,117,110,99,116,105,111,110,32,102,40,120,41,32,32,124,32,32,76,105,115,116,32,111,102,32,99,111,110,116,114,105,98,117,116,105,111,110,115,10,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,32,115,116,101,112,32,0,47,0,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,0,32,120,32,61,32,0,32,124,32,0,70,117,110,99,116,105,111,110,32,101,118,97,108,117,97,116,105,111,110,32,114,101,116,117,114,110,101,100,32,78,97,78,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,115,104,97,114,101,100,47,78,117,109,101,114,105,99,115,47,66,114,101,110,116,83,101,97,114,99,104,46,99,112,112,0,66,114,101,110,116,83,101,97,114,99,104,0,32,32,32,99,111,109,112,117,116,105,110,103,32,118,101,108,111,99,105,116,105,101,115,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,116,104,105,99,107,110,101,115,115,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,116,104,105,99,107,110,101,115,115,50,10,0,32,32,32,99,111,109,112,117,116,105,110,103,32,97,100,106,111,105,110,116,10,0,32,32,32,115,97,118,105,110,103,32,114,101,115,117,108,116,115,10,0,32,32,32,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,105,116,101,114,97,116,105,111,110,115,32,40,0,41,32,101,120,99,101,101,100,101,100,10,0,99,111,109,112,117,116,105,110,103,32,115,108,111,112,101,32,111,102,32,108,101,118,101,108,115,101,116,32,102,117,110,99,116,105,111,110,46,46,46,10,0,115,97,118,105,110,103,32,114,101,115,117,108,116,115,58,10,0,32,32,32,102,114,101,101,122,105,110,103,32,99,111,110,115,116,114,97,105,110,116,115,10,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,98,97,109,103,47,71,101,111,109,101,116,114,121,46,99,112,112,0,114,101,102,101,114,101,110,99,101,32,110,117,109,98,101,114,115,58,32,0,32,0,10,0,73,100,58,32,0,67,111,111,114,100,115,58,32,91,0,93,32,91,0,93,10,0,116,119,111,32,112,111,105,110,116,115,32,111,102,32,116,104,101,32,103,101,111,109,101,116,114,121,32,97,114,101,32,118,101,114,121,32,99,108,111,115,101,100,32,116,111,32,101,97,99,104,32,111,116,104,101,114,32,40,115,101,101,32,114,101,102,101,114,101,110,99,101,32,110,117,109,98,101,114,115,32,97,98,111,118,101,41,0,80,111,115,116,82,101,97,100,0,76,101,110,103,116,104,32,111,102,32,101,100,103,101,32,0,32,105,115,32,48,0,80,114,111,98,108,101,109,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,101,100,103,101,115,58,32,99,104,101,99,107,32,116,104,101,32,101,100,103,101,32,108,105,115,116,0,84,114,121,105,110,103,32,116,111,32,100,101,108,101,116,101,32,103,101,111,109,101,116,114,121,32,97,110,100,32,78,98,82,101,102,62,48,44,32,112,114,111,98,97,98,108,121,32,100,117,101,32,116,111,32,97,110,32,101,114,114,111,114,0,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,33,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,98,97,109,103,47,46,47,66,97,109,103,81,117,97,100,116,114,101,101,46,104,0,77,97,114,115,104,97,108,108,0,99,111,112,121,0,79,98,106,101,99,116,69,110,117,109,0,73,100,0,68,101,101,112,69,99,104,111,0,69,99,104,111,0,78,52,98,97,109,103,49,50,66,97,109,103,81,117,97,100,116,114,101,101,49,53,66,97,109,103,81,117,97,100,116,114,101,101,66,111,120,69,0,83,101,116,79,102,69,100,103,101,115,52,58,58,97,100,100,32,111,118,101,114,102,108,111,119,58,32,78,98,79,102,69,100,103,101,115,61,0,32,62,32,110,98,97,120,61,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,98,97,109,103,47,83,101,116,79,102,69,52,46,99,112,112,0,97,100,100,0,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,78,111,100,101,115,80,97,114,116,105,116,105,111,110,105,110,103,46,99,112,112,0,68,105,115,99,111,110,116,105,110,117,111,117,115,71,97,108,101,114,107,105,110,78,111,100,101,115,80,97,114,116,105,116,105,111,110,105,110,103,0,80,114,111,98,108,101,109,32,105,110,32,102,97,99,101,115,32,99,114,101,97,116,105,111,110,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,69,100,103,101,115,80,97,114,116,105,116,105,111,110,105,110,103,46,99,112,112,0,69,100,103,101,115,80,97,114],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+139752);allocate([116,105,116,105,111,110,105,110,103,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,70,97,99,101,115,80,97,114,116,105,116,105,111,110,105,110,103,46,99,112,112,0,70,97,99,101,115,80,97,114,116,105,116,105,111,110,105,110,103,0,110,111,116,32,101,110,111,117,103,104,32,101,108,101,109,101,110,116,115,32,105,110,32,109,101,115,104,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,105,115,115,109,45,116,114,117,110,107,115,47,116,114,117,110,107,45,106,112,108,45,106,115,47,115,114,99,47,99,47,46,47,109,111,100,117,108,101,115,47,77,111,100,101,108,80,114,111,99,101,115,115,111,114,120,47,67,114,101,97,116,101,69,100,103,101,115,46,99,112,112,0,67,114,101,97,116,101,69,100,103,101,115,0,109,101,115,104,32,100,105,109,101,110,115,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,121,101,116,0,69,100,103,101,79,110,66,111,117,110,100,97,114,121,70,108,97,103,115,0,100,105,109,101,110,115,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,105,110,118,97,108,105,100,32,108,101,110,103,116,104,0,98,108,97,115,46,99,0,109,97,116,114,105,120,32,109,117,115,116,32,98,101,32,115,113,117,97,114,101,0,69,82,82,79,82,0,68,101,102,97,117,108,116,32,71,83,76,32,101,114,114,111,114,32,104,97,110,100,108,101,114,32,105,110,118,111,107,101,100,46,10,0,103,115,108,58,32,37,115,58,37,100,58,32,37,115,58,32,37,115,10,0,76,85,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,114,101,113,117,105,114,101,115,32,115,113,117,97,114,101,32,109,97,116,114,105,120,0,108,117,46,99,0,112,101,114,109,117,116,97,116,105,111,110,32,108,101,110,103,116,104,32,109,117,115,116,32,109,97,116,99,104,32,109,97,116,114,105,120,32,115,105,122,101,0,76,85,32,109,97,116,114,105,120,32,109,117,115,116,32,98,101,32,115,113,117,97,114,101,0,109,97,116,114,105,120,32,115,105,122,101,32,109,117,115,116,32,109,97,116,99,104,32,98,32,115,105,122,101,0,109,97,116,114,105,120,32,115,105,122,101,32,109,117,115,116,32,109,97,116,99,104,32,115,111,108,117,116,105,111,110,32,115,105,122,101,0,109,97,116,114,105,120,32,105,115,32,115,105,110,103,117,108,97,114,0,109,97,116,114,105,120,32,115,105,122,101,32,109,117,115,116,32,109,97,116,99,104,32,115,111,108,117,116,105,111,110,47,114,104,115,32,115,105,122,101,0,102,105,114,115,116,32,114,111,119,32,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,46,47,115,119,97,112,95,115,111,117,114,99,101,46,99,0,115,101,99,111,110,100,32,114,111,119,32,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,109,97,116,114,105,120,32,100,105,109,101,110,115,105,111,110,32,110,49,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,109,97,116,114,105,120,32,100,105,109,101,110,115,105,111,110,32,110,50,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,112,101,114,109,117,116,97,116,105,111,110,32,108,101,110,103,116,104,32,110,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,105,110,105,116,46,99,0,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,115,112,97,99,101,32,102,111,114,32,112,101,114,109,117,116,97,116,105,111,110,32,115,116,114,117,99,116,0,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,115,112,97,99,101,32,102,111,114,32,112,101,114,109,117,116,97,116,105,111,110,32,100,97,116,97,0,102,105,114,115,116,32,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,112,101,114,109,117,116,97,116,105,111,110,46,99,0,115,101,99,111,110,100,32,105,110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,118,101,99,116,111,114,32,97,110,100,32,112,101,114,109,117,116,97,116,105,111,110,32,109,117,115,116,32,98,101,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,0,46,47,112,101,114,109,117,116,101,95,115,111,117,114,99,101,46,99,0,118,101,99,116,111,114,32,108,101,110,103,116,104,115,32,97,114,101,32,110,111,116,32,101,113,117,97,108,0,46,47,99,111,112,121,95,115,111,117,114,99,101,46,99,0,118,101,99,116,111,114,32,108,101,110,103,116,104,32,110,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,46,47,118,105,101,119,95,115,111,117,114,99,101,46,99,0,46,47,115,111,117,114,99,101,95,116,114,115,118,95,114,46,104,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,112,101,114,97,116,105,111,110,0,80,97,114,97,109,101,116,101,114,32,37,100,32,116,111,32,114,111,117,116,105,110,101,32,37,115,32,119,97,115,32,105,110,99,111,114,114,101,99,116,10,0,83,116,57,98,97,100,95,97,108,108,111,99,0,83,116,57,101,120,99,101,112,116,105,111,110,0,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,0,83,116,57,116,121,112,101,95,105,110,102,111,0,83,116,56,98,97,100,95,99,97,115,116,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,101,120,116,101,114,110,97,108,112,97,99,107,97,103,101,115,47,101,109,115,99,114,105,112,116,101,110,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,116,97,103,45,49,46,51,53,46,56,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,115,116,114,105,110,103,0,95,95,116,104,114,111,119,95,108,101,110,103,116,104,95,101,114,114,111,114,0,33,34,118,101,99,116,111,114,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,108,97,114,111,117,114,47,101,120,116,101,114,110,97,108,112,97,99,107,97,103,101,115,47,101,109,115,99,114,105,112,116,101,110,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,116,97,103,45,49,46,51,53,46,56,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,118,101,99,116,111,114,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,116,104,114,101,119,32,97,110,32,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,80,79,83,73,88,0,114,119,97],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+149992);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,55,102,97,105,108,117,114,101,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,57,95,95,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,69,0,105,111,115,95,98,97,115,101,58,58,99,108,101,97,114,0,105,111,115,116,114,101,97,109,0,117,110,115,112,101,99,105,102,105,101,100,32,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,37,112,0,67,0,37,0,0,0,0,0,108,0,108,108,0,0,76,0,37,112,0,0,0,0,37,72,58,37,77,58,37,83,37,109,47,37,100,47,37,121,37,89,45,37,109,45,37,100,37,73,58,37,77,58,37,83,32,37,112,37,72,58,37,77,37,72,58,37,77,58,37,83,108,111,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,48,49,50,51,52,53,54,55,56,57,0,37,76,102,0,109,111,110,101,121,95,103,101,116,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,0,37,46,48,76,102,0,116,114,117,101,0,102,97,108,115,101,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,65,77,0,80,77,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,37,73,58,37,77,58,37,83,32,37,112,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0,78,83,116,51,95,95,49,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,78,83,116,51,95,95,49,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,83,116,51,95,95,49,49,50,95,95,100,111,95,109,101,115,115,97,103,101,69,0,58,32,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+156537);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}Module["_i64Add"]=_i64Add;Module["_i64Subtract"]=_i64Subtract;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module["___cxa_can_catch"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr}var _emscripten_resume=true;var _emscripten_landingpad=true;function _free(){}Module["_free"]=_free;function ___cxa_free_exception(ptr){try{return _free(ptr)}catch(e){}}function ___cxa_end_catch(){if(___cxa_end_catch.rethrown){___cxa_end_catch.rethrown=false;return}asm["setThrew"](0);var ptr=EXCEPTIONS.caught.pop();if(ptr){EXCEPTIONS.decRef(EXCEPTIONS.deAdjust(ptr));EXCEPTIONS.last=0}}function _what0_(){Module["printErr"]("missing function: what0_");abort(-1)}var _log=Math_log;var _emscripten_postinvoke=true;var PTHREAD_SPECIFIC={};var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var TTY={ttys:[],init:(function(){}),shutdown:(function(){}),register:(function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)}),stream_ops:{open:(function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}stream.tty=tty;stream.seekable=false}),close:(function(stream){stream.tty.ops.flush(stream.tty)}),flush:(function(stream){stream.tty.ops.flush(stream.tty)}),read:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})},default_tty_ops:{get_char:(function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;var usingDevice=false;try{fd=fs.openSync("/dev/stdin","r");usingDevice=true}catch(e){}bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null);if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents}),getFileDataAsTypedArray:(function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)}),expandFileStorage:(function(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity)node.contents.push(0)}),resizeFileStorage:(function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize)node.contents.push(0);node.usedBytes=newSize}),node_ops:{getattr:(function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}}),lookup:(function(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT]}),mknod:(function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)}),rename:(function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir}),unlink:(function(parent,name){delete parent.contents[name]}),rmdir:(function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}delete parent.contents[name]}),readdir:(function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries}),symlink:(function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node}),readlink:(function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return node.link})},stream_ops:{read:(function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size}),write:(function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}),allocate:(function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0})}};var IDBFS={dbs:{},indexedDB:(function(){if(typeof indexedDB!=="undefined")return indexedDB;var ret=null;if(typeof window==="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret}),DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:(function(mount){return MEMFS.mount.apply(null,arguments)}),syncfs:(function(mount,populate,callback){IDBFS.getLocalSet(mount,(function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,(function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)}))}))}),getDB:(function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}req.onupgradeneeded=(function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}});req.onsuccess=(function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),getLocalSet:(function(mount,callback){var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return(function(p){return PATH.join2(root,p)})}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries:entries})}),getRemoteSet:(function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,(function(err,db){if(err)return callback(err);var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=(function(e){callback(this.error);e.preventDefault()});var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=(function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()})}))}),loadLocalEntry:(function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}}),storeLocalEntry:(function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{encoding:"binary",canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)}),removeLocalEntry:(function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)}),loadRemoteEntry:(function(store,path,callback){var req=store.get(path);req.onsuccess=(function(event){callback(null,event.target.result)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),storeRemoteEntry:(function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),removeRemoteEntry:(function(store,path,callback){var req=store.delete(path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),reconcile:(function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach((function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;flags&=~524288;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i<res;i++){buffer[offset+i]=nbuffer[i]}}return res}),write:(function(stream,buffer,offset,length,position){var nbuffer=new Buffer(buffer.subarray(offset,offset+length));var res;try{res=fs.writeSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}return res}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join("/");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,curr,WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split("/");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts["files"]||[],(function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)}));(mount.opts["blobs"]||[]).forEach((function(obj){WORKERFS.createNode(ensureParent(obj["name"]),base(obj["name"]),WORKERFS.FILE_MODE,0,obj["data"])}));(mount.opts["packages"]||[]).forEach((function(pack){pack["metadata"].files.forEach((function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack["blob"].slice(file.start,file.end))}))}));return root}),createNode:(function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node}),node_ops:{getattr:(function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}}),lookup:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}),mknod:(function(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rename:(function(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),unlink:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rmdir:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readdir:(function(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),symlink:(function(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readlink:(function(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM)})},stream_ops:{read:(function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var _stdin=allocate(1,"i32*",ALLOC_STATIC);var _stdout=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}}),getMode:(function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}),joinPath:(function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]=="/")path=path.substr(1);return path}),absolutePath:(function(relative,base){return PATH.resolve(base,relative)}),standardizePath:(function(path){return PATH.normalize(path)}),findObject:(function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}}),analyzePath:(function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret}),createFolder:(function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)}),createPath:(function(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current}),createFile:(function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)}),createDataFile:(function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data==="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,"w");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node}),createDevice:(function(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:(function(stream){stream.seekable=false}),close:(function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}}),read:(function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})});return FS.mkdev(path,mode,dev)}),createLink:(function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);return FS.symlink(target,path)}),forceLoadFile:(function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!=="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(Module["read"]){try{obj.contents=intArrayFromString(Module["read"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}if(!success)___setErrNo(ERRNO_CODES.EIO);return success}),createLazyFile:(function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node}),createPreloadedFile:(function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module["preloadPlugins"].forEach((function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,(function(){if(onerror)onerror();removeRunDependency(dep)}));handled=true}}));if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,(function(byteArray){processData(byteArray)}),onerror)}else{processData(url)}}),indexedDB:(function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}),DB_NAME:(function(){return"EM_FS_"+window.location.pathname}),DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror}),loadFilesFromDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror})};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")})};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}}),runIter:(function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)Module.printErr("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()})},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:(function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([(new Uint8Array(byteArray)).buffer],{type:Browser.getMimetype(name)})}}catch(e){Runtime.warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append((new Uint8Array(byteArray)).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",(function(){finish(audio)}),false);audio.onerror=function audio_onerror(event){if(done)return;console.log("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}}),wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:(function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle})};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:(function(dirfd,path){if(path[0]!=="/"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path}),doStat:(function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}),doWritev:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_bitshift64Lshr"]=_bitshift64Lshr;var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cond_broadcast(){return 0}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_mutex_unlock(){}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function _pthread_mutex_lock(){}var _llvm_pow_f64=Math_pow;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}Module["_memmove"]=_memmove;function ___cxa_guard_abort(){}var _emscripten_preinvoke=true;var _BItoD=true;function _pthread_cond_wait(){return 0}function ___cxa_rethrow(){___cxa_end_catch.rethrown=true;var ptr=EXCEPTIONS.caught.pop();EXCEPTIONS.last=ptr;throw ptr}function ___cxa_guard_release(){}Module["_round"]=_round;function _distme_(){Module["printErr"]("missing function: distme_");abort(-1)}function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}var _SItoD=true;Module["_memset"]=_memset;var _BDtoILow=true;function ___gxx_personality_v0(){}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?Pointer_stringify(tm_zone):""};var pattern=Pointer_stringify(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,"0")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":(function(date){return WEEKDAYS[date.tm_wday].substring(0,3)}),"%A":(function(date){return WEEKDAYS[date.tm_wday]}),"%b":(function(date){return MONTHS[date.tm_mon].substring(0,3)}),"%B":(function(date){return MONTHS[date.tm_mon]}),"%C":(function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)}),"%d":(function(date){return leadingNulls(date.tm_mday,2)}),"%e":(function(date){return leadingSomething(date.tm_mday,2," ")}),"%g":(function(date){return getWeekBasedYear(date).toString().substring(2)}),"%G":(function(date){return getWeekBasedYear(date)}),"%H":(function(date){return leadingNulls(date.tm_hour,2)}),"%I":(function(date){return leadingNulls(date.tm_hour<13?date.tm_hour:date.tm_hour-12,2)}),"%j":(function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)}),"%m":(function(date){return leadingNulls(date.tm_mon+1,2)}),"%M":(function(date){return leadingNulls(date.tm_min,2)}),"%n":(function(){return"\n"}),"%p":(function(date){if(date.tm_hour>0&&date.tm_hour<13){return"AM"}else{return"PM"}}),"%S":(function(date){return leadingNulls(date.tm_sec,2)}),"%t":(function(){return"\t"}),"%u":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7}),"%U":(function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"}),"%V":(function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()<date.tm_year+1900){daysDifference=date.tm_yday+32-firstWeekStartThisYear.getDate()}else{daysDifference=date.tm_yday+1-firstWeekStartThisYear.getDate()}return leadingNulls(Math.ceil(daysDifference/7),2)}),"%w":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()}),"%W":(function(date){var janFirst=new Date(date.tm_year,0,1);var firstMonday=janFirst.getDay()===1?janFirst:__addDays(janFirst,janFirst.getDay()===0?1:7-janFirst.getDay()+1);var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstMonday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstMondayUntilEndJanuary=31-firstMonday.getDate();var days=firstMondayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstMonday,janFirst)===0?"01":"00"}),"%y":(function(date){return(date.tm_year+1900).toString().substring(2)}),"%Y":(function(date){return date.tm_year+1900}),"%z":(function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)}),"%Z":(function(date){return date.tm_zone}),"%%":(function(){return"%"})};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _abort(){Module["abort"]()}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall("v",func);_pthread_once.seen[ptr]=1}function ___lock(){}function ___unlock(){}var _asin=Math_asin;function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var _llvm_fabs_f64=Math_abs;var _fabs=Math_abs;var _floor=Math_floor;var _sqrt=Math_sqrt;function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function ___cxa_allocate_exception(size){return _malloc(size)}var _sin=Math_sin;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}var _atan=Math_atan;function ___cxa_guard_acquire(variable){if(!HEAP8[variable>>0]){HEAP8[variable>>0]=1;return 1}return 0}function ___cxa_begin_catch(ptr){__ZSt18uncaught_exceptionv.uncaught_exception--;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}Module["_bitshift64Shl"]=_bitshift64Shl;function _llvm_eh_typeid_for(type){return type}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _acos=Math_acos;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _cos=Math_cos;function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}var _atan2=Math_atan2;var _exp=Math_exp;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var ___dso_handle=allocate(1,"i32*",ALLOC_STATIC);function _blocko_(){Module["printErr"]("missing function: blocko_");abort(-1)}function _blockp_(){Module["printErr"]("missing function: blockp_");abort(-1)}function _blockrad_(){Module["printErr"]("missing function: blockrad_");abort(-1)}function _blocks_(){Module["printErr"]("missing function: blocks_");abort(-1)}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE<TOTAL_MEMORY,"TOTAL_MEMORY not big enough for stack");var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_DYNAMIC);function invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){try{return Module["dynCall_iiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiid(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_iiiiiid"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_vid(index,a1,a2){try{Module["dynCall_vid"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_vi(index,a1){try{Module["dynCall_vi"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_vii(index,a1,a2){try{Module["dynCall_vii"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_iiiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiiiiiid(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){try{Module["dynCall_viiiiiiiiiid"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viidi(index,a1,a2,a3,a4){try{Module["dynCall_viidi"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13){try{return Module["dynCall_iiiiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiidd(index,a1,a2,a3,a4,a5,a6,a7,a8){try{Module["dynCall_viiiiiidd"](index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_diddddi(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_diddddi"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_vidi(index,a1,a2,a3){try{Module["dynCall_vidi"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiddii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiddii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_diddddd(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_diddddd"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_vidd(index,a1,a2,a3){try{Module["dynCall_vidd"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15){try{Module["dynCall_viiiiiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){try{Module["dynCall_viiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_diiii(index,a1,a2,a3,a4){try{return Module["dynCall_diiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiidd(index,a1,a2,a3,a4,a5,a6,a7){try{Module["dynCall_viiiiidd"](index,a1,a2,a3,a4,a5,a6,a7)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viid(index,a1,a2,a3){try{Module["dynCall_viid"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiidi(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiiidi"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_di(index,a1){try{return Module["dynCall_di"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){try{return Module["dynCall_iiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iid(index,a1,a2){try{return Module["dynCall_iid"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){try{Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){try{return Module["dynCall_iiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){try{Module["dynCall_viiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){try{Module["dynCall_viiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iii(index,a1,a2){try{return Module["dynCall_iii"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){try{return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_diii(index,a1,a2,a3){try{return Module["dynCall_diii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiddii(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_iiiddii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_dii(index,a1,a2){try{return Module["dynCall_dii"](index,a1,a2)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiiid(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiid"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_i(index){try{return Module["dynCall_i"](index)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){try{return Module["dynCall_iiiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiid(index,a1,a2,a3,a4){try{Module["dynCall_viiid"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viii(index,a1,a2,a3){try{Module["dynCall_viii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_v(index){try{Module["dynCall_v"](index)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){try{return Module["dynCall_iiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_iiiiid(index,a1,a2,a3,a4,a5){try{return Module["dynCall_iiiiid"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module["dynCall_viiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;asm["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity,"byteLength":byteLength};Module.asmLibraryArg={"abort":abort,"assert":assert,"invoke_iiiiiiii":invoke_iiiiiiii,"invoke_iiiiiid":invoke_iiiiiid,"invoke_vid":invoke_vid,"invoke_viiiii":invoke_viiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_iiiiiii":invoke_iiiiiii,"invoke_ii":invoke_ii,"invoke_viiiiiiiiiid":invoke_viiiiiiiiiid,"invoke_viidi":invoke_viidi,"invoke_iiiiiiiiiiiiii":invoke_iiiiiiiiiiiiii,"invoke_viiiiiidd":invoke_viiiiiidd,"invoke_diddddi":invoke_diddddi,"invoke_vidi":invoke_vidi,"invoke_viiddii":invoke_viiddii,"invoke_diddddd":invoke_diddddd,"invoke_vidd":invoke_vidd,"invoke_iiii":invoke_iiii,"invoke_viiiiiiiiiiiiiii":invoke_viiiiiiiiiiiiiii,"invoke_viiiiiiii":invoke_viiiiiiii,"invoke_viiiiii":invoke_viiiiii,"invoke_diiii":invoke_diiii,"invoke_viiiiidd":invoke_viiiiidd,"invoke_viid":invoke_viid,"invoke_viiiidi":invoke_viiiidi,"invoke_di":invoke_di,"invoke_iiiiiiiiiii":invoke_iiiiiiiiiii,"invoke_iid":invoke_iid,"invoke_viiiiiii":invoke_viiiiiii,"invoke_iiiiiiiiiiii":invoke_iiiiiiiiiiii,"invoke_viiiiiiiii":invoke_viiiiiiiii,"invoke_viiiiiiiiii":invoke_viiiiiiiiii,"invoke_iii":invoke_iii,"invoke_iiiiii":invoke_iiiiii,"invoke_diii":invoke_diii,"invoke_iiiddii":invoke_iiiddii,"invoke_dii":invoke_dii,"invoke_viiiid":invoke_viiiid,"invoke_i":invoke_i,"invoke_iiiii":invoke_iiiii,"invoke_viiid":invoke_viiid,"invoke_viii":invoke_viii,"invoke_v":invoke_v,"invoke_iiiiiiiii":invoke_iiiiiiiii,"invoke_iiiiid":invoke_iiiiid,"invoke_viiii":invoke_viiii,"_pthread_cleanup_pop":_pthread_cleanup_pop,"_strftime":_strftime,"_pthread_cond_wait":_pthread_cond_wait,"_sin":_sin,"_exp":_exp,"_llvm_pow_f64":_llvm_pow_f64,"_acos":_acos,"___syscall54":___syscall54,"_pthread_cleanup_push":_pthread_cleanup_push,"___syscall6":___syscall6,"_llvm_fabs_f64":_llvm_fabs_f64,"_atan2":_atan2,"_emscripten_set_main_loop_timing":_emscripten_set_main_loop_timing,"___gxx_personality_v0":___gxx_personality_v0,"_asin":_asin,"___assert_fail":___assert_fail,"___cxa_free_exception":___cxa_free_exception,"___cxa_allocate_exception":___cxa_allocate_exception,"__ZSt18uncaught_exceptionv":__ZSt18uncaught_exceptionv,"_floor":_floor,"_pthread_cond_broadcast":_pthread_cond_broadcast,"___cxa_guard_release":___cxa_guard_release,"__addDays":__addDays,"___cxa_guard_acquire":___cxa_guard_acquire,"_strftime_l":_strftime_l,"_what0_":_what0_,"___setErrNo":___setErrNo,"_llvm_eh_typeid_for":_llvm_eh_typeid_for,"_sbrk":_sbrk,"_atan":_atan,"___cxa_begin_catch":___cxa_begin_catch,"_emscripten_memcpy_big":_emscripten_memcpy_big,"___cxa_end_catch":___cxa_end_catch,"___resumeException":___resumeException,"___cxa_find_matching_catch":___cxa_find_matching_catch,"_sysconf":_sysconf,"_pthread_getspecific":_pthread_getspecific,"_clock":_clock,"__arraySum":__arraySum,"___syscall221":___syscall221,"_cos":_cos,"_pthread_self":_pthread_self,"_pthread_mutex_unlock":_pthread_mutex_unlock,"_pthread_once":_pthread_once,"_fabs":_fabs,"___cxa_rethrow":___cxa_rethrow,"_sqrt":_sqrt,"_pthread_key_create":_pthread_key_create,"___unlock":___unlock,"__isLeapYear":__isLeapYear,"_emscripten_set_main_loop":_emscripten_set_main_loop,"_log":_log,"_pthread_setspecific":_pthread_setspecific,"___cxa_atexit":___cxa_atexit,"___cxa_throw":___cxa_throw,"__exit":__exit,"___lock":___lock,"_abort":_abort,"___syscall5":___syscall5,"___cxa_pure_virtual":___cxa_pure_virtual,"_time":_time,"_pthread_mutex_lock":_pthread_mutex_lock,"_distme_":_distme_,"___cxa_guard_abort":___cxa_guard_abort,"_atexit":_atexit,"___syscall140":___syscall140,"_exit":_exit,"___syscall145":___syscall145,"___syscall146":___syscall146,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"cttz_i8":cttz_i8,"___dso_handle":___dso_handle,"_blocko_":_blocko_,"_blockp_":_blockp_,"_blockrad_":_blockrad_,"_blocks_":_blocks_};// EMSCRIPTEN_START_ASM
+-var asm=(function(global,env,buffer) {
+-"use asm";var a=global.Int8Array;var b=global.Int16Array;var c=global.Int32Array;var d=global.Uint8Array;var e=global.Uint16Array;var f=global.Uint32Array;var g=global.Float32Array;var h=global.Float64Array;var i=new a(buffer);var j=new b(buffer);var k=new c(buffer);var l=new d(buffer);var m=new e(buffer);var n=new f(buffer);var o=new g(buffer);var p=new h(buffer);var q=global.byteLength;var r=env.STACKTOP|0;var s=env.STACK_MAX|0;var t=env.tempDoublePtr|0;var u=env.ABORT|0;var v=env.cttz_i8|0;var w=env.___dso_handle|0;var x=env._blocko_|0;var y=env._blockp_|0;var z=env._blockrad_|0;var A=env._blocks_|0;var B=0;var C=0;var D=0;var E=0;var F=global.NaN,G=global.Infinity;var H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0,P=0.0;var Q=0;var R=0;var S=0;var T=0;var U=0;var V=0;var W=0;var X=0;var Y=0;var Z=0;var _=global.Math.floor;var $=global.Math.abs;var aa=global.Math.sqrt;var ba=global.Math.pow;var ca=global.Math.cos;var da=global.Math.sin;var ea=global.Math.tan;var fa=global.Math.acos;var ga=global.Math.asin;var ha=global.Math.atan;var ia=global.Math.atan2;var ja=global.Math.exp;var ka=global.Math.log;var la=global.Math.ceil;var ma=global.Math.imul;var na=global.Math.min;var oa=global.Math.clz32;var pa=env.abort;var qa=env.assert;var ra=env.invoke_iiiiiiii;var sa=env.invoke_iiiiiid;var ta=env.invoke_vid;var ua=env.invoke_viiiii;var va=env.invoke_vi;var wa=env.invoke_vii;var xa=env.invoke_iiiiiii;var ya=env.invoke_ii;var za=env.invoke_viiiiiiiiiid;var Aa=env.invoke_viidi;var Ba=env.invoke_iiiiiiiiiiiiii;var Ca=env.invoke_viiiiiidd;var Da=env.invoke_diddddi;var Ea=env.invoke_vidi;var Fa=env.invoke_viiddii;var Ga=env.invoke_diddddd;var Ha=env.invoke_vidd;var Ia=env.invoke_iiii;var Ja=env.invoke_viiiiiiiiiiiiiii;var Ka=env.invoke_viiiiiiii;var La=env.invoke_viiiiii;var Ma=env.invoke_diiii;var Na=env.invoke_viiiiidd;var Oa=env.invoke_viid;var Pa=env.invoke_viiiidi;var Qa=env.invoke_di;var Ra=env.invoke_iiiiiiiiiii;var Sa=env.invoke_iid;var Ta=env.invoke_viiiiiii;var Ua=env.invoke_iiiiiiiiiiii;var Va=env.invoke_viiiiiiiii;var Wa=env.invoke_viiiiiiiiii;var Xa=env.invoke_iii;var Ya=env.invoke_iiiiii;var Za=env.invoke_diii;var _a=env.invoke_iiiddii;var $a=env.invoke_dii;var ab=env.invoke_viiiid;var bb=env.invoke_i;var cb=env.invoke_iiiii;var db=env.invoke_viiid;var eb=env.invoke_viii;var fb=env.invoke_v;var gb=env.invoke_iiiiiiiii;var hb=env.invoke_iiiiid;var ib=env.invoke_viiii;var jb=env._pthread_cleanup_pop;var kb=env._strftime;var lb=env._pthread_cond_wait;var mb=env._sin;var nb=env._exp;var ob=env._llvm_pow_f64;var pb=env._acos;var qb=env.___syscall54;var rb=env._pthread_cleanup_push;var sb=env.___syscall6;var tb=env._llvm_fabs_f64;var ub=env._atan2;var vb=env._emscripten_set_main_loop_timing;var wb=env.___gxx_personality_v0;var xb=env._asin;var yb=env.___assert_fail;var zb=env.___cxa_free_exception;var Ab=env.___cxa_allocate_exception;var Bb=env.__ZSt18uncaught_exceptionv;var Cb=env._floor;var Db=env._pthread_cond_broadcast;var Eb=env.___cxa_guard_release;var Fb=env.__addDays;var Gb=env.___cxa_guard_acquire;var Hb=env._strftime_l;var Ib=env._what0_;var Jb=env.___setErrNo;var Kb=env._llvm_eh_typeid_for;var Lb=env._sbrk;var Mb=env._atan;var Nb=env.___cxa_begin_catch;var Ob=env._emscripten_memcpy_big;var Pb=env.___cxa_end_catch;var Qb=env.___resumeException;var Rb=env.___cxa_find_matching_catch;var Sb=env._sysconf;var Tb=env._pthread_getspecific;var Ub=env._clock;var Vb=env.__arraySum;var Wb=env.___syscall221;var Xb=env._cos;var Yb=env._pthread_self;var Zb=env._pthread_mutex_unlock;var _b=env._pthread_once;var $b=env._fabs;var ac=env.___cxa_rethrow;var bc=env._sqrt;var cc=env._pthread_key_create;var dc=env.___unlock;var ec=env.__isLeapYear;var fc=env._emscripten_set_main_loop;var gc=env._log;var hc=env._pthread_setspecific;var ic=env.___cxa_atexit;var jc=env.___cxa_throw;var kc=env.__exit;var lc=env.___lock;var mc=env._abort;var nc=env.___syscall5;var oc=env.___cxa_pure_virtual;var pc=env._time;var qc=env._pthread_mutex_lock;var rc=env._distme_;var sc=env.___cxa_guard_abort;var tc=env._atexit;var uc=env.___syscall140;var vc=env._exit;var wc=env.___syscall145;var xc=env.___syscall146;var yc=0.0;function zc(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;i=new a(newBuffer);j=new b(newBuffer);k=new c(newBuffer);l=new d(newBuffer);m=new e(newBuffer);n=new f(newBuffer);o=new g(newBuffer);p=new h(newBuffer);buffer=newBuffer;return true}
+-// EMSCRIPTEN_START_FUNCS
+-function vta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0.0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0;d=r;r=r+304|0;e=d+16|0;f=d+8|0;g=d+33|0;h=d;m=d+32|0;if((k[a+76>>2]|0)>-1)n=Hsa(a)|0;else n=0;q=i[b>>0]|0;a:do if(q<<24>>24){s=a+4|0;t=a+100|0;u=a+108|0;v=a+8|0;w=g+10|0;x=g+33|0;y=f+4|0;z=g+46|0;A=g+94|0;B=q;C=0;D=b;E=0;F=0;G=0;b:while(1){c:do if(!(Qra(B&255)|0)){H=(i[D>>0]|0)==37;d:do if(H){I=D+1|0;J=i[I>>0]|0;e:do switch(J<<24>>24){case 37:{break d;break}case 42:{K=0;L=D+2|0;break}default:{M=(J&255)+-48|0;if(M>>>0<10?(i[D+2>>0]|0)==36:0){k[e>>2]=k[c>>2];N=M;while(1){M=(k[e>>2]|0)+(4-1)&~(4-1);O=k[M>>2]|0;k[e>>2]=M+4;if(N>>>0>1)N=N+-1|0;else{P=O;break}}K=P;L=D+3|0;break e}N=(k[c>>2]|0)+(4-1)&~(4-1);O=k[N>>2]|0;k[c>>2]=N+4;K=O;L=I}}while(0);I=i[L>>0]|0;J=I&255;if((J+-48|0)>>>0<10){O=J;J=L;N=0;while(1){M=(N*10|0)+-48+O|0;R=J+1|0;S=i[R>>0]|0;O=S&255;if((O+-48|0)>>>0>=10){T=S;U=R;V=M;break}else{J=R;N=M}}}else{T=I;U=L;V=0}if(T<<24>>24==109){N=U+1|0;W=i[N>>0]|0;X=(K|0)!=0&1;Y=N;Z=0;_=0}else{W=T;X=0;Y=U;Z=F;_=G}N=Y+1|0;switch(W&255|0){case 104:{J=(i[N>>0]|0)==104;$=J?Y+2|0:N;aa=J?-2:-1;break}case 108:{J=(i[N>>0]|0)==108;$=J?Y+2|0:N;aa=J?3:1;break}case 106:{$=N;aa=3;break}case 116:case 122:{$=N;aa=1;break}case 76:{$=N;aa=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{$=Y;aa=0;break}default:{ba=X;ca=C;da=Z;ea=_;fa=154;break b}}N=l[$>>0]|0;J=(N&47|0)==3;O=J?N|32:N;N=J?1:aa;switch(O|0){case 99:{ga=E;ha=(V|0)<1?1:V;break}case 91:{ga=E;ha=V;break}case 110:{if(!K){ia=C;ja=$;ka=E;la=Z;ma=_;break c}switch(N|0){case -2:{i[K>>0]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case -1:{j[K>>1]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 0:{k[K>>2]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 1:{k[K>>2]=E;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}case 3:{J=K;k[J>>2]=E;k[J+4>>2]=((E|0)<0)<<31>>31;ia=C;ja=$;ka=E;la=Z;ma=_;break c;break}default:{ia=C;ja=$;ka=E;la=Z;ma=_;break c}}break}default:{Wra(a,0);do{J=k[s>>2]|0;if(J>>>0<(k[t>>2]|0)>>>0){k[s>>2]=J+1;na=l[J>>0]|0}else na=Xra(a)|0}while((Qra(na)|0)!=0);if(!(k[t>>2]|0))oa=k[s>>2]|0;else{I=(k[s>>2]|0)+-1|0;k[s>>2]=I;oa=I}ga=(k[u>>2]|0)+E+oa-(k[v>>2]|0)|0;ha=V}}Wra(a,ha);I=k[s>>2]|0;J=k[t>>2]|0;if(I>>>0<J>>>0){k[s>>2]=I+1;pa=J}else{if((Xra(a)|0)<0){ba=X;ca=C;da=Z;ea=_;fa=154;break b}pa=k[t>>2]|0}if(pa)k[s>>2]=(k[s>>2]|0)+-1;f:do switch(O|0){case 91:case 99:case 115:{J=(O|0)==99;g:do if((O&239|0)==99){WEa(g|0,-1,257)|0;i[g>>0]=0;if((O|0)==115){i[x>>0]=0;i[w>>0]=0;i[w+1>>0]=0;i[w+2>>0]=0;i[w+3>>0]=0;i[w+4>>0]=0;qa=$}else qa=$}else{I=$+1|0;M=(i[I>>0]|0)==94;R=M&1;S=M?$+2|0:I;WEa(g|0,M&1|0,257)|0;i[g>>0]=0;switch(i[S>>0]|0){case 45:{M=(R^1)&255;i[z>>0]=M;ra=M;sa=S+1|0;break}case 93:{M=(R^1)&255;i[A>>0]=M;ra=M;sa=S+1|0;break}default:{ra=(R^1)&255;sa=S}}S=sa;while(1){R=i[S>>0]|0;h:do switch(R<<24>>24){case 0:{ba=X;ca=C;da=Z;ea=_;fa=154;break b;break}case 93:{qa=S;break g;break}case 45:{M=S+1|0;I=i[M>>0]|0;switch(I<<24>>24){case 93:case 0:{ta=45;ua=S;break h;break}default:{}}va=i[S+-1>>0]|0;if((va&255)<(I&255)){wa=va&255;do{wa=wa+1|0;i[g+wa>>0]=ra;va=i[M>>0]|0}while((wa|0)<(va&255|0));ta=va;ua=M}else{ta=I;ua=M}break}default:{ta=R;ua=S}}while(0);i[g+((ta&255)+1)>>0]=ra;S=ua+1|0}}while(0);S=J?ha+1|0:31;R=(N|0)==1;wa=(X|0)!=0;i:do if(R){if(wa){va=lua(S<<2)|0;if(!va){ba=X;ca=C;da=0;ea=va;fa=154;break b}else xa=va}else xa=K;k[f>>2]=0;k[y>>2]=0;va=0;ya=S;za=xa;j:while(1){Aa=(za|0)==0;Ba=va;while(1){k:while(1){Ca=k[s>>2]|0;if(Ca>>>0<(k[t>>2]|0)>>>0){k[s>>2]=Ca+1;Da=l[Ca>>0]|0}else Da=Xra(a)|0;if(!(i[g+(Da+1)>>0]|0)){Ea=Ba;Fa=za;break j}i[m>>0]=Da;switch(usa(h,m,1,f)|0){case -1:{ba=X;ca=C;da=0;ea=za;fa=154;break b;break}case -2:break;default:break k}}if(Aa)Ga=Ba;else{k[za+(Ba<<2)>>2]=k[h>>2];Ga=Ba+1|0}if(wa&(Ga|0)==(ya|0))break;else Ba=Ga}Ba=ya<<1|1;Aa=oua(za,Ba<<2)|0;if(!Aa){ba=X;ca=C;da=0;ea=za;fa=154;break b}else{M=ya;ya=Ba;za=Aa;va=M}}if(!(vsa(f)|0)){ba=X;ca=C;da=0;ea=Fa;fa=154;break b}else{Ha=Ea;Ia=0;Ja=Fa}}else{if(wa){va=lua(S)|0;if(!va){ba=X;ca=C;da=0;ea=0;fa=154;break b}else{Ka=0;La=S;Ma=va}while(1){va=Ka;do{za=k[s>>2]|0;if(za>>>0<(k[t>>2]|0)>>>0){k[s>>2]=za+1;Na=l[za>>0]|0}else Na=Xra(a)|0;if(!(i[g+(Na+1)>>0]|0)){Ha=va;Ia=Ma;Ja=0;break i}i[Ma+va>>0]=Na;va=va+1|0}while((va|0)!=(La|0));va=La<<1|1;za=oua(Ma,va)|0;if(!za){ba=X;ca=C;da=Ma;ea=0;fa=154;break b}else{ya=La;La=va;Ma=za;Ka=ya}}}if(!K){ya=pa;while(1){za=k[s>>2]|0;if(za>>>0<ya>>>0){k[s>>2]=za+1;Oa=l[za>>0]|0}else Oa=Xra(a)|0;if(!(i[g+(Oa+1)>>0]|0)){Ha=0;Ia=0;Ja=0;break i}ya=k[t>>2]|0}}else{ya=pa;za=0;while(1){va=k[s>>2]|0;if(va>>>0<ya>>>0){k[s>>2]=va+1;Pa=l[va>>0]|0}else Pa=Xra(a)|0;if(!(i[g+(Pa+1)>>0]|0)){Ha=za;Ia=K;Ja=0;break i}i[K+za>>0]=Pa;ya=k[t>>2]|0;za=za+1|0}}}while(0);if(!(k[t>>2]|0))Qa=k[s>>2]|0;else{S=(k[s>>2]|0)+-1|0;k[s>>2]=S;Qa=S}S=Qa-(k[v>>2]|0)+(k[u>>2]|0)|0;if(!S){Ra=X;Sa=C;Ta=Ia;Ua=Ja;break b}if(!((S|0)==(ha|0)|J^1)){Ra=X;Sa=C;Ta=Ia;Ua=Ja;break b}do if(wa)if(R){k[K>>2]=Ja;break}else{k[K>>2]=Ia;break}while(0);if(J){Va=qa;Wa=Ia;Xa=Ja}else{if(Ja)k[Ja+(Ha<<2)>>2]=0;if(!Ia){Va=qa;Wa=0;Xa=Ja;break f}i[Ia+Ha>>0]=0;Va=qa;Wa=Ia;Xa=Ja}break}case 120:case 88:case 112:{Ya=16;fa=136;break}case 111:{Ya=8;fa=136;break}case 117:case 100:{Ya=10;fa=136;break}case 105:{Ya=0;fa=136;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{Za=+Ura(a,N,0);if((k[u>>2]|0)==((k[v>>2]|0)-(k[s>>2]|0)|0)){Ra=X;Sa=C;Ta=Z;Ua=_;break b}if(!K){Va=$;Wa=Z;Xa=_}else switch(N|0){case 0:{o[K>>2]=Za;Va=$;Wa=Z;Xa=_;break f;break}case 1:{p[K>>3]=Za;Va=$;Wa=Z;Xa=_;break f;break}case 2:{p[K>>3]=Za;Va=$;Wa=Z;Xa=_;break f;break}default:{Va=$;Wa=Z;Xa=_;break f}}break}default:{Va=$;Wa=Z;Xa=_}}while(0);l:do if((fa|0)==136){fa=0;R=Vra(a,Ya,0,-1,-1)|0;if((k[u>>2]|0)==((k[v>>2]|0)-(k[s>>2]|0)|0)){Ra=X;Sa=C;Ta=Z;Ua=_;break b}if((K|0)!=0&(O|0)==112){k[K>>2]=R;Va=$;Wa=Z;Xa=_;break}if(!K){Va=$;Wa=Z;Xa=_}else switch(N|0){case -2:{i[K>>0]=R;Va=$;Wa=Z;Xa=_;break l;break}case -1:{j[K>>1]=R;Va=$;Wa=Z;Xa=_;break l;break}case 0:{k[K>>2]=R;Va=$;Wa=Z;Xa=_;break l;break}case 1:{k[K>>2]=R;Va=$;Wa=Z;Xa=_;break l;break}case 3:{wa=K;k[wa>>2]=R;k[wa+4>>2]=Q;Va=$;Wa=Z;Xa=_;break l;break}default:{Va=$;Wa=Z;Xa=_;break l}}}while(0);ia=((K|0)!=0&1)+C|0;ja=Va;ka=(k[u>>2]|0)+ga+(k[s>>2]|0)-(k[v>>2]|0)|0;la=Wa;ma=Xa;break c}while(0);N=D+(H&1)|0;Wra(a,0);O=k[s>>2]|0;if(O>>>0<(k[t>>2]|0)>>>0){k[s>>2]=O+1;_a=l[O>>0]|0}else _a=Xra(a)|0;if((_a|0)!=(l[N>>0]|0)){$a=_a;ab=C;bb=F;cb=G;fa=22;break b}ia=C;ja=N;ka=E+1|0;la=F;ma=G}else{N=D;while(1){O=N+1|0;if(!(Qra(l[O>>0]|0)|0)){db=N;break}else N=O}Wra(a,0);do{N=k[s>>2]|0;if(N>>>0<(k[t>>2]|0)>>>0){k[s>>2]=N+1;eb=l[N>>0]|0}else eb=Xra(a)|0}while((Qra(eb)|0)!=0);if(!(k[t>>2]|0))fb=k[s>>2]|0;else{N=(k[s>>2]|0)+-1|0;k[s>>2]=N;fb=N}ia=C;ja=db;ka=(k[u>>2]|0)+E+fb-(k[v>>2]|0)|0;la=F;ma=G}while(0);D=ja+1|0;B=i[D>>0]|0;if(!(B<<24>>24)){gb=ia;break a}else{C=ia;E=ka;F=la;G=ma}}if((fa|0)==22){if(k[t>>2]|0)k[s>>2]=(k[s>>2]|0)+-1;if((ab|0)!=0|($a|0)>-1){gb=ab;break}else{hb=0;ib=bb;jb=cb;fa=155}}else if((fa|0)==154)if(!ca){hb=ba;ib=da;jb=ea;fa=155}else{Ra=ba;Sa=ca;Ta=da;Ua=ea}if((fa|0)==155){Ra=hb;Sa=-1;Ta=ib;Ua=jb}if(!Ra)gb=Sa;else{mua(Ta);mua(Ua);gb=Sa}}else gb=0;while(0);if(n)Isa(a);r=d;return gb|0}function wta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+128|0;f=e+112|0;g=e;h=g;j=42544;l=h+112|0;do{k[h>>2]=k[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(l|0));if((b+-1|0)>>>0>2147483646)if(!b){m=f;n=1;o=4}else{f=Sra()|0;k[f>>2]=75;p=-1}else{m=a;n=b;o=4}if((o|0)==4){o=-2-m|0;b=n>>>0>o>>>0?o:n;k[g+48>>2]=b;n=g+20|0;k[n>>2]=m;k[g+44>>2]=m;o=m+b|0;m=g+16|0;k[m>>2]=o;k[g+28>>2]=o;o=uta(g,c,d)|0;if(!b)p=o;else{b=k[n>>2]|0;i[b+(((b|0)==(k[m>>2]|0))<<31>>31)>>0]=0;p=o}}r=e;return p|0}function xta(a,b,c){a=a|0;b=b|0;c=c|0;return wta(a,2147483647,b,c)|0}function yta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+112|0;e=d;f=e;g=f+112|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));k[e+32>>2]=51;k[e+44>>2]=a;k[e+76>>2]=-1;k[e+84>>2]=a;a=vta(e,b,c)|0;r=d;return a|0}function zta(a,b){a=a|0;b=b|0;return +(+fua(a,b,1))}function Ata(a,b,c){a=a|0;b=b|0;c=c|0;return +(+fua(a,b,2))}function Bta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=gua(a,b,c,-1,-1)|0;return d|0}function Cta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=gua(a,b,c,0,-2147483648)|0;return d|0}function Dta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=b&255;e=(c|0)!=0;a:do if(e&(a&3|0)!=0){f=b&255;g=c;h=a;while(1){if((i[h>>0]|0)==f<<24>>24){j=g;l=h;m=6;break a}n=h+1|0;o=g+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){g=o;h=n}else{q=o;r=p;s=n;m=5;break}}}else{q=c;r=e;s=a;m=5}while(0);if((m|0)==5)if(r){j=q;l=s;m=6}else{t=0;u=s}b:do if((m|0)==6){s=b&255;if((i[l>>0]|0)==s<<24>>24){t=j;u=l}else{q=ma(d,16843009)|0;c:do if(j>>>0>3){r=j;a=l;while(1){e=k[a>>2]^q;if((e&-2139062144^-2139062144)&e+-16843009){v=r;w=a;break}e=a+4|0;c=r+-4|0;if(c>>>0>3){r=c;a=e}else{x=c;y=e;m=11;break c}}z=v;A=w}else{x=j;y=l;m=11}while(0);if((m|0)==11)if(!x){t=0;u=y;break}else{z=x;A=y}while(1){if((i[A>>0]|0)==s<<24>>24){t=z;u=A;break b}q=A+1|0;z=z+-1|0;if(!z){t=0;u=q;break}else A=q}}}while(0);return ((t|0)!=0?u:0)|0}function Eta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=b;a:do if(!((c^a)&3)){if(!(c&3)){d=b;e=a}else{f=a;g=b;while(1){h=i[g>>0]|0;i[f>>0]=h;if(!(h<<24>>24)){j=f;break a}h=g+1|0;l=f+1|0;if(!(h&3)){d=h;e=l;break}else{f=l;g=h}}}g=k[d>>2]|0;if(!((g&-2139062144^-2139062144)&g+-16843009)){f=g;g=e;h=d;while(1){l=h+4|0;m=g+4|0;k[g>>2]=f;f=k[l>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009){n=m;o=l;break}else{g=m;h=l}}}else{n=e;o=d}p=o;q=n;r=8}else{p=b;q=a;r=8}while(0);if((r|0)==8){r=i[p>>0]|0;i[q>>0]=r;if(!(r<<24>>24))j=q;else{r=q;q=p;while(1){q=q+1|0;p=r+1|0;a=i[q>>0]|0;i[p>>0]=a;if(!(a<<24>>24)){j=p;break}else r=p}}}return j|0}function Fta(a,b){a=a|0;b=b|0;Jta(a+(Lta(a)|0)|0,b)|0;return a|0}function Gta(a,b){a=a|0;b=b|0;var c=0;c=Hta(a,b)|0;return ((i[c>>0]|0)==(b&255)<<24>>24?c:0)|0}function Hta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;c=b&255;a:do if(!c)d=a+(Lta(a)|0)|0;else{if(!(a&3))e=a;else{f=b&255;g=a;while(1){h=i[g>>0]|0;if(h<<24>>24==0?1:h<<24>>24==f<<24>>24){d=g;break a}h=g+1|0;if(!(h&3)){e=h;break}else g=h}}g=ma(c,16843009)|0;f=k[e>>2]|0;b:do if(!((f&-2139062144^-2139062144)&f+-16843009)){h=f;j=e;while(1){l=h^g;if((l&-2139062144^-2139062144)&l+-16843009){m=j;break b}l=j+4|0;h=k[l>>2]|0;if((h&-2139062144^-2139062144)&h+-16843009){m=l;break}else j=l}}else m=e;while(0);g=b&255;f=m;while(1){j=i[f>>0]|0;if(j<<24>>24==0?1:j<<24>>24==g<<24>>24){d=f;break}else f=f+1|0}}while(0);return d|0}function Ita(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i[a>>0]|0;d=i[b>>0]|0;if(c<<24>>24==0?1:c<<24>>24!=d<<24>>24){e=c;f=d}else{d=a;a=b;do{d=d+1|0;a=a+1|0;b=i[d>>0]|0;c=i[a>>0]|0}while(!(b<<24>>24==0?1:b<<24>>24!=c<<24>>24));e=b;f=c}return (e&255)-(f&255)|0}function Jta(a,b){a=a|0;b=b|0;Eta(a,b)|0;return a|0}function Kta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=r;r=r+32|0;d=c;e=i[b>>0]|0;if(e<<24>>24!=0?(i[b+1>>0]|0)!=0:0){k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[d+28>>2]=0;f=b;b=e;do{g=d+(((b&255)>>>5&255)<<2)|0;k[g>>2]=k[g>>2]|1<<(b&31);f=f+1|0;b=i[f>>0]|0}while(b<<24>>24!=0);b=i[a>>0]|0;a:do if(!(b<<24>>24))h=a;else{f=a;g=b;while(1){if(k[d+(((g&255)>>>5&255)<<2)>>2]&1<<(g&31)){h=f;break a}j=f+1|0;g=i[j>>0]|0;if(!(g<<24>>24)){h=j;break}else f=j}}while(0);l=h-a|0}else l=(Hta(a,e<<24>>24)|0)-a|0;r=c;return l|0}function Lta(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;b=a;a:do if(!(b&3)){c=a;d=4}else{e=a;f=b;while(1){if(!(i[e>>0]|0)){g=f;break a}h=e+1|0;f=h;if(!(f&3)){c=h;d=4;break}else e=h}}while(0);if((d|0)==4){d=c;while(1){c=k[d>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009))d=d+4|0;else{j=c;l=d;break}}if(!((j&255)<<24>>24))m=l;else{j=l;while(1){l=j+1|0;if(!(i[l>>0]|0)){m=l;break}else j=l}}g=m}return g-b|0}function Mta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,m=0,n=0;if(!c)d=0;else{e=i[a>>0]|0;a:do if(!(e<<24>>24)){f=0;g=b}else{h=c;j=e;k=a;m=b;while(1){h=h+-1|0;n=i[m>>0]|0;if(!(j<<24>>24==n<<24>>24&((h|0)!=0&n<<24>>24!=0))){f=j;g=m;break a}k=k+1|0;n=m+1|0;j=i[k>>0]|0;if(!(j<<24>>24)){f=0;g=n;break}else m=n}}while(0);d=(f&255)-(l[g>>0]|0)|0}return d|0}function Nta(a,b){a=a|0;b=b|0;var c=0;c=Dta(a,0,b)|0;return ((c|0)==0?b:c-a|0)|0}function Ota(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+32|0;d=c;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[d+24>>2]=0;k[d+28>>2]=0;e=i[b>>0]|0;do if(!(e<<24>>24))f=0;else{if(!(i[b+1>>0]|0)){g=a;while(1)if((i[g>>0]|0)==e<<24>>24)g=g+1|0;else{h=g;break}f=h-a|0;break}else{j=b;l=e}do{g=d+(((l&255)>>>5&255)<<2)|0;k[g>>2]=k[g>>2]|1<<(l&31);j=j+1|0;l=i[j>>0]|0}while(l<<24>>24!=0);g=i[a>>0]|0;a:do if(!(g<<24>>24))m=a;else{n=a;o=g;while(1){if(!(k[d+(((o&255)>>>5&255)<<2)>>2]&1<<(o&31))){m=n;break a}p=n+1|0;o=i[p>>0]|0;if(!(o<<24>>24)){m=p;break}else n=p}}while(0);f=m-a|0}while(0);r=c;return f|0}function Pta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!a){c=k[10664]|0;if(!c)d=0;else{e=c;f=3}}else{e=a;f=3}do if((f|0)==3){a=e+(Ota(e,b)|0)|0;if(!(i[a>>0]|0)){k[10664]=0;d=0;break}c=a+(Kta(a,b)|0)|0;k[10664]=c;if(!(i[c>>0]|0)){k[10664]=0;d=a;break}else{k[10664]=c+1;i[c>>0]=0;d=a;break}}while(0);return d|0}function Qta(a){a=a|0;var b=0,c=0;b=a;while(1)if(!(k[b>>2]|0)){c=b;break}else b=b+4|0;return c-a>>2|0}function Rta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=c;c=b;b=a;while(1){d=d+-1|0;k[b>>2]=k[c>>2];if(!d)break;else{c=c+4|0;b=b+4|0}}}return a|0}function Sta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=(c|0)==0;if(a-b>>2>>>0<c>>>0){if(!d){e=c;do{e=e+-1|0;k[a+(e<<2)>>2]=k[b+(e<<2)>>2]}while((e|0)!=0)}}else if(!d){d=b;b=a;e=c;while(1){e=e+-1|0;k[b>>2]=k[d>>2];if(!e)break;else{d=d+4|0;b=b+4|0}}}return a|0}function Tta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=c;c=a;while(1){d=d+-1|0;k[c>>2]=b;if(!d)break;else c=c+4|0}}return a|0}function Uta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;c=a+4|0;d=k[c>>2]|0;e=a+100|0;if(d>>>0<(k[e>>2]|0)>>>0){k[c>>2]=d+1;f=l[d>>0]|0}else f=Xra(a)|0;switch(f|0){case 43:case 45:{d=(f|0)==45&1;g=k[c>>2]|0;if(g>>>0<(k[e>>2]|0)>>>0){k[c>>2]=g+1;h=l[g>>0]|0}else h=Xra(a)|0;if((b|0)!=0&(h+-48|0)>>>0>9?(k[e>>2]|0)!=0:0){k[c>>2]=(k[c>>2]|0)+-1;i=h;j=d}else{i=h;j=d}break}default:{i=f;j=0}}if((i+-48|0)>>>0>9)if(!(k[e>>2]|0)){m=-2147483648;n=0}else{k[c>>2]=(k[c>>2]|0)+-1;m=-2147483648;n=0}else{f=i;i=0;while(1){d=f+-48+(i*10|0)|0;h=k[c>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[c>>2]=h+1;o=l[h>>0]|0}else o=Xra(a)|0;if((o+-48|0)>>>0<10&(d|0)<214748364){f=o;i=d}else{p=d;q=o;break}}o=((p|0)<0)<<31>>31;if((q+-48|0)>>>0<10){i=p;f=o;d=q;while(1){h=bFa(i|0,f|0,10,0)|0;b=Q;g=QEa(d|0,((d|0)<0)<<31>>31|0,-48,-1)|0;r=QEa(g|0,Q|0,h|0,b|0)|0;b=Q;h=k[c>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[c>>2]=h+1;s=l[h>>0]|0}else s=Xra(a)|0;if((s+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&r>>>0<2061584302)){i=r;f=b;d=s}else{t=r;u=b;v=s;break}}}else{t=p;u=o;v=q}if((v+-48|0)>>>0<10)do{v=k[c>>2]|0;if(v>>>0<(k[e>>2]|0)>>>0){k[c>>2]=v+1;w=l[v>>0]|0}else w=Xra(a)|0}while((w+-48|0)>>>0<10);if(k[e>>2]|0)k[c>>2]=(k[c>>2]|0)+-1;c=(j|0)!=0;j=REa(0,0,t|0,u|0)|0;m=c?Q:u;n=c?j:t}Q=m;return n|0}function Vta(a){a=a|0;if(!(k[a+68>>2]|0))Isa(a);return}function Wta(a){a=a|0;if(!(k[a+68>>2]|0))Isa(a);return}function Xta(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;c=a+28|0;if((k[b>>2]|0)>>>0>(k[c>>2]|0)>>>0?(Rc[k[a+36>>2]&63](a,0,0)|0,(k[b>>2]|0)==0):0)d=-1;else{e=a+4|0;f=k[e>>2]|0;g=a+8|0;h=k[g>>2]|0;if(f>>>0<h>>>0)Rc[k[a+40>>2]&63](a,f-h|0,1)|0;k[a+16>>2]=0;k[c>>2]=0;k[b>>2]=0;k[g>>2]=0;k[e>>2]=0;d=0}return d|0}function Yta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=k[a+84>>2]|0;e=k[d+4>>2]|0;f=k[d>>2]|0;g=e>>>0<f>>>0?0:e-f|0;if(g>>>0<c>>>0){k[a>>2]=k[a>>2]|16;h=g}else h=c;c=d+12|0;TEa(b|0,(k[c>>2]|0)+f|0,h|0)|0;f=(k[d>>2]|0)+h|0;k[d>>2]=f;b=g-h|0;g=k[a+48>>2]|0;e=b>>>0>g>>>0?g:b;b=k[a+44>>2]|0;k[a+4>>2]=b;g=b;k[a+8>>2]=g+e;TEa(g|0,(k[c>>2]|0)+f|0,e|0)|0;k[d>>2]=(k[d>>2]|0)+e;return h|0}function Zta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=k[a+84>>2]|0;e=a+20|0;f=k[e>>2]|0;g=k[a+28>>2]|0;h=g;j=f-h|0;if((f|0)!=(h|0)?(k[e>>2]=g,(Zta(a,g,j)|0)>>>0<j>>>0):0)l=0;else m=3;do if((m|0)==3){if((k[d+16>>2]|0)==97){j=d+4|0;g=k[j>>2]|0;k[d>>2]=g;n=j;o=d;p=g}else{n=d+4|0;o=d;p=k[d>>2]|0}g=d+8|0;j=(k[g>>2]|0)-p|0;e=j>>>0<c>>>0?j:c;j=d+12|0;TEa((k[j>>2]|0)+p|0,b|0,e|0)|0;h=(k[o>>2]|0)+e|0;k[o>>2]=h;if(h>>>0>(k[n>>2]|0)>>>0){k[n>>2]=h;f=k[g>>2]|0;if(h>>>0<f>>>0){i[(k[j>>2]|0)+h>>0]=0;l=e;break}if(!((f|0)==0|(k[a>>2]&4|0)==0)){i[(k[j>>2]|0)+(f+-1)>>0]=0;l=e}else l=e}else l=e}while(0);return l|0}function _ta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=k[a+84>>2]|0;if((c>>>0<=2?(k[e>>2]=0,k[e+4>>2]=k[f>>2],k[e+8>>2]=k[f+4>>2],a=k[e+(c<<2)>>2]|0,(b|0)>=(0-a|0)):0)?((k[f+8>>2]|0)-a|0)>=(b|0):0){c=a+b|0;k[f>>2]=c;g=c}else{c=Sra()|0;k[c>>2]=22;g=-1}r=d;return g|0}function $ta(a){a=a|0;return 0}function aua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=k[a+84>>2]|0;e=a+20|0;f=k[e>>2]|0;g=k[a+28>>2]|0;h=g;i=f-h|0;if((f|0)!=(h|0)?(k[e>>2]=g,(aua(a,g,i)|0)>>>0<i>>>0):0)j=0;else l=3;do if((l|0)==3){i=d+8|0;g=k[i>>2]|0;a=g+c|0;e=d+20|0;h=k[e>>2]|0;if(a>>>0<h>>>0){m=d+12|0;n=g}else{g=a+1|h<<1|1;h=d+12|0;a=oua(k[h>>2]|0,g)|0;if(!a){j=0;break}k[h>>2]=a;k[k[d>>2]>>2]=a;a=k[e>>2]|0;WEa((k[h>>2]|0)+a|0,0,g-a|0)|0;k[e>>2]=g;m=h;n=k[i>>2]|0}TEa((k[m>>2]|0)+n|0,b|0,c|0)|0;h=(k[i>>2]|0)+c|0;k[i>>2]=h;i=d+16|0;if(h>>>0>=(k[i>>2]|0)>>>0)k[i>>2]=h;k[k[d+4>>2]>>2]=h;j=c}while(0);return j|0}function bua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+16|0;e=d;f=k[a+84>>2]|0;if(c>>>0<=2?(k[e>>2]=0,a=f+8|0,k[e+4>>2]=k[a>>2],k[e+8>>2]=k[f+16>>2],f=k[e+(c<<2)>>2]|0,!((b|0)<(0-f|0)|(2147483647-f|0)<(b|0))):0){c=f+b|0;k[a>>2]=c;g=c}else{c=Sra()|0;k[c>>2]=22;g=-1}r=d;return g|0}function cua(a){a=a|0;return 0}function dua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0.0,db=0.0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0.0,kb=0.0,lb=0.0,mb=0.0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0.0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0.0,Yb=0.0,Zb=0.0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0;f=r;r=r+624|0;g=f+24|0;h=f+16|0;m=f+588|0;n=f+576|0;o=f;q=f+536|0;s=f+8|0;u=f+528|0;v=(a|0)!=0;w=q+40|0;x=w;y=q+39|0;q=s+4|0;z=m;A=0-z|0;B=n+12|0;C=n+11|0;n=B;D=n-z|0;E=-2-z|0;F=n+2|0;G=g+288|0;H=m+9|0;I=H;J=m+8|0;K=0;L=0;M=0;N=b;a:while(1){do if((K|0)>-1)if((L|0)>(2147483647-K|0)){b=Sra()|0;k[b>>2]=75;O=-1;break}else{O=L+K|0;break}else O=K;while(0);b=i[N>>0]|0;if(!(b<<24>>24)){P=O;R=M;S=244;break}else{T=b;U=N}b:while(1){switch(T<<24>>24){case 37:{V=U;W=U;S=9;break b;break}case 0:{X=U;Y=U;break b;break}default:{}}b=U+1|0;T=i[b>>0]|0;U=b}c:do if((S|0)==9)while(1){S=0;if((i[V+1>>0]|0)!=37){X=V;Y=W;break c}b=W+1|0;Z=V+2|0;if((i[Z>>0]|0)==37){V=Z;W=b;S=9}else{X=Z;Y=b;break}}while(0);b=Y-N|0;if(v?(k[a>>2]&32|0)==0:0)ita(N,b,a)|0;if((Y|0)!=(N|0)){K=O;L=b;N=X;continue}Z=X+1|0;_=i[Z>>0]|0;$=(_<<24>>24)+-48|0;if($>>>0<10){aa=(i[X+2>>0]|0)==36;ba=aa?X+3|0:Z;ca=i[ba>>0]|0;da=aa?$:-1;ea=aa?1:M;fa=ba}else{ca=_;da=-1;ea=M;fa=Z}Z=ca<<24>>24;d:do if((Z&-32|0)==32){_=Z;ba=ca;aa=0;$=fa;while(1){if(!(1<<_+-32&75913)){ga=ba;ha=aa;ia=$;break d}ja=1<<(ba<<24>>24)+-32|aa;ka=$+1|0;la=i[ka>>0]|0;_=la<<24>>24;if((_&-32|0)!=32){ga=la;ha=ja;ia=ka;break}else{ba=la;aa=ja;$=ka}}}else{ga=ca;ha=0;ia=fa}while(0);do if(ga<<24>>24==42){Z=ia+1|0;$=(i[Z>>0]|0)+-48|0;if($>>>0<10?(i[ia+2>>0]|0)==36:0){k[e+($<<2)>>2]=10;na=1;oa=ia+3|0;pa=k[d+((i[Z>>0]|0)+-48<<3)>>2]|0}else{if(ea){qa=-1;break a}if(!v){ra=ha;sa=0;ta=Z;ua=0;break}$=(k[c>>2]|0)+(4-1)&~(4-1);aa=k[$>>2]|0;k[c>>2]=$+4;na=0;oa=Z;pa=aa}if((pa|0)<0){ra=ha|8192;sa=na;ta=oa;ua=0-pa|0}else{ra=ha;sa=na;ta=oa;ua=pa}}else{aa=(ga<<24>>24)+-48|0;if(aa>>>0<10){Z=ia;$=0;ba=aa;while(1){aa=($*10|0)+ba|0;_=Z+1|0;ba=(i[_>>0]|0)+-48|0;if(ba>>>0>=10){va=aa;wa=_;break}else{Z=_;$=aa}}if((va|0)<0){qa=-1;break a}else{ra=ha;sa=ea;ta=wa;ua=va}}else{ra=ha;sa=ea;ta=ia;ua=0}}while(0);e:do if((i[ta>>0]|0)==46){$=ta+1|0;Z=i[$>>0]|0;if(Z<<24>>24!=42){ba=(Z<<24>>24)+-48|0;if(ba>>>0<10){xa=$;ya=0;za=ba}else{Aa=0;Ba=$;break}while(1){$=(ya*10|0)+za|0;ba=xa+1|0;za=(i[ba>>0]|0)+-48|0;if(za>>>0>=10){Aa=$;Ba=ba;break e}else{xa=ba;ya=$}}}$=ta+2|0;ba=(i[$>>0]|0)+-48|0;if(ba>>>0<10?(i[ta+3>>0]|0)==36:0){k[e+(ba<<2)>>2]=10;Aa=k[d+((i[$>>0]|0)+-48<<3)>>2]|0;Ba=ta+4|0;break}if(sa){qa=-1;break a}if(v){ba=(k[c>>2]|0)+(4-1)&~(4-1);Z=k[ba>>2]|0;k[c>>2]=ba+4;Aa=Z;Ba=$}else{Aa=0;Ba=$}}else{Aa=-1;Ba=ta}while(0);$=Ba;Z=0;while(1){ba=(i[$>>0]|0)+-65|0;if(ba>>>0>57){qa=-1;break a}aa=$+1|0;_=i[156545+(Z*58|0)+ba>>0]|0;ba=_&255;if((ba+-1|0)>>>0<8){$=aa;Z=ba}else{Ca=aa;Da=_;Ea=ba;Fa=$;Ga=Z;break}}if(!(Da<<24>>24)){qa=-1;break}Z=(da|0)>-1;do if(Da<<24>>24==19)if(Z){qa=-1;break a}else S=52;else{if(Z){k[e+(da<<2)>>2]=Ea;$=d+(da<<3)|0;ba=k[$+4>>2]|0;_=o;k[_>>2]=k[$>>2];k[_+4>>2]=ba;S=52;break}if(!v){qa=0;break a}iua(o,Ea,c)}while(0);if((S|0)==52?(S=0,!v):0){K=O;L=b;M=sa;N=Ca;continue}Z=i[Fa>>0]|0;ba=(Ga|0)!=0&(Z&15|0)==3?Z&-33:Z;Z=ra&-65537;_=(ra&8192|0)==0?ra:Z;f:do switch(ba|0){case 110:{switch(Ga|0){case 0:{k[k[o>>2]>>2]=O;K=O;L=b;M=sa;N=Ca;continue a;break}case 1:{k[k[o>>2]>>2]=O;K=O;L=b;M=sa;N=Ca;continue a;break}case 2:{$=k[o>>2]|0;k[$>>2]=O;k[$+4>>2]=((O|0)<0)<<31>>31;K=O;L=b;M=sa;N=Ca;continue a;break}case 3:{j[k[o>>2]>>1]=O;K=O;L=b;M=sa;N=Ca;continue a;break}case 4:{i[k[o>>2]>>0]=O;K=O;L=b;M=sa;N=Ca;continue a;break}case 6:{k[k[o>>2]>>2]=O;K=O;L=b;M=sa;N=Ca;continue a;break}case 7:{$=k[o>>2]|0;k[$>>2]=O;k[$+4>>2]=((O|0)<0)<<31>>31;K=O;L=b;M=sa;N=Ca;continue a;break}default:{K=O;L=b;M=sa;N=Ca;continue a}}break}case 112:{Ha=_|8;Ia=Aa>>>0>8?Aa:8;Ja=120;S=64;break}case 88:case 120:{Ha=_;Ia=Aa;Ja=ba;S=64;break}case 111:{$=o;aa=k[$>>2]|0;ka=k[$+4>>2]|0;if((aa|0)==0&(ka|0)==0)Ka=w;else{$=w;ja=aa;aa=ka;while(1){ka=$+-1|0;i[ka>>0]=ja&7|48;ja=SEa(ja|0,aa|0,3)|0;aa=Q;if((ja|0)==0&(aa|0)==0){Ka=ka;break}else $=ka}}if(!(_&8)){La=Ka;Ma=_;Na=Aa;Oa=0;Pa=157025;S=77}else{$=x-Ka|0;La=Ka;Ma=_;Na=(Aa|0)>($|0)?Aa:$+1|0;Oa=0;Pa=157025;S=77}break}case 105:case 100:{$=o;aa=k[$>>2]|0;ja=k[$+4>>2]|0;if((ja|0)<0){$=REa(0,0,aa|0,ja|0)|0;ka=Q;la=o;k[la>>2]=$;k[la+4>>2]=ka;Qa=$;Ra=ka;Sa=1;Ta=157025;S=76;break f}if(!(_&2048)){ka=_&1;Qa=aa;Ra=ja;Sa=ka;Ta=(ka|0)==0?157025:157027;S=76}else{Qa=aa;Ra=ja;Sa=1;Ta=157026;S=76}break}case 117:{ja=o;Qa=k[ja>>2]|0;Ra=k[ja+4>>2]|0;Sa=0;Ta=157025;S=76;break}case 99:{i[y>>0]=k[o>>2];Ua=y;Va=Z;Wa=1;Xa=0;Ya=157025;Za=w;break}case 109:{ja=Sra()|0;_a=Tra(k[ja>>2]|0)|0;S=82;break}case 115:{ja=k[o>>2]|0;_a=(ja|0)!=0?ja:157035;S=82;break}case 67:{k[s>>2]=k[o>>2];k[q>>2]=0;k[o>>2]=s;$a=s;ab=-1;S=86;break}case 83:{ja=k[o>>2]|0;if(!Aa){kua(a,32,ua,0,_);bb=0;S=97}else{$a=ja;ab=Aa;S=86}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{cb=+p[o>>3];k[h>>2]=0;p[t>>3]=cb;if((k[t+4>>2]|0)>=0)if(!(_&2048)){ja=_&1;db=cb;eb=ja;fb=(ja|0)==0?157043:157048}else{db=cb;eb=1;fb=157045}else{db=-cb;eb=1;fb=157042}p[t>>3]=db;ja=k[t+4>>2]&2146435072;do if(ja>>>0<2146435072|(ja|0)==2146435072&0<0){cb=+nsa(db,h)*2.0;aa=cb!=0.0;if(aa)k[h>>2]=(k[h>>2]|0)+-1;ka=ba|32;if((ka|0)==97){$=ba&32;la=($|0)==0?fb:fb+9|0;gb=eb|2;hb=12-Aa|0;do if(!(Aa>>>0>11|(hb|0)==0)){ib=hb;jb=8.0;while(1){ib=ib+-1|0;kb=jb*16.0;if(!ib){lb=kb;break}else jb=kb}if((i[la>>0]|0)==45){mb=-(lb+(-cb-lb));break}else{mb=cb+lb-lb;break}}else mb=cb;while(0);hb=k[h>>2]|0;ib=(hb|0)<0?0-hb|0:hb;nb=jua(ib,((ib|0)<0)<<31>>31,B)|0;if((nb|0)==(B|0)){i[C>>0]=48;ob=C}else ob=nb;i[ob+-1>>0]=(hb>>31&2)+43;hb=ob+-2|0;i[hb>>0]=ba+15;nb=(Aa|0)<1;ib=(_&8|0)==0;jb=mb;pb=m;while(1){qb=~~jb;rb=pb+1|0;i[pb>>0]=l[157009+qb>>0]|$;jb=(jb-+(qb|0))*16.0;do if((rb-z|0)==1){if(ib&(nb&jb==0.0)){sb=rb;break}i[rb>>0]=46;sb=pb+2|0}else sb=rb;while(0);if(!(jb!=0.0)){tb=sb;break}else pb=sb}pb=tb;nb=hb;ib=(Aa|0)!=0&(E+pb|0)<(Aa|0)?F+Aa-nb|0:D-nb+pb|0;$=ib+gb|0;kua(a,32,ua,$,_);if(!(k[a>>2]&32))ita(la,gb,a)|0;kua(a,48,ua,$,_^65536);rb=pb-z|0;if(!(k[a>>2]&32))ita(m,rb,a)|0;pb=n-nb|0;kua(a,48,ib-(rb+pb)|0,0,0);if(!(k[a>>2]&32))ita(hb,pb,a)|0;kua(a,32,ua,$,_^8192);ub=($|0)<(ua|0)?ua:$;break}$=(Aa|0)<0?6:Aa;if(aa){pb=(k[h>>2]|0)+-28|0;k[h>>2]=pb;vb=cb*268435456.0;wb=pb}else{vb=cb;wb=k[h>>2]|0}pb=(wb|0)<0?g:G;rb=pb;jb=vb;ib=pb;while(1){nb=~~jb>>>0;k[ib>>2]=nb;qb=ib+4|0;jb=(jb-+(nb>>>0))*1.0e9;if(!(jb!=0.0)){xb=qb;break}else ib=qb}ib=k[h>>2]|0;if((ib|0)>0){aa=ib;hb=pb;gb=xb;while(1){la=(aa|0)>29?29:aa;qb=gb+-4|0;do if(qb>>>0<hb>>>0)yb=hb;else{nb=0;zb=qb;while(1){Ab=XEa(k[zb>>2]|0,0,la|0)|0;Bb=QEa(Ab|0,Q|0,nb|0,0)|0;Ab=Q;Cb=dFa(Bb|0,Ab|0,1e9,0)|0;k[zb>>2]=Cb;Cb=cFa(Bb|0,Ab|0,1e9,0)|0;zb=zb+-4|0;if(zb>>>0<hb>>>0){Db=Cb;break}else nb=Cb}if(!Db){yb=hb;break}nb=hb+-4|0;k[nb>>2]=Db;yb=nb}while(0);qb=gb;while(1){if(qb>>>0<=yb>>>0){Eb=qb;break}nb=qb+-4|0;if(!(k[nb>>2]|0))qb=nb;else{Eb=qb;break}}qb=(k[h>>2]|0)-la|0;k[h>>2]=qb;if((qb|0)>0){aa=qb;hb=yb;gb=Eb}else{Fb=qb;Gb=yb;Hb=Eb;break}}}else{Fb=ib;Gb=pb;Hb=xb}if((Fb|0)<0){gb=(($+25|0)/9|0)+1|0;hb=(ka|0)==102;aa=Fb;qb=Gb;nb=Hb;while(1){zb=0-aa|0;Cb=(zb|0)>9?9:zb;do if(qb>>>0<nb>>>0){zb=(1<<Cb)+-1|0;Ab=1e9>>>Cb;Bb=0;Ib=qb;while(1){Jb=k[Ib>>2]|0;k[Ib>>2]=(Jb>>>Cb)+Bb;Kb=ma(Jb&zb,Ab)|0;Ib=Ib+4|0;if(Ib>>>0>=nb>>>0){Lb=Kb;break}else Bb=Kb}Bb=(k[qb>>2]|0)==0?qb+4|0:qb;if(!Lb){Mb=Bb;Nb=nb;break}k[nb>>2]=Lb;Mb=Bb;Nb=nb+4|0}else{Mb=(k[qb>>2]|0)==0?qb+4|0:qb;Nb=nb}while(0);la=hb?pb:Mb;Bb=(Nb-la>>2|0)>(gb|0)?la+(gb<<2)|0:Nb;aa=(k[h>>2]|0)+Cb|0;k[h>>2]=aa;if((aa|0)>=0){Ob=Mb;Pb=Bb;break}else{qb=Mb;nb=Bb}}}else{Ob=Gb;Pb=Hb}do if(Ob>>>0<Pb>>>0){nb=(rb-Ob>>2)*9|0;qb=k[Ob>>2]|0;if(qb>>>0<10){Qb=nb;break}else{Rb=nb;Sb=10}while(1){Sb=Sb*10|0;nb=Rb+1|0;if(qb>>>0<Sb>>>0){Qb=nb;break}else Rb=nb}}else Qb=0;while(0);qb=(ka|0)==103;Cb=($|0)!=0;nb=$-((ka|0)!=102?Qb:0)+((Cb&qb)<<31>>31)|0;if((nb|0)<(((Pb-rb>>2)*9|0)+-9|0)){aa=nb+9216|0;nb=pb+4+(((aa|0)/9|0)+-1024<<2)|0;gb=((aa|0)%9|0)+1|0;if((gb|0)<9){aa=10;hb=gb;while(1){gb=aa*10|0;hb=hb+1|0;if((hb|0)==9){Tb=gb;break}else aa=gb}}else Tb=10;aa=k[nb>>2]|0;hb=(aa>>>0)%(Tb>>>0)|0;ka=(nb+4|0)==(Pb|0);do if(ka&(hb|0)==0){Ub=Ob;Vb=nb;Wb=Qb}else{jb=(((aa>>>0)/(Tb>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;gb=(Tb|0)/2|0;if(hb>>>0<gb>>>0)Xb=.5;else Xb=ka&(hb|0)==(gb|0)?1.0:1.5;do if(!eb){Yb=jb;Zb=Xb}else{if((i[fb>>0]|0)!=45){Yb=jb;Zb=Xb;break}Yb=-jb;Zb=-Xb}while(0);gb=aa-hb|0;k[nb>>2]=gb;if(!(Yb+Zb!=Yb)){Ub=Ob;Vb=nb;Wb=Qb;break}ib=gb+Tb|0;k[nb>>2]=ib;if(ib>>>0>999999999){ib=Ob;gb=nb;while(1){Bb=gb+-4|0;k[gb>>2]=0;if(Bb>>>0<ib>>>0){la=ib+-4|0;k[la>>2]=0;_b=la}else _b=ib;la=(k[Bb>>2]|0)+1|0;k[Bb>>2]=la;if(la>>>0>999999999){ib=_b;gb=Bb}else{$b=_b;ac=Bb;break}}}else{$b=Ob;ac=nb}gb=(rb-$b>>2)*9|0;ib=k[$b>>2]|0;if(ib>>>0<10){Ub=$b;Vb=ac;Wb=gb;break}else{bc=gb;cc=10}while(1){cc=cc*10|0;gb=bc+1|0;if(ib>>>0<cc>>>0){Ub=$b;Vb=ac;Wb=gb;break}else bc=gb}}while(0);nb=Vb+4|0;dc=Ub;ec=Wb;fc=Pb>>>0>nb>>>0?nb:Pb}else{dc=Ob;ec=Qb;fc=Pb}nb=0-ec|0;hb=fc;while(1){if(hb>>>0<=dc>>>0){gc=0;hc=hb;break}aa=hb+-4|0;if(!(k[aa>>2]|0))hb=aa;else{gc=1;hc=hb;break}}do if(qb){hb=(Cb&1^1)+$|0;if((hb|0)>(ec|0)&(ec|0)>-5){ic=ba+-1|0;jc=hb+-1-ec|0}else{ic=ba+-2|0;jc=hb+-1|0}hb=_&8;if(hb){kc=ic;lc=jc;mc=hb;break}do if(gc){hb=k[hc+-4>>2]|0;if(!hb){nc=9;break}if(!((hb>>>0)%10|0)){oc=10;pc=0}else{nc=0;break}while(1){oc=oc*10|0;aa=pc+1|0;if((hb>>>0)%(oc>>>0)|0){nc=aa;break}else pc=aa}}else nc=9;while(0);hb=((hc-rb>>2)*9|0)+-9|0;if((ic|32|0)==102){aa=hb-nc|0;ka=(aa|0)<0?0:aa;kc=ic;lc=(jc|0)<(ka|0)?jc:ka;mc=0;break}else{ka=hb+ec-nc|0;hb=(ka|0)<0?0:ka;kc=ic;lc=(jc|0)<(hb|0)?jc:hb;mc=0;break}}else{kc=ba;lc=$;mc=_&8}while(0);$=lc|mc;rb=($|0)!=0&1;Cb=(kc|32|0)==102;if(Cb){qc=(ec|0)>0?ec:0;rc=0}else{qb=(ec|0)<0?nb:ec;hb=jua(qb,((qb|0)<0)<<31>>31,B)|0;if((n-hb|0)<2){qb=hb;while(1){ka=qb+-1|0;i[ka>>0]=48;if((n-ka|0)<2)qb=ka;else{sc=ka;break}}}else sc=hb;i[sc+-1>>0]=(ec>>31&2)+43;qb=sc+-2|0;i[qb>>0]=kc;qc=n-qb|0;rc=qb}qb=eb+1+lc+rb+qc|0;kua(a,32,ua,qb,_);if(!(k[a>>2]&32))ita(fb,eb,a)|0;kua(a,48,ua,qb,_^65536);do if(Cb){nb=dc>>>0>pb>>>0?pb:dc;ka=nb;while(1){aa=jua(k[ka>>2]|0,0,H)|0;do if((ka|0)==(nb|0)){if((aa|0)!=(H|0)){tc=aa;break}i[J>>0]=48;tc=J}else{if(aa>>>0<=m>>>0){tc=aa;break}WEa(m|0,48,aa-z|0)|0;ib=aa;while(1){gb=ib+-1|0;if(gb>>>0>m>>>0)ib=gb;else{tc=gb;break}}}while(0);if(!(k[a>>2]&32))ita(tc,I-tc|0,a)|0;aa=ka+4|0;if(aa>>>0>pb>>>0){uc=aa;break}else ka=aa}do if($){if(k[a>>2]&32)break;ita(157077,1,a)|0}while(0);if((lc|0)>0&uc>>>0<hc>>>0){ka=lc;nb=uc;while(1){aa=jua(k[nb>>2]|0,0,H)|0;if(aa>>>0>m>>>0){WEa(m|0,48,aa-z|0)|0;ib=aa;while(1){gb=ib+-1|0;if(gb>>>0>m>>>0)ib=gb;else{vc=gb;break}}}else vc=aa;if(!(k[a>>2]&32))ita(vc,(ka|0)>9?9:ka,a)|0;nb=nb+4|0;ib=ka+-9|0;if(!((ka|0)>9&nb>>>0<hc>>>0)){wc=ib;break}else ka=ib}}else wc=lc;kua(a,48,wc+9|0,9,0)}else{ka=gc?hc:dc+4|0;if((lc|0)>-1){nb=(mc|0)==0;ib=lc;gb=dc;while(1){Bb=jua(k[gb>>2]|0,0,H)|0;if((Bb|0)==(H|0)){i[J>>0]=48;xc=J}else xc=Bb;do if((gb|0)==(dc|0)){Bb=xc+1|0;if(!(k[a>>2]&32))ita(xc,1,a)|0;if(nb&(ib|0)<1){yc=Bb;break}if(k[a>>2]&32){yc=Bb;break}ita(157077,1,a)|0;yc=Bb}else{if(xc>>>0<=m>>>0){yc=xc;break}WEa(m|0,48,xc+A|0)|0;Bb=xc;while(1){la=Bb+-1|0;if(la>>>0>m>>>0)Bb=la;else{yc=la;break}}}while(0);aa=I-yc|0;if(!(k[a>>2]&32))ita(yc,(ib|0)>(aa|0)?aa:ib,a)|0;Bb=ib-aa|0;gb=gb+4|0;if(!(gb>>>0<ka>>>0&(Bb|0)>-1)){zc=Bb;break}else ib=Bb}}else zc=lc;kua(a,48,zc+18|0,18,0);if(k[a>>2]&32)break;ita(rc,n-rc|0,a)|0}while(0);kua(a,32,ua,qb,_^8192);ub=(qb|0)<(ua|0)?ua:qb}else{$=(ba&32|0)!=0;pb=db!=db|0.0!=0.0;Cb=pb?0:eb;rb=Cb+3|0;kua(a,32,ua,rb,Z);hb=k[a>>2]|0;if(!(hb&32)){ita(fb,Cb,a)|0;Ac=k[a>>2]|0}else Ac=hb;if(!(Ac&32))ita(pb?($?157069:157073):$?157061:157065,3,a)|0;kua(a,32,ua,rb,_^8192);ub=(rb|0)<(ua|0)?ua:rb}while(0);K=O;L=ub;M=sa;N=Ca;continue a;break}default:{Ua=N;Va=_;Wa=Aa;Xa=0;Ya=157025;Za=w}}while(0);g:do if((S|0)==64){S=0;ba=o;b=k[ba>>2]|0;ja=k[ba+4>>2]|0;ba=Ja&32;if(!((b|0)==0&(ja|0)==0)){rb=w;$=b;b=ja;while(1){ja=rb+-1|0;i[ja>>0]=l[157009+($&15)>>0]|ba;$=SEa($|0,b|0,4)|0;b=Q;if(($|0)==0&(b|0)==0){Bc=ja;break}else rb=ja}rb=o;if((Ha&8|0)==0|(k[rb>>2]|0)==0&(k[rb+4>>2]|0)==0){La=Bc;Ma=Ha;Na=Ia;Oa=0;Pa=157025;S=77}else{La=Bc;Ma=Ha;Na=Ia;Oa=2;Pa=157025+(Ja>>4)|0;S=77}}else{La=w;Ma=Ha;Na=Ia;Oa=0;Pa=157025;S=77}}else if((S|0)==76){S=0;La=jua(Qa,Ra,w)|0;Ma=_;Na=Aa;Oa=Sa;Pa=Ta;S=77}else if((S|0)==82){S=0;rb=Dta(_a,0,Aa)|0;b=(rb|0)==0;Ua=_a;Va=Z;Wa=b?Aa:rb-_a|0;Xa=0;Ya=157025;Za=b?_a+Aa|0:rb}else if((S|0)==86){S=0;rb=0;b=0;$=$a;while(1){ba=k[$>>2]|0;if(!ba){Cc=rb;Dc=b;break}ja=Csa(u,ba)|0;if((ja|0)<0|ja>>>0>(ab-rb|0)>>>0){Cc=rb;Dc=ja;break}ba=ja+rb|0;if(ab>>>0>ba>>>0){rb=ba;b=ja;$=$+4|0}else{Cc=ba;Dc=ja;break}}if((Dc|0)<0){qa=-1;break a}kua(a,32,ua,Cc,_);if(!Cc){bb=0;S=97}else{$=0;b=$a;while(1){rb=k[b>>2]|0;if(!rb){bb=Cc;S=97;break g}ja=Csa(u,rb)|0;$=ja+$|0;if(($|0)>(Cc|0)){bb=Cc;S=97;break g}if(!(k[a>>2]&32))ita(u,ja,a)|0;if($>>>0>=Cc>>>0){bb=Cc;S=97;break}else b=b+4|0}}}while(0);if((S|0)==97){S=0;kua(a,32,ua,bb,_^8192);K=O;L=(ua|0)>(bb|0)?ua:bb;M=sa;N=Ca;continue}if((S|0)==77){S=0;Z=(Na|0)>-1?Ma&-65537:Ma;b=o;$=(k[b>>2]|0)!=0|(k[b+4>>2]|0)!=0;if((Na|0)!=0|$){b=($&1^1)+(x-La)|0;Ua=La;Va=Z;Wa=(Na|0)>(b|0)?Na:b;Xa=Oa;Ya=Pa;Za=w}else{Ua=w;Va=Z;Wa=0;Xa=Oa;Ya=Pa;Za=w}}Z=Za-Ua|0;b=(Wa|0)<(Z|0)?Z:Wa;$=Xa+b|0;ja=(ua|0)<($|0)?$:ua;kua(a,32,ja,$,Va);if(!(k[a>>2]&32))ita(Ya,Xa,a)|0;kua(a,48,ja,$,Va^65536);kua(a,48,b,Z,0);if(!(k[a>>2]&32))ita(Ua,Z,a)|0;kua(a,32,ja,$,Va^8192);K=O;L=ja;M=sa;N=Ca}h:do if((S|0)==244)if(!a)if(R){Ca=1;while(1){N=k[e+(Ca<<2)>>2]|0;if(!N){Ec=Ca;break}iua(d+(Ca<<3)|0,N,c);Ca=Ca+1|0;if((Ca|0)>=10){qa=1;break h}}if((Ec|0)<10){Ca=Ec;while(1){if(k[e+(Ca<<2)>>2]|0){qa=-1;break h}Ca=Ca+1|0;if((Ca|0)>=10){qa=1;break}}}else qa=1}else qa=0;else qa=P;while(0);r=f;return qa|0}function eua(a,b,c){a=a|0;b=b|0;c=c|0;return Psa(a,b,c)|0}function fua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0;d=r;r=r+112|0;e=d;f=e;g=f+112|0;do{k[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=e+4|0;k[f>>2]=a;g=e+8|0;k[g>>2]=-1;k[e+44>>2]=a;k[e+76>>2]=-1;Wra(e,0);h=+Ura(e,c,1);c=(k[f>>2]|0)-(k[g>>2]|0)+(k[e+108>>2]|0)|0;if(b)k[b>>2]=(c|0)!=0?a+c|0:a;r=d;return +h}function gua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=r;r=r+112|0;g=f;k[g>>2]=0;h=g+4|0;k[h>>2]=a;k[g+44>>2]=a;i=g+8|0;k[i>>2]=(a|0)<0?-1:a+2147483647|0;k[g+76>>2]=-1;Wra(g,0);j=Vra(g,c,1,d,e)|0;if(b)k[b>>2]=a+((k[h>>2]|0)+(k[g+108>>2]|0)-(k[i>>2]|0));r=f;return j|0}function hua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+20|0;e=k[d>>2]|0;f=(k[a+16>>2]|0)-e|0;a=f>>>0>c>>>0?c:f;TEa(e|0,b|0,a|0)|0;k[d>>2]=(k[d>>2]|0)+a;return c|0}function iua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;k[a>>2]=e;break a;break}case 10:{e=(k[c>>2]|0)+(4-1)&~(4-1);d=k[e>>2]|0;k[c>>2]=e+4;e=a;k[e>>2]=d;k[e+4>>2]=((d|0)<0)<<31>>31;break a;break}case 11:{d=(k[c>>2]|0)+(4-1)&~(4-1);e=k[d>>2]|0;k[c>>2]=d+4;d=a;k[d>>2]=e;k[d+4>>2]=0;break a;break}case 12:{d=(k[c>>2]|0)+(8-1)&~(8-1);e=d;f=k[e>>2]|0;g=k[e+4>>2]|0;k[c>>2]=d+8;d=a;k[d>>2]=f;k[d+4>>2]=g;break a;break}case 13:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&65535)<<16>>16;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 14:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&65535;k[g+4>>2]=0;break a;break}case 15:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=(d&255)<<24>>24;d=a;k[d>>2]=g;k[d+4>>2]=((g|0)<0)<<31>>31;break a;break}case 16:{g=(k[c>>2]|0)+(4-1)&~(4-1);d=k[g>>2]|0;k[c>>2]=g+4;g=a;k[g>>2]=d&255;k[g+4>>2]=0;break a;break}case 17:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}case 18:{g=(k[c>>2]|0)+(8-1)&~(8-1);h=+p[g>>3];k[c>>2]=g+8;p[a>>3]=h;break a;break}default:break a}while(0);while(0);return}function jua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;if(b>>>0>0|(b|0)==0&a>>>0>4294967295){d=c;e=a;f=b;while(1){b=dFa(e|0,f|0,10,0)|0;g=d+-1|0;i[g>>0]=b|48;b=cFa(e|0,f|0,10,0)|0;if(f>>>0>9|(f|0)==9&e>>>0>4294967295){d=g;e=b;f=Q}else{h=g;j=b;break}}k=h;l=j}else{k=c;l=a}if(!l)m=k;else{a=k;k=l;while(1){l=a+-1|0;i[l>>0]=(k>>>0)%10|0|48;if(k>>>0<10){m=l;break}else{a=l;k=(k>>>0)/10|0}}}return m|0}function kua(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;f=r;r=r+256|0;g=f;do if((c|0)>(d|0)&(e&73728|0)==0){h=c-d|0;WEa(g|0,b|0,(h>>>0>256?256:h)|0)|0;i=k[a>>2]|0;j=(i&32|0)==0;if(h>>>0>255){l=c-d|0;m=h;n=i;i=j;while(1){if(i){ita(g,256,a)|0;o=k[a>>2]|0}else o=n;m=m+-256|0;i=(o&32|0)==0;if(m>>>0<=255)break;else n=o}if(i)p=l&255;else break}else if(j)p=h;else break;ita(g,p,a)|0}while(0);r=f;return}function lua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0;do if(a>>>0<245){b=a>>>0<11?16:a+11&-8;c=b>>>3;d=k[11517]|0;e=d>>>c;if(e&3){f=(e&1^1)+c|0;g=46108+(f<<1<<2)|0;h=g+8|0;i=k[h>>2]|0;j=i+8|0;l=k[j>>2]|0;do if((g|0)!=(l|0)){if(l>>>0<(k[11521]|0)>>>0)mc();m=l+12|0;if((k[m>>2]|0)==(i|0)){k[m>>2]=g;k[h>>2]=l;break}else mc()}else k[11517]=d&~(1<<f);while(0);l=f<<3;k[i+4>>2]=l|3;h=i+l+4|0;k[h>>2]=k[h>>2]|1;n=j;return n|0}h=k[11519]|0;if(b>>>0>h>>>0){if(e){l=2<<c;g=e<<c&(l|0-l);l=(g&0-g)+-1|0;g=l>>>12&16;m=l>>>g;l=m>>>5&8;o=m>>>l;m=o>>>2&4;p=o>>>m;o=p>>>1&2;q=p>>>o;p=q>>>1&1;r=(l|g|m|o|p)+(q>>>p)|0;p=46108+(r<<1<<2)|0;q=p+8|0;o=k[q>>2]|0;m=o+8|0;g=k[m>>2]|0;do if((p|0)!=(g|0)){if(g>>>0<(k[11521]|0)>>>0)mc();l=g+12|0;if((k[l>>2]|0)==(o|0)){k[l>>2]=p;k[q>>2]=g;s=k[11519]|0;break}else mc()}else{k[11517]=d&~(1<<r);s=h}while(0);h=(r<<3)-b|0;k[o+4>>2]=b|3;d=o+b|0;k[d+4>>2]=h|1;k[d+h>>2]=h;if(s){g=k[11522]|0;q=s>>>3;p=46108+(q<<1<<2)|0;c=k[11517]|0;e=1<<q;if(c&e){q=p+8|0;j=k[q>>2]|0;if(j>>>0<(k[11521]|0)>>>0)mc();else{t=q;u=j}}else{k[11517]=c|e;t=p+8|0;u=p}k[t>>2]=g;k[u+12>>2]=g;k[g+8>>2]=u;k[g+12>>2]=p}k[11519]=h;k[11522]=d;n=m;return n|0}d=k[11518]|0;if(d){h=(d&0-d)+-1|0;d=h>>>12&16;p=h>>>d;h=p>>>5&8;g=p>>>h;p=g>>>2&4;e=g>>>p;g=e>>>1&2;c=e>>>g;e=c>>>1&1;j=k[46372+((h|d|p|g|e)+(c>>>e)<<2)>>2]|0;e=(k[j+4>>2]&-8)-b|0;c=j;g=j;while(1){j=k[c+16>>2]|0;if(!j){p=k[c+20>>2]|0;if(!p){v=e;w=g;break}else x=p}else x=j;j=(k[x+4>>2]&-8)-b|0;p=j>>>0<e>>>0;e=p?j:e;c=x;g=p?x:g}g=k[11521]|0;if(w>>>0<g>>>0)mc();c=w+b|0;if(w>>>0>=c>>>0)mc();e=k[w+24>>2]|0;m=k[w+12>>2]|0;do if((m|0)==(w|0)){o=w+20|0;r=k[o>>2]|0;if(!r){p=w+16|0;j=k[p>>2]|0;if(!j){y=0;break}else{z=j;A=p}}else{z=r;A=o}while(1){o=z+20|0;r=k[o>>2]|0;if(r){z=r;A=o;continue}o=z+16|0;r=k[o>>2]|0;if(!r){B=z;C=A;break}else{z=r;A=o}}if(C>>>0<g>>>0)mc();else{k[C>>2]=0;y=B;break}}else{o=k[w+8>>2]|0;if(o>>>0<g>>>0)mc();r=o+12|0;if((k[r>>2]|0)!=(w|0))mc();p=m+8|0;if((k[p>>2]|0)==(w|0)){k[r>>2]=m;k[p>>2]=o;y=m;break}else mc()}while(0);do if(e){m=k[w+28>>2]|0;g=46372+(m<<2)|0;if((w|0)==(k[g>>2]|0)){k[g>>2]=y;if(!y){k[11518]=k[11518]&~(1<<m);break}}else{if(e>>>0<(k[11521]|0)>>>0)mc();m=e+16|0;if((k[m>>2]|0)==(w|0))k[m>>2]=y;else k[e+20>>2]=y;if(!y)break}m=k[11521]|0;if(y>>>0<m>>>0)mc();k[y+24>>2]=e;g=k[w+16>>2]|0;do if(g)if(g>>>0<m>>>0)mc();else{k[y+16>>2]=g;k[g+24>>2]=y;break}while(0);g=k[w+20>>2]|0;if(g)if(g>>>0<(k[11521]|0)>>>0)mc();else{k[y+20>>2]=g;k[g+24>>2]=y;break}}while(0);if(v>>>0<16){e=v+b|0;k[w+4>>2]=e|3;g=w+e+4|0;k[g>>2]=k[g>>2]|1}else{k[w+4>>2]=b|3;k[c+4>>2]=v|1;k[c+v>>2]=v;g=k[11519]|0;if(g){e=k[11522]|0;m=g>>>3;g=46108+(m<<1<<2)|0;o=k[11517]|0;p=1<<m;if(o&p){m=g+8|0;r=k[m>>2]|0;if(r>>>0<(k[11521]|0)>>>0)mc();else{D=m;E=r}}else{k[11517]=o|p;D=g+8|0;E=g}k[D>>2]=e;k[E+12>>2]=e;k[e+8>>2]=E;k[e+12>>2]=g}k[11519]=v;k[11522]=c}n=w+8|0;return n|0}else F=b}else F=b}else if(a>>>0<=4294967231){g=a+11|0;e=g&-8;p=k[11518]|0;if(p){o=0-e|0;r=g>>>8;if(r)if(e>>>0>16777215)G=31;else{g=(r+1048320|0)>>>16&8;m=r<<g;r=(m+520192|0)>>>16&4;j=m<<r;m=(j+245760|0)>>>16&2;d=14-(r|g|m)+(j<<m>>>15)|0;G=e>>>(d+7|0)&1|d<<1}else G=0;d=k[46372+(G<<2)>>2]|0;a:do if(!d){H=o;I=0;J=0;K=86}else{m=o;j=0;g=e<<((G|0)==31?0:25-(G>>>1)|0);r=d;h=0;while(1){q=k[r+4>>2]&-8;i=q-e|0;if(i>>>0<m>>>0)if((q|0)==(e|0)){L=i;M=r;N=r;K=90;break a}else{O=i;P=r}else{O=m;P=h}i=k[r+20>>2]|0;r=k[r+16+(g>>>31<<2)>>2]|0;q=(i|0)==0|(i|0)==(r|0)?j:i;i=(r|0)==0;if(i){H=O;I=q;J=P;K=86;break}else{m=O;j=q;g=g<<(i&1^1);h=P}}}while(0);if((K|0)==86){if((I|0)==0&(J|0)==0){d=2<<G;o=p&(d|0-d);if(!o){F=e;break}d=(o&0-o)+-1|0;o=d>>>12&16;b=d>>>o;d=b>>>5&8;c=b>>>d;b=c>>>2&4;h=c>>>b;c=h>>>1&2;g=h>>>c;h=g>>>1&1;Q=k[46372+((d|o|b|c|h)+(g>>>h)<<2)>>2]|0}else Q=I;if(!Q){R=H;S=J}else{L=H;M=Q;N=J;K=90}}if((K|0)==90)while(1){K=0;h=(k[M+4>>2]&-8)-e|0;g=h>>>0<L>>>0;c=g?h:L;h=g?M:N;g=k[M+16>>2]|0;if(g){L=c;M=g;N=h;K=90;continue}M=k[M+20>>2]|0;if(!M){R=c;S=h;break}else{L=c;N=h;K=90}}if((S|0)!=0?R>>>0<((k[11519]|0)-e|0)>>>0:0){p=k[11521]|0;if(S>>>0<p>>>0)mc();h=S+e|0;if(S>>>0>=h>>>0)mc();c=k[S+24>>2]|0;g=k[S+12>>2]|0;do if((g|0)==(S|0)){b=S+20|0;o=k[b>>2]|0;if(!o){d=S+16|0;j=k[d>>2]|0;if(!j){T=0;break}else{U=j;V=d}}else{U=o;V=b}while(1){b=U+20|0;o=k[b>>2]|0;if(o){U=o;V=b;continue}b=U+16|0;o=k[b>>2]|0;if(!o){W=U;X=V;break}else{U=o;V=b}}if(X>>>0<p>>>0)mc();else{k[X>>2]=0;T=W;break}}else{b=k[S+8>>2]|0;if(b>>>0<p>>>0)mc();o=b+12|0;if((k[o>>2]|0)!=(S|0))mc();d=g+8|0;if((k[d>>2]|0)==(S|0)){k[o>>2]=g;k[d>>2]=b;T=g;break}else mc()}while(0);do if(c){g=k[S+28>>2]|0;p=46372+(g<<2)|0;if((S|0)==(k[p>>2]|0)){k[p>>2]=T;if(!T){k[11518]=k[11518]&~(1<<g);break}}else{if(c>>>0<(k[11521]|0)>>>0)mc();g=c+16|0;if((k[g>>2]|0)==(S|0))k[g>>2]=T;else k[c+20>>2]=T;if(!T)break}g=k[11521]|0;if(T>>>0<g>>>0)mc();k[T+24>>2]=c;p=k[S+16>>2]|0;do if(p)if(p>>>0<g>>>0)mc();else{k[T+16>>2]=p;k[p+24>>2]=T;break}while(0);p=k[S+20>>2]|0;if(p)if(p>>>0<(k[11521]|0)>>>0)mc();else{k[T+20>>2]=p;k[p+24>>2]=T;break}}while(0);do if(R>>>0>=16){k[S+4>>2]=e|3;k[h+4>>2]=R|1;k[h+R>>2]=R;c=R>>>3;if(R>>>0<256){p=46108+(c<<1<<2)|0;g=k[11517]|0;b=1<<c;if(g&b){c=p+8|0;d=k[c>>2]|0;if(d>>>0<(k[11521]|0)>>>0)mc();else{Y=c;Z=d}}else{k[11517]=g|b;Y=p+8|0;Z=p}k[Y>>2]=h;k[Z+12>>2]=h;k[h+8>>2]=Z;k[h+12>>2]=p;break}p=R>>>8;if(p)if(R>>>0>16777215)_=31;else{b=(p+1048320|0)>>>16&8;g=p<<b;p=(g+520192|0)>>>16&4;d=g<<p;g=(d+245760|0)>>>16&2;c=14-(p|b|g)+(d<<g>>>15)|0;_=R>>>(c+7|0)&1|c<<1}else _=0;c=46372+(_<<2)|0;k[h+28>>2]=_;g=h+16|0;k[g+4>>2]=0;k[g>>2]=0;g=k[11518]|0;d=1<<_;if(!(g&d)){k[11518]=g|d;k[c>>2]=h;k[h+24>>2]=c;k[h+12>>2]=h;k[h+8>>2]=h;break}d=R<<((_|0)==31?0:25-(_>>>1)|0);g=k[c>>2]|0;while(1){if((k[g+4>>2]&-8|0)==(R|0)){$=g;K=148;break}c=g+16+(d>>>31<<2)|0;b=k[c>>2]|0;if(!b){aa=c;ba=g;K=145;break}else{d=d<<1;g=b}}if((K|0)==145)if(aa>>>0<(k[11521]|0)>>>0)mc();else{k[aa>>2]=h;k[h+24>>2]=ba;k[h+12>>2]=h;k[h+8>>2]=h;break}else if((K|0)==148){g=$+8|0;d=k[g>>2]|0;b=k[11521]|0;if(d>>>0>=b>>>0&$>>>0>=b>>>0){k[d+12>>2]=h;k[g>>2]=h;k[h+8>>2]=d;k[h+12>>2]=$;k[h+24>>2]=0;break}else mc()}}else{d=R+e|0;k[S+4>>2]=d|3;g=S+d+4|0;k[g>>2]=k[g>>2]|1}while(0);n=S+8|0;return n|0}else F=e}else F=e}else F=-1;while(0);S=k[11519]|0;if(S>>>0>=F>>>0){R=S-F|0;$=k[11522]|0;if(R>>>0>15){ba=$+F|0;k[11522]=ba;k[11519]=R;k[ba+4>>2]=R|1;k[ba+R>>2]=R;k[$+4>>2]=F|3}else{k[11519]=0;k[11522]=0;k[$+4>>2]=S|3;R=$+S+4|0;k[R>>2]=k[R>>2]|1}n=$+8|0;return n|0}$=k[11520]|0;if($>>>0>F>>>0){R=$-F|0;k[11520]=R;$=k[11523]|0;S=$+F|0;k[11523]=S;k[S+4>>2]=R|1;k[$+4>>2]=F|3;n=$+8|0;return n|0}do if(!(k[11635]|0)){$=Sb(30)|0;if(!($+-1&$)){k[11637]=$;k[11636]=$;k[11638]=-1;k[11639]=-1;k[11640]=0;k[11628]=0;$=(pc(0)|0)&-16^1431655768;k[11635]=$;break}else mc()}while(0);$=F+48|0;R=k[11637]|0;S=F+47|0;ba=R+S|0;aa=0-R|0;R=ba&aa;if(R>>>0<=F>>>0){n=0;return n|0}_=k[11627]|0;if((_|0)!=0?(Z=k[11625]|0,Y=Z+R|0,Y>>>0<=Z>>>0|Y>>>0>_>>>0):0){n=0;return n|0}b:do if(!(k[11628]&4)){_=k[11523]|0;c:do if(_){Y=46516;while(1){Z=k[Y>>2]|0;if(Z>>>0<=_>>>0?(T=Y+4|0,(Z+(k[T>>2]|0)|0)>>>0>_>>>0):0){ca=Y;da=T;break}Y=k[Y+8>>2]|0;if(!Y){K=173;break c}}Y=ba-(k[11520]|0)&aa;if(Y>>>0<2147483647){T=Lb(Y|0)|0;if((T|0)==((k[ca>>2]|0)+(k[da>>2]|0)|0)){if((T|0)!=(-1|0)){ea=T;fa=Y;K=193;break b}}else{ga=T;ha=Y;K=183}}}else K=173;while(0);do if((K|0)==173?(_=Lb(0)|0,(_|0)!=(-1|0)):0){e=_;Y=k[11636]|0;T=Y+-1|0;if(!(T&e))ia=R;else ia=R-e+(T+e&0-Y)|0;Y=k[11625]|0;e=Y+ia|0;if(ia>>>0>F>>>0&ia>>>0<2147483647){T=k[11627]|0;if((T|0)!=0?e>>>0<=Y>>>0|e>>>0>T>>>0:0)break;T=Lb(ia|0)|0;if((T|0)==(_|0)){ea=_;fa=ia;K=193;break b}else{ga=T;ha=ia;K=183}}}while(0);d:do if((K|0)==183){T=0-ha|0;do if($>>>0>ha>>>0&(ha>>>0<2147483647&(ga|0)!=(-1|0))?(_=k[11637]|0,e=S-ha+_&0-_,e>>>0<2147483647):0)if((Lb(e|0)|0)==(-1|0)){Lb(T|0)|0;break d}else{ja=e+ha|0;break}else ja=ha;while(0);if((ga|0)!=(-1|0)){ea=ga;fa=ja;K=193;break b}}while(0);k[11628]=k[11628]|4;K=190}else K=190;while(0);if((((K|0)==190?R>>>0<2147483647:0)?(ja=Lb(R|0)|0,R=Lb(0)|0,ja>>>0<R>>>0&((ja|0)!=(-1|0)&(R|0)!=(-1|0))):0)?(ga=R-ja|0,ga>>>0>(F+40|0)>>>0):0){ea=ja;fa=ga;K=193}if((K|0)==193){ga=(k[11625]|0)+fa|0;k[11625]=ga;if(ga>>>0>(k[11626]|0)>>>0)k[11626]=ga;ga=k[11523]|0;do if(ga){ja=46516;do{R=k[ja>>2]|0;ha=ja+4|0;S=k[ha>>2]|0;if((ea|0)==(R+S|0)){ka=R;la=ha;ma=S;na=ja;K=203;break}ja=k[ja+8>>2]|0}while((ja|0)!=0);if(((K|0)==203?(k[na+12>>2]&8|0)==0:0)?ga>>>0<ea>>>0&ga>>>0>=ka>>>0:0){k[la>>2]=ma+fa;ja=ga+8|0;S=(ja&7|0)==0?0:0-ja&7;ja=ga+S|0;ha=fa-S+(k[11520]|0)|0;k[11523]=ja;k[11520]=ha;k[ja+4>>2]=ha|1;k[ja+ha+4>>2]=40;k[11524]=k[11639];break}ha=k[11521]|0;if(ea>>>0<ha>>>0){k[11521]=ea;oa=ea}else oa=ha;ha=ea+fa|0;ja=46516;while(1){if((k[ja>>2]|0)==(ha|0)){pa=ja;qa=ja;K=211;break}ja=k[ja+8>>2]|0;if(!ja){ra=46516;break}}if((K|0)==211)if(!(k[qa+12>>2]&8)){k[pa>>2]=ea;ja=qa+4|0;k[ja>>2]=(k[ja>>2]|0)+fa;ja=ea+8|0;S=ea+((ja&7|0)==0?0:0-ja&7)|0;ja=ha+8|0;R=ha+((ja&7|0)==0?0:0-ja&7)|0;ja=S+F|0;$=R-S-F|0;k[S+4>>2]=F|3;do if((R|0)!=(ga|0)){if((R|0)==(k[11522]|0)){ia=(k[11519]|0)+$|0;k[11519]=ia;k[11522]=ja;k[ja+4>>2]=ia|1;k[ja+ia>>2]=ia;break}ia=k[R+4>>2]|0;if((ia&3|0)==1){da=ia&-8;ca=ia>>>3;e:do if(ia>>>0>=256){aa=k[R+24>>2]|0;ba=k[R+12>>2]|0;do if((ba|0)==(R|0)){T=R+16|0;e=T+4|0;_=k[e>>2]|0;if(!_){Y=k[T>>2]|0;if(!Y){sa=0;break}else{ta=Y;ua=T}}else{ta=_;ua=e}while(1){e=ta+20|0;_=k[e>>2]|0;if(_){ta=_;ua=e;continue}e=ta+16|0;_=k[e>>2]|0;if(!_){va=ta;wa=ua;break}else{ta=_;ua=e}}if(wa>>>0<oa>>>0)mc();else{k[wa>>2]=0;sa=va;break}}else{e=k[R+8>>2]|0;if(e>>>0<oa>>>0)mc();_=e+12|0;if((k[_>>2]|0)!=(R|0))mc();T=ba+8|0;if((k[T>>2]|0)==(R|0)){k[_>>2]=ba;k[T>>2]=e;sa=ba;break}else mc()}while(0);if(!aa)break;ba=k[R+28>>2]|0;e=46372+(ba<<2)|0;do if((R|0)!=(k[e>>2]|0)){if(aa>>>0<(k[11521]|0)>>>0)mc();T=aa+16|0;if((k[T>>2]|0)==(R|0))k[T>>2]=sa;else k[aa+20>>2]=sa;if(!sa)break e}else{k[e>>2]=sa;if(sa)break;k[11518]=k[11518]&~(1<<ba);break e}while(0);ba=k[11521]|0;if(sa>>>0<ba>>>0)mc();k[sa+24>>2]=aa;e=R+16|0;T=k[e>>2]|0;do if(T)if(T>>>0<ba>>>0)mc();else{k[sa+16>>2]=T;k[T+24>>2]=sa;break}while(0);T=k[e+4>>2]|0;if(!T)break;if(T>>>0<(k[11521]|0)>>>0)mc();else{k[sa+20>>2]=T;k[T+24>>2]=sa;break}}else{T=k[R+8>>2]|0;ba=k[R+12>>2]|0;aa=46108+(ca<<1<<2)|0;do if((T|0)!=(aa|0)){if(T>>>0<oa>>>0)mc();if((k[T+12>>2]|0)==(R|0))break;mc()}while(0);if((ba|0)==(T|0)){k[11517]=k[11517]&~(1<<ca);break}do if((ba|0)==(aa|0))xa=ba+8|0;else{if(ba>>>0<oa>>>0)mc();e=ba+8|0;if((k[e>>2]|0)==(R|0)){xa=e;break}mc()}while(0);k[T+12>>2]=ba;k[xa>>2]=T}while(0);ya=R+da|0;za=da+$|0}else{ya=R;za=$}ca=ya+4|0;k[ca>>2]=k[ca>>2]&-2;k[ja+4>>2]=za|1;k[ja+za>>2]=za;ca=za>>>3;if(za>>>0<256){ia=46108+(ca<<1<<2)|0;aa=k[11517]|0;e=1<<ca;do if(!(aa&e)){k[11517]=aa|e;Aa=ia+8|0;Ba=ia}else{ca=ia+8|0;_=k[ca>>2]|0;if(_>>>0>=(k[11521]|0)>>>0){Aa=ca;Ba=_;break}mc()}while(0);k[Aa>>2]=ja;k[Ba+12>>2]=ja;k[ja+8>>2]=Ba;k[ja+12>>2]=ia;break}e=za>>>8;do if(!e)Ca=0;else{if(za>>>0>16777215){Ca=31;break}aa=(e+1048320|0)>>>16&8;da=e<<aa;_=(da+520192|0)>>>16&4;ca=da<<_;da=(ca+245760|0)>>>16&2;Y=14-(_|aa|da)+(ca<<da>>>15)|0;Ca=za>>>(Y+7|0)&1|Y<<1}while(0);e=46372+(Ca<<2)|0;k[ja+28>>2]=Ca;ia=ja+16|0;k[ia+4>>2]=0;k[ia>>2]=0;ia=k[11518]|0;Y=1<<Ca;if(!(ia&Y)){k[11518]=ia|Y;k[e>>2]=ja;k[ja+24>>2]=e;k[ja+12>>2]=ja;k[ja+8>>2]=ja;break}Y=za<<((Ca|0)==31?0:25-(Ca>>>1)|0);ia=k[e>>2]|0;while(1){if((k[ia+4>>2]&-8|0)==(za|0)){Da=ia;K=281;break}e=ia+16+(Y>>>31<<2)|0;da=k[e>>2]|0;if(!da){Ea=e;Fa=ia;K=278;break}else{Y=Y<<1;ia=da}}if((K|0)==278)if(Ea>>>0<(k[11521]|0)>>>0)mc();else{k[Ea>>2]=ja;k[ja+24>>2]=Fa;k[ja+12>>2]=ja;k[ja+8>>2]=ja;break}else if((K|0)==281){ia=Da+8|0;Y=k[ia>>2]|0;da=k[11521]|0;if(Y>>>0>=da>>>0&Da>>>0>=da>>>0){k[Y+12>>2]=ja;k[ia>>2]=ja;k[ja+8>>2]=Y;k[ja+12>>2]=Da;k[ja+24>>2]=0;break}else mc()}}else{Y=(k[11520]|0)+$|0;k[11520]=Y;k[11523]=ja;k[ja+4>>2]=Y|1}while(0);n=S+8|0;return n|0}else ra=46516;while(1){ja=k[ra>>2]|0;if(ja>>>0<=ga>>>0?($=ja+(k[ra+4>>2]|0)|0,$>>>0>ga>>>0):0){Ga=$;break}ra=k[ra+8>>2]|0}S=Ga+-47|0;$=S+8|0;ja=S+(($&7|0)==0?0:0-$&7)|0;$=ga+16|0;S=ja>>>0<$>>>0?ga:ja;ja=S+8|0;R=ea+8|0;ha=(R&7|0)==0?0:0-R&7;R=ea+ha|0;Y=fa+-40-ha|0;k[11523]=R;k[11520]=Y;k[R+4>>2]=Y|1;k[R+Y+4>>2]=40;k[11524]=k[11639];Y=S+4|0;k[Y>>2]=27;k[ja>>2]=k[11629];k[ja+4>>2]=k[11630];k[ja+8>>2]=k[11631];k[ja+12>>2]=k[11632];k[11629]=ea;k[11630]=fa;k[11632]=0;k[11631]=ja;ja=S+24|0;do{ja=ja+4|0;k[ja>>2]=7}while((ja+4|0)>>>0<Ga>>>0);if((S|0)!=(ga|0)){ja=S-ga|0;k[Y>>2]=k[Y>>2]&-2;k[ga+4>>2]=ja|1;k[S>>2]=ja;R=ja>>>3;if(ja>>>0<256){ha=46108+(R<<1<<2)|0;ia=k[11517]|0;da=1<<R;if(ia&da){R=ha+8|0;e=k[R>>2]|0;if(e>>>0<(k[11521]|0)>>>0)mc();else{Ha=R;Ia=e}}else{k[11517]=ia|da;Ha=ha+8|0;Ia=ha}k[Ha>>2]=ga;k[Ia+12>>2]=ga;k[ga+8>>2]=Ia;k[ga+12>>2]=ha;break}ha=ja>>>8;if(ha)if(ja>>>0>16777215)Ja=31;else{da=(ha+1048320|0)>>>16&8;ia=ha<<da;ha=(ia+520192|0)>>>16&4;e=ia<<ha;ia=(e+245760|0)>>>16&2;R=14-(ha|da|ia)+(e<<ia>>>15)|0;Ja=ja>>>(R+7|0)&1|R<<1}else Ja=0;R=46372+(Ja<<2)|0;k[ga+28>>2]=Ja;k[ga+20>>2]=0;k[$>>2]=0;ia=k[11518]|0;e=1<<Ja;if(!(ia&e)){k[11518]=ia|e;k[R>>2]=ga;k[ga+24>>2]=R;k[ga+12>>2]=ga;k[ga+8>>2]=ga;break}e=ja<<((Ja|0)==31?0:25-(Ja>>>1)|0);ia=k[R>>2]|0;while(1){if((k[ia+4>>2]&-8|0)==(ja|0)){Ka=ia;K=307;break}R=ia+16+(e>>>31<<2)|0;da=k[R>>2]|0;if(!da){La=R;Ma=ia;K=304;break}else{e=e<<1;ia=da}}if((K|0)==304)if(La>>>0<(k[11521]|0)>>>0)mc();else{k[La>>2]=ga;k[ga+24>>2]=Ma;k[ga+12>>2]=ga;k[ga+8>>2]=ga;break}else if((K|0)==307){ia=Ka+8|0;e=k[ia>>2]|0;ja=k[11521]|0;if(e>>>0>=ja>>>0&Ka>>>0>=ja>>>0){k[e+12>>2]=ga;k[ia>>2]=ga;k[ga+8>>2]=e;k[ga+12>>2]=Ka;k[ga+24>>2]=0;break}else mc()}}}else{e=k[11521]|0;if((e|0)==0|ea>>>0<e>>>0)k[11521]=ea;k[11629]=ea;k[11630]=fa;k[11632]=0;k[11526]=k[11635];k[11525]=-1;e=0;do{ia=46108+(e<<1<<2)|0;k[ia+12>>2]=ia;k[ia+8>>2]=ia;e=e+1|0}while((e|0)!=32);e=ea+8|0;ia=(e&7|0)==0?0:0-e&7;e=ea+ia|0;ja=fa+-40-ia|0;k[11523]=e;k[11520]=ja;k[e+4>>2]=ja|1;k[e+ja+4>>2]=40;k[11524]=k[11639]}while(0);fa=k[11520]|0;if(fa>>>0>F>>>0){ea=fa-F|0;k[11520]=ea;fa=k[11523]|0;ga=fa+F|0;k[11523]=ga;k[ga+4>>2]=ea|1;k[fa+4>>2]=F|3;n=fa+8|0;return n|0}}fa=Sra()|0;k[fa>>2]=12;n=0;return n|0}function mua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;if(!a)return;b=a+-8|0;c=k[11521]|0;if(b>>>0<c>>>0)mc();d=k[a+-4>>2]|0;a=d&3;if((a|0)==1)mc();e=d&-8;f=b+e|0;do if(!(d&1)){g=k[b>>2]|0;if(!a)return;h=b+(0-g)|0;i=g+e|0;if(h>>>0<c>>>0)mc();if((h|0)==(k[11522]|0)){j=f+4|0;l=k[j>>2]|0;if((l&3|0)!=3){m=h;n=i;break}k[11519]=i;k[j>>2]=l&-2;k[h+4>>2]=i|1;k[h+i>>2]=i;return}l=g>>>3;if(g>>>0<256){g=k[h+8>>2]|0;j=k[h+12>>2]|0;o=46108+(l<<1<<2)|0;if((g|0)!=(o|0)){if(g>>>0<c>>>0)mc();if((k[g+12>>2]|0)!=(h|0))mc()}if((j|0)==(g|0)){k[11517]=k[11517]&~(1<<l);m=h;n=i;break}if((j|0)!=(o|0)){if(j>>>0<c>>>0)mc();o=j+8|0;if((k[o>>2]|0)==(h|0))p=o;else mc()}else p=j+8|0;k[g+12>>2]=j;k[p>>2]=g;m=h;n=i;break}g=k[h+24>>2]|0;j=k[h+12>>2]|0;do if((j|0)==(h|0)){o=h+16|0;l=o+4|0;q=k[l>>2]|0;if(!q){r=k[o>>2]|0;if(!r){s=0;break}else{t=r;u=o}}else{t=q;u=l}while(1){l=t+20|0;q=k[l>>2]|0;if(q){t=q;u=l;continue}l=t+16|0;q=k[l>>2]|0;if(!q){v=t;w=u;break}else{t=q;u=l}}if(w>>>0<c>>>0)mc();else{k[w>>2]=0;s=v;break}}else{l=k[h+8>>2]|0;if(l>>>0<c>>>0)mc();q=l+12|0;if((k[q>>2]|0)!=(h|0))mc();o=j+8|0;if((k[o>>2]|0)==(h|0)){k[q>>2]=j;k[o>>2]=l;s=j;break}else mc()}while(0);if(g){j=k[h+28>>2]|0;l=46372+(j<<2)|0;if((h|0)==(k[l>>2]|0)){k[l>>2]=s;if(!s){k[11518]=k[11518]&~(1<<j);m=h;n=i;break}}else{if(g>>>0<(k[11521]|0)>>>0)mc();j=g+16|0;if((k[j>>2]|0)==(h|0))k[j>>2]=s;else k[g+20>>2]=s;if(!s){m=h;n=i;break}}j=k[11521]|0;if(s>>>0<j>>>0)mc();k[s+24>>2]=g;l=h+16|0;o=k[l>>2]|0;do if(o)if(o>>>0<j>>>0)mc();else{k[s+16>>2]=o;k[o+24>>2]=s;break}while(0);o=k[l+4>>2]|0;if(o)if(o>>>0<(k[11521]|0)>>>0)mc();else{k[s+20>>2]=o;k[o+24>>2]=s;m=h;n=i;break}else{m=h;n=i}}else{m=h;n=i}}else{m=b;n=e}while(0);if(m>>>0>=f>>>0)mc();e=f+4|0;b=k[e>>2]|0;if(!(b&1))mc();if(!(b&2)){if((f|0)==(k[11523]|0)){s=(k[11520]|0)+n|0;k[11520]=s;k[11523]=m;k[m+4>>2]=s|1;if((m|0)!=(k[11522]|0))return;k[11522]=0;k[11519]=0;return}if((f|0)==(k[11522]|0)){s=(k[11519]|0)+n|0;k[11519]=s;k[11522]=m;k[m+4>>2]=s|1;k[m+s>>2]=s;return}s=(b&-8)+n|0;c=b>>>3;do if(b>>>0>=256){v=k[f+24>>2]|0;w=k[f+12>>2]|0;do if((w|0)==(f|0)){u=f+16|0;t=u+4|0;p=k[t>>2]|0;if(!p){a=k[u>>2]|0;if(!a){x=0;break}else{y=a;z=u}}else{y=p;z=t}while(1){t=y+20|0;p=k[t>>2]|0;if(p){y=p;z=t;continue}t=y+16|0;p=k[t>>2]|0;if(!p){A=y;B=z;break}else{y=p;z=t}}if(B>>>0<(k[11521]|0)>>>0)mc();else{k[B>>2]=0;x=A;break}}else{t=k[f+8>>2]|0;if(t>>>0<(k[11521]|0)>>>0)mc();p=t+12|0;if((k[p>>2]|0)!=(f|0))mc();u=w+8|0;if((k[u>>2]|0)==(f|0)){k[p>>2]=w;k[u>>2]=t;x=w;break}else mc()}while(0);if(v){w=k[f+28>>2]|0;i=46372+(w<<2)|0;if((f|0)==(k[i>>2]|0)){k[i>>2]=x;if(!x){k[11518]=k[11518]&~(1<<w);break}}else{if(v>>>0<(k[11521]|0)>>>0)mc();w=v+16|0;if((k[w>>2]|0)==(f|0))k[w>>2]=x;else k[v+20>>2]=x;if(!x)break}w=k[11521]|0;if(x>>>0<w>>>0)mc();k[x+24>>2]=v;i=f+16|0;h=k[i>>2]|0;do if(h)if(h>>>0<w>>>0)mc();else{k[x+16>>2]=h;k[h+24>>2]=x;break}while(0);h=k[i+4>>2]|0;if(h)if(h>>>0<(k[11521]|0)>>>0)mc();else{k[x+20>>2]=h;k[h+24>>2]=x;break}}}else{h=k[f+8>>2]|0;w=k[f+12>>2]|0;v=46108+(c<<1<<2)|0;if((h|0)!=(v|0)){if(h>>>0<(k[11521]|0)>>>0)mc();if((k[h+12>>2]|0)!=(f|0))mc()}if((w|0)==(h|0)){k[11517]=k[11517]&~(1<<c);break}if((w|0)!=(v|0)){if(w>>>0<(k[11521]|0)>>>0)mc();v=w+8|0;if((k[v>>2]|0)==(f|0))C=v;else mc()}else C=w+8|0;k[h+12>>2]=w;k[C>>2]=h}while(0);k[m+4>>2]=s|1;k[m+s>>2]=s;if((m|0)==(k[11522]|0)){k[11519]=s;return}else D=s}else{k[e>>2]=b&-2;k[m+4>>2]=n|1;k[m+n>>2]=n;D=n}n=D>>>3;if(D>>>0<256){b=46108+(n<<1<<2)|0;e=k[11517]|0;s=1<<n;if(e&s){n=b+8|0;C=k[n>>2]|0;if(C>>>0<(k[11521]|0)>>>0)mc();else{E=n;F=C}}else{k[11517]=e|s;E=b+8|0;F=b}k[E>>2]=m;k[F+12>>2]=m;k[m+8>>2]=F;k[m+12>>2]=b;return}b=D>>>8;if(b)if(D>>>0>16777215)G=31;else{F=(b+1048320|0)>>>16&8;E=b<<F;b=(E+520192|0)>>>16&4;s=E<<b;E=(s+245760|0)>>>16&2;e=14-(b|F|E)+(s<<E>>>15)|0;G=D>>>(e+7|0)&1|e<<1}else G=0;e=46372+(G<<2)|0;k[m+28>>2]=G;k[m+20>>2]=0;k[m+16>>2]=0;E=k[11518]|0;s=1<<G;do if(E&s){F=D<<((G|0)==31?0:25-(G>>>1)|0);b=k[e>>2]|0;while(1){if((k[b+4>>2]&-8|0)==(D|0)){H=b;I=130;break}C=b+16+(F>>>31<<2)|0;n=k[C>>2]|0;if(!n){J=C;K=b;I=127;break}else{F=F<<1;b=n}}if((I|0)==127)if(J>>>0<(k[11521]|0)>>>0)mc();else{k[J>>2]=m;k[m+24>>2]=K;k[m+12>>2]=m;k[m+8>>2]=m;break}else if((I|0)==130){b=H+8|0;F=k[b>>2]|0;i=k[11521]|0;if(F>>>0>=i>>>0&H>>>0>=i>>>0){k[F+12>>2]=m;k[b>>2]=m;k[m+8>>2]=F;k[m+12>>2]=H;k[m+24>>2]=0;break}else mc()}}else{k[11518]=E|s;k[e>>2]=m;k[m+24>>2]=e;k[m+12>>2]=m;k[m+8>>2]=m}while(0);m=(k[11525]|0)+-1|0;k[11525]=m;if(!m)L=46524;else return;while(1){m=k[L>>2]|0;if(!m)break;else L=m+8|0}k[11525]=-1;return}function nua(a,b){a=a|0;b=b|0;var c=0,d=0;if(a){c=ma(b,a)|0;if((b|a)>>>0>65535)d=((c>>>0)/(a>>>0)|0|0)==(b|0)?c:-1;else d=c}else d=0;c=lua(d)|0;if(!c)return c|0;if(!(k[c+-4>>2]&3))return c|0;WEa(c|0,0,d|0)|0;return c|0}function oua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!a){c=lua(b)|0;return c|0}if(b>>>0>4294967231){d=Sra()|0;k[d>>2]=12;c=0;return c|0}d=pua(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){c=d+8|0;return c|0}d=lua(b)|0;if(!d){c=0;return c|0}e=k[a+-4>>2]|0;f=(e&-8)-((e&3|0)==0?8:4)|0;TEa(d|0,a|0,(f>>>0<b>>>0?f:b)|0)|0;mua(a);c=d;return c|0}function pua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;c=a+4|0;d=k[c>>2]|0;e=d&-8;f=a+e|0;g=k[11521]|0;h=d&3;if(!((h|0)!=1&a>>>0>=g>>>0&a>>>0<f>>>0))mc();i=k[f+4>>2]|0;if(!(i&1))mc();if(!h){if(b>>>0<256){j=0;return j|0}if(e>>>0>=(b+4|0)>>>0?(e-b|0)>>>0<=k[11637]<<1>>>0:0){j=a;return j|0}j=0;return j|0}if(e>>>0>=b>>>0){h=e-b|0;if(h>>>0<=15){j=a;return j|0}l=a+b|0;k[c>>2]=d&1|b|2;k[l+4>>2]=h|3;m=l+h+4|0;k[m>>2]=k[m>>2]|1;qua(l,h);j=a;return j|0}if((f|0)==(k[11523]|0)){h=(k[11520]|0)+e|0;if(h>>>0<=b>>>0){j=0;return j|0}l=h-b|0;h=a+b|0;k[c>>2]=d&1|b|2;k[h+4>>2]=l|1;k[11523]=h;k[11520]=l;j=a;return j|0}if((f|0)==(k[11522]|0)){l=(k[11519]|0)+e|0;if(l>>>0<b>>>0){j=0;return j|0}h=l-b|0;if(h>>>0>15){m=a+b|0;n=m+h|0;k[c>>2]=d&1|b|2;k[m+4>>2]=h|1;k[n>>2]=h;o=n+4|0;k[o>>2]=k[o>>2]&-2;p=m;q=h}else{k[c>>2]=d&1|l|2;h=a+l+4|0;k[h>>2]=k[h>>2]|1;p=0;q=0}k[11519]=q;k[11522]=p;j=a;return j|0}if(i&2){j=0;return j|0}p=(i&-8)+e|0;if(p>>>0<b>>>0){j=0;return j|0}e=p-b|0;q=i>>>3;do if(i>>>0>=256){h=k[f+24>>2]|0;l=k[f+12>>2]|0;do if((l|0)==(f|0)){m=f+16|0;o=m+4|0;n=k[o>>2]|0;if(!n){r=k[m>>2]|0;if(!r){s=0;break}else{t=r;u=m}}else{t=n;u=o}while(1){o=t+20|0;n=k[o>>2]|0;if(n){t=n;u=o;continue}o=t+16|0;n=k[o>>2]|0;if(!n){v=t;w=u;break}else{t=n;u=o}}if(w>>>0<g>>>0)mc();else{k[w>>2]=0;s=v;break}}else{o=k[f+8>>2]|0;if(o>>>0<g>>>0)mc();n=o+12|0;if((k[n>>2]|0)!=(f|0))mc();m=l+8|0;if((k[m>>2]|0)==(f|0)){k[n>>2]=l;k[m>>2]=o;s=l;break}else mc()}while(0);if(h){l=k[f+28>>2]|0;o=46372+(l<<2)|0;if((f|0)==(k[o>>2]|0)){k[o>>2]=s;if(!s){k[11518]=k[11518]&~(1<<l);break}}else{if(h>>>0<(k[11521]|0)>>>0)mc();l=h+16|0;if((k[l>>2]|0)==(f|0))k[l>>2]=s;else k[h+20>>2]=s;if(!s)break}l=k[11521]|0;if(s>>>0<l>>>0)mc();k[s+24>>2]=h;o=f+16|0;m=k[o>>2]|0;do if(m)if(m>>>0<l>>>0)mc();else{k[s+16>>2]=m;k[m+24>>2]=s;break}while(0);m=k[o+4>>2]|0;if(m)if(m>>>0<(k[11521]|0)>>>0)mc();else{k[s+20>>2]=m;k[m+24>>2]=s;break}}}else{m=k[f+8>>2]|0;l=k[f+12>>2]|0;h=46108+(q<<1<<2)|0;if((m|0)!=(h|0)){if(m>>>0<g>>>0)mc();if((k[m+12>>2]|0)!=(f|0))mc()}if((l|0)==(m|0)){k[11517]=k[11517]&~(1<<q);break}if((l|0)!=(h|0)){if(l>>>0<g>>>0)mc();h=l+8|0;if((k[h>>2]|0)==(f|0))x=h;else mc()}else x=l+8|0;k[m+12>>2]=l;k[x>>2]=m}while(0);if(e>>>0<16){k[c>>2]=p|d&1|2;x=a+p+4|0;k[x>>2]=k[x>>2]|1;j=a;return j|0}else{x=a+b|0;k[c>>2]=d&1|b|2;k[x+4>>2]=e|3;b=x+e+4|0;k[b>>2]=k[b>>2]|1;qua(x,e);j=a;return j|0}return 0}function qua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=a+b|0;d=k[a+4>>2]|0;do if(!(d&1)){e=k[a>>2]|0;if(!(d&3))return;f=a+(0-e)|0;g=e+b|0;h=k[11521]|0;if(f>>>0<h>>>0)mc();if((f|0)==(k[11522]|0)){i=c+4|0;j=k[i>>2]|0;if((j&3|0)!=3){l=f;m=g;break}k[11519]=g;k[i>>2]=j&-2;k[f+4>>2]=g|1;k[f+g>>2]=g;return}j=e>>>3;if(e>>>0<256){e=k[f+8>>2]|0;i=k[f+12>>2]|0;n=46108+(j<<1<<2)|0;if((e|0)!=(n|0)){if(e>>>0<h>>>0)mc();if((k[e+12>>2]|0)!=(f|0))mc()}if((i|0)==(e|0)){k[11517]=k[11517]&~(1<<j);l=f;m=g;break}if((i|0)!=(n|0)){if(i>>>0<h>>>0)mc();n=i+8|0;if((k[n>>2]|0)==(f|0))o=n;else mc()}else o=i+8|0;k[e+12>>2]=i;k[o>>2]=e;l=f;m=g;break}e=k[f+24>>2]|0;i=k[f+12>>2]|0;do if((i|0)==(f|0)){n=f+16|0;j=n+4|0;p=k[j>>2]|0;if(!p){q=k[n>>2]|0;if(!q){r=0;break}else{s=q;t=n}}else{s=p;t=j}while(1){j=s+20|0;p=k[j>>2]|0;if(p){s=p;t=j;continue}j=s+16|0;p=k[j>>2]|0;if(!p){u=s;v=t;break}else{s=p;t=j}}if(v>>>0<h>>>0)mc();else{k[v>>2]=0;r=u;break}}else{j=k[f+8>>2]|0;if(j>>>0<h>>>0)mc();p=j+12|0;if((k[p>>2]|0)!=(f|0))mc();n=i+8|0;if((k[n>>2]|0)==(f|0)){k[p>>2]=i;k[n>>2]=j;r=i;break}else mc()}while(0);if(e){i=k[f+28>>2]|0;h=46372+(i<<2)|0;if((f|0)==(k[h>>2]|0)){k[h>>2]=r;if(!r){k[11518]=k[11518]&~(1<<i);l=f;m=g;break}}else{if(e>>>0<(k[11521]|0)>>>0)mc();i=e+16|0;if((k[i>>2]|0)==(f|0))k[i>>2]=r;else k[e+20>>2]=r;if(!r){l=f;m=g;break}}i=k[11521]|0;if(r>>>0<i>>>0)mc();k[r+24>>2]=e;h=f+16|0;j=k[h>>2]|0;do if(j)if(j>>>0<i>>>0)mc();else{k[r+16>>2]=j;k[j+24>>2]=r;break}while(0);j=k[h+4>>2]|0;if(j)if(j>>>0<(k[11521]|0)>>>0)mc();else{k[r+20>>2]=j;k[j+24>>2]=r;l=f;m=g;break}else{l=f;m=g}}else{l=f;m=g}}else{l=a;m=b}while(0);b=k[11521]|0;if(c>>>0<b>>>0)mc();a=c+4|0;r=k[a>>2]|0;if(!(r&2)){if((c|0)==(k[11523]|0)){u=(k[11520]|0)+m|0;k[11520]=u;k[11523]=l;k[l+4>>2]=u|1;if((l|0)!=(k[11522]|0))return;k[11522]=0;k[11519]=0;return}if((c|0)==(k[11522]|0)){u=(k[11519]|0)+m|0;k[11519]=u;k[11522]=l;k[l+4>>2]=u|1;k[l+u>>2]=u;return}u=(r&-8)+m|0;v=r>>>3;do if(r>>>0>=256){t=k[c+24>>2]|0;s=k[c+12>>2]|0;do if((s|0)==(c|0)){o=c+16|0;d=o+4|0;j=k[d>>2]|0;if(!j){i=k[o>>2]|0;if(!i){w=0;break}else{x=i;y=o}}else{x=j;y=d}while(1){d=x+20|0;j=k[d>>2]|0;if(j){x=j;y=d;continue}d=x+16|0;j=k[d>>2]|0;if(!j){z=x;A=y;break}else{x=j;y=d}}if(A>>>0<b>>>0)mc();else{k[A>>2]=0;w=z;break}}else{d=k[c+8>>2]|0;if(d>>>0<b>>>0)mc();j=d+12|0;if((k[j>>2]|0)!=(c|0))mc();o=s+8|0;if((k[o>>2]|0)==(c|0)){k[j>>2]=s;k[o>>2]=d;w=s;break}else mc()}while(0);if(t){s=k[c+28>>2]|0;g=46372+(s<<2)|0;if((c|0)==(k[g>>2]|0)){k[g>>2]=w;if(!w){k[11518]=k[11518]&~(1<<s);break}}else{if(t>>>0<(k[11521]|0)>>>0)mc();s=t+16|0;if((k[s>>2]|0)==(c|0))k[s>>2]=w;else k[t+20>>2]=w;if(!w)break}s=k[11521]|0;if(w>>>0<s>>>0)mc();k[w+24>>2]=t;g=c+16|0;f=k[g>>2]|0;do if(f)if(f>>>0<s>>>0)mc();else{k[w+16>>2]=f;k[f+24>>2]=w;break}while(0);f=k[g+4>>2]|0;if(f)if(f>>>0<(k[11521]|0)>>>0)mc();else{k[w+20>>2]=f;k[f+24>>2]=w;break}}}else{f=k[c+8>>2]|0;s=k[c+12>>2]|0;t=46108+(v<<1<<2)|0;if((f|0)!=(t|0)){if(f>>>0<b>>>0)mc();if((k[f+12>>2]|0)!=(c|0))mc()}if((s|0)==(f|0)){k[11517]=k[11517]&~(1<<v);break}if((s|0)!=(t|0)){if(s>>>0<b>>>0)mc();t=s+8|0;if((k[t>>2]|0)==(c|0))B=t;else mc()}else B=s+8|0;k[f+12>>2]=s;k[B>>2]=f}while(0);k[l+4>>2]=u|1;k[l+u>>2]=u;if((l|0)==(k[11522]|0)){k[11519]=u;return}else C=u}else{k[a>>2]=r&-2;k[l+4>>2]=m|1;k[l+m>>2]=m;C=m}m=C>>>3;if(C>>>0<256){r=46108+(m<<1<<2)|0;a=k[11517]|0;u=1<<m;if(a&u){m=r+8|0;B=k[m>>2]|0;if(B>>>0<(k[11521]|0)>>>0)mc();else{D=m;E=B}}else{k[11517]=a|u;D=r+8|0;E=r}k[D>>2]=l;k[E+12>>2]=l;k[l+8>>2]=E;k[l+12>>2]=r;return}r=C>>>8;if(r)if(C>>>0>16777215)F=31;else{E=(r+1048320|0)>>>16&8;D=r<<E;r=(D+520192|0)>>>16&4;u=D<<r;D=(u+245760|0)>>>16&2;a=14-(r|E|D)+(u<<D>>>15)|0;F=C>>>(a+7|0)&1|a<<1}else F=0;a=46372+(F<<2)|0;k[l+28>>2]=F;k[l+20>>2]=0;k[l+16>>2]=0;D=k[11518]|0;u=1<<F;if(!(D&u)){k[11518]=D|u;k[a>>2]=l;k[l+24>>2]=a;k[l+12>>2]=l;k[l+8>>2]=l;return}u=C<<((F|0)==31?0:25-(F>>>1)|0);F=k[a>>2]|0;while(1){if((k[F+4>>2]&-8|0)==(C|0)){G=F;H=127;break}a=F+16+(u>>>31<<2)|0;D=k[a>>2]|0;if(!D){I=a;J=F;H=124;break}else{u=u<<1;F=D}}if((H|0)==124){if(I>>>0<(k[11521]|0)>>>0)mc();k[I>>2]=l;k[l+24>>2]=J;k[l+12>>2]=l;k[l+8>>2]=l;return}else if((H|0)==127){H=G+8|0;J=k[H>>2]|0;I=k[11521]|0;if(!(J>>>0>=I>>>0&G>>>0>=I>>>0))mc();k[J+12>>2]=l;k[H>>2]=l;k[l+8>>2]=J;k[l+12>>2]=G;k[l+24>>2]=0;return}}function rua(a){a=a|0;var b=0,c=0,d=0;a=k[10619]|0;vua(47244,a,47300);k[11641]=47992;k[11643]=48012;k[11642]=0;B=0;wa(508,46572,47244);b=B;B=0;if(b&1){b=Rb()|0;vva(46572);Qb(b|0)}k[11661]=0;k[11662]=-1;b=k[10620]|0;wua(47348,b,47308);k[11663]=48072;k[11664]=48092;B=0;wa(508,46656,47348);c=B;B=0;if(c&1){c=Rb()|0;vva(46656);Qb(c|0)}k[11682]=0;k[11683]=-1;c=k[10618]|0;wua(47396,c,47316);k[11684]=48072;k[11685]=48092;B=0;wa(508,46740,47396);d=B;B=0;if(d&1){d=Rb()|0;vva(46740);Qb(d|0)}k[11703]=0;k[11704]=-1;d=k[46736+(k[(k[11684]|0)+-12>>2]|0)+24>>2]|0;k[11705]=48072;k[11706]=48092;B=0;wa(508,46824,d|0);d=B;B=0;if(d&1){d=Rb()|0;vva(46824);Qb(d|0)}k[11724]=0;k[11725]=-1;k[46564+(k[(k[11641]|0)+-12>>2]|0)+72>>2]=46652;d=46736+(k[(k[11684]|0)+-12>>2]|0)+4|0;k[d>>2]=k[d>>2]|8192;k[46736+(k[(k[11684]|0)+-12>>2]|0)+72>>2]=46652;xua(47444,a,47324);k[11726]=48032;k[11728]=48052;k[11727]=0;B=0;wa(508,46912,47444);a=B;B=0;if(a&1){a=Rb()|0;zva(46912);Qb(a|0)}k[11746]=0;k[11747]=-1;yua(47500,b,47332);k[11748]=48112;k[11749]=48132;B=0;wa(508,46996,47500);b=B;B=0;if(b&1){b=Rb()|0;zva(46996);Qb(b|0)}k[11767]=0;k[11768]=-1;yua(47548,c,47340);k[11769]=48112;k[11770]=48132;B=0;wa(508,47080,47548);c=B;B=0;if(c&1){c=Rb()|0;zva(47080);Qb(c|0)}k[11788]=0;k[11789]=-1;c=k[47076+(k[(k[11769]|0)+-12>>2]|0)+24>>2]|0;k[11790]=48112;k[11791]=48132;B=0;wa(508,47164,c|0);c=B;B=0;if(c&1){c=Rb()|0;zva(47164);Qb(c|0)}else{k[11809]=0;k[11810]=-1;k[46904+(k[(k[11726]|0)+-12>>2]|0)+72>>2]=46992;c=47076+(k[(k[11769]|0)+-12>>2]|0)+4|0;k[c>>2]=k[c>>2]|8192;k[47076+(k[(k[11769]|0)+-12>>2]|0)+72>>2]=46992;return}}function sua(a){a=a|0;B=0;ya(442,46652)|0;a=B;B=0;if(((!(a&1)?(B=0,ya(442,46820)|0,a=B,B=0,!(a&1)):0)?(B=0,ya(443,46992)|0,a=B,B=0,!(a&1)):0)?(B=0,ya(443,47160)|0,a=B,B=0,!(a&1)):0)return;a=Rb(0)|0;Dd(a)}function tua(){rua(0);ic(550,157079,w|0)|0;return}function uua(){return}function vua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Cva(a);k[a>>2]=47796;k[a+32>>2]=b;k[a+40>>2]=c;k[a+48>>2]=-1;i[a+52>>0]=0;YAa(e,a+4|0);k[f>>2]=k[e>>2];B=0;wa(469,a|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;ZAa(f);Ava(a);Qb(e|0)}else{ZAa(f);r=d;return}}function wua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Cva(a);k[a>>2]=47732;k[a+32>>2]=b;YAa(e,a+4|0);k[f>>2]=k[e>>2];B=0;e=Xa(238,f|0,49380)|0;b=B;B=0;if(b&1){b=Rb()|0;ZAa(f);Ava(a);Qb(b|0)}else{ZAa(f);k[a+36>>2]=e;k[a+40>>2]=c;c=(Hc[k[(k[e>>2]|0)+28>>2]&511](e)|0)&1;i[a+44>>0]=c;r=d;return}}function xua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Rva(a);k[a>>2]=47668;k[a+32>>2]=b;k[a+40>>2]=c;k[a+48>>2]=-1;i[a+52>>0]=0;YAa(e,a+4|0);k[f>>2]=k[e>>2];B=0;wa(467,a|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;ZAa(f);Pva(a);Qb(e|0)}else{ZAa(f);r=d;return}}function yua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d+4|0;f=d;Rva(a);k[a>>2]=47604;k[a+32>>2]=b;YAa(e,a+4|0);k[f>>2]=k[e>>2];B=0;e=Xa(238,f|0,49388)|0;b=B;B=0;if(b&1){b=Rb()|0;ZAa(f);Pva(a);Qb(b|0)}else{ZAa(f);k[a+36>>2]=e;k[a+40>>2]=c;c=(Hc[k[(k[e>>2]|0)+28>>2]&511](e)|0)&1;i[a+44>>0]=c;r=d;return}}function zua(a){a=a|0;Pva(a);Sqa(a);return}function Aua(a,b){a=a|0;b=b|0;var c=0;Hc[k[(k[a>>2]|0)+24>>2]&511](a)|0;c=$Aa(b,49388)|0;k[a+36>>2]=c;b=(Hc[k[(k[c>>2]|0)+28>>2]&511](c)|0)&1;i[a+44>>0]=b;return}function Bua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+8|0;d=b;e=a+36|0;f=a+40|0;g=c+8|0;h=c;i=a+32|0;a:while(1){a=k[e>>2]|0;j=fd[k[(k[a>>2]|0)+20>>2]&31](a,k[f>>2]|0,c,g,d)|0;a=(k[d>>2]|0)-h|0;if((jta(c,1,a,k[i>>2]|0)|0)!=(a|0)){l=-1;break}switch(j|0){case 1:break;case 2:{l=-1;break a;break}default:{m=4;break a}}}if((m|0)==4)l=((Usa(k[i>>2]|0)|0)!=0)<<31>>31;r=b;return l|0}function Cua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do if(!(i[a+44>>0]|0)){d=b;e=0;while(1){if((e|0)>=(c|0)){f=e;break a}if((ed[k[(k[a>>2]|0)+52>>2]&511](a,k[d>>2]|0)|0)==-1){f=e;break a}d=d+4|0;e=e+1|0}}else f=jta(b,4,c,k[a+32>>2]|0)|0;while(0);return f|0}function Dua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=(b|0)==-1;do if(!h){k[e>>2]=b;if(i[a+44>>0]|0)if((jta(e,4,1,k[a+32>>2]|0)|0)==1){j=14;break}else{l=-1;break}k[f>>2]=d;m=e+4|0;n=a+36|0;o=a+40|0;p=d+8|0;q=d;s=a+32|0;t=e;while(1){u=k[n>>2]|0;v=pd[k[(k[u>>2]|0)+12>>2]&15](u,k[o>>2]|0,t,m,g,d,p,f)|0;if((k[g>>2]|0)==(t|0)){j=13;break}if((v|0)==3){w=t;j=7;break}if(v>>>0>=2){j=13;break}u=(k[f>>2]|0)-q|0;if((jta(d,1,u,k[s>>2]|0)|0)!=(u|0)){j=13;break}if((v|0)==1)t=k[g>>2]|0;else{j=12;break}}if((j|0)==7)if((jta(w,1,1,k[s>>2]|0)|0)==1)j=12;else j=13;if((j|0)==12){j=14;break}else if((j|0)==13){l=-1;break}}else j=14;while(0);if((j|0)==14)l=h?0:b;r=c;return l|0}function Eua(a,b){a=a|0;b=b|0;var c=0,d=0;c=$Aa(b,49388)|0;b=a+36|0;k[b>>2]=c;d=Hc[k[(k[c>>2]|0)+24>>2]&511](c)|0;c=a+44|0;k[c>>2]=d;d=k[b>>2]|0;b=(Hc[k[(k[d>>2]|0)+28>>2]&511](d)|0)&1;i[a+53>>0]=b;if((k[c>>2]|0)>8)iAa(157105);return}function Fua(a){a=a|0;Pva(a);Sqa(a);return}function Gua(a){a=a|0;return Jua(a,0)|0}function Hua(a){a=a|0;return Jua(a,1)|0}function Iua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;j=(i[h>>0]|0)!=0;a:do if((b|0)==-1)if(j)l=-1;else{m=k[a+48>>2]|0;i[h>>0]=(m|0)!=-1&1;l=m}else{do if(j){m=a+48|0;k[f>>2]=k[m>>2];n=k[a+36>>2]|0;switch(pd[k[(k[n>>2]|0)+12>>2]&15](n,k[a+40>>2]|0,f,f+4|0,g,d,d+8|0,e)|0){case 1:case 2:{l=-1;break a;break}case 3:{i[d>>0]=k[m>>2];k[e>>2]=d+1;break}default:{}}n=a+32|0;while(1){o=k[e>>2]|0;if(o>>>0<=d>>>0){p=13;break}q=o+-1|0;k[e>>2]=q;if((sta(i[q>>0]|0,k[n>>2]|0)|0)==-1){p=12;break}}if((p|0)==12){l=-1;break a}else if((p|0)==13){s=m;break}}else s=a+48|0;while(0);k[s>>2]=b;i[h>>0]=1;l=b}while(0);r=c;return l|0}function Jua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;if(i[h>>0]|0){j=a+48|0;l=k[j>>2]|0;if(b){k[j>>2]=-1;i[h>>0]=0;m=l}else m=l}else{l=k[a+44>>2]|0;h=(l|0)>1?l:1;l=a+32|0;j=0;while(1){if((j|0)>=(h|0)){n=8;break}o=kta(k[l>>2]|0)|0;if((o|0)==-1){p=-1;break}i[d+j>>0]=o;j=j+1|0}if((n|0)==8){do if(!(i[a+53>>0]|0)){j=a+40|0;o=a+36|0;q=e+4|0;s=h;a:while(1){t=k[j>>2]|0;u=t;v=k[u>>2]|0;w=k[u+4>>2]|0;u=k[o>>2]|0;x=d+s|0;switch(pd[k[(k[u>>2]|0)+16>>2]&15](u,t,d,x,f,e,q,g)|0){case 3:{y=s;n=15;break a;break}case 2:{n=17;break a;break}case 1:break;default:{z=s;break a}}t=k[j>>2]|0;k[t>>2]=v;k[t+4>>2]=w;if((s|0)==8){n=17;break}w=kta(k[l>>2]|0)|0;if((w|0)==-1){n=17;break}i[x>>0]=w;s=s+1|0}if((n|0)==15){k[e>>2]=i[d>>0];z=y}else if((n|0)==17){A=-1;break}B=z;n=18}else{k[e>>2]=i[d>>0];B=h;n=18}while(0);b:do if((n|0)==18){if(b){h=k[e>>2]|0;k[a+48>>2]=h;A=h;break}else C=B;while(1){if((C|0)<=0)break;C=C+-1|0;if((sta(i[d+C>>0]|0,k[l>>2]|0)|0)==-1){A=-1;break b}}A=k[e>>2]|0}while(0);p=A}m=p}r=c;return m|0}function Kua(a){a=a|0;Ava(a);Sqa(a);return}function Lua(a,b){a=a|0;b=b|0;var c=0;Hc[k[(k[a>>2]|0)+24>>2]&511](a)|0;c=$Aa(b,49380)|0;k[a+36>>2]=c;b=(Hc[k[(k[c>>2]|0)+28>>2]&511](c)|0)&1;i[a+44>>0]=b;return}function Mua(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+8|0;d=b;e=a+36|0;f=a+40|0;g=c+8|0;h=c;i=a+32|0;a:while(1){a=k[e>>2]|0;j=fd[k[(k[a>>2]|0)+20>>2]&31](a,k[f>>2]|0,c,g,d)|0;a=(k[d>>2]|0)-h|0;if((jta(c,1,a,k[i>>2]|0)|0)!=(a|0)){l=-1;break}switch(j|0){case 1:break;case 2:{l=-1;break a;break}default:{m=4;break a}}}if((m|0)==4)l=((Usa(k[i>>2]|0)|0)!=0)<<31>>31;r=b;return l|0}function Nua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do if(!(i[a+44>>0]|0)){d=b;e=0;while(1){if((e|0)>=(c|0)){f=e;break a}if((ed[k[(k[a>>2]|0)+52>>2]&511](a,l[d>>0]|0)|0)==-1){f=e;break a}d=d+1|0;e=e+1|0}}else f=jta(b,1,c,k[a+32>>2]|0)|0;while(0);return f|0}function Oua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=(b|0)==-1;do if(!h){i[e>>0]=b;if(i[a+44>>0]|0)if((jta(e,1,1,k[a+32>>2]|0)|0)==1){j=14;break}else{l=-1;break}k[f>>2]=d;m=e+1|0;n=a+36|0;o=a+40|0;p=d+8|0;q=d;s=a+32|0;t=e;while(1){u=k[n>>2]|0;v=pd[k[(k[u>>2]|0)+12>>2]&15](u,k[o>>2]|0,t,m,g,d,p,f)|0;if((k[g>>2]|0)==(t|0)){j=13;break}if((v|0)==3){w=t;j=7;break}if(v>>>0>=2){j=13;break}u=(k[f>>2]|0)-q|0;if((jta(d,1,u,k[s>>2]|0)|0)!=(u|0)){j=13;break}if((v|0)==1)t=k[g>>2]|0;else{j=12;break}}if((j|0)==7)if((jta(w,1,1,k[s>>2]|0)|0)==1)j=12;else j=13;if((j|0)==12){j=14;break}else if((j|0)==13){l=-1;break}}else j=14;while(0);if((j|0)==14)l=h?0:b;r=c;return l|0}function Pua(a,b){a=a|0;b=b|0;var c=0,d=0;c=$Aa(b,49380)|0;b=a+36|0;k[b>>2]=c;d=Hc[k[(k[c>>2]|0)+24>>2]&511](c)|0;c=a+44|0;k[c>>2]=d;d=k[b>>2]|0;b=(Hc[k[(k[d>>2]|0)+28>>2]&511](d)|0)&1;i[a+53>>0]=b;if((k[c>>2]|0)>8)iAa(157105);return}function Qua(a){a=a|0;Ava(a);Sqa(a);return}function Rua(a){a=a|0;return Uua(a,0)|0}function Sua(a){a=a|0;return Uua(a,1)|0}function Tua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;c=r;r=r+32|0;d=c+16|0;e=c+4|0;f=c+8|0;g=c;h=a+52|0;j=(i[h>>0]|0)!=0;a:do if((b|0)==-1)if(j)l=-1;else{m=k[a+48>>2]|0;i[h>>0]=(m|0)!=-1&1;l=m}else{do if(j){m=a+48|0;i[f>>0]=k[m>>2];n=k[a+36>>2]|0;switch(pd[k[(k[n>>2]|0)+12>>2]&15](n,k[a+40>>2]|0,f,f+1|0,g,d,d+8|0,e)|0){case 1:case 2:{l=-1;break a;break}case 3:{i[d>>0]=k[m>>2];k[e>>2]=d+1;break}default:{}}n=a+32|0;while(1){o=k[e>>2]|0;if(o>>>0<=d>>>0){p=13;break}q=o+-1|0;k[e>>2]=q;if((sta(i[q>>0]|0,k[n>>2]|0)|0)==-1){p=12;break}}if((p|0)==12){l=-1;break a}else if((p|0)==13){s=m;break}}else s=a+48|0;while(0);k[s>>2]=b;i[h>>0]=1;l=b}while(0);r=c;return l|0}function Uua(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c+4|0;g=c;h=a+52|0;if(i[h>>0]|0){j=a+48|0;m=k[j>>2]|0;if(b){k[j>>2]=-1;i[h>>0]=0;n=m}else n=m}else{m=k[a+44>>2]|0;h=(m|0)>1?m:1;m=a+32|0;j=0;while(1){if((j|0)>=(h|0)){o=8;break}p=kta(k[m>>2]|0)|0;if((p|0)==-1){q=-1;break}i[d+j>>0]=p;j=j+1|0}if((o|0)==8){do if(!(i[a+53>>0]|0)){j=a+40|0;p=a+36|0;s=e+1|0;t=h;a:while(1){u=k[j>>2]|0;v=u;w=k[v>>2]|0;x=k[v+4>>2]|0;v=k[p>>2]|0;y=d+t|0;switch(pd[k[(k[v>>2]|0)+16>>2]&15](v,u,d,y,f,e,s,g)|0){case 3:{z=t;o=15;break a;break}case 2:{o=17;break a;break}case 1:break;default:{A=t;break a}}u=k[j>>2]|0;k[u>>2]=w;k[u+4>>2]=x;if((t|0)==8){o=17;break}x=kta(k[m>>2]|0)|0;if((x|0)==-1){o=17;break}i[y>>0]=x;t=t+1|0}if((o|0)==15){i[e>>0]=i[d>>0]|0;A=z}else if((o|0)==17){B=-1;break}C=A;o=18}else{i[e>>0]=i[d>>0]|0;C=h;o=18}while(0);b:do if((o|0)==18){if(b){h=i[e>>0]|0;k[a+48>>2]=h&255;D=h}else{h=C;while(1){if((h|0)<=0)break;h=h+-1|0;if((sta(l[d+h>>0]|0,k[m>>2]|0)|0)==-1){B=-1;break b}}D=i[e>>0]|0}B=D&255}while(0);q=B}n=q}r=c;return n|0}function Vua(a,b){a=a|0;b=b|0;if(!(i[b>>0]&1)){k[a>>2]=k[b>>2];k[a+4>>2]=k[b+4>>2];k[a+8>>2]=k[b+8>>2]}else Wua(a,k[b+8>>2]|0,k[b+4>>2]|0);return}function Wua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(c>>>0>4294967279)Nqa(a);if(c>>>0<11){i[a>>0]=c<<1;d=a+1|0}else{e=c+16&-16;f=Qqa(e)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=c;d=f}TEa(d|0,b|0,c|0)|0;i[d+c>>0]=0;return}function Xua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>4294967279)Nqa(a);if(b>>>0<11){i[a>>0]=b<<1;d=a+1|0}else{e=b+16&-16;f=Qqa(e)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=b;d=f}WEa(d|0,c|0,b|0)|0;i[d+b>>0]=0;return}function Yua(a){a=a|0;if(i[a>>0]&1)Sqa(k[a+8>>2]|0);return}function Zua(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)!=(b|0)){c=i[b>>0]|0;d=(c&1)==0;$ua(a,d?b+1|0:k[b+8>>2]|0,d?(c&255)>>>1:k[b+4>>2]|0)|0}return a|0}function _ua(a,b){a=a|0;b=b|0;return $ua(a,b,Lta(b)|0)|0}function $ua(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}d=(f&1)==0;do if(e>>>0>=c>>>0){if(d)g=a+1|0;else g=k[a+8>>2]|0;UEa(g|0,b|0,c|0)|0;i[g+c>>0]=0;if(!(i[a>>0]&1)){i[a>>0]=c<<1;break}else{k[a+4>>2]=c;break}}else{if(d)h=(f&255)>>>1;else h=k[a+4>>2]|0;gva(a,e,c-e|0,h,0,h,c,b)}while(0);return a|0}function ava(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=i[a>>0]|0;e=(d&1)==0;if(e)f=(d&255)>>>1;else f=k[a+4>>2]|0;do if(f>>>0>=b>>>0)if(e){i[a+1+b>>0]=0;i[a>>0]=b<<1;break}else{i[(k[a+8>>2]|0)+b>>0]=0;k[a+4>>2]=b;break}else bva(a,b-f|0,c)|0;while(0);return}function bva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;if(b){d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0<b>>>0){hva(a,e,b-e+g|0,g,g,0,0);h=i[a>>0]|0}else h=f;if(!(h&1))j=a+1|0;else j=k[a+8>>2]|0;WEa(j+g|0,c|0,b|0)|0;c=g+b|0;if(!(i[a>>0]&1))i[a>>0]=c<<1;else k[a+4>>2]=c;i[j+c>>0]=0}return a|0}function cva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0>4294967279)Nqa(a);c=i[a>>0]|0;if(!(c&1)){d=10;e=c}else{c=k[a>>2]|0;d=(c&-2)+-1|0;e=c&255}if(!(e&1))f=(e&255)>>>1;else f=k[a+4>>2]|0;c=f>>>0>b>>>0?f:b;if(c>>>0<11)g=10;else g=(c+16&-16)+-1|0;a:do if((g|0)!=(d|0)){do if((g|0)!=10){c=g+1|0;if(g>>>0<=d>>>0){B=0;b=ya(423,c|0)|0;h=B;B=0;if(h&1){h=Rb(0)|0;Nb(h|0)|0;Pb();break a}else j=b}else j=Qqa(c)|0;if(!(e&1)){l=j;m=1;n=a+1|0;o=0;break}else{l=j;m=1;n=k[a+8>>2]|0;o=1;break}}else{l=a+1|0;m=0;n=k[a+8>>2]|0;o=1}while(0);if(!(e&1))p=(e&255)>>>1;else p=k[a+4>>2]|0;TEa(l|0,n|0,p+1|0)|0;if(o)Sqa(n);if(m){k[a>>2]=g+1|1;k[a+4>>2]=f;k[a+8>>2]=l;break}else{i[a>>0]=f<<1;break}}while(0);return}function dva(a,b){a=a|0;b=b|0;return fva(a,b,Lta(b)|0)|0}function eva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)!=0;if(d){e=(k[a>>2]&-2)+-1|0;f=k[a+4>>2]|0}else{e=10;f=(c&255)>>>1}if((f|0)==(e|0)){hva(a,e,1,e,e,0,0);if(!(i[a>>0]&1))g=7;else g=8}else if(d)g=8;else g=7;if((g|0)==7){i[a>>0]=(f<<1)+2;h=a+1|0}else if((g|0)==8){g=k[a+8>>2]|0;k[a+4>>2]=f+1;h=g}g=h+f|0;i[g>>0]=b;i[g+1>>0]=0;return}function fva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=10;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}if(!(f&1))g=(f&255)>>>1;else g=k[a+4>>2]|0;if((e-g|0)>>>0>=c>>>0){if(c){if(!(f&1))h=a+1|0;else h=k[a+8>>2]|0;TEa(h+g|0,b|0,c|0)|0;f=g+c|0;if(!(i[a>>0]&1))i[a>>0]=f<<1;else k[a+4>>2]=f;i[h+f>>0]=0}}else gva(a,e,c-e+g|0,g,g,0,c,b);return a|0}function gva(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;if((-18-b|0)>>>0<c>>>0)Nqa(a);if(!(i[a>>0]&1))j=a+1|0;else j=k[a+8>>2]|0;if(b>>>0<2147483623){l=c+b|0;c=b<<1;m=l>>>0<c>>>0?c:l;n=m>>>0<11?11:m+16&-16}else n=-17;m=Qqa(n)|0;if(e)TEa(m|0,j|0,e|0)|0;if(g)TEa(m+e|0,h|0,g|0)|0;h=d-f|0;if((h|0)!=(e|0))TEa(m+e+g|0,j+e+f|0,h-e|0)|0;if((b|0)!=10)Sqa(j);k[a+8>>2]=m;k[a>>2]=n|1;n=h+g|0;k[a+4>>2]=n;i[m+n>>0]=0;return}function hva(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0;if((-17-b|0)>>>0<c>>>0)Nqa(a);if(!(i[a>>0]&1))h=a+1|0;else h=k[a+8>>2]|0;if(b>>>0<2147483623){j=c+b|0;c=b<<1;l=j>>>0<c>>>0?c:j;m=l>>>0<11?11:l+16&-16}else m=-17;l=Qqa(m)|0;if(e)TEa(l|0,h|0,e|0)|0;j=d-f|0;if((j|0)!=(e|0))TEa(l+e+g|0,h+e+f|0,j-e|0)|0;if((b|0)!=10)Sqa(h);k[a+8>>2]=l;k[a>>2]=m|1;return}function iva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(c>>>0>1073741807)Nqa(a);if(c>>>0<2){i[a>>0]=c<<1;d=a+4|0}else{e=c+4&-4;f=Qqa(e<<2)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=c;d=f}Rta(d,b,c)|0;k[d+(c<<2)>>2]=0;return}function jva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(b>>>0>1073741807)Nqa(a);if(b>>>0<2){i[a>>0]=b<<1;d=a+4|0}else{e=b+4&-4;f=Qqa(e<<2)|0;k[a+8>>2]=f;k[a>>2]=e|1;k[a+4>>2]=b;d=f}Tta(d,c,b)|0;k[d+(b<<2)>>2]=0;return}function kva(a){a=a|0;if(i[a>>0]&1)Sqa(k[a+8>>2]|0);return}function lva(a,b){a=a|0;b=b|0;return mva(a,b,Qta(b)|0)|0}function mva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i[a>>0]|0;if(!(d&1)){e=1;f=d}else{d=k[a>>2]|0;e=(d&-2)+-1|0;f=d&255}d=(f&1)==0;do if(e>>>0>=c>>>0){if(d)g=a+4|0;else g=k[a+8>>2]|0;Sta(g,b,c)|0;k[g+(c<<2)>>2]=0;if(!(i[a>>0]&1)){i[a>>0]=c<<1;break}else{k[a+4>>2]=c;break}}else{if(d)h=(f&255)>>>1;else h=k[a+4>>2]|0;pva(a,e,c-e|0,h,0,h,c,b)}while(0);return a|0}function nva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0>1073741807)Nqa(a);c=i[a>>0]|0;if(!(c&1)){d=1;e=c}else{c=k[a>>2]|0;d=(c&-2)+-1|0;e=c&255}if(!(e&1))f=(e&255)>>>1;else f=k[a+4>>2]|0;c=f>>>0>b>>>0?f:b;if(c>>>0<2)g=1;else g=(c+4&-4)+-1|0;a:do if((g|0)!=(d|0)){do if((g|0)!=1){c=(g<<2)+4|0;if(g>>>0<=d>>>0){B=0;b=ya(423,c|0)|0;h=B;B=0;if(h&1){h=Rb(0)|0;Nb(h|0)|0;Pb();break a}else j=b}else j=Qqa(c)|0;if(!(e&1)){l=j;m=1;n=a+4|0;o=0;break}else{l=j;m=1;n=k[a+8>>2]|0;o=1;break}}else{l=a+4|0;m=0;n=k[a+8>>2]|0;o=1}while(0);if(!(e&1))p=(e&255)>>>1;else p=k[a+4>>2]|0;Rta(l,n,p+1|0)|0;if(o)Sqa(n);if(m){k[a>>2]=g+1|1;k[a+4>>2]=f;k[a+8>>2]=l;break}else{i[a>>0]=f<<1;break}}while(0);return}function ova(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=i[a>>0]|0;d=(c&1)!=0;if(d){e=(k[a>>2]&-2)+-1|0;f=k[a+4>>2]|0}else{e=1;f=(c&255)>>>1}if((f|0)==(e|0)){qva(a,e,1,e,e,0,0);if(!(i[a>>0]&1))g=7;else g=8}else if(d)g=8;else g=7;if((g|0)==7){i[a>>0]=(f<<1)+2;h=a+4|0}else if((g|0)==8){g=k[a+8>>2]|0;k[a+4>>2]=f+1;h=g}g=h+(f<<2)|0;k[g>>2]=b;k[g+4>>2]=0;return}function pva(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;if((1073741806-b|0)>>>0<c>>>0)Nqa(a);if(!(i[a>>0]&1))j=a+4|0;else j=k[a+8>>2]|0;if(b>>>0<536870887){l=c+b|0;c=b<<1;m=l>>>0<c>>>0?c:l;n=m>>>0<2?2:m+4&-4}else n=1073741807;m=Qqa(n<<2)|0;if(e)Rta(m,j,e)|0;if(g)Rta(m+(e<<2)|0,h,g)|0;h=d-f|0;if((h|0)!=(e|0))Rta(m+(e<<2)+(g<<2)|0,j+(e<<2)+(f<<2)|0,h-e|0)|0;if((b|0)!=1)Sqa(j);k[a+8>>2]=m;k[a>>2]=n|1;n=h+g|0;k[a+4>>2]=n;k[m+(n<<2)>>2]=0;return}function qva(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0;if((1073741807-b|0)>>>0<c>>>0)Nqa(a);if(!(i[a>>0]&1))h=a+4|0;else h=k[a+8>>2]|0;if(b>>>0<536870887){j=c+b|0;c=b<<1;l=j>>>0<c>>>0?c:j;m=l>>>0<2?2:l+4&-4}else m=1073741807;l=Qqa(m<<2)|0;if(e)Rta(l,h,e)|0;j=d-f|0;if((j|0)!=(e|0))Rta(l+(e<<2)+(g<<2)|0,h+(e<<2)+(f<<2)|0,j-e|0)|0;if((b|0)!=1)Sqa(h);k[a+8>>2]=l;k[a>>2]=m|1;return}function rva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=b;e=c-d|0;if(e>>>0>4294967279)Nqa(a);if(e>>>0<11){i[a>>0]=e<<1;f=a+1|0}else{g=e+16&-16;h=Qqa(g)|0;k[a+8>>2]=h;k[a>>2]=g|1;k[a+4>>2]=e;f=h}h=c-d|0;d=b;b=f;while(1){if((d|0)==(c|0))break;i[b>>0]=i[d>>0]|0;d=d+1|0;b=b+1|0}i[f+h>>0]=0;return}function sva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=b;e=c-d|0;f=e>>2;if(f>>>0>1073741807)Nqa(a);if(f>>>0<2){i[a>>0]=e>>>1;g=a+4|0}else{e=f+4&-4;h=Qqa(e<<2)|0;k[a+8>>2]=h;k[a>>2]=e|1;k[a+4>>2]=f;g=h}h=(c-d|0)>>>2;d=b;b=g;while(1){if((d|0)==(c|0))break;k[b>>2]=k[d>>2];d=d+4|0;b=b+4|0}k[g+(h<<2)>>2]=0;return}function tva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=(k[a+24>>2]|0)==0;k[a+16>>2]=e&1|b;if(!((e&1|b)&k[a+20>>2])){r=c;return}c=Ab(16)|0;Lwa()|0;k[d>>2]=1;k[d+4>>2]=48212;B=0;eb(531,c|0,157660,d|0);d=B;B=0;if(d&1){d=Rb()|0;zb(c|0);Qb(d|0)}else jc(c|0,25432,380)}function uva(a){a=a|0;var b=0;k[a>>2]=48168;B=0;wa(525,a|0,0);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}else{ZAa(a+28|0);mua(k[a+32>>2]|0);mua(k[a+36>>2]|0);mua(k[a+48>>2]|0);mua(k[a+60>>2]|0);return}}function vva(a){a=a|0;uva(a);return}function wva(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a+32|0;d=a+36|0;e=k[a+40>>2]|0;while(1){if(!e)break;f=e+-1|0;nd[k[(k[c>>2]|0)+(f<<2)>>2]&1023](b,a,k[(k[d>>2]|0)+(f<<2)>>2]|0);e=f}return}function xva(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;YAa(c,a+28|0);r=b;return k[c>>2]|0}function yva(a,b){a=a|0;b=b|0;var c=0;k[a+24>>2]=b;k[a+16>>2]=(b|0)==0&1;k[a+20>>2]=0;k[a+4>>2]=4098;k[a+12>>2]=0;k[a+8>>2]=6;b=a+28|0;c=a+32|0;a=c+40|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(a|0));XAa(b);return}function zva(a){a=a|0;uva(a);return}function Ava(a){a=a|0;k[a>>2]=47860;ZAa(a+4|0);return}function Bva(a){a=a|0;k[a>>2]=47860;ZAa(a+4|0);Sqa(a);return}function Cva(a){a=a|0;var b=0;k[a>>2]=47860;XAa(a+4|0);b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function Dva(a,b){a=a|0;b=b|0;return}function Eva(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Fva(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;return}function Gva(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Hva(a){a=a|0;return 0}function Iva(a){a=a|0;return 0}function Jva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+12|0;e=a+16|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0<(k[e>>2]|0)>>>0){k[d>>2]=h+1;j=i[h>>0]|0}else{h=Hc[k[(k[a>>2]|0)+40>>2]&511](a)|0;if((h|0)==-1){g=b;break}j=h&255}i[f>>0]=j;f=f+1|0;b=b+1|0}return g|0}function Kva(a){a=a|0;return -1}function Lva(a){a=a|0;var b=0,c=0;if((Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0)==-1)b=-1;else{c=a+12|0;a=k[c>>2]|0;k[c>>2]=a+1;b=l[a>>0]|0}return b|0}function Mva(a,b){a=a|0;b=b|0;return -1}function Nva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=a+24|0;e=a+28|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){if((ed[k[(k[a>>2]|0)+52>>2]&511](a,l[f>>0]|0)|0)==-1){g=b;break}}else{j=i[f>>0]|0;k[d>>2]=h+1;i[h>>0]=j}f=f+1|0;b=b+1|0}return g|0}function Ova(a,b){a=a|0;b=b|0;return -1}function Pva(a){a=a|0;k[a>>2]=47924;ZAa(a+4|0);return}function Qva(a){a=a|0;k[a>>2]=47924;ZAa(a+4|0);Sqa(a);return}function Rva(a){a=a|0;var b=0;k[a>>2]=47924;XAa(a+4|0);b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function Sva(a,b){a=a|0;b=b|0;return}function Tva(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Uva(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;f=a;k[f>>2]=0;k[f+4>>2]=0;f=a+8|0;k[f>>2]=-1;k[f+4>>2]=-1;return}function Vva(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Wva(a){a=a|0;return 0}function Xva(a){a=a|0;return 0}function Yva(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+12|0;e=a+16|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){i=Hc[k[(k[a>>2]|0)+40>>2]&511](a)|0;if((i|0)==-1){g=b;break}else j=i}else{k[d>>2]=h+4;j=k[h>>2]|0}k[f>>2]=j;f=f+4|0;b=b+1|0}return g|0}function Zva(a){a=a|0;return -1}function _va(a){a=a|0;var b=0,c=0;if((Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0)==-1)b=-1;else{c=a+12|0;a=k[c>>2]|0;k[c>>2]=a+4;b=k[a>>2]|0}return b|0}function $va(a,b){a=a|0;b=b|0;return -1}function awa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+24|0;e=a+28|0;f=b;b=0;while(1){if((b|0)>=(c|0)){g=b;break}h=k[d>>2]|0;if(h>>>0>=(k[e>>2]|0)>>>0){if((ed[k[(k[a>>2]|0)+52>>2]&511](a,k[f>>2]|0)|0)==-1){g=b;break}}else{i=k[f>>2]|0;k[d>>2]=h+4;k[h>>2]=i}f=f+4|0;b=b+1|0}return g|0}function bwa(a,b){a=a|0;b=b|0;return -1}function cwa(a){a=a|0;uva(a+8|0);return}function dwa(a){a=a|0;uva(a+(k[(k[a>>2]|0)+-12>>2]|0)+8|0);return}function ewa(a){a=a|0;uva(a+8|0);Sqa(a);return}function fwa(a){a=a|0;ewa(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function gwa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;a:do if(k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0){B=0;wa(504,c|0,a|0);d=B;B=0;b:do if(d&1){e=Rb(0)|0;f=e}else{do if(i[c>>0]|0){e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;B=0;g=ya(k[(k[e>>2]|0)+24>>2]|0,e|0)|0;e=B;B=0;if(!(e&1)){if((g|0)!=-1)break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,g|0,k[g+16>>2]|1|0);g=B;B=0;if(!(g&1))break}g=Rb(0)|0;twa(c);f=g;break b}while(0);twa(c);break a}while(0);Nb(f|0)|0;B=0;va(447,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);d=B;B=0;if(!(d&1)){Pb();break}d=Rb()|0;B=0;fb(4);g=B;B=0;if(g&1){g=Rb(0)|0;Dd(g)}else Qb(d|0)}while(0);r=b;return a|0}function hwa(a){a=a|0;var b=0;b=a+16|0;k[b>>2]=k[b>>2]|1;if(!(k[a+20>>2]&1))return;else ac()}function iwa(a){a=a|0;uva(a+8|0);return}function jwa(a){a=a|0;uva(a+(k[(k[a>>2]|0)+-12>>2]|0)+8|0);return}function kwa(a){a=a|0;uva(a+8|0);Sqa(a);return}function lwa(a){a=a|0;kwa(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function mwa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b;a:do if(k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0){B=0;wa(526,c|0,a|0);d=B;B=0;b:do if(d&1){e=Rb(0)|0;f=e}else{do if(i[c>>0]|0){e=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;B=0;g=ya(k[(k[e>>2]|0)+24>>2]|0,e|0)|0;e=B;B=0;if(!(e&1)){if((g|0)!=-1)break;g=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,g|0,k[g+16>>2]|1|0);g=B;B=0;if(!(g&1))break}g=Rb(0)|0;Iwa(c);f=g;break b}while(0);Iwa(c);break a}while(0);Nb(f|0)|0;B=0;va(447,a+(k[(k[a>>2]|0)+-12>>2]|0)|0);d=B;B=0;if(!(d&1)){Pb();break}d=Rb()|0;B=0;fb(4);g=B;B=0;if(g&1){g=Rb(0)|0;Dd(g)}else Qb(d|0)}while(0);r=b;return a|0}function nwa(a,b){a=a|0;b=b|0;return}function owa(a){a=a|0;uva(a+4|0);return}function pwa(a){a=a|0;uva(a+(k[(k[a>>2]|0)+-12>>2]|0)+4|0);return}function qwa(a){a=a|0;uva(a+4|0);Sqa(a);return}function rwa(a){a=a|0;qwa(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function swa(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=0;k[a+4>>2]=b;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]|0)){b=k[c+72>>2]|0;if(b)gwa(b)|0;i[a>>0]=1}return}function twa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if((((k[c+24>>2]|0)!=0?(k[c+16>>2]|0)==0:0)?(k[c+4>>2]&8192|0)!=0:0)?!(Bb()|0):0){a=k[b>>2]|0;d=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;B=0;a=ya(k[(k[d>>2]|0)+24>>2]|0,d|0)|0;d=B;B=0;if(!(d&1)){if((a|0)!=-1)break;a=k[b>>2]|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,d|0,k[d+16>>2]|1|0);d=B;B=0;if(!(d&1))break}d=Rb(0)|0;Nb(d|0)|0;B=0;fb(4);d=B;B=0;if(d&1){d=Rb(0)|0;Dd(d)}}while(0);return}function uwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+12>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=Ya(u|0,j|0,d|0,x|0,y&255|0,b|0)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function vwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;p=k[j+4>>2]&74;q=xva(j)|0;k[g>>2]=q;B=0;q=Xa(238,g|0,48492)|0;j=B;B=0;if(j&1){j=Rb(0)|0;ZAa(g);s=j}else{ZAa(g);j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[j+24>>2]|0;u=j+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=xva(j)|0;k[d>>2]=w;B=0;w=Xa(238,d|0,49320)|0;x=B;B=0;if(!(x&1)?(B=0,x=Xa(k[(k[w>>2]|0)+28>>2]|0,w|0,32)|0,w=B,B=0,!(w&1)):0){ZAa(d);w=x<<24>>24;k[u>>2]=w;y=j;z=w;o=10;break}w=Rb(0)|0;ZAa(d);A=w}else{y=j;z=v;o=10}while(0);if((o|0)==10){v=k[(k[q>>2]|0)+16>>2]|0;k[e>>2]=t;B=0;k[d>>2]=k[e>>2];j=Ya(v|0,q|0,d|0,y|0,z&255|0,((p|0)==64|(p|0)==8?b&65535:b<<16>>16)|0)|0;v=B;B=0;if(!(v&1)){if(j)break;j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,j|0,k[j+16>>2]|5|0);j=B;B=0;if(!(j&1))break}j=Rb(0)|0;A=j}s=A}twa(f);l=s;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);s=B;B=0;if(s&1){s=Rb(0)|0;Dd(s)}else Qb(f|0)}while(0);r=c;return a|0}function wwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=Ya(u|0,j|0,d|0,x|0,y&255|0,b|0)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function xwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+24>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=Ya(u|0,j|0,d|0,x|0,y&255|0,b|0)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function ywa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+16>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=Ya(u|0,j|0,d|0,x|0,y&255|0,b|0)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function zwa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;h=d+8|0;B=0;wa(504,g|0,a|0);j=B;B=0;a:do if(j&1){l=Rb(0)|0;m=l;n=a;o=a;p=19}else{do if(i[g>>0]|0){l=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[h>>2]=l;B=0;l=Xa(238,h|0,48492)|0;q=B;B=0;if(q&1){q=Rb(0)|0;ZAa(h);s=q}else{ZAa(h);q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;t=k[q+24>>2]|0;u=q+76|0;v=k[u>>2]|0;do if((v|0)==-1){w=xva(q)|0;k[e>>2]=w;B=0;w=Xa(238,e|0,49320)|0;x=B;B=0;if(!(x&1)?(B=0,x=Xa(k[(k[w>>2]|0)+28>>2]|0,w|0,32)|0,w=B,B=0,!(w&1)):0){ZAa(e);w=x<<24>>24;k[u>>2]=w;y=q;z=w;p=10;break}w=Rb(0)|0;ZAa(e);A=w}else{y=q;z=v;p=10}while(0);if((p|0)==10){v=k[(k[l>>2]|0)+20>>2]|0;k[f>>2]=t;B=0;k[e>>2]=k[f>>2];q=xa(v|0,l|0,e|0,y|0,z&255|0,b|0,c|0)|0;v=B;B=0;if(!(v&1)){if(q)break;q=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,q|0,k[q+16>>2]|5|0);q=B;B=0;if(!(q&1))break}q=Rb(0)|0;A=q}s=A}twa(g);m=s;n=a;o=a;p=19;break a}while(0);twa(g)}while(0);do if((p|0)==19){Nb(m|0)|0;B=0;va(447,n+(k[(k[o>>2]|0)+-12>>2]|0)|0);g=B;B=0;if(!(g&1)){Pb();break}g=Rb()|0;B=0;fb(4);s=B;B=0;if(s&1){s=Rb(0)|0;Dd(s)}else Qb(g|0)}while(0);r=d;return a|0}function Awa(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+32>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=hb(u|0,j|0,d|0,x|0,y&255|0,+b)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function Bwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a;o=19}else{do if(i[f>>0]|0){j=xva(a+(k[(k[a>>2]|0)+-12>>2]|0)|0)|0;k[g>>2]=j;B=0;j=Xa(238,g|0,48492)|0;p=B;B=0;if(p&1){p=Rb(0)|0;ZAa(g);q=p}else{ZAa(g);p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;s=k[p+24>>2]|0;t=p+76|0;u=k[t>>2]|0;do if((u|0)==-1){v=xva(p)|0;k[d>>2]=v;B=0;v=Xa(238,d|0,49320)|0;w=B;B=0;if(!(w&1)?(B=0,w=Xa(k[(k[v>>2]|0)+28>>2]|0,v|0,32)|0,v=B,B=0,!(v&1)):0){ZAa(d);v=w<<24>>24;k[t>>2]=v;x=p;y=v;o=10;break}v=Rb(0)|0;ZAa(d);z=v}else{x=p;y=u;o=10}while(0);if((o|0)==10){u=k[(k[j>>2]|0)+40>>2]|0;k[e>>2]=s;B=0;k[d>>2]=k[e>>2];p=Ya(u|0,j|0,d|0,x|0,y&255|0,b|0)|0;u=B;B=0;if(!(u&1)){if(p)break;p=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,p|0,k[p+16>>2]|5|0);p=B;B=0;if(!(p&1))break}p=Rb(0)|0;z=p}q=z}twa(f);l=q;m=a;n=a;o=19;break a}while(0);twa(f)}while(0);do if((o|0)==19){Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);f=B;B=0;if(!(f&1)){Pb();break}f=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(f|0)}while(0);r=c;return a|0}function Cwa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;c=r;r=r+16|0;d=c;B=0;wa(504,d|0,a|0);e=B;B=0;a:do if(e&1){f=Rb(0)|0;g=f;h=a;j=a;l=11}else{do if(i[d>>0]|0){f=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;m=f;if(f){n=m+24|0;o=k[n>>2]|0;if((o|0)!=(k[m+28>>2]|0)){k[n>>2]=o+1;i[o>>0]=b;break}B=0;o=Xa(k[(k[f>>2]|0)+52>>2]|0,m|0,b&255|0)|0;m=B;B=0;if(!(m&1))if((o|0)==-1)l=8;else break}else l=8;if((l|0)==8?(o=a+(k[(k[a>>2]|0)+-12>>2]|0)|0,B=0,wa(505,o|0,k[o+16>>2]|1|0),o=B,B=0,!(o&1)):0)break;o=Rb(0)|0;twa(d);g=o;h=a;j=a;l=11;break a}while(0);twa(d)}while(0);do if((l|0)==11){Nb(g|0)|0;B=0;va(447,h+(k[(k[j>>2]|0)+-12>>2]|0)|0);d=B;B=0;if(!(d&1)){Pb();break}d=Rb()|0;B=0;fb(4);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}else Qb(d|0)}while(0);r=c;return a|0}function Dwa(a){a=a|0;uva(a+4|0);return}function Ewa(a){a=a|0;uva(a+(k[(k[a>>2]|0)+-12>>2]|0)+4|0);return}function Fwa(a){a=a|0;uva(a+4|0);Sqa(a);return}function Gwa(a){a=a|0;Fwa(a+(k[(k[a>>2]|0)+-12>>2]|0)|0);return}function Hwa(a,b){a=a|0;b=b|0;var c=0;i[a>>0]=0;k[a+4>>2]=b;c=b+(k[(k[b>>2]|0)+-12>>2]|0)|0;if(!(k[c+16>>2]|0)){b=k[c+72>>2]|0;if(b)mwa(b)|0;i[a>>0]=1}return}function Iwa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;a=k[b>>2]|0;c=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;do if((((k[c+24>>2]|0)!=0?(k[c+16>>2]|0)==0:0)?(k[c+4>>2]&8192|0)!=0:0)?!(Bb()|0):0){a=k[b>>2]|0;d=k[a+(k[(k[a>>2]|0)+-12>>2]|0)+24>>2]|0;B=0;a=ya(k[(k[d>>2]|0)+24>>2]|0,d|0)|0;d=B;B=0;if(!(d&1)){if((a|0)!=-1)break;a=k[b>>2]|0;d=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,d|0,k[d+16>>2]|1|0);d=B;B=0;if(!(d&1))break}d=Rb(0)|0;Nb(d|0)|0;B=0;fb(4);d=B;B=0;if(d&1){d=Rb(0)|0;Dd(d)}}while(0);return}function Jwa(a){a=a|0;return 157676}function Kwa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=1&(c|0)<257)IEa(a,b,c);else Wua(a,157685,35);return}function Lwa(){if((i[25616]|0)==0?(Gb(25616)|0)!=0:0){k[12053]=48184;ic(384,48212,w|0)|0;Eb(25616)}return 48212}function Mwa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d+8|0;f=d;g=c;c=k[g+4>>2]|0;h=f;k[h>>2]=k[g>>2];k[h+4>>2]=c;k[e>>2]=k[f>>2];k[e+4>>2]=k[f+4>>2];KEa(a,e,b);k[a>>2]=48148;r=d;return}function Nwa(a){a=a|0;LEa(a);return}function Owa(a){a=a|0;LEa(a);Sqa(a);return}function Pwa(a){a=a|0;uva(a);Sqa(a);return}function Qwa(a){a=a|0;Sqa(a);return}function Rwa(a){a=a|0;return}function Swa(a){a=a|0;return}function Twa(a){a=a|0;Sqa(a);return}function Uwa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;a=d;d=b;while(1){if((a|0)==(e|0)){f=d;g=7;break}if((d|0)==(c|0)){h=-1;break}b=i[d>>0]|0;j=i[a>>0]|0;if(b<<24>>24<j<<24>>24){h=-1;break}if(j<<24>>24<b<<24>>24){h=1;break}a=a+1|0;d=d+1|0}if((g|0)==7)h=(f|0)!=(c|0)&1;return h|0}function Vwa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;rva(a,c,d);return}function Wwa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=0;d=b;while(1){if((d|0)==(c|0)){e=a;break}b=(i[d>>0]|0)+(a<<4)|0;f=b&-268435456;a=(f>>>24|f)^b;d=d+1|0}return e|0}function Xwa(a){a=a|0;return}function Ywa(a){a=a|0;Sqa(a);return}function Zwa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=d;d=b;while(1){if((a|0)==(e|0)){f=d;g=7;break}if((d|0)==(c|0)){h=-1;break}b=k[d>>2]|0;i=k[a>>2]|0;if((b|0)<(i|0)){h=-1;break}if((i|0)<(b|0)){h=1;break}a=a+4|0;d=d+4|0}if((g|0)==7)h=(f|0)!=(c|0)&1;return h|0}function _wa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;sva(a,c,d);return}function $wa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=0;d=b;while(1){if((d|0)==(c|0)){e=a;break}b=(k[d>>2]|0)+(a<<4)|0;f=b&-268435456;a=(f>>>24|f)^b;d=d+4|0}return e|0}function axa(a){a=a|0;return}function bxa(a){a=a|0;Sqa(a);return}function cxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;g=r;r=r+64|0;h=g+48|0;j=g+24|0;l=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;a:do if(!(k[d+4>>2]&1)){k[l>>2]=-1;s=k[(k[a>>2]|0)+16>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[j>>2]=k[m>>2];k[h>>2]=k[n>>2];t=Gc[s&63](a,j,h,d,e,l)|0;k[b>>2]=t;switch(k[l>>2]|0){case 0:{i[f>>0]=0;break}case 1:{i[f>>0]=1;break}default:{i[f>>0]=1;k[e>>2]=4}}u=t}else{t=xva(d)|0;k[o>>2]=t;B=0;s=Xa(238,o|0,49320)|0;v=B;B=0;do if(!(v&1)){BEa(t)|0;w=xva(d)|0;k[p>>2]=w;B=0;x=Xa(238,p|0,49460)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;BEa(w)|0;A=y;C=z;break}BEa(w)|0;B=0;wa(k[(k[x>>2]|0)+24>>2]|0,j|0,x|0);w=B;B=0;if(!(w&1)){w=j+12|0;B=0;wa(k[(k[x>>2]|0)+28>>2]|0,w|0,x|0);x=B;B=0;if(!(x&1)){k[q>>2]=k[c>>2];B=0;k[h>>2]=k[q>>2];x=ra(8,b|0,h|0,j|0,j+24|0,s|0,e|0,1)|0;z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(j+12|0);Yua(j);A=z;C=y;break}else{i[f>>0]=(x|0)==(j|0)&1;x=k[b>>2]|0;Yua(j+12|0);Yua(j);u=x;break a}}else D=w}else D=j;w=Rb()|0;x=Q;if((j|0)==(D|0)){A=w;C=x}else{y=D;do{y=y+-12|0;Yua(y)}while((y|0)!=(j|0));A=w;C=x}}else{x=Rb()|0;w=Q;BEa(t)|0;A=x;C=w}while(0);Qb(A|0)}while(0);r=g;return u|0}function dxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=RCa(a,i,h,d,e,f)|0;r=g;return l|0}function exa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=SCa(a,i,h,d,e,f)|0;r=g;return l|0}function fxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=TCa(a,i,h,d,e,f)|0;r=g;return l|0}function gxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=UCa(a,i,h,d,e,f)|0;r=g;return l|0}function hxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=VCa(a,i,h,d,e,f)|0;r=g;return l|0}function ixa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=WCa(a,i,h,d,e,f)|0;r=g;return l|0}function jxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=XCa(a,i,h,d,e,f)|0;r=g;return l|0}function kxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=YCa(a,i,h,d,e,f)|0;r=g;return l|0}function lxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=ZCa(a,i,h,d,e,f)|0;r=g;return l|0}function mxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+240|0;g=a;h=a+208|0;j=a+196|0;m=a+192|0;n=a+180|0;o=a+176|0;p=a+16|0;q=a+8|0;s=a+4|0;t=0;while(1){if((t|0)==3)break;k[j+(t<<2)>>2]=0;t=t+1|0}B=0;t=ya(421,d|0)|0;d=B;B=0;do if(d&1){u=Rb()|0;v=u;w=Q}else{k[m>>2]=t;B=0;u=Xa(238,m|0,49320)|0;x=B;B=0;if(!(x&1)?(B=0,cb(k[(k[u>>2]|0)+32>>2]|0,u|0,157721,157747,h|0)|0,u=B,B=0,!(u&1)):0){BEa(t)|0;u=0;while(1){if((u|0)==3)break;k[n+(u<<2)>>2]=0;u=u+1|0}if(!(i[n>>0]&1))y=10;else y=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,y|0,0);u=B;B=0;a:do if(!(u&1)){x=n+8|0;z=n+1|0;A=(i[n>>0]&1)==0?z:k[x>>2]|0;k[o>>2]=A;k[q>>2]=p;k[s>>2]=0;C=n+4|0;D=k[b>>2]|0;E=A;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){B=0;A=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=B;B=0;if(F&1){G=35;break}if((A|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;A=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(A){I=F;break}else{J=F;K=H;L=E;break b}B=0;M=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;N=B;B=0;if(N&1){G=35;break b}if((M|0)!=-1)if(A){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=25;break}}else G=25;while(0);if((G|0)==25){G=0;if(A){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;M=(F&1)==0?(F&255)>>>1:k[C>>2]|0;if((k[o>>2]|0)==(E+M|0)){B=0;eb(501,n|0,M<<1|0,0);F=B;B=0;if(F&1){G=35;break}if(!(i[n>>0]&1))O=10;else O=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,O|0,0);F=B;B=0;if(F&1){G=35;break}F=(i[n>>0]&1)==0?z:k[x>>2]|0;k[o>>2]=F+M;P=F}else P=E;F=H+12|0;M=k[F>>2]|0;N=H+16|0;if((M|0)==(k[N>>2]|0)){B=0;R=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=B;B=0;if(S&1){G=35;break}else T=R}else T=l[M>>0]|0;if(nxa(T&255,16,P,o,s,0,j,p,q,h)|0){J=I;K=H;L=P;break}M=k[F>>2]|0;if((M|0)==(k[N>>2]|0)){B=0;ya(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;N=B;B=0;if(N&1){G=35;break}else{D=H;E=P;continue}}else{k[F>>2]=M+1;D=H;E=P;continue}}if((G|0)==35){E=Rb()|0;U=E;V=Q;break}B=0;eb(501,n|0,(k[o>>2]|0)-L|0,0);E=B;B=0;if((!(E&1)?(E=i[n>>0]|0,D=k[x>>2]|0,B=0,C=bb(3)|0,M=B,B=0,!(M&1)):0)?(B=0,k[g>>2]=f,M=cb(68,((E&1)==0?z:D)|0,C|0,159105,g|0)|0,C=B,B=0,!(C&1)):0){if((M|0)!=1)k[e>>2]=4;if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){B=0;M=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;C=B;B=0;if(C&1){G=36;break}if((M|0)==-1){k[b>>2]=0;W=0}else W=K}else W=K;else W=0;M=(W|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){B=0;C=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;D=B;B=0;if(D&1){G=36;break a}if((C|0)==-1){k[c>>2]=0;G=61;break}}if(!M)G=62}else G=61;while(0);if((G|0)==61?M:0)G=62;if((G|0)==62)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;Yua(n);Yua(j);r=a;return z|0}else G=36}else G=36;while(0);if((G|0)==36){u=Rb()|0;U=u;V=Q}Yua(n);v=U;w=V;break}u=Rb()|0;z=Q;BEa(t)|0;v=u;w=z}while(0);Yua(j);Qb(v|0);return 0}function nxa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=k[d>>2]|0;n=(m|0)==(c|0);do if(n){o=(i[l+24>>0]|0)==a<<24>>24;if(!o?(i[l+25>>0]|0)!=a<<24>>24:0){p=5;break}k[d>>2]=c+1;i[c>>0]=o?43:45;k[e>>2]=0;q=0}else p=5;while(0);a:do if((p|0)==5){o=i[g>>0]|0;if(a<<24>>24==f<<24>>24?(((o&1)==0?(o&255)>>>1:k[g+4>>2]|0)|0)!=0:0){o=k[j>>2]|0;if((o-h|0)>=160){q=0;break}r=k[e>>2]|0;k[j>>2]=o+4;k[o>>2]=r;k[e>>2]=0;q=0;break}r=l+26|0;o=l;while(1){if((o|0)==(r|0)){s=r;break}if((i[o>>0]|0)==a<<24>>24){s=o;break}o=o+1|0}o=s-l|0;if((o|0)>23)q=-1;else{switch(b|0){case 10:case 8:{if((o|0)>=(b|0)){q=-1;break a}break}case 16:{if((o|0)>=22){if(n){q=-1;break a}if((m-c|0)>=3){q=-1;break a}if((i[m+-1>>0]|0)!=48){q=-1;break a}k[e>>2]=0;r=i[157721+o>>0]|0;k[d>>2]=m+1;i[m>>0]=r;q=0;break a}break}default:{}}r=i[157721+o>>0]|0;k[d>>2]=m+1;i[m>>0]=r;k[e>>2]=(k[e>>2]|0)+1;q=0}}while(0);return q|0}function oxa(){var a=0,b=0;do if((i[26536]|0)==0?(Gb(26536)|0)!=0:0){B=0;a=Ia(52,2147483647,159108,0)|0;b=B;B=0;if(b&1){b=Rb()|0;sc(26536);Qb(b|0)}else{k[12471]=a;Eb(26536);break}}while(0);return k[12471]|0}function pxa(a){a=a|0;return}function qxa(a){a=a|0;Sqa(a);return}function rxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;g=r;r=r+64|0;h=g+48|0;j=g+24|0;l=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;a:do if(!(k[d+4>>2]&1)){k[l>>2]=-1;s=k[(k[a>>2]|0)+16>>2]|0;k[m>>2]=k[b>>2];k[n>>2]=k[c>>2];k[j>>2]=k[m>>2];k[h>>2]=k[n>>2];t=Gc[s&63](a,j,h,d,e,l)|0;k[b>>2]=t;switch(k[l>>2]|0){case 0:{i[f>>0]=0;break}case 1:{i[f>>0]=1;break}default:{i[f>>0]=1;k[e>>2]=4}}u=t}else{t=xva(d)|0;k[o>>2]=t;B=0;s=Xa(238,o|0,49312)|0;v=B;B=0;do if(!(v&1)){BEa(t)|0;w=xva(d)|0;k[p>>2]=w;B=0;x=Xa(238,p|0,49468)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;BEa(w)|0;A=y;C=z;break}BEa(w)|0;B=0;wa(k[(k[x>>2]|0)+24>>2]|0,j|0,x|0);w=B;B=0;if(!(w&1)){w=j+12|0;B=0;wa(k[(k[x>>2]|0)+28>>2]|0,w|0,x|0);x=B;B=0;if(!(x&1)){k[q>>2]=k[c>>2];B=0;k[h>>2]=k[q>>2];x=ra(9,b|0,h|0,j|0,j+24|0,s|0,e|0,1)|0;z=B;B=0;if(z&1){z=Rb()|0;y=Q;kva(j+12|0);kva(j);A=z;C=y;break}else{i[f>>0]=(x|0)==(j|0)&1;x=k[b>>2]|0;kva(j+12|0);kva(j);u=x;break a}}else D=w}else D=j;w=Rb()|0;x=Q;if((j|0)==(D|0)){A=w;C=x}else{y=D;do{y=y+-12|0;kva(y)}while((y|0)!=(j|0));A=w;C=x}}else{x=Rb()|0;w=Q;BEa(t)|0;A=x;C=w}while(0);Qb(A|0)}while(0);r=g;return u|0}function sxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=aDa(a,i,h,d,e,f)|0;r=g;return l|0}function txa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=bDa(a,i,h,d,e,f)|0;r=g;return l|0}function uxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=cDa(a,i,h,d,e,f)|0;r=g;return l|0}function vxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=dDa(a,i,h,d,e,f)|0;r=g;return l|0}function wxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=eDa(a,i,h,d,e,f)|0;r=g;return l|0}function xxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=fDa(a,i,h,d,e,f)|0;r=g;return l|0}function yxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=gDa(a,i,h,d,e,f)|0;r=g;return l|0}function zxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=hDa(a,i,h,d,e,f)|0;r=g;return l|0}function Axa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=iDa(a,i,h,d,e,f)|0;r=g;return l|0}function Bxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;a=r;r=r+320|0;g=a;h=a+208|0;j=a+196|0;l=a+192|0;m=a+180|0;n=a+176|0;o=a+16|0;p=a+8|0;q=a+4|0;s=0;while(1){if((s|0)==3)break;k[j+(s<<2)>>2]=0;s=s+1|0}B=0;s=ya(421,d|0)|0;d=B;B=0;do if(d&1){t=Rb()|0;u=t;v=Q}else{k[l>>2]=s;B=0;t=Xa(238,l|0,49312)|0;w=B;B=0;if(!(w&1)?(B=0,cb(k[(k[t>>2]|0)+48>>2]|0,t|0,157721,157747,h|0)|0,t=B,B=0,!(t&1)):0){BEa(s)|0;t=0;while(1){if((t|0)==3)break;k[m+(t<<2)>>2]=0;t=t+1|0}if(!(i[m>>0]&1))x=10;else x=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,x|0,0);t=B;B=0;a:do if(!(t&1)){w=m+8|0;y=m+1|0;z=(i[m>>0]&1)==0?y:k[w>>2]|0;k[n>>2]=z;k[p>>2]=o;k[q>>2]=0;A=m+4|0;C=k[b>>2]|0;D=z;b:while(1){if(C){z=k[C+12>>2]|0;if((z|0)==(k[C+16>>2]|0)){B=0;E=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=B;B=0;if(F&1){G=36;break}else H=E}else H=k[z>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}z=k[c>>2]|0;do if(z){E=k[z+12>>2]|0;if((E|0)==(k[z+16>>2]|0)){B=0;F=ya(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;K=B;B=0;if(K&1){G=36;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){M=z;break}else{N=z;O=I;P=D;break b}else{k[c>>2]=0;G=26;break}}else G=26;while(0);if((G|0)==26){G=0;if(J){N=0;O=I;P=D;break}else M=0}z=i[m>>0]|0;E=(z&1)==0?(z&255)>>>1:k[A>>2]|0;if((k[n>>2]|0)==(D+E|0)){B=0;eb(501,m|0,E<<1|0,0);z=B;B=0;if(z&1){G=36;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,R|0,0);z=B;B=0;if(z&1){G=36;break}z=(i[m>>0]&1)==0?y:k[w>>2]|0;k[n>>2]=z+E;S=z}else S=D;z=I+12|0;E=k[z>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){B=0;K=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=B;B=0;if(T&1){G=36;break}else U=K}else U=k[E>>2]|0;if(Cxa(U,16,S,n,q,0,j,o,p,h)|0){N=M;O=I;P=S;break}E=k[z>>2]|0;if((E|0)==(k[F>>2]|0)){B=0;ya(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=B;B=0;if(F&1){G=36;break}else{C=I;D=S;continue}}else{k[z>>2]=E+4;C=I;D=S;continue}}if((G|0)==36){D=Rb()|0;V=D;W=Q;break}B=0;eb(501,m|0,(k[n>>2]|0)-P|0,0);D=B;B=0;if((!(D&1)?(D=i[m>>0]|0,C=k[w>>2]|0,B=0,A=bb(3)|0,E=B,B=0,!(E&1)):0)?(B=0,k[g>>2]=f,E=cb(68,((D&1)==0?y:C)|0,A|0,159105,g|0)|0,A=B,B=0,!(A&1)):0){if((E|0)!=1)k[e>>2]=4;if(O){E=k[O+12>>2]|0;if((E|0)==(k[O+16>>2]|0)){B=0;A=ya(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;C=B;B=0;if(C&1){G=37;break}else X=A}else X=k[E>>2]|0;if((X|0)==-1){k[b>>2]=0;Y=1}else Y=0}else Y=1;do if(N){E=k[N+12>>2]|0;if((E|0)==(k[N+16>>2]|0)){B=0;A=ya(k[(k[N>>2]|0)+36>>2]|0,N|0)|0;C=B;B=0;if(C&1){G=37;break a}else Z=A}else Z=k[E>>2]|0;if((Z|0)!=-1)if(Y)break;else{G=65;break}else{k[c>>2]=0;G=63;break}}else G=63;while(0);if((G|0)==63?Y:0)G=65;if((G|0)==65)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;Yua(m);Yua(j);r=a;return y|0}else G=37}else G=37;while(0);if((G|0)==37){t=Rb()|0;V=t;W=Q}Yua(m);u=V;v=W;break}t=Rb()|0;y=Q;BEa(s)|0;u=t;v=y}while(0);Yua(j);Qb(u|0);return 0}function Cxa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=k[d>>2]|0;n=(m|0)==(c|0);do if(n){o=(k[l+96>>2]|0)==(a|0);if(!o?(k[l+100>>2]|0)!=(a|0):0){p=5;break}k[d>>2]=c+1;i[c>>0]=o?43:45;k[e>>2]=0;q=0}else p=5;while(0);a:do if((p|0)==5){o=i[g>>0]|0;if((a|0)==(f|0)?(((o&1)==0?(o&255)>>>1:k[g+4>>2]|0)|0)!=0:0){o=k[j>>2]|0;if((o-h|0)>=160){q=0;break}r=k[e>>2]|0;k[j>>2]=o+4;k[o>>2]=r;k[e>>2]=0;q=0;break}r=l+104|0;o=l;while(1){if((o|0)==(r|0)){s=r;break}if((k[o>>2]|0)==(a|0)){s=o;break}o=o+4|0}o=s-l|0;r=o>>2;if((o|0)>92)q=-1;else{switch(b|0){case 10:case 8:{if((r|0)>=(b|0)){q=-1;break a}break}case 16:{if((o|0)>=88){if(n){q=-1;break a}if((m-c|0)>=3){q=-1;break a}if((i[m+-1>>0]|0)!=48){q=-1;break a}k[e>>2]=0;o=i[157721+r>>0]|0;k[d>>2]=m+1;i[m>>0]=o;q=0;break a}break}default:{}}o=i[157721+r>>0]|0;k[d>>2]=m+1;i[m>>0]=o;k[e>>2]=(k[e>>2]|0)+1;q=0}}while(0);return q|0}function Dxa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=xva(b)|0;k[f>>2]=g;B=0;b=Xa(238,f|0,49320)|0;h=B;B=0;if((((!(h&1)?(B=0,cb(k[(k[b>>2]|0)+32>>2]|0,b|0,157721,157747,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(238,f|0,49460)|0,f=B,B=0,!(f&1)):0)?(B=0,f=ya(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,b=B,B=0,!(b&1)):0)?(i[d>>0]=f,B=0,wa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=B,B=0,!(c&1)):0){BEa(g)|0;r=e;return}e=Rb()|0;BEa(g)|0;Qb(e|0)}function Exa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=r;r=r+16|0;g=f;h=xva(b)|0;k[g>>2]=h;B=0;b=Xa(238,g|0,49320)|0;j=B;B=0;if(((((!(j&1)?(B=0,cb(k[(k[b>>2]|0)+32>>2]|0,b|0,157721,157753,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(238,g|0,49460)|0,g=B,B=0,!(g&1)):0)?(B=0,g=ya(k[(k[c>>2]|0)+12>>2]|0,c|0)|0,b=B,B=0,!(b&1)):0)?(i[d>>0]=g,B=0,g=ya(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,d=B,B=0,!(d&1)):0)?(i[e>>0]=g,B=0,wa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=B,B=0,!(c&1)):0){BEa(h)|0;r=f;return}f=Rb()|0;BEa(h)|0;Qb(f|0)}function Fxa(a,b,c,d,e,f,g,h,j,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0;a:do if(a<<24>>24==f<<24>>24)if(i[b>>0]|0){i[b>>0]=0;p=k[e>>2]|0;k[e>>2]=p+1;i[p>>0]=46;p=i[h>>0]|0;if((((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0?(p=k[m>>2]|0,(p-j|0)<160):0){q=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=q;r=0}else r=0}else r=-1;else{if(a<<24>>24==g<<24>>24?(q=i[h>>0]|0,(((q&1)==0?(q&255)>>>1:k[h+4>>2]|0)|0)!=0):0){if(!(i[b>>0]|0)){r=-1;break}q=k[m>>2]|0;if((q-j|0)>=160){r=0;break}p=k[n>>2]|0;k[m>>2]=q+4;k[q>>2]=p;k[n>>2]=0;r=0;break}p=o+32|0;q=o;while(1){if((q|0)==(p|0)){s=p;break}if((i[q>>0]|0)==a<<24>>24){s=q;break}q=q+1|0}q=s-o|0;if((q|0)>31)r=-1;else{p=i[157721+q>>0]|0;switch(q|0){case 24:case 25:{t=k[e>>2]|0;if((t|0)!=(d|0)?(l[t+-1>>0]&95|0)!=(l[c>>0]&127|0):0){r=-1;break a}k[e>>2]=t+1;i[t>>0]=p;r=0;break a;break}case 23:case 22:{i[c>>0]=80;t=k[e>>2]|0;k[e>>2]=t+1;i[t>>0]=p;r=0;break a;break}default:{t=p&95;if((((t|0)==(i[c>>0]|0)?(i[c>>0]=t|128,(i[b>>0]|0)!=0):0)?(i[b>>0]=0,t=i[h>>0]|0,(((t&1)==0?(t&255)>>>1:k[h+4>>2]|0)|0)!=0):0)?(t=k[m>>2]|0,(t-j|0)<160):0){u=k[n>>2]|0;k[m>>2]=t+4;k[t>>2]=u}u=k[e>>2]|0;k[e>>2]=u+1;i[u>>0]=p;if((q|0)>21){r=0;break a}k[n>>2]=(k[n>>2]|0)+1;r=0;break a}}}}while(0);return r|0}function Gxa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;g=xva(b)|0;k[f>>2]=g;B=0;b=Xa(238,f|0,49312)|0;h=B;B=0;if((((!(h&1)?(B=0,cb(k[(k[b>>2]|0)+48>>2]|0,b|0,157721,157747,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(238,f|0,49468)|0,f=B,B=0,!(f&1)):0)?(B=0,f=ya(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,b=B,B=0,!(b&1)):0)?(k[d>>2]=f,B=0,wa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=B,B=0,!(c&1)):0){BEa(g)|0;r=e;return}e=Rb()|0;BEa(g)|0;Qb(e|0)}function Hxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=r;r=r+16|0;g=f;h=xva(b)|0;k[g>>2]=h;B=0;b=Xa(238,g|0,49312)|0;i=B;B=0;if(((((!(i&1)?(B=0,cb(k[(k[b>>2]|0)+48>>2]|0,b|0,157721,157753,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(238,g|0,49468)|0,g=B,B=0,!(g&1)):0)?(B=0,g=ya(k[(k[c>>2]|0)+12>>2]|0,c|0)|0,b=B,B=0,!(b&1)):0)?(k[d>>2]=g,B=0,g=ya(k[(k[c>>2]|0)+16>>2]|0,c|0)|0,d=B,B=0,!(d&1)):0)?(k[e>>2]=g,B=0,wa(k[(k[c>>2]|0)+20>>2]|0,a|0,c|0),c=B,B=0,!(c&1)):0){BEa(h)|0;r=f;return}f=Rb()|0;BEa(h)|0;Qb(f|0)}function Ixa(a,b,c,d,e,f,g,h,j,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0;a:do if((a|0)==(f|0))if(i[b>>0]|0){i[b>>0]=0;p=k[e>>2]|0;k[e>>2]=p+1;i[p>>0]=46;p=i[h>>0]|0;if((((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0?(p=k[m>>2]|0,(p-j|0)<160):0){q=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=q;r=0}else r=0}else r=-1;else{if((a|0)==(g|0)?(q=i[h>>0]|0,(((q&1)==0?(q&255)>>>1:k[h+4>>2]|0)|0)!=0):0){if(!(i[b>>0]|0)){r=-1;break}q=k[m>>2]|0;if((q-j|0)>=160){r=0;break}p=k[n>>2]|0;k[m>>2]=q+4;k[q>>2]=p;k[n>>2]=0;r=0;break}p=o+128|0;q=o;while(1){if((q|0)==(p|0)){s=p;break}if((k[q>>2]|0)==(a|0)){s=q;break}q=q+4|0}q=s-o|0;p=q>>2;if((q|0)<=124){t=i[157721+p>>0]|0;switch(p|0){case 24:case 25:{p=k[e>>2]|0;if((p|0)!=(d|0)?(l[p+-1>>0]&95|0)!=(l[c>>0]&127|0):0){r=-1;break a}k[e>>2]=p+1;i[p>>0]=t;r=0;break a;break}case 23:case 22:{i[c>>0]=80;break}default:{p=t&95;if((((p|0)==(i[c>>0]|0)?(i[c>>0]=p|128,(i[b>>0]|0)!=0):0)?(i[b>>0]=0,p=i[h>>0]|0,(((p&1)==0?(p&255)>>>1:k[h+4>>2]|0)|0)!=0):0)?(p=k[m>>2]|0,(p-j|0)<160):0){u=k[n>>2]|0;k[m>>2]=p+4;k[p>>2]=u}}}u=k[e>>2]|0;k[e>>2]=u+1;i[u>>0]=t;if((q|0)>84)r=0;else{k[n>>2]=(k[n>>2]|0)+1;r=0}}else r=-1}while(0);return r|0}function Jxa(a){a=a|0;return}function Kxa(a){a=a|0;Sqa(a);return}function Lxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;f=r;r=r+32|0;g=f+8|0;h=f+4|0;j=f;a:do if(!(k[c+4>>2]&1)){l=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];m=fd[l&31](a,g,c,d,e&1)|0}else{l=xva(c)|0;k[j>>2]=l;B=0;n=Xa(238,j|0,49460)|0;o=B;B=0;do if(!(o&1)){BEa(l)|0;p=k[n>>2]|0;if(e)Fc[k[p+24>>2]&1023](g,n);else Fc[k[p+28>>2]&1023](g,n);p=i[g>>0]|0;q=g+1|0;s=g+8|0;t=k[s>>2]|0;u=g+4|0;v=p;w=t;x=(p&1)==0?q:t;b:while(1){t=(v&1)==0;if((x|0)==((t?q:w)+(t?(v&255)>>>1:k[u>>2]|0)|0)){y=9;break}t=i[x>>0]|0;p=k[b>>2]|0;do if(p){z=p+24|0;A=k[z>>2]|0;if((A|0)!=(k[p+28>>2]|0)){k[z>>2]=A+1;i[A>>0]=t;break}B=0;A=Xa(k[(k[p>>2]|0)+52>>2]|0,p|0,t&255|0)|0;z=B;B=0;if(z&1){y=18;break b}if((A|0)==-1)k[b>>2]=0}while(0);v=i[g>>0]|0;w=k[s>>2]|0;x=x+1|0}if((y|0)==9){x=k[b>>2]|0;Yua(g);m=x;break a}else if((y|0)==18){x=Rb()|0;s=Q;Yua(g);C=s;D=x;break}}else{x=Rb()|0;s=Q;BEa(l)|0;C=s;D=x}while(0);Qb(D|0)}while(0);r=f;return m|0}function Mxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+64|0;f=a;g=a+56|0;h=a+44|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[159110]|0;i[g+1>>0]=i[159111]|0;i[g+2>>0]=i[159112]|0;i[g+3>>0]=i[159113]|0;i[g+4>>0]=i[159114]|0;i[g+5>>0]=i[159115]|0;Nxa(g+1|0,159116,1,k[c+4>>2]|0);p=oxa()|0;k[f>>2]=e;e=h+(jDa(h,12,p,g,f)|0)|0;g=Oxa(h,e,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(33,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=Qd(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function Nxa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;if(!(d&2048))e=a;else{i[a>>0]=43;e=a+1|0}if(!(d&512)){f=b;g=e}else{i[e>>0]=35;f=b;g=e+1|0}while(1){e=i[f>>0]|0;if(!(e<<24>>24)){h=g;break}i[g>>0]=e;f=f+1|0;g=g+1|0}a:do switch(d&74|0){case 64:{i[h>>0]=111;break}case 8:{if(!(d&16384)){i[h>>0]=120;break a}else{i[h>>0]=88;break a}break}default:if(c){i[h>>0]=100;break a}else{i[h>>0]=117;break a}}while(0);return}function Oxa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a:do switch(k[c+4>>2]&176|0){case 16:{d=i[a>>0]|0;switch(d<<24>>24){case 43:case 45:{e=a+1|0;break a;break}default:{}}if((b-a|0)>1&d<<24>>24==48){switch(i[a+1>>0]|0){case 88:case 120:break;default:{f=7;break a}}e=a+2|0}else f=7;break}case 32:{e=b;break}default:f=7}while(0);if((f|0)==7)e=a;return e|0}function Pxa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;h=r;r=r+16|0;j=h;l=$Aa(g,49320)|0;m=$Aa(g,49460)|0;Fc[k[(k[m>>2]|0)+20>>2]&1023](j,m);g=i[j>>0]|0;n=j+4|0;a:do if(!(((g&1)==0?(g&255)>>>1:k[n>>2]|0)|0)){B=0;cb(k[(k[l>>2]|0)+32>>2]|0,l|0,a|0,c|0,d|0)|0;o=B;B=0;if(o&1)p=5;else{o=a;q=d+(c-o)|0;k[f>>2]=q;s=o;t=q;p=30}}else{k[f>>2]=d;q=i[a>>0]|0;switch(q<<24>>24){case 43:case 45:{B=0;o=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,q|0)|0;q=B;B=0;if(q&1){p=5;break a}q=k[f>>2]|0;k[f>>2]=q+1;i[q>>0]=o;u=a+1|0;break}default:u=a}b:do if((c-u|0)>1?(i[u>>0]|0)==48:0){o=u+1|0;switch(i[o>>0]|0){case 88:case 120:break;default:{v=u;break b}}B=0;q=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,48)|0;w=B;B=0;if(w&1){p=5;break a}w=k[f>>2]|0;k[f>>2]=w+1;i[w>>0]=q;B=0;q=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,i[o>>0]|0)|0;o=B;B=0;if(o&1){p=5;break a}o=k[f>>2]|0;k[f>>2]=o+1;i[o>>0]=q;v=u+2|0}else v=u;while(0);c:do if((v|0)!=(c|0)){q=c;o=v;while(1){w=q+-1|0;if(o>>>0>=w>>>0)break c;x=i[o>>0]|0;i[o>>0]=i[w>>0]|0;i[w>>0]=x;q=w;o=o+1|0}}while(0);B=0;o=ya(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;q=B;B=0;if(!(q&1)){q=j+8|0;w=j+1|0;x=0;y=0;z=v;while(1){if(z>>>0>=c>>>0)break;A=i[((i[j>>0]&1)==0?w:k[q>>2]|0)+y>>0]|0;if(A<<24>>24!=0&(x|0)==(A<<24>>24|0)){A=k[f>>2]|0;k[f>>2]=A+1;i[A>>0]=o;A=i[j>>0]|0;C=0;D=(y>>>0<(((A&1)==0?(A&255)>>>1:k[n>>2]|0)+-1|0)>>>0&1)+y|0}else{C=x;D=y}B=0;A=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,i[z>>0]|0)|0;E=B;B=0;if(E&1){p=4;break}E=k[f>>2]|0;k[f>>2]=E+1;i[E>>0]=A;x=C+1|0;y=D;z=z+1|0}if((p|0)==4){z=Rb()|0;F=z;G=Q;break}z=a;y=d+(v-z)|0;x=k[f>>2]|0;if((y|0)==(x|0)){s=z;t=y;p=30}else{o=x;x=y;while(1){y=o+-1|0;if(x>>>0>=y>>>0)break;q=i[x>>0]|0;i[x>>0]=i[y>>0]|0;i[y>>0]=q;o=y;x=x+1|0}s=z;t=k[f>>2]|0;p=30}}else p=5}while(0);if((p|0)==5){f=Rb()|0;F=f;G=Q}else if((p|0)==30){k[e>>2]=(b|0)==(c|0)?t:d+(b-s)|0;Yua(j);r=h;return}Yua(j);Qb(F|0)}function Qxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+96|0;g=a+8|0;h=a;i=a+74|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;Nxa(h+1|0,159118,1,k[c+4>>2]|0);p=oxa()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(jDa(i,22,p,h,g)|0)|0;h=Oxa(i,f,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(33,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=Qd(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function Rxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+64|0;f=a;g=a+56|0;h=a+44|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[159110]|0;i[g+1>>0]=i[159111]|0;i[g+2>>0]=i[159112]|0;i[g+3>>0]=i[159113]|0;i[g+4>>0]=i[159114]|0;i[g+5>>0]=i[159115]|0;Nxa(g+1|0,159116,0,k[c+4>>2]|0);p=oxa()|0;k[f>>2]=e;e=h+(jDa(h,12,p,g,f)|0)|0;g=Oxa(h,e,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(33,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=Qd(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function Sxa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+112|0;g=a+8|0;h=a;i=a+75|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;Nxa(h+1|0,159118,0,k[c+4>>2]|0);p=oxa()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(jDa(i,23,p,h,g)|0)|0;h=Oxa(i,f,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(33,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=Qd(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function Txa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+176|0;f=a+84|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+146|0;n=a+80|0;o=a+88|0;q=a+76|0;s=a+72|0;t=a+68|0;u=a+64|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=Uxa(l+1|0,159121,k[c+4>>2]|0)|0;k[n>>2]=m;w=oxa()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;x=jDa(m,30,w,l,j)|0}else{p[i>>3]=e;x=jDa(m,30,w,l,i)|0}do if((x|0)>29){B=0;i=bb(3)|0;w=B;B=0;j=w&1;if(v){if(!j?(B=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=cb(69,n|0,i|0,l|0,h|0)|0,y=B,B=0,!(y&1)):0){z=w;A=12}}else if(!j?(B=0,k[g>>2]=k[c+8>>2],p[g+8>>3]=e,j=cb(69,n|0,i|0,l|0,g|0)|0,i=B,B=0,!(i&1)):0){z=j;A=12}if((A|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=z;A=16;break}B=0;fb(7);j=B;B=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=z;A=16;break}}j=Rb()|0;F=j;G=Q}else{C=k[n>>2]|0;D=0;E=x;A=16}while(0);if((A|0)==16){x=C+E|0;z=Oxa(C,x,c)|0;do if((C|0)==(m|0)){H=m;I=o;J=0;A=22}else{g=lua(E<<1)|0;if(!g){B=0;fb(7);l=B;B=0;if(l&1){K=0;A=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;A=22}while(0);do if((A|0)==22){B=0;L=ya(421,c|0)|0;C=B;B=0;if(!(C&1)){k[t>>2]=L;B=0;Ta(34,H|0,z|0,x|0,I|0,q|0,s|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;n=Q;BEa(L)|0;M=C;N=n;O=J;break}BEa(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;B=0;k[f>>2]=k[u>>2];C=xa(39,f|0,I|0,L|0,n|0,c|0,d|0)|0;n=B;B=0;if(!(n&1)){k[b>>2]=C;if(J)mua(J);if(D)mua(D);r=a;return C|0}else{K=J;A=20}}else{K=J;A=20}}while(0);if((A|0)==20){A=Rb()|0;M=A;N=Q;O=K}if(O)mua(O);if(!D){F=M;G=N}else{mua(D);F=M;G=N}}Qb(F|0);return 0}function Uxa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;if(!(c&2048))d=a;else{i[a>>0]=43;d=a+1|0}if(!(c&1024))e=d;else{i[d>>0]=35;e=d+1|0}d=c&260;a=c>>>14;c=(d|0)==260;if(c){f=e;g=0}else{i[e>>0]=46;i[e+1>>0]=42;f=e+2|0;g=1}e=b;b=f;while(1){f=i[e>>0]|0;if(!(f<<24>>24)){h=b;break}i[b>>0]=f;e=e+1|0;b=b+1|0}a:do switch(d|0){case 4:{if(!(a&1)){i[h>>0]=102;break a}else{i[h>>0]=70;break a}break}case 256:{if(!(a&1)){i[h>>0]=101;break a}else{i[h>>0]=69;break a}break}default:{b=(a&1|0)!=0;if(c)if(b){i[h>>0]=65;break a}else{i[h>>0]=97;break a}else if(b){i[h>>0]=71;break a}else{i[h>>0]=103;break a}}}while(0);return g|0}function Vxa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;h=r;r=r+16|0;j=h;l=$Aa(g,49320)|0;m=$Aa(g,49460)|0;Fc[k[(k[m>>2]|0)+20>>2]&1023](j,m);k[f>>2]=d;g=i[a>>0]|0;switch(g<<24>>24){case 43:case 45:{B=0;n=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,g|0)|0;g=B;B=0;if(g&1)o=8;else{g=k[f>>2]|0;k[f>>2]=g+1;i[g>>0]=n;p=a+1|0;o=10}break}default:{p=a;o=10}}a:do if((o|0)==10){n=c;b:do if((n-p|0)>1?(i[p>>0]|0)==48:0){g=p+1|0;switch(i[g>>0]|0){case 88:case 120:break;default:{q=p;o=21;break b}}B=0;s=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,48)|0;t=B;B=0;if(t&1){o=8;break a}t=k[f>>2]|0;k[f>>2]=t+1;i[t>>0]=s;s=p+2|0;B=0;t=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,i[g>>0]|0)|0;g=B;B=0;if(g&1){o=8;break a}g=k[f>>2]|0;k[f>>2]=g+1;i[g>>0]=t;t=s;while(1){if(t>>>0>=c>>>0){u=s;v=t;break b}g=i[t>>0]|0;B=0;w=bb(3)|0;x=B;B=0;if(x&1)break;B=0;x=Xa(261,g<<24>>24|0,w|0)|0;w=B;B=0;if(w&1)break;if(!x){u=s;v=t;break b}t=t+1|0}t=Rb()|0;y=t;z=Q;break a}else{q=p;o=21}while(0);c:do if((o|0)==21){while(1){o=0;if(q>>>0>=c>>>0){u=p;v=q;break c}t=i[q>>0]|0;B=0;s=bb(3)|0;x=B;B=0;if(x&1)break;B=0;x=Xa(262,t<<24>>24|0,s|0)|0;s=B;B=0;if(s&1)break;if(!x){u=p;v=q;break c}q=q+1|0;o=21}x=Rb()|0;y=x;z=Q;break a}while(0);x=i[j>>0]|0;s=j+4|0;d:do if(((x&1)==0?(x&255)>>>1:k[s>>2]|0)|0){e:do if((u|0)!=(v|0)){t=v;w=u;while(1){g=t+-1|0;if(w>>>0>=g>>>0)break e;A=i[w>>0]|0;i[w>>0]=i[g>>0]|0;i[g>>0]=A;t=g;w=w+1|0}}while(0);B=0;w=ya(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;t=B;B=0;if(t&1){o=8;break a}t=j+8|0;g=j+1|0;A=0;C=0;D=u;while(1){if(D>>>0>=v>>>0)break;E=i[((i[j>>0]&1)==0?g:k[t>>2]|0)+C>>0]|0;if(E<<24>>24>0&(A|0)==(E<<24>>24|0)){E=k[f>>2]|0;k[f>>2]=E+1;i[E>>0]=w;E=i[j>>0]|0;F=0;G=(C>>>0<(((E&1)==0?(E&255)>>>1:k[s>>2]|0)+-1|0)>>>0&1)+C|0}else{F=A;G=C}B=0;E=Xa(k[(k[l>>2]|0)+28>>2]|0,l|0,i[D>>0]|0)|0;H=B;B=0;if(H&1){o=5;break}H=k[f>>2]|0;k[f>>2]=H+1;i[H>>0]=E;A=F+1|0;C=G;D=D+1|0}if((o|0)==5){D=Rb()|0;y=D;z=Q;break a}D=d+(u-a)|0;C=k[f>>2]|0;if((D|0)==(C|0))I=l;else{A=C;C=D;while(1){D=A+-1|0;if(C>>>0>=D>>>0){I=l;break d}w=i[C>>0]|0;i[C>>0]=i[D>>0]|0;i[D>>0]=w;A=D;C=C+1|0}}}else{B=0;cb(k[(k[l>>2]|0)+32>>2]|0,l|0,u|0,v|0,k[f>>2]|0)|0;C=B;B=0;if(C&1){o=8;break a}k[f>>2]=(k[f>>2]|0)+(v-u);I=l}while(0);s=v;while(1){if(s>>>0>=c>>>0){J=s;break}x=i[s>>0]|0;if(x<<24>>24==46){K=s;o=45;break}B=0;C=Xa(k[(k[I>>2]|0)+28>>2]|0,l|0,x|0)|0;x=B;B=0;if(x&1){o=4;break}x=k[f>>2]|0;k[f>>2]=x+1;i[x>>0]=C;s=s+1|0}if((o|0)==4){s=Rb()|0;y=s;z=Q;break}if((o|0)==45){B=0;s=ya(k[(k[m>>2]|0)+12>>2]|0,m|0)|0;C=B;B=0;if(C&1){o=8;break}C=k[f>>2]|0;k[f>>2]=C+1;i[C>>0]=s;J=K+1|0}B=0;cb(k[(k[l>>2]|0)+32>>2]|0,l|0,J|0,c|0,k[f>>2]|0)|0;s=B;B=0;if(s&1)o=8;else{s=(k[f>>2]|0)+(n-J)|0;k[f>>2]=s;k[e>>2]=(b|0)==(c|0)?s:d+(b-a)|0;Yua(j);r=h;return}}while(0);if((o|0)==8){o=Rb()|0;y=o;z=Q}Yua(j);Qb(y|0)}function Wxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+176|0;f=a+76|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+138|0;n=a+72|0;o=a+80|0;q=a+68|0;s=a+64|0;t=a+60|0;u=a+56|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=Uxa(l+1|0,159122,k[c+4>>2]|0)|0;k[n>>2]=m;w=oxa()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;x=jDa(m,30,w,l,j)|0}else{p[i>>3]=e;x=jDa(m,30,w,l,i)|0}do if((x|0)>29){B=0;i=bb(3)|0;w=B;B=0;j=w&1;if(v){if(!j?(B=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=cb(69,n|0,i|0,l|0,h|0)|0,y=B,B=0,!(y&1)):0){z=w;A=12}}else if(!j?(B=0,p[g>>3]=e,j=cb(69,n|0,i|0,l|0,g|0)|0,i=B,B=0,!(i&1)):0){z=j;A=12}if((A|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=z;A=16;break}B=0;fb(7);j=B;B=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=z;A=16;break}}j=Rb()|0;F=j;G=Q}else{C=k[n>>2]|0;D=0;E=x;A=16}while(0);if((A|0)==16){x=C+E|0;z=Oxa(C,x,c)|0;do if((C|0)==(m|0)){H=m;I=o;J=0;A=22}else{g=lua(E<<1)|0;if(!g){B=0;fb(7);l=B;B=0;if(l&1){K=0;A=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;A=22}while(0);do if((A|0)==22){B=0;L=ya(421,c|0)|0;C=B;B=0;if(!(C&1)){k[t>>2]=L;B=0;Ta(34,H|0,z|0,x|0,I|0,q|0,s|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;n=Q;BEa(L)|0;M=C;N=n;O=J;break}BEa(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;B=0;k[f>>2]=k[u>>2];C=xa(39,f|0,I|0,L|0,n|0,c|0,d|0)|0;n=B;B=0;if(!(n&1)){k[b>>2]=C;if(J)mua(J);if(D)mua(D);r=a;return C|0}else{K=J;A=20}}else{K=J;A=20}}while(0);if((A|0)==20){A=Rb()|0;M=A;N=Q;O=K}if(O)mua(O);if(!D){F=M;G=N}else{mua(D);F=M;G=N}}Qb(F|0);return 0}function Xxa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+80|0;f=a;g=a+72|0;h=a+52|0;j=a+12|0;l=a+8|0;m=a+4|0;i[g>>0]=i[159124]|0;i[g+1>>0]=i[159125]|0;i[g+2>>0]=i[159126]|0;i[g+3>>0]=i[159127]|0;i[g+4>>0]=i[159128]|0;i[g+5>>0]=i[159129]|0;n=oxa()|0;k[f>>2]=e;e=jDa(h,20,n,g,f)|0;g=h+e|0;n=Oxa(h,g,c)|0;o=xva(c)|0;k[l>>2]=o;B=0;p=Xa(238,l|0,49320)|0;l=B;B=0;if(l&1){l=Rb()|0;BEa(o)|0;Qb(l|0)}else{BEa(o)|0;ld[k[(k[p>>2]|0)+32>>2]&127](p,h,g,j)|0;p=j+e|0;k[m>>2]=k[b>>2];k[f>>2]=k[m>>2];m=Qd(f,j,(n|0)==(g|0)?p:j+(n-h)|0,p,c,d)|0;r=a;return m|0}return 0}function Yxa(a){a=a|0;return}function Zxa(a){a=a|0;Sqa(a);return}function _xa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+32|0;g=f+8|0;h=f+4|0;j=f;a:do if(!(k[c+4>>2]&1)){l=k[(k[a>>2]|0)+24>>2]|0;k[h>>2]=k[b>>2];k[g>>2]=k[h>>2];m=fd[l&31](a,g,c,d,e&1)|0}else{l=xva(c)|0;k[j>>2]=l;B=0;n=Xa(238,j|0,49468)|0;o=B;B=0;do if(!(o&1)){BEa(l)|0;p=k[n>>2]|0;if(e)Fc[k[p+24>>2]&1023](g,n);else Fc[k[p+28>>2]&1023](g,n);p=i[g>>0]|0;q=g+4|0;s=g+8|0;t=k[s>>2]|0;u=p;v=t;w=(p&1)==0?q:t;while(1){t=(u&1)==0;if((w|0)==((t?q:v)+((t?(u&255)>>>1:k[q>>2]|0)<<2)|0)){x=9;break}t=k[w>>2]|0;p=k[b>>2]|0;if(p){y=p+24|0;z=k[y>>2]|0;if((z|0)==(k[p+28>>2]|0)){B=0;A=Xa(k[(k[p>>2]|0)+52>>2]|0,p|0,t|0)|0;p=B;B=0;if(p&1){x=18;break}else C=A}else{k[y>>2]=z+4;k[z>>2]=t;C=t}if((C|0)==-1)k[b>>2]=0}u=i[g>>0]|0;v=k[s>>2]|0;w=w+4|0}if((x|0)==9){w=k[b>>2]|0;kva(g);m=w;break a}else if((x|0)==18){w=Rb()|0;s=Q;kva(g);D=s;E=w;break}}else{w=Rb()|0;s=Q;BEa(l)|0;D=s;E=w}while(0);Qb(E|0)}while(0);r=f;return m|0}function $xa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+128|0;f=a;g=a+116|0;h=a+104|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[159110]|0;i[g+1>>0]=i[159111]|0;i[g+2>>0]=i[159112]|0;i[g+3>>0]=i[159113]|0;i[g+4>>0]=i[159114]|0;i[g+5>>0]=i[159115]|0;Nxa(g+1|0,159116,1,k[c+4>>2]|0);p=oxa()|0;k[f>>2]=e;e=h+(jDa(h,12,p,g,f)|0)|0;g=Oxa(h,e,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(35,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=lDa(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function aya(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;h=r;r=r+16|0;j=h;l=$Aa(g,49312)|0;m=$Aa(g,49468)|0;Fc[k[(k[m>>2]|0)+20>>2]&1023](j,m);g=i[j>>0]|0;n=j+4|0;a:do if(!(((g&1)==0?(g&255)>>>1:k[n>>2]|0)|0)){B=0;cb(k[(k[l>>2]|0)+48>>2]|0,l|0,a|0,c|0,d|0)|0;o=B;B=0;if(o&1)p=5;else{o=a;q=d+(c-o<<2)|0;k[f>>2]=q;s=o;t=q;p=29}}else{k[f>>2]=d;q=i[a>>0]|0;switch(q<<24>>24){case 43:case 45:{B=0;o=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,q|0)|0;q=B;B=0;if(q&1){p=5;break a}q=k[f>>2]|0;k[f>>2]=q+4;k[q>>2]=o;u=a+1|0;break}default:u=a}b:do if((c-u|0)>1?(i[u>>0]|0)==48:0){o=u+1|0;switch(i[o>>0]|0){case 88:case 120:break;default:{v=u;break b}}B=0;q=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,48)|0;w=B;B=0;if(w&1){p=5;break a}w=k[f>>2]|0;k[f>>2]=w+4;k[w>>2]=q;B=0;q=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,i[o>>0]|0)|0;o=B;B=0;if(o&1){p=5;break a}o=k[f>>2]|0;k[f>>2]=o+4;k[o>>2]=q;v=u+2|0}else v=u;while(0);c:do if((v|0)!=(c|0)){q=c;o=v;while(1){w=q+-1|0;if(o>>>0>=w>>>0)break c;x=i[o>>0]|0;i[o>>0]=i[w>>0]|0;i[w>>0]=x;q=w;o=o+1|0}}while(0);B=0;o=ya(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;q=B;B=0;if(!(q&1)){q=j+8|0;w=j+1|0;x=0;y=0;z=v;while(1){if(z>>>0>=c>>>0)break;A=i[((i[j>>0]&1)==0?w:k[q>>2]|0)+y>>0]|0;if(A<<24>>24!=0&(x|0)==(A<<24>>24|0)){A=k[f>>2]|0;k[f>>2]=A+4;k[A>>2]=o;A=i[j>>0]|0;C=0;D=(y>>>0<(((A&1)==0?(A&255)>>>1:k[n>>2]|0)+-1|0)>>>0&1)+y|0}else{C=x;D=y}B=0;A=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,i[z>>0]|0)|0;E=B;B=0;if(E&1){p=4;break}E=k[f>>2]|0;k[f>>2]=E+4;k[E>>2]=A;x=C+1|0;y=D;z=z+1|0}if((p|0)==4){z=Rb()|0;F=z;G=Q;break}z=a;y=d+(v-z<<2)|0;x=k[f>>2]|0;if((y|0)==(x|0)){s=z;t=y;p=29}else{o=x;q=y;while(1){y=o+-4|0;if(q>>>0>=y>>>0){s=z;t=x;p=29;break a}w=k[q>>2]|0;k[q>>2]=k[y>>2];k[y>>2]=w;o=y;q=q+4|0}}}else p=5}while(0);if((p|0)==5){f=Rb()|0;F=f;G=Q}else if((p|0)==29){k[e>>2]=(b|0)==(c|0)?t:d+(b-s<<2)|0;Yua(j);r=h;return}Yua(j);Qb(F|0)}function bya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+224|0;g=a+8|0;h=a;i=a+196|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;Nxa(h+1|0,159118,1,k[c+4>>2]|0);p=oxa()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(jDa(i,22,p,h,g)|0)|0;h=Oxa(i,f,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(35,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=lDa(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function cya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+128|0;f=a;g=a+116|0;h=a+104|0;j=a+20|0;l=a+16|0;m=a+8|0;n=a+12|0;o=a+4|0;i[g>>0]=i[159110]|0;i[g+1>>0]=i[159111]|0;i[g+2>>0]=i[159112]|0;i[g+3>>0]=i[159113]|0;i[g+4>>0]=i[159114]|0;i[g+5>>0]=i[159115]|0;Nxa(g+1|0,159116,0,k[c+4>>2]|0);p=oxa()|0;k[f>>2]=e;e=h+(jDa(h,12,p,g,f)|0)|0;g=Oxa(h,e,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(35,h|0,g|0,e|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[f>>2]=k[o>>2];o=lDa(f,j,b,l,c,d)|0;r=a;return o|0}return 0}function dya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+240|0;g=a+8|0;h=a;i=a+204|0;j=a+32|0;l=a+28|0;m=a+20|0;n=a+24|0;o=a+16|0;p=h;k[p>>2]=37;k[p+4>>2]=0;Nxa(h+1|0,159118,0,k[c+4>>2]|0);p=oxa()|0;q=g;k[q>>2]=e;k[q+4>>2]=f;f=i+(jDa(i,23,p,h,g)|0)|0;h=Oxa(i,f,c)|0;p=xva(c)|0;k[n>>2]=p;B=0;Ta(35,i|0,h|0,f|0,j|0,l|0,m|0,n|0);n=B;B=0;if(n&1){n=Rb()|0;BEa(p)|0;Qb(n|0)}else{BEa(p)|0;k[o>>2]=k[b>>2];b=k[l>>2]|0;l=k[m>>2]|0;k[g>>2]=k[o>>2];o=lDa(g,j,b,l,c,d)|0;r=a;return o|0}return 0}function eya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+352|0;f=a+312|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+316|0;n=a+308|0;o=a+80|0;q=a+76|0;s=a+72|0;t=a+68|0;u=a+64|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=Uxa(l+1|0,159121,k[c+4>>2]|0)|0;k[n>>2]=m;w=oxa()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;x=jDa(m,30,w,l,j)|0}else{p[i>>3]=e;x=jDa(m,30,w,l,i)|0}do if((x|0)>29){B=0;i=bb(3)|0;w=B;B=0;j=w&1;if(v){if(!j?(B=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=cb(69,n|0,i|0,l|0,h|0)|0,y=B,B=0,!(y&1)):0){z=w;A=12}}else if(!j?(B=0,k[g>>2]=k[c+8>>2],p[g+8>>3]=e,j=cb(69,n|0,i|0,l|0,g|0)|0,i=B,B=0,!(i&1)):0){z=j;A=12}if((A|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=z;A=16;break}B=0;fb(7);j=B;B=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=z;A=16;break}}j=Rb()|0;F=j;G=Q}else{C=k[n>>2]|0;D=0;E=x;A=16}while(0);if((A|0)==16){x=C+E|0;z=Oxa(C,x,c)|0;do if((C|0)==(m|0)){H=m;I=o;J=0;A=22}else{g=lua(E<<3)|0;if(!g){B=0;fb(7);l=B;B=0;if(l&1){K=0;A=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;A=22}while(0);do if((A|0)==22){B=0;L=ya(421,c|0)|0;C=B;B=0;if(!(C&1)){k[t>>2]=L;B=0;Ta(36,H|0,z|0,x|0,I|0,q|0,s|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;n=Q;BEa(L)|0;M=C;N=n;O=J;break}BEa(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;B=0;k[f>>2]=k[u>>2];C=xa(40,f|0,I|0,L|0,n|0,c|0,d|0)|0;n=B;B=0;if(!(n&1)){k[b>>2]=C;if(J)mua(J);if(D)mua(D);r=a;return C|0}else{K=J;A=20}}else{K=J;A=20}}while(0);if((A|0)==20){A=Rb()|0;M=A;N=Q;O=K}if(O)mua(O);if(!D){F=M;G=N}else{mua(D);F=M;G=N}}Qb(F|0);return 0}function fya(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;h=r;r=r+16|0;j=h;l=$Aa(g,49312)|0;m=$Aa(g,49468)|0;Fc[k[(k[m>>2]|0)+20>>2]&1023](j,m);k[f>>2]=d;g=i[a>>0]|0;switch(g<<24>>24){case 43:case 45:{B=0;n=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,g|0)|0;g=B;B=0;if(g&1)o=8;else{g=k[f>>2]|0;k[f>>2]=g+4;k[g>>2]=n;p=a+1|0;o=10}break}default:{p=a;o=10}}a:do if((o|0)==10){n=c;b:do if((n-p|0)>1?(i[p>>0]|0)==48:0){g=p+1|0;switch(i[g>>0]|0){case 88:case 120:break;default:{q=p;o=21;break b}}B=0;s=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,48)|0;t=B;B=0;if(t&1){o=8;break a}t=k[f>>2]|0;k[f>>2]=t+4;k[t>>2]=s;s=p+2|0;B=0;t=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,i[g>>0]|0)|0;g=B;B=0;if(g&1){o=8;break a}g=k[f>>2]|0;k[f>>2]=g+4;k[g>>2]=t;t=s;while(1){if(t>>>0>=c>>>0){u=s;v=t;break b}g=i[t>>0]|0;B=0;w=bb(3)|0;x=B;B=0;if(x&1)break;B=0;x=Xa(261,g<<24>>24|0,w|0)|0;w=B;B=0;if(w&1)break;if(!x){u=s;v=t;break b}t=t+1|0}t=Rb()|0;y=t;z=Q;break a}else{q=p;o=21}while(0);c:do if((o|0)==21){while(1){o=0;if(q>>>0>=c>>>0){u=p;v=q;break c}t=i[q>>0]|0;B=0;s=bb(3)|0;x=B;B=0;if(x&1)break;B=0;x=Xa(262,t<<24>>24|0,s|0)|0;s=B;B=0;if(s&1)break;if(!x){u=p;v=q;break c}q=q+1|0;o=21}x=Rb()|0;y=x;z=Q;break a}while(0);x=i[j>>0]|0;s=j+4|0;d:do if(((x&1)==0?(x&255)>>>1:k[s>>2]|0)|0){e:do if((u|0)!=(v|0)){t=v;w=u;while(1){g=t+-1|0;if(w>>>0>=g>>>0)break e;A=i[w>>0]|0;i[w>>0]=i[g>>0]|0;i[g>>0]=A;t=g;w=w+1|0}}while(0);B=0;w=ya(k[(k[m>>2]|0)+16>>2]|0,m|0)|0;t=B;B=0;if(t&1){o=8;break a}t=j+8|0;g=j+1|0;A=0;C=0;D=u;while(1){if(D>>>0>=v>>>0)break;E=i[((i[j>>0]&1)==0?g:k[t>>2]|0)+C>>0]|0;if(E<<24>>24>0&(A|0)==(E<<24>>24|0)){E=k[f>>2]|0;k[f>>2]=E+4;k[E>>2]=w;E=i[j>>0]|0;F=0;G=(C>>>0<(((E&1)==0?(E&255)>>>1:k[s>>2]|0)+-1|0)>>>0&1)+C|0}else{F=A;G=C}B=0;E=Xa(k[(k[l>>2]|0)+44>>2]|0,l|0,i[D>>0]|0)|0;H=B;B=0;if(H&1){o=5;break}H=k[f>>2]|0;k[f>>2]=H+4;k[H>>2]=E;A=F+1|0;C=G;D=D+1|0}if((o|0)==5){D=Rb()|0;y=D;z=Q;break a}D=d+(u-a<<2)|0;C=k[f>>2]|0;if((D|0)==(C|0)){I=l;J=D}else{A=C;w=D;while(1){D=A+-4|0;if(w>>>0>=D>>>0){I=l;J=C;break d}t=k[w>>2]|0;k[w>>2]=k[D>>2];k[D>>2]=t;A=D;w=w+4|0}}}else{B=0;cb(k[(k[l>>2]|0)+48>>2]|0,l|0,u|0,v|0,k[f>>2]|0)|0;w=B;B=0;if(w&1){o=8;break a}w=(k[f>>2]|0)+(v-u<<2)|0;k[f>>2]=w;I=l;J=w}while(0);s=J;x=v;while(1){if(x>>>0>=c>>>0){K=s;L=x;break}w=i[x>>0]|0;if(w<<24>>24==46){M=x;o=45;break}B=0;A=Xa(k[(k[I>>2]|0)+44>>2]|0,l|0,w|0)|0;w=B;B=0;if(w&1){o=4;break}w=k[f>>2]|0;C=w+4|0;k[f>>2]=C;k[w>>2]=A;s=C;x=x+1|0}if((o|0)==4){x=Rb()|0;y=x;z=Q;break}if((o|0)==45){B=0;x=ya(k[(k[m>>2]|0)+12>>2]|0,m|0)|0;s=B;B=0;if(s&1){o=8;break}s=k[f>>2]|0;C=s+4|0;k[f>>2]=C;k[s>>2]=x;K=C;L=M+1|0}B=0;cb(k[(k[l>>2]|0)+48>>2]|0,l|0,L|0,c|0,K|0)|0;C=B;B=0;if(C&1)o=8;else{C=(k[f>>2]|0)+(n-L<<2)|0;k[f>>2]=C;k[e>>2]=(b|0)==(c|0)?C:d+(b-a<<2)|0;Yua(j);r=h;return}}while(0);if((o|0)==8){o=Rb()|0;y=o;z=Q}Yua(j);Qb(y|0)}function gya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+352|0;f=a+304|0;g=a+48|0;h=a+32|0;i=a+24|0;j=a+8|0;l=a;m=a+308|0;n=a+300|0;o=a+72|0;q=a+68|0;s=a+64|0;t=a+60|0;u=a+56|0;v=l;k[v>>2]=37;k[v+4>>2]=0;v=Uxa(l+1|0,159122,k[c+4>>2]|0)|0;k[n>>2]=m;w=oxa()|0;if(v){k[j>>2]=k[c+8>>2];p[j+8>>3]=e;x=jDa(m,30,w,l,j)|0}else{p[i>>3]=e;x=jDa(m,30,w,l,i)|0}do if((x|0)>29){B=0;i=bb(3)|0;w=B;B=0;j=w&1;if(v){if(!j?(B=0,k[h>>2]=k[c+8>>2],p[h+8>>3]=e,w=cb(69,n|0,i|0,l|0,h|0)|0,y=B,B=0,!(y&1)):0){z=w;A=12}}else if(!j?(B=0,p[g>>3]=e,j=cb(69,n|0,i|0,l|0,g|0)|0,i=B,B=0,!(i&1)):0){z=j;A=12}if((A|0)==12){j=k[n>>2]|0;if(j){C=j;D=j;E=z;A=16;break}B=0;fb(7);j=B;B=0;if(!(j&1)){j=k[n>>2]|0;C=j;D=j;E=z;A=16;break}}j=Rb()|0;F=j;G=Q}else{C=k[n>>2]|0;D=0;E=x;A=16}while(0);if((A|0)==16){x=C+E|0;z=Oxa(C,x,c)|0;do if((C|0)==(m|0)){H=m;I=o;J=0;A=22}else{g=lua(E<<3)|0;if(!g){B=0;fb(7);l=B;B=0;if(l&1){K=0;A=20;break}L=k[n>>2]|0}else L=C;H=L;I=g;J=g;A=22}while(0);do if((A|0)==22){B=0;L=ya(421,c|0)|0;C=B;B=0;if(!(C&1)){k[t>>2]=L;B=0;Ta(36,H|0,z|0,x|0,I|0,q|0,s|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;n=Q;BEa(L)|0;M=C;N=n;O=J;break}BEa(L)|0;k[u>>2]=k[b>>2];L=k[q>>2]|0;n=k[s>>2]|0;B=0;k[f>>2]=k[u>>2];C=xa(40,f|0,I|0,L|0,n|0,c|0,d|0)|0;n=B;B=0;if(!(n&1)){k[b>>2]=C;if(J)mua(J);if(D)mua(D);r=a;return C|0}else{K=J;A=20}}else{K=J;A=20}}while(0);if((A|0)==20){A=Rb()|0;M=A;N=Q;O=K}if(O)mua(O);if(!D){F=M;G=N}else{mua(D);F=M;G=N}}Qb(F|0);return 0}function hya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+192|0;f=a;g=a+180|0;h=a+160|0;j=a+8|0;l=a+156|0;m=a+4|0;i[g>>0]=i[159124]|0;i[g+1>>0]=i[159125]|0;i[g+2>>0]=i[159126]|0;i[g+3>>0]=i[159127]|0;i[g+4>>0]=i[159128]|0;i[g+5>>0]=i[159129]|0;n=oxa()|0;k[f>>2]=e;e=jDa(h,20,n,g,f)|0;g=h+e|0;n=Oxa(h,g,c)|0;o=xva(c)|0;k[l>>2]=o;B=0;p=Xa(238,l|0,49312)|0;l=B;B=0;if(l&1){l=Rb()|0;BEa(o)|0;Qb(l|0)}else{BEa(o)|0;ld[k[(k[p>>2]|0)+48>>2]&127](p,h,g,j)|0;p=j+(e<<2)|0;k[m>>2]=k[b>>2];k[f>>2]=k[m>>2];m=lDa(f,j,(n|0)==(g|0)?p:j+(n-h<<2)|0,p,c,d)|0;r=a;return m|0}return 0}function iya(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;m=r;r=r+32|0;n=m+16|0;o=m+12|0;p=m+8|0;q=m+4|0;s=m;t=xva(d)|0;k[p>>2]=t;B=0;u=Xa(238,p|0,49320)|0;p=B;B=0;if(p&1){p=Rb()|0;BEa(t)|0;Qb(p|0)}BEa(t)|0;k[e>>2]=0;t=u+8|0;p=g;g=0;a:while(1){v=(p|0)!=(h|0);w=g;while(1){x=k[b>>2]|0;if(!(v&(w|0)==0)){y=x;break a}z=x;if(x)if((k[x+12>>2]|0)==(k[x+16>>2]|0)?(Hc[k[(k[x>>2]|0)+36>>2]&511](x)|0)==-1:0){k[b>>2]=0;A=0;C=0}else{A=z;C=x}else{A=z;C=0}z=(C|0)==0;x=k[c>>2]|0;D=x;do if(x){if((k[x+12>>2]|0)==(k[x+16>>2]|0)?(Hc[k[(k[x>>2]|0)+36>>2]&511](x)|0)==-1:0){k[c>>2]=0;E=0;F=14;break}if(z){G=x;H=D}else{I=C;F=15;break a}}else{E=D;F=14}while(0);if((F|0)==14){F=0;if(z){I=C;F=15;break a}else{G=0;H=E}}if((Rc[k[(k[u>>2]|0)+36>>2]&63](u,i[p>>0]|0,0)|0)<<24>>24==37){J=A;K=C;L=H;F=18;break}D=i[p>>0]|0;if(D<<24>>24>-1?(x=k[t>>2]|0,(j[x+(D<<24>>24<<1)>>1]&8192)!=0):0){M=C;N=G;O=x;F=27;break}x=C+12|0;D=k[x>>2]|0;P=C+16|0;if((D|0)==(k[P>>2]|0))Q=Hc[k[(k[C>>2]|0)+36>>2]&511](C)|0;else Q=l[D>>0]|0;D=ed[k[(k[u>>2]|0)+12>>2]&511](u,Q&255)|0;if(D<<24>>24==(ed[k[(k[u>>2]|0)+12>>2]&511](u,i[p>>0]|0)|0)<<24>>24){R=C;S=x;T=P;F=55;break}k[e>>2]=4;w=4}b:do if((F|0)==18){F=0;w=p+1|0;if((w|0)==(h|0)){U=K;F=19;break a}v=Rc[k[(k[u>>2]|0)+36>>2]&63](u,i[w>>0]|0,0)|0;switch(v<<24>>24){case 48:case 69:{P=p+2|0;if((P|0)==(h|0)){V=K;F=24;break a}W=w;X=Rc[k[(k[u>>2]|0)+36>>2]&63](u,i[P>>0]|0,0)|0;Y=v;break}default:{W=p;X=v;Y=0}}v=k[(k[a>>2]|0)+36>>2]|0;k[q>>2]=J;k[s>>2]=L;k[o>>2]=k[q>>2];k[n>>2]=k[s>>2];P=pd[v&15](a,o,n,d,e,f,X,Y)|0;k[b>>2]=P;Z=W+2|0}else if((F|0)==27){F=0;P=p;while(1){v=P+1|0;if((v|0)==(h|0)){_=h;break}w=i[v>>0]|0;if(w<<24>>24<=-1){_=v;break}if(!(j[O+(w<<24>>24<<1)>>1]&8192)){_=v;break}else P=v}P=N;z=M;v=N;while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)?(Hc[k[(k[z>>2]|0)+36>>2]&511](z)|0)==-1:0){k[b>>2]=0;$=0}else $=z;else $=0;w=($|0)==0;do if(v){if((k[v+12>>2]|0)!=(k[v+16>>2]|0))if(w){aa=P;ba=v;break}else{Z=_;break b}if((Hc[k[(k[v>>2]|0)+36>>2]&511](v)|0)!=-1)if(w^(P|0)==0){aa=P;ba=P;break}else{Z=_;break b}else{k[c>>2]=0;ca=0;F=41;break}}else{ca=P;F=41}while(0);if((F|0)==41){F=0;if(w){Z=_;break b}else{aa=ca;ba=0}}x=$+12|0;D=k[x>>2]|0;da=$+16|0;if((D|0)==(k[da>>2]|0))ea=Hc[k[(k[$>>2]|0)+36>>2]&511]($)|0;else ea=l[D>>0]|0;if((ea&255)<<24>>24<=-1){Z=_;break b}if(!(j[(k[t>>2]|0)+(ea<<24>>24<<1)>>1]&8192)){Z=_;break b}D=k[x>>2]|0;if((D|0)==(k[da>>2]|0)){Hc[k[(k[$>>2]|0)+40>>2]&511]($)|0;P=aa;z=$;v=ba;continue}else{k[x>>2]=D+1;P=aa;z=$;v=ba;continue}}}else if((F|0)==55){F=0;v=k[S>>2]|0;if((v|0)==(k[T>>2]|0))Hc[k[(k[R>>2]|0)+40>>2]&511](R)|0;else k[S>>2]=v+1;Z=p+1|0}while(0);p=Z;g=k[e>>2]|0}if((F|0)==15){k[e>>2]=4;y=I}else if((F|0)==19){k[e>>2]=4;y=U}else if((F|0)==24){k[e>>2]=4;y=V}if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)?(Hc[k[(k[y>>2]|0)+36>>2]&511](y)|0)==-1:0){k[b>>2]=0;fa=0}else fa=y;else fa=0;y=(fa|0)==0;b=k[c>>2]|0;do if(b){if((k[b+12>>2]|0)==(k[b+16>>2]|0)?(Hc[k[(k[b>>2]|0)+36>>2]&511](b)|0)==-1:0){k[c>>2]=0;F=70;break}if(!y)F=71}else F=70;while(0);if((F|0)==70?y:0)F=71;if((F|0)==71)k[e>>2]=k[e>>2]|2;r=m;return fa|0}function jya(a){a=a|0;return}function kya(a){a=a|0;Sqa(a);return}function lya(a){a=a|0;return 2}function mya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=iya(a,i,h,d,e,f,159130,159138)|0;r=g;return l|0}function nya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g+12|0;j=g+8|0;l=g+4|0;m=g;n=a+8|0;o=Hc[k[(k[n>>2]|0)+20>>2]&511](n)|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];c=i[o>>0]|0;b=(c&1)==0;n=b?o+1|0:k[o+8>>2]|0;p=n+(b?(c&255)>>>1:k[o+4>>2]|0)|0;k[j>>2]=k[l>>2];k[h>>2]=k[m>>2];m=iya(a,j,h,d,e,f,n,p)|0;r=g;return m|0}function oya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49320)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];pya(a,f+24|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function pya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Hc[k[k[j>>2]>>2]&511](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(QCa(c,h,a,a+168|0,f,e,0)|0)-a|0;if((i|0)<168)k[b>>2]=((i|0)/12|0|0)%7|0;r=g;return}function qya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49320)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];rya(a,f+16|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function rya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Hc[k[(k[j>>2]|0)+4>>2]&511](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=(QCa(c,h,a,a+288|0,f,e,0)|0)-a|0;if((i|0)<288)k[b>>2]=((i|0)/12|0|0)%12|0;r=g;return}function sya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49320)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];tya(a,f+20|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function tya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,4)|0;if(!(k[e>>2]&4)){if((h|0)<69)i=h+2e3|0;else i=(h+-69|0)>>>0<31?h+1900|0:h;k[b>>2]=i+-1900}r=a;return}function uya(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;h=r;r=r+144|0;j=h+132|0;l=h+116|0;m=h+128|0;n=h+124|0;o=h+120|0;p=h+112|0;q=h+108|0;s=h+104|0;t=h+100|0;u=h+96|0;v=h+92|0;w=h+88|0;x=h+84|0;y=h+80|0;z=h+76|0;A=h+72|0;C=h+68|0;D=h+64|0;E=h+60|0;F=h+56|0;G=h+52|0;H=h+48|0;I=h+44|0;J=h+40|0;K=h+36|0;L=h+32|0;M=h+28|0;N=h+24|0;O=h+20|0;P=h+16|0;Q=h+12|0;R=h+8|0;S=h+4|0;T=h;k[e>>2]=0;U=xva(d)|0;k[m>>2]=U;B=0;V=Xa(238,m|0,49320)|0;m=B;B=0;if(m&1){m=Rb()|0;BEa(U)|0;Qb(m|0)}BEa(U)|0;do switch(g<<24>>24|0){case 65:case 97:{k[n>>2]=k[c>>2];k[j>>2]=k[n>>2];pya(a,f+24|0,b,j,e,V);W=28;break}case 104:case 66:case 98:{k[o>>2]=k[c>>2];k[j>>2]=k[o>>2];rya(a,f+16|0,b,j,e,V);W=28;break}case 99:{U=a+8|0;m=Hc[k[(k[U>>2]|0)+12>>2]&511](U)|0;k[p>>2]=k[b>>2];k[q>>2]=k[c>>2];U=i[m>>0]|0;X=(U&1)==0;Y=X?m+1|0:k[m+8>>2]|0;Z=Y+(X?(U&255)>>>1:k[m+4>>2]|0)|0;k[l>>2]=k[p>>2];k[j>>2]=k[q>>2];m=iya(a,l,j,d,e,f,Y,Z)|0;k[b>>2]=m;W=28;break}case 101:case 100:{k[s>>2]=k[c>>2];k[j>>2]=k[s>>2];vya(a,f+12|0,b,j,e,V);W=28;break}case 68:{k[t>>2]=k[b>>2];k[u>>2]=k[c>>2];k[l>>2]=k[t>>2];k[j>>2]=k[u>>2];m=iya(a,l,j,d,e,f,159138,159146)|0;k[b>>2]=m;W=28;break}case 70:{k[v>>2]=k[b>>2];k[w>>2]=k[c>>2];k[l>>2]=k[v>>2];k[j>>2]=k[w>>2];m=iya(a,l,j,d,e,f,159146,159154)|0;k[b>>2]=m;W=28;break}case 72:{k[x>>2]=k[c>>2];k[j>>2]=k[x>>2];wya(a,f+8|0,b,j,e,V);W=28;break}case 73:{k[y>>2]=k[c>>2];k[j>>2]=k[y>>2];xya(a,f+8|0,b,j,e,V);W=28;break}case 106:{k[z>>2]=k[c>>2];k[j>>2]=k[z>>2];yya(a,f+28|0,b,j,e,V);W=28;break}case 109:{k[A>>2]=k[c>>2];k[j>>2]=k[A>>2];zya(a,f+16|0,b,j,e,V);W=28;break}case 77:{k[C>>2]=k[c>>2];k[j>>2]=k[C>>2];Aya(a,f+4|0,b,j,e,V);W=28;break}case 116:case 110:{k[D>>2]=k[c>>2];k[j>>2]=k[D>>2];Bya(a,b,j,e,V);W=28;break}case 112:{k[E>>2]=k[c>>2];k[j>>2]=k[E>>2];Cya(a,f+8|0,b,j,e,V);W=28;break}case 114:{k[F>>2]=k[b>>2];k[G>>2]=k[c>>2];k[l>>2]=k[F>>2];k[j>>2]=k[G>>2];m=iya(a,l,j,d,e,f,159154,159165)|0;k[b>>2]=m;W=28;break}case 82:{k[H>>2]=k[b>>2];k[I>>2]=k[c>>2];k[l>>2]=k[H>>2];k[j>>2]=k[I>>2];m=iya(a,l,j,d,e,f,159165,159170)|0;k[b>>2]=m;W=28;break}case 83:{k[J>>2]=k[c>>2];k[j>>2]=k[J>>2];Dya(a,f,b,j,e,V);W=28;break}case 84:{k[K>>2]=k[b>>2];k[L>>2]=k[c>>2];k[l>>2]=k[K>>2];k[j>>2]=k[L>>2];m=iya(a,l,j,d,e,f,159170,159178)|0;k[b>>2]=m;W=28;break}case 119:{k[M>>2]=k[c>>2];k[j>>2]=k[M>>2];Eya(a,f+24|0,b,j,e,V);W=28;break}case 120:{m=k[(k[a>>2]|0)+20>>2]|0;k[N>>2]=k[b>>2];k[O>>2]=k[c>>2];k[l>>2]=k[N>>2];k[j>>2]=k[O>>2];_=Gc[m&63](a,l,j,d,e,f)|0;break}case 88:{m=a+8|0;Z=Hc[k[(k[m>>2]|0)+24>>2]&511](m)|0;k[P>>2]=k[b>>2];k[Q>>2]=k[c>>2];m=i[Z>>0]|0;Y=(m&1)==0;U=Y?Z+1|0:k[Z+8>>2]|0;X=U+(Y?(m&255)>>>1:k[Z+4>>2]|0)|0;k[l>>2]=k[P>>2];k[j>>2]=k[Q>>2];Z=iya(a,l,j,d,e,f,U,X)|0;k[b>>2]=Z;W=28;break}case 121:{k[R>>2]=k[c>>2];k[j>>2]=k[R>>2];tya(a,f+20|0,b,j,e,V);W=28;break}case 89:{k[S>>2]=k[c>>2];k[j>>2]=k[S>>2];Fya(a,f+20|0,b,j,e,V);W=28;break}case 37:{k[T>>2]=k[c>>2];k[j>>2]=k[T>>2];Gya(a,b,j,e,V);W=28;break}default:{k[e>>2]=k[e>>2]|4;W=28}}while(0);if((W|0)==28)_=k[b>>2]|0;r=h;return _|0}function vya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<31&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function wya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<24&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function xya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<12&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function yya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,3)|0;f=k[e>>2]|0;if((h|0)<366&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function zya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<13&(f&4|0)==0)k[b>>2]=h+-1;else k[e>>2]=f|4;r=a;return}function Aya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<60&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Bya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,m=0,n=0,o=0,p=0,q=0;a=e+8|0;a:while(1){e=k[b>>2]|0;do if(e)if((k[e+12>>2]|0)==(k[e+16>>2]|0))if((Hc[k[(k[e>>2]|0)+36>>2]&511](e)|0)==-1){k[b>>2]=0;f=0;break}else{f=k[b>>2]|0;break}else f=e;else f=0;while(0);e=(f|0)==0;g=k[c>>2]|0;do if(g){if((k[g+12>>2]|0)!=(k[g+16>>2]|0))if(e){h=g;break}else{i=g;break a}if((Hc[k[(k[g>>2]|0)+36>>2]&511](g)|0)!=-1)if(e){h=g;break}else{i=g;break a}else{k[c>>2]=0;m=12;break}}else m=12;while(0);if((m|0)==12){m=0;if(e){i=0;break}else h=0}g=k[b>>2]|0;n=k[g+12>>2]|0;if((n|0)==(k[g+16>>2]|0))o=Hc[k[(k[g>>2]|0)+36>>2]&511](g)|0;else o=l[n>>0]|0;if((o&255)<<24>>24<=-1){i=h;break}if(!(j[(k[a>>2]|0)+(o<<24>>24<<1)>>1]&8192)){i=h;break}n=k[b>>2]|0;g=n+12|0;p=k[g>>2]|0;if((p|0)==(k[n+16>>2]|0)){Hc[k[(k[n>>2]|0)+40>>2]&511](n)|0;continue}else{k[g>>2]=p+1;continue}}h=k[b>>2]|0;do if(h)if((k[h+12>>2]|0)==(k[h+16>>2]|0))if((Hc[k[(k[h>>2]|0)+36>>2]&511](h)|0)==-1){k[b>>2]=0;q=0;break}else{q=k[b>>2]|0;break}else q=h;else q=0;while(0);h=(q|0)==0;do if(i){if((k[i+12>>2]|0)==(k[i+16>>2]|0)?(Hc[k[(k[i>>2]|0)+36>>2]&511](i)|0)==-1:0){k[c>>2]=0;m=32;break}if(!h)m=33}else m=32;while(0);if((m|0)==32?h:0)m=33;if((m|0)==33)k[d>>2]=k[d>>2]|2;return}function Cya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0;g=r;r=r+16|0;h=g+4|0;j=g;l=a+8|0;a=Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0;l=i[a>>0]|0;if(!(l&1))m=(l&255)>>>1;else m=k[a+4>>2]|0;l=i[a+12>>0]|0;if(!(l&1))n=(l&255)>>>1;else n=k[a+16>>2]|0;do if((m|0)!=(0-n|0)){k[j>>2]=k[d>>2];k[h>>2]=k[j>>2];l=QCa(c,h,a,a+24|0,f,e,0)|0;o=k[b>>2]|0;if((l|0)==(a|0)&(o|0)==12){k[b>>2]=0;break}if((o|0)<12&(l-a|0)==12)k[b>>2]=o+12}else k[e>>2]=k[e>>2]|4;while(0);r=g;return}function Dya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<61&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Eya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,1)|0;f=k[e>>2]|0;if((h|0)<7&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Fya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=mDa(c,g,e,f,4)|0;if(!(k[e>>2]&4))k[b>>2]=h+-1900;r=a;return}function Gya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0;a=k[b>>2]|0;do if(a)if((k[a+12>>2]|0)==(k[a+16>>2]|0))if((Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0)==-1){k[b>>2]=0;f=0;break}else{f=k[b>>2]|0;break}else f=a;else f=0;while(0);a=(f|0)==0;f=k[c>>2]|0;do if(f){if((k[f+12>>2]|0)==(k[f+16>>2]|0)?(Hc[k[(k[f>>2]|0)+36>>2]&511](f)|0)==-1:0){k[c>>2]=0;g=11;break}if(a){h=f;g=13}else g=12}else g=11;while(0);if((g|0)==11)if(a)g=12;else{h=0;g=13}a:do if((g|0)==12)k[d>>2]=k[d>>2]|6;else if((g|0)==13){a=k[b>>2]|0;f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))i=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0;else i=l[f>>0]|0;if((Rc[k[(k[e>>2]|0)+36>>2]&63](e,i&255,0)|0)<<24>>24!=37){k[d>>2]=k[d>>2]|4;break}f=k[b>>2]|0;a=f+12|0;j=k[a>>2]|0;if((j|0)==(k[f+16>>2]|0)){Hc[k[(k[f>>2]|0)+40>>2]&511](f)|0;m=k[b>>2]|0;if(!m)n=0;else{o=m;g=21}}else{k[a>>2]=j+1;o=f;g=21}do if((g|0)==21)if((k[o+12>>2]|0)==(k[o+16>>2]|0))if((Hc[k[(k[o>>2]|0)+36>>2]&511](o)|0)==-1){k[b>>2]=0;n=0;break}else{n=k[b>>2]|0;break}else n=o;while(0);f=(n|0)==0;do if(h){if((k[h+12>>2]|0)==(k[h+16>>2]|0)?(Hc[k[(k[h>>2]|0)+36>>2]&511](h)|0)==-1:0){k[c>>2]=0;g=30;break}if(f)break a}else g=30;while(0);if((g|0)==30?!f:0)break;k[d>>2]=k[d>>2]|2}while(0);return}function Hya(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;i=r;r=r+32|0;j=i+16|0;l=i+12|0;m=i+8|0;n=i+4|0;o=i;p=xva(d)|0;k[m>>2]=p;B=0;q=Xa(238,m|0,49312)|0;m=B;B=0;if(m&1){m=Rb()|0;BEa(p)|0;Qb(m|0)}BEa(p)|0;k[e>>2]=0;p=g;g=0;a:while(1){m=(p|0)!=(h|0);s=g;while(1){t=k[b>>2]|0;if(!(m&(s|0)==0)){u=t;break a}v=t;if(t){w=k[t+12>>2]|0;if((w|0)==(k[t+16>>2]|0))x=Hc[k[(k[t>>2]|0)+36>>2]&511](t)|0;else x=k[w>>2]|0;if((x|0)==-1){k[b>>2]=0;y=0;z=0;A=1}else{y=t;z=v;A=0}}else{y=0;z=v;A=1}v=k[c>>2]|0;t=v;do if(v){w=k[v+12>>2]|0;if((w|0)==(k[v+16>>2]|0))C=Hc[k[(k[v>>2]|0)+36>>2]&511](v)|0;else C=k[w>>2]|0;if((C|0)!=-1)if(A){D=v;E=t;break}else{F=y;G=19;break a}else{k[c>>2]=0;H=0;G=17;break}}else{H=t;G=17}while(0);if((G|0)==17){G=0;if(A){F=y;G=19;break a}else{D=0;E=H}}if((Rc[k[(k[q>>2]|0)+52>>2]&63](q,k[p>>2]|0,0)|0)<<24>>24==37){I=z;J=y;K=E;G=22;break}if(Rc[k[(k[q>>2]|0)+12>>2]&63](q,8192,k[p>>2]|0)|0){L=y;M=D;G=30;break}t=y+12|0;v=k[t>>2]|0;w=y+16|0;if((v|0)==(k[w>>2]|0))N=Hc[k[(k[y>>2]|0)+36>>2]&511](y)|0;else N=k[v>>2]|0;v=ed[k[(k[q>>2]|0)+28>>2]&511](q,N)|0;if((v|0)==(ed[k[(k[q>>2]|0)+28>>2]&511](q,k[p>>2]|0)|0)){O=y;P=t;Q=w;G=59;break}k[e>>2]=4;s=4}b:do if((G|0)==22){G=0;s=p+4|0;if((s|0)==(h|0)){R=J;G=23;break a}m=Rc[k[(k[q>>2]|0)+52>>2]&63](q,k[s>>2]|0,0)|0;switch(m<<24>>24){case 48:case 69:{w=p+8|0;if((w|0)==(h|0)){S=J;G=28;break a}T=s;U=Rc[k[(k[q>>2]|0)+52>>2]&63](q,k[w>>2]|0,0)|0;V=m;break}default:{T=p;U=m;V=0}}m=k[(k[a>>2]|0)+36>>2]|0;k[n>>2]=I;k[o>>2]=K;k[l>>2]=k[n>>2];k[j>>2]=k[o>>2];w=pd[m&15](a,l,j,d,e,f,U,V)|0;k[b>>2]=w;W=T+8|0}else if((G|0)==30){G=0;w=p;while(1){m=w+4|0;if((m|0)==(h|0)){X=h;break}if(Rc[k[(k[q>>2]|0)+12>>2]&63](q,8192,k[m>>2]|0)|0)w=m;else{X=m;break}}w=M;m=L;s=M;while(1){if(m){t=k[m+12>>2]|0;if((t|0)==(k[m+16>>2]|0))Y=Hc[k[(k[m>>2]|0)+36>>2]&511](m)|0;else Y=k[t>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1;_=0}else{Z=0;_=m}}else{Z=1;_=0}do if(s){t=k[s+12>>2]|0;if((t|0)==(k[s+16>>2]|0))$=Hc[k[(k[s>>2]|0)+36>>2]&511](s)|0;else $=k[t>>2]|0;if(($|0)!=-1)if(Z^(w|0)==0){aa=w;ba=w;break}else{W=X;break b}else{k[c>>2]=0;ca=0;G=46;break}}else{ca=w;G=46}while(0);if((G|0)==46){G=0;if(Z){W=X;break b}else{aa=ca;ba=0}}t=_+12|0;v=k[t>>2]|0;da=_+16|0;if((v|0)==(k[da>>2]|0))ea=Hc[k[(k[_>>2]|0)+36>>2]&511](_)|0;else ea=k[v>>2]|0;if(!(Rc[k[(k[q>>2]|0)+12>>2]&63](q,8192,ea)|0)){W=X;break b}v=k[t>>2]|0;if((v|0)==(k[da>>2]|0)){Hc[k[(k[_>>2]|0)+40>>2]&511](_)|0;w=aa;m=_;s=ba;continue}else{k[t>>2]=v+4;w=aa;m=_;s=ba;continue}}}else if((G|0)==59){G=0;s=k[P>>2]|0;if((s|0)==(k[Q>>2]|0))Hc[k[(k[O>>2]|0)+40>>2]&511](O)|0;else k[P>>2]=s+4;W=p+4|0}while(0);p=W;g=k[e>>2]|0}if((G|0)==19){k[e>>2]=4;u=F}else if((G|0)==23){k[e>>2]=4;u=R}else if((G|0)==28){k[e>>2]=4;u=S}if(u){S=k[u+12>>2]|0;if((S|0)==(k[u+16>>2]|0))fa=Hc[k[(k[u>>2]|0)+36>>2]&511](u)|0;else fa=k[S>>2]|0;if((fa|0)==-1){k[b>>2]=0;ga=0;ha=1}else{ga=u;ha=0}}else{ga=0;ha=1}u=k[c>>2]|0;do if(u){b=k[u+12>>2]|0;if((b|0)==(k[u+16>>2]|0))ia=Hc[k[(k[u>>2]|0)+36>>2]&511](u)|0;else ia=k[b>>2]|0;if((ia|0)!=-1)if(ha)break;else{G=79;break}else{k[c>>2]=0;G=77;break}}else G=77;while(0);if((G|0)==77?ha:0)G=79;if((G|0)==79)k[e>>2]=k[e>>2]|2;r=i;return ga|0}function Iya(a){a=a|0;return}function Jya(a){a=a|0;Sqa(a);return}function Kya(a){a=a|0;return 2}function Lya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+12|0;i=g+8|0;j=g+4|0;l=g;k[j>>2]=k[b>>2];k[l>>2]=k[c>>2];k[i>>2]=k[j>>2];k[h>>2]=k[l>>2];l=Hya(a,i,h,d,e,f,49888,49920)|0;r=g;return l|0}function Mya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g+12|0;j=g+8|0;l=g+4|0;m=g;n=a+8|0;o=Hc[k[(k[n>>2]|0)+20>>2]&511](n)|0;k[l>>2]=k[b>>2];k[m>>2]=k[c>>2];c=i[o>>0]|0;b=(c&1)==0;n=o+4|0;p=b?n:k[o+8>>2]|0;o=p+((b?(c&255)>>>1:k[n>>2]|0)<<2)|0;k[j>>2]=k[l>>2];k[h>>2]=k[m>>2];m=Hya(a,j,h,d,e,f,p,o)|0;r=g;return m|0}function Nya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49312)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Oya(a,f+24|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Oya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Hc[k[k[j>>2]>>2]&511](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=($Ca(c,h,a,a+168|0,f,e,0)|0)-a|0;if((i|0)<168)k[b>>2]=((i|0)/12|0|0)%7|0;r=g;return}function Pya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49312)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Qya(a,f+16|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Qya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=r;r=r+16|0;h=g+4|0;i=g;j=a+8|0;a=Hc[k[(k[j>>2]|0)+4>>2]&511](j)|0;k[i>>2]=k[d>>2];k[h>>2]=k[i>>2];i=($Ca(c,h,a,a+288|0,f,e,0)|0)-a|0;if((i|0)<288)k[b>>2]=((i|0)/12|0|0)%12|0;r=g;return}function Rya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+16|0;h=g+8|0;i=g+4|0;j=g;l=xva(d)|0;k[i>>2]=l;B=0;d=Xa(238,i|0,49312)|0;i=B;B=0;if(i&1){i=Rb()|0;BEa(l)|0;Qb(i|0)}else{BEa(l)|0;k[j>>2]=k[c>>2];k[h>>2]=k[j>>2];Sya(a,f+20|0,b,h,e,d);r=g;return k[b>>2]|0}return 0}function Sya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,4)|0;if(!(k[e>>2]&4)){if((h|0)<69)i=h+2e3|0;else i=(h+-69|0)>>>0<31?h+1900|0:h;k[b>>2]=i+-1900}r=a;return}function Tya(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;h=r;r=r+144|0;j=h+132|0;l=h+116|0;m=h+128|0;n=h+124|0;o=h+120|0;p=h+112|0;q=h+108|0;s=h+104|0;t=h+100|0;u=h+96|0;v=h+92|0;w=h+88|0;x=h+84|0;y=h+80|0;z=h+76|0;A=h+72|0;C=h+68|0;D=h+64|0;E=h+60|0;F=h+56|0;G=h+52|0;H=h+48|0;I=h+44|0;J=h+40|0;K=h+36|0;L=h+32|0;M=h+28|0;N=h+24|0;O=h+20|0;P=h+16|0;Q=h+12|0;R=h+8|0;S=h+4|0;T=h;k[e>>2]=0;U=xva(d)|0;k[m>>2]=U;B=0;V=Xa(238,m|0,49312)|0;m=B;B=0;if(m&1){m=Rb()|0;BEa(U)|0;Qb(m|0)}BEa(U)|0;do switch(g<<24>>24|0){case 65:case 97:{k[n>>2]=k[c>>2];k[j>>2]=k[n>>2];Oya(a,f+24|0,b,j,e,V);W=28;break}case 104:case 66:case 98:{k[o>>2]=k[c>>2];k[j>>2]=k[o>>2];Qya(a,f+16|0,b,j,e,V);W=28;break}case 99:{U=a+8|0;m=Hc[k[(k[U>>2]|0)+12>>2]&511](U)|0;k[p>>2]=k[b>>2];k[q>>2]=k[c>>2];U=i[m>>0]|0;X=(U&1)==0;Y=m+4|0;Z=X?Y:k[m+8>>2]|0;m=Z+((X?(U&255)>>>1:k[Y>>2]|0)<<2)|0;k[l>>2]=k[p>>2];k[j>>2]=k[q>>2];Y=Hya(a,l,j,d,e,f,Z,m)|0;k[b>>2]=Y;W=28;break}case 101:case 100:{k[s>>2]=k[c>>2];k[j>>2]=k[s>>2];Uya(a,f+12|0,b,j,e,V);W=28;break}case 68:{k[t>>2]=k[b>>2];k[u>>2]=k[c>>2];k[l>>2]=k[t>>2];k[j>>2]=k[u>>2];Y=Hya(a,l,j,d,e,f,49920,49952)|0;k[b>>2]=Y;W=28;break}case 70:{k[v>>2]=k[b>>2];k[w>>2]=k[c>>2];k[l>>2]=k[v>>2];k[j>>2]=k[w>>2];Y=Hya(a,l,j,d,e,f,49952,49984)|0;k[b>>2]=Y;W=28;break}case 72:{k[x>>2]=k[c>>2];k[j>>2]=k[x>>2];Vya(a,f+8|0,b,j,e,V);W=28;break}case 73:{k[y>>2]=k[c>>2];k[j>>2]=k[y>>2];Wya(a,f+8|0,b,j,e,V);W=28;break}case 106:{k[z>>2]=k[c>>2];k[j>>2]=k[z>>2];Xya(a,f+28|0,b,j,e,V);W=28;break}case 109:{k[A>>2]=k[c>>2];k[j>>2]=k[A>>2];Yya(a,f+16|0,b,j,e,V);W=28;break}case 77:{k[C>>2]=k[c>>2];k[j>>2]=k[C>>2];Zya(a,f+4|0,b,j,e,V);W=28;break}case 116:case 110:{k[D>>2]=k[c>>2];k[j>>2]=k[D>>2];_ya(a,b,j,e,V);W=28;break}case 112:{k[E>>2]=k[c>>2];k[j>>2]=k[E>>2];$ya(a,f+8|0,b,j,e,V);W=28;break}case 114:{k[F>>2]=k[b>>2];k[G>>2]=k[c>>2];k[l>>2]=k[F>>2];k[j>>2]=k[G>>2];Y=Hya(a,l,j,d,e,f,49984,50028)|0;k[b>>2]=Y;W=28;break}case 82:{k[H>>2]=k[b>>2];k[I>>2]=k[c>>2];k[l>>2]=k[H>>2];k[j>>2]=k[I>>2];Y=Hya(a,l,j,d,e,f,50028,50048)|0;k[b>>2]=Y;W=28;break}case 83:{k[J>>2]=k[c>>2];k[j>>2]=k[J>>2];aza(a,f,b,j,e,V);W=28;break}case 84:{k[K>>2]=k[b>>2];k[L>>2]=k[c>>2];k[l>>2]=k[K>>2];k[j>>2]=k[L>>2];Y=Hya(a,l,j,d,e,f,50048,50080)|0;k[b>>2]=Y;W=28;break}case 119:{k[M>>2]=k[c>>2];k[j>>2]=k[M>>2];bza(a,f+24|0,b,j,e,V);W=28;break}case 120:{Y=k[(k[a>>2]|0)+20>>2]|0;k[N>>2]=k[b>>2];k[O>>2]=k[c>>2];k[l>>2]=k[N>>2];k[j>>2]=k[O>>2];_=Gc[Y&63](a,l,j,d,e,f)|0;break}case 88:{Y=a+8|0;m=Hc[k[(k[Y>>2]|0)+24>>2]&511](Y)|0;k[P>>2]=k[b>>2];k[Q>>2]=k[c>>2];Y=i[m>>0]|0;Z=(Y&1)==0;U=m+4|0;X=Z?U:k[m+8>>2]|0;m=X+((Z?(Y&255)>>>1:k[U>>2]|0)<<2)|0;k[l>>2]=k[P>>2];k[j>>2]=k[Q>>2];U=Hya(a,l,j,d,e,f,X,m)|0;k[b>>2]=U;W=28;break}case 121:{k[R>>2]=k[c>>2];k[j>>2]=k[R>>2];Sya(a,f+20|0,b,j,e,V);W=28;break}case 89:{k[S>>2]=k[c>>2];k[j>>2]=k[S>>2];cza(a,f+20|0,b,j,e,V);W=28;break}case 37:{k[T>>2]=k[c>>2];k[j>>2]=k[T>>2];dza(a,b,j,e,V);W=28;break}default:{k[e>>2]=k[e>>2]|4;W=28}}while(0);if((W|0)==28)_=k[b>>2]|0;r=h;return _|0}function Uya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<31&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Vya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<24&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Wya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h+-1|0)>>>0<12&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Xya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,3)|0;f=k[e>>2]|0;if((h|0)<366&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function Yya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<13&(f&4|0)==0)k[b>>2]=h+-1;else k[e>>2]=f|4;r=a;return}function Zya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<60&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function _ya(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:while(1){a=k[b>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))g=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0;else g=k[f>>2]|0;if((g|0)==-1){k[b>>2]=0;h=1;break}else{h=(k[b>>2]|0)==0;break}}else h=1;while(0);a=k[c>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))i=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0;else i=k[f>>2]|0;if((i|0)!=-1)if(h){j=a;break}else{l=a;break a}else{k[c>>2]=0;m=15;break}}else m=15;while(0);if((m|0)==15){m=0;if(h){l=0;break}else j=0}a=k[b>>2]|0;f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))n=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0;else n=k[f>>2]|0;if(!(Rc[k[(k[e>>2]|0)+12>>2]&63](e,8192,n)|0)){l=j;break}f=k[b>>2]|0;a=f+12|0;o=k[a>>2]|0;if((o|0)==(k[f+16>>2]|0)){Hc[k[(k[f>>2]|0)+40>>2]&511](f)|0;continue}else{k[a>>2]=o+4;continue}}j=k[b>>2]|0;do if(j){n=k[j+12>>2]|0;if((n|0)==(k[j+16>>2]|0))p=Hc[k[(k[j>>2]|0)+36>>2]&511](j)|0;else p=k[n>>2]|0;if((p|0)==-1){k[b>>2]=0;q=1;break}else{q=(k[b>>2]|0)==0;break}}else q=1;while(0);do if(l){b=k[l+12>>2]|0;if((b|0)==(k[l+16>>2]|0))r=Hc[k[(k[l>>2]|0)+36>>2]&511](l)|0;else r=k[b>>2]|0;if((r|0)!=-1)if(q)break;else{m=39;break}else{k[c>>2]=0;m=37;break}}else m=37;while(0);if((m|0)==37?q:0)m=39;if((m|0)==39)k[d>>2]=k[d>>2]|2;return}function $ya(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0;g=r;r=r+16|0;h=g+4|0;j=g;l=a+8|0;a=Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0;l=i[a>>0]|0;if(!(l&1))m=(l&255)>>>1;else m=k[a+4>>2]|0;l=i[a+12>>0]|0;if(!(l&1))n=(l&255)>>>1;else n=k[a+16>>2]|0;do if((m|0)!=(0-n|0)){k[j>>2]=k[d>>2];k[h>>2]=k[j>>2];l=$Ca(c,h,a,a+24|0,f,e,0)|0;o=k[b>>2]|0;if((l|0)==(a|0)&(o|0)==12){k[b>>2]=0;break}if((o|0)<12&(l-a|0)==12)k[b>>2]=o+12}else k[e>>2]=k[e>>2]|4;while(0);r=g;return}function aza(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,2)|0;f=k[e>>2]|0;if((h|0)<61&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function bza(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,1)|0;f=k[e>>2]|0;if((h|0)<7&(f&4|0)==0)k[b>>2]=h;else k[e>>2]=f|4;r=a;return}function cza(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=r;r=r+16|0;g=a+4|0;h=a;k[h>>2]=k[d>>2];k[g>>2]=k[h>>2];h=nDa(c,g,e,f,4)|0;if(!(k[e>>2]&4))k[b>>2]=h+-1900;r=a;return}function dza(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=k[b>>2]|0;do if(a){f=k[a+12>>2]|0;if((f|0)==(k[a+16>>2]|0))g=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0;else g=k[f>>2]|0;if((g|0)==-1){k[b>>2]=0;h=1;break}else{h=(k[b>>2]|0)==0;break}}else h=1;while(0);g=k[c>>2]|0;do if(g){a=k[g+12>>2]|0;if((a|0)==(k[g+16>>2]|0))i=Hc[k[(k[g>>2]|0)+36>>2]&511](g)|0;else i=k[a>>2]|0;if((i|0)!=-1)if(h){j=g;l=17;break}else{l=16;break}else{k[c>>2]=0;l=14;break}}else l=14;while(0);if((l|0)==14)if(h)l=16;else{j=0;l=17}a:do if((l|0)==16)k[d>>2]=k[d>>2]|6;else if((l|0)==17){h=k[b>>2]|0;g=k[h+12>>2]|0;if((g|0)==(k[h+16>>2]|0))m=Hc[k[(k[h>>2]|0)+36>>2]&511](h)|0;else m=k[g>>2]|0;if((Rc[k[(k[e>>2]|0)+52>>2]&63](e,m,0)|0)<<24>>24!=37){k[d>>2]=k[d>>2]|4;break}g=k[b>>2]|0;h=g+12|0;i=k[h>>2]|0;if((i|0)==(k[g+16>>2]|0)){Hc[k[(k[g>>2]|0)+40>>2]&511](g)|0;a=k[b>>2]|0;if(!a)n=1;else{o=a;l=25}}else{k[h>>2]=i+4;o=g;l=25}do if((l|0)==25){g=k[o+12>>2]|0;if((g|0)==(k[o+16>>2]|0))p=Hc[k[(k[o>>2]|0)+36>>2]&511](o)|0;else p=k[g>>2]|0;if((p|0)==-1){k[b>>2]=0;n=1;break}else{n=(k[b>>2]|0)==0;break}}while(0);do if(j){g=k[j+12>>2]|0;if((g|0)==(k[j+16>>2]|0))q=Hc[k[(k[j>>2]|0)+36>>2]&511](j)|0;else q=k[g>>2]|0;if((q|0)!=-1)if(n)break a;else break;else{k[c>>2]=0;l=37;break}}else l=37;while(0);if((l|0)==37?!n:0)break;k[d>>2]=k[d>>2]|2}while(0);return}function eza(a){a=a|0;fza(a+8|0);return}function fza(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;B=0;c=bb(3)|0;d=B;B=0;do if(!(d&1)){if((b|0)!=(c|0)?(B=0,va(551,k[a>>2]|0),e=B,B=0,e&1):0)break;return}while(0);a=Rb(0)|0;Dd(a)}function gza(a){a=a|0;fza(a+8|0);Sqa(a);return}function hza(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0;d=r;r=r+112|0;c=d+4|0;h=d;k[h>>2]=c+100;iza(a+8|0,c,h,e,f,g);g=k[h>>2]|0;h=c;c=k[b>>2]|0;while(1){if((h|0)==(g|0)){j=c;break}b=i[h>>0]|0;do if(c){f=c+24|0;e=k[f>>2]|0;if((e|0)==(k[c+28>>2]|0)){a=(ed[k[(k[c>>2]|0)+52>>2]&511](c,b&255)|0)==-1;l=a?0:c;break}else{k[f>>2]=e+1;i[e>>0]=b;l=c;break}}else l=0;while(0);h=h+1|0;c=l}r=d;return j|0}function iza(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0;g=r;r=r+16|0;h=g;i[h>>0]=37;j=h+1|0;i[j>>0]=e;l=h+2|0;i[l>>0]=f;i[h+3>>0]=0;if(f<<24>>24){i[j>>0]=f;i[l>>0]=e}e=b+(Hb(b|0,(k[c>>2]|0)-b|0,h|0,d|0,k[a>>2]|0)|0)|0;k[c>>2]=e;r=g;return}function jza(a){a=a|0;fza(a+8|0);return}function kza(a){a=a|0;fza(a+8|0);Sqa(a);return}function lza(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;d=r;r=r+416|0;c=d+8|0;h=d;k[h>>2]=c+400;mza(a+8|0,c,h,e,f,g);g=k[h>>2]|0;h=c;c=k[b>>2]|0;while(1){if((h|0)==(g|0)){i=c;break}b=k[h>>2]|0;if(!c)j=0;else{f=c+24|0;e=k[f>>2]|0;if((e|0)==(k[c+28>>2]|0))l=ed[k[(k[c>>2]|0)+52>>2]&511](c,b)|0;else{k[f>>2]=e+4;k[e>>2]=b;l=b}j=(l|0)==-1?0:c}h=h+4|0;c=j}r=d;return i|0}function mza(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0;g=r;r=r+128|0;h=g+16|0;i=g+12|0;j=g;l=g+8|0;k[i>>2]=h+100;iza(a,h,i,d,e,f);f=j;k[f>>2]=0;k[f+4>>2]=0;k[l>>2]=h;h=(k[c>>2]|0)-b>>2;f=esa(k[a>>2]|0)|0;B=0;a=cb(70,b|0,l|0,h|0,j|0)|0;j=B;B=0;if(j&1){j=Rb()|0;if((f|0)!=0?(B=0,ya(444,f|0)|0,h=B,B=0,h&1):0){h=Rb(0)|0;Dd(h)}Qb(j|0)}if((f|0)!=0?(B=0,ya(444,f|0)|0,f=B,B=0,f&1):0){f=Rb(0)|0;Dd(f)}if((a|0)==-1)iAa(159178);else{k[c>>2]=b+(a<<2);r=g;return}}function nza(a){a=a|0;return}function oza(a){a=a|0;Sqa(a);return}function pza(a){a=a|0;return 127}function qza(a){a=a|0;return 127}function rza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function sza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function tza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function uza(a,b){a=a|0;b=b|0;Xua(a,1,45);return}function vza(a){a=a|0;return 0}function wza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function xza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function yza(a){a=a|0;return}function zza(a){a=a|0;Sqa(a);return}function Aza(a){a=a|0;return 127}function Bza(a){a=a|0;return 127}function Cza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Dza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Eza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Fza(a,b){a=a|0;b=b|0;Xua(a,1,45);return}function Gza(a){a=a|0;return 0}function Hza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Iza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Jza(a){a=a|0;return}function Kza(a){a=a|0;Sqa(a);return}function Lza(a){a=a|0;return 2147483647}function Mza(a){a=a|0;return 2147483647}function Nza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Oza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Pza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Qza(a,b){a=a|0;b=b|0;jva(a,1,45);return}function Rza(a){a=a|0;return 0}function Sza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Tza(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function Uza(a){a=a|0;return}function Vza(a){a=a|0;Sqa(a);return}function Wza(a){a=a|0;return 2147483647}function Xza(a){a=a|0;return 2147483647}function Yza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function Zza(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function _za(a,b){a=a|0;b=b|0;b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}return}function $za(a,b){a=a|0;b=b|0;jva(a,1,45);return}function aAa(a){a=a|0;return 0}function bAa(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function cAa(a,b){a=a|0;b=b|0;i[a>>0]=2;i[a+1>>0]=3;i[a+2>>0]=0;i[a+3>>0]=4;return}function dAa(a){a=a|0;return}function eAa(a){a=a|0;Sqa(a);return}function fAa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;a=r;r=r+240|0;h=a+24|0;j=a;l=a+140|0;m=a+16|0;n=a+12|0;o=a+8|0;p=a+136|0;q=a+4|0;s=a+36|0;k[m>>2]=l;t=m+4|0;k[t>>2]=552;u=l+100|0;B=0;v=ya(421,e|0)|0;w=B;B=0;if(!(w&1)){k[o>>2]=v;B=0;v=Xa(238,o|0,49320)|0;w=B;B=0;a:do if(!(w&1)?(i[p>>0]=0,k[q>>2]=k[c>>2],x=k[e+4>>2]|0,B=0,k[h>>2]=k[q>>2],y=Ua(1,b|0,h|0,d|0,o|0,x|0,f|0,p|0,v|0,m|0,n|0,u|0)|0,x=B,B=0,!(x&1)):0){b:do if(y){B=0;cb(k[(k[v>>2]|0)+32>>2]|0,v|0,159199,159209,h|0)|0;x=B;B=0;if(x&1){z=10;break a}x=k[n>>2]|0;A=k[m>>2]|0;C=x-A|0;D=A;A=x;if((C|0)>98){x=lua(C+2|0)|0;C=x;if(!x){B=0;fb(7);E=B;B=0;if(E&1)F=C;else{G=C;H=0;z=13}}else{G=C;H=x;z=13}}else{G=0;H=s;z=13}do if((z|0)==13){if(!(i[p>>0]|0))I=H;else{i[H>>0]=45;I=H+1|0}x=h+10|0;C=h;E=A;J=I;K=D;while(1){if(K>>>0>=E>>>0){L=J;break}M=i[K>>0]|0;N=h;while(1){if((N|0)==(x|0)){O=x;break}if((i[N>>0]|0)==M<<24>>24){O=N;break}N=N+1|0}i[J>>0]=i[159199+(O-C)>>0]|0;E=k[n>>2]|0;J=J+1|0;K=K+1|0}i[L>>0]=0;k[j>>2]=g;if((rta(s,159210,j)|0)!=1?(B=0,va(553,159214),K=B,B=0,K&1):0){F=G;break}if(G)mua(G);break b}while(0);D=Rb()|0;A=Q;if(!F){P=D;R=A;S=m;break a}mua(F);P=D;R=A;S=m;break a}while(0);y=k[b>>2]|0;do if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;A=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;D=B;B=0;if(D&1){z=10;break a}if((A|0)==-1){k[b>>2]=0;T=0;break}else{T=k[b>>2]|0;break}}else T=y;else T=0;while(0);y=(T|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)==(k[A+16>>2]|0)){B=0;D=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;K=B;B=0;if(K&1){z=10;break a}if((D|0)==-1){k[c>>2]=0;z=39;break}}if(!y)z=40}else z=39;while(0);if((z|0)==39?y:0)z=40;if((z|0)==40)k[f>>2]=k[f>>2]|2;A=k[b>>2]|0;BEa(k[o>>2]|0)|0;D=k[m>>2]|0;k[m>>2]=0;if((D|0)!=0?(B=0,va(k[t>>2]|0,D|0),D=B,B=0,D&1):0){D=Rb(0)|0;Dd(D)}r=a;return A|0}else z=10;while(0);if((z|0)==10){a=Rb()|0;P=a;R=Q;S=m}BEa(k[o>>2]|0)|0;o=k[S>>2]|0;k[S>>2]=0;if(!o){U=P;V=R}else{W=P;X=R;Y=k[t>>2]|0;Z=o;z=47}}else{o=Rb()|0;k[m>>2]=0;W=o;X=Q;Y=552;Z=l;z=47}if((z|0)==47){B=0;va(Y|0,Z|0);Z=B;B=0;if(Z&1){Z=Rb(0)|0;Dd(Z)}else{U=W;V=X}}Qb(U|0);return 0}function gAa(a){a=a|0;return}function hAa(a,b,c,d,e,f,g,h,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0;p=r;r=r+512|0;q=p+88|0;s=p+96|0;t=p+80|0;u=p+72|0;v=p+68|0;w=p+500|0;x=p+497|0;y=p+496|0;z=p+56|0;A=p+44|0;C=p+32|0;D=p+20|0;E=p+8|0;F=p+4|0;G=p;k[q>>2]=o;k[t>>2]=s;o=t+4|0;k[o>>2]=552;k[u>>2]=s;k[v>>2]=s+400;H=0;while(1){if((H|0)==3)break;k[z+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[A+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[C+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[D+(H<<2)>>2]=0;H=H+1|0}H=0;while(1){if((H|0)==3)break;k[E+(H<<2)>>2]=0;H=H+1|0}B=0;Wa(1,c|0,d|0,w|0,x|0,y|0,z|0,A|0,C|0,D|0,F|0);d=B;B=0;a:do if(d&1){c=Rb()|0;I=c;J=Q}else{k[n>>2]=k[m>>2];c=h+8|0;H=C+4|0;K=D+4|0;L=D+8|0;M=D+1|0;N=C+8|0;O=C+1|0;P=(e&512|0)!=0;R=A+8|0;S=A+1|0;T=A+4|0;U=E+4|0;V=E+8|0;W=E+1|0;X=w+3|0;Y=z+4|0;Z=s;_=0;$=0;b:while(1){if(_>>>0>=4){aa=Z;ba=$;ca=251;break}da=k[a>>2]|0;do if(da)if((k[da+12>>2]|0)==(k[da+16>>2]|0)){B=0;ea=ya(k[(k[da>>2]|0)+36>>2]|0,da|0)|0;fa=B;B=0;if(fa&1){ca=38;break b}if((ea|0)==-1){k[a>>2]=0;ga=0;break}else{ga=k[a>>2]|0;break}}else ga=da;else ga=0;while(0);da=(ga|0)==0;ea=k[b>>2]|0;do if(ea){if((k[ea+12>>2]|0)!=(k[ea+16>>2]|0))if(da){ha=ea;break}else{aa=Z;ba=$;ca=251;break b}B=0;fa=ya(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ia=B;B=0;if(ia&1){ca=38;break b}if((fa|0)!=-1)if(da){ha=ea;break}else{aa=Z;ba=$;ca=251;break b}else{k[b>>2]=0;ca=31;break}}else ca=31;while(0);if((ca|0)==31){ca=0;if(da){aa=Z;ba=$;ca=251;break}else ha=0}c:do switch(i[w+_>>0]|0){case 1:{if((_|0)!=3){ea=k[a>>2]|0;fa=k[ea+12>>2]|0;if((fa|0)==(k[ea+16>>2]|0)){B=0;ia=ya(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ea=B;B=0;if(ea&1){ca=38;break b}else ja=ia}else ja=l[fa>>0]|0;if((ja&255)<<24>>24<=-1){ca=56;break b}if(!(j[(k[c>>2]|0)+(ja<<24>>24<<1)>>1]&8192)){ca=56;break b}fa=k[a>>2]|0;ia=fa+12|0;ea=k[ia>>2]|0;if((ea|0)==(k[fa+16>>2]|0)){B=0;ka=ya(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=B;B=0;if(fa&1){ca=38;break b}else la=ka}else{k[ia>>2]=ea+1;la=l[ea>>0]|0}B=0;wa(503,E|0,la&255|0);ea=B;B=0;if(ea&1){ca=38;break b}else{ma=ha;na=ha;ca=58}}else{oa=Z;pa=$}break}case 0:{if((_|0)==3){oa=Z;pa=$}else{ma=ha;na=ha;ca=58}break}case 3:{ea=i[C>>0]|0;ia=(ea&1)==0?(ea&255)>>>1:k[H>>2]|0;ka=i[D>>0]|0;fa=(ka&1)==0?(ka&255)>>>1:k[K>>2]|0;if((ia|0)==(0-fa|0)){oa=Z;pa=$}else{if(!ia){ia=k[a>>2]|0;qa=k[ia+12>>2]|0;if((qa|0)==(k[ia+16>>2]|0)){B=0;ra=ya(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;ia=B;B=0;if(ia&1){ca=38;break b}sa=ra;ta=i[D>>0]|0}else{sa=l[qa>>0]|0;ta=ka}if((sa&255)<<24>>24!=(i[((ta&1)==0?M:k[L>>2]|0)>>0]|0)){oa=Z;pa=$;break c}ka=k[a>>2]|0;qa=ka+12|0;ra=k[qa>>2]|0;if((ra|0)==(k[ka+16>>2]|0)){B=0;ya(k[(k[ka>>2]|0)+40>>2]|0,ka|0)|0;ka=B;B=0;if(ka&1){ca=38;break b}}else k[qa>>2]=ra+1;i[g>>0]=1;ra=i[D>>0]|0;oa=Z;pa=((ra&1)==0?(ra&255)>>>1:k[K>>2]|0)>>>0>1?D:$;break c}ra=k[a>>2]|0;qa=k[ra+12>>2]|0;ka=k[ra+16>>2]|0;ia=(qa|0)==(ka|0);if(!fa){if(ia){B=0;fa=ya(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;ua=B;B=0;if(ua&1){ca=38;break b}xa=fa;za=i[C>>0]|0}else{xa=l[qa>>0]|0;za=ea}if((xa&255)<<24>>24!=(i[((za&1)==0?O:k[N>>2]|0)>>0]|0)){i[g>>0]=1;oa=Z;pa=$;break c}fa=k[a>>2]|0;ua=fa+12|0;Aa=k[ua>>2]|0;if((Aa|0)==(k[fa+16>>2]|0)){B=0;ya(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=B;B=0;if(fa&1){ca=38;break b}}else k[ua>>2]=Aa+1;Aa=i[C>>0]|0;oa=Z;pa=((Aa&1)==0?(Aa&255)>>>1:k[H>>2]|0)>>>0>1?C:$;break c}if(ia){B=0;ia=ya(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;Aa=B;B=0;if(Aa&1){ca=38;break b}Aa=k[a>>2]|0;Ba=ia;Ca=i[C>>0]|0;Da=Aa;Ea=k[Aa+12>>2]|0;Fa=k[Aa+16>>2]|0}else{Ba=l[qa>>0]|0;Ca=ea;Da=ra;Ea=qa;Fa=ka}ka=Da+12|0;qa=(Ea|0)==(Fa|0);if((Ba&255)<<24>>24==(i[((Ca&1)==0?O:k[N>>2]|0)>>0]|0)){if(qa){B=0;ya(k[(k[Da>>2]|0)+40>>2]|0,Da|0)|0;ra=B;B=0;if(ra&1){ca=38;break b}}else k[ka>>2]=Ea+1;ka=i[C>>0]|0;oa=Z;pa=((ka&1)==0?(ka&255)>>>1:k[H>>2]|0)>>>0>1?C:$;break c}if(qa){B=0;qa=ya(k[(k[Da>>2]|0)+36>>2]|0,Da|0)|0;ka=B;B=0;if(ka&1){ca=38;break b}else Ga=qa}else Ga=l[Ea>>0]|0;if((Ga&255)<<24>>24!=(i[((i[D>>0]&1)==0?M:k[L>>2]|0)>>0]|0)){ca=120;break b}qa=k[a>>2]|0;ka=qa+12|0;ra=k[ka>>2]|0;if((ra|0)==(k[qa+16>>2]|0)){B=0;ya(k[(k[qa>>2]|0)+40>>2]|0,qa|0)|0;qa=B;B=0;if(qa&1){ca=38;break b}}else k[ka>>2]=ra+1;i[g>>0]=1;ra=i[D>>0]|0;oa=Z;pa=((ra&1)==0?(ra&255)>>>1:k[K>>2]|0)>>>0>1?D:$}break}case 2:{if(!(_>>>0<2|($|0)!=0)?!(P|(_|0)==2&(i[X>>0]|0)!=0):0){oa=Z;pa=0;break c}ra=i[A>>0]|0;ka=(ra&1)==0;qa=k[R>>2]|0;ea=ka?S:qa;Aa=ea;d:do if((_|0)!=0?(l[w+(_+-1)>>0]|0)<2:0){ia=ea+(ka?(ra&255)>>>1:k[T>>2]|0)|0;ua=Aa;while(1){fa=ua;if((fa|0)==(ia|0)){Ha=ua;break}Ia=i[fa>>0]|0;if(Ia<<24>>24<=-1){Ha=ua;break}if(!(j[(k[c>>2]|0)+(Ia<<24>>24<<1)>>1]&8192)){Ha=ua;break}ua=fa+1|0}ua=Ha-Aa|0;ia=i[E>>0]|0;fa=(ia&1)==0;Ia=fa?(ia&255)>>>1:k[U>>2]|0;if(ua>>>0<=Ia>>>0){ia=(fa?W:k[V>>2]|0)+Ia|0;Ia=ea;fa=ia+(0-ua)|0;while(1){if((fa|0)==(ia|0)){Ja=ha;Ka=ra;La=qa;Ma=ha;Na=Ha;break d}if((i[fa>>0]|0)!=(i[Ia>>0]|0)){Ja=ha;Ka=ra;La=qa;Ma=ha;Na=Aa;break d}Ia=Ia+1|0;fa=fa+1|0}}else{Ja=ha;Ka=ra;La=qa;Ma=ha;Na=Aa}}else{Ja=ha;Ka=ra;La=qa;Ma=ha;Na=Aa}while(0);e:while(1){Aa=(Ka&1)==0;qa=(Aa?S:La)+(Aa?(Ka&255)>>>1:k[T>>2]|0)|0;Aa=Na;if((Aa|0)==(qa|0)){Oa=qa;break}qa=k[a>>2]|0;do if(qa)if((k[qa+12>>2]|0)==(k[qa+16>>2]|0)){B=0;ra=ya(k[(k[qa>>2]|0)+36>>2]|0,qa|0)|0;ea=B;B=0;if(ea&1){ca=35;break b}if((ra|0)==-1){k[a>>2]=0;Pa=0;break}else{Pa=k[a>>2]|0;break}}else Pa=qa;else Pa=0;while(0);qa=(Pa|0)==0;do if(Ma){if((k[Ma+12>>2]|0)!=(k[Ma+16>>2]|0))if(qa){Qa=Ja;Ra=Ma;break}else{Oa=Aa;break e}B=0;ra=ya(k[(k[Ma>>2]|0)+36>>2]|0,Ma|0)|0;ea=B;B=0;if(ea&1){ca=35;break b}if((ra|0)!=-1)if(qa^(Ja|0)==0){Qa=Ja;Ra=Ja;break}else{Oa=Aa;break e}else{k[b>>2]=0;Sa=0;ca=148;break}}else{Sa=Ja;ca=148}while(0);if((ca|0)==148){ca=0;if(qa){Oa=Aa;break}else{Qa=Sa;Ra=0}}ra=k[a>>2]|0;ea=k[ra+12>>2]|0;if((ea|0)==(k[ra+16>>2]|0)){B=0;ka=ya(k[(k[ra>>2]|0)+36>>2]|0,ra|0)|0;ra=B;B=0;if(ra&1){ca=35;break b}else Ta=ka}else Ta=l[ea>>0]|0;if((Ta&255)<<24>>24!=(i[Aa>>0]|0)){Oa=Aa;break}ea=k[a>>2]|0;ka=ea+12|0;ra=k[ka>>2]|0;if((ra|0)==(k[ea+16>>2]|0)){B=0;ya(k[(k[ea>>2]|0)+40>>2]|0,ea|0)|0;ea=B;B=0;if(ea&1){ca=35;break b}}else k[ka>>2]=ra+1;Ja=Qa;Ka=i[A>>0]|0;La=k[R>>2]|0;Ma=Ra;Na=Aa+1|0}if(P?(ra=i[A>>0]|0,ka=(ra&1)==0,(Oa|0)!=((ka?S:k[R>>2]|0)+(ka?(ra&255)>>>1:k[T>>2]|0)|0)):0){ca=160;break b}else{oa=Z;pa=$}break}case 4:{ra=i[y>>0]|0;ka=ha;ea=ha;fa=Z;Ia=0;f:while(1){ia=k[a>>2]|0;do if(ia)if((k[ia+12>>2]|0)==(k[ia+16>>2]|0)){B=0;ua=ya(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;Ua=B;B=0;if(Ua&1){ca=37;break b}if((ua|0)==-1){k[a>>2]=0;Va=0;break}else{Va=k[a>>2]|0;break}}else Va=ia;else Va=0;while(0);ia=(Va|0)==0;do if(ea){if((k[ea+12>>2]|0)!=(k[ea+16>>2]|0))if(ia){Xa=ka;Ya=ea;break}else{Za=fa;_a=ka;$a=Ia;break f}B=0;Aa=ya(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;qa=B;B=0;if(qa&1){ca=37;break b}if((Aa|0)!=-1)if(ia^(ka|0)==0){Xa=ka;Ya=ka;break}else{Za=fa;_a=ka;$a=Ia;break f}else{k[b>>2]=0;ab=0;ca=173;break}}else{ab=ka;ca=173}while(0);if((ca|0)==173){ca=0;if(ia){Za=fa;_a=ab;$a=Ia;break}else{Xa=ab;Ya=0}}Aa=k[a>>2]|0;qa=k[Aa+12>>2]|0;if((qa|0)==(k[Aa+16>>2]|0)){B=0;ua=ya(k[(k[Aa>>2]|0)+36>>2]|0,Aa|0)|0;Aa=B;B=0;if(Aa&1){ca=37;break b}else bb=ua}else bb=l[qa>>0]|0;qa=bb&255;if(qa<<24>>24>-1?(j[(k[c>>2]|0)+(bb<<24>>24<<1)>>1]&2048)!=0:0){ua=k[n>>2]|0;if((ua|0)==(k[q>>2]|0)){B=0;eb(532,m|0,n|0,q|0);Aa=B;B=0;if(Aa&1){ca=37;break b}cb=k[n>>2]|0}else cb=ua;k[n>>2]=cb+1;i[cb>>0]=qa;db=fa;fb=Ia+1|0}else{ua=i[z>>0]|0;if(!(qa<<24>>24==ra<<24>>24&((Ia|0)!=0?(((ua&1)==0?(ua&255)>>>1:k[Y>>2]|0)|0)!=0:0))){Za=fa;_a=Xa;$a=Ia;break}if((fa|0)==(k[v>>2]|0)){B=0;eb(533,t|0,u|0,v|0);ua=B;B=0;if(ua&1){ca=37;break b}gb=k[u>>2]|0}else gb=fa;ua=gb+4|0;k[u>>2]=ua;k[gb>>2]=Ia;db=ua;fb=0}ua=k[a>>2]|0;qa=ua+12|0;Aa=k[qa>>2]|0;if((Aa|0)==(k[ua+16>>2]|0)){B=0;ya(k[(k[ua>>2]|0)+40>>2]|0,ua|0)|0;ua=B;B=0;if(ua&1){ca=37;break b}else{ka=Xa;ea=Ya;fa=db;Ia=fb;continue}}else{k[qa>>2]=Aa+1;ka=Xa;ea=Ya;fa=db;Ia=fb;continue}}if(($a|0)!=0?(k[t>>2]|0)!=(Za|0):0){if((Za|0)==(k[v>>2]|0)){B=0;eb(533,t|0,u|0,v|0);Ia=B;B=0;if(Ia&1){ca=38;break b}hb=k[u>>2]|0}else hb=Za;Ia=hb+4|0;k[u>>2]=Ia;k[hb>>2]=$a;ib=Ia}else ib=Za;Ia=k[F>>2]|0;g:do if((Ia|0)>0){fa=k[a>>2]|0;do if(fa)if((k[fa+12>>2]|0)==(k[fa+16>>2]|0)){B=0;ea=ya(k[(k[fa>>2]|0)+36>>2]|0,fa|0)|0;ka=B;B=0;if(ka&1){ca=38;break b}if((ea|0)==-1){k[a>>2]=0;jb=0;break}else{jb=k[a>>2]|0;break}}else jb=fa;else jb=0;while(0);fa=(jb|0)==0;do if(_a){if((k[_a+12>>2]|0)==(k[_a+16>>2]|0)){B=0;ia=ya(k[(k[_a>>2]|0)+36>>2]|0,_a|0)|0;ea=B;B=0;if(ea&1){ca=38;break b}if((ia|0)==-1){k[b>>2]=0;ca=210;break}}if(fa)kb=_a;else{ca=215;break b}}else ca=210;while(0);if((ca|0)==210){ca=0;if(fa){ca=215;break b}else kb=0}ia=k[a>>2]|0;ea=k[ia+12>>2]|0;if((ea|0)==(k[ia+16>>2]|0)){B=0;ka=ya(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;ia=B;B=0;if(ia&1){ca=38;break b}else lb=ka}else lb=l[ea>>0]|0;if((lb&255)<<24>>24!=(i[x>>0]|0)){ca=215;break b}ea=k[a>>2]|0;ka=ea+12|0;ia=k[ka>>2]|0;if((ia|0)==(k[ea+16>>2]|0)){B=0;ya(k[(k[ea>>2]|0)+40>>2]|0,ea|0)|0;ea=B;B=0;if(ea&1){ca=38;break b}else{mb=kb;nb=Ia;ob=kb}}else{k[ka>>2]=ia+1;mb=kb;nb=Ia;ob=kb}while(1){if((nb|0)<=0)break g;ia=k[a>>2]|0;do if(ia)if((k[ia+12>>2]|0)==(k[ia+16>>2]|0)){B=0;ka=ya(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;ea=B;B=0;if(ea&1){ca=36;break b}if((ka|0)==-1){k[a>>2]=0;pb=0;break}else{pb=k[a>>2]|0;break}}else pb=ia;else pb=0;while(0);ia=(pb|0)==0;do if(ob){if((k[ob+12>>2]|0)!=(k[ob+16>>2]|0))if(ia){qb=mb;rb=ob;break}else{ca=239;break b}B=0;ka=ya(k[(k[ob>>2]|0)+36>>2]|0,ob|0)|0;ea=B;B=0;if(ea&1){ca=36;break b}if((ka|0)!=-1)if(ia^(mb|0)==0){qb=mb;rb=mb;break}else{ca=239;break b}else{k[b>>2]=0;sb=0;ca=232;break}}else{sb=mb;ca=232}while(0);if((ca|0)==232){ca=0;if(ia){ca=239;break b}else{qb=sb;rb=0}}ka=k[a>>2]|0;ea=k[ka+12>>2]|0;if((ea|0)==(k[ka+16>>2]|0)){B=0;ra=ya(k[(k[ka>>2]|0)+36>>2]|0,ka|0)|0;ka=B;B=0;if(ka&1){ca=36;break b}else tb=ra}else tb=l[ea>>0]|0;if((tb&255)<<24>>24<=-1){ca=239;break b}if(!(j[(k[c>>2]|0)+(tb<<24>>24<<1)>>1]&2048)){ca=239;break b}if((k[n>>2]|0)==(k[q>>2]|0)?(B=0,eb(532,m|0,n|0,q|0),ea=B,B=0,ea&1):0){ca=36;break b}ea=k[a>>2]|0;ra=k[ea+12>>2]|0;if((ra|0)==(k[ea+16>>2]|0)){B=0;ka=ya(k[(k[ea>>2]|0)+36>>2]|0,ea|0)|0;ea=B;B=0;if(ea&1){ca=36;break b}else ub=ka}else ub=l[ra>>0]|0;ra=k[n>>2]|0;k[n>>2]=ra+1;i[ra>>0]=ub;ra=nb+-1|0;k[F>>2]=ra;ka=k[a>>2]|0;ea=ka+12|0;Aa=k[ea>>2]|0;if((Aa|0)==(k[ka+16>>2]|0)){B=0;ya(k[(k[ka>>2]|0)+40>>2]|0,ka|0)|0;ka=B;B=0;if(ka&1){ca=36;break b}else{mb=qb;nb=ra;ob=rb;continue}}else{k[ea>>2]=Aa+1;mb=qb;nb=ra;ob=rb;continue}}}while(0);if((k[n>>2]|0)==(k[m>>2]|0)){ca=249;break b}else{oa=ib;pa=$}break}default:{oa=Z;pa=$}}while(0);h:do if((ca|0)==58)while(1){ca=0;da=k[a>>2]|0;do if(da)if((k[da+12>>2]|0)==(k[da+16>>2]|0)){B=0;Ia=ya(k[(k[da>>2]|0)+36>>2]|0,da|0)|0;fa=B;B=0;if(fa&1){ca=34;break b}if((Ia|0)==-1){k[a>>2]=0;vb=0;break}else{vb=k[a>>2]|0;break}}else vb=da;else vb=0;while(0);da=(vb|0)==0;do if(na){if((k[na+12>>2]|0)!=(k[na+16>>2]|0))if(da){wb=ma;xb=na;break}else{oa=Z;pa=$;break h}B=0;Ia=ya(k[(k[na>>2]|0)+36>>2]|0,na|0)|0;fa=B;B=0;if(fa&1){ca=34;break b}if((Ia|0)!=-1)if(da^(ma|0)==0){wb=ma;xb=ma;break}else{oa=Z;pa=$;break h}else{k[b>>2]=0;yb=0;ca=70;break}}else{yb=ma;ca=70}while(0);if((ca|0)==70){ca=0;if(da){oa=Z;pa=$;break h}else{wb=yb;xb=0}}Ia=k[a>>2]|0;fa=k[Ia+12>>2]|0;if((fa|0)==(k[Ia+16>>2]|0)){B=0;ra=ya(k[(k[Ia>>2]|0)+36>>2]|0,Ia|0)|0;Ia=B;B=0;if(Ia&1){ca=34;break b}else zb=ra}else zb=l[fa>>0]|0;if((zb&255)<<24>>24<=-1){oa=Z;pa=$;break h}if(!(j[(k[c>>2]|0)+(zb<<24>>24<<1)>>1]&8192)){oa=Z;pa=$;break h}fa=k[a>>2]|0;ra=fa+12|0;Ia=k[ra>>2]|0;if((Ia|0)==(k[fa+16>>2]|0)){B=0;Aa=ya(k[(k[fa>>2]|0)+40>>2]|0,fa|0)|0;fa=B;B=0;if(fa&1){ca=34;break b}else Ab=Aa}else{k[ra>>2]=Ia+1;Ab=l[Ia>>0]|0}B=0;wa(503,E|0,Ab&255|0);Ia=B;B=0;if(Ia&1){ca=34;break b}else{ma=wb;na=xb;ca=58}}while(0);Z=oa;_=_+1|0;$=pa}i:switch(ca|0){case 34:{I=Rb()|0;J=Q;break a;break}case 35:{I=Rb()|0;J=Q;break a;break}case 36:{I=Rb()|0;J=Q;break a;break}case 37:{I=Rb()|0;J=Q;break a;break}case 38:{I=Rb()|0;J=Q;break a;break}case 56:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 120:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 160:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 215:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 239:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 249:{k[f>>2]=k[f>>2]|4;Bb=0;break}case 251:{j:do if(ba){$=ba+1|0;_=ba+8|0;Z=ba+4|0;c=1;k:while(1){Y=i[ba>>0]|0;if(!(Y&1))Cb=(Y&255)>>>1;else Cb=k[Z>>2]|0;if(c>>>0>=Cb>>>0)break j;Y=k[a>>2]|0;do if(Y)if((k[Y+12>>2]|0)==(k[Y+16>>2]|0)){B=0;T=ya(k[(k[Y>>2]|0)+36>>2]|0,Y|0)|0;R=B;B=0;if(R&1){ca=33;break k}if((T|0)==-1){k[a>>2]=0;Db=0;break}else{Db=k[a>>2]|0;break}}else Db=Y;else Db=0;while(0);Y=(Db|0)==0;T=k[b>>2]|0;do if(T){if((k[T+12>>2]|0)==(k[T+16>>2]|0)){B=0;R=ya(k[(k[T>>2]|0)+36>>2]|0,T|0)|0;S=B;B=0;if(S&1){ca=33;break k}if((R|0)==-1){k[b>>2]=0;ca=269;break}}if(!Y){ca=276;break k}}else ca=269;while(0);if((ca|0)==269?(ca=0,Y):0){ca=276;break}T=k[a>>2]|0;R=k[T+12>>2]|0;if((R|0)==(k[T+16>>2]|0)){B=0;S=ya(k[(k[T>>2]|0)+36>>2]|0,T|0)|0;T=B;B=0;if(T&1){ca=33;break}else Eb=S}else Eb=l[R>>0]|0;if(!(i[ba>>0]&1))Fb=$;else Fb=k[_>>2]|0;if((Eb&255)<<24>>24!=(i[Fb+c>>0]|0)){ca=276;break}R=c+1|0;S=k[a>>2]|0;T=S+12|0;P=k[T>>2]|0;if((P|0)==(k[S+16>>2]|0)){B=0;ya(k[(k[S>>2]|0)+40>>2]|0,S|0)|0;S=B;B=0;if(S&1){ca=33;break}else{c=R;continue}}else{k[T>>2]=P+1;c=R;continue}}if((ca|0)==33){c=Rb()|0;I=c;J=Q;break a}else if((ca|0)==276){k[f>>2]=k[f>>2]|4;Bb=0;break i}}while(0);c=k[t>>2]|0;if((c|0)!=(aa|0)){k[G>>2]=0;lAa(z,c,aa,G);if(!(k[G>>2]|0)){Bb=1;break}else{k[f>>2]=k[f>>2]|4;Bb=0;break}}else Bb=1;break}}Yua(E);Yua(D);Yua(C);Yua(A);Yua(z);c=k[t>>2]|0;k[t>>2]=0;if((c|0)!=0?(B=0,va(k[o>>2]|0,c|0),c=B,B=0,c&1):0){c=Rb(0)|0;Dd(c)}r=p;return Bb|0}while(0);Yua(E);Yua(D);Yua(C);Yua(A);Yua(z);z=k[t>>2]|0;k[t>>2]=0;if((z|0)!=0?(B=0,va(k[o>>2]|0,z|0),z=B,B=0,z&1):0){z=Rb(0)|0;Dd(z)}Qb(I|0);return 0}function iAa(a){a=a|0;var b=0;b=Ab(8)|0;B=0;wa(527,b|0,a|0);a=B;B=0;if(a&1){a=Rb()|0;zb(b|0);Qb(a|0)}else jc(b|0,25224,350)}function jAa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+144|0;h=a+24|0;j=a+32|0;l=a+16|0;m=a+8|0;n=a+4|0;o=a+28|0;p=a;k[l>>2]=j;q=l+4|0;k[q>>2]=552;s=j+100|0;B=0;t=ya(421,e|0)|0;u=B;B=0;if(!(u&1)){k[n>>2]=t;B=0;u=Xa(238,n|0,49320)|0;v=B;B=0;a:do if(!(v&1)?(i[o>>0]=0,w=k[c>>2]|0,k[p>>2]=w,x=k[e+4>>2]|0,y=w,B=0,k[h>>2]=k[p>>2],z=Ua(1,b|0,h|0,d|0,n|0,x|0,f|0,o|0,u|0,l|0,m|0,s|0)|0,x=B,B=0,!(x&1)):0){if(z){if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}if(i[o>>0]|0){B=0;z=Xa(k[(k[u>>2]|0)+28>>2]|0,u|0,45)|0;x=B;B=0;if(x&1)break;B=0;wa(503,g|0,z|0);z=B;B=0;if(z&1)break}B=0;z=Xa(k[(k[u>>2]|0)+28>>2]|0,u|0,48)|0;x=B;B=0;if(x&1)break;x=k[m>>2]|0;A=x+-1|0;C=k[l>>2]|0;while(1){if(C>>>0>=A>>>0){D=C;break}if((i[C>>0]|0)!=z<<24>>24){D=C;break}C=C+1|0}B=0;Ia(53,g|0,D|0,x|0)|0;C=B;B=0;if(C&1)break}C=k[b>>2]|0;do if(C)if((k[C+12>>2]|0)==(k[C+16>>2]|0)){B=0;z=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;A=B;B=0;if(A&1)break a;if((z|0)==-1){k[b>>2]=0;E=0;break}else{E=k[b>>2]|0;break}}else E=C;else E=0;while(0);C=(E|0)==0;do if(w){if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;x=ya(k[(k[w>>2]|0)+36>>2]|0,y|0)|0;z=B;B=0;if(z&1)break a;if((x|0)==-1){k[c>>2]=0;F=30;break}}if(!C)F=31}else F=30;while(0);if((F|0)==30?C:0)F=31;if((F|0)==31)k[f>>2]=k[f>>2]|2;y=k[b>>2]|0;BEa(t)|0;w=k[l>>2]|0;k[l>>2]=0;if((w|0)!=0?(B=0,va(k[q>>2]|0,w|0),w=B,B=0,w&1):0){w=Rb(0)|0;Dd(w)}r=a;return y|0}while(0);a=Rb()|0;b=Q;BEa(t)|0;t=k[l>>2]|0;k[l>>2]=0;if(!t){G=b;H=a}else{I=a;J=b;K=t;F=37}}else{t=Rb()|0;k[l>>2]=0;I=t;J=Q;K=j;F=37}if((F|0)==37){B=0;va(k[q>>2]|0,K|0);K=B;B=0;if(K&1){K=Rb(0)|0;Dd(K)}else{G=J;H=I}}Qb(H|0);return 0}function kAa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;m=r;r=r+112|0;n=m+100|0;o=m+88|0;p=m+76|0;q=m+64|0;s=m+52|0;t=m+48|0;u=m+36|0;v=m+24|0;w=m+12|0;x=m;if(a){a=$Aa(b,48928)|0;Fc[k[(k[a>>2]|0)+44>>2]&1023](n,a);y=k[n>>2]|0;i[c>>0]=y;i[c+1>>0]=y>>8;i[c+2>>0]=y>>16;i[c+3>>0]=y>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](o,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);y=B;B=0;if(y&1){y=Rb(0)|0;Dd(y)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];y=0;while(1){if((y|0)==3)break;k[o+(y<<2)>>2]=0;y=y+1|0}Yua(o);Fc[k[(k[a>>2]|0)+28>>2]&1023](p,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}B=0;wa(528,h|0,0);o=B;B=0;if(o&1){o=Rb(0)|0;Dd(o)};k[h>>2]=k[p>>2];k[h+4>>2]=k[p+4>>2];k[h+8>>2]=k[p+8>>2];o=0;while(1){if((o|0)==3)break;k[p+(o<<2)>>2]=0;o=o+1|0}Yua(p);p=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;i[d>>0]=p;p=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;i[e>>0]=p;Fc[k[(k[a>>2]|0)+20>>2]&1023](q,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}B=0;wa(528,f|0,0);p=B;B=0;if(p&1){p=Rb(0)|0;Dd(p)};k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];p=0;while(1){if((p|0)==3)break;k[q+(p<<2)>>2]=0;p=p+1|0}Yua(q);Fc[k[(k[a>>2]|0)+24>>2]&1023](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}Yua(s);z=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}else{a=$Aa(b,48864)|0;Fc[k[(k[a>>2]|0)+44>>2]&1023](t,a);b=k[t>>2]|0;i[c>>0]=b;i[c+1>>0]=b>>8;i[c+2>>0]=b>>16;i[c+3>>0]=b>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](u,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)};k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];j=0;while(1){if((j|0)==3)break;k[u+(j<<2)>>2]=0;j=j+1|0}Yua(u);Fc[k[(k[a>>2]|0)+28>>2]&1023](v,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}B=0;wa(528,h|0,0);u=B;B=0;if(u&1){u=Rb(0)|0;Dd(u)};k[h>>2]=k[v>>2];k[h+4>>2]=k[v+4>>2];k[h+8>>2]=k[v+8>>2];h=0;while(1){if((h|0)==3)break;k[v+(h<<2)>>2]=0;h=h+1|0}Yua(v);v=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;i[d>>0]=v;v=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;i[e>>0]=v;Fc[k[(k[a>>2]|0)+20>>2]&1023](w,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}B=0;wa(528,f|0,0);v=B;B=0;if(v&1){v=Rb(0)|0;Dd(v)};k[f>>2]=k[w>>2];k[f+4>>2]=k[w+4>>2];k[f+8>>2]=k[w+8>>2];f=0;while(1){if((f|0)==3)break;k[w+(f<<2)>>2]=0;f=f+1|0}Yua(w);Fc[k[(k[a>>2]|0)+24>>2]&1023](x,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);w=B;B=0;if(w&1){w=Rb(0)|0;Dd(w)};k[g>>2]=k[x>>2];k[g+4>>2]=k[x+4>>2];k[g+8>>2]=k[x+8>>2];g=0;while(1){if((g|0)==3)break;k[x+(g<<2)>>2]=0;g=g+1|0}Yua(x);z=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}k[l>>2]=z;r=m;return}function lAa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i[a>>0]|0;f=a+4|0;g=k[f>>2]|0;do if(((e&1)==0?(e&255)>>>1:g)|0){if((b|0)==(c|0)){h=e;j=g}else{l=c;m=b;while(1){n=l+-4|0;if(m>>>0>=n>>>0)break;o=k[m>>2]|0;k[m>>2]=k[n>>2];k[n>>2]=o;l=n;m=m+4|0}h=i[a>>0]|0;j=k[f>>2]|0}m=(h&1)==0;l=m?a+1|0:k[a+8>>2]|0;n=c+-4|0;o=l+(m?(h&255)>>>1:j)|0;m=l;l=b;while(1){p=i[m>>0]|0;q=p<<24>>24<1|p<<24>>24==127;if(l>>>0>=n>>>0)break;if(!q?(p<<24>>24|0)!=(k[l>>2]|0):0){r=10;break}m=(o-m|0)>1?m+1|0:m;l=l+4|0}if((r|0)==10){k[d>>2]=4;break}if(!q?((k[n>>2]|0)+-1|0)>>>0>=p<<24>>24>>>0:0)k[d>>2]=4}while(0);return}function mAa(a){a=a|0;return}function nAa(a){a=a|0;Sqa(a);return}function oAa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;a=r;r=r+576|0;h=a+424|0;j=a;l=a+24|0;m=a+16|0;n=a+12|0;o=a+8|0;p=a+564|0;q=a+4|0;s=a+464|0;k[m>>2]=l;t=m+4|0;k[t>>2]=552;u=l+400|0;B=0;v=ya(421,e|0)|0;w=B;B=0;if(!(w&1)){k[o>>2]=v;B=0;v=Xa(238,o|0,49312)|0;w=B;B=0;a:do if(!(w&1)?(i[p>>0]=0,k[q>>2]=k[c>>2],x=k[e+4>>2]|0,B=0,k[h>>2]=k[q>>2],y=Ua(2,b|0,h|0,d|0,o|0,x|0,f|0,p|0,v|0,m|0,n|0,u|0)|0,x=B,B=0,!(x&1)):0){b:do if(y){B=0;cb(k[(k[v>>2]|0)+48>>2]|0,v|0,159230,159240,h|0)|0;x=B;B=0;if(x&1){z=10;break a}x=k[n>>2]|0;A=k[m>>2]|0;C=x-A|0;D=A;A=x;if((C|0)>392){x=lua((C>>2)+2|0)|0;C=x;if(!x){B=0;fb(7);E=B;B=0;if(E&1)F=C;else{G=C;H=0;z=13}}else{G=C;H=x;z=13}}else{G=0;H=s;z=13}do if((z|0)==13){if(!(i[p>>0]|0))I=H;else{i[H>>0]=45;I=H+1|0}x=h+40|0;C=h;E=A;J=I;K=D;while(1){if(K>>>0>=E>>>0){L=J;break}M=k[K>>2]|0;N=h;while(1){if((N|0)==(x|0)){O=x;break}if((k[N>>2]|0)==(M|0)){O=N;break}N=N+4|0}i[J>>0]=i[159230+(O-C>>2)>>0]|0;E=k[n>>2]|0;J=J+1|0;K=K+4|0}i[L>>0]=0;k[j>>2]=g;if((rta(s,159210,j)|0)!=1?(B=0,va(553,159214),K=B,B=0,K&1):0){F=G;break}if(G)mua(G);break b}while(0);D=Rb()|0;A=Q;if(!F){P=D;R=A;S=m;break a}mua(F);P=D;R=A;S=m;break a}while(0);y=k[b>>2]|0;do if(y){A=k[y+12>>2]|0;if((A|0)==(k[y+16>>2]|0)){B=0;D=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;K=B;B=0;if(K&1){z=10;break a}else T=D}else T=k[A>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1;break}else{U=(k[b>>2]|0)==0;break}}else U=1;while(0);y=k[c>>2]|0;do if(y){A=k[y+12>>2]|0;if((A|0)==(k[y+16>>2]|0)){B=0;D=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;K=B;B=0;if(K&1){z=10;break a}else V=D}else V=k[A>>2]|0;if((V|0)!=-1)if(U)break;else{z=42;break}else{k[c>>2]=0;z=40;break}}else z=40;while(0);if((z|0)==40?U:0)z=42;if((z|0)==42)k[f>>2]=k[f>>2]|2;y=k[b>>2]|0;BEa(k[o>>2]|0)|0;A=k[m>>2]|0;k[m>>2]=0;if((A|0)!=0?(B=0,va(k[t>>2]|0,A|0),A=B,B=0,A&1):0){A=Rb(0)|0;Dd(A)}r=a;return y|0}else z=10;while(0);if((z|0)==10){a=Rb()|0;P=a;R=Q;S=m}BEa(k[o>>2]|0)|0;o=k[S>>2]|0;k[S>>2]=0;if(!o){W=P;X=R}else{Y=P;Z=R;_=k[t>>2]|0;$=o;z=49}}else{o=Rb()|0;k[m>>2]=0;Y=o;Z=Q;_=552;$=l;z=49}if((z|0)==49){B=0;va(_|0,$|0);$=B;B=0;if($&1){$=Rb(0)|0;Dd($)}else{W=Y;X=Z}}Qb(W|0);return 0}function pAa(a,b,c,d,e,f,g,h,j,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;m=m|0;n=n|0;var o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0;o=r;r=r+512|0;p=o+96|0;q=o+104|0;s=o+88|0;t=o+80|0;u=o+76|0;v=o+504|0;w=o+72|0;x=o+68|0;y=o+56|0;z=o+44|0;A=o+32|0;C=o+20|0;D=o+8|0;E=o+4|0;F=o;k[p>>2]=n;k[s>>2]=q;n=s+4|0;k[n>>2]=552;k[t>>2]=q;k[u>>2]=q+400;G=0;while(1){if((G|0)==3)break;k[y+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[z+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[A+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[C+(G<<2)>>2]=0;G=G+1|0}G=0;while(1){if((G|0)==3)break;k[D+(G<<2)>>2]=0;G=G+1|0}B=0;Wa(2,c|0,d|0,v|0,w|0,x|0,y|0,z|0,A|0,C|0,E|0);d=B;B=0;a:do if(d&1){c=Rb()|0;H=c;I=Q}else{k[m>>2]=k[j>>2];c=A+4|0;G=C+4|0;J=C+8|0;K=A+8|0;L=(e&512|0)!=0;M=z+8|0;N=z+4|0;O=D+4|0;P=D+8|0;R=v+3|0;S=y+4|0;T=q;U=0;V=0;b:while(1){if(U>>>0>=4){W=T;X=V;Y=259;break}Z=k[a>>2]|0;do if(Z){_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){B=0;$=ya(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;aa=B;B=0;if(aa&1){Y=40;break b}else ba=$}else ba=k[_>>2]|0;if((ba|0)==-1){k[a>>2]=0;ca=1;break}else{ca=(k[a>>2]|0)==0;break}}else ca=1;while(0);Z=k[b>>2]|0;do if(Z){_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){B=0;$=ya(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;aa=B;B=0;if(aa&1){Y=40;break b}else da=$}else da=k[_>>2]|0;if((da|0)!=-1)if(ca){ea=Z;break}else{W=T;X=V;Y=259;break b}else{k[b>>2]=0;Y=32;break}}else Y=32;while(0);if((Y|0)==32){Y=0;if(ca){W=T;X=V;Y=259;break}else ea=0}c:do switch(i[v+U>>0]|0){case 1:{if((U|0)!=3){Z=k[a>>2]|0;_=k[Z+12>>2]|0;if((_|0)==(k[Z+16>>2]|0)){B=0;$=ya(k[(k[Z>>2]|0)+36>>2]|0,Z|0)|0;Z=B;B=0;if(Z&1){Y=40;break b}else fa=$}else fa=k[_>>2]|0;B=0;_=Ia(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,fa|0)|0;$=B;B=0;if($&1){Y=40;break b}if(!_){Y=58;break b}_=k[a>>2]|0;$=_+12|0;Z=k[$>>2]|0;if((Z|0)==(k[_+16>>2]|0)){B=0;aa=ya(k[(k[_>>2]|0)+40>>2]|0,_|0)|0;_=B;B=0;if(_&1){Y=40;break b}else ga=aa}else{k[$>>2]=Z+4;ga=k[Z>>2]|0}B=0;wa(529,D|0,ga|0);Z=B;B=0;if(Z&1){Y=40;break b}else{ha=ea;ia=ea;Y=60}}else{ja=T;ka=V}break}case 0:{if((U|0)==3){ja=T;ka=V}else{ha=ea;ia=ea;Y=60}break}case 3:{Z=i[A>>0]|0;$=(Z&1)==0?(Z&255)>>>1:k[c>>2]|0;aa=i[C>>0]|0;_=(aa&1)==0?(aa&255)>>>1:k[G>>2]|0;if(($|0)==(0-_|0)){ja=T;ka=V}else{if(!$){$=k[a>>2]|0;la=k[$+12>>2]|0;if((la|0)==(k[$+16>>2]|0)){B=0;ma=ya(k[(k[$>>2]|0)+36>>2]|0,$|0)|0;$=B;B=0;if($&1){Y=40;break b}na=ma;oa=i[C>>0]|0}else{na=k[la>>2]|0;oa=aa}if((na|0)!=(k[((oa&1)==0?G:k[J>>2]|0)>>2]|0)){ja=T;ka=V;break c}aa=k[a>>2]|0;la=aa+12|0;ma=k[la>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){B=0;ya(k[(k[aa>>2]|0)+40>>2]|0,aa|0)|0;aa=B;B=0;if(aa&1){Y=40;break b}}else k[la>>2]=ma+4;i[g>>0]=1;ma=i[C>>0]|0;ja=T;ka=((ma&1)==0?(ma&255)>>>1:k[G>>2]|0)>>>0>1?C:V;break c}ma=k[a>>2]|0;la=k[ma+12>>2]|0;aa=k[ma+16>>2]|0;$=(la|0)==(aa|0);if(!_){if($){B=0;_=ya(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;pa=B;B=0;if(pa&1){Y=40;break b}qa=_;ra=i[A>>0]|0}else{qa=k[la>>2]|0;ra=Z}if((qa|0)!=(k[((ra&1)==0?c:k[K>>2]|0)>>2]|0)){i[g>>0]=1;ja=T;ka=V;break c}_=k[a>>2]|0;pa=_+12|0;sa=k[pa>>2]|0;if((sa|0)==(k[_+16>>2]|0)){B=0;ya(k[(k[_>>2]|0)+40>>2]|0,_|0)|0;_=B;B=0;if(_&1){Y=40;break b}}else k[pa>>2]=sa+4;sa=i[A>>0]|0;ja=T;ka=((sa&1)==0?(sa&255)>>>1:k[c>>2]|0)>>>0>1?A:V;break c}if($){B=0;$=ya(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;sa=B;B=0;if(sa&1){Y=40;break b}sa=k[a>>2]|0;ta=$;ua=i[A>>0]|0;xa=sa;za=k[sa+12>>2]|0;Aa=k[sa+16>>2]|0}else{ta=k[la>>2]|0;ua=Z;xa=ma;za=la;Aa=aa}aa=xa+12|0;la=(za|0)==(Aa|0);if((ta|0)==(k[((ua&1)==0?c:k[K>>2]|0)>>2]|0)){if(la){B=0;ya(k[(k[xa>>2]|0)+40>>2]|0,xa|0)|0;ma=B;B=0;if(ma&1){Y=40;break b}}else k[aa>>2]=za+4;aa=i[A>>0]|0;ja=T;ka=((aa&1)==0?(aa&255)>>>1:k[c>>2]|0)>>>0>1?A:V;break c}if(la){B=0;la=ya(k[(k[xa>>2]|0)+36>>2]|0,xa|0)|0;aa=B;B=0;if(aa&1){Y=40;break b}else Ba=la}else Ba=k[za>>2]|0;if((Ba|0)!=(k[((i[C>>0]&1)==0?G:k[J>>2]|0)>>2]|0)){Y=123;break b}la=k[a>>2]|0;aa=la+12|0;ma=k[aa>>2]|0;if((ma|0)==(k[la+16>>2]|0)){B=0;ya(k[(k[la>>2]|0)+40>>2]|0,la|0)|0;la=B;B=0;if(la&1){Y=40;break b}}else k[aa>>2]=ma+4;i[g>>0]=1;ma=i[C>>0]|0;ja=T;ka=((ma&1)==0?(ma&255)>>>1:k[G>>2]|0)>>>0>1?C:V}break}case 2:{if(!(U>>>0<2|(V|0)!=0)?!(L|(U|0)==2&(i[R>>0]|0)!=0):0){ja=T;ka=0;break c}ma=i[z>>0]|0;aa=k[M>>2]|0;la=(ma&1)==0?N:aa;d:do if((U|0)!=0?(l[v+(U+-1)>>0]|0)<2:0){Z=ma;sa=aa;$=la;while(1){pa=(Z&1)==0;_=$;if((_|0)==((pa?N:sa)+((pa?(Z&255)>>>1:k[N>>2]|0)<<2)|0)){Ca=Z;Da=sa;Ea=$;break}B=0;pa=Ia(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,k[_>>2]|0)|0;Fa=B;B=0;if(Fa&1){Y=37;break b}if(!pa){Ga=$;Y=131;break}Z=i[z>>0]|0;sa=k[M>>2]|0;$=_+4|0}if((Y|0)==131){Y=0;Ca=i[z>>0]|0;Da=k[M>>2]|0;Ea=Ga}$=(Ca&1)==0?N:Da;sa=$;Z=Ea-sa>>2;_=i[D>>0]|0;pa=(_&1)==0;Fa=pa?(_&255)>>>1:k[O>>2]|0;if(Z>>>0>Fa>>>0){Ha=ea;Ja=Ca;Ka=Da;La=ea;Ma=sa}else{_=(pa?O:k[P>>2]|0)+(Fa<<2)|0;Fa=$;$=_+(0-Z<<2)|0;while(1){if(($|0)==(_|0)){Ha=ea;Ja=Ca;Ka=Da;La=ea;Ma=Ea;break d}if((k[$>>2]|0)!=(k[Fa>>2]|0)){Ha=ea;Ja=Ca;Ka=Da;La=ea;Ma=sa;break d}Fa=Fa+4|0;$=$+4|0}}}else{Ha=ea;Ja=ma;Ka=aa;La=ea;Ma=la}while(0);e:while(1){la=(Ja&1)==0;aa=(la?N:Ka)+((la?(Ja&255)>>>1:k[N>>2]|0)<<2)|0;la=Ma;if((la|0)==(aa|0)){Na=aa;break}aa=k[a>>2]|0;do if(aa){ma=k[aa+12>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){B=0;$=ya(k[(k[aa>>2]|0)+36>>2]|0,aa|0)|0;Fa=B;B=0;if(Fa&1){Y=36;break b}else Oa=$}else Oa=k[ma>>2]|0;if((Oa|0)==-1){k[a>>2]=0;Pa=1;break}else{Pa=(k[a>>2]|0)==0;break}}else Pa=1;while(0);do if(La){aa=k[La+12>>2]|0;if((aa|0)==(k[La+16>>2]|0)){B=0;ma=ya(k[(k[La>>2]|0)+36>>2]|0,La|0)|0;$=B;B=0;if($&1){Y=36;break b}else Qa=ma}else Qa=k[aa>>2]|0;if((Qa|0)!=-1)if(Pa^(Ha|0)==0){Ra=Ha;Sa=Ha;break}else{Na=la;break e}else{k[b>>2]=0;Ta=0;Y=152;break}}else{Ta=Ha;Y=152}while(0);if((Y|0)==152){Y=0;if(Pa){Na=la;break}else{Ra=Ta;Sa=0}}aa=k[a>>2]|0;ma=k[aa+12>>2]|0;if((ma|0)==(k[aa+16>>2]|0)){B=0;$=ya(k[(k[aa>>2]|0)+36>>2]|0,aa|0)|0;aa=B;B=0;if(aa&1){Y=36;break b}else Ua=$}else Ua=k[ma>>2]|0;if((Ua|0)!=(k[la>>2]|0)){Na=la;break}ma=k[a>>2]|0;$=ma+12|0;aa=k[$>>2]|0;if((aa|0)==(k[ma+16>>2]|0)){B=0;ya(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=B;B=0;if(ma&1){Y=36;break b}}else k[$>>2]=aa+4;Ha=Ra;Ja=i[z>>0]|0;Ka=k[M>>2]|0;La=Sa;Ma=la+4|0}if(L?(aa=i[z>>0]|0,$=(aa&1)==0,(Na|0)!=(($?N:k[M>>2]|0)+(($?(aa&255)>>>1:k[N>>2]|0)<<2)|0)):0){Y=164;break b}else{ja=T;ka=V}break}case 4:{aa=k[x>>2]|0;$=ea;ma=ea;Fa=T;sa=0;f:while(1){_=k[a>>2]|0;do if(_){Z=k[_+12>>2]|0;if((Z|0)==(k[_+16>>2]|0)){B=0;pa=ya(k[(k[_>>2]|0)+36>>2]|0,_|0)|0;Va=B;B=0;if(Va&1){Y=39;break b}else Xa=pa}else Xa=k[Z>>2]|0;if((Xa|0)==-1){k[a>>2]=0;Ya=1;break}else{Ya=(k[a>>2]|0)==0;break}}else Ya=1;while(0);do if(ma){_=k[ma+12>>2]|0;if((_|0)==(k[ma+16>>2]|0)){B=0;la=ya(k[(k[ma>>2]|0)+36>>2]|0,ma|0)|0;Z=B;B=0;if(Z&1){Y=39;break b}else Za=la}else Za=k[_>>2]|0;if((Za|0)!=-1)if(Ya^($|0)==0){_a=$;$a=$;break}else{ab=Fa;bb=$;cb=sa;break f}else{k[b>>2]=0;db=0;Y=178;break}}else{db=$;Y=178}while(0);if((Y|0)==178){Y=0;if(Ya){ab=Fa;bb=db;cb=sa;break}else{_a=db;$a=0}}_=k[a>>2]|0;la=k[_+12>>2]|0;if((la|0)==(k[_+16>>2]|0)){B=0;Z=ya(k[(k[_>>2]|0)+36>>2]|0,_|0)|0;_=B;B=0;if(_&1){Y=39;break b}else fb=Z}else fb=k[la>>2]|0;B=0;la=Ia(k[(k[h>>2]|0)+12>>2]|0,h|0,2048,fb|0)|0;Z=B;B=0;if(Z&1){Y=39;break b}if(la){la=k[m>>2]|0;if((la|0)==(k[p>>2]|0)){B=0;eb(534,j|0,m|0,p|0);Z=B;B=0;if(Z&1){Y=39;break b}gb=k[m>>2]|0}else gb=la;k[m>>2]=gb+4;k[gb>>2]=fb;hb=Fa;ib=sa+1|0}else{la=i[y>>0]|0;if(!((fb|0)==(aa|0)&((sa|0)!=0?(((la&1)==0?(la&255)>>>1:k[S>>2]|0)|0)!=0:0))){ab=Fa;bb=_a;cb=sa;break}if((Fa|0)==(k[u>>2]|0)){B=0;eb(533,s|0,t|0,u|0);la=B;B=0;if(la&1){Y=39;break b}jb=k[t>>2]|0}else jb=Fa;la=jb+4|0;k[t>>2]=la;k[jb>>2]=sa;hb=la;ib=0}la=k[a>>2]|0;Z=la+12|0;_=k[Z>>2]|0;if((_|0)==(k[la+16>>2]|0)){B=0;ya(k[(k[la>>2]|0)+40>>2]|0,la|0)|0;la=B;B=0;if(la&1){Y=39;break b}else{$=_a;ma=$a;Fa=hb;sa=ib;continue}}else{k[Z>>2]=_+4;$=_a;ma=$a;Fa=hb;sa=ib;continue}}if((cb|0)!=0?(k[s>>2]|0)!=(ab|0):0){if((ab|0)==(k[u>>2]|0)){B=0;eb(533,s|0,t|0,u|0);sa=B;B=0;if(sa&1){Y=40;break b}kb=k[t>>2]|0}else kb=ab;sa=kb+4|0;k[t>>2]=sa;k[kb>>2]=cb;lb=sa}else lb=ab;sa=k[E>>2]|0;g:do if((sa|0)>0){Fa=k[a>>2]|0;do if(Fa){ma=k[Fa+12>>2]|0;if((ma|0)==(k[Fa+16>>2]|0)){B=0;$=ya(k[(k[Fa>>2]|0)+36>>2]|0,Fa|0)|0;aa=B;B=0;if(aa&1){Y=40;break b}else mb=$}else mb=k[ma>>2]|0;if((mb|0)==-1){k[a>>2]=0;nb=1;break}else{nb=(k[a>>2]|0)==0;break}}else nb=1;while(0);do if(bb){Fa=k[bb+12>>2]|0;if((Fa|0)==(k[bb+16>>2]|0)){B=0;ma=ya(k[(k[bb>>2]|0)+36>>2]|0,bb|0)|0;$=B;B=0;if($&1){Y=40;break b}else ob=ma}else ob=k[Fa>>2]|0;if((ob|0)!=-1)if(nb){pb=bb;break}else{Y=222;break b}else{k[b>>2]=0;Y=216;break}}else Y=216;while(0);if((Y|0)==216){Y=0;if(nb){Y=222;break b}else pb=0}Fa=k[a>>2]|0;ma=k[Fa+12>>2]|0;if((ma|0)==(k[Fa+16>>2]|0)){B=0;$=ya(k[(k[Fa>>2]|0)+36>>2]|0,Fa|0)|0;Fa=B;B=0;if(Fa&1){Y=40;break b}else qb=$}else qb=k[ma>>2]|0;if((qb|0)!=(k[w>>2]|0)){Y=222;break b}ma=k[a>>2]|0;$=ma+12|0;Fa=k[$>>2]|0;if((Fa|0)==(k[ma+16>>2]|0)){B=0;ya(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=B;B=0;if(ma&1){Y=40;break b}else{rb=pb;sb=sa;tb=pb}}else{k[$>>2]=Fa+4;rb=pb;sb=sa;tb=pb}while(1){if((sb|0)<=0)break g;Fa=k[a>>2]|0;do if(Fa){$=k[Fa+12>>2]|0;if(($|0)==(k[Fa+16>>2]|0)){B=0;ma=ya(k[(k[Fa>>2]|0)+36>>2]|0,Fa|0)|0;aa=B;B=0;if(aa&1){Y=38;break b}else ub=ma}else ub=k[$>>2]|0;if((ub|0)==-1){k[a>>2]=0;vb=1;break}else{vb=(k[a>>2]|0)==0;break}}else vb=1;while(0);do if(tb){Fa=k[tb+12>>2]|0;if((Fa|0)==(k[tb+16>>2]|0)){B=0;$=ya(k[(k[tb>>2]|0)+36>>2]|0,tb|0)|0;ma=B;B=0;if(ma&1){Y=38;break b}else wb=$}else wb=k[Fa>>2]|0;if((wb|0)!=-1)if(vb^(rb|0)==0){xb=rb;yb=rb;break}else{Y=247;break b}else{k[b>>2]=0;zb=0;Y=240;break}}else{zb=rb;Y=240}while(0);if((Y|0)==240){Y=0;if(vb){Y=247;break b}else{xb=zb;yb=0}}Fa=k[a>>2]|0;$=k[Fa+12>>2]|0;if(($|0)==(k[Fa+16>>2]|0)){B=0;ma=ya(k[(k[Fa>>2]|0)+36>>2]|0,Fa|0)|0;Fa=B;B=0;if(Fa&1){Y=38;break b}else Ab=ma}else Ab=k[$>>2]|0;B=0;$=Ia(k[(k[h>>2]|0)+12>>2]|0,h|0,2048,Ab|0)|0;ma=B;B=0;if(ma&1){Y=38;break b}if(!$){Y=247;break b}if((k[m>>2]|0)==(k[p>>2]|0)?(B=0,eb(534,j|0,m|0,p|0),$=B,B=0,$&1):0){Y=38;break b}$=k[a>>2]|0;ma=k[$+12>>2]|0;if((ma|0)==(k[$+16>>2]|0)){B=0;Fa=ya(k[(k[$>>2]|0)+36>>2]|0,$|0)|0;$=B;B=0;if($&1){Y=38;break b}else Bb=Fa}else Bb=k[ma>>2]|0;ma=k[m>>2]|0;k[m>>2]=ma+4;k[ma>>2]=Bb;ma=sb+-1|0;k[E>>2]=ma;Fa=k[a>>2]|0;$=Fa+12|0;aa=k[$>>2]|0;if((aa|0)==(k[Fa+16>>2]|0)){B=0;ya(k[(k[Fa>>2]|0)+40>>2]|0,Fa|0)|0;Fa=B;B=0;if(Fa&1){Y=38;break b}else{rb=xb;sb=ma;tb=yb;continue}}else{k[$>>2]=aa+4;rb=xb;sb=ma;tb=yb;continue}}}while(0);if((k[m>>2]|0)==(k[j>>2]|0)){Y=257;break b}else{ja=lb;ka=V}break}default:{ja=T;ka=V}}while(0);h:do if((Y|0)==60)while(1){Y=0;sa=k[a>>2]|0;do if(sa){ma=k[sa+12>>2]|0;if((ma|0)==(k[sa+16>>2]|0)){B=0;aa=ya(k[(k[sa>>2]|0)+36>>2]|0,sa|0)|0;$=B;B=0;if($&1){Y=35;break b}else Cb=aa}else Cb=k[ma>>2]|0;if((Cb|0)==-1){k[a>>2]=0;Db=1;break}else{Db=(k[a>>2]|0)==0;break}}else Db=1;while(0);do if(ia){sa=k[ia+12>>2]|0;if((sa|0)==(k[ia+16>>2]|0)){B=0;ma=ya(k[(k[ia>>2]|0)+36>>2]|0,ia|0)|0;aa=B;B=0;if(aa&1){Y=35;break b}else Eb=ma}else Eb=k[sa>>2]|0;if((Eb|0)!=-1)if(Db^(ha|0)==0){Fb=ha;Gb=ha;break}else{ja=T;ka=V;break h}else{k[b>>2]=0;Hb=0;Y=73;break}}else{Hb=ha;Y=73}while(0);if((Y|0)==73){Y=0;if(Db){ja=T;ka=V;break h}else{Fb=Hb;Gb=0}}sa=k[a>>2]|0;ma=k[sa+12>>2]|0;if((ma|0)==(k[sa+16>>2]|0)){B=0;aa=ya(k[(k[sa>>2]|0)+36>>2]|0,sa|0)|0;sa=B;B=0;if(sa&1){Y=35;break b}else Ib=aa}else Ib=k[ma>>2]|0;B=0;ma=Ia(k[(k[h>>2]|0)+12>>2]|0,h|0,8192,Ib|0)|0;aa=B;B=0;if(aa&1){Y=35;break b}if(!ma){ja=T;ka=V;break h}ma=k[a>>2]|0;aa=ma+12|0;sa=k[aa>>2]|0;if((sa|0)==(k[ma+16>>2]|0)){B=0;$=ya(k[(k[ma>>2]|0)+40>>2]|0,ma|0)|0;ma=B;B=0;if(ma&1){Y=35;break b}else Jb=$}else{k[aa>>2]=sa+4;Jb=k[sa>>2]|0}B=0;wa(529,D|0,Jb|0);sa=B;B=0;if(sa&1){Y=35;break b}else{ha=Fb;ia=Gb;Y=60}}while(0);T=ja;U=U+1|0;V=ka}i:switch(Y|0){case 35:{H=Rb()|0;I=Q;break a;break}case 36:{H=Rb()|0;I=Q;break a;break}case 37:{H=Rb()|0;I=Q;break a;break}case 38:{H=Rb()|0;I=Q;break a;break}case 39:{H=Rb()|0;I=Q;break a;break}case 40:{H=Rb()|0;I=Q;break a;break}case 58:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 123:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 164:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 222:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 247:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 257:{k[f>>2]=k[f>>2]|4;Kb=0;break}case 259:{j:do if(X){V=X+4|0;U=X+8|0;T=1;k:while(1){S=i[X>>0]|0;if(!(S&1))Lb=(S&255)>>>1;else Lb=k[V>>2]|0;if(T>>>0>=Lb>>>0)break j;S=k[a>>2]|0;do if(S){N=k[S+12>>2]|0;if((N|0)==(k[S+16>>2]|0)){B=0;M=ya(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;L=B;B=0;if(L&1){Y=34;break k}else Mb=M}else Mb=k[N>>2]|0;if((Mb|0)==-1){k[a>>2]=0;Nb=1;break}else{Nb=(k[a>>2]|0)==0;break}}else Nb=1;while(0);S=k[b>>2]|0;do if(S){N=k[S+12>>2]|0;if((N|0)==(k[S+16>>2]|0)){B=0;M=ya(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;L=B;B=0;if(L&1){Y=34;break k}else Ob=M}else Ob=k[N>>2]|0;if((Ob|0)!=-1)if(Nb)break;else{Y=286;break k}else{k[b>>2]=0;Y=278;break}}else Y=278;while(0);if((Y|0)==278?(Y=0,Nb):0){Y=286;break}S=k[a>>2]|0;N=k[S+12>>2]|0;if((N|0)==(k[S+16>>2]|0)){B=0;M=ya(k[(k[S>>2]|0)+36>>2]|0,S|0)|0;S=B;B=0;if(S&1){Y=34;break}else Pb=M}else Pb=k[N>>2]|0;if(!(i[X>>0]&1))Sb=V;else Sb=k[U>>2]|0;if((Pb|0)!=(k[Sb+(T<<2)>>2]|0)){Y=286;break}N=T+1|0;M=k[a>>2]|0;S=M+12|0;L=k[S>>2]|0;if((L|0)==(k[M+16>>2]|0)){B=0;ya(k[(k[M>>2]|0)+40>>2]|0,M|0)|0;M=B;B=0;if(M&1){Y=34;break}else{T=N;continue}}else{k[S>>2]=L+4;T=N;continue}}if((Y|0)==34){T=Rb()|0;H=T;I=Q;break a}else if((Y|0)==286){k[f>>2]=k[f>>2]|4;Kb=0;break i}}while(0);T=k[s>>2]|0;if((T|0)!=(W|0)){k[F>>2]=0;lAa(y,T,W,F);if(!(k[F>>2]|0)){Kb=1;break}else{k[f>>2]=k[f>>2]|4;Kb=0;break}}else Kb=1;break}}kva(D);kva(C);kva(A);kva(z);Yua(y);T=k[s>>2]|0;k[s>>2]=0;if((T|0)!=0?(B=0,va(k[n>>2]|0,T|0),T=B,B=0,T&1):0){T=Rb(0)|0;Dd(T)}r=o;return Kb|0}while(0);kva(D);kva(C);kva(A);kva(z);Yua(y);y=k[s>>2]|0;k[s>>2]=0;if((y|0)!=0?(B=0,va(k[n>>2]|0,y|0),y=B,B=0,y&1):0){y=Rb(0)|0;Dd(y)}Qb(H|0);return 0}function qAa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;a=r;r=r+432|0;h=a+424|0;j=a+24|0;l=a+16|0;m=a+8|0;n=a+4|0;o=a+428|0;p=a;k[l>>2]=j;q=l+4|0;k[q>>2]=552;s=j+400|0;B=0;t=ya(421,e|0)|0;u=B;B=0;if(!(u&1)){k[n>>2]=t;B=0;u=Xa(238,n|0,49312)|0;v=B;B=0;a:do if(!(v&1)?(i[o>>0]=0,w=k[c>>2]|0,k[p>>2]=w,x=k[e+4>>2]|0,y=w,B=0,k[h>>2]=k[p>>2],z=Ua(2,b|0,h|0,d|0,n|0,x|0,f|0,o|0,u|0,l|0,m|0,s|0)|0,x=B,B=0,!(x&1)):0){if(z){if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;if(i[o>>0]|0){B=0;z=Xa(k[(k[u>>2]|0)+44>>2]|0,u|0,45)|0;x=B;B=0;if(x&1)break;B=0;wa(529,g|0,z|0);z=B;B=0;if(z&1)break}B=0;z=Xa(k[(k[u>>2]|0)+44>>2]|0,u|0,48)|0;x=B;B=0;if(x&1)break;x=k[m>>2]|0;A=x+-4|0;C=k[l>>2]|0;while(1){if(C>>>0>=A>>>0){D=C;break}if((k[C>>2]|0)!=(z|0)){D=C;break}C=C+4|0}B=0;Ia(54,g|0,D|0,x|0)|0;C=B;B=0;if(C&1)break}C=k[b>>2]|0;do if(C){z=k[C+12>>2]|0;if((z|0)==(k[C+16>>2]|0)){B=0;A=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;E=B;B=0;if(E&1)break a;else F=A}else F=k[z>>2]|0;if((F|0)==-1){k[b>>2]=0;G=1;break}else{G=(k[b>>2]|0)==0;break}}else G=1;while(0);do if(w){C=k[y+12>>2]|0;if((C|0)==(k[y+16>>2]|0)){B=0;x=ya(k[(k[w>>2]|0)+36>>2]|0,y|0)|0;z=B;B=0;if(z&1)break a;else H=x}else H=k[C>>2]|0;if((H|0)!=-1)if(G)break;else{I=33;break}else{k[c>>2]=0;I=31;break}}else I=31;while(0);if((I|0)==31?G:0)I=33;if((I|0)==33)k[f>>2]=k[f>>2]|2;y=k[b>>2]|0;BEa(t)|0;w=k[l>>2]|0;k[l>>2]=0;if((w|0)!=0?(B=0,va(k[q>>2]|0,w|0),w=B,B=0,w&1):0){w=Rb(0)|0;Dd(w)}r=a;return y|0}while(0);a=Rb()|0;b=Q;BEa(t)|0;t=k[l>>2]|0;k[l>>2]=0;if(!t){J=b;K=a}else{L=a;M=b;N=t;I=39}}else{t=Rb()|0;k[l>>2]=0;L=t;M=Q;N=j;I=39}if((I|0)==39){B=0;va(k[q>>2]|0,N|0);N=B;B=0;if(N&1){N=Rb(0)|0;Dd(N)}else{J=M;K=L}}Qb(K|0);return 0}function rAa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;m=r;r=r+112|0;n=m+100|0;o=m+88|0;p=m+76|0;q=m+64|0;s=m+52|0;t=m+48|0;u=m+36|0;v=m+24|0;w=m+12|0;x=m;if(a){a=$Aa(b,49056)|0;Fc[k[(k[a>>2]|0)+44>>2]&1023](n,a);y=k[n>>2]|0;i[c>>0]=y;i[c+1>>0]=y>>8;i[c+2>>0]=y>>16;i[c+3>>0]=y>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](o,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);y=B;B=0;if(y&1){y=Rb(0)|0;Dd(y)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];y=0;while(1){if((y|0)==3)break;k[o+(y<<2)>>2]=0;y=y+1|0}kva(o);Fc[k[(k[a>>2]|0)+28>>2]&1023](p,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;B=0;wa(530,h|0,0);o=B;B=0;if(o&1){o=Rb(0)|0;Dd(o)};k[h>>2]=k[p>>2];k[h+4>>2]=k[p+4>>2];k[h+8>>2]=k[p+8>>2];o=0;while(1){if((o|0)==3)break;k[p+(o<<2)>>2]=0;o=o+1|0}kva(p);p=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;k[d>>2]=p;p=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;k[e>>2]=p;Fc[k[(k[a>>2]|0)+20>>2]&1023](q,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}B=0;wa(528,f|0,0);p=B;B=0;if(p&1){p=Rb(0)|0;Dd(p)};k[f>>2]=k[q>>2];k[f+4>>2]=k[q+4>>2];k[f+8>>2]=k[q+8>>2];p=0;while(1){if((p|0)==3)break;k[q+(p<<2)>>2]=0;p=p+1|0}Yua(q);Fc[k[(k[a>>2]|0)+24>>2]&1023](s,a);if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;B=0;wa(530,g|0,0);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}kva(s);z=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}else{a=$Aa(b,48992)|0;Fc[k[(k[a>>2]|0)+44>>2]&1023](t,a);b=k[t>>2]|0;i[c>>0]=b;i[c+1>>0]=b>>8;i[c+2>>0]=b>>16;i[c+3>>0]=b>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](u,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)};k[j>>2]=k[u>>2];k[j+4>>2]=k[u+4>>2];k[j+8>>2]=k[u+8>>2];j=0;while(1){if((j|0)==3)break;k[u+(j<<2)>>2]=0;j=j+1|0}kva(u);Fc[k[(k[a>>2]|0)+28>>2]&1023](v,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;B=0;wa(530,h|0,0);u=B;B=0;if(u&1){u=Rb(0)|0;Dd(u)};k[h>>2]=k[v>>2];k[h+4>>2]=k[v+4>>2];k[h+8>>2]=k[v+8>>2];h=0;while(1){if((h|0)==3)break;k[v+(h<<2)>>2]=0;h=h+1|0}kva(v);v=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;k[d>>2]=v;v=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;k[e>>2]=v;Fc[k[(k[a>>2]|0)+20>>2]&1023](w,a);if(!(i[f>>0]&1)){i[f+1>>0]=0;i[f>>0]=0}else{i[k[f+8>>2]>>0]=0;k[f+4>>2]=0}B=0;wa(528,f|0,0);v=B;B=0;if(v&1){v=Rb(0)|0;Dd(v)};k[f>>2]=k[w>>2];k[f+4>>2]=k[w+4>>2];k[f+8>>2]=k[w+8>>2];f=0;while(1){if((f|0)==3)break;k[w+(f<<2)>>2]=0;f=f+1|0}Yua(w);Fc[k[(k[a>>2]|0)+24>>2]&1023](x,a);if(!(i[g>>0]&1))i[g>>0]=0;else k[k[g+8>>2]>>2]=0;k[g+4>>2]=0;B=0;wa(530,g|0,0);w=B;B=0;if(w&1){w=Rb(0)|0;Dd(w)};k[g>>2]=k[x>>2];k[g+4>>2]=k[x+4>>2];k[g+8>>2]=k[x+8>>2];g=0;while(1){if((g|0)==3)break;k[x+(g<<2)>>2]=0;g=g+1|0}kva(x);z=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}k[l>>2]=z;r=m;return}function sAa(a){a=a|0;return}function tAa(a){a=a|0;Sqa(a);return}function uAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;a=r;r=r+384|0;g=a+8|0;h=a;j=a+284|0;l=a+72|0;m=a+184|0;n=a+68|0;o=a+180|0;q=a+177|0;s=a+176|0;t=a+56|0;u=a+44|0;v=a+32|0;w=a+28|0;x=a+76|0;y=a+24|0;z=a+20|0;A=a+16|0;k[l>>2]=j;p[g>>3]=f;C=pta(j,100,159241,g)|0;do if(C>>>0>99){B=0;j=bb(3)|0;D=B;B=0;if(!(D&1)?(B=0,p[h>>3]=f,D=cb(69,l|0,j|0,159241,h|0)|0,j=B,B=0,!(j&1)):0){j=k[l>>2]|0;if(!j){B=0;fb(7);E=B;B=0;if(E&1){F=0;G=0;H=8;break}I=k[l>>2]|0}else I=j;j=lua(D)|0;E=j;if(!j){B=0;fb(7);J=B;B=0;if(J&1){F=E;G=I;H=8}else{K=0;L=E;M=I;N=D;H=11}}else{K=j;L=E;M=I;N=D;H=11}}else{F=0;G=0;H=8}}else{K=m;L=0;M=0;N=C;H=11}while(0);if((H|0)==11){B=0;C=ya(421,d|0)|0;m=B;B=0;if(m&1){F=L;G=M;H=8}else{k[n>>2]=C;B=0;m=Xa(238,n|0,49320)|0;I=B;B=0;if(!(I&1)?(I=k[l>>2]|0,B=0,cb(k[(k[m>>2]|0)+32>>2]|0,m|0,I|0,I+N|0,K|0)|0,I=B,B=0,!(I&1)):0){if(!N)O=0;else O=(i[k[l>>2]>>0]|0)==45;l=0;while(1){if((l|0)==3)break;k[t+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[u+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[v+(l<<2)>>2]=0;l=l+1|0}B=0;Wa(3,c|0,O|0,n|0,o|0,q|0,s|0,t|0,u|0,v|0,w|0);c=B;B=0;if(!(c&1)){c=k[w>>2]|0;if((N|0)>(c|0)){w=i[v>>0]|0;l=i[u>>0]|0;P=(N-c<<1|1)+c+((w&1)==0?(w&255)>>>1:k[v+4>>2]|0)+((l&1)==0?(l&255)>>>1:k[u+4>>2]|0)|0}else{l=i[v>>0]|0;w=i[u>>0]|0;P=c+2+((l&1)==0?(l&255)>>>1:k[v+4>>2]|0)+((w&1)==0?(w&255)>>>1:k[u+4>>2]|0)|0}if(P>>>0>100){w=lua(P)|0;P=w;if(!w){B=0;fb(7);l=B;B=0;if(l&1)R=P;else{S=P;T=0;H=36}}else{S=P;T=w;H=36}}else{S=0;T=x;H=36}if((H|0)==36){B=0;Ja(1,T|0,y|0,z|0,k[d+4>>2]|0,K|0,K+N|0,m|0,O|0,o|0,i[q>>0]|0,i[s>>0]|0,t|0,u|0,v|0,c|0);c=B;B=0;if(!(c&1)?(k[A>>2]=k[b>>2],b=k[y>>2]|0,y=k[z>>2]|0,B=0,k[g>>2]=k[A>>2],A=xa(39,g|0,T|0,b|0,y|0,d|0,e|0)|0,e=B,B=0,!(e&1)):0){if(!S)U=C;else{mua(S);U=k[n>>2]|0}Yua(v);Yua(u);Yua(t);BEa(U)|0;if(L)mua(L);if(M)mua(M);r=a;return A|0}else R=S}S=Rb()|0;A=Q;if(!R){V=S;W=A;X=C}else{mua(R);V=S;W=A;X=k[n>>2]|0}}else{n=Rb()|0;V=n;W=Q;X=C}Yua(v);Yua(u);Yua(t);Y=V;Z=W;_=X}else{X=Rb()|0;Y=X;Z=Q;_=C}BEa(_)|0;$=Y;aa=Z;ba=L;ca=M}}if((H|0)==8){H=Rb()|0;$=H;aa=Q;ba=F;ca=G}if(ba)mua(ba);if(ca)mua(ca);Qb($|0);return 0}function vAa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;m=r;r=r+112|0;n=m+108|0;o=m+96|0;p=m+92|0;q=m+80|0;s=m+68|0;t=m+56|0;u=m+52|0;v=m+40|0;w=m+36|0;x=m+24|0;y=m+12|0;z=m;if(a){a=$Aa(c,48928)|0;A=k[a>>2]|0;if(b){Fc[k[A+44>>2]&1023](n,a);C=k[n>>2]|0;i[d>>0]=C;i[d+1>>0]=C>>8;i[d+2>>0]=C>>16;i[d+3>>0]=C>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](o,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);C=B;B=0;if(C&1){C=Rb(0)|0;Dd(C)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}Yua(o);D=a}else{Fc[k[A+40>>2]&1023](p,a);A=k[p>>2]|0;i[d>>0]=A;i[d+1>>0]=A>>8;i[d+2>>0]=A>>16;i[d+3>>0]=A>>24;Fc[k[(k[a>>2]|0)+28>>2]&1023](q,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);A=B;B=0;if(A&1){A=Rb(0)|0;Dd(A)};k[j>>2]=k[q>>2];k[j+4>>2]=k[q+4>>2];k[j+8>>2]=k[q+8>>2];A=0;while(1){if((A|0)==3)break;k[q+(A<<2)>>2]=0;A=A+1|0}Yua(q);D=a}q=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;i[e>>0]=q;q=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;i[f>>0]=q;Fc[k[(k[D>>2]|0)+20>>2]&1023](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}Yua(s);Fc[k[(k[D>>2]|0)+24>>2]&1023](t,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}B=0;wa(528,h|0,0);D=B;B=0;if(D&1){D=Rb(0)|0;Dd(D)};k[h>>2]=k[t>>2];k[h+4>>2]=k[t+4>>2];k[h+8>>2]=k[t+8>>2];D=0;while(1){if((D|0)==3)break;k[t+(D<<2)>>2]=0;D=D+1|0}Yua(t);E=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}else{a=$Aa(c,48864)|0;c=k[a>>2]|0;if(b){Fc[k[c+44>>2]&1023](u,a);b=k[u>>2]|0;i[d>>0]=b;i[d+1>>0]=b>>8;i[d+2>>0]=b>>16;i[d+3>>0]=b>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](v,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)};k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];b=0;while(1){if((b|0)==3)break;k[v+(b<<2)>>2]=0;b=b+1|0}Yua(v);F=a}else{Fc[k[c+40>>2]&1023](w,a);c=k[w>>2]|0;i[d>>0]=c;i[d+1>>0]=c>>8;i[d+2>>0]=c>>16;i[d+3>>0]=c>>24;Fc[k[(k[a>>2]|0)+28>>2]&1023](x,a);if(!(i[j>>0]&1)){i[j+1>>0]=0;i[j>>0]=0}else{i[k[j+8>>2]>>0]=0;k[j+4>>2]=0}B=0;wa(528,j|0,0);c=B;B=0;if(c&1){c=Rb(0)|0;Dd(c)};k[j>>2]=k[x>>2];k[j+4>>2]=k[x+4>>2];k[j+8>>2]=k[x+8>>2];j=0;while(1){if((j|0)==3)break;k[x+(j<<2)>>2]=0;j=j+1|0}Yua(x);F=a}x=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;i[e>>0]=x;x=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;i[f>>0]=x;Fc[k[(k[F>>2]|0)+20>>2]&1023](y,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);x=B;B=0;if(x&1){x=Rb(0)|0;Dd(x)};k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];g=0;while(1){if((g|0)==3)break;k[y+(g<<2)>>2]=0;g=g+1|0}Yua(y);Fc[k[(k[F>>2]|0)+24>>2]&1023](z,a);if(!(i[h>>0]&1)){i[h+1>>0]=0;i[h>>0]=0}else{i[k[h+8>>2]>>0]=0;k[h+4>>2]=0}B=0;wa(528,h|0,0);F=B;B=0;if(F&1){F=Rb(0)|0;Dd(F)};k[h>>2]=k[z>>2];k[h+4>>2]=k[z+4>>2];k[h+8>>2]=k[z+8>>2];h=0;while(1){if((h|0)==3)break;k[z+(h<<2)>>2]=0;h=h+1|0}Yua(z);E=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}k[l>>2]=E;r=m;return}function wAa(a,b,c,d,e,f,g,h,l,m,n,o,p,q,r){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;k[c>>2]=a;s=q+4|0;t=q+8|0;u=q+1|0;v=p+4|0;w=(d&512|0)==0;x=p+8|0;y=p+1|0;z=g+8|0;A=(r|0)>0;B=o+4|0;C=o+8|0;D=o+1|0;E=e;e=0;while(1){if((e|0)==4)break;a:do switch(i[l+e>>0]|0){case 0:{k[b>>2]=k[c>>2];F=E;break}case 1:{k[b>>2]=k[c>>2];G=ed[k[(k[g>>2]|0)+28>>2]&511](g,32)|0;H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=G;F=E;break}case 3:{G=i[q>>0]|0;H=(G&1)==0;if(!((H?(G&255)>>>1:k[s>>2]|0)|0))F=E;else{G=i[(H?u:k[t>>2]|0)>>0]|0;H=k[c>>2]|0;k[c>>2]=H+1;i[H>>0]=G;F=E}break}case 2:{G=i[p>>0]|0;H=(G&1)==0;I=H?(G&255)>>>1:k[v>>2]|0;if(w|(I|0)==0)F=E;else{G=H?y:k[x>>2]|0;H=G+I|0;I=k[c>>2]|0;J=G;while(1){if((J|0)==(H|0)){K=I;break}i[I>>0]=i[J>>0]|0;I=I+1|0;J=J+1|0}k[c>>2]=K;F=E}break}case 4:{J=k[c>>2]|0;I=h?E+1|0:E;H=I;while(1){if(H>>>0>=f>>>0){L=H;break}G=i[H>>0]|0;if(G<<24>>24<=-1){L=H;break}if(!(j[(k[z>>2]|0)+(G<<24>>24<<1)>>1]&2048)){L=H;break}H=H+1|0}if(A){H=L;G=r;while(1){M=(G|0)>0;if(!(H>>>0>I>>>0&M))break;N=H+-1|0;O=i[N>>0]|0;P=k[c>>2]|0;k[c>>2]=P+1;i[P>>0]=O;H=N;G=G+-1|0}if(M)Q=ed[k[(k[g>>2]|0)+28>>2]&511](g,48)|0;else Q=0;N=G;while(1){O=k[c>>2]|0;k[c>>2]=O+1;if((N|0)<=0){R=O;break}i[O>>0]=Q;N=N+-1|0}i[R>>0]=m;S=H}else S=L;b:do if((S|0)==(I|0)){N=ed[k[(k[g>>2]|0)+28>>2]&511](g,48)|0;G=k[c>>2]|0;k[c>>2]=G+1;i[G>>0]=N}else{N=i[o>>0]|0;G=(N&1)==0;if(!((G?(N&255)>>>1:k[B>>2]|0)|0)){T=S;U=-1;V=0;W=0}else{T=S;U=i[(G?D:k[C>>2]|0)>>0]|0;V=0;W=0}while(1){if((T|0)==(I|0))break b;if((W|0)==(U|0)){G=k[c>>2]|0;k[c>>2]=G+1;i[G>>0]=n;G=V+1|0;N=i[o>>0]|0;O=(N&1)==0;if(G>>>0<(O?(N&255)>>>1:k[B>>2]|0)>>>0){N=i[(O?D:k[C>>2]|0)+G>>0]|0;X=N<<24>>24==127?-1:N<<24>>24;Y=G;Z=0}else{X=W;Y=G;Z=0}}else{X=U;Y=V;Z=W}G=T+-1|0;N=i[G>>0]|0;O=k[c>>2]|0;k[c>>2]=O+1;i[O>>0]=N;T=G;U=X;V=Y;W=Z+1|0}}while(0);H=k[c>>2]|0;if((J|0)==(H|0))F=I;else{G=H;H=J;while(1){N=G+-1|0;if(H>>>0>=N>>>0){F=I;break a}O=i[H>>0]|0;i[H>>0]=i[N>>0]|0;i[N>>0]=O;G=N;H=H+1|0}}break}default:F=E}while(0);E=F;e=e+1|0}e=i[q>>0]|0;q=(e&1)==0;F=q?(e&255)>>>1:k[s>>2]|0;if(F>>>0>1){s=q?u:k[t>>2]|0;t=s+F|0;F=k[c>>2]|0;u=s;while(1){s=u+1|0;if((s|0)==(t|0)){_=F;break}i[F>>0]=i[s>>0]|0;F=F+1|0;u=s}k[c>>2]=_}switch(d&176|0){case 32:{k[b>>2]=k[c>>2];break}case 16:break;default:k[b>>2]=a}return}function xAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+176|0;g=a+56|0;h=a+52|0;j=a+164|0;l=a+161|0;m=a+160|0;n=a+40|0;o=a+28|0;p=a+16|0;q=a+12|0;s=a+60|0;t=a+8|0;u=a+4|0;v=a;w=xva(d)|0;k[h>>2]=w;B=0;x=Xa(238,h|0,49320)|0;y=B;B=0;do if(y&1)z=22;else{A=i[f>>0]|0;C=(A&1)==0;D=f+4|0;if(!((C?(A&255)>>>1:k[D>>2]|0)|0))E=0;else{A=i[(C?f+1|0:k[f+8>>2]|0)>>0]|0;B=0;C=Xa(k[(k[x>>2]|0)+28>>2]|0,x|0,45)|0;F=B;B=0;if(F&1){z=22;break}E=A<<24>>24==C<<24>>24}C=0;while(1){if((C|0)==3)break;k[n+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[p+(C<<2)>>2]=0;C=C+1|0}B=0;Wa(3,c|0,E|0,h|0,j|0,l|0,m|0,n|0,o|0,p|0,q|0);C=B;B=0;if(!(C&1)){C=i[f>>0]|0;A=k[D>>2]|0;F=(C&1)==0?(C&255)>>>1:A;G=k[q>>2]|0;if((F|0)>(G|0)){H=i[p>>0]|0;I=i[o>>0]|0;J=(F-G<<1|1)+G+((H&1)==0?(H&255)>>>1:k[p+4>>2]|0)+((I&1)==0?(I&255)>>>1:k[o+4>>2]|0)|0}else{I=i[p>>0]|0;H=i[o>>0]|0;J=G+2+((I&1)==0?(I&255)>>>1:k[p+4>>2]|0)+((H&1)==0?(H&255)>>>1:k[o+4>>2]|0)|0}if(J>>>0>100){H=lua(J)|0;I=H;if(!H){B=0;fb(7);F=B;B=0;if(F&1)K=I;else{L=i[f>>0]|0;M=k[D>>2]|0;N=I;O=0;z=26}}else{L=C;M=A;N=I;O=H;z=26}}else{L=C;M=A;N=0;O=s;z=26}if((z|0)==26){A=(L&1)==0;C=A?f+1|0:k[f+8>>2]|0;B=0;Ja(1,O|0,t|0,u|0,k[d+4>>2]|0,C|0,C+(A?(L&255)>>>1:M)|0,x|0,E|0,j|0,i[l>>0]|0,i[m>>0]|0,n|0,o|0,p|0,G|0);G=B;B=0;if(!(G&1)?(k[v>>2]=k[b>>2],G=k[t>>2]|0,A=k[u>>2]|0,B=0,k[g>>2]=k[v>>2],C=xa(39,g|0,O|0,G|0,A|0,d|0,e|0)|0,A=B,B=0,!(A&1)):0){if(!N)P=w;else{mua(N);P=k[h>>2]|0}Yua(p);Yua(o);Yua(n);BEa(P)|0;r=a;return C|0}else K=N}C=Rb()|0;A=Q;if(!K){R=C;S=A;T=w}else{mua(K);R=C;S=A;T=k[h>>2]|0}}else{A=Rb()|0;R=A;S=Q;T=w}Yua(p);Yua(o);Yua(n);U=R;V=S;W=T}while(0);if((z|0)==22){z=Rb()|0;U=z;V=Q;W=w}BEa(W)|0;Qb(U|0);return 0}function yAa(a){a=a|0;return}function zAa(a){a=a|0;Sqa(a);return}function AAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;a=r;r=r+1008|0;g=a+8|0;h=a;j=a+896|0;l=a+888|0;m=a+488|0;n=a+480|0;o=a+892|0;q=a+476|0;s=a+472|0;t=a+460|0;u=a+448|0;v=a+436|0;w=a+432|0;x=a+32|0;y=a+24|0;z=a+20|0;A=a+16|0;k[l>>2]=j;p[g>>3]=f;C=pta(j,100,159241,g)|0;do if(C>>>0>99){B=0;j=bb(3)|0;D=B;B=0;if(!(D&1)?(B=0,p[h>>3]=f,D=cb(69,l|0,j|0,159241,h|0)|0,j=B,B=0,!(j&1)):0){j=k[l>>2]|0;if(!j){B=0;fb(7);E=B;B=0;if(E&1){F=0;G=0;H=8;break}I=k[l>>2]|0}else I=j;j=lua(D<<2)|0;E=j;if(!j){B=0;fb(7);J=B;B=0;if(J&1){F=E;G=I;H=8}else{K=0;L=E;M=I;N=D;H=11}}else{K=j;L=E;M=I;N=D;H=11}}else{F=0;G=0;H=8}}else{K=m;L=0;M=0;N=C;H=11}while(0);if((H|0)==11){B=0;C=ya(421,d|0)|0;m=B;B=0;if(m&1){F=L;G=M;H=8}else{k[n>>2]=C;B=0;m=Xa(238,n|0,49312)|0;I=B;B=0;if(!(I&1)?(I=k[l>>2]|0,B=0,cb(k[(k[m>>2]|0)+48>>2]|0,m|0,I|0,I+N|0,K|0)|0,I=B,B=0,!(I&1)):0){if(!N)O=0;else O=(i[k[l>>2]>>0]|0)==45;l=0;while(1){if((l|0)==3)break;k[t+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[u+(l<<2)>>2]=0;l=l+1|0}l=0;while(1){if((l|0)==3)break;k[v+(l<<2)>>2]=0;l=l+1|0}B=0;Wa(4,c|0,O|0,n|0,o|0,q|0,s|0,t|0,u|0,v|0,w|0);c=B;B=0;if(!(c&1)){c=k[w>>2]|0;if((N|0)>(c|0)){w=i[v>>0]|0;l=i[u>>0]|0;P=(N-c<<1|1)+c+((w&1)==0?(w&255)>>>1:k[v+4>>2]|0)+((l&1)==0?(l&255)>>>1:k[u+4>>2]|0)|0}else{l=i[v>>0]|0;w=i[u>>0]|0;P=c+2+((l&1)==0?(l&255)>>>1:k[v+4>>2]|0)+((w&1)==0?(w&255)>>>1:k[u+4>>2]|0)|0}if(P>>>0>100){w=lua(P<<2)|0;P=w;if(!w){B=0;fb(7);l=B;B=0;if(l&1)R=P;else{S=P;T=0;H=36}}else{S=P;T=w;H=36}}else{S=0;T=x;H=36}if((H|0)==36){B=0;Ja(2,T|0,y|0,z|0,k[d+4>>2]|0,K|0,K+(N<<2)|0,m|0,O|0,o|0,k[q>>2]|0,k[s>>2]|0,t|0,u|0,v|0,c|0);c=B;B=0;if(!(c&1)?(k[A>>2]=k[b>>2],b=k[y>>2]|0,y=k[z>>2]|0,B=0,k[g>>2]=k[A>>2],A=xa(40,g|0,T|0,b|0,y|0,d|0,e|0)|0,e=B,B=0,!(e&1)):0){if(!S)U=C;else{mua(S);U=k[n>>2]|0}kva(v);kva(u);Yua(t);BEa(U)|0;if(L)mua(L);if(M)mua(M);r=a;return A|0}else R=S}S=Rb()|0;A=Q;if(!R){V=S;W=A;X=C}else{mua(R);V=S;W=A;X=k[n>>2]|0}}else{n=Rb()|0;V=n;W=Q;X=C}kva(v);kva(u);Yua(t);Y=V;Z=W;_=X}else{X=Rb()|0;Y=X;Z=Q;_=C}BEa(_)|0;$=Y;aa=Z;ba=L;ca=M}}if((H|0)==8){H=Rb()|0;$=H;aa=Q;ba=F;ca=G}if(ba)mua(ba);if(ca)mua(ca);Qb($|0);return 0}function BAa(a,b,c,d,e,f,g,h,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;m=r;r=r+112|0;n=m+108|0;o=m+96|0;p=m+92|0;q=m+80|0;s=m+68|0;t=m+56|0;u=m+52|0;v=m+40|0;w=m+36|0;x=m+24|0;y=m+12|0;z=m;if(a){a=$Aa(c,49056)|0;A=k[a>>2]|0;if(b){Fc[k[A+44>>2]&1023](n,a);C=k[n>>2]|0;i[d>>0]=C;i[d+1>>0]=C>>8;i[d+2>>0]=C>>16;i[d+3>>0]=C>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](o,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);C=B;B=0;if(C&1){C=Rb(0)|0;Dd(C)};k[j>>2]=k[o>>2];k[j+4>>2]=k[o+4>>2];k[j+8>>2]=k[o+8>>2];C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}kva(o)}else{Fc[k[A+40>>2]&1023](p,a);A=k[p>>2]|0;i[d>>0]=A;i[d+1>>0]=A>>8;i[d+2>>0]=A>>16;i[d+3>>0]=A>>24;Fc[k[(k[a>>2]|0)+28>>2]&1023](q,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);A=B;B=0;if(A&1){A=Rb(0)|0;Dd(A)};k[j>>2]=k[q>>2];k[j+4>>2]=k[q+4>>2];k[j+8>>2]=k[q+8>>2];A=0;while(1){if((A|0)==3)break;k[q+(A<<2)>>2]=0;A=A+1|0}kva(q)}q=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;k[e>>2]=q;q=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;k[f>>2]=q;Fc[k[(k[a>>2]|0)+20>>2]&1023](s,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)};k[g>>2]=k[s>>2];k[g+4>>2]=k[s+4>>2];k[g+8>>2]=k[s+8>>2];q=0;while(1){if((q|0)==3)break;k[s+(q<<2)>>2]=0;q=q+1|0}Yua(s);Fc[k[(k[a>>2]|0)+24>>2]&1023](t,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;B=0;wa(530,h|0,0);s=B;B=0;if(s&1){s=Rb(0)|0;Dd(s)};k[h>>2]=k[t>>2];k[h+4>>2]=k[t+4>>2];k[h+8>>2]=k[t+8>>2];s=0;while(1){if((s|0)==3)break;k[t+(s<<2)>>2]=0;s=s+1|0}kva(t);D=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}else{a=$Aa(c,48992)|0;c=k[a>>2]|0;if(b){Fc[k[c+44>>2]&1023](u,a);b=k[u>>2]|0;i[d>>0]=b;i[d+1>>0]=b>>8;i[d+2>>0]=b>>16;i[d+3>>0]=b>>24;Fc[k[(k[a>>2]|0)+32>>2]&1023](v,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)};k[j>>2]=k[v>>2];k[j+4>>2]=k[v+4>>2];k[j+8>>2]=k[v+8>>2];b=0;while(1){if((b|0)==3)break;k[v+(b<<2)>>2]=0;b=b+1|0}kva(v)}else{Fc[k[c+40>>2]&1023](w,a);c=k[w>>2]|0;i[d>>0]=c;i[d+1>>0]=c>>8;i[d+2>>0]=c>>16;i[d+3>>0]=c>>24;Fc[k[(k[a>>2]|0)+28>>2]&1023](x,a);if(!(i[j>>0]&1))i[j>>0]=0;else k[k[j+8>>2]>>2]=0;k[j+4>>2]=0;B=0;wa(530,j|0,0);c=B;B=0;if(c&1){c=Rb(0)|0;Dd(c)};k[j>>2]=k[x>>2];k[j+4>>2]=k[x+4>>2];k[j+8>>2]=k[x+8>>2];j=0;while(1){if((j|0)==3)break;k[x+(j<<2)>>2]=0;j=j+1|0}kva(x)}x=Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0;k[e>>2]=x;x=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;k[f>>2]=x;Fc[k[(k[a>>2]|0)+20>>2]&1023](y,a);if(!(i[g>>0]&1)){i[g+1>>0]=0;i[g>>0]=0}else{i[k[g+8>>2]>>0]=0;k[g+4>>2]=0}B=0;wa(528,g|0,0);x=B;B=0;if(x&1){x=Rb(0)|0;Dd(x)};k[g>>2]=k[y>>2];k[g+4>>2]=k[y+4>>2];k[g+8>>2]=k[y+8>>2];g=0;while(1){if((g|0)==3)break;k[y+(g<<2)>>2]=0;g=g+1|0}Yua(y);Fc[k[(k[a>>2]|0)+24>>2]&1023](z,a);if(!(i[h>>0]&1))i[h>>0]=0;else k[k[h+8>>2]>>2]=0;k[h+4>>2]=0;B=0;wa(530,h|0,0);y=B;B=0;if(y&1){y=Rb(0)|0;Dd(y)};k[h>>2]=k[z>>2];k[h+4>>2]=k[z+4>>2];k[h+8>>2]=k[z+8>>2];h=0;while(1){if((h|0)==3)break;k[z+(h<<2)>>2]=0;h=h+1|0}kva(z);D=Hc[k[(k[a>>2]|0)+36>>2]&511](a)|0}k[l>>2]=D;r=m;return}function CAa(a,b,c,d,e,f,g,h,j,l,m,n,o,p,q){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;k[c>>2]=a;r=p+4|0;s=p+8|0;t=o+4|0;u=(d&512|0)==0;v=o+8|0;w=(q|0)>0;x=n+4|0;y=n+8|0;z=n+1|0;A=e;e=0;while(1){if((e|0)==4)break;a:do switch(i[j+e>>0]|0){case 0:{k[b>>2]=k[c>>2];B=A;break}case 1:{k[b>>2]=k[c>>2];C=ed[k[(k[g>>2]|0)+44>>2]&511](g,32)|0;D=k[c>>2]|0;k[c>>2]=D+4;k[D>>2]=C;B=A;break}case 3:{C=i[p>>0]|0;D=(C&1)==0;if(!((D?(C&255)>>>1:k[r>>2]|0)|0))B=A;else{C=k[(D?r:k[s>>2]|0)>>2]|0;D=k[c>>2]|0;k[c>>2]=D+4;k[D>>2]=C;B=A}break}case 2:{C=i[o>>0]|0;D=(C&1)==0;E=D?(C&255)>>>1:k[t>>2]|0;if(u|(E|0)==0)B=A;else{C=D?t:k[v>>2]|0;D=C+(E<<2)|0;F=k[c>>2]|0;G=F;H=C;while(1){if((H|0)==(D|0))break;k[G>>2]=k[H>>2];G=G+4|0;H=H+4|0}k[c>>2]=F+(E<<2);B=A}break}case 4:{H=k[c>>2]|0;G=h?A+4|0:A;D=G;while(1){if(D>>>0>=f>>>0){I=D;break}if(!(Rc[k[(k[g>>2]|0)+12>>2]&63](g,2048,k[D>>2]|0)|0)){I=D;break}D=D+4|0}if(w){D=I;E=q;while(1){J=(E|0)>0;if(!(D>>>0>G>>>0&J))break;F=D+-4|0;C=k[F>>2]|0;K=k[c>>2]|0;k[c>>2]=K+4;k[K>>2]=C;D=F;E=E+-1|0}if(J)L=ed[k[(k[g>>2]|0)+44>>2]&511](g,48)|0;else L=0;F=k[c>>2]|0;C=E;while(1){K=F+4|0;if((C|0)<=0){M=F;N=K;break}k[F>>2]=L;F=K;C=C+-1|0}k[c>>2]=N;k[M>>2]=l;O=D}else O=I;if((O|0)==(G|0)){C=ed[k[(k[g>>2]|0)+44>>2]&511](g,48)|0;F=k[c>>2]|0;E=F+4|0;k[c>>2]=E;k[F>>2]=C;P=E}else{E=i[n>>0]|0;C=(E&1)==0;F=k[x>>2]|0;if(!((C?(E&255)>>>1:F)|0)){Q=O;R=-1;S=0;T=0}else{Q=O;R=i[(C?z:k[y>>2]|0)>>0]|0;S=0;T=0}while(1){if((Q|0)==(G|0))break;C=k[c>>2]|0;if((T|0)==(R|0)){E=C+4|0;k[c>>2]=E;k[C>>2]=m;K=S+1|0;U=i[n>>0]|0;V=(U&1)==0;if(K>>>0<(V?(U&255)>>>1:F)>>>0){U=i[(V?z:k[y>>2]|0)+K>>0]|0;W=E;X=U<<24>>24==127?-1:U<<24>>24;Y=K;Z=0}else{W=E;X=T;Y=K;Z=0}}else{W=C;X=R;Y=S;Z=T}C=Q+-4|0;K=k[C>>2]|0;k[c>>2]=W+4;k[W>>2]=K;Q=C;R=X;S=Y;T=Z+1|0}P=k[c>>2]|0}if((H|0)==(P|0))B=G;else{F=P;D=H;while(1){C=F+-4|0;if(D>>>0>=C>>>0){B=G;break a}K=k[D>>2]|0;k[D>>2]=k[C>>2];k[C>>2]=K;F=C;D=D+4|0}}break}default:B=A}while(0);A=B;e=e+1|0}e=i[p>>0]|0;p=(e&1)==0;B=p?(e&255)>>>1:k[r>>2]|0;if(B>>>0>1){e=p?r:k[s>>2]|0;s=e+4|0;r=e+(B<<2)|0;B=k[c>>2]|0;e=r-s|0;p=B;A=s;while(1){if((A|0)==(r|0))break;k[p>>2]=k[A>>2];p=p+4|0;A=A+4|0}k[c>>2]=B+(e>>>2<<2)}switch(d&176|0){case 32:{k[b>>2]=k[c>>2];break}case 16:break;default:k[b>>2]=a}return}function DAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+480|0;g=a+468|0;h=a+464|0;j=a+472|0;l=a+460|0;m=a+456|0;n=a+444|0;o=a+432|0;p=a+420|0;q=a+416|0;s=a+16|0;t=a+8|0;u=a+4|0;v=a;w=xva(d)|0;k[h>>2]=w;B=0;x=Xa(238,h|0,49312)|0;y=B;B=0;do if(y&1)z=22;else{A=i[f>>0]|0;C=(A&1)==0;D=f+4|0;if(!((C?(A&255)>>>1:k[D>>2]|0)|0))E=0;else{A=k[(C?D:k[f+8>>2]|0)>>2]|0;B=0;C=Xa(k[(k[x>>2]|0)+44>>2]|0,x|0,45)|0;F=B;B=0;if(F&1){z=22;break}E=(A|0)==(C|0)}C=0;while(1){if((C|0)==3)break;k[n+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[o+(C<<2)>>2]=0;C=C+1|0}C=0;while(1){if((C|0)==3)break;k[p+(C<<2)>>2]=0;C=C+1|0}B=0;Wa(4,c|0,E|0,h|0,j|0,l|0,m|0,n|0,o|0,p|0,q|0);C=B;B=0;if(!(C&1)){C=i[f>>0]|0;A=k[D>>2]|0;F=(C&1)==0?(C&255)>>>1:A;G=k[q>>2]|0;if((F|0)>(G|0)){H=i[p>>0]|0;I=i[o>>0]|0;J=(F-G<<1|1)+G+((H&1)==0?(H&255)>>>1:k[p+4>>2]|0)+((I&1)==0?(I&255)>>>1:k[o+4>>2]|0)|0}else{I=i[p>>0]|0;H=i[o>>0]|0;J=G+2+((I&1)==0?(I&255)>>>1:k[p+4>>2]|0)+((H&1)==0?(H&255)>>>1:k[o+4>>2]|0)|0}if(J>>>0>100){H=lua(J<<2)|0;I=H;if(!H){B=0;fb(7);F=B;B=0;if(F&1)K=I;else{L=i[f>>0]|0;M=k[D>>2]|0;N=I;O=0;z=26}}else{L=C;M=A;N=I;O=H;z=26}}else{L=C;M=A;N=0;O=s;z=26}if((z|0)==26){A=(L&1)==0;C=A?D:k[f+8>>2]|0;B=0;Ja(2,O|0,t|0,u|0,k[d+4>>2]|0,C|0,C+((A?(L&255)>>>1:M)<<2)|0,x|0,E|0,j|0,k[l>>2]|0,k[m>>2]|0,n|0,o|0,p|0,G|0);G=B;B=0;if(!(G&1)?(k[v>>2]=k[b>>2],G=k[t>>2]|0,A=k[u>>2]|0,B=0,k[g>>2]=k[v>>2],C=xa(40,g|0,O|0,G|0,A|0,d|0,e|0)|0,A=B,B=0,!(A&1)):0){if(!N)P=w;else{mua(N);P=k[h>>2]|0}kva(p);kva(o);Yua(n);BEa(P)|0;r=a;return C|0}else K=N}C=Rb()|0;A=Q;if(!K){R=C;S=A;T=w}else{mua(K);R=C;S=A;T=k[h>>2]|0}}else{A=Rb()|0;R=A;S=Q;T=w}kva(p);kva(o);Yua(n);U=R;V=S;W=T}while(0);if((z|0)==22){z=Rb()|0;U=z;V=Q;W=w}BEa(W)|0;Qb(U|0);return 0}function EAa(a){a=a|0;return}function FAa(a){a=a|0;Sqa(a);return}function GAa(a,b,c){a=a|0;b=b|0;c=c|0;c=$ra((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,1)|0;return c>>>((c|0)!=(-1|0)&1)|0}function HAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+16|0;g=b;h=0;while(1){if((h|0)==3)break;k[g+(h<<2)>>2]=0;h=h+1|0}h=i[f>>0]|0;j=(h&1)==0;l=j?f+1|0:k[f+8>>2]|0;m=l+(j?(h&255)>>>1:k[f+4>>2]|0)|0;f=l;while(1){if(f>>>0>=m>>>0){n=8;break}B=0;wa(503,g|0,i[f>>0]|0);l=B;B=0;if(l&1){n=9;break}f=f+1|0}do if((n|0)==8){B=0;f=cb(71,((c|0)==-1?-1:c<<1)|0,d|0,e|0,((i[g>>0]&1)==0?g+1|0:k[g+8>>2]|0)|0)|0;m=B;B=0;if(m&1){m=Rb()|0;o=m;p=Q;n=11;break}m=0;while(1){if((m|0)==3)break;k[a+(m<<2)>>2]=0;m=m+1|0}m=f+(Lta(f)|0)|0;l=f;while(1){if(l>>>0>=m>>>0){n=20;break}B=0;wa(503,a|0,i[l>>0]|0);h=B;B=0;if(h&1){n=19;break}l=l+1|0}if((n|0)==19){l=Rb()|0;m=Q;Yua(a);q=l;s=m;break}else if((n|0)==20){Yua(g);r=b;return}}else if((n|0)==9){m=Rb()|0;o=m;p=Q;n=11}while(0);if((n|0)==11){q=o;s=p}Yua(g);Qb(q|0)}function IAa(a,b){a=a|0;b=b|0;return}function JAa(a){a=a|0;return}function KAa(a){a=a|0;Sqa(a);return}function LAa(a,b,c){a=a|0;b=b|0;c=c|0;c=$ra((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0,1)|0;return c>>>((c|0)!=(-1|0)&1)|0}function MAa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+224|0;g=b+184|0;h=b+192|0;j=b+180|0;l=b+176|0;m=b+168|0;n=b+40|0;o=b+32|0;p=b+28|0;q=b+16|0;s=b+8|0;t=b;u=0;while(1){if((u|0)==3)break;k[q+(u<<2)>>2]=0;u=u+1|0}k[s+4>>2]=0;k[s>>2]=49796;u=i[f>>0]|0;v=(u&1)==0;w=f+4|0;x=v?w:k[f+8>>2]|0;f=x+((v?(u&255)>>>1:k[w>>2]|0)<<2)|0;w=h+32|0;u=x;x=0;a:while(1){if(!((x|0)!=2&u>>>0<f>>>0)){y=13;break}k[l>>2]=u;B=0;v=gb(k[(k[s>>2]|0)+12>>2]|0,s|0,g|0,u|0,f|0,l|0,h|0,w|0,j|0)|0;z=B;B=0;if(z&1){y=16;break}if((v|0)==2?1:(k[l>>2]|0)==(u|0)){y=8;break}else A=h;while(1){if(A>>>0>=(k[j>>2]|0)>>>0)break;B=0;wa(503,q|0,i[A>>0]|0);z=B;B=0;if(z&1){y=15;break a}A=A+1|0}u=k[l>>2]|0;x=v}do if((y|0)==8){B=0;va(553,159178);B=0;x=Rb()|0;C=x;D=Q;y=17}else if((y|0)==13){B=0;x=cb(71,((c|0)==-1?-1:c<<1)|0,d|0,e|0,((i[q>>0]&1)==0?q+1|0:k[q+8>>2]|0)|0)|0;l=B;B=0;if(l&1){l=Rb()|0;E=l;F=Q;break}l=0;while(1){if((l|0)==3)break;k[a+(l<<2)>>2]=0;l=l+1|0}k[t+4>>2]=0;k[t>>2]=49844;l=x+(Lta(x)|0)|0;v=l;u=n+128|0;A=x;j=0;b:while(1){if(!((j|0)!=2&A>>>0<l>>>0)){y=30;break}k[p>>2]=A;B=0;h=gb(k[(k[t>>2]|0)+16>>2]|0,t|0,m|0,A|0,((v-A|0)>32?A+32|0:l)|0,p|0,n|0,u|0,o|0)|0;w=B;B=0;if(w&1){y=32;break}if((h|0)==2?1:(k[p>>2]|0)==(A|0)){y=25;break}else G=n;while(1){if(G>>>0>=(k[o>>2]|0)>>>0)break;B=0;wa(529,a|0,k[G>>2]|0);w=B;B=0;if(w&1){y=31;break b}G=G+4|0}A=k[p>>2]|0;j=h}if((y|0)==25){B=0;va(553,159178);B=0;j=Rb()|0;H=j;I=Q}else if((y|0)==30){Yua(q);r=b;return}else if((y|0)==31){j=Rb()|0;H=j;I=Q}else if((y|0)==32){j=Rb()|0;H=j;I=Q}kva(a);E=H;F=I}else if((y|0)==15){j=Rb()|0;C=j;D=Q;y=17}else if((y|0)==16){j=Rb()|0;C=j;D=Q;y=17}while(0);if((y|0)==17){E=C;F=D}Yua(q);Qb(E|0)}function NAa(a,b){a=a|0;b=b|0;return}function OAa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;k[a+4>>2]=b+-1;k[a>>2]=49296;b=a+8|0;B=0;wa(531,b|0,28);c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c}else{c=a+144|0;B=0;eb(502,c|0,159108,1);f=B;B=0;if(f&1){f=Rb()|0;g=Q;h=f}else{f=k[b>>2]|0;j=a+12|0;l=k[j>>2]|0;while(1){if((l|0)==(f|0))break;m=l+-4|0;k[j>>2]=m;l=m}k[6637]=0;k[6636]=48224;B=0;wa(532,a|0,26544);l=B;B=0;do if((((((((((((((!(l&1)?(k[6639]=0,k[6638]=48264,B=0,wa(533,a|0,26552),j=B,B=0,!(j&1)):0)?(k[6641]=0,k[6640]=49336,k[6642]=0,i[26572]=0,j=fBa()|0,k[6642]=j,B=0,wa(534,a|0,26560),j=B,B=0,!(j&1)):0)?(k[6645]=0,k[6644]=49584,B=0,wa(535,a|0,26576),j=B,B=0,!(j&1)):0)?(k[6647]=0,k[6646]=49652,B=0,wa(536,a|0,26584),j=B,B=0,!(j&1)):0)?(B=0,wa(537,26592,1),j=B,B=0,!(j&1)):0)?(B=0,wa(538,a|0,26592),j=B,B=0,!(j&1)):0)?(k[6653]=0,k[6652]=49700,B=0,wa(539,a|0,26608),j=B,B=0,!(j&1)):0)?(k[6655]=0,k[6654]=49748,B=0,wa(540,a|0,26616),j=B,B=0,!(j&1)):0)?(kCa(26624,1),B=0,wa(541,a|0,26624),j=B,B=0,!(j&1)):0)?(lCa(26648,1),B=0,wa(542,a|0,26648),j=B,B=0,!(j&1)):0)?(k[6671]=0,k[6670]=48304,B=0,wa(543,a|0,26680),j=B,B=0,!(j&1)):0)?(k[6673]=0,k[6672]=48376,B=0,wa(544,a|0,26688),j=B,B=0,!(j&1)):0)?(k[6675]=0,k[6674]=48448,B=0,wa(545,a|0,26696),j=B,B=0,!(j&1)):0)?(k[6677]=0,k[6676]=48508,B=0,wa(546,a|0,26704),j=B,B=0,!(j&1)):0){k[6679]=0;k[6678]=48816;B=0;wa(547,a|0,26712);j=B;B=0;if(j&1){n=42;break}k[6681]=0;k[6680]=48880;B=0;wa(548,a|0,26720);j=B;B=0;if(j&1){n=42;break}k[6683]=0;k[6682]=48944;B=0;wa(549,a|0,26728);j=B;B=0;if(j&1){n=42;break}k[6685]=0;k[6684]=49008;B=0;wa(550,a|0,26736);j=B;B=0;if(j&1){n=42;break}k[6687]=0;k[6686]=49072;B=0;wa(551,a|0,26744);j=B;B=0;if(j&1){n=42;break}k[6689]=0;k[6688]=49108;B=0;wa(552,a|0,26752);j=B;B=0;if(j&1){n=42;break}k[6691]=0;k[6690]=49144;B=0;wa(553,a|0,26760);j=B;B=0;if(j&1){n=42;break}k[6693]=0;k[6692]=49180;B=0;wa(554,a|0,26768);j=B;B=0;if(j&1){n=42;break}k[6695]=0;k[6694]=48568;k[6696]=48616;B=0;wa(555,a|0,26776);j=B;B=0;if(j&1){n=42;break}k[6699]=0;k[6698]=48660;k[6700]=48708;B=0;wa(556,a|0,26792);j=B;B=0;if(j&1){n=42;break}k[6703]=0;k[6702]=49564;B=0;j=bb(3)|0;f=B;B=0;if(f&1){f=Rb()|0;o=Q;p=f;break}k[6704]=j;k[6702]=48752;B=0;wa(557,a|0,26808);j=B;B=0;if(j&1){n=42;break}k[6707]=0;k[6706]=49564;B=0;j=bb(3)|0;f=B;B=0;if(f&1){f=Rb()|0;o=Q;p=f;break}k[6708]=j;k[6706]=48784;B=0;wa(558,a|0,26824);j=B;B=0;if(j&1){n=42;break}k[6711]=0;k[6710]=49216;B=0;wa(559,a|0,26840);j=B;B=0;if(j&1){n=42;break}k[6713]=0;k[6712]=49256;B=0;wa(560,a|0,26848);j=B;B=0;if(j&1){n=42;break}return}else n=42;while(0);if((n|0)==42){n=Rb()|0;o=Q;p=n}Yua(c);g=o;h=p}WDa(b);d=g;e=h}Qb(e|0)}function PAa(){var a=0;do if((i[26856]|0)==0?(Gb(26856)|0)!=0:0){B=0;bb(4)|0;a=B;B=0;if(a&1){a=Rb()|0;sc(26856);Qb(a|0)}else{k[12521]=50080;Eb(26856);break}}while(0);return k[12521]|0}function QAa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;AEa(b);d=a+8|0;e=k[d>>2]|0;do if((k[a+12>>2]|0)-e>>2>>>0>c>>>0){f=d;g=e}else{B=0;wa(561,d|0,c+1|0);h=B;B=0;if(!(h&1)){f=d;g=k[d>>2]|0;break}h=Rb()|0;if(b)BEa(b)|0;Qb(h|0)}while(0);d=k[g+(c<<2)>>2]|0;if(!d)i=g;else{BEa(d)|0;i=k[f>>2]|0}k[i+(c<<2)>>2]=b;return}function RAa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;k[a>>2]=49296;b=a+8|0;c=a+12|0;d=0;while(1){e=k[b>>2]|0;if(d>>>0>=(k[c>>2]|0)-e>>2>>>0)break;f=k[e+(d<<2)>>2]|0;if(f)BEa(f)|0;d=d+1|0}Yua(a+144|0);WDa(b);return}function SAa(a){a=a|0;RAa(a);Sqa(a);return}function TAa(a,b){a=a|0;b=b|0;if(YDa(a,b)|0)return k[(k[a+8>>2]|0)+(b<<2)>>2]|0;else{b=Ab(4)|0;era(b);jc(b|0,25248,352)}return 0}function UAa(){OAa(26864,1);k[12520]=26864;return 50080}function VAa(){var a=0,b=0;a=PAa()|0;b=k[a>>2]|0;k[12522]=b;AEa(b);return 50088}function WAa(){var a=0;do if((i[27024]|0)==0?(Gb(27024)|0)!=0:0){B=0;bb(5)|0;a=B;B=0;if(a&1){a=Rb()|0;sc(27024);Qb(a|0)}else{k[12523]=50088;Eb(27024);break}}while(0);return k[12523]|0}function XAa(a){a=a|0;var b=0,c=0;B=0;b=bb(6)|0;c=B;B=0;if(c&1){c=Rb(0)|0;Dd(c)}else{c=k[b>>2]|0;k[a>>2]=c;AEa(c);return}}function YAa(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;k[a>>2]=c;AEa(c);return}function ZAa(a){a=a|0;BEa(k[a>>2]|0)|0;return}function _Aa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;if((k[a>>2]|0)!=-1){k[c>>2]=a;k[c+4>>2]=554;k[c+8>>2]=0;OEa(a,c,555)}r=b;return (k[a+4>>2]|0)+-1|0}function $Aa(a,b){a=a|0;b=b|0;var c=0;c=k[a>>2]|0;return TAa(c,_Aa(b)|0)|0}function aBa(a){a=a|0;Sqa(a);return}function bBa(a){a=a|0;if(a)Ec[k[(k[a>>2]|0)+4>>2]&1023](a);return}function cBa(a){a=a|0;var b=0;b=k[12327]|0;k[12327]=b+1;k[a+4>>2]=b+1;return}function dBa(a){a=a|0;Sqa(a);return}function eBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c>>>0<128){a=(fBa()|0)+(c<<1)|0;d=(j[a>>1]&b)<<16>>16!=0}else d=0;return d|0}function fBa(){var a=0,b=0;B=0;a=bb(7)|0;b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}else return k[a>>2]|0;return 0}function gBa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c-b|0)>>>2;e=d;d=b;while(1){if((d|0)==(c|0))break;f=k[d>>2]|0;if(f>>>0<128){g=(fBa()|0)+(f<<1)|0;h=m[g>>1]|0}else h=0;j[e>>1]=h;e=e+2|0;d=d+4|0}return b+(a<<2)|0}function hBa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=c;while(1){if((a|0)==(d|0)){e=d;break}c=k[a>>2]|0;if(c>>>0<128?(f=(fBa()|0)+(c<<1)|0,(j[f>>1]&b)<<16>>16!=0):0){e=a;break}a=a+4|0}return e|0}function iBa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=c;while(1){if((a|0)==(d|0)){e=d;break}c=k[a>>2]|0;if(c>>>0>=128){e=a;break}f=(fBa()|0)+(c<<1)|0;if(!((j[f>>1]&b)<<16>>16)){e=a;break}a=a+4|0}return e|0}function jBa(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<128){a=(kBa()|0)+(b<<2)|0;c=k[a>>2]|0}else c=b;return c|0}function kBa(){var a=0,b=0;B=0;a=bb(8)|0;b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}else return k[a>>2]|0;return 0}function lBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=(c-b|0)>>>2;d=b;while(1){if((d|0)==(c|0))break;e=k[d>>2]|0;if(e>>>0<128){f=(kBa()|0)+(e<<2)|0;g=k[f>>2]|0}else g=e;k[d>>2]=g;d=d+4|0}return b+(a<<2)|0}function mBa(a,b){a=a|0;b=b|0;var c=0;if(b>>>0<128){a=(nBa()|0)+(b<<2)|0;c=k[a>>2]|0}else c=b;return c|0}function nBa(){var a=0,b=0;B=0;a=bb(9)|0;b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}else return k[a>>2]|0;return 0}function oBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=(c-b|0)>>>2;d=b;while(1){if((d|0)==(c|0))break;e=k[d>>2]|0;if(e>>>0<128){f=(nBa()|0)+(e<<2)|0;g=k[f>>2]|0}else g=e;k[d>>2]=g;d=d+4|0}return b+(a<<2)|0}function pBa(a,b){a=a|0;b=b|0;return b<<24>>24|0}function qBa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=d;d=b;while(1){if((d|0)==(c|0))break;k[a>>2]=i[d>>0];a=a+4|0;d=d+1|0}return c|0}function rBa(a,b,c){a=a|0;b=b|0;c=c|0;return (b>>>0<128?b&255:c)|0}function sBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a=(c-b|0)>>>2;f=e;e=b;while(1){if((e|0)==(c|0))break;g=k[e>>2]|0;i[f>>0]=g>>>0<128?g&255:d;f=f+1|0;e=e+4|0}return b+(a<<2)|0}function tBa(a){a=a|0;var b=0;k[a>>2]=49336;b=k[a+8>>2]|0;if((b|0)!=0?(i[a+12>>0]|0)!=0:0)Tqa(b);return}function uBa(a){a=a|0;tBa(a);Sqa(a);return}function vBa(a,b){a=a|0;b=b|0;var c=0;if(b<<24>>24>-1){a=(kBa()|0)+((b&255)<<2)|0;c=k[a>>2]&255}else c=b;return c|0}function wBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=b;while(1){if((a|0)==(c|0))break;b=i[a>>0]|0;if(b<<24>>24>-1){d=(kBa()|0)+(b<<24>>24<<2)|0;e=k[d>>2]&255}else e=b;i[a>>0]=e;a=a+1|0}return c|0}function xBa(a,b){a=a|0;b=b|0;var c=0;if(b<<24>>24>-1){a=(nBa()|0)+(b<<24>>24<<2)|0;c=k[a>>2]&255}else c=b;return c|0}function yBa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=b;while(1){if((a|0)==(c|0))break;b=i[a>>0]|0;if(b<<24>>24>-1){d=(nBa()|0)+(b<<24>>24<<2)|0;e=k[d>>2]&255}else e=b;i[a>>0]=e;a=a+1|0}return c|0}function zBa(a,b){a=a|0;b=b|0;return b|0}function ABa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=d;d=b;while(1){if((d|0)==(c|0))break;i[a>>0]=i[d>>0]|0;a=a+1|0;d=d+1|0}return c|0}function BBa(a,b,c){a=a|0;b=b|0;c=c|0;return (b<<24>>24>-1?b:c)|0}function CBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=e;e=b;while(1){if((e|0)==(c|0))break;b=i[e>>0]|0;i[a>>0]=b<<24>>24>-1?b:d;a=a+1|0;e=e+1|0}return c|0}function DBa(a){a=a|0;Sqa(a);return}function EBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k[e>>2]=c;k[h>>2]=f;return 3}function FBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k[e>>2]=c;k[h>>2]=f;return 3}function GBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function HBa(a){a=a|0;return 1}function IBa(a){a=a|0;return 1}function JBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;b=d-c|0;return (b>>>0<e>>>0?b:e)|0}function KBa(a){a=a|0;return 1}function LBa(a,b){a=a|0;b=b|0;var c=0;k[a+4>>2]=b+-1;k[a>>2]=49404;B=0;b=bb(3)|0;c=B;B=0;if(c&1){c=Rb()|0;Qb(c|0)}else{k[a+8>>2]=b;return}}function MBa(a){a=a|0;PCa(a);Sqa(a);return}function NBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;j=r;r=r+16|0;l=j;m=j+8|0;n=c;while(1){if((n|0)==(d|0)){o=d;break}if(!(k[n>>2]|0)){o=n;break}n=n+4|0}k[h>>2]=f;k[e>>2]=c;n=g;p=a+8|0;a=c;c=f;f=o;a:while(1){if((c|0)==(g|0)|(a|0)==(d|0)){q=a;s=53;break}o=b;t=k[o+4>>2]|0;u=l;k[u>>2]=k[o>>2];k[u+4>>2]=t;t=esa(k[p>>2]|0)|0;B=0;u=Ya(25,c|0,e|0,f-a>>2|0,n-c|0,b|0)|0;o=B;B=0;if(o&1){v=t;s=11;break}if((t|0)!=0?(B=0,ya(444,t|0)|0,t=B,B=0,t&1):0){s=10;break}switch(u|0){case -1:{w=a;x=c;s=16;break a;break}case 0:{y=1;s=50;break a;break}default:{}}t=(k[h>>2]|0)+u|0;k[h>>2]=t;if((t|0)==(g|0)){s=51;break}if((f|0)==(d|0)){z=t;A=k[e>>2]|0;C=d}else{t=esa(k[p>>2]|0)|0;B=0;u=Ia(55,m|0,0,b|0)|0;o=B;B=0;if(o&1){D=t;s=36;break}if((t|0)!=0?(B=0,ya(444,t|0)|0,t=B,B=0,t&1):0){s=35;break}if((u|0)==-1){E=2;s=49;break}if(u>>>0>(n-(k[h>>2]|0)|0)>>>0){E=1;s=49;break}else{F=u;G=m}while(1){if(!F)break;u=i[G>>0]|0;t=k[h>>2]|0;k[h>>2]=t+1;i[t>>0]=u;F=F+-1|0;G=G+1|0}u=(k[e>>2]|0)+4|0;k[e>>2]=u;t=u;while(1){if((t|0)==(d|0)){H=d;break}if(!(k[t>>2]|0)){H=t;break}t=t+4|0}z=k[h>>2]|0;A=u;C=H}a=A;c=z;f=C}do if((s|0)==10){C=Rb(0)|0;Dd(C)}else if((s|0)==11){C=Rb()|0;if((v|0)!=0?(B=0,ya(444,v|0)|0,f=B,B=0,f&1):0){f=Rb(0)|0;Dd(f)}Qb(C|0)}else if((s|0)==16){k[h>>2]=x;C=w;f=x;while(1){if((C|0)==(k[e>>2]|0)){I=C;s=28;break}z=k[C>>2]|0;c=esa(k[p>>2]|0)|0;B=0;A=Ia(55,f|0,z|0,l|0)|0;z=B;B=0;if(z&1){J=c;s=22;break}if((c|0)!=0?(B=0,ya(444,c|0)|0,c=B,B=0,c&1):0){s=21;break}if((A|0)==-1){I=C;s=28;break}c=(k[h>>2]|0)+A|0;k[h>>2]=c;C=C+4|0;f=c}if((s|0)==21){f=Rb(0)|0;Dd(f)}else if((s|0)==22){f=Rb()|0;if((J|0)!=0?(B=0,ya(444,J|0)|0,C=B,B=0,C&1):0){C=Rb(0)|0;Dd(C)}Qb(f|0)}else if((s|0)==28){k[e>>2]=I;y=2;s=50;break}}else if((s|0)==35){f=Rb(0)|0;Dd(f)}else if((s|0)==36){f=Rb()|0;if((D|0)!=0?(B=0,ya(444,D|0)|0,C=B,B=0,C&1):0){C=Rb(0)|0;Dd(C)}Qb(f|0)}else if((s|0)==49){y=E;s=50}else if((s|0)==51){q=k[e>>2]|0;s=53}while(0);if((s|0)==50)K=y;else if((s|0)==53)K=(q|0)!=(d|0)&1;r=j;return K|0}function OBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;j=r;r=r+16|0;l=j;m=c;while(1){if((m|0)==(d|0)){n=d;break}if(!(i[m>>0]|0)){n=m;break}m=m+1|0}k[h>>2]=f;k[e>>2]=c;m=g;o=a+8|0;a=c;c=f;f=n;a:while(1){if((c|0)==(g|0)|(a|0)==(d|0)){p=a;q=52;break}n=b;s=k[n+4>>2]|0;t=l;k[t>>2]=k[n>>2];k[t+4>>2]=s;s=f;t=esa(k[o>>2]|0)|0;B=0;n=Ya(26,c|0,e|0,s-a|0,m-c>>2|0,b|0)|0;u=B;B=0;if(u&1){v=t;q=11;break}if((t|0)!=0?(B=0,ya(444,t|0)|0,t=B,B=0,t&1):0){q=10;break}switch(n|0){case -1:{w=a;x=c;y=s;q=16;break a;break}case 0:{z=2;q=48;break a;break}default:{}}s=(k[h>>2]|0)+(n<<2)|0;k[h>>2]=s;if((s|0)==(g|0)){q=49;break}n=k[e>>2]|0;if((f|0)==(d|0)){A=n;C=s;D=d}else{t=esa(k[o>>2]|0)|0;B=0;u=cb(72,s|0,n|0,1,b|0)|0;n=B;B=0;if(n&1){E=t;q=39;break}if((t|0)!=0?(B=0,ya(444,t|0)|0,t=B,B=0,t&1):0){q=38;break}if(u){z=2;q=48;break}k[h>>2]=(k[h>>2]|0)+4;u=(k[e>>2]|0)+1|0;k[e>>2]=u;t=u;while(1){if((t|0)==(d|0)){F=d;break}if(!(i[t>>0]|0)){F=t;break}t=t+1|0}A=u;C=k[h>>2]|0;D=F}a=A;c=C;f=D}do if((q|0)==10){D=Rb(0)|0;Dd(D)}else if((q|0)==11){D=Rb()|0;if((v|0)!=0?(B=0,ya(444,v|0)|0,f=B,B=0,f&1):0){f=Rb(0)|0;Dd(f)}Qb(D|0)}else if((q|0)==16){D=w;f=x;b:while(1){k[h>>2]=f;if((D|0)==(k[e>>2]|0)){G=D;q=32;break}C=esa(k[o>>2]|0)|0;B=0;c=cb(72,f|0,D|0,y-D|0,l|0)|0;A=B;B=0;if(A&1){H=C;q=22;break}if((C|0)!=0?(B=0,ya(444,C|0)|0,C=B,B=0,C&1):0){q=21;break}switch(c|0){case -1:{I=D;q=28;break b;break}case -2:{J=D;q=29;break b;break}case 0:{K=D+1|0;break}default:K=D+c|0}D=K;f=(k[h>>2]|0)+4|0}if((q|0)==21){f=Rb(0)|0;Dd(f)}else if((q|0)==22){f=Rb()|0;if((H|0)!=0?(B=0,ya(444,H|0)|0,D=B,B=0,D&1):0){D=Rb(0)|0;Dd(D)}Qb(f|0)}else if((q|0)==28){k[e>>2]=I;z=2;q=48;break}else if((q|0)==29){k[e>>2]=J;z=1;q=48;break}else if((q|0)==32){k[e>>2]=G;z=(G|0)!=(d|0)&1;q=48;break}}else if((q|0)==38){f=Rb(0)|0;Dd(f)}else if((q|0)==39){f=Rb()|0;if((E|0)!=0?(B=0,ya(444,E|0)|0,D=B,B=0,D&1):0){D=Rb(0)|0;Dd(D)}Qb(f|0)}else if((q|0)==49){p=k[e>>2]|0;q=52}while(0);if((q|0)==48)L=z;else if((q|0)==52)L=(p|0)!=(d|0)&1;r=j;return L|0}function PBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0;f=r;r=r+16|0;g=f;k[e>>2]=c;c=esa(k[a+8>>2]|0)|0;B=0;a=Ia(55,g|0,0,b|0)|0;b=B;B=0;if(b&1){b=Rb()|0;if((c|0)!=0?(B=0,ya(444,c|0)|0,h=B,B=0,h&1):0){h=Rb(0)|0;Dd(h)}Qb(b|0)}if((c|0)!=0?(B=0,ya(444,c|0)|0,c=B,B=0,c&1):0){c=Rb(0)|0;Dd(c)}a:do switch(a|0){case 0:case -1:{j=2;break}default:{c=a+-1|0;if(c>>>0>(d-(k[e>>2]|0)|0)>>>0)j=1;else{b=c;c=g;while(1){if(!b){j=0;break a}h=i[c>>0]|0;l=k[e>>2]|0;k[e>>2]=l+1;i[l>>0]=h;b=b+-1|0;c=c+1|0}}}}while(0);r=f;return j|0}function QBa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+8|0;B=0;a=ya(444,k[b>>2]|0)|0;c=B;B=0;do if(c&1)d=16;else{B=0;e=Ia(56,0,0,4)|0;f=B;B=0;if(f&1){f=Rb(0)|0;if(!a){g=f;break}B=0;ya(444,a|0)|0;h=B;B=0;if(!(h&1)){g=f;break}f=Rb(0)|0;Dd(f)}if((a|0)!=0?(B=0,ya(444,a|0)|0,f=B,B=0,f&1):0){f=Rb(0)|0;Dd(f)}if(!e){e=k[b>>2]|0;if(e){B=0;f=ya(444,e|0)|0;e=B;B=0;if(e&1){d=16;break}if((f|0)!=0?(B=0,ya(444,f|0)|0,f=B,B=0,f&1):0){f=Rb(0)|0;Dd(f)}else i=0}else i=1}else i=-1;return i|0}while(0);if((d|0)==16){d=Rb(0)|0;g=d}Dd(g);return 0}function RBa(a){a=a|0;return 0}function SBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;f=d;g=a+8|0;a=c;c=0;h=0;a:while(1){if((a|0)==(d|0)|h>>>0>=e>>>0){i=c;j=15;break}l=esa(k[g>>2]|0)|0;B=0;m=Ia(57,a|0,f-a|0,b|0)|0;n=B;B=0;if(n&1){o=l;j=7;break}if((l|0)!=0?(B=0,ya(444,l|0)|0,l=B,B=0,l&1):0){j=6;break}switch(m|0){case -2:case -1:{i=c;j=15;break a;break}case 0:{p=a+1|0;q=1;break}default:{p=a+m|0;q=m}}a=p;c=q+c|0;h=h+1|0}if((j|0)==6){h=Rb(0)|0;Dd(h)}else if((j|0)==7){h=Rb()|0;if((o|0)!=0?(B=0,ya(444,o|0)|0,o=B,B=0,o&1):0){o=Rb(0)|0;Dd(o)}Qb(h|0)}else if((j|0)==15)return i|0;return 0}function TBa(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;if(b){B=0;a=ya(444,b|0)|0;b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}if((a|0)!=0?(B=0,ya(444,a|0)|0,a=B,B=0,a&1):0){a=Rb(0)|0;Dd(a)}else c=4}else c=1;return c|0}function UBa(a){a=a|0;Sqa(a);return}function VBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=_Da(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function WBa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=$Da(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function XBa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function YBa(a){a=a|0;return 0}function ZBa(a){a=a|0;return 0}function _Ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return aEa(c,d,e,1114111,0)|0}function $Ba(a){a=a|0;return 4}function aCa(a){a=a|0;Sqa(a);return}function bCa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=bEa(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function cCa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;b=r;r=r+16|0;a=b+4|0;i=b;k[a>>2]=c;k[i>>2]=f;j=cEa(c,d,a,f,g,i,1114111,0)|0;k[e>>2]=k[a>>2];k[h>>2]=k[i>>2];r=b;return j|0}function dCa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[e>>2]=c;return 3}function eCa(a){a=a|0;return 0}function fCa(a){a=a|0;return 0}function gCa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dEa(c,d,e,1114111,0)|0}function hCa(a){a=a|0;return 4}function iCa(a){a=a|0;Sqa(a);return}function jCa(a){a=a|0;Sqa(a);return}function kCa(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=49484;i[a+8>>0]=46;i[a+9>>0]=44;b=a+12|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function lCa(a,b){a=a|0;b=b|0;k[a+4>>2]=b+-1;k[a>>2]=49524;k[a+8>>2]=46;k[a+12>>2]=44;b=a+16|0;a=0;while(1){if((a|0)==3)break;k[b+(a<<2)>>2]=0;a=a+1|0}return}function mCa(a){a=a|0;k[a>>2]=49484;Yua(a+12|0);return}function nCa(a){a=a|0;mCa(a);Sqa(a);return}function oCa(a){a=a|0;k[a>>2]=49524;Yua(a+16|0);return}function pCa(a){a=a|0;oCa(a);Sqa(a);return}function qCa(a){a=a|0;return i[a+8>>0]|0}function rCa(a){a=a|0;return k[a+8>>2]|0}function sCa(a){a=a|0;return i[a+9>>0]|0}function tCa(a){a=a|0;return k[a+12>>2]|0}function uCa(a,b){a=a|0;b=b|0;Vua(a,b+12|0);return}function vCa(a,b){a=a|0;b=b|0;Vua(a,b+16|0);return}function wCa(a,b){a=a|0;b=b|0;Wua(a,159247,4);return}function xCa(a,b){a=a|0;b=b|0;iva(a,50096,Qta(50096)|0);return}function yCa(a,b){a=a|0;b=b|0;Wua(a,159252,5);return}function zCa(a,b){a=a|0;b=b|0;iva(a,50116,Qta(50116)|0);return}function ACa(a){a=a|0;var b=0;switch(k[a+4>>2]&74|0){case 64:{b=8;break}case 8:{b=16;break}case 0:{b=0;break}default:b=10}return b|0}function BCa(a){a=a|0;var b=0;do if((i[27032]|0)==0?(Gb(27032)|0)!=0:0){if((i[27040]|0)==0?(Gb(27040)|0)!=0:0){a=50140;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=50308);ic(556,0,w|0)|0;Eb(27040)}B=0;Xa(263,50140,159258)|0;a=B;B=0;if(((((((((((((!(a&1)?(B=0,Xa(263,50152,159265)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50164,159272)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50176,159280)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50188,159290)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50200,159299)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50212,159306)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50224,159315)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50236,159319)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50248,159323)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50260,159327)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50272,159331)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50284,159335)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(263,50296,159339)|0,a=B,B=0,!(a&1)):0){k[12577]=50140;Eb(27032);break}a=Rb()|0;sc(27032);Qb(a|0)}while(0);return k[12577]|0}function CCa(a){a=a|0;var b=0;do if((i[27048]|0)==0?(Gb(27048)|0)!=0:0){if((i[27056]|0)==0?(Gb(27056)|0)!=0:0){a=50312;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=50480);ic(557,0,w|0)|0;Eb(27056)}B=0;Xa(264,50312,50480)|0;a=B;B=0;if(((((((((((((!(a&1)?(B=0,Xa(264,50324,50508)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50336,50536)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50348,50568)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50360,50608)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50372,50644)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50384,50672)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50396,50708)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50408,50724)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50420,50740)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50432,50756)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50444,50772)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50456,50788)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(264,50468,50804)|0,a=B,B=0,!(a&1)):0){k[12705]=50312;Eb(27048);break}a=Rb()|0;sc(27048);Qb(a|0)}while(0);return k[12705]|0}function DCa(a){a=a|0;var b=0;a:do if((i[27064]|0)==0?(Gb(27064)|0)!=0:0){if((i[27072]|0)==0?(Gb(27072)|0)!=0:0){a=50824;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=51112);ic(558,0,w|0)|0;Eb(27072)}B=0;Xa(263,50824,159343)|0;a=B;B=0;do if((((((((((((((!(a&1)?(B=0,Xa(263,50836,159351)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50848,159360)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50860,159366)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50872,159372)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50884,159376)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50896,159381)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50908,159386)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50920,159393)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50932,159403)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50944,159411)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50956,159420)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50968,159429)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50980,159433)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(263,50992,159437)|0,b=B,B=0,!(b&1)):0){B=0;Xa(263,51004,159441)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51016,159372)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51028,159445)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51040,159449)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51052,159453)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51064,159457)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51076,159461)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51088,159465)|0;b=B;B=0;if(b&1)break;B=0;Xa(263,51100,159469)|0;b=B;B=0;if(b&1)break;k[12778]=50824;Eb(27064);break a}while(0);a=Rb()|0;sc(27064);Qb(a|0)}while(0);return k[12778]|0}function ECa(a){a=a|0;var b=0;a:do if((i[27080]|0)==0?(Gb(27080)|0)!=0:0){if((i[27088]|0)==0?(Gb(27088)|0)!=0:0){a=51116;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=51404);ic(559,0,w|0)|0;Eb(27088)}B=0;Xa(264,51116,51404)|0;a=B;B=0;do if((((((((((((((!(a&1)?(B=0,Xa(264,51128,51436)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51140,51472)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51152,51496)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51164,51520)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51176,51536)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51188,51556)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51200,51576)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51212,51604)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51224,51644)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51236,51676)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51248,51712)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51260,51748)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51272,51764)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(264,51284,51780)|0,b=B,B=0,!(b&1)):0){B=0;Xa(264,51296,51796)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51308,51520)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51320,51812)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51332,51828)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51344,51844)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51356,51860)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51368,51876)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51380,51892)|0;b=B;B=0;if(b&1)break;B=0;Xa(264,51392,51908)|0;b=B;B=0;if(b&1)break;k[12981]=51116;Eb(27080);break a}while(0);a=Rb()|0;sc(27080);Qb(a|0)}while(0);return k[12981]|0}function FCa(a){a=a|0;var b=0;do if((i[27096]|0)==0?(Gb(27096)|0)!=0:0){if((i[27104]|0)==0?(Gb(27104)|0)!=0:0){a=51928;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=52216);ic(560,0,w|0)|0;Eb(27104)}B=0;Xa(263,51928,159473)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(263,51940,159476)|0,a=B,B=0,!(a&1)):0){k[13054]=51928;Eb(27096);break}a=Rb()|0;sc(27096);Qb(a|0)}while(0);return k[13054]|0}function GCa(a){a=a|0;var b=0;do if((i[27112]|0)==0?(Gb(27112)|0)!=0:0){if((i[27120]|0)==0?(Gb(27120)|0)!=0:0){a=52220;do{b=0;while(1){if((b|0)==3)break;k[a+(b<<2)>>2]=0;b=b+1|0}a=a+12|0}while((a|0)!=52508);ic(561,0,w|0)|0;Eb(27120)}B=0;Xa(264,52220,52508)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(264,52232,52520)|0,a=B,B=0,!(a&1)):0){k[13133]=52220;Eb(27112);break}a=Rb()|0;sc(27112);Qb(a|0)}while(0);return k[13133]|0}function HCa(a){a=a|0;do if((i[27128]|0)==0?(Gb(27128)|0)!=0:0){B=0;eb(502,52536,159479,8);a=B;B=0;if(a&1){a=Rb()|0;sc(27128);Qb(a|0)}else{ic(562,52536,w|0)|0;Eb(27128);break}}while(0);return 52536}function ICa(a){a=a|0;var b=0;do if((i[27136]|0)==0?(Gb(27136)|0)!=0:0){B=0;a=ya(445,52548)|0;b=B;B=0;if(!(b&1)?(B=0,eb(535,52584,52548,a|0),a=B,B=0,!(a&1)):0){ic(563,52584,w|0)|0;Eb(27136);break}a=Rb()|0;sc(27136);Qb(a|0)}while(0);return 52584}function JCa(a){a=a|0;do if((i[27144]|0)==0?(Gb(27144)|0)!=0:0){B=0;eb(502,52596,159488,8);a=B;B=0;if(a&1){a=Rb()|0;sc(27144);Qb(a|0)}else{ic(562,52596,w|0)|0;Eb(27144);break}}while(0);return 52596}function KCa(a){a=a|0;var b=0;do if((i[27152]|0)==0?(Gb(27152)|0)!=0:0){B=0;a=ya(445,52608)|0;b=B;B=0;if(!(b&1)?(B=0,eb(535,52644,52608,a|0),a=B,B=0,!(a&1)):0){ic(563,52644,w|0)|0;Eb(27152);break}a=Rb()|0;sc(27152);Qb(a|0)}while(0);return 52644}function LCa(a){a=a|0;do if((i[27160]|0)==0?(Gb(27160)|0)!=0:0){B=0;eb(502,52656,159497,20);a=B;B=0;if(a&1){a=Rb()|0;sc(27160);Qb(a|0)}else{ic(562,52656,w|0)|0;Eb(27160);break}}while(0);return 52656}function MCa(a){a=a|0;var b=0;do if((i[27168]|0)==0?(Gb(27168)|0)!=0:0){B=0;a=ya(445,52668)|0;b=B;B=0;if(!(b&1)?(B=0,eb(535,52752,52668,a|0),a=B,B=0,!(a&1)):0){ic(563,52752,w|0)|0;Eb(27168);break}a=Rb()|0;sc(27168);Qb(a|0)}while(0);return 52752}function NCa(a){a=a|0;do if((i[27176]|0)==0?(Gb(27176)|0)!=0:0){B=0;eb(502,52764,159518,11);a=B;B=0;if(a&1){a=Rb()|0;sc(27176);Qb(a|0)}else{ic(562,52764,w|0)|0;Eb(27176);break}}while(0);return 52764}function OCa(a){a=a|0;var b=0;do if((i[27184]|0)==0?(Gb(27184)|0)!=0:0){B=0;a=ya(445,52776)|0;b=B;B=0;if(!(b&1)?(B=0,eb(535,52824,52776,a|0),a=B,B=0,!(a&1)):0){ic(563,52824,w|0)|0;Eb(27184);break}a=Rb()|0;sc(27184);Qb(a|0)}while(0);return 52824}function PCa(a){a=a|0;var b=0,c=0,d=0,e=0;k[a>>2]=49404;b=a+8|0;a=k[b>>2]|0;B=0;c=bb(3)|0;d=B;B=0;do if(!(d&1)){if((a|0)!=(c|0)?(B=0,va(551,k[b>>2]|0),e=B,B=0,e&1):0)break;return}while(0);b=Rb(0)|0;Dd(b)}function QCa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;h=r;r=r+112|0;j=h;m=(d-c|0)/12|0;do if(m>>>0>100){n=lua(m)|0;if((n|0)==0?(B=0,fb(7),o=B,B=0,o&1):0){p=0;q=6;break}s=n;t=n;q=11}else{s=0;t=j;q=11}while(0);a:do if((q|0)==11){j=c;n=0;o=m;u=t;while(1){if((j|0)==(d|0)){v=n;w=o;break}x=i[j>>0]|0;if(!(x&1))y=(x&255)>>>1;else y=k[j+4>>2]|0;if(!y){i[u>>0]=2;z=n+1|0;A=o+-1|0}else{i[u>>0]=1;z=n;A=o}j=j+12|0;n=z;o=A;u=u+1|0}u=0;o=v;n=w;b:while(1){j=k[a>>2]|0;do if(j)if((k[j+12>>2]|0)==(k[j+16>>2]|0)){B=0;x=ya(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=B;B=0;if(C&1){q=5;break b}if((x|0)==-1){k[a>>2]=0;D=0;break}else{D=k[a>>2]|0;break}}else D=j;else D=0;while(0);j=(D|0)==0;x=k[b>>2]|0;if(x)if((k[x+12>>2]|0)==(k[x+16>>2]|0)){B=0;C=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;E=B;B=0;if(E&1){q=5;break}if((C|0)==-1){k[b>>2]=0;F=0}else F=x}else F=x;else F=0;x=(F|0)==0;C=k[a>>2]|0;if(!((n|0)!=0&(j^x))){G=x;H=C;I=F;q=33;break}x=k[C+12>>2]|0;if((x|0)==(k[C+16>>2]|0)){B=0;j=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;C=B;B=0;if(C&1){q=5;break}else J=j}else J=l[x>>0]|0;x=J&255;if(!g){B=0;j=Xa(k[(k[e>>2]|0)+12>>2]|0,e|0,x|0)|0;C=B;B=0;if(C&1){q=5;break}else K=j}else K=x;x=u+1|0;j=0;C=c;E=o;L=n;M=t;while(1){if((C|0)==(d|0))break;do if((i[M>>0]|0)==1){if(!(i[C>>0]&1))N=C+1|0;else N=k[C+8>>2]|0;O=i[N+u>>0]|0;if(!g){B=0;P=Xa(k[(k[e>>2]|0)+12>>2]|0,e|0,O|0)|0;R=B;B=0;if(R&1){q=4;break b}else S=P}else S=O;if(K<<24>>24!=S<<24>>24){i[M>>0]=0;T=j;U=E;V=L+-1|0;break}O=i[C>>0]|0;if(!(O&1))W=(O&255)>>>1;else W=k[C+4>>2]|0;if((W|0)==(x|0)){i[M>>0]=2;T=1;U=E+1|0;V=L+-1|0}else{T=1;U=E;V=L}}else{T=j;U=E;V=L}while(0);j=T;C=C+12|0;E=U;L=V;M=M+1|0}if(!j){u=x;o=E;n=L;continue}M=k[a>>2]|0;C=M+12|0;O=k[C>>2]|0;if((O|0)==(k[M+16>>2]|0)){B=0;ya(k[(k[M>>2]|0)+40>>2]|0,M|0)|0;M=B;B=0;if(M&1){q=5;break}}else k[C>>2]=O+1;if((E+L|0)>>>0>1){X=c;Y=E;Z=t}else{u=x;o=E;n=L;continue}while(1){if((X|0)==(d|0)){u=x;o=Y;n=L;continue b}if((i[Z>>0]|0)==2){O=i[X>>0]|0;if(!(O&1))_=(O&255)>>>1;else _=k[X+4>>2]|0;if((_|0)!=(x|0)){i[Z>>0]=0;$=Y+-1|0}else $=Y}else $=Y;X=X+12|0;Y=$;Z=Z+1|0}}if((q|0)==4){n=Rb()|0;aa=s;ba=n;ca=Q;break}else if((q|0)==5){n=Rb()|0;aa=s;ba=n;ca=Q;break}else if((q|0)==33){do if(H)if((k[H+12>>2]|0)==(k[H+16>>2]|0)){B=0;n=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;o=B;B=0;if(o&1){p=s;q=6;break a}if((n|0)==-1){k[a>>2]=0;da=0;break}else{da=k[a>>2]|0;break}}else da=H;else da=0;while(0);n=(da|0)==0;do if(!G){if((k[I+12>>2]|0)==(k[I+16>>2]|0)){B=0;o=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;u=B;B=0;if(u&1){p=s;q=6;break a}if((o|0)==-1){k[b>>2]=0;q=79;break}}if(n){ea=c;fa=t}else q=80}else q=79;while(0);if((q|0)==79)if(n)q=80;else{ea=c;fa=t}if((q|0)==80){k[f>>2]=k[f>>2]|2;ea=c;fa=t}while(1){if((ea|0)==(d|0)){q=84;break}if((i[fa>>0]|0)==2){ga=ea;break}ea=ea+12|0;fa=fa+1|0}if((q|0)==84){k[f>>2]=k[f>>2]|4;ga=d}if(s)mua(s);r=h;return ga|0}}while(0);if((q|0)==6){q=Rb()|0;aa=p;ba=q;ca=Q}if(aa)mua(aa);Qb(ba|0);return 0}function RCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Dxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=i[h>>0]|0;y=k[b>>2]|0;z=v;b:while(1){if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;v=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;A=B;B=0;if(A&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=y}else D=y;else D=0;v=(D|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)!=(k[A+16>>2]|0))if(v){E=A;break}else{F=A;G=D;H=z;break b}B=0;I=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;J=B;B=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=A;break}else{F=A;G=D;H=z;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=z;break}else E=0}A=i[m>>0]|0;I=(A&1)==0?(A&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+I|0)){B=0;eb(501,m|0,I<<1|0,0);A=B;B=0;if(A&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,K|0,0);A=B;B=0;if(A&1){C=27;break}A=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=A+I;L=A}else L=z;A=D+12|0;I=k[A>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){B=0;M=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;N=B;B=0;if(N&1){C=27;break}else O=M}else O=l[I>>0]|0;if(nxa(O&255,s,L,n,q,x,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[A>>2]|0;if((I|0)==(k[J>>2]|0)){B=0;ya(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=B;B=0;if(J&1){C=27;break}else{y=D;z=L;continue}}else{k[A>>2]=I+1;y=D;z=L;continue}}if((C|0)==27){z=Rb()|0;P=z;R=Q;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(73,H|0,k[n>>2]|0,e|0,s|0)|0;z=B;B=0;if(!(z&1)){k[f>>2]=y;lAa(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;y=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;z=B;B=0;if(z&1){C=28;break}if((y|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;y=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){B=0;z=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;x=B;B=0;if(x&1){C=28;break a}if((z|0)==-1){k[c>>2]=0;C=52;break}}if(!y)C=53}else C=52;while(0);if((C|0)==52?y:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;Yua(m);Yua(j);r=a;return z|0}else C=28}else C=28;while(0);if((C|0)==28){C=Rb()|0;P=C;R=Q}Yua(m);Yua(j);Qb(P|0);return 0}function SCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Dxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=i[h>>0]|0;y=k[b>>2]|0;z=v;b:while(1){if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;v=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;A=B;B=0;if(A&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=y}else D=y;else D=0;v=(D|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)!=(k[A+16>>2]|0))if(v){E=A;break}else{F=A;G=D;H=z;break b}B=0;I=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;J=B;B=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=A;break}else{F=A;G=D;H=z;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=z;break}else E=0}A=i[m>>0]|0;I=(A&1)==0?(A&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+I|0)){B=0;eb(501,m|0,I<<1|0,0);A=B;B=0;if(A&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,K|0,0);A=B;B=0;if(A&1){C=27;break}A=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=A+I;L=A}else L=z;A=D+12|0;I=k[A>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){B=0;M=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;N=B;B=0;if(N&1){C=27;break}else O=M}else O=l[I>>0]|0;if(nxa(O&255,s,L,n,q,x,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[A>>2]|0;if((I|0)==(k[J>>2]|0)){B=0;ya(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=B;B=0;if(J&1){C=27;break}else{y=D;z=L;continue}}else{k[A>>2]=I+1;y=D;z=L;continue}}if((C|0)==27){z=Rb()|0;P=z;R=Q;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(74,H|0,k[n>>2]|0,e|0,s|0)|0;z=Q;x=B;B=0;if(!(x&1)){x=f;k[x>>2]=y;k[x+4>>2]=z;lAa(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;z=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;x=B;B=0;if(x&1){C=28;break}if((z|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;z=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){B=0;x=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;y=B;B=0;if(y&1){C=28;break a}if((x|0)==-1){k[c>>2]=0;C=52;break}}if(!z)C=53}else C=52;while(0);if((C|0)==52?z:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;x=k[b>>2]|0;Yua(m);Yua(j);r=a;return x|0}else C=28}else C=28;while(0);if((C|0)==28){C=Rb()|0;P=C;R=Q}Yua(m);Yua(j);Qb(P|0);return 0}function TCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;m=a+184|0;n=a+172|0;o=a+168|0;p=a+8|0;q=a+4|0;s=a;t=ACa(d)|0;Dxa(m,d,g,h);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))u=10;else u=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,u|0,0);u=B;B=0;a:do if(!(u&1)){d=n+8|0;v=n+1|0;w=(i[n>>0]&1)==0?v:k[d>>2]|0;k[o>>2]=w;k[q>>2]=p;k[s>>2]=0;x=n+4|0;y=i[h>>0]|0;z=k[b>>2]|0;A=w;b:while(1){if(z)if((k[z+12>>2]|0)==(k[z+16>>2]|0)){B=0;w=ya(k[(k[z>>2]|0)+36>>2]|0,z|0)|0;C=B;B=0;if(C&1){D=27;break}if((w|0)==-1){k[b>>2]=0;E=0}else E=z}else E=z;else E=0;w=(E|0)==0;C=k[c>>2]|0;do if(C){if((k[C+12>>2]|0)!=(k[C+16>>2]|0))if(w){F=C;break}else{G=C;H=E;I=A;break b}B=0;J=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;K=B;B=0;if(K&1){D=27;break b}if((J|0)!=-1)if(w){F=C;break}else{G=C;H=E;I=A;break b}else{k[c>>2]=0;D=19;break}}else D=19;while(0);if((D|0)==19){D=0;if(w){G=0;H=E;I=A;break}else F=0}C=i[n>>0]|0;J=(C&1)==0?(C&255)>>>1:k[x>>2]|0;if((k[o>>2]|0)==(A+J|0)){B=0;eb(501,n|0,J<<1|0,0);C=B;B=0;if(C&1){D=27;break}if(!(i[n>>0]&1))L=10;else L=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,L|0,0);C=B;B=0;if(C&1){D=27;break}C=(i[n>>0]&1)==0?v:k[d>>2]|0;k[o>>2]=C+J;M=C}else M=A;C=E+12|0;J=k[C>>2]|0;K=E+16|0;if((J|0)==(k[K>>2]|0)){B=0;N=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){D=27;break}else P=N}else P=l[J>>0]|0;if(nxa(P&255,t,M,o,s,y,m,p,q,g)|0){G=F;H=E;I=M;break}J=k[C>>2]|0;if((J|0)==(k[K>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;K=B;B=0;if(K&1){D=27;break}else{z=E;A=M;continue}}else{k[C>>2]=J+1;z=E;A=M;continue}}if((D|0)==27){A=Rb()|0;R=A;S=Q;break}A=i[m>>0]|0;if((((A&1)==0?(A&255)>>>1:k[m+4>>2]|0)|0)!=0?(A=k[q>>2]|0,(A-p|0)<160):0){z=k[s>>2]|0;k[q>>2]=A+4;k[A>>2]=z}B=0;z=cb(75,I|0,k[o>>2]|0,e|0,t|0)|0;A=B;B=0;if(!(A&1)){j[f>>1]=z;lAa(m,p,k[q>>2]|0,e);if(H)if((k[H+12>>2]|0)==(k[H+16>>2]|0)){B=0;z=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;A=B;B=0;if(A&1){D=28;break}if((z|0)==-1){k[b>>2]=0;T=0}else T=H}else T=H;else T=0;z=(T|0)==0;do if(G){if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;A=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;y=B;B=0;if(y&1){D=28;break a}if((A|0)==-1){k[c>>2]=0;D=52;break}}if(!z)D=53}else D=52;while(0);if((D|0)==52?z:0)D=53;if((D|0)==53)k[e>>2]=k[e>>2]|2;A=k[b>>2]|0;Yua(n);Yua(m);r=a;return A|0}else D=28}else D=28;while(0);if((D|0)==28){D=Rb()|0;R=D;S=Q}Yua(n);Yua(m);Qb(R|0);return 0}function UCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Dxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=i[h>>0]|0;y=k[b>>2]|0;z=v;b:while(1){if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;v=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;A=B;B=0;if(A&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=y}else D=y;else D=0;v=(D|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)!=(k[A+16>>2]|0))if(v){E=A;break}else{F=A;G=D;H=z;break b}B=0;I=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;J=B;B=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=A;break}else{F=A;G=D;H=z;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=z;break}else E=0}A=i[m>>0]|0;I=(A&1)==0?(A&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+I|0)){B=0;eb(501,m|0,I<<1|0,0);A=B;B=0;if(A&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,K|0,0);A=B;B=0;if(A&1){C=27;break}A=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=A+I;L=A}else L=z;A=D+12|0;I=k[A>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){B=0;M=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;N=B;B=0;if(N&1){C=27;break}else O=M}else O=l[I>>0]|0;if(nxa(O&255,s,L,n,q,x,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[A>>2]|0;if((I|0)==(k[J>>2]|0)){B=0;ya(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=B;B=0;if(J&1){C=27;break}else{y=D;z=L;continue}}else{k[A>>2]=I+1;y=D;z=L;continue}}if((C|0)==27){z=Rb()|0;P=z;R=Q;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(76,H|0,k[n>>2]|0,e|0,s|0)|0;z=B;B=0;if(!(z&1)){k[f>>2]=y;lAa(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;y=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;z=B;B=0;if(z&1){C=28;break}if((y|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;y=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){B=0;z=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;x=B;B=0;if(x&1){C=28;break a}if((z|0)==-1){k[c>>2]=0;C=52;break}}if(!y)C=53}else C=52;while(0);if((C|0)==52?y:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;Yua(m);Yua(j);r=a;return z|0}else C=28}else C=28;while(0);if((C|0)==28){C=Rb()|0;P=C;R=Q}Yua(m);Yua(j);Qb(P|0);return 0}function VCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Dxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=i[h>>0]|0;y=k[b>>2]|0;z=v;b:while(1){if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;v=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;A=B;B=0;if(A&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=y}else D=y;else D=0;v=(D|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)!=(k[A+16>>2]|0))if(v){E=A;break}else{F=A;G=D;H=z;break b}B=0;I=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;J=B;B=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=A;break}else{F=A;G=D;H=z;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=z;break}else E=0}A=i[m>>0]|0;I=(A&1)==0?(A&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+I|0)){B=0;eb(501,m|0,I<<1|0,0);A=B;B=0;if(A&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,K|0,0);A=B;B=0;if(A&1){C=27;break}A=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=A+I;L=A}else L=z;A=D+12|0;I=k[A>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){B=0;M=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;N=B;B=0;if(N&1){C=27;break}else O=M}else O=l[I>>0]|0;if(nxa(O&255,s,L,n,q,x,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[A>>2]|0;if((I|0)==(k[J>>2]|0)){B=0;ya(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=B;B=0;if(J&1){C=27;break}else{y=D;z=L;continue}}else{k[A>>2]=I+1;y=D;z=L;continue}}if((C|0)==27){z=Rb()|0;P=z;R=Q;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(77,H|0,k[n>>2]|0,e|0,s|0)|0;z=B;B=0;if(!(z&1)){k[f>>2]=y;lAa(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;y=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;z=B;B=0;if(z&1){C=28;break}if((y|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;y=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){B=0;z=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;x=B;B=0;if(x&1){C=28;break a}if((z|0)==-1){k[c>>2]=0;C=52;break}}if(!y)C=53}else C=52;while(0);if((C|0)==52?y:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;z=k[b>>2]|0;Yua(m);Yua(j);r=a;return z|0}else C=28}else C=28;while(0);if((C|0)==28){C=Rb()|0;P=C;R=Q}Yua(m);Yua(j);Qb(P|0);return 0}
+-function iaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0;a=r;r=r+128|0;c=a+116|0;d=a+104|0;e=a+96|0;f=a+88|0;g=a+80|0;h=a+72|0;i=a+64|0;j=a+56|0;l=a+48|0;m=a+40|0;n=a+32|0;o=a+24|0;q=a+16|0;s=a+8|0;t=a;u=a+112|0;k[u>>2]=0;cp(b,c,299);v=(k[c>>2]|0)==2?3:6;w=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;x=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;y=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;z=x+w|0;A=Rqa(z>>>0>1073741823?-1:z<<2)|0;z=(w|0)>0;if((k[c>>2]|0)==2){if(z){B=0;do{k[A+(B<<2)>>2]=971;B=B+1|0}while((B|0)!=(w|0))}}else if(z){B=0;do{k[A+(B<<2)>>2]=972;B=B+1|0}while((B|0)!=(w|0))}if((x|0)>0){B=0;do{k[A+(B+w<<2)>>2]=653;B=B+1|0}while((B|0)!=(x|0))}x=iq(b,543)|0;B=k[c>>2]|0;C=ma(y,v)|0;D=ma(ma(C,w)|0,B)|0;E=Rqa(D>>>0>536870911?-1:D<<3)|0;if(D)WEa(E|0,0,D<<3|0)|0;D=C>>>0>536870911?-1:C<<3;F=Rqa(D)|0;G=Rqa(D)|0;D=ma(B,w)|0;B=Rqa(D>>>0>536870911?-1:D<<3)|0;D=Rqa(y>>>0>536870911?-1:y<<3)|0;H=ma(C,C)|0;I=Rqa(H>>>0>536870911?-1:H<<3)|0;if(H)WEa(I|0,0,H<<3|0)|0;pp(b,e,916);Uo(b,u);H=Wo(b,725)|0;J=Wo(b,728)|0;K=Wo(b,726)|0;L=Wo(b,716)|0;M=Wo(b,719)|0;N=Wo(b,717)|0;if((k[c>>2]|0)==3){O=Wo(b,730)|0;P=Wo(b,727)|0;Q=Wo(b,729)|0;R=Wo(b,721)|0;S=Wo(b,718)|0;T=P;U=Q;V=O;W=S;X=Wo(b,720)|0;Y=R}else{T=0;U=0;V=0;W=0;X=0;Y=0}R=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;S=(y|0)>0;if(!S){if(R)Z=21}else{O=0;do{nd[k[(k[R>>2]|0)+32>>2]&1023](R,739,O);nd[k[(k[H>>2]|0)+48>>2]&1023](H,f,R);nd[k[(k[L>>2]|0)+48>>2]&1023](L,m,R);nd[k[(k[J>>2]|0)+48>>2]&1023](J,g,R);nd[k[(k[M>>2]|0)+48>>2]&1023](M,n,R);nd[k[(k[K>>2]|0)+48>>2]&1023](K,i,R);nd[k[(k[N>>2]|0)+48>>2]&1023](N,q,R);if((k[c>>2]|0)==2){Q=ma(O,v)|0;p[G+(Q<<3)>>3]=+p[f>>3];p[F+(Q<<3)>>3]=+p[m>>3];P=Q+1|0;p[G+(P<<3)>>3]=+p[g>>3];p[F+(P<<3)>>3]=+p[n>>3];P=Q+2|0;p[G+(P<<3)>>3]=+p[i>>3];p[F+(P<<3)>>3]=+p[q>>3]}else{nd[k[(k[V>>2]|0)+48>>2]&1023](V,h,R);nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,o,R);nd[k[(k[T>>2]|0)+48>>2]&1023](T,j,R);nd[k[(k[W>>2]|0)+48>>2]&1023](W,s,R);nd[k[(k[U>>2]|0)+48>>2]&1023](U,l,R);nd[k[(k[X>>2]|0)+48>>2]&1023](X,t,R);P=ma(O,v)|0;p[G+(P<<3)>>3]=+p[f>>3];p[F+(P<<3)>>3]=+p[m>>3];Q=P+1|0;p[G+(Q<<3)>>3]=+p[g>>3];p[F+(Q<<3)>>3]=+p[n>>3];Q=P+2|0;p[G+(Q<<3)>>3]=+p[h>>3];p[F+(Q<<3)>>3]=+p[o>>3];Q=P+3|0;p[G+(Q<<3)>>3]=+p[i>>3];p[F+(Q<<3)>>3]=+p[q>>3];Q=P+4|0;p[G+(Q<<3)>>3]=+p[j>>3];p[F+(Q<<3)>>3]=+p[s>>3];Q=P+5|0;p[G+(Q<<3)>>3]=+p[l>>3];p[F+(Q<<3)>>3]=+p[t>>3]}O=O+1|0}while((O|0)!=(y|0));Z=21}if((Z|0)==21)Ec[k[(k[R>>2]|0)+4>>2]&1023](R);R=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;Z=Hc[k[(k[R>>2]|0)+8>>2]&511](R)|0;if((Z|0)<(Hc[k[(k[R>>2]|0)+12>>2]&511](R)|0)){O=R+8|0;t=w<<1;l=z&S;s=Z;do{Fc[k[(k[R>>2]|0)+24>>2]&1023](R,s);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[u>>2]|0,R);rd[k[(k[b>>2]|0)+344>>2]&511](b,B,k[u>>2]|0,R);nd[k[(k[b>>2]|0)+372>>2]&1023](b,D,R);Z=k[c>>2]|0;if((Z|0)==2){if(l){_=+p[d>>3];j=0;do{q=(ma(C,j)|0)<<1;i=ma(C,j<<1|1)|0;$=+p[B+(j<<3)>>3];aa=+p[B+(j+w<<3)>>3];o=0;do{ba=+p[D+(o<<3)>>3];h=ma(o,v)|0;n=E+(q+h<<3)|0;p[n>>3]=+p[O>>3]*_*ba*$+ +p[n>>3];n=h+2|0;g=E+(n+q<<3)|0;p[g>>3]=+p[O>>3]*_*ba*aa+ +p[g>>3];g=E+(h+1+i<<3)|0;p[g>>3]=+p[O>>3]*_*ba*aa+ +p[g>>3];g=E+(n+i<<3)|0;p[g>>3]=+p[O>>3]*_*ba*$+ +p[g>>3];o=o+1|0}while((o|0)!=(y|0));j=j+1|0}while((j|0)!=(w|0))}}else if(z){j=0;do{if(S){o=ma(ma(C,j)|0,Z)|0;i=ma(Z,j)|0;q=ma(C,i+1|0)|0;g=ma(C,i+2|0)|0;_=+p[d>>3];$=+p[B+(j<<3)>>3];aa=+p[B+(j+w<<3)>>3];ba=+p[B+(j+t<<3)>>3];i=0;do{ca=+p[D+(i<<3)>>3];n=ma(i,v)|0;h=E+(o+n<<3)|0;p[h>>3]=+p[O>>3]*_*ca*$+ +p[h>>3];h=n+3|0;m=E+(h+o<<3)|0;p[m>>3]=+p[O>>3]*_*ca*aa+ +p[m>>3];m=n+4|0;f=E+(m+o<<3)|0;p[f>>3]=+p[O>>3]*_*ca*ba+ +p[f>>3];f=E+(n+1+q<<3)|0;p[f>>3]=+p[O>>3]*_*ca*aa+ +p[f>>3];f=E+(h+q<<3)|0;p[f>>3]=+p[O>>3]*_*ca*$+ +p[f>>3];f=n+5|0;h=E+(f+q<<3)|0;p[h>>3]=+p[O>>3]*_*ca*ba+ +p[h>>3];h=E+(n+2+g<<3)|0;p[h>>3]=+p[O>>3]*_*ca*ba+ +p[h>>3];h=E+(m+g<<3)|0;p[h>>3]=+p[O>>3]*_*ca*$+ +p[h>>3];h=E+(f+g<<3)|0;p[h>>3]=+p[O>>3]*_*ca*aa+ +p[h>>3];i=i+1|0}while((i|0)!=(y|0))}j=j+1|0}while((j|0)!=(w|0))}s=s+1|0}while((s|0)<(Hc[k[(k[R>>2]|0)+12>>2]&511](R)|0))}s=(C|0)>0;if(s){y=0;do{O=I+((ma(y,C)|0)+y<<3)|0;p[O>>3]=-1.0;y=y+1|0}while((y|0)!=(C|0))}y=ma(k[c>>2]|0,w)|0;O=x+4|0;ZX(E,y,C,0,I,C,C,0,F,C,1,0,k[O>>2]|0,1)|0;if(s){aa=+p[e>>3];e=0;do{s=I+((ma(e,C)|0)+e<<3)|0;p[s>>3]=aa;e=e+1|0}while((e|0)!=(C|0))}e=ma(k[c>>2]|0,w)|0;ZX(E,e,C,0,I,C,C,0,G,C,1,0,k[O>>2]|0,1)|0;zq(b,x,A);if(R)Ec[k[(k[R>>2]|0)+4>>2]&1023](R);Tqa(A);A=k[u>>2]|0;if(!A){k[u>>2]=0;Tqa(E);Tqa(G);Tqa(I);Tqa(F);Tqa(B);Tqa(D);r=a;return x|0}Tqa(A);k[u>>2]=0;Tqa(E);Tqa(G);Tqa(I);Tqa(F);Tqa(B);Tqa(D);r=a;return x|0}function jaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;a=r;r=r+32|0;c=a+20|0;d=a+8|0;e=a;f=a+16|0;k[f>>2]=0;cp(b,c,299);g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=Rqa(g>>>0>1073741823?-1:g<<2)|0;i=(g|0)>0;if((k[c>>2]|0)==2){if(i){j=0;do{k[h+(j<<2)>>2]=971;j=j+1|0}while((j|0)!=(g|0))}}else if(i){j=0;do{k[h+(j<<2)>>2]=972;j=j+1|0}while((j|0)!=(g|0))}j=iq(b,543)|0;l=g*3|0;m=Rqa(l>>>0>536870911?-1:l<<3)|0;Uo(b,f);l=Wo(b,653)|0;Wo(b,706)|0;n=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;o=Hc[k[(k[n>>2]|0)+8>>2]&511](n)|0;if((o|0)<(Hc[k[(k[n>>2]|0)+12>>2]&511](n)|0)){q=n+8|0;s=j+4|0;t=g<<1;u=o;do{Fc[k[(k[n>>2]|0)+24>>2]&1023](n,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,n);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,n);rd[k[(k[b>>2]|0)+344>>2]&511](b,m,k[f>>2]|0,n);if(i){o=k[c>>2]|0;v=k[s>>2]|0;if((o|0)==3){w=0;do{x=w*3|0;y=v+(x<<3)|0;p[y>>3]=+p[e>>3]*+p[q>>3]*+p[d>>3]*+p[m+(w<<3)>>3]+ +p[y>>3];y=v+(x+1<<3)|0;p[y>>3]=+p[e>>3]*+p[q>>3]*+p[d>>3]*+p[m+(w+g<<3)>>3]+ +p[y>>3];y=v+(x+2<<3)|0;p[y>>3]=+p[e>>3]*+p[q>>3]*+p[d>>3]*+p[m+(w+t<<3)>>3]+ +p[y>>3];w=w+1|0}while((w|0)!=(g|0))}else{w=0;do{y=ma(o,w)|0;x=v+(y<<3)|0;p[x>>3]=+p[e>>3]*+p[q>>3]*+p[d>>3]*+p[m+(w<<3)>>3]+ +p[x>>3];x=v+(y+1<<3)|0;p[x>>3]=+p[e>>3]*+p[q>>3]*+p[d>>3]*+p[m+(w+g<<3)>>3]+ +p[x>>3];w=w+1|0}while((w|0)!=(g|0))}}u=u+1|0}while((u|0)<(Hc[k[(k[n>>2]|0)+12>>2]&511](n)|0))}Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0;zq(b,j,h);Ec[k[(k[n>>2]|0)+4>>2]&1023](n);Tqa(h);h=k[f>>2]|0;if(!h){k[f>>2]=0;Tqa(m);r=a;return j|0}Tqa(h);k[f>>2]=0;Tqa(m);r=a;return j|0}function kaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0;a=r;r=r+96|0;d=a+84|0;e=a+56|0;f=a+32|0;g=a+8|0;h=a;i=a+80|0;k[i>>2]=0;cO(c,d,299);if((th(b)|0)<=0){r=a;return}c=f+8|0;j=e+8|0;l=g+16|0;m=e+16|0;n=f+16|0;o=g+8|0;q=0;s=0;while(1){t=qh(b,q)|0;Uo(t,i);u=Wo(t,674)|0;v=Wo(t,677)|0;if((k[d>>2]|0)==3)w=Wo(t,679)|0;else w=s;x=Hc[k[(k[t>>2]|0)+172>>2]&511](t)|0;y=x>>>0>536870911?-1:x<<3;z=Rqa(y)|0;A=Rqa(y)|0;B=Rqa(y)|0;C=Rqa(y)|0;D=Rqa(y)|0;E=Rqa(y)|0;if((k[d>>2]|0)==3){F=Rqa(y)|0;G=Rqa(y)|0;H=Rqa(y)|0;I=Rqa(y)|0;J=Rqa(y)|0;K=H;L=J;M=F;N=I;O=Rqa(y)|0;P=G}else{K=0;L=0;M=0;N=0;O=0;P=0}G=Hc[k[(k[t>>2]|0)+304>>2]&511](t)|0;if((x|0)>0){y=t+28|0;I=0;do{nd[k[(k[G>>2]|0)+32>>2]&1023](G,739,I);rd[k[(k[u>>2]|0)+60>>2]&511](u,e,k[i>>2]|0,G);rd[k[(k[v>>2]|0)+60>>2]&511](v,f,k[i>>2]|0,G);F=k[d>>2]|0;if((F|0)==3){rd[k[(k[w>>2]|0)+60>>2]&511](w,g,k[i>>2]|0,G);Q=k[d>>2]|0}else Q=F;F=k[y>>2]|0;Tc[k[(k[F>>2]|0)+108>>2]&15](F,h,Q,k[i>>2]|0,G,u,v,w);R=+p[e>>3];p[z+(I<<3)>>3]=R;S=+p[h>>3]*2.0;p[A+(I<<3)>>3]=R*S;R=+p[c>>3];p[B+(I<<3)>>3]=R;p[C+(I<<3)>>3]=R*S;R=(+p[j>>3]+ +p[f>>3])*.5;p[D+(I<<3)>>3]=R;p[E+(I<<3)>>3]=R*S;if((k[d>>2]|0)==3){R=+p[l>>3];p[M+(I<<3)>>3]=R;p[P+(I<<3)>>3]=R*S;R=(+p[m>>3]+ +p[g>>3])*.5;p[K+(I<<3)>>3]=R;p[N+(I<<3)>>3]=R*S;R=(+p[n>>3]+ +p[o>>3])*.5;p[L+(I<<3)>>3]=R;p[O+(I<<3)>>3]=R*S}I=I+1|0}while((I|0)!=(x|0))}rd[k[(k[t>>2]|0)+48>>2]&511](t,725,z,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,716,A,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,728,B,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,719,C,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,726,D,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,717,E,739);if((k[d>>2]|0)==3){rd[k[(k[t>>2]|0)+48>>2]&511](t,730,M,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,721,P,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,727,K,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,718,N,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,729,L,739);rd[k[(k[t>>2]|0)+48>>2]&511](t,720,O,739)}if(G)Ec[k[(k[G>>2]|0)+4>>2]&1023](G);x=k[i>>2]|0;if(x)Tqa(x);k[i>>2]=0;Tqa(z);Tqa(A);Tqa(B);Tqa(C);if(M)Tqa(M);if(P)Tqa(P);Tqa(D);Tqa(E);if(K)Tqa(K);if(N)Tqa(N);if(L)Tqa(L);if(O)Tqa(O);q=q+1|0;if((q|0)>=(th(b)|0))break;else s=w}r=a;return}function laa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0.0,Ra=0,Sa=0.0,Ta=0.0,Ua=0.0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;a=r;r=r+224|0;d=a+220|0;e=a+208|0;f=a+200|0;g=a+192|0;h=a+184|0;i=a+176|0;j=a+168|0;l=a+160|0;m=a+152|0;n=a+144|0;o=a+136|0;q=a+128|0;s=a+120|0;t=a+112|0;u=a+88|0;v=a+64|0;w=a+40|0;x=a+32|0;y=a+24|0;z=a+216|0;A=a+16|0;B=a+8|0;C=a;k[z>>2]=0;dO(c,B,916);cO(c,d,299);if((th(b)|0)<=0){r=a;return}c=v+8|0;D=u+8|0;E=w+16|0;F=u+16|0;G=v+16|0;H=w+8|0;I=0.0;J=0.0;K=0.0;L=0;M=0;while(1){N=qh(b,L)|0;Uo(N,z);O=Wo(N,214)|0;P=Wo(N,217)|0;Q=Wo(N,674)|0;R=Wo(N,677)|0;if((k[d>>2]|0)==3)S=Wo(N,679)|0;else S=M;T=Hc[k[(k[N>>2]|0)+172>>2]&511](N)|0;U=T>>>0>536870911?-1:T<<3;V=Rqa(U)|0;W=ma(T,T)|0;X=Rqa(W>>>0>536870911?-1:W<<3)|0;if(W)WEa(X|0,0,W<<3|0)|0;W=Rqa(U)|0;Y=(T|0)==0;if(Y){Z=Rqa(U)|0;_=Rqa(U)|0;$=Z}else{Z=T<<3;WEa(W|0,0,Z|0)|0;ca=Rqa(U)|0;WEa(ca|0,0,Z|0)|0;da=Rqa(U)|0;WEa(da|0,0,Z|0)|0;_=da;$=ca}do if((k[d>>2]|0)==3){ca=Rqa(U)|0;if(Y){da=Rqa(U)|0;ea=da;fa=Rqa(U)|0;ga=ca;break}else{da=T<<3;WEa(ca|0,0,da|0)|0;Z=Rqa(U)|0;WEa(Z|0,0,da|0)|0;ha=Rqa(U)|0;WEa(ha|0,0,da|0)|0;ea=Z;fa=ha;ga=ca;break}}else{ea=0;fa=0;ga=0}while(0);Y=Wo(N,725)|0;ca=Wo(N,728)|0;ha=Wo(N,726)|0;if((k[d>>2]|0)==3){Z=Wo(N,730)|0;da=Wo(N,727)|0;ia=da;ja=Wo(N,729)|0;ka=Z}else{ia=0;ja=0;ka=0}Z=Wo(N,716)|0;da=Wo(N,719)|0;la=Wo(N,717)|0;if((k[d>>2]|0)==3){na=Wo(N,721)|0;oa=Wo(N,718)|0;pa=oa;qa=Wo(N,720)|0;ra=na}else{pa=0;qa=0;ra=0}na=ed[k[(k[N>>2]|0)+308>>2]&511](N,5)|0;oa=Hc[k[(k[na>>2]|0)+8>>2]&511](na)|0;if((oa|0)<(Hc[k[(k[na>>2]|0)+12>>2]&511](na)|0)){sa=na+8|0;ta=(T|0)>0;ua=ta^1;va=I;wa=J;xa=K;ya=oa;while(1){Fc[k[(k[na>>2]|0)+24>>2]&1023](na,ya);rd[k[(k[N>>2]|0)+260>>2]&511](N,A,k[z>>2]|0,na);nd[k[(k[N>>2]|0)+372>>2]&1023](N,V,na);nd[k[(k[Z>>2]|0)+48>>2]&1023](Z,m,na);nd[k[(k[da>>2]|0)+48>>2]&1023](da,n,na);nd[k[(k[la>>2]|0)+48>>2]&1023](la,q,na);if((k[d>>2]|0)==3){nd[k[(k[ra>>2]|0)+48>>2]&1023](ra,o,na);nd[k[(k[pa>>2]|0)+48>>2]&1023](pa,s,na);nd[k[(k[qa>>2]|0)+48>>2]&1023](qa,t,na)}nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,f,na);nd[k[(k[ca>>2]|0)+48>>2]&1023](ca,g,na);nd[k[(k[ha>>2]|0)+48>>2]&1023](ha,i,na);if((k[d>>2]|0)==3){nd[k[(k[ka>>2]|0)+48>>2]&1023](ka,h,na);nd[k[(k[ia>>2]|0)+48>>2]&1023](ia,j,na);nd[k[(k[ja>>2]|0)+48>>2]&1023](ja,l,na)}rd[k[(k[Q>>2]|0)+60>>2]&511](Q,u,k[z>>2]|0,na);rd[k[(k[R>>2]|0)+60>>2]&511](R,v,k[z>>2]|0,na);oa=k[d>>2]|0;if((oa|0)==3){rd[k[(k[S>>2]|0)+60>>2]&511](S,w,k[z>>2]|0,na);za=k[d>>2]|0}else za=oa;Aa=+p[u>>3];Ba=+p[c>>3];Ca=(+p[D>>3]+ +p[v>>3])*.5;if((za|0)==3){Da=(+p[F>>3]+ +p[w>>3])*.5;Ea=(+p[G>>3]+ +p[H>>3])*.5;Fa=+p[E>>3]}else{Da=va;Ea=wa;Fa=xa}nd[k[(k[O>>2]|0)+48>>2]&1023](O,x,na);nd[k[(k[P>>2]|0)+48>>2]&1023](P,y,na);Ga=+p[y>>3];Ha=+p[x>>3]*+ba(.7071067811865475,+((1.0-Ga)/Ga));Ia=+p[B>>3];oa=(k[d>>2]|0)==2;Ja=Aa*Ia+ +p[m>>3];Ka=Ba*Ia+ +p[n>>3];La=Ja*Ja+Ka*Ka;if(oa){Ka=Ca*Ia+ +p[q>>3];Ma=La+Ka*(Ka*2.0)}else{Ka=Fa*Ia+ +p[o>>3];Ja=Ca*Ia+ +p[q>>3];Na=Da*Ia+ +p[s>>3];Oa=Ea*Ia+ +p[t>>3];Ma=La+Ka*Ka+Ja*(Ja*2.0)+Na*(Na*2.0)+Oa*(Oa*2.0)}Oa=+aa(+Ma);Na=+p[f>>3];Ja=+p[g>>3];Ka=Na*Na+Ja*Ja;if(oa){Ja=+p[i>>3];Pa=Ka+Ja*(Ja*2.0)}else{Ja=+p[h>>3];Na=+p[i>>3];La=+p[j>>3];Qa=+p[l>>3];Pa=Ka+Ja*Ja+(Na*Na+La*La+Qa*Qa)*2.0}Qa=+aa(+Pa);La=Qa==0.0?1.0:Qa;p[C>>3]=La;Wna(C,Ha,Ia,Oa,Ga,La)|0;La=+p[y>>3];Ga=Ha*+ba(+(+p[C>>3]),+((1.0-La)/La));p[e>>3]=(Ga+ +p[B>>3])*+p[sa>>3]*+p[A>>3];ZX(V,T,1,0,e,1,1,0,V,1,T,0,X,1)|0;do if(ta){Ga=+p[A>>3];La=Aa*+p[B>>3]+ +p[m>>3];oa=0;do{Ra=W+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+La*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ga;oa=oa+1|0}while((oa|0)!=(T|0));if(ta){Ga=+p[A>>3];La=Ba*+p[B>>3]+ +p[n>>3];oa=0;do{Ra=$+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+La*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ga;oa=oa+1|0}while((oa|0)!=(T|0));if(!ta)break;Ga=+p[A>>3];La=Ca*+p[B>>3]+ +p[q>>3];oa=0;do{Ra=_+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+La*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ga;oa=oa+1|0}while((oa|0)!=(T|0))}}while(0);do if(!((k[d>>2]|0)!=3|ua)){Ca=+p[A>>3];Ba=Fa*+p[B>>3]+ +p[o>>3];oa=0;do{Ra=ga+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+Ba*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ca;oa=oa+1|0}while((oa|0)!=(T|0));if(!ta)break;Ca=+p[A>>3];Ba=Da*+p[B>>3]+ +p[s>>3];oa=0;do{Ra=ea+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+Ba*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ca;oa=oa+1|0}while((oa|0)!=(T|0));if(!ta)break;Ca=+p[A>>3];Ba=Ea*+p[B>>3]+ +p[t>>3];oa=0;do{Ra=fa+(oa<<3)|0;p[Ra>>3]=+p[Ra>>3]+Ba*+p[V+(oa<<3)>>3]*+p[sa>>3]*Ca;oa=oa+1|0}while((oa|0)!=(T|0))}while(0);ya=ya+1|0;if((ya|0)>=(Hc[k[(k[na>>2]|0)+12>>2]&511](na)|0)){Sa=Da;Ta=Ea;Ua=Fa;break}else{va=Da;wa=Ea;xa=Fa}}}else{Sa=I;Ta=J;Ua=K}ya=Rqa(U)|0;T=Rqa(U)|0;sa=Rqa(U)|0;if((k[d>>2]|0)==2){fY(ya,X,W);fY(T,X,$);fY(sa,X,_);rd[k[(k[N>>2]|0)+48>>2]&511](N,725,ya,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,728,T,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,726,sa,739);if(!na){Va=0;Wa=0;Xa=0}else{Ya=0;Za=0;_a=0;$a=57}}else{ta=Rqa(U)|0;ua=Rqa(U)|0;P=Rqa(U)|0;iY(ya,X,W);iY(T,X,$);iY(sa,X,_);iY(ta,X,ga);iY(ua,X,ea);iY(P,X,fa);rd[k[(k[N>>2]|0)+48>>2]&511](N,725,ya,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,728,T,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,726,sa,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,730,ta,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,727,ua,739);rd[k[(k[N>>2]|0)+48>>2]&511](N,729,P,739);Ya=ua;Za=P;_a=ta;$a=57}if(($a|0)==57){$a=0;Ec[k[(k[na>>2]|0)+4>>2]&1023](na);Va=Ya;Wa=Za;Xa=_a}ta=k[z>>2]|0;if(ta)Tqa(ta);k[z>>2]=0;Tqa(V);Tqa(X);Tqa(W);Tqa(ya);Tqa($);Tqa(T);if(ga)Tqa(ga);if(Xa)Tqa(Xa);Tqa(_);Tqa(sa);if(ea)Tqa(ea);if(Va)Tqa(Va);if(fa)Tqa(fa);if(Wa)Tqa(Wa);L=L+1|0;if((L|0)>=(th(b)|0))break;else{I=Sa;J=Ta;K=Ua;M=S}}r=a;return}function maa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0,qa=0.0,ra=0.0,sa=0.0,ta=0.0;a=r;r=r+192|0;d=a+180|0;e=a+168|0;f=a+160|0;g=a+152|0;h=a+144|0;i=a+136|0;j=a+128|0;l=a+120|0;m=a+112|0;n=a+104|0;o=a+96|0;q=a+88|0;s=a+80|0;t=a+56|0;u=a+32|0;v=a+8|0;w=a+176|0;x=a;k[w>>2]=0;dO(c,x,916);cO(c,d,299);if((th(b)|0)<=0){r=a;return}c=u+8|0;y=t+8|0;z=v+16|0;A=t+16|0;B=u+16|0;C=v+8|0;D=0.0;E=0.0;F=0.0;G=0;while(1){H=qh(b,G)|0;Uo(H,w);I=Wo(H,674)|0;J=Wo(H,677)|0;if((k[d>>2]|0)==3)K=Wo(H,679)|0;else K=0;L=Wo(H,716)|0;M=Wo(H,719)|0;N=Wo(H,717)|0;if((k[d>>2]|0)==3){O=Wo(H,721)|0;P=Wo(H,718)|0;Q=P;R=Wo(H,720)|0;S=O}else{Q=0;R=0;S=0}O=Wo(H,725)|0;P=Wo(H,728)|0;T=Wo(H,726)|0;if((k[d>>2]|0)==3){U=Wo(H,730)|0;V=Wo(H,727)|0;W=V;X=Wo(H,729)|0;Y=U}else{W=0;X=0;Y=0}U=Hc[k[(k[H>>2]|0)+172>>2]&511](H)|0;V=U>>>0>536870911?-1:U<<3;Z=Rqa(V)|0;_=Rqa(V)|0;$=Rqa(V)|0;if((k[d>>2]|0)==3){aa=Rqa(V)|0;ba=Rqa(V)|0;ca=ba;da=Rqa(V)|0;ea=aa}else{ca=0;da=0;ea=0}aa=Hc[k[(k[H>>2]|0)+304>>2]&511](H)|0;if((U|0)>0){fa=D;ga=E;ha=F;V=0;while(1){nd[k[(k[aa>>2]|0)+32>>2]&1023](aa,739,V);rd[k[(k[I>>2]|0)+60>>2]&511](I,t,k[w>>2]|0,aa);rd[k[(k[J>>2]|0)+60>>2]&511](J,u,k[w>>2]|0,aa);ba=k[d>>2]|0;if((ba|0)==3){rd[k[(k[K>>2]|0)+60>>2]&511](K,v,k[w>>2]|0,aa);ia=k[d>>2]|0}else ia=ba;ja=+p[t>>3];ka=+p[c>>3];la=(+p[y>>3]+ +p[u>>3])*.5;if((ia|0)==3){ma=(+p[A>>3]+ +p[v>>3])*.5;na=(+p[B>>3]+ +p[C>>3])*.5;oa=+p[z>>3]}else{ma=fa;na=ga;oa=ha}nd[k[(k[L>>2]|0)+48>>2]&1023](L,l,aa);nd[k[(k[M>>2]|0)+48>>2]&1023](M,m,aa);nd[k[(k[N>>2]|0)+48>>2]&1023](N,o,aa);if((k[d>>2]|0)==3){nd[k[(k[S>>2]|0)+48>>2]&1023](S,n,aa);nd[k[(k[Q>>2]|0)+48>>2]&1023](Q,q,aa);nd[k[(k[R>>2]|0)+48>>2]&1023](R,s,aa)}nd[k[(k[O>>2]|0)+48>>2]&1023](O,e,aa);nd[k[(k[P>>2]|0)+48>>2]&1023](P,f,aa);nd[k[(k[T>>2]|0)+48>>2]&1023](T,h,aa);ba=k[d>>2]|0;if((ba|0)==3){nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,g,aa);nd[k[(k[W>>2]|0)+48>>2]&1023](W,i,aa);nd[k[(k[X>>2]|0)+48>>2]&1023](X,j,aa);pa=k[d>>2]|0}else pa=ba;qa=+p[x>>3];p[Z+(V<<3)>>3]=+p[l>>3]+qa*(ja-+p[e>>3]);p[_+(V<<3)>>3]=+p[m>>3]+qa*(ka-+p[f>>3]);p[$+(V<<3)>>3]=+p[o>>3]+qa*(la-+p[h>>3]);if((pa|0)==3){p[ea+(V<<3)>>3]=+p[n>>3]+qa*(oa-+p[g>>3]);p[ca+(V<<3)>>3]=+p[q>>3]+qa*(ma-+p[i>>3]);p[da+(V<<3)>>3]=+p[s>>3]+qa*(na-+p[j>>3])}V=V+1|0;if((V|0)==(U|0)){ra=ma;sa=na;ta=oa;break}else{fa=ma;ga=na;ha=oa}}}else{ra=D;sa=E;ta=F}rd[k[(k[H>>2]|0)+48>>2]&511](H,716,Z,739);rd[k[(k[H>>2]|0)+48>>2]&511](H,719,_,739);rd[k[(k[H>>2]|0)+48>>2]&511](H,717,$,739);if((k[d>>2]|0)==3){rd[k[(k[H>>2]|0)+48>>2]&511](H,721,ea,739);rd[k[(k[H>>2]|0)+48>>2]&511](H,718,ca,739);rd[k[(k[H>>2]|0)+48>>2]&511](H,720,da,739)}if(aa)Ec[k[(k[aa>>2]|0)+4>>2]&1023](aa);U=k[w>>2]|0;if(U)Tqa(U);k[w>>2]=0;Tqa(Z);Tqa(_);if(ea)Tqa(ea);Tqa($);if(ca)Tqa(ca);if(da)Tqa(da);G=G+1|0;if((G|0)>=(th(b)|0))break;else{D=ra;E=sa;F=ta}}r=a;return}function naa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0;c=r;r=r+16|0;d=c;e=Rqa(76)|0;f=Rqa(52)|0;g=Rqa(76)|0;h=Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,0)|0;k[g+24>>2]=i;k[e+24>>2]=972;k[f>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,1)|0;k[g+28>>2]=i;k[e+28>>2]=972;k[f+4>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,2)|0;k[g+32>>2]=i;k[e+32>>2]=972;k[f+8>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,3)|0;k[g+36>>2]=i;k[e+36>>2]=972;k[f+12>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,4)|0;k[g+40>>2]=i;k[e+40>>2]=972;k[f+16>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,5)|0;k[g+44>>2]=i;k[e+44>>2]=972;k[f+20>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,6)|0;k[g+48>>2]=i;k[e+48>>2]=972;k[f+24>>2]=972;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,0)|0;k[g>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,6)|0;k[g+52>>2]=i;k[e>>2]=971;k[e+52>>2]=653;k[f+28>>2]=653;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,1)|0;k[g+4>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,7)|0;k[g+56>>2]=i;k[e+4>>2]=971;k[e+56>>2]=653;k[f+32>>2]=653;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,2)|0;k[g+8>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,8)|0;k[g+60>>2]=i;k[e+8>>2]=971;k[e+60>>2]=653;k[f+36>>2]=653;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,3)|0;k[g+12>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,9)|0;k[g+64>>2]=i;k[e+12>>2]=971;k[e+64>>2]=653;k[f+40>>2]=653;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,4)|0;k[g+16>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,10)|0;k[g+68>>2]=i;k[e+16>>2]=971;k[e+68>>2]=653;k[f+44>>2]=653;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,5)|0;k[g+20>>2]=i;i=ed[k[(k[b>>2]|0)+156>>2]&511](b,11)|0;k[g+72>>2]=i;k[e+20>>2]=971;k[e+72>>2]=653;k[f+48>>2]=653;i=hq(b,6,540)|0;j=gq(b,543)|0;l=Qqa(68)|0;B=0;eb(515,l|0,i|0,j|0);m=B;B=0;if(m&1){m=Rb()|0;Sqa(l);Qb(m|0)}if(i){HN(i);Sqa(i)}if(j){HN(j);Sqa(j)}j=i9(a,b)|0;wq(b,j,g,13,f);k[d>>2]=k[9691];k[d+4>>2]=k[9692];k[d+8>>2]=k[9693];NN(j,3,d);Fc[k[(k[b>>2]|0)+428>>2]&1023](b,738);d=h9(a,b)|0;vq(b,d,971);Fc[k[(k[b>>2]|0)+428>>2]&1023](b,h);h=k[j+12>>2]|0;a=l+12|0;i=k[a>>2]|0;m=0;do{n=m*27|0;o=m*39|0;q=i+(o+468<<3)|0;p[q>>3]=+p[h+(n<<3)>>3]+ +p[q>>3];q=i+(o+469<<3)|0;p[q>>3]=+p[h+(n+1<<3)>>3]+ +p[q>>3];q=i+(o+470<<3)|0;p[q>>3]=+p[h+(n+3<<3)>>3]+ +p[q>>3];q=i+(o+471<<3)|0;p[q>>3]=+p[h+(n+4<<3)>>3]+ +p[q>>3];q=i+(o+472<<3)|0;p[q>>3]=+p[h+(n+6<<3)>>3]+ +p[q>>3];q=i+(o+473<<3)|0;p[q>>3]=+p[h+(n+7<<3)>>3]+ +p[q>>3];q=i+(o+474<<3)|0;p[q>>3]=+p[h+(n+9<<3)>>3]+ +p[q>>3];q=i+(o+475<<3)|0;p[q>>3]=+p[h+(n+10<<3)>>3]+ +p[q>>3];q=i+(o+476<<3)|0;p[q>>3]=+p[h+(n+12<<3)>>3]+ +p[q>>3];q=i+(o+477<<3)|0;p[q>>3]=+p[h+(n+13<<3)>>3]+ +p[q>>3];q=i+(o+478<<3)|0;p[q>>3]=+p[h+(n+15<<3)>>3]+ +p[q>>3];q=i+(o+479<<3)|0;p[q>>3]=+p[h+(n+16<<3)>>3]+ +p[q>>3];m=m+1|0}while((m|0)!=27);m=k[d+12>>2]|0;h=k[a>>2]|0;a=0;do{i=a*12|0;q=a*39|0;n=h+(q+12<<3)|0;p[n>>3]=+p[m+(i<<3)>>3]+ +p[n>>3];n=h+(q+13<<3)|0;p[n>>3]=+p[m+((i|1)<<3)>>3]+ +p[n>>3];n=h+(q+15<<3)|0;p[n>>3]=+p[m+((i|2)<<3)>>3]+ +p[n>>3];n=h+(q+16<<3)|0;p[n>>3]=+p[m+((i|3)<<3)>>3]+ +p[n>>3];n=i+4|0;o=h+(q+18<<3)|0;p[o>>3]=+p[m+(n<<3)>>3]+ +p[o>>3];o=h+(q+19<<3)|0;p[o>>3]=+p[m+((n|1)<<3)>>3]+ +p[o>>3];o=i+6|0;n=h+(q+21<<3)|0;p[n>>3]=+p[m+(o<<3)>>3]+ +p[n>>3];n=h+(q+22<<3)|0;p[n>>3]=+p[m+((o|1)<<3)>>3]+ +p[n>>3];n=i+8|0;o=h+(q+24<<3)|0;p[o>>3]=+p[m+(n<<3)>>3]+ +p[o>>3];o=h+(q+25<<3)|0;p[o>>3]=+p[m+((n|1)<<3)>>3]+ +p[o>>3];o=i+10|0;i=h+(q+27<<3)|0;p[i>>3]=+p[m+(o<<3)>>3]+ +p[i>>3];i=h+(q+28<<3)|0;p[i>>3]=+p[m+((o|1)<<3)>>3]+ +p[i>>3];a=a+1|0}while((a|0)!=12);Gq(b,l,g,19,e);Tqa(e);Tqa(f);Tqa(g);if(j){HN(j);Sqa(j)}if(!d){r=c;return l|0}HN(d);Sqa(d);r=c;return l|0}function oaa(a,b){a=a|0;b=b|0;var c=0,d=0;c=paa(a,b)|0;d=qaa(a,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,c|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}HN(c);Sqa(c);if(!d)return b|0;HN(d);Sqa(d);return b|0}function paa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;a=r;r=r+4848|0;c=a+4664|0;d=a+4656|0;e=a+4648|0;f=a+4640|0;g=a+3776|0;h=a+3584|0;i=a+3440|0;j=a+2792|0;l=a+2664|0;m=a+2592|0;n=a+1296|0;o=a;q=a+4832|0;s=l;t=s+128|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));s=m;t=s+72|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));WEa(n|0,0,1296)|0;WEa(o|0,0,1296)|0;k[q>>2]=0;u=Hc[k[(k[b>>2]|0)+124>>2]&511](b)|0;v=Hc[k[(k[u>>2]|0)+432>>2]&511](u)|0;w=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;x=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;y=(w<<1)+-1|0;z=x+y|0;A=z>>>0>1073741823?-1:z<<2;C=Rqa(A)|0;D=Rqa(A)|0;if((w|0)>1){A=w+-1|0;E=0;do{F=ed[k[(k[u>>2]|0)+156>>2]&511](u,E)|0;k[D+(E<<2)>>2]=F;k[C+(E<<2)>>2]=971;E=E+1|0}while((E|0)!=(A|0))}if((w|0)>0){A=w+-1|0;E=0;do{F=ed[k[(k[b>>2]|0)+156>>2]&511](b,E)|0;G=A+E|0;k[D+(G<<2)>>2]=F;k[C+(G<<2)>>2]=972;E=E+1|0}while((E|0)!=(w|0))}if((x|0)>0){E=0;do{A=ed[k[(k[b>>2]|0)+156>>2]&511](b,E+w|0)|0;G=E+y|0;k[D+(G<<2)>>2]=A;k[C+(G<<2)>>2]=653;E=E+1|0}while((E|0)!=(x|0))}x=hq(u,6,536)|0;u=gq(b,543)|0;E=Qqa(68)|0;B=0;eb(515,E|0,x|0,u|0);y=B;B=0;if(y&1){y=Rb()|0;w=Q;Sqa(E);H=y;I=w;Qb(H|0)}if(x){HN(x);Sqa(x)}if(u){HN(u);Sqa(u)}Uo(b,q);pp(b,f,85);u=Wo(b,674)|0;x=Wo(b,677)|0;w=Wo(b,679)|0;y=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;G=Qqa(64)|0;B=0;va(491,G|0);A=B;B=0;if(A&1){A=Rb()|0;F=Q;Sqa(G);H=A;I=F;Qb(H|0)}H=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((H|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){F=j+144|0;I=j+360|0;A=j+576|0;J=b+28|0;K=y+8|0;L=l+120|0;M=l+40|0;N=l+80|0;O=m+32|0;P=m+64|0;R=H;do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,R);Fc[k[(k[y>>2]|0)+36>>2]&1023](y,G);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[q>>2]|0,y);taa(0,g,b,k[q>>2]|0,y);uaa(0,h,v,k[q>>2]|0,G);vaa(0,i,v,k[q>>2]|0,G);rd[k[(k[b>>2]|0)+348>>2]&511](b,c,k[q>>2]|0,y);H=0;do{S=+p[c+(H<<3)>>3];T=H*3|0;p[j+(T<<3)>>3]=S*2.0;U=+p[c+56+(H<<3)>>3];p[j+(T+1<<3)>>3]=U;p[j+(T+2<<3)>>3]=0.0;p[j+(T+27<<3)>>3]=S;p[j+(T+28<<3)>>3]=U*2.0;p[j+(T+29<<3)>>3]=0.0;p[j+(T+54<<3)>>3]=U;p[j+(T+55<<3)>>3]=S;p[j+(T+56<<3)>>3]=0.0;H=H+1|0}while((H|0)!=6);s=F;t=s+72|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));s=I;t=s+72|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));s=A;t=s+72|0;do{k[s>>2]=0;s=s+4|0}while((s|0)<(t|0));H=k[J>>2]|0;Tc[k[(k[H>>2]|0)+108>>2]&15](H,e,3,k[q>>2]|0,y,u,x,w);S=+p[d>>3];U=+p[e>>3]*2.0*+p[K>>3]*S;p[l>>3]=U;p[M>>3]=U;p[N>>3]=U;p[L>>3]=-(+p[K>>3]*S*+p[f>>3]);p[m>>3]=U;p[O>>3]=U;p[P>>3]=U;ZX(g,4,27,1,l,4,4,0,h,4,6,0,n,1)|0;ZX(i,3,6,1,m,3,3,0,j,3,27,0,o,1)|0;R=R+1|0}while((R|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}R=k[E+12>>2]|0;j=0;do{m=j*39|0;i=R+(m+468<<3)|0;p[i>>3]=+p[n+(j*48|0)>>3]+ +p[i>>3];i=R+(m+469<<3)|0;p[i>>3]=+p[n+(j*48|0)+8>>3]+ +p[i>>3];i=R+(m+470<<3)|0;p[i>>3]=+p[n+(j*48|0)+16>>3]+ +p[i>>3];i=R+(m+471<<3)|0;p[i>>3]=+p[n+(j*48|0)+24>>3]+ +p[i>>3];i=R+(m+472<<3)|0;p[i>>3]=+p[n+(j*48|0)+32>>3]+ +p[i>>3];i=R+(m+473<<3)|0;p[i>>3]=+p[n+(j*48|0)+40>>3]+ +p[i>>3];j=j+1|0}while((j|0)!=27);V=0;do{j=R+(V+12<<3)|0;p[j>>3]=+p[o+(V<<3)>>3]+ +p[j>>3];V=V+1|0}while((V|0)!=27);W=0;do{V=R+(W+51<<3)|0;p[V>>3]=+p[o+216+(W<<3)>>3]+ +p[V>>3];W=W+1|0}while((W|0)!=27);X=0;do{W=R+(X+90<<3)|0;p[W>>3]=+p[o+432+(X<<3)>>3]+ +p[W>>3];X=X+1|0}while((X|0)!=27);Y=0;do{X=R+(Y+129<<3)|0;p[X>>3]=+p[o+648+(Y<<3)>>3]+ +p[X>>3];Y=Y+1|0}while((Y|0)!=27);Z=0;do{Y=R+(Z+168<<3)|0;p[Y>>3]=+p[o+864+(Z<<3)>>3]+ +p[Y>>3];Z=Z+1|0}while((Z|0)!=27);_=0;do{Z=R+(_+207<<3)|0;p[Z>>3]=+p[o+1080+(_<<3)>>3]+ +p[Z>>3];_=_+1|0}while((_|0)!=27);Gq(b,E,D,z,C);Tqa(C);Tqa(D);D=k[q>>2]|0;if(D)Tqa(D);k[q>>2]=0;q=k[v+28>>2]|0;if(q)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);Ec[k[(k[v>>2]|0)+4>>2]&1023](v);if(!y){$=k[G>>2]|0;aa=$+4|0;ba=k[aa>>2]|0;Ec[ba&1023](G);r=a;return E|0}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);$=k[G>>2]|0;aa=$+4|0;ba=k[aa>>2]|0;Ec[ba&1023](G);r=a;return E|0}function qaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0;a=r;r=r+5040|0;c=a+5024|0;d=a+5008|0;e=a+5e3|0;f=a+4992|0;g=a+4984|0;h=a+4960|0;i=a+4576|0;j=a+2848|0;l=a+2336|0;m=a+2048|0;n=a+1856|0;o=a+1728|0;q=a+432|0;s=a;t=a+5020|0;u=a+5016|0;WEa(l|0,0,512)|0;v=o;w=v+128|0;do{k[v>>2]=0;v=v+4|0}while((v|0)<(w|0));WEa(q|0,0,1296)|0;WEa(s|0,0,432)|0;k[t>>2]=0;k[u>>2]=0;Ap(b,c,533);if(_p(b)|0){x=0;r=a;return x|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){x=0;r=a;return x|0}c=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;v=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;w=(c<<1)+-1|0;y=v+w|0;z=y>>>0>1073741823?-1:y<<2;A=Rqa(z)|0;C=Rqa(z)|0;if((c|0)>1){z=c+-1|0;D=0;do{E=ed[k[(k[b>>2]|0)+156>>2]&511](b,D)|0;k[C+(D<<2)>>2]=E;k[A+(D<<2)>>2]=971;D=D+1|0}while((D|0)!=(z|0))}if((c|0)>0){z=c+-1|0;D=0;do{E=ed[k[(k[b>>2]|0)+156>>2]&511](b,D)|0;F=z+D|0;k[C+(F<<2)>>2]=E;k[A+(F<<2)>>2]=972;D=D+1|0}while((D|0)!=(c|0))}if((v|0)>0){D=0;do{z=ed[k[(k[b>>2]|0)+156>>2]&511](b,D+c|0)|0;F=D+w|0;k[C+(F<<2)>>2]=z;k[A+(F<<2)>>2]=653;D=D+1|0}while((D|0)!=(v|0))}v=hq(b,6,536)|0;D=gq(b,543)|0;w=Qqa(68)|0;B=0;eb(515,w|0,v|0,D|0);c=B;B=0;if(c&1){c=Rb()|0;F=Q;Sqa(w);G=c;H=F;Qb(G|0)}if(v){HN(v);Sqa(v)}if(D){HN(D);Sqa(D)}Uo(b,t);Fc[k[(k[b>>2]|0)+188>>2]&1023](b,u);pp(b,d,85);D=Wo(b,674)|0;v=Wo(b,677)|0;F=Wo(b,679)|0;c=Qqa(16)|0;B=0;eb(524,c|0,b|0,3);z=B;B=0;if(z&1){z=Rb()|0;E=Q;Sqa(c);G=z;H=E;Qb(G|0)}G=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;E=Hc[k[(k[G>>2]|0)+8>>2]&511](G)|0;if((E|0)<(Hc[k[(k[G>>2]|0)+12>>2]&511](G)|0)){H=G+40|0;z=G+64|0;I=G+48|0;J=G+56|0;K=m+8|0;L=m+72|0;M=m+80|0;N=m+88|0;O=m+144|0;P=m+160|0;R=m+216|0;S=m+232|0;T=m+24|0;U=m+32|0;V=m+96|0;W=m+104|0;X=m+112|0;Y=m+168|0;Z=m+184|0;_=m+240|0;$=m+256|0;aa=m+48|0;ba=m+56|0;ca=m+120|0;da=m+128|0;ea=m+136|0;fa=m+192|0;ga=m+208|0;ha=m+264|0;ia=m+280|0;ja=n+8|0;ka=n+48|0;la=n+56|0;ma=n+96|0;na=n+104|0;oa=n+144|0;pa=n+152|0;qa=n+16|0;ra=n+24|0;sa=n+64|0;ta=n+72|0;ua=n+112|0;va=n+120|0;wa=n+160|0;xa=n+168|0;ya=n+32|0;za=n+40|0;Aa=n+80|0;Ba=n+88|0;Ca=n+128|0;Da=n+136|0;Ea=n+176|0;Fa=n+184|0;Ga=b+28|0;Ha=G+8|0;Ia=l+72|0;Ja=h+16|0;Ka=l+144|0;La=h+8|0;Ma=l+216|0;Na=l+288|0;Oa=l+360|0;Pa=l+432|0;Qa=l+504|0;Ra=o+40|0;Sa=o+80|0;Ta=o+120|0;Ua=E;do{Fc[k[(k[G>>2]|0)+24>>2]&1023](G,Ua);rd[k[(k[b>>2]|0)+264>>2]&511](b,g,k[u>>2]|0,G);raa(0,i,0,G);saa(0,j,b,k[t>>2]|0,G);Va=1.0-+p[z>>3];Wa=+p[H>>3]*Va*.5;Xa=+p[I>>3]*Va*.5;Ya=Va*+p[J>>3]*.5;p[m>>3]=Wa;p[L>>3]=0.0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;p[M>>3]=Wa;p[N>>3]=0.0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;p[P>>3]=Wa;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;p[S>>3]=Wa;p[T>>3]=Xa;p[V>>3]=0.0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;p[W>>3]=Xa;p[X>>3]=0.0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[Z>>3]=Xa;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;p[$>>3]=Xa;p[aa>>3]=Ya;p[ca>>3]=0.0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;p[da>>3]=Ya;p[ea>>3]=0.0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;p[ga>>3]=Ya;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;p[ia>>3]=Ya;Ya=1.0-+p[z>>3];Xa=+p[H>>3]*Ya*.5;Wa=+p[I>>3]*Ya*.5;Va=Ya*+p[J>>3]*.5;p[n>>3]=Xa;p[ja>>3]=0.0;p[ka>>3]=0.0;p[la>>3]=Xa;p[ma>>3]=Xa;p[na>>3]=0.0;p[oa>>3]=0.0;p[pa>>3]=Xa;p[qa>>3]=Wa;p[ra>>3]=0.0;p[sa>>3]=0.0;p[ta>>3]=Wa;p[ua>>3]=Wa;p[va>>3]=0.0;p[wa>>3]=0.0;p[xa>>3]=Wa;p[ya>>3]=Va;p[za>>3]=0.0;p[Aa>>3]=0.0;p[Ba>>3]=Va;p[Ca>>3]=Va;p[Da>>3]=0.0;p[Ea>>3]=0.0;p[Fa>>3]=Va;E=k[Ga>>2]|0;Tc[k[(k[E>>2]|0)+108>>2]&15](E,e,3,k[t>>2]|0,G,D,v,F);nd[k[(k[b>>2]|0)+380>>2]&1023](b,h,k[u>>2]|0);fla(c,f,G);Va=+p[f>>3];Wa=+p[g>>3];p[l>>3]=Va*+p[Ha>>3]*Wa;p[Ia>>3]=Va*+p[Ha>>3]*Wa;Xa=+p[h>>3];Ya=+p[Ja>>3];p[Ka>>3]=-(Va*+p[Ha>>3]*Wa*Xa*Ya);Za=+p[La>>3];p[Ma>>3]=-(Va*+p[Ha>>3]*Wa*Za*Ya);_a=+p[e>>3]*-2.0;p[Na>>3]=_a*+p[Ha>>3]*Wa*Xa;p[Oa>>3]=_a*+p[Ha>>3]*Wa*Za;_a=+p[d>>3];p[Pa>>3]=_a*+p[Ha>>3]*Wa*Xa;p[Qa>>3]=_a*+p[Ha>>3]*Wa*Za;p[o>>3]=Va*+p[Ha>>3]*Wa;p[Ra>>3]=Va*+p[Ha>>3]*Wa;p[Sa>>3]=-(Va*+p[Ha>>3]*Wa*Xa*Ya);p[Ta>>3]=-(Va*+p[Ha>>3]*Wa*Za*Ya);ZX(i,8,6,1,l,8,8,0,j,8,27,0,q,1)|0;ZX(m,4,9,1,o,4,4,0,n,4,6,0,s,1)|0;Ua=Ua+1|0}while((Ua|0)<(Hc[k[(k[G>>2]|0)+12>>2]&511](G)|0))}Ua=k[w+12>>2]|0;n=0;do{o=Ua+(n+12<<3)|0;p[o>>3]=+p[q+(n<<3)>>3]+ +p[o>>3];n=n+1|0}while((n|0)!=27);$a=0;do{n=Ua+($a+51<<3)|0;p[n>>3]=+p[q+216+($a<<3)>>3]+ +p[n>>3];$a=$a+1|0}while(($a|0)!=27);ab=0;do{$a=Ua+(ab+90<<3)|0;p[$a>>3]=+p[q+432+(ab<<3)>>3]+ +p[$a>>3];ab=ab+1|0}while((ab|0)!=27);bb=0;do{ab=Ua+(bb+129<<3)|0;p[ab>>3]=+p[q+648+(bb<<3)>>3]+ +p[ab>>3];bb=bb+1|0}while((bb|0)!=27);cb=0;do{bb=Ua+(cb+168<<3)|0;p[bb>>3]=+p[q+864+(cb<<3)>>3]+ +p[bb>>3];cb=cb+1|0}while((cb|0)!=27);db=0;do{cb=Ua+(db+207<<3)|0;p[cb>>3]=+p[q+1080+(db<<3)>>3]+ +p[cb>>3];db=db+1|0}while((db|0)!=27);fb=0;do{db=fb*39|0;q=Ua+(db+468<<3)|0;p[q>>3]=+p[s+(fb*48|0)>>3]+ +p[q>>3];q=Ua+(db+469<<3)|0;p[q>>3]=+p[s+(fb*48|0)+8>>3]+ +p[q>>3];q=Ua+(db+470<<3)|0;p[q>>3]=+p[s+(fb*48|0)+16>>3]+ +p[q>>3];q=Ua+(db+471<<3)|0;p[q>>3]=+p[s+(fb*48|0)+24>>3]+ +p[q>>3];q=Ua+(db+472<<3)|0;p[q>>3]=+p[s+(fb*48|0)+32>>3]+ +p[q>>3];q=Ua+(db+473<<3)|0;p[q>>3]=+p[s+(fb*48|0)+40>>3]+ +p[q>>3];fb=fb+1|0}while((fb|0)!=9);Gq(b,w,C,y,A);Tqa(A);Tqa(C);C=k[t>>2]|0;if(C)Tqa(C);k[t>>2]=0;t=k[u>>2]|0;if(t)Tqa(t);k[u>>2]=0;if(G)Ec[k[(k[G>>2]|0)+4>>2]&1023](G);bla(c);Sqa(c);x=w;r=a;return x|0}function raa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0;c=r;r=r+32|0;a=c;e=1.0-+p[d+64>>3];f=+p[d+40>>3]*e*.5;p[a>>3]=f;p[a+8>>3]=+p[d+48>>3]*e*.5;p[a+16>>3]=+p[d+56>>3]*e*.5;e=f;d=0;while(1){g=d<<1;p[b+(g<<3)>>3]=e;p[b+((g|1)<<3)>>3]=0.0;p[b+(g+6<<3)>>3]=0.0;p[b+(g+7<<3)>>3]=e;p[b+(g+12<<3)>>3]=e;p[b+(g+13<<3)>>3]=0.0;p[b+(g+18<<3)>>3]=0.0;p[b+(g+19<<3)>>3]=e;p[b+(g+24<<3)>>3]=e;p[b+(g+25<<3)>>3]=0.0;p[b+(g+30<<3)>>3]=0.0;p[b+(g+31<<3)>>3]=e;p[b+(g+36<<3)>>3]=e;p[b+(g+37<<3)>>3]=0.0;p[b+(g+42<<3)>>3]=0.0;p[b+(g+43<<3)>>3]=e;g=d+1|0;if((g|0)==3)break;e=+p[a+(g<<3)>>3];d=g}r=c;return}function saa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0,o=0,q=0;a=r;r=r+176|0;f=a+144|0;g=a;h=1.0-+p[e+64>>3];i=+p[e+40>>3]*h*.5;p[f>>3]=i;j=+p[e+48>>3]*h*.5;p[f+8>>3]=j;l=+p[e+56>>3]*h*.5;p[f+16>>3]=l;rd[k[(k[c>>2]|0)+360>>2]&511](c,g,d,e);h=i;e=0;while(1){d=e*3|0;p[b+(d<<3)>>3]=h;p[b+(d+1<<3)>>3]=0.0;p[b+(d+2<<3)>>3]=0.0;p[b+(d+27<<3)>>3]=0.0;p[b+(d+28<<3)>>3]=h;p[b+(d+29<<3)>>3]=0.0;p[b+(d+54<<3)>>3]=0.0;p[b+(d+55<<3)>>3]=0.0;p[b+(d+56<<3)>>3]=h;p[b+(d+81<<3)>>3]=0.0;p[b+(d+82<<3)>>3]=0.0;p[b+(d+83<<3)>>3]=h;p[b+(d+108<<3)>>3]=0.0;p[b+(d+109<<3)>>3]=0.0;m=+p[g+96+(e<<3)>>3];p[b+(d+110<<3)>>3]=m;p[b+(d+135<<3)>>3]=0.0;p[b+(d+136<<3)>>3]=0.0;p[b+(d+137<<3)>>3]=m;p[b+(d+162<<3)>>3]=0.0;p[b+(d+163<<3)>>3]=0.0;p[b+(d+164<<3)>>3]=0.0;p[b+(d+189<<3)>>3]=0.0;p[b+(d+190<<3)>>3]=0.0;p[b+(d+191<<3)>>3]=0.0;d=e+1|0;if((d|0)==3){n=3;break}h=+p[f+(d<<3)>>3];e=d}do{e=n*3|0;p[b+(e<<3)>>3]=0.0;p[b+(e+1<<3)>>3]=0.0;p[b+(e+2<<3)>>3]=0.0;p[b+(e+27<<3)>>3]=0.0;p[b+(e+28<<3)>>3]=0.0;p[b+(e+29<<3)>>3]=0.0;p[b+(e+54<<3)>>3]=0.0;p[b+(e+55<<3)>>3]=0.0;p[b+(e+56<<3)>>3]=0.0;p[b+(e+81<<3)>>3]=0.0;p[b+(e+82<<3)>>3]=0.0;p[b+(e+83<<3)>>3]=0.0;p[b+(e+108<<3)>>3]=0.0;p[b+(e+109<<3)>>3]=0.0;p[b+(e+110<<3)>>3]=0.0;p[b+(e+135<<3)>>3]=0.0;p[b+(e+136<<3)>>3]=0.0;p[b+(e+137<<3)>>3]=0.0;p[b+(e+162<<3)>>3]=0.0;p[b+(e+163<<3)>>3]=0.0;p[b+(e+164<<3)>>3]=0.0;p[b+(e+189<<3)>>3]=0.0;p[b+(e+190<<3)>>3]=0.0;p[b+(e+191<<3)>>3]=0.0;n=n+1|0}while((n|0)!=7);p[b+168>>3]=0.0;p[b+384>>3]=0.0;p[b+600>>3]=0.0;p[b+816>>3]=0.0;p[b+1032>>3]=0.0;p[b+1248>>3]=0.0;p[b+1464>>3]=i;p[b+1680>>3]=i;p[b+176>>3]=0.0;p[b+392>>3]=0.0;p[b+608>>3]=0.0;p[b+824>>3]=0.0;p[b+1040>>3]=0.0;p[b+1256>>3]=0.0;p[b+1472>>3]=j;p[b+1688>>3]=j;p[b+184>>3]=0.0;p[b+400>>3]=0.0;p[b+616>>3]=0.0;p[b+832>>3]=0.0;p[b+1048>>3]=0.0;p[b+1264>>3]=0.0;p[b+1480>>3]=l;p[b+1696>>3]=l;n=b+192|0;e=b+408|0;f=b+624|0;g=b+840|0;d=b+1056|0;c=b+1272|0;o=b+1488|0;q=b+1704|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;k[n+20>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[g+20>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;k[q+20>>2]=0;r=a;return}function taa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0.0;a=r;r=r+224|0;f=a+48|0;g=a;rd[k[(k[c>>2]|0)+348>>2]&511](c,f,d,e);nd[k[(k[c>>2]|0)+356>>2]&1023](c,g,e);e=0;do{h=+p[f+(e<<3)>>3];c=e*3|0;p[b+(c<<3)>>3]=h;p[b+(c+1<<3)>>3]=0.0;p[b+(c+2<<3)>>3]=0.0;p[b+(c+27<<3)>>3]=0.0;i=+p[f+56+(e<<3)>>3];p[b+(c+28<<3)>>3]=i;p[b+(c+29<<3)>>3]=0.0;p[b+(c+54<<3)>>3]=i*.5;p[b+(c+55<<3)>>3]=h*.5;p[b+(c+56<<3)>>3]=0.0;p[b+(c+81<<3)>>3]=0.0;p[b+(c+82<<3)>>3]=0.0;p[b+(c+83<<3)>>3]=0.0;e=e+1|0}while((e|0)!=6);e=b+144|0;f=b+360|0;c=b+576|0;d=b+792|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[e+20>>2]=0;k[e+24>>2]=0;k[e+28>>2]=0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[f+24>>2]=0;k[f+28>>2]=0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[c+24>>2]=0;k[c+28>>2]=0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;p[b+816>>3]=+p[g>>3];p[b+176>>3]=0.0;p[b+392>>3]=0.0;p[b+608>>3]=0.0;p[b+824>>3]=+p[g+8>>3];p[b+184>>3]=0.0;p[b+400>>3]=0.0;p[b+616>>3]=0.0;p[b+832>>3]=+p[g+16>>3];p[b+192>>3]=0.0;p[b+408>>3]=0.0;p[b+624>>3]=0.0;p[b+840>>3]=+p[g+24>>3];p[b+200>>3]=0.0;p[b+416>>3]=0.0;p[b+632>>3]=0.0;p[b+848>>3]=+p[g+32>>3];p[b+208>>3]=0.0;p[b+424>>3]=0.0;p[b+640>>3]=0.0;p[b+856>>3]=+p[g+40>>3];r=a;return}function uaa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0,j=0,l=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;f=a<<1;g=Rqa(f>>>0>536870911?-1:f<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,g,d,e);if((a|0)<=0){Tqa(g);return}e=a<<2;d=a*6|0;c=0;do{h=+p[g+(c<<3)>>3];i=c<<1;p[b+(i<<3)>>3]=h;p[b+((i|1)<<3)>>3]=0.0;j=i+f|0;p[b+(j<<3)>>3]=0.0;l=+p[g+(c+a<<3)>>3];p[b+((j|1)<<3)>>3]=l;j=i+e|0;p[b+(j<<3)>>3]=l;p[b+((j|1)<<3)>>3]=h;j=i+d|0;p[b+(j<<3)>>3]=h;p[b+((j|1)<<3)>>3]=l;c=c+1|0}while((c|0)!=(a|0));Tqa(g);return}function vaa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0,j=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;f=a<<1;g=Rqa(f>>>0>536870911?-1:f<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,g,d,e);if((a|0)<=0){Tqa(g);return}e=a<<2;d=0;do{h=+p[g+(d<<3)>>3];c=d<<1;p[b+(c<<3)>>3]=h;p[b+((c|1)<<3)>>3]=0.0;i=c+f|0;p[b+(i<<3)>>3]=0.0;j=+p[g+(d+a<<3)>>3];p[b+((i|1)<<3)>>3]=j;i=c+e|0;p[b+(i<<3)>>3]=j*.5;p[b+((i|1)<<3)>>3]=h*.5;d=d+1|0}while((d|0)!=(a|0));Tqa(g);return}function waa(a,b){a=a|0;b=b|0;var c=0,d=0;c=xaa(a,b)|0;a=yaa(0,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,c|0,a|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}HN(c);Sqa(c);if(!a)return b|0;HN(a);Sqa(a);return b|0}function xaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0;a=r;r=r+112|0;c=a+96|0;d=a+88|0;e=a+80|0;f=a+72|0;g=a+104|0;h=a;i=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;j=i<<1;l=i<<2;k[g>>2]=0;m=i*6|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;m=i*3|0;o=Rqa(m>>>0>536870911?-1:m<<3)|0;m=h;q=m+72|0;do{k[m>>2]=0;m=m+4|0}while((m|0)<(q|0));m=ma(j,i)|0;q=Rqa(m>>>0>536870911?-1:m<<3)|0;if(m)WEa(q|0,0,m<<3|0)|0;m=j>>>0>1073741823?-1:j<<2;s=Rqa(m)|0;t=Rqa(m)|0;m=Hc[k[(k[b>>2]|0)+124>>2]&511](b)|0;u=Hc[k[(k[m>>2]|0)+432>>2]&511](m)|0;v=(i|0)>0;if(v){w=0;do{x=ed[k[(k[m>>2]|0)+156>>2]&511](m,w)|0;k[s+(w<<2)>>2]=x;x=ed[k[(k[b>>2]|0)+156>>2]&511](b,w)|0;y=w+i|0;k[s+(y<<2)>>2]=x;k[t+(w<<2)>>2]=971;k[t+(y<<2)>>2]=971;w=w+1|0}while((w|0)!=(i|0))}w=gq(m,536)|0;m=gq(b,540)|0;y=Qqa(68)|0;B=0;eb(515,y|0,w|0,m|0);x=B;B=0;if(x&1){x=Rb()|0;z=Q;Sqa(y);A=x;C=z;Qb(A|0)}if(w){HN(w);Sqa(w)}if(m){HN(m);Sqa(m)}Uo(b,g);pp(b,f,87);m=Wo(b,674)|0;w=Wo(b,677)|0;z=Wo(b,675)|0;x=Wo(b,678)|0;D=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;E=Qqa(64)|0;B=0;va(491,E|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Sqa(E);A=F;C=G;Qb(A|0)}A=Hc[k[(k[D>>2]|0)+8>>2]&511](D)|0;if((A|0)<(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0)){G=b+28|0;C=D+8|0;F=h+32|0;H=h+64|0;I=A;do{Fc[k[(k[D>>2]|0)+24>>2]&1023](D,I);Fc[k[(k[D>>2]|0)+36>>2]&1023](D,E);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[g>>2]|0,D);zaa(0,n,b,k[g>>2]|0,D);K9(0,o,u,2,k[g>>2]|0,E);A=k[G>>2]|0;ad[k[(k[A>>2]|0)+116>>2]&63](A,d,3,k[g>>2]|0,D,m,w);A=k[G>>2]|0;ad[k[(k[A>>2]|0)+116>>2]&63](A,e,3,k[g>>2]|0,D,z,x);J=+p[d>>3];K=+p[c>>3]*(+p[C>>3]*((J+ +p[f>>3]*(J-+p[e>>3]))*2.0));p[h>>3]=K;p[F>>3]=K;p[H>>3]=K;ZX(n,3,j,1,h,3,3,0,o,3,i,0,q,1)|0;I=I+1|0}while((I|0)<(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0))}if(v){I=k[y+12>>2]|0;h=0;do{H=ma(h,i)|0;F=ma(h+j|0,l)|0;e=0;do{f=I+(e+F<<3)|0;p[f>>3]=+p[q+(e+H<<3)>>3]+ +p[f>>3];e=e+1|0}while((e|0)!=(i|0));h=h+1|0}while((h|0)<(j|0));if(v){v=k[y+12>>2]|0;h=0;do{I=(ma(h,l)|0)+j|0;e=0;do{H=q+((ma(e,i)|0)+h<<3)|0;F=v+(I+e<<3)|0;p[F>>3]=+p[H>>3]+ +p[F>>3];e=e+1|0}while((e|0)<(j|0));h=h+1|0}while((h|0)!=(i|0))}}Gq(b,y,s,j,t);ap(u);if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);if(D)Ec[k[(k[D>>2]|0)+4>>2]&1023](D);Ec[k[(k[E>>2]|0)+4>>2]&1023](E);Tqa(n);Tqa(o);Tqa(q);q=k[g>>2]|0;if(!q){k[g>>2]=0;Tqa(s);Tqa(t);r=a;return y|0}Tqa(q);k[g>>2]=0;Tqa(s);Tqa(t);r=a;return y|0}function yaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0;a=r;r=r+64|0;c=a+40|0;d=a+32|0;e=a+48|0;f=a;if(_p(b)|0){g=0;r=a;return g|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){g=0;r=a;return g|0}h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=h<<1;j=h<<2;k[e>>2]=0;l=Rqa(j>>>0>536870911?-1:j<<3)|0;if(h)WEa(l|0,0,h<<5|0)|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[f+24>>2]=0;k[f+28>>2]=0;m=ma(i,i)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;if(m)WEa(n|0,0,m<<3|0)|0;m=i>>>0>1073741823?-1:i<<2;o=Rqa(m)|0;q=Rqa(m)|0;m=gq(b,536)|0;s=gq(b,540)|0;t=Qqa(68)|0;B=0;eb(515,t|0,m|0,s|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Sqa(t);w=v;x=u;Qb(x|0)}if(m){HN(m);Sqa(m)}if(s){HN(s);Sqa(s)}s=(h|0)>0;if(s){m=0;do{u=ed[k[(k[b>>2]|0)+156>>2]&511](b,m)|0;k[o+(m<<2)>>2]=u;u=ed[k[(k[b>>2]|0)+156>>2]&511](b,m)|0;v=m+h|0;k[o+(v<<2)>>2]=u;k[q+(m<<2)>>2]=971;k[q+(v<<2)>>2]=971;m=m+1|0}while((m|0)!=(h|0))}Fc[k[(k[b>>2]|0)+188>>2]&1023](b,e);h=Qqa(16)|0;B=0;eb(524,h|0,b|0,2);m=B;B=0;if(m&1){m=Rb()|0;v=Q;Sqa(h);w=v;x=m;Qb(x|0)}x=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;m=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((m|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){v=x+8|0;w=f+24|0;u=m;do{Fc[k[(k[x>>2]|0)+24>>2]&1023](x,u);fla(h,d,x);rd[k[(k[b>>2]|0)+264>>2]&511](b,c,k[e>>2]|0,x);m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;y=Rqa(m>>>0>536870911?-1:m<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,y,x);if((m|0)>0){z=m<<1;A=0;do{C=+p[y+(A<<3)>>3];D=A<<1;p[l+(D<<3)>>3]=C;p[l+((D|1)<<3)>>3]=0.0;E=D+z|0;p[l+(E<<3)>>3]=0.0;p[l+((E|1)<<3)>>3]=C;A=A+1|0}while((A|0)!=(m|0))}Tqa(y);C=+p[d>>3]*+p[v>>3]*+p[c>>3];p[f>>3]=C;p[w>>3]=C;ZX(l,2,i,1,f,2,2,0,l,2,i,0,n,1)|0;u=u+1|0}while((u|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0))}if(s){u=k[t+12>>2]|0;f=0;do{w=ma(f,i)|0;c=(ma(f,j)|0)+i|0;v=0;do{d=u+(c+v<<3)|0;p[d>>3]=+p[n+(v+w<<3)>>3]+ +p[d>>3];v=v+1|0}while((v|0)<(i|0));f=f+1|0}while((f|0)<(i|0));if(s){s=k[t+12>>2]|0;f=0;do{u=ma(f,i)|0;v=ma(f+i|0,j)|0;w=0;do{c=s+(w+v<<3)|0;p[c>>3]=+p[n+(w+u<<3)>>3]+ +p[c>>3];w=w+1|0}while((w|0)<(i|0));f=f+1|0}while((f|0)<(i|0))}}Gq(b,t,o,i,q);if(x)Ec[k[(k[x>>2]|0)+4>>2]&1023](x);bla(h);Sqa(h);Tqa(q);Tqa(o);o=k[e>>2]|0;if(o)Tqa(o);k[e>>2]=0;Tqa(n);Tqa(l);g=t;r=a;return g|0}function zaa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0,j=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;f=a*3|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,g,d,e);if((a|0)<=0){Tqa(g);return}e=a<<1;d=a<<2;c=0;do{h=+p[g+(c<<3)>>3];f=c<<1;p[b+(f<<3)>>3]=h;p[b+((f|1)<<3)>>3]=0.0;i=f+e|0;p[b+(i<<3)>>3]=0.0;j=+p[g+(c+a<<3)>>3];p[b+((i|1)<<3)>>3]=j;i=f+d|0;p[b+(i<<3)>>3]=j*.5;p[b+((i|1)<<3)>>3]=h*.5;c=c+1|0}while((c|0)!=(a|0));Tqa(g);return}function Aaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Baa(0,b)|0;if(!(_p(b)|0)?Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0:0){d=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;b=I9(a,d)|0;ap(d);if(!d)e=b;else{Ec[k[(k[d>>2]|0)+4>>2]&1023](d);e=b}}else e=0;b=Qqa(68)|0;B=0;eb(515,b|0,c|0,e|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(c){HN(c);Sqa(c)}if(!e)return b|0;HN(e);Sqa(e);return b|0}function Baa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0.0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;a=r;r=r+896|0;c=a+872|0;d=a+868|0;e=a+680|0;f=a+672|0;g=a+664|0;h=a+656|0;i=a+648|0;j=a+504|0;l=a+360|0;m=a+288|0;n=a;o=a+864|0;q=a+728|0;s=a+712|0;t=a+700|0;u=a+688|0;v=m;w=v+72|0;do{k[v>>2]=0;v=v+4|0}while((v|0)<(w|0));WEa(n|0,0,288)|0;k[o>>2]=0;v=Hc[k[(k[b>>2]|0)+124>>2]&511](b)|0;w=Hc[k[(k[v>>2]|0)+432>>2]&511](v)|0;v=gq(w,536)|0;Ap(b,d,533);Uo(b,o);pp(b,i,87);x=Wo(b,674)|0;y=Wo(b,677)|0;z=Wo(b,675)|0;A=Wo(b,678)|0;C=Wo(b,679)|0;D=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;E=Qqa(64)|0;B=0;va(491,E|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Sqa(E);H=G;I=F;Qb(I|0)}F=Hc[k[(k[D>>2]|0)+8>>2]&511](D)|0;a:do if((F|0)<(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0)){G=b+28|0;J=D+8|0;K=m+32|0;L=m+64|0;M=F;b:while(1){Fc[k[(k[D>>2]|0)+24>>2]&1023](D,M);Fc[k[(k[D>>2]|0)+36>>2]&1023](D,E);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[o>>2]|0,D);J9(0,j,w,2,k[o>>2]|0,E);K9(0,l,w,2,k[o>>2]|0,E);switch(k[d>>2]|0){case 537:{N=k[G>>2]|0;ad[k[(k[N>>2]|0)+116>>2]&63](N,f,3,k[o>>2]|0,D,x,y);N=k[G>>2]|0;ad[k[(k[N>>2]|0)+116>>2]&63](N,g,3,k[o>>2]|0,D,z,A);O=+p[f>>3];P=O+ +p[i>>3]*(O-+p[g>>3]);p[h>>3]=P;R=P;break}case 538:{N=k[G>>2]|0;Tc[k[(k[N>>2]|0)+108>>2]&15](N,h,3,k[o>>2]|0,D,x,y,C);R=+p[h>>3];break}default:break b}P=R*2.0*+p[J>>3]*+p[e>>3];p[m>>3]=P;p[K>>3]=P;p[L>>3]=P;ZX(j,3,6,1,m,3,3,0,l,3,6,0,n,1)|0;M=M+1|0;if((M|0)>=(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0))break a}M=q+56|0;L=q+4|0;k[q>>2]=27524;k[M>>2]=27544;B=0;wa(508,q+56|0,L|0);K=B;B=0;if(K&1){K=Rb()|0;S=Q;T=K;vva(M);Qb(T|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[M>>2]=27488;B=0;va(448,L|0);K=B;B=0;do if(K&1){J=Rb()|0;U=Q;V=J}else{k[L>>2]=27560;J=q+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,L|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;N=Q;Yua(c);Yua(J);Ava(L);U=N;V=G;break}Yua(c);B=0;G=Ia(40,q|0,128699,14)|0;N=B;B=0;c:do if((((((!(N&1)?(B=0,W=Xa(242,G|0,k[d>>2]|0)|0,X=B,B=0,!(X&1)):0)?(B=0,X=Ia(40,W|0,144166,2)|0,W=B,B=0,!(W&1)):0)?(B=0,W=ya(427,k[d>>2]|0)|0,Y=B,B=0,!(Y&1)):0)?(Y=Lta(W)|0,B=0,Z=Ia(40,X|0,W|0,Y|0)|0,Y=B,B=0,!(Y&1)):0)?(B=0,Y=Ia(40,Z|0,144169,19)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Xa(239,Y|0,0)|0,Y=B,B=0,!(Y&1)):0){Y=Ab(20)|0;B=0;eb(502,s|0,127077,81);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,t|0,128714,25);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(s);_=X;$=W;break}B=0;wa(510,u|0,L|0);W=B;B=0;if(W&1){W=Rb()|0;aa=Q;ba=W;ca=1}else{B=0;ua(163,Y|0,s|0,t|0,5974,u|0);W=B;B=0;if(W&1)da=1;else{B=0;eb(503,Y|0,1240,229);B=0;da=0}W=Rb()|0;X=Q;Yua(u);aa=X;ba=W;ca=da}Yua(t);Yua(s);if(ca){_=aa;$=ba}else{ea=aa;fa=ba;break c}}else{W=Rb()|0;_=Q;$=W}while(0);zb(Y|0);ea=_;fa=$}else ga=29;while(0);if((ga|0)==29){G=Rb()|0;ea=Q;fa=G}k[q>>2]=27468;k[M>>2]=27488;k[L>>2]=27560;Yua(J);Ava(L);vva(M);H=ea;I=fa;Qb(I|0)}while(0);S=U;T=V;vva(M);Qb(T|0)}while(0);T=k[v+12>>2]|0;V=0;do{U=V*6|0;S=T+(U<<3)|0;p[S>>3]=+p[n+(V*48|0)>>3]+ +p[S>>3];S=T+((U|1)<<3)|0;p[S>>3]=+p[n+(V*48|0)+8>>3]+ +p[S>>3];S=T+(U+2<<3)|0;p[S>>3]=+p[n+(V*48|0)+16>>3]+ +p[S>>3];S=T+(U+3<<3)|0;p[S>>3]=+p[n+(V*48|0)+24>>3]+ +p[S>>3];S=T+(U+4<<3)|0;p[S>>3]=+p[n+(V*48|0)+32>>3]+ +p[S>>3];S=T+(U+5<<3)|0;p[S>>3]=+p[n+(V*48|0)+40>>3]+ +p[S>>3];V=V+1|0}while((V|0)!=6);Fq(w,v,971);V=k[o>>2]|0;if(V)Tqa(V);k[o>>2]=0;o=k[w+28>>2]|0;if(o)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);Ec[k[(k[w>>2]|0)+4>>2]&1023](w);Ec[k[(k[E>>2]|0)+4>>2]&1023](E);if(!D){r=a;return v|0}Ec[k[(k[D>>2]|0)+4>>2]&1023](D);r=a;return v|0}function Caa(a,b){a=a|0;b=b|0;var c=0,d=0;a=Daa(0,b)|0;c=Eaa(0,b)|0;b=Qqa(24)|0;B=0;eb(516,b|0,a|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(a){SN(a);Sqa(a)}if(!c)return b|0;SN(c);Sqa(c);return b|0}function Daa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;a=r;r=r+256|0;c=a+244|0;d=a+232|0;e=a+224|0;f=a+216|0;g=a+192|0;h=a+240|0;i=a+144|0;j=a;k[h>>2]=0;Ap(b,c,533);if((k[c>>2]|0)!=541){l=0;r=a;return l|0}c=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;m=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;n=m+c|0;o=n>>>0>1073741823?-1:n<<2;q=Rqa(o)|0;s=Rqa(o)|0;if((c|0)>0){o=0;do{k[q+(o<<2)>>2]=972;t=ed[k[(k[b>>2]|0)+156>>2]&511](b,o)|0;k[s+(o<<2)>>2]=t;o=o+1|0}while((o|0)!=(c|0))}if((m|0)>0){o=0;do{t=o+c|0;k[q+(t<<2)>>2]=653;u=ed[k[(k[b>>2]|0)+156>>2]&511](b,t)|0;k[s+(t<<2)>>2]=u;o=o+1|0}while((o|0)!=(m|0))}m=iq(b,543)|0;Uo(b,h);pp(b,f,85);o=Wo(b,674)|0;u=Wo(b,677)|0;t=Wo(b,679)|0;v=Wo(b,681)|0;w=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=b+28|0;z=w+8|0;A=m+4|0;B=g+8|0;C=g+16|0;D=c*3|0;c=x;do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,c);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[h>>2]|0,w);nd[k[(k[b>>2]|0)+356>>2]&1023](b,i,w);rd[k[(k[b>>2]|0)+360>>2]&511](b,j,k[h>>2]|0,w);x=k[y>>2]|0;Tc[k[(k[x>>2]|0)+108>>2]&15](x,d,3,k[h>>2]|0,w,o,u,t);rd[k[(k[v>>2]|0)+60>>2]&511](v,g,k[h>>2]|0,w);x=k[A>>2]|0;E=0;do{F=j+96+(E<<3)|0;G=E*3|0;H=x+(G<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*+p[g>>3]*+p[F>>3];H=x+(G+1<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*+p[B>>3]*+p[F>>3];H=x+(G+2<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*(+p[g>>3]*+p[j+(E<<3)>>3]+ +p[B>>3]*+p[j+48+(E<<3)>>3]+ +p[C>>3]*2.0*+p[F>>3]);F=x+(E+D<<3)|0;p[F>>3]=+p[e>>3]*+p[z>>3]*+p[f>>3]*+p[C>>3]*+p[i+(E<<3)>>3]+ +p[F>>3];E=E+1|0}while((E|0)!=6);c=c+1|0}while((c|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}yq(b,m,s,n,q);Tqa(q);Tqa(s);s=k[h>>2]|0;if(s)Tqa(s);k[h>>2]=0;Ec[k[(k[w>>2]|0)+4>>2]&1023](w);l=m;r=a;return l|0}function Eaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0;a=r;r=r+160|0;c=a+144|0;d=a+128|0;e=a+120|0;f=a+96|0;g=a+88|0;h=a+80|0;i=a+72|0;j=a+48|0;l=a+140|0;m=a+136|0;n=a;k[l>>2]=0;k[m>>2]=0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){o=0;r=a;return o|0}if(_p(b)|0){o=0;r=a;return o|0}Ap(b,c,533);if((k[c>>2]|0)!=541){o=0;r=a;return o|0}c=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;q=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;s=q+c|0;t=s>>>0>1073741823?-1:s<<2;u=Rqa(t)|0;v=Rqa(t)|0;if((c|0)>0){t=0;do{k[u+(t<<2)>>2]=972;w=ed[k[(k[b>>2]|0)+156>>2]&511](b,t)|0;k[v+(t<<2)>>2]=w;t=t+1|0}while((t|0)!=(c|0))}if((q|0)>0){t=0;do{w=t+c|0;k[u+(w<<2)>>2]=653;x=ed[k[(k[b>>2]|0)+156>>2]&511](b,w)|0;k[v+(w<<2)>>2]=x;t=t+1|0}while((t|0)!=(q|0))}q=iq(b,543)|0;Uo(b,m);Fc[k[(k[b>>2]|0)+188>>2]&1023](b,l);pp(b,e,85);e=Wo(b,674)|0;t=Wo(b,677)|0;c=Wo(b,679)|0;x=Wo(b,681)|0;w=Qqa(16)|0;B=0;eb(524,w|0,b|0,3);y=B;B=0;if(y&1){y=Rb()|0;Sqa(w);Qb(y|0)}y=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;z=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((z|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){A=b+28|0;C=y+8|0;D=f+16|0;E=j+16|0;F=q+4|0;G=f+8|0;H=j+8|0;I=z;do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,I);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[l>>2]|0,y);nd[k[(k[b>>2]|0)+356>>2]&1023](b,n,y);nd[k[(k[x>>2]|0)+48>>2]&1023](x,h,y);rd[k[(k[x>>2]|0)+60>>2]&511](x,j,k[m>>2]|0,y);nd[k[(k[b>>2]|0)+380>>2]&1023](b,f,k[l>>2]|0);z=k[A>>2]|0;Tc[k[(k[z>>2]|0)+108>>2]&15](z,g,3,k[m>>2]|0,y,e,t,c);fla(w,i,y);z=k[F>>2]|0;J=0;do{K=+p[f>>3];L=n+(J<<3)|0;M=J*3|0;N=z+(M<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[d>>3]*+p[C>>3]*(+p[i>>3]*+p[h>>3]*K*+p[D>>3]+K*(+p[g>>3]*2.0*+p[E>>3])));K=+p[G>>3];N=z+(M+1<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[d>>3]*+p[C>>3]*(+p[i>>3]*+p[h>>3]*K*+p[D>>3]+K*(+p[g>>3]*2.0*+p[E>>3])));N=z+(M+2<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[g>>3]*(+p[d>>3]*+p[C>>3]*2.0)*(+p[j>>3]*+p[f>>3]+ +p[H>>3]*+p[G>>3]+ +p[E>>3]*+p[D>>3]));J=J+1|0}while((J|0)!=3);I=I+1|0}while((I|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}yq(b,q,v,s,u);Tqa(u);Tqa(v);v=k[m>>2]|0;if(v)Tqa(v);k[m>>2]=0;m=k[l>>2]|0;if(m)Tqa(m);k[l>>2]=0;if(y)Ec[k[(k[y>>2]|0)+4>>2]&1023](y);bla(w);Sqa(w);o=q;r=a;return o|0}function Faa(a,b){a=a|0;b=b|0;var c=0,d=0;a=Gaa(0,b)|0;c=Haa(0,b)|0;b=Qqa(24)|0;B=0;eb(516,b|0,a|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(a){SN(a);Sqa(a)}if(!c)return b|0;SN(c);Sqa(c);return b|0}function Gaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;a=r;r=r+256|0;c=a+244|0;d=a+232|0;e=a+224|0;f=a+216|0;g=a+192|0;h=a+240|0;i=a+144|0;j=a;k[h>>2]=0;Ap(b,c,533);if((k[c>>2]|0)!=538){l=0;r=a;return l|0}c=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;m=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;n=m+c|0;o=n>>>0>1073741823?-1:n<<2;q=Rqa(o)|0;s=Rqa(o)|0;if((c|0)>0){o=0;do{k[q+(o<<2)>>2]=972;t=ed[k[(k[b>>2]|0)+156>>2]&511](b,o)|0;k[s+(o<<2)>>2]=t;o=o+1|0}while((o|0)!=(c|0))}if((m|0)>0){o=0;do{t=o+c|0;k[q+(t<<2)>>2]=653;u=ed[k[(k[b>>2]|0)+156>>2]&511](b,t)|0;k[s+(t<<2)>>2]=u;o=o+1|0}while((o|0)!=(m|0))}m=iq(b,543)|0;Uo(b,h);pp(b,f,85);o=Wo(b,674)|0;u=Wo(b,677)|0;t=Wo(b,679)|0;v=Wo(b,680)|0;w=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=b+28|0;z=w+8|0;A=m+4|0;B=g+8|0;C=g+16|0;D=c*3|0;c=x;do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,c);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[h>>2]|0,w);nd[k[(k[b>>2]|0)+356>>2]&1023](b,i,w);rd[k[(k[b>>2]|0)+360>>2]&511](b,j,k[h>>2]|0,w);rd[k[(k[v>>2]|0)+60>>2]&511](v,g,k[h>>2]|0,w);x=k[y>>2]|0;Tc[k[(k[x>>2]|0)+108>>2]&15](x,d,3,k[h>>2]|0,w,o,u,t);x=k[A>>2]|0;E=0;do{F=j+96+(E<<3)|0;G=E*3|0;H=x+(G<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*+p[g>>3]*+p[F>>3];H=x+(G+1<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*+p[B>>3]*+p[F>>3];H=x+(G+2<<3)|0;p[H>>3]=+p[H>>3]-+p[e>>3]*+p[z>>3]*+p[d>>3]*(+p[g>>3]*+p[j+(E<<3)>>3]+ +p[B>>3]*+p[j+48+(E<<3)>>3]+ +p[C>>3]*2.0*+p[F>>3]);F=x+(E+D<<3)|0;p[F>>3]=+p[e>>3]*+p[z>>3]*+p[f>>3]*+p[C>>3]*+p[i+(E<<3)>>3]+ +p[F>>3];E=E+1|0}while((E|0)!=6);c=c+1|0}while((c|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}yq(b,m,s,n,q);Tqa(q);Tqa(s);s=k[h>>2]|0;if(s)Tqa(s);k[h>>2]=0;Ec[k[(k[w>>2]|0)+4>>2]&1023](w);l=m;r=a;return l|0}function Haa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0;a=r;r=r+160|0;c=a+144|0;d=a+128|0;e=a+120|0;f=a+96|0;g=a+88|0;h=a+80|0;i=a+72|0;j=a+48|0;l=a;m=a+140|0;n=a+136|0;k[m>>2]=0;k[n>>2]=0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){o=0;r=a;return o|0}if(_p(b)|0){o=0;r=a;return o|0}Ap(b,c,533);if((k[c>>2]|0)!=538){o=0;r=a;return o|0}c=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;q=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;s=q+c|0;t=s>>>0>1073741823?-1:s<<2;u=Rqa(t)|0;v=Rqa(t)|0;if((c|0)>0){t=0;do{k[u+(t<<2)>>2]=972;w=ed[k[(k[b>>2]|0)+156>>2]&511](b,t)|0;k[v+(t<<2)>>2]=w;t=t+1|0}while((t|0)!=(c|0))}if((q|0)>0){t=0;do{w=t+c|0;k[u+(w<<2)>>2]=653;x=ed[k[(k[b>>2]|0)+156>>2]&511](b,w)|0;k[v+(w<<2)>>2]=x;t=t+1|0}while((t|0)!=(q|0))}q=iq(b,543)|0;Uo(b,n);Fc[k[(k[b>>2]|0)+188>>2]&1023](b,m);pp(b,e,85);e=Wo(b,674)|0;t=Wo(b,677)|0;c=Wo(b,679)|0;x=Wo(b,680)|0;w=Qqa(16)|0;B=0;eb(524,w|0,b|0,3);y=B;B=0;if(y&1){y=Rb()|0;Sqa(w);Qb(y|0)}y=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;z=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((z|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){A=b+28|0;C=y+8|0;D=f+16|0;E=j+16|0;F=q+4|0;G=f+8|0;H=j+8|0;I=z;do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,I);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[m>>2]|0,y);nd[k[(k[b>>2]|0)+356>>2]&1023](b,l,y);nd[k[(k[x>>2]|0)+48>>2]&1023](x,h,y);rd[k[(k[x>>2]|0)+60>>2]&511](x,j,k[n>>2]|0,y);nd[k[(k[b>>2]|0)+380>>2]&1023](b,f,k[m>>2]|0);z=k[A>>2]|0;Tc[k[(k[z>>2]|0)+108>>2]&15](z,g,3,k[n>>2]|0,y,e,t,c);fla(w,i,y);z=k[F>>2]|0;J=0;do{K=+p[f>>3];L=l+(J<<3)|0;M=J*3|0;N=z+(M<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[d>>3]*+p[C>>3]*(+p[i>>3]*+p[h>>3]*K*+p[D>>3]+K*(+p[g>>3]*2.0*+p[E>>3])));K=+p[G>>3];N=z+(M+1<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[d>>3]*+p[C>>3]*(+p[i>>3]*+p[h>>3]*K*+p[D>>3]+K*(+p[g>>3]*2.0*+p[E>>3])));N=z+(M+2<<3)|0;p[N>>3]=+p[N>>3]+ +p[L>>3]*(+p[g>>3]*(+p[d>>3]*+p[C>>3]*2.0)*(+p[j>>3]*+p[f>>3]+ +p[H>>3]*+p[G>>3]+ +p[E>>3]*+p[D>>3]));J=J+1|0}while((J|0)!=3);I=I+1|0}while((I|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}yq(b,q,v,s,u);Tqa(u);u=k[n>>2]|0;if(u)Tqa(u);k[n>>2]=0;n=k[m>>2]|0;if(n)Tqa(n);k[m>>2]=0;Tqa(v);if(y)Ec[k[(k[y>>2]|0)+4>>2]&1023](y);bla(w);Sqa(w);o=q;r=a;return o|0}function Iaa(a){a=a|0;Sqa(a);return}function Jaa(a,b,c){a=a|0;b=b|0;c=c|0;return}function Kaa(a,b,c){a=a|0;b=b|0;c=c|0;return}function Laa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;Fka(c,e,128764);switch(k[e>>2]|0){case 758:{j=739;hoa(b,c,524,j,534);r=a;return}case 754:{j=738;hoa(b,c,524,j,534);r=a;return}default:{a=f+56|0;j=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,j|0);c=B;B=0;if(c&1){c=Rb()|0;l=Q;m=c;vva(a);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,j|0);c=B;B=0;do if(c&1){b=Rb()|0;n=Q;o=b}else{k[j>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,j|0,d|0);e=B;B=0;if(e&1){e=Rb()|0;p=Q;Yua(d);Yua(b);Ava(j);n=p;o=e;break}Yua(d);B=0;e=Ia(40,f|0,128786,26)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,e|0,0)|0,e=B,B=0,!(e&1)):0){e=Ab(20)|0;B=0;eb(502,g|0,128813,81);p=B;B=0;do if(!(p&1)){B=0;eb(502,h|0,145111,11);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(g);t=s;u=q;break}B=0;wa(510,i|0,j|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,e|0,g|0,h|0,22,i|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,e|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(i);v=s;w=q;x=y}Yua(h);Yua(g);if(x){t=v;u=w}else{z=v;A=w;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(e|0);z=t;A=u;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(A|0)}while(0);l=n;m=o;vva(a);Qb(m|0)}}}function Maa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Naa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;j=a+24|0;l=a+12|0;m=a;Fka(c,g,128764);switch(k[g>>2]|0){case 754:{n=738;break}case 758:{n=739;break}default:{g=h+56|0;o=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(g);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,o|0,f|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);Yua(t);Ava(o);u=x;v=w;break}Yua(f);B=0;w=Ia(40,h|0,128786,26)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,j|0,128813,81);x=B;B=0;do if(!(x&1)){B=0;eb(502,l|0,136133,14);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(j);A=z;C=y;break}B=0;wa(510,m|0,o|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,j|0,l|0,39,m|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(m);D=z;E=y;F=G}Yua(l);Yua(j);if(F){A=D;C=E}else{H=D;I=E;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(g);Qb(I|0)}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(g);Qb(I|0)}x=Rb()|0;H=Q;I=x;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(g);Qb(I|0)}while(0);q=u;s=v;vva(g);Qb(s|0)}}s=c+56|0;g=k[s>>2]|0;if((g|0)>0){v=c+32|0;u=g;g=0;q=0;while(1){if(!(i[(k[v>>2]|0)+q>>0]|0)){J=u;K=g}else{I=qh(b,g)|0;Uc[k[(k[I>>2]|0)+480>>2]&63](I,q,c,d,e,n);J=k[s>>2]|0;K=g+1|0}q=q+1|0;if((q|0)>=(J|0))break;else{u=J;g=K}}}Yka(c,b,135923,674,0.0);Yka(c,b,135944,677,0.0);if((k[c+40>>2]|0)!=302){Yka(c,b,135039,653,0.0);woa(b,0.0,706);r=a;return}Yka(c,b,135096,679,0.0);Yka(c,b,135039,653,0.0);woa(b,0.0,706);r=a;return}function Oaa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;YN(b,Ika(c,128895,917)|0);YN(b,Ika(c,128937,919)|0);return}function Paa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,128813,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Qaa(a,b){a=a|0;b=b|0;return 0}function Raa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,128813,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Saa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0;a=r;r=r+16|0;c=a;k[c>>2]=0;Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;d=gq(b,534)|0;Uo(b,c);e=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;if((e|0)>0){f=d+12|0;g=0;do{h=1.0/+(ed[k[(k[b>>2]|0)+508>>2]&511](b,g)|0);i=(ma(g,e)|0)+g|0;p[(k[f>>2]|0)+(i<<3)>>3]=h;g=g+1|0}while((g|0)!=(e|0))}e=k[c>>2]|0;if(!e){r=a;return d|0}Tqa(e);r=a;return d|0}function Taa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,D=0;a=r;r=r+32|0;c=a+20|0;d=a+8|0;e=a;f=a+16|0;k[f>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;cp(b,c,299);pp(b,e,917);Uo(b,f);h=iq(b,534)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;j=k[c>>2]|0;l=j>>>0>536870911?-1:j<<3;j=Rqa(l)|0;m=Rqa(l)|0;n=Rqa(l)|0;l=Wo(b,674)|0;o=Wo(b,677)|0;if((k[c>>2]|0)==3)q=Wo(b,679)|0;else q=0;s=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;t=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;a:do if((t|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){u=m+8|0;v=n+16|0;w=s+8|0;x=h+4|0;if((g|0)>0)y=t;else{z=t;while(1){Fc[k[(k[s>>2]|0)+24>>2]&1023](s,z);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,s);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,s);rd[k[(k[l>>2]|0)+60>>2]&511](l,j,k[f>>2]|0,s);rd[k[(k[o>>2]|0)+60>>2]&511](o,m,k[f>>2]|0,s);if((k[c>>2]|0)==3)rd[k[(k[q>>2]|0)+60>>2]&511](q,n,k[f>>2]|0,s);z=z+1|0;if((z|0)>=(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))break a}}do{Fc[k[(k[s>>2]|0)+24>>2]&1023](s,y);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,s);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,s);rd[k[(k[l>>2]|0)+60>>2]&511](l,j,k[f>>2]|0,s);rd[k[(k[o>>2]|0)+60>>2]&511](o,m,k[f>>2]|0,s);if((k[c>>2]|0)==3){rd[k[(k[q>>2]|0)+60>>2]&511](q,n,k[f>>2]|0,s);A=+p[j>>3]+ +p[u>>3];if((k[c>>2]|0)==3)B=A+ +p[v>>3];else B=A}else B=+p[j>>3]+ +p[u>>3];z=k[x>>2]|0;C=0;do{D=z+(C<<3)|0;p[D>>3]=+p[D>>3]-B*+p[e>>3]*+p[d>>3]*+p[w>>3]*+p[i+(C<<3)>>3];C=C+1|0}while((C|0)!=(g|0));y=y+1|0}while((y|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))}while(0);Ec[k[(k[s>>2]|0)+4>>2]&1023](s);s=k[f>>2]|0;if(!s){k[f>>2]=0;Tqa(i);Tqa(j);Tqa(m);Tqa(n);r=a;return h|0}Tqa(s);k[f>>2]=0;Tqa(i);Tqa(j);Tqa(m);Tqa(n);r=a;return h|0}function Uaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,128813,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,185,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Vaa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,128813,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,188,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+208|0;d=a+184|0;e=a+180|0;f=a+176|0;g=a+40|0;h=a+24|0;i=a+12|0;j=a;k[f>>2]=0;l=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;switch(k[c+44>>2]|0){case 738:{ed[k[(k[c>>2]|0)+168>>2]&511](c,742)|0;break}case 739:{ed[k[(k[c>>2]|0)+168>>2]&511](c,742)|0;break}default:{m=g+56|0;n=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,n|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(n);u=x;v=w;break}Yua(d);B=0;w=Ia(40,g|0,128984,32)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,h|0,128813,81);x=B;B=0;do if(!(x&1)){B=0;eb(502,i|0,137199,23);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(h);A=y;C=z;break}B=0;wa(510,j|0,n|0);z=B;B=0;if(z&1){z=Rb()|0;D=z;E=Q;F=1}else{B=0;ua(163,w|0,h|0,i|0,202,j|0);z=B;B=0;if(z&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}z=Rb()|0;y=Q;Yua(j);D=z;E=y;F=G}Yua(i);Yua(h);if(F){A=D;C=E}else{H=D;I=E;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(H|0)}}else{y=Rb()|0;A=y;C=Q}while(0);zb(w|0);H=A;I=C;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(H|0)}x=Rb()|0;H=x;I=Q;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(H|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}}cp(c,e,299);rp(c,f,534,943);s=l>>>0>536870911?-1:l<<3;m=Rqa(s)|0;v=Rqa(s)|0;Wo(c,674)|0;Wo(c,677)|0;if((k[e>>2]|0)==3)Wo(c,679)|0;vp(c,v,653);if((l|0)>0){e=k[f>>2]|0;s=0;do{p[m+(s<<3)>>3]=+p[v+(s<<3)>>3]+ +p[b+(k[e+(s<<2)>>2]<<3)>>3];s=s+1|0}while((s|0)!=(l|0))}l=k[c>>2]|0;s=k[l+48>>2]|0;e=Hc[k[l+128>>2]&511](c)|0;rd[s&511](c,653,m,e);Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0;Tqa(m);Tqa(v);v=k[f>>2]|0;if(!v){r=a;return}Tqa(v);r=a;return}function Xaa(a,b){a=a|0;b=b|0;return}function Yaa(a){a=a|0;Sqa(a);return}function Zaa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+48|0;d=a+16|0;e=a;f=a+32|0;g=a+31|0;h=a+30|0;j=a+29|0;l=a+28|0;zka(c,f,129324);zka(c,g,129346);zka(c,h,129368);zka(c,j,129391);zka(c,l,132257);if(!(i[f>>0]|0)){r=a;return}a:do if(((i[g>>0]|0)!=0?2.0:1.0)+((i[h>>0]|0)!=0?1.0:0.0)+((i[j>>0]|0)!=0?1.0:0.0)+((i[l>>0]|0)!=0?1.0:0.0)>1.0){k[e>>2]=129044;k[e+4>>2]=129067;k[e+8>>2]=129588;Ska(c,3,e);f=c+52|0;if((k[f>>2]|0)>0){m=c+36|0;n=c+108|0;o=c+100|0;q=0;s=0;b:while(1){do if(k[(k[m>>2]|0)+(s<<2)>>2]|0){u=(Jka(c,129588)|0)+(s<<3)|0;if((~~+p[u>>3]|0)!=535){u=Qqa(32)|0;v=s+1|0;B=0;Pa(1,u|0,q+1+(k[n>>2]|0)|0,v+(k[o>>2]|0)|0,0,0.0,498);w=B;B=0;if(w&1){x=u;y=11;break b}ih(b,u)|0;u=Qqa(32)|0;w=q+2|0;B=0;Pa(1,u|0,w+(k[n>>2]|0)|0,v+(k[o>>2]|0)|0,1,0.0,498);v=B;B=0;if(v&1){z=u;y=12;break b}ih(b,u)|0;A=w;break}w=(Jka(c,129044)|0)+(s<<3)|0;C=+$(+(+p[w>>3]));p[t>>3]=C;w=k[t+4>>2]|0;if(w>>>0>2146435072|(w|0)==2146435072&(k[t>>2]|0)>>>0>0)D=q;else{w=Qqa(32)|0;u=k[n>>2]|0;v=k[o>>2]|0;B=0;E=Xa(246,c|0,129044)|0;F=B;B=0;if(F&1){G=w;y=17;break b}F=q+1|0;B=0;Pa(1,w|0,F+u|0,s+1+v|0,0,+(+p[E+(s<<3)>>3]),498);E=B;B=0;if(E&1){G=w;y=17;break b}ih(b,w)|0;D=F}F=(Jka(c,129067)|0)+(s<<3)|0;C=+$(+(+p[F>>3]));p[t>>3]=C;F=k[t+4>>2]|0;if(F>>>0>2146435072|(F|0)==2146435072&(k[t>>2]|0)>>>0>0)A=D;else{F=Qqa(32)|0;w=k[n>>2]|0;E=k[o>>2]|0;B=0;v=Xa(246,c|0,129067)|0;u=B;B=0;if(u&1){H=F;y=22;break b}u=D+1|0;B=0;Pa(1,F|0,u+w|0,s+1+E|0,1,+(+p[v+(s<<3)>>3]),498);v=B;B=0;if(v&1){H=F;y=22;break b}ih(b,F)|0;A=u}}else A=q;while(0);s=s+1|0;if((s|0)>=(k[f>>2]|0))break a;else q=A}if((y|0)==11){q=Rb()|0;f=Q;Sqa(x);I=f;J=q;Qb(J|0)}else if((y|0)==12){q=Rb()|0;f=Q;Sqa(z);I=f;J=q;Qb(J|0)}else if((y|0)==17){q=Rb()|0;f=Q;Sqa(G);I=f;J=q;Qb(J|0)}else if((y|0)==22){q=Rb()|0;f=Q;Sqa(H);I=f;J=q;Qb(J|0)}}}else{qoa(b,c,129044,498,738,0);qoa(b,c,129067,498,738,1)}while(0);k[d>>2]=129044;k[d+4>>2]=129067;k[d+8>>2]=129588;Lka(c,3,d);r=a;return}function _aa(a,b,c){a=a|0;b=b|0;c=c|0;return}function $aa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;a=r;r=r+64|0;d=a+24|0;e=a+16|0;f=a;g=a+48|0;zka(c,g,129324);if(!(i[g>>0]|0)){r=a;return}k[f>>2]=129090;k[f+4>>2]=129435;k[f+8>>2]=129588;k[f+12>>2]=129116;Ska(c,4,f);if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}e=c+52|0;f=k[e>>2]|0;a:do if((f|0)>0){g=c+36|0;h=c+100|0;j=f;l=0;m=0;while(1){if(!(k[(k[g>>2]|0)+(l<<2)>>2]|0)){n=l+1|0;o=j;q=m}else{s=Qqa(144)|0;t=k[h>>2]|0;B=0;u=Xa(246,c|0,129588)|0;v=B;B=0;if(v&1){w=s;x=13;break}v=l+1|0;B=0;Ka(13,s|0,v+t|0,l|0,m|0,l|0,c|0,498,~~+p[u+(l<<3)>>3]|0);u=B;B=0;if(u&1){w=s;x=13;break}u=(Jka(c,129588)|0)+(l<<3)|0;if((~~+p[u>>3]|0)!=535)$n(s);ih(b,s)|0;n=v;o=k[e>>2]|0;q=m+1|0}if((n|0)<(o|0)){j=o;l=n;m=q}else break a}if((x|0)==13){m=Rb()|0;Sqa(w);Qb(m|0)}}while(0);k[d>>2]=136615;k[d+4>>2]=136636;k[d+8>>2]=129090;k[d+12>>2]=129435;k[d+16>>2]=129588;k[d+20>>2]=129116;Lka(c,6,d);r=a;return}function aba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 2}function bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+208|0;f=a+16|0;g=a;h=a+201|0;j=a+200|0;l=a+196|0;m=a+48|0;n=a+184|0;o=a+32|0;p=a+20|0;zka(c,h,129324);zka(c,j,134882);Fka(c,l,134909);if(!(i[h>>0]|0)){r=a;return}k[g>>2]=129145;Ska(c,1,g);h=c+56|0;q=k[h>>2]|0;if((q|0)>0){s=c+32|0;t=q;q=0;u=0;while(1){if(!(i[(k[s>>2]|0)+u>>0]|0)){v=t;w=q}else{x=qh(b,q)|0;Uc[k[(k[x>>2]|0)+480>>2]&63](x,u,c,d,e,738);v=k[h>>2]|0;w=q+1|0}u=u+1|0;if((u|0)>=(v|0))break;else{t=v;q=w}}}switch(k[l>>2]|0){case 1:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);break}case 2:{Zka(c,b,135224,110);Zka(c,b,135238,109);break}case 6:{Zka(c,b,135224,110);Zka(c,b,135238,109);Zka(c,b,135039,653);Zka(c,b,135066,666);break}default:{l=m+56|0;w=m+4|0;k[m>>2]=27524;k[l>>2]=27544;B=0;wa(508,m+56|0,w|0);q=B;B=0;if(q&1){q=Rb()|0;y=Q;z=q;vva(l);Qb(z|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[l>>2]=27488;B=0;va(448,w|0);q=B;B=0;do if(q&1){v=Rb()|0;A=Q;C=v}else{k[w>>2]=27560;v=m+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,w|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(g);Yua(v);Ava(w);A=u;C=t;break}Yua(g);B=0;t=Ia(40,m|0,145010,13)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,n|0,129178,84);u=B;B=0;do if(!(u&1)){B=0;eb(502,o|0,136133,14);h=B;B=0;if(h&1){h=Rb()|0;e=Q;Yua(n);D=e;E=h;break}B=0;wa(510,p|0,w|0);h=B;B=0;if(h&1){h=Rb()|0;F=Q;G=h;H=1}else{B=0;ua(163,t|0,n|0,o|0,162,p|0);h=B;B=0;if(h&1)I=1;else{B=0;eb(503,t|0,1240,229);B=0;I=0}h=Rb()|0;e=Q;Yua(p);F=e;G=h;H=I}Yua(o);Yua(n);if(H){D=F;E=G}else{J=F;K=G;k[m>>2]=27468;k[l>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(l);Qb(K|0)}}else{h=Rb()|0;D=Q;E=h}while(0);zb(t|0);J=D;K=E;k[m>>2]=27468;k[l>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(l);Qb(K|0)}u=Rb()|0;J=Q;K=u;k[m>>2]=27468;k[l>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(l);Qb(K|0)}while(0);y=A;z=C;vva(l);Qb(z|0)}}Zka(c,b,137052,353);Zka(c,b,134962,928);if((i[j>>0]|0)!=0?(k[c+40>>2]|0)!=300:0)Zka(c,b,136615,287);k[f>>2]=129145;Lka(c,1,f);r=a;return}function cba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function dba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;a=r;r=r+176|0;c=a+152|0;d=a+16|0;e=a;if(!(CY()|0)){xh(b,498);Voa(b);r=a;return}f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;Ia(40,d|0,129263,28)|0;o=B;B=0;if(!(o&1)?(B=0,wa(510,e|0,g|0),o=B,B=0,!(o&1)):0){B=0;ya(425,e|0)|0;o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);q=p;s=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}else{Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);xh(b,498);Voa(b);r=a;return}}o=Rb()|0;q=Q;s=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function eba(a,b){a=a|0;b=b|0;return 0}function fba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,129178,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,193,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function gba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;if(!($p(b)|0)){i=0;r=a;return i|0}cp(b,d,298);switch(k[d>>2]|0){case 300:{if($p(b)|0){j=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;l=gq(b,534)|0;if((j|0)>0){m=j<<2;n=l+12|0;o=j<<1;q=0;do{s=1.0/+(ed[k[(k[b>>2]|0)+508>>2]&511](b,q)|0);t=q<<1;u=(ma(m,q)|0)+t|0;v=k[n>>2]|0;p[v+(u<<3)>>3]=s;u=t|1;t=v+((ma(o,u)|0)+u<<3)|0;p[t>>3]=s;q=q+1|0}while((q|0)!=(j|0));w=l}else w=l}else w=0;break}case 302:{w=hba(0,b)|0;break}default:{b=e+56|0;l=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,l|0);j=B;B=0;if(j&1){j=Rb()|0;x=Q;y=j;vva(b);Qb(y|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,l|0);j=B;B=0;do if(j&1){q=Rb()|0;z=Q;A=q}else{k[l>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(c);Yua(q);Ava(l);z=n;A=o;break}Yua(c);B=0;o=Ia(40,e|0,144639,5)|0;n=B;B=0;if((((!(n&1)?(B=0,n=ya(427,k[d>>2]|0)|0,m=B,B=0,!(m&1)):0)?(m=Lta(n)|0,B=0,t=Ia(40,o|0,n|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,f|0,129178,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,144189,13);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);C=o;D=n;break}B=0;wa(510,h|0,l|0);n=B;B=0;if(n&1){n=Rb()|0;E=Q;F=n;G=1}else{B=0;ua(163,m|0,f|0,g|0,207,h|0);n=B;B=0;if(n&1)H=1;else{B=0;eb(503,m|0,1240,229);B=0;H=0}n=Rb()|0;o=Q;Yua(h);E=o;F=n;G=H}Yua(g);Yua(f);if(G){C=E;D=F}else{I=E;J=F;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(b);Qb(J|0)}}else{n=Rb()|0;C=Q;D=n}while(0);zb(m|0);I=C;J=D;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(b);Qb(J|0)}t=Rb()|0;I=Q;J=t;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(b);Qb(J|0)}while(0);x=z;y=A;vva(b);Qb(y|0)}}i=w;r=a;return i|0}function hba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0,t=0,u=0.0,v=0,w=0.0;a=r;r=r+16|0;c=a+4|0;d=a;if(!($p(b)|0)){e=0;r=a;return e|0}k[d>>2]=0;f=(Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0)<<1;g=gq(b,534)|0;nd[k[(k[b>>2]|0)+512>>2]&1023](b,d,c);if((k[c>>2]|0)>0){h=g+12|0;i=0;do{j=i<<1;l=k[d>>2]|0;m=k[l+(j<<2)>>2]|0;n=k[l+((j|1)<<2)>>2]|0;o=+(ed[k[(k[b>>2]|0)+508>>2]&511](b,m)|0);q=1.0/o;o=1.0/+(ed[k[(k[b>>2]|0)+508>>2]&511](b,n)|0);j=m<<1;m=j|1;l=n<<1;n=l|1;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0?Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0:0){s=(ma(j,f)|0)+j|0;t=k[h>>2]|0;p[t+(s<<3)>>3]=q;s=t+((ma(m,f)|0)+m<<3)|0;p[s>>3]=q;u=-o;s=ma(l,f)|0;p[t+(s+j<<3)>>3]=u;p[t+(s+l<<3)>>3]=o;s=ma(n,f)|0;p[t+(s+m<<3)>>3]=u;p[t+(s+n<<3)>>3]=o}else v=10;do if((v|0)==10){v=0;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){s=(ma(j,f)|0)+j|0;t=k[h>>2]|0;p[t+(s<<3)>>3]=q;s=t+((ma(m,f)|0)+m<<3)|0;p[s>>3]=q;u=o*-2.0;s=ma(l,f)|0;p[t+(s+j<<3)>>3]=u;w=o*2.0;p[t+(s+l<<3)>>3]=w;s=ma(n,f)|0;p[t+(s+m<<3)>>3]=u;p[t+(s+n<<3)>>3]=w;break}if(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0){w=-o;s=ma(l,f)|0;t=k[h>>2]|0;p[t+(s+j<<3)>>3]=w;p[t+(s+l<<3)>>3]=o;s=ma(n,f)|0;p[t+(s+m<<3)>>3]=w;p[t+(s+n<<3)>>3]=o;break}else{w=o*-2.0;s=ma(l,f)|0;t=k[h>>2]|0;p[t+(s+j<<3)>>3]=w;u=o*2.0;p[t+(s+l<<3)>>3]=u;s=ma(n,f)|0;p[t+(s+m<<3)>>3]=w;p[t+(s+n<<3)>>3]=u;break}}while(0);i=i+1|0}while((i|0)<(k[c>>2]|0))}c=k[d>>2]|0;if(c)Tqa(c);e=g;r=a;return e|0}function iba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;if(!($p(b)|0)){i=0;r=a;return i|0}cp(b,d,298);switch(k[d>>2]|0){case 300:{j=jba(0,b)|0;break}case 302:{j=kba(0,b)|0;break}default:{b=e+56|0;l=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(b);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;t=Ia(40,e|0,144639,5)|0;u=B;B=0;if((((!(u&1)?(B=0,u=ya(427,k[d>>2]|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,t|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,146481,18)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,f|0,129178,84);w=B;B=0;do if(!(w&1)){B=0;eb(502,g|0,144203,13);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(f);x=t;y=u;break}B=0;wa(510,h|0,l|0);u=B;B=0;if(u&1){u=Rb()|0;z=Q;A=u;C=1}else{B=0;ua(163,v|0,f|0,g|0,310,h|0);u=B;B=0;if(u&1)D=1;else{B=0;eb(503,v|0,1240,229);B=0;D=0}u=Rb()|0;t=Q;Yua(h);z=t;A=u;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(b);Qb(F|0)}}else{u=Rb()|0;x=Q;y=u}while(0);zb(v|0);E=x;F=y;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(b);Qb(F|0)}w=Rb()|0;E=Q;F=w;k[e>>2]=27468;k[b>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(b);Qb(F|0)}while(0);n=q;o=s;vva(b);Qb(o|0)}}i=j;r=a;return i|0}function jba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0;a=r;r=r+32|0;c=a+24|0;d=a+16|0;e=a;if(!($p(b)|0)){f=0;r=a;return f|0}g=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;h=iq(b,534)|0;i=+Dp(b,265);j=+Dp(b,65);l=+Dp(b,217);m=+Dp(b,215);n=Wo(b,664)|0;o=Wo(b,665)|0;q=Wo(b,353)|0;s=Wo(b,339)|0;t=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((g|0)<=0){if(t)u=6}else{v=e+8|0;w=i*-1.5800000000000002e-10*j;x=i*j;j=(l+-1.0)*.5;i=l+1.0;y=l+2.0;z=h+4|0;A=0;do{Fc[k[(k[t>>2]|0)+28>>2]&1023](t,A);B=+(ed[k[(k[b>>2]|0)+508>>2]&511](b,A)|0);nd[k[(k[q>>2]|0)+48>>2]&1023](q,c,t);nd[k[(k[s>>2]|0)+48>>2]&1023](s,d,t);nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,t);nd[k[(k[o>>2]|0)+48>>2]&1023](o,v,t);C=+p[e>>3];D=+p[v>>3];E=+p[c>>3];F=w*E;G=+ba(+x,+l)*2.0*+ba(+(C*C+D*D),+j);H=y*+ba(+m,+l);I=(C*F-C*(G*+ba(+E,+i)/H))/B;J=A<<1;K=k[z>>2]|0;p[K+(J<<3)>>3]=I;I=G*+ba(+(+p[c>>3]),+i)/H;p[K+((J|1)<<3)>>3]=(D*F-+p[v>>3]*I)/B;A=A+1|0}while((A|0)!=(g|0));u=6}if((u|0)==6)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);f=h;r=a;return f|0}function kba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0;a=r;r=r+112|0;c=a+96|0;d=a+80|0;e=a+72|0;f=a+64|0;g=a+48|0;h=a;i=a+92|0;j=a+88|0;if(!($p(b)|0)){l=0;r=a;return l|0}k[i>>2]=0;k[j>>2]=0;Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;m=iq(b,534)|0;Uo(b,i);n=+Dp(b,265);o=+Dp(b,65);q=+Dp(b,217);s=+Dp(b,214);t=Wo(b,339)|0;u=Wo(b,664)|0;v=Wo(b,665)|0;w=Wo(b,353)|0;nd[k[(k[b>>2]|0)+512>>2]&1023](b,j,c);if((k[c>>2]|0)>0){x=n*-1.5800000000000002e-10*o;y=g+8|0;z=m+4|0;A=n*o;o=(q+-1.0)*.5;B=h+24|0;C=h+8|0;D=h+32|0;E=h+16|0;F=h+40|0;G=0;do{H=G<<1;I=k[j>>2]|0;J=k[I+(H<<2)>>2]|0;K=k[I+((H|1)<<2)>>2]|0;H=ed[k[(k[b>>2]|0)+508>>2]&511](b,J)|0;I=ed[k[(k[b>>2]|0)+508>>2]&511](b,K)|0;L=J*3|0;M=k[i>>2]|0;N=K*3|0;p[h>>3]=+p[M+(L<<3)>>3];p[B>>3]=+p[M+(N<<3)>>3];p[C>>3]=+p[M+(L+1<<3)>>3];p[D>>3]=+p[M+(N+1<<3)>>3];p[E>>3]=+p[M+(L+2<<3)>>3];p[F>>3]=+p[M+(N+2<<3)>>3];n=+(H|0);O=+(I|0);I=ld[k[(k[b>>2]|0)+328>>2]&127](b,J,K,3)|0;H=Hc[k[(k[I>>2]|0)+8>>2]&511](I)|0;if((H|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0)){N=I+8|0;M=K<<1;K=M|1;L=H;do{Fc[k[(k[I>>2]|0)+24>>2]&1023](I,L);nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,I);nd[k[(k[v>>2]|0)+48>>2]&1023](v,y,I);nd[k[(k[t>>2]|0)+48>>2]&1023](t,d,I);nd[k[(k[w>>2]|0)+48>>2]&1023](w,e,I);P=+p[g>>3];Q=+p[y>>3];R=+ba(+A,+q)*-2.0*+ba(+(P*P+Q*Q),+o);Q=+Lp(b,k[i>>2]|0,I);rd[k[(k[b>>2]|0)+268>>2]&511](b,f,h,I);H=Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0;P=R*+ba(+((+p[d>>3]-Q)/s),+q);S=P*+p[g>>3]*+p[f>>3]*+p[N>>3];if(H){H=k[z>>2]|0;T=H+(M<<3)|0;p[T>>3]=S/O+ +p[T>>3];P=R*+ba(+((+p[d>>3]-Q)/s),+q);T=H+(K<<3)|0;p[T>>3]=+p[T>>3]+P*+p[y>>3]*+p[f>>3]*+p[N>>3]/O}else{T=k[z>>2]|0;H=T+(M<<3)|0;p[H>>3]=S*2.0/O+ +p[H>>3];S=R*+ba(+((+p[d>>3]-Q)/s),+q);H=T+(K<<3)|0;p[H>>3]=+p[H>>3]+S*+p[y>>3]*+p[f>>3]*+p[N>>3]*2.0/O}L=L+1|0}while((L|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0))}if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){O=x*+p[e>>3];S=O*+p[y>>3];L=J<<1;N=k[z>>2]|0;K=N+(L<<3)|0;p[K>>3]=+p[K>>3]+O*+p[g>>3]/n;K=N+((L|1)<<3)|0;p[K>>3]=S/n+ +p[K>>3]}Ec[k[(k[I>>2]|0)+4>>2]&1023](I);G=G+1|0}while((G|0)<(k[c>>2]|0))}c=k[j>>2]|0;if(c)Tqa(c);k[j>>2]=0;j=k[i>>2]|0;if(j)Tqa(j);l=m;r=a;return l|0}function lba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;a=r;r=r+32|0;d=a+8|0;e=a;f=a+16|0;k[f>>2]=0;g=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;h=g<<1;i=Rqa(h>>>0>536870911?-1:h<<3)|0;rp(c,f,534,943);j=Wo(c,674)|0;l=Wo(c,677)|0;m=Hc[k[(k[c>>2]|0)+304>>2]&511](c)|0;if((g|0)>0){c=0;do{Fc[k[(k[m>>2]|0)+28>>2]&1023](m,c);nd[k[(k[j>>2]|0)+48>>2]&1023](j,d,m);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,m);n=c<<1;p[i+(n<<3)>>3]=+p[d>>3];p[i+((n|1)<<3)>>3]=+p[e>>3];c=c+1|0}while((c|0)!=(g|0))}if(k[b>>2]|0){g=k[k[b+4>>2]>>2]|0;Dc[k[(k[g>>2]|0)+16>>2]&255](g,h,k[f>>2]|0,i,0)}if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);m=k[f>>2]|0;if(!m){k[f>>2]=0;Tqa(i);r=a;return}Tqa(m);k[f>>2]=0;Tqa(i);r=a;return}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,129178,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,550,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function nba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0.0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0;a=r;r=r+896|0;d=a+880|0;e=a+864|0;f=a+860|0;g=a+844|0;h=a+696|0;i=a+868|0;j=a+848|0;l=a+832|0;m=a+560|0;n=a+548|0;o=a+536|0;q=a+384|0;s=a+400|0;u=a+96|0;v=a+84|0;w=a+72|0;x=a+248|0;y=a+60|0;z=a+48|0;A=a+36|0;C=a+112|0;D=a+24|0;E=a+12|0;F=a;k[f>>2]=0;k[g>>2]=0;G=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;H=G<<1;rp(c,f,534,943);I=H>>>0>536870911?-1:H<<3;J=Rqa(I)|0;K=Rqa(I)|0;L=Rqa(I)|0;M=Rqa(I)|0;N=Rqa(I)|0;O=Rqa(I)|0;P=Rqa(I)|0;I=Rqa(G>>>0>536870911?-1:G<<3)|0;R=(G|0)>0;do if(R){S=k[f>>2]|0;T=0;do{p[J+(T<<3)>>3]=+p[b+(k[S+(T<<2)>>2]<<3)>>3];T=T+1|0}while((T|0)<(H|0));Aq(c,J,971);if(R){T=0;while(1){S=T<<1;U=+p[J+(S<<3)>>3];p[K+(T<<3)>>3]=U;V=+p[J+((S|1)<<3)>>3];p[L+(T<<3)>>3]=V;W=+$(+U);p[t>>3]=W;S=k[t>>2]|0;X=k[t+4>>2]|0;if(X>>>0>2146435072|(X|0)==2146435072&S>>>0>0){Y=8;break}if((S|0)==0&(X|0)==2146435072){Y=32;break}W=+$(+V);p[t>>3]=W;X=k[t>>2]|0;S=k[t+4>>2]|0;if(S>>>0>2146435072|(S|0)==2146435072&X>>>0>0){Y=56;break}T=T+1|0;if((X|0)==0&(S|0)==2146435072){Y=80;break}if((T|0)>=(G|0)){Y=104;break}}if((Y|0)==8){T=h+56|0;S=h+4|0;k[h>>2]=27524;k[T>>2]=27544;B=0;wa(508,h+56|0,S|0);X=B;B=0;if(X&1){X=Rb()|0;Z=Q;_=X;vva(T);Qb(_|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[T>>2]=27488;B=0;va(448,S|0);X=B;B=0;do if(X&1){ba=Rb()|0;ca=Q;da=ba}else{k[S>>2]=27560;ba=h+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,S|0,d|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(d);Yua(ba);Ava(S);ca=fa;da=ea;break}Yua(d);B=0;ea=Ia(40,h|0,135564,28)|0;fa=B;B=0;a:do if(!(fa&1)?(B=0,Xa(239,ea|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,i|0,129178,84);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,j|0,137199,23);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(i);ka=ja;la=ia;break}B=0;wa(510,l|0,S|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ma=Q;na=ia;oa=1}else{B=0;ua(163,ga|0,i|0,j|0,586,l|0);ia=B;B=0;if(ia&1)pa=1;else{B=0;eb(503,ga|0,1240,229);B=0;pa=0}ia=Rb()|0;ja=Q;Yua(l);ma=ja;na=ia;oa=pa}Yua(j);Yua(i);if(oa){ka=ma;la=na}else{qa=ma;ra=na;break a}}else{ia=Rb()|0;ka=Q;la=ia}while(0);zb(ga|0);qa=ka;ra=la}else Y=23;while(0);if((Y|0)==23){ea=Rb()|0;qa=Q;ra=ea}k[h>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(ba);Ava(S);vva(T);sa=qa;ta=ra;Qb(ta|0)}while(0);Z=ca;_=da;vva(T);Qb(_|0)}else if((Y|0)==32){S=m+56|0;X=m+4|0;k[m>>2]=27524;k[S>>2]=27544;B=0;wa(508,m+56|0,X|0);ea=B;B=0;if(ea&1){ea=Rb()|0;xa=Q;za=ea;vva(S);Qb(za|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[S>>2]=27488;B=0;va(448,X|0);ea=B;B=0;do if(ea&1){fa=Rb()|0;Aa=Q;Ba=fa}else{k[X>>2]=27560;fa=m+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,X|0,d|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(d);Yua(fa);Ava(X);Aa=ia;Ba=ha;break}Yua(d);B=0;ha=Ia(40,m|0,135593,28)|0;ia=B;B=0;b:do if(!(ia&1)?(B=0,Xa(239,ha|0,0)|0,ja=B,B=0,!(ja&1)):0){ja=Ab(20)|0;B=0;eb(502,n|0,129178,84);Ca=B;B=0;do if(!(Ca&1)){B=0;eb(502,o|0,137199,23);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(n);Fa=Ea;Ga=Da;break}B=0;wa(510,q|0,X|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ha=1;Ja=Q;Ka=Da}else{B=0;ua(163,ja|0,n|0,o|0,587,q|0);Da=B;B=0;if(Da&1)La=1;else{B=0;eb(503,ja|0,1240,229);B=0;La=0}Da=Rb()|0;Ea=Q;Yua(q);Ha=La;Ja=Ea;Ka=Da}Yua(o);Yua(n);if(Ha){Fa=Ja;Ga=Ka}else{Ma=Ja;Na=Ka;break b}}else{Da=Rb()|0;Fa=Q;Ga=Da}while(0);zb(ja|0);Ma=Fa;Na=Ga}else Y=47;while(0);if((Y|0)==47){ha=Rb()|0;Ma=Q;Na=ha}k[m>>2]=27468;k[S>>2]=27488;k[X>>2]=27560;Yua(fa);Ava(X);vva(S);sa=Ma;ta=Na;Qb(ta|0)}while(0);xa=Aa;za=Ba;vva(S);Qb(za|0)}else if((Y|0)==56){X=s+56|0;ea=s+4|0;k[s>>2]=27524;k[X>>2]=27544;B=0;wa(508,s+56|0,ea|0);T=B;B=0;if(T&1){T=Rb()|0;Oa=Q;Pa=T;vva(X);Qb(Pa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[X>>2]=27488;B=0;va(448,ea|0);T=B;B=0;do if(T&1){ha=Rb()|0;Qa=Q;Ra=ha}else{k[ea>>2]=27560;ha=s+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ea|0,d|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ba=Q;Yua(d);Yua(ha);Ava(ea);Qa=ba;Ra=ia;break}Yua(d);B=0;ia=Ia(40,s|0,135564,28)|0;ba=B;B=0;c:do if(!(ba&1)?(B=0,Xa(239,ia|0,0)|0,Ca=B,B=0,!(Ca&1)):0){Ca=Ab(20)|0;B=0;eb(502,u|0,129178,84);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,v|0,137199,23);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(u);Sa=Ea;Ta=Da;break}B=0;wa(510,w|0,ea|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ua=1;Va=Q;Wa=Da}else{B=0;ua(163,Ca|0,u|0,v|0,588,w|0);Da=B;B=0;if(Da&1)Ya=1;else{B=0;eb(503,Ca|0,1240,229);B=0;Ya=0}Da=Rb()|0;Ea=Q;Yua(w);Ua=Ya;Va=Ea;Wa=Da}Yua(v);Yua(u);if(Ua){Sa=Va;Ta=Wa}else{Za=Va;_a=Wa;break c}}else{Da=Rb()|0;Sa=Q;Ta=Da}while(0);zb(Ca|0);Za=Sa;_a=Ta}else Y=71;while(0);if((Y|0)==71){ia=Rb()|0;Za=Q;_a=ia}k[s>>2]=27468;k[X>>2]=27488;k[ea>>2]=27560;Yua(ha);Ava(ea);vva(X);sa=Za;ta=_a;Qb(ta|0)}while(0);Oa=Qa;Pa=Ra;vva(X);Qb(Pa|0)}else if((Y|0)==80){ea=x+56|0;T=x+4|0;k[x>>2]=27524;k[ea>>2]=27544;B=0;wa(508,x+56|0,T|0);S=B;B=0;if(S&1){S=Rb()|0;$a=Q;ab=S;vva(ea);Qb(ab|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ea>>2]=27488;B=0;va(448,T|0);S=B;B=0;do if(S&1){ia=Rb()|0;bb=Q;cb=ia}else{k[T>>2]=27560;ia=x+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,T|0,d|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;Yua(d);Yua(ia);Ava(T);bb=fa;cb=ba;break}Yua(d);B=0;ba=Ia(40,x|0,135593,28)|0;fa=B;B=0;d:do if(!(fa&1)?(B=0,Xa(239,ba|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,y|0,129178,84);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,z|0,137199,23);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(y);db=Ea;fb=Da;break}B=0;wa(510,A|0,T|0);Da=B;B=0;if(Da&1){Da=Rb()|0;gb=1;hb=Q;ib=Da}else{B=0;ua(163,ga|0,y|0,z|0,589,A|0);Da=B;B=0;if(Da&1)jb=1;else{B=0;eb(503,ga|0,1240,229);B=0;jb=0}Da=Rb()|0;Ea=Q;Yua(A);gb=jb;hb=Ea;ib=Da}Yua(z);Yua(y);if(gb){db=hb;fb=ib}else{kb=hb;lb=ib;break d}}else{Da=Rb()|0;db=Q;fb=Da}while(0);zb(ga|0);kb=db;lb=fb}else Y=95;while(0);if((Y|0)==95){ba=Rb()|0;kb=Q;lb=ba}k[x>>2]=27468;k[ea>>2]=27488;k[T>>2]=27560;Yua(ia);Ava(T);vva(ea);sa=kb;ta=lb;Qb(ta|0)}while(0);$a=bb;ab=cb;vva(ea);Qb(ab|0)}else if((Y|0)==104){up(c,M,679,0.0);if(R)mb=0;else break;do{W=+p[K+(mb<<3)>>3];V=+p[L+(mb<<3)>>3];U=+p[M+(mb<<3)>>3];nb=+aa(+(W*W+V*V+U*U));p[N+(mb<<3)>>3]=nb;mb=mb+1|0}while((mb|0)!=(G|0))}}else Y=103}else{Aq(c,J,971);Y=103}while(0);if((Y|0)==103)up(c,M,679,0.0);nb=+Dp(c,265);U=+Dp(c,65);cp(c,e,298);switch(k[e>>2]|0){case 300:{vp(c,P,353);if(R){V=nb*U;mb=0;do{p[O+(mb<<3)>>3]=V*+p[P+(mb<<3)>>3];mb=mb+1|0}while((mb|0)!=(G|0))}break}case 302:{Uo(c,g);vp(c,I,339);if(R){V=nb*U;R=k[g>>2]|0;mb=0;do{p[O+(mb<<3)>>3]=V*(+p[I+(mb<<3)>>3]-+p[R+((mb*3|0)+2<<3)>>3]);mb=mb+1|0}while((mb|0)!=(G|0))}break}default:{G=C+56|0;mb=C+4|0;k[C>>2]=27524;k[G>>2]=27544;B=0;wa(508,C+56|0,mb|0);R=B;B=0;if(R&1){R=Rb()|0;ob=Q;pb=R;vva(G);Qb(pb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[G>>2]=27488;B=0;va(448,mb|0);R=B;B=0;do if(R&1){ab=Rb()|0;qb=Q;rb=ab}else{k[mb>>2]=27560;ab=C+36|0;k[ab>>2]=0;k[ab+4>>2]=0;k[ab+8>>2]=0;k[ab+12>>2]=0;k[C+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,mb|0,d|0);cb=B;B=0;if(cb&1){cb=Rb()|0;bb=Q;Yua(d);Yua(ab);Ava(mb);qb=bb;rb=cb;break}Yua(d);B=0;cb=Ia(40,C|0,144639,5)|0;bb=B;B=0;e:do if((((!(bb&1)?(B=0,$a=ya(427,k[e>>2]|0)|0,lb=B,B=0,!(lb&1)):0)?(lb=Lta($a)|0,B=0,kb=Ia(40,cb|0,$a|0,lb|0)|0,lb=B,B=0,!(lb&1)):0)?(B=0,lb=Ia(40,kb|0,146481,18)|0,kb=B,B=0,!(kb&1)):0)?(B=0,Xa(239,lb|0,0)|0,lb=B,B=0,!(lb&1)):0){lb=Ab(20)|0;B=0;eb(502,D|0,129178,84);kb=B;B=0;do if(!(kb&1)){B=0;eb(502,E|0,137199,23);$a=B;B=0;if($a&1){$a=Rb()|0;x=Q;Yua(D);sb=x;tb=$a;break}B=0;wa(510,F|0,mb|0);$a=B;B=0;if($a&1){$a=Rb()|0;ub=1;vb=Q;wb=$a}else{B=0;ua(163,lb|0,D|0,E|0,611,F|0);$a=B;B=0;if($a&1)xb=1;else{B=0;eb(503,lb|0,1240,229);B=0;xb=0}$a=Rb()|0;x=Q;Yua(F);ub=xb;vb=x;wb=$a}Yua(E);Yua(D);if(ub){sb=vb;tb=wb}else{yb=vb;Bb=wb;break e}}else{$a=Rb()|0;sb=Q;tb=$a}while(0);zb(lb|0);yb=sb;Bb=tb}else Y=131;while(0);if((Y|0)==131){cb=Rb()|0;yb=Q;Bb=cb}k[C>>2]=27468;k[G>>2]=27488;k[mb>>2]=27560;Yua(ab);Ava(mb);vva(G);sa=yb;ta=Bb;Qb(ta|0)}while(0);ob=qb;pb=rb;vva(G);Qb(pb|0)}}Pp(c,674,675);Pp(c,677,678);Pp(c,653,654);rd[k[(k[c>>2]|0)+48>>2]&511](c,674,K,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,677,L,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,671,N,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,653,O,738);Tqa(P);Tqa(I);Tqa(O);Tqa(N);Tqa(M);Tqa(L);Tqa(K);Tqa(J);J=k[g>>2]|0;if(J)Tqa(J);k[g>>2]=0;g=k[f>>2]|0;if(!g){r=a;return}Tqa(g);r=a;return}function oba(a,b){a=a|0;b=b|0;RZ(b);return}function pba(a){a=a|0;Sqa(a);return}function qba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;d=a+16|0;e=a;f=a+208|0;g=a+207|0;h=a+206|0;j=a+205|0;l=a+204|0;m=a+196|0;n=a+192|0;o=a+56|0;q=a+44|0;s=a+32|0;u=a+20|0;k[n>>2]=0;if((k[c+40>>2]|0)!=302){r=a;return}zka(c,f,129324);zka(c,g,129346);zka(c,h,129368);zka(c,j,129391);zka(c,l,132257);if(!(((i[f>>0]|0)!=0?1.0:0.0)+((i[g>>0]|0)!=0?1.0:0.0)+((i[h>>0]|0)!=0?1.0:0.0)+((i[j>>0]|0)!=0?1.0:0.0)+((i[l>>0]|0)!=0?1.0:0.0)>1.0)){qoa(b,c,129412,500,738,0);r=a;return}k[e>>2]=129435;Ska(c,1,e);Qka(c,n,a+200|0,m,129412);if((k[m>>2]|0)<=1){m=c+52|0;a:do if((k[m>>2]|0)>0){l=c+36|0;j=c+108|0;h=c+100|0;g=0;f=0;b:while(1){do if(k[(k[l>>2]|0)+(f<<2)>>2]|0){v=(Jka(c,129435)|0)+(f<<3)|0;if(~~+p[v>>3]){v=Qqa(32)|0;w=g+1|0;B=0;Pa(1,v|0,w+(k[j>>2]|0)|0,f+1+(k[h>>2]|0)|0,0,0.0,500);x=B;B=0;if(x&1){y=v;z=35;break b}ih(b,v)|0;A=w;break}w=(k[n>>2]|0)+(f<<3)|0;C=+$(+(+p[w>>3]));p[t>>3]=C;v=k[t+4>>2]|0;if(!(v>>>0>2146435072|(v|0)==2146435072&(k[t>>2]|0)>>>0>0)){v=Qqa(32)|0;x=g+1|0;B=0;Pa(1,v|0,x+(k[j>>2]|0)|0,f+1+(k[h>>2]|0)|0,0,+(+p[w>>3]),500);w=B;B=0;if(w&1){D=v;z=39;break b}ih(b,v)|0;A=x}else A=g}else A=g;while(0);f=f+1|0;if((f|0)>=(k[m>>2]|0))break a;else g=A}if((z|0)==35){g=Rb()|0;f=Q;Sqa(y);E=f;F=g;Qb(F|0)}else if((z|0)==39){g=Rb()|0;f=Q;Sqa(D);E=f;F=g;Qb(F|0)}}while(0);k[d>>2]=129435;Lka(c,1,d);Mka(c,k[n>>2]|0,129412);r=a;return}a=o+56|0;n=o+4|0;k[o>>2]=27524;k[a>>2]=27544;B=0;wa(508,o+56|0,n|0);c=B;B=0;if(c&1){c=Rb()|0;G=Q;H=c;vva(a);Qb(H|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[a>>2]=27488;B=0;va(448,n|0);c=B;B=0;do if(c&1){d=Rb()|0;I=Q;J=d}else{k[n>>2]=27560;d=o+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);D=B;B=0;if(D&1){D=Rb()|0;y=Q;Yua(e);Yua(d);Ava(n);I=y;J=D;break}Yua(e);B=0;D=Ia(40,o|0,129460,37)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,D|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,q|0,129498,89);m=B;B=0;do if(!(m&1)){B=0;eb(502,s|0,135838,17);b=B;B=0;if(b&1){b=Rb()|0;g=Q;Yua(q);K=g;L=b;break}B=0;wa(510,u|0,n|0);b=B;B=0;if(b&1){b=Rb()|0;M=Q;N=b;O=1}else{B=0;ua(163,A|0,q|0,s|0,42,u|0);b=B;B=0;if(b&1)P=1;else{B=0;eb(503,A|0,1240,229);B=0;P=0}b=Rb()|0;g=Q;Yua(u);M=g;N=b;O=P}Yua(s);Yua(q);if(O){K=M;L=N}else{R=M;S=N;break c}}else{b=Rb()|0;K=Q;L=b}while(0);zb(A|0);R=K;S=L}else z=22;while(0);if((z|0)==22){D=Rb()|0;R=Q;S=D}k[o>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(d);Ava(n);vva(a);E=R;F=S;Qb(F|0)}while(0);G=I;H=J;vva(a);Qb(H|0)}function rba(a,b,c){a=a|0;b=b|0;c=c|0;return}function sba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+32|0;d=a+16|0;e=a;if((k[c+40>>2]|0)!=302){r=a;return}k[e>>2]=136615;k[e+4>>2]=136636;k[e+8>>2]=129588;Ska(c,3,e);hoa(b,c,500,738,534);k[d>>2]=136615;k[d+4>>2]=136636;k[d+8>>2]=129588;Lka(c,3,d);r=a;return}function tba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function uba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=c+40|0;if((k[a>>2]|0)!=302)return;f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);if((k[a>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,134027,39);Zka(c,b,134069,40);Yka(c,b,135923,674,0.0);Yka(c,b,135944,677,0.0);return}function vba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function wba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;a=r;r=r+176|0;c=a+152|0;d=a+16|0;e=a;if(!(CY()|0)){xh(b,500);Voa(b);r=a;return}f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;Ia(40,d|0,129620,33)|0;o=B;B=0;if(!(o&1)?(B=0,wa(510,e|0,g|0),o=B,B=0,!(o&1)):0){B=0;ya(425,e|0)|0;o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);q=p;s=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}else{Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);xh(b,500);Voa(b);r=a;return}}o=Rb()|0;q=Q;s=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function xba(a,b){a=a|0;b=b|0;return 0}function yba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,129498,89);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,137,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function zba(a,b){a=a|0;b=b|0;var c=0,d=0;c=Aba(a,b)|0;a=Bba(0,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,c|0,a|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(c){HN(c);Sqa(c)}if(!a)return b|0;HN(a);Sqa(a);return b|0}function Aba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;k[e>>2]=0;f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;g=gq(b,534)|0;h=f>>>0>536870911?-1:f<<3;i=Rqa(h)|0;j=Rqa(h)|0;Uo(b,e);h=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;l=Hc[k[(k[h>>2]|0)+8>>2]&511](h)|0;if((l|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0)){m=h+8|0;n=g+12|0;o=l;do{Fc[k[(k[h>>2]|0)+24>>2]&1023](h,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[e>>2]|0,h);l=k[e>>2]|0;q=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;s=q*3|0;t=Rqa(s>>>0>536870911?-1:s<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,t,l,h);if((q|0)>0)TEa(i|0,t+(q<<4)|0,q<<3|0)|0;Tqa(t);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,h);p[c>>3]=+p[m>>3]*+p[d>>3];ZX(i,1,f,1,c,1,1,0,j,1,f,0,k[n>>2]|0,1)|0;o=o+1|0}while((o|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0))}Ec[k[(k[h>>2]|0)+4>>2]&1023](h);h=k[e>>2]|0;if(!h){k[e>>2]=0;Tqa(j);Tqa(i);r=a;return g|0}Tqa(h);k[e>>2]=0;Tqa(j);Tqa(i);r=a;return g|0}function Bba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0;a=r;r=r+48|0;c=a+32|0;d=a+24|0;e=a;f=a+40|0;if(!(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0)){g=0;r=a;return g|0}k[f>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=gq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Fc[k[(k[b>>2]|0)+192>>2]&1023](b,f);l=ed[k[(k[b>>2]|0)+332>>2]&511](b,2)|0;nd[k[(k[b>>2]|0)+388>>2]&1023](b,e,k[f>>2]|0);m=Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0;if((m|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0)){n=l+8|0;o=e+16|0;e=i+12|0;q=m;do{Fc[k[(k[l>>2]|0)+24>>2]&1023](l,q);rd[k[(k[b>>2]|0)+276>>2]&511](b,d,k[f>>2]|0,l);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,l);p[c>>3]=-(+p[n>>3]*+p[d>>3]*+p[o>>3]);ZX(j,1,h,1,c,1,1,0,j,1,h,0,k[e>>2]|0,1)|0;q=q+1|0}while((q|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0))}Ec[k[(k[l>>2]|0)+4>>2]&1023](l);l=k[f>>2]|0;if(l)Tqa(l);k[f>>2]=0;Tqa(j);g=i;r=a;return g|0}function Cba(a,b){a=a|0;b=b|0;var c=0,d=0;a=Dba(0,b)|0;c=Eba(0,b)|0;b=Qqa(24)|0;B=0;eb(516,b|0,a|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(a){SN(a);Sqa(a)}if(!c)return b|0;SN(c);Sqa(c);return b|0}function Dba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,C=0;a=r;r=r+96|0;c=a+84|0;d=a+72|0;e=a+48|0;f=a+24|0;g=a;h=a+80|0;k[h>>2]=0;i=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;j=iq(b,534)|0;l=Rqa(i>>>0>536870911?-1:i<<3)|0;Uo(b,h);Ap(b,c,533);m=Wo(b,674)|0;n=Wo(b,677)|0;switch(k[c>>2]|0){case 538:case 541:{o=Wo(b,683)|0;break}default:o=0}q=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;a:do if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=f+8|0;u=q+8|0;v=j+4|0;w=g+16|0;if((i|0)>0)x=s;else{y=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,y);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[h>>2]|0,q);nd[k[(k[b>>2]|0)+336>>2]&1023](b,l,q);rd[k[(k[m>>2]|0)+60>>2]&511](m,e,k[h>>2]|0,q);rd[k[(k[n>>2]|0)+60>>2]&511](n,f,k[h>>2]|0,q);switch(k[c>>2]|0){case 538:case 541:{rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[h>>2]|0,q);break}default:{}}y=y+1|0;if((y|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))break a}}while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,x);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[h>>2]|0,q);nd[k[(k[b>>2]|0)+336>>2]&1023](b,l,q);rd[k[(k[m>>2]|0)+60>>2]&511](m,e,k[h>>2]|0,q);rd[k[(k[n>>2]|0)+60>>2]&511](n,f,k[h>>2]|0,q);switch(k[c>>2]|0){case 538:case 541:{rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[h>>2]|0,q);z=+p[w>>3];break}default:z=0.0}A=z+(+p[e>>3]+ +p[t>>3]);y=k[v>>2]|0;B=0;do{C=y+(B<<3)|0;p[C>>3]=A*+p[d>>3]*+p[u>>3]*+p[l+(B<<3)>>3]+ +p[C>>3];B=B+1|0}while((B|0)!=(i|0));x=x+1|0;if((x|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))break a}}while(0);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);Tqa(l);l=k[h>>2]|0;if(!l){r=a;return j|0}Tqa(l);r=a;return j|0}function Eba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0;a=r;r=r+96|0;c=a+88|0;d=a+84|0;e=a+80|0;f=a+72|0;g=a+48|0;h=a+40|0;i=a+32|0;j=a+24|0;l=a+16|0;m=a+8|0;n=a;k[d>>2]=0;k[e>>2]=0;p[j>>3]=0.0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){o=0;r=a;return o|0}q=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;s=iq(b,534)|0;t=Rqa(q>>>0>536870911?-1:q<<3)|0;Uo(b,d);Fc[k[(k[b>>2]|0)+188>>2]&1023](b,e);Ap(b,c,533);u=Wo(b,64)|0;v=Wo(b,928)|0;w=Wo(b,39)|0;x=Wo(b,40)|0;y=Wo(b,674)|0;z=Wo(b,677)|0;switch(k[c>>2]|0){case 538:case 541:{A=Wo(b,683)|0;break}default:A=0}B=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;C=Hc[k[(k[B>>2]|0)+8>>2]&511](B)|0;a:do if((C|0)<(Hc[k[(k[B>>2]|0)+12>>2]&511](B)|0)){D=g+8|0;E=(q|0)>0;F=B+8|0;G=s+4|0;H=C;while(1){Fc[k[(k[B>>2]|0)+24>>2]&1023](B,H);nd[k[(k[w>>2]|0)+48>>2]&1023](w,l,B);nd[k[(k[x>>2]|0)+48>>2]&1023](x,m,B);nd[k[(k[v>>2]|0)+48>>2]&1023](v,n,B);rd[k[(k[u>>2]|0)+60>>2]&511](u,g,k[d>>2]|0,B);nd[k[(k[y>>2]|0)+48>>2]&1023](y,h,B);nd[k[(k[z>>2]|0)+48>>2]&1023](z,i,B);switch(k[c>>2]|0){case 538:case 541:{nd[k[(k[A>>2]|0)+48>>2]&1023](A,j,B);break}default:{}}I=+p[g>>3];J=+p[D>>3];K=+p[n>>3]>0.0?+p[l>>3]:+p[m>>3];rd[k[(k[b>>2]|0)+264>>2]&511](b,f,k[e>>2]|0,B);nd[k[(k[b>>2]|0)+336>>2]&1023](b,t,B);if(E){L=k[G>>2]|0;M=0;do{N=L+(M<<3)|0;p[N>>3]=+p[N>>3]-+p[t+(M<<3)>>3]*(+p[f>>3]*+p[F>>3]*(I*+p[h>>3]+J*+p[i>>3]-+p[j>>3]-K));M=M+1|0}while((M|0)!=(q|0))}H=H+1|0;if((H|0)>=(Hc[k[(k[B>>2]|0)+12>>2]&511](B)|0))break a}}while(0);Ec[k[(k[B>>2]|0)+4>>2]&1023](B);Tqa(t);t=k[d>>2]|0;if(t)Tqa(t);k[d>>2]=0;d=k[e>>2]|0;if(d)Tqa(d);k[e>>2]=0;o=s;r=a;return o|0}function Fba(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,679);return}function Gba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,129498,89);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,501,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Hba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,ba=0.0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0.0,Wb=0.0,Xb=0;a=r;r=r+1088|0;d=a+1064|0;e=a+1036|0;f=a+1020|0;g=a+1016|0;h=a+880|0;i=a+1052|0;j=a+1040|0;l=a+1024|0;m=a+728|0;n=a+864|0;o=a+712|0;q=a+560|0;s=a+576|0;u=a+272|0;v=a+120|0;w=a+108|0;x=a+424|0;y=a+96|0;z=a+84|0;A=a+72|0;C=a+288|0;D=a+60|0;E=a+48|0;F=a+36|0;H=a+136|0;I=a+24|0;J=a+12|0;K=a;L=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;k[f>>2]=0;k[g>>2]=0;Ap(c,e,533);if((k[e>>2]&-9|0)==534){r=a;return}Uo(c,g);rp(c,f,534,943);M=L>>>0>536870911?-1:L<<3;N=Rqa(M)|0;O=Rqa(M)|0;P=Rqa(M)|0;R=Rqa(M)|0;S=Rqa(M)|0;T=Rqa(M)|0;U=Rqa(M)|0;V=Rqa(M)|0;W=Rqa(M)|0;X=Rqa(M)|0;M=(L|0)>0;a:do if(M){Y=k[f>>2]|0;Z=0;do{p[N+(Z<<3)>>3]=+p[b+(k[Y+(Z<<2)>>2]<<3)>>3];Z=Z+1|0}while((Z|0)!=(L|0));if(M){Z=0;while(1){_=+p[N+(Z<<3)>>3];p[R+(Z<<3)>>3]=_;ba=+$(+_);p[t>>3]=ba;Y=k[t>>2]|0;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&Y>>>0>0){da=8;break}Z=Z+1|0;if((Y|0)==0&(ca|0)==2146435072){da=32;break}if((Z|0)>=(L|0))break a}if((da|0)==8){Z=h+56|0;ca=h+4|0;k[h>>2]=27524;k[Z>>2]=27544;B=0;wa(508,h+56|0,ca|0);Y=B;B=0;if(Y&1){Y=Rb()|0;ea=Q;fa=Y;vva(Z);Qb(fa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Z>>2]=27488;B=0;va(448,ca|0);Y=B;B=0;do if(Y&1){ga=Rb()|0;ha=Q;ia=ga}else{k[ca>>2]=27560;ga=h+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ca|0,d|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(d);Yua(ga);Ava(ca);ha=ka;ia=ja;break}Yua(d);B=0;ja=Ia(40,h|0,135564,28)|0;ka=B;B=0;b:do if(!(ka&1)?(B=0,Xa(239,ja|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,i|0,129498,89);ma=B;B=0;do if(!(ma&1)){B=0;eb(502,j|0,137199,23);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(i);pa=oa;qa=na;break}B=0;wa(510,l|0,ca|0);na=B;B=0;if(na&1){na=Rb()|0;ra=Q;sa=na;ta=1}else{B=0;ua(163,la|0,i|0,j|0,540,l|0);na=B;B=0;if(na&1)xa=1;else{B=0;eb(503,la|0,1240,229);B=0;xa=0}na=Rb()|0;oa=Q;Yua(l);ra=oa;sa=na;ta=xa}Yua(j);Yua(i);if(ta){pa=ra;qa=sa}else{za=ra;Aa=sa;break b}}else{na=Rb()|0;pa=Q;qa=na}while(0);zb(la|0);za=pa;Aa=qa}else da=23;while(0);if((da|0)==23){ja=Rb()|0;za=Q;Aa=ja}k[h>>2]=27468;k[Z>>2]=27488;k[ca>>2]=27560;Yua(ga);Ava(ca);vva(Z);Ba=za;Ca=Aa;Qb(Ca|0)}while(0);ea=ha;fa=ia;vva(Z);Qb(fa|0)}else if((da|0)==32){ca=m+56|0;Y=m+4|0;k[m>>2]=27524;k[ca>>2]=27544;B=0;wa(508,m+56|0,Y|0);ja=B;B=0;if(ja&1){ja=Rb()|0;Da=Q;Ea=ja;vva(ca);Qb(Ea|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ca>>2]=27488;B=0;va(448,Y|0);ja=B;B=0;do if(ja&1){ka=Rb()|0;Fa=Q;Ga=ka}else{k[Y>>2]=27560;ka=m+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Y|0,d|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(d);Yua(ka);Ava(Y);Fa=na;Ga=ma;break}Yua(d);B=0;ma=Ia(40,m|0,135593,28)|0;na=B;B=0;c:do if(!(na&1)?(B=0,Xa(239,ma|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,n|0,129498,89);Ha=B;B=0;do if(!(Ha&1)){B=0;eb(502,o|0,137199,23);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ka=Q;Yua(n);La=Ka;Ma=Ja;break}B=0;wa(510,q|0,Y|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Na=1;Oa=Q;Pa=Ja}else{B=0;ua(163,oa|0,n|0,o|0,541,q|0);Ja=B;B=0;if(Ja&1)Qa=1;else{B=0;eb(503,oa|0,1240,229);B=0;Qa=0}Ja=Rb()|0;Ka=Q;Yua(q);Na=Qa;Oa=Ka;Pa=Ja}Yua(o);Yua(n);if(Na){La=Oa;Ma=Pa}else{Ra=Oa;Sa=Pa;break c}}else{Ja=Rb()|0;La=Q;Ma=Ja}while(0);zb(oa|0);Ra=La;Sa=Ma}else da=47;while(0);if((da|0)==47){ma=Rb()|0;Ra=Q;Sa=ma}k[m>>2]=27468;k[ca>>2]=27488;k[Y>>2]=27560;Yua(ka);Ava(Y);vva(ca);Ba=Ra;Ca=Sa;Qb(Ca|0)}while(0);Da=Fa;Ea=Ga;vva(ca);Qb(Ea|0)}}}while(0);up(c,O,674,0.0);up(c,P,677,0.0);d:do switch(k[e>>2]|0){case 541:{Ea=Wo(c,683)|0;if(!Ea){Ga=x+56|0;Fa=x+4|0;k[x>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,x+56|0,Fa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ta=Q;Ua=Da;vva(Ga);Qb(Ua|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Fa|0);Da=B;B=0;do if(Da&1){Sa=Rb()|0;Va=Q;Wa=Sa}else{k[Fa>>2]=27560;Sa=x+36|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Fa|0,d|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;m=Q;Yua(d);Yua(Sa);Ava(Fa);Va=m;Wa=Ra;break}Yua(d);B=0;Ra=Ia(40,x|0,129693,56)|0;m=B;B=0;e:do if(!(m&1)?(B=0,Xa(239,Ra|0,0)|0,Ma=B,B=0,!(Ma&1)):0){Ma=Ab(20)|0;B=0;eb(502,y|0,129498,89);La=B;B=0;do if(!(La&1)){B=0;eb(502,z|0,137199,23);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Oa=Q;Yua(y);Ya=Oa;Za=Pa;break}B=0;wa(510,A|0,Fa|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;_a=1;$a=Q;ab=Pa}else{B=0;ua(163,Ma|0,y|0,z|0,555,A|0);Pa=B;B=0;if(Pa&1)bb=1;else{B=0;eb(503,Ma|0,1240,229);B=0;bb=0}Pa=Rb()|0;Oa=Q;Yua(A);_a=bb;$a=Oa;ab=Pa}Yua(z);Yua(y);if(_a){Ya=$a;Za=ab}else{cb=$a;db=ab;break e}}else{Pa=Rb()|0;Ya=Q;Za=Pa}while(0);zb(Ma|0);cb=Ya;db=Za}else da=100;while(0);if((da|0)==100){Ra=Rb()|0;cb=Q;db=Ra}k[x>>2]=27468;k[Ga>>2]=27488;k[Fa>>2]=27560;Yua(Sa);Ava(Fa);vva(Ga);Ba=cb;Ca=db;Qb(Ca|0)}while(0);Ta=Va;Ua=Wa;vva(Ga);Qb(Ua|0)}if((Hc[k[(k[Ea>>2]|0)+20>>2]&511](Ea)|0)==626){up(c,U,683,0.0);if(M)fb=0;else break d;while(1){Fa=R+(fb<<3)|0;ba=+p[Fa>>3];p[T+(fb<<3)>>3]=ba;p[Fa>>3]=ba+ +p[U+(fb<<3)>>3];fb=fb+1|0;if((fb|0)==(L|0)){da=108;break d}}}Ga=s+56|0;Fa=s+4|0;k[s>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,s+56|0,Fa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;gb=Q;hb=Da;vva(Ga);Qb(hb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Fa|0);Da=B;B=0;do if(Da&1){ca=Rb()|0;ib=Q;jb=ca}else{k[Fa>>2]=27560;ca=s+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Fa|0,d|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;m=Q;Yua(d);Yua(ca);Ava(Fa);ib=m;jb=Ra;break}Yua(d);B=0;Ra=Ia(40,s|0,129654,38)|0;m=B;B=0;f:do if((((!(m&1)?(B=0,ka=ya(k[(k[Ea>>2]|0)+20>>2]|0,Ea|0)|0,La=B,B=0,!(La&1)):0)?(B=0,La=ya(427,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(ka=Lta(La)|0,B=0,oa=Ia(40,Ra|0,La|0,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,Xa(239,oa|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,u|0,129498,89);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,v|0,137199,23);La=B;B=0;if(La&1){La=Rb()|0;Pa=Q;Yua(u);kb=Pa;lb=La;break}B=0;wa(510,w|0,Fa|0);La=B;B=0;if(La&1){La=Rb()|0;mb=1;nb=Q;ob=La}else{B=0;ua(163,oa|0,u|0,v|0,552,w|0);La=B;B=0;if(La&1)pb=1;else{B=0;eb(503,oa|0,1240,229);B=0;pb=0}La=Rb()|0;Pa=Q;Yua(w);mb=pb;nb=Pa;ob=La}Yua(v);Yua(u);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break f}}else{La=Rb()|0;kb=Q;lb=La}while(0);zb(oa|0);qb=kb;rb=lb}else da=76;while(0);if((da|0)==76){Ra=Rb()|0;qb=Q;rb=Ra}k[s>>2]=27468;k[Ga>>2]=27488;k[Fa>>2]=27560;Yua(ca);Ava(Fa);vva(Ga);Ba=qb;Ca=rb;Qb(Ca|0)}while(0);gb=ib;hb=jb;vva(Ga);Qb(hb|0);break}case 538:{Fa=Wo(c,683)|0;if(!Fa){Ea=H+56|0;Da=H+4|0;k[H>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,H+56|0,Da|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;sb=Q;tb=Ra;vva(Ea);Qb(tb|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Da|0);Ra=B;B=0;do if(Ra&1){m=Rb()|0;ub=Q;vb=m}else{k[Da>>2]=27560;m=H+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[H+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Da|0,d|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;ka=Q;Yua(d);Yua(m);Ava(Da);ub=ka;vb=Sa;break}Yua(d);B=0;Sa=Ia(40,H|0,129750,57)|0;ka=B;B=0;g:do if(!(ka&1)?(B=0,Xa(239,Sa|0,0)|0,Ma=B,B=0,!(Ma&1)):0){Ma=Ab(20)|0;B=0;eb(502,I|0,129498,89);La=B;B=0;do if(!(La&1)){B=0;eb(502,J|0,137199,23);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Oa=Q;Yua(I);wb=Oa;xb=Pa;break}B=0;wa(510,K|0,Da|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;yb=1;Bb=Q;Cb=Pa}else{B=0;ua(163,Ma|0,I|0,J|0,567,K|0);Pa=B;B=0;if(Pa&1)Db=1;else{B=0;eb(503,Ma|0,1240,229);B=0;Db=0}Pa=Rb()|0;Oa=Q;Yua(K);yb=Db;Bb=Oa;Cb=Pa}Yua(J);Yua(I);if(yb){wb=Bb;xb=Cb}else{Eb=Bb;Fb=Cb;break g}}else{Pa=Rb()|0;wb=Q;xb=Pa}while(0);zb(Ma|0);Eb=wb;Fb=xb}else da=154;while(0);if((da|0)==154){Sa=Rb()|0;Eb=Q;Fb=Sa}k[H>>2]=27468;k[Ea>>2]=27488;k[Da>>2]=27560;Yua(m);Ava(Da);vva(Ea);Ba=Eb;Ca=Fb;Qb(Ca|0)}while(0);sb=ub;tb=vb;vva(Ea);Qb(tb|0)}if((Hc[k[(k[Fa>>2]|0)+20>>2]&511](Fa)|0)==626){up(c,U,683,0.0);if(M)Gb=0;else break d;while(1){Da=R+(Gb<<3)|0;ba=+p[Da>>3];p[S+(Gb<<3)>>3]=ba;p[Da>>3]=ba+ +p[U+(Gb<<3)>>3];Gb=Gb+1|0;if((Gb|0)==(L|0)){da=108;break d}}}Ea=C+56|0;Da=C+4|0;k[C>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,C+56|0,Da|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;Hb=Q;Ib=Ra;vva(Ea);Qb(Ib|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Da|0);Ra=B;B=0;do if(Ra&1){Ga=Rb()|0;Jb=Q;Kb=Ga}else{k[Da>>2]=27560;Ga=C+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[C+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Da|0,d|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;ka=Q;Yua(d);Yua(Ga);Ava(Da);Jb=ka;Kb=Sa;break}Yua(d);B=0;Sa=Ia(40,C|0,129654,38)|0;ka=B;B=0;h:do if((((!(ka&1)?(B=0,ca=ya(k[(k[Fa>>2]|0)+20>>2]|0,Fa|0)|0,La=B,B=0,!(La&1)):0)?(B=0,La=ya(427,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(ca=Lta(La)|0,B=0,oa=Ia(40,Sa|0,La|0,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(B=0,Xa(239,oa|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,D|0,129498,89);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,E|0,137199,23);La=B;B=0;if(La&1){La=Rb()|0;Pa=Q;Yua(D);Lb=Pa;Mb=La;break}B=0;wa(510,F|0,Da|0);La=B;B=0;if(La&1){La=Rb()|0;Nb=Q;Ob=La;Pb=1}else{B=0;ua(163,oa|0,D|0,E|0,564,F|0);La=B;B=0;if(La&1)Sb=1;else{B=0;eb(503,oa|0,1240,229);B=0;Sb=0}La=Rb()|0;Pa=Q;Yua(F);Nb=Pa;Ob=La;Pb=Sb}Yua(E);Yua(D);if(Pb){Lb=Nb;Mb=Ob}else{Tb=Nb;Ub=Ob;break h}}else{La=Rb()|0;Lb=Q;Mb=La}while(0);zb(oa|0);Tb=Lb;Ub=Mb}else da=130;while(0);if((da|0)==130){Sa=Rb()|0;Tb=Q;Ub=Sa}k[C>>2]=27468;k[Ea>>2]=27488;k[Da>>2]=27560;Yua(Ga);Ava(Da);vva(Ea);Ba=Tb;Ca=Ub;Qb(Ca|0)}while(0);Hb=Jb;Ib=Kb;vva(Ea);Qb(Ib|0);break}default:da=108}while(0);if((da|0)==108?M:0){da=0;do{ba=+p[O+(da<<3)>>3];_=+p[P+(da<<3)>>3];Vb=+p[R+(da<<3)>>3];Wb=ba*ba+_*_+Vb*Vb;Vb=+$(+(+aa(+Wb)));p[V+(da<<3)>>3]=Wb==-G?G:Vb;da=da+1|0}while((da|0)!=(L|0))}switch(k[e>>2]|0){case 538:case 541:break;default:{Vb=+Dp(c,265);Wb=+Dp(c,65);up(c,X,339,0.0);if(M){_=Vb*Wb;M=k[g>>2]|0;da=0;do{p[W+(da<<3)>>3]=_*(+p[X+(da<<3)>>3]-+p[M+((da*3|0)+2<<3)>>3]);da=da+1|0}while((da|0)!=(L|0))}}}Pp(c,679,682);switch(k[e>>2]|0){case 541:{rd[k[(k[c>>2]|0)+48>>2]&511](c,681,T,738);Xb=c;break}case 538:{rd[k[(k[c>>2]|0)+48>>2]&511](c,680,S,738);Xb=c;break}default:{Pp(c,653,654);e=k[c>>2]|0;L=k[e+48>>2]|0;da=Hc[k[e+128>>2]&511](c)|0;rd[L&511](c,653,W,da);Xb=c}}rd[k[(k[Xb>>2]|0)+48>>2]&511](c,679,R,738);rd[k[(k[Xb>>2]|0)+48>>2]&511](c,671,V,738);Tqa(X);Tqa(W);Tqa(V);Tqa(R);Tqa(S);Tqa(T);Tqa(U);Tqa(P);Tqa(O);Tqa(N);N=k[g>>2]|0;if(N)Tqa(N);k[g>>2]=0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;r=a;return}function Iba(a,b){a=a|0;b=b|0;return}function Jba(a){a=a|0;Sqa(a);return}function Kba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0;a=r;r=r+224|0;d=a+204|0;e=a+200|0;f=a+196|0;g=a+8|0;h=a;i=a+192|0;j=a+56|0;l=a+40|0;m=a+28|0;n=a+16|0;k[i>>2]=0;Gka(c,g,129827);Gka(c,h,129853);if((k[c+40>>2]|0)==300){r=a;return}Qka(c,i,e,f,134812);o=k[e>>2]|0;e=c+52|0;q=k[e>>2]|0;if((o|0)==(q|0)){a:do if((o|0)>0){s=c+36|0;u=c+108|0;v=c+100|0;w=o;x=0;y=0;while(1){if((k[(k[s>>2]|0)+(y<<2)>>2]|0)!=0?(z=(k[i>>2]|0)+(y<<3)|0,A=+$(+(+p[z>>3])),p[t>>3]=A,C=k[t+4>>2]|0,!(C>>>0>2146435072|(C|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){C=Qqa(32)|0;D=x+1|0;B=0;Pa(1,C|0,D+(k[u>>2]|0)|0,y+1+(k[v>>2]|0)|0,0,+(+p[g>>3]*(+p[z>>3]-+p[h>>3])),501);z=B;B=0;if(z&1){E=C;break}ih(b,C)|0;F=k[e>>2]|0;G=D}else{F=w;G=x}y=y+1|0;if((y|0)>=(F|0))break a;else{w=F;x=G}}x=Rb()|0;w=Q;Sqa(E);H=w;I=x;Qb(I|0)}while(0);Mka(c,k[i>>2]|0,134812);r=a;return}if((o|0)==(q+1|0)){E=k[f>>2]|0;G=Rqa(E>>>0>536870911?-1:E<<3)|0;if((E|0)>0){F=k[i>>2]|0;x=ma(o+-1|0,E)|0;o=0;do{p[G+(o<<3)>>3]=+p[F+(x+o<<3)>>3];o=o+1|0}while((o|0)<(E|0))}b:do if((q|0)>0){E=c+36|0;o=c+108|0;x=c+100|0;F=q;w=0;y=0;while(1){if(!(k[(k[E>>2]|0)+(y<<2)>>2]|0)){J=F;K=w}else{v=k[f>>2]|0;u=Rqa(v>>>0>536870911?-1:v<<3)|0;if((v|0)>0){s=k[i>>2]|0;A=+p[g>>3];L=+p[h>>3];D=ma(v,y)|0;C=0;z=0;do{M=A*(+p[s+(D+C<<3)>>3]-L);p[u+(C<<3)>>3]=M;N=+$(+M);p[t>>3]=N;O=k[t+4>>2]|0;z=z|(O>>>0<2146435072|(O|0)==2146435072&(k[t>>2]|0)>>>0<1);C=C+1|0}while((C|0)<(v|0));if(z){C=Qqa(36)|0;D=w+1|0;B=0;Ka(11,C|0,D+(k[o>>2]|0)|0,y+1+(k[x>>2]|0)|0,0,v|0,G|0,u|0,501);s=B;B=0;if(s&1){P=C;break}ih(b,C)|0;R=D}else R=w}else R=w;Tqa(u);J=k[e>>2]|0;K=R}y=y+1|0;if((y|0)>=(J|0))break b;else{F=J;w=K}}w=Rb()|0;F=Q;Sqa(P);H=F;I=w;Qb(I|0)}while(0);Mka(c,k[i>>2]|0,134812);Tqa(G);r=a;return}a=j+56|0;G=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,G|0);i=B;B=0;if(i&1){i=Rb()|0;S=Q;T=i;vva(a);Qb(T|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,G|0);i=B;B=0;do if(i&1){c=Rb()|0;U=Q;V=c}else{k[G>>2]=27560;c=j+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,G|0,d|0);P=B;B=0;if(P&1){P=Rb()|0;K=Q;Yua(d);Yua(c);Ava(G);U=K;V=P;break}Yua(d);B=0;P=Ia(40,j|0,129887,14)|0;K=B;B=0;c:do if((((!(K&1)?(B=0,J=ya(427,347)|0,R=B,B=0,!(R&1)):0)?(R=Lta(J)|0,B=0,e=Ia(40,P|0,J|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Ia(40,e|0,144645,14)|0,e=B,B=0,!(e&1)):0)?(B=0,Xa(239,R|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,l|0,129902,76);e=B;B=0;do if(!(e&1)){B=0;eb(502,m|0,135838,17);J=B;B=0;if(J&1){J=Rb()|0;b=Q;Yua(l);W=b;X=J;break}B=0;wa(510,n|0,G|0);J=B;B=0;if(J&1){J=Rb()|0;Y=Q;Z=J;_=1}else{B=0;ua(163,R|0,l|0,m|0,86,n|0);J=B;B=0;if(J&1)aa=1;else{B=0;eb(503,R|0,1240,229);B=0;aa=0}J=Rb()|0;b=Q;Yua(n);Y=b;Z=J;_=aa}Yua(m);Yua(l);if(_){W=Y;X=Z}else{ba=Y;ca=Z;break c}}else{J=Rb()|0;W=Q;X=J}while(0);zb(R|0);ba=W;ca=X}else da=46;while(0);if((da|0)==46){P=Rb()|0;ba=Q;ca=P}k[j>>2]=27468;k[a>>2]=27488;k[G>>2]=27560;Yua(c);Ava(G);vva(a);H=ba;I=ca;Qb(I|0)}while(0);S=U;T=V;vva(a);Qb(T|0)}function Lba(a,b,c){a=a|0;b=b|0;c=c|0;return}function Mba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)==302){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,501,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function Nba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Oba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+224|0;f=a+16|0;g=a;h=a+214|0;j=a+213|0;l=a+212|0;m=a+208|0;n=a+204|0;o=a+200|0;p=a+64|0;q=a+52|0;s=a+40|0;t=a+28|0;u=c+40|0;if((k[u>>2]|0)==300){r=a;return}zka(c,l,135466);if(!(i[l>>0]|0)){r=a;return}k[g>>2]=135066;k[g+4>>2]=129979;k[g+8>>2]=135039;Ska(c,3,g);l=c+56|0;v=k[l>>2]|0;if((v|0)>0){w=c+32|0;x=v;v=0;y=0;while(1){if(!(i[(k[w>>2]|0)+y>>0]|0)){z=x;A=v}else{C=qh(b,v)|0;Uc[k[(k[C>>2]|0)+480>>2]&63](C,y,c,d,e,738);z=k[l>>2]|0;A=v+1|0}y=y+1|0;if((y|0)>=(z|0))break;else{x=z;v=A}}}zka(c,h,134866);zka(c,j,134882);Fka(c,m,134909);Zka(c,b,137052,353);Zka(c,b,134925,339);Yka(c,b,137955,999,0.0);Zka(c,b,134945,64);Zka(c,b,137867,206);Zka(c,b,134962,928);if((k[u>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,134991,214);Zka(c,b,135015,217);Zka(c,b,135039,653);Zka(c,b,135066,666);Zka(c,b,129979,698);Zka(c,b,130011,687);Zka(c,b,130224,699);Zka(c,b,134027,39);Zka(c,b,135923,674);Zka(c,b,135944,677);Zka(c,b,135096,679);woa(b,0.0,684);woa(b,0.0,685);woa(b,0.0,686);if(i[j>>0]|0)Zka(c,b,136615,287);Fka(c,n,135117);if((k[n>>2]|0)!=62)Zka(c,b,135140,38);switch(k[m>>2]|0){case 1:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);break}case 2:{Zka(c,b,135224,110);Zka(c,b,135238,109);break}case 3:{Fka(c,o,135252);Zka(c,b,135224,110);Zka(c,b,135273,104);Zka(c,b,135210,108);if(!(k[o>>2]|0))Zka(c,b,135288,115);break}case 4:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135039,653);Zka(c,b,135066,666);break}case 5:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135319,114);break}case 6:{Zka(c,b,135224,110);Zka(c,b,135238,109);Zka(c,b,135039,653);Zka(c,b,135066,666);break}default:{b=p+56|0;o=p+4|0;k[p>>2]=27524;k[b>>2]=27544;B=0;wa(508,p+56|0,o|0);m=B;B=0;if(m&1){m=Rb()|0;D=Q;E=m;vva(b);Qb(E|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[b>>2]=27488;B=0;va(448,o|0);m=B;B=0;do if(m&1){n=Rb()|0;F=Q;G=n}else{k[o>>2]=27560;n=p+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[p+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,o|0,g|0);j=B;B=0;if(j&1){j=Rb()|0;u=Q;Yua(g);Yua(n);Ava(o);F=u;G=j;break}Yua(g);B=0;j=Ia(40,p|0,145010,13)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,q|0,129902,76);u=B;B=0;do if(!(u&1)){B=0;eb(502,s|0,136133,14);h=B;B=0;if(h&1){h=Rb()|0;A=Q;Yua(q);H=A;I=h;break}B=0;wa(510,t|0,o|0);h=B;B=0;if(h&1){h=Rb()|0;J=Q;K=h;L=1}else{B=0;ua(163,j|0,q|0,s|0,215,t|0);h=B;B=0;if(h&1)M=1;else{B=0;eb(503,j|0,1240,229);B=0;M=0}h=Rb()|0;A=Q;Yua(t);J=A;K=h;L=M}Yua(s);Yua(q);if(L){H=J;I=K}else{N=J;O=K;k[p>>2]=27468;k[b>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(b);Qb(O|0)}}else{h=Rb()|0;H=Q;I=h}while(0);zb(j|0);N=H;O=I;k[p>>2]=27468;k[b>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(b);Qb(O|0)}u=Rb()|0;N=Q;O=u;k[p>>2]=27468;k[b>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(b);Qb(O|0)}while(0);D=F;E=G;vva(b);Qb(E|0)}}k[f>>2]=135066;k[f+4>>2]=129979;k[f+8>>2]=135039;Lka(c,3,f);r=a;return}function Pba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;d=e+8|0;a=e+4|0;f=e;k[a>>2]=0;YN(b,Ika(c,135362,348)|0);YN(b,Ika(c,135343,343)|0);YN(b,Ika(c,130038,342)|0);YN(b,Ika(c,135466,340)|0);YN(b,Ika(c,135488,341)|0);YN(b,Ika(c,134909,111)|0);Hka(c,a,d,135517);g=Qqa(12)|0;B=0;eb(518,g|0,349,k[d>>2]|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;Sqa(g);j=i;l=h;Qb(l|0)}YN(b,g);g=k[d>>2]|0;do if(!g)m=0;else{h=Qqa(16)|0;B=0;ib(294,h|0,350,k[a>>2]|0,g|0);i=B;B=0;if(!(i&1)){YN(b,h);m=k[d>>2]|0;break}i=Rb()|0;n=Q;Sqa(h);j=n;l=i;Qb(l|0)}while(0);Nka(c,a,m,135517);Fka(c,f,134909);m=k[f>>2]|0;if((m&-3|0)==4){YN(b,Ika(c,135546,112)|0);o=k[f>>2]|0}else o=m;if((o|0)!=3){r=e;return}YN(b,Ika(c,135252,116)|0);r=e;return}function Qba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c+8|0;g=c;if(!($p(b)|0)){r=c;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=c;return}k[f>>2]=0;op(b,d,341);if(i[d>>0]|0){d=Wo(b,653)|0;VB(b,e,f,Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0);h=Qqa(72)|0;B=0;va(493,h|0);j=B;B=0;if(j&1){j=Rb()|0;Sqa(h);Qb(j|0)}if((k[e>>2]|0)>0){j=0;do{l=k[(k[h>>2]|0)+32>>2]|0;m=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[l&1023](h,m,k[(k[f>>2]|0)+(j<<2)>>2]|0);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,h);m=ed[k[(k[b>>2]|0)+156>>2]&511](b,k[(k[f>>2]|0)+(j<<2)>>2]|0)|0;l=a+((Qn(m)|0)<<3)|0;if(+p[l>>3]==1.0){nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,h);n=+p[g>>3];o=+Dp(b,210);q=+Dp(b,66);s=+Dp(b,212);Un(m,0,o*(s-n*+Dp(b,209)-q))}else Zn(m,0);j=j+1|0}while((j|0)<(k[e>>2]|0))}e=k[f>>2]|0;if(e)Tqa(e);k[f>>2]=0;Ec[k[(k[h>>2]|0)+4>>2]&1023](h)}r=c;return}function Rba(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{Sba(qh(k[b>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Sba(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0,xa=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0,Ea=0,Fa=0.0,Ga=0.0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0;b=r;r=r+320|0;c=b+264|0;d=b+128|0;e=b+304|0;f=b+300|0;g=b+104|0;h=b+80|0;j=b+56|0;l=b+48|0;m=b+40|0;n=b+32|0;o=b+24|0;q=b+16|0;s=b+8|0;t=b;u=b+296|0;v=b+292|0;w=b+276|0;x=b+280|0;if(!($p(a)|0)){r=b;return}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}if(_p(a)|0){r=b;return}k[u>>2]=0;k[v>>2]=0;k[w>>2]=0;Uo(a,u);Fc[k[(k[a>>2]|0)+188>>2]&1023](a,v);zp(a,e,645);pp(a,n,358);pp(a,o,67);y=+p[n>>3]==0.0&(i[e>>0]|0)==0?688:687;z=+Dp(a,211);A=+Dp(a,265);C=+Dp(a,267);D=+Dp(a,209);E=+Tba(a,y);e=Wo(a,y)|0;F=Wo(a,653)|0;G=Wo(a,38)|0;H=Wo(a,674)|0;I=Wo(a,677)|0;J=Wo(a,679)|0;K=Qqa(16)|0;B=0;eb(524,K|0,a|0,3);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Sqa(K);N=M;O=L;Qb(O|0)}nd[k[(k[a>>2]|0)+380>>2]&1023](a,g,k[v>>2]|0);nd[k[(k[a>>2]|0)+512>>2]&1023](a,w,f);L=k[f>>2]|0;M=Rqa(L>>>0>536870911?-1:L<<3)|0;L=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;P=L>>>0>536870911?-1:L<<3;L=Rqa(P)|0;R=Rqa(P)|0;S=Rqa(P)|0;T=Rqa(P)|0;xp(a,L,y);xp(a,R,653);xp(a,S,699);xp(a,T,39);P=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;a:do if((k[f>>2]|0)>0){U=d+56|0;V=d+4|0;W=d+56|0;X=d+128|0;Y=d+132|0;Z=d+36|0;_=d+52|0;$=z*A;aa=g+8|0;ba=g+16|0;ca=h+8|0;da=h+16|0;ea=j+8|0;fa=j+16|0;ga=0.0;ha=0.0;ia=0.0;ja=0;b:while(1){ka=ja<<1;la=k[w>>2]|0;ma=k[la+(ka<<2)>>2]|0;na=k[la+((ka|1)<<2)>>2]|0;Fc[k[(k[P>>2]|0)+28>>2]&1023](P,ma);ka=L+(ma<<3)|0;la=R+(ma<<3)|0;switch(Uba(a,+p[ka>>3],+p[L+(na<<3)>>3],+p[la>>3],+p[R+(na<<3)>>3],+p[S+(ma<<3)>>3],+p[T+(ma<<3)>>3])|0){case 0:{p[M+(ja<<3)>>3]=0.0;oa=0.0;pa=0.0;qa=0.0;break}case 3:case 2:case 1:{rd[k[(k[e>>2]|0)+60>>2]&511](e,h,k[u>>2]|0,P);ra=-(E*+p[h>>3]);sa=-(E*+p[ca>>3]);ta=-(E*+p[da>>3]);ua=30;break}case 4:{xa=+p[ka>>3];za=+p[la>>3];Aa=+Dp(a,270);np(a,c,d,xa,za);za=+p[d>>3];rd[k[(k[F>>2]|0)+60>>2]&511](F,j,k[u>>2]|0,P);xa=D*(za*.6+Aa*(1.0-za));ra=xa*+p[j>>3];sa=xa*+p[ea>>3];ta=xa*+p[fa>>3];ua=30;break}default:{k[d>>2]=27524;k[U>>2]=27544;B=0;wa(508,W|0,V|0);la=B;B=0;if(la&1){ua=22;break b}k[X>>2]=0;k[Y>>2]=-1;k[d>>2]=27468;k[U>>2]=27488;B=0;va(448,V|0);la=B;B=0;if(la&1){ua=23;break b}k[V>>2]=27560;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[_>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,V|0,c|0);la=B;B=0;if(la&1){ua=21;break b}Yua(c);B=0;Ia(40,d|0,130056,35)|0;la=B;B=0;if(la&1){ua=32;break b}B=0;wa(510,x|0,V|0);la=B;B=0;if(la&1){ua=32;break b}B=0;ya(425,x|0)|0;la=B;B=0;if(la&1){ua=33;break b}Yua(x);k[d>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(U);ra=ia;sa=ha;ta=ga;ua=30}}if((ua|0)==30){ua=0;xa=ra*+p[g>>3]+0.0+sa*+p[aa>>3]+ta*+p[ba>>3];fla(K,l,P);nd[k[(k[H>>2]|0)+48>>2]&1023](H,q,P);nd[k[(k[I>>2]|0)+48>>2]&1023](I,s,P);nd[k[(k[J>>2]|0)+48>>2]&1023](J,t,P);za=+p[q>>3];Aa=+p[s>>3];Ba=+p[t>>3];Ca=+p[l>>3]*(za*za+Aa*Aa+Ba*Ba);nd[k[(k[G>>2]|0)+48>>2]&1023](G,m,P);p[M+(ja<<3)>>3]=(xa+Ca+ +p[m>>3])/$;oa=ta;pa=sa;qa=ra}ja=ja+1|0;la=k[f>>2]|0;if((ja|0)>=(la|0)){Da=la;ua=7;break}else{ga=oa;ha=pa;ia=qa}}if((ua|0)==7){if((Da|0)<=0){ua=8;break}ja=k[w>>2]|0;ia=+p[n>>3];ha=+p[o>>3];ga=C/A;if(ia!=0.0)Ea=0;else{ba=0;while(1){aa=k[ja+(ba<<1<<2)>>2]|0;$=+p[M+(ba<<3)>>3];_=T+(aa<<3)|0;p[_>>3]=$;Y=S+(aa<<3)|0;Ca=$+ +p[Y>>3];p[Y>>3]=Ca<0.0?0.0:Ca;p[_>>3]=ga*$;ba=ba+1|0;if((ba|0)>=(Da|0)){Fa=ia;break a}}}while(1){ba=k[ja+(Ea<<1<<2)>>2]|0;_=S+(ba<<3)|0;$=+p[_>>3];Ca=+p[M+(Ea<<3)>>3];xa=ia*Ca;Ba=$+xa;if(Ba<0.0){Aa=-$/xa;p[_>>3]=0.0;Y=L+(ba<<3)|0;p[Y>>3]=+p[Y>>3]+A*(z*((1.0-Aa)*ia/ha*Ca));Ga=Aa*Ca}else{p[_>>3]=Ba;Ga=Ca}p[T+(ba<<3)>>3]=ga*Ga;Ea=Ea+1|0;if((Ea|0)>=(Da|0)){Fa=ia;break a}}}else if((ua|0)==21){ja=Rb()|0;ba=Q;Yua(c);Yua(Z);Ava(V);Ha=ba;Ja=ja;ua=24}else if((ua|0)==22){ja=Rb()|0;Ka=Q;La=ja;vva(U);Qb(La|0)}else if((ua|0)==23){ja=Rb()|0;Ha=Q;Ja=ja;ua=24}else if((ua|0)==32){ja=Rb()|0;Ma=Q;Na=ja;ua=34}else if((ua|0)==33){ja=Rb()|0;ba=Q;Yua(x);Ma=ba;Na=ja;ua=34}if((ua|0)==24){Ka=Ha;La=Ja;vva(U);Qb(La|0)}else if((ua|0)==34){k[d>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(U);N=Ma;O=Na;Qb(O|0)}}else ua=8;while(0);if((ua|0)==8)Fa=+p[n>>3];if(Fa!=0.0){rd[k[(k[a>>2]|0)+48>>2]&511](a,y,L,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,699,S,738)}rd[k[(k[a>>2]|0)+48>>2]&511](a,39,T,738);if(P)Ec[k[(k[P>>2]|0)+4>>2]&1023](P);bla(K);Sqa(K);K=k[w>>2]|0;if(K)Tqa(K);k[w>>2]=0;Tqa(L);Tqa(R);Tqa(S);Tqa(T);Tqa(M);M=k[u>>2]|0;if(M)Tqa(M);k[u>>2]=0;u=k[v>>2]|0;if(u)Tqa(u);r=b;return}function Tba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;d=c>>>0>536870911?-1:c<<3;e=Rqa(d)|0;f=Rqa(d)|0;g=Rqa(d)|0;h=Rqa(d)|0;xp(a,e,653);xp(a,f,b);b=(c|0)>0;do if(b){d=0;do{i=+p[e+(d<<3)>>3];j=+Dp(a,210);l=+Dp(a,66);m=+Dp(a,212);n=j*(m-i*+Dp(a,209)-l);p[g+(d<<3)>>3]=n;p[h+(d<<3)>>3]=+p[f+(d<<3)>>3]-n;d=d+1|0}while((d|0)!=(c|0));d=(c|0)>1;if(+p[h>>3]<0.0){if(d){o=1;q=1}else break;while(1){if(!(o<<24>>24))r=0;else r=+p[h+(q<<3)>>3]<0.0;q=q+1|0;if((q|0)==(c|0)){s=r;break}else o=r&1}}else{if(d){t=1;u=1}else break;while(1){if(t)v=+p[h+(u<<3)>>3]>=0.0;else v=0;u=u+1|0;if((u|0)==(c|0)){s=v;break}else t=v}}if(!s){n=+Dp(a,210);l=+Dp(a,66);i=+Dp(a,212);m=n*(i-+Dp(a,209)*0.0-l)+-1.0;l=+Dp(a,210);i=+Dp(a,271);n=+Dp(a,270);j=+Dp(a,210);w=+Dp(a,66);x=+Dp(a,212);d=j*(x-+Dp(a,209)*0.0-w)>m;m=(d?n:i)/l;l=+Dp(a,210);i=+Dp(a,66);n=+Dp(a,212);w=l*(n-+Dp(a,209)*0.0-i)+1.0;i=+Dp(a,210);n=+Dp(a,271);l=+Dp(a,270);x=+Dp(a,210);j=+Dp(a,66);y=+Dp(a,212);d=x*(y-+Dp(a,209)*0.0-j)>w;w=(d?l:n)/i;if(b){i=0.0;n=0.0;d=0;while(1){l=+p[f+(d<<3)>>3];j=+p[g+(d<<3)>>3];z=l<j;y=z?i+(j-l):i;x=z?n:n+(l-j);d=d+1|0;if((d|0)==(c|0)){A=y;B=x;break}else{i=y;n=x}}}else{A=0.0;B=0.0}n=A/(A+B);C=m*w/(w*n+m*(1.0-n));Tqa(g);Tqa(h);Tqa(e);Tqa(f);return +C}}while(0);B=+p[f>>3];A=+p[e>>3];n=+Dp(a,210);i=+Dp(a,271);x=+Dp(a,270);y=+Dp(a,210);j=+Dp(a,66);l=+Dp(a,212);c=y*(l-A*+Dp(a,209)-j)>B;C=(c?x:i)/n;Tqa(g);Tqa(h);Tqa(e);Tqa(f);return +C}function Uba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0;h=r;r=r+16|0;i=h;if(!($p(a)|0)){j=-1;r=h;return j|0}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){j=-1;r=h;return j|0}pp(a,i,358);l=+Dp(a,210);m=+Dp(a,66);n=+Dp(a,212);if(!(l*(n-+Dp(a,209)*d-m)>b)){b=+Dp(a,210);m=+Dp(a,66);d=+Dp(a,212);if(b*(d-+Dp(a,209)*e-m)>c)o=g<0.0&+p[i>>3]==0.0?2:3;else o=4}else o=!(f<=0.0)&1;j=o;r=h;return j|0}function Vba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;a=r;r=r+160|0;c=a;d=a+24|0;e=a+12|0;a:do if(CY()|0){f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(c);Yua(l);Ava(g);m=q;n=o;break}Yua(c);B=0;Ia(40,d|0,130092,22)|0;o=B;B=0;if(!(o&1)?(B=0,wa(510,e|0,g|0),o=B,B=0,!(o&1)):0){B=0;ya(425,e|0)|0;o=B;B=0;if(!(o&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);break a}o=Rb()|0;q=Q;Yua(e);s=q;t=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(t|0)}o=Rb()|0;s=Q;t=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(t|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}while(0);xh(b,501);C_(b);joa(b,687,688);dO(k[b+44>>2]|0,c,358);if(!(+p[c>>3]==0.0)){Wba(b);r=a;return}c=b+20|0;if((th(k[c>>2]|0)|0)>0)u=0;else{r=a;return}do{Sba(qh(k[c>>2]|0,u)|0);u=u+1|0}while((u|0)<(th(k[c>>2]|0)|0));r=a;return}function Wba(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=a+44|0;bO(k[d>>2]|0,c,341);dO(k[d>>2]|0,b,358);d=a+20|0;if((th(k[d>>2]|0)|0)>0){e=0;do{eca(qh(k[d>>2]|0,e)|0);e=e+1|0}while((e|0)<(th(k[d>>2]|0)|0))}if((th(k[d>>2]|0)|0)>0){e=0;do{Sba(qh(k[d>>2]|0,e)|0);e=e+1|0}while((e|0)<(th(k[d>>2]|0)|0))}if(!(i[c>>0]|0)){r=b;return}lca(a);r=b;return}function Xba(a,b){a=a|0;b=b|0;return 0}function Yba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,129902,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,480,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Zba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!($p(b)|0)){c=0;return c|0}d=_ba(a,b)|0;a=$ba(0,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,d|0,a|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}if(d){HN(d);Sqa(d)}if(!a){c=b;return c|0}HN(a);Sqa(a);c=b;return c|0}function _ba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,ba=0,ca=0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0,wa=0,xa=0;a=r;r=r+256|0;c=a+244|0;d=a+232|0;e=a+224|0;f=a+216|0;g=a+208|0;h=a+200|0;i=a+192|0;j=a+184|0;l=a+176|0;m=a+168|0;n=a+160|0;o=a+152|0;q=a+144|0;s=a+240|0;t=a+72|0;u=a;if(!($p(b)|0)){v=0;r=a;return v|0}k[s>>2]=0;w=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;x=gq(b,534)|0;y=Rqa(w>>>0>536870911?-1:w<<3)|0;z=w*3|0;A=z>>>0>536870911?-1:z<<3;z=Rqa(A)|0;B=Rqa(A)|0;C=Rqa(A)|0;A=t;D=A+72|0;do{k[A>>2]=0;A=A+4|0}while((A|0)<(D|0));Uo(b,s);pp(b,e,358);cp(b,c,348);+Dp(b,266);E=+Dp(b,265);+Dp(b,65);+Dp(b,210);+Dp(b,270);A=Wo(b,674)|0;D=Wo(b,677)|0;F=Wo(b,679)|0;G=Wo(b,684)|0;H=Wo(b,685)|0;I=Wo(b,686)|0;if((k[c>>2]|0)==2)J=+id[k[(k[b>>2]|0)+292>>2]&63](b,k[s>>2]|0);else J=0.0;K=+Tba(b,688);L=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;M=Hc[k[(k[L>>2]|0)+8>>2]&511](L)|0;a:do if((M|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0)){N=L+8|0;O=t+32|0;P=t+64|0;Q=x+12|0;R=u+8|0;S=u+16|0;T=u+24|0;U=u+32|0;V=u+40|0;W=u+48|0;X=u+56|0;Y=u+64|0;Z=K/E;_=(w|0)>0;ba=w<<1;ca=M;while(1){Fc[k[(k[L>>2]|0)+24>>2]&1023](L,ca);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[s>>2]|0,L);da=+p[N>>3]*+p[d>>3];p[q>>3]=da;ea=+p[e>>3];if(ea!=0.0)p[q>>3]=da*ea;fa=k[s>>2]|0;ga=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;ha=ga*3|0;ia=Rqa(ha>>>0>536870911?-1:ha<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ia,fa,L);if((ga|0)>0){fa=ga<<1;ha=0;do{p[B+(ha<<3)>>3]=+p[ia+(ha<<3)>>3];ja=ha+ga|0;p[B+(ja<<3)>>3]=+p[ia+(ja<<3)>>3];ja=ha+fa|0;p[B+(ja<<3)>>3]=+p[ia+(ja<<3)>>3];ha=ha+1|0}while((ha|0)!=(ga|0))}Tqa(ia);ea=K*+p[q>>3]/E;p[t>>3]=ea;p[O>>3]=ea;p[P>>3]=ea;ZX(B,3,w,1,t,3,3,0,B,3,w,0,k[Q>>2]|0,1)|0;ga=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;ha=Rqa(ga>>>0>536870911?-1:ga<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,ha,L);if((ga|0)>0){fa=ga<<1;ja=0;do{ea=+p[ha+(ja<<3)>>3];p[B+(ja<<3)>>3]=ea;p[B+(ja+ga<<3)>>3]=ea;p[B+(ja+fa<<3)>>3]=ea;ja=ja+1|0}while((ja|0)!=(ga|0))}Tqa(ha);ga=k[s>>2]|0;ja=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;fa=ja*3|0;ia=Rqa(fa>>>0>536870911?-1:fa<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ia,ga,L);if((ja|0)>0){ga=ja<<1;fa=0;do{p[C+(fa<<3)>>3]=+p[ia+(fa<<3)>>3];ka=fa+ja|0;p[C+(ka<<3)>>3]=+p[ia+(ka<<3)>>3];ka=fa+ga|0;p[C+(ka<<3)>>3]=+p[ia+(ka<<3)>>3];fa=fa+1|0}while((fa|0)!=(ja|0))}Tqa(ia);nd[k[(k[A>>2]|0)+48>>2]&1023](A,f,L);nd[k[(k[G>>2]|0)+48>>2]&1023](G,i,L);ea=+p[f>>3]-+p[i>>3];nd[k[(k[D>>2]|0)+48>>2]&1023](D,g,L);nd[k[(k[H>>2]|0)+48>>2]&1023](H,j,L);da=+p[g>>3]-+p[j>>3];nd[k[(k[F>>2]|0)+48>>2]&1023](F,h,L);nd[k[(k[I>>2]|0)+48>>2]&1023](I,l,L);la=+p[h>>3]-+p[l>>3];na=+p[q>>3];p[t>>3]=ea*na;p[O>>3]=da*na;p[P>>3]=na*la;ZX(B,3,w,1,t,3,3,0,C,3,w,0,k[Q>>2]|0,1)|0;if(+p[e>>3]!=0.0){p[q>>3]=+p[N>>3]*+p[d>>3];nd[k[(k[b>>2]|0)+336>>2]&1023](b,y,L);ZX(y,w,1,0,q,1,1,0,y,1,w,0,k[Q>>2]|0,1)|0;p[q>>3]=+p[q>>3]*+p[e>>3]}switch(k[c>>2]|0){case 1:{rd[k[(k[b>>2]|0)+108>>2]&511](b,m,n,o);na=ea*ea;oa=da*da;pa=la*la;qa=+aa(+(na+oa+pa))+1.0e-14;ra=ea*+p[m>>3]/qa;sa=da*+p[n>>3]/qa;ta=la*+p[o>>3]/qa;ua=+aa(+(ra*ra+sa*sa+ta*ta))/(qa*2.0);qa=ua*+$(+(ea*da));ta=ua*+$(+(ea*la));ea=ua*+$(+(da*la));la=+p[q>>3];p[u>>3]=la*(na*ua);na=la*qa;p[R>>3]=na;qa=la*ta;p[S>>3]=qa;p[T>>3]=na;p[U>>3]=la*(oa*ua);oa=la*ea;p[V>>3]=oa;p[W>>3]=qa;p[X>>3]=oa;p[Y>>3]=la*(pa*ua);ja=k[s>>2]|0;fa=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;ga=fa*3|0;ha=Rqa(ga>>>0>536870911?-1:ga<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ha,ja,L);if((fa|0)>0){ja=fa<<1;ga=0;do{p[C+(ga<<3)>>3]=+p[ha+(ga<<3)>>3];ka=ga+fa|0;p[C+(ka<<3)>>3]=+p[ha+(ka<<3)>>3];ka=ga+ja|0;p[C+(ka<<3)>>3]=+p[ha+(ka<<3)>>3];ga=ga+1|0}while((ga|0)!=(fa|0))}Tqa(ha);ZX(C,3,w,1,u,3,3,0,C,3,w,0,k[Q>>2]|0,1)|0;break}case 2:{rd[k[(k[b>>2]|0)+340>>2]&511](b,z,k[s>>2]|0,L);ua=+Pc[k[(k[b>>2]|0)+440>>2]&7](b,+p[f>>3]-+p[i>>3],+p[g>>3]-+p[j>>3],+p[h>>3]-+p[l>>3],J,Z);if(_){fa=k[Q>>2]|0;ga=0;do{ja=z+(ga<<3)|0;ia=z+(ga+w<<3)|0;ka=z+(ga+ba<<3)|0;va=ma(ga,w)|0;wa=0;do{pa=+p[f>>3]-+p[i>>3];la=+p[g>>3]-+p[j>>3];oa=+p[h>>3]-+p[l>>3];xa=fa+(wa+va<<3)|0;p[xa>>3]=+p[xa>>3]+ua*+p[q>>3]*(pa*+p[ja>>3]+la*+p[ia>>3]+oa*+p[ka>>3])*(pa*+p[z+(wa<<3)>>3]+la*+p[z+(wa+w<<3)>>3]+oa*+p[z+(wa+ba<<3)>>3]);wa=wa+1|0}while((wa|0)!=(w|0));ga=ga+1|0}while((ga|0)!=(w|0))}if(+p[e>>3]!=0.0?(p[q>>3]=+p[N>>3]*+p[d>>3],_):0){ga=k[Q>>2]|0;fa=0;do{ha=z+(fa<<3)|0;wa=z+(fa+w<<3)|0;ka=z+(fa+ba<<3)|0;ia=ma(fa,w)|0;ja=0;do{va=ga+(ja+ia<<3)|0;p[va>>3]=+p[va>>3]+ua*+p[q>>3]*+p[y+(ja<<3)>>3]*((+p[f>>3]-+p[i>>3])*+p[ha>>3]+(+p[g>>3]-+p[j>>3])*+p[wa>>3]+(+p[h>>3]-+p[l>>3])*+p[ka>>3]);ja=ja+1|0}while((ja|0)!=(w|0));fa=fa+1|0}while((fa|0)!=(w|0))}break}default:{}}ca=ca+1|0;if((ca|0)>=(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0))break a}}while(0);w=k[s>>2]|0;if(w)Tqa(w);k[s>>2]=0;Tqa(y);Tqa(z);Tqa(B);Tqa(C);Ec[k[(k[L>>2]|0)+4>>2]&1023](L);v=x;r=a;return v|0}function $ba(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){g=0;r=a;return g|0}if(!(_p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=gq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,f);pp(b,c,358);+Dp(b,65);l=+Dp(b,266);m=+Dp(b,265);n=+Dp(b,210);o=+Dp(b,213);q=+Dp(b,269);s=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;t=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((t|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){u=s+8|0;v=m*n;w=i+12|0;x=t;do{Fc[k[(k[s>>2]|0)+24>>2]&1023](s,x);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,s);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,s);n=q*(o*(l*(+p[u>>3]*+p[d>>3])))/v;p[e>>3]=n;m=+p[c>>3];if(m!=0.0)p[e>>3]=m*n;ZX(j,h,1,0,e,1,1,0,j,1,h,0,k[w>>2]|0,1)|0;x=x+1|0}while((x|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))}Ec[k[(k[s>>2]|0)+4>>2]&1023](s);Tqa(j);j=k[f>>2]|0;if(j)Tqa(j);g=i;r=a;return g|0}function aca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!($p(b)|0)){c=0;return c|0}a=bca(0,b)|0;d=cca(0,b)|0;e=dca(0,b)|0;b=Qqa(24)|0;B=0;ib(300,b|0,a|0,d|0,e|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(b);Qb(f|0)}if(a){SN(a);Sqa(a)}if(d){SN(d);Sqa(d)}if(!e){c=b;return c|0}SN(e);Sqa(e);c=b;return c|0}function bca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0.0,aa=0.0,ba=0.0,ca=0,da=0.0,ea=0.0;a=r;r=r+128|0;c=a+124|0;d=a+112|0;e=a+104|0;f=a+96|0;g=a+88|0;h=a+80|0;i=a+56|0;j=a+48|0;l=a+24|0;m=a+16|0;n=a+8|0;o=a;q=a+120|0;if(!($p(b)|0)){s=0;r=a;return s|0}k[q>>2]=0;t=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;u=iq(b,534)|0;v=Rqa(t>>>0>536870911?-1:t<<3)|0;w=t*3|0;x=Rqa(w>>>0>536870911?-1:w<<3)|0;Uo(b,q);y=+Dp(b,265);z=+Dp(b,210);A=+Dp(b,270);B=+Dp(b,271);C=+Dp(b,209);D=+Dp(b,211);pp(b,f,358);cp(b,c,348);w=Wo(b,674)|0;E=Wo(b,677)|0;F=Wo(b,679)|0;G=Wo(b,688)|0;H=Wo(b,653)|0;if(+p[f>>3]!=0.0)I=Wo(b,687)|0;else I=0;if((k[c>>2]|0)==2){J=+id[k[(k[b>>2]|0)+292>>2]&63](b,k[q>>2]|0);K=J;L=+Tba(b,688)}else{K=0.0;L=0.0}M=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;N=Hc[k[(k[M>>2]|0)+8>>2]&511](M)|0;if((N|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0)){O=M+8|0;P=(t|0)>0;Q=u+4|0;J=L/y;R=t<<1;L=(B-A)/D;D=z*C;S=(t|0)<1;T=i+8|0;U=l+8|0;V=i+16|0;W=l+16|0;X=N;z=0.0;while(1){Fc[k[(k[M>>2]|0)+24>>2]&1023](M,X);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[q>>2]|0,M);nd[k[(k[b>>2]|0)+336>>2]&1023](b,v,M);ad[k[(k[b>>2]|0)+516>>2]&63](b,e,k[q>>2]|0,M,w,E,F);A=+p[e>>3]/y*+p[d>>3]*+p[O>>3];B=+p[f>>3];Y=B!=0.0?A*B:A;if(P){N=k[Q>>2]|0;Z=0;do{_=N+(Z<<3)|0;p[_>>3]=Y*+p[v+(Z<<3)>>3]+ +p[_>>3];Z=Z+1|0}while((Z|0)!=(t|0))}nd[k[(k[G>>2]|0)+48>>2]&1023](G,h,M);nd[k[(k[H>>2]|0)+48>>2]&1023](H,j,M);A=+p[j>>3];B=+Dp(b,210);$=+Dp(b,66);aa=+Dp(b,212);ba=B*(aa-A*+Dp(b,209)-$);if(+p[h>>3]>=ba){rd[k[(k[G>>2]|0)+60>>2]&511](G,i,k[q>>2]|0,M);rd[k[(k[H>>2]|0)+60>>2]&511](H,l,k[q>>2]|0,M);ba=+p[l>>3];$=+p[U>>3];A=+p[W>>3];aa=-(C*(L*(+p[i>>3]*ba+0.0+ +p[T>>3]*$+ +p[V>>3]*A+D*(ba*ba+0.0+$*$+A*A))))/y;A=+p[f>>3];$=A!=0.0?aa*A:aa;if(P){Z=k[Q>>2]|0;N=0;do{_=Z+(N<<3)|0;p[_>>3]=$*+p[v+(N<<3)>>3]+ +p[_>>3];N=N+1|0}while((N|0)!=(t|0));ca=17}else da=A}else ca=17;if((ca|0)==17){ca=0;da=+p[f>>3]}if(da!=0.0){nd[k[(k[I>>2]|0)+48>>2]&1023](I,g,M);$=+p[g>>3]*+p[d>>3]*+p[O>>3];if(P){N=k[Q>>2]|0;Z=0;do{_=N+(Z<<3)|0;p[_>>3]=$*+p[v+(Z<<3)>>3]+ +p[_>>3];Z=Z+1|0}while((Z|0)!=(t|0));ea=$}else ea=$}else ea=z;if((k[c>>2]|0)==2?(rd[k[(k[b>>2]|0)+340>>2]&511](b,x,k[q>>2]|0,M),nd[k[(k[w>>2]|0)+48>>2]&1023](w,m,M),nd[k[(k[E>>2]|0)+48>>2]&1023](E,n,M),nd[k[(k[F>>2]|0)+48>>2]&1023](F,o,M),A=+Pc[k[(k[b>>2]|0)+440>>2]&7](b,+p[m>>3],+p[n>>3],+p[o>>3],K,J),P):0){aa=Y*A;Z=k[Q>>2]|0;N=0;do{_=Z+(N<<3)|0;p[_>>3]=+p[_>>3]+aa*(+p[m>>3]*+p[x+(N<<3)>>3]+ +p[n>>3]*+p[x+(N+t<<3)>>3]+ +p[o>>3]*+p[x+(N+R<<3)>>3]);N=N+1|0}while((N|0)!=(t|0));if(!(+p[f>>3]==0.0|S)){aa=ea*A;N=k[Q>>2]|0;Z=0;do{_=N+(Z<<3)|0;p[_>>3]=+p[_>>3]+aa*(+p[m>>3]*+p[x+(Z<<3)>>3]+ +p[n>>3]*+p[x+(Z+t<<3)>>3]+ +p[o>>3]*+p[x+(Z+R<<3)>>3]);Z=Z+1|0}while((Z|0)!=(t|0))}}X=X+1|0;if((X|0)>=(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0))break;else z=ea}}Tqa(v);Tqa(x);x=k[q>>2]|0;if(x)Tqa(x);k[q>>2]=0;Ec[k[(k[M>>2]|0)+4>>2]&1023](M);s=u;r=a;return s|0}function cca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;a=r;r=r+288|0;c=a+260|0;d=a+273|0;e=a+272|0;f=a+96|0;g=a+88|0;h=a+80|0;j=a+72|0;l=a+64|0;m=a+56|0;n=a+48|0;o=a+40|0;q=a+32|0;s=a+24|0;t=a+16|0;u=a+8|0;v=a;w=a+256|0;x=a+120|0;y=a+104|0;if(!($p(b)|0)){z=0;r=a;return z|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){z=0;r=a;return z|0}if(_p(b)|0){z=0;r=a;return z|0}k[w>>2]=0;A=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;C=iq(b,534)|0;D=Rqa(A>>>0>536870911?-1:A<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,w);pp(b,f,358);op(b,e,341);zp(b,d,645);E=+p[f>>3]==0.0&(i[d>>0]|0)==0?688:687;d=Wo(b,674)|0;F=Wo(b,677)|0;G=Wo(b,679)|0;H=Wo(b,E)|0;E=Wo(b,653)|0;I=Wo(b,699)|0;J=Wo(b,39)|0;K=Wo(b,38)|0;L=+Dp(b,265);M=Qqa(16)|0;B=0;eb(524,M|0,b|0,3);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Sqa(M);P=O;R=N;Qb(R|0)}N=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;O=ed[k[(k[b>>2]|0)+332>>2]&511](b,4)|0;S=Hc[k[(k[N>>2]|0)+8>>2]&511](N)|0;a:do if((S|0)<(Hc[k[(k[N>>2]|0)+12>>2]&511](N)|0)){T=N+8|0;U=(A|0)>0;V=C+4|0;W=x+56|0;X=x+4|0;Y=x+56|0;Z=x+128|0;_=x+132|0;$=x+36|0;aa=x+52|0;ba=S;b:while(1){Fc[k[(k[N>>2]|0)+24>>2]&1023](N,ba);Fc[k[(k[O>>2]|0)+24>>2]&1023](O,ba);rd[k[(k[b>>2]|0)+264>>2]&511](b,g,k[w>>2]|0,N);nd[k[(k[b>>2]|0)+336>>2]&1023](b,D,N);c:do if(!(i[e>>0]|0))ca=12;else{nd[k[(k[H>>2]|0)+48>>2]&1023](H,h,N);nd[k[(k[H>>2]|0)+48>>2]&1023](H,j,O);nd[k[(k[E>>2]|0)+48>>2]&1023](E,l,N);nd[k[(k[E>>2]|0)+48>>2]&1023](E,m,O);nd[k[(k[I>>2]|0)+48>>2]&1023](I,n,N);nd[k[(k[J>>2]|0)+48>>2]&1023](J,o,N);switch(Uba(b,+p[h>>3],+p[j>>3],+p[l>>3],+p[m>>3],+p[n>>3],+p[o>>3])|0){case 3:case 2:case 1:case 0:{ca=12;break c;break}case 4:{if(!U)break c;da=k[V>>2]|0;ea=0;while(1){fa=da+(ea<<3)|0;p[fa>>3]=+p[fa>>3]+0.0;ea=ea+1|0;if((ea|0)==(A|0))break c}break}default:{}}k[x>>2]=27524;k[W>>2]=27544;B=0;wa(508,Y|0,X|0);ea=B;B=0;if(ea&1){ca=20;break b}k[Z>>2]=0;k[_>>2]=-1;k[x>>2]=27468;k[W>>2]=27488;B=0;va(448,X|0);ea=B;B=0;if(ea&1){ca=21;break b}k[X>>2]=27560;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[aa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,X|0,c|0);ea=B;B=0;if(ea&1){ca=19;break b}Yua(c);B=0;Ia(40,x|0,130056,35)|0;ea=B;B=0;if(ea&1){ca=29;break b}B=0;wa(510,y|0,X|0);ea=B;B=0;if(ea&1){ca=29;break b}B=0;ya(425,y|0)|0;ea=B;B=0;if(ea&1){ca=30;break b}Yua(y);k[x>>2]=27468;k[W>>2]=27488;k[X>>2]=27560;Yua($);Ava(X);vva(W)}while(0);if((ca|0)==12?(ca=0,nd[k[(k[K>>2]|0)+48>>2]&1023](K,v,N),fla(M,u,N),nd[k[(k[d>>2]|0)+48>>2]&1023](d,q,N),nd[k[(k[F>>2]|0)+48>>2]&1023](F,s,N),nd[k[(k[G>>2]|0)+48>>2]&1023](G,t,N),ga=+p[q>>3],ha=+p[s>>3],ia=+p[t>>3],ja=+p[T>>3]*+p[g>>3]*((+p[v>>3]+ +p[u>>3]*(ga*ga+ha*ha+ia*ia))/L),ia=+p[f>>3],ha=ia!=0.0?ia*ja:ja,U):0){ea=k[V>>2]|0;da=0;do{fa=ea+(da<<3)|0;p[fa>>3]=ha*+p[D+(da<<3)>>3]+ +p[fa>>3];da=da+1|0}while((da|0)!=(A|0))}ba=ba+1|0;if((ba|0)>=(Hc[k[(k[N>>2]|0)+12>>2]&511](N)|0))break a}if((ca|0)==19){ba=Rb()|0;V=Q;Yua(c);Yua($);Ava(X);ka=V;la=ba;ca=22}else if((ca|0)==20){ba=Rb()|0;ma=Q;na=ba;vva(W);Qb(na|0)}else if((ca|0)==21){ba=Rb()|0;ka=Q;la=ba;ca=22}else if((ca|0)==29){ba=Rb()|0;oa=Q;pa=ba;ca=31}else if((ca|0)==30){ba=Rb()|0;V=Q;Yua(y);oa=V;pa=ba;ca=31}if((ca|0)==22){ma=ka;na=la;vva(W);Qb(na|0)}else if((ca|0)==31){k[x>>2]=27468;k[W>>2]=27488;k[X>>2]=27560;Yua($);Ava(X);vva(W);P=oa;R=pa;Qb(R|0)}}while(0);Ec[k[(k[N>>2]|0)+4>>2]&1023](N);if(O)Ec[k[(k[O>>2]|0)+4>>2]&1023](O);bla(M);Sqa(M);Tqa(D);D=k[w>>2]|0;if(D)Tqa(D);z=C;r=a;return z|0}function dca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){g=0;r=a;return g|0}if(!(_p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,f);pp(b,c,358);l=Wo(b,653)|0;+Dp(b,65);m=+Dp(b,266);n=+Dp(b,265);o=+Dp(b,210);q=+Dp(b,213);s=+Dp(b,269);t=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;u=Hc[k[(k[t>>2]|0)+8>>2]&511](t)|0;a:do if((u|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0)){v=t+8|0;w=n*o;x=i+4|0;if((h|0)>0)y=u;else{z=u;while(1){Fc[k[(k[t>>2]|0)+24>>2]&1023](t,z);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,t);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,t);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,t);+kq(b,+p[e>>3]);z=z+1|0;if((z|0)>=(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))break a}}do{Fc[k[(k[t>>2]|0)+24>>2]&1023](t,y);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,t);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,t);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,t);A=+kq(b,+p[e>>3]);B=A*(s*(q*(m*(+p[v>>3]*+p[d>>3]))))/w;A=+p[c>>3];C=A!=0.0?A*B:B;z=k[x>>2]|0;D=0;do{E=z+(D<<3)|0;p[E>>3]=C*+p[j+(D<<3)>>3]+ +p[E>>3];D=D+1|0}while((D|0)!=(h|0));y=y+1|0}while((y|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))}while(0);Ec[k[(k[t>>2]|0)+4>>2]&1023](t);Tqa(j);j=k[f>>2]|0;if(j)Tqa(j);g=i;r=a;return g|0}function eca(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+4|0;d=b;if(!($p(a)|0)){r=b;return}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}k[d>>2]=0;e=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;nd[k[(k[a>>2]|0)+512>>2]&1023](a,d,c);f=Rqa(e>>>0>536870911?-1:e<<3)|0;e=k[c>>2]|0;g=e>>>0>536870911?-1:e<<3;e=Rqa(g)|0;h=Rqa(g)|0;xp(a,f,699);g=k[c>>2]|0;if((g|0)>0){WEa(e|0,0,((g|0)>1?g:1)<<3|0)|0;i=g;j=a}else{i=g;j=a}while(1){if((i|0)>0)WEa(h|0,0,((i|0)>1?i:1)<<3|0)|0;fca(j,h);g=k[c>>2]|0;if((g|0)>0){l=0;do{m=e+(l<<3)|0;p[m>>3]=+p[h+(l<<3)>>3]+ +p[m>>3];l=l+1|0}while((l|0)<(g|0))}if(Hc[k[(k[j>>2]|0)+252>>2]&511](j)|0)break;g=Hc[k[(k[j>>2]|0)+180>>2]&511](j)|0;i=k[c>>2]|0;j=g}j=k[c>>2]|0;if((j|0)>0){c=0;do{i=f+(c<<3)|0;p[i>>3]=+p[e+(c<<3)>>3]+ +p[i>>3];c=c+1|0}while((c|0)<(j|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,699,f,738);a=k[d>>2]|0;if(a)Tqa(a);k[d>>2]=0;Tqa(e);Tqa(h);Tqa(f);r=b;return}function fca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0;c=r;r=r+32|0;d=c+16|0;e=c;f=c+12|0;g=c+8|0;if(!($p(a)|0)){r=c;return}h=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;k[f>>2]=0;i=h>>>0>536870911?-1:h<<3;j=Rqa(i)|0;l=Rqa(i)|0;m=Rqa(i)|0;n=Rqa(i)|0;o=Rqa(i)|0;k[g>>2]=0;+Dp(a,265);+Dp(a,266);Uo(a,f);xp(a,j,687);xp(a,l,653);pp(a,e,358);i=(h|0)>0;if(i){q=0;do{s=n+(q<<3)|0;np(a,m+(q<<3)|0,s,+p[j+(q<<3)>>3],+p[l+(q<<3)>>3]);t=+aoa(+p[s>>3],+p[e>>3]);p[o+(q<<3)>>3]=t;q=q+1|0}while((q|0)!=(h|0));if(i){i=0;do{t=+p[e>>3];u=+p[o+(i<<3)>>3];if(t!=0.0){q=n+(i<<3)|0;v=+p[q>>3]-t*u;p[q>>3]=v;w=v}else{q=n+(i<<3)|0;v=+p[q>>3]-u;p[q>>3]=v;w=v}tq(a,j+(i<<3)|0,+p[m+(i<<3)>>3],w,+p[l+(i<<3)>>3]);i=i+1|0}while((i|0)!=(h|0))}}rd[k[(k[a>>2]|0)+48>>2]&511](a,687,j,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,698,n,738);nd[k[(k[a>>2]|0)+512>>2]&1023](a,g,d);a=k[d>>2]|0;d=k[g>>2]|0;if((a|0)<=0){if(d)x=13}else{h=k[f>>2]|0;i=0;do{e=i<<1;q=k[d+(e<<2)>>2]|0;s=k[d+((e|1)<<2)>>2]|0;w=+$(+(+p[h+((s*3|0)+2<<3)>>3]-+p[h+((q*3|0)+2<<3)>>3]));p[b+(i<<3)>>3]=w*((+p[o+(q<<3)>>3]+ +p[o+(s<<3)>>3])*.5);i=i+1|0}while((i|0)<(a|0));x=13}if((x|0)==13)Tqa(d);k[g>>2]=0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;Tqa(j);Tqa(l);Tqa(m);Tqa(n);Tqa(o);r=c;return}function gca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;c=r;r=r+240|0;d=c+216|0;e=c+212|0;f=c+204|0;g=c+200|0;h=c+40|0;i=c+32|0;j=c+24|0;l=c+16|0;m=c+8|0;n=c;o=c+64|0;q=c+48|0;if(!($p(b)|0)){r=c;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=c;return}if(_p(b)|0){r=c;return}k[f>>2]=0;k[g>>2]=0;s=Wo(b,688)|0;t=Wo(b,653)|0;u=Wo(b,699)|0;v=Wo(b,39)|0;VB(b,e,f,Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0);gC(b,c+208|0,g,Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0);w=Qqa(72)|0;B=0;va(493,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Sqa(w);z=x;A=y;Qb(z|0)}y=Qqa(72)|0;B=0;va(493,y|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;Sqa(y);z=x;A=C;Qb(z|0)}a:do if((k[e>>2]|0)>0){C=o+56|0;x=o+4|0;D=o+56|0;E=o+128|0;F=o+132|0;G=o+36|0;H=o+52|0;I=b+20|0;J=a+4|0;K=0;b:while(1){L=k[(k[w>>2]|0)+32>>2]|0;M=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[L&1023](w,M,k[(k[f>>2]|0)+(K<<2)>>2]|0);M=k[(k[y>>2]|0)+32>>2]|0;L=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[M&1023](y,L,k[(k[g>>2]|0)+(K<<2)>>2]|0);nd[k[(k[s>>2]|0)+48>>2]&1023](s,h,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,i,y);nd[k[(k[t>>2]|0)+48>>2]&1023](t,j,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,l,y);nd[k[(k[u>>2]|0)+48>>2]&1023](u,m,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,n,w);switch(Uba(b,+p[h>>3],+p[i>>3],+p[j>>3],+p[l>>3],+p[m>>3],+p[n>>3])|0){case 0:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,0.0,0)}break}case 1:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}case 2:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}case 3:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}case 4:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}default:{k[o>>2]=27524;k[C>>2]=27544;B=0;wa(508,D|0,x|0);L=B;B=0;if(L&1){N=30;break b}k[E>>2]=0;k[F>>2]=-1;k[o>>2]=27468;k[C>>2]=27488;B=0;va(448,x|0);L=B;B=0;if(L&1){N=31;break b}k[x>>2]=27560;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[H>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,x|0,d|0);L=B;B=0;if(L&1){N=29;break b}Yua(d);B=0;Ia(40,o|0,130056,35)|0;L=B;B=0;if(L&1){N=39;break b}B=0;wa(510,q|0,x|0);L=B;B=0;if(L&1){N=39;break b}B=0;ya(425,q|0)|0;L=B;B=0;if(L&1){N=40;break b}Yua(q);k[o>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(G);Ava(x);vva(C)}}K=K+1|0;if((K|0)>=(k[e>>2]|0))break a}if((N|0)==29){K=Rb()|0;H=Q;Yua(d);Yua(G);Ava(x);O=H;P=K;N=32}else if((N|0)==30){K=Rb()|0;R=Q;S=K;vva(C);Qb(S|0)}else if((N|0)==31){K=Rb()|0;O=Q;P=K;N=32}else if((N|0)==39){K=Rb()|0;T=K;U=Q;N=41}else if((N|0)==40){K=Rb()|0;H=Q;Yua(q);T=K;U=H;N=41}if((N|0)==32){R=O;S=P;vva(C);Qb(S|0)}else if((N|0)==41){k[o>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(G);Ava(x);vva(C);z=T;A=U;Qb(z|0)}}while(0);z=k[f>>2]|0;if(z)Tqa(z);k[f>>2]=0;f=k[g>>2]|0;if(f)Tqa(f);k[g>>2]=0;Ec[k[(k[w>>2]|0)+4>>2]&1023](w);Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=c;return}function hca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;c=r;r=r+240|0;d=c+216|0;e=c+212|0;f=c+204|0;g=c+200|0;h=c+40|0;i=c+32|0;j=c+24|0;l=c+16|0;m=c+8|0;n=c;o=c+64|0;q=c+48|0;if(!($p(b)|0)){r=c;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=c;return}if(_p(b)|0){r=c;return}k[f>>2]=0;k[g>>2]=0;s=Wo(b,687)|0;t=Wo(b,653)|0;u=Wo(b,699)|0;v=Wo(b,39)|0;VB(b,e,f,Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0);gC(b,c+208|0,g,Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0);w=Qqa(72)|0;B=0;va(493,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Sqa(w);z=x;A=y;Qb(z|0)}y=Qqa(72)|0;B=0;va(493,y|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;Sqa(y);z=x;A=C;Qb(z|0)}a:do if((k[e>>2]|0)>0){C=o+56|0;x=o+4|0;D=o+56|0;E=o+128|0;F=o+132|0;G=o+36|0;H=o+52|0;I=b+20|0;J=a+4|0;K=0;b:while(1){L=k[(k[w>>2]|0)+32>>2]|0;M=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[L&1023](w,M,k[(k[f>>2]|0)+(K<<2)>>2]|0);M=k[(k[y>>2]|0)+32>>2]|0;L=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[M&1023](y,L,k[(k[g>>2]|0)+(K<<2)>>2]|0);nd[k[(k[s>>2]|0)+48>>2]&1023](s,h,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,i,y);nd[k[(k[t>>2]|0)+48>>2]&1023](t,j,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,l,y);nd[k[(k[u>>2]|0)+48>>2]&1023](u,m,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,n,w);switch(Uba(b,+p[h>>3],+p[i>>3],+p[j>>3],+p[l>>3],+p[m>>3],+p[n>>3])|0){case 0:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,0.0,0)}break}case 1:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}case 2:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,0.0,0)}break}case 3:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,1.0,0)}break}case 4:{L=Qn(k[(k[I>>2]|0)+(K<<2)>>2]|0)|0;if(k[a>>2]|0){M=k[k[J>>2]>>2]|0;Jc[k[(k[M>>2]|0)+20>>2]&1](M,L,0.0,0)}break}default:{k[o>>2]=27524;k[C>>2]=27544;B=0;wa(508,D|0,x|0);L=B;B=0;if(L&1){N=30;break b}k[E>>2]=0;k[F>>2]=-1;k[o>>2]=27468;k[C>>2]=27488;B=0;va(448,x|0);L=B;B=0;if(L&1){N=31;break b}k[x>>2]=27560;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[H>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,x|0,d|0);L=B;B=0;if(L&1){N=29;break b}Yua(d);B=0;Ia(40,o|0,130056,35)|0;L=B;B=0;if(L&1){N=39;break b}B=0;wa(510,q|0,x|0);L=B;B=0;if(L&1){N=39;break b}B=0;ya(425,q|0)|0;L=B;B=0;if(L&1){N=40;break b}Yua(q);k[o>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(G);Ava(x);vva(C)}}K=K+1|0;if((K|0)>=(k[e>>2]|0))break a}if((N|0)==29){K=Rb()|0;H=Q;Yua(d);Yua(G);Ava(x);O=H;P=K;N=32}else if((N|0)==30){K=Rb()|0;R=Q;S=K;vva(C);Qb(S|0)}else if((N|0)==31){K=Rb()|0;O=Q;P=K;N=32}else if((N|0)==39){K=Rb()|0;T=K;U=Q;N=41}else if((N|0)==40){K=Rb()|0;H=Q;Yua(q);T=K;U=H;N=41}if((N|0)==32){R=O;S=P;vva(C);Qb(S|0)}else if((N|0)==41){k[o>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(G);Ava(x);vva(C);z=T;A=U;Qb(z|0)}}while(0);z=k[f>>2]|0;if(z)Tqa(z);k[f>>2]=0;f=k[g>>2]|0;if(f)Tqa(f);k[g>>2]=0;Ec[k[(k[w>>2]|0)+4>>2]&1023](w);Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=c;return}function ica(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,687);return}function jca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,129902,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,1442,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function kca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0.0,Ya=0.0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0;a=r;r=r+736|0;d=a+708|0;e=a+720|0;f=a+704|0;g=a+688|0;h=a+672|0;j=a+536|0;l=a+692|0;m=a+676|0;n=a+520|0;o=a+384|0;q=a+236|0;s=a+224|0;u=a+72|0;v=a+248|0;w=a+60|0;x=a+48|0;y=a+36|0;z=a+88|0;A=a+24|0;C=a+12|0;D=a;k[g>>2]=0;k[h>>2]=0;E=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,g,534,943);F=E>>>0>536870911?-1:E<<3;G=Rqa(F)|0;H=Rqa(F)|0;I=Rqa(F)|0;J=Rqa(F)|0;K=Rqa(F)|0;L=Rqa(F)|0;F=(E|0)>0;a:do if(F){M=k[g>>2]|0;N=0;while(1){O=+p[b+(k[M+(N<<2)>>2]<<3)>>3];p[G+(N<<3)>>3]=O;P=+$(+O);p[t>>3]=P;R=k[t>>2]|0;S=k[t+4>>2]|0;if(S>>>0>2146435072|(S|0)==2146435072&R>>>0>0){T=5;break}N=N+1|0;if((R|0)==0&(S|0)==2146435072){T=29;break}if((N|0)>=(E|0))break a}if((T|0)==5){N=j+56|0;M=j+4|0;k[j>>2]=27524;k[N>>2]=27544;B=0;wa(508,j+56|0,M|0);S=B;B=0;if(S&1){S=Rb()|0;U=Q;V=S;vva(N);Qb(V|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[N>>2]=27488;B=0;va(448,M|0);S=B;B=0;do if(S&1){R=Rb()|0;W=Q;X=R}else{k[M>>2]=27560;R=j+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,M|0,d|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(d);Yua(R);Ava(M);W=Z;X=Y;break}Yua(d);B=0;Y=Ia(40,j|0,135564,28)|0;Z=B;B=0;b:do if(!(Z&1)?(B=0,Xa(239,Y|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,l|0,129902,76);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,m|0,137199,23);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(l);da=ca;ea=ba;break}B=0;wa(510,n|0,M|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;ga=ba;ha=1}else{B=0;ua(163,_|0,l|0,m|0,1469,n|0);ba=B;B=0;if(ba&1)ia=1;else{B=0;eb(503,_|0,1240,229);B=0;ia=0}ba=Rb()|0;ca=Q;Yua(n);fa=ca;ga=ba;ha=ia}Yua(m);Yua(l);if(ha){da=fa;ea=ga}else{ja=fa;ka=ga;break b}}else{ba=Rb()|0;da=Q;ea=ba}while(0);zb(_|0);ja=da;ka=ea}else T=20;while(0);if((T|0)==20){Y=Rb()|0;ja=Q;ka=Y}k[j>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(R);Ava(M);vva(N);la=ja;ma=ka;Qb(ma|0)}while(0);U=W;V=X;vva(N);Qb(V|0)}else if((T|0)==29){M=o+56|0;S=o+4|0;k[o>>2]=27524;k[M>>2]=27544;B=0;wa(508,o+56|0,S|0);Y=B;B=0;if(Y&1){Y=Rb()|0;na=Q;oa=Y;vva(M);Qb(oa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[M>>2]=27488;B=0;va(448,S|0);Y=B;B=0;do if(Y&1){Z=Rb()|0;pa=Q;qa=Z}else{k[S>>2]=27560;Z=o+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,S|0,d|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(d);Yua(Z);Ava(S);pa=ba;qa=aa;break}Yua(d);B=0;aa=Ia(40,o|0,135593,28)|0;ba=B;B=0;c:do if(!(ba&1)?(B=0,Xa(239,aa|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,q|0,129902,76);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,s|0,137199,23);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(q);xa=sa;za=ta;break}B=0;wa(510,u|0,S|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Aa=1;Ba=Q;Ca=ta}else{B=0;ua(163,ca|0,q|0,s|0,1470,u|0);ta=B;B=0;if(ta&1)Da=1;else{B=0;eb(503,ca|0,1240,229);B=0;Da=0}ta=Rb()|0;sa=Q;Yua(u);Aa=Da;Ba=sa;Ca=ta}Yua(s);Yua(q);if(Aa){xa=Ca;za=Ba}else{Ea=Ba;Fa=Ca;break c}}else{ta=Rb()|0;xa=ta;za=Q}while(0);zb(ca|0);Ea=za;Fa=xa}else T=44;while(0);if((T|0)==44){aa=Rb()|0;Ea=Q;Fa=aa}k[o>>2]=27468;k[M>>2]=27488;k[S>>2]=27560;Yua(Z);Ava(S);vva(M);la=Ea;ma=Fa;Qb(ma|0)}while(0);na=pa;oa=qa;vva(M);Qb(oa|0)}}while(0);zp(c,e,645);vp(c,H,653);d:do if(!(i[e>>0]|0)){oa=k[c>>2]|0;qa=k[oa+48>>2]|0;pa=Hc[k[oa+128>>2]&511](c)|0;rd[qa&511](c,688,G,pa)}else{e:do if(F){pa=0;while(1){qa=L+(pa<<3)|0;np(c,K+(pa<<3)|0,qa,+p[G+(pa<<3)>>3],+p[H+(pa<<3)>>3]);pa=pa+1|0;if(+p[qa>>3]<0.0)break;if((pa|0)>=(E|0))break e}pa=v+56|0;Z=v+4|0;k[v>>2]=27524;k[pa>>2]=27544;B=0;wa(508,v+56|0,Z|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Ga=Q;Ha=qa;vva(pa);Qb(Ha|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[pa>>2]=27488;B=0;va(448,Z|0);qa=B;B=0;do if(qa&1){oa=Rb()|0;Ja=Q;Ka=oa}else{k[Z>>2]=27560;oa=v+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[v+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Z|0,d|0);na=B;B=0;if(na&1){na=Rb()|0;Fa=Q;Yua(d);Yua(oa);Ava(Z);Ja=Fa;Ka=na;break}Yua(d);B=0;na=Ia(40,v|0,130115,48)|0;Fa=B;B=0;f:do if(!(Fa&1)?(B=0,Xa(239,na|0,0)|0,Ea=B,B=0,!(Ea&1)):0){Ea=Ab(20)|0;B=0;eb(502,w|0,129902,76);o=B;B=0;do if(!(o&1)){B=0;eb(502,x|0,137199,23);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(w);La=xa;Ma=za;break}B=0;wa(510,y|0,Z|0);za=B;B=0;if(za&1){za=Rb()|0;Na=1;Oa=Q;Pa=za}else{B=0;ua(163,Ea|0,w|0,x|0,1479,y|0);za=B;B=0;if(za&1)Qa=1;else{B=0;eb(503,Ea|0,1240,229);B=0;Qa=0}za=Rb()|0;xa=Q;Yua(y);Na=Qa;Oa=xa;Pa=za}Yua(x);Yua(w);if(Na){La=Pa;Ma=Oa}else{Ra=Oa;Sa=Pa;break f}}else{za=Rb()|0;La=za;Ma=Q}while(0);zb(Ea|0);Ra=Ma;Sa=La}else T=71;while(0);if((T|0)==71){na=Rb()|0;Ra=Q;Sa=na}k[v>>2]=27468;k[pa>>2]=27488;k[Z>>2]=27560;Yua(oa);Ava(Z);vva(pa);la=Ra;ma=Sa;Qb(ma|0)}while(0);Ga=Ja;Ha=Ka;vva(pa);Qb(Ha|0)}while(0);M=k[c>>2]|0;Z=k[M+48>>2]|0;qa=Hc[k[M+128>>2]&511](c)|0;rd[Z&511](c,687,G,qa);qa=k[c>>2]|0;Z=k[qa+48>>2]|0;M=Hc[k[qa+128>>2]&511](c)|0;rd[Z&511](c,698,L,M);M=k[c>>2]|0;Z=k[M+48>>2]|0;qa=Hc[k[M+128>>2]&511](c)|0;rd[Z&511](c,666,K,qa);cp(c,f,216);vp(c,I,339);switch(k[f>>2]|0){case 921:{break d;break}case 984:{if(F){qa=0;do{P=+Xna(+p[K+(qa<<3)>>3]);p[J+(qa<<3)>>3]=P;qa=qa+1|0}while((qa|0)!=(E|0))}qa=k[c>>2]|0;Z=k[qa+48>>2]|0;M=Hc[k[qa+128>>2]&511](c)|0;rd[Z&511](c,214,J,M);break d;break}case 986:{if(F){M=0;do{P=+p[K+(M<<3)>>3];O=+p[L+(M<<3)>>3];Ta=+Yna(P,O,+Dp(c,217));p[J+(M<<3)>>3]=Ta;M=M+1|0}while((M|0)!=(E|0))}M=k[c>>2]|0;Z=k[M+48>>2]|0;qa=Hc[k[M+128>>2]&511](c)|0;rd[Z&511](c,214,J,qa);break d;break}case 987:{if(F){qa=0;do{Ta=+Zna(+p[K+(qa<<3)>>3]);p[J+(qa<<3)>>3]=Ta;qa=qa+1|0}while((qa|0)!=(E|0))}qa=k[c>>2]|0;Z=k[qa+48>>2]|0;M=Hc[k[qa+128>>2]&511](c)|0;rd[Z&511](c,214,J,M);break d;break}case 988:{Uo(c,h);if(F){M=0;do{Ta=+p[K+(M<<3)>>3];O=+p[I+(M<<3)>>3]-+p[(k[h>>2]|0)+((M*3|0)+2<<3)>>3];P=+_na(Ta,O,+Dp(c,217));p[J+(M<<3)>>3]=P;M=M+1|0}while((M|0)!=(E|0))}M=k[c>>2]|0;Z=k[M+48>>2]|0;qa=Hc[k[M+128>>2]&511](c)|0;rd[Z&511](c,214,J,qa);break d;break}case 989:{if(F){qa=0;do{P=+p[G+(qa<<3)>>3];O=+p[H+(qa<<3)>>3];Ta=+Dp(c,217);Ua=+Dp(c,209);Va=+Dp(c,66);Wa=+Dp(c,210);Ya=+$na(P,O,Ta,Ua,Va,Wa,+Dp(c,211));p[J+(qa<<3)>>3]=Ya;qa=qa+1|0}while((qa|0)!=(E|0))}qa=k[c>>2]|0;Z=k[qa+48>>2]|0;M=Hc[k[qa+128>>2]&511](c)|0;rd[Z&511](c,214,J,M);break d;break}default:{M=z+56|0;Z=z+4|0;k[z>>2]=27524;k[M>>2]=27544;B=0;wa(508,z+56|0,Z|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Za=Q;_a=qa;vva(M);Qb(_a|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[M>>2]=27488;B=0;va(448,Z|0);qa=B;B=0;do if(qa&1){na=Rb()|0;$a=Q;ab=na}else{k[Z>>2]=27560;na=z+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[z+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Z|0,d|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;ca=Q;Yua(d);Yua(na);Ava(Z);$a=ca;ab=Fa;break}Yua(d);B=0;Fa=Ia(40,z|0,135622,13)|0;ca=B;B=0;g:do if((((!(ca&1)?(B=0,o=ya(427,k[f>>2]|0)|0,za=B,B=0,!(za&1)):0)?(za=Lta(o)|0,B=0,xa=Ia(40,Fa|0,o|0,za|0)|0,za=B,B=0,!(za&1)):0)?(B=0,za=Ia(40,xa|0,146481,18)|0,xa=B,B=0,!(xa&1)):0)?(B=0,Xa(239,za|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,A|0,129902,76);xa=B;B=0;do if(!(xa&1)){B=0;eb(502,C|0,137199,23);o=B;B=0;if(o&1){o=Rb()|0;Ca=Q;Yua(A);bb=o;cb=Ca;break}B=0;wa(510,D|0,Z|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;db=1;fb=Q;gb=Ca}else{B=0;ua(163,za|0,A|0,C|0,1515,D|0);Ca=B;B=0;if(Ca&1)hb=1;else{B=0;eb(503,za|0,1240,229);B=0;hb=0}Ca=Rb()|0;o=Q;Yua(D);db=hb;fb=o;gb=Ca}Yua(C);Yua(A);if(db){bb=gb;cb=fb}else{ib=fb;jb=gb;break g}}else{Ca=Rb()|0;bb=Ca;cb=Q}while(0);zb(za|0);ib=cb;jb=bb}else T=113;while(0);if((T|0)==113){Fa=Rb()|0;ib=Q;jb=Fa}k[z>>2]=27468;k[M>>2]=27488;k[Z>>2]=27560;Yua(na);Ava(Z);vva(M);la=ib;ma=jb;Qb(ma|0)}while(0);Za=$a;_a=ab;vva(M);Qb(_a|0)}}}while(0);Tqa(G);Tqa(H);Tqa(I);Tqa(J);Tqa(K);Tqa(L);L=k[h>>2]|0;if(L)Tqa(L);k[h>>2]=0;h=k[g>>2]|0;if(!h){r=a;return}Tqa(h);r=a;return}function lca(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0;b=r;r=r+16|0;c=b+8|0;d=b;e=Qqa(8)|0;B=0;f=Xa(244,k[a+24>>2]|0,501)|0;g=B;B=0;a:do if(!(g&1)?(B=0,va(485,e|0),h=B,B=0,!(h&1)):0){do if(k[e>>2]|0){B=0;h=ya(423,4)|0;j=B;B=0;if(j&1)break a;B=0;eb(505,h|0,f|0,0);j=B;B=0;if(!(j&1)){k[e+4>>2]=h;break}j=Rb()|0;l=Q;Sqa(h);m=l;n=j;Sqa(e);Qb(n|0)}while(0);j=a+20|0;if((th(k[j>>2]|0)|0)>0){l=0;do{h=qh(k[j>>2]|0,l)|0;op(h,c,341);do if(i[c>>0]|0){pp(h,d,358);if(+p[d>>3]==0.0){gca(e,h);break}else{hca(e,h);break}}while(0);l=l+1|0}while((l|0)<(th(k[j>>2]|0)|0))}if((k[e>>2]|0)!=0?(l=e+4|0,h=k[k[l>>2]>>2]|0,Ec[k[(k[h>>2]|0)+12>>2]&1023](h),(k[e>>2]|0)!=0):0){h=k[k[l>>2]>>2]|0;o=Hc[k[(k[h>>2]|0)+52>>2]&511](h)|0;if((k[e>>2]|0)!=0?(h=k[l>>2]|0,(h|0)!=0):0){l=k[h>>2]|0;if(l)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);Sqa(h);q=o}else q=o}else q=0;Sqa(e);if((th(k[j>>2]|0)|0)>0){o=0;do{Qba(q,qh(k[j>>2]|0,o)|0);o=o+1|0}while((o|0)<(th(k[j>>2]|0)|0))}Eh(a);if(!q){r=b;return}Tqa(q);r=b;return}while(0);b=Rb()|0;m=Q;n=b;Sqa(e);Qb(n|0)}function mca(a,b){a=a|0;b=b|0;RZ(b);return}function nca(a){a=a|0;Sqa(a);return}function oca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,131762);if((k[d>>2]|0)!=119){r=a;return}qoa(b,c,130190,504,738,0);r=a;return}function pca(a,b,c){a=a|0;b=b|0;c=c|0;return}function qca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=r;r=r+32|0;d=a+8|0;e=a;f=a+16|0;Fka(c,f,131762);if((k[f>>2]|0)!=119){r=a;return}if((k[c+40>>2]|0)==302){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,504,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function rca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function sca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=r;r=r+16|0;f=a;Fka(c,f,131762);if((k[f>>2]|0)!=119){r=a;return}f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);if((k[c+40>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,137867,206);Zka(c,b,134962,928);Zka(c,b,134027,39);Zka(c,b,130224,699);Rq(b,699,768);r=a;return}function tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;e=r;r=r+16|0;d=e;Fka(c,d,131762);if((k[d>>2]|0)!=119){r=e;return}d=Qqa(12)|0;B=0;eb(518,d|0,118,119);a=B;B=0;if(a&1){a=Rb()|0;Sqa(d);Qb(a|0)}YN(b,d);YN(b,Ika(c,130254,121)|0);r=e;return}function uca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,130281,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,88,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function vca(a,b){a=a|0;b=b|0;return 0}function wca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;a=r;r=r+48|0;c=a+32|0;d=a+24|0;e=a+16|0;f=a+8|0;g=a;h=+Dp(b,265);i=+Dp(b,266);j=+Dp(b,65);l=+Dp(b,268);m=Wo(b,664)|0;n=Wo(b,665)|0;o=Wo(b,642)|0;q=Wo(b,643)|0;s=Wo(b,699)|0;t=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;u=t>>>0>536870911?-1:t<<3;v=Rqa(u)|0;w=Rqa(u)|0;u=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((t|0)<=0){if(!u){x=k[b>>2]|0;y=x+48|0;z=k[y>>2]|0;rd[z&511](b,702,v,738);A=k[b>>2]|0;B=A+48|0;C=k[B>>2]|0;rd[C&511](b,703,w,738);Tqa(v);Tqa(w);r=a;return}}else{D=l*12.0;l=h*j;E=(i-h)*j;F=0;do{Fc[k[(k[u>>2]|0)+28>>2]&1023](u,F);nd[k[(k[m>>2]|0)+48>>2]&1023](m,c,u);nd[k[(k[n>>2]|0)+48>>2]&1023](n,d,u);nd[k[(k[o>>2]|0)+48>>2]&1023](o,e,u);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,u);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,u);j=+p[g>>3];h=-(j*j)/D;p[v+(F<<3)>>3]=h*(l*+p[c>>3]+E*+p[e>>3]);p[w+(F<<3)>>3]=h*(l*+p[d>>3]+E*+p[f>>3]);F=F+1|0}while((F|0)!=(t|0))}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);x=k[b>>2]|0;y=x+48|0;z=k[y>>2]|0;rd[z&511](b,702,v,738);A=k[b>>2]|0;B=A+48|0;C=k[B>>2]|0;rd[C&511](b,703,w,738);Tqa(v);Tqa(w);r=a;return}function xca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,130281,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,139,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function yca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0;a=r;r=r+128|0;c=a+104|0;d=a+96|0;e=a+88|0;f=a+80|0;g=a+72|0;h=a+64|0;i=a+48|0;j=a+32|0;l=a+112|0;m=a;k[l>>2]=0;n=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;o=gq(b,534)|0;q=Rqa(n>>>0>536870911?-1:n<<3)|0;s=n<<1;t=s>>>0>536870911?-1:s<<3;s=Rqa(t)|0;u=Rqa(t)|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;k[m+24>>2]=0;k[m+28>>2]=0;wca(0,b);Uo(b,l);pp(b,f,358);pp(b,c,121);t=Wo(b,702)|0;v=Wo(b,703)|0;w=+Zc[k[(k[b>>2]|0)+72>>2]&255](b);x=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;y=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((y|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){z=x+8|0;A=o+12|0;B=j+8|0;C=m+24|0;D=m+16|0;E=m+8|0;F=y;do{Fc[k[(k[x>>2]|0)+24>>2]&1023](x,F);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[l>>2]|0,x);nd[k[(k[b>>2]|0)+336>>2]&1023](b,q,x);nd[k[(k[t>>2]|0)+48>>2]&1023](t,g,x);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,x);rd[k[(k[t>>2]|0)+60>>2]&511](t,i,k[l>>2]|0,x);rd[k[(k[v>>2]|0)+60>>2]&511](v,j,k[l>>2]|0,x);p[e>>3]=+p[z>>3]*+p[d>>3];ZX(q,1,n,1,e,1,1,0,q,1,n,0,k[A>>2]|0,1)|0;y=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;G=Rqa(y>>>0>536870911?-1:y<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,G,x);if((y|0)>0){H=0;do{I=+p[G+(H<<3)>>3];p[s+(H<<3)>>3]=I;p[s+(H+y<<3)>>3]=I;H=H+1|0}while((H|0)!=(y|0))}Tqa(G);y=k[l>>2]|0;H=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;J=H<<1;K=Rqa(J>>>0>536870911?-1:J<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,K,y,x);if((H|0)>0){y=0;do{p[u+(y<<3)>>3]=+p[K+(y<<3)>>3];J=y+H|0;p[u+(J<<3)>>3]=+p[K+(J<<3)>>3];y=y+1|0}while((y|0)!=(H|0))}Tqa(K);I=+p[i>>3];L=+p[B>>3];M=+p[f>>3]*+p[z>>3]*+p[d>>3];p[e>>3]=M;p[m>>3]=I*M;p[C>>3]=L*M;ZX(s,2,n,1,m,2,2,0,s,2,n,0,k[A>>2]|0,1)|0;M=+p[e>>3];p[m>>3]=M*+p[g>>3];p[C>>3]=M*+p[h>>3];ZX(s,2,n,1,m,2,2,0,u,2,n,0,k[A>>2]|0,1)|0;M=+p[g>>3];L=+p[h>>3];I=+aa(+(M*M+L*L));N=w*(+p[e>>3]*+p[c>>3])/(I*2.0);I=M*N;p[m>>3]=M*I;O=L*N;p[D>>3]=M*O;p[E>>3]=L*I;p[C>>3]=L*O;ZX(u,2,n,1,m,2,2,0,u,2,n,0,k[A>>2]|0,1)|0;F=F+1|0}while((F|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0))}F=k[l>>2]|0;if(!F){k[l>>2]=0;Tqa(q);Tqa(s);Tqa(u);P=k[x>>2]|0;Q=P+4|0;R=k[Q>>2]|0;Ec[R&1023](x);r=a;return o|0}Tqa(F);k[l>>2]=0;Tqa(q);Tqa(s);Tqa(u);P=k[x>>2]|0;Q=P+4|0;R=k[Q>>2]|0;Ec[R&1023](x);r=a;return o|0}function zca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0;a=r;r=r+48|0;c=a+24|0;d=a+16|0;e=a+8|0;f=a;g=a+32|0;if(_p(b)|0){h=0;r=a;return h|0}k[g>>2]=0;i=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;j=iq(b,534)|0;l=Rqa(i>>>0>536870911?-1:i<<3)|0;Uo(b,g);pp(b,d,358);m=Wo(b,39)|0;n=Wo(b,768)|0;o=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;a:do if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=o+8|0;t=j+4|0;if((i|0)>0)u=q;else{v=q;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,v);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,l,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,f,o);v=v+1|0;if((v|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))break a}}do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,l,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,f,o);w=+p[d>>3];v=k[t>>2]|0;b:do if(w!=0.0){x=w;y=0;while(1){z=v+(y<<3)|0;p[z>>3]=+p[z>>3]+ +p[l+(y<<3)>>3]*(+p[c>>3]*+p[s>>3]*(+p[f>>3]+x*+p[e>>3]));z=y+1|0;if((z|0)==(i|0))break b;x=+p[d>>3];y=z}}else{y=0;do{z=v+(y<<3)|0;p[z>>3]=+p[c>>3]*+p[s>>3]*+p[e>>3]*+p[l+(y<<3)>>3]+ +p[z>>3];y=y+1|0}while((y|0)!=(i|0))}while(0);u=u+1|0}while((u|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}while(0);u=k[g>>2]|0;if(u)Tqa(u);k[g>>2]=0;Tqa(l);Ec[k[(k[o>>2]|0)+4>>2]&1023](o);h=j;r=a;return h|0}function Aca(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,699);return}function Bca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,130281,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,340,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Cca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;a=r;r=r+368|0;d=a+356|0;e=a+352|0;f=a+216|0;g=a+200|0;h=a+48|0;i=a+36|0;j=a+64|0;l=a+24|0;m=a+12|0;n=a;k[e>>2]=0;o=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,e,534,943);q=Rqa(o>>>0>536870911?-1:o<<3)|0;a:do if((o|0)>0){s=k[e>>2]|0;u=0;while(1){v=+p[b+(k[s+(u<<2)>>2]<<3)>>3];w=q+(u<<3)|0;p[w>>3]=v;x=+$(+v);p[t>>3]=x;y=k[t>>2]|0;z=k[t+4>>2]|0;if(z>>>0>2146435072|(z|0)==2146435072&y>>>0>0){A=7;break}if((y|0)==0&(z|0)==2146435072){A=31;break}if(v<1.0e-09)p[w>>3]=1.0e-09;u=u+1|0;if((u|0)>=(o|0))break a}if((A|0)==7){u=f+56|0;s=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,s|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;vva(u);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,s|0);w=B;B=0;do if(w&1){z=Rb()|0;E=Q;F=z}else{k[s>>2]=27560;z=f+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);y=B;B=0;if(y&1){y=Rb()|0;G=Q;Yua(d);Yua(z);Ava(s);E=G;F=y;break}Yua(d);B=0;y=Ia(40,f|0,135564,28)|0;G=B;B=0;b:do if(!(G&1)?(B=0,Xa(239,y|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,g|0,130281,83);I=B;B=0;do if(!(I&1)){B=0;eb(502,h|0,137199,23);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(g);L=J;M=K;break}B=0;wa(510,i|0,s|0);K=B;B=0;if(K&1){K=Rb()|0;N=Q;O=K;P=1}else{B=0;ua(163,H|0,g|0,h|0,357,i|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,H|0,1240,229);B=0;R=0}K=Rb()|0;J=Q;Yua(i);N=J;O=K;P=R}Yua(h);Yua(g);if(P){L=O;M=N}else{S=O;T=N;break b}}else{K=Rb()|0;L=K;M=Q}while(0);zb(H|0);S=L;T=M}else A=22;while(0);if((A|0)==22){y=Rb()|0;S=y;T=Q}k[f>>2]=27468;k[u>>2]=27488;k[s>>2]=27560;Yua(z);Ava(s);vva(u);U=T;V=S;Qb(V|0)}while(0);C=E;D=F;vva(u);Qb(D|0)}else if((A|0)==31){s=j+56|0;w=j+4|0;k[j>>2]=27524;k[s>>2]=27544;B=0;wa(508,j+56|0,w|0);y=B;B=0;if(y&1){y=Rb()|0;W=Q;X=y;vva(s);Qb(X|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[s>>2]=27488;B=0;va(448,w|0);y=B;B=0;do if(y&1){G=Rb()|0;Y=Q;Z=G}else{k[w>>2]=27560;G=j+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,w|0,d|0);I=B;B=0;if(I&1){I=Rb()|0;K=Q;Yua(d);Yua(G);Ava(w);Y=K;Z=I;break}Yua(d);B=0;I=Ia(40,j|0,135593,28)|0;K=B;B=0;c:do if(!(K&1)?(B=0,Xa(239,I|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,l|0,130281,83);_=B;B=0;do if(!(_&1)){B=0;eb(502,m|0,137199,23);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(l);ca=aa;da=ba;break}B=0;wa(510,n|0,w|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ea=1;fa=Q;ga=ba}else{B=0;ua(163,J|0,l|0,m|0,358,n|0);ba=B;B=0;if(ba&1)ha=1;else{B=0;eb(503,J|0,1240,229);B=0;ha=0}ba=Rb()|0;aa=Q;Yua(n);ea=ha;fa=aa;ga=ba}Yua(m);Yua(l);if(ea){ca=ga;da=fa}else{ia=fa;ja=ga;break c}}else{ba=Rb()|0;ca=ba;da=Q}while(0);zb(J|0);ia=da;ja=ca}else A=46;while(0);if((A|0)==46){I=Rb()|0;ia=Q;ja=I}k[j>>2]=27468;k[s>>2]=27488;k[w>>2]=27560;Yua(G);Ava(w);vva(s);U=ia;V=ja;Qb(V|0)}while(0);W=Y;X=Z;vva(s);Qb(X|0)}}while(0);X=k[c>>2]|0;Z=k[X+48>>2]|0;Y=Hc[k[X+128>>2]&511](c)|0;rd[Z&511](c,699,q,Y);Tqa(q);q=k[e>>2]|0;if(!q){r=a;return}Tqa(q);r=a;return}function Dca(a,b){a=a|0;b=b|0;return}function Eca(a){a=a|0;Sqa(a);return}function Fca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,131762);if((k[d>>2]|0)!=165){r=a;return}qoa(b,c,130392,507,738,0);r=a;return}function Gca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;a=r;r=r+32|0;d=a;e=a+16|0;f=a+12|0;g=a+8|0;h=a+4|0;Fka(c,e,131762);if((k[e>>2]|0)!=165){r=a;return}foa(c);e=c+52|0;a:do if((k[e>>2]|0)>0){j=c+40|0;l=c+36|0;m=c+104|0;n=0;while(1){if((k[j>>2]|0)==302){o=(Jka(c,136615)|0)+(n<<3)|0;if((~~+p[o>>3]|0)!=0?(k[(k[l>>2]|0)+(n<<2)>>2]|0)!=0:0){o=Qqa(44)|0;B=0;ua(176,o|0,n+1+(k[m>>2]|0)|0,n|0,c|0,507);q=B;B=0;if(q&1){s=o;t=15;break}ih(b,o)|0}}else if(k[(k[l>>2]|0)+(n<<2)>>2]|0){o=Qqa(44)|0;B=0;ua(176,o|0,n+1+(k[m>>2]|0)|0,n|0,c|0,507);q=B;B=0;if(q&1){u=o;t=10;break}ih(b,o)|0}n=n+1|0;if((n|0)>=(k[e>>2]|0))break a}if((t|0)==10){n=Rb()|0;m=Q;Sqa(u);v=m;w=n;Qb(w|0)}else if((t|0)==15){n=Rb()|0;m=Q;Sqa(s);v=m;w=n;Qb(w|0)}}while(0);k[d>>2]=136615;Lka(c,1,d);k[h>>2]=0;Cka(c,h,f,g,130413);g=k[f>>2]|0;b:do if((g|0)>0){d=c+32|0;s=c+104|0;t=g;u=0;while(1){e=k[h>>2]|0;if(!(i[(k[d>>2]|0)+((k[e+((u*3|0)+2<<2)>>2]|0)+-1)>>0]|0)){x=u+1|0;y=t}else{n=Qqa(44)|0;m=u+1|0;B=0;La(37,n|0,m+(k[s>>2]|0)|0,u|0,c|0,e|0,507);e=B;B=0;if(e&1){z=n;break}ih(b,n)|0;x=m;y=k[f>>2]|0}if((x|0)<(y|0)){t=y;u=x}else break b}u=Rb()|0;t=Q;Sqa(z);v=t;w=u;Qb(w|0)}while(0);w=k[h>>2]|0;if(w)Tqa(w);r=a;return}function Hca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=r;r=r+32|0;d=a+8|0;e=a;f=a+16|0;Fka(c,f,131762);if((k[f>>2]|0)!=165){r=a;return}if((k[c+40>>2]|0)==302){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,507,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function Ica(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Jca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+208|0;f=a+184|0;g=a+180|0;h=a+176|0;j=a+40|0;l=a+24|0;m=a+12|0;n=a;Fka(c,g,131762);if((k[g>>2]|0)!=165){r=a;return}g=c+56|0;o=k[g>>2]|0;if((o|0)>0){p=c+32|0;q=o;o=0;s=0;while(1){if(!(i[(k[p>>2]|0)+s>>0]|0)){t=q;u=o}else{v=qh(b,o)|0;Uc[k[(k[v>>2]|0)+480>>2]&63](v,s,c,d,e,738);t=k[g>>2]|0;u=o+1|0}s=s+1|0;if((s|0)>=(t|0))break;else{q=t;o=u}}}Zka(c,b,137052,353);Zka(c,b,134945,64);if((k[c+40>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,137867,206);Zka(c,b,134962,928);Zka(c,b,134027,39);Zka(c,b,135140,38);Zka(c,b,130430,166);Zka(c,b,130448,167);Zka(c,b,130472,170);Zka(c,b,130501,171);Zka(c,b,130527,168);Zka(c,b,130553,169);Zka(c,b,130578,172);Zka(c,b,130600,173);Zka(c,b,135923,674);Zka(c,b,135944,677);Fka(c,h,134909);switch(k[h>>2]|0){case 1:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);r=a;return}case 8:{Zka(c,b,135172,105);r=a;return}default:{a=j+56|0;b=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(a);Qb(x|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){u=Rb()|0;y=Q;z=u}else{k[b>>2]=27560;u=j+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;Yua(f);Yua(u);Ava(b);y=t;z=o;break}Yua(f);B=0;o=Ia(40,j|0,142117,13)|0;t=B;B=0;if(((!(t&1)?(B=0,t=Xa(242,o|0,k[h>>2]|0)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,l|0,130625,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,m|0,136133,14);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(l);A=s;C=q;break}B=0;wa(510,n|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;D=Q;E=q;F=1}else{B=0;ua(163,o|0,l|0,m|0,133,n|0);q=B;B=0;if(q&1)G=1;else{B=0;eb(503,o|0,1240,229);B=0;G=0}q=Rb()|0;s=Q;Yua(n);D=s;E=q;F=G}Yua(m);Yua(l);if(F){A=D;C=E}else{H=D;I=E;k[j>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}}else{q=Rb()|0;A=Q;C=q}while(0);zb(o|0);H=A;I=C;k[j>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}t=Rb()|0;H=Q;I=t;k[j>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}}function Kca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;e=r;r=r+16|0;d=e;Fka(c,d,131762);if((k[d>>2]|0)!=165){r=e;return}d=Qqa(12)|0;B=0;eb(518,d|0,118,165);a=B;B=0;if(a&1){a=Rb()|0;Sqa(d);Qb(a|0)}YN(b,d);YN(b,Ika(c,134909,111)|0);r=e;return}function Lca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,130625,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,151,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Mca(a,b){a=a|0;b=b|0;return 0}function Nca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,130625,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,158,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Oca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;k[f>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=gq(b,534)|0;i=g<<1;j=Rqa(i>>>0>536870911?-1:i<<3)|0;Uo(b,f);l=+Dp(b,65);i=Wo(b,172)|0;m=Wo(b,167)|0;Fc[k[(k[i>>2]|0)+64>>2]&1023](i,d);Fc[k[(k[m>>2]|0)+64>>2]&1023](m,c);n=l*+ba(+(+p[c>>3]),3.0);l=n/((+p[d>>3]*.001+1.0)*.000021444);d=ed[k[(k[b>>2]|0)+308>>2]&511](b,1)|0;c=Hc[k[(k[d>>2]|0)+8>>2]&511](d)|0;if((c|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0)){m=(g|0)>0;i=d+8|0;o=h+12|0;q=c;do{Fc[k[(k[d>>2]|0)+24>>2]&1023](d,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[f>>2]|0,d);rd[k[(k[b>>2]|0)+340>>2]&511](b,j,k[f>>2]|0,d);if(m){c=k[o>>2]|0;s=0;do{t=j+(s<<3)|0;u=j+(s+g<<3)|0;v=ma(s,g)|0;w=0;do{x=c+(w+v<<3)|0;p[x>>3]=+p[x>>3]+l*+p[i>>3]*+p[e>>3]*(+p[t>>3]*+p[j+(w<<3)>>3]+ +p[u>>3]*+p[j+(w+g<<3)>>3]);w=w+1|0}while((w|0)!=(g|0));s=s+1|0}while((s|0)!=(g|0))}q=q+1|0}while((q|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0))}q=k[f>>2]|0;if(!q){k[f>>2]=0;Tqa(j);y=k[d>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](d);r=a;return h|0}Tqa(q);k[f>>2]=0;Tqa(j);y=k[d>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](d);r=a;return h|0}function Pca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0,U=0,V=0.0,W=0.0,X=0,Y=0,Z=0,_=0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0,oa=0.0,pa=0.0,qa=0;a=r;r=r+160|0;c=a+136|0;d=a+128|0;e=a+120|0;f=a+112|0;g=a+96|0;h=a+88|0;i=a+80|0;j=a+72|0;l=a+64|0;m=a+56|0;n=a+48|0;o=a+40|0;q=a+32|0;s=a+24|0;t=a+16|0;u=a+8|0;v=a;w=a+144|0;if(_p(b)|0){x=0;r=a;return x|0}k[w>>2]=0;y=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;z=iq(b,534)|0;A=Rqa(y>>>0>536870911?-1:y<<3)|0;Uo(b,w);C=+Dp(b,211);D=+Dp(b,65);E=+Dp(b,265);F=+Dp(b,267);G=Wo(b,38)|0;H=Wo(b,166)|0;I=Wo(b,167)|0;J=Wo(b,353)|0;K=Wo(b,64)|0;L=Wo(b,214)|0;M=Wo(b,217)|0;N=Wo(b,170)|0;O=Wo(b,674)|0;P=Wo(b,677)|0;Q=Wo(b,168)|0;R=Wo(b,169)|0;S=+Dp(b,65);T=Wo(b,172)|0;U=Wo(b,167)|0;Fc[k[(k[T>>2]|0)+64>>2]&1023](T,d);Fc[k[(k[U>>2]|0)+64>>2]&1023](U,c);V=S*+ba(+(+p[c>>3]),3.0);S=V/((+p[d>>3]*.001+1.0)*.000021444);d=Qqa(16)|0;B=0;eb(524,d|0,b|0,2);c=B;B=0;if(c&1){c=Rb()|0;Sqa(d);Qb(c|0)}c=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;U=Hc[k[(k[c>>2]|0)+8>>2]&511](c)|0;if((U|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){V=D*E;W=D*F;D=1.0/C;C=W*S;T=g+8|0;X=(y|0)>0;Y=c+8|0;S=1.0/F-1.0/E;Z=z+4|0;_=U;do{Fc[k[(k[c>>2]|0)+24>>2]&1023](c,_);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[w>>2]|0,c);nd[k[(k[b>>2]|0)+336>>2]&1023](b,A,c);nd[k[(k[G>>2]|0)+48>>2]&1023](G,f,c);nd[k[(k[K>>2]|0)+48>>2]&1023](K,l,c);nd[k[(k[J>>2]|0)+48>>2]&1023](J,m,c);nd[k[(k[I>>2]|0)+48>>2]&1023](I,j,c);nd[k[(k[H>>2]|0)+48>>2]&1023](H,n,c);rd[k[(k[H>>2]|0)+60>>2]&511](H,g,k[w>>2]|0,c);nd[k[(k[N>>2]|0)+48>>2]&1023](N,o,c);nd[k[(k[Q>>2]|0)+48>>2]&1023](Q,q,c);nd[k[(k[R>>2]|0)+48>>2]&1023](R,s,c);nd[k[(k[O>>2]|0)+48>>2]&1023](O,t,c);nd[k[(k[P>>2]|0)+48>>2]&1023](P,u,c);nd[k[(k[L>>2]|0)+48>>2]&1023](L,h,c);nd[k[(k[M>>2]|0)+48>>2]&1023](M,i,c);E=+ba(+(+p[h>>3]),+-+p[i>>3]);F=+p[j>>3];ca=+p[s>>3];if(F<ca)da=(ca-F)/+p[q>>3];else da=0.0;fla(d,v,c);nd[k[(k[O>>2]|0)+48>>2]&1023](O,t,c);nd[k[(k[P>>2]|0)+48>>2]&1023](P,u,c);F=+p[t>>3];ca=+p[u>>3];ea=V*+p[m>>3];fa=W*(+p[n>>3]-+p[l>>3]);ga=+p[g>>3];ha=+p[T>>3];a:do if(X){ia=S*(D*(+p[v>>3]*(F*F+ca*ca)+ +p[f>>3]+C*(ga*ga+ha*ha)));ja=ea-(fa>ea?ea:fa);ka=+$(+ja);U=k[Z>>2]|0;la=F;ma=ca;na=0;while(1){oa=ja*(E*+ba(+ka,+(+p[i>>3]+-1.0)));pa=ia+ +p[j>>3]*oa-da*+aa(+(la*la+ma*ma));qa=U+(na<<3)|0;p[qa>>3]=+p[qa>>3]+ +p[A+(na<<3)>>3]*(+p[e>>3]*+p[Y>>3]*(+p[o>>3]+pa));qa=na+1|0;if((qa|0)==(y|0))break a;la=+p[t>>3];ma=+p[u>>3];na=qa}}while(0);_=_+1|0}while((_|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0))}_=k[w>>2]|0;if(_)Tqa(_);k[w>>2]=0;Tqa(A);bla(d);Sqa(d);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);x=z;r=a;return x|0}function Qca(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,166);return}function Rca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,130625,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,308,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Sca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0;a=r;r=r+400|0;d=a+160|0;e=a+24|0;f=a;g=a+384|0;h=a+356|0;i=a+372|0;j=a+360|0;l=a+344|0;m=a+208|0;n=a+196|0;o=a+184|0;q=a+172|0;k[g>>2]=0;k[h>>2]=0;s=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,g,534,943);u=s>>>0>536870911?-1:s<<3;v=Rqa(u)|0;w=Rqa(u)|0;x=Rqa(u)|0;y=+Dp(c,265);z=+Dp(c,267);vp(c,w,353);vp(c,x,64);a:do if((s|0)>0){u=k[g>>2]|0;A=0;while(1){C=+p[b+(k[u+(A<<2)>>2]<<3)>>3];D=v+(A<<3)|0;p[D>>3]=C;E=+p[x+(A<<3)>>3];F=E+y*+p[w+(A<<3)>>3]/z;if(C>F){p[D>>3]=F;G=F}else G=C;if(G<E){p[D>>3]=E;H=E}else H=G;E=+$(+H);p[t>>3]=E;D=k[t>>2]|0;I=k[t+4>>2]|0;if(I>>>0>2146435072|(I|0)==2146435072&D>>>0>0){J=14;break}A=A+1|0;if((D|0)==0&(I|0)==2146435072){J=38;break}if((A|0)>=(s|0))break a}if((J|0)==14){A=e+56|0;u=e+4|0;k[e>>2]=27524;k[A>>2]=27544;B=0;wa(508,e+56|0,u|0);I=B;B=0;if(I&1){I=Rb()|0;K=Q;L=I;vva(A);Qb(L|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[A>>2]=27488;B=0;va(448,u|0);I=B;B=0;do if(I&1){D=Rb()|0;M=Q;N=D}else{k[u>>2]=27560;D=e+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,u|0,d|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(d);Yua(D);Ava(u);M=P;N=O;break}Yua(d);B=0;O=Ia(40,e|0,135564,28)|0;P=B;B=0;b:do if(!(P&1)?(B=0,Xa(239,O|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,i|0,130625,84);S=B;B=0;do if(!(S&1)){B=0;eb(502,j|0,137199,23);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(i);V=U;W=T;break}B=0;wa(510,l|0,u|0);T=B;B=0;if(T&1){T=Rb()|0;X=T;Y=Q;Z=1}else{B=0;ua(163,R|0,i|0,j|0,346,l|0);T=B;B=0;if(T&1)_=1;else{B=0;eb(503,R|0,1240,229);B=0;_=0}T=Rb()|0;U=Q;Yua(l);X=T;Y=U;Z=_}Yua(j);Yua(i);if(Z){V=Y;W=X}else{ca=X;da=Y;break b}}else{U=Rb()|0;V=Q;W=U}while(0);zb(R|0);ca=W;da=V}else J=29;while(0);if((J|0)==29){O=Rb()|0;ca=O;da=Q}k[e>>2]=27468;k[A>>2]=27488;k[u>>2]=27560;Yua(D);Ava(u);vva(A);ea=ca;fa=da;Qb(ea|0)}while(0);K=M;L=N;vva(A);Qb(L|0)}else if((J|0)==38){u=m+56|0;I=m+4|0;k[m>>2]=27524;k[u>>2]=27544;B=0;wa(508,m+56|0,I|0);O=B;B=0;if(O&1){O=Rb()|0;ga=Q;ha=O;vva(u);Qb(ha|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[u>>2]=27488;B=0;va(448,I|0);O=B;B=0;do if(O&1){P=Rb()|0;ia=Q;ja=P}else{k[I>>2]=27560;P=m+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,I|0,d|0);S=B;B=0;if(S&1){S=Rb()|0;U=Q;Yua(d);Yua(P);Ava(I);ia=U;ja=S;break}Yua(d);B=0;S=Ia(40,m|0,135593,28)|0;U=B;B=0;c:do if(!(U&1)?(B=0,Xa(239,S|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,n|0,130625,84);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,o|0,137199,23);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(n);na=ma;oa=la;break}B=0;wa(510,q|0,I|0);la=B;B=0;if(la&1){la=Rb()|0;pa=1;qa=la;ra=Q}else{B=0;ua(163,T|0,n|0,o|0,347,q|0);la=B;B=0;if(la&1)sa=1;else{B=0;eb(503,T|0,1240,229);B=0;sa=0}la=Rb()|0;ma=Q;Yua(q);pa=sa;qa=la;ra=ma}Yua(o);Yua(n);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break c}}else{ma=Rb()|0;na=Q;oa=ma}while(0);zb(T|0);ta=oa;xa=na}else J=53;while(0);if((J|0)==53){S=Rb()|0;ta=S;xa=Q}k[m>>2]=27468;k[u>>2]=27488;k[I>>2]=27560;Yua(P);Ava(I);vva(u);ea=ta;fa=xa;Qb(ea|0)}while(0);ga=ia;ha=ja;vva(u);Qb(ha|0)}}while(0);ha=k[c>>2]|0;ja=k[ha+48>>2]|0;ia=Hc[k[ha+128>>2]&511](c)|0;rd[ja&511](c,166,v,ia);Uo(c,h);ia=Wo(c,166)|0;nd[k[(k[ia>>2]|0)+68>>2]&1023](ia,f,k[h>>2]|0);H=+Dp(c,65);ia=Wo(c,172)|0;ja=Wo(c,167)|0;Fc[k[(k[ia>>2]|0)+64>>2]&1023](ia,e);Fc[k[(k[ja>>2]|0)+64>>2]&1023](ja,d);G=H*+ba(+(+p[d>>3]),3.0);H=+p[f>>3];z=+p[f+8>>3];y=G/((+p[e>>3]*.001+1.0)*.000021444)*+aa(+(H*H+z*z))/3.574e-06;p[d>>3]=y;rd[k[(k[c>>2]|0)+48>>2]&511](c,172,d,736);Tqa(v);Tqa(w);Tqa(x);x=k[h>>2]|0;if(x)Tqa(x);k[h>>2]=0;h=k[g>>2]|0;if(!h){r=a;return}Tqa(h);r=a;return}function Tca(a,b){a=a|0;b=b|0;return}function Uca(a,b){a=a|0;b=b|0;var c=0;a=b+20|0;if((th(k[a>>2]|0)|0)>0)c=0;else return;do{Vca(0,qh(k[a>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[a>>2]|0)|0));return}function Vca(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0;a=r;r=r+176|0;c=a+152|0;d=a+144|0;e=a+136|0;f=a+128|0;g=a+120|0;h=a+104|0;i=a+96|0;j=a+88|0;l=a+80|0;m=a+72|0;n=a+64|0;o=a+56|0;q=a+48|0;s=a+40|0;t=a+32|0;u=a+24|0;v=a+16|0;w=a+8|0;x=a;y=a+160|0;if(_p(b)|0){r=a;return}p[e>>3]=0.0;k[y>>2]=0;Uo(b,y);pp(b,l,358);z=+Dp(b,211);A=+Dp(b,65);C=+Dp(b,265);D=+Dp(b,267);E=Wo(b,38)|0;F=Wo(b,166)|0;G=Wo(b,167)|0;H=Wo(b,353)|0;I=Wo(b,64)|0;J=Wo(b,214)|0;K=Wo(b,217)|0;L=Wo(b,170)|0;M=Wo(b,674)|0;N=Wo(b,677)|0;O=Wo(b,168)|0;P=Wo(b,169)|0;Q=+Dp(b,65);R=Wo(b,172)|0;S=Wo(b,167)|0;Fc[k[(k[R>>2]|0)+64>>2]&1023](R,d);Fc[k[(k[S>>2]|0)+64>>2]&1023](S,c);T=Q*+ba(+(+p[c>>3]),3.0);Q=T/((+p[d>>3]*.001+1.0)*.000021444);d=Qqa(16)|0;B=0;eb(524,d|0,b|0,2);c=B;B=0;if(c&1){c=Rb()|0;Sqa(d);Qb(c|0)}c=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;S=Hc[k[(k[c>>2]|0)+8>>2]&511](c)|0;if((S|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){T=A*C;U=A*D;D=1.0/z;z=U*Q;R=h+8|0;V=c+8|0;W=S;Q=0.0;while(1){Fc[k[(k[c>>2]|0)+24>>2]&1023](c,W);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[y>>2]|0,c);nd[k[(k[E>>2]|0)+48>>2]&1023](E,g,c);nd[k[(k[I>>2]|0)+48>>2]&1023](I,n,c);nd[k[(k[H>>2]|0)+48>>2]&1023](H,o,c);nd[k[(k[G>>2]|0)+48>>2]&1023](G,m,c);nd[k[(k[F>>2]|0)+48>>2]&1023](F,q,c);rd[k[(k[F>>2]|0)+60>>2]&511](F,h,k[y>>2]|0,c);nd[k[(k[L>>2]|0)+48>>2]&1023](L,s,c);nd[k[(k[O>>2]|0)+48>>2]&1023](O,t,c);nd[k[(k[P>>2]|0)+48>>2]&1023](P,u,c);nd[k[(k[M>>2]|0)+48>>2]&1023](M,v,c);nd[k[(k[N>>2]|0)+48>>2]&1023](N,w,c);nd[k[(k[J>>2]|0)+48>>2]&1023](J,i,c);nd[k[(k[K>>2]|0)+48>>2]&1023](K,j,c);A=+ba(+(+p[i>>3]),+-+p[j>>3]);X=+p[m>>3];Y=+p[u>>3];if(X<Y)Z=(Y-X)/+p[t>>3];else Z=0.0;fla(d,x,c);nd[k[(k[M>>2]|0)+48>>2]&1023](M,v,c);nd[k[(k[N>>2]|0)+48>>2]&1023](N,w,c);X=+p[v>>3];Y=+p[w>>3];_=X*X+Y*Y;Y=T*+p[o>>3];X=U*(+p[q>>3]-+p[n>>3]);ca=+p[h>>3];da=+p[R>>3];ea=+p[f>>3];fa=+p[m>>3];ga=Y-(X>Y?Y:X);X=+$(+ga);Y=+p[V>>3]*ea*(fa+ +p[l>>3]*(Z*+aa(+_)+(D*(+p[x>>3]*_+ +p[g>>3]+z*(ca*ca+da*da))/C-fa*(ga*(A*+ba(+X,+(+p[j>>3]+-1.0)))))));p[e>>3]=+p[e>>3]+Y;Y=Q+ +p[V>>3]*ea;W=W+1|0;if((W|0)>=(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){ha=Y;break}else Q=Y}ia=+p[e>>3];ja=+p[o>>3];ka=ha}else{ia=0.0;ja=0.0;ka=0.0}ha=ia/ka;ka=ha<1.0e-05?1.0e-05:ha;p[e>>3]=ka>ja?ja:ka;rd[k[(k[b>>2]|0)+48>>2]&511](b,167,e,736);e=k[y>>2]|0;if(e)Tqa(e);k[y>>2]=0;bla(d);Sqa(d);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);r=a;return}function Wca(a){a=a|0;Sqa(a);return}function Xca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Yca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0;e=r;r=r+64|0;d=e+48|0;a=e+44|0;f=e+40|0;g=e+36|0;h=e+32|0;j=e+52|0;l=e+24|0;m=e+16|0;n=e+8|0;o=e;Fka(c,d,131762);if((k[d>>2]|0)!=122){r=e;return}Kka(c,j,131781);Bka(c,a,130743);Bka(c,f,130775);Pka(c,m,130802);Pka(c,o,130830);Bka(c,g,130851);Bka(c,h,130877);do if((k[a>>2]|0)==1){Pka(c,l,130899);q=Qqa(16)|0;B=0;Oa(59,q|0,154,+(+p[l>>3]));s=B;B=0;if(!(s&1)){YN(b,q);break}s=Rb()|0;t=Q;Sqa(q);u=t;v=s;Qb(v|0)}while(0);do if((k[f>>2]|0)==1){Pka(c,n,130926);l=Qqa(16)|0;B=0;Oa(59,l|0,156,+(+p[n>>3]));s=B;B=0;if(!(s&1)){YN(b,l);break}s=Rb()|0;t=Q;Sqa(l);u=t;v=s;Qb(v|0)}while(0);n=Qqa(16)|0;B=0;Oa(59,n|0,157,+(+p[m>>3]));m=B;B=0;if(m&1){m=Rb()|0;c=Q;Sqa(n);u=c;v=m;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(518,n|0,118,k[d>>2]|0);d=B;B=0;if(d&1){d=Rb()|0;m=Q;Sqa(n);u=m;v=d;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(517,n|0,152,(i[j>>0]|0)!=0|0);j=B;B=0;if(j&1){j=Rb()|0;d=Q;Sqa(n);u=d;v=j;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(518,n|0,153,k[a>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;Sqa(n);u=j;v=a;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(518,n|0,155,k[f>>2]|0);f=B;B=0;if(f&1){f=Rb()|0;a=Q;Sqa(n);u=a;v=f;Qb(v|0)}YN(b,n);n=Qqa(16)|0;B=0;Oa(59,n|0,133,+(+p[o>>3]));o=B;B=0;if(o&1){o=Rb()|0;f=Q;Sqa(n);u=f;v=o;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(518,n|0,158,k[g>>2]|0);g=B;B=0;if(g&1){g=Rb()|0;o=Q;Sqa(n);u=o;v=g;Qb(v|0)}YN(b,n);n=Qqa(12)|0;B=0;eb(518,n|0,132,k[h>>2]|0);h=B;B=0;if(h&1){h=Rb()|0;g=Q;Sqa(n);u=g;v=h;Qb(v|0)}else{YN(b,n);r=e;return}}function Zca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+16|0;f=a+4|0;g=a;Fka(c,g,131762);if((k[g>>2]|0)!=122){r=a;return}zka(c,f,131781);g=c+56|0;h=k[g>>2]|0;if((h|0)>0){j=c+32|0;l=h;h=0;m=0;while(1){if(!(i[(k[j>>2]|0)+m>>0]|0)){n=l;o=h}else{p=qh(b,h)|0;Uc[k[(k[p>>2]|0)+480>>2]&63](p,m,c,d,e,738);n=k[g>>2]|0;o=h+1|0}m=m+1|0;if((m|0)>=(n|0))break;else{l=n;h=o}}}Zka(c,b,137052,353);Zka(c,b,134945,64);Zka(c,b,137867,206);Zka(c,b,134027,39);Zka(c,b,130954,160);Zka(c,b,131261,123);Zka(c,b,130986,138);if((k[c+40>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}if(!(i[f>>0]|0)){r=a;return}Zka(c,b,131022,141);r=a;return}function _ca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=r;r=r+32|0;d=a+8|0;e=a;f=a+16|0;Fka(c,f,131762);if((k[f>>2]|0)!=122){r=a;return}if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,505,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function $ca(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,131762);if((k[d>>2]|0)!=122){r=a;return}qoa(b,c,131055,505,738,0);r=a;return}function ada(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;a=r;r=r+16|0;d=a+8|0;e=a;f=a+12|0;Fka(c,f,131762);if((k[f>>2]|0)!=122){r=a;return}f=c+40|0;if((k[f>>2]|0)==302){k[e>>2]=136615;Ska(c,1,e)}foa(c);e=c+52|0;a:do if((k[e>>2]|0)>0){g=c+36|0;h=c+104|0;i=0;while(1){if((k[f>>2]|0)==302){j=(Jka(c,136615)|0)+(i<<3)|0;if((~~+p[j>>3]|0)!=0?(k[(k[g>>2]|0)+(i<<2)>>2]|0)!=0:0){j=Qqa(52)|0;B=0;ua(177,j|0,i+1+(k[h>>2]|0)|0,i|0,c|0,505);l=B;B=0;if(l&1){m=j;n=16;break}ih(b,j)|0}}else if(k[(k[g>>2]|0)+(i<<2)>>2]|0){j=Qqa(52)|0;B=0;ua(177,j|0,i+1+(k[h>>2]|0)|0,i|0,c|0,505);l=B;B=0;if(l&1){o=j;n=11;break}ih(b,j)|0}i=i+1|0;if((i|0)>=(k[e>>2]|0))break a}if((n|0)==11){i=Rb()|0;h=Q;Sqa(o);q=h;s=i;Qb(s|0)}else if((n|0)==16){i=Rb()|0;h=Q;Sqa(m);q=h;s=i;Qb(s|0)}}while(0);k[d>>2]=136615;Lka(c,1,d);r=a;return}function bda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131085,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,155,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function cda(a,b){a=a|0;b=b|0;return 0}function dda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131085,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,164,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function eda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0.0;c=r;r=r+256|0;d=c+244|0;e=c+240|0;f=c+104|0;g=c+92|0;h=c+80|0;j=c+68|0;l=c+56|0;m=c+48|0;n=c+40|0;o=c+32|0;q=c+64|0;s=c;cp(b,e,298);a:do switch(k[e>>2]|0){case 300:{t=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{u=0;r=c;return u|0}break}default:{v=f+56|0;w=f+4|0;k[f>>2]=27524;k[v>>2]=27544;B=0;wa(508,f+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=f+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,w|0,d|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(d);Yua(A);Ava(w);C=F;D=E;break}Yua(d);B=0;E=Ia(40,f|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[e>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,g|0,131085,90);H=B;B=0;do if(!(H&1)){B=0;eb(502,h|0,144189,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(g);I=F;J=E;break}B=0;wa(510,j|0,w|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,G|0,g|0,h|0,183,j|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}E=Rb()|0;F=Q;Yua(j);K=E;L=F;M=N}Yua(h);Yua(g);if(M){I=K;J=L}else{O=K;P=L;k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=F;J=Q}while(0);zb(G|0);O=I;P=J;k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);k[q>>2]=0;z=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;D=gq(t,534)|0;C=z<<1;y=Rqa(C>>>0>536870911?-1:C<<3)|0;C=Rqa(z>>>0>536870911?-1:z<<3)|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[s+16>>2]=0;k[s+20>>2]=0;k[s+24>>2]=0;k[s+28>>2]=0;Uo(t,q);pp(t,n,358);op(t,f,152);O=Wo(t,138)|0;P=Wo(t,123)|0;J=Wo(t,127)|0;I=Wo(t,353)|0;L=Wo(t,64)|0;R=+Dp(t,267);S=+Dp(t,65);T=+Dp(t,136);U=+Dp(t,137);V=+Dp(t,135);W=R*S*T*U*(+Dp(t,139)+V/T);if(!(i[f>>0]|0))X=0;else X=Wo(t,142)|0;K=ed[k[(k[t>>2]|0)+308>>2]&511](t,2)|0;M=Hc[k[(k[K>>2]|0)+8>>2]&511](K)|0;if((M|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0)){g=K+8|0;h=s+24|0;N=D+12|0;j=M;do{Fc[k[(k[K>>2]|0)+24>>2]&1023](K,j);rd[k[(k[t>>2]|0)+260>>2]&511](t,m,k[q>>2]|0,K);nd[k[(k[O>>2]|0)+48>>2]&1023](O,o,K);T=+p[o>>3]*+p[g>>3]*+p[m>>3];p[l>>3]=T;V=+p[n>>3];if(V!=0.0){U=T*V;p[l>>3]=U;Y=U}else Y=T;p[s>>3]=Y;p[h>>3]=Y;M=k[q>>2]|0;b=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;w=b<<1;x=Rqa(w>>>0>536870911?-1:w<<3)|0;rd[k[(k[t>>2]|0)+340>>2]&511](t,x,M,K);if((b|0)>0){M=0;do{p[y+(M<<3)>>3]=+p[x+(M<<3)>>3];w=M+b|0;p[y+(w<<3)>>3]=+p[x+(w<<3)>>3];M=M+1|0}while((M|0)!=(b|0))}Tqa(x);ZX(y,2,z,1,s,2,2,0,y,2,z,0,k[N>>2]|0,1)|0;if((+p[n>>3]!=0.0?(nd[k[(k[t>>2]|0)+336>>2]&1023](t,C,K),p[l>>3]=W*+p[g>>3]*+p[m>>3],ZX(C,z,1,0,l,1,1,0,C,1,z,0,k[N>>2]|0,1)|0,(i[f>>0]|0)!=0):0)?(Fc[k[(k[X>>2]|0)+36>>2]&1023](X,d),(i[d>>0]|0)!=0):0){T=+fda(a,t,K,P,J,I,L);nd[k[(k[t>>2]|0)+336>>2]&1023](t,C,K);p[l>>3]=T*+p[n>>3]*+p[g>>3]*+p[m>>3];ZX(C,z,1,0,l,1,1,0,C,1,z,0,k[N>>2]|0,1)|0}j=j+1|0}while((j|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0))}j=k[q>>2]|0;if(j)Tqa(j);k[q>>2]=0;Tqa(y);Tqa(C);Ec[k[(k[K>>2]|0)+4>>2]&1023](K);if((k[e>>2]|0)!=300?(ap(t),(t|0)!=0):0)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);u=D;r=c;return u|0}function fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+224|0;h=a+204|0;i=a+200|0;j=a+16|0;l=a+8|0;m=a;n=a+64|0;o=a+48|0;q=a+36|0;s=a+24|0;cp(b,i,155);switch(k[i>>2]|0){case 1:{nd[k[(k[d>>2]|0)+48>>2]&1023](d,l,c);nd[k[(k[e>>2]|0)+48>>2]&1023](e,j,c);pp(b,m,156);t=+nda(0,b,c,f,g);u=+p[l>>3];v=+KY(1.0/(+ja(+((u-+p[j>>3])*-20.0))+1.0)+1.0/(+ja(+((t-u)*-20.0))+1.0),1.0)*+p[m>>3];r=a;return +v}case 0:{v=0.0;r=a;return +v}default:{a=n+56|0;m=n+4|0;k[n>>2]=27524;k[a>>2]=27544;B=0;wa(508,n+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;vva(a);Qb(x|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){l=Rb()|0;y=Q;z=l}else{k[m>>2]=27560;l=n+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,m|0,h|0);g=B;B=0;if(g&1){g=Rb()|0;f=Q;Yua(h);Yua(l);Ava(m);y=f;z=g;break}Yua(h);B=0;g=Ia(40,n|0,131439,45)|0;f=B;B=0;if(!(f&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,o|0,131085,90);f=B;B=0;do if(!(f&1)){B=0;eb(502,q|0,131485,27);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Yua(o);A=b;C=c;break}B=0;wa(510,s|0,m|0);c=B;B=0;if(c&1){c=Rb()|0;D=Q;E=c;F=1}else{B=0;ua(163,g|0,o|0,q|0,622,s|0);c=B;B=0;if(c&1)G=1;else{B=0;eb(503,g|0,1240,229);B=0;G=0}c=Rb()|0;b=Q;Yua(s);D=b;E=c;F=G}Yua(q);Yua(o);if(F){A=D;C=E}else{H=D;I=E;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}}else{c=Rb()|0;A=Q;C=c}while(0);zb(g|0);H=A;I=C;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}f=Rb()|0;H=Q;I=f;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}return +(0.0)}function gda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0.0,Z=0.0;c=r;r=r+224|0;d=c+212|0;e=c+208|0;f=c+72|0;g=c+60|0;h=c+48|0;j=c+36|0;l=c+24|0;m=c+16|0;n=c+8|0;o=c;q=c+32|0;cp(b,e,298);a:do switch(k[e>>2]|0){case 300:{s=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){s=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{t=0;r=c;return t|0}break}default:{u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=f+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(d);Yua(z);Ava(v);A=E;C=D;break}Yua(d);B=0;D=Ia(40,f|0,144639,5)|0;E=B;B=0;if((((!(E&1)?(B=0,E=ya(427,k[e>>2]|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,D|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,146481,18)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,g|0,131085,90);G=B;B=0;do if(!(G&1)){B=0;eb(502,h|0,144203,13);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(g);H=E;I=D;break}B=0;wa(510,j|0,v|0);D=B;B=0;if(D&1){D=Rb()|0;J=D;K=Q;L=1}else{B=0;ua(163,F|0,g|0,h|0,287,j|0);D=B;B=0;if(D&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}D=Rb()|0;E=Q;Yua(j);J=D;K=E;L=M}Yua(h);Yua(g);if(L){H=J;I=K}else{N=J;O=K;k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}}else{E=Rb()|0;H=E;I=Q}while(0);zb(F|0);N=H;O=I;k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}G=Rb()|0;N=G;O=Q;k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);k[q>>2]=0;y=Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0;C=iq(s,534)|0;A=Rqa(y>>>0>536870911?-1:y<<3)|0;Uo(s,q);pp(s,l,358);op(s,f,152);x=Wo(s,123)|0;N=Wo(s,127)|0;O=Wo(s,39)|0;I=Wo(s,353)|0;H=Wo(s,64)|0;if(+p[l>>3]!=0.0)P=Wo(s,124)|0;else P=0;R=+Dp(s,267);S=+Dp(s,65);T=+Dp(s,136);U=+Dp(s,137);V=+Dp(s,135);W=R*S*T*U*(+Dp(s,139)+V/T);if(!(i[f>>0]|0))X=0;else X=Wo(s,142)|0;K=ed[k[(k[s>>2]|0)+308>>2]&511](s,2)|0;J=Hc[k[(k[K>>2]|0)+8>>2]&511](K)|0;if((J|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0)){L=K+8|0;g=(y|0)>0;h=C+4|0;M=J;do{Fc[k[(k[K>>2]|0)+24>>2]&1023](K,M);rd[k[(k[s>>2]|0)+260>>2]&511](s,o,k[q>>2]|0,K);nd[k[(k[s>>2]|0)+336>>2]&1023](s,A,K);nd[k[(k[O>>2]|0)+48>>2]&1023](O,n,K);T=+p[o>>3]*+p[L>>3]*+p[n>>3];V=+p[l>>3];U=V!=0.0?T*V:T;if(g){J=k[h>>2]|0;j=0;do{b=J+(j<<3)|0;p[b>>3]=U*+p[A+(j<<3)>>3]+ +p[b>>3];j=j+1|0}while((j|0)!=(y|0));Y=+p[l>>3]}else Y=V;b:do if(Y!=0.0){nd[k[(k[P>>2]|0)+48>>2]&1023](P,m,K);if(!(i[f>>0]|0)){U=+p[o>>3]*+p[L>>3]*(W*+p[m>>3]);if(!g)break;j=k[h>>2]|0;J=0;while(1){u=j+(J<<3)|0;p[u>>3]=U*+p[A+(J<<3)>>3]+ +p[u>>3];J=J+1|0;if((J|0)==(y|0))break b}}Fc[k[(k[X>>2]|0)+36>>2]&1023](X,d);if(!(i[d>>0]|0))Z=0.0;else Z=+hda(a,s,K,x,N,I,H);U=+p[o>>3]*+p[L>>3]*(W*+p[m>>3]+Z*+p[l>>3]);if(g){J=k[h>>2]|0;j=0;do{z=J+(j<<3)|0;p[z>>3]=U*+p[A+(j<<3)>>3]+ +p[z>>3];j=j+1|0}while((j|0)!=(y|0))}}while(0);M=M+1|0}while((M|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0))}M=k[q>>2]|0;if(M)Tqa(M);k[q>>2]=0;Tqa(A);Ec[k[(k[K>>2]|0)+4>>2]&1023](K);if((k[e>>2]|0)!=300?(ap(s),(s|0)!=0):0)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);t=C;r=c;return t|0}function hda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+224|0;h=a+204|0;i=a+200|0;j=a+16|0;l=a+8|0;m=a;n=a+64|0;o=a+48|0;q=a+36|0;s=a+24|0;cp(b,i,155);switch(k[i>>2]|0){case 1:{nd[k[(k[d>>2]|0)+48>>2]&1023](d,l,c);nd[k[(k[e>>2]|0)+48>>2]&1023](e,j,c);pp(b,m,156);t=+nda(0,b,c,f,g);u=+p[l>>3];v=+KY(1.0/(+ja(+((u-+p[j>>3])*-20.0))+1.0)+1.0/(+ja(+((t-u)*-20.0))+1.0),1.0)*(+p[j>>3]*+p[m>>3]);r=a;return +v}case 0:{v=0.0;r=a;return +v}default:{a=n+56|0;m=n+4|0;k[n>>2]=27524;k[a>>2]=27544;B=0;wa(508,n+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;vva(a);Qb(x|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){l=Rb()|0;y=Q;z=l}else{k[m>>2]=27560;l=n+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,m|0,h|0);g=B;B=0;if(g&1){g=Rb()|0;f=Q;Yua(h);Yua(l);Ava(m);y=f;z=g;break}Yua(h);B=0;g=Ia(40,n|0,131439,45)|0;f=B;B=0;if(!(f&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,o|0,131085,90);f=B;B=0;do if(!(f&1)){B=0;eb(502,q|0,131513,27);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Yua(o);A=b;C=c;break}B=0;wa(510,s|0,m|0);c=B;B=0;if(c&1){c=Rb()|0;D=Q;E=c;F=1}else{B=0;ua(163,g|0,o|0,q|0,660,s|0);c=B;B=0;if(c&1)G=1;else{B=0;eb(503,g|0,1240,229);B=0;G=0}c=Rb()|0;b=Q;Yua(s);D=b;E=c;F=G}Yua(q);Yua(o);if(F){A=D;C=E}else{H=D;I=E;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}}else{c=Rb()|0;A=Q;C=c}while(0);zb(g|0);H=A;I=C;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}f=Rb()|0;H=Q;I=f;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}return +(0.0)}function ida(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,123);return}function jda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,131085,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,405,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function kda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0;a=r;r=r+368|0;d=a+272|0;e=a+360|0;f=a+364|0;g=a+356|0;h=a+136|0;j=a+344|0;l=a+332|0;m=a+320|0;n=a;o=a+308|0;q=a+296|0;s=a+284|0;k[g>>2]=0;cp(c,e,298);do if((k[e>>2]|0)!=300)if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){u=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break}else{r=a;return}else u=c;while(0);v=Hc[k[(k[u>>2]|0)+164>>2]&511](u)|0;rp(u,g,534,943);w=v>>>0>536870911?-1:v<<3;x=Rqa(w)|0;y=Rqa(w)|0;z=Rqa(w)|0;A=(v|0)>0;a:do if(A){C=k[g>>2]|0;D=0;while(1){E=+p[b+(k[C+(D<<2)>>2]<<3)>>3];p[x+(D<<3)>>3]=E;F=+$(+E);p[t>>3]=F;G=k[t>>2]|0;H=k[t+4>>2]|0;if(H>>>0>2146435072|(H|0)==2146435072&G>>>0>0){I=9;break}D=D+1|0;if((G|0)==0&(H|0)==2146435072){I=33;break}if((D|0)>=(v|0))break a}if((I|0)==9){D=h+56|0;C=h+4|0;k[h>>2]=27524;k[D>>2]=27544;B=0;wa(508,h+56|0,C|0);H=B;B=0;if(H&1){H=Rb()|0;J=Q;K=H;vva(D);Qb(K|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[D>>2]=27488;B=0;va(448,C|0);H=B;B=0;do if(H&1){G=Rb()|0;L=Q;M=G}else{k[C>>2]=27560;G=h+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(d);Yua(G);Ava(C);L=O;M=N;break}Yua(d);B=0;N=Ia(40,h|0,135564,28)|0;O=B;B=0;b:do if(!(O&1)?(B=0,Xa(239,N|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,j|0,131085,90);R=B;B=0;do if(!(R&1)){B=0;eb(502,l|0,137199,23);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(j);U=T;V=S;break}B=0;wa(510,m|0,C|0);S=B;B=0;if(S&1){S=Rb()|0;W=S;X=Q;Y=1}else{B=0;ua(163,P|0,j|0,l|0,436,m|0);S=B;B=0;if(S&1)Z=1;else{B=0;eb(503,P|0,1240,229);B=0;Z=0}S=Rb()|0;T=Q;Yua(m);W=S;X=T;Y=Z}Yua(l);Yua(j);if(Y){U=X;V=W}else{_=W;aa=X;break b}}else{T=Rb()|0;U=Q;V=T}while(0);zb(P|0);_=V;aa=U}else I=24;while(0);if((I|0)==24){N=Rb()|0;_=N;aa=Q}k[h>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(D);ca=_;da=aa;Qb(ca|0)}while(0);J=L;K=M;vva(D);Qb(K|0)}else if((I|0)==33){C=n+56|0;H=n+4|0;k[n>>2]=27524;k[C>>2]=27544;B=0;wa(508,n+56|0,H|0);N=B;B=0;if(N&1){N=Rb()|0;ea=Q;fa=N;vva(C);Qb(fa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[C>>2]=27488;B=0;va(448,H|0);N=B;B=0;do if(N&1){O=Rb()|0;ga=Q;ha=O}else{k[H>>2]=27560;O=n+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,H|0,d|0);R=B;B=0;if(R&1){R=Rb()|0;T=Q;Yua(d);Yua(O);Ava(H);ga=T;ha=R;break}Yua(d);B=0;R=Ia(40,n|0,135593,28)|0;T=B;B=0;c:do if(!(T&1)?(B=0,Xa(239,R|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,o|0,131085,90);ia=B;B=0;do if(!(ia&1)){B=0;eb(502,q|0,137199,23);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(o);la=ka;ma=ja;break}B=0;wa(510,s|0,H|0);ja=B;B=0;if(ja&1){ja=Rb()|0;na=1;oa=ja;pa=Q}else{B=0;ua(163,S|0,o|0,q|0,437,s|0);ja=B;B=0;if(ja&1)qa=1;else{B=0;eb(503,S|0,1240,229);B=0;qa=0}ja=Rb()|0;ka=Q;Yua(s);na=qa;oa=ja;pa=ka}Yua(q);Yua(o);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break c}}else{ka=Rb()|0;la=Q;ma=ka}while(0);zb(S|0);ra=ma;sa=la}else I=48;while(0);if((I|0)==48){R=Rb()|0;ra=R;sa=Q}k[n>>2]=27468;k[C>>2]=27488;k[H>>2]=27560;Yua(O);Ava(H);vva(C);ca=ra;da=sa;Qb(ca|0)}while(0);ea=ga;fa=ha;vva(C);Qb(fa|0)}}while(0);zp(u,f,645);if(i[f>>0]|0){f=Rqa(w)|0;fa=Rqa(w)|0;pp(u,h,164);pp(u,d,157);F=+Dp(u,267);E=+Dp(u,265);ta=+Dp(u,65);xp(u,f,353);xp(u,fa,64);xa=+p[h>>3]*+ba(10.0,+(+p[d>>3]));if(A){ya=E*ta;E=F*ta;A=0;do{lda(0,n,u,ed[k[(k[u>>2]|0)+156>>2]&511](u,A)|0);ta=+p[x+(A<<3)>>3];F=+p[n>>3];p[z+(A<<3)>>3]=ta>F?xa*(ta-F):0.0;za=ya*+p[f+(A<<3)>>3];Aa=+KY(F,ta);ta=za-E*+LY(Aa-+p[fa+(A<<3)>>3],0.0);p[y+(A<<3)>>3]=ta;A=A+1|0}while((A|0)!=(v|0))}Tqa(f);Tqa(fa)}rd[k[(k[c>>2]|0)+44>>2]&511](c,123,x,738);rd[k[(k[c>>2]|0)+44>>2]&511](c,125,z,738);rd[k[(k[c>>2]|0)+44>>2]&511](c,126,y,738);Tqa(x);Tqa(z);Tqa(y);y=k[g>>2]|0;if(y)Tqa(y);k[g>>2]=0;if((k[e>>2]|0)==300){r=a;return}ap(u);if(!u){r=a;return}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);r=a;return}function lda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;a=r;r=r+400|0;e=a+380|0;f=a+376|0;g=a+16|0;h=a+8|0;i=a;j=a+240|0;l=a+224|0;m=a+72|0;n=a+60|0;o=a+88|0;q=a+48|0;s=a+36|0;t=a+24|0;cp(c,f,153);switch(k[f>>2]|0){case 0:{p[g>>3]=1.0e10;u=1.0e10;p[b>>3]=u;r=a;return}case 1:{pp(c,g,154);u=+p[g>>3];p[b>>3]=u;r=a;return}case 2:{v=+Dp(c,267);w=+Dp(c,265);rd[k[(k[c>>2]|0)+144>>2]&511](c,h,d,353);rd[k[(k[c>>2]|0)+144>>2]&511](c,i,d,64);x=+p[i>>3]+w*+p[h>>3]/v;p[g>>3]=x;u=x;p[b>>3]=u;r=a;return}case 3:{a=j+56|0;b=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,b|0);g=B;B=0;if(g&1){g=Rb()|0;y=Q;z=g;vva(a);Qb(z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);g=B;B=0;do if(g&1){h=Rb()|0;A=Q;C=h}else{k[b>>2]=27560;h=j+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);i=B;B=0;if(i&1){i=Rb()|0;d=Q;Yua(e);Yua(h);Ava(b);A=d;C=i;break}Yua(e);B=0;i=Ia(40,j|0,131601,38)|0;d=B;B=0;a:do if(!(d&1)?(B=0,Xa(239,i|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,l|0,131085,90);f=B;B=0;do if(!(f&1)){B=0;eb(502,m|0,131640,29);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(l);F=D;G=E;break}B=0;wa(510,n|0,b|0);E=B;B=0;if(E&1){E=Rb()|0;H=Q;I=E;J=1}else{B=0;ua(163,c|0,l|0,m|0,578,n|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,c|0,1240,229);B=0;K=0}E=Rb()|0;D=Q;Yua(n);H=D;I=E;J=K}Yua(m);Yua(l);if(J){F=I;G=H}else{L=I;M=H;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(c|0);L=F;M=G}else N=20;while(0);if((N|0)==20){i=Rb()|0;L=i;M=Q}k[j>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(h);Ava(b);vva(a);O=M;P=L;Qb(P|0)}while(0);y=A;z=C;vva(a);Qb(z|0);break}default:{z=o+56|0;a=o+4|0;k[o>>2]=27524;k[z>>2]=27544;B=0;wa(508,o+56|0,a|0);C=B;B=0;if(C&1){C=Rb()|0;R=Q;S=C;vva(z);Qb(S|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[z>>2]=27488;B=0;va(448,a|0);C=B;B=0;do if(C&1){A=Rb()|0;T=Q;U=A}else{k[a>>2]=27560;A=o+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;L=Q;Yua(e);Yua(A);Ava(a);T=L;U=y;break}Yua(e);B=0;y=Ia(40,o|0,131670,43)|0;L=B;B=0;b:do if(!(L&1)?(B=0,Xa(239,y|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,q|0,131085,90);b=B;B=0;do if(!(b&1)){B=0;eb(502,s|0,131640,29);j=B;B=0;if(j&1){j=Rb()|0;G=Q;Yua(q);V=j;W=G;break}B=0;wa(510,t|0,a|0);G=B;B=0;if(G&1){G=Rb()|0;X=1;Y=Q;Z=G}else{B=0;ua(163,M|0,q|0,s|0,581,t|0);G=B;B=0;if(G&1)_=1;else{B=0;eb(503,M|0,1240,229);B=0;_=0}G=Rb()|0;j=Q;Yua(t);X=_;Y=j;Z=G}Yua(s);Yua(q);if(X){V=Z;W=Y}else{$=Y;aa=Z;break b}}else{G=Rb()|0;V=G;W=Q}while(0);zb(M|0);$=W;aa=V}else N=43;while(0);if((N|0)==43){y=Rb()|0;$=Q;aa=y}k[o>>2]=27468;k[z>>2]=27488;k[a>>2]=27560;Yua(A);Ava(a);vva(z);O=$;P=aa;Qb(P|0)}while(0);R=T;S=U;vva(z);Qb(S|0)}}}function mda(a,b){a=a|0;b=b|0;return}function nda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;a=r;r=r+400|0;f=a+380|0;g=a+376|0;h=a+16|0;i=a+8|0;j=a;l=a+240|0;m=a+224|0;n=a+72|0;o=a+60|0;q=a+88|0;s=a+48|0;t=a+36|0;u=a+24|0;cp(b,g,153);switch(k[g>>2]|0){case 0:{p[h>>3]=1.0e10;v=1.0e10;r=a;return +v}case 1:{pp(b,h,154);v=+p[h>>3];r=a;return +v}case 2:{w=+Dp(b,267);x=+Dp(b,265);nd[k[(k[d>>2]|0)+48>>2]&1023](d,i,c);nd[k[(k[e>>2]|0)+48>>2]&1023](e,j,c);y=+p[j>>3]+x*+p[i>>3]/w;p[h>>3]=y;v=y;r=a;return +v}case 3:{a=l+56|0;h=l+4|0;k[l>>2]=27524;k[a>>2]=27544;B=0;wa(508,l+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;z=Q;A=i;vva(a);Qb(A|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){j=Rb()|0;C=Q;D=j}else{k[h>>2]=27560;j=l+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,h|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;e=Q;Yua(f);Yua(j);Ava(h);C=e;D=c;break}Yua(f);B=0;c=Ia(40,l|0,131601,38)|0;e=B;B=0;a:do if(!(e&1)?(B=0,Xa(239,c|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,m|0,131085,90);b=B;B=0;do if(!(b&1)){B=0;eb(502,n|0,131640,29);g=B;B=0;if(g&1){g=Rb()|0;E=Q;Yua(m);F=g;G=E;break}B=0;wa(510,o|0,h|0);E=B;B=0;if(E&1){E=Rb()|0;H=Q;I=E;J=1}else{B=0;ua(163,d|0,m|0,n|0,544,o|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,d|0,1240,229);B=0;K=0}E=Rb()|0;g=Q;Yua(o);H=g;I=E;J=K}Yua(n);Yua(m);if(J){F=I;G=H}else{L=I;M=H;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(d|0);L=F;M=G}else N=20;while(0);if((N|0)==20){c=Rb()|0;L=c;M=Q}k[l>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(j);Ava(h);vva(a);O=M;P=L;Qb(P|0)}while(0);z=C;A=D;vva(a);Qb(A|0);break}default:{A=q+56|0;a=q+4|0;k[q>>2]=27524;k[A>>2]=27544;B=0;wa(508,q+56|0,a|0);D=B;B=0;if(D&1){D=Rb()|0;R=Q;S=D;vva(A);Qb(S|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[A>>2]=27488;B=0;va(448,a|0);D=B;B=0;do if(D&1){C=Rb()|0;T=Q;U=C}else{k[a>>2]=27560;C=q+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[q+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;L=Q;Yua(f);Yua(C);Ava(a);T=L;U=z;break}Yua(f);B=0;z=Ia(40,q|0,131670,43)|0;L=B;B=0;b:do if(!(L&1)?(B=0,Xa(239,z|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,s|0,131085,90);h=B;B=0;do if(!(h&1)){B=0;eb(502,t|0,131640,29);l=B;B=0;if(l&1){l=Rb()|0;G=Q;Yua(s);V=l;W=G;break}B=0;wa(510,u|0,a|0);G=B;B=0;if(G&1){G=Rb()|0;X=1;Y=Q;Z=G}else{B=0;ua(163,M|0,s|0,t|0,547,u|0);G=B;B=0;if(G&1)_=1;else{B=0;eb(503,M|0,1240,229);B=0;_=0}G=Rb()|0;l=Q;Yua(u);X=_;Y=l;Z=G}Yua(t);Yua(s);if(X){V=Z;W=Y}else{$=Y;aa=Z;break b}}else{G=Rb()|0;V=G;W=Q}while(0);zb(M|0);$=W;aa=V}else N=43;while(0);if((N|0)==43){z=Rb()|0;$=Q;aa=z}k[q>>2]=27468;k[A>>2]=27488;k[a>>2]=27560;Yua(C);Ava(a);vva(A);O=$;P=aa;Qb(P|0)}while(0);R=T;S=U;vva(A);Qb(S|0)}}return +(0.0)}function oda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;a=b+20|0;if((th(k[a>>2]|0)|0)>0)c=0;else return;while(1){b=qh(k[a>>2]|0,c)|0;d=Wo(b,141)|0;e=+Zc[k[(k[d>>2]|0)+108>>2]&255](d)>0.0;d=Qqa(12)|0;B=0;eb(507,d|0,142,e|0);e=B;B=0;if(e&1){f=d;g=5;break}So(b,d);c=c+1|0;if((c|0)>=(th(k[a>>2]|0)|0)){g=2;break}}if((g|0)==2)return;else if((g|0)==5){g=Rb()|0;Sqa(f);Qb(g|0)}}function pda(a){a=a|0;Sqa(a);return}function qda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function rda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;e=r;r=r+16|0;d=e+8|0;a=e+4|0;f=e;g=e+12|0;Fka(c,d,131762);if((k[d>>2]|0)!=122){r=e;return}zka(c,g,131781);if(!(i[g>>0]|0)){r=e;return}Bka(c,a,131207);g=Qqa(12)|0;B=0;eb(518,g|0,159,k[a>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;d=Q;Sqa(g);h=d;j=a;Qb(j|0)}YN(b,g);Bka(c,f,131233);c=Qqa(12)|0;B=0;eb(518,c|0,150,k[f>>2]|0);f=B;B=0;if(f&1){f=Rb()|0;g=Q;Sqa(c);h=g;j=f;Qb(j|0)}else{YN(b,c);r=e;return}}function sda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=r;r=r+16|0;f=a+4|0;g=a;Fka(c,g,131762);if((k[g>>2]|0)!=122){r=a;return}zka(c,f,131781);if(!(i[f>>0]|0)){r=a;return}f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,137052,353);Zka(c,b,134945,64);Zka(c,b,137867,206);Zka(c,b,131811,127);Zka(c,b,131261,123);Zka(c,b,131293,148);if((k[c+40>>2]|0)==300){r=a;return}Zka(c,b,136615,287);Zka(c,b,136636,288);r=a;return}function tda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=r;r=r+32|0;d=a+8|0;e=a;f=a+16|0;g=a+20|0;Fka(c,f,131762);if((k[f>>2]|0)!=122){r=a;return}zka(c,g,131781);if(i[g>>0]|0){if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,506,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d)}r=a;return}function uda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a;e=a+4|0;Fka(c,d,131762);if((k[d>>2]|0)!=122){r=a;return}zka(c,e,131781);if(i[e>>0]|0)qoa(b,c,131325,506,738,0);r=a;return}function vda(a,b,c){a=a|0;b=b|0;c=c|0;return}function wda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;a=b+24|0;c=th(k[a>>2]|0)|0;d=Rqa(c>>>0>1073741823?-1:c<<2)|0;if(c)WEa(d|0,0,c<<2|0)|0;c=k[b+44>>2]|0;b=Qqa(16)|0;B=0;e=ya(428,k[a>>2]|0)|0;a=B;B=0;if(a&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}B=0;ib(293,b|0,131,d|0,e|0);e=B;B=0;if(e&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}else{YN(c,b);Tqa(d);return}}function xda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;a=r;r=r+16|0;c=a;k[c>>2]=0;d=b+44|0;hO(k[d>>2]|0,c,0,131);e=b+24|0;if((th(k[e>>2]|0)|0)>0){b=0;do{k[(k[c>>2]|0)+(b<<2)>>2]=0;b=b+1|0}while((b|0)<(th(k[e>>2]|0)|0))}b=k[d>>2]|0;d=k[c>>2]|0;qO(b,d,th(k[e>>2]|0)|0,131);e=k[c>>2]|0;if(!e){r=a;return}Tqa(e);r=a;return}function yda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131350,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,132,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function zda(a,b){a=a|0;b=b|0;return 0}function Ada(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131350,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,141,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Bda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0;a=r;r=r+256|0;c=a+184|0;d=a+240|0;e=a+236|0;f=a+48|0;g=a+224|0;h=a+212|0;j=a+200|0;l=a+40|0;m=a+32|0;n=a+196|0;o=a;cp(b,e,298);a:do switch(k[e>>2]|0){case 300:{q=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){q=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{s=0;r=a;return s|0}break}default:{t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(c);Yua(y);Ava(u);z=D;A=C;break}Yua(c);B=0;C=Ia(40,f|0,144639,5)|0;D=B;B=0;if((((!(D&1)?(B=0,D=ya(427,k[e>>2]|0)|0,E=B,B=0,!(E&1)):0)?(E=Lta(D)|0,B=0,F=Ia(40,C|0,D|0,E|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,F|0,146481,18)|0,F=B,B=0,!(F&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,131350,88);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,144189,13);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(g);G=D;H=C;break}B=0;wa(510,j|0,u|0);C=B;B=0;if(C&1){C=Rb()|0;I=C;J=Q;K=1}else{B=0;ua(163,E|0,g|0,h|0,161,j|0);C=B;B=0;if(C&1)L=1;else{B=0;eb(503,E|0,1240,229);B=0;L=0}C=Rb()|0;D=Q;Yua(j);I=C;J=D;K=L}Yua(h);Yua(g);if(K){G=I;H=J}else{M=I;N=J;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}}else{D=Rb()|0;G=D;H=Q}while(0);zb(E|0);M=G;N=H;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}F=Rb()|0;M=F;N=Q;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}}while(0);x=Wo(q,142)|0;Fc[k[(k[x>>2]|0)+36>>2]&1023](x,d);if(!(i[d>>0]|0)){if((k[e>>2]|0)==300){s=0;r=a;return s|0}ap(q);if(!q){s=0;r=a;return s|0}Ec[k[(k[q>>2]|0)+4>>2]&1023](q);s=0;r=a;return s|0}k[n>>2]=0;d=Hc[k[(k[q>>2]|0)+164>>2]&511](q)|0;x=gq(q,534)|0;A=d<<1;z=Rqa(A>>>0>536870911?-1:A<<3)|0;A=Rqa(d>>>0>536870911?-1:d<<3)|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[o+16>>2]=0;k[o+20>>2]=0;k[o+24>>2]=0;k[o+28>>2]=0;Uo(q,n);pp(q,l,358);w=Wo(q,148)|0;M=Wo(q,123)|0;N=Wo(q,127)|0;H=Wo(q,353)|0;G=Wo(q,64)|0;O=+Dp(q,267);P=+Dp(q,65);R=+Dp(q,144);S=+Dp(q,143);T=O*P*R*(+Dp(q,139)+S/R);R=+Dp(q,151);J=ed[k[(k[q>>2]|0)+308>>2]&511](q,2)|0;I=Hc[k[(k[J>>2]|0)+8>>2]&511](J)|0;if((I|0)<(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0)){K=J+8|0;g=o+24|0;h=x+12|0;L=I;do{Fc[k[(k[J>>2]|0)+24>>2]&1023](J,L);rd[k[(k[q>>2]|0)+260>>2]&511](q,f,k[n>>2]|0,J);nd[k[(k[w>>2]|0)+48>>2]&1023](w,m,J);S=R*+p[m>>3]*+p[K>>3]*+p[f>>3];p[c>>3]=S;P=+p[l>>3];if(P!=0.0){O=S*P;p[c>>3]=O;U=O}else U=S;p[o>>3]=U;p[g>>3]=U;I=k[n>>2]|0;j=Hc[k[(k[q>>2]|0)+164>>2]&511](q)|0;b=j<<1;u=Rqa(b>>>0>536870911?-1:b<<3)|0;rd[k[(k[q>>2]|0)+340>>2]&511](q,u,I,J);if((j|0)>0){I=0;do{p[z+(I<<3)>>3]=+p[u+(I<<3)>>3];b=I+j|0;p[z+(b<<3)>>3]=+p[u+(b<<3)>>3];I=I+1|0}while((I|0)!=(j|0))}Tqa(u);ZX(z,2,d,1,o,2,2,0,z,2,d,0,k[h>>2]|0,1)|0;if(+p[l>>3]!=0.0){nd[k[(k[q>>2]|0)+336>>2]&1023](q,A,J);p[c>>3]=T*+p[m>>3]*+p[K>>3]*+p[f>>3];ZX(A,d,1,0,c,1,1,0,A,1,d,0,k[h>>2]|0,1)|0;S=+Cda(0,q,J,M,N,H,G);p[c>>3]=S*+p[l>>3]*+p[K>>3]*+p[f>>3];ZX(A,d,1,0,c,1,1,0,A,1,d,0,k[h>>2]|0,1)|0}L=L+1|0}while((L|0)<(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0))}L=k[n>>2]|0;if(L)Tqa(L);k[n>>2]=0;Tqa(A);Tqa(z);Ec[k[(k[J>>2]|0)+4>>2]&1023](J);if((k[e>>2]|0)!=300?(ap(q),(q|0)!=0):0)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);s=x;r=a;return s|0}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+224|0;h=a+204|0;i=a+200|0;j=a+16|0;l=a+8|0;m=a;n=a+64|0;o=a+48|0;q=a+36|0;s=a+24|0;cp(b,i,155);switch(k[i>>2]|0){case 1:{i=Qqa(4)|0;k[i>>2]=39240;t=+nda(i,b,c,f,g);Ec[k[(k[i>>2]|0)+4>>2]&1023](i);nd[k[(k[d>>2]|0)+48>>2]&1023](d,l,c);nd[k[(k[e>>2]|0)+48>>2]&1023](e,j,c);pp(b,m,156);u=+p[l>>3];v=+KY(1.0/(+ja(+((u-+p[j>>3])*-20.0))+1.0)+1.0/(+ja(+((t-u)*-20.0))+1.0),1.0)*+p[m>>3];r=a;return +v}case 0:{v=0.0;r=a;return +v}default:{a=n+56|0;m=n+4|0;k[n>>2]=27524;k[a>>2]=27544;B=0;wa(508,n+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;vva(a);Qb(x|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){l=Rb()|0;y=Q;z=l}else{k[m>>2]=27560;l=n+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,m|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;c=Q;Yua(h);Yua(l);Ava(m);y=c;z=b;break}Yua(h);B=0;b=Ia(40,n|0,131439,45)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,o|0,131350,88);c=B;B=0;do if(!(c&1)){B=0;eb(502,q|0,131485,27);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Yua(o);A=d;C=e;break}B=0;wa(510,s|0,m|0);e=B;B=0;if(e&1){e=Rb()|0;D=Q;E=e;F=1}else{B=0;ua(163,b|0,o|0,q|0,471,s|0);e=B;B=0;if(e&1)G=1;else{B=0;eb(503,b|0,1240,229);B=0;G=0}e=Rb()|0;d=Q;Yua(s);D=d;E=e;F=G}Yua(q);Yua(o);if(F){A=D;C=E}else{H=D;I=E;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}}else{e=Rb()|0;A=Q;C=e}while(0);zb(b|0);H=A;I=C;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}c=Rb()|0;H=Q;I=c;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(l);Ava(m);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}return +(0.0)}function Dda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0;a=r;r=r+224|0;c=a+160|0;d=a+216|0;e=a+212|0;f=a+24|0;g=a+200|0;h=a+188|0;j=a+176|0;l=a+16|0;m=a+8|0;n=a;o=a+172|0;cp(b,e,298);a:do switch(k[e>>2]|0){case 300:{q=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){q=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{s=0;r=a;return s|0}break}default:{t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(c);Yua(y);Ava(u);z=D;A=C;break}Yua(c);B=0;C=Ia(40,f|0,144639,5)|0;D=B;B=0;if((((!(D&1)?(B=0,D=ya(427,k[e>>2]|0)|0,E=B,B=0,!(E&1)):0)?(E=Lta(D)|0,B=0,F=Ia(40,C|0,D|0,E|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,F|0,146481,18)|0,F=B,B=0,!(F&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,131350,88);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,144203,13);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(g);G=D;H=C;break}B=0;wa(510,j|0,u|0);C=B;B=0;if(C&1){C=Rb()|0;I=C;J=Q;K=1}else{B=0;ua(163,E|0,g|0,h|0,268,j|0);C=B;B=0;if(C&1)L=1;else{B=0;eb(503,E|0,1240,229);B=0;L=0}C=Rb()|0;D=Q;Yua(j);I=C;J=D;K=L}Yua(h);Yua(g);if(K){G=I;H=J}else{M=I;N=J;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}}else{D=Rb()|0;G=D;H=Q}while(0);zb(E|0);M=G;N=H;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}F=Rb()|0;M=F;N=Q;k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(M|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}}while(0);x=Wo(q,142)|0;Fc[k[(k[x>>2]|0)+36>>2]&1023](x,d);if(!(i[d>>0]|0)){if((k[e>>2]|0)==300){s=0;r=a;return s|0}ap(q);if(!q){s=0;r=a;return s|0}Ec[k[(k[q>>2]|0)+4>>2]&1023](q);s=0;r=a;return s|0}k[o>>2]=0;d=Hc[k[(k[q>>2]|0)+164>>2]&511](q)|0;x=Hc[k[(k[q>>2]|0)+172>>2]&511](q)|0;A=iq(q,534)|0;z=Rqa(d>>>0>536870911?-1:d<<3)|0;Uo(q,o);pp(q,c,358);w=Wo(q,148)|0;M=Wo(q,123)|0;N=Wo(q,127)|0;H=Wo(q,353)|0;G=Wo(q,64)|0;J=Wo(q,125)|0;if(+p[c>>3]!=0.0)O=Wo(q,128)|0;else O=0;P=+Dp(q,267);R=+Dp(q,65);S=+Dp(q,144);T=+Dp(q,143);U=P*R*S*(+Dp(q,139)+T/S);I=ed[k[(k[q>>2]|0)+308>>2]&511](q,2)|0;K=Hc[k[(k[I>>2]|0)+8>>2]&511](I)|0;b:do if((K|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0)){g=I+8|0;h=A+4|0;if((d|0)>0)V=K;else{L=K;while(1){Fc[k[(k[I>>2]|0)+24>>2]&1023](I,L);rd[k[(k[q>>2]|0)+260>>2]&511](q,m,k[o>>2]|0,I);nd[k[(k[q>>2]|0)+336>>2]&1023](q,z,I);if(+p[c>>3]!=0.0){nd[k[(k[O>>2]|0)+48>>2]&1023](O,f,I);nd[k[(k[w>>2]|0)+48>>2]&1023](w,l,I);+Eda(0,q,I,M,N,H,G)}L=L+1|0;if((L|0)>=(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0))break b}}do{Fc[k[(k[I>>2]|0)+24>>2]&1023](I,V);rd[k[(k[q>>2]|0)+260>>2]&511](q,m,k[o>>2]|0,I);nd[k[(k[q>>2]|0)+336>>2]&1023](q,z,I);if(+p[c>>3]!=0.0){nd[k[(k[O>>2]|0)+48>>2]&1023](O,f,I);nd[k[(k[w>>2]|0)+48>>2]&1023](w,l,I);S=+Eda(0,q,I,M,N,H,G);T=+p[m>>3]*+p[g>>3]*(U*+p[f>>3]*+p[l>>3]+S*+p[c>>3]);L=k[h>>2]|0;t=0;do{j=L+(t<<3)|0;p[j>>3]=T*+p[z+(t<<3)>>3]+ +p[j>>3];t=t+1|0}while((t|0)!=(d|0))}V=V+1|0}while((V|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0))}while(0);Ec[k[(k[I>>2]|0)+4>>2]&1023](I);I=Hc[k[(k[q>>2]|0)+304>>2]&511](q)|0;if((x|0)>0){V=A+4|0;d=0;do{Fc[k[(k[I>>2]|0)+28>>2]&1023](I,d);U=+(ed[k[(k[q>>2]|0)+508>>2]&511](q,d)|0);nd[k[(k[J>>2]|0)+48>>2]&1023](J,n,I);c=(k[V>>2]|0)+(d<<3)|0;p[c>>3]=+p[n>>3]/U+ +p[c>>3];d=d+1|0}while((d|0)!=(x|0))}x=k[o>>2]|0;if(x)Tqa(x);k[o>>2]=0;Tqa(z);if(I)Ec[k[(k[I>>2]|0)+4>>2]&1023](I);if((k[e>>2]|0)!=300?(ap(q),(q|0)!=0):0)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);s=A;r=a;return s|0}function Eda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+224|0;h=a+204|0;i=a+200|0;j=a+16|0;l=a+8|0;m=a;n=a+64|0;o=a+48|0;q=a+36|0;s=a+24|0;cp(b,i,155);switch(k[i>>2]|0){case 1:{i=Qqa(4)|0;k[i>>2]=39240;t=+nda(i,b,c,f,g);Ec[k[(k[i>>2]|0)+4>>2]&1023](i);nd[k[(k[d>>2]|0)+48>>2]&1023](d,l,c);nd[k[(k[e>>2]|0)+48>>2]&1023](e,j,c);pp(b,m,156);u=+p[l>>3];v=+KY(1.0/(+ja(+((u-+p[j>>3])*-20.0))+1.0)+1.0/(+ja(+((t-u)*-20.0))+1.0),1.0)*(+p[l>>3]*+p[m>>3]);r=a;return +v}case 0:{v=0.0;r=a;return +v}default:{a=n+56|0;m=n+4|0;k[n>>2]=27524;k[a>>2]=27544;B=0;wa(508,n+56|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;w=Q;x=l;vva(a);Qb(x|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);l=B;B=0;do if(l&1){j=Rb()|0;y=Q;z=j}else{k[m>>2]=27560;j=n+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,m|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;c=Q;Yua(h);Yua(j);Ava(m);y=c;z=b;break}Yua(h);B=0;b=Ia(40,n|0,131439,45)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,o|0,131350,88);c=B;B=0;do if(!(c&1)){B=0;eb(502,q|0,131513,27);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Yua(o);A=d;C=e;break}B=0;wa(510,s|0,m|0);e=B;B=0;if(e&1){e=Rb()|0;D=Q;E=e;F=1}else{B=0;ua(163,b|0,o|0,q|0,514,s|0);e=B;B=0;if(e&1)G=1;else{B=0;eb(503,b|0,1240,229);B=0;G=0}e=Rb()|0;d=Q;Yua(s);D=d;E=e;F=G}Yua(q);Yua(o);if(F){A=D;C=E}else{H=D;I=E;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(a);Qb(I|0)}}else{e=Rb()|0;A=Q;C=e}while(0);zb(b|0);H=A;I=C;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(a);Qb(I|0)}c=Rb()|0;H=Q;I=c;k[n>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}return +(0.0)}function Fda(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,127);return}function Gda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,131350,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,359,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Hda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;a=r;r=r+384|0;d=a+356|0;e=a+368|0;f=a+352|0;g=a+348|0;h=a+200|0;i=a+336|0;j=a+48|0;l=a+36|0;m=a+64|0;n=a+24|0;o=a+12|0;q=a;cp(c,f,298);do if((k[f>>2]|0)!=300)if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){s=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break}else{r=a;return}else s=c;while(0);k[g>>2]=0;u=Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0;v=u>>>0>536870911?-1:u<<3;w=Rqa(v)|0;x=Rqa(v)|0;rp(s,g,534,943);xp(s,w,123);v=Wo(s,142)|0;Fc[k[(k[v>>2]|0)+36>>2]&1023](v,e);a:do if((u|0)>0){e=k[g>>2]|0;v=0;while(1){y=+p[b+(k[e+(v<<2)>>2]<<3)>>3];p[x+(v<<3)>>3]=y;z=+$(+y);p[t>>3]=z;A=k[t>>2]|0;C=k[t+4>>2]|0;if(C>>>0>2146435072|(C|0)==2146435072&A>>>0>0){D=8;break}v=v+1|0;if((A|0)==0&(C|0)==2146435072){D=32;break}if((v|0)>=(u|0))break a}if((D|0)==8){v=h+56|0;e=h+4|0;k[h>>2]=27524;k[v>>2]=27544;B=0;wa(508,h+56|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;E=Q;F=C;vva(v);Qb(F|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[v>>2]=27488;B=0;va(448,e|0);C=B;B=0;do if(C&1){A=Rb()|0;G=Q;H=A}else{k[e>>2]=27560;A=h+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(d);Yua(A);Ava(e);G=J;H=I;break}Yua(d);B=0;I=Ia(40,h|0,135564,28)|0;J=B;B=0;b:do if(!(J&1)?(B=0,Xa(239,I|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,i|0,131350,88);L=B;B=0;do if(!(L&1)){B=0;eb(502,j|0,137199,23);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(i);O=M;P=N;break}B=0;wa(510,l|0,e|0);N=B;B=0;if(N&1){N=Rb()|0;R=Q;S=N;T=1}else{B=0;ua(163,K|0,i|0,j|0,397,l|0);N=B;B=0;if(N&1)U=1;else{B=0;eb(503,K|0,1240,229);B=0;U=0}N=Rb()|0;M=Q;Yua(l);R=M;S=N;T=U}Yua(j);Yua(i);if(T){O=S;P=R}else{V=S;W=R;break b}}else{N=Rb()|0;O=N;P=Q}while(0);zb(K|0);V=O;W=P}else D=23;while(0);if((D|0)==23){I=Rb()|0;V=I;W=Q}k[h>>2]=27468;k[v>>2]=27488;k[e>>2]=27560;Yua(A);Ava(e);vva(v);X=W;Y=V;Qb(Y|0)}while(0);E=G;F=H;vva(v);Qb(F|0)}else if((D|0)==32){e=m+56|0;C=m+4|0;k[m>>2]=27524;k[e>>2]=27544;B=0;wa(508,m+56|0,C|0);I=B;B=0;if(I&1){I=Rb()|0;Z=Q;_=I;vva(e);Qb(_|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[e>>2]=27488;B=0;va(448,C|0);I=B;B=0;do if(I&1){J=Rb()|0;aa=Q;ba=J}else{k[C>>2]=27560;J=m+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);L=B;B=0;if(L&1){L=Rb()|0;N=Q;Yua(d);Yua(J);Ava(C);aa=N;ba=L;break}Yua(d);B=0;L=Ia(40,m|0,135593,28)|0;N=B;B=0;c:do if(!(N&1)?(B=0,Xa(239,L|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,n|0,131350,88);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,o|0,137199,23);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(n);fa=da;ga=ea;break}B=0;wa(510,q|0,C|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ha=1;ia=Q;ja=ea}else{B=0;ua(163,M|0,n|0,o|0,398,q|0);ea=B;B=0;if(ea&1)ka=1;else{B=0;eb(503,M|0,1240,229);B=0;ka=0}ea=Rb()|0;da=Q;Yua(q);ha=ka;ia=da;ja=ea}Yua(o);Yua(n);if(ha){fa=ja;ga=ia}else{la=ia;ma=ja;break c}}else{ea=Rb()|0;fa=ea;ga=Q}while(0);zb(M|0);la=ga;ma=fa}else D=47;while(0);if((D|0)==47){L=Rb()|0;la=Q;ma=L}k[m>>2]=27468;k[e>>2]=27488;k[C>>2]=27560;Yua(J);Ava(C);vva(e);X=la;Y=ma;Qb(Y|0)}while(0);Z=aa;_=ba;vva(e);Qb(_|0)}}while(0);rd[k[(k[c>>2]|0)+44>>2]&511](c,127,x,738);Tqa(x);Tqa(w);w=k[g>>2]|0;if(w)Tqa(w);k[g>>2]=0;if((k[f>>2]|0)!=300?(ap(s),(s|0)!=0):0)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);r=a;return}function Ida(a,b){a=a|0;b=b|0;return}function Jda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0;a=r;r=r+208|0;c=a+192|0;d=a+204|0;e=a+188|0;f=a+184|0;g=a;h=a+48|0;j=a+32|0;l=a+20|0;m=a+8|0;cO(k[b+44>>2]|0,f,298);n=b+20|0;if((th(k[n>>2]|0)|0)>0)o=0;else{r=a;return}a:while(1){b=qh(k[n>>2]|0,o)|0;cO(k[b+36>>2]|0,e,150);if(!(k[e>>2]|0)){q=37;break}switch(k[f>>2]|0){case 300:{if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){q=37;break a}s=+Dp(b,215);break}case 302:{s=+Dp(b,214);break}default:{q=7;break a}}t=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;u=t>>>0>536870911?-1:t<<3;v=Rqa(u)|0;w=Rqa(u)|0;x=Rqa(u)|0;y=Rqa(u)|0;z=Rqa(u)|0;A=Rqa(u)|0;C=Rqa(u)|0;u=Wo(b,142)|0;Fc[k[(k[u>>2]|0)+36>>2]&1023](u,d);pp(b,g,358);D=+Dp(b,65);E=+Dp(b,267);F=+Dp(b,265);G=+Dp(b,217);H=+Dp(b,211);I=+Dp(b,151);J=+Dp(b,145);K=+Dp(b,147);L=+ba(+s,+-G);xp(b,w,127);xp(b,x,129);xp(b,y,130);xp(b,z,149);xp(b,A,353);xp(b,C,64);u=(t|0)>0;if(!(i[d>>0]|0)){if(u){M=0;do{p[v+(M<<3)>>3]=J;M=M+1|0}while((M|0)!=(t|0))}}else if(u){J=D*E;N=F*H;M=0;do{O=F*+p[A+(M<<3)>>3];P=D*(O-E*+LY(0.0,+p[w+(M<<3)>>3]-+p[C+(M<<3)>>3]));O=+p[x+(M<<3)>>3];R=+p[y+(M<<3)>>3];S=+p[g>>3];T=+p[z+(M<<3)>>3]*((O*O+R*R)*(I*(J*S/N))+1.0-+ba(+(P<0.0?0.0:P),+G)*(L*S/+ba(+G,+G)*2.0));p[v+(M<<3)>>3]=T>K?K:T;M=M+1|0}while((M|0)!=(t|0))}t=k[b>>2]|0;M=k[t+48>>2]|0;u=Hc[k[t+128>>2]&511](b)|0;rd[M&511](b,148,v,u);Tqa(v);Tqa(w);Tqa(x);Tqa(y);Tqa(z);Tqa(A);Tqa(C);o=o+1|0;if((o|0)>=(th(k[n>>2]|0)|0)){q=37;break}}if((q|0)==7){n=h+56|0;o=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,o|0);g=B;B=0;if(g&1){g=Rb()|0;U=Q;V=g;vva(n);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);g=B;B=0;do if(g&1){d=Rb()|0;W=Q;X=d}else{k[o>>2]=27560;d=h+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);f=B;B=0;if(f&1){f=Rb()|0;e=Q;Yua(c);Yua(d);Ava(o);W=e;X=f;break}Yua(c);B=0;f=Ia(40,h|0,131541,19)|0;e=B;B=0;if(!(e&1)?(B=0,Xa(239,f|0,0)|0,f=B,B=0,!(f&1)):0){f=Ab(20)|0;B=0;eb(502,j|0,131350,88);e=B;B=0;do if(!(e&1)){B=0;eb(502,l|0,131561,19);u=B;B=0;if(u&1){u=Rb()|0;M=Q;Yua(j);Y=u;Z=M;break}B=0;wa(510,m|0,o|0);M=B;B=0;if(M&1){M=Rb()|0;_=M;$=Q;aa=1}else{B=0;ua(163,f|0,j|0,l|0,547,m|0);M=B;B=0;if(M&1)ca=1;else{B=0;eb(503,f|0,1240,229);B=0;ca=0}M=Rb()|0;u=Q;Yua(m);_=M;$=u;aa=ca}Yua(l);Yua(j);if(aa){Y=_;Z=$}else{da=_;ea=$;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(d);Ava(o);vva(n);Qb(da|0)}}else{u=Rb()|0;Y=u;Z=Q}while(0);zb(f|0);da=Y;ea=Z;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(d);Ava(o);vva(n);Qb(da|0)}e=Rb()|0;da=e;ea=Q;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(d);Ava(o);vva(n);Qb(da|0)}while(0);U=W;V=X;vva(n);Qb(V|0)}else if((q|0)==37){r=a;return}}function Kda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0;d=r;r=r+208|0;a=d+188|0;f=d+200|0;g=d+184|0;h=d;j=d+48|0;l=d+32|0;m=d+20|0;n=d+8|0;cp(e,g,298);a:do switch(k[g>>2]|0){case 300:{o=e;break}case 302:{if(Hc[k[(k[e>>2]|0)+248>>2]&511](e)|0){o=Hc[k[(k[e>>2]|0)+432>>2]&511](e)|0;break a}else{r=d;return}break}default:{q=j+56|0;s=j+4|0;k[j>>2]=27524;k[q>>2]=27544;B=0;wa(508,j+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,s|0,a|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(a);Yua(w);Ava(s);x=A;y=z;break}Yua(a);B=0;z=Ia(40,j|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[g>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,l|0,131350,88);D=B;B=0;do if(!(D&1)){B=0;eb(502,m|0,131581,19);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(l);E=z;F=A;break}B=0;wa(510,n|0,s|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,l|0,m|0,666,n|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(n);G=z;H=A;I=J}Yua(m);Yua(l);if(I){E=G;F=H}else{K=G;L=H;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}}while(0);v=Hc[k[(k[o>>2]|0)+164>>2]&511](o)|0;y=v>>>0>536870911?-1:v<<3;x=Rqa(y)|0;u=Rqa(y)|0;L=Rqa(y)|0;j=Rqa(y)|0;K=Rqa(y)|0;M=+Dp(o,145);N=+Dp(o,146);y=Wo(o,142)|0;Fc[k[(k[y>>2]|0)+36>>2]&1023](y,f);xp(o,u,141);xp(o,x,148);xp(o,L,123);xp(o,j,127);xp(o,K,125);O=+p[L>>3];if((v|0)>1){y=1;P=O;while(1){R=+p[L+(y<<3)>>3];S=R<=P?R:P;y=y+1|0;if((y|0)==(v|0)){T=S;break}else P=S}}else T=O;if((v|0)>0){y=o+20|0;F=c+4|0;E=b+4|0;H=(v|0)<1;G=0;do{I=u+(G<<3)|0;O=+p[I>>3];if(O==0.0)p[x+(G<<3)>>3]=M;if(+p[K+(G<<3)>>3]>0.0){l=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0;if(k[b>>2]|0){m=k[k[E>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,1.0,0)}if(+p[I>>3]==0.0?(l=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0,(k[c>>2]|0)!=0):0){m=k[k[F>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,1.0,0)}}else if(O>0.0){l=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0;if(k[b>>2]|0){m=k[k[E>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,1.0,0)}if(+p[x+(G<<3)>>3]<N){l=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0;if(k[b>>2]|0){m=k[k[E>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,0.0,0)}l=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0;if(k[c>>2]|0){m=k[k[F>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,1.0,0)}}}Lda(0,h,o,k[(k[y>>2]|0)+(G<<2)>>2]|0);if(!(((i[f>>0]|0)==0?1:!(+p[j+(G<<3)>>3]>=+p[h>>3]))|H)){l=0;do{if(+p[L+(l<<3)>>3]==T){m=Qn(k[(k[y>>2]|0)+(l<<2)>>2]|0)|0;if(k[b>>2]|0){J=k[k[E>>2]>>2]|0;Jc[k[(k[J>>2]|0)+20>>2]&1](J,m,1.0,0)}if(+p[I>>3]==0.0?(m=Qn(k[(k[y>>2]|0)+(G<<2)>>2]|0)|0,(k[c>>2]|0)!=0):0){J=k[k[F>>2]>>2]|0;Jc[k[(k[J>>2]|0)+20>>2]&1](J,m,1.0,0)}}l=l+1|0}while((l|0)!=(v|0))}G=G+1|0}while((G|0)!=(v|0))}v=k[o>>2]|0;G=k[v+48>>2]|0;F=Hc[k[v+128>>2]&511](o)|0;rd[G&511](o,148,x,F);if((k[g>>2]|0)!=300){ap(o);Ec[k[(k[o>>2]|0)+4>>2]&1023](o)}Tqa(x);Tqa(u);Tqa(L);Tqa(j);Tqa(K);r=d;return}function Lda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;a=r;r=r+400|0;e=a+380|0;f=a+376|0;g=a+16|0;h=a+8|0;i=a;j=a+240|0;l=a+224|0;m=a+72|0;n=a+60|0;o=a+88|0;q=a+48|0;s=a+36|0;t=a+24|0;cp(c,f,153);switch(k[f>>2]|0){case 0:{p[g>>3]=1.0e10;u=1.0e10;p[b>>3]=u;r=a;return}case 1:{pp(c,g,154);u=+p[g>>3];p[b>>3]=u;r=a;return}case 2:{v=+Dp(c,267);w=+Dp(c,265);rd[k[(k[c>>2]|0)+144>>2]&511](c,h,d,353);rd[k[(k[c>>2]|0)+144>>2]&511](c,i,d,64);x=+p[i>>3]+w*+p[h>>3]/v;p[g>>3]=x;u=x;p[b>>3]=u;r=a;return}case 3:{a=j+56|0;b=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,b|0);g=B;B=0;if(g&1){g=Rb()|0;y=Q;z=g;vva(a);Qb(z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);g=B;B=0;do if(g&1){h=Rb()|0;A=Q;C=h}else{k[b>>2]=27560;h=j+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);i=B;B=0;if(i&1){i=Rb()|0;d=Q;Yua(e);Yua(h);Ava(b);A=d;C=i;break}Yua(e);B=0;i=Ia(40,j|0,131601,38)|0;d=B;B=0;a:do if(!(d&1)?(B=0,Xa(239,i|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,l|0,131350,88);f=B;B=0;do if(!(f&1)){B=0;eb(502,m|0,131640,29);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(l);F=D;G=E;break}B=0;wa(510,n|0,b|0);E=B;B=0;if(E&1){E=Rb()|0;H=Q;I=E;J=1}else{B=0;ua(163,c|0,l|0,m|0,809,n|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,c|0,1240,229);B=0;K=0}E=Rb()|0;D=Q;Yua(n);H=D;I=E;J=K}Yua(m);Yua(l);if(J){F=I;G=H}else{L=I;M=H;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(c|0);L=F;M=G}else N=20;while(0);if((N|0)==20){i=Rb()|0;L=i;M=Q}k[j>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(h);Ava(b);vva(a);O=M;P=L;Qb(P|0)}while(0);y=A;z=C;vva(a);Qb(z|0);break}default:{z=o+56|0;a=o+4|0;k[o>>2]=27524;k[z>>2]=27544;B=0;wa(508,o+56|0,a|0);C=B;B=0;if(C&1){C=Rb()|0;R=Q;S=C;vva(z);Qb(S|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[z>>2]=27488;B=0;va(448,a|0);C=B;B=0;do if(C&1){A=Rb()|0;T=Q;U=A}else{k[a>>2]=27560;A=o+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;L=Q;Yua(e);Yua(A);Ava(a);T=L;U=y;break}Yua(e);B=0;y=Ia(40,o|0,131670,43)|0;L=B;B=0;b:do if(!(L&1)?(B=0,Xa(239,y|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,q|0,131350,88);b=B;B=0;do if(!(b&1)){B=0;eb(502,s|0,131640,29);j=B;B=0;if(j&1){j=Rb()|0;G=Q;Yua(q);V=j;W=G;break}B=0;wa(510,t|0,a|0);G=B;B=0;if(G&1){G=Rb()|0;X=1;Y=Q;Z=G}else{B=0;ua(163,M|0,q|0,s|0,812,t|0);G=B;B=0;if(G&1)_=1;else{B=0;eb(503,M|0,1240,229);B=0;_=0}G=Rb()|0;j=Q;Yua(t);X=_;Y=j;Z=G}Yua(s);Yua(q);if(X){V=Z;W=Y}else{$=Y;aa=Z;break b}}else{G=Rb()|0;V=G;W=Q}while(0);zb(M|0);$=W;aa=V}else N=43;while(0);if((N|0)==43){y=Rb()|0;$=Q;aa=y}k[o>>2]=27468;k[z>>2]=27488;k[a>>2]=27560;Yua(A);Ava(a);vva(z);O=$;P=aa;Qb(P|0)}while(0);R=T;S=U;vva(z);Qb(S|0)}}}function Mda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;j=a;cp(c,e,298);a:do switch(k[e>>2]|0){case 300:{l=c;break}case 302:{if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){l=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break a}else{r=a;return}break}default:{m=f+56|0;n=f+4|0;k[f>>2]=27524;k[m>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=f+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,n|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(n);u=x;v=w;break}Yua(d);B=0;w=Ia(40,f|0,144639,5)|0;x=B;B=0;if((((!(x&1)?(B=0,x=ya(427,k[e>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(x)|0,B=0,z=Ia(40,w|0,x|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,g|0,131350,88);z=B;B=0;do if(!(z&1)){B=0;eb(502,h|0,131714,21);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(g);A=w;C=x;break}B=0;wa(510,j|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;D=Q;E=x;F=1}else{B=0;ua(163,y|0,g|0,h|0,749,j|0);x=B;B=0;if(x&1)G=1;else{B=0;eb(503,y|0,1240,229);B=0;G=0}x=Rb()|0;w=Q;Yua(j);D=w;E=x;F=G}Yua(h);Yua(g);if(F){A=D;C=E}else{H=D;I=E;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}}else{x=Rb()|0;A=Q;C=x}while(0);zb(y|0);H=A;I=C;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}z=Rb()|0;H=Q;I=z;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}}while(0);s=Hc[k[(k[l>>2]|0)+164>>2]&511](l)|0;v=Rqa(s>>>0>536870911?-1:s<<3)|0;xp(l,v,141);u=Wo(l,142)|0;Fc[k[(k[u>>2]|0)+36>>2]&1023](u,d);u=(s|0)>0;do if(u){J=0.0;q=0;while(1){K=J+ +p[v+(q<<3)>>3];q=q+1|0;if((q|0)==(s|0)){L=K;break}else J=K}if(L>0.0){if(!u)break;q=l+20|0;m=b+4|0;I=0;do{f=Qn(k[(k[q>>2]|0)+(I<<2)>>2]|0)|0;if(k[b>>2]|0){H=k[k[m>>2]>>2]|0;Jc[k[(k[H>>2]|0)+20>>2]&1](H,f,1.0,0)}I=I+1|0}while((I|0)!=(s|0))}else{if(!((i[d>>0]|0)!=0&u))break;I=l+20|0;m=b+4|0;q=0;do{f=Qn(k[(k[I>>2]|0)+(q<<2)>>2]|0)|0;if(k[b>>2]|0){H=k[k[m>>2]>>2]|0;Jc[k[(k[H>>2]|0)+20>>2]&1](H,f,1.0,0)}q=q+1|0}while((q|0)!=(s|0))}}while(0);if((k[e>>2]|0)!=300?(ap(l),(l|0)!=0):0)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);Tqa(v);r=a;return}function Nda(a){a=a|0;Sqa(a);return}function Oda(a,b,c){a=a|0;b=b|0;c=c|0;return}function Pda(a,b,c){a=a|0;b=b|0;c=c|0;return}function Qda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;a=r;r=r+32|0;d=a+16|0;e=a+8|0;f=a;g=a+20|0;h=a+24|0;Fka(c,g,131762);if((k[g>>2]|0)!=122){r=a;return}zka(c,h,131781);if(i[h>>0]|0){switch(k[c+40>>2]|0){case 302:{k[f>>2]=136615;Ska(c,1,f);break}case 301:{k[e>>2]=136615;Ska(c,1,e);break}default:{}}hoa(b,c,492,738,534);k[d>>2]=136615;Lka(c,1,d)}r=a;return}function Rda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Sda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=r;r=r+16|0;f=a+4|0;g=a;Fka(c,g,131762);if((k[g>>2]|0)!=122){r=a;return}zka(c,f,131781);if(!(i[f>>0]|0)){r=a;return}f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,131811,127);Zka(c,b,137867,206);if((k[c+40>>2]|0)==300){r=a;return}Zka(c,b,136615,287);Zka(c,b,136636,288);r=a;return}function Tda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function Uda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131838,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Vda(a,b){a=a|0;b=b|0;return 0}function Wda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131838,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,81,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Xda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+208|0;c=a+136|0;d=a+188|0;e=a+192|0;f=a;g=a+176|0;h=a+164|0;j=a+152|0;l=a+148|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{m=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){m=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{n=0;r=a;return n|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){m=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{n=0;r=a;return n|0}break}default:{o=f+56|0;q=f+4|0;k[f>>2]=27524;k[o>>2]=27544;B=0;wa(508,f+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=f+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;y=Ia(40,f|0,144639,5)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,k[d>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,y|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,g|0,131838,83);C=B;B=0;do if(!(C&1)){B=0;eb(502,h|0,144189,13);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(g);D=z;E=y;break}B=0;wa(510,j|0,q|0);y=B;B=0;if(y&1){y=Rb()|0;F=y;G=Q;H=1}else{B=0;ua(163,A|0,g|0,h|0,104,j|0);y=B;B=0;if(y&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}y=Rb()|0;z=Q;Yua(j);F=y;G=z;H=I}Yua(h);Yua(g);if(H){D=F;E=G}else{J=F;K=G;k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}}else{z=Rb()|0;D=z;E=Q}while(0);zb(A|0);J=D;K=E;k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}C=Rb()|0;J=C;K=Q;k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}}while(0);u=Wo(m,142)|0;Fc[k[(k[u>>2]|0)+36>>2]&1023](u,e);if(!(i[e>>0]|0)){if((k[d>>2]|0)==300){n=0;r=a;return n|0}ap(m);if(!m){n=0;r=a;return n|0}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);n=0;r=a;return n|0}k[l>>2]=0;e=Hc[k[(k[m>>2]|0)+164>>2]&511](m)|0;u=gq(m,534)|0;x=Rqa(e>>>0>536870911?-1:e<<3)|0;Uo(m,l);w=ed[k[(k[m>>2]|0)+308>>2]&511](m,2)|0;t=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;if((t|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){J=w+8|0;K=u+12|0;E=t;do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,E);rd[k[(k[m>>2]|0)+260>>2]&511](m,f,k[l>>2]|0,w);nd[k[(k[m>>2]|0)+336>>2]&1023](m,x,w);p[c>>3]=+p[J>>3]*+p[f>>3];ZX(x,1,e,1,c,1,1,0,x,1,e,0,k[K>>2]|0,1)|0;E=E+1|0}while((E|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}E=k[l>>2]|0;if(E)Tqa(E);k[l>>2]=0;Tqa(x);Ec[k[(k[w>>2]|0)+4>>2]&1023](w);if((k[d>>2]|0)!=300?(ap(m),(m|0)!=0):0)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);n=u;r=a;return n|0}function Yda(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;a=r;r=r+416|0;c=a+388|0;d=a+384|0;e=a+400|0;f=a+248|0;g=a+232|0;h=a+220|0;j=a+204|0;l=a+216|0;m=a+16|0;n=a;o=a+200|0;q=a+64|0;s=a+48|0;t=a+36|0;u=a+24|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{v=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){v=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{w=0;r=a;return w|0}break}default:{x=f+56|0;y=f+4|0;k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,f+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=f+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(y);E=H;F=G;break}Yua(c);B=0;G=Ia(40,f|0,144639,5)|0;H=B;B=0;b:do if((((!(H&1)?(B=0,I=ya(427,k[d>>2]|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,G|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,146481,18)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,g|0,131838,83);K=B;B=0;do if(!(K&1)){B=0;eb(502,h|0,144203,13);I=B;B=0;if(I&1){I=Rb()|0;L=Q;Yua(g);M=L;N=I;break}B=0;wa(510,j|0,y|0);I=B;B=0;if(I&1){I=Rb()|0;O=Q;P=I;R=1}else{B=0;ua(163,J|0,g|0,h|0,172,j|0);I=B;B=0;if(I&1)S=1;else{B=0;eb(503,J|0,1240,229);B=0;S=0}I=Rb()|0;L=Q;Yua(j);O=L;P=I;R=S}Yua(h);Yua(g);if(R){M=O;N=P}else{T=O;U=P;break b}}else{I=Rb()|0;M=Q;N=I}while(0);zb(J|0);T=M;U=N}else V=22;while(0);if((V|0)==22){G=Rb()|0;T=Q;U=G}k[f>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);W=U;X=T;Qb(W|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}}while(0);C=Wo(v,142)|0;Fc[k[(k[C>>2]|0)+36>>2]&1023](C,e);if(!(i[e>>0]|0)){if((k[d>>2]|0)==300){w=0;r=a;return w|0}ap(v);if(!v){w=0;r=a;return w|0}Ec[k[(k[v>>2]|0)+4>>2]&1023](v);w=0;r=a;return w|0}k[o>>2]=0;e=Hc[k[(k[v>>2]|0)+164>>2]&511](v)|0;C=iq(v,534)|0;F=Rqa(e>>>0>536870911?-1:e<<3)|0;Uo(v,o);cp(v,l,576);switch(k[l>>2]|0){case 129:{Y=0;Z=Wo(v,127)|0;break}case 130:{Y=1;Z=Wo(v,127)|0;break}default:{l=q+56|0;E=q+4|0;k[q>>2]=27524;k[l>>2]=27544;B=0;wa(508,q+56|0,E|0);A=B;B=0;if(A&1){A=Rb()|0;_=Q;$=A;vva(l);Qb($|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[l>>2]=27488;B=0;va(448,E|0);A=B;B=0;do if(A&1){T=Rb()|0;aa=Q;ba=T}else{k[E>>2]=27560;T=q+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;f=Q;Yua(c);Yua(T);Ava(E);aa=f;ba=U;break}Yua(c);B=0;U=Ia(40,q|0,143640,15)|0;f=B;B=0;c:do if(!(f&1)?(B=0,Xa(239,U|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,s|0,131838,83);M=B;B=0;do if(!(M&1)){B=0;eb(502,t|0,144203,13);P=B;B=0;if(P&1){P=Rb()|0;O=Q;Yua(s);ca=O;da=P;break}B=0;wa(510,u|0,E|0);P=B;B=0;if(P&1){P=Rb()|0;ea=1;fa=P;ga=Q}else{B=0;ua(163,N|0,s|0,t|0,206,u|0);P=B;B=0;if(P&1)ha=1;else{B=0;eb(503,N|0,1240,229);B=0;ha=0}P=Rb()|0;O=Q;Yua(u);ea=ha;fa=P;ga=O}Yua(t);Yua(s);if(ea){ca=ga;da=fa}else{ia=fa;ja=ga;break c}}else{O=Rb()|0;ca=Q;da=O}while(0);zb(N|0);ia=da;ja=ca}else V=52;while(0);if((V|0)==52){U=Rb()|0;ia=U;ja=Q}k[q>>2]=27468;k[l>>2]=27488;k[E>>2]=27560;Yua(T);Ava(E);vva(l);W=ia;X=ja;Qb(W|0)}while(0);_=aa;$=ba;vva(l);Qb($|0)}}$=ed[k[(k[v>>2]|0)+308>>2]&511](v,2)|0;l=Hc[k[(k[$>>2]|0)+8>>2]&511]($)|0;d:do if((l|0)<(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0)){ba=$+8|0;aa=n+(Y<<3)|0;_=C+4|0;if((e|0)>0)ka=l;else{W=l;while(1){Fc[k[(k[$>>2]|0)+24>>2]&1023]($,W);rd[k[(k[v>>2]|0)+260>>2]&511](v,m,k[o>>2]|0,$);nd[k[(k[v>>2]|0)+336>>2]&1023](v,F,$);rd[k[(k[Z>>2]|0)+60>>2]&511](Z,n,k[o>>2]|0,$);W=W+1|0;if((W|0)>=(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0))break d}}do{Fc[k[(k[$>>2]|0)+24>>2]&1023]($,ka);rd[k[(k[v>>2]|0)+260>>2]&511](v,m,k[o>>2]|0,$);nd[k[(k[v>>2]|0)+336>>2]&1023](v,F,$);rd[k[(k[Z>>2]|0)+60>>2]&511](Z,n,k[o>>2]|0,$);W=k[_>>2]|0;T=0;do{ja=W+(T<<3)|0;p[ja>>3]=+p[m>>3]*+p[ba>>3]*+p[aa>>3]*+p[F+(T<<3)>>3]+ +p[ja>>3];T=T+1|0}while((T|0)!=(e|0));ka=ka+1|0}while((ka|0)<(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0))}while(0);ka=k[o>>2]|0;if(ka)Tqa(ka);k[o>>2]=0;Tqa(F);Ec[k[(k[$>>2]|0)+4>>2]&1023]($);if((k[d>>2]|0)!=300?(ap(v),(v|0)!=0):0)Ec[k[(k[v>>2]|0)+4>>2]&1023](v);w=C;r=a;return w|0}function Zda(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131838,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,229,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function _da(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,131838,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,232,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function $da(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+208|0;d=a+184|0;e=a+180|0;f=a+176|0;g=a+40|0;h=a+24|0;i=a+12|0;j=a;cp(c,e,576);cp(c,f,298);switch(k[f>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}case 301:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,k[e>>2]|0);r=a;return}default:{a=g+56|0;e=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(a);Qb(m|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,e|0);b=B;B=0;do if(b&1){c=Rb()|0;n=Q;o=c}else{k[e>>2]=27560;c=g+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(c);Ava(e);n=q;o=p;break}Yua(d);B=0;p=Ia(40,g|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[f>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,131838,83);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(h);u=p;v=q;break}B=0;wa(510,j|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,249,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(j);w=p;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}while(0);l=n;m=o;vva(a);Qb(m|0)}}}function aea(a,b){a=a|0;b=b|0;return}function bea(a){a=a|0;Sqa(a);return}function cea(a,b,c){a=a|0;b=b|0;c=c|0;return}
+-function Hu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0;d=r;r=r+304|0;e=d+280|0;f=d+268|0;g=d+56|0;h=d+32|0;j=d+8|0;l=d+292|0;m=d+264|0;n=d+260|0;o=d+256|0;q=d;s=d+120|0;t=d+104|0;u=d+92|0;v=d+80|0;i[l>>0]=0;k[o>>2]=0;Gka(c,q,106352);zka(c,l,139791);if((i[l>>0]|0)!=0?(Fka(c,m,113066),(i[l>>0]|0)!=0):0)Fka(c,n,113428);w=b*3|0;x=k[c+72>>2]|0;y=k[x+(w<<2)>>2]|0;k[f>>2]=y;z=k[x+(w+1<<2)>>2]|0;A=f+4|0;k[A>>2]=z;C=k[x+(w+2<<2)>>2]|0;w=f+8|0;k[w>>2]=C;do if(Jka(c,129145)|0){x=k[a+16>>2]|0;D=Qqa(12)|0;B=0;E=Xa(246,c|0,129145)|0;F=B;B=0;if(!(F&1)?(B=0,eb(508,D|0,533,~~+p[E+(b<<3)>>3]|0),E=B,B=0,!(E&1)):0){mC(x,D)|0;break}x=Rb()|0;E=Q;Sqa(D);G=E;H=x;Qb(H|0)}while(0);if(!(i[l>>0]|0)){r=d;return}Hka(c,o,0,113102);do if((k[m>>2]|0)>0){b=a+16|0;x=g+8|0;E=g+16|0;D=h+8|0;F=h+16|0;I=j+8|0;J=j+16|0;K=k[A>>2]|0;L=K+-1|0;M=g+8|0;N=k[w>>2]|0;O=N+-1|0;P=g+16|0;R=k[f>>2]|0;S=R+-1|0;T=h+8|0;U=h+16|0;V=j+8|0;W=j+16|0;X=(k[A>>2]|0)+-1|0;Y=g+8|0;Z=(k[w>>2]|0)+-1|0;_=g+16|0;$=(k[f>>2]|0)+-1|0;aa=(k[A>>2]|0)+-1|0;ba=h+8|0;ca=(k[w>>2]|0)+-1|0;da=h+16|0;ea=k[f>>2]|0;fa=ea+-1|0;ga=k[A>>2]|0;ha=ga+-1|0;ia=j+8|0;ja=k[w>>2]|0;ka=ja+-1|0;la=j+16|0;na=ga+-1|0;oa=g+8|0;pa=ja+-1|0;qa=g+16|0;ra=(k[f>>2]|0)+-1|0;sa=(k[A>>2]|0)+-1|0;ta=h+8|0;xa=(k[w>>2]|0)+-1|0;za=h+16|0;Aa=k[f>>2]|0;Ba=Aa+-1|0;Ca=k[A>>2]|0;Da=Ca+-1|0;Ea=j+8|0;Fa=k[w>>2]|0;Ga=Fa+-1|0;Ha=j+16|0;Ja=Ca+-1|0;Ka=g+8|0;La=Fa+-1|0;Ma=g+16|0;Na=(k[f>>2]|0)+-1|0;Oa=(k[A>>2]|0)+-1|0;Pa=h+8|0;Qa=(k[w>>2]|0)+-1|0;Ra=h+16|0;Sa=k[f>>2]|0;Ua=Sa+-1|0;Va=k[A>>2]|0;Wa=Va+-1|0;Ya=j+8|0;Za=k[w>>2]|0;_a=Za+-1|0;$a=j+16|0;ab=Va+-1|0;bb=g+8|0;cb=Za+-1|0;db=g+16|0;fb=(k[f>>2]|0)+-1|0;gb=(k[A>>2]|0)+-1|0;hb=h+8|0;jb=(k[w>>2]|0)+-1|0;kb=h+16|0;lb=k[f>>2]|0;mb=lb+-1|0;nb=k[A>>2]|0;ob=nb+-1|0;pb=j+8|0;qb=k[w>>2]|0;rb=qb+-1|0;sb=j+16|0;tb=nb+-1|0;ub=g+8|0;vb=qb+-1|0;wb=g+16|0;xb=(k[f>>2]|0)+-1|0;yb=(k[A>>2]|0)+-1|0;Bb=h+8|0;Cb=(k[w>>2]|0)+-1|0;Db=h+16|0;Eb=k[f>>2]|0;Fb=Eb+-1|0;Gb=k[A>>2]|0;Hb=Gb+-1|0;Ib=j+8|0;Jb=k[w>>2]|0;Kb=Jb+-1|0;Lb=j+16|0;Mb=y;Nb=z;Ob=C;Pb=0;a:while(1){Sb=zY(k[(k[o>>2]|0)+(Pb<<2)>>2]|0,1)|0;switch(Sb|0){case 36:{if(!(Jka(c,126035)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Wb=Mb+-1|0;Xb=(Jka(c,126035)|0)+(Wb<<3)|0;p[g>>3]=+p[Xb>>3];Xb=Nb+-1|0;Yb=(Jka(c,126035)|0)+(Xb<<3)|0;p[x>>3]=+p[Yb>>3];Yb=Ob+-1|0;Zb=(Jka(c,126035)|0)+(Yb<<3)|0;p[E>>3]=+p[Zb>>3];Zb=(ma(Wb,k[m>>2]|0)|0)+Pb|0;_b=(Jka(c,113372)|0)+(Zb<<3)|0;p[h>>3]=+p[_b>>3]/+p[q>>3];_b=(ma(Xb,k[m>>2]|0)|0)+Pb|0;Zb=(Jka(c,113372)|0)+(_b<<3)|0;p[D>>3]=+p[Zb>>3]/+p[q>>3];Zb=(ma(Yb,k[m>>2]|0)|0)+Pb|0;_b=(Jka(c,113372)|0)+(Zb<<3)|0;p[F>>3]=+p[_b>>3]/+p[q>>3];_b=(ma(Wb,k[m>>2]|0)|0)+Pb|0;Wb=(Jka(c,113400)|0)+(_b<<3)|0;p[j>>3]=+p[Wb>>3]/+p[q>>3];Wb=(ma(Xb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Wb<<3)|0;p[I>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(Yb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[J>>3]=+p[Yb>>3]/+p[q>>3];Yb=k[b>>2]|0;Xb=Qqa(32)|0;B=0;Ta(31,Xb|0,36,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){$b=Xb;ac=18;break a}mC(Yb,Xb)|0;Tb=Ob;Ub=Nb;Vb=Mb}break}case 674:{if(!(Jka(c,135923)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Xb=(Jka(c,135923)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Xb>>3];Xb=(Jka(c,135923)|0)+(L<<3)|0;p[M>>3]=+p[Xb>>3];Xb=(Jka(c,135923)|0)+(O<<3)|0;p[P>>3]=+p[Xb>>3];Xb=(ma(S,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[h>>3]=+p[Yb>>3]/+p[q>>3];Yb=(ma(L,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[T>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(O,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[U>>3]=+p[Yb>>3]/+p[q>>3];Yb=(ma(S,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[j>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(L,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[V>>3]=+p[Yb>>3]/+p[q>>3];Yb=(ma(O,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[W>>3]=+p[Xb>>3]/+p[q>>3];Xb=k[b>>2]|0;Yb=Qqa(32)|0;B=0;Ta(31,Yb|0,674,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){bc=Yb;ac=22;break a}mC(Xb,Yb)|0;Tb=N;Ub=K;Vb=R}break}case 677:{if(!(Jka(c,135944)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Yb=(Jka(c,135944)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Yb>>3];Yb=(Jka(c,135944)|0)+(X<<3)|0;p[Y>>3]=+p[Yb>>3];Yb=(Jka(c,135944)|0)+(Z<<3)|0;p[_>>3]=+p[Yb>>3];Yb=(ma($,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[h>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(aa,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[ba>>3]=+p[Yb>>3]/+p[q>>3];Yb=(ma(ca,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[da>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(fa,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[j>>3]=+p[Yb>>3]/+p[q>>3];Yb=(ma(ha,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[ia>>3]=+p[Xb>>3]/+p[q>>3];Xb=(ma(ka,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[la>>3]=+p[Yb>>3]/+p[q>>3];Yb=k[b>>2]|0;Xb=Qqa(32)|0;B=0;Ta(31,Xb|0,677,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){cc=Xb;ac=26;break a}mC(Yb,Xb)|0;Tb=ja;Ub=ga;Vb=ea}break}case 353:{if(!(Jka(c,137052)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Xb=(Jka(c,137052)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Xb>>3];Xb=(Jka(c,137052)|0)+(na<<3)|0;p[oa>>3]=+p[Xb>>3];Xb=(Jka(c,137052)|0)+(pa<<3)|0;p[qa>>3]=+p[Xb>>3];Xb=(ma(ra,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[h>>3]=+p[Yb>>3];Yb=(ma(sa,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[ta>>3]=+p[Xb>>3];Xb=(ma(xa,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[za>>3]=+p[Yb>>3];Yb=(ma(Ba,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[j>>3]=+p[Xb>>3];Xb=(ma(Da,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[Ea>>3]=+p[Yb>>3];Yb=(ma(Ga,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[Ha>>3]=+p[Xb>>3];Xb=k[b>>2]|0;Yb=Qqa(32)|0;B=0;Ta(31,Yb|0,353,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){dc=Yb;ac=30;break a}mC(Xb,Yb)|0;Tb=Fa;Ub=Ca;Vb=Aa}break}case 105:{if(!(Jka(c,135172)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Yb=(Jka(c,135172)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Yb>>3];Yb=(Jka(c,135172)|0)+(Ja<<3)|0;p[Ka>>3]=+p[Yb>>3];Yb=(Jka(c,135172)|0)+(La<<3)|0;p[Ma>>3]=+p[Yb>>3];Yb=(ma(Na,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[h>>3]=+p[Xb>>3];Xb=(ma(Oa,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[Pa>>3]=+p[Yb>>3];Yb=(ma(Qa,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[Ra>>3]=+p[Xb>>3];Xb=(ma(Ua,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[j>>3]=+p[Yb>>3];Yb=(ma(Wa,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[Ya>>3]=+p[Xb>>3];Xb=(ma(_a,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[$a>>3]=+p[Yb>>3];Yb=k[b>>2]|0;Xb=Qqa(32)|0;B=0;Ta(31,Xb|0,105,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){ec=Xb;ac=34;break a}mC(Yb,Xb)|0;Tb=Za;Ub=Va;Vb=Sa}break}case 215:{if(!(Jka(c,134991)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Xb=(Jka(c,134991)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Xb>>3];Xb=(Jka(c,134991)|0)+(ab<<3)|0;p[bb>>3]=+p[Xb>>3];Xb=(Jka(c,134991)|0)+(cb<<3)|0;p[db>>3]=+p[Xb>>3];Xb=(ma(fb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[h>>3]=+p[Yb>>3];Yb=(ma(gb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[hb>>3]=+p[Xb>>3];Xb=(ma(jb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[kb>>3]=+p[Yb>>3];Yb=(ma(mb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[j>>3]=+p[Xb>>3];Xb=(ma(ob,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[pb>>3]=+p[Yb>>3];Yb=(ma(rb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[sb>>3]=+p[Xb>>3];Xb=k[b>>2]|0;Yb=Qqa(32)|0;B=0;Ta(31,Yb|0,215,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){fc=Yb;ac=38;break a}mC(Xb,Yb)|0;Tb=qb;Ub=nb;Vb=lb}break}case 227:{if(!(Jka(c,126277)|0)){Tb=Ob;Ub=Nb;Vb=Mb}else{Yb=(Jka(c,126277)|0)+(Mb+-1<<3)|0;p[g>>3]=+p[Yb>>3];Yb=(Jka(c,126277)|0)+(tb<<3)|0;p[ub>>3]=+p[Yb>>3];Yb=(Jka(c,126277)|0)+(vb<<3)|0;p[wb>>3]=+p[Yb>>3];Yb=(ma(xb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[h>>3]=+p[Xb>>3];Xb=(ma(yb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113372)|0)+(Xb<<3)|0;p[Bb>>3]=+p[Yb>>3];Yb=(ma(Cb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113372)|0)+(Yb<<3)|0;p[Db>>3]=+p[Xb>>3];Xb=(ma(Fb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[j>>3]=+p[Yb>>3];Yb=(ma(Hb,k[m>>2]|0)|0)+Pb|0;Xb=(Jka(c,113400)|0)+(Yb<<3)|0;p[Ib>>3]=+p[Xb>>3];Xb=(ma(Kb,k[m>>2]|0)|0)+Pb|0;Yb=(Jka(c,113400)|0)+(Xb<<3)|0;p[Lb>>3]=+p[Yb>>3];Yb=k[b>>2]|0;Xb=Qqa(32)|0;B=0;Ta(31,Xb|0,227,622,g|0,h|0,j|0,Pb+1|0);Wb=B;B=0;if(Wb&1){gc=Xb;ac=42;break a}mC(Yb,Xb)|0;Tb=Jb;Ub=Gb;Vb=Eb}break}default:{hc=Sb;ac=43;break a}}Pb=Pb+1|0;Sb=k[m>>2]|0;if((Pb|0)>=(Sb|0)){ic=Tb;jc=Ub;kc=Vb;lc=Sb;ac=13;break}else{Mb=Vb;Nb=Ub;Ob=Tb}}if((ac|0)==13){Ob=k[o>>2]|0;if((lc|0)>0){mc=Ob;nc=lc;oc=0}else{pc=Ob;qc=kc;rc=jc;sc=ic;break}while(1){Ob=mc+(oc<<2)|0;Nb=k[Ob>>2]|0;if(!Nb)tc=nc;else{Tqa(Nb);tc=k[m>>2]|0}k[Ob>>2]=0;oc=oc+1|0;Ob=k[o>>2]|0;if((oc|0)>=(tc|0)){pc=Ob;qc=kc;rc=jc;sc=ic;break}else{mc=Ob;nc=tc}}}else if((ac|0)==18){Ob=Rb()|0;Nb=Q;Sqa($b);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==22){Ob=Rb()|0;Nb=Q;Sqa(bc);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==26){Ob=Rb()|0;Nb=Q;Sqa(cc);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==30){Ob=Rb()|0;Nb=Q;Sqa(dc);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==34){Ob=Rb()|0;Nb=Q;Sqa(ec);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==38){Ob=Rb()|0;Nb=Q;Sqa(fc);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==42){Ob=Rb()|0;Nb=Q;Sqa(gc);G=Nb;H=Ob;Qb(H|0)}else if((ac|0)==43){Ob=s+56|0;Nb=s+4|0;k[s>>2]=27524;k[Ob>>2]=27544;B=0;wa(508,s+56|0,Nb|0);Mb=B;B=0;if(Mb&1){Mb=Rb()|0;uc=Q;vc=Mb;vva(Ob);Qb(vc|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ob>>2]=27488;B=0;va(448,Nb|0);Mb=B;B=0;do if(Mb&1){Pb=Rb()|0;wc=Q;xc=Pb}else{k[Nb>>2]=27560;Pb=s+36|0;k[Pb>>2]=0;k[Pb+4>>2]=0;k[Pb+8>>2]=0;k[Pb+12>>2]=0;k[s+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Nb|0,e|0);Eb=B;B=0;if(Eb&1){Eb=Rb()|0;Gb=Q;Yua(e);Yua(Pb);Ava(Nb);wc=Gb;xc=Eb;break}Yua(e);B=0;Eb=Ia(40,s|0,125582,8)|0;Gb=B;B=0;b:do if((((!(Gb&1)?(B=0,Jb=ya(427,hc|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(Jb)|0,B=0,Lb=Ia(40,Eb|0,Jb|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,Lb|0,127493,20)|0,Lb=B,B=0,!(Lb&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,t|0,71825,72);Lb=B;B=0;do if(!(Lb&1)){B=0;eb(502,u|0,144327,22);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Kb=Q;Yua(t);yc=Kb;zc=Jb;break}B=0;wa(510,v|0,Nb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Ac=Q;Bc=Jb;Cc=1}else{B=0;ua(163,b|0,t|0,u|0,1908,v|0);Jb=B;B=0;if(Jb&1)Dc=1;else{B=0;eb(503,b|0,1240,229);B=0;Dc=0}Jb=Rb()|0;Kb=Q;Yua(v);Ac=Kb;Bc=Jb;Cc=Dc}Yua(u);Yua(t);if(Cc){yc=Ac;zc=Bc}else{Ec=Ac;Fc=Bc;break b}}else{Jb=Rb()|0;yc=Q;zc=Jb}while(0);zb(b|0);Ec=yc;Fc=zc}else ac=61;while(0);if((ac|0)==61){Eb=Rb()|0;Ec=Q;Fc=Eb}k[s>>2]=27468;k[Ob>>2]=27488;k[Nb>>2]=27560;Yua(Pb);Ava(Nb);vva(Ob);G=Ec;H=Fc;Qb(H|0)}while(0);uc=wc;vc=xc;vva(Ob);Qb(vc|0)}}else{pc=k[o>>2]|0;qc=y;rc=z;sc=C}while(0);if(pc)Tqa(pc);k[o>>2]=0;if(!(i[l>>0]|0)){r=d;return}if(!(Jka(c,113331)|0)){r=d;return}l=Qqa(20)|0;B=0;wa(516,l|0,179);o=B;B=0;if(o&1){o=Rb()|0;pc=Q;Sqa(l);G=pc;H=o;Qb(H|0)}o=k[n>>2]|0;c:do if((o|0)>0){pc=qc+-1|0;C=rc+-1|0;z=g+8|0;y=sc+-1|0;vc=g+16|0;xc=o;wc=0;while(1){uc=(ma(pc,xc)|0)+wc|0;Fc=(Jka(c,113331)|0)+(uc<<3)|0;p[g>>3]=+p[Fc>>3];Fc=(ma(C,k[n>>2]|0)|0)+wc|0;uc=(Jka(c,113331)|0)+(Fc<<3)|0;p[z>>3]=+p[uc>>3];uc=(ma(y,k[n>>2]|0)|0)+wc|0;Fc=(Jka(c,113331)|0)+(uc<<3)|0;p[vc>>3]=+p[Fc>>3];Fc=Qqa(16)|0;B=0;ib(284,Fc|0,179,g|0,738);uc=B;B=0;if(uc&1){Gc=Fc;break}uc=(Jka(c,113303)|0)+(wc<<3)|0;XH(l,Fc,~~+p[uc>>3]);wc=wc+1|0;xc=k[n>>2]|0;if((wc|0)>=(xc|0))break c}xc=Rb()|0;wc=Q;Sqa(Gc);G=wc;H=xc;Qb(H|0)}while(0);mC(k[a+16>>2]|0,l)|0;r=d;return}function Iu(a,b,c){a=a|0;b=b|0;c=c|0;Hu(a+-4|0,b,c);return}function Ju(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;d=r;r=r+368|0;e=d+356|0;f=d+352|0;g=d+216|0;h=d+200|0;i=d+48|0;j=d+36|0;l=d+64|0;m=d+24|0;n=d+12|0;o=d;k[f>>2]=0;q=qw(a,k[a+44>>2]|0)|0;rp(a,f,534,943);s=Rqa(q>>>0>536870911?-1:q<<3)|0;a:do if((q|0)>0){u=k[f>>2]|0;v=0;while(1){w=+p[b+(k[u+(v<<2)>>2]<<3)>>3];p[s+(v<<3)>>3]=w;x=+$(+w);p[t>>3]=x;y=k[t>>2]|0;z=k[t+4>>2]|0;if(z>>>0>2146435072|(z|0)==2146435072&y>>>0>0){A=6;break}v=v+1|0;if((y|0)==0&(z|0)==2146435072){A=30;break}if((v|0)>=(q|0))break a}if((A|0)==6){v=g+56|0;u=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,u|0);z=B;B=0;if(z&1){z=Rb()|0;C=Q;D=z;vva(v);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,u|0);z=B;B=0;do if(z&1){y=Rb()|0;E=Q;F=y}else{k[u>>2]=27560;y=g+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);Yua(y);Ava(u);E=H;F=G;break}Yua(e);B=0;G=Ia(40,g|0,135564,28)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,G|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,71825,72);J=B;B=0;do if(!(J&1)){B=0;eb(502,i|0,74717,29);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(h);M=K;N=L;break}B=0;wa(510,j|0,u|0);L=B;B=0;if(L&1){L=Rb()|0;O=Q;P=L;R=1}else{B=0;ua(163,I|0,h|0,i|0,1945,j|0);L=B;B=0;if(L&1)S=1;else{B=0;eb(503,I|0,1240,229);B=0;S=0}L=Rb()|0;K=Q;Yua(j);O=K;P=L;R=S}Yua(i);Yua(h);if(R){M=P;N=O}else{T=P;U=O;break b}}else{L=Rb()|0;M=L;N=Q}while(0);zb(I|0);T=M;U=N}else A=21;while(0);if((A|0)==21){G=Rb()|0;T=G;U=Q}k[g>>2]=27468;k[v>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(v);V=U;W=T;Qb(W|0)}while(0);C=E;D=F;vva(v);Qb(D|0)}else if((A|0)==30){u=l+56|0;z=l+4|0;k[l>>2]=27524;k[u>>2]=27544;B=0;wa(508,l+56|0,z|0);G=B;B=0;if(G&1){G=Rb()|0;X=Q;Y=G;vva(u);Qb(Y|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[u>>2]=27488;B=0;va(448,z|0);G=B;B=0;do if(G&1){H=Rb()|0;Z=Q;_=H}else{k[z>>2]=27560;H=l+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,z|0,e|0);J=B;B=0;if(J&1){J=Rb()|0;L=Q;Yua(e);Yua(H);Ava(z);Z=L;_=J;break}Yua(e);B=0;J=Ia(40,l|0,135593,28)|0;L=B;B=0;c:do if(!(L&1)?(B=0,Xa(239,J|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,m|0,71825,72);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,n|0,74717,29);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(m);da=ba;ea=ca;break}B=0;wa(510,o|0,z|0);ca=B;B=0;if(ca&1){ca=Rb()|0;fa=1;ga=Q;ha=ca}else{B=0;ua(163,K|0,m|0,n|0,1946,o|0);ca=B;B=0;if(ca&1)ia=1;else{B=0;eb(503,K|0,1240,229);B=0;ia=0}ca=Rb()|0;ba=Q;Yua(o);fa=ia;ga=ba;ha=ca}Yua(n);Yua(m);if(fa){da=ha;ea=ga}else{ja=ga;ka=ha;break c}}else{ca=Rb()|0;da=ca;ea=Q}while(0);zb(K|0);ja=ea;ka=da}else A=45;while(0);if((A|0)==45){J=Rb()|0;ja=Q;ka=J}k[l>>2]=27468;k[u>>2]=27488;k[z>>2]=27560;Yua(H);Ava(z);vva(u);V=ja;W=ka;Qb(W|0)}while(0);X=Z;Y=_;vva(u);Qb(Y|0)}}while(0);Y=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(284,a|0,c|0,s|0,738);c=B;B=0;if(c&1){c=Rb()|0;_=Q;Sqa(a);V=_;W=c;Qb(W|0)}mC(Y,a)|0;Tqa(s);s=k[f>>2]|0;if(!s){r=d;return}Tqa(s);r=d;return}function Ku(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0;e=r;r=r+896|0;f=e+872|0;g=e+844|0;h=e+696|0;i=e+860|0;j=e+848|0;l=e+832|0;m=e+544|0;n=e+680|0;o=e+396|0;q=e+384|0;s=e+408|0;u=e+96|0;v=e+84|0;w=e+72|0;x=e+248|0;y=e+60|0;z=e+48|0;A=e+36|0;C=e+112|0;D=e+24|0;E=e+12|0;F=e;if(!(Tp(a,c)|0)){r=e;return}k[g>>2]=0;a:do switch(d|0){case 628:{G=Rqa(24)|0;H=a+24|0;I=b+((Co(k[k[H>>2]>>2]|0)|0)<<3)|0;p[G>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+4>>2]|0)|0)<<3)|0;p[G+8>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+8>>2]|0)|0)<<3)|0;p[G+16>>3]=+p[I>>3];I=k[a+16>>2]|0;H=Qqa(16)|0;B=0;ib(284,H|0,c|0,G|0,738);J=B;B=0;if(!(J&1)){mC(I,H)|0;K=G;break a}G=Rb()|0;I=Q;Sqa(H);L=I;M=G;Qb(M|0);break}case 629:{G=Rqa(24)|0;I=a+24|0;H=b+((Bo(k[k[I>>2]>>2]|0)|0)<<3)|0;p[G>>3]=+p[H>>3];H=b+((Bo(k[(k[I>>2]|0)+4>>2]|0)|0)<<3)|0;p[G+8>>3]=+p[H>>3];H=b+((Bo(k[(k[I>>2]|0)+8>>2]|0)|0)<<3)|0;p[G+16>>3]=+p[H>>3];H=k[a+16>>2]|0;I=Qqa(16)|0;B=0;ib(284,I|0,c|0,G|0,738);J=B;B=0;if(!(J&1)){mC(H,I)|0;K=G;break a}G=Rb()|0;H=Q;Sqa(I);L=H;M=G;Qb(M|0);break}case 549:{G=a+44|0;H=qw(a,k[G>>2]|0)|0;I=Rqa(H>>>0>536870911?-1:H<<3)|0;rp(a,g,534,943);b:do if((H|0)>0){J=k[g>>2]|0;N=0;while(1){O=+p[b+(k[J+(N<<2)>>2]<<3)>>3];p[I+(N<<3)>>3]=O;P=+$(+O);p[t>>3]=P;R=k[t>>2]|0;S=k[t+4>>2]|0;if(S>>>0>2146435072|(S|0)==2146435072&R>>>0>0){T=14;break}N=N+1|0;if((R|0)==0&(S|0)==2146435072){T=38;break}if((N|0)>=(H|0))break b}if((T|0)==14){N=h+56|0;J=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,J|0);S=B;B=0;if(S&1){S=Rb()|0;U=Q;V=S;vva(N);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,J|0);S=B;B=0;do if(S&1){R=Rb()|0;W=Q;X=R}else{k[J>>2]=27560;R=h+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,J|0,f|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(f);Yua(R);Ava(J);W=Z;X=Y;break}Yua(f);B=0;Y=Ia(40,h|0,72427,19)|0;Z=B;B=0;c:do if(!(Z&1)?(B=0,Xa(239,Y|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,i|0,71825,72);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,j|0,74786,21);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(i);da=ca;ea=ba;break}B=0;wa(510,l|0,J|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;ga=ba;ha=1}else{B=0;ua(163,_|0,i|0,j|0,1993,l|0);ba=B;B=0;if(ba&1)ia=1;else{B=0;eb(503,_|0,1240,229);B=0;ia=0}ba=Rb()|0;ca=Q;Yua(l);fa=ca;ga=ba;ha=ia}Yua(j);Yua(i);if(ha){da=fa;ea=ga}else{ja=fa;ka=ga;break c}}else{ba=Rb()|0;da=Q;ea=ba}while(0);zb(_|0);ja=da;ka=ea}else T=29;while(0);if((T|0)==29){Y=Rb()|0;ja=Q;ka=Y}k[h>>2]=27468;k[N>>2]=27488;k[J>>2]=27560;Yua(R);Ava(J);vva(N);L=ja;M=ka;Qb(M|0)}while(0);U=W;V=X;vva(N);Qb(V|0)}else if((T|0)==38){J=m+56|0;S=m+4|0;k[m>>2]=27524;k[J>>2]=27544;B=0;wa(508,m+56|0,S|0);Y=B;B=0;if(Y&1){Y=Rb()|0;la=Q;ma=Y;vva(J);Qb(ma|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[J>>2]=27488;B=0;va(448,S|0);Y=B;B=0;do if(Y&1){Z=Rb()|0;na=Q;oa=Z}else{k[S>>2]=27560;Z=m+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,S|0,f|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(f);Yua(Z);Ava(S);na=ba;oa=aa;break}Yua(f);B=0;aa=Ia(40,m|0,72447,19)|0;ba=B;B=0;d:do if(!(ba&1)?(B=0,Xa(239,aa|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,n|0,71825,72);pa=B;B=0;do if(!(pa&1)){B=0;eb(502,o|0,74786,21);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(n);sa=ra;ta=qa;break}B=0;wa(510,q|0,S|0);qa=B;B=0;if(qa&1){qa=Rb()|0;xa=1;za=Q;Aa=qa}else{B=0;ua(163,ca|0,n|0,o|0,1994,q|0);qa=B;B=0;if(qa&1)Ba=1;else{B=0;eb(503,ca|0,1240,229);B=0;Ba=0}qa=Rb()|0;ra=Q;Yua(q);xa=Ba;za=ra;Aa=qa}Yua(o);Yua(n);if(xa){sa=za;ta=Aa}else{Ca=za;Da=Aa;break d}}else{qa=Rb()|0;sa=Q;ta=qa}while(0);zb(ca|0);Ca=sa;Da=ta}else T=53;while(0);if((T|0)==53){aa=Rb()|0;Ca=Q;Da=aa}k[m>>2]=27468;k[J>>2]=27488;k[S>>2]=27560;Yua(Z);Ava(S);vva(J);L=Ca;M=Da;Qb(M|0)}while(0);la=na;ma=oa;vva(J);Qb(ma|0)}}while(0);H=k[a+16>>2]|0;S=Qqa(16)|0;B=0;ib(284,S|0,c|0,I|0,k[G>>2]|0);Y=B;B=0;if(!(Y&1)){mC(H,S)|0;K=I;break a}H=Rb()|0;Y=Q;Sqa(S);L=Y;M=H;Qb(M|0);break}case 608:{H=a+44|0;Y=qw(a,k[H>>2]|0)|0;S=Rqa(Y>>>0>536870911?-1:Y<<3)|0;e:do if((Y|0)>0){N=a+20|0;aa=0;while(1){ba=b+((Qn(k[(k[N>>2]|0)+(aa<<2)>>2]|0)|0)<<3)|0;P=+p[ba>>3];p[S+(aa<<3)>>3]=P;O=+$(+P);p[t>>3]=O;ba=k[t>>2]|0;R=k[t+4>>2]|0;if(R>>>0>2146435072|(R|0)==2146435072&ba>>>0>0){T=68;break}aa=aa+1|0;if((ba|0)==0&(R|0)==2146435072){T=92;break}if((aa|0)>=(Y|0))break e}if((T|0)==68){aa=s+56|0;N=s+4|0;k[s>>2]=27524;k[aa>>2]=27544;B=0;wa(508,s+56|0,N|0);J=B;B=0;if(J&1){J=Rb()|0;Ea=Q;Fa=J;vva(aa);Qb(Fa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[aa>>2]=27488;B=0;va(448,N|0);J=B;B=0;do if(J&1){R=Rb()|0;Ga=Q;Ha=R}else{k[N>>2]=27560;R=s+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,N|0,f|0);ba=B;B=0;if(ba&1){ba=Rb()|0;pa=Q;Yua(f);Yua(R);Ava(N);Ga=pa;Ha=ba;break}Yua(f);B=0;ba=Ia(40,s|0,72427,19)|0;pa=B;B=0;f:do if(!(pa&1)?(B=0,Xa(239,ba|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,u|0,71825,72);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,v|0,74786,21);ra=B;B=0;if(ra&1){ra=Rb()|0;Ja=Q;Yua(u);Ka=Ja;La=ra;break}B=0;wa(510,w|0,N|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ma=1;Na=Q;Oa=ra}else{B=0;ua(163,_|0,u|0,v|0,2006,w|0);ra=B;B=0;if(ra&1)Pa=1;else{B=0;eb(503,_|0,1240,229);B=0;Pa=0}ra=Rb()|0;Ja=Q;Yua(w);Ma=Pa;Na=Ja;Oa=ra}Yua(v);Yua(u);if(Ma){Ka=Na;La=Oa}else{Qa=Na;Ra=Oa;break f}}else{ra=Rb()|0;Ka=Q;La=ra}while(0);zb(_|0);Qa=Ka;Ra=La}else T=83;while(0);if((T|0)==83){ba=Rb()|0;Qa=Q;Ra=ba}k[s>>2]=27468;k[aa>>2]=27488;k[N>>2]=27560;Yua(R);Ava(N);vva(aa);L=Qa;M=Ra;Qb(M|0)}while(0);Ea=Ga;Fa=Ha;vva(aa);Qb(Fa|0)}else if((T|0)==92){N=x+56|0;J=x+4|0;k[x>>2]=27524;k[N>>2]=27544;B=0;wa(508,x+56|0,J|0);ba=B;B=0;if(ba&1){ba=Rb()|0;Sa=Q;Ta=ba;vva(N);Qb(Ta|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[N>>2]=27488;B=0;va(448,J|0);ba=B;B=0;do if(ba&1){pa=Rb()|0;Ua=Q;Va=pa}else{k[J>>2]=27560;pa=x+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[x+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,J|0,f|0);Z=B;B=0;if(Z&1){Z=Rb()|0;qa=Q;Yua(f);Yua(pa);Ava(J);Ua=qa;Va=Z;break}Yua(f);B=0;Z=Ia(40,x|0,72447,19)|0;qa=B;B=0;g:do if(!(qa&1)?(B=0,Xa(239,Z|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,y|0,71825,72);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,z|0,74786,21);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Wa=Q;Yua(y);Ya=Wa;Za=Ja;break}B=0;wa(510,A|0,J|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;_a=1;$a=Q;ab=Ja}else{B=0;ua(163,ca|0,y|0,z|0,2007,A|0);Ja=B;B=0;if(Ja&1)bb=1;else{B=0;eb(503,ca|0,1240,229);B=0;bb=0}Ja=Rb()|0;Wa=Q;Yua(A);_a=bb;$a=Wa;ab=Ja}Yua(z);Yua(y);if(_a){Ya=$a;Za=ab}else{cb=$a;db=ab;break g}}else{Ja=Rb()|0;Ya=Q;Za=Ja}while(0);zb(ca|0);cb=Ya;db=Za}else T=107;while(0);if((T|0)==107){Z=Rb()|0;cb=Q;db=Z}k[x>>2]=27468;k[N>>2]=27488;k[J>>2]=27560;Yua(pa);Ava(J);vva(N);L=cb;M=db;Qb(M|0)}while(0);Sa=Ua;Ta=Va;vva(N);Qb(Ta|0)}}while(0);Y=k[a+16>>2]|0;I=Qqa(16)|0;B=0;ib(284,I|0,c|0,S|0,k[H>>2]|0);G=B;B=0;if(!(G&1)){mC(Y,I)|0;K=S;break a}Y=Rb()|0;G=Q;Sqa(I);L=G;M=Y;Qb(M|0);break}default:{Y=C+56|0;G=C+4|0;k[C>>2]=27524;k[Y>>2]=27544;B=0;wa(508,C+56|0,G|0);I=B;B=0;if(I&1){I=Rb()|0;fb=Q;gb=I;vva(Y);Qb(gb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Y>>2]=27488;B=0;va(448,G|0);I=B;B=0;do if(I&1){J=Rb()|0;hb=Q;jb=J}else{k[G>>2]=27560;J=C+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[C+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,G|0,f|0);ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(f);Yua(J);Ava(G);hb=aa;jb=ba;break}Yua(f);B=0;ba=Ia(40,C|0,74808,5)|0;aa=B;B=0;h:do if((((((!(aa&1)?(B=0,Z=Xa(242,ba|0,d|0)|0,qa=B,B=0,!(qa&1)):0)?(B=0,qa=Ia(40,Z|0,144166,2)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=ya(427,d|0)|0,R=B,B=0,!(R&1)):0)?(R=Lta(Z)|0,B=0,ra=Ia(40,qa|0,Z|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Ia(40,ra|0,74814,21)|0,ra=B,B=0,!(ra&1)):0)?(B=0,Xa(239,R|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,D|0,71825,72);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,E|0,74786,21);Z=B;B=0;if(Z&1){Z=Rb()|0;qa=Q;Yua(D);kb=qa;lb=Z;break}B=0;wa(510,F|0,G|0);Z=B;B=0;if(Z&1){Z=Rb()|0;mb=1;nb=Q;ob=Z}else{B=0;ua(163,R|0,D|0,E|0,2013,F|0);Z=B;B=0;if(Z&1)pb=1;else{B=0;eb(503,R|0,1240,229);B=0;pb=0}Z=Rb()|0;qa=Q;Yua(F);mb=pb;nb=qa;ob=Z}Yua(E);Yua(D);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break h}}else{Z=Rb()|0;kb=Q;lb=Z}while(0);zb(R|0);qb=kb;rb=lb}else T=137;while(0);if((T|0)==137){ba=Rb()|0;qb=Q;rb=ba}k[C>>2]=27468;k[Y>>2]=27488;k[G>>2]=27560;Yua(J);Ava(G);vva(Y);L=qb;M=rb;Qb(M|0)}while(0);fb=hb;gb=jb;vva(Y);Qb(gb|0)}}while(0);gb=k[g>>2]|0;if(gb)Tqa(gb);k[g>>2]=0;Tqa(K);r=e;return}function Lu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ku(a+-4|0,b,c,d);return}function Mu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+224|0;c=b+200|0;d=b;e=b+64|0;f=b+48|0;g=b+36|0;h=b+24|0;xp(a,d,289);i=+p[d>>3]+ +p[d+8>>3]+ +p[d+16>>3];if(!(i==3.0)){r=b;return i>1.0|0}b=e+56|0;d=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(b);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,d|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[d>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(m);Ava(d);n=s;o=q;break}Yua(c);B=0;q=Ia(40,e|0,72467,42)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,71825,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,75251,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(f);v=u;w=t;break}B=0;wa(510,h|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,f|0,g|0,2033,h|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(h);x=u;y=t;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}while(0);j=n;l=o;vva(b);Qb(l|0);return 0}function Nu(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+32|0;c=b;xp(a,c,206);if(!($p(a)|0)){d=0;r=b;return d|0}d=((+p[c+16>>3]<0.0&1)+((+p[c+8>>3]<0.0&1)+(+p[c>>3]<0.0&1))|0)==1;r=b;return d|0}function Ou(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24|0;a=b+((Co(k[k[c>>2]>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+4>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+8>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}d=0;return d|0}function Pu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+180|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;cO(k[a+36>>2]|0,d,298);switch(k[d>>2]|0){case 301:{i=zu(a)|0;r=b;return i|0}case 300:{i=1;r=b;return i|0}default:{i=e+56|0;b=e+4|0;k[e>>2]=27524;k[i>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(i);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[i>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(b);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[d>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,71825,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,72510,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,2084,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}while(0);j=n;l=o;vva(i);Qb(l|0)}}return 0}function Qu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+180|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;cO(k[a+36>>2]|0,d,298);switch(k[d>>2]|0){case 301:{i=Au(a)|0;r=b;return i|0}case 300:{i=1;r=b;return i|0}default:{i=e+56|0;b=e+4|0;k[e>>2]=27524;k[i>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(i);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[i>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(b);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[d>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,71825,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,72519,11);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,2097,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}while(0);j=n;l=o;vva(i);Qb(l|0)}}return 0}function Ru(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0;c=r;r=r+32|0;d=c;xp(a,d,b);do if($p(a)|0){e=+p[d>>3];f=+p[d+8>>3];g=e*f;if(!(g<0.0)?(h=+p[d+16>>3],i=e*h,!(i<0.0)):0){if(!(g*h==0.0)){j=0;break}if(!(f*h+(g+i)<=0.0)){j=0;break}}j=1}else j=0;while(0);r=c;return j|0}function Su(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;uw(a,b,c,d);return}function Tu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yw(a,b,c,d);return}function Uu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yw(a,b,c,d);return}function Vu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yw(a,b,c,d);return}function Wu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0.0;c=r;r=r+48|0;d=c+24|0;e=c+16|0;f=c+36|0;g=c+32|0;h=c+8|0;j=c;l=c+40|0;k[f>>2]=0;i[l>>0]=1;Uo(a,f);m=Wo(a,353)|0;n=+WJ(k[a+32>>2]|0,265);o=Rqa(24)|0;q=a+24|0;s=b+((Bo(k[k[q>>2]>>2]|0)|0)<<3)|0;p[o>>3]=+p[s>>3];s=b+((Bo(k[(k[q>>2]|0)+4>>2]|0)|0)<<3)|0;p[o+8>>3]=+p[s>>3];s=b+((Bo(k[(k[q>>2]|0)+8>>2]|0)|0)<<3)|0;p[o+16>>3]=+p[s>>3];Uc[k[(k[a>>2]|0)+152>>2]&63](a,g,h,j,l,o);s=hd[k[(k[a>>2]|0)+320>>2]&7](a,k[g>>2]|0,+p[h>>3],+p[j>>3],(i[l>>0]|0)!=0,4)|0;l=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((l|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){j=s+8|0;h=l;t=0.0;while(1){Fc[k[(k[s>>2]|0)+24>>2]&1023](s,h);rd[k[(k[a>>2]|0)+260>>2]&511](a,e,k[f>>2]|0,s);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,s);u=t+ +p[d>>3]*+p[j>>3]*+p[e>>3];h=h+1|0;if((h|0)>=(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){v=u;break}else t=u}}else v=0.0;h=k[f>>2]|0;if(!h){k[f>>2]=0;Tqa(o);w=k[s>>2]|0;x=w+4|0;y=k[x>>2]|0;Ec[y&1023](s);z=n*v;r=c;return +z}Tqa(h);k[f>>2]=0;Tqa(o);w=k[s>>2]|0;x=w+4|0;y=k[x>>2]|0;Ec[y&1023](s);z=n*v;r=c;return +z}function Xu(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0;g=r;r=r+320|0;h=g+300|0;i=g+296|0;j=g+48|0;l=g+40|0;m=g+32|0;n=g+24|0;o=g+16|0;q=g+8|0;s=g;t=g+160|0;u=g+144|0;v=g+132|0;w=g+120|0;x=+WJ(k[a+32>>2]|0,265);y=a+8|0;if((k[y>>2]|0)==(f|0)){Ko(j,k[a+24>>2]|0,3,0);z=Qqa(64)|0;B=0;va(491,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Sqa(z);D=C;E=A;Qb(E|0)}Oja(z,b,c,j);A=Qqa(64)|0;B=0;va(491,A|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;Sqa(A);D=F;E=C;Qb(E|0)}Oja(A,d,e,j);G=e-c;c=+ia(+(b-d),+G);e=+ca(+c);H=+da(+c);c=d-b;b=+aa(+(c*c+G*G));j=a+16|0;C=oC(k[j>>2]|0,353)|0;cO(k[a+36>>2]|0,i,298);a=k[j>>2]|0;if((k[i>>2]|0)==300){i=oC(a,674)|0;I=i;J=oC(k[j>>2]|0,677)|0}else{i=oC(a,673)|0;I=i;J=oC(k[j>>2]|0,676)|0}nd[k[(k[C>>2]|0)+48>>2]&1023](C,l,z);nd[k[(k[C>>2]|0)+48>>2]&1023](C,m,A);nd[k[(k[I>>2]|0)+48>>2]&1023](I,n,z);nd[k[(k[I>>2]|0)+48>>2]&1023](I,o,A);nd[k[(k[J>>2]|0)+48>>2]&1023](J,q,z);nd[k[(k[J>>2]|0)+48>>2]&1023](J,s,A);G=+p[m>>3];c=+p[l>>3]-G;d=c*.3333333333333333;K=+p[o>>3];L=+p[n>>3]-K;M=G*.5;N=c*.5;c=+p[s>>3];O=+p[q>>3]-c;Ec[k[(k[z>>2]|0)+4>>2]&1023](z);Ec[k[(k[A>>2]|0)+4>>2]&1023](A);r=g;return +(x*b*(e*(G*K+(N*K+(d*L+M*L)))+H*(G*c+(N*c+(d*O+M*O)))))}g=t+56|0;A=t+4|0;k[t>>2]=27524;k[g>>2]=27544;B=0;wa(508,t+56|0,A|0);z=B;B=0;if(z&1){z=Rb()|0;P=Q;R=z;vva(g);Qb(R|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[g>>2]=27488;B=0;va(448,A|0);z=B;B=0;do if(z&1){q=Rb()|0;S=Q;T=q}else{k[A>>2]=27560;q=t+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[t+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,A|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(h);Yua(q);Ava(A);S=n;T=s;break}Yua(h);B=0;s=Ia(40,t|0,72531,31)|0;n=B;B=0;a:do if((((!(n&1)?(B=0,o=Xa(242,s|0,f|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,o|0,72563,36)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Xa(242,l|0,k[y>>2]|0)|0,l=B,B=0,!(l&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,u|0,71825,72);l=B;B=0;do if(!(l&1)){B=0;eb(502,v|0,99206,8);m=B;B=0;if(m&1){m=Rb()|0;J=Q;Yua(u);U=J;V=m;break}B=0;wa(510,w|0,A|0);m=B;B=0;if(m&1){m=Rb()|0;W=Q;X=m;Y=1}else{B=0;ua(163,o|0,u|0,v|0,2220,w|0);m=B;B=0;if(m&1)Z=1;else{B=0;eb(503,o|0,1240,229);B=0;Z=0}m=Rb()|0;J=Q;Yua(w);W=J;X=m;Y=Z}Yua(v);Yua(u);if(Y){U=W;V=X}else{_=W;$=X;break a}}else{m=Rb()|0;U=Q;V=m}while(0);zb(o|0);_=U;$=V}else ba=20;while(0);if((ba|0)==20){s=Rb()|0;_=Q;$=s}k[t>>2]=27468;k[g>>2]=27488;k[A>>2]=27560;Yua(q);Ava(A);vva(g);D=_;E=$;Qb(E|0)}while(0);P=S;R=T;vva(g);Qb(R|0);return +(0.0)}function Yu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0;c=r;r=r+320|0;d=c+300|0;e=c+296|0;f=c+48|0;g=c+40|0;h=c+32|0;i=c+24|0;j=c+16|0;l=c+8|0;m=c;n=c+160|0;o=c+144|0;q=c+132|0;s=c+120|0;t=+WJ(k[a+32>>2]|0,265);u=b+32|0;v=a+8|0;if((~~+p[u>>3]|0)==(k[v>>2]|0)){w=+p[b>>3];x=+p[b+8>>3];y=+p[b+16>>3];z=+p[b+24>>3];Ko(f,k[a+24>>2]|0,3,0);b=Qqa(64)|0;B=0;va(491,b|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Sqa(b);D=C;E=A;Qb(E|0)}Oja(b,w,x,f);A=Qqa(64)|0;B=0;va(491,A|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;Sqa(A);D=F;E=C;Qb(E|0)}Oja(A,y,z,f);G=z-x;x=+ia(+(w-y),+G);z=+ca(+x);H=+da(+x);x=y-w;w=+aa(+(x*x+G*G));f=a+16|0;C=oC(k[f>>2]|0,353)|0;cO(k[a+36>>2]|0,e,298);a=k[f>>2]|0;if((k[e>>2]|0)==300){e=oC(a,674)|0;I=e;J=oC(k[f>>2]|0,677)|0}else{e=oC(a,673)|0;I=e;J=oC(k[f>>2]|0,676)|0}nd[k[(k[C>>2]|0)+48>>2]&1023](C,g,b);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,A);nd[k[(k[I>>2]|0)+48>>2]&1023](I,i,b);nd[k[(k[I>>2]|0)+48>>2]&1023](I,j,A);nd[k[(k[J>>2]|0)+48>>2]&1023](J,l,b);nd[k[(k[J>>2]|0)+48>>2]&1023](J,m,A);G=+p[h>>3];x=+p[g>>3]-G;y=x*.3333333333333333;K=+p[j>>3];L=+p[i>>3]-K;M=G*.5;N=x*.5;x=+p[m>>3];O=+p[l>>3]-x;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);Ec[k[(k[A>>2]|0)+4>>2]&1023](A);r=c;return +(t*w*(z*(G*K+(N*K+(y*L+M*L)))+H*(G*x+(N*x+(y*O+M*O)))))}c=n+56|0;A=n+4|0;k[n>>2]=27524;k[c>>2]=27544;B=0;wa(508,n+56|0,A|0);b=B;B=0;if(b&1){b=Rb()|0;P=Q;R=b;vva(c);Qb(R|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[c>>2]=27488;B=0;va(448,A|0);b=B;B=0;do if(b&1){l=Rb()|0;S=Q;T=l}else{k[A>>2]=27560;l=n+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,A|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;i=Q;Yua(d);Yua(l);Ava(A);S=i;T=m;break}Yua(d);B=0;m=Ia(40,n|0,72531,31)|0;i=B;B=0;a:do if((((!(i&1)?(B=0,j=Xa(242,m|0,~~+p[u>>3]|0)|0,g=B,B=0,!(g&1)):0)?(B=0,g=Ia(40,j|0,72563,36)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Xa(242,g|0,k[v>>2]|0)|0,g=B,B=0,!(g&1)):0)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,o|0,71825,72);g=B;B=0;do if(!(g&1)){B=0;eb(502,q|0,99206,8);h=B;B=0;if(h&1){h=Rb()|0;J=Q;Yua(o);U=J;V=h;break}B=0;wa(510,s|0,A|0);h=B;B=0;if(h&1){h=Rb()|0;W=Q;X=h;Y=1}else{B=0;ua(163,j|0,o|0,q|0,2283,s|0);h=B;B=0;if(h&1)Z=1;else{B=0;eb(503,j|0,1240,229);B=0;Z=0}h=Rb()|0;J=Q;Yua(s);W=J;X=h;Y=Z}Yua(q);Yua(o);if(Y){U=W;V=X}else{_=W;$=X;break a}}else{h=Rb()|0;U=Q;V=h}while(0);zb(j|0);_=U;$=V}else ba=20;while(0);if((ba|0)==20){m=Rb()|0;_=Q;$=m}k[n>>2]=27468;k[c>>2]=27488;k[A>>2]=27560;Yua(l);Ava(A);vva(c);D=_;E=$;Qb(E|0)}while(0);P=S;R=T;vva(c);Qb(R|0);return +(0.0)}function Zu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0.0,s=0,t=0.0,u=0.0,v=0.0;e=r;r=r+112|0;f=e+96|0;g=e+88|0;h=e+80|0;i=e+72|0;j=e;if(!($p(a)|0)){l=0.0;r=e;return +l}Ko(j,k[a+24>>2]|0,3,0);m=a+16|0;n=oC(k[m>>2]|0,b)|0;b=oC(k[m>>2]|0,c)|0;c=oC(k[m>>2]|0,d)|0;d=Qqa(64)|0;B=0;wa(517,d|0,2);m=B;B=0;if(m&1){m=Rb()|0;Sqa(d);Qb(m|0)}m=Hc[k[(k[d>>2]|0)+8>>2]&511](d)|0;if((m|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0)){o=d+8|0;q=0.0;s=m;while(1){Fc[k[(k[d>>2]|0)+24>>2]&1023](d,s);uw(a,i,j,d);nd[k[(k[n>>2]|0)+48>>2]&1023](n,f,d);nd[k[(k[b>>2]|0)+48>>2]&1023](b,g,d);nd[k[(k[c>>2]|0)+48>>2]&1023](c,h,d);t=+p[f>>3]-+p[g>>3];u=q+ +p[o>>3]*(+p[h>>3]*(+p[i>>3]*(t*(t*.5))));s=s+1|0;if((s|0)>=(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0)){v=u;break}else q=u}}else v=0.0;Ec[k[(k[d>>2]|0)+4>>2]&1023](d);l=v;r=e;return +l}function _u(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0,j=0,l=0.0,m=0,n=0.0,o=0.0;c=r;r=r+96|0;d=c+80|0;e=c+72|0;f=c;if(!($p(a)|0)){g=0.0;r=c;return +g}Ko(f,k[a+24>>2]|0,3,0);h=oC(k[a+16>>2]|0,b)|0;b=Qqa(64)|0;B=0;wa(517,b|0,2);i=B;B=0;if(i&1){i=Rb()|0;Sqa(b);Qb(i|0)}i=Hc[k[(k[b>>2]|0)+8>>2]&511](b)|0;if((i|0)<(Hc[k[(k[b>>2]|0)+12>>2]&511](b)|0)){j=b+8|0;l=0.0;m=i;while(1){Fc[k[(k[b>>2]|0)+24>>2]&1023](b,m);uw(a,e,f,b);nd[k[(k[h>>2]|0)+48>>2]&1023](h,d,b);n=l+ +p[e>>3]*+p[d>>3]*+p[j>>3];m=m+1|0;if((m|0)>=(Hc[k[(k[b>>2]|0)+12>>2]&511](b)|0)){o=n;break}else l=n}}else o=0.0;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);g=o;r=c;return +g}function $u(a){a=a|0;var b=0;a=Qqa(64)|0;B=0;va(491,a|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function av(a,b){a=a|0;b=b|0;a=Qqa(64)|0;B=0;wa(517,a|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function bv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+48|0;f=e;hu(a,f,c,b,2);b=Qqa(64)|0;B=0;eb(510,b|0,f|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}else{r=e;return b|0}return 0}function cv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;a=Qqa(64)|0;B=0;Fa(1,a|0,b|0,+c,+d,e|0,f|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(a);Qb(f|0)}else return a|0;return 0}function dv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;d=r;r=r+48|0;f=d;hu(a,f,c,b,2);b=Qqa(64)|0;B=0;eb(510,b|0,f|0,e|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}else{r=d;return b|0}return 0}function ev(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=d+4|0;_t(a,d,e);a=Qqa(64)|0;B=0;ib(289,a|0,k[d>>2]|0,k[e>>2]|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else{r=c;return a|0}return 0}function fv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=d+4|0;$t(a,d,e);a=Qqa(64)|0;B=0;ib(289,a|0,k[d>>2]|0,k[e>>2]|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else{r=c;return a|0}return 0}function gv(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,k[a+44>>2]|0);return}function hv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;rw(a,b,c,d,k[a+44>>2]|0);return}function iv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;rw(a,b,c,d,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function jv(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0);return}function kv(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,738);return}function lv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;rw(a,b,c,d,738);return}function mv(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,742);return}function nv(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,Hc[k[(k[a>>2]|0)+460>>2]&511](a)|0);return}function ov(a,b,c){a=a|0;b=b|0;c=c|0;tw(a,b,c,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function pv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+16|0;f=e;g=oC(k[a+16>>2]|0,d)|0;d=a+24|0;a=Bo(k[k[d>>2]>>2]|0)|0;if(!g){h=0;r=e;return h|0}if((a|0)!=(c|0))if((Bo(k[(k[d>>2]|0)+4>>2]|0)|0)!=(c|0))if((Bo(k[(k[d>>2]|0)+8>>2]|0)|0)==(c|0))i=2;else{h=0;r=e;return h|0}else i=1;else i=0;c=Qqa(64)|0;B=0;va(491,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(c);Qb(d|0)}Fc[k[(k[c>>2]|0)+28>>2]&1023](c,i);nd[k[(k[g>>2]|0)+48>>2]&1023](g,f,c);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);p[b>>3]=+p[f>>3];h=1;r=e;return h|0}function qv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;d=+p[c+24>>3]-+p[c>>3];e=+p[c+32>>3]-+p[c+8>>3];f=+aa(+(d*d+e*e));p[b>>3]=e/f;p[b+8>>3]=-d/f;return}function rv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;d=+p[c+24>>3]-+p[c>>3];e=+p[c+32>>3]-+p[c+8>>3];f=+aa(+(d*d+e*e));p[b>>3]=e/f;p[b+8>>3]=-d/f;return}function sv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0;d=r;r=r+16|0;$t(a,d+4|0,d);e=+p[c+24>>3]-+p[c>>3];f=+p[c+32>>3]-+p[c+8>>3];g=+aa(+(e*e+f*f));p[b>>3]=f/g;p[b+8>>3]=-e/g;r=d;return}function tv(a){a=a|0;return 621}function uv(a){a=a|0;return qw(a,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0)|0}function vv(a){a=a|0;return qw(a,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0)|0}function wv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0.0,j=0,l=0;c=r;r=r+80|0;d=c+48|0;e=c+24|0;f=c;g=a+32|0;h=+WJ(k[g>>2]|0,266);i=+WJ(k[g>>2]|0,265)/h;xp(a,d,353);xp(a,e,63);xp(a,f,928);g=a+24|0;a=b+4|0;if((+p[f>>3]>0.0?+p[e>>3]<-(i*+p[d>>3]):0)?(j=Co(k[k[g>>2]>>2]|0)|0,(k[b>>2]|0)!=0):0){l=k[k[a>>2]>>2]|0;Jc[k[(k[l>>2]|0)+20>>2]&1](l,j,1.0,0)}if((+p[f+8>>3]>0.0?+p[e+8>>3]<-(i*+p[d+8>>3]):0)?(j=Co(k[(k[g>>2]|0)+4>>2]|0)|0,(k[b>>2]|0)!=0):0){l=k[k[a>>2]>>2]|0;Jc[k[(k[l>>2]|0)+20>>2]&1](l,j,1.0,0)}if(!(+p[f+16>>3]>0.0)){r=c;return}if(!(+p[e+16>>3]<-(i*+p[d+16>>3]))){r=c;return}d=Co(k[(k[g>>2]|0)+8>>2]|0)|0;if(!(k[b>>2]|0)){r=c;return}b=k[k[a>>2]>>2]|0;Jc[k[(k[b>>2]|0)+20>>2]&1](b,d,1.0,0);r=c;return}function xv(a){a=a|0;return Bw(a,k[a+44>>2]|0)|0}function yv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;a:do if(c){switch(k[a+44>>2]|0){case 752:{f=e;k[f>>2]=6;k[f+4>>2]=7;VN(c,b,2,e);break a;break}case 741:break;default:break a}f=a+20|0;g=eo(k[(k[f>>2]|0)+12>>2]|0,534,943)|0;h=eo(k[k[f>>2]>>2]|0,534,943)|0;i=(eo(k[(k[f>>2]|0)+4>>2]|0,534,943)|0)+h|0;h=(eo(k[(k[f>>2]|0)+8>>2]|0,534,943)|0)+i|0;i=Rqa(g>>>0>1073741823?-1:g<<2)|0;if((g|0)>0){f=0;do{k[i+(f<<2)>>2]=f+h;f=f+1|0}while((f|0)!=(g|0))}VN(c,b,g,i);Tqa(i)}while(0);if(!b){r=d;return}switch(k[a+44>>2]|0){case 752:{c=e;k[c>>2]=6;k[c+4>>2]=7;NN(b,2,e);r=d;return}case 741:{e=a+20|0;a=eo(k[(k[e>>2]|0)+12>>2]|0,534,943)|0;c=(eo(k[k[e>>2]>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+4>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+8>>2]|0,534,943)|0)|0;e=Rqa(a>>>0>1073741823?-1:a<<2)|0;if((a|0)>0){f=0;do{k[e+(f<<2)>>2]=f+c;f=f+1|0}while((f|0)!=(a|0))}NN(b,a,e);Tqa(e);r=d;return}default:{r=d;return}}}function zv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0;b=r;r=r+80|0;c=b+64|0;d=b+56|0;e=b+48|0;f=b;g=Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0;h=a+16|0;kC(k[h>>2]|0,c,533);i=(Np(a)|0)^1;if((k[c>>2]|0)!=542|i){r=b;return}i=oC(k[h>>2]|0,642)|0;c=oC(k[h>>2]|0,928)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;wp(a,h,287);g=Qqa(64)|0;B=0;va(491,g|0);j=B;B=0;if(j&1){j=Rb()|0;Sqa(g);Qb(j|0)}if((Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0)>0){j=f+24|0;l=f+8|0;m=f+32|0;n=f+16|0;o=f+40|0;q=a+20|0;s=0;do{if(+p[h+(s<<3)>>3]==1.0){t=k[(k[g>>2]|0)+32>>2]|0;u=Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0;nd[t&1023](g,u,s);nd[k[(k[i>>2]|0)+48>>2]&1023](i,d,g);nd[k[(k[c>>2]|0)+48>>2]&1023](c,e,g);v=+ha(+(+p[d>>3]));w=+ca(+v);p[f>>3]=w;p[j>>3]=0.0;w=+da(+v);p[l>>3]=w;p[m>>3]=0.0;p[n>>3]=0.0;p[o>>3]=1.0;u=k[(k[q>>2]|0)+(s<<2)>>2]|0;if(!(+p[e>>3]>=0.0))Zn(u,1);else Vn(u,1);NY((k[(k[q>>2]|0)+(s<<2)>>2]|0)+72|0,f)}s=s+1|0}while((s|0)<(Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0))}Tqa(h);Ec[k[(k[g>>2]|0)+4>>2]&1023](g);r=b;return}function Av(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+20|0;c=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;b=k[c>>2]|0;if((b|0)>0){d=a+52|0;e=b;b=0;while(1){f=k[(k[d>>2]|0)+(b<<2)>>2]|0;if(!f)g=e;else{Dla(f);g=k[c>>2]|0}b=b+1|0;if((b|0)>=(g|0))break;else e=g}}Dla(k[a+56>>2]|0);Dla(k[a+60>>2]|0);Dla(k[a+64>>2]|0);g=k[a+68>>2]|0;if(!g)return;Dla(g);return}function Bv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+240|0;f=e+216|0;g=e;h=e+204|0;i=e+200|0;j=e+64|0;l=e+48|0;m=e+36|0;n=e+24|0;cO(k[a+36>>2]|0,i,298);a:do if((k[i>>2]|0)==301)switch(c|0){case 215:{if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0){o=214;break a}r=e;return}case 227:{if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0){o=225;break a}r=e;return}default:{o=c;break a}}else o=c;while(0);if(!(Tp(a,o)|0)){r=e;return}Mp(a,h,d,0);p[g>>3]=+p[b+(k[h>>2]<<3)>>3];p[g+8>>3]=+p[b+(k[h+4>>2]<<3)>>3];p[g+16>>3]=+p[b+(k[h+8>>2]<<3)>>3];h=Qqa(16)|0;B=0;ib(284,h|0,o|0,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;b=Q;Sqa(h);q=b;s=g;Qb(s|0)}g=oC(k[a+16>>2]|0,o)|0;if((Hc[k[(k[g>>2]|0)+20>>2]&511](g)|0)==559){r$(g,h);r=e;return}e=j+56|0;h=j+4|0;k[j>>2]=27524;k[e>>2]=27544;B=0;wa(508,j+56|0,h|0);g=B;B=0;if(g&1){g=Rb()|0;t=Q;u=g;vva(e);Qb(u|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);g=B;B=0;do if(g&1){a=Rb()|0;v=Q;w=a}else{k[h>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,h|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;d=Q;Yua(f);Yua(a);Ava(h);v=d;w=b;break}Yua(f);B=0;b=Ia(40,j|0,74566,6)|0;d=B;B=0;b:do if((((!(d&1)?(B=0,c=ya(427,o|0)|0,i=B,B=0,!(i&1)):0)?(i=Lta(c)|0,B=0,x=Ia(40,b|0,c|0,i|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,x|0,74278,22)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,i|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,l|0,71825,72);x=B;B=0;do if(!(x&1)){B=0;eb(502,m|0,74894,26);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(l);z=y;A=c;break}B=0;wa(510,n|0,h|0);c=B;B=0;if(c&1){c=Rb()|0;C=Q;D=c;E=1}else{B=0;ua(163,i|0,l|0,m|0,2787,n|0);c=B;B=0;if(c&1)F=1;else{B=0;eb(503,i|0,1240,229);B=0;F=0}c=Rb()|0;y=Q;Yua(n);C=y;D=c;E=F}Yua(m);Yua(l);if(E){z=C;A=D}else{G=D;H=C;break b}}else{c=Rb()|0;z=Q;A=c}while(0);zb(i|0);G=A;H=z}else I=27;while(0);if((I|0)==27){b=Rb()|0;G=b;H=Q}k[j>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(a);Ava(h);vva(e);q=H;s=G;Qb(s|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function Cv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;e=r;r=r+16|0;d=e;cO(f,d,482);f=k[a+40>>2]|0;if(f)k[a+44>>2]=k[f+(k[d>>2]<<2)>>2];f=k[a+52>>2]|0;if(!f){r=e;return}c=k[f+(k[d>>2]<<2)>>2]|0;if(!c){r=e;return}d=Gla(c)|0;k[a+20>>2]=d;r=e;return}function Dv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+208|0;c=b+188|0;d=b+184|0;e=b+180|0;f=b+176|0;g=b+40|0;h=b+24|0;i=b+12|0;j=b;cO(k[a+36>>2]|0,f,298);switch(k[f>>2]|0){case 301:{_t(a,d,e);l=Ev(a,k[d>>2]|0,k[e>>2]|0)|0;r=b;return l|0}case 300:{l=a;r=b;return l|0}default:{l=g+56|0;b=g+4|0;k[g>>2]=27524;k[l>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;m=Q;n=a;vva(l);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[l>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){e=Rb()|0;o=Q;p=e}else{k[b>>2]=27560;e=g+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;f=Q;Yua(c);Yua(e);Ava(b);o=f;p=d;break}Yua(c);B=0;d=Ia(40,g|0,149721,19)|0;f=B;B=0;if(!(f&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,71825,72);f=B;B=0;do if(!(f&1)){B=0;eb(502,i|0,74921,17);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(h);t=s;u=q;break}B=0;wa(510,j|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,d|0,h|0,i|0,2823,j|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,d|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(j);v=s;w=q;x=y}Yua(i);Yua(h);if(x){t=v;u=w}else{z=v;A=w;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(e);Ava(b);vva(l);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(d|0);z=t;A=u;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(e);Ava(b);vva(l);Qb(A|0)}f=Rb()|0;z=Q;A=f;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(e);Ava(b);vva(l);Qb(A|0)}while(0);m=o;n=p;vva(l);Qb(n|0)}}return 0}function Ev(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;d=r;r=r+16|0;e=d;f=a+36|0;cO(k[f>>2]|0,e,482);g=Qqa(72)|0;B=0;va(461,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;Sqa(g);Qb(j|0)}h=g+48|0;B=0;va(462,h|0);l=B;B=0;do if(!(l&1)){B=0;m=B;B=0;if(m&1){m=Rb()|0;n=Q;Tq(h);o=n;p=m;break}else{k[g>>2]=29448;k[g+4>>2]=30012;k[g+8>>2]=k[a+8>>2];m=vC(k[a+16>>2]|0,b,c)|0;k[g+16>>2]=m;k[g+36>>2]=k[f>>2];k[g+44>>2]=738;Yq(a+48|0,h,b,c);m=k[a+28>>2]|0;n=ed[k[(k[m>>2]|0)+32>>2]&511](m,g)|0;k[g+28>>2]=n;n=Gla(k[(k[g+52>>2]|0)+(k[e>>2]<<2)>>2]|0)|0;k[g+20>>2]=n;n=Gla(k[g+56>>2]|0)|0;k[g+24>>2]=n;n=Fla(k[g+64>>2]|0)|0;k[g+32>>2]=n;r=d;return g|0}}else{n=Rb()|0;o=Q;p=n}while(0);Qo(g);i=o;j=p;Sqa(g);Qb(j|0);return 0}function Fv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+208|0;c=b+188|0;d=b+184|0;e=b+180|0;f=b+176|0;g=b+40|0;h=b+24|0;i=b+12|0;j=b;cO(k[a+36>>2]|0,f,298);switch(k[f>>2]|0){case 301:{$t(a,d,e);l=Ev(a,k[e>>2]|0,k[d>>2]|0)|0;r=b;return l|0}case 300:{l=a;r=b;return l|0}default:{l=g+56|0;b=g+4|0;k[g>>2]=27524;k[l>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;m=Q;n=a;vva(l);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[l>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){d=Rb()|0;o=Q;p=d}else{k[b>>2]=27560;d=g+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);e=B;B=0;if(e&1){e=Rb()|0;f=Q;Yua(c);Yua(d);Ava(b);o=f;p=e;break}Yua(c);B=0;e=Ia(40,g|0,149721,19)|0;f=B;B=0;if(!(f&1)?(B=0,Xa(239,e|0,0)|0,e=B,B=0,!(e&1)):0){e=Ab(20)|0;B=0;eb(502,h|0,71825,72);f=B;B=0;do if(!(f&1)){B=0;eb(502,i|0,72600,15);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(h);t=s;u=q;break}B=0;wa(510,j|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,e|0,h|0,i|0,2868,j|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,e|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(j);v=s;w=q;x=y}Yua(i);Yua(h);if(x){t=v;u=w}else{z=v;A=w;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(l);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(e|0);z=t;A=u;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(l);Qb(A|0)}f=Rb()|0;z=Q;A=f;k[g>>2]=27468;k[l>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(l);Qb(A|0)}while(0);m=o;n=p;vva(l);Qb(n|0)}}return 0}function Gv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0;b=r;r=r+80|0;c=b+64|0;d=b+40|0;e=b+32|0;f=b+24|0;g=b;k[c>>2]=0;Uo(a,c);h=a+16|0;i=oC(k[h>>2]|0,674)|0;j=oC(k[h>>2]|0,677)|0;l=Qqa(64)|0;B=0;va(491,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Sqa(l);o=n;q=m;Qb(q|0)}m=d+8|0;n=d+16|0;s=0;do{Fc[k[(k[l>>2]|0)+28>>2]&1023](l,s);nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,l);nd[k[(k[j>>2]|0)+48>>2]&1023](j,f,l);t=+p[e>>3];u=+p[f>>3];Xo(a,d,k[c>>2]|0,l,i,j);v=+p[e>>3];w=+p[f>>3];p[g+(s<<3)>>3]=(+p[d>>3]*(v*v)+ +p[m>>3]*(w*w)+ +p[n>>3]*(v*(w*2.0)))/(t*t+u*u+1.0e-14);s=s+1|0}while((s|0)!=3);s=k[h>>2]|0;h=Qqa(16)|0;B=0;ib(284,h|0,262,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;n=Q;Sqa(h);o=n;q=g;Qb(q|0)}mC(s,h)|0;Ec[k[(k[l>>2]|0)+4>>2]&1023](l);l=k[c>>2]|0;if(!l){r=b;return}Tqa(l);r=b;return}function Hv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0;b=r;r=r+80|0;c=b+64|0;d=b+40|0;e=b+32|0;f=b+24|0;g=b;k[c>>2]=0;Uo(a,c);h=a+16|0;i=oC(k[h>>2]|0,674)|0;j=oC(k[h>>2]|0,677)|0;l=Qqa(64)|0;B=0;va(491,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Sqa(l);o=n;q=m;Qb(q|0)}m=d+8|0;n=d+16|0;s=0;do{Fc[k[(k[l>>2]|0)+28>>2]&1023](l,s);nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,l);nd[k[(k[j>>2]|0)+48>>2]&1023](j,f,l);t=+p[e>>3];u=+p[f>>3];Xo(a,d,k[c>>2]|0,l,i,j);v=+p[e>>3];w=+p[f>>3];p[g+(s<<3)>>3]=(+p[m>>3]*(v*v)+ +p[d>>3]*(w*w)-+p[n>>3]*(v*(w*2.0)))/(t*t+u*u+1.0e-14);s=s+1|0}while((s|0)!=3);s=k[h>>2]|0;h=Qqa(16)|0;B=0;ib(284,h|0,263,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;n=Q;Sqa(h);o=n;q=g;Qb(q|0)}mC(s,h)|0;Ec[k[(k[l>>2]|0)+4>>2]&1023](l);l=k[c>>2]|0;if(!l){r=b;return}Tqa(l);r=b;return}function Iv(a){a=a|0;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0;b=r;r=r+80|0;c=b;if(!($p(a)|0)){d=0.0;r=b;return +d}Ko(c,k[a+24>>2]|0,3,0);e=+p[c+48>>3];f=+p[c>>3]-e;g=+p[c+24>>3]-e;e=+p[c+56>>3];h=+p[c+8>>3]-e;i=+p[c+32>>3]-e;e=+p[c+64>>3];j=+p[c+16>>3]-e;l=+p[c+40>>3]-e;e=h*l-j*i;m=j*g-l*f;l=i*f-h*g;d=+aa(+(l*l+(e*e+m*m)))*.5;r=b;return +d}function Jv(a){a=a|0;return Cw(a,k[a+44>>2]|0)|0}function Kv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0;b=r;r=r+80|0;c=b+72|0;d=b;dO(k[a+36>>2]|0,c,356);e=a+16|0;f=+qC(k[e>>2]|0,674);g=+qC(k[e>>2]|0,677);Ko(d,k[a+24>>2]|0,3,0);h=+p[d>>3];i=+p[d+8>>3];j=+p[d+24>>3];l=j<h?j:h;m=j>h?j:h;h=+p[d+32>>3];j=h<i?h:i;n=h>i?h:i;i=+p[d+48>>3];h=+p[d+56>>3];r=b;return +(+p[c>>3]/(g/((h>n?h:n)-(h<j?h:j))+f/((i>m?i:m)-(i<l?i:l))))}function Lv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0,o=0,q=0.0,s=0.0,t=0.0;b=r;r=r+112|0;c=b+104|0;d=b+108|0;e=b+96|0;f=b+88|0;g=b+80|0;h=b+72|0;j=b;if(!($p(a)|0)){l=0.0;r=b;return +l}m=+WJ(k[a+32>>2]|0,265);n=Wo(a,40)|0;Wo(a,928)|0;Ko(j,k[a+24>>2]|0,3,0);Dc[k[(k[a>>2]|0)+132>>2]&255](a,c,e,f,d);o=hd[k[(k[a>>2]|0)+320>>2]&7](a,k[c>>2]|0,+p[e>>3],+p[f>>3],(i[d>>0]|0)!=1,3)|0;d=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;if((d|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){f=o+8|0;q=0.0;e=d;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,e);rd[k[(k[a>>2]|0)+260>>2]&511](a,h,j,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,g,o);s=q+ +p[g>>3]*+p[h>>3]*+p[f>>3];e=e+1|0;if((e|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){t=s;break}else q=s}}else t=0.0;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);l=m*t;r=b;return +l}function Mv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0,o=0,q=0.0,s=0.0,t=0.0;b=r;r=r+112|0;c=b+104|0;d=b+108|0;e=b+96|0;f=b+88|0;g=b+80|0;h=b+72|0;j=b;if(!($p(a)|0)){l=0.0;r=b;return +l}m=+WJ(k[a+32>>2]|0,265);n=Wo(a,39)|0;Wo(a,928)|0;Ko(j,k[a+24>>2]|0,3,0);Dc[k[(k[a>>2]|0)+132>>2]&255](a,c,e,f,d);o=hd[k[(k[a>>2]|0)+320>>2]&7](a,k[c>>2]|0,+p[e>>3],+p[f>>3],(i[d>>0]|0)!=0,2)|0;d=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;if((d|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){f=o+8|0;q=0.0;e=d;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,e);rd[k[(k[a>>2]|0)+260>>2]&511](a,h,j,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,g,o);s=q+ +p[g>>3]*+p[h>>3]*+p[f>>3];e=e+1|0;if((e|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){t=s;break}else q=s}}else t=0.0;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);l=m*t;r=b;return +l}function Nv(a){a=a|0;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0;b=r;r=r+80|0;c=b+72|0;d=b;e=+WJ(k[a+32>>2]|0,265);if(!($p(a)|0)){f=0.0;r=b;return +f}Ko(d,k[a+24>>2]|0,3,0);g=+p[d>>3];h=+p[d+8>>3];i=+$(+((g-+p[d+48>>3])*(+p[d+32>>3]-h)-(g-+p[d+24>>3])*(+p[d+56>>3]-h)))*.5;d=oC(k[a+16>>2]|0,388)|0;Fc[k[(k[d>>2]|0)+64>>2]&1023](d,c);f=e*i*+p[c>>3];r=b;return +f}function Ov(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;e=r;r=r+192|0;g=e+176|0;h=e+40|0;i=e+24|0;j=e+12|0;l=e;k[(k[a+40>>2]|0)+(d<<2)>>2]=f;do switch(f|0){case 738:{m=Rqa(12)|0;n=k[c+100>>2]|0;o=b*3|0;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;k[m+4>>2]=(k[p+(o+1<<2)>>2]|0)+n;k[m+8>>2]=(k[p+(o+2<<2)>>2]|0)+n;q=3;s=m;break}case 739:{m=Rqa(12)|0;n=k[c+100>>2]|0;o=b*3|0;k[m>>2]=o+1+n;k[m+4>>2]=o+2+n;k[m+8>>2]=o+3+n;q=3;s=m;break}case 741:case 740:{m=Rqa(16)|0;n=k[c+100>>2]|0;o=b*3|0;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;k[m+4>>2]=(k[p+(o+1<<2)>>2]|0)+n;k[m+8>>2]=(k[p+(o+2<<2)>>2]|0)+n;k[m+12>>2]=b+1+n+(k[c+52>>2]|0);q=4;s=m;break}case 742:{m=Rqa(24)|0;n=k[c+100>>2]|0;o=b*3|0;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;t=o+1|0;k[m+4>>2]=(k[p+(t<<2)>>2]|0)+n;u=o+2|0;k[m+8>>2]=(k[p+(u<<2)>>2]|0)+n;p=k[c+84>>2]|0;v=n+1+(k[c+52>>2]|0)|0;k[m+12>>2]=v+(k[p+(o<<2)>>2]|0);k[m+16>>2]=v+(k[p+(t<<2)>>2]|0);k[m+20>>2]=v+(k[p+(u<<2)>>2]|0);q=6;s=m;break}case 744:case 743:{m=Rqa(28)|0;u=k[c+100>>2]|0;p=b*3|0;v=k[c+72>>2]|0;k[m>>2]=(k[v+(p<<2)>>2]|0)+u;t=p+1|0;k[m+4>>2]=(k[v+(t<<2)>>2]|0)+u;o=p+2|0;k[m+8>>2]=(k[v+(o<<2)>>2]|0)+u;v=k[c+52>>2]|0;n=k[c+84>>2]|0;w=u+1+v|0;k[m+12>>2]=w+(k[n+(p<<2)>>2]|0);k[m+16>>2]=w+(k[n+(t<<2)>>2]|0);k[m+20>>2]=w+(k[n+(o<<2)>>2]|0);k[m+24>>2]=b+1+u+v+(k[c+64>>2]|0);q=7;s=m;break}case 750:case 749:{m=Rqa(24)|0;v=k[c+100>>2]|0;u=b*3|0;o=k[c+72>>2]|0;n=o+(u<<2)|0;k[m>>2]=(k[n>>2]|0)+v;w=o+(u+1<<2)|0;k[m+4>>2]=(k[w>>2]|0)+v;t=o+(u+2<<2)|0;k[m+8>>2]=(k[t>>2]|0)+v;u=(k[c+52>>2]|0)+v|0;k[m+12>>2]=u+(k[n>>2]|0);k[m+16>>2]=u+(k[w>>2]|0);k[m+20>>2]=u+(k[t>>2]|0);q=6;s=m;break}case 752:case 751:{m=Rqa(28)|0;t=k[c+100>>2]|0;u=b*3|0;w=k[c+72>>2]|0;n=w+(u<<2)|0;k[m>>2]=(k[n>>2]|0)+t;v=w+(u+1<<2)|0;k[m+4>>2]=(k[v>>2]|0)+t;o=w+(u+2<<2)|0;k[m+8>>2]=(k[o>>2]|0)+t;u=k[c+52>>2]|0;k[m+12>>2]=b+1+t+u;w=u+t+(k[c+56>>2]|0)|0;k[m+16>>2]=w+(k[n>>2]|0);k[m+20>>2]=w+(k[v>>2]|0);k[m+24>>2]=w+(k[o>>2]|0);q=7;s=m;break}case 755:case 753:{m=Rqa(36)|0;o=k[c+100>>2]|0;w=b*3|0;v=k[c+72>>2]|0;n=v+(w<<2)|0;k[m>>2]=(k[n>>2]|0)+o;t=w+1|0;u=v+(t<<2)|0;k[m+4>>2]=(k[u>>2]|0)+o;p=w+2|0;x=v+(p<<2)|0;k[m+8>>2]=(k[x>>2]|0)+o;v=k[c+52>>2]|0;y=k[c+84>>2]|0;z=o+1+v|0;k[m+12>>2]=z+(k[y+(w<<2)>>2]|0);k[m+16>>2]=z+(k[y+(t<<2)>>2]|0);k[m+20>>2]=z+(k[y+(p<<2)>>2]|0);p=v+o+(k[c+64>>2]|0)|0;k[m+24>>2]=p+(k[n>>2]|0);k[m+28>>2]=p+(k[u>>2]|0);k[m+32>>2]=p+(k[x>>2]|0);q=9;s=m;break}case 754:{m=Rqa(24)|0;x=k[c+100>>2]|0;p=b*3|0;u=k[c+72>>2]|0;k[m>>2]=(k[u+(p<<2)>>2]|0)+x;n=p+1|0;k[m+4>>2]=(k[u+(n<<2)>>2]|0)+x;o=p+2|0;k[m+8>>2]=(k[u+(o<<2)>>2]|0)+x;u=k[c+84>>2]|0;v=x+1+(k[c+52>>2]|0)|0;k[m+12>>2]=v+(k[u+(p<<2)>>2]|0);k[m+16>>2]=v+(k[u+(n<<2)>>2]|0);k[m+20>>2]=v+(k[u+(o<<2)>>2]|0);q=6;s=m;break}case 757:{m=Rqa(40)|0;o=k[c+100>>2]|0;u=b*3|0;v=k[c+72>>2]|0;k[m>>2]=(k[v+(u<<2)>>2]|0)+o;n=u+1|0;k[m+4>>2]=(k[v+(n<<2)>>2]|0)+o;p=u+2|0;k[m+8>>2]=(k[v+(p<<2)>>2]|0)+o;v=k[c+52>>2]|0;x=k[c+84>>2]|0;y=o+1+v|0;k[m+12>>2]=y+(k[x+(u<<2)>>2]|0);k[m+16>>2]=y+(k[x+(n<<2)>>2]|0);k[m+20>>2]=y+(k[x+(p<<2)>>2]|0);x=k[c+64>>2]|0;k[m+24>>2]=b+1+o+v+x;y=k[c+56>>2]|0;k[m+28>>2]=n+o+v+x+y;k[m+32>>2]=p+o+v+x+y;k[m+36>>2]=u+3+o+v+x+y;q=10;s=m;break}case 758:{m=Rqa(28)|0;y=k[c+100>>2]|0;x=b*3|0;v=k[c+72>>2]|0;k[m>>2]=(k[v+(x<<2)>>2]|0)+y;o=x+1|0;k[m+4>>2]=(k[v+(o<<2)>>2]|0)+y;u=x+2|0;k[m+8>>2]=(k[v+(u<<2)>>2]|0)+y;v=k[c+52>>2]|0;p=k[c+84>>2]|0;n=y+1+v|0;k[m+12>>2]=n+(k[p+(x<<2)>>2]|0);k[m+16>>2]=n+(k[p+(o<<2)>>2]|0);k[m+20>>2]=n+(k[p+(u<<2)>>2]|0);k[m+24>>2]=b+1+y+v+(k[c+64>>2]|0);q=7;s=m;break}default:{m=h+56|0;v=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;A=Q;C=y;vva(m);Qb(C|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){u=Rb()|0;D=Q;E=u}else{k[v>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,v|0,g|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Yua(g);Yua(u);Ava(v);D=n;E=p;break}Yua(g);B=0;p=Ia(40,h|0,145867,15)|0;n=B;B=0;if((((!(n&1)?(B=0,n=ya(427,f|0)|0,o=B,B=0,!(o&1)):0)?(o=Lta(n)|0,B=0,x=Ia(40,p|0,n|0,o|0)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,i|0,71825,72);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,74939,6);n=B;B=0;if(n&1){n=Rb()|0;p=Q;Yua(i);F=p;G=n;break}B=0;wa(510,l|0,v|0);n=B;B=0;if(n&1){n=Rb()|0;H=Q;I=n;J=1}else{B=0;ua(163,o|0,i|0,j|0,3270,l|0);n=B;B=0;if(n&1)K=1;else{B=0;eb(503,o|0,1240,229);B=0;K=0}n=Rb()|0;p=Q;Yua(l);H=p;I=n;J=K}Yua(j);Yua(i);if(J){F=H;G=I}else{L=H;M=I;k[h>>2]=27468;k[m>>2]=27488;k[v>>2]=27560;Yua(u);Ava(v);vva(m);Qb(M|0)}}else{n=Rb()|0;F=Q;G=n}while(0);zb(o|0);L=F;M=G;k[h>>2]=27468;k[m>>2]=27488;k[v>>2]=27560;Yua(u);Ava(v);vva(m);Qb(M|0)}x=Rb()|0;L=Q;M=x;k[h>>2]=27468;k[m>>2]=27488;k[v>>2]=27560;Yua(u);Ava(v);vva(m);Qb(M|0)}while(0);A=D;C=E;vva(m);Qb(C|0)}}while(0);Xq(a+48|0,s,q,d);k[a+20>>2]=0;Tqa(s);nd[k[(k[a>>2]|0)+548>>2]&1023](a,b,c);r=e;return}function Pv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;if(!(zu(a)|0)){r=b;return}cO(k[a+36>>2]|0,c,575);f=a+16|0;g=oC(k[f>>2]|0,k[c>>2]|0)|0;c=oC(k[f>>2]|0,287)|0;f=Qqa(64)|0;B=0;va(491,f|0);h=B;B=0;if(h&1){h=Rb()|0;Sqa(f);Qb(h|0)}h=a+44|0;if((qw(a,k[h>>2]|0)|0)>0){i=a+20|0;j=0;do{nd[k[(k[f>>2]|0)+32>>2]&1023](f,k[h>>2]|0,j);nd[k[(k[c>>2]|0)+48>>2]&1023](c,e,f);if(+p[e>>3]==1.0){nd[k[(k[g>>2]|0)+48>>2]&1023](g,d,f);Un(k[(k[i>>2]|0)+(j<<2)>>2]|0,0,+p[d>>3])}j=j+1|0}while((j|0)<(qw(a,k[h>>2]|0)|0))}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);r=b;return}function Qv(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;if(!(Au(a)|0)){r=b;return}cO(k[a+36>>2]|0,c,575);f=oC(k[a+16>>2]|0,k[c>>2]|0)|0;c=d+4|0;$t(a,d,c);g=Qqa(64)|0;B=0;va(491,g|0);h=B;B=0;if(h&1){h=Rb()|0;Sqa(g);Qb(h|0)}h=a+20|0;a=k[d>>2]|0;nd[k[(k[g>>2]|0)+32>>2]&1023](g,738,a);nd[k[(k[f>>2]|0)+48>>2]&1023](f,e,g);Un(k[(k[h>>2]|0)+(a<<2)>>2]|0,0,+p[e>>3]);a=k[c>>2]|0;nd[k[(k[g>>2]|0)+32>>2]&1023](g,738,a);nd[k[(k[f>>2]|0)+48>>2]&1023](f,e,g);Un(k[(k[h>>2]|0)+(a<<2)>>2]|0,0,+p[e>>3]);Ec[k[(k[g>>2]|0)+4>>2]&1023](g);r=b;return}function Rv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a+24|0;a=c+4|0;f=b+((Co(k[k[e>>2]>>2]|0)|0)<<3)|0;if(+p[f>>3]!=0.0){f=Co(k[k[e>>2]>>2]|0)|0;if(k[c>>2]|0){g=k[k[a>>2]>>2]|0;Jc[k[(k[g>>2]|0)+20>>2]&1](g,f,-1.0,0)}f=d+((Co(k[k[e>>2]>>2]|0)|0)<<3)|0;if(+p[f>>3]>=0.0)h=1;else h=0}else h=0;f=b+((Co(k[(k[e>>2]|0)+4>>2]|0)|0)<<3)|0;if(+p[f>>3]!=0.0){f=Co(k[(k[e>>2]|0)+4>>2]|0)|0;if(k[c>>2]|0){g=k[k[a>>2]>>2]|0;Jc[k[(k[g>>2]|0)+20>>2]&1](g,f,-1.0,0)}f=d+((Co(k[(k[e>>2]|0)+4>>2]|0)|0)<<3)|0;if(+p[f>>3]>=0.0)i=h+1|0;else i=h}else i=h;h=b+((Co(k[(k[e>>2]|0)+8>>2]|0)|0)<<3)|0;if(!(+p[h>>3]!=0.0)){j=i;return j|0}h=Co(k[(k[e>>2]|0)+8>>2]|0)|0;if(k[c>>2]|0){c=k[k[a>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,h,-1.0,0)}h=d+((Co(k[(k[e>>2]|0)+8>>2]|0)|0)<<3)|0;if(!(+p[h>>3]>=0.0)){j=i;return j|0}j=i+1|0;return j|0}function Sv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;pw(a,b,c,d,e,738);return}function Tv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;sw(a,b,c,d,738);return}function Uv(a){a=a|0;return Dw(a,k[a+44>>2]|0)|0}function Vv(a,b){a=a|0;b=b|0;return Ao(k[(k[a+24>>2]|0)+(b<<2)>>2]|0)|0}function Wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0;e=r;r=r+48|0;f=e+44|0;g=e+24|0;h=e+40|0;i=e;k[h>>2]=0;gu(a,h,f,g,d,0.0);j=k[f>>2]|0;if((j|0)>0)l=Rqa(48)|0;else l=0;if((j+-1|0)>>>0>=2){if((j|0)==3){xp(a,i,d);d=k[h>>2]|0;a=k[d>>2]|0;if(+p[i+(a<<3)>>3]==0.0){f=c+(a*3<<3)|0;k[l>>2]=k[f>>2];k[l+4>>2]=k[f+4>>2];k[l+8>>2]=k[f+8>>2];k[l+12>>2]=k[f+12>>2];k[l+16>>2]=k[f+16>>2];k[l+20>>2]=k[f+20>>2];m=1}else m=0;f=k[d+4>>2]|0;if(+p[i+(f<<3)>>3]==0.0){a=l+((0-m&3)<<3)|0;n=c+(f*3<<3)|0;k[a>>2]=k[n>>2];k[a+4>>2]=k[n+4>>2];k[a+8>>2]=k[n+8>>2];k[a+12>>2]=k[n+12>>2];k[a+16>>2]=k[n+16>>2];k[a+20>>2]=k[n+20>>2];if((m|0)!=1){o=1;q=19}}else{o=m;q=19}if((q|0)==19?(q=k[d+8>>2]|0,+p[i+(q<<3)>>3]==0.0):0){i=l+(o*3<<3)|0;o=c+(q*3<<3)|0;k[i>>2]=k[o>>2];k[i+4>>2]=k[o+4>>2];k[i+8>>2]=k[o+8>>2];k[i+12>>2]=k[o+12>>2];k[i+16>>2]=k[o+16>>2];k[i+20>>2]=k[o+20>>2]}}}else{o=k[h>>2]|0;i=(j|0)<3;q=0;d=0;while(1){if(i){m=(k[o+(d<<2)>>2]|0)*3|0;n=q+3|0;s=+p[c+(m<<3)>>3];t=+p[c+(m+1<<3)>>3];u=+p[c+(m+2<<3)>>3];m=q;a=j;while(1){f=(k[o+(a<<2)>>2]|0)*3|0;v=m*3|0;w=+p[g+(m<<3)>>3];p[l+(v<<3)>>3]=s+w*(+p[c+(f<<3)>>3]-s);p[l+(v+1<<3)>>3]=t+w*(+p[c+(f+1<<3)>>3]-t);p[l+(v+2<<3)>>3]=u+w*(+p[c+(f+2<<3)>>3]-u);a=a+1|0;if((a|0)==3)break;else m=m+1|0}x=n-j|0}else x=q;d=d+1|0;if((d|0)>=(j|0))break;else q=x}}x=k[h>>2]|0;if(!x){k[b>>2]=l;r=e;return}Tqa(x);k[b>>2]=l;r=e;return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0.0,Ga=0.0,Ha=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0;f=r;r=r+864|0;g=f+240|0;h=f+856|0;i=f+168|0;j=f+852|0;l=f+848|0;m=f+160|0;n=f+844|0;o=f+840|0;q=f+152|0;s=f+144|0;t=f+136|0;u=f+128|0;v=f+120|0;w=f;x=f+680|0;y=f+828|0;z=f+816|0;A=f+664|0;C=f+528|0;D=f+512|0;E=f+360|0;F=f+348|0;G=f+376|0;H=f+336|0;I=f+324|0;J=f+312|0;k[j>>2]=0;k[l>>2]=0;k[o>>2]=0;K=a+36|0;cO(k[K>>2]|0,h,285);dO(k[K>>2]|0,t,67);cO(k[K>>2]|0,o,733);dO(k[K>>2]|0,m,767);K=a+32|0;L=+WJ(k[K>>2]|0,272);M=+WJ(k[K>>2]|0,273);N=+WJ(k[K>>2]|0,274);O=+WJ(k[K>>2]|0,275);P=+WJ(k[K>>2]|0,265);K=a+16|0;R=oC(k[K>>2]|0,353)|0;if(!R){S=x+56|0;T=x+4|0;k[x>>2]=27524;k[S>>2]=27544;B=0;wa(508,x+56|0,T|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;W=U;vva(S);Qb(W|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);U=B;B=0;do if(U&1){X=Rb()|0;Y=Q;Z=X}else{k[T>>2]=27560;X=x+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[x+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,T|0,g|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(g);Yua(X);Ava(T);Y=$;Z=_;break}Yua(g);B=0;_=Ia(40,x|0,72616,49)|0;$=B;B=0;a:do if(!($&1)?(B=0,Xa(239,_|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,y|0,71825,72);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,z|0,75023,13);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(y);fa=ea;ga=da;break}B=0;wa(510,A|0,T|0);da=B;B=0;if(da&1){da=Rb()|0;ha=da;ia=Q;ja=1}else{B=0;ua(163,ba|0,y|0,z|0,3475,A|0);da=B;B=0;if(da&1)ka=1;else{B=0;eb(503,ba|0,1240,229);B=0;ka=0}da=Rb()|0;ea=Q;Yua(A);ha=da;ia=ea;ja=ka}Yua(z);Yua(y);if(ja){fa=ia;ga=ha}else{la=ia;ma=ha;break a}}else{ea=Rb()|0;fa=Q;ga=ea}while(0);zb(ba|0);la=fa;ma=ga}else na=17;while(0);if((na|0)==17){_=Rb()|0;la=Q;ma=_}k[x>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(X);Ava(T);vva(S);oa=la;pa=ma;Qb(pa|0)}while(0);V=Y;W=Z;vva(S);Qb(W|0)}jd[k[(k[R>>2]|0)+76>>2]&31](R,j,l,n,+p[m>>3]);R=oC(k[K>>2]|0,351)|0;if(!R){W=C+56|0;S=C+4|0;k[C>>2]=27524;k[W>>2]=27544;B=0;wa(508,C+56|0,S|0);Z=B;B=0;if(Z&1){Z=Rb()|0;qa=Q;ra=Z;vva(W);Qb(ra|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[W>>2]=27488;B=0;va(448,S|0);Z=B;B=0;do if(Z&1){Y=Rb()|0;sa=Q;ta=Y}else{k[S>>2]=27560;Y=C+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[C+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,S|0,g|0);V=B;B=0;if(V&1){V=Rb()|0;ma=Q;Yua(g);Yua(Y);Ava(S);sa=ma;ta=V;break}Yua(g);B=0;V=Ia(40,C|0,72666,56)|0;ma=B;B=0;b:do if(!(ma&1)?(B=0,Xa(239,V|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,D|0,71825,72);T=B;B=0;do if(!(T&1)){B=0;eb(502,E|0,75023,13);x=B;B=0;if(x&1){x=Rb()|0;ga=Q;Yua(D);xa=x;ya=ga;break}B=0;wa(510,F|0,S|0);ga=B;B=0;if(ga&1){ga=Rb()|0;za=1;Aa=Q;Ba=ga}else{B=0;ua(163,la|0,D|0,E|0,3480,F|0);ga=B;B=0;if(ga&1)Ca=1;else{B=0;eb(503,la|0,1240,229);B=0;Ca=0}ga=Rb()|0;x=Q;Yua(F);za=Ca;Aa=x;Ba=ga}Yua(E);Yua(D);if(za){xa=Ba;ya=Aa}else{Da=Aa;Ea=Ba;break b}}else{ga=Rb()|0;xa=ga;ya=Q}while(0);zb(la|0);Da=ya;Ea=xa}else na=41;while(0);if((na|0)==41){V=Rb()|0;Da=Q;Ea=V}k[C>>2]=27468;k[W>>2]=27488;k[S>>2]=27560;Yua(Y);Ava(S);vva(W);oa=Da;pa=Ea;Qb(pa|0)}while(0);qa=sa;ra=ta;vva(W);Qb(ra|0)}Fc[k[(k[R>>2]|0)+64>>2]&1023](R,q);R=oC(k[K>>2]|0,352)|0;if(R){Fc[k[(k[R>>2]|0)+64>>2]&1023](R,s);R=a+24|0;Ko(g,k[R>>2]|0,3,0);Fa=+p[g>>3];Ga=+p[g+8>>3];Ha=+p[g+24>>3];Ja=+p[g+32>>3];Ka=+p[g+48>>3];La=+p[g+56>>3];Ma=+aa(+((Ga*Ka+(Fa*Ja+(Ha*La-Ja*Ka)-Ga*Ha)-Fa*La)*.5/3.141592653589793));Ko(i,k[R>>2]|0,3,0);La=(+p[i>>3]+ +p[i+24>>3]+ +p[i+48>>3])/3.0;Fa=(+p[i+8>>3]+ +p[i+32>>3]+ +p[i+56>>3])/3.0;p[w+8>>3]=Ma;i=k[j>>2]|0;k[w+16>>2]=i;k[w+20>>2]=k[l>>2];k[w+24>>2]=k[n>>2];p[w+32>>3]=+p[m>>3];p[w+40>>3]=L;p[w+48>>3]=M;p[w+56>>3]=N;p[w+64>>3]=+p[q>>3];p[w+72>>3]=O;p[w+80>>3]=+p[s>>3];p[w+96>>3]=P;k[w+112>>2]=k[a+8>>2];k[w+88>>2]=k[o>>2];p[w+104>>3]=+p[t>>3];t=i;if((k[h>>2]|0)>0){i=c+4|0;o=b+4|0;a=0;do{P=+p[d+(a<<3)>>3]-La;O=+p[e+(a<<3)>>3]-Fa;N=+aa(+(P*P+O*O));p[w>>3]=N;Via(u,v,w);if(k[b>>2]|0){s=k[k[o>>2]>>2]|0;Jc[k[(k[s>>2]|0)+20>>2]&1](s,a,+p[u>>3],1)}if(k[c>>2]|0){s=k[k[i>>2]>>2]|0;Jc[k[(k[s>>2]|0)+20>>2]&1](s,a,+p[v>>3],1)}a=a+1|0}while((a|0)<(k[h>>2]|0));Na=k[j>>2]|0}else Na=t;if(Na)Tqa(Na);k[j>>2]=0;j=k[l>>2]|0;if(!j){r=f;return}Tqa(j);r=f;return}f=G+56|0;j=G+4|0;k[G>>2]=27524;k[f>>2]=27544;B=0;wa(508,G+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;Oa=Q;Pa=l;vva(f);Qb(Pa|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[f>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){Na=Rb()|0;Qa=Q;Ra=Na}else{k[j>>2]=27560;Na=G+36|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[G+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,j|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;h=Q;Yua(g);Yua(Na);Ava(j);Qa=h;Ra=t;break}Yua(g);B=0;t=Ia(40,G|0,72723,61)|0;h=B;B=0;c:do if(!(h&1)?(B=0,Xa(239,t|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,H|0,71825,72);v=B;B=0;do if(!(v&1)){B=0;eb(502,I|0,75023,13);i=B;B=0;if(i&1){i=Rb()|0;c=Q;Yua(H);Sa=i;Ta=c;break}B=0;wa(510,J|0,j|0);c=B;B=0;if(c&1){c=Rb()|0;Ua=1;Va=Q;Wa=c}else{B=0;ua(163,a|0,H|0,I|0,3485,J|0);c=B;B=0;if(c&1)Ya=1;else{B=0;eb(503,a|0,1240,229);B=0;Ya=0}c=Rb()|0;i=Q;Yua(J);Ua=Ya;Va=i;Wa=c}Yua(I);Yua(H);if(Ua){Sa=Wa;Ta=Va}else{Za=Va;_a=Wa;break c}}else{c=Rb()|0;Sa=c;Ta=Q}while(0);zb(a|0);Za=Ta;_a=Sa}else na=65;while(0);if((na|0)==65){t=Rb()|0;Za=Q;_a=t}k[G>>2]=27468;k[f>>2]=27488;k[j>>2]=27560;Yua(Na);Ava(j);vva(f);oa=Za;pa=_a;Qb(pa|0)}while(0);Oa=Qa;Pa=Ra;vva(f);Qb(Pa|0)}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,ba=0.0,ea=0.0,fa=0.0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;f=r;r=r+288|0;j=f+268|0;l=f+264|0;m=f+8|0;n=f;o=f+260|0;q=f+256|0;s=f+281|0;t=f+280|0;u=f+120|0;v=f+104|0;w=f+92|0;x=f+80|0;k[o>>2]=0;i[s>>0]=1;i[t>>0]=1;y=a+16|0;if(!(+pC(k[y>>2]|0,206)<0.0)){z=0.0;p[c>>3]=z;r=f;return}A=a+32|0;C=+WJ(k[A>>2]|0,265);D=+WJ(k[A>>2]|0,267);E=+WJ(k[A>>2]|0,276);A=a+36|0;bO(k[A>>2]|0,s,1009);bO(k[A>>2]|0,t,1010);if(i[t>>0]|0)aV(nO(k[A>>2]|0,1012)|0,o,q);cO(k[A>>2]|0,l,285);Ko(m,k[a+24>>2]|0,3,1);F=90.0-+p[m>>3];p[m>>3]=F;A=m+8|0;G=+p[A>>3];if(G<0.0){H=G+180.0+180.0;p[A>>3]=H;I=H}else I=G;G=I>-20.0?I:-20.0;H=I<400.0?I:400.0;J=m+24|0;K=90.0-+p[J>>3];p[J>>3]=K;J=m+32|0;L=+p[J>>3];if(L<0.0){M=L+180.0+180.0;p[J>>3]=M;N=M}else N=L;L=N>G?N:G;G=N<H?N:H;O=m+48|0;H=90.0-+p[O>>3];p[O>>3]=H;O=m+56|0;M=+p[O>>3];if(M<0.0){P=M+180.0+180.0;p[O>>3]=P;R=P}else R=M;if((R>L?R:L)>180.0?(R<G?R:G)==0.0:0){if(I==0.0){p[A>>3]=360.0;S=360.0}else S=I;if(N==0.0){p[J>>3]=360.0;T=360.0}else T=N;if(R==0.0){p[O>>3]=360.0;U=S;V=T;W=360.0}else{U=S;V=T;W=R}}else{U=I;V=N;W=R}if(F==0.0){R=(V+W)*.5;p[A>>3]=R;X=R}else X=U;if(K==0.0){U=(X+W)*.5;p[J>>3]=U;Y=U}else Y=V;if(H==0.0){V=(X+Y)*.5;p[O>>3]=V;Z=V}else Z=W;if(F==180.0){W=(Y+Z)*.5;p[A>>3]=W;_=W}else _=X;if(K==180.0){X=(_+Z)*.5;p[J>>3]=X;ba=X}else ba=Y;Y=_+ba;if(H==180.0){ba=Y*.5;p[O>>3]=ba;ea=ba}else ea=Z;Z=(Y+ea)/3.0;ea=(90.0-(F+K+H)/3.0)/180.0*3.141592653589793;H=(Z>180.0?Z+-180.0+-180.0:Z)/180.0*3.141592653589793;Z=+Zc[k[(k[a>>2]|0)+544>>2]&255](a);a=oC(k[y>>2]|0,1001)|0;if(a){Fc[k[(k[a>>2]|0)+64>>2]&1023](a,n);K=+p[n>>3];F=C*Z*K/(D*g)+0.0;n=i[t>>0]|0;t=i[s>>0]|0;if(!((t|n)<<24>>24)){z=F;p[c>>3]=z;r=f;return}s=k[l>>2]|0;l=Rqa(s>>>0>1073741823?-1:s<<2)|0;a=Rqa(s>>>0>536870911?-1:s<<3)|0;if((s|0)>0){g=+ca(+ea);y=n<<24>>24==0;D=+((k[q>>2]|0)+-1|0);q=k[o>>2]|0;Y=C*3.0/E*Z/h*K;if(!(t<<24>>24)){t=0;do{k[l+(t<<2)>>2]=t;K=+p[d+(t<<3)>>3]/180.0*3.141592653589793;h=+da(+(+$(+(K-ea))*.5));Z=+da(+(+$(+(+p[e+(t<<3)>>3]/180.0*3.141592653589793-H))*.5));if(y)fa=0.0;else{o=q+(~~(+ga(+(+aa(+(h*h+ +ca(+K)*g*(Z*Z)))))*2.0/3.141592653589793*D)<<3)|0;fa=+p[o>>3]+0.0}p[a+(t<<3)>>3]=(fa+0.0)*Y;t=t+1|0}while((t|0)<(s|0))}else{t=0;do{k[l+(t<<2)>>2]=t;fa=+p[d+(t<<3)>>3]/180.0*3.141592653589793;Z=+da(+(+$(+(fa-ea))*.5));K=+da(+(+$(+(+p[e+(t<<3)>>3]/180.0*3.141592653589793-H))*.5));h=+ga(+(+aa(+(Z*Z+ +ca(+fa)*g*(K*K)))))*2.0;K=.5/+da(+(h*.5));if(y)ha=0.0;else ha=+p[q+(~~(h/3.141592653589793*D)<<3)>>3]+0.0;p[a+(t<<3)>>3]=(K+ha)*Y;t=t+1|0}while((t|0)<(s|0))}}if(k[b>>2]|0){t=k[k[b+4>>2]>>2]|0;Dc[k[(k[t>>2]|0)+16>>2]&255](t,s,l,a,1)}Tqa(a);Tqa(l);z=F;p[c>>3]=z;r=f;return}f=u+56|0;c=u+4|0;k[u>>2]=27524;k[f>>2]=27544;B=0;wa(508,u+56|0,c|0);l=B;B=0;if(l&1){l=Rb()|0;ia=Q;ja=l;vva(f);Qb(ja|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[f>>2]=27488;B=0;va(448,c|0);l=B;B=0;do if(l&1){a=Rb()|0;ka=Q;la=a}else{k[c>>2]=27560;a=u+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[u+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,c|0,j|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(j);Yua(a);Ava(c);ka=t;la=s;break}Yua(j);B=0;s=Ia(40,u|0,72785,55)|0;t=B;B=0;if(!(t&1)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,v|0,71825,72);t=B;B=0;do if(t&1){b=Rb()|0;ma=Q;na=b}else{B=0;eb(502,w|0,75190,20);b=B;B=0;if(b&1){b=Rb()|0;q=Q;Yua(v);ma=q;na=b;break}B=0;wa(510,x|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;oa=Q;pa=b;qa=1}else{B=0;ua(163,s|0,v|0,w|0,3638,x|0);b=B;B=0;if(b&1)ra=1;else{B=0;eb(503,s|0,1240,229);B=0;ra=0}b=Rb()|0;q=Q;Yua(x);oa=q;pa=b;qa=ra}Yua(w);Yua(v);if(qa){ma=oa;na=pa;break}else{sa=oa;ta=pa}k[u>>2]=27468;k[f>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(f);Qb(ta|0)}while(0);zb(s|0);sa=ma;ta=na;k[u>>2]=27468;k[f>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(f);Qb(ta|0)}t=Rb()|0;sa=Q;ta=t;k[u>>2]=27468;k[f>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(f);Qb(ta|0)}while(0);ia=ka;ja=la;vva(f);Qb(ja|0)}function Zv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0;f=r;r=r+96|0;j=f+80|0;l=f;m=f+76|0;n=f+72|0;o=f+85|0;q=f+84|0;k[m>>2]=0;i[o>>0]=1;i[q>>0]=1;if(!(aq(a)|0)){r=f;return}s=a+36|0;bO(k[s>>2]|0,o,1009);bO(k[s>>2]|0,q,1010);if(!((i[q>>0]|i[o>>0])<<24>>24)){r=f;return}t=a+32|0;g=+WJ(k[t>>2]|0,267);u=+WJ(k[t>>2]|0,276);cO(k[s>>2]|0,j,285);t=a+24|0;v=c+((Bo(k[k[t>>2]>>2]|0)|0)<<3)|0;w=+p[v>>3]/3.0+0.0;v=c+((Bo(k[(k[t>>2]|0)+4>>2]|0)|0)<<3)|0;x=w+ +p[v>>3]/3.0;v=c+((Bo(k[(k[t>>2]|0)+8>>2]|0)|0)<<3)|0;w=x+ +p[v>>3]/3.0;x=+Zc[k[(k[a>>2]|0)+544>>2]&255](a);Ko(l,k[t>>2]|0,3,1);y=90.0-+p[l>>3];p[l>>3]=y;t=l+8|0;z=+p[t>>3];if(z<0.0){A=z+180.0+180.0;p[t>>3]=A;B=A}else B=z;z=B>-20.0?B:-20.0;A=B<400.0?B:400.0;a=l+24|0;C=90.0-+p[a>>3];p[a>>3]=C;a=l+32|0;D=+p[a>>3];if(D<0.0){E=D+180.0+180.0;p[a>>3]=E;F=E}else F=D;D=F>z?F:z;z=F<A?F:A;v=l+48|0;A=90.0-+p[v>>3];p[v>>3]=A;v=l+56|0;E=+p[v>>3];if(E<0.0){G=E+180.0+180.0;p[v>>3]=G;H=G}else H=E;if((H>D?H:D)>180.0?(H<z?H:z)==0.0:0){if(B==0.0){p[t>>3]=360.0;I=360.0}else I=B;if(F==0.0){p[a>>3]=360.0;J=360.0}else J=F;if(H==0.0){p[v>>3]=360.0;K=I;L=J;M=360.0}else{K=I;L=J;M=H}}else{K=B;L=F;M=H}if(y==0.0){H=(L+M)*.5;p[t>>3]=H;N=H}else N=K;if(C==0.0){K=(N+M)*.5;p[a>>3]=K;O=K}else O=L;if(A==0.0){L=(N+O)*.5;p[v>>3]=L;P=L}else P=M;if(y==180.0){M=(O+P)*.5;p[t>>3]=M;Q=M}else Q=N;if(C==180.0){N=(Q+P)*.5;p[a>>3]=N;R=N}else R=O;O=Q+R;if(A==180.0){R=O*.5;p[v>>3]=R;S=R}else S=P;P=(O+S)/3.0;S=(90.0-(y+C+A)/3.0)/180.0*3.141592653589793;A=(P>180.0?P+-180.0+-180.0:P)/180.0*3.141592653589793;if(i[q>>0]|0){aV(nO(k[s>>2]|0,1012)|0,m,n);s=k[j>>2]|0;v=Rqa(s>>>0>536870911?-1:s<<3)|0;if(!s)T=v;else{WEa(v|0,0,s<<3|0)|0;T=v}}else T=0;v=i[o>>0]|0;s=v<<24>>24==0;a=k[j>>2]|0;if(!s){j=Rqa(a>>>0>536870911?-1:a<<3)|0;if(!a){U=0;V=j}else{WEa(j|0,0,a<<3|0)|0;U=a;V=j}}else{U=a;V=0}a=Rqa(U>>>0>1073741823?-1:U<<2)|0;j=Rqa(U>>>0>536870911?-1:U<<3)|0;a:do if((U|0)!=0?(WEa(j|0,0,U<<3|0)|0,(U|0)>0):0){t=i[q>>0]|0;l=t<<24>>24==0;P=w*(g*3.0/u*x/h);C=+((k[n>>2]|0)+-1|0);c=k[m>>2]|0;if(!((v|t)<<24>>24)){t=0;while(1){k[a+(t<<2)>>2]=t;if(!s){W=j+(t<<3)|0;p[W>>3]=+p[W>>3]+P*+p[V+(t<<3)>>3]}if(!l){W=j+(t<<3)|0;p[W>>3]=+p[W>>3]+P*+p[T+(t<<3)>>3]}t=t+1|0;if((t|0)>=(U|0))break a}}y=+ca(+S);t=0;do{k[a+(t<<2)>>2]=t;O=+p[d+(t<<3)>>3]/180.0*3.141592653589793;R=+da(+(+$(+(O-S))*.5));Q=+da(+(+$(+(+p[e+(t<<3)>>3]/180.0*3.141592653589793-A))*.5));N=+ga(+(+aa(+(R*R+ +ca(+O)*y*(Q*Q)))))*2.0;if(!s){Q=.5/+da(+(N*.5));p[V+(t<<3)>>3]=Q}if(!l){W=T+(t<<3)|0;p[W>>3]=+p[c+(~~(N/3.141592653589793*C)<<3)>>3]+ +p[W>>3]}if(!s){W=j+(t<<3)|0;p[W>>3]=+p[W>>3]+P*+p[V+(t<<3)>>3]}if(!l){W=j+(t<<3)|0;p[W>>3]=+p[W>>3]+P*+p[T+(t<<3)>>3]}t=t+1|0}while((t|0)<(U|0))}while(0);if(k[b>>2]|0){s=k[k[b+4>>2]>>2]|0;Dc[k[(k[s>>2]|0)+16>>2]&255](s,U,a,j,1)}Tqa(j);Tqa(a);if(!((T|0)==0|(i[q>>0]|0)==0))Tqa(T);if((V|0)==0|(i[o>>0]|0)==0){r=f;return}Tqa(V);r=f;return}function _v(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0;if(!(aq(a)|0)){c=0.0;return +c}d=+Zc[k[(k[a>>2]|0)+544>>2]&255](a);e=a+24|0;a=b+((Bo(k[k[e>>2]>>2]|0)|0)<<3)|0;f=+p[a>>3]/3.0+0.0;a=b+((Bo(k[(k[e>>2]|0)+4>>2]|0)|0)<<3)|0;g=f+ +p[a>>3]/3.0;a=b+((Bo(k[(k[e>>2]|0)+8>>2]|0)|0)<<3)|0;c=d*(g+ +p[a>>3]/3.0);return +c}function $v(a){a=a|0;var b=0.0;if(!(aq(a)|0)){b=0.0;return +b}b=+Zc[k[(k[a>>2]|0)+544>>2]&255](a);return +b}function aw(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73890,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,76,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function bw(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73799,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,87,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74656,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,99,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function dw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74747,38);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,166,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ew(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73737,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,169,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function fw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73723,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,172,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function gw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73710,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,179,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function hw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73680,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,184,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function iw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73562,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,195,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function jw(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+192|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;a=h+56|0;m=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=h+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,m|0,g|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);Yua(q);Ava(m);s=v;t=u;break}Yua(g);B=0;u=Ia(40,h|0,149721,19)|0;v=B;B=0;a:do if(!(v&1)?(B=0,Xa(239,u|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,i|0,72850,84);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,73539,22);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(i);A=z;C=y;break}B=0;wa(510,l|0,m|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,i|0,j|0,197,l|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(l);D=z;E=y;F=G}Yua(j);Yua(i);if(F){A=D;C=E}else{H=D;I=E;break a}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C}else J=16;while(0);if((J|0)==16){u=Rb()|0;H=Q;I=u}k[h>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(I|0)}while(0);o=s;p=t;vva(a);Qb(p|0);return +(0.0)}function kw(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,92779,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,127,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function lw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73369,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,140,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function mw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,72850,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,99724,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,200,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function nw(a){a=a|0;return}function ow(a){a=a|0;return}function pw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;g=r;r=r+112|0;h=g;i=qw(0,f)|0;rw(a,h,d,e,f);f=(i|0)>0;if(f){j=0.0;e=0;while(1){k=j+ +p[h+(e<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){l=k;break}else j=k}if(f){j=0.0;f=0;while(1){k=j+ +p[h+(f+i<<3)>>3]*+p[c+(f<<3)>>3];f=f+1|0;if((f|0)==(i|0)){m=l;n=k;break}else j=k}}else{m=l;n=0.0}}else{m=0.0;n=0.0}p[b>>3]=m;p[b+8>>3]=n;r=g;return}function qw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;do switch(b|0){case 736:{h=1;r=a;return h|0}case 738:{h=3;r=a;return h|0}case 739:{h=3;r=a;return h|0}case 740:{h=4;r=a;return h|0}case 741:{h=4;r=a;return h|0}case 742:{h=6;r=a;return h|0}case 743:{h=7;r=a;return h|0}case 744:{h=7;r=a;return h|0}case 749:{h=6;r=a;return h|0}case 750:{h=6;r=a;return h|0}case 752:{h=7;r=a;return h|0}case 751:{h=7;r=a;return h|0}case 753:{h=9;r=a;return h|0}case 754:{h=6;r=a;return h|0}case 755:{h=9;r=a;return h|0}case 757:{h=10;r=a;return h|0}case 758:{h=7;r=a;return h|0}case 921:{h=0;r=a;return h|0}default:{i=d+56|0;j=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(i);Qb(n|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){o=Rb()|0;p=Q;q=o}else{k[j>>2]=27560;o=d+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(o);Ava(j);p=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,132447,13)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,b|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,72935,75);v=B;B=0;do if(!(v&1)){B=0;eb(502,f|0,75442,13);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(e);w=s;x=t;break}B=0;wa(510,g|0,j|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,e|0,f|0,489,g|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(g);y=s;z=t;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}while(0);m=p;n=q;vva(i);Qb(n|0)}}while(0);return 0}function rw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;a=r;r=r+176|0;f=a+144|0;g=a+112|0;h=a;i=qw(0,e)|0;vw(0,h,d,e);j=+p[c>>3];k=+p[c+8>>3];l=+p[c+24>>3];m=+p[c+32>>3];n=+p[c+48>>3];o=+p[c+56>>3];p[f>>3]=(l-j)*.5;p[f+16>>3]=(n*2.0-j-l)*.28867513459481287;p[f+8>>3]=(m-k)*.5;p[f+24>>3]=(o*2.0-k-m)*.28867513459481287;bY(g,f);if((i|0)<=0){r=a;return}m=+p[g>>3];k=+p[g+8>>3];o=+p[g+16>>3];l=+p[g+24>>3];g=0;do{j=+p[h+(g<<3)>>3];f=g+i|0;n=+p[h+(f<<3)>>3];p[b+(g<<3)>>3]=m*j+k*n;p[b+(f<<3)>>3]=o*j+l*n;g=g+1|0}while((g|0)!=(i|0));r=a;return}function sw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0.0,j=0.0,k=0.0;a=r;r=r+64|0;f=a;g=qw(0,e)|0;tw(0,f,d,e);if((g|0)>0){h=0;i=0.0}else{j=0.0;p[b>>3]=j;r=a;return}while(1){k=i+ +p[f+(h<<3)>>3]*+p[c+(h<<3)>>3];h=h+1|0;if((h|0)==(g|0)){j=k;break}else i=k}p[b>>3]=j;r=a;return}function tw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{p[b>>3]=1.0;r=a;return}case 739:case 738:{p[b>>3]=+p[c+40>>3];p[b+8>>3]=+p[c+48>>3];p[b+16>>3]=+p[c+56>>3];r=a;return}case 741:case 740:{j=c+40|0;p[b>>3]=+p[j>>3];l=c+48|0;p[b+8>>3]=+p[l>>3];m=c+56|0;p[b+16>>3]=+p[m>>3];p[b+24>>3]=+p[j>>3]*27.0*+p[l>>3]*+p[m>>3];r=a;return}case 742:{m=c+40|0;n=+p[m>>3];p[b>>3]=n*(n*2.0+-1.0);l=c+48|0;n=+p[l>>3];p[b+8>>3]=n*(n*2.0+-1.0);j=c+56|0;n=+p[j>>3];p[b+16>>3]=n*(n*2.0+-1.0);p[b+24>>3]=+p[j>>3]*4.0*+p[l>>3];p[b+32>>3]=+p[j>>3]*4.0*+p[m>>3];p[b+40>>3]=+p[m>>3]*4.0*+p[l>>3];r=a;return}case 744:case 743:{l=c+40|0;n=+p[l>>3];p[b>>3]=n*(n*2.0+-1.0);m=c+48|0;n=+p[m>>3];p[b+8>>3]=n*(n*2.0+-1.0);j=c+56|0;n=+p[j>>3];p[b+16>>3]=n*(n*2.0+-1.0);p[b+24>>3]=+p[j>>3]*4.0*+p[m>>3];p[b+32>>3]=+p[j>>3]*4.0*+p[l>>3];p[b+40>>3]=+p[l>>3]*4.0*+p[m>>3];p[b+48>>3]=+p[l>>3]*27.0*+p[m>>3]*+p[j>>3];r=a;return}case 921:{r=a;return}default:{a=f+56|0;j=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,j|0);m=B;B=0;if(m&1){m=Rb()|0;o=Q;q=m;vva(a);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,j|0);m=B;B=0;do if(m&1){l=Rb()|0;s=Q;t=l}else{k[j>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;c=Q;Yua(e);Yua(l);Ava(j);s=c;t=b;break}Yua(e);B=0;b=Ia(40,f|0,132447,13)|0;c=B;B=0;if((((!(c&1)?(B=0,c=ya(427,d|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(c)|0,B=0,v=Ia(40,b|0,c|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,72935,75);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,75456,17);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Yua(g);w=b;x=c;break}B=0;wa(510,i|0,j|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;z=c;A=1}else{B=0;ua(163,u|0,g|0,h|0,185,i|0);c=B;B=0;if(c&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}c=Rb()|0;b=Q;Yua(i);y=b;z=c;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(l);Ava(j);vva(a);Qb(E|0)}}else{c=Rb()|0;w=Q;x=c}while(0);zb(u|0);D=w;E=x;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(l);Ava(j);vva(a);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(l);Ava(j);vva(a);Qb(E|0)}while(0);o=s;q=t;vva(a);Qb(q|0)}}}function uw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+224|0;a=d+208|0;e=d;f=d+72|0;g=d+56|0;h=d+44|0;i=d+32|0;j=+p[c>>3];l=+p[c+8>>3];m=+p[c+24>>3];n=+p[c+32>>3];o=+p[c+48>>3];q=+p[c+56>>3];p[e>>3]=(m-j)*.5;p[e+16>>3]=(o*2.0-j-m)*.28867513459481287;p[e+8>>3]=(n-l)*.5;p[e+24>>3]=(q*2.0-l-n)*.28867513459481287;aY(b,e);if(!(+p[b>>3]<0.0)){r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);e=B;B=0;if(e&1){e=Rb()|0;s=Q;t=e;vva(d);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);e=B;B=0;do if(e&1){c=Rb()|0;u=Q;v=c}else{k[b>>2]=27560;c=f+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[f+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(a);Yua(c);Ava(b);u=x;v=w;break}Yua(a);B=0;w=Ia(40,f|0,75474,30)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,g|0,72935,75);x=B;B=0;do if(!(x&1)){B=0;eb(502,h|0,75505,22);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(g);A=z;C=y;break}B=0;wa(510,i|0,b|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,g|0,h|0,117,i|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(i);D=z;E=y;F=G}Yua(h);Yua(g);if(F){A=D;C=E}else{H=D;I=E;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(I|0)}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(I|0)}x=Rb()|0;H=Q;I=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(I|0)}while(0);s=u;t=v;vva(d);Qb(t|0)}function vw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;r=a;return}case 739:case 738:{p[b>>3]=-.5;p[b+24>>3]=-.28867513459481287;p[b+8>>3]=.5;p[b+32>>3]=-.28867513459481287;p[b+16>>3]=0.0;p[b+40>>3]=.5773502691896257;r=a;return}case 741:case 740:{p[b>>3]=-.5;p[b+32>>3]=-.28867513459481287;p[b+8>>3]=.5;p[b+40>>3]=-.28867513459481287;p[b+16>>3]=0.0;p[b+48>>3]=.5773502691896257;j=c+48|0;l=c+56|0;m=+p[l>>3];n=c+40|0;p[b+24>>3]=(+p[j>>3]*-.5*m+m*(+p[n>>3]*.5))*27.0;m=+p[j>>3];o=+p[l>>3];q=+p[n>>3];p[b+56>>3]=(m*(q*.3333333333333333)+(m*-.16666666666666666*o-o*(q*.16666666666666666)))*46.76537180435968;r=a;return}case 742:{n=c+40|0;p[b>>3]=.5-+p[n>>3]*2.0;p[b+48>>3]=.28867513459481287-+p[n>>3]*1.1547005383792515;l=c+48|0;p[b+8>>3]=+p[l>>3]*2.0+-.5;p[b+56>>3]=.28867513459481287-+p[l>>3]*1.1547005383792515;p[b+16>>3]=0.0;j=c+56|0;p[b+64>>3]=+p[j>>3]*2.309401076758503+-.5773502691896257;p[b+24>>3]=+p[j>>3]*2.0;p[b+72>>3]=+p[l>>3]*2.309401076758503-+p[j>>3]*1.1547005383792515;p[b+32>>3]=+p[j>>3]*-2.0;p[b+80>>3]=+p[n>>3]*2.309401076758503-+p[j>>3]*1.1547005383792515;p[b+40>>3]=(+p[n>>3]-+p[l>>3])*2.0;p[b+88>>3]=(+p[n>>3]+ +p[l>>3])*-1.1547005383792515;r=a;return}case 744:case 743:{l=c+40|0;p[b>>3]=.5-+p[l>>3]*2.0;p[b+56>>3]=.28867513459481287-+p[l>>3]*1.1547005383792515;n=c+48|0;p[b+8>>3]=+p[n>>3]*2.0+-.5;p[b+64>>3]=.28867513459481287-+p[n>>3]*1.1547005383792515;p[b+16>>3]=0.0;j=c+56|0;p[b+72>>3]=+p[j>>3]*2.309401076758503+-.5773502691896257;p[b+24>>3]=+p[j>>3]*2.0;p[b+80>>3]=+p[n>>3]*2.309401076758503-+p[j>>3]*1.1547005383792515;p[b+32>>3]=+p[j>>3]*-2.0;p[b+88>>3]=+p[l>>3]*2.309401076758503-+p[j>>3]*1.1547005383792515;p[b+40>>3]=(+p[l>>3]-+p[n>>3])*2.0;p[b+96>>3]=(+p[l>>3]+ +p[n>>3])*-1.1547005383792515;q=+p[j>>3];p[b+48>>3]=(+p[n>>3]*-.5*q+q*(+p[l>>3]*.5))*27.0;q=+p[n>>3];o=+p[j>>3];m=+p[l>>3];p[b+104>>3]=(q*(m*.3333333333333333)+(q*-.16666666666666666*o-o*(m*.16666666666666666)))*46.76537180435968;r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);l=B;B=0;if(l&1){l=Rb()|0;s=Q;t=l;vva(a);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);l=B;B=0;do if(l&1){j=Rb()|0;u=Q;v=j}else{k[b>>2]=27560;j=f+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);n=B;B=0;if(n&1){n=Rb()|0;c=Q;Yua(e);Yua(j);Ava(b);u=c;v=n;break}Yua(e);B=0;n=Ia(40,f|0,132447,13)|0;c=B;B=0;if((((!(c&1)?(B=0,c=ya(427,d|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(c)|0,B=0,x=Ia(40,n|0,c|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,g|0,72935,75);x=B;B=0;do if(!(x&1)){B=0;eb(502,h|0,75528,37);c=B;B=0;if(c&1){c=Rb()|0;n=Q;Yua(g);y=n;z=c;break}B=0;wa(510,i|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;A=Q;C=c;D=1}else{B=0;ua(163,w|0,g|0,h|0,301,i|0);c=B;B=0;if(c&1)E=1;else{B=0;eb(503,w|0,1240,229);B=0;E=0}c=Rb()|0;n=Q;Yua(i);A=n;C=c;D=E}Yua(h);Yua(g);if(D){y=A;z=C}else{F=A;G=C;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(a);Qb(G|0)}}else{c=Rb()|0;y=Q;z=c}while(0);zb(w|0);F=y;G=z;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(a);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(a);Qb(G|0)}while(0);s=u;t=v;vva(a);Qb(t|0)}}}function ww(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0.0,i=0.0;a=qw(0,f)|0;g=Rqa(a>>>0>536870911?-1:a<<3)|0;tw(0,g,c,f);h=+p[g+(d<<3)>>3];p[b>>3]=h;i=+p[g+(e<<3)>>3];p[b+8>>3]=i;p[b+16>>3]=-h;p[b+24>>3]=-i;Tqa(g);return}function xw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0.0,i=0.0;a=qw(0,f)|0;g=Rqa(a>>>0>536870911?-1:a<<3)|0;tw(0,g,c,f);h=+p[g+(d<<3)>>3];p[b>>3]=h;i=+p[g+(e<<3)>>3];p[b+8>>3]=i;p[b+16>>3]=h;p[b+24>>3]=i;Tqa(g);return}function yw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c+24>>3]-+p[c>>3];j=+p[c+32>>3]-+p[c+8>>3];l=+aa(+(i*i+j*j))*.5;p[b>>3]=l;if(!(l<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;m=Q;n=c;vva(d);Qb(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){o=Rb()|0;q=Q;s=o}else{k[b>>2]=27560;o=e+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);Yua(o);Ava(b);q=u;s=t;break}Yua(a);B=0;t=Ia(40,e|0,75474,30)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,72935,75);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,75593,29);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,b|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,366,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}u=Rb()|0;E=Q;F=u;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}while(0);m=q;n=s;vva(d);Qb(n|0)}function zw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;a=r;r=r+192|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;m=qw(0,f)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;tw(0,n,c,f);switch(f|0){case 739:case 738:{p[b>>3]=+p[n+(d<<3)>>3];p[b+8>>3]=+p[n+(e<<3)>>3];Tqa(n);r=a;return}case 741:case 740:{p[b>>3]=+p[n+(d<<3)>>3];p[b+8>>3]=+p[n+(e<<3)>>3];Tqa(n);r=a;return}case 742:{p[b>>3]=+p[n+(d<<3)>>3];p[b+8>>3]=+p[n+(e<<3)>>3];p[b+16>>3]=+p[n+(e+2<<3)>>3];Tqa(n);r=a;return}default:{a=h+56|0;n=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,n|0);e=B;B=0;if(e&1){e=Rb()|0;o=Q;q=e;vva(a);Qb(q|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,n|0);e=B;B=0;do if(e&1){b=Rb()|0;s=Q;t=b}else{k[n>>2]=27560;b=h+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,n|0,g|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(g);Yua(b);Ava(n);s=c;t=d;break}Yua(g);B=0;d=Ia(40,h|0,132447,13)|0;c=B;B=0;if((((!(c&1)?(B=0,c=ya(427,f|0)|0,m=B,B=0,!(m&1)):0)?(m=Lta(c)|0,B=0,u=Ia(40,d|0,c|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,u|0,146481,18)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,i|0,72935,75);u=B;B=0;do if(!(u&1)){B=0;eb(502,j|0,73011,24);c=B;B=0;if(c&1){c=Rb()|0;d=Q;Yua(i);v=d;w=c;break}B=0;wa(510,l|0,n|0);c=B;B=0;if(c&1){c=Rb()|0;x=Q;y=c;z=1}else{B=0;ua(163,m|0,i|0,j|0,402,l|0);c=B;B=0;if(c&1)A=1;else{B=0;eb(503,m|0,1240,229);B=0;A=0}c=Rb()|0;d=Q;Yua(l);x=d;y=c;z=A}Yua(j);Yua(i);if(z){v=x;w=y}else{C=x;D=y;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(a);Qb(D|0)}}else{c=Rb()|0;v=Q;w=c}while(0);zb(m|0);C=v;D=w;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(a);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(a);Qb(D|0)}while(0);o=s;q=t;vva(a);Qb(q|0)}}}function Aw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;a=r;r=r+528|0;f=a+516|0;g=a+368|0;h=a+504|0;i=a+356|0;j=a+344|0;l=a+208|0;m=a+60|0;n=a+48|0;o=a+36|0;p=a+72|0;q=a+24|0;s=a+12|0;t=a;switch(e|0){case 741:case 740:case 739:case 738:{u=Rqa(8)|0;switch(d|0){case 0:{k[u>>2]=1;k[u+4>>2]=2;v=u;w=2;k[b>>2]=w;k[c>>2]=v;r=a;return}case 1:{k[u>>2]=2;k[u+4>>2]=0;v=u;w=2;k[b>>2]=w;k[c>>2]=v;r=a;return}case 2:{k[u>>2]=0;k[u+4>>2]=1;v=u;w=2;k[b>>2]=w;k[c>>2]=v;r=a;return}default:{u=g+56|0;x=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=g+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,x|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(f);Yua(C);Ava(x);D=G;E=F;break}Yua(f);B=0;F=Ia(40,g|0,73036,21)|0;G=B;B=0;a:do if(((!(G&1)?(B=0,H=Xa(242,F|0,d|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,H|0,73058,24)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,72935,75);H=B;B=0;do if(!(H&1)){B=0;eb(502,i|0,73083,17);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(h);L=K;M=J;break}B=0;wa(510,j|0,x|0);J=B;B=0;if(J&1){J=Rb()|0;N=J;O=Q;P=1}else{B=0;ua(163,I|0,h|0,i|0,433,j|0);J=B;B=0;if(J&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}J=Rb()|0;K=Q;Yua(j);N=J;O=K;P=R}Yua(i);Yua(h);if(P){L=O;M=N}else{S=O;T=N;break a}}else{K=Rb()|0;L=Q;M=K}while(0);zb(I|0);S=L;T=M}else U=23;while(0);if((U|0)==23){F=Rb()|0;S=Q;T=F}k[g>>2]=27468;k[u>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(u);V=S;W=T;Qb(W|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}}break}case 742:{A=Rqa(12)|0;switch(d|0){case 0:{k[A>>2]=1;k[A+4>>2]=2;k[A+8>>2]=3;v=A;w=3;k[b>>2]=w;k[c>>2]=v;r=a;return}case 1:{k[A>>2]=2;k[A+4>>2]=0;k[A+8>>2]=4;v=A;w=3;k[b>>2]=w;k[c>>2]=v;r=a;return}case 2:{k[A>>2]=0;k[A+4>>2]=1;k[A+8>>2]=5;v=A;w=3;k[b>>2]=w;k[c>>2]=v;r=a;return}default:{a=l+56|0;v=l+4|0;k[l>>2]=27524;k[a>>2]=27544;B=0;wa(508,l+56|0,v|0);c=B;B=0;if(c&1){c=Rb()|0;X=Q;Y=c;vva(a);Qb(Y|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[a>>2]=27488;B=0;va(448,v|0);c=B;B=0;do if(c&1){w=Rb()|0;Z=Q;_=w}else{k[v>>2]=27560;w=l+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;A=Q;Yua(f);Yua(w);Ava(v);Z=A;_=b;break}Yua(f);B=0;b=Ia(40,l|0,73036,21)|0;A=B;B=0;b:do if(((!(A&1)?(B=0,u=Xa(242,b|0,d|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,u|0,73058,24)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,m|0,72935,75);u=B;B=0;do if(!(u&1)){B=0;eb(502,n|0,73083,17);D=B;B=0;if(D&1){D=Rb()|0;z=Q;Yua(m);$=D;aa=z;break}B=0;wa(510,o|0,v|0);z=B;B=0;if(z&1){z=Rb()|0;ba=1;ca=Q;da=z}else{B=0;ua(163,E|0,m|0,n|0,456,o|0);z=B;B=0;if(z&1)ea=1;else{B=0;eb(503,E|0,1240,229);B=0;ea=0}z=Rb()|0;D=Q;Yua(o);ba=ea;ca=D;da=z}Yua(n);Yua(m);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{z=Rb()|0;$=z;aa=Q}while(0);zb(E|0);fa=aa;ga=$}else U=52;while(0);if((U|0)==52){b=Rb()|0;fa=Q;ga=b}k[l>>2]=27468;k[a>>2]=27488;k[v>>2]=27560;Yua(w);Ava(v);vva(a);V=fa;W=ga;Qb(W|0)}while(0);X=Z;Y=_;vva(a);Qb(Y|0)}}break}default:{Y=p+56|0;a=p+4|0;k[p>>2]=27524;k[Y>>2]=27544;B=0;wa(508,p+56|0,a|0);_=B;B=0;if(_&1){_=Rb()|0;ha=Q;ia=_;vva(Y);Qb(ia|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Y>>2]=27488;B=0;va(448,a|0);_=B;B=0;do if(_&1){Z=Rb()|0;ja=Q;ka=Z}else{k[a>>2]=27560;Z=p+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[p+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);X=B;B=0;if(X&1){X=Rb()|0;ga=Q;Yua(f);Yua(Z);Ava(a);ja=ga;ka=X;break}Yua(f);B=0;X=Ia(40,p|0,132447,13)|0;ga=B;B=0;c:do if((((!(ga&1)?(B=0,fa=ya(427,e|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(fa)|0,B=0,l=Ia(40,X|0,fa|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,l|0,146481,18)|0,l=B,B=0,!(l&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,q|0,72935,75);l=B;B=0;do if(!(l&1)){B=0;eb(502,s|0,73083,17);fa=B;B=0;if(fa&1){fa=Rb()|0;$=Q;Yua(q);la=fa;ma=$;break}B=0;wa(510,t|0,a|0);$=B;B=0;if($&1){$=Rb()|0;na=1;oa=Q;pa=$}else{B=0;ua(163,v|0,q|0,s|0,460,t|0);$=B;B=0;if($&1)qa=1;else{B=0;eb(503,v|0,1240,229);B=0;qa=0}$=Rb()|0;fa=Q;Yua(t);na=qa;oa=fa;pa=$}Yua(s);Yua(q);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break c}}else{$=Rb()|0;la=$;ma=Q}while(0);zb(v|0);ra=ma;sa=la}else U=78;while(0);if((U|0)==78){X=Rb()|0;ra=Q;sa=X}k[p>>2]=27468;k[Y>>2]=27488;k[a>>2]=27560;Yua(Z);Ava(a);vva(Y);V=ra;W=sa;Qb(W|0)}while(0);ha=ja;ia=ka;vva(Y);Qb(ia|0)}}}function Bw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 754:{h=921;r=a;return h|0}case 757:{h=739;r=a;return h|0}case 758:{h=921;r=a;return h|0}case 755:case 753:case 751:case 752:case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,72935,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75650,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,507,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function Cw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;if((b|0)==755){r=a;return 739}a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,72935,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75211,19);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,518,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0);return 0}function Dw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 752:{h=740;r=a;return h|0}case 751:{h=740;r=a;return h|0}case 753:{h=742;r=a;return h|0}case 754:{h=742;r=a;return h|0}case 755:{h=742;r=a;return h|0}case 757:{h=743;r=a;return h|0}case 758:{h=743;r=a;return h|0}case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,72935,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75691,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,534,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function Ew(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;Po(a);g=a+48|0;B=0;ua(167,g|0,f|0,d+1|0,4,e|0);e=B;B=0;if(e&1){e=Rb()|0;h=Q;i=e;Qo(a);Qb(i|0)}B=0;e=B;B=0;if(e&1){e=Rb()|0;j=Q;l=e}else{k[a>>2]=30656;k[a+4>>2]=31220;k[a+8>>2]=b;k[a+12>>2]=c;k[a+36>>2]=0;B=0;c=ya(423,36)|0;b=B;B=0;do if(!(b&1)){B=0;va(486,c|0);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Sqa(c);m=d;n=e;break}k[a+16>>2]=c;e=a+20|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;B=0;e=ya(422,(f>>>0>1073741823?-1:f<<2)|0)|0;d=B;B=0;if(!(d&1)){k[a+40>>2]=e;return}else o=9}else o=9;while(0);if((o|0)==9){o=Rb()|0;m=Q;n=o}j=m;l=n}Tq(g);h=j;i=l;Qo(a);Qb(i|0)}function Fw(a){a=a|0;k[a>>2]=30656;k[a+4>>2]=31220;k[a+36>>2]=0;Tq(a+48|0);Qo(a);return}function Gw(a){a=a|0;k[a>>2]=30656;k[a+4>>2]=31220;k[a+36>>2]=0;Tq(a+48|0);Qo(a);Sqa(a);return}function Hw(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=Qqa(72)|0;B=0;va(461,b|0);c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c}else{c=b+48|0;B=0;va(462,c|0);f=B;B=0;do if(f&1){g=Rb()|0;h=Q;i=g}else{B=0;g=B;B=0;if(g&1){g=Rb()|0;j=Q;Tq(c);h=j;i=g;break}k[b>>2]=30656;k[b+4>>2]=31220;g=k[a+48>>2]|0;j=(g|0)>0;if(j){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;k[b+40>>2]=l;m=k[a+40>>2]|0;n=0;do{k[l+(n<<2)>>2]=k[m+(n<<2)>>2];n=n+1|0}while((n|0)!=(g|0))}else k[b+40>>2]=0;k[b+44>>2]=k[a+44>>2];k[c>>2]=g;n=a+52|0;m=k[n>>2]|0;a:do if(m){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;o=b+52|0;k[o>>2]=l;if(j){l=g;p=m;q=0;while(1){r=k[p+(q<<2)>>2]|0;if(!r){k[(k[o>>2]|0)+(q<<2)>>2]=0;s=l}else{t=Bla(r)|0;k[(k[o>>2]|0)+(q<<2)>>2]=t;s=k[c>>2]|0}t=q+1|0;if((t|0)>=(s|0))break a;l=s;p=k[n>>2]|0;q=t}}}else k[b+52>>2]=0;while(0);n=a+56|0;m=Bla(k[n>>2]|0)|0;k[b+56>>2]=m;m=a+60|0;g=Bla(k[m>>2]|0)|0;k[b+60>>2]=g;g=a+64|0;j=Bla(k[g>>2]|0)|0;k[b+64>>2]=j;k[b+68>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];j=k[a+16>>2]|0;do if(!j){q=Qqa(36)|0;B=0;va(486,q|0);p=B;B=0;if(!(p&1)){k[b+16>>2]=q;break}p=Rb()|0;l=Q;Sqa(q);u=l;v=p;Qb(v|0)}else{p=hh(j)|0;k[b+16>>2]=p}while(0);k[b+36>>2]=k[a+36>>2];j=Rqa(16)|0;k[b+20>>2]=j;p=k[a+20>>2]|0;k[j>>2]=k[p>>2];k[j+4>>2]=k[p+4>>2];k[j+8>>2]=k[p+8>>2];k[j+12>>2]=k[p+12>>2];p=Gla(k[n>>2]|0)|0;k[b+24>>2]=p;p=Fla(k[m>>2]|0)|0;k[b+28>>2]=p;p=Fla(k[g>>2]|0)|0;k[b+32>>2]=p;return b|0}while(0);Qo(b);d=h;e=i}Sqa(b);u=d;v=e;Qb(v|0);return 0}function Iw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 0:{m=k[b>>2]|0;i[m>>0]=111;i[m+1>>0]=2;i[m+2>>0]=0;i[m+3>>0]=0;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+4;break}case 1:{k[b>>2]=(k[b>>2]|0)+4;break}default:{m=g+56|0;n=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=g+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);Yua(s);Ava(n);t=w;u=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,73108,73);w=B;B=0;do if(!(w&1)){B=0;eb(502,j|0,149525,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,l|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,j|0,107,l|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(l);C=y;D=x;E=F}Yua(j);Yua(h);if(E){z=C;A=D}else{G=C;H=D;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}w=Rb()|0;G=Q;H=w;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}}q=a+48|0;Vq(q,b,c,d);dq(a,b,c,d,k[q>>2]|0);q=Gla(k[a+56>>2]|0)|0;k[a+24>>2]=q;q=Fla(k[a+60>>2]|0)|0;k[a+28>>2]=q;q=Fla(k[a+64>>2]|0)|0;k[a+32>>2]=q;r=e;return}function Jw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(286,a|0,b|0,c|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(a);Qb(d|0)}else{mC(e,a)|0;return}}function Kw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;c=r;r=r+16|0;b=c;cO(g,b,482);h=k[b>>2]|0;k[a+44>>2]=k[(k[a+40>>2]|0)+(h<<2)>>2];i=a+52|0;j=k[(k[i>>2]|0)+(h<<2)>>2]|0;if(j)Ela(j,d);d=a+56|0;Ela(k[d>>2]|0,e);e=a+60|0;Ela(k[e>>2]|0,f);j=a+64|0;Ela(k[j>>2]|0,f);f=k[(k[i>>2]|0)+(k[b>>2]<<2)>>2]|0;if(!f)k[a+20>>2]=0;else{b=Gla(f)|0;k[a+20>>2]=b}b=Gla(k[d>>2]|0)|0;k[a+24>>2]=b;b=Fla(k[e>>2]|0)|0;k[a+28>>2]=b;b=Fla(k[j>>2]|0)|0;k[a+32>>2]=b;k[a+36>>2]=g;wC(k[a+16>>2]|0,g);r=c;return}function Lw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;e=r;r=r+96|0;f=e;Ko(f,k[a+24>>2]|0,4,0);g=+p[f>>3];h=+p[f+8>>3];i=+p[f+16>>3];j=+p[f+24>>3];l=j<g?j:g;m=j>g?j:g;g=+p[f+32>>3];j=g<h?g:h;n=g>h?g:h;h=+p[f+40>>3];g=h<i?h:i;o=h>i?h:i;i=+p[f+48>>3];h=i<l?i:l;l=i>m?i:m;m=+p[f+56>>3];i=m<j?m:j;j=m>n?m:n;n=+p[f+64>>3];m=n<g?n:g;g=n>o?n:o;o=+p[f+72>>3];n=+p[f+80>>3];q=+p[f+88>>3];p[b>>3]=(o>l?o:l)-(o<h?o:h);p[c>>3]=(n>j?n:j)-(n<i?n:i);p[d>>3]=(q>g?q:g)-(q<m?q:m);r=e;return}function Mw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+224|0;f=e+208|0;g=e;h=e+72|0;i=e+56|0;j=e+44|0;l=e+32|0;xp(a,g,287);a=+p[g>>3]==1.0;if(a){if(+p[g+8>>3]==1.0?+p[g+16>>3]==1.0:0){m=0;n=31244;o=31248;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if(+p[g+24>>3]==1.0?+p[g+8>>3]==1.0:0){m=0;n=31256;o=31260;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}}if((+p[g+8>>3]==1.0?+p[g+24>>3]==1.0:0)?+p[g+16>>3]==1.0:0){m=1;n=31268;o=31272;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if((a?+p[g+16>>3]==1.0:0)?+p[g+24>>3]==1.0:0){m=0;n=31280;o=31284;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}e=h+56|0;s=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,s|0);d=B;B=0;if(d&1){d=Rb()|0;t=Q;u=d;vva(e);Qb(u|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,s|0);d=B;B=0;do if(d&1){o=Rb()|0;v=Q;w=o}else{k[s>>2]=27560;o=h+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,s|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;c=Q;Yua(f);Yua(o);Ava(s);v=c;w=q;break}Yua(f);B=0;q=Ia(40,h|0,73182,32)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,i|0,73108,73);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,73215,17);n=B;B=0;if(n&1){n=Rb()|0;m=Q;Yua(i);x=m;y=n;break}B=0;wa(510,l|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;z=Q;A=n;C=1}else{B=0;ua(163,q|0,i|0,j|0,202,l|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,q|0,1240,229);B=0;D=0}n=Rb()|0;m=Q;Yua(l);z=m;A=n;C=D}Yua(j);Yua(i);if(C){x=z;y=A}else{E=z;F=A;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}}else{n=Rb()|0;x=Q;y=n}while(0);zb(q|0);E=x;F=y;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function Nw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+224|0;f=e+208|0;g=e;h=e+72|0;i=e+56|0;j=e+44|0;l=e+32|0;xp(a,g,206);a=+p[g>>3]==0.0;if(a){if(+p[g+8>>3]==0.0?+p[g+16>>3]==0.0:0){m=0;n=31244;o=31248;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if(+p[g+24>>3]==0.0?+p[g+8>>3]==0.0:0){m=0;n=31256;o=31260;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}}if((+p[g+8>>3]==0.0?+p[g+24>>3]==0.0:0)?+p[g+16>>3]==0.0:0){m=1;n=31268;o=31272;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if((a?+p[g+16>>3]==0.0:0)?+p[g+24>>3]==0.0:0){m=0;n=31280;o=31284;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}e=h+56|0;s=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,s|0);d=B;B=0;if(d&1){d=Rb()|0;t=Q;u=d;vva(e);Qb(u|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,s|0);d=B;B=0;do if(d&1){o=Rb()|0;v=Q;w=o}else{k[s>>2]=27560;o=h+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,s|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;c=Q;Yua(f);Yua(o);Ava(s);v=c;w=q;break}Yua(f);B=0;q=Ia(40,h|0,73182,32)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,i|0,73108,73);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,73233,18);n=B;B=0;if(n&1){n=Rb()|0;m=Q;Yua(i);x=m;y=n;break}B=0;wa(510,l|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;z=Q;A=n;C=1}else{B=0;ua(163,q|0,i|0,j|0,222,l|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,q|0,1240,229);B=0;D=0}n=Rb()|0;m=Q;Yua(l);z=m;A=n;C=D}Yua(j);Yua(i);if(C){x=z;y=A}else{E=z;F=A;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}}else{n=Rb()|0;x=Q;y=n}while(0);zb(q|0);E=x;F=y;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function Ow(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+224|0;f=e+208|0;g=e;h=e+72|0;i=e+56|0;j=e+44|0;l=e+32|0;xp(a,g,288);a=+p[g>>3]==1.0;if(a){if(+p[g+8>>3]==1.0?+p[g+16>>3]==1.0:0){m=0;n=31244;o=31248;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if(+p[g+24>>3]==1.0?+p[g+8>>3]==1.0:0){m=0;n=31256;o=31260;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}}if((+p[g+8>>3]==1.0?+p[g+24>>3]==1.0:0)?+p[g+16>>3]==1.0:0){m=1;n=31268;o=31272;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}if((a?+p[g+16>>3]==1.0:0)?+p[g+24>>3]==1.0:0){m=0;n=31280;o=31284;k[b>>2]=m;q=k[n>>2]|0;k[c>>2]=q;s=k[o>>2]|0;k[d>>2]=s;r=e;return}e=h+56|0;s=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,s|0);d=B;B=0;if(d&1){d=Rb()|0;t=Q;u=d;vva(e);Qb(u|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,s|0);d=B;B=0;do if(d&1){o=Rb()|0;v=Q;w=o}else{k[s>>2]=27560;o=h+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,s|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;c=Q;Yua(f);Yua(o);Ava(s);v=c;w=q;break}Yua(f);B=0;q=Ia(40,h|0,73182,32)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,i|0,73108,73);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,73252,20);n=B;B=0;if(n&1){n=Rb()|0;m=Q;Yua(i);x=m;y=n;break}B=0;wa(510,l|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;z=Q;A=n;C=1}else{B=0;ua(163,q|0,i|0,j|0,242,l|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,q|0,1240,229);B=0;D=0}n=Rb()|0;m=Q;Yua(l);z=m;A=n;C=D}Yua(j);Yua(i);if(C){x=z;y=A}else{E=z;F=A;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}}else{n=Rb()|0;x=Q;y=n}while(0);zb(q|0);E=x;F=y;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[h>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(e);Qb(F|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function Pw(a){a=a|0;return k[a+44>>2]|0}function Qw(a){a=a|0;return k[a+44>>2]|0}function Rw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){m=Qqa(72)|0;B=0;va(492,m|0);n=B;B=0;if(!(n&1)){n=k[(k[m>>2]|0)+28>>2]|0;o=ed[k[(k[a>>2]|0)+160>>2]&511](a,c)|0;Fc[n&1023](m,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,b,m);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=e;return}e=Rb()|0;b=Q;Sqa(m);p=e;q=b;Qb(p|0)}b=g+56|0;e=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;s=Q;t=m;vva(b);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);m=B;B=0;do if(m&1){l=Rb()|0;u=Q;v=l}else{k[e>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(f);Yua(l);Ava(e);u=n;v=o;break}Yua(f);B=0;o=Ia(40,g|0,74449,17)|0;n=B;B=0;a:do if((((!(n&1)?(B=0,c=ya(427,d|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(c)|0,B=0,w=Ia(40,o|0,c|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,w|0,74467,14)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,73108,73);w=B;B=0;do if(!(w&1)){B=0;eb(502,i|0,121355,13);c=B;B=0;if(c&1){c=Rb()|0;x=Q;Yua(h);y=c;z=x;break}B=0;wa(510,j|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;A=x;C=Q;D=1}else{B=0;ua(163,a|0,h|0,i|0,257,j|0);x=B;B=0;if(x&1)E=1;else{B=0;eb(503,a|0,1240,229);B=0;E=0}x=Rb()|0;c=Q;Yua(j);A=x;C=c;D=E}Yua(i);Yua(h);if(D){y=A;z=C}else{F=A;G=C;break a}}else{c=Rb()|0;y=c;z=Q}while(0);zb(a|0);F=y;G=z}else H=20;while(0);if((H|0)==20){o=Rb()|0;F=o;G=Q}k[g>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(l);Ava(e);vva(b);p=F;q=G;Qb(p|0)}while(0);s=u;t=v;vva(b);Qb(t|0)}function Sw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=iz(a,k[a+44>>2]|0)|0;a:do if((i|0)>0){j=k[a+20>>2]|0;l=0;while(1){if((k[j+(l<<2)>>2]|0)==(b|0)){m=l;break}l=l+1|0;if((l|0)>=(i|0))break a}r=c;return m|0}while(0);m=e+56|0;c=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,c|0);i=B;B=0;if(i&1){i=Rb()|0;n=Q;o=i;vva(m);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,c|0);i=B;B=0;do if(i&1){b=Rb()|0;p=Q;q=b}else{k[c>>2]=27560;b=e+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(d);Yua(b);Ava(c);p=l;q=a;break}Yua(d);B=0;a=Ia(40,e|0,74482,43)|0;l=B;B=0;if(!(l&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,f|0,73108,73);l=B;B=0;do if(!(l&1)){B=0;eb(502,g|0,74526,12);j=B;B=0;if(j&1){j=Rb()|0;s=Q;Yua(f);t=s;u=j;break}B=0;wa(510,h|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;v=Q;w=j;x=1}else{B=0;ua(163,a|0,f|0,g|0,274,h|0);j=B;B=0;if(j&1)y=1;else{B=0;eb(503,a|0,1240,229);B=0;y=0}j=Rb()|0;s=Q;Yua(h);v=s;w=j;x=y}Yua(g);Yua(f);if(x){t=v;u=w}else{z=v;A=w;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}}else{j=Rb()|0;t=Q;u=j}while(0);zb(a|0);z=t;A=u;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}l=Rb()|0;z=Q;A=l;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}while(0);n=p;o=q;vva(m);Qb(o|0);return 0}function Tw(a){a=a|0;return iz(a,k[a+44>>2]|0)|0}function Uw(a){a=a|0;return 4}function Vw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+112|0;d=c+96|0;e=c;Ko(e,k[a+24>>2]|0,4,0);f=Rqa(72)|0;g=d+4|0;h=d+8|0;Mw(a,d,g,h);a=e+((k[d>>2]|0)*24|0)|0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];k[f+12>>2]=k[a+12>>2];k[f+16>>2]=k[a+16>>2];k[f+20>>2]=k[a+20>>2];a=f+24|0;d=e+((k[g>>2]|0)*24|0)|0;k[a>>2]=k[d>>2];k[a+4>>2]=k[d+4>>2];k[a+8>>2]=k[d+8>>2];k[a+12>>2]=k[d+12>>2];k[a+16>>2]=k[d+16>>2];k[a+20>>2]=k[d+20>>2];d=f+48|0;a=e+((k[h>>2]|0)*24|0)|0;k[d>>2]=k[a>>2];k[d+4>>2]=k[a+4>>2];k[d+8>>2]=k[a+8>>2];k[d+12>>2]=k[a+12>>2];k[d+16>>2]=k[a+16>>2];k[d+20>>2]=k[a+20>>2];k[b>>2]=f;r=c;return}function Ww(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+112|0;d=c+96|0;e=c;Ko(e,k[a+24>>2]|0,4,0);f=Rqa(72)|0;g=d+4|0;h=d+8|0;Ow(a,d,g,h);a=e+((k[d>>2]|0)*24|0)|0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];k[f+12>>2]=k[a+12>>2];k[f+16>>2]=k[a+16>>2];k[f+20>>2]=k[a+20>>2];a=f+24|0;d=e+((k[g>>2]|0)*24|0)|0;k[a>>2]=k[d>>2];k[a+4>>2]=k[d+4>>2];k[a+8>>2]=k[d+8>>2];k[a+12>>2]=k[d+12>>2];k[a+16>>2]=k[d+16>>2];k[a+20>>2]=k[d+20>>2];d=f+48|0;a=e+((k[h>>2]|0)*24|0)|0;k[d>>2]=k[a>>2];k[d+4>>2]=k[a+4>>2];k[d+8>>2]=k[a+8>>2];k[d+12>>2]=k[a+12>>2];k[d+16>>2]=k[a+16>>2];k[d+20>>2]=k[a+20>>2];k[b>>2]=f;r=c;return}function Xw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0;d=r;r=r+336|0;e=d+312|0;f=d+296|0;g=d+72|0;h=d+40|0;j=d+8|0;l=d;m=d+324|0;n=d+288|0;o=d+284|0;q=d+280|0;s=d+144|0;t=d+128|0;u=d+116|0;v=d+104|0;k[n>>2]=0;Gka(c,l,106352);zka(c,m,139791);if((i[m>>0]|0)!=0?(Fka(c,o,113066),(i[m>>0]|0)!=0):0){Fka(c,q,113428);w=i[m>>0]|0}else w=0;x=b<<2;y=k[c+72>>2]|0;z=k[y+(x<<2)>>2]|0;k[f>>2]=z;A=k[y+((x|1)<<2)>>2]|0;C=f+4|0;k[C>>2]=A;D=k[y+((x|2)<<2)>>2]|0;E=f+8|0;k[E>>2]=D;F=k[y+((x|3)<<2)>>2]|0;x=f+12|0;k[x>>2]=F;if(w<<24>>24){Hka(c,n,0,113102);do if((k[o>>2]|0)>0){w=a+16|0;y=g+8|0;G=g+16|0;H=g+24|0;I=h+8|0;J=h+16|0;K=h+24|0;L=j+8|0;M=j+16|0;N=j+24|0;O=(k[f>>2]|0)+-1|0;P=(k[C>>2]|0)+-1|0;R=g+8|0;S=(k[E>>2]|0)+-1|0;T=g+16|0;U=(k[x>>2]|0)+-1|0;V=g+24|0;W=(k[f>>2]|0)+-1|0;X=(k[C>>2]|0)+-1|0;Y=h+8|0;Z=(k[E>>2]|0)+-1|0;_=h+16|0;$=(k[x>>2]|0)+-1|0;aa=h+24|0;ba=k[f>>2]|0;ca=ba+-1|0;da=k[C>>2]|0;ea=da+-1|0;fa=j+8|0;ga=k[E>>2]|0;ha=ga+-1|0;ia=j+16|0;ja=k[x>>2]|0;ka=ja+-1|0;la=j+24|0;na=(k[f>>2]|0)+-1|0;oa=(k[C>>2]|0)+-1|0;pa=g+8|0;qa=(k[E>>2]|0)+-1|0;ra=g+16|0;sa=(k[x>>2]|0)+-1|0;ta=g+24|0;xa=(k[f>>2]|0)+-1|0;za=(k[C>>2]|0)+-1|0;Aa=h+8|0;Ba=(k[E>>2]|0)+-1|0;Ca=h+16|0;Da=(k[x>>2]|0)+-1|0;Ea=h+24|0;Fa=k[f>>2]|0;Ga=Fa+-1|0;Ha=k[C>>2]|0;Ja=Ha+-1|0;Ka=j+8|0;La=k[E>>2]|0;Ma=La+-1|0;Na=j+16|0;Oa=k[x>>2]|0;Pa=Oa+-1|0;Qa=j+24|0;Ra=(k[f>>2]|0)+-1|0;Sa=(k[C>>2]|0)+-1|0;Ua=g+8|0;Va=(k[E>>2]|0)+-1|0;Wa=g+16|0;Ya=(k[x>>2]|0)+-1|0;Za=g+24|0;_a=(k[f>>2]|0)+-1|0;$a=(k[C>>2]|0)+-1|0;ab=h+8|0;bb=(k[E>>2]|0)+-1|0;cb=h+16|0;db=(k[x>>2]|0)+-1|0;fb=h+24|0;gb=k[f>>2]|0;hb=gb+-1|0;jb=k[C>>2]|0;kb=jb+-1|0;lb=j+8|0;mb=k[E>>2]|0;nb=mb+-1|0;ob=j+16|0;pb=k[x>>2]|0;qb=pb+-1|0;rb=j+24|0;sb=(k[f>>2]|0)+-1|0;tb=(k[C>>2]|0)+-1|0;ub=g+8|0;vb=(k[E>>2]|0)+-1|0;wb=g+16|0;xb=(k[x>>2]|0)+-1|0;yb=g+24|0;Bb=(k[f>>2]|0)+-1|0;Cb=(k[C>>2]|0)+-1|0;Db=h+8|0;Eb=(k[E>>2]|0)+-1|0;Fb=h+16|0;Gb=(k[x>>2]|0)+-1|0;Hb=h+24|0;Ib=k[f>>2]|0;Jb=Ib+-1|0;Kb=k[C>>2]|0;Lb=Kb+-1|0;Mb=j+8|0;Nb=k[E>>2]|0;Ob=Nb+-1|0;Pb=j+16|0;Sb=k[x>>2]|0;Tb=Sb+-1|0;Ub=j+24|0;Vb=(k[f>>2]|0)+-1|0;Wb=(k[C>>2]|0)+-1|0;Xb=g+8|0;Yb=(k[E>>2]|0)+-1|0;Zb=g+16|0;_b=(k[x>>2]|0)+-1|0;$b=g+24|0;ac=(k[f>>2]|0)+-1|0;bc=(k[C>>2]|0)+-1|0;cc=h+8|0;dc=(k[E>>2]|0)+-1|0;ec=h+16|0;fc=(k[x>>2]|0)+-1|0;gc=h+24|0;hc=k[f>>2]|0;ic=hc+-1|0;jc=k[C>>2]|0;kc=jc+-1|0;lc=j+8|0;mc=k[E>>2]|0;nc=mc+-1|0;oc=j+16|0;pc=k[x>>2]|0;qc=pc+-1|0;rc=j+24|0;sc=z;tc=A;uc=D;vc=F;wc=0;a:while(1){xc=zY(k[(k[n>>2]|0)+(wc<<2)>>2]|0,1)|0;switch(xc|0){case 36:{if(!(Jka(c,126035)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Cc=sc+-1|0;Dc=(Jka(c,126035)|0)+(Cc<<3)|0;p[g>>3]=+p[Dc>>3];Dc=tc+-1|0;Ec=(Jka(c,126035)|0)+(Dc<<3)|0;p[y>>3]=+p[Ec>>3];Ec=uc+-1|0;Fc=(Jka(c,126035)|0)+(Ec<<3)|0;p[G>>3]=+p[Fc>>3];Fc=vc+-1|0;Gc=(Jka(c,126035)|0)+(Fc<<3)|0;p[H>>3]=+p[Gc>>3];Gc=(ma(Cc,k[o>>2]|0)|0)+wc|0;Hc=(Jka(c,113372)|0)+(Gc<<3)|0;p[h>>3]=+p[Hc>>3]/+p[l>>3];Hc=(ma(Dc,k[o>>2]|0)|0)+wc|0;Gc=(Jka(c,113372)|0)+(Hc<<3)|0;p[I>>3]=+p[Gc>>3]/+p[l>>3];Gc=(ma(Ec,k[o>>2]|0)|0)+wc|0;Hc=(Jka(c,113372)|0)+(Gc<<3)|0;p[J>>3]=+p[Hc>>3]/+p[l>>3];Hc=(ma(Fc,k[o>>2]|0)|0)+wc|0;Gc=(Jka(c,113372)|0)+(Hc<<3)|0;p[K>>3]=+p[Gc>>3]/+p[l>>3];Gc=(ma(Cc,k[o>>2]|0)|0)+wc|0;Cc=(Jka(c,113400)|0)+(Gc<<3)|0;p[j>>3]=+p[Cc>>3]/+p[l>>3];Cc=(ma(Dc,k[o>>2]|0)|0)+wc|0;Dc=(Jka(c,113400)|0)+(Cc<<3)|0;p[L>>3]=+p[Dc>>3]/+p[l>>3];Dc=(ma(Ec,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Dc<<3)|0;p[M>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(Fc,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[N>>3]=+p[Fc>>3]/+p[l>>3];Fc=k[w>>2]|0;Ec=Qqa(32)|0;B=0;Ta(31,Ec|0,36,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Ic=Ec;Jc=13;break a}mC(Fc,Ec)|0;yc=vc;zc=uc;Ac=tc;Bc=sc}break}case 674:{if(!(Jka(c,135923)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Ec=(Jka(c,135923)|0)+(O<<3)|0;p[g>>3]=+p[Ec>>3];Ec=(Jka(c,135923)|0)+(P<<3)|0;p[R>>3]=+p[Ec>>3];Ec=(Jka(c,135923)|0)+(S<<3)|0;p[T>>3]=+p[Ec>>3];Ec=(Jka(c,135923)|0)+(U<<3)|0;p[V>>3]=+p[Ec>>3];Ec=(ma(W,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[h>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(X,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[Y>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(Z,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[_>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma($,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[aa>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(ca,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[j>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(ea,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[fa>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(ha,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[ia>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(ka,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[la>>3]=+p[Ec>>3]/+p[l>>3];Ec=k[w>>2]|0;Fc=Qqa(32)|0;B=0;Ta(31,Fc|0,674,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Kc=Fc;Jc=17;break a}mC(Ec,Fc)|0;yc=ja;zc=ga;Ac=da;Bc=ba}break}case 677:{if(!(Jka(c,135944)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Fc=(Jka(c,135944)|0)+(na<<3)|0;p[g>>3]=+p[Fc>>3];Fc=(Jka(c,135944)|0)+(oa<<3)|0;p[pa>>3]=+p[Fc>>3];Fc=(Jka(c,135944)|0)+(qa<<3)|0;p[ra>>3]=+p[Fc>>3];Fc=(Jka(c,135944)|0)+(sa<<3)|0;p[ta>>3]=+p[Fc>>3];Fc=(ma(xa,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[h>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(za,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[Aa>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(Ba,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[Ca>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(Da,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[Ea>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(Ga,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[j>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(Ja,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[Ka>>3]=+p[Fc>>3]/+p[l>>3];Fc=(ma(Ma,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[Na>>3]=+p[Ec>>3]/+p[l>>3];Ec=(ma(Pa,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[Qa>>3]=+p[Fc>>3]/+p[l>>3];Fc=k[w>>2]|0;Ec=Qqa(32)|0;B=0;Ta(31,Ec|0,677,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Lc=Ec;Jc=21;break a}mC(Fc,Ec)|0;yc=Oa;zc=La;Ac=Ha;Bc=Fa}break}case 105:{if(!(Jka(c,135172)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Ec=(Jka(c,135172)|0)+(Ra<<3)|0;p[g>>3]=+p[Ec>>3];Ec=(Jka(c,135172)|0)+(Sa<<3)|0;p[Ua>>3]=+p[Ec>>3];Ec=(Jka(c,135172)|0)+(Va<<3)|0;p[Wa>>3]=+p[Ec>>3];Ec=(Jka(c,135172)|0)+(Ya<<3)|0;p[Za>>3]=+p[Ec>>3];Ec=(ma(_a,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[h>>3]=+p[Fc>>3];Fc=(ma($a,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[ab>>3]=+p[Ec>>3];Ec=(ma(bb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[cb>>3]=+p[Fc>>3];Fc=(ma(db,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[fb>>3]=+p[Ec>>3];Ec=(ma(hb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[j>>3]=+p[Fc>>3];Fc=(ma(kb,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[lb>>3]=+p[Ec>>3];Ec=(ma(nb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[ob>>3]=+p[Fc>>3];Fc=(ma(qb,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[rb>>3]=+p[Ec>>3];Ec=k[w>>2]|0;Fc=Qqa(32)|0;B=0;Ta(31,Fc|0,105,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Mc=Fc;Jc=25;break a}mC(Ec,Fc)|0;yc=pb;zc=mb;Ac=jb;Bc=gb}break}case 215:{if(!(Jka(c,134991)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Fc=(Jka(c,134991)|0)+(sb<<3)|0;p[g>>3]=+p[Fc>>3];Fc=(Jka(c,134991)|0)+(tb<<3)|0;p[ub>>3]=+p[Fc>>3];Fc=(Jka(c,134991)|0)+(vb<<3)|0;p[wb>>3]=+p[Fc>>3];Fc=(Jka(c,134991)|0)+(xb<<3)|0;p[yb>>3]=+p[Fc>>3];Fc=(ma(Bb,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[h>>3]=+p[Ec>>3];Ec=(ma(Cb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[Db>>3]=+p[Fc>>3];Fc=(ma(Eb,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[Fb>>3]=+p[Ec>>3];Ec=(ma(Gb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[Hb>>3]=+p[Fc>>3];Fc=(ma(Jb,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[j>>3]=+p[Ec>>3];Ec=(ma(Lb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[Mb>>3]=+p[Fc>>3];Fc=(ma(Ob,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[Pb>>3]=+p[Ec>>3];Ec=(ma(Tb,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[Ub>>3]=+p[Fc>>3];Fc=k[w>>2]|0;Ec=Qqa(32)|0;B=0;Ta(31,Ec|0,214,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Nc=Ec;Jc=29;break a}mC(Fc,Ec)|0;yc=Sb;zc=Nb;Ac=Kb;Bc=Ib}break}case 227:{if(!(Jka(c,126277)|0)){yc=vc;zc=uc;Ac=tc;Bc=sc}else{Ec=(Jka(c,126277)|0)+(Vb<<3)|0;p[g>>3]=+p[Ec>>3];Ec=(Jka(c,126277)|0)+(Wb<<3)|0;p[Xb>>3]=+p[Ec>>3];Ec=(Jka(c,126277)|0)+(Yb<<3)|0;p[Zb>>3]=+p[Ec>>3];Ec=(Jka(c,126277)|0)+(_b<<3)|0;p[$b>>3]=+p[Ec>>3];Ec=(ma(ac,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[h>>3]=+p[Fc>>3];Fc=(ma(bc,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[cc>>3]=+p[Ec>>3];Ec=(ma(dc,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113372)|0)+(Ec<<3)|0;p[ec>>3]=+p[Fc>>3];Fc=(ma(fc,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113372)|0)+(Fc<<3)|0;p[gc>>3]=+p[Ec>>3];Ec=(ma(ic,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[j>>3]=+p[Fc>>3];Fc=(ma(kc,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[lc>>3]=+p[Ec>>3];Ec=(ma(nc,k[o>>2]|0)|0)+wc|0;Fc=(Jka(c,113400)|0)+(Ec<<3)|0;p[oc>>3]=+p[Fc>>3];Fc=(ma(qc,k[o>>2]|0)|0)+wc|0;Ec=(Jka(c,113400)|0)+(Fc<<3)|0;p[rc>>3]=+p[Ec>>3];Ec=k[w>>2]|0;Fc=Qqa(32)|0;B=0;Ta(31,Fc|0,225,624,g|0,h|0,j|0,wc+1|0);Dc=B;B=0;if(Dc&1){Oc=Fc;Jc=33;break a}mC(Ec,Fc)|0;yc=pc;zc=mc;Ac=jc;Bc=hc}break}default:{Pc=xc;Jc=34;break a}}wc=wc+1|0;xc=k[o>>2]|0;if((wc|0)>=(xc|0)){Qc=xc;Jc=8;break}else{sc=Bc;tc=Ac;uc=zc;vc=yc}}if((Jc|0)==8){vc=k[n>>2]|0;if((Qc|0)>0){Rc=vc;Sc=Qc;Tc=0}else{Uc=vc;break}while(1){vc=Rc+(Tc<<2)|0;uc=k[vc>>2]|0;if(!uc)Vc=Sc;else{Tqa(uc);Vc=k[o>>2]|0}k[vc>>2]=0;Tc=Tc+1|0;vc=k[n>>2]|0;if((Tc|0)>=(Vc|0)){Uc=vc;break}else{Rc=vc;Sc=Vc}}}else if((Jc|0)==13){vc=Rb()|0;uc=Q;Sqa(Ic);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==17){vc=Rb()|0;uc=Q;Sqa(Kc);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==21){vc=Rb()|0;uc=Q;Sqa(Lc);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==25){vc=Rb()|0;uc=Q;Sqa(Mc);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==29){vc=Rb()|0;uc=Q;Sqa(Nc);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==33){vc=Rb()|0;uc=Q;Sqa(Oc);Wc=uc;Xc=vc;Qb(Xc|0)}else if((Jc|0)==34){vc=s+56|0;uc=s+4|0;k[s>>2]=27524;k[vc>>2]=27544;B=0;wa(508,s+56|0,uc|0);tc=B;B=0;if(tc&1){tc=Rb()|0;Yc=Q;Zc=tc;vva(vc);Qb(Zc|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[vc>>2]=27488;B=0;va(448,uc|0);tc=B;B=0;do if(tc&1){sc=Rb()|0;_c=Q;$c=sc}else{k[uc>>2]=27560;sc=s+36|0;k[sc>>2]=0;k[sc+4>>2]=0;k[sc+8>>2]=0;k[sc+12>>2]=0;k[s+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,uc|0,e|0);wc=B;B=0;if(wc&1){wc=Rb()|0;hc=Q;Yua(e);Yua(sc);Ava(uc);_c=hc;$c=wc;break}Yua(e);B=0;wc=Ia(40,s|0,125582,8)|0;hc=B;B=0;b:do if((((!(hc&1)?(B=0,jc=ya(427,Pc|0)|0,mc=B,B=0,!(mc&1)):0)?(mc=Lta(jc)|0,B=0,pc=Ia(40,wc|0,jc|0,mc|0)|0,mc=B,B=0,!(mc&1)):0)?(B=0,mc=Ia(40,pc|0,127493,20)|0,pc=B,B=0,!(pc&1)):0)?(B=0,Xa(239,mc|0,0)|0,mc=B,B=0,!(mc&1)):0){mc=Ab(20)|0;B=0;eb(502,t|0,73108,73);pc=B;B=0;do if(!(pc&1)){B=0;eb(502,u|0,144327,22);jc=B;B=0;if(jc&1){jc=Rb()|0;w=Q;Yua(t);ad=w;bd=jc;break}B=0;wa(510,v|0,uc|0);jc=B;B=0;if(jc&1){jc=Rb()|0;cd=Q;dd=jc;ed=1}else{B=0;ua(163,mc|0,t|0,u|0,440,v|0);jc=B;B=0;if(jc&1)fd=1;else{B=0;eb(503,mc|0,1240,229);B=0;fd=0}jc=Rb()|0;w=Q;Yua(v);cd=w;dd=jc;ed=fd}Yua(u);Yua(t);if(ed){ad=cd;bd=dd}else{gd=cd;hd=dd;break b}}else{jc=Rb()|0;ad=Q;bd=jc}while(0);zb(mc|0);gd=ad;hd=bd}else Jc=52;while(0);if((Jc|0)==52){wc=Rb()|0;gd=Q;hd=wc}k[s>>2]=27468;k[vc>>2]=27488;k[uc>>2]=27560;Yua(sc);Ava(uc);vva(vc);Wc=gd;Xc=hd;Qb(Xc|0)}while(0);Yc=_c;Zc=$c;vva(vc);Qb(Zc|0)}}else Uc=k[n>>2]|0;while(0);if(Uc)Tqa(Uc);k[n>>2]=0}do if(Jka(c,129145)|0){n=k[a+16>>2]|0;Uc=Qqa(12)|0;B=0;Zc=Xa(246,c|0,129145)|0;$c=B;B=0;if(!($c&1)?(B=0,eb(508,Uc|0,533,~~+p[Zc+(b<<3)>>3]|0),Zc=B,B=0,!(Zc&1)):0){mC(n,Uc)|0;break}n=Rb()|0;Zc=Q;Sqa(Uc);Wc=Zc;Xc=n;Qb(Xc|0)}while(0);if(!(i[m>>0]|0)){r=d;return}if(!(Jka(c,113331)|0)){r=d;return}m=Qqa(20)|0;B=0;wa(516,m|0,179);b=B;B=0;if(b&1){b=Rb()|0;n=Q;Sqa(m);Wc=n;Xc=b;Qb(Xc|0)}b=k[q>>2]|0;c:do if((b|0)>0){n=(k[f>>2]|0)+-1|0;Zc=(k[C>>2]|0)+-1|0;Uc=g+8|0;$c=(k[E>>2]|0)+-1|0;_c=g+16|0;Yc=(k[x>>2]|0)+-1|0;hd=g+24|0;gd=b;s=0;while(1){Jc=(ma(n,gd)|0)+s|0;bd=(Jka(c,113331)|0)+(Jc<<3)|0;p[g>>3]=+p[bd>>3];bd=(ma(Zc,k[q>>2]|0)|0)+s|0;Jc=(Jka(c,113331)|0)+(bd<<3)|0;p[Uc>>3]=+p[Jc>>3];Jc=(ma($c,k[q>>2]|0)|0)+s|0;bd=(Jka(c,113331)|0)+(Jc<<3)|0;p[_c>>3]=+p[bd>>3];bd=(ma(Yc,k[q>>2]|0)|0)+s|0;Jc=(Jka(c,113331)|0)+(bd<<3)|0;p[hd>>3]=+p[Jc>>3];Jc=Qqa(16)|0;B=0;ib(286,Jc|0,179,g|0,738);bd=B;B=0;if(bd&1){id=Jc;break}bd=(Jka(c,113303)|0)+(s<<3)|0;XH(m,Jc,~~+p[bd>>3]);s=s+1|0;gd=k[q>>2]|0;if((s|0)>=(gd|0))break c}gd=Rb()|0;s=Q;Sqa(id);Wc=s;Xc=gd;Qb(Xc|0)}while(0);mC(k[a+16>>2]|0,m)|0;r=d;return}function Yw(a,b,c){a=a|0;b=b|0;c=c|0;Xw(a+-4|0,b,c);return}function Zw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;d=r;r=r+368|0;e=d+356|0;f=d+352|0;g=d+216|0;h=d+200|0;i=d+48|0;j=d+36|0;l=d+64|0;m=d+24|0;n=d+12|0;o=d;k[f>>2]=0;q=iz(a,k[a+44>>2]|0)|0;rp(a,f,534,943);s=Rqa(q>>>0>536870911?-1:q<<3)|0;a:do if((q|0)>0){u=k[f>>2]|0;v=0;while(1){w=+p[b+(k[u+(v<<2)>>2]<<3)>>3];p[s+(v<<3)>>3]=w;x=+$(+w);p[t>>3]=x;y=k[t>>2]|0;z=k[t+4>>2]|0;if(z>>>0>2146435072|(z|0)==2146435072&y>>>0>0){A=6;break}v=v+1|0;if((y|0)==0&(z|0)==2146435072){A=30;break}if((v|0)>=(q|0))break a}if((A|0)==6){v=g+56|0;u=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,u|0);z=B;B=0;if(z&1){z=Rb()|0;C=Q;D=z;vva(v);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,u|0);z=B;B=0;do if(z&1){y=Rb()|0;E=Q;F=y}else{k[u>>2]=27560;y=g+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);Yua(y);Ava(u);E=H;F=G;break}Yua(e);B=0;G=Ia(40,g|0,135564,28)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,G|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,73108,73);J=B;B=0;do if(!(J&1)){B=0;eb(502,i|0,74717,29);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(h);M=K;N=L;break}B=0;wa(510,j|0,u|0);L=B;B=0;if(L&1){L=Rb()|0;O=Q;P=L;R=1}else{B=0;ua(163,I|0,h|0,i|0,482,j|0);L=B;B=0;if(L&1)S=1;else{B=0;eb(503,I|0,1240,229);B=0;S=0}L=Rb()|0;K=Q;Yua(j);O=K;P=L;R=S}Yua(i);Yua(h);if(R){M=P;N=O}else{T=P;U=O;break b}}else{L=Rb()|0;M=L;N=Q}while(0);zb(I|0);T=M;U=N}else A=21;while(0);if((A|0)==21){G=Rb()|0;T=G;U=Q}k[g>>2]=27468;k[v>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(v);V=U;W=T;Qb(W|0)}while(0);C=E;D=F;vva(v);Qb(D|0)}else if((A|0)==30){u=l+56|0;z=l+4|0;k[l>>2]=27524;k[u>>2]=27544;B=0;wa(508,l+56|0,z|0);G=B;B=0;if(G&1){G=Rb()|0;X=Q;Y=G;vva(u);Qb(Y|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[u>>2]=27488;B=0;va(448,z|0);G=B;B=0;do if(G&1){H=Rb()|0;Z=Q;_=H}else{k[z>>2]=27560;H=l+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,z|0,e|0);J=B;B=0;if(J&1){J=Rb()|0;L=Q;Yua(e);Yua(H);Ava(z);Z=L;_=J;break}Yua(e);B=0;J=Ia(40,l|0,135593,28)|0;L=B;B=0;c:do if(!(L&1)?(B=0,Xa(239,J|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,m|0,73108,73);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,n|0,74717,29);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(m);da=ba;ea=ca;break}B=0;wa(510,o|0,z|0);ca=B;B=0;if(ca&1){ca=Rb()|0;fa=1;ga=Q;ha=ca}else{B=0;ua(163,K|0,m|0,n|0,483,o|0);ca=B;B=0;if(ca&1)ia=1;else{B=0;eb(503,K|0,1240,229);B=0;ia=0}ca=Rb()|0;ba=Q;Yua(o);fa=ia;ga=ba;ha=ca}Yua(n);Yua(m);if(fa){da=ha;ea=ga}else{ja=ga;ka=ha;break c}}else{ca=Rb()|0;da=ca;ea=Q}while(0);zb(K|0);ja=ea;ka=da}else A=45;while(0);if((A|0)==45){J=Rb()|0;ja=Q;ka=J}k[l>>2]=27468;k[u>>2]=27488;k[z>>2]=27560;Yua(H);Ava(z);vva(u);V=ja;W=ka;Qb(W|0)}while(0);X=Z;Y=_;vva(u);Qb(Y|0)}}while(0);Y=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(286,a|0,c|0,s|0,738);c=B;B=0;if(c&1){c=Rb()|0;_=Q;Sqa(a);V=_;W=c;Qb(W|0)}mC(Y,a)|0;Tqa(s);s=k[f>>2]|0;if(!s){r=d;return}Tqa(s);r=d;return}function _w(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+32|0;c=b;xp(a,c,206);if($p(a)|0?((+p[c+24>>3]<0.0&1)+((+p[c+16>>3]<0.0&1)+((+p[c+8>>3]<0.0&1)+(+p[c>>3]<0.0&1)))|0)==1:0){d=1;r=b;return d|0}d=0;r=b;return d|0}function $w(a){a=a|0;var b=0,c=0;b=r;r=r+32|0;c=b;xp(a,c,287);r=b;return +p[c>>3]+ +p[c+8>>3]+ +p[c+16>>3]+ +p[c+24>>3]==3.0|0}function ax(a){a=a|0;var b=0,c=0;b=r;r=r+32|0;c=b;xp(a,c,288);r=b;return +p[c>>3]+ +p[c+8>>3]+ +p[c+16>>3]+ +p[c+24>>3]==3.0|0}function bx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;mz(a,b,c,d);return}function cx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;nz(a,b,c,d);return}function dx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;nz(a,b,c,d);return}function ex(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;nz(a,b,c,d);return}function fx(a){a=a|0;var b=0;a=Qqa(72)|0;B=0;va(492,a|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function gx(a,b){a=a|0;b=b|0;a=Qqa(72)|0;B=0;wa(518,a|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function hx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;b=c;f=b+4|0;g=b+8|0;Nw(a,b,f,g);a=Qqa(72)|0;h=k[b>>2]|0;b=k[f>>2]|0;f=k[g>>2]|0;B=0;g=Xa(248,d|0,e|0)|0;e=B;B=0;if(e&1){i=Rb()|0;j=Q;Sqa(a);Qb(i|0)}B=0;ua(168,a|0,h|0,b|0,f|0,g|0);g=B;B=0;if(g&1){i=Rb()|0;j=Q;Sqa(a);Qb(i|0)}else{r=c;return a|0}return 0}function ix(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=d+4|0;f=d+8|0;Mw(a,d,e,f);a=Qqa(72)|0;B=0;ua(168,a|0,k[d>>2]|0,k[e>>2]|0,k[f>>2]|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else{r=c;return a|0}return 0}function jx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=d+4|0;f=d+8|0;Ow(a,d,e,f);a=Qqa(72)|0;B=0;ua(168,a|0,k[d>>2]|0,k[e>>2]|0,k[f>>2]|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else{r=c;return a|0}return 0}function kx(a,b,c){a=a|0;b=b|0;c=c|0;lz(a,b,c,k[a+44>>2]|0);return}function lx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;jz(a,b,c,d,k[a+44>>2]|0);return}function mx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;jz(a,b,c,d,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function nx(a,b,c){a=a|0;b=b|0;c=c|0;lz(a,b,c,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0);return}function ox(a,b,c){a=a|0;b=b|0;c=c|0;lz(a,b,c,Hc[k[(k[a>>2]|0)+460>>2]&511](a)|0);return}function px(a,b,c){a=a|0;b=b|0;c=c|0;lz(a,b,c,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function qx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;d=+p[c+48>>3];e=+p[c>>3]-d;f=+p[c+24>>3]-d;d=+p[c+56>>3];g=+p[c+8>>3]-d;h=+p[c+32>>3]-d;d=+p[c+64>>3];i=+p[c+16>>3]-d;j=+p[c+40>>3]-d;d=g*j-i*h;k=i*f-j*e;j=h*e-g*f;f=+aa(+(j*j+(d*d+k*k)));p[b>>3]=-d/f;p[b+8>>3]=-k/f;p[b+16>>3]=-j/f;return}function rx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0;a=r;r=r+48|0;d=a+24|0;e=a;f=+p[c>>3];p[d>>3]=+p[c+24>>3]-f;g=+p[c+8>>3];p[d+8>>3]=+p[c+32>>3]-g;h=+p[c+16>>3];p[d+16>>3]=+p[c+40>>3]-h;p[e>>3]=+p[c+48>>3]-f;p[e+8>>3]=+p[c+56>>3]-g;p[e+16>>3]=+p[c+64>>3]-h;IY(b,d,e);h=+p[b>>3];e=b+8|0;g=+p[e>>3];d=b+16|0;f=+p[d>>3];i=+aa(+(h*h+g*g+f*f));p[b>>3]=h/i;p[e>>3]=g/i;p[d>>3]=f/i;r=a;return}function sx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;d=+p[c+48>>3];e=+p[c>>3]-d;f=+p[c+24>>3]-d;d=+p[c+56>>3];g=+p[c+8>>3]-d;h=+p[c+32>>3]-d;d=+p[c+64>>3];i=+p[c+16>>3]-d;j=+p[c+40>>3]-d;d=g*j-i*h;k=i*f-j*e;j=h*e-g*f;f=+aa(+(j*j+(d*d+k*k)));p[b>>3]=d/f;p[b+8>>3]=k/f;p[b+16>>3]=j/f;return}function tx(a){a=a|0;return iz(a,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0)|0}function ux(a){a=a|0;return iz(a,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0)|0}function vx(a){a=a|0;return 623}function wx(a){a=a|0;return pz(a,k[a+44>>2]|0)|0}function xx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;a:do if(c){switch(k[a+44>>2]|0){case 752:{k[e>>2]=k[7822];k[e+4>>2]=k[7823];k[e+8>>2]=k[7824];VN(c,b,3,e);break a;break}case 741:break;default:break a}f=a+20|0;g=eo(k[(k[f>>2]|0)+16>>2]|0,534,943)|0;h=eo(k[k[f>>2]>>2]|0,534,943)|0;i=(eo(k[(k[f>>2]|0)+4>>2]|0,534,943)|0)+h|0;h=(eo(k[(k[f>>2]|0)+8>>2]|0,534,943)|0)+i|0;i=(eo(k[(k[f>>2]|0)+12>>2]|0,534,943)|0)+h|0;h=Rqa(g>>>0>1073741823?-1:g<<2)|0;if((g|0)>0){f=0;do{k[h+(f<<2)>>2]=f+i;f=f+1|0}while((f|0)!=(g|0))}VN(c,b,g,h);Tqa(h)}while(0);if(!b){r=d;return}switch(k[a+44>>2]|0){case 752:{k[e>>2]=k[7822];k[e+4>>2]=k[7823];k[e+8>>2]=k[7824];NN(b,3,e);r=d;return}case 741:{e=a+20|0;a=eo(k[(k[e>>2]|0)+16>>2]|0,534,943)|0;c=(eo(k[k[e>>2]>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+4>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+8>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+12>>2]|0,534,943)|0)|0;e=Rqa(a>>>0>1073741823?-1:a<<2)|0;if((a|0)>0){f=0;do{k[e+(f<<2)>>2]=f+c;f=f+1|0}while((f|0)!=(a|0))}NN(b,a,e);Tqa(e);r=d;return}default:{r=d;return}}}function yx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+448|0;c=b+428|0;d=b+424|0;e=b+64|0;f=b+56|0;g=b+48|0;h=b;i=b+288|0;j=b+272|0;l=b+120|0;m=b+108|0;n=b+136|0;o=b+96|0;q=b+84|0;s=b+72|0;t=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;u=a+16|0;kC(k[u>>2]|0,d,533);v=(Np(a)|0)^1;if((k[d>>2]|0)!=542|v){r=b;return}v=oC(k[u>>2]|0,642)|0;d=oC(k[u>>2]|0,643)|0;w=oC(k[u>>2]|0,928)|0;u=Rqa(t>>>0>536870911?-1:t<<3)|0;wp(a,u,287);t=Qqa(72)|0;B=0;va(492,t|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Sqa(t);z=y;A=x;Qb(A|0)}a:do if((Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0)>0){x=h+24|0;y=h+8|0;C=h+32|0;D=h+16|0;E=h+40|0;F=a+20|0;G=0;while(1){if(+p[u+(G<<3)>>3]==1.0){H=k[(k[t>>2]|0)+32>>2]|0;I=Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0;nd[H&1023](t,I,G);nd[k[(k[v>>2]|0)+48>>2]&1023](v,e,t);nd[k[(k[d>>2]|0)+48>>2]&1023](d,f,t);nd[k[(k[w>>2]|0)+48>>2]&1023](w,g,t);p[h>>3]=1.0;J=+p[e>>3];p[x>>3]=-J;p[y>>3]=0.0;p[C>>3]=-+p[f>>3];p[D>>3]=J;p[E>>3]=1.0;I=+p[g>>3]>0.0;H=(co(k[(k[F>>2]|0)+(G<<2)>>2]|0)|0)==543;if(I){if(!H){K=G;L=11;break}Vn(k[(k[F>>2]|0)+(G<<2)>>2]|0,2)}else{if(!H){M=G;L=40;break}Zn(k[(k[F>>2]|0)+(G<<2)>>2]|0,2)}NY((k[(k[F>>2]|0)+(G<<2)>>2]|0)+72|0,h)}G=G+1|0;if((G|0)>=(Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0))break a}if((L|0)==11){G=i+56|0;E=i+4|0;k[i>>2]=27524;k[G>>2]=27544;B=0;wa(508,i+56|0,E|0);D=B;B=0;if(D&1){D=Rb()|0;N=Q;O=D;vva(G);Qb(O|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[G>>2]=27488;B=0;va(448,E|0);D=B;B=0;do if(D&1){C=Rb()|0;P=Q;R=C}else{k[E>>2]=27560;C=i+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(c);Yua(C);Ava(E);P=x;R=y;break}Yua(c);B=0;y=Ia(40,i|0,74836,27)|0;x=B;B=0;b:do if(((((!(x&1)?(B=0,H=ya(431,k[(k[F>>2]|0)+(K<<2)>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,H|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,S=Ia(40,y|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,S|0,146481,18)|0,S=B,B=0,!(S&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,j|0,73108,73);S=B;B=0;do if(!(S&1)){B=0;eb(502,l|0,74864,29);I=B;B=0;if(I&1){I=Rb()|0;T=Q;Yua(j);U=I;V=T;break}B=0;wa(510,m|0,E|0);T=B;B=0;if(T&1){T=Rb()|0;W=T;X=Q;Y=1}else{B=0;ua(163,H|0,j|0,l|0,774,m|0);T=B;B=0;if(T&1)Z=1;else{B=0;eb(503,H|0,1240,229);B=0;Z=0}T=Rb()|0;I=Q;Yua(m);W=T;X=I;Y=Z}Yua(l);Yua(j);if(Y){U=W;V=X}else{_=W;$=X;break b}}else{I=Rb()|0;U=I;V=Q}while(0);zb(H|0);_=U;$=V}else L=30;while(0);if((L|0)==30){y=Rb()|0;_=y;$=Q}k[i>>2]=27468;k[G>>2]=27488;k[E>>2]=27560;Yua(C);Ava(E);vva(G);z=$;A=_;Qb(A|0)}while(0);N=P;O=R;vva(G);Qb(O|0)}else if((L|0)==40){E=n+56|0;D=n+4|0;k[n>>2]=27524;k[E>>2]=27544;B=0;wa(508,n+56|0,D|0);y=B;B=0;if(y&1){y=Rb()|0;aa=Q;ba=y;vva(E);Qb(ba|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[E>>2]=27488;B=0;va(448,D|0);y=B;B=0;do if(y&1){x=Rb()|0;ca=Q;da=x}else{k[D>>2]=27560;x=n+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;I=Q;Yua(c);Yua(x);Ava(D);ca=I;da=S;break}Yua(c);B=0;S=Ia(40,n|0,74836,27)|0;I=B;B=0;c:do if(((((!(I&1)?(B=0,T=ya(431,k[(k[F>>2]|0)+(M<<2)>>2]|0)|0,ea=B,B=0,!(ea&1)):0)?(B=0,ea=ya(427,T|0)|0,T=B,B=0,!(T&1)):0)?(T=Lta(ea)|0,B=0,fa=Ia(40,S|0,ea|0,T|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,fa|0,146481,18)|0,fa=B,B=0,!(fa&1)):0)?(B=0,Xa(239,T|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,o|0,73108,73);fa=B;B=0;do if(!(fa&1)){B=0;eb(502,q|0,74864,29);ea=B;B=0;if(ea&1){ea=Rb()|0;ga=Q;Yua(o);ha=ea;ia=ga;break}B=0;wa(510,s|0,D|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ja=1;ka=Q;la=ga}else{B=0;ua(163,T|0,o|0,q|0,780,s|0);ga=B;B=0;if(ga&1)ma=1;else{B=0;eb(503,T|0,1240,229);B=0;ma=0}ga=Rb()|0;ea=Q;Yua(s);ja=ma;ka=ea;la=ga}Yua(q);Yua(o);if(ja){ha=la;ia=ka}else{na=ka;oa=la;break c}}else{ga=Rb()|0;ha=ga;ia=Q}while(0);zb(T|0);na=ia;oa=ha}else L=59;while(0);if((L|0)==59){S=Rb()|0;na=Q;oa=S}k[n>>2]=27468;k[E>>2]=27488;k[D>>2]=27560;Yua(x);Ava(D);vva(E);z=na;A=oa;Qb(A|0)}while(0);aa=ca;ba=da;vva(E);Qb(ba|0)}}while(0);Tqa(u);Ec[k[(k[t>>2]|0)+4>>2]&1023](t);r=b;return}function zx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+20|0;c=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;b=k[c>>2]|0;if((b|0)>0){d=a+52|0;e=b;b=0;while(1){f=k[(k[d>>2]|0)+(b<<2)>>2]|0;if(!f)g=e;else{Dla(f);g=k[c>>2]|0}b=b+1|0;if((b|0)>=(g|0))break;else e=g}}Dla(k[a+56>>2]|0);Dla(k[a+60>>2]|0);Dla(k[a+64>>2]|0);g=k[a+68>>2]|0;if(!g)return;Dla(g);return}function Ax(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;e=r;r=r+16|0;d=e;cO(f,d,482);f=k[d>>2]|0;k[a+44>>2]=k[(k[a+40>>2]|0)+(f<<2)>>2];d=k[(k[a+52>>2]|0)+(f<<2)>>2]|0;if(!d){k[a+20>>2]=0;r=e;return}else{f=Gla(d)|0;k[a+20>>2]=f;r=e;return}}function Bx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;Mw(a,c,d,e);f=Cx(a,k[c>>2]|0,k[d>>2]|0,k[e>>2]|0)|0;r=b;return f|0}function Cx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+16|0;f=e;g=a+36|0;cO(k[g>>2]|0,f,482);h=Qqa(72)|0;B=0;va(461,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;Sqa(h);Qb(l|0)}i=h+48|0;B=0;va(462,i|0);m=B;B=0;do if(!(m&1)){B=0;n=B;B=0;if(n&1){n=Rb()|0;o=Q;Tq(i);p=o;q=n;break}else{k[h>>2]=30040;k[h+4>>2]=30604;k[h+8>>2]=k[a+8>>2];n=uC(k[a+16>>2]|0,b,c,d)|0;k[h+16>>2]=n;k[h+36>>2]=k[g>>2];k[h+44>>2]=738;Zq(a+48|0,i,b,c,d);n=k[a+28>>2]|0;o=ed[k[(k[n>>2]|0)+32>>2]&511](n,h)|0;k[h+28>>2]=o;o=Gla(k[(k[h+52>>2]|0)+(k[f>>2]<<2)>>2]|0)|0;k[h+20>>2]=o;o=Gla(k[h+56>>2]|0)|0;k[h+24>>2]=o;o=Fla(k[h+64>>2]|0)|0;k[h+32>>2]=o;r=e;return h|0}}else{o=Rb()|0;p=Q;q=o}while(0);Qo(h);j=p;l=q;Sqa(h);Qb(l|0);return 0}function Dx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;Ow(a,c,d,e);f=Cx(a,k[c>>2]|0,k[d>>2]|0,k[e>>2]|0)|0;r=b;return f|0}function Ex(a){a=a|0;return qz(a,k[a+44>>2]|0)|0}function Fx(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;e=r;r=r+208|0;g=e+184|0;h=e+48|0;i=e+32|0;j=e+20|0;l=e+8|0;Gka(c,e,106352);zka(c,e+197|0,134866);zka(c,e+196|0,132257);k[(k[a+40>>2]|0)+(d<<2)>>2]=f;switch(f|0){case 738:{m=Rqa(16)|0;n=k[c+100>>2]|0;o=b<<2;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;k[m+4>>2]=(k[p+((o|1)<<2)>>2]|0)+n;k[m+8>>2]=(k[p+((o|2)<<2)>>2]|0)+n;k[m+12>>2]=(k[p+((o|3)<<2)>>2]|0)+n;q=4;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}case 741:case 740:{m=Rqa(20)|0;n=k[c+100>>2]|0;o=b<<2;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;k[m+4>>2]=(k[p+((o|1)<<2)>>2]|0)+n;k[m+8>>2]=(k[p+((o|2)<<2)>>2]|0)+n;k[m+12>>2]=(k[p+((o|3)<<2)>>2]|0)+n;k[m+16>>2]=b+1+n+(k[c+52>>2]|0);q=5;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}case 742:{m=Rqa(40)|0;n=k[c+100>>2]|0;o=b<<2;p=k[c+72>>2]|0;k[m>>2]=(k[p+(o<<2)>>2]|0)+n;k[m+4>>2]=(k[p+((o|1)<<2)>>2]|0)+n;k[m+8>>2]=(k[p+((o|2)<<2)>>2]|0)+n;k[m+12>>2]=(k[p+((o|3)<<2)>>2]|0)+n;o=b*6|0;p=k[c+84>>2]|0;y=n+1+(k[c+52>>2]|0)|0;k[m+16>>2]=y+(k[p+(o<<2)>>2]|0);k[m+20>>2]=y+(k[p+((o|1)<<2)>>2]|0);k[m+24>>2]=y+(k[p+(o+2<<2)>>2]|0);k[m+28>>2]=y+(k[p+(o+3<<2)>>2]|0);k[m+32>>2]=y+(k[p+(o+4<<2)>>2]|0);k[m+36>>2]=y+(k[p+(o+5<<2)>>2]|0);q=10;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}case 752:case 751:{m=Rqa(36)|0;o=k[c+100>>2]|0;p=b<<2;y=k[c+72>>2]|0;n=y+(p<<2)|0;k[m>>2]=(k[n>>2]|0)+o;z=y+((p|1)<<2)|0;k[m+4>>2]=(k[z>>2]|0)+o;A=y+((p|2)<<2)|0;k[m+8>>2]=(k[A>>2]|0)+o;C=y+((p|3)<<2)|0;k[m+12>>2]=(k[C>>2]|0)+o;p=k[c+52>>2]|0;k[m+16>>2]=b+1+o+p;y=p+o+(k[c+56>>2]|0)|0;k[m+20>>2]=y+(k[n>>2]|0);k[m+24>>2]=y+(k[z>>2]|0);k[m+28>>2]=y+(k[A>>2]|0);k[m+32>>2]=y+(k[C>>2]|0);q=9;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}case 755:case 753:{m=Rqa(56)|0;C=k[c+100>>2]|0;y=b<<2;A=k[c+72>>2]|0;z=A+(y<<2)|0;k[m>>2]=(k[z>>2]|0)+C;n=A+((y|1)<<2)|0;k[m+4>>2]=(k[n>>2]|0)+C;o=A+((y|2)<<2)|0;k[m+8>>2]=(k[o>>2]|0)+C;p=A+((y|3)<<2)|0;k[m+12>>2]=(k[p>>2]|0)+C;y=k[c+52>>2]|0;A=b*6|0;D=k[c+84>>2]|0;E=C+1+y|0;k[m+16>>2]=E+(k[D+(A<<2)>>2]|0);k[m+20>>2]=E+(k[D+((A|1)<<2)>>2]|0);k[m+24>>2]=E+(k[D+(A+2<<2)>>2]|0);k[m+28>>2]=E+(k[D+(A+3<<2)>>2]|0);k[m+32>>2]=E+(k[D+(A+4<<2)>>2]|0);k[m+36>>2]=E+(k[D+(A+5<<2)>>2]|0);A=y+C+(k[c+64>>2]|0)|0;k[m+40>>2]=A+(k[z>>2]|0);k[m+44>>2]=A+(k[n>>2]|0);k[m+48>>2]=A+(k[o>>2]|0);k[m+52>>2]=A+(k[p>>2]|0);q=14;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}case 754:{m=Rqa(40)|0;p=k[c+100>>2]|0;A=b<<2;o=k[c+72>>2]|0;k[m>>2]=(k[o+(A<<2)>>2]|0)+p;k[m+4>>2]=(k[o+((A|1)<<2)>>2]|0)+p;k[m+8>>2]=(k[o+((A|2)<<2)>>2]|0)+p;k[m+12>>2]=(k[o+((A|3)<<2)>>2]|0)+p;A=b*6|0;o=k[c+84>>2]|0;n=p+1+(k[c+52>>2]|0)|0;k[m+16>>2]=n+(k[o+(A<<2)>>2]|0);k[m+20>>2]=n+(k[o+((A|1)<<2)>>2]|0);k[m+24>>2]=n+(k[o+(A+2<<2)>>2]|0);k[m+28>>2]=n+(k[o+(A+3<<2)>>2]|0);k[m+32>>2]=n+(k[o+(A+4<<2)>>2]|0);k[m+36>>2]=n+(k[o+(A+5<<2)>>2]|0);q=10;s=m;t=a+48|0;Xq(t,s,q,d);u=a+20|0;k[u>>2]=0;Tqa(s);v=k[a>>2]|0;w=v+548|0;x=k[w>>2]|0;nd[x&1023](a,b,c);r=e;return}default:{e=h+56|0;c=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;F=Q;G=b;vva(e);Qb(G|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){a=Rb()|0;H=Q;I=a}else{k[c>>2]=27560;a=h+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,c|0,g|0);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(g);Yua(a);Ava(c);H=w;I=x;break}Yua(g);B=0;x=Ia(40,h|0,145867,15)|0;w=B;B=0;if((((!(w&1)?(B=0,w=ya(427,f|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(w)|0,B=0,s=Ia(40,x|0,w|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,s|0,146481,18)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,i|0,73108,73);s=B;B=0;do if(!(s&1)){B=0;eb(502,j|0,74939,6);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(i);J=x;K=w;break}B=0;wa(510,l|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;L=Q;M=w;N=1}else{B=0;ua(163,v|0,i|0,j|0,978,l|0);w=B;B=0;if(w&1)O=1;else{B=0;eb(503,v|0,1240,229);B=0;O=0}w=Rb()|0;x=Q;Yua(l);L=x;M=w;N=O}Yua(j);Yua(i);if(N){J=L;K=M}else{P=L;R=M;k[h>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(e);Qb(R|0)}}else{w=Rb()|0;J=Q;K=w}while(0);zb(v|0);P=J;R=K;k[h>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(e);Qb(R|0)}s=Rb()|0;P=Q;R=s;k[h>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(e);Qb(R|0)}while(0);F=H;G=I;vva(e);Qb(G|0)}}}function Gx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kz(a,b,c,d,738);return}function Hx(a){a=a|0;return rz(a,k[a+44>>2]|0)|0}function Ix(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0;h=r;r=r+64|0;i=h+56|0;j=h+48|0;l=h;Yo(a,l,c,d,e,f,g);m=k[a+28>>2]|0;Tc[k[(k[m>>2]|0)+108>>2]&15](m,j,3,c,d,e,f,g);Fp(a,i,l,+p[j>>3]);p[b>>3]=+p[i>>3];r=h;return}function Jx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+224|0;f=e+208|0;g=e;h=e+72|0;i=e+56|0;j=e+44|0;l=e+32|0;m=Rqa(72)|0;xp(a,g,d);d=+p[g>>3]==0.0;n=+p[g+8>>3];if(d){if(n==0.0?+p[g+16>>3]==0.0:0){p[m>>3]=+p[c>>3];p[m+8>>3]=+p[c+8>>3];p[m+16>>3]=+p[c+16>>3];p[m+24>>3]=+p[c+24>>3];p[m+32>>3]=+p[c+32>>3];p[m+40>>3]=+p[c+40>>3];p[m+48>>3]=+p[c+48>>3];p[m+56>>3]=+p[c+56>>3];p[m+64>>3]=+p[c+64>>3];k[b>>2]=m;r=e;return}o=+p[g+8>>3];if(o==0.0?+p[g+24>>3]==0.0:0){p[m>>3]=+p[c>>3];p[m+8>>3]=+p[c+8>>3];p[m+16>>3]=+p[c+16>>3];p[m+24>>3]=+p[c+24>>3];p[m+32>>3]=+p[c+32>>3];p[m+40>>3]=+p[c+40>>3];p[m+48>>3]=+p[c+72>>3];p[m+56>>3]=+p[c+80>>3];p[m+64>>3]=+p[c+88>>3];k[b>>2]=m;r=e;return}else q=o}else q=n;n=+p[g+16>>3];if(q==0.0&n==0.0?+p[g+24>>3]==0.0:0){p[m>>3]=+p[c+24>>3];p[m+8>>3]=+p[c+32>>3];p[m+16>>3]=+p[c+40>>3];p[m+24>>3]=+p[c+48>>3];p[m+32>>3]=+p[c+56>>3];p[m+40>>3]=+p[c+64>>3];p[m+48>>3]=+p[c+72>>3];p[m+56>>3]=+p[c+80>>3];p[m+64>>3]=+p[c+88>>3];k[b>>2]=m;r=e;return}if(n==0.0&d?+p[g+24>>3]==0.0:0){p[m>>3]=+p[c+48>>3];p[m+8>>3]=+p[c+56>>3];p[m+16>>3]=+p[c+64>>3];p[m+24>>3]=+p[c>>3];p[m+32>>3]=+p[c+8>>3];p[m+40>>3]=+p[c+16>>3];p[m+48>>3]=+p[c+72>>3];p[m+56>>3]=+p[c+80>>3];p[m+64>>3]=+p[c+88>>3];k[b>>2]=m;r=e;return}e=h+56|0;m=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;s=Q;t=b;vva(e);Qb(t|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);b=B;B=0;do if(b&1){c=Rb()|0;u=Q;v=c}else{k[m>>2]=27560;c=h+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);g=B;B=0;if(g&1){g=Rb()|0;d=Q;Yua(f);Yua(c);Ava(m);u=d;v=g;break}Yua(f);B=0;g=Ia(40,h|0,74946,16)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,i|0,73108,73);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,74963,23);a=B;B=0;if(a&1){a=Rb()|0;w=Q;Yua(i);x=w;y=a;break}B=0;wa(510,l|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;C=1}else{B=0;ua(163,g|0,i|0,j|0,1082,l|0);a=B;B=0;if(a&1)D=1;else{B=0;eb(503,g|0,1240,229);B=0;D=0}a=Rb()|0;w=Q;Yua(l);z=w;A=a;C=D}Yua(j);Yua(i);if(C){x=z;y=A}else{E=z;F=A;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(F|0)}}else{a=Rb()|0;x=Q;y=a}while(0);zb(g|0);E=x;F=y;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(F|0)}d=Rb()|0;E=Q;F=d;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(F|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}function Kx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74181,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Lx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,74214,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Mx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73975,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,46,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Nx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75327,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,47,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Ox(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74235,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Px(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73945,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Qx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75312,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,49,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Rx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73925,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Sx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74254,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Tx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74301,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Ux(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74333,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Vx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103020,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,62,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Wx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73906,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Xx(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73890,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,64,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Yx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,73874,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,66,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Zx(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74430,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,67,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function _x(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73851,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function $x(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,73283,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75292,19);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,70,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ay(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,75268,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,71,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function by(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73843,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function cy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,80838,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function dy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73815,27);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,77,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ey(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73799,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,78,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function fy(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,74539,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,79,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function gy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103033,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,83,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function hy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103046,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,86,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function iy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103054,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,87,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function jy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103064,24);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,88,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function ky(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;a=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,73283,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,74573,18);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,95,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function ly(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74624,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,96,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function my(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74656,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,97,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ny(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,73283,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,74706,10);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,98,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function oy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74747,38);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,101,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function py(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75251,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,89,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function qy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73776,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,91,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function ry(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73761,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,94,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function sy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73737,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,105,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ty(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,98621,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,108,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function uy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99206,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,109,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function vy(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=r;r=r+192|0;a=f+176|0;g=f+40|0;h=f+24|0;i=f+12|0;j=f;f=g+56|0;l=g+4|0;k[g>>2]=27524;k[f>>2]=27544;B=0;wa(508,g+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(f);Qb(o|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[f>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,l|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);Yua(p);Ava(l);q=u;s=t;break}Yua(a);B=0;t=Ia(40,g|0,149721,19)|0;u=B;B=0;a:do if(!(u&1)?(B=0,Xa(239,t|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,73283,85);w=B;B=0;do if(!(w&1)){B=0;eb(502,i|0,99206,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,j|0,l|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,i|0,110,j|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(j);C=y;D=x;E=F}Yua(i);Yua(h);if(E){z=C;A=D}else{G=C;H=D;break a}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A}else I=16;while(0);if((I|0)==16){t=Rb()|0;G=Q;H=t}k[g>>2]=27468;k[f>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(f);Qb(H|0)}while(0);n=q;o=s;vva(f);Qb(o|0);return +(0.0)}function wy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73723,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,112,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function xy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99229,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,113,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return +(0.0)}function yy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75240,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,114,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function zy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75231,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,117,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function Ay(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;b=f+40|0;a=f+24|0;g=f+12|0;h=f;f=b+56|0;i=b+4|0;k[b>>2]=27524;k[f>>2]=27544;B=0;wa(508,b+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=b+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[b+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,b|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,a|0,73283,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,75231,8);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(a);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,a|0,g|0,119,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(a);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[b>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0);return 0}function By(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73710,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,121,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function Cy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73680,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,126,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Dy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73663,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,128,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ey(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73635,27);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,129,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Fy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73618,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,130,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Gy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73607,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,133,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function Hy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73586,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,139,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Iy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74894,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,144,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Jy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73562,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,146,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Ky(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+192|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;a=h+56|0;m=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=h+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,m|0,g|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);Yua(q);Ava(m);s=v;t=u;break}Yua(g);B=0;u=Ia(40,h|0,149721,19)|0;v=B;B=0;a:do if(!(v&1)?(B=0,Xa(239,u|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,i|0,73283,85);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,73539,22);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(i);A=z;C=y;break}B=0;wa(510,l|0,m|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,i|0,j|0,150,l|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(l);D=z;E=y;F=G}Yua(j);Yua(i);if(F){A=D;C=E}else{H=D;I=E;break a}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C}else J=16;while(0);if((J|0)==16){u=Rb()|0;H=Q;I=u}k[h>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(I|0)}while(0);o=s;p=t;vva(a);Qb(p|0);return +(0.0)}function Ly(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,93069,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,151,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function My(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,93088,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,152,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Ny(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,92779,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,153,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Oy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99320,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,154,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Py(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73529,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,156,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Qy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103089,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,157,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Ry(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103106,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,158,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Sy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103123,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,159,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Ty(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73496,32);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,161,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Uy(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73464,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,162,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Vy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73437,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,163,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function Wy(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,73411,25);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,164,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Xy(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73392,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,167,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Yy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73369,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,168,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Zy(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,75023,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,174,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function _y(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,73283,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75190,20);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,177,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function $y(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,73283,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75166,23);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,178,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function az(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,180,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function bz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75143,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,179,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function cz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75133,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,171,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function dz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,73283,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74786,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,102,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ez(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;dz(a+-4|0,b,c,d)}function fz(a){a=a|0;return}function gz(a){a=a|0;return}function hz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;g=r;r=r+240|0;h=g;i=iz(0,f)|0;jz(a,h,d,e,f);f=(i|0)>0;if(f){j=0.0;e=0;while(1){k=j+ +p[h+(e<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){l=k;break}else j=k}if(f){j=0.0;e=0;while(1){k=j+ +p[h+(e+i<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){m=k;break}else j=k}if(f){f=i<<1;j=0.0;e=0;while(1){k=j+ +p[h+(e+f<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){n=l;o=m;q=k;break}else j=k}}else{n=l;o=m;q=0.0}}else{n=l;o=0.0;q=0.0}}else{n=0.0;o=0.0;q=0.0}p[b>>3]=n;p[b+8>>3]=o;p[b+16>>3]=q;r=g;return}function iz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;do switch(b|0){case 738:{h=4;r=a;return h|0}case 739:{h=4;r=a;return h|0}case 740:{h=5;r=a;return h|0}case 741:{h=5;r=a;return h|0}case 742:{h=10;r=a;return h|0}case 749:{h=8;r=a;return h|0}case 750:{h=8;r=a;return h|0}case 752:{h=9;r=a;return h|0}case 751:{h=9;r=a;return h|0}case 753:{h=14;r=a;return h|0}case 754:{h=10;r=a;return h|0}case 755:{h=14;r=a;return h|0}case 736:{h=1;r=a;return h|0}default:{i=d+56|0;j=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(i);Qb(n|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){o=Rb()|0;p=Q;q=o}else{k[j>>2]=27560;o=d+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(o);Ava(j);p=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,132447,13)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,b|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,73996,76);v=B;B=0;do if(!(v&1)){B=0;eb(502,f|0,75442,13);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(e);w=s;x=t;break}B=0;wa(510,g|0,j|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,e|0,f|0,361,g|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(g);y=s;z=t;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}while(0);m=p;n=q;vva(i);Qb(n|0)}}while(0);return 0}function jz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;a=r;r=r+384|0;f=a+312|0;g=a+240|0;h=a;i=iz(0,e)|0;oz(0,h,d,e);j=+p[c>>3];k=+p[c+48>>3];l=+p[c+72>>3];m=+p[c+8>>3];n=+p[c+32>>3];o=+p[c+56>>3];q=+p[c+80>>3];s=+p[c+16>>3];t=+p[c+40>>3];u=+p[c+64>>3];v=+p[c+88>>3];p[f>>3]=+p[c+24>>3]-j;p[f+8>>3]=n-m;p[f+16>>3]=t-s;p[f+24>>3]=k-j;p[f+32>>3]=o-m;p[f+40>>3]=u-s;p[f+48>>3]=l-j;p[f+56>>3]=q-m;p[f+64>>3]=v-s;eY(g,f);if((i|0)<=0){r=a;return}s=+p[g>>3];v=+p[g+8>>3];m=+p[g+16>>3];f=i<<1;q=+p[g+24>>3];j=+p[g+32>>3];l=+p[g+40>>3];u=+p[g+48>>3];o=+p[g+56>>3];k=+p[g+64>>3];g=0;do{t=+p[h+(g<<3)>>3];c=g+i|0;n=+p[h+(c<<3)>>3];e=g+f|0;w=+p[h+(e<<3)>>3];p[b+(g<<3)>>3]=s*t+v*n+m*w;p[b+(c<<3)>>3]=q*t+j*n+l*w;p[b+(e<<3)>>3]=u*t+o*n+k*w;g=g+1|0}while((g|0)!=(i|0));r=a;return}function kz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0.0,j=0.0,k=0.0;a=r;r=r+80|0;f=a;g=iz(0,e)|0;lz(0,f,d,e);if((g|0)>0){h=0;i=0.0}else{j=0.0;p[b>>3]=j;r=a;return}while(1){k=i+ +p[f+(h<<3)>>3]*+p[c+(h<<3)>>3];h=h+1|0;if((h|0)==(g|0)){j=k;break}else i=k}p[b>>3]=j;r=a;return}function lz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{p[b>>3]=1.0;r=a;return}case 739:case 738:{p[b>>3]=+p[c+40>>3];p[b+8>>3]=+p[c+48>>3];p[b+16>>3]=+p[c+56>>3];p[b+24>>3]=+p[c+64>>3];r=a;return}case 741:case 740:{j=c+40|0;p[b>>3]=+p[j>>3];l=c+48|0;p[b+8>>3]=+p[l>>3];m=c+56|0;p[b+16>>3]=+p[m>>3];n=c+64|0;p[b+24>>3]=+p[n>>3];p[b+32>>3]=+p[j>>3]*256.0*+p[l>>3]*+p[m>>3]*+p[n>>3];r=a;return}case 742:{n=c+40|0;o=+p[n>>3];p[b>>3]=o*(o*2.0+-1.0);m=c+48|0;o=+p[m>>3];p[b+8>>3]=o*(o*2.0+-1.0);l=c+56|0;o=+p[l>>3];p[b+16>>3]=o*(o*2.0+-1.0);j=c+64|0;o=+p[j>>3];p[b+24>>3]=o*(o*2.0+-1.0);p[b+32>>3]=+p[m>>3]*4.0*+p[l>>3];p[b+40>>3]=+p[n>>3]*4.0*+p[l>>3];p[b+48>>3]=+p[n>>3]*4.0*+p[m>>3];p[b+56>>3]=+p[m>>3]*4.0*+p[j>>3];p[b+64>>3]=+p[l>>3]*4.0*+p[j>>3];p[b+72>>3]=+p[n>>3]*4.0*+p[j>>3];r=a;return}default:{a=f+56|0;j=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,j|0);n=B;B=0;if(n&1){n=Rb()|0;q=Q;s=n;vva(a);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,j|0);n=B;B=0;do if(n&1){b=Rb()|0;t=Q;u=b}else{k[j>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;Yua(e);Yua(b);Ava(j);t=m;u=l;break}Yua(e);B=0;l=Ia(40,f|0,132447,13)|0;m=B;B=0;if((((!(m&1)?(B=0,m=ya(427,d|0)|0,c=B,B=0,!(c&1)):0)?(c=Lta(m)|0,B=0,v=Ia(40,l|0,m|0,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,g|0,73996,76);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,75456,17);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Yua(g);w=l;x=m;break}B=0;wa(510,i|0,j|0);m=B;B=0;if(m&1){m=Rb()|0;y=Q;z=m;A=1}else{B=0;ua(163,c|0,g|0,h|0,213,i|0);m=B;B=0;if(m&1)C=1;else{B=0;eb(503,c|0,1240,229);B=0;C=0}m=Rb()|0;l=Q;Yua(i);y=l;z=m;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(E|0)}}else{m=Rb()|0;w=Q;x=m}while(0);zb(c|0);D=w;E=x;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(E|0)}while(0);q=t;s=u;vva(a);Qb(s|0)}}}function mz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;d=r;r=r+272|0;a=d+248|0;e=d;f=d+112|0;g=d+96|0;h=d+84|0;i=d+72|0;j=+p[c>>3];l=+p[c+48>>3];m=+p[c+72>>3];n=+p[c+8>>3];o=+p[c+32>>3];q=+p[c+56>>3];s=+p[c+80>>3];t=+p[c+16>>3];u=+p[c+40>>3];v=+p[c+64>>3];w=+p[c+88>>3];p[e>>3]=+p[c+24>>3]-j;p[e+8>>3]=o-n;p[e+16>>3]=u-t;p[e+24>>3]=l-j;p[e+32>>3]=q-n;p[e+40>>3]=v-t;p[e+48>>3]=m-j;p[e+56>>3]=s-n;p[e+64>>3]=w-t;dY(b,e);if(!(+p[b>>3]<0.0)){r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);e=B;B=0;if(e&1){e=Rb()|0;x=Q;y=e;vva(d);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);e=B;B=0;do if(e&1){c=Rb()|0;z=Q;A=c}else{k[b>>2]=27560;c=f+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[f+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(a);Yua(c);Ava(b);z=D;A=C;break}Yua(a);B=0;C=Ia(40,f|0,75474,30)|0;D=B;B=0;if(!(D&1)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,g|0,73996,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,75505,22);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(g);G=F;H=E;break}B=0;wa(510,i|0,b|0);E=B;B=0;if(E&1){E=Rb()|0;I=Q;J=E;K=1}else{B=0;ua(163,C|0,g|0,h|0,135,i|0);E=B;B=0;if(E&1)L=1;else{B=0;eb(503,C|0,1240,229);B=0;L=0}E=Rb()|0;F=Q;Yua(i);I=F;J=E;K=L}Yua(h);Yua(g);if(K){G=I;H=J}else{M=I;N=J;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(N|0)}}else{E=Rb()|0;G=Q;H=E}while(0);zb(C|0);M=G;N=H;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(N|0)}D=Rb()|0;M=Q;N=D;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(d);Qb(N|0)}while(0);x=z;y=A;vva(d);Qb(y|0)}function nz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c>>3];j=+p[c+8>>3];l=+p[c+16>>3];m=+p[c+32>>3]-j;n=+p[c+64>>3]-l;o=+p[c+40>>3]-l;l=+p[c+56>>3]-j;j=m*n-o*l;q=+p[c+48>>3]-i;s=+p[c+24>>3]-i;i=o*q-s*n;n=s*l-m*q;q=n*n+(j*j+i*i);i=+$(+(+aa(+q)));j=q==-G?G:i*.28867513459481287;p[b>>3]=j;if(!(j<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;t=Q;u=c;vva(d);Qb(u|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){v=Rb()|0;w=Q;x=v}else{k[b>>2]=27560;v=e+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(a);Yua(v);Ava(b);w=z;x=y;break}Yua(a);B=0;y=Ia(40,e|0,75474,30)|0;z=B;B=0;if(!(z&1)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,73996,76);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,74073,26);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(f);D=C;E=A;break}B=0;wa(510,h|0,b|0);A=B;B=0;if(A&1){A=Rb()|0;F=Q;H=A;I=1}else{B=0;ua(163,y|0,f|0,g|0,155,h|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,y|0,1240,229);B=0;J=0}A=Rb()|0;C=Q;Yua(h);F=C;H=A;I=J}Yua(g);Yua(f);if(I){D=F;E=H}else{K=F;L=H;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}}else{A=Rb()|0;D=Q;E=A}while(0);zb(y|0);K=D;L=E;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}z=Rb()|0;K=Q;L=z;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}while(0);t=w;u=x;vva(d);Qb(u|0)}
+-function rq(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;g=r;r=r+192|0;d=g+176|0;j=g+40|0;l=g+28|0;m=g+16|0;n=g;o=g+12|0;p=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;a:do if((p|0)>0){q=a+20|0;if((h|0)==937){s=0;t=0;u=0;while(1){v=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;do if(!(i[v>>0]|0)){w=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;i[w>>0]=1;w=0;while(1){x=f+(w<<2)|0;if((k[x>>2]|0)>-1)w=w+1|0;else{y=x;break}}w=Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0;k[y>>2]=w;w=k[(k[q>>2]|0)+(t<<2)>>2]|0;if(k[w+28>>2]|0)if(!(fo(w)|0)){z=s+1|0;A=u;break}else{z=s;A=u+1|0;break}else{z=s;A=u}}else{z=s;A=u}while(0);t=t+1|0;if((t|0)==(p|0)){C=z;D=A;break a}else{s=z;u=A}}}else{E=0;F=0;G=0}b:while(1){u=e+(Rn(k[(k[q>>2]|0)+(F<<2)>>2]|0)|0)|0;c:do if(!(i[u>>0]|0)){s=e+(Rn(k[(k[q>>2]|0)+(F<<2)>>2]|0)|0)|0;i[s>>0]=1;s=0;while(1){t=f+(s<<2)|0;if((k[t>>2]|0)>-1)s=s+1|0;else{H=t;break}}s=Rn(k[(k[q>>2]|0)+(F<<2)>>2]|0)|0;k[H>>2]=s;switch(h|0){case 966:{s=k[(k[q>>2]|0)+(F<<2)>>2]|0;if(!(k[s+32>>2]|0)){I=E;J=G;break c}if(!(fo(s)|0)){I=E+1|0;J=G;break c}else{I=E;J=G+1|0;break c}break}case 943:{s=k[(k[q>>2]|0)+(F<<2)>>2]|0;if(!(k[s+24>>2]|0)){I=E;J=G;break c}if(!(fo(s)|0)){I=E+1|0;J=G;break c}else{I=E;J=G+1|0;break c}break}default:break b}}else{I=E;J=G}while(0);F=F+1|0;if((F|0)>=(p|0)){C=I;D=J;break a}else{E=I;G=J}}q=j+56|0;u=j+4|0;k[j>>2]=27524;k[q>>2]=27544;B=0;wa(508,j+56|0,u|0);s=B;B=0;if(s&1){s=Rb()|0;K=Q;L=s;vva(q);Qb(L|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[q>>2]=27488;B=0;va(448,u|0);s=B;B=0;do if(s&1){t=Rb()|0;M=Q;N=t}else{k[u>>2]=27560;t=j+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,u|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(d);Yua(t);Ava(u);M=w;N=v;break}Yua(d);B=0;v=Ia(40,j|0,145010,13)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,l|0,69562,75);w=B;B=0;do if(!(w&1)){B=0;eb(502,m|0,144217,23);x=B;B=0;if(x&1){x=Rb()|0;O=Q;Yua(l);P=O;R=x;break}B=0;wa(510,n|0,u|0);x=B;B=0;if(x&1){x=Rb()|0;S=Q;T=x;U=1}else{B=0;ua(163,v|0,l|0,m|0,2210,n|0);x=B;B=0;if(x&1)V=1;else{B=0;eb(503,v|0,1240,229);B=0;V=0}x=Rb()|0;O=Q;Yua(n);S=O;T=x;U=V}Yua(m);Yua(l);if(U){P=S;R=T}else{W=S;X=T;k[j>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(q);Qb(X|0)}}else{x=Rb()|0;P=Q;R=x}while(0);zb(v|0);W=P;X=R;k[j>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(q);Qb(X|0)}w=Rb()|0;W=Q;X=w;k[j>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(q);Qb(X|0)}while(0);K=M;L=N;vva(q);Qb(L|0)}else{C=0;D=0}while(0);L=a+36|0;cO(k[L>>2]|0,d,477);if((k[d>>2]|0)!=497){Y=C;Z=D;k[b>>2]=Y;k[c>>2]=Z;r=g;return}kC(k[a+16>>2]|0,j,533);if(((k[j>>2]|0)+-537|0)>>>0>=2){Y=C;Z=D;k[b>>2]=Y;k[c>>2]=Z;r=g;return}cO(k[L>>2]|0,o,283);L=(k[o>>2]|0)*3|0;Y=L+C|0;Z=L+D|0;k[b>>2]=Y;k[c>>2]=Z;r=g;return}function sq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0.0,ua=0.0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0.0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0.0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0.0,vb=0.0,wb=0.0,xb=0.0,yb=0.0,zb=0.0,Ab=0.0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0.0,Ib=0,Jb=0.0,Kb=0.0,Lb=0.0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0.0,gc=0.0,hc=0.0;b=r;r=r+960|0;c=b+928|0;d=b+264|0;e=b+256|0;f=b+248|0;g=b+240|0;h=b+232|0;j=b+224|0;l=b+216|0;m=b+208|0;n=b+200|0;o=b+192|0;q=b+184|0;s=b+176|0;t=b+168|0;u=b+160|0;v=b+152|0;w=b+144|0;x=b+136|0;y=b+128|0;z=b+120|0;A=b+112|0;C=b+104|0;D=b+96|0;E=b+924|0;F=b+920|0;G=b+916|0;H=b+88|0;I=b+80|0;J=b+72|0;K=b+64|0;L=b+56|0;M=b+48|0;N=b+40|0;O=b+947|0;P=b+946|0;R=b+945|0;S=b+944|0;T=b+943|0;U=b+942|0;V=b+941|0;W=b+940|0;X=b+32|0;Y=b+912|0;Z=b+908|0;_=b+904|0;$=b+900|0;aa=b+896|0;ba=b+24|0;ca=b+892|0;da=b+888|0;ea=b+884|0;fa=b+880|0;ga=b+16|0;ha=b+8|0;ia=b;ja=b+864|0;ka=b+728|0;la=b+868|0;ma=b+576|0;na=b+712|0;oa=b+440|0;pa=b+424|0;qa=b+288|0;ra=b+272|0;k[E>>2]=0;k[F>>2]=0;k[G>>2]=0;p[X>>3]=1.0;k[Y>>2]=0;k[Z>>2]=0;k[_>>2]=0;k[$>>2]=0;k[aa>>2]=0;p[ba>>3]=0.0;k[ca>>2]=0;k[da>>2]=0;k[ea>>2]=0;k[fa>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){r=b;return}sa=a+32|0;ta=+WJ(k[sa>>2]|0,265);ua=+WJ(k[sa>>2]|0,267);sa=a+36|0;dO(k[sa>>2]|0,q,415);dO(k[sa>>2]|0,s,416);dO(k[sa>>2]|0,t,767);dO(k[sa>>2]|0,u,358);dO(k[sa>>2]|0,v,403);cO(k[sa>>2]|0,E,405);cO(k[sa>>2]|0,F,407);cO(k[sa>>2]|0,G,406);dO(k[sa>>2]|0,H,417);dO(k[sa>>2]|0,I,418);dO(k[sa>>2]|0,J,419);dO(k[sa>>2]|0,K,420);bO(k[sa>>2]|0,O,430);bO(k[sa>>2]|0,P,431);bO(k[sa>>2]|0,R,432);bO(k[sa>>2]|0,S,433);bO(k[sa>>2]|0,T,434);bO(k[sa>>2]|0,U,435);bO(k[sa>>2]|0,V,436);bO(k[sa>>2]|0,W,437);dO(k[sa>>2]|0,X,390);sa=a+16|0;xa=oC(k[sa>>2]|0,408)|0;za=oC(k[sa>>2]|0,409)|0;Aa=oC(k[sa>>2]|0,410)|0;Ba=oC(k[sa>>2]|0,412)|0;Ca=oC(k[sa>>2]|0,413)|0;Da=oC(k[sa>>2]|0,411)|0;Ea=oC(k[sa>>2]|0,399)|0;Fa=oC(k[sa>>2]|0,400)|0;Ga=oC(k[sa>>2]|0,401)|0;Ha=oC(k[sa>>2]|0,402)|0;Ja=oC(k[sa>>2]|0,391)|0;Ka=oC(k[sa>>2]|0,392)|0;La=oC(k[sa>>2]|0,394)|0;Ma=oC(k[sa>>2]|0,393)|0;Na=oC(k[sa>>2]|0,395)|0;Pa=oC(k[sa>>2]|0,397)|0;Qa=oC(k[sa>>2]|0,398)|0;Ra=oC(k[sa>>2]|0,386)|0;Ta=ed[k[(k[a>>2]|0)+308>>2]&511](a,1)|0;Fc[k[(k[Ta>>2]|0)+24>>2]&1023](Ta,0);nd[k[(k[xa>>2]|0)+48>>2]&1023](xa,d,Ta);nd[k[(k[za>>2]|0)+48>>2]&1023](za,e,Ta);nd[k[(k[Aa>>2]|0)+48>>2]&1023](Aa,j,Ta);nd[k[(k[Ba>>2]|0)+48>>2]&1023](Ba,f,Ta);nd[k[(k[Ca>>2]|0)+48>>2]&1023](Ca,g,Ta);nd[k[(k[Da>>2]|0)+48>>2]&1023](Da,h,Ta);nd[k[(k[Ea>>2]|0)+48>>2]&1023](Ea,l,Ta);nd[k[(k[Fa>>2]|0)+48>>2]&1023](Fa,m,Ta);nd[k[(k[Ga>>2]|0)+48>>2]&1023](Ga,n,Ta);nd[k[(k[Ha>>2]|0)+48>>2]&1023](Ha,o,Ta);do if(!Ra){a:do if(GY()|0?(k[a+12>>2]|0)==0:0){Ha=ka+56|0;Ga=ka+4|0;k[ka>>2]=27524;k[Ha>>2]=27544;B=0;wa(508,ka+56|0,Ga|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ua=Q;Va=Fa;vva(Ha);Qb(Va|0)}k[ka+128>>2]=0;k[ka+132>>2]=-1;k[ka>>2]=27468;k[Ha>>2]=27488;B=0;va(448,Ga|0);Fa=B;B=0;do if(Fa&1){Ea=Rb()|0;Wa=Q;Ya=Ea}else{k[Ga>>2]=27560;Ea=ka+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[ka+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ga|0,c|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ca=Q;Yua(c);Yua(Ea);Ava(Ga);Wa=Ca;Ya=Da;break}Yua(c);B=0;Ia(40,ka|0,70650,28)|0;Da=B;B=0;do if(!(Da&1)?(B=0,wa(510,la|0,Ga|0),Ca=B,B=0,!(Ca&1)):0){B=0;ya(425,la|0)|0;Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ba=Q;Yua(la);Za=Ba;_a=Ca;break}else{Yua(la);k[ka>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Ea);Ava(Ga);vva(Ha);break a}}else $a=17;while(0);if(($a|0)==17){Da=Rb()|0;Za=Q;_a=Da}k[ka>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Ea);Ava(Ga);vva(Ha);ab=Za;bb=_a;Qb(bb|0)}while(0);Ua=Wa;Va=Ya;vva(Ha);Qb(Va|0)}while(0);_Z(Y,ja,+p[d>>3],+p[e>>3],+p[f>>3],+p[h>>3]);Ga=k[ja>>2]|0;Fa=Ga>>>0>536870911?-1:Ga<<3;Da=Rqa(Fa)|0;Ca=(Ga|0)==0;b:do if(Ca){k[Z>>2]=Da;Ba=Rqa(Fa)|0;k[_>>2]=Ba;$a=31}else{WEa(Da|0,0,Ga<<3|0)|0;k[Z>>2]=Da;Ba=(Ga|0)>0;do if(Ba){cb=ta*+p[X>>3];Aa=0;do{p[Da+(Aa<<3)>>3]=cb;Aa=Aa+1|0}while((Aa|0)<(Ga|0));Aa=Rqa(Fa)|0;if(Ca){k[_>>2]=Aa;if(!Ba){$a=31;break b}}else{WEa(Aa|0,0,Ga<<3|0)|0;k[_>>2]=Aa;if(!Ba){$a=27;break}}Ea=0;do{p[Aa+(Ea<<3)>>3]=2.5;Ea=Ea+1|0}while((Ea|0)<(Ga|0));Ea=Rqa(Fa)|0;if(Ca)k[$>>2]=Ea;else{WEa(Ea|0,0,Ga<<3|0)|0;k[$>>2]=Ea}WEa(Ea|0,0,((Ga|0)>1?Ga:1)<<3|0)|0;Ea=Rqa(Fa)|0;if(Ca){db=Ea;break b}else fb=Ea}else{Ea=Rqa(Fa)|0;WEa(Ea|0,0,Ga<<3|0)|0;k[_>>2]=Ea;$a=27}while(0);if(($a|0)==27){Ba=Rqa(Fa)|0;WEa(Ba|0,0,Ga<<3|0)|0;k[$>>2]=Ba;fb=Rqa(Fa)|0}WEa(fb|0,0,Ga<<3|0)|0;db=fb}while(0);if(($a|0)==31){Ga=Rqa(Fa)|0;k[$>>2]=Ga;db=Rqa(Fa)|0}k[aa>>2]=db;Ga=k[ja>>2]|0;if((Ga|0)>0){WEa(db|0,0,((Ga|0)>1?Ga:1)<<3|0)|0;gb=k[ja>>2]|0}else gb=Ga;p[ba>>3]=0.0;Ga=gb>>>0>536870911?-1:gb<<3;Ca=Rqa(Ga)|0;if(!gb){k[ca>>2]=Ca;hb=Rqa(Ga)|0}else{WEa(Ca|0,0,gb<<3|0)|0;k[ca>>2]=Ca;if((gb|0)>0)WEa(Ca|0,0,((gb|0)>1?gb:1)<<3|0)|0;Ca=Rqa(Ga)|0;WEa(Ca|0,0,gb<<3|0)|0;hb=Ca}k[da>>2]=hb;Ca=k[ja>>2]|0;Ga=(Ca|0)>0;if(Ga){cb=+p[q>>3];Da=0;do{p[hb+(Da<<3)>>3]=cb;Da=Da+1|0}while((Da|0)<(Ca|0))}Da=Rqa(Ca>>>0>536870911?-1:Ca<<3)|0;if(Ca)WEa(Da|0,0,Ca<<3|0)|0;k[fa>>2]=Da;if(Ga){cb=+p[l>>3];Fa=0;do{p[Da+(Fa<<3)>>3]=cb;Fa=Fa+1|0}while((Fa|0)<(Ca|0))}cb=+p[Da+(Ca+-1<<3)>>3];Fa=Qqa(12)|0;B=0;eb(507,Fa|0,386,1);Ga=B;B=0;if(!(Ga&1)){mC(k[sa>>2]|0,Fa)|0;jb=k[ja>>2]|0;kb=cb;break}Ga=Rb()|0;Ba=Q;Sqa(Fa);ab=Ba;bb=Ga;Qb(bb|0)}else{Ga=oC(k[sa>>2]|0,404)|0;if(!Ga)lb=0;else lb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,421)|0;if(!Ga)mb=0;else mb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,422)|0;if(!Ga)nb=0;else nb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,423)|0;if(!Ga)ob=0;else ob=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,424)|0;if(!Ga)pb=0;else pb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,425)|0;if(!Ga)qb=0;else qb=ura(Ga,352,792,0)|0;Ga=oC(k[sa>>2]|0,427)|0;if(!Ga)rb=0;else rb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,428)|0;if(!Ga)sb=0;else sb=ura(Ga,352,808,0)|0;Ga=oC(k[sa>>2]|0,429)|0;if(!Ga)tb=0;else tb=ura(Ga,352,808,0)|0;cH(lb,Y,ja);cH(mb,Z,ja);cH(nb,_,ja);cH(ob,$,ja);cH(pb,aa,ja);Fc[k[(k[qb>>2]|0)+44>>2]&1023](qb,ba);cH(rb,ca,ja);cH(sb,da,ja);cH(tb,fa,ja);Ga=k[ja>>2]|0;jb=Ga;kb=+p[(k[fa>>2]|0)+(Ga+-1<<3)>>3]}while(0);if((jb|0)>0){tb=k[Y>>2]|0;sb=k[Z>>2]|0;rb=k[ca>>2]|0;qb=0;cb=0.0;while(1){ub=cb+(+p[tb+(qb<<3)>>3]*+p[sb+(qb<<3)>>3]+ +p[rb+(qb<<3)>>3]);qb=qb+1|0;if((qb|0)>=(jb|0)){vb=ub;break}else cb=ub}}else vb=0.0;cb=+p[u>>3];ub=+p[t>>3]-cb;p[t>>3]=ub;c:do if(ub<=ub+cb){qb=a+12|0;rb=ma+56|0;sb=ma+4|0;tb=ma+56|0;pb=ma+128|0;ob=ma+132|0;nb=ma+36|0;mb=ma+52|0;lb=oa+56|0;hb=oa+4|0;gb=oa+56|0;db=oa+128|0;fb=oa+132|0;X=oa+36|0;h=oa+52|0;e=qa+56|0;d=qa+4|0;Va=qa+56|0;Ya=qa+128|0;Wa=qa+132|0;Ua=qa+36|0;_a=qa+52|0;Za=1;wb=0.0;xb=0.0;yb=0.0;zb=0.0;Ab=ub;while(1){if((GY()|0?(k[qb>>2]|0)==0:0)?(vY()|0)==0:0){k[ma>>2]=27524;k[rb>>2]=27544;B=0;wa(508,tb|0,sb|0);ka=B;B=0;if(ka&1){$a=87;break}k[pb>>2]=0;k[ob>>2]=-1;k[ma>>2]=27468;k[rb>>2]=27488;B=0;va(448,sb|0);ka=B;B=0;if(ka&1){$a=88;break}k[sb>>2]=27560;k[nb>>2]=0;k[nb+4>>2]=0;k[nb+8>>2]=0;k[nb+12>>2]=0;k[mb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sb|0,c|0);ka=B;B=0;if(ka&1){$a=86;break}Yua(c);B=0;ka=Ia(40,ma|0,70679,8)|0;la=B;B=0;if(la&1){$a=102;break}k[ka+(k[(k[ka>>2]|0)+-12>>2]|0)+8>>2]=8;B=0;la=Sa(1,ka|0,+(Ab/365.0/24.0/3600.0))|0;ka=B;B=0;if(ka&1){$a=102;break}B=0;ka=Ia(40,la|0,70688,4)|0;la=B;B=0;if(la&1){$a=102;break}B=0;la=Sa(1,ka|0,+((+p[t>>3]+ +p[u>>3])/365.0/24.0/3600.0))|0;ka=B;B=0;if(ka&1){$a=102;break}B=0;ka=Ia(40,la|0,70693,3)|0;la=B;B=0;if(la&1){$a=102;break}k[ka+(k[(k[ka>>2]|0)+-12>>2]|0)+8>>2]=3;B=0;la=Ia(40,ka|0,70697,7)|0;ka=B;B=0;if(ka&1){$a=102;break}B=0;ka=Xa(242,la|0,Za|0)|0;la=B;B=0;if(la&1){$a=102;break}B=0;Ia(40,ka|0,149177,1)|0;ka=B;B=0;if(ka&1){$a=102;break}B=0;wa(510,na|0,sb|0);ka=B;B=0;if(ka&1){$a=102;break}B=0;ya(425,na|0)|0;ka=B;B=0;if(ka&1){$a=103;break}Yua(na);k[ma>>2]=27468;k[rb>>2]=27488;k[sb>>2]=27560;Yua(nb);Ava(sb);vva(rb)}md[k[(k[Ja>>2]|0)+52>>2]&31](Ja,w,Ta,Ab);md[k[(k[Ka>>2]|0)+52>>2]&31](Ka,x,Ta,Ab);md[k[(k[La>>2]|0)+52>>2]&31](La,y,Ta,Ab);md[k[(k[Ma>>2]|0)+52>>2]&31](Ma,z,Ta,Ab);md[k[(k[Na>>2]|0)+52>>2]&31](Na,A,Ta,Ab);md[k[(k[Pa>>2]|0)+52>>2]&31](Pa,C,Ta,Ab);md[k[(k[Qa>>2]|0)+52>>2]&31](Qa,D,Ta,Ab);if(i[O>>0]|0)a_(k[_>>2]|0,k[$>>2]|0,k[aa>>2]|0,k[fa>>2]|0,k[Y>>2]|0,k[Z>>2]|0,k[ca>>2]|0,+p[v>>3],k[ja>>2]|0,k[E>>2]|0,k[qb>>2]|0);if(i[P>>0]|0)b_(k[da>>2]|0,k[E>>2]|0,k[_>>2]|0,k[Z>>2]|0,+p[H>>3],+p[s>>3],+p[q>>3],k[fa>>2]|0,k[ca>>2]|0,+p[A>>3],+p[ba>>3],+p[I>>3],+p[J>>3],+p[K>>3],+p[v>>3],k[ja>>2]|0,k[qb>>2]|0);if(i[R>>0]|0)d_(ea,k[G>>2]|0,k[E>>2]|0,+p[z>>3],+p[k[da>>2]>>3],k[Z>>2]|0,k[Y>>2]|0,k[_>>2]|0,k[ja>>2]|0,k[qb>>2]|0);if(i[S>>0]|0)c_(ba,k[fa>>2]|0,k[Y>>2]|0,k[Z>>2]|0,k[ea>>2]|0,+p[y>>3],+p[w>>3],+p[x>>3],+p[C>>3],+p[D>>3],+p[k[ca>>2]>>3],+p[v>>3],k[ja>>2]|0,+p[o>>3],+p[n>>3],k[qb>>2]|0);ka=k[Y>>2]|0;p[ka>>3]=+p[ka>>3]+ +p[ba>>3]/+p[k[Z>>2]>>3];if(i[T>>0]|0)e_(fa,Y,Z,ca,da,_,$,aa,ja,+p[w>>3],+p[A>>3],+p[j>>3],+p[q>>3],k[qb>>2]|0);if(i[U>>0]|0)f_(ga,ha,ia,fa,Z,Y,ca,da,_,$,aa,ja,+p[j>>3],+p[f>>3],+p[g>>3],k[qb>>2]|0);if(i[V>>0]|0)g_(k[Z>>2]|0,k[Y>>2]|0,k[fa>>2]|0,k[_>>2]|0,k[F>>2]|0,+p[m>>3],+p[v>>3],+p[l>>3],ta,k[ja>>2]|0,k[qb>>2]|0);if(i[W>>0]|0)h_(M,L,N,+p[w>>3],+p[k[fa>>2]>>3],+p[x>>3],+p[C>>3],+p[D>>3],+p[k[Z>>2]>>3],+p[k[ca>>2]>>3],+p[o>>3],+p[n>>3],k[qb>>2]|0);xb=xb+ +p[ia>>3];Bb=zb+ +p[ha>>3];Cb=+kY(k[ca>>2]|0,k[ja>>2]|0);Db=yb+ +p[A>>3];Eb=wb+ +p[ba>>3];ka=k[ja>>2]|0;if((ka|0)>0){la=k[Y>>2]|0;Ra=k[Z>>2]|0;Ga=0;Fb=0.0;while(1){Gb=Fb+ +p[la+(Ga<<3)>>3]*+p[Ra+(Ga<<3)>>3];Ga=Ga+1|0;if((Ga|0)>=(ka|0)){Hb=Gb;break}else Fb=Gb}}else Hb=0.0;if(+VEa(+((Cb+(Bb+Hb)-Db-Eb-vb-xb)*100.0))/100.0!=0.0){k[oa>>2]=27524;k[lb>>2]=27544;B=0;wa(508,gb|0,hb|0);Ga=B;B=0;if(Ga&1){$a=129;break}k[db>>2]=0;k[fb>>2]=-1;k[oa>>2]=27468;k[lb>>2]=27488;B=0;va(448,hb|0);Ga=B;B=0;if(Ga&1){$a=130;break}k[hb>>2]=27560;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[h>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hb|0,c|0);Ga=B;B=0;if(Ga&1){$a=128;break}Yua(c);B=0;Ia(40,oa|0,70705,46)|0;Ga=B;B=0;if(Ga&1){$a=137;break}B=0;wa(510,pa|0,hb|0);Ga=B;B=0;if(Ga&1){$a=137;break}B=0;ya(424,pa|0)|0;Ga=B;B=0;if(Ga&1){$a=138;break}Yua(pa);k[oa>>2]=27468;k[lb>>2]=27488;k[hb>>2]=27560;Yua(X);Ava(hb);vva(lb);Ib=k[ja>>2]|0}else Ib=ka;if(+p[(k[fa>>2]|0)+(Ib+-1<<3)>>3]!=kb){k[qa>>2]=27524;k[e>>2]=27544;B=0;wa(508,Va|0,d|0);Ga=B;B=0;if(Ga&1){$a=145;break}k[Ya>>2]=0;k[Wa>>2]=-1;k[qa>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);Ga=B;B=0;if(Ga&1){$a=146;break}k[d>>2]=27560;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[_a>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);Ga=B;B=0;if(Ga&1){$a=144;break}Yua(c);B=0;Ga=Ia(40,qa|0,70752,16)|0;Ra=B;B=0;if(Ra&1){$a=154;break}B=0;Ia(40,Ga|0,149177,1)|0;Ga=B;B=0;if(Ga&1){$a=154;break}B=0;wa(510,ra|0,d|0);Ga=B;B=0;if(Ga&1){$a=154;break}B=0;ya(424,ra|0)|0;Ga=B;B=0;if(Ga&1){$a=155;break}Yua(ra);k[qa>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(Ua);Ava(d);vva(e)}Ga=k[ea>>2]|0;if(Ga)Tqa(Ga);k[ea>>2]=0;Ab=Ab+ +p[v>>3];if(!(Ab<=+p[t>>3]+ +p[u>>3])){Jb=Bb;Kb=Db;Lb=Eb;$a=160;break}else{Za=Za+1|0;wb=Eb;yb=Db;zb=Bb}}switch($a|0){case 86:{Za=Rb()|0;_a=Q;Yua(c);Yua(nb);Ava(sb);Mb=_a;Nb=Za;$a=89;break}case 87:{Za=Rb()|0;Ob=Q;Pb=Za;vva(rb);Qb(Pb|0);break}case 88:{Za=Rb()|0;Mb=Q;Nb=Za;$a=89;break}case 102:{Za=Rb()|0;Sb=Q;Tb=Za;$a=104;break}case 103:{Za=Rb()|0;_a=Q;Yua(na);Sb=_a;Tb=Za;$a=104;break}case 128:{Za=Rb()|0;_a=Q;Yua(c);Yua(X);Ava(hb);Ub=_a;Vb=Za;$a=131;break}case 129:{Za=Rb()|0;Wb=Q;Xb=Za;vva(lb);Qb(Xb|0);break}case 130:{Za=Rb()|0;Ub=Q;Vb=Za;$a=131;break}case 137:{Za=Rb()|0;Yb=Q;Zb=Za;$a=139;break}case 138:{Za=Rb()|0;_a=Q;Yua(pa);Yb=_a;Zb=Za;$a=139;break}case 144:{Za=Rb()|0;_a=Q;Yua(c);Yua(Ua);Ava(d);_b=_a;$b=Za;$a=147;break}case 145:{Za=Rb()|0;ac=Q;bc=Za;vva(e);Qb(bc|0);break}case 146:{Za=Rb()|0;_b=Q;$b=Za;$a=147;break}case 154:{Za=Rb()|0;cc=Q;dc=Za;$a=156;break}case 155:{Za=Rb()|0;_a=Q;Yua(ra);cc=_a;dc=Za;$a=156;break}case 160:{ec=k[ja>>2]|0;fc=Lb;gc=Kb;hc=Jb;break c;break}}if(($a|0)==89){Ob=Mb;Pb=Nb;vva(rb);Qb(Pb|0)}else if(($a|0)==104){k[ma>>2]=27468;k[rb>>2]=27488;k[sb>>2]=27560;Yua(nb);Ava(sb);vva(rb);ab=Sb;bb=Tb;Qb(bb|0)}else if(($a|0)==131){Wb=Ub;Xb=Vb;vva(lb);Qb(Xb|0)}else if(($a|0)==139){k[oa>>2]=27468;k[lb>>2]=27488;k[hb>>2]=27560;Yua(X);Ava(hb);vva(lb);ab=Yb;bb=Zb;Qb(bb|0)}else if(($a|0)==147){ac=_b;bc=$b;vva(e);Qb(bc|0)}else if(($a|0)==156){k[qa>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(Ua);Ava(d);vva(e);ab=cc;bb=dc;Qb(bb|0)}}else{ec=jb;fc=0.0;gc=0.0;hc=0.0}while(0);jb=Qqa(16)|0;B=0;ib(288,jb|0,404,k[Y>>2]|0,ec|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,421,k[Z>>2]|0,k[ja>>2]|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,422,k[_>>2]|0,k[ja>>2]|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,423,k[$>>2]|0,k[ja>>2]|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,424,k[aa>>2]|0,k[ja>>2]|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,429,k[fa>>2]|0,k[ja>>2]|0);ec=B;B=0;if(ec&1){ec=Rb()|0;dc=Q;Sqa(jb);ab=dc;bb=ec;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;Oa(58,jb|0,425,+(+p[ba>>3]));ba=B;B=0;if(ba&1){ba=Rb()|0;ec=Q;Sqa(jb);ab=ec;bb=ba;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,427,k[ca>>2]|0,k[ja>>2]|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ec=Q;Sqa(jb);ab=ec;bb=ba;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;ib(288,jb|0,428,k[da>>2]|0,k[ja>>2]|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ba=Q;Sqa(jb);ab=ba;bb=ja;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;Oa(58,jb|0,388,+((gc+fc-hc)/ua/+p[u>>3]));ja=B;B=0;if(ja&1){ja=Rb()|0;ba=Q;Sqa(jb);ab=ba;bb=ja;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;Oa(58,jb|0,469,+(hc/ua/+p[u>>3]));ja=B;B=0;if(ja&1){ja=Rb()|0;ba=Q;Sqa(jb);ab=ba;bb=ja;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;Oa(58,jb|0,448,+(gc/ua/+p[u>>3]));ja=B;B=0;if(ja&1){ja=Rb()|0;ba=Q;Sqa(jb);ab=ba;bb=ja;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=Qqa(16)|0;B=0;Oa(58,jb|0,426,+(fc/ua/+p[u>>3]));u=B;B=0;if(u&1){u=Rb()|0;ja=Q;Sqa(jb);ab=ja;bb=u;Qb(bb|0)}mC(k[sa>>2]|0,jb)|0;jb=k[Y>>2]|0;if(jb)Tqa(jb);k[Y>>2]=0;Y=k[Z>>2]|0;if(Y)Tqa(Y);k[Z>>2]=0;Z=k[_>>2]|0;if(Z)Tqa(Z);k[_>>2]=0;_=k[$>>2]|0;if(_)Tqa(_);k[$>>2]=0;$=k[aa>>2]|0;if($)Tqa($);k[aa>>2]=0;aa=k[ca>>2]|0;if(aa)Tqa(aa);k[ca>>2]=0;ca=k[da>>2]|0;if(ca)Tqa(ca);k[da>>2]=0;da=k[fa>>2]|0;if(da)Tqa(da);k[fa>>2]=0;if(!Ta){r=b;return}Ec[k[(k[Ta>>2]|0)+4>>2]&1023](Ta);r=b;return}function tq(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;YJ(k[a+32>>2]|0,b,c,d,e);return}function uq(a,b){a=a|0;b=+b;return +(+VJ(k[a+32>>2]|0,b))}function vq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;e=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){f=0;do{k[e+(f<<2)>>2]=c;f=f+1|0}while((f|0)!=(d|0))}wq(0,b,k[a+20>>2]|0,d,e);Tqa(e);return}function wq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;k[g>>2]=0;a:do if((d|0)>0){m=0;n=0;b:while(1){o=e+(m<<2)|0;switch(k[o>>2]|0){case 653:{q=n+1|0;break}case 971:{q=n+2|0;break}case 972:{q=n+3|0;break}default:{s=o;break b}}m=m+1|0;if((m|0)>=(d|0)){t=q;break a}else n=q}n=h+56|0;m=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;u=Q;v=o;vva(n);Qb(v|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,m|0);o=B;B=0;do if(o&1){w=Rb()|0;x=Q;y=w}else{k[m>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);Yua(w);Ava(m);x=A;y=z;break}Yua(f);B=0;z=Ia(40,h|0,69672,18)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[s>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,i|0,69562,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,70769,32);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(i);E=z;F=A;break}B=0;wa(510,l|0,m|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,i|0,j|0,2780,l|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(l);G=z;H=A;I=J}Yua(j);Yua(i);if(I){E=G;F=H}else{K=G;L=H;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}while(0);u=x;v=y;vva(n);Qb(v|0)}else t=0;while(0);v=k[b>>2]|0;y=b+4|0;x=k[y>>2]|0;u=ma(x,v)|0;L=Rqa(u>>>0>536870911?-1:u<<3)|0;if((v|0)>0){u=b+12|0;if((x|0)>0){h=k[u>>2]|0;K=0;do{F=ma(x,K)|0;E=0;do{H=F+E|0;p[L+(H<<3)>>3]=+p[h+(H<<3)>>3];E=E+1|0}while((E|0)<(x|0));K=K+1|0}while((K|0)<(v|0));M=u}else M=u}else M=b+12|0;_o(0,g,c,d,e);e=k[g>>2]|0;ZX(e,t,t,0,L,k[b>>2]|0,k[y>>2]|0,0,e,t,t,1,k[M>>2]|0,0)|0;if(!e){Tqa(L);r=a;return}Tqa(e);Tqa(L);r=a;return}function xq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;e=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){f=0;do{k[e+(f<<2)>>2]=c;f=f+1|0}while((f|0)!=(d|0))}yq(0,b,k[a+20>>2]|0,d,e);Tqa(e);return}function yq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;k[g>>2]=0;a:do if((d|0)>0){m=0;n=0;b:while(1){o=e+(m<<2)|0;switch(k[o>>2]|0){case 653:{q=n+1|0;break}case 971:{q=n+2|0;break}case 972:{q=n+3|0;break}default:{s=o;break b}}m=m+1|0;if((m|0)>=(d|0)){t=q;break a}else n=q}n=h+56|0;m=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;u=Q;v=o;vva(n);Qb(v|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,m|0);o=B;B=0;do if(o&1){w=Rb()|0;x=Q;y=w}else{k[m>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);Yua(w);Ava(m);x=A;y=z;break}Yua(f);B=0;z=Ia(40,h|0,69672,18)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[s>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,i|0,69562,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,70802,24);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(i);E=z;F=A;break}B=0;wa(510,l|0,m|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,i|0,j|0,2832,l|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(l);G=z;H=A;I=J}Yua(j);Yua(i);if(I){E=G;F=H}else{K=G;L=H;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}while(0);u=x;v=y;vva(n);Qb(v|0)}else t=0;while(0);v=k[b>>2]|0;y=Rqa(v>>>0>536870911?-1:v<<3)|0;x=b+4|0;if((v|0)>0){u=k[x>>2]|0;L=0;do{p[y+(L<<3)>>3]=+p[u+(L<<3)>>3];L=L+1|0}while((L|0)<(v|0))}_o(0,g,c,d,e);e=k[g>>2]|0;_X(e,t,t,1,y,k[b>>2]|0,1,0,k[x>>2]|0,0)|0;if(!e){Tqa(y);r=a;return}Tqa(e);Tqa(y);r=a;return}function zq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+20>>2]|0;yq(0,b,d,Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0,c);return}function Aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;e=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){f=0;do{k[e+(f<<2)>>2]=c;f=f+1|0}while((f|0)!=(d|0))}Bq(0,b,k[a+20>>2]|0,d,e);Tqa(e);return}function Bq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;k[g>>2]=0;a:do if((d|0)>0){m=0;n=0;b:while(1){o=e+(m<<2)|0;switch(k[o>>2]|0){case 653:{p=n+1|0;break}case 971:{p=n+2|0;break}case 972:{p=n+3|0;break}default:{q=o;break b}}m=m+1|0;if((m|0)>=(d|0)){s=p;break a}else n=p}n=h+56|0;m=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;u=o;vva(n);Qb(u|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,m|0);o=B;B=0;do if(o&1){v=Rb()|0;w=Q;x=v}else{k[m>>2]=27560;v=h+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(f);Yua(v);Ava(m);w=z;x=y;break}Yua(f);B=0;y=Ia(40,h|0,69672,18)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,k[q>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,y|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,i|0,69562,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,70827,22);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(i);D=y;E=z;break}B=0;wa(510,l|0,m|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;G=z;H=1}else{B=0;ua(163,A|0,i|0,j|0,2908,l|0);z=B;B=0;if(z&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}z=Rb()|0;y=Q;Yua(l);F=y;G=z;H=I}Yua(j);Yua(i);if(H){D=F;E=G}else{J=F;K=G;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(v);Ava(m);vva(n);Qb(K|0)}}else{z=Rb()|0;D=Q;E=z}while(0);zb(A|0);J=D;K=E;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(v);Ava(m);vva(n);Qb(K|0)}C=Rb()|0;J=Q;K=C;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(v);Ava(m);vva(n);Qb(K|0)}while(0);t=w;u=x;vva(n);Qb(u|0)}else s=0;while(0);u=Rqa(s>>>0>536870911?-1:s<<3)|0;if((s|0)>0)TEa(u|0,b|0,s<<3|0)|0;_o(0,g,c,d,e);e=k[g>>2]|0;_X(e,s,s,0,u,s,1,0,b,0)|0;if(!e){Tqa(u);r=a;return}Tqa(e);Tqa(u);r=a;return}function Cq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+20>>2]|0;Bq(0,b,d,Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0,c);return}function Dq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Rqa(c>>>0>1073741823?-1:c<<2)|0;if((c|0)>0){f=0;do{k[e+(f<<2)>>2]=d;f=f+1|0}while((f|0)!=(c|0))}Bq(0,b,k[a+20>>2]|0,c,e);Tqa(e);return}function Eq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Bq(0,b,k[a+20>>2]|0,c,d);return}function Fq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;e=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){f=0;do{k[e+(f<<2)>>2]=c;f=f+1|0}while((f|0)!=(d|0))}Gq(0,b,k[a+20>>2]|0,d,e);Tqa(e);return}function Gq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;k[g>>2]=0;a:do if((d|0)>0){m=0;n=0;b:while(1){o=e+(m<<2)|0;switch(k[o>>2]|0){case 653:{q=n+1|0;break}case 971:{q=n+2|0;break}case 972:{q=n+3|0;break}default:{s=o;break b}}m=m+1|0;if((m|0)>=(d|0)){t=q;break a}else n=q}n=h+56|0;m=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;u=Q;v=o;vva(n);Qb(v|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,m|0);o=B;B=0;do if(o&1){w=Rb()|0;x=Q;y=w}else{k[m>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);Yua(w);Ava(m);x=A;y=z;break}Yua(f);B=0;z=Ia(40,h|0,69672,18)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[s>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,i|0,69562,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,70850,29);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(i);E=z;F=A;break}B=0;wa(510,l|0,m|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,i|0,j|0,2956,l|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(l);G=z;H=A;I=J}Yua(j);Yua(i);if(I){E=G;F=H}else{K=G;L=H;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[h>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(w);Ava(m);vva(n);Qb(L|0)}while(0);u=x;v=y;vva(n);Qb(v|0)}else t=0;while(0);v=b+4|0;y=ma(k[v>>2]|0,k[b>>2]|0)|0;x=Rqa(y>>>0>536870911?-1:y<<3)|0;u=b+12|0;if((y|0)>0){L=k[u>>2]|0;h=0;do{p[x+(h<<3)>>3]=+p[L+(h<<3)>>3];h=h+1|0}while((h|0)<(y|0))}_o(0,g,c,d,e);e=k[g>>2]|0;ZX(e,t,t,1,x,k[b>>2]|0,k[v>>2]|0,0,e,t,t,0,k[u>>2]|0,0)|0;if(!e){Tqa(x);r=a;return}Tqa(e);Tqa(x);r=a;return}function Hq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+20>>2]|0;Gq(0,b,d,Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0,c);return}function Iq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,70888,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71026,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,177,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Jq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,70888,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71005,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,178,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Kq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,70888,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,70976,28);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,179,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Lq(a){a=a|0;gh(a);k[a+12>>2]=279;return}function Mq(a){a=a|0;jh(a);return}function Nq(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;e=k[a>>2]|0;h=a+4|0;if(e>>>0<(k[h>>2]|0)>>>0)i=e;else return;do{e=k[i>>2]|0;Uc[k[(k[e>>2]|0)+424>>2]&63](e,b,c,d,f,g);i=i+4|0}while(i>>>0<(k[h>>2]|0)>>>0);return}function Oq(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;c=a+4|0;if(b>>>0<(k[c>>2]|0)>>>0)d=b;else return;do{b=k[d>>2]|0;Ec[k[(k[b>>2]|0)+416>>2]&1023](b);d=d+4|0}while(d>>>0<(k[c>>2]|0)>>>0);return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=0;if((th(a)|0)>0){e=0;f=0;while(1){g=qh(a,f)|0;h=Hc[k[(k[g>>2]|0)+164>>2]&511](g)|0;if((h|0)>(e|0)){k[c>>2]=h;i=h}else i=e;f=f+1|0;if((f|0)>=(th(a)|0))break;else e=i}}fZ(c,d,1,4,1,uY()|0)|0;r=b;return k[d>>2]|0}function Qq(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+4|0;d=b;e=th(a)|0;k[c>>2]=e;fZ(c,d,1,4,4,uY()|0)|0;r=b;return k[d>>2]|0}function Rq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((th(a)|0)>0)d=0;else return;do{Sp(qh(a,d)|0,b,c);d=d+1|0}while((d|0)<(th(a)|0));return}function Sq(a){a=a|0;var b=0;k[a>>2]=-9999;b=a+4|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;return}function Tq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+4|0;c=k[b>>2]|0;do if(c){d=k[a>>2]|0;if((d|0)>0){e=d;d=c;f=0;while(1){g=k[d+(f<<2)>>2]|0;if(!g){h=d;i=e}else{yla(g);Sqa(g);h=k[b>>2]|0;i=k[a>>2]|0}f=f+1|0;if((f|0)>=(i|0)){j=h;break}else{e=i;d=h}}if(!j)break;else l=j}else l=c;Tqa(l)}while(0);l=k[a+8>>2]|0;if(l){yla(l);Sqa(l)}l=k[a+12>>2]|0;if(l){yla(l);Sqa(l)}l=k[a+16>>2]|0;if(l){yla(l);Sqa(l)}l=k[a+20>>2]|0;if(!l)return;yla(l);Sqa(l);return}function Uq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;f=r;r=r+16|0;g=f+4|0;h=f;k[g>>2]=(k[e+56>>2]|0)+1;k[h>>2]=c;i=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){j=ma(c+-1|0,d)|0;c=k[e+72>>2]|0;e=0;do{k[i+(e<<2)>>2]=k[c+(e+j<<2)>>2];e=e+1|0}while((e|0)!=(d|0))}k[a>>2]=b;e=Rqa(b>>>0>1073741823?-1:b<<2)|0;b=a+4|0;k[b>>2]=e;e=Qqa(16)|0;B=0;eb(509,e|0,i|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;j=Q;Sqa(e);l=j;m=d;Qb(m|0)}k[a+8>>2]=e;e=Qqa(16)|0;B=0;eb(509,e|0,h|0,1);h=B;B=0;if(h&1){h=Rb()|0;d=Q;Sqa(e);l=d;m=h;Qb(m|0)}k[a+12>>2]=e;e=Qqa(16)|0;B=0;eb(509,e|0,g|0,1);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Sqa(e);l=h;m=g;Qb(m|0)}k[a+16>>2]=e;k[a+20>>2]=0;e=k[a>>2]|0;if((e|0)>0)n=0;else{Tqa(i);r=f;return}do{k[(k[b>>2]|0)+(n<<2)>>2]=0;n=n+1|0}while((n|0)<(e|0));Tqa(i);r=f;return}function Vq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;if(!(d&-3)){n=(k[a+20>>2]|0)==0&1;o=k[a+4>>2]|0;if(o){p=k[a>>2]|0;q=Rqa(p)|0;if((p|0)>0){s=0;do{i[q+s>>0]=(k[o+(s<<2)>>2]|0)==0&1;s=s+1|0}while((s|0)<(p|0));t=n;u=0;v=q}else{t=n;u=0;v=q}}else{t=n;u=1;v=0}}else{t=1;u=1;v=0}a:do switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=57;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;q=l[a>>0]|l[a+1>>0]<<8|l[a+2>>0]<<16|l[a+3>>0]<<24;i[n>>0]=q;i[n+1>>0]=q>>8;i[n+2>>0]=q>>16;i[n+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;i[q>>0]=t;q=(k[b>>2]|0)+1|0;k[b>>2]=q;i[q>>0]=u;q=(k[b>>2]|0)+1|0;k[b>>2]=q;n=(v|0)==0;i[q>>0]=n&1;q=(k[b>>2]|0)+1|0;k[b>>2]=q;if(n)w=0;else{TEa(q|0,v|0,k[a>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+(k[a>>2]|0);w=v}break}case 2:{q=(k[c>>2]|0)+11|0;k[c>>2]=q;if(!v)w=0;else{k[c>>2]=q+(k[a>>2]|0);w=v}break}case 1:{q=(k[b>>2]|0)+4|0;k[b>>2]=q;n=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[a>>0]=n;i[a+1>>0]=n>>8;i[a+2>>0]=n>>16;i[a+3>>0]=n>>24;q=k[b>>2]|0;p=q+4|0;k[b>>2]=p;s=i[p>>0]|0;p=q+5|0;k[b>>2]=p;o=(s&1)==0;s=i[p>>0]|0;p=q+6|0;k[b>>2]=p;x=(s&1)==0;s=i[p>>0]|0;p=q+7|0;k[b>>2]=p;if(!(s&1)){s=Rqa(n)|0;TEa(s|0,p|0,n|0)|0;k[b>>2]=p+n;if(x){y=s;z=36}else{A=s;z=37}}else if(x){y=v;z=36}else{A=v;z=37}if((z|0)==36){x=Rqa(n>>>0>1073741823?-1:n<<2)|0;k[a+4>>2]=x;C=y}else if((z|0)==37){k[a+4>>2]=0;C=A}x=Qqa(16)|0;B=0;va(489,x|0);n=B;B=0;if(n&1){n=Rb()|0;s=Q;Sqa(x);D=s;E=n;Qb(E|0)}k[a+8>>2]=x;x=Qqa(16)|0;B=0;va(489,x|0);n=B;B=0;if(n&1){n=Rb()|0;s=Q;Sqa(x);D=s;E=n;Qb(E|0)}k[a+12>>2]=x;x=Qqa(16)|0;B=0;va(489,x|0);n=B;B=0;if(n&1){n=Rb()|0;s=Q;Sqa(x);D=s;E=n;Qb(E|0)}k[a+16>>2]=x;do if(o){x=Qqa(16)|0;B=0;va(489,x|0);n=B;B=0;if(!(n&1)){k[a+20>>2]=x;break}n=Rb()|0;s=Q;Sqa(x);D=s;E=n;Qb(E|0)}else k[a+20>>2]=0;while(0);o=a+4|0;if((k[o>>2]|0)!=0?(n=k[a>>2]|0,(n|0)>0):0){s=n;n=0;while(1){if(!(i[C+n>>0]|0)){x=Qqa(16)|0;B=0;va(489,x|0);p=B;B=0;if(p&1){F=x;break}k[(k[o>>2]|0)+(n<<2)>>2]=x;G=k[a>>2]|0}else{k[(k[o>>2]|0)+(n<<2)>>2]=0;G=s}n=n+1|0;if((n|0)>=(G|0)){w=C;break a}else s=G}s=Rb()|0;n=Q;Sqa(F);D=n;E=s;Qb(E|0)}else w=C;break}default:{s=g+56|0;n=g+4|0;k[g>>2]=27524;k[s>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;H=Q;I=o;vva(s);Qb(I|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[s>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){x=Rb()|0;J=Q;K=x}else{k[n>>2]=27560;x=g+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(f);Yua(x);Ava(n);J=q;K=p;break}Yua(f);B=0;p=Ia(40,g|0,143951,43)|0;q=B;B=0;b:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,h|0,71041,79);M=B;B=0;do if(!(M&1)){B=0;eb(502,j|0,149525,8);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(h);P=O;R=N;break}B=0;wa(510,m|0,n|0);N=B;B=0;if(N&1){N=Rb()|0;S=Q;T=N;U=1}else{B=0;ua(163,L|0,h|0,j|0,99,m|0);N=B;B=0;if(N&1)V=1;else{B=0;eb(503,L|0,1240,229);B=0;V=0}N=Rb()|0;O=Q;Yua(m);S=O;T=N;U=V}Yua(j);Yua(h);if(U){P=S;R=T}else{W=S;X=T;break b}}else{N=Rb()|0;P=Q;R=N}while(0);zb(L|0);W=P;X=R}else z=21;while(0);if((z|0)==21){p=Rb()|0;W=Q;X=p}k[g>>2]=27468;k[s>>2]=27488;k[n>>2]=27560;Yua(x);Ava(n);vva(s);D=W;E=X;Qb(E|0)}while(0);H=J;I=K;vva(s);Qb(I|0)}}while(0);I=a+4|0;K=k[I>>2]|0;c:do if((K|0)!=0?(J=k[a>>2]|0,(J|0)>0):0){H=K;E=J;J=0;while(1){X=k[H+(J<<2)>>2]|0;if(!X)Y=E;else{Cla(X,b,c,d);Y=k[a>>2]|0}X=J+1|0;if((X|0)>=(Y|0))break c;H=k[I>>2]|0;E=Y;J=X}}while(0);Cla(k[a+8>>2]|0,b,c,d);Cla(k[a+12>>2]|0,b,c,d);Cla(k[a+16>>2]|0,b,c,d);Y=k[a+20>>2]|0;if(Y)Cla(Y,b,c,d);if(!w){r=e;return}Tqa(w);r=e;return}function Wq(a,b){a=a|0;b=b|0;var c=0;c=Qqa(16)|0;B=0;eb(509,c|0,b|0,2);b=B;B=0;if(b&1){b=Rb()|0;Sqa(c);Qb(b|0)}else{k[a+20>>2]=c;return}}function Xq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+4|0;if(!(k[e>>2]|0))return;a=Qqa(16)|0;B=0;eb(509,a|0,b|0,c|0);c=B;B=0;if(c&1){c=Rb()|0;Sqa(a);Qb(c|0)}k[(k[e>>2]|0)+(d<<2)>>2]=a;return}function Yq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;k[b>>2]=k[a>>2];k[f>>2]=c;k[f+4>>2]=d;d=k[a>>2]|0;c=Rqa(d>>>0>1073741823?-1:d<<2)|0;g=b+4|0;k[g>>2]=c;if((d|0)>0){d=a+4|0;c=0;do{h=k[(k[d>>2]|0)+(c<<2)>>2]|0;if((h|0)!=0?(Hla(h)|0)!=0:0){h=Ila(k[(k[d>>2]|0)+(c<<2)>>2]|0,f,2)|0;k[(k[g>>2]|0)+(c<<2)>>2]=h}else k[(k[g>>2]|0)+(c<<2)>>2]=0;c=c+1|0}while((c|0)<(k[a>>2]|0))}k[b+12>>2]=0;c=Ila(k[a+8>>2]|0,f,2)|0;k[b+8>>2]=c;c=Bla(k[a+16>>2]|0)|0;k[b+16>>2]=c;r=e;return}function Zq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=r;r=r+16|0;g=f;k[g>>2]=c;k[g+4>>2]=d;k[g+8>>2]=e;k[b>>2]=k[a>>2];e=k[a>>2]|0;d=Rqa(e>>>0>1073741823?-1:e<<2)|0;c=b+4|0;k[c>>2]=d;if((e|0)>0){e=a+4|0;d=0;do{h=k[(k[e>>2]|0)+(d<<2)>>2]|0;if((h|0)!=0?(Hla(h)|0)!=0:0){h=Ila(k[(k[e>>2]|0)+(d<<2)>>2]|0,g,3)|0;k[(k[c>>2]|0)+(d<<2)>>2]=h}else k[(k[c>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)<(k[a>>2]|0))}k[b+12>>2]=0;d=Ila(k[a+8>>2]|0,g,3)|0;k[b+8>>2]=d;d=Bla(k[a+16>>2]|0)|0;k[b+16>>2]=d;r=f;return}function _q(a){a=a|0;k[a>>2]=29448;k[a+4>>2]=30012;k[a+36>>2]=0;Tq(a+48|0);Qo(a);return}function $q(a){a=a|0;k[a>>2]=29448;k[a+4>>2]=30012;k[a+36>>2]=0;Tq(a+48|0);Qo(a);Sqa(a);return}function ar(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=Qqa(72)|0;B=0;va(461,b|0);c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c}else{c=b+48|0;B=0;va(462,c|0);f=B;B=0;do if(!(f&1)){B=0;g=B;B=0;if(g&1){g=Rb()|0;h=Q;Tq(c);i=h;j=g;break}k[b>>2]=29448;k[b+4>>2]=30012;g=k[a+48>>2]|0;h=(g|0)>0;if(h){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;k[b+40>>2]=l;m=k[a+40>>2]|0;n=0;do{k[l+(n<<2)>>2]=k[m+(n<<2)>>2];n=n+1|0}while((n|0)!=(g|0))}else k[b+40>>2]=0;k[b+44>>2]=k[a+44>>2];k[c>>2]=g;n=a+52|0;m=k[n>>2]|0;a:do if(m){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;o=b+52|0;k[o>>2]=l;if(h){l=g;p=m;q=0;while(1){r=k[p+(q<<2)>>2]|0;if(!r){k[(k[o>>2]|0)+(q<<2)>>2]=0;s=l}else{t=Bla(r)|0;k[(k[o>>2]|0)+(q<<2)>>2]=t;s=k[c>>2]|0}t=q+1|0;if((t|0)>=(s|0))break a;l=s;p=k[n>>2]|0;q=t}}}else k[b+52>>2]=0;while(0);n=a+56|0;m=Bla(k[n>>2]|0)|0;k[b+56>>2]=m;m=a+60|0;g=Bla(k[m>>2]|0)|0;k[b+60>>2]=g;g=a+64|0;h=Bla(k[g>>2]|0)|0;k[b+64>>2]=h;k[b+68>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];h=k[a+16>>2]|0;do if(!h){q=Qqa(36)|0;B=0;va(486,q|0);p=B;B=0;if(!(p&1)){k[b+16>>2]=q;break}p=Rb()|0;l=Q;Sqa(q);u=l;v=p;Qb(v|0)}else{p=hh(h)|0;k[b+16>>2]=p}while(0);k[b+36>>2]=k[a+36>>2];h=k[a+20>>2]|0;if(!h){k[b+20>>2]=0;w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;return b|0}else{p=Rqa(12)|0;k[b+20>>2]=p;k[p>>2]=k[h>>2];k[p+4>>2]=k[h+4>>2];k[p+8>>2]=k[h+8>>2];w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;return b|0}}else{h=Rb()|0;i=Q;j=h}while(0);Qo(b);d=i;e=j}Sqa(b);u=d;v=e;Qb(v|0);return 0}function br(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 0:{m=k[b>>2]|0;i[m>>0]=107;i[m+1>>0]=2;i[m+2>>0]=0;i[m+3>>0]=0;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+4;break}case 1:{k[b>>2]=(k[b>>2]|0)+4;break}default:{m=g+56|0;n=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=g+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);Yua(s);Ava(n);t=w;u=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,71126,71);w=B;B=0;do if(!(w&1)){B=0;eb(502,j|0,149525,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,l|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,j|0,111,l|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(l);C=y;D=x;E=F}Yua(j);Yua(h);if(E){z=C;A=D}else{G=C;H=D;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}w=Rb()|0;G=Q;H=w;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}}q=a+48|0;Vq(q,b,c,d);dq(a,b,c,d,k[q>>2]|0);q=Gla(k[a+56>>2]|0)|0;k[a+24>>2]=q;q=Fla(k[a+60>>2]|0)|0;k[a+28>>2]=q;q=Fla(k[a+64>>2]|0)|0;k[a+32>>2]=q;r=e;return}function cr(a){a=a|0;var b=0,c=0,d=0.0,e=0.0,f=0.0;b=r;r=r+48|0;c=b;Ko(c,k[a+24>>2]|0,2,0);d=+p[c+24>>3]-+p[c>>3];e=+p[c+32>>3]-+p[c+8>>3];f=+aa(+(d*d+e*e));r=b;return +f}function dr(a){a=a|0;return k[a+44>>2]|0}function er(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;xp(a,f,d);d=+p[f+8>>3]>=0.0;f=Rqa(24)|0;a=c+((d?3:0)<<3)|0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];k[f+12>>2]=k[a+12>>2];k[f+16>>2]=k[a+16>>2];k[f+20>>2]=k[a+20>>2];k[b>>2]=f;r=e;return}function fr(a){a=a|0;return zt(a,k[a+44>>2]|0)|0}function gr(a){a=a|0;return 2}function hr(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;xp(a,c,206);if(!($p(a)|0)){d=0;r=b;return d|0}d=((+p[c+8>>3]<0.0&1)+(+p[c>>3]<0.0&1)|0)==1;r=b;return d|0}function ir(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Dt(a,b,c,d);return}function jr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;p[b>>3]=1.0;return}function kr(a){a=a|0;var b=0;a=Qqa(40)|0;B=0;va(490,a|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function lr(a,b){a=a|0;b=b|0;a=Qqa(40)|0;B=0;wa(515,a|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function mr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c>>3];if(i==+p[b>>3]){c=Qqa(40)|0;B=0;ta(55,c|0,-1.0);j=B;B=0;if(!(j&1)){l=c;r=d;return l|0}j=Rb()|0;m=Q;Sqa(c);n=m;o=j;Qb(o|0)}if(i==+p[b+24>>3]){b=Qqa(40)|0;B=0;ta(55,b|0,1.0);j=B;B=0;if(!(j&1)){l=b;r=d;return l|0}l=Rb()|0;d=Q;Sqa(b);n=d;o=l;Qb(o|0)}l=e+56|0;d=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;q=Q;s=b;vva(l);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,d|0);b=B;B=0;do if(b&1){j=Rb()|0;t=Q;u=j}else{k[d>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,d|0,a|0);m=B;B=0;if(m&1){m=Rb()|0;c=Q;Yua(a);Yua(j);Ava(d);t=c;u=m;break}Yua(a);B=0;m=Ia(40,e|0,71198,36)|0;c=B;B=0;a:do if(!(c&1)?(B=0,Xa(239,m|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,f|0,71126,71);w=B;B=0;do if(!(w&1)){B=0;eb(502,g|0,75231,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(f);z=y;A=x;break}B=0;wa(510,h|0,d|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,f|0,g|0,239,h|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(h);C=y;D=x;E=F}Yua(g);Yua(f);if(E){z=C;A=D}else{G=C;H=D;break a}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A}else I=22;while(0);if((I|0)==22){m=Rb()|0;G=Q;H=m}k[e>>2]=27468;k[l>>2]=27488;k[d>>2]=27560;Yua(j);Ava(d);vva(l);n=G;o=H;Qb(o|0)}while(0);q=t;s=u;vva(l);Qb(s|0);return 0}function nr(a,b,c){a=a|0;b=b|0;c=c|0;Ct(a,b,c,k[a+44>>2]|0);return}function or(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;At(a,b,c,d,k[a+44>>2]|0);return}function pr(a,b,c){a=a|0;b=b|0;c=c|0;Ct(a,b,c,738);return}function qr(a,b,c){a=a|0;b=b|0;c=c|0;Ct(a,b,c,742);return}function rr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Rqa(48)|0;Ko(d,k[a+24>>2]|0,2,0);p[b>>3]=+p[c>>3]>+p[d>>3]?1.0:-1.0;Tqa(d);return}function sr(a){a=a|0;return 619}function tr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74181,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ur(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71735,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function vr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,74214,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function wr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73975,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,46,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function xr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74235,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function yr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73945,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,49,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function zr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75312,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Ar(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73925,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Br(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,71725,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,52,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function Cr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74254,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Dr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74301,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Er(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74333,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Fr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71712,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Gr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103020,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,58,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Hr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73906,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ir(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73890,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Jr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71697,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,61,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Kr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,73874,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,62,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Lr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74430,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function Mr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,65,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Nr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,143640,15)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,71257,83);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75292,19);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,66,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Or(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,75268,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,67,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function Pr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73843,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Qr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74526,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,69,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Rr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,80838,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Sr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73815,27);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Tr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73799,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Ur(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,74539,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,75,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function Vr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71670,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,77,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Wr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71644,25);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,78,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Xr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103033,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,79,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Yr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103046,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,80,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Zr(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103054,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,81,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function _r(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103064,24);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,82,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function $r(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;a=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,71257,83);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,74573,18);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,83,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function as(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74624,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,84,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function bs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74656,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,85,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function cs(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,71257,83);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,74706,10);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,86,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ds(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74747,38);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,89,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function es(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74717,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,88,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function fs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75251,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,91,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function gs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73776,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,93,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function hs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,72510,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,94,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function is(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,72519,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,95,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function js(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73761,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,96,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function ks(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71620,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,98,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ls(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73737,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,99,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ms(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71597,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,101,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ns(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,98621,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,102,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function os(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99206,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,103,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function ps(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=r;r=r+192|0;a=f+176|0;g=f+40|0;h=f+24|0;i=f+12|0;j=f;f=g+56|0;l=g+4|0;k[g>>2]=27524;k[f>>2]=27544;B=0;wa(508,g+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(f);Qb(o|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[f>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,l|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);Yua(p);Ava(l);q=u;s=t;break}Yua(a);B=0;t=Ia(40,g|0,149721,19)|0;u=B;B=0;a:do if(!(u&1)?(B=0,Xa(239,t|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,71257,83);w=B;B=0;do if(!(w&1)){B=0;eb(502,i|0,99206,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,j|0,l|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,i|0,104,j|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(j);C=y;D=x;E=F}Yua(i);Yua(h);if(E){z=C;A=D}else{G=C;H=D;break a}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A}else I=16;while(0);if((I|0)==16){t=Rb()|0;G=Q;H=t}k[g>>2]=27468;k[f>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(f);Qb(H|0)}while(0);n=q;o=s;vva(f);Qb(o|0);return +(0.0)}function qs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73723,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,106,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function rs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99229,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,107,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return +(0.0)}function ss(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75240,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,108,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function ts(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,75231,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,112,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0);return 0}function us(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;b=f+40|0;a=f+24|0;g=f+12|0;h=f;f=b+56|0;i=b+4|0;k[b>>2]=27524;k[f>>2]=27544;B=0;wa(508,b+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=b+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[b+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,b|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,a|0,71257,83);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,75231,8);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(a);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,a|0,g|0,113,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(a);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[b>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0);return 0}function vs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71584,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,114,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function ws(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73710,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,115,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function xs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71572,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,116,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function ys(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71538,33);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,120,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function zs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73680,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,121,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function As(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71515,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,122,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Bs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73635,27);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,124,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Cs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71492,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,127,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ds(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71471,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,126,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Es(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73607,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,117,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function Fs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71460,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,128,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Gs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71450,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,130,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Hs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71428,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,131,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Is(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71406,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,132,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Js(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73586,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,133,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Ks(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75650,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,134,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Ls(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71391,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,135,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ms(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74864,29);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,136,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Ns(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71380,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,137,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Os(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74894,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,138,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Ps(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,71356,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,139,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function Qs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73562,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,140,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Rs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74921,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,141,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Ss(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,72600,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,142,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Ts(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+192|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;a=h+56|0;m=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=h+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,m|0,g|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);Yua(q);Ava(m);s=v;t=u;break}Yua(g);B=0;u=Ia(40,h|0,149721,19)|0;v=B;B=0;a:do if(!(v&1)?(B=0,Xa(239,u|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,i|0,71257,83);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,73539,22);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(i);A=z;C=y;break}B=0;wa(510,l|0,m|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,i|0,j|0,143,l|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(l);D=z;E=y;F=G}Yua(j);Yua(i);if(F){A=D;C=E}else{H=D;I=E;break a}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C}else J=16;while(0);if((J|0)==16){u=Rb()|0;H=Q;I=u}k[h>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(I|0)}while(0);o=s;p=t;vva(a);Qb(p|0);return +(0.0)}function Us(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,93069,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,144,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Vs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,93088,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,145,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Ws(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,92779,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,146,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Xs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99320,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,147,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Ys(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75211,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,148,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Zs(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73529,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,149,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function _s(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103089,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,150,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function $s(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103106,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,151,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function at(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,103123,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,152,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function bt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,74939,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,153,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function ct(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73496,32);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,154,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function dt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73464,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,155,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function et(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73437,26);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,156,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function ft(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,73411,25);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,157,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function gt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,71341,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,158,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ht(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75691,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,159,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function it(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73392,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,160,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function jt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,73369,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,161,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function kt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,99724,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,162,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function lt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74963,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,163,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function mt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,75023,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,167,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function nt(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,71257,83);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75190,20);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,171,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function ot(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,71257,83);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75166,23);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,172,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function pt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,174,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function qt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75143,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,173,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function rt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75133,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,164,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function st(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,87,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function tt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,71257,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74786,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,90,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ut(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;tt(a+-4|0,b,c,d)}function vt(a,b,c){a=a|0;b=b|0;c=c|0;st(a+-4|0,b,c)}function wt(a){a=a|0;return}function xt(a){a=a|0;return}function yt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0;a=r;r=r+32|0;g=a+16|0;h=a;i=zt(0,f)|0;j=zt(0,f)|0;Et(0,g,e,f);k=1.0/(+$(+(+p[d+24>>3]-+p[d>>3]))*.5);if((j|0)>0){d=0;do{p[h+(d<<3)>>3]=k*+p[g+(d<<3)>>3];d=d+1|0}while((d|0)!=(j|0))}if((i|0)>0){l=0.0;m=0}else{n=0.0;p[b>>3]=n;r=a;return}while(1){k=l+ +p[h+(m<<3)>>3]*+p[c+(m<<3)>>3];m=m+1|0;if((m|0)==(i|0)){n=k;break}else l=k}p[b>>3]=n;r=a;return}function zt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 738:{h=2;r=a;return h|0}case 739:{h=2;r=a;return h|0}case 736:{h=1;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,71744,74);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75442,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,197,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function At(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0;a=r;r=r+16|0;f=a;g=zt(0,e)|0;Et(0,f,d,e);h=1.0/(+$(+(+p[c+24>>3]-+p[c>>3]))*.5);if((g|0)>0)i=0;else{r=a;return}do{p[b+(i<<3)>>3]=h*+p[f+(i<<3)>>3];i=i+1|0}while((i|0)!=(g|0));r=a;return}function Bt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0.0,j=0.0,k=0.0;a=r;r=r+16|0;f=a;g=zt(0,e)|0;Ct(0,f,d,e);if((g|0)>0){h=0;i=0.0}else{j=0.0;p[b>>3]=j;r=a;return}while(1){k=i+ +p[f+(h<<3)>>3]*+p[c+(h<<3)>>3];h=h+1|0;if((h|0)==(g|0)){j=k;break}else i=k}p[b>>3]=j;r=a;return}function Ct(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{p[b>>3]=1.0;r=a;return}case 739:case 738:{j=c+32|0;p[b>>3]=(1.0-+p[j>>3])*.5;p[b+8>>3]=(+p[j>>3]+1.0)*.5;r=a;return}case 742:{j=c+32|0;l=+p[j>>3];p[b>>3]=l*(l+-1.0)*.5;l=+p[j>>3];p[b+8>>3]=l*(l+1.0)*.5;l=+p[j>>3];p[b+16>>3]=(1.0-l)*(l+1.0);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;n=j;vva(a);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){c=Rb()|0;o=Q;q=c}else{k[b>>2]=27560;c=f+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);Yua(c);Ava(b);o=t;q=s;break}Yua(e);B=0;s=Ia(40,f|0,132447,13)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,d|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,71744,74);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,75456,17);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(g);w=s;x=t;break}B=0;wa(510,i|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,g|0,h|0,134,i|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(i);y=s;z=t;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(a);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(a);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(c);Ava(b);vva(a);Qb(E|0)}while(0);m=o;n=q;vva(a);Qb(n|0)}}}function Dt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+$(+(+p[c+24>>3]-+p[c>>3]))*.5;p[b>>3]=i;if(!(i<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(d);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(a);Yua(m);Ava(b);n=s;o=q;break}Yua(a);B=0;q=Ia(40,e|0,75474,30)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,71744,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,75505,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(f);v=u;w=t;break}B=0;wa(510,h|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,f|0,g|0,99,h|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(h);x=u;y=t;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(d);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(d);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(d);Qb(D|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Et(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{p[b>>3]=0.0;r=a;return}case 739:case 738:{p[b>>3]=-.5;p[b+8>>3]=.5;r=a;return}case 742:{j=c+32|0;l=+p[j>>3];p[b>>3]=l*.5+(l+-1.0)*.5;l=+p[j>>3];p[b+8>>3]=l*.5+(l+1.0)*.5;p[b+16>>3]=+p[j>>3]*-2.0;r=a;return}default:{a=f+56|0;j=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(a);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,j|0);b=B;B=0;do if(b&1){c=Rb()|0;o=Q;q=c}else{k[j>>2]=27560;c=f+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);Yua(c);Ava(j);o=t;q=s;break}Yua(e);B=0;s=Ia(40,f|0,132447,13)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,d|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,71744,74);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,75528,37);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(g);w=s;x=t;break}B=0;wa(510,i|0,j|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,g|0,h|0,186,i|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(i);y=s;z=t;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(c);Ava(j);vva(a);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(c);Ava(j);vva(a);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(c);Ava(j);vva(a);Qb(E|0)}while(0);m=o;n=q;vva(a);Qb(n|0)}}}function Ft(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;Po(a);g=a+48|0;B=0;ua(167,g|0,f|0,d+1|0,3,e|0);e=B;B=0;if(e&1){e=Rb()|0;h=Q;i=e;Qo(a);Qb(i|0)}B=0;e=B;B=0;if(e&1){e=Rb()|0;j=Q;l=e}else{k[a>>2]=30040;k[a+4>>2]=30604;k[a+8>>2]=b;k[a+12>>2]=c;k[a+36>>2]=0;B=0;c=ya(423,36)|0;b=B;B=0;do if(!(b&1)){B=0;va(486,c|0);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Sqa(c);m=d;n=e;break}k[a+16>>2]=c;e=a+20|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;if((f|0)<=0){k[a+40>>2]=0;return}B=0;e=ya(422,(f>>>0>1073741823?-1:f<<2)|0)|0;d=B;B=0;if(!(d&1)){k[a+40>>2]=e;WEa(e|0,0,f<<2|0)|0;return}else o=10}else o=10;while(0);if((o|0)==10){o=Rb()|0;m=Q;n=o}j=m;l=n}Tq(g);h=j;i=l;Qo(a);Qb(i|0)}function Gt(a){a=a|0;k[a>>2]=30040;k[a+4>>2]=30604;k[a+36>>2]=0;Tq(a+48|0);Qo(a);return}function Ht(a){a=a|0;k[a>>2]=30040;k[a+4>>2]=30604;k[a+36>>2]=0;Tq(a+48|0);Qo(a);Sqa(a);return}function It(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=Qqa(72)|0;B=0;va(461,b|0);c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c}else{c=b+48|0;B=0;va(462,c|0);f=B;B=0;do if(!(f&1)){B=0;g=B;B=0;if(g&1){g=Rb()|0;h=Q;Tq(c);i=h;j=g;break}k[b>>2]=30040;k[b+4>>2]=30604;g=k[a+48>>2]|0;h=(g|0)>0;if(h){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;k[b+40>>2]=l;m=k[a+40>>2]|0;n=0;do{k[l+(n<<2)>>2]=k[m+(n<<2)>>2];n=n+1|0}while((n|0)!=(g|0))}else k[b+40>>2]=0;k[b+44>>2]=k[a+44>>2];k[c>>2]=g;n=a+52|0;m=k[n>>2]|0;a:do if(m){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;o=b+52|0;k[o>>2]=l;if(h){l=g;p=m;q=0;while(1){r=k[p+(q<<2)>>2]|0;if(!r){k[(k[o>>2]|0)+(q<<2)>>2]=0;s=l}else{t=Bla(r)|0;k[(k[o>>2]|0)+(q<<2)>>2]=t;s=k[c>>2]|0}t=q+1|0;if((t|0)>=(s|0))break a;l=s;p=k[n>>2]|0;q=t}}}else k[b+52>>2]=0;while(0);n=a+56|0;m=Bla(k[n>>2]|0)|0;k[b+56>>2]=m;m=a+60|0;g=Bla(k[m>>2]|0)|0;k[b+60>>2]=g;g=a+64|0;h=Bla(k[g>>2]|0)|0;k[b+64>>2]=h;k[b+68>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];h=k[a+16>>2]|0;do if(!h){q=Qqa(36)|0;B=0;va(486,q|0);p=B;B=0;if(!(p&1)){k[b+16>>2]=q;break}p=Rb()|0;l=Q;Sqa(q);u=l;v=p;Qb(v|0)}else{p=hh(h)|0;k[b+16>>2]=p}while(0);k[b+36>>2]=k[a+36>>2];h=k[a+20>>2]|0;if(!h){k[b+20>>2]=0;w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;return b|0}else{p=Rqa(12)|0;k[b+20>>2]=p;k[p>>2]=k[h>>2];k[p+4>>2]=k[h+4>>2];k[p+8>>2]=k[h+8>>2];w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;return b|0}}else{h=Rb()|0;i=Q;j=h}while(0);Qo(b);d=i;e=j}Sqa(b);u=d;v=e;Qb(v|0);return 0}function Jt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 0:{m=k[b>>2]|0;i[m>>0]=109;i[m+1>>0]=2;i[m+2>>0]=0;i[m+3>>0]=0;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+4;break}case 1:{k[b>>2]=(k[b>>2]|0)+4;break}default:{m=g+56|0;n=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=g+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);Yua(s);Ava(n);t=w;u=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,71825,72);w=B;B=0;do if(!(w&1)){B=0;eb(502,j|0,149525,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,l|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,j|0,118,l|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(l);C=y;D=x;E=F}Yua(j);Yua(h);if(E){z=C;A=D}else{G=C;H=D;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}w=Rb()|0;G=Q;H=w;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}}q=a+48|0;Vq(q,b,c,d);dq(a,b,c,d,k[q>>2]|0);q=Gla(k[a+56>>2]|0)|0;k[a+24>>2]=q;q=Fla(k[a+60>>2]|0)|0;k[a+28>>2]=q;q=Fla(k[a+64>>2]|0)|0;k[a+32>>2]=q;r=e;return}function Kt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;e=r;r=r+384|0;f=e;g=e+380|0;h=e+376|0;i=e+360|0;j=e+224|0;l=e+364|0;m=e+208|0;n=e+60|0;o=e+72|0;q=e+48|0;s=e+36|0;t=e+24|0;cO(k[a+36>>2]|0,g,298);switch(k[g>>2]|0){case 300:{u=k[a+16>>2]|0;v=Qqa(16)|0;B=0;ib(284,v|0,b|0,c|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Sqa(v);y=w;z=x;Qb(y|0)}else{mC(u,v)|0;r=e;return}break}case 301:{if((d|0)==738){k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[f+16>>2]=0;k[f+20>>2]=0;k[i>>2]=0;d=Lt(a)|0;Aw(a,h,i,d,Hc[k[(k[a>>2]|0)+112>>2]&511](a)|0);d=k[h>>2]|0;if((d|0)>0){h=k[i>>2]|0;v=0;do{p[f+(k[h+(v<<2)>>2]<<3)>>3]=+p[c+(v<<3)>>3];v=v+1|0}while((v|0)<(d|0))}d=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(284,a|0,b|0,f|0,738);b=B;B=0;if(b&1){b=Rb()|0;v=Q;Sqa(a);y=b;z=v;Qb(y|0)}mC(d,a)|0;a=k[i>>2]|0;if(a)Tqa(a);r=e;return}e=j+56|0;a=j+4|0;k[j>>2]=27524;k[e>>2]=27544;B=0;wa(508,j+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;A=Q;C=i;vva(e);Qb(C|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[e>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){d=Rb()|0;D=Q;E=d}else{k[a>>2]=27560;d=j+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;b=Q;Yua(f);Yua(d);Ava(a);D=b;E=v;break}Yua(f);B=0;v=Ia(40,j|0,149721,19)|0;b=B;B=0;a:do if(!(b&1)?(B=0,Xa(239,v|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,l|0,71825,72);h=B;B=0;do if(!(h&1)){B=0;eb(502,m|0,74181,13);u=B;B=0;if(u&1){u=Rb()|0;x=Q;Yua(l);F=x;G=u;break}B=0;wa(510,n|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;H=u;I=Q;J=1}else{B=0;ua(163,c|0,l|0,m|0,157,n|0);u=B;B=0;if(u&1)K=1;else{B=0;eb(503,c|0,1240,229);B=0;K=0}u=Rb()|0;x=Q;Yua(n);H=u;I=x;J=K}Yua(m);Yua(l);if(J){F=I;G=H}else{L=I;M=H;break a}}else{x=Rb()|0;F=Q;G=x}while(0);zb(c|0);L=F;M=G}else N=29;while(0);if((N|0)==29){v=Rb()|0;L=Q;M=v}k[j>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(d);Ava(a);vva(e);y=M;z=L;Qb(y|0)}while(0);A=D;C=E;vva(e);Qb(C|0);break}default:{C=o+56|0;e=o+4|0;k[o>>2]=27524;k[C>>2]=27544;B=0;wa(508,o+56|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;O=Q;P=E;vva(C);Qb(P|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[C>>2]=27488;B=0;va(448,e|0);E=B;B=0;do if(E&1){D=Rb()|0;R=Q;S=D}else{k[e>>2]=27560;D=o+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);A=B;B=0;if(A&1){A=Rb()|0;L=Q;Yua(f);Yua(D);Ava(e);R=L;S=A;break}Yua(f);B=0;A=Ia(40,o|0,144639,5)|0;L=B;B=0;b:do if((((!(L&1)?(B=0,M=ya(427,k[g>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(M)|0,B=0,j=Ia(40,A|0,M|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,j|0,146481,18)|0,j=B,B=0,!(j&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,q|0,71825,72);j=B;B=0;do if(!(j&1)){B=0;eb(502,s|0,74181,13);M=B;B=0;if(M&1){M=Rb()|0;G=Q;Yua(q);T=G;U=M;break}B=0;wa(510,t|0,e|0);M=B;B=0;if(M&1){M=Rb()|0;V=1;W=M;X=Q}else{B=0;ua(163,a|0,q|0,s|0,160,t|0);M=B;B=0;if(M&1)Y=1;else{B=0;eb(503,a|0,1240,229);B=0;Y=0}M=Rb()|0;G=Q;Yua(t);V=Y;W=M;X=G}Yua(s);Yua(q);if(V){T=X;U=W}else{Z=W;_=X;break b}}else{G=Rb()|0;T=Q;U=G}while(0);zb(a|0);Z=U;_=T}else N=55;while(0);if((N|0)==55){A=Rb()|0;Z=A;_=Q}k[o>>2]=27468;k[C>>2]=27488;k[e>>2]=27560;Yua(D);Ava(e);vva(C);y=Z;z=_;Qb(y|0)}while(0);O=R;P=S;vva(C);Qb(P|0)}}}function Lt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+368|0;c=b+352|0;d=b;e=b+216|0;f=b+200|0;g=b+64|0;h=b+48|0;i=b+36|0;j=b+24|0;xp(a,d,287);a=d+8|0;l=+p[a>>3]==1.0;m=d+16|0;n=+p[m>>3];if(l&n==1.0){o=0;r=b;return o|0}q=+p[d>>3];if(n==1.0&q==1.0){o=1;r=b;return o|0}if(!(q!=1.0|l^1)){o=2;r=b;return o|0}o=e+56|0;b=e+4|0;k[e>>2]=27524;k[o>>2]=27544;B=0;wa(508,e+56|0,b|0);l=B;B=0;if(l&1){l=Rb()|0;s=Q;t=l;vva(o);Qb(t|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[o>>2]=27488;B=0;va(448,b|0);l=B;B=0;do if(l&1){u=Rb()|0;v=Q;w=u}else{k[b>>2]=27560;u=e+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(b);v=y;w=x;break}Yua(c);B=0;x=Ia(40,e|0,71898,25)|0;y=B;B=0;do if((((((!(y&1)?(B=0,z=Sa(1,x|0,+(+p[d>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,z|0,149175,1)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Sa(1,A|0,+(+p[a>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,z|0,149175,1)|0,z=B,B=0,!(z&1)):0)?(B=0,Sa(1,A|0,+(+p[m>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,wa(510,f|0,b|0),A=B,B=0,!(A&1)):0){B=0;ya(424,f|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(f);C=z;D=A;break}Yua(f);k[e>>2]=27468;k[o>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(o);A=g+56|0;z=g+4|0;k[g>>2]=27524;k[A>>2]=27544;B=0;wa(508,g+56|0,z|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(A);Qb(G|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[A>>2]=27488;B=0;va(448,z|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[z>>2]=27560;H=g+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(z);I=L;J=K;break}Yua(c);B=0;K=Ia(40,g|0,71924,32)|0;L=B;B=0;a:do if(L&1)M=36;else{B=0;Xa(239,K|0,0)|0;N=B;B=0;if(N&1){M=36;break}N=Ab(20)|0;B=0;eb(502,h|0,71825,72);O=B;B=0;do if(!(O&1)){B=0;eb(502,i|0,71957,15);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(h);S=R;T=P;break}B=0;wa(510,j|0,z|0);P=B;B=0;if(P&1){P=Rb()|0;U=1;V=Q;W=P}else{B=0;ua(163,N|0,h|0,i|0,747,j|0);P=B;B=0;if(P&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}P=Rb()|0;R=Q;Yua(j);U=X;V=R;W=P}Yua(i);Yua(h);if(U){S=V;T=W}else{Y=V;Z=W;break a}}else{P=Rb()|0;S=Q;T=P}while(0);zb(N|0);Y=S;Z=T}while(0);if((M|0)==36){K=Rb()|0;Y=Q;Z=K}k[g>>2]=27468;k[A>>2]=27488;k[z>>2]=27560;Yua(H);Ava(z);vva(A);_=Y;$=Z;Qb($|0)}while(0);F=I;G=J;vva(A);Qb(G|0)}else M=33;while(0);if((M|0)==33){x=Rb()|0;C=Q;D=x}k[e>>2]=27468;k[o>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(o);_=C;$=D;Qb($|0)}while(0);s=v;t=w;vva(o);Qb(t|0);return 0}function Mt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(284,a|0,b|0,c|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(a);Qb(d|0)}else{mC(e,a)|0;return}}function Nt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0;f=r;r=r+112|0;g=f;h=f+96|0;i=f+84|0;j=f+72|0;Ko(g,k[a+24>>2]|0,3,0);l=+p[g>>3];m=+p[g+8>>3];n=+p[g+24>>3];o=+p[g+32>>3];q=+p[g+48>>3];s=+p[g+56>>3];Ip(a,i);Hp(a,j);a=~~+p[e+(k[i>>2]<<3)>>3];k[h>>2]=a;t=+p[d+(k[j>>2]<<3)>>3]*.3333333333333333+0.0;g=~~+p[e+(k[i+4>>2]<<3)>>3];k[h+4>>2]=g;u=t+ +p[d+(k[j+4>>2]<<3)>>3]*.3333333333333333;v=~~+p[e+(k[i+8>>2]<<3)>>3];k[h+8>>2]=v;t=(m*q+(l*o+(n*s-o*q)-m*n)-l*s)*.5;i=c+4|0;s=t*(u+ +p[d+(k[j+8>>2]<<3)>>3]*.3333333333333333);j=b+4|0;if(k[b>>2]|0){d=k[k[j>>2]>>2]|0;Jc[k[(k[d>>2]|0)+20>>2]&1](d,a,s,1)}if(k[c>>2]|0){d=k[k[i>>2]>>2]|0;Jc[k[(k[d>>2]|0)+20>>2]&1](d,a,t,1)}if((g|0)!=(a|0)){if(k[b>>2]|0){d=k[k[j>>2]>>2]|0;Jc[k[(k[d>>2]|0)+20>>2]&1](d,g,s,1)}if(k[c>>2]|0){d=k[k[i>>2]>>2]|0;Jc[k[(k[d>>2]|0)+20>>2]&1](d,g,t,1)}}if((v|0)==(a|0)){r=f;return}else w=1;while(1){if((w|0)>=2)break;if((v|0)==(k[h+(w<<2)>>2]|0)){x=17;break}else w=w+1|0}if((x|0)==17){r=f;return}if(k[b>>2]|0){b=k[k[j>>2]>>2]|0;Jc[k[(k[b>>2]|0)+20>>2]&1](b,v,s,1)}if(!(k[c>>2]|0)){r=f;return}c=k[k[i>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,v,t,1);r=f;return}function Ot(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0;b=r;r=r+192|0;c=b+104|0;d=b+96|0;e=b+88|0;f=b+80|0;g=b+72|0;h=b+48|0;i=b+24|0;j=b;Ko(b+112|0,k[a+24>>2]|0,3,0);l=a+16|0;a=oC(k[l>>2]|0,674)|0;m=oC(k[l>>2]|0,677)|0;n=oC(k[l>>2]|0,262)|0;o=oC(k[l>>2]|0,263)|0;q=oC(k[l>>2]|0,255)|0;s=Qqa(64)|0;B=0;va(491,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Sqa(s);v=u;w=t;Qb(w|0)}t=0;do{Fc[k[(k[s>>2]|0)+28>>2]&1023](s,t);nd[k[(k[a>>2]|0)+48>>2]&1023](a,c,s);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,s);x=+p[c>>3];y=+p[d>>3];nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,s);nd[k[(k[o>>2]|0)+48>>2]&1023](o,g,s);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,s);z=+p[f>>3]*+p[e>>3]*+p[g>>3];A=z<0.0?0.0:z;p[j+(t<<3)>>3]=A;z=+aa(+(x*x+y*y))+1.0e-14;p[h+(t<<3)>>3]=+p[c>>3]*A/z;p[i+(t<<3)>>3]=A*+p[d>>3]/z;t=t+1|0}while((t|0)!=3);t=k[l>>2]|0;d=Qqa(16)|0;B=0;ib(284,d|0,258,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;c=Q;Sqa(d);v=c;w=h;Qb(w|0)}mC(t,d)|0;d=k[l>>2]|0;t=Qqa(16)|0;B=0;ib(284,t|0,259,i|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(t);v=h;w=i;Qb(w|0)}mC(d,t)|0;t=k[l>>2]|0;l=Qqa(16)|0;B=0;ib(284,l|0,248,j|0,738);j=B;B=0;if(!(j&1)){mC(t,l)|0;Ec[k[(k[s>>2]|0)+4>>2]&1023](s);r=b;return}b=Rb()|0;s=Q;Sqa(l);v=s;w=b;Qb(w|0)}function Pt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0;b=r;r=r+224|0;c=b+152|0;d=b+128|0;e=b+104|0;f=b+80|0;g=b+56|0;h=b+48|0;i=b+40|0;j=b+32|0;l=b+24|0;m=b+16|0;n=b+8|0;o=b;Ko(c,k[a+24>>2]|0,3,0);q=a+16|0;s=oC(k[q>>2]|0,674)|0;t=oC(k[q>>2]|0,677)|0;u=oC(k[q>>2]|0,928)|0;v=+Dp(a,215);w=+Dp(a,217);x=Qqa(64)|0;B=0;va(491,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Sqa(x);A=z;C=y;Qb(C|0)}y=d+16|0;z=d+8|0;D=v*1.7320508075688772;v=1.0/(w*2.0);E=0;do{Fc[k[(k[x>>2]|0)+28>>2]&1023](x,E);nd[k[(k[s>>2]|0)+48>>2]&1023](s,m,x);nd[k[(k[t>>2]|0)+48>>2]&1023](t,n,x);nd[k[(k[u>>2]|0)+48>>2]&1023](u,o,x);Xo(a,d,c,x,s,t);cY(h,i,j,l,+p[d>>3],+p[y>>3],+p[z>>3]);w=+LY(+p[h>>3],0.0);p[h>>3]=w;w=+LY(+p[i>>3],0.0);p[i>>3]=w;F=+p[h>>3];G=D*+ba(+((w*w+F*F)*.5),+v);F=+p[o>>3]<0.0?2.0e5:1.0e6;w=G*+p[m>>3]/F;p[e+(E<<3)>>3]=w;H=G*+p[n>>3]/F;p[f+(E<<3)>>3]=H;F=+aa(+(w*w+H*H));p[g+(E<<3)>>3]=F;E=E+1|0}while((E|0)!=3);E=k[q>>2]|0;n=Qqa(16)|0;B=0;ib(284,n|0,258,e|0,738);e=B;B=0;if(e&1){e=Rb()|0;m=Q;Sqa(n);A=m;C=e;Qb(C|0)}mC(E,n)|0;n=k[q>>2]|0;E=Qqa(16)|0;B=0;ib(284,E|0,259,f|0,738);f=B;B=0;if(f&1){f=Rb()|0;e=Q;Sqa(E);A=e;C=f;Qb(C|0)}mC(n,E)|0;E=k[q>>2]|0;q=Qqa(16)|0;B=0;ib(284,q|0,248,g|0,738);g=B;B=0;if(!(g&1)){mC(E,q)|0;Ec[k[(k[x>>2]|0)+4>>2]&1023](x);r=b;return}b=Rb()|0;x=Q;Sqa(q);A=x;C=b;Qb(C|0)}function Qt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,g=0.0,h=0.0,j=0.0,l=0,m=0,n=0;c=r;r=r+80|0;d=c+72|0;e=c;if(!(ed[k[(k[a>>2]|0)+256>>2]&511](a,206)|0)){r=c;return}k[d>>2]=0;Ko(e,k[a+24>>2]|0,3,0);rd[k[(k[a>>2]|0)+520>>2]&511](a,d,e,206);e=k[d>>2]|0;if(e){f=+p[e>>3];g=+p[e+24>>3];h=+p[e+8>>3];j=+p[e+32>>3];e=Qqa(24)|0;B=0;a=ya(428,b|0)|0;l=B;B=0;if(l&1){m=Rb()|0;n=Q;Sqa(e);Qb(m|0)}k[e>>2]=27652;k[e+4>>2]=a+1;k[e+8>>2]=2;i[e+20>>0]=0;B=0;a=ya(422,16)|0;l=B;B=0;if(l&1){m=Rb()|0;n=Q;Sqa(e);Qb(m|0)}k[e+12>>2]=a;p[a>>3]=f;p[a+8>>3]=g;B=0;a=ya(422,16)|0;l=B;B=0;if(l&1){m=Rb()|0;n=Q;Sqa(e);Qb(m|0)}k[e+16>>2]=a;p[a>>3]=h;p[a+8>>3]=j;ih(b,e)|0;e=k[d>>2]|0;if(e)Tqa(e)}r=c;return}function Rt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0,i=0.0,j=0.0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0;d=r;r=r+96|0;e=d+72|0;f=d;Ko(f,k[a+24>>2]|0,3,0);xp(a,e,206);Sp(a,206,653);if((c|0)>0){g=0;do{h=+p[f+(g*24|0)>>3];i=+p[f+(g*24|0)+8>>3];j=1.e+50;l=0;while(1){m=l<<2;n=+p[b+((m|2)<<3)>>3];o=+p[b+(m<<3)>>3];q=n-o;s=+p[b+((m|3)<<3)>>3];t=+p[b+((m|1)<<3)>>3];u=s-t;v=q*q+u*u;w=h-o;if(v==0.0){x=i-t;y=w*w+x*x;z=y<j?y:j}else{y=i-t;x=(w*q+y*u)/v;do if(!(x<0.0))if(x>1.0){v=h-n;A=i-s;C=v*v+A*A;break}else{A=h-(o+q*x);v=i-(t+u*x);C=A*A+v*v;break}else C=w*w+y*y;while(0);z=C<j?C:j}l=l+1|0;if((l|0)==(c|0)){D=z;break}else j=z}j=+aa(+D);i=j>1.0e4?1.0e4:j;l=e+(g<<3)|0;p[l>>3]=+p[l>>3]>0.0?i:-i;g=g+1|0}while((g|0)!=3)}else{p[e>>3]=+p[e>>3]>0.0?1.0e4:-1.0e4;g=e+8|0;p[g>>3]=+p[g>>3]>0.0?1.0e4:-1.0e4;g=e+16|0;p[g>>3]=+p[g>>3]>0.0?1.0e4:-1.0e4}g=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(284,a|0,206,e|0,738);e=B;B=0;if(e&1){e=Rb()|0;Sqa(a);Qb(e|0)}else{mC(g,a)|0;r=d;return}}function St(a){a=a|0;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;b=r;r=r+80|0;c=b;Ko(c,k[a+24>>2]|0,3,0);d=+p[c>>3];e=+p[c+8>>3];f=+p[c+24>>3];g=+p[c+32>>3];h=+p[c+48>>3];i=+p[c+56>>3];j=+aa(+((e*h+(d*g+(f*i-g*h)-e*f)-d*i)*.5*2.0));r=b;return +j}function Tt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,71973,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,71825,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,74235,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,466,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Ut(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+480|0;c=b+456|0;d=b+200|0;e=b+192|0;f=b+168|0;g=b+144|0;h=b+120|0;i=b+96|0;j=b+72|0;l=b+48|0;m=b+24|0;n=b;o=b+448|0;q=b+312|0;s=b+296|0;t=b+284|0;u=b+272|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;k[i+20>>2]=0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[l+20>>2]=0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;v=a+16|0;kC(k[v>>2]|0,o,533);Ko(d,k[a+24>>2]|0,3,0);cp(a,b+452|0,298);w=oC(k[v>>2]|0,674)|0;x=oC(k[v>>2]|0,677)|0;y=Qqa(64)|0;B=0;va(491,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Sqa(y);C=A;D=z;Qb(D|0)}z=a+28|0;A=f+8|0;E=f+16|0;F=0;a:while(1){Fc[k[(k[y>>2]|0)+28>>2]&1023](y,F);Xo(a,f,d,y,w,x);switch(k[o>>2]|0){case 536:{G=k[z>>2]|0;ad[k[(k[G>>2]|0)+128>>2]&63](G,e,2,d,y,w,x);break}case 540:{G=k[z>>2]|0;ad[k[(k[G>>2]|0)+116>>2]&63](G,e,2,d,y,w,x);break}case 542:{G=k[z>>2]|0;Tc[k[(k[G>>2]|0)+108>>2]&15](G,e,2,d,y,w,x,0);break}default:break a}H=+p[e>>3]*2.0;I=H*+p[f>>3];p[g+(F<<3)>>3]=I;J=H*+p[A>>3];p[h+(F<<3)>>3]=J;K=H*+p[E>>3];p[j+(F<<3)>>3]=K;H=+aa(+(K*K*2.0+(I*I+J*J)))*.7071067811865475;p[n+(F<<3)>>3]=H;F=F+1|0;if((F|0)>=3){L=3;break}}if((L|0)==3){F=k[v>>2]|0;E=Qqa(16)|0;B=0;ib(284,E|0,716,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;A=Q;Sqa(E);C=A;D=g;Qb(D|0)}mC(F,E)|0;E=k[v>>2]|0;F=Qqa(16)|0;B=0;ib(284,F|0,717,j|0,738);j=B;B=0;if(j&1){j=Rb()|0;g=Q;Sqa(F);C=g;D=j;Qb(D|0)}mC(E,F)|0;F=k[v>>2]|0;E=Qqa(16)|0;B=0;ib(284,E|0,718,l|0,738);l=B;B=0;if(l&1){l=Rb()|0;j=Q;Sqa(E);C=j;D=l;Qb(D|0)}mC(F,E)|0;E=k[v>>2]|0;F=Qqa(16)|0;B=0;ib(284,F|0,719,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;l=Q;Sqa(F);C=l;D=h;Qb(D|0)}mC(E,F)|0;F=k[v>>2]|0;E=Qqa(16)|0;B=0;ib(284,E|0,720,m|0,738);m=B;B=0;if(m&1){m=Rb()|0;h=Q;Sqa(E);C=h;D=m;Qb(D|0)}mC(F,E)|0;E=k[v>>2]|0;F=Qqa(16)|0;B=0;ib(284,F|0,721,i|0,738);i=B;B=0;if(i&1){i=Rb()|0;m=Q;Sqa(F);C=m;D=i;Qb(D|0)}mC(E,F)|0;F=k[v>>2]|0;v=Qqa(16)|0;B=0;ib(284,v|0,722,n|0,738);n=B;B=0;if(!(n&1)){mC(F,v)|0;Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=b;return}b=Rb()|0;y=Q;Sqa(v);C=y;D=b;Qb(D|0)}b=q+56|0;y=q+4|0;k[q>>2]=27524;k[b>>2]=27544;B=0;wa(508,q+56|0,y|0);v=B;B=0;if(v&1){v=Rb()|0;M=Q;N=v;vva(b);Qb(N|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[b>>2]=27488;B=0;va(448,y|0);v=B;B=0;do if(v&1){F=Rb()|0;O=Q;P=F}else{k[y>>2]=27560;F=q+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;E=Q;Yua(c);Yua(F);Ava(y);O=E;P=n;break}Yua(c);B=0;n=Ia(40,q|0,134695,17)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,n|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,s|0,71825,72);m=B;B=0;do if(!(m&1)){B=0;eb(502,t|0,73945,29);h=B;B=0;if(h&1){h=Rb()|0;l=Q;Yua(s);R=l;S=h;break}B=0;wa(510,u|0,y|0);h=B;B=0;if(h&1){h=Rb()|0;T=Q;U=h;V=1}else{B=0;ua(163,i|0,s|0,t|0,514,u|0);h=B;B=0;if(h&1)W=1;else{B=0;eb(503,i|0,1240,229);B=0;W=0}h=Rb()|0;l=Q;Yua(u);T=l;U=h;V=W}Yua(t);Yua(s);if(V){R=T;S=U}else{X=T;Y=U;break b}}else{h=Rb()|0;R=Q;S=h}while(0);zb(i|0);X=R;Y=S}else L=24;while(0);if((L|0)==24){n=Rb()|0;X=Q;Y=n}k[q>>2]=27468;k[b>>2]=27488;k[y>>2]=27560;Yua(F);Ava(y);vva(b);C=X;D=Y;Qb(D|0)}while(0);M=O;N=P;vva(b);Qb(N|0)}function Vt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+288|0;c=b+80|0;d=b+284|0;e=b+280|0;f=b+72|0;g=b+64|0;h=b+40|0;i=b+16|0;j=b;l=b+276|0;m=b+128|0;n=b+264|0;o=b+116|0;q=b+104|0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;s=k[a+16>>2]|0;t=Qqa(16)|0;B=0;ib(284,t|0,706,c|0,738);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Sqa(t);w=u;x=v;Qb(w|0)}else{mC(s,t)|0;r=b;return}}k[d>>2]=0;k[e>>2]=0;Uo(a,d);Fc[k[(k[a>>2]|0)+188>>2]&1023](a,e);cp(a,l,298);if((k[l>>2]|0)!=300){t=a+16|0;s=oC(k[t>>2]|0,653)|0;v=oC(k[t>>2]|0,674)|0;u=oC(k[t>>2]|0,677)|0;y=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;z=a+28|0;A=i+8|0;C=i+16|0;D=j+8|0;E=0;do{nd[k[(k[y>>2]|0)+32>>2]&1023](y,738,E);Xo(a,i,k[d>>2]|0,y,v,u);F=k[z>>2]|0;Tc[k[(k[F>>2]|0)+108>>2]&15](F,g,2,k[d>>2]|0,y,v,u,0);nd[k[(k[s>>2]|0)+48>>2]&1023](s,f,y);G=+p[g>>3]*2.0;H=+p[f>>3];I=G*+p[i>>3]-H;J=G*+p[A>>3]-H;H=G*+p[C>>3];nd[k[(k[a>>2]|0)+380>>2]&1023](a,j,k[e>>2]|0);G=+p[j>>3];K=+p[D>>3];p[h+(E<<3)>>3]=G*(I*G)+H*2.0*G*K+K*(J*K);E=E+1|0}while((E|0)!=3);E=k[t>>2]|0;t=Qqa(16)|0;B=0;ib(284,t|0,706,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;D=Q;Sqa(t);w=h;x=D;Qb(w|0)}mC(E,t)|0;t=k[d>>2]|0;if(t)Tqa(t);k[d>>2]=0;d=k[e>>2]|0;if(d)Tqa(d);k[e>>2]=0;if(y)Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=b;return}b=m+56|0;y=m+4|0;k[m>>2]=27524;k[b>>2]=27544;B=0;wa(508,m+56|0,y|0);e=B;B=0;if(e&1){e=Rb()|0;L=Q;M=e;vva(b);Qb(M|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[b>>2]=27488;B=0;va(448,y|0);e=B;B=0;do if(e&1){d=Rb()|0;N=Q;O=d}else{k[y>>2]=27560;d=m+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;E=Q;Yua(c);Yua(d);Ava(y);N=E;O=t;break}Yua(c);B=0;t=Ia(40,m|0,71993,57)|0;E=B;B=0;a:do if((((!(E&1)?(B=0,D=ya(427,k[l>>2]|0)|0,h=B,B=0,!(h&1)):0)?(h=Lta(D)|0,B=0,j=Ia(40,t|0,D|0,h|0)|0,h=B,B=0,!(h&1)):0)?(B=0,h=Ia(40,j|0,72051,52)|0,j=B,B=0,!(j&1)):0)?(B=0,Xa(239,h|0,0)|0,h=B,B=0,!(h&1)):0){h=Ab(20)|0;B=0;eb(502,n|0,71825,72);j=B;B=0;do if(!(j&1)){B=0;eb(502,o|0,75312,14);D=B;B=0;if(D&1){D=Rb()|0;a=Q;Yua(n);P=D;R=a;break}B=0;wa(510,q|0,y|0);a=B;B=0;if(a&1){a=Rb()|0;S=a;T=Q;U=1}else{B=0;ua(163,h|0,n|0,o|0,560,q|0);a=B;B=0;if(a&1)V=1;else{B=0;eb(503,h|0,1240,229);B=0;V=0}a=Rb()|0;D=Q;Yua(q);S=a;T=D;U=V}Yua(o);Yua(n);if(U){P=S;R=T}else{W=S;X=T;break a}}else{D=Rb()|0;P=D;R=Q}while(0);zb(h|0);W=P;X=R}else Y=24;while(0);if((Y|0)==24){t=Rb()|0;W=t;X=Q}k[m>>2]=27468;k[b>>2]=27488;k[y>>2]=27560;Yua(d);Ava(y);vva(b);w=W;x=X;Qb(w|0)}while(0);L=N;M=O;vva(b);Qb(M|0)}function Wt(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;b=r;r=r+448|0;c=b+436|0;d=b+184|0;e=b+176|0;f=b+168|0;g=b+144|0;h=b+120|0;i=b+96|0;j=b+72|0;l=b+48|0;m=b+24|0;n=b;o=b+432|0;q=b+296|0;s=b+280|0;t=b+268|0;u=b+256|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[j+16>>2]=0;k[j+20>>2]=0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[n+16>>2]=0;k[n+20>>2]=0;Ko(d,k[a+24>>2]|0,3,0);cp(a,o,298);if((k[o>>2]|0)!=300){v=a+16|0;w=oC(k[v>>2]|0,653)|0;x=oC(k[v>>2]|0,674)|0;y=oC(k[v>>2]|0,677)|0;z=Qqa(64)|0;B=0;va(491,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Sqa(z);D=A;E=C;Qb(D|0)}C=a+28|0;A=g+8|0;F=g+16|0;Fc[k[(k[z>>2]|0)+28>>2]&1023](z,0);Xo(a,g,d,z,x,y);G=k[C>>2]|0;ad[k[(k[G>>2]|0)+128>>2]&63](G,f,2,d,z,x,y);nd[k[(k[w>>2]|0)+48>>2]&1023](w,e,z);H=+p[f>>3]*2.0;I=+p[e>>3];p[h>>3]=H*+p[g>>3]-I;p[i>>3]=H*+p[A>>3]-I;p[l>>3]=H*+p[F>>3];Fc[k[(k[z>>2]|0)+28>>2]&1023](z,1);Xo(a,g,d,z,x,y);G=k[C>>2]|0;ad[k[(k[G>>2]|0)+128>>2]&63](G,f,2,d,z,x,y);nd[k[(k[w>>2]|0)+48>>2]&1023](w,e,z);H=+p[f>>3]*2.0;I=+p[e>>3];p[h+8>>3]=H*+p[g>>3]-I;p[i+8>>3]=H*+p[A>>3]-I;p[l+8>>3]=H*+p[F>>3];Fc[k[(k[z>>2]|0)+28>>2]&1023](z,2);Xo(a,g,d,z,x,y);a=k[C>>2]|0;ad[k[(k[a>>2]|0)+128>>2]&63](a,f,2,d,z,x,y);nd[k[(k[w>>2]|0)+48>>2]&1023](w,e,z);H=+p[f>>3]*2.0;I=+p[e>>3];p[h+16>>3]=H*+p[g>>3]-I;p[i+16>>3]=H*+p[A>>3]-I;p[l+16>>3]=H*+p[F>>3];F=k[v>>2]|0;A=Qqa(16)|0;B=0;ib(284,A|0,708,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;g=Q;Sqa(A);D=h;E=g;Qb(D|0)}mC(F,A)|0;A=k[v>>2]|0;F=Qqa(16)|0;B=0;ib(284,F|0,709,l|0,738);l=B;B=0;if(l&1){l=Rb()|0;g=Q;Sqa(F);D=l;E=g;Qb(D|0)}mC(A,F)|0;F=k[v>>2]|0;A=Qqa(16)|0;B=0;ib(284,A|0,710,m|0,738);m=B;B=0;if(m&1){m=Rb()|0;g=Q;Sqa(A);D=m;E=g;Qb(D|0)}mC(F,A)|0;A=k[v>>2]|0;F=Qqa(16)|0;B=0;ib(284,F|0,711,i|0,738);i=B;B=0;if(i&1){i=Rb()|0;g=Q;Sqa(F);D=i;E=g;Qb(D|0)}mC(A,F)|0;F=k[v>>2]|0;A=Qqa(16)|0;B=0;ib(284,A|0,712,n|0,738);n=B;B=0;if(n&1){n=Rb()|0;g=Q;Sqa(A);D=n;E=g;Qb(D|0)}mC(F,A)|0;A=k[v>>2]|0;v=Qqa(16)|0;B=0;ib(284,v|0,713,j|0,738);j=B;B=0;if(!(j&1)){mC(A,v)|0;Ec[k[(k[z>>2]|0)+4>>2]&1023](z);r=b;return}b=Rb()|0;z=Q;Sqa(v);D=b;E=z;Qb(D|0)}z=q+56|0;b=q+4|0;k[q>>2]=27524;k[z>>2]=27544;B=0;wa(508,q+56|0,b|0);v=B;B=0;if(v&1){v=Rb()|0;J=Q;K=v;vva(z);Qb(K|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[z>>2]=27488;B=0;va(448,b|0);v=B;B=0;do if(v&1){A=Rb()|0;L=Q;M=A}else{k[b>>2]=27560;A=q+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;F=Q;Yua(c);Yua(A);Ava(b);L=F;M=j;break}Yua(c);B=0;j=Ia(40,q|0,71993,57)|0;F=B;B=0;a:do if((((!(F&1)?(B=0,g=ya(427,k[o>>2]|0)|0,n=B,B=0,!(n&1)):0)?(n=Lta(g)|0,B=0,i=Ia(40,j|0,g|0,n|0)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Ia(40,i|0,72051,52)|0,i=B,B=0,!(i&1)):0)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,s|0,71825,72);i=B;B=0;do if(!(i&1)){B=0;eb(502,t|0,73925,19);g=B;B=0;if(g&1){g=Rb()|0;m=Q;Yua(s);N=g;O=m;break}B=0;wa(510,u|0,b|0);m=B;B=0;if(m&1){m=Rb()|0;P=m;R=Q;S=1}else{B=0;ua(163,n|0,s|0,t|0,616,u|0);m=B;B=0;if(m&1)T=1;else{B=0;eb(503,n|0,1240,229);B=0;T=0}m=Rb()|0;g=Q;Yua(u);P=m;R=g;S=T}Yua(t);Yua(s);if(S){N=P;O=R}else{U=P;V=R;break a}}else{g=Rb()|0;N=g;O=Q}while(0);zb(n|0);U=N;V=O}else W=20;while(0);if((W|0)==20){j=Rb()|0;U=j;V=Q}k[q>>2]=27468;k[z>>2]=27488;k[b>>2]=27560;Yua(A);Ava(b);vva(z);D=U;E=V;Qb(D|0)}while(0);J=L;K=M;vva(z);Qb(K|0)}function Xt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;c=r;r=r+16|0;b=c;cO(g,b,482);h=k[a+40>>2]|0;if(h)k[a+44>>2]=k[h+(k[b>>2]<<2)>>2];h=a+52|0;i=k[h>>2]|0;do if(i){j=i+(k[b>>2]<<2)|0;l=k[j>>2]|0;if(!l){k[j>>2]=0;break}else{Ela(l,d);break}}else k[h>>2]=0;while(0);d=a+56|0;Ela(k[d>>2]|0,e);e=a+60|0;Ela(k[e>>2]|0,f);i=a+64|0;Ela(k[i>>2]|0,f);f=k[h>>2]|0;if((f|0)!=0?(h=k[f+(k[b>>2]<<2)>>2]|0,(h|0)!=0):0){b=Gla(h)|0;k[a+20>>2]=b}else k[a+20>>2]=0;b=Gla(k[d>>2]|0)|0;k[a+24>>2]=b;b=Fla(k[e>>2]|0)|0;k[a+28>>2]=b;b=Fla(k[i>>2]|0)|0;k[a+32>>2]=b;k[a+36>>2]=g;wC(k[a+16>>2]|0,g);r=c;return}function Yt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+400|0;f=e+388|0;g=e+376|0;h=e;i=e+240|0;j=e+224|0;l=e+72|0;m=e+60|0;n=e+88|0;o=e+48|0;q=e+36|0;s=e+24|0;t=oC(k[a+16>>2]|0,c)|0;if(!t){u=i+56|0;v=i+4|0;k[i>>2]=27524;k[u>>2]=27544;B=0;wa(508,i+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=i+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(v);A=E;C=D;break}Yua(f);B=0;D=Ia(40,i|0,109148,6)|0;E=B;B=0;a:do if((((!(E&1)?(B=0,F=ya(427,c|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,D|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,114879,10)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,j|0,71825,72);H=B;B=0;do if(!(H&1)){B=0;eb(502,l|0,74254,23);F=B;B=0;if(F&1){F=Rb()|0;I=Q;Yua(j);J=F;K=I;break}B=0;wa(510,m|0,v|0);I=B;B=0;if(I&1){I=Rb()|0;L=Q;M=I;N=1}else{B=0;ua(163,G|0,j|0,l|0,691,m|0);I=B;B=0;if(I&1)O=1;else{B=0;eb(503,G|0,1240,229);B=0;O=0}I=Rb()|0;F=Q;Yua(m);L=F;M=I;N=O}Yua(l);Yua(j);if(N){J=M;K=L}else{P=M;R=L;break a}}else{I=Rb()|0;J=I;K=Q}while(0);zb(G|0);P=J;R=K}else S=20;while(0);if((S|0)==20){D=Rb()|0;P=D;R=Q}k[i>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);T=R;U=P;Qb(U|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}if((Hc[k[(k[t>>2]|0)+20>>2]&511](t)|0)==559){Mp(a,g,d,0);p[h>>3]=+p[b+(k[g>>2]<<3)>>3];p[h+8>>3]=+p[b+(k[g+4>>2]<<3)>>3];p[h+16>>3]=+p[b+(k[g+8>>2]<<3)>>3];g=Qqa(16)|0;B=0;ib(284,g|0,941,h|0,738);h=B;B=0;if(!(h&1)){q$(t,g);r=e;return}e=Rb()|0;t=Q;Sqa(g);T=t;U=e;Qb(U|0)}e=n+56|0;t=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,t|0);g=B;B=0;if(g&1){g=Rb()|0;V=Q;W=g;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,t|0);g=B;B=0;do if(g&1){h=Rb()|0;X=Q;Y=h}else{k[t>>2]=27560;h=n+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;d=Q;Yua(f);Yua(h);Ava(t);X=d;Y=b;break}Yua(f);B=0;b=Ia(40,n|0,109148,6)|0;d=B;B=0;b:do if((((!(d&1)?(B=0,a=ya(427,c|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(a)|0,B=0,u=Ia(40,b|0,a|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,u|0,74278,22)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,o|0,71825,72);u=B;B=0;do if(!(u&1)){B=0;eb(502,q|0,74254,23);a=B;B=0;if(a&1){a=Rb()|0;C=Q;Yua(o);Z=a;_=C;break}B=0;wa(510,s|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;$=1;aa=Q;ba=C}else{B=0;ua(163,y|0,o|0,q|0,692,s|0);C=B;B=0;if(C&1)ca=1;else{B=0;eb(503,y|0,1240,229);B=0;ca=0}C=Rb()|0;a=Q;Yua(s);$=ca;aa=a;ba=C}Yua(q);Yua(o);if($){Z=ba;_=aa}else{da=aa;ea=ba;break b}}else{C=Rb()|0;Z=C;_=Q}while(0);zb(y|0);da=_;ea=Z}else S=47;while(0);if((S|0)==47){b=Rb()|0;da=Q;ea=b}k[n>>2]=27468;k[e>>2]=27488;k[t>>2]=27560;Yua(h);Ava(t);vva(e);T=da;U=ea;Qb(U|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}function Zt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;e=r;r=r+448|0;f=e+424|0;g=e+288|0;h=e+276|0;i=e+264|0;j=e+112|0;l=e+128|0;m=e+88|0;n=e+76|0;o=e+64|0;q=e+100|0;s=e+40|0;t=e+16|0;u=e+8|0;v=e;w=oC(k[a+16>>2]|0,d)|0;if(!w){x=g+56|0;y=g+4|0;k[g>>2]=27524;k[x>>2]=27544;B=0;wa(508,g+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=g+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,y|0,f|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(f);Yua(D);Ava(y);E=H;F=G;break}Yua(f);B=0;G=Ia(40,g|0,109148,6)|0;H=B;B=0;a:do if((((!(H&1)?(B=0,I=ya(427,d|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,G|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,114879,10)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,h|0,71825,72);K=B;B=0;do if(!(K&1)){B=0;eb(502,i|0,74301,16);I=B;B=0;if(I&1){I=Rb()|0;L=Q;Yua(h);M=L;N=I;break}B=0;wa(510,j|0,y|0);I=B;B=0;if(I&1){I=Rb()|0;O=I;P=Q;R=1}else{B=0;ua(163,J|0,h|0,i|0,704,j|0);I=B;B=0;if(I&1)S=1;else{B=0;eb(503,J|0,1240,229);B=0;S=0}I=Rb()|0;L=Q;Yua(j);O=I;P=L;R=S}Yua(i);Yua(h);if(R){M=P;N=O}else{T=O;U=P;break a}}else{L=Rb()|0;M=Q;N=L}while(0);zb(J|0);T=N;U=M}else V=20;while(0);if((V|0)==20){G=Rb()|0;T=G;U=Q}k[g>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);W=T;X=U;Qb(W|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}if((Hc[k[(k[w>>2]|0)+20>>2]&511](w)|0)==559){Jp(a,q);Ip(a,f);a=Qqa(64)|0;B=0;va(491,a|0);C=B;B=0;if(C&1){C=Rb()|0;x=Q;Sqa(a);W=C;X=x;Qb(W|0)}Fc[k[(k[a>>2]|0)+28>>2]&1023](a,0);nd[k[(k[w>>2]|0)+48>>2]&1023](w,u,a);C$(w,v,a);Y=+(k[q>>2]|0);p[s>>3]=+p[u>>3]/Y;p[t>>3]=+p[v>>3]/Y;Fc[k[(k[a>>2]|0)+28>>2]&1023](a,1);nd[k[(k[w>>2]|0)+48>>2]&1023](w,u,a);C$(w,v,a);Y=+(k[q+4>>2]|0);p[s+8>>3]=+p[u>>3]/Y;p[t+8>>3]=+p[v>>3]/Y;Fc[k[(k[a>>2]|0)+28>>2]&1023](a,2);nd[k[(k[w>>2]|0)+48>>2]&1023](w,u,a);C$(w,v,a);Y=+(k[q+8>>2]|0);p[s+16>>3]=+p[u>>3]/Y;p[t+16>>3]=+p[v>>3]/Y;Ec[k[(k[a>>2]|0)+4>>2]&1023](a);if(k[b>>2]|0){a=k[k[b+4>>2]>>2]|0;Dc[k[(k[a>>2]|0)+16>>2]&255](a,3,f,s,1)}if(!(k[c>>2]|0)){r=e;return}s=k[k[c+4>>2]>>2]|0;Dc[k[(k[s>>2]|0)+16>>2]&255](s,3,f,t,1);r=e;return}e=l+56|0;t=l+4|0;k[l>>2]=27524;k[e>>2]=27544;B=0;wa(508,l+56|0,t|0);s=B;B=0;if(s&1){s=Rb()|0;Z=Q;_=s;vva(e);Qb(_|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[e>>2]=27488;B=0;va(448,t|0);s=B;B=0;do if(s&1){c=Rb()|0;$=Q;aa=c}else{k[t>>2]=27560;c=l+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(f);Yua(c);Ava(t);$=b;aa=a;break}Yua(f);B=0;a=Ia(40,l|0,109148,6)|0;b=B;B=0;b:do if((((!(b&1)?(B=0,v=ya(427,d|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(v)|0,B=0,q=Ia(40,a|0,v|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,q|0,74278,22)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,m|0,71825,72);q=B;B=0;do if(!(q&1)){B=0;eb(502,n|0,74301,16);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(m);ba=w;ca=v;break}B=0;wa(510,o|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;da=1;ea=v;fa=Q}else{B=0;ua(163,u|0,m|0,n|0,705,o|0);v=B;B=0;if(v&1)ga=1;else{B=0;eb(503,u|0,1240,229);B=0;ga=0}v=Rb()|0;w=Q;Yua(o);da=ga;ea=v;fa=w}Yua(n);Yua(m);if(da){ba=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{w=Rb()|0;ba=Q;ca=w}while(0);zb(u|0);ha=ca;ia=ba}else V=47;while(0);if((V|0)==47){a=Rb()|0;ha=a;ia=Q}k[l>>2]=27468;k[e>>2]=27488;k[t>>2]=27560;Yua(c);Ava(t);vva(e);W=ha;X=ia;Qb(W|0)}while(0);Z=$;_=aa;vva(e);Qb(_|0)}function _t(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=r;r=r+368|0;e=d+352|0;f=d;g=d+216|0;h=d+200|0;i=d+64|0;j=d+48|0;l=d+36|0;m=d+24|0;xp(a,f,287);a=f+8|0;n=+p[a>>3]==1.0;o=f+16|0;q=+p[o>>3];if(n&q==1.0){s=1;t=30628;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}v=+p[f>>3];if(q==1.0&v==1.0){s=2;t=30636;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}if(!(v!=1.0|n^1)){s=0;t=30644;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}d=g+56|0;u=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,u|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(d);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,u|0);c=B;B=0;do if(c&1){t=Rb()|0;y=Q;z=t}else{k[u>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;b=Q;Yua(e);Yua(t);Ava(u);y=b;z=s;break}Yua(e);B=0;s=Ia(40,g|0,71898,25)|0;b=B;B=0;do if((((((!(b&1)?(B=0,n=Sa(1,s|0,+(+p[f>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,n|0,149175,1)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Sa(1,A|0,+(+p[a>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,n|0,149175,1)|0,n=B,B=0,!(n&1)):0)?(B=0,Sa(1,A|0,+(+p[o>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,wa(510,h|0,u|0),A=B,B=0,!(A&1)):0){B=0;ya(424,h|0)|0;A=B;B=0;if(A&1){A=Rb()|0;n=Q;Yua(h);C=n;D=A;break}Yua(h);k[g>>2]=27468;k[d>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(d);A=i+56|0;n=i+4|0;k[i>>2]=27524;k[A>>2]=27544;B=0;wa(508,i+56|0,n|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(A);Qb(G|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[A>>2]=27488;B=0;va(448,n|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[n>>2]=27560;H=i+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[i+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(e);Yua(H);Ava(n);I=L;J=K;break}Yua(e);B=0;K=Ia(40,i|0,71924,32)|0;L=B;B=0;a:do if(L&1)M=37;else{B=0;Xa(239,K|0,0)|0;N=B;B=0;if(N&1){M=37;break}N=Ab(20)|0;B=0;eb(502,j|0,71825,72);O=B;B=0;do if(!(O&1)){B=0;eb(502,l|0,72104,17);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(j);S=R;T=P;break}B=0;wa(510,m|0,n|0);P=B;B=0;if(P&1){P=Rb()|0;U=1;V=Q;W=P}else{B=0;ua(163,N|0,j|0,l|0,767,m|0);P=B;B=0;if(P&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}P=Rb()|0;R=Q;Yua(m);U=X;V=R;W=P}Yua(l);Yua(j);if(U){S=V;T=W}else{Y=V;Z=W;break a}}else{P=Rb()|0;S=Q;T=P}while(0);zb(N|0);Y=S;Z=T}while(0);if((M|0)==37){K=Rb()|0;Y=Q;Z=K}k[i>>2]=27468;k[A>>2]=27488;k[n>>2]=27560;Yua(H);Ava(n);vva(A);_=Y;$=Z;Qb($|0)}while(0);F=I;G=J;vva(A);Qb(G|0)}else M=34;while(0);if((M|0)==34){s=Rb()|0;C=Q;D=s}k[g>>2]=27468;k[d>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(d);_=C;$=D;Qb($|0)}while(0);w=y;x=z;vva(d);Qb(x|0)}function $t(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=r;r=r+368|0;e=d+352|0;f=d;g=d+216|0;h=d+200|0;i=d+64|0;j=d+48|0;l=d+36|0;m=d+24|0;xp(a,f,288);a=f+8|0;n=+p[a>>3]==1.0;o=f+16|0;q=+p[o>>3];if(n&q==1.0){s=1;t=30628;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}v=+p[f>>3];if(q==1.0&v==1.0){s=2;t=30636;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}if(!(v!=1.0|n^1)){s=0;t=30644;k[b>>2]=s;u=k[t>>2]|0;k[c>>2]=u;r=d;return}d=g+56|0;u=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,u|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(d);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,u|0);c=B;B=0;do if(c&1){t=Rb()|0;y=Q;z=t}else{k[u>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;b=Q;Yua(e);Yua(t);Ava(u);y=b;z=s;break}Yua(e);B=0;s=Ia(40,g|0,72122,29)|0;b=B;B=0;do if((((((!(b&1)?(B=0,n=Sa(1,s|0,+(+p[f>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,n|0,149175,1)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Sa(1,A|0,+(+p[a>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,n|0,149175,1)|0,n=B,B=0,!(n&1)):0)?(B=0,Sa(1,A|0,+(+p[o>>3]))|0,A=B,B=0,!(A&1)):0)?(B=0,wa(510,h|0,u|0),A=B,B=0,!(A&1)):0){B=0;ya(424,h|0)|0;A=B;B=0;if(A&1){A=Rb()|0;n=Q;Yua(h);C=n;D=A;break}Yua(h);k[g>>2]=27468;k[d>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(d);A=i+56|0;n=i+4|0;k[i>>2]=27524;k[A>>2]=27544;B=0;wa(508,i+56|0,n|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(A);Qb(G|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[A>>2]=27488;B=0;va(448,n|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[n>>2]=27560;H=i+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[i+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(e);Yua(H);Ava(n);I=L;J=K;break}Yua(e);B=0;K=Ia(40,i|0,72152,36)|0;L=B;B=0;a:do if(L&1)M=37;else{B=0;Xa(239,K|0,0)|0;N=B;B=0;if(N&1){M=37;break}N=Ab(20)|0;B=0;eb(502,j|0,71825,72);O=B;B=0;do if(!(O&1)){B=0;eb(502,l|0,72189,20);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(j);S=R;T=P;break}B=0;wa(510,m|0,n|0);P=B;B=0;if(P&1){P=Rb()|0;U=1;V=Q;W=P}else{B=0;ua(163,N|0,j|0,l|0,805,m|0);P=B;B=0;if(P&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}P=Rb()|0;R=Q;Yua(m);U=X;V=R;W=P}Yua(l);Yua(j);if(U){S=V;T=W}else{Y=V;Z=W;break a}}else{P=Rb()|0;S=Q;T=P}while(0);zb(N|0);Y=S;Z=T}while(0);if((M|0)==37){K=Rb()|0;Y=Q;Z=K}k[i>>2]=27468;k[A>>2]=27488;k[n>>2]=27560;Yua(H);Ava(n);vva(A);_=Y;$=Z;Qb($|0)}while(0);F=I;G=J;vva(A);Qb(G|0)}else M=34;while(0);if((M|0)==34){s=Rb()|0;C=Q;D=s}k[g>>2]=27468;k[d>>2]=27488;k[u>>2]=27560;Yua(t);Ava(u);vva(d);_=C;$=D;Qb($|0)}while(0);w=y;x=z;vva(d);Qb(x|0)}function au(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d;f=d+40|0;g=d+176|0;h=d+24|0;i=d+12|0;switch(c|0){case 215:{j=k[a+28>>2]|0;l=+Zc[k[(k[j>>2]|0)+52>>2]&255](j);p[b>>3]=l;r=d;return}case 671:{j=oC(k[a+16>>2]|0,671)|0;Fc[k[(k[j>>2]|0)+64>>2]&1023](j,e);p[b>>3]=+p[e>>3];r=d;return}default:{d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;n=j;vva(d);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;o=Q;q=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);Yua(a);Ava(b);o=t;q=s;break}Yua(e);B=0;s=Ia(40,f|0,74318,14)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,c|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146956,19)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,71825,72);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,74333,15);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(g);w=s;x=t;break}B=0;wa(510,i|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,g|0,h|0,828,i|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(i);y=s;z=t;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}while(0);m=o;n=q;vva(d);Qb(n|0)}}}function bu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0;e=r;r=r+80|0;f=e;Ko(f,k[a+24>>2]|0,3,0);g=+p[f>>3];h=+p[f+8>>3];i=+p[f+24>>3];j=i<g?i:g;l=i>g?i:g;g=+p[f+32>>3];i=g<h?g:h;m=g>h?g:h;h=+p[f+48>>3];g=+p[f+56>>3];p[b>>3]=(h>l?h:l)-(h<j?h:j);p[c>>3]=(g>m?g:m)-(g<i?g:i);p[d>>3]=0.0;r=e;return}function cu(a){a=a|0;return k[a+44>>2]|0}function du(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=r;r=r+256|0;c=b;d=b+248|0;e=b+244|0;f=b+96|0;g=b+232|0;h=b+84|0;i=b+72|0;k[e>>2]=0;if(!($p(a)|0)){j=0.0;r=b;return +j}cp(a,d,298);switch(k[d>>2]|0){case 300:case 302:{Uo(a,e);l=+id[k[(k[a>>2]|0)+136>>2]&63](a,k[e>>2]|0);m=k[e>>2]|0;if(m)Tqa(m);k[e>>2]=0;Ko(c,k[a+24>>2]|0,3,0);n=+p[c>>3];o=+p[c+8>>3];q=+p[c+24>>3];s=+p[c+32>>3];t=+p[c+48>>3];u=+p[c+56>>3];j=(1.0-l)*((o*t+(n*s+(q*u-s*t)-o*q)-n*u)*.5);r=b;return +j}default:{}}b=f+56|0;a=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,a|0);e=B;B=0;if(e&1){e=Rb()|0;v=Q;w=e;vva(b);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);e=B;B=0;do if(e&1){m=Rb()|0;x=Q;y=m}else{k[a>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(m);Ava(a);x=A;y=z;break}Yua(c);B=0;z=Ia(40,f|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[d>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,g|0,71825,72);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,103020,12);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(g);E=z;F=A;break}B=0;wa(510,i|0,a|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,g|0,h|0,871,i|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(i);G=z;H=A;I=J}Yua(h);Yua(g);if(I){E=G;F=H}else{K=G;L=H;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}while(0);v=x;w=y;vva(b);Qb(w|0);return +(0.0)}function eu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;d=r;r=r+96|0;e=d+80|0;f=d+76|0;g=d+72|0;h=d+64|0;i=d+56|0;j=d+48|0;l=d+40|0;m=d+24|0;n=d;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=d;return}o=a+16|0;kC(k[o>>2]|0,e,533);switch(k[e>>2]|0){case 536:case 537:case 540:{e=a+24|0;q=c+4|0;s=b+4|0;t=Co(k[k[e>>2]>>2]|0)|0;if(k[b>>2]|0){u=k[k[s>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[k[e>>2]>>2]|0)|0;if(k[c>>2]|0){u=k[k[q>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[(k[e>>2]|0)+4>>2]|0)|0;if(k[b>>2]|0){u=k[k[s>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[(k[e>>2]|0)+4>>2]|0)|0;if(k[c>>2]|0){u=k[k[q>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[(k[e>>2]|0)+8>>2]|0)|0;if(k[b>>2]|0){u=k[k[s>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[(k[e>>2]|0)+8>>2]|0)|0;if(k[c>>2]|0){e=k[k[q>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,t,9999.0,0)}break}default:{k[f>>2]=0;k[g>>2]=0;Uo(a,f);Fc[k[(k[a>>2]|0)+188>>2]&1023](a,g);t=oC(k[o>>2]|0,653)|0;e=oC(k[o>>2]|0,64)|0;q=oC(k[o>>2]|0,63)|0;u=oC(k[o>>2]|0,674)|0;s=oC(k[o>>2]|0,677)|0;o=ed[k[(k[a>>2]|0)+324>>2]&511](a,1)|0;Fc[k[(k[o>>2]|0)+24>>2]&1023](o,0);if(_p(a)|0){nd[k[(k[e>>2]|0)+48>>2]&1023](e,l,o);nd[k[(k[q>>2]|0)+48>>2]&1023](q,j,o);q=a+24|0;if(+p[l>>3]<+p[j>>3]){v=q;w=12}else{x=q;w=11}}else{Xo(a,n,k[f>>2]|0,o,u,s);q=k[a+28>>2]|0;Tc[k[(k[q>>2]|0)+108>>2]&15](q,i,2,k[f>>2]|0,o,u,s,0);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,o);nd[k[(k[e>>2]|0)+48>>2]&1023](e,l,o);y=+p[i>>3]*2.0;z=+p[h>>3];A=y*+p[n>>3]-z;B=y*+p[n+8>>3]-z;z=y*+p[n+16>>3];nd[k[(k[a>>2]|0)+380>>2]&1023](a,m,k[g>>2]|0);y=+p[m>>3];C=+p[m+8>>3];m=a+32|0;+WJ(k[m>>2]|0,265);D=+WJ(k[m>>2]|0,266);E=D*+WJ(k[m>>2]|0,65);m=a+24|0;if(z*2.0*y*C+(y*(A*y)+C*(B*C))<E*+p[l>>3]){v=m;w=12}else{x=m;w=11}}if((w|0)==11){m=c+4|0;l=Co(k[k[x>>2]>>2]|0)|0;if(k[c>>2]|0){a=k[k[m>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,l,1.0,0)}l=Co(k[(k[x>>2]|0)+4>>2]|0)|0;if(k[c>>2]|0){a=k[k[m>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,l,1.0,0)}l=Co(k[(k[x>>2]|0)+8>>2]|0)|0;if(k[c>>2]|0){c=k[k[m>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,l,1.0,0)}}else if((w|0)==12){w=b+4|0;l=Co(k[k[v>>2]>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,l,1.0,0)}l=Co(k[(k[v>>2]|0)+4>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,l,1.0,0)}l=Co(k[(k[v>>2]|0)+8>>2]|0)|0;if(k[b>>2]|0){b=k[k[w>>2]>>2]|0;Jc[k[(k[b>>2]|0)+20>>2]&1](b,l,1.0,0)}}if(o)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);o=k[f>>2]|0;if(o)Tqa(o);k[f>>2]=0;f=k[g>>2]|0;if(f)Tqa(f)}}r=d;return}function fu(a){a=a|0;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0;b=r;r=r+80|0;c=b;Ko(c,k[a+24>>2]|0,3,0);d=+p[c>>3];e=+p[c+8>>3];f=+p[c+16>>3];g=+p[c+24>>3];h=+p[c+32>>3];i=+p[c+40>>3];j=+p[c+48>>3];l=+p[c+56>>3];m=+p[c+64>>3];n=g*l+(e*j+(d*h-e*g-d*l))-h*j;o=h*m+(f*l+(e*i-f*h-e*m))-i*l;l=i*j+(f*g-d*i+d*m-f*j-g*m);m=+aa(+(l*l+(n*n+o*o)))*.5;r=b;return +m}function gu(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=r;r=r+240|0;h=g+224|0;i=g+212|0;j=g+200|0;l=g;m=g+64|0;n=g+48|0;o=g+36|0;q=g+24|0;s=Rqa(12)|0;xp(a,l,e);if(!(+p[l>>3]<=f)){k[j>>2]=0;t=0;u=1}else{k[i>>2]=0;t=1;u=0}if(!(+p[l+8>>3]<=f)){k[j+(u<<2)>>2]=1;v=t;w=u+1|0}else{k[i+(t<<2)>>2]=1;v=t+1|0;w=u}if(!(+p[l+16>>3]<=f)){k[j+(w<<2)>>2]=2;u=w+1|0;if((v|0)>0){TEa(s|0,i|0,v<<2|0)|0;x=v;y=u;z=6}else{x=0;y=u;z=6}}else{k[i+(v<<2)>>2]=2;u=v+1|0;TEa(s|0,i|0,u<<2|0)|0;if((w|0)>0){x=u;y=w;z=6}else A=u}if((z|0)==6){TEa(s+(x<<2)|0,j|0,y<<2|0)|0;A=x}switch(A|0){case 0:{k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[b>>2]=s;k[c>>2]=A;r=g;return}case 1:{C=+p[l+(k[s>>2]<<3)>>3];D=f-C;p[d>>3]=D/(+p[l+(k[s+4>>2]<<3)>>3]-C);p[d+8>>3]=D/(+p[l+(k[s+8>>2]<<3)>>3]-C);k[b>>2]=s;k[c>>2]=A;r=g;return}case 2:{C=+p[l+(k[s+8>>2]<<3)>>3];D=+p[l+(k[s>>2]<<3)>>3];p[d>>3]=(f-D)/(C-D);D=+p[l+(k[s+4>>2]<<3)>>3];p[d+8>>3]=(f-D)/(C-D);k[b>>2]=s;k[c>>2]=A;r=g;return}case 3:{p[d>>3]=1.0;p[d+8>>3]=1.0;k[b>>2]=s;k[c>>2]=A;r=g;return}default:{g=m+56|0;A=m+4|0;k[m>>2]=27524;k[g>>2]=27544;B=0;wa(508,m+56|0,A|0);c=B;B=0;if(c&1){c=Rb()|0;E=Q;F=c;vva(g);Qb(F|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[g>>2]=27488;B=0;va(448,A|0);c=B;B=0;do if(c&1){s=Rb()|0;G=Q;H=s}else{k[A>>2]=27560;s=m+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[m+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,A|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;d=Q;Yua(h);Yua(s);Ava(A);G=d;H=b;break}Yua(h);B=0;b=Ia(40,m|0,72210,62)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,n|0,71825,72);d=B;B=0;do if(!(d&1)){B=0;eb(502,o|0,72273,23);l=B;B=0;if(l&1){l=Rb()|0;x=Q;Yua(n);I=x;J=l;break}B=0;wa(510,q|0,A|0);l=B;B=0;if(l&1){l=Rb()|0;K=Q;L=l;M=1}else{B=0;ua(163,b|0,n|0,o|0,1407,q|0);l=B;B=0;if(l&1)N=1;else{B=0;eb(503,b|0,1240,229);B=0;N=0}l=Rb()|0;x=Q;Yua(q);K=x;L=l;M=N}Yua(o);Yua(n);if(M){I=K;J=L}else{O=K;P=L;k[m>>2]=27468;k[g>>2]=27488;k[A>>2]=27560;Yua(s);Ava(A);vva(g);Qb(P|0)}}else{l=Rb()|0;I=Q;J=l}while(0);zb(b|0);O=I;P=J;k[m>>2]=27468;k[g>>2]=27488;k[A>>2]=27560;Yua(s);Ava(A);vva(g);Qb(P|0)}d=Rb()|0;O=Q;P=d;k[m>>2]=27468;k[g>>2]=27488;k[A>>2]=27560;Yua(s);Ava(A);vva(g);Qb(P|0)}while(0);E=G;F=H;vva(g);Qb(F|0)}}}function hu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;f=r;r=r+144|0;g=f+72|0;h=f;Ko(g,k[a+24>>2]|0,3,0);i=+p[g>>3];j=+p[g+8>>3];l=+p[g+24>>3];m=+p[g+32>>3];n=+p[g+48>>3];o=+p[g+56>>3];k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];k[h+8>>2]=k[d+8>>2];k[h+12>>2]=k[d+12>>2];k[h+16>>2]=k[d+16>>2];k[h+20>>2]=k[d+20>>2];g=h+24|0;a=d+24|0;k[g>>2]=k[a>>2];k[g+4>>2]=k[a+4>>2];k[g+8>>2]=k[a+8>>2];k[g+12>>2]=k[a+12>>2];k[g+16>>2]=k[a+16>>2];k[g+20>>2]=k[a+20>>2];q=h+48|0;s=d+48|0;k[q>>2]=k[s>>2];k[q+4>>2]=k[s+4>>2];k[q+8>>2]=k[s+8>>2];k[q+12>>2]=k[s+12>>2];k[q+16>>2]=k[s+16>>2];k[q+20>>2]=k[s+20>>2];t=(j*n+(i*m+(l*o-m*n)-j*l)-i*o)*.5;if((e|0)<=0){r=f;return}u=h+56|0;v=h+32|0;w=h+8|0;o=+p[g>>3];i=+p[v>>3];x=0;do{y=x*3|0;z=c+(y<<3)|0;A=b+(y<<3)|0;k[h>>2]=k[z>>2];k[h+4>>2]=k[z+4>>2];k[h+8>>2]=k[z+8>>2];k[h+12>>2]=k[z+12>>2];k[h+16>>2]=k[z+16>>2];k[h+20>>2]=k[z+20>>2];l=+p[u>>3];j=+p[q>>3];n=+p[h>>3];m=+p[w>>3];B=+$(+(j*m+(o*l-i*j+i*n-o*m)-l*n))*.5/t;p[A>>3]=B;k[h>>2]=k[d>>2];k[h+4>>2]=k[d+4>>2];k[h+8>>2]=k[d+8>>2];k[h+12>>2]=k[d+12>>2];k[h+16>>2]=k[d+16>>2];k[h+20>>2]=k[d+20>>2];k[g>>2]=k[z>>2];k[g+4>>2]=k[z+4>>2];k[g+8>>2]=k[z+8>>2];k[g+12>>2]=k[z+12>>2];k[g+16>>2]=k[z+16>>2];k[g+20>>2]=k[z+20>>2];B=+p[g>>3];n=+p[v>>3];m=+p[h>>3];C=+p[w>>3];D=+$(+(j*C+(B*l-n*j+n*m-B*C)-l*m))*.5/t;p[A+8>>3]=D;k[g>>2]=k[a>>2];k[g+4>>2]=k[a+4>>2];k[g+8>>2]=k[a+8>>2];k[g+12>>2]=k[a+12>>2];k[g+16>>2]=k[a+16>>2];k[g+20>>2]=k[a+20>>2];k[q>>2]=k[z>>2];k[q+4>>2]=k[z+4>>2];k[q+8>>2]=k[z+8>>2];k[q+12>>2]=k[z+12>>2];k[q+16>>2]=k[z+16>>2];k[q+20>>2]=k[z+20>>2];o=+p[g>>3];D=+p[u>>3];i=+p[v>>3];l=+p[q>>3];B=+$(+(l*C+(o*D-i*l+i*m-o*C)-D*m))*.5/t;p[A+16>>3]=B;k[q>>2]=k[s>>2];k[q+4>>2]=k[s+4>>2];k[q+8>>2]=k[s+8>>2];k[q+12>>2]=k[s+12>>2];k[q+16>>2]=k[s+16>>2];k[q+20>>2]=k[s+20>>2];x=x+1|0}while((x|0)!=(e|0));r=f;return}function iu(a){a=a|0;return k[a+44>>2]|0}function ju(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0;f=r;r=r+32|0;g=f;xp(a,g,928);h=+p[g>>3];if(h==0.0){j=h+1.0e-15;p[g>>3]=j;l=j}else l=h;a=g+8|0;h=+p[a>>3];if(h==0.0){j=h+1.0e-15;p[a>>3]=j;m=j}else m=h;a=g+16|0;h=+p[a>>3];if(h==0.0){j=h+1.0e-15;p[a>>3]=j;n=j}else n=h;do if(!(l>0.0&m>0.0&n>0.0))if(!(l<0.0&m<0.0&n<0.0)){h=l*m;a=!(h*n<0.0);if(h>0.0){o=n/(n-l);q=n/(n-m);s=a;t=2;break}if(m*n>0.0){o=l/(l-m);q=l/(l-n);s=a;t=0;break}if(l*n>0.0){o=m/(m-n);q=m/(m-l);s=a;t=1}else{o=0.0;q=0.0;s=a;t=0}}else{o=0.0;q=0.0;s=1;t=0}else{o=1.0;q=1.0;s=1;t=0}while(0);k[b>>2]=t;p[c>>3]=o;p[d>>3]=q;i[e>>0]=s&1;r=f;return}function ku(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0.0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0;c=r;r=r+496|0;d=c+472|0;e=c+468|0;f=c+464|0;g=c+460|0;h=c+104|0;i=c+96|0;j=c+72|0;l=c;m=c+312|0;n=c+448|0;o=c+296|0;q=c+148|0;s=c+160|0;t=c+136|0;u=c+124|0;v=c+112|0;cO(k[a+36>>2]|0,e,298);xp(a,j,928);w=+p[j>>3];if(w==0.0){x=w+1.0e-15;p[j>>3]=x;y=x}else y=w;z=j+8|0;w=+p[z>>3];if(w==0.0){x=w+1.0e-15;p[z>>3]=x;A=x}else A=w;z=j+16|0;w=+p[z>>3];if(w==0.0){x=w+1.0e-15;p[z>>3]=x;C=x}else C=w;z=k[e>>2]|0;do if((z|0)==301){_t(a,f,g);w=+p[j+(k[f>>2]<<3)>>3];D=w>0.0;if(D?+p[j+(k[g>>2]<<3)>>3]>0.0:0){E=1.0;break}x=+p[j+(k[g>>2]<<3)>>3];if(w<0.0){if(x<0.0){E=0.0;break}F=+p[j+(k[g>>2]<<3)>>3];if(F>0.0){E=1.0/(1.0-w/F);break}else G=F}else G=x;if(!(G<0.0)|D^1)E=0.0;else E=1.0/(1.0-G/w)}else{if((z&-3|0)==300){if(y>0.0&A>0.0&C>0.0){E=1.0;break}if(y<0.0&A<0.0&C<0.0){E=0.0;break}w=y*A;D=!(w*C>0.0);do if(!(w>0.0)){if(A*C>0.0){x=+p[b>>3];p[l>>3]=x;F=+p[b+8>>3];p[l+8>>3]=F;H=+p[b+16>>3];p[l+16>>3]=H;I=y/(y-A);J=y/(y-C);p[l+24>>3]=x+I*(+p[b+24>>3]-x);p[l+32>>3]=F+I*(+p[b+32>>3]-F);p[l+40>>3]=H+I*(+p[b+40>>3]-H);p[l+48>>3]=x+J*(+p[b+48>>3]-x);p[l+56>>3]=F+J*(+p[b+56>>3]-F);p[l+64>>3]=H+J*(+p[b+64>>3]-H);K=l;break}if(y*C>0.0){H=+p[b+24>>3];p[l+24>>3]=H;J=+p[b+32>>3];p[l+32>>3]=J;F=+p[b+40>>3];p[l+40>>3]=F;x=A/(A-y);I=A/(A-C);p[l>>3]=H+x*(+p[b>>3]-H);p[l+8>>3]=J+x*(+p[b+8>>3]-J);p[l+16>>3]=F+x*(+p[b+16>>3]-F);p[l+48>>3]=H+I*(+p[b+48>>3]-H);p[l+56>>3]=J+I*(+p[b+56>>3]-J);p[l+64>>3]=F+I*(+p[b+64>>3]-F);K=l;break}else{K=l;break}}else{F=+p[b+48>>3];p[l+48>>3]=F;I=+p[b+56>>3];p[l+56>>3]=I;J=+p[b+64>>3];p[l+64>>3]=J;H=C/(C-A);x=C/(C-y);p[l+24>>3]=F+H*(+p[b+24>>3]-F);p[l+32>>3]=I+H*(+p[b+32>>3]-I);p[l+40>>3]=J+H*(+p[b+40>>3]-J);p[l>>3]=F+x*(+p[b>>3]-F);p[l+8>>3]=I+x*(+p[b+8>>3]-I);p[l+16>>3]=J+x*(+p[b+16>>3]-J);K=l}while(0);uw(a,h,b,0);uw(a,i,K,0);if(D){w=+p[h>>3];J=w-+p[i>>3];p[i>>3]=J;L=J;M=w}else{L=+p[i>>3];M=+p[h>>3]}E=L/M;break}N=m+56|0;O=m+4|0;k[m>>2]=27524;k[N>>2]=27544;B=0;wa(508,m+56|0,O|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(N);Qb(S|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[O>>2]=27560;T=m+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,O|0,d|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(d);Yua(T);Ava(O);U=X;V=W;break}Yua(d);B=0;W=Ia(40,m|0,144674,10)|0;X=B;B=0;a:do if((((!(X&1)?(B=0,Y=ya(427,k[e>>2]|0)|0,Z=B,B=0,!(Z&1)):0)?(Z=Lta(Y)|0,B=0,_=Ia(40,W|0,Y|0,Z|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=Ia(40,_|0,72297,18)|0,_=B,B=0,!(_&1)):0)?(B=0,Xa(239,Z|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,n|0,71825,72);_=B;B=0;do if(!(_&1)){B=0;eb(502,o|0,74430,18);Y=B;B=0;if(Y&1){Y=Rb()|0;$=Q;Yua(n);aa=$;ba=Y;break}B=0;wa(510,q|0,O|0);Y=B;B=0;if(Y&1){Y=Rb()|0;ca=Y;da=Q;ea=1}else{B=0;ua(163,Z|0,n|0,o|0,1240,q|0);Y=B;B=0;if(Y&1)fa=1;else{B=0;eb(503,Z|0,1240,229);B=0;fa=0}Y=Rb()|0;$=Q;Yua(q);ca=Y;da=$;ea=fa}Yua(o);Yua(n);if(ea){aa=da;ba=ca}else{ga=da;ha=ca;break a}}else{$=Rb()|0;aa=Q;ba=$}while(0);zb(Z|0);ga=aa;ha=ba}else ia=48;while(0);if((ia|0)==48){W=Rb()|0;ga=Q;ha=W}k[m>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N);ja=ga;ka=ha;Qb(ka|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}while(0);if(!(E>1.0|E<0.0)){r=c;return +E}c=s+56|0;S=s+4|0;k[s>>2]=27524;k[c>>2]=27544;B=0;wa(508,s+56|0,S|0);V=B;B=0;if(V&1){V=Rb()|0;la=Q;ma=V;vva(c);Qb(ma|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[c>>2]=27488;B=0;va(448,S|0);V=B;B=0;do if(V&1){U=Rb()|0;na=Q;oa=U}else{k[S>>2]=27560;U=s+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,S|0,d|0);R=B;B=0;if(R&1){R=Rb()|0;ha=Q;Yua(d);Yua(U);Ava(S);na=ha;oa=R;break}Yua(d);B=0;R=Ia(40,s|0,74349,80)|0;ha=B;B=0;b:do if(!(ha&1)?(B=0,Xa(239,R|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,t|0,71825,72);m=B;B=0;do if(!(m&1)){B=0;eb(502,u|0,74430,18);ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(t);pa=ba;qa=aa;break}B=0;wa(510,v|0,S|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ra=1;sa=Q;ta=aa}else{B=0;ua(163,ga|0,t|0,u|0,1242,v|0);aa=B;B=0;if(aa&1)xa=1;else{B=0;eb(503,ga|0,1240,229);B=0;xa=0}aa=Rb()|0;ba=Q;Yua(v);ra=xa;sa=ba;ta=aa}Yua(u);Yua(t);if(ra){pa=ta;qa=sa}else{za=sa;Aa=ta;break b}}else{aa=Rb()|0;pa=aa;qa=Q}while(0);zb(ga|0);za=qa;Aa=pa}else ia=72;while(0);if((ia|0)==72){R=Rb()|0;za=Q;Aa=R}k[s>>2]=27468;k[c>>2]=27488;k[S>>2]=27560;Yua(U);Ava(S);vva(c);ja=za;ka=Aa;Qb(ka|0)}while(0);la=na;ma=oa;vva(c);Qb(ma|0);return +(0.0)}function lu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+32|0;f=e;xp(a,f,d);d=Rqa(12)|0;if(!(+p[f>>3]>=0.0))g=0;else{k[d>>2]=0;g=1}if(!(+p[f+8>>3]>=0.0))h=g;else{k[d+(g<<2)>>2]=1;h=g+1|0}if(!(+p[f+16>>3]>=0.0))i=h;else{k[d+(h<<2)>>2]=2;i=h+1|0}h=k[d>>2]|0;f=d+4|0;g=k[f>>2]|0;if(((h+3-g|0)%3|0|0)==2)j=h;else{k[d>>2]=g;k[f>>2]=h;j=g}g=i*3|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;if((i|0)<=0){k[b>>2]=h;Tqa(d);r=e;return}g=c+(j*3<<3)|0;k[h>>2]=k[g>>2];k[h+4>>2]=k[g+4>>2];k[h+8>>2]=k[g+8>>2];k[h+12>>2]=k[g+12>>2];k[h+16>>2]=k[g+16>>2];k[h+20>>2]=k[g+20>>2];if((i|0)==1){k[b>>2]=h;Tqa(d);r=e;return}else l=1;do{g=h+(l*24|0)|0;j=c+((k[d+(l<<2)>>2]|0)*3<<3)|0;k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[g+12>>2]=k[j+12>>2];k[g+16>>2]=k[j+16>>2];k[g+20>>2]=k[j+20>>2];l=l+1|0}while((l|0)!=(i|0));k[b>>2]=h;Tqa(d);r=e;return}function mu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){m=Qqa(64)|0;B=0;va(491,m|0);n=B;B=0;if(!(n&1)){n=k[(k[m>>2]|0)+28>>2]|0;o=ed[k[(k[a>>2]|0)+160>>2]&511](a,c)|0;Fc[n&1023](m,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,b,m);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=e;return}e=Rb()|0;b=Q;Sqa(m);p=e;q=b;Qb(p|0)}b=g+56|0;e=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;s=Q;t=m;vva(b);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);m=B;B=0;do if(m&1){l=Rb()|0;u=Q;v=l}else{k[e>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(f);Yua(l);Ava(e);u=n;v=o;break}Yua(f);B=0;o=Ia(40,g|0,74449,17)|0;n=B;B=0;a:do if((((!(n&1)?(B=0,c=ya(427,d|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(c)|0,B=0,w=Ia(40,o|0,c|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,w|0,74467,14)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,71825,72);w=B;B=0;do if(!(w&1)){B=0;eb(502,i|0,121355,13);c=B;B=0;if(c&1){c=Rb()|0;x=Q;Yua(h);y=c;z=x;break}B=0;wa(510,j|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;A=x;C=Q;D=1}else{B=0;ua(163,a|0,h|0,i|0,1290,j|0);x=B;B=0;if(x&1)E=1;else{B=0;eb(503,a|0,1240,229);B=0;E=0}x=Rb()|0;c=Q;Yua(j);A=x;C=c;D=E}Yua(i);Yua(h);if(D){y=A;z=C}else{F=A;G=C;break a}}else{c=Rb()|0;y=c;z=Q}while(0);zb(a|0);F=y;G=z}else H=20;while(0);if((H|0)==20){o=Rb()|0;F=o;G=Q}k[g>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(l);Ava(e);vva(b);p=F;q=G;Qb(p|0)}while(0);s=u;t=v;vva(b);Qb(t|0)}function nu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0;f=r;r=r+32|0;g=f;xp(a,g,d);d=Rqa(12)|0;if(+p[g>>3]==e){k[d>>2]=0;h=1}else h=0;if(+p[g+8>>3]==e){k[d+(h<<2)>>2]=1;i=h+1|0}else i=h;if(+p[g+16>>3]==e){k[d+(i<<2)>>2]=2;j=i+1|0}else j=i;i=k[d>>2]|0;g=d+4|0;h=k[g>>2]|0;if(((i+3-h|0)%3|0|0)==2)l=i;else{k[d>>2]=h;k[g>>2]=i;l=h}h=j*3|0;i=Rqa(h>>>0>536870911?-1:h<<3)|0;if((j|0)<=0){k[b>>2]=i;Tqa(d);r=f;return}h=c+(l*3<<3)|0;k[i>>2]=k[h>>2];k[i+4>>2]=k[h+4>>2];k[i+8>>2]=k[h+8>>2];k[i+12>>2]=k[h+12>>2];k[i+16>>2]=k[h+16>>2];k[i+20>>2]=k[h+20>>2];if((j|0)==1){k[b>>2]=i;Tqa(d);r=f;return}else m=1;do{h=i+(m*24|0)|0;l=c+((k[d+(m<<2)>>2]|0)*3<<3)|0;k[h>>2]=k[l>>2];k[h+4>>2]=k[l+4>>2];k[h+8>>2]=k[l+8>>2];k[h+12>>2]=k[l+12>>2];k[h+16>>2]=k[l+16>>2];k[h+20>>2]=k[l+20>>2];m=m+1|0}while((m|0)!=(j|0));k[b>>2]=i;Tqa(d);r=f;return}function ou(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0,r=0;g=+p[f>>3];if(g==0.0){h=g+1.0e-15;p[f>>3]=h;j=h}else j=g;a=f+8|0;g=+p[a>>3];if(g==0.0){h=g+1.0e-15;p[a>>3]=h;l=h}else l=g;a=f+16|0;g=+p[a>>3];if(g==0.0){h=g+1.0e-15;p[a>>3]=h;m=h}else m=g;do if(!(j>0.0&l>0.0&m>0.0))if(!(j<0.0&l<0.0&m<0.0)){g=j*l;a=!(g*m<0.0);if(g>0.0){n=m/(m-j);o=m/(m-l);q=a;r=2;break}if(l*m>0.0){n=j/(j-l);o=j/(j-m);q=a;r=0;break}if(j*m>0.0){n=l/(l-m);o=l/(l-j);q=a;r=1}else{n=0.0;o=0.0;q=a;r=0}}else{n=0.0;o=0.0;q=1;r=0}else{n=1.0;o=1.0;q=1;r=0}while(0);k[b>>2]=r;p[c>>3]=n;p[d>>3]=o;i[e>>0]=q&1;return}function pu(a,b){a=a|0;b=b|0;return k[(k[a+20>>2]|0)+(b<<2)>>2]|0}function qu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=k[a+20>>2]|0;if((k[i>>2]|0)==(b|0)){j=0;r=c;return j|0}if((k[i+4>>2]|0)==(b|0)){j=1;r=c;return j|0}if((k[i+8>>2]|0)==(b|0)){j=2;r=c;return j|0}j=e+56|0;c=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(j);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){i=Rb()|0;n=Q;o=i}else{k[c>>2]=27560;i=e+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;p=Q;Yua(d);Yua(i);Ava(c);n=p;o=a;break}Yua(d);B=0;a=Ia(40,e|0,74482,43)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,f|0,71825,72);p=B;B=0;do if(!(p&1)){B=0;eb(502,g|0,74526,12);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);t=s;u=q;break}B=0;wa(510,h|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,a|0,f|0,g|0,1478,h|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,a|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(h);v=s;w=q;x=y}Yua(g);Yua(f);if(x){t=v;u=w}else{z=v;A=w;k[e>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(i);Ava(c);vva(j);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(a|0);z=t;A=u;k[e>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(i);Ava(c);vva(j);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[e>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(i);Ava(c);vva(j);Qb(A|0)}while(0);l=n;m=o;vva(j);Qb(m|0);return 0}function ru(a){a=a|0;var b=0;if(!(k[a+20>>2]|0)){b=0;return b|0}b=qw(a,k[a+44>>2]|0)|0;return b|0}function su(a,b){a=a|0;b=b|0;return qw(a,b)|0}function tu(a){a=a|0;return 3}function uu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+16|0;e=d+8|0;f=d;k[e>>2]=0;g=a+44|0;h=qw(a,k[g>>2]|0)|0;rp(a,e,534,943);i=Rqa(h>>>0>536870911?-1:h<<3)|0;j=oC(k[a+16>>2]|0,c)|0;c=Qqa(64)|0;B=0;va(491,c|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(c);Qb(a|0)}if((h|0)>0){a=0;do{nd[k[(k[c>>2]|0)+32>>2]&1023](c,k[g>>2]|0,a);nd[k[(k[j>>2]|0)+48>>2]&1023](j,f,c);p[i+(a<<3)>>3]=+p[f>>3];a=a+1|0}while((a|0)!=(h|0))}a=k[e>>2]|0;if(!(k[b>>2]|0))l=a;else{f=k[k[b+4>>2]>>2]|0;Dc[k[(k[f>>2]|0)+16>>2]&255](f,h,a,i,0);l=k[e>>2]|0}if(!l){k[e>>2]=0;Tqa(i);m=k[c>>2]|0;n=m+4|0;o=k[n>>2]|0;Ec[o&1023](c);r=d;return}Tqa(l);k[e>>2]=0;Tqa(i);m=k[c>>2]|0;n=m+4|0;o=k[n>>2]|0;Ec[o&1023](c);r=d;return}function vu(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;g=r;r=r+208|0;h=g+188|0;i=g+176|0;j=g+40|0;l=g+24|0;m=g+12|0;n=g;if(!(Tp(a,c)|0)){r=g;return}Mp(a,i,d,f);f=oC(k[a+16>>2]|0,c)|0;if((Hc[k[(k[f>>2]|0)+20>>2]&511](f)|0)==559){w$(f,b,i,e);r=g;return}g=j+56|0;e=j+4|0;k[j>>2]=27524;k[g>>2]=27544;B=0;wa(508,j+56|0,e|0);i=B;B=0;if(i&1){i=Rb()|0;o=Q;p=i;vva(g);Qb(p|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[g>>2]=27488;B=0;va(448,e|0);i=B;B=0;do if(i&1){b=Rb()|0;q=Q;s=b}else{k[e>>2]=27560;b=j+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,e|0,h|0);f=B;B=0;if(f&1){f=Rb()|0;a=Q;Yua(h);Yua(b);Ava(e);q=a;s=f;break}Yua(h);B=0;f=Ia(40,j|0,74566,6)|0;a=B;B=0;if((((!(a&1)?(B=0,a=ya(427,c|0)|0,d=B,B=0,!(d&1)):0)?(d=Lta(a)|0,B=0,t=Ia(40,f|0,a|0,d|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,t|0,74278,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,l|0,71825,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,m|0,74539,26);a=B;B=0;if(a&1){a=Rb()|0;f=Q;Yua(l);u=f;v=a;break}B=0;wa(510,n|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,d|0,l|0,m|0,1542,n|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,d|0,1240,229);B=0;z=0}a=Rb()|0;f=Q;Yua(n);w=f;x=a;y=z}Yua(m);Yua(l);if(y){u=w;v=x}else{A=w;C=x;k[j>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(b);Ava(e);vva(g);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(d|0);A=u;C=v;k[j>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(b);Ava(e);vva(g);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[j>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(b);Ava(e);vva(g);Qb(C|0)}while(0);o=q;p=s;vva(g);Qb(p|0)}function wu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+72|0;e=c;Ko(e,k[a+24>>2]|0,3,0);f=Rqa(48)|0;g=d+4|0;_t(a,d,g);a=e+((k[d>>2]|0)*24|0)|0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];k[f+12>>2]=k[a+12>>2];a=f+24|0;d=e+((k[g>>2]|0)*24|0)|0;k[a>>2]=k[d>>2];k[a+4>>2]=k[d+4>>2];k[a+8>>2]=k[d+8>>2];k[a+12>>2]=k[d+12>>2];k[b>>2]=f;r=c;return}function xu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+80|0;d=c+72|0;e=c;Ko(e,k[a+24>>2]|0,3,0);f=Rqa(48)|0;g=d+4|0;$t(a,d,g);a=e+((k[d>>2]|0)*24|0)|0;k[f>>2]=k[a>>2];k[f+4>>2]=k[a+4>>2];k[f+8>>2]=k[a+8>>2];k[f+12>>2]=k[a+12>>2];a=f+24|0;d=e+((k[g>>2]|0)*24|0)|0;k[a>>2]=k[d>>2];k[a+4>>2]=k[d+4>>2];k[a+8>>2]=k[d+8>>2];k[a+12>>2]=k[d+12>>2];k[b>>2]=f;r=c;return}function yu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=r;r=r+256|0;c=b;d=b+248|0;e=b+244|0;f=b+96|0;g=b+232|0;h=b+84|0;i=b+72|0;k[e>>2]=0;if(!($p(a)|0)){j=0.0;r=b;return +j}cp(a,d,298);switch(k[d>>2]|0){case 300:case 302:{Uo(a,e);l=+id[k[(k[a>>2]|0)+136>>2]&63](a,k[e>>2]|0);m=k[e>>2]|0;if(m)Tqa(m);k[e>>2]=0;Ko(c,k[a+24>>2]|0,3,0);n=+p[c>>3];o=+p[c+8>>3];q=+p[c+24>>3];s=+p[c+32>>3];t=+p[c+48>>3];u=+p[c+56>>3];j=l*((o*t+(n*s+(q*u-s*t)-o*q)-n*u)*.5);r=b;return +j}default:{}}b=f+56|0;a=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,a|0);e=B;B=0;if(e&1){e=Rb()|0;v=Q;w=e;vva(b);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);e=B;B=0;do if(e&1){m=Rb()|0;x=Q;y=m}else{k[a>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(m);Ava(a);x=A;y=z;break}Yua(c);B=0;z=Ia(40,f|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[d>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,g|0,71825,72);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,103033,12);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(g);E=z;F=A;break}B=0;wa(510,i|0,a|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;I=1}else{B=0;ua(163,C|0,g|0,h|0,1593,i|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}A=Rb()|0;z=Q;Yua(i);G=z;H=A;I=J}Yua(h);Yua(g);if(I){E=G;F=H}else{K=G;L=H;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}}else{A=Rb()|0;E=Q;F=A}while(0);zb(C|0);K=E;L=F;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}D=Rb()|0;K=Q;L=D;k[f>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(b);Qb(L|0)}while(0);v=x;w=y;vva(b);Qb(w|0);return +(0.0)}function zu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+224|0;c=b+200|0;d=b;e=b+64|0;f=b+48|0;g=b+36|0;h=b+24|0;xp(a,d,287);i=+p[d>>3]+ +p[d+8>>3]+ +p[d+16>>3];if(!(i==3.0)){r=b;return i>1.0|0}b=e+56|0;d=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(b);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,d|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[d>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(m);Ava(d);n=s;o=q;break}Yua(c);B=0;q=Ia(40,e|0,72316,37)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,71825,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,72354,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(f);v=u;w=t;break}B=0;wa(510,h|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,f|0,g|0,1614,h|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(h);x=u;y=t;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}while(0);j=n;l=o;vva(b);Qb(l|0);return 0}function Au(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+224|0;c=b+200|0;d=b;e=b+64|0;f=b+48|0;g=b+36|0;h=b+24|0;xp(a,d,288);i=+p[d>>3]+ +p[d+8>>3]+ +p[d+16>>3];if(!(i==3.0)){r=b;return i>1.0|0}b=e+56|0;d=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(b);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,d|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[d>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(m);Ava(d);n=s;o=q;break}Yua(c);B=0;q=Ia(40,e|0,72368,41)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,71825,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,72410,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(f);v=u;w=t;break}B=0;wa(510,h|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,f|0,g|0,1635,h|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(h);x=u;y=t;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(D|0)}while(0);j=n;l=o;vva(b);Qb(l|0);return 0}function Bu(a){a=a|0;var b=0.0,c=0.0;if(!($p(a)|0)){b=0.0;return +b}c=+WJ(k[a+32>>2]|0,265);b=c*+Zc[k[(k[a>>2]|0)+204>>2]&255](a);return +b}function Cu(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0;b=r;r=r+96|0;c=b+16|0;d=b+8|0;e=b;f=b+88|0;if(!($p(a)|0)){g=0.0;r=b;return +g}cO(k[a+36>>2]|0,f,298);Ko(c,k[a+24>>2]|0,3,0);h=+p[c>>3];i=+p[c+8>>3];j=+p[c+24>>3];l=+p[c+32>>3];m=+p[c+48>>3];n=+p[c+56>>3];o=(i*m+(h*l+(j*n-l*m)-i*j)-h*n)*.5;c=a+16|0;a=oC(k[c>>2]|0,339)|0;q=oC(k[c>>2]|0,64)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,d);Fc[k[(k[q>>2]|0)+64>>2]&1023](q,e);g=(k[f>>2]|0)==301?o:o*(+p[d>>3]-+p[e>>3]);r=b;return +g}function Du(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0;b=r;r=r+96|0;c=b+88|0;d=b+80|0;e=b+72|0;f=b;if(!($p(a)|0)){g=0.0;r=b;return +g}if(_p(a)|0){g=0.0;r=b;return +g}h=a+32|0;i=+WJ(k[h>>2]|0,265);j=+WJ(k[h>>2]|0,266);Ko(f,k[a+24>>2]|0,3,0);l=+p[f>>3];m=+p[f+8>>3];n=+$(+((l-+p[f+48>>3])*(+p[f+32>>3]-m)-(l-+p[f+24>>3])*(+p[f+56>>3]-m)))*.5;f=a+16|0;a=oC(k[f>>2]|0,339)|0;h=oC(k[f>>2]|0,64)|0;o=oC(k[f>>2]|0,63)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,c);Fc[k[(k[h>>2]|0)+64>>2]&1023](h,d);Fc[k[(k[o>>2]|0)+64>>2]&1023](o,e);m=+p[c>>3]-+p[d>>3];g=n*(m+ +KY(j/i*+p[e>>3],0.0));r=b;return +g}function Eu(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=r;r=r+208|0;e=d+184|0;f=d+180|0;g=d+176|0;h=d+40|0;i=d+24|0;j=d+12|0;l=d;k[g>>2]=0;m=a+36|0;cO(k[m>>2]|0,f,198);hO(k[m>>2]|0,g,0,176);a:do if((k[f>>2]|0)>0){m=a+16|0;b:do if(c){n=0;while(1){o=oC(k[m>>2]|0,k[(k[g>>2]|0)+(n<<2)>>2]|0)|0;if((Hc[k[(k[o>>2]|0)+20>>2]&511](o)|0)!=559){p=n;break b}F$(o,b);l$(o);s$(o);n=n+1|0;if((n|0)>=(k[f>>2]|0))break a}}else{n=0;while(1){o=oC(k[m>>2]|0,k[(k[g>>2]|0)+(n<<2)>>2]|0)|0;if((Hc[k[(k[o>>2]|0)+20>>2]&511](o)|0)!=559){p=n;break b}F$(o,b);l$(o);n=n+1|0;if((n|0)>=(k[f>>2]|0))break a}}while(0);m=h+56|0;n=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);Yua(t);Ava(n);u=x;v=w;break}Yua(e);B=0;w=Ia(40,h|0,74566,6)|0;x=B;B=0;if((((!(x&1)?(B=0,x=ya(427,k[(k[g>>2]|0)+(p<<2)>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(x)|0,B=0,z=Ia(40,w|0,x|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,z|0,74278,22)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,i|0,71825,72);z=B;B=0;do if(!(z&1)){B=0;eb(502,j|0,74573,18);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(i);A=w;C=x;break}B=0;wa(510,l|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;D=Q;E=x;F=1}else{B=0;ua(163,y|0,i|0,j|0,1772,l|0);x=B;B=0;if(x&1)G=1;else{B=0;eb(503,y|0,1240,229);B=0;G=0}x=Rb()|0;w=Q;Yua(l);D=w;E=x;F=G}Yua(j);Yua(i);if(F){A=D;C=E}else{H=D;I=E;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}}else{x=Rb()|0;A=Q;C=x}while(0);zb(y|0);H=A;I=C;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}z=Rb()|0;H=Q;I=z;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}while(0);s=k[g>>2]|0;if(!s){r=d;return}Tqa(s);r=d;return}function Fu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=a+16|0;a=oC(k[j>>2]|0,b)|0;if(a){l=Hc[k[(k[a>>2]|0)+24>>2]&511](a)|0;Fc[k[(k[l>>2]|0)+80>>2]&1023](l,c);mC(k[j>>2]|0,l)|0;r=d;return}d=f+56|0;l=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,l|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;n=j;vva(d);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);j=B;B=0;do if(j&1){c=Rb()|0;o=Q;p=c}else{k[l>>2]=27560;c=f+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,l|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(e);Yua(c);Ava(l);o=q;p=a;break}Yua(e);B=0;a=Ia(40,f|0,74669,36)|0;q=B;B=0;if(((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,g|0,71825,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,h|0,74624,23);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(g);u=a;v=q;break}B=0;wa(510,i|0,l|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,t|0,g|0,h|0,1793,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,t|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(i);w=a;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(c);Ava(l);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(t|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(c);Ava(l);vva(d);Qb(C|0)}s=Rb()|0;A=Q;C=s;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(c);Ava(l);vva(d);Qb(C|0)}while(0);m=o;n=p;vva(d);Qb(n|0)}function Gu(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,b)|0;if(j){Cc[k[(k[j>>2]|0)+120>>2]&63](j,c);r=d;return}d=f+56|0;j=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,j|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;m=a;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,j|0);a=B;B=0;do if(a&1){n=Rb()|0;o=Q;p=n}else{k[j>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(j);o=s;p=q;break}Yua(e);B=0;q=Ia(40,f|0,74669,36)|0;s=B;B=0;if(((!(s&1)?(B=0,s=ya(427,b|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,71825,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,74706,10);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(g);v=q;w=s;break}B=0;wa(510,i|0,j|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,u|0,g|0,h|0,1809,i|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,u|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(i);x=q;y=s;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(u|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}t=Rb()|0;C=Q;D=t;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}while(0);l=o;m=p;vva(d);Qb(m|0)}
+-function b8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125951,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,245,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function c8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;cp(c,e,298);switch(k[e>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,671);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,671);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,125951,83);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,258,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function d8(a,b){a=a|0;b=b|0;return}function e8(a){a=a|0;Sqa(a);return}function f8(a,b,c){a=a|0;b=b|0;c=c|0;return}function g8(a,b,c){a=a|0;b=b|0;c=c|0;return}function h8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=r;r=r+32|0;d=a+16|0;e=a+8|0;f=a;switch(k[c+40>>2]|0){case 302:{k[f>>2]=136615;k[f+4>>2]=136636;Ska(c,2,f);break}case 301:{k[e>>2]=136615;Ska(c,1,e);break}default:{}}hoa(b,c,493,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function i8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function j8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);switch(k[c+40>>2]|0){case 300:case 303:return;default:{}}Zka(c,b,136615,287);Zka(c,b,136636,288);return}function k8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function l8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,126098,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function m8(a,b){a=a|0;b=b|0;return 0}function n8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,126098,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function o8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+192|0;c=a+136|0;d=a+188|0;e=a;f=a+176|0;g=a+164|0;h=a+148|0;i=a+160|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{j=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{l=0;r=a;return l|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{l=0;r=a;return l|0}break}default:{m=e+56|0;n=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=e+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,e|0,144639,5)|0;x=B;B=0;if((((!(x&1)?(B=0,x=ya(427,k[d>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(x)|0,B=0,z=Ia(40,w|0,x|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,126098,84);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,144189,13);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(f);A=w;C=x;break}B=0;wa(510,h|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;D=Q;E=x;F=1}else{B=0;ua(163,y|0,f|0,g|0,85,h|0);x=B;B=0;if(x&1)G=1;else{B=0;eb(503,y|0,1240,229);B=0;G=0}x=Rb()|0;w=Q;Yua(h);D=w;E=x;F=G}Yua(g);Yua(f);if(F){A=D;C=E}else{H=D;I=E;k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}}else{x=Rb()|0;A=Q;C=x}while(0);zb(y|0);H=A;I=C;k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}z=Rb()|0;H=Q;I=z;k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}}while(0);k[i>>2]=0;s=Hc[k[(k[j>>2]|0)+164>>2]&511](j)|0;v=gq(j,534)|0;u=Rqa(s>>>0>536870911?-1:s<<3)|0;Uo(j,i);q=ed[k[(k[j>>2]|0)+308>>2]&511](j,2)|0;I=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((I|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){H=q+8|0;C=v+12|0;A=I;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,A);rd[k[(k[j>>2]|0)+260>>2]&511](j,e,k[i>>2]|0,q);nd[k[(k[j>>2]|0)+336>>2]&1023](j,u,q);p[c>>3]=+p[H>>3]*+p[e>>3];ZX(u,1,s,1,c,1,1,0,u,1,s,0,k[C>>2]|0,1)|0;A=A+1|0}while((A|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}A=k[i>>2]|0;if(A)Tqa(A);k[i>>2]=0;Tqa(u);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);if((k[d>>2]|0)!=300?(ap(j),(j|0)!=0):0)Ec[k[(k[j>>2]|0)+4>>2]&1023](j);l=v;r=a;return l|0}function p8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;a=r;r=r+224|0;c=a+204|0;d=a+200|0;e=a+24|0;f=a+188|0;g=a+176|0;h=a+164|0;i=a+16|0;j=a;l=a+160|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{m=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){m=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{n=0;r=a;return n|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){m=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{n=0;r=a;return n|0}break}default:{o=e+56|0;q=e+4|0;k[e>>2]=27524;k[o>>2]=27544;B=0;wa(508,e+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=e+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;y=Ia(40,e|0,144639,5)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,k[d>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,y|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,f|0,126098,84);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,144203,13);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(f);D=y;E=z;break}B=0;wa(510,h|0,q|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;G=z;H=1}else{B=0;ua(163,A|0,f|0,g|0,144,h|0);z=B;B=0;if(z&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}z=Rb()|0;y=Q;Yua(h);F=y;G=z;H=I}Yua(g);Yua(f);if(H){D=F;E=G}else{J=F;K=G;k[e>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(K|0)}}else{z=Rb()|0;D=Q;E=z}while(0);zb(A|0);J=D;K=E;k[e>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(K|0)}C=Rb()|0;J=Q;K=C;k[e>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(K|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}}while(0);k[l>>2]=0;u=Hc[k[(k[m>>2]|0)+164>>2]&511](m)|0;x=iq(m,534)|0;w=Rqa(u>>>0>536870911?-1:u<<3)|0;Uo(m,l);cp(m,c,576);t=k[c>>2]|0;switch(t|0){case 664:{L=0;M=Wo(m,339)|0;break}case 665:{L=0;M=Wo(m,339)|0;break}case 642:{L=0;M=Wo(m,64)|0;break}case 643:{L=0;M=Wo(m,64)|0;break}case 993:{L=0;M=Wo(m,206)|0;break}case 994:{L=0;M=Wo(m,206)|0;break}default:{L=Wo(b,t)|0;M=0}}t=ed[k[(k[m>>2]|0)+308>>2]&511](m,2)|0;b=Hc[k[(k[t>>2]|0)+8>>2]&511](t)|0;b:do if((b|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0)){K=j+8|0;J=(u|0)>0;E=t+8|0;D=x+4|0;if(!M){G=b;while(1){Fc[k[(k[t>>2]|0)+24>>2]&1023](t,G);rd[k[(k[m>>2]|0)+260>>2]&511](m,e,k[l>>2]|0,t);nd[k[(k[m>>2]|0)+336>>2]&1023](m,w,t);switch(k[c>>2]|0){case 993:case 642:case 664:{p[i>>3]=+p[j>>3];break}case 994:case 643:case 665:{p[i>>3]=+p[K>>3];break}default:nd[k[(k[L>>2]|0)+48>>2]&1023](L,i,t)}if(J){F=k[D>>2]|0;H=0;do{f=F+(H<<3)|0;p[f>>3]=+p[e>>3]*+p[E>>3]*+p[i>>3]*+p[w+(H<<3)>>3]+ +p[f>>3];H=H+1|0}while((H|0)!=(u|0))}G=G+1|0;if((G|0)>=(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))break b}}else{G=b;while(1){Fc[k[(k[t>>2]|0)+24>>2]&1023](t,G);rd[k[(k[m>>2]|0)+260>>2]&511](m,e,k[l>>2]|0,t);nd[k[(k[m>>2]|0)+336>>2]&1023](m,w,t);rd[k[(k[M>>2]|0)+60>>2]&511](M,j,k[l>>2]|0,t);switch(k[c>>2]|0){case 993:case 642:case 664:{p[i>>3]=+p[j>>3];break}case 994:case 643:case 665:{p[i>>3]=+p[K>>3];break}default:nd[k[(k[L>>2]|0)+48>>2]&1023](L,i,t)}if(J){o=k[D>>2]|0;H=0;do{F=o+(H<<3)|0;p[F>>3]=+p[e>>3]*+p[E>>3]*+p[i>>3]*+p[w+(H<<3)>>3]+ +p[F>>3];H=H+1|0}while((H|0)!=(u|0))}G=G+1|0;if((G|0)>=(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))break b}}}while(0);u=k[l>>2]|0;if(u)Tqa(u);k[l>>2]=0;Tqa(w);Ec[k[(k[t>>2]|0)+4>>2]&1023](t);if((k[d>>2]|0)!=300?(ap(m),(m|0)!=0):0)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);n=x;r=a;return n|0}function q8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,126098,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,200,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function r8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,126098,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,203,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function s8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+208|0;d=a+188|0;e=a+184|0;f=a+180|0;g=a+176|0;h=a+40|0;i=a+24|0;j=a+12|0;l=a;cp(c,e,576);cp(c,f,298);cp(c,g,296);switch(k[f>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}case 301:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}case 302:{m=k[c>>2]|0;if((k[g>>2]|0)==623){nd[k[m+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}else{nd[k[m+228>>2]&1023](c,b,k[e>>2]|0);r=a;return}break}default:{a=h+56|0;e=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;n=Q;o=b;vva(a);Qb(o|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,e|0);b=B;B=0;do if(b&1){c=Rb()|0;p=Q;q=c}else{k[e>>2]=27560;c=h+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;g=Q;Yua(d);Yua(c);Ava(e);p=g;q=m;break}Yua(d);B=0;m=Ia(40,h|0,144639,5)|0;g=B;B=0;if((((!(g&1)?(B=0,g=ya(427,k[f>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(g)|0,B=0,t=Ia(40,m|0,g|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,i|0,126098,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,j|0,137199,23);g=B;B=0;if(g&1){g=Rb()|0;m=Q;Yua(i);u=m;v=g;break}B=0;wa(510,l|0,e|0);g=B;B=0;if(g&1){g=Rb()|0;w=Q;x=g;y=1}else{B=0;ua(163,s|0,i|0,j|0,225,l|0);g=B;B=0;if(g&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}g=Rb()|0;m=Q;Yua(l);w=m;x=g;y=z}Yua(j);Yua(i);if(y){u=w;v=x}else{A=w;C=x;k[h>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}}else{g=Rb()|0;u=Q;v=g}while(0);zb(s|0);A=u;C=v;k[h>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[h>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}while(0);n=p;o=q;vva(a);Qb(o|0)}}}function t8(a,b){a=a|0;b=b|0;return}function u8(a){a=a|0;Sqa(a);return}function v8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+4|0;e=a;Fka(c,d,126209);Fka(c,e,126233);if((k[e>>2]|0)==3){r=a;return}qoa(b,c,126257,496,k[d>>2]|0,0);if((k[e>>2]|0)!=4){r=a;return}Bma(b,496);r=a;return}function w8(a,b,c){a=a|0;b=b|0;c=c|0;return}function x8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,126209);hoa(b,c,496,k[d>>2]|0,534);r=a;return}function y8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function z8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+32|0;f=a+8|0;g=a;h=a+12|0;Fka(c,h,126209);zka(c,a+16|0,134882);k[g>>2]=129145;Ska(c,1,g);g=c+56|0;j=k[g>>2]|0;if((j|0)>0){l=c+32|0;m=j;j=0;n=0;while(1){if(!(i[(k[l>>2]|0)+n>>0]|0)){o=m;p=j}else{q=qh(b,j)|0;Uc[k[(k[q>>2]|0)+480>>2]&63](q,n,c,d,e,k[h>>2]|0);o=k[g>>2]|0;p=j+1|0}n=n+1|0;if((n|0)>=(o|0))break;else{m=o;j=p}}}k[f>>2]=129145;Lka(c,1,f);Zka(c,b,135923,674);Zka(c,b,135944,677);if((k[c+40>>2]|0)!=302){Zka(c,b,126277,225);Zka(c,b,137867,206);Zka(c,b,135039,653);r=a;return}Zka(c,b,135096,679);Zka(c,b,126277,225);Zka(c,b,137867,206);Zka(c,b,135039,653);r=a;return}function A8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;e=r;r=r+16|0;d=e+8|0;a=e+4|0;f=e;k[a>>2]=0;YN(b,Ika(c,128031,228)|0);YN(b,Ika(c,126233,237)|0);YN(b,Ika(c,126289,238)|0);YN(b,Ika(c,126307,240)|0);YN(b,Ika(c,126209,233)|0);Hka(c,a,d,126328);g=Qqa(12)|0;B=0;eb(518,g|0,242,k[d>>2]|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;Sqa(g);j=i;l=h;Qb(l|0)}YN(b,g);g=k[d>>2]|0;do if(!g)m=0;else{h=Qqa(16)|0;B=0;ib(294,h|0,243,k[a>>2]|0,g|0);i=B;B=0;if(!(i&1)){YN(b,h);m=k[d>>2]|0;break}i=Rb()|0;n=Q;Sqa(h);j=n;l=i;Qb(l|0)}while(0);Nka(c,a,m,126328);Fka(c,f,128031);m=k[f>>2]|0;if(!m){YN(b,Ika(c,128061,235)|0);YN(b,Ika(c,128045,236)|0);r=e;return}if((m|0)<=0){r=e;return}YN(b,Ika(c,126356,229)|0);YN(b,Ika(c,126369,230)|0);YN(b,Ika(c,126382,231)|0);YN(b,Ika(c,126395,232)|0);YN(b,Ika(c,128061,235)|0);YN(b,Ika(c,128045,236)|0);YN(b,Ika(c,126408,234)|0);YN(b,Ika(c,126426,241)|0);r=e;return}function B8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,126449,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,112,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function C8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;a=r;r=r+80|0;c=a+56|0;d=a+48|0;e=a+40|0;f=a+32|0;g=a+24|0;h=a+16|0;i=a+8|0;j=a;l=a+64|0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;pp(b,c,229);pp(b,d,235);cp(b,l,298);Vo(b);o=Wo(b,725)|0;q=Wo(b,726)|0;s=Wo(b,728)|0;t=Wo(b,217)|0;if((k[l>>2]|0)==300){l=Wo(b,227)|0;u=Wo(b,215)|0;v=l}else{l=Wo(b,225)|0;u=Wo(b,214)|0;v=l}l=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((m|0)>0){w=0;do{x=k[(k[l>>2]|0)+32>>2]|0;y=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[x&1023](l,y,w);nd[k[(k[o>>2]|0)+48>>2]&1023](o,h,l);nd[k[(k[q>>2]|0)+48>>2]&1023](q,j,l);nd[k[(k[s>>2]|0)+48>>2]&1023](s,i,l);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,l);nd[k[(k[t>>2]|0)+48>>2]&1023](t,g,l);nd[k[(k[v>>2]|0)+48>>2]&1023](v,e,l);z=+p[h>>3];A=+p[i>>3];B=(z+A)*.5;C=(z-A)*.5;A=+p[j>>3];z=+aa(+(A*A+C*C));C=B+z;A=B-z;y=+$(+A)>+$(+C);z=y?C:A;B=y?A:C;C=+aa(+(z*z+(B*B-B*z)))*.7071067811865475;z=+p[g>>3];B=+ba(+(+p[d>>3]/+p[f>>3]),+z);if(C>B){A=+ba(+(B/C),+(1.0/z));z=1.0-A*+ja(+(-(C-B)/(+p[c>>3]-B)));D=z-+p[e>>3]}else D=0.0;p[n+(w<<3)>>3]=D;w=w+1|0}while((w|0)!=(m|0))}m=k[b>>2]|0;w=k[m+48>>2]|0;e=Hc[k[m+128>>2]&511](b)|0;rd[w&511](b,226,n,e);Tqa(n);if(!l){r=a;return}Ec[k[(k[l>>2]|0)+4>>2]&1023](l);r=a;return}function D8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0,Ca=0.0;a=r;r=r+304|0;c=a+288|0;d=a+96|0;e=a+88|0;f=a+80|0;g=a+72|0;h=a+64|0;i=a+56|0;j=a+48|0;l=a+40|0;m=a+32|0;n=a+24|0;o=a+16|0;q=a+8|0;s=a;t=a+284|0;u=a+280|0;v=a+144|0;w=a+128|0;x=a+116|0;y=a+104|0;z=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;A=Rqa(z>>>0>536870911?-1:z<<3)|0;pp(b,d,229);pp(b,e,230);pp(b,f,231);pp(b,g,234);pp(b,h,235);cp(b,u,298);switch(k[u>>2]|0){case 300:{C=2;break}case 302:{C=3;break}default:{D=v+56|0;E=v+4|0;k[v>>2]=27524;k[D>>2]=27544;B=0;wa(508,v+56|0,E|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;H=F;vva(D);Qb(H|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[D>>2]=27488;B=0;va(448,E|0);F=B;B=0;do if(F&1){I=Rb()|0;J=Q;K=I}else{k[E>>2]=27560;I=v+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(c);Yua(I);Ava(E);J=M;K=L;break}Yua(c);B=0;L=Ia(40,v|0,143640,15)|0;M=B;B=0;if(!(M&1)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,w|0,126449,83);M=B;B=0;do if(!(M&1)){B=0;eb(502,x|0,126533,25);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(w);P=O;R=N;break}B=0;wa(510,y|0,E|0);N=B;B=0;if(N&1){N=Rb()|0;S=Q;T=N;U=1}else{B=0;ua(163,L|0,w|0,x|0,230,y|0);N=B;B=0;if(N&1)V=1;else{B=0;eb(503,L|0,1240,229);B=0;V=0}N=Rb()|0;O=Q;Yua(y);S=O;T=N;U=V}Yua(x);Yua(w);if(U){P=S;R=T}else{W=S;X=T;k[v>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(I);Ava(E);vva(D);Qb(X|0)}}else{N=Rb()|0;P=Q;R=N}while(0);zb(L|0);W=P;X=R;k[v>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(I);Ava(E);vva(D);Qb(X|0)}M=Rb()|0;W=Q;X=M;k[v>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(I);Ava(E);vva(D);Qb(X|0)}while(0);G=J;H=K;vva(D);Qb(H|0)}}Ec[k[(k[b>>2]|0)+80>>2]&1023](b);H=(C|0)==3;if(H)nq(b);D=Wo(b,716)|0;K=Wo(b,717)|0;J=Wo(b,719)|0;if(H){G=Wo(b,718)|0;X=Wo(b,720)|0;E=Wo(b,721)|0;Y=Wo(b,714)|0;Z=G;_=X;ca=E}else{Y=0;Z=0;_=0;ca=0}if((k[u>>2]|0)==300)da=Wo(b,227)|0;else da=Wo(b,225)|0;cp(b,t,241);u=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((z|0)>0){E=(C|0)==2;ea=0.0;C=0;fa=0.0;ga=0.0;ha=0.0;while(1){X=k[(k[u>>2]|0)+32>>2]|0;G=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[X&1023](u,G,C);nd[k[(k[da>>2]|0)+48>>2]&1023](da,i,u);nd[k[(k[D>>2]|0)+48>>2]&1023](D,j,u);nd[k[(k[K>>2]|0)+48>>2]&1023](K,l,u);nd[k[(k[J>>2]|0)+48>>2]&1023](J,n,u);if(H){nd[k[(k[Z>>2]|0)+48>>2]&1023](Z,m,u);nd[k[(k[_>>2]|0)+48>>2]&1023](_,o,u);nd[k[(k[ca>>2]|0)+48>>2]&1023](ca,q,u)}ia=1.0-+p[i>>3];ja=+p[j>>3]/ia;ka=+p[l>>3]/ia;la=+p[n>>3]/ia;if(!H)if(E){ma=(ja+la)*.5;na=(ja-la)*.5;oa=+aa(+(ka*ka+na*na));na=ma+oa;pa=ma-oa;G=+$(+pa)>+$(+na);oa=G?na:pa;ma=G?pa:na;switch(k[t>>2]|0){case 0:{qa=+aa(+(oa*oa+(ma*ma-ma*oa)));break}case 1:{qa=ma;break}default:qa=ea}ma=qa-+p[h>>3];oa=+LY(-qa,0.0);na=+LY(ma,0.0);ma=+p[e>>3];pa=+ba(+na,+ma);na=+p[d>>3]*(pa-+p[g>>3]*+ba(+oa,+ma));ma=na*+ba(+(1.0/(1.0-+p[i>>3])),+(+p[f>>3]));p[A+(C<<3)>>3]=ma;ra=qa;sa=fa;ta=ga;xa=ha}else{ya=fa;za=ga;Aa=ha;Ba=45}else{ya=+p[m>>3]/ia;za=+p[o>>3]/ia;Aa=+p[q>>3]/ia;Ba=45}if((Ba|0)==45){Ba=0;switch(k[t>>2]|0){case 1:{nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,s,u);Ca=+p[s>>3]/(1.0-+p[i>>3]);break}case 0:{ia=ja-la;ma=la-Aa;la=Aa-ja;Ca=+aa(+(((ya*ya+(ka*ka+za*za))*6.0+(la*la+(ia*ia+ma*ma)))*.5));break}default:Ca=ea}ma=Ca-+p[h>>3];ia=+LY(-Ca,0.0);la=+LY(ma,0.0);ma=+p[e>>3];ka=+ba(+la,+ma);la=+p[d>>3]*(ka-+p[g>>3]*+ba(+ia,+ma));ma=la*+ba(+(1.0/(1.0-+p[i>>3])),+(+p[f>>3]));p[A+(C<<3)>>3]=ma;ra=Ca;sa=ya;ta=za;xa=Aa}C=C+1|0;if((C|0)==(z|0))break;else{ea=ra;fa=sa;ga=ta;ha=xa}}}z=k[b>>2]|0;C=k[z+48>>2]|0;f=Hc[k[z+128>>2]&511](b)|0;rd[C&511](b,226,A,f);Tqa(A);if(!u){r=a;return}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);r=a;return}function E8(a,b){a=a|0;b=b|0;return 0}function F8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,126449,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,329,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function G8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0.0,_=0.0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,xa=0.0;a=r;r=r+352|0;c=a+332|0;d=a+328|0;e=a+324|0;f=a+136|0;g=a+128|0;h=a+120|0;i=a+112|0;j=a+104|0;l=a+96|0;m=a+88|0;n=a+80|0;o=a+72|0;q=a+48|0;s=a+24|0;t=a;u=a+320|0;v=a+184|0;w=a+168|0;x=a+156|0;y=a+144|0;if(!($p(b)|0)){z=0;r=a;return z|0}k[u>>2]=0;cp(b,d,298);switch(k[d>>2]|0){case 300:{A=2;break}case 302:{A=3;break}default:{d=v+56|0;C=v+4|0;k[v>>2]=27524;k[d>>2]=27544;B=0;wa(508,v+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(d);Qb(F|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[d>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[C>>2]=27560;G=v+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(C);H=K;I=J;break}Yua(c);B=0;J=Ia(40,v|0,144350,19)|0;K=B;B=0;if(!(K&1)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,w|0,126449,83);K=B;B=0;do if(!(K&1)){B=0;eb(502,x|0,144189,13);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(w);N=M;O=L;break}B=0;wa(510,y|0,C|0);L=B;B=0;if(L&1){L=Rb()|0;P=Q;R=L;S=1}else{B=0;ua(163,J|0,w|0,x|0,347,y|0);L=B;B=0;if(L&1)T=1;else{B=0;eb(503,J|0,1240,229);B=0;T=0}L=Rb()|0;M=Q;Yua(y);P=M;R=L;S=T}Yua(x);Yua(w);if(S){N=P;O=R}else{U=R;V=P;k[v>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(d);Qb(U|0)}}else{L=Rb()|0;N=Q;O=L}while(0);zb(J|0);U=O;V=N;k[v>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(d);Qb(U|0)}K=Rb()|0;U=K;V=Q;k[v>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(d);Qb(U|0)}while(0);E=H;F=I;vva(d);Qb(F|0)}}F=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;d=gq(b,534)|0;I=Rqa(F>>>0>536870911?-1:F<<3)|0;H=ma(F,A)|0;E=H>>>0>536870911?-1:H<<3;H=Rqa(E)|0;U=Rqa(E)|0;E=(ma(A,A)|0)<<3;C=Rqa(E)|0;WEa(C|0,0,E|0)|0;Uo(b,u);pp(b,g,358);cp(b,e,237);E=Wo(b,674)|0;v=Wo(b,677)|0;V=(A|0)==3;if(V){W=0;X=0.0;Y=Wo(b,679)|0}else{W=1;X=+Zc[k[(k[b>>2]|0)+72>>2]&255](b);Y=0}N=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;O=Hc[k[(k[N>>2]|0)+8>>2]&511](N)|0;a:do if((O|0)<(Hc[k[(k[N>>2]|0)+12>>2]&511](N)|0)){P=N+8|0;R=d+12|0;S=s+8|0;w=t+16|0;x=C+(A+1<<3)|0;T=A<<1;y=C+(T+2<<3)|0;c=C+(A<<3)|0;D=C+8|0;K=C+(T<<3)|0;L=C+((T|1)<<3)|0;T=C+16|0;M=C+(A+2<<3)|0;Z=0.0;_=X;ba=O;while(1){Fc[k[(k[N>>2]|0)+24>>2]&1023](N,ba);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[u>>2]|0,N);nd[k[(k[b>>2]|0)+336>>2]&1023](b,I,N);nd[k[(k[E>>2]|0)+48>>2]&1023](E,m,N);rd[k[(k[E>>2]|0)+60>>2]&511](E,q,k[u>>2]|0,N);nd[k[(k[v>>2]|0)+48>>2]&1023](v,n,N);rd[k[(k[v>>2]|0)+60>>2]&511](v,s,k[u>>2]|0,N);if(V){nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,o,N);rd[k[(k[Y>>2]|0)+60>>2]&511](Y,t,k[u>>2]|0,N)}p[h>>3]=+p[P>>3]*+p[f>>3];ZX(I,1,F,1,h,1,1,0,I,1,F,0,k[R>>2]|0,1)|0;ca=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;da=Rqa(ca>>>0>536870911?-1:ca<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,da,N);if((ca|0)>0){ea=0;do{fa=+p[da+(ea<<3)>>3];ga=0;do{ha=H+((ma(ga,ca)|0)+ea<<3)|0;p[ha>>3]=fa;ga=ga+1|0}while((ga|0)!=(A|0));ea=ea+1|0}while((ea|0)!=(ca|0))}Tqa(da);ca=k[u>>2]|0;ea=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;ga=ma(ea,A)|0;ha=Rqa(ga>>>0>536870911?-1:ga<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ha,ca,N);if((ea|0)>0){ca=0;do{ga=0;do{ia=(ma(ga,ea)|0)+ca|0;p[U+(ia<<3)>>3]=+p[ha+(ia<<3)>>3];ga=ga+1|0}while((ga|0)!=(A|0));ca=ca+1|0}while((ca|0)!=(ea|0))}Tqa(ha);fa=+p[q>>3];ja=+p[S>>3];Z=V?+p[w>>3]:Z;ka=+p[g>>3]*+p[P>>3]*+p[f>>3];p[h>>3]=ka;p[C>>3]=fa*ka;p[x>>3]=ja*ka;if(V){p[y>>3]=Z*ka;ZX(H,3,F,1,C,3,3,0,H,3,F,0,k[R>>2]|0,1)|0;ka=+p[h>>3];p[C>>3]=ka*+p[m>>3];p[x>>3]=ka*+p[n>>3];p[y>>3]=ka*+p[o>>3]}else{ZX(H,A,F,1,C,A,A,0,H,A,F,0,k[R>>2]|0,1)|0;ka=+p[h>>3];p[C>>3]=ka*+p[m>>3];p[x>>3]=ka*+p[n>>3]}ZX(H,A,F,1,C,A,A,0,U,A,F,0,k[R>>2]|0,1)|0;b:do switch(k[e>>2]|0){case 2:{ka=+p[m>>3];ja=+p[n>>3];fa=ka*ka+ja*ja;if(V){la=+p[o>>3];na=_/((+aa(+(fa+la*la))+1.0e-08)*2.0);oa=ka*na;p[C>>3]=ka*oa;pa=ja*na;p[c>>3]=ka*pa;qa=na*la;p[K>>3]=ka*qa;p[D>>3]=oa*ja;p[x>>3]=ja*pa;na=pa*la;p[L>>3]=na;p[T>>3]=oa*la;p[M>>3]=na;p[y>>3]=la*qa;ra=_;break b}else{qa=_/((+aa(+fa)+1.0e-08)*2.0);fa=ka*qa;p[C>>3]=ka*fa;la=ja*qa;p[c>>3]=ka*la;p[D>>3]=fa*ja;p[x>>3]=ja*la;ra=_;break b}break}case 1:{if(W){Fc[k[(k[E>>2]|0)+64>>2]&1023](E,m);Fc[k[(k[v>>2]|0)+64>>2]&1023](v,n);la=_*.5;ja=la*+$(+(+p[m>>3]));p[C>>3]=ja;ja=la*+$(+(+p[n>>3]));p[x>>3]=ja;ra=_;break b}if(V){rd[k[(k[b>>2]|0)+108>>2]&511](b,i,j,l);ja=+p[m>>3];la=ja*ja;fa=+p[n>>3];ka=fa*fa;qa=+p[o>>3];na=qa*qa;oa=+aa(+(la+ka+na))+1.0e-14;pa=ja*+p[i>>3]/oa;sa=fa*+p[j>>3]/oa;ta=qa*+p[l>>3]/oa;xa=+aa(+(pa*pa+sa*sa+ta*ta));ta=xa/(oa*2.0);p[C>>3]=la*ta;la=ta*+$(+(ja*fa));p[D>>3]=la;oa=ta*+$(+(ja*qa));p[T>>3]=oa;p[c>>3]=la;p[x>>3]=ta*ka;ka=ta*+$(+(fa*qa));p[M>>3]=ka;p[K>>3]=oa;p[L>>3]=ka;p[y>>3]=ta*na;ra=xa}else ra=_;break}default:ra=_}while(0);if(((k[e>>2]|0)+-1|0)>>>0<2){if(!W){if(V){xa=+p[h>>3];p[C>>3]=xa*+p[C>>3];p[c>>3]=xa*+p[c>>3];p[K>>3]=xa*+p[K>>3];p[D>>3]=xa*+p[D>>3];p[x>>3]=xa*+p[x>>3];p[L>>3]=xa*+p[L>>3];p[T>>3]=xa*+p[T>>3];p[M>>3]=xa*+p[M>>3];p[y>>3]=xa*+p[y>>3]}}else{xa=+p[h>>3];p[C>>3]=xa*+p[C>>3];p[c>>3]=xa*+p[c>>3];p[D>>3]=xa*+p[D>>3];p[x>>3]=xa*+p[x>>3]}ZX(U,A,F,1,C,A,A,0,U,A,F,0,k[R>>2]|0,1)|0}ba=ba+1|0;if((ba|0)>=(Hc[k[(k[N>>2]|0)+12>>2]&511](N)|0))break a;else _=ra}}while(0);F=k[u>>2]|0;if(F)Tqa(F);k[u>>2]=0;Tqa(I);Tqa(H);Tqa(U);Tqa(C);Ec[k[(k[N>>2]|0)+4>>2]&1023](N);z=d;r=a;return z|0}function H8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;a=r;r=r+240|0;c=a+220|0;d=a+216|0;e=a+212|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+208|0;l=a+72|0;m=a+56|0;n=a+44|0;o=a+32|0;if(!($p(b)|0)){q=0;r=a;return q|0}k[j>>2]=0;cp(b,d,298);s=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;t=iq(b,534)|0;u=Rqa(s>>>0>536870911?-1:s<<3)|0;Uo(b,j);pp(b,g,358);cp(b,e,228);switch(k[e>>2]|0){case 0:{e=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;v=Rqa(e>>>0>536870911?-1:e<<3)|0;if((e|0)>0)WEa(v|0,0,e<<3|0)|0;e=k[b>>2]|0;w=k[e+48>>2]|0;x=Hc[k[e+128>>2]&511](b)|0;rd[w&511](b,226,v,x);Tqa(v);break}case 1:{D8(0,b);break}case 2:{C8(0,b);break}default:{v=l+56|0;x=l+4|0;k[l>>2]=27524;k[v>>2]=27544;B=0;wa(508,l+56|0,x|0);w=B;B=0;if(w&1){w=Rb()|0;y=Q;z=w;vva(v);Qb(z|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[v>>2]=27488;B=0;va(448,x|0);w=B;B=0;do if(w&1){e=Rb()|0;A=Q;C=e}else{k[x>>2]=27560;e=l+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(e);Ava(x);A=E;C=D;break}Yua(c);B=0;D=Ia(40,l|0,149721,19)|0;E=B;B=0;if(!(E&1)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,m|0,126449,83);E=B;B=0;do if(!(E&1)){B=0;eb(502,n|0,144203,13);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(m);H=F;I=G;break}B=0;wa(510,o|0,x|0);G=B;B=0;if(G&1){G=Rb()|0;J=G;K=Q;L=1}else{B=0;ua(163,D|0,m|0,n|0,531,o|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(o);J=G;K=F;L=M}Yua(n);Yua(m);if(L){H=J;I=K}else{N=J;O=K;k[l>>2]=27468;k[v>>2]=27488;k[x>>2]=27560;Yua(e);Ava(x);vva(v);Qb(N|0)}}else{F=Rb()|0;H=F;I=Q}while(0);zb(D|0);N=H;O=I;k[l>>2]=27468;k[v>>2]=27488;k[x>>2]=27560;Yua(e);Ava(x);vva(v);Qb(N|0)}E=Rb()|0;N=E;O=Q;k[l>>2]=27468;k[v>>2]=27488;k[x>>2]=27560;Yua(e);Ava(x);vva(v);Qb(N|0)}while(0);y=A;z=C;vva(v);Qb(z|0)}}z=Wo(b,226)|0;if((k[d>>2]|0)==300)P=Wo(b,227)|0;else P=Wo(b,225)|0;d=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;v=Hc[k[(k[d>>2]|0)+8>>2]&511](d)|0;a:do if((v|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0)){C=d+8|0;A=t+4|0;if((s|0)>0)R=v;else{y=v;while(1){Fc[k[(k[d>>2]|0)+24>>2]&1023](d,y);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[j>>2]|0,d);nd[k[(k[b>>2]|0)+336>>2]&1023](b,u,d);nd[k[(k[P>>2]|0)+48>>2]&1023](P,i,d);nd[k[(k[z>>2]|0)+48>>2]&1023](z,h,d);y=y+1|0;if((y|0)>=(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0))break a}}do{Fc[k[(k[d>>2]|0)+24>>2]&1023](d,R);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[j>>2]|0,d);nd[k[(k[b>>2]|0)+336>>2]&1023](b,u,d);nd[k[(k[P>>2]|0)+48>>2]&1023](P,i,d);nd[k[(k[z>>2]|0)+48>>2]&1023](z,h,d);y=k[A>>2]|0;e=0;do{D=y+(e<<3)|0;p[D>>3]=+p[D>>3]+ +p[u+(e<<3)>>3]*(+p[f>>3]*+p[C>>3]*(+p[i>>3]+ +p[g>>3]*+p[h>>3]));e=e+1|0}while((e|0)!=(s|0));R=R+1|0}while((R|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0))}while(0);R=k[j>>2]|0;if(R)Tqa(R);k[j>>2]=0;Tqa(u);Ec[k[(k[d>>2]|0)+4>>2]&1023](d);q=t;r=a;return q|0}function I8(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,227);return}function J8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,126449,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,626,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function K8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0.0,x=0,y=0.0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;a=r;r=r+384|0;d=a+368|0;e=a+364|0;f=a;g=a+360|0;h=a+224|0;i=a+208|0;j=a+56|0;l=a+44|0;m=a+72|0;n=a+32|0;o=a+20|0;q=a+8|0;k[g>>2]=0;cp(c,e,298);s=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,g,534,943);u=Rqa(s>>>0>536870911?-1:s<<3)|0;pp(c,f,240);a:do if((s|0)>0){v=k[g>>2]|0;w=+p[f>>3];x=0;while(1){y=+p[b+(k[v+(x<<2)>>2]<<3)>>3];z=u+(x<<3)|0;p[z>>3]=y;A=+$(+y);p[t>>3]=A;C=k[t>>2]|0;D=k[t+4>>2]|0;if(D>>>0>2146435072|(D|0)==2146435072&C>>>0>0){E=5;break}if((C|0)==0&(D|0)==2146435072){E=29;break}if(!(y>w)){if(y<0.0)p[z>>3]=0.0}else p[z>>3]=w;x=x+1|0;if((x|0)>=(s|0))break a}if((E|0)==5){x=h+56|0;v=h+4|0;k[h>>2]=27524;k[x>>2]=27544;B=0;wa(508,h+56|0,v|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;G=z;vva(x);Qb(G|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[x>>2]=27488;B=0;va(448,v|0);z=B;B=0;do if(z&1){D=Rb()|0;H=Q;I=D}else{k[v>>2]=27560;D=h+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);C=B;B=0;if(C&1){C=Rb()|0;J=Q;Yua(d);Yua(D);Ava(v);H=J;I=C;break}Yua(d);B=0;C=Ia(40,h|0,135564,28)|0;J=B;B=0;b:do if(!(J&1)?(B=0,Xa(239,C|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,i|0,126449,83);L=B;B=0;do if(!(L&1)){B=0;eb(502,j|0,137199,23);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(i);O=M;P=N;break}B=0;wa(510,l|0,v|0);N=B;B=0;if(N&1){N=Rb()|0;R=Q;S=N;T=1}else{B=0;ua(163,K|0,i|0,j|0,650,l|0);N=B;B=0;if(N&1)U=1;else{B=0;eb(503,K|0,1240,229);B=0;U=0}N=Rb()|0;M=Q;Yua(l);R=M;S=N;T=U}Yua(j);Yua(i);if(T){O=S;P=R}else{V=S;W=R;break b}}else{N=Rb()|0;O=N;P=Q}while(0);zb(K|0);V=O;W=P}else E=20;while(0);if((E|0)==20){C=Rb()|0;V=C;W=Q}k[h>>2]=27468;k[x>>2]=27488;k[v>>2]=27560;Yua(D);Ava(v);vva(x);X=W;Y=V;Qb(Y|0)}while(0);F=H;G=I;vva(x);Qb(G|0)}else if((E|0)==29){v=m+56|0;z=m+4|0;k[m>>2]=27524;k[v>>2]=27544;B=0;wa(508,m+56|0,z|0);C=B;B=0;if(C&1){C=Rb()|0;Z=Q;_=C;vva(v);Qb(_|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[v>>2]=27488;B=0;va(448,z|0);C=B;B=0;do if(C&1){J=Rb()|0;aa=Q;ba=J}else{k[z>>2]=27560;J=m+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,z|0,d|0);L=B;B=0;if(L&1){L=Rb()|0;N=Q;Yua(d);Yua(J);Ava(z);aa=N;ba=L;break}Yua(d);B=0;L=Ia(40,m|0,135593,28)|0;N=B;B=0;c:do if(!(N&1)?(B=0,Xa(239,L|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,n|0,126449,83);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,o|0,137199,23);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(n);fa=da;ga=ea;break}B=0;wa(510,q|0,z|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ha=1;ia=Q;ja=ea}else{B=0;ua(163,M|0,n|0,o|0,651,q|0);ea=B;B=0;if(ea&1)ka=1;else{B=0;eb(503,M|0,1240,229);B=0;ka=0}ea=Rb()|0;da=Q;Yua(q);ha=ka;ia=da;ja=ea}Yua(o);Yua(n);if(ha){fa=ja;ga=ia}else{la=ia;ma=ja;break c}}else{ea=Rb()|0;fa=ea;ga=Q}while(0);zb(M|0);la=ga;ma=fa}else E=44;while(0);if((E|0)==44){L=Rb()|0;la=Q;ma=L}k[m>>2]=27468;k[v>>2]=27488;k[z>>2]=27560;Yua(J);Ava(z);vva(v);X=la;Y=ma;Qb(Y|0)}while(0);Z=aa;_=ba;vva(v);Qb(_|0)}}while(0);_=(k[e>>2]|0)==300;e=k[c>>2]|0;ba=k[e+48>>2]|0;aa=Hc[k[e+128>>2]&511](c)|0;if(_)rd[ba&511](c,227,u,aa);else rd[ba&511](c,225,u,aa);Tqa(u);u=k[g>>2]|0;if(!u){r=a;return}Tqa(u);r=a;return}function L8(a,b){a=a|0;b=b|0;RZ(b);return}function M8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=gq(b,534)|0;j=h<<1;l=j>>>0>536870911?-1:j<<3;j=Rqa(l)|0;m=Rqa(l)|0;l=Rqa(32)|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[l+20>>2]=0;k[l+24>>2]=0;k[l+28>>2]=0;Uo(b,f);n=Wo(b,674)|0;o=Wo(b,677)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=q+8|0;u=l+24|0;v=i+12|0;w=s;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[f>>2]|0,q);s=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;x=Rqa(s>>>0>536870911?-1:s<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,x,q);if((s|0)>0){y=0;do{z=+p[x+(y<<3)>>3];p[j+(y<<3)>>3]=z;p[j+(s+y<<3)>>3]=z;y=y+1|0}while((y|0)!=(s|0))}Tqa(x);s=k[f>>2]|0;y=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;A=y<<1;B=Rqa(A>>>0>536870911?-1:A<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,B,s,q);if((y|0)>0){s=0;do{p[m+(s<<3)>>3]=+p[B+(s<<3)>>3];A=y+s|0;p[m+(A<<3)>>3]=+p[B+(A<<3)>>3];s=s+1|0}while((s|0)!=(y|0))}Tqa(B);nd[k[(k[n>>2]|0)+48>>2]&1023](n,d,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,e,q);z=+p[c>>3];p[l>>3]=-(+p[t>>3]*+p[d>>3]*z);p[u>>3]=-(+p[t>>3]*+p[e>>3]*z);ZX(j,2,h,1,l,2,2,0,m,2,h,0,k[v>>2]|0,1)|0;w=w+1|0}while((w|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}w=k[f>>2]|0;if(w)Tqa(w);k[f>>2]=0;Tqa(j);Tqa(m);Tqa(l);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);g=i;r=a;return g|0}function N8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;if(!($p(b)|0)){f=0;r=a;return f|0}k[e>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=gq(b,534)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;Uo(b,e);j=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;l=Hc[k[(k[j>>2]|0)+8>>2]&511](j)|0;if((l|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0)){m=j+8|0;n=h+12|0;o=l;do{Fc[k[(k[j>>2]|0)+24>>2]&1023](j,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[e>>2]|0,j);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,j);p[c>>3]=+p[m>>3]*+p[d>>3];ZX(i,1,g,1,c,1,1,0,i,1,g,0,k[n>>2]|0,1)|0;o=o+1|0}while((o|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0))}o=k[e>>2]|0;if(o)Tqa(o);k[e>>2]=0;Tqa(i);Ec[k[(k[j>>2]|0)+4>>2]&1023](j);f=h;r=a;return f|0}function O8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;a=r;r=r+16|0;e=a+4|0;f=a;k[e>>2]=0;k[f>>2]=0;loa(e,f,0,0,d);g=d+20|0;if((th(k[g>>2]|0)|0)>0){d=0;do{h=M8(0,qh(k[g>>2]|0,d)|0)|0;if(h){IN(h,k[e>>2]|0,k[f>>2]|0);HN(h);Sqa(h)}d=d+1|0}while((d|0)<(th(k[g>>2]|0)|0))}g=k[e>>2]|0;if(k[g>>2]|0){d=k[k[g+4>>2]>>2]|0;Ec[k[(k[d>>2]|0)+12>>2]&1023](d)}d=k[f>>2]|0;if(!(k[d>>2]|0))i=d;else{g=k[k[d+4>>2]>>2]|0;Ec[k[(k[g>>2]|0)+12>>2]&1023](g);i=k[f>>2]|0}k[b>>2]=k[e>>2];if(c){k[c>>2]=i;r=a;return}if(!i){r=a;return}if((k[i>>2]|0)!=0?(c=k[i+4>>2]|0,(c|0)!=0):0){e=k[c>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(c)}Sqa(i);r=a;return}function P8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;a=r;r=r+16|0;d=a;cO(k[c+44>>2]|0,d,478);e=c+24|0;f=en(k[e>>2]|0,k[d>>2]|0,937)|0;g=fn(k[e>>2]|0,k[d>>2]|0,937)|0;d=Qqa(8)|0;B=0;va(485,d|0);e=B;B=0;a:do if(!(e&1)){do if(k[d>>2]|0){B=0;h=ya(423,4)|0;i=B;B=0;if(i&1)break a;B=0;eb(525,h|0,g|0,f|0);i=B;B=0;if(!(i&1)){k[d+4>>2]=h;break}i=Rb()|0;j=Q;Sqa(h);l=j;m=i;Sqa(d);Qb(m|0)}while(0);i=c+20|0;if((th(k[i>>2]|0)|0)>0){j=0;do{h=N8(0,qh(k[i>>2]|0,j)|0)|0;if(h){LN(h);KN(h,d);HN(h);Sqa(h)}j=j+1|0}while((j|0)<(th(k[i>>2]|0)|0))}if(!(k[d>>2]|0)){k[b>>2]=d;r=a;return}i=k[k[d+4>>2]>>2]|0;Ec[k[(k[i>>2]|0)+12>>2]&1023](i);k[b>>2]=d;r=a;return}while(0);a=Rb()|0;l=Q;m=a;Sqa(d);Qb(m|0)}function Q8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=r;r=r+16|0;d=a;k[d>>2]=0;loa(d,0,0,0,c);e=c+20|0;if((th(k[e>>2]|0)|0)>0){c=0;do{f=N8(0,qh(k[e>>2]|0,c)|0)|0;if(f){JN(f,k[d>>2]|0);HN(f);Sqa(f)}c=c+1|0}while((c|0)<(th(k[e>>2]|0)|0))}e=k[d>>2]|0;if(!(k[e>>2]|0)){g=e;k[b>>2]=g;r=a;return}else{c=k[k[e+4>>2]>>2]|0;Ec[k[(k[c>>2]|0)+12>>2]&1023](c);g=k[d>>2]|0;k[b>>2]=g;r=a;return}}function R8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;b=r;r=r+368|0;d=b+344|0;e=b+208|0;f=b+196|0;g=b+184|0;h=b+36|0;i=b+48|0;j=b+24|0;l=b+12|0;m=b;switch(cZ()|0){case 976:{n=Qqa(12)|0;k[n>>2]=28388;k[n+8>>2]=c;o=n+4|0;k[o>>2]=0;if(!c){k[a>>2]=n;r=b;return}B=0;p=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;q=B;B=0;if(q&1){q=Rb()|0;s=Q;Sqa(n);t=s;u=q;Qb(u|0)}else{WEa(p|0,0,c<<3|0)|0;k[o>>2]=p;k[a>>2]=n;r=b;return}break}case 977:{b=e+56|0;n=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,n|0);a=B;B=0;if(a&1){a=Rb()|0;v=Q;w=a;vva(b);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,n|0);a=B;B=0;do if(a&1){p=Rb()|0;x=Q;y=p}else{k[n>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,n|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(d);Yua(p);Ava(n);x=c;y=o;break}Yua(d);B=0;o=Ia(40,e|0,126559,39)|0;c=B;B=0;a:do if(!(c&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,126599,95);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,126695,7);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);C=z;D=A;break}B=0;wa(510,h|0,n|0);A=B;B=0;if(A&1){A=Rb()|0;E=Q;F=A;G=1}else{B=0;ua(163,q|0,f|0,g|0,75,h|0);A=B;B=0;if(A&1)H=1;else{B=0;eb(503,q|0,1240,229);B=0;H=0}A=Rb()|0;z=Q;Yua(h);E=z;F=A;G=H}Yua(g);Yua(f);if(G){C=F;D=E}else{I=F;J=E;break a}}else{A=Rb()|0;C=A;D=Q}while(0);zb(q|0);I=C;J=D}else K=22;while(0);if((K|0)==22){o=Rb()|0;I=o;J=Q}k[e>>2]=27468;k[b>>2]=27488;k[n>>2]=27560;Yua(p);Ava(n);vva(b);t=J;u=I;Qb(u|0)}while(0);v=x;w=y;vva(b);Qb(w|0);break}default:{w=i+56|0;b=i+4|0;k[i>>2]=27524;k[w>>2]=27544;B=0;wa(508,i+56|0,b|0);y=B;B=0;if(y&1){y=Rb()|0;L=Q;M=y;vva(w);Qb(M|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[w>>2]=27488;B=0;va(448,b|0);y=B;B=0;do if(y&1){x=Rb()|0;N=Q;O=x}else{k[b>>2]=27560;x=i+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;I=Q;Yua(d);Yua(x);Ava(b);N=I;O=v;break}Yua(d);B=0;v=Ia(40,i|0,126703,30)|0;I=B;B=0;b:do if(!(I&1)?(B=0,Xa(239,v|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,j|0,126599,95);n=B;B=0;do if(!(n&1)){B=0;eb(502,l|0,126695,7);e=B;B=0;if(e&1){e=Rb()|0;D=Q;Yua(j);P=e;R=D;break}B=0;wa(510,m|0,b|0);D=B;B=0;if(D&1){D=Rb()|0;S=1;T=Q;U=D}else{B=0;ua(163,J|0,j|0,l|0,79,m|0);D=B;B=0;if(D&1)V=1;else{B=0;eb(503,J|0,1240,229);B=0;V=0}D=Rb()|0;e=Q;Yua(m);S=V;T=e;U=D}Yua(l);Yua(j);if(S){P=U;R=T}else{W=T;X=U;break b}}else{D=Rb()|0;P=D;R=Q}while(0);zb(J|0);W=R;X=P}else K=45;while(0);if((K|0)==45){v=Rb()|0;W=Q;X=v}k[i>>2]=27468;k[w>>2]=27488;k[b>>2]=27560;Yua(x);Ava(b);vva(w);t=W;u=X;Qb(u|0)}while(0);L=N;M=O;vva(w);Qb(M|0)}}}function S8(a){a=a|0;Sqa(a);return}function T8(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+512|0;c=b+492|0;d=b+464|0;e=b+328|0;f=b+480|0;g=b+472|0;h=b+176|0;i=b+312|0;j=b+40|0;l=b+24|0;m=b+12|0;n=b;cO(k[a+44>>2]|0,d,228);switch(k[d>>2]|0){case 0:{a:do if(BY()|0){o=e+56|0;p=e+4|0;k[e>>2]=27524;k[o>>2]=27544;B=0;wa(508,e+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=e+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;Ia(40,e|0,126734,33)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,f|0,p|0),y=B,B=0,!(y&1)):0){B=0;ya(425,f|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(f);A=z;C=y;break}else{Yua(f);k[e>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);break a}}else D=15;while(0);if((D|0)==15){x=Rb()|0;A=Q;C=x}k[e>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);E=A;F=C;Qb(F|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}while(0);k[g>>2]=536;k[g+4>>2]=0;k[c>>2]=k[g>>2];k[c+4>>2]=k[g+4>>2];Fh(a,c);r=b;return}case 2:case 1:{if(!(BY()|0)){r=b;return}a=h+56|0;g=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;G=Q;H=t;vva(a);Qb(H|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);t=B;B=0;do if(t&1){w=Rb()|0;I=Q;J=w}else{k[g>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Yua(c);Yua(w);Ava(g);I=s;J=v;break}Yua(c);B=0;Ia(40,h|0,126768,58)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,i|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(425,i|0)|0;s=B;B=0;if(s&1){s=Rb()|0;C=Q;Yua(i);K=C;L=s;break}Yua(i);k[h>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(w);Ava(g);vva(a);r=b;return}else D=32;while(0);if((D|0)==32){v=Rb()|0;K=Q;L=v}k[h>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(w);Ava(g);vva(a);E=K;F=L;Qb(F|0)}while(0);G=I;H=J;vva(a);Qb(H|0);break}default:{H=j+56|0;a=j+4|0;k[j>>2]=27524;k[H>>2]=27544;B=0;wa(508,j+56|0,a|0);J=B;B=0;if(J&1){J=Rb()|0;M=Q;N=J;vva(H);Qb(N|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[H>>2]=27488;B=0;va(448,a|0);J=B;B=0;do if(J&1){I=Rb()|0;O=Q;P=I}else{k[a>>2]=27560;I=j+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;L=Q;Yua(c);Yua(I);Ava(a);O=L;P=G;break}Yua(c);B=0;G=Ia(40,j|0,126827,11)|0;L=B;B=0;b:do if((((!(L&1)?(B=0,K=ya(427,k[d>>2]|0)|0,g=B,B=0,!(g&1)):0)?(g=Lta(K)|0,B=0,h=Ia(40,G|0,K|0,g|0)|0,g=B,B=0,!(g&1)):0)?(B=0,g=Ia(40,h|0,127493,20)|0,h=B,B=0,!(h&1)):0)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,l|0,126839,74);h=B;B=0;do if(!(h&1)){B=0;eb(502,m|0,126914,7);K=B;B=0;if(K&1){K=Rb()|0;b=Q;Yua(l);R=b;S=K;break}B=0;wa(510,n|0,a|0);K=B;B=0;if(K&1){K=Rb()|0;T=1;U=Q;V=K}else{B=0;ua(163,g|0,l|0,m|0,27,n|0);K=B;B=0;if(K&1)W=1;else{B=0;eb(503,g|0,1240,229);B=0;W=0}K=Rb()|0;b=Q;Yua(n);T=W;U=b;V=K}Yua(m);Yua(l);if(T){R=U;S=V}else{X=U;Y=V;break b}}else{K=Rb()|0;R=Q;S=K}while(0);zb(g|0);X=R;Y=S}else D=53;while(0);if((D|0)==53){G=Rb()|0;X=Q;Y=G}k[j>>2]=27468;k[H>>2]=27488;k[a>>2]=27560;Yua(I);Ava(a);vva(H);E=X;F=Y;Qb(F|0)}while(0);M=O;N=P;vva(H);Qb(N|0)}}}function U8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0.0,mc=0,nc=0,oc=0.0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0.0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0;a=r;r=r+1520|0;d=a+1488|0;e=a+1484|0;f=a+16|0;g=a+8|0;h=a;j=a+1504|0;l=a+1503|0;m=a+1502|0;n=a+1501|0;o=a+1500|0;q=a+1480|0;s=a+1476|0;u=a+1472|0;v=a+1468|0;w=a+1464|0;x=a+1460|0;y=a+1456|0;z=a+1452|0;A=a+1448|0;C=a+1444|0;D=a+1440|0;E=a+1436|0;F=a+1420|0;G=a+1404|0;H=a+1388|0;I=a+1372|0;J=a+1356|0;K=a+1208|0;L=a+1424|0;M=a+1408|0;N=a+1392|0;O=a+1072|0;P=a+1376|0;R=a+1360|0;S=a+1344|0;T=a+920|0;U=a+1056|0;V=a+772|0;W=a+760|0;X=a+784|0;Y=a+472|0;Z=a+320|0;_=a+168|0;aa=a+624|0;ba=a+156|0;ca=a+144|0;da=a+132|0;ea=a+488|0;fa=a+120|0;ga=a+108|0;ha=a+96|0;ia=a+336|0;ja=a+84|0;ka=a+72|0;la=a+60|0;na=a+184|0;oa=a+48|0;pa=a+36|0;qa=a+24|0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;k[C>>2]=0;k[D>>2]=0;k[E>>2]=0;k[F>>2]=0;k[G>>2]=0;k[H>>2]=0;k[I>>2]=0;k[J>>2]=0;Gka(c,f,126946);Gka(c,g,126961);Gka(c,h,126982);zka(c,j,129324);zka(c,l,129346);zka(c,m,129368);zka(c,n,129391);zka(c,o,132257);ra=i[l>>0]|0;l=ra<<24>>24==0;sa=i[n>>0]|0;n=sa<<24>>24==0;ta=i[o>>0]|0;xa=ta<<24>>24==0;za=i[m>>0]|0;m=za<<24>>24==0;if(!((sa|ra|ta|za)<<24>>24)){r=a;return}if(!((ta<<24>>24!=0?1.0:0.0)+((sa<<24>>24!=0?1.0:0.0)+((za<<24>>24!=0?1.0:0.0)+((ra<<24>>24!=0?1.0:0.0)+((i[j>>0]|0)!=0?1.0:0.0))))>1.0)){a:do if(l){if(!m){k[e>>2]=738;break}if(!n){Fka(c,e,127039);break}if(xa){j=O+56|0;ra=O+4|0;k[O>>2]=27524;k[j>>2]=27544;B=0;wa(508,O+56|0,ra|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Ba=za;vva(j);Qb(Ba|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[j>>2]=27488;B=0;va(448,ra|0);za=B;B=0;do if(za&1){sa=Rb()|0;Ca=Q;Da=sa}else{k[ra>>2]=27560;sa=O+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[O+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ra|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Ea=Q;Yua(d);Yua(sa);Ava(ra);Ca=Ea;Da=ta;break}Yua(d);B=0;ta=Ia(40,O|0,127159,23)|0;Ea=B;B=0;b:do if(!(Ea&1)?(B=0,Xa(239,ta|0,0)|0,Fa=B,B=0,!(Fa&1)):0){Fa=Ab(20)|0;B=0;eb(502,P|0,127077,81);Ga=B;B=0;do if(!(Ga&1)){B=0;eb(502,R|0,135838,17);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ja=Q;Yua(P);La=Ja;Ma=Ha;break}B=0;wa(510,S|0,ra|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Na=1;Oa=Q;Qa=Ha}else{B=0;ua(163,Fa|0,P|0,R|0,85,S|0);Ha=B;B=0;if(Ha&1)Ra=1;else{B=0;eb(503,Fa|0,1240,229);B=0;Ra=0}Ha=Rb()|0;Ja=Q;Yua(S);Na=Ra;Oa=Ja;Qa=Ha}Yua(R);Yua(P);if(Na){La=Oa;Ma=Qa}else{Sa=Oa;Ta=Qa;break b}}else{Ha=Rb()|0;La=Q;Ma=Ha}while(0);zb(Fa|0);Sa=La;Ta=Ma}else Ua=62;while(0);if((Ua|0)==62){ta=Rb()|0;Sa=Q;Ta=ta}k[O>>2]=27468;k[j>>2]=27488;k[ra>>2]=27560;Yua(sa);Ava(ra);vva(j);Va=Sa;Wa=Ta;Qb(Wa|0)}while(0);Aa=Ca;Ba=Da;vva(j);Qb(Ba|0)}Fka(c,e,128764);do switch(k[e>>2]|0){case 749:{k[e>>2]=738;break a;break}case 750:{k[e>>2]=738;break a;break}case 752:{k[e>>2]=740;break a;break}case 751:{k[e>>2]=740;break a;break}case 753:{k[e>>2]=742;break a;break}case 755:{k[e>>2]=742;break a;break}case 754:{k[e>>2]=742;break a;break}case 758:{k[e>>2]=743;break a;break}case 756:{k[e>>2]=748;break a;break}case 757:{k[e>>2]=743;break a;break}default:{ra=K+56|0;za=K+4|0;k[K>>2]=27524;k[ra>>2]=27544;B=0;wa(508,K+56|0,za|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Ya=Q;Za=ta;vva(ra);Qb(Za|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[ra>>2]=27488;B=0;va(448,za|0);ta=B;B=0;do if(ta&1){Ea=Rb()|0;_a=Q;$a=Ea}else{k[za>>2]=27560;Ea=K+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[K+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,za|0,d|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ha=Q;Yua(d);Yua(Ea);Ava(za);_a=Ha;$a=Ga;break}Yua(d);B=0;Ga=Ia(40,K|0,127061,15)|0;Ha=B;B=0;c:do if((((!(Ha&1)?(B=0,Ja=ya(427,k[e>>2]|0)|0,ab=B,B=0,!(ab&1)):0)?(ab=Lta(Ja)|0,B=0,bb=Ia(40,Ga|0,Ja|0,ab|0)|0,ab=B,B=0,!(ab&1)):0)?(B=0,ab=Ia(40,bb|0,144645,14)|0,bb=B,B=0,!(bb&1)):0)?(B=0,Xa(239,ab|0,0)|0,ab=B,B=0,!(ab&1)):0){ab=Ab(20)|0;B=0;eb(502,L|0,127077,81);bb=B;B=0;do if(!(bb&1)){B=0;eb(502,M|0,135838,17);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;cb=Q;Yua(L);db=cb;fb=Ja;break}B=0;wa(510,N|0,za|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;gb=Q;hb=Ja;ib=1}else{B=0;ua(163,ab|0,L|0,M|0,81,N|0);Ja=B;B=0;if(Ja&1)jb=1;else{B=0;eb(503,ab|0,1240,229);B=0;jb=0}Ja=Rb()|0;cb=Q;Yua(N);gb=cb;hb=Ja;ib=jb}Yua(M);Yua(L);if(ib){db=gb;fb=hb}else{kb=gb;lb=hb;break c}}else{Ja=Rb()|0;db=Q;fb=Ja}while(0);zb(ab|0);kb=db;lb=fb}else Ua=39;while(0);if((Ua|0)==39){Ga=Rb()|0;kb=Q;lb=Ga}k[K>>2]=27468;k[ra>>2]=27488;k[za>>2]=27560;Yua(Ea);Ava(za);vva(ra);Va=kb;Wa=lb;Qb(Wa|0)}while(0);Ya=_a;Za=$a;vva(ra);Qb(Za|0)}}while(0)}else Fka(c,e,127016);while(0);if(!(i[o>>0]|0)){qoa(b,c,129044,497,k[e>>2]|0,0);if((k[c+40>>2]|0)==301){r=a;return}qoa(b,c,129067,497,k[e>>2]|0,1);r=a;return}Qka(c,H,0,0,129588);Qka(c,E,0,0,129435);Qka(c,F,0,0,136615);Qka(c,G,0,0,134962);o=c+40|0;switch(k[o>>2]|0){case 302:{Qka(c,A,w,x,129412);break}case 301:{Qka(c,A,w,x,129067);break}default:{Za=T+56|0;$a=T+4|0;k[T>>2]=27524;k[Za>>2]=27544;B=0;wa(508,T+56|0,$a|0);_a=B;B=0;if(_a&1){_a=Rb()|0;mb=Q;nb=_a;vva(Za);Qb(nb|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[Za>>2]=27488;B=0;va(448,$a|0);_a=B;B=0;do if(_a&1){Ya=Rb()|0;ob=Q;pb=Ya}else{k[$a>>2]=27560;Ya=T+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[T+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,$a|0,d|0);lb=B;B=0;if(lb&1){lb=Rb()|0;kb=Q;Yua(d);Yua(Ya);Ava($a);ob=kb;pb=lb;break}Yua(d);B=0;lb=Ia(40,T|0,134695,17)|0;kb=B;B=0;d:do if(!(kb&1)?(B=0,Xa(239,lb|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,U|0,127077,81);fb=B;B=0;do if(!(fb&1)){B=0;eb(502,V|0,135838,17);db=B;B=0;if(db&1){db=Rb()|0;hb=Q;Yua(U);qb=hb;rb=db;break}B=0;wa(510,W|0,$a|0);db=B;B=0;if(db&1){db=Rb()|0;sb=1;tb=Q;ub=db}else{B=0;ua(163,K|0,U|0,V|0,102,W|0);db=B;B=0;if(db&1)vb=1;else{B=0;eb(503,K|0,1240,229);B=0;vb=0}db=Rb()|0;hb=Q;Yua(W);sb=vb;tb=hb;ub=db}Yua(V);Yua(U);if(sb){qb=tb;rb=ub}else{wb=tb;xb=ub;break d}}else{db=Rb()|0;qb=Q;rb=db}while(0);zb(K|0);wb=qb;xb=rb}else Ua=89;while(0);if((Ua|0)==89){lb=Rb()|0;wb=Q;xb=lb}k[T>>2]=27468;k[Za>>2]=27488;k[$a>>2]=27560;Yua(Ya);Ava($a);vva(Za);Va=wb;Wa=xb;Qb(Wa|0)}while(0);mb=ob;nb=pb;vva(Za);Qb(nb|0)}}switch(k[o>>2]|0){case 302:{qoa(b,c,129044,497,k[e>>2]|0,0);qoa(b,c,129067,497,k[e>>2]|0,1);roa(b,c,k[A>>2]|0,k[w>>2]|0,k[x>>2]|0,497,k[e>>2]|0,2);Mka(c,k[A>>2]|0,129412);break}case 301:{qoa(b,c,129044,497,k[e>>2]|0,0);roa(b,c,k[A>>2]|0,k[w>>2]|0,k[x>>2]|0,497,k[e>>2]|0,1);Mka(c,k[A>>2]|0,129067);break}default:{o=X+56|0;nb=X+4|0;k[X>>2]=27524;k[o>>2]=27544;B=0;wa(508,X+56|0,nb|0);Za=B;B=0;if(Za&1){Za=Rb()|0;yb=Q;Bb=Za;vva(o);Qb(Bb|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[o>>2]=27488;B=0;va(448,nb|0);Za=B;B=0;do if(Za&1){pb=Rb()|0;Cb=Q;Db=pb}else{k[nb>>2]=27560;pb=X+36|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[X+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,nb|0,d|0);ob=B;B=0;if(ob&1){ob=Rb()|0;mb=Q;Yua(d);Yua(pb);Ava(nb);Cb=mb;Db=ob;break}Yua(d);B=0;ob=Ia(40,X|0,134695,17)|0;mb=B;B=0;e:do if(!(mb&1)?(B=0,Xa(239,ob|0,0)|0,xb=B,B=0,!(xb&1)):0){xb=Ab(20)|0;B=0;eb(502,Y|0,127077,81);wb=B;B=0;do if(!(wb&1)){B=0;eb(502,Z|0,135838,17);$a=B;B=0;if($a&1){$a=Rb()|0;T=Q;Yua(Y);Eb=T;Fb=$a;break}B=0;wa(510,_|0,nb|0);$a=B;B=0;if($a&1){$a=Rb()|0;Gb=1;Hb=Q;Ib=$a}else{B=0;ua(163,xb|0,Y|0,Z|0,116,_|0);$a=B;B=0;if($a&1)Jb=1;else{B=0;eb(503,xb|0,1240,229);B=0;Jb=0}$a=Rb()|0;T=Q;Yua(_);Gb=Jb;Hb=T;Ib=$a}Yua(Z);Yua(Y);if(Gb){Eb=Hb;Fb=Ib}else{Kb=Hb;Lb=Ib;break e}}else{$a=Rb()|0;Eb=Q;Fb=$a}while(0);zb(xb|0);Kb=Eb;Lb=Fb}else Ua=115;while(0);if((Ua|0)==115){ob=Rb()|0;Kb=Q;Lb=ob}k[X>>2]=27468;k[o>>2]=27488;k[nb>>2]=27560;Yua(pb);Ava(nb);vva(o);Va=Kb;Wa=Lb;Qb(Wa|0)}while(0);yb=Cb;Bb=Db;vva(o);Qb(Bb|0)}}Mka(c,k[H>>2]|0,129588);Mka(c,k[E>>2]|0,129435);Mka(c,k[F>>2]|0,136615);Mka(c,k[G>>2]|0,134962);Bb=th(b)|0;Qka(c,H,0,0,129588);Qka(c,I,0,0,134925);Qka(c,J,0,0,127183);f:do switch(k[e>>2]|0){case 738:{o=c+52|0;Db=k[o>>2]|0;if((Db|0)>0){Cb=c+36|0;yb=c+100|0;Lb=c+56|0;Kb=Db;Db=Bb;nb=0;while(1){if((k[(k[Cb>>2]|0)+(nb<<2)>>2]|0)!=0?(~~+p[(k[H>>2]|0)+(nb<<3)>>3]|0)==534:0){X=Qqa(32)|0;Fb=Db+1|0;B=0;Pa(1,X|0,Fb|0,nb+1+(k[yb>>2]|0)+Kb+(k[Lb>>2]|0)|0,0,+(+p[f>>3]*+p[g>>3]*(+p[(k[I>>2]|0)+(nb<<3)>>3]-+p[(k[J>>2]|0)+(nb<<3)>>3])/+p[h>>3]),497);Eb=B;B=0;if(Eb&1){Mb=X;break}ih(b,X)|0;Nb=k[o>>2]|0;Ob=Fb}else{Nb=Kb;Ob=Db}nb=nb+1|0;if((nb|0)>=(Nb|0))break f;else{Kb=Nb;Db=Ob}}Db=Rb()|0;Kb=Q;Sqa(Mb);Va=Kb;Wa=Db;Qb(Wa|0)}break}case 740:{Db=c+52|0;Kb=k[Db>>2]|0;if((Kb|0)>0){nb=c+36|0;o=c+100|0;Lb=c+56|0;yb=Kb;Kb=Bb;Cb=0;while(1){if((k[(k[nb>>2]|0)+(Cb<<2)>>2]|0)!=0?(~~+p[(k[H>>2]|0)+(Cb<<3)>>3]|0)==534:0){pb=Qqa(32)|0;Fb=Kb+1|0;B=0;Pa(1,pb|0,Fb|0,Cb+1+(k[o>>2]|0)+yb+(k[Lb>>2]|0)|0,0,+(+p[f>>3]*+p[g>>3]*(+p[(k[I>>2]|0)+(Cb<<3)>>3]-+p[(k[J>>2]|0)+(Cb<<3)>>3])/+p[h>>3]),497);X=B;B=0;if(X&1){Pb=pb;break}ih(b,pb)|0;Sb=k[Db>>2]|0;Tb=Fb}else{Sb=yb;Tb=Kb}Cb=Cb+1|0;if((Cb|0)>=(Sb|0))break f;else{yb=Sb;Kb=Tb}}Kb=Rb()|0;yb=Q;Sqa(Pb);Va=yb;Wa=Kb;Qb(Wa|0)}break}case 742:{Kb=c+52|0;yb=k[Kb>>2]|0;if((yb|0)>0){Cb=c+36|0;Db=c+100|0;Lb=c+64|0;o=yb;yb=Bb;nb=0;while(1){if((k[(k[Cb>>2]|0)+(nb<<2)>>2]|0)!=0?(~~+p[(k[H>>2]|0)+(nb<<3)>>3]|0)==534:0){Fb=Qqa(32)|0;pb=yb+1|0;B=0;Pa(1,Fb|0,pb|0,nb+1+(k[Db>>2]|0)+o+(k[Lb>>2]|0)|0,0,+(+p[f>>3]*+p[g>>3]*(+p[(k[I>>2]|0)+(nb<<3)>>3]-+p[(k[J>>2]|0)+(nb<<3)>>3])/+p[h>>3]),497);X=B;B=0;if(X&1){Ub=Fb;break}ih(b,Fb)|0;Vb=k[Kb>>2]|0;Wb=pb}else{Vb=o;Wb=yb}nb=nb+1|0;if((nb|0)>=(Vb|0))break f;else{o=Vb;yb=Wb}}yb=Rb()|0;o=Q;Sqa(Ub);Va=o;Wa=yb;Qb(Wa|0)}break}case 743:{yb=c+52|0;o=k[yb>>2]|0;if((o|0)>0){nb=c+36|0;Kb=c+100|0;Lb=c+64|0;Db=c+56|0;Cb=c+60|0;pb=o;o=Bb;Fb=0;while(1){if((k[(k[nb>>2]|0)+(Fb<<2)>>2]|0)!=0?(~~+p[(k[H>>2]|0)+(Fb<<3)>>3]|0)==534:0){X=Qqa(32)|0;Eb=o+1|0;B=0;Pa(1,X|0,Eb|0,Fb+1+(k[Kb>>2]|0)+pb+(k[Lb>>2]|0)+(k[Db>>2]|0)+(k[Cb>>2]|0)|0,0,+(+p[f>>3]*+p[g>>3]*(+p[(k[I>>2]|0)+(Fb<<3)>>3]-+p[(k[J>>2]|0)+(Fb<<3)>>3])/+p[h>>3]),497);Ib=B;B=0;if(Ib&1){Xb=X;break}ih(b,X)|0;Yb=k[yb>>2]|0;Zb=Eb}else{Yb=pb;Zb=o}Fb=Fb+1|0;if((Fb|0)>=(Yb|0))break f;else{pb=Yb;o=Zb}}o=Rb()|0;pb=Q;Sqa(Xb);Va=pb;Wa=o;Qb(Wa|0)}break}case 748:break;default:{o=aa+56|0;pb=aa+4|0;k[aa>>2]=27524;k[o>>2]=27544;B=0;wa(508,aa+56|0,pb|0);Fb=B;B=0;if(Fb&1){Fb=Rb()|0;_b=Q;$b=Fb;vva(o);Qb($b|0)}k[aa+128>>2]=0;k[aa+132>>2]=-1;k[aa>>2]=27468;k[o>>2]=27488;B=0;va(448,pb|0);Fb=B;B=0;do if(Fb&1){yb=Rb()|0;ac=Q;bc=yb}else{k[pb>>2]=27560;yb=aa+36|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[aa+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,pb|0,d|0);Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Db=Q;Yua(d);Yua(yb);Ava(pb);ac=Db;bc=Cb;break}Yua(d);B=0;Cb=Ia(40,aa|0,149721,19)|0;Db=B;B=0;g:do if(!(Db&1)?(B=0,Xa(239,Cb|0,0)|0,Lb=B,B=0,!(Lb&1)):0){Lb=Ab(20)|0;B=0;eb(502,ba|0,127077,81);Kb=B;B=0;do if(!(Kb&1)){B=0;eb(502,ca|0,135838,17);nb=B;B=0;if(nb&1){nb=Rb()|0;Eb=Q;Yua(ba);cc=Eb;dc=nb;break}B=0;wa(510,da|0,pb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;ec=1;fc=Q;gc=nb}else{B=0;ua(163,Lb|0,ba|0,ca|0,173,da|0);nb=B;B=0;if(nb&1)hc=1;else{B=0;eb(503,Lb|0,1240,229);B=0;hc=0}nb=Rb()|0;Eb=Q;Yua(da);ec=hc;fc=Eb;gc=nb}Yua(ca);Yua(ba);if(ec){cc=fc;dc=gc}else{ic=fc;jc=gc;break g}}else{nb=Rb()|0;cc=Q;dc=nb}while(0);zb(Lb|0);ic=cc;jc=dc}else Ua=171;while(0);if((Ua|0)==171){Cb=Rb()|0;ic=Q;jc=Cb}k[aa>>2]=27468;k[o>>2]=27488;k[pb>>2]=27560;Yua(yb);Ava(pb);vva(o);Va=ic;Wa=jc;Qb(Wa|0)}while(0);_b=ac;$b=bc;vva(o);Qb($b|0)}}while(0);Mka(c,k[H>>2]|0,129588);Mka(c,k[I>>2]|0,134925);Mka(c,k[J>>2]|0,127183);r=a;return}Qka(c,y,q,s,129044);Qka(c,z,u,v,129067);Qka(c,A,w,x,129412);Qka(c,C,0,0,129090);$b=c+40|0;if((((k[$b>>2]|0)==302?(Qka(c,D,0,0,127193),(k[$b>>2]|0)==302):0)?(Qka(c,E,0,0,129435),(k[$b>>2]|0)==302):0)?(Qka(c,F,0,0,136615),(k[$b>>2]|0)==302):0)Qka(c,G,0,0,134962);Qka(c,H,0,0,129588);Qka(c,I,0,0,134925);Qka(c,J,0,0,127183);bc=k[s>>2]|0;ac=Rqa(bc>>>0>536870911?-1:bc<<3)|0;if((bc|0)>0){_b=k[y>>2]|0;jc=ma((k[q>>2]|0)+-1|0,bc)|0;ic=0;do{p[ac+(ic<<3)>>3]=+p[_b+(jc+ic<<3)>>3];ic=ic+1|0}while((ic|0)<(bc|0))}bc=k[v>>2]|0;ic=Rqa(bc>>>0>536870911?-1:bc<<3)|0;if((bc|0)>0){jc=k[z>>2]|0;_b=ma((k[u>>2]|0)+-1|0,bc)|0;aa=0;do{p[ic+(aa<<3)>>3]=+p[jc+(_b+aa<<3)>>3];aa=aa+1|0}while((aa|0)<(bc|0))}bc=k[x>>2]|0;aa=Rqa(bc>>>0>536870911?-1:bc<<3)|0;if((bc|0)>0){_b=k[A>>2]|0;jc=ma((k[w>>2]|0)+-1|0,bc)|0;dc=0;do{p[aa+(dc<<3)>>3]=+p[_b+(jc+dc<<3)>>3];dc=dc+1|0}while((dc|0)<(bc|0))}bc=c+52|0;dc=k[bc>>2]|0;h:do if((dc|0)>0){jc=c+36|0;_b=c+108|0;cc=c+100|0;gc=dc;fc=0;ec=0;i:while(1){j:do if(!(k[(k[jc>>2]|0)+(ec<<2)>>2]|0))kc=fc;else{lc=+p[(k[H>>2]|0)+(ec<<3)>>3];if(lc==537.0){if(~~+p[(k[D>>2]|0)+(ec<<3)>>3]){ba=Qqa(32)|0;ca=ec+1|0;B=0;Pa(1,ba|0,fc+1+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,0,0.0,497);hc=B;B=0;if(hc&1){mc=ba;Ua=206;break i}ih(b,ba)|0;ba=Qqa(32)|0;hc=fc+2|0;B=0;Pa(1,ba|0,hc+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,1,0.0,497);da=B;B=0;if(da&1){nc=ba;Ua=207;break i}ih(b,ba)|0;ba=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ba>>3]));p[t>>3]=oc;da=k[t+4>>2]|0;if(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)pc=hc;else{hc=Qqa(32)|0;da=fc+3|0;B=0;Pa(1,hc|0,da+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,2,+(+p[ba>>3]),497);ba=B;B=0;if(ba&1){qc=hc;Ua=208;break i}ih(b,hc)|0;pc=da}da=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[da>>3]));p[t>>3]=oc;hc=k[t+4>>2]|0;if(hc>>>0>2146435072|(hc|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=pc;break}hc=Qqa(32)|0;ba=pc+1|0;B=0;Pa(1,hc|0,ba+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,3,+(+p[da>>3]),497);da=B;B=0;if(da&1){rc=hc;Ua=212;break i}ih(b,hc)|0;kc=ba;break}if(!~~+p[(k[C>>2]|0)+(ec<<3)>>3]){Ua=226;break i}ba=Qqa(32)|0;hc=ec+1|0;B=0;Pa(1,ba|0,fc+1+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,2,0.0,497);da=B;B=0;if(da&1){sc=ba;Ua=219;break i}ih(b,ba)|0;ba=Qqa(32)|0;da=fc+2|0;B=0;Pa(1,ba|0,da+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,3,0.0,497);ca=B;B=0;if(ca&1){tc=ba;Ua=220;break i}ih(b,ba)|0;ba=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ba>>3]));p[t>>3]=oc;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0)uc=da;else{da=Qqa(32)|0;ca=fc+3|0;B=0;Pa(1,da|0,ca+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,0,+(+p[ba>>3]),497);ba=B;B=0;if(ba&1){vc=da;Ua=221;break i}ih(b,da)|0;uc=ca}ca=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ca>>3]));p[t>>3]=oc;da=k[t+4>>2]|0;if(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=uc;break}da=Qqa(32)|0;ba=uc+1|0;B=0;Pa(1,da|0,ba+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,1,+(+p[ca>>3]),497);ca=B;B=0;if(ca&1){wc=da;Ua=225;break i}ih(b,da)|0;kc=ba;break}switch(~~lc|0){case 541:{if(~~+p[(k[D>>2]|0)+(ec<<3)>>3]){ba=Qqa(32)|0;da=ec+1|0;B=0;Pa(1,ba|0,fc+1+(k[_b>>2]|0)|0,da+(k[cc>>2]|0)|0,2,0.0,497);ca=B;B=0;if(ca&1){xc=ba;Ua=257;break i}ih(b,ba)|0;ba=Qqa(32)|0;B=0;Pa(1,ba|0,fc+2+(k[_b>>2]|0)|0,da+(k[cc>>2]|0)|0,3,0.0,497);ca=B;B=0;if(ca&1){yc=ba;Ua=258;break i}ih(b,ba)|0;ba=Qqa(32)|0;ca=fc+3|0;B=0;Pa(1,ba|0,ca+(k[_b>>2]|0)|0,da+(k[cc>>2]|0)|0,4,0.0,497);hc=B;B=0;if(hc&1){zc=ba;Ua=259;break i}ih(b,ba)|0;ba=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ba>>3]));p[t>>3]=oc;hc=k[t+4>>2]|0;if(hc>>>0>2146435072|(hc|0)==2146435072&(k[t>>2]|0)>>>0>0)Ac=ca;else{ca=Qqa(32)|0;hc=fc+4|0;B=0;Pa(1,ca|0,hc+(k[_b>>2]|0)|0,da+(k[cc>>2]|0)|0,0,+(+p[ba>>3]),497);ba=B;B=0;if(ba&1){Bc=ca;Ua=260;break i}ih(b,ca)|0;Ac=hc}hc=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[hc>>3]));p[t>>3]=oc;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=Ac;break j}ca=Qqa(32)|0;ba=Ac+1|0;B=0;Pa(1,ca|0,ba+(k[_b>>2]|0)|0,da+(k[cc>>2]|0)|0,1,+(+p[hc>>3]),497);hc=B;B=0;if(hc&1){Cc=ca;Ua=264;break i}ih(b,ca)|0;kc=ba;break j}if(!~~+p[(k[E>>2]|0)+(ec<<3)>>3]){Ua=282;break i}ba=Qqa(32)|0;ca=ec+1|0;B=0;Pa(1,ba|0,fc+1+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,0,0.0,497);hc=B;B=0;if(hc&1){Dc=ba;Ua=271;break i}ih(b,ba)|0;ba=Qqa(32)|0;hc=fc+2|0;B=0;Pa(1,ba|0,hc+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,1,0.0,497);da=B;B=0;if(da&1){Ec=ba;Ua=272;break i}ih(b,ba)|0;ba=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ba>>3]));p[t>>3]=oc;da=k[t+4>>2]|0;if(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)Fc=hc;else{hc=Qqa(32)|0;da=fc+3|0;B=0;Pa(1,hc|0,da+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,2,+(+p[ba>>3]),497);ba=B;B=0;if(ba&1){Gc=hc;Ua=273;break i}ih(b,hc)|0;Fc=da}da=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[da>>3]));p[t>>3]=oc;hc=k[t+4>>2]|0;if(hc>>>0>2146435072|(hc|0)==2146435072&(k[t>>2]|0)>>>0>0)Hc=Fc;else{hc=Qqa(32)|0;ba=Fc+1|0;B=0;Pa(1,hc|0,ba+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,3,+(+p[da>>3]),497);da=B;B=0;if(da&1){Ic=hc;Ua=277;break i}ih(b,hc)|0;Hc=ba}ba=(k[A>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ba>>3]));p[t>>3]=oc;hc=k[t+4>>2]|0;if(hc>>>0>2146435072|(hc|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=Hc;break j}hc=Qqa(32)|0;da=Hc+1|0;B=0;Pa(1,hc|0,da+(k[_b>>2]|0)|0,ca+(k[cc>>2]|0)|0,4,+(+p[ba>>3]),497);ba=B;B=0;if(ba&1){Jc=hc;Ua=281;break i}ih(b,hc)|0;kc=da;break j;break}case 538:{if(~~+p[(k[C>>2]|0)+(ec<<3)>>3]){da=Qqa(32)|0;hc=ec+1|0;B=0;Pa(1,da|0,fc+1+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,2,0.0,497);ba=B;B=0;if(ba&1){Kc=da;Ua=312;break i}ih(b,da)|0;da=Qqa(32)|0;B=0;Pa(1,da|0,fc+2+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,3,0.0,497);ba=B;B=0;if(ba&1){Lc=da;Ua=313;break i}ih(b,da)|0;da=Qqa(32)|0;ba=fc+3|0;B=0;Pa(1,da|0,ba+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,4,0.0,497);ca=B;B=0;if(ca&1){Mc=da;Ua=314;break i}ih(b,da)|0;da=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[da>>3]));p[t>>3]=oc;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0)Nc=ba;else{ba=Qqa(32)|0;ca=fc+4|0;B=0;Pa(1,ba|0,ca+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,0,+(+p[da>>3]),497);da=B;B=0;if(da&1){Oc=ba;Ua=315;break i}ih(b,ba)|0;Nc=ca}ca=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[ca>>3]));p[t>>3]=oc;ba=k[t+4>>2]|0;if(ba>>>0>2146435072|(ba|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=Nc;break j}ba=Qqa(32)|0;da=Nc+1|0;B=0;Pa(1,ba|0,da+(k[_b>>2]|0)|0,hc+(k[cc>>2]|0)|0,1,+(+p[ca>>3]),497);ca=B;B=0;if(ca&1){Pc=ba;Ua=319;break i}ih(b,ba)|0;kc=da;break j}if(!~~+p[(k[E>>2]|0)+(ec<<3)>>3]){Ua=337;break i}da=Qqa(32)|0;ba=ec+1|0;B=0;Pa(1,da|0,fc+1+(k[_b>>2]|0)|0,ba+(k[cc>>2]|0)|0,0,0.0,497);ca=B;B=0;if(ca&1){Qc=da;Ua=326;break i}ih(b,da)|0;da=Qqa(32)|0;ca=fc+2|0;B=0;Pa(1,da|0,ca+(k[_b>>2]|0)|0,ba+(k[cc>>2]|0)|0,1,0.0,497);hc=B;B=0;if(hc&1){Rc=da;Ua=327;break i}ih(b,da)|0;da=(k[y>>2]|0)+(ec<<3)|0;oc=+$(+(+p[da>>3]));p[t>>3]=oc;hc=k[t+4>>2]|0;if(hc>>>0>2146435072|(hc|0)==2146435072&(k[t>>2]|0)>>>0>0)Sc=ca;else{ca=Qqa(32)|0;hc=fc+3|0;B=0;Pa(1,ca|0,hc+(k[_b>>2]|0)|0,ba+(k[cc>>2]|0)|0,2,+(+p[da>>3]),497);da=B;B=0;if(da&1){Tc=ca;Ua=328;break i}ih(b,ca)|0;Sc=hc}hc=(k[z>>2]|0)+(ec<<3)|0;oc=+$(+(+p[hc>>3]));p[t>>3]=oc;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0)Uc=Sc;else{ca=Qqa(32)|0;da=Sc+1|0;B=0;Pa(1,ca|0,da+(k[_b>>2]|0)|0,ba+(k[cc>>2]|0)|0,3,+(+p[hc>>3]),497);hc=B;B=0;if(hc&1){Vc=ca;Ua=332;break i}ih(b,ca)|0;Uc=da}da=(k[A>>2]|0)+(ec<<3)|0;oc=+$(+(+p[da>>3]));p[t>>3]=oc;ca=k[t+4>>2]|0;if(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0){kc=Uc;break j}ca=Qqa(32)|0;hc=Uc+1|0;B=0;Pa(1,ca|0,hc+(k[_b>>2]|0)|0,ba+(k[cc>>2]|0)|0,4,+(+p[da>>3]),497);da=B;B=0;if(da&1){Wc=ca;Ua=336;break i}ih(b,ca)|0;kc=hc;break j;break}default:{hc=k[q>>2]|0;if((hc|0)==(gc|0)?(ca=(k[y>>2]|0)+(ec<<3)|0,oc=+$(+(+p[ca>>3])),p[t>>3]=oc,da=k[t+4>>2]|0,!(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){da=Qqa(32)|0;ba=fc+1|0;B=0;Pa(1,da|0,ba+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,0,+(+p[ca>>3]),497);ca=B;B=0;if(ca&1){Xc=da;Ua=364;break i}ih(b,da)|0;Yc=ba}else Ua=365;do if((Ua|0)==365){Ua=0;if((hc|0)!=(gc+1|0)){if(!(lc==535.0)){Yc=fc;break}ba=Qqa(40)|0;da=fc+1|0;B=0;ua(174,ba|0,da+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,0,497);ca=B;B=0;if(ca&1){Zc=ba;Ua=377;break i}ih(b,ba)|0;Yc=da;break}da=k[s>>2]|0;ba=Rqa(da>>>0>536870911?-1:da<<3)|0;if((da|0)>0){ca=k[y>>2]|0;Xb=ma(da,ec)|0;Zb=0;Yb=0;do{oc=+p[ca+(Xb+Zb<<3)>>3];p[ba+(Zb<<3)>>3]=oc;_c=+$(+oc);p[t>>3]=_c;Bb=k[t+4>>2]|0;Yb=Yb|(Bb>>>0<2146435072|(Bb|0)==2146435072&(k[t>>2]|0)>>>0<1);Zb=Zb+1|0}while((Zb|0)<(da|0));if(Yb){Zb=Qqa(36)|0;Xb=fc+1|0;B=0;Ka(11,Zb|0,Xb+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,0,da|0,ac|0,ba|0,497);ca=B;B=0;if(ca&1){$c=Zb;Ua=372;break i}ih(b,Zb)|0;ad=Xb}else ad=fc}else ad=fc;Tqa(ba);Yc=ad}while(0);hc=k[u>>2]|0;Lb=k[bc>>2]|0;if((hc|0)==(Lb|0)?(Xb=(k[z>>2]|0)+(ec<<3)|0,lc=+$(+(+p[Xb>>3])),p[t>>3]=lc,Zb=k[t+4>>2]|0,!(Zb>>>0>2146435072|(Zb|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Zb=Qqa(32)|0;ca=Yc+1|0;B=0;Pa(1,Zb|0,ca+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,1,+(+p[Xb>>3]),497);Xb=B;B=0;if(Xb&1){bd=Zb;Ua=382;break i}ih(b,Zb)|0;cd=ca}else Ua=383;do if((Ua|0)==383){Ua=0;if((hc|0)!=(Lb+1|0)){if(!(+p[(k[H>>2]|0)+(ec<<3)>>3]==535.0)){cd=Yc;break}ca=Qqa(40)|0;Zb=Yc+1|0;B=0;ua(174,ca|0,Zb+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,1,497);Xb=B;B=0;if(Xb&1){dd=ca;Ua=395;break i}ih(b,ca)|0;cd=Zb;break}Zb=k[v>>2]|0;ca=Rqa(Zb>>>0>536870911?-1:Zb<<3)|0;if((Zb|0)>0){Xb=k[z>>2]|0;ab=ma(Zb,ec)|0;Bb=0;Ub=0;do{lc=+p[Xb+(ab+Bb<<3)>>3];p[ca+(Bb<<3)>>3]=lc;_c=+$(+lc);p[t>>3]=_c;Wb=k[t+4>>2]|0;Ub=Ub|(Wb>>>0<2146435072|(Wb|0)==2146435072&(k[t>>2]|0)>>>0<1);Bb=Bb+1|0}while((Bb|0)<(Zb|0));if(Ub){Bb=Qqa(36)|0;ab=Yc+1|0;B=0;Ka(11,Bb|0,ab+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,1,Zb|0,ic|0,ca|0,497);Xb=B;B=0;if(Xb&1){ed=Bb;Ua=390;break i}ih(b,Bb)|0;fd=ab}else fd=Yc}else fd=Yc;Tqa(ca);cd=fd}while(0);k:do switch(~~+p[(k[H>>2]|0)+(ec<<3)>>3]|0){case 534:case 542:{Lb=k[w>>2]|0;hc=k[bc>>2]|0;if((Lb|0)==(hc|0)?(ab=(k[A>>2]|0)+(ec<<3)|0,_c=+$(+(+p[ab>>3])),p[t>>3]=_c,Bb=k[t+4>>2]|0,!(Bb>>>0>2146435072|(Bb|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Bb=Qqa(32)|0;Xb=cd+1|0;B=0;Pa(1,Bb|0,Xb+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,2,+(+p[ab>>3]),497);ab=B;B=0;if(ab&1){gd=Bb;Ua=401;break i}ih(b,Bb)|0;hd=Xb;break k}if((Lb|0)==(hc+1|0)){hc=k[x>>2]|0;Lb=Rqa(hc>>>0>536870911?-1:hc<<3)|0;do if((hc|0)>0){Xb=k[A>>2]|0;Bb=ma(hc,ec)|0;ab=0;ba=0;do{_c=+p[Xb+(Bb+ab<<3)>>3];p[Lb+(ab<<3)>>3]=_c;lc=+$(+_c);p[t>>3]=lc;da=k[t+4>>2]|0;ba=ba|(da>>>0<2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0<1);ab=ab+1|0}while((ab|0)<(hc|0));if(!ba){id=cd;break}ab=Qqa(36)|0;Bb=cd+1|0;B=0;Ka(11,ab|0,Bb+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)|0,2,hc|0,aa|0,Lb|0,497);Xb=B;B=0;if(Xb&1){jd=ab;Ua=409;break i}ih(b,ab)|0;id=Bb}else id=cd;while(0);Tqa(Lb);hd=id}else hd=cd;break}default:hd=cd}while(0);if((~~+p[(k[H>>2]|0)+(ec<<3)>>3]|0)!=534){kc=hd;break j}hc=Qqa(32)|0;ca=hd+1|0;B=0;Pa(1,hc|0,ca+(k[_b>>2]|0)|0,ec+1+(k[cc>>2]|0)+(k[bc>>2]|0)|0,0,+(+p[f>>3]*+p[g>>3]*(+p[(k[I>>2]|0)+(ec<<3)>>3]-+p[(k[J>>2]|0)+(ec<<3)>>3])/+p[h>>3]),497);Zb=B;B=0;if(Zb&1){kd=hc;Ua=414;break i}ih(b,hc)|0;kc=ca;break j}}}while(0);ec=ec+1|0;gc=k[bc>>2]|0;if((ec|0)>=(gc|0))break h;else fc=kc}switch(Ua|0){case 206:{fc=Rb()|0;gc=Q;Sqa(mc);Va=gc;Wa=fc;Qb(Wa|0);break}case 207:{fc=Rb()|0;gc=Q;Sqa(nc);Va=gc;Wa=fc;Qb(Wa|0);break}case 208:{fc=Rb()|0;gc=Q;Sqa(qc);Va=gc;Wa=fc;Qb(Wa|0);break}case 212:{fc=Rb()|0;gc=Q;Sqa(rc);Va=gc;Wa=fc;Qb(Wa|0);break}case 219:{fc=Rb()|0;gc=Q;Sqa(sc);Va=gc;Wa=fc;Qb(Wa|0);break}case 220:{fc=Rb()|0;gc=Q;Sqa(tc);Va=gc;Wa=fc;Qb(Wa|0);break}case 221:{fc=Rb()|0;gc=Q;Sqa(vc);Va=gc;Wa=fc;Qb(Wa|0);break}case 225:{fc=Rb()|0;gc=Q;Sqa(wc);Va=gc;Wa=fc;Qb(Wa|0);break}case 226:{fc=ea+56|0;gc=ea+4|0;k[ea>>2]=27524;k[fc>>2]=27544;B=0;wa(508,ea+56|0,gc|0);ec=B;B=0;if(ec&1){ec=Rb()|0;ld=Q;md=ec;vva(fc);Qb(md|0)}k[ea+128>>2]=0;k[ea+132>>2]=-1;k[ea>>2]=27468;k[fc>>2]=27488;B=0;va(448,gc|0);ec=B;B=0;do if(ec&1){cc=Rb()|0;nd=Q;od=cc}else{k[gc>>2]=27560;cc=ea+36|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[ea+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,gc|0,d|0);_b=B;B=0;if(_b&1){_b=Rb()|0;jc=Q;Yua(d);Yua(cc);Ava(gc);nd=jc;od=_b;break}Yua(d);B=0;_b=Ia(40,ea|0,127218,63)|0;jc=B;B=0;l:do if(!(jc&1)?(B=0,Xa(239,_b|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,fa|0,127077,81);yb=B;B=0;do if(!(yb&1)){B=0;eb(502,ga|0,135838,17);ca=B;B=0;if(ca&1){ca=Rb()|0;hc=Q;Yua(fa);pd=hc;qd=ca;break}B=0;wa(510,ha|0,gc|0);ca=B;B=0;if(ca&1){ca=Rb()|0;rd=1;sd=Q;td=ca}else{B=0;ua(163,o|0,fa|0,ga|0,258,ha|0);ca=B;B=0;if(ca&1)ud=1;else{B=0;eb(503,o|0,1240,229);B=0;ud=0}ca=Rb()|0;hc=Q;Yua(ha);rd=ud;sd=hc;td=ca}Yua(ga);Yua(fa);if(rd){pd=sd;qd=td}else{vd=sd;wd=td;break l}}else{ca=Rb()|0;pd=Q;qd=ca}while(0);zb(o|0);vd=pd;wd=qd}else Ua=241;while(0);if((Ua|0)==241){_b=Rb()|0;vd=Q;wd=_b}k[ea>>2]=27468;k[fc>>2]=27488;k[gc>>2]=27560;Yua(cc);Ava(gc);vva(fc);Va=vd;Wa=wd;Qb(Wa|0)}while(0);ld=nd;md=od;vva(fc);Qb(md|0);break}case 257:{gc=Rb()|0;ec=Q;Sqa(xc);Va=ec;Wa=gc;Qb(Wa|0);break}case 258:{gc=Rb()|0;ec=Q;Sqa(yc);Va=ec;Wa=gc;Qb(Wa|0);break}case 259:{gc=Rb()|0;ec=Q;Sqa(zc);Va=ec;Wa=gc;Qb(Wa|0);break}case 260:{gc=Rb()|0;ec=Q;Sqa(Bc);Va=ec;Wa=gc;Qb(Wa|0);break}case 264:{gc=Rb()|0;ec=Q;Sqa(Cc);Va=ec;Wa=gc;Qb(Wa|0);break}case 271:{gc=Rb()|0;ec=Q;Sqa(Dc);Va=ec;Wa=gc;Qb(Wa|0);break}case 272:{gc=Rb()|0;ec=Q;Sqa(Ec);Va=ec;Wa=gc;Qb(Wa|0);break}case 273:{gc=Rb()|0;ec=Q;Sqa(Gc);Va=ec;Wa=gc;Qb(Wa|0);break}case 277:{gc=Rb()|0;ec=Q;Sqa(Ic);Va=ec;Wa=gc;Qb(Wa|0);break}case 281:{gc=Rb()|0;ec=Q;Sqa(Jc);Va=ec;Wa=gc;Qb(Wa|0);break}case 282:{gc=ia+56|0;ec=ia+4|0;k[ia>>2]=27524;k[gc>>2]=27544;B=0;wa(508,ia+56|0,ec|0);_b=B;B=0;if(_b&1){_b=Rb()|0;xd=Q;yd=_b;vva(gc);Qb(yd|0)}k[ia+128>>2]=0;k[ia+132>>2]=-1;k[ia>>2]=27468;k[gc>>2]=27488;B=0;va(448,ec|0);_b=B;B=0;do if(_b&1){jc=Rb()|0;zd=Q;Ad=jc}else{k[ec>>2]=27560;jc=ia+36|0;k[jc>>2]=0;k[jc+4>>2]=0;k[jc+8>>2]=0;k[jc+12>>2]=0;k[ia+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ec|0,d|0);yb=B;B=0;if(yb&1){yb=Rb()|0;ca=Q;Yua(d);Yua(jc);Ava(ec);zd=ca;Ad=yb;break}Yua(d);B=0;yb=Ia(40,ia|0,127282,61)|0;ca=B;B=0;m:do if(!(ca&1)?(B=0,Xa(239,yb|0,0)|0,hc=B,B=0,!(hc&1)):0){hc=Ab(20)|0;B=0;eb(502,ja|0,127077,81);Zb=B;B=0;do if(!(Zb&1)){B=0;eb(502,ka|0,135838,17);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Bb=Q;Yua(ja);Bd=Bb;Cd=Ub;break}B=0;wa(510,la|0,ec|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Dd=1;Ed=Q;Fd=Ub}else{B=0;ua(163,hc|0,ja|0,ka|0,298,la|0);Ub=B;B=0;if(Ub&1)Gd=1;else{B=0;eb(503,hc|0,1240,229);B=0;Gd=0}Ub=Rb()|0;Bb=Q;Yua(la);Dd=Gd;Ed=Bb;Fd=Ub}Yua(ka);Yua(ja);if(Dd){Bd=Ed;Cd=Fd}else{Hd=Ed;Id=Fd;break m}}else{Ub=Rb()|0;Bd=Q;Cd=Ub}while(0);zb(hc|0);Hd=Bd;Id=Cd}else Ua=297;while(0);if((Ua|0)==297){yb=Rb()|0;Hd=Q;Id=yb}k[ia>>2]=27468;k[gc>>2]=27488;k[ec>>2]=27560;Yua(jc);Ava(ec);vva(gc);Va=Hd;Wa=Id;Qb(Wa|0)}while(0);xd=zd;yd=Ad;vva(gc);Qb(yd|0);break}case 312:{ec=Rb()|0;_b=Q;Sqa(Kc);Va=_b;Wa=ec;Qb(Wa|0);break}case 313:{ec=Rb()|0;_b=Q;Sqa(Lc);Va=_b;Wa=ec;Qb(Wa|0);break}case 314:{ec=Rb()|0;_b=Q;Sqa(Mc);Va=_b;Wa=ec;Qb(Wa|0);break}case 315:{ec=Rb()|0;_b=Q;Sqa(Oc);Va=_b;Wa=ec;Qb(Wa|0);break}case 319:{ec=Rb()|0;_b=Q;Sqa(Pc);Va=_b;Wa=ec;Qb(Wa|0);break}case 326:{ec=Rb()|0;_b=Q;Sqa(Qc);Va=_b;Wa=ec;Qb(Wa|0);break}case 327:{ec=Rb()|0;_b=Q;Sqa(Rc);Va=_b;Wa=ec;Qb(Wa|0);break}case 328:{ec=Rb()|0;_b=Q;Sqa(Tc);Va=_b;Wa=ec;Qb(Wa|0);break}case 332:{ec=Rb()|0;_b=Q;Sqa(Vc);Va=_b;Wa=ec;Qb(Wa|0);break}case 336:{ec=Rb()|0;_b=Q;Sqa(Wc);Va=_b;Wa=ec;Qb(Wa|0);break}case 337:{ec=na+56|0;_b=na+4|0;k[na>>2]=27524;k[ec>>2]=27544;B=0;wa(508,na+56|0,_b|0);fc=B;B=0;if(fc&1){fc=Rb()|0;Jd=Q;Kd=fc;vva(ec);Qb(Kd|0)}k[na+128>>2]=0;k[na+132>>2]=-1;k[na>>2]=27468;k[ec>>2]=27488;B=0;va(448,_b|0);fc=B;B=0;do if(fc&1){yb=Rb()|0;Ld=Q;Md=yb}else{k[_b>>2]=27560;yb=na+36|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[na+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,_b|0,d|0);ca=B;B=0;if(ca&1){ca=Rb()|0;cc=Q;Yua(d);Yua(yb);Ava(_b);Ld=cc;Md=ca;break}Yua(d);B=0;ca=Ia(40,na|0,127344,63)|0;cc=B;B=0;n:do if(!(cc&1)?(B=0,Xa(239,ca|0,0)|0,Zb=B,B=0,!(Zb&1)):0){Zb=Ab(20)|0;B=0;eb(502,oa|0,127077,81);o=B;B=0;do if(!(o&1)){B=0;eb(502,pa|0,135838,17);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Bb=Q;Yua(oa);Nd=Bb;Od=Ub;break}B=0;wa(510,qa|0,_b|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Pd=1;Qd=Q;Rd=Ub}else{B=0;ua(163,Zb|0,oa|0,pa|0,338,qa|0);Ub=B;B=0;if(Ub&1)Sd=1;else{B=0;eb(503,Zb|0,1240,229);B=0;Sd=0}Ub=Rb()|0;Bb=Q;Yua(qa);Pd=Sd;Qd=Bb;Rd=Ub}Yua(pa);Yua(oa);if(Pd){Nd=Qd;Od=Rd}else{Td=Qd;Ud=Rd;break n}}else{Ub=Rb()|0;Nd=Q;Od=Ub}while(0);zb(Zb|0);Td=Nd;Ud=Od}else Ua=352;while(0);if((Ua|0)==352){ca=Rb()|0;Td=Q;Ud=ca}k[na>>2]=27468;k[ec>>2]=27488;k[_b>>2]=27560;Yua(yb);Ava(_b);vva(ec);Va=Td;Wa=Ud;Qb(Wa|0)}while(0);Jd=Ld;Kd=Md;vva(ec);Qb(Kd|0);break}case 364:{_b=Rb()|0;fc=Q;Sqa(Xc);Va=fc;Wa=_b;Qb(Wa|0);break}case 372:{_b=Rb()|0;fc=Q;Sqa($c);Va=fc;Wa=_b;Qb(Wa|0);break}case 377:{_b=Rb()|0;fc=Q;Sqa(Zc);Va=fc;Wa=_b;Qb(Wa|0);break}case 382:{_b=Rb()|0;fc=Q;Sqa(bd);Va=fc;Wa=_b;Qb(Wa|0);break}case 390:{_b=Rb()|0;fc=Q;Sqa(ed);Va=fc;Wa=_b;Qb(Wa|0);break}case 395:{_b=Rb()|0;fc=Q;Sqa(dd);Va=fc;Wa=_b;Qb(Wa|0);break}case 401:{_b=Rb()|0;fc=Q;Sqa(gd);Va=fc;Wa=_b;Qb(Wa|0);break}case 409:{_b=Rb()|0;fc=Q;Sqa(jd);Va=fc;Wa=_b;Qb(Wa|0);break}case 414:{_b=Rb()|0;fc=Q;Sqa(kd);Va=fc;Wa=_b;Qb(Wa|0);break}}}while(0);Mka(c,k[y>>2]|0,129044);Mka(c,k[z>>2]|0,129067);Mka(c,k[A>>2]|0,129412);Mka(c,k[C>>2]|0,129090);if((((k[$b>>2]|0)==302?(Mka(c,k[D>>2]|0,127193),(k[$b>>2]|0)==302):0)?(Mka(c,k[E>>2]|0,129435),(k[$b>>2]|0)==302):0)?(Mka(c,k[F>>2]|0,136615),(k[$b>>2]|0)==302):0)Mka(c,k[G>>2]|0,134962);Mka(c,k[H>>2]|0,129588);Mka(c,k[I>>2]|0,134925);Mka(c,k[J>>2]|0,127183);Tqa(ac);Tqa(ic);Tqa(aa);r=a;return}function V8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+80|0;d=a+24|0;e=a;f=a+64|0;g=a+75|0;h=a+74|0;j=a+73|0;l=a+72|0;m=a+60|0;n=a+56|0;o=a+52|0;q=a+48|0;s=a+44|0;k[q>>2]=0;k[s>>2]=0;zka(c,h,129368);zka(c,l,132257);zka(c,g,129346);zka(c,j,129391);Fka(c,n,127408);if(!((i[j>>0]|i[g>>0]|i[l>>0]|i[h>>0])<<24>>24)){r=a;return}Qka(c,s,m,0,127426);h=k[m>>2]|0;a:do if((h|0)>0){l=c+36|0;g=c+100|0;j=f+4|0;t=c+104|0;u=h;v=0;w=0;while(1){x=w<<1;y=k[s>>2]|0;z=+p[y+(x<<3)>>3];if(!(k[(k[l>>2]|0)+(~~(z+-1.0)<<2)>>2]|0)){A=u;C=v}else{D=k[g>>2]|0;k[f>>2]=D+~~z;k[j>>2]=~~+p[y+((x|1)<<3)>>3]+D;D=Qqa(28)|0;x=v+1|0;B=0;ib(298,D|0,x+(k[t>>2]|0)|0,f|0,497);y=B;B=0;if(y&1){E=D;break}ih(b,D)|0;A=k[m>>2]|0;C=x}w=w+1|0;if((w|0)>=(A|0)){F=C;break a}else{u=A;v=C}}v=Rb()|0;u=Q;Sqa(E);G=u;H=v;Qb(H|0)}else F=0;while(0);Mka(c,k[s>>2]|0,127426);if(!(k[n>>2]|0)){r=a;return}Qka(c,q,o,0,127458);k[e>>2]=127458;k[e+4>>2]=137052;k[e+8>>2]=134945;k[e+12>>2]=134925;k[e+16>>2]=134962;Ska(c,5,e);e=k[o>>2]|0;b:do if((e|0)>0){n=c+32|0;s=c+104|0;E=e;C=F;A=0;while(1){if(!(i[(k[n>>2]|0)+(~~+p[(k[q>>2]|0)+(A*12<<3)+16>>3]+-1)>>0]|0)){I=E;J=C}else{m=Qqa(128)|0;f=C+1|0;B=0;ua(175,m|0,f+(k[s>>2]|0)|0,A|0,c|0,497);h=B;B=0;if(h&1){K=m;break}ih(b,m)|0;I=k[o>>2]|0;J=f}A=A+1|0;if((A|0)>=(I|0))break b;else{E=I;C=J}}C=Rb()|0;E=Q;Sqa(K);G=E;H=C;Qb(H|0)}while(0);k[d>>2]=127458;k[d+4>>2]=137052;k[d+8>>2]=134945;k[d+12>>2]=134925;k[d+16>>2]=134962;Lka(c,5,d);d=k[q>>2]|0;if(d)Tqa(d);k[q>>2]=0;r=a;return}function W8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0.0,W=0;a=r;r=r+112|0;d=a+80|0;e=a+56|0;f=a+32|0;g=a+16|0;h=a;j=a+111|0;l=a+110|0;m=a+109|0;n=a+108|0;o=a+104|0;k[o>>2]=-1;zka(c,j,129346);zka(c,l,129368);zka(c,m,129391);zka(c,n,132257);q=i[j>>0]|0;j=i[l>>0]|0;l=i[m>>0]|0;m=i[n>>0]|0;if((j&255^1)&(q&255^1)&(l&255^1)&(m&255^1)){r=a;return}if(!((q<<24>>24!=0?1.0:0.0)+(j<<24>>24!=0?1.0:0.0)+(l<<24>>24!=0?1.0:0.0)+(m<<24>>24!=0?1.0:0.0)>1.0)){do if(!(q<<24>>24)){if(j<<24>>24){k[o>>2]=738;s=539;break}if(l<<24>>24){Fka(c,o,127039);s=540;break}if(!(m<<24>>24))s=-1;else{Fka(c,o,128764);s=542}}else{Fka(c,o,127016);s=536}while(0);k[h>>2]=129090;k[h+4>>2]=129588;k[h+8>>2]=129116;Ska(c,3,h);if((k[c+40>>2]|0)!=300){k[g>>2]=136615;k[g+4>>2]=136636;k[g+8>>2]=129435;Ska(c,3,g)}hoa(b,c,497,k[o>>2]|0,s);k[f>>2]=136615;k[f+4>>2]=136636;k[f+8>>2]=129090;k[f+12>>2]=129588;k[f+16>>2]=129116;k[f+20>>2]=129435;Lka(c,6,f);r=a;return}if(!b){f=Qqa(36)|0;B=0;va(482,f|0);s=B;B=0;if(s&1){s=Rb()|0;o=Q;Sqa(f);t=o;u=s;Qb(u|0)}else v=f}else v=b;k[e>>2]=136615;k[e+4>>2]=136636;k[e+8>>2]=129090;k[e+12>>2]=129435;k[e+16>>2]=129588;k[e+20>>2]=129116;Ska(c,6,e);e=c+52|0;b=k[e>>2]|0;f=(b|0)>0;a:do if(!(i[n>>0]|0)){if(f){s=c+36|0;o=c+100|0;g=b;h=0;m=0;while(1){if(!(k[(k[s>>2]|0)+(h<<2)>>2]|0)){w=h+1|0;x=g;y=m}else{l=Qqa(144)|0;j=k[o>>2]|0;B=0;q=Xa(246,c|0,129588)|0;z=B;B=0;if(z&1){A=l;break}z=h+1|0;B=0;Ka(13,l|0,z+j|0,h|0,m|0,h|0,c|0,497,~~+p[q+(h<<3)>>3]|0);q=B;B=0;if(q&1){A=l;break}ih(v,l)|0;w=z;x=k[e>>2]|0;y=m+1|0}if((w|0)<(x|0)){g=x;h=w;m=y}else break a}m=Rb()|0;h=Q;Sqa(A);t=h;u=m;Qb(u|0)}}else{b:do if(f){m=c+36|0;h=c+100|0;g=b;o=0;s=0;while(1){if(!(k[(k[m>>2]|0)+(o<<2)>>2]|0)){C=o+1|0;D=g;E=s}else{z=(Jka(c,129588)|0)+(o<<3)|0;l=~~+p[z>>3];z=Qqa(144)|0;q=o+1|0;B=0;Ka(13,z|0,q+(k[h>>2]|0)|0,o|0,s|0,o|0,c|0,497,((l|0)==542?543:l)|0);l=B;B=0;if(l&1){F=z;break}ih(v,z)|0;C=q;D=k[e>>2]|0;E=s+1|0}if((C|0)<(D|0)){g=D;o=C;s=E}else{G=D;H=E;break b}}s=Rb()|0;o=Q;Sqa(F);t=o;u=s;Qb(u|0)}else{G=b;H=0}while(0);s=c+56|0;o=k[s>>2]|0;do if((o|0)>0){g=c+32|0;h=c+100|0;m=o;q=0;z=H;while(1){if(!(i[(k[g>>2]|0)+q>>0]|0)){I=q+1|0;J=m;K=z}else{l=Qqa(144)|0;j=k[e>>2]|0;L=q+1|0;B=0;Ka(13,l|0,L+(k[h>>2]|0)+j|0,j+q|0,z|0,0,c|0,497,543);j=B;B=0;if(j&1){M=l;break}$n(l);ih(v,l)|0;I=L;J=k[s>>2]|0;K=z+1|0}if((I|0)<(J|0)){m=J;q=I;z=K}else{N=K;O=30;break}}if((O|0)==30){P=k[e>>2]|0;R=N;break}z=Rb()|0;q=Q;Sqa(M);t=q;u=z;Qb(u|0)}else{P=G;R=H}while(0);if((P|0)>0){o=c+36|0;z=c+100|0;q=P;m=0;h=R;while(1){if(!(k[(k[o>>2]|0)+(m<<2)>>2]|0)){S=m+1|0;T=q;U=h}else{g=(Jka(c,129588)|0)+(m<<3)|0;V=+p[g>>3];g=Qqa(144)|0;L=k[e>>2]|0;l=k[s>>2]|0;j=m+1|0;B=0;Ka(13,g|0,j+(k[z>>2]|0)+L+l|0,L+m+l|0,h|0,m|0,c|0,497,544);l=B;B=0;if(l&1){W=g;break}if((~~V&-5|0)==536)$n(g);ih(v,g)|0;S=j;T=k[e>>2]|0;U=h+1|0}if((S|0)<(T|0)){q=T;m=S;h=U}else break a}h=Rb()|0;m=Q;Sqa(W);t=m;u=h;Qb(u|0)}}while(0);k[d>>2]=136615;k[d+4>>2]=136636;k[d+8>>2]=129090;k[d+12>>2]=129435;k[d+16>>2]=129588;k[d+20>>2]=129116;Lka(c,6,d);r=a;return}function X8(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0;a=r;r=r+896|0;e=a+876|0;f=a+704|0;g=a+864|0;h=a+852|0;i=a+840|0;j=a+552|0;l=a+688|0;m=a+536|0;n=a+248|0;o=a+400|0;p=a+96|0;q=a+84|0;s=a+72|0;t=a+264|0;u=a+60|0;v=a+48|0;w=a+36|0;x=a+112|0;y=a+24|0;z=a+12|0;A=a;do switch(d|0){case 536:{switch(c|0){case 301:{C=0;D=1;k[b>>2]=C;r=a;return D|0}case 300:case 302:{C=0;D=2;k[b>>2]=C;r=a;return D|0}default:{E=f+56|0;F=f+4|0;k[f>>2]=27524;k[E>>2]=27544;B=0;wa(508,f+56|0,F|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(E);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[E>>2]=27488;B=0;va(448,F|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[F>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,F|0,e|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(e);Yua(J);Ava(F);K=N;L=M;break}Yua(e);B=0;M=Ia(40,f|0,145839,27)|0;N=B;B=0;a:do if(!(N&1)?(B=0,Xa(239,M|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,g|0,127077,81);P=B;B=0;do if(!(P&1)){B=0;eb(502,h|0,135868,11);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(g);T=S;U=R;break}B=0;wa(510,i|0,F|0);R=B;B=0;if(R&1){R=Rb()|0;V=Q;W=R;X=1}else{B=0;ua(163,O|0,g|0,h|0,609,i|0);R=B;B=0;if(R&1)Y=1;else{B=0;eb(503,O|0,1240,229);B=0;Y=0}R=Rb()|0;S=Q;Yua(i);V=S;W=R;X=Y}Yua(h);Yua(g);if(X){T=V;U=W}else{Z=V;_=W;break a}}else{R=Rb()|0;T=Q;U=R}while(0);zb(O|0);Z=T;_=U}else $=19;while(0);if(($|0)==19){M=Rb()|0;Z=Q;_=M}k[f>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(E);aa=Z;ba=_;Qb(ba|0)}while(0);H=K;I=L;vva(E);Qb(I|0)}}break}case 540:{switch(c|0){case 301:{C=0;D=1;k[b>>2]=C;r=a;return D|0}case 302:{C=0;D=2;k[b>>2]=C;r=a;return D|0}default:{F=j+56|0;G=j+4|0;k[j>>2]=27524;k[F>>2]=27544;B=0;wa(508,j+56|0,G|0);M=B;B=0;if(M&1){M=Rb()|0;ca=Q;da=M;vva(F);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);M=B;B=0;do if(M&1){N=Rb()|0;ea=Q;fa=N}else{k[G>>2]=27560;N=j+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,G|0,e|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(e);Yua(N);Ava(G);ea=R;fa=P;break}Yua(e);B=0;P=Ia(40,j|0,145839,27)|0;R=B;B=0;b:do if(!(R&1)?(B=0,Xa(239,P|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,l|0,127077,81);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,m|0,135868,11);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(l);ja=ia;ka=ha;break}B=0;wa(510,n|0,G|0);ha=B;B=0;if(ha&1){ha=Rb()|0;la=1;ma=Q;na=ha}else{B=0;ua(163,S|0,l|0,m|0,617,n|0);ha=B;B=0;if(ha&1)oa=1;else{B=0;eb(503,S|0,1240,229);B=0;oa=0}ha=Rb()|0;ia=Q;Yua(n);la=oa;ma=ia;na=ha}Yua(m);Yua(l);if(la){ja=ma;ka=na}else{pa=ma;qa=na;break b}}else{ha=Rb()|0;ja=Q;ka=ha}while(0);zb(S|0);pa=ja;qa=ka}else $=44;while(0);if(($|0)==44){P=Rb()|0;pa=Q;qa=P}k[j>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(N);Ava(G);vva(F);aa=pa;ba=qa;Qb(ba|0)}while(0);ca=ea;da=fa;vva(F);Qb(da|0)}}break}case 543:{switch(c|0){case 301:{C=0;D=2;k[b>>2]=C;r=a;return D|0}case 302:{C=0;D=3;k[b>>2]=C;r=a;return D|0}default:{G=o+56|0;M=o+4|0;k[o>>2]=27524;k[G>>2]=27544;B=0;wa(508,o+56|0,M|0);E=B;B=0;if(E&1){E=Rb()|0;ra=Q;sa=E;vva(G);Qb(sa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[G>>2]=27488;B=0;va(448,M|0);E=B;B=0;do if(E&1){P=Rb()|0;ta=Q;xa=P}else{k[M>>2]=27560;P=o+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,M|0,e|0);R=B;B=0;if(R&1){R=Rb()|0;J=Q;Yua(e);Yua(P);Ava(M);ta=J;xa=R;break}Yua(e);B=0;R=Ia(40,o|0,145839,27)|0;J=B;B=0;c:do if(!(J&1)?(B=0,Xa(239,R|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,p|0,127077,81);O=B;B=0;do if(!(O&1)){B=0;eb(502,q|0,135868,11);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(p);za=ia;Aa=ha;break}B=0;wa(510,s|0,M|0);ha=B;B=0;if(ha&1){ha=Rb()|0;Ba=1;Ca=Q;Da=ha}else{B=0;ua(163,ga|0,p|0,q|0,625,s|0);ha=B;B=0;if(ha&1)Ea=1;else{B=0;eb(503,ga|0,1240,229);B=0;Ea=0}ha=Rb()|0;ia=Q;Yua(s);Ba=Ea;Ca=ia;Da=ha}Yua(q);Yua(p);if(Ba){za=Ca;Aa=Da}else{Fa=Ca;Ga=Da;break c}}else{ha=Rb()|0;za=Q;Aa=ha}while(0);zb(ga|0);Fa=za;Ga=Aa}else $=69;while(0);if(($|0)==69){R=Rb()|0;Fa=Q;Ga=R}k[o>>2]=27468;k[G>>2]=27488;k[M>>2]=27560;Yua(P);Ava(M);vva(G);aa=Fa;ba=Ga;Qb(ba|0)}while(0);ra=ta;sa=xa;vva(G);Qb(sa|0)}}break}case 544:{C=0;D=1;k[b>>2]=C;r=a;return D|0}case 534:{switch(c|0){case 301:{C=0;D=3;k[b>>2]=C;r=a;return D|0}case 302:{C=0;D=4;k[b>>2]=C;r=a;return D|0}default:{M=t+56|0;E=t+4|0;k[t>>2]=27524;k[M>>2]=27544;B=0;wa(508,t+56|0,E|0);F=B;B=0;if(F&1){F=Rb()|0;Ha=Q;Ja=F;vva(M);Qb(Ja|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[M>>2]=27488;B=0;va(448,E|0);F=B;B=0;do if(F&1){R=Rb()|0;Ka=Q;La=R}else{k[E>>2]=27560;R=t+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,E|0,e|0);J=B;B=0;if(J&1){J=Rb()|0;N=Q;Yua(e);Yua(R);Ava(E);Ka=N;La=J;break}Yua(e);B=0;J=Ia(40,t|0,145839,27)|0;N=B;B=0;d:do if(!(N&1)?(B=0,Xa(239,J|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,u|0,127077,81);S=B;B=0;do if(!(S&1)){B=0;eb(502,v|0,135868,11);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(u);Ma=ia;Na=ha;break}B=0;wa(510,w|0,E|0);ha=B;B=0;if(ha&1){ha=Rb()|0;Oa=1;Pa=Q;Qa=ha}else{B=0;ua(163,O|0,u|0,v|0,633,w|0);ha=B;B=0;if(ha&1)Ra=1;else{B=0;eb(503,O|0,1240,229);B=0;Ra=0}ha=Rb()|0;ia=Q;Yua(w);Oa=Ra;Pa=ia;Qa=ha}Yua(v);Yua(u);if(Oa){Ma=Pa;Na=Qa}else{Sa=Pa;Ta=Qa;break d}}else{ha=Rb()|0;Ma=Q;Na=ha}while(0);zb(O|0);Sa=Ma;Ta=Na}else $=95;while(0);if(($|0)==95){J=Rb()|0;Sa=Q;Ta=J}k[t>>2]=27468;k[M>>2]=27488;k[E>>2]=27560;Yua(R);Ava(E);vva(M);aa=Sa;ba=Ta;Qb(ba|0)}while(0);Ha=Ka;Ja=La;vva(M);Qb(Ja|0)}}break}case 537:{E=Rqa(16)|0;k[E>>2]=536;k[E+4>>2]=536;k[E+8>>2]=540;k[E+12>>2]=540;C=E;D=4;k[b>>2]=C;r=a;return D|0}case 541:{E=Rqa(20)|0;k[E>>2]=540;k[E+4>>2]=540;k[E+8>>2]=543;k[E+12>>2]=543;k[E+16>>2]=543;C=E;D=5;k[b>>2]=C;r=a;return D|0}case 538:{E=Rqa(20)|0;k[E>>2]=536;k[E+4>>2]=536;k[E+8>>2]=543;k[E+12>>2]=543;k[E+16>>2]=543;C=E;D=5;k[b>>2]=C;r=a;return D|0}case 535:case 539:{C=0;D=2;k[b>>2]=C;r=a;return D|0}default:{E=x+56|0;F=x+4|0;k[x>>2]=27524;k[E>>2]=27544;B=0;wa(508,x+56|0,F|0);G=B;B=0;if(G&1){G=Rb()|0;Ua=Q;Va=G;vva(E);Qb(Va|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[E>>2]=27488;B=0;va(448,F|0);G=B;B=0;do if(G&1){J=Rb()|0;Wa=Q;Ya=J}else{k[F>>2]=27560;J=x+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[x+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,F|0,e|0);N=B;B=0;if(N&1){N=Rb()|0;P=Q;Yua(e);Yua(J);Ava(F);Wa=P;Ya=N;break}Yua(e);B=0;N=Ia(40,x|0,127478,14)|0;P=B;B=0;e:do if((((!(P&1)?(B=0,S=ya(427,d|0)|0,ga=B,B=0,!(ga&1)):0)?(ga=Lta(S)|0,B=0,ha=Ia(40,N|0,S|0,ga|0)|0,ga=B,B=0,!(ga&1)):0)?(B=0,ga=Ia(40,ha|0,127493,20)|0,ha=B,B=0,!(ha&1)):0)?(B=0,Xa(239,ga|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,y|0,127077,81);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,z|0,135868,11);S=B;B=0;if(S&1){S=Rb()|0;ia=Q;Yua(y);Za=ia;_a=S;break}B=0;wa(510,A|0,F|0);S=B;B=0;if(S&1){S=Rb()|0;$a=1;ab=Q;bb=S}else{B=0;ua(163,ga|0,y|0,z|0,663,A|0);S=B;B=0;if(S&1)cb=1;else{B=0;eb(503,ga|0,1240,229);B=0;cb=0}S=Rb()|0;ia=Q;Yua(A);$a=cb;ab=ia;bb=S}Yua(z);Yua(y);if($a){Za=ab;_a=bb}else{db=ab;fb=bb;break e}}else{S=Rb()|0;Za=Q;_a=S}while(0);zb(ga|0);db=Za;fb=_a}else $=124;while(0);if(($|0)==124){N=Rb()|0;db=Q;fb=N}k[x>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(E);aa=db;ba=fb;Qb(ba|0)}while(0);Ua=Wa;Va=Ya;vva(E);Qb(Va|0)}}while(0);return 0}function Y8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;a=r;r=r+224|0;f=a+16|0;g=a;h=a+208|0;j=a+204|0;l=a+200|0;m=a+196|0;n=a+222|0;o=a+221|0;q=a+220|0;s=a+219|0;t=a+48|0;u=a+184|0;v=a+32|0;w=a+20|0;zka(c,n,129346);zka(c,o,129368);zka(c,q,129391);zka(c,s,132257);zka(c,a+218|0,139791);zka(c,a+217|0,134866);Fka(c,a+212|0,127514);zka(c,a+216|0,134882);Fka(c,l,134909);if(((i[o>>0]^1)&(i[n>>0]^1)&(i[q>>0]^1)&(i[s>>0]^1))<<24>>24){r=a;return}k[g>>2]=129145;Ska(c,1,g);x=c+56|0;y=k[x>>2]|0;z=Rqa(y>>>0>1073741823?-1:y<<2)|0;if(y)WEa(z|0,0,y<<2|0)|0;A=i[n>>0]|0;n=i[o>>0]|0;o=i[q>>0]|0;q=i[s>>0]|0;a:do if((A<<24>>24!=0?1.0:0.0)+(n<<24>>24!=0?1.0:0.0)+(o<<24>>24!=0?1.0:0.0)+(q<<24>>24!=0?1.0:0.0)>1.0){if(!(q<<24>>24)){k[h>>2]=738;if((y|0)>0)C=0;else break;while(1){k[z+(C<<2)>>2]=738;C=C+1|0;if((C|0)>=(y|0)){D=y;E=15;break a}}}if((y|0)>0){F=0;while(1){G=(Jka(c,129145)|0)+(F<<3)|0;H=z+(F<<2)|0;switch(~~+p[G>>3]|0){case 538:case 541:case 542:{I=752;break}default:I=738}k[H>>2]=I;F=F+1|0;H=k[x>>2]|0;if((F|0)>=(H|0)){D=H;E=15;break a}}}}else{do if(!(A<<24>>24)){if(n<<24>>24){k[h>>2]=738;break}if(o<<24>>24){Fka(c,h,127039);break}if(q<<24>>24)Fka(c,h,128764)}else Fka(c,h,127016);while(0);F=k[x>>2]|0;if((F|0)>0){H=k[h>>2]|0;G=0;do{k[z+(G<<2)>>2]=H;G=G+1|0}while((G|0)<(F|0));D=F;E=15}}while(0);if((E|0)==15?(D|0)>0:0){E=c+32|0;h=D;D=0;q=0;while(1){if(!(i[(k[E>>2]|0)+q>>0]|0)){J=h;K=D}else{o=qh(b,D)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,q,c,d,e,k[z+(q<<2)>>2]|0);J=k[x>>2]|0;K=D+1|0}q=q+1|0;if((q|0)>=(J|0))break;else{h=J;D=K}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,134962,928);Yka(c,b,135923,674,0.0);Yka(c,b,135944,677,0.0);Zka(c,b,127532,88);Zka(c,b,127563,89);K=c+40|0;if((k[K>>2]|0)!=300?(Zka(c,b,136615,287),Zka(c,b,136636,288),(k[K>>2]|0)==302):0){Zka(c,b,129435,93);Zka(c,b,127594,90);Yka(c,b,135096,679,0.0)}if(i[s>>0]|0){Yka(c,b,135039,653,0.0);Yka(c,b,134069,40,0.0)}Fka(c,j,128764);if((k[j>>2]&-5|0)==754)woa(b,0.0,706);switch(k[l>>2]|0){case 1:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);break}case 2:{Zka(c,b,135224,110);Zka(c,b,135238,109);break}case 3:{Fka(c,m,135252);Zka(c,b,135224,110);Zka(c,b,135273,104);Zka(c,b,135210,108);if(!(k[m>>2]|0))Zka(c,b,135288,115);break}case 4:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135039,653);Zka(c,b,135066,666);break}case 5:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135319,114);break}case 6:{Zka(c,b,135224,110);Zka(c,b,135238,109);Zka(c,b,135039,653);Zka(c,b,135066,666);break}case 7:{Zka(c,b,135172,105);Zka(c,b,127625,106);Zka(c,b,135196,107);Zka(c,b,135210,108);break}default:{b=t+56|0;m=t+4|0;k[t>>2]=27524;k[b>>2]=27544;B=0;wa(508,t+56|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;L=Q;M=l;vva(b);Qb(M|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[b>>2]=27488;B=0;va(448,m|0);l=B;B=0;do if(l&1){j=Rb()|0;N=Q;O=j}else{k[m>>2]=27560;j=t+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[t+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,m|0,g|0);s=B;B=0;if(s&1){s=Rb()|0;K=Q;Yua(g);Yua(j);Ava(m);N=K;O=s;break}Yua(g);B=0;s=Ia(40,t|0,145010,13)|0;K=B;B=0;if(!(K&1)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,u|0,127077,81);K=B;B=0;do if(!(K&1)){B=0;eb(502,v|0,136133,14);D=B;B=0;if(D&1){D=Rb()|0;J=Q;Yua(u);P=D;R=J;break}B=0;wa(510,w|0,m|0);J=B;B=0;if(J&1){J=Rb()|0;S=J;T=Q;U=1}else{B=0;ua(163,s|0,u|0,v|0,826,w|0);J=B;B=0;if(J&1)V=1;else{B=0;eb(503,s|0,1240,229);B=0;V=0}J=Rb()|0;D=Q;Yua(w);S=J;T=D;U=V}Yua(v);Yua(u);if(U){P=S;R=T}else{W=S;X=T;k[t>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(b);Qb(W|0)}}else{D=Rb()|0;P=D;R=Q}while(0);zb(s|0);W=P;X=R;k[t>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(b);Qb(W|0)}K=Rb()|0;W=K;X=Q;k[t>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(b);Qb(W|0)}while(0);L=N;M=O;vva(b);Qb(M|0)}}k[f>>2]=129145;Lka(c,1,f);Tqa(z);r=a;return}function Z8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;e=r;r=r+32|0;d=e+16|0;a=e+12|0;f=e+8|0;g=e+4|0;h=e;k[f>>2]=0;YN(b,Ika(c,129324,95)|0);YN(b,Ika(c,129346,96)|0);YN(b,Ika(c,129368,97)|0);YN(b,Ika(c,129391,98)|0);YN(b,Ika(c,132257,99)|0);YN(b,Ika(c,128764,102)|0);YN(b,Ika(c,127656,78)|0);YN(b,Ika(c,127680,75)|0);YN(b,Ika(c,127704,69)|0);YN(b,Ika(c,127728,71)|0);YN(b,Ika(c,127754,72)|0);YN(b,Ika(c,127779,73)|0);YN(b,Ika(c,127811,80)|0);YN(b,Ika(c,126982,85)|0);YN(b,Ika(c,127851,81)|0);YN(b,Ika(c,127884,87)|0);YN(b,Ika(c,134909,111)|0);Fka(c,d,128764);switch(k[d>>2]|0){case 754:case 755:case 758:{YN(b,Ika(c,127921,916)|0);YN(b,Ika(c,127960,918)|0);YN(b,Ika(c,128005,920)|0);break}default:{}}Fka(c,g,127514);if((k[g>>2]|0)==584){YN(b,Ika(c,128031,228)|0);YN(b,Ika(c,128045,236)|0);YN(b,Ika(c,128061,235)|0)}Hka(c,f,a,128088);g=Qqa(12)|0;B=0;eb(518,g|0,76,k[a>>2]|0);d=B;B=0;if(d&1){d=Rb()|0;i=Q;Sqa(g);j=i;l=d;Qb(l|0)}YN(b,g);g=k[a>>2]|0;do if(!g)m=0;else{d=Qqa(16)|0;B=0;ib(294,d|0,77,k[f>>2]|0,g|0);i=B;B=0;if(!(i&1)){YN(b,d);m=k[a>>2]|0;break}i=Rb()|0;n=Q;Sqa(d);j=n;l=i;Qb(l|0)}while(0);Nka(c,f,m,128088);Fka(c,h,134909);m=k[h>>2]|0;if((m&-3|0)==4){YN(b,Ika(c,135546,112)|0);o=k[h>>2]|0}else o=m;if((o|0)==3){YN(b,Ika(c,135252,116)|0);p=k[h>>2]|0}else p=o;if((p|0)!=5){r=e;return}YN(b,Ika(c,128123,113)|0);r=e;return}function _8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;a=r;r=r+656|0;c=a+640|0;d=a+655|0;e=a+654|0;f=a+653|0;g=a+652|0;h=a+636|0;j=a+632|0;l=a+616|0;m=a+480|0;n=a+620|0;o=a+328|0;p=a+464|0;q=a+176|0;s=a+312|0;t=a+40|0;u=a+24|0;v=a+12|0;w=a;x=b+44|0;bO(k[x>>2]|0,d,96);bO(k[x>>2]|0,e,97);bO(k[x>>2]|0,f,98);bO(k[x>>2]|0,g,99);cO(k[x>>2]|0,l,102);cO(k[x>>2]|0,j,298);cO(k[x>>2]|0,h,71);y=i[g>>0]|0;g=y<<24>>24!=0;z=i[d>>0]|0;A=i[f>>0]|0;f=i[e>>0]|0;e=(A|z|f)<<24>>24==0;if(g&e){a:do if(CY()|0){C=m+56|0;D=m+4|0;k[m>>2]=27524;k[C>>2]=27544;B=0;wa(508,m+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=m+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(D);I=L;J=K;break}Yua(c);B=0;Ia(40,m|0,148846,24)|0;K=B;B=0;do if(!(K&1)?(B=0,wa(510,n|0,D|0),L=B,B=0,!(L&1)):0){B=0;ya(425,n|0)|0;L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(n);N=M;O=L;break}else{Yua(n);k[m>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);break a}}else P=15;while(0);if((P|0)==15){K=Rb()|0;N=Q;O=K}k[m>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);R=N;S=O;Qb(S|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}while(0);xh(b,497);G=k[l>>2]|0;if((G|0)==755){Uoa(b);r=a;return}if((G&-5|0)==754){Toa(b);r=a;return}if((k[h>>2]|0)>0){Xoa(b);r=a;return}else{Woa(b,1);r=a;return}}if(!(g|e)){b:do if(CY()|0){e=o+56|0;g=o+4|0;k[o>>2]=27524;k[e>>2]=27544;B=0;wa(508,o+56|0,g|0);G=B;B=0;if(G&1){G=Rb()|0;T=Q;U=G;vva(e);Qb(U|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);G=B;B=0;do if(G&1){l=Rb()|0;V=Q;W=l}else{k[g>>2]=27560;l=o+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(c);Yua(l);Ava(g);V=I;W=J;break}Yua(c);B=0;Ia(40,o|0,148846,24)|0;J=B;B=0;do if(!(J&1)?(B=0,wa(510,p|0,g|0),I=B,B=0,!(I&1)):0){B=0;ya(425,p|0)|0;I=B;B=0;if(I&1){I=Rb()|0;F=Q;Yua(p);X=F;Y=I;break}else{Yua(p);k[o>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);break b}}else P=39;while(0);if((P|0)==39){J=Rb()|0;X=Q;Y=J}k[o>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);R=X;S=Y;Qb(S|0)}while(0);T=V;U=W;vva(e);Qb(U|0)}while(0);xh(b,497);if((k[h>>2]|0)>0)Xoa(b);else Woa(b,1);if((k[j>>2]|0)!=301|(i[d>>0]|0)==0){r=a;return}oO(k[x>>2]|0,674,575);y_(b);oO(k[x>>2]|0,671,575);y_(b);r=a;return}if(!(y<<24>>24==0?1:(f|z|A)<<24>>24==0)){c:do if(CY()|0){A=q+56|0;z=q+4|0;k[q>>2]=27524;k[A>>2]=27544;B=0;wa(508,q+56|0,z|0);f=B;B=0;if(f&1){f=Rb()|0;Z=Q;_=f;vva(A);Qb(_|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[A>>2]=27488;B=0;va(448,z|0);f=B;B=0;do if(f&1){y=Rb()|0;$=Q;aa=y}else{k[z>>2]=27560;y=q+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;d=Q;Yua(c);Yua(y);Ava(z);$=d;aa=x;break}Yua(c);B=0;Ia(40,q|0,128137,56)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,s|0,z|0),d=B,B=0,!(d&1)):0){B=0;ya(425,s|0)|0;d=B;B=0;if(d&1){d=Rb()|0;j=Q;Yua(s);ba=j;ca=d;break}else{Yua(s);k[q>>2]=27468;k[A>>2]=27488;k[z>>2]=27560;Yua(y);Ava(z);vva(A);break c}}else P=61;while(0);if((P|0)==61){x=Rb()|0;ba=Q;ca=x}k[q>>2]=27468;k[A>>2]=27488;k[z>>2]=27560;Yua(y);Ava(z);vva(A);R=ba;S=ca;Qb(S|0)}while(0);Z=$;_=aa;vva(A);Qb(_|0)}while(0);jpa(b,1);r=a;return}a=t+56|0;b=t+4|0;k[t>>2]=27524;k[a>>2]=27544;B=0;wa(508,t+56|0,b|0);_=B;B=0;if(_&1){_=Rb()|0;da=Q;ea=_;vva(a);Qb(ea|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);_=B;B=0;do if(_&1){aa=Rb()|0;fa=Q;ga=aa}else{k[b>>2]=27560;aa=t+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);$=B;B=0;if($&1){$=Rb()|0;Z=Q;Yua(c);Yua(aa);Ava(b);fa=Z;ga=$;break}Yua(c);B=0;$=Ia(40,t|0,145010,13)|0;Z=B;B=0;d:do if(!(Z&1)?(B=0,Xa(239,$|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,u|0,127077,81);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,v|0,138209,4);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(u);ha=q;ia=s;break}B=0;wa(510,w|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;ja=1;ka=Q;la=s}else{B=0;ua(163,ca|0,u|0,v|0,944,w|0);s=B;B=0;if(s&1)ma=1;else{B=0;eb(503,ca|0,1240,229);B=0;ma=0}s=Rb()|0;q=Q;Yua(w);ja=ma;ka=q;la=s}Yua(v);Yua(u);if(ja){ha=la;ia=ka}else{na=ka;oa=la;break d}}else{s=Rb()|0;ha=s;ia=Q}while(0);zb(ca|0);na=ia;oa=ha}else P=80;while(0);if((P|0)==80){$=Rb()|0;na=Q;oa=$}k[t>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(aa);Ava(b);vva(a);R=na;S=oa;Qb(S|0)}while(0);da=fa;ea=ga;vva(a);Qb(ea|0)}function $8(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a=r;r=r+16|0;c=a+4|0;d=a;Ap(b,d,533);if((k[d>>2]|0)!=542){e=0;r=a;return e|0}cp(b,c,299);d=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;f=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;g=iq(b,543)|0;if((d|0)>0?(b=k[c>>2]|0,(b|0)>0):0){h=k[g+4>>2]|0;i=0;do{j=ma(i,b)|0;l=0;do{p[h+(l+j<<3)>>3]=672.0;l=l+1|0}while((l|0)!=(b|0));i=i+1|0}while((i|0)!=(d|0))}if((f|0)>0){i=ma(k[c>>2]|0,d)|0;d=k[g+4>>2]|0;c=0;do{p[d+(c+i<<3)>>3]=653.0;c=c+1|0}while((c|0)!=(f|0))}e=g;r=a;return e|0}function a9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;Ap(b,e,533);switch(k[e>>2]|0){case 536:{j=b9(a,b)|0;r=c;return j|0}case 540:{j=c9(a,b)|0;r=c;return j|0}case 542:{j=d9(a,b)|0;r=c;return j|0}case 534:{j=0;r=c;return j|0}default:{j=f+56|0;c=f+4|0;k[f>>2]=27524;k[j>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(j);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[j>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[c>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(a);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,127077,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,144398,20);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,975,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}while(0);l=n;m=o;vva(j);Qb(m|0)}}return 0}function b9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0;c=r;r=r+224|0;d=c+168|0;e=c+220|0;f=c+32|0;g=c+208|0;h=c+196|0;i=c+184|0;j=c+24|0;l=c;m=c+180|0;cp(b,e,298);a:do switch(k[e>>2]|0){case 300:{n=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){n=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{o=0;r=c;return o|0}break}default:{q=f+56|0;s=f+4|0;k[f>>2]=27524;k[q>>2]=27544;B=0;wa(508,f+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=f+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(d);Yua(w);Ava(s);x=A;y=z;break}Yua(d);B=0;z=Ia(40,f|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[e>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,g|0,127077,81);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,128194,23);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(g);E=A;F=z;break}B=0;wa(510,i|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;G=z;H=Q;I=1}else{B=0;ua(163,C|0,g|0,h|0,1158,i|0);z=B;B=0;if(z&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}z=Rb()|0;A=Q;Yua(i);G=z;H=A;I=J}Yua(h);Yua(g);if(I){E=G;F=H}else{K=G;L=H;k[f>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}}else{A=Rb()|0;E=A;F=Q}while(0);zb(C|0);K=E;L=F;k[f>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}D=Rb()|0;K=D;L=Q;k[f>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}}while(0);k[m>>2]=0;v=Hc[k[(k[n>>2]|0)+164>>2]&511](n)|0;y=f9(a,b)|0;a=v<<1;x=Rqa(a>>>0>536870911?-1:a<<3)|0;Uo(b,m);b=Wo(n,353)|0;u=Wo(n,674)|0;K=Wo(n,677)|0;L=ed[k[(k[n>>2]|0)+308>>2]&511](n,2)|0;F=Hc[k[(k[L>>2]|0)+8>>2]&511](L)|0;if((F|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0)){E=n+28|0;H=l+8|0;G=l+16|0;I=(v|0)>0;g=L+8|0;h=y+12|0;J=F;do{Fc[k[(k[L>>2]|0)+24>>2]&1023](L,J);rd[k[(k[n>>2]|0)+260>>2]&511](n,d,k[m>>2]|0,L);rd[k[(k[n>>2]|0)+340>>2]&511](n,x,k[m>>2]|0,L);nd[k[(k[b>>2]|0)+48>>2]&1023](b,f,L);Xo(n,l,k[m>>2]|0,L,u,K);F=k[E>>2]|0;nd[k[(k[F>>2]|0)+132>>2]&1023](F,j,l);M=+p[l>>3];N=+p[H>>3];O=M*2.0+N;P=+p[G>>3];R=M+N*2.0;if(I){F=k[h>>2]|0;i=0;do{s=x+(i<<3)|0;t=x+(i+v<<3)|0;D=i<<1;A=ma(D,a)|0;z=ma(D|1,a)|0;D=0;do{N=+p[s>>3];M=+p[t>>3];S=O*N+P*M;T=+p[x+(D<<3)>>3];U=+p[x+(D+v<<3)>>3];V=O*T+P*U;W=P*N+R*M;M=P*T+R*U;X=D<<1;Y=X+A|0;Z=F+(Y<<3)|0;p[Z>>3]=+p[Z>>3]+S*(V*(+p[f>>3]*(+p[j>>3]*(+p[g>>3]*+p[d>>3]*2.0))));Z=F+((Y|1)<<3)|0;p[Z>>3]=+p[Z>>3]+S*(M*(+p[f>>3]*(+p[j>>3]*(+p[g>>3]*+p[d>>3]*2.0))));Z=X+z|0;X=F+(Z<<3)|0;p[X>>3]=+p[X>>3]+W*(V*(+p[f>>3]*(+p[j>>3]*(+p[g>>3]*+p[d>>3]*2.0))));X=F+((Z|1)<<3)|0;p[X>>3]=+p[X>>3]+W*(M*(+p[f>>3]*(+p[j>>3]*(+p[g>>3]*+p[d>>3]*2.0))));D=D+1|0}while((D|0)!=(v|0));i=i+1|0}while((i|0)!=(v|0))}J=J+1|0}while((J|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0))}Fq(n,y,971);Ec[k[(k[L>>2]|0)+4>>2]&1023](L);L=k[m>>2]|0;if(L)Tqa(L);k[m>>2]=0;Tqa(x);if((k[e>>2]|0)!=300?(ap(n),(n|0)!=0):0)Ec[k[(k[n>>2]|0)+4>>2]&1023](n);o=y;r=c;return o|0}function c9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0;c=r;r=r+64|0;d=c+48|0;e=c+40|0;f=c;g=c+56|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=h9(a,b)|0;a=h*3|0;j=Rqa(a>>>0>536870911?-1:a<<3)|0;Uo(b,g);a=Wo(b,674)|0;l=Wo(b,677)|0;m=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;n=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;if((n|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){o=b+28|0;q=f+8|0;s=f+16|0;t=f+24|0;u=f+32|0;v=(h|0)>0;w=h<<1;x=m+8|0;y=i+12|0;z=n;do{Fc[k[(k[m>>2]|0)+24>>2]&1023](m,z);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[g>>2]|0,m);rd[k[(k[b>>2]|0)+340>>2]&511](b,j,k[g>>2]|0,m);ep(b,f,k[g>>2]|0,m,a,l);n=k[o>>2]|0;nd[k[(k[n>>2]|0)+120>>2]&1023](n,e,f);A=+p[f>>3];B=+p[q>>3];C=A*2.0+B;D=+p[s>>3];E=A+B*2.0;B=+p[t>>3];A=+p[u>>3];if(v){n=k[y>>2]|0;F=0;do{G=j+(F<<3)|0;H=j+(F+h<<3)|0;I=j+(F+w<<3)|0;J=F<<1;K=ma(J,w)|0;L=ma(J|1,w)|0;J=0;do{M=+p[G>>3];N=+p[H>>3];O=+p[I>>3];P=C*M+D*N+B*O;Q=+p[j+(J<<3)>>3];R=+p[j+(J+h<<3)>>3];S=+p[j+(J+w<<3)>>3];T=C*Q+D*R+B*S;U=D*M+E*N+A*O;O=D*Q+E*R+A*S;V=J<<1;W=V+K|0;X=n+(W<<3)|0;p[X>>3]=+p[X>>3]+P*(T*(+p[e>>3]*(+p[x>>3]*+p[d>>3]*2.0)));X=n+((W|1)<<3)|0;p[X>>3]=+p[X>>3]+P*(O*(+p[e>>3]*(+p[x>>3]*+p[d>>3]*2.0)));X=V+L|0;V=n+(X<<3)|0;p[V>>3]=+p[V>>3]+U*(T*(+p[e>>3]*(+p[x>>3]*+p[d>>3]*2.0)));V=n+((X|1)<<3)|0;p[V>>3]=+p[V>>3]+U*(O*(+p[e>>3]*(+p[x>>3]*+p[d>>3]*2.0)));J=J+1|0}while((J|0)!=(h|0));F=F+1|0}while((F|0)!=(h|0))}z=z+1|0}while((z|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))}Fq(b,i,971);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);m=k[g>>2]|0;if(!m){k[g>>2]=0;Tqa(j);r=c;return i|0}Tqa(m);k[g>>2]=0;Tqa(j);r=c;return i|0}function d9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0,aa=0,ba=0;c=r;r=r+80|0;d=c+56|0;e=c+48|0;f=c;g=c+64|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;i=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;j=h*3|0;l=i+j|0;m=i+h|0;n=Rqa(m>>>0>1073741823?-1:m<<2)|0;m=(h|0)>0;if(m){o=0;do{k[n+(o<<2)>>2]=972;o=o+1|0}while((o|0)!=(h|0))}if((i|0)>0){o=0;do{k[n+(o+h<<2)>>2]=653;o=o+1|0}while((o|0)!=(i|0))}i=i9(a,b)|0;a=Rqa(j>>>0>536870911?-1:j<<3)|0;Uo(b,g);j=Wo(b,674)|0;o=Wo(b,677)|0;Wo(b,679)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=f+16|0;u=f+24|0;v=f+8|0;w=f+32|0;x=b+28|0;y=h<<1;z=q+8|0;A=i+12|0;B=s;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,B);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[g>>2]|0,q);rd[k[(k[b>>2]|0)+344>>2]&511](b,a,k[g>>2]|0,q);ep(b,f,k[g>>2]|0,q,j,o);C=+p[f>>3];D=+p[t>>3];E=+p[u>>3];F=+p[v>>3];G=+p[w>>3];H=-C-F;s=k[x>>2]|0;nd[k[(k[s>>2]|0)+112>>2]&1023](s,e,f);if(m){s=k[A>>2]|0;I=0;do{J=a+(I<<3)|0;K=a+(I+h<<3)|0;L=a+(I+y<<3)|0;M=I*3|0;N=ma(M,l)|0;O=ma(M+1|0,l)|0;P=ma(M+2|0,l)|0;M=0;do{Q=+p[J>>3];R=+p[K>>3];S=+p[L>>3];T=C*Q+D*R+E*S;U=+p[a+(M<<3)>>3];V=+p[a+(M+h<<3)>>3];W=+p[a+(M+y<<3)>>3];X=C*U+D*V+E*W;Y=D*Q+F*R+G*S;Z=D*U+F*V+G*W;_=E*Q+G*R+H*S;S=E*U+G*V+H*W;$=M*3|0;aa=$+N|0;ba=s+(aa<<3)|0;p[ba>>3]=+p[ba>>3]+T*(X*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));ba=s+(aa+1<<3)|0;p[ba>>3]=+p[ba>>3]+T*(Z*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));ba=s+(aa+2<<3)|0;p[ba>>3]=+p[ba>>3]+T*(S*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));ba=$+O|0;aa=s+(ba<<3)|0;p[aa>>3]=+p[aa>>3]+Y*(X*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));aa=s+(ba+1<<3)|0;p[aa>>3]=+p[aa>>3]+Y*(Z*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));aa=s+(ba+2<<3)|0;p[aa>>3]=+p[aa>>3]+Y*(S*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));aa=$+P|0;$=s+(aa<<3)|0;p[$>>3]=+p[$>>3]+_*(X*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));$=s+(aa+1<<3)|0;p[$>>3]=+p[$>>3]+_*(Z*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));$=s+(aa+2<<3)|0;p[$>>3]=+p[$>>3]+_*(S*(+p[e>>3]*(+p[z>>3]*+p[d>>3]*2.0)));M=M+1|0}while((M|0)!=(h|0));I=I+1|0}while((I|0)!=(h|0))}B=B+1|0}while((B|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}Hq(b,i,n);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);q=k[g>>2]|0;if(!q){k[g>>2]=0;Tqa(a);Tqa(n);r=c;return i|0}Tqa(q);k[g>>2]=0;Tqa(a);Tqa(n);r=c;return i|0}function e9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;Ap(b,e,533);switch(k[e>>2]|0){case 536:{j=f9(a,b)|0;r=c;return j|0}case 539:{j=g9(a,b)|0;r=c;return j|0}case 540:{j=h9(a,b)|0;r=c;return j|0}case 542:{j=i9(a,b)|0;r=c;return j|0}case 537:{j=j9(a,b)|0;r=c;return j|0}case 541:{j=k9(a,b)|0;r=c;return j|0}case 538:{j=l9(a,b)|0;r=c;return j|0}case 534:case 535:{j=0;r=c;return j|0}default:{j=f+56|0;c=f+4|0;k[f>>2]=27524;k[j>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(j);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[j>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[c>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(a);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,127077,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,144189,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1001,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}while(0);l=n;m=o;vva(j);Qb(m|0)}}return 0}function f9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;if(!($p(b)|0)){j=0;r=c;return j|0}cp(b,e,298);switch(k[e>>2]|0){case 300:{l=b;m=31;break}case 301:case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){l=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;m=31}else n=0;break}default:{b=f+56|0;o=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(b);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=f+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(o);u=x;v=w;break}Yua(d);B=0;w=Ia(40,f|0,144639,5)|0;x=B;B=0;a:do if((((!(x&1)?(B=0,y=ya(427,k[e>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(y)|0,B=0,A=Ia(40,w|0,y|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,A|0,146481,18)|0,A=B,B=0,!(A&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,g|0,127077,81);A=B;B=0;do if(!(A&1)){B=0;eb(502,h|0,128218,16);y=B;B=0;if(y&1){y=Rb()|0;C=Q;Yua(g);D=C;E=y;break}B=0;wa(510,i|0,o|0);y=B;B=0;if(y&1){y=Rb()|0;F=Q;G=y;H=1}else{B=0;ua(163,z|0,g|0,h|0,1244,i|0);y=B;B=0;if(y&1)I=1;else{B=0;eb(503,z|0,1240,229);B=0;I=0}y=Rb()|0;C=Q;Yua(i);F=C;G=y;H=I}Yua(h);Yua(g);if(H){D=F;E=G}else{J=G;K=F;break a}}else{y=Rb()|0;D=Q;E=y}while(0);zb(z|0);J=E;K=D}else m=23;while(0);if((m|0)==23){w=Rb()|0;J=w;K=Q}k[f>>2]=27468;k[b>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(b);L=K;M=J;Qb(M|0)}while(0);q=u;s=v;vva(b);Qb(s|0)}}if((m|0)==31){m=H9(a,l)|0;s=I9(a,l)|0;a=Qqa(68)|0;B=0;eb(515,a|0,m|0,s|0);b=B;B=0;if(b&1){b=Rb()|0;v=Q;Sqa(a);L=v;M=b;Qb(M|0)}if((k[e>>2]|0)!=300?(ap(l),(l|0)!=0):0)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);if(m){HN(m);Sqa(m)}if(!s)n=a;else{HN(s);Sqa(s);n=a}}j=n;r=c;return j|0}function g9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!($p(b)|0)){c=0;return c|0}d=N9(0,b)|0;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0?!(_p(b)|0):0){e=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;b=I9(a,e)|0;ap(e);if(!e)f=b;else{Ec[k[(k[e>>2]|0)+4>>2]&1023](e);f=b}}else f=0;b=Qqa(68)|0;B=0;eb(515,b|0,d|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}if(d){HN(d);Sqa(d)}if(!f){c=b;return c|0}HN(f);Sqa(f);c=b;return c|0}function h9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!($p(b)|0)){c=0;return c|0}d=Q9(a,b)|0;e=R9(a,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,d|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(d){HN(d);Sqa(d)}if(!e){c=b;return c|0}HN(e);Sqa(e);c=b;return c|0}function i9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c;if(!($p(b)|0)){e=0;r=c;return e|0}cp(b,d,102);f=k[d>>2]|0;do if((f|0)!=755)if((f&-5|0)==754){g=X9(a,b)|0;break}else{g=Y9(a,b)|0;break}else g=W9(a,b)|0;while(0);f=Z9(a,b)|0;a=_9(0,b)|0;b=Qqa(68)|0;B=0;ib(299,b|0,g|0,f|0,a|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}if(g){HN(g);Sqa(g)}if(f){HN(f);Sqa(f)}if(a){HN(a);Sqa(a)}e=b;r=c;return e|0}function j9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Aaa(a,b)|0;d=h9(a,b)|0;e=waa(a,b)|0;b=Qqa(68)|0;B=0;ib(299,b|0,c|0,d|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}HN(c);Sqa(c);if(!d){HN(e);Sqa(e);return b|0}HN(d);Sqa(d);HN(e);Sqa(e);return b|0}function k9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=i9(a,b)|0;k[d>>2]=k[9691];k[d+4>>2]=k[9692];k[d+8>>2]=k[9693];NN(e,3,d);d=Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,738);f=h9(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,d);d=naa(a,b)|0;b=Qqa(68)|0;B=0;ib(299,b|0,e|0,f|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(e){HN(e);Sqa(e)}if(!f){HN(d);Sqa(d);r=c;return b|0}HN(f);Sqa(f);HN(d);Sqa(d);r=c;return b|0}function l9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=i9(a,b)|0;k[d>>2]=k[9691];k[d+4>>2]=k[9692];k[d+8>>2]=k[9693];NN(e,3,d);d=Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,738);f=Aaa(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,d);d=oaa(a,b)|0;b=Qqa(68)|0;B=0;ib(299,b|0,e|0,f|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(!e){HN(f);Sqa(f);HN(d);Sqa(d);r=c;return b|0}HN(e);Sqa(e);HN(f);Sqa(f);HN(d);Sqa(d);r=c;return b|0}function m9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;Ap(b,e,533);switch(k[e>>2]|0){case 536:{j=n9(a,b)|0;r=c;return j|0}case 539:{j=o9(a,b)|0;r=c;return j|0}case 540:{j=p9(a,b)|0;r=c;return j|0}case 542:{j=q9(a,b)|0;r=c;return j|0}case 537:{j=r9(a,b)|0;r=c;return j|0}case 541:{j=s9(a,b)|0;r=c;return j|0}case 538:{j=t9(a,b)|0;r=c;return j|0}case 534:case 535:{j=0;r=c;return j|0}default:{j=f+56|0;c=f+4|0;k[f>>2]=27524;k[j>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(j);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[j>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[c>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(a);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,127077,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,144203,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1028,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[j>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(j);Qb(C|0)}while(0);l=n;m=o;vva(j);Qb(m|0)}}return 0}function n9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;if(!($p(b)|0)){i=0;r=a;return i|0}cp(b,d,298);switch(k[d>>2]|0){case 300:{j=b;l=31;break}case 301:case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;l=31}else m=0;break}default:{b=e+56|0;n=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(b);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;v=Ia(40,e|0,144639,5)|0;w=B;B=0;a:do if((((!(w&1)?(B=0,x=ya(427,k[d>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(x)|0,B=0,z=Ia(40,v|0,x|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,127077,81);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,128235,16);x=B;B=0;if(x&1){x=Rb()|0;A=Q;Yua(f);C=A;D=x;break}B=0;wa(510,h|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;E=Q;F=x;G=1}else{B=0;ua(163,y|0,f|0,g|0,1511,h|0);x=B;B=0;if(x&1)H=1;else{B=0;eb(503,y|0,1240,229);B=0;H=0}x=Rb()|0;A=Q;Yua(h);E=A;F=x;G=H}Yua(g);Yua(f);if(G){C=E;D=F}else{I=F;J=E;break a}}else{x=Rb()|0;C=Q;D=x}while(0);zb(y|0);I=D;J=C}else l=23;while(0);if((l|0)==23){v=Rb()|0;I=v;J=Q}k[e>>2]=27468;k[b>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(b);K=J;L=I;Qb(L|0)}while(0);p=t;q=u;vva(b);Qb(q|0)}}if((l|0)==31){l=L9(0,j)|0;q=M9(0,j)|0;b=Qqa(24)|0;B=0;eb(516,b|0,l|0,q|0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Sqa(b);K=t;L=u;Qb(L|0)}if((k[d>>2]|0)!=300?(ap(j),(j|0)!=0):0)Ec[k[(k[j>>2]|0)+4>>2]&1023](j);if(l){SN(l);Sqa(l)}if(!q)m=b;else{SN(q);Sqa(q);m=b}}i=m;r=a;return i|0}function o9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;if(!($p(b)|0)){i=0;r=a;return i|0}cp(b,d,298);switch(k[d>>2]|0){case 300:{j=b;l=31;break}case 301:case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;l=31}else m=0;break}default:{b=e+56|0;n=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(b);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;v=Ia(40,e|0,144639,5)|0;w=B;B=0;a:do if((((!(w&1)?(B=0,x=ya(427,k[d>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(x)|0,B=0,z=Ia(40,v|0,x|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,127077,81);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,128252,17);x=B;B=0;if(x&1){x=Rb()|0;A=Q;Yua(f);C=A;D=x;break}B=0;wa(510,h|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;E=Q;F=x;G=1}else{B=0;ua(163,y|0,f|0,g|0,1998,h|0);x=B;B=0;if(x&1)H=1;else{B=0;eb(503,y|0,1240,229);B=0;H=0}x=Rb()|0;A=Q;Yua(h);E=A;F=x;G=H}Yua(g);Yua(f);if(G){C=E;D=F}else{I=F;J=E;break a}}else{x=Rb()|0;C=Q;D=x}while(0);zb(y|0);I=D;J=C}else l=23;while(0);if((l|0)==23){v=Rb()|0;I=v;J=Q}k[e>>2]=27468;k[b>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(b);K=J;L=I;Qb(L|0)}while(0);p=t;q=u;vva(b);Qb(q|0)}}if((l|0)==31){l=O9(0,j)|0;q=P9(0,j)|0;b=Qqa(24)|0;B=0;eb(516,b|0,l|0,q|0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Sqa(b);K=t;L=u;Qb(L|0)}if((k[d>>2]|0)!=300?(ap(j),(j|0)!=0):0)Ec[k[(k[j>>2]|0)+4>>2]&1023](j);if(l){SN(l);Sqa(l)}if(!q)m=b;else{SN(q);Sqa(q);m=b}}i=m;r=a;return i|0}function p9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!($p(b)|0)){c=0;return c|0}a=U9(0,b)|0;d=V9(0,b)|0;b=Qqa(24)|0;B=0;eb(516,b|0,a|0,d|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}if(a){SN(a);Sqa(a)}if(!d){c=b;return c|0}SN(d);Sqa(d);c=b;return c|0}function q9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+16|0;c=a;if(!($p(b)|0)){d=0;r=a;return d|0}cp(b,c,102);e=k[c>>2]|0;do if((e|0)==755){c=faa(0,b)|0;f=gaa(0,b)|0;g=haa(0,b)|0;h=Qqa(24)|0;B=0;ib(300,h|0,c|0,f|0,g|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;Sqa(h);l=i;m=j;Qb(l|0)}j=iaa(0,b)|0;i=Qqa(24)|0;B=0;eb(516,i|0,h|0,j|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Sqa(i);l=n;m=o;Qb(l|0)}if(c){SN(c);Sqa(c)}if(f){SN(f);Sqa(f)}if(g){SN(g);Sqa(g)}SN(h);Sqa(h);if(!j)p=i;else{SN(j);Sqa(j);p=i}}else{i=faa(0,b)|0;j=gaa(0,b)|0;h=haa(0,b)|0;g=Qqa(24)|0;B=0;ib(300,g|0,i|0,j|0,h|0);f=B;B=0;c=f&1;if((e&-5|0)!=754){if(c){f=Rb()|0;o=Q;Sqa(g);l=f;m=o;Qb(l|0)}if(i){SN(i);Sqa(i)}if(j){SN(j);Sqa(j)}if(!h){p=g;break}SN(h);Sqa(h);p=g;break}if(c){c=Rb()|0;o=Q;Sqa(g);l=c;m=o;Qb(l|0)}o=jaa(0,b)|0;c=Qqa(24)|0;B=0;eb(516,c|0,g|0,o|0);f=B;B=0;if(f&1){f=Rb()|0;n=Q;Sqa(c);l=f;m=n;Qb(l|0)}if(i){SN(i);Sqa(i)}if(j){SN(j);Sqa(j)}if(h){SN(h);Sqa(h)}SN(g);Sqa(g);if(!o)p=c;else{SN(o);Sqa(o);p=c}}while(0);d=p;r=a;return d|0}function r9(a,b){a=a|0;b=b|0;var c=0,d=0;c=n9(a,b)|0;d=p9(a,b)|0;b=Qqa(24)|0;B=0;eb(516,b|0,c|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(c){SN(c);Sqa(c)}if(!d)return b|0;SN(d);Sqa(d);return b|0}function s9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,738);f=p9(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,e);g=q9(a,b)|0;k[d>>2]=k[9691];k[d+4>>2]=k[9692];k[d+8>>2]=k[9693];Fc[k[(k[b>>2]|0)+428>>2]&1023](b,752);h=i9(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,e);VN(g,h,3,d);if(h){HN(h);Sqa(h)}h=Caa(a,b)|0;b=Qqa(24)|0;B=0;ib(300,b|0,f|0,g|0,h|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(f){SN(f);Sqa(f)}if(!g){SN(h);Sqa(h);r=c;return b|0}SN(g);Sqa(g);SN(h);Sqa(h);r=c;return b|0}function t9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c;e=Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,738);f=n9(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,e);g=q9(a,b)|0;k[d>>2]=k[9691];k[d+4>>2]=k[9692];k[d+8>>2]=k[9693];Fc[k[(k[b>>2]|0)+428>>2]&1023](b,752);h=i9(a,b)|0;Fc[k[(k[b>>2]|0)+428>>2]&1023](b,e);VN(g,h,3,d);if(h){HN(h);Sqa(h)}h=Faa(a,b)|0;b=Qqa(24)|0;B=0;ib(300,b|0,f|0,g|0,h|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}if(f){SN(f);Sqa(f)}if(!g){SN(h);Sqa(h);r=c;return b|0}SN(g);Sqa(g);SN(h);Sqa(h);r=c;return b|0}function u9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;Ap(c,e,533);switch(k[e>>2]|0){case 534:case 542:{v9(0,b,c);r=a;return}case 535:case 540:case 536:{w9(0,b,c);r=a;return}case 539:{w9(0,b,c);r=a;return}case 538:case 541:case 537:{r=a;return}default:{a=f+56|0;c=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;l=b;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){m=Rb()|0;n=Q;o=m}else{k[c>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,127077,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,138230,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1049,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function v9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+64|0;d=a+48|0;e=a+44|0;f=a+40|0;g=a+32|0;h=a+24|0;i=a+16|0;j=a+8|0;l=a;k[d>>2]=0;k[e>>2]=0;cp(c,f,299);pp(c,l,85);m=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;n=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;o=ma(k[f>>2]|0,m)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;s=Rqa(n>>>0>536870911?-1:n<<3)|0;tp(c,d,943);sp(c,e,943);t=Wo(c,674)|0;u=Wo(c,677)|0;if((k[f>>2]|0)==3)v=Wo(c,679)|0;else v=0;w=Wo(c,653)|0;pp(c,l,85);x=Hc[k[(k[c>>2]|0)+304>>2]&511](c)|0;if((m|0)>0){y=0;do{z=k[(k[x>>2]|0)+32>>2]|0;A=Hc[k[(k[c>>2]|0)+504>>2]&511](c)|0;nd[z&1023](x,A,y);nd[k[(k[t>>2]|0)+48>>2]&1023](t,g,x);nd[k[(k[u>>2]|0)+48>>2]&1023](u,h,x);A=k[f>>2]|0;z=ma(A,y)|0;p[q+(z<<3)>>3]=+p[g>>3];p[q+(z+1<<3)>>3]=+p[h>>3];if((A|0)==3){nd[k[(k[v>>2]|0)+48>>2]&1023](v,i,x);A=q+((ma(k[f>>2]|0,y)|0)+2<<3)|0;p[A>>3]=+p[i>>3]}y=y+1|0}while((y|0)!=(m|0))}m=(n|0)>0;if(m){y=0;do{i=k[(k[x>>2]|0)+32>>2]|0;f=Hc[k[(k[c>>2]|0)+404>>2]&511](c)|0;nd[i&1023](x,f,y);nd[k[(k[w>>2]|0)+48>>2]&1023](w,j,x);p[s+(y<<3)>>3]=+p[j>>3]/+p[l>>3];y=y+1|0}while((y|0)!=(n|0))}if(k[b>>2]|0){y=k[k[b+4>>2]>>2]|0;Dc[k[(k[y>>2]|0)+16>>2]&255](y,o,k[d>>2]|0,q,0)}if(m?(k[b>>2]|0)!=0:0){m=k[k[b+4>>2]>>2]|0;Dc[k[(k[m>>2]|0)+16>>2]&255](m,n,k[e>>2]|0,s,0)}if(x)Ec[k[(k[x>>2]|0)+4>>2]&1023](x);x=k[e>>2]|0;if(x)Tqa(x);k[e>>2]=0;e=k[d>>2]|0;if(!e){k[d>>2]=0;Tqa(s);Tqa(q);r=a;return}Tqa(e);k[d>>2]=0;Tqa(s);Tqa(q);r=a;return}function w9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;a=r;r=r+224|0;d=a+204|0;e=a+8|0;f=a;g=a+200|0;h=a+196|0;i=a+192|0;j=a+56|0;l=a+40|0;m=a+28|0;n=a+16|0;k[i>>2]=0;cp(c,g,298);switch(k[g>>2]|0){case 302:case 300:{o=2;break}case 301:{o=1;break}default:{q=j+56|0;s=j+4|0;k[j>>2]=27524;k[q>>2]=27544;B=0;wa(508,j+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(d);Yua(w);Ava(s);x=A;y=z;break}Yua(d);B=0;z=Ia(40,j|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[g>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,l|0,127077,81);D=B;B=0;do if(!(D&1)){B=0;eb(502,m|0,128270,26);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(l);E=A;F=z;break}B=0;wa(510,n|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;G=z;H=Q;I=1}else{B=0;ua(163,C|0,l|0,m|0,1064,n|0);z=B;B=0;if(z&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}z=Rb()|0;A=Q;Yua(n);G=z;H=A;I=J}Yua(m);Yua(l);if(I){E=G;F=H}else{K=G;L=H;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}}else{A=Rb()|0;E=A;F=Q}while(0);zb(C|0);K=E;L=F;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}D=Rb()|0;K=D;L=Q;k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}}v=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;q=ma(v,o)|0;Ap(c,h,533);rp(c,i,k[h>>2]|0,943);h=Rqa(q>>>0>536870911?-1:q<<3)|0;y=Wo(c,674)|0;if((k[g>>2]|0)==301)M=0;else M=Wo(c,677)|0;g=Hc[k[(k[c>>2]|0)+304>>2]&511](c)|0;if((v|0)>0)if((o|0)==2){x=0;do{u=k[(k[g>>2]|0)+32>>2]|0;K=Hc[k[(k[c>>2]|0)+112>>2]&511](c)|0;nd[u&1023](g,K,x);nd[k[(k[y>>2]|0)+48>>2]&1023](y,e,g);K=x<<1;p[h+(K<<3)>>3]=+p[e>>3];nd[k[(k[M>>2]|0)+48>>2]&1023](M,f,g);p[h+((K|1)<<3)>>3]=+p[f>>3];x=x+1|0}while((x|0)!=(v|0))}else{x=0;do{f=k[(k[g>>2]|0)+32>>2]|0;M=Hc[k[(k[c>>2]|0)+112>>2]&511](c)|0;nd[f&1023](g,M,x);nd[k[(k[y>>2]|0)+48>>2]&1023](y,e,g);M=h+((ma(x,o)|0)<<3)|0;p[M>>3]=+p[e>>3];x=x+1|0}while((x|0)!=(v|0))}if(k[b>>2]|0){v=k[k[b+4>>2]>>2]|0;Dc[k[(k[v>>2]|0)+16>>2]&255](v,q,k[i>>2]|0,h,0)}if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Tqa(h);h=k[i>>2]|0;if(!h){r=a;return}Tqa(h);r=a;return}function x9(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,127077,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,1103,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function y9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;Ap(c,e,533);switch(k[e>>2]|0){case 534:case 542:{z9(0,b,c);r=a;return}case 536:{A9(0,b,c);r=a;return}case 540:{B9(0,b,c);r=a;return}case 539:{C9(0,b,c);r=a;return}case 537:{D9(0,b,c);r=a;return}case 541:{E9(0,b,c);r=a;return}case 538:{F9(0,b,c);r=a;return}case 535:{r=a;return}default:{a=f+56|0;c=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;l=b;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){m=Rb()|0;n=Q;o=m}else{k[c>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,127077,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1134,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function z9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0.0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0.0;a=r;r=r+1440|0;d=a+1416|0;e=a+1388|0;f=a+1372|0;g=a+1356|0;h=a;i=a+1208|0;j=a+1404|0;l=a+1392|0;m=a+1376|0;n=a+1056|0;o=a+1360|0;q=a+1344|0;s=a+1192|0;u=a+904|0;v=a+1040|0;w=a+888|0;x=a+736|0;y=a+752|0;z=a+316|0;A=a+304|0;C=a+152|0;D=a+600|0;E=a+140|0;F=a+128|0;G=a+116|0;H=a+464|0;I=a+104|0;J=a+92|0;K=a+80|0;L=a+328|0;M=a+68|0;N=a+56|0;O=a+44|0;P=a+168|0;R=a+32|0;S=a+20|0;T=a+8|0;k[f>>2]=0;k[g>>2]=0;cp(c,e,299);pp(c,h,85);op(c,a+1428|0,325);U=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;V=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;W=k[e>>2]|0;X=ma(W,U)|0;Y=X+V|0;Z=Rqa(Y>>>0>536870911?-1:Y<<3)|0;Y=U>>>0>536870911?-1:U<<3;_=Rqa(Y)|0;ba=Rqa(Y)|0;ca=Rqa(Y)|0;da=Rqa(Y)|0;Y=Rqa(V>>>0>536870911?-1:V<<3)|0;ea=V+U|0;fa=Rqa(ea>>>0>1073741823?-1:ea<<2)|0;ea=(U|0)>0;if((W|0)==2){if(ea){W=0;do{k[fa+(W<<2)>>2]=971;W=W+1|0}while((W|0)!=(U|0))}}else if(ea){W=0;do{k[fa+(W<<2)>>2]=972;W=W+1|0}while((W|0)!=(U|0))}W=(V|0)>0;if(W){ga=0;do{k[fa+(ga+U<<2)>>2]=653;ga=ga+1|0}while((ga|0)!=(V|0))}tp(c,f,943);sp(c,g,943);if((X|0)>0){ga=k[f>>2]|0;ha=0;do{p[Z+(ha<<3)>>3]=+p[b+(k[ga+(ha<<2)>>2]<<3)>>3];ha=ha+1|0}while((ha|0)!=(X|0))}if(W){ha=k[g>>2]|0;ga=0;do{p[Z+(ga+X<<3)>>3]=+p[b+(k[ha+(ga<<2)>>2]<<3)>>3];ga=ga+1|0}while((ga|0)!=(V|0))}Cq(c,Z,fa);a:do if(ea){ga=k[e>>2]|0;b:do if((ga|0)==3){ha=0;while(1){b=ha*3|0;ia=+p[Z+(b<<3)>>3];p[_+(ha<<3)>>3]=ia;ja=+p[Z+(b+1<<3)>>3];p[ba+(ha<<3)>>3]=ja;ka=+$(+ia);p[t>>3]=ka;la=k[t>>2]|0;na=k[t+4>>2]|0;if(na>>>0>2146435072|(na|0)==2146435072&la>>>0>0){oa=25;break b}if((la|0)==0&(na|0)==2146435072){oa=49;break b}ka=+$(+ja);p[t>>3]=ka;na=k[t>>2]|0;la=k[t+4>>2]|0;if(la>>>0>2146435072|(la|0)==2146435072&na>>>0>0){oa=73;break b}if((na|0)==0&(la|0)==2146435072){oa=97;break b}ka=+p[Z+(b+2<<3)>>3];p[ca+(ha<<3)>>3]=ka;ja=+$(+ka);p[t>>3]=ja;b=k[t>>2]|0;la=k[t+4>>2]|0;if(la>>>0>2146435072|(la|0)==2146435072&b>>>0>0){oa=120;break}if((b|0)==0&(la|0)==2146435072){oa=143;break}ha=ha+1|0;if((ha|0)>=(U|0))break a}if((oa|0)==120){ha=D+56|0;la=D+4|0;k[D>>2]=27524;k[ha>>2]=27544;B=0;wa(508,D+56|0,la|0);b=B;B=0;if(b&1){b=Rb()|0;pa=Q;qa=b;vva(ha);Qb(qa|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[ha>>2]=27488;B=0;va(448,la|0);b=B;B=0;do if(b&1){na=Rb()|0;ra=Q;sa=na}else{k[la>>2]=27560;na=D+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,la|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;xa=Q;Yua(d);Yua(na);Ava(la);ra=xa;sa=ta;break}Yua(d);B=0;ta=Ia(40,D|0,135564,28)|0;xa=B;B=0;c:do if(!(xa&1)?(B=0,Xa(239,ta|0,0)|0,ya=B,B=0,!(ya&1)):0){ya=Ab(20)|0;B=0;eb(502,E|0,127077,81);za=B;B=0;do if(!(za&1)){B=0;eb(502,F|0,128297,25);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Yua(E);Ca=Ba;Da=Aa;break}B=0;wa(510,G|0,la|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ea=1;Fa=Q;Ga=Aa}else{B=0;ua(163,ya|0,E|0,F|0,4967,G|0);Aa=B;B=0;if(Aa&1)Ha=1;else{B=0;eb(503,ya|0,1240,229);B=0;Ha=0}Aa=Rb()|0;Ba=Q;Yua(G);Ea=Ha;Fa=Ba;Ga=Aa}Yua(F);Yua(E);if(Ea){Ca=Fa;Da=Ga}else{Ja=Fa;Ka=Ga;break c}}else{Aa=Rb()|0;Ca=Q;Da=Aa}while(0);zb(ya|0);Ja=Ca;Ka=Da}else oa=135;while(0);if((oa|0)==135){ta=Rb()|0;Ja=Q;Ka=ta}k[D>>2]=27468;k[ha>>2]=27488;k[la>>2]=27560;Yua(na);Ava(la);vva(ha);La=Ja;Ma=Ka;Qb(Ma|0)}while(0);pa=ra;qa=sa;vva(ha);Qb(qa|0)}else if((oa|0)==143){la=H+56|0;b=H+4|0;k[H>>2]=27524;k[la>>2]=27544;B=0;wa(508,H+56|0,b|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Na=Q;Oa=ta;vva(la);Qb(Oa|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[la>>2]=27488;B=0;va(448,b|0);ta=B;B=0;do if(ta&1){xa=Rb()|0;Pa=Q;Qa=xa}else{k[b>>2]=27560;xa=H+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[H+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(d);Yua(xa);Ava(b);Pa=Aa;Qa=za;break}Yua(d);B=0;za=Ia(40,H|0,135593,28)|0;Aa=B;B=0;d:do if(!(Aa&1)?(B=0,Xa(239,za|0,0)|0,Ba=B,B=0,!(Ba&1)):0){Ba=Ab(20)|0;B=0;eb(502,I|0,127077,81);Ra=B;B=0;do if(!(Ra&1)){B=0;eb(502,J|0,128297,25);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Ta=Q;Yua(I);Ua=Ta;Va=Sa;break}B=0;wa(510,K|0,b|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Wa=1;Ya=Q;Za=Sa}else{B=0;ua(163,Ba|0,I|0,J|0,4968,K|0);Sa=B;B=0;if(Sa&1)_a=1;else{B=0;eb(503,Ba|0,1240,229);B=0;_a=0}Sa=Rb()|0;Ta=Q;Yua(K);Wa=_a;Ya=Ta;Za=Sa}Yua(J);Yua(I);if(Wa){Ua=Ya;Va=Za}else{$a=Ya;ab=Za;break d}}else{Sa=Rb()|0;Ua=Q;Va=Sa}while(0);zb(Ba|0);$a=Ua;ab=Va}else oa=158;while(0);if((oa|0)==158){za=Rb()|0;$a=Q;ab=za}k[H>>2]=27468;k[la>>2]=27488;k[b>>2]=27560;Yua(xa);Ava(b);vva(la);La=$a;Ma=ab;Qb(Ma|0)}while(0);Na=Pa;Oa=Qa;vva(la);Qb(Oa|0)}}else{b=0;while(1){ta=ma(ga,b)|0;ja=+p[Z+(ta<<3)>>3];p[_+(b<<3)>>3]=ja;ka=+p[Z+(ta+1<<3)>>3];p[ba+(b<<3)>>3]=ka;ia=+$(+ja);p[t>>3]=ia;ta=k[t>>2]|0;ha=k[t+4>>2]|0;if(ha>>>0>2146435072|(ha|0)==2146435072&ta>>>0>0){oa=25;break b}if((ta|0)==0&(ha|0)==2146435072){oa=49;break b}ia=+$(+ka);p[t>>3]=ia;ha=k[t>>2]|0;ta=k[t+4>>2]|0;if(ta>>>0>2146435072|(ta|0)==2146435072&ha>>>0>0){oa=73;break b}if((ha|0)==0&(ta|0)==2146435072){oa=97;break b}b=b+1|0;if((b|0)>=(U|0))break a}}while(0);if((oa|0)==25){ga=i+56|0;b=i+4|0;k[i>>2]=27524;k[ga>>2]=27544;B=0;wa(508,i+56|0,b|0);la=B;B=0;if(la&1){la=Rb()|0;bb=Q;cb=la;vva(ga);Qb(cb|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[ga>>2]=27488;B=0;va(448,b|0);la=B;B=0;do if(la&1){ta=Rb()|0;db=Q;fb=ta}else{k[b>>2]=27560;ta=i+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);ha=B;B=0;if(ha&1){ha=Rb()|0;za=Q;Yua(d);Yua(ta);Ava(b);db=za;fb=ha;break}Yua(d);B=0;ha=Ia(40,i|0,135564,28)|0;za=B;B=0;e:do if(!(za&1)?(B=0,Xa(239,ha|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,j|0,127077,81);na=B;B=0;do if(!(na&1)){B=0;eb(502,l|0,128297,25);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;ya=Q;Yua(j);gb=ya;hb=Ra;break}B=0;wa(510,m|0,b|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;ib=Q;jb=Ra;kb=1}else{B=0;ua(163,Aa|0,j|0,l|0,4960,m|0);Ra=B;B=0;if(Ra&1)lb=1;else{B=0;eb(503,Aa|0,1240,229);B=0;lb=0}Ra=Rb()|0;ya=Q;Yua(m);ib=ya;jb=Ra;kb=lb}Yua(l);Yua(j);if(kb){gb=ib;hb=jb}else{mb=ib;nb=jb;break e}}else{Ra=Rb()|0;gb=Q;hb=Ra}while(0);zb(Aa|0);mb=gb;nb=hb}else oa=40;while(0);if((oa|0)==40){ha=Rb()|0;mb=Q;nb=ha}k[i>>2]=27468;k[ga>>2]=27488;k[b>>2]=27560;Yua(ta);Ava(b);vva(ga);La=mb;Ma=nb;Qb(Ma|0)}while(0);bb=db;cb=fb;vva(ga);Qb(cb|0)}else if((oa|0)==49){b=n+56|0;la=n+4|0;k[n>>2]=27524;k[b>>2]=27544;B=0;wa(508,n+56|0,la|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ob=Q;pb=ha;vva(b);Qb(pb|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[b>>2]=27488;B=0;va(448,la|0);ha=B;B=0;do if(ha&1){za=Rb()|0;qb=Q;rb=za}else{k[la>>2]=27560;za=n+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,la|0,d|0);na=B;B=0;if(na&1){na=Rb()|0;xa=Q;Yua(d);Yua(za);Ava(la);qb=xa;rb=na;break}Yua(d);B=0;na=Ia(40,n|0,135593,28)|0;xa=B;B=0;f:do if(!(xa&1)?(B=0,Xa(239,na|0,0)|0,Ra=B,B=0,!(Ra&1)):0){Ra=Ab(20)|0;B=0;eb(502,o|0,127077,81);ya=B;B=0;do if(!(ya&1)){B=0;eb(502,q|0,128297,25);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Ta=Q;Yua(o);sb=Ta;tb=Sa;break}B=0;wa(510,s|0,la|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;ub=1;vb=Q;wb=Sa}else{B=0;ua(163,Ra|0,o|0,q|0,4961,s|0);Sa=B;B=0;if(Sa&1)xb=1;else{B=0;eb(503,Ra|0,1240,229);B=0;xb=0}Sa=Rb()|0;Ta=Q;Yua(s);ub=xb;vb=Ta;wb=Sa}Yua(q);Yua(o);if(ub){sb=vb;tb=wb}else{yb=vb;Bb=wb;break f}}else{Sa=Rb()|0;sb=Q;tb=Sa}while(0);zb(Ra|0);yb=sb;Bb=tb}else oa=64;while(0);if((oa|0)==64){na=Rb()|0;yb=Q;Bb=na}k[n>>2]=27468;k[b>>2]=27488;k[la>>2]=27560;Yua(za);Ava(la);vva(b);La=yb;Ma=Bb;Qb(Ma|0)}while(0);ob=qb;pb=rb;vva(b);Qb(pb|0)}else if((oa|0)==73){la=u+56|0;ha=u+4|0;k[u>>2]=27524;k[la>>2]=27544;B=0;wa(508,u+56|0,ha|0);ga=B;B=0;if(ga&1){ga=Rb()|0;Cb=Q;Db=ga;vva(la);Qb(Db|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[la>>2]=27488;B=0;va(448,ha|0);ga=B;B=0;do if(ga&1){na=Rb()|0;Eb=Q;Fb=na}else{k[ha>>2]=27560;na=u+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ha|0,d|0);xa=B;B=0;if(xa&1){xa=Rb()|0;ta=Q;Yua(d);Yua(na);Ava(ha);Eb=ta;Fb=xa;break}Yua(d);B=0;xa=Ia(40,u|0,135564,28)|0;ta=B;B=0;g:do if(!(ta&1)?(B=0,Xa(239,xa|0,0)|0,ya=B,B=0,!(ya&1)):0){ya=Ab(20)|0;B=0;eb(502,v|0,127077,81);Aa=B;B=0;do if(!(Aa&1)){B=0;eb(502,w|0,128297,25);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Ta=Q;Yua(v);Gb=Ta;Hb=Sa;break}B=0;wa(510,x|0,ha|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Ib=1;Jb=Q;Kb=Sa}else{B=0;ua(163,ya|0,v|0,w|0,4962,x|0);Sa=B;B=0;if(Sa&1)Lb=1;else{B=0;eb(503,ya|0,1240,229);B=0;Lb=0}Sa=Rb()|0;Ta=Q;Yua(x);Ib=Lb;Jb=Ta;Kb=Sa}Yua(w);Yua(v);if(Ib){Gb=Jb;Hb=Kb}else{Mb=Jb;Nb=Kb;break g}}else{Sa=Rb()|0;Gb=Q;Hb=Sa}while(0);zb(ya|0);Mb=Gb;Nb=Hb}else oa=88;while(0);if((oa|0)==88){xa=Rb()|0;Mb=Q;Nb=xa}k[u>>2]=27468;k[la>>2]=27488;k[ha>>2]=27560;Yua(na);Ava(ha);vva(la);La=Mb;Ma=Nb;Qb(Ma|0)}while(0);Cb=Eb;Db=Fb;vva(la);Qb(Db|0)}else if((oa|0)==97){ha=y+56|0;ga=y+4|0;k[y>>2]=27524;k[ha>>2]=27544;B=0;wa(508,y+56|0,ga|0);b=B;B=0;if(b&1){b=Rb()|0;Ob=Q;Pb=b;vva(ha);Qb(Pb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[ha>>2]=27488;B=0;va(448,ga|0);b=B;B=0;do if(b&1){xa=Rb()|0;Sb=Q;Tb=xa}else{k[ga>>2]=27560;xa=y+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ga|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;za=Q;Yua(d);Yua(xa);Ava(ga);Sb=za;Tb=ta;break}Yua(d);B=0;ta=Ia(40,y|0,135593,28)|0;za=B;B=0;h:do if(!(za&1)?(B=0,Xa(239,ta|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,z|0,127077,81);Ra=B;B=0;do if(!(Ra&1)){B=0;eb(502,A|0,128297,25);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Ta=Q;Yua(z);Ub=Ta;Vb=Sa;break}B=0;wa(510,C|0,ga|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Wb=1;Xb=Q;Yb=Sa}else{B=0;ua(163,Aa|0,z|0,A|0,4963,C|0);Sa=B;B=0;if(Sa&1)Zb=1;else{B=0;eb(503,Aa|0,1240,229);B=0;Zb=0}Sa=Rb()|0;Ta=Q;Yua(C);Wb=Zb;Xb=Ta;Yb=Sa}Yua(A);Yua(z);if(Wb){Ub=Xb;Vb=Yb}else{_b=Xb;$b=Yb;break h}}else{Sa=Rb()|0;Ub=Q;Vb=Sa}while(0);zb(Aa|0);_b=Ub;$b=Vb}else oa=112;while(0);if((oa|0)==112){ta=Rb()|0;_b=Q;$b=ta}k[y>>2]=27468;k[ha>>2]=27488;k[ga>>2]=27560;Yua(xa);Ava(ga);vva(ha);La=_b;Ma=$b;Qb(Ma|0)}while(0);Ob=Sb;Pb=Tb;vva(ha);Qb(Pb|0)}}while(0);do if(W){Pb=0;while(1){ia=+p[Z+(Pb+X<<3)>>3];p[Y+(Pb<<3)>>3]=ia;ka=+$(+ia);p[t>>3]=ka;Tb=k[t>>2]|0;Sb=k[t+4>>2]|0;if(Sb>>>0>2146435072|(Sb|0)==2146435072&Tb>>>0>0){oa=171;break}Pb=Pb+1|0;if((Tb|0)==0&(Sb|0)==2146435072){oa=195;break}if((Pb|0)>=(V|0)){oa=168;break}}if((oa|0)==168){if(!W)break;ka=+p[h>>3];Pb=0;do{ha=Y+(Pb<<3)|0;p[ha>>3]=+p[ha>>3]*ka;Pb=Pb+1|0}while((Pb|0)!=(V|0))}else if((oa|0)==171){Pb=L+56|0;ha=L+4|0;k[L>>2]=27524;k[Pb>>2]=27544;B=0;wa(508,L+56|0,ha|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;ac=Q;bc=Sb;vva(Pb);Qb(bc|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[Pb>>2]=27488;B=0;va(448,ha|0);Sb=B;B=0;do if(Sb&1){Tb=Rb()|0;cc=Q;dc=Tb}else{k[ha>>2]=27560;Tb=L+36|0;k[Tb>>2]=0;k[Tb+4>>2]=0;k[Tb+8>>2]=0;k[Tb+12>>2]=0;k[L+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ha|0,d|0);Ob=B;B=0;if(Ob&1){Ob=Rb()|0;$b=Q;Yua(d);Yua(Tb);Ava(ha);cc=$b;dc=Ob;break}Yua(d);B=0;Ob=Ia(40,L|0,135564,28)|0;$b=B;B=0;i:do if(!($b&1)?(B=0,Xa(239,Ob|0,0)|0,_b=B,B=0,!(_b&1)):0){_b=Ab(20)|0;B=0;eb(502,M|0,127077,81);y=B;B=0;do if(!(y&1)){B=0;eb(502,N|0,128297,25);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;Ub=Q;Yua(M);ec=Ub;fc=Vb;break}B=0;wa(510,O|0,ha|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;gc=1;hc=Q;ic=Vb}else{B=0;ua(163,_b|0,M|0,N|0,4973,O|0);Vb=B;B=0;if(Vb&1)jc=1;else{B=0;eb(503,_b|0,1240,229);B=0;jc=0}Vb=Rb()|0;Ub=Q;Yua(O);gc=jc;hc=Ub;ic=Vb}Yua(N);Yua(M);if(gc){ec=hc;fc=ic}else{kc=hc;lc=ic;break i}}else{Vb=Rb()|0;ec=Q;fc=Vb}while(0);zb(_b|0);kc=ec;lc=fc}else oa=186;while(0);if((oa|0)==186){Ob=Rb()|0;kc=Q;lc=Ob}k[L>>2]=27468;k[Pb>>2]=27488;k[ha>>2]=27560;Yua(Tb);Ava(ha);vva(Pb);La=kc;Ma=lc;Qb(Ma|0)}while(0);ac=cc;bc=dc;vva(Pb);Qb(bc|0)}else if((oa|0)==195){ha=P+56|0;Sb=P+4|0;k[P>>2]=27524;k[ha>>2]=27544;B=0;wa(508,P+56|0,Sb|0);Ob=B;B=0;if(Ob&1){Ob=Rb()|0;mc=Q;nc=Ob;vva(ha);Qb(nc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[ha>>2]=27488;B=0;va(448,Sb|0);Ob=B;B=0;do if(Ob&1){$b=Rb()|0;oc=Q;pc=$b}else{k[Sb>>2]=27560;$b=P+36|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[P+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Sb|0,d|0);xa=B;B=0;if(xa&1){xa=Rb()|0;y=Q;Yua(d);Yua($b);Ava(Sb);oc=y;pc=xa;break}Yua(d);B=0;xa=Ia(40,P|0,135593,28)|0;y=B;B=0;j:do if(!(y&1)?(B=0,Xa(239,xa|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,R|0,127077,81);Vb=B;B=0;do if(!(Vb&1)){B=0;eb(502,S|0,128297,25);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Yb=Q;Yua(R);qc=Yb;rc=Ub;break}B=0;wa(510,T|0,Sb|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;sc=1;tc=Q;uc=Ub}else{B=0;ua(163,Aa|0,R|0,S|0,4974,T|0);Ub=B;B=0;if(Ub&1)vc=1;else{B=0;eb(503,Aa|0,1240,229);B=0;vc=0}Ub=Rb()|0;Yb=Q;Yua(T);sc=vc;tc=Yb;uc=Ub}Yua(S);Yua(R);if(sc){qc=tc;rc=uc}else{wc=tc;xc=uc;break j}}else{Ub=Rb()|0;qc=Q;rc=Ub}while(0);zb(Aa|0);wc=qc;xc=rc}else oa=210;while(0);if((oa|0)==210){xa=Rb()|0;wc=Q;xc=xa}k[P>>2]=27468;k[ha>>2]=27488;k[Sb>>2]=27560;Yua($b);Ava(Sb);vva(ha);La=wc;Ma=xc;Qb(Ma|0)}while(0);mc=oc;nc=pc;vva(ha);Qb(nc|0)}}while(0);if((k[e>>2]|0)==3){if(ea){nc=0;do{ka=+p[_+(nc<<3)>>3];ia=+p[ba+(nc<<3)>>3];ja=+p[ca+(nc<<3)>>3];yc=+aa(+(ka*ka+ia*ia+ja*ja));p[da+(nc<<3)>>3]=yc;nc=nc+1|0}while((nc|0)!=(U|0))}}else if(ea){ea=0;do{yc=+p[_+(ea<<3)>>3];ja=+p[ba+(ea<<3)>>3];ia=+aa(+(yc*yc+ja*ja));p[da+(ea<<3)>>3]=ia;ea=ea+1|0}while((ea|0)!=(U|0))}Pp(c,674,675);Pp(c,677,678);if(W)Pp(c,653,654);if((k[e>>2]|0)==3)Pp(c,679,682);U=k[c>>2]|0;ea=k[U+48>>2]|0;nc=Hc[k[U+504>>2]&511](c)|0;rd[ea&511](c,674,_,nc);nc=k[c>>2]|0;ea=k[nc+48>>2]|0;U=Hc[k[nc+504>>2]&511](c)|0;rd[ea&511](c,677,ba,U);U=k[c>>2]|0;ea=k[U+48>>2]|0;nc=Hc[k[U+504>>2]&511](c)|0;rd[ea&511](c,671,da,nc);if(W){W=k[c>>2]|0;nc=k[W+48>>2]|0;ea=Hc[k[W+404>>2]&511](c)|0;rd[nc&511](c,653,Y,ea)}if((k[e>>2]|0)==3){e=k[c>>2]|0;ea=k[e+48>>2]|0;nc=Hc[k[e+504>>2]&511](c)|0;rd[ea&511](c,679,ca,nc)}Tqa(Y);Tqa(da);Tqa(ca);Tqa(ba);Tqa(_);Tqa(Z);Z=k[f>>2]|0;if(Z)Tqa(Z);k[f>>2]=0;f=k[g>>2]|0;if(!f){k[g>>2]=0;Tqa(fa);r=a;return}Tqa(f);k[g>>2]=0;Tqa(fa);r=a;return}function A9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0.0;a=r;r=r+1088|0;d=a+1064|0;e=a+1036|0;f=a+1020|0;g=a+1016|0;h=a+880|0;i=a+1052|0;j=a+1040|0;l=a+1024|0;m=a+728|0;n=a+864|0;o=a+712|0;q=a+560|0;s=a+576|0;u=a+272|0;v=a+120|0;w=a+108|0;x=a+424|0;y=a+96|0;z=a+84|0;A=a+72|0;C=a+288|0;D=a+60|0;E=a+48|0;F=a+36|0;G=a+136|0;H=a+24|0;I=a+12|0;J=a;k[f>>2]=0;k[g>>2]=0;K=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;L=K>>>0>536870911?-1:K<<3;M=Rqa(L)|0;N=Rqa(L)|0;O=Rqa(L)|0;cp(c,e,298);P=+Dp(c,265);R=+Dp(c,65);switch(k[e>>2]|0){case 300:{xp(c,N,353);if((K|0)>0){S=P*R;L=0;do{p[M+(L<<3)>>3]=S*+p[N+(L<<3)>>3];L=L+1|0}while((L|0)!=(K|0));T=2}else T=2;break}case 302:{Uo(c,g);xp(c,O,339);if((K|0)>0){S=P*R;L=k[g>>2]|0;U=0;do{p[M+(U<<3)>>3]=S*(+p[O+(U<<3)>>3]-+p[L+((U*3|0)+2<<3)>>3]);U=U+1|0}while((U|0)!=(K|0));T=2}else T=2;break}case 301:{Uo(c,g);xp(c,O,339);if((K|0)>0){S=P*R;U=k[g>>2]|0;L=0;do{p[M+(L<<3)>>3]=S*(+p[O+(L<<3)>>3]-+p[U+((L*3|0)+2<<3)>>3]);L=L+1|0}while((L|0)!=(K|0));T=1}else T=1;break}default:{K=h+56|0;L=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,L|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;W=U;vva(K);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,L|0);U=B;B=0;do if(U&1){X=Rb()|0;Y=Q;Z=X}else{k[L>>2]=27560;X=h+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,L|0,d|0);_=B;B=0;if(_&1){_=Rb()|0;ba=Q;Yua(d);Yua(X);Ava(L);Y=ba;Z=_;break}Yua(d);B=0;_=Ia(40,h|0,144639,5)|0;ba=B;B=0;a:do if((((!(ba&1)?(B=0,ca=ya(427,k[e>>2]|0)|0,da=B,B=0,!(da&1)):0)?(da=Lta(ca)|0,B=0,ea=Ia(40,_|0,ca|0,da|0)|0,da=B,B=0,!(da&1)):0)?(B=0,da=Ia(40,ea|0,146481,18)|0,ea=B,B=0,!(ea&1)):0)?(B=0,Xa(239,da|0,0)|0,da=B,B=0,!(da&1)):0){da=Ab(20)|0;B=0;eb(502,i|0,127077,81);ea=B;B=0;do if(!(ea&1)){B=0;eb(502,j|0,128323,26);ca=B;B=0;if(ca&1){ca=Rb()|0;fa=Q;Yua(i);ga=fa;ha=ca;break}B=0;wa(510,l|0,L|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ia=Q;ja=ca;ka=1}else{B=0;ua(163,da|0,i|0,j|0,1812,l|0);ca=B;B=0;if(ca&1)la=1;else{B=0;eb(503,da|0,1240,229);B=0;la=0}ca=Rb()|0;fa=Q;Yua(l);ia=fa;ja=ca;ka=la}Yua(j);Yua(i);if(ka){ga=ia;ha=ja}else{na=ia;oa=ja;break a}}else{ca=Rb()|0;ga=Q;ha=ca}while(0);zb(da|0);na=ga;oa=ha}else pa=29;while(0);if((pa|0)==29){_=Rb()|0;na=Q;oa=_}k[h>>2]=27468;k[K>>2]=27488;k[L>>2]=27560;Yua(X);Ava(L);vva(K);qa=na;ra=oa;Qb(ra|0)}while(0);V=Y;W=Z;vva(K);Qb(W|0)}}rd[k[(k[c>>2]|0)+48>>2]&511](c,653,M,738);Tqa(M);Tqa(N);Tqa(O);b:do switch(k[e>>2]|0){case 300:{sa=c;break}case 301:case 302:{if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){sa=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break b}O=k[g>>2]|0;if(O)Tqa(O);k[g>>2]=0;r=a;return}default:{O=m+56|0;N=m+4|0;k[m>>2]=27524;k[O>>2]=27544;B=0;wa(508,m+56|0,N|0);M=B;B=0;if(M&1){M=Rb()|0;ta=Q;xa=M;vva(O);Qb(xa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[O>>2]=27488;B=0;va(448,N|0);M=B;B=0;do if(M&1){W=Rb()|0;za=Q;Aa=W}else{k[N>>2]=27560;W=m+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,N|0,d|0);K=B;B=0;if(K&1){K=Rb()|0;Z=Q;Yua(d);Yua(W);Ava(N);za=Z;Aa=K;break}Yua(d);B=0;K=Ia(40,m|0,144639,5)|0;Z=B;B=0;c:do if((((!(Z&1)?(B=0,Y=ya(427,k[e>>2]|0)|0,V=B,B=0,!(V&1)):0)?(V=Lta(Y)|0,B=0,oa=Ia(40,K|0,Y|0,V|0)|0,V=B,B=0,!(V&1)):0)?(B=0,V=Ia(40,oa|0,146481,18)|0,oa=B,B=0,!(oa&1)):0)?(B=0,Xa(239,V|0,0)|0,V=B,B=0,!(V&1)):0){V=Ab(20)|0;B=0;eb(502,n|0,127077,81);oa=B;B=0;do if(!(oa&1)){B=0;eb(502,o|0,128323,26);Y=B;B=0;if(Y&1){Y=Rb()|0;na=Q;Yua(n);Ba=na;Ca=Y;break}B=0;wa(510,q|0,N|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Da=1;Ea=Q;Fa=Y}else{B=0;ua(163,V|0,n|0,o|0,1828,q|0);Y=B;B=0;if(Y&1)Ga=1;else{B=0;eb(503,V|0,1240,229);B=0;Ga=0}Y=Rb()|0;na=Q;Yua(q);Da=Ga;Ea=na;Fa=Y}Yua(o);Yua(n);if(Da){Ba=Ea;Ca=Fa}else{Ha=Ea;Ja=Fa;break c}}else{Y=Rb()|0;Ba=Q;Ca=Y}while(0);zb(V|0);Ha=Ba;Ja=Ca}else pa=61;while(0);if((pa|0)==61){K=Rb()|0;Ha=Q;Ja=K}k[m>>2]=27468;k[O>>2]=27488;k[N>>2]=27560;Yua(W);Ava(N);vva(O);qa=Ha;ra=Ja;Qb(ra|0)}while(0);ta=za;xa=Aa;vva(O);Qb(xa|0)}}while(0);xa=Hc[k[(k[sa>>2]|0)+164>>2]&511](sa)|0;Aa=ma(xa,T)|0;rp(sa,f,536,943);za=Rqa(Aa>>>0>536870911?-1:Aa<<3)|0;ta=xa>>>0>536870911?-1:xa<<3;Ja=Rqa(ta)|0;Ha=Rqa(ta)|0;m=Rqa(ta)|0;Ca=Rqa(ta)|0;if((Aa|0)>0){ta=k[f>>2]|0;Ba=0;do{p[za+(Ba<<3)>>3]=+p[b+(k[ta+(Ba<<2)>>2]<<3)>>3];Ba=Ba+1|0}while((Ba|0)!=(Aa|0))}Aa=(T|0)==2;if(Aa)Aq(sa,za,971);Ba=(xa|0)>0;d:do if(Ba){e:do if(Aa){ta=0;while(1){b=ta<<1;S=+p[za+(b<<3)>>3];p[Ja+(ta<<3)>>3]=S;R=+$(+S);p[t>>3]=R;Fa=k[t>>2]|0;Ea=k[t+4>>2]|0;if(Ea>>>0>2146435072|(Ea|0)==2146435072&Fa>>>0>0){pa=82;break e}if((Fa|0)==0&(Ea|0)==2146435072){pa=106;break e}R=+p[za+((b|1)<<3)>>3];p[Ha+(ta<<3)>>3]=R;S=+$(+R);p[t>>3]=S;b=k[t>>2]|0;Ea=k[t+4>>2]|0;if(Ea>>>0>2146435072|(Ea|0)==2146435072&b>>>0>0){pa=129;break}if((b|0)==0&(Ea|0)==2146435072){pa=152;break}ta=ta+1|0;if((ta|0)>=(xa|0))break d}if((pa|0)==129){ta=C+56|0;W=C+4|0;k[C>>2]=27524;k[ta>>2]=27544;B=0;wa(508,C+56|0,W|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Ka=Q;La=Ea;vva(ta);Qb(La|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[ta>>2]=27488;B=0;va(448,W|0);Ea=B;B=0;do if(Ea&1){b=Rb()|0;Ma=Q;Na=b}else{k[W>>2]=27560;b=C+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[C+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Da=Q;Yua(d);Yua(b);Ava(W);Ma=Da;Na=Fa;break}Yua(d);B=0;Fa=Ia(40,C|0,135564,28)|0;Da=B;B=0;f:do if(!(Da&1)?(B=0,Xa(239,Fa|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,D|0,127077,81);o=B;B=0;do if(!(o&1)){B=0;eb(502,E|0,128323,26);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;q=Q;Yua(D);Oa=q;Pa=Ga;break}B=0;wa(510,F|0,W|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Qa=1;Ra=Q;Sa=Ga}else{B=0;ua(163,n|0,D|0,E|0,1857,F|0);Ga=B;B=0;if(Ga&1)Ta=1;else{B=0;eb(503,n|0,1240,229);B=0;Ta=0}Ga=Rb()|0;q=Q;Yua(F);Qa=Ta;Ra=q;Sa=Ga}Yua(E);Yua(D);if(Qa){Oa=Ra;Pa=Sa}else{Ua=Ra;Va=Sa;break f}}else{Ga=Rb()|0;Oa=Q;Pa=Ga}while(0);zb(n|0);Ua=Oa;Va=Pa}else pa=144;while(0);if((pa|0)==144){Fa=Rb()|0;Ua=Q;Va=Fa}k[C>>2]=27468;k[ta>>2]=27488;k[W>>2]=27560;Yua(b);Ava(W);vva(ta);qa=Ua;ra=Va;Qb(ra|0)}while(0);Ka=Ma;La=Na;vva(ta);Qb(La|0)}else if((pa|0)==152){W=G+56|0;Ea=G+4|0;k[G>>2]=27524;k[W>>2]=27544;B=0;wa(508,G+56|0,Ea|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Wa=Q;Ya=Fa;vva(W);Qb(Ya|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[W>>2]=27488;B=0;va(448,Ea|0);Fa=B;B=0;do if(Fa&1){Da=Rb()|0;Za=Q;_a=Da}else{k[Ea>>2]=27560;Da=G+36|0;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[G+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ea|0,d|0);V=B;B=0;if(V&1){V=Rb()|0;o=Q;Yua(d);Yua(Da);Ava(Ea);Za=o;_a=V;break}Yua(d);B=0;V=Ia(40,G|0,135593,28)|0;o=B;B=0;g:do if(!(o&1)?(B=0,Xa(239,V|0,0)|0,Ga=B,B=0,!(Ga&1)):0){Ga=Ab(20)|0;B=0;eb(502,H|0,127077,81);q=B;B=0;do if(!(q&1)){B=0;eb(502,I|0,128323,26);N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(H);$a=M;ab=N;break}B=0;wa(510,J|0,Ea|0);N=B;B=0;if(N&1){N=Rb()|0;bb=1;cb=Q;db=N}else{B=0;ua(163,Ga|0,H|0,I|0,1858,J|0);N=B;B=0;if(N&1)fb=1;else{B=0;eb(503,Ga|0,1240,229);B=0;fb=0}N=Rb()|0;M=Q;Yua(J);bb=fb;cb=M;db=N}Yua(I);Yua(H);if(bb){$a=cb;ab=db}else{gb=cb;hb=db;break g}}else{N=Rb()|0;$a=Q;ab=N}while(0);zb(Ga|0);gb=$a;hb=ab}else pa=167;while(0);if((pa|0)==167){V=Rb()|0;gb=Q;hb=V}k[G>>2]=27468;k[W>>2]=27488;k[Ea>>2]=27560;Yua(Da);Ava(Ea);vva(W);qa=gb;ra=hb;Qb(ra|0)}while(0);Wa=Za;Ya=_a;vva(W);Qb(Ya|0)}}else{Ea=0;while(1){Fa=za+((ma(Ea,T)|0)<<3)|0;S=+p[Fa>>3];p[Ja+(Ea<<3)>>3]=S;R=+$(+S);p[t>>3]=R;Fa=k[t>>2]|0;ta=k[t+4>>2]|0;if(ta>>>0>2146435072|(ta|0)==2146435072&Fa>>>0>0){pa=82;break e}if((Fa|0)==0&(ta|0)==2146435072){pa=106;break e}Ea=Ea+1|0;if((Ea|0)>=(xa|0))break d}}while(0);if((pa|0)==82){O=s+56|0;Ea=s+4|0;k[s>>2]=27524;k[O>>2]=27544;B=0;wa(508,s+56|0,Ea|0);W=B;B=0;if(W&1){W=Rb()|0;ib=Q;jb=W;vva(O);Qb(jb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[O>>2]=27488;B=0;va(448,Ea|0);W=B;B=0;do if(W&1){ta=Rb()|0;kb=Q;lb=ta}else{k[Ea>>2]=27560;ta=s+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ea|0,d|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;V=Q;Yua(d);Yua(ta);Ava(Ea);kb=V;lb=Fa;break}Yua(d);B=0;Fa=Ia(40,s|0,135564,28)|0;V=B;B=0;h:do if(!(V&1)?(B=0,Xa(239,Fa|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,u|0,127077,81);b=B;B=0;do if(!(b&1)){B=0;eb(502,v|0,128323,26);q=B;B=0;if(q&1){q=Rb()|0;n=Q;Yua(u);mb=n;nb=q;break}B=0;wa(510,w|0,Ea|0);q=B;B=0;if(q&1){q=Rb()|0;ob=1;pb=Q;qb=q}else{B=0;ua(163,o|0,u|0,v|0,1852,w|0);q=B;B=0;if(q&1)rb=1;else{B=0;eb(503,o|0,1240,229);B=0;rb=0}q=Rb()|0;n=Q;Yua(w);ob=rb;pb=n;qb=q}Yua(v);Yua(u);if(ob){mb=pb;nb=qb}else{sb=pb;tb=qb;break h}}else{q=Rb()|0;mb=Q;nb=q}while(0);zb(o|0);sb=mb;tb=nb}else pa=97;while(0);if((pa|0)==97){Fa=Rb()|0;sb=Q;tb=Fa}k[s>>2]=27468;k[O>>2]=27488;k[Ea>>2]=27560;Yua(ta);Ava(Ea);vva(O);qa=sb;ra=tb;Qb(ra|0)}while(0);ib=kb;jb=lb;vva(O);Qb(jb|0)}else if((pa|0)==106){Ea=x+56|0;W=x+4|0;k[x>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,x+56|0,W|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;ub=Q;vb=Fa;vva(Ea);Qb(vb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Ea>>2]=27488;B=0;va(448,W|0);Fa=B;B=0;do if(Fa&1){V=Rb()|0;wb=Q;xb=V}else{k[W>>2]=27560;V=x+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;Da=Q;Yua(d);Yua(V);Ava(W);wb=Da;xb=b;break}Yua(d);B=0;b=Ia(40,x|0,135593,28)|0;Da=B;B=0;i:do if(!(Da&1)?(B=0,Xa(239,b|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,y|0,127077,81);n=B;B=0;do if(!(n&1)){B=0;eb(502,z|0,128323,26);N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(y);yb=M;Bb=N;break}B=0;wa(510,A|0,W|0);N=B;B=0;if(N&1){N=Rb()|0;Cb=Q;Db=N;Eb=1}else{B=0;ua(163,q|0,y|0,z|0,1853,A|0);N=B;B=0;if(N&1)Fb=1;else{B=0;eb(503,q|0,1240,229);B=0;Fb=0}N=Rb()|0;M=Q;Yua(A);Cb=M;Db=N;Eb=Fb}Yua(z);Yua(y);if(Eb){yb=Cb;Bb=Db}else{Gb=Cb;Hb=Db;break i}}else{N=Rb()|0;yb=Q;Bb=N}while(0);zb(q|0);Gb=yb;Hb=Bb}else pa=121;while(0);if((pa|0)==121){b=Rb()|0;Gb=Q;Hb=b}k[x>>2]=27468;k[Ea>>2]=27488;k[W>>2]=27560;Yua(V);Ava(W);vva(Ea);qa=Gb;ra=Hb;Qb(ra|0)}while(0);ub=wb;vb=xb;vva(Ea);Qb(vb|0)}}while(0);do if(Aa){up(sa,m,679,0.0);if(Ba){vb=0;do{R=+p[Ja+(vb<<3)>>3];S=+p[Ha+(vb<<3)>>3];P=+p[m+(vb<<3)>>3];Ib=+aa(+(R*R+S*S+P*P));p[Ca+(vb<<3)>>3]=Ib;vb=vb+1|0}while((vb|0)!=(xa|0));pa=183}else{Pp(c,674,675);pa=184;break}}else{up(sa,Ha,677,0.0);if(Ba){vb=0;do{Ib=+p[Ja+(vb<<3)>>3];P=+p[Ha+(vb<<3)>>3];S=+aa(+(Ib*Ib+P*P));p[Ca+(vb<<3)>>3]=S;vb=vb+1|0}while((vb|0)!=(xa|0));pa=183}else{Pp(c,674,675);pa=185;break}}while(0);if((pa|0)==183){Pp(c,674,675);if(Aa)pa=184;else pa=185}if((pa|0)==184){Pp(c,677,678);Aa=k[c>>2]|0;xa=k[Aa+44>>2]|0;Ba=Hc[k[Aa+128>>2]&511](c)|0;rd[xa&511](c,674,Ja,Ba);Ba=k[c>>2]|0;xa=k[Ba+44>>2]|0;Aa=Hc[k[Ba+128>>2]&511](c)|0;rd[xa&511](c,677,Ha,Aa)}else if((pa|0)==185){pa=k[c>>2]|0;Aa=k[pa+44>>2]|0;xa=Hc[k[pa+128>>2]&511](c)|0;rd[Aa&511](c,674,Ja,xa)}xa=k[c>>2]|0;Aa=k[xa+44>>2]|0;pa=Hc[k[xa+128>>2]&511](c)|0;rd[Aa&511](c,671,Ca,pa);Tqa(Ca);Tqa(m);Tqa(Ha);Tqa(Ja);Tqa(za);za=k[g>>2]|0;if(za)Tqa(za);k[g>>2]=0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;if((k[e>>2]|0)==300){r=a;return}ap(sa);if(!sa){r=a;return}Ec[k[(k[sa>>2]|0)+4>>2]&1023](sa);r=a;return}function B9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0.0;a=r;r=r+720|0;d=a+704|0;e=a+700|0;f=a+684|0;g=a+680|0;h=a+520|0;i=a+688|0;j=a+668|0;l=a+656|0;m=a+384|0;n=a+368|0;o=a+84|0;q=a+72|0;s=a+232|0;u=a+60|0;v=a+48|0;w=a+36|0;x=a+96|0;y=a+24|0;z=a+12|0;A=a;k[f>>2]=0;k[g>>2]=0;cp(c,e,299);C=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;D=C>>>0>536870911?-1:C<<3;E=Rqa(D)|0;F=Rqa(D)|0;G=+Dp(c,265);H=+Dp(c,65);Uo(c,g);xp(c,F,339);if((C|0)>0){I=G*H;D=k[g>>2]|0;J=0;do{p[E+(J<<3)>>3]=I*(+p[F+(J<<3)>>3]-+p[D+((J*3|0)+2<<3)>>3]);J=J+1|0}while((J|0)!=(C|0))}rd[k[(k[c>>2]|0)+48>>2]&511](c,653,E,738);Tqa(E);Tqa(F);F=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;E=ma((k[e>>2]|0)+-1|0,F)|0;rp(c,f,540,943);C=Rqa(E>>>0>536870911?-1:E<<3)|0;J=F>>>0>536870911?-1:F<<3;D=Rqa(J)|0;K=Rqa(J)|0;L=Rqa(J)|0;M=Rqa(J)|0;if((E|0)>0){J=k[f>>2]|0;N=0;do{p[C+(N<<3)>>3]=+p[b+(k[J+(N<<2)>>2]<<3)>>3];N=N+1|0}while((N|0)!=(E|0))}E=k[e>>2]|0;if((E|0)==3){Aq(c,C,971);O=k[e>>2]|0}else O=E;E=O+-1|0;N=(O|0)==3;a:do if((F|0)>0){J=0;while(1){b=C+((ma(J,E)|0)<<3)|0;I=+p[b>>3];p[D+(J<<3)>>3]=I;H=+$(+I);p[t>>3]=H;b=k[t>>2]|0;P=k[t+4>>2]|0;if(P>>>0>2146435072|(P|0)==2146435072&b>>>0>0){R=11;break}if((b|0)==0&(P|0)==2146435072){R=35;break}if(N){H=+p[C+((J<<1|1)<<3)>>3];p[K+(J<<3)>>3]=H;I=+$(+H);p[t>>3]=I;P=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&P>>>0>0){R=60;break}if((P|0)==0&(b|0)==2146435072){R=84;break}}J=J+1|0;if((J|0)>=(F|0))break a}if((R|0)==11){J=h+56|0;b=h+4|0;k[h>>2]=27524;k[J>>2]=27544;B=0;wa(508,h+56|0,b|0);P=B;B=0;if(P&1){P=Rb()|0;S=Q;T=P;vva(J);Qb(T|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[J>>2]=27488;B=0;va(448,b|0);P=B;B=0;do if(P&1){U=Rb()|0;V=Q;W=U}else{k[b>>2]=27560;U=h+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(d);Yua(U);Ava(b);V=Y;W=X;break}Yua(d);B=0;X=Ia(40,h|0,135564,28)|0;Y=B;B=0;b:do if(!(Y&1)?(B=0,Xa(239,X|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,i|0,127077,81);_=B;B=0;do if(!(_&1)){B=0;eb(502,j|0,128350,25);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(i);da=ca;ea=ba;break}B=0;wa(510,l|0,b|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;ga=ba;ha=1}else{B=0;ua(163,Z|0,i|0,j|0,2820,l|0);ba=B;B=0;if(ba&1)ia=1;else{B=0;eb(503,Z|0,1240,229);B=0;ia=0}ba=Rb()|0;ca=Q;Yua(l);fa=ca;ga=ba;ha=ia}Yua(j);Yua(i);if(ha){da=fa;ea=ga}else{ja=fa;ka=ga;break b}}else{ba=Rb()|0;da=Q;ea=ba}while(0);zb(Z|0);ja=da;ka=ea}else R=26;while(0);if((R|0)==26){X=Rb()|0;ja=Q;ka=X}k[h>>2]=27468;k[J>>2]=27488;k[b>>2]=27560;Yua(U);Ava(b);vva(J);la=ja;na=ka;Qb(na|0)}while(0);S=V;T=W;vva(J);Qb(T|0)}else if((R|0)==35){b=m+56|0;P=m+4|0;k[m>>2]=27524;k[b>>2]=27544;B=0;wa(508,m+56|0,P|0);X=B;B=0;if(X&1){X=Rb()|0;oa=Q;pa=X;vva(b);Qb(pa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[b>>2]=27488;B=0;va(448,P|0);X=B;B=0;do if(X&1){Y=Rb()|0;qa=Q;ra=Y}else{k[P>>2]=27560;Y=m+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,P|0,d|0);_=B;B=0;if(_&1){_=Rb()|0;ba=Q;Yua(d);Yua(Y);Ava(P);qa=ba;ra=_;break}Yua(d);B=0;_=Ia(40,m|0,135593,28)|0;ba=B;B=0;c:do if(!(ba&1)?(B=0,Xa(239,_|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,n|0,127077,81);sa=B;B=0;do if(!(sa&1)){B=0;eb(502,o|0,128350,25);ta=B;B=0;if(ta&1){ta=Rb()|0;xa=Q;Yua(n);ya=ta;za=xa;break}B=0;wa(510,q|0,P|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Aa=1;Ba=Q;Ca=xa}else{B=0;ua(163,ca|0,n|0,o|0,2821,q|0);xa=B;B=0;if(xa&1)Da=1;else{B=0;eb(503,ca|0,1240,229);B=0;Da=0}xa=Rb()|0;ta=Q;Yua(q);Aa=Da;Ba=ta;Ca=xa}Yua(o);Yua(n);if(Aa){ya=Ca;za=Ba}else{Ea=Ba;Fa=Ca;break c}}else{xa=Rb()|0;ya=xa;za=Q}while(0);zb(ca|0);Ea=za;Fa=ya}else R=50;while(0);if((R|0)==50){_=Rb()|0;Ea=Q;Fa=_}k[m>>2]=27468;k[b>>2]=27488;k[P>>2]=27560;Yua(Y);Ava(P);vva(b);la=Ea;na=Fa;Qb(na|0)}while(0);oa=qa;pa=ra;vva(b);Qb(pa|0)}else if((R|0)==60){P=s+56|0;X=s+4|0;k[s>>2]=27524;k[P>>2]=27544;B=0;wa(508,s+56|0,X|0);J=B;B=0;if(J&1){J=Rb()|0;Ga=Q;Ha=J;vva(P);Qb(Ha|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[P>>2]=27488;B=0;va(448,X|0);J=B;B=0;do if(J&1){_=Rb()|0;Ja=Q;Ka=_}else{k[X>>2]=27560;_=s+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,X|0,d|0);ba=B;B=0;if(ba&1){ba=Rb()|0;U=Q;Yua(d);Yua(_);Ava(X);Ja=U;Ka=ba;break}Yua(d);B=0;ba=Ia(40,s|0,135564,28)|0;U=B;B=0;d:do if(!(U&1)?(B=0,Xa(239,ba|0,0)|0,sa=B,B=0,!(sa&1)):0){sa=Ab(20)|0;B=0;eb(502,u|0,127077,81);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,v|0,128350,25);xa=B;B=0;if(xa&1){xa=Rb()|0;ta=Q;Yua(u);La=xa;Ma=ta;break}B=0;wa(510,w|0,X|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Na=1;Oa=Q;Pa=ta}else{B=0;ua(163,sa|0,u|0,v|0,2824,w|0);ta=B;B=0;if(ta&1)Qa=1;else{B=0;eb(503,sa|0,1240,229);B=0;Qa=0}ta=Rb()|0;xa=Q;Yua(w);Na=Qa;Oa=xa;Pa=ta}Yua(v);Yua(u);if(Na){La=Pa;Ma=Oa}else{Ra=Oa;Sa=Pa;break d}}else{ta=Rb()|0;La=ta;Ma=Q}while(0);zb(sa|0);Ra=Ma;Sa=La}else R=75;while(0);if((R|0)==75){ba=Rb()|0;Ra=Q;Sa=ba}k[s>>2]=27468;k[P>>2]=27488;k[X>>2]=27560;Yua(_);Ava(X);vva(P);la=Ra;na=Sa;Qb(na|0)}while(0);Ga=Ja;Ha=Ka;vva(P);Qb(Ha|0)}else if((R|0)==84){X=x+56|0;J=x+4|0;k[x>>2]=27524;k[X>>2]=27544;B=0;wa(508,x+56|0,J|0);b=B;B=0;if(b&1){b=Rb()|0;Ta=Q;Ua=b;vva(X);Qb(Ua|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[X>>2]=27488;B=0;va(448,J|0);b=B;B=0;do if(b&1){ba=Rb()|0;Va=Q;Wa=ba}else{k[J>>2]=27560;ba=x+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,J|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;Y=Q;Yua(d);Yua(ba);Ava(J);Va=Y;Wa=U;break}Yua(d);B=0;U=Ia(40,x|0,135593,28)|0;Y=B;B=0;e:do if(!(Y&1)?(B=0,Xa(239,U|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,y|0,127077,81);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,z|0,128350,25);ta=B;B=0;if(ta&1){ta=Rb()|0;xa=Q;Yua(y);Ya=ta;Za=xa;break}B=0;wa(510,A|0,J|0);xa=B;B=0;if(xa&1){xa=Rb()|0;_a=1;$a=Q;ab=xa}else{B=0;ua(163,Z|0,y|0,z|0,2825,A|0);xa=B;B=0;if(xa&1)bb=1;else{B=0;eb(503,Z|0,1240,229);B=0;bb=0}xa=Rb()|0;ta=Q;Yua(A);_a=bb;$a=ta;ab=xa}Yua(z);Yua(y);if(_a){Ya=ab;Za=$a}else{cb=$a;db=ab;break e}}else{xa=Rb()|0;Ya=xa;Za=Q}while(0);zb(Z|0);cb=Za;db=Ya}else R=99;while(0);if((R|0)==99){U=Rb()|0;cb=Q;db=U}k[x>>2]=27468;k[X>>2]=27488;k[J>>2]=27560;Yua(ba);Ava(J);vva(X);la=cb;na=db;Qb(na|0)}while(0);Ta=Va;Ua=Wa;vva(X);Qb(Ua|0)}}while(0);if((O|0)==3){up(c,L,679,0.0);if((F|0)>0){O=0;do{I=+p[D+(O<<3)>>3];H=+p[K+(O<<3)>>3];G=+p[L+(O<<3)>>3];fb=+aa(+(I*I+H*H+G*G));p[M+(O<<3)>>3]=fb;O=O+1|0}while((O|0)!=(F|0))}}else{up(c,K,677,0.0);if((F|0)>0){O=0;do{fb=+p[D+(O<<3)>>3];G=+p[K+(O<<3)>>3];H=+aa(+(fb*fb+G*G));p[M+(O<<3)>>3]=H;O=O+1|0}while((O|0)!=(F|0))}}Pp(c,674,675);if((k[e>>2]|0)==3)Pp(c,677,678);F=k[c>>2]|0;O=k[F+48>>2]|0;Ua=Hc[k[F+128>>2]&511](c)|0;rd[O&511](c,674,D,Ua);if((k[e>>2]|0)==3){e=k[c>>2]|0;Ua=k[e+48>>2]|0;O=Hc[k[e+128>>2]&511](c)|0;rd[Ua&511](c,677,K,O)}O=k[c>>2]|0;Ua=k[O+48>>2]|0;e=Hc[k[O+128>>2]&511](c)|0;rd[Ua&511](c,671,M,e);Tqa(M);Tqa(L);Tqa(K);Tqa(D);Tqa(C);C=k[g>>2]|0;if(C)Tqa(C);k[g>>2]=0;g=k[f>>2]|0;if(!g){r=a;return}Tqa(g);r=a;return}function C9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0.0;a=r;r=r+912|0;d=a+892|0;e=a+888|0;f=a+872|0;g=a+868|0;h=a+852|0;i=a+704|0;j=a+876|0;l=a+856|0;m=a+840|0;n=a+552|0;o=a+688|0;q=a+536|0;s=a+248|0;u=a+400|0;v=a+96|0;w=a+84|0;x=a+72|0;y=a+264|0;z=a+60|0;A=a+48|0;C=a+36|0;D=a+112|0;E=a+24|0;F=a+12|0;G=a;k[g>>2]=0;k[h>>2]=0;H=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;I=H>>>0>536870911?-1:H<<3;J=Rqa(I)|0;K=Rqa(I)|0;L=Rqa(I)|0;cp(c,e,299);cp(c,f,298);M=+Dp(c,265);N=+Dp(c,65);if((k[e>>2]|0)==2){xp(c,K,353);if((H|0)>0){O=M*N;e=0;do{p[J+(e<<3)>>3]=O*+p[K+(e<<3)>>3];e=e+1|0}while((e|0)!=(H|0))}}else{Uo(c,h);xp(c,L,339);if((H|0)>0){O=M*N;e=k[h>>2]|0;I=0;do{p[J+(I<<3)>>3]=O*(+p[L+(I<<3)>>3]-+p[e+((I*3|0)+2<<3)>>3]);I=I+1|0}while((I|0)!=(H|0))}}rd[k[(k[c>>2]|0)+48>>2]&511](c,653,J,738);Tqa(J);Tqa(K);Tqa(L);a:do switch(k[f>>2]|0){case 300:{P=c;break}case 302:{if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){P=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break a}L=k[h>>2]|0;if(L)Tqa(L);k[h>>2]=0;r=a;return}default:{L=i+56|0;K=i+4|0;k[i>>2]=27524;k[L>>2]=27544;B=0;wa(508,i+56|0,K|0);J=B;B=0;if(J&1){J=Rb()|0;R=Q;S=J;vva(L);Qb(S|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[L>>2]=27488;B=0;va(448,K|0);J=B;B=0;do if(J&1){H=Rb()|0;T=Q;U=H}else{k[K>>2]=27560;H=i+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,K|0,d|0);I=B;B=0;if(I&1){I=Rb()|0;e=Q;Yua(d);Yua(H);Ava(K);T=e;U=I;break}Yua(d);B=0;I=Ia(40,i|0,144639,5)|0;e=B;B=0;b:do if((((!(e&1)?(B=0,V=ya(427,k[f>>2]|0)|0,W=B,B=0,!(W&1)):0)?(W=Lta(V)|0,B=0,X=Ia(40,I|0,V|0,W|0)|0,W=B,B=0,!(W&1)):0)?(B=0,W=Ia(40,X|0,146481,18)|0,X=B,B=0,!(X&1)):0)?(B=0,Xa(239,W|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,j|0,127077,81);X=B;B=0;do if(!(X&1)){B=0;eb(502,l|0,128376,27);V=B;B=0;if(V&1){V=Rb()|0;Y=Q;Yua(j);Z=Y;_=V;break}B=0;wa(510,m|0,K|0);V=B;B=0;if(V&1){V=Rb()|0;ba=Q;ca=V;da=1}else{B=0;ua(163,W|0,j|0,l|0,2162,m|0);V=B;B=0;if(V&1)ea=1;else{B=0;eb(503,W|0,1240,229);B=0;ea=0}V=Rb()|0;Y=Q;Yua(m);ba=Y;ca=V;da=ea}Yua(l);Yua(j);if(da){Z=ba;_=ca}else{fa=ba;ga=ca;break b}}else{V=Rb()|0;Z=Q;_=V}while(0);zb(W|0);fa=Z;ga=_}else ha=32;while(0);if((ha|0)==32){I=Rb()|0;fa=Q;ga=I}k[i>>2]=27468;k[L>>2]=27488;k[K>>2]=27560;Yua(H);Ava(K);vva(L);ia=fa;ja=ga;Qb(ja|0)}while(0);R=T;S=U;vva(L);Qb(S|0)}}while(0);S=Hc[k[(k[P>>2]|0)+164>>2]&511](P)|0;U=S<<1;rp(P,g,534,943);T=Rqa(U>>>0>536870911?-1:U<<3)|0;R=S>>>0>536870911?-1:S<<3;ga=Rqa(R)|0;fa=Rqa(R)|0;i=Rqa(R)|0;_=Rqa(R)|0;R=(S|0)>0;do if(R){Z=k[g>>2]|0;ca=0;do{p[T+(ca<<3)>>3]=+p[b+(k[Z+(ca<<2)>>2]<<3)>>3];ca=ca+1|0}while((ca|0)<(U|0));Aq(P,T,971);cp(P,f,298);if(R){ca=0;while(1){Z=ca<<1;O=+p[T+(Z<<3)>>3];p[ga+(ca<<3)>>3]=O;N=+p[T+((Z|1)<<3)>>3];p[fa+(ca<<3)>>3]=N;M=+$(+O);p[t>>3]=M;Z=k[t>>2]|0;L=k[t+4>>2]|0;if(L>>>0>2146435072|(L|0)==2146435072&Z>>>0>0){ha=48;break}if((Z|0)==0&(L|0)==2146435072){ha=72;break}M=+$(+N);p[t>>3]=M;L=k[t>>2]|0;Z=k[t+4>>2]|0;if(Z>>>0>2146435072|(Z|0)==2146435072&L>>>0>0){ha=96;break}ca=ca+1|0;if((L|0)==0&(Z|0)==2146435072){ha=120;break}if((ca|0)>=(S|0)){ha=143;break}}if((ha|0)==48){ca=n+56|0;Z=n+4|0;k[n>>2]=27524;k[ca>>2]=27544;B=0;wa(508,n+56|0,Z|0);L=B;B=0;if(L&1){L=Rb()|0;ka=Q;la=L;vva(ca);Qb(la|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[ca>>2]=27488;B=0;va(448,Z|0);L=B;B=0;do if(L&1){ba=Rb()|0;ma=Q;na=ba}else{k[Z>>2]=27560;ba=n+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Z|0,d|0);da=B;B=0;if(da&1){da=Rb()|0;j=Q;Yua(d);Yua(ba);Ava(Z);ma=j;na=da;break}Yua(d);B=0;da=Ia(40,n|0,135564,28)|0;j=B;B=0;c:do if(!(j&1)?(B=0,Xa(239,da|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,o|0,127077,81);ea=B;B=0;do if(!(ea&1)){B=0;eb(502,q|0,128376,27);m=B;B=0;if(m&1){m=Rb()|0;K=Q;Yua(o);oa=K;pa=m;break}B=0;wa(510,s|0,Z|0);m=B;B=0;if(m&1){m=Rb()|0;qa=1;ra=Q;sa=m}else{B=0;ua(163,l|0,o|0,q|0,2190,s|0);m=B;B=0;if(m&1)ta=1;else{B=0;eb(503,l|0,1240,229);B=0;ta=0}m=Rb()|0;K=Q;Yua(s);qa=ta;ra=K;sa=m}Yua(q);Yua(o);if(qa){oa=ra;pa=sa}else{xa=ra;za=sa;break c}}else{m=Rb()|0;oa=Q;pa=m}while(0);zb(l|0);xa=oa;za=pa}else ha=63;while(0);if((ha|0)==63){da=Rb()|0;xa=Q;za=da}k[n>>2]=27468;k[ca>>2]=27488;k[Z>>2]=27560;Yua(ba);Ava(Z);vva(ca);ia=xa;ja=za;Qb(ja|0)}while(0);ka=ma;la=na;vva(ca);Qb(la|0)}else if((ha|0)==72){Z=u+56|0;L=u+4|0;k[u>>2]=27524;k[Z>>2]=27544;B=0;wa(508,u+56|0,L|0);da=B;B=0;if(da&1){da=Rb()|0;Aa=Q;Ba=da;vva(Z);Qb(Ba|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Z>>2]=27488;B=0;va(448,L|0);da=B;B=0;do if(da&1){j=Rb()|0;Ca=Q;Da=j}else{k[L>>2]=27560;j=u+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,L|0,d|0);H=B;B=0;if(H&1){H=Rb()|0;ea=Q;Yua(d);Yua(j);Ava(L);Ca=ea;Da=H;break}Yua(d);B=0;H=Ia(40,u|0,135593,28)|0;ea=B;B=0;d:do if(!(ea&1)?(B=0,Xa(239,H|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,v|0,127077,81);m=B;B=0;do if(!(m&1)){B=0;eb(502,w|0,128376,27);K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(v);Ea=J;Fa=K;break}B=0;wa(510,x|0,L|0);K=B;B=0;if(K&1){K=Rb()|0;Ga=1;Ha=Q;Ja=K}else{B=0;ua(163,W|0,v|0,w|0,2191,x|0);K=B;B=0;if(K&1)Ka=1;else{B=0;eb(503,W|0,1240,229);B=0;Ka=0}K=Rb()|0;J=Q;Yua(x);Ga=Ka;Ha=J;Ja=K}Yua(w);Yua(v);if(Ga){Ea=Ha;Fa=Ja}else{La=Ha;Ma=Ja;break d}}else{K=Rb()|0;Ea=Q;Fa=K}while(0);zb(W|0);La=Ea;Ma=Fa}else ha=87;while(0);if((ha|0)==87){H=Rb()|0;La=Q;Ma=H}k[u>>2]=27468;k[Z>>2]=27488;k[L>>2]=27560;Yua(j);Ava(L);vva(Z);ia=La;ja=Ma;Qb(ja|0)}while(0);Aa=Ca;Ba=Da;vva(Z);Qb(Ba|0)}else if((ha|0)==96){L=y+56|0;da=y+4|0;k[y>>2]=27524;k[L>>2]=27544;B=0;wa(508,y+56|0,da|0);ca=B;B=0;if(ca&1){ca=Rb()|0;Na=Q;Oa=ca;vva(L);Qb(Oa|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[L>>2]=27488;B=0;va(448,da|0);ca=B;B=0;do if(ca&1){H=Rb()|0;Pa=Q;Qa=H}else{k[da>>2]=27560;H=y+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,da|0,d|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ba=Q;Yua(d);Yua(H);Ava(da);Pa=ba;Qa=ea;break}Yua(d);B=0;ea=Ia(40,y|0,135564,28)|0;ba=B;B=0;e:do if(!(ba&1)?(B=0,Xa(239,ea|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,z|0,127077,81);l=B;B=0;do if(!(l&1)){B=0;eb(502,A|0,128376,27);K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(z);Ra=J;Sa=K;break}B=0;wa(510,C|0,da|0);K=B;B=0;if(K&1){K=Rb()|0;Ta=1;Ua=Q;Va=K}else{B=0;ua(163,m|0,z|0,A|0,2192,C|0);K=B;B=0;if(K&1)Wa=1;else{B=0;eb(503,m|0,1240,229);B=0;Wa=0}K=Rb()|0;J=Q;Yua(C);Ta=Wa;Ua=J;Va=K}Yua(A);Yua(z);if(Ta){Ra=Ua;Sa=Va}else{Ya=Ua;Za=Va;break e}}else{K=Rb()|0;Ra=Q;Sa=K}while(0);zb(m|0);Ya=Ra;Za=Sa}else ha=111;while(0);if((ha|0)==111){ea=Rb()|0;Ya=Q;Za=ea}k[y>>2]=27468;k[L>>2]=27488;k[da>>2]=27560;Yua(H);Ava(da);vva(L);ia=Ya;ja=Za;Qb(ja|0)}while(0);Na=Pa;Oa=Qa;vva(L);Qb(Oa|0)}else if((ha|0)==120){da=D+56|0;ca=D+4|0;k[D>>2]=27524;k[da>>2]=27544;B=0;wa(508,D+56|0,ca|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_a=Q;$a=Z;vva(da);Qb($a|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[da>>2]=27488;B=0;va(448,ca|0);Z=B;B=0;do if(Z&1){ea=Rb()|0;ab=Q;bb=ea}else{k[ca>>2]=27560;ea=D+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ca|0,d|0);ba=B;B=0;if(ba&1){ba=Rb()|0;j=Q;Yua(d);Yua(ea);Ava(ca);ab=j;bb=ba;break}Yua(d);B=0;ba=Ia(40,D|0,135593,28)|0;j=B;B=0;f:do if(!(j&1)?(B=0,Xa(239,ba|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,E|0,127077,81);W=B;B=0;do if(!(W&1)){B=0;eb(502,F|0,128376,27);K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(E);cb=J;db=K;break}B=0;wa(510,G|0,ca|0);K=B;B=0;if(K&1){K=Rb()|0;fb=1;gb=Q;hb=K}else{B=0;ua(163,l|0,E|0,F|0,2193,G|0);K=B;B=0;if(K&1)ib=1;else{B=0;eb(503,l|0,1240,229);B=0;ib=0}K=Rb()|0;J=Q;Yua(G);fb=ib;gb=J;hb=K}Yua(F);Yua(E);if(fb){cb=gb;db=hb}else{jb=gb;kb=hb;break f}}else{K=Rb()|0;cb=Q;db=K}while(0);zb(l|0);jb=cb;kb=db}else ha=135;while(0);if((ha|0)==135){ba=Rb()|0;jb=Q;kb=ba}k[D>>2]=27468;k[da>>2]=27488;k[ca>>2]=27560;Yua(ea);Ava(ca);vva(da);ia=jb;ja=kb;Qb(ja|0)}while(0);_a=ab;$a=bb;vva(da);Qb($a|0)}else if((ha|0)==143){up(P,i,679,0.0);if(R)lb=0;else break;do{M=+p[ga+(lb<<3)>>3];N=+p[fa+(lb<<3)>>3];O=+p[i+(lb<<3)>>3];mb=+aa(+(M*M+N*N+O*O));p[_+(lb<<3)>>3]=mb;lb=lb+1|0}while((lb|0)!=(S|0))}}else ha=45}else{Aq(P,T,971);cp(P,f,298);ha=45}while(0);if((ha|0)==45)up(P,i,679,0.0);Pp(c,674,675);Pp(c,677,678);ha=k[c>>2]|0;S=k[ha+44>>2]|0;lb=Hc[k[ha+128>>2]&511](c)|0;rd[S&511](c,674,ga,lb);lb=k[c>>2]|0;S=k[lb+44>>2]|0;ha=Hc[k[lb+128>>2]&511](c)|0;rd[S&511](c,677,fa,ha);ha=k[c>>2]|0;S=k[ha+44>>2]|0;lb=Hc[k[ha+128>>2]&511](c)|0;rd[S&511](c,671,_,lb);Tqa(_);Tqa(i);Tqa(fa);Tqa(ga);Tqa(T);T=k[h>>2]|0;if(T)Tqa(T);k[h>>2]=0;h=k[g>>2]|0;if(h)Tqa(h);k[g>>2]=0;if((k[f>>2]|0)==300){r=a;return}ap(P);if(!P){r=a;return}Ec[k[(k[P>>2]|0)+4>>2]&1023](P);r=a;return}function D9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0.0;a=r;r=r+896|0;d=a+880|0;e=a+864|0;f=a+860|0;g=a+844|0;h=a+696|0;i=a+868|0;j=a+848|0;l=a+832|0;m=a+560|0;n=a+548|0;o=a+536|0;q=a+384|0;s=a+400|0;u=a+96|0;v=a+84|0;w=a+72|0;x=a+248|0;y=a+60|0;z=a+48|0;A=a+36|0;C=a+112|0;D=a+24|0;E=a+12|0;F=a;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;G=Hc[k[(k[c>>2]|0)+124>>2]&511](c)|0;if((Hc[k[(k[G>>2]|0)+20>>2]&511](G)|0)!=625){H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(H);Qb(L|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[I>>2]=27560;M=h+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,I|0,d|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(d);Yua(M);Ava(I);N=R;O=P;break}Yua(d);B=0;P=Ia(40,h|0,128404,27)|0;R=B;B=0;a:do if((((!(R&1)?(B=0,S=ya(k[(k[G>>2]|0)+20>>2]|0,G|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=ya(427,S|0)|0,S=B,B=0,!(S&1)):0)?(S=Lta(T)|0,B=0,U=Ia(40,P|0,T|0,S|0)|0,S=B,B=0,!(S&1)):0)?(B=0,Xa(239,U|0,0)|0,U=B,B=0,!(U&1)):0){U=Ab(20)|0;B=0;eb(502,i|0,127077,81);S=B;B=0;do if(!(S&1)){B=0;eb(502,j|0,128432,28);T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(i);W=T;X=V;break}B=0;wa(510,l|0,I|0);V=B;B=0;if(V&1){V=Rb()|0;Y=V;Z=Q;_=1}else{B=0;ua(163,U|0,i|0,j|0,7034,l|0);V=B;B=0;if(V&1)ba=1;else{B=0;eb(503,U|0,1240,229);B=0;ba=0}V=Rb()|0;T=Q;Yua(l);Y=V;Z=T;_=ba}Yua(j);Yua(i);if(_){W=Y;X=Z}else{ca=Y;da=Z;break a}}else{T=Rb()|0;W=T;X=Q}while(0);zb(U|0);ca=W;da=X}else ea=20;while(0);if((ea|0)==20){P=Rb()|0;ca=P;da=Q}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(M);Ava(I);vva(H);fa=ca;ga=da;Qb(fa|0)}while(0);K=N;L=O;vva(H);Qb(L|0)}L=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;H=L<<1;rp(G,e,536,943);rp(c,f,540,943);O=H>>>0>536870911?-1:H<<3;N=Rqa(O)|0;K=Rqa(O)|0;O=L>>>0>536870911?-1:L<<3;da=Rqa(O)|0;ca=Rqa(O)|0;I=Rqa(O)|0;h=Rqa(O)|0;X=Rqa(O)|0;W=Rqa(O)|0;O=(L|0)>0;if(O){Z=k[f>>2]|0;Y=k[e>>2]|0;_=0;do{p[N+(_<<3)>>3]=+p[b+(k[Z+(_<<2)>>2]<<3)>>3];p[K+(_<<3)>>3]=+p[b+(k[Y+(_<<2)>>2]<<3)>>3];_=_+1|0}while((_|0)!=(L|0))}if((L|0)<(H|0)){_=k[f>>2]|0;Y=L;do{p[N+(Y<<3)>>3]=+p[b+(k[_+(Y<<2)>>2]<<3)>>3];p[K+(Y<<3)>>3]=+p[K+(Y-L<<3)>>3];Y=Y+1|0}while((Y|0)!=(H|0))}Aq(G,K,971);Aq(c,N,971);do if(O){G=0;while(1){H=G<<1;ha=+p[K+(H<<3)>>3]+ +p[N+(H<<3)>>3];p[da+(G<<3)>>3]=ha;Y=H|1;ia=+p[K+(Y<<3)>>3]+ +p[N+(Y<<3)>>3];p[ca+(G<<3)>>3]=ia;ja=+$(+ha);p[t>>3]=ja;Y=k[t>>2]|0;H=k[t+4>>2]|0;if(H>>>0>2146435072|(H|0)==2146435072&Y>>>0>0){ea=38;break}if((Y|0)==0&(H|0)==2146435072){ea=62;break}ja=+$(+ia);p[t>>3]=ja;H=k[t>>2]|0;Y=k[t+4>>2]|0;if(Y>>>0>2146435072|(Y|0)==2146435072&H>>>0>0){ea=86;break}G=G+1|0;if((H|0)==0&(Y|0)==2146435072){ea=110;break}if((G|0)>=(L|0)){ea=133;break}}if((ea|0)==38){G=m+56|0;M=m+4|0;k[m>>2]=27524;k[G>>2]=27544;B=0;wa(508,m+56|0,M|0);Y=B;B=0;if(Y&1){Y=Rb()|0;ka=Q;la=Y;vva(G);Qb(la|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[G>>2]=27488;B=0;va(448,M|0);Y=B;B=0;do if(Y&1){H=Rb()|0;ma=Q;na=H}else{k[M>>2]=27560;H=m+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,M|0,d|0);_=B;B=0;if(_&1){_=Rb()|0;b=Q;Yua(d);Yua(H);Ava(M);ma=b;na=_;break}Yua(d);B=0;_=Ia(40,m|0,135564,28)|0;b=B;B=0;b:do if(!(b&1)?(B=0,Xa(239,_|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,n|0,127077,81);i=B;B=0;do if(!(i&1)){B=0;eb(502,o|0,128432,28);j=B;B=0;if(j&1){j=Rb()|0;ba=Q;Yua(n);oa=j;pa=ba;break}B=0;wa(510,q|0,M|0);ba=B;B=0;if(ba&1){ba=Rb()|0;qa=1;ra=ba;sa=Q}else{B=0;ua(163,Z|0,n|0,o|0,7074,q|0);ba=B;B=0;if(ba&1)ta=1;else{B=0;eb(503,Z|0,1240,229);B=0;ta=0}ba=Rb()|0;j=Q;Yua(q);qa=ta;ra=ba;sa=j}Yua(o);Yua(n);if(qa){oa=ra;pa=sa}else{xa=ra;za=sa;break b}}else{j=Rb()|0;oa=j;pa=Q}while(0);zb(Z|0);xa=oa;za=pa}else ea=53;while(0);if((ea|0)==53){_=Rb()|0;xa=_;za=Q}k[m>>2]=27468;k[G>>2]=27488;k[M>>2]=27560;Yua(H);Ava(M);vva(G);fa=xa;ga=za;Qb(fa|0)}while(0);ka=ma;la=na;vva(G);Qb(la|0)}else if((ea|0)==62){M=s+56|0;Y=s+4|0;k[s>>2]=27524;k[M>>2]=27544;B=0;wa(508,s+56|0,Y|0);_=B;B=0;if(_&1){_=Rb()|0;Aa=Q;Ba=_;vva(M);Qb(Ba|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[M>>2]=27488;B=0;va(448,Y|0);_=B;B=0;do if(_&1){b=Rb()|0;Ca=Q;Da=b}else{k[Y>>2]=27560;b=s+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Y|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;i=Q;Yua(d);Yua(b);Ava(Y);Ca=i;Da=U;break}Yua(d);B=0;U=Ia(40,s|0,135593,28)|0;i=B;B=0;c:do if(!(i&1)?(B=0,Xa(239,U|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,u|0,127077,81);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,v|0,128432,28);l=B;B=0;if(l&1){l=Rb()|0;J=Q;Yua(u);Ea=l;Fa=J;break}B=0;wa(510,w|0,Y|0);J=B;B=0;if(J&1){J=Rb()|0;Ga=1;Ha=J;Ja=Q}else{B=0;ua(163,j|0,u|0,v|0,7075,w|0);J=B;B=0;if(J&1)Ka=1;else{B=0;eb(503,j|0,1240,229);B=0;Ka=0}J=Rb()|0;l=Q;Yua(w);Ga=Ka;Ha=J;Ja=l}Yua(v);Yua(u);if(Ga){Ea=Ha;Fa=Ja}else{La=Ha;Ma=Ja;break c}}else{l=Rb()|0;Ea=l;Fa=Q}while(0);zb(j|0);La=Ea;Ma=Fa}else ea=77;while(0);if((ea|0)==77){U=Rb()|0;La=U;Ma=Q}k[s>>2]=27468;k[M>>2]=27488;k[Y>>2]=27560;Yua(b);Ava(Y);vva(M);fa=La;ga=Ma;Qb(fa|0)}while(0);Aa=Ca;Ba=Da;vva(M);Qb(Ba|0)}else if((ea|0)==86){Y=x+56|0;_=x+4|0;k[x>>2]=27524;k[Y>>2]=27544;B=0;wa(508,x+56|0,_|0);G=B;B=0;if(G&1){G=Rb()|0;Na=Q;Oa=G;vva(Y);Qb(Oa|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Y>>2]=27488;B=0;va(448,_|0);G=B;B=0;do if(G&1){U=Rb()|0;Pa=Q;Qa=U}else{k[_>>2]=27560;U=x+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,_|0,d|0);i=B;B=0;if(i&1){i=Rb()|0;H=Q;Yua(d);Yua(U);Ava(_);Pa=H;Qa=i;break}Yua(d);B=0;i=Ia(40,x|0,135564,28)|0;H=B;B=0;d:do if(!(H&1)?(B=0,Xa(239,i|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,y|0,127077,81);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,z|0,128432,28);l=B;B=0;if(l&1){l=Rb()|0;J=Q;Yua(y);Ra=l;Sa=J;break}B=0;wa(510,A|0,_|0);J=B;B=0;if(J&1){J=Rb()|0;Ta=1;Ua=J;Va=Q}else{B=0;ua(163,ba|0,y|0,z|0,7076,A|0);J=B;B=0;if(J&1)Wa=1;else{B=0;eb(503,ba|0,1240,229);B=0;Wa=0}J=Rb()|0;l=Q;Yua(A);Ta=Wa;Ua=J;Va=l}Yua(z);Yua(y);if(Ta){Ra=Ua;Sa=Va}else{Ya=Ua;Za=Va;break d}}else{l=Rb()|0;Ra=l;Sa=Q}while(0);zb(ba|0);Ya=Ra;Za=Sa}else ea=101;while(0);if((ea|0)==101){i=Rb()|0;Ya=i;Za=Q}k[x>>2]=27468;k[Y>>2]=27488;k[_>>2]=27560;Yua(U);Ava(_);vva(Y);fa=Ya;ga=Za;Qb(fa|0)}while(0);Na=Pa;Oa=Qa;vva(Y);Qb(Oa|0)}else if((ea|0)==110){_=C+56|0;G=C+4|0;k[C>>2]=27524;k[_>>2]=27544;B=0;wa(508,C+56|0,G|0);M=B;B=0;if(M&1){M=Rb()|0;_a=Q;$a=M;vva(_);Qb($a|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[_>>2]=27488;B=0;va(448,G|0);M=B;B=0;do if(M&1){i=Rb()|0;ab=Q;bb=i}else{k[G>>2]=27560;i=C+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[C+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,G|0,d|0);H=B;B=0;if(H&1){H=Rb()|0;b=Q;Yua(d);Yua(i);Ava(G);ab=b;bb=H;break}Yua(d);B=0;H=Ia(40,C|0,135593,28)|0;b=B;B=0;e:do if(!(b&1)?(B=0,Xa(239,H|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,D|0,127077,81);j=B;B=0;do if(!(j&1)){B=0;eb(502,E|0,128432,28);l=B;B=0;if(l&1){l=Rb()|0;J=Q;Yua(D);cb=l;db=J;break}B=0;wa(510,F|0,G|0);J=B;B=0;if(J&1){J=Rb()|0;fb=1;gb=J;hb=Q}else{B=0;ua(163,Z|0,D|0,E|0,7077,F|0);J=B;B=0;if(J&1)ib=1;else{B=0;eb(503,Z|0,1240,229);B=0;ib=0}J=Rb()|0;l=Q;Yua(F);fb=ib;gb=J;hb=l}Yua(E);Yua(D);if(fb){cb=gb;db=hb}else{jb=gb;kb=hb;break e}}else{l=Rb()|0;cb=l;db=Q}while(0);zb(Z|0);jb=cb;kb=db}else ea=125;while(0);if((ea|0)==125){H=Rb()|0;jb=H;kb=Q}k[C>>2]=27468;k[_>>2]=27488;k[G>>2]=27560;Yua(i);Ava(G);vva(_);fa=jb;ga=kb;Qb(fa|0)}while(0);_a=ab;$a=bb;vva(_);Qb($a|0)}else if((ea|0)==133){up(c,I,679,0.0);if(O)lb=0;else break;do{ja=+p[da+(lb<<3)>>3];ia=+p[ca+(lb<<3)>>3];ha=+p[I+(lb<<3)>>3];mb=+aa(+(ja*ja+ia*ia+ha*ha));p[h+(lb<<3)>>3]=mb;lb=lb+1|0}while((lb|0)!=(L|0))}}else up(c,I,679,0.0);while(0);mb=+Dp(c,265);ha=+Dp(c,65);Uo(c,g);vp(c,W,339);if(O){ia=mb*ha;O=k[g>>2]|0;lb=0;do{p[X+(lb<<3)>>3]=ia*(+p[W+(lb<<3)>>3]-+p[O+((lb*3|0)+2<<3)>>3]);lb=lb+1|0}while((lb|0)!=(L|0))}Pp(c,674,675);Pp(c,677,678);Pp(c,653,654);rd[k[(k[c>>2]|0)+48>>2]&511](c,674,da,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,677,ca,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,671,h,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,653,X,738);Tqa(W);Tqa(X);Tqa(h);Tqa(I);Tqa(ca);Tqa(da);da=k[g>>2]|0;if(da)Tqa(da);k[g>>2]=0;Tqa(K);Tqa(N);N=k[e>>2]|0;if(N)Tqa(N);k[e>>2]=0;e=k[f>>2]|0;if(!e){r=a;return}Tqa(e);r=a;return}function E9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0;a=r;r=r+1616|0;d=a+1596|0;e=a;f=a+1544|0;g=a+1540|0;h=a+1512|0;i=a+1376|0;j=a+1584|0;l=a+1572|0;m=a+1560|0;n=a+1224|0;o=a+1548|0;q=a+1528|0;s=a+1516|0;u=a+1072|0;v=a+1360|0;w=a+1208|0;x=a+1056|0;y=a+920|0;z=a+768|0;A=a+616|0;C=a+464|0;D=a+784|0;E=a+176|0;F=a+164|0;G=a+152|0;H=a+632|0;I=a+140|0;J=a+128|0;K=a+116|0;L=a+480|0;M=a+104|0;N=a+92|0;O=a+80|0;P=a+328|0;R=a+68|0;S=a+56|0;T=a+44|0;U=a+192|0;V=a+32|0;W=a+20|0;X=a+8|0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;if((Hc[k[(k[c>>2]|0)+20>>2]&511](c)|0)!=625){Y=i+56|0;Z=i+4|0;k[i>>2]=27524;k[Y>>2]=27544;B=0;wa(508,i+56|0,Z|0);_=B;B=0;if(_&1){_=Rb()|0;ba=Q;ca=_;vva(Y);Qb(ca|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[Y>>2]=27488;B=0;va(448,Z|0);_=B;B=0;do if(_&1){da=Rb()|0;ea=Q;fa=da}else{k[Z>>2]=27560;da=i+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Z|0,d|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(d);Yua(da);Ava(Z);ea=ha;fa=ga;break}Yua(d);B=0;ga=Ia(40,i|0,128404,27)|0;ha=B;B=0;a:do if((((!(ha&1)?(B=0,ia=ya(k[(k[c>>2]|0)+20>>2]|0,c|0)|0,ja=B,B=0,!(ja&1)):0)?(B=0,ja=ya(427,ia|0)|0,ia=B,B=0,!(ia&1)):0)?(ia=Lta(ja)|0,B=0,ka=Ia(40,ga|0,ja|0,ia|0)|0,ia=B,B=0,!(ia&1)):0)?(B=0,Xa(239,ka|0,0)|0,ka=B,B=0,!(ka&1)):0){ka=Ab(20)|0;B=0;eb(502,j|0,127077,81);ia=B;B=0;do if(!(ia&1)){B=0;eb(502,l|0,128461,27);ja=B;B=0;if(ja&1){ja=Rb()|0;la=Q;Yua(j);ma=ja;na=la;break}B=0;wa(510,m|0,Z|0);la=B;B=0;if(la&1){la=Rb()|0;oa=la;pa=Q;qa=1}else{B=0;ua(163,ka|0,j|0,l|0,6820,m|0);la=B;B=0;if(la&1)ra=1;else{B=0;eb(503,ka|0,1240,229);B=0;ra=0}la=Rb()|0;ja=Q;Yua(m);oa=la;pa=ja;qa=ra}Yua(l);Yua(j);if(qa){ma=oa;na=pa}else{sa=oa;ta=pa;break a}}else{ja=Rb()|0;ma=ja;na=Q}while(0);zb(ka|0);sa=ma;ta=na}else xa=20;while(0);if((xa|0)==20){ga=Rb()|0;sa=ga;ta=Q}k[i>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(da);Ava(Z);vva(Y);za=sa;Aa=ta;Qb(za|0)}while(0);ba=ea;ca=fa;vva(Y);Qb(ca|0)}rp(c,g,543,943);rp(c,f,540,943);sp(c,h,943);ca=Rqa(96)|0;Y=Rqa(192)|0;fa=Rqa(48)|0;ea=Rqa(48)|0;ba=Rqa(48)|0;ta=Rqa(48)|0;sa=Rqa(48)|0;Z=Rqa(48)|0;i=Rqa(48)|0;na=Rqa(48)|0;k[na>>2]=972;k[na+4>>2]=972;k[na+8>>2]=972;k[na+12>>2]=972;k[na+16>>2]=972;k[na+20>>2]=972;k[na+24>>2]=653;k[na+28>>2]=653;k[na+32>>2]=653;k[na+36>>2]=653;k[na+40>>2]=653;k[na+44>>2]=653;pp(c,e,85);ma=k[f>>2]|0;p[ca>>3]=+p[b+(k[ma>>2]<<3)>>3];p[ca+8>>3]=+p[b+(k[ma+4>>2]<<3)>>3];p[ca+16>>3]=+p[b+(k[ma+8>>2]<<3)>>3];p[ca+24>>3]=+p[b+(k[ma+12>>2]<<3)>>3];p[ca+32>>3]=+p[b+(k[ma+16>>2]<<3)>>3];p[ca+40>>3]=+p[b+(k[ma+20>>2]<<3)>>3];p[ca+48>>3]=+p[b+(k[ma+24>>2]<<3)>>3];p[ca+56>>3]=+p[b+(k[ma+28>>2]<<3)>>3];p[ca+64>>3]=+p[b+(k[ma+32>>2]<<3)>>3];p[ca+72>>3]=+p[b+(k[ma+36>>2]<<3)>>3];p[ca+80>>3]=+p[b+(k[ma+40>>2]<<3)>>3];p[ca+88>>3]=+p[b+(k[ma+44>>2]<<3)>>3];ma=k[g>>2]|0;p[Y>>3]=+p[b+(k[ma>>2]<<3)>>3];p[Y+8>>3]=+p[b+(k[ma+4>>2]<<3)>>3];p[Y+16>>3]=+p[b+(k[ma+8>>2]<<3)>>3];p[Y+24>>3]=+p[b+(k[ma+12>>2]<<3)>>3];p[Y+32>>3]=+p[b+(k[ma+16>>2]<<3)>>3];p[Y+40>>3]=+p[b+(k[ma+20>>2]<<3)>>3];p[Y+48>>3]=+p[b+(k[ma+24>>2]<<3)>>3];p[Y+56>>3]=+p[b+(k[ma+28>>2]<<3)>>3];p[Y+64>>3]=+p[b+(k[ma+32>>2]<<3)>>3];p[Y+72>>3]=+p[b+(k[ma+36>>2]<<3)>>3];p[Y+80>>3]=+p[b+(k[ma+40>>2]<<3)>>3];p[Y+88>>3]=+p[b+(k[ma+44>>2]<<3)>>3];p[Y+96>>3]=+p[b+(k[ma+48>>2]<<3)>>3];p[Y+104>>3]=+p[b+(k[ma+52>>2]<<3)>>3];p[Y+112>>3]=+p[b+(k[ma+56>>2]<<3)>>3];p[Y+120>>3]=+p[b+(k[ma+60>>2]<<3)>>3];p[Y+128>>3]=+p[b+(k[ma+64>>2]<<3)>>3];p[Y+136>>3]=+p[b+(k[ma+68>>2]<<3)>>3];ma=k[h>>2]|0;p[Y+144>>3]=+p[b+(k[ma>>2]<<3)>>3];p[Y+152>>3]=+p[b+(k[ma+4>>2]<<3)>>3];p[Y+160>>3]=+p[b+(k[ma+8>>2]<<3)>>3];p[Y+168>>3]=+p[b+(k[ma+12>>2]<<3)>>3];p[Y+176>>3]=+p[b+(k[ma+16>>2]<<3)>>3];p[Y+184>>3]=+p[b+(k[ma+20>>2]<<3)>>3];Eq(c,Y,12,na);Dq(c,ca,6,971);Ba=+p[e>>3];e=0;while(1){ma=e*3|0;b=e<<1;Ca=+p[Y+(ma<<3)>>3]+ +p[ca+(b<<3)>>3];p[fa+(e<<3)>>3]=Ca;Da=+p[Y+(ma+1<<3)>>3]+ +p[ca+((b|1)<<3)>>3];p[ea+(e<<3)>>3]=Da;Ea=+p[Y+(ma+2<<3)>>3];p[sa+(e<<3)>>3]=Ea;Fa=+p[Y+(e+18<<3)>>3]*Ba;p[i+(e<<3)>>3]=Fa;Ga=+$(+Ca);p[t>>3]=Ga;ma=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&ma>>>0>0){xa=31;break}if((ma|0)==0&(b|0)==2146435072){xa=55;break}Ga=+$(+Da);p[t>>3]=Ga;b=k[t>>2]|0;ma=k[t+4>>2]|0;if(ma>>>0>2146435072|(ma|0)==2146435072&b>>>0>0){xa=79;break}if((b|0)==0&(ma|0)==2146435072){xa=103;break}Ga=+$(+Ea);p[t>>3]=Ga;ma=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&ma>>>0>0){xa=127;break}if((ma|0)==0&(b|0)==2146435072){xa=151;break}Ga=+$(+Fa);p[t>>3]=Ga;b=k[t>>2]|0;ma=k[t+4>>2]|0;if(ma>>>0>2146435072|(ma|0)==2146435072&b>>>0>0){xa=175;break}e=e+1|0;if((b|0)==0&(ma|0)==2146435072){xa=199;break}if((e|0)>=6){xa=222;break}}if((xa|0)==31){e=n+56|0;ma=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,ma|0);b=B;B=0;if(b&1){b=Rb()|0;Ha=Q;Ja=b;vva(e);Qb(Ja|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,ma|0);b=B;B=0;do if(b&1){pa=Rb()|0;Ka=Q;La=pa}else{k[ma>>2]=27560;pa=n+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ma|0,d|0);oa=B;B=0;if(oa&1){oa=Rb()|0;qa=Q;Yua(d);Yua(pa);Ava(ma);Ka=qa;La=oa;break}Yua(d);B=0;oa=Ia(40,n|0,135564,28)|0;qa=B;B=0;b:do if(!(qa&1)?(B=0,Xa(239,oa|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,o|0,127077,81);l=B;B=0;do if(!(l&1)){B=0;eb(502,q|0,128461,27);ra=B;B=0;if(ra&1){ra=Rb()|0;m=Q;Yua(o);Ma=ra;Na=m;break}B=0;wa(510,s|0,ma|0);m=B;B=0;if(m&1){m=Rb()|0;Oa=1;Pa=m;Qa=Q}else{B=0;ua(163,j|0,o|0,q|0,6865,s|0);m=B;B=0;if(m&1)Ra=1;else{B=0;eb(503,j|0,1240,229);B=0;Ra=0}m=Rb()|0;ra=Q;Yua(s);Oa=Ra;Pa=m;Qa=ra}Yua(q);Yua(o);if(Oa){Ma=Pa;Na=Qa}else{Sa=Pa;Ta=Qa;break b}}else{ra=Rb()|0;Ma=ra;Na=Q}while(0);zb(j|0);Sa=Ma;Ta=Na}else xa=46;while(0);if((xa|0)==46){oa=Rb()|0;Sa=oa;Ta=Q}k[n>>2]=27468;k[e>>2]=27488;k[ma>>2]=27560;Yua(pa);Ava(ma);vva(e);za=Sa;Aa=Ta;Qb(za|0)}while(0);Ha=Ka;Ja=La;vva(e);Qb(Ja|0)}else if((xa|0)==55){Ja=u+56|0;e=u+4|0;k[u>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,u+56|0,e|0);La=B;B=0;if(La&1){La=Rb()|0;Ua=Q;Va=La;vva(Ja);Qb(Va|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Ja>>2]=27488;B=0;va(448,e|0);La=B;B=0;do if(La&1){Ka=Rb()|0;Wa=Q;Ya=Ka}else{k[e>>2]=27560;Ka=u+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ta=Q;Yua(d);Yua(Ka);Ava(e);Wa=Ta;Ya=Ha;break}Yua(d);B=0;Ha=Ia(40,u|0,135593,28)|0;Ta=B;B=0;c:do if(!(Ta&1)?(B=0,Xa(239,Ha|0,0)|0,Sa=B,B=0,!(Sa&1)):0){Sa=Ab(20)|0;B=0;eb(502,v|0,127077,81);ma=B;B=0;do if(!(ma&1)){B=0;eb(502,w|0,128461,27);n=B;B=0;if(n&1){n=Rb()|0;Na=Q;Yua(v);Za=n;_a=Na;break}B=0;wa(510,x|0,e|0);Na=B;B=0;if(Na&1){Na=Rb()|0;$a=1;ab=Na;bb=Q}else{B=0;ua(163,Sa|0,v|0,w|0,6866,x|0);Na=B;B=0;if(Na&1)cb=1;else{B=0;eb(503,Sa|0,1240,229);B=0;cb=0}Na=Rb()|0;n=Q;Yua(x);$a=cb;ab=Na;bb=n}Yua(w);Yua(v);if($a){Za=ab;_a=bb}else{db=ab;fb=bb;break c}}else{n=Rb()|0;Za=n;_a=Q}while(0);zb(Sa|0);db=Za;fb=_a}else xa=70;while(0);if((xa|0)==70){Ha=Rb()|0;db=Ha;fb=Q}k[u>>2]=27468;k[Ja>>2]=27488;k[e>>2]=27560;Yua(Ka);Ava(e);vva(Ja);za=db;Aa=fb;Qb(za|0)}while(0);Ua=Wa;Va=Ya;vva(Ja);Qb(Va|0)}else if((xa|0)==79){Va=y+56|0;Ja=y+4|0;k[y>>2]=27524;k[Va>>2]=27544;B=0;wa(508,y+56|0,Ja|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;gb=Q;hb=Ya;vva(Va);Qb(hb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Va>>2]=27488;B=0;va(448,Ja|0);Ya=B;B=0;do if(Ya&1){Wa=Rb()|0;ib=Q;jb=Wa}else{k[Ja>>2]=27560;Wa=y+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ja|0,d|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;fb=Q;Yua(d);Yua(Wa);Ava(Ja);ib=fb;jb=Ua;break}Yua(d);B=0;Ua=Ia(40,y|0,135564,28)|0;fb=B;B=0;d:do if(!(fb&1)?(B=0,Xa(239,Ua|0,0)|0,db=B,B=0,!(db&1)):0){db=Ab(20)|0;B=0;eb(502,z|0,127077,81);e=B;B=0;do if(!(e&1)){B=0;eb(502,A|0,128461,27);u=B;B=0;if(u&1){u=Rb()|0;_a=Q;Yua(z);kb=u;lb=_a;break}B=0;wa(510,C|0,Ja|0);_a=B;B=0;if(_a&1){_a=Rb()|0;mb=1;nb=_a;ob=Q}else{B=0;ua(163,db|0,z|0,A|0,6867,C|0);_a=B;B=0;if(_a&1)pb=1;else{B=0;eb(503,db|0,1240,229);B=0;pb=0}_a=Rb()|0;u=Q;Yua(C);mb=pb;nb=_a;ob=u}Yua(A);Yua(z);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break d}}else{u=Rb()|0;kb=u;lb=Q}while(0);zb(db|0);qb=kb;rb=lb}else xa=94;while(0);if((xa|0)==94){Ua=Rb()|0;qb=Ua;rb=Q}k[y>>2]=27468;k[Va>>2]=27488;k[Ja>>2]=27560;Yua(Wa);Ava(Ja);vva(Va);za=qb;Aa=rb;Qb(za|0)}while(0);gb=ib;hb=jb;vva(Va);Qb(hb|0)}else if((xa|0)==103){hb=D+56|0;Va=D+4|0;k[D>>2]=27524;k[hb>>2]=27544;B=0;wa(508,D+56|0,Va|0);jb=B;B=0;if(jb&1){jb=Rb()|0;sb=Q;tb=jb;vva(hb);Qb(tb|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[hb>>2]=27488;B=0;va(448,Va|0);jb=B;B=0;do if(jb&1){ib=Rb()|0;ub=Q;vb=ib}else{k[Va>>2]=27560;ib=D+36|0;k[ib>>2]=0;k[ib+4>>2]=0;k[ib+8>>2]=0;k[ib+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Va|0,d|0);gb=B;B=0;if(gb&1){gb=Rb()|0;rb=Q;Yua(d);Yua(ib);Ava(Va);ub=rb;vb=gb;break}Yua(d);B=0;gb=Ia(40,D|0,135593,28)|0;rb=B;B=0;e:do if(!(rb&1)?(B=0,Xa(239,gb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,E|0,127077,81);Ja=B;B=0;do if(!(Ja&1)){B=0;eb(502,F|0,128461,27);y=B;B=0;if(y&1){y=Rb()|0;lb=Q;Yua(E);wb=y;xb=lb;break}B=0;wa(510,G|0,Va|0);lb=B;B=0;if(lb&1){lb=Rb()|0;yb=1;Bb=lb;Cb=Q}else{B=0;ua(163,qb|0,E|0,F|0,6868,G|0);lb=B;B=0;if(lb&1)Db=1;else{B=0;eb(503,qb|0,1240,229);B=0;Db=0}lb=Rb()|0;y=Q;Yua(G);yb=Db;Bb=lb;Cb=y}Yua(F);Yua(E);if(yb){wb=Bb;xb=Cb}else{Eb=Bb;Fb=Cb;break e}}else{y=Rb()|0;wb=y;xb=Q}while(0);zb(qb|0);Eb=wb;Fb=xb}else xa=118;while(0);if((xa|0)==118){gb=Rb()|0;Eb=gb;Fb=Q}k[D>>2]=27468;k[hb>>2]=27488;k[Va>>2]=27560;Yua(ib);Ava(Va);vva(hb);za=Eb;Aa=Fb;Qb(za|0)}while(0);sb=ub;tb=vb;vva(hb);Qb(tb|0)}else if((xa|0)==127){tb=H+56|0;hb=H+4|0;k[H>>2]=27524;k[tb>>2]=27544;B=0;wa(508,H+56|0,hb|0);vb=B;B=0;if(vb&1){vb=Rb()|0;Gb=Q;Hb=vb;vva(tb);Qb(Hb|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[tb>>2]=27488;B=0;va(448,hb|0);vb=B;B=0;do if(vb&1){ub=Rb()|0;Ib=Q;Jb=ub}else{k[hb>>2]=27560;ub=H+36|0;k[ub>>2]=0;k[ub+4>>2]=0;k[ub+8>>2]=0;k[ub+12>>2]=0;k[H+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,hb|0,d|0);sb=B;B=0;if(sb&1){sb=Rb()|0;Fb=Q;Yua(d);Yua(ub);Ava(hb);Ib=Fb;Jb=sb;break}Yua(d);B=0;sb=Ia(40,H|0,135564,28)|0;Fb=B;B=0;f:do if(!(Fb&1)?(B=0,Xa(239,sb|0,0)|0,Eb=B,B=0,!(Eb&1)):0){Eb=Ab(20)|0;B=0;eb(502,I|0,127077,81);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,J|0,128461,27);D=B;B=0;if(D&1){D=Rb()|0;xb=Q;Yua(I);Kb=D;Lb=xb;break}B=0;wa(510,K|0,hb|0);xb=B;B=0;if(xb&1){xb=Rb()|0;Mb=1;Nb=xb;Ob=Q}else{B=0;ua(163,Eb|0,I|0,J|0,6869,K|0);xb=B;B=0;if(xb&1)Pb=1;else{B=0;eb(503,Eb|0,1240,229);B=0;Pb=0}xb=Rb()|0;D=Q;Yua(K);Mb=Pb;Nb=xb;Ob=D}Yua(J);Yua(I);if(Mb){Kb=Nb;Lb=Ob}else{Sb=Nb;Tb=Ob;break f}}else{D=Rb()|0;Kb=D;Lb=Q}while(0);zb(Eb|0);Sb=Kb;Tb=Lb}else xa=142;while(0);if((xa|0)==142){sb=Rb()|0;Sb=sb;Tb=Q}k[H>>2]=27468;k[tb>>2]=27488;k[hb>>2]=27560;Yua(ub);Ava(hb);vva(tb);za=Sb;Aa=Tb;Qb(za|0)}while(0);Gb=Ib;Hb=Jb;vva(tb);Qb(Hb|0)}else if((xa|0)==151){Hb=L+56|0;tb=L+4|0;k[L>>2]=27524;k[Hb>>2]=27544;B=0;wa(508,L+56|0,tb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Ub=Q;Vb=Jb;vva(Hb);Qb(Vb|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[Hb>>2]=27488;B=0;va(448,tb|0);Jb=B;B=0;do if(Jb&1){Ib=Rb()|0;Wb=Q;Xb=Ib}else{k[tb>>2]=27560;Ib=L+36|0;k[Ib>>2]=0;k[Ib+4>>2]=0;k[Ib+8>>2]=0;k[Ib+12>>2]=0;k[L+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,tb|0,d|0);Gb=B;B=0;if(Gb&1){Gb=Rb()|0;Tb=Q;Yua(d);Yua(Ib);Ava(tb);Wb=Tb;Xb=Gb;break}Yua(d);B=0;Gb=Ia(40,L|0,135593,28)|0;Tb=B;B=0;g:do if(!(Tb&1)?(B=0,Xa(239,Gb|0,0)|0,Sb=B,B=0,!(Sb&1)):0){Sb=Ab(20)|0;B=0;eb(502,M|0,127077,81);hb=B;B=0;do if(!(hb&1)){B=0;eb(502,N|0,128461,27);H=B;B=0;if(H&1){H=Rb()|0;Lb=Q;Yua(M);Yb=H;Zb=Lb;break}B=0;wa(510,O|0,tb|0);Lb=B;B=0;if(Lb&1){Lb=Rb()|0;_b=1;$b=Lb;ac=Q}else{B=0;ua(163,Sb|0,M|0,N|0,6870,O|0);Lb=B;B=0;if(Lb&1)bc=1;else{B=0;eb(503,Sb|0,1240,229);B=0;bc=0}Lb=Rb()|0;H=Q;Yua(O);_b=bc;$b=Lb;ac=H}Yua(N);Yua(M);if(_b){Yb=$b;Zb=ac}else{cc=$b;dc=ac;break g}}else{H=Rb()|0;Yb=H;Zb=Q}while(0);zb(Sb|0);cc=Yb;dc=Zb}else xa=166;while(0);if((xa|0)==166){Gb=Rb()|0;cc=Gb;dc=Q}k[L>>2]=27468;k[Hb>>2]=27488;k[tb>>2]=27560;Yua(Ib);Ava(tb);vva(Hb);za=cc;Aa=dc;Qb(za|0)}while(0);Ub=Wb;Vb=Xb;vva(Hb);Qb(Vb|0)}else if((xa|0)==175){Vb=P+56|0;Hb=P+4|0;k[P>>2]=27524;k[Vb>>2]=27544;B=0;wa(508,P+56|0,Hb|0);Xb=B;B=0;if(Xb&1){Xb=Rb()|0;ec=Q;fc=Xb;vva(Vb);Qb(fc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Vb>>2]=27488;B=0;va(448,Hb|0);Xb=B;B=0;do if(Xb&1){Wb=Rb()|0;gc=Q;hc=Wb}else{k[Hb>>2]=27560;Wb=P+36|0;k[Wb>>2]=0;k[Wb+4>>2]=0;k[Wb+8>>2]=0;k[Wb+12>>2]=0;k[P+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Hb|0,d|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;dc=Q;Yua(d);Yua(Wb);Ava(Hb);gc=dc;hc=Ub;break}Yua(d);B=0;Ub=Ia(40,P|0,135564,28)|0;dc=B;B=0;h:do if(!(dc&1)?(B=0,Xa(239,Ub|0,0)|0,cc=B,B=0,!(cc&1)):0){cc=Ab(20)|0;B=0;eb(502,R|0,127077,81);tb=B;B=0;do if(!(tb&1)){B=0;eb(502,S|0,128461,27);L=B;B=0;if(L&1){L=Rb()|0;Zb=Q;Yua(R);ic=L;jc=Zb;break}B=0;wa(510,T|0,Hb|0);Zb=B;B=0;if(Zb&1){Zb=Rb()|0;kc=1;lc=Zb;mc=Q}else{B=0;ua(163,cc|0,R|0,S|0,6871,T|0);Zb=B;B=0;if(Zb&1)nc=1;else{B=0;eb(503,cc|0,1240,229);B=0;nc=0}Zb=Rb()|0;L=Q;Yua(T);kc=nc;lc=Zb;mc=L}Yua(S);Yua(R);if(kc){ic=lc;jc=mc}else{oc=lc;pc=mc;break h}}else{L=Rb()|0;ic=L;jc=Q}while(0);zb(cc|0);oc=ic;pc=jc}else xa=190;while(0);if((xa|0)==190){Ub=Rb()|0;oc=Ub;pc=Q}k[P>>2]=27468;k[Vb>>2]=27488;k[Hb>>2]=27560;Yua(Wb);Ava(Hb);vva(Vb);za=oc;Aa=pc;Qb(za|0)}while(0);ec=gc;fc=hc;vva(Vb);Qb(fc|0)}else if((xa|0)==199){fc=U+56|0;Vb=U+4|0;k[U>>2]=27524;k[fc>>2]=27544;B=0;wa(508,U+56|0,Vb|0);hc=B;B=0;if(hc&1){hc=Rb()|0;qc=Q;rc=hc;vva(fc);Qb(rc|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[fc>>2]=27488;B=0;va(448,Vb|0);hc=B;B=0;do if(hc&1){gc=Rb()|0;sc=Q;tc=gc}else{k[Vb>>2]=27560;gc=U+36|0;k[gc>>2]=0;k[gc+4>>2]=0;k[gc+8>>2]=0;k[gc+12>>2]=0;k[U+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Vb|0,d|0);ec=B;B=0;if(ec&1){ec=Rb()|0;pc=Q;Yua(d);Yua(gc);Ava(Vb);sc=pc;tc=ec;break}Yua(d);B=0;ec=Ia(40,U|0,135593,28)|0;pc=B;B=0;i:do if(!(pc&1)?(B=0,Xa(239,ec|0,0)|0,oc=B,B=0,!(oc&1)):0){oc=Ab(20)|0;B=0;eb(502,V|0,127077,81);Hb=B;B=0;do if(!(Hb&1)){B=0;eb(502,W|0,128461,27);P=B;B=0;if(P&1){P=Rb()|0;jc=Q;Yua(V);uc=P;vc=jc;break}B=0;wa(510,X|0,Vb|0);jc=B;B=0;if(jc&1){jc=Rb()|0;wc=1;xc=jc;yc=Q}else{B=0;ua(163,oc|0,V|0,W|0,6872,X|0);jc=B;B=0;if(jc&1)zc=1;else{B=0;eb(503,oc|0,1240,229);B=0;zc=0}jc=Rb()|0;P=Q;Yua(X);wc=zc;xc=jc;yc=P}Yua(W);Yua(V);if(wc){uc=xc;vc=yc}else{Ac=xc;Bc=yc;break i}}else{P=Rb()|0;uc=P;vc=Q}while(0);zb(oc|0);Ac=uc;Bc=vc}else xa=214;while(0);if((xa|0)==214){ec=Rb()|0;Ac=ec;Bc=Q}k[U>>2]=27468;k[fc>>2]=27488;k[Vb>>2]=27560;Yua(gc);Ava(Vb);vva(fc);za=Ac;Aa=Bc;Qb(za|0)}while(0);qc=sc;rc=tc;vva(fc);Qb(rc|0)}else if((xa|0)==222){xp(c,ta,681);Ba=+p[ta>>3]+ +p[sa>>3];p[ba>>3]=Ba;Ga=+p[fa>>3];Fa=+p[ea>>3];Ea=+aa(+(Ba*Ba+(Ga*Ga+Fa*Fa)));p[Z>>3]=Ea;Ea=+p[ta+8>>3]+ +p[sa+8>>3];p[ba+8>>3]=Ea;Fa=+p[fa+8>>3];Ga=+p[ea+8>>3];Ba=+aa(+(Ea*Ea+(Fa*Fa+Ga*Ga)));p[Z+8>>3]=Ba;Ba=+p[ta+16>>3]+ +p[sa+16>>3];p[ba+16>>3]=Ba;Ga=+p[fa+16>>3];Fa=+p[ea+16>>3];Ea=+aa(+(Ba*Ba+(Ga*Ga+Fa*Fa)));p[Z+16>>3]=Ea;Ea=+p[ta+24>>3]+ +p[sa+24>>3];p[ba+24>>3]=Ea;Fa=+p[fa+24>>3];Ga=+p[ea+24>>3];Ba=+aa(+(Ea*Ea+(Fa*Fa+Ga*Ga)));p[Z+24>>3]=Ba;Ba=+p[ta+32>>3]+ +p[sa+32>>3];p[ba+32>>3]=Ba;Ga=+p[fa+32>>3];Fa=+p[ea+32>>3];Ea=+aa(+(Ba*Ba+(Ga*Ga+Fa*Fa)));p[Z+32>>3]=Ea;Ea=+p[ta+40>>3]+ +p[sa+40>>3];p[ba+40>>3]=Ea;Fa=+p[fa+40>>3];Ga=+p[ea+40>>3];Ba=+aa(+(Ea*Ea+(Fa*Fa+Ga*Ga)));p[Z+40>>3]=Ba;Pp(c,674,675);Pp(c,677,678);Pp(c,679,682);Pp(c,653,654);rd[k[(k[c>>2]|0)+48>>2]&511](c,674,fa,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,677,ea,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,679,ba,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,683,sa,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,671,Z,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,653,i,738);Tqa(i);Tqa(Z);Tqa(ba);Tqa(ta);Tqa(sa);Tqa(ea);Tqa(fa);Tqa(Y);Tqa(ca);ca=k[h>>2]|0;if(ca)Tqa(ca);k[h>>2]=0;h=k[g>>2]|0;if(h)Tqa(h);k[g>>2]=0;g=k[f>>2]|0;if(!g){k[f>>2]=0;Tqa(na);r=a;return}Tqa(g);k[f>>2]=0;Tqa(na);r=a;return}}function F9(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0;a=r;r=r+1616|0;d=a+1596|0;e=a;f=a+1544|0;g=a+1540|0;h=a+1512|0;i=a+1376|0;j=a+1584|0;l=a+1572|0;m=a+1560|0;n=a+1224|0;o=a+1548|0;q=a+1528|0;s=a+1516|0;u=a+1072|0;v=a+1360|0;w=a+1208|0;x=a+1056|0;y=a+920|0;z=a+768|0;A=a+616|0;C=a+464|0;D=a+784|0;E=a+176|0;F=a+164|0;G=a+152|0;H=a+632|0;I=a+140|0;J=a+128|0;K=a+116|0;L=a+480|0;M=a+104|0;N=a+92|0;O=a+80|0;P=a+328|0;R=a+68|0;S=a+56|0;T=a+44|0;U=a+192|0;V=a+32|0;W=a+20|0;X=a+8|0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;Y=Hc[k[(k[c>>2]|0)+124>>2]&511](c)|0;if((Hc[k[(k[Y>>2]|0)+20>>2]&511](Y)|0)!=625){Z=i+56|0;_=i+4|0;k[i>>2]=27524;k[Z>>2]=27544;B=0;wa(508,i+56|0,_|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(Z);Qb(da|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=i+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,_|0,d|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(d);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(d);B=0;ha=Ia(40,i|0,128404,27)|0;ia=B;B=0;a:do if((((!(ia&1)?(B=0,ja=ya(k[(k[Y>>2]|0)+20>>2]|0,Y|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,ka=ya(427,ja|0)|0,ja=B,B=0,!(ja&1)):0)?(ja=Lta(ka)|0,B=0,la=Ia(40,ha|0,ka|0,ja|0)|0,ja=B,B=0,!(ja&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,j|0,127077,81);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,l|0,128489,28);ka=B;B=0;if(ka&1){ka=Rb()|0;ma=Q;Yua(j);na=ka;oa=ma;break}B=0;wa(510,m|0,_|0);ma=B;B=0;if(ma&1){ma=Rb()|0;pa=ma;qa=Q;ra=1}else{B=0;ua(163,la|0,j|0,l|0,6924,m|0);ma=B;B=0;if(ma&1)sa=1;else{B=0;eb(503,la|0,1240,229);B=0;sa=0}ma=Rb()|0;ka=Q;Yua(m);pa=ma;qa=ka;ra=sa}Yua(l);Yua(j);if(ra){na=pa;oa=qa}else{ta=pa;xa=qa;break a}}else{ka=Rb()|0;na=ka;oa=Q}while(0);zb(la|0);ta=na;xa=oa}else za=20;while(0);if((za|0)==20){ha=Rb()|0;ta=ha;xa=Q}k[i>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);Aa=ta;Ba=xa;Qb(Aa|0)}while(0);ca=fa;da=ga;vva(Z);Qb(da|0)}rp(c,g,543,943);sp(c,h,943);rp(Y,f,536,943);Y=Rqa(96)|0;da=Rqa(192)|0;Z=Rqa(48)|0;ga=Rqa(48)|0;fa=Rqa(48)|0;ca=Rqa(48)|0;xa=Rqa(48)|0;ta=Rqa(48)|0;_=Rqa(48)|0;i=Rqa(48)|0;k[i>>2]=972;k[i+4>>2]=972;k[i+8>>2]=972;k[i+12>>2]=972;k[i+16>>2]=972;k[i+20>>2]=972;k[i+24>>2]=653;k[i+28>>2]=653;k[i+32>>2]=653;k[i+36>>2]=653;k[i+40>>2]=653;k[i+44>>2]=653;pp(c,e,85);oa=k[f>>2]|0;Ca=+p[b+(k[oa>>2]<<3)>>3];p[Y>>3]=Ca;p[Y+48>>3]=Ca;Ca=+p[b+(k[oa+4>>2]<<3)>>3];p[Y+8>>3]=Ca;p[Y+56>>3]=Ca;Ca=+p[b+(k[oa+8>>2]<<3)>>3];p[Y+16>>3]=Ca;p[Y+64>>3]=Ca;Ca=+p[b+(k[oa+12>>2]<<3)>>3];p[Y+24>>3]=Ca;p[Y+72>>3]=Ca;Ca=+p[b+(k[oa+16>>2]<<3)>>3];p[Y+32>>3]=Ca;p[Y+80>>3]=Ca;Ca=+p[b+(k[oa+20>>2]<<3)>>3];p[Y+40>>3]=Ca;p[Y+88>>3]=Ca;oa=k[g>>2]|0;p[da>>3]=+p[b+(k[oa>>2]<<3)>>3];p[da+8>>3]=+p[b+(k[oa+4>>2]<<3)>>3];p[da+16>>3]=+p[b+(k[oa+8>>2]<<3)>>3];p[da+24>>3]=+p[b+(k[oa+12>>2]<<3)>>3];p[da+32>>3]=+p[b+(k[oa+16>>2]<<3)>>3];p[da+40>>3]=+p[b+(k[oa+20>>2]<<3)>>3];p[da+48>>3]=+p[b+(k[oa+24>>2]<<3)>>3];p[da+56>>3]=+p[b+(k[oa+28>>2]<<3)>>3];p[da+64>>3]=+p[b+(k[oa+32>>2]<<3)>>3];p[da+72>>3]=+p[b+(k[oa+36>>2]<<3)>>3];p[da+80>>3]=+p[b+(k[oa+40>>2]<<3)>>3];p[da+88>>3]=+p[b+(k[oa+44>>2]<<3)>>3];p[da+96>>3]=+p[b+(k[oa+48>>2]<<3)>>3];p[da+104>>3]=+p[b+(k[oa+52>>2]<<3)>>3];p[da+112>>3]=+p[b+(k[oa+56>>2]<<3)>>3];p[da+120>>3]=+p[b+(k[oa+60>>2]<<3)>>3];p[da+128>>3]=+p[b+(k[oa+64>>2]<<3)>>3];p[da+136>>3]=+p[b+(k[oa+68>>2]<<3)>>3];oa=k[h>>2]|0;p[da+144>>3]=+p[b+(k[oa>>2]<<3)>>3];p[da+152>>3]=+p[b+(k[oa+4>>2]<<3)>>3];p[da+160>>3]=+p[b+(k[oa+8>>2]<<3)>>3];p[da+168>>3]=+p[b+(k[oa+12>>2]<<3)>>3];p[da+176>>3]=+p[b+(k[oa+16>>2]<<3)>>3];p[da+184>>3]=+p[b+(k[oa+20>>2]<<3)>>3];Eq(c,da,12,i);Dq(c,Y,6,971);Ca=+p[e>>3];e=0;while(1){oa=e*3|0;b=e<<1;Da=+p[da+(oa<<3)>>3]+ +p[Y+(b<<3)>>3];p[Z+(e<<3)>>3]=Da;Ea=+p[da+(oa+1<<3)>>3]+ +p[Y+((b|1)<<3)>>3];p[ga+(e<<3)>>3]=Ea;Fa=+p[da+(oa+2<<3)>>3];p[xa+(e<<3)>>3]=Fa;Ga=+p[da+(e+18<<3)>>3]*Ca;p[_+(e<<3)>>3]=Ga;Ha=+$(+Da);p[t>>3]=Ha;oa=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&oa>>>0>0){za=31;break}if((oa|0)==0&(b|0)==2146435072){za=55;break}Ha=+$(+Ea);p[t>>3]=Ha;b=k[t>>2]|0;oa=k[t+4>>2]|0;if(oa>>>0>2146435072|(oa|0)==2146435072&b>>>0>0){za=79;break}if((b|0)==0&(oa|0)==2146435072){za=103;break}Ha=+$(+Fa);p[t>>3]=Ha;oa=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&oa>>>0>0){za=127;break}if((oa|0)==0&(b|0)==2146435072){za=151;break}Ha=+$(+Ga);p[t>>3]=Ha;b=k[t>>2]|0;oa=k[t+4>>2]|0;if(oa>>>0>2146435072|(oa|0)==2146435072&b>>>0>0){za=175;break}e=e+1|0;if((b|0)==0&(oa|0)==2146435072){za=199;break}if((e|0)>=6){za=222;break}}if((za|0)==31){e=n+56|0;oa=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,oa|0);b=B;B=0;if(b&1){b=Rb()|0;Ja=Q;Ka=b;vva(e);Qb(Ka|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,oa|0);b=B;B=0;do if(b&1){na=Rb()|0;La=Q;Ma=na}else{k[oa>>2]=27560;na=n+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,oa|0,d|0);qa=B;B=0;if(qa&1){qa=Rb()|0;pa=Q;Yua(d);Yua(na);Ava(oa);La=pa;Ma=qa;break}Yua(d);B=0;qa=Ia(40,n|0,135564,28)|0;pa=B;B=0;b:do if(!(pa&1)?(B=0,Xa(239,qa|0,0)|0,ra=B,B=0,!(ra&1)):0){ra=Ab(20)|0;B=0;eb(502,o|0,127077,81);j=B;B=0;do if(!(j&1)){B=0;eb(502,q|0,128489,28);l=B;B=0;if(l&1){l=Rb()|0;sa=Q;Yua(o);Na=l;Oa=sa;break}B=0;wa(510,s|0,oa|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Pa=1;Qa=sa;Ra=Q}else{B=0;ua(163,ra|0,o|0,q|0,6975,s|0);sa=B;B=0;if(sa&1)Sa=1;else{B=0;eb(503,ra|0,1240,229);B=0;Sa=0}sa=Rb()|0;l=Q;Yua(s);Pa=Sa;Qa=sa;Ra=l}Yua(q);Yua(o);if(Pa){Na=Qa;Oa=Ra}else{Ta=Qa;Ua=Ra;break b}}else{l=Rb()|0;Na=l;Oa=Q}while(0);zb(ra|0);Ta=Na;Ua=Oa}else za=46;while(0);if((za|0)==46){qa=Rb()|0;Ta=qa;Ua=Q}k[n>>2]=27468;k[e>>2]=27488;k[oa>>2]=27560;Yua(na);Ava(oa);vva(e);Aa=Ta;Ba=Ua;Qb(Aa|0)}while(0);Ja=La;Ka=Ma;vva(e);Qb(Ka|0)}else if((za|0)==55){Ka=u+56|0;e=u+4|0;k[u>>2]=27524;k[Ka>>2]=27544;B=0;wa(508,u+56|0,e|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Va=Q;Wa=Ma;vva(Ka);Qb(Wa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Ka>>2]=27488;B=0;va(448,e|0);Ma=B;B=0;do if(Ma&1){La=Rb()|0;Ya=Q;Za=La}else{k[e>>2]=27560;La=u+36|0;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ua=Q;Yua(d);Yua(La);Ava(e);Ya=Ua;Za=Ja;break}Yua(d);B=0;Ja=Ia(40,u|0,135593,28)|0;Ua=B;B=0;c:do if(!(Ua&1)?(B=0,Xa(239,Ja|0,0)|0,Ta=B,B=0,!(Ta&1)):0){Ta=Ab(20)|0;B=0;eb(502,v|0,127077,81);oa=B;B=0;do if(!(oa&1)){B=0;eb(502,w|0,128489,28);n=B;B=0;if(n&1){n=Rb()|0;Oa=Q;Yua(v);_a=n;$a=Oa;break}B=0;wa(510,x|0,e|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;ab=1;bb=Oa;cb=Q}else{B=0;ua(163,Ta|0,v|0,w|0,6976,x|0);Oa=B;B=0;if(Oa&1)db=1;else{B=0;eb(503,Ta|0,1240,229);B=0;db=0}Oa=Rb()|0;n=Q;Yua(x);ab=db;bb=Oa;cb=n}Yua(w);Yua(v);if(ab){_a=bb;$a=cb}else{fb=bb;gb=cb;break c}}else{n=Rb()|0;_a=n;$a=Q}while(0);zb(Ta|0);fb=_a;gb=$a}else za=70;while(0);if((za|0)==70){Ja=Rb()|0;fb=Ja;gb=Q}k[u>>2]=27468;k[Ka>>2]=27488;k[e>>2]=27560;Yua(La);Ava(e);vva(Ka);Aa=fb;Ba=gb;Qb(Aa|0)}while(0);Va=Ya;Wa=Za;vva(Ka);Qb(Wa|0)}else if((za|0)==79){Wa=y+56|0;Ka=y+4|0;k[y>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,y+56|0,Ka|0);Za=B;B=0;if(Za&1){Za=Rb()|0;hb=Q;ib=Za;vva(Wa);Qb(ib|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Ka|0);Za=B;B=0;do if(Za&1){Ya=Rb()|0;jb=Q;kb=Ya}else{k[Ka>>2]=27560;Ya=y+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ka|0,d|0);Va=B;B=0;if(Va&1){Va=Rb()|0;gb=Q;Yua(d);Yua(Ya);Ava(Ka);jb=gb;kb=Va;break}Yua(d);B=0;Va=Ia(40,y|0,135564,28)|0;gb=B;B=0;d:do if(!(gb&1)?(B=0,Xa(239,Va|0,0)|0,fb=B,B=0,!(fb&1)):0){fb=Ab(20)|0;B=0;eb(502,z|0,127077,81);e=B;B=0;do if(!(e&1)){B=0;eb(502,A|0,128489,28);u=B;B=0;if(u&1){u=Rb()|0;$a=Q;Yua(z);lb=u;mb=$a;break}B=0;wa(510,C|0,Ka|0);$a=B;B=0;if($a&1){$a=Rb()|0;nb=1;ob=$a;pb=Q}else{B=0;ua(163,fb|0,z|0,A|0,6977,C|0);$a=B;B=0;if($a&1)qb=1;else{B=0;eb(503,fb|0,1240,229);B=0;qb=0}$a=Rb()|0;u=Q;Yua(C);nb=qb;ob=$a;pb=u}Yua(A);Yua(z);if(nb){lb=ob;mb=pb}else{rb=ob;sb=pb;break d}}else{u=Rb()|0;lb=u;mb=Q}while(0);zb(fb|0);rb=lb;sb=mb}else za=94;while(0);if((za|0)==94){Va=Rb()|0;rb=Va;sb=Q}k[y>>2]=27468;k[Wa>>2]=27488;k[Ka>>2]=27560;Yua(Ya);Ava(Ka);vva(Wa);Aa=rb;Ba=sb;Qb(Aa|0)}while(0);hb=jb;ib=kb;vva(Wa);Qb(ib|0)}else if((za|0)==103){ib=D+56|0;Wa=D+4|0;k[D>>2]=27524;k[ib>>2]=27544;B=0;wa(508,D+56|0,Wa|0);kb=B;B=0;if(kb&1){kb=Rb()|0;tb=Q;ub=kb;vva(ib);Qb(ub|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[ib>>2]=27488;B=0;va(448,Wa|0);kb=B;B=0;do if(kb&1){jb=Rb()|0;vb=Q;wb=jb}else{k[Wa>>2]=27560;jb=D+36|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Wa|0,d|0);hb=B;B=0;if(hb&1){hb=Rb()|0;sb=Q;Yua(d);Yua(jb);Ava(Wa);vb=sb;wb=hb;break}Yua(d);B=0;hb=Ia(40,D|0,135593,28)|0;sb=B;B=0;e:do if(!(sb&1)?(B=0,Xa(239,hb|0,0)|0,rb=B,B=0,!(rb&1)):0){rb=Ab(20)|0;B=0;eb(502,E|0,127077,81);Ka=B;B=0;do if(!(Ka&1)){B=0;eb(502,F|0,128489,28);y=B;B=0;if(y&1){y=Rb()|0;mb=Q;Yua(E);xb=y;yb=mb;break}B=0;wa(510,G|0,Wa|0);mb=B;B=0;if(mb&1){mb=Rb()|0;Bb=1;Cb=mb;Db=Q}else{B=0;ua(163,rb|0,E|0,F|0,6978,G|0);mb=B;B=0;if(mb&1)Eb=1;else{B=0;eb(503,rb|0,1240,229);B=0;Eb=0}mb=Rb()|0;y=Q;Yua(G);Bb=Eb;Cb=mb;Db=y}Yua(F);Yua(E);if(Bb){xb=Cb;yb=Db}else{Fb=Cb;Gb=Db;break e}}else{y=Rb()|0;xb=y;yb=Q}while(0);zb(rb|0);Fb=xb;Gb=yb}else za=118;while(0);if((za|0)==118){hb=Rb()|0;Fb=hb;Gb=Q}k[D>>2]=27468;k[ib>>2]=27488;k[Wa>>2]=27560;Yua(jb);Ava(Wa);vva(ib);Aa=Fb;Ba=Gb;Qb(Aa|0)}while(0);tb=vb;ub=wb;vva(ib);Qb(ub|0)}else if((za|0)==127){ub=H+56|0;ib=H+4|0;k[H>>2]=27524;k[ub>>2]=27544;B=0;wa(508,H+56|0,ib|0);wb=B;B=0;if(wb&1){wb=Rb()|0;Hb=Q;Ib=wb;vva(ub);Qb(Ib|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[ub>>2]=27488;B=0;va(448,ib|0);wb=B;B=0;do if(wb&1){vb=Rb()|0;Jb=Q;Kb=vb}else{k[ib>>2]=27560;vb=H+36|0;k[vb>>2]=0;k[vb+4>>2]=0;k[vb+8>>2]=0;k[vb+12>>2]=0;k[H+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ib|0,d|0);tb=B;B=0;if(tb&1){tb=Rb()|0;Gb=Q;Yua(d);Yua(vb);Ava(ib);Jb=Gb;Kb=tb;break}Yua(d);B=0;tb=Ia(40,H|0,135564,28)|0;Gb=B;B=0;f:do if(!(Gb&1)?(B=0,Xa(239,tb|0,0)|0,Fb=B,B=0,!(Fb&1)):0){Fb=Ab(20)|0;B=0;eb(502,I|0,127077,81);Wa=B;B=0;do if(!(Wa&1)){B=0;eb(502,J|0,128489,28);D=B;B=0;if(D&1){D=Rb()|0;yb=Q;Yua(I);Lb=D;Mb=yb;break}B=0;wa(510,K|0,ib|0);yb=B;B=0;if(yb&1){yb=Rb()|0;Nb=1;Ob=yb;Pb=Q}else{B=0;ua(163,Fb|0,I|0,J|0,6979,K|0);yb=B;B=0;if(yb&1)Sb=1;else{B=0;eb(503,Fb|0,1240,229);B=0;Sb=0}yb=Rb()|0;D=Q;Yua(K);Nb=Sb;Ob=yb;Pb=D}Yua(J);Yua(I);if(Nb){Lb=Ob;Mb=Pb}else{Tb=Ob;Ub=Pb;break f}}else{D=Rb()|0;Lb=D;Mb=Q}while(0);zb(Fb|0);Tb=Lb;Ub=Mb}else za=142;while(0);if((za|0)==142){tb=Rb()|0;Tb=tb;Ub=Q}k[H>>2]=27468;k[ub>>2]=27488;k[ib>>2]=27560;Yua(vb);Ava(ib);vva(ub);Aa=Tb;Ba=Ub;Qb(Aa|0)}while(0);Hb=Jb;Ib=Kb;vva(ub);Qb(Ib|0)}else if((za|0)==151){Ib=L+56|0;ub=L+4|0;k[L>>2]=27524;k[Ib>>2]=27544;B=0;wa(508,L+56|0,ub|0);Kb=B;B=0;if(Kb&1){Kb=Rb()|0;Vb=Q;Wb=Kb;vva(Ib);Qb(Wb|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[Ib>>2]=27488;B=0;va(448,ub|0);Kb=B;B=0;do if(Kb&1){Jb=Rb()|0;Xb=Q;Yb=Jb}else{k[ub>>2]=27560;Jb=L+36|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[L+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ub|0,d|0);Hb=B;B=0;if(Hb&1){Hb=Rb()|0;Ub=Q;Yua(d);Yua(Jb);Ava(ub);Xb=Ub;Yb=Hb;break}Yua(d);B=0;Hb=Ia(40,L|0,135593,28)|0;Ub=B;B=0;g:do if(!(Ub&1)?(B=0,Xa(239,Hb|0,0)|0,Tb=B,B=0,!(Tb&1)):0){Tb=Ab(20)|0;B=0;eb(502,M|0,127077,81);ib=B;B=0;do if(!(ib&1)){B=0;eb(502,N|0,128489,28);H=B;B=0;if(H&1){H=Rb()|0;Mb=Q;Yua(M);Zb=H;_b=Mb;break}B=0;wa(510,O|0,ub|0);Mb=B;B=0;if(Mb&1){Mb=Rb()|0;$b=1;ac=Mb;bc=Q}else{B=0;ua(163,Tb|0,M|0,N|0,6980,O|0);Mb=B;B=0;if(Mb&1)cc=1;else{B=0;eb(503,Tb|0,1240,229);B=0;cc=0}Mb=Rb()|0;H=Q;Yua(O);$b=cc;ac=Mb;bc=H}Yua(N);Yua(M);if($b){Zb=ac;_b=bc}else{dc=ac;ec=bc;break g}}else{H=Rb()|0;Zb=H;_b=Q}while(0);zb(Tb|0);dc=Zb;ec=_b}else za=166;while(0);if((za|0)==166){Hb=Rb()|0;dc=Hb;ec=Q}k[L>>2]=27468;k[Ib>>2]=27488;k[ub>>2]=27560;Yua(Jb);Ava(ub);vva(Ib);Aa=dc;Ba=ec;Qb(Aa|0)}while(0);Vb=Xb;Wb=Yb;vva(Ib);Qb(Wb|0)}else if((za|0)==175){Wb=P+56|0;Ib=P+4|0;k[P>>2]=27524;k[Wb>>2]=27544;B=0;wa(508,P+56|0,Ib|0);Yb=B;B=0;if(Yb&1){Yb=Rb()|0;fc=Q;gc=Yb;vva(Wb);Qb(gc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Wb>>2]=27488;B=0;va(448,Ib|0);Yb=B;B=0;do if(Yb&1){Xb=Rb()|0;hc=Q;ic=Xb}else{k[Ib>>2]=27560;Xb=P+36|0;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[P+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ib|0,d|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;ec=Q;Yua(d);Yua(Xb);Ava(Ib);hc=ec;ic=Vb;break}Yua(d);B=0;Vb=Ia(40,P|0,135564,28)|0;ec=B;B=0;h:do if(!(ec&1)?(B=0,Xa(239,Vb|0,0)|0,dc=B,B=0,!(dc&1)):0){dc=Ab(20)|0;B=0;eb(502,R|0,127077,81);ub=B;B=0;do if(!(ub&1)){B=0;eb(502,S|0,128489,28);L=B;B=0;if(L&1){L=Rb()|0;_b=Q;Yua(R);jc=L;kc=_b;break}B=0;wa(510,T|0,Ib|0);_b=B;B=0;if(_b&1){_b=Rb()|0;lc=1;mc=_b;nc=Q}else{B=0;ua(163,dc|0,R|0,S|0,6981,T|0);_b=B;B=0;if(_b&1)oc=1;else{B=0;eb(503,dc|0,1240,229);B=0;oc=0}_b=Rb()|0;L=Q;Yua(T);lc=oc;mc=_b;nc=L}Yua(S);Yua(R);if(lc){jc=mc;kc=nc}else{pc=mc;qc=nc;break h}}else{L=Rb()|0;jc=L;kc=Q}while(0);zb(dc|0);pc=jc;qc=kc}else za=190;while(0);if((za|0)==190){Vb=Rb()|0;pc=Vb;qc=Q}k[P>>2]=27468;k[Wb>>2]=27488;k[Ib>>2]=27560;Yua(Xb);Ava(Ib);vva(Wb);Aa=pc;Ba=qc;Qb(Aa|0)}while(0);fc=hc;gc=ic;vva(Wb);Qb(gc|0)}else if((za|0)==199){gc=U+56|0;Wb=U+4|0;k[U>>2]=27524;k[gc>>2]=27544;B=0;wa(508,U+56|0,Wb|0);ic=B;B=0;if(ic&1){ic=Rb()|0;rc=Q;sc=ic;vva(gc);Qb(sc|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[gc>>2]=27488;B=0;va(448,Wb|0);ic=B;B=0;do if(ic&1){hc=Rb()|0;tc=Q;uc=hc}else{k[Wb>>2]=27560;hc=U+36|0;k[hc>>2]=0;k[hc+4>>2]=0;k[hc+8>>2]=0;k[hc+12>>2]=0;k[U+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Wb|0,d|0);fc=B;B=0;if(fc&1){fc=Rb()|0;qc=Q;Yua(d);Yua(hc);Ava(Wb);tc=qc;uc=fc;break}Yua(d);B=0;fc=Ia(40,U|0,135593,28)|0;qc=B;B=0;i:do if(!(qc&1)?(B=0,Xa(239,fc|0,0)|0,pc=B,B=0,!(pc&1)):0){pc=Ab(20)|0;B=0;eb(502,V|0,127077,81);Ib=B;B=0;do if(!(Ib&1)){B=0;eb(502,W|0,128489,28);P=B;B=0;if(P&1){P=Rb()|0;kc=Q;Yua(V);vc=P;wc=kc;break}B=0;wa(510,X|0,Wb|0);kc=B;B=0;if(kc&1){kc=Rb()|0;xc=1;yc=kc;zc=Q}else{B=0;ua(163,pc|0,V|0,W|0,6982,X|0);kc=B;B=0;if(kc&1)Ac=1;else{B=0;eb(503,pc|0,1240,229);B=0;Ac=0}kc=Rb()|0;P=Q;Yua(X);xc=Ac;yc=kc;zc=P}Yua(W);Yua(V);if(xc){vc=yc;wc=zc}else{Bc=yc;Cc=zc;break i}}else{P=Rb()|0;vc=P;wc=Q}while(0);zb(pc|0);Bc=vc;Cc=wc}else za=214;while(0);if((za|0)==214){fc=Rb()|0;Bc=fc;Cc=Q}k[U>>2]=27468;k[gc>>2]=27488;k[Wb>>2]=27560;Yua(hc);Ava(Wb);vva(gc);Aa=Bc;Ba=Cc;Qb(Aa|0)}while(0);rc=tc;sc=uc;vva(gc);Qb(sc|0)}else if((za|0)==222){xp(c,ca,680);Ca=+p[ca>>3]+ +p[xa>>3];p[fa>>3]=Ca;Ha=+p[Z>>3];Ga=+p[ga>>3];Fa=+aa(+(Ca*Ca+(Ha*Ha+Ga*Ga)));p[ta>>3]=Fa;Fa=+p[ca+8>>3]+ +p[xa+8>>3];p[fa+8>>3]=Fa;Ga=+p[Z+8>>3];Ha=+p[ga+8>>3];Ca=+aa(+(Fa*Fa+(Ga*Ga+Ha*Ha)));p[ta+8>>3]=Ca;Ca=+p[ca+16>>3]+ +p[xa+16>>3];p[fa+16>>3]=Ca;Ha=+p[Z+16>>3];Ga=+p[ga+16>>3];Fa=+aa(+(Ca*Ca+(Ha*Ha+Ga*Ga)));p[ta+16>>3]=Fa;Fa=+p[ca+24>>3]+ +p[xa+24>>3];p[fa+24>>3]=Fa;Ga=+p[Z+24>>3];Ha=+p[ga+24>>3];Ca=+aa(+(Fa*Fa+(Ga*Ga+Ha*Ha)));p[ta+24>>3]=Ca;Ca=+p[ca+32>>3]+ +p[xa+32>>3];p[fa+32>>3]=Ca;Ha=+p[Z+32>>3];Ga=+p[ga+32>>3];Fa=+aa(+(Ca*Ca+(Ha*Ha+Ga*Ga)));p[ta+32>>3]=Fa;Fa=+p[ca+40>>3]+ +p[xa+40>>3];p[fa+40>>3]=Fa;Ga=+p[Z+40>>3];Ha=+p[ga+40>>3];Ca=+aa(+(Fa*Fa+(Ga*Ga+Ha*Ha)));p[ta+40>>3]=Ca;Pp(c,674,675);Pp(c,677,678);Pp(c,679,682);Pp(c,653,654);rd[k[(k[c>>2]|0)+48>>2]&511](c,674,Z,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,677,ga,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,679,fa,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,683,xa,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,671,ta,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,653,_,738);Tqa(_);Tqa(ta);Tqa(fa);Tqa(ca);Tqa(xa);Tqa(ga);Tqa(Z);Tqa(da);Tqa(Y);Y=k[h>>2]|0;if(Y)Tqa(Y);k[h>>2]=0;h=k[g>>2]|0;if(h)Tqa(h);k[g>>2]=0;g=k[f>>2]|0;if(!g){k[f>>2]=0;Tqa(i);r=a;return}Tqa(g);k[f>>2]=0;Tqa(i);r=a;return}}function G9(a,b){a=a|0;b=b|0;RZ(b);return}function H9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0.0;a=r;r=r+240|0;c=a+224|0;d=a+220|0;e=a+32|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+216|0;l=a+80|0;m=a+64|0;n=a+52|0;o=a+40|0;if(!($p(b)|0)){q=0;r=a;return q|0}k[j>>2]=0;cp(b,d,298);switch(k[d>>2]|0){case 301:{s=1;t=1;break}case 300:{s=3;t=2;break}case 302:{s=3;t=2;break}default:{u=l+56|0;v=l+4|0;k[l>>2]=27524;k[u>>2]=27544;B=0;wa(508,l+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=l+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(v);A=E;C=D;break}Yua(c);B=0;D=Ia(40,l|0,144639,5)|0;E=B;B=0;if((((!(E&1)?(B=0,E=ya(427,k[d>>2]|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,D|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,146481,18)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,m|0,127077,81);G=B;B=0;do if(!(G&1)){B=0;eb(502,n|0,128518,23);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(m);H=E;I=D;break}B=0;wa(510,o|0,v|0);D=B;B=0;if(D&1){D=Rb()|0;J=D;K=Q;L=1}else{B=0;ua(163,F|0,m|0,n|0,1432,o|0);D=B;B=0;if(D&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}D=Rb()|0;E=Q;Yua(o);J=D;K=E;L=M}Yua(n);Yua(m);if(L){H=J;I=K}else{N=J;O=K;k[l>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}}else{E=Rb()|0;H=E;I=Q}while(0);zb(F|0);N=H;O=I;k[l>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}G=Rb()|0;N=G;O=Q;k[l>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}y=ma(Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0,t)|0;u=gq(b,536)|0;C=ma(y,s)|0;A=C>>>0>536870911?-1:C<<3;C=Rqa(A)|0;x=Rqa(A)|0;A=(ma(s,s)|0)<<3;N=Rqa(A)|0;WEa(N|0,0,A|0)|0;Uo(b,j);A=Wo(b,353)|0;v=Wo(b,674)|0;l=Wo(b,675)|0;O=(t|0)==2;if(O){I=Wo(b,677)|0;P=I;R=Wo(b,678)|0}else{P=0;R=0}pp(b,g,87);I=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;H=Hc[k[(k[I>>2]|0)+8>>2]&511](I)|0;if((H|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0)){K=b+28|0;J=I+8|0;L=u+12|0;m=H;do{Fc[k[(k[I>>2]|0)+24>>2]&1023](I,m);rd[k[(k[b>>2]|0)+260>>2]&511](b,i,k[j>>2]|0,I);J9(0,C,b,t,k[j>>2]|0,I);K9(0,x,b,t,k[j>>2]|0,I);H=k[K>>2]|0;ad[k[(k[H>>2]|0)+128>>2]&63](H,e,t,k[j>>2]|0,I,v,P);H=k[K>>2]|0;ad[k[(k[H>>2]|0)+128>>2]&63](H,f,t,k[j>>2]|0,I,l,R);nd[k[(k[A>>2]|0)+48>>2]&1023](A,h,I);S=+p[e>>3];T=+p[i>>3]*(+p[J>>3]*(+p[h>>3]*((S+ +p[g>>3]*(S-+p[f>>3]))*2.0)));H=0;do{n=N+((ma(H,s)|0)+H<<3)|0;p[n>>3]=T;H=H+1|0}while((H|0)<(s|0));ZX(C,s,y,1,N,s,s,0,x,s,y,0,k[L>>2]|0,1)|0;m=m+1|0}while((m|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0))}if(O)Fq(b,u,971);Ec[k[(k[I>>2]|0)+4>>2]&1023](I);I=k[j>>2]|0;if(I)Tqa(I);k[j>>2]=0;Tqa(N);Tqa(x);Tqa(C);q=u;r=a;return q|0}function I9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ba=0.0;a=r;r=r+256|0;c=a+232|0;d=a+228|0;e=a+244|0;f=a+224|0;g=a+220|0;h=a+32|0;j=a+24|0;l=a+16|0;m=a+8|0;n=a;o=a+216|0;q=a+80|0;s=a+64|0;t=a+52|0;u=a+40|0;if(_p(b)|0){v=0;r=a;return v|0}if(!($p(b)|0)){v=0;r=a;return v|0}k[o>>2]=0;cp(b,d,298);switch(k[d>>2]|0){case 301:{w=1;break}case 300:{w=2;break}case 302:{w=2;break}default:{x=q+56|0;y=q+4|0;k[q>>2]=27524;k[x>>2]=27544;B=0;wa(508,q+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=q+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(y);E=H;F=G;break}Yua(c);B=0;G=Ia(40,q|0,144639,5)|0;H=B;B=0;a:do if((((!(H&1)?(B=0,I=ya(427,k[d>>2]|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,G|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,146481,18)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,s|0,127077,81);K=B;B=0;do if(!(K&1)){B=0;eb(502,t|0,128542,24);I=B;B=0;if(I&1){I=Rb()|0;L=Q;Yua(s);M=I;N=L;break}B=0;wa(510,u|0,y|0);L=B;B=0;if(L&1){L=Rb()|0;O=L;P=Q;R=1}else{B=0;ua(163,J|0,s|0,t|0,1284,u|0);L=B;B=0;if(L&1)S=1;else{B=0;eb(503,J|0,1240,229);B=0;S=0}L=Rb()|0;I=Q;Yua(u);O=L;P=I;R=S}Yua(t);Yua(s);if(R){M=O;N=P}else{T=O;U=P;break a}}else{I=Rb()|0;M=I;N=Q}while(0);zb(J|0);T=M;U=N}else V=24;while(0);if((V|0)==24){G=Rb()|0;T=G;U=Q}k[q>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);W=T;X=U;Qb(W|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}}C=ma(Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0,w)|0;x=gq(b,536)|0;F=ma(C,w)|0;E=Rqa(F>>>0>536870911?-1:F<<3)|0;F=ma(w,w)|0;A=F<<3;U=Rqa(A)|0;if(F)WEa(U|0,0,A|0)|0;Uo(b,o);cp(b,f,942);Wo(b,339)|0;A=Qqa(16)|0;B=0;eb(524,A|0,b|0,1);F=B;B=0;if(F&1){F=Rb()|0;T=Q;Sqa(A);W=F;X=T;Qb(W|0)}W=k[f>>2]|0;if((W|0)==924){Y=+id[k[(k[b>>2]|0)+136>>2]&63](b,k[o>>2]|0);Z=k[f>>2]|0;_=Y}else{Z=W;_=1.0}if((Z|0)==925){Z=Wo(b,928)|0;Dc[k[(k[b>>2]|0)+132>>2]&255](b,g,l,m,e);$=hd[k[(k[b>>2]|0)+320>>2]&7](b,k[g>>2]|0,+p[l>>3],+p[m>>3],(i[e>>0]|0)!=0,2)|0;aa=Z}else{$=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;aa=0}Z=Hc[k[(k[$>>2]|0)+8>>2]&511]($)|0;b:do if((Z|0)<(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0)){e=(w|0)==2;m=$+8|0;l=x+12|0;g=Z;while(1){Fc[k[(k[$>>2]|0)+24>>2]&1023]($,g);fla(A,h,$);switch(k[f>>2]|0){case 924:{p[h>>3]=_*+p[h>>3];break}case 925:{nd[k[(k[aa>>2]|0)+48>>2]&1023](aa,n,$);if(+p[n>>3]<0.0)p[h>>3]=0.0;break}default:{}}W=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;T=Rqa(W>>>0>536870911?-1:W<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,T,$);X=(W|0)>0;if(e){if(X){F=W<<1;y=0;do{Y=+p[T+(y<<3)>>3];q=y<<1;p[E+(q<<3)>>3]=Y;p[E+((q|1)<<3)>>3]=0.0;V=q+F|0;p[E+(V<<3)>>3]=0.0;p[E+((V|1)<<3)>>3]=Y;y=y+1|0}while((y|0)!=(W|0))}}else if(X)TEa(E|0,T|0,W<<3|0)|0;Tqa(T);rd[k[(k[b>>2]|0)+260>>2]&511](b,j,k[o>>2]|0,$);Y=+p[h>>3];ba=+p[j>>3];y=0;do{F=U+((ma(y,w)|0)+y<<3)|0;p[F>>3]=Y*+p[m>>3]*ba;y=y+1|0}while((y|0)<(w|0));ZX(E,w,C,1,U,w,w,0,E,w,C,0,k[l>>2]|0,1)|0;g=g+1|0;if((g|0)>=(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0))break b}}while(0);if((w|0)==2)Fq(b,x,971);Ec[k[(k[$>>2]|0)+4>>2]&1023]($);bla(A);Sqa(A);A=k[o>>2]|0;if(A)Tqa(A);k[o>>2]=0;Tqa(E);Tqa(U);v=x;r=a;return v|0}function J9(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0.0,j=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)!=2){if(!f){Tqa(h);return}TEa(b|0,h|0,a<<3|0)|0;Tqa(h);return}if(!f){Tqa(h);return}f=a<<1;d=a<<2;e=0;do{i=+p[h+(e<<3)>>3];c=e<<1;p[b+(c<<3)>>3]=i;p[b+((c|1)<<3)>>3]=0.0;g=c+f|0;p[b+(g<<3)>>3]=0.0;j=+p[h+(e+a<<3)>>3];p[b+((g|1)<<3)>>3]=j;g=c+d|0;p[b+(g<<3)>>3]=j*.5;p[b+((g|1)<<3)>>3]=i*.5;e=e+1|0}while((e|0)!=(a|0));Tqa(h);return}function K9(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,l=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)!=2){if(f)i=0;else{Tqa(h);return}do{p[b+(i<<3)>>3]=+p[h+(i<<3)>>3]*2.0;i=i+1|0}while((i|0)!=(a|0));Tqa(h);return}if(!f){Tqa(h);return}f=a<<1;i=a<<2;d=0;do{j=+p[h+(d<<3)>>3];e=d<<1;p[b+(e<<3)>>3]=j*2.0;l=+p[h+(d+a<<3)>>3];p[b+((e|1)<<3)>>3]=l;c=e+f|0;p[b+(c<<3)>>3]=j;p[b+((c|1)<<3)>>3]=l*2.0;c=e+i|0;p[b+(c<<3)>>3]=l;p[b+((c|1)<<3)>>3]=j;d=d+1|0}while((d|0)!=(a|0));Tqa(h);return}function L9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0;a=r;r=r+240|0;c=a+216|0;d=a+212|0;e=a+24|0;f=a+16|0;g=a;h=a+208|0;i=a+72|0;j=a+56|0;l=a+44|0;m=a+32|0;if(!($p(b)|0)){n=0;r=a;return n|0}k[h>>2]=0;cp(b,d,298);switch(k[d>>2]|0){case 301:{o=1;break}case 300:{o=2;break}case 302:{o=2;break}default:{q=i+56|0;s=i+4|0;k[i>>2]=27524;k[q>>2]=27544;B=0;wa(508,i+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=i+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;z=Ia(40,i|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[d>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,j|0,127077,81);D=B;B=0;do if(!(D&1)){B=0;eb(502,l|0,128567,29);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(j);E=A;F=z;break}B=0;wa(510,m|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;G=z;H=Q;I=1}else{B=0;ua(163,C|0,j|0,l|0,1541,m|0);z=B;B=0;if(z&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}z=Rb()|0;A=Q;Yua(m);G=z;H=A;I=J}Yua(l);Yua(j);if(I){E=G;F=H}else{K=G;L=H;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}}else{A=Rb()|0;E=A;F=Q}while(0);zb(C|0);K=E;L=F;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}D=Rb()|0;K=D;L=Q;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(K|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}}v=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;q=iq(b,536)|0;y=Rqa(v>>>0>536870911?-1:v<<3)|0;Uo(b,h);x=Wo(b,353)|0;u=Wo(b,339)|0;M=+Dp(b,265);N=+Dp(b,65);K=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[K>>2]|0)+8>>2]&511](K)|0;if((s|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0)){i=(v|0)>0;O=-(M*N);L=K+8|0;F=q+4|0;E=(o|0)==2;H=g+8|0;G=s;do{Fc[k[(k[K>>2]|0)+24>>2]&1023](K,G);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[h>>2]|0,K);nd[k[(k[b>>2]|0)+336>>2]&1023](b,y,K);nd[k[(k[x>>2]|0)+48>>2]&1023](x,e,K);rd[k[(k[u>>2]|0)+60>>2]&511](u,g,k[h>>2]|0,K);if(i){s=k[F>>2]|0;if(E){I=0;do{j=y+(I<<3)|0;l=I<<1;J=s+(l<<3)|0;p[J>>3]=+p[e>>3]*O*+p[g>>3]*+p[f>>3]*+p[L>>3]*+p[j>>3]+ +p[J>>3];J=s+((l|1)<<3)|0;p[J>>3]=+p[e>>3]*O*+p[H>>3]*+p[f>>3]*+p[L>>3]*+p[j>>3]+ +p[J>>3];I=I+1|0}while((I|0)!=(v|0))}else{I=0;do{w=s+((ma(I,o)|0)<<3)|0;p[w>>3]=+p[e>>3]*O*+p[g>>3]*+p[f>>3]*+p[L>>3]*+p[y+(I<<3)>>3]+ +p[w>>3];I=I+1|0}while((I|0)!=(v|0))}}G=G+1|0}while((G|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0))}if((o|0)==2)xq(b,q,971);b=k[h>>2]|0;if(b)Tqa(b);k[h>>2]=0;Tqa(y);Ec[k[(k[K>>2]|0)+4>>2]&1023](K);n=q;r=a;return n|0}function M9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0;a=r;r=r+256|0;c=a+236|0;d=a+232|0;e=a+40|0;f=a+32|0;g=a+24|0;h=a+16|0;i=a+228|0;j=a+224|0;l=a;m=a+88|0;n=a+72|0;o=a+60|0;q=a+48|0;if(!($p(b)|0)){s=0;r=a;return s|0}if(!(Hc[k[(k[b>>2]|0)+240>>2]&511](b)|0)){s=0;r=a;return s|0}k[i>>2]=0;k[j>>2]=0;cp(b,d,298);switch(k[d>>2]|0){case 301:{t=1;break}case 300:{t=2;break}case 302:{t=2;break}default:{u=m+56|0;v=m+4|0;k[m>>2]=27524;k[u>>2]=27544;B=0;wa(508,m+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=m+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(v);A=E;C=D;break}Yua(c);B=0;D=Ia(40,m|0,144639,5)|0;E=B;B=0;if((((!(E&1)?(B=0,E=ya(427,k[d>>2]|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,D|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,146481,18)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,n|0,127077,81);G=B;B=0;do if(!(G&1)){B=0;eb(502,o|0,128597,21);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(n);H=E;I=D;break}B=0;wa(510,q|0,v|0);D=B;B=0;if(D&1){D=Rb()|0;J=D;K=Q;L=1}else{B=0;ua(163,F|0,n|0,o|0,1606,q|0);D=B;B=0;if(D&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}D=Rb()|0;E=Q;Yua(q);J=D;K=E;L=M}Yua(o);Yua(n);if(L){H=J;I=K}else{N=J;O=K;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}}else{E=Rb()|0;H=E;I=Q}while(0);zb(F|0);N=H;O=I;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}G=Rb()|0;N=G;O=Q;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(N|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}y=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;u=iq(b,536)|0;C=Rqa(y>>>0>536870911?-1:y<<3)|0;A=Wo(b,353)|0;x=Wo(b,64)|0;N=Wo(b,999)|0;P=+Dp(b,266);R=+Dp(b,265);S=+Dp(b,65);Uo(b,i);rd[k[(k[b>>2]|0)+140>>2]&511](b,j,k[i>>2]|0,206);nd[k[(k[b>>2]|0)+384>>2]&1023](b,l,k[j>>2]|0);v=ld[k[(k[b>>2]|0)+312>>2]&127](b,k[i>>2]|0,k[j>>2]|0,3)|0;m=Hc[k[(k[v>>2]|0)+8>>2]&511](v)|0;if((m|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0)){T=S*.5;S=P*T;P=R*T;O=(y|0)>0;I=v+8|0;H=u+4|0;K=(t|0)==2;J=l+8|0;L=m;do{Fc[k[(k[v>>2]|0)+24>>2]&1023](v,L);nd[k[(k[A>>2]|0)+48>>2]&1023](A,f,v);nd[k[(k[N>>2]|0)+48>>2]&1023](N,h,v);nd[k[(k[x>>2]|0)+48>>2]&1023](x,g,v);rd[k[(k[b>>2]|0)+272>>2]&511](b,e,k[j>>2]|0,v);nd[k[(k[b>>2]|0)+336>>2]&1023](b,C,v);T=+KY(0.0,+p[f>>3]+ +p[g>>3]-+p[h>>3]);R=+KY(0.0,+p[g>>3]-+p[h>>3]);U=+p[f>>3];V=U*(P*U)+S*(T*T-R*R);if(O){m=k[H>>2]|0;if(K){n=0;do{o=C+(n<<3)|0;M=n<<1;q=m+(M<<3)|0;p[q>>3]=V*+p[e>>3]*+p[I>>3]*+p[l>>3]*+p[o>>3]+ +p[q>>3];q=m+((M|1)<<3)|0;p[q>>3]=V*+p[e>>3]*+p[I>>3]*+p[J>>3]*+p[o>>3]+ +p[q>>3];n=n+1|0}while((n|0)!=(y|0))}else{n=0;do{z=m+((ma(n,t)|0)<<3)|0;p[z>>3]=V*+p[e>>3]*+p[I>>3]*+p[l>>3]*+p[C+(n<<3)>>3]+ +p[z>>3];n=n+1|0}while((n|0)!=(y|0))}}L=L+1|0}while((L|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0))}if((t|0)==2)xq(b,u,971);b=k[i>>2]|0;if(b)Tqa(b);k[i>>2]=0;i=k[j>>2]|0;if(i)Tqa(i);k[j>>2]=0;Tqa(C);if(v)Ec[k[(k[v>>2]|0)+4>>2]&1023](v);s=u;r=a;return s|0}function N9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;k[e>>2]=0;f=Hc[k[(k[b>>2]|0)+124>>2]&511](b)|0;g=Hc[k[(k[f>>2]|0)+432>>2]&511](f)|0;f=Hc[k[(k[g>>2]|0)+164>>2]&511](g)|0;h=f<<1;i=gq(g,539)|0;j=f*6|0;f=j>>>0>536870911?-1:j<<3;j=Rqa(f)|0;l=Rqa(f)|0;f=Rqa(72)|0;m=f;n=m+72|0;do{k[m>>2]=0;m=m+4|0}while((m|0)<(n|0));Uo(b,e);m=Wo(b,339)|0;n=Wo(b,674)|0;o=Wo(b,677)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;s=Hc[k[(k[g>>2]|0)+304>>2]&511](g)|0;t=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((t|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){u=b+28|0;v=q+8|0;w=i+12|0;x=f+32|0;y=f+64|0;z=t;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,z);Fc[k[(k[q>>2]|0)+36>>2]&1023](q,s);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[e>>2]|0,q);J9(0,j,g,2,k[e>>2]|0,s);K9(0,l,g,2,k[e>>2]|0,s);t=k[u>>2]|0;ad[k[(k[t>>2]|0)+124>>2]&63](t,c,k[e>>2]|0,q,n,o,m);A=+p[c>>3]*2.0;B=+p[d>>3];p[f>>3]=A*+p[v>>3]*B;p[x>>3]=A*+p[v>>3]*B;p[y>>3]=A*+p[v>>3]*B;ZX(j,3,h,1,f,3,3,0,l,3,h,0,k[w>>2]|0,1)|0;z=z+1|0}while((z|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}Fq(g,i,971);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);if(s)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);ap(g);if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);g=k[e>>2]|0;if(!g){k[e>>2]=0;Tqa(f);Tqa(l);Tqa(j);r=a;return i|0}Tqa(g);k[e>>2]=0;Tqa(f);Tqa(l);Tqa(j);r=a;return i|0}function O9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;a=r;r=r+48|0;c=a+24|0;d=a+16|0;e=a;f=a+32|0;k[f>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=iq(b,539)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;Uo(b,f);j=Wo(b,353)|0;l=Wo(b,339)|0;m=+Dp(b,265);n=+Dp(b,65);o=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;a:do if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=-(m*n);t=o+8|0;u=h+4|0;v=e+8|0;if((g|0)>0)w=q;else{x=q;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,x);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,o);nd[k[(k[j>>2]|0)+48>>2]&1023](j,c,o);rd[k[(k[l>>2]|0)+60>>2]&511](l,e,k[f>>2]|0,o);x=x+1|0;if((x|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))break a}}do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,w);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,o);nd[k[(k[j>>2]|0)+48>>2]&1023](j,c,o);rd[k[(k[l>>2]|0)+60>>2]&511](l,e,k[f>>2]|0,o);x=k[u>>2]|0;y=0;do{z=i+(y<<3)|0;A=y<<1;B=x+(A<<3)|0;p[B>>3]=+p[c>>3]*s*+p[e>>3]*+p[d>>3]*+p[t>>3]*+p[z>>3]+ +p[B>>3];B=x+((A|1)<<3)|0;p[B>>3]=+p[c>>3]*s*+p[v>>3]*+p[d>>3]*+p[t>>3]*+p[z>>3]+ +p[B>>3];y=y+1|0}while((y|0)!=(g|0));w=w+1|0}while((w|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}while(0);xq(b,h,971);b=k[f>>2]|0;if(!b){k[f>>2]=0;Tqa(i);C=k[o>>2]|0;D=C+4|0;E=k[D>>2]|0;Ec[E&1023](o);r=a;return h|0}Tqa(b);k[f>>2]=0;Tqa(i);C=k[o>>2]|0;D=C+4|0;E=k[D>>2]|0;Ec[E&1023](o);r=a;return h|0}function P9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0;a=r;r=r+64|0;c=a+40|0;d=a+32|0;e=a+24|0;f=a+16|0;g=a+52|0;h=a+48|0;i=a;if(!(Hc[k[(k[b>>2]|0)+240>>2]&511](b)|0)){j=0;r=a;return j|0}k[g>>2]=0;k[h>>2]=0;l=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;m=iq(b,539)|0;n=Rqa(l>>>0>536870911?-1:l<<3)|0;o=Wo(b,353)|0;q=Wo(b,64)|0;s=Wo(b,999)|0;t=+Dp(b,266);u=+Dp(b,265);v=+Dp(b,65);Uo(b,g);rd[k[(k[b>>2]|0)+140>>2]&511](b,h,k[g>>2]|0,206);nd[k[(k[b>>2]|0)+384>>2]&1023](b,i,k[h>>2]|0);w=ld[k[(k[b>>2]|0)+312>>2]&127](b,k[g>>2]|0,k[h>>2]|0,3)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=v*.5;v=t*y;t=u*y;z=(l|0)>0;A=w+8|0;B=m+4|0;C=i+8|0;D=x;do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,D);nd[k[(k[o>>2]|0)+48>>2]&1023](o,d,w);nd[k[(k[q>>2]|0)+48>>2]&1023](q,e,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,f,w);rd[k[(k[b>>2]|0)+272>>2]&511](b,c,k[h>>2]|0,w);nd[k[(k[b>>2]|0)+336>>2]&1023](b,n,w);y=+KY(0.0,+p[d>>3]+ +p[e>>3]-+p[f>>3]);u=+KY(0.0,+p[e>>3]-+p[f>>3]);E=+p[d>>3];F=E*(t*E)+v*(y*y-u*u);if(z){x=k[B>>2]|0;G=0;do{H=n+(G<<3)|0;I=G<<1;J=x+(I<<3)|0;p[J>>3]=F*+p[c>>3]*+p[A>>3]*+p[i>>3]*+p[H>>3]+ +p[J>>3];J=x+((I|1)<<3)|0;p[J>>3]=F*+p[c>>3]*+p[A>>3]*+p[C>>3]*+p[H>>3]+ +p[J>>3];G=G+1|0}while((G|0)!=(l|0))}D=D+1|0}while((D|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}xq(b,m,971);b=k[g>>2]|0;if(b)Tqa(b);k[g>>2]=0;g=k[h>>2]|0;if(g)Tqa(g);k[h>>2]=0;Tqa(n);if(w)Ec[k[(k[w>>2]|0)+4>>2]&1023](w);j=m;r=a;return j|0}function Q9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0;a=r;r=r+48|0;c=a+36|0;d=a+24|0;e=a+16|0;f=a+8|0;g=a;h=a+32|0;if(!($p(b)|0)){i=0;r=a;return i|0}k[h>>2]=0;cp(b,c,299);j=(k[c>>2]|0)==2;l=j?2:5;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=ma((k[c>>2]|0)+-1|0,m)|0;m=gq(b,540)|0;o=ma(n,l)|0;q=o>>>0>536870911?-1:o<<3;o=Rqa(q)|0;s=Rqa(q)|0;q=j?32:200;j=Rqa(q)|0;WEa(j|0,0,q|0)|0;Uo(b,h);q=Wo(b,674)|0;t=Wo(b,675)|0;if((k[c>>2]|0)==3){u=Wo(b,677)|0;v=u;w=Wo(b,678)|0}else{v=0;w=0}pp(b,f,87);u=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;x=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;if((x|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){y=b+28|0;z=u+8|0;A=m+12|0;B=x;do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,B);rd[k[(k[b>>2]|0)+260>>2]&511](b,g,k[h>>2]|0,u);S9(0,o,b,k[c>>2]|0,k[h>>2]|0,u);T9(0,s,b,k[c>>2]|0,k[h>>2]|0,u);x=k[y>>2]|0;ad[k[(k[x>>2]|0)+116>>2]&63](x,d,k[c>>2]|0,k[h>>2]|0,u,q,v);x=k[y>>2]|0;ad[k[(k[x>>2]|0)+116>>2]&63](x,e,k[c>>2]|0,k[h>>2]|0,u,t,w);C=+p[d>>3];D=+p[g>>3]*(+p[z>>3]*((C+ +p[f>>3]*(C-+p[e>>3]))*2.0));x=0;do{E=j+((ma(x,l)|0)+x<<3)|0;p[E>>3]=D;x=x+1|0}while((x|0)<(l|0));ZX(o,l,n,1,j,l,l,0,s,l,n,0,k[A>>2]|0,1)|0;B=B+1|0}while((B|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}if((k[c>>2]|0)==3)Fq(b,m,971);Ec[k[(k[u>>2]|0)+4>>2]&1023](u);u=k[h>>2]|0;if(u)Tqa(u);k[h>>2]=0;Tqa(j);Tqa(s);Tqa(o);i=m;r=a;return i|0}function R9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;a=r;r=r+64|0;c=a+52|0;d=a+56|0;e=a+48|0;f=a+44|0;g=a+32|0;h=a+24|0;j=a+16|0;l=a+8|0;m=a;n=a+40|0;if(!($p(b)|0)){o=0;r=a;return o|0}if(_p(b)|0){o=0;r=a;return o|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){o=0;r=a;return o|0}k[n>>2]=0;cp(b,c,299);q=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;s=ma((k[c>>2]|0)+-1|0,q)|0;q=gq(b,540)|0;t=(k[c>>2]|0)+-1|0;u=ma(t,s)|0;v=Rqa(u>>>0>536870911?-1:u<<3)|0;u=ma(t,t)|0;t=Rqa(u>>>0>536870911?-1:u<<3)|0;if(u)WEa(t|0,0,u<<3|0)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,n);cp(b,e,942);u=Qqa(16)|0;B=0;eb(524,u|0,b|0,2);w=B;B=0;if(w&1){w=Rb()|0;Sqa(u);Qb(w|0)}w=k[e>>2]|0;if((w|0)==924){x=+id[k[(k[b>>2]|0)+136>>2]&63](b,k[n>>2]|0);y=k[e>>2]|0;z=x}else{y=w;z=1.0}if((y|0)==925){y=Wo(b,928)|0;Dc[k[(k[b>>2]|0)+132>>2]&255](b,f,j,l,d);A=hd[k[(k[b>>2]|0)+320>>2]&7](b,k[f>>2]|0,+p[j>>3],+p[l>>3],(i[d>>0]|0)!=0,2)|0;C=y}else{A=ed[k[(k[b>>2]|0)+324>>2]&511](b,2)|0;C=0}y=Hc[k[(k[A>>2]|0)+8>>2]&511](A)|0;a:do if((y|0)<(Hc[k[(k[A>>2]|0)+12>>2]&511](A)|0)){d=q+12|0;l=A+8|0;j=y;while(1){Fc[k[(k[A>>2]|0)+24>>2]&1023](A,j);fla(u,g,A);switch(k[e>>2]|0){case 924:{p[g>>3]=z*+p[g>>3];break}case 925:{nd[k[(k[C>>2]|0)+48>>2]&1023](C,m,A);if(+p[m>>3]<0.0)p[g>>3]=0.0;break}default:{}}f=k[c>>2]|0;w=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;D=Rqa(w>>>0>536870911?-1:w<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,D,A);E=(w|0)>0;if((f|0)==3){if(E){f=w<<1;F=0;do{x=+p[D+(F<<3)>>3];G=F<<1;p[v+(G<<3)>>3]=x;p[v+((G|1)<<3)>>3]=0.0;H=G+f|0;p[v+(H<<3)>>3]=0.0;p[v+((H|1)<<3)>>3]=x;F=F+1|0}while((F|0)!=(w|0))}}else if(E)TEa(v|0,D|0,w<<3|0)|0;Tqa(D);rd[k[(k[b>>2]|0)+264>>2]&511](b,h,k[n>>2]|0,A);F=k[c>>2]|0;f=F+-1|0;if((F|0)>1){x=+p[g>>3];I=+p[h>>3];H=0;do{G=t+((ma(F,H)|0)<<3)|0;p[G>>3]=x*+p[l>>3]*I;H=H+1|0}while((H|0)<(f|0))}ZX(v,f,s,1,t,f,f,0,v,f,s,0,k[d>>2]|0,1)|0;j=j+1|0;if((j|0)>=(Hc[k[(k[A>>2]|0)+12>>2]&511](A)|0))break a}}while(0);if((k[c>>2]|0)==3)Fq(b,q,971);Ec[k[(k[A>>2]|0)+4>>2]&1023](A);bla(u);Sqa(u);u=k[n>>2]|0;if(u)Tqa(u);k[n>>2]=0;Tqa(v);Tqa(t);o=q;r=a;return o|0}function S9(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,l=0,m=0.0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)==2){if(f)i=0;else{Tqa(h);return}do{p[b+(i<<3)>>3]=+p[h+(i<<3)>>3];d=i+a|0;p[b+(d<<3)>>3]=+p[h+(d<<3)>>3]*.5;i=i+1|0}while((i|0)!=(a|0));Tqa(h);return}if(!f){Tqa(h);return}f=a<<1;i=a<<2;d=a*6|0;e=a<<3;c=0;do{j=+p[h+(c<<3)>>3];g=c<<1;p[b+(g<<3)>>3]=j;p[b+((g|1)<<3)>>3]=0.0;l=g+f|0;p[b+(l<<3)>>3]=0.0;m=+p[h+(c+a<<3)>>3];p[b+((l|1)<<3)>>3]=m;l=g+i|0;p[b+(l<<3)>>3]=m*.5;p[b+((l|1)<<3)>>3]=j*.5;j=+p[h+(c+f<<3)>>3]*.5;l=g+d|0;p[b+(l<<3)>>3]=j;p[b+((l|1)<<3)>>3]=0.0;l=g+e|0;p[b+(l<<3)>>3]=0.0;p[b+((l|1)<<3)>>3]=j;c=c+1|0}while((c|0)!=(a|0));Tqa(h);return}function T9(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,l=0.0,m=0;a=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+340>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)!=3){if(f)i=0;else{Tqa(h);return}do{p[b+(i<<3)>>3]=+p[h+(i<<3)>>3]*2.0;d=i+a|0;p[b+(d<<3)>>3]=+p[h+(d<<3)>>3];i=i+1|0}while((i|0)!=(a|0));Tqa(h);return}if(!f){Tqa(h);return}f=a<<1;i=a<<2;d=a*6|0;e=a<<3;c=0;do{j=+p[h+(c<<3)>>3];g=c<<1;p[b+(g<<3)>>3]=j*2.0;l=+p[h+(c+a<<3)>>3];p[b+((g|1)<<3)>>3]=l;m=g+f|0;p[b+(m<<3)>>3]=j;p[b+((m|1)<<3)>>3]=l*2.0;m=g+i|0;p[b+(m<<3)>>3]=l;p[b+((m|1)<<3)>>3]=j;j=+p[h+(c+f<<3)>>3];m=g+d|0;p[b+(m<<3)>>3]=j;p[b+((m|1)<<3)>>3]=0.0;m=g+e|0;p[b+(m<<3)>>3]=0.0;p[b+((m|1)<<3)>>3]=j;c=c+1|0}while((c|0)!=(a|0));Tqa(h);return}function U9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0,q=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;a=r;r=r+48|0;c=a+36|0;d=a+24|0;e=a;f=a+32|0;if(!($p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;cp(b,c,299);h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,540)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,f);l=Wo(b,339)|0;m=+Dp(b,265);n=+Dp(b,65);o=ed[k[(k[b>>2]|0)+308>>2]&511](b,3)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=(h|0)>0;t=-(m*n);u=o+8|0;v=i+4|0;w=e+8|0;x=q;do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,x);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);rd[k[(k[l>>2]|0)+60>>2]&511](l,e,k[f>>2]|0,o);if(s){q=k[c>>2]|0;y=q+-1|0;z=k[v>>2]|0;if((q|0)==3){q=0;do{A=j+(q<<3)|0;B=ma(y,q)|0;C=z+(B<<3)|0;p[C>>3]=+p[e>>3]*t*+p[d>>3]*+p[u>>3]*+p[A>>3]+ +p[C>>3];C=z+(B+1<<3)|0;p[C>>3]=+p[w>>3]*t*+p[d>>3]*+p[u>>3]*+p[A>>3]+ +p[C>>3];q=q+1|0}while((q|0)!=(h|0))}else{q=0;do{C=z+((ma(y,q)|0)<<3)|0;p[C>>3]=+p[e>>3]*t*+p[d>>3]*+p[u>>3]*+p[j+(q<<3)>>3]+ +p[C>>3];q=q+1|0}while((q|0)!=(h|0))}}x=x+1|0}while((x|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}if((k[c>>2]|0)==3)xq(b,i,971);Tqa(j);j=k[f>>2]|0;if(j)Tqa(j);k[f>>2]=0;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);g=i;r=a;return g|0}function V9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0;a=r;r=r+64|0;c=a+56|0;d=a+40|0;e=a+32|0;f=a+24|0;g=a+52|0;h=a+48|0;i=a;if(!($p(b)|0)){j=0;r=a;return j|0}if(!(Hc[k[(k[b>>2]|0)+240>>2]&511](b)|0)){j=0;r=a;return j|0}k[g>>2]=0;k[h>>2]=0;cp(b,c,299);l=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;m=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;n=iq(b,540)|0;o=Rqa(l>>>0>536870911?-1:l<<3)|0;q=Wo(b,339)|0;s=Wo(b,999)|0;t=+Dp(b,266);u=+Dp(b,265);v=+Dp(b,65);Uo(b,g);rd[k[(k[b>>2]|0)+140>>2]&511](b,h,k[g>>2]|0,206);nd[k[(k[b>>2]|0)+384>>2]&1023](b,i,k[h>>2]|0);w=k[c>>2]|0;x=k[g>>2]|0;y=+p[x+(w+-1<<3)>>3];z=(m|0)>1;if(z){A=1;B=y;while(1){C=+p[x+((A*3|0)+-1+w<<3)>>3];D=C>B?C:B;A=A+1|0;if((A|0)==(m|0)){E=D;break}else B=D}if(z){z=1;B=y;while(1){D=+p[x+((z*3|0)+-1+w<<3)>>3];C=D<B?D:B;z=z+1|0;if((z|0)==(m|0)){F=E;G=C;break}else B=C}}else{F=E;G=y}}else{F=y;G=y}m=k[(k[b>>2]|0)+316>>2]|0;z=k[h>>2]|0;if(F>0.0&G<0.0)H=fd[m&31](b,x,z,3,10)|0;else H=fd[m&31](b,x,z,3,3)|0;z=Hc[k[(k[H>>2]|0)+8>>2]&511](H)|0;if((z|0)<(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0)){G=t*v;t=u*v;x=(l|0)>0;m=H+8|0;w=n+4|0;A=i+8|0;I=z;do{Fc[k[(k[H>>2]|0)+24>>2]&1023](H,I);nd[k[(k[q>>2]|0)+48>>2]&1023](q,e,H);nd[k[(k[s>>2]|0)+48>>2]&1023](s,f,H);z=k[g>>2]|0;if((k[c>>2]|0)==3)J=+Lp(b,z,H);else J=+Kp(b,z,H);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,H);rd[k[(k[b>>2]|0)+272>>2]&511](b,d,k[h>>2]|0,H);v=G*+KY(0.0,J-+p[f>>3]);u=v+t*(+p[e>>3]-J);if(x){z=k[c>>2]|0;K=z+-1|0;L=k[w>>2]|0;if((z|0)==3){z=0;do{M=o+(z<<3)|0;N=ma(K,z)|0;O=L+(N<<3)|0;p[O>>3]=u*+p[d>>3]*+p[m>>3]*+p[i>>3]*+p[M>>3]+ +p[O>>3];O=L+(N+1<<3)|0;p[O>>3]=u*+p[d>>3]*+p[m>>3]*+p[A>>3]*+p[M>>3]+ +p[O>>3];z=z+1|0}while((z|0)!=(l|0))}else{z=0;do{O=L+((ma(K,z)|0)<<3)|0;p[O>>3]=u*+p[d>>3]*+p[m>>3]*+p[i>>3]*+p[o+(z<<3)>>3]+ +p[O>>3];z=z+1|0}while((z|0)!=(l|0))}}I=I+1|0}while((I|0)<(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0))}if((k[c>>2]|0)==3)xq(b,n,971);Tqa(o);o=k[g>>2]|0;if(o)Tqa(o);k[g>>2]=0;g=k[h>>2]|0;if(g)Tqa(g);k[h>>2]=0;if(H)Ec[k[(k[H>>2]|0)+4>>2]&1023](H);j=n;r=a;return j|0}function W9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0;a=r;r=r+32|0;c=a+28|0;d=a+16|0;e=a+8|0;f=a;g=a+24|0;k[g>>2]=0;cp(b,c,299);pp(b,d,916);h=(k[c>>2]|0)==2?3:6;i=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;j=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;l=k[c>>2]|0;m=(ma(l,i)|0)+j|0;n=h+2|0;o=j+i|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;o=(i|0)>0;if((l|0)==2){if(o){l=0;do{k[q+(l<<2)>>2]=971;l=l+1|0}while((l|0)!=(i|0))}}else if(o){o=0;do{k[q+(o<<2)>>2]=972;o=o+1|0}while((o|0)!=(i|0))}if((j|0)>0){o=0;do{k[q+(o+i<<2)>>2]=653;o=o+1|0}while((o|0)!=(j|0))}j=gq(b,543)|0;o=ma(m,n)|0;i=o>>>0>536870911?-1:o<<3;o=Rqa(i)|0;l=Rqa(i)|0;i=(ma(n,n)|0)<<3;s=Rqa(i)|0;WEa(s|0,0,i|0)|0;Uo(b,g);pp(b,e,85);Wo(b,674)|0;Wo(b,677)|0;if((k[c>>2]|0)==3)Wo(b,679)|0;i=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;t=Hc[k[(k[i>>2]|0)+8>>2]&511](i)|0;if((t|0)<(Hc[k[(k[i>>2]|0)+12>>2]&511](i)|0)){u=i+8|0;v=j+12|0;w=s+((ma(h,n)|0)+h<<3)|0;x=h+1|0;y=s+((ma(x,n)|0)+x<<3)|0;x=t;do{Fc[k[(k[i>>2]|0)+24>>2]&1023](i,x);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,i);$9(0,o,b,k[c>>2]|0,k[g>>2]|0,i);aaa(0,l,b,k[c>>2]|0,k[g>>2]|0,i);z=+p[d>>3];A=+p[f>>3];t=0;do{B=s+((ma(t,n)|0)+t<<3)|0;p[B>>3]=z*+p[u>>3]*A;t=t+1|0}while((t|0)<(h|0));z=+p[e>>3];p[w>>3]=-(z*+p[u>>3]*A);p[y>>3]=-(z*+p[u>>3]*A);ZX(o,n,m,1,s,n,n,0,l,n,m,0,k[v>>2]|0,1)|0;x=x+1|0}while((x|0)<(Hc[k[(k[i>>2]|0)+12>>2]&511](i)|0))}Hq(b,j,q);Ec[k[(k[i>>2]|0)+4>>2]&1023](i);i=k[g>>2]|0;if(!i){k[g>>2]=0;Tqa(s);Tqa(l);Tqa(o);Tqa(q);r=a;return j|0}Tqa(i);k[g>>2]=0;Tqa(s);Tqa(l);Tqa(o);Tqa(q);r=a;return j|0}function X9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0;a=r;r=r+48|0;c=a+36|0;d=a+24|0;e=a+16|0;f=a+8|0;g=a;h=a+32|0;k[h>>2]=0;cp(b,c,299);pp(b,d,916);i=(k[c>>2]|0)==2;j=i?3:6;l=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;m=ed[k[(k[b>>2]|0)+168>>2]&511](b,738)|0;ed[k[(k[b>>2]|0)+168>>2]&511](b,742)|0;n=k[c>>2]|0;o=ma(n,l)|0;q=Rqa(l>>>0>1073741823?-1:l<<2)|0;s=(l|0)>0;if((n|0)==2){if(s){n=0;do{k[q+(n<<2)>>2]=971;n=n+1|0}while((n|0)!=(l|0))}}else if(s){s=0;do{k[q+(s<<2)>>2]=972;s=s+1|0}while((s|0)!=(l|0))}l=gq(b,543)|0;s=ma(o,j)|0;n=s>>>0>536870911?-1:s<<3;s=Rqa(n)|0;t=Rqa(n)|0;n=ma(o,m)|0;u=Rqa(n>>>0>536870911?-1:n<<3)|0;if(n)WEa(u|0,0,n<<3|0)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;v=Rqa(o>>>0>536870911?-1:o<<3)|0;w=i?72:288;i=Rqa(w)|0;WEa(i|0,0,w|0)|0;Uo(b,h);w=Wo(b,674)|0;x=Wo(b,677)|0;if((k[c>>2]|0)==3)y=Wo(b,679)|0;else y=0;z=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;A=Hc[k[(k[z>>2]|0)+8>>2]&511](z)|0;if((A|0)<(Hc[k[(k[z>>2]|0)+12>>2]&511](z)|0)){B=b+28|0;C=z+8|0;D=l+12|0;E=A;do{Fc[k[(k[z>>2]|0)+24>>2]&1023](z,E);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[h>>2]|0,z);baa(0,s,b,k[c>>2]|0,k[h>>2]|0,z);caa(0,t,b,k[c>>2]|0,k[h>>2]|0,z);A=k[B>>2]|0;Tc[k[(k[A>>2]|0)+108>>2]&15](A,f,k[c>>2]|0,k[h>>2]|0,z,w,x,y);F=+p[e>>3];G=+p[f>>3]*2.0;A=0;do{H=i+((ma(A,j)|0)+A<<3)|0;p[H>>3]=G*+p[C>>3]*F;A=A+1|0}while((A|0)<(j|0));ZX(s,j,o,1,i,j,j,0,t,j,o,0,k[D>>2]|0,1)|0;A=(k[c>>2]|0)==2?24:48;H=Rqa(A)|0;nd[k[(k[b>>2]|0)+356>>2]&1023](b,H,z);TEa(n|0,H|0,A|0)|0;Tqa(H);daa(0,v,b,k[c>>2]|0,k[h>>2]|0,z);F=+p[C>>3]*+p[e>>3]*+aa(+(+p[d>>3]));p[g>>3]=F;ZX(n,1,m,1,g,1,1,0,v,1,o,0,u,1)|0;E=E+1|0}while((E|0)<(Hc[k[(k[z>>2]|0)+12>>2]&511](z)|0));I=D}else I=l+12|0;_X(u,m,o,1,u,m,o,0,k[I>>2]|0,1)|0;Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0;Hq(b,l,q);Ec[k[(k[z>>2]|0)+4>>2]&1023](z);z=k[h>>2]|0;if(!z){k[h>>2]=0;Tqa(i);Tqa(t);Tqa(s);Tqa(v);Tqa(n);Tqa(u);Tqa(q);r=a;return l|0}Tqa(z);k[h>>2]=0;Tqa(i);Tqa(t);Tqa(s);Tqa(v);Tqa(n);Tqa(u);Tqa(q);r=a;return l|0}function Y9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;a=r;r=r+32|0;c=a+28|0;d=a+16|0;e=a+8|0;f=a;g=a+24|0;k[g>>2]=0;cp(b,c,299);h=(k[c>>2]|0)==2?3:6;i=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;j=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;l=k[c>>2]|0;m=(ma(l,i)|0)+j|0;n=h+2|0;o=j+i|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;o=(i|0)>0;if((l|0)==2){if(o){l=0;do{k[q+(l<<2)>>2]=971;l=l+1|0}while((l|0)!=(i|0))}}else if(o){o=0;do{k[q+(o<<2)>>2]=972;o=o+1|0}while((o|0)!=(i|0))}if((j|0)>0){o=0;do{k[q+(o+i<<2)>>2]=653;o=o+1|0}while((o|0)!=(j|0))}j=gq(b,543)|0;o=ma(m,n)|0;i=o>>>0>536870911?-1:o<<3;o=Rqa(i)|0;l=Rqa(i)|0;i=(ma(n,n)|0)<<3;s=Rqa(i)|0;WEa(s|0,0,i|0)|0;Uo(b,g);pp(b,e,85);i=Wo(b,674)|0;t=Wo(b,677)|0;if((k[c>>2]|0)==3)u=Wo(b,679)|0;else u=0;v=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;w=Hc[k[(k[v>>2]|0)+8>>2]&511](v)|0;if((w|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0)){x=b+28|0;y=v+8|0;z=j+12|0;A=s+((ma(h,n)|0)+h<<3)|0;B=h+1|0;C=s+((ma(B,n)|0)+B<<3)|0;B=w;do{Fc[k[(k[v>>2]|0)+24>>2]&1023](v,B);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,v);$9(0,o,b,k[c>>2]|0,k[g>>2]|0,v);aaa(0,l,b,k[c>>2]|0,k[g>>2]|0,v);w=k[x>>2]|0;Tc[k[(k[w>>2]|0)+108>>2]&15](w,d,k[c>>2]|0,k[g>>2]|0,v,i,t,u);D=+p[f>>3];E=+p[d>>3]*2.0;w=0;do{F=s+((ma(w,n)|0)+w<<3)|0;p[F>>3]=E*+p[y>>3]*D;w=w+1|0}while((w|0)<(h|0));E=+p[e>>3];p[A>>3]=-(E*+p[y>>3]*D);p[C>>3]=-(E*+p[y>>3]*D);ZX(o,n,m,1,s,n,n,0,l,n,m,0,k[z>>2]|0,1)|0;B=B+1|0}while((B|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0))}Hq(b,j,q);Ec[k[(k[v>>2]|0)+4>>2]&1023](v);v=k[g>>2]|0;if(!v){k[g>>2]=0;Tqa(s);Tqa(l);Tqa(o);Tqa(q);r=a;return j|0}Tqa(v);k[g>>2]=0;Tqa(s);Tqa(l);Tqa(o);Tqa(q);r=a;return j|0}function Z9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0;a=r;r=r+256|0;c=a+240|0;d=a+236|0;e=a+252|0;f=a+232|0;g=a+228|0;h=a+224|0;i=a+220|0;j=a+32|0;l=a+24|0;m=a+16|0;n=a+8|0;o=a;q=a+216|0;s=a+80|0;t=a+64|0;u=a+52|0;v=a+40|0;if(_p(b)|0){w=0;r=a;return w|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){w=0;r=a;return w|0}Ap(b,d,533);switch(k[d>>2]|0){case 538:case 541:case 542:{k[q>>2]=0;cp(b,f,299);cp(b,g,298);d=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;x=(Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0)+(ma(k[f>>2]|0,d)|0)|0;d=gq(b,543)|0;y=k[f>>2]|0;z=ma(y,x)|0;A=Rqa(z>>>0>536870911?-1:z<<3)|0;z=ma(y,y)|0;y=Rqa(z>>>0>536870911?-1:z<<3)|0;if(z)WEa(y|0,0,z<<3|0)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,q);cp(b,h,942);z=Qqa(16)|0;B=0;eb(524,z|0,b|0,((k[f>>2]|0)==3?3:1)|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Sqa(z);E=D;F=C;Qb(F|0)}C=k[h>>2]|0;if((C|0)==924){G=+id[k[(k[b>>2]|0)+136>>2]&63](b,k[q>>2]|0);H=k[h>>2]|0;I=G}else{H=C;I=1.0}do if((H|0)==925){if((k[g>>2]|0)!=301){C=Wo(b,928)|0;Dc[k[(k[b>>2]|0)+132>>2]&255](b,i,m,n,e);J=ed[k[(k[b>>2]|0)+324>>2]&511](b,3)|0;K=C;break}C=s+56|0;D=s+4|0;k[s>>2]=27524;k[C>>2]=27544;B=0;wa(508,s+56|0,D|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(C);Qb(N|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[D>>2]=27560;O=s+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(D);P=T;R=S;break}Yua(c);B=0;S=Ia(40,s|0,128619,55)|0;T=B;B=0;a:do if(!(T&1)?(B=0,Xa(239,S|0,0)|0,U=B,B=0,!(U&1)):0){U=Ab(20)|0;B=0;eb(502,t|0,127077,81);V=B;B=0;do if(!(V&1)){B=0;eb(502,u|0,128675,23);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(t);Y=W;Z=X;break}B=0;wa(510,v|0,D|0);X=B;B=0;if(X&1){X=Rb()|0;_=Q;$=X;aa=1}else{B=0;ua(163,U|0,t|0,u|0,3654,v|0);X=B;B=0;if(X&1)ba=1;else{B=0;eb(503,U|0,1240,229);B=0;ba=0}X=Rb()|0;W=Q;Yua(v);_=W;$=X;aa=ba}Yua(u);Yua(t);if(aa){Y=$;Z=_}else{ca=$;da=_;break a}}else{X=Rb()|0;Y=X;Z=Q}while(0);zb(U|0);ca=Y;da=Z}else ea=27;while(0);if((ea|0)==27){S=Rb()|0;ca=S;da=Q}k[s>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(O);Ava(D);vva(C);E=da;F=ca;Qb(F|0)}while(0);M=P;N=R;vva(C);Qb(N|0)}else{J=ed[k[(k[b>>2]|0)+324>>2]&511](b,3)|0;K=0}while(0);N=Hc[k[(k[J>>2]|0)+8>>2]&511](J)|0;b:do if((N|0)<(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0)){R=d+12|0;P=J+8|0;M=N;while(1){Fc[k[(k[J>>2]|0)+24>>2]&1023](J,M);fla(z,j,J);switch(k[h>>2]|0){case 924:{p[j>>3]=I*+p[j>>3];break}case 925:{nd[k[(k[K>>2]|0)+48>>2]&1023](K,o,J);if(+p[o>>3]<0.0)p[j>>3]=0.0;break}default:{}}eaa(0,A,b,k[f>>2]|0,0,J);rd[k[(k[b>>2]|0)+264>>2]&511](b,l,k[q>>2]|0,J);F=k[f>>2]|0;if((F|0)>0){G=+p[j>>3];fa=+p[l>>3];ca=0;do{da=y+((ma(F,ca)|0)+ca<<3)|0;p[da>>3]=G*+p[P>>3]*fa;ca=ca+1|0}while((ca|0)<(F|0))}ZX(A,F,x,1,y,F,F,0,A,F,x,0,k[R>>2]|0,1)|0;M=M+1|0;if((M|0)>=(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0))break b}}while(0);Ec[k[(k[J>>2]|0)+4>>2]&1023](J);bla(z);Sqa(z);z=k[q>>2]|0;if(z)Tqa(z);k[q>>2]=0;Tqa(A);Tqa(y);ga=d;break}default:ga=0}w=ga;r=a;return w|0}function _9(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;a=r;r=r+64|0;c=a+56|0;d=a+52|0;e=a+48|0;f=a+32|0;g=a+24|0;h=a;i=a+44|0;j=a+40|0;if(!(_p(b)|0)){l=0;r=a;return l|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){l=0;r=a;return l|0}Ap(b,c,533);switch(k[c>>2]|0){case 538:case 541:case 542:{cp(b,d,81);if(!(k[d>>2]|0))m=0;else{k[i>>2]=0;k[j>>2]=0;cp(b,e,299);d=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;c=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;n=(ma(k[e>>2]|0,d)|0)+c|0;c=gq(b,543)|0;o=Rqa(d>>>0>536870911?-1:d<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,i);Uo(b,j);pp(b,g,358);if(+p[g>>3]==0.0)p[g>>3]=1.0e5;q=+Dp(b,266);s=+Dp(b,65);t=Wo(b,339)|0;u=ed[k[(k[b>>2]|0)+324>>2]&511](b,3)|0;v=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;a:do if((v|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){w=q*s;x=u+8|0;y=(d|0)>0;z=c+12|0;A=h+8|0;B=v;C=0.0;while(1){Fc[k[(k[u>>2]|0)+24>>2]&1023](u,B);rd[k[(k[t>>2]|0)+60>>2]&511](t,h,k[j>>2]|0,u);nd[k[(k[b>>2]|0)+368>>2]&1023](b,o,u);rd[k[(k[b>>2]|0)+264>>2]&511](b,f,k[i>>2]|0,u);D=k[e>>2]|0;switch(D|0){case 2:{E=+p[h>>3];F=E*E;break}case 3:{E=+p[h>>3];G=+p[A>>3];F=E*E+G*G;break}default:F=C}G=w*+aa(+(F+1.0));E=G*+p[x>>3]*+p[f>>3]*+p[g>>3];if(y){H=k[z>>2]|0;I=0;do{J=o+(I<<3)|0;I=I+1|0;K=ma((ma(D,I)|0)+-1|0,n)|0;L=0;do{M=L;L=L+1|0;N=H+((ma(D,L)|0)+-1+K<<3)|0;p[N>>3]=E*+p[J>>3]*+p[o+(M<<3)>>3]+ +p[N>>3]}while((L|0)!=(d|0))}while((I|0)!=(d|0))}B=B+1|0;if((B|0)>=(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))break a;else C=F}}while(0);Ec[k[(k[u>>2]|0)+4>>2]&1023](u);u=k[i>>2]|0;if(u)Tqa(u);k[i>>2]=0;i=k[j>>2]|0;if(i)Tqa(i);k[j>>2]=0;Tqa(o);m=c}break}default:m=0}l=m;r=a;return l|0}function $9(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0;a=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;g=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;h=ma(g,d)|0;i=Rqa(h>>>0>536870911?-1:h<<3)|0;j=Rqa(a>>>0>536870911?-1:a<<3)|0;rd[k[(k[c>>2]|0)+344>>2]&511](c,i,e,f);nd[k[(k[c>>2]|0)+352>>2]&1023](c,j,f);f=(g|0)>0;if((d|0)==2){if(f){c=h+a|0;e=c<<1;l=c*3|0;m=c<<2;n=0;do{o=+p[i+(n<<3)>>3];q=n<<1;p[b+(q<<3)>>3]=o;p[b+((q|1)<<3)>>3]=0.0;r=q+c|0;p[b+(r<<3)>>3]=0.0;s=+p[i+(n+g<<3)>>3];p[b+(r+1<<3)>>3]=s;r=q+e|0;p[b+(r<<3)>>3]=s*.5;p[b+((r|1)<<3)>>3]=o*.5;r=q+l|0;p[b+(r<<3)>>3]=0.0;p[b+(r+1<<3)>>3]=0.0;r=q+m|0;p[b+(r<<3)>>3]=o;p[b+((r|1)<<3)>>3]=s;n=n+1|0}while((n|0)!=(g|0))}if((a|0)<=0){Tqa(i);Tqa(j);return}n=h+a|0;m=n+h|0;l=(n<<1)+h|0;e=(n*3|0)+h|0;c=(n<<2)+h|0;n=0;do{p[b+(n+h<<3)>>3]=0.0;p[b+(m+n<<3)>>3]=0.0;p[b+(l+n<<3)>>3]=0.0;p[b+(e+n<<3)>>3]=+p[j+(n<<3)>>3];p[b+(c+n<<3)>>3]=0.0;n=n+1|0}while((n|0)!=(a|0));Tqa(i);Tqa(j);return}else{if(f){f=h+a|0;n=f<<1;c=g<<1;e=f*3|0;l=f<<2;m=f*5|0;r=f*6|0;q=f*7|0;t=0;do{s=+p[i+(t<<3)>>3];u=ma(t,d)|0;p[b+(u<<3)>>3]=s;p[b+(u+1<<3)>>3]=0.0;p[b+(u+2<<3)>>3]=0.0;v=u+f|0;p[b+(v<<3)>>3]=0.0;o=+p[i+(t+g<<3)>>3];p[b+(v+1<<3)>>3]=o;p[b+(v+2<<3)>>3]=0.0;v=u+n|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=0.0;w=+p[i+(t+c<<3)>>3];p[b+(v+2<<3)>>3]=w;x=o*.5;v=u+e|0;p[b+(v<<3)>>3]=x;y=s*.5;p[b+(v+1<<3)>>3]=y;p[b+(v+2<<3)>>3]=0.0;z=w*.5;v=u+l|0;p[b+(v<<3)>>3]=z;p[b+(v+1<<3)>>3]=0.0;p[b+(v+2<<3)>>3]=y;v=u+m|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=z;p[b+(v+2<<3)>>3]=x;v=u+r|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=0.0;p[b+(v+2<<3)>>3]=0.0;v=u+q|0;p[b+(v<<3)>>3]=s;p[b+(v+1<<3)>>3]=o;p[b+(v+2<<3)>>3]=w;t=t+1|0}while((t|0)!=(g|0))}if((a|0)<=0){Tqa(i);Tqa(j);return}g=h+a|0;t=g+h|0;q=(g<<1)+h|0;r=(g*3|0)+h|0;m=(g<<2)+h|0;l=(g*5|0)+h|0;e=(g*6|0)+h|0;c=(g*7|0)+h|0;g=0;do{p[b+(g+h<<3)>>3]=0.0;p[b+(t+g<<3)>>3]=0.0;p[b+(q+g<<3)>>3]=0.0;p[b+(r+g<<3)>>3]=0.0;p[b+(m+g<<3)>>3]=0.0;p[b+(l+g<<3)>>3]=0.0;p[b+(e+g<<3)>>3]=+p[j+(g<<3)>>3];p[b+(c+g<<3)>>3]=0.0;g=g+1|0}while((g|0)!=(a|0));Tqa(i);Tqa(j);return}}function aaa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0;a=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;g=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;h=ma(g,d)|0;i=Rqa(h>>>0>536870911?-1:h<<3)|0;j=Rqa(a>>>0>536870911?-1:a<<3)|0;rd[k[(k[c>>2]|0)+344>>2]&511](c,i,e,f);nd[k[(k[c>>2]|0)+352>>2]&1023](c,j,f);f=(g|0)>0;if((d|0)==2){if(f){c=h+a|0;e=c<<1;l=c*3|0;m=c<<2;n=0;do{o=+p[i+(n<<3)>>3];q=n<<1;p[b+(q<<3)>>3]=o;p[b+((q|1)<<3)>>3]=0.0;r=q+c|0;p[b+(r<<3)>>3]=0.0;s=+p[i+(n+g<<3)>>3];p[b+(r+1<<3)>>3]=s;r=q+e|0;p[b+(r<<3)>>3]=s;p[b+((r|1)<<3)>>3]=o;r=q+l|0;p[b+(r<<3)>>3]=o;p[b+(r+1<<3)>>3]=s;r=q+m|0;p[b+(r<<3)>>3]=0.0;p[b+((r|1)<<3)>>3]=0.0;n=n+1|0}while((n|0)!=(g|0))}if((a|0)<=0){Tqa(i);Tqa(j);return}n=h+a|0;m=n+h|0;l=(n<<1)+h|0;e=(n*3|0)+h|0;c=(n<<2)+h|0;n=0;do{p[b+(n+h<<3)>>3]=0.0;p[b+(m+n<<3)>>3]=0.0;p[b+(l+n<<3)>>3]=0.0;p[b+(e+n<<3)>>3]=0.0;p[b+(c+n<<3)>>3]=+p[j+(n<<3)>>3];n=n+1|0}while((n|0)!=(a|0));Tqa(i);Tqa(j);return}else{if(f){f=h+a|0;n=f<<1;c=g<<1;e=f*3|0;l=f<<2;m=f*5|0;r=f*6|0;q=f*7|0;t=0;do{s=+p[i+(t<<3)>>3];u=ma(t,d)|0;p[b+(u<<3)>>3]=s;p[b+(u+1<<3)>>3]=0.0;p[b+(u+2<<3)>>3]=0.0;v=u+f|0;p[b+(v<<3)>>3]=0.0;o=+p[i+(t+g<<3)>>3];p[b+(v+1<<3)>>3]=o;p[b+(v+2<<3)>>3]=0.0;v=u+n|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=0.0;w=+p[i+(t+c<<3)>>3];p[b+(v+2<<3)>>3]=w;v=u+e|0;p[b+(v<<3)>>3]=o;p[b+(v+1<<3)>>3]=s;p[b+(v+2<<3)>>3]=0.0;v=u+l|0;p[b+(v<<3)>>3]=w;p[b+(v+1<<3)>>3]=0.0;p[b+(v+2<<3)>>3]=s;v=u+m|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=w;p[b+(v+2<<3)>>3]=o;v=u+r|0;p[b+(v<<3)>>3]=s;p[b+(v+1<<3)>>3]=o;p[b+(v+2<<3)>>3]=w;v=u+q|0;p[b+(v<<3)>>3]=0.0;p[b+(v+1<<3)>>3]=0.0;p[b+(v+2<<3)>>3]=0.0;t=t+1|0}while((t|0)!=(g|0))}if((a|0)<=0){Tqa(i);Tqa(j);return}g=h+a|0;t=g+h|0;q=(g<<1)+h|0;r=(g*3|0)+h|0;m=(g<<2)+h|0;l=(g*5|0)+h|0;e=(g*6|0)+h|0;c=(g*7|0)+h|0;g=0;do{p[b+(g+h<<3)>>3]=0.0;p[b+(t+g<<3)>>3]=0.0;p[b+(q+g<<3)>>3]=0.0;p[b+(r+g<<3)>>3]=0.0;p[b+(m+g<<3)>>3]=0.0;p[b+(l+g<<3)>>3]=0.0;p[b+(e+g<<3)>>3]=0.0;p[b+(c+g<<3)>>3]=+p[j+(g<<3)>>3];g=g+1|0}while((g|0)!=(a|0));Tqa(i);Tqa(j);return}}function baa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0.0,j=0,l=0,m=0.0,n=0,o=0,q=0,r=0.0,s=0.0;a=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+344>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)==2){if(!f){Tqa(h);return}e=g<<1;c=0;do{i=+p[h+(c<<3)>>3];j=c<<1;p[b+(j<<3)>>3]=i;p[b+((j|1)<<3)>>3]=0.0;l=j+g|0;p[b+(l<<3)>>3]=0.0;m=+p[h+(c+a<<3)>>3];p[b+(l+1<<3)>>3]=m;l=j+e|0;p[b+(l<<3)>>3]=m*.5;p[b+((l|1)<<3)>>3]=i*.5;c=c+1|0}while((c|0)!=(a|0));Tqa(h);return}else{if(!f){Tqa(h);return}f=g<<1;c=a<<1;e=g*3|0;l=g<<2;j=g*5|0;n=0;do{i=+p[h+(n<<3)>>3];o=ma(n,d)|0;p[b+(o<<3)>>3]=i;p[b+(o+1<<3)>>3]=0.0;p[b+(o+2<<3)>>3]=0.0;q=o+g|0;p[b+(q<<3)>>3]=0.0;m=+p[h+(n+a<<3)>>3];p[b+(q+1<<3)>>3]=m;p[b+(q+2<<3)>>3]=0.0;q=o+f|0;p[b+(q<<3)>>3]=0.0;p[b+(q+1<<3)>>3]=0.0;r=+p[h+(n+c<<3)>>3];p[b+(q+2<<3)>>3]=r;s=m*.5;q=o+e|0;p[b+(q<<3)>>3]=s;m=i*.5;p[b+(q+1<<3)>>3]=m;p[b+(q+2<<3)>>3]=0.0;i=r*.5;q=o+l|0;p[b+(q<<3)>>3]=i;p[b+(q+1<<3)>>3]=0.0;p[b+(q+2<<3)>>3]=m;q=o+j|0;p[b+(q<<3)>>3]=0.0;p[b+(q+1<<3)>>3]=i;p[b+(q+2<<3)>>3]=s;n=n+1|0}while((n|0)!=(a|0));Tqa(h);return}}function caa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0.0,j=0,l=0,m=0.0,n=0,o=0,q=0,r=0.0;a=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+344>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)==2){if(!f){Tqa(h);return}e=g<<1;c=0;do{i=+p[h+(c<<3)>>3];j=c<<1;p[b+(j<<3)>>3]=i;p[b+((j|1)<<3)>>3]=0.0;l=j+g|0;p[b+(l<<3)>>3]=0.0;m=+p[h+(c+a<<3)>>3];p[b+(l+1<<3)>>3]=m;l=j+e|0;p[b+(l<<3)>>3]=m;p[b+((l|1)<<3)>>3]=i;c=c+1|0}while((c|0)!=(a|0));Tqa(h);return}else{if(!f){Tqa(h);return}f=g<<1;c=a<<1;e=g*3|0;l=g<<2;j=g*5|0;n=0;do{i=+p[h+(n<<3)>>3];o=ma(n,d)|0;p[b+(o<<3)>>3]=i;p[b+(o+1<<3)>>3]=0.0;p[b+(o+2<<3)>>3]=0.0;q=o+g|0;p[b+(q<<3)>>3]=0.0;m=+p[h+(n+a<<3)>>3];p[b+(q+1<<3)>>3]=m;p[b+(q+2<<3)>>3]=0.0;q=o+f|0;p[b+(q<<3)>>3]=0.0;p[b+(q+1<<3)>>3]=0.0;r=+p[h+(n+c<<3)>>3];p[b+(q+2<<3)>>3]=r;q=o+e|0;p[b+(q<<3)>>3]=m;p[b+(q+1<<3)>>3]=i;p[b+(q+2<<3)>>3]=0.0;q=o+l|0;p[b+(q<<3)>>3]=r;p[b+(q+1<<3)>>3]=0.0;p[b+(q+2<<3)>>3]=i;q=o+j|0;p[b+(q<<3)>>3]=0.0;p[b+(q+1<<3)>>3]=r;p[b+(q+2<<3)>>3]=m;n=n+1|0}while((n|0)!=(a|0));Tqa(h);return}}function daa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;rd[k[(k[c>>2]|0)+344>>2]&511](c,h,e,f);f=(a|0)>0;if((d|0)==2){if(f)i=0;else{Tqa(h);return}do{e=i<<1;p[b+(e<<3)>>3]=+p[h+(i<<3)>>3];p[b+((e|1)<<3)>>3]=+p[h+(i+a<<3)>>3];i=i+1|0}while((i|0)!=(a|0));Tqa(h);return}if(!f){Tqa(h);return}f=a<<1;i=0;do{e=ma(i,d)|0;p[b+(e<<3)>>3]=+p[h+(i<<3)>>3];p[b+(e+1<<3)>>3]=+p[h+(i+a<<3)>>3];p[b+(e+2<<3)>>3]=+p[h+(i+f<<3)>>3];i=i+1|0}while((i|0)!=(a|0));Tqa(h);return}function eaa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,l=0,m=0;e=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;a=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;g=ma(a,d)|0;h=Rqa(a>>>0>536870911?-1:a<<3)|0;nd[k[(k[c>>2]|0)+368>>2]&1023](c,h,f);f=(a|0)>0;if((d|0)==3){if(f){d=g+e|0;c=d<<1;i=0;do{j=+p[h+(i<<3)>>3];l=i*3|0;p[b+(l<<3)>>3]=j;p[b+(l+1<<3)>>3]=0.0;p[b+(l+2<<3)>>3]=0.0;m=l+d|0;p[b+(m<<3)>>3]=0.0;p[b+(m+1<<3)>>3]=j;p[b+(m+2<<3)>>3]=0.0;m=l+c|0;p[b+(m<<3)>>3]=0.0;p[b+(m+1<<3)>>3]=0.0;p[b+(m+2<<3)>>3]=j;i=i+1|0}while((i|0)!=(a|0))}if((e|0)<=0){Tqa(h);return}i=g+e|0;c=i+g|0;d=(i<<1)+g|0;i=0;do{p[b+(i+g<<3)>>3]=0.0;p[b+(c+i<<3)>>3]=0.0;p[b+(d+i<<3)>>3]=0.0;i=i+1|0}while((i|0)!=(e|0));Tqa(h);return}else{if(f){f=g+e|0;i=0;do{j=+p[h+(i<<3)>>3];d=i<<1;p[b+(d<<3)>>3]=j;p[b+((d|1)<<3)>>3]=0.0;c=f+d|0;p[b+(c<<3)>>3]=0.0;p[b+(c+1<<3)>>3]=j;i=i+1|0}while((i|0)!=(a|0))}if((e|0)<=0){Tqa(h);return}a=g<<1;i=0;do{p[b+(i+g<<3)>>3]=0.0;p[b+(i+e+a<<3)>>3]=0.0;i=i+1|0}while((i|0)!=(e|0));Tqa(h);return}}function faa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0;a=r;r=r+48|0;c=a+36|0;d=a+24|0;e=a+16|0;f=a+8|0;g=a;h=a+32|0;k[h>>2]=0;cp(b,c,299);i=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;j=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;l=j+i|0;m=Rqa(l>>>0>1073741823?-1:l<<2)|0;l=(i|0)>0;if((k[c>>2]|0)==2){if(l){n=0;do{k[m+(n<<2)>>2]=971;n=n+1|0}while((n|0)!=(i|0))}}else if(l){n=0;do{k[m+(n<<2)>>2]=972;n=n+1|0}while((n|0)!=(i|0))}if((j|0)>0){n=0;do{k[m+(n+i<<2)>>2]=653;n=n+1|0}while((n|0)!=(j|0))}j=iq(b,543)|0;n=Rqa(i>>>0>536870911?-1:i<<3)|0;Uo(b,h);o=+Dp(b,265);q=+Dp(b,65);s=Wo(b,88)|0;t=Wo(b,89)|0;if((k[c>>2]|0)==3)u=Wo(b,90)|0;else u=0;v=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;w=Hc[k[(k[v>>2]|0)+8>>2]&511](v)|0;if((w|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0)){x=v+8|0;y=j+4|0;z=o*q;A=w;do{Fc[k[(k[v>>2]|0)+24>>2]&1023](v,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[h>>2]|0,v);nd[k[(k[b>>2]|0)+368>>2]&1023](b,n,v);nd[k[(k[s>>2]|0)+48>>2]&1023](s,e,v);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,v);if((k[c>>2]|0)==3)nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,v);if(l){w=k[c>>2]|0;B=k[y>>2]|0;if((w|0)==3){C=0;do{D=n+(C<<3)|0;E=C*3|0;F=B+(E<<3)|0;p[F>>3]=o*+p[e>>3]*+p[d>>3]*+p[x>>3]*+p[D>>3]+ +p[F>>3];F=B+(E+1<<3)|0;p[F>>3]=o*+p[f>>3]*+p[d>>3]*+p[x>>3]*+p[D>>3]+ +p[F>>3];F=B+(E+2<<3)|0;q=o*+p[g>>3]*+p[d>>3]*+p[x>>3]*+p[D>>3]+ +p[F>>3];p[F>>3]=q;p[F>>3]=q-z*+p[d>>3]*+p[x>>3]*+p[D>>3];C=C+1|0}while((C|0)!=(i|0))}else{C=0;do{D=n+(C<<3)|0;F=ma(w,C)|0;E=B+(F<<3)|0;p[E>>3]=o*+p[e>>3]*+p[d>>3]*+p[x>>3]*+p[D>>3]+ +p[E>>3];E=B+(F+1<<3)|0;q=o*+p[f>>3]*+p[d>>3]*+p[x>>3]*+p[D>>3]+ +p[E>>3];p[E>>3]=q;p[E>>3]=q-z*+p[d>>3]*+p[x>>3]*+p[D>>3];C=C+1|0}while((C|0)!=(i|0))}}A=A+1|0}while((A|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0))}zq(b,j,m);Ec[k[(k[v>>2]|0)+4>>2]&1023](v);Tqa(m);Tqa(n);n=k[h>>2]|0;if(!n){r=a;return j|0}Tqa(n);r=a;return j|0}function gaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0;a=r;r=r+80|0;c=a+64|0;d=a+48|0;e=a+40|0;f=a+16|0;g=a+60|0;h=a+56|0;i=a+8|0;j=a;k[g>>2]=0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){l=0;r=a;return l|0}if(!(_p(b)|0)){l=0;r=a;return l|0}cp(b,c,299);m=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;n=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;o=n+m|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;o=(m|0)>0;if((k[c>>2]|0)==2){if(o){s=0;do{k[q+(s<<2)>>2]=971;s=s+1|0}while((s|0)!=(m|0))}}else if(o){s=0;do{k[q+(s<<2)>>2]=972;s=s+1|0}while((s|0)!=(m|0))}if((n|0)>0){s=0;do{k[q+(s+m<<2)>>2]=653;s=s+1|0}while((s|0)!=(n|0))}n=iq(b,543)|0;s=Rqa(m>>>0>536870911?-1:m<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,g);t=Wo(b,64)|0;u=+Dp(b,266);v=+Dp(b,65);w=ed[k[(k[b>>2]|0)+324>>2]&511](b,5)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=u*v;z=w+8|0;A=n+4|0;B=f+8|0;C=f+16|0;D=x;do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,D);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[g>>2]|0,w);nd[k[(k[b>>2]|0)+368>>2]&1023](b,s,w);nd[k[(k[b>>2]|0)+380>>2]&1023](b,f,k[g>>2]|0);nd[k[(k[t>>2]|0)+48>>2]&1023](t,e,w);E=y*+p[e>>3];if(o){x=k[c>>2]|0;F=k[A>>2]|0;if((x|0)==3){G=0;do{H=s+(G<<3)|0;I=G*3|0;J=F+(I<<3)|0;p[J>>3]=E*+p[z>>3]*+p[d>>3]*+p[H>>3]*+p[f>>3]+ +p[J>>3];J=F+(I+1<<3)|0;p[J>>3]=E*+p[z>>3]*+p[d>>3]*+p[H>>3]*+p[B>>3]+ +p[J>>3];J=F+(I+2<<3)|0;p[J>>3]=E*+p[z>>3]*+p[d>>3]*+p[H>>3]*+p[C>>3]+ +p[J>>3];G=G+1|0}while((G|0)!=(m|0))}else{G=0;do{J=s+(G<<3)|0;H=ma(x,G)|0;I=F+(H<<3)|0;p[I>>3]=E*+p[z>>3]*+p[d>>3]*+p[J>>3]*+p[f>>3]+ +p[I>>3];I=F+(H+1<<3)|0;p[I>>3]=E*+p[z>>3]*+p[d>>3]*+p[J>>3]*+p[B>>3]+ +p[I>>3];G=G+1|0}while((G|0)!=(m|0))}}D=D+1|0}while((D|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}zq(b,n,q);cp(b,h,81);if(k[h>>2]|0){h=Wo(b,40)|0;pp(b,i,358);D=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;a:do if((D|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){B=w+8|0;z=n+4|0;C=f+8|0;if(o){K=D;L=0.0}else{A=D;while(1){Fc[k[(k[w>>2]|0)+24>>2]&1023](w,A);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[g>>2]|0,w);nd[k[(k[b>>2]|0)+368>>2]&1023](b,s,w);nd[k[(k[b>>2]|0)+380>>2]&1023](b,f,k[g>>2]|0);nd[k[(k[h>>2]|0)+48>>2]&1023](h,j,w);A=A+1|0;if((A|0)>=(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))break a}}while(1){Fc[k[(k[w>>2]|0)+24>>2]&1023](w,K);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[g>>2]|0,w);nd[k[(k[b>>2]|0)+368>>2]&1023](b,s,w);nd[k[(k[b>>2]|0)+380>>2]&1023](b,f,k[g>>2]|0);switch(k[c>>2]|0){case 2:{M=+p[C>>3];break}case 3:{y=+p[f>>3];E=+p[C>>3];M=+aa(+(y*y+E*E));break}default:M=L}nd[k[(k[h>>2]|0)+48>>2]&1023](h,j,w);A=k[c>>2]|0;e=k[z>>2]|0;t=0;do{G=e+((ma(A,t)|0)+1<<3)|0;p[G>>3]=+p[G>>3]+M*(+p[s+(t<<3)>>3]*(+p[d>>3]*(+p[B>>3]*(+p[j>>3]*(v*(u*+p[i>>3]))))));t=t+1|0}while((t|0)!=(m|0));K=K+1|0;if((K|0)>=(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))break a;else L=M}}while(0)}Ec[k[(k[w>>2]|0)+4>>2]&1023](w);Tqa(q);Tqa(s);s=k[g>>2]|0;if(s)Tqa(s);k[g>>2]=0;l=n;r=a;return l|0}function haa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0;a=r;r=r+64|0;c=a+56|0;d=a+40|0;e=a+32|0;f=a+24|0;g=a;h=a+52|0;i=a+48|0;if(!(Hc[k[(k[b>>2]|0)+240>>2]&511](b)|0)){j=0;r=a;return j|0}k[h>>2]=0;k[i>>2]=0;if(_p(b)|0){cp(b,c,299);l=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;m=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;n=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;o=m+l|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;o=(l|0)>0;if((k[c>>2]|0)==2){if(o){s=0;do{k[q+(s<<2)>>2]=971;s=s+1|0}while((s|0)!=(l|0))}}else if(o){s=0;do{k[q+(s<<2)>>2]=972;s=s+1|0}while((s|0)!=(l|0))}if((m|0)>0){s=0;do{k[q+(s+l<<2)>>2]=653;s=s+1|0}while((s|0)!=(m|0))}m=iq(b,543)|0;s=Rqa(l>>>0>536870911?-1:l<<3)|0;Uo(b,h);rd[k[(k[b>>2]|0)+140>>2]&511](b,i,k[h>>2]|0,206);nd[k[(k[b>>2]|0)+384>>2]&1023](b,g,k[i>>2]|0);t=Wo(b,339)|0;u=Wo(b,999)|0;v=+Dp(b,266);w=+Dp(b,65);x=k[c>>2]|0;y=k[h>>2]|0;z=+p[y+(x+-1<<3)>>3];A=(n|0)>1;if(A){B=1;C=z;while(1){D=+p[y+((B*3|0)+-1+x<<3)>>3];E=D>C?D:C;B=B+1|0;if((B|0)==(n|0)){F=E;break}else C=E}if(A){A=1;C=z;while(1){E=+p[y+((A*3|0)+-1+x<<3)>>3];D=E<C?E:C;A=A+1|0;if((A|0)==(n|0)){G=F;H=D;break}else C=D}}else{G=F;H=z}}else{G=z;H=z}n=k[(k[b>>2]|0)+316>>2]|0;A=k[i>>2]|0;if(G>0.0&H<0.0)I=fd[n&31](b,y,A,3,30)|0;else I=fd[n&31](b,y,A,3,3)|0;A=Hc[k[(k[I>>2]|0)+8>>2]&511](I)|0;if((A|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0)){H=v*w;y=I+8|0;n=m+4|0;x=g+8|0;B=g+16|0;J=A;do{Fc[k[(k[I>>2]|0)+24>>2]&1023](I,J);rd[k[(k[b>>2]|0)+272>>2]&511](b,d,k[i>>2]|0,I);nd[k[(k[b>>2]|0)+368>>2]&1023](b,s,I);nd[k[(k[t>>2]|0)+48>>2]&1023](t,e,I);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,I);A=k[h>>2]|0;if((k[c>>2]|0)==3)K=+Lp(b,A,I);else K=+Kp(b,A,I);w=H*+KY(0.0,K-+p[f>>3]);if(o){A=k[c>>2]|0;L=k[n>>2]|0;if((A|0)==3){M=0;do{N=s+(M<<3)|0;O=M*3|0;P=L+(O<<3)|0;p[P>>3]=w*+p[d>>3]*+p[y>>3]*+p[g>>3]*+p[N>>3]+ +p[P>>3];P=L+(O+1<<3)|0;p[P>>3]=w*+p[d>>3]*+p[y>>3]*+p[x>>3]*+p[N>>3]+ +p[P>>3];P=L+(O+2<<3)|0;p[P>>3]=w*+p[d>>3]*+p[y>>3]*+p[B>>3]*+p[N>>3]+ +p[P>>3];M=M+1|0}while((M|0)!=(l|0))}else{M=0;do{P=s+(M<<3)|0;N=ma(A,M)|0;O=L+(N<<3)|0;p[O>>3]=w*+p[d>>3]*+p[y>>3]*+p[g>>3]*+p[P>>3]+ +p[O>>3];O=L+(N+1<<3)|0;p[O>>3]=w*+p[d>>3]*+p[y>>3]*+p[x>>3]*+p[P>>3]+ +p[O>>3];M=M+1|0}while((M|0)!=(l|0))}}J=J+1|0}while((J|0)<(Hc[k[(k[I>>2]|0)+12>>2]&511](I)|0))}zq(b,m,q);Ec[k[(k[I>>2]|0)+4>>2]&1023](I);Tqa(q);Tqa(s);s=k[h>>2]|0;if(s)Tqa(s);k[h>>2]=0;h=k[i>>2]|0;if(h)Tqa(h);k[i>>2]=0;Q=m}else Q=0;j=Q;r=a;return j|0}
+-function dea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+208|0;d=a+8|0;e=a;f=a+184|0;g=a+48|0;h=a+36|0;i=a+24|0;j=a+12|0;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;Ska(c,1,e);foa(c);e=c+52|0;if((k[e>>2]|0)<=0){k[d>>2]=136615;Lka(c,1,d);r=a;return}l=c+36|0;m=c+104|0;n=0;while(1){if((k[(k[l>>2]|0)+(n<<2)>>2]|0)!=0?(o=(Jka(c,136615)|0)+(n<<3)|0,(~~+p[o>>3]|0)!=0):0){o=Qqa(52)|0;B=0;ua(177,o|0,n+1+(k[m>>2]|0)|0,n|0,c|0,509);q=B;B=0;if(q&1){s=o;break}ih(b,o)|0}n=n+1|0;if((n|0)>=(k[e>>2]|0)){t=27;break}}if((t|0)==27){k[d>>2]=136615;Lka(c,1,d);r=a;return}a=Rb()|0;d=Q;Sqa(s);u=d;v=a;Qb(v|0)}a=g+56|0;d=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,d|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;vva(a);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,d|0);s=B;B=0;do if(s&1){c=Rb()|0;y=Q;z=c}else{k[d>>2]=27560;c=g+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;n=Q;Yua(f);Yua(c);Ava(d);y=n;z=e;break}Yua(f);B=0;e=Ia(40,g|0,134838,27)|0;n=B;B=0;a:do if(!(n&1)?(B=0,Xa(239,e|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,131940,75);m=B;B=0;do if(!(m&1)){B=0;eb(502,i|0,135856,11);l=B;B=0;if(l&1){l=Rb()|0;o=Q;Yua(h);A=o;C=l;break}B=0;wa(510,j|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;D=Q;E=l;F=1}else{B=0;ua(163,b|0,h|0,i|0,14,j|0);l=B;B=0;if(l&1)G=1;else{B=0;eb(503,b|0,1240,229);B=0;G=0}l=Rb()|0;o=Q;Yua(j);D=o;E=l;F=G}Yua(i);Yua(h);if(F){A=D;C=E}else{H=D;I=E;break a}}else{l=Rb()|0;A=Q;C=l}while(0);zb(b|0);H=A;I=C}else t=17;while(0);if((t|0)==17){e=Rb()|0;H=Q;I=e}k[g>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(c);Ava(d);vva(a);u=H;v=I;Qb(v|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}function eea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)==302){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,509,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function fea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function gea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=c+40|0;if((k[a>>2]|0)==300)return;f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);if((k[a>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,135039,653);return}function hea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function iea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131940,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function jea(a,b){a=a|0;b=b|0;return 0}function kea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131940,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,80,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function lea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0,o=0.0,q=0,s=0,t=0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){f=0;r=a;return f|0}g=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;k[e>>2]=0;h=Hc[k[(k[g>>2]|0)+164>>2]&511](g)|0;i=gq(g,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(g,e);l=+Dp(b,211);m=+Dp(b,210);b=ed[k[(k[g>>2]|0)+308>>2]&511](g,2)|0;n=Hc[k[(k[b>>2]|0)+8>>2]&511](b)|0;if((n|0)<(Hc[k[(k[b>>2]|0)+12>>2]&511](b)|0)){o=l/m;q=b+8|0;s=i+12|0;t=n;do{Fc[k[(k[b>>2]|0)+24>>2]&1023](b,t);rd[k[(k[g>>2]|0)+260>>2]&511](g,d,k[e>>2]|0,b);nd[k[(k[g>>2]|0)+336>>2]&1023](g,j,b);p[c>>3]=o*+p[q>>3]*+p[d>>3];ZX(j,1,h,1,c,1,1,0,j,1,h,0,k[s>>2]|0,1)|0;t=t+1|0}while((t|0)<(Hc[k[(k[b>>2]|0)+12>>2]&511](b)|0))}t=k[e>>2]|0;if(t)Tqa(t);k[e>>2]=0;Tqa(j);Ec[k[(k[b>>2]|0)+4>>2]&1023](b);ap(g);if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);f=i;r=a;return f|0}function mea(a,b){a=a|0;b=b|0;return 0}function nea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,131940,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,130,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function oea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,131940,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,133,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function pea(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,39);return}function qea(a,b){a=a|0;b=b|0;return}function rea(a){a=a|0;Sqa(a);return}function sea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,132040);if((k[d>>2]|0)==3){r=a;return}qoa(b,c,132071,510,738,0);if((k[d>>2]|0)!=4){r=a;return}Bma(b,510);r=a;return}function tea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+48|0;d=a+8|0;e=a;f=a+32|0;g=a+24|0;h=a+20|0;j=a+16|0;l=a+12|0;Fka(c,g,132040);if((k[g>>2]|0)==3){doa(c);k[e>>2]=137052;Ska(c,1,e);e=c+60|0;g=k[e>>2]|0;a:do if((g|0)>0){m=c+76|0;n=c+32|0;o=c+104|0;q=g;s=0;while(1){if(!(i[(k[n>>2]|0)+((k[(k[m>>2]|0)+((s<<2|2)<<2)>>2]|0)+-1)>>0]|0)){t=s+1|0;u=q}else{v=Qqa(48)|0;w=s+1|0;B=0;La(36,v|0,w+(k[o>>2]|0)|0,s|0,s|0,c|0,510);x=B;B=0;if(x&1){y=v;break}ih(b,v)|0;t=w;u=k[e>>2]|0}if((t|0)<(u|0)){q=u;s=t}else break a}s=Rb()|0;q=Q;Sqa(y);z=q;A=s;Qb(A|0)}while(0);k[d>>2]=137052;Lka(c,1,d)}k[j>>2]=0;k[l>>2]=0;Qka(c,j,h,0,134220);d=c+40|0;if((k[d>>2]|0)!=300)Qka(c,l,0,0,136615);y=k[h>>2]|0;if((y|0)<=0){C=k[j>>2]|0;Mka(c,C,134220);D=k[l>>2]|0;Mka(c,D,136615);r=a;return}t=c+36|0;u=c+100|0;e=f+4|0;g=c+104|0;s=y;y=0;q=0;b:while(1){o=q<<1;m=k[j>>2]|0;n=~~+p[m+(o<<3)>>3];w=n+-1|0;do if(!(k[(k[t>>2]|0)+(w<<2)>>2]|0)){E=s;F=y}else{if((k[d>>2]|0)!=300){v=k[l>>2]|0;if(!(+p[v+(w<<3)>>3]!=0.0)){E=s;F=y;break}x=m+((o|1)<<3)|0;if(+p[v+(~~+p[x>>3]+-1<<3)>>3]!=0.0)G=x;else{E=s;F=y;break}}else G=m+((o|1)<<3)|0;x=k[u>>2]|0;k[f>>2]=n+x;k[e>>2]=~~+p[G>>3]+x;x=Qqa(28)|0;v=y+1|0;B=0;ib(298,x|0,v+(k[g>>2]|0)|0,f|0,510);H=B;B=0;if(H&1){I=x;break b}ih(b,x)|0;E=k[h>>2]|0;F=v}while(0);q=q+1|0;if((q|0)>=(E|0)){J=15;break}else{s=E;y=F}}if((J|0)==15){C=k[j>>2]|0;Mka(c,C,134220);D=k[l>>2]|0;Mka(c,D,136615);r=a;return}a=Rb()|0;D=Q;Sqa(I);z=D;A=a;Qb(A|0)}function uea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;a=r;r=r+208|0;d=a+8|0;e=a;f=a+196|0;g=a+192|0;h=a+56|0;i=a+40|0;j=a+28|0;l=a+16|0;Fka(c,g,132040);m=k[g>>2]|0;n=k[c+40>>2]|0;if(!((m|0)==3&(n|0)==302)){if((n|0)==300)o=m;else{k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e);o=k[g>>2]|0}if((o|0)==3){hoa(b,c,510,739,534);k[d>>2]=136615;p=d+4|0;k[p>>2]=136636;Lka(c,2,d);r=a;return}else{hoa(b,c,510,738,534);k[d>>2]=136615;p=d+4|0;k[p>>2]=136636;Lka(c,2,d);r=a;return}}a=h+56|0;d=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;q=Q;s=c;vva(a);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){p=Rb()|0;t=Q;u=p}else{k[d>>2]=27560;p=h+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;o=Q;Yua(f);Yua(p);Ava(d);t=o;u=b;break}Yua(f);B=0;b=Ia(40,h|0,132101,25)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,i|0,132127,81);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,145111,11);g=B;B=0;if(g&1){g=Rb()|0;e=Q;Yua(i);v=e;w=g;break}B=0;wa(510,l|0,d|0);g=B;B=0;if(g&1){g=Rb()|0;x=Q;y=g;z=1}else{B=0;ua(163,b|0,i|0,j|0,103,l|0);g=B;B=0;if(g&1)A=1;else{B=0;eb(503,b|0,1240,229);B=0;A=0}g=Rb()|0;e=Q;Yua(l);x=e;y=g;z=A}Yua(j);Yua(i);if(z){v=x;w=y}else{C=x;D=y;k[h>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(p);Ava(d);vva(a);Qb(D|0)}}else{g=Rb()|0;v=Q;w=g}while(0);zb(b|0);C=v;D=w;k[h>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(p);Ava(d);vva(a);Qb(D|0)}o=Rb()|0;C=Q;D=o;k[h>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(p);Ava(d);vva(a);Qb(D|0)}while(0);q=t;s=u;vva(a);Qb(s|0)}function vea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function wea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;a=r;r=r+16|0;f=a;g=a+4|0;Fka(c,f,132040);zka(c,a+7|0,134866);zka(c,a+6|0,132209);zka(c,a+5|0,134882);zka(c,g,132238);h=(k[f>>2]|0)==3?739:738;j=c+56|0;l=k[j>>2]|0;if((l|0)>0){m=c+32|0;n=l;l=0;o=0;while(1){if(!(i[(k[m>>2]|0)+o>>0]|0)){p=n;q=l}else{s=qh(b,l)|0;Uc[k[(k[s>>2]|0)+480>>2]&63](s,o,c,d,e,h);p=k[j>>2]|0;q=l+1|0}o=o+1|0;if((o|0)>=(p|0))break;else{n=p;l=q}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,134962,928);Zka(c,b,134027,39);Zka(c,b,134069,40);Zka(c,b,135923,674);Zka(c,b,135944,677);if(!(i[g>>0]|0))Zka(c,b,134252,388);g=k[f>>2]|0;if((g|0)==3){Zka(c,b,132071,309);t=k[f>>2]|0}else t=g;if((t|0)==4)Zka(c,b,132071,309);if((k[c+40>>2]|0)==300){r=a;return}Zka(c,b,136615,287);Zka(c,b,136636,288);r=a;return}function xea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;d=e+4|0;a=e;k[a>>2]=0;YN(b,Ika(c,132257,99)|0);YN(b,Ika(c,132278,306)|0);YN(b,Ika(c,132309,305)|0);YN(b,Ika(c,132040,310)|0);YN(b,Ika(c,132349,307)|0);YN(b,Ika(c,132380,308)|0);Hka(c,a,d,132412);f=Qqa(12)|0;B=0;eb(518,f|0,312,k[d>>2]|0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Sqa(f);i=h;j=g;Qb(j|0)}YN(b,f);f=k[d>>2]|0;if(!f){l=0;Nka(c,a,l,132412);r=e;return}g=Qqa(16)|0;B=0;ib(294,g|0,313,k[a>>2]|0,f|0);f=B;B=0;if(f&1){f=Rb()|0;h=Q;Sqa(g);i=h;j=f;Qb(j|0)}else{YN(b,g);l=k[d>>2]|0;Nka(c,a,l,132412);r=e;return}}function yea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,132127,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,198,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function zea(a,b){a=a|0;b=b|0;return 0}function Aea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,132127,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,205,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Bea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(!($p(b)|0)){i=0;r=c;return i|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){i=0;r=c;return i|0}j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;switch(Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0){case 742:case 738:{l=Cea(a,j)|0;break}case 739:{l=Dea(a,j)|0;break}default:{a=e+56|0;m=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);Yua(q);Ava(m);s=v;t=u;break}Yua(d);B=0;u=Ia(40,e|0,132447,13)|0;v=B;B=0;if(((((!(v&1)?(B=0,v=ya(k[(k[b>>2]|0)+112>>2]|0,b|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=ya(427,v|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(w)|0,B=0,x=Ia(40,u|0,w|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,f|0,132127,81);x=B;B=0;do if(!(x&1)){B=0;eb(502,g|0,144189,13);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(f);y=u;z=w;break}B=0;wa(510,h|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,v|0,f|0,g|0,224,h|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,v|0,1240,229);B=0;E=0}w=Rb()|0;u=Q;Yua(h);A=u;C=w;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(v|0);F=y;G=z;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}while(0);o=s;p=t;vva(a);Qb(p|0)}}cp(b,d,298);if((k[d>>2]|0)!=300?(ap(j),(j|0)!=0):0)Ec[k[(k[j>>2]|0)+4>>2]&1023](j);i=l;r=c;return i|0}function Cea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0;a=r;r=r+448|0;c=a+432|0;d=a+428|0;e=a+424|0;f=a+64|0;g=a+56|0;h=a+48|0;i=a+40|0;j=a+32|0;l=a+16|0;m=a;n=a+420|0;o=a+272|0;q=a+408|0;s=a+256|0;t=a+108|0;u=a+120|0;v=a+96|0;w=a+84|0;x=a+72|0;if(!($p(b)|0)){y=0;r=a;return y|0}k[n>>2]=0;cp(b,e,298);switch(k[e>>2]|0){case 301:{z=1;break}case 300:{z=2;break}case 302:{z=2;break}default:{A=o+56|0;C=o+4|0;k[o>>2]=27524;k[A>>2]=27544;B=0;wa(508,o+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(A);Qb(F|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[A>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[C>>2]=27560;G=o+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(C);H=K;I=J;break}Yua(c);B=0;J=Ia(40,o|0,144639,5)|0;K=B;B=0;a:do if((((!(K&1)?(B=0,L=ya(427,k[e>>2]|0)|0,M=B,B=0,!(M&1)):0)?(M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,M=Ia(40,N|0,146481,18)|0,N=B,B=0,!(N&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,q|0,132127,81);N=B;B=0;do if(!(N&1)){B=0;eb(502,s|0,132461,15);L=B;B=0;if(L&1){L=Rb()|0;O=Q;Yua(q);P=L;R=O;break}B=0;wa(510,t|0,C|0);O=B;B=0;if(O&1){O=Rb()|0;S=O;T=Q;U=1}else{B=0;ua(163,M|0,q|0,s|0,251,t|0);O=B;B=0;if(O&1)V=1;else{B=0;eb(503,M|0,1240,229);B=0;V=0}O=Rb()|0;L=Q;Yua(t);S=O;T=L;U=V}Yua(s);Yua(q);if(U){P=S;R=T}else{W=T;X=S;break a}}else{L=Rb()|0;P=L;R=Q}while(0);zb(M|0);W=R;X=P}else Y=23;while(0);if((Y|0)==23){J=Rb()|0;W=Q;X=J}k[o>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(A);Z=W;_=X;Qb(_|0)}while(0);E=H;F=I;vva(A);Qb(F|0)}}F=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;A=gq(b,534)|0;I=Rqa(F>>>0>536870911?-1:F<<3)|0;H=ma(F,z)|0;E=H>>>0>536870911?-1:H<<3;H=Rqa(E)|0;X=Rqa(E)|0;E=ma(z,z)|0;W=E<<3;C=Rqa(W)|0;if(E)WEa(C|0,0,W|0)|0;Uo(b,n);pp(b,h,358);cp(b,e,298);cp(b,d,310);b:do if((k[e>>2]|0)==300){W=Wo(b,674)|0;ba=W;ca=Wo(b,677)|0}else switch(z|0){case 1:{ba=Wo(b,674)|0;ca=0;break b;break}case 2:{ba=Wo(b,673)|0;ca=Wo(b,676)|0;break b;break}default:{ba=0;ca=0;break b}}while(0);da=+Zc[k[(k[b>>2]|0)+72>>2]&255](b);e=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;W=Hc[k[(k[e>>2]|0)+8>>2]&511](e)|0;c:do if((W|0)<(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0)){E=(z|0)==2;o=e+8|0;P=A+12|0;R=m+8|0;S=C+(z+1<<3)|0;T=(z|0)==1;U=C+(z<<3)|0;q=C+8|0;ea=da*.5;fa=0.0;s=W;d:while(1){Fc[k[(k[e>>2]|0)+24>>2]&1023](e,s);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[n>>2]|0,e);nd[k[(k[b>>2]|0)+336>>2]&1023](b,I,e);nd[k[(k[ba>>2]|0)+48>>2]&1023](ba,i,e);rd[k[(k[ba>>2]|0)+60>>2]&511](ba,l,k[n>>2]|0,e);if(E){nd[k[(k[ca>>2]|0)+48>>2]&1023](ca,j,e);rd[k[(k[ca>>2]|0)+60>>2]&511](ca,m,k[n>>2]|0,e)}p[g>>3]=+p[o>>3]*+p[f>>3];ZX(I,1,F,1,g,1,1,0,I,1,F,0,k[P>>2]|0,1)|0;V=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;t=Rqa(V>>>0>536870911?-1:V<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,t,e);if((V|0)>0){D=0;do{ga=+p[t+(D<<3)>>3];J=0;do{K=H+((ma(J,V)|0)+D<<3)|0;p[K>>3]=ga;J=J+1|0}while((J|0)!=(z|0));D=D+1|0}while((D|0)!=(V|0))}Tqa(t);V=k[n>>2]|0;D=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;M=ma(D,z)|0;J=Rqa(M>>>0>536870911?-1:M<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,J,V,e);if((D|0)>0){V=0;do{M=0;do{K=(ma(M,D)|0)+V|0;p[X+(K<<3)>>3]=+p[J+(K<<3)>>3];M=M+1|0}while((M|0)!=(z|0));V=V+1|0}while((V|0)!=(D|0))}Tqa(J);ga=+p[l>>3];fa=E?+p[R>>3]:fa;ha=+p[h>>3]*+p[o>>3]*+p[f>>3];p[g>>3]=ha;p[C>>3]=ga*ha;if(E){p[S>>3]=fa*ha;ZX(H,2,F,1,C,2,2,0,H,2,F,0,k[P>>2]|0,1)|0;ha=+p[g>>3];p[C>>3]=ha*+p[i>>3];p[S>>3]=ha*+p[j>>3]}else{ZX(H,z,F,1,C,z,z,0,H,z,F,0,k[P>>2]|0,1)|0;p[C>>3]=+p[g>>3]*+p[i>>3]}ZX(H,z,F,1,C,z,z,0,X,z,F,0,k[P>>2]|0,1)|0;e:do switch(k[d>>2]|0){case 0:break;case 1:{Fc[k[(k[ba>>2]|0)+64>>2]&1023](ba,i);if(E){Fc[k[(k[ca>>2]|0)+64>>2]&1023](ca,j);ha=ea*+$(+(+p[i>>3]));p[C>>3]=ha;ha=ea*+$(+(+p[j>>3]));p[S>>3]=ha;break e}else{ha=ea*+$(+(+p[i>>3]));p[C>>3]=ha;break e}break}case 2:{ha=+p[i>>3];if(T){ga=ha*(ha*(da/((+$(+ha)+1.0e-08)*2.0)));p[C>>3]=ga;break e}else{ga=+p[j>>3];ia=da/((+aa(+(ha*ha+ga*ga))+1.0e-08)*2.0);ja=ha*ia;p[C>>3]=ha*ja;ka=ga*ia;p[U>>3]=ha*ka;p[q>>3]=ja*ga;p[S>>3]=ga*ka;break e}break}default:break d}while(0);if(((k[d>>2]|0)+-1|0)>>>0<2){ka=+p[g>>3];p[C>>3]=ka*+p[C>>3];if(!T){p[U>>3]=ka*+p[U>>3];p[q>>3]=ka*+p[q>>3];p[S>>3]=ka*+p[S>>3]}ZX(X,z,F,1,C,z,z,0,X,z,F,0,k[P>>2]|0,1)|0}s=s+1|0;if((s|0)>=(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0))break c}s=u+56|0;P=u+4|0;k[u>>2]=27524;k[s>>2]=27544;B=0;wa(508,u+56|0,P|0);S=B;B=0;if(S&1){S=Rb()|0;la=Q;na=S;vva(s);Qb(na|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[s>>2]=27488;B=0;va(448,P|0);S=B;B=0;do if(S&1){q=Rb()|0;oa=Q;pa=q}else{k[P>>2]=27560;q=u+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;T=Q;Yua(c);Yua(q);Ava(P);oa=T;pa=U;break}Yua(c);B=0;U=Ia(40,u|0,132477,14)|0;T=B;B=0;f:do if(((!(T&1)?(B=0,E=Xa(242,U|0,k[d>>2]|0)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Ia(40,E|0,146481,18)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,v|0,132127,81);E=B;B=0;do if(!(E&1)){B=0;eb(502,w|0,132461,15);R=B;B=0;if(R&1){R=Rb()|0;G=Q;Yua(v);qa=R;ra=G;break}B=0;wa(510,x|0,P|0);G=B;B=0;if(G&1){G=Rb()|0;sa=1;ta=Q;xa=G}else{B=0;ua(163,o|0,v|0,w|0,357,x|0);G=B;B=0;if(G&1)za=1;else{B=0;eb(503,o|0,1240,229);B=0;za=0}G=Rb()|0;R=Q;Yua(x);sa=za;ta=R;xa=G}Yua(w);Yua(v);if(sa){qa=xa;ra=ta}else{Aa=ta;Ba=xa;break f}}else{G=Rb()|0;qa=G;ra=Q}while(0);zb(o|0);Aa=ra;Ba=qa}else Y=78;while(0);if((Y|0)==78){U=Rb()|0;Aa=Q;Ba=U}k[u>>2]=27468;k[s>>2]=27488;k[P>>2]=27560;Yua(q);Ava(P);vva(s);Z=Aa;_=Ba;Qb(_|0)}while(0);la=oa;na=pa;vva(s);Qb(na|0)}while(0);na=k[n>>2]|0;if(na)Tqa(na);k[n>>2]=0;Tqa(I);Tqa(H);Tqa(X);Tqa(C);Ec[k[(k[e>>2]|0)+4>>2]&1023](e);y=A;r=a;return y|0}function Dea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0,F=0;a=r;r=r+80|0;c=a+76|0;d=a+64|0;e=a+56|0;f=a+48|0;g=a+40|0;h=a+32|0;i=a+72|0;j=a;if(!($p(b)|0)){l=0;r=a;return l|0}k[i>>2]=0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=gq(b,534)|0;o=Rqa(m>>>0>536870911?-1:m<<3)|0;q=m<<1;s=q>>>0>536870911?-1:q<<3;q=Rqa(s)|0;t=Rqa(s)|0;Uo(b,i);pp(b,f,358);cp(b,c,298);if((k[c>>2]|0)==300){c=Wo(b,674)|0;u=c;v=Wo(b,677)|0}else{c=Wo(b,673)|0;u=c;v=Wo(b,676)|0}c=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[c>>2]|0)+8>>2]&511](c)|0;if((s|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){w=c+8|0;x=n+12|0;y=j+8|0;z=j+24|0;A=s;do{Fc[k[(k[c>>2]|0)+24>>2]&1023](c,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[i>>2]|0,c);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,c);nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,c);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,c);p[e>>3]=+p[w>>3]*+p[d>>3];ZX(o,1,m,1,e,1,1,0,o,1,m,0,k[x>>2]|0,1)|0;s=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;B=Rqa(s>>>0>536870911?-1:s<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,B,c);if((s|0)>0){C=0;do{D=+p[B+(C<<3)>>3];p[t+(C<<3)>>3]=D;p[t+(s+C<<3)>>3]=D;C=C+1|0}while((C|0)!=(s|0))}Tqa(B);s=k[i>>2]|0;C=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;E=C<<1;F=Rqa(E>>>0>536870911?-1:E<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,F,s,c);if((C|0)>0){s=0;do{p[q+(s<<3)>>3]=+p[F+(s<<3)>>3];E=C+s|0;p[q+(E<<3)>>3]=+p[F+(E<<3)>>3];s=s+1|0}while((s|0)!=(C|0))}Tqa(F);D=-(+p[f>>3]*+p[w>>3]*+p[d>>3]);p[e>>3]=D;p[j>>3]=+p[g>>3]*D;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;p[z>>3]=+p[h>>3]*D;ZX(q,2,m,1,j,2,2,0,t,2,m,0,k[x>>2]|0,1)|0;A=A+1|0}while((A|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0))}A=k[i>>2]|0;if(A)Tqa(A);k[i>>2]=0;Tqa(o);Tqa(q);Tqa(t);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);l=n;r=a;return l|0}function Eea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;if(!($p(b)|0)){h=0;r=a;return h|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){h=0;r=a;return h|0}i=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;switch(Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0){case 742:case 738:{j=Fea(0,i)|0;break}case 739:{j=Gea(0,i)|0;break}default:{l=d+56|0;m=d+4|0;k[d>>2]=27524;k[l>>2]=27544;B=0;wa(508,d+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;u=Ia(40,d|0,132447,13)|0;v=B;B=0;if(((((!(v&1)?(B=0,v=ya(k[(k[b>>2]|0)+112>>2]|0,b|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=ya(427,v|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(w)|0,B=0,x=Ia(40,u|0,w|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,e|0,132127,81);x=B;B=0;do if(!(x&1)){B=0;eb(502,f|0,144203,13);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(e);y=u;z=w;break}B=0;wa(510,g|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,v|0,e|0,f|0,477,g|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,v|0,1240,229);B=0;E=0}w=Rb()|0;u=Q;Yua(g);A=u;C=w;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(v|0);F=y;G=z;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}}cp(b,c,298);if((k[c>>2]|0)!=300?(ap(i),(i|0)!=0):0)Ec[k[(k[i>>2]|0)+4>>2]&1023](i);h=j;r=a;return h|0}function Fea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0;a=r;r=r+64|0;c=a+48|0;d=a+40|0;e=a+32|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+56|0;if(!($p(b)|0)){l=0;r=a;return l|0}k[j>>2]=0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=iq(b,534)|0;o=Rqa(m>>>0>536870911?-1:m<<3)|0;Uo(b,j);pp(b,d,358);q=Wo(b,39)|0;s=Wo(b,40)|0;t=Wo(b,928)|0;u=Wo(b,388)|0;v=Wo(b,353)|0;w=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;a:do if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=w+8|0;z=n+4|0;if((m|0)>0)A=x;else{B=x;while(1){Fc[k[(k[w>>2]|0)+24>>2]&1023](w,B);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[j>>2]|0,w);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,w);nd[k[(k[u>>2]|0)+48>>2]&1023](u,e,w);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,i,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,w);B=B+1|0;if((B|0)>=(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))break a}}do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[j>>2]|0,w);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,w);nd[k[(k[u>>2]|0)+48>>2]&1023](u,e,w);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,i,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,w);C=+p[i>>3]>0.0?+p[f>>3]:+p[g>>3];B=k[z>>2]|0;D=0;do{E=B+(D<<3)|0;p[E>>3]=+p[E>>3]+ +p[o+(D<<3)>>3]*(+p[c>>3]*+p[y>>3]*(+p[h>>3]+ +p[d>>3]*(+p[e>>3]-C)));D=D+1|0}while((D|0)!=(m|0));A=A+1|0}while((A|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}while(0);A=k[j>>2]|0;if(A)Tqa(A);k[j>>2]=0;Tqa(o);Ec[k[(k[w>>2]|0)+4>>2]&1023](w);l=n;r=a;return l|0}function Gea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0;a=r;r=r+64|0;c=a+48|0;d=a+40|0;e=a+32|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+56|0;if(!($p(b)|0)){l=0;r=a;return l|0}k[j>>2]=0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=iq(b,534)|0;o=Rqa(m>>>0>536870911?-1:m<<3)|0;Uo(b,j);pp(b,d,358);q=Wo(b,39)|0;s=Wo(b,40)|0;t=Wo(b,388)|0;u=Wo(b,928)|0;v=Wo(b,353)|0;w=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;a:do if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){y=w+8|0;z=n+4|0;if((m|0)>0)A=x;else{B=x;while(1){Fc[k[(k[w>>2]|0)+24>>2]&1023](w,B);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[j>>2]|0,w);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,e,w);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,w);nd[k[(k[u>>2]|0)+48>>2]&1023](u,i,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,w);B=B+1|0;if((B|0)>=(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))break a}}do{Fc[k[(k[w>>2]|0)+24>>2]&1023](w,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[j>>2]|0,w);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,w);nd[k[(k[t>>2]|0)+48>>2]&1023](t,e,w);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,w);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,w);nd[k[(k[u>>2]|0)+48>>2]&1023](u,i,w);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,w);C=+p[i>>3]>0.0?+p[f>>3]:+p[g>>3];B=k[z>>2]|0;D=0;do{E=B+(D<<3)|0;p[E>>3]=+p[E>>3]+ +p[o+(D<<3)>>3]*(+p[c>>3]*+p[y>>3]*(+p[h>>3]+ +p[d>>3]*(+p[e>>3]-C)));D=D+1|0}while((D|0)!=(m|0));A=A+1|0}while((A|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))}while(0);A=k[j>>2]|0;if(A)Tqa(A);k[j>>2]=0;Tqa(o);Ec[k[(k[w>>2]|0)+4>>2]&1023](w);l=n;r=a;return l|0}function Hea(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,353);return}function Iea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,132127,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,648,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Jea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0.0,P=0,R=0.0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0.0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0;a=r;r=r+560|0;d=a+540|0;e=a+536|0;f=a+532|0;g=a+528|0;h=a;i=a+368|0;j=a+516|0;l=a+504|0;m=a+216|0;n=a+232|0;o=a+68|0;q=a+56|0;s=a+44|0;u=a+80|0;v=a+32|0;w=a+20|0;x=a+8|0;k[g>>2]=0;cp(c,f,298);do if((k[f>>2]|0)!=300)if(Hc[k[(k[c>>2]|0)+248>>2]&511](c)|0){y=Hc[k[(k[c>>2]|0)+432>>2]&511](c)|0;break}else{r=a;return}else y=c;while(0);z=Hc[k[(k[y>>2]|0)+164>>2]&511](y)|0;rp(y,g,534,943);A=z>>>0>536870911?-1:z<<3;C=Rqa(A)|0;D=Rqa(A)|0;E=Rqa(A)|0;F=Rqa(A)|0;G=Rqa(A)|0;H=Rqa(A)|0;I=Rqa(A)|0;J=Rqa(A)|0;K=Rqa(A)|0;pp(y,h,307);A=(z|0)>0;do if(A){L=k[g>>2]|0;M=+p[h>>3];N=0;while(1){O=+p[b+(k[L+(N<<2)>>2]<<3)>>3];P=C+(N<<3)|0;p[P>>3]=O;R=+$(+O);p[t>>3]=R;S=k[t>>2]|0;T=k[t+4>>2]|0;if(T>>>0>2146435072|(T|0)==2146435072&S>>>0>0){U=7;break}if((S|0)==0&(T|0)==2146435072){U=31;break}if(O<M)p[P>>3]=M;N=N+1|0;if((N|0)>=(z|0)){U=57;break}}if((U|0)==7){N=i+56|0;L=i+4|0;k[i>>2]=27524;k[N>>2]=27544;B=0;wa(508,i+56|0,L|0);P=B;B=0;if(P&1){P=Rb()|0;V=Q;W=P;vva(N);Qb(W|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[N>>2]=27488;B=0;va(448,L|0);P=B;B=0;do if(P&1){T=Rb()|0;X=Q;Y=T}else{k[L>>2]=27560;T=i+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,L|0,d|0);S=B;B=0;if(S&1){S=Rb()|0;Z=Q;Yua(d);Yua(T);Ava(L);X=Z;Y=S;break}Yua(d);B=0;S=Ia(40,i|0,135564,28)|0;Z=B;B=0;a:do if(!(Z&1)?(B=0,Xa(239,S|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,j|0,132127,81);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,l|0,137199,23);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(j);da=ca;ea=ba;break}B=0;wa(510,m|0,L|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=ba;ga=Q;ha=1}else{B=0;ua(163,_|0,j|0,l|0,685,m|0);ba=B;B=0;if(ba&1)ia=1;else{B=0;eb(503,_|0,1240,229);B=0;ia=0}ba=Rb()|0;ca=Q;Yua(m);fa=ba;ga=ca;ha=ia}Yua(l);Yua(j);if(ha){da=ga;ea=fa}else{ja=ga;ka=fa;break a}}else{ca=Rb()|0;da=Q;ea=ca}while(0);zb(_|0);ja=da;ka=ea}else U=22;while(0);if((U|0)==22){S=Rb()|0;ja=Q;ka=S}k[i>>2]=27468;k[N>>2]=27488;k[L>>2]=27560;Yua(T);Ava(L);vva(N);la=ja;ma=ka;Qb(ma|0)}while(0);V=X;W=Y;vva(N);Qb(W|0)}else if((U|0)==31){L=n+56|0;P=n+4|0;k[n>>2]=27524;k[L>>2]=27544;B=0;wa(508,n+56|0,P|0);S=B;B=0;if(S&1){S=Rb()|0;na=Q;oa=S;vva(L);Qb(oa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[L>>2]=27488;B=0;va(448,P|0);S=B;B=0;do if(S&1){Z=Rb()|0;pa=Q;qa=Z}else{k[P>>2]=27560;Z=n+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,P|0,d|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ca=Q;Yua(d);Yua(Z);Ava(P);pa=ca;qa=aa;break}Yua(d);B=0;aa=Ia(40,n|0,135593,28)|0;ca=B;B=0;b:do if(!(ca&1)?(B=0,Xa(239,aa|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,o|0,132127,81);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,q|0,137199,23);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(o);xa=sa;za=ta;break}B=0;wa(510,s|0,P|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Aa=1;Ba=Q;Ca=ta}else{B=0;ua(163,ba|0,o|0,q|0,686,s|0);ta=B;B=0;if(ta&1)Da=1;else{B=0;eb(503,ba|0,1240,229);B=0;Da=0}ta=Rb()|0;sa=Q;Yua(s);Aa=Da;Ba=sa;Ca=ta}Yua(q);Yua(o);if(Aa){xa=Ca;za=Ba}else{Ea=Ba;Fa=Ca;break b}}else{ta=Rb()|0;xa=ta;za=Q}while(0);zb(ba|0);Ea=za;Fa=xa}else U=46;while(0);if((U|0)==46){aa=Rb()|0;Ea=Q;Fa=aa}k[n>>2]=27468;k[L>>2]=27488;k[P>>2]=27560;Yua(Z);Ava(P);vva(L);la=Ea;ma=Fa;Qb(ma|0)}while(0);na=pa;oa=qa;vva(L);Qb(oa|0)}else if((U|0)==57){vp(y,H,64);vp(y,I,339);vp(y,G,353);vp(y,J,928);vp(y,K,999);if(A)Ga=0;else break;do{p[D+(Ga<<3)>>3]=+p[C+(Ga<<3)>>3]-+p[G+(Ga<<3)>>3];Ga=Ga+1|0}while((Ga|0)!=(z|0))}}else{vp(y,H,64);vp(y,I,339);vp(y,G,353);vp(y,J,928);vp(y,K,999)}while(0);cp(y,e,305);M=+Dp(y,265);O=+Dp(y,266);c:do if(A){Ga=k[e>>2]|0;R=M/O;Ha=1.0-R;Ja=-M/O;if((Ga|0)==914){oa=0;while(1){if(+p[J+(oa<<3)>>3]>0.0){Ka=+p[H+(oa<<3)>>3];La=Ka;Ma=Ka+ +p[C+(oa<<3)>>3]}else{Ka=+p[C+(oa<<3)>>3];Na=+p[K+(oa<<3)>>3];La=Ja*Ka+Na;Ma=Ha*Ka+Na}p[F+(oa<<3)>>3]=Ma;p[E+(oa<<3)>>3]=La;oa=oa+1|0;if((oa|0)==(z|0))break c}}oa=(Ga|0)==915;qa=0;while(1){if(+p[J+(qa<<3)>>3]>0.0){Ja=+p[H+(qa<<3)>>3];p[F+(qa<<3)>>3]=Ja+ +p[C+(qa<<3)>>3];p[E+(qa<<3)>>3]=Ja}else{if(!oa)break;Ja=+p[C+(qa<<3)>>3]-+p[G+(qa<<3)>>3];Na=+p[K+(qa<<3)>>3];p[F+(qa<<3)>>3]=Na+(+p[I+(qa<<3)>>3]+Ha*Ja);p[E+(qa<<3)>>3]=Na+(+p[H+(qa<<3)>>3]-R*Ja)}qa=qa+1|0;if((qa|0)>=(z|0))break c}qa=u+56|0;oa=u+4|0;k[u>>2]=27524;k[qa>>2]=27544;B=0;wa(508,u+56|0,oa|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Oa=Q;Pa=Ga;vva(qa);Qb(Pa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[qa>>2]=27488;B=0;va(448,oa|0);Ga=B;B=0;do if(Ga&1){pa=Rb()|0;Qa=Q;Ra=pa}else{k[oa>>2]=27560;pa=u+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,oa|0,d|0);na=B;B=0;if(na&1){na=Rb()|0;Fa=Q;Yua(d);Yua(pa);Ava(oa);Qa=Fa;Ra=na;break}Yua(d);B=0;na=Ia(40,u|0,132492,23)|0;Fa=B;B=0;d:do if((((((!(Fa&1)?(B=0,Ea=Xa(242,na|0,k[e>>2]|0)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Ia(40,Ea|0,144166,2)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Ea=ya(427,k[e>>2]|0)|0,xa=B,B=0,!(xa&1)):0)?(xa=Lta(Ea)|0,B=0,za=Ia(40,n|0,Ea|0,xa|0)|0,xa=B,B=0,!(xa&1)):0)?(B=0,xa=Ia(40,za|0,144169,19)|0,za=B,B=0,!(za&1)):0)?(B=0,Xa(239,xa|0,0)|0,xa=B,B=0,!(xa&1)):0){xa=Ab(20)|0;B=0;eb(502,v|0,132127,81);za=B;B=0;do if(!(za&1)){B=0;eb(502,w|0,137199,23);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;n=Q;Yua(v);Sa=Ea;Ta=n;break}B=0;wa(510,x|0,oa|0);n=B;B=0;if(n&1){n=Rb()|0;Ua=1;Va=Q;Wa=n}else{B=0;ua(163,xa|0,v|0,w|0,720,x|0);n=B;B=0;if(n&1)Ya=1;else{B=0;eb(503,xa|0,1240,229);B=0;Ya=0}n=Rb()|0;Ea=Q;Yua(x);Ua=Ya;Va=Ea;Wa=n}Yua(w);Yua(v);if(Ua){Sa=Wa;Ta=Va}else{Za=Va;_a=Wa;break d}}else{n=Rb()|0;Sa=n;Ta=Q}while(0);zb(xa|0);Za=Ta;_a=Sa}else U=91;while(0);if((U|0)==91){na=Rb()|0;Za=Q;_a=na}k[u>>2]=27468;k[qa>>2]=27488;k[oa>>2]=27560;Yua(pa);Ava(oa);vva(qa);la=Za;ma=_a;Qb(ma|0)}while(0);Oa=Qa;Pa=Ra;vva(qa);Qb(Pa|0)}while(0);rd[k[(k[c>>2]|0)+44>>2]&511](c,353,C,738);rd[k[(k[c>>2]|0)+44>>2]&511](c,1001,D,738);rd[k[(k[c>>2]|0)+44>>2]&511](c,339,F,738);rd[k[(k[c>>2]|0)+44>>2]&511](c,64,E,738);Tqa(C);Tqa(E);Tqa(F);Tqa(G);Tqa(D);Tqa(H);Tqa(I);Tqa(J);Tqa(K);K=k[g>>2]|0;if(K)Tqa(K);k[g>>2]=0;if((k[f>>2]|0)==300){r=a;return}ap(y);if(!y){r=a;return}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=a;return}function Kea(a,b){a=a|0;b=b|0;RZ(b);return}function Lea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=gq(b,534)|0;j=h<<1;l=j>>>0>536870911?-1:j<<3;j=Rqa(l)|0;m=Rqa(l)|0;l=Rqa(32)|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[l+16>>2]=0;k[l+20>>2]=0;k[l+24>>2]=0;k[l+28>>2]=0;Uo(b,f);n=Wo(b,674)|0;o=Wo(b,677)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=q+8|0;u=l+24|0;v=i+12|0;w=s;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[f>>2]|0,q);s=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;x=Rqa(s>>>0>536870911?-1:s<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,x,q);if((s|0)>0){y=0;do{z=+p[x+(y<<3)>>3];p[j+(y<<3)>>3]=z;p[j+(s+y<<3)>>3]=z;y=y+1|0}while((y|0)!=(s|0))}Tqa(x);s=k[f>>2]|0;y=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;A=y<<1;B=Rqa(A>>>0>536870911?-1:A<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,B,s,q);if((y|0)>0){s=0;do{p[m+(s<<3)>>3]=+p[B+(s<<3)>>3];A=y+s|0;p[m+(A<<3)>>3]=+p[B+(A<<3)>>3];s=s+1|0}while((s|0)!=(y|0))}Tqa(B);nd[k[(k[n>>2]|0)+48>>2]&1023](n,d,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,e,q);z=+p[c>>3];p[l>>3]=-(+p[t>>3]*+p[d>>3]*z);p[u>>3]=-(+p[t>>3]*+p[e>>3]*z);ZX(j,2,h,1,l,2,2,0,m,2,h,0,k[v>>2]|0,1)|0;w=w+1|0}while((w|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}w=k[f>>2]|0;if(w)Tqa(w);k[f>>2]=0;Tqa(j);Tqa(m);Tqa(l);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);g=i;r=a;return g|0}function Mea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;if(!($p(b)|0)){f=0;r=a;return f|0}k[e>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=gq(b,534)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;Uo(b,e);j=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;l=Hc[k[(k[j>>2]|0)+8>>2]&511](j)|0;if((l|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0)){m=j+8|0;n=h+12|0;o=l;do{Fc[k[(k[j>>2]|0)+24>>2]&1023](j,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[e>>2]|0,j);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,j);p[c>>3]=+p[m>>3]*+p[d>>3];ZX(i,1,g,1,c,1,1,0,i,1,g,0,k[n>>2]|0,1)|0;o=o+1|0}while((o|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0))}o=k[e>>2]|0;if(o)Tqa(o);k[e>>2]=0;Tqa(i);Ec[k[(k[j>>2]|0)+4>>2]&1023](j);f=h;r=a;return f|0}function Nea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;a=r;r=r+16|0;e=a+4|0;f=a;k[e>>2]=0;k[f>>2]=0;loa(e,f,0,0,d);g=d+20|0;if((th(k[g>>2]|0)|0)>0){d=0;do{h=Lea(0,qh(k[g>>2]|0,d)|0)|0;if(h){IN(h,k[e>>2]|0,k[f>>2]|0);HN(h);Sqa(h)}d=d+1|0}while((d|0)<(th(k[g>>2]|0)|0))}g=k[e>>2]|0;if(k[g>>2]|0){d=k[k[g+4>>2]>>2]|0;Ec[k[(k[d>>2]|0)+12>>2]&1023](d)}d=k[f>>2]|0;if(!(k[d>>2]|0))i=d;else{g=k[k[d+4>>2]>>2]|0;Ec[k[(k[g>>2]|0)+12>>2]&1023](g);i=k[f>>2]|0}k[b>>2]=k[e>>2];if(c){k[c>>2]=i;r=a;return}if(!i){r=a;return}if((k[i>>2]|0)!=0?(c=k[i+4>>2]|0,(c|0)!=0):0){e=k[c>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(c)}Sqa(i);r=a;return}function Oea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;a=r;r=r+16|0;d=a;cO(k[c+44>>2]|0,d,478);e=c+24|0;f=en(k[e>>2]|0,k[d>>2]|0,937)|0;g=fn(k[e>>2]|0,k[d>>2]|0,937)|0;d=Qqa(8)|0;B=0;va(485,d|0);e=B;B=0;a:do if(!(e&1)){do if(k[d>>2]|0){B=0;h=ya(423,4)|0;i=B;B=0;if(i&1)break a;B=0;eb(525,h|0,g|0,f|0);i=B;B=0;if(!(i&1)){k[d+4>>2]=h;break}i=Rb()|0;j=Q;Sqa(h);l=j;m=i;Sqa(d);Qb(m|0)}while(0);i=c+20|0;if((th(k[i>>2]|0)|0)>0){j=0;do{h=Mea(0,qh(k[i>>2]|0,j)|0)|0;if(h){LN(h);KN(h,d);HN(h);Sqa(h)}j=j+1|0}while((j|0)<(th(k[i>>2]|0)|0))}if(!(k[d>>2]|0)){k[b>>2]=d;r=a;return}i=k[k[d+4>>2]>>2]|0;Ec[k[(k[i>>2]|0)+12>>2]&1023](i);k[b>>2]=d;r=a;return}while(0);a=Rb()|0;l=Q;m=a;Sqa(d);Qb(m|0)}function Pea(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a=r;r=r+16|0;d=a;k[d>>2]=0;loa(d,0,0,0,c);e=c+20|0;if((th(k[e>>2]|0)|0)>0){c=0;do{f=Mea(0,qh(k[e>>2]|0,c)|0)|0;if(f){JN(f,k[d>>2]|0);HN(f);Sqa(f)}c=c+1|0}while((c|0)<(th(k[e>>2]|0)|0))}e=k[d>>2]|0;if(!(k[e>>2]|0)){g=e;k[b>>2]=g;r=a;return}else{c=k[k[e+4>>2]>>2]|0;Ec[k[(k[c>>2]|0)+12>>2]&1023](c);g=k[d>>2]|0;k[b>>2]=g;r=a;return}}function Qea(a){a=a|0;Sqa(a);return}function Rea(a,b,c){a=a|0;b=b|0;c=c|0;return}function Sea(a,b,c){a=a|0;b=b|0;c=c|0;return}function Tea(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,382,738,534);return}function Uea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Vea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;a=r;r=r+208|0;f=a+180|0;g=a+176|0;h=a+194|0;j=a+193|0;l=a+192|0;m=a+40|0;n=a+24|0;o=a+12|0;p=a;q=c+56|0;s=k[q>>2]|0;if((s|0)>0){t=c+32|0;u=s;s=0;v=0;while(1){if(!(i[(k[t>>2]|0)+v>>0]|0)){w=u;x=s}else{y=qh(b,s)|0;Uc[k[(k[y>>2]|0)+480>>2]&63](y,v,c,d,e,738);w=k[q>>2]|0;x=s+1|0}v=v+1|0;if((v|0)>=(w|0))break;else{u=w;s=x}}}Fka(c,g,134789);switch(k[g>>2]|0){case 387:{Yka(c,b,134252,388,0.0);r=a;return}case 389:{Zka(c,b,132530,391);Zka(c,b,132540,392);Zka(c,b,132549,393);Zka(c,b,132562,394);Zka(c,b,132575,395);Zka(c,b,132584,397);Zka(c,b,132596,398);Zka(c,b,132608,408);Zka(c,b,132620,409);Zka(c,b,132633,410);Zka(c,b,132646,411);Zka(c,b,132656,412);Zka(c,b,132668,413);Zka(c,b,132680,399);Zka(c,b,132693,400);Zka(c,b,132702,401);Zka(c,b,132712,402);r=a;return}case 438:{zka(c,h,132722);zka(c,j,132740);Zka(c,b,134812,347);Zka(c,b,132756,450);Zka(c,b,132767,451);if(!((i[j>>0]|i[h>>0])<<24>>24)){Zka(c,b,132892,448);Zka(c,b,132913,460);r=a;return}else{Zka(c,b,132778,447);Zka(c,b,132802,446);Zka(c,b,132833,444);Zka(c,b,132866,445);r=a;return}break}case 457:{zka(c,j,132740);zka(c,l,132940);Zka(c,b,134812,347);Zka(c,b,132756,450);Zka(c,b,132767,451);if(!(i[l>>0]|0)){r=a;return}Zka(c,b,132802,446);Zka(c,b,132833,444);r=a;return}case 459:{Zka(c,b,132956,461);Zka(c,b,132968,462);Zka(c,b,132982,463);Zka(c,b,132995,464);r=a;return}case 465:{Yka(c,b,132968,462,0.0);r=a;return}case 466:{Yka(c,b,133008,467,0.0);Yka(c,b,133028,468,0.0);Yka(c,b,133047,469,0.0);r=a;return}case 470:{Yka(c,b,133008,467,0.0);Yka(c,b,133028,468,0.0);Yka(c,b,133061,471,0.0);Yka(c,b,133073,472,0.0);r=a;return}default:{a=m+56|0;b=m+4|0;k[m>>2]=27524;k[a>>2]=27544;B=0;wa(508,m+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;z=Q;A=c;vva(a);Qb(A|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){l=Rb()|0;C=Q;D=l}else{k[b>>2]=27560;l=m+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);j=B;B=0;if(j&1){j=Rb()|0;h=Q;Yua(f);Yua(l);Ava(b);C=h;D=j;break}Yua(f);B=0;j=Ia(40,m|0,133089,27)|0;h=B;B=0;if((((!(h&1)?(B=0,h=ya(427,k[g>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(h)|0,B=0,s=Ia(40,j|0,h|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,s|0,146481,18)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,n|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,o|0,136133,14);h=B;B=0;if(h&1){h=Rb()|0;j=Q;Yua(n);E=j;F=h;break}B=0;wa(510,p|0,b|0);h=B;B=0;if(h&1){h=Rb()|0;G=Q;H=h;I=1}else{B=0;ua(163,x|0,n|0,o|0,111,p|0);h=B;B=0;if(h&1)J=1;else{B=0;eb(503,x|0,1240,229);B=0;J=0}h=Rb()|0;j=Q;Yua(p);G=j;H=h;I=J}Yua(o);Yua(n);if(I){E=G;F=H}else{K=G;L=H;k[m>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(a);Qb(L|0)}}else{h=Rb()|0;E=Q;F=h}while(0);zb(x|0);K=E;L=F;k[m>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(a);Qb(L|0)}s=Rb()|0;K=Q;L=s;k[m>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(a);Qb(L|0)}while(0);z=C;A=D;vva(a);Qb(A|0)}}}function Wea(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;e=r;r=r+224|0;d=e+200|0;a=e+196|0;f=e+192|0;g=e+215|0;h=e+214|0;j=e+213|0;l=e+212|0;m=e+188|0;n=e+184|0;o=e+180|0;p=e+176|0;q=e+40|0;s=e+24|0;t=e+12|0;u=e;k[f>>2]=0;k[n>>2]=0;YN(b,Ika(c,134789,381)|0);Fka(c,m,134789);zka(c,l,133189);a:do switch(k[m>>2]|0){case 470:case 466:case 465:case 459:case 387:break;case 389:{YN(b,Ika(c,133221,405)|0);YN(b,Ika(c,133233,406)|0);YN(b,Ika(c,133246,407)|0);YN(b,Ika(c,133260,414)|0);YN(b,Ika(c,133278,417)|0);YN(b,Ika(c,133293,418)|0);YN(b,Ika(c,133306,419)|0);YN(b,Ika(c,133319,420)|0);YN(b,Ika(c,133328,415)|0);YN(b,Ika(c,133341,416)|0);YN(b,Ika(c,133353,403)|0);YN(b,Ika(c,133363,430)|0);YN(b,Ika(c,133384,431)|0);YN(b,Ika(c,133400,432)|0);YN(b,Ika(c,133419,433)|0);YN(b,Ika(c,133436,434)|0);YN(b,Ika(c,133458,435)|0);YN(b,Ika(c,133472,436)|0);YN(b,Ika(c,133495,437)|0);YN(b,Ika(c,133518,390)|0);break}case 438:{YN(b,Ika(c,132722,441)|0);YN(b,Ika(c,132740,442)|0);YN(b,Ika(c,133544,449)|0);YN(b,Ika(c,133558,452)|0);YN(b,Ika(c,133571,453)|0);zka(c,g,132722);zka(c,h,132740);do if(i[h>>0]|0){Qka(c,n,o,p,133587);v=Qqa(24)|0;w=k[n>>2]|0;x=k[p>>2]|0;B=0;La(38,v|0,454,w|0,w+(x<<3)|0,(i[l>>0]|0)!=0|0,x|0);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Sqa(v);y=w;z=x;Qb(z|0)}YN(b,v);Mka(c,k[n>>2]|0,133587);Qka(c,n,o,p,133599);v=Qqa(24)|0;x=k[n>>2]|0;w=k[p>>2]|0;B=0;La(38,v|0,455,x|0,x+(w<<3)|0,(i[l>>0]|0)!=0|0,w|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Sqa(v);y=x;z=w;Qb(z|0)}YN(b,v);Mka(c,k[n>>2]|0,133599);Qka(c,n,o,p,133612);v=Qqa(24)|0;w=k[n>>2]|0;x=k[p>>2]|0;B=0;La(38,v|0,456,w|0,w+(x<<3)|0,(i[l>>0]|0)!=0|0,x|0);x=B;B=0;if(!(x&1)){YN(b,v);Mka(c,k[n>>2]|0,133612);break}x=Rb()|0;w=Q;Sqa(v);y=w;z=x;Qb(z|0)}while(0);if(i[g>>0]|0){Qka(c,n,o,p,133626);x=Qqa(24)|0;w=k[n>>2]|0;v=k[p>>2]|0;B=0;La(38,x|0,439,w|0,w+(v<<3)|0,(i[l>>0]|0)!=0|0,v|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Sqa(x);y=w;z=v;Qb(z|0)}YN(b,x);Mka(c,k[n>>2]|0,133626);Qka(c,n,o,p,133642);x=Qqa(24)|0;v=k[n>>2]|0;w=k[p>>2]|0;B=0;La(38,x|0,440,v|0,v+(w<<3)|0,(i[l>>0]|0)!=0|0,w|0);w=B;B=0;if(!(w&1)){YN(b,x);Mka(c,k[n>>2]|0,133642);break a}w=Rb()|0;v=Q;Sqa(x);y=v;z=w;Qb(z|0)}break}case 457:{YN(b,Ika(c,132740,442)|0);YN(b,Ika(c,132940,443)|0);YN(b,Ika(c,133544,449)|0);YN(b,Ika(c,133558,452)|0);YN(b,Ika(c,133571,453)|0);zka(c,h,132740);zka(c,j,132940);if(i[j>>0]|0){Qka(c,n,o,p,133626);w=Qqa(24)|0;v=k[n>>2]|0;x=k[p>>2]|0;B=0;La(38,w|0,439,v|0,v+(x<<3)|0,(i[l>>0]|0)!=0|0,x|0);x=B;B=0;if(!(x&1)){YN(b,w);Mka(c,k[n>>2]|0,133626);YN(b,Ika(c,133666,458)|0);break a}x=Rb()|0;v=Q;Sqa(w);y=v;z=x;Qb(z|0)}break}default:{x=q+56|0;v=q+4|0;k[q>>2]=27524;k[x>>2]=27544;B=0;wa(508,q+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;vva(x);Qb(C|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[x>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){D=Rb()|0;E=Q;F=D}else{k[v>>2]=27560;D=q+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[q+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(d);Yua(D);Ava(v);E=H;F=G;break}Yua(d);B=0;G=Ia(40,q|0,133089,27)|0;H=B;B=0;b:do if((((!(H&1)?(B=0,I=ya(427,k[m>>2]|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,G|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,146481,18)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,s|0,133117,71);K=B;B=0;do if(!(K&1)){B=0;eb(502,t|0,136199,16);I=B;B=0;if(I&1){I=Rb()|0;L=Q;Yua(s);M=L;N=I;break}B=0;wa(510,u|0,v|0);I=B;B=0;if(I&1){I=Rb()|0;O=Q;P=I;R=1}else{B=0;ua(163,J|0,s|0,t|0,218,u|0);I=B;B=0;if(I&1)S=1;else{B=0;eb(503,J|0,1240,229);B=0;S=0}I=Rb()|0;L=Q;Yua(u);O=L;P=I;R=S}Yua(t);Yua(s);if(R){M=O;N=P}else{T=O;U=P;break b}}else{I=Rb()|0;M=Q;N=I}while(0);zb(J|0);T=M;U=N}else V=39;while(0);if((V|0)==39){G=Rb()|0;T=Q;U=G}k[q>>2]=27468;k[x>>2]=27488;k[v>>2]=27560;Yua(D);Ava(v);vva(x);y=T;z=U;Qb(z|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}}while(0);Hka(c,f,a,133681);C=Qqa(12)|0;B=0;eb(518,C|0,384,k[a>>2]|0);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Sqa(C);y=E;z=F;Qb(z|0)}YN(b,C);C=k[a>>2]|0;if(!C){W=0;Nka(c,f,W,133681);r=e;return}F=Qqa(16)|0;B=0;ib(294,F|0,385,k[f>>2]|0,C|0);C=B;B=0;if(C&1){C=Rb()|0;E=Q;Sqa(F);y=E;z=C;Qb(z|0)}else{YN(b,F);W=k[a>>2]|0;Nka(c,f,W,133681);r=e;return}}function Xea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0;a=r;r=r+1552|0;c=a+1532|0;d=a+1492|0;e=a+1546|0;f=a+1545|0;g=a+1344|0;h=a+1520|0;j=a+1192|0;l=a+1508|0;m=a+1056|0;n=a+1496|0;o=a+1544|0;p=a+904|0;q=a+1480|0;s=a+752|0;t=a+1328|0;u=a+616|0;v=a+1040|0;w=a+464|0;x=a+888|0;y=a+328|0;z=a+600|0;A=a+192|0;C=a+176|0;D=a+40|0;E=a+24|0;F=a+12|0;G=a;H=b+44|0;cO(k[H>>2]|0,d,381);switch(k[d>>2]|0){case 389:{ZZ(b);r=a;return}case 438:{bO(k[H>>2]|0,e,441);bO(k[H>>2]|0,f,442);if(i[e>>0]|0){a:do if(CY()|0){e=g+56|0;I=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(e);Qb(L|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[I>>2]=27560;M=g+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(c);Yua(M);Ava(I);N=R;O=P;break}Yua(c);B=0;Ia(40,g|0,133706,40)|0;P=B;B=0;do if(!(P&1)?(B=0,wa(510,h|0,I|0),R=B,B=0,!(R&1)):0){B=0;ya(425,h|0)|0;R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(h);T=S;U=R;break}else{Yua(h);k[g>>2]=27468;k[e>>2]=27488;k[I>>2]=27560;Yua(M);Ava(I);vva(e);break a}}else V=17;while(0);if((V|0)==17){P=Rb()|0;T=Q;U=P}k[g>>2]=27468;k[e>>2]=27488;k[I>>2]=27560;Yua(M);Ava(I);vva(e);W=T;X=U;Qb(X|0)}while(0);K=N;L=O;vva(e);Qb(L|0)}while(0);Doa(b)}if(i[f>>0]|0){b:do if(CY()|0){f=j+56|0;L=j+4|0;k[j>>2]=27524;k[f>>2]=27544;B=0;wa(508,j+56|0,L|0);O=B;B=0;if(O&1){O=Rb()|0;Y=Q;Z=O;vva(f);Qb(Z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[f>>2]=27488;B=0;va(448,L|0);O=B;B=0;do if(O&1){N=Rb()|0;_=Q;$=N}else{k[L>>2]=27560;N=j+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,L|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;U=Q;Yua(c);Yua(N);Ava(L);_=U;$=K;break}Yua(c);B=0;Ia(40,j|0,133747,40)|0;K=B;B=0;do if(!(K&1)?(B=0,wa(510,l|0,L|0),U=B,B=0,!(U&1)):0){B=0;ya(425,l|0)|0;U=B;B=0;if(U&1){U=Rb()|0;T=Q;Yua(l);aa=T;ba=U;break}else{Yua(l);k[j>>2]=27468;k[f>>2]=27488;k[L>>2]=27560;Yua(N);Ava(L);vva(f);break b}}else V=35;while(0);if((V|0)==35){K=Rb()|0;aa=Q;ba=K}k[j>>2]=27468;k[f>>2]=27488;k[L>>2]=27560;Yua(N);Ava(L);vva(f);W=aa;X=ba;Qb(X|0)}while(0);Y=_;Z=$;vva(f);Qb(Z|0)}while(0);Eoa(b)}c:do if(CY()|0){Z=m+56|0;$=m+4|0;k[m>>2]=27524;k[Z>>2]=27544;B=0;wa(508,m+56|0,$|0);_=B;B=0;if(_&1){_=Rb()|0;ca=Q;da=_;vva(Z);Qb(da|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[Z>>2]=27488;B=0;va(448,$|0);_=B;B=0;do if(_&1){Y=Rb()|0;ea=Q;fa=Y}else{k[$>>2]=27560;Y=m+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$|0,c|0);ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(c);Yua(Y);Ava($);ea=aa;fa=ba;break}Yua(c);B=0;Ia(40,m|0,133788,35)|0;ba=B;B=0;do if(!(ba&1)?(B=0,wa(510,n|0,$|0),aa=B,B=0,!(aa&1)):0){B=0;ya(425,n|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;j=Q;Yua(n);ga=j;ha=aa;break}else{Yua(n);k[m>>2]=27468;k[Z>>2]=27488;k[$>>2]=27560;Yua(Y);Ava($);vva(Z);break c}}else V=52;while(0);if((V|0)==52){ba=Rb()|0;ga=Q;ha=ba}k[m>>2]=27468;k[Z>>2]=27488;k[$>>2]=27560;Yua(Y);Ava($);vva(Z);W=ga;X=ha;Qb(X|0)}while(0);ca=ea;da=fa;vva(Z);Qb(da|0)}while(0);Goa(b);break}case 457:{bO(k[H>>2]|0,o,443);if(!(i[o>>0]|0))V=184;else{d:do if(CY()|0){o=p+56|0;H=p+4|0;k[p>>2]=27524;k[o>>2]=27544;B=0;wa(508,p+56|0,H|0);da=B;B=0;if(da&1){da=Rb()|0;ia=Q;ja=da;vva(o);Qb(ja|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[o>>2]=27488;B=0;va(448,H|0);da=B;B=0;do if(da&1){fa=Rb()|0;ka=Q;la=fa}else{k[H>>2]=27560;fa=p+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ca=Q;Yua(c);Yua(fa);Ava(H);ka=ca;la=ea;break}Yua(c);B=0;Ia(40,p|0,133824,42)|0;ea=B;B=0;do if(!(ea&1)?(B=0,wa(510,q|0,H|0),ca=B,B=0,!(ca&1)):0){B=0;ya(425,q|0)|0;ca=B;B=0;if(ca&1){ca=Rb()|0;ha=Q;Yua(q);ma=ha;na=ca;break}else{Yua(q);k[p>>2]=27468;k[o>>2]=27488;k[H>>2]=27560;Yua(fa);Ava(H);vva(o);break d}}else V=70;while(0);if((V|0)==70){ea=Rb()|0;ma=Q;na=ea}k[p>>2]=27468;k[o>>2]=27488;k[H>>2]=27560;Yua(fa);Ava(H);vva(o);W=ma;X=na;Qb(X|0)}while(0);ia=ka;ja=la;vva(o);Qb(ja|0)}while(0);Foa(b);e:do if(CY()|0){ja=s+56|0;la=s+4|0;k[s>>2]=27524;k[ja>>2]=27544;B=0;wa(508,s+56|0,la|0);ka=B;B=0;if(ka&1){ka=Rb()|0;oa=Q;pa=ka;vva(ja);Qb(pa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[ja>>2]=27488;B=0;va(448,la|0);ka=B;B=0;do if(ka&1){ia=Rb()|0;qa=Q;ra=ia}else{k[la>>2]=27560;ia=s+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,la|0,c|0);na=B;B=0;if(na&1){na=Rb()|0;ma=Q;Yua(c);Yua(ia);Ava(la);qa=ma;ra=na;break}Yua(c);B=0;Ia(40,s|0,133788,35)|0;na=B;B=0;do if(!(na&1)?(B=0,wa(510,t|0,la|0),ma=B,B=0,!(ma&1)):0){B=0;ya(425,t|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;p=Q;Yua(t);sa=p;ta=ma;break}else{Yua(t);k[s>>2]=27468;k[ja>>2]=27488;k[la>>2]=27560;Yua(ia);Ava(la);vva(ja);break e}}else V=86;while(0);if((V|0)==86){na=Rb()|0;sa=Q;ta=na}k[s>>2]=27468;k[ja>>2]=27488;k[la>>2]=27560;Yua(ia);Ava(la);vva(ja);W=sa;X=ta;Qb(X|0)}while(0);oa=qa;pa=ra;vva(ja);Qb(pa|0)}while(0);Goa(b);V=184}break}case 459:{f:do if(CY()|0){pa=u+56|0;ra=u+4|0;k[u>>2]=27524;k[pa>>2]=27544;B=0;wa(508,u+56|0,ra|0);qa=B;B=0;if(qa&1){qa=Rb()|0;xa=Q;za=qa;vva(pa);Qb(za|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[pa>>2]=27488;B=0;va(448,ra|0);qa=B;B=0;do if(qa&1){oa=Rb()|0;Aa=Q;Ba=oa}else{k[ra>>2]=27560;oa=u+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);ta=B;B=0;if(ta&1){ta=Rb()|0;sa=Q;Yua(c);Yua(oa);Ava(ra);Aa=sa;Ba=ta;break}Yua(c);B=0;Ia(40,u|0,133867,27)|0;ta=B;B=0;do if(!(ta&1)?(B=0,wa(510,v|0,ra|0),sa=B,B=0,!(sa&1)):0){B=0;ya(425,v|0)|0;sa=B;B=0;if(sa&1){sa=Rb()|0;s=Q;Yua(v);Ca=s;Da=sa;break}else{Yua(v);k[u>>2]=27468;k[pa>>2]=27488;k[ra>>2]=27560;Yua(oa);Ava(ra);vva(pa);break f}}else V=103;while(0);if((V|0)==103){ta=Rb()|0;Ca=Q;Da=ta}k[u>>2]=27468;k[pa>>2]=27488;k[ra>>2]=27560;Yua(oa);Ava(ra);vva(pa);W=Ca;X=Da;Qb(X|0)}while(0);xa=Aa;za=Ba;vva(pa);Qb(za|0)}while(0);Coa(b);V=184;break}case 465:{g:do if(CY()|0){za=w+56|0;Ba=w+4|0;k[w>>2]=27524;k[za>>2]=27544;B=0;wa(508,w+56|0,Ba|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ea=Q;Fa=Aa;vva(za);Qb(Fa|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[za>>2]=27488;B=0;va(448,Ba|0);Aa=B;B=0;do if(Aa&1){xa=Rb()|0;Ga=Q;Ha=xa}else{k[Ba>>2]=27560;xa=w+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ba|0,c|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ca=Q;Yua(c);Yua(xa);Ava(Ba);Ga=Ca;Ha=Da;break}Yua(c);B=0;Ia(40,w|0,133895,26)|0;Da=B;B=0;do if(!(Da&1)?(B=0,wa(510,x|0,Ba|0),Ca=B,B=0,!(Ca&1)):0){B=0;ya(425,x|0)|0;Ca=B;B=0;if(Ca&1){Ca=Rb()|0;u=Q;Yua(x);Ja=u;Ka=Ca;break}else{Yua(x);k[w>>2]=27468;k[za>>2]=27488;k[Ba>>2]=27560;Yua(xa);Ava(Ba);vva(za);break g}}else V=120;while(0);if((V|0)==120){Da=Rb()|0;Ja=Q;Ka=Da}k[w>>2]=27468;k[za>>2]=27488;k[Ba>>2]=27560;Yua(xa);Ava(Ba);vva(za);W=Ja;X=Ka;Qb(X|0)}while(0);Ea=Ga;Fa=Ha;vva(za);Qb(Fa|0)}while(0);Hoa(b);V=184;break}case 466:{h:do if(CY()|0){Fa=y+56|0;Ha=y+4|0;k[y>>2]=27524;k[Fa>>2]=27544;B=0;wa(508,y+56|0,Ha|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;La=Q;Ma=Ga;vva(Fa);Qb(Ma|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Fa>>2]=27488;B=0;va(448,Ha|0);Ga=B;B=0;do if(Ga&1){Ea=Rb()|0;Na=Q;Oa=Ea}else{k[Ha>>2]=27560;Ea=y+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ha|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ja=Q;Yua(c);Yua(Ea);Ava(Ha);Na=Ja;Oa=Ka;break}Yua(c);B=0;Ia(40,y|0,133922,29)|0;Ka=B;B=0;do if(!(Ka&1)?(B=0,wa(510,z|0,Ha|0),Ja=B,B=0,!(Ja&1)):0){B=0;ya(425,z|0)|0;Ja=B;B=0;if(Ja&1){Ja=Rb()|0;w=Q;Yua(z);Pa=w;Qa=Ja;break}else{Yua(z);k[y>>2]=27468;k[Fa>>2]=27488;k[Ha>>2]=27560;Yua(Ea);Ava(Ha);vva(Fa);break h}}else V=137;while(0);if((V|0)==137){Ka=Rb()|0;Pa=Q;Qa=Ka}k[y>>2]=27468;k[Fa>>2]=27488;k[Ha>>2]=27560;Yua(Ea);Ava(Ha);vva(Fa);W=Pa;X=Qa;Qb(X|0)}while(0);La=Na;Ma=Oa;vva(Fa);Qb(Ma|0)}while(0);Ioa(b);V=184;break}case 470:{i:do if(CY()|0){Ma=A+56|0;Oa=A+4|0;k[A>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,A+56|0,Oa|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Ra=Q;Sa=Na;vva(Ma);Qb(Sa|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Oa|0);Na=B;B=0;do if(Na&1){La=Rb()|0;Ta=Q;Ua=La}else{k[Oa>>2]=27560;La=A+36|0;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Oa|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Pa=Q;Yua(c);Yua(La);Ava(Oa);Ta=Pa;Ua=Qa;break}Yua(c);B=0;Ia(40,A|0,133952,34)|0;Qa=B;B=0;do if(!(Qa&1)?(B=0,wa(510,C|0,Oa|0),Pa=B,B=0,!(Pa&1)):0){B=0;ya(425,C|0)|0;Pa=B;B=0;if(Pa&1){Pa=Rb()|0;y=Q;Yua(C);Va=y;Wa=Pa;break}else{Yua(C);k[A>>2]=27468;k[Ma>>2]=27488;k[Oa>>2]=27560;Yua(La);Ava(Oa);vva(Ma);break i}}else V=154;while(0);if((V|0)==154){Qa=Rb()|0;Va=Q;Wa=Qa}k[A>>2]=27468;k[Ma>>2]=27488;k[Oa>>2]=27560;Yua(La);Ava(Oa);vva(Ma);W=Va;X=Wa;Qb(X|0)}while(0);Ra=Ta;Sa=Ua;vva(Ma);Qb(Sa|0)}while(0);Joa(b);V=184;break}case 473:{V=184;break}case 387:{r=a;return}default:{b=D+56|0;Sa=D+4|0;k[D>>2]=27524;k[b>>2]=27544;B=0;wa(508,D+56|0,Sa|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Ya=Q;Za=Ua;vva(b);Qb(Za|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[b>>2]=27488;B=0;va(448,Sa|0);Ua=B;B=0;do if(Ua&1){Ta=Rb()|0;_a=Q;$a=Ta}else{k[Sa>>2]=27560;Ta=D+36|0;k[Ta>>2]=0;k[Ta+4>>2]=0;k[Ta+8>>2]=0;k[Ta+12>>2]=0;k[D+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Sa|0,c|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;Wa=Q;Yua(c);Yua(Ta);Ava(Sa);_a=Wa;$a=Ra;break}Yua(c);B=0;Ra=Ia(40,D|0,133089,27)|0;Wa=B;B=0;j:do if((((!(Wa&1)?(B=0,Va=ya(427,k[d>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(Va)|0,B=0,C=Ia(40,Ra|0,Va|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,E|0,133117,71);C=B;B=0;do if(!(C&1)){B=0;eb(502,F|0,138209,4);Va=B;B=0;if(Va&1){Va=Rb()|0;Oa=Q;Yua(E);ab=Va;bb=Oa;break}B=0;wa(510,G|0,Sa|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;cb=1;db=Q;fb=Oa}else{B=0;ua(163,A|0,E|0,F|0,289,G|0);Oa=B;B=0;if(Oa&1)gb=1;else{B=0;eb(503,A|0,1240,229);B=0;gb=0}Oa=Rb()|0;Va=Q;Yua(G);cb=gb;db=Va;fb=Oa}Yua(F);Yua(E);if(cb){ab=fb;bb=db}else{hb=fb;ib=db;break j}}else{Oa=Rb()|0;ab=Oa;bb=Q}while(0);zb(A|0);hb=ab;ib=bb}else V=176;while(0);if((V|0)==176){Ra=Rb()|0;hb=Ra;ib=Q}k[D>>2]=27468;k[b>>2]=27488;k[Sa>>2]=27560;Yua(Ta);Ava(Sa);vva(b);W=ib;X=hb;Qb(X|0)}while(0);Ya=_a;Za=$a;vva(b);Qb(Za|0)}}r=a;return}function Yea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,133987,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,294,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Zea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,297,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function _ea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144189,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,300,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function $ea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144203,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,303,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function afa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,306,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function bfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,309,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function cfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,133117,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,137199,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,312,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function dfa(a,b){a=a|0;b=b|0;return}function efa(a){a=a|0;Sqa(a);return}function ffa(a,b,c){a=a|0;b=b|0;c=c|0;return}function gfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+32|0;d=a+16|0;e=a+8|0;f=a+4|0;g=a;k[f>>2]=0;k[g>>2]=0;Qka(c,f,e,0,134220);h=c+40|0;if((k[h>>2]|0)!=300)Qka(c,g,0,0,136615);i=k[e>>2]|0;if((i|0)<=0){j=k[f>>2]|0;Mka(c,j,134220);l=k[g>>2]|0;Mka(c,l,136615);r=a;return}m=c+36|0;n=c+100|0;o=d+4|0;q=c+104|0;s=i;i=0;t=0;a:while(1){u=t<<1;v=k[f>>2]|0;w=~~+p[v+(u<<3)>>3];x=w+-1|0;do if(!(k[(k[m>>2]|0)+(x<<2)>>2]|0)){y=s;z=i}else{if((k[h>>2]|0)!=300){A=k[g>>2]|0;if(!(+p[A+(x<<3)>>3]!=0.0)){y=s;z=i;break}C=v+((u|1)<<3)|0;if(+p[A+(~~+p[C>>3]+-1<<3)>>3]!=0.0)D=C;else{y=s;z=i;break}}else D=v+((u|1)<<3)|0;C=k[n>>2]|0;k[d>>2]=w+C;k[o>>2]=~~+p[D>>3]+C;C=Qqa(28)|0;A=i+1|0;B=0;ib(298,C|0,A+(k[q>>2]|0)|0,d|0,512);E=B;B=0;if(E&1){F=C;G=13;break a}ih(b,C)|0;y=k[e>>2]|0;z=A}while(0);t=t+1|0;if((t|0)>=(y|0)){G=5;break}else{s=y;i=z}}if((G|0)==5){j=k[f>>2]|0;Mka(c,j,134220);l=k[g>>2]|0;Mka(c,l,136615);r=a;return}else if((G|0)==13){G=Rb()|0;Sqa(F);Qb(G|0)}}function hfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,512,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function ifa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function jfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;a=c+40|0;if((k[a>>2]|0)==300)return;f=c+56|0;g=k[f>>2]|0;if((g|0)>0){h=c+32|0;j=g;g=0;l=0;while(1){if(!(i[(k[h>>2]|0)+l>>0]|0)){m=j;n=g}else{o=qh(b,g)|0;Uc[k[(k[o>>2]|0)+480>>2]&63](o,l,c,d,e,738);m=k[f>>2]|0;n=g+1|0}l=l+1|0;if((l|0)>=(m|0))break;else{j=m;g=n}}}Zka(c,b,134925,339);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,134027,39);Zka(c,b,134069,40);Zka(c,b,135923,674);Zka(c,b,135944,677);if((k[c+44>>2]|0)==3)Zka(c,b,135096,679);if((k[a>>2]|0)==300)return;Zka(c,b,136615,287);Zka(c,b,136636,288);return}function kfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function lfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134111,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,98,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function mfa(a,b){a=a|0;b=b|0;return 0}function nfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134111,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,105,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function ofa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0;a=r;r=r+240|0;c=a+228|0;d=a+224|0;e=a+220|0;f=a+216|0;g=a+32|0;h=a+24|0;i=a+16|0;j=a+8|0;l=a;m=a+80|0;n=a+64|0;o=a+52|0;q=a+40|0;k[f>>2]=0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{s=b;t=2;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){s=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;t=1;break a}else{u=0;r=a;return u|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){s=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;t=2;break a}else{u=0;r=a;return u|0}break}default:{v=m+56|0;w=m+4|0;k[m>>2]=27524;k[v>>2]=27544;B=0;wa(508,m+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=m+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;E=Ia(40,m|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[d>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,n|0,134111,83);H=B;B=0;do if(!(H&1)){B=0;eb(502,o|0,144189,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(n);I=E;J=F;break}B=0;wa(510,q|0,w|0);F=B;B=0;if(F&1){F=Rb()|0;K=Q;L=F;M=1}else{B=0;ua(163,G|0,n|0,o|0,133,q|0);F=B;B=0;if(F&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}F=Rb()|0;E=Q;Yua(q);K=E;L=F;M=N}Yua(o);Yua(n);if(M){I=K;J=L}else{O=L;P=K;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=Q;J=F}while(0);zb(G|0);O=J;P=I;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);z=Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0;D=gq(s,534)|0;C=Rqa(z>>>0>536870911?-1:z<<3)|0;y=ma(z,t)|0;O=y>>>0>536870911?-1:y<<3;y=Rqa(O)|0;m=Rqa(O)|0;O=ma(t,t)|0;P=Rqa(O<<3)|0;Uo(s,f);pp(s,i,358);cp(s,e,310);I=Wo(s,674)|0;if(t>>>0>1)R=Wo(s,677)|0;else R=0;S=+Zc[k[(k[s>>2]|0)+72>>2]&255](s);J=ed[k[(k[s>>2]|0)+308>>2]&511](s,2)|0;K=Hc[k[(k[J>>2]|0)+8>>2]&511](J)|0;b:do if((K|0)<(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0)){L=(t|0)==2;M=J+8|0;n=D+12|0;o=(O|0)==0;N=P+(t+1<<3)|0;q=(t|0)==1;c=P+(t<<3)|0;b=P+8|0;T=S*.5;w=(O>>>0>1?O:1)<<3;x=K;while(1){Fc[k[(k[J>>2]|0)+24>>2]&1023](J,x);rd[k[(k[s>>2]|0)+260>>2]&511](s,g,k[f>>2]|0,J);nd[k[(k[s>>2]|0)+336>>2]&1023](s,C,J);nd[k[(k[I>>2]|0)+48>>2]&1023](I,j,J);if(L)nd[k[(k[R>>2]|0)+48>>2]&1023](R,l,J);p[h>>3]=+p[M>>3]*+p[g>>3];ZX(C,1,z,1,h,1,1,0,C,1,z,0,k[n>>2]|0,1)|0;H=Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0;F=Rqa(H>>>0>536870911?-1:H<<3)|0;nd[k[(k[s>>2]|0)+336>>2]&1023](s,F,J);if((H|0)>0){E=0;do{U=+p[F+(E<<3)>>3];V=0;do{W=y+((ma(V,H)|0)+E<<3)|0;p[W>>3]=U;V=V+1|0}while((V|0)!=(t|0));E=E+1|0}while((E|0)!=(H|0))}Tqa(F);H=k[f>>2]|0;E=Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0;A=ma(E,t)|0;G=Rqa(A>>>0>536870911?-1:A<<3)|0;rd[k[(k[s>>2]|0)+340>>2]&511](s,G,H,J);if((E|0)>0){H=0;do{A=0;do{V=(ma(A,E)|0)+H|0;p[m+(V<<3)>>3]=+p[G+(V<<3)>>3];A=A+1|0}while((A|0)!=(t|0));H=H+1|0}while((H|0)!=(E|0))}Tqa(G);U=+p[i>>3]*+p[M>>3]*+p[g>>3];p[h>>3]=U;if(!o)WEa(P|0,0,w|0)|0;p[P>>3]=U*+p[j>>3];if(L)p[N>>3]=U*+p[l>>3];ZX(y,t,z,1,P,t,t,0,m,t,z,0,k[n>>2]|0,1)|0;c:do switch(k[e>>2]|0){case 2:{U=+p[j>>3];if(q){X=U*(U*(S/((+$(+U)+1.0e-08)*2.0)));p[P>>3]=X;break c}else{X=+p[l>>3];Y=S/((+aa(+(U*U+X*X))+1.0e-08)*2.0);Z=U*Y;p[P>>3]=U*Z;_=X*Y;p[c>>3]=U*_;p[b>>3]=Z*X;p[N>>3]=X*_;break c}break}case 1:{Fc[k[(k[I>>2]|0)+64>>2]&1023](I,j);if(q){_=T*+$(+(+p[j>>3]));p[P>>3]=_;break c}else{Fc[k[(k[R>>2]|0)+64>>2]&1023](R,l);_=T*+$(+(+p[j>>3]));p[P>>3]=_;_=T*+$(+(+p[l>>3]));p[N>>3]=_;break c}break}default:{}}while(0);if(((k[e>>2]|0)+-1|0)>>>0<2){if(!o){_=+p[h>>3];G=0;do{E=P+(G<<3)|0;p[E>>3]=_*+p[E>>3];G=G+1|0}while((G|0)<(O|0))}ZX(m,t,z,1,P,t,t,0,m,t,z,0,k[n>>2]|0,1)|0}x=x+1|0;if((x|0)>=(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0))break b}}while(0);z=k[f>>2]|0;if(z)Tqa(z);k[f>>2]=0;Tqa(C);Tqa(y);Tqa(m);Tqa(P);Ec[k[(k[J>>2]|0)+4>>2]&1023](J);if((k[d>>2]|0)==300){u=D;r=a;return u|0}ap(s);if(!s){u=D;r=a;return u|0}Ec[k[(k[s>>2]|0)+4>>2]&1023](s);u=D;r=a;return u|0}function pfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0.0,oa=0.0;a=r;r=r+432|0;c=a+412|0;d=a+408|0;e=a+48|0;f=a+40|0;g=a+32|0;h=a+24|0;i=a+16|0;j=a+8|0;l=a;m=a+404|0;n=a+256|0;o=a+392|0;q=a+104|0;s=a+92|0;t=a+120|0;u=a+80|0;v=a+68|0;w=a+56|0;k[m>>2]=0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{x=b;y=2;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){x=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;y=1;break a}else{z=0;r=a;return z|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){x=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;y=2;break a}else{z=0;r=a;return z|0}break}default:{A=n+56|0;C=n+4|0;k[n>>2]=27524;k[A>>2]=27544;B=0;wa(508,n+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(A);Qb(F|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[A>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[C>>2]=27560;G=n+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(C);H=K;I=J;break}Yua(c);B=0;J=Ia(40,n|0,144639,5)|0;K=B;B=0;b:do if((((!(K&1)?(B=0,L=ya(427,k[d>>2]|0)|0,M=B,B=0,!(M&1)):0)?(M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,M=Ia(40,N|0,146481,18)|0,N=B,B=0,!(N&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,o|0,134111,83);N=B;B=0;do if(!(N&1)){B=0;eb(502,q|0,144203,13);L=B;B=0;if(L&1){L=Rb()|0;O=Q;Yua(o);P=L;R=O;break}B=0;wa(510,s|0,C|0);O=B;B=0;if(O&1){O=Rb()|0;S=O;T=Q;U=1}else{B=0;ua(163,M|0,o|0,q|0,256,s|0);O=B;B=0;if(O&1)V=1;else{B=0;eb(503,M|0,1240,229);B=0;V=0}O=Rb()|0;L=Q;Yua(s);S=O;T=L;U=V}Yua(q);Yua(o);if(U){P=S;R=T}else{W=S;X=T;break b}}else{L=Rb()|0;P=L;R=Q}while(0);zb(M|0);W=P;X=R}else Y=24;while(0);if((Y|0)==24){J=Rb()|0;W=J;X=Q}k[n>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(A);Z=W;_=X;Qb(Z|0)}while(0);E=H;F=I;vva(A);Qb(F|0)}}while(0);F=Hc[k[(k[x>>2]|0)+164>>2]&511](x)|0;I=iq(x,534)|0;H=Rqa(F>>>0>536870911?-1:F<<3)|0;Uo(x,m);pp(x,f,358);E=Wo(x,928)|0;X=Wo(x,39)|0;W=Wo(x,40)|0;n=Wo(x,64)|0;switch(y|0){case 1:{$=Wo(x,677)|0;break}case 2:{$=Wo(x,679)|0;break}default:{y=t+56|0;R=t+4|0;k[t>>2]=27524;k[y>>2]=27544;B=0;wa(508,t+56|0,R|0);P=B;B=0;if(P&1){P=Rb()|0;aa=Q;ba=P;vva(y);Qb(ba|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[y>>2]=27488;B=0;va(448,R|0);P=B;B=0;do if(P&1){T=Rb()|0;ca=Q;da=T}else{k[R>>2]=27560;T=t+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;U=Q;Yua(c);Yua(T);Ava(R);ca=U;da=S;break}Yua(c);B=0;S=Ia(40,t|0,143640,15)|0;U=B;B=0;c:do if(!(U&1)?(B=0,Xa(239,S|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,u|0,134111,83);q=B;B=0;do if(!(q&1)){B=0;eb(502,v|0,144203,13);V=B;B=0;if(V&1){V=Rb()|0;s=Q;Yua(u);ea=s;fa=V;break}B=0;wa(510,w|0,R|0);V=B;B=0;if(V&1){V=Rb()|0;ga=1;ha=V;ia=Q}else{B=0;ua(163,o|0,u|0,v|0,277,w|0);V=B;B=0;if(V&1)ja=1;else{B=0;eb(503,o|0,1240,229);B=0;ja=0}V=Rb()|0;s=Q;Yua(w);ga=ja;ha=V;ia=s}Yua(v);Yua(u);if(ga){ea=ia;fa=ha}else{ka=ha;la=ia;break c}}else{s=Rb()|0;ea=Q;fa=s}while(0);zb(o|0);ka=fa;la=ea}else Y=50;while(0);if((Y|0)==50){S=Rb()|0;ka=S;la=Q}k[t>>2]=27468;k[y>>2]=27488;k[R>>2]=27560;Yua(T);Ava(R);vva(y);Z=ka;_=la;Qb(Z|0)}while(0);aa=ca;ba=da;vva(y);Qb(ba|0)}}ba=ed[k[(k[x>>2]|0)+308>>2]&511](x,2)|0;y=Hc[k[(k[ba>>2]|0)+8>>2]&511](ba)|0;d:do if((y|0)<(Hc[k[(k[ba>>2]|0)+12>>2]&511](ba)|0)){da=ba+8|0;ca=I+4|0;if((F|0)>0)ma=y;else{aa=y;while(1){Fc[k[(k[ba>>2]|0)+24>>2]&1023](ba,aa);rd[k[(k[x>>2]|0)+260>>2]&511](x,e,k[m>>2]|0,ba);nd[k[(k[x>>2]|0)+336>>2]&1023](x,H,ba);nd[k[(k[$>>2]|0)+48>>2]&1023]($,l,ba);nd[k[(k[X>>2]|0)+48>>2]&1023](X,g,ba);nd[k[(k[W>>2]|0)+48>>2]&1023](W,h,ba);nd[k[(k[n>>2]|0)+48>>2]&1023](n,i,ba);nd[k[(k[E>>2]|0)+48>>2]&1023](E,j,ba);aa=aa+1|0;if((aa|0)>=(Hc[k[(k[ba>>2]|0)+12>>2]&511](ba)|0))break d}}do{Fc[k[(k[ba>>2]|0)+24>>2]&1023](ba,ma);rd[k[(k[x>>2]|0)+260>>2]&511](x,e,k[m>>2]|0,ba);nd[k[(k[x>>2]|0)+336>>2]&1023](x,H,ba);nd[k[(k[$>>2]|0)+48>>2]&1023]($,l,ba);nd[k[(k[X>>2]|0)+48>>2]&1023](X,g,ba);nd[k[(k[W>>2]|0)+48>>2]&1023](W,h,ba);nd[k[(k[n>>2]|0)+48>>2]&1023](n,i,ba);nd[k[(k[E>>2]|0)+48>>2]&1023](E,j,ba);na=+p[j>>3]>0.0?+p[g>>3]:+p[h>>3];aa=k[ca>>2]|0;T=0;do{oa=+p[f>>3];Z=aa+(T<<3)|0;p[Z>>3]=+p[Z>>3]+ +p[H+(T<<3)>>3]*(+p[e>>3]*+p[da>>3]*(+p[i>>3]+na*oa+oa*+p[l>>3]));T=T+1|0}while((T|0)!=(F|0));ma=ma+1|0}while((ma|0)<(Hc[k[(k[ba>>2]|0)+12>>2]&511](ba)|0))}while(0);ma=k[m>>2]|0;if(ma)Tqa(ma);k[m>>2]=0;Tqa(H);Ec[k[(k[ba>>2]|0)+4>>2]&1023](ba);if((k[d>>2]|0)==300){z=I;r=a;return z|0}ap(x);if(!x){z=I;r=a;return z|0}Ec[k[(k[x>>2]|0)+4>>2]&1023](x);z=I;r=a;return z|0}function qfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134111,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,365,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function rfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134111,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,368,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function sfa(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,64);return}function tfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=b+20|0;if((th(k[f>>2]|0)|0)>0)g=0;else{r=a;return}do{b=qh(k[f>>2]|0,g)|0;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=Wo(b,928)|0;j=Wo(b,287)|0;l=Wo(b,64)|0;m=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((h|0)>0){n=b+20|0;o=0;do{q=k[(k[m>>2]|0)+32>>2]|0;s=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[q&1023](m,s,o);nd[k[(k[j>>2]|0)+48>>2]&1023](j,d,m);do if(+p[d>>3]==1.0){nd[k[(k[i>>2]|0)+48>>2]&1023](i,c,m);if(!(+p[c>>3]>=0.0)){Zn(k[(k[n>>2]|0)+(o<<2)>>2]|0,0);break}else{nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,m);Un(k[(k[n>>2]|0)+(o<<2)>>2]|0,0,+p[e>>3]);break}}while(0);o=o+1|0}while((o|0)!=(h|0))}if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m)}g=g+1|0}while((g|0)<(th(k[f>>2]|0)|0));r=a;return}function ufa(a){a=a|0;Sqa(a);return}function vfa(a,b,c){a=a|0;b=b|0;c=c|0;return}function wfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+32|0;d=a+16|0;e=a+8|0;f=a+4|0;g=a;k[f>>2]=0;k[g>>2]=0;Qka(c,f,e,0,134220);h=c+40|0;if((k[h>>2]|0)!=300)Qka(c,g,0,0,136636);i=k[e>>2]|0;if((i|0)<=0){j=k[f>>2]|0;Mka(c,j,134220);l=k[g>>2]|0;Mka(c,l,136636);r=a;return}m=c+36|0;n=c+100|0;o=d+4|0;q=c+104|0;s=i;i=0;t=0;a:while(1){u=t<<1;v=k[f>>2]|0;w=~~+p[v+(u<<3)>>3];x=w+-1|0;do if(!(k[(k[m>>2]|0)+(x<<2)>>2]|0)){y=s;z=i}else{if((k[h>>2]|0)!=300){A=k[g>>2]|0;if(!(+p[A+(x<<3)>>3]!=0.0)){y=s;z=i;break}C=v+((u|1)<<3)|0;if(+p[A+(~~+p[C>>3]+-1<<3)>>3]!=0.0)D=C;else{y=s;z=i;break}}else D=v+((u|1)<<3)|0;C=k[n>>2]|0;k[d>>2]=w+C;k[o>>2]=~~+p[D>>3]+C;C=Qqa(28)|0;A=i+1|0;B=0;ib(298,C|0,A+(k[q>>2]|0)|0,d|0,513);E=B;B=0;if(E&1){F=C;G=13;break a}ih(b,C)|0;y=k[e>>2]|0;z=A}while(0);t=t+1|0;if((t|0)>=(y|0)){G=5;break}else{s=y;i=z}}if((G|0)==5){j=k[f>>2]|0;Mka(c,j,134220);l=k[g>>2]|0;Mka(c,l,136636);r=a;return}else if((G|0)==13){G=Rb()|0;Sqa(F);Qb(G|0)}}function xfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,513,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function yfa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function zfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;a=r;r=r+16|0;f=a;g=c+40|0;if((k[g>>2]|0)==300){r=a;return}Fka(c,f,134789);h=c+56|0;j=k[h>>2]|0;if((j|0)>0){l=c+32|0;m=j;j=0;n=0;while(1){if(!(i[(k[l>>2]|0)+n>>0]|0)){o=m;p=j}else{q=qh(b,j)|0;Uc[k[(k[q>>2]|0)+480>>2]&63](q,n,c,d,e,738);o=k[h>>2]|0;p=j+1|0}n=n+1|0;if((n|0)>=(o|0))break;else{m=o;j=p}}}Zka(c,b,134925,339);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,135923,674);if((k[g>>2]|0)!=300){Zka(c,b,136636,288);Zka(c,b,136615,287)}if((k[c+44>>2]|0)==3)Zka(c,b,135096,679);if((k[f>>2]|0)==387)Yka(c,b,134252,388,0.0);r=a;return}function Afa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function Bfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134272,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,106,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Cfa(a,b){a=a|0;b=b|0;return 0}function Dfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134272,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,113,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Efa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0;a=r;r=r+240|0;c=a+228|0;d=a+224|0;e=a+220|0;f=a+216|0;g=a+32|0;h=a+24|0;i=a+16|0;j=a+8|0;l=a;m=a+80|0;n=a+64|0;o=a+52|0;q=a+40|0;k[f>>2]=0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{s=2;t=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0){s=1;t=Hc[k[(k[b>>2]|0)+436>>2]&511](b)|0;break a}else{u=0;r=a;return u|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0){s=2;t=Hc[k[(k[b>>2]|0)+436>>2]&511](b)|0;break a}else{u=0;r=a;return u|0}break}default:{v=m+56|0;w=m+4|0;k[m>>2]=27524;k[v>>2]=27544;B=0;wa(508,m+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=m+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;E=Ia(40,m|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[d>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,n|0,134272,82);H=B;B=0;do if(!(H&1)){B=0;eb(502,o|0,144189,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(n);I=E;J=F;break}B=0;wa(510,q|0,w|0);F=B;B=0;if(F&1){F=Rb()|0;K=Q;L=F;M=1}else{B=0;ua(163,G|0,n|0,o|0,141,q|0);F=B;B=0;if(F&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}F=Rb()|0;E=Q;Yua(q);K=E;L=F;M=N}Yua(o);Yua(n);if(M){I=K;J=L}else{O=L;P=K;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=Q;J=F}while(0);zb(G|0);O=J;P=I;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[m>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);z=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;D=gq(t,534)|0;C=Rqa(z>>>0>536870911?-1:z<<3)|0;y=ma(z,s)|0;O=y>>>0>536870911?-1:y<<3;y=Rqa(O)|0;m=Rqa(O)|0;O=ma(s,s)|0;P=Rqa(O<<3)|0;Uo(t,f);pp(t,i,358);cp(t,e,310);I=Wo(t,674)|0;if(s>>>0>1)R=Wo(t,677)|0;else R=0;S=+Zc[k[(k[t>>2]|0)+72>>2]&255](t);J=ed[k[(k[t>>2]|0)+308>>2]&511](t,2)|0;K=Hc[k[(k[J>>2]|0)+8>>2]&511](J)|0;b:do if((K|0)<(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0)){L=(s|0)==2;M=J+8|0;n=D+12|0;o=(O|0)==0;N=P+(s+1<<3)|0;q=(s|0)==1;c=P+(s<<3)|0;b=P+8|0;T=S*.5;w=(O>>>0>1?O:1)<<3;x=K;while(1){Fc[k[(k[J>>2]|0)+24>>2]&1023](J,x);rd[k[(k[t>>2]|0)+260>>2]&511](t,g,k[f>>2]|0,J);nd[k[(k[t>>2]|0)+336>>2]&1023](t,C,J);nd[k[(k[I>>2]|0)+48>>2]&1023](I,j,J);if(L)nd[k[(k[R>>2]|0)+48>>2]&1023](R,l,J);p[h>>3]=+p[M>>3]*+p[g>>3];ZX(C,1,z,1,h,1,1,0,C,1,z,0,k[n>>2]|0,1)|0;H=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;F=Rqa(H>>>0>536870911?-1:H<<3)|0;nd[k[(k[t>>2]|0)+336>>2]&1023](t,F,J);if((H|0)>0){E=0;do{U=+p[F+(E<<3)>>3];V=0;do{W=y+((ma(V,H)|0)+E<<3)|0;p[W>>3]=U;V=V+1|0}while((V|0)!=(s|0));E=E+1|0}while((E|0)!=(H|0))}Tqa(F);H=k[f>>2]|0;E=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;A=ma(E,s)|0;G=Rqa(A>>>0>536870911?-1:A<<3)|0;rd[k[(k[t>>2]|0)+340>>2]&511](t,G,H,J);if((E|0)>0){H=0;do{A=0;do{V=(ma(A,E)|0)+H|0;p[m+(V<<3)>>3]=+p[G+(V<<3)>>3];A=A+1|0}while((A|0)!=(s|0));H=H+1|0}while((H|0)!=(E|0))}Tqa(G);U=+p[i>>3]*+p[M>>3]*+p[g>>3];p[h>>3]=U;if(!o)WEa(P|0,0,w|0)|0;p[P>>3]=U*+p[j>>3];if(L)p[N>>3]=U*+p[l>>3];ZX(y,s,z,1,P,s,s,0,m,s,z,0,k[n>>2]|0,1)|0;c:do switch(k[e>>2]|0){case 2:{U=+p[j>>3];if(q){X=U*(U*(S/((+$(+U)+1.0e-08)*2.0)));p[P>>3]=X;break c}else{X=+p[l>>3];Y=S/((+aa(+(U*U+X*X))+1.0e-08)*2.0);Z=U*Y;p[P>>3]=U*Z;_=X*Y;p[c>>3]=U*_;p[b>>3]=Z*X;p[N>>3]=X*_;break c}break}case 1:{Fc[k[(k[I>>2]|0)+64>>2]&1023](I,j);if(q){_=T*+$(+(+p[j>>3]));p[P>>3]=_;break c}else{Fc[k[(k[R>>2]|0)+64>>2]&1023](R,l);_=T*+$(+(+p[j>>3]));p[P>>3]=_;_=T*+$(+(+p[l>>3]));p[N>>3]=_;break c}break}default:{}}while(0);if(((k[e>>2]|0)+-1|0)>>>0<2){if(!o){_=+p[h>>3];G=0;do{E=P+(G<<3)|0;p[E>>3]=_*+p[E>>3];G=G+1|0}while((G|0)<(O|0))}ZX(m,s,z,1,P,s,s,0,m,s,z,0,k[n>>2]|0,1)|0}x=x+1|0;if((x|0)>=(Hc[k[(k[J>>2]|0)+12>>2]&511](J)|0))break b}}while(0);z=k[f>>2]|0;if(z)Tqa(z);k[f>>2]=0;Tqa(C);Tqa(y);Tqa(m);Tqa(P);Ec[k[(k[J>>2]|0)+4>>2]&1023](J);if((k[d>>2]|0)==300){u=D;r=a;return u|0}ap(t);if(!t){u=D;r=a;return u|0}Ec[k[(k[t>>2]|0)+4>>2]&1023](t);u=D;r=a;return u|0}function Ffa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0;a=r;r=r+416|0;c=a+396|0;d=a+392|0;e=a+32|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+388|0;l=a+240|0;m=a+376|0;n=a+224|0;o=a+76|0;q=a+88|0;s=a+64|0;t=a+52|0;u=a+40|0;k[j>>2]=0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{v=2;w=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0){v=1;w=Hc[k[(k[b>>2]|0)+436>>2]&511](b)|0;break a}else{x=0;r=a;return x|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0){v=2;w=Hc[k[(k[b>>2]|0)+436>>2]&511](b)|0;break a}else{x=0;r=a;return x|0}break}default:{y=l+56|0;z=l+4|0;k[l>>2]=27524;k[y>>2]=27544;B=0;wa(508,l+56|0,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(y);Qb(D|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[z>>2]=27560;E=l+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(c);Yua(E);Ava(z);F=I;G=H;break}Yua(c);B=0;H=Ia(40,l|0,144639,5)|0;I=B;B=0;b:do if((((!(I&1)?(B=0,J=ya(427,k[d>>2]|0)|0,K=B,B=0,!(K&1)):0)?(K=Lta(J)|0,B=0,L=Ia(40,H|0,J|0,K|0)|0,K=B,B=0,!(K&1)):0)?(B=0,K=Ia(40,L|0,146481,18)|0,L=B,B=0,!(L&1)):0)?(B=0,Xa(239,K|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,m|0,134272,82);L=B;B=0;do if(!(L&1)){B=0;eb(502,n|0,144203,13);J=B;B=0;if(J&1){J=Rb()|0;M=Q;Yua(m);N=M;O=J;break}B=0;wa(510,o|0,z|0);J=B;B=0;if(J&1){J=Rb()|0;P=Q;R=J;S=1}else{B=0;ua(163,K|0,m|0,n|0,264,o|0);J=B;B=0;if(J&1)T=1;else{B=0;eb(503,K|0,1240,229);B=0;T=0}J=Rb()|0;M=Q;Yua(o);P=M;R=J;S=T}Yua(n);Yua(m);if(S){N=P;O=R}else{U=P;V=R;break b}}else{J=Rb()|0;N=Q;O=J}while(0);zb(K|0);U=N;V=O}else W=24;while(0);if((W|0)==24){H=Rb()|0;U=Q;V=H}k[l>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(E);Ava(z);vva(y);X=V;Y=U;Qb(X|0)}while(0);C=F;D=G;vva(y);Qb(D|0)}}while(0);D=Hc[k[(k[w>>2]|0)+164>>2]&511](w)|0;G=iq(w,534)|0;F=Rqa(D>>>0>536870911?-1:D<<3)|0;Uo(w,j);pp(w,f,358);C=Wo(w,388)|0;U=Wo(w,339)|0;switch(v|0){case 1:{Z=Wo(w,677)|0;break}case 2:{Z=Wo(w,679)|0;break}default:{v=q+56|0;V=q+4|0;k[q>>2]=27524;k[v>>2]=27544;B=0;wa(508,q+56|0,V|0);l=B;B=0;if(l&1){l=Rb()|0;_=Q;$=l;vva(v);Qb($|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[v>>2]=27488;B=0;va(448,V|0);l=B;B=0;do if(l&1){O=Rb()|0;aa=Q;ba=O}else{k[V>>2]=27560;O=q+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,V|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;R=Q;Yua(c);Yua(O);Ava(V);aa=R;ba=N;break}Yua(c);B=0;N=Ia(40,q|0,143640,15)|0;R=B;B=0;c:do if(!(R&1)?(B=0,Xa(239,N|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,s|0,134272,82);S=B;B=0;do if(!(S&1)){B=0;eb(502,t|0,144203,13);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Yua(s);ca=n;da=m;break}B=0;wa(510,u|0,V|0);m=B;B=0;if(m&1){m=Rb()|0;ea=1;fa=m;ga=Q}else{B=0;ua(163,P|0,s|0,t|0,283,u|0);m=B;B=0;if(m&1)ha=1;else{B=0;eb(503,P|0,1240,229);B=0;ha=0}m=Rb()|0;n=Q;Yua(u);ea=ha;fa=m;ga=n}Yua(t);Yua(s);if(ea){ca=ga;da=fa}else{ia=fa;ja=ga;break c}}else{n=Rb()|0;ca=Q;da=n}while(0);zb(P|0);ia=da;ja=ca}else W=50;while(0);if((W|0)==50){N=Rb()|0;ia=N;ja=Q}k[q>>2]=27468;k[v>>2]=27488;k[V>>2]=27560;Yua(O);Ava(V);vva(v);X=ia;Y=ja;Qb(X|0)}while(0);_=aa;$=ba;vva(v);Qb($|0)}}$=ed[k[(k[w>>2]|0)+308>>2]&511](w,2)|0;v=Hc[k[(k[$>>2]|0)+8>>2]&511]($)|0;d:do if((v|0)<(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0)){ba=$+8|0;aa=G+4|0;if((D|0)>0)ka=v;else{_=v;while(1){Fc[k[(k[$>>2]|0)+24>>2]&1023]($,_);rd[k[(k[w>>2]|0)+260>>2]&511](w,e,k[j>>2]|0,$);nd[k[(k[w>>2]|0)+336>>2]&1023](w,F,$);nd[k[(k[C>>2]|0)+48>>2]&1023](C,g,$);nd[k[(k[Z>>2]|0)+48>>2]&1023](Z,i,$);nd[k[(k[U>>2]|0)+48>>2]&1023](U,h,$);_=_+1|0;if((_|0)>=(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0))break d}}do{Fc[k[(k[$>>2]|0)+24>>2]&1023]($,ka);rd[k[(k[w>>2]|0)+260>>2]&511](w,e,k[j>>2]|0,$);nd[k[(k[w>>2]|0)+336>>2]&1023](w,F,$);nd[k[(k[C>>2]|0)+48>>2]&1023](C,g,$);nd[k[(k[Z>>2]|0)+48>>2]&1023](Z,i,$);nd[k[(k[U>>2]|0)+48>>2]&1023](U,h,$);_=k[aa>>2]|0;O=0;do{la=+p[f>>3];X=_+(O<<3)|0;p[X>>3]=+p[X>>3]+ +p[F+(O<<3)>>3]*(+p[e>>3]*+p[ba>>3]*(+p[h>>3]+la*+p[g>>3]+la*+p[i>>3]));O=O+1|0}while((O|0)!=(D|0));ka=ka+1|0}while((ka|0)<(Hc[k[(k[$>>2]|0)+12>>2]&511]($)|0))}while(0);ka=k[j>>2]|0;if(ka)Tqa(ka);k[j>>2]=0;Tqa(F);Ec[k[(k[$>>2]|0)+4>>2]&1023]($);if((k[d>>2]|0)==300){x=G;r=a;return x|0}ap(w);if(!w){x=G;r=a;return x|0}Ec[k[(k[w>>2]|0)+4>>2]&1023](w);x=G;r=a;return x|0}function Gfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134272,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,368,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Hfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134272,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,371,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Ifa(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,339);return}function Jfa(a,b){a=a|0;b=b|0;return}function Kfa(a){a=a|0;Sqa(a);return}function Lfa(a,b,c){a=a|0;b=b|0;c=c|0;return}function Mfa(a,b,c){a=a|0;b=b|0;c=c|0;return}function Nfa(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,515,738,534);return}function Ofa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Pfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}if((k[c+40>>2]|0)!=301)return;Zka(c,b,136615,287);return}function Qfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function Rfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134381,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,40,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Sfa(a,b){a=a|0;b=b|0;return 0}function Tfa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134381,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,47,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Ufa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;a=r;r=r+16|0;c=a;d=a+12|0;e=a+8|0;k[d>>2]=0;cp(b,e,299);f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;g=gq(b,534)|0;h=ma(k[e>>2]|0,f)|0;i=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,d);h=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;j=Hc[k[(k[h>>2]|0)+8>>2]&511](h)|0;a:do if((j|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0)){l=h+8|0;m=g+12|0;if((f|0)>0)n=j;else{o=j;while(1){Fc[k[(k[h>>2]|0)+24>>2]&1023](h,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[d>>2]|0,h);rd[k[(k[b>>2]|0)+340>>2]&511](b,i,k[d>>2]|0,h);o=o+1|0;if((o|0)>=(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0))break a}}do{Fc[k[(k[h>>2]|0)+24>>2]&1023](h,n);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[d>>2]|0,h);rd[k[(k[b>>2]|0)+340>>2]&511](b,i,k[d>>2]|0,h);o=ma((k[e>>2]|0)+-1|0,f)|0;q=k[m>>2]|0;s=0;do{t=i+(o+s<<3)|0;u=ma(s,f)|0;v=0;do{w=q+(v+u<<3)|0;p[w>>3]=+p[w>>3]+ +p[l>>3]*+p[c>>3]*(+p[t>>3]*+p[i+(o+v<<3)>>3]);v=v+1|0}while((v|0)!=(f|0));s=s+1|0}while((s|0)!=(f|0));n=n+1|0}while((n|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0))}while(0);n=k[d>>2]|0;if(!n){k[d>>2]=0;x=k[h>>2]|0;y=x+4|0;z=k[y>>2]|0;Ec[z&1023](h);r=a;return g|0}Tqa(n);k[d>>2]=0;x=k[h>>2]|0;y=x+4|0;z=k[y>>2]|0;Ec[z&1023](h);r=a;return g|0}function Vfa(a,b){a=a|0;b=b|0;return 0}function Wfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134381,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,94,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Xfa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134381,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,97,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Yfa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;cp(c,d,575);nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[d>>2]|0);r=a;return}function Zfa(a,b){a=a|0;b=b|0;return}function _fa(a){a=a|0;Sqa(a);return}function $fa(a,b,c){a=a|0;b=b|0;c=c|0;return}function aga(a,b,c){a=a|0;b=b|0;c=c|0;return}function bga(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,516,738,534);return}function cga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function dga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}if((k[c+40>>2]|0)!=301)return;Zka(c,b,136615,287);return}function ega(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function fga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134490,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,40,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gga(a,b){a=a|0;b=b|0;return 0}function hga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134490,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,47,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function iga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;a=r;r=r+16|0;c=a;d=a+12|0;e=a+8|0;k[d>>2]=0;cp(b,e,299);f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;g=gq(b,534)|0;h=ma(k[e>>2]|0,f)|0;i=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,d);h=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;j=Hc[k[(k[h>>2]|0)+8>>2]&511](h)|0;a:do if((j|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0)){l=h+8|0;m=g+12|0;if((f|0)>0)n=j;else{o=j;while(1){Fc[k[(k[h>>2]|0)+24>>2]&1023](h,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[d>>2]|0,h);rd[k[(k[b>>2]|0)+340>>2]&511](b,i,k[d>>2]|0,h);o=o+1|0;if((o|0)>=(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0))break a}}do{Fc[k[(k[h>>2]|0)+24>>2]&1023](h,n);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[d>>2]|0,h);rd[k[(k[b>>2]|0)+340>>2]&511](b,i,k[d>>2]|0,h);o=ma((k[e>>2]|0)+-1|0,f)|0;q=k[m>>2]|0;s=0;do{t=i+(o+s<<3)|0;u=ma(s,f)|0;v=0;do{w=q+(v+u<<3)|0;p[w>>3]=+p[w>>3]+ +p[l>>3]*+p[c>>3]*(+p[t>>3]*+p[i+(o+v<<3)>>3]);v=v+1|0}while((v|0)!=(f|0));s=s+1|0}while((s|0)!=(f|0));n=n+1|0}while((n|0)<(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0))}while(0);n=k[d>>2]|0;if(!n){k[d>>2]=0;x=k[h>>2]|0;y=x+4|0;z=k[y>>2]|0;Ec[z&1023](h);r=a;return g|0}Tqa(n);k[d>>2]=0;x=k[h>>2]|0;y=x+4|0;z=k[y>>2]|0;Ec[z&1023](h);r=a;return g|0}function jga(a,b){a=a|0;b=b|0;return 0}function kga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134490,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,94,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function lga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134490,82);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,97,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function mga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;cp(c,d,575);nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[d>>2]|0);r=a;return}function nga(a,b){a=a|0;b=b|0;return}function oga(a){a=a|0;Sqa(a);return}function pga(a,b,c){a=a|0;b=b|0;c=c|0;return}function qga(a,b,c){a=a|0;b=b|0;c=c|0;return}function rga(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,517,738,534);return}function sga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function tga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}if((k[c+40>>2]|0)!=301)return;Zka(c,b,136615,287);return}function uga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function vga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134596,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,40,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function wga(a,b){a=a|0;b=b|0;return 0}function xga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134596,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,47,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function yga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;a=r;r=r+32|0;c=a+20|0;d=a+8|0;e=a;f=a+16|0;k[f>>2]=0;cp(b,c,299);g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=gq(b,534)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;Uo(b,f);j=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;l=Hc[k[(k[j>>2]|0)+8>>2]&511](j)|0;if((l|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0)){m=j+8|0;n=h+12|0;o=l;do{Fc[k[(k[j>>2]|0)+24>>2]&1023](j,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,j);l=k[c>>2]|0;q=k[f>>2]|0;s=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;t=ma(s,l)|0;u=Rqa(t>>>0>536870911?-1:t<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,u,q,j);if((s|0)>0)TEa(i|0,u+(ma((l<<3)+-8|0,s)|0)|0,s<<3|0)|0;Tqa(u);p[e>>3]=+p[m>>3]*+p[d>>3]*1.0e9;ZX(i,1,g,1,e,1,1,0,i,1,g,0,k[n>>2]|0,1)|0;p[e>>3]=+p[m>>3]*+p[d>>3];nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,j);ZX(i,g,1,0,e,1,1,0,i,1,g,0,k[n>>2]|0,1)|0;o=o+1|0}while((o|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0))}o=k[f>>2]|0;if(!o){k[f>>2]=0;Tqa(i);v=k[j>>2]|0;w=v+4|0;x=k[w>>2]|0;Ec[x&1023](j);r=a;return h|0}Tqa(o);k[f>>2]=0;Tqa(i);v=k[j>>2]|0;w=v+4|0;x=k[w>>2]|0;Ec[x&1023](j);r=a;return h|0}function zga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0;a=r;r=r+32|0;c=a+20|0;d=a+8|0;e=a;f=a+16|0;k[f>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=iq(b,534)|0;i=Rqa(g>>>0>536870911?-1:g<<3)|0;Uo(b,f);cp(b,c,577);j=Wo(b,k[c>>2]|0)|0;c=ed[k[(k[b>>2]|0)+308>>2]&511](b,3)|0;l=Hc[k[(k[c>>2]|0)+8>>2]&511](c)|0;a:do if((l|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){m=c+8|0;n=h+4|0;if((g|0)>0)o=l;else{q=l;while(1){Fc[k[(k[c>>2]|0)+24>>2]&1023](c,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,c);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,c);nd[k[(k[j>>2]|0)+48>>2]&1023](j,e,c);q=q+1|0;if((q|0)>=(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0))break a}}do{Fc[k[(k[c>>2]|0)+24>>2]&1023](c,o);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[f>>2]|0,c);nd[k[(k[b>>2]|0)+336>>2]&1023](b,i,c);nd[k[(k[j>>2]|0)+48>>2]&1023](j,e,c);s=+p[e>>3]*+p[d>>3]*+p[m>>3];q=k[n>>2]|0;t=0;do{u=q+(t<<3)|0;p[u>>3]=s*+p[i+(t<<3)>>3]+ +p[u>>3];t=t+1|0}while((t|0)!=(g|0));o=o+1|0}while((o|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0))}while(0);Tqa(i);i=k[f>>2]|0;if(!i){k[f>>2]=0;v=k[c>>2]|0;w=v+4|0;x=k[w>>2]|0;Ec[x&1023](c);r=a;return h|0}Tqa(i);k[f>>2]=0;v=k[c>>2]|0;w=v+4|0;x=k[w>>2]|0;Ec[x&1023](c);r=a;return h|0}function Aga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134596,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,160,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Bga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134596,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,163,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Cga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;cp(c,d,577);nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[d>>2]|0);r=a;return}function Dga(a,b){a=a|0;b=b|0;return}function Ega(a){a=a|0;Sqa(a);return}function Fga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;a=r;r=r+368|0;d=a+348|0;e=a+200|0;f=a+336|0;g=a+184|0;h=a+36|0;i=a+48|0;j=a+24|0;l=a+12|0;m=a;if((k[c+40>>2]|0)!=302){n=e+56|0;o=e+4|0;k[e>>2]=27524;k[n>>2]=27544;B=0;wa(508,e+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=e+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(o);u=x;v=w;break}Yua(d);B=0;w=Ia(40,e|0,134695,17)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,134713,75);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,135838,17);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(f);D=A;E=C;break}B=0;wa(510,h|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;G=C;H=1}else{B=0;ua(163,y|0,f|0,g|0,14,h|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(h);F=A;G=C;H=I}Yua(g);Yua(f);if(H){D=G;E=F}else{J=G;K=F;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=D;K=E}else L=17;while(0);if((L|0)==17){w=Rb()|0;J=w;K=Q}k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=K;N=J;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}s=c+28|0;b:do switch(k[s>>2]|0){case 518:case 522:break;case 523:{Fka(c,d,134789);switch(k[d>>2]|0){case 438:case 457:break;default:break b}soa(b,c,134812,521,738,0);r=a;return}default:{n=i+56|0;v=i+4|0;k[i>>2]=27524;k[n>>2]=27544;B=0;wa(508,i+56|0,v|0);u=B;B=0;if(u&1){u=Rb()|0;O=Q;P=u;vva(n);Qb(P|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[n>>2]=27488;B=0;va(448,v|0);u=B;B=0;do if(u&1){q=Rb()|0;R=Q;S=q}else{k[v>>2]=27560;q=i+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(d);Yua(q);Ava(v);R=K;S=J;break}Yua(d);B=0;J=Ia(40,i|0,134802,9)|0;K=B;B=0;c:do if((((!(K&1)?(B=0,o=ya(427,k[s>>2]|0)|0,e=B,B=0,!(e&1)):0)?(e=Lta(o)|0,B=0,E=Ia(40,J|0,o|0,e|0)|0,e=B,B=0,!(e&1)):0)?(B=0,e=Ia(40,E|0,146481,18)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,e|0,0)|0,e=B,B=0,!(e&1)):0){e=Ab(20)|0;B=0;eb(502,j|0,134713,75);E=B;B=0;do if(!(E&1)){B=0;eb(502,l|0,135838,17);o=B;B=0;if(o&1){o=Rb()|0;D=Q;Yua(j);T=o;U=D;break}B=0;wa(510,m|0,v|0);D=B;B=0;if(D&1){D=Rb()|0;V=1;W=Q;X=D}else{B=0;ua(163,e|0,j|0,l|0,31,m|0);D=B;B=0;if(D&1)Y=1;else{B=0;eb(503,e|0,1240,229);B=0;Y=0}D=Rb()|0;o=Q;Yua(m);V=Y;W=o;X=D}Yua(l);Yua(j);if(V){T=X;U=W}else{Z=W;_=X;break c}}else{D=Rb()|0;T=D;U=Q}while(0);zb(e|0);Z=U;_=T}else L=45;while(0);if((L|0)==45){J=Rb()|0;Z=Q;_=J}k[i>>2]=27468;k[n>>2]=27488;k[v>>2]=27560;Yua(q);Ava(v);vva(n);M=Z;N=_;Qb(N|0)}while(0);O=R;P=S;vva(n);Qb(P|0)}}while(0);qoa(b,c,134812,521,738,0);r=a;return}function Gga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+208|0;d=a+8|0;e=a;f=a+184|0;g=a+48|0;h=a+36|0;i=a+24|0;j=a+12|0;if((k[c+40>>2]|0)!=300){k[e>>2]=134812;Ska(c,1,e);foa(c);e=c+52|0;if((k[e>>2]|0)<=0){k[d>>2]=134812;Lka(c,1,d);r=a;return}l=c+36|0;m=c+104|0;n=0;while(1){if((k[(k[l>>2]|0)+(n<<2)>>2]|0)!=0?(o=(Jka(c,134812)|0)+(n<<3)|0,q=+$(+(+p[o>>3])),p[t>>3]=q,o=k[t+4>>2]|0,o>>>0>2146435072|(o|0)==2146435072&(k[t>>2]|0)>>>0>0):0){o=Qqa(52)|0;B=0;ua(177,o|0,n+1+(k[m>>2]|0)|0,n|0,c|0,521);s=B;B=0;if(s&1){u=o;break}ih(b,o)|0}n=n+1|0;if((n|0)>=(k[e>>2]|0)){v=27;break}}if((v|0)==27){k[d>>2]=134812;Lka(c,1,d);r=a;return}a=Rb()|0;d=Q;Sqa(u);w=d;x=a;Qb(x|0)}a=g+56|0;d=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;vva(a);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,d|0);u=B;B=0;do if(u&1){c=Rb()|0;A=Q;C=c}else{k[d>>2]=27560;c=g+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;n=Q;Yua(f);Yua(c);Ava(d);A=n;C=e;break}Yua(f);B=0;e=Ia(40,g|0,134838,27)|0;n=B;B=0;a:do if(!(n&1)?(B=0,Xa(239,e|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,134713,75);m=B;B=0;do if(!(m&1)){B=0;eb(502,i|0,135856,11);l=B;B=0;if(l&1){l=Rb()|0;o=Q;Yua(h);D=o;E=l;break}B=0;wa(510,j|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;F=Q;G=l;H=1}else{B=0;ua(163,b|0,h|0,i|0,44,j|0);l=B;B=0;if(l&1)I=1;else{B=0;eb(503,b|0,1240,229);B=0;I=0}l=Rb()|0;o=Q;Yua(j);F=o;G=l;H=I}Yua(i);Yua(h);if(H){D=F;E=G}else{J=F;K=G;break a}}else{l=Rb()|0;D=Q;E=l}while(0);zb(b|0);J=D;K=E}else v=17;while(0);if((v|0)==17){e=Rb()|0;J=Q;K=e}k[g>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(c);Ava(d);vva(a);w=J;x=K;Qb(x|0)}while(0);y=A;z=C;vva(a);Qb(z|0)}function Hga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)==302){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,521,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function Iga(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Jga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;a=r;r=r+208|0;f=a+188|0;g=a+184|0;h=a+180|0;j=a+176|0;l=a+201|0;m=a+200|0;n=a+40|0;o=a+24|0;p=a+12|0;q=a;s=c+40|0;if((k[s>>2]|0)==300){r=a;return}t=c+56|0;u=k[t>>2]|0;if((u|0)>0){v=c+32|0;w=u;u=0;x=0;while(1){if(!(i[(k[v>>2]|0)+x>>0]|0)){y=w;z=u}else{A=qh(b,u)|0;Uc[k[(k[A>>2]|0)+480>>2]&63](A,x,c,d,e,738);y=k[t>>2]|0;z=u+1|0}x=x+1|0;if((x|0)>=(y|0))break;else{w=y;u=z}}}zka(c,l,134866);zka(c,m,134882);Fka(c,g,134909);Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,134962,928);if((k[s>>2]|0)!=300){Zka(c,b,136615,287);Zka(c,b,136636,288)}Zka(c,b,136615,287);Zka(c,b,136636,288);Zka(c,b,134991,214);Zka(c,b,135015,217);Zka(c,b,135039,653);Zka(c,b,135066,666);Zka(c,b,135923,674);Zka(c,b,135944,677);Zka(c,b,135096,679);woa(b,0.0,684);woa(b,0.0,685);woa(b,0.0,686);if(i[m>>0]|0)Zka(c,b,136615,287);Fka(c,h,135117);if((k[h>>2]|0)!=62)Zka(c,b,135140,38);switch(k[g>>2]|0){case 1:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);break}case 2:{Zka(c,b,135224,110);Zka(c,b,135238,109);break}case 3:{Fka(c,j,135252);Zka(c,b,135224,110);Zka(c,b,135273,104);Zka(c,b,135210,108);if(!(k[j>>2]|0))Zka(c,b,135288,115);break}case 4:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135039,653);Zka(c,b,135066,666);break}case 5:{Zka(c,b,135172,105);Zka(c,b,135196,107);Zka(c,b,135210,108);Zka(c,b,135319,114);break}case 6:{Zka(c,b,135224,110);Zka(c,b,135238,109);Zka(c,b,135039,653);Zka(c,b,135066,666);break}default:{b=n+56|0;c=n+4|0;k[n>>2]=27524;k[b>>2]=27544;B=0;wa(508,n+56|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;C=Q;D=j;vva(b);Qb(D|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[b>>2]=27488;B=0;va(448,c|0);j=B;B=0;do if(j&1){g=Rb()|0;E=Q;F=g}else{k[c>>2]=27560;g=n+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);h=B;B=0;if(h&1){h=Rb()|0;m=Q;Yua(f);Yua(g);Ava(c);E=m;F=h;break}Yua(f);B=0;h=Ia(40,n|0,145010,13)|0;m=B;B=0;if(!(m&1)?(B=0,Xa(239,h|0,0)|0,h=B,B=0,!(h&1)):0){h=Ab(20)|0;B=0;eb(502,o|0,134713,75);m=B;B=0;do if(!(m&1)){B=0;eb(502,p|0,136133,14);s=B;B=0;if(s&1){s=Rb()|0;l=Q;Yua(o);G=l;H=s;break}B=0;wa(510,q|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;I=Q;J=s;K=1}else{B=0;ua(163,h|0,o|0,p|0,170,q|0);s=B;B=0;if(s&1)L=1;else{B=0;eb(503,h|0,1240,229);B=0;L=0}s=Rb()|0;l=Q;Yua(q);I=l;J=s;K=L}Yua(p);Yua(o);if(K){G=I;H=J}else{M=I;N=J;k[n>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(g);Ava(c);vva(b);Qb(N|0)}}else{s=Rb()|0;G=Q;H=s}while(0);zb(h|0);M=G;N=H;k[n>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(g);Ava(c);vva(b);Qb(N|0)}m=Rb()|0;M=Q;N=m;k[n>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(g);Ava(c);vva(b);Qb(N|0)}while(0);C=E;D=F;vva(b);Qb(D|0)}}r=a;return}function Kga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;d=e+8|0;a=e+4|0;f=e;k[a>>2]=0;YN(b,Ika(c,135343,343)|0);YN(b,Ika(c,135362,348)|0);YN(b,Ika(c,135387,344)|0);YN(b,Ika(c,135413,346)|0);YN(b,Ika(c,135442,345)|0);YN(b,Ika(c,135466,340)|0);YN(b,Ika(c,135488,341)|0);YN(b,Ika(c,134909,111)|0);Hka(c,a,d,135517);g=Qqa(12)|0;B=0;eb(518,g|0,349,k[d>>2]|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;Sqa(g);j=i;l=h;Qb(l|0)}YN(b,g);g=k[d>>2]|0;do if(!g)m=0;else{h=Qqa(16)|0;B=0;ib(294,h|0,350,k[a>>2]|0,g|0);i=B;B=0;if(!(i&1)){YN(b,h);m=k[d>>2]|0;break}i=Rb()|0;n=Q;Sqa(h);j=n;l=i;Qb(l|0)}while(0);Nka(c,a,m,135517);Fka(c,f,134909);m=k[f>>2]|0;if((m&-3|0)==4){YN(b,Ika(c,135546,112)|0);o=k[f>>2]|0}else o=m;if((o|0)!=3){r=e;return}YN(b,Ika(c,135252,116)|0);r=e;return}function Lga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134713,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,201,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Mga(a,b){a=a|0;b=b|0;return 0}function Nga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,134713,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,208,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Oga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!($p(b)|0)){c=0;return c|0}d=Pga(a,b)|0;a=Qga(0,b)|0;b=Qqa(68)|0;B=0;eb(515,b|0,d|0,a|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}if(d){HN(d);Sqa(d)}if(!a){c=b;return c|0}HN(a);Sqa(a);c=b;return c|0}function Pga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0,ua=0,va=0;a=r;r=r+256|0;c=a+244|0;d=a+232|0;e=a+224|0;f=a+216|0;g=a+208|0;h=a+200|0;i=a+192|0;j=a+184|0;l=a+176|0;m=a+168|0;n=a+160|0;o=a+152|0;q=a+144|0;s=a+240|0;t=a+72|0;u=a;if(!($p(b)|0)){v=0;r=a;return v|0}k[s>>2]=0;w=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;x=gq(b,534)|0;y=Rqa(w>>>0>536870911?-1:w<<3)|0;z=w*3|0;A=z>>>0>536870911?-1:z<<3;z=Rqa(A)|0;B=Rqa(A)|0;C=Rqa(A)|0;A=t;D=A+72|0;do{k[A>>2]=0;A=A+4|0}while((A|0)<(D|0));Uo(b,s);pp(b,e,358);cp(b,c,348);+Dp(b,266);E=+Dp(b,265);+Dp(b,65);F=+Dp(b,210);G=+Dp(b,270)/(E*F);A=Wo(b,674)|0;D=Wo(b,677)|0;H=Wo(b,679)|0;I=Wo(b,684)|0;J=Wo(b,685)|0;K=Wo(b,686)|0;if((k[c>>2]|0)==2)L=+id[k[(k[b>>2]|0)+292>>2]&63](b,k[s>>2]|0);else L=0.0;M=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;N=Hc[k[(k[M>>2]|0)+8>>2]&511](M)|0;a:do if((N|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0)){O=M+8|0;P=t+32|0;Q=t+64|0;R=x+12|0;S=u+8|0;T=u+16|0;U=u+24|0;V=u+32|0;W=u+40|0;X=u+48|0;Y=u+56|0;Z=u+64|0;_=(w|0)>0;ba=w<<1;ca=N;while(1){Fc[k[(k[M>>2]|0)+24>>2]&1023](M,ca);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[s>>2]|0,M);F=+p[O>>3]*+p[d>>3];p[q>>3]=F;E=+p[e>>3];if(E!=0.0)p[q>>3]=F*E;da=k[s>>2]|0;ea=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;fa=ea*3|0;ga=Rqa(fa>>>0>536870911?-1:fa<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ga,da,M);if((ea|0)>0){da=ea<<1;fa=0;do{p[B+(fa<<3)>>3]=+p[ga+(fa<<3)>>3];ha=fa+ea|0;p[B+(ha<<3)>>3]=+p[ga+(ha<<3)>>3];ha=fa+da|0;p[B+(ha<<3)>>3]=+p[ga+(ha<<3)>>3];fa=fa+1|0}while((fa|0)!=(ea|0))}Tqa(ga);E=G*+p[q>>3];p[t>>3]=E;p[P>>3]=E;p[Q>>3]=E;ZX(B,3,w,1,t,3,3,0,B,3,w,0,k[R>>2]|0,1)|0;ea=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;fa=Rqa(ea>>>0>536870911?-1:ea<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,fa,M);if((ea|0)>0){da=ea<<1;ha=0;do{E=+p[fa+(ha<<3)>>3];p[B+(ha<<3)>>3]=E;p[B+(ha+ea<<3)>>3]=E;p[B+(ha+da<<3)>>3]=E;ha=ha+1|0}while((ha|0)!=(ea|0))}Tqa(fa);ea=k[s>>2]|0;ha=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;da=ha*3|0;ga=Rqa(da>>>0>536870911?-1:da<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,ga,ea,M);if((ha|0)>0){ea=ha<<1;da=0;do{p[C+(da<<3)>>3]=+p[ga+(da<<3)>>3];ia=da+ha|0;p[C+(ia<<3)>>3]=+p[ga+(ia<<3)>>3];ia=da+ea|0;p[C+(ia<<3)>>3]=+p[ga+(ia<<3)>>3];da=da+1|0}while((da|0)!=(ha|0))}Tqa(ga);nd[k[(k[A>>2]|0)+48>>2]&1023](A,f,M);nd[k[(k[I>>2]|0)+48>>2]&1023](I,i,M);E=+p[f>>3]-+p[i>>3];nd[k[(k[D>>2]|0)+48>>2]&1023](D,g,M);nd[k[(k[J>>2]|0)+48>>2]&1023](J,j,M);F=+p[g>>3]-+p[j>>3];nd[k[(k[H>>2]|0)+48>>2]&1023](H,h,M);nd[k[(k[K>>2]|0)+48>>2]&1023](K,l,M);ja=+p[h>>3]-+p[l>>3];ka=+p[q>>3];p[t>>3]=E*ka;p[P>>3]=F*ka;p[Q>>3]=ka*ja;ZX(B,3,w,1,t,3,3,0,C,3,w,0,k[R>>2]|0,1)|0;if(+p[e>>3]!=0.0){p[q>>3]=+p[O>>3]*+p[d>>3];nd[k[(k[b>>2]|0)+336>>2]&1023](b,y,M);ZX(y,w,1,0,q,1,1,0,y,1,w,0,k[R>>2]|0,1)|0;p[q>>3]=+p[q>>3]*+p[e>>3]}switch(k[c>>2]|0){case 1:{rd[k[(k[b>>2]|0)+108>>2]&511](b,m,n,o);ka=E*E;la=F*F;na=ja*ja;oa=+aa(+(ka+la+na))+1.0e-14;pa=E*+p[m>>3]/oa;qa=F*+p[n>>3]/oa;ra=ja*+p[o>>3]/oa;sa=+aa(+(pa*pa+qa*qa+ra*ra))/(oa*2.0);oa=sa*+$(+(E*F));ra=sa*+$(+(E*ja));E=sa*+$(+(F*ja));ja=+p[q>>3];p[u>>3]=ja*(ka*sa);ka=ja*oa;p[S>>3]=ka;oa=ja*ra;p[T>>3]=oa;p[U>>3]=ka;p[V>>3]=ja*(la*sa);la=ja*E;p[W>>3]=la;p[X>>3]=oa;p[Y>>3]=la;p[Z>>3]=ja*(na*sa);ha=k[s>>2]|0;da=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;ea=da*3|0;fa=Rqa(ea>>>0>536870911?-1:ea<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,fa,ha,M);if((da|0)>0){ha=da<<1;ea=0;do{p[C+(ea<<3)>>3]=+p[fa+(ea<<3)>>3];ia=ea+da|0;p[C+(ia<<3)>>3]=+p[fa+(ia<<3)>>3];ia=ea+ha|0;p[C+(ia<<3)>>3]=+p[fa+(ia<<3)>>3];ea=ea+1|0}while((ea|0)!=(da|0))}Tqa(fa);ZX(C,3,w,1,u,3,3,0,C,3,w,0,k[R>>2]|0,1)|0;break}case 2:{rd[k[(k[b>>2]|0)+340>>2]&511](b,z,k[s>>2]|0,M);sa=+Pc[k[(k[b>>2]|0)+440>>2]&7](b,+p[f>>3]-+p[i>>3],+p[g>>3]-+p[j>>3],+p[h>>3]-+p[l>>3],L,G);if(_){da=k[R>>2]|0;ea=0;do{ha=z+(ea<<3)|0;ga=z+(ea+w<<3)|0;ia=z+(ea+ba<<3)|0;ta=ma(ea,w)|0;ua=0;do{na=+p[f>>3]-+p[i>>3];ja=+p[g>>3]-+p[j>>3];la=+p[h>>3]-+p[l>>3];va=da+(ua+ta<<3)|0;p[va>>3]=+p[va>>3]+sa*+p[q>>3]*(na*+p[ha>>3]+ja*+p[ga>>3]+la*+p[ia>>3])*(na*+p[z+(ua<<3)>>3]+ja*+p[z+(ua+w<<3)>>3]+la*+p[z+(ua+ba<<3)>>3]);ua=ua+1|0}while((ua|0)!=(w|0));ea=ea+1|0}while((ea|0)!=(w|0))}if(+p[e>>3]!=0.0?(p[q>>3]=+p[O>>3]*+p[d>>3],_):0){ea=k[R>>2]|0;da=0;do{fa=z+(da<<3)|0;ua=z+(da+w<<3)|0;ia=z+(da+ba<<3)|0;ga=ma(da,w)|0;ha=0;do{ta=ea+(ha+ga<<3)|0;p[ta>>3]=+p[ta>>3]+sa*+p[q>>3]*+p[y+(ha<<3)>>3]*((+p[f>>3]-+p[i>>3])*+p[fa>>3]+(+p[g>>3]-+p[j>>3])*+p[ua>>3]+(+p[h>>3]-+p[l>>3])*+p[ia>>3]);ha=ha+1|0}while((ha|0)!=(w|0));da=da+1|0}while((da|0)!=(w|0))}break}default:{}}ca=ca+1|0;if((ca|0)>=(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0))break a}}while(0);w=k[s>>2]|0;if(w)Tqa(w);k[s>>2]=0;Tqa(B);Tqa(C);Tqa(y);Tqa(z);Ec[k[(k[M>>2]|0)+4>>2]&1023](M);v=x;r=a;return v|0}function Qga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){g=0;r=a;return g|0}if(!(_p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0?_p(b)|0:0){h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=gq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,f);pp(b,c,358);+Dp(b,65);l=+Dp(b,266);m=+Dp(b,265);n=+Dp(b,210);o=+Dp(b,213);q=+Dp(b,269);s=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;t=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((t|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){u=s+8|0;v=m*n;w=i+12|0;x=t;do{Fc[k[(k[s>>2]|0)+24>>2]&1023](s,x);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,s);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,s);n=q*(o*(l*(+p[u>>3]*+p[d>>3])))/v;p[e>>3]=n;m=+p[c>>3];if(m!=0.0)p[e>>3]=m*n;ZX(j,h,1,0,e,1,1,0,j,1,h,0,k[w>>2]|0,1)|0;x=x+1|0}while((x|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))}Ec[k[(k[s>>2]|0)+4>>2]&1023](s);Tqa(j);j=k[f>>2]|0;if(j)Tqa(j);k[f>>2]=0;y=i}else y=0;g=y;r=a;return g|0}function Rga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;if(!($p(b)|0)){c=0;return c|0}a=Sga(0,b)|0;d=Tga(0,b)|0;e=Uga(0,b)|0;b=Qqa(24)|0;B=0;ib(300,b|0,a|0,d|0,e|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(b);Qb(f|0)}if(a){SN(a);Sqa(a)}if(d){SN(d);Sqa(d)}if(!e){c=b;return c|0}SN(e);Sqa(e);c=b;return c|0}function Sga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0.0,P=0.0,Q=0.0;a=r;r=r+64|0;c=a+60|0;d=a+48|0;e=a+40|0;f=a+32|0;g=a+24|0;h=a+16|0;i=a+8|0;j=a;l=a+56|0;if(!($p(b)|0)){m=0;r=a;return m|0}k[l>>2]=0;n=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;o=iq(b,534)|0;q=Rqa(n>>>0>536870911?-1:n<<3)|0;s=n*3|0;t=Rqa(s>>>0>536870911?-1:s<<3)|0;Uo(b,l);u=+Dp(b,265);v=+Dp(b,210);w=u*v;v=+Dp(b,270)/w;pp(b,f,358);cp(b,c,348);s=Wo(b,674)|0;x=Wo(b,677)|0;y=Wo(b,679)|0;if(+p[f>>3]!=0.0)z=Wo(b,666)|0;else z=0;if((k[c>>2]|0)==2)A=+id[k[(k[b>>2]|0)+292>>2]&63](b,k[l>>2]|0);else A=0.0;B=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;C=Hc[k[(k[B>>2]|0)+8>>2]&511](B)|0;if((C|0)<(Hc[k[(k[B>>2]|0)+12>>2]&511](B)|0)){D=B+8|0;E=(n|0)>0;F=o+4|0;G=n<<1;H=(n|0)<1;I=C;u=0.0;while(1){Fc[k[(k[B>>2]|0)+24>>2]&1023](B,I);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[l>>2]|0,B);nd[k[(k[b>>2]|0)+336>>2]&1023](b,q,B);ad[k[(k[b>>2]|0)+516>>2]&63](b,e,k[l>>2]|0,B,s,x,y);J=+p[e>>3]/w*+p[d>>3]*+p[D>>3];K=+p[f>>3];L=K!=0.0?J*K:J;if(E){C=k[F>>2]|0;M=0;do{N=C+(M<<3)|0;p[N>>3]=L*+p[q+(M<<3)>>3]+ +p[N>>3];M=M+1|0}while((M|0)!=(n|0));O=+p[f>>3]}else O=K;if(O!=0.0){nd[k[(k[z>>2]|0)+48>>2]&1023](z,g,B);J=+p[g>>3]*+p[d>>3]*+p[D>>3];if(E){M=k[F>>2]|0;C=0;do{N=M+(C<<3)|0;p[N>>3]=J*+p[q+(C<<3)>>3]+ +p[N>>3];C=C+1|0}while((C|0)!=(n|0));P=J}else P=J}else P=u;if((k[c>>2]|0)==2?(rd[k[(k[b>>2]|0)+340>>2]&511](b,t,k[l>>2]|0,B),nd[k[(k[s>>2]|0)+48>>2]&1023](s,h,B),nd[k[(k[x>>2]|0)+48>>2]&1023](x,i,B),nd[k[(k[y>>2]|0)+48>>2]&1023](y,j,B),K=+Pc[k[(k[b>>2]|0)+440>>2]&7](b,+p[h>>3],+p[i>>3],+p[j>>3],A,v),E):0){Q=L*K;C=k[F>>2]|0;M=0;do{N=C+(M<<3)|0;p[N>>3]=+p[N>>3]+Q*(+p[h>>3]*+p[t+(M<<3)>>3]+ +p[i>>3]*+p[t+(M+n<<3)>>3]+ +p[j>>3]*+p[t+(M+G<<3)>>3]);M=M+1|0}while((M|0)!=(n|0));if(!(+p[f>>3]==0.0|H)){Q=P*K;M=k[F>>2]|0;C=0;do{N=M+(C<<3)|0;p[N>>3]=+p[N>>3]+Q*(+p[h>>3]*+p[t+(C<<3)>>3]+ +p[i>>3]*+p[t+(C+n<<3)>>3]+ +p[j>>3]*+p[t+(C+G<<3)>>3]);C=C+1|0}while((C|0)!=(n|0))}}I=I+1|0;if((I|0)>=(Hc[k[(k[B>>2]|0)+12>>2]&511](B)|0))break;else u=P}}Tqa(q);Tqa(t);t=k[l>>2]|0;if(t)Tqa(t);k[l>>2]=0;Ec[k[(k[B>>2]|0)+4>>2]&1023](B);m=o;r=a;return m|0}function Tga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0,K=0;a=r;r=r+64|0;c=a+48|0;d=a+40|0;e=a+32|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+56|0;if(!($p(b)|0)){l=0;r=a;return l|0}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){l=0;r=a;return l|0}if(_p(b)|0){l=0;r=a;return l|0}k[j>>2]=0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=iq(b,534)|0;o=Rqa(m>>>0>536870911?-1:m<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,j);pp(b,c,358);q=Wo(b,674)|0;s=Wo(b,677)|0;t=Wo(b,679)|0;u=Wo(b,38)|0;v=+Dp(b,265);w=+Dp(b,210);x=Qqa(16)|0;B=0;eb(524,x|0,b|0,3);y=B;B=0;if(y&1){y=Rb()|0;Sqa(x);Qb(y|0)}y=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;z=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;a:do if((z|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){A=v*w;C=y+8|0;D=n+4|0;if((m|0)>0)E=z;else{F=z;while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,F);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[j>>2]|0,y);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,y);nd[k[(k[u>>2]|0)+48>>2]&1023](u,e,y);fla(x,i,y);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,y);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,y);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,y);p[h>>3]=0.0;F=F+1|0;if((F|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))break a}}do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,E);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[j>>2]|0,y);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,y);nd[k[(k[u>>2]|0)+48>>2]&1023](u,e,y);fla(x,i,y);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,y);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,y);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,y);p[h>>3]=0.0;G=+p[f>>3];H=+p[g>>3];I=+p[C>>3]*+p[d>>3]*((+p[e>>3]+ +p[i>>3]*(G*G+H*H+0.0))/A);H=+p[c>>3];G=H!=0.0?H*I:I;F=k[D>>2]|0;J=0;do{K=F+(J<<3)|0;p[K>>3]=G*+p[o+(J<<3)>>3]+ +p[K>>3];J=J+1|0}while((J|0)!=(m|0));E=E+1|0}while((E|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}while(0);Ec[k[(k[y>>2]|0)+4>>2]&1023](y);bla(x);Sqa(x);Tqa(o);o=k[j>>2]|0;if(o)Tqa(o);l=n;r=a;return l|0}function Uga(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;if(!($p(b)|0)){g=0;r=a;return g|0}k[f>>2]=0;if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0?_p(b)|0:0){h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Fc[k[(k[b>>2]|0)+188>>2]&1023](b,f);pp(b,c,358);l=Wo(b,653)|0;+Dp(b,65);m=+Dp(b,266);n=+Dp(b,265);o=+Dp(b,210);q=+Dp(b,213);s=+Dp(b,269);t=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;u=Hc[k[(k[t>>2]|0)+8>>2]&511](t)|0;a:do if((u|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0)){v=t+8|0;w=n*o;x=i+4|0;if((h|0)>0)y=u;else{z=u;while(1){Fc[k[(k[t>>2]|0)+24>>2]&1023](t,z);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,t);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,t);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,t);+uq(b,+p[e>>3]);z=z+1|0;if((z|0)>=(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))break a}}do{Fc[k[(k[t>>2]|0)+24>>2]&1023](t,y);rd[k[(k[b>>2]|0)+264>>2]&511](b,d,k[f>>2]|0,t);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,t);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,t);A=+uq(b,+p[e>>3]);B=A*(s*(q*(m*(+p[v>>3]*+p[d>>3]))))/w;A=+p[c>>3];C=A!=0.0?A*B:B;z=k[x>>2]|0;D=0;do{E=z+(D<<3)|0;p[E>>3]=C*+p[j+(D<<3)>>3]+ +p[E>>3];D=D+1|0}while((D|0)!=(h|0));y=y+1|0}while((y|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))}while(0);Ec[k[(k[t>>2]|0)+4>>2]&1023](t);Tqa(j);j=k[f>>2]|0;if(j)Tqa(j);k[f>>2]=0;F=i}else F=0;g=F;r=a;return g|0}function Vga(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,666);return}function Wga(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,134713,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,716,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Xga(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0.0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0;a=r;r=r+560|0;d=a+536|0;e=a+548|0;f=a+532|0;g=a+528|0;h=a+524|0;j=a+376|0;l=a+512|0;m=a+360|0;n=a+208|0;o=a+224|0;q=a+60|0;s=a+48|0;u=a+36|0;v=a+72|0;w=a+24|0;x=a+12|0;y=a;k[g>>2]=0;k[h>>2]=0;z=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,g,534,943);A=z>>>0>536870911?-1:z<<3;C=Rqa(A)|0;D=Rqa(A)|0;E=Rqa(A)|0;A=(z|0)>0;a:do if(A){F=k[g>>2]|0;G=0;while(1){H=+p[b+(k[F+(G<<2)>>2]<<3)>>3];p[C+(G<<3)>>3]=H;I=+$(+H);p[t>>3]=I;J=k[t>>2]|0;K=k[t+4>>2]|0;if(K>>>0>2146435072|(K|0)==2146435072&J>>>0>0){L=5;break}G=G+1|0;if((J|0)==0&(K|0)==2146435072){L=29;break}if((G|0)>=(z|0))break a}if((L|0)==5){G=j+56|0;F=j+4|0;k[j>>2]=27524;k[G>>2]=27544;B=0;wa(508,j+56|0,F|0);K=B;B=0;if(K&1){K=Rb()|0;M=Q;N=K;vva(G);Qb(N|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[G>>2]=27488;B=0;va(448,F|0);K=B;B=0;do if(K&1){J=Rb()|0;O=Q;P=J}else{k[F>>2]=27560;J=j+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,F|0,d|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(d);Yua(J);Ava(F);O=S;P=R;break}Yua(d);B=0;R=Ia(40,j|0,135564,28)|0;S=B;B=0;b:do if(!(S&1)?(B=0,Xa(239,R|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,l|0,134713,75);U=B;B=0;do if(!(U&1)){B=0;eb(502,m|0,137199,23);V=B;B=0;if(V&1){V=Rb()|0;W=Q;Yua(l);X=W;Y=V;break}B=0;wa(510,n|0,F|0);V=B;B=0;if(V&1){V=Rb()|0;Z=V;_=Q;aa=1}else{B=0;ua(163,T|0,l|0,m|0,740,n|0);V=B;B=0;if(V&1)ba=1;else{B=0;eb(503,T|0,1240,229);B=0;ba=0}V=Rb()|0;W=Q;Yua(n);Z=V;_=W;aa=ba}Yua(m);Yua(l);if(aa){X=_;Y=Z}else{ca=_;da=Z;break b}}else{W=Rb()|0;X=Q;Y=W}while(0);zb(T|0);ca=X;da=Y}else L=20;while(0);if((L|0)==20){R=Rb()|0;ca=Q;da=R}k[j>>2]=27468;k[G>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(G);ea=ca;fa=da;Qb(fa|0)}while(0);M=O;N=P;vva(G);Qb(N|0)}else if((L|0)==29){F=o+56|0;K=o+4|0;k[o>>2]=27524;k[F>>2]=27544;B=0;wa(508,o+56|0,K|0);R=B;B=0;if(R&1){R=Rb()|0;ga=Q;ha=R;vva(F);Qb(ha|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[F>>2]=27488;B=0;va(448,K|0);R=B;B=0;do if(R&1){S=Rb()|0;ia=Q;ja=S}else{k[K>>2]=27560;S=o+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,K|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;W=Q;Yua(d);Yua(S);Ava(K);ia=W;ja=U;break}Yua(d);B=0;U=Ia(40,o|0,135593,28)|0;W=B;B=0;c:do if(!(W&1)?(B=0,Xa(239,U|0,0)|0,V=B,B=0,!(V&1)):0){V=Ab(20)|0;B=0;eb(502,q|0,134713,75);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,s|0,137199,23);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(q);na=la;oa=ma;break}B=0;wa(510,u|0,K|0);ma=B;B=0;if(ma&1){ma=Rb()|0;pa=1;qa=Q;ra=ma}else{B=0;ua(163,V|0,q|0,s|0,741,u|0);ma=B;B=0;if(ma&1)sa=1;else{B=0;eb(503,V|0,1240,229);B=0;sa=0}ma=Rb()|0;la=Q;Yua(u);pa=sa;qa=la;ra=ma}Yua(s);Yua(q);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break c}}else{ma=Rb()|0;na=ma;oa=Q}while(0);zb(V|0);ta=oa;xa=na}else L=44;while(0);if((L|0)==44){U=Rb()|0;ta=Q;xa=U}k[o>>2]=27468;k[F>>2]=27488;k[K>>2]=27560;Yua(S);Ava(K);vva(F);ea=ta;fa=xa;Qb(fa|0)}while(0);ga=ia;ha=ja;vva(F);Qb(ha|0)}}while(0);zp(c,e,645);ha=(i[e>>0]|0)==0;e=k[c>>2]|0;ja=k[e+48>>2]|0;ia=Hc[k[e+128>>2]&511](c)|0;d:do if(ha)rd[ja&511](c,667,C,ia);else{rd[ja&511](c,666,C,ia);cp(c,f,216);vp(c,D,339);switch(k[f>>2]|0){case 921:{break d;break}case 984:{if(A){e=0;do{I=+Xna(+p[C+(e<<3)>>3]);p[E+(e<<3)>>3]=I;e=e+1|0}while((e|0)!=(z|0))}e=k[c>>2]|0;F=k[e+48>>2]|0;ga=Hc[k[e+128>>2]&511](c)|0;rd[F&511](c,214,E,ga);break d;break}case 987:{if(A){ga=0;do{I=+Zna(+p[C+(ga<<3)>>3]);p[E+(ga<<3)>>3]=I;ga=ga+1|0}while((ga|0)!=(z|0))}ga=k[c>>2]|0;F=k[ga+48>>2]|0;e=Hc[k[ga+128>>2]&511](c)|0;rd[F&511](c,214,E,e);break d;break}case 988:{Uo(c,h);if(A){e=0;do{I=+p[C+(e<<3)>>3];H=+p[D+(e<<3)>>3]-+p[(k[h>>2]|0)+((e*3|0)+2<<3)>>3];za=+_na(I,H,+Dp(c,217));p[E+(e<<3)>>3]=za;e=e+1|0}while((e|0)!=(z|0))}e=k[c>>2]|0;F=k[e+48>>2]|0;ga=Hc[k[e+128>>2]&511](c)|0;rd[F&511](c,214,E,ga);break d;break}default:{ga=v+56|0;F=v+4|0;k[v>>2]=27524;k[ga>>2]=27544;B=0;wa(508,v+56|0,F|0);e=B;B=0;if(e&1){e=Rb()|0;Aa=Q;Ba=e;vva(ga);Qb(Ba|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[ga>>2]=27488;B=0;va(448,F|0);e=B;B=0;do if(e&1){xa=Rb()|0;Ca=Q;Da=xa}else{k[F>>2]=27560;xa=v+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[v+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,F|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;o=Q;Yua(d);Yua(xa);Ava(F);Ca=o;Da=ta;break}Yua(d);B=0;ta=Ia(40,v|0,135622,13)|0;o=B;B=0;e:do if((((!(o&1)?(B=0,na=ya(427,k[f>>2]|0)|0,oa=B,B=0,!(oa&1)):0)?(oa=Lta(na)|0,B=0,ra=Ia(40,ta|0,na|0,oa|0)|0,oa=B,B=0,!(oa&1)):0)?(B=0,oa=Ia(40,ra|0,146481,18)|0,ra=B,B=0,!(ra&1)):0)?(B=0,Xa(239,oa|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,w|0,134713,75);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,x|0,137199,23);na=B;B=0;if(na&1){na=Rb()|0;qa=Q;Yua(w);Ea=na;Fa=qa;break}B=0;wa(510,y|0,F|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Ga=1;Ha=Q;Ja=qa}else{B=0;ua(163,oa|0,w|0,x|0,785,y|0);qa=B;B=0;if(qa&1)Ka=1;else{B=0;eb(503,oa|0,1240,229);B=0;Ka=0}qa=Rb()|0;na=Q;Yua(y);Ga=Ka;Ha=na;Ja=qa}Yua(x);Yua(w);if(Ga){Ea=Ja;Fa=Ha}else{La=Ha;Ma=Ja;break e}}else{qa=Rb()|0;Ea=qa;Fa=Q}while(0);zb(oa|0);La=Fa;Ma=Ea}else L=81;while(0);if((L|0)==81){ta=Rb()|0;La=Q;Ma=ta}k[v>>2]=27468;k[ga>>2]=27488;k[F>>2]=27560;Yua(xa);Ava(F);vva(ga);ea=La;fa=Ma;Qb(fa|0)}while(0);Aa=Ca;Ba=Da;vva(ga);Qb(Ba|0)}}}while(0);Tqa(C);Tqa(D);Tqa(E);E=k[h>>2]|0;if(E)Tqa(E);k[h>>2]=0;h=k[g>>2]|0;if(!h){r=a;return}Tqa(h);r=a;return}function Yga(a,b){a=a|0;b=b|0;RZ(b);return}function Zga(a){a=a|0;Sqa(a);return}function _ga(a,b,c){a=a|0;b=b|0;c=c|0;return}function $ga(a,b,c){a=a|0;b=b|0;c=c|0;return}function aha(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,520,738,534);return}function bha(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function cha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)<=0)return;g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}return}function dha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function eha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135653,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,37,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function fha(a,b){a=a|0;b=b|0;return 0}function gha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135653,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function hha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+224|0;c=a+208|0;d=a+204|0;e=a+16|0;f=a+8|0;g=a;h=a+200|0;i=a+64|0;j=a+48|0;l=a+36|0;m=a+24|0;k[h>>2]=0;cp(b,d,298);if((k[d>>2]|0)==300){n=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;o=gq(b,534)|0;q=n<<1;s=Rqa(q>>>0>536870911?-1:q<<3)|0;q=Rqa(n>>>0>536870911?-1:n<<3)|0;pp(b,g,579);Uo(b,h);t=Wo(b,353)|0;u=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;v=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;if((v|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){w=(n|0)>0;x=u+8|0;y=o+12|0;z=v;do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,z);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[h>>2]|0,u);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,u);if(+p[f>>3]<50.0)p[f>>3]=50.0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,q,u);rd[k[(k[b>>2]|0)+340>>2]&511](b,s,k[h>>2]|0,u);if(w){v=k[y>>2]|0;A=0;do{C=q+(A<<3)|0;D=s+(A<<3)|0;E=s+(A+n<<3)|0;F=ma(A,n)|0;G=0;do{H=+p[g>>3]*+p[f>>3];I=v+(G+F<<3)|0;p[I>>3]=+p[I>>3]+ +p[x>>3]*+p[e>>3]*(+p[C>>3]*+p[q+(G<<3)>>3]+H*H*(+p[D>>3]*+p[s+(G<<3)>>3]+ +p[E>>3]*+p[s+(G+n<<3)>>3]));G=G+1|0}while((G|0)!=(n|0));A=A+1|0}while((A|0)!=(n|0))}z=z+1|0}while((z|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Tqa(s);Tqa(q);q=k[h>>2]|0;if(!q){r=a;return o|0}Tqa(q);r=a;return o|0}o=i+56|0;a=i+4|0;k[i>>2]=27524;k[o>>2]=27544;B=0;wa(508,i+56|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;J=Q;K=q;vva(o);Qb(K|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[o>>2]=27488;B=0;va(448,a|0);q=B;B=0;do if(q&1){h=Rb()|0;L=Q;M=h}else{k[a>>2]=27560;h=i+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;u=Q;Yua(c);Yua(h);Ava(a);L=u;M=s;break}Yua(c);B=0;s=Ia(40,i|0,144639,5)|0;u=B;B=0;if((((!(u&1)?(B=0,u=ya(427,k[d>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(u)|0,B=0,n=Ia(40,s|0,u|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,n|0,146481,18)|0,n=B,B=0,!(n&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,135653,74);n=B;B=0;do if(!(n&1)){B=0;eb(502,l|0,144189,13);u=B;B=0;if(u&1){u=Rb()|0;s=Q;Yua(j);N=u;O=s;break}B=0;wa(510,m|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;P=s;R=Q;S=1}else{B=0;ua(163,z|0,j|0,l|0,58,m|0);s=B;B=0;if(s&1)T=1;else{B=0;eb(503,z|0,1240,229);B=0;T=0}s=Rb()|0;u=Q;Yua(m);P=s;R=u;S=T}Yua(l);Yua(j);if(S){N=P;O=R}else{U=P;V=R;k[i>>2]=27468;k[o>>2]=27488;k[a>>2]=27560;Yua(h);Ava(a);vva(o);Qb(U|0)}}else{u=Rb()|0;N=u;O=Q}while(0);zb(z|0);U=N;V=O;k[i>>2]=27468;k[o>>2]=27488;k[a>>2]=27560;Yua(h);Ava(a);vva(o);Qb(U|0)}n=Rb()|0;U=n;V=Q;k[i>>2]=27468;k[o>>2]=27488;k[a>>2]=27560;Yua(h);Ava(a);vva(o);Qb(U|0)}while(0);J=L;K=M;vva(o);Qb(K|0);return 0}function iha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0.0,C=0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;a=r;r=r+240|0;c=a+228|0;d=a+224|0;e=a+48|0;f=a+212|0;g=a+200|0;h=a+188|0;i=a+40|0;j=a+184|0;l=a+32|0;m=a+24|0;n=a+8|0;o=a;cp(b,d,298);if((k[d>>2]|0)==300){k[j>>2]=0;q=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;s=iq(b,534)|0;t=Rqa(q>>>0>536870911?-1:q<<3)|0;Uo(b,j);cp(b,c,578);u=k[c>>2]|0;switch(u|0){case 705:case 704:{v=+Dp(b,265);w=+Dp(b,65);x=Wo(b,353)|0;y=Wo(b,339)|0;z=x;A=w;C=0;D=v;E=y;F=Wo(b,674)|0;G=Wo(b,677)|0;break}case 665:case 664:{z=0;A=0.0;C=0;D=0.0;E=Wo(b,339)|0;F=0;G=0;break}default:{z=0;A=0.0;C=Wo(b,u)|0;D=0.0;E=0;F=0;G=0}}u=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;y=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;a:do if((y|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){x=(F|0)!=0&(G|0)!=0;H=n+8|0;v=D*A;I=(q|0)>0;J=u+8|0;K=s+4|0;L=y;while(1){Fc[k[(k[u>>2]|0)+24>>2]&1023](u,L);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[j>>2]|0,u);nd[k[(k[b>>2]|0)+336>>2]&1023](b,t,u);b:do switch(k[c>>2]|0){case 705:case 704:{nd[k[(k[z>>2]|0)+48>>2]&1023](z,o,u);rd[k[(k[E>>2]|0)+60>>2]&511](E,n,k[j>>2]|0,u);if(x?(nd[k[(k[F>>2]|0)+48>>2]&1023](F,l,u),nd[k[(k[G>>2]|0)+48>>2]&1023](G,m,u),w=+p[n>>3],M=+p[H>>3],N=+aa(+(w*w+M*M+1.0e-10)),M=+p[l>>3],w=+p[m>>3],O=+aa(+(M*M+w*w)),O>4.756468797564688e-07):0){p[n>>3]=N*(-M/O);p[H>>3]=N*(-w/O)}O=v*+p[o>>3];if((k[c>>2]|0)==704){p[i>>3]=O*+p[n>>3];break b}else{p[i>>3]=O*+p[H>>3];break b}break}case 664:{rd[k[(k[E>>2]|0)+60>>2]&511](E,n,k[j>>2]|0,u);p[i>>3]=+p[n>>3];break}case 665:{rd[k[(k[E>>2]|0)+60>>2]&511](E,n,k[j>>2]|0,u);p[i>>3]=+p[H>>3];break}default:nd[k[(k[C>>2]|0)+48>>2]&1023](C,i,u)}while(0);if(I){P=k[K>>2]|0;R=0;do{S=P+(R<<3)|0;p[S>>3]=+p[e>>3]*+p[J>>3]*+p[i>>3]*+p[t+(R<<3)>>3]+ +p[S>>3];R=R+1|0}while((R|0)!=(q|0))}L=L+1|0;if((L|0)>=(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))break a}}while(0);q=k[j>>2]|0;if(!q){k[j>>2]=0;Tqa(t);T=k[u>>2]|0;U=T+4|0;V=k[U>>2]|0;Ec[V&1023](u);r=a;return s|0}Tqa(q);k[j>>2]=0;Tqa(t);T=k[u>>2]|0;U=T+4|0;V=k[U>>2]|0;Ec[V&1023](u);r=a;return s|0}s=e+56|0;a=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;W=Q;X=u;vva(s);Qb(X|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,a|0);u=B;B=0;do if(u&1){V=Rb()|0;Y=Q;Z=V}else{k[a>>2]=27560;V=e+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;T=Q;Yua(c);Yua(V);Ava(a);Y=T;Z=U;break}Yua(c);B=0;U=Ia(40,e|0,144639,5)|0;T=B;B=0;if((((!(T&1)?(B=0,T=ya(427,k[d>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(T)|0,B=0,j=Ia(40,U|0,T|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,j|0,146481,18)|0,j=B,B=0,!(j&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,135653,74);j=B;B=0;do if(!(j&1)){B=0;eb(502,g|0,144203,13);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(f);_=T;$=U;break}B=0;wa(510,h|0,a|0);U=B;B=0;if(U&1){U=Rb()|0;ba=U;ca=Q;da=1}else{B=0;ua(163,t|0,f|0,g|0,111,h|0);U=B;B=0;if(U&1)ea=1;else{B=0;eb(503,t|0,1240,229);B=0;ea=0}U=Rb()|0;T=Q;Yua(h);ba=U;ca=T;da=ea}Yua(g);Yua(f);if(da){_=ba;$=ca}else{fa=ba;ga=ca;k[e>>2]=27468;k[s>>2]=27488;k[a>>2]=27560;Yua(V);Ava(a);vva(s);Qb(fa|0)}}else{T=Rb()|0;_=T;$=Q}while(0);zb(t|0);fa=_;ga=$;k[e>>2]=27468;k[s>>2]=27488;k[a>>2]=27560;Yua(V);Ava(a);vva(s);Qb(fa|0)}j=Rb()|0;fa=j;ga=Q;k[e>>2]=27468;k[s>>2]=27488;k[a>>2]=27560;Yua(V);Ava(a);vva(s);Qb(fa|0)}while(0);W=Y;X=Z;vva(s);Qb(X|0);return 0}function jha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135653,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,208,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function kha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,135653,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,211,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function lha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+208|0;d=a+184|0;e=a+180|0;f=a+176|0;g=a+40|0;h=a+24|0;i=a+12|0;j=a;cp(c,e,578);cp(c,f,298);if((k[f>>2]|0)==300){nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[e>>2]|0);r=a;return}a=g+56|0;e=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(a);Qb(m|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,e|0);b=B;B=0;do if(b&1){c=Rb()|0;n=Q;o=c}else{k[e>>2]=27560;c=g+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(c);Ava(e);n=q;o=p;break}Yua(d);B=0;p=Ia(40,g|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[f>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,135653,74);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(h);u=p;v=q;break}B=0;wa(510,j|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,222,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(j);w=p;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(a);Qb(C|0)}while(0);l=n;m=o;vva(a);Qb(m|0)}function mha(a,b){a=a|0;b=b|0;return}function nha(a){a=a|0;Sqa(a);return}function oha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135838,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,9,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function pha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135856,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,12,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function qha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,145111,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,15,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function rha(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135868,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,18,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function sha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,21,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function tha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136199,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,24,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function uha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,29,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function vha(a,b){a=a|0;b=b|0;return 0}function wha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function xha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144189,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function yha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144203,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function zha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Aha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Bha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,135754,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,137199,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Cha(a,b){a=a|0;b=b|0;return}function Dha(a){a=a|0;Sqa(a);return}function Eha(a,b,c){a=a|0;b=b|0;c=c|0;qoa(b,c,135899,529,738,0);return}function Fha(a,b,c){a=a|0;b=b|0;c=c|0;return}function Gha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,529,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function Hha(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Iha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+192|0;f=a+180|0;g=a+176|0;h=a+40|0;j=a+24|0;l=a+12|0;m=a;n=c+56|0;o=k[n>>2]|0;if((o|0)>0){p=c+32|0;q=o;o=0;s=0;while(1){if(!(i[(k[p>>2]|0)+s>>0]|0)){t=q;u=o}else{v=qh(b,o)|0;Uc[k[(k[v>>2]|0)+480>>2]&63](v,s,c,d,e,738);t=k[n>>2]|0;u=o+1|0}s=s+1|0;if((s|0)>=(t|0))break;else{q=t;o=u}}}Zka(c,b,137867,206);Zka(c,b,135923,674);Zka(c,b,135944,677);Fka(c,g,135965);switch(k[g>>2]|0){case 253:{Zka(c,b,135980,248);Zka(c,b,136003,249);r=a;return}case 250:{Zka(c,b,136026,255);Zka(c,b,136003,256);r=a;return}case 251:{Zka(c,b,136026,257);Zka(c,b,136003,249);r=a;return}case 252:{Zka(c,b,136003,249);r=a;return}default:{a=h+56|0;b=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(a);Qb(x|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){u=Rb()|0;y=Q;z=u}else{k[b>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;Yua(f);Yua(u);Ava(b);y=t;z=o;break}Yua(f);B=0;o=Ia(40,h|0,136043,12)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,k[g>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(t)|0,B=0,s=Ia(40,o|0,t|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,146481,18)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,j|0,136056,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,l|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;o=Q;Yua(j);A=o;C=t;break}B=0;wa(510,m|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;D=Q;E=t;F=1}else{B=0;ua(163,q|0,j|0,l|0,70,m|0);t=B;B=0;if(t&1)G=1;else{B=0;eb(503,q|0,1240,229);B=0;G=0}t=Rb()|0;o=Q;Yua(m);D=o;E=t;F=G}Yua(l);Yua(j);if(F){A=D;C=E}else{H=D;I=E;k[h>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}}else{t=Rb()|0;A=Q;C=t}while(0);zb(q|0);H=A;I=C;k[h>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}s=Rb()|0;H=Q;I=s;k[h>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(a);Qb(I|0)}while(0);w=y;x=z;vva(a);Qb(x|0)}}}function Jha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+180|0;a=e+176|0;f=e+40|0;g=e+24|0;h=e+12|0;i=e;YN(b,Ika(c,136148,530)|0);Fka(c,a,135965);switch(k[a>>2]|0){case 252:{YN(b,Ika(c,136174,252)|0);r=e;return}case 251:case 250:case 253:{r=e;return}default:{e=f+56|0;c=f+4|0;k[f>>2]=27524;k[e>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;l=b;vva(e);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){m=Rb()|0;n=Q;o=m}else{k[c>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(c);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,136043,12)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,136056,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,136199,16);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,87,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(m);Ava(c);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}}}function Kha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=r;r=r+320|0;c=a+304|0;d=a+300|0;e=a+316|0;f=a+152|0;g=a+288|0;h=a+16|0;j=a;l=b+44|0;bO(k[l>>2]|0,e,759);cO(k[l>>2]|0,d,530);xh(b,529);a:do if(CY()|0){l=f+56|0;m=f+4|0;k[f>>2]=27524;k[l>>2]=27544;B=0;wa(508,f+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=f+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;Ia(40,f|0,136216,25)|0;u=B;B=0;do if(!(u&1)?(B=0,wa(510,g|0,m|0),v=B,B=0,!(v&1)):0){B=0;ya(425,g|0)|0;v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(g);x=w;y=v;break}else{Yua(g);k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);break a}}else z=14;while(0);if((z|0)==14){u=Rb()|0;x=Q;y=u}k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);A=x;C=y;Qb(C|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}while(0);if((k[d>>2]|0)==4)Yoa(b);Voa(b);if(!(i[e>>0]|0)){r=a;return}b:do if(CY()|0){e=h+56|0;d=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;D=Q;E=p;vva(e);Qb(E|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);p=B;B=0;do if(p&1){t=Rb()|0;F=Q;G=t}else{k[d>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;o=Q;Yua(c);Yua(t);Ava(d);F=o;G=s;break}Yua(c);B=0;Ia(40,h|0,148942,18)|0;s=B;B=0;do if(!(s&1)?(B=0,wa(510,j|0,d|0),o=B,B=0,!(o&1)):0){B=0;ya(425,j|0)|0;o=B;B=0;if(o&1){o=Rb()|0;y=Q;Yua(j);H=y;I=o;break}else{Yua(j);k[h>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(t);Ava(d);vva(e);break b}}else z=33;while(0);if((z|0)==33){s=Rb()|0;H=Q;I=s}k[h>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(t);Ava(d);vva(e);A=H;C=I;Qb(C|0)}while(0);D=F;E=G;vva(e);Qb(E|0)}while(0);k[c>>2]=206;fi(b,b+48|0,c,1,1);r=a;return}function Lha(a,b){a=a|0;b=b|0;return 0}function Mha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,136056,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,125,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Nha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0.0,vb=0.0,wb=0.0,xb=0.0,yb=0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0;a=r;r=r+1136|0;c=a+1116|0;d=a+1112|0;e=a+1108|0;f=a+1104|0;g=a+56|0;h=a+48|0;i=a+40|0;j=a+32|0;l=a+24|0;m=a+16|0;n=a+8|0;o=a;q=a+1064|0;s=a+928|0;t=a+1092|0;u=a+1080|0;v=a+1068|0;w=a+768|0;x=a+916|0;y=a+904|0;z=a+752|0;A=a+616|0;C=a+332|0;D=a+320|0;E=a+172|0;F=a+480|0;G=a+160|0;H=a+148|0;I=a+136|0;J=a+344|0;K=a+124|0;L=a+112|0;M=a+100|0;N=a+184|0;O=a+88|0;P=a+76|0;R=a+64|0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){S=0;r=a;return S|0}T=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;k[q>>2]=0;cp(T,e,298);cp(T,f,247);cp(T,d,530);switch(k[e>>2]|0){case 301:{U=1;break}case 300:{U=2;break}case 302:{U=2;break}default:{b=s+56|0;V=s+4|0;k[s>>2]=27524;k[b>>2]=27544;B=0;wa(508,s+56|0,V|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(b);Qb(Y|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[b>>2]=27488;B=0;va(448,V|0);W=B;B=0;do if(W&1){Z=Rb()|0;_=Q;$=Z}else{k[V>>2]=27560;Z=s+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,V|0,c|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(c);Yua(Z);Ava(V);_=ca;$=ba;break}Yua(c);B=0;ba=Ia(40,s|0,144639,5)|0;ca=B;B=0;a:do if((((!(ca&1)?(B=0,da=ya(427,k[e>>2]|0)|0,ea=B,B=0,!(ea&1)):0)?(ea=Lta(da)|0,B=0,fa=Ia(40,ba|0,da|0,ea|0)|0,ea=B,B=0,!(ea&1)):0)?(B=0,ea=Ia(40,fa|0,146481,18)|0,fa=B,B=0,!(fa&1)):0)?(B=0,Xa(239,ea|0,0)|0,ea=B,B=0,!(ea&1)):0){ea=Ab(20)|0;B=0;eb(502,t|0,136056,76);fa=B;B=0;do if(!(fa&1)){B=0;eb(502,u|0,144189,13);da=B;B=0;if(da&1){da=Rb()|0;ga=Q;Yua(t);ha=ga;ia=da;break}B=0;wa(510,v|0,V|0);da=B;B=0;if(da&1){da=Rb()|0;ja=Q;ka=da;la=1}else{B=0;ua(163,ea|0,t|0,u|0,150,v|0);da=B;B=0;if(da&1)na=1;else{B=0;eb(503,ea|0,1240,229);B=0;na=0}da=Rb()|0;ga=Q;Yua(v);ja=ga;ka=da;la=na}Yua(u);Yua(t);if(la){ha=ja;ia=ka}else{oa=ja;pa=ka;break a}}else{da=Rb()|0;ha=Q;ia=da}while(0);zb(ea|0);oa=ha;pa=ia}else qa=23;while(0);if((qa|0)==23){ba=Rb()|0;oa=Q;pa=ba}k[s>>2]=27468;k[b>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(b);ra=oa;sa=pa;Qb(sa|0)}while(0);X=_;Y=$;vva(b);Qb(Y|0)}}Y=Hc[k[(k[T>>2]|0)+164>>2]&511](T)|0;b=gq(T,534)|0;$=Rqa(Y>>>0>536870911?-1:Y<<3)|0;_=ma(Y,U)|0;X=_>>>0>536870911?-1:_<<3;_=Rqa(X)|0;pa=Rqa(X)|0;X=U<<3;oa=Rqa(ma(X,U)|0)|0;V=Rqa(X)|0;s=Rqa(X)|0;ia=Rqa(X)|0;WEa(ia|0,0,X|0)|0;ha=Rqa(X)|0;WEa(ha|0,0,X|0)|0;ka=Rqa(X)|0;Uo(T,q);pp(T,h,358);switch(k[e>>2]|0){case 301:{ta=Wo(T,674)|0;xa=0;break}case 300:{ta=Wo(T,674)|0;xa=Wo(T,677)|0;break}case 302:{ta=Wo(T,673)|0;xa=Wo(T,676)|0;break}default:{X=w+56|0;ja=w+4|0;k[w>>2]=27524;k[X>>2]=27544;B=0;wa(508,w+56|0,ja|0);la=B;B=0;if(la&1){la=Rb()|0;za=Q;Aa=la;vva(X);Qb(Aa|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[X>>2]=27488;B=0;va(448,ja|0);la=B;B=0;do if(la&1){t=Rb()|0;Ba=Q;Ca=t}else{k[ja>>2]=27560;t=w+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ja|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;na=Q;Yua(c);Yua(t);Ava(ja);Ba=na;Ca=u;break}Yua(c);B=0;u=Ia(40,w|0,144639,5)|0;na=B;B=0;b:do if((((!(na&1)?(B=0,v=ya(427,k[e>>2]|0)|0,W=B,B=0,!(W&1)):0)?(W=Lta(v)|0,B=0,ba=Ia(40,u|0,v|0,W|0)|0,W=B,B=0,!(W&1)):0)?(B=0,W=Ia(40,ba|0,146481,18)|0,ba=B,B=0,!(ba&1)):0)?(B=0,Xa(239,W|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,x|0,136056,76);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,y|0,144189,13);v=B;B=0;if(v&1){v=Rb()|0;ca=Q;Yua(x);Da=ca;Ea=v;break}B=0;wa(510,z|0,ja|0);v=B;B=0;if(v&1){v=Rb()|0;Fa=1;Ga=Q;Ha=v}else{B=0;ua(163,W|0,x|0,y|0,193,z|0);v=B;B=0;if(v&1)Ja=1;else{B=0;eb(503,W|0,1240,229);B=0;Ja=0}v=Rb()|0;ca=Q;Yua(z);Fa=Ja;Ga=ca;Ha=v}Yua(y);Yua(x);if(Fa){Da=Ga;Ea=Ha}else{Ka=Ga;La=Ha;break b}}else{v=Rb()|0;Da=Q;Ea=v}while(0);zb(W|0);Ka=Da;La=Ea}else qa=53;while(0);if((qa|0)==53){u=Rb()|0;Ka=Q;La=u}k[w>>2]=27468;k[X>>2]=27488;k[ja>>2]=27560;Yua(t);Ava(ja);vva(X);ra=Ka;sa=La;Qb(sa|0)}while(0);za=Ba;Aa=Ca;vva(X);Qb(Aa|0)}}switch(k[f>>2]|0){case 251:case 253:{Aa=Wo(T,993)|0;if((U|0)==2)Ma=Wo(T,994)|0;else Ma=0;Na=Wo(T,248)|0;Oa=0;Pa=0;Qa=Aa;Ra=Ma;Sa=Wo(T,249)|0;break}case 250:{switch(k[e>>2]|0){case 301:{Ta=Wo(T,258)|0;Ua=0;break}case 300:{Ta=Wo(T,258)|0;Ua=Wo(T,259)|0;break}case 302:{Ta=Wo(T,260)|0;Ua=Wo(T,261)|0;break}default:{Ma=A+56|0;Aa=A+4|0;k[A>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,A+56|0,Aa|0);X=B;B=0;if(X&1){X=Rb()|0;Va=Q;Wa=X;vva(Ma);Qb(Wa|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Aa|0);X=B;B=0;do if(X&1){Ca=Rb()|0;Ya=Q;Za=Ca}else{k[Aa>>2]=27560;Ca=A+36|0;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Aa|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;za=Q;Yua(c);Yua(Ca);Ava(Aa);Ya=za;Za=Ba;break}Yua(c);B=0;Ba=Ia(40,A|0,144639,5)|0;za=B;B=0;c:do if((((!(za&1)?(B=0,La=ya(427,k[e>>2]|0)|0,Ka=B,B=0,!(Ka&1)):0)?(Ka=Lta(La)|0,B=0,ja=Ia(40,Ba|0,La|0,Ka|0)|0,Ka=B,B=0,!(Ka&1)):0)?(B=0,Ka=Ia(40,ja|0,146481,18)|0,ja=B,B=0,!(ja&1)):0)?(B=0,Xa(239,Ka|0,0)|0,Ka=B,B=0,!(Ka&1)):0){Ka=Ab(20)|0;B=0;eb(502,C|0,136056,76);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,D|0,144189,13);La=B;B=0;if(La&1){La=Rb()|0;w=Q;Yua(C);_a=w;$a=La;break}B=0;wa(510,E|0,Aa|0);La=B;B=0;if(La&1){La=Rb()|0;ab=1;bb=Q;cb=La}else{B=0;ua(163,Ka|0,C|0,D|0,218,E|0);La=B;B=0;if(La&1)db=1;else{B=0;eb(503,Ka|0,1240,229);B=0;db=0}La=Rb()|0;w=Q;Yua(E);ab=db;bb=w;cb=La}Yua(D);Yua(C);if(ab){_a=bb;$a=cb}else{fb=bb;gb=cb;break c}}else{La=Rb()|0;_a=Q;$a=La}while(0);zb(Ka|0);fb=_a;gb=$a}else qa=87;while(0);if((qa|0)==87){Ba=Rb()|0;fb=Q;gb=Ba}k[A>>2]=27468;k[Ma>>2]=27488;k[Aa>>2]=27560;Yua(Ca);Ava(Aa);vva(Ma);ra=fb;sa=gb;Qb(sa|0)}while(0);Va=Ya;Wa=Za;vva(Ma);Qb(Wa|0)}}Na=0;Oa=Ta;Pa=Ua;Qa=0;Ra=0;Sa=Wo(T,256)|0;break}case 252:{Ua=Wo(T,993)|0;if((U|0)==2)hb=Wo(T,994)|0;else hb=0;Na=0;Oa=0;Pa=0;Qa=Ua;Ra=hb;Sa=Wo(T,249)|0;break}default:{hb=F+56|0;Ua=F+4|0;k[F>>2]=27524;k[hb>>2]=27544;B=0;wa(508,F+56|0,Ua|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;ib=Q;jb=Ta;vva(hb);Qb(jb|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[hb>>2]=27488;B=0;va(448,Ua|0);Ta=B;B=0;do if(Ta&1){Wa=Rb()|0;kb=Q;lb=Wa}else{k[Ua>>2]=27560;Wa=F+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Za=Q;Yua(c);Yua(Wa);Ava(Ua);kb=Za;lb=Ma;break}Yua(c);B=0;Ma=Ia(40,F|0,136043,12)|0;Za=B;B=0;d:do if((((!(Za&1)?(B=0,Ya=ya(427,k[f>>2]|0)|0,Va=B,B=0,!(Va&1)):0)?(Va=Lta(Ya)|0,B=0,gb=Ia(40,Ma|0,Ya|0,Va|0)|0,Va=B,B=0,!(Va&1)):0)?(B=0,Va=Ia(40,gb|0,146481,18)|0,gb=B,B=0,!(gb&1)):0)?(B=0,Xa(239,Va|0,0)|0,Va=B,B=0,!(Va&1)):0){Va=Ab(20)|0;B=0;eb(502,G|0,136056,76);gb=B;B=0;do if(!(gb&1)){B=0;eb(502,H|0,144189,13);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;fb=Q;Yua(G);mb=fb;nb=Ya;break}B=0;wa(510,I|0,Ua|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;ob=Q;pb=Ya;qb=1}else{B=0;ua(163,Va|0,G|0,H|0,228,I|0);Ya=B;B=0;if(Ya&1)rb=1;else{B=0;eb(503,Va|0,1240,229);B=0;rb=0}Ya=Rb()|0;fb=Q;Yua(I);ob=fb;pb=Ya;qb=rb}Yua(H);Yua(G);if(qb){mb=ob;nb=pb}else{sb=ob;tb=pb;break d}}else{Ya=Rb()|0;mb=Q;nb=Ya}while(0);zb(Va|0);sb=mb;tb=nb}else qa=117;while(0);if((qa|0)==117){Ma=Rb()|0;sb=Q;tb=Ma}k[F>>2]=27468;k[hb>>2]=27488;k[Ua>>2]=27560;Yua(Wa);Ava(Ua);vva(hb);ra=sb;sa=tb;Qb(sa|0)}while(0);ib=kb;jb=lb;vva(hb);Qb(jb|0)}}jb=ed[k[(k[T>>2]|0)+308>>2]&511](T,2)|0;hb=Hc[k[(k[jb>>2]|0)+8>>2]&511](jb)|0;e:do if((hb|0)<(Hc[k[(k[jb>>2]|0)+12>>2]&511](jb)|0)){lb=jb+8|0;kb=b+12|0;ib=V+8|0;tb=(U|0)==2;sb=ka+8|0;Ua=ia+8|0;F=s+8|0;nb=(U>>>0>1?U:1)<<3;mb=hb;f:while(1){Fc[k[(k[jb>>2]|0)+24>>2]&1023](jb,mb);rd[k[(k[T>>2]|0)+260>>2]&511](T,g,k[q>>2]|0,jb);p[i>>3]=+p[lb>>3]*+p[g>>3];if(+p[h>>3]!=0.0){nd[k[(k[T>>2]|0)+336>>2]&1023](T,$,jb);ZX($,Y,1,0,i,1,1,0,$,1,Y,0,k[kb>>2]|0,1)|0;p[i>>3]=+p[h>>3]*+p[i>>3]}pb=Hc[k[(k[T>>2]|0)+164>>2]&511](T)|0;ob=Rqa(pb>>>0>536870911?-1:pb<<3)|0;nd[k[(k[T>>2]|0)+336>>2]&1023](T,ob,jb);if((pb|0)>0){qb=0;do{ub=+p[ob+(qb<<3)>>3];p[_+(qb<<3)>>3]=ub;p[_+(qb+pb<<3)>>3]=ub;qb=qb+1|0}while((qb|0)!=(pb|0))}Tqa(ob);pb=k[q>>2]|0;qb=Hc[k[(k[T>>2]|0)+164>>2]&511](T)|0;Va=qb<<1;G=Rqa(Va>>>0>536870911?-1:Va<<3)|0;rd[k[(k[T>>2]|0)+340>>2]&511](T,G,pb,jb);if((qb|0)>0){pb=0;do{p[pa+(pb<<3)>>3]=+p[G+(pb<<3)>>3];Va=pb+qb|0;p[pa+(Va<<3)>>3]=+p[G+(Va<<3)>>3];pb=pb+1|0}while((pb|0)!=(qb|0))}Tqa(G);nd[k[(k[ta>>2]|0)+48>>2]&1023](ta,V,jb);nd[k[(k[xa>>2]|0)+48>>2]&1023](xa,ib,jb);g:do switch(k[f>>2]|0){case 251:case 253:{nd[k[(k[Qa>>2]|0)+48>>2]&1023](Qa,ka,jb);if(tb)nd[k[(k[Ra>>2]|0)+48>>2]&1023](Ra,sb,jb);nd[k[(k[Na>>2]|0)+48>>2]&1023](Na,n,jb);nd[k[(k[Sa>>2]|0)+48>>2]&1023](Sa,o,jb);qb=0;ub=0.0;while(1){vb=+p[ka+(qb<<3)>>3];wb=ub+vb*vb;qb=qb+1|0;if((qb|0)>=(U|0)){xb=wb;break}else ub=wb}ub=+aa(+xb);if(!(ub>1.0e-10)){WEa(ia|0,0,nb|0)|0;WEa(ha|0,0,nb|0)|0;yb=0;break g}wb=+p[n>>3];vb=+p[o>>3];qb=0;do{Bb=+p[ka+(qb<<3)>>3];p[ia+(qb<<3)>>3]=wb*Bb/ub;p[ha+(qb<<3)>>3]=Bb*vb/ub;qb=qb+1|0}while((qb|0)<(U|0));yb=0;break}case 250:{nd[k[(k[Oa>>2]|0)+48>>2]&1023](Oa,ia,jb);if(tb)nd[k[(k[Pa>>2]|0)+48>>2]&1023](Pa,Ua,jb);nd[k[(k[Sa>>2]|0)+48>>2]&1023](Sa,o,jb);qb=0;ub=0.0;while(1){vb=+p[ia+(qb<<3)>>3];wb=ub+vb*vb;qb=qb+1|0;if((qb|0)>=(U|0)){Cb=wb;break}else ub=wb}ub=+aa(+Cb)+1.0e-14;wb=+p[o>>3];qb=0;do{p[ha+(qb<<3)>>3]=wb*+p[ia+(qb<<3)>>3]/ub;qb=qb+1|0}while((qb|0)<(U|0));yb=0;break}case 252:{nd[k[(k[Qa>>2]|0)+48>>2]&1023](Qa,ka,jb);if(tb)nd[k[(k[Ra>>2]|0)+48>>2]&1023](Ra,sb,jb);nd[k[(k[Sa>>2]|0)+48>>2]&1023](Sa,o,jb);qb=0;ub=0.0;while(1){wb=+p[ka+(qb<<3)>>3];vb=ub+wb*wb;qb=qb+1|0;if((qb|0)>=(U|0)){Db=vb;break}else ub=vb}ub=+aa(+Db);if(!(ub>1.0e-10)){WEa(ia|0,0,nb|0)|0;WEa(ha|0,0,nb|0)|0;yb=0;break g}vb=+p[o>>3];WEa(ia|0,0,nb|0)|0;qb=0;do{p[ha+(qb<<3)>>3]=vb*+p[ka+(qb<<3)>>3]/ub;qb=qb+1|0}while((qb|0)<(U|0));yb=0;break}default:break f}while(0);do{p[s+(yb<<3)>>3]=+p[V+(yb<<3)>>3]-+p[ia+(yb<<3)>>3]-+p[ha+(yb<<3)>>3];yb=yb+1|0}while((yb|0)<(U|0));ub=+p[i>>3];G=0;do{qb=s+(G<<3)|0;pb=ma(G,U)|0;ob=oa+(G+pb<<3)|0;Va=0;do{if((G|0)==(Va|0))p[ob>>3]=ub*+p[qb>>3];else p[oa+(Va+pb<<3)>>3]=0.0;Va=Va+1|0}while((Va|0)<(U|0));G=G+1|0}while((G|0)<(U|0));ZX(_,U,Y,1,oa,U,U,0,pa,U,Y,0,k[kb>>2]|0,1)|0;G=0;ub=0.0;while(1){vb=+p[s+(G<<3)>>3];wb=ub+vb*vb;G=G+1|0;if((G|0)>=(U|0)){Eb=wb;break}else ub=wb}ub=+aa(+Eb)+1.0e-14;switch(k[d>>2]|0){case 0:break;case 1:{rd[k[(k[T>>2]|0)+108>>2]&511](T,j,l,m);wb=+p[j>>3]*+p[s>>3]/ub;vb=+p[l>>3]*+p[F>>3]/ub;Bb=ub*+aa(+(wb*wb+vb*vb))*.5*+p[i>>3];G=0;do{Va=ma(G,U)|0;pb=oa+(G+Va<<3)|0;qb=0;do{if((G|0)==(qb|0))p[pb>>3]=Bb;else p[oa+(qb+Va<<3)>>3]=0.0;qb=qb+1|0}while((qb|0)<(U|0));G=G+1|0}while((G|0)<(U|0));ZX(pa,U,Y,1,oa,U,U,0,pa,U,Y,0,k[kb>>2]|0,1)|0;break}case 2:{rd[k[(k[T>>2]|0)+108>>2]&511](T,j,l,m);Bb=+p[s>>3];vb=+p[j>>3]*Bb/ub;wb=+p[l>>3]*+p[F>>3]/ub;Fb=+aa(+(vb*vb+wb*wb));wb=Fb*+p[i>>3]/(ub*2.0);Fb=Bb;G=0;while(1){Bb=Fb*wb;qb=ma(G,U)|0;Va=0;do{p[oa+(Va+qb<<3)>>3]=+p[s+(Va<<3)>>3]*Bb;Va=Va+1|0}while((Va|0)<(U|0));Va=G+1|0;if((Va|0)>=(U|0))break;Fb=+p[s+(Va<<3)>>3];G=Va}ZX(pa,U,Y,1,oa,U,U,0,pa,U,Y,0,k[kb>>2]|0,1)|0;break}default:{qa=209;break f}}mb=mb+1|0;if((mb|0)>=(Hc[k[(k[jb>>2]|0)+12>>2]&511](jb)|0))break e}if((qa|0)==209){mb=N+56|0;kb=N+4|0;k[N>>2]=27524;k[mb>>2]=27544;B=0;wa(508,N+56|0,kb|0);F=B;B=0;if(F&1){F=Rb()|0;Gb=Q;Hb=F;vva(mb);Qb(Hb|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[mb>>2]=27488;B=0;va(448,kb|0);F=B;B=0;do if(F&1){nb=Rb()|0;Ib=Q;Jb=nb}else{k[kb>>2]=27560;nb=N+36|0;k[nb>>2]=0;k[nb+4>>2]=0;k[nb+8>>2]=0;k[nb+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,kb|0,c|0);sb=B;B=0;if(sb&1){sb=Rb()|0;tb=Q;Yua(c);Yua(nb);Ava(kb);Ib=tb;Jb=sb;break}Yua(c);B=0;sb=Ia(40,N|0,136242,53)|0;tb=B;B=0;h:do if(!(tb&1)?(B=0,Xa(239,sb|0,0)|0,Ua=B,B=0,!(Ua&1)):0){Ua=Ab(20)|0;B=0;eb(502,O|0,136056,76);ib=B;B=0;do if(!(ib&1)){B=0;eb(502,P|0,144189,13);lb=B;B=0;if(lb&1){lb=Rb()|0;Wa=Q;Yua(O);Kb=Wa;Lb=lb;break}B=0;wa(510,R|0,kb|0);lb=B;B=0;if(lb&1){lb=Rb()|0;Mb=1;Nb=Q;Ob=lb}else{B=0;ua(163,Ua|0,O|0,P|0,370,R|0);lb=B;B=0;if(lb&1)Pb=1;else{B=0;eb(503,Ua|0,1240,229);B=0;Pb=0}lb=Rb()|0;Wa=Q;Yua(R);Mb=Pb;Nb=Wa;Ob=lb}Yua(P);Yua(O);if(Mb){Kb=Nb;Lb=Ob}else{Sb=Nb;Tb=Ob;break h}}else{lb=Rb()|0;Kb=Q;Lb=lb}while(0);zb(Ua|0);Sb=Kb;Tb=Lb}else qa=224;while(0);if((qa|0)==224){sb=Rb()|0;Sb=Q;Tb=sb}k[N>>2]=27468;k[mb>>2]=27488;k[kb>>2]=27560;Yua(nb);Ava(kb);vva(mb);ra=Sb;sa=Tb;Qb(sa|0)}while(0);Gb=Ib;Hb=Jb;vva(mb);Qb(Hb|0)}kb=J+56|0;F=J+4|0;k[J>>2]=27524;k[kb>>2]=27544;B=0;wa(508,J+56|0,F|0);sb=B;B=0;if(sb&1){sb=Rb()|0;Ub=Q;Vb=sb;vva(kb);Qb(Vb|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[kb>>2]=27488;B=0;va(448,F|0);sb=B;B=0;do if(sb&1){tb=Rb()|0;Wb=Q;Xb=tb}else{k[F>>2]=27560;tb=J+36|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);ib=B;B=0;if(ib&1){ib=Rb()|0;lb=Q;Yua(c);Yua(tb);Ava(F);Wb=lb;Xb=ib;break}Yua(c);B=0;ib=Ia(40,J|0,136043,12)|0;lb=B;B=0;i:do if((((!(lb&1)?(B=0,Wa=ya(427,k[f>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(Wa)|0,B=0,Va=Ia(40,ib|0,Wa|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,Va|0,146481,18)|0,Va=B,B=0,!(Va&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,K|0,136056,76);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,L|0,144189,13);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;qb=Q;Yua(K);Yb=qb;Zb=Wa;break}B=0;wa(510,M|0,F|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;_b=1;$b=Q;ac=Wa}else{B=0;ua(163,G|0,K|0,L|0,310,M|0);Wa=B;B=0;if(Wa&1)bc=1;else{B=0;eb(503,G|0,1240,229);B=0;bc=0}Wa=Rb()|0;qb=Q;Yua(M);_b=bc;$b=qb;ac=Wa}Yua(L);Yua(K);if(_b){Yb=$b;Zb=ac}else{cc=$b;dc=ac;break i}}else{Wa=Rb()|0;Yb=Q;Zb=Wa}while(0);zb(G|0);cc=Yb;dc=Zb}else qa=176;while(0);if((qa|0)==176){ib=Rb()|0;cc=Q;dc=ib}k[J>>2]=27468;k[kb>>2]=27488;k[F>>2]=27560;Yua(tb);Ava(F);vva(kb);ra=cc;sa=dc;Qb(sa|0)}while(0);Ub=Wb;Vb=Xb;vva(kb);Qb(Vb|0)}while(0);Vb=k[q>>2]|0;if(Vb)Tqa(Vb);k[q>>2]=0;Tqa($);Tqa(_);Tqa(oa);Tqa(pa);Tqa(V);Tqa(s);Tqa(ia);Tqa(ha);Tqa(ka);Ec[k[(k[jb>>2]|0)+4>>2]&1023](jb);if((k[e>>2]|0)!=300?(ap(T),(T|0)!=0):0)Ec[k[(k[T>>2]|0)+4>>2]&1023](T);S=b;r=a;return S|0}function Oha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0;a=r;r=r+32|0;c=a+28|0;d=a+16|0;e=a+8|0;f=a;g=a+24|0;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){h=0;r=a;return h|0}i=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;k[g>>2]=0;b=Hc[k[(k[i>>2]|0)+164>>2]&511](i)|0;j=iq(i,534)|0;pp(i,e,358);if(+p[e>>3]!=0.0){e=Rqa(b>>>0>536870911?-1:b<<3)|0;Uo(i,g);l=Wo(i,206)|0;m=ed[k[(k[i>>2]|0)+308>>2]&511](i,2)|0;n=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;a:do if((n|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){o=m+8|0;q=j+4|0;if((b|0)>0)s=n;else{t=n;while(1){Fc[k[(k[m>>2]|0)+24>>2]&1023](m,t);rd[k[(k[i>>2]|0)+260>>2]&511](i,d,k[g>>2]|0,m);nd[k[(k[i>>2]|0)+336>>2]&1023](i,e,m);nd[k[(k[l>>2]|0)+48>>2]&1023](l,f,m);t=t+1|0;if((t|0)>=(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))break a}}do{Fc[k[(k[m>>2]|0)+24>>2]&1023](m,s);rd[k[(k[i>>2]|0)+260>>2]&511](i,d,k[g>>2]|0,m);nd[k[(k[i>>2]|0)+336>>2]&1023](i,e,m);nd[k[(k[l>>2]|0)+48>>2]&1023](l,f,m);t=k[q>>2]|0;u=0;do{v=t+(u<<3)|0;p[v>>3]=+p[d>>3]*+p[o>>3]*+p[f>>3]*+p[e+(u<<3)>>3]+ +p[v>>3];u=u+1|0}while((u|0)!=(b|0));s=s+1|0}while((s|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))}while(0);s=k[g>>2]|0;if(s)Tqa(s);k[g>>2]=0;Tqa(e);cp(i,c,298);if((k[c>>2]|0)!=300?(ap(i),(i|0)!=0):0)Ec[k[(k[i>>2]|0)+4>>2]&1023](i);if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m)}h=j;r=a;return h|0}function Pha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,136056,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,518,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Qha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,136056,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,521,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Rha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;cp(c,e,298);switch(k[e>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,206);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,206);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,136056,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,534,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function Sha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=b+44|0;cO(k[f>>2]|0,c,247);if((k[c>>2]|0)!=252){r=a;return}dO(k[f>>2]|0,d,252);f=b+20|0;if((th(k[f>>2]|0)|0)>0)g=0;else{r=a;return}do{b=qh(k[f>>2]|0,g)|0;c=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;i=Wo(b,353)|0;if((c|0)<=0){if(h)j=10}else{l=0;do{m=k[(k[h>>2]|0)+32>>2]|0;n=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[m&1023](h,n,l);n=ed[k[(k[b>>2]|0)+156>>2]&511](b,l)|0;nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,h);if(+p[e>>3]<+p[d>>3])Un(n,0,1.0);else Zn(n,0);l=l+1|0}while((l|0)!=(c|0));j=10}if((j|0)==10){j=0;Ec[k[(k[h>>2]|0)+4>>2]&1023](h)}g=g+1|0}while((g|0)<(th(k[f>>2]|0)|0));r=a;return}function Tha(a){a=a|0;Sqa(a);return}function Uha(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;b=r;r=r+352|0;c=b+336|0;d=b+332|0;e=b+184|0;f=b+320|0;g=b+176|0;h=b+40|0;i=b+24|0;j=b+12|0;l=b;cO(k[a+44>>2]|0,d,247);switch(k[d>>2]|0){case 250:{a:do if(BY()|0){m=e+56|0;n=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,e|0,136296,38)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,f|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,f|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=x;z=w;break}else{Yua(f);k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=15;while(0);if((A|0)==15){v=Rb()|0;y=Q;z=v}k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);oi(a);pi(a);mi(a);r=b;return}case 251:{ni(a);k[g>>2]=60;k[g+4>>2]=1;k[c>>2]=k[g>>2];k[c+4>>2]=k[g+4>>2];Fh(a,c);r=b;return}case 252:case 253:{r=b;return}default:{b=h+56|0;a=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,a|0);g=B;B=0;if(g&1){g=Rb()|0;E=Q;F=g;vva(b);Qb(F|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);g=B;B=0;do if(g&1){q=Rb()|0;G=Q;H=q}else{k[a>>2]=27560;q=h+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(c);Yua(q);Ava(a);G=t;H=u;break}Yua(c);B=0;u=Ia(40,h|0,136335,11)|0;t=B;B=0;b:do if((((!(t&1)?(B=0,p=ya(427,k[d>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(p)|0,B=0,y=Ia(40,u|0,p|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,y|0,146481,18)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,i|0,136347,76);y=B;B=0;do if(!(y&1)){B=0;eb(502,j|0,136424,8);p=B;B=0;if(p&1){p=Rb()|0;e=Q;Yua(i);I=e;J=p;break}B=0;wa(510,l|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;K=1;L=Q;M=p}else{B=0;ua(163,z|0,i|0,j|0,31,l|0);p=B;B=0;if(p&1)N=1;else{B=0;eb(503,z|0,1240,229);B=0;N=0}p=Rb()|0;e=Q;Yua(l);K=N;L=e;M=p}Yua(j);Yua(i);if(K){I=L;J=M}else{O=L;P=M;break b}}else{p=Rb()|0;I=Q;J=p}while(0);zb(z|0);O=I;P=J}else A=38;while(0);if((A|0)==38){u=Rb()|0;O=Q;P=u}k[h>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(q);Ava(a);vva(b);C=O;D=P;Qb(D|0)}while(0);E=G;F=H;vva(b);Qb(F|0)}}}function Vha(a,b,c){a=a|0;b=b|0;c=c|0;return}function Wha(a,b,c){a=a|0;b=b|0;c=c|0;return}function Xha(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,531,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function Yha(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Zha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}if((k[c+40>>2]|0)==300)return;Zka(c,b,136615,287);Zka(c,b,136636,288);return}function _ha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function $ha(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;a=r;r=r+320|0;c=a+304|0;d=a+316|0;e=a+300|0;f=a+152|0;g=a+288|0;h=a+16|0;j=a;l=b+44|0;bO(k[l>>2]|0,d,759);cO(k[l>>2]|0,e,991);xh(b,531);a:do if(CY()|0){l=f+56|0;m=f+4|0;k[f>>2]=27524;k[l>>2]=27544;B=0;wa(508,f+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=f+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;u=Ia(40,f|0,136457,17)|0;v=B;B=0;do if((((!(v&1)?(B=0,w=ya(427,k[e>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,u|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,Ia(40,y|0,136475,27)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,g|0,m|0),y=B,B=0,!(y&1)):0){B=0;ya(425,g|0)|0;y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(g);z=x;A=y;break}else{Yua(g);k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);break a}}else C=17;while(0);if((C|0)==17){u=Rb()|0;z=Q;A=u}k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);D=z;E=A;Qb(E|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}while(0);Voa(b);if(!(i[d>>0]|0)){r=a;return}b:do if(CY()|0){d=h+56|0;p=h+4|0;k[h>>2]=27524;k[d>>2]=27544;B=0;wa(508,h+56|0,p|0);t=B;B=0;if(t&1){t=Rb()|0;F=Q;G=t;vva(d);Qb(G|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[d>>2]=27488;B=0;va(448,p|0);t=B;B=0;do if(t&1){s=Rb()|0;H=Q;I=s}else{k[p>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;A=Q;Yua(c);Yua(s);Ava(p);H=A;I=o;break}Yua(c);B=0;Ia(40,h|0,148942,18)|0;o=B;B=0;do if(!(o&1)?(B=0,wa(510,j|0,p|0),A=B,B=0,!(A&1)):0){B=0;ya(425,j|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(j);J=z;K=A;break}else{Yua(j);k[h>>2]=27468;k[d>>2]=27488;k[p>>2]=27560;Yua(s);Ava(p);vva(d);break b}}else C=34;while(0);if((C|0)==34){o=Rb()|0;J=Q;K=o}k[h>>2]=27468;k[d>>2]=27488;k[p>>2]=27560;Yua(s);Ava(p);vva(d);D=J;E=K;Qb(E|0)}while(0);F=H;G=I;vva(d);Qb(G|0)}while(0);fi(b,b+48|0,e,1,1);r=a;return}function aia(a,b){a=a|0;b=b|0;return 0}function bia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,136503,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,81,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function cia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;a=r;r=r+32|0;c=a+20|0;d=a+16|0;e=a+12|0;f=a;g=a+8|0;k[g>>2]=0;cp(b,c,298);a:do switch(k[c>>2]|0){case 302:{cp(b,d,991);h=(k[d>>2]|0)==353?2:3;i=b;break}case 300:{h=1;i=b;break}default:if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){h=0;i=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{j=0;r=a;return j|0}}while(0);cp(i,e,298);b=k[e>>2]|0;e=(b|0)==300;d=(b|0)==302;b=d?3:e?2:1;c=Hc[k[(k[i>>2]|0)+164>>2]&511](i)|0;l=gq(i,534)|0;m=ma(b,c)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;m=Rqa(d?72:e?32:8)|0;Wo(i,993)|0;Wo(i,994)|0;Uo(i,g);e=ed[k[(k[i>>2]|0)+308>>2]&511](i,2)|0;d=Hc[k[(k[e>>2]|0)+8>>2]&511](e)|0;if((d|0)<(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0)){o=e+8|0;q=l+12|0;s=b<<3;t=(b>>>0>1?b:1)<<3;u=d;do{Fc[k[(k[e>>2]|0)+24>>2]&1023](e,u);rd[k[(k[i>>2]|0)+260>>2]&511](i,f,k[g>>2]|0,e);d=Hc[k[(k[i>>2]|0)+164>>2]&511](i)|0;v=Rqa(d>>>0>536870911?-1:d<<3)|0;nd[k[(k[i>>2]|0)+336>>2]&1023](i,v,e);Tqa(v);v=k[g>>2]|0;d=Hc[k[(k[i>>2]|0)+164>>2]&511](i)|0;w=ma(d,b)|0;x=Rqa(w>>>0>536870911?-1:w<<3)|0;rd[k[(k[i>>2]|0)+340>>2]&511](i,x,v,e);if((d|0)>0){v=0;do{w=0;do{y=(ma(w,d)|0)+v|0;p[n+(y<<3)>>3]=+p[x+(y<<3)>>3];w=w+1|0}while((w|0)!=(b|0));v=v+1|0}while((v|0)!=(d|0))}Tqa(x);z=+p[o>>3]*+p[f>>3];d=0;do{v=ma(d,b)|0;if((d|0)<2){w=0;do{p[m+(w+v<<3)>>3]=(d|0)==(w|0)?z:0.0;w=w+1|0}while((w|0)<(b|0))}else WEa(m+(ma(s,d)|0)|0,0,t|0)|0;d=d+1|0}while((d|0)<(b|0));ZX(n,b,c,1,m,b,b,0,n,b,c,0,k[q>>2]|0,1)|0;u=u+1|0}while((u|0)<(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0))}u=k[g>>2]|0;if(u)Tqa(u);k[g>>2]=0;Tqa(n);Tqa(m);Ec[k[(k[e>>2]|0)+4>>2]&1023](e);if(h){j=l;r=a;return j|0}ap(i);if(!i){j=l;r=a;return j|0}Ec[k[(k[i>>2]|0)+4>>2]&1023](i);j=l;r=a;return j|0}function dia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;a=r;r=r+16|0;c=a+4|0;d=a;cp(b,c,298);a:do switch(k[c>>2]|0){case 302:{cp(b,d,991);e=(k[d>>2]|0)==353?2:3;f=b;break}case 300:{e=1;f=b;break}default:if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){e=0;f=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{g=0;r=a;return g|0}}while(0);b=Hc[k[(k[f>>2]|0)+164>>2]&511](f)|0;d=iq(f,534)|0;if((b|0)>0)WEa(k[d+4>>2]|0,0,b<<3|0)|0;if(e){g=d;r=a;return g|0}ap(f);if(!f){g=d;r=a;return g|0}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);g=d;r=a;return g|0}function eia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,136503,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,298,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function fia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,136503,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,301,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function gia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;a=r;r=r+16|0;d=a+8|0;e=a+4|0;f=a;cp(c,d,298);switch(k[d>>2]|0){case 302:{cp(c,e,991);d=(k[e>>2]|0)==353;cp(c,f,991);e=k[c>>2]|0;if(d){nd[k[e+228>>2]&1023](c,b,k[f>>2]|0);r=a;return}else{nd[k[e+232>>2]&1023](c,b,k[f>>2]|0);r=a;return}break}case 300:{cp(c,f,991);nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[f>>2]|0);r=a;return}default:{cp(c,f,991);nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,k[f>>2]|0);r=a;return}}}function hia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;cp(b,c,991);g=Wo(b,206)|0;h=Wo(b,k[c>>2]|0)|0;c=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;if((f|0)>0){i=0;do{j=k[(k[c>>2]|0)+32>>2]|0;l=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[j&1023](c,l,i);l=ed[k[(k[b>>2]|0)+156>>2]&511](b,i)|0;nd[k[(k[g>>2]|0)+48>>2]&1023](g,d,c);do if(ao(l)|0)if(!(+p[d>>3]<=0.0)){Zn(l,0);break}else{nd[k[(k[h>>2]|0)+48>>2]&1023](h,e,c);Un(l,0,+p[e>>3]);break}while(0);i=i+1|0}while((i|0)!=(f|0))}if(!c){r=a;return}Ec[k[(k[c>>2]|0)+4>>2]&1023](c);r=a;return}function iia(a,b){a=a|0;b=b|0;var c=0;a=b+20|0;if((th(k[a>>2]|0)|0)>0)c=0;else return;do{hia(0,qh(k[a>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[a>>2]|0)|0));return}function jia(a){a=a|0;Sqa(a);return}function kia(a,b,c){a=a|0;b=b|0;c=c|0;return}function lia(a,b,c){a=a|0;b=b|0;c=c|0;return}function mia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a=r;r=r+16|0;d=a+8|0;e=a;if((k[c+40>>2]|0)!=300){k[e>>2]=136615;k[e+4>>2]=136636;Ska(c,2,e)}hoa(b,c,532,738,534);k[d>>2]=136615;k[d+4>>2]=136636;Lka(c,2,d);r=a;return}function nia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function oia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)<=0){Zka(c,b,137867,206);return}g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}Zka(c,b,137867,206);return}function pia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function qia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0;c=r;r=r+928|0;d=c+904|0;e=c+916|0;f=c+876|0;g=c+728|0;h=c+892|0;j=c+592|0;l=c+880|0;m=c+440|0;n=c+864|0;o=c+304|0;p=c+576|0;q=c+168|0;s=c+152|0;t=c+16|0;u=c;k[f>>2]=0;bO(k[b+44>>2]|0,e,759);xh(b,532);a:do if(CY()|0){v=g+56|0;w=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,w|0,d|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(d);Yua(A);Ava(w);C=F;D=E;break}Yua(d);B=0;Ia(40,g|0,136660,34)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,h|0,w|0),F=B,B=0,!(F&1)):0){B=0;ya(425,h|0)|0;F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(h);H=G;I=F;break}else{Yua(h);k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);break a}}else J=14;while(0);if((J|0)==14){E=Rb()|0;H=Q;I=E}k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);K=H;L=I;Qb(L|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}while(0);ria(a,b);a=j+56|0;z=j+4|0;D=j+56|0;C=j+128|0;y=j+132|0;I=j+36|0;H=j+52|0;g=m+56|0;h=m+4|0;w=m+56|0;x=m+128|0;E=m+132|0;F=m+36|0;G=m+52|0;M=o+56|0;N=o+4|0;O=o+56|0;P=o+128|0;R=o+132|0;S=o+36|0;T=o+52|0;U=0;V=1;while(1){k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,D|0,z|0);W=B;B=0;if(W&1){J=22;break}k[C>>2]=0;k[y>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,z|0);W=B;B=0;if(W&1){J=23;break}k[z>>2]=27560;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[H>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,z|0,d|0);W=B;B=0;if(W&1){J=21;break}Yua(d);B=0;Ia(40,j|0,136695,20)|0;W=B;B=0;if(W&1){J=44;break}B=0;wa(510,l|0,z|0);W=B;B=0;if(W&1){J=44;break}B=0;ya(424,l|0)|0;W=B;B=0;if(W&1){J=45;break}Yua(l);k[j>>2]=27468;k[a>>2]=27488;k[z>>2]=27560;Yua(I);Ava(z);vva(a);kpa(b);if(CY()|0){k[m>>2]=27524;k[g>>2]=27544;B=0;wa(508,w|0,h|0);W=B;B=0;if(W&1){J=34;break}k[x>>2]=0;k[E>>2]=-1;k[m>>2]=27468;k[g>>2]=27488;B=0;va(448,h|0);W=B;B=0;if(W&1){J=35;break}k[h>>2]=27560;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[G>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);W=B;B=0;if(W&1){J=33;break}Yua(d);B=0;W=Ia(40,m|0,136716,53)|0;X=B;B=0;if(X&1){J=47;break}B=0;X=Xa(242,W|0,V|0)|0;W=B;B=0;if(W&1){J=47;break}B=0;Ia(40,X|0,136770,2)|0;X=B;B=0;if(X&1){J=47;break}B=0;wa(510,n|0,h|0);X=B;B=0;if(X&1){J=47;break}B=0;ya(425,n|0)|0;X=B;B=0;if(X&1){J=48;break}Yua(n);k[m>>2]=27468;k[g>>2]=27488;k[h>>2]=27560;Yua(F);Ava(h);vva(g)}Voa(b);Aoa(f,b);if((V|0)>1){if(CY()|0){k[o>>2]=27524;k[M>>2]=27544;B=0;wa(508,O|0,N|0);X=B;B=0;if(X&1){J=56;break}k[P>>2]=0;k[R>>2]=-1;k[o>>2]=27468;k[M>>2]=27488;B=0;va(448,N|0);X=B;B=0;if(X&1){J=57;break}k[N>>2]=27560;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[T>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,N|0,d|0);X=B;B=0;if(X&1){J=55;break}Yua(d);B=0;Ia(40,o|0,136773,41)|0;X=B;B=0;if(X&1){J=64;break}B=0;wa(510,p|0,N|0);X=B;B=0;if(X&1){J=64;break}B=0;ya(425,p|0)|0;X=B;B=0;if(X&1){J=65;break}Yua(p);k[o>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(S);Ava(N);vva(M)}if(sia(0,k[f>>2]|0,U,.05)|0){J=95;break}if((V|0)>3){J=69;break}}if(U){if((k[U>>2]|0)!=0?(X=k[U+4>>2]|0,(X|0)!=0):0){W=k[X>>2]|0;if(W)Ec[k[(k[W>>2]|0)+4>>2]&1023](W);Sqa(X)}Sqa(U)}U=k[f>>2]|0;V=V+1|0}b:switch(J|0){case 21:{V=Rb()|0;f=Q;Yua(d);Yua(I);Ava(z);Y=f;Z=V;J=24;break}case 22:{V=Rb()|0;_=Q;$=V;vva(a);Qb($|0);break}case 23:{V=Rb()|0;Y=Q;Z=V;J=24;break}case 33:{V=Rb()|0;f=Q;Yua(d);Yua(F);Ava(h);aa=f;ba=V;J=36;break}case 34:{V=Rb()|0;ca=Q;da=V;vva(g);Qb(da|0);break}case 35:{V=Rb()|0;aa=Q;ba=V;J=36;break}case 44:{V=Rb()|0;ea=Q;fa=V;J=46;break}case 45:{V=Rb()|0;f=Q;Yua(l);ea=f;fa=V;J=46;break}case 47:{V=Rb()|0;ga=Q;ha=V;J=49;break}case 48:{V=Rb()|0;f=Q;Yua(n);ga=f;ha=V;J=49;break}case 55:{V=Rb()|0;f=Q;Yua(d);Yua(S);Ava(N);ia=f;ja=V;J=58;break}case 56:{V=Rb()|0;ka=Q;la=V;vva(M);Qb(la|0);break}case 57:{V=Rb()|0;ia=Q;ja=V;J=58;break}case 64:{V=Rb()|0;ma=Q;na=V;J=66;break}case 65:{V=Rb()|0;f=Q;Yua(p);ma=f;na=V;J=66;break}case 69:{if(CY()|0){V=q+56|0;f=q+4|0;k[q>>2]=27524;k[V>>2]=27544;B=0;wa(508,q+56|0,f|0);p=B;B=0;if(p&1){p=Rb()|0;oa=Q;pa=p;vva(V);Qb(pa|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[V>>2]=27488;B=0;va(448,f|0);p=B;B=0;do if(p&1){n=Rb()|0;qa=Q;ra=n}else{k[f>>2]=27560;n=q+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[q+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,f|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;U=Q;Yua(d);Yua(n);Ava(f);qa=U;ra=l;break}Yua(d);B=0;l=Ia(40,q|0,136815,46)|0;U=B;B=0;do if(((!(U&1)?(B=0,T=Xa(242,l|0,3)|0,R=B,B=0,!(R&1)):0)?(B=0,Ia(40,T|0,136862,9)|0,T=B,B=0,!(T&1)):0)?(B=0,wa(510,s|0,f|0),T=B,B=0,!(T&1)):0){B=0;ya(425,s|0)|0;T=B;B=0;if(T&1){T=Rb()|0;R=Q;Yua(s);sa=R;ta=T;break}else{Yua(s);k[q>>2]=27468;k[V>>2]=27488;k[f>>2]=27560;Yua(n);Ava(f);vva(V);J=95;break b}}else J=84;while(0);if((J|0)==84){l=Rb()|0;sa=Q;ta=l}k[q>>2]=27468;k[V>>2]=27488;k[f>>2]=27560;Yua(n);Ava(f);vva(V);K=sa;L=ta;Qb(L|0)}while(0);oa=qa;pa=ra;vva(V);Qb(pa|0)}else J=95;break}}if((J|0)==24){_=Y;$=Z;vva(a);Qb($|0)}else if((J|0)==36){ca=aa;da=ba;vva(g);Qb(da|0)}else if((J|0)==46){k[j>>2]=27468;k[a>>2]=27488;k[z>>2]=27560;Yua(I);Ava(z);vva(a);K=ea;L=fa;Qb(L|0)}else if((J|0)==49){k[m>>2]=27468;k[g>>2]=27488;k[h>>2]=27560;Yua(F);Ava(h);vva(g);K=ga;L=ha;Qb(L|0)}else if((J|0)==58){ka=ia;la=ja;vva(M);Qb(la|0)}else if((J|0)==66){k[o>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(S);Ava(N);vva(M);K=ma;L=na;Qb(L|0)}else if((J|0)==95){if(!(i[e>>0]|0)){r=c;return}c:do if(CY()|0){e=t+56|0;na=t+4|0;k[t>>2]=27524;k[e>>2]=27544;B=0;wa(508,t+56|0,na|0);ma=B;B=0;if(ma&1){ma=Rb()|0;ua=Q;xa=ma;vva(e);Qb(xa|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[e>>2]=27488;B=0;va(448,na|0);ma=B;B=0;do if(ma&1){M=Rb()|0;za=Q;Aa=M}else{k[na>>2]=27560;M=t+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[t+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,na|0,d|0);N=B;B=0;if(N&1){N=Rb()|0;S=Q;Yua(d);Yua(M);Ava(na);za=S;Aa=N;break}Yua(d);B=0;Ia(40,t|0,148942,18)|0;N=B;B=0;do if(!(N&1)?(B=0,wa(510,u|0,na|0),S=B,B=0,!(S&1)):0){B=0;ya(425,u|0)|0;S=B;B=0;if(S&1){S=Rb()|0;o=Q;Yua(u);Ba=o;Ca=S;break}else{Yua(u);k[t>>2]=27468;k[e>>2]=27488;k[na>>2]=27560;Yua(M);Ava(na);vva(e);break c}}else J=109;while(0);if((J|0)==109){N=Rb()|0;Ba=Q;Ca=N}k[t>>2]=27468;k[e>>2]=27488;k[na>>2]=27560;Yua(M);Ava(na);vva(e);K=Ba;L=Ca;Qb(L|0)}while(0);ua=za;xa=Aa;vva(e);Qb(xa|0)}while(0);k[d>>2]=206;fi(b,b+48|0,d,1,1);r=c;return}}function ria(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=b+20|0;if((th(k[c>>2]|0)|0)>0){d=0;do{e=qh(k[c>>2]|0,d)|0;if((Hc[k[(k[e>>2]|0)+164>>2]&511](e)|0)>0){f=0;do{g=ed[k[(k[e>>2]|0)+156>>2]&511](e,f)|0;if(ao(g)|0)Zn(g,0);f=f+1|0}while((f|0)<(Hc[k[(k[e>>2]|0)+164>>2]&511](e)|0))}d=d+1|0}while((d|0)<(th(k[c>>2]|0)|0))}Aia(a,b);if((th(k[c>>2]|0)|0)>0)h=0;else return;do{b=qh(k[c>>2]|0,h)|0;if(ed[k[(k[b>>2]|0)+256>>2]&511](b,206)|0){a=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;d=Rqa(a>>>0>536870911?-1:a<<3)|0;vp(b,d,206);if((a|0)>0){e=0;do{f=ed[k[(k[b>>2]|0)+156>>2]&511](b,e)|0;if(ao(f)|0)Un(f,0,+p[d+(e<<3)>>3]);e=e+1|0}while((e|0)!=(a|0))}Tqa(d)}h=h+1|0}while((h|0)<(th(k[c>>2]|0)|0));return}function sia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;a=r;r=r+496|0;e=a+472|0;f=a+312|0;g=a+460|0;h=a+448|0;i=a+160|0;j=a+176|0;l=a+12|0;m=a+24|0;n=a;o=Qqa(8)|0;B=0;va(485,o|0);q=B;B=0;if(q&1){q=Rb()|0;Sqa(o);Qb(q|0)}if((k[c>>2]|0)!=0?(q=c+4|0,s=k[q>>2]|0,u=Qqa(4)|0,v=k[s>>2]|0,w=Hc[k[(k[v>>2]|0)+36>>2]&511](v)|0,k[u>>2]=w,v=k[s>>2]|0,Fc[k[(k[v>>2]|0)+60>>2]&1023](v,w),k[o+4>>2]=u,(k[c>>2]|0)!=0):0){w=k[k[q>>2]>>2]|0;Fc[k[(k[w>>2]|0)+60>>2]&1023](w,k[u>>2]|0)}if((k[o>>2]|0)!=0?(u=o+4|0,w=k[k[u>>2]>>2]|0,Xc[k[(k[w>>2]|0)+48>>2]&63](w,k[k[b+4>>2]>>2]|0,-1.0),(k[o>>2]|0)!=0):0){b=k[k[u>>2]>>2]|0;x=+id[k[(k[b>>2]|0)+64>>2]&63](b,1)}else x=0.0;if(!(k[c>>2]|0))y=0.0;else{b=k[k[c+4>>2]>>2]|0;y=+id[k[(k[b>>2]|0)+64>>2]&63](b,1)}z=+$(+x);p[t>>3]=z;b=k[t+4>>2]|0;if(!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0)?(z=+$(+y),p[t>>3]=z,b=k[t+4>>2]|0,!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){z=x/y;b=EY()|0;a:do if(z<d)if(b){c=j+56|0;u=j+4|0;k[j>>2]=27524;k[c>>2]=27544;B=0;wa(508,j+56|0,u|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;vva(c);Qb(C|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[c>>2]=27488;B=0;va(448,u|0);w=B;B=0;do if(w&1){q=Rb()|0;D=Q;E=q}else{k[u>>2]=27560;q=j+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Yua(e);Yua(q);Ava(u);D=s;E=v;break}Yua(e);B=0;v=Ia(40,j|0,149177,1)|0;s=B;B=0;do if((((!(s&1)?(k[v+(k[(k[v>>2]|0)+-12>>2]|0)+12>>2]=50,F=v+(k[(k[v>>2]|0)+-12>>2]|0)+4|0,k[F>>2]=k[F>>2]&-177|32,B=0,F=Ia(40,v|0,136978,41)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Sa(1,F|0,+(z*100.0))|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,148270,3)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Sa(1,F|0,+(d*100.0))|0,F=B,B=0,!(F&1)):0){B=0;Ia(40,G|0,148274,3)|0;G=B;B=0;if(G&1){H=55;break}B=0;wa(510,l|0,u|0);G=B;B=0;if(G&1){H=55;break}B=0;ya(425,l|0)|0;G=B;B=0;if(G&1){G=Rb()|0;F=Q;Yua(l);I=F;J=G;break}else{Yua(l);k[j>>2]=27468;k[c>>2]=27488;k[u>>2]=27560;Yua(q);Ava(u);vva(c);K=1;break a}}else H=55;while(0);if((H|0)==55){v=Rb()|0;I=Q;J=v}k[j>>2]=27468;k[c>>2]=27488;k[u>>2]=27560;Yua(q);Ava(u);vva(c);L=I;M=J;Qb(M|0)}while(0);A=D;C=E;vva(c);Qb(C|0)}else K=1;else if(b){u=m+56|0;w=m+4|0;k[m>>2]=27524;k[u>>2]=27544;B=0;wa(508,m+56|0,w|0);v=B;B=0;if(v&1){v=Rb()|0;N=Q;O=v;vva(u);Qb(O|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[u>>2]=27488;B=0;va(448,w|0);v=B;B=0;do if(v&1){s=Rb()|0;P=Q;R=s}else{k[w>>2]=27560;s=m+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;F=Q;Yua(e);Yua(s);Ava(w);P=F;R=G;break}Yua(e);B=0;G=Ia(40,m|0,149177,1)|0;F=B;B=0;do if((((!(F&1)?(k[G+(k[(k[G>>2]|0)+-12>>2]|0)+12>>2]=50,S=G+(k[(k[G>>2]|0)+-12>>2]|0)+4|0,k[S>>2]=k[S>>2]&-177|32,B=0,S=Ia(40,G|0,136978,41)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Sa(1,S|0,+(z*100.0))|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,T|0,148278,3)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Sa(1,S|0,+(d*100.0))|0,S=B,B=0,!(S&1)):0){B=0;Ia(40,T|0,148274,3)|0;T=B;B=0;if(T&1){H=76;break}B=0;wa(510,n|0,w|0);T=B;B=0;if(T&1){H=76;break}B=0;ya(425,n|0)|0;T=B;B=0;if(T&1){T=Rb()|0;S=Q;Yua(n);U=S;V=T;break}else{Yua(n);k[m>>2]=27468;k[u>>2]=27488;k[w>>2]=27560;Yua(s);Ava(w);vva(u);K=0;break a}}else H=76;while(0);if((H|0)==76){G=Rb()|0;U=Q;V=G}k[m>>2]=27468;k[u>>2]=27488;k[w>>2]=27560;Yua(s);Ava(w);vva(u);L=U;M=V;Qb(M|0)}while(0);N=P;O=R;vva(u);Qb(O|0)}else K=0;while(0);if(!(k[o>>2]|0)){Sqa(o);r=a;return K|0}O=k[o+4>>2]|0;if(!O){Sqa(o);r=a;return K|0}R=k[O>>2]|0;if(R)Ec[k[(k[R>>2]|0)+4>>2]&1023](R);Sqa(O);Sqa(o);r=a;return K|0}K=f+56|0;a=f+4|0;k[f>>2]=27524;k[K>>2]=27544;B=0;wa(508,f+56|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;W=Q;X=o;vva(K);Qb(X|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[K>>2]=27488;B=0;va(448,a|0);o=B;B=0;do if(o&1){O=Rb()|0;Y=Q;Z=O}else{k[a>>2]=27560;O=f+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(e);Yua(O);Ava(a);Y=P;Z=R;break}Yua(e);B=0;R=Ia(40,f|0,148282,29)|0;P=B;B=0;b:do if(!(P&1)?(B=0,Xa(239,R|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,g|0,136872,87);V=B;B=0;do if(!(V&1)){B=0;eb(502,h|0,136960,17);U=B;B=0;if(U&1){U=Rb()|0;m=Q;Yua(g);_=m;aa=U;break}B=0;wa(510,i|0,a|0);U=B;B=0;if(U&1){U=Rb()|0;ba=Q;ca=U;da=1}else{B=0;ua(163,N|0,g|0,h|0,394,i|0);U=B;B=0;if(U&1)ea=1;else{B=0;eb(503,N|0,1240,229);B=0;ea=0}U=Rb()|0;m=Q;Yua(i);ba=m;ca=U;da=ea}Yua(h);Yua(g);if(da){_=ba;aa=ca}else{fa=ba;ga=ca;break b}}else{U=Rb()|0;_=Q;aa=U}while(0);zb(N|0);fa=_;ga=aa}else H=28;while(0);if((H|0)==28){R=Rb()|0;fa=Q;ga=R}k[f>>2]=27468;k[K>>2]=27488;k[a>>2]=27560;Yua(O);Ava(a);vva(K);L=fa;M=ga;Qb(M|0)}while(0);W=Y;X=Z;vva(K);Qb(X|0);return 0}function tia(a,b){a=a|0;b=b|0;return 0}function uia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,136872,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,108,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function via(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;k[e>>2]=0;f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;g=gq(b,534)|0;h=Rqa(f>>>0>536870911?-1:f<<3)|0;i=f<<1;j=Rqa(i>>>0>536870911?-1:i<<3)|0;i=Rqa(32)|0;Uo(b,e);l=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;m=Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0;if((m|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0)){n=l+8|0;o=g+12|0;q=i+8|0;s=i+16|0;t=i+24|0;u=m;do{Fc[k[(k[l>>2]|0)+24>>2]&1023](l,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[e>>2]|0,l);p[d>>3]=+p[n>>3]*+p[c>>3];nd[k[(k[b>>2]|0)+336>>2]&1023](b,h,l);ZX(h,f,1,0,d,1,1,0,h,1,f,0,k[o>>2]|0,1)|0;m=k[e>>2]|0;v=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;w=v<<1;x=Rqa(w>>>0>536870911?-1:w<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,x,m,l);if((v|0)>0){m=0;do{p[j+(m<<3)>>3]=+p[x+(m<<3)>>3];w=m+v|0;p[j+(w<<3)>>3]=+p[x+(w<<3)>>3];m=m+1|0}while((m|0)!=(v|0))}Tqa(x);y=+p[d>>3];p[i>>3]=y;p[q>>3]=0.0;p[s>>3]=0.0;p[t>>3]=y;ZX(j,2,f,1,i,2,2,0,j,2,f,0,k[o>>2]|0,1)|0;u=u+1|0}while((u|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0))}u=k[e>>2]|0;if(!u){k[e>>2]=0;Tqa(h);Tqa(j);Tqa(i);z=k[l>>2]|0;A=z+4|0;B=k[A>>2]|0;Ec[B&1023](l);r=a;return g|0}Tqa(u);k[e>>2]=0;Tqa(h);Tqa(j);Tqa(i);z=k[l>>2]|0;A=z+4|0;B=k[A>>2]|0;Ec[B&1023](l);r=a;return g|0}function wia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0;a=r;r=r+32|0;c=a+8|0;d=a;e=a+16|0;f=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;k[e>>2]=0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;h=f<<1;i=Rqa(h>>>0>536870911?-1:h<<3)|0;h=Rqa(16)|0;j=Rqa(16)|0;Uo(b,e);l=iq(b,534)|0;m=Wo(b,206)|0;n=Wo(b,993)|0;o=Wo(b,994)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=q+8|0;u=(f|0)>0;v=h+8|0;w=l+4|0;x=h+8|0;y=j+8|0;z=j+8|0;A=s;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[e>>2]|0,q);nd[k[(k[b>>2]|0)+336>>2]&1023](b,g,q);rd[k[(k[b>>2]|0)+340>>2]&511](b,i,k[e>>2]|0,q);B=+p[c>>3]*+p[t>>3];nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,q);if(u){s=k[w>>2]|0;C=0;do{D=s+(C<<3)|0;p[D>>3]=B*+p[d>>3]*+p[g+(C<<3)>>3]+ +p[D>>3];C=C+1|0}while((C|0)!=(f|0))}nd[k[(k[n>>2]|0)+48>>2]&1023](n,h,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,v,q);E=+p[h>>3];F=+p[x>>3];G=+aa(+(E*E+0.0+F*F));if(G>0.0){H=E/G;p[j>>3]=H;E=F/G;p[y>>3]=E;I=E;J=H}else{k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;I=0.0;J=0.0}a:do if(u){C=k[w>>2]|0;H=J;E=I;s=0;while(1){D=C+(s<<3)|0;p[D>>3]=B*(+p[i+(s<<3)>>3]*H+0.0+ +p[i+(f+s<<3)>>3]*E)+ +p[D>>3];D=s+1|0;if((D|0)==(f|0))break a;H=+p[j>>3];E=+p[z>>3];s=D}}while(0);A=A+1|0}while((A|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}Tqa(g);Tqa(i);i=k[e>>2]|0;if(!i){k[e>>2]=0;Tqa(h);Tqa(j);r=a;return l|0}Tqa(i);k[e>>2]=0;Tqa(h);Tqa(j);r=a;return l|0}function xia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;a=r;r=r+16|0;d=a;e=a+8|0;k[e>>2]=0;cp(c,a+12|0,299);f=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;rp(c,e,534,943);g=Rqa(f>>>0>536870911?-1:f<<3)|0;h=Wo(c,206)|0;i=Hc[k[(k[c>>2]|0)+304>>2]&511](c)|0;if((f|0)>0){j=0;do{l=k[(k[i>>2]|0)+32>>2]|0;m=Hc[k[(k[c>>2]|0)+112>>2]&511](c)|0;nd[l&1023](i,m,j);nd[k[(k[h>>2]|0)+48>>2]&1023](h,d,i);p[g+(j<<3)>>3]=+p[d>>3];j=j+1|0}while((j|0)!=(f|0))}if(k[b>>2]|0){j=k[k[b+4>>2]>>2]|0;Dc[k[(k[j>>2]|0)+16>>2]&255](j,f,k[e>>2]|0,g,0)}if(i)Ec[k[(k[i>>2]|0)+4>>2]&1023](i);Tqa(g);g=k[e>>2]|0;if(!g){r=a;return}Tqa(g);r=a;return}function yia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,136872,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,366,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function zia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;cp(c,e,298);switch(k[e>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,206);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,206);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,136872,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,379,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function Aia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;a=r;r=r+16|0;c=a;d=a+8|0;e=nn(k[b+28>>2]|0)|0;k[d>>2]=0;TZ(d,b,206,628);f=b+20|0;if((th(k[f>>2]|0)|0)>0){g=0;do{h=qh(k[f>>2]|0,g)|0;if(ed[k[(k[h>>2]|0)+256>>2]&511](h,206)|0)Bia(0,k[d>>2]|0,h);g=g+1|0}while((g|0)<(th(k[f>>2]|0)|0))}f=k[d>>2]|0;if(k[f>>2]|0){g=k[k[f+4>>2]>>2]|0;Ec[k[(k[g>>2]|0)+12>>2]&1023](g)}g=(e|0)>0;if(g){i=0.0;j=0.0;f=0;while(1){h=k[d>>2]|0;if(k[h>>2]|0){l=k[k[h+4>>2]>>2]|0;nd[k[(k[l>>2]|0)+24>>2]&1023](l,c,f)}m=+p[c>>3];if(m>0.0&m>j){n=i;o=m}else{n=m<0.0&m<i?m:i;o=j}f=f+1|0;if((f|0)==(e|0)){q=n;s=o;break}else{i=n;j=o}}f=k[d>>2]|0;l=(k[f>>2]|0)==0;if(g){o=s*3.0;s=q*3.0;g=l;h=f;t=0;while(1){if(!g){u=k[k[h+4>>2]>>2]|0;nd[k[(k[u>>2]|0)+24>>2]&1023](u,c,t)}q=+p[c>>3];if(q==1.0){u=k[d>>2]|0;if(k[u>>2]|0){v=k[k[u+4>>2]>>2]|0;Jc[k[(k[v>>2]|0)+20>>2]&1](v,t,o,0)}}else if(q==-1.0?(v=k[d>>2]|0,(k[v>>2]|0)!=0):0){u=k[k[v+4>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,s,0)}t=t+1|0;u=k[d>>2]|0;v=(k[u>>2]|0)==0;if((t|0)==(e|0)){w=u;x=v;break}else{g=v;h=u}}}else{w=f;x=l}if(x)y=w;else{z=w;A=26}}else{w=k[d>>2]|0;if(!(k[w>>2]|0))y=w;else{z=w;A=26}}if((A|0)==26){A=k[k[z+4>>2]>>2]|0;Ec[k[(k[A>>2]|0)+12>>2]&1023](A);y=k[d>>2]|0}if(!(k[y>>2]|0))B=0;else{A=k[k[y+4>>2]>>2]|0;B=Hc[k[(k[A>>2]|0)+52>>2]&511](A)|0}WZ(b,B,206,629);b=k[d>>2]|0;if(b){if((k[b>>2]|0)!=0?(d=k[b+4>>2]|0,(d|0)!=0):0){A=k[d>>2]|0;if(A)Ec[k[(k[A>>2]|0)+4>>2]&1023](A);Sqa(d)}Sqa(b)}if(!B){r=a;return}Sqa(B);r=a;return}function Bia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0;a=r;r=r+16|0;d=a;e=a+12|0;f=a+8|0;if(!(ed[k[(k[c>>2]|0)+256>>2]&511](c,206)|0)){r=a;return}g=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;h=g>>>0>536870911?-1:g<<3;i=Rqa(h)|0;j=Rqa(h)|0;l=Rqa(h)|0;k[e>>2]=0;k[f>>2]=0;Uo(c,e);xp(c,i,206);h=(g|0)>0;if(h){m=0;do{p[j+(m<<3)>>3]=+p[i+(m<<3)>>3]>=0.0?1.0:-1.0;m=m+1|0}while((m|0)!=(g|0))}rd[k[(k[c>>2]|0)+520>>2]&511](c,f,k[e>>2]|0,206);m=k[f>>2]|0;n=+p[m>>3];o=+p[m+8>>3];if(h){f=k[e>>2]|0;q=+p[m+24>>3]-n;s=+p[m+32>>3]-o;t=+aa(+(q*q+0.0+s*s));m=0;do{e=m*3|0;u=+$(+((+p[f+(e<<3)>>3]-n)*s-q*(+p[f+(e+1<<3)>>3]-o)))/t;p[l+(m<<3)>>3]=+p[j+(m<<3)>>3]*u;m=m+1|0}while((m|0)!=(g|0));if(h){h=c+24|0;c=b+4|0;m=0;do{f=Bo(k[(k[h>>2]|0)+(m<<2)>>2]|0)|0;if(k[b>>2]|0){e=k[k[c>>2]>>2]|0;nd[k[(k[e>>2]|0)+24>>2]&1023](e,d,f)}t=+$(+(+p[d>>3]));if(!(!(t==1.0)?!(+$(+(+p[l+(m<<3)>>3]))<t):0))v=13;if((v|0)==13?(v=0,f=Bo(k[(k[h>>2]|0)+(m<<2)>>2]|0)|0,(k[b>>2]|0)!=0):0){e=k[k[c>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,f,+p[l+(m<<3)>>3],0)}m=m+1|0}while((m|0)!=(g|0))}}Tqa(i);Tqa(j);Tqa(l);r=a;return}function Cia(a,b){a=a|0;b=b|0;return}function Dia(a){a=a|0;Sqa(a);return}function Eia(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=r;r=r+336|0;c=b;d=b+316|0;e=b+312|0;f=b+320|0;g=b+308|0;h=b+160|0;j=b+296|0;l=b+24|0;m=b+12|0;k[d>>2]=0;k[e>>2]=0;n=a+44|0;bO(k[n>>2]|0,f,759);cO(k[n>>2]|0,g,478);a:do if(CY()|0){n=h+56|0;o=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;Ia(40,h|0,137020,17)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,j|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,j|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(j);z=y;A=x;break}else{Yua(j);k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=14;while(0);if((C|0)==14){w=Rb()|0;z=Q;A=w}k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);xh(a,526);s=en(k[a+24>>2]|0,k[g>>2]|0,943)|0;g=Qqa(8)|0;B=0;va(485,g|0);v=B;B=0;b:do if(v&1)C=47;else{do if(k[g>>2]|0){B=0;u=ya(423,4)|0;q=B;B=0;if(q&1){C=47;break b}B=0;eb(505,u|0,s|0,0);q=B;B=0;if(q&1){q=Rb()|0;A=Q;Sqa(u);F=A;G=q;break b}else{k[g+4>>2]=u;break}}while(0);n=Qqa(8)|0;B=0;va(485,n|0);u=B;B=0;c:do if(u&1)C=49;else{do if(k[n>>2]|0){B=0;q=ya(423,4)|0;A=B;B=0;if(A&1){C=49;break c}B=0;eb(505,q|0,s|0,0);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Sqa(q);H=z;I=A;break c}else{k[n+4>>2]=q;break}}while(0);ioa(d,e,0,k[a+28>>2]|0,0);qi(a,g,n,k[d>>2]|0,k[e>>2]|0);if(k[g>>2]|0){t=k[k[g+4>>2]>>2]|0;Ec[k[(k[t>>2]|0)+12>>2]&1023](t)}if(k[n>>2]|0){t=k[k[n+4>>2]>>2]|0;Ec[k[(k[t>>2]|0)+12>>2]&1023](t)}VZ(a,g,735,629);VZ(a,n,734,629);if(i[f>>0]|0){d:do if(CY()|0){t=l+56|0;q=l+4|0;k[l>>2]=27524;k[t>>2]=27544;B=0;wa(508,l+56|0,q|0);A=B;B=0;if(A&1){A=Rb()|0;J=Q;K=A;vva(t);Qb(K|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[t>>2]=27488;B=0;va(448,q|0);A=B;B=0;do if(A&1){z=Rb()|0;L=Q;M=z}else{k[q>>2]=27560;z=l+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);h=B;B=0;if(h&1){h=Rb()|0;j=Q;Yua(c);Yua(z);Ava(q);L=j;M=h;break}Yua(c);B=0;Ia(40,l|0,148942,18)|0;h=B;B=0;do if(!(h&1)?(B=0,wa(510,m|0,q|0),j=B,B=0,!(j&1)):0){B=0;ya(425,m|0)|0;j=B;B=0;if(j&1){j=Rb()|0;o=Q;Yua(m);N=o;O=j;break}else{Yua(m);k[l>>2]=27468;k[t>>2]=27488;k[q>>2]=27560;Yua(z);Ava(q);vva(t);break d}}else C=51;while(0);if((C|0)==51){h=Rb()|0;N=Q;O=h}k[l>>2]=27468;k[t>>2]=27488;k[q>>2]=27560;Yua(z);Ava(q);vva(t);D=N;E=O;Qb(E|0)}while(0);J=L;K=M;vva(t);Qb(K|0)}while(0);q=c;k[q>>2]=735;k[q+4>>2]=734;fi(a,a+48|0,c,2,1)}q=k[d>>2]|0;if(q)Tqa(q);k[d>>2]=0;q=k[e>>2]|0;if(!q){r=b;return}Tqa(q);r=b;return}while(0);if((C|0)==49){u=Rb()|0;H=Q;I=u}Sqa(n);D=H;E=I;Qb(E|0)}while(0);if((C|0)==47){C=Rb()|0;F=Q;G=C}Sqa(g);D=F;E=G;Qb(E|0)}function Fia(a,b,c){a=a|0;b=b|0;c=c|0;return}function Gia(a,b,c){a=a|0;b=b|0;c=c|0;return}function Hia(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,526,738,534);return}function Iia(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function Jia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}Zka(c,b,137052,353);Zka(c,b,137074,351);Zka(c,b,137098,352);Zka(c,b,137867,206);return}function Kia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function Lia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Mia(a,b){a=a|0;b=b|0;return 0}function Nia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,49,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Oia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144189,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Pia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144203,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Qia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,58,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ria(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,61,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Sia(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,137127,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,137199,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,64,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Tia(a,b){a=a|0;b=b|0;return}function Uia(a){a=a|0;Sqa(a);return}function Via(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0,m=0,n=0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,B=0.0,C=0,D=0,E=0,F=0;d=r;r=r+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;i=+p[c>>3];j=+p[c+8>>3];l=k[c+16>>2]|0;m=k[c+20>>2]|0;n=k[c+24>>2]|0;o=+p[c+40>>3];q=+p[c+48>>3];s=+p[c+56>>3];t=+p[c+64>>3];u=+p[c+72>>3];v=+p[c+80>>3];w=+p[c+96>>3];k[e>>2]=k[c+88>>2];B=+p[c+104>>3];k[f>>2]=n;c=n+-1|0;k[g>>2]=c;C=n+1|0;k[h>>2]=C;p[y>>3]=v;p[y+8>>3]=t;p[y+16>>3]=o;p[y+24>>3]=s;p[y+32>>3]=q;p[y+40>>3]=u;p[y+48>>3]=j;p[x>>3]=w;D=Rqa(n>>>0>536870911?-1:n<<3)|0;if((n|0)>0){E=0;do{p[D+(E<<3)>>3]=+p[l+(E<<3)>>3];E=E+1|0}while((E|0)<(n|0))}E=Rqa(C>>>0>536870911?-1:C<<3)|0;if((n|0)>-1){C=m+(c<<3)|0;l=0;while(1){F=E+(l<<3)|0;p[F>>3]=+p[m+(l<<3)>>3]/1.0e3/B;if((l|0)==(c|0))p[F>>3]=+p[C>>3]/1.0e3/B;if((l|0)==(n|0))p[F>>3]=+p[C>>3]/1.0e3/B;if((l|0)<(n|0))l=l+1|0;else break}}l=c>>>0>536870911?-1:c<<3;c=Rqa(l)|0;n=Rqa(l)|0;p[z>>3]=i/1.0e3;rc(f|0,h|0,g|0,E|0,c|0,n|0,D|0)|0;Ib(e|0,h|0,g|0,E|0,c|0,n|0)|0;i=+p[A+8>>3];p[a>>3]=+p[A>>3];p[b>>3]=i;Tqa(E);Tqa(c);Tqa(n);Tqa(D);r=d;return}function Wia(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;b=r;r=r+336|0;c=b+320|0;d=b+334|0;e=b+333|0;f=b+332|0;g=b+312|0;h=b+308|0;j=b+304|0;l=b+168|0;m=b+152|0;n=b+16|0;o=b;k[h>>2]=0;k[j>>2]=0;p=a+44|0;cO(k[p>>2]|0,b+316|0,478);cO(k[p>>2]|0,g,476);bO(k[p>>2]|0,d,759);bO(k[p>>2]|0,e,370);bO(k[p>>2]|0,f,361);if((k[g>>2]|0)==997){i[e>>0]=1;i[f>>0]=0;q=0;s=1}else{q=i[f>>0]|0;s=i[e>>0]|0}if(((s^1)&(q^1))<<24>>24){r=b;return}a:do if(CY()|0){q=l+56|0;s=l+4|0;k[l>>2]=27524;k[q>>2]=27544;B=0;wa(508,l+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=l+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;Ia(40,l|0,137223,28)|0;z=B;B=0;do if(!(z&1)?(B=0,wa(510,m|0,s|0),A=B,B=0,!(A&1)):0){B=0;ya(425,m|0)|0;A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(m);D=C;E=A;break}else{Yua(m);k[l>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);break a}}else F=18;while(0);if((F|0)==18){z=Rb()|0;D=Q;E=z}k[l>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);G=D;H=E;Qb(H|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}while(0);if(i[e>>0]|0)xh(a,998);if(i[f>>0]|0)Xia(a,1001);if(i[e>>0]|0){e=Zia(a)|0;v=_ia(a,e)|0;xoa(a,v);if(i[d>>0]|0){b:do if(CY()|0){d=n+56|0;y=n+4|0;k[n>>2]=27524;k[d>>2]=27544;B=0;wa(508,n+56|0,y|0);x=B;B=0;if(x&1){x=Rb()|0;I=Q;J=x;vva(d);Qb(J|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[d>>2]=27488;B=0;va(448,y|0);x=B;B=0;do if(x&1){u=Rb()|0;K=Q;L=u}else{k[y>>2]=27560;u=n+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(c);Yua(u);Ava(y);K=D;L=E;break}Yua(c);B=0;Ia(40,n|0,148942,18)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,o|0,y|0),D=B,B=0,!(D&1)):0){B=0;ya(425,o|0)|0;D=B;B=0;if(D&1){D=Rb()|0;l=Q;Yua(o);M=l;N=D;break}else{Yua(o);k[n>>2]=27468;k[d>>2]=27488;k[y>>2]=27560;Yua(u);Ava(y);vva(d);break b}}else F=40;while(0);if((F|0)==40){E=Rb()|0;M=Q;N=E}k[n>>2]=27468;k[d>>2]=27488;k[y>>2]=27560;Yua(u);Ava(y);vva(d);G=M;H=N;Qb(H|0)}while(0);I=K;J=L;vva(d);Qb(J|0)}while(0);gO(k[p>>2]|0,j,h,1015);ci(a,a+48|0,k[j>>2]|0,k[h>>2]|0,1)}if((k[g>>2]|0)==997)gi(a);if(v){if((k[v>>2]|0)!=0?(g=k[v+4>>2]|0,(g|0)!=0):0){p=k[g>>2]|0;if(p)Ec[k[(k[p>>2]|0)+4>>2]&1023](p);Sqa(g)}Sqa(v)}if(e){if((k[e>>2]|0)!=0?(v=k[e+4>>2]|0,(v|0)!=0):0){g=k[v>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(v)}Sqa(e)}e=k[h>>2]|0;if(e){v=k[j>>2]|0;if((e|0)>0){g=v;p=e;e=0;while(1){J=g+(e<<2)|0;L=k[J>>2]|0;if(!L)O=p;else{Tqa(L);O=k[h>>2]|0}k[J>>2]=0;e=e+1|0;J=k[j>>2]|0;if((e|0)>=(O|0)){P=J;break}else{g=J;p=O}}}else P=v;if(P)Tqa(P);k[j>>2]=0}}if(!(i[f>>0]|0)){r=b;return}Yia(a,999);r=b;return}
+-function bD(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115194,5);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function cD(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121097,4);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function dD(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;a=e+56|0;i=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(a);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,75969,84);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,118419,9);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,68,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[e>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(a);Qb(F|0)}while(0);l=o;m=p;vva(a);Qb(m|0)}function eD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function fD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,76,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function hD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77521,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,38,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function iD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121282,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0);return 0}function jD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,40,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function kD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function lD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,41,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function mD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77921,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function nD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77898,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function oD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77879,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function pD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,46,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function qD(a){a=a|0;return}function rD(a){a=a|0;Sqa(a);return}function sD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76054,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,65,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function tD(a){a=a|0;k[a>>2]=32164;k[a>>2]=32356;k[a+12>>2]=0;return}function uD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;k[a>>2]=32164;B=0;e=B;B=0;if(e&1){e=Rb()|0;f=e;g=Q;Qb(f|0)}k[a>>2]=32356;k[a+4>>2]=b;k[a+8>>2]=d;B=0;b=Xa(250,a|0,d|0)|0;d=B;B=0;if(!(d&1)){if((b|0)<=0){k[a+12>>2]=0;return}B=0;d=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;e=B;B=0;if(!(e&1)){k[a+12>>2]=d;a=0;do{p[d+(a<<3)>>3]=+p[c+(a<<3)>>3];a=a+1|0}while((a|0)!=(b|0));return}}b=Rb()|0;f=b;g=Q;Qb(f|0)}function vD(a){a=a|0;var b=0;k[a>>2]=32356;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function wD(a){a=a|0;var b=0,c=0;k[a>>2]=32356;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;Sqa(a);return}function xD(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function yD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(l);s=v;t=u;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;u=Ia(40,d|0,76156,13)|0;v=B;B=0;do if((((!(v&1)?(k[u+(k[(k[u>>2]|0)+-12>>2]|0)+12>>2]=25,w=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0,k[w>>2]=k[w>>2]&-177|32,B=0,w=ya(427,k[a+4>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,u|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,Ia(40,y|0,120962,2)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,l|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(e);z=x;A=y;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);y=a+8|0;a:do if((qw(a,k[y>>2]|0)|0)>0){x=f+56|0;w=f+4|0;C=f+56|0;D=f+128|0;E=f+132|0;F=f+36|0;G=f+52|0;H=a+12|0;I=0;while(1){k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,C|0,w|0);J=B;B=0;if(J&1){K=33;break}k[D>>2]=0;k[E>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);J=B;B=0;if(J&1){K=34;break}k[w>>2]=27560;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[G>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);J=B;B=0;if(J&1){K=32;break}Yua(c);B=0;J=Ia(40,f|0,149175,1)|0;L=B;B=0;if(L&1){K=42;break}B=0;Sa(1,J|0,+(+p[(k[H>>2]|0)+(I<<3)>>3]))|0;J=B;B=0;if(J&1){K=42;break}B=0;wa(510,g|0,w|0);J=B;B=0;if(J&1){K=42;break}B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){K=43;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);I=I+1|0;if((I|0)>=(qw(a,k[y>>2]|0)|0))break a}if((K|0)==32){I=Rb()|0;H=Q;Yua(c);Yua(F);Ava(w);M=H;N=I;K=35}else if((K|0)==33){I=Rb()|0;O=Q;P=I;vva(x);Qb(P|0)}else if((K|0)==34){I=Rb()|0;M=Q;N=I;K=35}else if((K|0)==42){I=Rb()|0;R=Q;S=I;K=44}else if((K|0)==43){I=Rb()|0;H=Q;Yua(g);R=H;S=I;K=44}if((K|0)==35){O=M;P=N;vva(x);Qb(P|0)}else if((K|0)==44){k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);T=R;U=S;Qb(U|0)}}while(0);I=h+56|0;H=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;V=Q;W=G;vva(I);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){E=Rb()|0;X=Q;Y=E}else{k[H>>2]=27560;E=h+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(c);Yua(E);Ava(H);X=C;Y=D;break}Yua(c);B=0;D=Ia(40,h|0,120965,3)|0;C=B;B=0;do if((!(C&1)?(B=0,J=ya(427,k[y>>2]|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(J)|0,B=0,Z=Ia(40,D|0,J|0,L|0)|0,L=B,B=0,!(L&1)):0){B=0;Ia(40,Z|0,145593,2)|0;Z=B;B=0;if(Z&1){K=51;break}B=0;wa(510,i|0,H|0);Z=B;B=0;if(Z&1){K=51;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;L=Q;Yua(i);_=L;$=Z;break}else{Yua(i);k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(I);r=b;return}}else K=51;while(0);if((K|0)==51){D=Rb()|0;_=Q;$=D}k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(I);T=_;U=$;Qb(U|0)}while(0);V=X;W=Y;vva(I);Qb(W|0)}else K=26;while(0);if((K|0)==26){u=Rb()|0;z=Q;A=u}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);T=z;U=A;Qb(U|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}function zD(a){a=a|0;return -1}function AD(a){a=a|0;return 622}function BD(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+12>>2]|0;e=k[a+8>>2]|0;k[b>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;f=a;g=Q;Sqa(b);Qb(f|0)}k[b>>2]=32356;k[b+4>>2]=c;k[b+8>>2]=e;B=0;c=Xa(250,b|0,e|0)|0;e=B;B=0;if(!(e&1)){if((c|0)<=0){k[b+12>>2]=0;return b|0}B=0;e=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;a=B;B=0;if(!(a&1)){k[b+12>>2]=e;a=0;do{p[e+(a<<3)>>3]=+p[d+(a<<3)>>3];a=a+1|0}while((a|0)!=(c|0));return b|0}}c=Rb()|0;f=c;g=Q;Sqa(b);Qb(f|0);return 0}function CD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=110;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+8|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=a+8|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+8|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;t=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;y=v;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(t);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,76170,75);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,t|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,70,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(u);T=R;U=P;Qb(T|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=qw(a,k[w>>2]|0)|0;w=a+12|0;if((y|0)<=0){k[w>>2]=0;r=e;return}a=(k[w>>2]|0)==0;if(s){i[k[b>>2]>>0]=a&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(a){r=e;return}C=y<<3;TEa(s|0,k[w>>2]|0,C|0)|0;k[b>>2]=(k[b>>2]|0)+C;r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(a){r=e;return}k[c>>2]=d+(y<<3);r=e;return}case 1:{d=k[b>>2]|0;c=i[d>>0]|0;k[b>>2]=d+1;if(c&1){r=e;return}c=Rqa(y>>>0>536870911?-1:y<<3)|0;k[w>>2]=c;w=k[b>>2]|0;d=y<<3;TEa(c|0,w|0,d|0)|0;k[b>>2]=w+d;r=e;return}default:{e=n+56|0;d=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;V=Q;W=w;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);w=B;B=0;do if(w&1){b=Rb()|0;X=Q;Y=b}else{k[d>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(f);Yua(b);Ava(d);X=y;Y=c;break}Yua(f);B=0;c=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,c|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,o|0,76170,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(o);Z=s;_=A;break}B=0;wa(510,q|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;$=1;aa=Q;ba=A}else{B=0;ua(163,a|0,o|0,p|0,77,q|0);A=B;B=0;if(A&1)ca=1;else{B=0;eb(503,a|0,1240,229);B=0;ca=0}A=Rb()|0;s=Q;Yua(q);$=ca;aa=s;ba=A}Yua(p);Yua(o);if($){Z=ba;_=aa}else{da=ba;ea=aa;break c}}else{A=Rb()|0;Z=A;_=Q}while(0);zb(a|0);da=Z;ea=_}else S=49;while(0);if((S|0)==49){c=Rb()|0;da=c;ea=Q}k[n>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);T=da;U=ea;Qb(T|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}}}function DD(a){a=a|0;return k[a+4>>2]|0}function ED(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;d=Qqa(16)|0;c=k[a+4>>2]|0;b=k[a+12>>2]|0;e=k[a+8>>2]|0;k[d>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;f=a;g=Q;Sqa(d);Qb(f|0)}k[d>>2]=32356;k[d+4>>2]=c;k[d+8>>2]=e;B=0;c=Xa(250,d|0,e|0)|0;e=B;B=0;if(!(e&1)){if((c|0)<=0){k[d+12>>2]=0;return d|0}B=0;e=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;a=B;B=0;if(!(a&1)){k[d+12>>2]=e;a=0;do{p[e+(a<<3)>>3]=+p[b+(a<<3)>>3];a=a+1|0}while((a|0)!=(c|0));return d|0}}c=Rb()|0;f=c;g=Q;Sqa(d);Qb(f|0);return 0}function FD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+16|0;e=d;if((k[a+8>>2]|0)==736){f=Qqa(16)|0;B=0;ib(292,f|0,k[a+4>>2]|0,k[a+12>>2]|0,736);g=B;B=0;if(!(g&1)){h=f;r=d;return h|0}g=Rb()|0;i=Q;Sqa(f);j=i;l=g;Qb(l|0)}g=k[a+12>>2]|0;p[e>>3]=+p[g+(b<<3)>>3];p[e+8>>3]=+p[g+(c<<3)>>3];c=Qqa(16)|0;B=0;ib(292,c|0,k[a+4>>2]|0,e|0,738);e=B;B=0;if(e&1){e=Rb()|0;a=Q;Sqa(c);j=a;l=e;Qb(l|0)}else{h=c;r=d;return h|0}return 0}function GD(a){a=a|0;return ((k[a+8>>2]|0)==736?736:738)|0}function HD(a){a=a|0;return qw(a,k[a+8>>2]|0)|0}function ID(a){a=a|0;return 1}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=qw(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;e=k[a+12>>2]|0;a=ma(c,d)|0;d=0;do{p[b+(d+a<<3)>>3]=+p[e+(d<<3)>>3];d=d+1|0}while((d|0)!=(c|0));return}function KD(a,b,c){a=a|0;b=b|0;c=c|0;sw(a,b,k[a+12>>2]|0,c,k[a+8>>2]|0);return}function LD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pw(a,b,k[a+12>>2]|0,c,d,k[a+8>>2]|0);return}function MD(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function ND(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=qw(a,k[a+8>>2]|0)|0;d=+(c|0);if((c|0)<=0){e=0.0;f=e/d;p[b>>3]=f;return}g=k[a+12>>2]|0;a=0;h=0.0;while(1){i=h+ +p[g+(a<<3)>>3];a=a+1|0;if((a|0)==(c|0)){e=i;break}else h=i}f=e/d;p[b>>3]=f;return}function OD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0.0,i=0,j=0,l=0,m=0,n=0,o=0,q=0;d=r;r=r+32|0;e=d;f=a+8|0;g=qw(a,k[f>>2]|0)|0;h=+(g|0);i=b+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;j=Qqa(64)|0;B=0;va(491,j|0);l=B;B=0;if(l&1){l=Rb()|0;Sqa(j);Qb(l|0)}if((g|0)<=0){m=k[j>>2]|0;n=m+4|0;o=k[n>>2]|0;Ec[o&1023](j);r=d;return}l=e+8|0;q=0;do{nd[k[(k[j>>2]|0)+32>>2]&1023](j,k[f>>2]|0,q);rd[k[(k[a>>2]|0)+60>>2]&511](a,e,c,j);p[b>>3]=+p[b>>3]+ +p[e>>3]/h;p[i>>3]=+p[i>>3]+ +p[l>>3]/h;q=q+1|0}while((q|0)!=(g|0));m=k[j>>2]|0;n=m+4|0;o=k[n>>2]|0;Ec[o&1023](j);r=d;return}function PD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Rqa(8)|0;f=Rqa(8)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,e);p[f>>3]=0.0;k[b>>2]=e;k[c>>2]=f;k[d>>2]=1;return}function QD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0;f=Rqa(8)|0;g=Rqa(8)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,f);p[g>>3]=e;k[b>>2]=f;k[c>>2]=g;k[d>>2]=1;return}function RD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=qw(a,k[a+8>>2]|0)|0;d=k[a+12>>2]|0;e=+p[d>>3];f=e*e;if((c|0)>1){g=1;h=f}else{i=f;p[b>>3]=i;return}while(1){f=+p[d+(g<<3)>>3];e=f*f;f=e<h?e:h;g=g+1|0;if((g|0)==(c|0)){i=f;break}else h=f}p[b>>3]=i;return}function SD(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=qw(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;if(+p[e>>3]<b)p[e>>3]=b;a=a+1|0}while((a|0)!=(c|0));return}function TD(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0;b=qw(a,k[a+8>>2]|0)|0;if((b|0)<=0){c=0.0;return +c}d=k[a+12>>2]|0;a=0;e=0.0;while(1){f=+$(+(+p[d+(a<<3)>>3]));g=f>e?f:e;a=a+1|0;if((a|0)==(b|0)){c=g;break}else e=g}return +c}function UD(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=qw(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function VD(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=qw(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function WD(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=qw(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function XD(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=qw(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function YD(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=qw(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;p[e>>3]=+p[e>>3]*b;a=a+1|0}while((a|0)!=(c|0));return}function ZD(a,b){a=a|0;b=+b;var c=0,d=0;c=qw(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{p[d+(a<<3)>>3]=b;a=a+1|0}while((a|0)!=(c|0));return}function _D(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=a+8|0;q=qw(a,k[o>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=622){s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(t);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,121046,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,g|0,76170,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,121097,4);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(g);H=E;I=G;break}B=0;wa(510,i|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,g|0,h|0,346,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(i);J=E;K=G;L=M}Yua(h);Yua(g);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}if((k[b+8>>2]|0)==(k[o>>2]|0)){if((q|0)<=0){r=d;return}o=k[a+12>>2]|0;a=k[b+12>>2]|0;w=0;do{s=o+(w<<3)|0;p[s>>3]=+p[s>>3]+ +p[a+(w<<3)>>3]*c;w=w+1|0}while((w|0)!=(q|0));r=d;return}d=j+56|0;q=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,q|0);w=B;B=0;if(w&1){w=Rb()|0;T=Q;U=w;vva(d);Qb(U|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,q|0);w=B;B=0;do if(w&1){a=Rb()|0;V=Q;W=a}else{k[q>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;s=Q;Yua(e);Yua(a);Ava(q);V=s;W=o;break}Yua(e);B=0;o=Ia(40,j|0,121046,50)|0;s=B;B=0;b:do if((((!(s&1)?(B=0,z=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=ya(427,z|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(y)|0,B=0,v=Ia(40,o|0,y|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,l|0,76170,75);z=B;B=0;do if(!(z&1)){B=0;eb(502,m|0,121097,4);y=B;B=0;if(y&1){y=Rb()|0;N=Q;Yua(l);X=y;Y=N;break}B=0;wa(510,n|0,q|0);N=B;B=0;if(N&1){N=Rb()|0;Z=1;_=Q;$=N}else{B=0;ua(163,v|0,l|0,m|0,348,n|0);N=B;B=0;if(N&1)aa=1;else{B=0;eb(503,v|0,1240,229);B=0;aa=0}N=Rb()|0;y=Q;Yua(n);Z=aa;_=y;$=N}Yua(m);Yua(l);if(Z){X=$;Y=_}else{ba=_;ca=$;break b}}else{N=Rb()|0;X=N;Y=Q}while(0);zb(v|0);ba=Y;ca=X}else P=49;while(0);if((P|0)==49){o=Rb()|0;ba=Q;ca=o}k[j>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(a);Ava(q);vva(d);R=ba;S=ca;Qb(S|0)}while(0);T=V;U=W;vva(d);Qb(U|0)}function $D(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0.0,f=0,g=0,h=0,i=0;d=qw(a,k[a+8>>2]|0)|0;e=+$(+b);p[t>>3]=e;f=k[t+4>>2]|0;g=(d|0)>0;if((f>>>0<2146435072|(f|0)==2146435072&(k[t>>2]|0)>>>0<1)&g){f=k[a+12>>2]|0;h=0;do{i=f+(h<<3)|0;if(+p[i>>3]<b)p[i>>3]=b;h=h+1|0}while((h|0)!=(d|0))}b=+$(+c);p[t>>3]=b;h=k[t+4>>2]|0;if(!((h>>>0<2146435072|(h|0)==2146435072&(k[t>>2]|0)>>>0<1)&g))return;g=k[a+12>>2]|0;a=0;do{h=g+(a<<3)|0;if(+p[h>>3]>c)p[h>>3]=c;a=a+1|0}while((a|0)!=(d|0));return}function aE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!(k[b>>2]|0))return;d=k[k[b+4>>2]>>2]|0;Dc[k[(k[d>>2]|0)+16>>2]&255](d,3,c,k[a+12>>2]|0,0);return}function bE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=qw(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=622){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,76170,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121153,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,381,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T>U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=32356;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(250,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,76170,75);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121153,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,383,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=qw(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=622){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,76170,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121166,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,412,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T<U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=32356;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(250,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,76170,75);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121166,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,414,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function dE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=qw(a,k[n>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=622){q=e+56|0;s=e+4|0;k[e>>2]=27524;k[q>>2]=27544;B=0;wa(508,e+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=e+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(d);Yua(w);Ava(s);x=A;y=z;break}Yua(d);B=0;z=Ia(40,e|0,121102,50)|0;A=B;B=0;a:do if((((!(A&1)?(B=0,C=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=ya(427,C|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(D)|0,B=0,E=Ia(40,z|0,D|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,f|0,76170,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,121179,15);D=B;B=0;if(D&1){D=Rb()|0;F=Q;Yua(f);G=D;H=F;break}B=0;wa(510,h|0,s|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;J=F;K=1}else{B=0;ua(163,E|0,f|0,g|0,441,h|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,E|0,1240,229);B=0;L=0}F=Rb()|0;D=Q;Yua(h);I=D;J=F;K=L}Yua(g);Yua(f);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=F;H=Q}while(0);zb(E|0);M=G;N=H}else O=20;while(0);if((O|0)==20){z=Rb()|0;M=z;N=Q}k[e>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);P=N;R=M;Qb(R|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}v=b+8|0;q=k[v>>2]|0;if((q|0)==(k[n>>2]|0)){n=Rqa(o>>>0>536870911?-1:o<<3)|0;if((o|0)>0){y=k[a+12>>2]|0;x=k[b+12>>2]|0;b=0;do{p[n+(b<<3)>>3]=+p[y+(b<<3)>>3]/+p[x+(b<<3)>>3];b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;S=a;T=Q}else{k[o>>2]=32356;k[o+4>>2]=b;k[o+8>>2]=q;B=0;b=Xa(250,o|0,q|0)|0;q=B;B=0;if(!(q&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(n);r=c;return o|0}B=0;q=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=q;TEa(q|0,n|0,b<<3|0)|0;Tqa(n);r=c;return o|0}}c=Rb()|0;S=c;T=Q}Sqa(o);P=T;R=S;Qb(R|0)}S=i+56|0;T=i+4|0;k[i>>2]=27524;k[S>>2]=27544;B=0;wa(508,i+56|0,T|0);o=B;B=0;if(o&1){o=Rb()|0;U=Q;V=o;vva(S);Qb(V|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);o=B;B=0;do if(o&1){c=Rb()|0;W=Q;X=c}else{k[T>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,T|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;b=Q;Yua(d);Yua(c);Ava(T);W=b;X=n;break}Yua(d);B=0;n=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,q=ya(427,k[v>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(q)|0,B=0,x=Ia(40,n|0,q|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,j|0,76170,75);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121179,15);q=B;B=0;if(q&1){q=Rb()|0;y=Q;Yua(j);Y=q;Z=y;break}B=0;wa(510,m|0,T|0);y=B;B=0;if(y&1){y=Rb()|0;_=1;$=Q;aa=y}else{B=0;ua(163,x|0,j|0,l|0,443,m|0);y=B;B=0;if(y&1)ba=1;else{B=0;eb(503,x|0,1240,229);B=0;ba=0}y=Rb()|0;q=Q;Yua(m);_=ba;$=q;aa=y}Yua(l);Yua(j);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{y=Rb()|0;Y=y;Z=Q}while(0);zb(x|0);ca=Z;da=Y}else O=46;while(0);if((O|0)==46){n=Rb()|0;ca=Q;da=n}k[i>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(c);Ava(T);vva(S);P=ca;R=da;Qb(R|0)}while(0);U=W;V=X;vva(S);Qb(V|0);return 0}function eE(a,b){a=a|0;b=b|0;return}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76246,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76246,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function hE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,76332,30)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,141170,1)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76246,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76246,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function jE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76246,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function kE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76246,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function lE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76246,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function mE(a){a=a|0;k[a>>2]=32548;return}function nE(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=32548;k[a+4>>2]=b;i[a+8>>0]=c&1;return}function oE(a){a=a|0;k[a>>2]=32548;return}function pE(a){a=a|0;Sqa(a);return}function qE(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function rE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;j=Q;l=h;vva(f);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){m=Rb()|0;n=Q;o=m}else{k[g>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(g);n=q;o=p;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;p=Ia(40,d|0,76374,13)|0;q=B;B=0;if((((((!(q&1)?(k[p+(k[(k[p>>2]|0)+-12>>2]|0)+12>>2]=25,q=p+(k[(k[p>>2]|0)+-12>>2]|0)+4|0,k[q>>2]=k[q>>2]&-177|32,B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,149175,1)|0,t=B,B=0,!(t&1)):0)?(t=(i[a+8>>0]|0)!=0,B=0,q=Ia(40,s|0,(t?159247:159252)|0,(t?4:5)|0)|0,t=B,B=0,!(t&1)):0)?(B=0,Ia(40,q|0,149177,1)|0,q=B,B=0,!(q&1)):0)?(B=0,wa(510,e|0,g|0),q=B,B=0,!(q&1)):0){B=0;ya(424,e|0)|0;q=B;B=0;if(!(q&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);r=b;return}q=Rb()|0;t=Q;Yua(e);u=t;v=q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);Qb(v|0)}q=Rb()|0;u=Q;v=q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);Qb(v|0)}while(0);j=n;l=o;vva(f);Qb(l|0)}function sE(a){a=a|0;return -1}function tE(a){a=a|0;return 556}function uE(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=i[a+8>>0]|0;k[b>>2]=32548;k[b+4>>2]=c;i[b+8>>0]=d;return b|0}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=44;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=i[a+8>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+9;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+4|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[a+8>>0]=i[d>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;p=Q;q=d;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){a=Rb()|0;s=Q;t=a}else{k[b>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(f);Yua(a);Ava(b);s=c;t=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,76388,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;u=Q;Yua(h);v=u;w=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;x=n;y=Q;z=1}else{B=0;ua(163,o|0,h|0,j|0,56,m|0);n=B;B=0;if(n&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}n=Rb()|0;u=Q;Yua(m);x=n;y=u;z=A}Yua(j);Yua(h);if(z){v=y;w=x}else{C=y;D=x;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}}else{u=Rb()|0;v=Q;w=u}while(0);zb(o|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function wE(a){a=a|0;return k[a+4>>2]|0}function xE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Qqa(12)|0;k[d>>2]=32548;k[d+4>>2]=k[a+4>>2];i[d+8>>0]=i[a+8>>0]|0;return d|0}function yE(a,b,c){a=a|0;b=b|0;c=c|0;c=Qqa(12)|0;k[c>>2]=32548;k[c+4>>2]=k[a+4>>2];i[c+8>>0]=i[a+8>>0]|0;return c|0}function zE(a,b){a=a|0;b=b|0;i[b>>0]=i[a+8>>0]|0;return}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,119332,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76388,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,105,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function BE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,119332,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76388,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,107,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function CE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,119332,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76388,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,109,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function DE(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function EE(a,b,c){a=a|0;b=b|0;c=c|0;p[b>>3]=+((i[a+8>>0]|0)!=0&1);return}function FE(a,b){a=a|0;b=+b;return}function GE(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)==556){m=a+8|0;i[m>>0]=+(l[m>>0]|0)+ +(l[b+8>>0]|0)*c!=0.0&1;r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(d);Qb(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);m=B;B=0;do if(m&1){a=Rb()|0;p=Q;q=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);Yua(a);Ava(b);p=t;q=s;break}Yua(e);B=0;s=Ia(40,f|0,149721,19)|0;t=B;B=0;if(!(t&1)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,76388,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,121097,4);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);w=v;x=u;break}B=0;wa(510,j|0,b|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,g|0,h|0,139,j|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(j);y=v;z=u;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}t=Rb()|0;D=Q;E=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}while(0);n=p;o=q;vva(d);Qb(o|0)}function HE(a,b){a=a|0;b=b|0;return}function IE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,77191,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76388,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,152,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function JE(a,b){a=a|0;b=b|0;return}function KE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76464,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function LE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function ME(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77964,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function NE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77948,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function OE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function PE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function QE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,76464,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,56,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function RE(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76464,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function SE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76655,41)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function TE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76622,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,62,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function UE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76589,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,64,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function VE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76622,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,61,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function WE(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76589,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77944,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function XE(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76464,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function YE(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;a=e+56|0;i=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(a);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,76550,38)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,76464,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,118419,9);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,68,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[e>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(a);Qb(F|0)}while(0);l=o;m=p;vva(a);Qb(m|0)}function ZE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,35,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function $E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,37,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function aF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function bF(a){a=a|0;return 736}function cF(a){a=a|0;return 1}function dF(a){a=a|0;return 1}function eF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76464,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,41,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function fF(a){a=a|0;k[a>>2]=32740;return}function gF(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=32740;k[a+4>>2]=b;k[a+8>>2]=c;return}function hF(a){a=a|0;k[a>>2]=32740;return}function iF(a){a=a|0;Sqa(a);return}function jF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;o=Ia(40,d|0,76707,12)|0;p=B;B=0;if((((((!(p&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=25,p=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[p>>2]=k[p>>2]&-177|32,B=0,p=ya(427,k[a+4>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,149175,1)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Xa(242,q|0,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,149177,1)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function kF(a){a=a|0;return -1}function lF(a){a=a|0;return 574}function mF(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=32740;k[b+4>>2]=c;k[b+8>>2]=d;return b|0}function nF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=62;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+12;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+4|0;o=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;a=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=a;i[n+1>>0]=a>>8;i[n+2>>0]=a>>16;i[n+3>>0]=a>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;p=Q;q=a;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){n=Rb()|0;s=Q;t=n}else{k[b>>2]=27560;n=g+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(f);Yua(n);Ava(b);s=c;t=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,76720,74);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);d=B;B=0;if(d&1){d=Rb()|0;u=Q;Yua(h);v=u;w=d;break}B=0;wa(510,m|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;x=d;y=Q;z=1}else{B=0;ua(163,o|0,h|0,j|0,52,m|0);d=B;B=0;if(d&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}d=Rb()|0;u=Q;Yua(m);x=d;y=u;z=A}Yua(j);Yua(h);if(z){v=y;w=x}else{C=y;D=x;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}}else{u=Rb()|0;v=Q;w=u}while(0);zb(o|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function oF(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function pF(a){a=a|0;return k[a+4>>2]|0}function qF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Qqa(12)|0;k[d>>2]=32740;k[d+4>>2]=k[a+4>>2];k[d+8>>2]=k[a+8>>2];return d|0}function rF(a,b,c){a=a|0;b=b|0;c=c|0;c=Qqa(12)|0;k[c>>2]=32740;k[c+4>>2]=k[a+4>>2];k[c+8>>2]=k[a+8>>2];return c|0}function sF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,119332,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76720,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,99,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function tF(a,b){a=a|0;b=b|0;k[b>>2]=k[a+8>>2];return}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,76795,47)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76720,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,106,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function vF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,119332,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76720,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,109,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function wF(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function xF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+(k[a+8>>2]|0);p[b>>3]=d*d;return}function yF(a,b){a=a|0;b=+b;var c=0;c=a+8|0;k[c>>2]=~~(+(k[c>>2]|0)*b);return}function zF(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)==574){j=a+8|0;k[j>>2]=~~(+(k[j>>2]|0)+ +(k[b+8>>2]|0)*c);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,149721,19)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,g|0,76720,74);q=B;B=0;do if(!(q&1)){B=0;eb(502,h|0,121097,4);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(g);u=t;v=s;break}B=0;wa(510,i|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,g|0,h|0,143,i|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(i);w=t;x=s;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function AF(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0;d=+$(+b);p[t>>3]=d;e=k[t+4>>2]|0;if(!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)?(e=a+8|0,+(k[e>>2]|0)<b):0)k[e>>2]=~~b;b=+$(+c);p[t>>3]=b;e=k[t+4>>2]|0;if(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)return;e=a+8|0;if(!(+(k[e>>2]|0)>c))return;k[e>>2]=~~c;return}function BF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,77191,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76720,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,157,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function CF(a,b){a=a|0;b=b|0;return}function DF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76843,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function EF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function FF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77964,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77948,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function HF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,58,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function IF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function JF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,76843,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,60,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function KF(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76843,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function LF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76994,41)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function MF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76961,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function NF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76928,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function OF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76961,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,69,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function PF(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,76928,32)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77944,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function QF(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,76843,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function RF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function SF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function TF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function UF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,41,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function VF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,40,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function WF(a){a=a|0;return 736}function XF(a){a=a|0;return 1}function YF(a){a=a|0;return 1}function ZF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76843,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function _F(a){a=a|0;k[a>>2]=32932;return}function $F(a,b,c){a=a|0;b=b|0;c=+c;k[a>>2]=32932;k[a+4>>2]=b;p[a+8>>3]=c;return}function aG(a){a=a|0;k[a>>2]=32932;return}function bG(a){a=a|0;Sqa(a);return}function cG(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function dG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(c);Yua(l);Ava(g);m=q;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;o=Ia(40,d|0,77050,15)|0;q=B;B=0;if((((((!(q&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=25,q=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[q>>2]=k[q>>2]&-177|32,B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,o|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,149175,1)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Sa(1,s|0,+(+p[a+8>>3]))|0,s=B,B=0,!(s&1)):0)?(B=0,Ia(40,t|0,149177,1)|0,t=B,B=0,!(t&1)):0)?(B=0,wa(510,e|0,g|0),t=B,B=0,!(t&1)):0){B=0;ya(424,e|0)|0;t=B;B=0;if(!(t&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}t=Rb()|0;s=Q;Yua(e);u=s;v=t;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(v|0)}t=Rb()|0;u=Q;v=t;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(v|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function eG(a){a=a|0;return -1}function fG(a){a=a|0;return 561}function gG(a){a=a|0;var b=0,c=0,d=0.0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=+p[a+8>>3];k[b>>2]=32932;k[b+4>>2]=c;p[b+8>>3]=d;return b|0}function hG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=49;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+16;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;d=a+4|0;q=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;d=a+8|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;s=Q;u=d;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){q=Rb()|0;v=Q;w=q}else{k[b>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;c=Q;Yua(f);Yua(q);Ava(b);v=c;w=a;break}Yua(f);B=0;a=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,77066,77);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(h);x=o;y=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;z=n;A=Q;C=1}else{B=0;ua(163,a|0,h|0,j|0,56,m|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,a|0,1240,229);B=0;D=0}n=Rb()|0;o=Q;Yua(m);z=n;A=o;C=D}Yua(j);Yua(h);if(C){x=A;y=z}else{E=A;F=z;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}}else{o=Rb()|0;x=Q;y=o}while(0);zb(a|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function iG(a){a=a|0;return k[a+4>>2]|0}function jG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Qqa(16)|0;k[d>>2]=32932;k[d+4>>2]=k[a+4>>2];p[d+8>>3]=+p[a+8>>3];return d|0}function kG(a,b,c){a=a|0;b=b|0;c=c|0;c=Qqa(16)|0;k[c>>2]=32932;k[c+4>>2]=k[a+4>>2];p[c+8>>3]=+p[a+8>>3];return c|0}function lG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,77144,21)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,77166,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77066,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,102,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function mG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,77144,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82829,26)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,77066,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,107,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function nG(a,b){a=a|0;b=b|0;p[b>>3]=+p[a+8>>3];return}function oG(a,b,c){a=a|0;b=b|0;c=c|0;p[b>>3]=+p[a+8>>3];return}function pG(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function qG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+p[a+8>>3];p[b>>3]=d*d;return}function rG(a,b){a=a|0;b=+b;var c=0;c=a+8|0;p[c>>3]=+p[c>>3]*b;return}function sG(a,b){a=a|0;b=+b;var c=0;c=a+8|0;if(!(+p[c>>3]<b))return;p[c>>3]=b;return}function tG(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)==561){j=a+8|0;p[j>>3]=+p[j>>3]+ +p[b+8>>3]*c;r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(a);Ava(b);n=s;o=q;break}Yua(e);B=0;q=Ia(40,f|0,149721,19)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,g|0,77066,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,h|0,121097,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(g);v=u;w=t;break}B=0;wa(510,i|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,g|0,h|0,152,i|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(i);x=u;y=t;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(D|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function uG(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0;d=+$(+b);p[t>>3]=d;e=k[t+4>>2]|0;if(!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)?(e=a+8|0,+p[e>>3]<b):0)p[e>>3]=b;b=+$(+c);p[t>>3]=b;e=k[t+4>>2]|0;if(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)return;e=a+8|0;if(!(+p[e>>3]>c))return;p[e>>3]=c;return}function vG(a){a=a|0;return +(+p[a+8>>3])}function wG(a){a=a|0;return +(+$(+(+p[a+8>>3])))}function xG(a){a=a|0;return +(+p[a+8>>3])}function yG(a){a=a|0;return +(+$(+(+p[a+8>>3])))}function zG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,77191,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77066,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,182,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function AG(a,b){a=a|0;b=b|0;p[b>>3]=+p[a+8>>3];return}function BG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;c=r;r=r+368|0;d=c+352|0;e=c;f=c+216|0;g=c+204|0;h=c+192|0;i=c+44|0;j=c+56|0;l=c+32|0;m=c+20|0;n=c+8|0;if((Hc[k[(k[b>>2]|0)+32>>2]&511](b)|0)==353){if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)==626){Fc[k[(k[b>>2]|0)+64>>2]&1023](b,e);o=a+8|0;p[o>>3]=+p[o>>3]*+p[e>>3];r=c;return}c=j+56|0;e=j+4|0;k[j>>2]=27524;k[c>>2]=27544;B=0;wa(508,j+56|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(c);Qb(s|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[c>>2]=27488;B=0;va(448,e|0);o=B;B=0;do if(o&1){a=Rb()|0;t=Q;u=a}else{k[e>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(d);Yua(a);Ava(e);t=w;u=v;break}Yua(d);B=0;v=Ia(40,j|0,149721,19)|0;w=B;B=0;a:do if(!(w&1)?(B=0,Xa(239,v|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,l|0,77066,77);y=B;B=0;do if(!(y&1)){B=0;eb(502,m|0,121304,19);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(l);C=A;D=z;break}B=0;wa(510,n|0,e|0);z=B;B=0;if(z&1){z=Rb()|0;E=1;F=z;G=Q}else{B=0;ua(163,x|0,l|0,m|0,207,n|0);z=B;B=0;if(z&1)H=1;else{B=0;eb(503,x|0,1240,229);B=0;H=0}z=Rb()|0;A=Q;Yua(n);E=H;F=z;G=A}Yua(m);Yua(l);if(E){C=G;D=F}else{I=F;J=G;break a}}else{A=Rb()|0;C=Q;D=A}while(0);zb(x|0);I=D;J=C}else K=46;while(0);if((K|0)==46){v=Rb()|0;I=v;J=Q}k[j>>2]=27468;k[c>>2]=27488;k[e>>2]=27560;Yua(a);Ava(e);vva(c);L=I;M=J;Qb(L|0)}while(0);q=t;s=u;vva(c);Qb(s|0)}s=f+56|0;c=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;N=Q;O=u;vva(s);Qb(O|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,c|0);u=B;B=0;do if(u&1){t=Rb()|0;P=Q;R=t}else{k[c>>2]=27560;t=f+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;J=Q;Yua(d);Yua(t);Ava(c);P=J;R=q;break}Yua(d);B=0;q=Ia(40,f|0,120714,48)|0;J=B;B=0;b:do if(((((!(J&1)?(B=0,I=ya(k[(k[b>>2]|0)+32>>2]|0,b|0)|0,e=B,B=0,!(e&1)):0)?(B=0,e=ya(427,I|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(e)|0,B=0,j=Ia(40,q|0,e|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,j|0,141170,1)|0,j=B,B=0,!(j&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,g|0,77066,77);j=B;B=0;do if(!(j&1)){B=0;eb(502,h|0,121304,19);e=B;B=0;if(e&1){e=Rb()|0;C=Q;Yua(g);S=C;T=e;break}B=0;wa(510,i|0,c|0);e=B;B=0;if(e&1){e=Rb()|0;U=e;V=Q;W=1}else{B=0;ua(163,I|0,g|0,h|0,196,i|0);e=B;B=0;if(e&1)X=1;else{B=0;eb(503,I|0,1240,229);B=0;X=0}e=Rb()|0;C=Q;Yua(i);U=e;V=C;W=X}Yua(h);Yua(g);if(W){S=V;T=U}else{Y=V;Z=U;break b}}else{C=Rb()|0;S=Q;T=C}while(0);zb(I|0);Y=S;Z=T}else K=21;while(0);if((K|0)==21){q=Rb()|0;Y=Q;Z=q}k[f>>2]=27468;k[s>>2]=27488;k[c>>2]=27560;Yua(t);Ava(c);vva(s);L=Z;M=Y;Qb(L|0)}while(0);N=P;O=R;vva(s);Qb(O|0)}function CG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0;c=r;r=r+16|0;d=c;Fc[k[(k[b>>2]|0)+64>>2]&1023](b,d);b=Qqa(16)|0;e=k[a+4>>2]|0;f=+p[a+8>>3]/+p[d>>3];k[b>>2]=32932;k[b+4>>2]=e;p[b+8>>3]=f;r=c;return b|0}function DG(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+Zc[k[(k[b>>2]|0)+112>>2]&255](b);if(c<+Zc[k[(k[a>>2]|0)+112>>2]&255](a))d=+Zc[k[(k[b>>2]|0)+112>>2]&255](b);else d=+Zc[k[(k[a>>2]|0)+112>>2]&255](a);b=Qqa(16)|0;e=k[a+4>>2]|0;k[b>>2]=32932;k[b+4>>2]=e;p[b+8>>3]=d;return b|0}function EG(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+Zc[k[(k[b>>2]|0)+108>>2]&255](b);if(c>+Zc[k[(k[a>>2]|0)+108>>2]&255](a))d=+Zc[k[(k[b>>2]|0)+108>>2]&255](b);else d=+Zc[k[(k[a>>2]|0)+108>>2]&255](a);b=Qqa(16)|0;e=k[a+4>>2]|0;k[b>>2]=32932;k[b+4>>2]=e;p[b+8>>3]=d;return b|0}function FG(a,b){a=a|0;b=b|0;return}function GG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77209,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function HG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function IG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77964,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function JG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function KG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,58,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function LG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,77209,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,59,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function MG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,67,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function NG(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77209,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function OG(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function PG(a){a=a|0;return 736}function QG(a){a=a|0;return 1}function RG(a){a=a|0;return 1}function SG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77209,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function TG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=33124;k[a+4>>2]=b;k[a+12>>2]=d;b=Rqa(d>>>0>536870911?-1:d<<3)|0;k[a+8>>2]=b;if(!c)yb(142353,77590,137,142345);if(!d)return;TEa(b|0,c|0,d<<3|0)|0;return}function UG(a){a=a|0;var b=0;k[a>>2]=33124;b=a+8|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function VG(a){a=a|0;var b=0;k[a>>2]=33124;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function WG(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function XG(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;q=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(n);Ava(i);o=t;q=s;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;s=Ia(40,d|0,77316,20)|0;t=B;B=0;do if((((((!(t&1)?(k[s+(k[(k[s>>2]|0)+-12>>2]|0)+12>>2]=25,u=s+(k[(k[s>>2]|0)+-12>>2]|0)+4|0,k[u>>2]=k[u>>2]&-177|32,B=0,u=ya(427,k[a+4>>2]|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,s|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,77337,7)|0,w=B,B=0,!(w&1)):0)?(w=a+12|0,B=0,u=Xa(242,v|0,k[w>>2]|0)|0,v=B,B=0,!(v&1)):0)?(B=0,Ia(40,u|0,149177,1)|0,u=B,B=0,!(u&1)):0)?(B=0,wa(510,e|0,i|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);x=v;y=u;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);if((k[w>>2]|0)<=0){r=b;return}u=f+56|0;v=f+4|0;z=f+56|0;A=f+128|0;C=f+132|0;D=f+36|0;E=f+52|0;F=a+8|0;G=0;while(1){k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,z|0,v|0);H=B;B=0;if(H&1){I=27;break}k[A>>2]=0;k[C>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);H=B;B=0;if(H&1){I=28;break}k[v>>2]=27560;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[E>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);H=B;B=0;if(H&1){I=26;break}Yua(c);k[f+(k[(k[f>>2]|0)+-12>>2]|0)+12>>2]=20;B=0;H=Sa(1,f|0,+(+p[(k[F>>2]|0)+(G<<3)>>3]))|0;J=B;B=0;if(J&1){I=36;break}B=0;Ia(40,H|0,149177,1)|0;H=B;B=0;if(H&1){I=36;break}B=0;wa(510,g|0,v|0);H=B;B=0;if(H&1){I=36;break}B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){I=37;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(D);Ava(v);vva(u);G=G+1|0;if((G|0)>=(k[w>>2]|0)){I=19;break}}if((I|0)==19){r=b;return}else if((I|0)==26){w=Rb()|0;G=Q;Yua(c);Yua(D);Ava(v);K=G;L=w;I=29}else if((I|0)==27){w=Rb()|0;M=Q;N=w;vva(u);Qb(N|0)}else if((I|0)==28){w=Rb()|0;K=Q;L=w;I=29}else if((I|0)==36){w=Rb()|0;O=Q;P=w;I=38}else if((I|0)==37){w=Rb()|0;G=Q;Yua(g);O=G;P=w;I=38}if((I|0)==29){M=K;N=L;vva(u);Qb(N|0)}else if((I|0)==38){k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(D);Ava(v);vva(u);R=O;S=P;Qb(S|0)}}else I=20;while(0);if((I|0)==20){s=Rb()|0;x=Q;y=s}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);R=x;S=y;Qb(S|0)}while(0);l=o;m=q;vva(h);Qb(m|0)}function YG(a){a=a|0;return -1}function ZG(a){a=a|0;return 562}function _G(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;k[b>>2]=33124;k[b+4>>2]=c;k[b+12>>2]=e;B=0;c=ya(422,(e>>>0>536870911?-1:e<<3)|0)|0;a=B;B=0;if(a&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}k[b+8>>2]=c;if(!d){B=0;ib(283,142353,77590,137,142345);B=0;f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}if(!e)return b|0;TEa(c|0,d|0,e<<3|0)|0;return b|0}function $G(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=50;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=(k[o>>2]|0)==0;i[n>>0]=p&1;n=(k[b>>2]|0)+1|0;k[b>>2]=n;if(p){r=e;return}TEa(n|0,k[o>>2]|0,k[d>>2]<<3|0)|0;k[b>>2]=(k[b>>2]|0)+(k[d>>2]<<3);r=e;return}case 2:{d=(k[a+8>>2]|0)==0;o=(k[c>>2]|0)+13|0;k[c>>2]=o;if(d){r=e;return}k[c>>2]=o+(k[a+12>>2]<<3);r=e;return}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;c=a+4|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[c>>0]=d;i[c+1>>0]=d>>8;i[c+2>>0]=d>>16;i[c+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;c=a+12|0;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[c>>0]=o;i[c+1>>0]=o>>8;i[c+2>>0]=o>>16;i[c+3>>0]=o>>24;c=k[b>>2]|0;d=c+4|0;k[b>>2]=d;n=i[d>>0]|0;k[b>>2]=c+5;if(n&1){r=e;return}n=Rqa(o>>>0>536870911?-1:o<<3)|0;k[a+8>>2]=n;a=k[b>>2]|0;c=o<<3;TEa(n|0,a|0,c|0)|0;k[b>>2]=a+c;r=e;return}default:{e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;s=a;vva(e);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);a=B;B=0;do if(a&1){b=Rb()|0;t=Q;u=b}else{k[c>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);Yua(b);Ava(c);t=o;u=n;break}Yua(f);B=0;n=Ia(40,g|0,143951,43)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,77345,82);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,149525,8);d=B;B=0;if(d&1){d=Rb()|0;p=Q;Yua(h);v=p;w=d;break}B=0;wa(510,m|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;x=Q;y=d;z=1}else{B=0;ua(163,n|0,h|0,j|0,64,m|0);d=B;B=0;if(d&1)A=1;else{B=0;eb(503,n|0,1240,229);B=0;A=0}d=Rb()|0;p=Q;Yua(m);x=p;y=d;z=A}Yua(j);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}}else{d=Rb()|0;v=Q;w=d}while(0);zb(n|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}o=Rb()|0;C=Q;D=o;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}while(0);q=t;s=u;vva(e);Qb(s|0)}}}function aH(a){a=a|0;return k[a+4>>2]|0}function bH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((e|0)<=0)return;f=k[a+8>>2]|0;a=ma(d,c)|0;c=0;do{p[b+(c+a<<3)>>3]=+p[f+(c<<3)>>3];c=c+1|0}while((c|0)!=(e|0));return}function cH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=k[a+12>>2]|0;e=Rqa(d>>>0>536870911?-1:d<<3)|0;f=k[a+8>>2]|0;if(!f)yb(142353,77590,137,142345);if(!d){k[c>>2]=d;k[b>>2]=e;return}else g=0;do{p[e+(g<<3)>>3]=+p[f+(g<<3)>>3];g=g+1|0}while((g|0)!=(d|0));k[c>>2]=d;k[b>>2]=e;return}function dH(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function eH(a,b){a=a|0;b=b|0;return}function fH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,49,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function hH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function iH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function jH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function kH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function lH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77964,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77948,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function nH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function oH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function pH(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,58,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function qH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115244,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function rH(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function sH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,66,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function tH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function uH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function vH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,67,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function wH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77944,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,69,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function xH(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function yH(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115194,5);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function zH(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77428,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121097,4);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function AH(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;a=e+56|0;i=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(a);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,77428,92);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,118419,9);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,64,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[e>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(a);Qb(F|0)}while(0);l=o;m=p;vva(a);Qb(m|0)}function BH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function CH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function DH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77521,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,35,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function FH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121282,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0);return 0}function GH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,37,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function HH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function IH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77428,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,38,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function JH(a){a=a|0;return 737}function KH(a){a=a|0;return 1}function LH(a){a=a|0;return k[a+12>>2]|0}function MH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a>>2]=33316;k[a+4>>2]=b;k[a+8>>2]=0;B=0;b=ya(423,36)|0;c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c;Qb(e|0)}B=0;va(486,b|0);c=B;B=0;if(!(c&1)){k[a+12>>2]=b;k[a+16>>2]=0;return}a=Rb()|0;c=Q;Sqa(b);d=c;e=a;Qb(e|0)}function NH(a){a=a|0;var b=0,c=0;k[a>>2]=33316;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b)return;jC(b);Sqa(b);return}function OH(a){a=a|0;var b=0,c=0;k[a>>2]=33316;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b){Sqa(a);return}jC(b);Sqa(b);Sqa(a);return}function PH(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function QH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0;b=r;r=r+1072|0;c=b+1052|0;d=b+880|0;e=b+1040|0;f=b+728|0;g=b+1028|0;h=b+592|0;i=b+1016|0;j=b+440|0;l=b+864|0;m=b+304|0;n=b+576|0;o=b+168|0;p=b+152|0;q=b+16|0;s=b;t=d+56|0;u=d+4|0;k[d>>2]=27524;k[t>>2]=27544;B=0;wa(508,d+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=d+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(c);Yua(y);Ava(u);z=D;A=C;break}Yua(c);B=0;Ia(40,d|0,77551,14)|0;C=B;B=0;do if(!(C&1)?(B=0,wa(510,e|0,u|0),D=B,B=0,!(D&1)):0){B=0;ya(424,e|0)|0;D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(e);F=E;G=D;break}Yua(e);k[d>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);D=f+56|0;E=f+4|0;k[f>>2]=27524;k[D>>2]=27544;B=0;wa(508,f+56|0,E|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;J=H;vva(D);Qb(J|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[D>>2]=27488;B=0;va(448,E|0);H=B;B=0;do if(H&1){K=Rb()|0;L=Q;M=K}else{k[E>>2]=27560;K=f+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(c);Yua(K);Ava(E);L=O;M=N;break}Yua(c);B=0;N=Ia(40,f|0,85228,9)|0;O=B;B=0;do if((((((!(O&1)?(P=a+4|0,B=0,R=Xa(242,N|0,k[P>>2]|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,144166,2)|0,R=B,B=0,!(R&1)):0)?(B=0,R=ya(427,k[P>>2]|0)|0,P=B,B=0,!(P&1)):0)?(P=Lta(R)|0,B=0,T=Ia(40,S|0,R|0,P|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,T|0,145593,2)|0,T=B,B=0,!(T&1)):0)?(B=0,wa(510,g|0,E|0),T=B,B=0,!(T&1)):0){B=0;ya(424,g|0)|0;T=B;B=0;if(T&1){T=Rb()|0;P=Q;Yua(g);U=P;V=T;break}Yua(g);k[f>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(D);T=h+56|0;P=h+4|0;k[h>>2]=27524;k[T>>2]=27544;B=0;wa(508,h+56|0,P|0);R=B;B=0;if(R&1){R=Rb()|0;W=Q;X=R;vva(T);Qb(X|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[T>>2]=27488;B=0;va(448,P|0);R=B;B=0;do if(R&1){S=Rb()|0;Y=Q;Z=S}else{k[P>>2]=27560;S=h+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(c);Yua(S);Ava(P);Y=$;Z=_;break}Yua(c);B=0;_=Ia(40,h|0,77566,10)|0;$=B;B=0;do if($&1)aa=69;else{ba=a+8|0;B=0;ca=Xa(242,_|0,k[ba>>2]|0)|0;da=B;B=0;if(da&1){aa=69;break}B=0;Ia(40,ca|0,149177,1)|0;ca=B;B=0;if(ca&1){aa=69;break}B=0;wa(510,i|0,P|0);ca=B;B=0;if(ca&1){aa=69;break}B=0;ya(424,i|0)|0;ca=B;B=0;if(ca&1){ca=Rb()|0;da=Q;Yua(i);ea=da;fa=ca;break}Yua(i);k[h>>2]=27468;k[T>>2]=27488;k[P>>2]=27560;Yua(S);Ava(P);vva(T);ca=j+56|0;da=j+4|0;k[j>>2]=27524;k[ca>>2]=27544;B=0;wa(508,j+56|0,da|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;ia=ga;vva(ca);Qb(ia|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ca>>2]=27488;B=0;va(448,da|0);ga=B;B=0;do if(ga&1){ja=Rb()|0;ka=Q;la=ja}else{k[da>>2]=27560;ja=j+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(c);Yua(ja);Ava(da);ka=na;la=ma;break}Yua(c);B=0;Ia(40,j|0,142701,11)|0;ma=B;B=0;do if(ma&1)aa=72;else{B=0;wa(510,l|0,da|0);na=B;B=0;if(na&1){aa=72;break}B=0;ya(424,l|0)|0;na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(l);pa=oa;qa=na;break}Yua(l);k[j>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ja);Ava(da);vva(ca);a:do if((k[ba>>2]|0)>0){na=m+56|0;oa=m+4|0;ra=m+56|0;sa=m+128|0;ta=m+132|0;ua=m+36|0;xa=m+52|0;za=a+16|0;Aa=0;while(1){k[m>>2]=27524;k[na>>2]=27544;B=0;wa(508,ra|0,oa|0);Ba=B;B=0;if(Ba&1){aa=79;break}k[sa>>2]=0;k[ta>>2]=-1;k[m>>2]=27468;k[na>>2]=27488;B=0;va(448,oa|0);Ba=B;B=0;if(Ba&1){aa=80;break}k[oa>>2]=27560;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[xa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,oa|0,c|0);Ba=B;B=0;if(Ba&1){aa=78;break}Yua(c);B=0;Ba=Xa(242,m|0,k[(k[za>>2]|0)+(Aa<<2)>>2]|0)|0;Ca=B;B=0;if(Ca&1){aa=88;break}B=0;Ia(40,Ba|0,149175,1)|0;Ba=B;B=0;if(Ba&1){aa=88;break}B=0;wa(510,n|0,oa|0);Ba=B;B=0;if(Ba&1){aa=88;break}B=0;ya(424,n|0)|0;Ba=B;B=0;if(Ba&1){aa=89;break}Yua(n);k[m>>2]=27468;k[na>>2]=27488;k[oa>>2]=27560;Yua(ua);Ava(oa);vva(na);Aa=Aa+1|0;if((Aa|0)>=(k[ba>>2]|0))break a}if((aa|0)==78){Aa=Rb()|0;za=Q;Yua(c);Yua(ua);Ava(oa);Da=za;Ea=Aa;aa=81}else if((aa|0)==79){Aa=Rb()|0;Fa=Q;Ga=Aa;vva(na);Qb(Ga|0)}else if((aa|0)==80){Aa=Rb()|0;Da=Q;Ea=Aa;aa=81}else if((aa|0)==88){Aa=Rb()|0;Ha=Q;Ja=Aa;aa=90}else if((aa|0)==89){Aa=Rb()|0;za=Q;Yua(n);Ha=za;Ja=Aa;aa=90}if((aa|0)==81){Fa=Da;Ga=Ea;vva(na);Qb(Ga|0)}else if((aa|0)==90){k[m>>2]=27468;k[na>>2]=27488;k[oa>>2]=27560;Yua(ua);Ava(oa);vva(na);Ka=Ha;La=Ja;Qb(La|0)}}while(0);Aa=o+56|0;za=o+4|0;k[o>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,o+56|0,za|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ma=Q;Na=xa;vva(Aa);Qb(Na|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Aa>>2]=27488;B=0;va(448,za|0);xa=B;B=0;do if(xa&1){ta=Rb()|0;Oa=Q;Pa=ta}else{k[za>>2]=27560;ta=o+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(c);Yua(ta);Ava(za);Oa=ra;Pa=sa;break}Yua(c);B=0;Ia(40,o|0,149177,1)|0;sa=B;B=0;do if(sa&1)aa=105;else{B=0;wa(510,p|0,za|0);ra=B;B=0;if(ra&1){aa=105;break}B=0;ya(424,p|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;Ba=Q;Yua(p);Qa=Ba;Ra=ra;break}Yua(p);k[o>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(ta);Ava(za);vva(Aa);ra=q+56|0;Ba=q+4|0;k[q>>2]=27524;k[ra>>2]=27544;B=0;wa(508,q+56|0,Ba|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Sa=Q;Ta=Ca;vva(ra);Qb(Ta|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[ra>>2]=27488;B=0;va(448,Ba|0);Ca=B;B=0;do if(Ca&1){Ua=Rb()|0;Va=Q;Wa=Ua}else{k[Ba>>2]=27560;Ua=q+36|0;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ba|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;Za=Q;Yua(c);Yua(Ua);Ava(Ba);Va=Za;Wa=Ya;break}Yua(c);B=0;Ia(40,q|0,77577,12)|0;Ya=B;B=0;do if(!(Ya&1)){B=0;wa(510,s|0,Ba|0);Za=B;B=0;if(Za&1){aa=108;break}B=0;ya(424,s|0)|0;Za=B;B=0;if(Za&1){Za=Rb()|0;_a=Q;Yua(s);$a=_a;ab=Za;break}else{Yua(s);k[q>>2]=27468;k[ra>>2]=27488;k[Ba>>2]=27560;Yua(Ua);Ava(Ba);vva(ra);oh(k[a+12>>2]|0);r=b;return}}else aa=108;while(0);if((aa|0)==108){Ya=Rb()|0;$a=Q;ab=Ya}k[q>>2]=27468;k[ra>>2]=27488;k[Ba>>2]=27560;Yua(Ua);Ava(Ba);vva(ra);Ka=$a;La=ab;Qb(La|0)}while(0);Sa=Va;Ta=Wa;vva(ra);Qb(Ta|0)}while(0);if((aa|0)==105){sa=Rb()|0;Qa=Q;Ra=sa}k[o>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(ta);Ava(za);vva(Aa);Ka=Qa;La=Ra;Qb(La|0)}while(0);Ma=Oa;Na=Pa;vva(Aa);Qb(Na|0)}while(0);if((aa|0)==72){ma=Rb()|0;pa=Q;qa=ma}k[j>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ja);Ava(da);vva(ca);Ka=pa;La=qa;Qb(La|0)}while(0);ha=ka;ia=la;vva(ca);Qb(ia|0)}while(0);if((aa|0)==69){_=Rb()|0;ea=Q;fa=_}k[h>>2]=27468;k[T>>2]=27488;k[P>>2]=27560;Yua(S);Ava(P);vva(T);Ka=ea;La=fa;Qb(La|0)}while(0);W=Y;X=Z;vva(T);Qb(X|0)}else aa=66;while(0);if((aa|0)==66){N=Rb()|0;U=Q;V=N}k[f>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(D);Ka=U;La=V;Qb(La|0)}while(0);I=L;J=M;vva(D);Qb(J|0)}else aa=63;while(0);if((aa|0)==63){C=Rb()|0;F=Q;G=C}k[d>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Ka=F;La=G;Qb(La|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}function RH(a){a=a|0;return -1}function SH(a){a=a|0;return 560}function TH(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=Qqa(20)|0;k[b>>2]=33316;c=b+12|0;k[c>>2]=0;k[b+4>>2]=k[a+4>>2];d=k[a+8>>2]|0;k[b+8>>2]=d;e=Rqa(d>>>0>1073741823?-1:d<<2)|0;k[b+16>>2]=e;f=k[a+16>>2]|0;if(!f)yb(142353,77590,137,142345);if(!d){g=a+12|0;h=k[g>>2]|0;i=hh(h)|0;k[c>>2]=i;return b|0}else j=0;do{k[e+(j<<2)>>2]=k[f+(j<<2)>>2];j=j+1|0}while((j|0)!=(d|0));g=a+12|0;h=k[g>>2]|0;i=hh(h)|0;k[c>>2]=i;return b|0}function UH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=48;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+4|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+16|0;q=(k[p>>2]|0)==0;i[o>>0]=q&1;o=(k[b>>2]|0)+1|0;k[b>>2]=o;if(q){s=a+12|0;t=k[s>>2]|0;lh(t,b,c,d);r=e;return}TEa(o|0,k[p>>2]|0,k[n>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[n>>2]<<2);s=a+12|0;t=k[s>>2]|0;lh(t,b,c,d);r=e;return}case 2:{n=(k[a+16>>2]|0)==0;p=(k[c>>2]|0)+13|0;k[c>>2]=p;if(n){s=a+12|0;t=k[s>>2]|0;lh(t,b,c,d);r=e;return}k[c>>2]=p+(k[a+8>>2]<<2);s=a+12|0;t=k[s>>2]|0;lh(t,b,c,d);r=e;return}case 1:{p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+4|0;o=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;n=k[b>>2]|0;o=n+4|0;k[b>>2]=o;q=i[o>>0]|0;k[b>>2]=n+5;if(!(q&1)){q=Rqa(p>>>0>1073741823?-1:p<<2)|0;k[a+16>>2]=q;n=k[b>>2]|0;o=p<<2;TEa(q|0,n|0,o|0)|0;k[b>>2]=n+o}o=Qqa(36)|0;B=0;va(486,o|0);n=B;B=0;if(n&1){n=Rb()|0;q=Q;Sqa(o);u=q;v=n;Qb(v|0)}else{k[a+12>>2]=o;s=a+12|0;t=k[s>>2]|0;lh(t,b,c,d);r=e;return}break}default:{e=g+56|0;d=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(e);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;y=Q;z=b}else{k[d>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(f);Yua(b);Ava(d);y=s;z=t;break}Yua(f);B=0;t=Ia(40,g|0,143951,43)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,t|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,77683,78);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;q=Q;Yua(h);A=q;C=n;break}B=0;wa(510,m|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;D=Q;E=n;F=1}else{B=0;ua(163,a|0,h|0,j|0,77,m|0);n=B;B=0;if(n&1)G=1;else{B=0;eb(503,a|0,1240,229);B=0;G=0}n=Rb()|0;q=Q;Yua(m);D=q;E=n;F=G}Yua(j);Yua(h);if(F){A=D;C=E}else{H=D;I=E;break a}}else{n=Rb()|0;A=Q;C=n}while(0);zb(a|0);H=A;I=C}else J=17;while(0);if((J|0)==17){t=Rb()|0;H=Q;I=t}k[g>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);u=H;v=I;Qb(v|0)}while(0);w=y;x=z;vva(e);Qb(x|0)}}}function VH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=Qqa(20)|0;k[e>>2]=33316;k[e+4>>2]=k[a+4>>2];f=uC(k[a+12>>2]|0,b,c,d)|0;k[e+12>>2]=f;f=k[a+8>>2]|0;k[e+8>>2]=f;d=Rqa(f>>>0>1073741823?-1:f<<2)|0;k[e+16>>2]=d;c=k[a+16>>2]|0;if(!c)yb(142353,77590,137,142345);if(!f)return e|0;else g=0;do{k[d+(g<<2)>>2]=k[c+(g<<2)>>2];g=g+1|0}while((g|0)!=(f|0));return e|0}function WH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=Qqa(20)|0;k[d>>2]=33316;k[d+4>>2]=k[a+4>>2];e=vC(k[a+12>>2]|0,b,c)|0;k[d+12>>2]=e;e=k[a+8>>2]|0;k[d+8>>2]=e;c=Rqa(e>>>0>1073741823?-1:e<<2)|0;k[d+16>>2]=c;b=k[a+16>>2]|0;if(!b)yb(142353,77590,137,142345);if(!e)return d|0;else f=0;do{k[c+(f<<2)>>2]=k[b+(f<<2)>>2];f=f+1|0}while((f|0)!=(e|0));return d|0}function XH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=a+8|0;e=k[d>>2]|0;if((e|0)>0){f=Rqa(e>>>0>1073741823?-1:e<<2)|0;g=a+16|0;h=k[g>>2]|0;if(!h)yb(142353,77590,137,142345);else i=0;do{k[f+(i<<2)>>2]=k[h+(i<<2)>>2];i=i+1|0}while((i|0)!=(e|0));Tqa(h);h=k[d>>2]|0;k[g>>2]=0;j=g;l=h;m=f}else{j=a+16|0;l=e;m=0}e=l+1|0;k[d>>2]=e;f=Rqa(e>>>0>1073741823?-1:e<<2)|0;k[j>>2]=f;if((l|0)<=0){n=e;o=f;p=n+-1|0;q=o+(p<<2)|0;k[q>>2]=c;r=a+12|0;s=k[r>>2]|0;ih(s,b)|0;return}if(!m)yb(142353,77590,137,142345);TEa(f|0,m|0,(e<<2)+-4|0)|0;Tqa(m);n=k[d>>2]|0;o=k[j>>2]|0;p=n+-1|0;q=o+(p<<2)|0;k[q>>2]=c;r=a+12|0;s=k[r>>2]|0;ih(s,b)|0;return}function YH(a){a=a|0;return k[a+4>>2]|0}function ZH(a,b){a=a|0;b=b|0;return}function _H(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a+8>>2]|0;if((l|0)>0){m=k[a+16>>2]|0;n=0;o=-1;while(1){p=(k[m+(n<<2)>>2]|0)==(d|0)?n:o;n=n+1|0;if((n|0)>=(l|0)){q=p;break}else o=p}if((q|0)>=0){o=qh(k[a+12>>2]|0,q)|0;nd[k[(k[o>>2]|0)+48>>2]&1023](o,b,c);r=e;return}}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;s=Q;t=b;vva(e);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){o=Rb()|0;u=Q;v=o}else{k[c>>2]=27560;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(f);Yua(o);Ava(c);u=a;v=q;break}Yua(f);B=0;q=Ia(40,g|0,77762,27)|0;a=B;B=0;if((!(a&1)?(B=0,a=Xa(242,q|0,d|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,77683,78);q=B;B=0;do if(!(q&1)){B=0;eb(502,i|0,121355,13);l=B;B=0;if(l&1){l=Rb()|0;n=Q;Yua(h);w=n;x=l;break}B=0;wa(510,j|0,c|0);l=B;B=0;if(l&1){l=Rb()|0;y=Q;z=l;A=1}else{B=0;ua(163,a|0,h|0,i|0,169,j|0);l=B;B=0;if(l&1)C=1;else{B=0;eb(503,a|0,1240,229);B=0;C=0}l=Rb()|0;n=Q;Yua(j);y=n;z=l;A=C}Yua(i);Yua(h);if(A){w=y;x=z}else{D=y;E=z;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(E|0)}}else{l=Rb()|0;w=Q;x=l}while(0);zb(a|0);D=w;E=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(E|0)}q=Rb()|0;D=Q;E=q;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(E|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}function $H(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function aI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,49,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function bI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function cI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function dI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function eI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77964,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function fI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77948,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function hI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function iI(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,58,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function jI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115254,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function kI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115244,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function lI(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function mI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,67,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function nI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,69,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function oI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function pI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function qI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77944,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function rI(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function sI(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115194,5);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function tI(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,77790,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121097,4);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function uI(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;a=e+56|0;i=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(a);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,77790,88);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,118419,9);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,66,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[e>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(a);Qb(F|0)}while(0);l=o;m=p;vva(a);Qb(m|0)}function vI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function wI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function xI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115046,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function yI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,41,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function zI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function AI(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function BI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77921,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function CI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77898,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,76,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function DI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,77879,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,77,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function EI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,77790,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,78,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function FI(a){a=a|0;gh(a);k[a+12>>2]=548;return}function GI(a){a=a|0;jh(a);return}function HI(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;c=a+4|0;if(b>>>0<(k[c>>2]|0)>>>0)d=b;else return;do{b=k[d>>2]|0;Ec[k[(k[b>>2]|0)+104>>2]&1023](b);d=d+4|0}while(d>>>0<(k[c>>2]|0)>>>0);return}function II(a){a=a|0;k[a>>2]=33508;k[a+4>>2]=33672;k[a+16>>2]=0;k[a+20>>2]=0;i[a+12>>0]=0;return}function JI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;e=r;r=r+208|0;f=e+184|0;g=e+180|0;h=e+176|0;j=e+40|0;l=e+24|0;m=e+12|0;n=e;k[a>>2]=33508;k[a+4>>2]=33672;k[a+8>>2]=b;k[g>>2]=c+1;B=0;c=ya(423,16)|0;b=B;B=0;a:do if(!(b&1)){B=0;eb(509,c|0,g|0,1);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Sqa(c);q=p;s=o;Qb(s|0)}k[a+16>>2]=c;k[a+20>>2]=0;B=0;eb(512,d|0,h|0,127514);o=B;B=0;if(!(o&1))switch(k[h>>2]|0){case 584:{i[a+12>>0]=1;r=e;return}case 583:{i[a+12>>0]=0;r=e;return}default:{o=j+56|0;p=j+4|0;k[j>>2]=27524;k[o>>2]=27544;B=0;wa(508,j+56|0,p|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t}else{k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[p>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,p|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);Yua(w);Ava(p);x=A;y=z;break}Yua(f);B=0;z=Ia(40,j|0,77996,28)|0;A=B;B=0;b:do if(!(A&1)?(B=0,Xa(239,z|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,l|0,78025,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,m|0,98486,6);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(l);G=F;H=E;break}B=0;wa(510,n|0,p|0);E=B;B=0;if(E&1){E=Rb()|0;I=Q;J=E;K=1}else{B=0;ua(163,C|0,l|0,m|0,54,n|0);E=B;B=0;if(E&1)L=1;else{B=0;eb(503,C|0,1240,229);B=0;L=0}E=Rb()|0;F=Q;Yua(n);I=F;J=E;K=L}Yua(m);Yua(l);if(K){G=I;H=J}else{M=I;N=J;break b}}else{E=Rb()|0;G=Q;H=E}while(0);zb(C|0);M=G;N=H}else O=25;while(0);if((O|0)==25){z=Rb()|0;M=Q;N=z}k[j>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(w);Ava(p);vva(o);q=M;s=N;Qb(s|0)}while(0);u=x;v=y}vva(o);P=u;R=v;break a}}else O=6}else O=6;while(0);if((O|0)==6){O=Rb()|0;P=Q;R=O}q=P;s=R;Qb(s|0)}function KI(a){a=a|0;var b=0;k[a>>2]=33508;k[a+4>>2]=33672;b=k[a+16>>2]|0;if(!b)return;yla(b);Sqa(b);return}function LI(a){a=a|0;var b=0;k[a>>2]=33508;k[a+4>>2]=33672;b=k[a+16>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function MI(a){a=a|0;var b=0,c=0,d=0;b=Qqa(24)|0;k[b>>2]=33508;k[b+4>>2]=33672;k[b+8>>2]=k[a+8>>2];c=a+16|0;d=Bla(k[c>>2]|0)|0;k[b+16>>2]=d;d=Fla(k[c>>2]|0)|0;k[b+20>>2]=d;i[b+12>>0]=i[a+12>>0]|0;return b|0}function NI(a,b){a=a|0;b=b|0;var c=0,d=0;c=Qqa(24)|0;k[c>>2]=33508;k[c+4>>2]=33672;k[c+8>>2]=k[a+8>>2];d=Bla(k[a+16>>2]|0)|0;k[c+16>>2]=d;k[c+20>>2]=b;i[c+12>>0]=i[a+12>>0]|0;return c|0}function OI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,78101,8)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,143238,8)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;Ia(40,h|0,143247,12)|0;S=B;B=0;do if(!(S&1)){B=0;wa(510,i|0,I|0);T=B;B=0;if(T&1){U=43;break}B=0;ya(424,i|0)|0;T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(i);W=V;X=T;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);zla(k[a+16>>2]|0);r=b;return}}else U=43;while(0);if((U|0)==43){S=Rb()|0;W=Q;X=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);Y=W;Z=X;Qb(Z|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else U=40;while(0);if((U|0)==40){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Y=J;Z=K;Qb(Z|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else U=37;while(0);if((U|0)==37){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Y=w;Z=x;Qb(Z|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function PI(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,78101,8)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,143238,8)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;Ia(40,h|0,143247,12)|0;S=B;B=0;do if(!(S&1)){B=0;wa(510,i|0,I|0);T=B;B=0;if(T&1){U=43;break}B=0;ya(424,i|0)|0;T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(i);W=V;X=T;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);zla(k[a+16>>2]|0);r=b;return}}else U=43;while(0);if((U|0)==43){S=Rb()|0;W=Q;X=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);Y=W;Z=X;Qb(Z|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else U=40;while(0);if((U|0)==40){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Y=J;Z=K;Qb(Z|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else U=37;while(0);if((U|0)==37){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Y=w;Z=x;Qb(Z|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function QI(a){a=a|0;return k[a+8>>2]|0}function RI(a){a=a|0;return 583}
+-function HY(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;if((a|0)>=0){k[9114]=a;r=b;return}b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,104740,59)|0;q=B;B=0;if(((!(q&1)?(B=0,q=Xa(242,p|0,a|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,q|0,141170,1)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,e|0,104800,76);q=B;B=0;do if(!(q&1)){B=0;eb(502,f|0,104877,17);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);u=t;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,e|0,f|0,36,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(g);w=t;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=b+8|0;e=c+16|0;f=b+16|0;g=c+8|0;p[a>>3]=+p[d>>3]*+p[e>>3]-+p[f>>3]*+p[g>>3];p[a+8>>3]=+p[f>>3]*+p[c>>3]-+p[b>>3]*+p[e>>3];p[a+16>>3]=+p[b>>3]*+p[g>>3]-+p[d>>3]*+p[c>>3];return}function JY(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=+d;e=e|0;f=f|0;var g=0.0,h=0.0,i=0.0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;do if(!(a!=0.0))if(b!=0.0){g=c*.5/b;h=g*g-d/b;if(h>0.0){i=+aa(+h);p[e>>3]=-g-i;p[e+8>>3]=i-g;k[f>>2]=2;j=2;break}k[f>>2]=0;return 0}else{if(c!=0.0){p[e>>3]=d/c;k[f>>2]=1;j=1;break}k[f>>2]=0;return 0}else{g=b/a*.3333333333333333;i=+ba(+(c/a*.3333333333333333-g*g),3.0);h=(+ba(+g,3.0)*2.0-(g*c-d)/a)*-.5;l=i+h*h;if(l<0.0){m=-i;i=+fa(+(+KY(1.0,+LY(-1.0,h/+aa(+m)))));n=+ba(+m,.16666666666666666)*2.0;m=n*+ca(+((i+0.0)*.3333333333333333))-g;o=n*+ca(+((i+6.283185307179586)*.3333333333333333))-g;q=n*+ca(+((i+12.566370614359172)*.3333333333333333))-g;i=+KY(m,+KY(o,q));p[e>>3]=i;i=+KY(m,o);n=+KY(m,q);r=+LY(i,+LY(n,+KY(o,q)));p[e+8>>3]=r;r=+LY(m,+LY(o,q));p[e+16>>3]=r;k[f>>2]=3;j=3;break}r=+aa(+l);l=h+r;if(!(l>0.0))if(l<0.0)s=-+$(+(+ba(+(+$(+l)),.3333333333333333)));else s=0.0;else s=+$(+(+ba(+(+$(+l)),.3333333333333333)));l=h-r;if(!(l>0.0))if(l<0.0)t=-+$(+(+ba(+(+$(+l)),.3333333333333333)));else t=0.0;else t=+$(+(+ba(+(+$(+l)),.3333333333333333)));p[e>>3]=s+t-g;k[f>>2]=1;j=1}while(0);t=b*2.0;f=0;do{u=e+(f<<3)|0;s=+p[u>>3];p[u>>3]=s-(s*(s*(s*a+b)+c)+d)/(s*(t+s*3.0*a)+c);f=f+1|0}while((f|0)<(j|0));return 0}function KY(a,b){a=+a;b=+b;return +(a<b?a:b)}function LY(a,b){a=+a;b=+b;return +(a>b?a:b)}function MY(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function NY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;c=+p[b>>3];d=+$(+c);p[t>>3]=d;e=k[t+4>>2]|0;if(((((!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)?(d=+p[b+8>>3],f=+$(+d),p[t>>3]=f,e=k[t+4>>2]|0,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(f=+p[b+16>>3],g=+$(+f),p[t>>3]=g,e=k[t+4>>2]|0,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(g=+p[b+24>>3],h=+$(+g),p[t>>3]=h,e=k[t+4>>2]|0,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(h=+p[b+32>>3],i=+$(+h),p[t>>3]=i,e=k[t+4>>2]|0,!(e>>>0>2146435072|(e|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(i=+p[b+40>>3],j=+$(+i),p[t>>3]=j,b=k[t+4>>2]|0,!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){j=f*h-d*i;l=c*i-f*g;m=d*g-c*h;n=+aa(+(c*c+d*d+f*f));o=+aa(+(m*m+(j*j+l*l)));q=+aa(+(g*g+h*h+i*i));p[a>>3]=c/n;p[a+8>>3]=j/o;p[a+16>>3]=g/q;p[a+24>>3]=d/n;p[a+32>>3]=l/o;p[a+40>>3]=h/q;p[a+48>>3]=f/n;p[a+56>>3]=m/o;p[a+64>>3]=i/q;return}p[a>>3]=1.0;b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;p[a+32>>3]=1.0;b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;p[a+64>>3]=1.0;return}function OY(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;k[a>>2]=36468;f=k[e+8>>2]|0;g=e+1|0;h=(Lta((i[e>>0]&1)==0?g:f)|0)+1|0;B=0;j=ya(422,((h|0)>-1?h:-1)|0)|0;l=B;B=0;if(l&1){m=Rb()|0;n=Q;Qb(m|0)}k[a+4>>2]=j;TEa(j|0,((i[e>>0]&1)==0?g:f)|0,h|0)|0;h=k[b+8>>2]|0;f=b+1|0;g=(Lta((i[b>>0]&1)==0?f:h)|0)+1|0;B=0;e=ya(422,((g|0)>-1?g:-1)|0)|0;j=B;B=0;if(j&1){m=Rb()|0;n=Q;Qb(m|0)}k[a+12>>2]=e;TEa(e|0,((i[b>>0]&1)==0?f:h)|0,g|0)|0;g=k[c+8>>2]|0;h=c+1|0;f=(Lta((i[c>>0]&1)==0?h:g)|0)+1|0;B=0;b=ya(422,((f|0)>-1?f:-1)|0)|0;e=B;B=0;if(e&1){m=Rb()|0;n=Q;Qb(m|0)}else{k[a+8>>2]=b;TEa(b|0,((i[c>>0]&1)==0?h:g)|0,f|0)|0;k[a+16>>2]=d;return}}function PY(a){a=a|0;var b=0;k[a>>2]=36468;b=k[a+4>>2]|0;if(b)Tqa(b);b=k[a+12>>2]|0;if(b)Tqa(b);b=k[a+8>>2]|0;if(!b)return;Tqa(b);return}function QY(a){a=a|0;var b=0;k[a>>2]=36468;b=k[a+4>>2]|0;if(b)Tqa(b);b=k[a+12>>2]|0;if(b)Tqa(b);b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function RY(a){a=a|0;return k[a+4>>2]|0}function SY(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=a+8|0;if((k[o>>2]|0)!=0?(p=a+16|0,(k[p>>2]|0)!=0):0){q=vY()|0;if((wY()|0)==1){s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;A=Ia(40,f|0,104928,18)|0;C=B;B=0;do if(((((!(C&1)?(D=k[a+12>>2]|0,E=Lta(D)|0,B=0,F=Ia(40,A|0,D|0,E|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,F|0,104947,1)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Xa(242,E|0,k[p>>2]|0)|0,E=B,B=0,!(E&1)):0)?(B=0,Ia(40,F|0,149177,1)|0,F=B,B=0,!(F&1)):0)?(B=0,wa(510,g|0,t|0),F=B,B=0,!(F&1)):0){B=0;ya(424,g|0)|0;F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(g);G=F;H=E;break}Yua(g);k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);E=h+56|0;F=h+4|0;k[h>>2]=27524;k[E>>2]=27544;B=0;wa(508,h+56|0,F|0);D=B;B=0;if(D&1){D=Rb()|0;I=Q;J=D;vva(E);Qb(J|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[E>>2]=27488;B=0;va(448,F|0);D=B;B=0;do if(D&1){K=Rb()|0;L=Q;M=K}else{k[F>>2]=27560;K=h+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(c);Yua(K);Ava(F);L=O;M=N;break}Yua(c);N=k[o>>2]|0;O=Lta(N)|0;B=0;P=Ia(40,h|0,N|0,O|0)|0;O=B;B=0;do if(O&1)R=53;else{B=0;N=Ia(40,P|0,104949,16)|0;S=B;B=0;if(S&1){R=53;break}S=Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0;T=Lta(S)|0;B=0;U=Ia(40,N|0,S|0,T|0)|0;T=B;B=0;if(T&1){R=53;break}B=0;Ia(40,U|0,104966,2)|0;U=B;B=0;if(U&1){R=53;break}B=0;wa(510,i|0,F|0);U=B;B=0;if(U&1){R=53;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;T=Q;Yua(i);V=U;W=T;break}Yua(i);k[h>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(K);Ava(F);vva(E);r=b;return}while(0);if((R|0)==53){P=Rb()|0;V=P;W=Q}k[h>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(K);Ava(F);vva(E);X=V;Y=W;Qb(X|0)}while(0);I=L;J=M;vva(E);Qb(J|0)}else R=50;while(0);if((R|0)==50){A=Rb()|0;G=A;H=Q}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);X=G;Y=H;Qb(X|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=j+56|0;s=j+4|0;k[j>>2]=27524;k[w>>2]=27544;B=0;wa(508,j+56|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;Z=Q;_=z;vva(w);Qb(_|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[w>>2]=27488;B=0;va(448,s|0);z=B;B=0;do if(z&1){y=Rb()|0;$=Q;aa=y}else{k[s>>2]=27560;y=j+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;H=Q;Yua(c);Yua(y);Ava(s);$=H;aa=v;break}Yua(c);B=0;v=Ia(40,j|0,104969,2)|0;H=B;B=0;do if(((((((!(H&1)?(B=0,G=Xa(242,v|0,q|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,G|0,104972,22)|0,G=B,B=0,!(G&1)):0)?(G=k[a+12>>2]|0,f=Lta(G)|0,B=0,J=Ia(40,t|0,G|0,f|0)|0,f=B,B=0,!(f&1)):0)?(B=0,f=Ia(40,J|0,104947,1)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Xa(242,f|0,k[p>>2]|0)|0,f=B,B=0,!(f&1)):0)?(B=0,Ia(40,J|0,149177,1)|0,J=B,B=0,!(J&1)):0)?(B=0,wa(510,l|0,s|0),J=B,B=0,!(J&1)):0){B=0;ya(424,l|0)|0;J=B;B=0;if(J&1){J=Rb()|0;f=Q;Yua(l);ba=J;ca=f;break}Yua(l);k[j>>2]=27468;k[w>>2]=27488;k[s>>2]=27560;Yua(y);Ava(s);vva(w);f=m+56|0;J=m+4|0;k[m>>2]=27524;k[f>>2]=27544;B=0;wa(508,m+56|0,J|0);G=B;B=0;if(G&1){G=Rb()|0;da=Q;ea=G;vva(f);Qb(ea|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[f>>2]=27488;B=0;va(448,J|0);G=B;B=0;do if(G&1){t=Rb()|0;fa=Q;ga=t}else{k[J>>2]=27560;t=m+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;L=Q;Yua(c);Yua(t);Ava(J);fa=L;ga=M;break}Yua(c);B=0;M=Ia(40,m|0,104995,1)|0;L=B;B=0;do if(L&1)R=94;else{B=0;I=Xa(242,M|0,q|0)|0;W=B;B=0;if(W&1){R=94;break}B=0;W=Ia(40,I|0,104997,2)|0;I=B;B=0;if(I&1){R=94;break}I=k[o>>2]|0;V=Lta(I)|0;B=0;h=Ia(40,W|0,I|0,V|0)|0;V=B;B=0;if(V&1){R=94;break}B=0;V=Ia(40,h|0,104949,16)|0;h=B;B=0;if(h&1){R=94;break}h=Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0;I=Lta(h)|0;B=0;W=Ia(40,V|0,h|0,I|0)|0;I=B;B=0;if(I&1){R=94;break}B=0;Ia(40,W|0,104966,2)|0;W=B;B=0;if(W&1){R=94;break}B=0;wa(510,n|0,J|0);W=B;B=0;if(W&1){R=94;break}B=0;ya(424,n|0)|0;W=B;B=0;if(W&1){W=Rb()|0;I=Q;Yua(n);ha=W;ia=I;break}Yua(n);k[m>>2]=27468;k[f>>2]=27488;k[J>>2]=27560;Yua(t);Ava(J);vva(f);r=b;return}while(0);if((R|0)==94){M=Rb()|0;ha=M;ia=Q}k[m>>2]=27468;k[f>>2]=27488;k[J>>2]=27560;Yua(t);Ava(J);vva(f);X=ha;Y=ia;Qb(X|0)}while(0);da=fa;ea=ga;vva(f);Qb(ea|0)}else R=91;while(0);if((R|0)==91){v=Rb()|0;ba=v;ca=Q}k[j>>2]=27468;k[w>>2]=27488;k[s>>2]=27560;Yua(y);Ava(s);vva(w);X=ba;Y=ca;Qb(X|0)}while(0);Z=$;_=aa;vva(w);Qb(_|0)}_=d+56|0;w=d+4|0;k[d>>2]=27524;k[_>>2]=27544;B=0;wa(508,d+56|0,w|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ja=Q;ka=aa;vva(_);Qb(ka|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[_>>2]=27488;B=0;va(448,w|0);aa=B;B=0;do if(aa&1){$=Rb()|0;la=Q;ma=$}else{k[w>>2]=27560;$=d+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;ca=Q;Yua(c);Yua($);Ava(w);la=ca;ma=Z;break}Yua(c);B=0;Z=Ia(40,d|0,104912,15)|0;ca=B;B=0;do if((!(ca&1)?(ba=Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0,s=Lta(ba)|0,B=0,Ia(40,Z|0,ba|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,w|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(s&1){s=Rb()|0;ba=Q;Yua(e);na=s;oa=ba;break}Yua(e);k[d>>2]=27468;k[_>>2]=27488;k[w>>2]=27560;Yua($);Ava(w);vva(_);r=b;return}else R=16;while(0);if((R|0)==16){Z=Rb()|0;na=Z;oa=Q}k[d>>2]=27468;k[_>>2]=27488;k[w>>2]=27560;Yua($);Ava(w);vva(_);X=na;Y=oa;Qb(X|0)}while(0);ja=la;ka=ma;vva(_);Qb(ka|0)}function TY(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;b=r;r=r+160|0;c=b+136|0;d=b;e=d+56|0;f=d+4|0;k[d>>2]=27524;k[e>>2]=27544;B=0;wa(508,d+56|0,f|0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;j=g;vva(e);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[e>>2]=27488;B=0;va(448,f|0);g=B;B=0;do if(g&1){l=Rb()|0;m=Q;n=l}else{k[f>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,f|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(f);m=p;n=o;break}Yua(c);o=a+8|0;if((k[o>>2]|0)!=0?(p=a+16|0,(k[p>>2]|0)!=0):0){B=0;q=Ia(40,d|0,105e3,14)|0;s=B;B=0;if(((((((!(s&1)?(s=k[a+12>>2]|0,t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,104947,1)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Xa(242,t|0,k[p>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,Ia(40,u|0,149177,1)|0,u=B,B=0,!(u&1)):0)?(u=k[o>>2]|0,o=Lta(u)|0,B=0,p=Ia(40,d|0,u|0,o|0)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Ia(40,p|0,104949,16)|0,p=B,B=0,!(p&1)):0)?(p=k[a+4>>2]|0,u=Lta(p)|0,B=0,Ia(40,o|0,p|0,u|0)|0,u=B,B=0,!(u&1)):0)v=22}else v=11;if(((v|0)==11?(B=0,u=Ia(40,d|0,104949,16)|0,p=B,B=0,!(p&1)):0)?(p=k[a+4>>2]|0,o=Lta(p)|0,B=0,Ia(40,u|0,p|0,o|0)|0,o=B,B=0,!(o&1)):0)v=22;if((v|0)==22?(B=0,wa(510,c|0,f|0),o=B,B=0,!(o&1)):0){o=(i[c>>0]&1)==0?c+1|0:k[c+8>>2]|0;p=(Lta(o)|0)+1|0;B=0;u=ya(422,p|0)|0;p=B;B=0;if(!(p&1)){TEa(u|0,o|0,(Lta(o)|0)+1|0)|0;Yua(c);k[d>>2]=27468;k[e>>2]=27488;k[f>>2]=27560;Yua(l);Ava(f);vva(e);r=b;return u|0}u=Rb()|0;o=Q;Yua(c);w=o;x=u;k[d>>2]=27468;k[e>>2]=27488;k[f>>2]=27560;Yua(l);Ava(f);vva(e);Qb(x|0)}u=Rb()|0;w=Q;x=u;k[d>>2]=27468;k[e>>2]=27488;k[f>>2]=27560;Yua(l);Ava(f);vva(e);Qb(x|0)}while(0);h=m;j=n;vva(e);Qb(j|0);return 0}function UY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=c+(d<<2)|0;if((k[c>>2]|0)==(b|0)){f=1;g=0;k[a>>2]=g;return f|0}h=c+(((d|0)/2|0)<<2)|0;if((k[e+-4>>2]|0)==(b|0)){f=1;g=d+-1|0;k[a>>2]=g;return f|0}a:do if((d|0)<0)i=h;else{j=c;l=e;m=h;while(1){n=j;o=l;p=m;while(1){q=k[p>>2]|0;if((q|0)==(b|0)){i=p;break a}if((q|0)<=(b|0)){r=o;s=p;break}o=p+-4|0;q=j+(((o-n>>2|0)/2|0)<<2)|0;if(j>>>0>o>>>0){i=q;break a}else p=q}p=s+4|0;o=p+(((r-p>>2|0)/2|0)<<2)|0;if(p>>>0>r>>>0){i=o;break}else{j=p;l=r;m=o}}}while(0);if((k[i>>2]|0)!=(b|0)){f=0;g=0;k[a>>2]=g;return f|0}f=1;g=i-c>>2;k[a>>2]=g;return f|0}function VY(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;d=b/c;c=d*d;e=+ba(+d,3.0);f=+ba(+d,4.0);g=+ba(+d,5.0);h=+ba(+d,6.0);i=+ba(+d,7.0);j=+ba(+d,8.0);k=+ba(+d,9.0);l=+ba(+d,10.0);m=1.0-a/b;return +(2.0/+aa(+((b-a)*6.283185307179586))*((.529659-d*22.3235+c*532.074-e*5479.53+f*28592.2-g*81388.6+h*128746.0-i*106246.0+j*35780.7)*+ba(+m,1.5)+(m*(d*6.47583+.246984+c*176.456-e*4058.76+f*37303.8-g*181755.0+h*520551.0-i*904370.0+j*936863.0-k*531940.0+l*127291.0)+((.0719768-d*1.513476-c*61.1001+e*1554.95-f*14583.8+g*71590.7-h*205384.0+i*356469.0-j*368270.0+k*208233.0-l*49544.0)*+aa(+m)+1.0))))}function WY(a,b,c,d,e,f,g,h,i,j,l,m,n,o,q,r,s,t,u){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=+i;j=+j;l=+l;m=+m;n=+n;o=+o;q=+q;r=+r;s=+s;t=+t;u=+u;var v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0;v=t/u/12.0;u=g*2.5;t=(g+-.5)*2.5;g=u/.02+.5;w=t/.02+.5;x=t+2.0;y=(j-m)/1.0e3;m=q*r+(1.0-r)*o;o=s*.001;s=-t;t=(j-n)/1.0e3+-1.0;n=-(t*l);l=-u;if(t>0.0){t=0.0;j=0.0;r=0.0;z=0;q=0.0;A=0.0;B=0.0;while(1){C=k[36480+(z<<2)>>2]|0;D=a+(C<<3)|0;E=+p[D>>3];F=E-m*+LY(y,o);p[D>>3]=F;E=F*.08333333333333333;G=j+E;if(F<x)if(!(F>=s))H=1.0;else H=+p[d+(~~(w+F/.02)<<3)>>3];else H=0.0;I=+ja(+n);J=v*(I*+p[b+(C<<3)>>3]);I=B+J;K=A+H*J;J=(z+-6|0)>>>0<3?t+F:t;do if(!(F>=u))if(F>l){L=+p[c+(~~(g+F/.02)<<3)>>3];M=r-(F-L)*.08333333333333333;N=q+L*.08333333333333333;break}else{M=r-E;N=q;break}else{M=r;N=q+E}while(0);z=z+1|0;if((z|0)==12){O=J;P=G;Q=M;R=N;S=K;T=I;break}else{t=J;j=G;r=M;q=N;A=K;B=I}}}else{B=0.0;A=0.0;N=0.0;z=0;q=0.0;M=0.0;r=0.0;while(1){C=k[36480+(z<<2)>>2]|0;D=a+(C<<3)|0;j=+p[D>>3];t=j-m*+LY(y,o);p[D>>3]=t;j=t*.08333333333333333;H=A+j;if(t<x)if(!(t>=s))U=1.0;else U=+p[d+(~~(w+t/.02)<<3)>>3];else U=0.0;n=v*+p[b+(C<<3)>>3];E=r+n;F=M+U*n;n=(z+-6|0)>>>0<3?B+t:B;do if(!(t>=u))if(t>l){L=+p[c+(~~(g+t/.02)<<3)>>3];V=N-(t-L)*.08333333333333333;W=q+L*.08333333333333333;break}else{V=N-j;W=q;break}else{V=N;W=q+j}while(0);z=z+1|0;if((z|0)==12){O=n;P=H;Q=V;R=W;S=F;T=E;break}else{B=n;A=H;N=V;q=W;M=F;r=E}}}r=O/3.0;if(!(r<-1.0))if(r<10.0){X=(+ba(+(10.0-r),3.0)*.0067+8.3)*.001*.95;Y=(r*.15+2.8)*.001*.95}else{X=.007885;Y=.004085}else{X=.016359;Y=2.5174999999999998e-03}r=R*365.0;R=r*Y;O=+KY(i,1.5);if(R<S){i=T-S+R;M=(S-R)*2.2;W=+KY(M+Q*(O*.005997014925373134),i);Z=R-W;_=+KY(M,i);$=W}else{W=+KY(Q*(O*.005997014925373134),T);Z=S+X*(r-S/Y)-W;_=0.0;$=W}if(Q>0.0)aa=Q-+KY(($-_)/.008995522388059701,Q)*.5;else aa=Q;if(Z<0.0){ca=+LY(P,-aa);da=S-Z;ea=0.0}else{ca=P;da=S;ea=Z}if(!(ca<0.0)){fa=ea/h;p[e>>3]=fa;ga=da/h;p[f>>3]=ga;ha=da-ea;ia=ha/h;return +ia}fa=ea/h;p[e>>3]=fa;ga=da/h;p[f>>3]=ga;ha=da-ea;ia=ha/h;return +ia}function XY(a,b,c,d,e,f,g,h,i,j,k){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0.0,m=0;l=((c-a)*.006200000000000001+(f-d))/((b-a)*.006200000000000001+(e-d));d=1.0-l;m=0;do{e=+p[g+(m<<3)>>3];p[j+(m<<3)>>3]=l*+p[h+(m<<3)>>3]+d*+p[i+(m<<3)>>3];p[k+(m<<3)>>3]=e;m=m+1|0}while((m|0)!=12);return}function YY(a,b,c,d,e,f,g,h){a=+a;b=+b;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0.0,k=0.0;i=0;do{j=+p[f+(i<<3)>>3];k=j+(+p[e+(i<<3)>>3]-j)*a;j=+KY(1.5,+p[d+(i<<3)>>3]*+ba(+(+p[c+(i<<3)>>3]),+b));p[g+(i<<3)>>3]=k;p[h+(i<<3)>>3]=j;i=i+1|0}while((i|0)!=12);return}function ZY(a,b,c,d,e,f){a=+a;b=+b;c=c|0;d=d|0;e=e|0;f=f|0;var g=0.0;g=(a+34.83)*b;a=+ja(+(.169/b*g));b=+p[c>>3]*a;p[e>>3]=g+ +p[d>>3];p[f>>3]=b;b=+p[c+8>>3]*a;p[e+8>>3]=g+ +p[d+8>>3];p[f+8>>3]=b;b=+p[c+16>>3]*a;p[e+16>>3]=g+ +p[d+16>>3];p[f+16>>3]=b;b=+p[c+24>>3]*a;p[e+24>>3]=g+ +p[d+24>>3];p[f+24>>3]=b;b=+p[c+32>>3]*a;p[e+32>>3]=g+ +p[d+32>>3];p[f+32>>3]=b;b=+p[c+40>>3]*a;p[e+40>>3]=g+ +p[d+40>>3];p[f+40>>3]=b;b=+p[c+48>>3]*a;p[e+48>>3]=g+ +p[d+48>>3];p[f+48>>3]=b;b=+p[c+56>>3]*a;p[e+56>>3]=g+ +p[d+56>>3];p[f+56>>3]=b;b=+p[c+64>>3]*a;p[e+64>>3]=g+ +p[d+64>>3];p[f+64>>3]=b;b=+p[c+72>>3]*a;p[e+72>>3]=g+ +p[d+72>>3];p[f+72>>3]=b;b=+p[c+80>>3]*a;p[e+80>>3]=g+ +p[d+80>>3];p[f+80>>3]=b;b=+p[c+88>>3]*a;p[e+88>>3]=g+ +p[d+88>>3];p[f+88>>3]=b;return}function _Y(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=i|0;j=j|0;var l=0,m=0,n=0,o=0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0.0,T=0.0,U=0.0;l=r;r=r+128|0;m=l+96|0;n=l+72|0;o=l;$Y(m,c,d,e,f,g,h,i,j);f=+p[m+16>>3];q=+p[m+8>>3];s=f*d-q*e;p[n>>3]=s;t=+p[m>>3];u=t*e-f*c;m=n+8|0;p[m>>3]=u;e=q*c-t*d;j=n+16|0;p[j>>3]=e;d=+aa(+(e*e+(s*s+u*u)));if(d==0.0){k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;v=0.0;w=0.0;x=1.0}else{c=s/d;p[n>>3]=c;s=u/d;p[m>>3]=s;v=c;w=s;x=e/d}p[j>>3]=x;d=+p[g>>3];p[o>>3]=d;e=(+p[g+8>>3]+ +p[h>>3])*.5;p[o+8>>3]=e;s=(+p[g+16>>3]+ +p[i>>3])*.5;p[o+16>>3]=s;p[o+24>>3]=e;c=+p[h+8>>3];p[o+32>>3]=c;u=(+p[h+16>>3]+ +p[i+8>>3])*.5;p[o+40>>3]=u;p[o+48>>3]=s;p[o+56>>3]=u;y=+p[i+16>>3];p[o+64>>3]=y;z=e*e;A=s*s;B=u*u;C=d*d+0.0+z+A+z+c*c+B+A+B+y*y;B=+aa(+(C==0.0?1.0e-14:C))/1.7320508075688772;C=d*v+0.0+e*w+s*x;A=e*v+0.0+c*w+u*x;c=s*v+0.0+u*w+y*x;y=e;u=s;z=v;D=d;i=0;while(1){E=z*D*v;F=z*y*w;G=z*u*x;H=C-E*v-F*v-G*v;I=A-E*w-F*w-G*w;J=c-E*x-F*x-G*x;h=i+1|0;if((h|0)==3){K=H;L=I;M=J;N=v;O=d;P=e;Q=s;R=0;break}C=H;A=I;c=J;y=+p[o+(h*24|0)+8>>3];u=+p[o+(h*24|0)+16>>3];z=+p[n+(h<<3)>>3];D=+p[o+(h*24|0)>>3];i=h}while(1){D=N*O*t;z=N*P*q;u=N*Q*f;y=K-D*t-z*t-u*t;c=L-D*q-z*q-u*q;A=M-D*f-z*f-u*f;i=R+1|0;if((i|0)==3){S=y;T=c;U=A;break}K=y;L=c;M=A;N=+p[n+(i<<3)>>3];O=+p[o+(i*24|0)>>3];P=+p[o+(i*24|0)+8>>3];Q=+p[o+(i*24|0)+16>>3];R=i}Q=+aa(+(S*S+T*T+U*U));p[a>>3]=B;p[b>>3]=Q;r=l;return}function $Y(a,b,c,d,e,f,g,h,i){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0.0,l=0,m=0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0;j=e<1.0e-12?1.0e-12:e;l=i+8|0;m=i+16|0;e=(+p[l>>3]*d-+p[m>>3]*c)*2.0/j-(+p[h+8>>3]-+p[g+16>>3]);p[a>>3]=e;n=(+p[m>>3]*b-+p[i>>3]*d)*2.0/j-(+p[f+16>>3]-+p[h>>3]);h=a+8|0;p[h>>3]=n;o=(+p[i>>3]*c-+p[l>>3]*b)*2.0/j-(+p[g>>3]-+p[f+8>>3]);f=a+16|0;q=b/j*e+c/j*n+d/j*o;r=e-q*b/j;p[a>>3]=r;b=n-q*c/j;p[h>>3]=b;c=o-q*d/j;p[f>>3]=c;j=+aa(+(c*c+(r*r+b*b)));if(j==0.0){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;s=1.0;p[f>>3]=s;return}else{p[a>>3]=r/j;p[h>>3]=b/j;s=c/j;p[f>>3]=s;return}}function aZ(a,b){a=+a;b=+b;return +(+aa(+(b*2.0*b/(a*3.0*a))))}function bZ(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;a=r;r=r+368|0;b=a+344|0;c=a+208|0;d=a+196|0;e=a+184|0;f=a+36|0;g=a+48|0;h=a+24|0;i=a+12|0;j=a;l=(wY()|0)>1;m=sZ(105015)|0;if(Ita(m,105024)|0)if(Ita(m,105033)|0){if(Ita(m,105043)|0){n=g+56|0;o=g+4|0;k[g>>2]=27524;k[n>>2]=27544;B=0;wa(508,g+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,o|0,b|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(b);Yua(t);Ava(o);u=x;v=w;break}Yua(b);B=0;w=Ia(40,g|0,145505,30)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,h|0,105116,81);z=B;B=0;do if(!(z&1)){B=0;eb(502,i|0,105198,29);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(h);D=A;E=C;break}B=0;wa(510,j|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=1;G=Q;H=C}else{B=0;ua(163,y|0,h|0,i|0,48,j|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(j);F=I;G=A;H=C}Yua(i);Yua(h);if(F){D=H;E=G}else{J=G;K=H;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=E;K=D}else L=43;while(0);if((L|0)==43){w=Rb()|0;J=Q;K=w}k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=J;N=K;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}if(l){l=c+56|0;s=c+4|0;k[c>>2]=27524;k[l>>2]=27544;B=0;wa(508,c+56|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;O=Q;P=n;vva(l);Qb(P|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[l>>2]=27488;B=0;va(448,s|0);n=B;B=0;do if(n&1){v=Rb()|0;R=Q;S=v}else{k[s>>2]=27560;v=c+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,s|0,b|0);u=B;B=0;if(u&1){u=Rb()|0;q=Q;Yua(b);Yua(v);Ava(s);R=q;S=u;break}Yua(b);B=0;u=Ia(40,c|0,105049,66)|0;q=B;B=0;b:do if(!(q&1)?(B=0,Xa(239,u|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,d|0,105116,81);J=B;B=0;do if(!(J&1)){B=0;eb(502,e|0,105198,29);o=B;B=0;if(o&1){o=Rb()|0;g=Q;Yua(d);T=o;U=g;break}B=0;wa(510,f|0,s|0);g=B;B=0;if(g&1){g=Rb()|0;V=Q;W=g;X=1}else{B=0;ua(163,K|0,d|0,e|0,45,f|0);g=B;B=0;if(g&1)Y=1;else{B=0;eb(503,K|0,1240,229);B=0;Y=0}g=Rb()|0;o=Q;Yua(f);V=o;W=g;X=Y}Yua(e);Yua(d);if(X){T=W;U=V}else{Z=W;_=V;break b}}else{g=Rb()|0;T=g;U=Q}while(0);zb(K|0);Z=T;_=U}else L=20;while(0);if((L|0)==20){u=Rb()|0;Z=u;_=Q}k[c>>2]=27468;k[l>>2]=27488;k[s>>2]=27560;Yua(v);Ava(s);vva(l);M=_;N=Z;Qb(N|0)}while(0);O=R;P=S;vva(l);Qb(P|0)}else $=973}else $=975;else $=974;if(!m){r=a;return $|0}Tqa(m);r=a;return $|0}function cZ(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;a=r;r=r+368|0;b=a+344|0;c=a+208|0;d=a+196|0;e=a+184|0;f=a+36|0;g=a+48|0;h=a+24|0;i=a+12|0;j=a;l=(wY()|0)>1;m=sZ(105228)|0;if(Ita(m,105237)|0){if(Ita(m,105241)|0){n=g+56|0;o=g+4|0;k[g>>2]=27524;k[n>>2]=27544;B=0;wa(508,g+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,o|0,b|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(b);Yua(t);Ava(o);u=x;v=w;break}Yua(b);B=0;w=Ia(40,g|0,126703,30)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,h|0,105116,81);z=B;B=0;do if(!(z&1)){B=0;eb(502,i|0,105312,29);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(h);D=A;E=C;break}B=0;wa(510,j|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=1;G=Q;H=C}else{B=0;ua(163,y|0,h|0,i|0,78,j|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(j);F=I;G=A;H=C}Yua(i);Yua(h);if(F){D=H;E=G}else{J=G;K=H;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=E;K=D}else L=42;while(0);if((L|0)==42){w=Rb()|0;J=Q;K=w}k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=J;N=K;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}if(l){l=c+56|0;s=c+4|0;k[c>>2]=27524;k[l>>2]=27544;B=0;wa(508,c+56|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;O=Q;P=n;vva(l);Qb(P|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[l>>2]=27488;B=0;va(448,s|0);n=B;B=0;do if(n&1){v=Rb()|0;R=Q;S=v}else{k[s>>2]=27560;v=c+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,s|0,b|0);u=B;B=0;if(u&1){u=Rb()|0;q=Q;Yua(b);Yua(v);Ava(s);R=q;S=u;break}Yua(b);B=0;u=Ia(40,c|0,105245,66)|0;q=B;B=0;b:do if(!(q&1)?(B=0,Xa(239,u|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,d|0,105116,81);J=B;B=0;do if(!(J&1)){B=0;eb(502,e|0,105312,29);o=B;B=0;if(o&1){o=Rb()|0;g=Q;Yua(d);T=o;U=g;break}B=0;wa(510,f|0,s|0);g=B;B=0;if(g&1){g=Rb()|0;V=Q;W=g;X=1}else{B=0;ua(163,K|0,d|0,e|0,75,f|0);g=B;B=0;if(g&1)Y=1;else{B=0;eb(503,K|0,1240,229);B=0;Y=0}g=Rb()|0;o=Q;Yua(f);V=o;W=g;X=Y}Yua(e);Yua(d);if(X){T=W;U=V}else{Z=W;_=V;break b}}else{g=Rb()|0;T=g;U=Q}while(0);zb(K|0);Z=T;_=U}else L=19;while(0);if((L|0)==19){u=Rb()|0;Z=u;_=Q}k[c>>2]=27468;k[l>>2]=27488;k[s>>2]=27560;Yua(v);Ava(s);vva(l);M=_;N=Z;Qb(N|0)}while(0);O=R;P=S;vva(l);Qb(P|0)}else $=976}else $=977;if(!m){r=a;return $|0}Tqa(m);r=a;return $|0}function dZ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(!((b|0)==(e|0)|(c|0)==(f|0)))yb(105427,105344,42,105470);switch(c|0){case 4:case 1:{h=c;break}case 2:{h=8;break}default:yb(105342,105344,33,105416)}TEa(d|0,a|0,ma(h,b)|0)|0;return 0}function eZ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0;if((c|0)!=(g|0))yb(105489,105344,76,105508);if((k[e>>2]|0)!=(b|0))yb(105528,105344,98,105508);a:do switch(c|0){case 4:case 1:{e=d+(ma(k[f>>2]|0,c)|0)|0;switch(c|0){case 2:{i=e;break a;break}case 4:case 1:{j=c;l=e;m=ma(j,b)|0;TEa(l|0,a|0,m|0)|0;return 0}default:yb(105342,105344,33,105416)}break}case 2:{i=d+(k[f>>2]<<3)|0;break}default:yb(105342,105344,33,105416)}while(0);j=8;l=i;m=ma(j,b)|0;TEa(l|0,a|0,m|0)|0;return 0}function fZ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;switch(d|0){case 4:case 1:{g=d;break}case 2:{g=8;break}default:yb(105342,105344,33,105416)}TEa(b|0,a|0,ma(g,c)|0)|0;return 0}function gZ(a){a=a|0;return 0}function hZ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function iZ(a,b){a=a|0;b=b|0;k[b>>2]=0;return 0}function jZ(a,b){a=a|0;b=b|0;k[b>>2]=1;return 0}function kZ(){return 0}function lZ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;if(!((b|0)==(e|0)&(c|0)==(f|0)))yb(105553,105344,230,105592);switch(c|0){case 4:case 1:{i=c;break}case 2:{i=8;break}default:yb(105342,105344,33,105416)}TEa(d|0,a|0,ma(i,b)|0)|0;return 0}function mZ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return 0}function nZ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;switch(d|0){case 4:case 1:{h=d;break}case 2:{h=8;break}default:yb(105342,105344,33,105416)}TEa(b|0,a|0,ma(h,c)|0)|0;return 0}function oZ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return 0}function pZ(a){a=a|0;var b=0;b=k[6863]|0;if(b)Tqa(b);k[6863]=0;b=Rqa((Lta(a)|0)+1|0)|0;k[6863]=b;TEa(b|0,a|0,(Lta(a)|0)+1|0)|0;return}function qZ(){return rZ(k[6863]|0,105608)|0}function rZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;j=Rqa((Lta(a)|0)+1|0)|0;TEa(j|0,a|0,(Lta(a)|0)+1|0)|0;a=Pta(j,149175)|0;l=0;a:while(1){m=a;while(1){if(!m){n=l;o=34;break a}if((i[m>>0]|0)!=45)break a;p=(Ita(m+1|0,b)|0)==0;m=Pta(0,149175)|0;q=(i[m>>0]|0)==45;if(p){o=6;break}if(!q){s=l;break}}do if((o|0)==6){o=0;if(q){p=Rqa(1)|0;i[p>>0]=0;a=m;l=p;continue a}else{p=Rqa((Lta(m)|0)+1|0)|0;TEa(p|0,m|0,(Lta(m)|0)+1|0)|0;s=p;break}}while(0);a=Pta(0,149175)|0;l=s}if((o|0)==34){Tqa(j);r=c;return n|0}n=e+56|0;c=e+4|0;k[e>>2]=27524;k[n>>2]=27544;B=0;wa(508,e+56|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;t=Q;u=j;vva(n);Qb(u|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[n>>2]=27488;B=0;va(448,c|0);j=B;B=0;do if(j&1){o=Rb()|0;v=Q;w=o}else{k[c>>2]=27560;o=e+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);s=B;B=0;if(s&1){s=Rb()|0;l=Q;Yua(d);Yua(o);Ava(c);v=l;w=s;break}Yua(d);B=0;s=Ia(40,e|0,105616,51)|0;l=B;B=0;if(!(l&1)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,105668,74);l=B;B=0;do if(!(l&1)){B=0;eb(502,g|0,105743,10);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);x=q;y=a;break}B=0;wa(510,h|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;C=1}else{B=0;ua(163,s|0,f|0,g|0,82,h|0);a=B;B=0;if(a&1)D=1;else{B=0;eb(503,s|0,1240,229);B=0;D=0}a=Rb()|0;q=Q;Yua(h);z=q;A=a;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[n>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(n);Qb(F|0)}}else{a=Rb()|0;x=Q;y=a}while(0);zb(s|0);E=x;F=y;k[e>>2]=27468;k[n>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(n);Qb(F|0)}l=Rb()|0;E=Q;F=l;k[e>>2]=27468;k[n>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(n);Qb(F|0)}while(0);t=v;u=w;vva(n);Qb(u|0);return 0}function sZ(a){a=a|0;return rZ(k[6863]|0,a)|0}function tZ(a,b,c,d,e,f,g,h,i,j,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;o=r;r=r+480|0;p=o+456|0;q=o+440|0;s=o+304|0;t=o+444|0;u=o+152|0;v=o+288|0;w=o+16|0;x=o;y=Qqa(36)|0;B=0;va(484,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Sqa(y);C=z;D=A;Qb(C|0)}A=Qqa(36)|0;B=0;va(482,A|0);z=B;B=0;if(z&1){z=Rb()|0;E=Q;Sqa(A);C=z;D=E;Qb(C|0)}E=Qqa(36)|0;B=0;va(483,E|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;Sqa(E);C=z;D=F;Qb(C|0)}F=Qqa(36)|0;B=0;va(478,F|0);z=B;B=0;if(z&1){z=Rb()|0;G=Q;Sqa(F);C=z;D=G;Qb(C|0)}G=Qqa(36)|0;B=0;va(480,G|0);z=B;B=0;if(z&1){z=Rb()|0;H=Q;Sqa(G);C=z;D=H;Qb(C|0)}k[G+12>>2]=546;H=Qqa(36)|0;B=0;va(477,H|0);z=B;B=0;if(z&1){z=Rb()|0;I=Q;Sqa(H);C=z;D=I;Qb(C|0)}I=Qqa(4064)|0;B=0;va(479,I|0);z=B;B=0;if(z&1){z=Rb()|0;J=Q;Sqa(I);C=z;D=J;Qb(C|0)}Fka(h,q,105754);HY(k[q>>2]|0);a:do if(AY()|0){q=s+56|0;J=s+4|0;k[s>>2]=27524;k[q>>2]=27544;B=0;wa(508,s+56|0,J|0);z=B;B=0;if(z&1){z=Rb()|0;K=Q;L=z;vva(q);Qb(L|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[q>>2]=27488;B=0;va(448,J|0);z=B;B=0;do if(z&1){M=Rb()|0;N=Q;O=M}else{k[J>>2]=27560;M=s+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[s+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,J|0,p|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(p);Yua(M);Ava(J);N=R;O=P;break}Yua(p);B=0;Ia(40,s|0,105765,29)|0;P=B;B=0;do if(!(P&1)?(B=0,wa(510,t|0,J|0),R=B,B=0,!(R&1)):0){B=0;ya(425,t|0)|0;R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(t);T=R;U=S;break}else{Yua(t);k[s>>2]=27468;k[q>>2]=27488;k[J>>2]=27560;Yua(M);Ava(J);vva(q);break a}}else V=28;while(0);if((V|0)==28){P=Rb()|0;T=P;U=Q}k[s>>2]=27468;k[q>>2]=27488;k[J>>2]=27560;Yua(M);Ava(J);vva(q);C=T;D=U;Qb(C|0)}while(0);K=N;L=O;vva(q);Qb(L|0)}while(0);uZ(h+32|0,h+36|0,h);xZ(y,E,F,h,m);wZ(I,h,j,i,l);b:do if((m|0)>0){i=u+56|0;j=u+4|0;L=u+56|0;O=u+128|0;N=u+132|0;K=u+36|0;U=u+52|0;T=h+104|0;s=h+108|0;t=h+100|0;J=0;while(1){z=k[n+(J<<2)>>2]|0;P=Qqa(12)|0;B=0;eb(518,P|0,482,J|0);S=B;B=0;if(S&1){W=P;V=50;break}YN(I,P);if(AY()|0){k[u>>2]=27524;k[i>>2]=27544;B=0;wa(508,L|0,j|0);P=B;B=0;if(P&1){V=39;break}k[O>>2]=0;k[N>>2]=-1;k[u>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);P=B;B=0;if(P&1){V=40;break}k[j>>2]=27560;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[U>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,j|0,p|0);P=B;B=0;if(P&1){V=38;break}Yua(p);B=0;P=Ia(40,u|0,105795,34)|0;S=B;B=0;if(S&1){V=51;break}B=0;S=ya(427,z|0)|0;R=B;B=0;if(R&1){V=51;break}R=Lta(S)|0;B=0;X=Ia(40,P|0,S|0,R|0)|0;R=B;B=0;if(R&1){V=51;break}B=0;Ia(40,X|0,149177,1)|0;X=B;B=0;if(X&1){V=51;break}B=0;wa(510,v|0,j|0);X=B;B=0;if(X&1){V=51;break}B=0;ya(425,v|0)|0;X=B;B=0;if(X&1){V=52;break}Yua(v);k[u>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(K);Ava(j);vva(i)}X=n_(z)|0;Dc[k[(k[X>>2]|0)+28>>2]&255](X,I,h,l,z);nd[k[(k[X>>2]|0)+16>>2]&1023](X,A,h);nd[k[(k[X>>2]|0)+8>>2]&1023](X,G,h);nd[k[(k[X>>2]|0)+12>>2]&1023](X,H,h);Dc[k[(k[X>>2]|0)+24>>2]&255](X,y,h,J,z);if(X)Ec[k[(k[X>>2]|0)+4>>2]&1023](X);if(th(A)|0){X=dn(A)|0;k[t>>2]=X}X=dL(H)|0;k[T>>2]=X;X=Cma(G)|0;k[s>>2]=X;J=J+1|0;if((J|0)>=(m|0)){Y=z;break b}}if((V|0)==38){J=Rb()|0;s=Q;Yua(p);Yua(K);Ava(j);Z=s;_=J;V=41}else if((V|0)==39){J=Rb()|0;$=Q;aa=J;vva(i);Qb(aa|0)}else if((V|0)==40){J=Rb()|0;Z=Q;_=J;V=41}else if((V|0)==50){J=Rb()|0;s=Q;Sqa(W);C=J;D=s;Qb(C|0)}else if((V|0)==51){s=Rb()|0;ba=s;ca=Q;V=53}else if((V|0)==52){s=Rb()|0;J=Q;Yua(v);ba=s;ca=J;V=53}if((V|0)==41){$=Z;aa=_;vva(i);Qb(aa|0)}else if((V|0)==53){k[u>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(K);Ava(j);vva(i);C=ba;D=ca;Qb(C|0)}}else Y=0;while(0);E_(y,F,h);if((l|0)==523)t_(y,I,h,Y);i1(y,I,h);sh(y);sh(A);sh(E);sh(H);sh(F);sh(G);if(!(AY()|0)){k[a>>2]=y;k[b>>2]=A;k[c>>2]=E;k[d>>2]=F;k[e>>2]=G;k[f>>2]=H;k[g>>2]=I;r=o;return}h=w+56|0;Y=w+4|0;k[w>>2]=27524;k[h>>2]=27544;B=0;wa(508,w+56|0,Y|0);l=B;B=0;if(l&1){l=Rb()|0;da=Q;ea=l;vva(h);Qb(ea|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[h>>2]=27488;B=0;va(448,Y|0);l=B;B=0;do if(l&1){ca=Rb()|0;fa=Q;ga=ca}else{k[Y>>2]=27560;ca=w+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[w+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,Y|0,p|0);ba=B;B=0;if(ba&1){ba=Rb()|0;u=Q;Yua(p);Yua(ca);Ava(Y);fa=u;ga=ba;break}Yua(p);B=0;Ia(40,w|0,105830,30)|0;ba=B;B=0;do if(!(ba&1)?(B=0,wa(510,x|0,Y|0),u=B,B=0,!(u&1)):0){B=0;ya(425,x|0)|0;u=B;B=0;if(u&1){u=Rb()|0;aa=Q;Yua(x);ha=u;ia=aa;break}Yua(x);k[w>>2]=27468;k[h>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(h);k[a>>2]=y;k[b>>2]=A;k[c>>2]=E;k[d>>2]=F;k[e>>2]=G;k[f>>2]=H;k[g>>2]=I;r=o;return}else V=74;while(0);if((V|0)==74){ba=Rb()|0;ha=ba;ia=Q}k[w>>2]=27468;k[h>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(h);C=ha;D=ia;Qb(C|0)}while(0);da=fa;ea=ga;vva(h);Qb(ea|0)}function uZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;d=r;r=r+240|0;e=d+216|0;f=d+212|0;g=d+208|0;h=d+204|0;j=d+200|0;l=d+196|0;m=d+192|0;n=d+188|0;o=d+184|0;q=d+180|0;s=d+176|0;t=d+40|0;u=d+24|0;v=d+12|0;w=d;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;x=vY()|0;y=wY()|0;Fka(c,j,127408);if(k[a>>2]|0){r=d;return}z=c+48|0;switch(k[z>>2]|0){case 621:{k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;A=0;C=0;D=0;E=0;F=621;G=3;break}case 623:{k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;A=0;C=0;D=0;E=0;F=623;G=4;break}case 625:{Cka(c,o,0,0,105861);Fka(c,f,105880);Fka(c,g,105907);Fka(c,h,106979);A=k[f>>2]|0;C=k[g>>2]|0;D=k[o>>2]|0;E=k[h>>2]|0;F=k[z>>2]|0;G=6;break}default:{z=t+56|0;h=t+4|0;k[t>>2]=27524;k[z>>2]=27544;B=0;wa(508,t+56|0,h|0);g=B;B=0;if(g&1){g=Rb()|0;H=Q;I=g;vva(z);Qb(I|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[z>>2]=27488;B=0;va(448,h|0);g=B;B=0;do if(g&1){f=Rb()|0;J=Q;K=f}else{k[h>>2]=27560;f=t+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,h|0,e|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(e);Yua(f);Ava(h);J=M;K=L;break}Yua(e);B=0;L=Ia(40,t|0,144836,22)|0;M=B;B=0;if(!(M&1)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,u|0,105934,106);M=B;B=0;do if(!(M&1)){B=0;eb(502,v|0,106041,31);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(u);P=O;R=N;break}B=0;wa(510,w|0,h|0);N=B;B=0;if(N&1){N=Rb()|0;S=Q;T=N;U=1}else{B=0;ua(163,L|0,u|0,v|0,74,w|0);N=B;B=0;if(N&1)V=1;else{B=0;eb(503,L|0,1240,229);B=0;V=0}N=Rb()|0;O=Q;Yua(w);S=O;T=N;U=V}Yua(v);Yua(u);if(U){P=S;R=T}else{W=S;X=T;k[t>>2]=27468;k[z>>2]=27488;k[h>>2]=27560;Yua(f);Ava(h);vva(z);Qb(X|0)}}else{N=Rb()|0;P=Q;R=N}while(0);zb(L|0);W=P;X=R;k[t>>2]=27468;k[z>>2]=27488;k[h>>2]=27560;Yua(f);Ava(h);vva(z);Qb(X|0)}M=Rb()|0;W=Q;X=M;k[t>>2]=27468;k[z>>2]=27488;k[h>>2]=27560;Yua(f);Ava(h);vva(z);Qb(X|0)}while(0);H=J;I=K;vva(z);Qb(I|0)}}I=c+56|0;z=c+52|0;K=c+72|0;vZ(m,n,k[I>>2]|0,k[z>>2]|0,k[K>>2]|0,A,C,D,E,G,F,y)|0;y=k[o>>2]|0;if(y)Tqa(y);k[o>>2]=0;if(k[j>>2]|0){Qka(c,s,j,0,127458);o=k[s>>2]|0;if((k[j>>2]|0)>0){s=k[m>>2]|0;y=0;do{F=o+(y*12<<3)|0;k[s+(~~+p[F+24>>3]+-1<<2)>>2]=k[s+(~~+p[F+16>>3]+-1<<2)>>2];y=y+1|0}while((y|0)<(k[j>>2]|0))}Mka(c,o,127458)}o=k[z>>2]|0;z=Rqa(o>>>0>1073741823?-1:o<<2)|0;if(o)WEa(z|0,0,o<<2|0)|0;o=k[I>>2]|0;I=Rqa(o)|0;if((o|0)!=0?(WEa(I|0,0,o|0)|0,(o|0)>0):0){j=k[m>>2]|0;y=0;do{if((x|0)==(k[j+(y<<2)>>2]|0)){i[I+y>>0]=1;s=ma(y,G)|0;F=k[K>>2]|0;E=0;do{k[z+((k[F+(E+s<<2)>>2]|0)+-1<<2)>>2]=1;E=E+1|0}while((E|0)<(G|0))}y=y+1|0}while((y|0)<(o|0))}Cka(c,q,l,0,127426);o=k[l>>2]|0;y=k[q>>2]|0;if((o|0)>0){G=0;do{K=G<<1;if((k[z+((k[y+(K<<2)>>2]|0)+-1<<2)>>2]|0)!=0?(j=z+((k[y+((K|1)<<2)>>2]|0)+-1<<2)|0,(k[j>>2]|0)==0):0)k[j>>2]=2;G=G+1|0}while((G|0)<(o|0))}if(y)Tqa(y);k[q>>2]=0;Cka(c,q,l,0,134220);c=k[l>>2]|0;l=k[q>>2]|0;if((c|0)>0){y=0;do{o=y<<1;if((k[z+((k[l+(o<<2)>>2]|0)+-1<<2)>>2]|0)!=0?(G=z+((k[l+((o|1)<<2)>>2]|0)+-1<<2)|0,(k[G>>2]|0)==0):0)k[G>>2]=2;y=y+1|0}while((y|0)<(c|0))}if(l)Tqa(l);k[q>>2]=0;q=k[n>>2]|0;if(q)Tqa(q);k[n>>2]=0;n=k[m>>2]|0;if(n)Tqa(n);k[m>>2]=0;k[a>>2]=I;k[b>>2]=z;r=d;return}function vZ(a,b,c,d,e,f,g,h,i,j,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0;j=r;r=r+896|0;h=j+876|0;e=j+704|0;n=j+864|0;o=j+852|0;p=j+840|0;q=j+552|0;s=j+688|0;t=j+536|0;u=j+248|0;v=j+400|0;w=j+96|0;x=j+84|0;y=j+72|0;z=j+264|0;A=j+60|0;C=j+48|0;D=j+36|0;E=j+112|0;F=j+24|0;G=j+12|0;H=j;switch(l|0){case 623:case 621:{I=Rqa(c>>>0>1073741823?-1:c<<2)|0;J=Rqa(d>>>0>1073741823?-1:d<<2)|0;K=(c|0)>0;if((m|0)>1){L=e+56|0;M=e+4|0;k[e>>2]=27524;k[L>>2]=27544;B=0;wa(508,e+56|0,M|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(L);Qb(P|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[L>>2]=27488;B=0;va(448,M|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[M>>2]=27560;R=e+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[e+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,M|0,h|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(h);Yua(R);Ava(M);S=V;T=U;break}Yua(h);B=0;U=Ia(40,e|0,106073,61)|0;V=B;B=0;a:do if(!(V&1)?(B=0,Xa(239,U|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,n|0,106135,105);X=B;B=0;do if(!(X&1)){B=0;eb(502,o|0,106241,14);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(n);_=Z;$=Y;break}B=0;wa(510,p|0,M|0);Y=B;B=0;if(Y&1){Y=Rb()|0;aa=Q;ba=Y;ca=1}else{B=0;ua(163,W|0,n|0,o|0,50,p|0);Y=B;B=0;if(Y&1)da=1;else{B=0;eb(503,W|0,1240,229);B=0;da=0}Y=Rb()|0;Z=Q;Yua(p);aa=Z;ba=Y;ca=da}Yua(o);Yua(n);if(ca){_=aa;$=ba}else{ea=aa;fa=ba;break a}}else{Y=Rb()|0;_=Q;$=Y}while(0);zb(W|0);ea=_;fa=$}else ga=18;while(0);if((ga|0)==18){U=Rb()|0;ea=Q;fa=U}k[e>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(R);Ava(M);vva(L);ha=ea;ia=fa;Qb(ia|0)}while(0);O=S;P=T;vva(L);Qb(P|0)}if((m|0)==1){if(K)WEa(I|0,0,c<<2|0)|0;if((d|0)>0)WEa(J|0,0,d<<2|0)|0;k[a>>2]=I;k[b>>2]=J;r=j;return 1}J=q+56|0;I=q+4|0;k[q>>2]=27524;k[J>>2]=27544;B=0;wa(508,q+56|0,I|0);K=B;B=0;if(K&1){K=Rb()|0;ja=Q;ka=K;vva(J);Qb(ka|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[J>>2]=27488;B=0;va(448,I|0);K=B;B=0;do if(K&1){P=Rb()|0;la=Q;na=P}else{k[I>>2]=27560;P=q+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[q+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,I|0,h|0);L=B;B=0;if(L&1){L=Rb()|0;T=Q;Yua(h);Yua(P);Ava(I);la=T;na=L;break}Yua(h);B=0;L=Ia(40,q|0,106256,34)|0;T=B;B=0;b:do if(!(T&1)?(B=0,Xa(239,L|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,s|0,106135,105);O=B;B=0;do if(!(O&1)){B=0;eb(502,t|0,106241,14);fa=B;B=0;if(fa&1){fa=Rb()|0;ea=Q;Yua(s);oa=ea;pa=fa;break}B=0;wa(510,u|0,I|0);fa=B;B=0;if(fa&1){fa=Rb()|0;qa=1;ra=Q;sa=fa}else{B=0;ua(163,S|0,s|0,t|0,58,u|0);fa=B;B=0;if(fa&1)ta=1;else{B=0;eb(503,S|0,1240,229);B=0;ta=0}fa=Rb()|0;ea=Q;Yua(u);qa=ta;ra=ea;sa=fa}Yua(t);Yua(s);if(qa){oa=ra;pa=sa}else{xa=ra;za=sa;break b}}else{fa=Rb()|0;oa=Q;pa=fa}while(0);zb(S|0);xa=oa;za=pa}else ga=46;while(0);if((ga|0)==46){L=Rb()|0;xa=Q;za=L}k[q>>2]=27468;k[J>>2]=27488;k[I>>2]=27560;Yua(P);Ava(I);vva(J);ha=xa;ia=za;Qb(ia|0)}while(0);ja=la;ka=na;vva(J);Qb(ka|0);break}case 625:{ka=Rqa(f>>>0>1073741823?-1:f<<2)|0;J=Rqa(g>>>0>1073741823?-1:g<<2)|0;na=(f|0)>0;if((m|0)>1){la=v+56|0;ja=v+4|0;k[v>>2]=27524;k[la>>2]=27544;B=0;wa(508,v+56|0,ja|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Ba=za;vva(la);Qb(Ba|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[la>>2]=27488;B=0;va(448,ja|0);za=B;B=0;do if(za&1){xa=Rb()|0;Ca=Q;Da=xa}else{k[ja>>2]=27560;xa=v+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[v+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,ja|0,h|0);I=B;B=0;if(I&1){I=Rb()|0;q=Q;Yua(h);Yua(xa);Ava(ja);Ca=q;Da=I;break}Yua(h);B=0;I=Ia(40,v|0,106073,61)|0;q=B;B=0;c:do if(!(q&1)?(B=0,Xa(239,I|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,w|0,106135,105);oa=B;B=0;do if(!(oa&1)){B=0;eb(502,x|0,106241,14);sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(w);Ea=ra;Fa=sa;break}B=0;wa(510,y|0,ja|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Ga=1;Ha=Q;Ja=sa}else{B=0;ua(163,pa|0,w|0,x|0,79,y|0);sa=B;B=0;if(sa&1)Ka=1;else{B=0;eb(503,pa|0,1240,229);B=0;Ka=0}sa=Rb()|0;ra=Q;Yua(y);Ga=Ka;Ha=ra;Ja=sa}Yua(x);Yua(w);if(Ga){Ea=Ha;Fa=Ja}else{La=Ha;Ma=Ja;break c}}else{sa=Rb()|0;Ea=Q;Fa=sa}while(0);zb(pa|0);La=Ea;Ma=Fa}else ga=70;while(0);if((ga|0)==70){I=Rb()|0;La=Q;Ma=I}k[v>>2]=27468;k[la>>2]=27488;k[ja>>2]=27560;Yua(xa);Ava(ja);vva(la);ha=La;ia=Ma;Qb(ia|0)}while(0);Aa=Ca;Ba=Da;vva(la);Qb(Ba|0)}if((m|0)==1){if(na)WEa(ka|0,0,f<<2|0)|0;m=(g|0)>0;if(m)WEa(J|0,0,g<<2|0)|0;Ba=Rqa(c>>>0>1073741823?-1:c<<2)|0;if(!((i|0)<2|na^1)){na=i+-1|0;c=f<<2;f=0;do{TEa(Ba+(ma(c,f)|0)|0,ka|0,c|0)|0;f=f+1|0}while((f|0)!=(na|0))}na=Rqa(d>>>0>1073741823?-1:d<<2)|0;if(!((i|0)<1|m^1)){m=g<<2;g=0;do{TEa(na+(ma(m,g)|0)|0,J|0,m|0)|0;g=g+1|0}while((g|0)!=(i|0))}k[a>>2]=Ba;k[b>>2]=na;Tqa(ka);Tqa(J);r=j;return 1}j=z+56|0;J=z+4|0;k[z>>2]=27524;k[j>>2]=27544;B=0;wa(508,z+56|0,J|0);ka=B;B=0;if(ka&1){ka=Rb()|0;Na=Q;Oa=ka;vva(j);Qb(Oa|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[j>>2]=27488;B=0;va(448,J|0);ka=B;B=0;do if(ka&1){na=Rb()|0;Pa=Q;Qa=na}else{k[J>>2]=27560;na=z+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[z+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,J|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;Ba=Q;Yua(h);Yua(na);Ava(J);Pa=Ba;Qa=b;break}Yua(h);B=0;b=Ia(40,z|0,106256,34)|0;Ba=B;B=0;d:do if(!(Ba&1)?(B=0,Xa(239,b|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,A|0,106135,105);i=B;B=0;do if(!(i&1)){B=0;eb(502,C|0,106241,14);g=B;B=0;if(g&1){g=Rb()|0;m=Q;Yua(A);Ra=m;Sa=g;break}B=0;wa(510,D|0,J|0);g=B;B=0;if(g&1){g=Rb()|0;Ta=1;Ua=Q;Va=g}else{B=0;ua(163,a|0,A|0,C|0,87,D|0);g=B;B=0;if(g&1)Wa=1;else{B=0;eb(503,a|0,1240,229);B=0;Wa=0}g=Rb()|0;m=Q;Yua(D);Ta=Wa;Ua=m;Va=g}Yua(C);Yua(A);if(Ta){Ra=Ua;Sa=Va}else{Ya=Ua;Za=Va;break d}}else{g=Rb()|0;Ra=Q;Sa=g}while(0);zb(a|0);Ya=Ra;Za=Sa}else ga=98;while(0);if((ga|0)==98){b=Rb()|0;Ya=Q;Za=b}k[z>>2]=27468;k[j>>2]=27488;k[J>>2]=27560;Yua(na);Ava(J);vva(j);ha=Ya;ia=Za;Qb(ia|0)}while(0);Na=Pa;Oa=Qa;vva(j);Qb(Oa|0);break}default:{Oa=E+56|0;j=E+4|0;k[E>>2]=27524;k[Oa>>2]=27544;B=0;wa(508,E+56|0,j|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;_a=Q;$a=Qa;vva(Oa);Qb($a|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Oa>>2]=27488;B=0;va(448,j|0);Qa=B;B=0;do if(Qa&1){Pa=Rb()|0;ab=Q;bb=Pa}else{k[j>>2]=27560;Pa=E+36|0;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[E+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,j|0,h|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Za=Q;Yua(h);Yua(Pa);Ava(j);ab=Za;bb=Na;break}Yua(h);B=0;Na=Ia(40,E|0,144674,10)|0;Za=B;B=0;e:do if((((!(Za&1)?(B=0,Ya=ya(427,l|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(Ya)|0,B=0,z=Ia(40,Na|0,Ya|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,F|0,106135,105);z=B;B=0;do if(!(z&1)){B=0;eb(502,G|0,106241,14);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;Sa=Q;Yua(F);cb=Sa;db=Ya;break}B=0;wa(510,H|0,j|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;fb=1;gb=Q;hb=Ya}else{B=0;ua(163,J|0,F|0,G|0,112,H|0);Ya=B;B=0;if(Ya&1)ib=1;else{B=0;eb(503,J|0,1240,229);B=0;ib=0}Ya=Rb()|0;Sa=Q;Yua(H);fb=ib;gb=Sa;hb=Ya}Yua(G);Yua(F);if(fb){cb=gb;db=hb}else{jb=gb;kb=hb;break e}}else{Ya=Rb()|0;cb=Q;db=Ya}while(0);zb(J|0);jb=cb;kb=db}else ga=130;while(0);if((ga|0)==130){Na=Rb()|0;jb=Q;kb=Na}k[E>>2]=27468;k[Oa>>2]=27488;k[j>>2]=27560;Yua(Pa);Ava(j);vva(Oa);ha=jb;ia=kb;Qb(ia|0)}while(0);_a=ab;$a=bb;vva(Oa);Qb($a|0)}}return 0}function wZ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0;c=r;r=r+416|0;f=c+388|0;g=c+384|0;h=c+380|0;j=c+376|0;m=c+372|0;n=c;o=c+368|0;q=c+401|0;s=c+400|0;t=c+364|0;u=c+360|0;v=c+356|0;w=c+208|0;x=c+344|0;y=c+192|0;z=c+44|0;A=c+56|0;C=c+32|0;D=c+20|0;E=c+8|0;k[m>>2]=0;k[o>>2]=0;i[q>>0]=0;i[s>>0]=0;k[t>>2]=0;k[u>>2]=0;k[v>>2]=0;YN(a,Ika(b,139814,298)|0);YN(a,Ika(b,139834,299)|0);YN(a,Ika(b,106291,328)|0);YN(a,Ika(b,106320,329)|0);YN(a,Ika(b,106352,67)|0);YN(a,Ika(b,106369,354)|0);YN(a,Ika(b,106396,355)|0);YN(a,Ika(b,106423,357)|0);YN(a,Ika(b,106450,358)|0);YN(a,Ika(b,106476,356)|0);YN(a,Ika(b,133189,359)|0);YN(a,Ika(b,106508,327)|0);YN(a,Ika(b,106527,331)|0);YN(a,Ika(b,106546,277)|0);YN(a,Ika(b,106582,330)|0);YN(a,Ika(b,139904,282)|0);YN(a,Ika(b,139879,285)|0);YN(a,Ika(b,106605,325)|0);YN(a,Ika(b,106634,326)|0);YN(a,Ika(b,139768,8)|0);YN(a,Ika(b,134866,314)|0);YN(a,Ika(b,139791,182)|0);YN(a,Ika(b,112523,183)|0);YN(a,Ika(b,135965,247)|0);YN(a,Ika(b,139859,296)|0);YN(a,Ika(b,106656,337)|0);YN(a,Ika(b,106678,335)|0);YN(a,Ika(b,129853,66)|0);YN(a,Ika(b,106701,942)|0);YN(a,Ika(b,106728,362)|0);YN(a,Ika(b,106757,364)|0);YN(a,Ika(b,132238,360)|0);YN(a,Ika(b,106786,365)|0);YN(a,Ika(b,132209,363)|0);YN(a,Ika(b,106809,366)|0);YN(a,Ika(b,106828,367)|0);YN(a,Ika(b,106859,368)|0);YN(a,Ika(b,134882,369)|0);YN(a,Ika(b,106884,370)|0);YN(a,Ika(b,106903,361)|0);YN(a,Ika(b,106926,216)|0);YN(a,Ika(b,106952,733)|0);YN(a,Ika(b,132257,99)|0);YN(a,Ika(b,127811,80)|0);YN(a,Ika(b,127754,72)|0);YN(a,Ika(b,127656,78)|0);YN(a,Ika(b,127680,75)|0);YN(a,Ika(b,127704,69)|0);if((k[b+40>>2]|0)==302)YN(a,Ika(b,106979,283)|0);YN(a,Ika(b,135117,37)|0);Fka(b,j,135117);switch(k[j>>2]|0){case 59:break;case 60:{YN(a,Ika(b,107002,41)|0);YN(a,Ika(b,107042,42)|0);YN(a,Ika(b,107079,43)|0);break}case 61:{YN(a,Ika(b,107117,44)|0);YN(a,Ika(b,107150,45)|0);YN(a,Ika(b,107187,46)|0);break}case 62:{YN(a,Ika(b,107220,47)|0);YN(a,Ika(b,107256,48)|0);YN(a,Ika(b,107281,49)|0);YN(a,Ika(b,107303,50)|0);YN(a,Ika(b,107332,51)|0);YN(a,Ika(b,107363,52)|0);YN(a,Ika(b,107397,53)|0);YN(a,Ika(b,107421,54)|0);YN(a,Ika(b,107445,55)|0);YN(a,Ika(b,107477,56)|0);YN(a,Ika(b,107514,57)|0);YN(a,Ika(b,107546,58)|0);break}default:{j=w+56|0;F=w+4|0;k[w>>2]=27524;k[j>>2]=27544;B=0;wa(508,w+56|0,F|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(j);Qb(I|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[j>>2]=27488;B=0;va(448,F|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[F>>2]=27560;J=w+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[w+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,F|0,f|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(f);Yua(J);Ava(F);K=N;L=M;break}Yua(f);B=0;M=Ia(40,w|0,146460,20)|0;N=B;B=0;a:do if((((!(N&1)?(B=0,O=ya(427,0)|0,P=B,B=0,!(P&1)):0)?(P=Lta(O)|0,B=0,R=Ia(40,M|0,O|0,P|0)|0,P=B,B=0,!(P&1)):0)?(B=0,P=Ia(40,R|0,146481,18)|0,R=B,B=0,!(R&1)):0)?(B=0,Xa(239,P|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,x|0,107578,91);R=B;B=0;do if(!(R&1)){B=0;eb(502,y|0,107670,16);O=B;B=0;if(O&1){O=Rb()|0;S=Q;Yua(x);T=O;U=S;break}B=0;wa(510,z|0,F|0);S=B;B=0;if(S&1){S=Rb()|0;V=Q;W=S;X=1}else{B=0;ua(163,P|0,x|0,y|0,131,z|0);S=B;B=0;if(S&1)Y=1;else{B=0;eb(503,P|0,1240,229);B=0;Y=0}S=Rb()|0;O=Q;Yua(z);V=O;W=S;X=Y}Yua(y);Yua(x);if(X){T=W;U=V}else{Z=W;_=V;break a}}else{S=Rb()|0;T=S;U=Q}while(0);zb(P|0);Z=T;_=U}else $=25;while(0);if(($|0)==25){M=Rb()|0;Z=M;_=Q}k[w>>2]=27468;k[j>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(j);aa=_;ba=Z;Qb(ba|0)}while(0);H=K;I=L;vva(j);Qb(I|0)}}I=Qqa(12)|0;B=0;eb(518,I|0,476,e|0);j=B;B=0;if(j&1){j=Rb()|0;L=Q;Sqa(I);aa=L;ba=j;Qb(ba|0)}YN(a,I);Gka(b,n,106369);I=Qqa(16)|0;B=0;Oa(59,I|0,767,+(+p[n>>3]));n=B;B=0;if(n&1){n=Rb()|0;j=Q;Sqa(I);aa=j;ba=n;Qb(ba|0)}YN(a,I);I=Qqa(12)|0;B=0;eb(518,I|0,766,0);n=B;B=0;if(n&1){n=Rb()|0;j=Q;Sqa(I);aa=j;ba=n;Qb(ba|0)}YN(a,I);I=Qqa(12)|0;B=0;eb(517,I|0,759,1);n=B;B=0;if(n&1){n=Rb()|0;j=Q;Sqa(I);aa=j;ba=n;Qb(ba|0)}YN(a,I);Hka(b,m,g,107687);I=Qqa(12)|0;B=0;eb(518,I|0,371,k[g>>2]|0);n=B;B=0;if(n&1){n=Rb()|0;j=Q;Sqa(I);aa=j;ba=n;Qb(ba|0)}YN(a,I);I=k[g>>2]|0;do if(!I)ca=0;else{n=Qqa(16)|0;B=0;ib(294,n|0,372,k[m>>2]|0,I|0);j=B;B=0;if(!(j&1)){YN(a,n);ca=k[g>>2]|0;break}j=Rb()|0;L=Q;Sqa(n);aa=L;ba=j;Qb(ba|0)}while(0);Nka(b,m,ca,107687);Hka(b,m,g,107718);ca=Qqa(12)|0;B=0;eb(518,ca|0,336,k[g>>2]|0);I=B;B=0;if(I&1){I=Rb()|0;j=Q;Sqa(ca);aa=j;ba=I;Qb(ba|0)}YN(a,ca);ca=k[g>>2]|0;do if(!ca)da=0;else{I=Qqa(16)|0;B=0;ib(294,I|0,338,k[m>>2]|0,ca|0);j=B;B=0;if(!(j&1)){YN(a,I);da=k[g>>2]|0;break}j=Rb()|0;L=Q;Sqa(I);aa=L;ba=j;Qb(ba|0)}while(0);Nka(b,m,da,107718);Fka(b,h,127514);if((k[h>>2]|0)==584){Hka(b,m,g,126328);h=Qqa(12)|0;B=0;eb(518,h|0,242,k[g>>2]|0);da=B;B=0;if(da&1){da=Rb()|0;ca=Q;Sqa(h);aa=ca;ba=da;Qb(ba|0)}YN(a,h);h=k[g>>2]|0;do if(!h)ea=0;else{da=Qqa(16)|0;B=0;ib(294,da|0,243,k[m>>2]|0,h|0);ca=B;B=0;if(!(ca&1)){YN(a,da);ea=k[g>>2]|0;break}ca=Rb()|0;j=Q;Sqa(da);aa=j;ba=ca;Qb(ba|0)}while(0);Nka(b,m,ea,126328)}Kka(b,q,107751);Kka(b,s,107785);ea=(i[s>>0]|i[q>>0])<<24>>24!=0;q=Qqa(12)|0;B=0;eb(517,q|0,316,ea|0);s=B;B=0;if(s&1){s=Rb()|0;m=Q;Sqa(q);aa=m;ba=s;Qb(ba|0)}YN(a,q);if(!ea){D_(a,b,e);yZ(a,d);r=c;return}Rka(b,t,u,v,o,107824);ea=k[o>>2]|0;if(!ea){q=A+56|0;s=A+4|0;k[A>>2]=27524;k[q>>2]=27544;B=0;wa(508,A+56|0,s|0);m=B;B=0;if(m&1){m=Rb()|0;fa=Q;ga=m;vva(q);Qb(ga|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);m=B;B=0;do if(m&1){g=Rb()|0;ha=Q;ia=g}else{k[s>>2]=27560;g=A+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[A+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,s|0,f|0);h=B;B=0;if(h&1){h=Rb()|0;ca=Q;Yua(f);Yua(g);Ava(s);ha=ca;ia=h;break}Yua(f);B=0;h=Ia(40,A|0,107850,71)|0;ca=B;B=0;b:do if(ca&1)$=82;else{B=0;Xa(239,h|0,0)|0;j=B;B=0;if(j&1){$=82;break}j=Ab(20)|0;B=0;eb(502,C|0,107578,91);da=B;B=0;do if(!(da&1)){B=0;eb(502,D|0,107670,16);L=B;B=0;if(L&1){L=Rb()|0;I=Q;Yua(C);ja=L;ka=I;break}B=0;wa(510,E|0,s|0);I=B;B=0;if(I&1){I=Rb()|0;la=1;ma=Q;na=I}else{B=0;ua(163,j|0,C|0,D|0,175,E|0);I=B;B=0;if(I&1)oa=1;else{B=0;eb(503,j|0,1240,229);B=0;oa=0}I=Rb()|0;L=Q;Yua(E);la=oa;ma=L;na=I}Yua(D);Yua(C);if(la){ja=na;ka=ma}else{pa=ma;qa=na;break b}}else{I=Rb()|0;ja=I;ka=Q}while(0);zb(j|0);pa=ka;qa=ja}while(0);if(($|0)==82){h=Rb()|0;pa=Q;qa=h}k[A>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(g);Ava(s);vva(q);aa=pa;ba=qa;Qb(ba|0)}while(0);fa=ha;ga=ia;vva(q);Qb(ga|0)}if((ea|0)>0){ga=b+32|0;q=0;do{ia=(k[t>>2]|0)+(q<<2)|0;ha=k[ia>>2]|0;fa=k[(k[u>>2]|0)+(q<<2)>>2]|0;qa=(fa|0)>0;if(qa){pa=ha;s=k[ga>>2]|0;A=0;$=0;while(1){ja=(l[s+(~~+p[pa+(A*5<<3)+32>>3]+-1)>>0]|0)+$|0;A=A+1|0;if((A|0)==(fa|0)){ra=ja;break}else $=ja}if(ra){$=ra*5|0;A=Rqa($>>>0>536870911?-1:$<<3)|0;WEa(A|0,0,ra*40|0)|0;if(qa){$=ha;pa=k[ga>>2]|0;s=0;g=0;while(1){ja=$+(g*5<<3)|0;ka=ja+32|0;if(!(i[pa+(~~+p[ka>>3]+-1)>>0]|0))sa=s;else{na=A+(s*5<<3)|0;p[na>>3]=+p[ja>>3];p[na+8>>3]=+p[ja+8>>3];p[na+16>>3]=+p[ja+16>>3];p[na+24>>3]=+p[ja+24>>3];p[na+32>>3]=+p[ka>>3];sa=s+1|0}g=g+1|0;if((g|0)==(fa|0)){ta=ra;xa=A;break}else s=sa}}else{ta=ra;xa=A}}else{ta=0;xa=0}}else{ta=0;xa=0}k[ia>>2]=xa;k[(k[u>>2]|0)+(q<<2)>>2]=ta;k[(k[v>>2]|0)+(q<<2)>>2]=5;if(ha)Tqa(ha);q=q+1|0;s=k[o>>2]|0}while((q|0)<(s|0));za=s}else za=ea;ea=Qqa(24)|0;B=0;La(31,ea|0,315,k[t>>2]|0,za|0,k[u>>2]|0,k[v>>2]|0);za=B;B=0;if(za&1){za=Rb()|0;q=Q;Sqa(ea);aa=q;ba=za;Qb(ba|0)}YN(a,ea);ea=k[o>>2]|0;if((ea|0)>0){ba=ea;ea=0;while(1){za=k[(k[t>>2]|0)+(ea<<2)>>2]|0;if(!za)Aa=ba;else{Tqa(za);Aa=k[o>>2]|0}ea=ea+1|0;if((ea|0)>=(Aa|0))break;else ba=Aa}}Aa=k[u>>2]|0;if(Aa)Tqa(Aa);k[u>>2]=0;u=k[v>>2]|0;if(u)Tqa(u);k[v>>2]=0;v=k[t>>2]|0;if(v)Tqa(v);k[t>>2]=0;D_(a,b,e);yZ(a,d);r=c;return}function xZ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0;f=r;r=r+1008|0;g=f+112|0;h=f+88|0;j=f+72|0;l=f+48|0;m=f+16|0;n=f+8|0;o=f;p=f+992|0;q=f+976|0;s=f+1005|0;t=f+816|0;u=f+980|0;v=f+964|0;w=f+952|0;x=f+680|0;y=f+668|0;z=f+656|0;A=f+504|0;C=f+520|0;D=f+220|0;E=f+208|0;F=f+196|0;G=f+368|0;H=f+184|0;I=f+172|0;J=f+160|0;K=f+232|0;L=f+148|0;M=f+136|0;N=f+124|0;zka(d,s,139791);zka(d,f+1004|0,134866);Fka(d,q,127514);if(i[s>>0]|0){k[o>>2]=113372;k[o+4>>2]=113400;Ska(d,2,o)}a:do switch(k[d+48>>2]|0){case 621:{o=d+56|0;s=k[o>>2]|0;if((s|0)>0){O=d+32|0;P=s;s=0;while(1){if(!(i[(k[O>>2]|0)+s>>0]|0)){R=s+1|0;S=P}else{T=Qqa(72)|0;U=s+1|0;B=0;La(32,T|0,U|0,s|0,s|0,d|0,e|0);V=B;B=0;if(V&1){W=T;break}ih(a,T)|0;R=U;S=k[o>>2]|0}if((R|0)<(S|0)){P=S;s=R}else break a}s=Rb()|0;P=Q;Sqa(W);X=P;Y=s;Qb(Y|0)}break}case 623:{s=d+56|0;P=k[s>>2]|0;if((P|0)>0){o=d+32|0;O=P;P=0;while(1){if(!(i[(k[o>>2]|0)+P>>0]|0)){Z=P+1|0;_=O}else{U=Qqa(72)|0;T=P+1|0;B=0;La(33,U|0,T|0,P|0,P|0,d|0,e|0);V=B;B=0;if(V&1){$=U;break}ih(a,U)|0;Z=T;_=k[s>>2]|0}if((Z|0)<(_|0)){O=_;P=Z}else break a}P=Rb()|0;O=Q;Sqa($);X=O;Y=P;Qb(Y|0)}break}case 625:{k[n>>2]=107922;k[n+4>>2]=107944;Ska(d,2,n);P=d+56|0;O=k[P>>2]|0;if((O|0)>0){s=d+32|0;o=O;O=0;while(1){if(!(i[(k[s>>2]|0)+O>>0]|0)){aa=O+1|0;ba=o}else{T=Qqa(76)|0;U=O+1|0;B=0;La(34,T|0,U|0,O|0,O|0,d|0,e|0);V=B;B=0;if(V&1){ca=T;break}ih(a,T)|0;aa=U;ba=k[P>>2]|0}if((aa|0)<(ba|0)){o=ba;O=aa}else break a}O=Rb()|0;o=Q;Sqa(ca);X=o;Y=O;Qb(Y|0)}break}default:{O=t+56|0;o=t+4|0;k[t>>2]=27524;k[O>>2]=27544;B=0;wa(508,t+56|0,o|0);P=B;B=0;if(P&1){P=Rb()|0;da=Q;ea=P;vva(O);Qb(ea|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[O>>2]=27488;B=0;va(448,o|0);P=B;B=0;do if(P&1){s=Rb()|0;fa=Q;ga=s}else{k[o>>2]=27560;s=t+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[t+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,o|0,p|0);U=B;B=0;if(U&1){U=Rb()|0;T=Q;Yua(p);Yua(s);Ava(o);fa=T;ga=U;break}Yua(p);B=0;U=Ia(40,t|0,107966,22)|0;T=B;B=0;b:do if(!(T&1)?(B=0,Xa(239,U|0,0)|0,V=B,B=0,!(V&1)):0){V=Ab(20)|0;B=0;eb(502,u|0,107989,109);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,v|0,108099,34);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(u);ka=ja;la=ia;break}B=0;wa(510,w|0,o|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ma=Q;na=ia;oa=1}else{B=0;ua(163,V|0,u|0,v|0,46,w|0);ia=B;B=0;if(ia&1)pa=1;else{B=0;eb(503,V|0,1240,229);B=0;pa=0}ia=Rb()|0;ja=Q;Yua(w);ma=ja;na=ia;oa=pa}Yua(v);Yua(u);if(oa){ka=ma;la=na}else{qa=ma;ra=na;break b}}else{ia=Rb()|0;ka=Q;la=ia}while(0);zb(V|0);qa=ka;ra=la}else sa=43;while(0);if((sa|0)==43){U=Rb()|0;qa=Q;ra=U}k[t>>2]=27468;k[O>>2]=27488;k[o>>2]=27560;Yua(s);Ava(o);vva(O);X=qa;Y=ra;Qb(Y|0)}while(0);da=fa;ea=ga;vva(O);Qb(ea|0)}}while(0);c:do switch(k[q>>2]|0){case 583:{Zka(d,a,134991,214);Zka(d,a,135015,217);ea=d+56|0;ga=k[ea>>2]|0;d:do if((ga|0)>0){fa=d+32|0;da=ga;ra=0;while(1){if(!(i[(k[fa>>2]|0)+ra>>0]|0)){ta=ra+1|0;xa=da}else{qa=Qqa(24)|0;t=ra+1|0;B=0;ib(295,qa|0,t|0,ra|0,d|0);la=B;B=0;if(la&1){za=qa;break}ih(c,qa)|0;ta=t;xa=k[ea>>2]|0}if((ta|0)<(xa|0)){da=xa;ra=ta}else break d}ra=Rb()|0;da=Q;Sqa(za);X=da;Y=ra;Qb(Y|0)}while(0);switch(k[d+44>>2]|0){case 3:{Aa=ea;break c;break}case 2:{Rq(a,214,215);Aa=ea;break c;break}default:{}}ga=x+56|0;O=x+4|0;k[x>>2]=27524;k[ga>>2]=27544;B=0;wa(508,x+56|0,O|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ba=Q;Ca=ra;vva(ga);Qb(Ca|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ga>>2]=27488;B=0;va(448,O|0);ra=B;B=0;do if(ra&1){da=Rb()|0;Da=Q;Ea=da}else{k[O>>2]=27560;da=x+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[x+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,O|0,p|0);fa=B;B=0;if(fa&1){fa=Rb()|0;s=Q;Yua(p);Yua(da);Ava(O);Da=s;Ea=fa;break}Yua(p);B=0;fa=Ia(40,x|0,107966,22)|0;s=B;B=0;e:do if(!(s&1)?(B=0,Xa(239,fa|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,y|0,107989,109);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,z|0,108099,34);la=B;B=0;if(la&1){la=Rb()|0;ka=Q;Yua(y);Fa=ka;Ga=la;break}B=0;wa(510,A|0,O|0);la=B;B=0;if(la&1){la=Rb()|0;Ha=1;Ja=Q;Ka=la}else{B=0;ua(163,t|0,y|0,z|0,62,A|0);la=B;B=0;if(la&1)Ma=1;else{B=0;eb(503,t|0,1240,229);B=0;Ma=0}la=Rb()|0;ka=Q;Yua(A);Ha=Ma;Ja=ka;Ka=la}Yua(z);Yua(y);if(Ha){Fa=Ja;Ga=Ka}else{Na=Ja;Oa=Ka;break e}}else{la=Rb()|0;Fa=Q;Ga=la}while(0);zb(t|0);Na=Fa;Oa=Ga}else sa=77;while(0);if((sa|0)==77){fa=Rb()|0;Na=Q;Oa=fa}k[x>>2]=27468;k[ga>>2]=27488;k[O>>2]=27560;Yua(da);Ava(O);vva(ga);X=Na;Y=Oa;Qb(Y|0)}while(0);Ba=Da;Ca=Ea;vva(ga);Qb(Ca|0);break}case 584:{Zka(d,a,134991,214);Zka(d,a,135015,217);Zka(d,a,126277,225);O=d+56|0;ra=k[O>>2]|0;f:do if((ra|0)>0){ea=d+32|0;fa=ra;s=0;while(1){if(!(i[(k[ea>>2]|0)+s>>0]|0)){Pa=s+1|0;Qa=fa}else{qa=Qqa(24)|0;V=s+1|0;B=0;ib(295,qa|0,V|0,s|0,d|0);la=B;B=0;if(la&1){Ra=qa;break}ih(c,qa)|0;Pa=V;Qa=k[O>>2]|0}if((Pa|0)<(Qa|0)){fa=Qa;s=Pa}else break f}s=Rb()|0;fa=Q;Sqa(Ra);X=fa;Y=s;Qb(Y|0)}while(0);switch(k[d+44>>2]|0){case 3:{Aa=O;break c;break}case 2:{Rq(a,214,215);Rq(a,225,227);Aa=O;break c;break}default:{}}ra=C+56|0;ga=C+4|0;k[C>>2]=27524;k[ra>>2]=27544;B=0;wa(508,C+56|0,ga|0);s=B;B=0;if(s&1){s=Rb()|0;Sa=Q;Ta=s;vva(ra);Qb(Ta|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[ra>>2]=27488;B=0;va(448,ga|0);s=B;B=0;do if(s&1){fa=Rb()|0;Ua=Q;Va=fa}else{k[ga>>2]=27560;fa=C+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[C+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,ga|0,p|0);ea=B;B=0;if(ea&1){ea=Rb()|0;da=Q;Yua(p);Yua(fa);Ava(ga);Ua=da;Va=ea;break}Yua(p);B=0;ea=Ia(40,C|0,107966,22)|0;da=B;B=0;g:do if(!(da&1)?(B=0,Xa(239,ea|0,0)|0,V=B,B=0,!(V&1)):0){V=Ab(20)|0;B=0;eb(502,D|0,107989,109);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,E|0,108099,34);la=B;B=0;if(la&1){la=Rb()|0;ka=Q;Yua(D);Wa=ka;Ya=la;break}B=0;wa(510,F|0,ga|0);la=B;B=0;if(la&1){la=Rb()|0;Za=1;_a=Q;$a=la}else{B=0;ua(163,V|0,D|0,E|0,78,F|0);la=B;B=0;if(la&1)ab=1;else{B=0;eb(503,V|0,1240,229);B=0;ab=0}la=Rb()|0;ka=Q;Yua(F);Za=ab;_a=ka;$a=la}Yua(E);Yua(D);if(Za){Wa=_a;Ya=$a}else{bb=_a;cb=$a;break g}}else{la=Rb()|0;Wa=Q;Ya=la}while(0);zb(V|0);bb=Wa;cb=Ya}else sa=110;while(0);if((sa|0)==110){ea=Rb()|0;bb=Q;cb=ea}k[C>>2]=27468;k[ra>>2]=27488;k[ga>>2]=27560;Yua(fa);Ava(ga);vva(ra);X=bb;Y=cb;Qb(Y|0)}while(0);Sa=Ua;Ta=Va;vva(ra);Qb(Ta|0);break}case 585:{Zka(d,a,108134,218);Zka(d,a,108159,220);Zka(d,a,108184,222);ga=d+56|0;s=k[ga>>2]|0;h:do if((s|0)>0){O=d+32|0;ea=s;da=0;while(1){if(!(i[(k[O>>2]|0)+da>>0]|0)){db=da+1|0;fb=ea}else{qa=Qqa(20)|0;t=da+1|0;B=0;ib(296,qa|0,t|0,da|0,d|0);la=B;B=0;if(la&1){gb=qa;break}ih(c,qa)|0;db=t;fb=k[ga>>2]|0}if((db|0)<(fb|0)){ea=fb;da=db}else break h}da=Rb()|0;ea=Q;Sqa(gb);X=ea;Y=da;Qb(Y|0)}while(0);switch(k[d+44>>2]|0){case 3:{Aa=ga;break c;break}case 2:{Rq(a,218,219);Rq(a,220,221);Rq(a,222,223);Aa=ga;break c;break}default:{}}s=G+56|0;ra=G+4|0;k[G>>2]=27524;k[s>>2]=27544;B=0;wa(508,G+56|0,ra|0);da=B;B=0;if(da&1){da=Rb()|0;hb=Q;jb=da;vva(s);Qb(jb|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[s>>2]=27488;B=0;va(448,ra|0);da=B;B=0;do if(da&1){ea=Rb()|0;kb=Q;lb=ea}else{k[ra>>2]=27560;ea=G+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[G+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,ra|0,p|0);O=B;B=0;if(O&1){O=Rb()|0;fa=Q;Yua(p);Yua(ea);Ava(ra);kb=fa;lb=O;break}Yua(p);B=0;O=Ia(40,G|0,107966,22)|0;fa=B;B=0;i:do if(!(fa&1)?(B=0,Xa(239,O|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,H|0,107989,109);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,I|0,108099,34);la=B;B=0;if(la&1){la=Rb()|0;ka=Q;Yua(H);mb=ka;nb=la;break}B=0;wa(510,J|0,ra|0);la=B;B=0;if(la&1){la=Rb()|0;ob=1;pb=Q;qb=la}else{B=0;ua(163,t|0,H|0,I|0,95,J|0);la=B;B=0;if(la&1)rb=1;else{B=0;eb(503,t|0,1240,229);B=0;rb=0}la=Rb()|0;ka=Q;Yua(J);ob=rb;pb=ka;qb=la}Yua(I);Yua(H);if(ob){mb=pb;nb=qb}else{sb=pb;tb=qb;break i}}else{la=Rb()|0;mb=Q;nb=la}while(0);zb(t|0);sb=mb;tb=nb}else sa=143;while(0);if((sa|0)==143){O=Rb()|0;sb=Q;tb=O}k[G>>2]=27468;k[s>>2]=27488;k[ra>>2]=27560;Yua(ea);Ava(ra);vva(s);X=sb;Y=tb;Qb(Y|0)}while(0);hb=kb;jb=lb;vva(s);Qb(jb|0);break}default:{ra=K+56|0;da=K+4|0;k[K>>2]=27524;k[ra>>2]=27544;B=0;wa(508,K+56|0,da|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ub=Q;vb=ga;vva(ra);Qb(vb|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[ra>>2]=27488;B=0;va(448,da|0);ga=B;B=0;do if(ga&1){O=Rb()|0;wb=Q;xb=O}else{k[da>>2]=27560;O=K+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[K+52>>2]=16;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;B=0;wa(509,da|0,p|0);fa=B;B=0;if(fa&1){fa=Rb()|0;qa=Q;Yua(p);Yua(O);Ava(da);wb=qa;xb=fa;break}Yua(p);B=0;fa=Ia(40,K|0,108209,10)|0;qa=B;B=0;j:do if((((!(qa&1)?(B=0,V=ya(427,k[q>>2]|0)|0,la=B,B=0,!(la&1)):0)?(la=Lta(V)|0,B=0,ka=Ia(40,fa|0,V|0,la|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,ka|0,144645,14)|0,ka=B,B=0,!(ka&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,L|0,107989,109);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,M|0,108099,34);V=B;B=0;if(V&1){V=Rb()|0;na=Q;Yua(L);yb=na;Bb=V;break}B=0;wa(510,N|0,da|0);V=B;B=0;if(V&1){V=Rb()|0;Cb=1;Db=Q;Eb=V}else{B=0;ua(163,la|0,L|0,M|0,99,N|0);V=B;B=0;if(V&1)Fb=1;else{B=0;eb(503,la|0,1240,229);B=0;Fb=0}V=Rb()|0;na=Q;Yua(N);Cb=Fb;Db=na;Eb=V}Yua(M);Yua(L);if(Cb){yb=Db;Bb=Eb}else{Gb=Db;Hb=Eb;break j}}else{V=Rb()|0;yb=Q;Bb=V}while(0);zb(la|0);Gb=yb;Hb=Bb}else sa=169;while(0);if((sa|0)==169){fa=Rb()|0;Gb=Q;Hb=fa}k[K>>2]=27468;k[ra>>2]=27488;k[da>>2]=27560;Yua(O);Ava(da);vva(ra);X=Gb;Y=Hb;Qb(Y|0)}while(0);ub=wb;vb=xb;vva(ra);Qb(vb|0)}}while(0);k[m>>2]=107922;k[m+4>>2]=107944;k[m+8>>2]=108220;k[m+12>>2]=108243;k[m+16>>2]=126277;k[m+20>>2]=113372;k[m+24>>2]=113400;Lka(d,7,m);m=Qqa(376)|0;B=0;eb(520,m|0,(k[Aa>>2]|0)+1|0,d|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;vb=Q;Sqa(m);X=vb;Y=Aa;Qb(Y|0)}ih(c,m)|0;k[l>>2]=108266;k[l+4>>2]=108276;k[l+8>>2]=127183;k[l+12>>2]=134945;k[l+16>>2]=137052;k[l+20>>2]=137867;Ska(d,6,l);l=d+40|0;if((k[l>>2]|0)==303){k[j>>2]=108286;k[j+4>>2]=108298;k[j+8>>2]=108311;Ska(d,3,j)}goa(d);j=d+52|0;m=k[j>>2]|0;k:do if((m|0)>0){c=d+36|0;Aa=m;vb=0;while(1){if(!(k[(k[c>>2]|0)+(vb<<2)>>2]|0)){Ib=vb+1|0;Jb=Aa}else{xb=Qqa(88)|0;wb=vb+1|0;B=0;ua(170,xb|0,wb|0,vb|0,vb|0,d|0);ub=B;B=0;if(ub&1){Kb=xb;break}ih(b,xb)|0;Ib=wb;Jb=k[j>>2]|0}if((Ib|0)<(Jb|0)){Aa=Jb;vb=Ib}else break k}vb=Rb()|0;Aa=Q;Sqa(Kb);X=Aa;Y=vb;Qb(Y|0)}while(0);k[h>>2]=108266;k[h+4>>2]=108276;k[h+8>>2]=127183;k[h+12>>2]=134945;k[h+16>>2]=137052;k[h+20>>2]=137867;Lka(d,6,h);if((k[l>>2]|0)!=303){r=f;return}k[g>>2]=108286;k[g+4>>2]=108298;k[g+8>>2]=108311;Lka(d,3,g);r=f;return}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;c=r;r=r+1200|0;d=c+184|0;e=c+200|0;f=c+180|0;g=c+176|0;h=c+40|0;j=c+24|0;l=c+12|0;m=c;n=vY()|0;o=(n|0)==0;a:do if(o){k[f>>2]=0;if(Wsa(e,1e3,b)|0)do if((i[e>>0]|0)==43)k[f>>2]=(k[f>>2]|0)+1;while((Wsa(e,1e3,b)|0)!=0);q=k[f>>2]|0;s=Rqa(q>>>0>536870911?-1:q<<3)|0;t=Rqa(q>>>0>1073741823?-1:q<<2)|0;if((q|0)>0)WEa(t|0,0,((q|0)>1?q:1)<<2|0)|0;dta(b,0,0)|0;k[f>>2]=0;if(!(Wsa(e,1e3,b)|0)){u=s;v=t}else{q=e+1|0;while(1){b:do switch(i[e>>0]|0){case 13:case 9:case 32:case 10:case 37:break;default:{w=e+((Lta(e)|0)+-1)|0;i[w>>0]=0;if((i[e>>0]|0)==43){x=+(zY(q,1)|0);w=k[f>>2]|0;p[s+(w<<3)>>3]=x;k[f>>2]=w+1;break b}w=t+((k[f>>2]|0)+-1<<2)|0;y=k[w>>2]|0;z=Rqa((Lta(e)|0)+1|0)|0;if(!y){A=(Lta(e)|0)+1|0;if(A)TEa(z|0,e|0,A|0)|0;k[w>>2]=z;break b}w=(Lta(e)|0)+1|0;if(w)TEa(z|0,e|0,w|0)|0;w=Rqa((Lta(y)|0)+3+(Lta(z)|0)|0)|0;A=(Lta(y)|0)+1|0;if(A){C=0;do{i[w+C>>0]=i[y+C>>0]|0;C=C+1|0}while((C|0)!=(A|0))}A=w+(Lta(w)|0)|0;i[A>>0]=32;i[A+1>>0]=0;Fta(w,z)|0;k[t+((k[f>>2]|0)+-1<<2)>>2]=w;Tqa(z);Tqa(y)}}while(0);if(!(Wsa(e,1e3,b)|0)){u=s;v=t;break a}}}}else{u=0;v=0}while(0);uY()|0;b=k[f>>2]|0;if(!n){D=u;E=v}else{v=Rqa(b>>>0>536870911?-1:b<<3)|0;D=v;E=Rqa(b>>>0>1073741823?-1:b<<2)|0}uY()|0;b=k[f>>2]|0;c:do if((b|0)>0){if(o)F=0;else{v=0;while(1){uY()|0;u=Rqa(k[g>>2]|0)|0;uY()|0;k[E+(v<<2)>>2]=u;v=v+1|0;u=k[f>>2]|0;if((v|0)>=(u|0)){G=u;break c}}}while(1){v=k[E+(F<<2)>>2]|0;if(!v){H=F;break}u=(Lta(v)|0)+1|0;k[g>>2]=u;uY()|0;uY()|0;F=F+1|0;u=k[f>>2]|0;if((F|0)>=(u|0)){G=u;break c}}u=h+56|0;v=h+4|0;k[h>>2]=27524;k[u>>2]=27544;B=0;wa(508,h+56|0,v|0);n=B;B=0;if(n&1){n=Rb()|0;I=Q;J=n;vva(u);Qb(J|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);n=B;B=0;do if(n&1){e=Rb()|0;K=Q;L=e}else{k[v>>2]=27560;e=h+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(d);Yua(e);Ava(v);K=s;L=t;break}Yua(d);B=0;t=Ia(40,h|0,108321,27)|0;s=B;B=0;d:do if((((!(s&1)?(B=0,q=ya(427,~~+p[D+(H<<3)>>3]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(q)|0,B=0,C=Ia(40,t|0,q|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,108349,38)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,j|0,108388,102);C=B;B=0;do if(!(C&1)){B=0;eb(502,l|0,108491,21);q=B;B=0;if(q&1){q=Rb()|0;M=Q;Yua(j);N=M;O=q;break}B=0;wa(510,m|0,v|0);q=B;B=0;if(q&1){q=Rb()|0;P=Q;R=q;S=1}else{B=0;ua(163,A|0,j|0,l|0,106,m|0);q=B;B=0;if(q&1)T=1;else{B=0;eb(503,A|0,1240,229);B=0;T=0}q=Rb()|0;M=Q;Yua(m);P=M;R=q;S=T}Yua(l);Yua(j);if(S){N=P;O=R}else{U=P;V=R;break d}}else{q=Rb()|0;N=Q;O=q}while(0);zb(A|0);U=N;V=O}else W=48;while(0);if((W|0)==48){t=Rb()|0;U=Q;V=t}k[h>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(e);Ava(v);vva(u);X=U;Y=V;Qb(Y|0)}while(0);I=K;J=L;vva(u);Qb(J|0)}else G=b;while(0);b=Qqa(16)|0;B=0;ib(294,b|0,959,E|0,G|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Sqa(b);X=J;Y=G;Qb(Y|0)}YN(a,b);b=Qqa(16)|0;B=0;ib(297,b|0,958,D|0,k[f>>2]|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Sqa(b);X=J;Y=G;Qb(Y|0)}YN(a,b);b=k[f>>2]|0;if((b|0)<=0){if(E)W=65}else{a=b;b=0;while(1){Y=E+(b<<2)|0;G=k[Y>>2]|0;if(!G)Z=a;else{Tqa(G);Z=k[f>>2]|0}k[Y>>2]=0;b=b+1|0;if((b|0)>=(Z|0)){W=65;break}else a=Z}}if((W|0)==65)Tqa(E);if(!D){r=c;return}Tqa(D);r=c;return}function zZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;b=r;r=r+176|0;d=b+152|0;e=b+16|0;f=b;if(!(bn(a,c)|0)){r=b;return}if(!(hn(a,c)|0)){r=b;return}a:do if(BY()|0){g=e+56|0;h=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(g);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;Ia(40,e|0,108513,34)|0;p=B;B=0;if(!(p&1)?(B=0,wa(510,f|0,h|0),p=B,B=0,!(p&1)):0){B=0;ya(425,f|0)|0;p=B;B=0;if(!(p&1)){Yua(f);k[e>>2]=27468;k[g>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(g);break a}p=Rb()|0;q=Q;Yua(f);s=q;t=p;k[e>>2]=27468;k[g>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(g);Qb(t|0)}p=Rb()|0;s=Q;t=p;k[e>>2]=27468;k[g>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(g);Qb(t|0)}while(0);j=n;l=o;vva(g);Qb(l|0)}while(0);cn(a,c);$m(a,c,943);$m(a,c,937);$m(a,c,966);r=b;return}function AZ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;g=r;r=r+224|0;f=g+204|0;e=g;d=g+200|0;i=g+196|0;j=g+192|0;l=g+188|0;m=g+184|0;n=g+48|0;o=g+32|0;q=g+20|0;s=g+8|0;cO(h,d,944);k[l>>2]=-1;k[i>>2]=0;a:do if((th(c)|0)>0){h=0;while(1){t=qh(c,h)|0;u=ld[k[(k[t>>2]|0)+376>>2]&127](t,e,k[d>>2]|0,b)|0;k[i>>2]=u;h=h+1|0;if(u)break;if((h|0)>=(th(c)|0))break a}h=vY()|0;k[l>>2]=h}while(0);fZ(i,j,1,4,4,uY()|0)|0;if(k[j>>2]|0){fZ(l,m,1,4,1,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}g=n+56|0;e=n+4|0;k[n>>2]=27524;k[g>>2]=27544;B=0;wa(508,n+56|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;v=Q;w=a;vva(g);Qb(w|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[g>>2]=27488;B=0;va(448,e|0);a=B;B=0;do if(a&1){m=Rb()|0;x=Q;y=m}else{k[e>>2]=27560;m=n+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;j=Q;Yua(f);Yua(m);Ava(e);x=j;y=l;break}Yua(f);B=0;l=Ia(40,n|0,108548,43)|0;j=B;B=0;if(((((!(j&1)?(B=0,j=Xa(242,l|0,k[d>>2]|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,j|0,108592,24)|0,j=B,B=0,!(j&1)):0)?(B=0,j=ya(427,b|0)|0,i=B,B=0,!(i&1)):0)?(i=Lta(j)|0,B=0,c=Ia(40,l|0,j|0,i|0)|0,i=B,B=0,!(i&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,o|0,108617,82);i=B;B=0;do if(!(i&1)){B=0;eb(502,q|0,108700,11);j=B;B=0;if(j&1){j=Rb()|0;l=Q;Yua(o);z=l;A=j;break}B=0;wa(510,s|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;C=Q;D=j;E=1}else{B=0;ua(163,c|0,o|0,q|0,35,s|0);j=B;B=0;if(j&1)F=1;else{B=0;eb(503,c|0,1240,229);B=0;F=0}j=Rb()|0;l=Q;Yua(s);C=l;D=j;E=F}Yua(q);Yua(o);if(E){z=C;A=D}else{G=C;H=D;k[n>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(m);Ava(e);vva(g);Qb(H|0)}}else{j=Rb()|0;z=Q;A=j}while(0);zb(c|0);G=z;H=A;k[n>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(m);Ava(e);vva(g);Qb(H|0)}i=Rb()|0;G=Q;H=i;k[n>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(m);Ava(e);vva(g);Qb(H|0)}while(0);v=x;w=y;vva(g);Qb(w|0)}function BZ(a,b){a=a|0;b=b|0;b=nn(a)|0;mn(a,b);ln(a,b);return}function CZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+128|0;c=b;d=b+20|0;e=b+16|0;f=b+28|0;g=b+25|0;h=b+12|0;j=b+8|0;l=b+24|0;k[d>>2]=0;k[e>>2]=0;k[j>>2]=0;i[l>>0]=0;m=a+44|0;bO(k[m>>2]|0,l,314);n=vY()|0;if(i[l>>0]|0){r=b;return}l=(n|0)==0;if(l){cO(k[m>>2]|0,h,476);yY(j,k[h>>2]|0);h=k[a+48>>2]|0;o=Qqa(40)|0;B=0;q=ya(428,h|0)|0;s=B;B=0;if(s&1){t=Rb()|0;u=Q;Sqa(o);Qb(t|0)}s=k[j>>2]|0;k[o>>2]=36536;k[o+4>>2]=q+1;q=(Lta(s)|0)+1|0;B=0;v=ya(422,q|0)|0;q=B;B=0;if(q&1){t=Rb()|0;u=Q;Sqa(o);Qb(t|0)}k[o+12>>2]=v;q=(Lta(s)|0)+1|0;if(!s){B=0;ib(283,142353,108712,137,142345);B=0;t=Rb()|0;u=Q;Sqa(o);Qb(t|0)}if(q)TEa(v|0,s|0,q|0)|0;k[o+24>>2]=-9999;p[o+32>>3]=-9999.0;B=0;wa(512,o+8|0,476);q=B;B=0;if(q&1){t=Rb()|0;u=Q;Sqa(o);Qb(t|0)}Oo(h,o)|0;o=k[j>>2]|0;if(o)Tqa(o);k[j>>2]=0}if(!(aO(k[m>>2]|0,951)|0)){fO(k[m>>2]|0,e,954);bO(k[m>>2]|0,g,326);if(i[g>>0]|0){if(l){l=nY(k[e>>2]|0,108824)|0;k[d>>2]=l}}else{lO(k[m>>2]|0,d,951);k[c>>2]=k[e>>2];k[c+4>>2]=n;qta(f,108827,c)|0;c=oY(f,108824,1)|0;k[d>>2]=c}c=k[e>>2]|0;if(c)Tqa(c);k[e>>2]=0;rO(k[m>>2]|0,k[d>>2]|0,951)}d=a+48|0;No(k[d>>2]|0,k[m>>2]|0);kh(k[d>>2]|0);r=b;return}function DZ(a){a=a|0;var b=0,c=0;k[a>>2]=36536;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function EZ(a){a=a|0;var b=0,c=0;k[a>>2]=36536;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function FZ(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function GZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);B=0;Ia(40,d|0,109006,30)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,e|0,i|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);u=t;v=s;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);QZ(a);s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(s);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=f+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(t);A=E;C=D;break}Yua(c);B=0;D=Ia(40,f|0,109037,10)|0;E=B;B=0;do if(((!(E&1)?(F=k[a+12>>2]|0,G=Lta(F)|0,B=0,H=Ia(40,D|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,t|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;G=Q;Yua(g);I=G;J=H;break}else{Yua(g);k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(s);r=b;return}}else K=29;while(0);if((K|0)==29){D=Rb()|0;I=Q;J=D}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(s);L=I;M=J;Qb(M|0)}while(0);x=A;y=C;vva(s);Qb(y|0)}else K=26;while(0);if((K|0)==26){q=Rb()|0;u=Q;v=q}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);L=u;M=v;Qb(M|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}function HZ(a){a=a|0;return -1}function IZ(a){a=a|0;return 765}function JZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=Qqa(40)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;f=k[a+24>>2]|0;g=+p[a+32>>3];k[b>>2]=36536;k[b+4>>2]=c;k[b+12>>2]=e;k[b+24>>2]=f;p[b+32>>3]=g;k[b+16>>2]=1;k[b+20>>2]=1;f=(Lta(d)|0)+1|0;B=0;e=ya(422,f|0)|0;f=B;B=0;if(f&1){h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}k[b+8>>2]=e;f=(Lta(d)|0)+1|0;if(!d){B=0;ib(283,142353,108712,137,142345);B=0;h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}if(!f)return b|0;TEa(e|0,d|0,f|0)|0;return b|0}function KZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;if(!(d&-3))n=(Lta(k[a+12>>2]|0)|0)+1|0;else n=0;switch(d|0){case 0:{d=k[b>>2]|0;o=a+4|0;q=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;d=a+8|0;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[q>>0]=o;i[q+1>>0]=o>>8;i[q+2>>0]=o>>16;i[q+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;q=a+12|0;d=(k[q>>2]|0)==0;i[o>>0]=d&1;o=(k[b>>2]|0)+1|0;k[b>>2]=o;if(d)s=o;else{TEa(o|0,k[q>>2]|0,n|0)|0;q=(k[b>>2]|0)+n|0;k[b>>2]=q;s=q}q=a+24|0;o=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[s>>0]=o;i[s+1>>0]=o>>8;i[s+2>>0]=o>>16;i[s+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;s=a+32|0;q=s;d=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;q=s+4|0;s=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;q=o;o=q;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;d=q+4|0;i[d>>0]=s;i[d+1>>0]=s>>8;i[d+2>>0]=s>>16;i[d+3>>0]=s>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}case 2:{s=k[c>>2]|0;k[c>>2]=s+12;k[c>>2]=s+13+((k[a+12>>2]|0)==0?0:n)+12;r=e;return}case 1:{n=a+4|0;s=k[b>>2]|0;c=l[s>>0]|l[s+1>>0]<<8|l[s+2>>0]<<16|l[s+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+8|0;s=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=s;i[n+1>>0]=s>>8;i[n+2>>0]=s>>16;i[n+3>>0]=s>>24;s=k[b>>2]|0;n=s+4|0;k[b>>2]=n;c=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=s+8|0;k[b>>2]=n;d=i[n>>0]|0;n=s+9|0;k[b>>2]=n;if(!(d&1)){d=Rqa(c)|0;k[a+12>>2]=d;s=k[b>>2]|0;TEa(d|0,s|0,c|0)|0;d=s+c|0;k[b>>2]=d;u=d}else u=n;n=a+24|0;d=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+32|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[n>>0]=i[t>>0];i[n+1>>0]=i[t+1>>0];i[n+2>>0]=i[t+2>>0];i[n+3>>0]=i[t+3>>0];i[n+4>>0]=i[t+4>>0];i[n+5>>0]=i[t+5>>0];i[n+6>>0]=i[t+6>>0];i[n+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;v=Q;w=n;vva(e);Qb(w|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){d=Rb()|0;x=Q;y=d}else{k[b>>2]=27560;d=g+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;u=Q;Yua(f);Yua(d);Ava(b);x=u;y=a;break}Yua(f);B=0;a=Ia(40,g|0,143951,43)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,108871,125);u=B;B=0;do if(!(u&1)){B=0;eb(502,j|0,149525,8);c=B;B=0;if(c&1){c=Rb()|0;s=Q;Yua(h);z=s;A=c;break}B=0;wa(510,m|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;C=Q;D=c;E=1}else{B=0;ua(163,a|0,h|0,j|0,330,m|0);c=B;B=0;if(c&1)F=1;else{B=0;eb(503,a|0,1240,229);B=0;F=0}c=Rb()|0;s=Q;Yua(m);C=s;D=c;E=F}Yua(j);Yua(h);if(E){z=C;A=D}else{G=C;H=D;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(H|0)}}else{c=Rb()|0;z=Q;A=c}while(0);zb(a|0);G=z;H=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(H|0)}u=Rb()|0;G=Q;H=u;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(H|0)}while(0);v=x;w=y;vva(e);Qb(w|0)}}}function LZ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c;e=c+16|0;f=c+12|0;g=c+8|0;if(vY()|0){r=c;return}h=a+8|0;i=(Lta(k[h>>2]|0)|0)+1|0;k[e>>2]=i;jta(e,4,1,b)|0;jta(k[h>>2]|0,k[e>>2]|0,1,b)|0;p[d>>3]=+p[a+32>>3];jta(d,8,1,b)|0;jta(a+24|0,4,1,b)|0;k[f>>2]=2;jta(f,4,1,b)|0;f=a+12|0;a=(Lta(k[f>>2]|0)|0)+1|0;k[g>>2]=a;jta(g,4,1,b)|0;jta(k[f>>2]|0,k[g>>2]|0,1,b)|0;r=c;return}function MZ(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,108712,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function NZ(a){a=a|0;return k[a+24>>2]|0}function OZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,108833,37)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,108871,125);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,108997,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,197,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function PZ(a){a=a|0;return zY(k[a+8>>2]|0,0)|0}function QZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,109048,17)|0;x=B;B=0;do if(((!(x&1)?(B=0,y=Xa(242,w|0,k[a+4>>2]|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Ia(40,y|0,149177,1)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,n|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,109066,17)|0;K=B;B=0;do if(((!(K&1)?(L=k[a+8>>2]|0,M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,N|0,149177,1)|0,N=B,B=0,!(N&1)):0)?(B=0,wa(510,g|0,z|0),N=B,B=0,!(N&1)):0){B=0;ya(424,g|0)|0;N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(g);O=M;P=N;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);N=h+56|0;M=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,M|0);L=B;B=0;if(L&1){L=Rb()|0;R=Q;S=L;vva(N);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,M|0);L=B;B=0;do if(L&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,109084,17)|0;X=B;B=0;do if(X&1)Y=60;else{B=0;Z=Xa(242,W|0,k[a+24>>2]|0)|0;_=B;B=0;if(_&1){Y=60;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){Y=60;break}B=0;wa(510,i|0,M|0);Z=B;B=0;if(Z&1){Y=60;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(i);$=_;aa=Z;break}Yua(i);k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);Z=j+56|0;_=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,_|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(Z);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,j|0,109102,17)|0;ia=B;B=0;do if(!(ia&1)){B=0;ja=Sa(1,ha|0,+(+p[a+32>>3]))|0;ka=B;B=0;if(ka&1){Y=63;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){Y=63;break}B=0;wa(510,l|0,_|0);ja=B;B=0;if(ja&1){Y=63;break}B=0;ya(424,l|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(l);la=ka;ma=ja;break}else{Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);r=b;return}}else Y=63;while(0);if((Y|0)==63){ha=Rb()|0;la=Q;ma=ha}k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);na=la;oa=ma;Qb(oa|0)}while(0);ca=fa;da=ga;vva(Z);Qb(da|0)}while(0);if((Y|0)==60){W=Rb()|0;$=Q;aa=W}k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);na=$;oa=aa;Qb(oa|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}else Y=57;while(0);if((Y|0)==57){J=Rb()|0;O=Q;P=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);na=O;oa=P;Qb(oa|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=54;while(0);if((Y|0)==54){w=Rb()|0;A=Q;C=w}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);na=A;oa=C;Qb(oa|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}function RZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+192|0;c=b+180|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=k[a+20>>2]|0;cO(k[a+44>>2]|0,b+176|0,298);if((th(h)|0)>0)i=0;else{r=b;return}a:while(1){a=qh(h,i)|0;j=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;l=Rqa(j>>>0>536870911?-1:j<<3)|0;do if(((Hc[k[(k[a>>2]|0)+128>>2]&511](a)|0)+-751|0)>>>0<8){m=Wo(a,992)|0;if(!m)break a;n=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0)>0){o=0;do{q=k[(k[n>>2]|0)+32>>2]|0;s=Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0;nd[q&1023](n,s,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,l+(o<<3)|0,n);o=o+1|0}while((o|0)<(Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0))}if((Hc[k[(k[a>>2]|0)+392>>2]&511](a)|0)<=0){if(!n)break}else{o=0;do{s=k[(k[n>>2]|0)+32>>2]|0;q=Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0;nd[s&1023](n,q,o);q=k[(k[m>>2]|0)+48>>2]|0;s=l+((Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0)+o<<3)|0;nd[q&1023](m,s,n);o=o+1|0}while((o|0)<(Hc[k[(k[a>>2]|0)+392>>2]&511](a)|0))}Ec[k[(k[n>>2]|0)+4>>2]&1023](n)}else vp(a,l,992);while(0);if((j|0)>0){o=0;do{m=ed[k[(k[a>>2]|0)+156>>2]&511](a,o)|0;if(+p[l+(o<<3)>>3]==1.0)bo(m);else $n(m);o=o+1|0}while((o|0)!=(j|0))}Tqa(l);i=i+1|0;if((i|0)>=(th(h)|0)){t=46;break}}if((t|0)==46){r=b;return}b=d+56|0;t=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,t|0);h=B;B=0;if(h&1){h=Rb()|0;u=Q;v=h;vva(b);Qb(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,t|0);h=B;B=0;do if(h&1){i=Rb()|0;w=Q;x=i}else{k[t>>2]=27560;i=d+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;o=Q;Yua(c);Yua(i);Ava(t);w=o;x=j;break}Yua(c);B=0;j=Ia(40,d|0,109148,6)|0;o=B;B=0;if((((!(o&1)?(B=0,o=ya(427,992)|0,a=B,B=0,!(a&1)):0)?(a=Lta(o)|0,B=0,m=Ia(40,j|0,o|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,m|0,109155,21)|0,m=B,B=0,!(m&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,e|0,109177,96);m=B;B=0;do if(!(m&1)){B=0;eb(502,f|0,109274,18);o=B;B=0;if(o&1){o=Rb()|0;j=Q;Yua(e);y=j;z=o;break}B=0;wa(510,g|0,t|0);o=B;B=0;if(o&1){o=Rb()|0;A=Q;C=o;D=1}else{B=0;ua(163,a|0,e|0,f|0,33,g|0);o=B;B=0;if(o&1)E=1;else{B=0;eb(503,a|0,1240,229);B=0;E=0}o=Rb()|0;j=Q;Yua(g);A=j;C=o;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;k[d>>2]=27468;k[b>>2]=27488;k[t>>2]=27560;Yua(i);Ava(t);vva(b);Qb(G|0)}}else{o=Rb()|0;y=Q;z=o}while(0);zb(a|0);F=y;G=z;k[d>>2]=27468;k[b>>2]=27488;k[t>>2]=27560;Yua(i);Ava(t);vva(b);Qb(G|0)}m=Rb()|0;F=Q;G=m;k[d>>2]=27468;k[b>>2]=27488;k[t>>2]=27560;Yua(i);Ava(t);vva(b);Qb(G|0)}while(0);u=w;v=x;vva(b);Qb(v|0)}function SZ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;b=nn(k[a+28>>2]|0)|0;c=Qqa(8)|0;B=0;va(485,c|0);d=B;B=0;a:do if(!(d&1)){do if(k[c>>2]|0){B=0;e=ya(423,4)|0;f=B;B=0;if(f&1)break a;B=0;eb(505,e|0,b|0,0);f=B;B=0;if(!(f&1)){k[c+4>>2]=e;break}f=Rb()|0;g=Q;Sqa(e);h=g;i=f;Sqa(c);Qb(i|0)}while(0);f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=c+4|0;e=0;do{j=qh(k[f>>2]|0,e)|0;l=Hc[k[(k[j>>2]|0)+172>>2]&511](j)|0;if(($p(j)|0)&(l|0)>0){m=j+24|0;j=0;do{n=Bo(k[(k[m>>2]|0)+(j<<2)>>2]|0)|0;if(k[c>>2]|0){o=k[k[g>>2]>>2]|0;Jc[k[(k[o>>2]|0)+20>>2]&1](o,n,1.0,0)}j=j+1|0}while((j|0)!=(l|0))}e=e+1|0}while((e|0)<(th(k[f>>2]|0)|0))}if((k[c>>2]|0)!=0?(f=c+4|0,e=k[k[f>>2]>>2]|0,Ec[k[(k[e>>2]|0)+12>>2]&1023](e),(k[c>>2]|0)!=0):0){e=k[k[f>>2]>>2]|0;p=Hc[k[(k[e>>2]|0)+52>>2]&511](e)|0}else p=0;WZ(a,p,992,629);if((k[c>>2]|0)!=0?(e=k[c+4>>2]|0,(e|0)!=0):0){f=k[e>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);Sqa(e)}Sqa(c);if(!p)return;Tqa(p);return}while(0);p=Rb()|0;h=Q;i=p;Sqa(c);Qb(i|0)}function TZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;a:do switch(d|0){case 629:case 628:{l=Qqa(8)|0;B=0;m=ya(429,k[b+28>>2]|0)|0;n=B;B=0;do if(!(n&1)?(B=0,va(485,l|0),o=B,B=0,!(o&1)):0){if(!(k[l>>2]|0)){p=l;break a}B=0;o=ya(423,4)|0;q=B;B=0;if(!(q&1)){B=0;eb(505,o|0,m|0,0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Sqa(o);t=s;u=q;break}else{k[l+4>>2]=o;p=l;break a}}else v=9}else v=9;while(0);if((v|0)==9){m=Rb()|0;t=Q;u=m}Sqa(l);w=t;x=u;Qb(x|0);break}case 608:case 549:{m=Qqa(8)|0;B=0;n=ya(433,k[b+24>>2]|0)|0;o=B;B=0;do if(!(o&1)?(B=0,va(485,m|0),q=B,B=0,!(q&1)):0){if(!(k[m>>2]|0)){p=m;break a}B=0;q=ya(423,4)|0;s=B;B=0;if(!(s&1)){B=0;eb(505,q|0,n|0,0);s=B;B=0;if(s&1){s=Rb()|0;y=Q;Sqa(q);z=y;A=s;break}else{k[m+4>>2]=q;p=m;break a}}else v=18}else v=18;while(0);if((v|0)==18){n=Rb()|0;z=Q;A=n}Sqa(m);w=z;x=A;Qb(x|0);break}default:{n=g+56|0;o=g+4|0;k[g>>2]=27524;k[n>>2]=27544;B=0;wa(508,g+56|0,o|0);l=B;B=0;if(l&1){l=Rb()|0;C=Q;D=l;vva(n);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);l=B;B=0;do if(l&1){q=Rb()|0;E=Q;F=q}else{k[o>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,o|0,f|0);s=B;B=0;if(s&1){s=Rb()|0;y=Q;Yua(f);Yua(q);Ava(o);E=y;F=s;break}Yua(f);B=0;s=Ia(40,g|0,109293,13)|0;y=B;B=0;b:do if((((!(y&1)?(B=0,G=ya(427,d|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(G)|0,B=0,I=Ia(40,s|0,G|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,I|0,146956,19)|0,I=B,B=0,!(I&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,h|0,109307,100);I=B;B=0;do if(!(I&1)){B=0;eb(502,i|0,109408,20);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Yua(h);K=J;L=G;break}B=0;wa(510,j|0,o|0);G=B;B=0;if(G&1){G=Rb()|0;M=Q;N=G;O=1}else{B=0;ua(163,H|0,h|0,i|0,22,j|0);G=B;B=0;if(G&1)P=1;else{B=0;eb(503,H|0,1240,229);B=0;P=0}G=Rb()|0;J=Q;Yua(j);M=J;N=G;O=P}Yua(i);Yua(h);if(O){K=M;L=N}else{R=M;S=N;break b}}else{G=Rb()|0;K=Q;L=G}while(0);zb(H|0);R=K;S=L}else v=38;while(0);if((v|0)==38){s=Rb()|0;R=Q;S=s}k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(q);Ava(o);vva(n);w=R;x=S;Qb(x|0)}while(0);C=E;D=F;vva(n);Qb(D|0)}}while(0);D=b+20|0;if((th(k[D>>2]|0)|0)>0){b=0;do{Gp(qh(k[D>>2]|0,b)|0,p,c,d);b=b+1|0}while((b|0)<(th(k[D>>2]|0)|0))}if(!(k[p>>2]|0)){k[a>>2]=p;r=e;return}D=k[k[p+4>>2]>>2]|0;Ec[k[(k[D>>2]|0)+12>>2]&1023](D);k[a>>2]=p;r=e;return}function UZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=r;r=r+16|0;f=e;k[f>>2]=0;TZ(f,b,c,d);d=k[f>>2]|0;if(!(k[d>>2]|0))if(!d){g=0;k[a>>2]=g;r=e;return}else h=0;else{f=k[k[d+4>>2]>>2]|0;h=Hc[k[(k[f>>2]|0)+52>>2]&511](f)|0}if((k[d>>2]|0)!=0?(f=k[d+4>>2]|0,(f|0)!=0):0){c=k[f>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(f)}Sqa(d);g=h;k[a>>2]=g;r=e;return}function VZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(!(k[b>>2]|0)){WZ(a,0,c,d);return}e=k[k[b+4>>2]>>2]|0;b=Hc[k[(k[e>>2]|0)+52>>2]&511](e)|0;WZ(a,b,c,d);if(!b)return;Tqa(b);return}function WZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+20|0;if((th(k[e>>2]|0)|0)>0){f=0;do{g=(qh(k[e>>2]|0,f)|0)+4|0;rd[k[k[g>>2]>>2]&511](g,b,c,d);f=f+1|0}while((f|0)<(th(k[e>>2]|0)|0))}e=a+36|0;if((bL(k[e>>2]|0)|0)>0){f=0;do{g=(qh(k[e>>2]|0,f)|0)+4|0;rd[k[k[g>>2]>>2]&511](g,b,c,d);f=f+1|0}while((f|0)<(bL(k[e>>2]|0)|0))}e=a+40|0;if((th(k[e>>2]|0)|0)>0)h=0;else return;do{a=(qh(k[e>>2]|0,h)|0)+4|0;rd[k[k[a>>2]>>2]&511](a,b,c,d);h=h+1|0}while((h|0)<(th(k[e>>2]|0)|0));return}function XZ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;g=r;r=r+480|0;h=g+456|0;i=g+440|0;j=g+304|0;l=g+444|0;m=g+152|0;n=g+288|0;o=g+16|0;p=g;cO(f,i,478);a:do if(AY()|0){q=j+56|0;s=j+4|0;k[j>>2]=27524;k[q>>2]=27544;B=0;wa(508,j+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,s|0,h|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(h);Yua(w);Ava(s);x=A;y=z;break}Yua(h);B=0;Ia(40,j|0,109429,30)|0;z=B;B=0;do if(!(z&1)?(B=0,wa(510,l|0,s|0),A=B,B=0,!(A&1)):0){B=0;ya(425,l|0)|0;A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(l);D=C;E=A;break}else{Yua(l);k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);break a}}else F=15;while(0);if((F|0)==15){z=Rb()|0;D=Q;E=z}k[j>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);G=D;H=E;Qb(H|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}while(0);if((th(a)|0)>0){v=0;do{y=qh(a,v)|0;ad[k[(k[y>>2]|0)+92>>2]&63](y,a,b,c,d,e,f);v=v+1|0}while((v|0)<(th(a)|0))}b:do if(AY()|0){v=m+56|0;y=m+4|0;k[m>>2]=27524;k[v>>2]=27544;B=0;wa(508,m+56|0,y|0);x=B;B=0;if(x&1){x=Rb()|0;I=Q;J=x;vva(v);Qb(J|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[v>>2]=27488;B=0;va(448,y|0);x=B;B=0;do if(x&1){u=Rb()|0;K=Q;L=u}else{k[y>>2]=27560;u=m+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[m+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,y|0,h|0);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(h);Yua(u);Ava(y);K=D;L=E;break}Yua(h);B=0;Ia(40,m|0,109460,27)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,n|0,y|0),D=B,B=0,!(D&1)):0){B=0;ya(425,n|0)|0;D=B;B=0;if(D&1){D=Rb()|0;j=Q;Yua(n);M=j;N=D;break}else{Yua(n);k[m>>2]=27468;k[v>>2]=27488;k[y>>2]=27560;Yua(u);Ava(y);vva(v);break b}}else F=34;while(0);if((F|0)==34){E=Rb()|0;M=Q;N=E}k[m>>2]=27468;k[v>>2]=27488;k[y>>2]=27560;Yua(u);Ava(y);vva(v);G=M;H=N;Qb(H|0)}while(0);I=K;J=L;vva(v);Qb(J|0)}while(0);if((bL(b)|0)>0){J=0;do{L=qh(b,J)|0;if(ed[k[(k[L>>2]|0)+60>>2]&511](L,k[i>>2]|0)|0)ad[k[(k[L>>2]|0)+32>>2]&63](L,a,b,c,d,e,f);J=J+1|0}while((J|0)<(bL(b)|0))}c:do if(AY()|0){b=o+56|0;J=o+4|0;k[o>>2]=27524;k[b>>2]=27544;B=0;wa(508,o+56|0,J|0);f=B;B=0;if(f&1){f=Rb()|0;O=Q;P=f;vva(b);Qb(P|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[b>>2]=27488;B=0;va(448,J|0);f=B;B=0;do if(f&1){d=Rb()|0;R=Q;S=d}else{k[J>>2]=27560;d=o+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[o+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,J|0,h|0);c=B;B=0;if(c&1){c=Rb()|0;i=Q;Yua(h);Yua(d);Ava(J);R=i;S=c;break}Yua(h);B=0;Ia(40,o|0,109488,31)|0;c=B;B=0;do if(!(c&1)?(B=0,wa(510,p|0,J|0),i=B,B=0,!(i&1)):0){B=0;ya(425,p|0)|0;i=B;B=0;if(i&1){i=Rb()|0;L=Q;Yua(p);T=L;U=i;break}else{Yua(p);k[o>>2]=27468;k[b>>2]=27488;k[J>>2]=27560;Yua(d);Ava(J);vva(b);break c}}else F=54;while(0);if((F|0)==54){c=Rb()|0;T=Q;U=c}k[o>>2]=27468;k[b>>2]=27488;k[J>>2]=27560;Yua(d);Ava(J);vva(b);G=T;H=U;Qb(H|0)}while(0);O=R;P=S;vva(b);Qb(P|0)}while(0);if((th(e)|0)>0)V=0;else{r=g;return 1}do{P=qh(e,V)|0;Fc[k[(k[P>>2]|0)+36>>2]&1023](P,a);V=V+1|0}while((V|0)<(th(e)|0));r=g;return 1}function YZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if((th(b)|0)>0)e=0;else return;do{f=qh(b,e)|0;if(ed[k[(k[f>>2]|0)+40>>2]&511](f,d)|0)nd[k[(k[f>>2]|0)+36>>2]&1023](f,a,c);e=e+1|0}while((e|0)<(th(b)|0));return}function ZZ(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{sq(qh(k[b>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function _Z(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,$=0;g=r;r=r+352|0;h=g+328|0;i=g+192|0;j=g+176|0;l=g+24|0;m=g+12|0;n=g+40|0;o=g;q=c/d;if(q!=+VEa(+q)){s=i+56|0;t=i+4|0;k[i>>2]=27524;k[s>>2]=27544;B=0;wa(508,i+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=i+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[i+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,t|0,h|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(h);Yua(x);Ava(t);y=C;z=A;break}Yua(h);B=0;A=Ia(40,i|0,109520,106)|0;C=B;B=0;a:do if(!(C&1)?(B=0,Xa(239,A|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,j|0,109627,84);E=B;B=0;do if(!(E&1)){B=0;eb(502,l|0,109712,18);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(j);H=G;I=F;break}B=0;wa(510,m|0,t|0);F=B;B=0;if(F&1){F=Rb()|0;J=Q;K=F;L=1}else{B=0;ua(163,D|0,j|0,l|0,47,m|0);F=B;B=0;if(F&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}F=Rb()|0;G=Q;Yua(m);J=G;K=F;L=M}Yua(l);Yua(j);if(L){H=J;I=K}else{N=J;O=K;break a}}else{F=Rb()|0;H=Q;I=F}while(0);zb(D|0);N=H;O=I}else P=17;while(0);if((P|0)==17){A=Rb()|0;N=Q;O=A}k[i>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=N;S=O;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}b:do if(d<.05){w=n+56|0;s=n+4|0;k[n>>2]=27524;k[w>>2]=27544;B=0;wa(508,n+56|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;T=Q;U=z;vva(w);Qb(U|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[w>>2]=27488;B=0;va(448,s|0);z=B;B=0;do if(z&1){y=Rb()|0;V=Q;W=y}else{k[s>>2]=27560;y=n+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,s|0,h|0);v=B;B=0;if(v&1){v=Rb()|0;O=Q;Yua(h);Yua(y);Ava(s);V=O;W=v;break}Yua(h);B=0;Ia(40,n|0,109731,48)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,o|0,s|0),O=B,B=0,!(O&1)):0){B=0;ya(424,o|0)|0;O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(o);X=N;Y=O;break}else{Yua(o);k[n>>2]=27468;k[w>>2]=27488;k[s>>2]=27560;Yua(y);Ava(s);vva(w);break b}}else P=38;while(0);if((P|0)==38){v=Rb()|0;X=Q;Y=v}k[n>>2]=27468;k[w>>2]=27488;k[s>>2]=27560;Yua(y);Ava(s);vva(w);R=X;S=Y;Qb(S|0)}while(0);T=V;U=W;vva(w);Qb(U|0)}while(0);U=~~q;W=Rqa(U>>>0>536870911?-1:U<<3)|0;V=(U|0)>0;if(V){T=0;do{p[W+(T<<3)>>3]=d;T=T+1|0}while((T|0)!=(U|0))}if(c<e){q=d;T=0;Z=c;while(1){q=q*f;Z=Z+q;S=T+1|0;if(!(Z<e)){_=S;break}else T=S}}else _=0;T=Rqa(_>>>0>536870911?-1:_<<3)|0;if((_|0)!=0?(WEa(T|0,0,_<<3|0)|0,S=(_|0)>0,S):0){e=d;Y=0;do{e=e*f;p[T+(Y<<3)>>3]=e;Y=Y+1|0}while((Y|0)!=(_|0));$=S}else $=0;S=_+U|0;Y=Rqa(S>>>0>536870911?-1:S<<3)|0;if(V)TEa(Y|0,W|0,U<<3|0)|0;if(!$){Tqa(W);Tqa(T);k[a>>2]=Y;k[b>>2]=S;r=g;return}TEa(Y+(U<<3)|0,T|0,_<<3|0)|0;Tqa(W);Tqa(T);k[a>>2]=Y;k[b>>2]=S;r=g;return}function $Z(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;d=a+-273.15;if(d>-6.0)e=d/-6.0*.3+.7;else e=0.0;if(d<=-6.0&d>-22.0)f=1.0-(d+6.0)*-.0625*.8;else f=e;if(d<=-22.0&d>-40.0)g=.2-(d+22.0)/-18.0*.2;else g=f;if(b>=150.0&b<400.0)h=1.0-(b+-150.0)/250.0;else h=b<150.0?1.0:0.0;if(c>=.16&c<.25)i=(c+-.16)/.09*.1;else i=0.0;if(c>=.25&c<.4)j=(c+-.25)/.15*.57+.1;else j=i;if(c>=.4&c<.5)k=(c+-.4)/.1*.23+.67;else k=j;if(!(c>=.5&c<.7)){l=k;m=!(c>=.7);n=m?l:1.0;o=g*h;p=o*n;q=p*.09;return +q}l=(c+-.5)/.2*.1+.9;m=!(c>=.7);n=m?l:1.0;o=g*h;p=o*n;q=p*.09;return +q}function a_(a,b,c,d,e,f,g,h,i,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;j=j|0;l=l|0;var m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0;m=r;r=r+176|0;n=m+152|0;o=m+16|0;q=m;a:do if((l|0)==0&(GY()|0)?(vY()|0)==0:0){s=o+56|0;t=o+4|0;k[o>>2]=27524;k[s>>2]=27544;B=0;wa(508,o+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=o+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[o+52>>2]=16;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;B=0;wa(509,t|0,n|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(n);Yua(x);Ava(t);y=C;z=A;break}Yua(n);B=0;Ia(40,o|0,109780,23)|0;A=B;B=0;if(!(A&1)?(B=0,wa(510,q|0,t|0),A=B,B=0,!(A&1)):0){B=0;ya(425,q|0)|0;A=B;B=0;if(!(A&1)){Yua(q);k[o>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);break a}A=Rb()|0;C=Q;Yua(q);D=A;E=C;k[o>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(D|0)}C=Rb()|0;D=C;E=Q;k[o>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(D|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}while(0);if((j+-1|0)>>>0>1){r=m;return}j=i>>>0>536870911?-1:i<<3;w=Rqa(j)|0;z=(i|0)>0;if(z){y=0;do{p[w+(y<<3)>>3]=+p[a+(y<<3)>>3]*2.0;y=y+1|0}while((y|0)!=(i|0));F=h/86400.0;y=Rqa(j)|0;if(z){v=0;do{p[y+(v<<3)>>3]=+p[g+(v<<3)>>3]/(+p[f+(v<<3)>>3]*+p[e+(v<<3)>>3])*100.0;v=v+1|0}while((v|0)!=(i|0));if(z){v=0;do{D=y+(v<<3)|0;if(+p[D>>3]>9.0)p[D>>3]=9.0;v=v+1|0}while((v|0)!=(i|0));G=F;H=y;I=y}else{G=F;H=y;I=y}}else{G=F;H=y;I=y}}else{y=Rqa(j)|0;G=h/86400.0;H=y;I=y}y=Rqa(j)|0;if(!i)J=Rqa(j)|0;else{v=i<<3;WEa(y|0,0,v|0)|0;D=Rqa(j)|0;WEa(D|0,0,v|0)|0;J=D}if(z){D=0;v=1;while(1){j=J+(D<<3)|0;h=+p[j>>3];o=0;while(1){F=+p[e+(o<<3)>>3]+h;o=o+1|0;if((o|0)==(v|0)){K=F;break}else h=F}p[j>>3]=K-+p[e+(D<<3)>>3]*.5;D=D+1|0;if((D|0)==(i|0))break;else v=v+1|0}}K=+p[d>>3];h=+p[J>>3];p[y>>3]=(+p[d+8>>3]-K)/(+p[J+8>>3]-h);v=i+-1|0;D=i+-2|0;p[y+(v<<3)>>3]=(+p[d+(v<<3)>>3]-+p[d+(D<<3)>>3])/(+p[J+(v<<3)>>3]-+p[J+(D<<3)>>3]);if((v|0)>1?(p[y+8>>3]=(+p[d+16>>3]-K)/(+p[J+16>>3]-h),(v|0)!=2):0){D=2;e=1;while(1){o=D+1|0;p[y+(D<<3)>>3]=(+p[d+(o<<3)>>3]-+p[d+(e<<3)>>3])/(+p[J+(o<<3)>>3]-+p[J+(e<<3)>>3]);if((o|0)==(v|0))break;else{s=D;D=o;e=s}}}if(z){e=0;do{D=y+(e<<3)|0;h=+$(+(+p[D>>3]));p[D>>3]=h;e=e+1|0}while((e|0)!=(i|0));if(z){h=G*86400.0;z=0;do{e=b+(z<<3)|0;K=+p[e>>3];if(!(K>0.0)){F=G*+$Z(+p[d+(z<<3)>>3],+p[f+(z<<3)>>3],+p[y+(z<<3)>>3]);D=w+(z<<3)|0;L=+p[D>>3]+F;p[D>>3]=L;if(+p[g+(z<<3)>>3]>0.0){F=+ba(+((+ba(+(L*.5),3.0)*4.1887902047863905+(h*(+ba(+(+p[I+(z<<3)>>3]),3.0)*4.22e-10)+1.28e-08))*.238732414637843),.3333333333333333)*2.0;p[D>>3]=F;M=F}else M=L;L=+p[c+(z<<3)>>3];if(L==1.0&M>2.0){p[D>>3]=2.0;N=2.0}else N=M;if(L!=1.0&N>5.0){p[D>>3]=5.0;O=5.0}else O=N}else{L=+p[y+(z<<3)>>3];F=+ja(+(-6.0e3/+p[d+(z<<3)>>3]));P=G*(F*-2.0e8);if(L<5.0){p[e>>3]=K+P;D=c+(z<<3)|0;R=G*(F*1.0e9)+ +p[D>>3];p[D>>3]=R;S=R}else{R=P*+ba(+L,.4);p[e>>3]=K+R;D=c+(z<<3)|0;K=R+ +p[D>>3];p[D>>3]=K;S=K}if(+p[g+(z<<3)>>3]>0.0){K=G*(+ba(+(+p[I+(z<<3)>>3]),3.0)*.0625);p[e>>3]=+p[e>>3]-K;D=c+(z<<3)|0;R=K+ +p[D>>3];p[D>>3]=R;T=R}else T=S;R=+p[e>>3];if(R<0.0){p[e>>3]=0.0;D=c+(z<<3)|0;U=D;V=+p[D>>3];W=0.0}else{U=c+(z<<3)|0;V=T;W=R}if(V<0.0){p[U>>3]=0.0;X=+p[e>>3]}else X=W;if(X>1.0){p[e>>3]=1.0;Y=1.0}else Y=X;R=+p[U>>3];if(R>1.0){p[U>>3]=1.0;Z=+p[e>>3];_=1.0}else{Z=Y;_=R}R=(1.0-Z)*.25+.1+(.5-_)*.1;p[w+(z<<3)>>3]=R;O=R}p[a+(z<<3)>>3]=O*.5;z=z+1|0}while((z|0)!=(i|0))}}Tqa(w);Tqa(y);Tqa(J);Tqa(H);r=m;return}function b_(a,b,c,d,e,f,g,h,i,j,l,m,n,o,q,s,u){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;l=+l;m=+m;n=+n;o=+o;q=+q;s=s|0;u=u|0;var v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ka=0.0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0;v=r;r=r+816|0;w=v+792|0;x=v+632|0;y=v+780|0;z=v+472|0;A=v+768|0;C=v+620|0;D=v+608|0;E=v+336|0;F=v+184|0;H=v+200|0;I=v+36|0;J=v+48|0;K=v+24|0;L=v+12|0;M=v;a:do if((u|0)==0&(GY()|0)?(vY()|0)==0:0){N=x+56|0;O=x+4|0;k[x>>2]=27524;k[N>>2]=27544;B=0;wa(508,x+56|0,O|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(N);Qb(S|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[O>>2]=27560;T=x+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[x+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,O|0,w|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(w);Yua(T);Ava(O);U=X;V=W;break}Yua(w);B=0;Ia(40,x|0,109804,17)|0;W=B;B=0;do if(!(W&1)?(B=0,wa(510,y|0,O|0),X=B,B=0,!(X&1)):0){B=0;ya(425,y|0)|0;X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(y);Z=Y;_=X;break}else{Yua(y);k[x>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N);break a}}else ca=15;while(0);if((ca|0)==15){W=Rb()|0;Z=Q;_=W}k[x>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N);da=_;ea=Z;Qb(da|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}while(0);switch(b|0){case 1:{fa=1.48-+ba(+(3.0/(+p[c>>3]*.091)),-.07);p[a>>3]=fa;ga=fa;break}case 2:{fa=+p[c>>3]*2.0/1.0e3;ha=+$(+(+aa(+fa)));ia=fa==-G?G:ha;ha=+jsa(.98,1.0-ia*1.58);ka=ha*.606+ +isa(0.0,.95-ia*15.4)*.301+ +isa(.127,fa*346.3+.88-ia*32.31)*.093;p[a>>3]=ka;ga=ka;break}case 3:{ka=(e+-.5)*.05+(f-(g-f)*(+p[d>>3]+-910.0)/610.0);p[a>>3]=ka;ga=ka;break}case 4:{ka=q/86400.0;d=s>>>0>536870911?-1:s<<3;c=Rqa(d)|0;b=Rqa(d)|0;S=Rqa(d)|0;V=Rqa(d)|0;d=(s|0)>0;if(d){U=0;do{if(+p[i+(U<<3)>>3]>0.0)p[c+(U<<3)>>3]=m;U=U+1|0}while((U|0)!=(s|0));if(d){U=0;do{p[b+(U<<3)>>3]=+p[h+(U<<3)>>3]+-273.15;U=U+1|0}while((U|0)!=(s|0));if(d){U=0;do{m=+$(+(+p[b+(U<<3)>>3]))*o+n;p[S+(U<<3)>>3]=m;U=U+1|0}while((U|0)!=(s|0));if(d){U=0;do{if(+p[i+(U<<3)>>3]==0.0?+p[b+(U<<3)>>3]>=-10.0:0)p[c+(U<<3)>>3]=+p[S+(U<<3)>>3];U=U+1|0}while((U|0)!=(s|0));if(d){m=o*10.0+n;U=0;do{if(+p[b+(U<<3)>>3]<-10.0)p[c+(U<<3)>>3]=m;U=U+1|0}while((U|0)!=(s|0));if(d){U=0;do{p[V+(U<<3)>>3]=ka*((+p[a+(U<<3)>>3]-f)/+p[c+(U<<3)>>3]);U=U+1|0}while((U|0)!=(s|0));if(d){d=0;do{U=a+(d<<3)|0;p[U>>3]=+p[U>>3]-+p[V+(d<<3)>>3];d=d+1|0}while((d|0)!=(s|0))}}}}}}}if(l>0.0?+p[b>>3]<0.0:0)la=l/300.0*1.0e3+j;else la=j;j=g-(g-+p[a>>3])*+ja(+(-la/15.0));p[a>>3]=j;Tqa(c);Tqa(b);Tqa(S);Tqa(V);ga=+p[a>>3];break}default:{a=z+56|0;V=z+4|0;k[z>>2]=27524;k[a>>2]=27544;B=0;wa(508,z+56|0,V|0);S=B;B=0;if(S&1){S=Rb()|0;ma=Q;na=S;vva(a);Qb(na|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[a>>2]=27488;B=0;va(448,V|0);S=B;B=0;do if(S&1){b=Rb()|0;oa=Q;pa=b}else{k[V>>2]=27560;b=z+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[z+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,V|0,w|0);c=B;B=0;if(c&1){c=Rb()|0;s=Q;Yua(w);Yua(b);Ava(V);oa=s;pa=c;break}Yua(w);B=0;c=Ia(40,z|0,109822,46)|0;s=B;B=0;b:do if(!(s&1)?(B=0,Xa(239,c|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,A|0,109627,84);U=B;B=0;do if(!(U&1)){B=0;eb(502,C|0,109869,6);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Yua(A);qa=i;ra=h;break}B=0;wa(510,D|0,V|0);h=B;B=0;if(h&1){h=Rb()|0;sa=Q;ta=1;xa=h}else{B=0;ua(163,d|0,A|0,C|0,449,D|0);h=B;B=0;if(h&1)za=1;else{B=0;eb(503,d|0,1240,229);B=0;za=0}h=Rb()|0;i=Q;Yua(D);sa=i;ta=za;xa=h}Yua(C);Yua(A);if(ta){qa=xa;ra=sa}else{Aa=xa;Ba=sa;break b}}else{h=Rb()|0;qa=h;ra=Q}while(0);zb(d|0);Aa=qa;Ba=ra}else ca=63;while(0);if((ca|0)==63){c=Rb()|0;Aa=c;Ba=Q}k[z>>2]=27468;k[a>>2]=27488;k[V>>2]=27560;Yua(b);Ava(V);vva(a);da=Aa;ea=Ba;Qb(da|0)}while(0);ma=oa;na=pa;vva(a);Qb(na|0)}}if(ga>1.0){na=E+56|0;a=E+4|0;k[E>>2]=27524;k[na>>2]=27544;B=0;wa(508,E+56|0,a|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Ca=Q;Da=pa;vva(na);Qb(Da|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[na>>2]=27488;B=0;va(448,a|0);pa=B;B=0;do if(pa&1){oa=Rb()|0;Ea=Q;Fa=oa}else{k[a>>2]=27560;oa=E+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[E+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,a|0,w|0);ma=B;B=0;if(ma&1){ma=Rb()|0;Ba=Q;Yua(w);Yua(oa);Ava(a);Ea=Ba;Fa=ma;break}Yua(w);B=0;Ia(40,E|0,109876,13)|0;ma=B;B=0;do if(!(ma&1)?(B=0,wa(510,F|0,a|0),Ba=B,B=0,!(Ba&1)):0){B=0;ya(424,F|0)|0;Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Aa=Q;Yua(F);Ga=Ba;Ha=Aa;break}Yua(F);k[E>>2]=27468;k[na>>2]=27488;k[a>>2]=27560;Yua(oa);Ava(a);vva(na);r=v;return}else ca=84;while(0);if((ca|0)==84){ma=Rb()|0;Ga=ma;Ha=Q}k[E>>2]=27468;k[na>>2]=27488;k[a>>2]=27560;Yua(oa);Ava(a);vva(na);da=Ga;ea=Ha;Qb(da|0)}while(0);Ca=Ea;Da=Fa;vva(na);Qb(Da|0)}if(ga<0.0){Da=H+56|0;na=H+4|0;k[H>>2]=27524;k[Da>>2]=27544;B=0;wa(508,H+56|0,na|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ja=Q;Ka=Fa;vva(Da);Qb(Ka|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[Da>>2]=27488;B=0;va(448,na|0);Fa=B;B=0;do if(Fa&1){Ea=Rb()|0;La=Q;Ma=Ea}else{k[na>>2]=27560;Ea=H+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[H+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,na|0,w|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ha=Q;Yua(w);Yua(Ea);Ava(na);La=Ha;Ma=Ca;break}Yua(w);B=0;Ia(40,H|0,109890,19)|0;Ca=B;B=0;do if(!(Ca&1)?(B=0,wa(510,I|0,na|0),Ha=B,B=0,!(Ha&1)):0){B=0;ya(424,I|0)|0;Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ga=Q;Yua(I);Na=Ha;Oa=Ga;break}Yua(I);k[H>>2]=27468;k[Da>>2]=27488;k[na>>2]=27560;Yua(Ea);Ava(na);vva(Da);r=v;return}else ca=100;while(0);if((ca|0)==100){Ca=Rb()|0;Na=Ca;Oa=Q}k[H>>2]=27468;k[Da>>2]=27488;k[na>>2]=27560;Yua(Ea);Ava(na);vva(Da);da=Na;ea=Oa;Qb(da|0)}while(0);Ja=La;Ka=Ma;vva(Da);Qb(Ka|0)}j=+$(+ga);p[t>>3]=j;Ka=k[t+4>>2]|0;if(!(Ka>>>0>2146435072|(Ka|0)==2146435072&(k[t>>2]|0)>>>0>0)){r=v;return}v=J+56|0;Ka=J+4|0;k[J>>2]=27524;k[v>>2]=27544;B=0;wa(508,J+56|0,Ka|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Pa=Q;Qa=Da;vva(v);Qb(Qa|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[v>>2]=27488;B=0;va(448,Ka|0);Da=B;B=0;do if(Da&1){Ma=Rb()|0;Ra=Q;Sa=Ma}else{k[Ka>>2]=27560;Ma=J+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[J+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,Ka|0,w|0);La=B;B=0;if(La&1){La=Rb()|0;Ja=Q;Yua(w);Yua(Ma);Ava(Ka);Ra=Ja;Sa=La;break}Yua(w);B=0;La=Ia(40,J|0,109910,14)|0;Ja=B;B=0;c:do if(!(Ja&1)?(B=0,Xa(239,La|0,0)|0,Oa=B,B=0,!(Oa&1)):0){Oa=Ab(20)|0;B=0;eb(502,K|0,109627,84);Na=B;B=0;do if(!(Na&1)){B=0;eb(502,L|0,109869,6);na=B;B=0;if(na&1){na=Rb()|0;H=Q;Yua(K);Ta=H;Ua=na;break}B=0;wa(510,M|0,Ka|0);na=B;B=0;if(na&1){na=Rb()|0;Va=1;Wa=na;Ya=Q}else{B=0;ua(163,Oa|0,K|0,L|0,454,M|0);na=B;B=0;if(na&1)Za=1;else{B=0;eb(503,Oa|0,1240,229);B=0;Za=0}na=Rb()|0;H=Q;Yua(M);Va=Za;Wa=na;Ya=H}Yua(L);Yua(K);if(Va){Ta=Ya;Ua=Wa}else{_a=Wa;$a=Ya;break c}}else{H=Rb()|0;Ta=Q;Ua=H}while(0);zb(Oa|0);_a=Ua;$a=Ta}else ca=119;while(0);if((ca|0)==119){La=Rb()|0;_a=La;$a=Q}k[J>>2]=27468;k[v>>2]=27488;k[Ka>>2]=27560;Yua(Ma);Ava(Ka);vva(v);da=_a;ea=$a;Qb(da|0)}while(0);Pa=Ra;Qa=Sa;vva(v);Qb(Qa|0)}function c_(a,b,c,d,e,f,g,h,i,j,l,m,n,o,q,s){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=+i;j=+j;l=+l;m=+m;n=n|0;o=+o;q=+q;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0.0,_=0,$=0,aa=0.0,ca=0.0,da=0.0,ea=0,fa=0;t=r;r=r+176|0;u=t+152|0;v=t+16|0;w=t;a:do if((s|0)==0&(GY()|0)?(vY()|0)==0:0){x=v+56|0;y=v+4|0;k[v>>2]=27524;k[x>>2]=27544;B=0;wa(508,v+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=v+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[v+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,y|0,u|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(u);Yua(D);Ava(y);E=H;F=G;break}Yua(u);B=0;Ia(40,v|0,109925,18)|0;G=B;B=0;if(!(G&1)?(B=0,wa(510,w|0,y|0),G=B,B=0,!(G&1)):0){B=0;ya(425,w|0)|0;G=B;B=0;if(!(G&1)){Yua(w);k[v>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);break a}G=Rb()|0;H=Q;Yua(w);I=H;J=G;k[v>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);Qb(J|0)}G=Rb()|0;I=Q;J=G;k[v>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);Qb(J|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}while(0);K=+p[d>>3];L=+p[c>>3];M=K*L*2102.0;N=l==0.0&K<910.0?.00012:!(K>=910.0)?.0013:.0032;l=h<.01?.01:h;h=+ka(+(q/N));q=l*(j*.029/(g*8.314)*(.16000000000000003/(h*h)));C=n>>>0>536870911?-1:n<<3;F=Rqa(C)|0;b:do if((n|0)!=0?(WEa(F|0,0,n<<3|0)|0,E=(n|0)>0,E):0){h=K;A=0;while(1){if(h<910.0)p[F+(A<<3)>>3]=.138-h*.00101+h*h*3.233e-06;J=A+1|0;if((J|0)==(n|0))break;h=+p[d+(J<<3)>>3];A=J}if(E){h=K;A=0;while(1){if(h>=910.0){O=+ja(+(+p[b+(A<<3)>>3]*-.0057))*9.828;p[F+(A<<3)>>3]=O}x=A+1|0;if((x|0)==(n|0)){P=1;break b}h=+p[d+(x<<3)>>3];A=x}}else P=0}else P=0;while(0);A=Rqa(C)|0;E=Rqa(C)|0;x=Rqa(C)|0;p[A>>3]=-9999.0;J=n+-1|0;p[E+(J<<3)>>3]=-9999.0;v=(n|0)>1;if(v){TEa(A+8|0,F|0,(n<<3)+-8|0)|0;TEa(E|0,F+8|0,(n<<3)+-8|0)|0}if(P)TEa(x|0,F|0,n<<3|0)|0;I=Rqa(C)|0;w=Rqa(C)|0;p[I>>3]=-9999.0;p[w+(J<<3)>>3]=-9999.0;if(v){TEa(I+8|0,c|0,(n<<3)+-8|0)|0;TEa(w|0,c+8|0,(n<<3)+-8|0)|0}if(P){h=+jsa(1.0e12,K*(L*L*2102.0)/(+p[F>>3]*3.0));if((n|0)==1)R=h;else{O=h;v=1;while(1){h=+p[c+(v<<3)>>3];S=+jsa(O,+p[d+(v<<3)>>3]*(h*h*2102.0)/(+p[F+(v<<3)>>3]*3.0));v=v+1|0;if((v|0)==(n|0)){R=S;break}else O=S}}}else R=1.0e12;v=0;O=1.0;while(1){S=+(k[36588+(v<<2)>>2]|0);h=!(S<R)|!(S>=O)?O:S;v=v+1|0;if((v|0)==45){T=h;break}else O=h}v=Rqa(C)|0;u=Rqa(C)|0;s=Rqa(C)|0;c:do if(P){O=-9999.0;R=L;h=-9999.0;S=K;y=0;while(1){U=+p[x+(y<<3)>>3];V=R*.5;p[v+(y<<3)>>3]=1.0/(O*.5/U+V/h);p[u+(y<<3)>>3]=1.0/(+p[w+(y<<3)>>3]*.5/U+V/+p[E+(y<<3)>>3]);p[s+(y<<3)>>3]=S*R*2102.0/T;z=y+1|0;if((z|0)==(n|0))break c;O=+p[I+(z<<3)>>3];R=+p[c+(z<<3)>>3];h=+p[A+(z<<3)>>3];S=+p[d+(z<<3)>>3];y=z}}while(0);y=Rqa(C)|0;z=Rqa(C)|0;D=Rqa(C)|0;if(P){G=0;do{S=+p[s+(G<<3)>>3];h=+p[v+(G<<3)>>3]/S;p[y+(G<<3)>>3]=h;R=+p[u+(G<<3)>>3]/S;p[z+(G<<3)>>3]=R;p[D+(G<<3)>>3]=1.0-h-R;G=G+1|0}while((G|0)!=(n|0));W=+p[z>>3]}else W=0.0;p[y+(J<<3)>>3]=0.0;p[D+(J<<3)>>3]=1.0;p[D>>3]=1.0-W;p[y>>3]=0.0;p[z+(J<<3)>>3]=0.0;J=Rqa(C)|0;if(P){G=0;do{p[J+(G<<3)>>3]=T*+p[e+(G<<3)>>3];G=G+1|0}while((G|0)!=(n|0));G=Rqa(C)|0;if(P?(p[G>>3]=+p[J>>3]/(K*2102.0*L),(n|0)!=1):0){e=1;do{p[G+(e<<3)>>3]=+p[J+(e<<3)>>3]/(+p[d+(e<<3)>>3]*2102.0*+p[c+(e<<3)>>3]);e=e+1|0}while((e|0)!=(n|0));X=G;Y=G}else{X=G;Y=G}}else{G=Rqa(C)|0;X=G;Y=G}L=T*f/M;G=n+2|0;e=Rqa(G>>>0>536870911?-1:G<<3)|0;if(G)WEa(e|0,0,G<<3|0)|0;G=Rqa(C)|0;c=Rqa(C)|0;if(!(m>=1.0)){Z=0.0;Tqa(F);Tqa(A);Tqa(E);Tqa(x);Tqa(v);Tqa(u);Tqa(s);Tqa(y);Tqa(z);Tqa(D);Tqa(I);Tqa(w);Tqa(J);Tqa(X);Tqa(e);Tqa(G);Tqa(c);p[a>>3]=Z;r=t;return}C=b+8|0;f=(o-N)*19.62;N=l*l;l=q*1005.0;d=e+8|0;H=n<<3;_=e+16|0;$=(n|0)==1;o=0.0;K=1.0;while(1){W=+p[b>>3];R=+jsa(273.15,(W+ +p[C>>3])*.5);h=g-R;S=+jsa(f*h/(N*(R+g)),.19);if(S>0.0)aa=1.0/(1.0-S*5.2);else aa=+ba(+(1.0-S*18.0),-.25);O=aa*(S<-.03?aa*1.3:aa);if(!(R>=273.15)){ca=2829500.0;da=+ja(+((R+-273.15)*17.502/(R+240.97+-273.15)))*611.21}else{ca=2495.0e3;da=+ja(+(9.550426-5723.265/R+ +ka(+R)*3.53068-R*.00728332))}S=(i-da)*(q*ca)*.622/j/O;V=S*86400.0/ca;U=T*(l*h/O+S)/M;S=T*(+ba(+R,4.0)*-5.67e-08)/M;d:do if(P){p[b>>3]=W+ +p[Y>>3];if(!$){ea=1;do{p[b+(ea<<3)>>3]=+p[b+(ea<<3)>>3]+ +p[Y+(ea<<3)>>3];ea=ea+1|0}while((ea|0)!=(n|0))}R=U+(S+(L+ +p[b>>3]));p[b>>3]=R;if(P){TEa(d|0,b|0,H|0)|0;TEa(G|0,e|0,H|0)|0;TEa(c|0,_|0,H|0)|0;O=R;ea=0;while(1){p[b+(ea<<3)>>3]=+p[D+(ea<<3)>>3]*O+ +p[y+(ea<<3)>>3]*+p[G+(ea<<3)>>3]+ +p[z+(ea<<3)>>3]*+p[c+(ea<<3)>>3];fa=ea+1|0;if((fa|0)==(n|0))break d;O=+p[b+(fa<<3)>>3];ea=fa}}}else p[b>>3]=U+(S+(L+W));while(0);W=o+T*(V/86400.0);K=T+K;if(!(K<=m)){Z=W;break}else o=W}Tqa(F);Tqa(A);Tqa(E);Tqa(x);Tqa(v);Tqa(u);Tqa(s);Tqa(y);Tqa(z);Tqa(D);Tqa(I);Tqa(w);Tqa(J);Tqa(X);Tqa(e);Tqa(G);Tqa(c);p[a>>3]=Z;r=t;return}function d_(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0.0,F=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0;l=r;r=r+176|0;m=l+152|0;n=l+16|0;o=l;a:do if((j|0)==0&(GY()|0)?(vY()|0)==0:0){q=n+56|0;s=n+4|0;k[n>>2]=27524;k[q>>2]=27544;B=0;wa(508,n+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=n+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[n+52>>2]=16;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;B=0;wa(509,s|0,m|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(m);Yua(w);Ava(s);x=A;y=z;break}Yua(m);B=0;Ia(40,n|0,109944,20)|0;z=B;B=0;if(!(z&1)?(B=0,wa(510,o|0,s|0),z=B,B=0,!(z&1)):0){B=0;ya(425,o|0)|0;z=B;B=0;if(!(z&1)){Yua(o);k[n>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);break a}z=Rb()|0;A=Q;Yua(o);C=z;D=A;k[n>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(C|0)}A=Rb()|0;C=A;D=Q;k[n>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(C|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}while(0);v=i>>>0>536870911?-1:i<<3;y=Rqa(v)|0;if(i)WEa(y|0,0,i<<3|0)|0;if(!b){p[y>>3]=(1.0-e)*d;k[a>>2]=y;r=l;return}if((c|0)!=2){E=1.0-e;e=E*.36*d;F=E*.64*d;c=Rqa(v)|0;b=(i|0)>0;if(b){x=0;do{p[c+(x<<3)>>3]=(300.0-+p[f+(x<<3)>>3])*.014262295081967212+10.0;x=x+1|0}while((x|0)!=(i|0))}x=i+1|0;u=x>>>0>536870911?-1:x<<3;C=Rqa(u)|0;n=Rqa(v)|0;if(b){D=0;do{E=+ja(+-(+p[c+(D<<3)>>3]*+p[g+(D<<3)>>3]));p[n+(D<<3)>>3]=E;D=D+1|0}while((D|0)!=(i|0));p[C>>3]=1.0;if(b){E=+p[n>>3];D=0;o=1;while(1){if((D|0)<1)H=E;else{I=E;m=1;while(1){J=I*+p[n+(m<<3)>>3];m=m+1|0;if((m|0)==(o|0)){H=J;break}else I=J}}D=D+1|0;p[C+(D<<3)>>3]=H;if((D|0)==(i|0))break;else o=o+1|0}}}else p[C>>3]=1.0;o=Rqa(u)|0;if((i|0)>=0){u=0;do{p[o+(u<<3)>>3]=F*+p[C+(u<<3)>>3];u=u+1|0}while((u|0)!=(x|0))}if(b){F=+p[o>>3];b=0;do{x=b;b=b+1|0;H=F;F=+p[o+(b<<3)>>3];p[y+(x<<3)>>3]=H-F}while((b|0)!=(i|0))}p[y>>3]=e+ +p[y>>3];Tqa(C);Tqa(n);Tqa(o);Tqa(c);k[a>>2]=y;r=l;return}c=Rqa(v)|0;o=(i|0)>0;if(o){n=0;do{p[c+(n<<3)>>3]=+p[h+(n<<3)>>3]*2.0/1.0e3;n=n+1|0}while((n|0)!=(i|0))}n=i+1|0;h=n>>>0>536870911?-1:n<<3;C=Rqa(h)|0;b=Rqa(h)|0;x=(i|0)<0;if(!x){u=0;do{p[C+(u<<3)>>3]=1.0;p[b+(u<<3)>>3]=1.0;u=u+1|0}while((u|0)!=(n|0))}e=+p[c>>3];F=+$(+(+aa(+e)));u=e==-G;H=u?G:F;E=+jsa(.98,1.0-H*1.58);I=+isa(0.0,.95-H*15.4);H=d*.606*(1.0-E);E=d*.301*(1.0-I);I=d*.093*(1.0-+isa(.127,e*346.3+.88-(u?G:F*32.31)));u=Rqa(v)|0;D=Rqa(v)|0;m=Rqa(v)|0;if(o){F=+$(+(+aa(+e)));p[u>>3]=+p[f>>3]/(e==-G?G:F);if((i|0)!=1){q=1;do{F=+p[c+(q<<3)>>3];e=+$(+(+aa(+F)));p[u+(q<<3)>>3]=+p[f+(q<<3)>>3]/(F==-G?G:e);q=q+1|0}while((q|0)!=(i|0))}if(o){q=0;do{p[D+(q<<3)>>3]=+p[u+(q<<3)>>3]*.0192;q=q+1|0}while((q|0)!=(i|0));if(o){q=0;do{p[m+(q<<3)>>3]=+p[u+(q<<3)>>3]*.1098;q=q+1|0}while((q|0)!=(i|0))}}}q=Rqa(v)|0;f=Rqa(v)|0;if(o){v=0;do{e=+ja(+-(+p[D+(v<<3)>>3]*+p[g+(v<<3)>>3]));p[q+(v<<3)>>3]=e;v=v+1|0}while((v|0)!=(i|0));if(o){v=0;do{e=+ja(+-(+p[m+(v<<3)>>3]*+p[g+(v<<3)>>3]));p[f+(v<<3)>>3]=e;v=v+1|0}while((v|0)!=(i|0));if(o){e=+p[q>>3];F=+p[f>>3];v=0;g=1;while(1){if((v|0)<1){K=e;L=F}else{d=e;J=F;j=1;while(1){M=d*+p[q+(j<<3)>>3];N=J*+p[f+(j<<3)>>3];j=j+1|0;if((j|0)==(g|0)){K=M;L=N;break}else{d=M;J=N}}}v=v+1|0;p[C+(v<<3)>>3]=K;p[b+(v<<3)>>3]=L;if((v|0)==(i|0))break;else g=g+1|0}}}}g=Rqa(h)|0;v=Rqa(h)|0;if(!x){x=0;do{p[g+(x<<3)>>3]=H*+p[C+(x<<3)>>3];p[v+(x<<3)>>3]=E*+p[b+(x<<3)>>3];x=x+1|0}while((x|0)!=(n|0))}if(o){E=+p[g>>3];H=+p[v>>3];o=0;do{n=o;o=o+1|0;L=E;E=+p[g+(o<<3)>>3];K=H;H=+p[v+(o<<3)>>3];p[y+(n<<3)>>3]=L-E+(K-H)}while((o|0)!=(i|0))}p[y>>3]=I+ +p[y>>3];Tqa(c);Tqa(C);Tqa(b);Tqa(u);Tqa(D);Tqa(m);Tqa(q);Tqa(f);Tqa(g);Tqa(v);k[a>>2]=y;r=l;return}function e_(a,b,c,d,e,f,g,h,i,j,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;l=+l;m=+m;n=+n;o=o|0;var q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0;q=r;r=r+384|0;s=q+360|0;t=q+356|0;u=q+352|0;v=q+348|0;w=q+344|0;x=q+340|0;y=q+336|0;z=q+332|0;A=q+328|0;C=q+192|0;D=q+176|0;E=q+40|0;F=q+24|0;G=q+12|0;H=q;k[t>>2]=0;k[u>>2]=0;k[v>>2]=0;k[w>>2]=0;k[x>>2]=0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;a:do if((o|0)==0&(GY()|0)?(vY()|0)==0:0){I=C+56|0;J=C+4|0;k[C>>2]=27524;k[I>>2]=27544;B=0;wa(508,C+56|0,J|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;M=K;vva(I);Qb(M|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);K=B;B=0;do if(K&1){N=Rb()|0;O=Q;P=N}else{k[J>>2]=27560;N=C+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[C+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,J|0,s|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(s);Yua(N);Ava(J);O=S;P=R;break}Yua(s);B=0;Ia(40,C|0,109965,23)|0;R=B;B=0;do if(!(R&1)?(B=0,wa(510,D|0,J|0),S=B,B=0,!(S&1)):0){B=0;ya(425,D|0)|0;S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(D);U=S;V=T;break}else{Yua(D);k[C>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);break a}}else W=15;while(0);if((W|0)==15){R=Rb()|0;U=R;V=Q}k[C>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);X=U;Y=V;Qb(X|0)}while(0);L=O;M=P;vva(I);Qb(M|0)}while(0);M=k[a>>2]|0;k[t>>2]=M;P=k[b>>2]|0;k[u>>2]=P;O=k[c>>2]|0;k[v>>2]=O;k[w>>2]=k[d>>2];L=k[e>>2]|0;k[x>>2]=L;V=k[f>>2]|0;k[y>>2]=V;U=k[g>>2]|0;k[z>>2]=U;C=k[h>>2]|0;k[A>>2]=C;D=k[i>>2]|0;o=Rqa(D>>>0>536870911?-1:D<<3)|0;J=(D|0)>0;K=O;O=P;P=M;M=L;L=V;V=U;U=C;if(J){C=0;do{p[o+(C<<3)>>3]=+p[K+(C<<3)>>3]*+p[O+(C<<3)>>3];C=C+1|0}while((C|0)!=(D|0));if(J){J=0;Z=0.0;while(1){_=Z+ +p[o+(J<<3)>>3];J=J+1|0;if((J|0)==(D|0)){$=_;break}else Z=_}}else $=0.0}else $=0.0;if(!(l>0.0)){aa=D;Tqa(o);ba=k[t>>2]|0;k[a>>2]=ba;ca=k[u>>2]|0;k[b>>2]=ca;da=k[v>>2]|0;k[c>>2]=da;ea=k[w>>2]|0;k[d>>2]=ea;fa=k[x>>2]|0;k[e>>2]=fa;ga=k[y>>2]|0;k[f>>2]=ga;ha=k[z>>2]|0;k[g>>2]=ha;ia=k[A>>2]|0;k[h>>2]=ia;k[i>>2]=aa;r=q;return}do if(!(j<=273.15)){Z=+p[o>>3];_=Z+l;p[P>>3]=((j+159.13415794481446)*l+Z*+p[P>>3])/_;Z=_/+p[O>>3];p[K>>3]=Z;if(Z>910.0){p[K>>3]=910.0;p[O>>3]=_/910.0;ja=D}else ja=D}else{_=l/150.0;if(_>m){jY(t,j,1,D);jY(u,_,1,D);jY(v,150.0,1,D);jY(w,0.0,1,D);jY(x,n,1,D);jY(y,.1,1,D);jY(z,1.0,1,D);jY(A,.5,1,D);ja=D+1|0;break}else{Z=+p[o>>3]+l;ka=_+ +p[O>>3];p[O>>3]=ka;p[K>>3]=Z/ka;p[P>>3]=(j*l+ +p[P>>3]*+p[o>>3])/Z;p[M>>3]=(l*n+ +p[M>>3]*+p[o>>3])/Z;p[L>>3]=(l*.1+ +p[L>>3]*+p[o>>3])/Z;p[V>>3]=(+p[V>>3]*+p[o>>3]+l)/Z;p[U>>3]=(l*.5+ +p[U>>3]*+p[o>>3])/Z;ja=D;break}}while(0);if((ja|0)>0){D=k[v>>2]|0;U=k[u>>2]|0;V=0;n=0.0;while(1){j=n+ +p[D+(V<<3)>>3]*+p[U+(V<<3)>>3];V=V+1|0;if((V|0)==(ja|0)){la=j;break}else n=j}}else la=0.0;if(!(+VEa(+((la-$-l)*100.0))/100.0>0.0)){aa=ja;Tqa(o);ba=k[t>>2]|0;k[a>>2]=ba;ca=k[u>>2]|0;k[b>>2]=ca;da=k[v>>2]|0;k[c>>2]=da;ea=k[w>>2]|0;k[d>>2]=ea;fa=k[x>>2]|0;k[e>>2]=fa;ga=k[y>>2]|0;k[f>>2]=ga;ha=k[z>>2]|0;k[g>>2]=ha;ia=k[A>>2]|0;k[h>>2]=ia;k[i>>2]=aa;r=q;return}q=E+56|0;aa=E+4|0;k[E>>2]=27524;k[q>>2]=27544;B=0;wa(508,E+56|0,aa|0);i=B;B=0;if(i&1){i=Rb()|0;ma=Q;na=i;vva(q);Qb(na|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[q>>2]=27488;B=0;va(448,aa|0);i=B;B=0;do if(i&1){ia=Rb()|0;oa=Q;pa=ia}else{k[aa>>2]=27560;ia=E+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[E+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,aa|0,s|0);h=B;B=0;if(h&1){h=Rb()|0;A=Q;Yua(s);Yua(ia);Ava(aa);oa=A;pa=h;break}Yua(s);B=0;h=Ia(40,E|0,109989,43)|0;A=B;B=0;b:do if(!(A&1)?(B=0,Xa(239,h|0,0)|0,ha=B,B=0,!(ha&1)):0){ha=Ab(20)|0;B=0;eb(502,F|0,109627,84);g=B;B=0;do if(!(g&1)){B=0;eb(502,G|0,110033,12);z=B;B=0;if(z&1){z=Rb()|0;ga=Q;Yua(F);qa=z;ra=ga;break}B=0;wa(510,H|0,aa|0);ga=B;B=0;if(ga&1){ga=Rb()|0;sa=1;ta=ga;xa=Q}else{B=0;ua(163,ha|0,F|0,G|0,1167,H|0);ga=B;B=0;if(ga&1)za=1;else{B=0;eb(503,ha|0,1240,229);B=0;za=0}ga=Rb()|0;z=Q;Yua(H);sa=za;ta=ga;xa=z}Yua(G);Yua(F);if(sa){qa=ta;ra=xa}else{Aa=ta;Ba=xa;break b}}else{z=Rb()|0;qa=z;ra=Q}while(0);zb(ha|0);Aa=qa;Ba=ra}else W=48;while(0);if((W|0)==48){h=Rb()|0;Aa=h;Ba=Q}k[E>>2]=27468;k[q>>2]=27488;k[aa>>2]=27560;Yua(ia);Ava(aa);vva(q);X=Aa;Y=Ba;Qb(X|0)}while(0);ma=oa;na=pa;vva(q);Qb(na|0)}function f_(a,b,c,d,e,f,g,h,i,j,l,m,n,o,q,s){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=m|0;n=+n;o=+o;q=+q;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0.0,Da=0.0,Ea=0,Fa=0,Ga=0.0,Ha=0,Ja=0,Ka=0,La=0,Ma=0.0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0.0,Ta=0,Ua=0.0,Va=0.0,Wa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0,ab=0.0,bb=0.0,cb=0.0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0.0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0.0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0;t=r;r=r+880|0;u=t+868|0;v=t+864|0;w=t+860|0;x=t+856|0;y=t+852|0;z=t+848|0;A=t+844|0;C=t+840|0;D=t+836|0;E=t+820|0;F=t+816|0;G=t+800|0;H=t+664|0;I=t+824|0;J=t+528|0;K=t+804|0;L=t+520|0;M=t+360|0;N=t+508|0;O=t+496|0;P=t+344|0;R=t+208|0;S=t+60|0;T=t+48|0;U=t+36|0;V=t+72|0;W=t+24|0;X=t+12|0;Y=t;k[v>>2]=0;k[w>>2]=0;k[x>>2]=0;k[y>>2]=k[d>>2];k[z>>2]=k[e>>2];k[A>>2]=k[f>>2];k[C>>2]=k[g>>2];k[D>>2]=k[h>>2];k[E>>2]=k[i>>2];k[F>>2]=k[j>>2];k[G>>2]=k[l>>2];Z=k[m>>2]|0;_=(s|0)==0;a:do if(_&(GY()|0)?(vY()|0)==0:0){s=H+56|0;$=H+4|0;k[H>>2]=27524;k[s>>2]=27544;B=0;wa(508,H+56|0,$|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;ca=aa;vva(s);Qb(ca|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[s>>2]=27488;B=0;va(448,$|0);aa=B;B=0;do if(aa&1){da=Rb()|0;ea=Q;fa=da}else{k[$>>2]=27560;da=H+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[H+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,$|0,u|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(u);Yua(da);Ava($);ea=ha;fa=ga;break}Yua(u);B=0;Ia(40,H|0,110046,15)|0;ga=B;B=0;do if(!(ga&1)?(B=0,wa(510,I|0,$|0),ha=B,B=0,!(ha&1)):0){B=0;ya(425,I|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(I);ja=ha;ka=ia;break}else{Yua(I);k[H>>2]=27468;k[s>>2]=27488;k[$>>2]=27560;Yua(da);Ava($);vva(s);break a}}else la=15;while(0);if((la|0)==15){ga=Rb()|0;ja=ga;ka=Q}k[H>>2]=27468;k[s>>2]=27488;k[$>>2]=27560;Yua(da);Ava($);vva(s);ma=ja;na=ka;Qb(ma|0)}while(0);ba=ea;ca=fa;vva(s);Qb(ca|0)}while(0);ca=Z>>>0>536870911?-1:Z<<3;fa=Rqa(ca)|0;ea=(Z|0)==0;if(!ea)WEa(fa|0,0,Z<<3|0)|0;ba=Rqa(ca)|0;ka=Rqa(ca)|0;ja=Rqa(ca)|0;k[v>>2]=ja;H=(Z|0)>0;if(H){I=k[A>>2]|0;$=k[z>>2]|0;aa=0;do{p[ja+(aa<<3)>>3]=+p[I+(aa<<3)>>3]*+p[$+(aa<<3)>>3];aa=aa+1|0}while((aa|0)!=(Z|0));aa=Rqa(ca)|0;k[w>>2]=aa;if(H){$=k[y>>2]|0;I=0;do{p[aa+(I<<3)>>3]=+p[ja+(I<<3)>>3]*+p[$+(I<<3)>>3]*2102.0;I=I+1|0}while((I|0)!=(Z|0));I=Rqa(ca)|0;k[x>>2]=I;$=k[C>>2]|0;if(H){ja=0;do{p[I+(ja<<3)>>3]=+p[$+(ja<<3)>>3]*908661.2999999999;ja=ja+1|0}while((ja|0)!=(Z|0));oa=$}else oa=$}else la=26}else{$=Rqa(ca)|0;k[w>>2]=$;la=26}if((la|0)==26){$=Rqa(ca)|0;k[x>>2]=$;oa=k[C>>2]|0}q=+kY(oa,Z);o=q+ +kY(k[v>>2]|0,Z);q=+kY(k[w>>2]|0,Z);pa=q+ +kY(k[x>>2]|0,Z);oa=Rqa(ca)|0;if(!ea)WEa(oa|0,0,Z<<3|0)|0;if(H){$=k[y>>2]|0;ja=0;do{q=+isa(0.0,+p[$+(ja<<3)>>3]+-273.15);p[oa+(ja<<3)>>3]=q;ja=ja+1|0}while((ja|0)!=(Z|0));if(H){ja=k[y>>2]|0;$=0;do{I=ja+($<<3)|0;p[I>>3]=+p[I>>3]-+p[oa+($<<3)>>3];$=$+1|0}while(($|0)!=(Z|0))}}b:do if(+kY(k[C>>2]|0,Z)>0.0){c:do if(_&(GY()|0)?(vY()|0)==0:0){$=J+56|0;ja=J+4|0;k[J>>2]=27524;k[$>>2]=27544;B=0;wa(508,J+56|0,ja|0);I=B;B=0;if(I&1){I=Rb()|0;qa=Q;ra=I;vva($);Qb(ra|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[$>>2]=27488;B=0;va(448,ja|0);I=B;B=0;do if(I&1){aa=Rb()|0;sa=Q;ta=aa}else{k[ja>>2]=27560;aa=J+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[J+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,ja|0,u|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ia=Q;Yua(u);Yua(aa);Ava(ja);sa=ia;ta=ga;break}Yua(u);B=0;Ia(40,J|0,110062,26)|0;ga=B;B=0;do if(!(ga&1)?(B=0,wa(510,K|0,ja|0),ia=B,B=0,!(ia&1)):0){B=0;ya(425,K|0)|0;ia=B;B=0;if(ia&1){ia=Rb()|0;ha=Q;Yua(K);xa=ia;za=ha;break}else{Yua(K);k[J>>2]=27468;k[$>>2]=27488;k[ja>>2]=27560;Yua(aa);Ava(ja);vva($);break c}}else la=55;while(0);if((la|0)==55){ga=Rb()|0;xa=ga;za=Q}k[J>>2]=27468;k[$>>2]=27488;k[ja>>2]=27560;Yua(aa);Ava(ja);vva($);ma=xa;na=za;Qb(ma|0)}while(0);qa=sa;ra=ta;vva($);Qb(ra|0)}while(0);if(H){s=k[y>>2]|0;ja=k[v>>2]|0;I=0;do{q=+isa(0.0,-((+p[s+(I<<3)>>3]+-273.15)*+p[ja+(I<<3)>>3]*2102.0)/334500.0);p[ba+(I<<3)>>3]=q;I=I+1|0}while((I|0)!=(Z|0));if(H){I=k[C>>2]|0;ja=0;do{q=+jsa(+p[ba+(ja<<3)>>3],+p[I+(ja<<3)>>3]);p[ka+(ja<<3)>>3]=q;ja=ja+1|0}while((ja|0)!=(Z|0));if(H){ja=k[C>>2]|0;I=0;do{s=ja+(I<<3)|0;p[s>>3]=+p[s>>3]-+p[ka+(I<<3)>>3];I=I+1|0}while((I|0)!=(Z|0));if(H){I=k[v>>2]|0;ja=0;do{s=I+(ja<<3)|0;p[s>>3]=+p[ka+(ja<<3)>>3]+ +p[s>>3];ja=ja+1|0}while((ja|0)!=(Z|0));if(H){ja=k[v>>2]|0;I=k[A>>2]|0;s=k[z>>2]|0;da=0;do{p[s+(da<<3)>>3]=+p[ja+(da<<3)>>3]/+p[I+(da<<3)>>3];da=da+1|0}while((da|0)!=(Z|0));if(H){da=k[y>>2]|0;I=k[v>>2]|0;ja=0;do{s=da+(ja<<3)|0;q=+p[s>>3];p[s>>3]=q+ +p[ka+(ja<<3)>>3]*((273.15-q)*2102.0+334500.0)/(+p[I+(ja<<3)>>3]*2102.0);ja=ja+1|0}while((ja|0)!=(Z|0));if(H){ja=k[z>>2]|0;I=0;do{da=ja+(I<<3)|0;if(+p[da>>3]>910.0)p[da>>3]=910.0;I=I+1|0}while((I|0)!=(Z|0));if(H){I=k[v>>2]|0;ja=k[z>>2]|0;da=k[A>>2]|0;s=0;while(1){p[da+(s<<3)>>3]=+p[I+(s<<3)>>3]/+p[ja+(s<<3)>>3];s=s+1|0;if((s|0)==(Z|0)){la=83;break b}}}}}}}}}}s=Rqa(ca)|0;Aa=s;Ba=s}else la=83;while(0);if((la|0)==83){ra=Rqa(ca)|0;if(H){ta=k[z>>2]|0;sa=k[v>>2]|0;qa=k[C>>2]|0;za=0;do{q=+p[ta+(za<<3)>>3];Ca=+isa(0.0,+p[qa+(za<<3)>>3]-(910.0-q)*.07*(+p[sa+(za<<3)>>3]/q));p[ra+(za<<3)>>3]=Ca;za=za+1|0}while((za|0)!=(Z|0));Aa=ra;Ba=ra}else{Aa=ra;Ba=ra}}if(!(+kY(oa,Z)>0.0)?!(+kY(Aa,Z)>0.0):0){Da=0.0;Ea=0;Fa=Z;Ga=0.0;Ha=0;Ja=0}else{ra=Rqa(ca)|0;if(H){za=0;do{Ca=+isa(0.0,+p[oa+(za<<3)>>3]+-159.1342);p[ra+(za<<3)>>3]=Ca;za=za+1|0}while((za|0)!=(Z|0))}if(+kY(ra,Z)>0.0){za=Rqa(ca)|0;if(H){sa=k[v>>2]|0;qa=0;do{p[za+(qa<<3)>>3]=+p[ra+(qa<<3)>>3]*2102.0/+p[sa+(qa<<3)>>3];qa=qa+1|0}while((qa|0)!=(Z|0))}if(+kY(za,Z)>0.0){qa=0;do{sa=za+(qa<<3)|0;ta=qa;qa=qa+1|0;xa=(k[v>>2]|0)+(qa<<3)|0;J=k[y>>2]|0;K=J+(qa<<3)|0;Ca=+p[sa>>3]*+p[xa>>3]/2102.0+ +p[K>>3];p[K>>3]=Ca;q=+isa(0.0,Ca+-273.15+-159.1342);p[ra+(qa<<3)>>3]=q;p[za+(qa<<3)>>3]=q*2102.0/+p[xa>>3];p[J+(ta<<3)>>3]=432.28419999999994;p[sa>>3]=0.0}while(+kY(za,Z)>0.0)}if(H){qa=k[y>>2]|0;sa=0;do{q=+isa(0.0,+p[qa+(sa<<3)>>3]+-273.15);p[oa+(sa<<3)>>3]=q;sa=sa+1|0}while((sa|0)!=(Z|0));Ka=za;la=90}else{La=za;la=101}}else{Ka=0;la=90}if((la|0)==90)if(H){za=k[z>>2]|0;sa=k[A>>2]|0;qa=0;do{p[fa+(qa<<3)>>3]=+p[oa+(qa<<3)>>3]*+p[za+(qa<<3)>>3]*+p[sa+(qa<<3)>>3]*2102.0/334500.0;qa=qa+1|0}while((qa|0)!=(Z|0));q=+kY(fa,Z);if(H){qa=k[y>>2]|0;sa=k[z>>2]|0;za=k[A>>2]|0;ta=0;do{Ca=+isa(0.0,-((+p[qa+(ta<<3)>>3]+-273.15)*+p[sa+(ta<<3)>>3]*+p[za+(ta<<3)>>3]*2102.0)/334500.0);p[ba+(ta<<3)>>3]=Ca;ta=ta+1|0}while((ta|0)!=(Z|0));Ma=q;Na=Ka}else{Ma=q;Na=Ka}}else{La=Ka;la=101}if((la|0)==101){Ma=+kY(fa,Z);Na=La}La=Rqa(ca)|0;if(ea){Oa=Rqa(ca)|0;Pa=L}else{ea=Z<<3;WEa(La|0,0,ea|0)|0;Ka=Rqa(ca)|0;WEa(Ka|0,0,ea|0)|0;Oa=Ka;Pa=L}k[L>>2]=Oa;if(H)WEa(ka|0,0,Z<<3|0)|0;Pa=Z+1|0;Ka=Rqa(Pa>>>0>536870911?-1:Pa<<3)|0;if(Pa)WEa(Ka|0,0,Pa<<3|0)|0;if(H){TEa(Ka+8|0,La|0,Z<<3|0)|0;Qa=Z}else Qa=Z;while(1){Pa=Qa+-1|0;if((Qa|0)<=0){Ra=0.0;break}if(+p[fa+(Pa<<3)>>3]>0.0){Ta=Pa;la=118;break}if(!~~+p[Aa+(Pa<<3)>>3])Qa=Pa;else{Ta=Pa;la=118;break}}if((la|0)==118)Ra=+(Ta|0);d:do if(H){Ta=k[z>>2]|0;Qa=k[v>>2]|0;Aa=k[C>>2]|0;Pa=k[y>>2]|0;ea=0;while(1){q=+p[fa+(ea<<3)>>3];Ca=q+ +p[Ka+(ea<<3)>>3];if(+(ea|0)>Ra&Ca==0.0)break;ca=Ta+(ea<<3)|0;Ua=+p[ca>>3];do if(!(Ua>=910.0)){ta=ba+(ea<<3)|0;Va=+p[ta>>3];za=Qa+(ea<<3)|0;Wa=+p[za>>3];if(Va==0.0){Ya=Wa-q;p[za>>3]=Ya;Za=+p[ca>>3];_a=+jsa(Ca,(910.0-Za)*.07*(Ya/Za)-+p[Aa+(ea<<3)>>3]);p[ka+(ea<<3)>>3]=_a;Za=+isa(0.0,Ca-_a);sa=ea+1|0;p[Ka+(sa<<3)>>3]=Za;p[La+(ea<<3)>>3]=0.0;$a=sa;break}Za=Wa/Ua;_a=+jsa(+jsa(Ca,(910.0-Ua)*Za),Va);Va=Wa+_a;p[za>>3]=Va;Wa=Va/Za;p[ca>>3]=Wa;Va=Ca-_a;sa=Aa+(ea<<3)|0;Ya=+jsa(Va,Za*((910.0-Wa)*.07)-+p[sa>>3]);qa=ka+(ea<<3)|0;p[qa>>3]=Ya;Wa=+p[sa>>3];if(Wa<-Ya){p[qa>>3]=Wa;ab=Wa}else ab=Ya;if(ab<0.0){Ya=+jsa(-ab,+jsa(Za*(910.0-+p[ca>>3]),+p[ta>>3]-_a));Wa=Ya+ +p[za>>3];p[za>>3]=Wa;p[ca>>3]=Wa/Za;bb=+p[qa>>3];cb=Ya}else{bb=ab;cb=0.0}qa=ea+1|0;ta=Ka+(qa<<3)|0;p[ta>>3]=Va-bb-cb;sa=Pa+(ea<<3)|0;Va=+p[sa>>3];p[sa>>3]=Va+(_a+cb)*((273.15-Va)*2102.0+334500.0)/(+p[za>>3]*2102.0);if(!(+p[ca>>3]==910.0)){$a=qa;break}p[Oa+(ea<<3)>>3]=+p[ta>>3];p[ta>>3]=0.0;$a=qa}else{qa=Qa+(ea<<3)|0;Va=+p[qa>>3]-q;p[qa>>3]=Va;_a=+p[ca>>3];Ya=+jsa(Ca,(910.0-_a)*.07*(Va/_a)-+p[Aa+(ea<<3)>>3]);p[ka+(ea<<3)>>3]=Ya;_a=+isa(0.0,Ca-Ya);p[Oa+(ea<<3)>>3]=_a;$a=ea+1|0}while(0);if(($a|0)<(Z|0))ea=$a;else break}if(H){ea=k[C>>2]|0;Aa=0;while(1){if(+p[ea+(Aa<<3)>>3]<0.0)break;Aa=Aa+1|0;if((Aa|0)>=(Z|0)){la=136;break}}if((la|0)==136){if(!H){db=0;break}Aa=k[C>>2]|0;ea=0;do{Qa=Aa+(ea<<3)|0;p[Qa>>3]=+p[ka+(ea<<3)>>3]+ +p[Qa>>3];ea=ea+1|0}while((ea|0)!=(Z|0));if(!H){db=0;break}ea=k[v>>2]|0;Aa=0;Qa=0;while(1){Pa=(+p[ea+(Qa<<3)>>3]!=0.0&1)+Aa|0;Qa=Qa+1|0;if((Qa|0)==(Z|0)){db=Pa;break d}else Aa=Pa}}Aa=M+56|0;Qa=M+4|0;k[M>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,M+56|0,Qa|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fb=Q;gb=ea;vva(Aa);Qb(gb|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[Aa>>2]=27488;B=0;va(448,Qa|0);ea=B;B=0;do if(ea&1){Pa=Rb()|0;hb=Q;ib=Pa}else{k[Qa>>2]=27560;Pa=M+36|0;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[M+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,Qa|0,u|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;ca=Q;Yua(u);Yua(Pa);Ava(Qa);hb=ca;ib=Ta;break}Yua(u);B=0;Ta=Ia(40,M|0,110089,47)|0;ca=B;B=0;e:do if(ca&1)la=154;else{B=0;Xa(239,Ta|0,0)|0;$=B;B=0;if($&1){la=154;break}$=Ab(20)|0;B=0;eb(502,N|0,109627,84);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,O|0,110137,4);ta=B;B=0;if(ta&1){ta=Rb()|0;za=Q;Yua(N);jb=ta;kb=za;break}B=0;wa(510,P|0,Qa|0);za=B;B=0;if(za&1){za=Rb()|0;lb=1;mb=za;nb=Q}else{B=0;ua(163,$|0,N|0,O|0,1437,P|0);za=B;B=0;if(za&1)ob=1;else{B=0;eb(503,$|0,1240,229);B=0;ob=0}za=Rb()|0;ta=Q;Yua(P);lb=ob;mb=za;nb=ta}Yua(O);Yua(N);if(lb){jb=mb;kb=nb}else{pb=mb;qb=nb;break e}}else{ta=Rb()|0;jb=ta;kb=Q}while(0);zb($|0);pb=jb;qb=kb}while(0);if((la|0)==154){Ta=Rb()|0;pb=Ta;qb=Q}k[M>>2]=27468;k[Aa>>2]=27488;k[Qa>>2]=27560;Yua(Pa);Ava(Qa);vva(Aa);ma=pb;na=qb;Qb(ma|0)}while(0);fb=hb;gb=ib;vva(Aa);Qb(gb|0)}else db=0}else db=0;while(0);gb=Rqa(db>>>0>1073741823?-1:db<<2)|0;if(H){H=k[v>>2]|0;db=0;ib=0;while(1){if(+p[H+(ib<<3)>>3]!=0.0){k[gb+(db<<2)>>2]=ib;rb=db+1|0}else rb=db;ib=ib+1|0;if((ib|0)==(Z|0)){sb=rb;break}else db=rb}}else sb=0;lY(v,Z,gb,sb);lY(C,Z,gb,sb);lY(z,Z,gb,sb);lY(y,Z,gb,sb);lY(D,Z,gb,sb);lY(E,Z,gb,sb);lY(F,Z,gb,sb);lY(G,Z,gb,sb);lY(w,Z,gb,sb);lY(x,Z,gb,sb);lY(L,Z,gb,sb);Tqa(gb);if((sb|0)>0){gb=k[v>>2]|0;Z=k[z>>2]|0;rb=k[A>>2]|0;db=0;do{p[rb+(db<<3)>>3]=+p[gb+(db<<3)>>3]/+p[Z+(db<<3)>>3];db=db+1|0}while((db|0)!=(sb|0))}cb=+kY(k[L>>2]|0,sb);Tqa(La);La=k[L>>2]|0;if(La)Tqa(La);k[L>>2]=0;Da=cb;Ea=Ka;Fa=sb;Ga=Ma;Ha=Na;Ja=ra}ra=k[A>>2]|0;Na=Fa;while(1){sb=Na+-1|0;if((Na|0)<=0){tb=0.0;la=181;break}if(+p[ra+(sb<<3)>>3]<n){ub=Na;vb=sb;la=180;break}else Na=sb}if((la|0)==180?(ub|0)>=1:0){tb=+(vb|0);la=181}if((la|0)==181){vb=k[v>>2]|0;ub=k[y>>2]|0;Na=k[D>>2]|0;sb=k[E>>2]|0;Ka=k[F>>2]|0;L=k[G>>2]|0;La=k[z>>2]|0;db=k[C>>2]|0;Z=0;while(1){gb=ra+(Z<<3)|0;if(+p[gb>>3]<n){rb=vb+(Z<<3)|0;Ma=+p[rb>>3];ib=Z+1|0;H=vb+(ib<<3)|0;cb=+p[H>>3];bb=Ma+cb;hb=ub+(ib<<3)|0;p[hb>>3]=(Ma*+p[ub+(Z<<3)>>3]+cb*+p[hb>>3])/bb;hb=Na+(ib<<3)|0;p[hb>>3]=(+p[Na+(Z<<3)>>3]*+p[rb>>3]+ +p[hb>>3]*+p[H>>3])/bb;hb=sb+(ib<<3)|0;p[hb>>3]=(+p[sb+(Z<<3)>>3]*+p[rb>>3]+ +p[hb>>3]*+p[H>>3])/bb;hb=Ka+(ib<<3)|0;p[hb>>3]=(+p[Ka+(Z<<3)>>3]*+p[rb>>3]+ +p[hb>>3]*+p[H>>3])/bb;hb=L+(ib<<3)|0;p[hb>>3]=(+p[L+(Z<<3)>>3]*+p[rb>>3]+ +p[hb>>3]*+p[H>>3])/bb;hb=ra+(ib<<3)|0;cb=+p[gb>>3]+ +p[hb>>3];p[hb>>3]=cb;p[La+(ib<<3)>>3]=bb/cb;hb=db+(ib<<3)|0;p[hb>>3]=+p[hb>>3]+ +p[db+(Z<<3)>>3];p[H>>3]=bb;p[rb>>3]=99999.0;wb=ib}else wb=Z+1|0;if(!(+(wb|0)<=tb))break;else Z=wb}}wb=(Fa|0)>0;if(wb){Z=k[v>>2]|0;db=0;La=0;while(1){ra=(+p[Z+(La<<3)>>3]!=99999.0&1)+db|0;La=La+1|0;if((La|0)==(Fa|0)){xb=ra;break}else db=ra}}else xb=0;db=Rqa(xb>>>0>1073741823?-1:xb<<2)|0;if(wb){wb=k[v>>2]|0;xb=0;La=0;while(1){if(+p[wb+(La<<3)>>3]!=99999.0){k[db+(xb<<2)>>2]=La;yb=xb+1|0}else yb=xb;La=La+1|0;if((La|0)==(Fa|0)){Bb=yb;break}else xb=yb}}else Bb=0;lY(v,Fa,db,Bb);lY(C,Fa,db,Bb);lY(A,Fa,db,Bb);lY(z,Fa,db,Bb);lY(y,Fa,db,Bb);lY(D,Fa,db,Bb);lY(E,Fa,db,Bb);lY(F,Fa,db,Bb);lY(G,Fa,db,Bb);lY(w,Fa,db,Bb);lY(x,Fa,db,Bb);Tqa(db);db=k[A>>2]|0;tb=n*2.0;if(!(+p[db+72>>3]>tb))if(!(+p[db+64>>3]>tb))if(!(+p[db+56>>3]>tb))if(!(+p[db+48>>3]>tb))if(!(+p[db+40>>3]>tb))if(!(+p[db+32>>3]>tb))if(!(+p[db+24>>3]>tb))if(!(+p[db+16>>3]>tb))if(+p[db+8>>3]>tb){Cb=db;Db=1.0;Eb=0;Fb=Bb}else{Cb=db;Db=0.0;Eb=0;Fb=Bb}else{Cb=db;Db=2.0;Eb=0;Fb=Bb}else{Cb=db;Db=3.0;Eb=0;Fb=Bb}else{Cb=db;Db=4.0;Eb=0;Fb=Bb}else{Cb=db;Db=5.0;Eb=0;Fb=Bb}else{Cb=db;Db=6.0;Eb=0;Fb=Bb}else{Cb=db;Db=7.0;Eb=0;Fb=Bb}else{Cb=db;Db=8.0;Eb=0;Fb=Bb}else{Cb=db;Db=9.0;Eb=0;Fb=Bb}f:while(1){Bb=Eb;while(1){if(+p[Cb+(Bb<<3)>>3]>tb){Gb=Bb;break}Bb=Bb+1|0;if(!(+(Bb|0)<=Db)){Hb=Fb;break f}}mY(A,Fb,Gb,.5);mY(C,Fb,Gb,.5);mY(v,Fb,Gb,.5);mY(y,Fb,Gb,1.0);mY(z,Fb,Gb,1.0);mY(D,Fb,Gb,1.0);mY(w,Fb,Gb,1.0);mY(x,Fb,Gb,1.0);mY(E,Fb,Gb,1.0);mY(F,Fb,Gb,1.0);mY(G,Fb,Gb,1.0);Bb=Fb+1|0;n=Db+1.0;if(!(+(Gb|0)<=n)){Hb=Bb;break}Cb=k[A>>2]|0;Db=n;Eb=Gb;Fb=Bb}Db=Da*908661.2999999999;Fb=(Hb|0)>0;if(Fb){Gb=k[v>>2]|0;Eb=k[y>>2]|0;Cb=k[w>>2]|0;Bb=0;do{p[Cb+(Bb<<3)>>3]=+p[Gb+(Bb<<3)>>3]*+p[Eb+(Bb<<3)>>3]*2102.0;Bb=Bb+1|0}while((Bb|0)!=(Hb|0));Bb=k[C>>2]|0;if(Fb){Eb=k[x>>2]|0;Gb=0;do{p[Eb+(Gb<<3)>>3]=+p[Bb+(Gb<<3)>>3]*908661.2999999999;Gb=Gb+1|0}while((Gb|0)!=(Hb|0));Ib=Bb}else Ib=Bb}else Ib=k[C>>2]|0;tb=+kY(Ib,Hb);n=Da+(tb+ +kY(k[v>>2]|0,Hb));tb=+kY(k[w>>2]|0,Hb);bb=tb+ +kY(k[x>>2]|0,Hb);g:do if(Fb){Ib=k[C>>2]|0;Bb=0;while(1){if(+p[Ib+(Bb<<3)>>3]<0.0)break;Bb=Bb+1|0;if((Bb|0)>=(Hb|0))break g}Bb=R+56|0;Ib=R+4|0;k[R>>2]=27524;k[Bb>>2]=27544;B=0;wa(508,R+56|0,Ib|0);Gb=B;B=0;if(Gb&1){Gb=Rb()|0;Jb=Q;Kb=Gb;vva(Bb);Qb(Kb|0)}k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[Bb>>2]=27488;B=0;va(448,Ib|0);Gb=B;B=0;do if(Gb&1){Eb=Rb()|0;Lb=Q;Mb=Eb}else{k[Ib>>2]=27560;Eb=R+36|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[R+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,Ib|0,u|0);Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Aa=Q;Yua(u);Yua(Eb);Ava(Ib);Lb=Aa;Mb=Cb;break}Yua(u);B=0;Cb=Ia(40,R|0,110142,48)|0;Aa=B;B=0;h:do if(!(Aa&1)?(B=0,Xa(239,Cb|0,0)|0,db=B,B=0,!(db&1)):0){db=Ab(20)|0;B=0;eb(502,S|0,109627,84);Fa=B;B=0;do if(!(Fa&1)){B=0;eb(502,T|0,110137,4);yb=B;B=0;if(yb&1){yb=Rb()|0;xb=Q;Yua(S);Nb=yb;Ob=xb;break}B=0;wa(510,U|0,Ib|0);xb=B;B=0;if(xb&1){xb=Rb()|0;Pb=1;Sb=xb;Tb=Q}else{B=0;ua(163,db|0,S|0,T|0,1600,U|0);xb=B;B=0;if(xb&1)Ub=1;else{B=0;eb(503,db|0,1240,229);B=0;Ub=0}xb=Rb()|0;yb=Q;Yua(U);Pb=Ub;Sb=xb;Tb=yb}Yua(T);Yua(S);if(Pb){Nb=Sb;Ob=Tb}else{Vb=Sb;Wb=Tb;break h}}else{yb=Rb()|0;Nb=yb;Ob=Q}while(0);zb(db|0);Vb=Nb;Wb=Ob}else la=228;while(0);if((la|0)==228){Cb=Rb()|0;Vb=Cb;Wb=Q}k[R>>2]=27468;k[Bb>>2]=27488;k[Ib>>2]=27560;Yua(Eb);Ava(Ib);vva(Bb);ma=Vb;na=Wb;Qb(ma|0)}while(0);Jb=Lb;Kb=Mb;vva(Bb);Qb(Kb|0)}while(0);tb=+VEa(+(o-n+0.0));n=+VEa(+(pa-bb-Db+0.0));if(!(tb!=0.0|n!=0.0)){Kb=k[v>>2]|0;if(Kb){Tqa(Kb);k[v>>2]=0}v=k[w>>2]|0;if(v){Tqa(v);k[w>>2]=0}w=k[x>>2]|0;if(w){Tqa(w);k[x>>2]=0}Tqa(ba);Tqa(ka);Tqa(Ba);Tqa(oa);if(Ja)Tqa(Ja);if(Ha)Tqa(Ha);if(!Ea){Tqa(fa);p[a>>3]=Ga;p[b>>3]=Da;p[c>>3]=0.0;Xb=k[y>>2]|0;k[d>>2]=Xb;Yb=k[z>>2]|0;k[e>>2]=Yb;Zb=k[A>>2]|0;k[f>>2]=Zb;_b=k[C>>2]|0;k[g>>2]=_b;$b=k[D>>2]|0;k[h>>2]=$b;ac=k[E>>2]|0;k[i>>2]=ac;bc=k[F>>2]|0;k[j>>2]=bc;cc=k[G>>2]|0;k[l>>2]=cc;k[m>>2]=Hb;r=t;return}Tqa(Ea);Tqa(fa);p[a>>3]=Ga;p[b>>3]=Da;p[c>>3]=0.0;Xb=k[y>>2]|0;k[d>>2]=Xb;Yb=k[z>>2]|0;k[e>>2]=Yb;Zb=k[A>>2]|0;k[f>>2]=Zb;_b=k[C>>2]|0;k[g>>2]=_b;$b=k[D>>2]|0;k[h>>2]=$b;ac=k[E>>2]|0;k[i>>2]=ac;bc=k[F>>2]|0;k[j>>2]=bc;cc=k[G>>2]|0;k[l>>2]=cc;k[m>>2]=Hb;r=t;return}t=V+56|0;Hb=V+4|0;k[V>>2]=27524;k[t>>2]=27544;B=0;wa(508,V+56|0,Hb|0);m=B;B=0;if(m&1){m=Rb()|0;dc=Q;ec=m;vva(t);Qb(ec|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[t>>2]=27488;B=0;va(448,Hb|0);m=B;B=0;do if(m&1){cc=Rb()|0;fc=Q;gc=cc}else{k[Hb>>2]=27560;cc=V+36|0;k[cc>>2]=0;k[cc+4>>2]=0;k[cc+8>>2]=0;k[cc+12>>2]=0;k[V+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,Hb|0,u|0);l=B;B=0;if(l&1){l=Rb()|0;G=Q;Yua(u);Yua(cc);Ava(Hb);fc=G;gc=l;break}Yua(u);B=0;l=Ia(40,V|0,110191,51)|0;G=B;B=0;i:do if(!(G&1)?(B=0,bc=Ia(40,l|0,110243,4)|0,j=B,B=0,!(j&1)):0){B=0;j=Sa(1,bc|0,+tb)|0;bc=B;B=0;if(bc&1){la=256;break}B=0;bc=Ia(40,j|0,110248,5)|0;j=B;B=0;if(j&1){la=256;break}B=0;j=Sa(1,bc|0,+n)|0;bc=B;B=0;if(bc&1){la=256;break}B=0;bc=Ia(40,j|0,149177,1)|0;j=B;B=0;if(j&1){la=256;break}B=0;Xa(239,bc|0,0)|0;bc=B;B=0;if(bc&1){la=256;break}bc=Ab(20)|0;B=0;eb(502,W|0,109627,84);j=B;B=0;do if(!(j&1)){B=0;eb(502,X|0,110137,4);F=B;B=0;if(F&1){F=Rb()|0;ac=Q;Yua(W);hc=F;ic=ac;break}B=0;wa(510,Y|0,Hb|0);ac=B;B=0;if(ac&1){ac=Rb()|0;jc=1;kc=ac;lc=Q}else{B=0;ua(163,bc|0,W|0,X|0,1607,Y|0);ac=B;B=0;if(ac&1)mc=1;else{B=0;eb(503,bc|0,1240,229);B=0;mc=0}ac=Rb()|0;F=Q;Yua(Y);jc=mc;kc=ac;lc=F}Yua(X);Yua(W);if(jc){hc=kc;ic=lc}else{nc=kc;oc=lc;break i}}else{F=Rb()|0;hc=F;ic=Q}while(0);zb(bc|0);nc=hc;oc=ic}else la=256;while(0);if((la|0)==256){l=Rb()|0;nc=l;oc=Q}k[V>>2]=27468;k[t>>2]=27488;k[Hb>>2]=27560;Yua(cc);Ava(Hb);vva(t);ma=nc;na=oc;Qb(ma|0)}while(0);dc=fc;ec=gc;vva(t);Qb(ec|0)}function g_(a,b,c,d,e,f,g,h,i,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=+i;j=j|0;l=l|0;var m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0;m=r;r=r+176|0;n=m+152|0;o=m+16|0;q=m;s=g/86400.0;a:do if((l|0)==0&(GY()|0)?(vY()|0)==0:0){t=o+56|0;u=o+4|0;k[o>>2]=27524;k[t>>2]=27544;B=0;wa(508,o+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=o+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[o+52>>2]=16;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;B=0;wa(509,u|0,n|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(n);Yua(y);Ava(u);z=D;A=C;break}Yua(n);B=0;Ia(40,o|0,110254,24)|0;C=B;B=0;if(!(C&1)?(B=0,wa(510,q|0,u|0),C=B,B=0,!(C&1)):0){B=0;ya(425,q|0)|0;C=B;B=0;if(!(C&1)){Yua(q);k[o>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);break a}C=Rb()|0;D=Q;Yua(q);E=D;F=C;k[o>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(F|0)}C=Rb()|0;E=Q;F=C;k[o>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);Qb(F|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}while(0);x=j>>>0>536870911?-1:j<<3;A=Rqa(x)|0;z=(j|0)>0;if(z){w=0;do{p[A+(w<<3)>>3]=+p[a+(w<<3)>>3]*+p[b+(w<<3)>>3];w=w+1|0}while((w|0)!=(j|0))}w=j+-1|0;F=Rqa(w>>>0>536870911?-1:w<<3)|0;g=+p[b>>3];p[F>>3]=g;if((w|0)>1){H=g;o=1;do{H=H+ +p[b+(o<<3)>>3];p[F+(o<<3)>>3]=H;o=o+1|0}while((o|0)!=(w|0))}w=Rqa(x)|0;p[w>>3]=0.0;if((j|0)>1){x=1;do{o=x+-1|0;p[w+(x<<3)>>3]=+p[F+(o<<3)>>3]*+p[a+(o<<3)>>3];x=x+1|0}while((x|0)!=(j|0))}if(!z){Tqa(A);Tqa(F);Tqa(w);r=m;return}H=f/1.0e3;z=H==-G;g=42400.0/(h*8.314);I=f*9.81;J=f/i;K=J*(139.21-h*.542)*8.36;L=J*(76.138-h*.28965)*8.36;h=0.0;J=0.0;x=0;while(1){switch(e|0){case 1:{M=+p[c+(x<<3)>>3]*8.314;N=+$(+(+aa(+H)));O=+ja(+(-10160.0/M))*11.0*f/1.0e3;P=+ja(+(-21400.0/M))*575.0*(z?G:N);break}case 2:{N=I*+ja(+(g-6.0e4/(+p[c+(x<<3)>>3]*8.314)));O=N*.07;P=N*.03;break}case 3:{N=+ja(+(-60.0/(+p[c+(x<<3)>>3]*8.314)));M=+p[d+(x<<3)>>3]/1.0e3;R=N*+p[w+(x<<3)>>3]/(M*M);O=R*9.2e-09;P=R*3.7e-09;break}case 4:{R=K*+ba(+(273.15-+p[c+(x<<3)>>3]),-2.061);O=R;P=R;break}case 5:{R=L*+ba(+(273.15-+p[c+(x<<3)>>3]),-2.061);O=R;P=R;break}default:{O=h;P=J}}o=a+(x<<3)|0;R=+p[o>>3];M=R+s*((i-R)*(!(R<=550.0)?P:O)/365.0);R=M>i?i:M;p[o>>3]=R;p[b+(x<<3)>>3]=+p[A+(x<<3)>>3]/R;x=x+1|0;if((x|0)==(j|0))break;else{h=O;J=P}}Tqa(A);Tqa(F);Tqa(w);r=m;return}function h_(a,b,c,d,e,f,g,h,i,j,l,m,n){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;l=+l;m=+m;n=n|0;var o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0;o=r;r=r+176|0;q=o+152|0;s=o+16|0;t=o;a:do if((n|0)==0&(GY()|0)?(vY()|0)==0:0){u=s+56|0;v=s+4|0;k[s>>2]=27524;k[u>>2]=27544;B=0;wa(508,s+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=s+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[s+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,v|0,q|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(q);Yua(z);Ava(v);A=E;C=D;break}Yua(q);B=0;Ia(40,s|0,110279,24)|0;D=B;B=0;if(!(D&1)?(B=0,wa(510,t|0,v|0),D=B,B=0,!(D&1)):0){B=0;ya(425,t|0)|0;D=B;B=0;if(!(D&1)){Yua(t);k[s>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);break a}D=Rb()|0;E=Q;Yua(t);F=E;G=D;k[s>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(G|0)}D=Rb()|0;F=Q;G=D;k[s>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(G|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}while(0);H=i<910.0&j==0.0?.00012:!(i>=910.0)?.0013:.0032;i=f<.01?.01:f;f=d-e;j=f*((l-H)*19.62)/((d+e)*(i*i));l=j>.19?.19:j;if(l>0.0)I=1.0/(1.0-l*5.2);else I=+ba(+(1.0-l*18.0),-.25);j=+ka(+(m/H));H=i*(h*.029/(d*8.314)*(.16000000000000003/(j*j)));j=I*(l<-.03?I*1.3:I);I=f*(H*1005.0)/j;if(!(e>=273.15)){J=2829500.0;K=+ja(+((e+-273.15)*17.502/(e+240.97+-273.15)))*611.21;L=H*J;M=g-K;N=L*M;O=N*.622;P=O/h;R=P/j;S=R*86400.0;T=S/J;p[a>>3]=I;p[b>>3]=R;p[c>>3]=T;r=o;return}else{J=2495.0e3;K=+ja(+(9.550426-5723.265/e+ +ka(+e)*3.53068-e*.00728332));L=H*J;M=g-K;N=L*M;O=N*.622;P=O/h;R=P/j;S=R*86400.0;T=S/J;p[a>>3]=I;p[b>>3]=R;p[c>>3]=T;r=o;return}}function i_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;e=r;r=r+384|0;f=e+360|0;g=e+356|0;h=e+373|0;j=e+372|0;l=e+352|0;m=e+216|0;n=e+200|0;o=e+48|0;p=e+36|0;q=e+64|0;s=e+24|0;t=e+12|0;u=e;k[g>>2]=0;bO(b,j,314);bO(b,h,182);cO(b,l,183);if(!d){if(i[j>>0]|0){d=m+56|0;v=m+4|0;k[m>>2]=27524;k[d>>2]=27544;B=0;wa(508,m+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(d);Qb(y|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[d>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=m+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(v);A=E;C=D;break}Yua(f);B=0;D=Ia(40,m|0,110304,76)|0;E=B;B=0;a:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,n|0,110381,91);G=B;B=0;do if(!(G&1)){B=0;eb(502,o|0,110473,34);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(n);J=H;K=I;break}B=0;wa(510,p|0,v|0);I=B;B=0;if(I&1){I=Rb()|0;L=Q;M=I;N=1}else{B=0;ua(163,F|0,n|0,o|0,40,p|0);I=B;B=0;if(I&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}I=Rb()|0;H=Q;Yua(p);L=H;M=I;N=O}Yua(o);Yua(n);if(N){J=M;K=L}else{P=M;R=L;break a}}else{I=Rb()|0;J=I;K=Q}while(0);zb(F|0);P=J;R=K}else S=19;while(0);if((S|0)==19){D=Rb()|0;P=D;R=Q}k[m>>2]=27468;k[d>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(d);T=R;U=P;Qb(U|0)}while(0);x=A;y=C;vva(d);Qb(y|0)}}else i[j>>0]=0;if(!(i[h>>0]|0)){j_(g,b,c);V=k[g>>2]|0;k[a>>2]=V;r=e;return}switch(k[l>>2]|0){case 0:{k[g>>2]=507;V=507;k[a>>2]=V;r=e;return}case 1:{k[g>>2]=508;V=508;k[a>>2]=V;r=e;return}case 2:{k[g>>2]=509;V=509;k[a>>2]=V;r=e;return}case 3:{k[g>>2]=510;V=510;k[a>>2]=V;r=e;return}case 4:{k[g>>2]=511;V=511;k[a>>2]=V;r=e;return}default:{e=q+56|0;V=q+4|0;k[q>>2]=27524;k[e>>2]=27544;B=0;wa(508,q+56|0,V|0);a=B;B=0;if(a&1){a=Rb()|0;W=Q;X=a;vva(e);Qb(X|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[e>>2]=27488;B=0;va(448,V|0);a=B;B=0;do if(a&1){g=Rb()|0;Y=Q;Z=g}else{k[V>>2]=27560;g=q+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[q+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,V|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;c=Q;Yua(f);Yua(g);Ava(V);Y=c;Z=l;break}Yua(f);B=0;l=Ia(40,q|0,110508,26)|0;c=B;B=0;b:do if(!(c&1)?(B=0,Xa(239,l|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,s|0,110381,91);h=B;B=0;do if(!(h&1)){B=0;eb(502,t|0,110473,34);j=B;B=0;if(j&1){j=Rb()|0;y=Q;Yua(s);_=j;$=y;break}B=0;wa(510,u|0,V|0);y=B;B=0;if(y&1){y=Rb()|0;aa=1;ba=Q;ca=y}else{B=0;ua(163,b|0,s|0,t|0,50,u|0);y=B;B=0;if(y&1)da=1;else{B=0;eb(503,b|0,1240,229);B=0;da=0}y=Rb()|0;j=Q;Yua(u);aa=da;ba=j;ca=y}Yua(t);Yua(s);if(aa){_=ca;$=ba}else{ea=ba;fa=ca;break b}}else{y=Rb()|0;_=y;$=Q}while(0);zb(b|0);ea=$;fa=_}else S=49;while(0);if((S|0)==49){l=Rb()|0;ea=Q;fa=l}k[q>>2]=27468;k[e>>2]=27488;k[V>>2]=27560;Yua(g);Ava(V);vva(e);T=ea;U=fa;Qb(U|0)}while(0);W=Y;X=Z;vva(e);Qb(X|0)}}}function j_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;do switch(c|0){case 499:{i=512;break}case 518:{i=513;break}case 522:{i=514;break}case 485:{i=515;break}case 487:{i=516;break}case 489:{i=517;break}case 491:{i=518;break}case 508:{i=519;break}case 519:{i=520;break}case 494:{i=521;break}case 523:{i=522;break}case 511:{i=523;break}case 997:{i=524;break}case 525:{i=525;break}case 495:{i=526;break}default:{j=e+56|0;l=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);Yua(p);Ava(l);q=u;s=t;break}Yua(d);B=0;t=Ia(40,e|0,110535,15)|0;u=B;B=0;if((((!(u&1)?(B=0,u=ya(427,c|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,t|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,146956,19)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,f|0,110551,84);w=B;B=0;do if(!(w&1)){B=0;eb(502,g|0,110636,27);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(f);x=t;y=u;break}B=0;wa(510,h|0,l|0);u=B;B=0;if(u&1){u=Rb()|0;z=Q;A=u;C=1}else{B=0;ua(163,v|0,f|0,g|0,75,h|0);u=B;B=0;if(u&1)D=1;else{B=0;eb(503,v|0,1240,229);B=0;D=0}u=Rb()|0;t=Q;Yua(h);z=t;A=u;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}}else{u=Rb()|0;x=Q;y=u}while(0);zb(v|0);E=x;F=y;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}w=Rb()|0;E=Q;F=w;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}}while(0);k[a>>2]=i;r=b;return}function k_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+188|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;i[d>>0]=0;vY()|0;bO(k[a+44>>2]|0,d,8);if(!(i[d>>0]|0)){r=b;return}b=e+56|0;d=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(b);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,d|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[d>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(d);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,110664,72)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,f|0,110737,64);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,110802,7);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,d|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,f|0,g|0,326,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function l_(a,b){a=a|0;b=b|0;var c=0,d=0;b=r;r=r+32|0;a=b+8|0;c=b;d=b+16|0;k[d>>2]=0;iZ(1,d)|0;if(k[d>>2]|0){r=b;return 1}nta(10)|0;if(k[d>>2]|0){r=b;return 1}k[c>>2]=110826;k[c+4>>2]=110856;mta(110810,c)|0;if(k[d>>2]|0){r=b;return 1}k[a>>2]=110887;k[a+4>>2]=110912;mta(110860,a)|0;if(k[d>>2]|0){r=b;return 1}nta(10)|0;r=b;return 1}function m_(){var a=0,b=0;a=r;r=r+16|0;b=a;iZ(1,b)|0;if(k[b>>2]|0){r=a;return}ota(110930)|0;r=a;return}function n_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;do switch(a|0){case 382:{h=Qqa(4)|0;k[h>>2]=39620;i=h;break}case 479:{h=Qqa(4)|0;k[h>>2]=38012;i=h;break}case 480:{h=Qqa(4)|0;k[h>>2]=38088;i=h;break}case 481:{h=Qqa(4)|0;k[h>>2]=38164;i=h;break}case 484:{h=Qqa(4)|0;k[h>>2]=38240;i=h;break}case 486:{h=Qqa(4)|0;k[h>>2]=38316;i=h;break}case 488:{h=Qqa(4)|0;k[h>>2]=38392;i=h;break}case 490:{h=Qqa(4)|0;k[h>>2]=38468;i=h;break}case 492:{h=Qqa(4)|0;k[h>>2]=39392;i=h;break}case 493:{h=Qqa(4)|0;k[h>>2]=38544;i=h;break}case 496:{h=Qqa(4)|0;k[h>>2]=38620;i=h;break}case 497:{h=Qqa(4)|0;k[h>>2]=38696;i=h;break}case 498:{h=Qqa(4)|0;k[h>>2]=38860;i=h;break}case 500:{h=Qqa(4)|0;k[h>>2]=38936;i=h;break}case 501:{h=Qqa(4)|0;k[h>>2]=39012;i=h;break}case 504:{h=Qqa(4)|0;k[h>>2]=39088;i=h;break}case 505:{h=Qqa(4)|0;k[h>>2]=39240;i=h;break}case 506:{h=Qqa(4)|0;k[h>>2]=39316;i=h;break}case 507:{h=Qqa(4)|0;k[h>>2]=39164;i=h;break}case 509:{h=Qqa(4)|0;k[h>>2]=39468;i=h;break}case 510:{h=Qqa(4)|0;k[h>>2]=39544;i=h;break}case 512:{h=Qqa(4)|0;k[h>>2]=39696;i=h;break}case 513:{h=Qqa(4)|0;k[h>>2]=39772;i=h;break}case 515:{h=Qqa(4)|0;k[h>>2]=39848;i=h;break}case 516:{h=Qqa(4)|0;k[h>>2]=39924;i=h;break}case 517:{h=Qqa(4)|0;k[h>>2]=4e4;i=h;break}case 520:{h=Qqa(4)|0;k[h>>2]=40152;i=h;break}case 521:{h=Qqa(4)|0;k[h>>2]=40076;i=h;break}case 524:{h=Qqa(4)|0;k[h>>2]=38784;i=h;break}case 526:{h=Qqa(4)|0;k[h>>2]=40532;i=h;break}case 528:{h=Qqa(4)|0;k[h>>2]=40228;i=h;break}case 529:{h=Qqa(4)|0;k[h>>2]=40304;i=h;break}case 531:{h=Qqa(4)|0;k[h>>2]=40380;i=h;break}case 532:{h=Qqa(4)|0;k[h>>2]=40456;i=h;break}case 998:{h=Qqa(4)|0;k[h>>2]=40608;i=h;break}default:{h=d+56|0;j=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(h);Qb(n|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){o=Rb()|0;p=Q;q=o}else{k[j>>2]=27560;o=d+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(o);Ava(j);p=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,110942,29)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,a|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,141170,1)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,110972,74);v=B;B=0;do if(!(v&1)){B=0;eb(502,f|0,111047,14);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(e);w=s;x=t;break}B=0;wa(510,g|0,j|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,e|0,f|0,121,g|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(g);y=s;z=t;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;k[d>>2]=27468;k[h>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(h);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[d>>2]=27468;k[h>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(h);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[d>>2]=27468;k[h>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(h);Qb(E|0)}while(0);m=p;n=q;vva(h);Qb(n|0)}}while(0);r=b;return i|0}function o_(a){a=a|0;gh(a);return}function p_(a){a=a|0;jh(a);return}function q_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0;c=r;r=r+896|0;d=c+876|0;e=c+704|0;f=c+864|0;g=c+852|0;h=c+840|0;i=c+552|0;j=c+688|0;l=c+536|0;m=c+248|0;n=c+400|0;o=c+96|0;p=c+84|0;q=c+72|0;s=c+264|0;t=c+60|0;u=c+48|0;v=c+36|0;w=c+112|0;x=c+24|0;y=c+12|0;z=c;A=Hc[k[(k[b>>2]|0)+36>>2]&511](b)|0;if(!A){C=e+56|0;D=e+4|0;k[e>>2]=27524;k[C>>2]=27544;B=0;wa(508,e+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=e+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,D|0,d|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(d);Yua(H);Ava(D);I=L;J=K;break}Yua(d);B=0;K=Ia(40,e|0,111062,30)|0;L=B;B=0;a:do if(!(L&1)?(B=0,Xa(239,K|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,f|0,111093,74);N=B;B=0;do if(!(N&1)){B=0;eb(502,g|0,111168,9);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(f);R=P;S=O;break}B=0;wa(510,h|0,D|0);O=B;B=0;if(O&1){O=Rb()|0;T=Q;U=O;V=1}else{B=0;ua(163,M|0,f|0,g|0,46,h|0);O=B;B=0;if(O&1)W=1;else{B=0;eb(503,M|0,1240,229);B=0;W=0}O=Rb()|0;P=Q;Yua(h);T=P;U=O;V=W}Yua(g);Yua(f);if(V){R=T;S=U}else{X=T;Y=U;break a}}else{O=Rb()|0;R=Q;S=O}while(0);zb(M|0);X=R;Y=S}else Z=17;while(0);if((Z|0)==17){K=Rb()|0;X=Q;Y=K}k[e>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);_=X;$=Y;Qb($|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}if(Gta(A,46)|0){G=i+56|0;C=i+4|0;k[i>>2]=27524;k[G>>2]=27544;B=0;wa(508,i+56|0,C|0);J=B;B=0;if(J&1){J=Rb()|0;aa=Q;ba=J;vva(G);Qb(ba|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[G>>2]=27488;B=0;va(448,C|0);J=B;B=0;do if(J&1){I=Rb()|0;ca=Q;da=I}else{k[C>>2]=27560;I=i+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);F=B;B=0;if(F&1){F=Rb()|0;Y=Q;Yua(d);Yua(I);Ava(C);ca=Y;da=F;break}Yua(d);B=0;F=Ia(40,i|0,111178,8)|0;Y=B;B=0;b:do if(((!(Y&1)?(X=Lta(A)|0,B=0,D=Ia(40,F|0,A|0,X|0)|0,X=B,B=0,!(X&1)):0)?(B=0,X=Ia(40,D|0,111187,31)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,X|0,0)|0,X=B,B=0,!(X&1)):0){X=Ab(20)|0;B=0;eb(502,j|0,111093,74);D=B;B=0;do if(!(D&1)){B=0;eb(502,l|0,111168,9);e=B;B=0;if(e&1){e=Rb()|0;S=Q;Yua(j);ea=S;fa=e;break}B=0;wa(510,m|0,C|0);e=B;B=0;if(e&1){e=Rb()|0;ga=1;ha=Q;ia=e}else{B=0;ua(163,X|0,j|0,l|0,47,m|0);e=B;B=0;if(e&1)ja=1;else{B=0;eb(503,X|0,1240,229);B=0;ja=0}e=Rb()|0;S=Q;Yua(m);ga=ja;ha=S;ia=e}Yua(l);Yua(j);if(ga){ea=ha;fa=ia}else{ka=ha;la=ia;break b}}else{e=Rb()|0;ea=Q;fa=e}while(0);zb(X|0);ka=ea;la=fa}else Z=43;while(0);if((Z|0)==43){F=Rb()|0;ka=Q;la=F}k[i>>2]=27468;k[G>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(G);_=ka;$=la;Qb($|0)}while(0);aa=ca;ba=da;vva(G);Qb(ba|0)}if(Gta(A,91)|0){ba=n+56|0;G=n+4|0;k[n>>2]=27524;k[ba>>2]=27544;B=0;wa(508,n+56|0,G|0);da=B;B=0;if(da&1){da=Rb()|0;ma=Q;na=da;vva(ba);Qb(na|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[ba>>2]=27488;B=0;va(448,G|0);da=B;B=0;do if(da&1){ca=Rb()|0;oa=Q;pa=ca}else{k[G>>2]=27560;ca=n+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,G|0,d|0);aa=B;B=0;if(aa&1){aa=Rb()|0;la=Q;Yua(d);Yua(ca);Ava(G);oa=la;pa=aa;break}Yua(d);B=0;aa=Ia(40,n|0,111178,8)|0;la=B;B=0;c:do if(((!(la&1)?(ka=Lta(A)|0,B=0,C=Ia(40,aa|0,A|0,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,ka=Ia(40,C|0,111219,31)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,ka|0,0)|0,ka=B,B=0,!(ka&1)):0){ka=Ab(20)|0;B=0;eb(502,o|0,111093,74);C=B;B=0;do if(!(C&1)){B=0;eb(502,p|0,111168,9);i=B;B=0;if(i&1){i=Rb()|0;fa=Q;Yua(o);qa=fa;ra=i;break}B=0;wa(510,q|0,G|0);i=B;B=0;if(i&1){i=Rb()|0;sa=1;ta=Q;xa=i}else{B=0;ua(163,ka|0,o|0,p|0,48,q|0);i=B;B=0;if(i&1)ya=1;else{B=0;eb(503,ka|0,1240,229);B=0;ya=0}i=Rb()|0;fa=Q;Yua(q);sa=ya;ta=fa;xa=i}Yua(p);Yua(o);if(sa){qa=ta;ra=xa}else{za=ta;Aa=xa;break c}}else{i=Rb()|0;qa=Q;ra=i}while(0);zb(ka|0);za=qa;Aa=ra}else Z=69;while(0);if((Z|0)==69){aa=Rb()|0;za=Q;Aa=aa}k[n>>2]=27468;k[ba>>2]=27488;k[G>>2]=27560;Yua(ca);Ava(G);vva(ba);_=za;$=Aa;Qb($|0)}while(0);ma=oa;na=pa;vva(ba);Qb(na|0)}if(Gta(A,93)|0){na=s+56|0;ba=s+4|0;k[s>>2]=27524;k[na>>2]=27544;B=0;wa(508,s+56|0,ba|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Ba=Q;Ca=pa;vva(na);Qb(Ca|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[na>>2]=27488;B=0;va(448,ba|0);pa=B;B=0;do if(pa&1){oa=Rb()|0;Da=Q;Ea=oa}else{k[ba>>2]=27560;oa=s+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ba|0,d|0);ma=B;B=0;if(ma&1){ma=Rb()|0;Aa=Q;Yua(d);Yua(oa);Ava(ba);Da=Aa;Ea=ma;break}Yua(d);B=0;ma=Ia(40,s|0,111178,8)|0;Aa=B;B=0;d:do if(((!(Aa&1)?(za=Lta(A)|0,B=0,G=Ia(40,ma|0,A|0,za|0)|0,za=B,B=0,!(za&1)):0)?(B=0,za=Ia(40,G|0,111251,31)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,za|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,t|0,111093,74);G=B;B=0;do if(!(G&1)){B=0;eb(502,u|0,111168,9);n=B;B=0;if(n&1){n=Rb()|0;ra=Q;Yua(t);Fa=ra;Ga=n;break}B=0;wa(510,v|0,ba|0);n=B;B=0;if(n&1){n=Rb()|0;Ha=Q;Ja=n;Ka=1}else{B=0;ua(163,za|0,t|0,u|0,49,v|0);n=B;B=0;if(n&1)La=1;else{B=0;eb(503,za|0,1240,229);B=0;La=0}n=Rb()|0;ra=Q;Yua(v);Ha=ra;Ja=n;Ka=La}Yua(u);Yua(t);if(Ka){Fa=Ha;Ga=Ja}else{Ma=Ha;Na=Ja;break d}}else{n=Rb()|0;Fa=Q;Ga=n}while(0);zb(za|0);Ma=Fa;Na=Ga}else Z=95;while(0);if((Z|0)==95){ma=Rb()|0;Ma=Q;Na=ma}k[s>>2]=27468;k[na>>2]=27488;k[ba>>2]=27560;Yua(oa);Ava(ba);vva(na);_=Ma;$=Na;Qb($|0)}while(0);Ba=Da;Ca=Ea;vva(na);Qb(Ca|0)}Ca=k[a>>2]|0;na=a+4|0;if(Ca>>>0<(k[na>>2]|0)>>>0)Oa=Ca;else{ih(a,b)|0;r=c;return 1}while(1){Ca=k[Oa>>2]|0;Oa=Oa+4|0;if(!(Ita(Hc[k[(k[Ca>>2]|0)+36>>2]&511](Ca)|0,A)|0))break;if(Oa>>>0>=(k[na>>2]|0)>>>0){Z=131;break}}if((Z|0)==131){ih(a,b)|0;r=c;return 1}c=w+56|0;b=w+4|0;k[w>>2]=27524;k[c>>2]=27544;B=0;wa(508,w+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;Pa=Q;Qa=a;vva(c);Qb(Qa|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){na=Rb()|0;Ra=Q;Sa=na}else{k[b>>2]=27560;na=w+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[w+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Ca=Q;Yua(d);Yua(na);Ava(b);Ra=Ca;Sa=Oa;break}Yua(d);B=0;Oa=Ia(40,w|0,111283,9)|0;Ca=B;B=0;e:do if(((!(Ca&1)?(Ea=Lta(A)|0,B=0,Da=Ia(40,Oa|0,A|0,Ea|0)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Ea=Ia(40,Da|0,111293,22)|0,Da=B,B=0,!(Da&1)):0)?(B=0,Xa(239,Ea|0,0)|0,Ea=B,B=0,!(Ea&1)):0){Ea=Ab(20)|0;B=0;eb(502,x|0,111093,74);Da=B;B=0;do if(!(Da&1)){B=0;eb(502,y|0,111168,9);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Na=Q;Yua(x);Ta=Na;Ua=Ba;break}B=0;wa(510,z|0,b|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Va=1;Wa=Q;Ya=Ba}else{B=0;ua(163,Ea|0,x|0,y|0,56,z|0);Ba=B;B=0;if(Ba&1)Za=1;else{B=0;eb(503,Ea|0,1240,229);B=0;Za=0}Ba=Rb()|0;Na=Q;Yua(z);Va=Za;Wa=Na;Ya=Ba}Yua(y);Yua(x);if(Va){Ta=Wa;Ua=Ya}else{_a=Wa;$a=Ya;break e}}else{Ba=Rb()|0;Ta=Q;Ua=Ba}while(0);zb(Ea|0);_a=Ta;$a=Ua}else Z=123;while(0);if((Z|0)==123){Oa=Rb()|0;_a=Q;$a=Oa}k[w>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(na);Ava(b);vva(c);_=_a;$=$a;Qb($|0)}while(0);Pa=Ra;Qa=Sa;vva(c);Qb(Qa|0);return 0}function r_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0;c=r;r=r+1264|0;d=c+1252|0;e=c+1080|0;f=c+1240|0;g=c+928|0;h=c+1228|0;i=c+792|0;j=c+1216|0;l=c+640|0;m=c+1064|0;n=c+488|0;o=c+776|0;p=c+352|0;q=c+624|0;s=c+200|0;t=c+336|0;u=c+48|0;v=c+36|0;w=c+64|0;x=c+24|0;y=c+12|0;z=c;A=k[a>>2]|0;C=a+4|0;if(A>>>0<(k[C>>2]|0)>>>0)D=A;else{E=0;r=c;return E|0}while(1){A=k[D>>2]|0;if(!A){F=3;break}a=Hc[k[(k[A>>2]|0)+36>>2]&511](A)|0;if(!(Mta(b,a,Lta(Hc[k[(k[A>>2]|0)+36>>2]&511](A)|0)|0)|0)){if(!(Ita(b,Hc[k[(k[A>>2]|0)+36>>2]&511](A)|0)|0)){E=A;F=146;break}if((Hc[k[(k[A>>2]|0)+20>>2]&511](A)|0)==982){G=A;F=113;break}if((Hc[k[(k[A>>2]|0)+20>>2]&511](A)|0)!=983){H=A;I=A;F=117;break}if((Hc[k[(k[A>>2]|0)+40>>2]&511](A)|0)>0){J=A;F=116;break}}D=D+4|0;if(D>>>0>=(k[C>>2]|0)>>>0){E=0;F=146;break}}if((F|0)==3){C=e+56|0;D=e+4|0;k[e>>2]=27524;k[C>>2]=27544;B=0;wa(508,e+56|0,D|0);A=B;B=0;if(A&1){A=Rb()|0;K=Q;L=A;vva(C);Qb(L|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);A=B;B=0;do if(A&1){a=Rb()|0;M=Q;N=a}else{k[D>>2]=27560;a=e+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,D|0,d|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(d);Yua(a);Ava(D);M=P;N=O;break}Yua(d);B=0;Ia(40,e|0,111316,53)|0;O=B;B=0;do if(!(O&1)?(B=0,wa(510,f|0,D|0),P=B,B=0,!(P&1)):0){B=0;ya(424,f|0)|0;P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(f);S=R;T=P;break}Yua(f);k[e>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(a);Ava(D);vva(C);P=g+56|0;R=g+4|0;k[g>>2]=27524;k[P>>2]=27544;B=0;wa(508,g+56|0,R|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;W=U;vva(P);Qb(W|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[P>>2]=27488;B=0;va(448,R|0);U=B;B=0;do if(U&1){X=Rb()|0;Y=Q;Z=X}else{k[R>>2]=27560;X=g+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,R|0,d|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(d);Yua(X);Ava(R);Y=$;Z=_;break}Yua(d);B=0;Ia(40,g|0,149177,1)|0;_=B;B=0;do if(!(_&1)?(B=0,wa(510,h|0,R|0),$=B,B=0,!($&1)):0){B=0;ya(424,h|0)|0;$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(h);ba=aa;ca=$;break}Yua(h);k[g>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(P);$=i+56|0;aa=i+4|0;k[i>>2]=27524;k[$>>2]=27544;B=0;wa(508,i+56|0,aa|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva($);Qb(fa|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[$>>2]=27488;B=0;va(448,aa|0);da=B;B=0;do if(da&1){ga=Rb()|0;ha=Q;ia=ga}else{k[aa>>2]=27560;ga=i+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,aa|0,d|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(d);Yua(ga);Ava(aa);ha=ka;ia=ja;break}Yua(d);B=0;Ia(40,i|0,111370,51)|0;ja=B;B=0;do if(ja&1)F=90;else{B=0;wa(510,j|0,aa|0);ka=B;B=0;if(ka&1){F=90;break}B=0;ya(424,j|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(j);ma=la;na=ka;break}Yua(j);k[i>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva($);ka=l+56|0;la=l+4|0;k[l>>2]=27524;k[ka>>2]=27544;B=0;wa(508,l+56|0,la|0);oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;qa=oa;vva(ka);Qb(qa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);oa=B;B=0;do if(oa&1){ra=Rb()|0;sa=Q;ta=ra}else{k[la>>2]=27560;ra=l+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[l+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,la|0,d|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(d);Yua(ra);Ava(la);sa=za;ta=xa;break}Yua(d);B=0;Ia(40,l|0,149177,1)|0;xa=B;B=0;do if(xa&1)F=93;else{B=0;wa(510,m|0,la|0);za=B;B=0;if(za&1){F=93;break}B=0;ya(424,m|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(m);Ba=Aa;Ca=za;break}Yua(m);k[l>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);za=n+56|0;Aa=n+4|0;k[n>>2]=27524;k[za>>2]=27544;B=0;wa(508,n+56|0,Aa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Fa=Da;vva(za);Qb(Fa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[za>>2]=27488;B=0;va(448,Aa|0);Da=B;B=0;do if(Da&1){Ga=Rb()|0;Ha=Q;Ja=Ga}else{k[Aa>>2]=27560;Ga=n+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Aa|0,d|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;La=Q;Yua(d);Yua(Ga);Ava(Aa);Ha=La;Ja=Ka;break}Yua(d);B=0;Ia(40,n|0,111422,84)|0;Ka=B;B=0;do if(Ka&1)F=96;else{B=0;wa(510,o|0,Aa|0);La=B;B=0;if(La&1){F=96;break}B=0;ya(424,o|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Yua(o);Na=La;Oa=Ma;break}Yua(o);k[n>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);Ma=p+56|0;La=p+4|0;k[p>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,p+56|0,La|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Ra=Pa;vva(Ma);Qb(Ra|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Ma>>2]=27488;B=0;va(448,La|0);Pa=B;B=0;do if(Pa&1){Sa=Rb()|0;Ta=Q;Ua=Sa}else{k[La>>2]=27560;Sa=p+36|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[p+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,La|0,d|0);Va=B;B=0;if(Va&1){Va=Rb()|0;Wa=Q;Yua(d);Yua(Sa);Ava(La);Ta=Wa;Ua=Va;break}Yua(d);B=0;Ia(40,p|0,149177,1)|0;Va=B;B=0;do if(Va&1)F=99;else{B=0;wa(510,q|0,La|0);Wa=B;B=0;if(Wa&1){F=99;break}B=0;ya(424,q|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(q);Za=Wa;_a=Ya;break}Yua(q);k[p>>2]=27468;k[Ma>>2]=27488;k[La>>2]=27560;Yua(Sa);Ava(La);vva(Ma);Ya=s+56|0;Wa=s+4|0;k[s>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,s+56|0,Wa|0);$a=B;B=0;if($a&1){$a=Rb()|0;ab=Q;bb=$a;vva(Ya);Qb(bb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ya>>2]=27488;B=0;va(448,Wa|0);$a=B;B=0;do if($a&1){cb=Rb()|0;db=Q;fb=cb}else{k[Wa>>2]=27560;cb=s+36|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Wa|0,d|0);gb=B;B=0;if(gb&1){gb=Rb()|0;hb=Q;Yua(d);Yua(cb);Ava(Wa);db=hb;fb=gb;break}Yua(d);B=0;gb=Ia(40,s|0,111507,37)|0;hb=B;B=0;a:do if(hb&1)F=102;else{B=0;Xa(239,gb|0,0)|0;ib=B;B=0;if(ib&1){F=102;break}ib=Ab(20)|0;B=0;eb(502,t|0,111093,74);jb=B;B=0;do if(!(jb&1)){B=0;eb(502,u|0,111545,9);kb=B;B=0;if(kb&1){kb=Rb()|0;lb=Q;Yua(t);mb=lb;nb=kb;break}B=0;wa(510,v|0,Wa|0);kb=B;B=0;if(kb&1){kb=Rb()|0;ob=1;pb=kb;qb=Q}else{B=0;ua(163,ib|0,t|0,u|0,86,v|0);kb=B;B=0;if(kb&1)rb=1;else{B=0;eb(503,ib|0,1240,229);B=0;rb=0}kb=Rb()|0;lb=Q;Yua(v);ob=rb;pb=kb;qb=lb}Yua(u);Yua(t);if(ob){mb=qb;nb=pb}else{sb=pb;tb=qb;break a}}else{lb=Rb()|0;mb=Q;nb=lb}while(0);zb(ib|0);sb=nb;tb=mb}while(0);if((F|0)==102){gb=Rb()|0;sb=gb;tb=Q}k[s>>2]=27468;k[Ya>>2]=27488;k[Wa>>2]=27560;Yua(cb);Ava(Wa);vva(Ya);ub=sb;vb=tb;Qb(ub|0)}while(0);ab=db;bb=fb;vva(Ya);Qb(bb|0)}while(0);if((F|0)==99){Va=Rb()|0;Za=Va;_a=Q}k[p>>2]=27468;k[Ma>>2]=27488;k[La>>2]=27560;Yua(Sa);Ava(La);vva(Ma);ub=Za;vb=_a;Qb(ub|0)}while(0);Qa=Ta;Ra=Ua;vva(Ma);Qb(Ra|0)}while(0);if((F|0)==96){Ka=Rb()|0;Na=Ka;Oa=Q}k[n>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);ub=Na;vb=Oa;Qb(ub|0)}while(0);Ea=Ha;Fa=Ja;vva(za);Qb(Fa|0)}while(0);if((F|0)==93){xa=Rb()|0;Ba=Q;Ca=xa}k[l>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);ub=Ca;vb=Ba;Qb(ub|0)}while(0);pa=sa;qa=ta;vva(ka);Qb(qa|0)}while(0);if((F|0)==90){ja=Rb()|0;ma=Q;na=ja}k[i>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva($);ub=na;vb=ma;Qb(ub|0)}while(0);ea=ha;fa=ia;vva($);Qb(fa|0)}else F=87;while(0);if((F|0)==87){_=Rb()|0;ba=Q;ca=_}k[g>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(P);ub=ca;vb=ba;Qb(ub|0)}while(0);V=Y;W=Z;vva(P);Qb(W|0)}else F=84;while(0);if((F|0)==84){O=Rb()|0;S=Q;T=O}k[e>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(a);Ava(D);vva(C);ub=T;vb=S;Qb(ub|0)}while(0);K=M;L=N;vva(C);Qb(L|0)}else if((F|0)==113){E=r_(k[G+8>>2]|0,b)|0;r=c;return E|0}else if((F|0)==116){E=r_(k[k[J+8>>2]>>2]|0,b)|0;r=c;return E|0}else if((F|0)==117){J=w+56|0;G=w+4|0;k[w>>2]=27524;k[J>>2]=27544;B=0;wa(508,w+56|0,G|0);L=B;B=0;if(L&1){L=Rb()|0;wb=Q;xb=L;vva(J);Qb(xb|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[J>>2]=27488;B=0;va(448,G|0);L=B;B=0;do if(L&1){C=Rb()|0;yb=Q;Bb=C}else{k[G>>2]=27560;C=w+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[w+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,G|0,d|0);N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(d);Yua(C);Ava(G);yb=M;Bb=N;break}Yua(d);B=0;N=Ia(40,w|0,111555,22)|0;M=B;B=0;b:do if((((((!(M&1)?(K=Lta(b)|0,B=0,S=Ia(40,N|0,b|0,K|0)|0,K=B,B=0,!(K&1)):0)?(B=0,K=Ia(40,S|0,111578,24)|0,S=B,B=0,!(S&1)):0)?(B=0,S=ya(k[(k[I>>2]|0)+20>>2]|0,H|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=ya(427,S|0)|0,S=B,B=0,!(S&1)):0)?(S=Lta(T)|0,B=0,D=Ia(40,K|0,T|0,S|0)|0,S=B,B=0,!(S&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,x|0,111093,74);S=B;B=0;do if(!(S&1)){B=0;eb(502,y|0,111545,9);T=B;B=0;if(T&1){T=Rb()|0;K=Q;Yua(x);Cb=T;Db=K;break}B=0;wa(510,z|0,G|0);K=B;B=0;if(K&1){K=Rb()|0;Eb=K;Fb=Q;Gb=1}else{B=0;ua(163,D|0,x|0,y|0,111,z|0);K=B;B=0;if(K&1)Hb=1;else{B=0;eb(503,D|0,1240,229);B=0;Hb=0}K=Rb()|0;T=Q;Yua(z);Eb=K;Fb=T;Gb=Hb}Yua(y);Yua(x);if(Gb){Cb=Eb;Db=Fb}else{Ib=Eb;Jb=Fb;break b}}else{T=Rb()|0;Cb=T;Db=Q}while(0);zb(D|0);Ib=Cb;Jb=Db}else F=137;while(0);if((F|0)==137){N=Rb()|0;Ib=N;Jb=Q}k[w>>2]=27468;k[J>>2]=27488;k[G>>2]=27560;Yua(C);Ava(G);vva(J);ub=Ib;vb=Jb;Qb(ub|0)}while(0);wb=yb;xb=Bb;vva(J);Qb(xb|0)}else if((F|0)==146){r=c;return E|0}return 0}function s_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+8|0;f=d;i[a>>0]=91;i[a+1>>0]=0;g=c+-1|0;h=a+(Lta(a)|0)|0;if((c|0)>1){c=h;j=0;while(1){k[e>>2]=k[b+(j<<2)>>2];qta(c,111607,e)|0;j=j+1|0;l=a+(Lta(a)|0)|0;if((j|0)==(g|0)){m=l;break}else c=l}}else m=h;k[f>>2]=k[b+(g<<2)>>2];qta(m,111603,f)|0;r=d;return 0}function t_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=r;r=r+16|0;e=d;bO(b,e,363);if(!(i[e>>0]|0)){r=d;return}Zka(c,a,111611,63);r=d;return}function u_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0.0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0;b=r;r=r+1136|0;c=b+1108|0;d=b+24|0;e=b+16|0;f=b+8|0;g=b;h=b+1133|0;j=b+1132|0;l=b+1131|0;m=b+1129|0;n=b+1128|0;o=b+1127|0;q=b+1126|0;s=b+1125|0;t=b+1124|0;u=b+1123|0;v=b+1122|0;w=b+1120|0;x=b+1104|0;y=b+1100|0;z=b+1096|0;A=b+1092|0;C=b+1076|0;D=b+1060|0;E=b+1056|0;F=b+1052|0;G=b+904|0;H=b+1080|0;I=b+752|0;J=b+1064|0;K=b+616|0;L=b+1040|0;M=b+464|0;N=b+888|0;O=b+328|0;P=b+600|0;R=b+168|0;S=b+316|0;T=b+32|0;U=b+304|0;k[E>>2]=0;V=a+44|0;cO(k[V>>2]|0,z,298);cO(k[V>>2]|0,F,766);dO(k[V>>2]|0,d,354);dO(k[V>>2]|0,e,355);dO(k[V>>2]|0,f,358);dO(k[V>>2]|0,g,67);bO(k[V>>2]|0,b+1121|0,314);cO(k[V>>2]|0,x,328);cO(k[V>>2]|0,y,329);bO(k[V>>2]|0,w,357);bO(k[V>>2]|0,h,362);bO(k[V>>2]|0,j,364);bO(k[V>>2]|0,l,360);bO(k[V>>2]|0,m,365);bO(k[V>>2]|0,o,366);bO(k[V>>2]|0,q,370);bO(k[V>>2]|0,s,361);bO(k[V>>2]|0,n,363);bO(k[V>>2]|0,t,369);bO(k[V>>2]|0,u,367);bO(k[V>>2]|0,v,368);bO(k[V>>2]|0,b+1130|0,99);if(i[n>>0]|0)cO(k[V>>2]|0,A,942);cO(k[V>>2]|0,D,371);if(k[D>>2]|0)gO(k[V>>2]|0,E,D,372);if(k[y>>2]|0)Ch(a);W=+p[d>>3];a:do if(W<+p[e>>3]-+p[g>>3]*2.220446049250313e-16){d=G+56|0;X=G+4|0;Y=G+56|0;Z=G+128|0;$=G+132|0;aa=G+36|0;ba=G+52|0;ca=I+56|0;da=I+4|0;ea=I+56|0;fa=I+128|0;ga=I+132|0;ha=I+36|0;ia=I+52|0;ja=O+56|0;ka=O+4|0;la=O+56|0;ma=O+128|0;na=O+132|0;oa=O+36|0;pa=O+52|0;qa=a+48|0;ra=R+56|0;sa=R+4|0;ta=R+56|0;ua=R+128|0;xa=R+132|0;za=R+36|0;Aa=R+52|0;Ba=T+56|0;Ca=T+4|0;Da=T+56|0;Ea=T+128|0;Fa=T+132|0;Ga=T+36|0;Ha=T+52|0;Ja=M+56|0;Ka=M+4|0;La=M+56|0;Ma=M+128|0;Na=M+132|0;Oa=M+36|0;Pa=M+52|0;Qa=K+56|0;Ra=K+4|0;Ta=K+56|0;Ua=K+128|0;Va=K+132|0;Wa=K+36|0;Ya=K+52|0;Za=a+20|0;_a=a+24|0;$a=a+28|0;ab=a+36|0;bb=a+40|0;cb=W;b:while(1){if(i[w>>0]|0){hi(a,f);db=+p[f>>3];eb=+p[e>>3];if(cb+db>eb){fb=eb-cb;p[f>>3]=fb;gb=fb}else gb=db;pO(k[V>>2]|0,gb,358)}k[F>>2]=(k[F>>2]|0)+1;cb=cb+ +p[f>>3];pO(k[V>>2]|0,cb,767);oO(k[V>>2]|0,k[F>>2]|0,766);if(CY()|0){k[G>>2]=27524;k[d>>2]=27544;B=0;wa(508,Y|0,X|0);hb=B;B=0;if(hb&1){ib=18;break}k[Z>>2]=0;k[$>>2]=-1;k[G>>2]=27468;k[d>>2]=27488;B=0;va(448,X|0);hb=B;B=0;if(hb&1){ib=19;break}k[X>>2]=27560;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[ba>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,X|0,c|0);hb=B;B=0;if(hb&1){ib=17;break}Yua(c);B=0;hb=Ia(40,G|0,111627,10)|0;jb=B;B=0;if(jb&1){ib=34;break}B=0;jb=Xa(242,hb|0,k[F>>2]|0)|0;hb=B;B=0;if(hb&1){ib=34;break}B=0;hb=Ia(40,jb|0,148676,1)|0;jb=B;B=0;if(jb&1){ib=34;break}db=+_(+((+p[e>>3]-cb)/+p[f>>3]));B=0;jb=Sa(1,hb|0,+(db+ +(k[F>>2]|0)))|0;hb=B;B=0;if(hb&1){ib=34;break}B=0;hb=Ia(40,jb|0,111638,13)|0;jb=B;B=0;if(jb&1){ib=34;break}k[hb+(k[(k[hb>>2]|0)+-12>>2]|0)+8>>2]=4;B=0;jb=Sa(1,hb|0,+(cb/+p[g>>3]))|0;hb=B;B=0;if(hb&1){ib=34;break}B=0;hb=Ia(40,jb|0,111652,13)|0;jb=B;B=0;if(jb&1){ib=34;break}B=0;jb=Sa(1,hb|0,+(+p[f>>3]/+p[g>>3]))|0;hb=B;B=0;if(hb&1){ib=34;break}B=0;Ia(40,jb|0,145593,2)|0;jb=B;B=0;if(jb&1){ib=34;break}B=0;wa(510,H|0,X|0);jb=B;B=0;if(jb&1){ib=34;break}B=0;ya(425,H|0)|0;jb=B;B=0;if(jb&1){ib=35;break}Yua(H);k[G>>2]=27468;k[d>>2]=27488;k[X>>2]=27560;Yua(aa);Ava(X);vva(d)}jb=k[F>>2]|0;if(!((jb|0)%(k[x>>2]|0)|0))kb=1;else kb=(jb|0)==1?1:cb>=+p[e>>3]-+p[g>>3]*2.220446049250313e-16;mO(k[V>>2]|0,kb,759);if((i[m>>0]|0)!=0&(k[z>>2]|0)==302){if(i[l>>0]|0){cO(k[V>>2]|0,C,381);jb=k[C>>2]|0;if((jb|0)==438){Soa(a,521);lb=k[C>>2]|0}else lb=jb;if((lb|0)==457)Soa(a,521)}if(CY()|0){k[I>>2]=27524;k[ca>>2]=27544;B=0;wa(508,ea|0,da|0);jb=B;B=0;if(jb&1){ib=50;break}k[fa>>2]=0;k[ga>>2]=-1;k[I>>2]=27468;k[ca>>2]=27488;B=0;va(448,da|0);jb=B;B=0;if(jb&1){ib=51;break}k[da>>2]=27560;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[ia>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);jb=B;B=0;if(jb&1){ib=49;break}Yua(c);B=0;Ia(40,I|0,111666,28)|0;jb=B;B=0;if(jb&1){ib=58;break}B=0;wa(510,J|0,da|0);jb=B;B=0;if(jb&1){ib=58;break}B=0;ya(425,J|0)|0;jb=B;B=0;if(jb&1){ib=59;break}Yua(J);k[I>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ha);Ava(da);vva(ca)}A_(a)}if(i[v>>0]|0)h0(a);if(i[h>>0]|0)j0(a);if(i[u>>0]|0)q0(a);if(i[t>>0]|0)r0(a);if(i[l>>0]|0)B_(a);if(i[j>>0]|0){x_(a);Dh(a)|0}if(i[n>>0]|0){if(CY()|0){k[K>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,Ta|0,Ra|0);jb=B;B=0;if(jb&1){ib=80;break}k[Ua>>2]=0;k[Va>>2]=-1;k[K>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Ra|0);jb=B;B=0;if(jb&1){ib=81;break}k[Ra>>2]=27560;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Ya>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ra|0,c|0);jb=B;B=0;if(jb&1){ib=79;break}Yua(c);B=0;Ia(40,K|0,111695,41)|0;jb=B;B=0;if(jb&1){ib=88;break}B=0;wa(510,L|0,Ra|0);jb=B;B=0;if(jb&1){ib=88;break}B=0;ya(425,L|0)|0;jb=B;B=0;if(jb&1){ib=89;break}Yua(L);k[K>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa)}s0(k[Za>>2]|0,k[_a>>2]|0,k[$a>>2]|0,k[ab>>2]|0,k[bb>>2]|0,k[V>>2]|0);oO(k[V>>2]|0,928,575);y_(a);oO(k[V>>2]|0,64,575);y_(a);oO(k[V>>2]|0,339,575);y_(a);if(kb){k[c>>2]=k[9192];k[c+4>>2]=k[9193];k[c+8>>2]=k[9194];fi(a,qa,c,3,1)}}Boa(a);if(i[o>>0]|0){if(CY()|0){k[M>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,La|0,Ka|0);jb=B;B=0;if(jb&1){ib=99;break}k[Ma>>2]=0;k[Na>>2]=-1;k[M>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ka|0);jb=B;B=0;if(jb&1){ib=100;break}k[Ka>>2]=27560;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[Pa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ka|0,c|0);jb=B;B=0;if(jb&1){ib=98;break}Yua(c);B=0;Ia(40,M|0,111737,42)|0;jb=B;B=0;if(jb&1){ib=107;break}B=0;wa(510,N|0,Ka|0);jb=B;B=0;if(jb&1){ib=107;break}B=0;ya(425,N|0)|0;jb=B;B=0;if(jb&1){ib=108;break}Yua(N);k[M>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja)}Eia(a)}if((i[s>>0]|i[q>>0])<<24>>24)Wia(a);if(CY()|0){k[O>>2]=27524;k[ja>>2]=27544;B=0;wa(508,la|0,ka|0);jb=B;B=0;if(jb&1){ib=118;break}k[ma>>2]=0;k[na>>2]=-1;k[O>>2]=27468;k[ja>>2]=27488;B=0;va(448,ka|0);jb=B;B=0;if(jb&1){ib=119;break}k[ka>>2]=27560;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[pa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ka|0,c|0);jb=B;B=0;if(jb&1){ib=117;break}Yua(c);B=0;Ia(40,O|0,111780,31)|0;jb=B;B=0;if(jb&1){ib=126;break}B=0;wa(510,P|0,ka|0);jb=B;B=0;if(jb&1){ib=126;break}B=0;ya(425,P|0)|0;jb=B;B=0;if(jb&1){ib=127;break}Yua(P);k[O>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(oa);Ava(ka);vva(ja)}ci(a,qa,k[E>>2]|0,k[D>>2]|0,kb);do if(i[n>>0]|0){if((k[A>>2]&-2|0)!=924)break;k[c>>2]=928;fi(a,qa,c,1,kb)}while(0);if(kb){if(CY()|0){k[R>>2]=27524;k[ra>>2]=27544;B=0;wa(508,ta|0,sa|0);jb=B;B=0;if(jb&1){ib=138;break}k[ua>>2]=0;k[xa>>2]=-1;k[R>>2]=27468;k[ra>>2]=27488;B=0;va(448,sa|0);jb=B;B=0;if(jb&1){ib=139;break}k[sa>>2]=27560;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[Aa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sa|0,c|0);jb=B;B=0;if(jb&1){ib=137;break}Yua(c);B=0;Ia(40,R|0,116371,28)|0;jb=B;B=0;if(jb&1){ib=146;break}B=0;wa(510,S|0,sa|0);jb=B;B=0;if(jb&1){ib=146;break}B=0;ya(425,S|0)|0;jb=B;B=0;if(jb&1){ib=147;break}Yua(S);k[R>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(za);Ava(sa);vva(ra)}CZ(a)}jb=k[y>>2]|0;do if(jb){if((k[F>>2]|0)%(jb|0)|0)break;if(CY()|0){k[T>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,Da|0,Ca|0);hb=B;B=0;if(hb&1){ib=157;break b}k[Ea>>2]=0;k[Fa>>2]=-1;k[T>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);hb=B;B=0;if(hb&1){ib=158;break b}k[Ca>>2]=27560;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[Ha>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);hb=B;B=0;if(hb&1){ib=156;break b}Yua(c);B=0;Ia(40,T|0,111812,24)|0;hb=B;B=0;if(hb&1){ib=165;break b}B=0;wa(510,U|0,Ca|0);hb=B;B=0;if(hb&1){ib=165;break b}B=0;ya(425,U|0)|0;hb=B;B=0;if(hb&1){ib=166;break b}Yua(U);k[T>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ga);Ava(Ca);vva(Ba)}Ah(a)}while(0);if(!(cb<+p[e>>3]-+p[g>>3]*2.220446049250313e-16))break a}switch(ib|0){case 17:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(aa);Ava(X);mb=Fa;nb=Ha;ib=20;break}case 18:{Ha=Rb()|0;ob=Q;pb=Ha;vva(d);Qb(pb|0);break}case 19:{Ha=Rb()|0;mb=Q;nb=Ha;ib=20;break}case 34:{Ha=Rb()|0;qb=Q;rb=Ha;ib=36;break}case 35:{Ha=Rb()|0;Fa=Q;Yua(H);qb=Fa;rb=Ha;ib=36;break}case 49:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(ha);Ava(da);sb=Fa;tb=Ha;ib=52;break}case 50:{Ha=Rb()|0;ub=Q;vb=Ha;vva(ca);Qb(vb|0);break}case 51:{Ha=Rb()|0;sb=Q;tb=Ha;ib=52;break}case 58:{Ha=Rb()|0;wb=Q;xb=Ha;ib=60;break}case 59:{Ha=Rb()|0;Fa=Q;Yua(J);wb=Fa;xb=Ha;ib=60;break}case 79:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(Wa);Ava(Ra);yb=Fa;zb=Ha;ib=82;break}case 80:{Ha=Rb()|0;Ab=Q;Bb=Ha;vva(Qa);Qb(Bb|0);break}case 81:{Ha=Rb()|0;yb=Q;zb=Ha;ib=82;break}case 88:{Ha=Rb()|0;Cb=Q;Db=Ha;ib=90;break}case 89:{Ha=Rb()|0;Fa=Q;Yua(L);Cb=Fa;Db=Ha;ib=90;break}case 98:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(Oa);Ava(Ka);Eb=Fa;Fb=Ha;ib=101;break}case 99:{Ha=Rb()|0;Gb=Q;Hb=Ha;vva(Ja);Qb(Hb|0);break}case 100:{Ha=Rb()|0;Eb=Q;Fb=Ha;ib=101;break}case 107:{Ha=Rb()|0;Ib=Q;Jb=Ha;ib=109;break}case 108:{Ha=Rb()|0;Fa=Q;Yua(N);Ib=Fa;Jb=Ha;ib=109;break}case 117:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(oa);Ava(ka);Kb=Fa;Lb=Ha;ib=120;break}case 118:{Ha=Rb()|0;Mb=Q;Nb=Ha;vva(ja);Qb(Nb|0);break}case 119:{Ha=Rb()|0;Kb=Q;Lb=Ha;ib=120;break}case 126:{Ha=Rb()|0;Ob=Q;Pb=Ha;ib=128;break}case 127:{Ha=Rb()|0;Fa=Q;Yua(P);Ob=Fa;Pb=Ha;ib=128;break}case 137:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(za);Ava(sa);Sb=Fa;Tb=Ha;ib=140;break}case 138:{Ha=Rb()|0;Ub=Q;Vb=Ha;vva(ra);Qb(Vb|0);break}case 139:{Ha=Rb()|0;Sb=Q;Tb=Ha;ib=140;break}case 146:{Ha=Rb()|0;Wb=Q;Xb=Ha;ib=148;break}case 147:{Ha=Rb()|0;Fa=Q;Yua(S);Wb=Fa;Xb=Ha;ib=148;break}case 156:{Ha=Rb()|0;Fa=Q;Yua(c);Yua(Ga);Ava(Ca);Yb=Fa;Zb=Ha;ib=159;break}case 157:{Ha=Rb()|0;_b=Q;$b=Ha;vva(Ba);Qb($b|0);break}case 158:{Ha=Rb()|0;Yb=Q;Zb=Ha;ib=159;break}case 165:{Ha=Rb()|0;ac=Q;bc=Ha;ib=167;break}case 166:{Ha=Rb()|0;Fa=Q;Yua(U);ac=Fa;bc=Ha;ib=167;break}}switch(ib|0){case 20:{ob=mb;pb=nb;vva(d);Qb(pb|0);break}case 36:{k[G>>2]=27468;k[d>>2]=27488;k[X>>2]=27560;Yua(aa);Ava(X);vva(d);cc=qb;dc=rb;Qb(dc|0);break}case 52:{ub=sb;vb=tb;vva(ca);Qb(vb|0);break}case 60:{k[I>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ha);Ava(da);vva(ca);cc=wb;dc=xb;Qb(dc|0);break}case 82:{Ab=yb;Bb=zb;vva(Qa);Qb(Bb|0);break}case 90:{k[K>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa);cc=Cb;dc=Db;Qb(dc|0);break}case 101:{Gb=Eb;Hb=Fb;vva(Ja);Qb(Hb|0);break}case 109:{k[M>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja);cc=Ib;dc=Jb;Qb(dc|0);break}case 120:{Mb=Kb;Nb=Lb;vva(ja);Qb(Nb|0);break}case 128:{k[O>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(oa);Ava(ka);vva(ja);cc=Ob;dc=Pb;Qb(dc|0);break}case 140:{Ub=Sb;Vb=Tb;vva(ra);Qb(Vb|0);break}case 148:{k[R>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(za);Ava(sa);vva(ra);cc=Wb;dc=Xb;Qb(dc|0);break}case 159:{_b=Yb;$b=Zb;vva(Ba);Qb($b|0);break}case 167:{k[T>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ga);Ava(Ca);vva(Ba);cc=ac;dc=bc;Qb(dc|0);break}}}while(0);gi(a);a=k[D>>2]|0;if(!a){r=b;return}dc=k[E>>2]|0;if((a|0)>0){bc=dc;ac=a;a=0;while(1){cc=bc+(a<<2)|0;T=k[cc>>2]|0;if(!T)ec=ac;else{Tqa(T);ec=k[D>>2]|0}k[cc>>2]=0;a=a+1|0;cc=k[E>>2]|0;if((a|0)>=(ec|0)){fc=cc;break}else{bc=cc;ac=ec}}}else fc=dc;if(fc)Tqa(fc);k[E>>2]=0;r=b;return}function v_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0;b=r;r=r+1248|0;c=b+1232|0;d=b+1228|0;e=b+1224|0;f=b+1245|0;g=b+1244|0;h=b+1208|0;j=b;l=b+1192|0;m=b+1176|0;n=b+1040|0;o=b+1212|0;q=b+888|0;s=b+1196|0;t=b+736|0;u=b+1180|0;v=b+600|0;w=b+1024|0;x=b+448|0;y=b+872|0;z=b+312|0;A=b+584|0;C=b+176|0;D=b+160|0;E=b+24|0;F=b+8|0;k[d>>2]=0;k[e>>2]=0;k[l>>2]=0;k[m>>2]=0;G=a+44|0;bO(k[G>>2]|0,f,759);cO(k[G>>2]|0,h,335);bO(k[G>>2]|0,g,340);dO(k[G>>2]|0,j,337);mO(k[G>>2]|0,0,759);cO(k[G>>2]|0,l,336);if(k[l>>2]|0)gO(k[G>>2]|0,m,l,338);G=n+56|0;H=n+4|0;I=n+56|0;J=n+128|0;K=n+132|0;L=n+36|0;M=n+52|0;N=q+56|0;O=q+4|0;P=q+56|0;R=q+128|0;S=q+132|0;T=q+36|0;U=q+52|0;V=t+56|0;W=t+4|0;X=t+56|0;Y=t+128|0;Z=t+132|0;_=t+36|0;$=t+52|0;aa=v+56|0;ba=v+4|0;ca=v+56|0;da=v+128|0;ea=v+132|0;fa=v+36|0;ga=v+52|0;ha=x+56|0;ia=x+4|0;ja=x+56|0;ka=x+128|0;la=x+132|0;ma=x+36|0;na=x+52|0;oa=z+56|0;pa=z+4|0;qa=z+56|0;ra=z+128|0;sa=z+132|0;ta=z+36|0;ua=z+52|0;xa=1;za=0;Aa=0;while(1){if(CY()|0){k[n>>2]=27524;k[G>>2]=27544;B=0;wa(508,I|0,H|0);Ba=B;B=0;if(Ba&1){Ca=9;break}k[J>>2]=0;k[K>>2]=-1;k[n>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);Ba=B;B=0;if(Ba&1){Ca=10;break}k[H>>2]=27560;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[M>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);Ba=B;B=0;if(Ba&1){Ca=8;break}Yua(c);B=0;Ia(40,n|0,111837,56)|0;Ba=B;B=0;if(Ba&1){Ca=17;break}B=0;wa(510,o|0,H|0);Ba=B;B=0;if(Ba&1){Ca=17;break}B=0;ya(425,o|0)|0;Ba=B;B=0;if(Ba&1){Ca=18;break}Yua(o);k[n>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(G)}if(CY()|0){k[q>>2]=27524;k[N>>2]=27544;B=0;wa(508,P|0,O|0);Ba=B;B=0;if(Ba&1){Ca=25;break}k[R>>2]=0;k[S>>2]=-1;k[q>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);Ba=B;B=0;if(Ba&1){Ca=26;break}k[O>>2]=27560;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[U>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,O|0,c|0);Ba=B;B=0;if(Ba&1){Ca=24;break}Yua(c);B=0;Ba=Ia(40,q|0,111894,48)|0;Da=B;B=0;if(Da&1){Ca=35;break}B=0;Da=Xa(242,Ba|0,xa|0)|0;Ba=B;B=0;if(Ba&1){Ca=35;break}B=0;Ia(40,Da|0,149177,1)|0;Da=B;B=0;if(Da&1){Ca=35;break}B=0;wa(510,s|0,O|0);Da=B;B=0;if(Da&1){Ca=35;break}B=0;ya(425,s|0)|0;Da=B;B=0;if(Da&1){Ca=36;break}Yua(s);k[q>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N)}if(CY()|0){k[t>>2]=27524;k[V>>2]=27544;B=0;wa(508,X|0,W|0);Da=B;B=0;if(Da&1){Ca=43;break}k[Y>>2]=0;k[Z>>2]=-1;k[t>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);Da=B;B=0;if(Da&1){Ca=44;break}k[W>>2]=27560;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[$>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,W|0,c|0);Da=B;B=0;if(Da&1){Ca=42;break}Yua(c);B=0;Ia(40,t|0,111943,53)|0;Da=B;B=0;if(Da&1){Ca=51;break}B=0;wa(510,u|0,W|0);Da=B;B=0;if(Da&1){Ca=51;break}B=0;ya(425,u|0)|0;Da=B;B=0;if(Da&1){Ca=52;break}Yua(u);k[t>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(_);Ava(W);vva(V)}if(CY()|0){k[v>>2]=27524;k[aa>>2]=27544;B=0;wa(508,ca|0,ba|0);Da=B;B=0;if(Da&1){Ca=59;break}k[da>>2]=0;k[ea>>2]=-1;k[v>>2]=27468;k[aa>>2]=27488;B=0;va(448,ba|0);Da=B;B=0;if(Da&1){Ca=60;break}k[ba>>2]=27560;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[ga>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);Da=B;B=0;if(Da&1){Ca=58;break}Yua(c);B=0;Ia(40,v|0,111997,35)|0;Da=B;B=0;if(Da&1){Ca=67;break}B=0;wa(510,w|0,ba|0);Da=B;B=0;if(Da&1){Ca=67;break}B=0;ya(425,w|0)|0;Da=B;B=0;if(Da&1){Ca=68;break}Yua(w);k[v>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(fa);Ava(ba);vva(aa)}j0(a);Aoa(d,a);if(CY()|0){k[x>>2]=27524;k[ha>>2]=27544;B=0;wa(508,ja|0,ia|0);Da=B;B=0;if(Da&1){Ca=75;break}k[ka>>2]=0;k[la>>2]=-1;k[x>>2]=27468;k[ha>>2]=27488;B=0;va(448,ia|0);Da=B;B=0;if(Da&1){Ca=76;break}k[ia>>2]=27560;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[na>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ia|0,c|0);Da=B;B=0;if(Da&1){Ca=74;break}Yua(c);B=0;Ia(40,x|0,112033,37)|0;Da=B;B=0;if(Da&1){Ca=83;break}B=0;wa(510,y|0,ia|0);Da=B;B=0;if(Da&1){Ca=83;break}B=0;ya(425,y|0)|0;Da=B;B=0;if(Da&1){Ca=84;break}Yua(y);k[x>>2]=27468;k[ha>>2]=27488;k[ia>>2]=27560;Yua(ma);Ava(ia);vva(ha)}A_(a);if(!(i[g>>0]|0))xh(a,521);Aoa(e,a);if((xa|0)>1){if(CY()|0){k[z>>2]=27524;k[oa>>2]=27544;B=0;wa(508,qa|0,pa|0);Da=B;B=0;if(Da&1){Ca=94;break}k[ra>>2]=0;k[sa>>2]=-1;k[z>>2]=27468;k[oa>>2]=27488;B=0;va(448,pa|0);Da=B;B=0;if(Da&1){Ca=95;break}k[pa>>2]=27560;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[ua>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pa|0,c|0);Da=B;B=0;if(Da&1){Ca=93;break}Yua(c);B=0;Ia(40,z|0,112071,36)|0;Da=B;B=0;if(Da&1){Ca=102;break}B=0;wa(510,A|0,pa|0);Da=B;B=0;if(Da&1){Ca=102;break}B=0;ya(425,A|0)|0;Da=B;B=0;if(Da&1){Ca=103;break}Yua(A);k[z>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(ta);Ava(pa);vva(oa)}if(w_(k[e>>2]|0,za,k[d>>2]|0,Aa,+p[j>>3])|0){Ea=za;Fa=Aa;Ca=140;break}}if((xa|0)>(k[h>>2]|0)){Ga=za;Ha=Aa;Ca=107;break}if(za){if((k[za>>2]|0)!=0?(Da=k[za+4>>2]|0,(Da|0)!=0):0){Ba=k[Da>>2]|0;if(Ba)Ec[k[(k[Ba>>2]|0)+4>>2]&1023](Ba);Sqa(Da)}Sqa(za)}Da=k[e>>2]|0;if(Aa){if((k[Aa>>2]|0)!=0?(Ba=k[Aa+4>>2]|0,(Ba|0)!=0):0){Ja=k[Ba>>2]|0;if(Ja)Ec[k[(k[Ja>>2]|0)+4>>2]&1023](Ja);Sqa(Ba)}Sqa(Aa)}xa=xa+1|0;za=Da;Aa=k[d>>2]|0}a:switch(Ca|0){case 8:{Aa=Rb()|0;za=Q;Yua(c);Yua(L);Ava(H);Ka=za;La=Aa;Ca=11;break}case 9:{Aa=Rb()|0;Ma=Q;Na=Aa;vva(G);Qb(Na|0);break}case 10:{Aa=Rb()|0;Ka=Q;La=Aa;Ca=11;break}case 17:{Aa=Rb()|0;Oa=Q;Pa=Aa;Ca=19;break}case 18:{Aa=Rb()|0;za=Q;Yua(o);Oa=za;Pa=Aa;Ca=19;break}case 24:{Aa=Rb()|0;za=Q;Yua(c);Yua(T);Ava(O);Qa=za;Ra=Aa;Ca=27;break}case 25:{Aa=Rb()|0;Sa=Q;Ta=Aa;vva(N);Qb(Ta|0);break}case 26:{Aa=Rb()|0;Qa=Q;Ra=Aa;Ca=27;break}case 35:{Aa=Rb()|0;Ua=Q;Va=Aa;Ca=37;break}case 36:{Aa=Rb()|0;za=Q;Yua(s);Ua=za;Va=Aa;Ca=37;break}case 42:{Aa=Rb()|0;za=Q;Yua(c);Yua(_);Ava(W);Wa=za;Ya=Aa;Ca=45;break}case 43:{Aa=Rb()|0;Za=Q;_a=Aa;vva(V);Qb(_a|0);break}case 44:{Aa=Rb()|0;Wa=Q;Ya=Aa;Ca=45;break}case 51:{Aa=Rb()|0;$a=Q;ab=Aa;Ca=53;break}case 52:{Aa=Rb()|0;za=Q;Yua(u);$a=za;ab=Aa;Ca=53;break}case 58:{Aa=Rb()|0;za=Q;Yua(c);Yua(fa);Ava(ba);bb=za;cb=Aa;Ca=61;break}case 59:{Aa=Rb()|0;db=Q;eb=Aa;vva(aa);Qb(eb|0);break}case 60:{Aa=Rb()|0;bb=Q;cb=Aa;Ca=61;break}case 67:{Aa=Rb()|0;fb=Q;gb=Aa;Ca=69;break}case 68:{Aa=Rb()|0;za=Q;Yua(w);fb=za;gb=Aa;Ca=69;break}case 74:{Aa=Rb()|0;za=Q;Yua(c);Yua(ma);Ava(ia);hb=za;ib=Aa;Ca=77;break}case 75:{Aa=Rb()|0;jb=Q;kb=Aa;vva(ha);Qb(kb|0);break}case 76:{Aa=Rb()|0;hb=Q;ib=Aa;Ca=77;break}case 83:{Aa=Rb()|0;lb=Q;mb=Aa;Ca=85;break}case 84:{Aa=Rb()|0;za=Q;Yua(y);lb=za;mb=Aa;Ca=85;break}case 93:{Aa=Rb()|0;za=Q;Yua(c);Yua(ta);Ava(pa);nb=za;ob=Aa;Ca=96;break}case 94:{Aa=Rb()|0;pb=Q;qb=Aa;vva(oa);Qb(qb|0);break}case 95:{Aa=Rb()|0;nb=Q;ob=Aa;Ca=96;break}case 102:{Aa=Rb()|0;rb=Q;sb=Aa;Ca=104;break}case 103:{Aa=Rb()|0;za=Q;Yua(A);rb=za;sb=Aa;Ca=104;break}case 107:{if(CY()|0){Aa=C+56|0;za=C+4|0;k[C>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,C+56|0,za|0);A=B;B=0;if(A&1){A=Rb()|0;tb=Q;ub=A;vva(Aa);Qb(ub|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Aa>>2]=27488;B=0;va(448,za|0);A=B;B=0;do if(A&1){y=Rb()|0;vb=Q;wb=y}else{k[za>>2]=27560;y=C+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(c);Yua(y);Ava(za);vb=u;wb=w;break}Yua(c);B=0;w=Ia(40,C|0,112108,41)|0;u=B;B=0;do if(((!(u&1)?(B=0,s=Xa(242,w|0,k[h>>2]|0)|0,o=B,B=0,!(o&1)):0)?(B=0,Ia(40,s|0,136862,9)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,D|0,za|0),s=B,B=0,!(s&1)):0){B=0;ya(425,D|0)|0;s=B;B=0;if(s&1){s=Rb()|0;o=Q;Yua(D);xb=o;yb=s;break}else{Yua(D);k[C>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(y);Ava(za);vva(Aa);Ea=Ga;Fa=Ha;Ca=140;break a}}else Ca=122;while(0);if((Ca|0)==122){w=Rb()|0;xb=Q;yb=w}k[C>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(y);Ava(za);vva(Aa);zb=xb;Ab=yb;Qb(Ab|0)}while(0);tb=vb;ub=wb;vva(Aa);Qb(ub|0)}else{Ea=Ga;Fa=Ha;Ca=140}break}}switch(Ca|0){case 11:{Ma=Ka;Na=La;vva(G);Qb(Na|0);break}case 19:{k[n>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(G);zb=Oa;Ab=Pa;Qb(Ab|0);break}case 27:{Sa=Qa;Ta=Ra;vva(N);Qb(Ta|0);break}case 37:{k[q>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N);zb=Ua;Ab=Va;Qb(Ab|0);break}case 45:{Za=Wa;_a=Ya;vva(V);Qb(_a|0);break}case 53:{k[t>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(_);Ava(W);vva(V);zb=$a;Ab=ab;Qb(Ab|0);break}case 61:{db=bb;eb=cb;vva(aa);Qb(eb|0);break}case 69:{k[v>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(fa);Ava(ba);vva(aa);zb=fb;Ab=gb;Qb(Ab|0);break}case 77:{jb=hb;kb=ib;vva(ha);Qb(kb|0);break}case 85:{k[x>>2]=27468;k[ha>>2]=27488;k[ia>>2]=27560;Yua(ma);Ava(ia);vva(ha);zb=lb;Ab=mb;Qb(Ab|0);break}case 96:{pb=nb;qb=ob;vva(oa);Qb(qb|0);break}case 104:{k[z>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(ta);Ava(pa);vva(oa);zb=rb;Ab=sb;Qb(Ab|0);break}case 140:{if(i[f>>0]|0){b:do if(CY()|0){f=E+56|0;sb=E+4|0;k[E>>2]=27524;k[f>>2]=27544;B=0;wa(508,E+56|0,sb|0);rb=B;B=0;if(rb&1){rb=Rb()|0;Bb=Q;Cb=rb;vva(f);Qb(Cb|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[f>>2]=27488;B=0;va(448,sb|0);rb=B;B=0;do if(rb&1){oa=Rb()|0;Db=Q;Eb=oa}else{k[sb>>2]=27560;oa=E+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sb|0,c|0);pa=B;B=0;if(pa&1){pa=Rb()|0;ta=Q;Yua(c);Yua(oa);Ava(sb);Db=ta;Eb=pa;break}Yua(c);B=0;Ia(40,E|0,148942,18)|0;pa=B;B=0;do if(!(pa&1)?(B=0,wa(510,F|0,sb|0),ta=B,B=0,!(ta&1)):0){B=0;ya(425,F|0)|0;ta=B;B=0;if(ta&1){ta=Rb()|0;z=Q;Yua(F);Fb=z;Gb=ta;break}else{Yua(F);k[E>>2]=27468;k[f>>2]=27488;k[sb>>2]=27560;Yua(oa);Ava(sb);vva(f);break b}}else Ca=154;while(0);if((Ca|0)==154){pa=Rb()|0;Fb=Q;Gb=pa}k[E>>2]=27468;k[f>>2]=27488;k[sb>>2]=27560;Yua(oa);Ava(sb);vva(f);zb=Fb;Ab=Gb;Qb(Ab|0)}while(0);Bb=Db;Cb=Eb;vva(f);Qb(Cb|0)}while(0);ci(a,a+48|0,k[m>>2]|0,k[l>>2]|0,1)}if(Ea){if((k[Ea>>2]|0)!=0?(a=k[Ea+4>>2]|0,(a|0)!=0):0){Cb=k[a>>2]|0;if(Cb)Ec[k[(k[Cb>>2]|0)+4>>2]&1023](Cb);Sqa(a)}Sqa(Ea)}if(Fa){if((k[Fa>>2]|0)!=0?(Ea=k[Fa+4>>2]|0,(Ea|0)!=0):0){a=k[Ea>>2]|0;if(a)Ec[k[(k[a>>2]|0)+4>>2]&1023](a);Sqa(Ea)}Sqa(Fa)}Fa=k[e>>2]|0;if(Fa){if((k[Fa>>2]|0)!=0?(e=k[Fa+4>>2]|0,(e|0)!=0):0){Ea=k[e>>2]|0;if(Ea)Ec[k[(k[Ea>>2]|0)+4>>2]&1023](Ea);Sqa(e)}Sqa(Fa)}Fa=k[d>>2]|0;if(Fa){if((k[Fa>>2]|0)!=0?(d=k[Fa+4>>2]|0,(d|0)!=0):0){e=k[d>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(d)}Sqa(Fa)}Fa=k[l>>2]|0;if(!Fa){r=b;return}d=k[m>>2]|0;if((Fa|0)>0){e=d;Ea=Fa;Fa=0;while(1){a=e+(Fa<<2)|0;Cb=k[a>>2]|0;if(!Cb)Hb=Ea;else{Tqa(Cb);Hb=k[l>>2]|0}k[a>>2]=0;Fa=Fa+1|0;a=k[m>>2]|0;if((Fa|0)>=(Hb|0)){Ib=a;break}else{e=a;Ea=Hb}}}else Ib=d;if(Ib)Tqa(Ib);k[m>>2]=0;r=b;return}}}function w_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0;f=r;r=r+960|0;g=f+944|0;h=f+760|0;i=f+932|0;j=f+920|0;l=f+908|0;m=f+624|0;n=f+896|0;o=f+488|0;q=f+472|0;s=f+336|0;u=f+320|0;v=f+36|0;w=f+24|0;x=f+184|0;y=f+12|0;z=f+48|0;A=f;C=Qqa(8)|0;B=0;va(485,C|0);D=B;B=0;if(D&1){D=Rb()|0;Sqa(C);Qb(D|0)}if((k[d>>2]|0)!=0?(D=d+4|0,E=k[D>>2]|0,F=Qqa(4)|0,G=k[E>>2]|0,H=Hc[k[(k[G>>2]|0)+36>>2]&511](G)|0,k[F>>2]=H,G=k[E>>2]|0,Fc[k[(k[G>>2]|0)+60>>2]&1023](G,H),k[C+4>>2]=F,(k[d>>2]|0)!=0):0){H=k[k[D>>2]>>2]|0;Fc[k[(k[H>>2]|0)+60>>2]&1023](H,k[F>>2]|0)}if((k[C>>2]|0)!=0?(F=C+4|0,H=k[k[F>>2]>>2]|0,Xc[k[(k[H>>2]|0)+48>>2]&63](H,k[k[c+4>>2]>>2]|0,-1.0),(k[C>>2]|0)!=0):0){c=k[k[F>>2]>>2]|0;I=+id[k[(k[c>>2]|0)+64>>2]&63](c,1)}else I=0.0;if(!(k[d>>2]|0))J=0.0;else{c=k[k[d+4>>2]>>2]|0;J=+id[k[(k[c>>2]|0)+64>>2]&63](c,1)}K=+$(+I);p[t>>3]=K;c=k[t+4>>2]|0;if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)?(K=+$(+J),p[t>>3]=K,c=k[t+4>>2]|0,!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){K=I/J;c=EY()|0;a:do if(K<e)if(c){d=m+56|0;F=m+4|0;k[m>>2]=27524;k[d>>2]=27544;B=0;wa(508,m+56|0,F|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;vva(d);Qb(M|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[d>>2]=27488;B=0;va(448,F|0);H=B;B=0;do if(H&1){D=Rb()|0;N=Q;O=D}else{k[F>>2]=27560;D=m+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,F|0,g|0);G=B;B=0;if(G&1){G=Rb()|0;E=Q;Yua(g);Yua(D);Ava(F);N=E;O=G;break}Yua(g);B=0;G=Ia(40,m|0,149177,1)|0;E=B;B=0;do if((((!(E&1)?(k[G+(k[(k[G>>2]|0)+-12>>2]|0)+12>>2]=50,P=G+(k[(k[G>>2]|0)+-12>>2]|0)+4|0,k[P>>2]=k[P>>2]&-177|32,B=0,P=Ia(40,G|0,136978,41)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Sa(1,P|0,+(K*100.0))|0,P=B,B=0,!(P&1)):0)?(B=0,P=Ia(40,R|0,148270,3)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Sa(1,P|0,+(e*100.0))|0,P=B,B=0,!(P&1)):0){B=0;Ia(40,R|0,148274,3)|0;R=B;B=0;if(R&1){S=55;break}B=0;wa(510,n|0,F|0);R=B;B=0;if(R&1){S=55;break}B=0;ya(425,n|0)|0;R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(n);T=P;U=R;break}else{Yua(n);k[m>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(D);Ava(F);vva(d);V=1;break a}}else S=55;while(0);if((S|0)==55){G=Rb()|0;T=Q;U=G}k[m>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(D);Ava(F);vva(d);W=U;X=T;Qb(W|0)}while(0);L=N;M=O;vva(d);Qb(M|0)}else V=1;else if(c){F=o+56|0;H=o+4|0;k[o>>2]=27524;k[F>>2]=27544;B=0;wa(508,o+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;Y=Q;Z=G;vva(F);Qb(Z|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[F>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){E=Rb()|0;_=Q;aa=E}else{k[H>>2]=27560;E=o+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[o+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,H|0,g|0);R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(g);Yua(E);Ava(H);_=P;aa=R;break}Yua(g);B=0;R=Ia(40,o|0,149177,1)|0;P=B;B=0;do if((((!(P&1)?(k[R+(k[(k[R>>2]|0)+-12>>2]|0)+12>>2]=50,ba=R+(k[(k[R>>2]|0)+-12>>2]|0)+4|0,k[ba>>2]=k[ba>>2]&-177|32,B=0,ba=Ia(40,R|0,136978,41)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Sa(1,ba|0,+(K*100.0))|0,ba=B,B=0,!(ba&1)):0)?(B=0,ba=Ia(40,ca|0,148278,3)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Sa(1,ba|0,+(e*100.0))|0,ba=B,B=0,!(ba&1)):0){B=0;Ia(40,ca|0,148274,3)|0;ca=B;B=0;if(ca&1){S=76;break}B=0;wa(510,q|0,H|0);ca=B;B=0;if(ca&1){S=76;break}B=0;ya(425,q|0)|0;ca=B;B=0;if(ca&1){ca=Rb()|0;ba=Q;Yua(q);da=ba;ea=ca;break}else{Yua(q);k[o>>2]=27468;k[F>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(F);V=0;break a}}else S=76;while(0);if((S|0)==76){R=Rb()|0;da=Q;ea=R}k[o>>2]=27468;k[F>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(F);W=ea;X=da;Qb(W|0)}while(0);Y=_;Z=aa;vva(F);Qb(Z|0)}else V=0;while(0);Z=Qqa(8)|0;B=0;va(485,Z|0);aa=B;B=0;if(aa&1){aa=Rb()|0;Sqa(Z);Qb(aa|0)}if((k[b>>2]|0)!=0?(aa=b+4|0,_=k[aa>>2]|0,Y=Qqa(4)|0,da=k[_>>2]|0,ea=Hc[k[(k[da>>2]|0)+36>>2]&511](da)|0,k[Y>>2]=ea,da=k[_>>2]|0,Fc[k[(k[da>>2]|0)+60>>2]&1023](da,ea),k[Z+4>>2]=Y,(k[b>>2]|0)!=0):0){ea=k[k[aa>>2]>>2]|0;Fc[k[(k[ea>>2]|0)+60>>2]&1023](ea,k[Y>>2]|0)}if((k[Z>>2]|0)!=0?(Y=Z+4|0,ea=k[k[Y>>2]>>2]|0,Xc[k[(k[ea>>2]|0)+48>>2]&63](ea,k[k[a+4>>2]>>2]|0,-1.0),(k[Z>>2]|0)!=0):0){a=k[k[Y>>2]>>2]|0;fa=+id[k[(k[a>>2]|0)+64>>2]&63](a,1)}else fa=0.0;if(!(k[b>>2]|0))ga=0.0;else{a=k[k[b+4>>2]>>2]|0;ga=+id[k[(k[a>>2]|0)+64>>2]&63](a,1)}K=+$(+fa);p[t>>3]=K;a=k[t+4>>2]|0;if(!(a>>>0>2146435072|(a|0)==2146435072&(k[t>>2]|0)>>>0>0)?(K=+$(+ga),p[t>>3]=K,a=k[t+4>>2]|0,!(a>>>0>2146435072|(a|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){K=fa/ga;a=EY()|0;b:do if(K<e)if(a){b=x+56|0;Y=x+4|0;k[x>>2]=27524;k[b>>2]=27544;B=0;wa(508,x+56|0,Y|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ha=Q;ia=ea;vva(b);Qb(ia|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[b>>2]=27488;B=0;va(448,Y|0);ea=B;B=0;do if(ea&1){aa=Rb()|0;ja=Q;ka=aa}else{k[Y>>2]=27560;aa=x+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[x+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,Y|0,g|0);da=B;B=0;if(da&1){da=Rb()|0;_=Q;Yua(g);Yua(aa);Ava(Y);ja=_;ka=da;break}Yua(g);k[x+(k[(k[x>>2]|0)+-12>>2]|0)+12>>2]=50;da=x+(k[(k[x>>2]|0)+-12>>2]|0)+4|0;k[da>>2]=k[da>>2]&-177|32;B=0;da=Ia(40,x|0,112247,44)|0;_=B;B=0;do if(!(_&1)){B=0;o=Sa(1,da|0,+(K*100.0))|0;q=B;B=0;if(q&1){S=132;break}B=0;q=Ia(40,o|0,148270,3)|0;o=B;B=0;if(o&1){S=132;break}B=0;o=Sa(1,q|0,+(e*100.0))|0;q=B;B=0;if(q&1){S=132;break}B=0;Ia(40,o|0,148274,3)|0;o=B;B=0;if(o&1){S=132;break}B=0;wa(510,y|0,Y|0);o=B;B=0;if(o&1){S=132;break}B=0;ya(425,y|0)|0;o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(y);la=q;ma=o;break}else{Yua(y);k[x>>2]=27468;k[b>>2]=27488;k[Y>>2]=27560;Yua(aa);Ava(Y);vva(b);na=V;break b}}else S=132;while(0);if((S|0)==132){da=Rb()|0;la=Q;ma=da}k[x>>2]=27468;k[b>>2]=27488;k[Y>>2]=27560;Yua(aa);Ava(Y);vva(b);W=ma;X=la;Qb(W|0)}while(0);ha=ja;ia=ka;vva(b);Qb(ia|0)}else na=V;else if(a){Y=z+56|0;ea=z+4|0;k[z>>2]=27524;k[Y>>2]=27544;B=0;wa(508,z+56|0,ea|0);F=B;B=0;if(F&1){F=Rb()|0;oa=Q;pa=F;vva(Y);Qb(pa|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[Y>>2]=27488;B=0;va(448,ea|0);F=B;B=0;do if(F&1){da=Rb()|0;qa=Q;ra=da}else{k[ea>>2]=27560;da=z+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[z+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ea|0,g|0);_=B;B=0;if(_&1){_=Rb()|0;E=Q;Yua(g);Yua(da);Ava(ea);qa=E;ra=_;break}Yua(g);k[z+(k[(k[z>>2]|0)+-12>>2]|0)+12>>2]=50;_=z+(k[(k[z>>2]|0)+-12>>2]|0)+4|0;k[_>>2]=k[_>>2]&-177|32;B=0;_=Ia(40,z|0,112247,44)|0;E=B;B=0;do if(!(E&1)){B=0;o=Sa(1,_|0,+(K*100.0))|0;q=B;B=0;if(q&1){S=152;break}B=0;q=Ia(40,o|0,148278,3)|0;o=B;B=0;if(o&1){S=152;break}B=0;o=Sa(1,q|0,+(e*100.0))|0;q=B;B=0;if(q&1){S=152;break}B=0;Ia(40,o|0,148274,3)|0;o=B;B=0;if(o&1){S=152;break}B=0;wa(510,A|0,ea|0);o=B;B=0;if(o&1){S=152;break}B=0;ya(425,A|0)|0;o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(A);sa=q;ta=o;break}else{Yua(A);k[z>>2]=27468;k[Y>>2]=27488;k[ea>>2]=27560;Yua(da);Ava(ea);vva(Y);na=0;break b}}else S=152;while(0);if((S|0)==152){_=Rb()|0;sa=Q;ta=_}k[z>>2]=27468;k[Y>>2]=27488;k[ea>>2]=27560;Yua(da);Ava(ea);vva(Y);W=ta;X=sa;Qb(W|0)}while(0);oa=qa;pa=ra;vva(Y);Qb(pa|0)}else na=0;while(0);if((k[Z>>2]|0)!=0?(pa=k[Z+4>>2]|0,(pa|0)!=0):0){ra=k[pa>>2]|0;if(ra)Ec[k[(k[ra>>2]|0)+4>>2]&1023](ra);Sqa(pa)}Sqa(Z);if(!(k[C>>2]|0)){Sqa(C);r=f;return na|0}Z=k[C+4>>2]|0;if(!Z){Sqa(C);r=f;return na|0}pa=k[Z>>2]|0;if(pa)Ec[k[(k[pa>>2]|0)+4>>2]&1023](pa);Sqa(Z);Sqa(C);r=f;return na|0}na=s+56|0;f=s+4|0;k[s>>2]=27524;k[na>>2]=27544;B=0;wa(508,s+56|0,f|0);C=B;B=0;if(C&1){C=Rb()|0;xa=Q;za=C;vva(na);Qb(za|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[na>>2]=27488;B=0;va(448,f|0);C=B;B=0;do if(C&1){Z=Rb()|0;Aa=Q;Ba=Z}else{k[f>>2]=27560;Z=s+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[s+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,f|0,g|0);pa=B;B=0;if(pa&1){pa=Rb()|0;ra=Q;Yua(g);Yua(Z);Ava(f);Aa=ra;Ba=pa;break}Yua(g);B=0;pa=Ia(40,s|0,148282,29)|0;ra=B;B=0;c:do if(!(ra&1)?(B=0,Xa(239,pa|0,0)|0,qa=B,B=0,!(qa&1)):0){qa=Ab(20)|0;B=0;eb(502,u|0,112150,73);oa=B;B=0;do if(!(oa&1)){B=0;eb(502,v|0,112224,22);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(u);Ca=ta;Da=sa;break}B=0;wa(510,w|0,f|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Ea=1;Fa=Q;Ga=sa}else{B=0;ua(163,qa|0,u|0,v|0,117,w|0);sa=B;B=0;if(sa&1)Ha=1;else{B=0;eb(503,qa|0,1240,229);B=0;Ha=0}sa=Rb()|0;ta=Q;Yua(w);Ea=Ha;Fa=ta;Ga=sa}Yua(v);Yua(u);if(Ea){Ca=Fa;Da=Ga}else{Ja=Fa;Ka=Ga;break c}}else{sa=Rb()|0;Ca=Q;Da=sa}while(0);zb(qa|0);Ja=Ca;Ka=Da}else S=106;while(0);if((S|0)==106){pa=Rb()|0;Ja=Q;Ka=pa}k[s>>2]=27468;k[na>>2]=27488;k[f>>2]=27560;Yua(Z);Ava(f);vva(na);W=Ka;X=Ja;Qb(W|0)}while(0);xa=Aa;za=Ba;vva(na);Qb(za|0)}za=h+56|0;na=h+4|0;k[h>>2]=27524;k[za>>2]=27544;B=0;wa(508,h+56|0,na|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;La=Q;Ma=Ba;vva(za);Qb(Ma|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[za>>2]=27488;B=0;va(448,na|0);Ba=B;B=0;do if(Ba&1){Aa=Rb()|0;Na=Q;Oa=Aa}else{k[na>>2]=27560;Aa=h+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,na|0,g|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ja=Q;Yua(g);Yua(Aa);Ava(na);Na=Ja;Oa=xa;break}Yua(g);B=0;xa=Ia(40,h|0,148282,29)|0;Ja=B;B=0;d:do if(!(Ja&1)?(B=0,Xa(239,xa|0,0)|0,Ka=B,B=0,!(Ka&1)):0){Ka=Ab(20)|0;B=0;eb(502,i|0,112150,73);f=B;B=0;do if(!(f&1)){B=0;eb(502,j|0,112224,22);s=B;B=0;if(s&1){s=Rb()|0;Da=Q;Yua(i);Pa=s;Qa=Da;break}B=0;wa(510,l|0,na|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ra=Da;Ta=Q;Ua=1}else{B=0;ua(163,Ka|0,i|0,j|0,105,l|0);Da=B;B=0;if(Da&1)Va=1;else{B=0;eb(503,Ka|0,1240,229);B=0;Va=0}Da=Rb()|0;s=Q;Yua(l);Ra=Da;Ta=s;Ua=Va}Yua(j);Yua(i);if(Ua){Pa=Ra;Qa=Ta}else{Wa=Ra;Ya=Ta;break d}}else{s=Rb()|0;Pa=s;Qa=Q}while(0);zb(Ka|0);Wa=Pa;Ya=Qa}else S=28;while(0);if((S|0)==28){xa=Rb()|0;Wa=xa;Ya=Q}k[h>>2]=27468;k[za>>2]=27488;k[na>>2]=27560;Yua(Aa);Ava(na);vva(za);W=Wa;X=Ya;Qb(W|0)}while(0);La=Na;Ma=Oa;vva(za);Qb(Ma|0);return 0}function x_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;b=r;r=r+640|0;c=b+624|0;d=b+620|0;e=b+638|0;f=b+637|0;g=b+636|0;h=b+612|0;j=b+596|0;l=b+592|0;m=b+456|0;n=b+600|0;o=b+304|0;p=b+440|0;q=b+168|0;s=b+152|0;t=b+16|0;u=b;k[l>>2]=0;xh(a,510);v=a+44|0;bO(k[v>>2]|0,e,759);bO(k[v>>2]|0,f,99);bO(k[v>>2]|0,g,306);cO(k[v>>2]|0,h,476);cO(k[v>>2]|0,b+616|0,298);cO(k[v>>2]|0,d,312);cO(k[v>>2]|0,j,310);if(k[d>>2]|0)gO(k[v>>2]|0,l,d,313);a:do if(CY()|0){w=m+56|0;x=m+4|0;k[m>>2]=27524;k[w>>2]=27544;B=0;wa(508,m+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(w);Qb(A|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=m+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(x);D=G;E=F;break}Yua(c);B=0;Ia(40,m|0,112292,28)|0;F=B;B=0;do if(!(F&1)?(B=0,wa(510,n|0,x|0),G=B,B=0,!(G&1)):0){B=0;ya(425,n|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(n);I=H;J=G;break}else{Yua(n);k[m>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(w);break a}}else K=16;while(0);if((K|0)==16){F=Rb()|0;I=Q;J=F}k[m>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(w);L=I;M=J;Qb(M|0)}while(0);z=D;A=E;vva(w);Qb(A|0)}while(0);A=(i[f>>0]|0)==0|(i[g>>0]|0)==0;g=CY()|0;do if(A){b:do if(g){f=q+56|0;E=q+4|0;k[q>>2]=27524;k[f>>2]=27544;B=0;wa(508,q+56|0,E|0);D=B;B=0;if(D&1){D=Rb()|0;N=Q;O=D;vva(f);Qb(O|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[f>>2]=27488;B=0;va(448,E|0);D=B;B=0;do if(D&1){z=Rb()|0;P=Q;R=z}else{k[E>>2]=27560;z=q+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(c);Yua(z);Ava(E);P=I;R=J;break}Yua(c);B=0;Ia(40,q|0,112362,27)|0;J=B;B=0;do if(!(J&1)?(B=0,wa(510,s|0,E|0),I=B,B=0,!(I&1)):0){B=0;ya(425,s|0)|0;I=B;B=0;if(I&1){I=Rb()|0;m=Q;Yua(s);S=m;T=I;break}else{Yua(s);k[q>>2]=27468;k[f>>2]=27488;k[E>>2]=27560;Yua(z);Ava(E);vva(f);break b}}else K=50;while(0);if((K|0)==50){J=Rb()|0;S=Q;T=J}k[q>>2]=27468;k[f>>2]=27488;k[E>>2]=27560;Yua(z);Ava(E);vva(f);L=S;M=T;Qb(M|0)}while(0);N=P;O=R;vva(f);Qb(O|0)}while(0);if((k[j>>2]|0)==4)Yoa(a);else{Voa(a);oO(k[v>>2]|0,353,575);y_(a);oO(k[v>>2]|0,64,575);y_(a);oO(k[v>>2]|0,339,575);y_(a);break}}else{c:do if(g){w=o+56|0;E=o+4|0;k[o>>2]=27524;k[w>>2]=27544;B=0;wa(508,o+56|0,E|0);D=B;B=0;if(D&1){D=Rb()|0;U=Q;V=D;vva(w);Qb(V|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[w>>2]=27488;B=0;va(448,E|0);D=B;B=0;do if(D&1){C=Rb()|0;W=Q;X=C}else{k[E>>2]=27560;C=o+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(c);Yua(C);Ava(E);W=I;X=J;break}Yua(c);B=0;Ia(40,o|0,112321,40)|0;J=B;B=0;do if(!(J&1)?(B=0,wa(510,p|0,E|0),I=B,B=0,!(I&1)):0){B=0;ya(425,p|0)|0;I=B;B=0;if(I&1){I=Rb()|0;m=Q;Yua(p);Y=m;Z=I;break}else{Yua(p);k[o>>2]=27468;k[w>>2]=27488;k[E>>2]=27560;Yua(C);Ava(E);vva(w);break c}}else K=33;while(0);if((K|0)==33){J=Rb()|0;Y=Q;Z=J}k[o>>2]=27468;k[w>>2]=27488;k[E>>2]=27560;Yua(C);Ava(E);vva(w);L=Y;M=Z;Qb(M|0)}while(0);U=W;V=X;vva(w);Qb(V|0)}while(0);xh(a,512);Voa(a);oO(k[v>>2]|0,64,575);y_(a);xh(a,513);Voa(a);oO(k[v>>2]|0,339,575);z_(a)}while(0);if(i[e>>0]|0){d:do if(CY()|0){e=t+56|0;v=t+4|0;k[t>>2]=27524;k[e>>2]=27544;B=0;wa(508,t+56|0,v|0);V=B;B=0;if(V&1){V=Rb()|0;_=Q;$=V;vva(e);Qb($|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[e>>2]=27488;B=0;va(448,v|0);V=B;B=0;do if(V&1){X=Rb()|0;aa=Q;ba=X}else{k[v>>2]=27560;X=t+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;U=Q;Yua(c);Yua(X);Ava(v);aa=U;ba=W;break}Yua(c);B=0;Ia(40,t|0,148942,18)|0;W=B;B=0;do if(!(W&1)?(B=0,wa(510,u|0,v|0),U=B,B=0,!(U&1)):0){B=0;ya(425,u|0)|0;U=B;B=0;if(U&1){U=Rb()|0;Z=Q;Yua(u);ca=Z;da=U;break}else{Yua(u);k[t>>2]=27468;k[e>>2]=27488;k[v>>2]=27560;Yua(X);Ava(v);vva(e);break d}}else K=70;while(0);if((K|0)==70){W=Rb()|0;ca=Q;da=W}k[t>>2]=27468;k[e>>2]=27488;k[v>>2]=27560;Yua(X);Ava(v);vva(e);L=ca;M=da;Qb(M|0)}while(0);_=aa;$=ba;vva(e);Qb($|0)}while(0);ci(a,a+48|0,k[l>>2]|0,k[d>>2]|0,1)}if((k[h>>2]|0)==511)gi(a);a=k[d>>2]|0;if(!a){r=b;return}h=k[l>>2]|0;if((a|0)>0){$=h;ba=a;a=0;while(1){aa=$+(a<<2)|0;_=k[aa>>2]|0;if(!_)ea=ba;else{Tqa(_);ea=k[d>>2]|0}k[aa>>2]=0;a=a+1|0;aa=k[l>>2]|0;if((a|0)>=(ea|0)){fa=aa;break}else{$=aa;ba=ea}}}else fa=h;if(fa)Tqa(fa);k[l>>2]=0;r=b;return}function y_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+160|0;d=b+156|0;e=b+152|0;f=b+16|0;g=b;a:do if(CY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);B=0;Ia(40,f|0,112390,32)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=s;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}q=Rb()|0;t=Q;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=a+44|0;cO(k[m>>2]|0,e,298);cO(k[m>>2]|0,d,296);if((k[e>>2]|0)==300){r=b;return}if((k[d>>2]|0)==625){cO(k[m>>2]|0,c,575);koa(a,k[c>>2]|0,-1);r=b;return}else{xh(a,515);ii(a);Voa(a);r=b;return}}function z_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+160|0;d=b+156|0;e=b+152|0;f=b+16|0;g=b;a:do if(CY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);B=0;Ia(40,f|0,112423,31)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=s;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}q=Rb()|0;t=Q;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=a+44|0;cO(k[m>>2]|0,e,298);cO(k[m>>2]|0,d,296);if((k[e>>2]|0)==300){r=b;return}if((k[d>>2]|0)==625){cO(k[m>>2]|0,c,575);koa(a,k[c>>2]|0,1);r=b;return}else{xh(a,516);ji(a);Voa(a);r=b;return}}function A_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;b=r;r=r+480|0;c=b+464|0;d=b+477|0;e=b+476|0;f=b+456|0;g=b+452|0;h=b+304|0;j=b+440|0;l=b+152|0;m=b+288|0;n=b+16|0;o=b;k[g>>2]=0;p=a+44|0;bO(k[p>>2]|0,d,759);cO(k[p>>2]|0,b+460|0,476);bO(k[p>>2]|0,e,340);cO(k[p>>2]|0,f,349);if(k[f>>2]|0)gO(k[p>>2]|0,g,f,350);zoa(a);if(!(i[e>>0]|0)){a:do if(CY()|0){e=h+56|0;p=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(e);Qb(t|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;Ia(40,h|0,112455,26)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,j|0,p|0),y=B,B=0,!(y&1)):0){B=0;ya(425,j|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(j);A=z;C=y;break}else{Yua(j);k[h>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(e);break a}}else D=18;while(0);if((D|0)==18){x=Rb()|0;A=Q;C=x}k[h>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(e);E=A;F=C;Qb(F|0)}while(0);s=v;t=w;vva(e);Qb(t|0)}while(0);xh(a,521);C_(a);b:do if(CY()|0){t=l+56|0;w=l+4|0;k[l>>2]=27524;k[t>>2]=27544;B=0;wa(508,l+56|0,w|0);v=B;B=0;if(v&1){v=Rb()|0;G=Q;H=v;vva(t);Qb(H|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[t>>2]=27488;B=0;va(448,w|0);v=B;B=0;do if(v&1){s=Rb()|0;I=Q;J=s}else{k[w>>2]=27560;s=l+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(c);Yua(s);Ava(w);I=A;J=C;break}Yua(c);B=0;Ia(40,l|0,112482,21)|0;C=B;B=0;do if(!(C&1)?(B=0,wa(510,m|0,w|0),A=B,B=0,!(A&1)):0){B=0;ya(425,m|0)|0;A=B;B=0;if(A&1){A=Rb()|0;h=Q;Yua(m);K=h;L=A;break}else{Yua(m);k[l>>2]=27468;k[t>>2]=27488;k[w>>2]=27560;Yua(s);Ava(w);vva(t);break b}}else D=34;while(0);if((D|0)==34){C=Rb()|0;K=Q;L=C}k[l>>2]=27468;k[t>>2]=27488;k[w>>2]=27560;Yua(s);Ava(w);vva(t);E=K;F=L;Qb(F|0)}while(0);G=I;H=J;vva(t);Qb(H|0)}while(0);xh(a,509);Voa(a)}else{H=Qqa(4)|0;k[H>>2]=39012;Fc[k[39044>>2]&1023](H,a);Ec[k[(k[H>>2]|0)+4>>2]&1023](H)}if(i[d>>0]|0){c:do if(CY()|0){d=n+56|0;H=n+4|0;k[n>>2]=27524;k[d>>2]=27544;B=0;wa(508,n+56|0,H|0);J=B;B=0;if(J&1){J=Rb()|0;M=Q;N=J;vva(d);Qb(N|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[d>>2]=27488;B=0;va(448,H|0);J=B;B=0;do if(J&1){I=Rb()|0;O=Q;P=I}else{k[H>>2]=27560;I=n+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;L=Q;Yua(c);Yua(I);Ava(H);O=L;P=G;break}Yua(c);B=0;Ia(40,n|0,148942,18)|0;G=B;B=0;do if(!(G&1)?(B=0,wa(510,o|0,H|0),L=B,B=0,!(L&1)):0){B=0;ya(425,o|0)|0;L=B;B=0;if(L&1){L=Rb()|0;K=Q;Yua(o);R=K;S=L;break}else{Yua(o);k[n>>2]=27468;k[d>>2]=27488;k[H>>2]=27560;Yua(I);Ava(H);vva(d);break c}}else D=52;while(0);if((D|0)==52){G=Rb()|0;R=Q;S=G}k[n>>2]=27468;k[d>>2]=27488;k[H>>2]=27560;Yua(I);Ava(H);vva(d);E=R;F=S;Qb(F|0)}while(0);M=O;N=P;vva(d);Qb(N|0)}while(0);ci(a,a+48|0,k[g>>2]|0,k[f>>2]|0,1)}a=k[f>>2]|0;if(!a){r=b;return}N=k[g>>2]|0;if((a|0)>0){P=N;O=a;a=0;while(1){M=P+(a<<2)|0;F=k[M>>2]|0;if(!F)T=O;else{Tqa(F);T=k[f>>2]|0}k[M>>2]=0;a=a+1|0;M=k[g>>2]|0;if((a|0)>=(T|0)){U=M;break}else{P=M;O=T}}}else U=N;if(U)Tqa(U);k[g>>2]=0;r=b;return}function B_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;b=r;r=r+336|0;c=b+316|0;d=b+308|0;e=b+328|0;f=b+304|0;g=b+300|0;h=b+152|0;j=b+288|0;l=b+16|0;m=b;k[g>>2]=0;xh(a,382);n=a+44|0;cO(k[n>>2]|0,b+312|0,381);bO(k[n>>2]|0,e,759);cO(k[n>>2]|0,f,476);cO(k[n>>2]|0,d,384);if(k[d>>2]|0)gO(k[n>>2]|0,g,d,385);a:do if(CY()|0){n=h+56|0;o=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;Ia(40,h|0,112504,18)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,j|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,j|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(j);z=y;A=x;break}else{Yua(j);k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=16;while(0);if((C|0)==16){w=Rb()|0;z=Q;A=w}k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);s=Qqa(4)|0;k[s>>2]=39620;Fc[k[39652>>2]&1023](s,a);Ec[k[(k[s>>2]|0)+4>>2]&1023](s);if(i[e>>0]|0){b:do if(CY()|0){e=l+56|0;s=l+4|0;k[l>>2]=27524;k[e>>2]=27544;B=0;wa(508,l+56|0,s|0);v=B;B=0;if(v&1){v=Rb()|0;F=Q;G=v;vva(e);Qb(G|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[e>>2]=27488;B=0;va(448,s|0);v=B;B=0;do if(v&1){u=Rb()|0;H=Q;I=u}else{k[s>>2]=27560;u=l+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;A=Q;Yua(c);Yua(u);Ava(s);H=A;I=q;break}Yua(c);B=0;Ia(40,l|0,148942,18)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,m|0,s|0),A=B,B=0,!(A&1)):0){B=0;ya(425,m|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(m);J=z;K=A;break}else{Yua(m);k[l>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(u);Ava(s);vva(e);break b}}else C=33;while(0);if((C|0)==33){q=Rb()|0;J=Q;K=q}k[l>>2]=27468;k[e>>2]=27488;k[s>>2]=27560;Yua(u);Ava(s);vva(e);D=J;E=K;Qb(E|0)}while(0);F=H;G=I;vva(e);Qb(G|0)}while(0);ci(a,a+48|0,k[g>>2]|0,k[d>>2]|0,1)}if((k[f>>2]|0)==383)gi(a);a=k[d>>2]|0;if(!a){r=b;return}f=k[g>>2]|0;if((a|0)>0){G=f;I=a;a=0;while(1){H=G+(a<<2)|0;F=k[H>>2]|0;if(!F)L=I;else{Tqa(F);L=k[d>>2]|0}k[H>>2]=0;a=a+1|0;H=k[g>>2]|0;if((a|0)>=(L|0)){M=H;break}else{G=H;I=L}}}else M=f;if(M)Tqa(M);k[g>>2]=0;r=b;return}function C_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;b=r;r=r+704|0;c=b+680|0;d=b+676|0;e=b+672|0;f=b+668|0;g=b+664|0;h=b+16|0;j=b+660|0;l=b+656|0;m=b+652|0;n=b+648|0;o=b+694|0;q=b+693|0;s=b+692|0;t=b+644|0;u=b+640|0;v=b+636|0;w=b+632|0;x=b+616|0;y=b+8|0;z=b+480|0;A=b+620|0;C=b;D=b+328|0;E=b+464|0;G=b+192|0;H=b+176|0;I=b+40|0;J=b+24|0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;K=a+44|0;bO(k[K>>2]|0,q,340);cO(k[K>>2]|0,x,478);cO(k[K>>2]|0,w,343);i[o>>0]=0;uoa(a,0,645);L=k[K>>2]|0;if(!(i[q>>0]|0)){cO(L,v,346);uoa(a,1,656);Eh(a);M=a+24|0}else{bO(L,s,341);dO(k[K>>2]|0,y,342);Eh(a);Aoa(d,a);L=a+24|0;Koa(e,k[d>>2]|0,k[L>>2]|0,k[K>>2]|0);xoa(a,k[d>>2]|0);M=L}L=z+56|0;N=z+4|0;O=z+56|0;P=z+128|0;R=z+132|0;S=z+36|0;T=z+52|0;U=G+56|0;V=G+4|0;W=G+56|0;X=G+128|0;Y=G+132|0;Z=G+36|0;_=G+52|0;$=D+56|0;aa=D+4|0;ba=D+56|0;ca=D+128|0;da=D+132|0;ea=D+36|0;fa=D+52|0;ga=1;while(1){ha=k[f>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}k[f>>2]=k[e>>2];if(i[q>>0]|0){ooa(j,l,m,n,0,a);if(i[s>>0]|0){ha=k[f>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}Koa(f,k[d>>2]|0,k[M>>2]|0,k[K>>2]|0)}}else ooa(j,l,m,n,h,a);ha=k[d>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}poa(g,k[M>>2]|0,k[x>>2]|0);Loa(k[m>>2]|0,k[l>>2]|0,k[g>>2]|0,0);ha=k[l>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}Poa(e,k[j>>2]|0,k[m>>2]|0,k[f>>2]|0,k[n>>2]|0,k[K>>2]|0);Roa(d,k[e>>2]|0,k[g>>2]|0,k[M>>2]|0,k[K>>2]|0,0);ha=k[g>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}if(i[q>>0]|0){Zoa(o,k[j>>2]|0,k[m>>2]|0,k[e>>2]|0,k[f>>2]|0,.05,+p[y>>3],F);uoa(a,(i[o>>0]|0)!=0,645)}ha=k[j>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}ha=k[m>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}ha=k[n>>2]|0;if(ha){if((k[ha>>2]|0)!=0?(ia=k[ha+4>>2]|0,(ia|0)!=0):0){ja=k[ia>>2]|0;if(ja)Ec[k[(k[ja>>2]|0)+4>>2]&1023](ja);Sqa(ia)}Sqa(ha)}xoa(a,k[d>>2]|0);Moa(t,u,a);if(EY()|0){k[z>>2]=27524;k[L>>2]=27544;B=0;wa(508,O|0,N|0);ha=B;B=0;if(ha&1){ka=72;break}k[P>>2]=0;k[R>>2]=-1;k[z>>2]=27468;k[L>>2]=27488;B=0;va(448,N|0);ha=B;B=0;if(ha&1){ka=73;break}k[N>>2]=27560;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[T>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);ha=B;B=0;if(ha&1){ka=71;break}Yua(c);B=0;ha=Ia(40,z|0,147646,35)|0;ia=B;B=0;if(ia&1){ka=82;break}B=0;ia=Xa(242,ha|0,k[u>>2]|0)|0;ha=B;B=0;if(ha&1){ka=82;break}B=0;Ia(40,ia|0,149177,1)|0;ia=B;B=0;if(ia&1){ka=82;break}B=0;wa(510,A|0,N|0);ia=B;B=0;if(ia&1){ka=82;break}B=0;ya(425,A|0)|0;ia=B;B=0;if(ia&1){ka=83;break}Yua(A);k[z>>2]=27468;k[L>>2]=27488;k[N>>2]=27560;Yua(S);Ava(N);vva(L)}if(!(i[q>>0]|0)){ia=i[o>>0]|0;if(!(ia<<24>>24)){if((k[u>>2]|0)>(k[v>>2]|0))la=0;else{i[o>>0]=1;la=1}if((ga|0)<(k[w>>2]|0))ma=la;else{i[o>>0]=1;k[G>>2]=27524;k[U>>2]=27544;B=0;wa(508,W|0,V|0);ha=B;B=0;if(ha&1){ka=116;break}k[X>>2]=0;k[Y>>2]=-1;k[G>>2]=27468;k[U>>2]=27488;B=0;va(448,V|0);ha=B;B=0;if(ha&1){ka=117;break}k[V>>2]=27560;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[_>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,V|0,c|0);ha=B;B=0;if(ha&1){ka=115;break}Yua(c);B=0;ha=Ia(40,G|0,148961,33)|0;ja=B;B=0;if(ja&1){ka=126;break}B=0;ja=Xa(242,ha|0,k[w>>2]|0)|0;ha=B;B=0;if(ha&1){ka=126;break}B=0;Ia(40,ja|0,148995,11)|0;ja=B;B=0;if(ja&1){ka=126;break}B=0;wa(510,H|0,V|0);ja=B;B=0;if(ja&1){ka=126;break}B=0;ya(425,H|0)|0;ja=B;B=0;if(ja&1){ka=127;break}Yua(H);k[G>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(U);ma=i[o>>0]|0}}else ma=ia;ia=ga+1|0;uoa(a,ma<<24>>24!=0,645);if(!(i[o>>0]|0)){ga=ia;continue}else{na=ia;ka=131;break}}else{dO(k[K>>2]|0,C,358);ia=ga+1|0;if((ia|0)>=(k[w>>2]|0)){k[D>>2]=27524;k[$>>2]=27544;B=0;wa(508,ba|0,aa|0);ja=B;B=0;if(ja&1){ka=91;break}k[ca>>2]=0;k[da>>2]=-1;k[D>>2]=27468;k[$>>2]=27488;B=0;va(448,aa|0);ja=B;B=0;if(ja&1){ka=92;break}k[aa>>2]=27560;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[fa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,aa|0,c|0);ja=B;B=0;if(ja&1){ka=90;break}Yua(c);B=0;ja=Ia(40,D|0,147682,43)|0;ha=B;B=0;if(ha&1){ka=101;break}B=0;ha=Xa(242,ja|0,k[w>>2]|0)|0;ja=B;B=0;if(ja&1){ka=101;break}B=0;Ia(40,ha|0,148995,11)|0;ha=B;B=0;if(ha&1){ka=101;break}B=0;wa(510,E|0,aa|0);ha=B;B=0;if(ha&1){ka=101;break}B=0;ya(425,E|0)|0;ha=B;B=0;if(ha&1){ka=102;break}Yua(E);k[D>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ea);Ava(aa);vva($);i[o>>0]=1;uoa(a,1,645);xoa(a,k[d>>2]|0)}if(i[o>>0]|0){oa=ia;ka=130;break}if(+p[C>>3]==0.0){Rba(a);lca(a)}ga=ia;continue}}switch(ka|0){case 71:{ga=Rb()|0;C=Q;Yua(c);Yua(S);Ava(N);pa=C;qa=ga;ka=74;break}case 72:{ga=Rb()|0;ra=Q;sa=ga;vva(L);Qb(sa|0);break}case 73:{ga=Rb()|0;pa=Q;qa=ga;ka=74;break}case 82:{ga=Rb()|0;ta=Q;ua=ga;ka=84;break}case 83:{ga=Rb()|0;C=Q;Yua(A);ta=C;ua=ga;ka=84;break}case 90:{ga=Rb()|0;C=Q;Yua(c);Yua(ea);Ava(aa);xa=C;za=ga;ka=93;break}case 91:{ga=Rb()|0;Aa=Q;Ba=ga;vva($);Qb(Ba|0);break}case 92:{ga=Rb()|0;xa=Q;za=ga;ka=93;break}case 101:{ga=Rb()|0;Ca=Q;Da=ga;ka=103;break}case 102:{ga=Rb()|0;C=Q;Yua(E);Ca=C;Da=ga;ka=103;break}case 115:{ga=Rb()|0;C=Q;Yua(c);Yua(Z);Ava(V);Ea=C;Fa=ga;ka=118;break}case 116:{ga=Rb()|0;Ga=Q;Ha=ga;vva(U);Qb(Ha|0);break}case 117:{ga=Rb()|0;Ea=Q;Fa=ga;ka=118;break}case 126:{ga=Rb()|0;Ja=Q;Ka=ga;ka=128;break}case 127:{ga=Rb()|0;C=Q;Yua(H);Ja=C;Ka=ga;ka=128;break}case 130:{na=oa;ka=131;break}}if((ka|0)==74){ra=pa;sa=qa;vva(L);Qb(sa|0)}else if((ka|0)==84){k[z>>2]=27468;k[L>>2]=27488;k[N>>2]=27560;Yua(S);Ava(N);vva(L);La=ta;Ma=ua;Qb(Ma|0)}else if((ka|0)==93){Aa=xa;Ba=za;vva($);Qb(Ba|0)}else if((ka|0)==103){k[D>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ea);Ava(aa);vva($);La=Ca;Ma=Da;Qb(Ma|0)}else if((ka|0)==118){Ga=Ea;Ha=Fa;vva(U);Qb(Ha|0)}else if((ka|0)==128){k[G>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(U);La=Ja;Ma=Ka;Qb(Ma|0)}else if((ka|0)==131){a:do if(i[q>>0]|0){if(EY()|0){Ka=I+56|0;Ja=I+4|0;k[I>>2]=27524;k[Ka>>2]=27544;B=0;wa(508,I+56|0,Ja|0);U=B;B=0;if(U&1){U=Rb()|0;Na=Q;Oa=U;vva(Ka);Qb(Oa|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[Ka>>2]=27488;B=0;va(448,Ja|0);U=B;B=0;do if(U&1){V=Rb()|0;Pa=Q;Qa=V}else{k[Ja>>2]=27560;V=I+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[I+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;G=Q;Yua(c);Yua(V);Ava(Ja);Pa=G;Qa=Z;break}Yua(c);B=0;Z=Ia(40,I|0,147767,32)|0;G=B;B=0;do if(((!(G&1)?(B=0,Ha=Xa(242,Z|0,na+-1|0)|0,Fa=B,B=0,!(Fa&1)):0)?(B=0,Ia(40,Ha|0,149177,1)|0,Ha=B,B=0,!(Ha&1)):0)?(B=0,wa(510,J|0,Ja|0),Ha=B,B=0,!(Ha&1)):0){B=0;ya(425,J|0)|0;Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Fa=Q;Yua(J);Ra=Fa;Sa=Ha;break}else{Yua(J);k[I>>2]=27468;k[Ka>>2]=27488;k[Ja>>2]=27560;Yua(V);Ava(Ja);vva(Ka);break a}}else ka=147;while(0);if((ka|0)==147){Z=Rb()|0;Ra=Q;Sa=Z}k[I>>2]=27468;k[Ka>>2]=27488;k[Ja>>2]=27560;Yua(V);Ava(Ja);vva(Ka);La=Ra;Ma=Sa;Qb(Ma|0)}while(0);Na=Pa;Oa=Qa;vva(Ka);Qb(Oa|0)}}else{xoa(a,k[d>>2]|0);pO(k[K>>2]|0,+p[h>>3],651)}while(0);h=k[d>>2]|0;if(h){if((k[h>>2]|0)!=0?(d=k[h+4>>2]|0,(d|0)!=0):0){K=k[d>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(d)}Sqa(h)}h=k[e>>2]|0;if(h){if((k[h>>2]|0)!=0?(e=k[h+4>>2]|0,(e|0)!=0):0){d=k[e>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);Sqa(e)}Sqa(h)}h=k[f>>2]|0;if(!h){r=b;return}if((k[h>>2]|0)!=0?(f=k[h+4>>2]|0,(f|0)!=0):0){e=k[f>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(f)}Sqa(h);r=b;return}}function D_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;d=r;r=r+416|0;e=d+388|0;f=d+400|0;g=d+384|0;h=d+380|0;j=d+376|0;l=d+372|0;m=d+368|0;n=d+364|0;o=d+360|0;p=d+356|0;q=d+352|0;s=d+348|0;t=d+200|0;u=d+336|0;v=d+48|0;w=d+36|0;x=d+64|0;y=d+24|0;z=d+12|0;A=d;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;k[p>>2]=0;k[q>>2]=0;k[s>>2]=0;zka(b,f,139791);Fka(b,g,112523);if(!(i[f>>0]|0)){r=d;return}YN(a,Ika(b,113066,198)|0);YN(a,Ika(b,113428,199)|0);f=Qqa(12)|0;B=0;do if((c|0)==518){vO(f,936,1);C=B;B=0;if(!(C&1)){YN(a,f);break}C=Rb()|0;D=Q;Sqa(f);E=D;F=C;Qb(F|0)}else{vO(f,936,0);C=B;B=0;if(!(C&1)){YN(a,f);break}C=Rb()|0;D=Q;Sqa(f);E=D;F=C;Qb(F|0)}while(0);Hka(b,m,j,113102);f=k[j>>2]|0;if((f|0)<1){c=t+56|0;C=t+4|0;k[t>>2]=27524;k[c>>2]=27544;B=0;wa(508,t+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;G=Q;H=D;vva(c);Qb(H|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[c>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){I=Rb()|0;J=Q;K=I}else{k[C>>2]=27560;I=t+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,C|0,e|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(e);Yua(I);Ava(C);J=M;K=L;break}Yua(e);B=0;L=Ia(40,t|0,113134,17)|0;M=B;B=0;a:do if(!(M&1)?(B=0,Xa(239,L|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,u|0,112541,106);O=B;B=0;do if(!(O&1)){B=0;eb(502,v|0,112648,23);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(u);S=P;T=R;break}B=0;wa(510,w|0,C|0);R=B;B=0;if(R&1){R=Rb()|0;U=Q;V=R;W=1}else{B=0;ua(163,N|0,u|0,v|0,44,w|0);R=B;B=0;if(R&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}R=Rb()|0;P=Q;Yua(w);U=P;V=R;W=X}Yua(v);Yua(u);if(W){S=V;T=U}else{Y=V;Z=U;break a}}else{R=Rb()|0;S=R;T=Q}while(0);zb(N|0);Y=S;Z=T}else _=25;while(0);if((_|0)==25){L=Rb()|0;Y=L;Z=Q}k[t>>2]=27468;k[c>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(c);E=Z;F=Y;Qb(F|0)}while(0);G=J;H=K;vva(c);Qb(H|0)}H=Rqa(f>>>0>1073741823?-1:f<<2)|0;f=k[m>>2]|0;c=0;while(1){K=zY(k[f+(c<<2)>>2]|0,1)|0;k[H+(c<<2)>>2]=K;K=(k[m>>2]|0)+(c<<2)|0;J=k[K>>2]|0;if(J)Tqa(J);k[K>>2]=0;c=c+1|0;K=k[j>>2]|0;J=k[m>>2]|0;if((c|0)>=(K|0)){$=K;aa=J;break}else f=J}if(!aa)ba=$;else{Tqa(aa);ba=k[j>>2]|0}k[m>>2]=0;m=Qqa(16)|0;B=0;ib(293,m|0,176,H|0,ba|0);ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Sqa(m);E=aa;F=ba;Qb(F|0)}YN(a,m);Cka(b,o,0,l,113303);m=Qqa(16)|0;B=0;ib(293,m|0,180,k[o>>2]|0,k[l>>2]|0);l=B;B=0;if(l&1){l=Rb()|0;ba=Q;Sqa(m);E=ba;F=l;Qb(F|0)}YN(a,m);Tqa(H);b:do switch(k[g>>2]|0){case 0:{YN(a,Ika(b,112672,184)|0);YN(a,Ika(b,112704,196)|0);YN(a,Ika(b,112724,178)|0);Qka(b,p,h,0,112761);Qka(b,q,0,0,112789);Cka(b,n,0,0,112819);H=Qqa(20)|0;B=0;ua(171,H|0,181,k[q>>2]|0,k[h>>2]|0,k[j>>2]|0);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Sqa(H);E=l;F=m;Qb(F|0)}YN(a,H);H=Qqa(16)|0;B=0;ib(297,H|0,200,k[p>>2]|0,k[h>>2]|0);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Sqa(H);E=l;F=m;Qb(F|0)}YN(a,H);H=Qqa(16)|0;B=0;ib(293,H|0,186,k[n>>2]|0,k[h>>2]|0);m=B;B=0;if(!(m&1)){YN(a,H);break b}m=Rb()|0;l=Q;Sqa(H);E=l;F=m;Qb(F|0);break}case 1:{YN(a,Ika(b,112672,184)|0);YN(a,Ika(b,112849,189)|0);YN(a,Ika(b,112868,190)|0);YN(a,Ika(b,112887,191)|0);YN(a,Ika(b,112906,192)|0);YN(a,Ika(b,112925,193)|0);YN(a,Ika(b,112944,188)|0);YN(a,Ika(b,112966,187)|0);YN(a,Ika(b,112987,194)|0);break}case 2:{YN(a,Ika(b,112672,184)|0);YN(a,Ika(b,113010,197)|0);YN(a,Ika(b,112925,193)|0);YN(a,Ika(b,112944,188)|0);YN(a,Ika(b,112966,187)|0);Qka(b,s,0,0,113029);m=Qqa(16)|0;B=0;ib(297,m|0,177,k[s>>2]|0,k[j>>2]|0);l=B;B=0;if(!(l&1)){YN(a,m);break b}l=Rb()|0;H=Q;Sqa(m);E=H;F=l;Qb(F|0);break}case 3:{YN(a,Ika(b,112672,184)|0);Qka(b,s,0,0,113029);l=Qqa(16)|0;B=0;ib(297,l|0,177,k[s>>2]|0,k[j>>2]|0);H=B;B=0;if(!(H&1)){YN(a,l);break b}H=Rb()|0;m=Q;Sqa(l);E=m;F=H;Qb(F|0);break}case 4:{YN(a,Ika(b,113010,197)|0);YN(a,Ika(b,112925,193)|0);YN(a,Ika(b,112944,188)|0);YN(a,Ika(b,112966,187)|0);Qka(b,s,0,0,113029);H=Qqa(16)|0;B=0;ib(297,H|0,177,k[s>>2]|0,k[j>>2]|0);m=B;B=0;if(!(m&1)){YN(a,H);break b}m=Rb()|0;l=Q;Sqa(H);E=l;F=m;Qb(F|0);break}default:{m=x+56|0;l=x+4|0;k[x>>2]=27524;k[m>>2]=27544;B=0;wa(508,x+56|0,l|0);H=B;B=0;if(H&1){H=Rb()|0;ca=Q;da=H;vva(m);Qb(da|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[m>>2]=27488;B=0;va(448,l|0);H=B;B=0;do if(H&1){ba=Rb()|0;ea=Q;fa=ba}else{k[l>>2]=27560;ba=x+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[x+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,l|0,e|0);aa=B;B=0;if(aa&1){aa=Rb()|0;$=Q;Yua(e);Yua(ba);Ava(l);ea=$;fa=aa;break}Yua(e);B=0;aa=Ia(40,x|0,145010,13)|0;$=B;B=0;c:do if(!($&1)?(B=0,Xa(239,aa|0,0)|0,f=B,B=0,!(f&1)):0){f=Ab(20)|0;B=0;eb(502,y|0,112541,106);c=B;B=0;do if(!(c&1)){B=0;eb(502,z|0,112648,23);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(y);ga=J;ha=K;break}B=0;wa(510,A|0,l|0);K=B;B=0;if(K&1){K=Rb()|0;ia=1;ja=Q;ka=K}else{B=0;ua(163,f|0,y|0,z|0,104,A|0);K=B;B=0;if(K&1)la=1;else{B=0;eb(503,f|0,1240,229);B=0;la=0}K=Rb()|0;J=Q;Yua(A);ia=la;ja=J;ka=K}Yua(z);Yua(y);if(ia){ga=ka;ha=ja}else{ma=ja;na=ka;break c}}else{K=Rb()|0;ga=K;ha=Q}while(0);zb(f|0);ma=ha;na=ga}else _=76;while(0);if((_|0)==76){aa=Rb()|0;ma=Q;na=aa}k[x>>2]=27468;k[m>>2]=27488;k[l>>2]=27560;Yua(ba);Ava(l);vva(m);E=ma;F=na;Qb(F|0)}while(0);ca=ea;da=fa;vva(m);Qb(da|0)}}while(0);da=k[o>>2]|0;if(da)Tqa(da);k[o>>2]=0;o=k[n>>2]|0;if(o)Tqa(o);k[n>>2]=0;n=k[s>>2]|0;if(n)Tqa(n);k[s>>2]=0;Mka(b,k[p>>2]|0,112761);Mka(b,k[q>>2]|0,112789);r=d;return}function E_(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0;b=r;r=r+752|0;d=b+200|0;e=b+192|0;f=b+184|0;g=b+176|0;h=b+168|0;j=b+160|0;l=b+152|0;m=b+144|0;n=b+136|0;o=b+128|0;q=b+120|0;s=b+104|0;t=b+96|0;u=b+88|0;v=b+80|0;w=b+72|0;x=b+64|0;y=b+56|0;z=b+48|0;A=b+40|0;C=b+32|0;D=b+24|0;E=b+16|0;F=b;G=b+600|0;H=b+596|0;I=b+592|0;J=b+588|0;K=b+584|0;L=b+736|0;M=b+424|0;N=b+572|0;O=b+560|0;P=b+412|0;R=b+400|0;S=b+252|0;T=b+240|0;U=b+264|0;V=b+228|0;W=b+216|0;X=b+204|0;zka(c,L,139791);if(!(i[L>>0]|0)){r=b;return}Fka(c,I,113066);if(!(i[L>>0]|0)){r=b;return}Hka(c,K,I,113102);L=k[I>>2]|0;if((L|0)<1){Y=M+56|0;Z=M+4|0;k[M>>2]=27524;k[Y>>2]=27544;B=0;wa(508,M+56|0,Z|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;aa=_;vva(Y);Qb(aa|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[Y>>2]=27488;B=0;va(448,Z|0);_=B;B=0;do if(_&1){ba=Rb()|0;ca=Q;da=ba}else{k[Z>>2]=27560;ba=M+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[M+52>>2]=16;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;B=0;wa(509,Z|0,G|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(G);Yua(ba);Ava(Z);ca=fa;da=ea;break}Yua(G);B=0;ea=Ia(40,M|0,113134,17)|0;fa=B;B=0;a:do if(!(fa&1)?(B=0,Xa(239,ea|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,N|0,113152,116);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,O|0,113269,33);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(N);ka=ja;la=ia;break}B=0;wa(510,P|0,Z|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ma=Q;na=ia;oa=1}else{B=0;ua(163,ga|0,N|0,O|0,31,P|0);ia=B;B=0;if(ia&1)pa=1;else{B=0;eb(503,ga|0,1240,229);B=0;pa=0}ia=Rb()|0;ja=Q;Yua(P);ma=ja;na=ia;oa=pa}Yua(O);Yua(N);if(oa){ka=ma;la=na}else{qa=ma;ra=na;break a}}else{ia=Rb()|0;ka=Q;la=ia}while(0);zb(ga|0);qa=ka;ra=la}else sa=19;while(0);if((sa|0)==19){ea=Rb()|0;qa=Q;ra=ea}k[M>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(ba);Ava(Z);vva(Y);ta=qa;xa=ra;Qb(xa|0)}while(0);$=ca;aa=da;vva(Y);Qb(aa|0)}aa=Rqa(L>>>0>1073741823?-1:L<<2)|0;L=0;do{Y=zY(k[(k[K>>2]|0)+(L<<2)>>2]|0,1)|0;k[aa+(L<<2)>>2]=Y;L=L+1|0}while((L|0)<(k[I>>2]|0));k[F>>2]=113303;k[F+4>>2]=113331;k[F+8>>2]=113372;k[F+12>>2]=113400;Ska(c,4,F);Fka(c,J,113428);Fka(c,H,139814);b:do if((k[J>>2]|0)>0){L=0;while(1){Y=(Jka(c,113303)|0)+(L<<3)|0;switch(~~+p[Y>>3]|0){case 669:{Zka(c,a,113460,201);break}case 670:{Zka(c,a,113487,202);break}case 658:case 660:case 661:case 662:case 663:{Zka(c,a,113512,203);if((k[H>>2]|0)!=301)Zka(c,a,113532,204);break}default:{}}L=L+1|0;if((L|0)>=(k[J>>2]|0))break b}}while(0);J=k[I>>2]|0;c:do if((J|0)>0){H=0;d:while(1){L=k[aa+(H<<2)>>2]|0;do switch(L|0){case 36:{k[E>>2]=126035;Ska(c,1,E);break}case 674:{k[D>>2]=135923;Ska(c,1,D);break}case 677:{k[C>>2]=135944;Ska(c,1,C);break}case 353:{k[A>>2]=137052;Ska(c,1,A);break}case 105:{k[z>>2]=135172;Ska(c,1,z);break}case 104:{k[y>>2]=135273;Ska(c,1,y);break}case 375:{k[x>>2]=113552;Ska(c,1,x);break}case 379:{k[w>>2]=125662;Ska(c,1,w);break}case 214:{k[v>>2]=134991;Ska(c,1,v);break}case 215:{k[u>>2]=134991;Ska(c,1,u);break}case 227:{k[t>>2]=126277;Ska(c,1,t);break}default:{za=L;break d}}while(0);H=H+1|0;L=k[I>>2]|0;if((H|0)>=(L|0)){Aa=L;break c}}H=G+56|0;L=G+4|0;k[G>>2]=27524;k[H>>2]=27544;B=0;wa(508,G+56|0,L|0);ga=B;B=0;if(ga&1){ga=Rb()|0;Ba=Q;Ca=ga;vva(H);Qb(Ca|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[H>>2]=27488;B=0;va(448,L|0);ga=B;B=0;do if(ga&1){ba=Rb()|0;Da=Q;Ea=ba}else{k[L>>2]=27560;ba=G+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[G+52>>2]=16;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;B=0;wa(509,L|0,F|0);Y=B;B=0;if(Y&1){Y=Rb()|0;da=Q;Yua(F);Yua(ba);Ava(L);Da=da;Ea=Y;break}Yua(F);B=0;Y=Ia(40,G|0,125582,8)|0;da=B;B=0;e:do if((((!(da&1)?(B=0,ca=ya(427,za|0)|0,$=B,B=0,!($&1)):0)?($=Lta(ca)|0,B=0,ra=Ia(40,Y|0,ca|0,$|0)|0,$=B,B=0,!($&1)):0)?(B=0,$=Ia(40,ra|0,127493,20)|0,ra=B,B=0,!(ra&1)):0)?(B=0,Xa(239,$|0,0)|0,$=B,B=0,!($&1)):0){$=Ab(20)|0;B=0;eb(502,R|0,113152,116);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,S|0,113269,33);ca=B;B=0;if(ca&1){ca=Rb()|0;qa=Q;Yua(R);Fa=ca;Ga=qa;break}B=0;wa(510,T|0,L|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Ha=1;Ja=Q;Ka=qa}else{B=0;ua(163,$|0,R|0,S|0,74,T|0);qa=B;B=0;if(qa&1)La=1;else{B=0;eb(503,$|0,1240,229);B=0;La=0}qa=Rb()|0;ca=Q;Yua(T);Ha=La;Ja=ca;Ka=qa}Yua(S);Yua(R);if(Ha){Fa=Ka;Ga=Ja}else{Ma=Ja;Na=Ka;break e}}else{qa=Rb()|0;Fa=qa;Ga=Q}while(0);zb($|0);Ma=Ga;Na=Fa}else sa=69;while(0);if((sa|0)==69){Y=Rb()|0;Ma=Q;Na=Y}k[G>>2]=27468;k[H>>2]=27488;k[L>>2]=27560;Yua(ba);Ava(L);vva(H);ta=Ma;xa=Na;Qb(xa|0)}while(0);Ba=Da;Ca=Ea;vva(H);Qb(Ca|0)}else Aa=J;while(0);J=c+56|0;Ca=k[J>>2]|0;if((Ca|0)>0){Ea=c+32|0;Da=Ca;Ca=0;Ba=0;while(1){if(!(i[(k[Ea>>2]|0)+Ba>>0]|0)){Oa=Da;Pa=Ca}else{Na=(qh(a,Ca)|0)+4|0;nd[k[(k[Na>>2]|0)+16>>2]&1023](Na,Ba,c);Oa=k[J>>2]|0;Pa=Ca+1|0}Ba=Ba+1|0;if((Ba|0)>=(Oa|0))break;else{Da=Oa;Ca=Pa}}Qa=k[I>>2]|0}else Qa=Aa;f:do if((Qa|0)>0){Aa=0;g:while(1){Pa=aa+(Aa<<2)|0;do switch(k[Pa>>2]|0){case 36:{k[q>>2]=126035;Lka(c,1,q);break}case 674:{k[o>>2]=135923;Lka(c,1,o);break}case 677:{k[n>>2]=135944;Lka(c,1,n);break}case 353:{k[m>>2]=137052;Lka(c,1,m);break}case 105:{k[l>>2]=135172;Lka(c,1,l);break}case 104:{k[j>>2]=135273;Lka(c,1,j);break}case 375:{k[h>>2]=113552;Lka(c,1,h);break}case 379:{k[g>>2]=125662;Lka(c,1,g);break}case 214:{k[f>>2]=134991;Lka(c,1,f);break}case 215:{k[e>>2]=134991;Lka(c,1,e);break}case 227:{k[d>>2]=126277;Lka(c,1,d);break}default:{Ra=Pa;break g}}while(0);Aa=Aa+1|0;if((Aa|0)>=(k[I>>2]|0))break f}Aa=U+56|0;H=U+4|0;k[U>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,U+56|0,H|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Sa=Q;Ta=Pa;vva(Aa);Qb(Ta|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[Aa>>2]=27488;B=0;va(448,H|0);Pa=B;B=0;do if(Pa&1){ba=Rb()|0;Ua=Q;Va=ba}else{k[H>>2]=27560;ba=U+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[U+52>>2]=16;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;B=0;wa(509,H|0,F|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Oa=Q;Yua(F);Yua(ba);Ava(H);Ua=Oa;Va=Ca;break}Yua(F);B=0;Ca=Ia(40,U|0,125582,8)|0;Oa=B;B=0;h:do if((((!(Oa&1)?(B=0,Da=ya(427,k[Ra>>2]|0)|0,Ba=B,B=0,!(Ba&1)):0)?(Ba=Lta(Da)|0,B=0,J=Ia(40,Ca|0,Da|0,Ba|0)|0,Ba=B,B=0,!(Ba&1)):0)?(B=0,Ba=Ia(40,J|0,127493,20)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,Ba|0,0)|0,Ba=B,B=0,!(Ba&1)):0){Ba=Ab(20)|0;B=0;eb(502,V|0,113152,116);J=B;B=0;do if(!(J&1)){B=0;eb(502,W|0,113269,33);Da=B;B=0;if(Da&1){Da=Rb()|0;a=Q;Yua(V);Wa=Da;Ya=a;break}B=0;wa(510,X|0,H|0);a=B;B=0;if(a&1){a=Rb()|0;Za=1;_a=Q;$a=a}else{B=0;ua(163,Ba|0,V|0,W|0,105,X|0);a=B;B=0;if(a&1)ab=1;else{B=0;eb(503,Ba|0,1240,229);B=0;ab=0}a=Rb()|0;Da=Q;Yua(X);Za=ab;_a=Da;$a=a}Yua(W);Yua(V);if(Za){Wa=$a;Ya=_a}else{bb=_a;cb=$a;break h}}else{a=Rb()|0;Wa=a;Ya=Q}while(0);zb(Ba|0);bb=Ya;cb=Wa}else sa=114;while(0);if((sa|0)==114){Ca=Rb()|0;bb=Q;cb=Ca}k[U>>2]=27468;k[Aa>>2]=27488;k[H>>2]=27560;Yua(ba);Ava(H);vva(Aa);ta=bb;xa=cb;Qb(xa|0)}while(0);Sa=Ua;Ta=Va;vva(Aa);Qb(Ta|0)}while(0);k[s>>2]=113303;k[s+4>>2]=113331;k[s+8>>2]=113372;k[s+12>>2]=113400;Lka(c,4,s);Tqa(aa);aa=k[I>>2]|0;s=k[K>>2]|0;if((aa|0)>0){c=s;Ta=aa;aa=0;while(1){Va=c+(aa<<2)|0;Ua=k[Va>>2]|0;if(!Ua)db=Ta;else{Tqa(Ua);db=k[I>>2]|0}k[Va>>2]=0;aa=aa+1|0;Va=k[K>>2]|0;if((aa|0)>=(db|0)){fb=Va;break}else{c=Va;Ta=db}}}else fb=s;if(fb)Tqa(fb);k[K>>2]=0;r=b;return}function F_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+G_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function G_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;b=r;r=r+256|0;c=b+232|0;d=b+228|0;e=b+40|0;f=b+32|0;g=b+24|0;h=b+16|0;i=b+8|0;j=b;l=b+224|0;m=b+88|0;n=b+72|0;o=b+60|0;q=b+48|0;k[l>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){s=0.0;r=b;return +s}if(!($p(a)|0)){s=0.0;r=b;return +s}cp(a,d,298);t=(k[d>>2]|0)+-300|0;if(t>>>0<3){u=(t&1|0)==0;t=Hc[k[(k[a>>2]|0)+436>>2]&511](a)|0;Uo(t,l);a=Wo(t,179)|0;v=Wo(t,674)|0;w=Wo(t,203)|0;if(u){x=Wo(t,677)|0;y=x;z=Wo(t,204)|0}else{y=0;z=0}x=ed[k[(k[t>>2]|0)+308>>2]&511](t,2)|0;A=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((A|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){C=x+8|0;if(u){D=0.0;u=A;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,u);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,658);nd[k[(k[v>>2]|0)+48>>2]&1023](v,f,x);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,x);nd[k[(k[y>>2]|0)+48>>2]&1023](y,g,x);nd[k[(k[z>>2]|0)+48>>2]&1023](z,i,x);E=+p[f>>3]-+p[h>>3];F=+p[g>>3]-+p[i>>3];G=D+(E*(E*.5)+F*(F*.5))*+p[j>>3]*+p[e>>3]*+p[C>>3];u=u+1|0;if((u|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){H=G;break}else D=G}}else{D=0.0;u=A;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,u);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,658);nd[k[(k[v>>2]|0)+48>>2]&1023](v,f,x);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,x);G=+p[f>>3]-+p[h>>3];F=D+G*(G*.5)*+p[j>>3]*+p[e>>3]*+p[C>>3];u=u+1|0;if((u|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){H=F;break}else D=F}}}else H=0.0;if((k[d>>2]|0)!=300){ap(t);Ec[k[(k[t>>2]|0)+4>>2]&1023](t)}t=k[l>>2]|0;if(t)Tqa(t);k[l>>2]=0;if(!x){s=H;r=b;return +s}Ec[k[(k[x>>2]|0)+4>>2]&1023](x);s=H;r=b;return +s}b=m+56|0;x=m+4|0;k[m>>2]=27524;k[b>>2]=27544;B=0;wa(508,m+56|0,x|0);l=B;B=0;if(l&1){l=Rb()|0;I=Q;J=l;vva(b);Qb(J|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[b>>2]=27488;B=0;va(448,x|0);l=B;B=0;do if(l&1){t=Rb()|0;K=Q;L=t}else{k[x>>2]=27560;t=m+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;u=Q;Yua(c);Yua(t);Ava(x);K=u;L=d;break}Yua(c);B=0;d=Ia(40,m|0,134695,17)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,n|0,113593,100);u=B;B=0;do if(!(u&1)){B=0;eb(502,o|0,113694,19);C=B;B=0;if(C&1){C=Rb()|0;e=Q;Yua(n);M=e;N=C;break}B=0;wa(510,q|0,x|0);C=B;B=0;if(C&1){C=Rb()|0;O=Q;P=C;R=1}else{B=0;ua(163,d|0,n|0,o|0,51,q|0);C=B;B=0;if(C&1)S=1;else{B=0;eb(503,d|0,1240,229);B=0;S=0}C=Rb()|0;e=Q;Yua(q);O=e;P=C;R=S}Yua(o);Yua(n);if(R){M=O;N=P}else{T=O;U=P;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(U|0)}}else{C=Rb()|0;M=Q;N=C}while(0);zb(d|0);T=M;U=N;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(U|0)}u=Rb()|0;T=Q;U=u;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(U|0)}while(0);I=K;J=L;vva(b);Qb(J|0);return +(0.0)}function H_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+I_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function I_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+256|0;c=b+232|0;d=b+228|0;e=b+40|0;f=b+32|0;g=b+24|0;h=b+16|0;i=b+8|0;j=b;l=b+224|0;m=b+88|0;n=b+72|0;o=b+60|0;q=b+48|0;k[l>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){s=0.0;r=b;return +s}if(!($p(a)|0)){s=0.0;r=b;return +s}cp(a,d,298);t=(k[d>>2]|0)+-300|0;if(t>>>0<3){u=(t&1|0)==0;t=Hc[k[(k[a>>2]|0)+436>>2]&511](a)|0;Uo(t,l);a=Wo(t,179)|0;v=Wo(t,674)|0;w=Wo(t,203)|0;if(u){x=Wo(t,677)|0;y=x;z=Wo(t,204)|0}else{y=0;z=0}x=ed[k[(k[t>>2]|0)+308>>2]&511](t,4)|0;A=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((A|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){C=x+8|0;if(u){D=0.0;u=A;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,u);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,663);nd[k[(k[v>>2]|0)+48>>2]&1023](v,f,x);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,x);nd[k[(k[y>>2]|0)+48>>2]&1023](y,g,x);nd[k[(k[z>>2]|0)+48>>2]&1023](z,i,x);E=+p[h>>3];F=3.170979198376458e-05/(E+2.220446049250313e-16);G=+p[i>>3];H=3.170979198376458e-05/(G+2.220446049250313e-16);I=+p[f>>3]-E;J=+p[g>>3]-G;K=D+((E==0.0?0.0:F*F)*(I*I)+(G==0.0?0.0:H*H)*(J*J))*.5*+p[j>>3]*+p[e>>3]*+p[C>>3];u=u+1|0;if((u|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){L=K;break}else D=K}}else{D=0.0;u=A;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,u);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,663);nd[k[(k[v>>2]|0)+48>>2]&1023](v,f,x);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,x);K=+p[h>>3];J=3.170979198376458e-05/(K+2.220446049250313e-16);H=+p[f>>3]-K;G=D+(K==0.0?0.0:J*J)*(H*H)*.5*+p[j>>3]*+p[e>>3]*+p[C>>3];u=u+1|0;if((u|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){L=G;break}else D=G}}}else L=0.0;if((k[d>>2]|0)!=300){ap(t);Ec[k[(k[t>>2]|0)+4>>2]&1023](t)}t=k[l>>2]|0;if(t)Tqa(t);k[l>>2]=0;if(!x){s=L;r=b;return +s}Ec[k[(k[x>>2]|0)+4>>2]&1023](x);s=L;r=b;return +s}b=m+56|0;x=m+4|0;k[m>>2]=27524;k[b>>2]=27544;B=0;wa(508,m+56|0,x|0);l=B;B=0;if(l&1){l=Rb()|0;M=Q;N=l;vva(b);Qb(N|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[b>>2]=27488;B=0;va(448,x|0);l=B;B=0;do if(l&1){t=Rb()|0;O=Q;P=t}else{k[x>>2]=27560;t=m+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;u=Q;Yua(c);Yua(t);Ava(x);O=u;P=d;break}Yua(c);B=0;d=Ia(40,m|0,134695,17)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,n|0,113714,100);u=B;B=0;do if(!(u&1)){B=0;eb(502,o|0,113815,19);C=B;B=0;if(C&1){C=Rb()|0;e=Q;Yua(n);R=e;S=C;break}B=0;wa(510,q|0,x|0);C=B;B=0;if(C&1){C=Rb()|0;T=Q;U=C;V=1}else{B=0;ua(163,d|0,n|0,o|0,53,q|0);C=B;B=0;if(C&1)W=1;else{B=0;eb(503,d|0,1240,229);B=0;W=0}C=Rb()|0;e=Q;Yua(q);T=e;U=C;V=W}Yua(o);Yua(n);if(V){R=T;S=U}else{X=T;Y=U;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(Y|0)}}else{C=Rb()|0;R=Q;S=C}while(0);zb(d|0);X=R;Y=S;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(Y|0)}u=Rb()|0;X=Q;Y=u;k[m>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(b);Qb(Y|0)}while(0);M=O;N=P;vva(b);Qb(N|0);return +(0.0)}function J_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+K_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function K_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0,_=0.0,ba=0.0;b=r;r=r+256|0;c=b+232|0;d=b+228|0;e=b+40|0;f=b+32|0;g=b+24|0;h=b+16|0;i=b+8|0;j=b;l=b+224|0;m=b+88|0;n=b+72|0;o=b+60|0;q=b+48|0;k[l>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){s=0.0;r=b;return +s}if(!($p(a)|0)){s=0.0;r=b;return +s}cp(a,d,298);switch(k[d>>2]|0){case 301:{t=1;break}case 302:{t=2;break}case 300:{t=2;break}default:{u=m+56|0;v=m+4|0;k[m>>2]=27524;k[u>>2]=27544;B=0;wa(508,m+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=m+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(v);A=E;C=D;break}Yua(c);B=0;D=Ia(40,m|0,134695,17)|0;E=B;B=0;if(!(E&1)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,n|0,113835,100);E=B;B=0;do if(!(E&1)){B=0;eb(502,o|0,113936,19);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(n);H=G;I=F;break}B=0;wa(510,q|0,v|0);F=B;B=0;if(F&1){F=Rb()|0;J=Q;K=F;L=1}else{B=0;ua(163,D|0,n|0,o|0,54,q|0);F=B;B=0;if(F&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}F=Rb()|0;G=Q;Yua(q);J=G;K=F;L=M}Yua(o);Yua(n);if(L){H=J;I=K}else{N=J;O=K;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}}else{F=Rb()|0;H=Q;I=F}while(0);zb(D|0);N=H;O=I;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}E=Rb()|0;N=Q;O=E;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}y=Hc[k[(k[a>>2]|0)+436>>2]&511](a)|0;Uo(y,l);a=Wo(y,179)|0;u=Wo(y,674)|0;C=Wo(y,203)|0;A=(t|0)==2;if(A){x=Wo(y,677)|0;P=x;R=Wo(y,204)|0}else{P=0;R=0}x=ed[k[(k[y>>2]|0)+308>>2]&511](y,4)|0;O=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;a:do if((O|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){v=x+8|0;m=(t|0)==1;if(A){S=0.0;N=O;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,N);rd[k[(k[y>>2]|0)+260>>2]&511](y,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,661);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,x);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,x);nd[k[(k[P>>2]|0)+48>>2]&1023](P,g,x);nd[k[(k[R>>2]|0)+48>>2]&1023](R,i,x);T=+p[f>>3];U=+p[g>>3];V=+aa(+(T*T+U*U));U=+p[h>>3];T=+p[i>>3];W=+ka(+((V+2.220446049250313e-16)/(+aa(+(U*U+T*T))+2.220446049250313e-16)));T=S+ +p[v>>3]*(+p[e>>3]*(+p[j>>3]*(W*W*4.022043630614481e-09)));N=N+1|0;if((N|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){X=T;break a}else S=T}}else{Y=0.0;Z=O}while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,Z);rd[k[(k[y>>2]|0)+260>>2]&511](y,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,661);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,x);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,x);S=+p[f>>3];if(m){T=+$(+S);_=+$(+(+p[h>>3]));ba=T}else{T=+p[g>>3];W=+aa(+(S*S+T*T));T=+p[h>>3];S=+p[i>>3];_=+aa(+(T*T+S*S));ba=W}W=+ka(+((ba+2.220446049250313e-16)/(_+2.220446049250313e-16)));S=Y+ +p[v>>3]*(+p[e>>3]*(+p[j>>3]*(W*W*4.022043630614481e-09)));Z=Z+1|0;if((Z|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){X=S;break}else Y=S}}else X=0.0;while(0);if((k[d>>2]|0)!=300){ap(y);Ec[k[(k[y>>2]|0)+4>>2]&1023](y)}y=k[l>>2]|0;if(y)Tqa(y);k[l>>2]=0;if(!x){s=X;r=b;return +s}Ec[k[(k[x>>2]|0)+4>>2]&1023](x);s=X;r=b;return +s}function L_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+M_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function M_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;b=r;r=r+256|0;c=b+232|0;d=b+228|0;e=b+40|0;f=b+32|0;g=b+24|0;h=b+16|0;i=b+8|0;j=b;l=b+224|0;m=b+88|0;n=b+72|0;o=b+60|0;q=b+48|0;k[l>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){s=0.0;r=b;return +s}if(!($p(a)|0)){s=0.0;r=b;return +s}cp(a,d,298);switch(k[d>>2]|0){case 301:{t=1;break}case 302:{t=2;break}case 300:{t=2;break}default:{u=m+56|0;v=m+4|0;k[m>>2]=27524;k[u>>2]=27544;B=0;wa(508,m+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=m+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(v);A=E;C=D;break}Yua(c);B=0;D=Ia(40,m|0,134695,17)|0;E=B;B=0;if(!(E&1)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,n|0,113956,102);E=B;B=0;do if(!(E&1)){B=0;eb(502,o|0,114059,20);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(n);H=G;I=F;break}B=0;wa(510,q|0,v|0);F=B;B=0;if(F&1){F=Rb()|0;J=Q;K=F;L=1}else{B=0;ua(163,D|0,n|0,o|0,53,q|0);F=B;B=0;if(F&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}F=Rb()|0;G=Q;Yua(q);J=G;K=F;L=M}Yua(o);Yua(n);if(L){H=J;I=K}else{N=J;O=K;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}}else{F=Rb()|0;H=Q;I=F}while(0);zb(D|0);N=H;O=I;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}E=Rb()|0;N=Q;O=E;k[m>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);Qb(O|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}y=Hc[k[(k[a>>2]|0)+436>>2]&511](a)|0;Uo(y,l);a=Wo(y,179)|0;u=Wo(y,674)|0;C=Wo(y,203)|0;A=(t|0)==2;if(A){x=Wo(y,677)|0;P=x;R=Wo(y,204)|0}else{P=0;R=0}x=ed[k[(k[y>>2]|0)+308>>2]&511](y,4)|0;O=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((O|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){v=(t|0)==1;t=x+8|0;if(A){S=0.0;A=O;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,A);rd[k[(k[y>>2]|0)+260>>2]&511](y,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,662);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,x);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,x);nd[k[(k[P>>2]|0)+48>>2]&1023](P,g,x);nd[k[(k[R>>2]|0)+48>>2]&1023](R,i,x);T=+$(+(+p[f>>3]))+2.220446049250313e-16;U=+ka(+(T/(+$(+(+p[h>>3]))+2.220446049250313e-16)));T=U*U;if(v)V=T;else{U=+$(+(+p[g>>3]))+2.220446049250313e-16;W=+ka(+(U/(+$(+(+p[i>>3]))+2.220446049250313e-16)));V=T+W*W}W=S+V*5.027554538268101e-10*+p[j>>3]*+p[e>>3]*+p[t>>3];A=A+1|0;if((A|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){X=W;break}else S=W}}else{S=0.0;A=O;while(1){Fc[k[(k[x>>2]|0)+24>>2]&1023](x,A);rd[k[(k[y>>2]|0)+260>>2]&511](y,e,k[l>>2]|0,x);rd[k[(k[a>>2]|0)+56>>2]&511](a,j,x,662);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,x);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,x);V=+$(+(+p[f>>3]))+2.220446049250313e-16;W=+ka(+(V/(+$(+(+p[h>>3]))+2.220446049250313e-16)));V=W*W;if(v)Y=V;else{W=+$(+(+p[g>>3]))+2.220446049250313e-16;T=+ka(+(W/(+$(+(+p[i>>3]))+2.220446049250313e-16)));Y=V+T*T}T=S+Y*5.027554538268101e-10*+p[j>>3]*+p[e>>3]*+p[t>>3];A=A+1|0;if((A|0)>=(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){X=T;break}else S=T}}}else X=0.0;if((k[d>>2]|0)!=300?(ap(y),(y|0)!=0):0)Ec[k[(k[y>>2]|0)+4>>2]&1023](y);y=k[l>>2]|0;if(y)Tqa(y);k[l>>2]=0;if(!x){s=X;r=b;return +s}Ec[k[(k[x>>2]|0)+4>>2]&1023](x);s=X;r=b;return +s}function N_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=b+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;b=0;do{g=+O_(qh(k[f>>2]|0,b)|0)+g;p[d>>3]=g;b=b+1|0}while((b|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=c;return}function O_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0,_=0.0;b=r;r=r+256|0;c=b+240|0;d=b+236|0;e=b+48|0;f=b+40|0;g=b+32|0;h=b+24|0;i=b+16|0;j=b+8|0;l=b;m=b+232|0;n=b+96|0;o=b+80|0;q=b+68|0;s=b+56|0;k[m>>2]=0;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){t=0.0;r=b;return +t}if(!($p(a)|0)){t=0.0;r=b;return +t}cp(a,d,298);switch(k[d>>2]|0){case 301:{u=1;break}case 302:{u=2;break}case 300:{u=2;break}default:{v=n+56|0;w=n+4|0;k[n>>2]=27524;k[v>>2]=27544;B=0;wa(508,n+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=n+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;E=Ia(40,n|0,134695,17)|0;F=B;B=0;if(!(F&1)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,o|0,114080,108);F=B;B=0;do if(!(F&1)){B=0;eb(502,q|0,114189,23);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(o);I=H;J=G;break}B=0;wa(510,s|0,w|0);G=B;B=0;if(G&1){G=Rb()|0;K=Q;L=G;M=1}else{B=0;ua(163,E|0,o|0,q|0,58,s|0);G=B;B=0;if(G&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}G=Rb()|0;H=Q;Yua(s);K=H;L=G;M=N}Yua(q);Yua(o);if(M){I=K;J=L}else{O=K;P=L;k[n>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(P|0)}}else{G=Rb()|0;I=Q;J=G}while(0);zb(E|0);O=I;P=J;k[n>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(P|0)}F=Rb()|0;O=Q;P=F;k[n>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(P|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}z=Hc[k[(k[a>>2]|0)+436>>2]&511](a)|0;Uo(z,m);Bp(z,e,659);a=Wo(z,179)|0;v=Wo(z,674)|0;D=Wo(z,203)|0;C=(u|0)==2;if(C){y=Wo(z,677)|0;R=y;S=Wo(z,204)|0}else{R=0;S=0}y=ed[k[(k[z>>2]|0)+308>>2]&511](z,3)|0;P=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;a:do if((P|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){w=y+8|0;n=(u|0)==1;if(C){T=0.0;O=P;while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,O);rd[k[(k[z>>2]|0)+260>>2]&511](z,f,k[m>>2]|0,y);rd[k[(k[a>>2]|0)+56>>2]&511](a,l,y,660);nd[k[(k[v>>2]|0)+48>>2]&1023](v,g,y);nd[k[(k[D>>2]|0)+48>>2]&1023](D,i,y);nd[k[(k[R>>2]|0)+48>>2]&1023](R,h,y);nd[k[(k[S>>2]|0)+48>>2]&1023](S,j,y);U=+p[g>>3]-+p[i>>3];V=+p[h>>3]-+p[j>>3];W=1.0/+p[e>>3]*+aa(+(U*U+V*V));V=T+W*+p[l>>3]*+p[f>>3]*+p[w>>3];O=O+1|0;if((O|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){X=V;break a}else T=V}}else{Y=0.0;Z=P}while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,Z);rd[k[(k[z>>2]|0)+260>>2]&511](z,f,k[m>>2]|0,y);rd[k[(k[a>>2]|0)+56>>2]&511](a,l,y,660);nd[k[(k[v>>2]|0)+48>>2]&1023](v,g,y);nd[k[(k[D>>2]|0)+48>>2]&1023](D,i,y);T=1.0/+p[e>>3];V=+p[g>>3]-+p[i>>3];if(n)_=V*(T*V);else{W=+p[h>>3]-+p[j>>3];_=T*+aa(+(V*V+W*W))}W=Y+_*+p[l>>3]*+p[f>>3]*+p[w>>3];Z=Z+1|0;if((Z|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){X=W;break}else Y=W}}else X=0.0;while(0);if((k[d>>2]|0)!=300){ap(z);Ec[k[(k[z>>2]|0)+4>>2]&1023](z)}z=k[m>>2]|0;if(z)Tqa(z);k[m>>2]=0;if(!y){t=X;r=b;return +t}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);t=X;r=b;return +t}function P_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+Q_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function Q_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0.0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0.0,u=0.0,v=0.0;b=r;r=r+48|0;c=b+24|0;d=b+16|0;e=b+8|0;f=b;g=b+32|0;k[g>>2]=0;if(!($p(a)|0)){h=0.0;r=b;return +h}Uo(a,g);i=Wo(a,179)|0;j=Wo(a,353)|0;l=Wo(a,201)|0;m=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;n=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;if((n|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){o=m+8|0;q=0.0;s=n;while(1){Fc[k[(k[m>>2]|0)+24>>2]&1023](m,s);rd[k[(k[a>>2]|0)+260>>2]&511](a,f,k[g>>2]|0,m);rd[k[(k[i>>2]|0)+56>>2]&511](i,e,m,669);nd[k[(k[j>>2]|0)+48>>2]&1023](j,c,m);nd[k[(k[l>>2]|0)+48>>2]&1023](l,d,m);t=+p[c>>3]-+p[d>>3];u=q+ +p[o>>3]*(+p[f>>3]*(+p[e>>3]*(t*(t*.5))));s=s+1|0;if((s|0)>=(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){v=u;break}else q=u}}else v=0.0;s=k[g>>2]|0;if(s)Tqa(s);k[g>>2]=0;Ec[k[(k[m>>2]|0)+4>>2]&1023](m);h=v;r=b;return +h}function R_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+S_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function S_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0;b=r;r=r+240|0;c=b+216|0;d=b+212|0;e=b+24|0;f=b+8|0;g=b;h=b+208|0;i=b+72|0;j=b+56|0;l=b+44|0;m=b+32|0;k[h>>2]=0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){n=0.0;r=b;return +n}if(!($p(a)|0)){n=0.0;r=b;return +n}cp(a,d,298);switch(k[d>>2]|0){case 301:{o=1;break}case 302:{o=2;break}case 300:{o=2;break}default:{q=i+56|0;s=i+4|0;k[i>>2]=27524;k[q>>2]=27544;B=0;wa(508,i+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=i+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;z=Ia(40,i|0,134695,17)|0;A=B;B=0;if(!(A&1)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,114213,114);A=B;B=0;do if(!(A&1)){B=0;eb(502,l|0,114328,26);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(j);E=D;F=C;break}B=0;wa(510,m|0,s|0);C=B;B=0;if(C&1){C=Rb()|0;G=Q;H=C;I=1}else{B=0;ua(163,z|0,j|0,l|0,51,m|0);C=B;B=0;if(C&1)J=1;else{B=0;eb(503,z|0,1240,229);B=0;J=0}C=Rb()|0;D=Q;Yua(m);G=D;H=C;I=J}Yua(l);Yua(j);if(I){E=G;F=H}else{K=G;L=H;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}}else{C=Rb()|0;E=Q;F=C}while(0);zb(z|0);K=E;L=F;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}A=Rb()|0;K=Q;L=A;k[i>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Qb(L|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}}v=Hc[k[(k[a>>2]|0)+432>>2]&511](a)|0;Uo(v,h);a=Wo(v,179)|0;q=Wo(v,105)|0;y=ed[k[(k[v>>2]|0)+308>>2]&511](v,2)|0;x=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((x|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){u=y+8|0;L=f+8|0;if((o|0)==2){M=0.0;o=x;while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,o);rd[k[(k[v>>2]|0)+260>>2]&511](v,e,k[h>>2]|0,y);rd[k[(k[a>>2]|0)+56>>2]&511](a,g,y,696);rd[k[(k[q>>2]|0)+60>>2]&511](q,f,k[h>>2]|0,y);N=+p[g>>3]*.5;O=+p[f>>3];P=+p[e>>3];R=+p[u>>3];S=+p[L>>3];T=M+R*(P*(O*(N*O)))+R*(P*(S*(N*S)));o=o+1|0;if((o|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){U=T;break}else M=T}}else{M=0.0;o=x;while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,o);rd[k[(k[v>>2]|0)+260>>2]&511](v,e,k[h>>2]|0,y);rd[k[(k[a>>2]|0)+56>>2]&511](a,g,y,696);rd[k[(k[q>>2]|0)+60>>2]&511](q,f,k[h>>2]|0,y);T=+p[f>>3];S=M+ +p[u>>3]*(+p[e>>3]*(T*(+p[g>>3]*.5*T)));o=o+1|0;if((o|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){U=S;break}else M=S}}}else U=0.0;if((k[d>>2]|0)!=300?(ap(v),(v|0)!=0):0)Ec[k[(k[v>>2]|0)+4>>2]&1023](v);v=k[h>>2]|0;if(v)Tqa(v);k[h>>2]=0;if(!y){n=U;r=b;return +n}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);n=U;r=b;return +n}function T_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+U_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function U_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;b=r;r=r+80|0;c=b+56|0;d=b+48|0;e=b+40|0;f=b+64|0;g=b+16|0;h=b+8|0;i=b;k[f>>2]=0;if(!($p(a)|0)){j=0.0;r=b;return +j}Uo(a,f);l=Wo(a,179)|0;m=Wo(a,353)|0;n=Wo(a,674)|0;o=Wo(a,677)|0;q=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=g+8|0;u=q+8|0;v=0.0;w=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[a>>2]|0)+260>>2]&511](a,e,k[f>>2]|0,q);rd[k[(k[l>>2]|0)+56>>2]&511](l,d,q,690);nd[k[(k[m>>2]|0)+48>>2]&1023](m,c,q);rd[k[(k[m>>2]|0)+60>>2]&511](m,g,k[f>>2]|0,q);nd[k[(k[n>>2]|0)+48>>2]&1023](n,h,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,i,q);x=+p[h>>3];y=+p[i>>3];z=+aa(+(x*x+y*y))+1.0e-09;A=x/z;p[h>>3]=A;x=y/z;p[i>>3]=x;z=A*+p[g>>3]+x*+p[t>>3];x=v+ +p[u>>3]*(+p[e>>3]*(z*(+p[d>>3]*.5*z)));w=w+1|0;if((w|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){B=x;break}else v=x}}else B=0.0;w=k[f>>2]|0;if(w)Tqa(w);k[f>>2]=0;Ec[k[(k[q>>2]|0)+4>>2]&1023](q);j=B;r=b;return +j}function V_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+W_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function W_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;b=r;r=r+80|0;c=b+56|0;d=b+48|0;e=b+40|0;f=b+64|0;g=b+16|0;h=b+8|0;i=b;k[f>>2]=0;if(!($p(a)|0)){j=0.0;r=b;return +j}Uo(a,f);l=Wo(a,179)|0;m=Wo(a,353)|0;n=Wo(a,674)|0;o=Wo(a,677)|0;q=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=g+8|0;u=q+8|0;v=0.0;w=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[a>>2]|0)+260>>2]&511](a,e,k[f>>2]|0,q);rd[k[(k[l>>2]|0)+56>>2]&511](l,d,q,691);nd[k[(k[m>>2]|0)+48>>2]&1023](m,c,q);rd[k[(k[m>>2]|0)+60>>2]&511](m,g,k[f>>2]|0,q);nd[k[(k[n>>2]|0)+48>>2]&1023](n,h,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,i,q);x=+p[h>>3];y=+p[i>>3];z=+aa(+(x*x+y*y))+1.0e-09;A=x/z;p[h>>3]=A;x=y/z;p[i>>3]=x;z=A*+p[t>>3]-x*+p[g>>3];x=v+ +p[u>>3]*(+p[e>>3]*(z*(+p[d>>3]*.5*z)));w=w+1|0;if((w|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){B=x;break}else v=x}}else B=0.0;w=k[f>>2]|0;if(w)Tqa(w);k[f>>2]=0;Ec[k[(k[q>>2]|0)+4>>2]&1023](q);j=B;r=b;return +j}function X_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+Y_(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function Y_(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=r;r=r+240|0;c=b+216|0;d=b+212|0;e=b+24|0;f=b+8|0;g=b;h=b+208|0;i=b+72|0;j=b+56|0;l=b+44|0;m=b+32|0;k[h>>2]=0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){n=0.0;r=b;return +n}if(!($p(a)|0)){n=0.0;r=b;return +n}cp(a,d,298);if(((k[d>>2]|0)+-300|0)>>>0<3){o=Hc[k[(k[a>>2]|0)+432>>2]&511](a)|0;Uo(o,h);a=Wo(o,179)|0;q=Wo(o,215)|0;s=ed[k[(k[o>>2]|0)+308>>2]&511](o,2)|0;t=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((t|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){u=f+8|0;v=s+8|0;w=0.0;x=t;while(1){Fc[k[(k[s>>2]|0)+24>>2]&1023](s,x);rd[k[(k[o>>2]|0)+260>>2]&511](o,e,k[h>>2]|0,s);rd[k[(k[a>>2]|0)+56>>2]&511](a,g,s,694);rd[k[(k[q>>2]|0)+60>>2]&511](q,f,k[h>>2]|0,s);y=+p[f>>3];z=+p[u>>3];A=w+ +p[v>>3]*(+p[e>>3]*(+p[g>>3]*.5*(y*y+z*z)));x=x+1|0;if((x|0)>=(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){C=A;break}else w=A}}else C=0.0;if((k[d>>2]|0)!=300?(ap(o),(o|0)!=0):0)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);o=k[h>>2]|0;if(o)Tqa(o);k[h>>2]=0;if(!s){n=C;r=b;return +n}Ec[k[(k[s>>2]|0)+4>>2]&1023](s);n=C;r=b;return +n}b=i+56|0;s=i+4|0;k[i>>2]=27524;k[b>>2]=27544;B=0;wa(508,i+56|0,s|0);h=B;B=0;if(h&1){h=Rb()|0;D=Q;E=h;vva(b);Qb(E|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[b>>2]=27488;B=0;va(448,s|0);h=B;B=0;do if(h&1){o=Rb()|0;F=Q;G=o}else{k[s>>2]=27560;o=i+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;x=Q;Yua(c);Yua(o);Ava(s);F=x;G=d;break}Yua(c);B=0;d=Ia(40,i|0,134695,17)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,j|0,114355,108);x=B;B=0;do if(!(x&1)){B=0;eb(502,l|0,114464,23);g=B;B=0;if(g&1){g=Rb()|0;e=Q;Yua(j);H=e;I=g;break}B=0;wa(510,m|0,s|0);g=B;B=0;if(g&1){g=Rb()|0;J=Q;K=g;L=1}else{B=0;ua(163,d|0,j|0,l|0,51,m|0);g=B;B=0;if(g&1)M=1;else{B=0;eb(503,d|0,1240,229);B=0;M=0}g=Rb()|0;e=Q;Yua(m);J=e;K=g;L=M}Yua(l);Yua(j);if(L){H=J;I=K}else{N=J;O=K;k[i>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(b);Qb(O|0)}}else{g=Rb()|0;H=Q;I=g}while(0);zb(d|0);N=H;O=I;k[i>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(b);Qb(O|0)}x=Rb()|0;N=Q;O=x;k[i>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(o);Ava(s);vva(b);Qb(O|0)}while(0);D=F;E=G;vva(b);Qb(E|0);return +(0.0)}function Z_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0.0;g=r;r=r+16|0;f=g+8|0;e=g;p[f>>3]=0.0;if((th(b)|0)>0){h=0.0;d=0;do{h=+__(qh(b,d)|0)+h;p[f>>3]=h;d=d+1|0}while((d|0)<(th(b)|0))}nZ(f,e,1,2,4,0,uY()|0)|0;uY()|0;p[a>>3]=+p[e>>3];r=g;return}function __(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;b=r;r=r+240|0;c=b+224|0;d=b+220|0;e=b+32|0;f=b+8|0;g=b;h=b+216|0;i=b+80|0;j=b+64|0;l=b+52|0;m=b+40|0;k[h>>2]=0;if(!($p(a)|0)){n=0.0;r=b;return +n}cp(a,d,298);if(((k[d>>2]|0)+-300|0)>>>0<3){Uo(a,h);d=Wo(a,179)|0;o=Wo(a,214)|0;q=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=f+8|0;u=q+8|0;v=0.0;w=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[a>>2]|0)+260>>2]&511](a,e,k[h>>2]|0,q);rd[k[(k[d>>2]|0)+56>>2]&511](d,g,q,695);rd[k[(k[o>>2]|0)+60>>2]&511](o,f,k[h>>2]|0,q);x=+p[f>>3];y=+p[t>>3];z=v+ +p[u>>3]*(+p[e>>3]*(+p[g>>3]*.5*(x*x+y*y)));w=w+1|0;if((w|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){A=z;break}else v=z}}else A=0.0;w=k[h>>2]|0;if(w)Tqa(w);k[h>>2]=0;Ec[k[(k[q>>2]|0)+4>>2]&1023](q);n=A;r=b;return +n}b=i+56|0;q=i+4|0;k[i>>2]=27524;k[b>>2]=27544;B=0;wa(508,i+56|0,q|0);h=B;B=0;if(h&1){h=Rb()|0;C=Q;D=h;vva(b);Qb(D|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[b>>2]=27488;B=0;va(448,q|0);h=B;B=0;do if(h&1){w=Rb()|0;E=Q;F=w}else{k[q>>2]=27560;w=i+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);g=B;B=0;if(g&1){g=Rb()|0;e=Q;Yua(c);Yua(w);Ava(q);E=e;F=g;break}Yua(c);B=0;g=Ia(40,i|0,134695,17)|0;e=B;B=0;if(!(e&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,j|0,114488,102);e=B;B=0;do if(!(e&1)){B=0;eb(502,l|0,114591,20);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(j);G=t;H=u;break}B=0;wa(510,m|0,q|0);u=B;B=0;if(u&1){u=Rb()|0;I=Q;J=u;K=1}else{B=0;ua(163,g|0,j|0,l|0,48,m|0);u=B;B=0;if(u&1)L=1;else{B=0;eb(503,g|0,1240,229);B=0;L=0}u=Rb()|0;t=Q;Yua(m);I=t;J=u;K=L}Yua(l);Yua(j);if(K){G=I;H=J}else{M=I;N=J;k[i>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(w);Ava(q);vva(b);Qb(N|0)}}else{u=Rb()|0;G=Q;H=u}while(0);zb(g|0);M=G;N=H;k[i>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(w);Ava(q);vva(b);Qb(N|0)}e=Rb()|0;M=Q;N=e;k[i>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(w);Ava(q);vva(b);Qb(N|0)}while(0);C=E;D=F;vva(b);Qb(D|0);return +(0.0)}function $_(a){a=a|0;var b=0;k[a>>2]=36788;b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function a$(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;h=r;r=r+192|0;i=h+176|0;j=h+40|0;l=h+24|0;m=h+12|0;n=h;k[a>>2]=36788;k[a+8>>2]=g;g=a+4|0;k[g>>2]=b;switch(c|0){case 622:{B=0;o=ya(423,16)|0;p=B;B=0;if(!(p&1)){B=0;ib(284,o|0,b|0,d|0,738);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(o);s=q;t=p;Qb(t|0)}k[a+12>>2]=o;B=0;o=ya(423,16)|0;p=B;B=0;if(!(p&1)){B=0;ib(284,o|0,k[g>>2]|0,d|0,738);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(o);s=q;t=p;Qb(t|0)}k[a+16>>2]=o;B=0;o=ya(423,16)|0;p=B;B=0;if(!(p&1)){B=0;ib(284,o|0,k[g>>2]|0,e|0,738);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(o);s=q;t=p;Qb(t|0)}k[a+20>>2]=o;B=0;o=ya(423,16)|0;p=B;B=0;if(!(p&1)){B=0;ib(284,o|0,k[g>>2]|0,f|0,738);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(o);s=q;t=p;Qb(t|0)}else{k[a+24>>2]=o;u=a+28|0;k[u>>2]=0;r=h;return}}else v=11}else v=11}else v=11}else v=11;break}case 626:{B=0;o=ya(423,16)|0;p=B;B=0;if(!(p&1)){B=0;ib(285,o|0,b|0,d|0,738);b=B;B=0;if(b&1){b=Rb()|0;p=Q;Sqa(o);s=p;t=b;Qb(t|0)}k[a+12>>2]=o;B=0;o=ya(423,16)|0;b=B;B=0;if(!(b&1)){B=0;ib(285,o|0,k[g>>2]|0,d|0,738);d=B;B=0;if(d&1){d=Rb()|0;b=Q;Sqa(o);s=b;t=d;Qb(t|0)}k[a+16>>2]=o;B=0;o=ya(423,16)|0;d=B;B=0;if(!(d&1)){B=0;ib(285,o|0,k[g>>2]|0,e|0,738);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Sqa(o);s=d;t=e;Qb(t|0)}k[a+20>>2]=o;B=0;o=ya(423,16)|0;e=B;B=0;if(!(e&1)){B=0;ib(285,o|0,k[g>>2]|0,f|0,738);f=B;B=0;if(f&1){f=Rb()|0;g=Q;Sqa(o);s=g;t=f;Qb(t|0)}else{k[a+24>>2]=o;u=a+28|0;k[u>>2]=0;r=h;return}}else v=11}else v=11}else v=11}else v=11;break}default:{h=j+56|0;u=j+4|0;k[j>>2]=27524;k[h>>2]=27544;B=0;wa(508,j+56|0,u|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a}else{k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[h>>2]=27488;B=0;va(448,u|0);a=B;B=0;do if(a&1){o=Rb()|0;y=Q;z=o}else{k[u>>2]=27560;o=j+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[j+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,u|0,i|0);f=B;B=0;if(f&1){f=Rb()|0;g=Q;Yua(i);Yua(o);Ava(u);y=g;z=f;break}Yua(i);B=0;f=Ia(40,j|0,114627,14)|0;g=B;B=0;a:do if((((!(g&1)?(B=0,e=ya(427,c|0)|0,d=B,B=0,!(d&1)):0)?(d=Lta(e)|0,B=0,b=Ia(40,f|0,e|0,d|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,b|0,114642,34)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,l|0,114677,78);b=B;B=0;do if(!(b&1)){B=0;eb(502,m|0,114756,12);e=B;B=0;if(e&1){e=Rb()|0;p=Q;Yua(l);A=p;C=e;break}B=0;wa(510,n|0,u|0);e=B;B=0;if(e&1){e=Rb()|0;D=Q;E=e;F=1}else{B=0;ua(163,d|0,l|0,m|0,43,n|0);e=B;B=0;if(e&1)G=1;else{B=0;eb(503,d|0,1240,229);B=0;G=0}e=Rb()|0;p=Q;Yua(n);D=p;E=e;F=G}Yua(m);Yua(l);if(F){A=D;C=E}else{H=D;I=E;break a}}else{e=Rb()|0;A=Q;C=e}while(0);zb(d|0);H=A;I=C}else v=48;while(0);if((v|0)==48){f=Rb()|0;H=Q;I=f}k[j>>2]=27468;k[h>>2]=27488;k[u>>2]=27560;Yua(o);Ava(u);vva(h);s=H;t=I;Qb(t|0)}while(0);w=y;x=z}vva(h);J=w;K=x}}if((v|0)==11){v=Rb()|0;J=Q;K=v}s=J;t=K;Qb(t|0)}
+-function oz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 736:{k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;r=a;return}case 739:case 738:{p[b>>3]=-1.0;p[b+32>>3]=-1.0;p[b+64>>3]=-1.0;p[b+8>>3]=1.0;p[b+40>>3]=0.0;p[b+72>>3]=0.0;p[b+16>>3]=0.0;p[b+48>>3]=1.0;p[b+80>>3]=0.0;p[b+24>>3]=0.0;p[b+56>>3]=0.0;p[b+88>>3]=1.0;r=a;return}case 741:case 740:{p[b>>3]=-1.0;p[b+40>>3]=-1.0;p[b+80>>3]=-1.0;p[b+8>>3]=1.0;p[b+48>>3]=0.0;p[b+88>>3]=0.0;p[b+16>>3]=0.0;p[b+56>>3]=1.0;p[b+96>>3]=0.0;p[b+24>>3]=0.0;p[b+64>>3]=0.0;p[b+104>>3]=1.0;j=c+48|0;l=c+56|0;m=+p[l>>3];n=c+64|0;o=+p[n>>3];q=c+40|0;p[b+32>>3]=(o*(m*+p[q>>3])-+p[j>>3]*m*o)*256.0;o=+p[j>>3];m=+p[n>>3];p[b+72>>3]=(m*(o*+p[q>>3])-o*+p[l>>3]*m)*256.0;m=+p[j>>3];o=+p[l>>3];p[b+112>>3]=(o*(m*+p[q>>3])-m*o*+p[n>>3])*256.0;r=a;return}case 742:{n=c+40|0;p[b>>3]=1.0-+p[n>>3]*4.0;p[b+80>>3]=1.0-+p[n>>3]*4.0;p[b+160>>3]=1.0-+p[n>>3]*4.0;q=c+48|0;p[b+8>>3]=+p[q>>3]*4.0+-1.0;p[b+88>>3]=0.0;p[b+168>>3]=0.0;p[b+16>>3]=0.0;l=c+56|0;p[b+96>>3]=+p[l>>3]*4.0+-1.0;p[b+176>>3]=0.0;p[b+24>>3]=0.0;p[b+104>>3]=0.0;j=c+64|0;p[b+184>>3]=+p[j>>3]*4.0+-1.0;p[b+32>>3]=+p[l>>3]*4.0;p[b+112>>3]=+p[q>>3]*4.0;p[b+192>>3]=0.0;p[b+40>>3]=+p[l>>3]*-4.0;p[b+120>>3]=(+p[n>>3]-+p[l>>3])*4.0;p[b+200>>3]=+p[l>>3]*-4.0;p[b+48>>3]=(+p[n>>3]-+p[q>>3])*4.0;p[b+128>>3]=+p[q>>3]*-4.0;p[b+208>>3]=+p[q>>3]*-4.0;p[b+56>>3]=+p[j>>3]*4.0;p[b+136>>3]=0.0;p[b+216>>3]=+p[q>>3]*4.0;p[b+64>>3]=0.0;p[b+144>>3]=+p[j>>3]*4.0;p[b+224>>3]=+p[l>>3]*4.0;p[b+72>>3]=+p[j>>3]*-4.0;p[b+152>>3]=+p[j>>3]*-4.0;p[b+232>>3]=(+p[n>>3]-+p[j>>3])*4.0;r=a;return}default:{a=f+56|0;j=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,j|0);n=B;B=0;if(n&1){n=Rb()|0;s=Q;t=n;vva(a);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,j|0);n=B;B=0;do if(n&1){b=Rb()|0;u=Q;v=b}else{k[j>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);l=B;B=0;if(l&1){l=Rb()|0;q=Q;Yua(e);Yua(b);Ava(j);u=q;v=l;break}Yua(e);B=0;l=Ia(40,f|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,c=B,B=0,!(c&1)):0)?(c=Lta(q)|0,B=0,w=Ia(40,l|0,q|0,c|0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Ia(40,w|0,146481,18)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,g|0,73996,76);w=B;B=0;do if(!(w&1)){B=0;eb(502,h|0,75528,37);q=B;B=0;if(q&1){q=Rb()|0;l=Q;Yua(g);x=l;y=q;break}B=0;wa(510,i|0,j|0);q=B;B=0;if(q&1){q=Rb()|0;z=Q;A=q;C=1}else{B=0;ua(163,c|0,g|0,h|0,340,i|0);q=B;B=0;if(q&1)D=1;else{B=0;eb(503,c|0,1240,229);B=0;D=0}q=Rb()|0;l=Q;Yua(i);z=l;A=q;C=D}Yua(h);Yua(g);if(C){x=z;y=A}else{E=z;F=A;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(F|0)}}else{q=Rb()|0;x=Q;y=q}while(0);zb(c|0);E=x;F=y;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(F|0)}w=Rb()|0;E=Q;F=w;k[f>>2]=27468;k[a>>2]=27488;k[j>>2]=27560;Yua(b);Ava(j);vva(a);Qb(F|0)}while(0);s=u;t=v;vva(a);Qb(t|0)}}}function pz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 754:{h=921;r=a;return h|0}case 755:case 753:case 751:case 752:case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,73996,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75650,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,377,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function qz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;if((b|0)==755){r=a;return 739}a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,73996,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75211,19);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,387,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0);return 0}function rz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 752:{h=740;r=a;return h|0}case 751:{h=740;r=a;return h|0}case 753:{h=742;r=a;return h|0}case 754:{h=742;r=a;return h|0}case 755:{h=742;r=a;return h|0}case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,73996,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75691,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,401,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function sz(a){a=a|0;k[a>>2]=31308;k[a+4>>2]=31872;k[a+36>>2]=0;Tq(a+48|0);Qo(a);return}function tz(a){a=a|0;k[a>>2]=31308;k[a+4>>2]=31872;k[a+36>>2]=0;Tq(a+48|0);Qo(a);Sqa(a);return}function uz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,u=0,v=0,w=0,x=0,y=0,z=0;g=r;r=r+16|0;h=g;Po(a);i=a+48|0;B=0;ua(167,i|0,f|0,d+1|0,6,e|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;Qo(a);Qb(m|0)}B=0;j=B;B=0;if(j&1){j=Rb()|0;n=Q;o=j}else{k[a>>2]=31308;k[a+4>>2]=31872;j=a+8|0;k[j>>2]=b;k[a+12>>2]=c;B=0;c=Xa(246,e|0,107922)|0;b=B;B=0;do if(!(b&1)){q=+$(+(+p[c+(d<<3)>>3]));p[t>>3]=q;s=k[t+4>>2]|0;if(!(s>>>0>2146435072|(s|0)==2146435072&(k[t>>2]|0)>>>0>0)){B=0;s=Xa(246,e|0,107922)|0;u=B;B=0;if(u&1){v=10;break}if(!(+p[s+(d<<3)>>3]==-1.0)){B=0;s=Xa(246,e|0,107922)|0;u=B;B=0;if(u&1){v=10;break}k[h+4>>2]=~~+p[s+(d<<3)>>3]}else v=7}else v=7;if((v|0)==7)k[h+4>>2]=k[j>>2];B=0;s=Xa(246,e|0,107944)|0;u=B;B=0;if(!(u&1)){q=+$(+(+p[s+(d<<3)>>3]));p[t>>3]=q;s=k[t+4>>2]|0;if(!(s>>>0>2146435072|(s|0)==2146435072&(k[t>>2]|0)>>>0>0)){B=0;s=Xa(246,e|0,107944)|0;u=B;B=0;if(u&1){v=10;break}if(!(+p[s+(d<<3)>>3]==-1.0)){B=0;s=Xa(246,e|0,107944)|0;u=B;B=0;if(u&1){v=10;break}k[h>>2]=~~+p[s+(d<<3)>>3];w=h}else v=17}else v=17;if((v|0)==17){k[h>>2]=k[j>>2];w=h}B=0;wa(519,i|0,w|0);s=B;B=0;if(!(s&1)?(k[a+36>>2]=0,B=0,s=ya(423,36)|0,u=B,B=0,!(u&1)):0){B=0;va(486,s|0);u=B;B=0;if(u&1){u=Rb()|0;x=Q;Sqa(s);y=x;z=u;break}k[a+16>>2]=s;s=a+20|0;k[a+72>>2]=0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;B=0;s=ya(422,(f>>>0>1073741823?-1:f<<2)|0)|0;u=B;B=0;if(!(u&1)){k[a+40>>2]=s;r=g;return}else v=10}else v=10}else v=10}else v=10;while(0);if((v|0)==10){v=Rb()|0;y=Q;z=v}n=y;o=z}Tq(i);l=n;m=o;Qo(a);Qb(m|0)}function vz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=Qqa(76)|0;B=0;va(461,b|0);c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c}else{c=b+48|0;B=0;va(462,c|0);f=B;B=0;do if(!(f&1)){B=0;g=B;B=0;if(g&1){g=Rb()|0;h=Q;Tq(c);i=h;j=g;break}k[b>>2]=31308;k[b+4>>2]=31872;g=k[a+48>>2]|0;h=(g|0)>0;if(h){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;k[b+40>>2]=l;m=k[a+40>>2]|0;n=0;do{k[l+(n<<2)>>2]=k[m+(n<<2)>>2];n=n+1|0}while((n|0)!=(g|0))}else k[b+40>>2]=0;k[b+44>>2]=k[a+44>>2];k[c>>2]=g;n=a+52|0;m=k[n>>2]|0;a:do if(m){l=Rqa(g>>>0>1073741823?-1:g<<2)|0;o=b+52|0;k[o>>2]=l;if(h){l=g;p=m;q=0;while(1){r=k[p+(q<<2)>>2]|0;if(!r){k[(k[o>>2]|0)+(q<<2)>>2]=0;s=l}else{t=Bla(r)|0;k[(k[o>>2]|0)+(q<<2)>>2]=t;s=k[c>>2]|0}t=q+1|0;if((t|0)>=(s|0))break a;l=s;p=k[n>>2]|0;q=t}}}else k[b+52>>2]=0;while(0);n=a+56|0;m=Bla(k[n>>2]|0)|0;k[b+56>>2]=m;m=a+60|0;g=Bla(k[m>>2]|0)|0;k[b+60>>2]=g;g=a+64|0;h=Bla(k[g>>2]|0)|0;k[b+64>>2]=h;h=a+68|0;q=k[h>>2]|0;if(!q)k[b+68>>2]=0;else{p=Bla(q)|0;k[b+68>>2]=p}k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];p=k[a+16>>2]|0;do if(!p){q=Qqa(36)|0;B=0;va(486,q|0);l=B;B=0;if(!(l&1)){k[b+16>>2]=q;break}l=Rb()|0;o=Q;Sqa(q);u=o;v=l;Qb(v|0)}else{l=hh(p)|0;k[b+16>>2]=l}while(0);k[b+36>>2]=k[a+36>>2];p=k[a+20>>2]|0;if(!p){k[b+20>>2]=0;w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;G=k[h>>2]|0;H=Gla(G)|0;I=b+72|0;k[I>>2]=H;return b|0}else{l=Rqa(24)|0;k[b+20>>2]=l;k[l>>2]=k[p>>2];k[l+4>>2]=k[p+4>>2];k[l+8>>2]=k[p+8>>2];k[l+12>>2]=k[p+12>>2];k[l+16>>2]=k[p+16>>2];k[l+20>>2]=k[p+20>>2];w=k[n>>2]|0;x=Gla(w)|0;y=b+24|0;k[y>>2]=x;z=k[m>>2]|0;A=Fla(z)|0;C=b+28|0;k[C>>2]=A;D=k[g>>2]|0;E=Fla(D)|0;F=b+32|0;k[F>>2]=E;G=k[h>>2]|0;H=Gla(G)|0;I=b+72|0;k[I>>2]=H;return b|0}}else{p=Rb()|0;i=Q;j=p}while(0);Qo(b);d=i;e=j}Sqa(b);u=d;v=e;Qb(v|0);return 0}function wz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 0:{m=k[b>>2]|0;i[m>>0]=113;i[m+1>>0]=2;i[m+2>>0]=0;i[m+3>>0]=0;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+4;break}case 1:{k[b>>2]=(k[b>>2]|0)+4;break}default:{m=g+56|0;n=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=g+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);Yua(s);Ava(n);t=w;u=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,h|0,74107,73);w=B;B=0;do if(!(w&1)){B=0;eb(502,j|0,149525,8);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}B=0;wa(510,l|0,n|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,h|0,j|0,127,l|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(l);C=y;D=x;E=F}Yua(j);Yua(h);if(E){z=C;A=D}else{G=C;H=D;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}}else{x=Rb()|0;z=Q;A=x}while(0);zb(v|0);G=z;H=A;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}w=Rb()|0;G=Q;H=w;k[g>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);Qb(H|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}}q=a+48|0;Vq(q,b,c,d);dq(a,b,c,d,k[q>>2]|0);q=Gla(k[a+56>>2]|0)|0;k[a+24>>2]=q;q=Fla(k[a+60>>2]|0)|0;k[a+28>>2]=q;q=Fla(k[a+64>>2]|0)|0;k[a+32>>2]=q;q=Gla(k[a+68>>2]|0)|0;k[a+72>>2]=q;r=e;return}function xz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+224|0;f=e;g=e+72|0;h=e+208|0;i=e+60|0;j=e+48|0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=e;return}if((d|0)==738){l=+p[c>>3];p[f>>3]=l;p[f+24>>3]=l;l=+p[c+8>>3];p[f+8>>3]=l;p[f+32>>3]=l;l=+p[c+16>>3];p[f+16>>3]=l;p[f+40>>3]=l;c=a;while(1){a=k[c+16>>2]|0;d=Qqa(16)|0;B=0;ib(285,d|0,b|0,f|0,738);m=B;B=0;if(m&1){n=d;o=6;break}mC(a,d)|0;if(Hc[k[(k[c>>2]|0)+252>>2]&511](c)|0){o=8;break}c=k[(k[c+72>>2]|0)+4>>2]|0}if((o|0)==6){c=Rb()|0;b=Q;Sqa(n);q=b;s=c;Qb(s|0)}else if((o|0)==8){r=e;return}}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;t=Q;u=b;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){n=Rb()|0;v=Q;w=n}else{k[c>>2]=27560;n=g+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;a=Q;Yua(f);Yua(n);Ava(c);v=a;w=d;break}Yua(f);B=0;d=Ia(40,g|0,149721,19)|0;a=B;B=0;a:do if(!(a&1)?(B=0,Xa(239,d|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,h|0,74107,73);x=B;B=0;do if(!(x&1)){B=0;eb(502,i|0,74181,13);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(h);A=z;C=y;break}B=0;wa(510,j|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,m|0,h|0,i|0,164,j|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,m|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(j);D=z;E=y;F=G}Yua(i);Yua(h);if(F){A=D;C=E}else{H=D;I=E;break a}}else{y=Rb()|0;A=Q;C=y}while(0);zb(m|0);H=A;I=C}else o=24;while(0);if((o|0)==24){d=Rb()|0;H=Q;I=d}k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(n);Ava(c);vva(e);q=H;s=I;Qb(s|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function yz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(285,a|0,b|0,c|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(a);Qb(d|0)}else{mC(e,a)|0;return}}function zz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,74195,18)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,74107,73);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,74214,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,175,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function Az(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0;b=r;r=r+336|0;c=b+176|0;d=b+168|0;e=b+160|0;f=b+152|0;g=b+144|0;h=b+96|0;i=b+48|0;j=b;Ko(b+184|0,k[a+24>>2]|0,6,0);l=a+16|0;a=oC(k[l>>2]|0,674)|0;m=oC(k[l>>2]|0,677)|0;n=oC(k[l>>2]|0,262)|0;o=oC(k[l>>2]|0,263)|0;q=oC(k[l>>2]|0,255)|0;s=Qqa(72)|0;B=0;va(493,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Sqa(s);v=u;w=t;Qb(w|0)}t=0;do{Fc[k[(k[s>>2]|0)+28>>2]&1023](s,t);nd[k[(k[a>>2]|0)+48>>2]&1023](a,c,s);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,s);x=+p[c>>3];y=+p[d>>3];nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,s);nd[k[(k[o>>2]|0)+48>>2]&1023](o,g,s);nd[k[(k[q>>2]|0)+48>>2]&1023](q,f,s);z=+p[f>>3]*+p[e>>3]*+p[g>>3];A=z<0.0?0.0:z;p[j+(t<<3)>>3]=A;z=+aa(+(x*x+y*y))+1.0e-14;p[h+(t<<3)>>3]=+p[c>>3]*A/z;p[i+(t<<3)>>3]=A*+p[d>>3]/z;t=t+1|0}while((t|0)!=6);t=k[l>>2]|0;d=Qqa(16)|0;B=0;ib(285,d|0,258,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;c=Q;Sqa(d);v=c;w=h;Qb(w|0)}mC(t,d)|0;d=k[l>>2]|0;t=Qqa(16)|0;B=0;ib(285,t|0,259,i|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(t);v=h;w=i;Qb(w|0)}mC(d,t)|0;t=k[l>>2]|0;l=Qqa(16)|0;B=0;ib(285,l|0,248,j|0,738);j=B;B=0;if(!(j&1)){mC(t,l)|0;Ec[k[(k[s>>2]|0)+4>>2]&1023](s);r=b;return}b=Rb()|0;s=Q;Sqa(l);v=s;w=b;Qb(w|0)}function Bz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;c=r;r=r+688|0;d=c+672|0;e=c+668|0;f=c+664|0;g=c+176|0;h=c+104|0;i=c+96|0;j=c+88|0;l=c+80|0;m=c+72|0;n=c+48|0;o=c;q=c+528|0;s=c+516|0;t=c+504|0;u=c+356|0;v=c+368|0;w=c+344|0;x=c+332|0;y=c+320|0;z=a+36|0;cO(k[z>>2]|0,e,477);A=a+16|0;kC(k[A>>2]|0,f,533);if((k[e>>2]|0)!=497){e=q+56|0;C=q+4|0;k[q>>2]=27524;k[e>>2]=27544;B=0;wa(508,q+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(e);Qb(F|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[e>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[C>>2]=27560;G=q+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[q+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(d);Yua(G);Ava(C);H=K;I=J;break}Yua(d);B=0;J=Ia(40,q|0,74195,18)|0;K=B;B=0;a:do if(!(K&1)?(B=0,Xa(239,J|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,s|0,74107,73);M=B;B=0;do if(!(M&1)){B=0;eb(502,t|0,74235,18);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(s);P=N;R=O;break}B=0;wa(510,u|0,C|0);O=B;B=0;if(O&1){O=Rb()|0;S=Q;T=O;U=1}else{B=0;ua(163,L|0,s|0,t|0,257,u|0);O=B;B=0;if(O&1)V=1;else{B=0;eb(503,L|0,1240,229);B=0;V=0}O=Rb()|0;N=Q;Yua(u);S=N;T=O;U=V}Yua(t);Yua(s);if(U){P=T;R=S}else{W=T;X=S;break a}}else{O=Rb()|0;P=O;R=Q}while(0);zb(L|0);W=P;X=R}else Y=17;while(0);if((Y|0)==17){J=Rb()|0;W=J;X=Q}k[q>>2]=27468;k[e>>2]=27488;k[C>>2]=27560;Yua(G);Ava(C);vva(e);Z=X;_=W;Qb(_|0)}while(0);E=H;F=I;vva(e);Qb(F|0)}if((k[f>>2]|0)==542){dO(k[z>>2]|0,i,85);if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){if(!(k[b>>2]|0)){r=c;return}z=k[k[b+4>>2]>>2]|0;Jc[k[(k[z>>2]|0)+20>>2]&1](z,(k[a+8>>2]|0)+-1|0,0.0,0);r=c;return}z=a+32|0;+WJ(k[z>>2]|0,265);+WJ(k[z>>2]|0,65);Ko(g,k[a+24>>2]|0,6,0);k[h>>2]=k[g>>2];k[h+4>>2]=k[g+4>>2];k[h+8>>2]=k[g+8>>2];k[h+12>>2]=k[g+12>>2];k[h+16>>2]=k[g+16>>2];k[h+20>>2]=k[g+20>>2];z=h+24|0;f=g+24|0;k[z>>2]=k[f>>2];k[z+4>>2]=k[f+4>>2];k[z+8>>2]=k[f+8>>2];k[z+12>>2]=k[f+12>>2];k[z+16>>2]=k[f+16>>2];k[z+20>>2]=k[f+20>>2];f=h+48|0;z=g+48|0;k[f>>2]=k[z>>2];k[f+4>>2]=k[z+4>>2];k[f+8>>2]=k[z+8>>2];k[f+12>>2]=k[z+12>>2];k[f+16>>2]=k[z+16>>2];k[f+20>>2]=k[z+20>>2];z=oC(k[A>>2]|0,653)|0;f=oC(k[A>>2]|0,674)|0;F=oC(k[A>>2]|0,677)|0;e=oC(k[A>>2]|0,679)|0;A=Qqa(72)|0;B=0;ua(169,A|0,0,1,2,2);I=B;B=0;if(I&1){I=Rb()|0;H=Q;Sqa(A);Z=H;_=I;Qb(_|0)}I=Hc[k[(k[A>>2]|0)+8>>2]&511](A)|0;if((I|0)<(Hc[k[(k[A>>2]|0)+12>>2]&511](A)|0)){H=a+28|0;E=o+16|0;W=A+8|0;X=I;$=0.0;aa=0.0;while(1){Fc[k[(k[A>>2]|0)+24>>2]&1023](A,X);Yo(a,o,g,A,f,F,e);I=k[H>>2]|0;Tc[k[(k[I>>2]|0)+108>>2]&15](I,l,3,g,A,f,F,e);nd[k[(k[z>>2]|0)+48>>2]&1023](z,j,A);ba=+p[l>>3]*2.0*+p[E>>3]-+p[j>>3]*+p[i>>3];nd[k[(k[a>>2]|0)+380>>2]&1023](a,n,h);eC(a,m,h,A);ca=+p[m>>3];da=+p[W>>3];ea=aa+ba*ca*da;ba=$+ca*da;X=X+1|0;if((X|0)>=(Hc[k[(k[A>>2]|0)+12>>2]&511](A)|0)){fa=ba;ga=ea;break}else{$=ba;aa=ea}}}else{fa=0.0;ga=0.0}if(!(k[b>>2]|0)){r=c;return}A=k[k[b+4>>2]>>2]|0;Jc[k[(k[A>>2]|0)+20>>2]&1](A,(k[a+8>>2]|0)+-1|0,ga/fa,0);r=c;return}c=v+56|0;a=v+4|0;k[v>>2]=27524;k[c>>2]=27544;B=0;wa(508,v+56|0,a|0);A=B;B=0;if(A&1){A=Rb()|0;ha=Q;ia=A;vva(c);Qb(ia|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);A=B;B=0;do if(A&1){b=Rb()|0;ja=Q;ka=b}else{k[a>>2]=27560;b=v+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[v+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);X=B;B=0;if(X&1){X=Rb()|0;W=Q;Yua(d);Yua(b);Ava(a);ja=W;ka=X;break}Yua(d);B=0;X=Ia(40,v|0,74195,18)|0;W=B;B=0;b:do if(!(W&1)?(B=0,Xa(239,X|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,w|0,74107,73);h=B;B=0;do if(!(h&1)){B=0;eb(502,x|0,74235,18);n=B;B=0;if(n&1){n=Rb()|0;i=Q;Yua(w);la=n;ma=i;break}B=0;wa(510,y|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;na=1;oa=Q;pa=i}else{B=0;ua(163,m|0,w|0,x|0,258,y|0);i=B;B=0;if(i&1)qa=1;else{B=0;eb(503,m|0,1240,229);B=0;qa=0}i=Rb()|0;n=Q;Yua(y);na=qa;oa=n;pa=i}Yua(x);Yua(w);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break b}}else{i=Rb()|0;la=i;ma=Q}while(0);zb(m|0);ra=ma;sa=la}else Y=41;while(0);if((Y|0)==41){X=Rb()|0;ra=Q;sa=X}k[v>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(c);Z=ra;_=sa;Qb(_|0)}while(0);ha=ja;ia=ka;vva(c);Qb(ia|0)}function Cz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0;b=r;r=r+544|0;c=b+392|0;d=b+384|0;e=b+336|0;f=b+288|0;g=b+240|0;h=b+192|0;i=b+144|0;j=b+96|0;l=b+48|0;m=b;Ko(c,k[a+24>>2]|0,6,0);n=a+16|0;o=oC(k[n>>2]|0,674)|0;q=oC(k[n>>2]|0,677)|0;s=oC(k[n>>2]|0,679)|0;t=Qqa(72)|0;B=0;va(493,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Sqa(t);w=v;x=u;Qb(x|0)}u=a+28|0;v=e+8|0;y=e+16|0;z=e+24|0;A=e+32|0;C=e+40|0;D=0;do{Fc[k[(k[t>>2]|0)+28>>2]&1023](t,D);Yo(a,e,c,t,o,q,s);E=k[u>>2]|0;Tc[k[(k[E>>2]|0)+108>>2]&15](E,d,3,c,t,o,q,s);F=+p[d>>3]*2.0;G=F*+p[e>>3];p[f+(D<<3)>>3]=G;H=F*+p[v>>3];p[g+(D<<3)>>3]=H;I=F*+p[y>>3];p[h+(D<<3)>>3]=I;J=F*+p[z>>3];p[i+(D<<3)>>3]=J;K=F*+p[A>>3];p[j+(D<<3)>>3]=K;L=F*+p[C>>3];p[l+(D<<3)>>3]=L;F=+aa(+((L*(L*2.0)+(G*G+H*H+I*I+J*(J*2.0)+K*(K*2.0)))*.5));p[m+(D<<3)>>3]=F;D=D+1|0}while((D|0)!=6);D=k[n>>2]|0;C=Qqa(16)|0;B=0;ib(285,C|0,716,f|0,738);f=B;B=0;if(f&1){f=Rb()|0;A=Q;Sqa(C);w=A;x=f;Qb(x|0)}mC(D,C)|0;C=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,717,i|0,738);i=B;B=0;if(i&1){i=Rb()|0;f=Q;Sqa(D);w=f;x=i;Qb(x|0)}mC(C,D)|0;D=k[n>>2]|0;C=Qqa(16)|0;B=0;ib(285,C|0,718,j|0,738);j=B;B=0;if(j&1){j=Rb()|0;i=Q;Sqa(C);w=i;x=j;Qb(x|0)}mC(D,C)|0;C=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,719,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;j=Q;Sqa(D);w=j;x=g;Qb(x|0)}mC(C,D)|0;D=k[n>>2]|0;C=Qqa(16)|0;B=0;ib(285,C|0,720,l|0,738);l=B;B=0;if(l&1){l=Rb()|0;g=Q;Sqa(C);w=g;x=l;Qb(x|0)}mC(D,C)|0;C=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,721,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;l=Q;Sqa(D);w=l;x=h;Qb(x|0)}mC(C,D)|0;D=k[n>>2]|0;n=Qqa(16)|0;B=0;ib(285,n|0,722,m|0,738);m=B;B=0;if(!(m&1)){mC(D,n)|0;Ec[k[(k[t>>2]|0)+4>>2]&1023](t);r=b;return}b=Rb()|0;t=Q;Sqa(n);w=t;x=b;Qb(x|0)}function Dz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0;b=r;r=r+496|0;c=b+352|0;d=b+344|0;e=b+336|0;f=b+288|0;g=b+240|0;h=b+192|0;i=b+144|0;j=b+96|0;l=b+48|0;m=b;Ko(c,k[a+24>>2]|0,6,0);n=a+16|0;o=oC(k[n>>2]|0,653)|0;q=oC(k[n>>2]|0,674)|0;s=oC(k[n>>2]|0,677)|0;t=oC(k[n>>2]|0,679)|0;u=Qqa(72)|0;B=0;va(493,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Sqa(u);x=w;y=v;Qb(y|0)}v=a+28|0;w=f+8|0;z=f+16|0;A=f+24|0;C=f+32|0;D=f+40|0;E=0;do{Fc[k[(k[u>>2]|0)+28>>2]&1023](u,E);Yo(a,f,c,u,q,s,t);F=k[v>>2]|0;Tc[k[(k[F>>2]|0)+108>>2]&15](F,e,3,c,u,q,s,t);nd[k[(k[o>>2]|0)+48>>2]&1023](o,d,u);G=+p[e>>3]*2.0;H=+p[d>>3];p[g+(E<<3)>>3]=G*+p[f>>3]-H;p[h+(E<<3)>>3]=G*+p[w>>3]-H;p[i+(E<<3)>>3]=G*+p[z>>3]-H;p[j+(E<<3)>>3]=G*+p[A>>3];p[l+(E<<3)>>3]=G*+p[C>>3];p[m+(E<<3)>>3]=G*+p[D>>3];E=E+1|0}while((E|0)!=6);E=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,708,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;C=Q;Sqa(D);x=C;y=g;Qb(y|0)}mC(E,D)|0;D=k[n>>2]|0;E=Qqa(16)|0;B=0;ib(285,E|0,709,j|0,738);j=B;B=0;if(j&1){j=Rb()|0;g=Q;Sqa(E);x=g;y=j;Qb(y|0)}mC(D,E)|0;E=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,710,l|0,738);l=B;B=0;if(l&1){l=Rb()|0;j=Q;Sqa(D);x=j;y=l;Qb(y|0)}mC(E,D)|0;D=k[n>>2]|0;E=Qqa(16)|0;B=0;ib(285,E|0,711,h|0,738);h=B;B=0;if(h&1){h=Rb()|0;l=Q;Sqa(E);x=l;y=h;Qb(y|0)}mC(D,E)|0;E=k[n>>2]|0;D=Qqa(16)|0;B=0;ib(285,D|0,712,m|0,738);m=B;B=0;if(m&1){m=Rb()|0;h=Q;Sqa(D);x=h;y=m;Qb(y|0)}mC(E,D)|0;D=k[n>>2]|0;n=Qqa(16)|0;B=0;ib(285,n|0,713,i|0,738);i=B;B=0;if(!(i&1)){mC(D,n)|0;Ec[k[(k[u>>2]|0)+4>>2]&1023](u);r=b;return}b=Rb()|0;u=Q;Sqa(n);x=u;y=b;Qb(y|0)}function Ez(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0;c=r;r=r+16|0;h=c;cO(g,h,482);i=k[h>>2]|0;k[a+44>>2]=k[(k[a+40>>2]|0)+(i<<2)>>2];j=a+52|0;l=k[(k[j>>2]|0)+(i<<2)>>2]|0;if(l)Ela(l,d);d=a+56|0;Ela(k[d>>2]|0,e);e=a+60|0;Ela(k[e>>2]|0,f);l=a+64|0;Ela(k[l>>2]|0,f);f=a+68|0;Ela(k[f>>2]|0,b);b=k[(k[j>>2]|0)+(k[h>>2]<<2)>>2]|0;if(!b)k[a+20>>2]=0;else{h=Gla(b)|0;k[a+20>>2]=h}h=Gla(k[d>>2]|0)|0;k[a+24>>2]=h;h=Fla(k[e>>2]|0)|0;k[a+28>>2]=h;h=Fla(k[l>>2]|0)|0;k[a+32>>2]=h;h=Gla(k[f>>2]|0)|0;k[a+72>>2]=h;k[a+36>>2]=g;wC(k[a+16>>2]|0,g);r=c;return}function Fz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+448|0;f=e+424|0;g=e+400|0;h=e;i=e+264|0;j=e+248|0;l=e+96|0;m=e+84|0;n=e+112|0;o=e+72|0;q=e+60|0;s=e+48|0;do if((c|0)!=215){t=k[a+16>>2]|0;if((c|0)==227){u=oC(t,225)|0;break}else{u=oC(t,c)|0;break}}else u=oC(k[a+16>>2]|0,214)|0;while(0);if(!u){t=i+56|0;v=i+4|0;k[i>>2]=27524;k[t>>2]=27544;B=0;wa(508,i+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(t);Qb(y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[t>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=i+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(v);A=E;C=D;break}Yua(f);B=0;D=Ia(40,i|0,109148,6)|0;E=B;B=0;a:do if((((!(E&1)?(B=0,F=ya(427,c|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,D|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,114879,10)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,j|0,74107,73);H=B;B=0;do if(!(H&1)){B=0;eb(502,l|0,74254,23);F=B;B=0;if(F&1){F=Rb()|0;I=Q;Yua(j);J=F;K=I;break}B=0;wa(510,m|0,v|0);I=B;B=0;if(I&1){I=Rb()|0;L=Q;M=I;N=1}else{B=0;ua(163,G|0,j|0,l|0,480,m|0);I=B;B=0;if(I&1)O=1;else{B=0;eb(503,G|0,1240,229);B=0;O=0}I=Rb()|0;F=Q;Yua(m);L=F;M=I;N=O}Yua(l);Yua(j);if(N){J=M;K=L}else{P=M;R=L;break a}}else{I=Rb()|0;J=I;K=Q}while(0);zb(G|0);P=J;R=K}else S=25;while(0);if((S|0)==25){D=Rb()|0;P=D;R=Q}k[i>>2]=27468;k[t>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(t);T=R;U=P;Qb(U|0)}while(0);x=A;y=C;vva(t);Qb(y|0)}if((Hc[k[(k[u>>2]|0)+20>>2]&511](u)|0)==559){Mp(a,g,d,0);p[h>>3]=+p[b+(k[g>>2]<<3)>>3];p[h+8>>3]=+p[b+(k[g+4>>2]<<3)>>3];p[h+16>>3]=+p[b+(k[g+8>>2]<<3)>>3];p[h+24>>3]=+p[b+(k[g+12>>2]<<3)>>3];p[h+32>>3]=+p[b+(k[g+16>>2]<<3)>>3];p[h+40>>3]=+p[b+(k[g+20>>2]<<3)>>3];g=Qqa(16)|0;B=0;ib(285,g|0,941,h|0,738);h=B;B=0;if(!(h&1)){q$(u,g);r=e;return}e=Rb()|0;u=Q;Sqa(g);T=u;U=e;Qb(U|0)}e=n+56|0;u=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,u|0);g=B;B=0;if(g&1){g=Rb()|0;V=Q;W=g;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,u|0);g=B;B=0;do if(g&1){h=Rb()|0;X=Q;Y=h}else{k[u>>2]=27560;h=n+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,u|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;d=Q;Yua(f);Yua(h);Ava(u);X=d;Y=b;break}Yua(f);B=0;b=Ia(40,n|0,109148,6)|0;d=B;B=0;b:do if((((!(d&1)?(B=0,a=ya(427,c|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(a)|0,B=0,t=Ia(40,b|0,a|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,t|0,74278,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,o|0,74107,73);t=B;B=0;do if(!(t&1)){B=0;eb(502,q|0,74254,23);a=B;B=0;if(a&1){a=Rb()|0;C=Q;Yua(o);Z=a;_=C;break}B=0;wa(510,s|0,u|0);C=B;B=0;if(C&1){C=Rb()|0;$=1;aa=Q;ba=C}else{B=0;ua(163,y|0,o|0,q|0,481,s|0);C=B;B=0;if(C&1)ca=1;else{B=0;eb(503,y|0,1240,229);B=0;ca=0}C=Rb()|0;a=Q;Yua(s);$=ca;aa=a;ba=C}Yua(q);Yua(o);if($){Z=ba;_=aa}else{da=aa;ea=ba;break b}}else{C=Rb()|0;Z=C;_=Q}while(0);zb(y|0);da=_;ea=Z}else S=52;while(0);if((S|0)==52){b=Rb()|0;da=Q;ea=b}k[n>>2]=27468;k[e>>2]=27488;k[u>>2]=27560;Yua(h);Ava(u);vva(e);T=da;U=ea;Qb(U|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}function Gz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;e=r;r=r+512|0;f=e+488|0;g=e+352|0;h=e+340|0;i=e+328|0;j=e+176|0;l=e+192|0;m=e+136|0;n=e+124|0;o=e+112|0;q=e+152|0;s=e+64|0;t=e+16|0;u=e+8|0;v=e;do if((d|0)!=215){w=k[a+16>>2]|0;if((d|0)==227){x=oC(w,225)|0;break}else{x=oC(w,d)|0;break}}else x=oC(k[a+16>>2]|0,214)|0;while(0);if(!x){w=g+56|0;y=g+4|0;k[g>>2]=27524;k[w>>2]=27544;B=0;wa(508,g+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(w);Qb(C|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[w>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=g+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,y|0,f|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(f);Yua(D);Ava(y);E=H;F=G;break}Yua(f);B=0;G=Ia(40,g|0,109148,6)|0;H=B;B=0;a:do if((((!(H&1)?(B=0,I=ya(427,d|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,G|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,114879,10)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,h|0,74107,73);K=B;B=0;do if(!(K&1)){B=0;eb(502,i|0,74301,16);I=B;B=0;if(I&1){I=Rb()|0;L=Q;Yua(h);M=I;N=L;break}B=0;wa(510,j|0,y|0);L=B;B=0;if(L&1){L=Rb()|0;O=Q;P=L;R=1}else{B=0;ua(163,J|0,h|0,i|0,502,j|0);L=B;B=0;if(L&1)S=1;else{B=0;eb(503,J|0,1240,229);B=0;S=0}L=Rb()|0;I=Q;Yua(j);O=I;P=L;R=S}Yua(i);Yua(h);if(R){M=P;N=O}else{T=P;U=O;break a}}else{L=Rb()|0;M=L;N=Q}while(0);zb(J|0);T=M;U=N}else V=25;while(0);if((V|0)==25){G=Rb()|0;T=G;U=Q}k[g>>2]=27468;k[w>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(w);W=U;X=T;Qb(X|0)}while(0);A=E;C=F;vva(w);Qb(C|0)}if((Hc[k[(k[x>>2]|0)+20>>2]&511](x)|0)==559){Jp(a,q);Ip(a,f);a=Qqa(72)|0;B=0;va(493,a|0);C=B;B=0;if(C&1){C=Rb()|0;w=Q;Sqa(a);W=w;X=C;Qb(X|0)}C=0;do{Fc[k[(k[a>>2]|0)+28>>2]&1023](a,C);nd[k[(k[x>>2]|0)+48>>2]&1023](x,u,a);C$(x,v,a);Y=+(k[q+(C<<2)>>2]|0);p[s+(C<<3)>>3]=+p[u>>3]/Y;p[t+(C<<3)>>3]=+p[v>>3]/Y;C=C+1|0}while((C|0)!=6);Ec[k[(k[a>>2]|0)+4>>2]&1023](a);if(k[b>>2]|0){a=k[k[b+4>>2]>>2]|0;Dc[k[(k[a>>2]|0)+16>>2]&255](a,6,f,s,1)}if(!(k[c>>2]|0)){r=e;return}s=k[k[c+4>>2]>>2]|0;Dc[k[(k[s>>2]|0)+16>>2]&255](s,6,f,t,1);r=e;return}e=l+56|0;t=l+4|0;k[l>>2]=27524;k[e>>2]=27544;B=0;wa(508,l+56|0,t|0);s=B;B=0;if(s&1){s=Rb()|0;Z=Q;_=s;vva(e);Qb(_|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[e>>2]=27488;B=0;va(448,t|0);s=B;B=0;do if(s&1){c=Rb()|0;$=Q;aa=c}else{k[t>>2]=27560;c=l+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(f);Yua(c);Ava(t);$=b;aa=a;break}Yua(f);B=0;a=Ia(40,l|0,109148,6)|0;b=B;B=0;b:do if((((!(b&1)?(B=0,C=ya(427,d|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(C)|0,B=0,u=Ia(40,a|0,C|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,u|0,74278,22)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,m|0,74107,73);u=B;B=0;do if(!(u&1)){B=0;eb(502,n|0,74301,16);C=B;B=0;if(C&1){C=Rb()|0;q=Q;Yua(m);ba=C;ca=q;break}B=0;wa(510,o|0,t|0);q=B;B=0;if(q&1){q=Rb()|0;da=1;ea=Q;fa=q}else{B=0;ua(163,v|0,m|0,n|0,503,o|0);q=B;B=0;if(q&1)ga=1;else{B=0;eb(503,v|0,1240,229);B=0;ga=0}q=Rb()|0;C=Q;Yua(o);da=ga;ea=C;fa=q}Yua(n);Yua(m);if(da){ba=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{q=Rb()|0;ba=q;ca=Q}while(0);zb(v|0);ha=ca;ia=ba}else V=52;while(0);if((V|0)==52){a=Rb()|0;ha=Q;ia=a}k[l>>2]=27468;k[e>>2]=27488;k[t>>2]=27560;Yua(c);Ava(t);vva(e);W=ha;X=ia;Qb(X|0)}while(0);Z=$;_=aa;vva(e);Qb(_|0)}function Hz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d;f=d+40|0;g=d+176|0;h=d+24|0;i=d+12|0;switch(c|0){case 215:{j=k[a+28>>2]|0;l=+Zc[k[(k[j>>2]|0)+52>>2]&255](j);p[b>>3]=l;r=d;return}case 227:{j=k[a+28>>2]|0;l=+Zc[k[(k[j>>2]|0)+60>>2]&255](j);p[b>>3]=l;r=d;return}case 671:{j=oC(k[a+16>>2]|0,671)|0;Fc[k[(k[j>>2]|0)+64>>2]&1023](j,e);p[b>>3]=+p[e>>3];r=d;return}default:{d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;n=j;vva(d);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;o=Q;q=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);Yua(a);Ava(b);o=t;q=s;break}Yua(e);B=0;s=Ia(40,f|0,74318,14)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,c|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146956,19)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,74107,73);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,74333,15);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(g);w=s;x=t;break}B=0;wa(510,i|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,g|0,h|0,554,i|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(i);y=s;z=t;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(E|0)}while(0);m=o;n=q;vva(d);Qb(n|0)}}}function Iz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;e=r;r=r+144|0;f=e;Ko(f,k[a+24>>2]|0,6,0);g=+p[f>>3];h=+p[f+8>>3];i=+p[f+16>>3];j=+p[f+24>>3];l=j<g?j:g;m=j>g?j:g;g=+p[f+32>>3];j=g<h?g:h;n=g>h?g:h;h=+p[f+40>>3];g=h<i?h:i;o=h>i?h:i;i=+p[f+48>>3];h=i<l?i:l;l=i>m?i:m;m=+p[f+56>>3];i=m<j?m:j;j=m>n?m:n;n=+p[f+64>>3];m=n<g?n:g;g=n>o?n:o;o=+p[f+72>>3];n=o<h?o:h;h=o>l?o:l;l=+p[f+80>>3];o=l<i?l:i;i=l>j?l:j;j=+p[f+88>>3];l=j<m?j:m;m=j>g?j:g;g=+p[f+96>>3];j=g<n?g:n;n=g>h?g:h;h=+p[f+104>>3];g=h<o?h:o;o=h>i?h:i;i=+p[f+112>>3];h=i<l?i:l;l=i>m?i:m;m=+p[f+120>>3];i=+p[f+128>>3];q=+p[f+136>>3];p[b>>3]=(m>n?m:n)-(m<j?m:j);p[c>>3]=(i>o?i:o)-(i<g?i:g);p[d>>3]=(q>l?q:l)-(q<h?q:h);r=e;return}function Jz(a){a=a|0;return k[a+44>>2]|0}function Kz(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+336|0;c=b+324|0;d=b+320|0;e=b;f=b+184|0;g=b+168|0;h=b+156|0;i=b+144|0;if(!($p(a)|0)){j=0.0;r=b;return +j}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){j=0.0;r=b;return +j}cp(a,d,298);if((k[d>>2]|0)==302){Ko(e,k[a+24>>2]|0,6,0);l=+id[k[(k[a>>2]|0)+136>>2]&63](a,e);m=+p[e>>3];n=+p[e+8>>3];j=(1.0-l)*(+$(+((m-+p[e+48>>3])*(+p[e+32>>3]-n)-(m-+p[e+24>>3])*(+p[e+56>>3]-n)))*.5);r=b;return +j}b=f+56|0;e=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;o=Q;q=a;vva(b);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);a=B;B=0;do if(a&1){s=Rb()|0;t=Q;u=s}else{k[e>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,e|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(e);t=w;u=v;break}Yua(c);B=0;v=Ia(40,f|0,144639,5)|0;w=B;B=0;if((((!(w&1)?(B=0,w=ya(427,k[d>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,v|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,146481,18)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,g|0,74107,73);y=B;B=0;do if(!(y&1)){B=0;eb(502,h|0,103020,12);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(g);z=v;A=w;break}B=0;wa(510,i|0,e|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;E=1}else{B=0;ua(163,x|0,g|0,h|0,600,i|0);w=B;B=0;if(w&1)F=1;else{B=0;eb(503,x|0,1240,229);B=0;F=0}w=Rb()|0;v=Q;Yua(i);C=v;D=w;E=F}Yua(h);Yua(g);if(E){z=C;A=D}else{G=C;H=D;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}}else{w=Rb()|0;z=Q;A=w}while(0);zb(x|0);G=z;H=A;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}y=Rb()|0;G=Q;H=y;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}while(0);o=t;q=u;vva(b);Qb(q|0);return +(0.0)}function Lz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0;d=r;r=r+112|0;e=d+108|0;f=d+104|0;g=d+96|0;h=d+88|0;i=d+80|0;j=d+72|0;l=d+48|0;m=d;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=d;return}n=a+16|0;kC(k[n>>2]|0,e,533);switch(k[e>>2]|0){case 536:case 537:case 540:{e=a+24|0;o=c+4|0;q=b+4|0;s=0;do{t=Co(k[(k[e>>2]|0)+(s<<2)>>2]|0)|0;if(k[b>>2]|0){u=k[k[q>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}t=Co(k[(k[e>>2]|0)+(s<<2)>>2]|0)|0;if(k[c>>2]|0){u=k[k[o>>2]>>2]|0;Jc[k[(k[u>>2]|0)+20>>2]&1](u,t,9999.0,0)}s=s+1|0}while((s|0)!=6);break}default:{k[f>>2]=0;Uo(a,f);s=oC(k[n>>2]|0,653)|0;o=oC(k[n>>2]|0,64)|0;e=oC(k[n>>2]|0,63)|0;q=oC(k[n>>2]|0,674)|0;t=oC(k[n>>2]|0,677)|0;u=oC(k[n>>2]|0,679)|0;n=ed[k[(k[a>>2]|0)+324>>2]&511](a,1)|0;Fc[k[(k[n>>2]|0)+24>>2]&1023](n,0);if(_p(a)|0){nd[k[(k[o>>2]|0)+48>>2]&1023](o,j,n);nd[k[(k[e>>2]|0)+48>>2]&1023](e,i,n);e=a+24|0;if(+p[j>>3]<+p[i>>3]){v=e;w=13}else{x=e;w=12}}else{Yo(a,m,k[f>>2]|0,n,q,t,u);e=k[a+28>>2]|0;Tc[k[(k[e>>2]|0)+108>>2]&15](e,h,3,k[f>>2]|0,n,q,t,u);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,n);nd[k[(k[o>>2]|0)+48>>2]&1023](o,j,n);y=+p[h>>3]*2.0;z=+p[g>>3];A=y*+p[m>>3]-z;B=y*+p[m+8>>3]-z;C=y*+p[m+16>>3]-z;z=y*+p[m+24>>3];D=y*+p[m+32>>3];E=y*+p[m+40>>3];nd[k[(k[a>>2]|0)+380>>2]&1023](a,l,k[f>>2]|0);y=+p[l>>3];F=+p[l+8>>3];G=+p[l+16>>3];l=a+32|0;+WJ(k[l>>2]|0,265);H=+WJ(k[l>>2]|0,266);I=H*+WJ(k[l>>2]|0,65);l=a+24|0;if(E*2.0*F*G+(D*2.0*y*G+(z*2.0*y*F+(y*(A*y)+F*(B*F)+G*(C*G))))<I*+p[j>>3]){v=l;w=13}else{x=l;w=12}}if((w|0)==12){l=c+4|0;j=Co(k[k[x>>2]>>2]|0)|0;if(k[c>>2]|0){a=k[k[l>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,j,1.0,0)}j=Co(k[(k[x>>2]|0)+4>>2]|0)|0;if(k[c>>2]|0){a=k[k[l>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,j,1.0,0)}j=Co(k[(k[x>>2]|0)+8>>2]|0)|0;if(k[c>>2]|0){a=k[k[l>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,j,1.0,0)}j=Co(k[(k[x>>2]|0)+12>>2]|0)|0;if(k[c>>2]|0){a=k[k[l>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,j,1.0,0)}j=Co(k[(k[x>>2]|0)+16>>2]|0)|0;if(k[c>>2]|0){a=k[k[l>>2]>>2]|0;Jc[k[(k[a>>2]|0)+20>>2]&1](a,j,1.0,0)}j=Co(k[(k[x>>2]|0)+20>>2]|0)|0;if(k[c>>2]|0){c=k[k[l>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}}else if((w|0)==13){w=b+4|0;j=Co(k[k[v>>2]>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}j=Co(k[(k[v>>2]|0)+4>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}j=Co(k[(k[v>>2]|0)+8>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}j=Co(k[(k[v>>2]|0)+12>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}j=Co(k[(k[v>>2]|0)+16>>2]|0)|0;if(k[b>>2]|0){c=k[k[w>>2]>>2]|0;Jc[k[(k[c>>2]|0)+20>>2]&1](c,j,1.0,0)}j=Co(k[(k[v>>2]|0)+20>>2]|0)|0;if(k[b>>2]|0){b=k[k[w>>2]>>2]|0;Jc[k[(k[b>>2]|0)+20>>2]&1](b,j,1.0,0)}}if(n)Ec[k[(k[n>>2]|0)+4>>2]&1023](n);n=k[f>>2]|0;if(n)Tqa(n)}}r=d;return}function Mz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0.0,j=0.0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;a=r;r=r+80|0;f=a;g=d+24|0;h=+p[g>>3];i=+p[d+56>>3];j=+p[d+32>>3];l=d+48|0;m=+p[l>>3];n=+p[d>>3];o=+p[d+8>>3];q=+$(+(m*o+(h*i-j*m+j*n-h*o)-i*n));k[f>>2]=k[d>>2];k[f+4>>2]=k[d+4>>2];k[f+8>>2]=k[d+8>>2];k[f+12>>2]=k[d+12>>2];k[f+16>>2]=k[d+16>>2];k[f+20>>2]=k[d+20>>2];s=f+24|0;k[s>>2]=k[g>>2];k[s+4>>2]=k[g+4>>2];k[s+8>>2]=k[g+8>>2];k[s+12>>2]=k[g+12>>2];k[s+16>>2]=k[g+16>>2];k[s+20>>2]=k[g+20>>2];t=f+48|0;k[t>>2]=k[l>>2];k[t+4>>2]=k[l+4>>2];k[t+8>>2]=k[l+8>>2];k[t+12>>2]=k[l+12>>2];k[t+16>>2]=k[l+16>>2];k[t+20>>2]=k[l+20>>2];n=q*.5;if((e|0)<=0){r=a;return}u=f+56|0;v=f+32|0;w=f+8|0;q=+p[s>>3];i=+p[v>>3];x=0;do{y=x*3|0;z=c+(y<<3)|0;A=b+(y<<3)|0;k[f>>2]=k[z>>2];k[f+4>>2]=k[z+4>>2];k[f+8>>2]=k[z+8>>2];k[f+12>>2]=k[z+12>>2];k[f+16>>2]=k[z+16>>2];k[f+20>>2]=k[z+20>>2];o=+p[u>>3];h=+p[t>>3];j=+p[f>>3];m=+p[w>>3];B=+$(+(h*m+(q*o-i*h+i*j-q*m)-o*j))*.5/n;p[A>>3]=B;k[f>>2]=k[d>>2];k[f+4>>2]=k[d+4>>2];k[f+8>>2]=k[d+8>>2];k[f+12>>2]=k[d+12>>2];k[f+16>>2]=k[d+16>>2];k[f+20>>2]=k[d+20>>2];k[s>>2]=k[z>>2];k[s+4>>2]=k[z+4>>2];k[s+8>>2]=k[z+8>>2];k[s+12>>2]=k[z+12>>2];k[s+16>>2]=k[z+16>>2];k[s+20>>2]=k[z+20>>2];B=+p[s>>3];j=+p[v>>3];m=+p[f>>3];C=+p[w>>3];D=+$(+(h*C+(B*o-j*h+j*m-B*C)-o*m))*.5/n;p[A+8>>3]=D;k[s>>2]=k[g>>2];k[s+4>>2]=k[g+4>>2];k[s+8>>2]=k[g+8>>2];k[s+12>>2]=k[g+12>>2];k[s+16>>2]=k[g+16>>2];k[s+20>>2]=k[g+20>>2];k[t>>2]=k[z>>2];k[t+4>>2]=k[z+4>>2];k[t+8>>2]=k[z+8>>2];k[t+12>>2]=k[z+12>>2];k[t+16>>2]=k[z+16>>2];k[t+20>>2]=k[z+20>>2];q=+p[s>>3];D=+p[u>>3];i=+p[v>>3];o=+p[t>>3];B=+$(+(o*C+(q*D-i*o+i*m-q*C)-D*m))*.5/n;p[A+16>>3]=B;k[t>>2]=k[l>>2];k[t+4>>2]=k[l+4>>2];k[t+8>>2]=k[l+8>>2];k[t+12>>2]=k[l+12>>2];k[t+16>>2]=k[l+16>>2];k[t+20>>2]=k[l+20>>2];x=x+1|0}while((x|0)!=(e|0));r=a;return}function Nz(a){a=a|0;var b=0,c=0;if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0){b=a;return b|0}else c=a;while(1){a=k[k[c+72>>2]>>2]|0;if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0){b=a;break}else c=a}return b|0}function Oz(a){a=a|0;return k[a+44>>2]|0}function Pz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0;f=r;r=r+48|0;g=f;xp(a,g,928);h=+p[g>>3];if(h==0.0){j=h+1.0e-15;p[g>>3]=j;l=j}else l=h;a=g+8|0;h=+p[a>>3];if(h==0.0){j=h+1.0e-15;p[a>>3]=j;m=j}else m=h;a=g+16|0;h=+p[a>>3];if(h==0.0){j=h+1.0e-15;p[a>>3]=j;n=j}else n=h;do if(!(l>0.0&m>0.0&n>0.0))if(!(l<0.0&m<0.0&n<0.0)){h=l*m;a=!(h*n<0.0);if(h>0.0){o=n/(n-l);q=n/(n-m);s=a;t=2;break}if(m*n>0.0){o=l/(l-m);q=l/(l-n);s=a;t=0;break}if(l*n>0.0){o=m/(m-n);q=m/(m-l);s=a;t=1}else{o=0.0;q=0.0;s=a;t=0}}else{o=0.0;q=0.0;s=1;t=0}else{o=1.0;q=1.0;s=1;t=0}while(0);k[b>>2]=t;p[c>>3]=o;p[d>>3]=q;i[e>>0]=s&1;r=f;return}function Qz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c=r;r=r+336|0;d=c+312|0;e=c+128|0;f=c+120|0;g=c+72|0;h=c;i=c+176|0;j=c+160|0;l=c+148|0;m=c+136|0;xp(a,g,928);n=+p[g>>3];if(n==0.0){o=n+1.0e-15;p[g>>3]=o;q=o}else q=n;s=g+8|0;n=+p[s>>3];if(n==0.0){o=n+1.0e-15;p[s>>3]=o;t=o}else t=n;s=g+16|0;n=+p[s>>3];if(n==0.0){o=n+1.0e-15;p[s>>3]=o;u=o}else u=n;if(!(q>0.0&t>0.0&u>0.0))if(q<0.0&t<0.0&u<0.0)v=0.0;else{n=q*t;s=!(n*u>0.0);do if(!(n>0.0)){if(t*u>0.0){o=+p[b>>3];p[h>>3]=o;w=+p[b+8>>3];p[h+8>>3]=w;x=+p[b+16>>3];p[h+16>>3]=x;y=q/(q-t);z=q/(q-u);p[h+24>>3]=o+y*(+p[b+24>>3]-o);p[h+32>>3]=w+y*(+p[b+32>>3]-w);p[h+40>>3]=x+y*(+p[b+40>>3]-x);p[h+48>>3]=o+z*(+p[b+48>>3]-o);p[h+56>>3]=w+z*(+p[b+56>>3]-w);p[h+64>>3]=x+z*(+p[b+64>>3]-x);A=h;break}if(q*u>0.0){x=+p[b+24>>3];p[h+24>>3]=x;z=+p[b+32>>3];p[h+32>>3]=z;w=+p[b+40>>3];p[h+40>>3]=w;o=t/(t-q);y=t/(t-u);p[h>>3]=x+o*(+p[b>>3]-x);p[h+8>>3]=z+o*(+p[b+8>>3]-z);p[h+16>>3]=w+o*(+p[b+16>>3]-w);p[h+48>>3]=x+y*(+p[b+48>>3]-x);p[h+56>>3]=z+y*(+p[b+56>>3]-z);p[h+64>>3]=w+y*(+p[b+64>>3]-w);A=h;break}else{A=h;break}}else{w=+p[b+48>>3];p[h+48>>3]=w;y=+p[b+56>>3];p[h+56>>3]=y;z=+p[b+64>>3];p[h+64>>3]=z;x=u/(u-t);o=u/(u-q);p[h+24>>3]=w+x*(+p[b+24>>3]-w);p[h+32>>3]=y+x*(+p[b+32>>3]-y);p[h+40>>3]=z+x*(+p[b+40>>3]-z);p[h>>3]=w+o*(+p[b>>3]-w);p[h+8>>3]=y+o*(+p[b+8>>3]-y);p[h+16>>3]=z+o*(+p[b+16>>3]-z);A=h}while(0);eC(a,e,b,0);eC(a,f,A,0);if(s){q=+p[e>>3];u=q-+p[f>>3];p[f>>3]=u;C=u;D=q}else{C=+p[f>>3];D=+p[e>>3]}v=C/D}else v=1.0;if(!(v>1.0|v<0.0)){r=c;return +v}c=i+56|0;e=i+4|0;k[i>>2]=27524;k[c>>2]=27544;B=0;wa(508,i+56|0,e|0);f=B;B=0;if(f&1){f=Rb()|0;E=Q;F=f;vva(c);Qb(F|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[c>>2]=27488;B=0;va(448,e|0);f=B;B=0;do if(f&1){s=Rb()|0;G=Q;H=s}else{k[e>>2]=27560;s=i+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;a=Q;Yua(d);Yua(s);Ava(e);G=a;H=A;break}Yua(d);B=0;A=Ia(40,i|0,74349,80)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,j|0,74107,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,74430,18);b=B;B=0;if(b&1){b=Rb()|0;h=Q;Yua(j);I=h;J=b;break}B=0;wa(510,m|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;K=Q;L=b;M=1}else{B=0;ua(163,A|0,j|0,l|0,913,m|0);b=B;B=0;if(b&1)N=1;else{B=0;eb(503,A|0,1240,229);B=0;N=0}b=Rb()|0;h=Q;Yua(m);K=h;L=b;M=N}Yua(l);Yua(j);if(M){I=K;J=L}else{O=K;P=L;k[i>>2]=27468;k[c>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(c);Qb(P|0)}}else{b=Rb()|0;I=Q;J=b}while(0);zb(A|0);O=I;P=J;k[i>>2]=27468;k[c>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(c);Qb(P|0)}a=Rb()|0;O=Q;P=a;k[i>>2]=27468;k[c>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(c);Qb(P|0)}while(0);E=G;F=H;vva(c);Qb(F|0);return +(0.0)}function Rz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+48|0;f=e;xp(a,f,d);d=Rqa(24)|0;if(!(+p[f>>3]>=0.0))g=0;else{k[d>>2]=0;g=1}if(!(+p[f+8>>3]>=0.0))h=g;else{k[d+(g<<2)>>2]=1;h=g+1|0}if(!(+p[f+16>>3]>=0.0))i=h;else{k[d+(h<<2)>>2]=2;i=h+1|0}h=k[d>>2]|0;f=d+4|0;g=k[f>>2]|0;if(((h+3-g|0)%3|0|0)==2)j=h;else{k[d>>2]=g;k[f>>2]=h;j=g}g=i*6|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;if((i|0)<=0){k[b>>2]=h;Tqa(d);r=e;return}g=(i<<1)+-1|0;f=j;j=0;while(1){a=j*3|0;l=(g-j|0)*3|0;m=f*3|0;p[h+(a<<3)>>3]=+p[c+(m<<3)>>3];p[h+(l<<3)>>3]=+p[c+(m+9<<3)>>3];p[h+(a+1<<3)>>3]=+p[c+(m+1<<3)>>3];p[h+(l+1<<3)>>3]=+p[c+(m+10<<3)>>3];p[h+(a+2<<3)>>3]=+p[c+(m+2<<3)>>3];p[h+(l+2<<3)>>3]=+p[c+(m+11<<3)>>3];m=j+1|0;if((m|0)==(i|0))break;f=k[d+(m<<2)>>2]|0;j=m}k[b>>2]=h;Tqa(d);r=e;return}function Sz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){m=Qqa(72)|0;B=0;va(493,m|0);n=B;B=0;if(!(n&1)){n=k[(k[m>>2]|0)+28>>2]|0;o=ed[k[(k[a>>2]|0)+160>>2]&511](a,c)|0;Fc[n&1023](m,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,b,m);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=e;return}e=Rb()|0;b=Q;Sqa(m);p=e;q=b;Qb(p|0)}b=g+56|0;e=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;s=Q;t=m;vva(b);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);m=B;B=0;do if(m&1){l=Rb()|0;u=Q;v=l}else{k[e>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(f);Yua(l);Ava(e);u=n;v=o;break}Yua(f);B=0;o=Ia(40,g|0,74449,17)|0;n=B;B=0;a:do if((((!(n&1)?(B=0,c=ya(427,d|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(c)|0,B=0,w=Ia(40,o|0,c|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,w|0,74467,14)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,74107,73);w=B;B=0;do if(!(w&1)){B=0;eb(502,i|0,121355,13);c=B;B=0;if(c&1){c=Rb()|0;x=Q;Yua(h);y=c;z=x;break}B=0;wa(510,j|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;A=x;C=Q;D=1}else{B=0;ua(163,a|0,h|0,i|0,963,j|0);x=B;B=0;if(x&1)E=1;else{B=0;eb(503,a|0,1240,229);B=0;E=0}x=Rb()|0;c=Q;Yua(j);A=x;C=c;D=E}Yua(i);Yua(h);if(D){y=A;z=C}else{F=A;G=C;break a}}else{c=Rb()|0;y=c;z=Q}while(0);zb(a|0);F=y;G=z}else H=20;while(0);if((H|0)==20){o=Rb()|0;F=o;G=Q}k[g>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(l);Ava(e);vva(b);p=F;q=G;Qb(p|0)}while(0);s=u;t=v;vva(b);Qb(t|0)}function Tz(a,b){a=a|0;b=b|0;return k[(k[a+20>>2]|0)+(b<<2)>>2]|0}function Uz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=XB(a,k[a+44>>2]|0)|0;a:do if((i|0)>0){j=k[a+20>>2]|0;l=0;while(1){if((k[j+(l<<2)>>2]|0)==(b|0)){m=l;break}l=l+1|0;if((l|0)>=(i|0))break a}r=c;return m|0}while(0);m=e+56|0;c=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,c|0);i=B;B=0;if(i&1){i=Rb()|0;n=Q;o=i;vva(m);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,c|0);i=B;B=0;do if(i&1){b=Rb()|0;p=Q;q=b}else{k[c>>2]=27560;b=e+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(d);Yua(b);Ava(c);p=l;q=a;break}Yua(d);B=0;a=Ia(40,e|0,74482,43)|0;l=B;B=0;if(!(l&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,f|0,74107,73);l=B;B=0;do if(!(l&1)){B=0;eb(502,g|0,74526,12);j=B;B=0;if(j&1){j=Rb()|0;s=Q;Yua(f);t=s;u=j;break}B=0;wa(510,h|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;v=Q;w=j;x=1}else{B=0;ua(163,a|0,f|0,g|0,995,h|0);j=B;B=0;if(j&1)y=1;else{B=0;eb(503,a|0,1240,229);B=0;y=0}j=Rb()|0;s=Q;Yua(h);v=s;w=j;x=y}Yua(g);Yua(f);if(x){t=v;u=w}else{z=v;A=w;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}}else{j=Rb()|0;t=Q;u=j}while(0);zb(a|0);z=t;A=u;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}l=Rb()|0;z=Q;A=l;k[e>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(m);Qb(A|0)}while(0);n=p;o=q;vva(m);Qb(o|0);return 0}function Vz(a){a=a|0;return XB(a,k[a+44>>2]|0)|0}function Wz(a,b){a=a|0;b=b|0;return XB(a,b)|0}function Xz(a){a=a|0;return 6}function Yz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+64|0;e=d+56|0;f=d+8|0;g=d;k[e>>2]=0;rp(a,e,534,943);h=oC(k[a+16>>2]|0,c)|0;c=Qqa(72)|0;B=0;va(493,c|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(c);Qb(a|0)}Fc[k[(k[c>>2]|0)+28>>2]&1023](c,0);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f>>3]=+p[g>>3];Fc[k[(k[c>>2]|0)+28>>2]&1023](c,1);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f+8>>3]=+p[g>>3];Fc[k[(k[c>>2]|0)+28>>2]&1023](c,2);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f+16>>3]=+p[g>>3];Fc[k[(k[c>>2]|0)+28>>2]&1023](c,3);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f+24>>3]=+p[g>>3];Fc[k[(k[c>>2]|0)+28>>2]&1023](c,4);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f+32>>3]=+p[g>>3];Fc[k[(k[c>>2]|0)+28>>2]&1023](c,5);nd[k[(k[h>>2]|0)+48>>2]&1023](h,g,c);p[f+40>>3]=+p[g>>3];if(k[b>>2]|0){g=k[k[b+4>>2]>>2]|0;Dc[k[(k[g>>2]|0)+16>>2]&255](g,6,k[e>>2]|0,f,0)}Ec[k[(k[c>>2]|0)+4>>2]&1023](c);c=k[e>>2]|0;if(!c){r=d;return}Tqa(c);r=d;return}function Zz(a){a=a|0;return k[(k[a+72>>2]|0)+4>>2]|0}function _z(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;g=r;r=r+400|0;h=g+376|0;i=g+352|0;j=g+216|0;l=g+200|0;m=g+48|0;n=g+36|0;o=g+64|0;p=g+24|0;q=g+12|0;s=g;if(!(Tp(a,c)|0)){r=g;return}Mp(a,i,d,f);f=(c|0)==215?214:c;c=oC(k[a+16>>2]|0,f)|0;if(!c){a=j+56|0;d=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(a);Qb(v|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,d|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[d>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,d|0,h|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(h);Yua(w);Ava(d);x=A;y=z;break}Yua(h);B=0;z=Ia(40,j|0,109148,6)|0;A=B;B=0;a:do if((((!(A&1)?(B=0,C=ya(427,f|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(C)|0,B=0,E=Ia(40,z|0,C|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Ia(40,E|0,109155,21)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,l|0,74107,73);E=B;B=0;do if(!(E&1)){B=0;eb(502,m|0,74539,26);C=B;B=0;if(C&1){C=Rb()|0;F=Q;Yua(l);G=C;H=F;break}B=0;wa(510,n|0,d|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;J=F;K=1}else{B=0;ua(163,D|0,l|0,m|0,1090,n|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,D|0,1240,229);B=0;L=0}F=Rb()|0;C=Q;Yua(n);I=C;J=F;K=L}Yua(m);Yua(l);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=F;H=Q}while(0);zb(D|0);M=G;N=H}else O=21;while(0);if((O|0)==21){z=Rb()|0;M=z;N=Q}k[j>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(w);Ava(d);vva(a);P=N;R=M;Qb(R|0)}while(0);u=x;v=y;vva(a);Qb(v|0)}if((Hc[k[(k[c>>2]|0)+20>>2]&511](c)|0)==559){w$(c,b,i,e);r=g;return}g=o+56|0;e=o+4|0;k[o>>2]=27524;k[g>>2]=27544;B=0;wa(508,o+56|0,e|0);i=B;B=0;if(i&1){i=Rb()|0;S=Q;T=i;vva(g);Qb(T|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[g>>2]=27488;B=0;va(448,e|0);i=B;B=0;do if(i&1){b=Rb()|0;U=Q;V=b}else{k[e>>2]=27560;b=o+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[o+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,e|0,h|0);c=B;B=0;if(c&1){c=Rb()|0;v=Q;Yua(h);Yua(b);Ava(e);U=v;V=c;break}Yua(h);B=0;c=Ia(40,o|0,74566,6)|0;v=B;B=0;b:do if((((!(v&1)?(B=0,a=ya(427,f|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(a)|0,B=0,x=Ia(40,c|0,a|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,x|0,74278,22)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,p|0,74107,73);x=B;B=0;do if(!(x&1)){B=0;eb(502,q|0,74539,26);a=B;B=0;if(a&1){a=Rb()|0;u=Q;Yua(p);W=a;X=u;break}B=0;wa(510,s|0,e|0);u=B;B=0;if(u&1){u=Rb()|0;Y=1;Z=Q;_=u}else{B=0;ua(163,y|0,p|0,q|0,1094,s|0);u=B;B=0;if(u&1)$=1;else{B=0;eb(503,y|0,1240,229);B=0;$=0}u=Rb()|0;a=Q;Yua(s);Y=$;Z=a;_=u}Yua(q);Yua(p);if(Y){W=_;X=Z}else{aa=Z;ba=_;break b}}else{u=Rb()|0;W=u;X=Q}while(0);zb(y|0);aa=X;ba=W}else O=48;while(0);if((O|0)==48){c=Rb()|0;aa=Q;ba=c}k[o>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(b);Ava(e);vva(g);P=aa;R=ba;Qb(R|0)}while(0);S=U;T=V;vva(g);Qb(T|0)}function $z(a,b){a=a|0;b=b|0;var c=0;c=Rqa(72)|0;Ko(c,k[a+24>>2]|0,3,0);k[b>>2]=c;return}function aA(a,b){a=a|0;b=b|0;var c=0;c=Rqa(72)|0;Ko(c,(k[a+24>>2]|0)+12|0,3,0);k[b>>2]=c;return}function bA(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+336|0;c=b+324|0;d=b+320|0;e=b;f=b+184|0;g=b+168|0;h=b+156|0;i=b+144|0;if(!($p(a)|0)){j=0.0;r=b;return +j}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){j=0.0;r=b;return +j}cp(a,d,298);if((k[d>>2]|0)==302){Ko(e,k[a+24>>2]|0,6,0);l=+id[k[(k[a>>2]|0)+136>>2]&63](a,e);m=+p[e>>3];n=+p[e+8>>3];j=l*(+$(+((m-+p[e+48>>3])*(+p[e+32>>3]-n)-(m-+p[e+24>>3])*(+p[e+56>>3]-n)))*.5);r=b;return +j}b=f+56|0;e=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;o=Q;q=a;vva(b);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);a=B;B=0;do if(a&1){s=Rb()|0;t=Q;u=s}else{k[e>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,e|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(e);t=w;u=v;break}Yua(c);B=0;v=Ia(40,f|0,144639,5)|0;w=B;B=0;if((((!(w&1)?(B=0,w=ya(427,k[d>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,v|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,146481,18)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,g|0,74107,73);y=B;B=0;do if(!(y&1)){B=0;eb(502,h|0,103033,12);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(g);z=v;A=w;break}B=0;wa(510,i|0,e|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;E=1}else{B=0;ua(163,x|0,g|0,h|0,1129,i|0);w=B;B=0;if(w&1)F=1;else{B=0;eb(503,x|0,1240,229);B=0;F=0}w=Rb()|0;v=Q;Yua(i);C=v;D=w;E=F}Yua(h);Yua(g);if(E){z=C;A=D}else{G=C;H=D;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}}else{w=Rb()|0;z=Q;A=w}while(0);zb(x|0);G=z;H=A;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}y=Rb()|0;G=Q;H=y;k[f>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(s);Ava(e);vva(b);Qb(H|0)}while(0);o=t;q=u;vva(b);Qb(q|0);return +(0.0)}function cA(a){a=a|0;var b=0.0,c=0.0;if(!($p(a)|0)){b=0.0;return +b}c=+WJ(k[a+32>>2]|0,265);b=c*+Zc[k[(k[a>>2]|0)+204>>2]&255](a);return +b}function dA(a){a=a|0;var b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0;b=r;r=r+144|0;c=b;if(!($p(a)|0)){d=0.0;r=b;return +d}Ko(c,k[a+24>>2]|0,6,0);e=+p[c>>3];f=+p[c+8>>3];g=+$(+((e-+p[c+48>>3])*(+p[c+32>>3]-f)-(e-+p[c+24>>3])*(+p[c+56>>3]-f)))*.5;d=g*((+p[c+88>>3]-+p[c+16>>3]+(+p[c+112>>3]-+p[c+40>>3])+(+p[c+136>>3]-+p[c+64>>3]))*.3333333333333333);r=b;return +d}function eA(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0;b=r;r=r+176|0;c=b+160|0;d=b+152|0;e=b+144|0;f=b;if(!($p(a)|0)){g=0.0;r=b;return +g}if(_p(a)|0){g=0.0;r=b;return +g}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){g=0.0;r=b;return +g}h=a+32|0;i=+WJ(k[h>>2]|0,265);j=+WJ(k[h>>2]|0,266);Ko(f,k[a+24>>2]|0,6,0);l=+p[f>>3];m=+p[f+8>>3];n=+$(+((l-+p[f+48>>3])*(+p[f+32>>3]-m)-(l-+p[f+24>>3])*(+p[f+56>>3]-m)))*.5;f=a+16|0;a=oC(k[f>>2]|0,339)|0;h=oC(k[f>>2]|0,64)|0;o=oC(k[f>>2]|0,63)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,d);Fc[k[(k[h>>2]|0)+64>>2]&1023](h,c);Fc[k[(k[o>>2]|0)+64>>2]&1023](o,e);m=+p[d>>3]-+p[c>>3];g=n*(m+ +KY(j/i*+p[e>>3],0.0));r=b;return +g}function fA(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+208|0;e=d+184|0;f=d+180|0;g=d+176|0;h=d+40|0;i=d+24|0;j=d+12|0;l=d;k[g>>2]=0;m=a+36|0;cO(k[m>>2]|0,f,198);hO(k[m>>2]|0,g,0,176);a:do if((k[f>>2]|0)>0){m=a+16|0;b:do if(c){n=0;while(1){o=k[(k[g>>2]|0)+(n<<2)>>2]|0;switch(o|0){case 215:{if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0))break a;p=oC(k[m>>2]|0,214)|0;break}case 227:{if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0))break a;p=oC(k[m>>2]|0,225)|0;break}default:p=oC(k[m>>2]|0,o)|0}if((Hc[k[(k[p>>2]|0)+20>>2]&511](p)|0)!=559){q=n;break b}F$(p,b);l$(p);s$(p);switch(k[(k[g>>2]|0)+(n<<2)>>2]|0){case 215:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,214,-1);break}case 227:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,225,-1);break}default:{}}n=n+1|0;if((n|0)>=(k[f>>2]|0))break a}}else{n=0;while(1){o=k[(k[g>>2]|0)+(n<<2)>>2]|0;switch(o|0){case 215:{if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0))break a;s=oC(k[m>>2]|0,214)|0;break}case 227:{if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0))break a;s=oC(k[m>>2]|0,225)|0;break}default:s=oC(k[m>>2]|0,o)|0}if((Hc[k[(k[s>>2]|0)+20>>2]&511](s)|0)!=559){q=n;break b}F$(s,b);l$(s);switch(k[(k[g>>2]|0)+(n<<2)>>2]|0){case 215:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,214,-1);break}case 227:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,225,-1);break}default:{}}n=n+1|0;if((n|0)>=(k[f>>2]|0))break a}}while(0);m=h+56|0;n=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;u=o;vva(m);Qb(u|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){v=Rb()|0;w=Q;x=v}else{k[n>>2]=27560;v=h+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);Yua(v);Ava(n);w=z;x=y;break}Yua(e);B=0;y=Ia(40,h|0,74566,6)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,k[(k[g>>2]|0)+(q<<2)>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,y|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,74278,22)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,i|0,74107,73);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,74573,18);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(i);D=y;E=z;break}B=0;wa(510,l|0,n|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;G=z;H=1}else{B=0;ua(163,A|0,i|0,j|0,1227,l|0);z=B;B=0;if(z&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}z=Rb()|0;y=Q;Yua(l);F=y;G=z;H=I}Yua(j);Yua(i);if(H){D=F;E=G}else{J=F;K=G;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(m);Qb(K|0)}}else{z=Rb()|0;D=Q;E=z}while(0);zb(A|0);J=D;K=E;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(m);Qb(K|0)}C=Rb()|0;J=Q;K=C;k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(m);Qb(K|0)}while(0);t=w;u=x;vva(m);Qb(u|0)}while(0);u=k[g>>2]|0;if(!u){r=d;return}Tqa(u);r=d;return}function gA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;d=r;r=r+656|0;e=d+640|0;f=d+144|0;g=d+96|0;h=d+48|0;i=d;j=d+504|0;l=d+488|0;m=d+336|0;n=d+324|0;o=d+352|0;q=d+312|0;s=d+300|0;t=d+288|0;u=h;v=u+48|0;do{k[u>>2]=0;u=u+4|0}while((u|0)<(v|0));if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=d;return}u=Qqa(16)|0;B=0;ib(285,u|0,353,h|0,738);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Sqa(u);x=w;y=v;Qb(y|0)}v=a+16|0;w=oC(k[v>>2]|0,b)|0;a:do if(w){z=f+88|0;A=f+16|0;C=g+24|0;D=f+112|0;E=f+40|0;F=g+8|0;G=g+32|0;H=f+136|0;I=f+64|0;J=g+16|0;K=g+40|0;L=i+24|0;M=w;N=a;O=0;P=0;b:while(1){do if(!O){if((Hc[k[(k[M>>2]|0)+20>>2]&511](M)|0)==626){R=Qqa(16)|0;B=0;ib(285,R|0,c|0,h|0,738);S=B;B=0;if(S&1){T=R;U=35;break b}V=R;break}if((Hc[k[(k[M>>2]|0)+20>>2]&511](M)|0)==559){R=Qqa(16)|0;B=0;ib(285,R|0,c|0,h|0,738);S=B;B=0;if(S&1){W=R;U=39;break b}V=R;break}if((Hc[k[(k[M>>2]|0)+20>>2]&511](M)|0)!=561){X=M;Y=M;U=44;break b}R=Qqa(16)|0;B=0;Oa(58,R|0,c|0,0.0);S=B;B=0;if(S&1){Z=R;U=43;break b}V=R}else V=P;while(0);Ko(f,k[N+24>>2]|0,6,0);_=+p[z>>3]-+p[A>>3];p[g>>3]=_;p[C>>3]=_;_=+p[D>>3]-+p[E>>3];p[F>>3]=_;p[G>>3]=_;_=+p[H>>3]-+p[I>>3];p[J>>3]=_;p[K>>3]=_;R=Qqa(16)|0;B=0;ib(285,R|0,353,g|0,738);S=B;B=0;if(S&1){$=R;U=77;break}do if((Hc[k[(k[M>>2]|0)+20>>2]&511](M)|0)==626){if((k[M+8>>2]|0)!=736){S=Hc[k[(k[M>>2]|0)+24>>2]&511](M)|0;Fc[k[(k[S>>2]|0)+132>>2]&1023](S,R);aa=S;break}Fc[k[(k[M>>2]|0)+44>>2]&1023](M,L);S=Qqa(16)|0;B=0;ba=ya(k[(k[M>>2]|0)+32>>2]|0,M|0)|0;ca=B;B=0;if(ca&1){da=S;U=78;break b}B=0;ib(285,S|0,ba|0,i|0,738);ba=B;B=0;if(ba&1){da=S;U=78;break b}Fc[k[(k[S>>2]|0)+132>>2]&1023](S,R);aa=S}else{S=Hc[k[(k[M>>2]|0)+24>>2]&511](M)|0;Fc[k[(k[S>>2]|0)+132>>2]&1023](S,R);aa=S}while(0);Xc[k[(k[V>>2]|0)+124>>2]&63](V,aa,1.0);Xc[k[(k[u>>2]|0)+124>>2]&63](u,R,1.0);Ec[k[(k[R>>2]|0)+4>>2]&1023](R);if(aa)Ec[k[(k[aa>>2]|0)+4>>2]&1023](aa);if(Hc[k[(k[N>>2]|0)+252>>2]&511](N)|0){ea=V;U=85;break}N=k[(k[N+72>>2]|0)+4>>2]|0;M=oC(k[N+16>>2]|0,b)|0;if(!M)break a;else{O=O+1|0;P=V}}if((U|0)==35){P=Rb()|0;O=Q;Sqa(T);x=O;y=P;Qb(y|0)}else if((U|0)==39){P=Rb()|0;O=Q;Sqa(W);x=O;y=P;Qb(y|0)}else if((U|0)==43){P=Rb()|0;O=Q;Sqa(Z);x=O;y=P;Qb(y|0)}else if((U|0)==44){P=o+56|0;O=o+4|0;k[o>>2]=27524;k[P>>2]=27544;B=0;wa(508,o+56|0,O|0);M=B;B=0;if(M&1){M=Rb()|0;fa=Q;ga=M;vva(P);Qb(ga|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[P>>2]=27488;B=0;va(448,O|0);M=B;B=0;do if(M&1){N=Rb()|0;ha=Q;ia=N}else{k[O>>2]=27560;N=o+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,O|0,e|0);L=B;B=0;if(L&1){L=Rb()|0;K=Q;Yua(e);Yua(N);Ava(O);ha=K;ia=L;break}Yua(e);B=0;L=Ia(40,o|0,74648,7)|0;K=B;B=0;c:do if(((((!(K&1)?(B=0,J=ya(k[(k[Y>>2]|0)+20>>2]|0,X|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,J|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,H=Ia(40,L|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,q|0,74107,73);H=B;B=0;do if(!(H&1)){B=0;eb(502,s|0,74624,23);I=B;B=0;if(I&1){I=Rb()|0;G=Q;Yua(q);ja=I;ka=G;break}B=0;wa(510,t|0,O|0);G=B;B=0;if(G&1){G=Rb()|0;la=1;ma=Q;na=G}else{B=0;ua(163,J|0,q|0,s|0,1287,t|0);G=B;B=0;if(G&1)oa=1;else{B=0;eb(503,J|0,1240,229);B=0;oa=0}G=Rb()|0;I=Q;Yua(t);la=oa;ma=I;na=G}Yua(s);Yua(q);if(la){ja=na;ka=ma}else{pa=ma;qa=na;break c}}else{G=Rb()|0;ja=G;ka=Q}while(0);zb(J|0);pa=ka;qa=ja}else U=63;while(0);if((U|0)==63){L=Rb()|0;pa=Q;qa=L}k[o>>2]=27468;k[P>>2]=27488;k[O>>2]=27560;Yua(N);Ava(O);vva(P);x=pa;y=qa;Qb(y|0)}while(0);fa=ha;ga=ia;vva(P);Qb(ga|0)}else if((U|0)==77){O=Rb()|0;M=Q;Sqa($);x=M;y=O;Qb(y|0)}else if((U|0)==78){O=Rb()|0;M=Q;Sqa(da);x=M;y=O;Qb(y|0)}else if((U|0)==85){O=ed[k[(k[ea>>2]|0)+152>>2]&511](ea,u)|0;Fc[k[(k[O>>2]|0)+80>>2]&1023](O,c);Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Ec[k[(k[ea>>2]|0)+4>>2]&1023](ea);mC(k[v>>2]|0,O)|0;r=d;return}}while(0);d=j+56|0;v=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,v|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ra=Q;sa=ea;vva(d);Qb(sa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,v|0);ea=B;B=0;do if(ea&1){u=Rb()|0;ta=Q;xa=u}else{k[v>>2]=27560;u=j+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,v|0,e|0);c=B;B=0;if(c&1){c=Rb()|0;da=Q;Yua(e);Yua(u);Ava(v);ta=da;xa=c;break}Yua(e);B=0;c=Ia(40,j|0,74592,31)|0;da=B;B=0;d:do if(((!(da&1)?(B=0,$=ya(427,b|0)|0,ga=B,B=0,!(ga&1)):0)?(ga=Lta($)|0,B=0,ia=Ia(40,c|0,$|0,ga|0)|0,ga=B,B=0,!(ga&1)):0)?(B=0,Xa(239,ia|0,0)|0,ia=B,B=0,!(ia&1)):0){ia=Ab(20)|0;B=0;eb(502,l|0,74107,73);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,m|0,74624,23);$=B;B=0;if($&1){$=Rb()|0;ha=Q;Yua(l);za=$;Aa=ha;break}B=0;wa(510,n|0,v|0);ha=B;B=0;if(ha&1){ha=Rb()|0;Ba=Q;Ca=ha;Da=1}else{B=0;ua(163,ia|0,l|0,m|0,1276,n|0);ha=B;B=0;if(ha&1)Ea=1;else{B=0;eb(503,ia|0,1240,229);B=0;Ea=0}ha=Rb()|0;$=Q;Yua(n);Ba=$;Ca=ha;Da=Ea}Yua(m);Yua(l);if(Da){za=Ca;Aa=Ba}else{Fa=Ca;Ga=Ba;break d}}else{ha=Rb()|0;za=ha;Aa=Q}while(0);zb(ia|0);Fa=za;Ga=Aa}else U=23;while(0);if((U|0)==23){c=Rb()|0;Fa=c;Ga=Q}k[j>>2]=27468;k[d>>2]=27488;k[v>>2]=27560;Yua(u);Ava(v);vva(d);x=Ga;y=Fa;Qb(y|0)}while(0);ra=ta;sa=xa;vva(d);Qb(sa|0)}function hA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=(c|0)==-1;if(j)if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)l=0;else{r=d;return}else if((c|0)==1)if(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)l=1;else{r=d;return}else l=0;m=oC(k[a+16>>2]|0,b)|0;if(m){Fc[k[(k[m>>2]|0)+136>>2]&1023](m,c);if(j?Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0:0){r=d;return}if(l?Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0:0){r=d;return}if(!j){if(l)n=a;else{j=a;while(1){c=k[k[j+72>>2]>>2]|0;o=Hc[k[(k[m>>2]|0)+24>>2]&511](m)|0;mC(k[c+16>>2]|0,o)|0;j=c}}do{n=k[k[n+72>>2]>>2]|0;j=Hc[k[(k[m>>2]|0)+24>>2]&511](m)|0;mC(k[n+16>>2]|0,j)|0}while(!(Hc[k[(k[n>>2]|0)+248>>2]&511](n)|0));r=d;return}if(l)p=a;else{l=a;do{l=k[(k[l+72>>2]|0)+4>>2]|0;a=Hc[k[(k[m>>2]|0)+24>>2]&511](m)|0;mC(k[l+16>>2]|0,a)|0}while(!(Hc[k[(k[l>>2]|0)+252>>2]&511](l)|0));r=d;return}while(1){p=k[(k[p+72>>2]|0)+4>>2]|0;l=Hc[k[(k[m>>2]|0)+24>>2]&511](m)|0;mC(k[p+16>>2]|0,l)|0;if(Hc[k[(k[p>>2]|0)+252>>2]&511](p)|0){q=43;break}if(Hc[k[(k[p>>2]|0)+248>>2]&511](p)|0){q=43;break}}if((q|0)==43){r=d;return}}d=f+56|0;q=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,q|0);p=B;B=0;if(p&1){p=Rb()|0;s=Q;t=p;vva(d);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,q|0);p=B;B=0;do if(p&1){m=Rb()|0;u=Q;v=m}else{k[q>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);l=B;B=0;if(l&1){l=Rb()|0;a=Q;Yua(e);Yua(m);Ava(q);u=a;v=l;break}Yua(e);B=0;l=Ia(40,f|0,74592,31)|0;a=B;B=0;if(((!(a&1)?(B=0,a=ya(427,b|0)|0,n=B,B=0,!(n&1)):0)?(n=Lta(a)|0,B=0,j=Ia(40,l|0,a|0,n|0)|0,n=B,B=0,!(n&1)):0)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,g|0,74107,73);n=B;B=0;do if(!(n&1)){B=0;eb(502,h|0,74656,12);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(g);w=a;x=l;break}B=0;wa(510,i|0,q|0);l=B;B=0;if(l&1){l=Rb()|0;y=l;z=Q;A=1}else{B=0;ua(163,j|0,g|0,h|0,1357,i|0);l=B;B=0;if(l&1)C=1;else{B=0;eb(503,j|0,1240,229);B=0;C=0}l=Rb()|0;a=Q;Yua(i);y=l;z=a;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(d);Qb(D|0)}}else{a=Rb()|0;w=a;x=Q}while(0);zb(j|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(d);Qb(D|0)}n=Rb()|0;D=n;E=Q;k[f>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(d);Qb(D|0)}while(0);s=u;t=v;vva(d);Qb(t|0)}function iA(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,b)|0;if(j){Cc[k[(k[j>>2]|0)+120>>2]&63](j,c);r=d;return}d=f+56|0;j=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,j|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;m=a;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,j|0);a=B;B=0;do if(a&1){n=Rb()|0;o=Q;p=n}else{k[j>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(j);o=s;p=q;break}Yua(e);B=0;q=Ia(40,f|0,74669,36)|0;s=B;B=0;if(((!(s&1)?(B=0,s=ya(427,b|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,g|0,74107,73);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,74706,10);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(g);v=q;w=s;break}B=0;wa(510,i|0,j|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,u|0,g|0,h|0,1388,i|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,u|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(i);x=q;y=s;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(u|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}t=Rb()|0;C=Q;D=t;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(n);Ava(j);vva(d);Qb(D|0)}while(0);l=o;m=p;vva(d);Qb(m|0)}function jA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0;d=r;r=r+384|0;e=d+368|0;f=d+344|0;g=d+104|0;h=d+56|0;j=d+8|0;l=d;m=d+380|0;n=d+336|0;o=d+332|0;q=d+328|0;s=d+192|0;t=d+176|0;u=d+164|0;v=d+152|0;k[n>>2]=0;Gka(c,l,106352);zka(c,m,139791);if((i[m>>0]|0)!=0?(Fka(c,o,113066),(i[m>>0]|0)!=0):0){Fka(c,q,113428);w=i[m>>0]|0}else w=0;x=b*6|0;y=k[c+72>>2]|0;k[f>>2]=k[y+(x<<2)>>2];z=f+4|0;k[z>>2]=k[y+((x|1)<<2)>>2];A=f+8|0;k[A>>2]=k[y+(x+2<<2)>>2];C=f+12|0;k[C>>2]=k[y+(x+3<<2)>>2];D=k[y+(x+4<<2)>>2]|0;E=f+16|0;k[E>>2]=D;F=k[y+(x+5<<2)>>2]|0;x=f+20|0;k[x>>2]=F;if(!(w<<24>>24)){G=D;H=F}else{Hka(c,n,0,113102);do if((k[o>>2]|0)>0){w=a+16|0;y=(k[f>>2]|0)+-1|0;I=(k[z>>2]|0)+-1|0;J=g+8|0;K=(k[A>>2]|0)+-1|0;L=g+16|0;M=(k[C>>2]|0)+-1|0;N=g+24|0;O=(k[E>>2]|0)+-1|0;P=g+32|0;R=(k[x>>2]|0)+-1|0;S=g+40|0;T=(k[f>>2]|0)+-1|0;U=(k[z>>2]|0)+-1|0;V=h+8|0;W=(k[A>>2]|0)+-1|0;X=h+16|0;Y=(k[C>>2]|0)+-1|0;Z=h+24|0;_=h+32|0;$=h+40|0;aa=j+8|0;ba=j+16|0;ca=j+24|0;da=k[E>>2]|0;ea=da+-1|0;fa=j+32|0;ga=k[x>>2]|0;ha=ga+-1|0;ia=j+40|0;ja=(k[f>>2]|0)+-1|0;ka=(k[z>>2]|0)+-1|0;la=g+8|0;na=(k[A>>2]|0)+-1|0;oa=g+16|0;pa=(k[C>>2]|0)+-1|0;qa=g+24|0;ra=(k[E>>2]|0)+-1|0;sa=g+32|0;ta=(k[x>>2]|0)+-1|0;xa=g+40|0;za=(k[f>>2]|0)+-1|0;Aa=(k[z>>2]|0)+-1|0;Ba=h+8|0;Ca=(k[A>>2]|0)+-1|0;Da=h+16|0;Ea=(k[C>>2]|0)+-1|0;Fa=h+24|0;Ga=(k[E>>2]|0)+-1|0;Ha=h+32|0;Ja=(k[x>>2]|0)+-1|0;Ka=h+40|0;La=(k[f>>2]|0)+-1|0;Ma=(k[z>>2]|0)+-1|0;Na=j+8|0;Oa=(k[A>>2]|0)+-1|0;Pa=j+16|0;Qa=(k[C>>2]|0)+-1|0;Ra=j+24|0;Sa=k[E>>2]|0;Ua=Sa+-1|0;Va=j+32|0;Wa=k[x>>2]|0;Ya=Wa+-1|0;Za=j+40|0;_a=(k[f>>2]|0)+-1|0;$a=(k[z>>2]|0)+-1|0;ab=g+8|0;bb=(k[A>>2]|0)+-1|0;cb=g+16|0;db=(k[C>>2]|0)+-1|0;fb=g+24|0;gb=(k[E>>2]|0)+-1|0;hb=g+32|0;jb=(k[x>>2]|0)+-1|0;kb=g+40|0;lb=(k[f>>2]|0)+-1|0;mb=(k[z>>2]|0)+-1|0;nb=h+8|0;ob=(k[A>>2]|0)+-1|0;pb=h+16|0;qb=(k[C>>2]|0)+-1|0;rb=h+24|0;sb=(k[E>>2]|0)+-1|0;tb=h+32|0;ub=(k[x>>2]|0)+-1|0;vb=h+40|0;wb=(k[f>>2]|0)+-1|0;xb=(k[z>>2]|0)+-1|0;yb=j+8|0;Bb=(k[A>>2]|0)+-1|0;Cb=j+16|0;Db=(k[C>>2]|0)+-1|0;Eb=j+24|0;Fb=k[E>>2]|0;Gb=Fb+-1|0;Hb=j+32|0;Ib=k[x>>2]|0;Jb=Ib+-1|0;Kb=j+40|0;Lb=(k[f>>2]|0)+-1|0;Mb=(k[z>>2]|0)+-1|0;Nb=g+8|0;Ob=(k[A>>2]|0)+-1|0;Pb=g+16|0;Sb=(k[C>>2]|0)+-1|0;Tb=g+24|0;Ub=(k[E>>2]|0)+-1|0;Vb=g+32|0;Wb=(k[x>>2]|0)+-1|0;Xb=g+40|0;Yb=(k[f>>2]|0)+-1|0;Zb=(k[z>>2]|0)+-1|0;_b=h+8|0;$b=(k[A>>2]|0)+-1|0;ac=h+16|0;bc=(k[C>>2]|0)+-1|0;cc=h+24|0;dc=(k[E>>2]|0)+-1|0;ec=h+32|0;fc=(k[x>>2]|0)+-1|0;gc=h+40|0;hc=(k[f>>2]|0)+-1|0;ic=(k[z>>2]|0)+-1|0;jc=j+8|0;kc=(k[A>>2]|0)+-1|0;lc=j+16|0;mc=(k[C>>2]|0)+-1|0;nc=j+24|0;oc=k[E>>2]|0;pc=oc+-1|0;qc=j+32|0;rc=k[x>>2]|0;sc=rc+-1|0;tc=j+40|0;uc=(k[f>>2]|0)+-1|0;vc=(k[z>>2]|0)+-1|0;wc=g+8|0;xc=(k[A>>2]|0)+-1|0;yc=g+16|0;zc=(k[C>>2]|0)+-1|0;Ac=g+24|0;Bc=(k[E>>2]|0)+-1|0;Cc=g+32|0;Dc=(k[x>>2]|0)+-1|0;Ec=g+40|0;Fc=(k[f>>2]|0)+-1|0;Gc=(k[z>>2]|0)+-1|0;Hc=h+8|0;Ic=(k[A>>2]|0)+-1|0;Jc=h+16|0;Kc=(k[C>>2]|0)+-1|0;Lc=h+24|0;Mc=(k[E>>2]|0)+-1|0;Nc=h+32|0;Oc=(k[x>>2]|0)+-1|0;Pc=h+40|0;Qc=(k[f>>2]|0)+-1|0;Rc=(k[z>>2]|0)+-1|0;Sc=j+8|0;Tc=(k[A>>2]|0)+-1|0;Uc=j+16|0;Vc=(k[C>>2]|0)+-1|0;Wc=j+24|0;Xc=k[E>>2]|0;Yc=Xc+-1|0;Zc=j+32|0;_c=k[x>>2]|0;$c=_c+-1|0;ad=j+40|0;bd=(k[f>>2]|0)+-1|0;cd=(k[z>>2]|0)+-1|0;dd=g+8|0;ed=(k[A>>2]|0)+-1|0;fd=g+16|0;gd=(k[C>>2]|0)+-1|0;hd=g+24|0;id=(k[E>>2]|0)+-1|0;jd=g+32|0;kd=(k[x>>2]|0)+-1|0;ld=g+40|0;md=(k[f>>2]|0)+-1|0;nd=(k[z>>2]|0)+-1|0;od=h+8|0;pd=(k[A>>2]|0)+-1|0;qd=h+16|0;rd=(k[C>>2]|0)+-1|0;sd=h+24|0;td=(k[E>>2]|0)+-1|0;ud=h+32|0;vd=(k[x>>2]|0)+-1|0;wd=h+40|0;xd=(k[f>>2]|0)+-1|0;yd=(k[z>>2]|0)+-1|0;zd=j+8|0;Ad=(k[A>>2]|0)+-1|0;Bd=j+16|0;Cd=(k[C>>2]|0)+-1|0;Dd=j+24|0;Ed=k[E>>2]|0;Fd=Ed+-1|0;Gd=j+32|0;Hd=k[x>>2]|0;Id=Hd+-1|0;Jd=j+40|0;Kd=F;Ld=D;Md=0;a:while(1){Nd=zY(k[(k[n>>2]|0)+(Md<<2)>>2]|0,1)|0;switch(Nd|0){case 36:{if(!(Jka(c,126035)|0)){Od=Kd;Pd=Ld}else{Qd=(Jka(c,126035)|0)+(y<<3)|0;p[g>>3]=+p[Qd>>3];Qd=(Jka(c,126035)|0)+(I<<3)|0;p[J>>3]=+p[Qd>>3];Qd=(Jka(c,126035)|0)+(K<<3)|0;p[L>>3]=+p[Qd>>3];Qd=(Jka(c,126035)|0)+(M<<3)|0;p[N>>3]=+p[Qd>>3];Qd=(Jka(c,126035)|0)+(O<<3)|0;p[P>>3]=+p[Qd>>3];Qd=(Jka(c,126035)|0)+(R<<3)|0;p[S>>3]=+p[Qd>>3];Qd=(ma(T,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[h>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(U,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[V>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(W,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[X>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Y,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Z>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(O,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[_>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(R,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[$>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(T,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[j>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(U,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[aa>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(W,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[ba>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Y,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[ca>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(ea,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[fa>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(ha,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[ia>>3]=+p[Qd>>3]/+p[l>>3];Qd=k[w>>2]|0;Rd=Qqa(32)|0;B=0;Ta(31,Rd|0,36,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Td=Rd;Ud=13;break a}mC(Qd,Rd)|0;Od=ga;Pd=da}break}case 674:{if(!(Jka(c,135923)|0)){Od=Kd;Pd=Ld}else{Rd=(Jka(c,135923)|0)+(ja<<3)|0;p[g>>3]=+p[Rd>>3];Rd=(Jka(c,135923)|0)+(ka<<3)|0;p[la>>3]=+p[Rd>>3];Rd=(Jka(c,135923)|0)+(na<<3)|0;p[oa>>3]=+p[Rd>>3];Rd=(Jka(c,135923)|0)+(pa<<3)|0;p[qa>>3]=+p[Rd>>3];Rd=(Jka(c,135923)|0)+(ra<<3)|0;p[sa>>3]=+p[Rd>>3];Rd=(Jka(c,135923)|0)+(ta<<3)|0;p[xa>>3]=+p[Rd>>3];Rd=(ma(za,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[h>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Aa,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[Ba>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Ca,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Da>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Ea,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[Fa>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Ga,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Ha>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Ja,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[Ka>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(La,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[j>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Ma,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Na>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Oa,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Pa>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Qa,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Ra>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Ua,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Va>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Ya,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Za>>3]=+p[Rd>>3]/+p[l>>3];Rd=k[w>>2]|0;Qd=Qqa(32)|0;B=0;Ta(31,Qd|0,674,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Vd=Qd;Ud=17;break a}mC(Rd,Qd)|0;Od=Wa;Pd=Sa}break}case 677:{if(!(Jka(c,135944)|0)){Od=Kd;Pd=Ld}else{Qd=(Jka(c,135944)|0)+(_a<<3)|0;p[g>>3]=+p[Qd>>3];Qd=(Jka(c,135944)|0)+($a<<3)|0;p[ab>>3]=+p[Qd>>3];Qd=(Jka(c,135944)|0)+(bb<<3)|0;p[cb>>3]=+p[Qd>>3];Qd=(Jka(c,135944)|0)+(db<<3)|0;p[fb>>3]=+p[Qd>>3];Qd=(Jka(c,135944)|0)+(gb<<3)|0;p[hb>>3]=+p[Qd>>3];Qd=(Jka(c,135944)|0)+(jb<<3)|0;p[kb>>3]=+p[Qd>>3];Qd=(ma(lb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[h>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(mb,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[nb>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(ob,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[pb>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(qb,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[rb>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(sb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[tb>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(ub,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[vb>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(wb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[j>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(xb,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[yb>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Bb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Cb>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Db,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Eb>>3]=+p[Qd>>3]/+p[l>>3];Qd=(ma(Gb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Hb>>3]=+p[Rd>>3]/+p[l>>3];Rd=(ma(Jb,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Kb>>3]=+p[Qd>>3]/+p[l>>3];Qd=k[w>>2]|0;Rd=Qqa(32)|0;B=0;Ta(31,Rd|0,677,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Wd=Rd;Ud=21;break a}mC(Qd,Rd)|0;Od=Ib;Pd=Fb}break}case 105:{if(!(Jka(c,135172)|0)){Od=Kd;Pd=Ld}else{Rd=(Jka(c,135172)|0)+(Lb<<3)|0;p[g>>3]=+p[Rd>>3];Rd=(Jka(c,135172)|0)+(Mb<<3)|0;p[Nb>>3]=+p[Rd>>3];Rd=(Jka(c,135172)|0)+(Ob<<3)|0;p[Pb>>3]=+p[Rd>>3];Rd=(Jka(c,135172)|0)+(Sb<<3)|0;p[Tb>>3]=+p[Rd>>3];Rd=(Jka(c,135172)|0)+(Ub<<3)|0;p[Vb>>3]=+p[Rd>>3];Rd=(Jka(c,135172)|0)+(Wb<<3)|0;p[Xb>>3]=+p[Rd>>3];Rd=(ma(Yb,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[h>>3]=+p[Qd>>3];Qd=(ma(Zb,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[_b>>3]=+p[Rd>>3];Rd=(ma($b,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[ac>>3]=+p[Qd>>3];Qd=(ma(bc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[cc>>3]=+p[Rd>>3];Rd=(ma(dc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[ec>>3]=+p[Qd>>3];Qd=(ma(fc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[gc>>3]=+p[Rd>>3];Rd=(ma(hc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[j>>3]=+p[Qd>>3];Qd=(ma(ic,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[jc>>3]=+p[Rd>>3];Rd=(ma(kc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[lc>>3]=+p[Qd>>3];Qd=(ma(mc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[nc>>3]=+p[Rd>>3];Rd=(ma(pc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[qc>>3]=+p[Qd>>3];Qd=(ma(sc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[tc>>3]=+p[Rd>>3];Rd=k[w>>2]|0;Qd=Qqa(32)|0;B=0;Ta(31,Qd|0,105,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Xd=Qd;Ud=25;break a}mC(Rd,Qd)|0;Od=rc;Pd=oc}break}case 215:{if(!(Jka(c,134991)|0)){Od=Kd;Pd=Ld}else{Qd=(Jka(c,134991)|0)+(uc<<3)|0;p[g>>3]=+p[Qd>>3];Qd=(Jka(c,134991)|0)+(vc<<3)|0;p[wc>>3]=+p[Qd>>3];Qd=(Jka(c,134991)|0)+(xc<<3)|0;p[yc>>3]=+p[Qd>>3];Qd=(Jka(c,134991)|0)+(zc<<3)|0;p[Ac>>3]=+p[Qd>>3];Qd=(Jka(c,134991)|0)+(Bc<<3)|0;p[Cc>>3]=+p[Qd>>3];Qd=(Jka(c,134991)|0)+(Dc<<3)|0;p[Ec>>3]=+p[Qd>>3];Qd=(ma(Fc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[h>>3]=+p[Rd>>3];Rd=(ma(Gc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Hc>>3]=+p[Qd>>3];Qd=(ma(Ic,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[Jc>>3]=+p[Rd>>3];Rd=(ma(Kc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Lc>>3]=+p[Qd>>3];Qd=(ma(Mc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[Nc>>3]=+p[Rd>>3];Rd=(ma(Oc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[Pc>>3]=+p[Qd>>3];Qd=(ma(Qc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[j>>3]=+p[Rd>>3];Rd=(ma(Rc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Sc>>3]=+p[Qd>>3];Qd=(ma(Tc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Uc>>3]=+p[Rd>>3];Rd=(ma(Vc,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Wc>>3]=+p[Qd>>3];Qd=(ma(Yc,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Zc>>3]=+p[Rd>>3];Rd=(ma($c,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[ad>>3]=+p[Qd>>3];Qd=k[w>>2]|0;Rd=Qqa(32)|0;B=0;Ta(31,Rd|0,214,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Yd=Rd;Ud=29;break a}mC(Qd,Rd)|0;Od=_c;Pd=Xc}break}case 227:{if(!(Jka(c,126277)|0)){Od=Kd;Pd=Ld}else{Rd=(Jka(c,126277)|0)+(bd<<3)|0;p[g>>3]=+p[Rd>>3];Rd=(Jka(c,126277)|0)+(cd<<3)|0;p[dd>>3]=+p[Rd>>3];Rd=(Jka(c,126277)|0)+(ed<<3)|0;p[fd>>3]=+p[Rd>>3];Rd=(Jka(c,126277)|0)+(gd<<3)|0;p[hd>>3]=+p[Rd>>3];Rd=(Jka(c,126277)|0)+(id<<3)|0;p[jd>>3]=+p[Rd>>3];Rd=(Jka(c,126277)|0)+(kd<<3)|0;p[ld>>3]=+p[Rd>>3];Rd=(ma(md,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[h>>3]=+p[Qd>>3];Qd=(ma(nd,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[od>>3]=+p[Rd>>3];Rd=(ma(pd,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[qd>>3]=+p[Qd>>3];Qd=(ma(rd,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[sd>>3]=+p[Rd>>3];Rd=(ma(td,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113372)|0)+(Rd<<3)|0;p[ud>>3]=+p[Qd>>3];Qd=(ma(vd,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113372)|0)+(Qd<<3)|0;p[wd>>3]=+p[Rd>>3];Rd=(ma(xd,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[j>>3]=+p[Qd>>3];Qd=(ma(yd,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[zd>>3]=+p[Rd>>3];Rd=(ma(Ad,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Bd>>3]=+p[Qd>>3];Qd=(ma(Cd,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Dd>>3]=+p[Rd>>3];Rd=(ma(Fd,k[o>>2]|0)|0)+Md|0;Qd=(Jka(c,113400)|0)+(Rd<<3)|0;p[Gd>>3]=+p[Qd>>3];Qd=(ma(Id,k[o>>2]|0)|0)+Md|0;Rd=(Jka(c,113400)|0)+(Qd<<3)|0;p[Jd>>3]=+p[Rd>>3];Rd=k[w>>2]|0;Qd=Qqa(32)|0;B=0;Ta(31,Qd|0,225,626,g|0,h|0,j|0,Md+1|0);Sd=B;B=0;if(Sd&1){Zd=Qd;Ud=33;break a}mC(Rd,Qd)|0;Od=Hd;Pd=Ed}break}default:{_d=Nd;Ud=34;break a}}Md=Md+1|0;Nd=k[o>>2]|0;if((Md|0)>=(Nd|0)){$d=Od;ae=Pd;be=Nd;Ud=8;break}else{Kd=Od;Ld=Pd}}if((Ud|0)==8){Ld=k[n>>2]|0;if((be|0)>0){ce=Ld;de=be;ee=0}else{fe=Ld;ge=ae;he=$d;break}while(1){Ld=ce+(ee<<2)|0;Kd=k[Ld>>2]|0;if(!Kd)ie=de;else{Tqa(Kd);ie=k[o>>2]|0}k[Ld>>2]=0;ee=ee+1|0;Ld=k[n>>2]|0;if((ee|0)>=(ie|0)){fe=Ld;ge=ae;he=$d;break}else{ce=Ld;de=ie}}}else if((Ud|0)==13){Ld=Rb()|0;Kd=Q;Sqa(Td);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==17){Ld=Rb()|0;Kd=Q;Sqa(Vd);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==21){Ld=Rb()|0;Kd=Q;Sqa(Wd);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==25){Ld=Rb()|0;Kd=Q;Sqa(Xd);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==29){Ld=Rb()|0;Kd=Q;Sqa(Yd);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==33){Ld=Rb()|0;Kd=Q;Sqa(Zd);je=Kd;ke=Ld;Qb(ke|0)}else if((Ud|0)==34){Ld=s+56|0;Kd=s+4|0;k[s>>2]=27524;k[Ld>>2]=27544;B=0;wa(508,s+56|0,Kd|0);Md=B;B=0;if(Md&1){Md=Rb()|0;le=Q;me=Md;vva(Ld);Qb(me|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ld>>2]=27488;B=0;va(448,Kd|0);Md=B;B=0;do if(Md&1){Ed=Rb()|0;ne=Q;oe=Ed}else{k[Kd>>2]=27560;Ed=s+36|0;k[Ed>>2]=0;k[Ed+4>>2]=0;k[Ed+8>>2]=0;k[Ed+12>>2]=0;k[s+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Kd|0,e|0);Hd=B;B=0;if(Hd&1){Hd=Rb()|0;w=Q;Yua(e);Yua(Ed);Ava(Kd);ne=w;oe=Hd;break}Yua(e);B=0;Hd=Ia(40,s|0,125582,8)|0;w=B;B=0;b:do if((((!(w&1)?(B=0,Jd=ya(427,_d|0)|0,Id=B,B=0,!(Id&1)):0)?(Id=Lta(Jd)|0,B=0,Gd=Ia(40,Hd|0,Jd|0,Id|0)|0,Id=B,B=0,!(Id&1)):0)?(B=0,Id=Ia(40,Gd|0,127493,20)|0,Gd=B,B=0,!(Gd&1)):0)?(B=0,Xa(239,Id|0,0)|0,Id=B,B=0,!(Id&1)):0){Id=Ab(20)|0;B=0;eb(502,t|0,74107,73);Gd=B;B=0;do if(!(Gd&1)){B=0;eb(502,u|0,144327,22);Jd=B;B=0;if(Jd&1){Jd=Rb()|0;Fd=Q;Yua(t);pe=Fd;qe=Jd;break}B=0;wa(510,v|0,Kd|0);Jd=B;B=0;if(Jd&1){Jd=Rb()|0;re=Q;se=Jd;te=1}else{B=0;ua(163,Id|0,t|0,u|0,1476,v|0);Jd=B;B=0;if(Jd&1)ue=1;else{B=0;eb(503,Id|0,1240,229);B=0;ue=0}Jd=Rb()|0;Fd=Q;Yua(v);re=Fd;se=Jd;te=ue}Yua(u);Yua(t);if(te){pe=re;qe=se}else{ve=re;we=se;break b}}else{Jd=Rb()|0;pe=Q;qe=Jd}while(0);zb(Id|0);ve=pe;we=qe}else Ud=52;while(0);if((Ud|0)==52){Hd=Rb()|0;ve=Q;we=Hd}k[s>>2]=27468;k[Ld>>2]=27488;k[Kd>>2]=27560;Yua(Ed);Ava(Kd);vva(Ld);je=ve;ke=we;Qb(ke|0)}while(0);le=ne;me=oe;vva(Ld);Qb(me|0)}}else{fe=k[n>>2]|0;ge=D;he=F}while(0);if(fe)Tqa(fe);k[n>>2]=0;G=ge;H=he}do if(Jka(c,129145)|0){he=k[a+16>>2]|0;ge=Qqa(12)|0;B=0;n=Xa(246,c|0,129145)|0;fe=B;B=0;if(!(fe&1)?(B=0,eb(508,ge|0,533,~~+p[n+(b<<3)>>3]|0),n=B,B=0,!(n&1)):0){mC(he,ge)|0;break}he=Rb()|0;n=Q;Sqa(ge);je=n;ke=he;Qb(ke|0)}while(0);if(!(i[m>>0]|0)){r=d;return}if(!(Jka(c,113331)|0)){r=d;return}m=Qqa(20)|0;B=0;wa(516,m|0,179);b=B;B=0;if(b&1){b=Rb()|0;he=Q;Sqa(m);je=he;ke=b;Qb(ke|0)}b=k[q>>2]|0;c:do if((b|0)>0){he=(k[f>>2]|0)+-1|0;n=(k[z>>2]|0)+-1|0;ge=g+8|0;fe=(k[A>>2]|0)+-1|0;F=g+16|0;D=(k[C>>2]|0)+-1|0;me=g+24|0;oe=G+-1|0;ne=g+32|0;le=H+-1|0;we=g+40|0;ve=b;s=0;while(1){Ud=(ma(he,ve)|0)+s|0;qe=(Jka(c,113331)|0)+(Ud<<3)|0;p[g>>3]=+p[qe>>3];qe=(ma(n,k[q>>2]|0)|0)+s|0;Ud=(Jka(c,113331)|0)+(qe<<3)|0;p[ge>>3]=+p[Ud>>3];Ud=(ma(fe,k[q>>2]|0)|0)+s|0;qe=(Jka(c,113331)|0)+(Ud<<3)|0;p[F>>3]=+p[qe>>3];qe=(ma(D,k[q>>2]|0)|0)+s|0;Ud=(Jka(c,113331)|0)+(qe<<3)|0;p[me>>3]=+p[Ud>>3];Ud=(ma(oe,k[q>>2]|0)|0)+s|0;qe=(Jka(c,113331)|0)+(Ud<<3)|0;p[ne>>3]=+p[qe>>3];qe=(ma(le,k[q>>2]|0)|0)+s|0;Ud=(Jka(c,113331)|0)+(qe<<3)|0;p[we>>3]=+p[Ud>>3];Ud=Qqa(16)|0;B=0;ib(285,Ud|0,179,g|0,738);qe=B;B=0;if(qe&1){xe=Ud;break}qe=(Jka(c,113303)|0)+(s<<3)|0;XH(m,Ud,~~+p[qe>>3]);s=s+1|0;ve=k[q>>2]|0;if((s|0)>=(ve|0))break c}ve=Rb()|0;s=Q;Sqa(xe);je=s;ke=ve;Qb(ke|0)}while(0);mC(k[a+16>>2]|0,m)|0;r=d;return}function kA(a,b,c){a=a|0;b=b|0;c=c|0;jA(a+-4|0,b,c);return}function lA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;d=r;r=r+368|0;e=d+356|0;f=d+352|0;g=d+216|0;h=d+200|0;i=d+48|0;j=d+36|0;l=d+64|0;m=d+24|0;n=d+12|0;o=d;k[f>>2]=0;q=XB(a,k[a+44>>2]|0)|0;rp(a,f,534,943);s=Rqa(q>>>0>536870911?-1:q<<3)|0;a:do if((q|0)>0){u=k[f>>2]|0;v=0;while(1){w=+p[b+(k[u+(v<<2)>>2]<<3)>>3];p[s+(v<<3)>>3]=w;x=+$(+w);p[t>>3]=x;y=k[t>>2]|0;z=k[t+4>>2]|0;if(z>>>0>2146435072|(z|0)==2146435072&y>>>0>0){A=6;break}v=v+1|0;if((y|0)==0&(z|0)==2146435072){A=30;break}if((v|0)>=(q|0))break a}if((A|0)==6){v=g+56|0;u=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,u|0);z=B;B=0;if(z&1){z=Rb()|0;C=Q;D=z;vva(v);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,u|0);z=B;B=0;do if(z&1){y=Rb()|0;E=Q;F=y}else{k[u>>2]=27560;y=g+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);Yua(y);Ava(u);E=H;F=G;break}Yua(e);B=0;G=Ia(40,g|0,135564,28)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,G|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,74107,73);J=B;B=0;do if(!(J&1)){B=0;eb(502,i|0,74717,29);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(h);M=K;N=L;break}B=0;wa(510,j|0,u|0);L=B;B=0;if(L&1){L=Rb()|0;O=Q;P=L;R=1}else{B=0;ua(163,I|0,h|0,i|0,1518,j|0);L=B;B=0;if(L&1)S=1;else{B=0;eb(503,I|0,1240,229);B=0;S=0}L=Rb()|0;K=Q;Yua(j);O=K;P=L;R=S}Yua(i);Yua(h);if(R){M=P;N=O}else{T=P;U=O;break b}}else{L=Rb()|0;M=L;N=Q}while(0);zb(I|0);T=M;U=N}else A=21;while(0);if((A|0)==21){G=Rb()|0;T=G;U=Q}k[g>>2]=27468;k[v>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(v);V=U;W=T;Qb(W|0)}while(0);C=E;D=F;vva(v);Qb(D|0)}else if((A|0)==30){u=l+56|0;z=l+4|0;k[l>>2]=27524;k[u>>2]=27544;B=0;wa(508,l+56|0,z|0);G=B;B=0;if(G&1){G=Rb()|0;X=Q;Y=G;vva(u);Qb(Y|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[u>>2]=27488;B=0;va(448,z|0);G=B;B=0;do if(G&1){H=Rb()|0;Z=Q;_=H}else{k[z>>2]=27560;H=l+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,z|0,e|0);J=B;B=0;if(J&1){J=Rb()|0;L=Q;Yua(e);Yua(H);Ava(z);Z=L;_=J;break}Yua(e);B=0;J=Ia(40,l|0,135593,28)|0;L=B;B=0;c:do if(!(L&1)?(B=0,Xa(239,J|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,m|0,74107,73);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,n|0,74717,29);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(m);da=ba;ea=ca;break}B=0;wa(510,o|0,z|0);ca=B;B=0;if(ca&1){ca=Rb()|0;fa=1;ga=Q;ha=ca}else{B=0;ua(163,K|0,m|0,n|0,1519,o|0);ca=B;B=0;if(ca&1)ia=1;else{B=0;eb(503,K|0,1240,229);B=0;ia=0}ca=Rb()|0;ba=Q;Yua(o);fa=ia;ga=ba;ha=ca}Yua(n);Yua(m);if(fa){da=ha;ea=ga}else{ja=ga;ka=ha;break c}}else{ca=Rb()|0;da=ca;ea=Q}while(0);zb(K|0);ja=ea;ka=da}else A=45;while(0);if((A|0)==45){J=Rb()|0;ja=Q;ka=J}k[l>>2]=27468;k[u>>2]=27488;k[z>>2]=27560;Yua(H);Ava(z);vva(u);V=ja;W=ka;Qb(W|0)}while(0);X=Z;Y=_;vva(u);Qb(Y|0)}}while(0);Y=k[a+16>>2]|0;a=Qqa(16)|0;B=0;ib(285,a|0,c|0,s|0,738);c=B;B=0;if(c&1){c=Rb()|0;_=Q;Sqa(a);V=_;W=c;Qb(W|0)}mC(Y,a)|0;Tqa(s);s=k[f>>2]|0;if(!s){r=d;return}Tqa(s);r=d;return}function mA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;d=r;r=r+416|0;e=d+404|0;f=d;g=d+400|0;h=d+264|0;i=d+248|0;j=d+96|0;l=d+84|0;m=d+112|0;n=d+72|0;o=d+60|0;q=d+48|0;k[g>>2]=0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=d;return}rp(a,g,534,943);s=k[g>>2]|0;u=+p[b+(k[s>>2]<<3)>>3];p[f>>3]=u;p[f+24>>3]=u;v=+$(+u);p[t>>3]=v;w=k[t>>2]|0;x=k[t+4>>2]|0;do if(!(x>>>0>2146435072|(x|0)==2146435072&w>>>0>0)){if(!((w|0)==0&(x|0)==2146435072)){v=+p[b+(k[s+4>>2]<<3)>>3];p[f+8>>3]=v;p[f+32>>3]=v;u=+$(+v);p[t>>3]=u;y=k[t>>2]|0;z=k[t+4>>2]|0;if(z>>>0>2146435072|(z|0)==2146435072&y>>>0>0)break;if(!((y|0)==0&(z|0)==2146435072)){u=+p[b+(k[s+8>>2]<<3)>>3];p[f+16>>3]=u;p[f+40>>3]=u;v=+$(+u);p[t>>3]=v;z=k[t>>2]|0;y=k[t+4>>2]|0;if(y>>>0>2146435072|(y|0)==2146435072&z>>>0>0)break;if(!((z|0)==0&(y|0)==2146435072)){y=a;while(1){z=k[y+16>>2]|0;A=Qqa(16)|0;B=0;ib(285,A|0,c|0,f|0,738);C=B;B=0;if(C&1){D=A;E=53;break}mC(z,A)|0;if(Hc[k[(k[y>>2]|0)+252>>2]&511](y)|0)break;y=k[(k[y+72>>2]|0)+4>>2]|0}if((E|0)==53){y=Rb()|0;A=Q;Sqa(D);F=A;G=y;Qb(G|0)}y=k[g>>2]|0;if(y)Tqa(y);k[g>>2]=0;r=d;return}}}y=m+56|0;A=m+4|0;k[m>>2]=27524;k[y>>2]=27544;B=0;wa(508,m+56|0,A|0);z=B;B=0;if(z&1){z=Rb()|0;H=Q;I=z;vva(y);Qb(I|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[y>>2]=27488;B=0;va(448,A|0);z=B;B=0;do if(z&1){C=Rb()|0;J=Q;K=C}else{k[A>>2]=27560;C=m+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,A|0,e|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(e);Yua(C);Ava(A);J=M;K=L;break}Yua(e);B=0;L=Ia(40,m|0,135593,28)|0;M=B;B=0;a:do if(!(M&1)?(B=0,Xa(239,L|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,n|0,74107,73);O=B;B=0;do if(!(O&1)){B=0;eb(502,o|0,74747,38);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(n);S=P;T=R;break}B=0;wa(510,q|0,A|0);R=B;B=0;if(R&1){R=Rb()|0;U=1;V=Q;W=R}else{B=0;ua(163,N|0,n|0,o|0,1550,q|0);R=B;B=0;if(R&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}R=Rb()|0;P=Q;Yua(q);U=X;V=P;W=R}Yua(o);Yua(n);if(U){S=W;T=V}else{Y=V;Z=W;break a}}else{R=Rb()|0;S=R;T=Q}while(0);zb(N|0);Y=T;Z=S}else E=43;while(0);if((E|0)==43){L=Rb()|0;Y=Q;Z=L}k[m>>2]=27468;k[y>>2]=27488;k[A>>2]=27560;Yua(C);Ava(A);vva(y);F=Y;G=Z;Qb(G|0)}while(0);H=J;I=K;vva(y);Qb(I|0)}while(0);I=h+56|0;K=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,K|0);J=B;B=0;if(J&1){J=Rb()|0;_=Q;aa=J;vva(I);Qb(aa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,K|0);J=B;B=0;do if(J&1){H=Rb()|0;ba=Q;ca=H}else{k[K>>2]=27560;H=h+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,K|0,e|0);Z=B;B=0;if(Z&1){Z=Rb()|0;Y=Q;Yua(e);Yua(H);Ava(K);ba=Y;ca=Z;break}Yua(e);B=0;Z=Ia(40,h|0,135564,28)|0;Y=B;B=0;b:do if(!(Y&1)?(B=0,Xa(239,Z|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,i|0,74107,73);S=B;B=0;do if(!(S&1)){B=0;eb(502,j|0,74747,38);T=B;B=0;if(T&1){T=Rb()|0;W=Q;Yua(i);da=T;ea=W;break}B=0;wa(510,l|0,K|0);W=B;B=0;if(W&1){W=Rb()|0;fa=Q;ga=W;ha=1}else{B=0;ua(163,m|0,i|0,j|0,1549,l|0);W=B;B=0;if(W&1)ia=1;else{B=0;eb(503,m|0,1240,229);B=0;ia=0}W=Rb()|0;T=Q;Yua(l);fa=T;ga=W;ha=ia}Yua(j);Yua(i);if(ha){da=ga;ea=fa}else{ja=ga;ka=fa;break b}}else{W=Rb()|0;da=W;ea=Q}while(0);zb(m|0);ja=da;ka=ea}else E=19;while(0);if((E|0)==19){Z=Rb()|0;ja=Z;ka=Q}k[h>>2]=27468;k[I>>2]=27488;k[K>>2]=27560;Yua(H);Ava(K);vva(I);F=ka;G=ja;Qb(G|0)}while(0);_=ba;aa=ca;vva(I);Qb(aa|0)}function nA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0;e=r;r=r+944|0;f=e+920|0;g=e+892|0;h=e;i=e+744|0;j=e+908|0;l=e+896|0;m=e+880|0;n=e+608|0;o=e+596|0;q=e+584|0;s=e+296|0;u=e+448|0;v=e+144|0;w=e+132|0;x=e+120|0;y=e+312|0;z=e+108|0;A=e+96|0;C=e+84|0;D=e+160|0;E=e+72|0;F=e+60|0;G=e+48|0;k[g>>2]=0;if(!(Tp(a,c)|0)){r=e;return}switch(d|0){case 628:{H=a+24|0;I=b+((Co(k[k[H>>2]>>2]|0)|0)<<3)|0;p[h>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+4>>2]|0)|0)<<3)|0;p[h+8>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+8>>2]|0)|0)<<3)|0;p[h+16>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+12>>2]|0)|0)<<3)|0;p[h+24>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+16>>2]|0)|0)<<3)|0;p[h+32>>3]=+p[I>>3];I=b+((Co(k[(k[H>>2]|0)+20>>2]|0)|0)<<3)|0;p[h+40>>3]=+p[I>>3];I=k[a+16>>2]|0;H=Qqa(16)|0;B=0;ib(285,H|0,c|0,h|0,738);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Sqa(H);L=K;M=J;Qb(M|0)}else{mC(I,H)|0;r=e;return}break}case 629:{H=a+24|0;I=b+((Bo(k[k[H>>2]>>2]|0)|0)<<3)|0;p[h>>3]=+p[I>>3];I=b+((Bo(k[(k[H>>2]|0)+4>>2]|0)|0)<<3)|0;p[h+8>>3]=+p[I>>3];I=b+((Bo(k[(k[H>>2]|0)+8>>2]|0)|0)<<3)|0;p[h+16>>3]=+p[I>>3];I=b+((Bo(k[(k[H>>2]|0)+12>>2]|0)|0)<<3)|0;p[h+24>>3]=+p[I>>3];I=b+((Bo(k[(k[H>>2]|0)+16>>2]|0)|0)<<3)|0;p[h+32>>3]=+p[I>>3];I=b+((Bo(k[(k[H>>2]|0)+20>>2]|0)|0)<<3)|0;p[h+40>>3]=+p[I>>3];I=k[a+16>>2]|0;H=Qqa(16)|0;B=0;ib(285,H|0,c|0,h|0,738);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Sqa(H);L=K;M=J;Qb(M|0)}else{mC(I,H)|0;r=e;return}break}case 549:{rp(a,g,534,943);H=k[g>>2]|0;N=+p[b+(k[H>>2]<<3)>>3];p[h>>3]=N;O=+$(+N);p[t>>3]=O;I=k[t>>2]|0;J=k[t+4>>2]|0;do if(!(J>>>0>2146435072|(J|0)==2146435072&I>>>0>0)){if(!((I|0)==0&(J|0)==2146435072)){O=+p[b+(k[H+4>>2]<<3)>>3];p[h+8>>3]=O;N=+$(+O);p[t>>3]=N;K=k[t>>2]|0;P=k[t+4>>2]|0;if(P>>>0>2146435072|(P|0)==2146435072&K>>>0>0)break;if(!((K|0)==0&(P|0)==2146435072)){N=+p[b+(k[H+8>>2]<<3)>>3];p[h+16>>3]=N;O=+$(+N);p[t>>3]=O;P=k[t>>2]|0;K=k[t+4>>2]|0;if(K>>>0>2146435072|(K|0)==2146435072&P>>>0>0)break;if(!((P|0)==0&(K|0)==2146435072)){O=+p[b+(k[H+12>>2]<<3)>>3];p[h+24>>3]=O;N=+$(+O);p[t>>3]=N;K=k[t>>2]|0;P=k[t+4>>2]|0;if(P>>>0>2146435072|(P|0)==2146435072&K>>>0>0)break;if(!((K|0)==0&(P|0)==2146435072)){N=+p[b+(k[H+16>>2]<<3)>>3];p[h+32>>3]=N;O=+$(+N);p[t>>3]=O;P=k[t>>2]|0;K=k[t+4>>2]|0;if(K>>>0>2146435072|(K|0)==2146435072&P>>>0>0)break;if(!((P|0)==0&(K|0)==2146435072)){O=+p[b+(k[H+20>>2]<<3)>>3];p[h+40>>3]=O;N=+$(+O);p[t>>3]=N;K=k[t>>2]|0;P=k[t+4>>2]|0;if(P>>>0>2146435072|(P|0)==2146435072&K>>>0>0)break;if(!((K|0)==0&(P|0)==2146435072)){P=k[a+16>>2]|0;K=Qqa(16)|0;B=0;ib(285,K|0,c|0,h|0,738);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Sqa(K);L=S;M=R;Qb(M|0)}mC(P,K)|0;K=k[g>>2]|0;if(K)Tqa(K);k[g>>2]=0;r=e;return}}}}}}K=n+56|0;P=n+4|0;k[n>>2]=27524;k[K>>2]=27544;B=0;wa(508,n+56|0,P|0);R=B;B=0;if(R&1){R=Rb()|0;T=Q;U=R;vva(K);Qb(U|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[K>>2]=27488;B=0;va(448,P|0);R=B;B=0;do if(R&1){S=Rb()|0;V=Q;W=S}else{k[P>>2]=27560;S=n+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,P|0,f|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(f);Yua(S);Ava(P);V=Y;W=X;break}Yua(f);B=0;X=Ia(40,n|0,135593,28)|0;Y=B;B=0;a:do if(!(Y&1)?(B=0,Xa(239,X|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,o|0,74107,73);_=B;B=0;do if(!(_&1)){B=0;eb(502,q|0,74786,21);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(o);ca=ba;da=aa;break}B=0;wa(510,s|0,P|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ea=1;fa=Q;ga=aa}else{B=0;ua(163,Z|0,o|0,q|0,1604,s|0);aa=B;B=0;if(aa&1)ha=1;else{B=0;eb(503,Z|0,1240,229);B=0;ha=0}aa=Rb()|0;ba=Q;Yua(s);ea=ha;fa=ba;ga=aa}Yua(q);Yua(o);if(ea){ca=fa;da=ga}else{ia=fa;ja=ga;break a}}else{aa=Rb()|0;ca=Q;da=aa}while(0);zb(Z|0);ia=ca;ja=da}else ka=51;while(0);if((ka|0)==51){X=Rb()|0;ia=Q;ja=X}k[n>>2]=27468;k[K>>2]=27488;k[P>>2]=27560;Yua(S);Ava(P);vva(K);L=ia;M=ja;Qb(M|0)}while(0);T=V;U=W;vva(K);Qb(U|0)}while(0);U=i+56|0;W=i+4|0;k[i>>2]=27524;k[U>>2]=27544;B=0;wa(508,i+56|0,W|0);V=B;B=0;if(V&1){V=Rb()|0;la=Q;ma=V;vva(U);Qb(ma|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[U>>2]=27488;B=0;va(448,W|0);V=B;B=0;do if(V&1){T=Rb()|0;na=Q;oa=T}else{k[W>>2]=27560;T=i+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,W|0,f|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ia=Q;Yua(f);Yua(T);Ava(W);na=ia;oa=ja;break}Yua(f);B=0;ja=Ia(40,i|0,135564,28)|0;ia=B;B=0;b:do if(!(ia&1)?(B=0,Xa(239,ja|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,j|0,74107,73);da=B;B=0;do if(!(da&1)){B=0;eb(502,l|0,74786,21);ca=B;B=0;if(ca&1){ca=Rb()|0;ga=Q;Yua(j);pa=ga;qa=ca;break}B=0;wa(510,m|0,W|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ra=Q;sa=ca;ta=1}else{B=0;ua(163,n|0,j|0,l|0,1603,m|0);ca=B;B=0;if(ca&1)xa=1;else{B=0;eb(503,n|0,1240,229);B=0;xa=0}ca=Rb()|0;ga=Q;Yua(m);ra=ga;sa=ca;ta=xa}Yua(l);Yua(j);if(ta){pa=ra;qa=sa}else{za=ra;Aa=sa;break b}}else{ca=Rb()|0;pa=Q;qa=ca}while(0);zb(n|0);za=pa;Aa=qa}else ka=27;while(0);if((ka|0)==27){ja=Rb()|0;za=Q;Aa=ja}k[i>>2]=27468;k[U>>2]=27488;k[W>>2]=27560;Yua(T);Ava(W);vva(U);L=za;M=Aa;Qb(M|0)}while(0);la=na;ma=oa;vva(U);Qb(ma|0);break}case 608:{ma=a+20|0;U=b+((Qn(k[k[ma>>2]>>2]|0)|0)<<3)|0;N=+p[U>>3];p[h>>3]=N;O=+$(+N);p[t>>3]=O;U=k[t>>2]|0;oa=k[t+4>>2]|0;do if(!(oa>>>0>2146435072|(oa|0)==2146435072&U>>>0>0)){if(!((U|0)==0&(oa|0)==2146435072)){na=b+((Qn(k[(k[ma>>2]|0)+4>>2]|0)|0)<<3)|0;O=+p[na>>3];p[h+8>>3]=O;N=+$(+O);p[t>>3]=N;na=k[t>>2]|0;la=k[t+4>>2]|0;if(la>>>0>2146435072|(la|0)==2146435072&na>>>0>0)break;if(!((na|0)==0&(la|0)==2146435072)){la=b+((Qn(k[(k[ma>>2]|0)+8>>2]|0)|0)<<3)|0;N=+p[la>>3];p[h+16>>3]=N;O=+$(+N);p[t>>3]=O;la=k[t>>2]|0;na=k[t+4>>2]|0;if(na>>>0>2146435072|(na|0)==2146435072&la>>>0>0)break;if(!((la|0)==0&(na|0)==2146435072)){na=b+((Qn(k[(k[ma>>2]|0)+12>>2]|0)|0)<<3)|0;O=+p[na>>3];p[h+24>>3]=O;N=+$(+O);p[t>>3]=N;na=k[t>>2]|0;la=k[t+4>>2]|0;if(la>>>0>2146435072|(la|0)==2146435072&na>>>0>0)break;if(!((na|0)==0&(la|0)==2146435072)){la=b+((Qn(k[(k[ma>>2]|0)+16>>2]|0)|0)<<3)|0;N=+p[la>>3];p[h+32>>3]=N;O=+$(+N);p[t>>3]=O;la=k[t>>2]|0;na=k[t+4>>2]|0;if(na>>>0>2146435072|(na|0)==2146435072&la>>>0>0)break;if(!((la|0)==0&(na|0)==2146435072)){na=b+((Qn(k[(k[ma>>2]|0)+20>>2]|0)|0)<<3)|0;O=+p[na>>3];p[h+40>>3]=O;N=+$(+O);p[t>>3]=N;na=k[t>>2]|0;la=k[t+4>>2]|0;if(la>>>0>2146435072|(la|0)==2146435072&na>>>0>0)break;if(!((na|0)==0&(la|0)==2146435072)){la=k[a+16>>2]|0;na=Qqa(16)|0;B=0;ib(285,na|0,c|0,h|0,738);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;za=Q;Sqa(na);L=za;M=Aa;Qb(M|0)}mC(la,na)|0;na=k[g>>2]|0;if(na)Tqa(na);k[g>>2]=0;r=e;return}}}}}}na=y+56|0;la=y+4|0;k[y>>2]=27524;k[na>>2]=27544;B=0;wa(508,y+56|0,la|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Ca=Aa;vva(na);Qb(Ca|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[na>>2]=27488;B=0;va(448,la|0);Aa=B;B=0;do if(Aa&1){za=Rb()|0;Da=Q;Ea=za}else{k[la>>2]=27560;za=y+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[y+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,la|0,f|0);W=B;B=0;if(W&1){W=Rb()|0;i=Q;Yua(f);Yua(za);Ava(la);Da=i;Ea=W;break}Yua(f);B=0;W=Ia(40,y|0,135593,28)|0;i=B;B=0;c:do if(!(i&1)?(B=0,Xa(239,W|0,0)|0,qa=B,B=0,!(qa&1)):0){qa=Ab(20)|0;B=0;eb(502,z|0,74107,73);pa=B;B=0;do if(!(pa&1)){B=0;eb(502,A|0,74786,21);sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(z);Fa=ra;Ga=sa;break}B=0;wa(510,C|0,la|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Ha=1;Ja=Q;Ka=sa}else{B=0;ua(163,qa|0,z|0,A|0,1617,C|0);sa=B;B=0;if(sa&1)La=1;else{B=0;eb(503,qa|0,1240,229);B=0;La=0}sa=Rb()|0;ra=Q;Yua(C);Ha=La;Ja=ra;Ka=sa}Yua(A);Yua(z);if(Ha){Fa=Ja;Ga=Ka}else{Ma=Ja;Na=Ka;break c}}else{sa=Rb()|0;Fa=Q;Ga=sa}while(0);zb(qa|0);Ma=Fa;Na=Ga}else ka=103;while(0);if((ka|0)==103){W=Rb()|0;Ma=Q;Na=W}k[y>>2]=27468;k[na>>2]=27488;k[la>>2]=27560;Yua(za);Ava(la);vva(na);L=Ma;M=Na;Qb(M|0)}while(0);Ba=Da;Ca=Ea;vva(na);Qb(Ca|0)}while(0);Ca=u+56|0;Ea=u+4|0;k[u>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,u+56|0,Ea|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Oa=Q;Pa=Da;vva(Ca);Qb(Pa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Ca>>2]=27488;B=0;va(448,Ea|0);Da=B;B=0;do if(Da&1){Ba=Rb()|0;Qa=Q;Ra=Ba}else{k[Ea>>2]=27560;Ba=u+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[u+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,Ea|0,f|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Ma=Q;Yua(f);Yua(Ba);Ava(Ea);Qa=Ma;Ra=Na;break}Yua(f);B=0;Na=Ia(40,u|0,135564,28)|0;Ma=B;B=0;d:do if(!(Ma&1)?(B=0,Xa(239,Na|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,v|0,74107,73);Ga=B;B=0;do if(!(Ga&1)){B=0;eb(502,w|0,74786,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ka=Q;Yua(v);Sa=Ka;Ta=Fa;break}B=0;wa(510,x|0,Ea|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ua=1;Va=Q;Wa=Fa}else{B=0;ua(163,y|0,v|0,w|0,1616,x|0);Fa=B;B=0;if(Fa&1)Ya=1;else{B=0;eb(503,y|0,1240,229);B=0;Ya=0}Fa=Rb()|0;Ka=Q;Yua(x);Ua=Ya;Va=Ka;Wa=Fa}Yua(w);Yua(v);if(Ua){Sa=Va;Ta=Wa}else{Za=Va;_a=Wa;break d}}else{Fa=Rb()|0;Sa=Q;Ta=Fa}while(0);zb(y|0);Za=Sa;_a=Ta}else ka=79;while(0);if((ka|0)==79){Na=Rb()|0;Za=Q;_a=Na}k[u>>2]=27468;k[Ca>>2]=27488;k[Ea>>2]=27560;Yua(Ba);Ava(Ea);vva(Ca);L=Za;M=_a;Qb(M|0)}while(0);Oa=Qa;Pa=Ra;vva(Ca);Qb(Pa|0);break}default:{Pa=D+56|0;Ca=D+4|0;k[D>>2]=27524;k[Pa>>2]=27544;B=0;wa(508,D+56|0,Ca|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;$a=Q;ab=Ra;vva(Pa);Qb(ab|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[Pa>>2]=27488;B=0;va(448,Ca|0);Ra=B;B=0;do if(Ra&1){Qa=Rb()|0;bb=Q;cb=Qa}else{k[Ca>>2]=27560;Qa=D+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[D+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,Ca|0,f|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;_a=Q;Yua(f);Yua(Qa);Ava(Ca);bb=_a;cb=Oa;break}Yua(f);B=0;Oa=Ia(40,D|0,74808,5)|0;_a=B;B=0;e:do if((((((!(_a&1)?(B=0,Za=Xa(242,Oa|0,d|0)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Ea=Ia(40,Za|0,144166,2)|0,Za=B,B=0,!(Za&1)):0)?(B=0,Za=ya(427,d|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(Za)|0,B=0,Ta=Ia(40,Ea|0,Za|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,Ta|0,74814,21)|0,Ta=B,B=0,!(Ta&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,E|0,74107,73);Ta=B;B=0;do if(!(Ta&1)){B=0;eb(502,F|0,74786,21);Za=B;B=0;if(Za&1){Za=Rb()|0;Ea=Q;Yua(E);db=Ea;fb=Za;break}B=0;wa(510,G|0,Ca|0);Za=B;B=0;if(Za&1){Za=Rb()|0;gb=1;hb=Q;jb=Za}else{B=0;ua(163,u|0,E|0,F|0,1627,G|0);Za=B;B=0;if(Za&1)kb=1;else{B=0;eb(503,u|0,1240,229);B=0;kb=0}Za=Rb()|0;Ea=Q;Yua(G);gb=kb;hb=Ea;jb=Za}Yua(F);Yua(E);if(gb){db=hb;fb=jb}else{lb=hb;mb=jb;break e}}else{Za=Rb()|0;db=Q;fb=Za}while(0);zb(u|0);lb=db;mb=fb}else ka=135;while(0);if((ka|0)==135){Oa=Rb()|0;lb=Q;mb=Oa}k[D>>2]=27468;k[Pa>>2]=27488;k[Ca>>2]=27560;Yua(Qa);Ava(Ca);vva(Pa);L=lb;M=mb;Qb(M|0)}while(0);$a=bb;ab=cb;vva(Pa);Qb(ab|0)}}}function oA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;nA(a+-4|0,b,c,d);return}function pA(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+48|0;c=b;xp(a,c,206);if(!($p(a)|0)){d=0;r=b;return d|0}d=((+p[c+16>>3]<0.0&1)+((+p[c+8>>3]<0.0&1)+(+p[c>>3]<0.0&1))|0)==1;r=b;return d|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24|0;a=b+((Co(k[k[c>>2]>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+4>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+8>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+12>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+16>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}a=b+((Co(k[(k[c>>2]|0)+20>>2]|0)|0)<<3)|0;if(+p[a>>3]<0.0){d=1;return d|0}d=0;return d|0}function rA(a){a=a|0;var b=0,c=0;b=r;r=r+48|0;c=b;xp(a,c,287);r=b;return +p[c>>3]+ +p[c+8>>3]+ +p[c+16>>3]+ +p[c+24>>3]+ +p[c+32>>3]+ +p[c+40>>3]==3.0|0}function sA(a){a=a|0;var b=0,c=0;b=r;r=r+48|0;c=b;xp(a,c,288);r=b;return +p[c>>3]+ +p[c+8>>3]+ +p[c+16>>3]+ +p[c+24>>3]+ +p[c+32>>3]+ +p[c+40>>3]==3.0|0}function tA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0;c=r;r=r+48|0;d=c;xp(a,d,b);do if($p(a)|0){e=+p[d>>3];f=+p[d+8>>3];g=e*f;if(!(g<0.0)?(h=+p[d+16>>3],i=e*h,!(i<0.0)):0){if(!(g*h==0.0)){j=0;break}if(!(f*h+(g+i)<=0.0)){j=0;break}}j=1}else j=0;while(0);r=c;return j|0}function uA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;aC(a,b,c,d);return}function vA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;eC(a,b,c,d);return}function wA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;dC(a,b,c,d);return}function xA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cC(a,b,c,d);return}function yA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;eC(a,b,c,d);return}function zA(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){c=0.0;return +c}nd[k[(k[a>>2]|0)+216>>2]&1023](a,674,673);nd[k[(k[a>>2]|0)+216>>2]&1023](a,677,676);d=AA(a,0,1,2)|0;e=+id[k[(k[d>>2]|0)+284>>2]&63](d,b);b=k[d+28>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);d=a+16|0;sC(k[d>>2]|0,673)|0;sC(k[d>>2]|0,676)|0;c=e;return +c}function AA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+16|0;f=e;g=a+36|0;cO(k[g>>2]|0,f,482);h=Qqa(72)|0;B=0;va(461,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;Sqa(h);Qb(l|0)}i=h+48|0;B=0;va(462,i|0);m=B;B=0;do if(!(m&1)){B=0;n=B;B=0;if(n&1){n=Rb()|0;o=Q;Tq(i);p=o;q=n;break}else{k[h>>2]=30040;k[h+4>>2]=30604;k[h+8>>2]=k[a+8>>2];n=uC(k[a+16>>2]|0,b,c,d)|0;k[h+16>>2]=n;k[h+36>>2]=k[g>>2];k[h+44>>2]=738;Zq(a+48|0,i,b,c,d);n=k[a+28>>2]|0;o=ed[k[(k[n>>2]|0)+32>>2]&511](n,h)|0;k[h+28>>2]=o;o=Gla(k[(k[h+52>>2]|0)+(k[f>>2]<<2)>>2]|0)|0;k[h+20>>2]=o;o=Gla(k[h+56>>2]|0)|0;k[h+24>>2]=o;o=Fla(k[h+64>>2]|0)|0;k[h+32>>2]=o;r=e;return h|0}}else{o=Rb()|0;p=Q;q=o}while(0);Qo(h);j=p;l=q;Sqa(h);Qb(l|0);return 0}function BA(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;var g=0.0,h=0,i=0.0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){g=0.0;return +g}nd[k[(k[a>>2]|0)+216>>2]&1023](a,674,673);nd[k[(k[a>>2]|0)+216>>2]&1023](a,677,676);h=AA(a,0,1,2)|0;i=+Mc[k[(k[h>>2]|0)+288>>2]&7](h,b,c,d,e,f);f=k[h+28>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);if(h)Ec[k[(k[h>>2]|0)+4>>2]&1023](h);h=a+16|0;sC(k[h>>2]|0,673)|0;sC(k[h>>2]|0,676)|0;g=i;return +g}function CA(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;a=0;c=-1.0;while(1){d=(k[31892+(a<<3)>>2]|0)*3|0;e=(k[31892+(a<<3)+4>>2]|0)*3|0;f=+p[b+(d<<3)>>3]-+p[b+(e<<3)>>3];g=+p[b+(d+1<<3)>>3]-+p[b+(e+1<<3)>>3];h=+p[b+(d+2<<3)>>3]-+p[b+(e+2<<3)>>3];i=+aa(+(f*f+g*g+h*h));h=c<0.0|i<c?i:c;a=a+1|0;if((a|0)==9){j=h;break}else c=h}return +j}function DA(a){a=a|0;var b=0;a=Qqa(72)|0;B=0;va(493,a|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function EA(a,b){a=a|0;b=b|0;a=Qqa(72)|0;B=0;eb(511,a|0,b|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function FA(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;a=r;r=r+96|0;f=a;Mz(0,f,c,b,4);b=Qqa(72)|0;B=0;ib(290,b|0,f|0,d|0,e|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(b);Qb(e|0)}else{r=a;return b|0}return 0}function GA(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;a=Qqa(72)|0;B=0;Fa(2,a|0,b|0,+c,+d,e|0,f|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(a);Qb(f|0)}else return a|0;return 0}function HA(a,b){a=a|0;b=b|0;a=Qqa(72)|0;B=0;ua(169,a|0,0,1,2,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function IA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=Qqa(72)|0;B=0;ib(291,a|0,b|0,c|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(a);Qb(d|0)}else return a|0;return 0}function JA(a,b){a=a|0;b=b|0;a=Qqa(72)|0;B=0;ua(169,a|0,3,4,5,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}else return a|0;return 0}function KA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,k[a+44>>2]|0);return}function LA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;YB(a,b,c,d,k[a+44>>2]|0);return}function MA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;YB(a,b,c,d,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function NA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;YB(a,b,c,d,740);return}function OA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0);return}function PA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,738);return}function QA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;YB(a,b,c,d,738);return}function RA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,742);return}function SA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;_B(a,b,c,Hc[k[(k[a>>2]|0)+460>>2]&511](a)|0);return}function UA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=r;r=r+16|0;f=e;g=oC(k[a+16>>2]|0,d)|0;d=a+24|0;a=k[k[d>>2]>>2]|0;h=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;if(!g){a=k[(k[d>>2]|0)+4>>2]|0;Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;a=k[(k[d>>2]|0)+8>>2]|0;Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;a=k[(k[d>>2]|0)+12>>2]|0;Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;a=k[(k[d>>2]|0)+16>>2]|0;Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;a=k[(k[d>>2]|0)+20>>2]|0;Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;i=0;r=e;return i|0}if((h|0)!=(c|0)){h=k[(k[d>>2]|0)+4>>2]|0;if((Hc[k[(k[h>>2]|0)+16>>2]&511](h)|0)!=(c|0)){h=k[(k[d>>2]|0)+8>>2]|0;if((Hc[k[(k[h>>2]|0)+16>>2]&511](h)|0)!=(c|0)){h=k[(k[d>>2]|0)+12>>2]|0;if((Hc[k[(k[h>>2]|0)+16>>2]&511](h)|0)!=(c|0)){h=k[(k[d>>2]|0)+16>>2]|0;if((Hc[k[(k[h>>2]|0)+16>>2]&511](h)|0)!=(c|0)){h=k[(k[d>>2]|0)+20>>2]|0;if((Hc[k[(k[h>>2]|0)+16>>2]&511](h)|0)==(c|0))j=5;else{i=0;r=e;return i|0}}else j=4}else j=3}else j=2}else j=1}else j=0;c=Qqa(72)|0;B=0;va(493,c|0);h=B;B=0;if(h&1){h=Rb()|0;Sqa(c);Qb(h|0)}Fc[k[(k[c>>2]|0)+28>>2]&1023](c,j);nd[k[(k[g>>2]|0)+48>>2]&1023](g,f,c);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);p[b>>3]=+p[f>>3];i=1;r=e;return i|0}function VA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;d=+p[c+48>>3];e=+p[c>>3]-d;f=+p[c+24>>3]-d;d=+p[c+56>>3];g=+p[c+8>>3]-d;h=+p[c+32>>3]-d;d=+p[c+64>>3];i=+p[c+16>>3]-d;j=+p[c+40>>3]-d;d=g*j-i*h;k=i*f-j*e;j=h*e-g*f;f=+aa(+(j*j+(d*d+k*k)));p[b>>3]=-d/f;p[b+8>>3]=-k/f;p[b+16>>3]=-j/f;return}function WA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0;a=r;r=r+48|0;d=a+24|0;e=a;f=+p[c>>3];p[d>>3]=+p[c+24>>3]-f;g=+p[c+8>>3];p[d+8>>3]=+p[c+32>>3]-g;h=+p[c+16>>3];p[d+16>>3]=+p[c+40>>3]-h;p[e>>3]=+p[c+48>>3]-f;p[e+8>>3]=+p[c+56>>3]-g;p[e+16>>3]=+p[c+64>>3]-h;IY(b,d,e);h=+p[b>>3];e=b+8|0;g=+p[e>>3];d=b+16|0;f=+p[d>>3];i=+aa(+(h*h+g*g+f*f));p[b>>3]=h/i;p[e>>3]=g/i;p[d>>3]=f/i;r=a;return}function XA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;d=+p[c+48>>3];e=+p[c>>3]-d;f=+p[c+24>>3]-d;d=+p[c+56>>3];g=+p[c+8>>3]-d;h=+p[c+32>>3]-d;d=+p[c+64>>3];i=+p[c+16>>3]-d;j=+p[c+40>>3]-d;d=g*j-i*h;k=i*f-j*e;j=h*e-g*f;f=+aa(+(j*j+(d*d+k*k)));p[b>>3]=d/f;p[b+8>>3]=k/f;p[b+16>>3]=j/f;return}function YA(a){a=a|0;return XB(a,Hc[k[(k[a>>2]|0)+404>>2]&511](a)|0)|0}function ZA(a){a=a|0;return XB(a,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0)|0}function _A(a){a=a|0;return 625}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0.0,j=0,l=0,m=0;c=r;r=r+144|0;d=c+96|0;e=c+48|0;f=c;g=a+32|0;h=+WJ(k[g>>2]|0,266);i=+WJ(k[g>>2]|0,265)/h;xp(a,d,353);xp(a,e,63);xp(a,f,928);g=a+24|0;a=b+4|0;j=0;do{if((+p[f+(j<<3)>>3]>0.0?+p[e+(j<<3)>>3]<-(i*+p[d+(j<<3)>>3]):0)?(l=Co(k[(k[g>>2]|0)+(j<<2)>>2]|0)|0,(k[b>>2]|0)!=0):0){m=k[k[a>>2]>>2]|0;Jc[k[(k[m>>2]|0)+20>>2]&1](m,l,1.0,0)}j=j+1|0}while((j|0)!=6);r=c;return}function aB(a){a=a|0;return fC(a,k[a+44>>2]|0)|0}function bB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+16|0;f=d+12|0;g=d;cO(k[a+36>>2]|0,e,477);a:do if((c|0)!=0&(k[e>>2]|0)==497)switch(k[a+44>>2]|0){case 752:{kC(k[a+16>>2]|0,f,533);switch(k[f>>2]|0){case 538:case 541:break;default:{k[g>>2]=k[9691];k[g+4>>2]=k[9692];k[g+8>>2]=k[9693];VN(c,b,3,g)}}break a;break}case 741:{h=a+20|0;i=eo(k[(k[h>>2]|0)+24>>2]|0,534,943)|0;j=(eo(k[k[h>>2]>>2]|0,534,943)|0)+(eo(k[(k[h>>2]|0)+4>>2]|0,534,943)|0)+(eo(k[(k[h>>2]|0)+8>>2]|0,534,943)|0)+(eo(k[(k[h>>2]|0)+12>>2]|0,534,943)|0)+(eo(k[(k[h>>2]|0)+16>>2]|0,534,943)|0)+(eo(k[(k[h>>2]|0)+20>>2]|0,534,943)|0)|0;h=Rqa(i>>>0>1073741823?-1:i<<2)|0;if((i|0)>0){l=0;do{k[h+(l<<2)>>2]=l+j;l=l+1|0}while((l|0)!=(i|0))}VN(c,b,i,h);Tqa(h);break a;break}default:break a}while(0);if(!((b|0)!=0&(k[e>>2]|0)==497)){r=d;return}kC(k[a+16>>2]|0,f,533);b:do switch(k[f>>2]|0){case 538:case 541:break;default:{switch(k[a+44>>2]|0){case 752:{k[g>>2]=k[9691];k[g+4>>2]=k[9692];k[g+8>>2]=k[9693];NN(b,3,g);break b;break}case 741:break;default:break b}e=a+20|0;c=eo(k[(k[e>>2]|0)+24>>2]|0,534,943)|0;l=(eo(k[k[e>>2]>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+4>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+8>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+12>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+16>>2]|0,534,943)|0)+(eo(k[(k[e>>2]|0)+20>>2]|0,534,943)|0)|0;e=Rqa(c>>>0>1073741823?-1:c<<2)|0;if((c|0)>0){j=0;do{k[e+(j<<2)>>2]=j+l;j=j+1|0}while((j|0)!=(c|0))}NN(b,c,e);Tqa(e)}}while(0);r=d;return}function cB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;b=r;r=r+448|0;c=b+432|0;d=b+428|0;e=b+424|0;f=b+420|0;g=b+64|0;h=b+56|0;i=b+48|0;j=b;l=b+272|0;m=b+408|0;n=b+256|0;o=b+108|0;q=b+120|0;s=b+96|0;t=b+84|0;u=b+72|0;k[f>>2]=0;v=a+16|0;kC(k[v>>2]|0,d,533);if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}switch(k[d>>2]|0){case 538:case 541:case 542:break;default:{r=b;return}}VB(a,e,f,Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0);d=oC(k[v>>2]|0,642)|0;w=oC(k[v>>2]|0,643)|0;x=oC(k[v>>2]|0,928)|0;v=Qqa(72)|0;B=0;va(493,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Sqa(v);A=z;C=y;Qb(C|0)}a:do if((k[e>>2]|0)>0){y=j+24|0;z=j+8|0;D=j+32|0;E=j+16|0;F=j+40|0;G=a+20|0;H=0;b:while(1){I=k[(k[v>>2]|0)+32>>2]|0;J=Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0;nd[I&1023](v,J,k[(k[f>>2]|0)+(H<<2)>>2]|0);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,v);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,v);nd[k[(k[x>>2]|0)+48>>2]&1023](x,i,v);p[j>>3]=1.0;K=+p[g>>3];p[y>>3]=-K;p[z>>3]=0.0;p[D>>3]=-+p[h>>3];p[E>>3]=K;p[F>>3]=1.0;J=!(+p[i>>3]>=0.0);I=(co(k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0)|0)==543;L=k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0;do if(J){if(I){Zn(L,2);break}if((co(L)|0)!=538?(co(k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0)|0)!=541:0){M=H;N=48;break b}Zn(k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0,4)}else{if(I){Vn(L,2);break}if((co(L)|0)!=538?(co(k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0)|0)!=541:0){O=H;N=16;break b}Vn(k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0,4)}while(0);NY((k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(H<<2)>>2]<<2)>>2]|0)+72|0,j);H=H+1|0;if((H|0)>=(k[e>>2]|0))break a}if((N|0)==16){H=l+56|0;F=l+4|0;k[l>>2]=27524;k[H>>2]=27544;B=0;wa(508,l+56|0,F|0);E=B;B=0;if(E&1){E=Rb()|0;P=Q;R=E;vva(H);Qb(R|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[H>>2]=27488;B=0;va(448,F|0);E=B;B=0;do if(E&1){D=Rb()|0;S=Q;T=D}else{k[F>>2]=27560;D=l+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(c);Yua(D);Ava(F);S=y;T=z;break}Yua(c);B=0;z=Ia(40,l|0,74836,27)|0;y=B;B=0;c:do if(((((!(y&1)?(B=0,L=ya(431,k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(O<<2)>>2]<<2)>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,L|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(I)|0,B=0,J=Ia(40,z|0,I|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,J|0,146481,18)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,m|0,74107,73);J=B;B=0;do if(!(J&1)){B=0;eb(502,n|0,74864,29);I=B;B=0;if(I&1){I=Rb()|0;U=Q;Yua(m);V=U;W=I;break}B=0;wa(510,o|0,F|0);I=B;B=0;if(I&1){I=Rb()|0;X=I;Y=Q;Z=1}else{B=0;ua(163,L|0,m|0,n|0,2161,o|0);I=B;B=0;if(I&1)_=1;else{B=0;eb(503,L|0,1240,229);B=0;_=0}I=Rb()|0;U=Q;Yua(o);X=I;Y=U;Z=_}Yua(n);Yua(m);if(Z){V=Y;W=X}else{$=Y;aa=X;break c}}else{U=Rb()|0;V=Q;W=U}while(0);zb(L|0);$=V;aa=W}else N=35;while(0);if((N|0)==35){z=Rb()|0;$=Q;aa=z}k[l>>2]=27468;k[H>>2]=27488;k[F>>2]=27560;Yua(D);Ava(F);vva(H);A=$;C=aa;Qb(C|0)}while(0);P=S;R=T;vva(H);Qb(R|0)}else if((N|0)==48){F=q+56|0;E=q+4|0;k[q>>2]=27524;k[F>>2]=27544;B=0;wa(508,q+56|0,E|0);z=B;B=0;if(z&1){z=Rb()|0;ba=Q;ca=z;vva(F);Qb(ca|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[F>>2]=27488;B=0;va(448,E|0);z=B;B=0;do if(z&1){y=Rb()|0;da=Q;ea=y}else{k[E>>2]=27560;y=q+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;U=Q;Yua(c);Yua(y);Ava(E);da=U;ea=J;break}Yua(c);B=0;J=Ia(40,q|0,74836,27)|0;U=B;B=0;d:do if(((((!(U&1)?(B=0,I=ya(431,k[(k[G>>2]|0)+(k[(k[f>>2]|0)+(M<<2)>>2]<<2)>>2]|0)|0,fa=B,B=0,!(fa&1)):0)?(B=0,fa=ya(427,I|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(fa)|0,B=0,ga=Ia(40,J|0,fa|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,ga|0,146481,18)|0,ga=B,B=0,!(ga&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,s|0,74107,73);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,t|0,74864,29);fa=B;B=0;if(fa&1){fa=Rb()|0;ha=Q;Yua(s);ia=fa;ja=ha;break}B=0;wa(510,u|0,E|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ka=1;la=Q;ma=ha}else{B=0;ua(163,I|0,s|0,t|0,2170,u|0);ha=B;B=0;if(ha&1)na=1;else{B=0;eb(503,I|0,1240,229);B=0;na=0}ha=Rb()|0;fa=Q;Yua(u);ka=na;la=fa;ma=ha}Yua(t);Yua(s);if(ka){ia=ma;ja=la}else{oa=la;pa=ma;break d}}else{ha=Rb()|0;ia=ha;ja=Q}while(0);zb(I|0);oa=ja;pa=ia}else N=67;while(0);if((N|0)==67){J=Rb()|0;oa=Q;pa=J}k[q>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(y);Ava(E);vva(F);A=oa;C=pa;Qb(C|0)}while(0);ba=da;ca=ea;vva(F);Qb(ca|0)}}while(0);ca=k[f>>2]|0;if(ca)Tqa(ca);k[f>>2]=0;Ec[k[(k[v>>2]|0)+4>>2]&1023](v);r=b;return}function dB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+20|0;k[a+72>>2]=0;c=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;b=k[c>>2]|0;if((b|0)>0){d=a+52|0;e=b;b=0;while(1){f=k[(k[d>>2]|0)+(b<<2)>>2]|0;if(!f)g=e;else{Dla(f);g=k[c>>2]|0}b=b+1|0;if((b|0)>=(g|0))break;else e=g}}Dla(k[a+56>>2]|0);Dla(k[a+60>>2]|0);Dla(k[a+64>>2]|0);g=k[a+68>>2]|0;if(!g)return;Dla(g);return}function eB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+272|0;f=e+248|0;g=e;h=e+224|0;i=e+88|0;j=e+72|0;l=e+60|0;m=e+48|0;n=(c|0)==215;if(n)if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)o=214;else{r=e;return}else if((c|0)==227)if(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)o=225;else{r=e;return}else o=c;if(!(Tp(a,o)|0)){r=e;return}Mp(a,h,d,0);p[g>>3]=+p[b+(k[h>>2]<<3)>>3];p[g+8>>3]=+p[b+(k[h+4>>2]<<3)>>3];p[g+16>>3]=+p[b+(k[h+8>>2]<<3)>>3];p[g+24>>3]=+p[b+(k[h+12>>2]<<3)>>3];p[g+32>>3]=+p[b+(k[h+16>>2]<<3)>>3];p[g+40>>3]=+p[b+(k[h+20>>2]<<3)>>3];h=Qqa(16)|0;B=0;ib(285,h|0,o|0,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;b=Q;Sqa(h);q=b;s=g;Qb(s|0)}g=oC(k[a+16>>2]|0,o)|0;if((Hc[k[(k[g>>2]|0)+20>>2]&511](g)|0)==559){r$(g,h);if(n){nd[k[(k[a>>2]|0)+220>>2]&1023](a,o,-1);r=e;return}if((c|0)!=227){r=e;return}nd[k[(k[a>>2]|0)+220>>2]&1023](a,o,-1);r=e;return}e=i+56|0;a=i+4|0;k[i>>2]=27524;k[e>>2]=27544;B=0;wa(508,i+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;t=Q;u=c;vva(e);Qb(u|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[e>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){n=Rb()|0;v=Q;w=n}else{k[a>>2]=27560;n=i+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);h=B;B=0;if(h&1){h=Rb()|0;g=Q;Yua(f);Yua(n);Ava(a);v=g;w=h;break}Yua(f);B=0;h=Ia(40,i|0,74566,6)|0;g=B;B=0;a:do if((((!(g&1)?(B=0,b=ya(427,o|0)|0,d=B,B=0,!(d&1)):0)?(d=Lta(b)|0,B=0,x=Ia(40,h|0,b|0,d|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,x|0,74278,22)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,j|0,74107,73);x=B;B=0;do if(!(x&1)){B=0;eb(502,l|0,74894,26);b=B;B=0;if(b&1){b=Rb()|0;y=Q;Yua(j);z=y;A=b;break}B=0;wa(510,m|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;C=Q;D=b;E=1}else{B=0;ua(163,d|0,j|0,l|0,2233,m|0);b=B;B=0;if(b&1)F=1;else{B=0;eb(503,d|0,1240,229);B=0;F=0}b=Rb()|0;y=Q;Yua(m);C=y;D=b;E=F}Yua(l);Yua(j);if(E){z=C;A=D}else{G=D;H=C;break a}}else{b=Rb()|0;z=Q;A=b}while(0);zb(d|0);G=A;H=z}else I=27;while(0);if((I|0)==27){h=Rb()|0;G=h;H=Q}k[i>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(n);Ava(a);vva(e);q=H;s=G;Qb(s|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}function fB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;e=r;r=r+16|0;d=e;cO(f,d,482);f=k[d>>2]|0;k[a+44>>2]=k[(k[a+40>>2]|0)+(f<<2)>>2];d=k[(k[a+52>>2]|0)+(f<<2)>>2]|0;if(!d){k[a+20>>2]=0;r=e;return}else{f=Gla(d)|0;k[a+20>>2]=f;r=e;return}}function gB(a,b){a=a|0;b=b|0;k[a+44>>2]=b;return}function hB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;i=b+24|0;j=b+12|0;l=b;m=a+28|0;n=k[m>>2]|0;switch(Hc[k[(k[n>>2]|0)+20>>2]&511](n)|0){case 583:{nd[k[(k[a>>2]|0)+216>>2]&1023](a,214,215);n=k[m>>2]|0;if(Hc[k[(k[n>>2]|0)+100>>2]&511](n)|0)nd[k[(k[a>>2]|0)+216>>2]&1023](a,225,227);break}case 585:{nd[k[(k[a>>2]|0)+216>>2]&1023](a,218,219);nd[k[(k[a>>2]|0)+216>>2]&1023](a,220,221);nd[k[(k[a>>2]|0)+216>>2]&1023](a,222,223);break}default:{n=d+56|0;o=d+4|0;k[d>>2]=27524;k[n>>2]=27544;B=0;wa(508,d+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,134695,17)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,e|0,74107,73);z=B;B=0;do if(!(z&1)){B=0;eb(502,f|0,74921,17);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);D=C;E=A;break}B=0;wa(510,g|0,o|0);A=B;B=0;if(A&1){A=Rb()|0;F=A;G=Q;H=1}else{B=0;ua(163,y|0,e|0,f|0,2280,g|0);A=B;B=0;if(A&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}A=Rb()|0;C=Q;Yua(g);F=A;G=C;H=I}Yua(f);Yua(e);if(H){D=G;E=F}else{J=G;K=F;break a}}else{C=Rb()|0;D=Q;E=C}while(0);zb(y|0);J=D;K=E}else L=20;while(0);if((L|0)==20){w=Rb()|0;J=Q;K=w}k[d>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=K;N=J;Qb(M|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}}s=a+16|0;if(oC(k[s>>2]|0,674)|0)nd[k[(k[a>>2]|0)+216>>2]&1023](a,674,673);if(oC(k[s>>2]|0,677)|0)nd[k[(k[a>>2]|0)+216>>2]&1023](a,677,676);if(oC(k[s>>2]|0,258)|0)nd[k[(k[a>>2]|0)+216>>2]&1023](a,258,260);if(oC(k[s>>2]|0,259)|0)nd[k[(k[a>>2]|0)+216>>2]&1023](a,259,261);n=AA(a,0,1,2)|0;a=k[m>>2]|0;switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 583:{sC(k[s>>2]|0,215)|0;sC(k[s>>2]|0,227)|0;O=k[s>>2]|0;sC(O,673)|0;P=k[s>>2]|0;sC(P,676)|0;R=k[s>>2]|0;sC(R,260)|0;S=k[s>>2]|0;sC(S,261)|0;r=b;return n|0}case 585:{O=k[s>>2]|0;sC(O,673)|0;P=k[s>>2]|0;sC(P,676)|0;R=k[s>>2]|0;sC(R,260)|0;S=k[s>>2]|0;sC(S,261)|0;r=b;return n|0}default:{n=h+56|0;b=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,b|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;U=S;vva(n);Qb(U|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,b|0);S=B;B=0;do if(S&1){s=Rb()|0;V=Q;W=s}else{k[b>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(c);Yua(s);Ava(b);V=P;W=R;break}Yua(c);B=0;R=Ia(40,h|0,134695,17)|0;P=B;B=0;b:do if(!(P&1)?(B=0,Xa(239,R|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,i|0,74107,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,j|0,74921,17);m=B;B=0;if(m&1){m=Rb()|0;v=Q;Yua(i);X=v;Y=m;break}B=0;wa(510,l|0,b|0);m=B;B=0;if(m&1){m=Rb()|0;Z=1;_=m;$=Q}else{B=0;ua(163,O|0,i|0,j|0,2295,l|0);m=B;B=0;if(m&1)aa=1;else{B=0;eb(503,O|0,1240,229);B=0;aa=0}m=Rb()|0;v=Q;Yua(l);Z=aa;_=m;$=v}Yua(j);Yua(i);if(Z){X=$;Y=_}else{ba=_;ca=$;break b}}else{v=Rb()|0;X=Q;Y=v}while(0);zb(O|0);ba=Y;ca=X}else L=53;while(0);if((L|0)==53){R=Rb()|0;ba=R;ca=Q}k[h>>2]=27468;k[n>>2]=27488;k[b>>2]=27560;Yua(s);Ava(b);vva(n);M=ba;N=ca;Qb(M|0)}while(0);T=V;U=W;vva(n);Qb(U|0)}}return 0}function iB(a){a=a|0;return AA(a,3,4,5)|0}function jB(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,h=0.0;g=b*b+c*c+d*d;d=+$(+(+aa(+g)));c=g==-G?G:d;if(c*e/(f*6.0)<1.0){h=e*e/(f*12.0);return +h}else{h=e/(c*2.0);return +h}return +(0.0)}function kB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0;b=r;r=r+128|0;c=b+112|0;d=b+64|0;e=b+56|0;f=b+48|0;g=b;k[c>>2]=0;Uo(a,c);h=a+16|0;i=oC(k[h>>2]|0,674)|0;j=oC(k[h>>2]|0,677)|0;l=oC(k[h>>2]|0,679)|0;m=Qqa(72)|0;B=0;va(493,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Sqa(m);q=o;s=n;Qb(s|0)}n=d+8|0;o=d+24|0;t=0;do{Fc[k[(k[m>>2]|0)+28>>2]&1023](m,t);nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,m);nd[k[(k[j>>2]|0)+48>>2]&1023](j,f,m);u=+p[e>>3];v=+p[f>>3];Yo(a,d,k[c>>2]|0,m,i,j,l);w=+p[e>>3];x=+p[f>>3];p[g+(t<<3)>>3]=(+p[d>>3]*(w*w)+ +p[n>>3]*(x*x)+ +p[o>>3]*(w*(x*2.0)))/(u*u+v*v+1.0e-14);t=t+1|0}while((t|0)!=6);t=k[h>>2]|0;h=Qqa(16)|0;B=0;ib(285,h|0,262,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;o=Q;Sqa(h);q=o;s=g;Qb(s|0)}mC(t,h)|0;Ec[k[(k[m>>2]|0)+4>>2]&1023](m);m=k[c>>2]|0;if(!m){r=b;return}Tqa(m);r=b;return}function lB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0;b=r;r=r+128|0;c=b+112|0;d=b+64|0;e=b+56|0;f=b+48|0;g=b;k[c>>2]=0;Uo(a,c);h=a+16|0;i=oC(k[h>>2]|0,674)|0;j=oC(k[h>>2]|0,677)|0;l=oC(k[h>>2]|0,679)|0;m=Qqa(72)|0;B=0;va(493,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Sqa(m);q=o;s=n;Qb(s|0)}n=d+8|0;o=d+24|0;t=0;do{Fc[k[(k[m>>2]|0)+28>>2]&1023](m,t);nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,m);nd[k[(k[j>>2]|0)+48>>2]&1023](j,f,m);u=+p[e>>3];v=+p[f>>3];Yo(a,d,k[c>>2]|0,m,i,j,l);w=+p[e>>3];x=+p[f>>3];p[g+(t<<3)>>3]=(+p[n>>3]*(w*w)+ +p[d>>3]*(x*x)-+p[o>>3]*(w*(x*2.0)))/(u*u+v*v+1.0e-14);t=t+1|0}while((t|0)!=6);t=k[h>>2]|0;h=Qqa(16)|0;B=0;ib(285,h|0,263,g|0,738);g=B;B=0;if(g&1){g=Rb()|0;o=Q;Sqa(h);q=o;s=g;Qb(s|0)}mC(t,h)|0;Ec[k[(k[m>>2]|0)+4>>2]&1023](m);m=k[c>>2]|0;if(!m){r=b;return}Tqa(m);r=b;return}function mB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0;b=r;r=r+288|0;c=b+240|0;d=b+216|0;e=b+208|0;f=b+200|0;g=b+192|0;h=b+184|0;i=b+176|0;j=b+168|0;l=b+160|0;m=b+152|0;n=b+144|0;o=b;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}q=c;s=q+48|0;do{k[q>>2]=0;q=q+4|0}while((q|0)<(s|0));q=o+88|0;s=o+16|0;t=o+112|0;u=o+40|0;v=d+8|0;w=o+136|0;x=o+64|0;y=d+16|0;z=a+16|0;A=a;a:while(1){Ko(o,k[A+24>>2]|0,6,0);p[d>>3]=(+p[q>>3]-+p[s>>3])*.5;p[v>>3]=(+p[t>>3]-+p[u>>3])*.5;p[y>>3]=(+p[w>>3]-+p[x>>3])*.5;C=oC(k[z>>2]|0,674)|0;D=oC(k[z>>2]|0,677)|0;E=oC(k[z>>2]|0,671)|0;F=oC(k[z>>2]|0,653)|0;G=oC(k[z>>2]|0,716)|0;H=oC(k[z>>2]|0,717)|0;I=oC(k[z>>2]|0,719)|0;J=oC(k[z>>2]|0,339)|0;K=oC(k[z>>2]|0,353)|0;L=0;do{M=Qqa(72)|0;B=0;ib(291,M|0,L|0,L+3|0,11);N=B;B=0;if(N&1){O=M;P=8;break a}N=Hc[k[(k[M>>2]|0)+8>>2]&511](M)|0;if((N|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0)){R=d+(L<<3)|0;S=M+8|0;T=c+(L<<3)|0;U=N;do{Fc[k[(k[M>>2]|0)+24>>2]&1023](M,U);nd[k[(k[F>>2]|0)+48>>2]&1023](F,e,M);nd[k[(k[C>>2]|0)+48>>2]&1023](C,f,M);nd[k[(k[D>>2]|0)+48>>2]&1023](D,g,M);nd[k[(k[E>>2]|0)+48>>2]&1023](E,h,M);nd[k[(k[G>>2]|0)+48>>2]&1023](G,i,M);nd[k[(k[H>>2]|0)+48>>2]&1023](H,j,M);nd[k[(k[I>>2]|0)+48>>2]&1023](I,l,M);nd[k[(k[J>>2]|0)+48>>2]&1023](J,m,M);nd[k[(k[K>>2]|0)+48>>2]&1023](K,n,M);V=+p[m>>3];W=V-+Lp(A,o,M);V=+p[f>>3];X=+p[g>>3];Y=+p[h>>3];Z=+p[m>>3];_=+p[n>>3];if(W<Z&W<_){$=+p[R>>3]*+p[S>>3]*((V*V*+p[i>>3]+X*X*+p[l>>3]+V*(X*2.0)*+p[j>>3])/(Y*Y+1.0e-06));Y=+KY(Z,_);_=$*+VY(W,Y,+p[n>>3]);p[T>>3]=+p[T>>3]+_}U=U+1|0}while((U|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0))}Ec[k[(k[M>>2]|0)+4>>2]&1023](M);L=L+1|0}while((L|0)<3);if(Hc[k[(k[A>>2]|0)+252>>2]&511](A)|0)break;A=k[(k[A+72>>2]|0)+4>>2]|0}if((P|0)==8){P=Rb()|0;A=Q;Sqa(O);aa=A;ba=P;Qb(ba|0)}P=k[z>>2]|0;z=Qqa(16)|0;B=0;ib(285,z|0,246,c|0,738);c=B;B=0;if(c&1){c=Rb()|0;A=Q;Sqa(z);aa=A;ba=c;Qb(ba|0)}else{mC(P,z)|0;nd[k[(k[a>>2]|0)+220>>2]&1023](a,246,-1);r=b;return}}function nB(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0;b=r;r=r+16|0;c=b;kC(k[a+16>>2]|0,c,533);if(!($p(a)|0)){d=0.0;r=b;return +d}do if((k[c>>2]|0)!=536)if(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)if((k[c>>2]|0)==536){e=5;break}else break;else{d=0.0;r=b;return +d}else e=5;while(0);if((e|0)==5){if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){d=0.0;r=b;return +d}if((k[c>>2]|0)==536){c=AA(a,0,1,2)|0;f=+Zc[k[(k[c>>2]|0)+456>>2]&255](c);e=k[c+28>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);if(!c){d=f;r=b;return +d}Ec[k[(k[c>>2]|0)+4>>2]&1023](c);d=f;r=b;return +d}}c=AA(a,3,4,5)|0;f=+Zc[k[(k[c>>2]|0)+456>>2]&255](c);a=k[c+28>>2]|0;if(a)Ec[k[(k[a>>2]|0)+4>>2]&1023](a);if(!c){d=f;r=b;return +d}Ec[k[(k[c>>2]|0)+4>>2]&1023](c);d=f;r=b;return +d}function oB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0;b=r;r=r+160|0;c=b+144|0;d=b;dO(k[a+36>>2]|0,c,356);e=a+16|0;f=+qC(k[e>>2]|0,674);g=+qC(k[e>>2]|0,677);h=+qC(k[e>>2]|0,679);Ko(d,k[a+24>>2]|0,6,0);i=+p[d>>3];j=+p[d+8>>3];l=+p[d+16>>3];m=+p[d+24>>3];n=m<i?m:i;o=m>i?m:i;i=+p[d+32>>3];m=i<j?i:j;q=i>j?i:j;j=+p[d+40>>3];i=j<l?j:l;s=j>l?j:l;l=+p[d+48>>3];j=l<n?l:n;n=l>o?l:o;o=+p[d+56>>3];l=o<m?o:m;m=o>q?o:q;q=+p[d+64>>3];o=q<i?q:i;i=q>s?q:s;s=+p[d+72>>3];q=s<j?s:j;j=s>n?s:n;n=+p[d+80>>3];s=n<l?n:l;l=n>m?n:m;m=+p[d+88>>3];n=m<o?m:o;o=m>i?m:i;i=+p[d+96>>3];m=i<q?i:q;q=i>j?i:j;j=+p[d+104>>3];i=j<s?j:s;s=j>l?j:l;l=+p[d+112>>3];j=l<n?l:n;n=l>o?l:o;o=+p[d+120>>3];l=+p[d+128>>3];t=+p[d+136>>3];r=b;return +(+p[c>>3]/(f/((o>q?o:q)-(o<m?o:m))+g/((l>s?l:s)-(l<i?l:i))+h/((t>n?t:n)-(t<j?t:j))))}function pB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0,o=0,q=0.0,s=0.0,t=0.0;b=r;r=r+192|0;c=b+176|0;d=b+180|0;e=b+168|0;f=b+160|0;g=b+152|0;h=b+144|0;j=b;if(!($p(a)|0)){l=0.0;r=b;return +l}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){l=0.0;r=b;return +l}m=+WJ(k[a+32>>2]|0,265);n=Wo(a,40)|0;Wo(a,928)|0;Ko(j,k[a+24>>2]|0,6,0);Dc[k[(k[a>>2]|0)+132>>2]&255](a,c,e,f,d);o=hd[k[(k[a>>2]|0)+320>>2]&7](a,k[c>>2]|0,+p[e>>3],+p[f>>3],(i[d>>0]|0)!=1,3)|0;d=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;if((d|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){f=o+8|0;q=0.0;e=d;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,e);rd[k[(k[a>>2]|0)+264>>2]&511](a,h,j,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,g,o);s=q+ +p[g>>3]*+p[h>>3]*+p[f>>3];e=e+1|0;if((e|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){t=s;break}else q=s}}else t=0.0;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);l=m*t;r=b;return +l}function qB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0,o=0,q=0.0,s=0.0,t=0.0;b=r;r=r+192|0;c=b+176|0;d=b+180|0;e=b+168|0;f=b+160|0;g=b+152|0;h=b+144|0;j=b;if(!($p(a)|0)){l=0.0;r=b;return +l}if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){l=0.0;r=b;return +l}m=+WJ(k[a+32>>2]|0,265);n=Wo(a,39)|0;Wo(a,928)|0;Ko(j,k[a+24>>2]|0,6,0);Dc[k[(k[a>>2]|0)+132>>2]&255](a,c,e,f,d);o=hd[k[(k[a>>2]|0)+320>>2]&7](a,k[c>>2]|0,+p[e>>3],+p[f>>3],(i[d>>0]|0)!=0,3)|0;d=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;if((d|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){f=o+8|0;q=0.0;e=d;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,e);rd[k[(k[a>>2]|0)+264>>2]&511](a,h,j,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,g,o);s=q+ +p[g>>3]*+p[h>>3]*+p[f>>3];e=e+1|0;if((e|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){t=s;break}else q=s}}else t=0.0;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);l=m*t;r=b;return +l}function rB(a){a=a|0;var b=0,c=0,d=0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0;b=r;r=r+160|0;c=b+144|0;d=b;e=+WJ(k[a+32>>2]|0,265);if(!($p(a)|0)){f=0.0;r=b;return +f}if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){f=0.0;r=b;return +f}Ko(d,k[a+24>>2]|0,6,0);g=+p[d>>3];h=+p[d+8>>3];i=+$(+((g-+p[d+48>>3])*(+p[d+32>>3]-h)-(g-+p[d+24>>3])*(+p[d+56>>3]-h)))*.5;d=oC(k[a+16>>2]|0,388)|0;Fc[k[(k[d>>2]|0)+64>>2]&1023](d,c);f=e*i*+p[c>>3];r=b;return +f}function sB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0,ia=0;g=r;r=r+272|0;h=g+256|0;i=g+232|0;j=g+8|0;l=g+96|0;m=g+80|0;n=g+68|0;o=g+56|0;Gka(c,g,106352);zka(c,g+268|0,134866);k[(k[a+40>>2]|0)+(d<<2)>>2]=f;q=b*6|0;s=c+72|0;t=k[s>>2]|0;u=t+(q<<2)|0;k[i>>2]=k[u>>2];k[i+4>>2]=k[u+4>>2];k[i+8>>2]=k[u+8>>2];k[i+12>>2]=k[u+12>>2];k[i+16>>2]=k[u+16>>2];k[i+20>>2]=k[u+20>>2];do switch(f|0){case 738:{v=Rqa(24)|0;w=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+w;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+w;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+w;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+w;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+w;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+w;x=6;y=v;break}case 741:case 740:{v=Rqa(28)|0;w=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+w;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+w;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+w;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+w;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+w;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+w;k[v+24>>2]=b+1+w+(k[c+52>>2]|0);x=7;y=v;break}case 746:{v=Rqa(36)|0;w=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+w;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+w;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+w;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+w;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+w;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+w;z=b*9|0;A=k[c+84>>2]|0;C=w+1+(k[c+52>>2]|0)|0;k[v+24>>2]=C+(k[A+(z<<2)>>2]|0);k[v+28>>2]=C+(k[A+(z+1<<2)>>2]|0);k[v+32>>2]=C+(k[A+(z+2<<2)>>2]|0);x=9;y=v;break}case 747:{v=Rqa(48)|0;z=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+z;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+z;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+z;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+z;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+z;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+z;A=k[c+52>>2]|0;C=b*9|0;w=k[c+84>>2]|0;D=w+(C<<2)|0;E=z+1+A|0;k[v+24>>2]=E+(k[D>>2]<<1);F=w+(C+1<<2)|0;k[v+28>>2]=E+(k[F>>2]<<1);G=w+(C+2<<2)|0;k[v+32>>2]=E+(k[G>>2]<<1);E=z+2+A|0;k[v+36>>2]=E+(k[D>>2]<<1);k[v+40>>2]=E+(k[F>>2]<<1);k[v+44>>2]=E+(k[G>>2]<<1);x=12;y=v;break}case 745:{v=Rqa(48)|0;G=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+G;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+G;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+G;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+G;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+G;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+G;E=b*9|0;F=k[c+84>>2]|0;D=G+1+(k[c+52>>2]|0)|0;k[v+24>>2]=D+(k[F+(E+3<<2)>>2]|0);k[v+28>>2]=D+(k[F+(E+4<<2)>>2]|0);k[v+32>>2]=D+(k[F+(E+5<<2)>>2]|0);k[v+36>>2]=D+(k[F+(E+6<<2)>>2]|0);k[v+40>>2]=D+(k[F+(E+7<<2)>>2]|0);k[v+44>>2]=D+(k[F+(E+8<<2)>>2]|0);x=12;y=v;break}case 748:{v=Rqa(120)|0;E=c+100|0;F=k[E>>2]|0;k[v>>2]=(k[u>>2]|0)+F;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+F;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+F;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+F;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+F;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+F;D=c+52|0;G=k[D>>2]|0;A=b*9|0;z=c+84|0;C=k[z>>2]|0;w=C+(A<<2)|0;H=F+1+G|0;k[v+24>>2]=H+((k[w>>2]|0)*3|0);F=A+1|0;I=C+(F<<2)|0;k[v+28>>2]=H+((k[I>>2]|0)*3|0);J=A+2|0;K=C+(J<<2)|0;k[v+32>>2]=H+((k[K>>2]|0)*3|0);k[v+36>>2]=H+((k[C+(A+3<<2)>>2]|0)*3|0);k[v+40>>2]=H+((k[C+(A+4<<2)>>2]|0)*3|0);k[v+44>>2]=H+((k[C+(A+5<<2)>>2]|0)*3|0);k[v+48>>2]=H+((k[C+(A+6<<2)>>2]|0)*3|0);H=k[E>>2]|0;L=H+1|0;M=L+G|0;k[v+52>>2]=M+((k[C+(A+7<<2)>>2]|0)*3|0);k[v+56>>2]=M+((k[C+(A+8<<2)>>2]|0)*3|0);A=H+2|0;C=A+G|0;k[v+60>>2]=C+((k[w>>2]|0)*3|0);k[v+64>>2]=C+((k[I>>2]|0)*3|0);k[v+68>>2]=C+((k[K>>2]|0)*3|0);K=k[D>>2]|0;D=H+3+K|0;k[v+72>>2]=D+((k[w>>2]|0)*3|0);w=k[z>>2]|0;k[v+76>>2]=D+((k[w+(F<<2)>>2]|0)*3|0);k[v+80>>2]=D+((k[w+(J<<2)>>2]|0)*3|0);J=k[c+64>>2]|0;w=b*5|0;D=k[c+88>>2]|0;F=D+(w+2<<2)|0;z=L+K|0;k[v+84>>2]=z+(((k[F>>2]|0)+J|0)*3|0);L=D+(w+3<<2)|0;k[v+88>>2]=z+(((k[L>>2]|0)+J|0)*3|0);H=D+(w+4<<2)|0;k[v+92>>2]=z+(((k[H>>2]|0)+J|0)*3|0);k[v+96>>2]=A+K+(((k[F>>2]|0)+J|0)*3|0);A=k[E>>2]|0;E=A+2+K|0;k[v+100>>2]=E+(((k[L>>2]|0)+J|0)*3|0);k[v+104>>2]=E+(((k[H>>2]|0)+J|0)*3|0);E=A+3+K|0;k[v+108>>2]=E+(((k[F>>2]|0)+J|0)*3|0);k[v+112>>2]=E+(((k[L>>2]|0)+J|0)*3|0);k[v+116>>2]=E+(((k[H>>2]|0)+J|0)*3|0);x=30;y=v;break}case 742:{v=Rqa(72)|0;J=c+100|0;H=k[J>>2]|0;k[v>>2]=(k[u>>2]|0)+H;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+H;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+H;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+H;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+H;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+H;E=k[c+52>>2]|0;L=b*9|0;F=k[c+84>>2]|0;K=H+1+E|0;k[v+24>>2]=K+(k[F+(L<<2)>>2]|0);k[v+28>>2]=K+(k[F+(L+1<<2)>>2]|0);k[v+32>>2]=K+(k[F+(L+2<<2)>>2]|0);k[v+36>>2]=K+(k[F+(L+3<<2)>>2]|0);k[v+40>>2]=K+(k[F+(L+4<<2)>>2]|0);k[v+44>>2]=K+(k[F+(L+5<<2)>>2]|0);k[v+48>>2]=K+(k[F+(L+6<<2)>>2]|0);k[v+52>>2]=K+(k[F+(L+7<<2)>>2]|0);K=(k[J>>2]|0)+1+E|0;k[v+56>>2]=K+(k[F+(L+8<<2)>>2]|0);L=b*5|0;F=k[c+88>>2]|0;E=K+(k[c+64>>2]|0)|0;k[v+60>>2]=E+(k[F+(L+2<<2)>>2]|0);k[v+64>>2]=E+(k[F+(L+3<<2)>>2]|0);k[v+68>>2]=E+(k[F+(L+4<<2)>>2]|0);x=18;y=v;break}case 744:case 743:{v=Rqa(76)|0;L=c+100|0;F=k[L>>2]|0;k[v>>2]=(k[u>>2]|0)+F;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+F;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+F;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+F;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+F;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+F;E=k[c+52>>2]|0;K=b*9|0;J=k[c+84>>2]|0;H=F+1+E|0;k[v+24>>2]=H+(k[J+(K<<2)>>2]|0);k[v+28>>2]=H+(k[J+(K+1<<2)>>2]|0);k[v+32>>2]=H+(k[J+(K+2<<2)>>2]|0);k[v+36>>2]=H+(k[J+(K+3<<2)>>2]|0);k[v+40>>2]=H+(k[J+(K+4<<2)>>2]|0);k[v+44>>2]=H+(k[J+(K+5<<2)>>2]|0);k[v+48>>2]=H+(k[J+(K+6<<2)>>2]|0);k[v+52>>2]=H+(k[J+(K+7<<2)>>2]|0);H=k[L>>2]|0;L=H+1+E|0;k[v+56>>2]=L+(k[J+(K+8<<2)>>2]|0);K=k[c+64>>2]|0;J=b*5|0;F=k[c+88>>2]|0;A=L+K|0;k[v+60>>2]=A+(k[F+(J+2<<2)>>2]|0);k[v+64>>2]=A+(k[F+(J+3<<2)>>2]|0);k[v+68>>2]=A+(k[F+(J+4<<2)>>2]|0);k[v+72>>2]=b+1+H+E+K+(k[c+60>>2]|0);x=19;y=v;break}case 750:case 749:{v=Rqa(48)|0;K=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+K;E=t+((q|1)<<2)|0;k[v+4>>2]=(k[E>>2]|0)+K;H=t+(q+2<<2)|0;k[v+8>>2]=(k[H>>2]|0)+K;J=t+(q+3<<2)|0;k[v+12>>2]=(k[J>>2]|0)+K;F=t+(q+4<<2)|0;k[v+16>>2]=(k[F>>2]|0)+K;A=t+(q+5<<2)|0;k[v+20>>2]=(k[A>>2]|0)+K;L=(k[c+52>>2]|0)+K|0;k[v+24>>2]=L+(k[u>>2]|0);k[v+28>>2]=L+(k[E>>2]|0);k[v+32>>2]=L+(k[H>>2]|0);k[v+36>>2]=L+(k[J>>2]|0);k[v+40>>2]=L+(k[F>>2]|0);k[v+44>>2]=L+(k[A>>2]|0);x=12;y=v;break}case 752:case 751:{v=Rqa(52)|0;A=k[c+100>>2]|0;k[v>>2]=(k[u>>2]|0)+A;L=t+((q|1)<<2)|0;k[v+4>>2]=(k[L>>2]|0)+A;F=t+(q+2<<2)|0;k[v+8>>2]=(k[F>>2]|0)+A;J=t+(q+3<<2)|0;k[v+12>>2]=(k[J>>2]|0)+A;H=t+(q+4<<2)|0;k[v+16>>2]=(k[H>>2]|0)+A;E=t+(q+5<<2)|0;k[v+20>>2]=(k[E>>2]|0)+A;K=k[c+52>>2]|0;k[v+24>>2]=b+1+A+K;z=K+A+(k[c+56>>2]|0)|0;k[v+28>>2]=z+(k[u>>2]|0);k[v+32>>2]=z+(k[L>>2]|0);k[v+36>>2]=z+(k[F>>2]|0);k[v+40>>2]=z+(k[J>>2]|0);k[v+44>>2]=z+(k[H>>2]|0);k[v+48>>2]=z+(k[E>>2]|0);x=13;y=v;break}case 753:{v=Rqa(96)|0;E=c+100|0;z=k[E>>2]|0;k[v>>2]=(k[u>>2]|0)+z;H=q|1;k[v+4>>2]=(k[t+(H<<2)>>2]|0)+z;J=q+2|0;k[v+8>>2]=(k[t+(J<<2)>>2]|0)+z;F=q+3|0;k[v+12>>2]=(k[t+(F<<2)>>2]|0)+z;L=q+4|0;k[v+16>>2]=(k[t+(L<<2)>>2]|0)+z;A=q+5|0;k[v+20>>2]=(k[t+(A<<2)>>2]|0)+z;K=c+52|0;w=k[K>>2]|0;D=b*9|0;C=k[c+84>>2]|0;I=z+1+w|0;k[v+24>>2]=I+(k[C+(D<<2)>>2]|0);k[v+28>>2]=I+(k[C+(D+1<<2)>>2]|0);k[v+32>>2]=I+(k[C+(D+2<<2)>>2]|0);k[v+36>>2]=I+(k[C+(D+3<<2)>>2]|0);k[v+40>>2]=I+(k[C+(D+4<<2)>>2]|0);k[v+44>>2]=I+(k[C+(D+5<<2)>>2]|0);k[v+48>>2]=I+(k[C+(D+6<<2)>>2]|0);k[v+52>>2]=I+(k[C+(D+7<<2)>>2]|0);I=k[E>>2]|0;E=I+1+w|0;k[v+56>>2]=E+(k[C+(D+8<<2)>>2]|0);D=k[c+64>>2]|0;C=b*5|0;z=k[c+88>>2]|0;G=E+D|0;k[v+60>>2]=G+(k[z+(C+2<<2)>>2]|0);k[v+64>>2]=G+(k[z+(C+3<<2)>>2]|0);k[v+68>>2]=G+(k[z+(C+4<<2)>>2]|0);C=k[c+60>>2]|0;z=k[s>>2]|0;k[v+72>>2]=w+I+D+C+(k[z+(q<<2)>>2]|0);w=(k[K>>2]|0)+I+D+C|0;k[v+76>>2]=w+(k[z+(H<<2)>>2]|0);k[v+80>>2]=w+(k[z+(J<<2)>>2]|0);k[v+84>>2]=w+(k[z+(F<<2)>>2]|0);k[v+88>>2]=w+(k[z+(L<<2)>>2]|0);k[v+92>>2]=w+(k[z+(A<<2)>>2]|0);x=24;y=v;break}case 754:{v=Rqa(72)|0;A=c+100|0;z=k[A>>2]|0;k[v>>2]=(k[u>>2]|0)+z;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+z;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+z;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+z;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+z;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+z;w=k[c+52>>2]|0;L=b*9|0;F=k[c+84>>2]|0;J=z+1+w|0;k[v+24>>2]=J+(k[F+(L<<2)>>2]|0);k[v+28>>2]=J+(k[F+(L+1<<2)>>2]|0);k[v+32>>2]=J+(k[F+(L+2<<2)>>2]|0);k[v+36>>2]=J+(k[F+(L+3<<2)>>2]|0);k[v+40>>2]=J+(k[F+(L+4<<2)>>2]|0);k[v+44>>2]=J+(k[F+(L+5<<2)>>2]|0);k[v+48>>2]=J+(k[F+(L+6<<2)>>2]|0);k[v+52>>2]=J+(k[F+(L+7<<2)>>2]|0);J=(k[A>>2]|0)+1+w|0;k[v+56>>2]=J+(k[F+(L+8<<2)>>2]|0);L=b*5|0;F=k[c+88>>2]|0;w=J+(k[c+64>>2]|0)|0;k[v+60>>2]=w+(k[F+(L+2<<2)>>2]|0);k[v+64>>2]=w+(k[F+(L+3<<2)>>2]|0);k[v+68>>2]=w+(k[F+(L+4<<2)>>2]|0);x=18;y=v;break}case 756:{v=Rqa(144)|0;L=c+100|0;F=k[L>>2]|0;k[v>>2]=(k[u>>2]|0)+F;w=q|1;k[v+4>>2]=(k[t+(w<<2)>>2]|0)+F;J=q+2|0;k[v+8>>2]=(k[t+(J<<2)>>2]|0)+F;A=q+3|0;k[v+12>>2]=(k[t+(A<<2)>>2]|0)+F;z=q+4|0;k[v+16>>2]=(k[t+(z<<2)>>2]|0)+F;H=q+5|0;k[v+20>>2]=(k[t+(H<<2)>>2]|0)+F;C=c+52|0;D=k[C>>2]|0;I=b*9|0;K=c+84|0;G=k[K>>2]|0;E=G+(I<<2)|0;M=F+1+D|0;k[v+24>>2]=M+((k[E>>2]|0)*3|0);F=I+1|0;N=G+(F<<2)|0;k[v+28>>2]=M+((k[N>>2]|0)*3|0);O=I+2|0;P=G+(O<<2)|0;k[v+32>>2]=M+((k[P>>2]|0)*3|0);k[v+36>>2]=M+((k[G+(I+3<<2)>>2]|0)*3|0);k[v+40>>2]=M+((k[G+(I+4<<2)>>2]|0)*3|0);k[v+44>>2]=M+((k[G+(I+5<<2)>>2]|0)*3|0);k[v+48>>2]=M+((k[G+(I+6<<2)>>2]|0)*3|0);M=k[L>>2]|0;R=M+1|0;S=R+D|0;k[v+52>>2]=S+((k[G+(I+7<<2)>>2]|0)*3|0);k[v+56>>2]=S+((k[G+(I+8<<2)>>2]|0)*3|0);I=M+2|0;G=I+D|0;k[v+60>>2]=G+((k[E>>2]|0)*3|0);k[v+64>>2]=G+((k[N>>2]|0)*3|0);k[v+68>>2]=G+((k[P>>2]|0)*3|0);P=k[C>>2]|0;G=M+3+P|0;k[v+72>>2]=G+((k[E>>2]|0)*3|0);E=k[K>>2]|0;k[v+76>>2]=G+((k[E+(F<<2)>>2]|0)*3|0);k[v+80>>2]=G+((k[E+(O<<2)>>2]|0)*3|0);O=c+64|0;E=k[O>>2]|0;G=b*5|0;F=k[c+88>>2]|0;K=F+(G+2<<2)|0;M=R+P|0;k[v+84>>2]=M+(((k[K>>2]|0)+E|0)*3|0);R=F+(G+3<<2)|0;k[v+88>>2]=M+(((k[R>>2]|0)+E|0)*3|0);N=F+(G+4<<2)|0;k[v+92>>2]=M+(((k[N>>2]|0)+E|0)*3|0);k[v+96>>2]=I+P+(((k[K>>2]|0)+E|0)*3|0);I=k[L>>2]|0;L=I+2+P|0;k[v+100>>2]=L+(((k[R>>2]|0)+E|0)*3|0);k[v+104>>2]=L+(((k[N>>2]|0)+E|0)*3|0);L=I+3+P|0;k[v+108>>2]=L+(((k[K>>2]|0)+E|0)*3|0);k[v+112>>2]=L+(((k[R>>2]|0)+E|0)*3|0);k[v+116>>2]=L+(((k[N>>2]|0)+E|0)*3|0);N=k[c+60>>2]|0;L=k[s>>2]|0;R=(N+E|0)*3|0;E=(k[C>>2]|0)+I|0;k[v+120>>2]=E+(k[L+(q<<2)>>2]|0)+R;k[v+124>>2]=E+(k[L+(w<<2)>>2]|0)+R;R=(N+(k[O>>2]|0)|0)*3|0;k[v+128>>2]=E+(k[L+(J<<2)>>2]|0)+R;k[v+132>>2]=E+(k[L+(A<<2)>>2]|0)+R;k[v+136>>2]=E+(k[L+(z<<2)>>2]|0)+R;k[v+140>>2]=E+(k[L+(H<<2)>>2]|0)+R;x=36;y=v;break}case 757:{v=Rqa(100)|0;R=c+100|0;H=k[R>>2]|0;k[v>>2]=(k[u>>2]|0)+H;L=q|1;k[v+4>>2]=(k[t+(L<<2)>>2]|0)+H;E=q+2|0;k[v+8>>2]=(k[t+(E<<2)>>2]|0)+H;z=q+3|0;k[v+12>>2]=(k[t+(z<<2)>>2]|0)+H;A=q+4|0;k[v+16>>2]=(k[t+(A<<2)>>2]|0)+H;J=q+5|0;k[v+20>>2]=(k[t+(J<<2)>>2]|0)+H;O=c+52|0;N=k[O>>2]|0;w=b*9|0;I=k[c+84>>2]|0;C=H+1+N|0;k[v+24>>2]=C+(k[I+(w<<2)>>2]|0);k[v+28>>2]=C+(k[I+(w+1<<2)>>2]|0);k[v+32>>2]=C+(k[I+(w+2<<2)>>2]|0);k[v+36>>2]=C+(k[I+(w+3<<2)>>2]|0);k[v+40>>2]=C+(k[I+(w+4<<2)>>2]|0);k[v+44>>2]=C+(k[I+(w+5<<2)>>2]|0);k[v+48>>2]=C+(k[I+(w+6<<2)>>2]|0);k[v+52>>2]=C+(k[I+(w+7<<2)>>2]|0);C=k[R>>2]|0;R=C+1+N|0;k[v+56>>2]=R+(k[I+(w+8<<2)>>2]|0);w=k[c+64>>2]|0;I=b*5|0;H=k[c+88>>2]|0;K=R+w|0;k[v+60>>2]=K+(k[H+(I+2<<2)>>2]|0);k[v+64>>2]=K+(k[H+(I+3<<2)>>2]|0);k[v+68>>2]=K+(k[H+(I+4<<2)>>2]|0);I=k[c+60>>2]|0;k[v+72>>2]=b+1+C+N+w+I;N=k[O>>2]|0;O=k[c+56>>2]|0;k[v+76>>2]=L+C+N+w+I+O;k[v+80>>2]=E+C+N+w+I+O;k[v+84>>2]=z+C+N+w+I+O;k[v+88>>2]=A+C+N+w+I+O;k[v+92>>2]=J+C+N+w+I+O;k[v+96>>2]=q+6+C+N+w+I+O;x=25;y=v;break}case 758:{v=Rqa(76)|0;O=c+100|0;I=k[O>>2]|0;k[v>>2]=(k[u>>2]|0)+I;k[v+4>>2]=(k[t+((q|1)<<2)>>2]|0)+I;k[v+8>>2]=(k[t+(q+2<<2)>>2]|0)+I;k[v+12>>2]=(k[t+(q+3<<2)>>2]|0)+I;k[v+16>>2]=(k[t+(q+4<<2)>>2]|0)+I;k[v+20>>2]=(k[t+(q+5<<2)>>2]|0)+I;w=k[c+52>>2]|0;N=b*9|0;C=k[c+84>>2]|0;J=I+1+w|0;k[v+24>>2]=J+(k[C+(N<<2)>>2]|0);k[v+28>>2]=J+(k[C+(N+1<<2)>>2]|0);k[v+32>>2]=J+(k[C+(N+2<<2)>>2]|0);k[v+36>>2]=J+(k[C+(N+3<<2)>>2]|0);k[v+40>>2]=J+(k[C+(N+4<<2)>>2]|0);k[v+44>>2]=J+(k[C+(N+5<<2)>>2]|0);k[v+48>>2]=J+(k[C+(N+6<<2)>>2]|0);k[v+52>>2]=J+(k[C+(N+7<<2)>>2]|0);J=k[O>>2]|0;O=J+1+w|0;k[v+56>>2]=O+(k[C+(N+8<<2)>>2]|0);N=k[c+64>>2]|0;C=b*5|0;I=k[c+88>>2]|0;A=O+N|0;k[v+60>>2]=A+(k[I+(C+2<<2)>>2]|0);k[v+64>>2]=A+(k[I+(C+3<<2)>>2]|0);k[v+68>>2]=A+(k[I+(C+4<<2)>>2]|0);k[v+72>>2]=b+1+J+w+N+(k[c+60>>2]|0);x=19;y=v;break}default:{v=l+56|0;N=l+4|0;k[l>>2]=27524;k[v>>2]=27544;B=0;wa(508,l+56|0,N|0);w=B;B=0;if(w&1){w=Rb()|0;T=Q;U=w;vva(v);Qb(U|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[v>>2]=27488;B=0;va(448,N|0);w=B;B=0;do if(w&1){J=Rb()|0;V=Q;W=J}else{k[N>>2]=27560;J=l+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[l+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,N|0,h|0);C=B;B=0;if(C&1){C=Rb()|0;I=Q;Yua(h);Yua(J);Ava(N);V=I;W=C;break}Yua(h);B=0;C=Ia(40,l|0,145867,15)|0;I=B;B=0;a:do if((((!(I&1)?(B=0,A=ya(427,f|0)|0,O=B,B=0,!(O&1)):0)?(O=Lta(A)|0,B=0,z=Ia(40,C|0,A|0,O|0)|0,O=B,B=0,!(O&1)):0)?(B=0,O=Ia(40,z|0,146481,18)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,O|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,m|0,74107,73);z=B;B=0;do if(!(z&1)){B=0;eb(502,n|0,74939,6);A=B;B=0;if(A&1){A=Rb()|0;E=Q;Yua(m);X=E;Y=A;break}B=0;wa(510,o|0,N|0);A=B;B=0;if(A&1){A=Rb()|0;Z=Q;_=A;$=1}else{B=0;ua(163,O|0,m|0,n|0,3063,o|0);A=B;B=0;if(A&1)aa=1;else{B=0;eb(503,O|0,1240,229);B=0;aa=0}A=Rb()|0;E=Q;Yua(o);Z=E;_=A;$=aa}Yua(n);Yua(m);if($){X=Z;Y=_}else{ba=Z;ca=_;break a}}else{A=Rb()|0;X=Q;Y=A}while(0);zb(O|0);ba=X;ca=Y}else da=35;while(0);if((da|0)==35){C=Rb()|0;ba=Q;ca=C}k[l>>2]=27468;k[v>>2]=27488;k[N>>2]=27560;Yua(J);Ava(N);vva(v);ea=ba;fa=ca;Qb(fa|0)}while(0);T=V;U=W;vva(v);Qb(U|0)}}while(0);Xq(a+48|0,y,x,d);k[a+20>>2]=0;Tqa(y);nd[k[(k[a>>2]|0)+548>>2]&1023](a,b,c);if((e|0)!=497){r=g;return}e=(Jka(c,129145)|0)+(b<<3)|0;do if(+p[e>>3]==541.0){if((Jka(c,135096)|0)!=0?(Jka(c,129435)|0)!=0:0){y=(k[i>>2]|0)+-1|0;d=(Jka(c,135096)|0)+(y<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(y<<3)|0;p[j>>3]=ga*+p[d>>3];d=i+4|0;y=(k[d>>2]|0)+-1|0;x=(Jka(c,135096)|0)+(y<<3)|0;ga=+p[x>>3];x=(Jka(c,129435)|0)+(y<<3)|0;y=j+8|0;p[y>>3]=ga*+p[x>>3];x=i+8|0;U=(k[x>>2]|0)+-1|0;W=(Jka(c,135096)|0)+(U<<3)|0;ga=+p[W>>3];W=(Jka(c,129435)|0)+(U<<3)|0;U=j+16|0;p[U>>3]=ga*+p[W>>3];W=i+12|0;V=(k[W>>2]|0)+-1|0;T=(Jka(c,135096)|0)+(V<<3)|0;ga=+p[T>>3];T=(Jka(c,129435)|0)+(V<<3)|0;V=j+24|0;p[V>>3]=ga*+p[T>>3];T=(k[i+16>>2]|0)+-1|0;ca=(Jka(c,135096)|0)+(T<<3)|0;ga=+p[ca>>3];ca=(Jka(c,129435)|0)+(T<<3)|0;ba=j+32|0;p[ba>>3]=ga*+p[ca>>3];ca=(k[i+20>>2]|0)+-1|0;l=(Jka(c,135096)|0)+(ca<<3)|0;ga=+p[l>>3];l=(Jka(c,129435)|0)+(ca<<3)|0;da=j+40|0;p[da>>3]=ga*+p[l>>3];l=a+16|0;Y=k[l>>2]|0;X=Qqa(16)|0;B=0;ib(285,X|0,683,j|0,738);_=B;B=0;if(_&1){_=Rb()|0;Z=Q;Sqa(X);ea=Z;fa=_;Qb(fa|0)}mC(Y,X)|0;X=(k[i>>2]|0)+-1|0;Y=(Jka(c,135096)|0)+(X<<3)|0;ga=+p[Y>>3];Y=(Jka(c,129435)|0)+(X<<3)|0;p[j>>3]=ga*(1.0-+p[Y>>3]);Y=(k[d>>2]|0)+-1|0;d=(Jka(c,135096)|0)+(Y<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(Y<<3)|0;p[y>>3]=ga*(1.0-+p[d>>3]);d=(k[x>>2]|0)+-1|0;x=(Jka(c,135096)|0)+(d<<3)|0;ga=+p[x>>3];x=(Jka(c,129435)|0)+(d<<3)|0;p[U>>3]=ga*(1.0-+p[x>>3]);x=(k[W>>2]|0)+-1|0;W=(Jka(c,135096)|0)+(x<<3)|0;ga=+p[W>>3];W=(Jka(c,129435)|0)+(x<<3)|0;p[V>>3]=ga*(1.0-+p[W>>3]);W=(Jka(c,135096)|0)+(T<<3)|0;ga=+p[W>>3];W=(Jka(c,129435)|0)+(T<<3)|0;p[ba>>3]=ga*(1.0-+p[W>>3]);W=(Jka(c,135096)|0)+(ca<<3)|0;ga=+p[W>>3];W=(Jka(c,129435)|0)+(ca<<3)|0;p[da>>3]=ga*(1.0-+p[W>>3]);W=k[l>>2]|0;l=Qqa(16)|0;B=0;ib(285,l|0,681,j|0,738);da=B;B=0;if(!(da&1)){mC(W,l)|0;break}W=Rb()|0;da=Q;Sqa(l);ea=da;fa=W;Qb(fa|0)}ha=j;ia=ha+48|0;do{k[ha>>2]=0;ha=ha+4|0}while((ha|0)<(ia|0));v=a+16|0;W=k[v>>2]|0;da=Qqa(16)|0;B=0;ib(285,da|0,683,j|0,738);l=B;B=0;if(l&1){l=Rb()|0;ca=Q;Sqa(da);ea=ca;fa=l;Qb(fa|0)}mC(W,da)|0;da=k[v>>2]|0;v=Qqa(16)|0;B=0;ib(285,v|0,681,j|0,738);W=B;B=0;if(!(W&1)){mC(da,v)|0;break}da=Rb()|0;W=Q;Sqa(v);ea=W;fa=da;Qb(fa|0)}while(0);e=(Jka(c,129145)|0)+(b<<3)|0;if(!(+p[e>>3]==538.0)){r=g;return}if((Jka(c,135096)|0)!=0?(Jka(c,129435)|0)!=0:0){e=(k[i>>2]|0)+-1|0;b=(Jka(c,135096)|0)+(e<<3)|0;ga=+p[b>>3];b=(Jka(c,129435)|0)+(e<<3)|0;p[j>>3]=ga*+p[b>>3];b=(k[i+4>>2]|0)+-1|0;da=(Jka(c,135096)|0)+(b<<3)|0;ga=+p[da>>3];da=(Jka(c,129435)|0)+(b<<3)|0;W=j+8|0;p[W>>3]=ga*+p[da>>3];da=(k[i+8>>2]|0)+-1|0;v=(Jka(c,135096)|0)+(da<<3)|0;ga=+p[v>>3];v=(Jka(c,129435)|0)+(da<<3)|0;l=j+16|0;p[l>>3]=ga*+p[v>>3];v=(k[i+12>>2]|0)+-1|0;ca=(Jka(c,135096)|0)+(v<<3)|0;ga=+p[ca>>3];ca=(Jka(c,129435)|0)+(v<<3)|0;ba=j+24|0;p[ba>>3]=ga*+p[ca>>3];ca=(k[i+16>>2]|0)+-1|0;T=(Jka(c,135096)|0)+(ca<<3)|0;ga=+p[T>>3];T=(Jka(c,129435)|0)+(ca<<3)|0;V=j+32|0;p[V>>3]=ga*+p[T>>3];T=(k[i+20>>2]|0)+-1|0;i=(Jka(c,135096)|0)+(T<<3)|0;ga=+p[i>>3];i=(Jka(c,129435)|0)+(T<<3)|0;x=j+40|0;p[x>>3]=ga*+p[i>>3];i=a+16|0;U=k[i>>2]|0;d=Qqa(16)|0;B=0;ib(285,d|0,683,j|0,738);y=B;B=0;if(y&1){y=Rb()|0;Y=Q;Sqa(d);ea=Y;fa=y;Qb(fa|0)}mC(U,d)|0;d=(Jka(c,135096)|0)+(e<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(e<<3)|0;p[j>>3]=ga*(1.0-+p[d>>3]);d=(Jka(c,135096)|0)+(b<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(b<<3)|0;p[W>>3]=ga*(1.0-+p[d>>3]);d=(Jka(c,135096)|0)+(da<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(da<<3)|0;p[l>>3]=ga*(1.0-+p[d>>3]);d=(Jka(c,135096)|0)+(v<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(v<<3)|0;p[ba>>3]=ga*(1.0-+p[d>>3]);d=(Jka(c,135096)|0)+(ca<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(ca<<3)|0;p[V>>3]=ga*(1.0-+p[d>>3]);d=(Jka(c,135096)|0)+(T<<3)|0;ga=+p[d>>3];d=(Jka(c,129435)|0)+(T<<3)|0;p[x>>3]=ga*(1.0-+p[d>>3]);d=k[i>>2]|0;i=Qqa(16)|0;B=0;ib(285,i|0,680,j|0,738);x=B;B=0;if(x&1){x=Rb()|0;T=Q;Sqa(i);ea=T;fa=x;Qb(fa|0)}else{mC(d,i)|0;r=g;return}}ha=j;ia=ha+48|0;do{k[ha>>2]=0;ha=ha+4|0}while((ha|0)<(ia|0));ha=a+16|0;a=k[ha>>2]|0;ia=Qqa(16)|0;B=0;ib(285,ia|0,683,j|0,738);i=B;B=0;if(i&1){i=Rb()|0;d=Q;Sqa(ia);ea=d;fa=i;Qb(fa|0)}mC(a,ia)|0;ia=k[ha>>2]|0;ha=Qqa(16)|0;B=0;ib(285,ha|0,680,j|0,738);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Sqa(ha);ea=a;fa=j;Qb(fa|0)}else{mC(ia,ha)|0;r=g;return}}function tB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}cO(k[a+36>>2]|0,c,575);f=a+16|0;g=oC(k[f>>2]|0,k[c>>2]|0)|0;c=oC(k[f>>2]|0,287)|0;f=Qqa(72)|0;B=0;va(493,f|0);h=B;B=0;if(h&1){h=Rb()|0;Sqa(f);Qb(h|0)}h=a+44|0;if((XB(a,k[h>>2]|0)|0)>0){i=a+20|0;j=0;do{nd[k[(k[f>>2]|0)+32>>2]&1023](f,k[h>>2]|0,j);nd[k[(k[c>>2]|0)+48>>2]&1023](c,e,f);if(+p[e>>3]==1.0){nd[k[(k[g>>2]|0)+48>>2]&1023](g,d,f);Un(k[(k[i>>2]|0)+(j<<2)>>2]|0,0,+p[d>>3])}j=j+1|0}while((j|0)<(XB(a,k[h>>2]|0)|0))}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);r=b;return}function uB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+8|0;d=b;if(!(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0)){r=b;return}cO(k[a+36>>2]|0,c,575);e=oC(k[a+16>>2]|0,k[c>>2]|0)|0;c=Qqa(72)|0;B=0;va(493,c|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(c);Qb(f|0)}f=a+20|0;nd[k[(k[c>>2]|0)+32>>2]&1023](c,738,3);nd[k[(k[e>>2]|0)+48>>2]&1023](e,d,c);Un(k[(k[f>>2]|0)+12>>2]|0,0,+p[d>>3]);nd[k[(k[c>>2]|0)+32>>2]&1023](c,738,4);nd[k[(k[e>>2]|0)+48>>2]&1023](e,d,c);Un(k[(k[f>>2]|0)+16>>2]|0,0,+p[d>>3]);nd[k[(k[c>>2]|0)+32>>2]&1023](c,738,5);nd[k[(k[e>>2]|0)+48>>2]&1023](e,d,c);Un(k[(k[f>>2]|0)+20>>2]|0,0,+p[d>>3]);Ec[k[(k[c>>2]|0)+4>>2]&1023](c);r=b;return}function vB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=a+24|0;a=c+4|0;f=0;g=0;while(1){h=b+((Co(k[(k[e>>2]|0)+(f<<2)>>2]|0)|0)<<3)|0;if(+p[h>>3]!=0.0){h=Co(k[(k[e>>2]|0)+(f<<2)>>2]|0)|0;if(k[c>>2]|0){i=k[k[a>>2]>>2]|0;Jc[k[(k[i>>2]|0)+20>>2]&1](i,h,-1.0,0)}h=d+((Co(k[(k[e>>2]|0)+(f<<2)>>2]|0)|0)<<3)|0;if(+p[h>>3]>=0.0)j=g+1|0;else j=g}else j=g;f=f+1|0;if((f|0)==6){l=j;break}else g=j}return l|0}function wB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;WB(a,b,c,d,e,738);return}function xB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZB(a,b,c,d,738);return}function yB(a){a=a|0;return hC(a,k[a+44>>2]|0)|0}function zB(a,b){a=a|0;b=b|0;return Ao(k[(k[a+24>>2]|0)+(b<<2)>>2]|0)|0}function AB(a,b,c){a=a|0;b=b|0;c=c|0;a=Rqa(24)|0;k[a>>2]=0;k[a+4>>2]=3;k[a+8>>2]=1;k[a+12>>2]=4;k[a+16>>2]=2;k[a+20>>2]=5;k[b>>2]=a;k[c>>2]=3;return}function BB(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0;h=r;r=r+64|0;i=h+56|0;j=h+48|0;l=h;Yo(a,l,c,d,e,f,g);m=k[a+28>>2]|0;Tc[k[(k[m>>2]|0)+108>>2]&15](m,j,3,c,d,e,f,g);Fp(a,i,l,+p[j>>3]);p[b>>3]=+p[i>>3];r=h;return}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;e=r;r=r+240|0;f=e+224|0;g=e;h=e+88|0;i=e+72|0;j=e+60|0;l=e+48|0;m=Rqa(96)|0;xp(a,g,d);n=+p[g>>3];o=+p[g+8>>3];q=+p[g+16>>3];if(n*o>0.0){s=q/(q-o);t=q/(q-n);g=q<0.0;d=g&1;u=+p[c+48>>3];a=g?3:0;p[m+(a<<3)>>3]=u+s*(+p[c+24>>3]-u);v=+p[c+56>>3];p[m+(a+1<<3)>>3]=v+s*(+p[c+32>>3]-v);w=+p[c+64>>3];p[m+(a+2<<3)>>3]=w+s*(+p[c+40>>3]-w);a=0-(d^1)&3;p[m+(a<<3)>>3]=u+t*(+p[c>>3]-u);p[m+(a+1<<3)>>3]=v+t*(+p[c+8>>3]-v);p[m+(a+2<<3)>>3]=w+t*(+p[c+16>>3]-w);w=+p[c+120>>3];a=(d^3)*3|0;p[m+(a<<3)>>3]=w+s*(+p[c+96>>3]-w);v=+p[c+128>>3];p[m+(a+1<<3)>>3]=v+s*(+p[c+104>>3]-v);u=+p[c+136>>3];p[m+(a+2<<3)>>3]=u+s*(+p[c+112>>3]-u);a=(d|2)*3|0;p[m+(a<<3)>>3]=w+t*(+p[c+72>>3]-w);p[m+(a+1<<3)>>3]=v+t*(+p[c+80>>3]-v);p[m+(a+2<<3)>>3]=u+t*(+p[c+88>>3]-u);k[b>>2]=m;r=e;return}if(o*q>0.0){u=n/(n-q);t=n/(n-o);a=n<0.0;d=a&1;v=+p[c>>3];g=a?3:0;p[m+(g<<3)>>3]=v+u*(+p[c+48>>3]-v);w=+p[c+8>>3];p[m+(g+1<<3)>>3]=w+u*(+p[c+56>>3]-w);s=+p[c+16>>3];p[m+(g+2<<3)>>3]=s+u*(+p[c+64>>3]-s);g=0-(d^1)&3;p[m+(g<<3)>>3]=v+t*(+p[c+24>>3]-v);p[m+(g+1<<3)>>3]=w+t*(+p[c+32>>3]-w);p[m+(g+2<<3)>>3]=s+t*(+p[c+40>>3]-s);s=+p[c+72>>3];g=(d^3)*3|0;p[m+(g<<3)>>3]=s+u*(+p[c+120>>3]-s);w=+p[c+80>>3];p[m+(g+1<<3)>>3]=w+u*(+p[c+128>>3]-w);v=+p[c+88>>3];p[m+(g+2<<3)>>3]=v+u*(+p[c+136>>3]-v);g=(d|2)*3|0;p[m+(g<<3)>>3]=s+t*(+p[c+96>>3]-s);p[m+(g+1<<3)>>3]=w+t*(+p[c+104>>3]-w);p[m+(g+2<<3)>>3]=v+t*(+p[c+112>>3]-v);k[b>>2]=m;r=e;return}if(n*q>0.0){v=o/(o-n);t=o/(o-q);g=o<0.0;d=g&1;w=+p[c+24>>3];a=g?3:0;p[m+(a<<3)>>3]=w+v*(+p[c>>3]-w);s=+p[c+32>>3];p[m+(a+1<<3)>>3]=s+v*(+p[c+8>>3]-s);u=+p[c+40>>3];p[m+(a+2<<3)>>3]=u+v*(+p[c+16>>3]-u);a=0-(d^1)&3;p[m+(a<<3)>>3]=w+t*(+p[c+48>>3]-w);p[m+(a+1<<3)>>3]=s+t*(+p[c+56>>3]-s);p[m+(a+2<<3)>>3]=u+t*(+p[c+64>>3]-u);u=+p[c+96>>3];a=(d^3)*3|0;p[m+(a<<3)>>3]=u+v*(+p[c+72>>3]-u);s=+p[c+104>>3];p[m+(a+1<<3)>>3]=s+v*(+p[c+80>>3]-s);w=+p[c+112>>3];p[m+(a+2<<3)>>3]=w+v*(+p[c+88>>3]-w);a=(d|2)*3|0;p[m+(a<<3)>>3]=u+t*(+p[c+120>>3]-u);p[m+(a+1<<3)>>3]=s+t*(+p[c+128>>3]-s);p[m+(a+2<<3)>>3]=w+t*(+p[c+136>>3]-w);k[b>>2]=m;r=e;return}a=n==0.0;d=o==0.0;if(a&d){p[m>>3]=+p[c>>3];p[m+8>>3]=+p[c+8>>3];p[m+16>>3]=+p[c+16>>3];p[m+24>>3]=+p[c+24>>3];p[m+32>>3]=+p[c+32>>3];p[m+40>>3]=+p[c+40>>3];p[m+48>>3]=+p[c+96>>3];p[m+56>>3]=+p[c+104>>3];p[m+64>>3]=+p[c+112>>3];p[m+72>>3]=+p[c+72>>3];p[m+80>>3]=+p[c+80>>3];p[m+88>>3]=+p[c+88>>3];k[b>>2]=m;r=e;return}g=q==0.0;if(a&g){p[m>>3]=+p[c+48>>3];p[m+8>>3]=+p[c+56>>3];p[m+16>>3]=+p[c+64>>3];p[m+24>>3]=+p[c>>3];p[m+32>>3]=+p[c+8>>3];p[m+40>>3]=+p[c+16>>3];p[m+48>>3]=+p[c+72>>3];p[m+56>>3]=+p[c+80>>3];p[m+64>>3]=+p[c+88>>3];p[m+72>>3]=+p[c+120>>3];p[m+80>>3]=+p[c+128>>3];p[m+88>>3]=+p[c+136>>3];k[b>>2]=m;r=e;return}if(d&g){p[m>>3]=+p[c+24>>3];p[m+8>>3]=+p[c+32>>3];p[m+16>>3]=+p[c+40>>3];p[m+24>>3]=+p[c+48>>3];p[m+32>>3]=+p[c+56>>3];p[m+40>>3]=+p[c+64>>3];p[m+48>>3]=+p[c+120>>3];p[m+56>>3]=+p[c+128>>3];p[m+64>>3]=+p[c+136>>3];p[m+72>>3]=+p[c+96>>3];p[m+80>>3]=+p[c+104>>3];p[m+88>>3]=+p[c+112>>3];k[b>>2]=m;r=e;return}e=h+56|0;m=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;x=Q;y=b;vva(e);Qb(y|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);b=B;B=0;do if(b&1){c=Rb()|0;z=Q;A=c}else{k[m>>2]=27560;c=h+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);g=B;B=0;if(g&1){g=Rb()|0;d=Q;Yua(f);Yua(c);Ava(m);z=d;A=g;break}Yua(f);B=0;g=Ia(40,h|0,74946,16)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,i|0,74107,73);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,74963,23);a=B;B=0;if(a&1){a=Rb()|0;C=Q;Yua(i);D=C;E=a;break}B=0;wa(510,l|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;F=Q;G=a;H=1}else{B=0;ua(163,g|0,i|0,j|0,3373,l|0);a=B;B=0;if(a&1)I=1;else{B=0;eb(503,g|0,1240,229);B=0;I=0}a=Rb()|0;C=Q;Yua(l);F=C;G=a;H=I}Yua(j);Yua(i);if(H){D=F;E=G}else{J=F;K=G;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(K|0)}}else{a=Rb()|0;D=Q;E=a}while(0);zb(g|0);J=D;K=E;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(K|0)}d=Rb()|0;J=Q;K=d;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(K|0)}while(0);x=z;y=A;vva(e);Qb(y|0)}function DB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,74987,35)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,74107,73);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,75023,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,3382,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function EB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75327,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function FB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75312,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,54,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function GB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,75047,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75292,19);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,73,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function HB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);Yua(l);Ava(g);m=p;n=o;break}Yua(e);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,c|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,b|0,75268,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);v=u;w=t;break}B=0;wa(510,a|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,c|0,b|0,74,a|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(a);x=u;y=t;z=A}Yua(b);Yua(c);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(D|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function IB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75251,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,100,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function JB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,98621,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,111,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function KB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,99229,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,115,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return +(0.0)}function LB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75240,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,116,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function MB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75231,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,119,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function NB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75211,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,158,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function OB(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,75047,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75190,20);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,185,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function PB(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;f=r;r=r+192|0;e=f+176|0;d=f+40|0;c=f+24|0;b=f+12|0;a=f;f=d+56|0;i=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(f);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;q=Ia(40,d|0,149435,20)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,c|0,75047,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,b|0,75166,23);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);x=w;y=v;break}B=0;wa(510,a|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,c|0,b|0,186,a|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(a);z=w;A=v;C=D}Yua(b);Yua(c);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[d>>2]=27468;k[f>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(f);Qb(F|0)}while(0);l=o;m=p;vva(f);Qb(m|0)}function QB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,188,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return +(0.0)}function RB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75143,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,187,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function SB(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75047,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,75133,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,174,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function TB(a){a=a|0;return}function UB(a){a=a|0;return}function VB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 739:case 738:{j=Rqa(12)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;l=j;m=3;k[b>>2]=m;k[c>>2]=l;r=a;return}case 741:case 740:{j=Rqa(12)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;l=j;m=3;k[b>>2]=m;k[c>>2]=l;r=a;return}case 745:{j=Rqa(24)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;k[j+12>>2]=6;k[j+16>>2]=7;k[j+20>>2]=8;l=j;m=6;k[b>>2]=m;k[c>>2]=l;r=a;return}case 746:{j=Rqa(12)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;l=j;m=3;k[b>>2]=m;k[c>>2]=l;r=a;return}case 747:{j=Rqa(12)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;l=j;m=3;k[b>>2]=m;k[c>>2]=l;r=a;return}case 742:{j=Rqa(24)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;k[j+12>>2]=9;k[j+16>>2]=10;k[j+20>>2]=11;l=j;m=6;k[b>>2]=m;k[c>>2]=l;r=a;return}case 743:{j=Rqa(24)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;k[j+12>>2]=9;k[j+16>>2]=10;k[j+20>>2]=11;l=j;m=6;k[b>>2]=m;k[c>>2]=l;r=a;return}case 748:{j=Rqa(24)|0;k[j>>2]=0;k[j+4>>2]=1;k[j+8>>2]=2;k[j+12>>2]=9;k[j+16>>2]=10;k[j+20>>2]=11;l=j;m=6;k[b>>2]=m;k[c>>2]=l;r=a;return}default:{a=f+56|0;l=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,l|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;o=c;vva(a);Qb(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,l|0);c=B;B=0;do if(c&1){m=Rb()|0;p=Q;q=m}else{k[l>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,l|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;Yua(e);Yua(m);Ava(l);p=j;q=b;break}Yua(e);B=0;b=Ia(40,f|0,132447,13)|0;j=B;B=0;if((((!(j&1)?(B=0,j=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(j)|0,B=0,t=Ia(40,b|0,j|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,75348,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,75425,16);j=B;B=0;if(j&1){j=Rb()|0;b=Q;Yua(g);u=b;v=j;break}B=0;wa(510,i|0,l|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;y=1}else{B=0;ua(163,s|0,g|0,h|0,115,i|0);j=B;B=0;if(j&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}j=Rb()|0;b=Q;Yua(i);w=b;x=j;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(m);Ava(l);vva(a);Qb(C|0)}}else{j=Rb()|0;u=Q;v=j}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(m);Ava(l);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(m);Ava(l);vva(a);Qb(C|0)}while(0);n=p;o=q;vva(a);Qb(o|0)}}}function WB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;g=r;r=r+720|0;h=g;i=XB(0,f)|0;YB(a,h,d,e,f);f=(i|0)>0;if(f){j=0.0;e=0;while(1){k=j+ +p[h+(e<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){l=k;break}else j=k}if(f){j=0.0;e=0;while(1){k=j+ +p[h+(e+i<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){m=k;break}else j=k}if(f){f=i<<1;j=0.0;e=0;while(1){k=j+ +p[h+(e+f<<3)>>3]*+p[c+(e<<3)>>3];e=e+1|0;if((e|0)==(i|0)){n=l;o=m;q=k;break}else j=k}}else{n=l;o=m;q=0.0}}else{n=l;o=0.0;q=0.0}}else{n=0.0;o=0.0;q=0.0}p[b>>3]=n;p[b+8>>3]=o;p[b+16>>3]=q;r=g;return}function XB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;do switch(b|0){case 736:{h=1;r=a;return h|0}case 738:{h=6;r=a;return h|0}case 739:{h=6;r=a;return h|0}case 740:{h=7;r=a;return h|0}case 741:{h=7;r=a;return h|0}case 742:{h=18;r=a;return h|0}case 743:{h=19;r=a;return h|0}case 744:{h=19;r=a;return h|0}case 745:{h=12;r=a;return h|0}case 746:{h=9;r=a;return h|0}case 748:{h=30;r=a;return h|0}case 747:{h=12;r=a;return h|0}case 749:{h=12;r=a;return h|0}case 750:{h=12;r=a;return h|0}case 752:{h=13;r=a;return h|0}case 751:{h=13;r=a;return h|0}case 753:{h=24;r=a;return h|0}case 754:{h=18;r=a;return h|0}case 756:{h=36;r=a;return h|0}case 757:{h=25;r=a;return h|0}case 758:{h=19;r=a;return h|0}case 921:{h=0;r=a;return h|0}default:{i=d+56|0;j=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(i);Qb(n|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){o=Rb()|0;p=Q;q=o}else{k[j>>2]=27560;o=d+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(o);Ava(j);p=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,132447,13)|0;t=B;B=0;if((((!(t&1)?(B=0,t=ya(427,b|0)|0,u=B,B=0,!(u&1)):0)?(u=Lta(t)|0,B=0,v=Ia(40,s|0,t|0,u|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,146481,18)|0,v=B,B=0,!(v&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,75348,76);v=B;B=0;do if(!(v&1)){B=0;eb(502,f|0,75442,13);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(e);w=s;x=t;break}B=0;wa(510,g|0,j|0);t=B;B=0;if(t&1){t=Rb()|0;y=Q;z=t;A=1}else{B=0;ua(163,u|0,e|0,f|0,1054,g|0);t=B;B=0;if(t&1)C=1;else{B=0;eb(503,u|0,1240,229);B=0;C=0}t=Rb()|0;s=Q;Yua(g);y=s;z=t;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}}else{t=Rb()|0;w=Q;x=t}while(0);zb(u|0);D=w;E=x;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}v=Rb()|0;D=Q;E=v;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(E|0)}while(0);m=p;n=q;vva(i);Qb(n|0)}}while(0);return 0}function YB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;a=r;r=r+864|0;f=a+792|0;g=a+720|0;h=a;i=XB(0,e)|0;bC(0,h,d,e);$B(0,f,c,d);eY(g,f);if((i|0)<=0){r=a;return}j=+p[g>>3];k=+p[g+8>>3];l=+p[g+16>>3];f=i<<1;m=+p[g+24>>3];n=+p[g+32>>3];o=+p[g+40>>3];q=+p[g+48>>3];s=+p[g+56>>3];t=+p[g+64>>3];g=0;do{u=+p[h+(g<<3)>>3];d=g+i|0;v=+p[h+(d<<3)>>3];c=g+f|0;w=+p[h+(c<<3)>>3];p[b+(g<<3)>>3]=j*u+k*v+l*w;p[b+(d<<3)>>3]=m*u+n*v+o*w;p[b+(c<<3)>>3]=q*u+s*v+t*w;g=g+1|0}while((g|0)!=(i|0));r=a;return}function ZB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0.0,j=0.0,k=0.0;a=r;r=r+240|0;f=a;g=XB(0,e)|0;_B(0,f,d,e);if((g|0)>0){h=0;i=0.0}else{j=0.0;p[b>>3]=j;r=a;return}while(1){k=i+ +p[f+(h<<3)>>3]*+p[c+(h<<3)>>3];h=h+1|0;if((h|0)==(g|0)){j=k;break}else i=k}p[b>>3]=j;r=a;return}function _B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,l=0,m=0.0,n=0,o=0,q=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;j=+p[c+64>>3];do switch(d|0){case 736:{p[b>>3]=1.0;r=a;return}case 739:case 738:{l=c+40|0;m=1.0-j;p[b>>3]=m*+p[l>>3]*.5;n=c+48|0;p[b+8>>3]=m*+p[n>>3]*.5;o=c+56|0;p[b+16>>3]=m*+p[o>>3]*.5;m=j+1.0;p[b+24>>3]=m*+p[l>>3]*.5;p[b+32>>3]=m*+p[n>>3]*.5;p[b+40>>3]=m*+p[o>>3]*.5;r=a;return}case 741:case 740:{o=c+40|0;m=1.0-j;p[b>>3]=m*+p[o>>3]*.5;n=c+48|0;p[b+8>>3]=m*+p[n>>3]*.5;l=c+56|0;p[b+16>>3]=m*+p[l>>3]*.5;q=j+1.0;p[b+24>>3]=q*+p[o>>3]*.5;p[b+32>>3]=q*+p[n>>3]*.5;p[b+40>>3]=q*+p[l>>3]*.5;p[b+48>>3]=m*(q*(+p[o>>3]*27.0*+p[n>>3]*+p[l>>3]));r=a;return}case 745:{l=c+40|0;q=+p[l>>3];m=1.0-j;p[b>>3]=m*(q*(q*2.0+-1.0))*.5;n=c+48|0;q=+p[n>>3];p[b+8>>3]=m*(q*(q*2.0+-1.0))*.5;o=c+56|0;q=+p[o>>3];p[b+16>>3]=m*(q*(q*2.0+-1.0))*.5;q=+p[l>>3];s=j+1.0;p[b+24>>3]=s*(q*(q*2.0+-1.0))*.5;q=+p[n>>3];p[b+32>>3]=s*(q*(q*2.0+-1.0))*.5;q=+p[o>>3];p[b+40>>3]=s*(q*(q*2.0+-1.0))*.5;p[b+48>>3]=m*(+p[o>>3]*4.0*+p[n>>3])*.5;p[b+56>>3]=m*(+p[o>>3]*4.0*+p[l>>3])*.5;p[b+64>>3]=m*(+p[l>>3]*4.0*+p[n>>3])*.5;p[b+72>>3]=s*(+p[o>>3]*4.0*+p[n>>3])*.5;p[b+80>>3]=s*(+p[o>>3]*4.0*+p[l>>3])*.5;p[b+88>>3]=s*(+p[l>>3]*4.0*+p[n>>3])*.5;r=a;return}case 746:{n=c+40|0;s=j+-1.0;p[b>>3]=s*(j*+p[n>>3])*.5;l=c+48|0;p[b+8>>3]=s*(j*+p[l>>3])*.5;o=c+56|0;p[b+16>>3]=s*(j*+p[o>>3])*.5;s=j+1.0;p[b+24>>3]=s*(j*+p[n>>3])*.5;p[b+32>>3]=s*(j*+p[l>>3])*.5;p[b+40>>3]=s*(j*+p[o>>3])*.5;s=1.0-j*j;p[b+48>>3]=s*+p[n>>3];p[b+56>>3]=s*+p[l>>3];p[b+64>>3]=s*+p[o>>3];r=a;return}case 742:{o=c+40|0;s=+p[o>>3];m=j+-1.0;p[b>>3]=m*(j*(s*(s*2.0+-1.0)))*.5;l=c+48|0;s=+p[l>>3];p[b+8>>3]=m*(j*(s*(s*2.0+-1.0)))*.5;n=c+56|0;s=+p[n>>3];p[b+16>>3]=m*(j*(s*(s*2.0+-1.0)))*.5;s=+p[o>>3];q=j+1.0;p[b+24>>3]=q*(j*(s*(s*2.0+-1.0)))*.5;s=+p[l>>3];p[b+32>>3]=q*(j*(s*(s*2.0+-1.0)))*.5;s=+p[n>>3];p[b+40>>3]=q*(j*(s*(s*2.0+-1.0)))*.5;s=+p[o>>3];t=1.0-j*j;p[b+48>>3]=t*(s*(s*2.0+-1.0));s=+p[l>>3];p[b+56>>3]=t*(s*(s*2.0+-1.0));s=+p[n>>3];p[b+64>>3]=t*(s*(s*2.0+-1.0));p[b+72>>3]=m*(j*(+p[n>>3]*4.0*+p[l>>3]))*.5;p[b+80>>3]=m*(j*(+p[n>>3]*4.0*+p[o>>3]))*.5;p[b+88>>3]=m*(j*(+p[o>>3]*4.0*+p[l>>3]))*.5;p[b+96>>3]=q*(j*(+p[n>>3]*4.0*+p[l>>3]))*.5;p[b+104>>3]=q*(j*(+p[n>>3]*4.0*+p[o>>3]))*.5;p[b+112>>3]=q*(j*(+p[o>>3]*4.0*+p[l>>3]))*.5;p[b+120>>3]=t*(+p[n>>3]*4.0*+p[l>>3]);p[b+128>>3]=t*(+p[n>>3]*4.0*+p[o>>3]);p[b+136>>3]=t*(+p[o>>3]*4.0*+p[l>>3]);r=a;return}case 744:case 743:{l=c+40|0;t=+p[l>>3];q=j+-1.0;p[b>>3]=q*(j*(t*(t*2.0+-1.0)))*.5;o=c+48|0;t=+p[o>>3];p[b+8>>3]=q*(j*(t*(t*2.0+-1.0)))*.5;n=c+56|0;t=+p[n>>3];p[b+16>>3]=q*(j*(t*(t*2.0+-1.0)))*.5;t=+p[l>>3];m=j+1.0;p[b+24>>3]=m*(j*(t*(t*2.0+-1.0)))*.5;t=+p[o>>3];p[b+32>>3]=m*(j*(t*(t*2.0+-1.0)))*.5;t=+p[n>>3];p[b+40>>3]=m*(j*(t*(t*2.0+-1.0)))*.5;t=+p[l>>3];s=1.0-j*j;p[b+48>>3]=s*(t*(t*2.0+-1.0));t=+p[o>>3];p[b+56>>3]=s*(t*(t*2.0+-1.0));t=+p[n>>3];p[b+64>>3]=s*(t*(t*2.0+-1.0));p[b+72>>3]=q*(j*(+p[n>>3]*4.0*+p[o>>3]))*.5;p[b+80>>3]=q*(j*(+p[n>>3]*4.0*+p[l>>3]))*.5;p[b+88>>3]=q*(j*(+p[l>>3]*4.0*+p[o>>3]))*.5;p[b+96>>3]=m*(j*(+p[n>>3]*4.0*+p[o>>3]))*.5;p[b+104>>3]=m*(j*(+p[n>>3]*4.0*+p[l>>3]))*.5;p[b+112>>3]=m*(j*(+p[l>>3]*4.0*+p[o>>3]))*.5;p[b+120>>3]=s*(+p[n>>3]*4.0*+p[o>>3]);p[b+128>>3]=s*(+p[n>>3]*4.0*+p[l>>3]);p[b+136>>3]=s*(+p[l>>3]*4.0*+p[o>>3]);p[b+144>>3]=(1.0-j)*(m*(+p[l>>3]*27.0*+p[o>>3]*+p[n>>3]));r=a;return}case 748:{n=c+40|0;m=+p[n>>3];s=j+-1.0;q=j+-.5;t=j+.5;p[b>>3]=t*(j*(q*(s*(m*(m*2.0+-1.0)*.6666666666666666))));o=c+48|0;m=+p[o>>3];p[b+8>>3]=t*(j*(q*(s*(m*(m*2.0+-1.0)*.6666666666666666))));l=c+56|0;m=+p[l>>3];p[b+16>>3]=t*(j*(q*(s*(m*(m*2.0+-1.0)*.6666666666666666))));m=+p[n>>3];u=j+1.0;p[b+24>>3]=u*(t*(j*(q*(m*(m*2.0+-1.0)*.6666666666666666))));m=+p[o>>3];p[b+32>>3]=u*(t*(j*(q*(m*(m*2.0+-1.0)*.6666666666666666))));m=+p[l>>3];p[b+40>>3]=u*(t*(j*(q*(m*(m*2.0+-1.0)*.6666666666666666))));m=+p[n>>3];p[b+48>>3]=u*(t*(q*(s*(m*(m*2.0+-1.0)*4.0))));m=+p[o>>3];p[b+56>>3]=u*(t*(q*(s*(m*(m*2.0+-1.0)*4.0))));m=+p[l>>3];p[b+64>>3]=u*(t*(q*(s*(m*(m*2.0+-1.0)*4.0))));p[b+72>>3]=t*(j*(q*(s*(+p[o>>3]*4.0*+p[l>>3]*.6666666666666666))));p[b+80>>3]=t*(j*(q*(s*(+p[n>>3]*4.0*+p[l>>3]*.6666666666666666))));p[b+88>>3]=t*(j*(q*(s*(+p[n>>3]*4.0*+p[o>>3]*.6666666666666666))));p[b+96>>3]=u*(t*(j*(q*(+p[o>>3]*4.0*+p[l>>3]*.6666666666666666))));p[b+104>>3]=u*(t*(j*(q*(+p[n>>3]*4.0*+p[l>>3]*.6666666666666666))));p[b+112>>3]=u*(t*(j*(q*(+p[n>>3]*4.0*+p[o>>3]*.6666666666666666))));m=+p[n>>3];p[b+120>>3]=u*(j*(q*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));m=+p[o>>3];p[b+128>>3]=u*(j*(q*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));m=+p[l>>3];p[b+136>>3]=u*(j*(q*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));m=+p[n>>3];p[b+144>>3]=u*(t*(j*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));m=+p[o>>3];p[b+152>>3]=u*(t*(j*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));m=+p[l>>3];p[b+160>>3]=u*(t*(j*(s*(m*(m*2.0+-1.0)*-2.6666666666666665))));p[b+168>>3]=u*(j*(q*(s*(+p[o>>3]*4.0*+p[l>>3]*-2.6666666666666665))));p[b+176>>3]=u*(j*(q*(s*(+p[n>>3]*4.0*+p[l>>3]*-2.6666666666666665))));p[b+184>>3]=u*(j*(q*(s*(+p[n>>3]*4.0*+p[o>>3]*-2.6666666666666665))));p[b+192>>3]=u*(t*(q*(s*(+p[o>>3]*4.0*+p[l>>3]*4.0))));p[b+200>>3]=u*(t*(q*(s*(+p[n>>3]*4.0*+p[l>>3]*4.0))));p[b+208>>3]=u*(t*(q*(s*(+p[n>>3]*4.0*+p[o>>3]*4.0))));p[b+216>>3]=u*(t*(j*(s*(+p[o>>3]*4.0*+p[l>>3]*-2.6666666666666665))));p[b+224>>3]=u*(t*(j*(s*(+p[n>>3]*4.0*+p[l>>3]*-2.6666666666666665))));p[b+232>>3]=u*(t*(j*(s*(+p[n>>3]*4.0*+p[o>>3]*-2.6666666666666665))));r=a;return}case 747:{o=c+40|0;s=j+-1.0;t=j+-.3333333333333333;u=j+.3333333333333333;p[b>>3]=u*(t*(s*(+p[o>>3]*-.5625)));n=c+48|0;p[b+8>>3]=u*(t*(s*(+p[n>>3]*-.5625)));l=c+56|0;p[b+16>>3]=u*(t*(s*(+p[l>>3]*-.5625)));q=j+1.0;p[b+24>>3]=q*(u*(t*(+p[o>>3]*.5625)));p[b+32>>3]=q*(u*(t*(+p[n>>3]*.5625)));p[b+40>>3]=q*(u*(t*(+p[l>>3]*.5625)));p[b+48>>3]=q*(t*(s*(+p[o>>3]*1.6875)));p[b+56>>3]=q*(t*(s*(+p[n>>3]*1.6875)));p[b+64>>3]=q*(t*(s*(+p[l>>3]*1.6875)));p[b+72>>3]=q*(u*(s*(+p[o>>3]*-1.6875)));p[b+80>>3]=q*(u*(s*(+p[n>>3]*-1.6875)));p[b+88>>3]=q*(u*(s*(+p[l>>3]*-1.6875)));r=a;return}default:{l=f+56|0;n=f+4|0;k[f>>2]=27524;k[l>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;v=Q;w=o;vva(l);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[l>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){x=Rb()|0;y=Q;z=x}else{k[n>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(n);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,132447,13)|0;C=B;B=0;if((((!(C&1)?(B=0,C=ya(427,d|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(C)|0,B=0,E=Ia(40,A|0,C|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Ia(40,E|0,146481,18)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,g|0,75348,76);E=B;B=0;do if(!(E&1)){B=0;eb(502,h|0,75456,17);C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(g);F=A;G=C;break}B=0;wa(510,i|0,n|0);C=B;B=0;if(C&1){C=Rb()|0;H=Q;I=C;J=1}else{B=0;ua(163,D|0,g|0,h|0,431,i|0);C=B;B=0;if(C&1)K=1;else{B=0;eb(503,D|0,1240,229);B=0;K=0}C=Rb()|0;A=Q;Yua(i);H=A;I=C;J=K}Yua(h);Yua(g);if(J){F=H;G=I}else{L=H;M=I;k[f>>2]=27468;k[l>>2]=27488;k[n>>2]=27560;Yua(x);Ava(n);vva(l);Qb(M|0)}}else{C=Rb()|0;F=Q;G=C}while(0);zb(D|0);L=F;M=G;k[f>>2]=27468;k[l>>2]=27488;k[n>>2]=27560;Yua(x);Ava(n);vva(l);Qb(M|0)}E=Rb()|0;L=Q;M=E;k[f>>2]=27468;k[l>>2]=27488;k[n>>2]=27560;Yua(x);Ava(n);vva(l);Qb(M|0)}while(0);v=y;w=z;vva(l);Qb(w|0)}}while(0)}function $B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;e=+p[d+48>>3]-+p[d+40>>3];f=+p[d+56>>3]*1.7320508075688772;g=+p[d+64>>3];h=+p[c>>3];i=+p[c+24>>3];j=+p[c+48>>3];k=+p[c+72>>3];l=+p[c+96>>3];m=+p[c+120>>3];n=+p[c+8>>3];o=+p[c+32>>3];q=+p[c+56>>3];r=+p[c+80>>3];s=+p[c+104>>3];t=+p[c+128>>3];u=+p[c+16>>3];v=+p[c+40>>3];w=+p[c+64>>3];x=+p[c+88>>3];y=+p[c+112>>3];z=+p[c+136>>3];A=h-i-k+l;p[b>>3]=(i-h-k+l)*.25+g*(A*.25);B=j*2.0;j=m*2.0;m=(h+i-B-k-l+j)*.14433756729740643;p[b+24>>3]=(-h-i+B-k-l+j)*.14433756729740643+g*m;p[b+48>>3]=(k+(l-h-i))*.25+(e*(A*0.0)+f*m);m=(n-o-r+s)*.25;p[b+8>>3]=(o-n-r+s)*.25+g*m;A=q*2.0;q=t*2.0;t=(n+o-A-r-s+q)*.14433756729740643;p[b+32>>3]=(-n-o+A-r-s+q)*.14433756729740643+g*t;p[b+56>>3]=(r-n+s-o)*.25+(e*m+f*t);t=(u-v-x+y)*.25;p[b+16>>3]=(v-u-x+y)*.25+g*t;m=w*2.0;w=z*2.0;z=(u+v-m-x-y+w)*.14433756729740643;p[b+40>>3]=(-u-v+m-x-y+w)*.14433756729740643+g*z;p[b+64>>3]=(x+(y-u-v))*.25+(e*t+f*z);return}function aC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+272|0;e=a+248|0;f=a;g=a+112|0;h=a+96|0;i=a+84|0;j=a+72|0;$B(0,f,c,d);dY(b,f);if(!(+p[b>>3]<0.0)){r=a;return}a=g+56|0;b=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,b|0);f=B;B=0;if(f&1){f=Rb()|0;l=Q;m=f;vva(a);Qb(m|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);f=B;B=0;do if(f&1){d=Rb()|0;n=Q;o=d}else{k[b>>2]=27560;d=g+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);c=B;B=0;if(c&1){c=Rb()|0;q=Q;Yua(e);Yua(d);Ava(b);n=q;o=c;break}Yua(e);B=0;c=Ia(40,g|0,75474,30)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,h|0,75348,76);q=B;B=0;do if(!(q&1)){B=0;eb(502,i|0,75505,22);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(h);u=t;v=s;break}B=0;wa(510,j|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,c|0,h|0,i|0,249,j|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,c|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(j);w=t;x=s;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(a);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(c|0);A=u;C=v;k[g>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(a);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[g>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(a);Qb(C|0)}while(0);l=n;m=o;vva(a);Qb(m|0)}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0,o=0,q=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;j=+p[c+64>>3];do switch(d|0){case 736:{k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;r=a;return}case 739:case 738:{l=j+-1.0;p[b>>3]=l*.25;m=l*.14433756729740643;p[b+48>>3]=m;n=c+40|0;p[b+96>>3]=+p[n>>3]*-.5;l=1.0-j;p[b+8>>3]=l*.25;p[b+56>>3]=m;o=c+48|0;p[b+104>>3]=+p[o>>3]*-.5;p[b+16>>3]=0.0;p[b+64>>3]=l*.28867513459481287;q=c+56|0;p[b+112>>3]=+p[q>>3]*-.5;l=j+1.0;p[b+24>>3]=l*-.25;m=l*-.14433756729740643;p[b+72>>3]=m;p[b+120>>3]=+p[n>>3]*.5;p[b+32>>3]=l*.25;p[b+80>>3]=m;p[b+128>>3]=+p[o>>3]*.5;p[b+40>>3]=0.0;p[b+88>>3]=l*.28867513459481287;p[b+136>>3]=+p[q>>3]*.5;r=a;return}case 741:case 740:{l=j+-1.0;p[b>>3]=l*.25;m=l*.14433756729740643;p[b+56>>3]=m;q=c+40|0;p[b+112>>3]=+p[q>>3]*-.5;l=1.0-j;p[b+8>>3]=l*.25;p[b+64>>3]=m;o=c+48|0;p[b+120>>3]=+p[o>>3]*-.5;p[b+16>>3]=0.0;p[b+72>>3]=l*.28867513459481287;n=c+56|0;p[b+128>>3]=+p[n>>3]*-.5;m=j+1.0;p[b+24>>3]=m*-.25;s=m*-.14433756729740643;p[b+80>>3]=s;p[b+136>>3]=+p[q>>3]*.5;p[b+32>>3]=m*.25;p[b+88>>3]=s;p[b+144>>3]=+p[o>>3]*.5;p[b+40>>3]=0.0;p[b+96>>3]=m*.28867513459481287;p[b+152>>3]=+p[n>>3]*.5;s=l*(m*27.0);m=+p[n>>3];p[b+48>>3]=s*(+p[o>>3]*-.5*m+m*(+p[q>>3]*.5));m=+p[o>>3];l=+p[n>>3];t=+p[q>>3];p[b+104>>3]=s*1.7320508075688772*(m*(t*.3333333333333333)+(m*-.16666666666666666*l-l*(t*.16666666666666666)));p[b+160>>3]=j*(+p[q>>3]*-54.0*+p[o>>3]*+p[n>>3]);r=a;return}case 745:{t=1.0-j;l=t*.5;n=c+40|0;p[b>>3]=l*(.5-+p[n>>3]*2.0);p[b+96>>3]=l*(.28867513459481287-+p[n>>3]*1.1547005383792515);m=+p[n>>3];p[b+192>>3]=m*-.5*(m*2.0+-1.0);o=c+48|0;p[b+8>>3]=l*(+p[o>>3]*2.0+-.5);p[b+104>>3]=l*(.28867513459481287-+p[o>>3]*1.1547005383792515);m=+p[o>>3];p[b+200>>3]=m*-.5*(m*2.0+-1.0);p[b+16>>3]=0.0;q=c+56|0;p[b+112>>3]=l*(+p[q>>3]*2.309401076758503+-.5773502691896257);m=+p[q>>3];p[b+208>>3]=m*-.5*(m*2.0+-1.0);m=j+1.0;s=m*.5;p[b+24>>3]=s*(.5-+p[n>>3]*2.0);p[b+120>>3]=s*(.28867513459481287-+p[n>>3]*1.1547005383792515);u=+p[n>>3];p[b+216>>3]=u*.5*(u*2.0+-1.0);p[b+32>>3]=s*(+p[o>>3]*2.0+-.5);p[b+128>>3]=s*(.28867513459481287-+p[o>>3]*1.1547005383792515);u=+p[o>>3];p[b+224>>3]=u*.5*(u*2.0+-1.0);p[b+40>>3]=0.0;p[b+136>>3]=s*(+p[q>>3]*2.309401076758503+-.5773502691896257);u=+p[q>>3];p[b+232>>3]=u*.5*(u*2.0+-1.0);p[b+48>>3]=t*+p[q>>3];p[b+144>>3]=l*(+p[o>>3]*2.309401076758503-+p[q>>3]*1.1547005383792515);p[b+240>>3]=+p[q>>3]*-2.0*+p[o>>3];p[b+56>>3]=-(t*+p[q>>3]);p[b+152>>3]=l*(+p[n>>3]*2.309401076758503-+p[q>>3]*1.1547005383792515);p[b+248>>3]=+p[q>>3]*-2.0*+p[n>>3];p[b+64>>3]=t*(+p[n>>3]-+p[o>>3]);p[b+160>>3]=l*((+p[n>>3]+ +p[o>>3])*-1.1547005383792515);p[b+256>>3]=+p[n>>3]*-2.0*+p[o>>3];p[b+72>>3]=m*+p[q>>3];p[b+168>>3]=s*(+p[o>>3]*2.309401076758503-+p[q>>3]*1.1547005383792515);p[b+264>>3]=+p[q>>3]*2.0*+p[o>>3];p[b+80>>3]=-(m*+p[q>>3]);p[b+176>>3]=s*(+p[n>>3]*2.309401076758503-+p[q>>3]*1.1547005383792515);p[b+272>>3]=+p[q>>3]*2.0*+p[n>>3];p[b+88>>3]=m*(+p[n>>3]-+p[o>>3]);p[b+184>>3]=s*((+p[n>>3]+ +p[o>>3])*-1.1547005383792515);p[b+280>>3]=+p[n>>3]*2.0*+p[o>>3];r=a;return}case 746:{s=-j;m=j+-1.0;p[b>>3]=m*s*.25;l=j*-.14433756729740643;t=l*m;p[b+72>>3]=t;u=j*2.0;v=(u+-1.0)*.5;o=c+40|0;p[b+144>>3]=v*+p[o>>3];p[b+8>>3]=j*m*.25;p[b+80>>3]=t;n=c+48|0;p[b+152>>3]=v*+p[n>>3];p[b+16>>3]=0.0;t=j*.28867513459481287;p[b+88>>3]=t*m;q=c+56|0;p[b+160>>3]=v*+p[q>>3];v=j+1.0;p[b+24>>3]=v*s*.25;s=l*v;p[b+96>>3]=s;l=(u+1.0)*.5;p[b+168>>3]=l*+p[o>>3];p[b+32>>3]=j*v*.25;p[b+104>>3]=s;p[b+176>>3]=l*+p[n>>3];p[b+40>>3]=0.0;p[b+112>>3]=t*v;p[b+184>>3]=l*+p[q>>3];l=1.0-j*j;p[b+48>>3]=l*-.5;v=l*-.28867513459481287;p[b+120>>3]=v;t=j*-2.0;p[b+192>>3]=t*+p[o>>3];p[b+56>>3]=l*.5;p[b+128>>3]=v;p[b+200>>3]=t*+p[n>>3];p[b+64>>3]=0.0;p[b+136>>3]=l*.5773502691896257;p[b+208>>3]=t*+p[q>>3];r=a;return}case 742:{t=j*.5;l=j+-1.0;v=t*l;q=c+40|0;p[b>>3]=v*(.5-+p[q>>3]*2.0);p[b+144>>3]=v*(.28867513459481287-+p[q>>3]*1.1547005383792515);s=j*2.0;u=s+-1.0;m=u*.5;w=+p[q>>3];p[b+288>>3]=m*w*(w*2.0+-1.0);n=c+48|0;p[b+8>>3]=v*(+p[n>>3]*2.0+-.5);p[b+152>>3]=v*(.28867513459481287-+p[n>>3]*1.1547005383792515);w=+p[n>>3];p[b+296>>3]=m*w*(w*2.0+-1.0);p[b+16>>3]=0.0;o=c+56|0;p[b+160>>3]=v*(+p[o>>3]*2.309401076758503+-.5773502691896257);w=+p[o>>3];p[b+304>>3]=m*w*(w*2.0+-1.0);w=j+1.0;m=t*w;p[b+24>>3]=m*(.5-+p[q>>3]*2.0);p[b+168>>3]=m*(.28867513459481287-+p[q>>3]*1.1547005383792515);t=s+1.0;s=t*.5;x=+p[q>>3];p[b+312>>3]=s*x*(x*2.0+-1.0);p[b+32>>3]=m*(+p[n>>3]*2.0+-.5);p[b+176>>3]=m*(.28867513459481287-+p[n>>3]*1.1547005383792515);x=+p[n>>3];p[b+320>>3]=s*x*(x*2.0+-1.0);p[b+40>>3]=0.0;p[b+184>>3]=m*(+p[o>>3]*2.309401076758503+-.5773502691896257);x=+p[o>>3];p[b+328>>3]=s*x*(x*2.0+-1.0);x=1.0-j*j;p[b+48>>3]=x*(.5-+p[q>>3]*2.0);p[b+192>>3]=x*(.28867513459481287-+p[q>>3]*1.1547005383792515);s=j*-2.0;y=+p[q>>3];p[b+336>>3]=s*y*(y*2.0+-1.0);p[b+56>>3]=x*(+p[n>>3]*2.0+-.5);p[b+200>>3]=x*(.28867513459481287-+p[n>>3]*1.1547005383792515);y=+p[n>>3];p[b+344>>3]=s*y*(y*2.0+-1.0);p[b+64>>3]=0.0;p[b+208>>3]=x*(+p[o>>3]*2.309401076758503+-.5773502691896257);y=+p[o>>3];p[b+352>>3]=s*y*(y*2.0+-1.0);y=j*l;p[b+72>>3]=y*+p[o>>3];p[b+216>>3]=v*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+360>>3]=u*(+p[o>>3]*2.0*+p[n>>3]);z=-j;p[b+80>>3]=l*z*+p[o>>3];p[b+224>>3]=v*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+368>>3]=u*(+p[o>>3]*2.0*+p[q>>3]);p[b+88>>3]=y*(+p[q>>3]-+p[n>>3]);p[b+232>>3]=v*((+p[q>>3]+ +p[n>>3])*-1.1547005383792515);p[b+376>>3]=u*(+p[q>>3]*2.0*+p[n>>3]);u=j*w;p[b+96>>3]=u*+p[o>>3];p[b+240>>3]=m*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+384>>3]=t*(+p[o>>3]*2.0*+p[n>>3]);p[b+104>>3]=w*z*+p[o>>3];p[b+248>>3]=m*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+392>>3]=t*(+p[o>>3]*2.0*+p[q>>3]);p[b+112>>3]=u*(+p[q>>3]-+p[n>>3]);p[b+256>>3]=m*((+p[q>>3]+ +p[n>>3])*-1.1547005383792515);p[b+400>>3]=t*(+p[q>>3]*2.0*+p[n>>3]);p[b+120>>3]=x*(+p[o>>3]*2.0);p[b+264>>3]=x*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);t=s*4.0;p[b+408>>3]=t*+p[o>>3]*+p[n>>3];p[b+128>>3]=x*(+p[o>>3]*-2.0);p[b+272>>3]=x*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+416>>3]=t*+p[o>>3]*+p[q>>3];p[b+136>>3]=x*((+p[q>>3]-+p[n>>3])*2.0);p[b+280>>3]=x*((+p[q>>3]+ +p[n>>3])*-1.1547005383792515);p[b+424>>3]=t*+p[q>>3]*+p[n>>3];r=a;return}case 744:case 743:{t=j*.5;x=j+-1.0;s=t*x;n=c+40|0;p[b>>3]=s*(.5-+p[n>>3]*2.0);p[b+152>>3]=s*(.28867513459481287-+p[n>>3]*1.1547005383792515);m=j*2.0;u=m+-1.0;z=u*.5;w=+p[n>>3];p[b+304>>3]=z*w*(w*2.0+-1.0);q=c+48|0;p[b+8>>3]=s*(+p[q>>3]*2.0+-.5);p[b+160>>3]=s*(.28867513459481287-+p[q>>3]*1.1547005383792515);w=+p[q>>3];p[b+312>>3]=z*w*(w*2.0+-1.0);p[b+16>>3]=0.0;o=c+56|0;p[b+168>>3]=s*(+p[o>>3]*2.309401076758503+-.5773502691896257);w=+p[o>>3];p[b+320>>3]=z*w*(w*2.0+-1.0);w=j+1.0;z=t*w;p[b+24>>3]=z*(.5-+p[n>>3]*2.0);p[b+176>>3]=z*(.28867513459481287-+p[n>>3]*1.1547005383792515);t=m+1.0;m=t*.5;v=+p[n>>3];p[b+328>>3]=m*v*(v*2.0+-1.0);p[b+32>>3]=z*(+p[q>>3]*2.0+-.5);p[b+184>>3]=z*(.28867513459481287-+p[q>>3]*1.1547005383792515);v=+p[q>>3];p[b+336>>3]=m*v*(v*2.0+-1.0);p[b+40>>3]=0.0;p[b+192>>3]=z*(+p[o>>3]*2.309401076758503+-.5773502691896257);v=+p[o>>3];p[b+344>>3]=m*v*(v*2.0+-1.0);v=1.0-j*j;p[b+48>>3]=v*(.5-+p[n>>3]*2.0);p[b+200>>3]=v*(.28867513459481287-+p[n>>3]*1.1547005383792515);m=j*-2.0;y=+p[n>>3];p[b+352>>3]=m*y*(y*2.0+-1.0);p[b+56>>3]=v*(+p[q>>3]*2.0+-.5);p[b+208>>3]=v*(.28867513459481287-+p[q>>3]*1.1547005383792515);y=+p[q>>3];p[b+360>>3]=m*y*(y*2.0+-1.0);p[b+64>>3]=0.0;p[b+216>>3]=v*(+p[o>>3]*2.309401076758503+-.5773502691896257);y=+p[o>>3];p[b+368>>3]=m*y*(y*2.0+-1.0);y=j*x;p[b+72>>3]=y*+p[o>>3];p[b+224>>3]=s*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+376>>3]=u*(+p[o>>3]*2.0*+p[q>>3]);l=-j;p[b+80>>3]=x*l*+p[o>>3];p[b+232>>3]=s*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+384>>3]=u*(+p[o>>3]*2.0*+p[n>>3]);p[b+88>>3]=y*(+p[n>>3]-+p[q>>3]);p[b+240>>3]=s*((+p[n>>3]+ +p[q>>3])*-1.1547005383792515);p[b+392>>3]=u*(+p[n>>3]*2.0*+p[q>>3]);u=j*w;p[b+96>>3]=u*+p[o>>3];p[b+248>>3]=z*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+400>>3]=t*(+p[o>>3]*2.0*+p[q>>3]);p[b+104>>3]=w*l*+p[o>>3];p[b+256>>3]=z*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+408>>3]=t*(+p[o>>3]*2.0*+p[n>>3]);p[b+112>>3]=u*(+p[n>>3]-+p[q>>3]);p[b+264>>3]=z*((+p[n>>3]+ +p[q>>3])*-1.1547005383792515);p[b+416>>3]=t*(+p[n>>3]*2.0*+p[q>>3]);p[b+120>>3]=v*(+p[o>>3]*2.0);p[b+272>>3]=v*(+p[q>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);t=m*4.0;p[b+424>>3]=t*+p[o>>3]*+p[q>>3];p[b+128>>3]=v*(+p[o>>3]*-2.0);p[b+280>>3]=v*(+p[n>>3]*2.309401076758503-+p[o>>3]*1.1547005383792515);p[b+432>>3]=t*+p[o>>3]*+p[n>>3];p[b+136>>3]=v*((+p[n>>3]-+p[q>>3])*2.0);p[b+288>>3]=v*((+p[n>>3]+ +p[q>>3])*-1.1547005383792515);p[b+440>>3]=t*+p[n>>3]*+p[q>>3];t=(1.0-j)*(w*27.0);w=+p[o>>3];p[b+144>>3]=t*(+p[q>>3]*-.5*w+w*(+p[n>>3]*.5));w=+p[q>>3];v=+p[o>>3];m=+p[n>>3];p[b+296>>3]=t*1.7320508075688772*(w*(m*.3333333333333333)+(w*-.16666666666666666*v-v*(m*.16666666666666666)));p[b+448>>3]=j*(+p[n>>3]*-54.0*+p[q>>3]*+p[o>>3]);r=a;return}case 748:{o=c+40|0;m=j+-1.0;v=j+-.5;w=j+.5;p[b>>3]=w*(j*(v*(m*((.5-+p[o>>3]*2.0)*.6666666666666666))));p[b+240>>3]=w*(j*(v*(m*((.28867513459481287-+p[o>>3]*1.1547005383792515)*.6666666666666666))));t=+p[o>>3];z=j*2.0;u=z+-1.0;l=v*u;s=j*z;y=m*s+w*l;p[b+480>>3]=y*(t*(t*2.0+-1.0)*2.0/3.0);q=c+48|0;p[b+8>>3]=w*(j*(v*(m*((+p[q>>3]*2.0+-.5)*.6666666666666666))));p[b+248>>3]=w*(j*(v*(m*((.28867513459481287-+p[q>>3]*1.1547005383792515)*.6666666666666666))));t=+p[q>>3];p[b+488>>3]=y*(t*(t*2.0+-1.0)*2.0/3.0);p[b+16>>3]=0.0;n=c+56|0;p[b+256>>3]=w*(j*(v*(m*((+p[n>>3]*2.309401076758503+-.5773502691896257)*.6666666666666666))));t=+p[n>>3];p[b+496>>3]=y*(t*(t*2.0+-1.0)*2.0/3.0);t=j+1.0;p[b+24>>3]=t*(w*(j*(v*((.5-+p[o>>3]*2.0)*.6666666666666666))));p[b+264>>3]=t*(w*(j*(v*((.28867513459481287-+p[o>>3]*1.1547005383792515)*.6666666666666666))));x=+p[o>>3];A=t*s+w*(v*(z+1.0));p[b+504>>3]=A*(x*(x*2.0+-1.0)*2.0/3.0);p[b+32>>3]=t*(w*(j*(v*((+p[q>>3]*2.0+-.5)*.6666666666666666))));p[b+272>>3]=t*(w*(j*(v*((.28867513459481287-+p[q>>3]*1.1547005383792515)*.6666666666666666))));x=+p[q>>3];p[b+512>>3]=A*(x*(x*2.0+-1.0)*2.0/3.0);p[b+40>>3]=0.0;p[b+280>>3]=t*(w*(j*(v*((+p[n>>3]*2.309401076758503+-.5773502691896257)*.6666666666666666))));x=+p[n>>3];p[b+520>>3]=A*(x*(x*2.0+-1.0)*2.0/3.0);p[b+48>>3]=t*(w*(v*(m*((.5-+p[o>>3]*2.0)*4.0))));p[b+288>>3]=t*(w*(v*(m*((.28867513459481287-+p[o>>3]*1.1547005383792515)*4.0))));x=+p[o>>3];s=j*(j*(j*4.0))-j*2.5;p[b+528>>3]=s*(x*(x*2.0+-1.0)*4.0);p[b+56>>3]=t*(w*(v*(m*((+p[q>>3]*2.0+-.5)*4.0))));p[b+296>>3]=t*(w*(v*(m*((.28867513459481287-+p[q>>3]*1.1547005383792515)*4.0))));x=+p[q>>3];p[b+536>>3]=s*(x*(x*2.0+-1.0)*4.0);p[b+64>>3]=0.0;p[b+304>>3]=t*(w*(v*(m*((+p[n>>3]*2.309401076758503+-.5773502691896257)*4.0))));x=+p[n>>3];p[b+544>>3]=s*(x*(x*2.0+-1.0)*4.0);p[b+72>>3]=w*(j*(v*(m*(+p[n>>3]*2.0*2.0/3.0))));p[b+312>>3]=w*(j*(v*(m*((+p[q>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*.6666666666666666))));p[b+552>>3]=y*(+p[q>>3]*4.0*+p[n>>3]*.6666666666666666);p[b+80>>3]=w*(j*(v*(m*(+p[n>>3]*-2.0*2.0/3.0))));p[b+320>>3]=w*(j*(v*(m*((+p[o>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*.6666666666666666))));p[b+560>>3]=y*(+p[n>>3]*4.0*+p[o>>3]*.6666666666666666);p[b+88>>3]=w*(j*(v*(m*((+p[o>>3]-+p[q>>3])*2.0*.6666666666666666))));p[b+328>>3]=w*(j*(v*(m*((+p[q>>3]+ +p[o>>3])*-1.1547005383792515*.6666666666666666))));p[b+568>>3]=y*(+p[o>>3]*4.0*+p[q>>3]*.6666666666666666);p[b+96>>3]=t*(w*(j*(v*(+p[n>>3]*2.0*2.0/3.0))));p[b+336>>3]=t*(w*(j*(v*((+p[q>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*.6666666666666666))));p[b+576>>3]=A*(+p[q>>3]*4.0*+p[n>>3]*.6666666666666666);p[b+104>>3]=t*(w*(j*(v*(+p[n>>3]*-2.0*2.0/3.0))));p[b+344>>3]=t*(w*(j*(v*((+p[o>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*.6666666666666666))));p[b+584>>3]=A*(+p[n>>3]*4.0*+p[o>>3]*.6666666666666666);p[b+112>>3]=t*(w*(j*(v*((+p[o>>3]-+p[q>>3])*2.0*.6666666666666666))));p[b+352>>3]=t*(w*(j*(v*((+p[q>>3]+ +p[o>>3])*-1.1547005383792515*.6666666666666666))));p[b+592>>3]=A*(+p[o>>3]*4.0*+p[q>>3]*.6666666666666666);p[b+120>>3]=t*(j*(v*(m*((.5-+p[o>>3]*2.0)*-2.6666666666666665))));p[b+360>>3]=t*(j*(v*(m*((.28867513459481287-+p[o>>3]*1.1547005383792515)*-2.6666666666666665))));A=+p[o>>3];y=j*m;x=y*(z+.5)+t*l;p[b+600>>3]=x*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+128>>3]=t*(j*(v*(m*((+p[q>>3]*2.0+-.5)*-2.6666666666666665))));p[b+368>>3]=t*(j*(v*(m*((.28867513459481287-+p[q>>3]*1.1547005383792515)*-2.6666666666666665))));A=+p[q>>3];p[b+608>>3]=x*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+136>>3]=0.0;p[b+376>>3]=t*(j*(v*(m*((+p[n>>3]*2.309401076758503+-.5773502691896257)*-2.6666666666666665))));A=+p[n>>3];p[b+616>>3]=x*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+144>>3]=t*(w*(j*(m*((.5-+p[o>>3]*2.0)*-2.6666666666666665))));p[b+384>>3]=t*(w*(j*(m*((.28867513459481287-+p[o>>3]*1.1547005383792515)*-2.6666666666666665))));A=+p[o>>3];l=y*(z+1.5)+t*(w*u);p[b+624>>3]=l*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+152>>3]=t*(w*(j*(m*((+p[q>>3]*2.0+-.5)*-2.6666666666666665))));p[b+392>>3]=t*(w*(j*(m*((.28867513459481287-+p[q>>3]*1.1547005383792515)*-2.6666666666666665))));A=+p[q>>3];p[b+632>>3]=l*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+160>>3]=0.0;p[b+400>>3]=t*(j*(w*(m*((+p[n>>3]*2.309401076758503+-.5773502691896257)*-2.6666666666666665))));A=+p[n>>3];p[b+640>>3]=l*(A*(A*2.0+-1.0)*-2.6666666666666665);p[b+168>>3]=t*(j*(v*(m*(+p[n>>3]*2.0*-2.6666666666666665))));p[b+408>>3]=t*(j*(v*(m*((+p[q>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*-2.6666666666666665))));p[b+648>>3]=x*(+p[q>>3]*4.0*+p[n>>3]*-2.6666666666666665);p[b+176>>3]=t*(j*(v*(m*(+p[n>>3]*-2.0*-2.6666666666666665))));p[b+416>>3]=t*(j*(v*(m*((+p[o>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*-2.6666666666666665))));p[b+656>>3]=x*(+p[o>>3]*4.0*+p[n>>3]*-2.6666666666666665);p[b+184>>3]=t*(j*(v*(m*((+p[o>>3]-+p[q>>3])*2.0*-2.6666666666666665))));p[b+424>>3]=t*(j*(v*(m*((+p[q>>3]+ +p[o>>3])*-1.1547005383792515*-2.6666666666666665))));p[b+664>>3]=x*(+p[o>>3]*4.0*+p[q>>3]*-2.6666666666666665);p[b+192>>3]=t*(w*(v*(m*(+p[n>>3]*2.0*4.0))));p[b+432>>3]=t*(w*(v*(m*((+p[q>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*4.0))));p[b+672>>3]=s*(+p[q>>3]*4.0*+p[n>>3]*4.0);p[b+200>>3]=t*(w*(v*(m*(+p[n>>3]*-2.0*4.0))));p[b+440>>3]=t*(w*(v*(m*((+p[o>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*4.0))));p[b+680>>3]=s*(+p[o>>3]*4.0*+p[n>>3]*4.0);p[b+208>>3]=t*(w*(v*(m*((+p[o>>3]-+p[q>>3])*2.0*4.0))));p[b+448>>3]=t*(w*(v*(m*((+p[o>>3]+ +p[q>>3])*-1.1547005383792515*4.0))));p[b+688>>3]=s*(+p[o>>3]*4.0*+p[q>>3]*4.0);p[b+216>>3]=t*(w*(j*(m*(+p[n>>3]*2.0*-2.6666666666666665))));p[b+456>>3]=t*(w*(j*(m*((+p[q>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*-2.6666666666666665))));p[b+696>>3]=l*(+p[q>>3]*4.0*+p[n>>3]*-2.6666666666666665);p[b+224>>3]=t*(w*(j*(m*(+p[n>>3]*-2.0*-2.6666666666666665))));p[b+464>>3]=t*(w*(j*(m*((+p[o>>3]*2.309401076758503-+p[n>>3]*1.1547005383792515)*-2.6666666666666665))));p[b+704>>3]=l*(+p[o>>3]*4.0*+p[n>>3]*-2.6666666666666665);p[b+232>>3]=t*(w*(j*(m*((+p[o>>3]-+p[q>>3])*2.0*-2.6666666666666665))));p[b+472>>3]=t*(w*(j*(m*((+p[o>>3]+ +p[q>>3])*-1.1547005383792515*-2.6666666666666665))));p[b+712>>3]=l*(+p[o>>3]*4.0*+p[q>>3]*-2.6666666666666665);r=a;return}case 747:{l=j+-1.0;m=j+-.3333333333333333;w=j+.3333333333333333;p[b>>3]=w*(m*(l*.28125));t=w*(m*(l*.16237976320958225));p[b+96>>3]=t;q=c+40|0;s=j*2.0;v=m*w;x=s*l+v;p[b+192>>3]=x*(+p[q>>3]*-.5625);p[b+8>>3]=w*(m*(l*-.28125));p[b+104>>3]=t;o=c+48|0;p[b+200>>3]=x*(+p[o>>3]*-.5625);p[b+16>>3]=0.0;p[b+112>>3]=w*(m*(l*-.3247595264191645));n=c+56|0;p[b+208>>3]=x*(+p[n>>3]*-.5625);x=j+1.0;p[b+24>>3]=x*(w*(m*-.28125));t=x*(w*(m*-.16237976320958225));p[b+120>>3]=t;A=s*x+v;p[b+216>>3]=A*(+p[q>>3]*.5625);p[b+32>>3]=x*(w*(m*.28125));p[b+128>>3]=t;p[b+224>>3]=A*(+p[o>>3]*.5625);p[b+40>>3]=0.0;p[b+136>>3]=x*(w*(m*.3247595264191645));p[b+232>>3]=A*(+p[n>>3]*.5625);A=l*-.84375;p[b+48>>3]=x*(m*A);t=x*(m*(l*-.4871392896287467));p[b+144>>3]=t;v=l*x;u=s*m+v;p[b+240>>3]=u*(+p[q>>3]*1.6875);z=l*.84375;p[b+56>>3]=x*(m*z);p[b+152>>3]=t;p[b+248>>3]=u*(+p[o>>3]*1.6875);p[b+64>>3]=0.0;p[b+160>>3]=x*(m*(l*.9742785792574934));p[b+256>>3]=u*(+p[n>>3]*1.6875);p[b+72>>3]=x*(w*z);z=x*(w*(l*.4871392896287467));p[b+168>>3]=z;u=s*w+v;p[b+264>>3]=u*(+p[q>>3]*-1.6875);p[b+80>>3]=x*(w*A);p[b+176>>3]=z;p[b+272>>3]=u*(+p[o>>3]*-1.6875);p[b+88>>3]=0.0;p[b+184>>3]=x*(w*(l*-.9742785792574934));p[b+280>>3]=u*(+p[n>>3]*-1.6875);r=a;return}default:{n=f+56|0;o=f+4|0;k[f>>2]=27524;k[n>>2]=27544;B=0;wa(508,f+56|0,o|0);q=B;B=0;if(q&1){q=Rb()|0;C=Q;D=q;vva(n);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);q=B;B=0;do if(q&1){E=Rb()|0;F=Q;G=E}else{k[o>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,o|0,e|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(e);Yua(E);Ava(o);F=I;G=H;break}Yua(e);B=0;H=Ia(40,f|0,132447,13)|0;I=B;B=0;if((((!(I&1)?(B=0,I=ya(427,d|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(I)|0,B=0,K=Ia(40,H|0,I|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,K|0,146481,18)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,J|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,g|0,75348,76);K=B;B=0;do if(!(K&1)){B=0;eb(502,h|0,75528,37);I=B;B=0;if(I&1){I=Rb()|0;H=Q;Yua(g);L=H;M=I;break}B=0;wa(510,i|0,o|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;P=1}else{B=0;ua(163,J|0,g|0,h|0,964,i|0);I=B;B=0;if(I&1)R=1;else{B=0;eb(503,J|0,1240,229);B=0;R=0}I=Rb()|0;H=Q;Yua(i);N=H;O=I;P=R}Yua(h);Yua(g);if(P){L=N;M=O}else{S=N;T=O;k[f>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(E);Ava(o);vva(n);Qb(T|0)}}else{I=Rb()|0;L=Q;M=I}while(0);zb(J|0);S=L;T=M;k[f>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(E);Ava(o);vva(n);Qb(T|0)}K=Rb()|0;S=Q;T=K;k[f>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(E);Ava(o);vva(n);Qb(T|0)}while(0);C=F;D=G;vva(n);Qb(D|0)}}while(0)}function cC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c+24>>3]-+p[c>>3];j=+p[c+32>>3]-+p[c+8>>3];l=+aa(+(i*i+j*j))*(+p[c+64>>3]+(+p[c+88>>3]-+p[c+16>>3])-+p[c+40>>3])*.125;p[b>>3]=l;if(!(l<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;m=Q;n=c;vva(d);Qb(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){o=Rb()|0;q=Q;s=o}else{k[b>>2]=27560;o=e+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);Yua(o);Ava(b);q=u;s=t;break}Yua(a);B=0;t=Ia(40,e|0,75474,30)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,75348,76);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,75566,26);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,b|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,990,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}u=Rb()|0;E=Q;F=u;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(o);Ava(b);vva(d);Qb(F|0)}while(0);m=q;n=s;vva(d);Qb(n|0)}function dC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c+24>>3]-+p[c>>3];j=+p[c+32>>3]-+p[c+8>>3];l=+p[c+40>>3]-+p[c+16>>3];m=+aa(+(i*i+j*j+l*l))*.5;p[b>>3]=m;if(!(m<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;o=c;vva(d);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){q=Rb()|0;s=Q;t=q}else{k[b>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);Yua(q);Ava(b);s=v;t=u;break}Yua(a);B=0;u=Ia(40,e|0,75474,30)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,f|0,75348,76);v=B;B=0;do if(!(v&1)){B=0;eb(502,g|0,75593,29);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=x;z=w;break}B=0;wa(510,h|0,b|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,u|0,f|0,g|0,1006,h|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,u|0,1240,229);B=0;E=0}w=Rb()|0;x=Q;Yua(h);A=x;C=w;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(d);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(u|0);F=y;G=z;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(d);Qb(G|0)}v=Rb()|0;F=Q;G=v;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(d);Qb(G|0)}while(0);n=s;o=t;vva(d);Qb(o|0)}function eC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0;d=r;r=r+192|0;a=d+176|0;e=d+40|0;f=d+24|0;g=d+12|0;h=d;i=+p[c>>3];j=+p[c+8>>3];l=+p[c+16>>3];m=+p[c+32>>3]-j;n=+p[c+64>>3]-l;o=+p[c+40>>3]-l;l=+p[c+56>>3]-j;j=m*n-o*l;q=+p[c+48>>3]-i;s=+p[c+24>>3]-i;i=o*q-s*n;n=s*l-m*q;q=n*n+(j*j+i*i);i=+$(+(+aa(+q)));j=q==-G?G:i*.28867513459481287;p[b>>3]=j;if(!(j<0.0)){r=d;return}d=e+56|0;b=e+4|0;k[e>>2]=27524;k[d>>2]=27544;B=0;wa(508,e+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;t=Q;u=c;vva(d);Qb(u|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){v=Rb()|0;w=Q;x=v}else{k[b>>2]=27560;v=e+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[e+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,b|0,a|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(a);Yua(v);Ava(b);w=z;x=y;break}Yua(a);B=0;y=Ia(40,e|0,75474,30)|0;z=B;B=0;if(!(z&1)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,75348,76);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,75623,26);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(f);D=C;E=A;break}B=0;wa(510,h|0,b|0);A=B;B=0;if(A&1){A=Rb()|0;F=Q;H=A;I=1}else{B=0;ua(163,y|0,f|0,g|0,1026,h|0);A=B;B=0;if(A&1)J=1;else{B=0;eb(503,y|0,1240,229);B=0;J=0}A=Rb()|0;C=Q;Yua(h);F=C;H=A;I=J}Yua(g);Yua(f);if(I){D=F;E=H}else{K=F;L=H;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}}else{A=Rb()|0;D=Q;E=A}while(0);zb(y|0);K=D;L=E;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}z=Rb()|0;K=Q;L=z;k[e>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(d);Qb(L|0)}while(0);t=w;u=x;vva(d);Qb(u|0)}function fC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 754:{h=921;r=a;return h|0}case 757:{h=739;r=a;return h|0}case 758:{h=921;r=a;return h|0}case 756:case 753:case 751:case 752:case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75348,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75650,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,1072,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function gC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;a=r;r=r+192|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;switch(d|0){case 739:case 738:{j=Rqa(12)|0;k[j>>2]=3;k[j+4>>2]=4;k[j+8>>2]=5;l=j;m=3;break}case 741:case 740:{j=Rqa(12)|0;k[j>>2]=3;k[j+4>>2]=4;k[j+8>>2]=5;l=j;m=3;break}case 745:{j=Rqa(24)|0;k[j>>2]=3;k[j+4>>2]=4;k[j+8>>2]=5;k[j+12>>2]=9;k[j+16>>2]=10;k[j+20>>2]=11;l=j;m=6;break}case 742:{j=Rqa(24)|0;k[j>>2]=3;k[j+4>>2]=4;k[j+8>>2]=5;k[j+12>>2]=12;k[j+16>>2]=13;k[j+20>>2]=14;l=j;m=6;break}case 746:{r=a;return}default:{j=f+56|0;n=f+4|0;k[f>>2]=27524;k[j>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(j);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[j>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(e);Yua(s);Ava(n);t=w;u=v;break}Yua(e);B=0;v=Ia(40,f|0,132447,13)|0;w=B;B=0;if((((!(w&1)?(B=0,w=ya(427,d|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,v|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,146481,18)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,g|0,75348,76);y=B;B=0;do if(!(y&1)){B=0;eb(502,h|0,75672,18);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(g);z=v;A=w;break}B=0;wa(510,i|0,n|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;E=1}else{B=0;ua(163,x|0,g|0,h|0,1127,i|0);w=B;B=0;if(w&1)F=1;else{B=0;eb(503,x|0,1240,229);B=0;F=0}w=Rb()|0;v=Q;Yua(i);C=v;D=w;E=F}Yua(h);Yua(g);if(E){z=C;A=D}else{G=C;H=D;k[f>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}}else{w=Rb()|0;z=Q;A=w}while(0);zb(x|0);G=z;H=A;k[f>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}y=Rb()|0;G=Q;H=y;k[f>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}while(0);p=t;q=u;vva(j);Qb(q|0)}}k[b>>2]=m;k[c>>2]=l;r=a;return}function hC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;switch(b|0){case 752:{h=740;r=a;return h|0}case 751:{h=740;r=a;return h|0}case 753:{h=742;r=a;return h|0}case 754:{h=742;r=a;return h|0}case 756:{h=748;r=a;return h|0}case 757:{h=743;r=a;return h|0}case 758:{h=743;r=a;return h|0}case 750:case 749:{h=738;r=a;return h|0}default:{h=d+56|0;a=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(h);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,132447,13)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75348,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,75691,21);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,1157,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[h>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(h);Qb(C|0)}while(0);j=n;l=o;vva(h);Qb(l|0)}}return 0}function iC(a){a=a|0;gh(a);return}function jC(a){a=a|0;jh(a);return}function kC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=a+4|0;a:do if(j>>>0<(k[l>>2]|0)>>>0){a=j;while(1){m=k[a>>2]|0;a=a+4|0;if((Hc[k[(k[m>>2]|0)+32>>2]&511](m)|0)==(c|0)){n=m;break}if(a>>>0>=(k[l>>2]|0)>>>0)break a}Fc[k[(k[n>>2]|0)+40>>2]&1023](n,b);r=d;return}while(0);d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(d);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){l=Rb()|0;q=Q;s=l}else{k[b>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Yua(e);Yua(l);Ava(b);q=a;s=j;break}Yua(e);B=0;j=Ia(40,f|0,75713,36)|0;a=B;B=0;if((((((!(a&1)?(B=0,a=Xa(242,j|0,c|0)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Ia(40,a|0,144166,2)|0,a=B,B=0,!(a&1)):0)?(B=0,a=ya(427,c|0)|0,m=B,B=0,!(m&1)):0)?(m=Lta(a)|0,B=0,t=Ia(40,j|0,a|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,t|0,141170,1)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,g|0,75750,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,121355,13);a=B;B=0;if(a&1){a=Rb()|0;j=Q;Yua(g);u=j;v=a;break}B=0;wa(510,i|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,m|0,g|0,h|0,77,i|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,m|0,1240,229);B=0;z=0}a=Rb()|0;j=Q;Yua(i);w=j;x=a;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(m|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}while(0);o=q;p=s;vva(d);Qb(p|0)}function lC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=a+4|0;a:do if(j>>>0<(k[l>>2]|0)>>>0){a=j;while(1){m=k[a>>2]|0;a=a+4|0;if((Hc[k[(k[m>>2]|0)+32>>2]&511](m)|0)==(c|0)){n=m;break}if(a>>>0>=(k[l>>2]|0)>>>0)break a}Fc[k[(k[n>>2]|0)+64>>2]&1023](n,b);r=d;return}while(0);d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(d);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){l=Rb()|0;q=Q;s=l}else{k[b>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Yua(e);Yua(l);Ava(b);q=a;s=j;break}Yua(e);B=0;j=Ia(40,f|0,75713,36)|0;a=B;B=0;if((((((!(a&1)?(B=0,a=Xa(242,j|0,c|0)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Ia(40,a|0,144166,2)|0,a=B,B=0,!(a&1)):0)?(B=0,a=ya(427,c|0)|0,m=B,B=0,!(m&1)):0)?(m=Lta(a)|0,B=0,t=Ia(40,j|0,a|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,t|0,141170,1)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,g|0,75750,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,77948,15);a=B;B=0;if(a&1){a=Rb()|0;j=Q;Yua(g);u=j;v=a;break}B=0;wa(510,i|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,m|0,g|0,h|0,131,i|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,m|0,1240,229);B=0;z=0}a=Rb()|0;j=Q;Yua(i);w=j;x=a;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(m|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}while(0);o=q;p=s;vva(d);Qb(p|0)}function mC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[a>>2]|0;d=a+4|0;a:do if(c>>>0<(k[d>>2]|0)>>>0){e=c;while(1){f=k[e>>2]|0;g=Hc[k[(k[f>>2]|0)+32>>2]&511](f)|0;e=e+4|0;if((g|0)==(Hc[k[(k[b>>2]|0)+32>>2]&511](b)|0)){h=f;break}if(e>>>0>=(k[d>>2]|0)>>>0)break a}mh(a,h)|0}while(0);ih(a,b)|0;return 1}function nC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=k[a>>2]|0;e=a+4|0;f=k[e>>2]|0;a:do if(d>>>0<f>>>0){g=d;while(1){h=k[g>>2]|0;g=g+4|0;if((Hc[k[(k[h>>2]|0)+32>>2]&511](h)|0)==(c|0)){i=h;break}h=k[e>>2]|0;if(g>>>0>=h>>>0){j=h;break a}}mh(a,i)|0;j=k[e>>2]|0}else j=f;while(0);f=k[a>>2]|0;if(f>>>0<j>>>0)l=f;else return;while(1){f=k[l>>2]|0;l=l+4|0;if((Hc[k[(k[f>>2]|0)+32>>2]&511](f)|0)==(b|0)){m=f;break}if(l>>>0>=(k[e>>2]|0)>>>0){n=9;break}}if((n|0)==9)return;Fc[k[(k[m>>2]|0)+80>>2]&1023](m,c);return}function oC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;if(c>>>0<(k[d>>2]|0)>>>0)e=c;else{f=0;return f|0}while(1){c=k[e>>2]|0;e=e+4|0;if((Hc[k[(k[c>>2]|0)+32>>2]&511](c)|0)==(b|0)){f=c;g=4;break}if(e>>>0>=(k[d>>2]|0)>>>0){f=0;g=4;break}}if((g|0)==4)return f|0;return 0}function pC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=k[a>>2]|0;j=a+4|0;a:do if(i>>>0<(k[j>>2]|0)>>>0){a=i;while(1){l=k[a>>2]|0;a=a+4|0;if((Hc[k[(k[l>>2]|0)+32>>2]&511](l)|0)==(b|0)){m=l;break}if(a>>>0>=(k[j>>2]|0)>>>0)break a}if(m){n=+Zc[k[(k[m>>2]|0)+108>>2]&255](m);r=c;return +n}}while(0);c=e+56|0;m=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;o=Q;p=j;vva(c);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){i=Rb()|0;q=Q;s=i}else{k[m>>2]=27560;i=e+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(d);Yua(i);Ava(m);q=l;s=a;break}Yua(d);B=0;a=Ia(40,e|0,109148,6)|0;l=B;B=0;if((((!(l&1)?(B=0,l=ya(427,b|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(l)|0,B=0,u=Ia(40,a|0,l|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,114879,10)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,75750,72);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,115200,3);l=B;B=0;if(l&1){l=Rb()|0;a=Q;Yua(f);v=a;w=l;break}B=0;wa(510,h|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;x=Q;y=l;z=1}else{B=0;ua(163,t|0,f|0,g|0,238,h|0);l=B;B=0;if(l&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}l=Rb()|0;a=Q;Yua(h);x=a;y=l;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}}else{l=Rb()|0;v=Q;w=l}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}while(0);o=q;p=s;vva(c);Qb(p|0);return +(0.0)}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=k[a>>2]|0;j=a+4|0;a:do if(i>>>0<(k[j>>2]|0)>>>0){a=i;while(1){l=k[a>>2]|0;a=a+4|0;if((Hc[k[(k[l>>2]|0)+32>>2]&511](l)|0)==(b|0)){m=l;break}if(a>>>0>=(k[j>>2]|0)>>>0)break a}if(m){n=+Zc[k[(k[m>>2]|0)+100>>2]&255](m);r=c;return +n}}while(0);c=e+56|0;m=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;o=Q;p=j;vva(c);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){i=Rb()|0;q=Q;s=i}else{k[m>>2]=27560;i=e+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(d);Yua(i);Ava(m);q=l;s=a;break}Yua(d);B=0;a=Ia(40,e|0,109148,6)|0;l=B;B=0;if((((!(l&1)?(B=0,l=ya(427,b|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(l)|0,B=0,u=Ia(40,a|0,l|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,114879,10)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,75750,72);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,115211,6);l=B;B=0;if(l&1){l=Rb()|0;a=Q;Yua(f);v=a;w=l;break}B=0;wa(510,h|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;x=Q;y=l;z=1}else{B=0;ua(163,t|0,f|0,g|0,258,h|0);l=B;B=0;if(l&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}l=Rb()|0;a=Q;Yua(h);x=a;y=l;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}}else{l=Rb()|0;v=Q;w=l}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}while(0);o=q;p=s;vva(c);Qb(p|0);return +(0.0)}function rC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=k[a>>2]|0;j=a+4|0;a:do if(i>>>0<(k[j>>2]|0)>>>0){a=i;while(1){l=k[a>>2]|0;a=a+4|0;if((Hc[k[(k[l>>2]|0)+32>>2]&511](l)|0)==(b|0)){m=l;break}if(a>>>0>=(k[j>>2]|0)>>>0)break a}if(m){n=+Zc[k[(k[m>>2]|0)+112>>2]&255](m);r=c;return +n}}while(0);c=e+56|0;m=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;o=Q;p=j;vva(c);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){i=Rb()|0;q=Q;s=i}else{k[m>>2]=27560;i=e+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;Yua(d);Yua(i);Ava(m);q=l;s=a;break}Yua(d);B=0;a=Ia(40,e|0,109148,6)|0;l=B;B=0;if((((!(l&1)?(B=0,l=ya(427,b|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(l)|0,B=0,u=Ia(40,a|0,l|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,114879,10)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,75750,72);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,77944,3);l=B;B=0;if(l&1){l=Rb()|0;a=Q;Yua(f);v=a;w=l;break}B=0;wa(510,h|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;x=Q;y=l;z=1}else{B=0;ua(163,t|0,f|0,g|0,278,h|0);l=B;B=0;if(l&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}l=Rb()|0;a=Q;Yua(h);x=a;y=l;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}}else{l=Rb()|0;v=Q;w=l}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(i);Ava(m);vva(c);Qb(D|0)}while(0);o=q;p=s;vva(c);Qb(p|0);return +(0.0)}function sC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;if(c>>>0<(k[d>>2]|0)>>>0)e=c;else return 1;while(1){c=k[e>>2]|0;e=e+4|0;if((Hc[k[(k[c>>2]|0)+32>>2]&511](c)|0)==(b|0)){f=c;break}if(e>>>0>=(k[d>>2]|0)>>>0){g=5;break}}if((g|0)==5)return 1;mh(a,f)|0;return 1}function tC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=a+4|0;a:do if(j>>>0<(k[l>>2]|0)>>>0){m=j;while(1){n=k[m>>2]|0;m=m+4|0;if((Hc[k[(k[n>>2]|0)+32>>2]&511](n)|0)==(b|0)){o=n;break}if(m>>>0>=(k[l>>2]|0)>>>0)break a}if(o){m=Hc[k[(k[o>>2]|0)+24>>2]&511](o)|0;Fc[k[(k[m>>2]|0)+80>>2]&1023](m,c);n=k[a>>2]|0;if(n>>>0>=(k[l>>2]|0)>>>0){ih(a,m)|0;r=d;return}p=n;while(1){n=k[p>>2]|0;q=Hc[k[(k[n>>2]|0)+32>>2]&511](n)|0;p=p+4|0;if((q|0)==(Hc[k[(k[m>>2]|0)+32>>2]&511](m)|0)){s=n;break}if(p>>>0>=(k[l>>2]|0)>>>0){t=35;break}}if((t|0)==35){ih(a,m)|0;r=d;return}mh(a,s)|0;ih(a,m)|0;r=d;return}}while(0);d=f+56|0;a=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;u=Q;v=s;vva(d);Qb(v|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,a|0);s=B;B=0;do if(s&1){t=Rb()|0;w=Q;x=t}else{k[a>>2]=27560;t=f+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);l=B;B=0;if(l&1){l=Rb()|0;c=Q;Yua(e);Yua(t);Ava(a);w=c;x=l;break}Yua(e);B=0;l=Ia(40,f|0,75823,32)|0;c=B;B=0;if(((!(c&1)?(B=0,c=ya(427,b|0)|0,o=B,B=0,!(o&1)):0)?(o=Lta(c)|0,B=0,j=Ia(40,l|0,c|0,o|0)|0,o=B,B=0,!(o&1)):0)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,g|0,75750,72);o=B;B=0;do if(!(o&1)){B=0;eb(502,h|0,75856,14);c=B;B=0;if(c&1){c=Rb()|0;l=Q;Yua(g);y=l;z=c;break}B=0;wa(510,i|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;A=Q;C=c;D=1}else{B=0;ua(163,j|0,g|0,h|0,344,i|0);c=B;B=0;if(c&1)E=1;else{B=0;eb(503,j|0,1240,229);B=0;E=0}c=Rb()|0;l=Q;Yua(i);A=l;C=c;D=E}Yua(h);Yua(g);if(D){y=A;z=C}else{F=A;G=C;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(t);Ava(a);vva(d);Qb(G|0)}}else{c=Rb()|0;y=Q;z=c}while(0);zb(j|0);F=y;G=z;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(t);Ava(a);vva(d);Qb(G|0)}o=Rb()|0;F=Q;G=o;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(t);Ava(a);vva(d);Qb(G|0)}while(0);u=w;v=x;vva(d);Qb(v|0)}function uC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=Qqa(36)|0;B=0;va(480,e|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(e);Qb(f|0)}f=k[a>>2]|0;g=a+4|0;if(f>>>0<(k[g>>2]|0)>>>0)h=f;else return e|0;do{f=k[h>>2]|0;ih(e,ld[k[(k[f>>2]|0)+144>>2]&127](f,b,c,d)|0)|0;h=h+4|0}while(h>>>0<(k[g>>2]|0)>>>0);return e|0}function vC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=Qqa(36)|0;B=0;va(480,d|0);e=B;B=0;if(e&1){e=Rb()|0;Sqa(d);Qb(e|0)}e=k[a>>2]|0;f=a+4|0;if(e>>>0<(k[f>>2]|0)>>>0)g=e;else return d|0;do{e=k[g>>2]|0;ih(d,Rc[k[(k[e>>2]|0)+148>>2]&63](e,b,c)|0)|0;g=g+4|0}while(g>>>0<(k[f>>2]|0)>>>0);return d|0}function wC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=k[a>>2]|0;d=a+4|0;if(c>>>0<(k[d>>2]|0)>>>0)e=c;else return;do{c=k[e>>2]|0;Fc[k[(k[c>>2]|0)+84>>2]&1023](c,b);e=e+4|0}while(e>>>0<(k[d>>2]|0)>>>0);return}function xC(a){a=a|0;k[a>>2]=32164;k[a>>2]=31972;k[a+12>>2]=0;return}function yC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;k[a>>2]=32164;B=0;e=B;B=0;if(e&1){e=Rb()|0;f=Q;g=e;Qb(g|0)}k[a>>2]=31972;k[a+4>>2]=b;b=a+8|0;k[b>>2]=d;B=0;e=Xa(249,a|0,d|0)|0;d=B;B=0;do if(!(d&1)?(B=0,h=ya(422,(e>>>0>536870911?-1:e<<3)|0)|0,i=B,B=0,!(i&1)):0){i=a+12|0;k[i>>2]=h;h=0;while(1){B=0;j=Xa(249,a|0,k[b>>2]|0)|0;l=B;B=0;if(l&1){m=9;break}if((h|0)>=(j|0)){m=7;break}p[(k[i>>2]|0)+(h<<3)>>3]=+p[c+(h<<3)>>3];h=h+1|0}if((m|0)==7)return;else if((m|0)==9){h=Rb()|0;n=h;o=Q;break}}else m=10;while(0);if((m|0)==10){m=Rb()|0;n=m;o=Q}f=o;g=n;Qb(g|0)}function zC(a){a=a|0;var b=0;k[a>>2]=31972;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function AC(a){a=a|0;var b=0,c=0;k[a>>2]=31972;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;Sqa(a);return}function BC(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function CC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(l);s=v;t=u;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;u=Ia(40,d|0,75881,12)|0;v=B;B=0;do if((((!(v&1)?(k[u+(k[(k[u>>2]|0)+-12>>2]|0)+12>>2]=25,w=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0,k[w>>2]=k[w>>2]&-177|32,B=0,w=ya(427,k[a+4>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,u|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,Ia(40,y|0,120962,2)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,l|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(e);z=x;A=y;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);y=a+8|0;a:do if((zt(a,k[y>>2]|0)|0)>0){x=f+56|0;w=f+4|0;C=f+56|0;D=f+128|0;E=f+132|0;F=f+36|0;G=f+52|0;H=a+12|0;I=0;while(1){k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,C|0,w|0);J=B;B=0;if(J&1){K=33;break}k[D>>2]=0;k[E>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);J=B;B=0;if(J&1){K=34;break}k[w>>2]=27560;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[G>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);J=B;B=0;if(J&1){K=32;break}Yua(c);B=0;J=Ia(40,f|0,149175,1)|0;L=B;B=0;if(L&1){K=42;break}B=0;Sa(1,J|0,+(+p[(k[H>>2]|0)+(I<<3)>>3]))|0;J=B;B=0;if(J&1){K=42;break}B=0;wa(510,g|0,w|0);J=B;B=0;if(J&1){K=42;break}B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){K=43;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);I=I+1|0;if((I|0)>=(zt(a,k[y>>2]|0)|0))break a}if((K|0)==32){I=Rb()|0;H=Q;Yua(c);Yua(F);Ava(w);M=H;N=I;K=35}else if((K|0)==33){I=Rb()|0;O=Q;P=I;vva(x);Qb(P|0)}else if((K|0)==34){I=Rb()|0;M=Q;N=I;K=35}else if((K|0)==42){I=Rb()|0;R=Q;S=I;K=44}else if((K|0)==43){I=Rb()|0;H=Q;Yua(g);R=H;S=I;K=44}if((K|0)==35){O=M;P=N;vva(x);Qb(P|0)}else if((K|0)==44){k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);T=R;U=S;Qb(U|0)}}while(0);y=h+56|0;I=h+4|0;k[h>>2]=27524;k[y>>2]=27544;B=0;wa(508,h+56|0,I|0);H=B;B=0;if(H&1){H=Rb()|0;V=Q;W=H;vva(y);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[y>>2]=27488;B=0;va(448,I|0);H=B;B=0;do if(H&1){G=Rb()|0;X=Q;Y=G}else{k[I>>2]=27560;G=h+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(c);Yua(G);Ava(I);X=D;Y=E;break}Yua(c);B=0;Ia(40,h|0,149198,2)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,i|0,I|0),D=B,B=0,!(D&1)):0){B=0;ya(424,i|0)|0;D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(i);Z=C;_=D;break}else{Yua(i);k[h>>2]=27468;k[y>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(y);r=b;return}}else K=48;while(0);if((K|0)==48){E=Rb()|0;Z=Q;_=E}k[h>>2]=27468;k[y>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(y);T=Z;U=_;Qb(U|0)}while(0);V=X;W=Y;vva(y);Qb(W|0)}else K=26;while(0);if((K|0)==26){u=Rb()|0;z=Q;A=u}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);T=z;U=A;Qb(U|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}function DC(a){a=a|0;return -1}function EC(a){a=a|0;return 620}function FC(a){a=a|0;var b=0;b=Qqa(16)|0;B=0;ib(292,b|0,k[a+4>>2]|0,k[a+12>>2]|0,k[a+8>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function GC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=108;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+8|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=a+8|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+8|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;t=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;y=v;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(t);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,75894,74);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,t|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,63,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(u);T=R;U=P;Qb(T|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=zt(a,k[w>>2]|0)|0;w=a+12|0;if((y|0)<=0){k[w>>2]=0;r=e;return}a=(k[w>>2]|0)==0;if(s){i[k[b>>2]>>0]=a&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(a){r=e;return}C=y<<3;TEa(s|0,k[w>>2]|0,C|0)|0;k[b>>2]=(k[b>>2]|0)+C;r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(a){r=e;return}k[c>>2]=d+(y<<3);r=e;return}case 1:{d=k[b>>2]|0;c=i[d>>0]|0;k[b>>2]=d+1;if(c&1){r=e;return}c=Rqa(y>>>0>536870911?-1:y<<3)|0;k[w>>2]=c;w=k[b>>2]|0;d=y<<3;TEa(c|0,w|0,d|0)|0;k[b>>2]=w+d;r=e;return}default:{e=n+56|0;d=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;V=Q;W=w;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);w=B;B=0;do if(w&1){b=Rb()|0;X=Q;Y=b}else{k[d>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(f);Yua(b);Ava(d);X=y;Y=c;break}Yua(f);B=0;c=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,c|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,o|0,75894,74);C=B;B=0;do if(!(C&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(o);Z=s;_=A;break}B=0;wa(510,q|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;$=1;aa=Q;ba=A}else{B=0;ua(163,a|0,o|0,p|0,70,q|0);A=B;B=0;if(A&1)ca=1;else{B=0;eb(503,a|0,1240,229);B=0;ca=0}A=Rb()|0;s=Q;Yua(q);$=ca;aa=s;ba=A}Yua(p);Yua(o);if($){Z=ba;_=aa}else{da=ba;ea=aa;break c}}else{A=Rb()|0;Z=A;_=Q}while(0);zb(a|0);da=Z;ea=_}else S=49;while(0);if((S|0)==49){c=Rb()|0;da=c;ea=Q}k[n>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);T=da;U=ea;Qb(T|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}}}function HC(a){a=a|0;return k[a+4>>2]|0}function IC(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=zt(a,k[a+8>>2]|0)|0;d=+(c|0);if((c|0)<=0){e=0.0;f=e/d;p[b>>3]=f;return}g=k[a+12>>2]|0;a=0;h=0.0;while(1){i=h+ +p[g+(a<<3)>>3];a=a+1|0;if((a|0)==(c|0)){e=i;break}else h=i}f=e/d;p[b>>3]=f;return}function JC(a,b,c){a=a|0;b=b|0;c=c|0;Bt(a,b,k[a+12>>2]|0,c,k[a+8>>2]|0);return}function KC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yt(a,b,k[a+12>>2]|0,c,d,k[a+8>>2]|0);return}function LC(a,b){a=a|0;b=b|0;return}function MC(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=zt(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function NC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function OC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function PC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function QC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function RC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function SC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function TC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function UC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,61,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function VC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115254,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,62,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function WC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115244,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function XC(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function YC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,69,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function ZC(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function _C(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function $C(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,75969,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function aD(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,75969,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}
+-function Goa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0.0,h=0.0,j=0.0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0;b=r;r=r+16|0;c=b;d=Rqa(12040)|0;e=Rqa(11640)|0;bO(k[a+44>>2]|0,c,442);f=0;do{g=+(f|0)*.02+-13.75;h=g+13.75;if(h<.05)j=0.0;else{l=0;m=0.0;n=.05;while(1){o=n-g;q=m+n*+ja(+(o*o*-.01652892561983471))*.1;n=n+.1;if(n>h|(l|0)>598){j=q;break}else{l=l+1|0;m=q}}}p[d+(f<<3)>>3]=j*.07253496007298776;f=f+1|0}while((f|0)!=1376);p[d+11016>>3]=13.77;f=0;do{j=+(f|0)*.02+-12.5;m=j+-12.5;if(m>1.95)s=0.0;else{l=0;h=0.0;n=1.95;while(1){g=n-j;q=h+ +ja(+(g*g*-.02))*.1;n=n+-.1;if(n<m|(l|0)>598){s=q;break}else{l=l+1|0;h=q}}}p[e+(f<<3)>>3]=s*.07978845608028655;f=f+1|0}while((f|0)!=1351);p[e+10816>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0)t=0;else{Tqa(d);Tqa(e);r=b;return}do{a=qh(k[f>>2]|0,t)|0;jq(a,d,e,5.5,(i[c>>0]|0)!=0);t=t+1|0}while((t|0)<(th(k[f>>2]|0)|0));Tqa(d);Tqa(e);r=b;return}function Hoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0;b=r;r=r+16|0;c=b;dO(k[a+44>>2]|0,c,67);d=a+20|0;if((th(k[d>>2]|0)|0)>0)e=0;else{r=b;return}do{a=qh(k[d>>2]|0,e)|0;f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;g=f>>>0>536870911?-1:f<<3;h=Rqa(g)|0;i=Rqa(g)|0;j=Rqa(g)|0;xp(a,h,339);xp(a,i,462);if((f|0)>0){l=+p[c>>3];g=0;do{m=+p[h+(g<<3)>>3];n=m*.00969+-15.86;if(m<1675.0)o=n;else{q=m+-1675.0;o=n*(1.0-q*.0011+q*(q*-.0000154))}p[j+(g<<3)>>3]=+p[i+(g<<3)>>3]+(o+-.235)/l;g=g+1|0}while((g|0)!=(f|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,388,j,738);Tqa(h);Tqa(i);Tqa(j);e=e+1|0}while((e|0)<(th(k[d>>2]|0)|0));r=b;return}function Ioa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;d=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;e=d>>>0>536870911?-1:d<<3;f=Rqa(e)|0;g=Rqa(e)|0;h=Rqa(e)|0;i=Rqa(e)|0;xp(a,f,467);xp(a,g,468);xp(a,h,469);if((d|0)>0){e=0;do{p[i+(e<<3)>>3]=+p[f+(e<<3)>>3]-+p[g+(e<<3)>>3]-+p[h+(e<<3)>>3];e=e+1|0}while((e|0)!=(d|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,388,i,738);Tqa(f);Tqa(g);Tqa(h);Tqa(i);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Joa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;d=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;e=d>>>0>536870911?-1:d<<3;f=Rqa(e)|0;g=Rqa(e)|0;h=Rqa(e)|0;i=Rqa(e)|0;j=Rqa(e)|0;xp(a,f,467);xp(a,g,468);xp(a,h,471);xp(a,i,472);if((d|0)>0){e=0;do{p[j+(e<<3)>>3]=+p[f+(e<<3)>>3]-+p[g+(e<<3)>>3]-+p[h+(e<<3)>>3]+ +p[i+(e<<3)>>3];e=e+1|0}while((e|0)!=(d|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,388,j,738);Tqa(f);Tqa(g);Tqa(h);Tqa(i);Tqa(j);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Koa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;e=r;r=r+176|0;f=e+156|0;g=e+152|0;h=e+16|0;i=e;a:do if(BY()|0){j=h+56|0;l=h+4|0;k[h>>2]=27524;k[j>>2]=27544;B=0;wa(508,h+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=h+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,l|0,f|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(f);Yua(p);Ava(l);q=u;s=t;break}Yua(f);B=0;Ia(40,h|0,146631,33)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,i|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(425,i|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(i);w=u;x=v;break}else{Yua(i);k[h>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);break a}}else y=14;while(0);if((y|0)==14){t=Rb()|0;w=t;x=Q}k[h>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);z=w;A=x;Qb(z|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}while(0);cO(d,g,478);o=en(c,k[g>>2]|0,937)|0;cO(d,f,477);d=fn(c,k[f>>2]|0,937)|0;if(!o){C=0;k[a>>2]=C;r=e;return}f=Qqa(8)|0;B=0;va(485,f|0);s=B;B=0;b:do if(s&1)y=24;else{do if(k[f>>2]|0){B=0;q=ya(423,4)|0;n=B;B=0;if(n&1){y=24;break b}B=0;eb(525,q|0,d|0,o|0);n=B;B=0;if(n&1){n=Rb()|0;x=Q;Sqa(q);D=x;E=n;break b}else{k[f+4>>2]=q;break}}while(0);if(bn(c,k[g>>2]|0)|0){if(!(k[b>>2]|0))F=0;else{j=k[k[b+4>>2]>>2]|0;F=Hc[k[(k[j>>2]|0)+52>>2]&511](j)|0}if((th(c)|0)>0){j=0;do{q=qh(c,j)|0;if(Tn(q,k[g>>2]|0)|0)ho(q,f,F,937);j=j+1|0}while((j|0)<(th(c)|0));G=F}else G=F}else G=0;if(k[f>>2]|0){j=k[k[f+4>>2]>>2]|0;Ec[k[(k[j>>2]|0)+12>>2]&1023](j)}if(!G){C=f;k[a>>2]=C;r=e;return}Tqa(G);C=f;k[a>>2]=C;r=e;return}while(0);if((y|0)==24){y=Rb()|0;D=Q;E=y}Sqa(f);z=E;A=D;Qb(z|0)}function Loa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+192|0;f=e+168|0;g=e+164|0;h=e+160|0;i=e+156|0;j=e+152|0;l=e+16|0;m=e;a:do if(BY()|0){n=l+56|0;o=l+4|0;k[l>>2]=27524;k[n>>2]=27544;B=0;wa(508,l+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=l+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,o|0,f|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);Yua(t);Ava(o);u=x;v=w;break}Yua(f);B=0;Ia(40,l|0,146665,44)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,m|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,m|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(m);z=y;A=x;break}else{Yua(m);k[l>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=14;while(0);if((C|0)==14){w=Rb()|0;z=Q;A=w}k[l>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);if(k[b>>2]|0){s=k[k[b+4>>2]>>2]|0;nd[k[(k[s>>2]|0)+20>>2]&1023](s,i,j)}if(!a){r=e;return}s=k[i>>2]|0;if(!(ma(k[j>>2]|0,s)|0)){r=e;return}if(!(k[b>>2]|0))F=s;else{s=k[k[b+4>>2]>>2]|0;nd[k[(k[s>>2]|0)+24>>2]&1023](s,g,h);F=k[i>>2]|0}i=Qqa(8)|0;h=k[g>>2]|0;B=0;va(485,i|0);g=B;B=0;b:do if(g&1)C=29;else{do if(k[i>>2]|0){B=0;s=ya(423,4)|0;j=B;B=0;if(j&1){C=29;break b}B=0;eb(525,s|0,h|0,F|0);j=B;B=0;if(j&1){j=Rb()|0;v=Q;Sqa(s);G=v;H=j;break b}else{k[i+4>>2]=s;break}}while(0);if(d){n=Qqa(8)|0;B=0;va(485,n|0);s=B;B=0;if(s&1){s=Rb()|0;Sqa(n);Qb(s|0)}if(k[c>>2]|0){s=k[c+4>>2]|0;j=Qqa(4)|0;v=k[s>>2]|0;u=Hc[k[(k[v>>2]|0)+36>>2]&511](v)|0;k[j>>2]=u;v=k[s>>2]|0;Fc[k[(k[v>>2]|0)+60>>2]&1023](v,u);k[n+4>>2]=j}if((k[n>>2]|0)!=0?(j=n+4|0,u=k[k[j>>2]>>2]|0,Cc[k[(k[u>>2]|0)+40>>2]&63](u,0.0),(k[n>>2]|0)!=0):0){u=k[k[j>>2]>>2]|0;Ec[k[(k[u>>2]|0)+12>>2]&1023](u)}if(!(k[b>>2]|0))I=n;else{u=k[k[b+4>>2]>>2]|0;nd[k[(k[u>>2]|0)+28>>2]&1023](u,k[k[n+4>>2]>>2]|0,k[k[i+4>>2]>>2]|0);I=n}}else if(!(k[b>>2]|0))I=0;else{n=k[k[b+4>>2]>>2]|0;nd[k[(k[n>>2]|0)+28>>2]&1023](n,k[k[c+4>>2]>>2]|0,k[k[i+4>>2]>>2]|0);I=0}if(k[a>>2]|0){n=k[k[a+4>>2]>>2]|0;Xc[k[(k[n>>2]|0)+44>>2]&63](n,k[k[i+4>>2]>>2]|0,-1.0)}if(I){if((k[I>>2]|0)!=0?(n=k[I+4>>2]|0,(n|0)!=0):0){u=k[n>>2]|0;if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Sqa(n)}Sqa(I)}if((k[i>>2]|0)!=0?(n=k[i+4>>2]|0,(n|0)!=0):0){u=k[n>>2]|0;if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Sqa(n)}Sqa(i);r=e;return}while(0);if((C|0)==29){C=Rb()|0;G=Q;H=C}Sqa(i);D=G;E=H;Qb(E|0)}function Moa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+172|0;g=d+168|0;h=d+164|0;i=d+160|0;j=d+156|0;l=d+152|0;m=d+16|0;n=d;k[f>>2]=1;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;a:do if(BY()|0){o=m+56|0;p=m+4|0;k[m>>2]=27524;k[o>>2]=27544;B=0;wa(508,m+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=m+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,p|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(e);Yua(u);Ava(p);v=y;w=x;break}Yua(e);B=0;Ia(40,m|0,146710,26)|0;x=B;B=0;if(!(x&1)?(B=0,wa(510,n|0,p|0),x=B,B=0,!(x&1)):0){B=0;ya(425,n|0)|0;x=B;B=0;if(!(x&1)){Yua(n);k[m>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);break a}x=Rb()|0;y=Q;Yua(n);z=x;A=y;k[m>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);Qb(z|0)}y=Rb()|0;z=y;A=Q;k[m>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);Qb(z|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}while(0);t=c+44|0;cO(k[t>>2]|0,h,80);cO(k[t>>2]|0,l,477);t=c+36|0;if(lpa(k[t>>2]|0,k[l>>2]|0)|0)mpa(f,g,k[t>>2]|0,k[h>>2]|0,k[l>>2]|0);if((bL(k[t>>2]|0)|0)>0){h=0;do{c=qh(k[t>>2]|0,h)|0;if(ed[k[(k[c>>2]|0)+60>>2]&511](c,k[l>>2]|0)|0?(Hc[k[(k[c>>2]|0)+20>>2]&511](c)|0)==593:0){CM(c,i);k[g>>2]=(k[g>>2]|0)+(k[i>>2]|0)}h=h+1|0}while((h|0)<(bL(k[t>>2]|0)|0))}nZ(g,j,1,4,4,0,uY()|0)|0;uY()|0;t=k[j>>2]|0;k[g>>2]=t;if(!t){C=k[f>>2]|0;k[a>>2]=C;k[b>>2]=t;r=d;return}else{k[f>>2]=0;C=0;k[a>>2]=C;k[b>>2]=t;r=d;return}}function Noa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=r;r=r+352|0;c=b+328|0;d=b+192|0;e=b+180|0;f=b+176|0;g=b+40|0;h=b+24|0;i=b+12|0;j=b;a:do if(BY()|0){l=d+56|0;m=d+4|0;k[d>>2]=27524;k[l>>2]=27544;B=0;wa(508,d+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;Ia(40,d|0,146737,23)|0;u=B;B=0;do if(!(u&1)?(B=0,wa(510,e|0,m|0),v=B,B=0,!(v&1)):0){B=0;ya(425,e|0)|0;v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(e);x=v;y=w;break}else{Yua(e);k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);break a}}else z=14;while(0);if((z|0)==14){u=Rb()|0;x=u;y=Q}k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);A=x;C=y;Qb(A|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}while(0);cO(k[a+44>>2]|0,f,477);p=a+36|0;if(!(lpa(k[p>>2]|0,k[f>>2]|0)|0)){if((bL(k[p>>2]|0)|0)<=0){r=b;return}a=0;do{t=qh(k[p>>2]|0,a)|0;if(ed[k[(k[t>>2]|0)+60>>2]&511](t,k[f>>2]|0)|0?(Hc[k[(k[t>>2]|0)+20>>2]&511](t)|0)==593:0)FM(t);a=a+1|0}while((a|0)<(bL(k[p>>2]|0)|0));r=b;return}b=g+56|0;p=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,p|0);a=B;B=0;if(a&1){a=Rb()|0;D=Q;E=a;vva(b);Qb(E|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,p|0);a=B;B=0;do if(a&1){f=Rb()|0;F=Q;G=f}else{k[p>>2]=27560;f=g+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(c);Yua(f);Ava(p);F=s;G=t;break}Yua(c);B=0;t=Ia(40,g|0,146761,41)|0;s=B;B=0;b:do if(!(s&1)?(B=0,Xa(239,t|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,146803,94);y=B;B=0;do if(!(y&1)){B=0;eb(502,i|0,146898,17);x=B;B=0;if(x&1){x=Rb()|0;d=Q;Yua(h);H=x;I=d;break}B=0;wa(510,j|0,p|0);d=B;B=0;if(d&1){d=Rb()|0;J=d;K=Q;L=1}else{B=0;ua(163,o|0,h|0,i|0,27,j|0);d=B;B=0;if(d&1)M=1;else{B=0;eb(503,o|0,1240,229);B=0;M=0}d=Rb()|0;x=Q;Yua(j);J=d;K=x;L=M}Yua(i);Yua(h);if(L){H=J;I=K}else{N=J;O=K;break b}}else{x=Rb()|0;H=x;I=Q}while(0);zb(o|0);N=H;O=I}else z=35;while(0);if((z|0)==35){t=Rb()|0;N=t;O=Q}k[g>>2]=27468;k[b>>2]=27488;k[p>>2]=27560;Yua(f);Ava(p);vva(b);A=N;C=O;Qb(A|0)}while(0);D=F;E=G;vva(b);Qb(E|0)}function Ooa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;if((th(a)|0)>0)g=0;else return;do{f=qh(a,g)|0;Ec[k[(k[f>>2]|0)+412>>2]&1023](f);g=g+1|0}while((g|0)<(th(a)|0));return}function Poa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+176|0;h=g+152|0;i=g+16|0;j=g;if(!(BY()|0)){l=Qqa(20)|0;k[l>>2]=b;m=l+4|0;k[m>>2]=c;n=l+8|0;k[n>>2]=d;o=l+12|0;k[o>>2]=e;p=l+16|0;k[p>>2]=f;q=Qoa(l)|0;Sqa(l);k[a>>2]=q;r=g;return}s=i+56|0;t=i+4|0;k[i>>2]=27524;k[s>>2]=27544;B=0;wa(508,i+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=i+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[i+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,t|0,h|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(h);Yua(x);Ava(t);y=C;z=A;break}Yua(h);B=0;Ia(40,i|0,146916,25)|0;A=B;B=0;if(!(A&1)?(B=0,wa(510,j|0,t|0),A=B,B=0,!(A&1)):0){B=0;ya(425,j|0)|0;A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(j);D=C;E=A;k[i>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(E|0)}else{Yua(j);k[i>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);l=Qqa(20)|0;k[l>>2]=b;m=l+4|0;k[m>>2]=c;n=l+8|0;k[n>>2]=d;o=l+12|0;k[o>>2]=e;p=l+16|0;k[p>>2]=f;q=Qoa(l)|0;Sqa(l);k[a>>2]=q;r=g;return}}A=Rb()|0;D=Q;E=A;k[i>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(E|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function Qoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=Qqa(8)|0;B=0;va(485,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;Sqa(h);l=j;m=i;Qb(m|0)}i=k[a>>2]|0;if((k[i>>2]|0)==1){iqa(h+4|0,k[i+4>>2]|0,k[(k[a+4>>2]|0)+4>>2]|0,k[a+16>>2]|0);r=b;return h|0}h=d+56|0;b=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,b|0);i=B;B=0;if(i&1){i=Rb()|0;n=Q;o=i;vva(h);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);i=B;B=0;do if(i&1){j=Rb()|0;p=Q;q=j}else{k[b>>2]=27560;j=d+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(j);Ava(b);p=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,146942,13)|0;t=B;B=0;a:do if(((!(t&1)?(B=0,u=Xa(242,s|0,k[k[a>>2]>>2]|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,u|0,146956,19)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,e|0,146976,98);u=B;B=0;do if(!(u&1)){B=0;eb(502,f|0,147075,5);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);y=x;z=w;break}B=0;wa(510,g|0,b|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,v|0,e|0,f|0,78,g|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,v|0,1240,229);B=0;E=0}w=Rb()|0;x=Q;Yua(g);A=x;C=w;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;break a}}else{w=Rb()|0;y=Q;z=w}while(0);zb(v|0);F=y;G=z}else H=22;while(0);if((H|0)==22){s=Rb()|0;F=Q;G=s}k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(h);l=F;m=G;Qb(m|0)}while(0);n=p;o=q;vva(h);Qb(o|0);return 0}function Roa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;g=r;r=r+176|0;h=g+156|0;i=g+152|0;j=g+16|0;l=g;a:do if(BY()|0){m=j+56|0;n=j+4|0;k[j>>2]=27524;k[m>>2]=27544;B=0;wa(508,j+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=j+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,n|0,h|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(h);Yua(s);Ava(n);t=w;u=v;break}Yua(h);B=0;Ia(40,j|0,147081,45)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,l|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,l|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(l);y=x;z=w;break}else{Yua(l);k[j>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=Q;z=v}k[j>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);cO(e,i,478);q=en(d,k[i>>2]|0,943)|0;u=en(d,k[i>>2]|0,937)|0;t=(en(d,k[i>>2]|0,966)|0)!=0;if(t&f?(k[c>>2]|0)!=0:0){f=k[k[c+4>>2]>>2]|0;Cc[k[(k[f>>2]|0)+40>>2]&63](f,0.0)}f=Qqa(8)|0;B=0;va(485,f|0);i=B;B=0;b:do if(i&1)A=28;else{do if(k[f>>2]|0){B=0;p=ya(423,4)|0;z=B;B=0;if(z&1){A=28;break b}B=0;eb(505,p|0,q|0,0);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Sqa(p);E=y;F=z;break b}else{k[f+4>>2]=p;break}}while(0);if(u)sqa(f,b,d,e,937);if(!t){k[a>>2]=f;r=g;return}sqa(f,c,d,e,966);k[a>>2]=f;r=g;return}while(0);if((A|0)==28){A=Rb()|0;E=Q;F=A}Sqa(f);C=E;D=F;Qb(D|0)}function Soa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+176|0;d=c+156|0;e=c+152|0;f=c+16|0;g=c;k[e>>2]=0;a:do if(CY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;Ia(40,f|0,147127,35)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=s;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}q=Rb()|0;t=Q;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);xh(a,b);Aoa(e,a);rqa(k[a+32>>2]|0,k[a+24>>2]|0,k[a+44>>2]|0,k[e>>2]|0);a=k[e>>2]|0;if(!a){r=c;return}if((k[a>>2]|0)!=0?(e=k[a+4>>2]|0,(e|0)!=0):0){b=k[e>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);Sqa(e)}Sqa(a);r=c;return}function Toa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0.0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0.0,Lb=0.0,Mb=0,Nb=0,Ob=0.0,Pb=0.0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0;b=r;r=r+1936|0;c=b+1920|0;d=b+1916|0;e=b+1912|0;f=b+1908|0;g=b+1880|0;h=b+1876|0;i=b+1860|0;j=b+1856|0;l=b+1840|0;m=b;n=b+1824|0;o=b+1808|0;q=b+1804|0;s=b+1656|0;u=b+1896|0;v=b+1884|0;w=b+1864|0;x=b+1520|0;y=b+1844|0;z=b+1368|0;A=b+1828|0;C=b+1216|0;D=b+1812|0;E=b+1080|0;F=b+1792|0;G=b+1504|0;H=b+1352|0;I=b+928|0;J=b+1064|0;K=b+792|0;L=b+776|0;M=b+640|0;N=b+492|0;O=b+480|0;P=b+192|0;R=b+504|0;S=b+44|0;T=b+344|0;U=b+32|0;V=b+208|0;W=b+20|0;X=b+56|0;Y=b+8|0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;k[l>>2]=0;Z=Qqa(4)|0;k[Z>>2]=38696;_=Qqa(4)|0;k[_>>2]=38784;xh(a,497);aa=a+44|0;cO(k[aa>>2]|0,n,478);dO(k[aa>>2]|0,m,75);cO(k[aa>>2]|0,o,72);Eh(a);k[q>>2]=0;TZ(q,a,674,628);TZ(l,a,653,628);ba=a+24|0;ca=z+56|0;da=z+4|0;ea=z+56|0;fa=z+128|0;ga=z+132|0;ha=z+36|0;ia=z+52|0;ja=x+56|0;ka=x+4|0;la=x+56|0;ma=x+128|0;na=x+132|0;oa=x+36|0;pa=x+52|0;qa=I+56|0;ra=I+4|0;sa=I+56|0;ta=I+128|0;xa=I+132|0;za=I+36|0;Aa=I+52|0;Ba=R+56|0;Ca=R+4|0;Da=R+56|0;Ea=R+128|0;Fa=R+132|0;Ga=R+36|0;Ha=R+52|0;Ja=T+56|0;Ka=T+4|0;La=T+56|0;Ma=T+128|0;Na=T+132|0;Oa=T+36|0;Pa=T+52|0;Qa=K+56|0;Ra=K+4|0;Ta=K+56|0;Ua=K+128|0;Va=K+132|0;Wa=K+36|0;Ya=K+52|0;Za=C+56|0;_a=C+4|0;$a=C+56|0;ab=C+128|0;bb=C+132|0;cb=C+36|0;db=C+52|0;fb=0;gb=0;hb=0;ib=0;a:while(1){jb=fb+1|0;if(hb){if((k[hb>>2]|0)!=0?(kb=k[hb+4>>2]|0,(kb|0)!=0):0){lb=k[kb>>2]|0;if(lb)Ec[k[(k[lb>>2]|0)+4>>2]&1023](lb);Sqa(kb)}Sqa(hb)}kb=k[q>>2]|0;lb=Qqa(8)|0;B=0;va(485,lb|0);mb=B;B=0;if(mb&1){nb=lb;ob=11;break}if(k[kb>>2]|0){mb=k[kb+4>>2]|0;kb=Qqa(4)|0;pb=k[mb>>2]|0;qb=Hc[k[(k[pb>>2]|0)+36>>2]&511](pb)|0;k[kb>>2]=qb;pb=k[mb>>2]|0;Fc[k[(k[pb>>2]|0)+60>>2]&1023](pb,qb);k[lb+4>>2]=kb}kb=k[q>>2]|0;if(k[kb>>2]|0){qb=k[k[kb+4>>2]>>2]|0;Fc[k[(k[qb>>2]|0)+60>>2]&1023](qb,k[k[lb+4>>2]>>2]|0)}if(gb){if((k[gb>>2]|0)!=0?(qb=k[gb+4>>2]|0,(qb|0)!=0):0){kb=k[qb>>2]|0;if(kb)Ec[k[(k[kb>>2]|0)+4>>2]&1023](kb);Sqa(qb)}Sqa(gb)}qb=k[l>>2]|0;kb=0;pb=ib;while(1){kb=kb+1|0;if(pb){if((k[pb>>2]|0)!=0?(mb=k[pb+4>>2]|0,(mb|0)!=0):0){rb=k[mb>>2]|0;if(rb)Ec[k[(k[rb>>2]|0)+4>>2]&1023](rb);Sqa(mb)}Sqa(pb)}sb=k[q>>2]|0;xh(a,497);cO(k[aa>>2]|0,n,478);ooa(d,e,h,i,0,a);poa(j,k[ba>>2]|0,k[n>>2]|0);Loa(k[h>>2]|0,k[e>>2]|0,k[j>>2]|0,0);mb=k[e>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}Poa(g,k[d>>2]|0,k[h>>2]|0,0,k[i>>2]|0,k[aa>>2]|0);mb=k[d>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}mb=k[h>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}mb=k[i>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}Roa(f,k[g>>2]|0,k[j>>2]|0,k[ba>>2]|0,k[aa>>2]|0,0);mb=k[g>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}mb=k[j>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}xoa(a,k[f>>2]|0);mb=k[f>>2]|0;if(mb){if((k[mb>>2]|0)!=0?(rb=k[mb+4>>2]|0,(rb|0)!=0):0){tb=k[rb>>2]|0;if(tb)Ec[k[(k[tb>>2]|0)+4>>2]&1023](tb);Sqa(rb)}Sqa(mb)}TZ(q,a,674,628);mb=Qqa(8)|0;B=0;va(485,mb|0);rb=B;B=0;if(rb&1){ub=mb;ob=81;break a}if((k[sb>>2]|0)!=0?(rb=sb+4|0,tb=k[rb>>2]|0,vb=Qqa(4)|0,wb=k[tb>>2]|0,xb=Hc[k[(k[wb>>2]|0)+36>>2]&511](wb)|0,k[vb>>2]=xb,wb=k[tb>>2]|0,Fc[k[(k[wb>>2]|0)+60>>2]&1023](wb,xb),k[mb+4>>2]=vb,(k[sb>>2]|0)!=0):0){xb=k[k[rb>>2]>>2]|0;Fc[k[(k[xb>>2]|0)+60>>2]&1023](xb,k[vb>>2]|0)}do if((k[mb>>2]|0)!=0?(vb=mb+4|0,xb=k[k[vb>>2]>>2]|0,Xc[k[(k[xb>>2]|0)+48>>2]&63](xb,k[k[(k[q>>2]|0)+4>>2]>>2]|0,-1.0),(k[mb>>2]|0)!=0):0){xb=k[k[vb>>2]>>2]|0;yb=+id[k[(k[xb>>2]|0)+64>>2]&63](xb,1);if(!(k[mb>>2]|0)){Bb=yb;break}xb=k[vb>>2]|0;if(!xb){Bb=yb;break}vb=k[xb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(xb);Bb=yb}else Bb=0.0;while(0);Sqa(mb);if(!(k[sb>>2]|0))Cb=0.0;else{xb=k[k[sb+4>>2]>>2]|0;Cb=+id[k[(k[xb>>2]|0)+64>>2]&63](xb,1)}yb=+$(+Bb);p[t>>3]=yb;xb=k[t+4>>2]|0;if(xb>>>0>2146435072|(xb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=95;break a}yb=+$(+Cb);p[t>>3]=yb;xb=k[t+4>>2]|0;if(xb>>>0>2146435072|(xb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=95;break a}Db=Bb/Cb;xb=Db<+p[m>>3];Eb=EY()|0;if(xb){ob=119;break}if(Eb){k[z>>2]=27524;k[ca>>2]=27544;B=0;wa(508,ea|0,da|0);xb=B;B=0;if(xb&1){ob=144;break a}k[fa>>2]=0;k[ga>>2]=-1;k[z>>2]=27468;k[ca>>2]=27488;B=0;va(448,da|0);xb=B;B=0;if(xb&1){ob=145;break a}k[da>>2]=27560;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[ia>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);xb=B;B=0;if(xb&1){ob=143;break a}Yua(c);k[z+(k[(k[z>>2]|0)+-12>>2]|0)+12>>2]=50;xb=z+(k[(k[z>>2]|0)+-12>>2]|0)+4|0;k[xb>>2]=k[xb>>2]&-177|32;B=0;xb=Ia(40,z|0,148312,42)|0;vb=B;B=0;if(vb&1){ob=156;break a}B=0;vb=Sa(1,xb|0,+(Db*100.0))|0;xb=B;B=0;if(xb&1){ob=156;break a}B=0;xb=Ia(40,vb|0,148278,3)|0;vb=B;B=0;if(vb&1){ob=156;break a}B=0;vb=Sa(1,xb|0,+(+p[m>>3]*100.0))|0;xb=B;B=0;if(xb&1){ob=156;break a}B=0;Ia(40,vb|0,148274,3)|0;vb=B;B=0;if(vb&1){ob=156;break a}B=0;wa(510,A|0,da|0);vb=B;B=0;if(vb&1){ob=156;break a}B=0;ya(425,A|0)|0;vb=B;B=0;if(vb&1){ob=157;break a}Yua(A);k[z>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ha);Ava(da);vva(ca)}if((kb|0)>=(k[o>>2]|0)){Fb=sb;Gb=sb;ob=160;break}else pb=sb}if((ob|0)==119){ob=0;if(Eb){k[x>>2]=27524;k[ja>>2]=27544;B=0;wa(508,la|0,ka|0);pb=B;B=0;if(pb&1){ob=124;break}k[ma>>2]=0;k[na>>2]=-1;k[x>>2]=27468;k[ja>>2]=27488;B=0;va(448,ka|0);pb=B;B=0;if(pb&1){ob=125;break}k[ka>>2]=27560;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[pa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ka|0,c|0);pb=B;B=0;if(pb&1){ob=123;break}Yua(c);k[x+(k[(k[x>>2]|0)+-12>>2]|0)+12>>2]=50;pb=x+(k[(k[x>>2]|0)+-12>>2]|0)+4|0;k[pb>>2]=k[pb>>2]&-177|32;B=0;pb=Ia(40,x|0,148312,42)|0;kb=B;B=0;if(kb&1){ob=136;break}B=0;kb=Sa(1,pb|0,+(Db*100.0))|0;pb=B;B=0;if(pb&1){ob=136;break}B=0;pb=Ia(40,kb|0,148270,3)|0;kb=B;B=0;if(kb&1){ob=136;break}B=0;kb=Sa(1,pb|0,+(+p[m>>3]*100.0))|0;pb=B;B=0;if(pb&1){ob=136;break}B=0;Ia(40,kb|0,148274,3)|0;kb=B;B=0;if(kb&1){ob=136;break}B=0;wa(510,y|0,ka|0);kb=B;B=0;if(kb&1){ob=136;break}B=0;ya(425,y|0)|0;kb=B;B=0;if(kb&1){ob=137;break}Yua(y);k[x>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(oa);Ava(ka);vva(ja);Hb=sb;Ib=sb}else{Hb=sb;Ib=sb}}else if((ob|0)==160){ob=0;k[C>>2]=27524;k[Za>>2]=27544;B=0;wa(508,$a|0,_a|0);kb=B;B=0;if(kb&1){ob=164;break}k[ab>>2]=0;k[bb>>2]=-1;k[C>>2]=27468;k[Za>>2]=27488;B=0;va(448,_a|0);kb=B;B=0;if(kb&1){ob=165;break}k[_a>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[db>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_a|0,c|0);kb=B;B=0;if(kb&1){ob=163;break}Yua(c);B=0;kb=Ia(40,C|0,147682,43)|0;pb=B;B=0;if(pb&1){ob=174;break}B=0;pb=Xa(242,kb|0,k[o>>2]|0)|0;kb=B;B=0;if(kb&1){ob=174;break}B=0;Ia(40,pb|0,148995,11)|0;pb=B;B=0;if(pb&1){ob=174;break}B=0;wa(510,D|0,_a|0);pb=B;B=0;if(pb&1){ob=174;break}B=0;ya(425,D|0)|0;pb=B;B=0;if(pb&1){ob=175;break}Yua(D);k[C>>2]=27468;k[Za>>2]=27488;k[_a>>2]=27560;Yua(cb);Ava(_a);vva(Za);Hb=Gb;Ib=Fb}xh(a,524);cO(k[aa>>2]|0,n,478);ooa(d,e,h,i,0,a);poa(j,k[ba>>2]|0,k[n>>2]|0);Loa(k[h>>2]|0,k[e>>2]|0,k[j>>2]|0,0);pb=k[e>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}Poa(g,k[d>>2]|0,k[h>>2]|0,0,k[i>>2]|0,k[aa>>2]|0);pb=k[d>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}pb=k[h>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}pb=k[i>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}Roa(l,k[g>>2]|0,k[j>>2]|0,k[ba>>2]|0,k[aa>>2]|0,0);pb=k[g>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}pb=k[j>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}xoa(a,k[l>>2]|0);pb=k[l>>2]|0;if(pb){if((k[pb>>2]|0)!=0?(kb=k[pb+4>>2]|0,(kb|0)!=0):0){vb=k[kb>>2]|0;if(vb)Ec[k[(k[vb>>2]|0)+4>>2]&1023](vb);Sqa(kb)}Sqa(pb)}TZ(l,a,653,628);pb=Qqa(8)|0;B=0;va(485,pb|0);kb=B;B=0;if(kb&1){Jb=pb;ob=228;break}if((k[Hb>>2]|0)!=0?(kb=Ib+4|0,vb=k[kb>>2]|0,xb=Qqa(4)|0,rb=k[vb>>2]|0,wb=Hc[k[(k[rb>>2]|0)+36>>2]&511](rb)|0,k[xb>>2]=wb,rb=k[vb>>2]|0,Fc[k[(k[rb>>2]|0)+60>>2]&1023](rb,wb),k[pb+4>>2]=xb,(k[Hb>>2]|0)!=0):0){wb=k[k[kb>>2]>>2]|0;Fc[k[(k[wb>>2]|0)+60>>2]&1023](wb,k[xb>>2]|0)}if((k[pb>>2]|0)!=0?(xb=pb+4|0,wb=k[k[xb>>2]>>2]|0,Xc[k[(k[wb>>2]|0)+48>>2]&63](wb,k[k[(k[q>>2]|0)+4>>2]>>2]|0,-1.0),(k[pb>>2]|0)!=0):0){wb=k[k[xb>>2]>>2]|0;yb=+id[k[(k[wb>>2]|0)+64>>2]&63](wb,1);if((k[pb>>2]|0)!=0?(wb=k[xb>>2]|0,(wb|0)!=0):0){xb=k[wb>>2]|0;if(xb)Ec[k[(k[xb>>2]|0)+4>>2]&1023](xb);Sqa(wb);Kb=yb}else Kb=yb}else Kb=0.0;Sqa(pb);if(!(k[Hb>>2]|0))Lb=0.0;else{pb=k[k[Ib+4>>2]>>2]|0;Lb=+id[k[(k[pb>>2]|0)+64>>2]&63](pb,1)}yb=+$(+Kb);p[t>>3]=yb;pb=k[t+4>>2]|0;if(pb>>>0>2146435072|(pb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=242;break}yb=+$(+Lb);p[t>>3]=yb;pb=k[t+4>>2]|0;if(pb>>>0>2146435072|(pb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=242;break}yb=Kb/Lb;pb=yb<+p[m>>3];wb=EY()|0;do if(pb){if(!wb){Mb=1;break}k[I>>2]=27524;k[qa>>2]=27544;B=0;wa(508,sa|0,ra|0);xb=B;B=0;if(xb&1){ob=271;break a}k[ta>>2]=0;k[xa>>2]=-1;k[I>>2]=27468;k[qa>>2]=27488;B=0;va(448,ra|0);xb=B;B=0;if(xb&1){ob=272;break a}k[ra>>2]=27560;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[Aa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);xb=B;B=0;if(xb&1){ob=270;break a}Yua(c);k[I+(k[(k[I>>2]|0)+-12>>2]|0)+12>>2]=50;xb=I+(k[(k[I>>2]|0)+-12>>2]|0)+4|0;k[xb>>2]=k[xb>>2]&-177|32;B=0;xb=Ia(40,I|0,148312,42)|0;kb=B;B=0;if(kb&1){ob=283;break a}B=0;kb=Sa(1,xb|0,+(yb*100.0))|0;xb=B;B=0;if(xb&1){ob=283;break a}B=0;xb=Ia(40,kb|0,148270,3)|0;kb=B;B=0;if(kb&1){ob=283;break a}B=0;kb=Sa(1,xb|0,+(+p[m>>3]*100.0))|0;xb=B;B=0;if(xb&1){ob=283;break a}B=0;Ia(40,kb|0,148274,3)|0;kb=B;B=0;if(kb&1){ob=283;break a}B=0;wa(510,J|0,ra|0);kb=B;B=0;if(kb&1){ob=283;break a}B=0;ya(425,J|0)|0;kb=B;B=0;if(kb&1){ob=284;break a}Yua(J);k[I>>2]=27468;k[qa>>2]=27488;k[ra>>2]=27560;Yua(za);Ava(ra);vva(qa);Mb=1}else{if(!wb){Mb=0;break}k[K>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,Ta|0,Ra|0);kb=B;B=0;if(kb&1){ob=291;break a}k[Ua>>2]=0;k[Va>>2]=-1;k[K>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Ra|0);kb=B;B=0;if(kb&1){ob=292;break a}k[Ra>>2]=27560;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Ya>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ra|0,c|0);kb=B;B=0;if(kb&1){ob=290;break a}Yua(c);k[K+(k[(k[K>>2]|0)+-12>>2]|0)+12>>2]=50;kb=K+(k[(k[K>>2]|0)+-12>>2]|0)+4|0;k[kb>>2]=k[kb>>2]&-177|32;B=0;kb=Ia(40,K|0,148312,42)|0;xb=B;B=0;if(xb&1){ob=303;break a}B=0;xb=Sa(1,kb|0,+(yb*100.0))|0;kb=B;B=0;if(kb&1){ob=303;break a}B=0;kb=Ia(40,xb|0,148278,3)|0;xb=B;B=0;if(xb&1){ob=303;break a}B=0;xb=Sa(1,kb|0,+(+p[m>>3]*100.0))|0;kb=B;B=0;if(kb&1){ob=303;break a}B=0;Ia(40,xb|0,148274,3)|0;xb=B;B=0;if(xb&1){ob=303;break a}B=0;wa(510,L|0,Ra|0);xb=B;B=0;if(xb&1){ob=303;break a}B=0;ya(425,L|0)|0;xb=B;B=0;if(xb&1){ob=304;break a}Yua(L);k[K>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa);Mb=0}while(0);wb=Qqa(8)|0;B=0;va(485,wb|0);pb=B;B=0;if(pb&1){Nb=wb;ob=308;break}do if(k[qb>>2]|0){pb=qb+4|0;xb=k[pb>>2]|0;kb=Qqa(4)|0;rb=k[xb>>2]|0;vb=Hc[k[(k[rb>>2]|0)+36>>2]&511](rb)|0;k[kb>>2]=vb;rb=k[xb>>2]|0;Fc[k[(k[rb>>2]|0)+60>>2]&1023](rb,vb);k[wb+4>>2]=kb;if(!(k[qb>>2]|0))break;vb=k[k[pb>>2]>>2]|0;Fc[k[(k[vb>>2]|0)+60>>2]&1023](vb,k[kb>>2]|0)}while(0);do if(!(k[wb>>2]|0))Ob=0.0;else{kb=wb+4|0;vb=k[k[kb>>2]>>2]|0;Xc[k[(k[vb>>2]|0)+48>>2]&63](vb,k[k[(k[l>>2]|0)+4>>2]>>2]|0,-1.0);if(!(k[wb>>2]|0)){Ob=0.0;break}vb=k[k[kb>>2]>>2]|0;yb=+id[k[(k[vb>>2]|0)+64>>2]&63](vb,1);if(!(k[wb>>2]|0)){Ob=yb;break}vb=k[kb>>2]|0;if(!vb){Ob=yb;break}kb=k[vb>>2]|0;if(kb)Ec[k[(k[kb>>2]|0)+4>>2]&1023](kb);Sqa(vb);Ob=yb}while(0);Sqa(wb);if(!(k[qb>>2]|0))Pb=0.0;else{vb=k[k[qb+4>>2]>>2]|0;Pb=+id[k[(k[vb>>2]|0)+64>>2]&63](vb,1)}yb=+$(+Ob);p[t>>3]=yb;vb=k[t+4>>2]|0;if(vb>>>0>2146435072|(vb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=322;break}yb=+$(+Pb);p[t>>3]=yb;vb=k[t+4>>2]|0;if(vb>>>0>2146435072|(vb|0)==2146435072&(k[t>>2]|0)>>>0>0){ob=322;break}yb=Ob/Pb;vb=yb<+p[m>>3];kb=EY()|0;do if(vb){if(kb){k[R>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,Da|0,Ca|0);pb=B;B=0;if(pb&1){ob=351;break a}k[Ea>>2]=0;k[Fa>>2]=-1;k[R>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);pb=B;B=0;if(pb&1){ob=352;break a}k[Ca>>2]=27560;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[Ha>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);pb=B;B=0;if(pb&1){ob=350;break a}Yua(c);k[R+(k[(k[R>>2]|0)+-12>>2]|0)+12>>2]=50;pb=R+(k[(k[R>>2]|0)+-12>>2]|0)+4|0;k[pb>>2]=k[pb>>2]&-177|32;B=0;pb=Ia(40,R|0,147272,42)|0;rb=B;B=0;if(rb&1){ob=363;break a}B=0;rb=Sa(1,pb|0,+(yb*100.0))|0;pb=B;B=0;if(pb&1){ob=363;break a}B=0;pb=Ia(40,rb|0,148270,3)|0;rb=B;B=0;if(rb&1){ob=363;break a}B=0;rb=Sa(1,pb|0,+(+p[m>>3]*100.0))|0;pb=B;B=0;if(pb&1){ob=363;break a}B=0;Ia(40,rb|0,148274,3)|0;rb=B;B=0;if(rb&1){ob=363;break a}B=0;wa(510,S|0,Ca|0);rb=B;B=0;if(rb&1){ob=363;break a}B=0;ya(425,S|0)|0;rb=B;B=0;if(rb&1){ob=364;break a}Yua(S);k[R>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ga);Ava(Ca);vva(Ba)}if(Mb){Sb=qb;Tb=qb;Ub=lb;Vb=Ib;Wb=Hb;Xb=fb;ob=405;break a}}else{if(!kb)break;k[T>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,La|0,Ka|0);rb=B;B=0;if(rb&1){ob=371;break a}k[Ma>>2]=0;k[Na>>2]=-1;k[T>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ka|0);rb=B;B=0;if(rb&1){ob=372;break a}k[Ka>>2]=27560;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[Pa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ka|0,c|0);rb=B;B=0;if(rb&1){ob=370;break a}Yua(c);k[T+(k[(k[T>>2]|0)+-12>>2]|0)+12>>2]=50;rb=T+(k[(k[T>>2]|0)+-12>>2]|0)+4|0;k[rb>>2]=k[rb>>2]&-177|32;B=0;rb=Ia(40,T|0,147315,43)|0;pb=B;B=0;if(pb&1){ob=383;break a}B=0;pb=Sa(1,rb|0,+(yb*100.0))|0;rb=B;B=0;if(rb&1){ob=383;break a}B=0;rb=Ia(40,pb|0,148278,3)|0;pb=B;B=0;if(pb&1){ob=383;break a}B=0;pb=Sa(1,rb|0,+(+p[m>>3]*100.0))|0;rb=B;B=0;if(rb&1){ob=383;break a}B=0;Ia(40,pb|0,148274,3)|0;pb=B;B=0;if(pb&1){ob=383;break a}B=0;wa(510,U|0,Ka|0);pb=B;B=0;if(pb&1){ob=383;break a}B=0;ya(425,U|0)|0;pb=B;B=0;if(pb&1){ob=384;break a}Yua(U);k[T>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja)}while(0);if((jb|0)<(k[o>>2]|0)){fb=jb;gb=qb;hb=lb;ib=Ib}else{Yb=lb;Zb=qb;_b=Hb;$b=Ib;ac=qb;bc=fb;ob=388;break}}b:switch(ob|0){case 11:{fb=Rb()|0;Sqa(nb);Qb(fb|0);break}case 81:{fb=Rb()|0;Sqa(ub);Qb(fb|0);break}case 95:{fb=s+56|0;ub=s+4|0;k[s>>2]=27524;k[fb>>2]=27544;B=0;wa(508,s+56|0,ub|0);nb=B;B=0;if(nb&1){nb=Rb()|0;cc=Q;dc=nb;vva(fb);Qb(dc|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[fb>>2]=27488;B=0;va(448,ub|0);nb=B;B=0;do if(nb&1){Ib=Rb()|0;ec=Q;fc=Ib}else{k[ub>>2]=27560;Ib=s+36|0;k[Ib>>2]=0;k[Ib+4>>2]=0;k[Ib+8>>2]=0;k[Ib+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);Hb=B;B=0;if(Hb&1){Hb=Rb()|0;ib=Q;Yua(c);Yua(Ib);Ava(ub);ec=ib;fc=Hb;break}Yua(c);B=0;Hb=Ia(40,s|0,148282,29)|0;ib=B;B=0;c:do if(!(ib&1)?(B=0,Xa(239,Hb|0,0)|0,hb=B,B=0,!(hb&1)):0){hb=Ab(20)|0;B=0;eb(502,u|0,147163,88);gb=B;B=0;do if(!(gb&1)){B=0;eb(502,v|0,147252,19);m=B;B=0;if(m&1){m=Rb()|0;Pa=Q;Yua(u);gc=Pa;hc=m;break}B=0;wa(510,w|0,ub|0);m=B;B=0;if(m&1){m=Rb()|0;ic=Q;jc=m;kc=1}else{B=0;ua(163,hb|0,u|0,v|0,77,w|0);m=B;B=0;if(m&1)lc=1;else{B=0;eb(503,hb|0,1240,229);B=0;lc=0}m=Rb()|0;Pa=Q;Yua(w);ic=Pa;jc=m;kc=lc}Yua(v);Yua(u);if(kc){gc=ic;hc=jc}else{mc=ic;nc=jc;break c}}else{m=Rb()|0;gc=Q;hc=m}while(0);zb(hb|0);mc=gc;nc=hc}else ob=110;while(0);if((ob|0)==110){Hb=Rb()|0;mc=Q;nc=Hb}k[s>>2]=27468;k[fb>>2]=27488;k[ub>>2]=27560;Yua(Ib);Ava(ub);vva(fb);oc=mc;pc=nc;Qb(pc|0)}while(0);cc=ec;dc=fc;vva(fb);Qb(dc|0);break}case 123:{dc=Rb()|0;fb=Q;Yua(c);Yua(oa);Ava(ka);qc=fb;rc=dc;ob=126;break}case 124:{dc=Rb()|0;sc=Q;tc=dc;vva(ja);Qb(tc|0);break}case 125:{dc=Rb()|0;qc=Q;rc=dc;ob=126;break}case 136:{dc=Rb()|0;uc=Q;vc=dc;ob=138;break}case 137:{dc=Rb()|0;fb=Q;Yua(y);uc=fb;vc=dc;ob=138;break}case 143:{dc=Rb()|0;fb=Q;Yua(c);Yua(ha);Ava(da);wc=fb;xc=dc;ob=146;break}case 144:{dc=Rb()|0;yc=Q;zc=dc;vva(ca);Qb(zc|0);break}case 145:{dc=Rb()|0;wc=Q;xc=dc;ob=146;break}case 156:{dc=Rb()|0;Ac=Q;Bc=dc;ob=158;break}case 157:{dc=Rb()|0;fb=Q;Yua(A);Ac=fb;Bc=dc;ob=158;break}case 163:{dc=Rb()|0;fb=Q;Yua(c);Yua(cb);Ava(_a);Cc=fb;Dc=dc;ob=166;break}case 164:{dc=Rb()|0;Gc=Q;Ic=dc;vva(Za);Qb(Ic|0);break}case 165:{dc=Rb()|0;Cc=Q;Dc=dc;ob=166;break}case 174:{dc=Rb()|0;Jc=Q;Kc=dc;ob=176;break}case 175:{dc=Rb()|0;fb=Q;Yua(D);Jc=fb;Kc=dc;ob=176;break}case 228:{dc=Rb()|0;Sqa(Jb);Qb(dc|0);break}case 242:{dc=E+56|0;Jb=E+4|0;k[E>>2]=27524;k[dc>>2]=27544;B=0;wa(508,E+56|0,Jb|0);fb=B;B=0;if(fb&1){fb=Rb()|0;Lc=Q;Mc=fb;vva(dc);Qb(Mc|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[dc>>2]=27488;B=0;va(448,Jb|0);fb=B;B=0;do if(fb&1){D=Rb()|0;Nc=Q;Oc=D}else{k[Jb>>2]=27560;D=E+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Jb|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;y=Q;Yua(c);Yua(D);Ava(Jb);Nc=y;Oc=A;break}Yua(c);B=0;A=Ia(40,E|0,148282,29)|0;y=B;B=0;d:do if(!(y&1)?(B=0,Xa(239,A|0,0)|0,fc=B,B=0,!(fc&1)):0){fc=Ab(20)|0;B=0;eb(502,F|0,147163,88);ec=B;B=0;do if(!(ec&1)){B=0;eb(502,G|0,147252,19);cc=B;B=0;if(cc&1){cc=Rb()|0;nc=Q;Yua(F);Pc=nc;Qc=cc;break}B=0;wa(510,H|0,Jb|0);cc=B;B=0;if(cc&1){cc=Rb()|0;Rc=1;Sc=Q;Tc=cc}else{B=0;ua(163,fc|0,F|0,G|0,109,H|0);cc=B;B=0;if(cc&1)Uc=1;else{B=0;eb(503,fc|0,1240,229);B=0;Uc=0}cc=Rb()|0;nc=Q;Yua(H);Rc=Uc;Sc=nc;Tc=cc}Yua(G);Yua(F);if(Rc){Pc=Sc;Qc=Tc}else{Vc=Sc;Wc=Tc;break d}}else{cc=Rb()|0;Pc=Q;Qc=cc}while(0);zb(fc|0);Vc=Pc;Wc=Qc}else ob=257;while(0);if((ob|0)==257){A=Rb()|0;Vc=Q;Wc=A}k[E>>2]=27468;k[dc>>2]=27488;k[Jb>>2]=27560;Yua(D);Ava(Jb);vva(dc);oc=Vc;pc=Wc;Qb(pc|0)}while(0);Lc=Nc;Mc=Oc;vva(dc);Qb(Mc|0);break}case 270:{Mc=Rb()|0;dc=Q;Yua(c);Yua(za);Ava(ra);Yc=dc;Zc=Mc;ob=273;break}case 271:{Mc=Rb()|0;_c=Q;$c=Mc;vva(qa);Qb($c|0);break}case 272:{Mc=Rb()|0;Yc=Q;Zc=Mc;ob=273;break}case 283:{Mc=Rb()|0;ad=Q;bd=Mc;ob=285;break}case 284:{Mc=Rb()|0;dc=Q;Yua(J);ad=dc;bd=Mc;ob=285;break}case 290:{Mc=Rb()|0;dc=Q;Yua(c);Yua(Wa);Ava(Ra);cd=dc;dd=Mc;ob=293;break}case 291:{Mc=Rb()|0;ed=Q;fd=Mc;vva(Qa);Qb(fd|0);break}case 292:{Mc=Rb()|0;cd=Q;dd=Mc;ob=293;break}case 303:{Mc=Rb()|0;gd=Q;hd=Mc;ob=305;break}case 304:{Mc=Rb()|0;dc=Q;Yua(L);gd=dc;hd=Mc;ob=305;break}case 308:{Mc=Rb()|0;Sqa(Nb);Qb(Mc|0);break}case 322:{Mc=M+56|0;Nb=M+4|0;k[M>>2]=27524;k[Mc>>2]=27544;B=0;wa(508,M+56|0,Nb|0);dc=B;B=0;if(dc&1){dc=Rb()|0;jd=Q;kd=dc;vva(Mc);Qb(kd|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[Mc>>2]=27488;B=0;va(448,Nb|0);dc=B;B=0;do if(dc&1){L=Rb()|0;ld=Q;md=L}else{k[Nb>>2]=27560;L=M+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[M+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Nb|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;Oc=Q;Yua(c);Yua(L);Ava(Nb);ld=Oc;md=J;break}Yua(c);B=0;J=Ia(40,M|0,148282,29)|0;Oc=B;B=0;e:do if(!(Oc&1)?(B=0,Xa(239,J|0,0)|0,Nc=B,B=0,!(Nc&1)):0){Nc=Ab(20)|0;B=0;eb(502,N|0,147163,88);Lc=B;B=0;do if(!(Lc&1)){B=0;eb(502,O|0,147252,19);Wc=B;B=0;if(Wc&1){Wc=Rb()|0;Vc=Q;Yua(N);nd=Vc;od=Wc;break}B=0;wa(510,P|0,Nb|0);Wc=B;B=0;if(Wc&1){Wc=Rb()|0;pd=1;qd=Q;rd=Wc}else{B=0;ua(163,Nc|0,N|0,O|0,121,P|0);Wc=B;B=0;if(Wc&1)sd=1;else{B=0;eb(503,Nc|0,1240,229);B=0;sd=0}Wc=Rb()|0;Vc=Q;Yua(P);pd=sd;qd=Vc;rd=Wc}Yua(O);Yua(N);if(pd){nd=qd;od=rd}else{td=qd;ud=rd;break e}}else{Wc=Rb()|0;nd=Q;od=Wc}while(0);zb(Nc|0);td=nd;ud=od}else ob=337;while(0);if((ob|0)==337){J=Rb()|0;td=Q;ud=J}k[M>>2]=27468;k[Mc>>2]=27488;k[Nb>>2]=27560;Yua(L);Ava(Nb);vva(Mc);oc=td;pc=ud;Qb(pc|0)}while(0);jd=ld;kd=md;vva(Mc);Qb(kd|0);break}case 350:{kd=Rb()|0;Mc=Q;Yua(c);Yua(Ga);Ava(Ca);vd=Mc;wd=kd;ob=353;break}case 351:{kd=Rb()|0;xd=Q;yd=kd;vva(Ba);Qb(yd|0);break}case 352:{kd=Rb()|0;vd=Q;wd=kd;ob=353;break}case 363:{kd=Rb()|0;zd=Q;Ad=kd;ob=365;break}case 364:{kd=Rb()|0;Mc=Q;Yua(S);zd=Mc;Ad=kd;ob=365;break}case 370:{kd=Rb()|0;Mc=Q;Yua(c);Yua(Oa);Ava(Ka);Bd=Mc;Cd=kd;ob=373;break}case 371:{kd=Rb()|0;Dd=Q;Ed=kd;vva(Ja);Qb(Ed|0);break}case 372:{kd=Rb()|0;Bd=Q;Cd=kd;ob=373;break}case 383:{kd=Rb()|0;Fd=Q;Gd=kd;ob=385;break}case 384:{kd=Rb()|0;Mc=Q;Yua(U);Fd=Mc;Gd=kd;ob=385;break}case 388:{kd=V+56|0;Mc=V+4|0;k[V>>2]=27524;k[kd>>2]=27544;B=0;wa(508,V+56|0,Mc|0);U=B;B=0;if(U&1){U=Rb()|0;Hd=Q;Id=U;vva(kd);Qb(Id|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[kd>>2]=27488;B=0;va(448,Mc|0);U=B;B=0;do if(U&1){S=Rb()|0;Jd=Q;Kd=S}else{k[Mc>>2]=27560;S=V+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[V+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Mc|0,c|0);md=B;B=0;if(md&1){md=Rb()|0;ld=Q;Yua(c);Yua(S);Ava(Mc);Jd=ld;Kd=md;break}Yua(c);B=0;md=Ia(40,V|0,147682,43)|0;ld=B;B=0;do if(((!(ld&1)?(B=0,jd=Xa(242,md|0,k[o>>2]|0)|0,ud=B,B=0,!(ud&1)):0)?(B=0,Ia(40,jd|0,148995,11)|0,jd=B,B=0,!(jd&1)):0)?(B=0,wa(510,W|0,Mc|0),jd=B,B=0,!(jd&1)):0){B=0;ya(425,W|0)|0;jd=B;B=0;if(jd&1){jd=Rb()|0;ud=Q;Yua(W);Ld=ud;Md=jd;break}else{Yua(W);k[V>>2]=27468;k[kd>>2]=27488;k[Mc>>2]=27560;Yua(S);Ava(Mc);vva(kd);Sb=Zb;Tb=ac;Ub=Yb;Vb=$b;Wb=_b;Xb=bc;ob=405;break b}}else ob=402;while(0);if((ob|0)==402){md=Rb()|0;Ld=Q;Md=md}k[V>>2]=27468;k[kd>>2]=27488;k[Mc>>2]=27560;Yua(S);Ava(Mc);vva(kd);oc=Ld;pc=Md;Qb(pc|0)}while(0);Hd=Jd;Id=Kd;vva(kd);Qb(Id|0);break}}switch(ob|0){case 126:{sc=qc;tc=rc;vva(ja);Qb(tc|0);break}case 138:{k[x>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(oa);Ava(ka);vva(ja);oc=uc;pc=vc;Qb(pc|0);break}case 146:{yc=wc;zc=xc;vva(ca);Qb(zc|0);break}case 158:{k[z>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ha);Ava(da);vva(ca);oc=Ac;pc=Bc;Qb(pc|0);break}case 166:{Gc=Cc;Ic=Dc;vva(Za);Qb(Ic|0);break}case 176:{k[C>>2]=27468;k[Za>>2]=27488;k[_a>>2]=27560;Yua(cb);Ava(_a);vva(Za);oc=Jc;pc=Kc;Qb(pc|0);break}case 273:{_c=Yc;$c=Zc;vva(qa);Qb($c|0);break}case 285:{k[I>>2]=27468;k[qa>>2]=27488;k[ra>>2]=27560;Yua(za);Ava(ra);vva(qa);oc=ad;pc=bd;Qb(pc|0);break}case 293:{ed=cd;fd=dd;vva(Qa);Qb(fd|0);break}case 305:{k[K>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa);oc=gd;pc=hd;Qb(pc|0);break}case 353:{xd=vd;yd=wd;vva(Ba);Qb(yd|0);break}case 365:{k[R>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ga);Ava(Ca);vva(Ba);oc=zd;pc=Ad;Qb(pc|0);break}case 373:{Dd=Bd;Ed=Cd;vva(Ja);Qb(Ed|0);break}case 385:{k[T>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja);oc=Fd;pc=Gd;Qb(pc|0);break}case 405:{f:do if(EY()|0){Gd=X+56|0;Fd=X+4|0;k[X>>2]=27524;k[Gd>>2]=27544;B=0;wa(508,X+56|0,Fd|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Nd=Q;Od=Ja;vva(Gd);Qb(Od|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[Gd>>2]=27488;B=0;va(448,Fd|0);Ja=B;B=0;do if(Ja&1){Ka=Rb()|0;Pd=Q;Qd=Ka}else{k[Fd>>2]=27560;Ka=X+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[X+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Fd|0,c|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;T=Q;Yua(c);Yua(Ka);Ava(Fd);Pd=T;Qd=Oa;break}Yua(c);B=0;Oa=Ia(40,X|0,147767,32)|0;T=B;B=0;do if(((!(T&1)?(B=0,Ed=Xa(242,Oa|0,Xb|0)|0,Cd=B,B=0,!(Cd&1)):0)?(B=0,Ia(40,Ed|0,149177,1)|0,Ed=B,B=0,!(Ed&1)):0)?(B=0,wa(510,Y|0,Fd|0),Ed=B,B=0,!(Ed&1)):0){B=0;ya(425,Y|0)|0;Ed=B;B=0;if(Ed&1){Ed=Rb()|0;Cd=Q;Yua(Y);Rd=Cd;Sd=Ed;break}else{Yua(Y);k[X>>2]=27468;k[Gd>>2]=27488;k[Fd>>2]=27560;Yua(Ka);Ava(Fd);vva(Gd);break f}}else ob=420;while(0);if((ob|0)==420){Oa=Rb()|0;Rd=Q;Sd=Oa}k[X>>2]=27468;k[Gd>>2]=27488;k[Fd>>2]=27560;Yua(Ka);Ava(Fd);vva(Gd);oc=Rd;pc=Sd;Qb(pc|0)}while(0);Nd=Pd;Od=Qd;vva(Gd);Qb(Od|0)}while(0);Od=k[l>>2]|0;if(Od){if((k[Od>>2]|0)!=0?(l=k[Od+4>>2]|0,(l|0)!=0):0){Qd=k[l>>2]|0;if(Qd)Ec[k[(k[Qd>>2]|0)+4>>2]&1023](Qd);Sqa(l)}Sqa(Od)}if(Sb){if((k[Tb>>2]|0)!=0?(Tb=k[Sb+4>>2]|0,(Tb|0)!=0):0){Od=k[Tb>>2]|0;if(Od)Ec[k[(k[Od>>2]|0)+4>>2]&1023](Od);Sqa(Tb)}Sqa(Sb)}Sb=k[q>>2]|0;if(Sb){if((k[Sb>>2]|0)!=0?(q=k[Sb+4>>2]|0,(q|0)!=0):0){Tb=k[q>>2]|0;if(Tb)Ec[k[(k[Tb>>2]|0)+4>>2]&1023](Tb);Sqa(q)}Sqa(Sb)}if((k[Ub>>2]|0)!=0?(Sb=k[Ub+4>>2]|0,(Sb|0)!=0):0){q=k[Sb>>2]|0;if(q)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);Sqa(Sb)}Sqa(Ub);if(!Vb){Td=k[Z>>2]|0;Ud=Td+4|0;Vd=k[Ud>>2]|0;Ec[Vd&1023](Z);Wd=k[_>>2]|0;Xd=Wd+4|0;Yd=k[Xd>>2]|0;Ec[Yd&1023](_);r=b;return}if((k[Wb>>2]|0)!=0?(Wb=k[Vb+4>>2]|0,(Wb|0)!=0):0){Ub=k[Wb>>2]|0;if(Ub)Ec[k[(k[Ub>>2]|0)+4>>2]&1023](Ub);Sqa(Wb)}Sqa(Vb);Td=k[Z>>2]|0;Ud=Td+4|0;Vd=k[Ud>>2]|0;Ec[Vd&1023](Z);Wd=k[_>>2]|0;Xd=Wd+4|0;Yd=k[Xd>>2]|0;Ec[Yd&1023](_);r=b;return}}}function Uoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0;b=r;r=r+848|0;c=b+836|0;d=b+832|0;e=b+828|0;f=b+824|0;g=b+820|0;h=b+816|0;i=b+812|0;j=b+808|0;l=b+16|0;m=b;n=b+804|0;o=b+788|0;q=b+760|0;s=b+624|0;u=b+792|0;v=b+776|0;w=b+764|0;x=b+472|0;y=b+608|0;z=b+336|0;A=b+320|0;C=b+184|0;D=b+36|0;E=b+48|0;F=b+24|0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;G=Qqa(4)|0;k[G>>2]=38696;H=a+44|0;cO(k[H>>2]|0,n,478);dO(k[H>>2]|0,l,75);cO(k[H>>2]|0,o,72);dO(k[H>>2]|0,b+8|0,916);dO(k[H>>2]|0,m,920);Eh(a);I=a+20|0;kaa(G,k[I>>2]|0,k[H>>2]|0);Aoa(f,a);k[q>>2]=0;TZ(q,a,674,628);J=a+24|0;K=z+56|0;L=z+4|0;M=z+56|0;N=z+128|0;O=z+132|0;P=z+36|0;R=z+52|0;S=0;T=0;U=0;while(1){V=S+1|0;if(T){if((k[T>>2]|0)!=0?(W=k[T+4>>2]|0,(W|0)!=0):0){X=k[W>>2]|0;if(X)Ec[k[(k[X>>2]|0)+4>>2]&1023](X);Sqa(W)}Sqa(T)}Y=k[f>>2]|0;if(U){if((k[U>>2]|0)!=0?(W=k[U+4>>2]|0,(W|0)!=0):0){X=k[W>>2]|0;if(X)Ec[k[(k[X>>2]|0)+4>>2]&1023](X);Sqa(W)}Sqa(U)}Z=k[q>>2]|0;if(+p[m>>3]>0.0)laa(G,k[I>>2]|0,k[H>>2]|0);ooa(d,e,h,i,0,a);poa(j,k[J>>2]|0,k[n>>2]|0);Loa(k[h>>2]|0,k[e>>2]|0,k[j>>2]|0,0);W=k[e>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}Poa(g,k[d>>2]|0,k[h>>2]|0,0,k[i>>2]|0,k[H>>2]|0);W=k[d>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}W=k[h>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}W=k[i>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}Roa(f,k[g>>2]|0,k[j>>2]|0,k[J>>2]|0,k[H>>2]|0,0);W=k[g>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}W=k[j>>2]|0;if(W){if((k[W>>2]|0)!=0?(X=k[W+4>>2]|0,(X|0)!=0):0){_=k[X>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(X)}Sqa(W)}xoa(a,k[f>>2]|0);laa(G,k[I>>2]|0,k[H>>2]|0);maa(G,k[I>>2]|0,k[H>>2]|0);TZ(q,a,674,628);W=Qqa(8)|0;B=0;va(485,W|0);X=B;B=0;if(X&1){aa=W;ba=62;break}if((k[Z>>2]|0)!=0?(X=Z+4|0,_=k[X>>2]|0,ca=Qqa(4)|0,da=k[_>>2]|0,ea=Hc[k[(k[da>>2]|0)+36>>2]&511](da)|0,k[ca>>2]=ea,da=k[_>>2]|0,Fc[k[(k[da>>2]|0)+60>>2]&1023](da,ea),k[W+4>>2]=ca,(k[Z>>2]|0)!=0):0){ea=k[k[X>>2]>>2]|0;Fc[k[(k[ea>>2]|0)+60>>2]&1023](ea,k[ca>>2]|0)}if((k[W>>2]|0)!=0?(ca=W+4|0,ea=k[k[ca>>2]>>2]|0,Xc[k[(k[ea>>2]|0)+48>>2]&63](ea,k[k[(k[q>>2]|0)+4>>2]>>2]|0,-1.0),(k[W>>2]|0)!=0):0){ea=k[k[ca>>2]>>2]|0;fa=+id[k[(k[ea>>2]|0)+64>>2]&63](ea,1);if((k[W>>2]|0)!=0?(ea=k[ca>>2]|0,(ea|0)!=0):0){ca=k[ea>>2]|0;if(ca)Ec[k[(k[ca>>2]|0)+4>>2]&1023](ca);Sqa(ea);ga=fa}else ga=fa}else ga=0.0;Sqa(W);if(!(k[Z>>2]|0))ha=0.0;else{W=k[k[Z+4>>2]>>2]|0;ha=+id[k[(k[W>>2]|0)+64>>2]&63](W,1)}fa=+$(+ga);p[t>>3]=fa;W=k[t+4>>2]|0;if(W>>>0>2146435072|(W|0)==2146435072&(k[t>>2]|0)>>>0>0){ba=76;break}fa=+$(+ha);p[t>>3]=fa;W=k[t+4>>2]|0;if(W>>>0>2146435072|(W|0)==2146435072&(k[t>>2]|0)>>>0>0){ba=76;break}ia=ga/ha;W=ia<+p[l>>3];ja=EY()|0;if(W){ba=100;break}if(ja){k[z>>2]=27524;k[K>>2]=27544;B=0;wa(508,M|0,L|0);W=B;B=0;if(W&1){ba=125;break}k[N>>2]=0;k[O>>2]=-1;k[z>>2]=27468;k[K>>2]=27488;B=0;va(448,L|0);W=B;B=0;if(W&1){ba=126;break}k[L>>2]=27560;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[R>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,L|0,c|0);W=B;B=0;if(W&1){ba=124;break}Yua(c);k[z+(k[(k[z>>2]|0)+-12>>2]|0)+12>>2]=50;W=z+(k[(k[z>>2]|0)+-12>>2]|0)+4|0;k[W>>2]=k[W>>2]&-177|32;B=0;W=Ia(40,z|0,148312,42)|0;ea=B;B=0;if(ea&1){ba=137;break}B=0;ea=Sa(1,W|0,+(ia*100.0))|0;W=B;B=0;if(W&1){ba=137;break}B=0;W=Ia(40,ea|0,148278,3)|0;ea=B;B=0;if(ea&1){ba=137;break}B=0;ea=Sa(1,W|0,+(+p[l>>3]*100.0))|0;W=B;B=0;if(W&1){ba=137;break}B=0;Ia(40,ea|0,148274,3)|0;ea=B;B=0;if(ea&1){ba=137;break}B=0;wa(510,A|0,L|0);ea=B;B=0;if(ea&1){ba=137;break}B=0;ya(425,A|0)|0;ea=B;B=0;if(ea&1){ba=138;break}Yua(A);k[z>>2]=27468;k[K>>2]=27488;k[L>>2]=27560;Yua(P);Ava(L);vva(K)}if((V|0)<(k[o>>2]|0)){S=V;T=Y;U=Z}else{ka=Y;la=Z;ma=Z;na=S;ba=141;break}}a:do if((ba|0)==62){U=Rb()|0;Sqa(aa);Qb(U|0)}else if((ba|0)==76){U=s+56|0;T=s+4|0;k[s>>2]=27524;k[U>>2]=27544;B=0;wa(508,s+56|0,T|0);R=B;B=0;if(R&1){R=Rb()|0;oa=Q;pa=R;vva(U);Qb(pa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[U>>2]=27488;B=0;va(448,T|0);R=B;B=0;do if(R&1){O=Rb()|0;qa=Q;ra=O}else{k[T>>2]=27560;O=s+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,T|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(c);Yua(O);Ava(T);qa=M;ra=N;break}Yua(c);B=0;N=Ia(40,s|0,148282,29)|0;M=B;B=0;b:do if(!(M&1)?(B=0,Xa(239,N|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,u|0,147359,94);H=B;B=0;do if(!(H&1)){B=0;eb(502,v|0,147454,25);I=B;B=0;if(I&1){I=Rb()|0;j=Q;Yua(u);sa=j;ta=I;break}B=0;wa(510,w|0,T|0);I=B;B=0;if(I&1){I=Rb()|0;xa=Q;za=I;Aa=1}else{B=0;ua(163,a|0,u|0,v|0,80,w|0);I=B;B=0;if(I&1)Ba=1;else{B=0;eb(503,a|0,1240,229);B=0;Ba=0}I=Rb()|0;j=Q;Yua(w);xa=j;za=I;Aa=Ba}Yua(v);Yua(u);if(Aa){sa=xa;ta=za}else{Ca=xa;Da=za;break b}}else{I=Rb()|0;sa=Q;ta=I}while(0);zb(a|0);Ca=sa;Da=ta}else ba=91;while(0);if((ba|0)==91){N=Rb()|0;Ca=Q;Da=N}k[s>>2]=27468;k[U>>2]=27488;k[T>>2]=27560;Yua(O);Ava(T);vva(U);Ea=Ca;Fa=Da;Qb(Fa|0)}while(0);oa=qa;pa=ra;vva(U);Qb(pa|0)}else if((ba|0)==100)if(ja){T=x+56|0;R=x+4|0;k[x>>2]=27524;k[T>>2]=27544;B=0;wa(508,x+56|0,R|0);N=B;B=0;if(N&1){N=Rb()|0;Ga=Q;Ha=N;vva(T);Qb(Ha|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[T>>2]=27488;B=0;va(448,R|0);N=B;B=0;do if(N&1){M=Rb()|0;Ja=Q;Ka=M}else{k[R>>2]=27560;M=x+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(c);Yua(M);Ava(R);Ja=I;Ka=H;break}Yua(c);k[x+(k[(k[x>>2]|0)+-12>>2]|0)+12>>2]=50;H=x+(k[(k[x>>2]|0)+-12>>2]|0)+4|0;k[H>>2]=k[H>>2]&-177|32;B=0;H=Ia(40,x|0,148312,42)|0;I=B;B=0;do if(((((!(I&1)?(B=0,j=Sa(1,H|0,+(ia*100.0))|0,g=B,B=0,!(g&1)):0)?(B=0,g=Ia(40,j|0,148270,3)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Sa(1,g|0,+(+p[l>>3]*100.0))|0,g=B,B=0,!(g&1)):0)?(B=0,Ia(40,j|0,148274,3)|0,j=B,B=0,!(j&1)):0)?(B=0,wa(510,y|0,R|0),j=B,B=0,!(j&1)):0){B=0;ya(425,y|0)|0;j=B;B=0;if(j&1){j=Rb()|0;g=Q;Yua(y);La=g;Ma=j;break}else{Yua(y);k[x>>2]=27468;k[T>>2]=27488;k[R>>2]=27560;Yua(M);Ava(R);vva(T);Na=Y;Oa=Z;Pa=Z;Qa=S;ba=158;break a}}else ba=117;while(0);if((ba|0)==117){H=Rb()|0;La=Q;Ma=H}k[x>>2]=27468;k[T>>2]=27488;k[R>>2]=27560;Yua(M);Ava(R);vva(T);Ea=La;Fa=Ma;Qb(Fa|0)}while(0);Ga=Ja;Ha=Ka;vva(T);Qb(Ha|0)}else{Na=Y;Oa=Z;Pa=Z;Qa=S;ba=158}else if((ba|0)==124){R=Rb()|0;N=Q;Yua(c);Yua(P);Ava(L);Ra=N;Ta=R;ba=127}else if((ba|0)==125){R=Rb()|0;Ua=Q;Va=R;vva(K);Qb(Va|0)}else if((ba|0)==126){R=Rb()|0;Ra=Q;Ta=R;ba=127}else if((ba|0)==137){R=Rb()|0;Wa=Q;Ya=R;ba=139}else if((ba|0)==138){R=Rb()|0;N=Q;Yua(A);Wa=N;Ya=R;ba=139}else if((ba|0)==141){R=C+56|0;N=C+4|0;k[C>>2]=27524;k[R>>2]=27544;B=0;wa(508,C+56|0,N|0);U=B;B=0;if(U&1){U=Rb()|0;Za=Q;_a=U;vva(R);Qb(_a|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[R>>2]=27488;B=0;va(448,N|0);U=B;B=0;do if(U&1){H=Rb()|0;$a=Q;ab=H}else{k[N>>2]=27560;H=C+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);I=B;B=0;if(I&1){I=Rb()|0;O=Q;Yua(c);Yua(H);Ava(N);$a=O;ab=I;break}Yua(c);B=0;I=Ia(40,C|0,147682,43)|0;O=B;B=0;do if(((!(O&1)?(B=0,j=Xa(242,I|0,k[o>>2]|0)|0,g=B,B=0,!(g&1)):0)?(B=0,Ia(40,j|0,148995,11)|0,j=B,B=0,!(j&1)):0)?(B=0,wa(510,D|0,N|0),j=B,B=0,!(j&1)):0){B=0;ya(425,D|0)|0;j=B;B=0;if(j&1){j=Rb()|0;g=Q;Yua(D);bb=g;cb=j;break}else{Yua(D);k[C>>2]=27468;k[R>>2]=27488;k[N>>2]=27560;Yua(H);Ava(N);vva(R);Na=ka;Oa=la;Pa=ma;Qa=na;ba=158;break a}}else ba=155;while(0);if((ba|0)==155){I=Rb()|0;bb=Q;cb=I}k[C>>2]=27468;k[R>>2]=27488;k[N>>2]=27560;Yua(H);Ava(N);vva(R);Ea=bb;Fa=cb;Qb(Fa|0)}while(0);Za=$a;_a=ab;vva(R);Qb(_a|0)}while(0);if((ba|0)==127){Ua=Ra;Va=Ta;vva(K);Qb(Va|0)}else if((ba|0)==139){k[z>>2]=27468;k[K>>2]=27488;k[L>>2]=27560;Yua(P);Ava(L);vva(K);Ea=Wa;Fa=Ya;Qb(Fa|0)}else if((ba|0)==158){c:do if(EY()|0){Ya=E+56|0;Wa=E+4|0;k[E>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,E+56|0,Wa|0);K=B;B=0;if(K&1){K=Rb()|0;db=Q;fb=K;vva(Ya);Qb(fb|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Ya>>2]=27488;B=0;va(448,Wa|0);K=B;B=0;do if(K&1){L=Rb()|0;gb=Q;hb=L}else{k[Wa>>2]=27560;L=E+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Wa|0,c|0);P=B;B=0;if(P&1){P=Rb()|0;z=Q;Yua(c);Yua(L);Ava(Wa);gb=z;hb=P;break}Yua(c);B=0;P=Ia(40,E|0,147767,32)|0;z=B;B=0;do if(((!(z&1)?(B=0,Va=Xa(242,P|0,Qa|0)|0,Ta=B,B=0,!(Ta&1)):0)?(B=0,Ia(40,Va|0,149177,1)|0,Va=B,B=0,!(Va&1)):0)?(B=0,wa(510,F|0,Wa|0),Va=B,B=0,!(Va&1)):0){B=0;ya(425,F|0)|0;Va=B;B=0;if(Va&1){Va=Rb()|0;Ta=Q;Yua(F);ib=Ta;jb=Va;break}else{Yua(F);k[E>>2]=27468;k[Ya>>2]=27488;k[Wa>>2]=27560;Yua(L);Ava(Wa);vva(Ya);break c}}else ba=173;while(0);if((ba|0)==173){P=Rb()|0;ib=Q;jb=P}k[E>>2]=27468;k[Ya>>2]=27488;k[Wa>>2]=27560;Yua(L);Ava(Wa);vva(Ya);Ea=ib;Fa=jb;Qb(Fa|0)}while(0);db=gb;fb=hb;vva(Ya);Qb(fb|0)}while(0);fb=k[f>>2]|0;if(fb){if((k[fb>>2]|0)!=0?(f=k[fb+4>>2]|0,(f|0)!=0):0){hb=k[f>>2]|0;if(hb)Ec[k[(k[hb>>2]|0)+4>>2]&1023](hb);Sqa(f)}Sqa(fb)}if(Na){if((k[Na>>2]|0)!=0?(fb=k[Na+4>>2]|0,(fb|0)!=0):0){f=k[fb>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);Sqa(fb)}Sqa(Na)}Na=k[q>>2]|0;if(Na){if((k[Na>>2]|0)!=0?(q=k[Na+4>>2]|0,(q|0)!=0):0){fb=k[q>>2]|0;if(fb)Ec[k[(k[fb>>2]|0)+4>>2]&1023](fb);Sqa(q)}Sqa(Na)}if(!Oa){kb=k[G>>2]|0;lb=kb+4|0;mb=k[lb>>2]|0;Ec[mb&1023](G);r=b;return}if((k[Pa>>2]|0)!=0?(Pa=k[Oa+4>>2]|0,(Pa|0)!=0):0){Na=k[Pa>>2]|0;if(Na)Ec[k[(k[Na>>2]|0)+4>>2]&1023](Na);Sqa(Pa)}Sqa(Oa);kb=k[G>>2]|0;lb=kb+4|0;mb=k[lb>>2]|0;Ec[mb&1023](G);r=b;return}}function Voa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;b=r;r=r+224|0;c=b+208|0;d=b+204|0;e=b+200|0;f=b+196|0;g=b+192|0;h=b+188|0;i=b+184|0;j=b+180|0;l=b+176|0;m=b+40|0;n=b+24|0;o=b+12|0;p=b;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;q=a+44|0;cO(k[q>>2]|0,l,478);Eh(a);ooa(d,e,h,i,0,a);s=a+24|0;poa(j,k[s>>2]|0,k[l>>2]|0);Loa(k[h>>2]|0,k[e>>2]|0,k[j>>2]|0,0);l=k[e>>2]|0;if(l){if((k[l>>2]|0)!=0?(e=k[l+4>>2]|0,(e|0)!=0):0){t=k[e>>2]|0;if(t)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);Sqa(e)}Sqa(l)}Poa(g,k[d>>2]|0,k[h>>2]|0,0,k[i>>2]|0,k[q>>2]|0);l=k[g>>2]|0;e=Qqa(8)|0;B=0;va(485,e|0);t=B;B=0;if(t&1){t=Rb()|0;Sqa(e);Qb(t|0)}if(k[l>>2]|0){t=k[l+4>>2]|0;l=Qqa(4)|0;u=k[t>>2]|0;v=Hc[k[(k[u>>2]|0)+36>>2]&511](u)|0;k[l>>2]=v;u=k[t>>2]|0;Fc[k[(k[u>>2]|0)+60>>2]&1023](u,v);k[e+4>>2]=l}l=k[d>>2]|0;if(k[l>>2]|0){v=k[k[l+4>>2]>>2]|0;nd[k[(k[v>>2]|0)+28>>2]&1023](v,k[k[(k[g>>2]|0)+4>>2]>>2]|0,k[k[e+4>>2]>>2]|0)}v=Qqa(8)|0;B=0;va(485,v|0);l=B;B=0;if(l&1){l=Rb()|0;Sqa(v);Qb(l|0)}if((k[e>>2]|0)!=0?(l=e+4|0,u=k[l>>2]|0,t=Qqa(4)|0,w=k[u>>2]|0,x=Hc[k[(k[w>>2]|0)+36>>2]&511](w)|0,k[t>>2]=x,w=k[u>>2]|0,Fc[k[(k[w>>2]|0)+60>>2]&1023](w,x),k[v+4>>2]=t,(k[e>>2]|0)!=0):0){x=k[k[l>>2]>>2]|0;Fc[k[(k[x>>2]|0)+60>>2]&1023](x,k[t>>2]|0)}if((k[v>>2]|0)!=0?(t=v+4|0,x=k[k[t>>2]>>2]|0,Xc[k[(k[x>>2]|0)+48>>2]&63](x,k[k[(k[h>>2]|0)+4>>2]>>2]|0,-1.0),(k[v>>2]|0)!=0):0){x=k[k[t>>2]>>2]|0;y=+id[k[(k[x>>2]|0)+64>>2]&63](x,1)}else y=0.0;x=k[h>>2]|0;if(!(k[x>>2]|0))z=0.0;else{t=k[k[x+4>>2]>>2]|0;z=+id[k[(k[t>>2]|0)+64>>2]&63](t,1)}A=y/z;if(A>1.0e-06){t=m+56|0;x=m+4|0;k[m>>2]=27524;k[t>>2]=27544;B=0;wa(508,m+56|0,x|0);l=B;B=0;if(l&1){l=Rb()|0;C=Q;D=l;vva(t);Qb(D|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[t>>2]=27488;B=0;va(448,x|0);l=B;B=0;do if(l&1){w=Rb()|0;E=Q;F=w}else{k[x>>2]=27560;w=m+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;G=Q;Yua(c);Yua(w);Ava(x);E=G;F=u;break}Yua(c);B=0;u=Ia(40,m|0,147480,48)|0;G=B;B=0;if(((!(G&1)?(B=0,G=Sa(1,u|0,+A)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,G|0,149177,1)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,n|0,147529,92);G=B;B=0;do if(G&1){H=Rb()|0;I=Q;J=H}else{B=0;eb(502,o|0,147622,23);H=B;B=0;if(H&1){H=Rb()|0;K=Q;Yua(n);I=K;J=H;break}B=0;wa(510,p|0,x|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,u|0,n|0,o|0,49,p|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,u|0,1240,229);B=0;O=0}H=Rb()|0;K=Q;Yua(p);L=K;M=H;N=O}Yua(o);Yua(n);if(N){I=L;J=M;break}else{P=L;R=M}k[m>>2]=27468;k[t>>2]=27488;k[x>>2]=27560;Yua(w);Ava(x);vva(t);Qb(R|0)}while(0);zb(u|0);P=I;R=J;k[m>>2]=27468;k[t>>2]=27488;k[x>>2]=27560;Yua(w);Ava(x);vva(t);Qb(R|0)}G=Rb()|0;P=Q;R=G;k[m>>2]=27468;k[t>>2]=27488;k[x>>2]=27560;Yua(w);Ava(x);vva(t);Qb(R|0)}while(0);C=E;D=F;vva(t);Qb(D|0)}if((k[e>>2]|0)!=0?(D=k[e+4>>2]|0,(D|0)!=0):0){t=k[D>>2]|0;if(t)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);Sqa(D)}Sqa(e);if((k[v>>2]|0)!=0?(e=k[v+4>>2]|0,(e|0)!=0):0){D=k[e>>2]|0;if(D)Ec[k[(k[D>>2]|0)+4>>2]&1023](D);Sqa(e)}Sqa(v);v=k[d>>2]|0;if(v){if((k[v>>2]|0)!=0?(d=k[v+4>>2]|0,(d|0)!=0):0){e=k[d>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(d)}Sqa(v)}v=k[h>>2]|0;if(v){if((k[v>>2]|0)!=0?(h=k[v+4>>2]|0,(h|0)!=0):0){d=k[h>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);Sqa(h)}Sqa(v)}v=k[i>>2]|0;if(v){if((k[v>>2]|0)!=0?(i=k[v+4>>2]|0,(i|0)!=0):0){h=k[i>>2]|0;if(h)Ec[k[(k[h>>2]|0)+4>>2]&1023](h);Sqa(i)}Sqa(v)}Roa(f,k[g>>2]|0,k[j>>2]|0,k[s>>2]|0,k[q>>2]|0,0);q=k[g>>2]|0;if(q){if((k[q>>2]|0)!=0?(g=k[q+4>>2]|0,(g|0)!=0):0){s=k[g>>2]|0;if(s)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);Sqa(g)}Sqa(q)}q=k[j>>2]|0;if(q){if((k[q>>2]|0)!=0?(j=k[q+4>>2]|0,(j|0)!=0):0){g=k[j>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(j)}Sqa(q)}xoa(a,k[f>>2]|0);a=k[f>>2]|0;if(!a){r=b;return}if((k[a>>2]|0)!=0?(f=k[a+4>>2]|0,(f|0)!=0):0){q=k[f>>2]|0;if(q)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);Sqa(f)}Sqa(a);r=b;return}function Woa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0;c=r;r=r+544|0;d=c+524|0;e=c+520|0;f=c+516|0;g=c+512|0;h=c+508|0;j=c+504|0;l=c+500|0;m=c+496|0;n=c+536|0;o=c+492|0;q=c+488|0;s=c+484|0;t=c+480|0;u=c+476|0;v=c+16|0;w=c+8|0;x=c;y=c+328|0;z=c+464|0;A=c+176|0;C=c+312|0;D=c+40|0;E=c+24|0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;F=a+44|0;cO(k[F>>2]|0,s,80);cO(k[F>>2]|0,t,72);dO(k[F>>2]|0,v,78);dO(k[F>>2]|0,w,75);dO(k[F>>2]|0,x,69);cO(k[F>>2]|0,u,478);Eh(a);if(b)G=hh(k[a+36>>2]|0)|0;else G=0;i[n>>0]=0;Aoa(g,a);H=a+24|0;Koa(h,k[g>>2]|0,k[H>>2]|0,k[F>>2]|0);uoa(a,(i[n>>0]|0)!=0,645);xoa(a,k[g>>2]|0);I=y+56|0;J=y+4|0;K=y+56|0;L=y+128|0;M=y+132|0;N=y+36|0;O=y+52|0;P=1;R=0;while(1){if(R){if((k[R>>2]|0)!=0?(S=k[R+4>>2]|0,(S|0)!=0):0){T=k[S>>2]|0;if(T)Ec[k[(k[T>>2]|0)+4>>2]&1023](T);Sqa(S)}Sqa(R)}S=k[h>>2]|0;T=k[g>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}ooa(e,f,j,l,0,a);poa(m,k[H>>2]|0,k[u>>2]|0);Loa(k[j>>2]|0,k[f>>2]|0,k[m>>2]|0,0);T=k[f>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}Poa(h,k[e>>2]|0,k[j>>2]|0,S,k[l>>2]|0,k[F>>2]|0);Roa(g,k[h>>2]|0,k[m>>2]|0,k[H>>2]|0,k[F>>2]|0,0);T=k[m>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}Zoa(n,k[e>>2]|0,k[j>>2]|0,k[h>>2]|0,S,+p[v>>3],+p[w>>3],+p[x>>3]);T=k[e>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}T=k[j>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}T=k[l>>2]|0;if(T){if((k[T>>2]|0)!=0?(U=k[T+4>>2]|0,(U|0)!=0):0){V=k[U>>2]|0;if(V)Ec[k[(k[V>>2]|0)+4>>2]&1023](V);Sqa(U)}Sqa(T)}uoa(a,(i[n>>0]|0)!=0,645);xoa(a,k[g>>2]|0);Moa(o,q,a);if(EY()|0){k[y>>2]=27524;k[I>>2]=27544;B=0;wa(508,K|0,J|0);T=B;B=0;if(T&1){W=58;break}k[L>>2]=0;k[M>>2]=-1;k[y>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);T=B;B=0;if(T&1){W=59;break}k[J>>2]=27560;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[O>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,J|0,d|0);T=B;B=0;if(T&1){W=57;break}Yua(d);B=0;T=Ia(40,y|0,147646,35)|0;U=B;B=0;if(U&1){W=68;break}B=0;U=Xa(242,T|0,k[q>>2]|0)|0;T=B;B=0;if(T&1){W=68;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=68;break}B=0;wa(510,z|0,J|0);U=B;B=0;if(U&1){W=68;break}B=0;ya(425,z|0)|0;U=B;B=0;if(U&1){W=69;break}Yua(z);k[y>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I)}U=(i[n>>0]|0)==0;if((k[o>>2]|0)!=0|U){T=P+1|0;if(U)X=T;else{Y=T;Z=S;_=P;W=76;break}}else{if((k[q>>2]|0)<=(k[s>>2]|0)){$=S;aa=P;W=73;break}i[n>>0]=0;X=P+1|0}if((X|0)<(k[t>>2]|0)){P=X;R=S}else{ba=S;ca=P;W=81;break}}a:do if((W|0)==57){P=Rb()|0;R=Q;Yua(d);Yua(N);Ava(J);da=R;ea=P;W=60}else if((W|0)==58){P=Rb()|0;fa=Q;ga=P;vva(I);Qb(ga|0)}else if((W|0)==59){P=Rb()|0;da=Q;ea=P;W=60}else if((W|0)==68){P=Rb()|0;ha=Q;ia=P;W=70}else if((W|0)==69){P=Rb()|0;R=Q;Yua(z);ha=R;ia=P;W=70}else if((W|0)==73){i[n>>0]=1;Y=aa+1|0;Z=$;_=aa;W=76}else if((W|0)==81){P=A+56|0;R=A+4|0;k[A>>2]=27524;k[P>>2]=27544;B=0;wa(508,A+56|0,R|0);X=B;B=0;if(X&1){X=Rb()|0;ja=Q;ka=X;vva(P);Qb(ka|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[P>>2]=27488;B=0;va(448,R|0);X=B;B=0;do if(X&1){s=Rb()|0;la=Q;ma=s}else{k[R>>2]=27560;s=A+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[A+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,R|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;o=Q;Yua(d);Yua(s);Ava(R);la=o;ma=q;break}Yua(d);B=0;q=Ia(40,A|0,147682,43)|0;o=B;B=0;do if(((!(o&1)?(B=0,O=Xa(242,q|0,k[t>>2]|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,O|0,148995,11)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,C|0,R|0),O=B,B=0,!(O&1)):0){B=0;ya(425,C|0)|0;O=B;B=0;if(O&1){O=Rb()|0;M=Q;Yua(C);na=M;oa=O;break}Yua(C);k[A>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(s);Ava(R);vva(P);i[n>>0]=1;O=k[a+48>>2]|0;M=Qqa(48)|0;B=0;L=ya(428,O|0)|0;K=B;B=0;if(!(K&1)?(pa=+(k[t>>2]|0),k[M>>2]=27904,k[M+4>>2]=L+1,p[M+16>>3]=pa,k[M+32>>2]=-9999,p[M+40>>3]=-9999.0,k[M+24>>2]=1,k[M+28>>2]=1,B=0,wa(512,M+8|0,70),L=B,B=0,!(L&1)):0){Oo(O,M)|0;uoa(a,(i[n>>0]|0)!=0,645);xoa(a,k[g>>2]|0);qa=ba;ra=ca;break a}O=Rb()|0;L=Q;Sqa(M);sa=L;ta=O;Qb(ta|0)}else W=97;while(0);if((W|0)==97){q=Rb()|0;na=Q;oa=q}k[A>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(s);Ava(R);vva(P);sa=na;ta=oa;Qb(ta|0)}while(0);ja=la;ka=ma;vva(P);Qb(ka|0)}while(0);do if((W|0)==60){fa=da;ga=ea;vva(I);Qb(ga|0)}else if((W|0)==70){k[y>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);sa=ha;ta=ia;Qb(ta|0)}else if((W|0)==76){ka=k[a+48>>2]|0;ma=Qqa(48)|0;B=0;la=ya(428,ka|0)|0;ja=B;B=0;if(!(ja&1)?(k[ma>>2]=27904,k[ma+4>>2]=la+1,p[ma+16>>3]=+(Y|0),k[ma+32>>2]=-9999,p[ma+40>>3]=-9999.0,k[ma+24>>2]=1,k[ma+28>>2]=1,B=0,wa(512,ma+8|0,70),la=B,B=0,!(la&1)):0){Oo(ka,ma)|0;qa=Z;ra=_;break}ka=Rb()|0;la=Q;Sqa(ma);sa=la;ta=ka;Qb(ta|0)}while(0);b:do if(EY()|0){_=D+56|0;Z=D+4|0;k[D>>2]=27524;k[_>>2]=27544;B=0;wa(508,D+56|0,Z|0);Y=B;B=0;if(Y&1){Y=Rb()|0;ua=Q;xa=Y;vva(_);Qb(xa|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[_>>2]=27488;B=0;va(448,Z|0);Y=B;B=0;do if(Y&1){ia=Rb()|0;za=Q;Aa=ia}else{k[Z>>2]=27560;ia=D+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Z|0,d|0);ha=B;B=0;if(ha&1){ha=Rb()|0;I=Q;Yua(d);Yua(ia);Ava(Z);za=I;Aa=ha;break}Yua(d);B=0;ha=Ia(40,D|0,147767,32)|0;I=B;B=0;do if(((!(I&1)?(B=0,J=Xa(242,ha|0,ra|0)|0,N=B,B=0,!(N&1)):0)?(B=0,Ia(40,J|0,149177,1)|0,J=B,B=0,!(J&1)):0)?(B=0,wa(510,E|0,Z|0),J=B,B=0,!(J&1)):0){B=0;ya(425,E|0)|0;J=B;B=0;if(J&1){J=Rb()|0;N=Q;Yua(E);Ba=N;Ca=J;break}else{Yua(E);k[D>>2]=27468;k[_>>2]=27488;k[Z>>2]=27560;Yua(ia);Ava(Z);vva(_);break b}}else W=116;while(0);if((W|0)==116){ha=Rb()|0;Ba=Q;Ca=ha}k[D>>2]=27468;k[_>>2]=27488;k[Z>>2]=27560;Yua(ia);Ava(Z);vva(_);sa=Ba;ta=Ca;Qb(ta|0)}while(0);ua=za;xa=Aa;vva(_);Qb(xa|0)}while(0);if(b){b=a+36|0;a=k[b>>2]|0;if(a){$K(a);Sqa(a)}k[b>>2]=G}G=k[h>>2]|0;if(G){if((k[G>>2]|0)!=0?(h=k[G+4>>2]|0,(h|0)!=0):0){b=k[h>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);Sqa(h)}Sqa(G)}G=k[g>>2]|0;if(G){if((k[G>>2]|0)!=0?(g=k[G+4>>2]|0,(g|0)!=0):0){h=k[g>>2]|0;if(h)Ec[k[(k[h>>2]|0)+4>>2]&1023](h);Sqa(g)}Sqa(G)}if(!qa){r=c;return}if((k[qa>>2]|0)!=0?(G=k[qa+4>>2]|0,(G|0)!=0):0){g=k[G>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(G)}Sqa(qa);r=c;return}function Xoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;b=r;r=r+400|0;c=b+380|0;d=b+392|0;e=b+376|0;f=b+24|0;g=b+372|0;h=b+368|0;j=b+364|0;l=b+360|0;m=b+356|0;n=b+352|0;o=b+348|0;q=b+344|0;s=b+340|0;t=b+336|0;u=b+332|0;v=b+16|0;w=b+8|0;x=b;y=b+184|0;z=b+320|0;A=b+48|0;C=b+32|0;k[g>>2]=0;k[h>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;D=a+44|0;cO(k[D>>2]|0,t,72);cO(k[D>>2]|0,u,478);cO(k[D>>2]|0,e,71);dO(k[D>>2]|0,v,78);dO(k[D>>2]|0,w,75);dO(k[D>>2]|0,x,69);Eh(a);i[d>>0]=0;Aoa(l,a);E=a+24|0;Koa(m,k[l>>2]|0,k[E>>2]|0,k[D>>2]|0);uoa(a,0,645);xoa(a,k[l>>2]|0);F=1;G=0;H=0;while(1){if(H){if((k[H>>2]|0)!=0?(I=k[H+4>>2]|0,(I|0)!=0):0){J=k[I>>2]|0;if(J)Ec[k[(k[J>>2]|0)+4>>2]&1023](J);Sqa(I)}Sqa(H)}I=k[l>>2]|0;if(G){if((k[G>>2]|0)!=0?(J=k[G+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(G)}J=k[m>>2]|0;if((F|0)==1|(k[e>>2]|0)==2){ooa(g,h,o,q,0,a);poa(s,k[E>>2]|0,k[u>>2]|0);Loa(k[o>>2]|0,k[h>>2]|0,k[s>>2]|0,0);K=k[h>>2]|0;if(K){if((k[K>>2]|0)!=0?(L=k[K+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(K)}Poa(m,k[g>>2]|0,k[o>>2]|0,J,k[q>>2]|0,k[D>>2]|0);K=k[q>>2]|0;if(K){if((k[K>>2]|0)!=0?(L=k[K+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(K)}K=k[g>>2]|0;if(K){if((k[K>>2]|0)!=0?(L=k[K+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(K)}K=k[o>>2]|0;if(K){if((k[K>>2]|0)!=0?(L=k[K+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(K)}Roa(l,k[m>>2]|0,k[s>>2]|0,k[E>>2]|0,k[D>>2]|0,0);K=k[s>>2]|0;if(K){if((k[K>>2]|0)!=0?(L=k[K+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(K)}xoa(a,k[l>>2]|0);if(I){if((k[I>>2]|0)!=0?(K=k[I+4>>2]|0,(K|0)!=0):0){L=k[K>>2]|0;if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);Sqa(K)}Sqa(I)}K=k[l>>2]|0;if(J){if((k[J>>2]|0)!=0?(L=k[J+4>>2]|0,(L|0)!=0):0){M=k[L>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(L)}Sqa(J)}N=k[m>>2]|0;O=K}else{N=J;O=I}I=Qqa(8)|0;B=0;va(485,I|0);J=B;B=0;if(J&1){P=I;R=70;break}if(k[N>>2]|0){J=k[N+4>>2]|0;K=Qqa(4)|0;L=k[J>>2]|0;M=Hc[k[(k[L>>2]|0)+36>>2]&511](L)|0;k[K>>2]=M;L=k[J>>2]|0;Fc[k[(k[L>>2]|0)+60>>2]&1023](L,M);k[I+4>>2]=K;K=k[N>>2]|0;k[m>>2]=I;if(K){K=k[k[N+4>>2]>>2]|0;Fc[k[(k[K>>2]|0)+60>>2]&1023](K,k[k[I+4>>2]>>2]|0)}}else k[m>>2]=I;ooa(g,h,o,q,f,a);I=k[q>>2]|0;if(I){if((k[I>>2]|0)!=0?(K=k[I+4>>2]|0,(K|0)!=0):0){M=k[K>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(K)}Sqa(I)}poa(s,k[E>>2]|0,k[u>>2]|0);Loa(k[o>>2]|0,k[h>>2]|0,k[s>>2]|0,0);I=k[h>>2]|0;if(I){if((k[I>>2]|0)!=0?(K=k[I+4>>2]|0,(K|0)!=0):0){M=k[K>>2]|0;if(M)Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Sqa(K)}Sqa(I)}I=k[o>>2]|0;K=Qqa(8)|0;B=0;va(485,K|0);M=B;B=0;if(M&1){S=K;R=89;break}if(k[I>>2]|0){M=k[I+4>>2]|0;I=Qqa(4)|0;L=k[M>>2]|0;J=Hc[k[(k[L>>2]|0)+36>>2]&511](L)|0;k[I>>2]=J;L=k[M>>2]|0;Fc[k[(k[L>>2]|0)+60>>2]&1023](L,J);k[K+4>>2]=I}I=k[g>>2]|0;if(k[I>>2]|0){J=k[k[I+4>>2]>>2]|0;nd[k[(k[J>>2]|0)+28>>2]&1023](J,k[k[(k[m>>2]|0)+4>>2]>>2]|0,k[k[K+4>>2]>>2]|0)}if((k[K>>2]|0)!=0?(J=K+4|0,I=k[k[J>>2]>>2]|0,Cc[k[(k[I>>2]|0)+68>>2]&63](I,-1.0),(k[K>>2]|0)!=0):0){I=k[k[J>>2]>>2]|0;Xc[k[(k[I>>2]|0)+44>>2]&63](I,k[k[(k[o>>2]|0)+4>>2]>>2]|0,1.0)}qqa(j,a,+p[f>>3]);Poa(n,k[j>>2]|0,K,0,0,k[D>>2]|0);I=k[j>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){L=k[J>>2]|0;if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);Sqa(J)}Sqa(I)}if((k[K>>2]|0)!=0?(I=k[K+4>>2]|0,(I|0)!=0):0){J=k[I>>2]|0;if(J)Ec[k[(k[J>>2]|0)+4>>2]&1023](J);Sqa(I)}Sqa(K);K=k[m>>2]|0;I=k[n>>2]|0;if(!(k[K>>2]|0))T=I;else{J=k[k[K+4>>2]>>2]|0;Xc[k[(k[J>>2]|0)+44>>2]&63](J,k[k[I+4>>2]>>2]|0,1.0);T=k[n>>2]|0}if(T){if((k[T>>2]|0)!=0?(I=k[T+4>>2]|0,(I|0)!=0):0){J=k[I>>2]|0;if(J)Ec[k[(k[J>>2]|0)+4>>2]&1023](J);Sqa(I)}Sqa(T)}Roa(l,k[m>>2]|0,k[s>>2]|0,k[E>>2]|0,k[D>>2]|0,0);I=k[s>>2]|0;if(I){do if(k[I>>2]|0){J=k[I+4>>2]|0;if(!J)break;K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}while(0);Sqa(I)}xoa(a,k[l>>2]|0);Zoa(d,k[g>>2]|0,k[o>>2]|0,k[m>>2]|0,N,+p[v>>3],+p[w>>3],+p[x>>3]);J=k[g>>2]|0;if(J){do if(k[J>>2]|0){K=k[J+4>>2]|0;if(!K)break;L=k[K>>2]|0;if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);Sqa(K)}while(0);Sqa(J)}I=k[o>>2]|0;if(I){do if(k[I>>2]|0){K=k[I+4>>2]|0;if(!K)break;L=k[K>>2]|0;if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);Sqa(K)}while(0);Sqa(I)}if(i[d>>0]|0){U=N;V=F;W=N;X=O;break}if((F|0)>=(k[t>>2]|0)){Y=N;Z=F;_=N;$=O;R=140;break}F=F+1|0;G=N;H=O}a:do if((R|0)==70){O=Rb()|0;Sqa(P);Qb(O|0)}else if((R|0)==89){O=Rb()|0;Sqa(S);Qb(O|0)}else if((R|0)==140){O=y+56|0;H=y+4|0;k[y>>2]=27524;k[O>>2]=27544;B=0;wa(508,y+56|0,H|0);N=B;B=0;if(N&1){N=Rb()|0;aa=Q;ba=N;vva(O);Qb(ba|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[O>>2]=27488;B=0;va(448,H|0);N=B;B=0;do if(N&1){G=Rb()|0;ca=Q;da=G}else{k[H>>2]=27560;G=y+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;d=Q;Yua(c);Yua(G);Ava(H);ca=d;da=F;break}Yua(c);B=0;F=Ia(40,y|0,147726,40)|0;d=B;B=0;do if(((!(d&1)?(B=0,o=Xa(242,F|0,k[t>>2]|0)|0,g=B,B=0,!(g&1)):0)?(B=0,Ia(40,o|0,148995,11)|0,o=B,B=0,!(o&1)):0)?(B=0,wa(510,z|0,H|0),o=B,B=0,!(o&1)):0){B=0;ya(425,z|0)|0;o=B;B=0;if(o&1){o=Rb()|0;g=Q;Yua(z);ea=g;fa=o;break}else{Yua(z);k[y>>2]=27468;k[O>>2]=27488;k[H>>2]=27560;Yua(G);Ava(H);vva(O);U=Y;V=Z;W=_;X=$;break a}}else R=154;while(0);if((R|0)==154){F=Rb()|0;ea=Q;fa=F}k[y>>2]=27468;k[O>>2]=27488;k[H>>2]=27560;Yua(G);Ava(H);vva(O);ga=ea;ha=fa;Qb(ha|0)}while(0);aa=ca;ba=da;vva(O);Qb(ba|0)}while(0);b:do if(EY()|0){ba=A+56|0;da=A+4|0;k[A>>2]=27524;k[ba>>2]=27544;B=0;wa(508,A+56|0,da|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ia=Q;ja=ca;vva(ba);Qb(ja|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[ba>>2]=27488;B=0;va(448,da|0);ca=B;B=0;do if(ca&1){aa=Rb()|0;ka=Q;la=aa}else{k[da>>2]=27560;aa=A+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ea=Q;Yua(c);Yua(aa);Ava(da);ka=ea;la=fa;break}Yua(c);B=0;fa=Ia(40,A|0,147767,32)|0;ea=B;B=0;do if(((!(ea&1)?(B=0,y=Xa(242,fa|0,V+-1|0)|0,$=B,B=0,!($&1)):0)?(B=0,Ia(40,y|0,149177,1)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,C|0,da|0),y=B,B=0,!(y&1)):0){B=0;ya(425,C|0)|0;y=B;B=0;if(y&1){y=Rb()|0;$=Q;Yua(C);ma=$;na=y;break}else{Yua(C);k[A>>2]=27468;k[ba>>2]=27488;k[da>>2]=27560;Yua(aa);Ava(da);vva(ba);break b}}else R=173;while(0);if((R|0)==173){fa=Rb()|0;ma=Q;na=fa}k[A>>2]=27468;k[ba>>2]=27488;k[da>>2]=27560;Yua(aa);Ava(da);vva(ba);ga=ma;ha=na;Qb(ha|0)}while(0);ia=ka;ja=la;vva(ba);Qb(ja|0)}while(0);ja=k[m>>2]|0;if(ja){if((k[ja>>2]|0)!=0?(m=k[ja+4>>2]|0,(m|0)!=0):0){la=k[m>>2]|0;if(la)Ec[k[(k[la>>2]|0)+4>>2]&1023](la);Sqa(m)}Sqa(ja)}ja=k[l>>2]|0;if(ja){if((k[ja>>2]|0)!=0?(l=k[ja+4>>2]|0,(l|0)!=0):0){m=k[l>>2]|0;if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Sqa(l)}Sqa(ja)}if(X){if((k[X>>2]|0)!=0?(ja=k[X+4>>2]|0,(ja|0)!=0):0){l=k[ja>>2]|0;if(l)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);Sqa(ja)}Sqa(X)}if(!W){r=b;return}if((k[U>>2]|0)!=0?(U=k[W+4>>2]|0,(U|0)!=0):0){X=k[U>>2]|0;if(X)Ec[k[(k[X>>2]|0)+4>>2]&1023](X);Sqa(U)}Sqa(W);r=b;return}function Yoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+400|0;c=b+376|0;d=b+368|0;e=b+364|0;f=b+360|0;g=b+356|0;h=b+208|0;i=b+344|0;j=b+56|0;l=b+44|0;m=b+72|0;n=b+32|0;o=b+20|0;p=b+8|0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;q=a+44|0;dO(k[q>>2]|0,b,358);cO(k[q>>2]|0,b+372|0,478);Eh(a);cO(k[q>>2]|0,d,477);switch(k[d>>2]|0){case 510:{q=Qqa(4)|0;k[q>>2]=39544;Oea(q,e,a);Pea(q,g,a);Nea(q,f,0,a);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);break}case 496:{q=Qqa(4)|0;k[q>>2]=38620;P8(q,e,a);Q8(q,g,a);O8(q,f,0,a);Ec[k[(k[q>>2]|0)+4>>2]&1023](q);break}default:{q=h+56|0;a=h+4|0;k[h>>2]=27524;k[q>>2]=27544;B=0;wa(508,h+56|0,a|0);f=B;B=0;if(f&1){f=Rb()|0;s=Q;t=f;vva(q);Qb(t|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[q>>2]=27488;B=0;va(448,a|0);f=B;B=0;do if(f&1){g=Rb()|0;u=Q;v=g}else{k[a>>2]=27560;g=h+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);e=B;B=0;if(e&1){e=Rb()|0;b=Q;Yua(c);Yua(g);Ava(a);u=b;v=e;break}Yua(c);B=0;e=Ia(40,h|0,147800,14)|0;b=B;B=0;a:do if((((!(b&1)?(B=0,w=ya(427,k[d>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,e|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,147815,23)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,i|0,147839,89);y=B;B=0;do if(!(y&1)){B=0;eb(502,j|0,147929,20);w=B;B=0;if(w&1){w=Rb()|0;z=Q;Yua(i);A=w;C=z;break}B=0;wa(510,l|0,a|0);z=B;B=0;if(z&1){z=Rb()|0;D=Q;E=z;F=1}else{B=0;ua(163,x|0,i|0,j|0,373,l|0);z=B;B=0;if(z&1)G=1;else{B=0;eb(503,x|0,1240,229);B=0;G=0}z=Rb()|0;w=Q;Yua(l);D=w;E=z;F=G}Yua(j);Yua(i);if(F){A=E;C=D}else{H=E;I=D;break a}}else{z=Rb()|0;A=z;C=Q}while(0);zb(x|0);H=A;I=C}else J=20;while(0);if((J|0)==20){e=Rb()|0;H=e;I=Q}k[h>>2]=27468;k[q>>2]=27488;k[a>>2]=27560;Yua(g);Ava(a);vva(q);K=I;L=H;Qb(L|0)}while(0);s=u;t=v;vva(q);Qb(t|0)}}t=m+56|0;q=m+4|0;k[m>>2]=27524;k[t>>2]=27544;B=0;wa(508,m+56|0,q|0);v=B;B=0;if(v&1){v=Rb()|0;M=Q;N=v;vva(t);Qb(N|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[t>>2]=27488;B=0;va(448,q|0);v=B;B=0;do if(v&1){u=Rb()|0;O=Q;P=u}else{k[q>>2]=27560;u=m+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;H=Q;Yua(c);Yua(u);Ava(q);O=H;P=s;break}Yua(c);B=0;s=Ia(40,m|0,147950,27)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,s|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,n|0,147839,89);a=B;B=0;do if(!(a&1)){B=0;eb(502,o|0,147929,20);h=B;B=0;if(h&1){h=Rb()|0;C=Q;Yua(n);R=h;S=C;break}B=0;wa(510,p|0,q|0);C=B;B=0;if(C&1){C=Rb()|0;T=1;U=Q;V=C}else{B=0;ua(163,I|0,n|0,o|0,456,p|0);C=B;B=0;if(C&1)W=1;else{B=0;eb(503,I|0,1240,229);B=0;W=0}C=Rb()|0;h=Q;Yua(p);T=W;U=h;V=C}Yua(o);Yua(n);if(T){R=V;S=U}else{X=U;Y=V;break b}}else{C=Rb()|0;R=C;S=Q}while(0);zb(I|0);X=S;Y=R}else J=45;while(0);if((J|0)==45){s=Rb()|0;X=Q;Y=s}k[m>>2]=27468;k[t>>2]=27488;k[q>>2]=27560;Yua(u);Ava(q);vva(t);K=X;L=Y;Qb(L|0)}while(0);M=O;N=P;vva(t);Qb(N|0)}function Zoa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0.0,ra=0.0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0.0,Da=0.0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0.0,nb=0.0,ob=0.0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0.0,Zb=0.0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0;j=r;r=r+2192|0;l=j+2176|0;m=j+1944|0;n=j+2164|0;o=j+1808|0;q=j+2152|0;s=j+1656|0;u=j+2140|0;v=j+1504|0;w=j+2128|0;x=j+2116|0;y=j+2104|0;z=j+1352|0;A=j+2092|0;C=j+1216|0;D=j+2080|0;E=j+1064|0;F=j+1792|0;G=j+1640|0;H=j+1488|0;I=j+928|0;J=j+1200|0;K=j+776|0;L=j+912|0;M=j+640|0;N=j+624|0;O=j+488|0;P=j+340|0;R=j+328|0;S=j+176|0;T=j+352|0;U=j+24|0;V=j+192|0;W=j+12|0;X=j+40|0;Y=j;a:do if(BY()|0){Z=m+56|0;_=m+4|0;k[m>>2]=27524;k[Z>>2]=27544;B=0;wa(508,m+56|0,_|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;ca=aa;vva(Z);Qb(ca|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);aa=B;B=0;do if(aa&1){da=Rb()|0;ea=Q;fa=da}else{k[_>>2]=27560;da=m+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[m+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,_|0,l|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(l);Yua(da);Ava(_);ea=ha;fa=ga;break}Yua(l);B=0;Ia(40,m|0,147978,24)|0;ga=B;B=0;do if(!(ga&1)?(B=0,wa(510,n|0,_|0),ha=B,B=0,!(ha&1)):0){B=0;ya(425,n|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(n);ja=ha;ka=ia;break}else{Yua(n);k[m>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(da);Ava(_);vva(Z);break a}}else la=14;while(0);if((la|0)==14){ga=Rb()|0;ja=ga;ka=Q}k[m>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(da);Ava(_);vva(Z);ma=ka;na=ja;Qb(na|0)}while(0);ba=ea;ca=fa;vva(Z);Qb(ca|0)}while(0);if(k[d>>2]|0){ca=k[k[d+4>>2]>>2]|0;Fc[k[(k[ca>>2]|0)+28>>2]&1023](ca,l);if(!(k[l>>2]|0)){oa=1;i[a>>0]=oa;r=j;return}}b:do if(EY()|0){ca=Qqa(8)|0;B=0;va(485,ca|0);fa=B;B=0;if(fa&1){fa=Rb()|0;Sqa(ca);Qb(fa|0)}if(k[d>>2]|0){fa=k[d+4>>2]|0;ea=Qqa(4)|0;ba=k[fa>>2]|0;ja=Hc[k[(k[ba>>2]|0)+36>>2]&511](ba)|0;k[ea>>2]=ja;ba=k[fa>>2]|0;Fc[k[(k[ba>>2]|0)+60>>2]&1023](ba,ja);k[ca+4>>2]=ea}if(k[b>>2]|0){ea=k[k[b+4>>2]>>2]|0;nd[k[(k[ea>>2]|0)+28>>2]&1023](ea,k[k[d+4>>2]>>2]|0,k[k[ca+4>>2]>>2]|0)}ea=Qqa(8)|0;B=0;va(485,ea|0);ja=B;B=0;if(ja&1){ja=Rb()|0;Sqa(ea);Qb(ja|0)}if((k[ca>>2]|0)!=0?(ja=ca+4|0,ba=k[ja>>2]|0,fa=Qqa(4)|0,ka=k[ba>>2]|0,m=Hc[k[(k[ka>>2]|0)+36>>2]&511](ka)|0,k[fa>>2]=m,ka=k[ba>>2]|0,Fc[k[(k[ka>>2]|0)+60>>2]&1023](ka,m),k[ea+4>>2]=fa,(k[ca>>2]|0)!=0):0){m=k[k[ja>>2]>>2]|0;Fc[k[(k[m>>2]|0)+60>>2]&1023](m,k[fa>>2]|0)}if((k[ea>>2]|0)!=0?(fa=ea+4|0,m=k[k[fa>>2]>>2]|0,Xc[k[(k[m>>2]|0)+48>>2]&63](m,k[k[c+4>>2]>>2]|0,-1.0),(k[ea>>2]|0)!=0):0){m=k[k[fa>>2]>>2]|0;pa=+id[k[(k[m>>2]|0)+64>>2]&63](m,1)}else pa=0.0;if(!(k[c>>2]|0))qa=0.0;else{m=k[k[c+4>>2]>>2]|0;qa=+id[k[(k[m>>2]|0)+64>>2]&63](m,1)}ra=pa/qa;m=o+56|0;fa=o+4|0;k[o>>2]=27524;k[m>>2]=27544;B=0;wa(508,o+56|0,fa|0);ja=B;B=0;if(ja&1){ja=Rb()|0;sa=Q;ta=ja;vva(m);Qb(ta|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[m>>2]=27488;B=0;va(448,fa|0);ja=B;B=0;do if(ja&1){ka=Rb()|0;xa=Q;za=ka}else{k[fa>>2]=27560;ka=o+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[o+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,fa|0,l|0);ba=B;B=0;if(ba&1){ba=Rb()|0;n=Q;Yua(l);Yua(ka);Ava(fa);xa=n;za=ba;break}Yua(l);B=0;ba=Ia(40,o|0,149177,1)|0;n=B;B=0;do if(((!(n&1)?(B=0,_=Ia(40,ba|0,148003,38)|0,aa=B,B=0,!(aa&1)):0)?(B=0,aa=Sa(1,_|0,+ra)|0,_=B,B=0,!(_&1)):0)?(B=0,Ia(40,aa|0,149177,1)|0,aa=B,B=0,!(aa&1)):0){B=0;wa(510,q|0,fa|0);aa=B;B=0;if(aa&1){la=62;break}B=0;ya(425,q|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;_=Q;Yua(q);Aa=_;Ba=aa;break}Yua(q);k[o>>2]=27468;k[m>>2]=27488;k[fa>>2]=27560;Yua(ka);Ava(fa);vva(m);do if(k[ca>>2]|0){aa=k[ca+4>>2]|0;if(!aa)break;_=k[aa>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(aa)}while(0);Sqa(ca);do if(k[ea>>2]|0){aa=k[ea+4>>2]|0;if(!aa)break;_=k[aa>>2]|0;if(_)Ec[k[(k[_>>2]|0)+4>>2]&1023](_);Sqa(aa)}while(0);Sqa(ea);break b}else la=62;while(0);if((la|0)==62){ba=Rb()|0;Aa=Q;Ba=ba}k[o>>2]=27468;k[m>>2]=27488;k[fa>>2]=27560;Yua(ka);Ava(fa);vva(m);ma=Aa;na=Ba;Qb(na|0)}while(0);sa=xa;ta=za;vva(m);Qb(ta|0)}while(0);ta=Qqa(8)|0;B=0;va(485,ta|0);za=B;B=0;if(za&1){za=Rb()|0;Sqa(ta);Qb(za|0)}if(k[d>>2]|0){za=k[d+4>>2]|0;xa=Qqa(4)|0;sa=k[za>>2]|0;Ba=Hc[k[(k[sa>>2]|0)+36>>2]&511](sa)|0;k[xa>>2]=Ba;sa=k[za>>2]|0;Fc[k[(k[sa>>2]|0)+60>>2]&1023](sa,Ba);k[ta+4>>2]=xa}if(k[b>>2]|0){xa=k[k[b+4>>2]>>2]|0;nd[k[(k[xa>>2]|0)+28>>2]&1023](xa,k[k[e+4>>2]>>2]|0,k[k[ta+4>>2]>>2]|0)}xa=Qqa(8)|0;B=0;va(485,xa|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(xa);Qb(b|0)}if((k[ta>>2]|0)!=0?(b=ta+4|0,Ba=k[b>>2]|0,sa=Qqa(4)|0,za=k[Ba>>2]|0,Aa=Hc[k[(k[za>>2]|0)+36>>2]&511](za)|0,k[sa>>2]=Aa,za=k[Ba>>2]|0,Fc[k[(k[za>>2]|0)+60>>2]&1023](za,Aa),k[xa+4>>2]=sa,(k[ta>>2]|0)!=0):0){Aa=k[k[b>>2]>>2]|0;Fc[k[(k[Aa>>2]|0)+60>>2]&1023](Aa,k[sa>>2]|0)}if((k[xa>>2]|0)!=0?(sa=xa+4|0,Aa=k[k[sa>>2]>>2]|0,Xc[k[(k[Aa>>2]|0)+48>>2]&63](Aa,k[k[c+4>>2]>>2]|0,-1.0),(k[xa>>2]|0)!=0):0){Aa=k[k[sa>>2]>>2]|0;Ca=+id[k[(k[Aa>>2]|0)+64>>2]&63](Aa,1)}else Ca=0.0;if(!(k[c>>2]|0))Da=0.0;else{Aa=k[k[c+4>>2]>>2]|0;Da=+id[k[(k[Aa>>2]|0)+64>>2]&63](Aa,1)}qa=Ca/Da;pa=+$(+qa);p[t>>3]=pa;Aa=k[t+4>>2]|0;if(Aa>>>0>2146435072|(Aa|0)==2146435072&(k[t>>2]|0)>>>0>0){Aa=s+56|0;c=s+4|0;k[s>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,s+56|0,c|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Ea=Q;Fa=sa;vva(Aa);Qb(Fa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Aa>>2]=27488;B=0;va(448,c|0);sa=B;B=0;do if(sa&1){b=Rb()|0;Ga=Q;Ha=b}else{k[c>>2]=27560;b=s+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[s+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,c|0,l|0);za=B;B=0;if(za&1){za=Rb()|0;Ba=Q;Yua(l);Yua(b);Ava(c);Ga=Ba;Ha=za;break}Yua(l);B=0;za=Ia(40,s|0,148042,10)|0;Ba=B;B=0;do if((!(Ba&1)?(B=0,o=Sa(1,za|0,+Da)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,o|0,148053,19)|0,o=B,B=0,!(o&1)):0){B=0;o=Sa(1,q|0,+Ca)|0;q=B;B=0;if(q&1){la=112;break}B=0;Ia(40,o|0,148073,2)|0;o=B;B=0;if(o&1){la=112;break}B=0;wa(510,u|0,c|0);o=B;B=0;if(o&1){la=112;break}B=0;ya(425,u|0)|0;o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(u);Ja=q;Ka=o;break}Yua(u);k[s>>2]=27468;k[Aa>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(Aa);o=v+56|0;q=v+4|0;k[v>>2]=27524;k[o>>2]=27544;B=0;wa(508,v+56|0,q|0);fa=B;B=0;if(fa&1){fa=Rb()|0;La=Q;Ma=fa;vva(o);Qb(Ma|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);fa=B;B=0;do if(fa&1){ea=Rb()|0;Na=Q;Oa=ea}else{k[q>>2]=27560;ea=v+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[v+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,q|0,l|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ja=Q;Yua(l);Yua(ea);Ava(q);Na=ja;Oa=ca;break}Yua(l);B=0;ca=Ia(40,v|0,148076,52)|0;ja=B;B=0;c:do if(ja&1)la=115;else{B=0;Xa(239,ca|0,0)|0;Z=B;B=0;if(Z&1){la=115;break}Z=Ab(20)|0;B=0;eb(502,w|0,148129,80);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,x|0,148210,11);n=B;B=0;if(n&1){n=Rb()|0;da=Q;Yua(w);Pa=n;Qa=da;break}B=0;wa(510,y|0,q|0);da=B;B=0;if(da&1){da=Rb()|0;Ra=1;Ta=Q;Ua=da}else{B=0;ua(163,Z|0,w|0,x|0,65,y|0);da=B;B=0;if(da&1)Va=1;else{B=0;eb(503,Z|0,1240,229);B=0;Va=0}da=Rb()|0;n=Q;Yua(y);Ra=Va;Ta=n;Ua=da}Yua(x);Yua(w);if(Ra){Pa=Ua;Qa=Ta}else{Wa=Ta;Ya=Ua;break c}}else{da=Rb()|0;Pa=da;Qa=Q}while(0);zb(Z|0);Wa=Qa;Ya=Pa}while(0);if((la|0)==115){ca=Rb()|0;Wa=Q;Ya=ca}k[v>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(ea);Ava(q);vva(o);ma=Wa;na=Ya;Qb(na|0)}while(0);La=Na;Ma=Oa;vva(o);Qb(Ma|0)}else la=112;while(0);if((la|0)==112){za=Rb()|0;Ja=Q;Ka=za}k[s>>2]=27468;k[Aa>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(Aa);ma=Ja;na=Ka;Qb(na|0)}while(0);Ea=Ga;Fa=Ha;vva(Aa);Qb(Fa|0)}if((k[ta>>2]|0)!=0?(Fa=k[ta+4>>2]|0,(Fa|0)!=0):0){Aa=k[Fa>>2]|0;if(Aa)Ec[k[(k[Aa>>2]|0)+4>>2]&1023](Aa);Sqa(Fa)}Sqa(ta);if((k[xa>>2]|0)!=0?(ta=k[xa+4>>2]|0,(ta|0)!=0):0){Fa=k[ta>>2]|0;if(Fa)Ec[k[(k[Fa>>2]|0)+4>>2]&1023](Fa);Sqa(ta)}Sqa(xa);xa=EY()|0;d:do if(qa<f)if(xa){ta=z+56|0;Fa=z+4|0;k[z>>2]=27524;k[ta>>2]=27544;B=0;wa(508,z+56|0,Fa|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Za=Q;_a=Aa;vva(ta);Qb(_a|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[ta>>2]=27488;B=0;va(448,Fa|0);Aa=B;B=0;do if(Aa&1){Ha=Rb()|0;$a=Q;ab=Ha}else{k[Fa>>2]=27560;Ha=z+36|0;k[Ha>>2]=0;k[Ha+4>>2]=0;k[Ha+8>>2]=0;k[Ha+12>>2]=0;k[z+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Fa|0,l|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ea=Q;Yua(l);Yua(Ha);Ava(Fa);$a=Ea;ab=Ga;break}Yua(l);k[z+(k[(k[z>>2]|0)+-12>>2]|0)+12>>2]=50;Ga=z+(k[(k[z>>2]|0)+-12>>2]|0)+4|0;k[Ga>>2]=k[Ga>>2]&-177|32;B=0;Ga=Ia(40,z|0,148222,47)|0;Ea=B;B=0;do if(!(Ea&1)){B=0;Ka=Sa(1,Ga|0,+(qa*100.0))|0;Ja=B;B=0;if(Ja&1){la=151;break}B=0;Ja=Ia(40,Ka|0,148270,3)|0;Ka=B;B=0;if(Ka&1){la=151;break}B=0;Ka=Sa(1,Ja|0,+(f*100.0))|0;Ja=B;B=0;if(Ja&1){la=151;break}B=0;Ia(40,Ka|0,148274,3)|0;Ka=B;B=0;if(Ka&1){la=151;break}B=0;wa(510,A|0,Fa|0);Ka=B;B=0;if(Ka&1){la=151;break}B=0;ya(425,A|0)|0;Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ja=Q;Yua(A);bb=Ja;cb=Ka;break}else{Yua(A);k[z>>2]=27468;k[ta>>2]=27488;k[Fa>>2]=27560;Yua(Ha);Ava(Fa);vva(ta);db=1;break d}}else la=151;while(0);if((la|0)==151){Ga=Rb()|0;bb=Q;cb=Ga}k[z>>2]=27468;k[ta>>2]=27488;k[Fa>>2]=27560;Yua(Ha);Ava(Fa);vva(ta);ma=bb;na=cb;Qb(na|0)}while(0);Za=$a;_a=ab;vva(ta);Qb(_a|0)}else db=1;else if(xa){Fa=C+56|0;Aa=C+4|0;k[C>>2]=27524;k[Fa>>2]=27544;B=0;wa(508,C+56|0,Aa|0);b=B;B=0;if(b&1){b=Rb()|0;fb=Q;gb=b;vva(Fa);Qb(gb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Fa>>2]=27488;B=0;va(448,Aa|0);b=B;B=0;do if(b&1){Ga=Rb()|0;hb=Q;ib=Ga}else{k[Aa>>2]=27560;Ga=C+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[C+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Aa|0,l|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;o=Q;Yua(l);Yua(Ga);Ava(Aa);hb=o;ib=Ea;break}Yua(l);k[C+(k[(k[C>>2]|0)+-12>>2]|0)+12>>2]=50;Ea=C+(k[(k[C>>2]|0)+-12>>2]|0)+4|0;k[Ea>>2]=k[Ea>>2]&-177|32;B=0;Ea=Ia(40,C|0,148222,47)|0;o=B;B=0;do if(!(o&1)){B=0;Ka=Sa(1,Ea|0,+(qa*100.0))|0;Ja=B;B=0;if(Ja&1){la=171;break}B=0;Ja=Ia(40,Ka|0,148278,3)|0;Ka=B;B=0;if(Ka&1){la=171;break}B=0;Ka=Sa(1,Ja|0,+(f*100.0))|0;Ja=B;B=0;if(Ja&1){la=171;break}B=0;Ia(40,Ka|0,148274,3)|0;Ka=B;B=0;if(Ka&1){la=171;break}B=0;wa(510,D|0,Aa|0);Ka=B;B=0;if(Ka&1){la=171;break}B=0;ya(425,D|0)|0;Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ja=Q;Yua(D);jb=Ja;kb=Ka;break}else{Yua(D);k[C>>2]=27468;k[Fa>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(Fa);db=0;break d}}else la=171;while(0);if((la|0)==171){Ea=Rb()|0;jb=Q;kb=Ea}k[C>>2]=27468;k[Fa>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(Fa);ma=jb;na=kb;Qb(na|0)}while(0);fb=hb;gb=ib;vva(Fa);Qb(gb|0)}else db=0;while(0);f=+$(+g);p[t>>3]=f;gb=k[t+4>>2]|0;ib=gb>>>0>2146435072|(gb|0)==2146435072&(k[t>>2]|0)>>>0>0;if(ib?!(EY()|0):0){lb=db;mb=0.0}else la=176;e:do if((la|0)==176){gb=Qqa(8)|0;B=0;va(485,gb|0);hb=B;B=0;if(hb&1){hb=Rb()|0;Sqa(gb);Qb(hb|0)}if((k[e>>2]|0)!=0?(hb=e+4|0,fb=k[hb>>2]|0,kb=Qqa(4)|0,jb=k[fb>>2]|0,C=Hc[k[(k[jb>>2]|0)+36>>2]&511](jb)|0,k[kb>>2]=C,jb=k[fb>>2]|0,Fc[k[(k[jb>>2]|0)+60>>2]&1023](jb,C),k[gb+4>>2]=kb,(k[e>>2]|0)!=0):0){C=k[k[hb>>2]>>2]|0;Fc[k[(k[C>>2]|0)+60>>2]&1023](C,k[kb>>2]|0)}do if(!(k[gb>>2]|0))nb=0.0;else{kb=gb+4|0;C=k[k[kb>>2]>>2]|0;Xc[k[(k[C>>2]|0)+48>>2]&63](C,k[k[d+4>>2]>>2]|0,-1.0);if(!(k[gb>>2]|0)){nb=0.0;break}C=k[k[kb>>2]>>2]|0;nb=+id[k[(k[C>>2]|0)+64>>2]&63](C,1)}while(0);if(!(k[e>>2]|0))ob=0.0;else{Fa=k[k[e+4>>2]>>2]|0;ob=+id[k[(k[Fa>>2]|0)+64>>2]&63](Fa,1)}f=+$(+nb);p[t>>3]=f;Fa=k[t+4>>2]|0;do if(!(Fa>>>0>2146435072|(Fa|0)==2146435072&(k[t>>2]|0)>>>0>0)){f=+$(+ob);p[t>>3]=f;C=k[t+4>>2]|0;if(C>>>0>2146435072|(C|0)==2146435072&(k[t>>2]|0)>>>0>0)break;do if(k[gb>>2]|0){C=k[gb+4>>2]|0;if(!C)break;kb=k[C>>2]|0;if(kb)Ec[k[(k[kb>>2]|0)+4>>2]&1023](kb);Sqa(C)}while(0);Sqa(gb);if(ib){Ga=M+56|0;C=M+4|0;k[M>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,M+56|0,C|0);kb=B;B=0;if(kb&1){kb=Rb()|0;pb=Q;qb=kb;vva(Ga);Qb(qb|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[Ga>>2]=27488;B=0;va(448,C|0);kb=B;B=0;do if(kb&1){hb=Rb()|0;rb=Q;sb=hb}else{k[C>>2]=27560;hb=M+36|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;k[M+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,C|0,l|0);jb=B;B=0;if(jb&1){jb=Rb()|0;fb=Q;Yua(l);Yua(hb);Ava(C);rb=fb;sb=jb;break}Yua(l);k[M+(k[(k[M>>2]|0)+-12>>2]|0)+12>>2]=50;jb=M+(k[(k[M>>2]|0)+-12>>2]|0)+4|0;k[jb>>2]=k[jb>>2]&-177|32;B=0;jb=Ia(40,M|0,148312,42)|0;fb=B;B=0;do if(!(fb&1)){B=0;D=Sa(1,jb|0,+(nb/ob*100.0))|0;xa=B;B=0;if(xa&1){la=272;break}B=0;Ia(40,D|0,148274,3)|0;D=B;B=0;if(D&1){la=272;break}B=0;wa(510,N|0,C|0);D=B;B=0;if(D&1){la=272;break}B=0;ya(425,N|0)|0;D=B;B=0;if(D&1){D=Rb()|0;xa=Q;Yua(N);tb=xa;ub=D;break}else{Yua(N);k[M>>2]=27468;k[Ga>>2]=27488;k[C>>2]=27560;Yua(hb);Ava(C);vva(Ga);lb=db;mb=ob;break e}}else la=272;while(0);if((la|0)==272){jb=Rb()|0;tb=Q;ub=jb}k[M>>2]=27468;k[Ga>>2]=27488;k[C>>2]=27560;Yua(hb);Ava(C);vva(Ga);ma=tb;na=ub;Qb(na|0)}while(0);pb=rb;qb=sb;vva(Ga);Qb(qb|0)}f=nb/ob;C=EY()|0;if(f<g){if(!C){lb=db;mb=ob;break e}kb=I+56|0;jb=I+4|0;k[I>>2]=27524;k[kb>>2]=27544;B=0;wa(508,I+56|0,jb|0);fb=B;B=0;if(fb&1){fb=Rb()|0;vb=Q;wb=fb;vva(kb);Qb(wb|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[kb>>2]=27488;B=0;va(448,jb|0);fb=B;B=0;do if(fb&1){ea=Rb()|0;xb=Q;yb=ea}else{k[jb>>2]=27560;ea=I+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[I+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,jb|0,l|0);D=B;B=0;if(D&1){D=Rb()|0;xa=Q;Yua(l);Yua(ea);Ava(jb);xb=xa;yb=D;break}Yua(l);k[I+(k[(k[I>>2]|0)+-12>>2]|0)+12>>2]=50;D=I+(k[(k[I>>2]|0)+-12>>2]|0)+4|0;k[D>>2]=k[D>>2]&-177|32;B=0;D=Ia(40,I|0,148312,42)|0;xa=B;B=0;do if(!(xa&1)){B=0;_a=Sa(1,D|0,+(f*100.0))|0;ab=B;B=0;if(ab&1){la=235;break}B=0;ab=Ia(40,_a|0,148270,3)|0;_a=B;B=0;if(_a&1){la=235;break}B=0;_a=Sa(1,ab|0,+(g*100.0))|0;ab=B;B=0;if(ab&1){la=235;break}B=0;Ia(40,_a|0,148274,3)|0;_a=B;B=0;if(_a&1){la=235;break}B=0;wa(510,J|0,jb|0);_a=B;B=0;if(_a&1){la=235;break}B=0;ya(425,J|0)|0;_a=B;B=0;if(_a&1){_a=Rb()|0;ab=Q;Yua(J);Bb=ab;Cb=_a;break}else{Yua(J);k[I>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(ea);Ava(jb);vva(kb);lb=db;mb=ob;break e}}else la=235;while(0);if((la|0)==235){D=Rb()|0;Bb=Q;Cb=D}k[I>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(ea);Ava(jb);vva(kb);ma=Bb;na=Cb;Qb(na|0)}while(0);vb=xb;wb=yb;vva(kb);Qb(wb|0)}else{if(!C){lb=0;mb=ob;break e}jb=K+56|0;fb=K+4|0;k[K>>2]=27524;k[jb>>2]=27544;B=0;wa(508,K+56|0,fb|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Db=Q;Eb=Ga;vva(jb);Qb(Eb|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[jb>>2]=27488;B=0;va(448,fb|0);Ga=B;B=0;do if(Ga&1){D=Rb()|0;Fb=Q;Gb=D}else{k[fb>>2]=27560;D=K+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[K+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,fb|0,l|0);xa=B;B=0;if(xa&1){xa=Rb()|0;hb=Q;Yua(l);Yua(D);Ava(fb);Fb=hb;Gb=xa;break}Yua(l);k[K+(k[(k[K>>2]|0)+-12>>2]|0)+12>>2]=50;xa=K+(k[(k[K>>2]|0)+-12>>2]|0)+4|0;k[xa>>2]=k[xa>>2]&-177|32;B=0;xa=Ia(40,K|0,148312,42)|0;hb=B;B=0;do if(!(hb&1)){B=0;_a=Sa(1,xa|0,+(f*100.0))|0;ab=B;B=0;if(ab&1){la=255;break}B=0;ab=Ia(40,_a|0,148278,3)|0;_a=B;B=0;if(_a&1){la=255;break}B=0;_a=Sa(1,ab|0,+(g*100.0))|0;ab=B;B=0;if(ab&1){la=255;break}B=0;Ia(40,_a|0,148274,3)|0;_a=B;B=0;if(_a&1){la=255;break}B=0;wa(510,L|0,fb|0);_a=B;B=0;if(_a&1){la=255;break}B=0;ya(425,L|0)|0;_a=B;B=0;if(_a&1){_a=Rb()|0;ab=Q;Yua(L);Hb=ab;Ib=_a;break}else{Yua(L);k[K>>2]=27468;k[jb>>2]=27488;k[fb>>2]=27560;Yua(D);Ava(fb);vva(jb);lb=0;mb=ob;break e}}else la=255;while(0);if((la|0)==255){xa=Rb()|0;Hb=Q;Ib=xa}k[K>>2]=27468;k[jb>>2]=27488;k[fb>>2]=27560;Yua(D);Ava(fb);vva(jb);ma=Hb;na=Ib;Qb(na|0)}while(0);Db=Fb;Eb=Gb;vva(jb);Qb(Eb|0)}}while(0);gb=E+56|0;Fa=E+4|0;k[E>>2]=27524;k[gb>>2]=27544;B=0;wa(508,E+56|0,Fa|0);fb=B;B=0;if(fb&1){fb=Rb()|0;Jb=Q;Kb=fb;vva(gb);Qb(Kb|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[gb>>2]=27488;B=0;va(448,Fa|0);fb=B;B=0;do if(fb&1){Ga=Rb()|0;Lb=Q;Mb=Ga}else{k[Fa>>2]=27560;Ga=E+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[E+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Fa|0,l|0);C=B;B=0;if(C&1){C=Rb()|0;kb=Q;Yua(l);Yua(Ga);Ava(Fa);Lb=kb;Mb=C;break}Yua(l);B=0;C=Ia(40,E|0,148282,29)|0;kb=B;B=0;f:do if(kb&1)la=203;else{B=0;Xa(239,C|0,0)|0;xa=B;B=0;if(xa&1){la=203;break}xa=Ab(20)|0;B=0;eb(502,F|0,148129,80);hb=B;B=0;do if(!(hb&1)){B=0;eb(502,G|0,148210,11);ea=B;B=0;if(ea&1){ea=Rb()|0;_a=Q;Yua(F);Nb=_a;Ob=ea;break}B=0;wa(510,H|0,Fa|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Pb=1;Sb=Q;Tb=ea}else{B=0;ua(163,xa|0,F|0,G|0,89,H|0);ea=B;B=0;if(ea&1)Ub=1;else{B=0;eb(503,xa|0,1240,229);B=0;Ub=0}ea=Rb()|0;_a=Q;Yua(H);Pb=Ub;Sb=_a;Tb=ea}Yua(G);Yua(F);if(Pb){Nb=Sb;Ob=Tb}else{Vb=Sb;Wb=Tb;break f}}else{ea=Rb()|0;Nb=Q;Ob=ea}while(0);zb(xa|0);Vb=Nb;Wb=Ob}while(0);if((la|0)==203){C=Rb()|0;Vb=Q;Wb=C}k[E>>2]=27468;k[gb>>2]=27488;k[Fa>>2]=27560;Yua(Ga);Ava(Fa);vva(gb);ma=Vb;na=Wb;Qb(na|0)}while(0);Jb=Lb;Kb=Mb;vva(gb);Qb(Kb|0)}while(0);ob=+$(+h);p[t>>3]=ob;Kb=k[t+4>>2]|0;Mb=Kb>>>0>2146435072|(Kb|0)==2146435072&(k[t>>2]|0)>>>0>0;if(Mb?!(EY()|0):0)Xb=lb;else la=277;g:do if((la|0)==277){Kb=Qqa(8)|0;B=0;va(485,Kb|0);Lb=B;B=0;if(Lb&1){Lb=Rb()|0;Sqa(Kb);Qb(Lb|0)}do if(k[e>>2]|0){Lb=e+4|0;Jb=k[Lb>>2]|0;Wb=Qqa(4)|0;Vb=k[Jb>>2]|0;E=Hc[k[(k[Vb>>2]|0)+36>>2]&511](Vb)|0;k[Wb>>2]=E;Vb=k[Jb>>2]|0;Fc[k[(k[Vb>>2]|0)+60>>2]&1023](Vb,E);k[Kb+4>>2]=Wb;if(!(k[e>>2]|0))break;E=k[k[Lb>>2]>>2]|0;Fc[k[(k[E>>2]|0)+60>>2]&1023](E,k[Wb>>2]|0)}while(0);do if(!(k[Kb>>2]|0)){Yb=0.0;Zb=0.0}else{gb=Kb+4|0;Wb=k[k[gb>>2]>>2]|0;Xc[k[(k[Wb>>2]|0)+48>>2]&63](Wb,k[k[d+4>>2]>>2]|0,-1.0);if(!(k[Kb>>2]|0)){Yb=0.0;Zb=0.0;break}Wb=k[k[gb>>2]>>2]|0;ob=+id[k[(k[Wb>>2]|0)+64>>2]&63](Wb,1);if(!(k[Kb>>2]|0)){Yb=ob;Zb=0.0;break}Wb=k[k[gb>>2]>>2]|0;Yb=ob;Zb=+id[k[(k[Wb>>2]|0)+64>>2]&63](Wb,0)}while(0);ob=+$(+Yb);p[t>>3]=ob;Wb=k[t+4>>2]|0;do if(!(Wb>>>0>2146435072|(Wb|0)==2146435072&(k[t>>2]|0)>>>0>0)){ob=+$(+mb);p[t>>3]=ob;gb=k[t+4>>2]|0;if(gb>>>0>2146435072|(gb|0)==2146435072&(k[t>>2]|0)>>>0>0)break;do if(k[Kb>>2]|0){gb=k[Kb+4>>2]|0;if(!gb)break;E=k[gb>>2]|0;if(E)Ec[k[(k[E>>2]|0)+4>>2]&1023](E);Sqa(gb)}while(0);Sqa(Kb);if(Mb){Ga=X+56|0;gb=X+4|0;k[X>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,X+56|0,gb|0);E=B;B=0;if(E&1){E=Rb()|0;_b=Q;$b=E;vva(Ga);Qb($b|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[Ga>>2]=27488;B=0;va(448,gb|0);E=B;B=0;do if(E&1){Lb=Rb()|0;ac=Q;bc=Lb}else{k[gb>>2]=27560;Lb=X+36|0;k[Lb>>2]=0;k[Lb+4>>2]=0;k[Lb+8>>2]=0;k[Lb+12>>2]=0;k[X+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,gb|0,l|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;Jb=Q;Yua(l);Yua(Lb);Ava(gb);ac=Jb;bc=Vb;break}Yua(l);k[X+(k[(k[X>>2]|0)+-12>>2]|0)+12>>2]=50;Vb=X+(k[(k[X>>2]|0)+-12>>2]|0)+4|0;k[Vb>>2]=k[Vb>>2]&-177|32;B=0;Vb=Ia(40,X|0,148355,33)|0;Jb=B;B=0;do if(!(Jb&1)){B=0;Ob=Sa(1,Vb|0,+Zb)|0;Nb=B;B=0;if(Nb&1){la=372;break}B=0;Ia(40,Ob|0,149177,1)|0;Ob=B;B=0;if(Ob&1){la=372;break}B=0;wa(510,Y|0,gb|0);Ob=B;B=0;if(Ob&1){la=372;break}B=0;ya(425,Y|0)|0;Ob=B;B=0;if(Ob&1){Ob=Rb()|0;Nb=Q;Yua(Y);cc=Nb;dc=Ob;break}else{Yua(Y);k[X>>2]=27468;k[Ga>>2]=27488;k[gb>>2]=27560;Yua(Lb);Ava(gb);vva(Ga);Xb=lb;break g}}else la=372;while(0);if((la|0)==372){Vb=Rb()|0;cc=Q;dc=Vb}k[X>>2]=27468;k[Ga>>2]=27488;k[gb>>2]=27560;Yua(Lb);Ava(gb);vva(Ga);ma=cc;na=dc;Qb(na|0)}while(0);_b=ac;$b=bc;vva(Ga);Qb($b|0)}gb=EY()|0;if(Zb<h){if(!gb){Xb=lb;break g}E=T+56|0;Vb=T+4|0;k[T>>2]=27524;k[E>>2]=27544;B=0;wa(508,T+56|0,Vb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;ec=Q;fc=Jb;vva(E);Qb(fc|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[E>>2]=27488;B=0;va(448,Vb|0);Jb=B;B=0;do if(Jb&1){xa=Rb()|0;gc=Q;hc=xa}else{k[Vb>>2]=27560;xa=T+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[T+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Vb|0,l|0);Ob=B;B=0;if(Ob&1){Ob=Rb()|0;Nb=Q;Yua(l);Yua(xa);Ava(Vb);gc=Nb;hc=Ob;break}Yua(l);k[T+(k[(k[T>>2]|0)+-12>>2]|0)+12>>2]=50;Ob=T+(k[(k[T>>2]|0)+-12>>2]|0)+4|0;k[Ob>>2]=k[Ob>>2]&-177|32;B=0;Ob=Ia(40,T|0,148355,33)|0;Nb=B;B=0;do if(!(Nb&1)){B=0;Tb=Sa(1,Ob|0,+Zb)|0;Sb=B;B=0;if(Sb&1){la=335;break}B=0;Sb=Ia(40,Tb|0,148270,3)|0;Tb=B;B=0;if(Tb&1){la=335;break}B=0;Tb=Sa(1,Sb|0,+h)|0;Sb=B;B=0;if(Sb&1){la=335;break}B=0;Ia(40,Tb|0,149177,1)|0;Tb=B;B=0;if(Tb&1){la=335;break}B=0;wa(510,U|0,Vb|0);Tb=B;B=0;if(Tb&1){la=335;break}B=0;ya(425,U|0)|0;Tb=B;B=0;if(Tb&1){Tb=Rb()|0;Sb=Q;Yua(U);ic=Sb;jc=Tb;break}else{Yua(U);k[T>>2]=27468;k[E>>2]=27488;k[Vb>>2]=27560;Yua(xa);Ava(Vb);vva(E);Xb=lb;break g}}else la=335;while(0);if((la|0)==335){Ob=Rb()|0;ic=Q;jc=Ob}k[T>>2]=27468;k[E>>2]=27488;k[Vb>>2]=27560;Yua(xa);Ava(Vb);vva(E);ma=ic;na=jc;Qb(na|0)}while(0);ec=gc;fc=hc;vva(E);Qb(fc|0)}else{if(!gb){Xb=0;break g}Vb=V+56|0;Jb=V+4|0;k[V>>2]=27524;k[Vb>>2]=27544;B=0;wa(508,V+56|0,Jb|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;kc=Q;lc=Ga;vva(Vb);Qb(lc|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[Vb>>2]=27488;B=0;va(448,Jb|0);Ga=B;B=0;do if(Ga&1){Ob=Rb()|0;mc=Q;nc=Ob}else{k[Jb>>2]=27560;Ob=V+36|0;k[Ob>>2]=0;k[Ob+4>>2]=0;k[Ob+8>>2]=0;k[Ob+12>>2]=0;k[V+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Jb|0,l|0);Nb=B;B=0;if(Nb&1){Nb=Rb()|0;Lb=Q;Yua(l);Yua(Ob);Ava(Jb);mc=Lb;nc=Nb;break}Yua(l);k[V+(k[(k[V>>2]|0)+-12>>2]|0)+12>>2]=50;Nb=V+(k[(k[V>>2]|0)+-12>>2]|0)+4|0;k[Nb>>2]=k[Nb>>2]&-177|32;B=0;Nb=Ia(40,V|0,148355,33)|0;Lb=B;B=0;do if(!(Lb&1)){B=0;Tb=Sa(1,Nb|0,+Zb)|0;Sb=B;B=0;if(Sb&1){la=355;break}B=0;Sb=Ia(40,Tb|0,148278,3)|0;Tb=B;B=0;if(Tb&1){la=355;break}B=0;Tb=Sa(1,Sb|0,+h)|0;Sb=B;B=0;if(Sb&1){la=355;break}B=0;Ia(40,Tb|0,149177,1)|0;Tb=B;B=0;if(Tb&1){la=355;break}B=0;wa(510,W|0,Jb|0);Tb=B;B=0;if(Tb&1){la=355;break}B=0;ya(425,W|0)|0;Tb=B;B=0;if(Tb&1){Tb=Rb()|0;Sb=Q;Yua(W);oc=Sb;pc=Tb;break}else{Yua(W);k[V>>2]=27468;k[Vb>>2]=27488;k[Jb>>2]=27560;Yua(Ob);Ava(Jb);vva(Vb);Xb=0;break g}}else la=355;while(0);if((la|0)==355){Nb=Rb()|0;oc=Q;pc=Nb}k[V>>2]=27468;k[Vb>>2]=27488;k[Jb>>2]=27560;Yua(Ob);Ava(Jb);vva(Vb);ma=oc;na=pc;Qb(na|0)}while(0);kc=mc;lc=nc;vva(Vb);Qb(lc|0)}}while(0);Kb=O+56|0;Wb=O+4|0;k[O>>2]=27524;k[Kb>>2]=27544;B=0;wa(508,O+56|0,Wb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;qc=Q;rc=Jb;vva(Kb);Qb(rc|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[Kb>>2]=27488;B=0;va(448,Wb|0);Jb=B;B=0;do if(Jb&1){Ga=Rb()|0;sc=Q;tc=Ga}else{k[Wb>>2]=27560;Ga=O+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[O+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Wb|0,l|0);gb=B;B=0;if(gb&1){gb=Rb()|0;E=Q;Yua(l);Yua(Ga);Ava(Wb);sc=E;tc=gb;break}Yua(l);B=0;gb=Ia(40,O|0,148282,29)|0;E=B;B=0;h:do if(E&1)la=303;else{B=0;Xa(239,gb|0,0)|0;Nb=B;B=0;if(Nb&1){la=303;break}Nb=Ab(20)|0;B=0;eb(502,P|0,148129,80);Lb=B;B=0;do if(!(Lb&1)){B=0;eb(502,R|0,148210,11);xa=B;B=0;if(xa&1){xa=Rb()|0;Tb=Q;Yua(P);uc=Tb;vc=xa;break}B=0;wa(510,S|0,Wb|0);xa=B;B=0;if(xa&1){xa=Rb()|0;wc=1;xc=Q;yc=xa}else{B=0;ua(163,Nb|0,P|0,R|0,114,S|0);xa=B;B=0;if(xa&1)zc=1;else{B=0;eb(503,Nb|0,1240,229);B=0;zc=0}xa=Rb()|0;Tb=Q;Yua(S);wc=zc;xc=Tb;yc=xa}Yua(R);Yua(P);if(wc){uc=xc;vc=yc}else{Ac=xc;Bc=yc;break h}}else{xa=Rb()|0;uc=Q;vc=xa}while(0);zb(Nb|0);Ac=uc;Bc=vc}while(0);if((la|0)==303){gb=Rb()|0;Ac=Q;Bc=gb}k[O>>2]=27468;k[Kb>>2]=27488;k[Wb>>2]=27560;Yua(Ga);Ava(Wb);vva(Kb);ma=Ac;na=Bc;Qb(na|0)}while(0);qc=sc;rc=tc;vva(Kb);Qb(rc|0)}while(0);oa=Xb&1;i[a>>0]=oa;r=j;return}function _oa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;e=r;r=r+16|0;d=e+4|0;c=e;k[c>>2]=0;cO(f,d,198);hO(f,c,0,176);if((k[d>>2]|0)>0){f=0;do{if((th(a)|0)>0){b=0;do{h=qh(a,b)|0;rd[k[(k[h>>2]|0)+96>>2]&511](h,g,k[(k[c>>2]|0)+(f<<2)>>2]|0,f);b=b+1|0}while((b|0)<(th(a)|0))}f=f+1|0}while((f|0)<(k[d>>2]|0))}d=k[c>>2]|0;if(!d){r=e;return}Tqa(d);r=e;return}function $oa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;f=r;r=r+16|0;e=f+4|0;c=f;k[c>>2]=0;cO(g,e,198);hO(g,c,0,176);g=Qqa(8)|0;j=k[e>>2]|0;B=0;l=ya(429,d|0)|0;d=B;B=0;a:do if(!(d&1)?(m=ma(l,j)|0,B=0,va(485,g|0),n=B,B=0,!(n&1)):0){do if(k[g>>2]|0){B=0;n=ya(423,4)|0;o=B;B=0;if(o&1)break a;B=0;eb(505,n|0,m|0,0);o=B;B=0;if(!(o&1)){k[g+4>>2]=n;break}o=Rb()|0;p=Q;Sqa(n);q=p;s=o;Sqa(g);Qb(s|0)}while(0);if((k[e>>2]|0)>0){m=0;do{if((th(b)|0)>0){o=0;do{p=qh(b,o)|0;Uc[k[(k[p>>2]|0)+184>>2]&63](p,g,k[(k[c>>2]|0)+(m<<2)>>2]|0,m,h,i);o=o+1|0}while((o|0)<(th(b)|0))}m=m+1|0}while((m|0)<(k[e>>2]|0))}if(k[g>>2]|0){m=k[k[g+4>>2]>>2]|0;Ec[k[(k[m>>2]|0)+12>>2]&1023](m)}m=k[c>>2]|0;if(!m){k[a>>2]=g;r=f;return}Tqa(m);k[a>>2]=g;r=f;return}while(0);f=Rb()|0;q=Q;s=f;Sqa(g);Qb(s|0)}function apa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,l=0;f=r;r=r+16|0;e=f;k[e>>2]=0;$oa(e,b,0,d,0,0,g,h,i);i=k[e>>2]|0;if(!(k[i>>2]|0))if(!i){j=0;k[a>>2]=j;r=f;return}else l=0;else{e=k[k[i+4>>2]>>2]|0;l=Hc[k[(k[e>>2]|0)+52>>2]&511](e)|0}if((k[i>>2]|0)!=0?(e=k[i+4>>2]|0,(e|0)!=0):0){h=k[e>>2]|0;if(h)Ec[k[(k[h>>2]|0)+4>>2]&1023](h);Sqa(e)}Sqa(i);j=l;k[a>>2]=j;r=f;return}function bpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c+4|0;e=c;k[e>>2]=0;f=a+44|0;cO(k[f>>2]|0,d,198);hO(k[f>>2]|0,e,0,176);if((k[d>>2]|0)>0){f=a+20|0;a=0;do{if((th(k[f>>2]|0)|0)>0){g=0;do{h=qh(k[f>>2]|0,g)|0;rd[k[(k[h>>2]|0)+420>>2]&511](h,b,k[(k[e>>2]|0)+(a<<2)>>2]|0,a);g=g+1|0}while((g|0)<(th(k[f>>2]|0)|0))}a=a+1|0}while((a|0)<(k[d>>2]|0))}d=k[e>>2]|0;if(!d){r=c;return}Tqa(d);r=c;return}function cpa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0.0,ba=0,ca=0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;g=r;r=r+528|0;f=g+512|0;d=g+508|0;i=g+504|0;j=g+500|0;l=g+352|0;m=g+488|0;n=g+216|0;o=g+200|0;q=g+48|0;s=g+36|0;u=g+64|0;v=g+24|0;w=g+12|0;x=g;k[j>>2]=0;a:do if(BY()|0){y=l+56|0;z=l+4|0;k[l>>2]=27524;k[y>>2]=27544;B=0;wa(508,l+56|0,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(y);Qb(D|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[z>>2]=27560;E=l+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,z|0,f|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(f);Yua(E);Ava(z);F=I;G=H;break}Yua(f);B=0;Ia(40,l|0,148389,36)|0;H=B;B=0;do if(!(H&1)?(B=0,wa(510,m|0,z|0),I=B,B=0,!(I&1)):0){B=0;ya(425,m|0)|0;I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(m);K=I;L=J;break}else{Yua(m);k[l>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(E);Ava(z);vva(y);break a}}else M=14;while(0);if((M|0)==14){H=Rb()|0;K=H;L=Q}k[l>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(E);Ava(z);vva(y);N=K;O=L;Qb(N|0)}while(0);C=F;D=G;vva(y);Qb(D|0)}while(0);cO(h,d,198);hO(h,j,0,176);D=nn(e)|0;cO(h,i,477);h=n_(k[i>>2]|0)|0;i=k[d>>2]|0;e=Rqa(i>>>0>1073741823?-1:i<<2)|0;G=Rqa(i>>>0>536870911?-1:i<<3)|0;F=G;C=Qqa(8)|0;L=ma(i,D)|0;b:do if((i|0)>0){K=C;l=C;m=L;z=0;while(1){B=0;va(485,K|0);A=B;B=0;if(A&1){P=l;M=33;break}if(k[l>>2]|0){B=0;A=ya(423,4)|0;H=B;B=0;if(H&1){P=l;M=33;break}B=0;eb(505,A|0,m|0,0);H=B;B=0;if(H&1){R=l;S=A;M=31;break}k[l+4>>2]=A}k[e+(z<<2)>>2]=l;z=z+1|0;A=k[d>>2]|0;H=Qqa(8)|0;J=ma(A,D)|0;if((z|0)>=(A|0)){T=H;U=H;V=J;break b}else{K=H;l=H;m=J}}if((M|0)==31){m=Rb()|0;l=Q;Sqa(S);W=R;X=l;Y=m}else if((M|0)==33){m=Rb()|0;W=P;X=Q;Y=m}Sqa(W);N=Y;O=X;Qb(N|0)}else{T=C;U=C;V=L}while(0);B=0;va(485,U|0);U=B;B=0;c:do if(U&1)M=38;else{do if(k[T>>2]|0){B=0;L=ya(423,4)|0;C=B;B=0;if(C&1){M=38;break c}B=0;eb(505,L|0,V|0,0);C=B;B=0;if(C&1){C=Rb()|0;X=Q;Sqa(L);Z=X;_=C;break c}else{k[T+4>>2]=L;break}}while(0);if((k[d>>2]|0)>0){L=0;do{C=e+(L<<2)|0;if((th(c)|0)>0){X=0;do{Y=qh(c,X)|0;Dc[k[(k[h>>2]|0)+56>>2]&255](h,k[C>>2]|0,Y,k[(k[j>>2]|0)+(L<<2)>>2]|0,L);X=X+1|0}while((X|0)<(th(c)|0))}X=k[C>>2]|0;if((k[X>>2]|0)!=0?(E=k[k[X+4>>2]>>2]|0,Ec[k[(k[E>>2]|0)+12>>2]&1023](E),E=k[C>>2]|0,(k[E>>2]|0)!=0):0){X=k[k[E+4>>2]>>2]|0;aa=+id[k[(k[X>>2]|0)+64>>2]&63](X,0)}else aa=0.0;p[G+(L<<3)>>3]=aa;L=L+1|0;X=k[d>>2]|0}while((L|0)<(X|0));ba=X;if((ba|0)>0){L=T+4|0;X=0;do{E=e+(X<<2)|0;Y=k[E>>2]|0;if(!(k[T>>2]|0))ca=Y;else{W=k[k[L>>2]>>2]|0;Xc[k[(k[W>>2]|0)+44>>2]&63](W,k[k[Y+4>>2]>>2]|0,1.0);ca=k[E>>2]|0}if(ca){if((k[ca>>2]|0)!=0?(E=k[ca+4>>2]|0,(E|0)!=0):0){Y=k[E>>2]|0;if(Y)Ec[k[(k[Y>>2]|0)+4>>2]&1023](Y);Sqa(E)}Sqa(ca)}X=X+1|0}while((X|0)<(k[d>>2]|0))}}if((k[T>>2]|0)!=0?(X=k[k[T+4>>2]>>2]|0,da=+id[k[(k[X>>2]|0)+64>>2]&63](X,0),!(da<=0.0)):0){ea=+$(+da);p[t>>3]=ea;X=k[t+4>>2]|0;if(!(X>>>0>2146435072|(X|0)==2146435072&(k[t>>2]|0)>>>0>0)){if(h)Ec[k[(k[h>>2]|0)+4>>2]&1023](h);Tqa(e);X=k[j>>2]|0;if(X)Tqa(X);k[j>>2]=0;if(!b)Tqa(G);else k[b>>2]=F;if(!a){r=g;return}k[a>>2]=T;r=g;return}X=u+56|0;L=u+4|0;k[u>>2]=27524;k[X>>2]=27544;B=0;wa(508,u+56|0,L|0);E=B;B=0;if(E&1){E=Rb()|0;fa=Q;ga=E;vva(X);Qb(ga|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[X>>2]=27488;B=0;va(448,L|0);E=B;B=0;do if(E&1){Y=Rb()|0;ha=Q;ia=Y}else{k[L>>2]=27560;Y=u+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[u+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,L|0,f|0);W=B;B=0;if(W&1){W=Rb()|0;P=Q;Yua(f);Yua(Y);Ava(L);ha=P;ia=W;break}Yua(f);B=0;W=Ia(40,u|0,148545,37)|0;P=B;B=0;d:do if(!(P&1)?(B=0,Xa(239,W|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,v|0,148465,72);S=B;B=0;do if(!(S&1)){B=0;eb(502,w|0,148538,6);D=B;B=0;if(D&1){D=Rb()|0;i=Q;Yua(v);ja=i;ka=D;break}B=0;wa(510,x|0,L|0);D=B;B=0;if(D&1){D=Rb()|0;la=1;na=D;oa=Q}else{B=0;ua(163,R|0,v|0,w|0,58,x|0);D=B;B=0;if(D&1)pa=1;else{B=0;eb(503,R|0,1240,229);B=0;pa=0}D=Rb()|0;i=Q;Yua(x);la=pa;na=D;oa=i}Yua(w);Yua(v);if(la){ja=oa;ka=na}else{qa=na;ra=oa;break d}}else{i=Rb()|0;ja=Q;ka=i}while(0);zb(R|0);qa=ka;ra=ja}else M=96;while(0);if((M|0)==96){W=Rb()|0;qa=W;ra=Q}k[u>>2]=27468;k[X>>2]=27488;k[L>>2]=27560;Yua(Y);Ava(L);vva(X);N=qa;O=ra;Qb(N|0)}while(0);fa=ha;ga=ia;vva(X);Qb(ga|0)}L=n+56|0;E=n+4|0;k[n>>2]=27524;k[L>>2]=27544;B=0;wa(508,n+56|0,E|0);W=B;B=0;if(W&1){W=Rb()|0;sa=Q;ta=W;vva(L);Qb(ta|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[L>>2]=27488;B=0;va(448,E|0);W=B;B=0;do if(W&1){P=Rb()|0;xa=Q;za=P}else{k[E>>2]=27560;P=n+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,E|0,f|0);C=B;B=0;if(C&1){C=Rb()|0;S=Q;Yua(f);Yua(P);Ava(E);xa=S;za=C;break}Yua(f);B=0;C=Ia(40,n|0,148426,38)|0;S=B;B=0;e:do if(!(S&1)?(B=0,Xa(239,C|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,o|0,148465,72);D=B;B=0;do if(!(D&1)){B=0;eb(502,q|0,148538,6);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Yua(o);Aa=l;Ba=m;break}B=0;wa(510,s|0,E|0);m=B;B=0;if(m&1){m=Rb()|0;Ca=Q;Da=1;Ea=m}else{B=0;ua(163,i|0,o|0,q|0,57,s|0);m=B;B=0;if(m&1)Fa=1;else{B=0;eb(503,i|0,1240,229);B=0;Fa=0}m=Rb()|0;l=Q;Yua(s);Ca=l;Da=Fa;Ea=m}Yua(q);Yua(o);if(Da){Aa=Ca;Ba=Ea}else{Ga=Ea;Ha=Ca;break e}}else{m=Rb()|0;Aa=Q;Ba=m}while(0);zb(i|0);Ga=Ba;Ha=Aa}else M=72;while(0);if((M|0)==72){C=Rb()|0;Ga=C;Ha=Q}k[n>>2]=27468;k[L>>2]=27488;k[E>>2]=27560;Yua(P);Ava(E);vva(L);N=Ga;O=Ha;Qb(N|0)}while(0);sa=xa;ta=za;vva(L);Qb(ta|0)}while(0);if((M|0)==38){M=Rb()|0;Z=Q;_=M}Sqa(T);N=_;O=Z;Qb(N|0)}function dpa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;g=r;r=r+16|0;f=g;k[f>>2]=0;cpa(f,b,c,0,e,0,0,h);h=k[f>>2]|0;if(!(k[h>>2]|0)){i=h;j=0}else{e=k[k[h+4>>2]>>2]|0;h=Hc[k[(k[e>>2]|0)+52>>2]&511](e)|0;i=k[f>>2]|0;j=h}if(!i){k[a>>2]=j;r=g;return}if((k[i>>2]|0)!=0?(h=k[i+4>>2]|0,(h|0)!=0):0){f=k[h>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);Sqa(h)}Sqa(i);k[a>>2]=j;r=g;return}function epa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0.0,hb=0.0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0.0,vb=0.0,wb=0.0,xb=0.0,yb=0,Bb=0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0.0,Ib=0.0,Jb=0.0,Kb=0.0,Lb=0.0,Mb=0.0,Nb=0.0,Ob=0.0,Pb=0.0,Sb=0.0,Tb=0.0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0.0,Zb=0,_b=0,$b=0.0,ac=0.0,bc=0.0,cc=0.0,dc=0.0,ec=0.0,fc=0.0,gc=0.0,hc=0.0,ic=0.0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,hd=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0;g=r;r=r+1776|0;h=g+1760|0;i=g+1696|0;j=g+1560|0;l=g+1748|0;m=g+1408|0;n=g+1736|0;o=g+1256|0;q=g+1724|0;s=g+1120|0;u=g+1712|0;v=g+968|0;w=g+1700|0;x=g+1544|0;y=g+1392|0;z=g+816|0;A=g+1104|0;C=g+664|0;D=g+952|0;E=g+800|0;F=g+648|0;H=g+512|0;I=g+224|0;J=g+376|0;K=g+72|0;L=g+60|0;M=g+48|0;N=g+240|0;O=g+36|0;P=g+88|0;R=g+24|0;S=g+12|0;T=g;U=k[b+24>>2]|0;V=k[b+28>>2]|0;W=b+8|0;X=k[b+20>>2]|0;Y=k[b+16>>2]|0;k[i>>2]=0;Z=Rqa(U>>>0>536870911?-1:U<<3)|0;_=Rqa(V>>>0>536870911?-1:V<<3)|0;ba=j+56|0;ca=j+4|0;k[j>>2]=27524;k[ba>>2]=27544;B=0;wa(508,j+56|0,ca|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva(ba);Qb(fa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ba>>2]=27488;B=0;va(448,ca|0);da=B;B=0;do if(da&1){ga=Rb()|0;ha=Q;ia=ga}else{k[ca>>2]=27560;ga=j+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,ca|0,h|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(h);Yua(ga);Ava(ca);ha=ka;ia=ja;break}Yua(h);B=0;Ia(40,j|0,149177,1)|0;ja=B;B=0;do if(!(ja&1)?(B=0,wa(510,l|0,ca|0),ka=B,B=0,!(ka&1)):0){B=0;ya(425,l|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(l);ma=la;na=ka;break}Yua(l);k[j>>2]=27468;k[ba>>2]=27488;k[ca>>2]=27560;Yua(ga);Ava(ca);vva(ba);ka=m+56|0;la=m+4|0;k[m>>2]=27524;k[ka>>2]=27544;B=0;wa(508,m+56|0,la|0);oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;qa=oa;vva(ka);Qb(qa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);oa=B;B=0;do if(oa&1){ra=Rb()|0;sa=Q;ta=ra}else{k[la>>2]=27560;ra=m+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[m+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,la|0,h|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(h);Yua(ra);Ava(la);sa=za;ta=xa;break}Yua(h);B=0;Ia(40,m|0,148583,63)|0;xa=B;B=0;do if(!(xa&1)?(B=0,wa(510,n|0,la|0),za=B,B=0,!(za&1)):0){B=0;ya(425,n|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(n);Ba=Aa;Ca=za;break}Yua(n);k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);if((U|0)<=0){Tqa(_);k[a>>2]=Z;r=g;return}za=o+56|0;Aa=o+4|0;Da=o+56|0;Ea=o+128|0;Fa=o+132|0;Ga=o+36|0;Ha=o+52|0;Ja=s+56|0;Ka=s+4|0;La=s+56|0;Ma=s+128|0;Na=s+132|0;Oa=s+36|0;Pa=s+52|0;Qa=z+56|0;Ra=z+4|0;Ta=z+56|0;Ua=z+128|0;Va=z+132|0;Wa=z+36|0;Ya=z+52|0;Za=(V|0)>0;_a=H+56|0;$a=H+4|0;ab=H+56|0;bb=H+128|0;cb=H+132|0;db=H+36|0;fb=H+52|0;gb=+p[b>>3];hb=+p[W>>3];ib=N+56|0;jb=N+4|0;kb=N+56|0;lb=N+128|0;mb=N+132|0;nb=N+36|0;ob=N+52|0;pb=0;a:while(1){k[o>>2]=27524;k[za>>2]=27544;B=0;wa(508,Da|0,Aa|0);qb=B;B=0;if(qb&1){rb=36;break}k[Ea>>2]=0;k[Fa>>2]=-1;k[o>>2]=27468;k[za>>2]=27488;B=0;va(448,Aa|0);qb=B;B=0;if(qb&1){rb=37;break}k[Aa>>2]=27560;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[Ha>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Aa|0,h|0);qb=B;B=0;if(qb&1){rb=35;break}Yua(h);B=0;qb=Ia(40,o|0,148647,28)|0;sb=B;B=0;if(sb&1){rb=76;break}sb=pb;pb=pb+1|0;B=0;tb=Xa(242,qb|0,pb|0)|0;qb=B;B=0;if(qb&1){rb=76;break}B=0;qb=Ia(40,tb|0,148676,1)|0;tb=B;B=0;if(tb&1){rb=76;break}B=0;tb=Xa(242,qb|0,U|0)|0;qb=B;B=0;if(qb&1){rb=76;break}B=0;Ia(40,tb|0,148678,33)|0;tb=B;B=0;if(tb&1){rb=76;break}B=0;wa(510,q|0,Aa|0);tb=B;B=0;if(tb&1){rb=76;break}B=0;ya(425,q|0)|0;tb=B;B=0;if(tb&1){rb=77;break}Yua(q);k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);k[46652+(k[(k[11663]|0)+-12>>2]|0)+8>>2]=5;k[s>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,La|0,Ka|0);tb=B;B=0;if(tb&1){rb=51;break}k[Ma>>2]=0;k[Na>>2]=-1;k[s>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ka|0);tb=B;B=0;if(tb&1){rb=52;break}k[Ka>>2]=27560;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[Pa>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Ka|0,h|0);tb=B;B=0;if(tb&1){rb=50;break}Yua(h);B=0;tb=Ia(40,s|0,148712,5)|0;qb=B;B=0;if(qb&1){rb=79;break}k[tb+(k[(k[tb>>2]|0)+-12>>2]|0)+12>>2]=9;B=0;qb=Sa(1,tb|0,0.0)|0;tb=B;B=0;if(tb&1){rb=79;break}B=0;Ia(40,qb|0,148718,3)|0;qb=B;B=0;if(qb&1){rb=79;break}B=0;wa(510,u|0,Ka|0);qb=B;B=0;if(qb&1){rb=79;break}B=0;ya(425,u|0)|0;qb=B;B=0;if(qb&1){rb=80;break}Yua(u);k[s>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja);ub=+gd[e&7](i,c,f);vb=+$(+ub);p[t>>3]=vb;qb=k[t+4>>2]|0;if(qb>>>0>2146435072|(qb|0)==2146435072&(k[t>>2]|0)>>>0>0){rb=61;break}k[z>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,Ta|0,Ra|0);qb=B;B=0;if(qb&1){rb=94;break}k[Ua>>2]=0;k[Va>>2]=-1;k[z>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Ra|0);qb=B;B=0;if(qb&1){rb=95;break}k[Ra>>2]=27560;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[Ya>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Ra|0,h|0);qb=B;B=0;if(qb&1){rb=93;break}Yua(h);B=0;qb=Ia(40,z|0,148712,5)|0;tb=B;B=0;if(tb&1){rb=106;break}k[qb+(k[(k[qb>>2]|0)+-12>>2]|0)+12>>2]=9;B=0;tb=Sa(1,qb|0,1.0)|0;qb=B;B=0;if(qb&1){rb=106;break}B=0;Ia(40,tb|0,148718,3)|0;tb=B;B=0;if(tb&1){rb=106;break}B=0;wa(510,A|0,Ra|0);tb=B;B=0;if(tb&1){rb=106;break}B=0;ya(425,A|0)|0;tb=B;B=0;if(tb&1){rb=107;break}Yua(A);k[z>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa);if(Za){tb=k[i>>2]|0;qb=0;do{p[_+(qb<<3)>>3]=+p[c+(qb<<3)>>3]+ +p[tb+(qb<<3)>>3];qb=qb+1|0}while((qb|0)!=(V|0))}vb=+id[d&63](_,f);wb=+$(+vb);p[t>>3]=wb;qb=k[t+4>>2]|0;if(qb>>>0>2146435072|(qb|0)==2146435072&(k[t>>2]|0)>>>0>0){rb=110;break}qb=Y+(sb<<3)|0;wb=+p[qb>>3];xb=+$(+wb);p[t>>3]=xb;tb=k[t+4>>2]|0;if(vb/ub<wb&(tb>>>0<2146435072|(tb|0)==2146435072&(k[t>>2]|0)>>>0<1)){tb=k[i>>2]|0;if(!Za){if(tb)rb=136}else{yb=0;do{Bb=c+(yb<<3)|0;p[Bb>>3]=+p[Bb>>3]+ +p[tb+(yb<<3)>>3];yb=yb+1|0}while((yb|0)!=(V|0));rb=136}if((rb|0)==136){rb=0;Tqa(tb)}k[i>>2]=0;p[Z+(sb<<3)>>3]=vb}else{k[H>>2]=27524;k[_a>>2]=27544;B=0;wa(508,ab|0,$a|0);yb=B;B=0;if(yb&1){rb=143;break}k[bb>>2]=0;k[cb>>2]=-1;k[H>>2]=27468;k[_a>>2]=27488;B=0;va(448,$a|0);yb=B;B=0;if(yb&1){rb=144;break}k[$a>>2]=27560;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[fb>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,$a|0,h|0);yb=B;B=0;if(yb&1){rb=142;break}Yua(h);B=0;yb=Ia(40,H|0,148712,5)|0;Bb=B;B=0;if(Bb&1){rb=155;break}k[yb+(k[(k[yb>>2]|0)+-12>>2]|0)+12>>2]=9;B=0;Bb=Sa(1,yb|0,.3819660112501051)|0;yb=B;B=0;if(yb&1){rb=155;break}B=0;Ia(40,Bb|0,148718,3)|0;Bb=B;B=0;if(Bb&1){rb=155;break}B=0;wa(510,I|0,$a|0);Bb=B;B=0;if(Bb&1){rb=155;break}B=0;ya(425,I|0)|0;Bb=B;B=0;if(Bb&1){rb=156;break}Yua(I);k[H>>2]=27468;k[_a>>2]=27488;k[$a>>2]=27560;Yua(db);Ava($a);vva(_a);if(Za){Bb=k[i>>2]|0;yb=0;do{p[_+(yb<<3)>>3]=+p[c+(yb<<3)>>3]+ +p[Bb+(yb<<3)>>3]*.3819660112501051;yb=yb+1|0}while((yb|0)!=(V|0))}wb=+id[d&63](_,f);xb=+$(+wb);p[t>>3]=xb;yb=k[t+4>>2]|0;if(yb>>>0>2146435072|(yb|0)==2146435072&(k[t>>2]|0)>>>0>0){rb=159;break}xb=+p[qb>>3];Cb=+$(+xb);p[t>>3]=Cb;yb=k[t+4>>2]|0;b:do if(!(wb/ub<xb)|(yb>>>0>2146435072|(yb|0)==2146435072&(k[t>>2]|0)>>>0>0)){Bb=X+(sb<<2)|0;Cb=0.0;Db=wb;Eb=wb;Fb=wb;Gb=0.0;tb=1;Hb=3.333902507043754e-05;Ib=6.667805014087508e-05;Jb=.3819660112501051;Kb=.3819660112501051;Lb=.3819660112501051;Mb=.5;Nb=1.0;Ob=0.0;while(1){do if(+aa(+(Gb*Gb))>Hb){Pb=Lb-Jb;Sb=Fb-Eb;Tb=Lb-Kb;Ub=Fb-Db;Vb=Sb*(Pb*Pb)-Tb*Tb*Ub;Wb=Sb*(Pb*2.0)-Tb*2.0*Ub;Ub=Wb>0.0?-Vb:Vb;Vb=+aa(+(Wb*Wb));Wb=Gb*(Vb*.5);if(!(+aa(+(Ub*Ub))<+aa(+(Wb*Wb)))){rb=190;break}if(!(Ub>(Ob-Lb)*Vb+1.4901161193847656e-08)){rb=190;break}if(!(Ub<(Nb-Lb)*Vb+-1.4901161193847656e-08)){rb=190;break}Wb=Ub/Vb;Vb=Lb+Wb;if(!(Vb-Ob<Ib|Nb-Vb<Ib)){Xb=Wb;Yb=Cb;break}Xb=Hb*(Mb-Lb<0.0?-1.0:1.0);Yb=Cb}else rb=190;while(0);if((rb|0)==190){rb=0;Wb=(!(Lb>=Mb)?Nb:Ob)-Lb;Xb=Wb*.3819660112501051;Yb=Wb}Wb=+aa(+(Xb*Xb));Vb=Lb+(Xb<0.0?-1.0:1.0)*(Wb>Hb?Wb:Hb);k[N>>2]=27524;k[ib>>2]=27544;B=0;wa(508,kb|0,jb|0);Zb=B;B=0;if(Zb&1){rb=195;break a}k[lb>>2]=0;k[mb>>2]=-1;k[N>>2]=27468;k[ib>>2]=27488;B=0;va(448,jb|0);Zb=B;B=0;if(Zb&1){rb=196;break a}k[jb>>2]=27560;k[nb>>2]=0;k[nb+4>>2]=0;k[nb+8>>2]=0;k[nb+12>>2]=0;k[ob>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,jb|0,h|0);Zb=B;B=0;if(Zb&1){rb=194;break a}Yua(h);B=0;Zb=Ia(40,N|0,148712,5)|0;_b=B;B=0;if(_b&1){rb=207;break a}k[Zb+(k[(k[Zb>>2]|0)+-12>>2]|0)+12>>2]=9;B=0;_b=Sa(1,Zb|0,+Vb)|0;Zb=B;B=0;if(Zb&1){rb=207;break a}B=0;Ia(40,_b|0,148718,3)|0;_b=B;B=0;if(_b&1){rb=207;break a}B=0;wa(510,O|0,jb|0);_b=B;B=0;if(_b&1){rb=207;break a}B=0;ya(425,O|0)|0;_b=B;B=0;if(_b&1){rb=208;break a}Yua(O);k[N>>2]=27468;k[ib>>2]=27488;k[jb>>2]=27560;Yua(nb);Ava(jb);vva(ib);if(Za){_b=k[i>>2]|0;Zb=0;do{p[_+(Zb<<3)>>3]=+p[c+(Zb<<3)>>3]+Vb*+p[_b+(Zb<<3)>>3];Zb=Zb+1|0}while((Zb|0)!=(V|0))}Wb=+id[d&63](_,f);Ub=+$(+Wb);p[t>>3]=Ub;Zb=k[t+4>>2]|0;if(Zb>>>0>2146435072|(Zb|0)==2146435072&(k[t>>2]|0)>>>0>0){rb=211;break a}tb=tb+1|0;do if(!(Wb<=Fb)){Zb=Vb<Lb;Ub=Zb?Vb:Ob;Tb=Zb?Nb:Vb;if(Kb==Lb|Wb<=Eb){$b=Eb;ac=Wb;bc=Fb;cc=Kb;dc=Vb;ec=Lb;fc=Tb;gc=Ub;break}Zb=Jb==Kb|(Jb==Lb|Wb<=Db);$b=Zb?Wb:Db;ac=Eb;bc=Fb;cc=Zb?Vb:Jb;dc=Kb;ec=Lb;fc=Tb;gc=Ub}else{Zb=!(Vb>=Lb);$b=Eb;ac=Fb;bc=Wb;cc=Kb;dc=Lb;ec=Vb;fc=Zb?Lb:Nb;gc=Zb?Ob:Lb}while(0);Mb=(gc+fc)*.5;Vb=ec*ec;Wb=+$(+(+aa(+Vb)));Hb=Vb==-G?G:Wb*1.4901161193847656e-08+3.3333333333333335e-05;Ib=Hb*2.0;Wb=ec-Mb;if(+aa(+(Wb*Wb))<Ib-(fc-gc)*.5){hc=bc;ic=ec;break b}if((tb|0)>=(k[Bb>>2]|0)){hc=bc;ic=ec;break b}Wb=+p[qb>>3];Vb=+$(+Wb);p[t>>3]=Vb;Zb=k[t+4>>2]|0;if(bc/ub<Wb&(gc==0.0&(Zb>>>0<2146435072|(Zb|0)==2146435072&(k[t>>2]|0)>>>0<1))){hc=bc;ic=ec;break}else{Cb=Xb;Db=$b;Eb=ac;Fb=bc;Gb=Yb;Jb=cc;Kb=dc;Lb=ec;Nb=fc;Ob=gc}}}else{hc=wb;ic=.3819660112501051}while(0);qb=hc>ub;wb=qb?ub:hc;yb=wb>vb;xb=yb?vb:wb;wb=yb?hb:qb?gb:ic;qb=k[i>>2]|0;if(!Za){if(qb)rb=243}else{yb=0;do{Bb=c+(yb<<3)|0;p[Bb>>3]=+p[Bb>>3]+wb*+p[qb+(yb<<3)>>3];yb=yb+1|0}while((yb|0)!=(V|0));rb=243}if((rb|0)==243){rb=0;Tqa(qb)}k[i>>2]=0;p[Z+(sb<<3)>>3]=xb}if((pb|0)>=(U|0)){rb=25;break}}switch(rb|0){case 25:{Tqa(_);k[a>>2]=Z;r=g;return}case 35:{pb=Rb()|0;Za=Q;Yua(h);Yua(Ga);Ava(Aa);jc=Za;kc=pb;rb=38;break}case 36:{pb=Rb()|0;lc=Q;mc=pb;vva(za);Qb(mc|0);break}case 37:{pb=Rb()|0;jc=Q;kc=pb;rb=38;break}case 50:{pb=Rb()|0;Za=Q;Yua(h);Yua(Oa);Ava(Ka);nc=Za;oc=pb;rb=53;break}case 51:{pb=Rb()|0;pc=Q;qc=pb;vva(Ja);Qb(qc|0);break}case 52:{pb=Rb()|0;nc=Q;oc=pb;rb=53;break}case 61:{pb=v+56|0;Za=v+4|0;k[v>>2]=27524;k[pb>>2]=27544;B=0;wa(508,v+56|0,Za|0);ob=B;B=0;if(ob&1){ob=Rb()|0;rc=Q;sc=ob;vva(pb);Qb(sc|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[pb>>2]=27488;B=0;va(448,Za|0);ob=B;B=0;do if(ob&1){mb=Rb()|0;tc=Q;uc=mb}else{k[Za>>2]=27560;mb=v+36|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[v+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Za|0,h|0);lb=B;B=0;if(lb&1){lb=Rb()|0;kb=Q;Yua(h);Yua(mb);Ava(Za);tc=kb;uc=lb;break}Yua(h);B=0;lb=Ia(40,v|0,148722,32)|0;kb=B;B=0;c:do if(kb&1)rb=82;else{B=0;Xa(239,lb|0,0)|0;fb=B;B=0;if(fb&1){rb=82;break}fb=Ab(20)|0;B=0;eb(502,w|0,148755,78);cb=B;B=0;do if(!(cb&1)){B=0;eb(502,x|0,148834,11);bb=B;B=0;if(bb&1){bb=Rb()|0;ab=Q;Yua(w);vc=ab;wc=bb;break}B=0;wa(510,y|0,Za|0);bb=B;B=0;if(bb&1){bb=Rb()|0;xc=1;yc=Q;zc=bb}else{B=0;ua(163,fb|0,w|0,x|0,69,y|0);bb=B;B=0;if(bb&1)Ac=1;else{B=0;eb(503,fb|0,1240,229);B=0;Ac=0}bb=Rb()|0;ab=Q;Yua(y);xc=Ac;yc=ab;zc=bb}Yua(x);Yua(w);if(xc){vc=yc;wc=zc}else{Bc=yc;Cc=zc;break c}}else{bb=Rb()|0;vc=Q;wc=bb}while(0);zb(fb|0);Bc=vc;Cc=wc}while(0);if((rb|0)==82){lb=Rb()|0;Bc=Q;Cc=lb}k[v>>2]=27468;k[pb>>2]=27488;k[Za>>2]=27560;Yua(mb);Ava(Za);vva(pb);Dc=Bc;Ec=Cc;Qb(Ec|0)}while(0);rc=tc;sc=uc;vva(pb);Qb(sc|0);break}case 76:{Za=Rb()|0;Fc=Q;Gc=Za;rb=78;break}case 77:{Za=Rb()|0;ob=Q;Yua(q);Fc=ob;Gc=Za;rb=78;break}case 79:{Za=Rb()|0;Hc=Q;Ic=Za;rb=81;break}case 80:{Za=Rb()|0;ob=Q;Yua(u);Hc=ob;Ic=Za;rb=81;break}case 93:{Za=Rb()|0;ob=Q;Yua(h);Yua(Wa);Ava(Ra);Jc=ob;Kc=Za;rb=96;break}case 94:{Za=Rb()|0;Lc=Q;Mc=Za;vva(Qa);Qb(Mc|0);break}case 95:{Za=Rb()|0;Jc=Q;Kc=Za;rb=96;break}case 106:{Za=Rb()|0;Nc=Q;Oc=Za;rb=108;break}case 107:{Za=Rb()|0;ob=Q;Yua(A);Nc=ob;Oc=Za;rb=108;break}case 110:{Za=C+56|0;ob=C+4|0;k[C>>2]=27524;k[Za>>2]=27544;B=0;wa(508,C+56|0,ob|0);lb=B;B=0;if(lb&1){lb=Rb()|0;Pc=Q;Qc=lb;vva(Za);Qb(Qc|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Za>>2]=27488;B=0;va(448,ob|0);lb=B;B=0;do if(lb&1){kb=Rb()|0;Rc=Q;Sc=kb}else{k[ob>>2]=27560;kb=C+36|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[C+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,ob|0,h|0);sb=B;B=0;if(sb&1){sb=Rb()|0;qb=Q;Yua(h);Yua(kb);Ava(ob);Rc=qb;Sc=sb;break}Yua(h);B=0;sb=Ia(40,C|0,148722,32)|0;qb=B;B=0;d:do if(qb&1)rb=125;else{B=0;Xa(239,sb|0,0)|0;cb=B;B=0;if(cb&1){rb=125;break}cb=Ab(20)|0;B=0;eb(502,D|0,148755,78);bb=B;B=0;do if(!(bb&1)){B=0;eb(502,E|0,148834,11);ab=B;B=0;if(ab&1){ab=Rb()|0;Ya=Q;Yua(D);Tc=Ya;Uc=ab;break}B=0;wa(510,F|0,ob|0);ab=B;B=0;if(ab&1){ab=Rb()|0;Vc=1;Wc=Q;Xc=ab}else{B=0;ua(163,cb|0,D|0,E|0,74,F|0);ab=B;B=0;if(ab&1)Yc=1;else{B=0;eb(503,cb|0,1240,229);B=0;Yc=0}ab=Rb()|0;Ya=Q;Yua(F);Vc=Yc;Wc=Ya;Xc=ab}Yua(E);Yua(D);if(Vc){Tc=Wc;Uc=Xc}else{Zc=Wc;_c=Xc;break d}}else{ab=Rb()|0;Tc=Q;Uc=ab}while(0);zb(cb|0);Zc=Tc;_c=Uc}while(0);if((rb|0)==125){sb=Rb()|0;Zc=Q;_c=sb}k[C>>2]=27468;k[Za>>2]=27488;k[ob>>2]=27560;Yua(kb);Ava(ob);vva(Za);Dc=Zc;Ec=_c;Qb(Ec|0)}while(0);Pc=Rc;Qc=Sc;vva(Za);Qb(Qc|0);break}case 142:{ob=Rb()|0;lb=Q;Yua(h);Yua(db);Ava($a);$c=lb;ad=ob;rb=145;break}case 143:{ob=Rb()|0;bd=Q;cd=ob;vva(_a);Qb(cd|0);break}case 144:{ob=Rb()|0;$c=Q;ad=ob;rb=145;break}case 155:{ob=Rb()|0;dd=Q;ed=ob;rb=157;break}case 156:{ob=Rb()|0;lb=Q;Yua(I);dd=lb;ed=ob;rb=157;break}case 159:{ob=J+56|0;lb=J+4|0;k[J>>2]=27524;k[ob>>2]=27544;B=0;wa(508,J+56|0,lb|0);pb=B;B=0;if(pb&1){pb=Rb()|0;fd=Q;hd=pb;vva(ob);Qb(hd|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[ob>>2]=27488;B=0;va(448,lb|0);pb=B;B=0;do if(pb&1){sb=Rb()|0;jd=Q;kd=sb}else{k[lb>>2]=27560;sb=J+36|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[J+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,lb|0,h|0);qb=B;B=0;if(qb&1){qb=Rb()|0;mb=Q;Yua(h);Yua(sb);Ava(lb);jd=mb;kd=qb;break}Yua(h);B=0;qb=Ia(40,J|0,148722,32)|0;mb=B;B=0;e:do if(mb&1)rb=174;else{B=0;Xa(239,qb|0,0)|0;bb=B;B=0;if(bb&1){rb=174;break}bb=Ab(20)|0;B=0;eb(502,K|0,148755,78);fb=B;B=0;do if(!(fb&1)){B=0;eb(502,L|0,148834,11);ab=B;B=0;if(ab&1){ab=Rb()|0;Ya=Q;Yua(K);ld=Ya;md=ab;break}B=0;wa(510,M|0,lb|0);ab=B;B=0;if(ab&1){ab=Rb()|0;nd=Q;od=ab;pd=1}else{B=0;ua(163,bb|0,K|0,L|0,100,M|0);ab=B;B=0;if(ab&1)qd=1;else{B=0;eb(503,bb|0,1240,229);B=0;qd=0}ab=Rb()|0;Ya=Q;Yua(M);nd=Ya;od=ab;pd=qd}Yua(L);Yua(K);if(pd){ld=nd;md=od}else{rd=nd;sd=od;break e}}else{ab=Rb()|0;ld=Q;md=ab}while(0);zb(bb|0);rd=ld;sd=md}while(0);if((rb|0)==174){qb=Rb()|0;rd=Q;sd=qb}k[J>>2]=27468;k[ob>>2]=27488;k[lb>>2]=27560;Yua(sb);Ava(lb);vva(ob);Dc=rd;Ec=sd;Qb(Ec|0)}while(0);fd=jd;hd=kd;vva(ob);Qb(hd|0);break}case 194:{lb=Rb()|0;pb=Q;Yua(h);Yua(nb);Ava(jb);td=pb;ud=lb;rb=197;break}case 195:{lb=Rb()|0;vd=Q;wd=lb;vva(ib);Qb(wd|0);break}case 196:{lb=Rb()|0;td=Q;ud=lb;rb=197;break}case 207:{lb=Rb()|0;xd=Q;yd=lb;rb=209;break}case 208:{lb=Rb()|0;pb=Q;Yua(O);xd=pb;yd=lb;rb=209;break}case 211:{lb=P+56|0;pb=P+4|0;k[P>>2]=27524;k[lb>>2]=27544;B=0;wa(508,P+56|0,pb|0);Za=B;B=0;if(Za&1){Za=Rb()|0;zd=Q;Ad=Za;vva(lb);Qb(Ad|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[lb>>2]=27488;B=0;va(448,pb|0);Za=B;B=0;do if(Za&1){qb=Rb()|0;Bd=Q;Cd=qb}else{k[pb>>2]=27560;qb=P+36|0;k[qb>>2]=0;k[qb+4>>2]=0;k[qb+8>>2]=0;k[qb+12>>2]=0;k[P+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,pb|0,h|0);mb=B;B=0;if(mb&1){mb=Rb()|0;kb=Q;Yua(h);Yua(qb);Ava(pb);Bd=kb;Cd=mb;break}Yua(h);B=0;mb=Ia(40,P|0,148722,32)|0;kb=B;B=0;f:do if(kb&1)rb=226;else{B=0;Xa(239,mb|0,0)|0;fb=B;B=0;if(fb&1){rb=226;break}fb=Ab(20)|0;B=0;eb(502,R|0,148755,78);cb=B;B=0;do if(!(cb&1)){B=0;eb(502,S|0,148834,11);ab=B;B=0;if(ab&1){ab=Rb()|0;Ya=Q;Yua(R);Dd=Ya;Ed=ab;break}B=0;wa(510,T|0,pb|0);ab=B;B=0;if(ab&1){ab=Rb()|0;Fd=1;Gd=Q;Hd=ab}else{B=0;ua(163,fb|0,R|0,S|0,185,T|0);ab=B;B=0;if(ab&1)Id=1;else{B=0;eb(503,fb|0,1240,229);B=0;Id=0}ab=Rb()|0;Ya=Q;Yua(T);Fd=Id;Gd=Ya;Hd=ab}Yua(S);Yua(R);if(Fd){Dd=Gd;Ed=Hd}else{Jd=Gd;Kd=Hd;break f}}else{ab=Rb()|0;Dd=Q;Ed=ab}while(0);zb(fb|0);Jd=Dd;Kd=Ed}while(0);if((rb|0)==226){mb=Rb()|0;Jd=Q;Kd=mb}k[P>>2]=27468;k[lb>>2]=27488;k[pb>>2]=27560;Yua(qb);Ava(pb);vva(lb);Dc=Jd;Ec=Kd;Qb(Ec|0)}while(0);zd=Bd;Ad=Cd;vva(lb);Qb(Ad|0);break}}switch(rb|0){case 38:{lc=jc;mc=kc;vva(za);Qb(mc|0);break}case 53:{pc=nc;qc=oc;vva(Ja);Qb(qc|0);break}case 78:{k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);Dc=Fc;Ec=Gc;Qb(Ec|0);break}case 81:{k[s>>2]=27468;k[Ja>>2]=27488;k[Ka>>2]=27560;Yua(Oa);Ava(Ka);vva(Ja);Dc=Hc;Ec=Ic;Qb(Ec|0);break}case 96:{Lc=Jc;Mc=Kc;vva(Qa);Qb(Mc|0);break}case 108:{k[z>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Wa);Ava(Ra);vva(Qa);Dc=Nc;Ec=Oc;Qb(Ec|0);break}case 145:{bd=$c;cd=ad;vva(_a);Qb(cd|0);break}case 157:{k[H>>2]=27468;k[_a>>2]=27488;k[$a>>2]=27560;Yua(db);Ava($a);vva(_a);Dc=dd;Ec=ed;Qb(Ec|0);break}case 197:{vd=td;wd=ud;vva(ib);Qb(wd|0);break}case 209:{k[N>>2]=27468;k[ib>>2]=27488;k[jb>>2]=27560;Yua(nb);Ava(jb);vva(ib);Dc=xd;Ec=yd;Qb(Ec|0);break}}}else rb=29;while(0);if((rb|0)==29){xa=Rb()|0;Ba=Q;Ca=xa}k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);Dc=Ba;Ec=Ca;Qb(Ec|0)}while(0);pa=sa;qa=ta;vva(ka);Qb(qa|0)}else rb=26;while(0);if((rb|0)==26){ja=Rb()|0;ma=Q;na=ja}k[j>>2]=27468;k[ba>>2]=27488;k[ca>>2]=27560;Yua(ga);Ava(ca);vva(ba);Dc=ma;Ec=na;Qb(Ec|0)}while(0);ea=ha;fa=ia;vva(ba);Qb(fa|0)}function fpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+624|0;c=b;d=b+617|0;e=b+600|0;f=b+464|0;g=b+604|0;h=b+312|0;j=b+448|0;l=b+176|0;m=b+160|0;n=b+24|0;o=b+12|0;p=a+44|0;bO(k[p>>2]|0,d,99);bO(k[p>>2]|0,b+616|0,759);cO(k[p>>2]|0,e,102);a:do if(CY()|0){p=f+56|0;q=f+4|0;k[f>>2]=27524;k[p>>2]=27544;B=0;wa(508,f+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(p);Qb(u|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[p>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=f+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;Ia(40,f|0,148846,24)|0;y=B;B=0;do if(!(y&1)?(B=0,wa(510,g|0,q|0),z=B,B=0,!(z&1)):0){B=0;ya(425,g|0)|0;z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(g);C=A;D=z;break}else{Yua(g);k[f>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(p);break a}}else E=14;while(0);if((E|0)==14){y=Rb()|0;C=Q;D=y}k[f>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(p);F=C;G=D;Qb(G|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}while(0);xh(a,497);b:do if(CY()|0){u=h+56|0;x=h+4|0;k[h>>2]=27524;k[u>>2]=27544;B=0;wa(508,h+56|0,x|0);w=B;B=0;if(w&1){w=Rb()|0;H=Q;I=w;vva(u);Qb(I|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[u>>2]=27488;B=0;va(448,x|0);w=B;B=0;do if(w&1){t=Rb()|0;J=Q;K=t}else{k[x>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(c);Yua(t);Ava(x);J=C;K=D;break}Yua(c);B=0;Ia(40,h|0,148846,24)|0;D=B;B=0;do if(!(D&1)?(B=0,wa(510,j|0,x|0),C=B,B=0,!(C&1)):0){B=0;ya(425,j|0)|0;C=B;B=0;if(C&1){C=Rb()|0;f=Q;Yua(j);L=f;M=C;break}else{Yua(j);k[h>>2]=27468;k[u>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(u);break b}}else E=30;while(0);if((E|0)==30){D=Rb()|0;L=Q;M=D}k[h>>2]=27468;k[u>>2]=27488;k[x>>2]=27560;Yua(t);Ava(x);vva(u);F=L;G=M;Qb(G|0)}while(0);H=J;I=K;vva(u);Qb(I|0)}while(0);xh(a,497);do if(i[d>>0]|0)if((k[e>>2]&-5|0)==754){Toa(a);break}else{Woa(a,1);break}else Woa(a,1);while(0);pqa(0,a);c:do if(CY()|0){I=l+56|0;K=l+4|0;k[l>>2]=27524;k[I>>2]=27544;B=0;wa(508,l+56|0,K|0);J=B;B=0;if(J&1){J=Rb()|0;N=Q;O=J;vva(I);Qb(O|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[I>>2]=27488;B=0;va(448,K|0);J=B;B=0;do if(J&1){H=Rb()|0;P=Q;R=H}else{k[K>>2]=27560;H=l+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,K|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;L=Q;Yua(c);Yua(H);Ava(K);P=L;R=M;break}Yua(c);B=0;Ia(40,l|0,148920,21)|0;M=B;B=0;do if(!(M&1)?(B=0,wa(510,m|0,K|0),L=B,B=0,!(L&1)):0){B=0;ya(425,m|0)|0;L=B;B=0;if(L&1){L=Rb()|0;h=Q;Yua(m);S=h;T=L;break}else{Yua(m);k[l>>2]=27468;k[I>>2]=27488;k[K>>2]=27560;Yua(H);Ava(K);vva(I);break c}}else E=51;while(0);if((E|0)==51){M=Rb()|0;S=Q;T=M}k[l>>2]=27468;k[I>>2]=27488;k[K>>2]=27560;Yua(H);Ava(K);vva(I);F=S;G=T;Qb(G|0)}while(0);N=P;O=R;vva(I);Qb(O|0)}while(0);yh(a,497,481);ipa(a);d:do if(CY()|0){O=n+56|0;R=n+4|0;k[n>>2]=27524;k[O>>2]=27544;B=0;wa(508,n+56|0,R|0);P=B;B=0;if(P&1){P=Rb()|0;U=Q;V=P;vva(O);Qb(V|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[O>>2]=27488;B=0;va(448,R|0);P=B;B=0;do if(P&1){N=Rb()|0;W=Q;X=N}else{k[R>>2]=27560;N=n+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);T=B;B=0;if(T&1){T=Rb()|0;S=Q;Yua(c);Yua(N);Ava(R);W=S;X=T;break}Yua(c);B=0;Ia(40,n|0,148942,18)|0;T=B;B=0;do if(!(T&1)?(B=0,wa(510,o|0,R|0),S=B,B=0,!(S&1)):0){B=0;ya(425,o|0)|0;S=B;B=0;if(S&1){S=Rb()|0;l=Q;Yua(o);Y=l;Z=S;break}else{Yua(o);k[n>>2]=27468;k[O>>2]=27488;k[R>>2]=27560;Yua(N);Ava(R);vva(O);break d}}else E=67;while(0);if((E|0)==67){T=Rb()|0;Y=Q;Z=T}k[n>>2]=27468;k[O>>2]=27488;k[R>>2]=27560;Yua(N);Ava(R);vva(O);F=Y;G=Z;Qb(G|0)}while(0);U=W;V=X;vva(O);Qb(V|0)}while(0);if(!(i[d>>0]|0)){d=c;k[d>>2]=638;k[d+4>>2]=639;fi(a,a+48|0,c,2,1);r=b;return}if((k[e>>2]&-5|0)==754){e=c;k[e>>2]=638;k[e+4>>2]=639;fi(a,a+48|0,c,2,1);r=b;return}else{k[c>>2]=k[10489];k[c+4>>2]=k[10490];k[c+8>>2]=k[10491];fi(a,a+48|0,c,3,1);r=b;return}}function gpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;b=r;r=r+480|0;c=b+452|0;d=b+464|0;e=b+304|0;f=b+440|0;g=b+152|0;h=b+288|0;j=b+16|0;l=b;bO(k[a+44>>2]|0,d,759);a:do if(CY()|0){m=e+56|0;n=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,e|0,148871,23)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,f|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,f|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=x;z=w;break}else{Yua(f);k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=Q;z=v}k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);xh(a,484);Voa(a);pqa(0,a);b:do if(CY()|0){q=g+56|0;u=g+4|0;k[g>>2]=27524;k[q>>2]=27544;B=0;wa(508,g+56|0,u|0);t=B;B=0;if(t&1){t=Rb()|0;E=Q;F=t;vva(q);Qb(F|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[q>>2]=27488;B=0;va(448,u|0);t=B;B=0;do if(t&1){p=Rb()|0;G=Q;H=p}else{k[u>>2]=27560;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(c);Yua(p);Ava(u);G=y;H=z;break}Yua(c);B=0;Ia(40,g|0,148920,21)|0;z=B;B=0;do if(!(z&1)?(B=0,wa(510,h|0,u|0),y=B,B=0,!(y&1)):0){B=0;ya(425,h|0)|0;y=B;B=0;if(y&1){y=Rb()|0;e=Q;Yua(h);I=e;J=y;break}else{Yua(h);k[g>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(p);Ava(u);vva(q);break b}}else A=30;while(0);if((A|0)==30){z=Rb()|0;I=Q;J=z}k[g>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(p);Ava(u);vva(q);C=I;D=J;Qb(D|0)}while(0);E=G;F=H;vva(q);Qb(F|0)}while(0);yh(a,484,479);ipa(a);if(!(i[d>>0]|0)){r=b;return}c:do if(CY()|0){d=j+56|0;F=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,F|0);H=B;B=0;if(H&1){H=Rb()|0;K=Q;L=H;vva(d);Qb(L|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,F|0);H=B;B=0;do if(H&1){G=Rb()|0;M=Q;N=G}else{k[F>>2]=27560;G=j+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;J=Q;Yua(c);Yua(G);Ava(F);M=J;N=E;break}Yua(c);B=0;Ia(40,j|0,148942,18)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,l|0,F|0),J=B,B=0,!(J&1)):0){B=0;ya(425,l|0)|0;J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(l);O=I;P=J;break}else{Yua(l);k[j>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(G);Ava(F);vva(d);break c}}else A=47;while(0);if((A|0)==47){E=Rb()|0;O=Q;P=E}k[j>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(G);Ava(F);vva(d);C=O;D=P;Qb(D|0)}while(0);K=M;L=N;vva(d);Qb(L|0)}while(0);k[c>>2]=934;fi(a,a+48|0,c,1,1);r=b;return}function hpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=r;r=r+480|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;bO(k[a+44>>2]|0,b+464|0,759);a:do if(CY()|0){j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,148895,24)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(425,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}else{Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);break a}}else y=14;while(0);if((y|0)==14){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);z=w;A=x;Qb(A|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}while(0);xh(a,486);Voa(a);pqa(0,a);b:do if(CY()|0){o=f+56|0;s=f+4|0;k[f>>2]=27524;k[o>>2]=27544;B=0;wa(508,f+56|0,s|0);q=B;B=0;if(q&1){q=Rb()|0;C=Q;D=q;vva(o);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[o>>2]=27488;B=0;va(448,s|0);q=B;B=0;do if(q&1){n=Rb()|0;E=Q;F=n}else{k[s>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(c);Yua(n);Ava(s);E=w;F=x;break}Yua(c);B=0;Ia(40,f|0,148920,21)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,g|0,s|0),w=B,B=0,!(w&1)):0){B=0;ya(425,g|0)|0;w=B;B=0;if(w&1){w=Rb()|0;d=Q;Yua(g);G=d;H=w;break}else{Yua(g);k[f>>2]=27468;k[o>>2]=27488;k[s>>2]=27560;Yua(n);Ava(s);vva(o);break b}}else y=30;while(0);if((y|0)==30){x=Rb()|0;G=Q;H=x}k[f>>2]=27468;k[o>>2]=27488;k[s>>2]=27560;Yua(n);Ava(s);vva(o);z=G;A=H;Qb(A|0)}while(0);C=E;D=F;vva(o);Qb(D|0)}while(0);yh(a,486,480);ipa(a);if(!(CY()|0)){k[c>>2]=934;I=a+48|0;fi(a,I,c,1,1);r=b;return}D=h+56|0;F=h+4|0;k[h>>2]=27524;k[D>>2]=27544;B=0;wa(508,h+56|0,F|0);E=B;B=0;if(E&1){E=Rb()|0;J=Q;K=E;vva(D);Qb(K|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[D>>2]=27488;B=0;va(448,F|0);E=B;B=0;do if(E&1){C=Rb()|0;L=Q;M=C}else{k[F>>2]=27560;C=h+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;G=Q;Yua(c);Yua(C);Ava(F);L=G;M=H;break}Yua(c);B=0;Ia(40,h|0,148942,18)|0;H=B;B=0;do if(!(H&1)?(B=0,wa(510,i|0,F|0),G=B,B=0,!(G&1)):0){B=0;ya(425,i|0)|0;G=B;B=0;if(G&1){G=Rb()|0;f=Q;Yua(i);N=f;O=G;break}Yua(i);k[h>>2]=27468;k[D>>2]=27488;k[F>>2]=27560;Yua(C);Ava(F);vva(D);k[c>>2]=934;I=a+48|0;fi(a,I,c,1,1);r=b;return}else y=46;while(0);if((y|0)==46){H=Rb()|0;N=Q;O=H}k[h>>2]=27468;k[D>>2]=27488;k[F>>2]=27560;Yua(C);Ava(F);vva(D);z=N;A=O;Qb(A|0)}while(0);J=L;K=M;vva(D);Qb(K|0)}function ipa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;b=r;r=r+32|0;c=b+28|0;d=b+24|0;e=b+20|0;f=b+16|0;g=b+12|0;h=b+8|0;i=b+4|0;j=b;k[c>>2]=0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;l=a+44|0;cO(k[l>>2]|0,j,478);Eh(a);ooa(c,d,g,h,0,a);m=a+24|0;poa(i,k[m>>2]|0,k[j>>2]|0);Loa(k[g>>2]|0,k[d>>2]|0,k[i>>2]|0,1);j=k[d>>2]|0;if(j){if((k[j>>2]|0)!=0?(d=k[j+4>>2]|0,(d|0)!=0):0){n=k[d>>2]|0;if(n)Ec[k[(k[n>>2]|0)+4>>2]&1023](n);Sqa(d)}Sqa(j)}Poa(f,k[c>>2]|0,k[g>>2]|0,0,k[h>>2]|0,k[l>>2]|0);j=k[c>>2]|0;if(j){if((k[j>>2]|0)!=0?(c=k[j+4>>2]|0,(c|0)!=0):0){d=k[c>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);Sqa(c)}Sqa(j)}j=k[g>>2]|0;if(j){if((k[j>>2]|0)!=0?(g=k[j+4>>2]|0,(g|0)!=0):0){c=k[g>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(g)}Sqa(j)}j=k[h>>2]|0;if(j){if((k[j>>2]|0)!=0?(h=k[j+4>>2]|0,(h|0)!=0):0){g=k[h>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(h)}Sqa(j)}Roa(e,k[f>>2]|0,k[i>>2]|0,k[m>>2]|0,k[l>>2]|0,1);l=k[i>>2]|0;if(l){if((k[l>>2]|0)!=0?(i=k[l+4>>2]|0,(i|0)!=0):0){m=k[i>>2]|0;if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Sqa(i)}Sqa(l)}xoa(a,k[e>>2]|0);a=k[e>>2]|0;if(a){if((k[a>>2]|0)!=0?(e=k[a+4>>2]|0,(e|0)!=0):0){l=k[e>>2]|0;if(l)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);Sqa(e)}Sqa(a)}a=k[f>>2]|0;if(!a){r=b;return}if((k[a>>2]|0)!=0?(f=k[a+4>>2]|0,(f|0)!=0):0){e=k[f>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(f)}Sqa(a);r=b;return}function jpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;b=r;r=r+256|0;c=b+240|0;d=b+236|0;e=b+232|0;f=b+228|0;g=b+224|0;h=b+220|0;j=b+216|0;l=b+212|0;m=b+208|0;n=b+204|0;o=b+200|0;q=b+196|0;s=b+192|0;t=b+188|0;u=b+252|0;v=b+180|0;w=b+176|0;x=b+16|0;y=b+8|0;z=b;A=b+40|0;C=b+24|0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;k[t>>2]=0;D=a+44|0;cO(k[D>>2]|0,b+184|0,80);cO(k[D>>2]|0,v,72);dO(k[D>>2]|0,x,78);dO(k[D>>2]|0,y,75);dO(k[D>>2]|0,z,69);Eh(a);i[u>>0]=0;xh(a,497);Aoa(f,a);E=a+24|0;Koa(g,k[f>>2]|0,k[E>>2]|0,k[D>>2]|0);F=1;G=0;while(1){xh(a,497);cO(k[D>>2]|0,w,478);xoa(a,k[f>>2]|0);H=k[f>>2]|0;if(H){if((k[H>>2]|0)!=0?(I=k[H+4>>2]|0,(I|0)!=0):0){J=k[I>>2]|0;if(J)Ec[k[(k[J>>2]|0)+4>>2]&1023](J);Sqa(I)}Sqa(H)}if(G){if((k[G>>2]|0)!=0?(H=k[G+4>>2]|0,(H|0)!=0):0){I=k[H>>2]|0;if(I)Ec[k[(k[I>>2]|0)+4>>2]&1023](I);Sqa(H)}Sqa(G)}H=k[g>>2]|0;ooa(d,e,h,j,0,a);poa(t,k[E>>2]|0,k[w>>2]|0);Loa(k[h>>2]|0,k[e>>2]|0,k[t>>2]|0,0);I=k[e>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}Poa(g,k[d>>2]|0,k[h>>2]|0,H,k[j>>2]|0,k[D>>2]|0);Roa(f,k[g>>2]|0,k[t>>2]|0,k[E>>2]|0,k[D>>2]|0,0);I=k[t>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}xoa(a,k[f>>2]|0);Zoa(u,k[d>>2]|0,k[h>>2]|0,k[g>>2]|0,H,+p[x>>3],+p[y>>3],+p[z>>3]);I=k[d>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}I=k[h>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}I=k[j>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}xh(a,500);cO(k[D>>2]|0,w,478);ooa(l,m,q,s,0,a);poa(t,k[E>>2]|0,k[w>>2]|0);Loa(k[q>>2]|0,k[m>>2]|0,k[t>>2]|0,0);I=k[m>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}Poa(o,k[l>>2]|0,k[q>>2]|0,0,k[s>>2]|0,k[D>>2]|0);I=k[l>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}I=k[q>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}I=k[s>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}Roa(n,k[o>>2]|0,k[t>>2]|0,k[E>>2]|0,k[D>>2]|0,0);I=k[o>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}I=k[t>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}xoa(a,k[n>>2]|0);I=k[n>>2]|0;if(I){if((k[I>>2]|0)!=0?(J=k[I+4>>2]|0,(J|0)!=0):0){K=k[J>>2]|0;if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);Sqa(J)}Sqa(I)}F=F+1|0;if(i[u>>0]|0){L=H;break}if((F|0)>=(k[v>>2]|0)){M=H;N=102;break}else G=H}a:do if((N|0)==102){G=A+56|0;F=A+4|0;k[A>>2]=27524;k[G>>2]=27544;B=0;wa(508,A+56|0,F|0);u=B;B=0;if(u&1){u=Rb()|0;O=Q;P=u;vva(G);Qb(P|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[G>>2]=27488;B=0;va(448,F|0);u=B;B=0;do if(u&1){n=Rb()|0;R=Q;S=n}else{k[F>>2]=27560;n=A+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;t=Q;Yua(c);Yua(n);Ava(F);R=t;S=a;break}Yua(c);B=0;a=Ia(40,A|0,148961,33)|0;t=B;B=0;if(((!(t&1)?(B=0,t=Xa(242,a|0,k[v>>2]|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Ia(40,t|0,148995,11)|0,t=B,B=0,!(t&1)):0)?(B=0,wa(510,C|0,F|0),t=B,B=0,!(t&1)):0){B=0;ya(425,C|0)|0;t=B;B=0;if(!(t&1)){Yua(C);k[A>>2]=27468;k[G>>2]=27488;k[F>>2]=27560;Yua(n);Ava(F);vva(G);L=M;break a}t=Rb()|0;a=Q;Yua(C);T=a;U=t;k[A>>2]=27468;k[G>>2]=27488;k[F>>2]=27560;Yua(n);Ava(F);vva(G);Qb(U|0)}t=Rb()|0;T=Q;U=t;k[A>>2]=27468;k[G>>2]=27488;k[F>>2]=27560;Yua(n);Ava(F);vva(G);Qb(U|0)}while(0);O=R;P=S;vva(G);Qb(P|0)}while(0);if(L){if((k[L>>2]|0)!=0?(P=k[L+4>>2]|0,(P|0)!=0):0){S=k[P>>2]|0;if(S)Ec[k[(k[S>>2]|0)+4>>2]&1023](S);Sqa(P)}Sqa(L)}L=k[g>>2]|0;if(L){if((k[L>>2]|0)!=0?(g=k[L+4>>2]|0,(g|0)!=0):0){P=k[g>>2]|0;if(P)Ec[k[(k[P>>2]|0)+4>>2]&1023](P);Sqa(g)}Sqa(L)}L=k[f>>2]|0;if(!L){r=b;return}if((k[L>>2]|0)!=0?(f=k[L+4>>2]|0,(f|0)!=0):0){g=k[f>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(f)}Sqa(L);r=b;return}function kpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=r;r=r+320|0;c=b;d=b+312|0;e=b+308|0;f=b+160|0;g=b+296|0;h=b+24|0;j=b+12|0;l=a+44|0;bO(k[l>>2]|0,d,759);cO(k[l>>2]|0,e,298);a:do if(CY()|0){m=f+56|0;n=f+4|0;k[f>>2]=27524;k[m>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,f|0,149007,40)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,g|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,g|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(g);y=x;z=w;break}else{Yua(g);k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=Q;z=v}k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);xh(a,493);oO(k[l>>2]|0,993,576);Voa(a);if(!((k[e>>2]|0)!=301?(oO(k[l>>2]|0,994,576),Voa(a),(k[e>>2]|0)!=301):0)){oO(k[l>>2]|0,993,575);y_(a)}if(!(i[d>>0]|0)){r=b;return}b:do if(CY()|0){d=h+56|0;l=h+4|0;k[h>>2]=27524;k[d>>2]=27544;B=0;wa(508,h+56|0,l|0);q=B;B=0;if(q&1){q=Rb()|0;E=Q;F=q;vva(d);Qb(F|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);q=B;B=0;do if(q&1){u=Rb()|0;G=Q;H=u}else{k[l>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;p=Q;Yua(c);Yua(u);Ava(l);G=p;H=t;break}Yua(c);B=0;Ia(40,h|0,149048,16)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,j|0,l|0),p=B,B=0,!(p&1)):0){B=0;ya(425,j|0)|0;p=B;B=0;if(p&1){p=Rb()|0;z=Q;Yua(j);I=z;J=p;break}else{Yua(j);k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);break b}}else A=34;while(0);if((A|0)==34){t=Rb()|0;I=Q;J=t}k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);C=I;D=J;Qb(D|0)}while(0);E=G;F=H;vva(d);Qb(F|0)}while(0);if((k[e>>2]|0)==301){k[c>>2]=993;fi(a,a+48|0,c,1,1);r=b;return}else{e=c;k[e>>2]=993;k[e+4>>2]=994;fi(a,a+48|0,c,2,1);r=b;return}}function lpa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=0;k[e>>2]=0;a:do if((bL(a)|0)>0){f=0;while(1){g=qh(a,f)|0;if(ed[k[(k[g>>2]|0)+60>>2]&511](g,b)|0?(ph(a,f)|0)==610:0)break;f=f+1|0;if((f|0)>=(bL(a)|0))break a}k[d>>2]=1}while(0);nZ(d,e,1,4,4,0,uY()|0)|0;uY()|0;r=c;return k[e>>2]|0}function mpa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=r;r=r+176|0;g=f+156|0;h=f+152|0;i=f+16|0;j=f;k[h>>2]=0;npa(h,c,e);l=k[h>>2]|0;m=(l|0)==0&1;if(opa(c,e)|0){k[h>>2]=0;n=0;o=1;k[a>>2]=o;k[b>>2]=n;r=f;return}if((l|0)>(d|0)){n=l;o=m;k[a>>2]=o;k[b>>2]=n;r=f;return}a:do if(BY()|0){d=i+56|0;h=i+4|0;k[i>>2]=27524;k[d>>2]=27544;B=0;wa(508,i+56|0,h|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(d);Qb(s|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[h>>2]=27560;t=i+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[i+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,h|0,g|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(g);Yua(t);Ava(h);u=x;v=w;break}Yua(g);B=0;Ia(40,i|0,149065,24)|0;w=B;B=0;if(!(w&1)?(B=0,wa(510,j|0,h|0),w=B,B=0,!(w&1)):0){B=0;ya(425,j|0)|0;w=B;B=0;if(!(w&1)){Yua(j);k[i>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(t);Ava(h);vva(d);break a}w=Rb()|0;x=Q;Yua(j);y=x;z=w;k[i>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(t);Ava(h);vva(d);Qb(z|0)}w=Rb()|0;y=Q;z=w;k[i>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(t);Ava(h);vva(d);Qb(z|0)}while(0);q=u;s=v;vva(d);Qb(s|0)}while(0);if((bL(c)|0)<=0){n=l;o=m;k[a>>2]=o;k[b>>2]=n;r=f;return}s=0;do{if((ph(c,s)|0)==610?(v=qh(c,s)|0,ed[k[(k[v>>2]|0)+60>>2]&511](v,e)|0):0)a1(v);s=s+1|0}while((s|0)<(bL(c)|0));n=l;o=m;k[a>>2]=o;k[b>>2]=n;r=f;return}function npa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;k[g>>2]=0;if((bL(b)|0)>0){h=0;do{if((ph(b,h)|0)==610?(i=qh(b,h)|0,ed[k[(k[i>>2]|0)+60>>2]&511](i,c)|0):0){$0(i,e)|0;k[g>>2]=(k[g>>2]|0)+(k[e>>2]|0)}h=h+1|0}while((h|0)<(bL(b)|0))}nZ(g,f,1,4,4,0,uY()|0)|0;uY()|0;k[a>>2]=k[f>>2];r=d;return}function opa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=0;k[e>>2]=0;a:do if((bL(a)|0)>0){f=0;while(1){if(((ph(a,f)|0)==610?(g=qh(a,f)|0,ed[k[(k[g>>2]|0)+60>>2]&511](g,b)|0):0)?b1(g)|0:0)break;f=f+1|0;if((f|0)>=(bL(a)|0))break a}k[d>>2]=1}while(0);nZ(d,e,1,4,1,0,uY()|0)|0;uY()|0;r=c;return k[e>>2]|0}function ppa(a){a=a|0;k[a>>2]=1073741823;return}function qpa(a){a=a|0;return k[a+64>>2]&16|0}function rpa(a){a=a|0;return k[a+64>>2]&64|0}function spa(a){a=a|0;var b=0;b=a+64|0;k[b>>2]=k[b>>2]|4;return}function tpa(a){a=a|0;var b=0;b=a+64|0;k[b>>2]=k[b>>2]|8;return}function upa(a){a=a|0;var b=0;b=a+64|0;k[b>>2]=k[b>>2]|16;return}function vpa(a){a=a|0;var b=0;b=a+64|0;k[b>>2]=k[b>>2]&1007;return}function wpa(a){a=a|0;var b=0;b=a+64|0;k[b>>2]=k[b>>2]|64;return}function xpa(a){a=a|0;return k[a+68>>2]&4|0}function ypa(a){a=a|0;return k[a+68>>2]&6|0}function zpa(a){a=a|0;var b=0;b=a+68|0;k[b>>2]=k[b>>2]|4;return}function Apa(a){a=a|0;var b=0;b=a+68|0;k[b>>2]=k[b>>2]|2;return}function Bpa(a){a=a|0;var b=0,c=0;b=a+80|0;c=a;a=c+72|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(a|0));p[b>>3]=.17453292519943295;return}function Cpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0.0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0.0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0.0,Db=0,Eb=0,Fb=0,Gb=0.0,Hb=0,Ib=0,Jb=0.0,Kb=0.0,Lb=0,Mb=0,Nb=0.0,Ob=0.0,Pb=0.0,Sb=0.0,Tb=0.0,Ub=0.0,Vb=0,Wb=0.0,Xb=0.0,Yb=0.0,Zb=0.0,_b=0,$b=0.0,ac=0.0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0;b=r;r=r+1056|0;c=b+1044|0;d=b+1032|0;e=b+1020|0;f=b+1008|0;g=b+996|0;h=b+984|0;i=b+968|0;j=b+832|0;l=b+680|0;m=b+696|0;n=b+392|0;q=b+544|0;s=b+108|0;t=b+408|0;u=b+96|0;v=b+84|0;w=b+72|0;x=b+256|0;y=b+60|0;z=b+48|0;A=b+36|0;C=b+120|0;D=b+24|0;E=b+12|0;F=b;G=a+4|0;H=k[G>>2]|0;I=Rqa(H>>>0>1073741823?-1:H<<2)|0;H=a+8|0;J=k[H>>2]|0;K=J<<1;L=Rqa(K>>>0>1073741823?-1:K<<2)|0;K=Rqa(J>>>0>1073741823?-1:J<<2)|0;Lpa(i);a:do if((k[G>>2]|0)>0){J=a+20|0;M=a+72|0;N=a+40|0;O=a+48|0;P=0;while(1){R=k[J>>2]|0;S=+p[M>>3];T=~~(S*(+p[R+(P*72|0)+16>>3]-+p[O>>3]));U=R+(P*72|0)|0;k[U>>2]=~~(S*(+p[R+(P*72|0)+8>>3]-+p[N>>3]));k[U+4>>2]=T;T=k[J>>2]|0;B=0;U=Ia(45,i|0,k[T+(P*72|0)>>2]|0,k[T+(P*72|0)+4>>2]|0)|0;T=B;B=0;if(T&1){V=78;break}T=k[J>>2]|0;if((U|0)!=0?(R=U+8|0,S=+p[R>>3]-+p[T+(P*72|0)+8>>3],W=U+16|0,X=+p[W>>3]-+p[T+(P*72|0)+16>>3],(S<0.0?-S:S)+(X<0.0?-X:X)<1.0e-20):0){Y=U;Z=R;_=W;$=P;V=8;break}B=0;wa(523,i|0,T+(P*72|0)|0);T=B;B=0;if(T&1){V=78;break}P=P+1|0;T=k[G>>2]|0;if((P|0)>=(T|0)){ba=T;V=3;break}}if((V|0)==3){if((ba|0)<=0){ca=0;V=99;break}WEa(I|0,-1,((ba|0)>1?ba:1)<<2|0)|0;ca=1;V=99;break}else if((V|0)==8){P=j+56|0;N=j+4|0;k[j>>2]=27524;k[P>>2]=27544;B=0;wa(508,j+56|0,N|0);O=B;B=0;if(O&1){O=Rb()|0;da=Q;ea=O}else{k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[P>>2]=27488;B=0;va(448,N|0);O=B;B=0;do if(O&1){M=Rb()|0;fa=Q;ga=M}else{k[N>>2]=27560;M=j+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,N|0,h|0);T=B;B=0;if(T&1){T=Rb()|0;W=Q;Yua(h);Yua(M);Ava(N);fa=W;ga=T;break}Yua(h);B=0;T=Ia(40,j|0,149155,19)|0;W=B;B=0;do if(((((!(W&1)?(B=0,R=Xa(253,T|0,k[Y+48>>2]|0)|0,U=B,B=0,!(U&1)):0)?(B=0,U=Ia(40,R|0,149175,1)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Xa(253,U|0,k[(k[J>>2]|0)+($*72|0)+48>>2]|0)|0,U=B,B=0,!(U&1)):0)?(B=0,Ia(40,R|0,149177,1)|0,R=B,B=0,!(R&1)):0)?(B=0,wa(510,l|0,N|0),R=B,B=0,!(R&1)):0){B=0;ya(424,l|0)|0;R=B;B=0;if(R&1){R=Rb()|0;U=Q;Yua(l);ha=R;ja=U;break}Yua(l);k[j>>2]=27468;k[P>>2]=27488;k[N>>2]=27560;Yua(M);Ava(N);vva(P);U=m+56|0;R=m+4|0;k[m>>2]=27524;k[U>>2]=27544;B=0;wa(508,m+56|0,R|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;ma=ka}else{k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[U>>2]=27488;B=0;va(448,R|0);ka=B;B=0;do if(ka&1){na=Rb()|0;oa=Q;pa=na}else{k[R>>2]=27560;na=m+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,R|0,g|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(g);Yua(na);Ava(R);oa=ra;pa=qa;break}Yua(g);B=0;qa=Ia(40,m|0,149179,4)|0;ra=B;B=0;do if(ra&1)V=83;else{B=0;sa=Xa(253,qa|0,$+1|0)|0;ta=B;B=0;if(ta&1){V=83;break}B=0;Ia(40,sa|0,149177,1)|0;sa=B;B=0;if(sa&1){V=83;break}B=0;wa(510,n|0,R|0);sa=B;B=0;if(sa&1){V=83;break}B=0;ya(424,n|0)|0;sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(n);xa=sa;za=ta;break}Yua(n);k[m>>2]=27468;k[U>>2]=27488;k[R>>2]=27560;Yua(na);Ava(R);vva(U);ta=q+56|0;sa=q+4|0;k[q>>2]=27524;k[ta>>2]=27544;B=0;wa(508,q+56|0,sa|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Ca=Aa}else{k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[ta>>2]=27488;B=0;va(448,sa|0);Aa=B;B=0;do if(Aa&1){Da=Rb()|0;Ea=Q;Fa=Da}else{k[sa>>2]=27560;Da=q+36|0;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[q+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,sa|0,f|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ha=Q;Yua(f);Yua(Da);Ava(sa);Ea=Ha;Fa=Ga;break}Yua(f);B=0;Ga=Ia(40,q|0,149184,9)|0;Ha=B;B=0;do if(Ha&1)V=86;else{B=0;Ja=Sa(1,Ga|0,+(+p[Z>>3]))|0;Ka=B;B=0;if(Ka&1){V=86;break}B=0;Ka=Ia(40,Ja|0,149175,1)|0;Ja=B;B=0;if(Ja&1){V=86;break}B=0;Ja=Sa(1,Ka|0,+(+p[_>>3]))|0;Ka=B;B=0;if(Ka&1){V=86;break}B=0;Ka=Ia(40,Ja|0,149194,3)|0;Ja=B;B=0;if(Ja&1){V=86;break}B=0;Ja=Sa(1,Ka|0,+(+p[(k[J>>2]|0)+($*72|0)+8>>3]))|0;Ka=B;B=0;if(Ka&1){V=86;break}B=0;Ka=Ia(40,Ja|0,149175,1)|0;Ja=B;B=0;if(Ja&1){V=86;break}B=0;Ja=Sa(1,Ka|0,+(+p[(k[J>>2]|0)+($*72|0)+16>>3]))|0;Ka=B;B=0;if(Ka&1){V=86;break}B=0;Ia(40,Ja|0,149198,2)|0;Ja=B;B=0;if(Ja&1){V=86;break}B=0;wa(510,s|0,sa|0);Ja=B;B=0;if(Ja&1){V=86;break}B=0;ya(424,s|0)|0;Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ka=Q;Yua(s);La=Ja;Ma=Ka;break}Yua(s);k[q>>2]=27468;k[ta>>2]=27488;k[sa>>2]=27560;Yua(Da);Ava(sa);vva(ta);Tqa(L);Tqa(I);Tqa(K);Ka=t+56|0;Ja=t+4|0;k[t>>2]=27524;k[Ka>>2]=27544;B=0;wa(508,t+56|0,Ja|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Oa=Q;Pa=Na}else{k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Ka>>2]=27488;B=0;va(448,Ja|0);Na=B;B=0;do if(Na&1){Qa=Rb()|0;Ra=Q;Ta=Qa}else{k[Ja>>2]=27560;Qa=t+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Ja|0,e|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Yua(e);Yua(Qa);Ava(Ja);Ra=Va;Ta=Ua;break}Yua(e);B=0;Ua=Ia(40,t|0,149201,86)|0;Va=B;B=0;b:do if(Va&1)V=89;else{B=0;Xa(239,Ua|0,0)|0;Wa=B;B=0;if(Wa&1){V=89;break}Wa=Ab(20)|0;B=0;eb(502,u|0,149090,64);Ya=B;B=0;do if(!(Ya&1)){B=0;eb(502,v|0,149288,8);Za=B;B=0;if(Za&1){Za=Rb()|0;_a=Q;Yua(u);$a=_a;ab=Za;break}B=0;wa(510,w|0,Ja|0);Za=B;B=0;if(Za&1){Za=Rb()|0;bb=1;cb=Za;db=Q}else{B=0;ua(163,Wa|0,u|0,v|0,485,w|0);Za=B;B=0;if(Za&1)fb=1;else{B=0;eb(503,Wa|0,1240,229);B=0;fb=0}Za=Rb()|0;_a=Q;Yua(w);bb=fb;cb=Za;db=_a}Yua(v);Yua(u);if(bb){$a=db;ab=cb}else{gb=cb;hb=db;break b}}else{_a=Rb()|0;$a=Q;ab=_a}while(0);zb(Wa|0);gb=ab;hb=$a}while(0);if((V|0)==89){Ua=Rb()|0;gb=Ua;hb=Q}k[t>>2]=27468;k[Ka>>2]=27488;k[Ja>>2]=27560;Yua(Qa);Ava(Ja);vva(Ka);ib=gb;jb=hb;Opa(i);Qb(ib|0)}while(0);Oa=Ra;Pa=Ta}vva(Ka);kb=Oa;lb=Pa;break a}while(0);if((V|0)==86){Ga=Rb()|0;La=Ga;Ma=Q}k[q>>2]=27468;k[ta>>2]=27488;k[sa>>2]=27560;Yua(Da);Ava(sa);vva(ta);ib=La;jb=Ma;Opa(i);Qb(ib|0)}while(0);Ba=Ea;Ca=Fa}vva(ta);kb=Ba;lb=Ca;break a}while(0);if((V|0)==83){qa=Rb()|0;xa=qa;za=Q}k[m>>2]=27468;k[U>>2]=27488;k[R>>2]=27560;Yua(na);Ava(R);vva(U);ib=xa;jb=za;Opa(i);Qb(ib|0)}while(0);la=oa;ma=pa}vva(U);kb=la;lb=ma;break a}else V=80;while(0);if((V|0)==80){T=Rb()|0;ha=T;ja=Q}k[j>>2]=27468;k[P>>2]=27488;k[N>>2]=27560;Yua(M);Ava(N);vva(P);ib=ha;jb=ja;Opa(i);Qb(ib|0)}while(0);da=fa;ea=ga}vva(P);kb=da;lb=ea;break}else if((V|0)==78){N=Rb()|0;kb=Q;lb=N;break}}else{ca=0;V=99}while(0);c:do if((V|0)==99){ea=k[H>>2]|0;d:do if((ea|0)>0){da=k[a+24>>2]|0;ga=a+20|0;fa=0;ja=0;while(1){ha=k[da+(fa*72|0)+4>>2]|0;j=k[da+(fa*72|0)>>2]|0;X=+p[ha+8>>3]-+p[j+8>>3];S=+p[ha+16>>3]-+p[j+16>>3];if(+aa(+(X*X+S*S))==0.0){mb=fa;break}nb=+ia(+S,+X);o[K+(fa<<2)>>2]=nb;ma=k[ga>>2]|0;la=I+(((j-ma|0)/72|0)<<2)|0;k[L+(ja<<2)>>2]=k[la>>2];j=ja|1;k[la>>2]=ja;la=I+(((ha-ma|0)/72|0)<<2)|0;k[L+(j<<2)>>2]=k[la>>2];k[la>>2]=j;fa=fa+1|0;if((fa|0)>=(ea|0))break d;else ja=ja+2|0}Tqa(L);Tqa(I);Tqa(K);ja=x+56|0;fa=x+4|0;k[x>>2]=27524;k[ja>>2]=27544;B=0;wa(508,x+56|0,fa|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ob=Q;pb=ga}else{k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ja>>2]=27488;B=0;va(448,fa|0);ga=B;B=0;do if(ga&1){da=Rb()|0;qb=Q;rb=da}else{k[fa>>2]=27560;da=x+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[x+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,fa|0,d|0);M=B;B=0;if(M&1){M=Rb()|0;j=Q;Yua(d);Yua(da);Ava(fa);qb=j;rb=M;break}Yua(d);B=0;M=Ia(40,x|0,149297,15)|0;j=B;B=0;e:do if(((!(j&1)?(B=0,la=Xa(253,M|0,mb|0)|0,ma=B,B=0,!(ma&1)):0)?(B=0,ma=Ia(40,la|0,149313,5)|0,la=B,B=0,!(la&1)):0)?(B=0,Xa(239,ma|0,0)|0,ma=B,B=0,!(ma&1)):0){ma=Ab(20)|0;B=0;eb(502,y|0,149090,64);la=B;B=0;do if(!(la&1)){B=0;eb(502,z|0,149288,8);ha=B;B=0;if(ha&1){ha=Rb()|0;pa=Q;Yua(y);sb=ha;tb=pa;break}B=0;wa(510,A|0,fa|0);pa=B;B=0;if(pa&1){pa=Rb()|0;ub=1;vb=pa;wb=Q}else{B=0;ua(163,ma|0,y|0,z|0,563,A|0);pa=B;B=0;if(pa&1)xb=1;else{B=0;eb(503,ma|0,1240,229);B=0;xb=0}pa=Rb()|0;ha=Q;Yua(A);ub=xb;vb=pa;wb=ha}Yua(z);Yua(y);if(ub){sb=vb;tb=wb}else{yb=vb;Bb=wb;break e}}else{ha=Rb()|0;sb=ha;tb=Q}while(0);zb(ma|0);yb=sb;Bb=tb}else V=121;while(0);if((V|0)==121){M=Rb()|0;yb=M;Bb=Q}k[x>>2]=27468;k[ja>>2]=27488;k[fa>>2]=27560;Yua(da);Ava(fa);vva(ja);ib=yb;jb=Bb;Opa(i);Qb(ib|0)}while(0);ob=qb;pb=rb}vva(ja);kb=ob;lb=pb;break c}while(0);do if(ca){P=a+80|0;fa=a+24|0;ga=a+20|0;M=0;f:while(1){j=I+(M<<2)|0;U=k[j>>2]|0;g:do if((U|0)>-1){nb=-1.0e3;la=0;na=U;ha=0;pa=j;oa=j;while(1){za=la;xa=na;m=ha;Ca=oa;while(1){m=m+1|0;Ba=Ca;Ca=L+(xa<<2)|0;Fa=xa;xa=k[Ca>>2]|0;X=+o[K+(((Fa|0)/2|0)<<2)>>2];if(!(Fa&1))Cb=X;else Cb=X+(X<0.0?3.141592653589793:-3.141592653589793);if(!(nb>Cb)){Db=m;Eb=Ca;Fb=xa;Gb=Cb;Hb=za;V=136;break}k[Ca>>2]=k[Ba>>2];k[Ba>>2]=k[pa>>2];k[pa>>2]=xa;if((xa|0)<=-1)break;else za=1}if((V|0)==136){V=0;if((Fb|0)>-1){za=pa;nb=Gb;la=Hb;na=Fb;ha=Db;pa=Eb;oa=za;continue}if(!Hb){Ib=Db;break}}za=k[j>>2]|0;if((za|0)>-1){nb=-1.0e3;la=0;na=za;ha=0;pa=j;oa=j}else{V=155;break g}}if((Ib|0)==2){oa=k[j>>2]|0;pa=k[L+(oa<<2)>>2]|0;ha=(oa|0)/2|0;na=(pa|0)/2|0;nb=+o[K+(ha<<2)>>2];if(!(oa&1))Jb=nb;else Jb=nb+(nb<0.0?3.141592653589793:-3.141592653589793);nb=+o[K+(na<<2)>>2];if(!(pa&1))Kb=nb+(nb<0.0?3.141592653589793:-3.141592653589793);else Kb=nb;nb=Kb-Jb;X=nb<0.0?-nb:nb;nb=+p[P>>3];if(!(!(X>=nb)|!(X<=6.283185307179586-nb))?(B=0,va(540,(k[ga>>2]|0)+(M*72|0)|0),pa=B,B=0,pa&1):0){V=77;break f}pa=k[fa>>2]|0;if((k[pa+(ha*72|0)+64>>2]|0)==(k[pa+(na*72|0)+64>>2]|0)){B=0;oa=ya(436,pa+(ha*72|0)|0)|0;pa=B;B=0;if(pa&1){V=77;break f}if(oa)V=152}else V=152;if((V|0)==152?(V=0,B=0,va(541,(k[ga>>2]|0)+(M*72|0)|0),oa=B,B=0,oa&1):0){V=77;break f}oa=k[fa>>2]|0;if((k[oa+(ha*72|0)+8>>2]|0)!=(k[oa+(na*72|0)+8>>2]|0)?(B=0,va(541,(k[ga>>2]|0)+(M*72|0)|0),na=B,B=0,na&1):0){V=77;break f}}else V=155}else V=155;while(0);if((V|0)==155?(V=0,B=0,va(540,(k[ga>>2]|0)+(M*72|0)|0),U=B,B=0,U&1):0){V=77;break}U=k[j>>2]|0;if((U|0)>-1){da=U;while(1){na=k[L+(da<<2)>>2]|0;if((na|0)>-1)da=na;else{Lb=da;break}}k[L+(Lb<<2)>>2]=U}M=M+1|0;if((M|0)>=(k[G>>2]|0)){V=131;break}}if((V|0)==77){M=Rb()|0;kb=Q;lb=M;break c}else if((V|0)==131){Mb=k[H>>2]|0;break}}else Mb=ea;while(0);ea=(Mb|0)>0;h:do if(ea){M=a+24|0;ga=k[M>>2]|0;fa=0;P=0;while(1){ja=k[L+(P<<2)>>2]|0;da=(ja|0)/2|0;j=(ja|0)%2|0;if((k[ga+(da*72|0)+(j<<2)>>2]|0)!=(k[ga+(fa*72|0)>>2]|0))break;k[ga+(da*72|0)+48+(j<<2)>>2]=ga+(fa*72|0);ja=k[M>>2]|0;k[ja+(da*72|0)+56+(j<<2)>>2]=0;j=k[L+((P|1)<<2)>>2]|0;da=(j|0)/2|0;na=(j|0)%2|0;if((k[ja+(da*72|0)+(na<<2)>>2]|0)!=(k[ja+(fa*72|0)+4>>2]|0))break;k[ja+(da*72|0)+48+(na<<2)>>2]=ja+(fa*72|0);ga=k[M>>2]|0;k[ga+(da*72|0)+56+(na<<2)>>2]=1;fa=fa+1|0;if((fa|0)>=(Mb|0)){V=161;break}else P=P+2|0}if((V|0)==161){if(!ea){V=162;break}P=a+24|0;fa=0;while(1){ga=k[P>>2]|0;M=k[ga+(fa*72|0)+4>>2]|0;na=k[ga+(fa*72|0)>>2]|0;nb=+p[M+8>>3]-+p[na+8>>3];X=+p[M+16>>3]-+p[na+16>>3];S=+aa(+(nb*nb+X*X));Nb=+p[ga+(fa*72|0)+16>>3];Ob=+p[ga+(fa*72|0)+24>>3];Pb=+aa(+(Nb*Nb+Ob*Ob));if(Pb==0.0){B=0;M=ya(437,na|0)|0;na=B;B=0;if(na&1){V=75;break}na=k[P>>2]|0;if(!M){M=k[na+(fa*72|0)+4>>2]|0;da=k[(k[na+(fa*72|0)+48>>2]|0)+(1-(k[na+(fa*72|0)+56>>2]|0)<<2)>>2]|0;Sb=+p[M+8>>3]-+p[da+8>>3];Tb=+p[M+16>>3]-+p[da+16>>3];Ub=S/+aa(+(Sb*Sb+Tb*Tb));Vb=na;Wb=S;Xb=Sb*Ub;Yb=Tb*Ub}else{Vb=na;Wb=Pb;Xb=Nb;Yb=Ob}}else{Ub=S/Pb;Vb=ga;Wb=S;Xb=Nb*Ub;Yb=Ob*Ub}ga=nb*Xb+X*Yb<0.0;p[Vb+(fa*72|0)+16>>3]=ga?-Xb:Xb;p[Vb+(fa*72|0)+24>>3]=ga?-Yb:Yb;ga=k[P>>2]|0;Ub=+p[ga+(fa*72|0)+32>>3];Ob=+p[ga+(fa*72|0)+40>>3];Nb=+aa(+(Ub*Ub+Ob*Ob));if(Nb==0.0){B=0;na=ya(437,k[ga+(fa*72|0)+4>>2]|0)|0;da=B;B=0;if(da&1){V=75;break}da=k[P>>2]|0;if(!na){na=k[da+(fa*72|0)>>2]|0;M=k[(k[da+(fa*72|0)+52>>2]|0)+(1-(k[da+(fa*72|0)+60>>2]|0)<<2)>>2]|0;Pb=+p[na+8>>3]-+p[M+8>>3];Tb=+p[na+16>>3]-+p[M+16>>3];Sb=S/+aa(+(Pb*Pb+Tb*Tb));Zb=S;_b=da;$b=Pb*Sb;ac=Tb*Sb}else{Zb=Nb;_b=da;$b=Ub;ac=Ob}}else{Sb=S/Nb;Zb=S;_b=ga;$b=Ub*Sb;ac=Ob*Sb}ga=nb*$b+X*ac<0.0;p[_b+(fa*72|0)+32>>3]=ga?-$b:$b;p[_b+(fa*72|0)+40>>3]=ga?-ac:ac;if(Wb!=0.0?(B=0,va(542,(k[P>>2]|0)+(fa*72|0)|0),ga=B,B=0,ga&1):0){V=76;break}if(Zb!=0.0?(B=0,va(543,(k[P>>2]|0)+(fa*72|0)|0),ga=B,B=0,ga&1):0){V=76;break}fa=fa+1|0;ga=k[H>>2]|0;if((fa|0)>=(ga|0)){bc=P;cc=ga;break h}}if((V|0)==75){P=Rb()|0;kb=Q;lb=P;break c}else if((V|0)==76){P=Rb()|0;kb=Q;lb=P;break c}}P=C+56|0;fa=C+4|0;k[C>>2]=27524;k[P>>2]=27544;B=0;wa(508,C+56|0,fa|0);ga=B;B=0;if(ga&1){ga=Rb()|0;dc=Q;ec=ga}else{k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[P>>2]=27488;B=0;va(448,fa|0);ga=B;B=0;do if(ga&1){da=Rb()|0;fc=Q;gc=da}else{k[fa>>2]=27560;da=C+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fa|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;na=Q;Yua(c);Yua(da);Ava(fa);fc=na;gc=M;break}Yua(c);B=0;M=Ia(40,C|0,149319,51)|0;na=B;B=0;i:do if(!(na&1)?(B=0,Xa(239,M|0,0)|0,ja=B,B=0,!(ja&1)):0){ja=Ab(20)|0;B=0;eb(502,D|0,149090,64);j=B;B=0;do if(!(j&1)){B=0;eb(502,E|0,149288,8);oa=B;B=0;if(oa&1){oa=Rb()|0;ha=Q;Yua(D);hc=oa;ic=ha;break}B=0;wa(510,F|0,fa|0);ha=B;B=0;if(ha&1){ha=Rb()|0;jc=ha;kc=Q;lc=1}else{B=0;ua(163,ja|0,D|0,E|0,657,F|0);ha=B;B=0;if(ha&1)mc=1;else{B=0;eb(503,ja|0,1240,229);B=0;mc=0}ha=Rb()|0;oa=Q;Yua(F);jc=ha;kc=oa;lc=mc}Yua(E);Yua(D);if(lc){hc=jc;ic=kc}else{nc=jc;oc=kc;break i}}else{oa=Rb()|0;hc=oa;ic=Q}while(0);zb(ja|0);nc=hc;oc=ic}else V=179;while(0);if((V|0)==179){M=Rb()|0;nc=M;oc=Q}k[C>>2]=27468;k[P>>2]=27488;k[fa>>2]=27560;Yua(da);Ava(fa);vva(P);ib=nc;jb=oc;Opa(i);Qb(ib|0)}while(0);dc=fc;ec=gc}vva(P);kb=dc;lb=ec;break c}else V=162;while(0);if((V|0)==162){bc=a+24|0;cc=Mb}ea=a+16|0;fa=a+36|0;ga=cc;M=0;j:while(1){if((ga|0)>0){na=0;while(1){B=0;va(544,(k[bc>>2]|0)+(na*72|0)|0);U=B;B=0;if(U&1){V=73;break j}na=na+1|0;U=k[H>>2]|0;if((na|0)>=(U|0)){pc=U;break}}}else pc=ga;k[ea>>2]=0;na=pc;P=0;U=0;while(1){if((U|0)==(na|0))break;if((na|0)>0){j=(P|0)==0;oa=0;ha=U;while(1){pa=k[bc>>2]|0;la=pa+(oa*72|0)|0;B=0;ma=ya(438,la|0)|0;za=B;B=0;xa=za&1;if(j){if(xa){V=72;break j}if(!ma){za=pa+(oa*72|0)|0;B=0;Ca=ya(439,k[za>>2]|0)|0;m=B;B=0;if(m&1){V=72;break j}if(Ca){Ca=k[za>>2]|0;za=k[fa>>2]|0;if(!za){qc=la;rc=0;sc=ha}else{m=k[ea>>2]|0;k[za+(m<<4)>>2]=la;k[za+(m<<4)+8>>2]=0;qc=la;rc=0;sc=ha}while(1){m=1-rc|0;B=0;va(545,qc|0);za=B;B=0;if(za&1){V=70;break j}za=sc+1|0;k[qc+12>>2]=k[ea>>2];ta=k[qc+(m<<2)>>2]|0;if((Ca|0)==(ta|0)){tc=m;uc=za;vc=qc;break}B=0;Ba=ya(439,ta|0)|0;ta=B;B=0;if(ta&1){V=70;break j}if(Ba){tc=m;uc=za;vc=qc;break}Ba=k[qc+56+(m<<2)>>2]|0;qc=k[qc+48+(m<<2)>>2]|0;rc=Ba;sc=za}Ca=k[fa>>2]|0;ja=k[ea>>2]|0;if(Ca){k[Ca+(ja<<4)+4>>2]=vc;k[Ca+(ja<<4)+12>>2]=tc}k[ea>>2]=ja+1;wc=uc}else wc=ha}else wc=ha;B=0;ja=ya(438,la|0)|0;Ca=B;B=0;if(Ca&1){V=72;break j}if(!ja){ja=pa+(oa*72|0)+4|0;B=0;Ca=ya(439,k[ja>>2]|0)|0;za=B;B=0;if(za&1){V=72;break j}if(Ca){Ca=k[ja>>2]|0;ja=k[fa>>2]|0;if(!ja){xc=la;yc=1;zc=wc}else{za=k[ea>>2]|0;k[ja+(za<<4)>>2]=la;k[ja+(za<<4)+8>>2]=1;xc=la;yc=1;zc=wc}while(1){za=1-yc|0;B=0;va(545,xc|0);ja=B;B=0;if(ja&1){V=71;break j}ja=zc+1|0;k[xc+12>>2]=k[ea>>2];Ba=k[xc+(za<<2)>>2]|0;if((Ca|0)==(Ba|0)){Ac=za;Bc=ja;Cc=xc;break}B=0;m=ya(439,Ba|0)|0;Ba=B;B=0;if(Ba&1){V=71;break j}if(m){Ac=za;Bc=ja;Cc=xc;break}m=k[xc+56+(za<<2)>>2]|0;xc=k[xc+48+(za<<2)>>2]|0;yc=m;zc=ja}Ca=k[fa>>2]|0;ja=k[ea>>2]|0;if(Ca){k[Ca+(ja<<4)+4>>2]=Cc;k[Ca+(ja<<4)+12>>2]=Ac}k[ea>>2]=ja+1;Dc=Bc}else Dc=wc}else Dc=wc}else{if(xa){V=222;break j}if(!ma){ja=k[pa+(oa*72|0)>>2]|0;Ca=k[fa>>2]|0;if(!Ca){Ec=la;Fc=0;Gc=ha}else{m=k[ea>>2]|0;k[Ca+(m<<4)>>2]=la;k[Ca+(m<<4)+8>>2]=0;Ec=la;Fc=0;Gc=ha}while(1){m=1-Fc|0;B=0;va(545,Ec|0);Ca=B;B=0;if(Ca&1){V=223;break j}Ca=Gc+1|0;k[Ec+12>>2]=k[ea>>2];za=k[Ec+(m<<2)>>2]|0;if((ja|0)==(za|0)){Hc=m;Ic=Ca;Jc=Ec;break}B=0;Ba=ya(439,za|0)|0;za=B;B=0;if(za&1){V=223;break j}if(Ba){Hc=m;Ic=Ca;Jc=Ec;break}Ba=k[Ec+56+(m<<2)>>2]|0;Ec=k[Ec+48+(m<<2)>>2]|0;Fc=Ba;Gc=Ca}ma=k[fa>>2]|0;xa=k[ea>>2]|0;if(ma){k[ma+(xa<<4)+4>>2]=Jc;k[ma+(xa<<4)+12>>2]=Hc}k[ea>>2]=xa+1;B=0;va(541,ja|0);xa=B;B=0;if(xa&1){V=222;break j}else Kc=Ic}else Kc=ha;B=0;xa=ya(438,la|0)|0;ma=B;B=0;if(ma&1){V=222;break j}if(!xa){xa=k[pa+(oa*72|0)+4>>2]|0;ma=k[fa>>2]|0;if(!ma){Lc=la;Mc=1;Nc=Kc}else{Ca=k[ea>>2]|0;k[ma+(Ca<<4)>>2]=la;k[ma+(Ca<<4)+8>>2]=1;Lc=la;Mc=1;Nc=Kc}while(1){Ca=1-Mc|0;B=0;va(545,Lc|0);ma=B;B=0;if(ma&1){V=224;break j}ma=Nc+1|0;k[Lc+12>>2]=k[ea>>2];Ba=k[Lc+(Ca<<2)>>2]|0;if((xa|0)==(Ba|0)){Oc=Ca;Pc=ma;Qc=Lc;break}B=0;m=ya(439,Ba|0)|0;Ba=B;B=0;if(Ba&1){V=224;break j}if(m){Oc=Ca;Pc=ma;Qc=Lc;break}m=k[Lc+56+(Ca<<2)>>2]|0;Lc=k[Lc+48+(Ca<<2)>>2]|0;Mc=m;Nc=ma}la=k[fa>>2]|0;pa=k[ea>>2]|0;if(la){k[la+(pa<<4)+4>>2]=Qc;k[la+(pa<<4)+12>>2]=Oc}k[ea>>2]=pa+1;B=0;va(541,xa|0);pa=B;B=0;if(pa&1){V=222;break j}else Dc=Pc}else Dc=Kc}oa=oa+1|0;pa=k[H>>2]|0;if((oa|0)>=(pa|0)){Rc=pa;Sc=Dc;break}else ha=Dc}}else{Rc=na;Sc=U}P=P+1|0;if((P|0)>=2)break;else{na=Rc;U=Sc}}if(!M){U=k[ea>>2]|0;B=0;na=ya(422,(U>>>0>268435455?-1:U<<4)|0)|0;P=B;B=0;if(P&1){V=74;break}if(U){P=na+(U<<4)|0;U=na;do{B=0;va(546,U|0);ha=B;B=0;if(ha&1){Tc=na;V=247;break j}U=U+16|0}while((U|0)!=(P|0))}k[fa>>2]=na}P=M+1|0;if((P|0)>=2){V=250;break}ga=k[H>>2]|0;M=P}switch(V|0){case 70:{M=Rb()|0;kb=Q;lb=M;break c;break}case 71:{M=Rb()|0;kb=Q;lb=M;break c;break}case 72:{M=Rb()|0;kb=Q;lb=M;break c;break}case 73:{M=Rb()|0;kb=Q;lb=M;break c;break}case 74:{M=Rb()|0;kb=Q;lb=M;break c;break}case 222:{M=Rb()|0;kb=Q;lb=M;break c;break}case 223:{M=Rb()|0;kb=Q;lb=M;break c;break}case 224:{M=Rb()|0;kb=Q;lb=M;break c;break}case 247:{M=Rb()|0;ga=Q;Tqa(Tc);ib=M;jb=ga;Opa(i);Qb(ib|0);break}case 250:{Tqa(L);Tqa(I);Tqa(K);Opa(i);r=b;return}}}while(0);ib=lb;jb=kb;Opa(i);Qb(ib|0)}function Dpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;if((k[a>>2]|0)<=0){f=a+20|0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;f=a+24|0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;f=a+28|0;g=k[f>>2]|0;if(g){Opa(g);Sqa(g)}k[f>>2]=0;f=a+36|0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;k[a+16>>2]=0;f=k[a+32>>2]|0;if(f)Tqa(f);f=a+80|0;g=a;a=g+40|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(a|0));p[f>>3]=.17453292519943295;r=b;return}f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);a=B;B=0;if(a&1){a=Rb(0)|0;h=a;vva(f);Dd(h)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);a=B;B=0;do if(a&1){i=Rb(0)|0;j=i}else{k[g>>2]=27560;i=d+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);l=B;B=0;if(l&1){l=Rb(0)|0;Yua(c);Yua(i);Ava(g);j=l;break}Yua(c);B=0;Ia(40,d|0,149371,63)|0;l=B;B=0;if(!(l&1)?(B=0,wa(510,e|0,g|0),l=B,B=0,!(l&1)):0){B=0;ya(424,e|0)|0;l=B;B=0;if(l&1){l=Rb(0)|0;Yua(e);m=l;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(i);Ava(g);vva(f);Dd(m)}else{Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(i);Ava(g);vva(f);r=b;return}}l=Rb(0)|0;m=l;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(i);Ava(g);vva(f);Dd(m)}while(0);h=j;vva(f);Dd(h)}function Epa(a,b){a=a|0;b=b|0;return (b-(k[a+24>>2]|0)|0)/72|0|0}function Fpa(a,b){a=a|0;b=b|0;return (b-(k[a+20>>2]|0)|0)/72|0|0}function Gpa(a,b){a=a|0;b=b|0;return (b-(k[a+24>>2]|0)|0)/72|0|0}function Hpa(){ppa(41968);return}function Ipa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;k[a>>2]=b;k[a+4>>2]=0;p[a+8>>3]=-1.0;k[a+16>>2]=-1;d=a+20|0;e=Rqa(b>>>0>44739242?-1:b*96|0)|0;if(b){f=e+(b*96|0)|0;b=e;do{g=b+32|0;h=g+40|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(h|0));b=b+96|0}while((b|0)!=(f|0))}k[d>>2]=e;k[a+24>>2]=0;k[a+28>>2]=c;e=Rqa(c>>>0>89478485?-1:c*48|0)|0;k[a+32>>2]=e;return}function Jpa(a){a=a|0;var b=0,c=0;b=a+20|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+32|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function Kpa(a,b){a=a|0;b=+b;var c=0.0;c=1.0/(b*b);p[a>>3]=c;p[a+8>>3]=0.0;p[a+16>>3]=c;return}function Lpa(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+8|0;k[b>>2]=0;k[a+12>>2]=0;c=Qqa(36)|0;B=0;va(480,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(c);Qb(d|0)}else{k[a>>2]=c;d=Qqa(24)|0;k[d>>2]=41980;e=d+4|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;ih(c,d)|0;k[b>>2]=(k[b>>2]|0)+1;k[a+4>>2]=d;return}}function Mpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;k[d>>2]=0;k[a+12>>2]=0;e=Qqa(36)|0;B=0;va(480,e|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(e);Qb(f|0)}k[a>>2]=e;f=Qqa(24)|0;k[f>>2]=41980;g=f+4|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;ih(e,f)|0;k[d>>2]=(k[d>>2]|0)+1;k[a+4>>2]=f;if((c|0)==-1)h=k[b+44>>2]|0;else h=c;if((h|0)<=0)return;c=b+8|0;b=0;do{Npa(a,(k[c>>2]|0)+(b*72|0)|0);b=b+1|0}while((b|0)!=(h|0));return}function Npa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;c=r;r=r+16|0;d=c;e=k[b>>2]|0;f=k[b+4>>2]|0;g=a+4|0;h=k[g>>2]|0;a:do if(!h){i=g;j=12}else{l=h;m=1073741824;while(1){n=l+4|0;o=k[n>>2]|0;if((o|0)>=0){p=l;q=o;s=m;break}k[n>>2]=o+-1;m=m>>1;o=(m&e|0)!=0;n=l+8+(((m&f|0)!=0?(o?3:2):o&1)<<2)|0;l=k[n>>2]|0;if(!l){i=n;j=12;break a}}if((q|0)>3)if((k[p+20>>2]|0)==(b|0)){r=c;return}else j=7;else if((q|0)<=2)if((q|0)<=1){if((q|0)>0)j=11}else j=9;else j=7;if((j|0)==7)if((k[p+16>>2]|0)==(b|0)){r=c;return}else j=9;if((j|0)==9)if((k[p+12>>2]|0)==(b|0)){r=c;return}else j=11;if((j|0)==11?(k[p+8>>2]|0)==(b|0):0){r=c;return}l=d+4|0;m=d+8|0;n=d+12|0;o=a+8|0;t=p;u=s;while(1){v=t+4|0;w=k[v>>2]|0;if((w|0)!=4){x=w;y=t;break a}w=t+8|0;k[d>>2]=k[w>>2];k[l>>2]=k[t+12>>2];k[m>>2]=k[t+16>>2];k[n>>2]=k[t+20>>2];k[v>>2]=-4;u=u>>1;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;w=k[d>>2]|0;v=(k[w>>2]&u|0)!=0;z=t+8+(((k[w+4>>2]&u|0)!=0?(v?3:2):v&1)<<2)|0;v=k[z>>2]|0;if(!v){A=Qqa(24)|0;k[A>>2]=41980;B=A+4|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;ih(k[a>>2]|0,A)|0;k[o>>2]=(k[o>>2]|0)+1;k[z>>2]=A;C=k[d>>2]|0;D=A}else{C=w;D=v}v=D+4|0;w=k[v>>2]|0;k[v>>2]=w+1;k[D+8+(w<<2)>>2]=C;w=k[l>>2]|0;v=(k[w>>2]&u|0)!=0;A=t+8+(((k[w+4>>2]&u|0)!=0?(v?3:2):v&1)<<2)|0;v=k[A>>2]|0;if(!v){z=Qqa(24)|0;k[z>>2]=41980;B=z+4|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;ih(k[a>>2]|0,z)|0;k[o>>2]=(k[o>>2]|0)+1;k[A>>2]=z;E=k[l>>2]|0;F=z}else{E=w;F=v}v=F+4|0;w=k[v>>2]|0;k[v>>2]=w+1;k[F+8+(w<<2)>>2]=E;w=k[m>>2]|0;v=(k[w>>2]&u|0)!=0;z=t+8+(((k[w+4>>2]&u|0)!=0?(v?3:2):v&1)<<2)|0;v=k[z>>2]|0;if(!v){A=Qqa(24)|0;k[A>>2]=41980;B=A+4|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;ih(k[a>>2]|0,A)|0;k[o>>2]=(k[o>>2]|0)+1;k[z>>2]=A;G=k[m>>2]|0;H=A}else{G=w;H=v}v=H+4|0;w=k[v>>2]|0;k[v>>2]=w+1;k[H+8+(w<<2)>>2]=G;w=k[n>>2]|0;v=(k[w>>2]&u|0)!=0;A=t+8+(((k[w+4>>2]&u|0)!=0?(v?3:2):v&1)<<2)|0;v=k[A>>2]|0;if(!v){z=Qqa(24)|0;k[z>>2]=41980;B=z+4|0;k[B>>2]=0;k[B+4>>2]=0;k[B+8>>2]=0;k[B+12>>2]=0;k[B+16>>2]=0;ih(k[a>>2]|0,z)|0;k[o>>2]=(k[o>>2]|0)+1;k[A>>2]=z;I=k[n>>2]|0;J=z}else{I=w;J=v}v=J+4|0;w=k[v>>2]|0;k[v>>2]=w+1;k[J+8+(w<<2)>>2]=I;w=(u&e|0)!=0;v=t+8+(((u&f|0)!=0?(w?3:2):w&1)<<2)|0;t=k[v>>2]|0;if(!t){K=o;L=a;M=v;j=19;break}}}while(0);if((j|0)==12){K=a+8|0;L=a;M=i;j=19}if((j|0)==19){j=Qqa(24)|0;k[j>>2]=41980;i=j+4|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;ih(k[L>>2]|0,j)|0;k[K>>2]=(k[K>>2]|0)+1;k[M>>2]=j;x=k[j+4>>2]|0;y=j}k[y+4>>2]=x+1;k[y+8+(x<<2)>>2]=b;b=a+12|0;k[b>>2]=(k[b>>2]|0)+1;r=c;return}function Opa(a){a=a|0;var b=0;b=k[a>>2]|0;if(b){jh(b);Sqa(b)}k[a+4>>2]=0;return}function Ppa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;d=r;r=r+480|0;e=d+360|0;f=d+240|0;g=d+120|0;h=d;i=(b|0)<1073741824?((b|0)<0?0:b):1073741823;b=(c|0)<1073741824?((c|0)<0?0:c):1073741823;c=k[a+4>>2]|0;a=k[c+4>>2]|0;if(!a){j=0;r=d;return j|0}a:do if((a|0)<0){l=c;m=1073741824;n=0;o=0;while(1){p=m>>1;q=(p&i|0)!=0;s=(p&b|0)!=0?(q?3:2):q&1;q=k[l+8+(s<<2)>>2]|0;if(!q){t=l;u=m;v=n;w=o;break}x=k[q+4>>2]|0;if(!x){t=l;u=m;v=n;w=o;break}if((x|0)<0){l=q;m=p;n=((s&1|0)!=0?p:0)+n|0;o=((s&2|0)!=0?p:0)+o|0}else{y=x;z=q;break a}}k[e>>2]=t;o=k[t+4>>2]|0;n=(o|0)>0?o:4;k[f>>2]=n;k[g>>2]=v;k[h>>2]=w;o=n;n=t;m=u;l=u;q=0;x=0;b:while(1){p=m+i|0;s=i-m|0;A=m+b|0;B=b-m|0;C=o;D=n;E=l;F=q;c:while(1){G=f+(F<<2)|0;H=D+4|0;I=g+(F<<2)|0;J=h+(F<<2)|0;K=C;L=E;d:while(1){M=K;while(1){if(!M){N=L;break d}O=M+-1|0;k[G>>2]=O;if((k[H>>2]|0)>0){P=O;Q=D;R=L;S=F;break c}T=k[D+8+(O<<2)>>2]|0;if(!T)M=O;else{U=O;V=T;break}}M=L>>1;T=(k[I>>2]|0)+((U&1|0)!=0?M:0)|0;O=(k[J>>2]|0)+((U&2|0)!=0?M:0)|0;if((p|0)>(T|0)?(s|0)<(T+M|0)&(A|0)>(O|0)&(B|0)<(O+M|0):0){W=V;X=M;Y=T;Z=O;_=18;break}K=U;L=M<<1}if((_|0)==18){_=0;L=F+1|0;k[e+(L<<2)>>2]=W;K=k[W+4>>2]|0;J=(K|0)>0?K:4;k[f+(L<<2)>>2]=J;k[g+(L<<2)>>2]=Y;k[h+(L<<2)>>2]=Z;C=J;D=W;E=X;F=L;continue}L=F+-1|0;if(!F){j=x;break b}C=k[f+(L<<2)>>2]|0;D=k[e+(L<<2)>>2]|0;E=N<<1;F=L}F=k[Q+8+(P<<2)>>2]|0;E=i-(k[F>>2]|0)|0;D=(E|0)<0?0-E|0:E;E=b-(k[F+4>>2]|0)|0;C=(E|0)<0?0-E|0:E;E=(D|0)>(C|0)?D:C;C=(E|0)<(m|0);o=P;n=Q;m=C?E:m;l=R;q=S;x=C?F:x}r=d;return j|0}else{y=a;z=c}while(0);c=z+8|0;z=1073741824;a=0;S=0;while(1){R=k[c+(a<<2)>>2]|0;Q=i-(k[R>>2]|0)|0;P=(Q|0)<0?0-Q|0:Q;Q=b-(k[R+4>>2]|0)|0;N=(Q|0)<0?0-Q|0:Q;Q=(P|0)>(N|0)?P:N;N=(Q|0)<(z|0);P=N?R:S;a=a+1|0;if((a|0)==(y|0)){j=P;break}else{z=N?Q:z;S=P}}r=d;return j|0}function Qpa(a){a=a|0;Sqa(a);return}function Rpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149562,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,32,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Spa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149553,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,33,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function Tpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149550,2);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,34,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Upa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149539,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,35,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Vpa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149534,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Wpa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,149456,68);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,37,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Xpa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;k[a>>2]=c;k[a+4>>2]=b;k[a+8>>2]=0;d=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[a+12>>2]=d;e=Rqa(b>>>0>357913941?-1:b*12|0)|0;k[a+16>>2]=e;if(!c)return;WEa(d|0,-1,c<<2|0)|0;return}function Ypa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=(k[a+12>>2]|0)+(((((b|0)<0?0-b|0:b)|0)%(k[a>>2]|0)|0)<<2)|0;l=k[j>>2]|0;a:do if((l|0)>-1){m=k[a+16>>2]|0;n=l;while(1){if((k[m+(n*12|0)>>2]|0)==(b|0)?(k[m+(n*12|0)+4>>2]|0)==(c|0):0){o=n;break}n=k[m+(n*12|0)+8>>2]|0;if((n|0)<=-1)break a}r=d;return o|0}while(0);l=a+4|0;n=a+8|0;m=k[n>>2]|0;if((k[l>>2]|0)>(m|0)){p=k[a+16>>2]|0;k[p+(m*12|0)>>2]=b;k[p+(m*12|0)+4>>2]=c;k[p+(m*12|0)+8>>2]=k[j>>2];k[j>>2]=m;m=k[n>>2]|0;k[n>>2]=m+1;o=m;r=d;return o|0}o=f+56|0;d=f+4|0;k[f>>2]=27524;k[o>>2]=27544;B=0;wa(508,f+56|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;q=Q;s=m;vva(o);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[o>>2]=27488;B=0;va(448,d|0);m=B;B=0;do if(m&1){j=Rb()|0;t=Q;u=j}else{k[d>>2]=27560;j=f+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;c=Q;Yua(e);Yua(j);Ava(d);t=c;u=p;break}Yua(e);B=0;p=Ia(40,f|0,149606,37)|0;c=B;B=0;if((((!(c&1)?(B=0,c=Xa(253,p|0,k[n>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,c|0,149644,8)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(253,p|0,k[l>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,g|0,149653,63);p=B;B=0;do if(!(p&1)){B=0;eb(502,h|0,149717,3);b=B;B=0;if(b&1){b=Rb()|0;a=Q;Yua(g);v=a;w=b;break}B=0;wa(510,i|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;x=Q;y=b;z=1}else{B=0;ua(163,c|0,g|0,h|0,50,i|0);b=B;B=0;if(b&1)A=1;else{B=0;eb(503,c|0,1240,229);B=0;A=0}b=Rb()|0;a=Q;Yua(i);x=a;y=b;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[o>>2]=27488;k[d>>2]=27560;Yua(j);Ava(d);vva(o);Qb(D|0)}}else{b=Rb()|0;v=Q;w=b}while(0);zb(c|0);C=v;D=w;k[f>>2]=27468;k[o>>2]=27488;k[d>>2]=27560;Yua(j);Ava(d);vva(o);Qb(D|0)}p=Rb()|0;C=Q;D=p;k[f>>2]=27468;k[o>>2]=27488;k[d>>2]=27560;Yua(j);Ava(d);vva(o);Qb(D|0)}while(0);q=t;s=u;vva(o);Qb(s|0);return 0}function Zpa(a,b){a=a|0;b=b|0;return k[(k[a+16>>2]|0)+(b*12|0)>>2]|0}function _pa(a,b){a=a|0;b=b|0;return k[(k[a+16>>2]|0)+(b*12|0)+4>>2]|0}function $pa(a){a=a|0;return k[a+8>>2]|0}function aqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)>(c|0)){d=Ypa(a,c,b)|0;return d|0}else{d=Ypa(a,b,c)|0;return d|0}return 0}function bqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;if((b|0)>(c|0)){d=k[(k[a+12>>2]|0)+(((((c|0)<0?0-c|0:c)|0)%(k[a>>2]|0)|0)<<2)>>2]|0;if((d|0)<=-1){e=-1;return e|0}f=k[a+16>>2]|0;g=d;while(1){if((k[f+(g*12|0)>>2]|0)==(c|0)?(k[f+(g*12|0)+4>>2]|0)==(b|0):0){e=g;h=12;break}g=k[f+(g*12|0)+8>>2]|0;if((g|0)<=-1){e=-1;h=12;break}}if((h|0)==12)return e|0}else{g=k[(k[a+12>>2]|0)+(((((b|0)<0?0-b|0:b)|0)%(k[a>>2]|0)|0)<<2)>>2]|0;if((g|0)<=-1){e=-1;return e|0}f=k[a+16>>2]|0;a=g;while(1){if((k[f+(a*12|0)>>2]|0)==(b|0)?(k[f+(a*12|0)+4>>2]|0)==(c|0):0){e=a;h=12;break}a=k[f+(a*12|0)+8>>2]|0;if((a|0)<=-1){e=-1;h=12;break}}if((h|0)==12)return e|0}return 0}function cqa(a){a=a|0;k[a>>2]=0;p[a+8>>3]=0.0;k[a+16>>2]=0;return}function dqa(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=b;p[a+8>>3]=-1.0;k[a+16>>2]=c;return}function eqa(a){a=a|0;return +p[a+8>>3]<0.0|0}function fqa(a){a=a|0;return +p[a+8>>3]>=0.0|0}function gqa(a){a=a|0;var b=0,c=0;if(!(+p[a+8>>3]<0.0)){b=0;return b|0}c=k[a+16>>2]|0;if(!c){b=0;return b|0}b=ypa(c)|0;return b|0}function hqa(a){a=a|0;k[(k[a>>2]|0)+64>>2]=a;j[(k[a>>2]|0)+60>>1]=8;return}function iqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Qqa(4)|0;f=k[b>>2]|0;b=Rc[k[(k[f>>2]|0)+48>>2]&63](f,k[c>>2]|0,d)|0;k[e>>2]=b;k[a>>2]=e;return}function jqa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(!e){kqa(a,b,0,d);return}b=k[d+52>>2]|0;d=Rqa(b)|0;if((b|0)>0){e=0;do{i[d+e>>0]=(k[c+(e<<2)>>2]|0)!=0&1;e=e+1|0}while((e|0)!=(b|0))}k[a>>2]=d;return}function kqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;c=r;r=r+368|0;e=c+344|0;f=c+208|0;g=c+196|0;h=c+184|0;j=c+36|0;l=c+48|0;m=c+24|0;n=c+12|0;o=c;nqa(d);p=k[d+56>>2]|0;q=p*3|0;s=Rqa(q)|0;if(p)WEa(s|0,0,q|0)|0;q=d+40|0;if((k[q>>2]&-2|0)!=300){t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);Yua(y);Ava(u);z=D;A=C;break}Yua(e);B=0;C=Ia(40,f|0,149721,19)|0;D=B;B=0;a:do if(!(D&1)?(B=0,Xa(239,C|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,149741,92);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,149834,38);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(g);I=G;J=H;break}B=0;wa(510,j|0,u|0);H=B;B=0;if(H&1){H=Rb()|0;K=H;L=Q;M=1}else{B=0;ua(163,E|0,g|0,h|0,77,j|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}H=Rb()|0;G=Q;Yua(j);K=H;L=G;M=N}Yua(h);Yua(g);if(M){I=K;J=L}else{O=K;P=L;break a}}else{G=Rb()|0;I=G;J=Q}while(0);zb(E|0);O=I;P=J}else R=23;while(0);if((R|0)==23){C=Rb()|0;O=C;P=Q}k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);S=P;T=O;Qb(T|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}if((p|0)>0){x=0;do{if(i[b+x>>0]|0){t=x*3|0;i[s+t>>0]=1;i[s+(t+1)>>0]=1;i[s+(t+2)>>0]=1}x=x+1|0}while((x|0)<(p|0))}doa(d);if((k[q>>2]|0)!=300){k[a>>2]=s;r=c;return}q=k[d+60>>2]|0;if((q|0)<=0){k[a>>2]=s;r=c;return}p=k[d+76>>2]|0;x=d+72|0;d=0;b:while(1){t=d<<2;A=(k[p+((t|3)<<2)>>2]|0)+-1|0;c:do if(((A|0)!=-2?(i[b+((k[p+((t|2)<<2)>>2]|0)+-1)>>0]|0)!=0:0)?(i[b+A>>0]|0)==0:0){z=k[p+(t<<2)>>2]|0;w=A*3|0;O=k[x>>2]|0;P=w+1|0;u=w+2|0;switch(((k[O+(u<<2)>>2]|0)==(z|0)?2:(k[O+(P<<2)>>2]|0)==(z|0)?1:(k[O+(w<<2)>>2]|0)==(z|0)?0:-9999)|0){case 0:{i[s+w>>0]=1;i[s+u>>0]=1;break c;break}case 1:{i[s+P>>0]=1;i[s+w>>0]=1;break c;break}case 2:{i[s+u>>0]=1;i[s+P>>0]=1;break c;break}default:break b}}while(0);d=d+1|0;if((d|0)>=(q|0)){R=64;break}}if((R|0)==64){k[a>>2]=s;r=c;return}c=l+56|0;s=l+4|0;k[l>>2]=27524;k[c>>2]=27544;B=0;wa(508,l+56|0,s|0);a=B;B=0;if(a&1){a=Rb()|0;U=Q;V=a;vva(c);Qb(V|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[c>>2]=27488;B=0;va(448,s|0);a=B;B=0;do if(a&1){q=Rb()|0;W=Q;X=q}else{k[s>>2]=27560;q=l+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);d=B;B=0;if(d&1){d=Rb()|0;x=Q;Yua(e);Yua(q);Ava(s);W=x;X=d;break}Yua(e);B=0;d=Ia(40,l|0,149873,25)|0;x=B;B=0;d:do if(!(x&1)?(B=0,Xa(239,d|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,m|0,149741,92);b=B;B=0;do if(!(b&1)){B=0;eb(502,n|0,149834,38);A=B;B=0;if(A&1){A=Rb()|0;t=Q;Yua(m);Y=A;Z=t;break}B=0;wa(510,o|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;_=1;$=Q;aa=t}else{B=0;ua(163,p|0,m|0,n|0,125,o|0);t=B;B=0;if(t&1)ba=1;else{B=0;eb(503,p|0,1240,229);B=0;ba=0}t=Rb()|0;A=Q;Yua(o);_=ba;$=A;aa=t}Yua(n);Yua(m);if(_){Y=aa;Z=$}else{ca=$;da=aa;break d}}else{t=Rb()|0;Y=t;Z=Q}while(0);zb(p|0);ca=Z;da=Y}else R=55;while(0);if((R|0)==55){d=Rb()|0;ca=Q;da=d}k[l>>2]=27468;k[c>>2]=27488;k[s>>2]=27560;Yua(q);Ava(s);vva(c);S=ca;T=da;Qb(T|0)}while(0);U=W;V=X;vva(c);Qb(V|0)}function lqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;nqa(b);switch(k[b+48>>2]|0){case 621:{j=3;break}case 623:{j=6;break}case 625:{j=9;break}default:{l=e+56|0;m=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);Yua(q);Ava(m);s=v;t=u;break}Yua(d);B=0;u=Ia(40,e|0,150248,32)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,f|0,149899,92);v=B;B=0;do if(!(v&1)){B=0;eb(502,g|0,149992,17);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=x;z=w;break}B=0;wa(510,h|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,u|0,f|0,g|0,24,h|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,u|0,1240,229);B=0;E=0}w=Rb()|0;x=Q;Yua(h);A=x;C=w;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(u|0);F=y;G=z;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}v=Rb()|0;F=Q;G=v;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}}p=k[b+64>>2]|0;l=Rqa(p)|0;if(p)WEa(l|0,0,p|0)|0;p=k[b+56>>2]|0;if((p|0)<=0){k[a>>2]=l;r=c;return}t=k[b+32>>2]|0;s=b+84|0;b=0;do{if(i[t+b>>0]|0){o=ma(b,j)|0;G=k[s>>2]|0;m=0;do{i[l+(k[G+(m+o<<2)>>2]|0)>>0]=1;m=m+1|0}while((m|0)<(j|0))}b=b+1|0}while((b|0)<(p|0));k[a>>2]=l;r=c;return}function mqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;doa(b);switch(k[b+40>>2]|0){case 301:case 300:{j=3;break}case 302:{j=5;break}default:{l=e+56|0;m=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);Yua(q);Ava(m);s=v;t=u;break}Yua(d);B=0;u=Ia(40,e|0,150248,32)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,f|0,150010,92);v=B;B=0;do if(!(v&1)){B=0;eb(502,g|0,150103,17);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=x;z=w;break}B=0;wa(510,h|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,u|0,f|0,g|0,30,h|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,u|0,1240,229);B=0;E=0}w=Rb()|0;x=Q;Yua(h);A=x;C=w;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(u|0);F=y;G=z;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}v=Rb()|0;F=Q;G=v;k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}}p=k[b+60>>2]|0;l=Rqa(p)|0;if(p)WEa(l|0,0,p|0)|0;p=k[b+56>>2]|0;if((p|0)<=0){k[a>>2]=l;r=c;return}t=k[b+32>>2]|0;s=b+88|0;b=0;do{if(i[t+b>>0]|0){o=ma(b,j)|0;G=k[s>>2]|0;m=0;do{i[l+(k[G+(m+o<<2)>>2]|0)>>0]=1;m=m+1|0}while((m|0)<(j|0))}b=b+1|0}while((b|0)<(p|0));k[a>>2]=l;r=c;return}function nqa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;i=b+24|0;j=b+12|0;l=b;m=a+80|0;if(k[m>>2]|0){r=b;return}n=k[a+52>>2]|0;if((n|0)<3){o=d+56|0;p=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=d+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;x=Ia(40,d|0,150121,27)|0;y=B;B=0;a:do if(!(y&1)?(B=0,Xa(239,x|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,e|0,150149,86);A=B;B=0;do if(!(A&1)){B=0;eb(502,f|0,150236,11);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}B=0;wa(510,g|0,p|0);C=B;B=0;if(C&1){C=Rb()|0;G=C;H=Q;I=1}else{B=0;ua(163,z|0,e|0,f|0,15,g|0);C=B;B=0;if(C&1)J=1;else{B=0;eb(503,z|0,1240,229);B=0;J=0}C=Rb()|0;D=Q;Yua(g);G=C;H=D;I=J}Yua(f);Yua(e);if(I){E=H;F=G}else{K=G;L=H;break a}}else{D=Rb()|0;E=Q;F=D}while(0);zb(z|0);K=F;L=E}else M=18;while(0);if((M|0)==18){x=Rb()|0;K=x;L=Q}k[d>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);N=K;O=L;Qb(N|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}switch(k[a+48>>2]|0){case 621:{t=Rqa(24)|0;o=Rqa(12)|0;k[t>>2]=1;k[t+4>>2]=2;k[o>>2]=1;k[t+8>>2]=2;k[t+12>>2]=0;k[o+4>>2]=1;k[t+16>>2]=0;k[t+20>>2]=1;k[o+8>>2]=1;P=t;R=o;S=3;T=3;break}case 623:{o=Rqa(48)|0;t=Rqa(24)|0;k[o>>2]=1;k[o+4>>2]=2;k[t>>2]=1;k[o+8>>2]=0;k[o+12>>2]=2;k[t+4>>2]=1;k[o+16>>2]=0;k[o+20>>2]=1;k[t+8>>2]=1;k[o+24>>2]=1;k[o+28>>2]=3;k[t+12>>2]=1;k[o+32>>2]=2;k[o+36>>2]=3;k[t+16>>2]=1;k[o+40>>2]=0;k[o+44>>2]=3;k[t+20>>2]=1;P=o;R=t;S=6;T=4;break}case 625:{t=Rqa(72)|0;o=Rqa(36)|0;k[t>>2]=0;k[t+4>>2]=3;k[o>>2]=2;k[t+8>>2]=1;k[t+12>>2]=4;k[o+4>>2]=2;k[t+16>>2]=2;k[t+20>>2]=5;k[o+8>>2]=2;k[t+24>>2]=1;k[t+28>>2]=2;k[o+12>>2]=1;k[t+32>>2]=2;k[t+36>>2]=0;k[o+16>>2]=1;k[t+40>>2]=0;k[t+44>>2]=1;k[o+20>>2]=1;k[t+48>>2]=4;k[t+52>>2]=5;k[o+24>>2]=1;k[t+56>>2]=5;k[t+60>>2]=3;k[o+28>>2]=1;k[t+64>>2]=3;k[t+68>>2]=4;k[o+32>>2]=1;P=t;R=o;S=9;T=6;break}default:{o=h+56|0;t=h+4|0;k[h>>2]=27524;k[o>>2]=27544;B=0;wa(508,h+56|0,t|0);w=B;B=0;if(w&1){w=Rb()|0;U=Q;V=w;vva(o);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[o>>2]=27488;B=0;va(448,t|0);w=B;B=0;do if(w&1){v=Rb()|0;W=Q;X=v}else{k[t>>2]=27560;v=h+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;L=Q;Yua(c);Yua(v);Ava(t);W=L;X=s;break}Yua(c);B=0;s=Ia(40,h|0,150248,32)|0;L=B;B=0;b:do if(!(L&1)?(B=0,Xa(239,s|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,i|0,150149,86);p=B;B=0;do if(!(p&1)){B=0;eb(502,j|0,150236,11);d=B;B=0;if(d&1){d=Rb()|0;E=Q;Yua(i);Y=d;Z=E;break}B=0;wa(510,l|0,t|0);E=B;B=0;if(E&1){E=Rb()|0;_=1;$=E;aa=Q}else{B=0;ua(163,K|0,i|0,j|0,64,l|0);E=B;B=0;if(E&1)ba=1;else{B=0;eb(503,K|0,1240,229);B=0;ba=0}E=Rb()|0;d=Q;Yua(l);_=ba;$=E;aa=d}Yua(j);Yua(i);if(_){Y=$;Z=aa}else{ca=$;da=aa;break b}}else{d=Rb()|0;Y=d;Z=Q}while(0);zb(K|0);ca=Y;da=Z}else M=45;while(0);if((M|0)==45){s=Rb()|0;ca=s;da=Q}k[h>>2]=27468;k[o>>2]=27488;k[t>>2]=27560;Yua(v);Ava(t);vva(o);N=ca;O=da;Qb(N|0)}while(0);U=W;V=X;vva(o);Qb(V|0)}}V=k[a+56>>2]|0;o=ma(V,S)|0;X=o*3|0;W=Rqa(X>>>0>1073741823?-1:X<<2)|0;X=o>>>0>1073741823?-1:o<<2;o=Rqa(X)|0;U=Rqa(n>>>0>1073741823?-1:n<<2)|0;N=Rqa(X)|0;WEa(U|0,-1,n<<2|0)|0;if((V|0)>0){n=k[a+72>>2]|0;X=0;da=0;while(1){O=ma(X,T)|0;ca=ma(X,S)|0;t=0;h=da;while(1){Z=t<<1;Y=k[n+((k[P+(Z<<2)>>2]|0)+O<<2)>>2]|0;aa=Y+-1|0;$=k[n+((k[P+((Z|1)<<2)>>2]|0)+O<<2)>>2]|0;Z=$+-1|0;_=($|0)<(Y|0);Y=_?Z:aa;$=U+(Y<<2)|0;i=k[$>>2]|0;j=(_?aa:Z)+1|0;c:do if((i|0)==-1)M=60;else{Z=i;while(1){if((k[W+((Z*3|0)+1<<2)>>2]|0)==(j|0)){ea=Z;break}Z=k[N+(Z<<2)>>2]|0;if((Z|0)==-1){M=60;break c}}k[o+(t+ca<<2)>>2]=ea;fa=h}while(0);if((M|0)==60){M=0;K=h*3|0;k[W+(K<<2)>>2]=Y+1;k[W+(K+1<<2)>>2]=j;k[W+(K+2<<2)>>2]=k[R+(t<<2)>>2];k[o+(t+ca<<2)>>2]=h;k[N+(h<<2)>>2]=i;k[$>>2]=h;fa=h+1|0}t=t+1|0;if((t|0)>=(S|0)){ga=fa;break}else h=fa}X=X+1|0;if((X|0)>=(V|0)){ha=ga;break}else da=ga}}else ha=0;Tqa(U);Tqa(N);Tqa(R);R=ha*3|0;N=Rqa(R>>>0>1073741823?-1:R<<2)|0;if((ha|0)>0)TEa(N|0,W|0,((R|0)>1?R:1)<<2|0)|0;Tqa(W);Tqa(P);k[m>>2]=N;k[a+84>>2]=o;k[a+64>>2]=ha;r=b;return}function oqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;j=c+48|0;l=c+24|0;m=c+12|0;n=c;switch(k[b+48>>2]|0){case 621:{o=3;break}case 623:{o=6;break}case 625:{o=9;break}default:{p=e+56|0;q=e+4|0;k[e>>2]=27524;k[p>>2]=27544;B=0;wa(508,e+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(p);Qb(u|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[p>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=e+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,q|0,d|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(d);Yua(v);Ava(q);w=z;x=y;break}Yua(d);B=0;y=Ia(40,e|0,150248,32)|0;z=B;B=0;a:do if(!(z&1)?(B=0,Xa(239,y|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,f|0,150149,86);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,150281,19);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);F=D;G=E;break}B=0;wa(510,h|0,q|0);E=B;B=0;if(E&1){E=Rb()|0;H=Q;I=E;J=1}else{B=0;ua(163,A|0,f|0,g|0,159,h|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}E=Rb()|0;D=Q;Yua(h);H=D;I=E;J=K}Yua(g);Yua(f);if(J){F=I;G=H}else{L=I;M=H;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(A|0);L=F;M=G}else N=19;while(0);if((N|0)==19){y=Rb()|0;L=y;M=Q}k[e>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(p);O=M;P=L;Qb(P|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}}u=b+80|0;if(!(k[u>>2]|0))nqa(b);p=k[b+64>>2]|0;x=Rqa(p)|0;w=(p|0)==0;if(!w)WEa(x|0,0,p|0)|0;switch(k[b+44>>2]|0){case 2:{t=Rqa(p>>>0>1073741823?-1:p<<2)|0;if(!w)WEa(t|0,0,p<<2|0)|0;w=k[b+56>>2]|0;if((w|0)>0){L=k[b+84>>2]|0;M=0;do{q=ma(M,o)|0;e=0;do{G=t+(k[L+(e+q<<2)>>2]<<2)|0;k[G>>2]=(k[G>>2]|0)+1;e=e+1|0}while((e|0)<(o|0));M=M+1|0}while((M|0)<(w|0))}if((p|0)>0){w=0;do{if((k[t+(w<<2)>>2]|0)==1)i[x+w>>0]=1;w=w+1|0}while((w|0)<(p|0))}Tqa(t);k[a>>2]=x;r=c;return}case 3:{t=b+76|0;if(!(k[t>>2]|0))doa(b);p=k[b+60>>2]|0;if((p|0)<=0){k[a>>2]=x;r=c;return}w=k[b+68>>2]|0;M=k[t>>2]|0;t=b+84|0;b=0;do{L=ma(w,b)|0;if((k[M+(L+1<<2)>>2]|0)==-1?(e=k[M+(L+3<<2)>>2]|0,q=ma((k[M+(L<<2)>>2]|0)+-1|0,o)|0,v=k[t>>2]|0,G=k[u>>2]|0,(e|0)>0):0){F=ma(w,b)|0;H=0;do{I=k[v+(H+q<<2)>>2]|0;J=I*3|0;f=k[G+(J<<2)>>2]|0;g=k[G+(J+1<<2)>>2]|0;J=0;do{if((k[M+(J+4+F<<2)>>2]|0)==(f|0)){R=0;N=55;break}J=J+1|0}while((J|0)<(e|0));b:do if((N|0)==55){while(1){N=0;if((k[M+(R+4+L<<2)>>2]|0)==(g|0))break;R=R+1|0;if((R|0)>=(e|0))break b;else N=55}i[x+I>>0]=1}while(0);H=H+1|0}while((H|0)<(o|0))}b=b+1|0}while((b|0)<(p|0));k[a>>2]=x;r=c;return}default:{c=j+56|0;x=j+4|0;k[j>>2]=27524;k[c>>2]=27544;B=0;wa(508,j+56|0,x|0);a=B;B=0;if(a&1){a=Rb()|0;S=Q;T=a;vva(c);Qb(T|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[c>>2]=27488;B=0;va(448,x|0);a=B;B=0;do if(a&1){p=Rb()|0;U=Q;V=p}else{k[x>>2]=27560;p=j+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,x|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;o=Q;Yua(d);Yua(p);Ava(x);U=o;V=b;break}Yua(d);B=0;b=Ia(40,j|0,150301,23)|0;o=B;B=0;c:do if(!(o&1)?(B=0,Xa(239,b|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,l|0,150149,86);M=B;B=0;do if(!(M&1)){B=0;eb(502,m|0,150281,19);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(l);W=w;X=u;break}B=0;wa(510,n|0,x|0);u=B;B=0;if(u&1){u=Rb()|0;Y=1;Z=Q;_=u}else{B=0;ua(163,R|0,l|0,m|0,229,n|0);u=B;B=0;if(u&1)$=1;else{B=0;eb(503,R|0,1240,229);B=0;$=0}u=Rb()|0;w=Q;Yua(n);Y=$;Z=w;_=u}Yua(m);Yua(l);if(Y){W=_;X=Z}else{aa=Z;ba=_;break c}}else{u=Rb()|0;W=u;X=Q}while(0);zb(R|0);aa=X;ba=W}else N=74;while(0);if((N|0)==74){b=Rb()|0;aa=Q;ba=b}k[j>>2]=27468;k[c>>2]=27488;k[x>>2]=27560;Yua(p);Ava(x);vva(c);O=aa;P=ba;Qb(P|0)}while(0);S=U;T=V;vva(c);Qb(T|0)}}}function pqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=b+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;h=0;do{i=qh(k[f>>2]|0,h)|0;g=+Zc[k[(k[i>>2]|0)+456>>2]&255](i)+g;p[d>>3]=g;h=h+1|0}while((h|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;g=+p[e>>3];p[d>>3]=g;voa(b,g,659);if(!a){r=c;return}p[a>>3]=+p[d>>3];r=c;return}function qqa(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+16|0;e=d+8|0;f=d+4|0;g=d;k[g>>2]=0;h=b+44|0;cO(k[h>>2]|0,e,478);cO(k[h>>2]|0,f,477);h=n_(k[f>>2]|0)|0;loa(g,0,0,0,b);f=b+20|0;if((th(k[f>>2]|0)|0)>0){i=0;do{j=qh(k[f>>2]|0,i)|0;l=ed[k[(k[h>>2]|0)+40>>2]&511](h,j)|0;if(l){JN(l,k[g>>2]|0);HN(l);Sqa(l)}i=i+1|0}while((i|0)<(th(k[f>>2]|0)|0))}f=b+36|0;if((bL(k[f>>2]|0)|0)>0){b=0;do{i=qh(k[f>>2]|0,b)|0;if(ed[k[(k[i>>2]|0)+60>>2]&511](i,k[e>>2]|0)|0)Fc[k[(k[i>>2]|0)+36>>2]&1023](i,k[g>>2]|0);if(ed[k[(k[i>>2]|0)+60>>2]&511](i,k[e>>2]|0)|0)Xc[k[(k[i>>2]|0)+68>>2]&63](i,k[g>>2]|0,c);b=b+1|0}while((b|0)<(bL(k[f>>2]|0)|0))}f=k[g>>2]|0;if(k[f>>2]|0){b=k[k[f+4>>2]>>2]|0;Ec[k[(k[b>>2]|0)+12>>2]&1023](b)}if(!h){m=k[g>>2]|0;k[a>>2]=m;r=d;return}Ec[k[(k[h>>2]|0)+4>>2]&1023](h);m=k[g>>2]|0;k[a>>2]=m;r=d;return}function rqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+16|0;f=e;cO(c,f,478);if(!(k[d>>2]|0))g=0;else{c=k[k[d+4>>2]>>2]|0;g=Hc[k[(k[c>>2]|0)+52>>2]&511](c)|0}if((th(a)|0)>0){c=0;do{d=qh(a,c)|0;if(ed[k[(k[d>>2]|0)+40>>2]&511](d,k[f>>2]|0)|0?(Hc[k[(k[d>>2]|0)+20>>2]&511](d)|0)==614:0)YK(d,b,g);c=c+1|0}while((c|0)<(th(a)|0))}if(!g){r=e;return}Tqa(g);r=e;return}function sqa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=r;r=r+16|0;g=f;cO(d,g,478);if(!(k[b>>2]|0))h=0;else{d=k[k[b+4>>2]>>2]|0;h=Hc[k[(k[d>>2]|0)+52>>2]&511](d)|0}if((bn(c,k[g>>2]|0)|0)!=0?(th(c)|0)>0:0){d=0;do{b=qh(c,d)|0;if(Tn(b,k[g>>2]|0)|0)go(b,a,h,e);d=d+1|0}while((d|0)<(th(c)|0))}if(h)Tqa(h);if(!(k[a>>2]|0)){r=f;return}h=k[k[a+4>>2]>>2]|0;Ec[k[(k[h>>2]|0)+12>>2]&1023](h);r=f;return}function tqa(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;return}function uqa(a){a=a|0;var b=0;b=r;r=r+16|0;mta(a,b)|0;r=b;return}function vqa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=k[d>>2]|0;if((f|0)!=(k[d+4>>2]|0)){wqa(150347,150340,915,20);g=20;return g|0}if((f|0)==(k[e>>2]|0)){Kqa(101,a,b,c,f,k[d+12>>2]|0,k[d+8>>2]|0,k[e+8>>2]|0,k[e+4>>2]|0);g=0;return g|0}else{wqa(150325,150340,919,19);g=19;return g|0}return 0}function wqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=k[10503]|0;if(!e){xqa(150369,b,c,a);Usa(k[10620]|0)|0;f=k[10618]|0;jta(150375,35,1,f)|0;Usa(f)|0;mc()}else{rd[e&511](a,b,c,d);return}}function xqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=r;r=r+16|0;f=e;g=k[10504]|0;if(!g){h=k[10618]|0;k[10504]=h;i=h}else i=g;g=k[10505]|0;if(!g){k[f>>2]=b;k[f+4>>2]=c;k[f+8>>2]=a;k[f+12>>2]=d;Zsa(i,150411,f)|0;r=e;return}else{rd[g&511](a,b,c,d);r=e;return}}function yqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;d=k[a>>2]|0;if((d|0)!=(k[a+4>>2]|0)){wqa(150431,150471,64,20);e=20;return e|0}if((k[b>>2]|0)!=(d|0)){wqa(150476,150471,68,19);e=19;return e|0}k[c>>2]=1;Eqa(b);f=d+-1|0;if(!f){e=0;return e|0}g=a+8|0;h=a+12|0;i=0;do{j=i;i=i+1|0;l=i>>>0<d>>>0;if(l){m=k[h>>2]|0;n=k[g>>2]|0;o=m+((ma(n,j)|0)+j<<3)|0;q=i;r=j;s=+$(+(+p[o>>3]));while(1){o=m+((ma(n,q)|0)+j<<3)|0;t=+$(+(+p[o>>3]));o=t>s;u=o?q:r;q=q+1|0;if((q|0)==(d|0)){v=u;break}else{r=u;s=o?t:s}}if((v|0)!=(j|0)){Bqa(a,j,v)|0;Gqa(b,j,v)|0;k[c>>2]=0-(k[c>>2]|0)}}r=k[g>>2]|0;q=ma(r,j)|0;n=k[h>>2]|0;s=+p[n+(q+j<<3)>>3];if(s!=0.0&l){m=i;do{o=ma(r,m)|0;u=n+(o+j<<3)|0;t=+p[u>>3]/s;p[u>>3]=t;u=i;do{w=n+(o+u<<3)|0;p[w>>3]=+p[w>>3]-t*+p[n+(q+u<<3)>>3];u=u+1|0}while((u|0)!=(d|0));m=m+1|0}while((m|0)!=(d|0))}}while((i|0)!=(f|0));e=0;return e|0}function zqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=k[a>>2]|0;if((e|0)!=(k[a+4>>2]|0)){wqa(150518,150471,131,20);f=20;return f|0}if((e|0)!=(k[b>>2]|0)){wqa(150476,150471,135,19);f=19;return f|0}if((e|0)!=(k[c>>2]|0)){wqa(150543,150471,139,19);f=19;return f|0}if((e|0)!=(k[d>>2]|0)){wqa(150573,150471,143,19);f=19;return f|0}a:do if(e){g=k[a+8>>2]|0;h=k[a+12>>2]|0;i=0;while(1){j=h+((ma(i,g)|0)+i<<3)|0;i=i+1|0;if(!(+p[j>>3]!=0.0))break;if(i>>>0>=e>>>0)break a}wqa(150610,150471,147,1);f=1;return f|0}while(0);Iqa(d,c)|0;f=Aqa(a,b,d)|0;return f|0}function Aqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=k[a>>2]|0;if((d|0)!=(k[a+4>>2]|0)){wqa(150518,150471,171,20);e=20;return e|0}if((d|0)!=(k[b>>2]|0)){wqa(150476,150471,175,19);e=19;return e|0}if((d|0)!=(k[c>>2]|0)){wqa(150629,150471,179,19);e=19;return e|0}a:do if(d){f=k[a+8>>2]|0;g=k[a+12>>2]|0;h=0;while(1){i=g+((ma(h,f)|0)+h<<3)|0;h=h+1|0;if(!(+p[i>>3]!=0.0))break;if(h>>>0>=d>>>0)break a}wqa(150610,150471,183,1);e=1;return e|0}while(0);Hqa(b,c)|0;vqa(122,111,132,a,c)|0;vqa(121,111,131,a,c)|0;e=0;return e|0}function Bqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0.0;d=k[a>>2]|0;e=k[a+4>>2]|0;if(d>>>0<=b>>>0){wqa(150670,150702,29,4);f=4;return f|0}if(d>>>0<=c>>>0){wqa(150718,150702,34,4);f=4;return f|0}if((b|0)==(c|0)){f=0;return f|0}d=k[a+12>>2]|0;g=k[a+8>>2]|0;a=d+((ma(g,b)|0)<<3)|0;b=d+((ma(g,c)|0)<<3)|0;if(!e){f=0;return f|0}else h=0;do{c=a+(h<<3)|0;i=+p[c>>3];g=b+(h<<3)|0;p[c>>3]=+p[g>>3];p[g>>3]=i;h=h+1|0}while((h|0)!=(e|0));f=0;return f|0}function Cqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!c){wqa(150751,151211,29,4);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;return}if(!d){wqa(150796,151211,34,4);k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;return}else{k[a>>2]=c;k[a+4>>2]=d;k[a+8>>2]=d;k[a+12>>2]=b;k[a+16>>2]=0;k[a+20>>2]=0;return}}function Dqa(a){a=a|0;var b=0,c=0,d=0;if(!a){wqa(150841,150887,33,1);b=0;return b|0}c=lua(8)|0;if(!c){wqa(150894,150887,41,8);b=0;return b|0}d=lua(a<<2)|0;k[c+4>>2]=d;if(!d){mua(c);wqa(150942,150887,51,8);b=0;return b|0}else{k[c>>2]=a;b=c;return b|0}return 0}function Eqa(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;if(!b)return;c=k[a+4>>2]|0;a=0;do{k[c+(a<<2)>>2]=a;a=a+1|0}while((a|0)!=(b|0));return}function Fqa(a){a=a|0;if(!a)return;mua(k[a+4>>2]|0);mua(a);return}function Gqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[a>>2]|0;if(d>>>0<=b>>>0){wqa(150988,151016,43,4);e=4;return e|0}if(d>>>0<=c>>>0){wqa(151030,151016,48,4);e=4;return e|0}if((b|0)==(c|0)){e=0;return e|0}d=k[a+4>>2]|0;a=d+(b<<2)|0;b=k[a>>2]|0;f=d+(c<<2)|0;k[a>>2]=k[f>>2];k[f>>2]=b;e=0;return e|0}function Hqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0,m=0,n=0;c=k[b>>2]|0;if((c|0)!=(k[a>>2]|0)){wqa(151059,151106,144,19);d=19;return d|0}e=k[a+4>>2]|0;a=k[b+8>>2]|0;f=k[b+4>>2]|0;if(!c){d=0;return d|0}else g=0;do{b=g;while(1){h=k[e+(b<<2)>>2]|0;if(h>>>0>g>>>0)b=h;else{i=h;break}}if(i>>>0>=g>>>0?(b=k[e+(i<<2)>>2]|0,(b|0)!=(g|0)):0){h=a+((ma(g,f)|0)<<3)|0;j=+p[h>>3];h=i;l=b;while(1){b=ma(h,f)|0;m=a+((ma(l,f)|0)<<3)|0;p[a+(b<<3)>>3]=+p[m>>3];b=k[e+(l<<2)>>2]|0;if((b|0)==(g|0)){n=m;break}else{m=l;l=b;h=m}}p[n>>3]=j}g=g+1|0}while((g|0)!=(c|0));d=0;return d|0}function Iqa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=k[b>>2]|0;if((c|0)!=(k[a>>2]|0)){wqa(151125,151154,29,19);d=19;return d|0}e=k[b+4>>2]|0;f=k[a+4>>2]|0;if(!c){d=0;return d|0}g=k[b+8>>2]|0;b=k[a+8>>2]|0;a=0;do{h=ma(a,f)|0;i=g+((ma(a,e)|0)<<3)|0;p[b+(h<<3)>>3]=+p[i>>3];a=a+1|0}while((a|0)!=(c|0));d=0;return d|0}function Jqa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(!c){wqa(151170,151211,28,4);d=0;e=0;f=0}else{d=b;e=1;f=c}k[a>>2]=f;k[a+4>>2]=e;k[a+8>>2]=d;k[a+12>>2]=0;k[a+16>>2]=0;return}function Kqa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0.0;j=r;r=r+16|0;k=j+8|0;l=(d|0)==131;m=(c|0)!=113?c:112;n=(i|0)==0?9:(((e|0)<1?1:e)|0)>(g|0)?7:(e|0)<0?5:(d+-131|0)>>>0>1?4:(c+-111|0)>>>0<3?((b+-121|0)>>>0>1?2:(a+-101|0)>>>0>1&1):3;if(n)Lqa(n,151227,159121,j);if(!e){r=j;return}n=(a|0)==101;c=(m|0)==111;d=n&c;o=(b|0)==121;if(!(o&d)?(q=(a|0)==102,a=(m|0)==112,m=q&a,s=(b|0)==122,!(s&m)):0){if(s&d|o&m){m=(i|0)>0;d=ma(1-e|0,i)|0;b=m?0:d;if(l){d=h+(b<<3)|0;p[d>>3]=+p[d>>3]/+p[f>>3]}d=b+i|0;if((e|0)<=1){r=j;return}b=ma(1-e|0,i)|0;if(m){m=1;t=d;while(1){u=h+(t<<3)|0;v=ma(m,g)|0;w=0;x=0;y=+p[u>>3];while(1){z=y-+p[f+(w+v<<3)>>3]*+p[h+(x<<3)>>3];w=w+1|0;if((w|0)==(m|0)){A=z;break}else{x=x+i|0;y=z}}if(l){x=f+((ma(m,g)|0)+m<<3)|0;B=A/+p[x>>3]}else B=A;p[u>>3]=B;m=m+1|0;if((m|0)==(e|0))break;else t=t+i|0}r=j;return}else{t=1;m=d;while(1){d=h+(m<<3)|0;x=ma(t,g)|0;w=0;v=b;B=+p[d>>3];while(1){A=B-+p[f+(w+x<<3)>>3]*+p[h+(v<<3)>>3];w=w+1|0;if((w|0)==(t|0)){C=A;break}else{v=v+i|0;B=A}}if(l){v=f+((ma(t,g)|0)+t<<3)|0;D=C/+p[v>>3]}else D=C;p[d>>3]=D;t=t+1|0;if((t|0)==(e|0))break;else m=m+i|0}r=j;return}}m=n&a;if(!(o&m)?(a=q&c,!(s&a)):0){if(!(s&m|o&a))Lqa(0,151227,151245,k);k=ma(1-e|0,i)|0;a=e+-1|0;o=((i|0)>0?0:k)+(ma(a,i)|0)|0;if(l){k=h+(o<<3)|0;m=f+((ma(a,g)|0)+a<<3)|0;p[k>>3]=+p[k>>3]/+p[m>>3]}m=o-i|0;if((e|0)<=1){r=j;return}if(l){k=o;s=a;c=m;while(1){q=s;s=s+-1|0;n=h+(c<<3)|0;D=+p[n>>3];if((q|0)<(e|0)){t=q;b=k;C=D;while(1){v=f+((ma(t,g)|0)+s<<3)|0;B=C-+p[v>>3]*+p[h+(b<<3)>>3];t=t+1|0;if((t|0)==(e|0)){E=B;break}else{b=b+i|0;C=B}}}else E=D;b=f+((ma(s,g)|0)+s<<3)|0;p[n>>3]=E/+p[b>>3];if((q|0)<=1)break;else{b=c;c=c-i|0;k=b}}r=j;return}else{k=o;o=a;a=m;while(1){m=o;o=o+-1|0;c=h+(a<<3)|0;E=+p[c>>3];if((m|0)<(e|0)){s=m;b=k;C=E;while(1){t=f+((ma(s,g)|0)+o<<3)|0;B=C-+p[t>>3]*+p[h+(b<<3)>>3];s=s+1|0;if((s|0)==(e|0)){F=B;break}else{b=b+i|0;C=B}}}else F=E;p[c>>3]=F;if((m|0)<=1)break;else{b=a;a=a-i|0;k=b}}r=j;return}}k=(i|0)>0;a=ma(1-e|0,i)|0;o=k?0:a;if(l){a=h+(o<<3)|0;p[a>>3]=+p[a>>3]/+p[f>>3]}a=o+i|0;if((e|0)<=1){r=j;return}o=ma(1-e|0,i)|0;if(k){k=1;b=a;while(1){s=h+(b<<3)|0;q=0;n=0;F=+p[s>>3];while(1){t=f+((ma(q,g)|0)+k<<3)|0;C=F-+p[t>>3]*+p[h+(n<<3)>>3];q=q+1|0;if((q|0)==(k|0)){G=C;break}else{n=n+i|0;F=C}}if(l){n=f+((ma(k,g)|0)+k<<3)|0;H=G/+p[n>>3]}else H=G;p[s>>3]=H;k=k+1|0;if((k|0)==(e|0))break;else b=b+i|0}r=j;return}else{b=1;k=a;while(1){a=h+(k<<3)|0;n=0;q=o;H=+p[a>>3];while(1){m=f+((ma(n,g)|0)+b<<3)|0;G=H-+p[m>>3]*+p[h+(q<<3)>>3];n=n+1|0;if((n|0)==(b|0)){I=G;break}else{q=q+i|0;H=G}}if(l){q=f+((ma(b,g)|0)+b<<3)|0;J=I/+p[q>>3]}else J=I;p[a>>3]=J;b=b+1|0;if((b|0)==(e|0))break;else k=k+i|0}r=j;return}}k=ma(1-e|0,i)|0;b=e+-1|0;o=((i|0)>0?0:k)+(ma(b,i)|0)|0;if(l){k=h+(o<<3)|0;q=f+((ma(b,g)|0)+b<<3)|0;p[k>>3]=+p[k>>3]/+p[q>>3]}q=o-i|0;if((e|0)<=1){r=j;return}if(l){l=o;k=b;n=q;while(1){s=k;k=k+-1|0;m=h+(n<<3)|0;J=+p[m>>3];c=ma(k,g)|0;if((s|0)<(e|0)){t=s;d=l;I=J;while(1){H=I-+p[f+(t+c<<3)>>3]*+p[h+(d<<3)>>3];t=t+1|0;if((t|0)==(e|0)){K=H;break}else{d=d+i|0;I=H}}}else K=J;p[m>>3]=K/+p[f+(c+k<<3)>>3];if((s|0)<=1)break;else{d=n;n=n-i|0;l=d}}r=j;return}else{L=o;M=b;N=q}while(1){q=M;M=M+-1|0;b=h+(N<<3)|0;K=+p[b>>3];if((q|0)<(e|0)){o=ma(M,g)|0;l=q;n=L;I=K;while(1){H=I-+p[f+(l+o<<3)>>3]*+p[h+(n<<3)>>3];l=l+1|0;if((l|0)==(e|0)){O=H;break}else{n=n+i|0;I=H}}}else O=K;p[b>>3]=O;if((q|0)<=1)break;else{n=N;N=N-i|0;L=n}}r=j;return}function Lqa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+32|0;f=e;g=e+8|0;k[g>>2]=d;d=k[10618]|0;if(!a){uta(d,c,g)|0;mc()}k[f>>2]=a;k[f+4>>2]=b;Zsa(d,151268,f)|0;uta(d,c,g)|0;mc()}function Mqa(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=k[10618]|0;uta(b,a,d)|0;_sa(10,b)|0;mc()}function Nqa(a){a=a|0;yb(151591,151620,1164,151728)}function Oqa(a){a=a|0;yb(151749,151772,303,151728)}function Pqa(){var a=0,b=0;a=r;r=r+16|0;if(!(_b(42216,6)|0)){b=Tb(k[10553]|0)|0;r=a;return b|0}else Mqa(151880,a);return 0}function Qqa(a){a=a|0;var b=0,c=0,d=0;b=(a|0)==0?1:a;while(1){a=lua(b)|0;if(a){c=a;d=6;break}a=_qa()|0;if(!a){d=5;break}od[a&15]()}if((d|0)==5){b=Ab(4)|0;k[b>>2]=42036;jc(b|0,25200,348)}else if((d|0)==6)return c|0;return 0}function Rqa(a){a=a|0;return Qqa(a)|0}function Sqa(a){a=a|0;mua(a);return}function Tqa(a){a=a|0;Sqa(a);return}function Uqa(a){a=a|0;k[a>>2]=42036;return}function Vqa(a){a=a|0;return}function Wqa(a){a=a|0;Sqa(a);return}function Xqa(a){a=a|0;return 151929}function Yqa(a){a=a|0;var b=0;b=r;r=r+16|0;B=0;fb(a|0);a=B;B=0;if(!(a&1)){B=0;wa(524,151944,b|0);B=0}a=Rb(0)|0;Nb(a|0)|0;B=0;wa(524,151984,b+8|0);B=0;b=Rb(0)|0;B=0;fb(4);a=B;B=0;if(a&1){a=Rb(0)|0;Dd(a)}else Dd(b)}function Zqa(){var a=0,b=0;B=0;a=bb(2)|0;b=B;B=0;if(b&1){b=Rb(0)|0;Dd(b)}if(((a|0)!=0?(b=k[a>>2]|0,(b|0)!=0):0)?(a=b+48|0,(k[a>>2]&-256|0)==1126902528?(k[a+4>>2]|0)==1129074247:0):0)Yqa(k[b+12>>2]|0);b=k[10506]|0;k[10506]=b+0;Yqa(b)}function _qa(){var a=0;a=k[10512]|0;k[10512]=a+0;return a|0}function $qa(a){a=a|0;return}function ara(a){a=a|0;k[a>>2]=42060;Jra(a+4|0);return}function bra(a){a=a|0;ara(a);Sqa(a);return}function cra(a){a=a|0;return k[a+4>>2]|0}function dra(a){a=a|0;return}function era(a){a=a|0;k[a>>2]=42080;return}function fra(a){a=a|0;return}function gra(a){a=a|0;Sqa(a);return}function hra(a){a=a|0;return 152034}function ira(a){a=a|0;return}function jra(a){a=a|0;return}function kra(a){a=a|0;return}function lra(a){a=a|0;Sqa(a);return}function mra(a){a=a|0;Sqa(a);return}function nra(a){a=a|0;Sqa(a);return}function ora(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+64|0;e=d;if((a|0)!=(b|0))if((b|0)!=0?(f=ura(b,25264,25280,0)|0,(f|0)!=0):0){b=e;g=b+56|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(g|0));k[e>>2]=f;k[e+8>>2]=a;k[e+12>>2]=-1;k[e+48>>2]=1;rd[k[(k[f>>2]|0)+28>>2]&511](f,e,k[c>>2]|0,1);if((k[e+24>>2]|0)==1){k[c>>2]=k[e+16>>2];h=1}else h=0;i=h}else i=0;else i=1;r=d;return i|0}function pra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;a=b+16|0;e=k[a>>2]|0;do if(e){if((e|0)!=(c|0)){f=b+36|0;k[f>>2]=(k[f>>2]|0)+1;k[b+24>>2]=2;i[b+54>>0]=1;break}f=b+24|0;if((k[f>>2]|0)==2)k[f>>2]=d}else{k[a>>2]=c;k[b+24>>2]=d;k[b+36>>2]=1}while(0);return}function qra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(k[b+8>>2]|0))pra(0,b,c,d);return}function rra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)==(k[b+8>>2]|0))pra(0,b,c,d);else{e=k[a+8>>2]|0;rd[k[(k[e>>2]|0)+28>>2]&511](e,b,c,d)}return}function sra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=k[a+4>>2]|0;f=e>>8;if(!(e&1))g=f;else g=k[(k[c>>2]|0)+f>>2]|0;f=k[a>>2]|0;rd[k[(k[f>>2]|0)+28>>2]&511](f,b,c+g|0,(e&2|0)!=0?d:2);return}function tra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;a:do if((a|0)!=(k[b+8>>2]|0)){e=k[a+12>>2]|0;f=a+16+(e<<3)|0;sra(a+16|0,b,c,d);if((e|0)>1){e=b+54|0;g=a+24|0;do{sra(g,b,c,d);if(i[e>>0]|0)break a;g=g+8|0}while(g>>>0<f>>>0)}}else pra(0,b,c,d);while(0);return}function ura(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;e=r;r=r+64|0;f=e;g=k[a>>2]|0;h=a+(k[g+-8>>2]|0)|0;l=k[g+-4>>2]|0;k[f>>2]=c;k[f+4>>2]=a;k[f+8>>2]=b;k[f+12>>2]=d;d=f+16|0;b=f+20|0;a=f+24|0;g=f+28|0;m=f+32|0;n=f+40|0;o=(l|0)==(c|0);p=d;q=p+36|0;do{k[p>>2]=0;p=p+4|0}while((p|0)<(q|0));j[d+36>>1]=0;i[d+38>>0]=0;a:do if(o){k[f+48>>2]=1;Uc[k[(k[c>>2]|0)+20>>2]&63](c,f,h,h,1,0);s=(k[a>>2]|0)==1?h:0}else{Dc[k[(k[l>>2]|0)+24>>2]&255](l,f,h,1,0);switch(k[f+36>>2]|0){case 0:{s=(k[n>>2]|0)==1&(k[g>>2]|0)==1&(k[m>>2]|0)==1?k[b>>2]|0:0;break a;break}case 1:break;default:{s=0;break a}}if((k[a>>2]|0)!=1?!((k[n>>2]|0)==0&(k[g>>2]|0)==1&(k[m>>2]|0)==1):0){s=0;break}s=k[d>>2]|0}while(0);r=e;return s|0}function vra(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;i[b+53>>0]=1;do if((k[b+4>>2]|0)==(d|0)){i[b+52>>0]=1;a=b+16|0;f=k[a>>2]|0;if(!f){k[a>>2]=c;k[b+24>>2]=e;k[b+36>>2]=1;if(!((e|0)==1?(k[b+48>>2]|0)==1:0))break;i[b+54>>0]=1;break}if((f|0)!=(c|0)){f=b+36|0;k[f>>2]=(k[f>>2]|0)+1;i[b+54>>0]=1;break}f=b+24|0;a=k[f>>2]|0;if((a|0)==2){k[f>>2]=e;g=e}else g=a;if((g|0)==1?(k[b+48>>2]|0)==1:0)i[b+54>>0]=1}while(0);return}function wra(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;a:do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(f=b+28|0,(k[f>>2]|0)!=1):0)k[f>>2]=d}else{if((a|0)!=(k[b>>2]|0)){f=k[a+12>>2]|0;g=a+16+(f<<3)|0;yra(a+16|0,b,c,d,e);h=a+24|0;if((f|0)<=1)break;f=k[a+8>>2]|0;if((f&2|0)==0?(j=b+36|0,(k[j>>2]|0)!=1):0){if(!(f&1)){f=b+54|0;l=h;while(1){if(i[f>>0]|0)break a;if((k[j>>2]|0)==1)break a;yra(l,b,c,d,e);l=l+8|0;if(l>>>0>=g>>>0)break a}}l=b+24|0;f=b+54|0;m=h;while(1){if(i[f>>0]|0)break a;if((k[j>>2]|0)==1?(k[l>>2]|0)==1:0)break a;yra(m,b,c,d,e);m=m+8|0;if(m>>>0>=g>>>0)break a}}m=b+54|0;l=h;while(1){if(i[m>>0]|0)break a;yra(l,b,c,d,e);l=l+8|0;if(l>>>0>=g>>>0)break a}}if((k[b+16>>2]|0)!=(c|0)?(g=b+20|0,(k[g>>2]|0)!=(c|0)):0){k[b+32>>2]=d;l=b+44|0;if((k[l>>2]|0)==4)break;m=a+16+(k[a+12>>2]<<3)|0;h=b+52|0;j=b+53|0;f=b+54|0;n=a+8|0;o=b+24|0;p=0;q=0;r=a+16|0;b:while(1){if(r>>>0>=m>>>0){s=p;t=q;u=20;break}i[h>>0]=0;i[j>>0]=0;xra(r,b,c,c,1,e);if(i[f>>0]|0){s=p;t=q;u=20;break}do if(i[j>>0]|0){if(!(i[h>>0]|0))if(!(k[n>>2]&1)){s=p;t=1;u=20;break b}else{v=p;w=1;break}if((k[o>>2]|0)==1){x=1;break b}if(!(k[n>>2]&2)){x=1;break b}else{v=1;w=1}}else{v=p;w=q}while(0);p=v;q=w;r=r+8|0}if((u|0)==20)if((!s?(k[g>>2]=c,r=b+40|0,k[r>>2]=(k[r>>2]|0)+1,(k[b+36>>2]|0)==1):0)?(k[o>>2]|0)==2:0){i[f>>0]=1;x=t}else x=t;k[l>>2]=x?3:4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function xra(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=k[a+4>>2]|0;h=g>>8;if(!(g&1))i=h;else i=k[(k[d>>2]|0)+h>>2]|0;h=k[a>>2]|0;Uc[k[(k[h>>2]|0)+20>>2]&63](h,b,c,d+i|0,(g&2|0)!=0?e:2,f);return}function yra(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=k[a+4>>2]|0;g=f>>8;if(!(f&1))h=g;else h=k[(k[c>>2]|0)+g>>2]|0;g=k[a>>2]|0;Dc[k[(k[g>>2]|0)+24>>2]&255](g,b,c+h|0,(f&2|0)!=0?d:2,e);return}function zra(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(f=b+28|0,(k[f>>2]|0)!=1):0)k[f>>2]=d}else{if((a|0)!=(k[b>>2]|0)){f=k[a+8>>2]|0;Dc[k[(k[f>>2]|0)+24>>2]&255](f,b,c,d,e);break}if((k[b+16>>2]|0)!=(c|0)?(f=b+20|0,(k[f>>2]|0)!=(c|0)):0){k[b+32>>2]=d;g=b+44|0;if((k[g>>2]|0)==4)break;h=b+52|0;i[h>>0]=0;j=b+53|0;i[j>>0]=0;l=k[a+8>>2]|0;Uc[k[(k[l>>2]|0)+20>>2]&63](l,b,c,c,1,e);if(i[j>>0]|0)if(!(i[h>>0]|0)){m=1;n=13}else o=1;else{m=0;n=13}if((n|0)==13){k[f>>2]=c;f=b+40|0;k[f>>2]=(k[f>>2]|0)+1;if((k[b+36>>2]|0)==1?(k[b+24>>2]|0)==2:0){i[b+54>>0]=1;o=m}else o=m}k[g>>2]=o?3:4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function Ara(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;do if((a|0)==(k[b+8>>2]|0)){if((k[b+4>>2]|0)==(c|0)?(e=b+28|0,(k[e>>2]|0)!=1):0)k[e>>2]=d}else if((a|0)==(k[b>>2]|0)){if((k[b+16>>2]|0)!=(c|0)?(e=b+20|0,(k[e>>2]|0)!=(c|0)):0){k[b+32>>2]=d;k[e>>2]=c;e=b+40|0;k[e>>2]=(k[e>>2]|0)+1;if((k[b+36>>2]|0)==1?(k[b+24>>2]|0)==2:0)i[b+54>>0]=1;k[b+44>>2]=4;break}if((d|0)==1)k[b+32>>2]=1}while(0);return}function Bra(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if((a|0)==(k[b+8>>2]|0))vra(0,b,c,d,e);else{g=b+52|0;h=j[g>>1]|0;l=h&255;m=b+53|0;n=(h&65535)>>>8&255;h=k[a+12>>2]|0;o=a+16+(h<<3)|0;i[g>>0]=0;i[m>>0]=0;xra(a+16|0,b,c,d,e,f);a:do if((h|0)>1){p=b+24|0;q=a+8|0;r=b+54|0;s=a+24|0;do{if(i[r>>0]|0)break a;t=j[g>>1]|0;if(!((t&255)<<24>>24)){if((t&65535)>=256?(k[q>>2]&1|0)==0:0)break a}else{if((k[p>>2]|0)==1)break a;if(!(k[q>>2]&2))break a}i[g>>0]=0;i[m>>0]=0;xra(s,b,c,d,e,f);s=s+8|0}while(s>>>0<o>>>0)}while(0);i[g>>0]=l;i[m>>0]=n}return}function Cra(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;if((a|0)==(k[b+8>>2]|0))vra(0,b,c,d,e);else{g=k[a+8>>2]|0;Uc[k[(k[g>>2]|0)+20>>2]&63](g,b,c,d,e,f)}return}function Dra(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if((a|0)==(k[b+8>>2]|0))vra(0,b,c,d,e);return}function Era(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;k[e>>2]=k[c>>2];f=Rc[k[(k[a>>2]|0)+16>>2]&63](a,b,e)|0;if(f)k[c>>2]=k[e>>2];r=d;return f&1|0}function Fra(a){a=a|0;var b=0;if(!a)b=0;else b=(ura(a,25264,25312,0)|0)!=0;return b&1|0}function Gra(){var a=0;a=Ab(4)|0;Uqa(a);jc(a|0,25200,348)}function Hra(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a=r;r=r+48|0;b=a+32|0;c=a+24|0;d=a+16|0;e=a;f=a+36|0;a=Pqa()|0;if((a|0)!=0?(g=k[a>>2]|0,(g|0)!=0):0){a=g+48|0;h=k[a>>2]|0;i=k[a+4>>2]|0;if(!((h&-256|0)==1126902528&(i|0)==1129074247)){k[c>>2]=k[10555];Mqa(152237,c)}if((h|0)==1126902529&(i|0)==1129074247)j=k[g+44>>2]|0;else j=g+80|0;k[f>>2]=j;j=k[g>>2]|0;g=k[j+4>>2]|0;if(Rc[k[(k[6304]|0)+16>>2]&63](25216,j,f)|0){j=k[f>>2]|0;f=k[10555]|0;i=Hc[k[(k[j>>2]|0)+8>>2]&511](j)|0;k[e>>2]=f;k[e+4>>2]=g;k[e+8>>2]=i;Mqa(152151,e)}else{k[d>>2]=k[10555];k[d+4>>2]=g;Mqa(152196,d)}}Mqa(152275,b)}function Ira(){var a=0;a=r;r=r+16|0;if(!(cc(42212,547)|0)){r=a;return}else Mqa(152048,a)}function Jra(a){a=a|0;var b=0,c=0;b=(k[a>>2]|0)+-4|0;c=k[b>>2]|0;k[b>>2]=c+-1;if((c+-1|0)<0)Sqa((k[a>>2]|0)+-12|0);return}function Kra(a){a=a|0;var b=0;b=r;r=r+16|0;mua(a);if(!(hc(k[10553]|0,0)|0)){r=b;return}else Mqa(152098,b)}function Lra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Bta(a,b,c)|0;return d|0}function Mra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Cta(a,b,c)|0;return d|0}function Nra(){return 42488}function Ora(){return 42492}function Pra(){return 42496}function Qra(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function Rra(a){a=a|0;var b=0;if((a+-48|0)>>>0<10)b=1;else b=((a|32)+-97|0)>>>0<6;return b&1|0}function Sra(){var a=0,b=0;if(!(k[10556]|0))a=42500;else{b=(Yb()|0)+60|0;a=k[b>>2]|0}return a|0}function Tra(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=0;while(1){if((l[152296+b>>0]|0)==(a|0)){c=b;d=2;break}b=b+1|0;if((b|0)==87){e=87;f=152384;d=5;break}}if((d|0)==2)if(!c)g=152384;else{e=c;f=152384;d=5}if((d|0)==5)while(1){d=0;c=f;while(1){b=c+1|0;if(!(i[c>>0]|0)){h=b;break}else c=b}e=e+-1|0;if(!e){g=h;break}else{f=h;d=5}}return g|0}function Ura(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0.0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0.0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0.0,ua=0,va=0.0,wa=0.0,xa=0,ya=0.0,za=0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0.0,La=0,Ma=0,Na=0,Oa=0,Pa=0.0,Qa=0,Ra=0,Sa=0,Ta=0.0,Ua=0.0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0.0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0.0,fd=0.0,gd=0.0,hd=0.0,id=0.0,jd=0.0,kd=0.0,ld=0,md=0,nd=0.0,od=0,pd=0.0;d=r;r=r+512|0;e=d;switch(b|0){case 0:{f=24;g=-149;h=4;break}case 1:{f=53;g=-1074;h=4;break}case 2:{f=53;g=-1074;h=4;break}default:j=0.0}a:do if((h|0)==4){b=a+4|0;m=a+100|0;do{n=k[b>>2]|0;if(n>>>0<(k[m>>2]|0)>>>0){k[b>>2]=n+1;o=l[n>>0]|0}else o=Xra(a)|0}while((Qra(o)|0)!=0);p=o;b:do switch(p|0){case 43:case 45:{n=1-(((p|0)==45&1)<<1)|0;q=k[b>>2]|0;if(q>>>0<(k[m>>2]|0)>>>0){k[b>>2]=q+1;s=l[q>>0]|0;t=n;break b}else{s=Xra(a)|0;t=n;break b}break}default:{s=p;t=1}}while(0);n=s;q=0;while(1){if((n|32|0)!=(i[154188+q>>0]|0)){u=n;v=q;break}do if(q>>>0<7){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;x=l[w>>0]|0;break}else{x=Xra(a)|0;break}}else x=n;while(0);w=q+1|0;if(w>>>0<8){n=x;q=w}else{u=x;v=w;break}}c:do switch(v|0){case 8:break;case 3:{h=23;break}default:{q=(c|0)!=0;if(q&v>>>0>3)if((v|0)==8)break c;else{h=23;break c}d:do if(!v){n=u;w=0;while(1){if((n|32|0)!=(i[157069+w>>0]|0)){y=n;z=w;break d}do if(w>>>0<2){A=k[b>>2]|0;if(A>>>0<(k[m>>2]|0)>>>0){k[b>>2]=A+1;B=l[A>>0]|0;break}else{B=Xra(a)|0;break}}else B=n;while(0);A=w+1|0;if(A>>>0<3){n=B;w=A}else{y=B;z=A;break}}}else{y=u;z=v}while(0);switch(z|0){case 3:{w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;C=l[w>>0]|0}else C=Xra(a)|0;if((C|0)==40)D=1;else{if(!(k[m>>2]|0)){j=F;break a}k[b>>2]=(k[b>>2]|0)+-1;j=F;break a}while(1){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;E=l[w>>0]|0}else E=Xra(a)|0;if(!((E+-48|0)>>>0<10|(E+-65|0)>>>0<26)?!((E|0)==95|(E+-97|0)>>>0<26):0){H=E;I=D;break}D=D+1|0}if((H|0)==41){j=F;break a}w=(k[m>>2]|0)==0;if(!w)k[b>>2]=(k[b>>2]|0)+-1;if(!q){n=Sra()|0;k[n>>2]=22;Wra(a,0);j=0.0;break a}if(!I){j=F;break a}else J=I;while(1){J=J+-1|0;if(!w)k[b>>2]=(k[b>>2]|0)+-1;if(!J){j=F;break a}}break}case 0:{do if((y|0)==48){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;K=l[w>>0]|0}else K=Xra(a)|0;if((K|32|0)!=120){if(!(k[m>>2]|0)){L=48;break}k[b>>2]=(k[b>>2]|0)+-1;L=48;break}w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;M=l[w>>0]|0;N=0}else{M=Xra(a)|0;N=0}e:while(1){switch(M|0){case 46:{O=N;h=74;break e;break}case 48:break;default:{P=0;R=0;S=0;T=0;U=M;V=N;W=0;X=0;Y=1.0;Z=0;_=0.0;break e}}w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;M=l[w>>0]|0;N=1;continue}else{M=Xra(a)|0;N=1;continue}}if((h|0)==74){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;aa=l[w>>0]|0}else aa=Xra(a)|0;if((aa|0)==48){w=0;q=0;while(1){n=k[b>>2]|0;if(n>>>0<(k[m>>2]|0)>>>0){k[b>>2]=n+1;ba=l[n>>0]|0}else ba=Xra(a)|0;n=QEa(w|0,q|0,-1,-1)|0;A=Q;if((ba|0)==48){w=n;q=A}else{P=0;R=0;S=n;T=A;U=ba;V=1;W=1;X=0;Y=1.0;Z=0;_=0.0;break}}}else{P=0;R=0;S=0;T=0;U=aa;V=O;W=1;X=0;Y=1.0;Z=0;_=0.0}}while(1){q=U+-48|0;w=U|32;if(q>>>0>=10){A=(U|0)==46;if(!(A|(w+-97|0)>>>0<6)){ca=R;da=S;ea=P;fa=T;ga=U;ha=V;ia=W;ja=Z;ka=_;break}if(A)if(!W){la=R;na=P;oa=R;pa=P;qa=V;ra=1;sa=X;ta=Y;ua=Z;va=_}else{ca=R;da=S;ea=P;fa=T;ga=46;ha=V;ia=W;ja=Z;ka=_;break}else h=86}else h=86;if((h|0)==86){h=0;A=(U|0)>57?w+-87|0:q;do if(!((P|0)<0|(P|0)==0&R>>>0<8)){if((P|0)<0|(P|0)==0&R>>>0<14){wa=Y*.0625;xa=X;ya=wa;za=Z;Aa=_+wa*+(A|0);break}if((X|0)!=0|(A|0)==0){xa=X;ya=Y;za=Z;Aa=_}else{xa=1;ya=Y;za=Z;Aa=_+Y*.5}}else{xa=X;ya=Y;za=A+(Z<<4)|0;Aa=_}while(0);A=QEa(R|0,P|0,1,0)|0;la=S;na=T;oa=A;pa=Q;qa=1;ra=W;sa=xa;ta=ya;ua=za;va=Aa}A=k[b>>2]|0;if(A>>>0<(k[m>>2]|0)>>>0){k[b>>2]=A+1;P=pa;R=oa;S=la;T=na;U=l[A>>0]|0;V=qa;W=ra;X=sa;Y=ta;Z=ua;_=va;continue}else{P=pa;R=oa;S=la;T=na;U=Xra(a)|0;V=qa;W=ra;X=sa;Y=ta;Z=ua;_=va;continue}}if(!ha){A=(k[m>>2]|0)==0;if(!A)k[b>>2]=(k[b>>2]|0)+-1;if(c){if(!A?(A=k[b>>2]|0,k[b>>2]=A+-1,(ia|0)!=0):0)k[b>>2]=A+-2}else Wra(a,0);j=+(t|0)*0.0;break a}A=(ia|0)==0;q=A?ca:da;w=A?ea:fa;if((ea|0)<0|(ea|0)==0&ca>>>0<8){A=ca;n=ea;Ba=ja;while(1){Ca=Ba<<4;A=QEa(A|0,n|0,1,0)|0;n=Q;if(!((n|0)<0|(n|0)==0&A>>>0<8)){Da=Ca;break}else Ba=Ca}}else Da=ja;if((ga|32|0)==112){Ba=Uta(a,c)|0;A=Q;if((Ba|0)==0&(A|0)==-2147483648){if(!c){Wra(a,0);j=0.0;break a}if(!(k[m>>2]|0)){Ea=0;Fa=0}else{k[b>>2]=(k[b>>2]|0)+-1;Ea=0;Fa=0}}else{Ea=Ba;Fa=A}}else if(!(k[m>>2]|0)){Ea=0;Fa=0}else{k[b>>2]=(k[b>>2]|0)+-1;Ea=0;Fa=0}A=XEa(q|0,w|0,2)|0;Ba=QEa(A|0,Q|0,-32,-1)|0;A=QEa(Ba|0,Q|0,Ea|0,Fa|0)|0;Ba=Q;if(!Da){j=+(t|0)*0.0;break a}if((Ba|0)>0|(Ba|0)==0&A>>>0>(0-g|0)>>>0){n=Sra()|0;k[n>>2]=34;j=+(t|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}n=g+-106|0;Ca=((n|0)<0)<<31>>31;if((Ba|0)<(Ca|0)|(Ba|0)==(Ca|0)&A>>>0<n>>>0){n=Sra()|0;k[n>>2]=34;j=+(t|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((Da|0)>-1){n=A;Ca=Ba;Ga=Da;wa=ka;while(1){Ha=!(wa>=.5);Ia=Ha&1|Ga<<1;Ja=Ia^1;Ka=wa+(Ha?wa:wa+-1.0);Ha=QEa(n|0,Ca|0,-1,-1)|0;La=Q;if((Ia|0)>-1){n=Ha;Ca=La;Ga=Ja;wa=Ka}else{Ma=Ha;Na=La;Oa=Ja;Pa=Ka;break}}}else{Ma=A;Na=Ba;Oa=Da;Pa=ka}Ga=REa(32,0,g|0,((g|0)<0)<<31>>31|0)|0;Ca=QEa(Ma|0,Na|0,Ga|0,Q|0)|0;Ga=Q;if(0>(Ga|0)|0==(Ga|0)&f>>>0>Ca>>>0)if((Ca|0)<0){Qa=0;h=127}else{Ra=Ca;h=125}else{Ra=f;h=125}if((h|0)==125)if((Ra|0)<53){Qa=Ra;h=127}else{Sa=Ra;Ta=+(t|0);Ua=0.0}if((h|0)==127){wa=+(t|0);Sa=Qa;Ta=wa;Ua=+gsa(+qsa(1.0,84-Qa|0),wa)}Ca=(Oa&1|0)==0&(Pa!=0.0&(Sa|0)<32);wa=Ta*(Ca?0.0:Pa)+(Ua+Ta*+(((Ca&1)+Oa|0)>>>0))-Ua;if(!(wa!=0.0)){Ca=Sra()|0;k[Ca>>2]=34}j=+rsa(wa,Ma);break a}else L=y;while(0);Ca=g+f|0;Ga=0-Ca|0;n=L;w=0;f:while(1){switch(n|0){case 46:{Va=w;h=138;break f;break}case 48:break;default:{Wa=n;Xa=0;Ya=0;Za=w;_a=0;break f}}q=k[b>>2]|0;if(q>>>0<(k[m>>2]|0)>>>0){k[b>>2]=q+1;n=l[q>>0]|0;w=1;continue}else{n=Xra(a)|0;w=1;continue}}if((h|0)==138){w=k[b>>2]|0;if(w>>>0<(k[m>>2]|0)>>>0){k[b>>2]=w+1;$a=l[w>>0]|0}else $a=Xra(a)|0;if(($a|0)==48){w=0;n=0;while(1){q=QEa(w|0,n|0,-1,-1)|0;Ja=Q;La=k[b>>2]|0;if(La>>>0<(k[m>>2]|0)>>>0){k[b>>2]=La+1;ab=l[La>>0]|0}else ab=Xra(a)|0;if((ab|0)==48){w=q;n=Ja}else{Wa=ab;Xa=q;Ya=Ja;Za=1;_a=1;break}}}else{Wa=$a;Xa=0;Ya=0;Za=Va;_a=1}}k[e>>2]=0;n=Wa+-48|0;w=(Wa|0)==46;g:do if(w|n>>>0<10){Ja=e+496|0;q=Wa;La=0;Ha=0;Ia=w;bb=n;cb=Xa;db=Ya;eb=Za;fb=_a;gb=0;hb=0;ib=0;h:while(1){do if(Ia)if(!fb){jb=La;kb=Ha;lb=La;mb=Ha;nb=eb;ob=1;pb=gb;qb=hb;rb=ib}else{sb=cb;tb=db;ub=La;vb=Ha;wb=eb;xb=gb;yb=hb;zb=ib;break h}else{Ab=QEa(La|0,Ha|0,1,0)|0;Bb=Q;Cb=(q|0)!=48;if((hb|0)>=125){if(!Cb){jb=cb;kb=db;lb=Ab;mb=Bb;nb=eb;ob=fb;pb=gb;qb=hb;rb=ib;break}k[Ja>>2]=k[Ja>>2]|1;jb=cb;kb=db;lb=Ab;mb=Bb;nb=eb;ob=fb;pb=gb;qb=hb;rb=ib;break}Db=e+(hb<<2)|0;if(!gb)Eb=bb;else Eb=q+-48+((k[Db>>2]|0)*10|0)|0;k[Db>>2]=Eb;Db=gb+1|0;Fb=(Db|0)==9;jb=cb;kb=db;lb=Ab;mb=Bb;nb=1;ob=fb;pb=Fb?0:Db;qb=(Fb&1)+hb|0;rb=Cb?Ab:ib}while(0);Ab=k[b>>2]|0;if(Ab>>>0<(k[m>>2]|0)>>>0){k[b>>2]=Ab+1;Gb=l[Ab>>0]|0}else Gb=Xra(a)|0;bb=Gb+-48|0;Ia=(Gb|0)==46;if(!(Ia|bb>>>0<10)){Hb=Gb;Ib=lb;Jb=jb;Kb=mb;Lb=kb;Mb=nb;Nb=ob;Ob=pb;Pb=qb;Qb=rb;h=161;break g}else{q=Gb;La=lb;Ha=mb;cb=jb;db=kb;eb=nb;fb=ob;gb=pb;hb=qb;ib=rb}}Rb=ub;Sb=vb;Tb=sb;Ub=tb;Vb=(wb|0)!=0;Wb=xb;Xb=yb;Yb=zb;h=169}else{Hb=Wa;Ib=0;Jb=Xa;Kb=0;Lb=Ya;Mb=Za;Nb=_a;Ob=0;Pb=0;Qb=0;h=161}while(0);do if((h|0)==161){n=(Nb|0)==0;w=n?Ib:Jb;ib=n?Kb:Lb;n=(Mb|0)!=0;if(!((Hb|32|0)==101&n))if((Hb|0)>-1){Rb=Ib;Sb=Kb;Tb=w;Ub=ib;Vb=n;Wb=Ob;Xb=Pb;Yb=Qb;h=169;break}else{Zb=Ib;_b=Kb;$b=n;ac=w;bc=ib;cc=Ob;dc=Pb;ec=Qb;h=171;break}n=Uta(a,c)|0;hb=Q;if((n|0)==0&(hb|0)==-2147483648){if(!c){Wra(a,0);fc=0.0;break}if(!(k[m>>2]|0)){gc=0;hc=0}else{k[b>>2]=(k[b>>2]|0)+-1;gc=0;hc=0}}else{gc=n;hc=hb}hb=QEa(gc|0,hc|0,w|0,ib|0)|0;ic=hb;jc=Ib;kc=Q;lc=Kb;mc=Ob;nc=Pb;oc=Qb;h=173}while(0);if((h|0)==169)if(k[m>>2]|0){k[b>>2]=(k[b>>2]|0)+-1;if(Vb){ic=Tb;jc=Rb;kc=Ub;lc=Sb;mc=Wb;nc=Xb;oc=Yb;h=173}else h=172}else{Zb=Rb;_b=Sb;$b=Vb;ac=Tb;bc=Ub;cc=Wb;dc=Xb;ec=Yb;h=171}if((h|0)==171)if($b){ic=ac;jc=Zb;kc=bc;lc=_b;mc=cc;nc=dc;oc=ec;h=173}else h=172;do if((h|0)==172){hb=Sra()|0;k[hb>>2]=22;Wra(a,0);fc=0.0}else if((h|0)==173){hb=k[e>>2]|0;if(!hb){fc=+(t|0)*0.0;break}if(((lc|0)<0|(lc|0)==0&jc>>>0<10)&((ic|0)==(jc|0)&(kc|0)==(lc|0))?f>>>0>30|(hb>>>f|0)==0:0){fc=+(t|0)*+(hb>>>0);break}hb=(g|0)/-2|0;ib=((hb|0)<0)<<31>>31;if((kc|0)>(ib|0)|(kc|0)==(ib|0)&ic>>>0>hb>>>0){hb=Sra()|0;k[hb>>2]=34;fc=+(t|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}hb=g+-106|0;ib=((hb|0)<0)<<31>>31;if((kc|0)<(ib|0)|(kc|0)==(ib|0)&ic>>>0<hb>>>0){hb=Sra()|0;k[hb>>2]=34;fc=+(t|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(!mc)pc=nc;else{if((mc|0)<9){hb=e+(nc<<2)|0;ib=k[hb>>2]|0;w=mc;while(1){n=ib*10|0;w=w+1|0;if((w|0)==9){qc=n;break}else ib=n}k[hb>>2]=qc}pc=nc+1|0}if((oc|0)<9?(oc|0)<=(ic|0)&(ic|0)<18:0){if((ic|0)==9){fc=+(t|0)*+((k[e>>2]|0)>>>0);break}if((ic|0)<9){fc=+(t|0)*+((k[e>>2]|0)>>>0)/+(k[42504+(8-ic<<2)>>2]|0);break}ib=f+27+(ma(ic,-3)|0)|0;w=k[e>>2]|0;if((ib|0)>30|(w>>>ib|0)==0){fc=+(t|0)*+(w>>>0)*+(k[42504+(ic+-10<<2)>>2]|0);break}}w=(ic|0)%9|0;if(!w){rc=0;sc=0;tc=ic;uc=pc}else{ib=(ic|0)>-1?w:w+9|0;w=k[42504+(8-ib<<2)>>2]|0;if(pc){n=1e9/(w|0)|0;gb=0;fb=0;eb=0;db=ic;while(1){cb=e+(eb<<2)|0;Ha=k[cb>>2]|0;La=((Ha>>>0)/(w>>>0)|0)+fb|0;k[cb>>2]=La;cb=ma((Ha>>>0)%(w>>>0)|0,n)|0;Ha=(eb|0)==(gb|0)&(La|0)==0;eb=eb+1|0;La=Ha?db+-9|0:db;q=Ha?eb&127:gb;if((eb|0)==(pc|0)){vc=cb;wc=q;xc=La;break}else{gb=q;fb=cb;db=La}}if(!vc){yc=wc;zc=xc;Ac=pc}else{k[e+(pc<<2)>>2]=vc;yc=wc;zc=xc;Ac=pc+1|0}}else{yc=0;zc=ic;Ac=0}rc=yc;sc=0;tc=9-ib+zc|0;uc=Ac}i:while(1){db=(tc|0)<18;fb=(tc|0)==18;gb=e+(rc<<2)|0;eb=sc;n=uc;while(1){if(!db){if(!fb){Bc=rc;Cc=eb;Dc=tc;Ec=n;break i}if((k[gb>>2]|0)>>>0>=9007199){Bc=rc;Cc=eb;Dc=18;Ec=n;break i}}w=0;hb=n+127|0;La=n;while(1){cb=hb&127;q=e+(cb<<2)|0;Ha=XEa(k[q>>2]|0,0,29)|0;bb=QEa(Ha|0,Q|0,w|0,0)|0;Ha=Q;if(Ha>>>0>0|(Ha|0)==0&bb>>>0>1e9){Ia=cFa(bb|0,Ha|0,1e9,0)|0;Ja=dFa(bb|0,Ha|0,1e9,0)|0;Fc=Ja;Gc=Ia}else{Fc=bb;Gc=0}k[q>>2]=Fc;q=(cb|0)==(rc|0);bb=(cb|0)!=(La+127&127|0)|q?La:(Fc|0)==0?cb:La;if(q){Hc=Gc;Ic=bb;break}else{w=Gc;hb=cb+-1|0;La=bb}}La=eb+-29|0;if(!Hc){eb=La;n=Ic}else{Jc=La;Kc=Hc;Lc=Ic;break}}n=rc+127&127;if((n|0)==(Lc|0)){eb=Lc+127&127;gb=e+((Lc+126&127)<<2)|0;k[gb>>2]=k[gb>>2]|k[e+(eb<<2)>>2];Mc=eb}else Mc=Lc;k[e+(n<<2)>>2]=Kc;rc=n;sc=Jc;tc=tc+9|0;uc=Mc}j:while(1){Nc=Ec+1&127;ib=e+((Ec+127&127)<<2)|0;n=Bc;eb=Cc;gb=Dc;while(1){fb=(gb|0)==18;db=(gb|0)>27?9:1;La=fb^1;Oc=n;Pc=eb;while(1){Qc=Oc&127;Rc=(Qc|0)==(Ec|0);do if(!Rc){hb=k[e+(Qc<<2)>>2]|0;if(hb>>>0<9007199){h=219;break}if(hb>>>0>9007199)break;hb=Oc+1&127;if((hb|0)==(Ec|0)){h=219;break}w=k[e+(hb<<2)>>2]|0;if(w>>>0<254740991){h=219;break}if(!(w>>>0>254740991|La)){Sc=Qc;Tc=Oc;Uc=Pc;Vc=Ec;break j}}else h=219;while(0);if((h|0)==219?(h=0,fb):0){h=220;break j}w=Pc+db|0;if((Oc|0)==(Ec|0)){Oc=Ec;Pc=w}else{Wc=w;Xc=Oc;break}}fb=(1<<db)+-1|0;La=1e9>>>db;w=Xc;hb=0;bb=Xc;cb=gb;while(1){q=e+(bb<<2)|0;Ia=k[q>>2]|0;Ja=(Ia>>>db)+hb|0;k[q>>2]=Ja;q=ma(Ia&fb,La)|0;Ia=(bb|0)==(w|0)&(Ja|0)==0;bb=bb+1&127;Ja=Ia?cb+-9|0:cb;Ha=Ia?bb:w;if((bb|0)==(Ec|0)){Yc=q;Zc=Ha;_c=Ja;break}else{w=Ha;hb=q;cb=Ja}}if(!Yc){n=Zc;eb=Wc;gb=_c;continue}if((Nc|0)!=(Zc|0)){$c=Wc;ad=Yc;bd=Zc;cd=_c;break}k[ib>>2]=k[ib>>2]|1;n=Zc;eb=Wc;gb=_c}k[e+(Ec<<2)>>2]=ad;Bc=bd;Cc=$c;Dc=cd;Ec=Nc}if((h|0)==220)if(Rc){k[e+(Nc+-1<<2)>>2]=0;Sc=Ec;Tc=Oc;Uc=Pc;Vc=Nc}else{Sc=Qc;Tc=Oc;Uc=Pc;Vc=Ec}wa=+((k[e+(Sc<<2)>>2]|0)>>>0);gb=Tc+1&127;if((gb|0)==(Vc|0)){eb=Tc+2&127;k[e+(eb+-1<<2)>>2]=0;dd=eb}else dd=Vc;Ka=+(t|0);ed=Ka*(wa*1.0e9+ +((k[e+(gb<<2)>>2]|0)>>>0));gb=Uc+53|0;eb=gb-g|0;n=(eb|0)<(f|0);ib=n&1;cb=n?((eb|0)<0?0:eb):f;if((cb|0)<53){wa=+gsa(+qsa(1.0,105-cb|0),ed);fd=+lsa(ed,+qsa(1.0,53-cb|0));gd=wa;hd=fd;id=wa+(ed-fd)}else{gd=0.0;hd=0.0;id=ed}hb=Tc+2&127;do if((hb|0)==(dd|0))jd=hd;else{w=k[e+(hb<<2)>>2]|0;do if(w>>>0>=5e8){if(w>>>0>5e8){kd=Ka*.75+hd;break}if((Tc+3&127|0)==(dd|0)){kd=Ka*.5+hd;break}else{kd=Ka*.75+hd;break}}else{if((w|0)==0?(Tc+3&127|0)==(dd|0):0){kd=hd;break}kd=Ka*.25+hd}while(0);if((53-cb|0)<=1){jd=kd;break}if(+lsa(kd,1.0)!=0.0){jd=kd;break}jd=kd+1.0}while(0);Ka=id+jd-gd;do if((gb&2147483647|0)>(-2-Ca|0)){if(!(+$(+Ka)>=9007199254740992.0)){ld=ib;md=Uc;nd=Ka}else{ld=n&(cb|0)==(eb|0)?0:ib;md=Uc+1|0;nd=Ka*.5}if((md+50|0)<=(Ga|0)?!(jd!=0.0&(ld|0)!=0):0){od=md;pd=nd;break}hb=Sra()|0;k[hb>>2]=34;od=md;pd=nd}else{od=Uc;pd=Ka}while(0);fc=+rsa(pd,od)}while(0);j=fc;break a;break}default:{if(k[m>>2]|0)k[b>>2]=(k[b>>2]|0)+-1;Ga=Sra()|0;k[Ga>>2]=22;Wra(a,0);j=0.0;break a}}}}while(0);if((h|0)==23){Ga=(k[m>>2]|0)==0;if(!Ga)k[b>>2]=(k[b>>2]|0)+-1;if((c|0)!=0&v>>>0>3){Ca=v;do{if(!Ga)k[b>>2]=(k[b>>2]|0)+-1;Ca=Ca+-1|0}while(Ca>>>0>3)}}j=+(t|0)*G}while(0);r=d;return +j}function Vra(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;a:do if(b>>>0>36){f=Sra()|0;k[f>>2]=22;g=0;h=0}else{f=a+4|0;j=a+100|0;do{m=k[f>>2]|0;if(m>>>0<(k[j>>2]|0)>>>0){k[f>>2]=m+1;n=l[m>>0]|0}else n=Xra(a)|0}while((Qra(n)|0)!=0);o=n;b:do switch(o|0){case 43:case 45:{m=((o|0)==45)<<31>>31;p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;q=l[p>>0]|0;r=m;break b}else{q=Xra(a)|0;r=m;break b}break}default:{q=o;r=0}}while(0);m=(b|0)==0;do if((b&-17|0)==0&(q|0)==48){p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;s=l[p>>0]|0}else s=Xra(a)|0;if((s|32|0)!=120)if(m){t=8;u=s;v=46;break}else{w=b;x=s;v=32;break}p=k[f>>2]|0;if(p>>>0<(k[j>>2]|0)>>>0){k[f>>2]=p+1;y=l[p>>0]|0}else y=Xra(a)|0;if((l[154198+y>>0]|0)>15){p=(k[j>>2]|0)==0;if(!p)k[f>>2]=(k[f>>2]|0)+-1;if(!c){Wra(a,0);g=0;h=0;break a}if(p){g=0;h=0;break a}k[f>>2]=(k[f>>2]|0)+-1;g=0;h=0;break a}else{t=16;u=y;v=46}}else{p=m?10:b;if((l[154198+q>>0]|0)>>>0<p>>>0){w=p;x=q;v=32}else{if(k[j>>2]|0)k[f>>2]=(k[f>>2]|0)+-1;Wra(a,0);p=Sra()|0;k[p>>2]=22;g=0;h=0;break a}}while(0);if((v|0)==32)if((w|0)==10){m=x+-48|0;if(m>>>0<10){p=m;m=0;while(1){z=(m*10|0)+p|0;A=k[f>>2]|0;if(A>>>0<(k[j>>2]|0)>>>0){k[f>>2]=A+1;B=l[A>>0]|0}else B=Xra(a)|0;p=B+-48|0;if(!(p>>>0<10&z>>>0<429496729)){C=z;D=B;break}else m=z}E=C;F=0;G=D}else{E=0;F=0;G=x}m=G+-48|0;if(m>>>0<10){p=E;z=F;A=m;m=G;while(1){H=bFa(p|0,z|0,10,0)|0;I=Q;J=((A|0)<0)<<31>>31;K=~J;if(I>>>0>K>>>0|(I|0)==(K|0)&H>>>0>~A>>>0){L=A;M=p;N=z;O=m;break}K=QEa(H|0,I|0,A|0,J|0)|0;J=Q;I=k[f>>2]|0;if(I>>>0<(k[j>>2]|0)>>>0){k[f>>2]=I+1;P=l[I>>0]|0}else P=Xra(a)|0;I=P+-48|0;if(I>>>0<10&(J>>>0<429496729|(J|0)==429496729&K>>>0<2576980378)){p=K;z=J;A=I;m=P}else{L=I;M=K;N=J;O=P;break}}if(L>>>0>9){R=N;S=M;T=r}else{U=10;V=M;W=N;X=O;v=72}}else{R=F;S=E;T=r}}else{t=w;u=x;v=46}c:do if((v|0)==46){if(!(t+-1&t)){m=i[154454+((t*23|0)>>>5&7)>>0]|0;A=i[154198+u>>0]|0;z=A&255;if(z>>>0<t>>>0){p=z;z=0;while(1){J=p|z<<m;K=k[f>>2]|0;if(K>>>0<(k[j>>2]|0)>>>0){k[f>>2]=K+1;Y=l[K>>0]|0}else Y=Xra(a)|0;K=i[154198+Y>>0]|0;p=K&255;if(!(J>>>0<134217728&p>>>0<t>>>0)){Z=J;_=K;$=Y;break}else z=J}aa=_;ba=0;ca=Z;da=$}else{aa=A;ba=0;ca=0;da=u}z=SEa(-1,-1,m|0)|0;p=Q;if((aa&255)>>>0>=t>>>0|(ba>>>0>p>>>0|(ba|0)==(p|0)&ca>>>0>z>>>0)){U=t;V=ca;W=ba;X=da;v=72;break}else{ea=ca;fa=ba;ga=aa}while(1){J=XEa(ea|0,fa|0,m|0)|0;K=Q;I=ga&255|J;J=k[f>>2]|0;if(J>>>0<(k[j>>2]|0)>>>0){k[f>>2]=J+1;ha=l[J>>0]|0}else ha=Xra(a)|0;ga=i[154198+ha>>0]|0;if((ga&255)>>>0>=t>>>0|(K>>>0>p>>>0|(K|0)==(p|0)&I>>>0>z>>>0)){U=t;V=I;W=K;X=ha;v=72;break c}else{ea=I;fa=K}}}z=i[154198+u>>0]|0;p=z&255;if(p>>>0<t>>>0){m=p;p=0;while(1){A=m+(ma(p,t)|0)|0;K=k[f>>2]|0;if(K>>>0<(k[j>>2]|0)>>>0){k[f>>2]=K+1;ia=l[K>>0]|0}else ia=Xra(a)|0;K=i[154198+ia>>0]|0;m=K&255;if(!(A>>>0<119304647&m>>>0<t>>>0)){ja=A;ka=K;la=ia;break}else p=A}na=ka;oa=ja;pa=0;qa=la}else{na=z;oa=0;pa=0;qa=u}if((na&255)>>>0<t>>>0){p=cFa(-1,-1,t|0,0)|0;m=Q;A=pa;K=oa;I=na;J=qa;while(1){if(A>>>0>m>>>0|(A|0)==(m|0)&K>>>0>p>>>0){U=t;V=K;W=A;X=J;v=72;break c}H=bFa(K|0,A|0,t|0,0)|0;ra=Q;sa=I&255;if(ra>>>0>4294967295|(ra|0)==-1&H>>>0>~sa>>>0){U=t;V=K;W=A;X=J;v=72;break c}ta=QEa(sa|0,0,H|0,ra|0)|0;ra=Q;H=k[f>>2]|0;if(H>>>0<(k[j>>2]|0)>>>0){k[f>>2]=H+1;ua=l[H>>0]|0}else ua=Xra(a)|0;I=i[154198+ua>>0]|0;if((I&255)>>>0>=t>>>0){U=t;V=ta;W=ra;X=ua;v=72;break}else{A=ra;K=ta;J=ua}}}else{U=t;V=oa;W=pa;X=qa;v=72}}while(0);if((v|0)==72)if((l[154198+X>>0]|0)>>>0<U>>>0){do{J=k[f>>2]|0;if(J>>>0<(k[j>>2]|0)>>>0){k[f>>2]=J+1;va=l[J>>0]|0}else va=Xra(a)|0}while((l[154198+va>>0]|0)>>>0<U>>>0);J=Sra()|0;k[J>>2]=34;R=e;S=d;T=(d&1|0)==0&0==0?r:0}else{R=W;S=V;T=r}if(k[j>>2]|0)k[f>>2]=(k[f>>2]|0)+-1;if(!(R>>>0<e>>>0|(R|0)==(e|0)&S>>>0<d>>>0)){if(!((d&1|0)!=0|0!=0|(T|0)!=0)){J=Sra()|0;k[J>>2]=34;J=QEa(d|0,e|0,-1,-1)|0;g=Q;h=J;break}if(R>>>0>e>>>0|(R|0)==(e|0)&S>>>0>d>>>0){J=Sra()|0;k[J>>2]=34;g=e;h=d;break}}J=((T|0)<0)<<31>>31;K=REa(S^T|0,R^J|0,T|0,J|0)|0;g=Q;h=K}while(0);Q=g;return h|0}function Wra(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a+104>>2]=b;c=k[a+8>>2]|0;d=k[a+4>>2]|0;e=c-d|0;k[a+108>>2]=e;if((b|0)!=0&(e|0)>(b|0))k[a+100>>2]=d+b;else k[a+100>>2]=c;return}function Xra(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0;b=a+104|0;c=k[b>>2]|0;if((c|0)!=0?(k[a+108>>2]|0)>=(c|0):0)d=4;else{c=Ssa(a)|0;if((c|0)>=0){e=k[b>>2]|0;b=k[a+8>>2]|0;if(e){f=k[a+4>>2]|0;g=e-(k[a+108>>2]|0)|0;e=b;if((b-f|0)<(g|0)){h=e;d=9}else{k[a+100>>2]=f+(g+-1);j=e}}else{h=b;d=9}if((d|0)==9){k[a+100>>2]=b;j=h}h=a+4|0;if(!j)m=k[h>>2]|0;else{b=k[h>>2]|0;h=a+108|0;k[h>>2]=j+1-b+(k[h>>2]|0);m=b}b=m+-1|0;if((l[b>>0]|0|0)==(c|0))n=c;else{i[b>>0]=c;n=c}}else d=4}if((d|0)==4){k[a+100>>2]=0;n=-1}return n|0}function Yra(a){a=a|0;var b=0,c=0;if(a>>>0>4294963200){b=Sra()|0;k[b>>2]=0-a;c=-1}else c=a;return c|0}function Zra(a){a=a|0;return 0}function _ra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function $ra(a,b){a=a|0;b=b|0;return -1|0}function asa(a){a=a|0;mua(a);return}function bsa(a,b){a=a|0;b=b|0;return (a+-48|0)>>>0<10|0}function csa(a,b){a=a|0;b=b|0;return Rra(a)|0}function dsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(((i[b>>0]|0)!=0?(Ita(b,159108)|0)!=0:0)?(Ita(b,154463)|0)!=0:0)d=0;else if(!c)d=nua(1,4)|0;else d=c;return d|0}function esa(a){a=a|0;var b=0,c=0;b=(Yb()|0)+176|0;c=k[b>>2]|0;if(a)k[b>>2]=a;return c|0}function fsa(a,b){a=+a;b=+b;var c=0,d=0;p[t>>3]=b;c=k[t+4>>2]|0;b=+$(+a);p[t>>3]=b;d=c&-2147483648|k[t+4>>2];k[t>>2]=k[t>>2];k[t+4>>2]=d;return +(+p[t>>3])}function gsa(a,b){a=+a;b=+b;return +(+fsa(a,b))}function hsa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0,h=0.0,i=0.0,j=0,l=0.0,m=0,n=0.0,o=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=b&2147483647;d=SEa(k[t>>2]|0,b|0,63)|0;do if(c>>>0>1078159481){e=+$(+a);p[t>>3]=e;b=k[t+4>>2]|0;if(!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0))if(!d)if(a>709.782712893384)f=a*8988465674311579538646525.0e283;else g=11;else f=-1.0;else f=a}else{if(c>>>0<=1071001154)if(c>>>0<1016070144){f=a;break}else{h=a;i=0.0;j=0;g=14;break}if(c>>>0<1072734898)if(!d){l=a+-.6931471803691238;m=1;n=1.9082149292705877e-10;g=12;break}else{l=a+.6931471803691238;m=-1;n=-1.9082149292705877e-10;g=12;break}else g=11}while(0);if((g|0)==11){c=~~(a*1.4426950408889634+((d|0)!=0?-.5:.5));e=+(c|0);l=a-e*.6931471803691238;m=c;n=e*1.9082149292705877e-10;g=12}if((g|0)==12){e=l-n;h=e;i=l-e-n;j=m;g=14}a:do if((g|0)==14){n=h*.5;e=h*n;l=e*(e*(e*(e*(4.008217827329362e-06-e*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;a=3.0-n*l;n=e*((l-a)/(6.0-h*a));if(!j){f=h-(h*n-e);break}a=h*(n-i)-i-e;switch(j|0){case -1:{f=(h-a)*.5+-.5;break a;break}case 1:{if(h<-.25){f=(a-(h+.5))*-2.0;break a}else{f=(h-a)*2.0+1.0;break a}break}default:{m=XEa(j+1023|0,0,52)|0;c=Q;k[t>>2]=m;k[t+4>>2]=c;e=+p[t>>3];if(j>>>0>56){n=h-a+1.0;f=((j|0)==1024?n*2.0*8988465674311579538646525.0e283:e*n)+-1.0;break a}c=XEa(1023-j|0,0,52)|0;m=Q;if((j|0)<20){k[t>>2]=c;k[t+4>>2]=m;o=1.0-+p[t>>3]+(h-a)}else{k[t>>2]=c;k[t+4>>2]=m;o=h-(+p[t>>3]+a)+1.0}f=e*o;break a}}}while(0);return +f}function isa(a,b){a=+a;b=+b;var c=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0,l=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=+$(+a);p[t>>3]=e;f=k[t+4>>2]|0;do if(!(f>>>0>2146435072|(f|0)==2146435072&(k[t>>2]|0)>>>0>0)){e=+$(+b);p[t>>3]=e;g=k[t+4>>2]|0;if(!(g>>>0>2146435072|(g|0)==2146435072&(k[t>>2]|0)>>>0>0)){p[t>>3]=b;g=k[t>>2]|0;h=k[t+4>>2]|0;i=SEa(c|0,d|0,63)|0;j=SEa(g|0,h|0,63)|0;if((i|0)==(j|0)){l=a<b?b:a;break}else{l=(d|0)<0?b:a;break}}else l=a}else l=b;while(0);return +l}function jsa(a,b){a=+a;b=+b;var c=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0,l=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=+$(+a);p[t>>3]=e;f=k[t+4>>2]|0;do if(!(f>>>0>2146435072|(f|0)==2146435072&(k[t>>2]|0)>>>0>0)){e=+$(+b);p[t>>3]=e;g=k[t+4>>2]|0;if(!(g>>>0>2146435072|(g|0)==2146435072&(k[t>>2]|0)>>>0>0)){p[t>>3]=b;g=k[t>>2]|0;h=k[t+4>>2]|0;i=SEa(c|0,d|0,63)|0;j=SEa(g|0,h|0,63)|0;if((i|0)==(j|0)){l=a<b?a:b;break}else{l=(d|0)<0?a:b;break}}else l=a}else l=b;while(0);return +l}function ksa(a,b){a=+a;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0,o=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;p[t>>3]=b;e=k[t>>2]|0;f=k[t+4>>2]|0;g=SEa(c|0,d|0,52)|0;h=g&2047;g=SEa(e|0,f|0,52)|0;i=g&2047;g=d&-2147483648;j=XEa(e|0,f|0,1)|0;l=Q;a:do if(!((j|0)==0&(l|0)==0)?(m=+$(+b),p[t>>3]=m,n=k[t+4>>2]|0,!(n>>>0>2146435072|(n|0)==2146435072&(k[t>>2]|0)>>>0>0|(h|0)==2047)):0){n=XEa(c|0,d|0,1)|0;o=Q;if(!(o>>>0>l>>>0|(o|0)==(l|0)&n>>>0>j>>>0))return +((n|0)==(j|0)&(o|0)==(l|0)?a*0.0:a);if(!h){o=XEa(c|0,d|0,12)|0;n=Q;if((n|0)>-1|(n|0)==-1&o>>>0>4294967295){q=o;o=n;n=0;while(1){r=n+-1|0;q=XEa(q|0,o|0,1)|0;o=Q;if(!((o|0)>-1|(o|0)==-1&q>>>0>4294967295)){s=r;break}else n=r}}else s=0;n=XEa(c|0,d|0,1-s|0)|0;u=n;v=Q;w=s}else{u=c;v=d&1048575|1048576;w=h}if(!i){n=XEa(e|0,f|0,12)|0;q=Q;if((q|0)>-1|(q|0)==-1&n>>>0>4294967295){o=n;n=q;q=0;while(1){r=q+-1|0;o=XEa(o|0,n|0,1)|0;n=Q;if(!((n|0)>-1|(n|0)==-1&o>>>0>4294967295)){x=r;break}else q=r}}else x=0;q=XEa(e|0,f|0,1-x|0)|0;y=q;z=Q;A=x}else{y=e;z=f&1048575|1048576;A=i}q=REa(u|0,v|0,y|0,z|0)|0;o=Q;n=(o|0)>-1|(o|0)==-1&q>>>0>4294967295;b:do if((w|0)>(A|0)){r=n;B=q;C=o;D=u;E=v;F=w;while(1){if(r)if((D|0)==(y|0)&(E|0)==(z|0))break;else{G=B;H=C}else{G=D;H=E}I=XEa(G|0,H|0,1)|0;J=Q;K=F+-1|0;L=REa(I|0,J|0,y|0,z|0)|0;M=Q;N=(M|0)>-1|(M|0)==-1&L>>>0>4294967295;if((K|0)>(A|0)){r=N;B=L;C=M;D=I;E=J;F=K}else{O=N;P=I;R=J;S=L;T=M;U=K;break b}}V=a*0.0;break a}else{O=n;P=u;R=v;S=q;T=o;U=w}while(0);if(O)if((P|0)==(y|0)&(R|0)==(z|0)){V=a*0.0;break}else{W=T;X=S}else{W=R;X=P}if(W>>>0<1048576|(W|0)==1048576&X>>>0<0){o=X;q=W;n=U;while(1){F=XEa(o|0,q|0,1)|0;E=Q;D=n+-1|0;if(E>>>0<1048576|(E|0)==1048576&F>>>0<0){o=F;q=E;n=D}else{Y=F;Z=E;_=D;break}}}else{Y=X;Z=W;_=U}if((_|0)>0){n=QEa(Y|0,Z|0,0,-1048576)|0;q=Q;o=XEa(_|0,0,52)|0;aa=q|Q;ba=n|o}else{o=SEa(Y|0,Z|0,1-_|0)|0;aa=Q;ba=o}k[t>>2]=ba;k[t+4>>2]=aa|g;V=+p[t>>3]}else ca=3;while(0);if((ca|0)==3){m=a*b;V=m/m}return +V}function lsa(a,b){a=+a;b=+b;return +(+ksa(a,b))}function msa(a,b){a=+a;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0.0;p[t>>3]=a;c=k[t>>2]|0;d=k[t+4>>2]|0;e=SEa(c|0,d|0,52)|0;f=e&2047;switch(f|0){case 0:{if(a!=0.0){g=+msa(a*18446744073709551616.0,b);h=g;i=(k[b>>2]|0)+-64|0}else{h=a;i=0}k[b>>2]=i;j=h;break}case 2047:{j=a;break}default:{k[b>>2]=f+-1022;k[t>>2]=c;k[t+4>>2]=d&-2146435073|1071644672;j=+p[t>>3]}}return +j}function nsa(a,b){a=+a;b=b|0;return +(+msa(a,b))}function osa(a,b){a=+a;b=b|0;return +(+qsa(a,b))}function psa(a){a=+a;var b=0,c=0,d=0,e=0.0,f=0.0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0;p[t>>3]=a;b=k[t>>2]|0;c=k[t+4>>2]|0;d=(c|0)<0;do if(d|c>>>0<1048576){e=+$(+a);p[t>>3]=e;if((k[t>>2]|0)==0&(k[t+4>>2]|0)==0){f=-1.0/(a*a);break}if(d){f=(a-a)/0.0;break}else{p[t>>3]=a*18014398509481984.0;g=k[t+4>>2]|0;h=k[t>>2]|0;i=g;j=g;l=-1077;m=9;break}}else if(c>>>0<=2146435071)if((b|0)==0&0==0&(c|0)==1072693248)f=0.0;else{h=b;i=c;j=c;l=-1023;m=9}else f=a;while(0);if((m|0)==9){m=j+614242|0;k[t>>2]=h;k[t+4>>2]=(m&1048575)+1072079006;a=+p[t>>3]+-1.0;e=a*(a*.5);n=a/(a+2.0);o=n*n;q=o*o;p[t>>3]=a-e;h=k[t+4>>2]|0;k[t>>2]=0;k[t+4>>2]=h;r=+p[t>>3];s=a-r-e+n*(e+(q*(q*(q*.15313837699209373+.22222198432149784)+.3999999999940942)+o*(q*(q*(q*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));q=r*.4342944818781689;o=+(l+(m>>>20)|0);e=o*.30102999566361177;n=e+q;f=n+(q+(e-n)+(s*.4342944818781689+(o*3.694239077158931e-13+(r+s)*2.5082946711645275e-11)))}return +f}function qsa(a,b){a=+a;b=b|0;var c=0.0,d=0,e=0,f=0,g=0.0;if((b|0)>1023){c=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){e=b+-2046|0;f=(e|0)>1023?1023:e;g=c*8988465674311579538646525.0e283}else{f=d;g=c}}else if((b|0)<-1022){c=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){e=b+2044|0;f=(e|0)<-1022?-1022:e;g=c*2.2250738585072014e-308}else{f=d;g=c}}else{f=b;g=a}b=XEa(f+1023|0,0,52)|0;f=Q;k[t>>2]=b;k[t+4>>2]=f;return +(g*+p[t>>3])}function rsa(a,b){a=+a;b=b|0;return +(+qsa(a,b))}function ssa(a){a=+a;var b=0,c=0.0,d=0,e=0.0;p[t>>3]=a;b=k[t+4>>2]|0;c=+$(+a);p[t>>3]=c;d=k[t+4>>2]|0;do if(d>>>0>1071748074)if(d>>>0>1077149696){e=1.0-0.0/c;break}else{e=1.0-2.0/(+hsa(c*2.0)+2.0);break}else{if(d>>>0>1070618798){a=+hsa(c*2.0);e=a/(a+2.0);break}if(d>>>0>1048575){a=+hsa(c*-2.0);e=-a/(a+2.0)}else e=c}while(0);return +((b|0)<0?-e:e)}function tsa(a,b,c){a=a|0;b=b|0;c=c|0;return usa(0,a,b,(c|0)!=0?c:42536)|0}function usa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;e=r;r=r+16|0;f=e;g=(d|0)==0?42540:d;d=k[g>>2]|0;a:do if(!b)if(!d)h=0;else j=15;else{l=(a|0)==0?f:a;if(!c)h=-2;else{if(!d){m=i[b>>0]|0;n=m&255;if(m<<24>>24>-1){k[l>>2]=n;h=m<<24>>24!=0&1;break}m=n+-194|0;if(m>>>0>50){j=15;break}n=k[42268+(m<<2)>>2]|0;m=c+-1|0;if(!m)o=n;else{p=m;q=n;s=b+1|0;j=9}}else{p=c;q=d;s=b;j=9}b:do if((j|0)==9){n=i[s>>0]|0;m=(n&255)>>>3;if((m+-16|m+(q>>26))>>>0>7){j=15;break a}else{t=p;u=n;v=q;w=s}while(1){w=w+1|0;v=(u&255)+-128|v<<6;t=t+-1|0;if((v|0)>=0){x=v;y=t;break}if(!t){o=v;break b}u=i[w>>0]|0;if((u&-64)<<24>>24!=-128){j=15;break a}}k[g>>2]=0;k[l>>2]=x;h=c-y|0;break a}while(0);k[g>>2]=o;h=-2}}while(0);if((j|0)==15){k[g>>2]=0;g=Sra()|0;k[g>>2]=84;h=-1}r=e;return h|0}function vsa(a){a=a|0;var b=0;if(!a)b=1;else b=(k[a>>2]|0)==0;return b&1|0}function wsa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;f=r;r=r+1040|0;g=f+8|0;h=f;i=k[b>>2]|0;k[h>>2]=i;j=(a|0)!=0;l=j?d:256;d=j?a:g;a=i;a:do if((l|0)!=0&(i|0)!=0){m=c;n=l;o=a;p=0;q=d;while(1){s=m>>>2;t=s>>>0>=n>>>0;if(!(m>>>0>131|t)){u=m;v=n;w=o;x=p;y=q;break a}z=t?n:s;s=m-z|0;t=xsa(q,h,z,e)|0;if((t|0)==-1){A=s;B=q;break}z=(q|0)==(g|0);C=z?0:t;D=n-C|0;E=z?q:q+(t<<2)|0;z=t+p|0;t=k[h>>2]|0;if((n|0)!=(C|0)&(t|0)!=0){m=s;n=D;o=t;p=z;q=E}else{u=s;v=D;w=t;x=z;y=E;break a}}u=A;v=0;w=k[h>>2]|0;x=-1;y=B}else{u=c;v=l;w=a;x=0;y=d}while(0);b:do if((w|0)!=0?(v|0)!=0&(u|0)!=0:0){d=u;a=v;l=w;c=x;B=y;while(1){A=usa(B,l,d,e)|0;if((A+2|0)>>>0<3){F=A;G=c;break}l=(k[h>>2]|0)+A|0;k[h>>2]=l;a=a+-1|0;g=c+1|0;if(!((a|0)!=0&(d|0)!=(A|0))){H=g;break b}else{d=d-A|0;c=g;B=B+4|0}}switch(F|0){case -1:{H=-1;break b;break}case 0:{k[h>>2]=0;H=G;break b;break}default:{k[e>>2]=0;H=G;break b}}}else H=x;while(0);if(j)k[b>>2]=k[h>>2];r=f;return H|0}function xsa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=k[b>>2]|0;if((d|0)!=0?(f=k[d>>2]|0,(f|0)!=0):0)if(!a){g=c;h=f;j=e;m=16}else{k[d>>2]=0;n=a;o=c;p=f;q=e;m=37}else if(!a){r=c;s=e;m=7}else{t=a;u=c;v=e;m=6}a:while(1)if((m|0)==6){m=0;if(!u){w=v;m=26;break}else{x=t;y=u;z=v}while(1){e=i[z>>0]|0;do if(((e&255)+-1|0)>>>0<127?y>>>0>4&(z&3|0)==0:0){f=x;d=y;A=z;while(1){B=k[A>>2]|0;if((B+-16843009|B)&-2139062144){C=f;D=d;E=B;F=A;m=32;break}k[f>>2]=B&255;k[f+4>>2]=l[A+1>>0];k[f+8>>2]=l[A+2>>0];B=A+4|0;G=f+16|0;k[f+12>>2]=l[A+3>>0];H=d+-4|0;if(H>>>0>4){f=G;d=H;A=B}else{I=B;J=G;K=H;m=31;break}}if((m|0)==31){m=0;L=J;M=K;N=i[I>>0]|0;O=I;break}else if((m|0)==32){m=0;L=C;M=D;N=E&255;O=F;break}}else{L=x;M=y;N=e;O=z}while(0);e=N&255;if((e+-1|0)>>>0>=127){P=L;Q=M;R=e;S=O;break}A=O+1|0;k[L>>2]=e;y=M+-1|0;if(!y){w=A;m=26;break a}else{x=L+4|0;z=A}}A=R+-194|0;if(A>>>0>50){T=P;U=Q;V=S;m=48;break}n=P;o=Q;p=k[42268+(A<<2)>>2]|0;q=S+1|0;m=37;continue}else if((m|0)==7){m=0;A=i[s>>0]|0;if(((A&255)+-1|0)>>>0<127?(s&3|0)==0:0){e=k[s>>2]|0;d=e&255;if(!((e+-16843009|e)&-2139062144)){e=r;f=s;while(1){H=f+4|0;G=e+-4|0;B=k[H>>2]|0;if(!((B+-16843009|B)&-2139062144)){e=G;f=H}else{W=H;X=G;Y=B;break}}Z=X;_=Y&255;$=W}else{Z=r;_=d;$=s}}else{Z=r;_=A;$=s}f=_&255;if((f+-1|0)>>>0<127){r=Z+-1|0;s=$+1|0;m=7;continue}else{aa=Z;ba=f;ca=$}f=ba+-194|0;if(f>>>0>50){T=a;U=aa;V=ca;m=48;break}g=aa;h=k[42268+(f<<2)>>2]|0;j=ca+1|0;m=16;continue}else if((m|0)==16){m=0;f=(l[j>>0]|0)>>>3;if((f+-16|f+(h>>26))>>>0>7){m=17;break}f=j+1|0;if(h&33554432){if((i[f>>0]&-64)<<24>>24!=-128){m=20;break}e=j+2|0;if(!(h&524288))da=e;else{if((i[e>>0]&-64)<<24>>24!=-128){m=23;break}da=j+3|0}}else da=f;r=g+-1|0;s=da;m=7;continue}else if((m|0)==37){m=0;f=l[q>>0]|0;e=f>>>3;if((e+-16|e+(p>>26))>>>0>7){m=38;break}e=q+1|0;B=f+-128|p<<6;if((B|0)<0){f=l[e>>0]|0;if((f&192|0)!=128){m=41;break}G=q+2|0;H=f+-128|B<<6;if((H|0)<0){f=l[G>>0]|0;if((f&192|0)!=128){m=44;break}ea=f+-128|H<<6;fa=q+3|0}else{ea=H;fa=G}}else{ea=B;fa=e}k[n>>2]=ea;t=n+4|0;u=o+-1|0;v=fa;m=6;continue}if((m|0)==17){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==20){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==23){ga=a;ha=g;ia=h;ja=j+-1|0;m=47}else if((m|0)==26){k[b>>2]=w;ka=c}else if((m|0)==38){ga=n;ha=o;ia=p;ja=q+-1|0;m=47}else if((m|0)==41){la=n;ma=q+-1|0;m=52}else if((m|0)==44){la=n;ma=q+-1|0;m=52}if((m|0)==47)if(!ia){T=ga;U=ha;V=ja;m=48}else{la=ga;ma=ja;m=52}if((m|0)==48)if(!(i[V>>0]|0)){if(T){k[T>>2]=0;k[b>>2]=0}ka=c-U|0}else{la=T;ma=V;m=52}if((m|0)==52){m=Sra()|0;k[m>>2]=84;if(!la)ka=-1;else{k[b>>2]=ma;ka=-1}}return ka|0}function ysa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0;d=r;r=r+16|0;e=d;a:do if(!b)f=0;else{do if(c){g=(a|0)==0?e:a;h=i[b>>0]|0;j=h&255;if(h<<24>>24>-1){k[g>>2]=j;f=h<<24>>24!=0&1;break a}h=j+-194|0;if(h>>>0<=50){j=b+1|0;m=k[42268+(h<<2)>>2]|0;if(c>>>0<4?(m&-2147483648>>>((c*6|0)+-6|0)|0)!=0:0)break;h=l[j>>0]|0;j=h>>>3;if((j+-16|j+(m>>26))>>>0<=7){j=h+-128|m<<6;if((j|0)>=0){k[g>>2]=j;f=2;break a}m=l[b+2>>0]|0;if((m&192|0)==128){h=m+-128|j<<6;if((h|0)>=0){k[g>>2]=h;f=3;break a}j=l[b+3>>0]|0;if((j&192|0)==128){k[g>>2]=j+-128|h<<6;f=4;break a}}}}}while(0);h=Sra()|0;k[h>>2]=84;f=-1}while(0);r=d;return f|0}function zsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;do if(a){if(b>>>0<128){i[a>>0]=b;d=1;break}if(b>>>0<2048){i[a>>0]=b>>>6|192;i[a+1>>0]=b&63|128;d=2;break}if(b>>>0<55296|(b&-8192|0)==57344){i[a>>0]=b>>>12|224;i[a+1>>0]=b>>>6&63|128;i[a+2>>0]=b&63|128;d=3;break}if((b+-65536|0)>>>0<1048576){i[a>>0]=b>>>18|240;i[a+1>>0]=b>>>12&63|128;i[a+2>>0]=b>>>6&63|128;i[a+3>>0]=b&63|128;d=4;break}else{c=Sra()|0;k[c>>2]=84;d=-1;break}}else d=1;while(0);return d|0}function Asa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;e=r;r=r+272|0;f=e+8|0;g=e;h=k[b>>2]|0;k[g>>2]=h;i=(a|0)!=0;j=i?d:256;d=i?a:f;a=h;a:do if((j|0)!=0&(h|0)!=0){l=c;m=j;n=a;o=0;p=d;while(1){q=l>>>0>=m>>>0;if(!(q|l>>>0>32)){s=l;t=m;u=n;v=o;w=p;break a}x=q?m:l;q=l-x|0;y=Bsa(p,g,x,0)|0;if((y|0)==-1){z=q;A=p;break}x=(p|0)==(f|0);B=x?0:y;C=m-B|0;D=x?p:p+y|0;x=y+o|0;y=k[g>>2]|0;if((m|0)!=(B|0)&(y|0)!=0){l=q;m=C;n=y;o=x;p=D}else{s=q;t=C;u=y;v=x;w=D;break a}}s=z;t=0;u=k[g>>2]|0;v=-1;w=A}else{s=c;t=j;u=a;v=0;w=d}while(0);b:do if((u|0)!=0?(t|0)!=0&(s|0)!=0:0){d=s;a=t;j=u;c=v;A=w;while(1){z=zsa(A,k[j>>2]|0,0)|0;if((z+1|0)>>>0<2){E=z;F=c;break}j=(k[g>>2]|0)+4|0;k[g>>2]=j;d=d+-1|0;f=c+1|0;if(!((a|0)!=(z|0)&(d|0)!=0)){G=f;break b}else{a=a-z|0;c=f;A=A+z|0}}if(!E){k[g>>2]=0;G=F}else G=-1}else G=v;while(0);if(i)k[b>>2]=k[g>>2];r=e;return G|0}function Bsa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;d=r;r=r+16|0;e=d;a:do if(!a){f=k[b>>2]|0;g=k[f>>2]|0;if(!g)h=0;else{j=0;l=g;g=f;while(1){if(l>>>0>127){f=zsa(e,l,0)|0;if((f|0)==-1){h=-1;break a}else m=f}else m=1;f=m+j|0;g=g+4|0;l=k[g>>2]|0;if(!l){h=f;break}else j=f}}}else{b:do if(c>>>0>3){j=a;l=c;g=k[b>>2]|0;while(1){f=k[g>>2]|0;if((f+-1|0)>>>0>126){if(!f){n=j;o=l;break}p=zsa(j,f,0)|0;if((p|0)==-1){h=-1;break a}q=j+p|0;s=l-p|0;t=g}else{i[j>>0]=f;q=j+1|0;s=l+-1|0;t=k[b>>2]|0}g=t+4|0;k[b>>2]=g;if(s>>>0<=3){u=q;v=s;break b}else{j=q;l=s}}i[n>>0]=0;k[b>>2]=0;h=c-o|0;break a}else{u=a;v=c}while(0);if(v){l=u;j=v;g=k[b>>2]|0;while(1){f=k[g>>2]|0;if((f+-1|0)>>>0>126){if(!f){w=l;x=j;y=19;break}p=zsa(e,f,0)|0;if((p|0)==-1){h=-1;break a}if(j>>>0<p>>>0){z=j;y=22;break}zsa(l,k[g>>2]|0,0)|0;A=l+p|0;B=j-p|0;C=g}else{i[l>>0]=f;A=l+1|0;B=j+-1|0;C=k[b>>2]|0}g=C+4|0;k[b>>2]=g;if(!B){h=c;break a}else{l=A;j=B}}if((y|0)==19){i[w>>0]=0;k[b>>2]=0;h=c-x|0;break}else if((y|0)==22){h=c-z|0;break}}else h=c}while(0);r=d;return h|0}function Csa(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=zsa(a,b,0)|0;return c|0}function Dsa(a){a=a|0;var b=0;b=25360;k[b>>2]=a+-1;k[b+4>>2]=0;return}function Esa(){var a=0,b=0,c=0;a=25360;b=bFa(k[a>>2]|0,k[a+4>>2]|0,1284865837,1481765933)|0;a=QEa(b|0,Q|0,1,0)|0;b=Q;c=25360;k[c>>2]=a;k[c+4>>2]=b;c=SEa(a|0,b|0,33)|0;return c|0}function Fsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=r;r=r+112|0;d=c+40|0;e=c+24|0;f=c+16|0;g=c;h=c+52|0;j=i[b>>0]|0;if(Dta(154469,j<<24>>24,4)|0){l=lua(1144)|0;if(!l)m=0;else{n=l;o=n+112|0;do{k[n>>2]=0;n=n+4|0}while((n|0)<(o|0));if(!(Gta(b,43)|0))k[l>>2]=j<<24>>24==114?8:4;if(!(Gta(b,101)|0))p=j;else{k[g>>2]=a;k[g+4>>2]=2;k[g+8>>2]=1;Wb(221,g|0)|0;p=i[b>>0]|0}if(p<<24>>24==97){k[f>>2]=a;k[f+4>>2]=3;p=Wb(221,f|0)|0;if(!(p&1024)){k[e>>2]=a;k[e+4>>2]=4;k[e+8>>2]=p|1024;Wb(221,e|0)|0}e=k[l>>2]|128;k[l>>2]=e;q=e}else q=k[l>>2]|0;k[l+60>>2]=a;k[l+44>>2]=l+120;k[l+48>>2]=1024;e=l+75|0;i[e>>0]=-1;if((q&8|0)==0?(k[d>>2]=a,k[d+4>>2]=21505,k[d+8>>2]=h,(qb(54,d|0)|0)==0):0)i[e>>0]=10;k[l+32>>2]=20;k[l+36>>2]=18;k[l+40>>2]=19;k[l+12>>2]=363;if(!(k[10557]|0))k[l+76>>2]=-1;lc(42252);e=k[10562]|0;k[l+56>>2]=e;if(e)k[e+52>>2]=l;k[10562]=l;dc(42252);m=l}}else{l=Sra()|0;k[l>>2]=22;m=0}r=c;return m|0}function Gsa(a){a=a|0;var b=0,c=0,d=0,e=0;b=(Gta(a,43)|0)==0;c=i[a>>0]|0;d=b?c<<24>>24!=114&1:2;b=(Gta(a,120)|0)==0;e=b?d:d|128;d=(Gta(a,101)|0)==0;a=d?e:e|524288;e=c<<24>>24==114?a:a|64;a=c<<24>>24==119?e|512:e;return (c<<24>>24==97?a|1024:a)|0}function Hsa(a){a=a|0;return 0}function Isa(a){a=a|0;return}function Jsa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0;c=r;r=r+16|0;d=c;e=b&255;i[d>>0]=e;f=a+16|0;g=k[f>>2]|0;if(!g)if(!(Rsa(a)|0)){h=k[f>>2]|0;j=4}else m=-1;else{h=g;j=4}do if((j|0)==4){g=a+20|0;f=k[g>>2]|0;if(f>>>0<h>>>0?(n=b&255,(n|0)!=(i[a+75>>0]|0)):0){k[g>>2]=f+1;i[f>>0]=e;m=n;break}if((Rc[k[a+36>>2]&63](a,d,1)|0)==1)m=l[d>>0]|0;else m=-1}while(0);r=c;return m|0}function Ksa(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=k[a+60>>2];a=Yra(sb(6,c|0)|0)|0;r=b;return a|0}function Lsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+48|0;e=d+16|0;f=d;g=d+32|0;k[g>>2]=b;h=g+4|0;j=a+48|0;l=k[j>>2]|0;k[h>>2]=c-((l|0)!=0&1);m=a+44|0;k[g+8>>2]=k[m>>2];k[g+12>>2]=l;if(!(k[10556]|0)){k[e>>2]=k[a+60>>2];k[e+4>>2]=g;k[e+8>>2]=2;n=Yra(wc(145,e|0)|0)|0}else{rb(548,a|0);k[f>>2]=k[a+60>>2];k[f+4>>2]=g;k[f+8>>2]=2;g=Yra(wc(145,f|0)|0)|0;jb(0);n=g}if((n|0)>=1){g=k[h>>2]|0;if(n>>>0>g>>>0){h=k[m>>2]|0;m=a+4|0;k[m>>2]=h;f=h;k[a+8>>2]=f+(n-g);if(!(k[j>>2]|0))o=c;else{k[m>>2]=f+1;i[b+(c+-1)>>0]=i[f>>0]|0;o=c}}else o=n}else{k[a>>2]=k[a>>2]|n&48^16;k[a+8>>2]=0;k[a+4>>2]=0;o=n}r=d;return o|0}function Msa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+32|0;e=d;f=d+20|0;k[e>>2]=k[a+60>>2];k[e+4>>2]=0;k[e+8>>2]=b;k[e+12>>2]=f;k[e+16>>2]=c;if((Yra(uc(140,e|0)|0)|0)<0){k[f>>2]=-1;g=-1}else g=k[f>>2]|0;r=d;return g|0}function Nsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;d=r;r=r+48|0;e=d+16|0;f=d;g=d+32|0;h=a+28|0;i=k[h>>2]|0;k[g>>2]=i;j=a+20|0;l=(k[j>>2]|0)-i|0;k[g+4>>2]=l;k[g+8>>2]=b;k[g+12>>2]=c;b=a+60|0;i=a+44|0;m=g;g=2;n=l+c|0;while(1){if(!(k[10556]|0)){k[e>>2]=k[b>>2];k[e+4>>2]=m;k[e+8>>2]=g;o=Yra(xc(146,e|0)|0)|0}else{rb(549,a|0);k[f>>2]=k[b>>2];k[f+4>>2]=m;k[f+8>>2]=g;l=Yra(xc(146,f|0)|0)|0;jb(0);o=l}if((n|0)==(o|0)){p=6;break}if((o|0)<0){q=m;s=g;p=8;break}l=n-o|0;t=k[m+4>>2]|0;if(o>>>0<=t>>>0)if((g|0)==2){k[h>>2]=(k[h>>2]|0)+o;u=t;v=o;w=m;x=2}else{u=t;v=o;w=m;x=g}else{y=k[i>>2]|0;k[h>>2]=y;k[j>>2]=y;u=k[m+12>>2]|0;v=o-t|0;w=m+8|0;x=g+-1|0}k[w>>2]=(k[w>>2]|0)+v;k[w+4>>2]=u-v;m=w;g=x;n=l}if((p|0)==6){n=k[i>>2]|0;k[a+16>>2]=n+(k[a+48>>2]|0);i=n;k[h>>2]=i;k[j>>2]=i;z=c}else if((p|0)==8){k[a+16>>2]=0;k[h>>2]=0;k[j>>2]=0;k[a>>2]=k[a>>2]|32;if((s|0)==2)z=0;else z=c-(k[q+4>>2]|0)|0}r=d;return z|0}function Osa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+80|0;e=d;k[a+36>>2]=18;if((k[a>>2]&64|0)==0?(k[e>>2]=k[a+60>>2],k[e+4>>2]=21505,k[e+8>>2]=d+12,(qb(54,e|0)|0)!=0):0)i[a+75>>0]=-1;e=Nsa(a,b,c)|0;r=d;return e|0}function Psa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+84|0;e=k[d>>2]|0;f=c+256|0;g=Dta(e,0,f)|0;h=(g|0)==0?f:g-e|0;g=h>>>0<c>>>0?h:c;TEa(b|0,e|0,g|0)|0;k[a+4>>2]=e+g;b=e+h|0;k[a+8>>2]=b;k[d>>2]=b;return g|0}function Qsa(a){a=a|0;var b=0,c=0,d=0;b=a+74|0;c=i[b>>0]|0;i[b>>0]=c+255|c;c=a+20|0;b=a+44|0;if((k[c>>2]|0)>>>0>(k[b>>2]|0)>>>0)Rc[k[a+36>>2]&63](a,0,0)|0;k[a+16>>2]=0;k[a+28>>2]=0;k[c>>2]=0;c=k[a>>2]|0;if(c&20)if(!(c&4))d=-1;else{k[a>>2]=c|32;d=-1}else{c=k[b>>2]|0;k[a+8>>2]=c;k[a+4>>2]=c;d=0}return d|0}function Rsa(a){a=a|0;var b=0,c=0,d=0;b=a+74|0;c=i[b>>0]|0;i[b>>0]=c+255|c;c=k[a>>2]|0;if(!(c&8)){k[a+8>>2]=0;k[a+4>>2]=0;b=k[a+44>>2]|0;k[a+28>>2]=b;k[a+20>>2]=b;k[a+16>>2]=b+(k[a+48>>2]|0);d=0}else{k[a>>2]=c|32;d=-1}return d|0}function Ssa(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;if((k[a+8>>2]|0)==0?(Qsa(a)|0)!=0:0)d=-1;else if((Rc[k[a+32>>2]&63](a,c,1)|0)==1)d=l[c>>0]|0;else d=-1;r=b;return d|0}function Tsa(a){a=a|0;var b=0,c=0,d=0,e=0;b=(k[a>>2]&1|0)!=0;if(!b){lc(42252);c=k[a+52>>2]|0;d=a+56|0;if(c)k[c+56>>2]=k[d>>2];e=k[d>>2]|0;if(e)k[e+52>>2]=c;if((k[10562]|0)==(a|0))k[10562]=e;dc(42252)}e=Usa(a)|0;c=Hc[k[a+12>>2]&511](a)|0|e;e=k[a+92>>2]|0;if(e)mua(e);if(!b)mua(a);return c|0}function Usa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;do if(a){if((k[a+76>>2]|0)<=-1){b=Xta(a)|0;break}c=(Hsa(a)|0)==0;d=Xta(a)|0;if(c)b=d;else{Isa(a);b=d}}else{if(!(k[10621]|0))e=0;else e=Usa(k[10621]|0)|0;lc(42252);d=k[10562]|0;if(!d)f=e;else{c=d;d=e;while(1){if((k[c+76>>2]|0)>-1)g=Hsa(c)|0;else g=0;if((k[c+20>>2]|0)>>>0>(k[c+28>>2]|0)>>>0)h=Xta(c)|0|d;else h=d;if(g)Isa(c);c=k[c+56>>2]|0;if(!c){f=h;break}else d=h}}dc(42252);b=f}while(0);return b|0}function Vsa(a,b){a=a|0;b=b|0;var c=0,d=0;c=gta(a)|0;if((c|0)<0)d=-1;else{k[b>>2]=c;d=0}return d|0}function Wsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((k[c+76>>2]|0)>-1)d=Hsa(c)|0;else d=0;e=b+-1|0;if((b|0)<2){b=c+74|0;f=i[b>>0]|0;i[b>>0]=f+255|f;if(d)Isa(c);if(!e){i[a>>0]=0;g=a}else g=0}else{a:do if(e){f=c+4|0;b=c+8|0;h=e;j=a;while(1){m=k[f>>2]|0;n=m;o=(k[b>>2]|0)-n|0;p=Dta(m,10,o)|0;q=(p|0)==0;r=q?o:1-n+p|0;p=r>>>0<h>>>0;n=p?r:h;TEa(j|0,m|0,n|0)|0;m=(k[f>>2]|0)+n|0;k[f>>2]=m;r=j+n|0;o=h-n|0;if(!(q&p)){s=r;t=17;break a}if(m>>>0>=(k[b>>2]|0)>>>0){p=Ssa(c)|0;if((p|0)<0){u=r;break}else v=p}else{k[f>>2]=m+1;v=l[m>>0]|0}h=o+-1|0;o=r+1|0;i[r>>0]=v;if(!((h|0)!=0&(v&255|0)!=10)){s=o;t=17;break a}else j=o}if((u|0)!=(a|0)?(k[c>>2]&16|0)!=0:0){s=u;t=17}else w=0}else{s=a;t=17}while(0);if((t|0)==17)if(!a)w=0;else{i[s>>0]=0;w=a}if(!d)g=w;else{Isa(c);g=w}}return g|0}function Xsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=(Gta(c,43)|0)==0;do if((b|0)!=0?(e=i[c>>0]|0,f=e<<24>>24,(Dta(154469,f,4)|0)!=0):0){if((a|0)==0&b>>>0>4294966151){g=Sra()|0;k[g>>2]=12;h=0;break}g=(a|0)!=0;j=nua(g?1164:b+1164|0,1)|0;if(!j)h=0;else{l=j+112|0;k[j+84>>2]=l;k[j+60>>2]=-1;i[j+75>>0]=-1;k[j+44>>2]=j+140;k[j+48>>2]=1024;m=g?a:j+1164|0;k[j+124>>2]=m;k[j+120>>2]=b;k[j+128>>2]=f;if(d)k[j>>2]=e<<24>>24==114?8:4;switch(e<<24>>24){case 114:{k[j+116>>2]=b;break}case 97:{e=Nta(m,b)|0;k[l>>2]=e;k[j+116>>2]=e;break}default:{}}k[j+32>>2]=46;k[j+36>>2]=47;k[j+40>>2]=48;k[j+12>>2]=440;if(!(k[10557]|0))k[j+76>>2]=-1;lc(42252);e=k[10562]|0;k[j+56>>2]=e;if(e)k[e+52>>2]=j;k[10562]=j;dc(42252);h=j}}else n=3;while(0);if((n|0)==3){n=Sra()|0;k[n>>2]=22;h=0}return h|0}function Ysa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c;if(Dta(154469,i[b>>0]|0,4)|0){f=Gsa(b)|0|32768;k[e>>2]=a;k[e+4>>2]=f;k[e+8>>2]=438;f=Yra(nc(5,e|0)|0)|0;if((f|0)>=0){e=Fsa(f,b)|0;if(!e){k[d>>2]=f;sb(6,d|0)|0;g=0}else g=e}else g=0}else{e=Sra()|0;k[e>>2]=22;g=0}r=c;return g|0}function Zsa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=uta(a,b,e)|0;r=d;return c|0}function _sa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;if((k[b+76>>2]|0)>=0?(Hsa(b)|0)!=0:0){if((i[b+75>>0]|0)!=(a|0)?(c=b+20|0,d=k[c>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[c>>2]=d+1;i[d>>0]=a;e=a&255}else e=Jsa(b,a)|0;Isa(b);f=e}else g=3;do if((g|0)==3){if((i[b+75>>0]|0)!=(a|0)?(e=b+20|0,d=k[e>>2]|0,d>>>0<(k[b+16>>2]|0)>>>0):0){k[e>>2]=d+1;i[d>>0]=a;f=a&255;break}f=Jsa(b,a)|0}while(0);return f|0}function $sa(a,b){a=a|0;b=b|0;return (jta(a,Lta(a)|0,1,b)|0)+-1|0}function ata(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=ma(c,b)|0;if((k[d+76>>2]|0)>-1)f=Hsa(d)|0;else f=0;g=d+74|0;h=i[g>>0]|0;i[g>>0]=h+255|h;h=d+4|0;g=k[h>>2]|0;j=(k[d+8>>2]|0)-g|0;l=g;if((j|0)>0){g=j>>>0<e>>>0?j:e;TEa(a|0,l|0,g|0)|0;k[h>>2]=l+g;m=a+g|0;n=e-g|0}else{m=a;n=e}a:do if(!n)o=13;else{a=d+32|0;g=m;l=n;while(1){if(Qsa(d)|0){p=l;break}h=Rc[k[a>>2]&63](d,g,l)|0;if((h+1|0)>>>0<2){p=l;break}if((l|0)==(h|0)){o=13;break a}else{g=g+h|0;l=l-h|0}}if(f)Isa(d);q=((e-p|0)>>>0)/(b>>>0)|0}while(0);if((o|0)==13)if(!f)q=c;else{Isa(d);q=c}return q|0}function bta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if((c|0)==1)d=b-(k[a+8>>2]|0)+(k[a+4>>2]|0)|0;else d=b;b=a+20|0;e=a+28|0;if((k[b>>2]|0)>>>0>(k[e>>2]|0)>>>0?(Rc[k[a+36>>2]&63](a,0,0)|0,(k[b>>2]|0)==0):0)f=-1;else{k[a+16>>2]=0;k[e>>2]=0;k[b>>2]=0;if((Rc[k[a+40>>2]&63](a,d,c)|0)<0)f=-1;else{k[a+8>>2]=0;k[a+4>>2]=0;k[a>>2]=k[a>>2]&-17;f=0}}return f|0}function cta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if((k[a+76>>2]|0)>-1){d=(Hsa(a)|0)==0;e=bta(a,b,c)|0;if(d)f=e;else{Isa(a);f=e}}else f=bta(a,b,c)|0;return f|0}function dta(a,b,c){a=a|0;b=b|0;c=c|0;return cta(a,b,c)|0}function eta(a,b){a=a|0;b=b|0;return cta(a,k[b>>2]|0,0)|0}function fta(a){a=a|0;var b=0,c=0,d=0;if(!(k[a>>2]&128))b=1;else b=(k[a+20>>2]|0)>>>0>(k[a+28>>2]|0)>>>0?2:1;c=Rc[k[a+40>>2]&63](a,0,b)|0;if((c|0)<0)d=c;else d=c-(k[a+8>>2]|0)+(k[a+4>>2]|0)+(k[a+20>>2]|0)-(k[a+28>>2]|0)|0;return d|0}function gta(a){a=a|0;var b=0,c=0,d=0;if((k[a+76>>2]|0)>-1){b=(Hsa(a)|0)==0;c=fta(a)|0;if(b)d=c;else d=c}else d=fta(a)|0;return d|0}function hta(a){a=a|0;return gta(a)|0}function ita(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c+16|0;e=k[d>>2]|0;if(!e)if(!(Rsa(c)|0)){f=k[d>>2]|0;g=5}else h=0;else{f=e;g=5}a:do if((g|0)==5){e=c+20|0;d=k[e>>2]|0;j=d;if((f-d|0)>>>0<b>>>0){h=Rc[k[c+36>>2]&63](c,a,b)|0;break}b:do if((i[c+75>>0]|0)>-1){d=b;while(1){if(!d){l=b;m=a;n=j;o=0;break b}p=d+-1|0;if((i[a+p>>0]|0)==10){q=d;break}else d=p}if((Rc[k[c+36>>2]&63](c,a,q)|0)>>>0<q>>>0){h=q;break a}l=b-q|0;m=a+q|0;n=k[e>>2]|0;o=q}else{l=b;m=a;n=j;o=0}while(0);TEa(n|0,m|0,l|0)|0;k[e>>2]=(k[e>>2]|0)+l;h=o+l|0}while(0);return h|0}function jta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=ma(c,b)|0;if((k[d+76>>2]|0)>-1){f=(Hsa(d)|0)==0;g=ita(a,e,d)|0;if(f)h=g;else{Isa(d);h=g}}else h=ita(a,e,d)|0;if((h|0)==(e|0))i=c;else i=(h>>>0)/(b>>>0)|0;return i|0}function kta(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;if((k[a+76>>2]|0)>=0?(Hsa(a)|0)!=0:0){b=a+4|0;c=k[b>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[b>>2]=c+1;d=l[c>>0]|0}else d=Ssa(a)|0;e=d}else f=3;do if((f|0)==3){d=a+4|0;c=k[d>>2]|0;if(c>>>0<(k[a+8>>2]|0)>>>0){k[d>>2]=c+1;e=l[c>>0]|0;break}else{e=Ssa(a)|0;break}}while(0);return e|0}function lta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=lua(1160)|0;if(!c)d=0;else{e=c;f=e+120|0;do{k[e>>2]=0;e=e+4|0}while((e|0)<(f|0));e=c+112|0;k[c+84>>2]=e;k[e>>2]=a;k[c+116>>2]=b;b=c+120|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[c>>2]=4;k[c+60>>2]=-1;k[c+44>>2]=c+136;k[c+48>>2]=1024;i[c+75>>0]=-1;k[c+36>>2]=49;k[c+40>>2]=50;k[c+12>>2]=441;if(!(k[10557]|0))k[c+76>>2]=-1;lc(42252);b=k[10562]|0;k[c+56>>2]=b;if(b)k[b+52>>2]=c;k[10562]=c;dc(42252);d=c}return d|0}function mta(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;b=uta(k[10620]|0,a,d)|0;r=c;return b|0}function nta(a){a=a|0;return _sa(a,k[10620]|0)|0}function ota(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=k[10620]|0;if((k[b+76>>2]|0)>-1)c=Hsa(b)|0;else c=0;do if(($sa(a,b)|0)<0)d=1;else{if((i[b+75>>0]|0)!=10?(e=b+20|0,f=k[e>>2]|0,f>>>0<(k[b+16>>2]|0)>>>0):0){k[e>>2]=f+1;i[f>>0]=10;d=0;break}d=(Jsa(b,10)|0)<0}while(0);if(c)Isa(b);return d<<31>>31|0}function pta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=wta(a,b,c,f)|0;r=e;return d|0}function qta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=xta(a,b,e)|0;r=d;return c|0}function rta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=r;r=r+16|0;e=d;k[e>>2]=c;c=yta(a,b,e)|0;r=d;return c|0}function sta(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=-1){if((k[b+76>>2]|0)>-1)c=Hsa(b)|0;else c=0;if(!((k[b+8>>2]|0)==0?(Qsa(b)|0)!=0:0))d=6;if((d|0)==6?(e=b+4|0,f=k[e>>2]|0,f>>>0>((k[b+44>>2]|0)+-8|0)>>>0):0){g=f+-1|0;k[e>>2]=g;i[g>>0]=a;k[b>>2]=k[b>>2]&-17;if(!c){h=a;break}Isa(b);h=a;break}if(c){Isa(b);h=-1}else h=-1}else h=-1;while(0);return h|0}function tta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;f=lua(240)|0;do if(f){k[e>>2]=k[c>>2];g=wta(f,240,b,e)|0;if(g>>>0<240){h=oua(f,g+1|0)|0;k[a>>2]=(h|0)!=0?h:f;i=g;break}mua(f);if((g|0)>=0?(h=g+1|0,g=lua(h)|0,k[a>>2]=g,(g|0)!=0):0)i=wta(g,h,b,c)|0;else i=-1}else i=-1;while(0);r=d;return i|0}function uta(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+224|0;e=d+120|0;f=d+80|0;g=d;h=d+136|0;j=f;l=j+40|0;do{k[j>>2]=0;j=j+4|0}while((j|0)<(l|0));k[e>>2]=k[c>>2];if((dua(0,b,e,g,f)|0)<0)m=-1;else{if((k[a+76>>2]|0)>-1)n=Hsa(a)|0;else n=0;c=k[a>>2]|0;j=c&32;if((i[a+74>>0]|0)<1)k[a>>2]=c&-33;c=a+48|0;if(!(k[c>>2]|0)){l=a+44|0;o=k[l>>2]|0;k[l>>2]=h;p=a+28|0;k[p>>2]=h;q=a+20|0;k[q>>2]=h;k[c>>2]=80;s=a+16|0;k[s>>2]=h+80;h=dua(a,b,e,g,f)|0;if(!o)t=h;else{Rc[k[a+36>>2]&63](a,0,0)|0;u=(k[q>>2]|0)==0?-1:h;k[l>>2]=o;k[c>>2]=0;k[s>>2]=0;k[p>>2]=0;k[q>>2]=0;t=u}}else t=dua(a,b,e,g,f)|0;f=k[a>>2]|0;k[a>>2]=f|j;if(n)Isa(a);m=(f&32|0)==0?t:-1}r=d;return m|0}
+-function qN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80946,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function rN(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,144350,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,80946,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,144370,27);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function sN(a,b,c){a=a|0;b=+b;c=c|0;return}function tN(a,b,c){a=a|0;b=b|0;c=c|0;return}function uN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,118532,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80946,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,118553,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function vN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80946,87);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function wN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function xN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function yN(a,b,c){a=a|0;b=+b;c=c|0;return}function zN(a,b,c){a=a|0;b=b|0;c=c|0;return}function AN(a,b,c){a=a|0;b=b|0;c=c|0;uN(a+-4|0,b,c)}function BN(a,b,c){a=a|0;b=b|0;c=c|0;vN(a+-4|0,b,c)}function CN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(b){DN(a,b);r=c;return}c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(c);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(b);m=p;n=o;break}Yua(d);B=0;o=Ia(40,e|0,81034,38)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,81073,79);p=B;B=0;do if(!(p&1)){B=0;eb(502,g|0,81153,13);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);t=s;u=q;break}B=0;wa(510,h|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,f|0,g|0,45,h|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(h);v=s;w=q;x=y}Yua(g);Yua(f);if(x){t=v;u=w}else{z=v;A=w;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(A|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function DN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=k[b>>2]|0;k[a>>2]=c;d=k[b+4>>2]|0;k[a+4>>2]=d;i[a+8>>0]=i[b+8>>0]|0;e=ma(c,d)|0;d=Rqa(e>>>0>536870911?-1:e<<3)|0;k[a+12>>2]=d;f=k[b+12>>2]|0;if(!f)yb(142353,81465,137,142345);if(e){g=0;do{p[d+(g<<3)>>3]=+p[f+(g<<3)>>3];g=g+1|0}while((g|0)!=(e|0))}e=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[a+16>>2]=e;g=k[b+16>>2]|0;if(!g)yb(142353,81465,137,142345);if(c){f=0;do{k[e+(f<<2)>>2]=k[g+(f<<2)>>2];f=f+1|0}while((f|0)!=(c|0))}c=k[b+20>>2]|0;k[a+20>>2]=c;if(c){f=c>>>0>1073741823?-1:c<<2;g=Rqa(f)|0;k[a+24>>2]=g;e=k[b+24>>2]|0;if(!e)yb(142353,81465,137,142345);else h=0;do{k[g+(h<<2)>>2]=k[e+(h<<2)>>2];h=h+1|0}while((h|0)!=(c|0));h=Rqa(f)|0;k[a+28>>2]=h;f=k[b+28>>2]|0;if(!f)yb(142353,81465,137,142345);else{e=0;do{k[h+(e<<2)>>2]=k[f+(e<<2)>>2];e=e+1|0}while((e|0)!=(c|0))}}else{k[a+24>>2]=0;k[a+28>>2]=0}c=k[b+32>>2]|0;k[a+32>>2]=c;if(c){e=c>>>0>1073741823?-1:c<<2;f=Rqa(e)|0;k[a+36>>2]=f;h=k[b+36>>2]|0;if(!h)yb(142353,81465,137,142345);else j=0;do{k[f+(j<<2)>>2]=k[h+(j<<2)>>2];j=j+1|0}while((j|0)!=(c|0));j=Rqa(e)|0;k[a+40>>2]=j;e=k[b+40>>2]|0;if(!e)yb(142353,81465,137,142345);else{h=0;do{k[j+(h<<2)>>2]=k[e+(h<<2)>>2];h=h+1|0}while((h|0)!=(c|0))}}else{k[a+36>>2]=0;k[a+40>>2]=0}c=k[b+44>>2]|0;k[a+44>>2]=c;if(c){h=c>>>0>1073741823?-1:c<<2;e=Rqa(h)|0;k[a+48>>2]=e;j=k[b+48>>2]|0;if(!j)yb(142353,81465,137,142345);else l=0;do{k[e+(l<<2)>>2]=k[j+(l<<2)>>2];l=l+1|0}while((l|0)!=(c|0));l=Rqa(h)|0;k[a+52>>2]=l;h=k[b+52>>2]|0;if(!h)yb(142353,81465,137,142345);else{j=0;do{k[l+(j<<2)>>2]=k[h+(j<<2)>>2];j=j+1|0}while((j|0)!=(c|0))}}else{k[a+48>>2]=0;k[a+52>>2]=0}c=k[b+56>>2]|0;k[a+56>>2]=c;if(!c){k[a+60>>2]=0;k[a+64>>2]=0;return}j=c>>>0>1073741823?-1:c<<2;h=Rqa(j)|0;k[a+60>>2]=h;l=k[b+60>>2]|0;if(!l)yb(142353,81465,137,142345);else m=0;do{k[h+(m<<2)>>2]=k[l+(m<<2)>>2];m=m+1|0}while((m|0)!=(c|0));m=Rqa(j)|0;k[a+64>>2]=m;a=k[b+64>>2]|0;if(!a)yb(142353,81465,137,142345);else n=0;do{k[m+(n<<2)>>2]=k[a+(n<<2)>>2];n=n+1|0}while((n|0)!=(c|0));return}function EN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;j=d+36|0;l=d+48|0;m=d+24|0;n=d+12|0;o=d;q=(b|0)!=0;s=(c|0)!=0;if(!(q|s)){t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);Yua(y);Ava(u);z=D;A=C;break}Yua(e);B=0;C=Ia(40,f|0,81335,35)|0;D=B;B=0;a:do if(!(D&1)?(B=0,Xa(239,C|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,81073,79);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,81153,13);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(g);I=G;J=H;break}B=0;wa(510,j|0,u|0);H=B;B=0;if(H&1){H=Rb()|0;K=H;L=Q;M=1}else{B=0;ua(163,E|0,g|0,h|0,60,j|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}H=Rb()|0;G=Q;Yua(j);K=H;L=G;M=N}Yua(h);Yua(g);if(M){I=K;J=L}else{O=K;P=L;break a}}else{G=Rb()|0;I=G;J=Q}while(0);zb(E|0);O=I;P=J}else R=17;while(0);if((R|0)==17){C=Rb()|0;O=C;P=Q}k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);S=P;T=O;Qb(T|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}if(!q){DN(a,c);r=d;return}if(!s){DN(a,b);r=d;return}if((i[b+8>>0]|0)!=0?(i[c+8>>0]|0)!=0:0){s=k[c>>2]|0;q=Rqa(s>>>0>1073741823?-1:s<<2)|0;x=k[b>>2]|0;if((s|0)>0){t=c+16|0;A=b+16|0;z=(x|0)>0;w=x;O=0;while(1){b:do if(z){P=k[(k[t>>2]|0)+(O<<2)>>2]|0;u=k[A>>2]|0;f=0;while(1){if((P|0)==(k[u+(f<<2)>>2]|0)){U=f;break}f=f+1|0;if((f|0)>=(x|0)){R=61;break b}}k[q+(O<<2)>>2]=U;V=w}else R=61;while(0);if((R|0)==61){R=0;k[q+(O<<2)>>2]=w;V=w+1|0}O=O+1|0;if((O|0)>=(s|0)){W=V;break}else w=V}}else W=x;k[a>>2]=W;x=a+4|0;k[x>>2]=W;i[a+8>>0]=1;V=Rqa(W>>>0>1073741823?-1:W<<2)|0;k[a+16>>2]=V;w=ma(W,W)|0;W=Rqa(w>>>0>536870911?-1:w<<3)|0;if(w)WEa(W|0,0,w<<3|0)|0;k[a+12>>2]=W;if((k[b>>2]|0)>0){w=b+4|0;s=k[b+16>>2]|0;O=b+12|0;U=0;do{A=k[w>>2]|0;if((A|0)>0){t=k[O>>2]|0;z=ma(k[x>>2]|0,U)|0;y=ma(A,U)|0;f=0;do{u=W+(z+f<<3)|0;p[u>>3]=+p[t+(y+f<<3)>>3]+ +p[u>>3];f=f+1|0}while((f|0)<(A|0))}k[V+(U<<2)>>2]=k[s+(U<<2)>>2];U=U+1|0}while((U|0)<(k[b>>2]|0))}if((k[c>>2]|0)>0){U=c+4|0;s=k[c+16>>2]|0;O=c+12|0;w=0;do{A=k[U>>2]|0;if((A|0)>0){f=k[O>>2]|0;y=k[q+(w<<2)>>2]|0;t=ma(k[x>>2]|0,y)|0;z=ma(A,w)|0;u=0;do{P=W+(t+(k[q+(u<<2)>>2]|0)<<3)|0;p[P>>3]=+p[f+(z+u<<3)>>3]+ +p[P>>3];u=u+1|0}while((u|0)<(A|0));X=y}else X=k[q+(w<<2)>>2]|0;k[V+(X<<2)>>2]=k[s+(w<<2)>>2];w=w+1|0}while((w|0)<(k[c>>2]|0))}w=b+20|0;s=k[w>>2]|0;X=c+20|0;V=k[X>>2]|0;if((V|0)>0){W=k[c+24>>2]|0;x=k[b>>2]|0;O=s;U=0;while(1){y=((k[q+(k[W+(U<<2)>>2]<<2)>>2]|0)>=(x|0)&1)+O|0;U=U+1|0;if((U|0)>=(V|0)){Y=y;break}else O=y}}else Y=s;k[a+20>>2]=Y;if(Y){s=Y>>>0>1073741823?-1:Y<<2;Y=Rqa(s)|0;k[a+24>>2]=Y;O=Rqa(s)|0;k[a+28>>2]=O;s=k[w>>2]|0;if((s|0)>0){V=k[b+24>>2]|0;U=k[b+28>>2]|0;x=0;do{k[Y+(x<<2)>>2]=k[V+(x<<2)>>2];k[O+(x<<2)>>2]=k[U+(x<<2)>>2];x=x+1|0;W=k[w>>2]|0}while((x|0)<(W|0));Z=W}else Z=s;s=k[X>>2]|0;if((s|0)>0){x=k[c+24>>2]|0;w=c+28|0;U=s;s=Z;Z=0;while(1){V=k[q+(k[x+(Z<<2)>>2]<<2)>>2]|0;if((V|0)<(k[b>>2]|0)){_=U;$=s}else{k[Y+(s<<2)>>2]=V;k[O+(s<<2)>>2]=k[(k[w>>2]|0)+(Z<<2)>>2];_=k[X>>2]|0;$=s+1|0}Z=Z+1|0;if((Z|0)>=(_|0))break;else{U=_;s=$}}}}else{k[a+24>>2]=0;k[a+28>>2]=0}$=b+32|0;s=k[$>>2]|0;_=c+32|0;U=k[_>>2]|0;if((U|0)>0){Z=k[c+36>>2]|0;X=k[b>>2]|0;w=0;O=s;while(1){Y=((k[q+(k[Z+(w<<2)>>2]<<2)>>2]|0)>=(X|0)&1)+O|0;w=w+1|0;if((w|0)>=(U|0)){aa=Y;break}else O=Y}}else aa=s;k[a+32>>2]=aa;if(aa){s=aa>>>0>1073741823?-1:aa<<2;aa=Rqa(s)|0;k[a+36>>2]=aa;O=Rqa(s)|0;k[a+40>>2]=O;s=k[$>>2]|0;if((s|0)>0){U=k[b+36>>2]|0;w=k[b+40>>2]|0;X=0;do{k[aa+(X<<2)>>2]=k[U+(X<<2)>>2];k[O+(X<<2)>>2]=k[w+(X<<2)>>2];X=X+1|0;Z=k[$>>2]|0}while((X|0)<(Z|0));ba=Z}else ba=s;s=k[_>>2]|0;if((s|0)>0){X=k[c+36>>2]|0;$=c+40|0;c=s;s=ba;ba=0;while(1){w=k[q+(k[X+(ba<<2)>>2]<<2)>>2]|0;if((w|0)<(k[b>>2]|0)){ca=c;da=s}else{k[aa+(s<<2)>>2]=w;k[O+(s<<2)>>2]=k[(k[$>>2]|0)+(ba<<2)>>2];ca=k[_>>2]|0;da=s+1|0}ba=ba+1|0;if((ba|0)>=(ca|0))break;else{c=ca;s=da}}}}else{k[a+36>>2]=0;k[a+40>>2]=0}da=a+44|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[da+16>>2]=0;k[da+20>>2]=0;Tqa(q);r=d;return}d=l+56|0;q=l+4|0;k[l>>2]=27524;k[d>>2]=27544;B=0;wa(508,l+56|0,q|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva(d);Qb(fa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[d>>2]=27488;B=0;va(448,q|0);da=B;B=0;do if(da&1){a=Rb()|0;ga=Q;ha=a}else{k[q>>2]=27560;a=l+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;ca=Q;Yua(e);Yua(a);Ava(q);ga=ca;ha=s;break}Yua(e);B=0;s=Ia(40,l|0,81167,57)|0;ca=B;B=0;c:do if(!(ca&1)?(B=0,Xa(239,s|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,m|0,81073,79);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,n|0,81153,13);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(m);ia=_;ja=$;break}B=0;wa(510,o|0,q|0);$=B;B=0;if($&1){$=Rb()|0;ka=1;la=Q;na=$}else{B=0;ua(163,c|0,m|0,n|0,72,o|0);$=B;B=0;if($&1)oa=1;else{B=0;eb(503,c|0,1240,229);B=0;oa=0}$=Rb()|0;_=Q;Yua(o);ka=oa;la=_;na=$}Yua(n);Yua(m);if(ka){ia=na;ja=la}else{pa=la;qa=na;break c}}else{$=Rb()|0;ia=$;ja=Q}while(0);zb(c|0);pa=ja;qa=ia}else R=46;while(0);if((R|0)==46){s=Rb()|0;pa=Q;qa=s}k[l>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(a);Ava(q);vva(d);S=pa;T=qa;Qb(T|0)}while(0);ea=ga;fa=ha;vva(d);Qb(fa|0)}function FN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=Qqa(68)|0;B=0;eb(515,e|0,b|0,c|0);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Sqa(e);f=c;g=b;Qb(f|0)}b=Qqa(68)|0;B=0;eb(515,b|0,e|0,d|0);d=B;B=0;if(!(d&1)){DN(a,b);HN(e);Sqa(e);HN(b);Sqa(b);return}e=Rb()|0;a=Q;Sqa(b);f=e;g=a;Qb(f|0)}function GN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;i[a+8>>0]=1;d=po(b,c,943,e)|0;k[a>>2]=d;k[a+4>>2]=d;f=ma(d,d)|0;d=Rqa(f>>>0>536870911?-1:f<<3)|0;if(f)WEa(d|0,0,f<<3|0)|0;k[a+12>>2]=d;d=oo(b,c,943,e)|0;k[a+16>>2]=d;d=po(b,c,937,e)|0;k[a+20>>2]=d;d=no(b,c,937,e)|0;k[a+24>>2]=d;d=oo(b,c,937,e)|0;k[a+28>>2]=d;d=po(b,c,966,e)|0;k[a+32>>2]=d;d=no(b,c,966,e)|0;k[a+36>>2]=d;d=oo(b,c,966,e)|0;k[a+40>>2]=d;d=a+44|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[d+16>>2]=0;k[d+20>>2]=0;return}function HN(a){a=a|0;var b=0,c=0;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+36|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+40|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+48|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+52|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+60|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+64|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function IN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;if(!c){JN(a,b);r=d;return}if(i[a+8>>0]|0){l=a+20|0;m=k[l>>2]|0;if(m){n=ma(m,m)|0;o=Rqa(n>>>0>536870911?-1:n<<3)|0;if((m|0)>0){n=k[a+4>>2]|0;q=k[a+24>>2]|0;s=k[a+12>>2]|0;t=0;do{u=ma(k[q+(t<<2)>>2]|0,n)|0;v=ma(m,t)|0;w=0;do{p[o+(v+w<<3)>>3]=+p[s+(u+(k[q+(w<<2)>>2]|0)<<3)>>3];w=w+1|0}while((w|0)<(m|0));t=t+1|0}while((t|0)!=(m|0))}t=k[a+28>>2]|0;if(k[b>>2]|0){q=k[k[b+4>>2]>>2]|0;ad[k[(k[q>>2]|0)+40>>2]&63](q,m,t,m,t,o,1)}Tqa(o)}o=k[a+32>>2]|0;if(!o){r=d;return}t=k[l>>2]|0;if(!t){r=d;return}l=ma(t,o)|0;m=Rqa(l>>>0>536870911?-1:l<<3)|0;if((t|0)>0&(o|0)>0){l=k[a+4>>2]|0;q=k[a+24>>2]|0;b=k[a+36>>2]|0;s=k[a+12>>2]|0;n=0;do{w=ma(k[q+(n<<2)>>2]|0,l)|0;u=ma(o,n)|0;v=0;do{p[m+(u+v<<3)>>3]=+p[s+((k[b+(v<<2)>>2]|0)+w<<3)>>3];v=v+1|0}while((v|0)<(o|0));n=n+1|0}while((n|0)<(t|0))}if(k[c>>2]|0){n=k[k[c+4>>2]>>2]|0;ad[k[(k[n>>2]|0)+40>>2]&63](n,t,k[a+28>>2]|0,o,k[a+40>>2]|0,m,1)}Tqa(m);r=d;return}d=f+56|0;m=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;x=Q;y=a;vva(d);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){o=Rb()|0;z=Q;A=o}else{k[m>>2]=27560;o=f+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);t=B;B=0;if(t&1){t=Rb()|0;n=Q;Yua(e);Yua(o);Ava(m);z=n;A=t;break}Yua(e);B=0;t=Ia(40,f|0,81225,62)|0;n=B;B=0;if(!(n&1)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,g|0,81073,79);n=B;B=0;do if(!(n&1)){B=0;eb(502,h|0,81288,11);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Yua(g);C=b;D=c;break}B=0;wa(510,j|0,m|0);c=B;B=0;if(c&1){c=Rb()|0;E=Q;F=c;G=1}else{B=0;ua(163,t|0,g|0,h|0,290,j|0);c=B;B=0;if(c&1)H=1;else{B=0;eb(503,t|0,1240,229);B=0;H=0}c=Rb()|0;b=Q;Yua(j);E=b;F=c;G=H}Yua(h);Yua(g);if(G){C=E;D=F}else{I=E;J=F;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(d);Qb(J|0)}}else{c=Rb()|0;C=Q;D=c}while(0);zb(t|0);I=C;J=D;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(d);Qb(J|0)}n=Rb()|0;I=Q;J=n;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(d);Qb(J|0)}while(0);x=z;y=A;vva(d);Qb(y|0)}function JN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(i[a+8>>0]|0){j=k[a+20>>2]|0;if(!j){r=c;return}l=ma(j,j)|0;m=Rqa(l>>>0>536870911?-1:l<<3)|0;if((j|0)>0){l=k[a+12>>2]|0;n=k[a+4>>2]|0;o=k[a+24>>2]|0;q=0;do{s=l+((ma(k[o+(q<<2)>>2]|0,n)|0)<<3)|0;t=m+((ma(j,q)|0)<<3)|0;u=0;do{p[t+(u<<3)>>3]=+p[s+(k[o+(u<<2)>>2]<<3)>>3];u=u+1|0}while((u|0)<(j|0));q=q+1|0}while((q|0)!=(j|0))}q=k[a+28>>2]|0;if(k[b>>2]|0){a=k[k[b+4>>2]>>2]|0;ad[k[(k[a>>2]|0)+40>>2]&63](a,j,q,j,q,m,1)}Tqa(m);r=c;return}c=e+56|0;m=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,m|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;vva(c);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,m|0);q=B;B=0;do if(q&1){j=Rb()|0;x=Q;y=j}else{k[m>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(d);Yua(j);Ava(m);x=b;y=a;break}Yua(d);B=0;a=Ia(40,e|0,81225,62)|0;b=B;B=0;if(!(b&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,f|0,81073,79);b=B;B=0;do if(!(b&1)){B=0;eb(502,g|0,81288,11);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(f);z=n;A=o;break}B=0;wa(510,h|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;C=Q;D=o;E=1}else{B=0;ua(163,a|0,f|0,g|0,326,h|0);o=B;B=0;if(o&1)F=1;else{B=0;eb(503,a|0,1240,229);B=0;F=0}o=Rb()|0;n=Q;Yua(h);C=n;D=o;E=F}Yua(g);Yua(f);if(E){z=C;A=D}else{G=C;H=D;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(c);Qb(H|0)}}else{o=Rb()|0;z=Q;A=o}while(0);zb(a|0);G=z;H=A;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(c);Qb(H|0)}b=Rb()|0;G=Q;H=b;k[e>>2]=27468;k[c>>2]=27488;k[m>>2]=27560;Yua(j);Ava(m);vva(c);Qb(H|0)}while(0);v=x;w=y;vva(c);Qb(w|0)}function KN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(i[a+8>>0]|0){j=k[a+20>>2]|0;if(!j){r=c;return}l=Rqa(j>>>0>536870911?-1:j<<3)|0;if((j|0)>0){m=k[a+4>>2]|0;n=k[a+24>>2]|0;o=k[a+12>>2]|0;q=0;do{s=k[n+(q<<2)>>2]|0;t=o+((ma(s,m)|0)+s<<3)|0;p[l+(q<<3)>>3]=+p[t>>3];q=q+1|0}while((q|0)<(j|0))}if(k[b>>2]|0){q=k[k[b+4>>2]>>2]|0;Dc[k[(k[q>>2]|0)+16>>2]&255](q,j,k[a+28>>2]|0,l,1)}Tqa(l);r=c;return}c=e+56|0;l=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,l|0);a=B;B=0;if(a&1){a=Rb()|0;u=Q;v=a;vva(c);Qb(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,l|0);a=B;B=0;do if(a&1){j=Rb()|0;w=Q;x=j}else{k[l>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(j);Ava(l);w=b;x=q;break}Yua(d);B=0;q=Ia(40,e|0,81225,62)|0;b=B;B=0;if(!(b&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,81073,79);b=B;B=0;do if(!(b&1)){B=0;eb(502,g|0,81300,19);m=B;B=0;if(m&1){m=Rb()|0;o=Q;Yua(f);y=o;z=m;break}B=0;wa(510,h|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;A=Q;C=m;D=1}else{B=0;ua(163,q|0,f|0,g|0,359,h|0);m=B;B=0;if(m&1)E=1;else{B=0;eb(503,q|0,1240,229);B=0;E=0}m=Rb()|0;o=Q;Yua(h);A=o;C=m;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(j);Ava(l);vva(c);Qb(G|0)}}else{m=Rb()|0;y=Q;z=m}while(0);zb(q|0);F=y;G=z;k[e>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(j);Ava(l);vva(c);Qb(G|0)}b=Rb()|0;F=Q;G=b;k[e>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(j);Ava(l);vva(c);Qb(G|0)}while(0);u=w;v=x;vva(c);Qb(v|0)}function LN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;if(i[a+8>>0]|0){h=k[a>>2]|0;if((h|0)<=0){r=b;return}j=k[a+4>>2]|0;l=a+12|0;if((j|0)>0)m=0;else{r=b;return}do{a=ma(j,m)|0;n=a+m|0;o=0;do{if((m|0)!=(o|0)){q=k[l>>2]|0;s=q+(a+o<<3)|0;t=q+(n<<3)|0;p[t>>3]=+p[s>>3]+ +p[t>>3];p[s>>3]=0.0}o=o+1|0}while((o|0)<(j|0));m=m+1|0}while((m|0)<(h|0));r=b;return}b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);m=B;B=0;if(m&1){m=Rb()|0;u=Q;v=m;vva(b);Qb(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);m=B;B=0;do if(m&1){j=Rb()|0;w=Q;x=j}else{k[h>>2]=27560;j=d+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);l=B;B=0;if(l&1){l=Rb()|0;o=Q;Yua(c);Yua(j);Ava(h);w=o;x=l;break}Yua(c);B=0;l=Ia(40,d|0,134695,17)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,e|0,81073,79);o=B;B=0;do if(!(o&1)){B=0;eb(502,f|0,81320,4);n=B;B=0;if(n&1){n=Rb()|0;a=Q;Yua(e);y=a;z=n;break}B=0;wa(510,g|0,h|0);n=B;B=0;if(n&1){n=Rb()|0;A=Q;C=n;D=1}else{B=0;ua(163,l|0,e|0,f|0,379,g|0);n=B;B=0;if(n&1)E=1;else{B=0;eb(503,l|0,1240,229);B=0;E=0}n=Rb()|0;a=Q;Yua(g);A=a;C=n;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(j);Ava(h);vva(b);Qb(G|0)}}else{n=Rb()|0;y=Q;z=n}while(0);zb(l|0);F=y;G=z;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(j);Ava(h);vva(b);Qb(G|0)}o=Rb()|0;F=Q;G=o;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(j);Ava(h);vva(b);Qb(G|0)}while(0);u=w;v=x;vva(b);Qb(v|0)}function MN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=Qqa(68)|0;B=0;wa(520,h|0,a|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;Sqa(h);m=l;n=j;Qb(n|0)}j=h+4|0;l=k[j>>2]|0;k[a>>2]=l;o=k[h>>2]|0;k[a+4>>2]=o;a:do if((l|0)>0&(o|0)>0){q=k[h+12>>2]|0;s=k[a+12>>2]|0;t=l;u=0;while(1){v=ma(o,u)|0;w=0;do{x=q+((ma(t,w)|0)+u<<3)|0;p[s+(v+w<<3)>>3]=+p[x>>3];w=w+1|0}while((w|0)<(o|0));w=u+1|0;if((w|0)>=(l|0))break a;t=k[j>>2]|0;u=w}}while(0);if(i[a+8>>0]|0){HN(h);Sqa(h);r=b;return}b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);a=B;B=0;if(a&1){a=Rb()|0;y=Q;z=a;vva(b);Qb(z|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);a=B;B=0;do if(a&1){j=Rb()|0;A=Q;C=j}else{k[h>>2]=27560;j=d+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);l=B;B=0;if(l&1){l=Rb()|0;o=Q;Yua(c);Yua(j);Ava(h);A=o;C=l;break}Yua(c);B=0;l=Ia(40,d|0,134695,17)|0;o=B;B=0;b:do if(!(o&1)?(B=0,Xa(239,l|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,81073,79);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,81325,9);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(e);D=q;E=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;F=Q;G=s;H=1}else{B=0;ua(163,u|0,e|0,f|0,407,g|0);s=B;B=0;if(s&1)I=1;else{B=0;eb(503,u|0,1240,229);B=0;I=0}s=Rb()|0;q=Q;Yua(g);F=q;G=s;H=I}Yua(f);Yua(e);if(H){D=F;E=G}else{J=F;K=G;break b}}else{s=Rb()|0;D=Q;E=s}while(0);zb(u|0);J=D;K=E}else L=25;while(0);if((L|0)==25){l=Rb()|0;J=Q;K=l}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(j);Ava(h);vva(b);m=J;n=K;Qb(n|0)}while(0);y=A;z=C;vva(b);Qb(z|0)}function NN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=k[a>>2]|0;e=d-b|0;f=Rqa(e>>>0>1073741823?-1:e<<2)|0;a:do if((d|0)>0){if((b|0)>0){g=0;h=0}else{i=0;while(1){k[f+(i<<2)>>2]=i;i=i+1|0;if((i|0)>=(d|0))break a}}while(1){i=0;while(1){if((h|0)==(k[c+(i<<2)>>2]|0)){j=g;break}i=i+1|0;if((i|0)>=(b|0)){l=7;break}}if((l|0)==7){l=0;k[f+(g<<2)>>2]=h;j=g+1|0}h=h+1|0;if((h|0)>=(d|0))break;else g=j}}while(0);j=ma(e,e)|0;g=j>>>0>536870911?-1:j<<3;d=Rqa(g)|0;h=ma(e,b)|0;i=h>>>0>536870911?-1:h<<3;h=Rqa(i)|0;m=Rqa(i)|0;i=ma(b,b)|0;n=i>>>0>536870911?-1:i<<3;i=Rqa(n)|0;o=(e|0)>0;if(o){q=k[a+4>>2]|0;r=k[a+12>>2]|0;s=0;do{t=ma(q,k[f+(s<<2)>>2]|0)|0;u=ma(s,e)|0;v=0;do{p[d+(v+u<<3)>>3]=+p[r+(t+(k[f+(v<<2)>>2]|0)<<3)>>3];v=v+1|0}while((v|0)!=(e|0));s=s+1|0}while((s|0)!=(e|0));if(o){if((b|0)>0){s=k[a+4>>2]|0;r=k[a+12>>2]|0;q=0;do{v=ma(s,k[f+(q<<2)>>2]|0)|0;t=ma(q,b)|0;u=0;do{p[h+(u+t<<3)>>3]=+p[r+(v+(k[c+(u<<2)>>2]|0)<<3)>>3];u=u+1|0}while((u|0)!=(b|0));q=q+1|0}while((q|0)!=(e|0));l=20}}else l=20}else l=20;do if((l|0)==20?(q=(b|0)>0,q):0){if(o){r=k[a+4>>2]|0;s=k[a+12>>2]|0;u=0;do{v=ma(r,k[c+(u<<2)>>2]|0)|0;t=ma(u,e)|0;w=0;do{p[m+(w+t<<3)>>3]=+p[s+(v+(k[f+(w<<2)>>2]|0)<<3)>>3];w=w+1|0}while((w|0)!=(e|0));u=u+1|0}while((u|0)!=(b|0));if(!q)break}u=k[a+4>>2]|0;s=k[a+12>>2]|0;r=0;do{w=ma(u,k[c+(r<<2)>>2]|0)|0;v=ma(r,b)|0;t=0;do{p[i+(t+v<<3)>>3]=+p[s+(w+(k[c+(t<<2)>>2]|0)<<3)>>3];t=t+1|0}while((t|0)!=(b|0));r=r+1|0}while((r|0)!=(b|0))}while(0);c=Rqa(n)|0;switch(b|0){case 1:{p[c>>3]=1.0/+p[i>>3];break}case 2:{bY(c,i);break}case 3:{eY(c,i);break}default:$X(c,b,b,0,0,0)|0}n=Rqa(g)|0;ZX(h,e,b,0,c,b,b,0,m,b,e,0,n,0)|0;if(j){b=0;do{g=n+(b<<3)|0;p[g>>3]=+p[d+(b<<3)>>3]-+p[g>>3];b=b+1|0}while((b|0)<(j|0))}j=a+4|0;b=ma(k[j>>2]|0,k[a>>2]|0)|0;if((b|0)>0)WEa(k[a+12>>2]|0,0,((b|0)>1?b:1)<<3|0)|0;if(!o){Tqa(d);Tqa(h);Tqa(m);Tqa(i);Tqa(c);Tqa(n);Tqa(f);return}o=k[j>>2]|0;j=k[a+12>>2]|0;a=0;do{b=ma(a,e)|0;g=ma(o,k[f+(a<<2)>>2]|0)|0;l=0;do{p[j+(g+(k[f+(l<<2)>>2]|0)<<3)>>3]=+p[n+(l+b<<3)>>3];l=l+1|0}while((l|0)!=(e|0));a=a+1|0}while((a|0)!=(e|0));Tqa(d);Tqa(h);Tqa(m);Tqa(i);Tqa(c);Tqa(n);Tqa(f);return}function ON(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=(b|0)!=0;l=(c|0)!=0;if(!(j|l)){m=f+56|0;n=f+4|0;k[f>>2]=27524;k[m>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=f+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);Yua(t);Ava(n);u=x;v=w;break}Yua(e);B=0;w=Ia(40,f|0,81335,35)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,g|0,81371,79);x=B;B=0;do if(!(x&1)){B=0;eb(502,h|0,81451,13);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(g);A=z;C=y;break}B=0;wa(510,i|0,n|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,g|0,h|0,40,i|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(i);D=z;E=y;F=G}Yua(h);Yua(g);if(F){A=D;C=E}else{H=D;I=E;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}x=Rb()|0;H=Q;I=x;k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);Qb(I|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}if(!j){PN(a,c);r=d;return}if(!l){PN(a,b);r=d;return}l=k[c>>2]|0;j=Rqa(l>>>0>1073741823?-1:l<<2)|0;s=k[b>>2]|0;if((l|0)>0){m=c+8|0;v=b+8|0;u=(s|0)>0;q=s;I=0;while(1){a:do if(u){n=k[(k[m>>2]|0)+(I<<2)>>2]|0;f=k[v>>2]|0;H=0;while(1){if((n|0)==(k[f+(H<<2)>>2]|0)){J=H;break}H=H+1|0;if((H|0)>=(s|0)){K=36;break a}}k[j+(I<<2)>>2]=J;L=q}else K=36;while(0);if((K|0)==36){K=0;k[j+(I<<2)>>2]=q;L=q+1|0}I=I+1|0;if((I|0)>=(l|0)){M=L;break}else q=L}}else M=s;k[a>>2]=M;s=Rqa(M>>>0>1073741823?-1:M<<2)|0;k[a+8>>2]=s;L=Rqa(M>>>0>536870911?-1:M<<3)|0;if(M)WEa(L|0,0,M<<3|0)|0;k[a+4>>2]=L;if((k[b>>2]|0)>0){M=k[b+4>>2]|0;q=k[b+8>>2]|0;l=0;do{I=L+(l<<3)|0;p[I>>3]=+p[M+(l<<3)>>3]+ +p[I>>3];k[s+(l<<2)>>2]=k[q+(l<<2)>>2];l=l+1|0}while((l|0)<(k[b>>2]|0))}if((k[c>>2]|0)>0){l=k[c+4>>2]|0;q=k[c+8>>2]|0;M=0;do{I=k[j+(M<<2)>>2]|0;K=L+(I<<3)|0;p[K>>3]=+p[l+(M<<3)>>3]+ +p[K>>3];k[s+(I<<2)>>2]=k[q+(M<<2)>>2];M=M+1|0}while((M|0)<(k[c>>2]|0))}M=b+12|0;q=k[M>>2]|0;s=c+12|0;l=k[s>>2]|0;if((l|0)>0){L=k[c+16>>2]|0;I=k[b>>2]|0;K=q;J=0;while(1){v=((k[j+(k[L+(J<<2)>>2]<<2)>>2]|0)>=(I|0)&1)+K|0;J=J+1|0;if((J|0)>=(l|0)){N=v;break}else K=v}}else N=q;k[a+12>>2]=N;if(N){q=N>>>0>1073741823?-1:N<<2;N=Rqa(q)|0;k[a+16>>2]=N;K=Rqa(q)|0;k[a+20>>2]=K;q=k[M>>2]|0;if((q|0)>0){l=k[b+16>>2]|0;J=k[b+20>>2]|0;I=0;do{k[N+(I<<2)>>2]=k[l+(I<<2)>>2];k[K+(I<<2)>>2]=k[J+(I<<2)>>2];I=I+1|0;L=k[M>>2]|0}while((I|0)<(L|0));O=L}else O=q;q=k[s>>2]|0;if((q|0)>0){I=k[c+16>>2]|0;M=c+20|0;c=q;q=O;O=0;while(1){J=k[j+(k[I+(O<<2)>>2]<<2)>>2]|0;if((J|0)<(k[b>>2]|0)){P=c;R=q}else{k[N+(q<<2)>>2]=J;k[K+(q<<2)>>2]=k[(k[M>>2]|0)+(O<<2)>>2];P=k[s>>2]|0;R=q+1|0}O=O+1|0;if((O|0)>=(P|0))break;else{c=P;q=R}}}}else{k[a+16>>2]=0;k[a+20>>2]=0}Tqa(j);r=d;return}function PN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=k[b>>2]|0;k[a>>2]=c;d=Rqa(c>>>0>536870911?-1:c<<3)|0;k[a+4>>2]=d;e=k[b+4>>2]|0;if(!e)yb(142353,81465,137,142345);f=(c|0)==0;if(!f){g=0;do{p[d+(g<<3)>>3]=+p[e+(g<<3)>>3];g=g+1|0}while((g|0)!=(c|0))}g=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[a+8>>2]=g;e=k[b+8>>2]|0;if(!e)yb(142353,81465,137,142345);if(!f){f=0;do{k[g+(f<<2)>>2]=k[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(c|0))}c=k[b+12>>2]|0;k[a+12>>2]=c;if(!c){k[a+16>>2]=0;k[a+20>>2]=0;return}f=c>>>0>1073741823?-1:c<<2;e=Rqa(f)|0;k[a+16>>2]=e;g=k[b+16>>2]|0;if(!g)yb(142353,81465,137,142345);else h=0;do{k[e+(h<<2)>>2]=k[g+(h<<2)>>2];h=h+1|0}while((h|0)!=(c|0));h=Rqa(f)|0;k[a+20>>2]=h;a=k[b+20>>2]|0;if(!a)yb(142353,81465,137,142345);else i=0;do{k[h+(i<<2)>>2]=k[a+(i<<2)>>2];i=i+1|0}while((i|0)!=(c|0));return}function QN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=Qqa(24)|0;B=0;eb(516,e|0,b|0,c|0);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Sqa(e);f=c;g=b;Qb(f|0)}b=Qqa(24)|0;B=0;eb(516,b|0,e|0,d|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Sqa(b);f=d;g=c;Qb(f|0)}PN(a,b);a=e+4|0;f=k[a>>2]|0;if(f)Tqa(f);k[a>>2]=0;a=e+8|0;f=k[a>>2]|0;if(f)Tqa(f);k[a>>2]=0;a=e+16|0;f=k[a>>2]|0;if(f)Tqa(f);k[a>>2]=0;a=k[e+20>>2]|0;if(a)Tqa(a);Sqa(e);e=b+4|0;a=k[e>>2]|0;if(a)Tqa(a);k[e>>2]=0;e=b+8|0;a=k[e>>2]|0;if(a)Tqa(a);k[e>>2]=0;e=b+16|0;a=k[e>>2]|0;if(a)Tqa(a);k[e>>2]=0;e=k[b+20>>2]|0;if(!e){Sqa(b);return}Tqa(e);Sqa(b);return}function RN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;d=po(b,c,943,e)|0;k[a>>2]=d;f=Rqa(d>>>0>536870911?-1:d<<3)|0;if(d)WEa(f|0,0,d<<3|0)|0;k[a+4>>2]=f;f=oo(b,c,943,e)|0;k[a+8>>2]=f;f=po(b,c,937,e)|0;k[a+12>>2]=f;f=no(b,c,937,e)|0;k[a+16>>2]=f;f=oo(b,c,937,e)|0;k[a+20>>2]=f;return}function SN(a){a=a|0;var b=0,c=0;b=a+4|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+20|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function TN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a+12>>2]|0;if(!c)return;d=Rqa(c>>>0>536870911?-1:c<<3)|0;if((c|0)>0){e=k[a+16>>2]|0;f=k[a+4>>2]|0;g=0;do{p[d+(g<<3)>>3]=+p[f+(k[e+(g<<2)>>2]<<3)>>3];g=g+1|0}while((g|0)<(c|0))}if(k[b>>2]|0){g=k[k[b+4>>2]>>2]|0;Dc[k[(k[g>>2]|0)+16>>2]&255](g,c,k[a+20>>2]|0,d,1)}Tqa(d);return}function UN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a+12>>2]|0;if(!c)return;d=Rqa(c>>>0>536870911?-1:c<<3)|0;if((c|0)>0){e=k[a+16>>2]|0;f=k[a+4>>2]|0;g=0;do{p[d+(g<<3)>>3]=+p[f+(k[e+(g<<2)>>2]<<3)>>3];g=g+1|0}while((g|0)<(c|0))}if(k[b>>2]|0){g=k[k[b+4>>2]>>2]|0;Dc[k[(k[g>>2]|0)+16>>2]&255](g,c,k[a+20>>2]|0,d,0)}Tqa(d);return}function VN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0;e=k[a>>2]|0;f=e-c|0;g=Rqa(f>>>0>1073741823?-1:f<<2)|0;a:do if((e|0)>0){if((c|0)>0){h=0;i=0}else{j=0;while(1){k[g+(j<<2)>>2]=j;j=j+1|0;if((j|0)>=(e|0))break a}}while(1){j=0;while(1){if((i|0)==(k[d+(j<<2)>>2]|0)){l=h;break}j=j+1|0;if((j|0)>=(c|0)){m=7;break}}if((m|0)==7){m=0;k[g+(h<<2)>>2]=i;l=h+1|0}i=i+1|0;if((i|0)>=(e|0))break;else h=l}}while(0);l=ma(f,c)|0;h=Rqa(l>>>0>536870911?-1:l<<3)|0;l=ma(c,c)|0;e=l>>>0>536870911?-1:l<<3;l=Rqa(e)|0;i=Rqa(c>>>0>536870911?-1:c<<3)|0;j=f>>>0>536870911?-1:f<<3;n=Rqa(j)|0;o=(f|0)>0;if(o)if((c|0)>0){q=k[b+4>>2]|0;r=k[b+12>>2]|0;s=0;do{t=ma(q,k[g+(s<<2)>>2]|0)|0;u=ma(s,c)|0;v=0;do{p[h+(v+u<<3)>>3]=+p[r+(t+(k[d+(v<<2)>>2]|0)<<3)>>3];v=v+1|0}while((v|0)!=(c|0));s=s+1|0}while((s|0)!=(f|0));m=15}else m=23;else m=15;if((m|0)==15){s=(c|0)>0;if(s){r=k[b+4>>2]|0;q=k[b+12>>2]|0;b=0;do{v=ma(r,k[d+(b<<2)>>2]|0)|0;t=ma(b,c)|0;u=0;do{p[l+(u+t<<3)>>3]=+p[q+(v+(k[d+(u<<2)>>2]|0)<<3)>>3];u=u+1|0}while((u|0)!=(c|0));b=b+1|0}while((b|0)!=(c|0));if(s){s=k[a+4>>2]|0;b=0;do{p[i+(b<<3)>>3]=+p[s+(k[d+(b<<2)>>2]<<3)>>3];b=b+1|0}while((b|0)!=(c|0))}}if(o)m=23}if((m|0)==23){m=k[a+4>>2]|0;b=0;do{p[n+(b<<3)>>3]=+p[m+(k[g+(b<<2)>>2]<<3)>>3];b=b+1|0}while((b|0)!=(f|0))}b=Rqa(e)|0;switch(c|0){case 1:{p[b>>3]=1.0/+p[l>>3];break}case 2:{bY(b,l);break}case 3:{eY(b,l);break}default:$X(b,c,c,0,0,0)|0}e=Rqa(j)|0;ZX(h,f,c,0,b,c,c,0,i,c,1,0,e,0)|0;if(o){c=0;do{j=e+(c<<3)|0;p[j>>3]=+p[n+(c<<3)>>3]-+p[j>>3];c=c+1|0}while((c|0)!=(f|0))}c=k[a>>2]|0;if((c|0)>0)WEa(k[a+4>>2]|0,0,((c|0)>1?c:1)<<3|0)|0;if(!o){Tqa(h);Tqa(l);Tqa(b);Tqa(i);Tqa(n);Tqa(e);Tqa(g);return}o=k[a+4>>2]|0;a=0;do{p[o+(k[g+(a<<2)>>2]<<3)>>3]=+p[e+(a<<3)>>3];a=a+1|0}while((a|0)!=(f|0));Tqa(h);Tqa(l);Tqa(b);Tqa(i);Tqa(n);Tqa(e);Tqa(g);return}function WN(a){a=a|0;WEa(a|0,0,4064)|0;return}function XN(a){a=a|0;var b=0,c=0;b=0;do{c=k[a+(b<<2)>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);b=b+1|0}while((b|0)!=1016);return}function YN(a,b){a=a|0;b=b|0;var c=0;c=a+((Hc[k[(k[b>>2]|0)+24>>2]&511](b)|0)+-1<<2)|0;a=k[c>>2]|0;if(!a){k[c>>2]=b;return}Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[c>>2]=0;k[c>>2]=b;return}function ZN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=39;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;k[b>>2]=(k[b>>2]|0)+4;u=0;v=0}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+4;u=0;v=0;break a;break}case 1:{t=k[b>>2]|0;w=t+4|0;k[b>>2]=w;x=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;k[b>>2]=t+8;if((x|0)>0)y=0;else{r=e;return}b:while(1){t=k[b>>2]|0;w=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;k[b>>2]=t+4;do switch(w|0){case 566:{t=Qqa(16)|0;B=0;va(494,t|0);z=B;B=0;if(z&1){A=t;C=72;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 580:{t=Qqa(12)|0;B=0;va(495,t|0);z=B;B=0;if(z&1){E=t;C=77;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 693:{t=Qqa(20)|0;B=0;va(496,t|0);z=B;B=0;if(z&1){F=t;C=82;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 581:{t=Qqa(16)|0;B=0;va(497,t|0);z=B;B=0;if(z&1){G=t;C=87;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 557:{t=Qqa(12)|0;B=0;va(498,t|0);z=B;B=0;if(z&1){H=t;C=92;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 563:{t=Qqa(12)|0;B=0;va(499,t|0);z=B;B=0;if(z&1){I=t;C=97;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 564:{t=Qqa(24)|0;B=0;va(500,t|0);z=B;B=0;if(z&1){J=t;C=102;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 565:{t=Qqa(20)|0;B=0;va(501,t|0);z=B;B=0;if(z&1){K=t;C=107;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 567:{t=Qqa(16)|0;B=0;va(502,t|0);z=B;B=0;if(z&1){L=t;C=112;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 572:{t=Qqa(12)|0;B=0;va(503,t|0);z=B;B=0;if(z&1){M=t;C=115;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);Ec[k[(k[t>>2]|0)+4>>2]&1023](t);break}case 618:{t=Qqa(12)|0;B=0;va(504,t|0);z=B;B=0;if(z&1){N=t;C=120;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 617:{t=Qqa(16)|0;B=0;va(505,t|0);z=B;B=0;if(z&1){O=t;C=125;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}case 582:{t=Qqa(24)|0;B=0;va(506,t|0);z=B;B=0;if(z&1){P=t;C=130;break b}rd[k[(k[t>>2]|0)+20>>2]&511](t,b,c,1);z=a+((Hc[k[(k[t>>2]|0)+24>>2]&511](t)|0)+-1<<2)|0;D=k[z>>2]|0;if(D){Ec[k[(k[D>>2]|0)+4>>2]&1023](D);k[z>>2]=0}k[z>>2]=t;break}default:{}}while(0);y=y+1|0;if((y|0)>=(x|0)){C=132;break}}switch(C|0){case 72:{x=Rb()|0;w=Q;Sqa(A);R=w;S=x;Qb(S|0);break}case 77:{x=Rb()|0;w=Q;Sqa(E);R=w;S=x;Qb(S|0);break}case 82:{x=Rb()|0;w=Q;Sqa(F);R=w;S=x;Qb(S|0);break}case 87:{x=Rb()|0;w=Q;Sqa(G);R=w;S=x;Qb(S|0);break}case 92:{x=Rb()|0;w=Q;Sqa(H);R=w;S=x;Qb(S|0);break}case 97:{x=Rb()|0;w=Q;Sqa(I);R=w;S=x;Qb(S|0);break}case 102:{x=Rb()|0;w=Q;Sqa(J);R=w;S=x;Qb(S|0);break}case 107:{x=Rb()|0;w=Q;Sqa(K);R=w;S=x;Qb(S|0);break}case 112:{x=Rb()|0;w=Q;Sqa(L);R=w;S=x;Qb(S|0);break}case 115:{x=Rb()|0;w=Q;Sqa(M);R=w;S=x;Qb(S|0);break}case 120:{x=Rb()|0;w=Q;Sqa(N);R=w;S=x;Qb(S|0);break}case 125:{x=Rb()|0;w=Q;Sqa(O);R=w;S=x;Qb(S|0);break}case 130:{x=Rb()|0;w=Q;Sqa(P);R=w;S=x;Qb(S|0);break}case 132:{r=e;return}}break}default:{x=g+56|0;w=g+4|0;k[g>>2]=27524;k[x>>2]=27544;B=0;wa(508,g+56|0,w|0);t=B;B=0;if(t&1){t=Rb()|0;T=Q;U=t;vva(x);Qb(U|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);t=B;B=0;do if(t&1){z=Rb()|0;V=Q;W=z}else{k[w>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;X=Q;Yua(f);Yua(z);Ava(w);V=X;W=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;X=B;B=0;c:do if(!(X&1)?(B=0,Xa(239,D|0,0)|0,Y=B,B=0,!(Y&1)):0){Y=Ab(20)|0;B=0;eb(502,h|0,81558,76);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,j|0,149525,8);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(h);aa=$;ba=_;break}B=0;wa(510,m|0,w|0);_=B;B=0;if(_&1){_=Rb()|0;ca=Q;da=_;ea=1}else{B=0;ua(163,Y|0,h|0,j|0,96,m|0);_=B;B=0;if(_&1)fa=1;else{B=0;eb(503,Y|0,1240,229);B=0;fa=0}_=Rb()|0;$=Q;Yua(m);ca=$;da=_;ea=fa}Yua(j);Yua(h);if(ea){aa=ca;ba=da}else{ga=ca;ha=da;break c}}else{_=Rb()|0;aa=Q;ba=_}while(0);zb(Y|0);ga=aa;ha=ba}else C=20;while(0);if((C|0)==20){D=Rb()|0;ga=Q;ha=D}k[g>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(z);Ava(w);vva(x);R=ga;S=ha;Qb(S|0)}while(0);T=V;U=W;vva(x);Qb(U|0)}}while(0);while(1){U=((k[a+(u<<2)>>2]|0)!=0&1)+v|0;u=u+1|0;if((u|0)==1016){ia=U;break}else v=U}if(s){s=k[b>>2]|0;i[s>>0]=ia;i[s+1>>0]=ia>>8;i[s+2>>0]=ia>>16;i[s+3>>0]=ia>>24;k[b>>2]=(k[b>>2]|0)+4;ia=0;do{s=a+(ia<<2)|0;v=k[s>>2]|0;if(v){u=Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0;v=k[b>>2]|0;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;u=k[s>>2]|0;rd[k[(k[u>>2]|0)+20>>2]&511](u,b,c,0)}ia=ia+1|0}while((ia|0)!=1016);r=e;return}switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+4;d=0;do{ia=a+(d<<2)|0;u=k[ia>>2]|0;if(u){Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0;k[c>>2]=(k[c>>2]|0)+4;u=k[ia>>2]|0;rd[k[(k[u>>2]|0)+20>>2]&511](u,b,c,2)}d=d+1|0}while((d|0)!=1016);r=e;return}case 1:{k[b>>2]=(k[b>>2]|0)+4;d=0;do{u=a+(d<<2)|0;ia=k[u>>2]|0;if(ia){Hc[k[(k[ia>>2]|0)+12>>2]&511](ia)|0;k[b>>2]=(k[b>>2]|0)+4;ia=k[u>>2]|0;rd[k[(k[ia>>2]|0)+20>>2]&511](ia,b,c,1)}d=d+1|0}while((d|0)<1016);r=e;return}default:{e=n+56|0;d=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;ja=Q;ka=c;vva(e);Qb(ka|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;la=Q;ma=b}else{k[d>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;ia=Q;Yua(f);Yua(b);Ava(d);la=ia;ma=a;break}Yua(f);B=0;a=Ia(40,n|0,143951,43)|0;ia=B;B=0;d:do if(!(ia&1)?(B=0,Xa(239,a|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,o|0,81558,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,p|0,149525,8);v=B;B=0;if(v&1){v=Rb()|0;U=Q;Yua(o);na=U;oa=v;break}B=0;wa(510,q|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;pa=1;qa=Q;ra=v}else{B=0;ua(163,u|0,o|0,p|0,104,q|0);v=B;B=0;if(v&1)sa=1;else{B=0;eb(503,u|0,1240,229);B=0;sa=0}v=Rb()|0;U=Q;Yua(q);pa=sa;qa=U;ra=v}Yua(p);Yua(o);if(pa){na=qa;oa=ra}else{ta=qa;xa=ra;break d}}else{v=Rb()|0;na=Q;oa=v}while(0);zb(u|0);ta=na;xa=oa}else C=55;while(0);if((C|0)==55){a=Rb()|0;ta=Q;xa=a}k[n>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);R=ta;S=xa;Qb(S|0)}while(0);ja=la;ka=ma;vva(e);Qb(ka|0)}}}function _N(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,81558,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149562,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,214,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function $N(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,81558,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149553,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,218,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function aO(a,b){a=a|0;b=b|0;return (k[a+(b+-1<<2)>>2]|0)!=0|0}function bO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a+(c+-1<<2)>>2]|0;if(j){Fc[k[(k[j>>2]|0)+28>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,240,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function cO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a+(c+-1<<2)>>2]|0;if(j){Fc[k[(k[j>>2]|0)+32>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,250,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function dO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a+(c+-1<<2)>>2]|0;if(j){Fc[k[(k[j>>2]|0)+44>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,260,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function eO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a+(c+-1<<2)>>2]|0;if(l){Xc[k[(k[l>>2]|0)+48>>2]&63](l,b,d);r=e;return}e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);l=B;B=0;do if(l&1){a=Rb()|0;o=Q;p=a}else{k[b>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);Yua(a);Ava(b);o=s;p=q;break}Yua(f);B=0;q=Ia(40,g|0,85329,10)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,c|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,81635,8)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,h|0,81558,76);u=B;B=0;do if(!(u&1)){B=0;eb(502,i|0,81644,9);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(h);v=q;w=s;break}B=0;wa(510,j|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,h|0,i|0,270,j|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(j);x=q;y=s;z=A}Yua(i);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function fO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a+(c+-1<<2)>>2]|0;if(j){Fc[k[(k[j>>2]|0)+52>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,280,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function gO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a+(d+-1<<2)>>2]|0;if(l){nd[k[(k[l>>2]|0)+56>>2]&1023](l,b,c);r=e;return}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[c>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);Yua(l);Ava(c);o=q;p=a;break}Yua(f);B=0;a=Ia(40,g|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(h);u=a;v=q;break}B=0;wa(510,j|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,291,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(j);w=a;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function hO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a+(d+-1<<2)>>2]|0;if(l){nd[k[(k[l>>2]|0)+36>>2]&1023](l,b,c);r=e;return}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[c>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);Yua(l);Ava(c);o=q;p=a;break}Yua(f);B=0;a=Ia(40,g|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(h);u=a;v=q;break}B=0;wa(510,j|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,301,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(j);w=a;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function iO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a+(d+-1<<2)>>2]|0;if(l){nd[k[(k[l>>2]|0)+60>>2]&1023](l,b,c);r=e;return}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[c>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);Yua(l);Ava(c);o=q;p=a;break}Yua(f);B=0;a=Ia(40,g|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(h);u=a;v=q;break}B=0;wa(510,j|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,323,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(j);w=a;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function jO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;m=k[a+(e+-1<<2)>>2]|0;if(m){rd[k[(k[m>>2]|0)+64>>2]&511](m,b,c,d);r=f;return}f=h+56|0;d=h+4|0;k[h>>2]=27524;k[f>>2]=27544;B=0;wa(508,h+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;o=c;vva(f);Qb(o|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[f>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;p=Q;q=b}else{k[d>>2]=27560;b=h+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,d|0,g|0);m=B;B=0;if(m&1){m=Rb()|0;a=Q;Yua(g);Yua(b);Ava(d);p=a;q=m;break}Yua(g);B=0;m=Ia(40,h|0,85329,10)|0;a=B;B=0;if((((!(a&1)?(B=0,a=ya(427,e|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(a)|0,B=0,t=Ia(40,m|0,a|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,i|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,j|0,81644,9);a=B;B=0;if(a&1){a=Rb()|0;m=Q;Yua(i);u=m;v=a;break}B=0;wa(510,l|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,s|0,i|0,j|0,333,l|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}a=Rb()|0;m=Q;Yua(l);w=m;x=a;y=z}Yua(j);Yua(i);if(y){u=w;v=x}else{A=w;C=x;k[h>>2]=27468;k[f>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(f);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(s|0);A=u;C=v;k[h>>2]=27468;k[f>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(f);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[h>>2]=27468;k[f>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(f);Qb(C|0)}while(0);n=p;o=q;vva(f);Qb(o|0)}function kO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;g=r;r=r+192|0;h=g+176|0;i=g+40|0;j=g+24|0;l=g+12|0;m=g;n=k[a+(f+-1<<2)>>2]|0;if(n){Dc[k[(k[n>>2]|0)+68>>2]&255](n,b,c,d,e);r=g;return}g=i+56|0;e=i+4|0;k[i>>2]=27524;k[g>>2]=27544;B=0;wa(508,i+56|0,e|0);d=B;B=0;if(d&1){d=Rb()|0;o=Q;p=d;vva(g);Qb(p|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[g>>2]=27488;B=0;va(448,e|0);d=B;B=0;do if(d&1){c=Rb()|0;q=Q;s=c}else{k[e>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,e|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;n=Q;Yua(h);Yua(c);Ava(e);q=n;s=b;break}Yua(h);B=0;b=Ia(40,i|0,85329,10)|0;n=B;B=0;if((((!(n&1)?(B=0,n=ya(427,f|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(n)|0,B=0,t=Ia(40,b|0,n|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,j|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,l|0,81644,9);n=B;B=0;if(n&1){n=Rb()|0;b=Q;Yua(j);u=b;v=n;break}B=0;wa(510,m|0,e|0);n=B;B=0;if(n&1){n=Rb()|0;w=Q;x=n;y=1}else{B=0;ua(163,a|0,j|0,l|0,343,m|0);n=B;B=0;if(n&1)z=1;else{B=0;eb(503,a|0,1240,229);B=0;z=0}n=Rb()|0;b=Q;Yua(m);w=b;x=n;y=z}Yua(l);Yua(j);if(y){u=w;v=x}else{A=w;C=x;k[i>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(g);Qb(C|0)}}else{n=Rb()|0;u=Q;v=n}while(0);zb(a|0);A=u;C=v;k[i>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(g);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[i>>2]=27468;k[g>>2]=27488;k[e>>2]=27560;Yua(c);Ava(e);vva(g);Qb(C|0)}while(0);o=q;p=s;vva(g);Qb(p|0)}function lO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a+(c+-1<<2)>>2]|0;if(j){Fc[k[(k[j>>2]|0)+80>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81635,8)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,81558,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,81644,9);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,373,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function mO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+(c+-1<<2)>>2]|0;if(d){Fc[k[(k[d>>2]|0)+88>>2]&1023](d,b);return}d=Qqa(12)|0;B=0;eb(517,d|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(d);Qb(b|0)}b=a+((Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0)+-1<<2)|0;a=k[b>>2]|0;if(a){Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[b>>2]=0}k[b>>2]=d;return}function nO(a,b){a=a|0;b=b|0;return k[a+(b+-1<<2)>>2]|0}function oO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+(c+-1<<2)>>2]|0;if(d){Fc[k[(k[d>>2]|0)+92>>2]&1023](d,b);return}d=Qqa(12)|0;B=0;eb(518,d|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(d);Qb(b|0)}b=a+((Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0)+-1<<2)|0;a=k[b>>2]|0;if(a){Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[b>>2]=0}k[b>>2]=d;return}function pO(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=k[a+(c+-1<<2)>>2]|0;if(d){Cc[k[(k[d>>2]|0)+96>>2]&63](d,b);return}d=Qqa(16)|0;B=0;Oa(59,d|0,c|0,+b);c=B;B=0;if(c&1){c=Rb()|0;Sqa(d);Qb(c|0)}c=a+((Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0)+-1<<2)|0;a=k[c>>2]|0;if(a){Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[c>>2]=0}k[c>>2]=d;return}function qO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+(d+-1<<2)>>2]|0;if(e){nd[k[(k[e>>2]|0)+116>>2]&1023](e,b,c);return}e=Qqa(16)|0;B=0;ib(293,e|0,d|0,b|0,c|0);c=B;B=0;if(c&1){c=Rb()|0;Sqa(e);Qb(c|0)}c=a+((Hc[k[(k[e>>2]|0)+24>>2]&511](e)|0)+-1<<2)|0;a=k[c>>2]|0;if(a){Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[c>>2]=0}k[c>>2]=e;return}function rO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+(c+-1<<2)>>2]|0;if(d){Fc[k[(k[d>>2]|0)+132>>2]&1023](d,b);return}d=Qqa(12)|0;B=0;eb(519,d|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(d);Qb(b|0)}b=a+((Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0)+-1<<2)|0;a=k[b>>2]|0;if(a){Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[b>>2]=0}k[b>>2]=d;return}function sO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;c=r;r=r+208|0;d=c+192|0;e=c+184|0;f=c+180|0;g=c+176|0;h=c+40|0;i=c+24|0;j=c+12|0;l=c;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;gO(a,f,g,959);iO(a,e,c+188|0,958);a=k[g>>2]|0;if(!a){m=0;r=c;return m|0}n=(a|0)>0;a:do if(n){o=k[e>>2]|0;q=+(b|0);s=0;while(1){if(+p[o+(s<<3)>>3]==q){t=s;u=6;break}s=s+1|0;if((s|0)>=(a|0)){u=7;break}}if((u|0)==6)if((t|0)==-1)u=7;else v=t;if((u|0)==7){if(!n)break;s=k[e>>2]|0;o=0;while(1){if(+p[s+(o<<3)>>3]==483.0){w=o;break}o=o+1|0;if((o|0)>=(a|0))break a}if((w|0)==-1)break;else v=w}o=(k[f>>2]|0)+(v<<2)|0;s=Rqa((Lta(k[o>>2]|0)|0)+1|0)|0;Jta(s,k[o>>2]|0)|0;o=k[e>>2]|0;if(o)Tqa(o);k[e>>2]=0;o=k[g>>2]|0;x=k[f>>2]|0;if((o|0)>0){y=x;z=o;o=0;while(1){A=k[y+(o<<2)>>2]|0;if(!A){C=z;D=y}else{Tqa(A);C=k[g>>2]|0;D=k[f>>2]|0}o=o+1|0;if((o|0)>=(C|0)){E=D;break}else{y=D;z=C}}}else E=x;if(E)Tqa(E);k[f>>2]=0;m=s;r=c;return m|0}while(0);m=h+56|0;c=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,c|0);f=B;B=0;if(f&1){f=Rb()|0;F=Q;G=f;vva(m);Qb(G|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,c|0);f=B;B=0;do if(f&1){E=Rb()|0;H=Q;I=E}else{k[c>>2]=27560;E=h+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(d);Yua(E);Ava(c);H=D;I=C;break}Yua(d);B=0;C=Ia(40,h|0,81654,51)|0;D=B;B=0;if(((!(D&1)?(B=0,D=ya(427,b|0)|0,g=B,B=0,!(g&1)):0)?(g=Lta(D)|0,B=0,e=Ia(40,C|0,D|0,g|0)|0,g=B,B=0,!(g&1)):0)?(B=0,Xa(239,e|0,0)|0,e=B,B=0,!(e&1)):0){e=Ab(20)|0;B=0;eb(502,i|0,81558,76);g=B;B=0;do if(!(g&1)){B=0;eb(502,j|0,81706,19);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(i);J=C;K=D;break}B=0;wa(510,l|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;L=Q;M=D;N=1}else{B=0;ua(163,e|0,i|0,j|0,584,l|0);D=B;B=0;if(D&1)O=1;else{B=0;eb(503,e|0,1240,229);B=0;O=0}D=Rb()|0;C=Q;Yua(l);L=C;M=D;N=O}Yua(j);Yua(i);if(N){J=L;K=M}else{P=L;R=M;k[h>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(E);Ava(c);vva(m);Qb(R|0)}}else{D=Rb()|0;J=Q;K=D}while(0);zb(e|0);P=J;R=K;k[h>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(E);Ava(c);vva(m);Qb(R|0)}g=Rb()|0;P=Q;R=g;k[h>>2]=27468;k[m>>2]=27488;k[c>>2]=27560;Yua(E);Ava(c);vva(m);Qb(R|0)}while(0);F=H;G=I;vva(m);Qb(G|0);return 0}function tO(a,b){a=a|0;b=b|0;var c=0;c=sO(a,b)|0;pZ(c);if(!c)return;Tqa(c);return}function uO(a){a=a|0;k[a>>2]=34448;return}function vO(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=34448;k[a+4>>2]=b;i[a+8>>0]=c&1;return}function wO(a){a=a|0;k[a>>2]=34448;return}function xO(a){a=a|0;Sqa(a);return}function yO(a){a=a|0;zO(a);return}function zO(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;j=Q;l=h;vva(f);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){m=Rb()|0;n=Q;o=m}else{k[g>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(g);n=q;o=p;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;p=Ia(40,d|0,81737,13)|0;q=B;B=0;if((((((!(q&1)?(k[p+(k[(k[p>>2]|0)+-12>>2]|0)+12>>2]=35,q=p+(k[(k[p>>2]|0)+-12>>2]|0)+4|0,k[q>>2]=k[q>>2]&-177|32,B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,149175,1)|0,t=B,B=0,!(t&1)):0)?(t=(i[a+8>>0]|0)!=0,B=0,q=Ia(40,s|0,(t?159247:159252)|0,(t?4:5)|0)|0,t=B,B=0,!(t&1)):0)?(B=0,Ia(40,q|0,149177,1)|0,q=B,B=0,!(q&1)):0)?(B=0,wa(510,e|0,g|0),q=B,B=0,!(q&1)):0){B=0;ya(424,e|0)|0;q=B;B=0;if(!(q&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);r=b;return}q=Rb()|0;t=Q;Yua(e);u=t;v=q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);Qb(v|0)}q=Rb()|0;u=Q;v=q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(f);Qb(v|0)}while(0);j=n;l=o;vva(f);Qb(l|0)}function AO(a){a=a|0;return 557}function BO(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=i[a+8>>0]|0;k[b>>2]=34448;k[b+4>>2]=c;i[b+8>>0]=d;return b|0}function CO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=45;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=i[a+8>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+9;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+4|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[a+8>>0]=i[d>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;p=Q;q=d;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){a=Rb()|0;s=Q;t=a}else{k[b>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(f);Yua(a);Ava(b);s=c;t=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,81751,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;u=Q;Yua(h);v=u;w=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;x=n;y=Q;z=1}else{B=0;ua(163,o|0,h|0,j|0,58,m|0);n=B;B=0;if(n&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}n=Rb()|0;u=Q;Yua(m);x=n;y=u;z=A}Yua(j);Yua(h);if(z){v=y;w=x}else{C=y;D=x;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}}else{u=Rb()|0;v=Q;w=u}while(0);zb(o|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(D|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function DO(a){a=a|0;return k[a+4>>2]|0}function EO(a,b){a=a|0;b=b|0;i[b>>0]=i[a+8>>0]|0;return}function FO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function GO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function HO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function IO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function JO(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,81827,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,47,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function KO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function LO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function MO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function NO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function OO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function PO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function QO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function RO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function SO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function TO(a,b){a=a|0;b=b|0;i[a+8>>0]=b&1;return}function UO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,81941,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function VO(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,81913,27)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,81827,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,60,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function WO(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function XO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function YO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function ZO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function _O(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function $O(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function aP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function bP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function cP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function dP(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,81827,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function eP(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function fP(a){a=a|0;k[a>>2]=34600;return}function gP(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=34600;k[a+4>>2]=b;k[a+8>>2]=c;return}function hP(a){a=a|0;k[a>>2]=34600;return}function iP(a){a=a|0;Sqa(a);return}function jP(a){a=a|0;kP(a);return}function kP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;o=Ia(40,d|0,81971,12)|0;p=B;B=0;if((((((!(p&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=35,p=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[p>>2]=k[p>>2]&-177|32,B=0,p=ya(427,k[a+4>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,149175,1)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Xa(242,q|0,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,149177,1)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function lP(a){a=a|0;return 580}function mP(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=34600;k[b+4>>2]=c;k[b+8>>2]=d;return b|0}function nP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=68;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+12;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+4|0;o=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;a=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=a;i[n+1>>0]=a>>8;i[n+2>>0]=a>>16;i[n+3>>0]=a>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;p=Q;q=a;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){n=Rb()|0;s=Q;t=n}else{k[b>>2]=27560;n=g+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(f);Yua(n);Ava(b);s=c;t=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,81984,74);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);d=B;B=0;if(d&1){d=Rb()|0;u=Q;Yua(h);v=u;w=d;break}B=0;wa(510,m|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;x=d;y=Q;z=1}else{B=0;ua(163,o|0,h|0,j|0,59,m|0);d=B;B=0;if(d&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}d=Rb()|0;u=Q;Yua(m);x=d;y=u;z=A}Yua(j);Yua(h);if(z){v=y;w=x}else{C=y;D=x;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}}else{u=Rb()|0;v=Q;w=u}while(0);zb(o|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(D|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function oP(a){a=a|0;return k[a+4>>2]|0}function pP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function qP(a,b){a=a|0;b=b|0;k[b>>2]=k[a+8>>2];return}function rP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function sP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function tP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function uP(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82059,84);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,48,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function vP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function xP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function yP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function zP(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function AP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function BP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function CP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function DP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function EP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82197,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function FP(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function GP(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,82170,26)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82059,84);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,63,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function HP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function JP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function KP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function LP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function MP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function NP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function PP(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function QP(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82059,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function RP(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function SP(a){a=a|0;k[a>>2]=34752;return}function TP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=34752;k[a+4>>2]=b;k[a+12>>2]=d;if(!d){k[a+8>>2]=0;return}b=Rqa(d>>>0>1073741823?-1:d<<2)|0;k[a+8>>2]=b;if(!c)yb(142353,85118,137,142345);TEa(b|0,c|0,d<<2|0)|0;return}function UP(a){a=a|0;var b=0;k[a>>2]=34752;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function VP(a){a=a|0;var b=0;k[a>>2]=34752;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function WP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,82231,13)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,85228,9)|0;G=B;B=0;do if((((((!(G&1)?(H=a+4|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,82245,16)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(242,S|0,k[a+12>>2]|0)|0;V=B;B=0;if(V&1){W=48;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=48;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=48;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=48;while(0);if((W|0)==48){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=45;while(0);if((W|0)==45){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=42;while(0);if((W|0)==42){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function XP(a){a=a|0;return 581}function YP(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;k[b>>2]=34752;k[b+4>>2]=c;k[b+12>>2]=e;if(!e){k[b+8>>2]=0;return b|0}B=0;c=ya(422,(e>>>0>1073741823?-1:e<<2)|0)|0;a=B;B=0;if(a&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}k[b+8>>2]=c;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}else{TEa(c|0,d|0,e<<2|0)|0;return b|0}return 0}function ZP(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=69;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+12|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=a+12|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+12|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;t=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;y=v;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(t);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,82262,77);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,t|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,89,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(u);T=P;U=R;Qb(U|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=k[w>>2]|0;C=a+8|0;if(!y){k[C>>2]=0;r=e;return}a=(k[C>>2]|0)==0;if(s){i[k[b>>2]>>0]=a&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(a){r=e;return}TEa(s|0,k[C>>2]|0,k[w>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[w>>2]<<2);r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(a){r=e;return}k[c>>2]=d+(k[w>>2]<<2);r=e;return}case 1:{w=k[b>>2]|0;d=i[w>>0]|0;k[b>>2]=w+1;if(d&1){r=e;return}d=Rqa(y>>>0>1073741823?-1:y<<2)|0;k[C>>2]=d;C=k[b>>2]|0;w=y<<2;TEa(d|0,C|0,w|0)|0;k[b>>2]=C+w;r=e;return}default:{e=n+56|0;w=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,w|0);C=B;B=0;if(C&1){C=Rb()|0;V=Q;W=C;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,w|0);C=B;B=0;do if(C&1){b=Rb()|0;X=Q;Y=b}else{k[w>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;y=Q;Yua(f);Yua(b);Ava(w);X=y;Y=d;break}Yua(f);B=0;d=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,d|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,o|0,82262,77);a=B;B=0;do if(!(a&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(o);Z=A;_=s;break}B=0;wa(510,q|0,w|0);s=B;B=0;if(s&1){s=Rb()|0;$=1;aa=Q;ba=s}else{B=0;ua(163,c|0,o|0,p|0,94,q|0);s=B;B=0;if(s&1)ca=1;else{B=0;eb(503,c|0,1240,229);B=0;ca=0}s=Rb()|0;A=Q;Yua(q);$=ca;aa=A;ba=s}Yua(p);Yua(o);if($){Z=aa;_=ba}else{da=aa;ea=ba;break c}}else{s=Rb()|0;Z=Q;_=s}while(0);zb(c|0);da=Z;ea=_}else S=49;while(0);if((S|0)==49){d=Rb()|0;da=Q;ea=d}k[n>>2]=27468;k[e>>2]=27488;k[w>>2]=27560;Yua(b);Ava(w);vva(e);T=da;U=ea;Qb(U|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}}}function _P(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=k[a+12>>2]|0;if(d){e=Rqa(d>>>0>1073741823?-1:d<<2)|0;f=k[a+8>>2]|0;if(!f)yb(142353,85118,137,142345);else{a=0;do{k[e+(a<<2)>>2]=k[f+(a<<2)>>2];a=a+1|0}while((a|0)!=(d|0));g=e}}else g=0;if(!c){k[b>>2]=g;return}k[c>>2]=d;k[b>>2]=g;return}function $P(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+8|0;e=k[d>>2]|0;if(e)Tqa(e);k[d>>2]=0;if(!c){k[d>>2]=0;f=a+12|0;k[f>>2]=c;return}e=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[d>>2]=e;if(!b)yb(142353,85118,137,142345);TEa(e|0,b|0,c<<2|0)|0;f=a+12|0;k[f>>2]=c;return}function aQ(a){a=a|0;return k[a+4>>2]|0}function bQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function cQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function dQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82481,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function eQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function fQ(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82340,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,49,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function gQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function iQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82428,52)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function jQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function kQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function lQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function mQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function nQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function oQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function pQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function qQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function rQ(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82340,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,62,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function tQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function uQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84826,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function vQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84826,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function wQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85485,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function xQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function zQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function AQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82340,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,72,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function BQ(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function CQ(a){a=a|0;k[a>>2]=34904;return}function DQ(a){a=a|0;var b=0;k[a>>2]=34904;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function EQ(a){a=a|0;var b=0;k[a>>2]=34904;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function FQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,82519,13)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,85228,9)|0;G=B;B=0;do if((((((!(G&1)?(H=a+4|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,83531,16)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(242,S|0,k[a+12>>2]|0)|0;V=B;B=0;if(V&1){W=50;break}B=0;V=Ia(40,U|0,83548,1)|0;U=B;B=0;if(U&1){W=50;break}B=0;U=Xa(242,V|0,k[a+16>>2]|0)|0;V=B;B=0;if(V&1){W=50;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=50;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=50;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=50;while(0);if((W|0)==50){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=47;while(0);if((W|0)==47){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=44;while(0);if((W|0)==44){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function GQ(a){a=a|0;return 693}function HQ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=Qqa(20)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;f=k[a+16>>2]|0;k[b>>2]=34904;k[b+4>>2]=c;k[b+12>>2]=e;k[b+16>>2]=f;c=ma(f,e)|0;B=0;e=ya(422,(c>>>0>1073741823?-1:c<<2)|0)|0;f=B;B=0;if(f&1){g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}k[b+8>>2]=e;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}if(!c)return b|0;TEa(e|0,d|0,c<<2|0)|0;return b|0}function IQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=181;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+8|0;q=(k[n>>2]|0)==0;i[p>>0]=q&1;p=(k[b>>2]|0)+1|0;k[b>>2]=p;if(q){r=e;return}TEa(p|0,k[n>>2]|0,ma(k[d>>2]<<2,k[o>>2]|0)|0)|0;n=ma(k[d>>2]<<2,k[o>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+n;r=e;return}case 2:{n=(k[a+8>>2]|0)==0;o=(k[c>>2]|0)+17|0;k[c>>2]=o;if(n){r=e;return}n=(ma(k[a+12>>2]<<2,k[a+16>>2]|0)|0)+o|0;k[c>>2]=n;r=e;return}case 1:{n=(k[b>>2]|0)+4|0;k[b>>2]=n;c=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[c>>0]=o;i[c+1>>0]=o>>8;i[c+2>>0]=o>>16;i[c+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;c=a+12|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[c>>0]=n;i[c+1>>0]=n>>8;i[c+2>>0]=n>>16;i[c+3>>0]=n>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+16|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;o=k[b>>2]|0;c=o+4|0;k[b>>2]=c;p=i[c>>0]|0;k[b>>2]=o+5;if(p&1){r=e;return}p=ma(d,n)|0;o=Rqa(p>>>0>1073741823?-1:p<<2)|0;k[a+8>>2]=o;a=k[b>>2]|0;p=ma(n<<2,d)|0;TEa(o|0,a|0,p|0)|0;k[b>>2]=a+p;r=e;return}default:{e=g+56|0;p=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,p|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(e);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,p|0);a=B;B=0;do if(a&1){b=Rb()|0;u=Q;v=b}else{k[p>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,p|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;d=Q;Yua(f);Yua(b);Ava(p);u=d;v=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,82533,77);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;c=Q;Yua(h);w=c;x=n;break}B=0;wa(510,m|0,p|0);n=B;B=0;if(n&1){n=Rb()|0;y=Q;z=n;A=1}else{B=0;ua(163,o|0,h|0,j|0,77,m|0);n=B;B=0;if(n&1)C=1;else{B=0;eb(503,o|0,1240,229);B=0;C=0}n=Rb()|0;c=Q;Yua(m);y=c;z=n;A=C}Yua(j);Yua(h);if(A){w=y;x=z}else{D=y;E=z;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}}else{n=Rb()|0;w=Q;x=n}while(0);zb(o|0);D=w;E=x;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}d=Rb()|0;D=Q;E=d;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}}}function JQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=k[a+12>>2]|0;f=a+16|0;g=ma(k[f>>2]|0,e)|0;h=Rqa(g>>>0>1073741823?-1:g<<2)|0;i=k[a+8>>2]|0;if(!i)yb(142353,85118,137,142345);if(g){a=0;do{k[h+(a<<2)>>2]=k[i+(a<<2)>>2];a=a+1|0}while((a|0)!=(g|0))}if(c)k[c>>2]=e;if(!d){k[b>>2]=h;return}k[d>>2]=k[f>>2];k[b>>2]=h;return}function KQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=a+8|0;f=k[e>>2]|0;if(f)Tqa(f);f=ma(d,c)|0;g=Rqa(f>>>0>1073741823?-1:f<<2)|0;k[e>>2]=g;if(!b)yb(142353,85118,137,142345);if(f)TEa(g|0,b|0,f<<2|0)|0;k[a+12>>2]=c;k[a+16>>2]=d;return}function LQ(a){a=a|0;return k[a+4>>2]|0}function MQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function NQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function PQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function QQ(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82611,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,49,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function RQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function SQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function TQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function UQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function VQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function WQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function XQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function YQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ZQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function _Q(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function $Q(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function aR(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82611,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,62,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function bR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function cR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function dR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85543,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function eR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85543,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function fR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85514,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function gR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function jR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82611,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,72,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function kR(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function lR(a){a=a|0;k[a>>2]=35056;return}function mR(a,b,c){a=a|0;b=b|0;c=+c;k[a>>2]=35056;k[a+4>>2]=b;p[a+8>>3]=c;return}function nR(a){a=a|0;k[a>>2]=35056;return}function oR(a){a=a|0;Sqa(a);return}function pR(a){a=a|0;qR(a);return}function qR(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(c);Yua(l);Ava(g);m=q;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;o=Ia(40,d|0,82713,15)|0;q=B;B=0;if((((((!(q&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=35,q=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[q>>2]=k[q>>2]&-177|32,B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,o|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,149175,1)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Sa(1,s|0,+(+p[a+8>>3]))|0,s=B,B=0,!(s&1)):0)?(B=0,Ia(40,t|0,149177,1)|0,t=B,B=0,!(t&1)):0)?(B=0,wa(510,e|0,g|0),t=B,B=0,!(t&1)):0){B=0;ya(424,e|0)|0;t=B;B=0;if(!(t&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}t=Rb()|0;s=Q;Yua(e);u=s;v=t;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(v|0)}t=Rb()|0;u=Q;v=t;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(v|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function rR(a){a=a|0;return 566}function sR(a){a=a|0;var b=0,c=0,d=0.0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=+p[a+8>>3];k[b>>2]=35056;k[b+4>>2]=c;p[b+8>>3]=d;return b|0}function tR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=54;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+16;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;d=a+4|0;q=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;d=a+8|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;s=Q;u=d;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){q=Rb()|0;v=Q;w=q}else{k[b>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;c=Q;Yua(f);Yua(q);Ava(b);v=c;w=a;break}Yua(f);B=0;a=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,82729,77);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(h);x=o;y=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;z=n;A=Q;C=1}else{B=0;ua(163,a|0,h|0,j|0,56,m|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,a|0,1240,229);B=0;D=0}n=Rb()|0;o=Q;Yua(m);z=n;A=o;C=D}Yua(j);Yua(h);if(C){x=A;y=z}else{E=A;F=z;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}}else{o=Rb()|0;x=Q;y=o}while(0);zb(a|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function uR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82829,26)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,66,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function vR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82856,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,70,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82880,36)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,74,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function xR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82880,36)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,78,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function yR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82917,38)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,82,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function zR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,82807,21)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,82917,38)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,82729,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,86,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function AR(a){a=a|0;return k[a+4>>2]|0}function BR(a,b){a=a|0;b=b|0;p[b>>3]=+p[a+8>>3];return}
+-function m5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;b=r;r=r+512|0;c=b+492|0;d=b+344|0;e=b+480|0;f=b+332|0;g=b+320|0;h=b+184|0;i=b+36|0;j=b+48|0;l=b+24|0;m=b+12|0;n=b;o=k[a>>2]|0;p=k[o+8>>2]|0;if(!p){q=d+56|0;s=d+4|0;k[d>>2]=27524;k[q>>2]=27544;B=0;wa(508,d+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=d+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;z=Ia(40,d|0,123992,7)|0;A=B;B=0;a:do if(!(A&1)?(B=0,Xa(239,z|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,e|0,121503,60);D=B;B=0;do if(!(D&1)){B=0;eb(502,f|0,124e3,18);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);G=E;H=F;break}B=0;wa(510,g|0,s|0);F=B;B=0;if(F&1){F=Rb()|0;I=F;J=Q;K=1}else{B=0;ua(163,C|0,e|0,f|0,2963,g|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,C|0,1240,229);B=0;L=0}F=Rb()|0;E=Q;Yua(g);I=F;J=E;K=L}Yua(f);Yua(e);if(K){G=I;H=J}else{M=I;N=J;break a}}else{E=Rb()|0;G=E;H=Q}while(0);zb(C|0);M=G;N=H}else O=17;while(0);if((O|0)==17){z=Rb()|0;M=z;N=Q}k[d>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);P=M;R=N;Qb(P|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}v=Rqa(p>>>0>1073741823?-1:p<<2)|0;if((p|0)>0)WEa(v|0,0,((p|0)>1?p:1)<<2|0)|0;p=a+52|0;if((k[p>>2]|0)>0){q=a+16|0;y=k[q>>2]|0;x=v+((Epa(o,k[y+12>>2]|0)|0)<<2)|0;k[x>>2]=y;y=k[p>>2]|0;if((y|0)>1){x=1;do{o=k[q>>2]|0;u=v+((Epa(k[a>>2]|0,k[o+(x*24|0)+12>>2]|0)|0)<<2)|0;k[u>>2]=o+(x*24|0);x=x+1|0;o=k[p>>2]|0}while((x|0)<(o|0));S=o}else S=y;if((S|0)>0){S=a+16|0;y=0;do{x=k[S>>2]|0;q=x+(y*24|0)|0;o=k[x+(y*24|0)+12>>2]|0;b:do if(!(ypa(k[o>>2]|0)|0)){x=o;u=0;do{N=k[x+56+(u<<2)>>2]|0;x=k[x+48+(u<<2)>>2]|0;M=v+((Epa(k[a>>2]|0,x)|0)<<2)|0;if(k[M>>2]|0)break b;u=1-N|0;N=v+((Epa(k[a>>2]|0,x)|0)<<2)|0;k[N>>2]=q}while((ypa(k[x+(u<<2)>>2]|0)|0)==0)}while(0);q=k[S>>2]|0;o=q+(y*24|0)|0;w=k[q+(y*24|0)+12>>2]|0;c:do if(!(ypa(k[w+4>>2]|0)|0)){q=w;u=1;do{x=k[q+56+(u<<2)>>2]|0;q=k[q+48+(u<<2)>>2]|0;C=v+((Epa(k[a>>2]|0,q)|0)<<2)|0;if(k[C>>2]|0)break c;u=1-x|0;x=v+((Epa(k[a>>2]|0,q)|0)<<2)|0;k[x>>2]=o}while((ypa(k[q+(u<<2)>>2]|0)|0)==0)}while(0);y=y+1|0}while((y|0)<(k[p>>2]|0))}}p=k[a>>2]|0;if((k[p+8>>2]|0)<=0){r=b;return v|0}y=h+56|0;S=h+4|0;o=h+56|0;w=h+128|0;u=h+132|0;q=h+36|0;x=h+52|0;C=p;p=0;N=0;while(1){if(!(k[v+(p<<2)>>2]|0)){M=N+1|0;if((M|0)<10){k[h>>2]=27524;k[y>>2]=27544;B=0;wa(508,o|0,S|0);s=B;B=0;if(s&1){O=44;break}k[w>>2]=0;k[u>>2]=-1;k[h>>2]=27468;k[y>>2]=27488;B=0;va(448,S|0);s=B;B=0;if(s&1){O=45;break}k[S>>2]=27560;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[x>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,S|0,c|0);s=B;B=0;if(s&1){O=43;break}Yua(c);B=0;s=Ia(40,h|0,124019,26)|0;d=B;B=0;if(d&1){O=54;break}B=0;d=Xa(253,s|0,p|0)|0;s=B;B=0;if(s&1){O=54;break}B=0;Ia(40,d|0,124046,21)|0;d=B;B=0;if(d&1){O=54;break}B=0;wa(510,i|0,S|0);d=B;B=0;if(d&1){O=54;break}B=0;ya(424,i|0)|0;d=B;B=0;if(d&1){O=55;break}Yua(i);k[h>>2]=27468;k[y>>2]=27488;k[S>>2]=27560;Yua(q);Ava(S);vva(y);T=k[a>>2]|0;U=M}else{T=C;U=M}}else{T=C;U=N}p=p+1|0;if((p|0)>=(k[T+8>>2]|0)){V=U;O=58;break}else{C=T;N=U}}if((O|0)==43){U=Rb()|0;N=Q;Yua(c);Yua(q);Ava(S);W=N;X=U;O=46}else if((O|0)==44){U=Rb()|0;Y=Q;Z=U;vva(y);Qb(Z|0)}else if((O|0)==45){U=Rb()|0;W=Q;X=U;O=46}else if((O|0)==54){U=Rb()|0;_=U;$=Q;O=56}else if((O|0)==55){U=Rb()|0;N=Q;Yua(i);_=U;$=N;O=56}else if((O|0)==58){if(!V){r=b;return v|0}v=j+56|0;b=j+4|0;k[j>>2]=27524;k[v>>2]=27544;B=0;wa(508,j+56|0,b|0);V=B;B=0;if(V&1){V=Rb()|0;aa=Q;ba=V;vva(v);Qb(ba|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[v>>2]=27488;B=0;va(448,b|0);V=B;B=0;do if(V&1){N=Rb()|0;ca=Q;da=N}else{k[b>>2]=27560;N=j+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;i=Q;Yua(c);Yua(N);Ava(b);ca=i;da=U;break}Yua(c);B=0;U=Ia(40,j|0,124068,9)|0;i=B;B=0;d:do if(!(i&1)?(B=0,Xa(239,U|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,l|0,121503,60);C=B;B=0;do if(!(C&1)){B=0;eb(502,m|0,124e3,18);p=B;B=0;if(p&1){p=Rb()|0;a=Q;Yua(l);ea=a;fa=p;break}B=0;wa(510,n|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;ga=1;ha=p;ia=Q}else{B=0;ua(163,T|0,l|0,m|0,2996,n|0);p=B;B=0;if(p&1)ja=1;else{B=0;eb(503,T|0,1240,229);B=0;ja=0}p=Rb()|0;a=Q;Yua(n);ga=ja;ha=p;ia=a}Yua(m);Yua(l);if(ga){ea=ia;fa=ha}else{ka=ha;la=ia;break d}}else{a=Rb()|0;ea=Q;fa=a}while(0);zb(T|0);ka=fa;la=ea}else O=74;while(0);if((O|0)==74){U=Rb()|0;ka=U;la=Q}k[j>>2]=27468;k[v>>2]=27488;k[b>>2]=27560;Yua(N);Ava(b);vva(v);P=ka;R=la;Qb(P|0)}while(0);aa=ca;ba=da;vva(v);Qb(ba|0)}if((O|0)==46){Y=W;Z=X;vva(y);Qb(Z|0)}else if((O|0)==56){k[h>>2]=27468;k[y>>2]=27488;k[S>>2]=27560;Yua(q);Ava(S);vva(y);P=_;R=$;Qb(P|0)}return 0}function n5(a,b){a=a|0;b=b|0;return (b-(k[a+12>>2]|0)|0)/48|0|0}function o5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0;e=r;r=r+720|0;f=e+700|0;g=e+8|0;h=e+688|0;i=e+676|0;l=e+664|0;m=e+528|0;n=e+512|0;o=e+228|0;p=e+216|0;q=e+376|0;s=e+204|0;t=e+192|0;u=e+180|0;v=e+240|0;w=e+168|0;x=e+156|0;y=e+144|0;z=e;if(!d){A=k[a+20>>2]|0;if(!A){C=g+56|0;D=g+4|0;k[g>>2]=27524;k[C>>2]=27544;B=0;wa(508,g+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=g+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,D|0,f|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(f);Yua(H);Ava(D);I=L;J=K;break}Yua(f);B=0;K=Ia(40,g|0,124078,55)|0;L=B;B=0;a:do if(!(L&1)?(B=0,Xa(239,K|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,h|0,121503,60);N=B;B=0;do if(!(N&1)){B=0;eb(502,i|0,124134,21);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(h);R=P;S=O;break}B=0;wa(510,l|0,D|0);O=B;B=0;if(O&1){O=Rb()|0;T=Q;U=O;V=1}else{B=0;ua(163,M|0,h|0,i|0,4042,l|0);O=B;B=0;if(O&1)W=1;else{B=0;eb(503,M|0,1240,229);B=0;W=0}O=Rb()|0;P=Q;Yua(l);T=P;U=O;V=W}Yua(i);Yua(h);if(V){R=T;S=U}else{X=T;Y=U;break a}}else{O=Rb()|0;R=Q;S=O}while(0);zb(M|0);X=R;Y=S}else Z=19;while(0);if((Z|0)==19){K=Rb()|0;X=Q;Y=K}k[g>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);_=X;$=Y;Qb($|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}G=Ppa(A,k[b>>2]|0,k[b+4>>2]|0)|0;if(!G){A=m+56|0;C=m+4|0;k[m>>2]=27524;k[A>>2]=27544;B=0;wa(508,m+56|0,C|0);J=B;B=0;if(J&1){J=Rb()|0;aa=Q;ba=J;vva(A);Qb(ba|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[A>>2]=27488;B=0;va(448,C|0);J=B;B=0;do if(J&1){I=Rb()|0;ca=Q;da=I}else{k[C>>2]=27560;I=m+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,C|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;Y=Q;Yua(f);Yua(I);Ava(C);ca=Y;da=F;break}Yua(f);B=0;F=Ia(40,m|0,124156,79)|0;Y=B;B=0;b:do if(!(Y&1)?(B=0,Xa(239,F|0,0)|0,X=B,B=0,!(X&1)):0){X=Ab(20)|0;B=0;eb(502,n|0,121503,60);D=B;B=0;do if(!(D&1)){B=0;eb(502,o|0,124134,21);S=B;B=0;if(S&1){S=Rb()|0;R=Q;Yua(n);ea=S;fa=R;break}B=0;wa(510,p|0,C|0);R=B;B=0;if(R&1){R=Rb()|0;ga=1;ha=Q;ia=R}else{B=0;ua(163,X|0,n|0,o|0,4048,p|0);R=B;B=0;if(R&1)ja=1;else{B=0;eb(503,X|0,1240,229);B=0;ja=0}R=Rb()|0;S=Q;Yua(p);ga=ja;ha=S;ia=R}Yua(o);Yua(n);if(ga){ea=ia;fa=ha}else{ka=ha;la=ia;break b}}else{R=Rb()|0;ea=R;fa=Q}while(0);zb(X|0);ka=fa;la=ea}else Z=43;while(0);if((Z|0)==43){F=Rb()|0;ka=Q;la=F}k[m>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(A);_=ka;$=la;Qb($|0)}while(0);aa=ca;ba=da;vva(A);Qb(ba|0)}ba=k[G+64>>2]|0;if(!ba){A=q+56|0;da=q+4|0;k[q>>2]=27524;k[A>>2]=27544;B=0;wa(508,q+56|0,da|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ma=Q;na=ca;vva(A);Qb(na|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[A>>2]=27488;B=0;va(448,da|0);ca=B;B=0;do if(ca&1){aa=Rb()|0;oa=Q;pa=aa}else{k[da>>2]=27560;aa=q+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[q+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,da|0,f|0);la=B;B=0;if(la&1){la=Rb()|0;ka=Q;Yua(f);Yua(aa);Ava(da);oa=ka;pa=la;break}Yua(f);B=0;la=Ia(40,q|0,124236,43)|0;ka=B;B=0;c:do if(((!(ka&1)?(B=0,C=Xa(253,la|0,((G-(k[a+8>>2]|0)|0)/72|0)+1|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,C|0,124280,10)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,s|0,121503,60);C=B;B=0;do if(!(C&1)){B=0;eb(502,t|0,124134,21);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(s);qa=fa;ra=ea;break}B=0;wa(510,u|0,da|0);ea=B;B=0;if(ea&1){ea=Rb()|0;sa=1;ta=Q;xa=ea}else{B=0;ua(163,m|0,s|0,t|0,4049,u|0);ea=B;B=0;if(ea&1)ya=1;else{B=0;eb(503,m|0,1240,229);B=0;ya=0}ea=Rb()|0;fa=Q;Yua(u);sa=ya;ta=fa;xa=ea}Yua(t);Yua(s);if(sa){qa=ta;ra=xa}else{za=ta;Aa=xa;break c}}else{ea=Rb()|0;qa=Q;ra=ea}while(0);zb(m|0);za=qa;Aa=ra}else Z=69;while(0);if((Z|0)==69){la=Rb()|0;za=Q;Aa=la}k[q>>2]=27468;k[A>>2]=27488;k[da>>2]=27560;Yua(aa);Ava(da);vva(A);_=za;$=Aa;Qb($|0)}while(0);ma=oa;na=pa;vva(A);Qb(na|0)}else Ba=ba}else Ba=d;d=Ba+32|0;ba=k[d>>2]|0;na=k[d+4>>2]|0;d=b+4|0;d:do if((na|0)<0){A=0;pa=Ba;while(1){if(k[pa>>2]|0)if(!(k[pa+4>>2]|0))Ca=1;else Ca=(k[pa+8>>2]|0)!=0?-1:2;else Ca=0;oa=j[52950+(Ca<<1)>>1]|0;ma=j[52956+(Ca<<1)>>1]|0;Aa=k[pa+(oa<<2)>>2]|0;za=k[pa+(ma<<2)>>2]|0;da=k[b>>2]|0;q=(k[Aa>>2]|0)-da|0;ra=k[d>>2]|0;qa=(k[Aa+4>>2]|0)-ra|0;Aa=(k[za>>2]|0)-da|0;da=(k[za+4>>2]|0)-ra|0;ra=bFa(da|0,((da|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;q=Q;da=bFa(qa|0,((qa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0;Aa=REa(ra|0,q|0,da|0,Q|0)|0;da=c+(Ca<<3)|0;q=da;k[q>>2]=Aa;k[q+4>>2]=Q;q=c+(ma<<3)|0;k[q>>2]=-1;k[q+4>>2]=-1;q=c+(oa<<3)|0;k[q>>2]=-1;k[q+4>>2]=-1;q=da;da=k[q+4>>2]|0;if((da|0)>0|(da|0)==0&(k[q>>2]|0)>>>0>0){Da=pa;break}q=Z4(pa,j[52944+(Ca<<1)>>1]|0)|0;da=A+1|0;oa=q+32|0;ma=k[oa+4>>2]|0;if((ma|0)<0){A=da;pa=q}else{Ea=ma;Fa=k[oa>>2]|0;Ga=da;Ha=q;break d}}r=e;return Da|0}else{Ea=na;Fa=ba;Ga=0;Ha=Ba}while(0);Ba=k[Ha+4>>2]|0;ba=k[Ba>>2]|0;na=k[Ba+4>>2]|0;Ba=k[Ha+8>>2]|0;Ca=k[Ba+4>>2]|0;if(!((Ea|0)>0|(Ea|0)==0&Fa>>>0>0)){Da=Ha;r=e;return Da|0}Fa=(k[d>>2]|0)-na|0;Ea=(k[Ba>>2]|0)-ba|0;Ba=bFa(Fa|0,((Fa|0)<0)<<31>>31|0,Ea|0,((Ea|0)<0)<<31>>31|0)|0;Ea=Q;Fa=Ca-na|0;na=(k[b>>2]|0)-ba|0;ba=bFa(Fa|0,((Fa|0)<0)<<31>>31|0,na|0,((na|0)<0)<<31>>31|0)|0;na=REa(Ba|0,Ea|0,ba|0,Q|0)|0;ba=c+8|0;Ea=c+16|0;Ba=f+4|0;Fa=g+4|0;Ca=na;na=Q;pa=Ha+32|0;A=Ga;Ga=0;aa=Ha;while(1){Ha=A;A=A+1|0;if((Ha|0)>9998){Ja=A;Z=85;break}Ha=j[52944+(Ga<<1)>>1]|0;q=c+(Ha<<3)|0;da=q;k[da>>2]=Ca;k[da+4>>2]=na;da=j[52950+(Ha<<1)>>1]|0;oa=j[52956+(Ha<<1)>>1]|0;ma=k[aa+(Ha<<2)>>2]|0;Ha=k[ma>>2]|0;Aa=k[ma+4>>2]|0;ma=k[aa+(da<<2)>>2]|0;ra=(k[ma>>2]|0)-Ha|0;qa=(k[ma+4>>2]|0)-Aa|0;ma=(k[b>>2]|0)-Ha|0;Ha=(k[d>>2]|0)-Aa|0;Aa=bFa(Ha|0,((Ha|0)<0)<<31>>31|0,ra|0,((ra|0)<0)<<31>>31|0)|0;ra=Q;Ha=bFa(qa|0,((qa|0)<0)<<31>>31|0,ma|0,((ma|0)<0)<<31>>31|0)|0;ma=REa(Aa|0,ra|0,Ha|0,Q|0)|0;Ha=Q;ra=c+(oa<<3)|0;k[ra>>2]=ma;k[ra+4>>2]=Ha;ra=pa;oa=q;q=REa(k[ra>>2]|0,k[ra+4>>2]|0,k[oa>>2]|0,k[oa+4>>2]|0)|0;oa=REa(q|0,Q|0,ma|0,Ha|0)|0;Ha=c+(da<<3)|0;k[Ha>>2]=oa;k[Ha+4>>2]=Q;if((k[c+4>>2]|0)<0){k[f>>2]=0;Ka=1}else Ka=0;if((k[ba+4>>2]|0)<0){k[f+(Ka<<2)>>2]=1;La=Ka+1|0}else La=Ka;if((k[Ea+4>>2]|0)>=0)if(!La){Ma=Ca;Na=na;Oa=Ga;Pa=aa;Z=124;break}else Qa=La;else{k[f+(La<<2)>>2]=2;Qa=La+1|0}Ha=(Qa|0)==2;if(Ha?(Esa()|0)<1073741823:0){oa=k[f>>2]|0;k[f>>2]=k[Ba>>2];k[Ba>>2]=oa}oa=k[f>>2]|0;M4(g,aa,oa);da=H4(g)|0;if(Ha&(k[da+4>>2]|0)<0){da=k[Ba>>2]|0;M4(z,aa,da);Ha=z;ma=k[Ha>>2]|0;q=k[Ha+4>>2]|0;Ha=g;k[Ha>>2]=ma;k[Ha+4>>2]=q;Ra=ma;Sa=q;Ta=da}else{Ra=k[g>>2]|0;Sa=k[Fa>>2]|0;Ta=oa}oa=c+(j[52944+(Ta<<1)>>1]<<3)|0;da=REa(0,0,k[oa>>2]|0,k[oa+4>>2]|0)|0;oa=Q;pa=Ra+32|0;q=pa;ma=k[q>>2]|0;Ha=k[q+4>>2]|0;if(!((Ha|0)>0|(Ha|0)==0&ma>>>0>0)){Ua=Ha;Va=da;Wa=oa;Ya=ma;Za=Sa;_a=Ra;break}else{Ca=da;na=oa;Ga=Sa;aa=Ra}}if((Z|0)==85){Ra=v+56|0;aa=v+4|0;k[v>>2]=27524;k[Ra>>2]=27544;B=0;wa(508,v+56|0,aa|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;$a=Q;ab=Sa;vva(Ra);Qb(ab|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[Ra>>2]=27488;B=0;va(448,aa|0);Sa=B;B=0;do if(Sa&1){Ga=Rb()|0;bb=Q;cb=Ga}else{k[aa>>2]=27560;Ga=v+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[v+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,aa|0,f|0);na=B;B=0;if(na&1){na=Rb()|0;Ca=Q;Yua(f);Yua(Ga);Ava(aa);bb=Ca;cb=na;break}Yua(f);B=0;na=Ia(40,v|0,124291,49)|0;Ca=B;B=0;e:do if(((!(Ca&1)?(B=0,pa=Xa(242,na|0,Ja|0)|0,Ta=B,B=0,!(Ta&1)):0)?(B=0,Ta=Ia(40,pa|0,124341,2)|0,pa=B,B=0,!(pa&1)):0)?(B=0,Xa(239,Ta|0,0)|0,Ta=B,B=0,!(Ta&1)):0){Ta=Ab(20)|0;B=0;eb(502,w|0,121503,60);pa=B;B=0;do if(!(pa&1)){B=0;eb(502,x|0,124134,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;g=Q;Yua(w);db=g;fb=Fa;break}B=0;wa(510,y|0,aa|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;gb=1;hb=Q;ib=Fa}else{B=0;ua(163,Ta|0,w|0,x|0,4084,y|0);Fa=B;B=0;if(Fa&1)jb=1;else{B=0;eb(503,Ta|0,1240,229);B=0;jb=0}Fa=Rb()|0;g=Q;Yua(y);gb=jb;hb=g;ib=Fa}Yua(x);Yua(w);if(gb){db=hb;fb=ib}else{kb=hb;lb=ib;break e}}else{Fa=Rb()|0;db=Q;fb=Fa}while(0);zb(Ta|0);kb=db;lb=fb}else Z=102;while(0);if((Z|0)==102){na=Rb()|0;kb=Q;lb=na}k[v>>2]=27468;k[Ra>>2]=27488;k[aa>>2]=27560;Yua(Ga);Ava(aa);vva(Ra);_=kb;$=lb;Qb($|0)}while(0);$a=bb;ab=cb;vva(Ra);Qb(ab|0)}else if((Z|0)==124){Z=Pa+32|0;Ua=k[Z+4>>2]|0;Va=Ma;Wa=Na;Ya=k[Z>>2]|0;Za=Oa;_a=Pa}if((Ua|0)>=0){Da=_a;r=e;return Da|0}k[c>>2]=-1;k[c+4>>2]=-1;k[c+8>>2]=-1;k[c+12>>2]=-1;k[c+16>>2]=-1;k[c+20>>2]=-1;Ua=c+(j[52944+(Za<<1)>>1]<<3)|0;k[Ua>>2]=Va;k[Ua+4>>2]=Wa;Da=_a;r=e;return Da|0}function p5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=+p[b+104>>3];e=~~(d*(+p[c+8>>3]-+p[b+80>>3]));k[a>>2]=~~(d*(+p[c>>3]-+p[b+72>>3]));k[a+4>>2]=e;return}function q5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0.0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0;f=r;r=r+576|0;g=f+560|0;h=f+400|0;i=f+548|0;j=f+536|0;l=f+248|0;n=f+264|0;o=f+100|0;q=f+88|0;s=f+76|0;t=f+72|0;u=f+68|0;v=f+112|0;w=f+56|0;x=f+44|0;y=f+32|0;z=f+24|0;A=f+16|0;C=f+8|0;D=f;if(k[c>>2]|0)if(k[c+4>>2]|0)if(!(k[c+8>>2]|0))E=2;else{F=h+56|0;G=h+4|0;k[h>>2]=27524;k[F>>2]=27544;B=0;wa(508,h+56|0,G|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;J=H;vva(F);Qb(J|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);H=B;B=0;do if(H&1){K=Rb()|0;L=Q;M=K}else{k[G>>2]=27560;K=h+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,G|0,g|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(g);Yua(K);Ava(G);L=O;M=N;break}Yua(g);B=0;N=Ia(40,h|0,124344,3)|0;O=B;B=0;a:do if(!(O&1)?(B=0,Xa(239,N|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,i|0,121503,60);R=B;B=0;do if(!(R&1)){B=0;eb(502,j|0,124348,17);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(i);U=S;V=T;break}B=0;wa(510,l|0,G|0);T=B;B=0;if(T&1){T=Rb()|0;W=T;X=Q;Y=1}else{B=0;ua(163,P|0,i|0,j|0,4842,l|0);T=B;B=0;if(T&1)Z=1;else{B=0;eb(503,P|0,1240,229);B=0;Z=0}T=Rb()|0;S=Q;Yua(l);W=T;X=S;Y=Z}Yua(j);Yua(i);if(Y){U=W;V=X}else{_=W;$=X;break a}}else{S=Rb()|0;U=S;V=Q}while(0);zb(P|0);_=U;$=V}else aa=19;while(0);if((aa|0)==19){N=Rb()|0;_=N;$=Q}k[h>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(K);Ava(G);vva(F);ba=_;ca=$;Qb(ba|0)}while(0);I=L;J=M;vva(F);Qb(J|0)}else E=1;else E=0;J=m[52944+(E<<1)>>1]|0;k[a>>2]=c;c=a+4|0;k[c>>2]=J&3;J=k[b>>2]|0;E=k[b+4>>2]|0;b=D+4|0;F=C+4|0;M=A+4|0;L=z+4|0;I=1;$=0;while(1){k[t>>2]=0;_=G4(a,t)|0;k[u>>2]=1;G=G4(a,u)|0;h=_;_=k[h>>2]|0;V=k[h+4>>2]|0;h=G;G=k[h>>2]|0;U=k[h+4>>2]|0;h=G-_|0;X=U-V|0;W=J-_|0;_=E-V|0;V=((h|0)<0)<<31>>31;Y=bFa(W|0,((W|0)<0)<<31>>31|0,h|0,V|0)|0;W=Q;i=((X|0)<0)<<31>>31;j=bFa(_|0,((_|0)<0)<<31>>31|0,X|0,i|0)|0;_=QEa(j|0,Q|0,Y|0,W|0)|0;W=Q;if((W|0)<0){if(($|0)>0){aa=53;break}Y=m[52956+(k[c>>2]<<1)>>1]|0;k[D>>2]=k[a>>2];k[b>>2]=Y&3;F4(C,D);da=52956+(k[F>>2]<<1)|0;ea=C;fa=-1}else{Y=G-J|0;G=U-E|0;U=bFa(Y|0,((Y|0)<0)<<31>>31|0,h|0,V|0)|0;V=Q;h=bFa(G|0,((G|0)<0)<<31>>31|0,X|0,i|0)|0;i=QEa(h|0,Q|0,U|0,V|0)|0;V=Q;if((V|0)>=0){ga=_;ha=W;ia=i;ja=V;aa=57;break}if(($|0)<0){aa=56;break}V=m[52950+(k[c>>2]<<1)>>1]|0;k[A>>2]=k[a>>2];k[M>>2]=V&3;F4(z,A);da=52950+(k[L>>2]<<1)|0;ea=z;fa=1}V=(m[da>>1]|0)&3;i=a;k[i>>2]=k[ea>>2];k[i+4>>2]=V;if((I|0)>998){aa=28;break}else{I=I+1|0;$=fa}}if((aa|0)==28){fa=n+56|0;$=n+4|0;k[n>>2]=27524;k[fa>>2]=27544;B=0;wa(508,n+56|0,$|0);I=B;B=0;if(I&1){I=Rb()|0;ka=Q;la=I;vva(fa);Qb(la|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[fa>>2]=27488;B=0;va(448,$|0);I=B;B=0;do if(I&1){ea=Rb()|0;ma=Q;na=ea}else{k[$>>2]=27560;ea=n+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[n+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,$|0,g|0);a=B;B=0;if(a&1){a=Rb()|0;da=Q;Yua(g);Yua(ea);Ava($);ma=da;na=a;break}Yua(g);B=0;a=Ia(40,n|0,124366,9)|0;da=B;B=0;b:do if(!(da&1)?(B=0,Xa(239,a|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,o|0,121503,60);L=B;B=0;do if(!(L&1)){B=0;eb(502,q|0,124348,17);A=B;B=0;if(A&1){A=Rb()|0;M=Q;Yua(o);oa=M;pa=A;break}B=0;wa(510,s|0,$|0);A=B;B=0;if(A&1){A=Rb()|0;qa=1;ra=A;sa=Q}else{B=0;ua(163,z|0,o|0,q|0,4850,s|0);A=B;B=0;if(A&1)ta=1;else{B=0;eb(503,z|0,1240,229);B=0;ta=0}A=Rb()|0;M=Q;Yua(s);qa=ta;ra=A;sa=M}Yua(q);Yua(o);if(qa){oa=sa;pa=ra}else{xa=ra;ya=sa;break b}}else{M=Rb()|0;oa=Q;pa=M}while(0);zb(z|0);xa=pa;ya=oa}else aa=43;while(0);if((aa|0)==43){a=Rb()|0;xa=a;ya=Q}k[n>>2]=27468;k[fa>>2]=27488;k[$>>2]=27560;Yua(ea);Ava($);vva(fa);ba=xa;ca=ya;Qb(ba|0)}while(0);ka=ma;la=na;vva(fa);Qb(la|0)}else if((aa|0)==53){p[d>>3]=1.0;p[e>>3]=0.0;r=f;return}else if((aa|0)==56){p[d>>3]=0.0;p[e>>3]=1.0;r=f;return}else if((aa|0)==57){la=QEa(ga|0,ha|0,ia|0,ja|0)|0;fa=Q;za=+(la>>>0)+4294967296.0*+(fa|0);if(!((la|0)==0&(fa|0)==0)){p[d>>3]=(+(ia>>>0)+4294967296.0*+(ja|0))/za;p[e>>3]=(+(ga>>>0)+4294967296.0*+(ha|0))/za;r=f;return}f=v+56|0;ha=v+4|0;k[v>>2]=27524;k[f>>2]=27544;B=0;wa(508,v+56|0,ha|0);ga=B;B=0;if(ga&1){ga=Rb()|0;Aa=Q;Ba=ga;vva(f);Qb(Ba|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[f>>2]=27488;B=0;va(448,ha|0);ga=B;B=0;do if(ga&1){e=Rb()|0;Ca=Q;Da=e}else{k[ha>>2]=27560;e=v+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[v+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ha|0,g|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ia=Q;Yua(g);Yua(e);Ava(ha);Ca=ia;Da=ja;break}Yua(g);B=0;ja=Ia(40,v|0,124376,6)|0;ia=B;B=0;c:do if(!(ia&1)?(B=0,Xa(239,ja|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,w|0,121503,60);fa=B;B=0;do if(!(fa&1)){B=0;eb(502,x|0,124348,17);la=B;B=0;if(la&1){la=Rb()|0;na=Q;Yua(w);Ea=na;Fa=la;break}B=0;wa(510,y|0,ha|0);la=B;B=0;if(la&1){la=Rb()|0;Ga=1;Ha=la;Ja=Q}else{B=0;ua(163,d|0,w|0,x|0,4867,y|0);la=B;B=0;if(la&1)Ka=1;else{B=0;eb(503,d|0,1240,229);B=0;Ka=0}la=Rb()|0;na=Q;Yua(y);Ga=Ka;Ha=la;Ja=na}Yua(x);Yua(w);if(Ga){Ea=Ja;Fa=Ha}else{La=Ha;Ma=Ja;break c}}else{na=Rb()|0;Ea=Q;Fa=na}while(0);zb(d|0);La=Fa;Ma=Ea}else aa=73;while(0);if((aa|0)==73){ja=Rb()|0;La=ja;Ma=Q}k[v>>2]=27468;k[f>>2]=27488;k[ha>>2]=27560;Yua(e);Ava(ha);vva(f);ba=La;ca=Ma;Qb(ba|0)}while(0);Aa=Ca;Ba=Da;vva(f);Qb(Ba|0)}}function r5(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0;h=r;r=r+544|0;i=h+524|0;l=h;n=h+376|0;o=h+512|0;p=h+364|0;q=h+352|0;s=h+216|0;t=h+68|0;u=h+56|0;v=h+44|0;w=h+80|0;x=h+32|0;y=h+20|0;z=h+8|0;if(C4(c)|0){A=0;r=h;return A|0}F4(l,c);C=k[c>>2]|0;D=k[l>>2]|0;E=k[c+4>>2]|0;F=E&65535;G=l+4|0;H=k[G>>2]|0;I=H&65535;J=E<<16;E=J>>16;if(J>>>0>131072){J=n+56|0;K=n+4|0;k[n>>2]=27524;k[J>>2]=27544;B=0;wa(508,n+56|0,K|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(J);Qb(N|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[K>>2]=27560;O=n+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[n+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,K|0,i|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(i);Yua(O);Ava(K);P=T;R=S;break}Yua(i);B=0;S=Ia(40,n|0,124383,13)|0;T=B;B=0;a:do if(!(T&1)?(B=0,Xa(239,S|0,0)|0,U=B,B=0,!(U&1)):0){U=Ab(20)|0;B=0;eb(502,o|0,121503,60);V=B;B=0;do if(!(V&1)){B=0;eb(502,p|0,124397,18);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(o);Y=X;Z=W;break}B=0;wa(510,q|0,K|0);W=B;B=0;if(W&1){W=Rb()|0;_=Q;$=W;aa=1}else{B=0;ua(163,U|0,o|0,p|0,5008,q|0);W=B;B=0;if(W&1)ba=1;else{B=0;eb(503,U|0,1240,229);B=0;ba=0}W=Rb()|0;X=Q;Yua(q);_=X;$=W;aa=ba}Yua(p);Yua(o);if(aa){Y=_;Z=$}else{ca=$;da=_;break a}}else{W=Rb()|0;Y=Q;Z=W}while(0);zb(U|0);ca=Z;da=Y}else ea=18;while(0);if((ea|0)==18){S=Rb()|0;ca=S;da=Q}k[n>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(O);Ava(K);vva(J);fa=ca;ga=da;Qb(fa|0)}while(0);M=P;N=R;vva(J);Qb(N|0)}N=k[C+(j[52932+(E<<2)>>1]<<2)>>2]|0;J=k[C+(j[52944+(E<<1)>>1]<<2)>>2]|0;E=k[D+(j[52944+(H<<16>>16<<1)>>1]<<2)>>2]|0;H=k[a>>2]|0;R=k[H>>2]|0;P=k[H+4>>2]|0;H=k[b>>2]|0;M=E;da=k[M>>2]|0;ca=k[M+4>>2]|0;M=(k[H>>2]|0)-R|0;K=(k[H+4>>2]|0)-P|0;H=da-R|0;R=ca-P|0;P=bFa(R|0,((R|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;M=Q;R=bFa(H|0,((H|0)<0)<<31>>31|0,K|0,((K|0)<0)<<31>>31|0)|0;K=REa(P|0,M|0,R|0,Q|0)|0;R=Q;M=C+32|0;P=k[M>>2]|0;H=k[M+4>>2]|0;M=D+32|0;n=k[M>>2]|0;Y=k[M+4>>2]|0;M=QEa(n|0,Y|0,P|0,H|0)|0;Z=Q;if((H|0)<0|(H|0)==0&P>>>0<1|((Y|0)<0|(Y|0)==0&n>>>0<1)){n=s+56|0;Y=s+4|0;k[s>>2]=27524;k[n>>2]=27544;B=0;wa(508,s+56|0,Y|0);P=B;B=0;if(P&1){P=Rb()|0;ha=Q;ia=P;vva(n);Qb(ia|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[n>>2]=27488;B=0;va(448,Y|0);P=B;B=0;do if(P&1){H=Rb()|0;ja=Q;ka=H}else{k[Y>>2]=27560;H=s+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[s+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,Y|0,i|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(i);Yua(H);Ava(Y);ja=$;ka=_;break}Yua(i);B=0;_=Ia(40,s|0,124416,23)|0;$=B;B=0;b:do if(!($&1)?(B=0,Xa(239,_|0,0)|0,aa=B,B=0,!(aa&1)):0){aa=Ab(20)|0;B=0;eb(502,t|0,121503,60);o=B;B=0;do if(!(o&1)){B=0;eb(502,u|0,124397,18);p=B;B=0;if(p&1){p=Rb()|0;ba=Q;Yua(t);la=ba;ma=p;break}B=0;wa(510,v|0,Y|0);p=B;B=0;if(p&1){p=Rb()|0;na=1;oa=p;pa=Q}else{B=0;ua(163,aa|0,t|0,u|0,5019,v|0);p=B;B=0;if(p&1)qa=1;else{B=0;eb(503,aa|0,1240,229);B=0;qa=0}p=Rb()|0;ba=Q;Yua(v);na=qa;oa=p;pa=ba}Yua(u);Yua(t);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break b}}else{ba=Rb()|0;la=Q;ma=ba}while(0);zb(aa|0);ra=ma;sa=la}else ea=42;while(0);if((ea|0)==42){_=Rb()|0;ra=_;sa=Q}k[s>>2]=27468;k[n>>2]=27488;k[Y>>2]=27560;Yua(H);Ava(Y);vva(n);fa=ra;ga=sa;Qb(fa|0)}while(0);ha=ja;ia=ka;vva(n);Qb(ia|0)}ia=e;n=k[ia+4>>2]|0;ka=f;ja=k[ka>>2]|0;ha=k[ka+4>>2]|0;if(!((n|0)>-1|(n|0)==-1&(k[ia>>2]|0)>>>0>4294967295|((ha|0)<0|(ha|0)==0&ja>>>0<1))){ia=J;n=k[ia>>2]|0;ka=k[ia+4>>2]|0;ia=N;N=(k[ia>>2]|0)-n|0;sa=(k[ia+4>>2]|0)-ka|0;ia=da-n|0;n=ca-ka|0;ka=bFa(n|0,((n|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;N=Q;n=bFa(sa|0,((sa|0)<0)<<31>>31|0,ia|0,((ia|0)<0)<<31>>31|0)|0;ia=REa(ka|0,N|0,n|0,Q|0)|0;n=Q;N=REa(M|0,Z|0,ia|0,n|0)|0;Z=Q;do if(((n|0)>0|(n|0)==0&ia>>>0>0)&((Z|0)>0|(Z|0)==0&N>>>0>0)){M=d;ka=k[M+4>>2]|0;sa=ha|R;if(!((sa|0)>-1|(sa|0)==-1&(ja|K)>>>0>4294967295|((R|0)<0|(R|0)==0&K>>>0<1)&((ka|0)<0|(ka|0)==0&(k[M>>2]|0)>>>0<1))?(Esa()|0)>=1073741823:0){ta=0;break}k[g>>2]=(k[g>>2]|0)+1;s5(C,F,D,I,J,E,ia,n,N,Z);ta=1}else ta=0;while(0);do if((R|0)>=0){if((R|0)>0|(R|0)==0&K>>>0>0){Z=ta?d:f;N=k[Z+4>>2]|0;n=d;k[n>>2]=k[Z>>2];k[n+4>>2]=N;N=f;k[N>>2]=K;k[N+4>>2]=R;if(ta){xa=1;break}N=m[52950+(k[G>>2]<<1)>>1]&3;n=c;k[n>>2]=k[l>>2];k[n+4>>2]=N;xa=1;break}N=k[a>>2]|0;k[a>>2]=k[b>>2];k[b>>2]=N;N=e;n=k[N>>2]|0;Z=k[N+4>>2]|0;N=f;ia=k[N+4>>2]|0;E=e;k[E>>2]=k[N>>2];k[E+4>>2]=ia;ia=f;k[ia>>2]=n;k[ia+4>>2]=Z;Z=d;ia=k[Z>>2]|0;n=k[Z+4>>2]|0;Z=d;k[Z>>2]=K;k[Z+4>>2]=R;Z=c;E=k[Z>>2]|0;N=k[Z+4>>2]|0;Z=l;J=k[Z+4>>2]|0;I=c;k[I>>2]=k[Z>>2];k[I+4>>2]=J;J=l;k[J>>2]=E;k[J+4>>2]=N;J=d;I=REa(0,0,k[J>>2]|0,k[J+4>>2]|0)|0;J=d;k[J>>2]=I;k[J+4>>2]=Q;J=REa(0,0,ia|0,n|0)|0;I=Q;Z=e;D=REa(0,0,k[Z>>2]|0,k[Z+4>>2]|0)|0;Z=e;k[Z>>2]=D;k[Z+4>>2]=Q;Z=f;D=REa(0,0,k[Z>>2]|0,k[Z+4>>2]|0)|0;Z=f;k[Z>>2]=D;k[Z+4>>2]=Q;if(ta){if((n|0)>0|(n|0)==0&ia>>>0>0){ia=e;k[ia>>2]=J;k[ia+4>>2]=I;ia=m[52956+(N<<1)>>1]&3;Z=c;k[Z>>2]=E;k[Z+4>>2]=ia;xa=-1;break}if((n|0)<0){n=f;k[n>>2]=J;k[n+4>>2]=I;xa=-1;break}else{I=m[52950+(N<<1)>>1]&3;N=c;k[N>>2]=E;k[N+4>>2]=I;xa=0;break}}else xa=-1}else{I=ta?d:e;N=k[I+4>>2]|0;E=d;k[E>>2]=k[I>>2];k[E+4>>2]=N;N=e;k[N>>2]=K;k[N+4>>2]=R;N=m[52956+(k[G>>2]<<1)>>1]&3;E=c;k[E>>2]=k[l>>2];k[E+4>>2]=N;xa=1}while(0);A=xa;r=h;return A|0}A=w+56|0;h=w+4|0;k[w>>2]=27524;k[A>>2]=27544;B=0;wa(508,w+56|0,h|0);xa=B;B=0;if(xa&1){xa=Rb()|0;ya=Q;za=xa;vva(A);Qb(za|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[A>>2]=27488;B=0;va(448,h|0);xa=B;B=0;do if(xa&1){l=Rb()|0;Aa=Q;Ba=l}else{k[h>>2]=27560;l=w+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[w+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,h|0,i|0);c=B;B=0;if(c&1){c=Rb()|0;G=Q;Yua(i);Yua(l);Ava(h);Aa=G;Ba=c;break}Yua(i);B=0;c=Ia(40,w|0,124440,24)|0;G=B;B=0;c:do if(!(G&1)?(B=0,Xa(239,c|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,x|0,121503,60);K=B;B=0;do if(!(K&1)){B=0;eb(502,y|0,124397,18);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Yua(x);Ca=d;Da=e;break}B=0;wa(510,z|0,h|0);e=B;B=0;if(e&1){e=Rb()|0;Ea=1;Fa=e;Ga=Q}else{B=0;ua(163,R|0,x|0,y|0,5022,z|0);e=B;B=0;if(e&1)Ha=1;else{B=0;eb(503,R|0,1240,229);B=0;Ha=0}e=Rb()|0;d=Q;Yua(z);Ea=Ha;Fa=e;Ga=d}Yua(y);Yua(x);if(Ea){Ca=Ga;Da=Fa}else{Ja=Fa;Ka=Ga;break c}}else{d=Rb()|0;Ca=Q;Da=d}while(0);zb(R|0);Ja=Da;Ka=Ca}else ea=66;while(0);if((ea|0)==66){c=Rb()|0;Ja=c;Ka=Q}k[w>>2]=27468;k[A>>2]=27488;k[h>>2]=27560;Yua(l);Ava(h);vva(A);fa=Ja;ga=Ka;Qb(fa|0)}while(0);ya=Aa;za=Ba;vva(A);Qb(za|0);return 0}function s5(a,b,c,d,e,f,g,h,i,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;m=r;r=r+48|0;n=m+40|0;o=m+32|0;p=m+24|0;q=m+16|0;s=m+8|0;t=m;u=b<<16>>16;b=j[52950+(u<<1)>>1]|0;v=d<<16>>16;d=j[52950+(v<<1)>>1]|0;w=j[52956+(u<<1)>>1]|0;x=j[52956+(v<<1)>>1]|0;k[a+(j[52932+(u<<2)+2>>1]<<2)>>2]=f;k[c+(j[52932+(v<<2)+2>>1]<<2)>>2]=e;M4(n,a,b);M4(o,c,d);k[p>>2]=a;k[p+4>>2]=b&3;k[q>>2]=c;k[q+4>>2]=d&3;k[s>>2]=a;k[s+4>>2]=u&3;k[t>>2]=c;k[t+4>>2]=v&3;I4(n,t,D4(n)|0);I4(o,s,D4(o)|0);Y4(a,w);Y4(c,x);I4(p,q,0);q=a+32|0;k[q>>2]=g;k[q+4>>2]=h;h=c+32|0;k[h>>2]=i;k[h+4>>2]=l;X4(a);X4(c);r=m;return}function t5(){ppa(38e3);return}function u5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;e=r;r=r+144|0;f=e+104|0;g=e+84|0;h=e+64|0;i=e+40|0;j=e+20|0;l=e;m=ma(d,d)|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;if(!b)yb(142353,124465,137,142345);if(m)TEa(n|0,b|0,m<<3|0)|0;Cqa(i,n,d,d);k[f>>2]=k[i>>2];k[f+4>>2]=k[i+4>>2];k[f+8>>2]=k[i+8>>2];k[f+12>>2]=k[i+12>>2];k[f+16>>2]=k[i+16>>2];k[f+20>>2]=k[i+20>>2];Jqa(j,c,d);k[g>>2]=k[j>>2];k[g+4>>2]=k[j+4>>2];k[g+8>>2]=k[j+8>>2];k[g+12>>2]=k[j+12>>2];k[g+16>>2]=k[j+16>>2];Jqa(l,a,d);k[h>>2]=k[l>>2];k[h+4>>2]=k[l+4>>2];k[h+8>>2]=k[l+8>>2];k[h+12>>2]=k[l+12>>2];k[h+16>>2]=k[l+16>>2];l=Dqa(d)|0;yqa(f,l,e+128|0)|0;zqa(f,l,g,h)|0;Tqa(n);Fqa(l);r=e;return}function v5(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;g=r;r=r+368|0;h=g+344|0;i=g+208|0;j=g+196|0;l=g+184|0;m=g+36|0;n=g+48|0;o=g+24|0;p=g+12|0;q=g;if((d|0)==(f|0)){if((c|0)==(d|0)){s=Rqa(d>>>0>536870911?-1:d<<3)|0;u5(s,b,e,d);k[a>>2]=s;r=g;return}g=n+56|0;s=n+4|0;k[n>>2]=27524;k[g>>2]=27544;B=0;wa(508,n+56|0,s|0);a=B;B=0;if(a&1){a=Rb()|0;t=Q;u=a;vva(g);Qb(u|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[g>>2]=27488;B=0;va(448,s|0);a=B;B=0;do if(a&1){e=Rb()|0;v=Q;w=e}else{k[s>>2]=27560;e=n+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,s|0,h|0);b=B;B=0;if(b&1){b=Rb()|0;x=Q;Yua(h);Yua(e);Ava(s);v=x;w=b;break}Yua(h);B=0;b=Ia(40,n|0,124711,34)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,b|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,o|0,124619,77);z=B;B=0;do if(!(z&1)){B=0;eb(502,p|0,124697,13);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(o);D=C;E=A;break}B=0;wa(510,q|0,s|0);A=B;B=0;if(A&1){A=Rb()|0;F=1;G=A;H=Q}else{B=0;ua(163,y|0,o|0,p|0,39,q|0);A=B;B=0;if(A&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}A=Rb()|0;C=Q;Yua(q);F=I;G=A;H=C}Yua(p);Yua(o);if(F){D=H;E=G}else{J=G;K=H;break a}}else{C=Rb()|0;D=Q;E=C}while(0);zb(y|0);J=E;K=D}else L=47;while(0);if((L|0)==47){b=Rb()|0;J=b;K=Q}k[n>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(e);Ava(s);vva(g);M=J;N=K;Qb(M|0)}while(0);t=v;u=w;vva(g);Qb(u|0)}u=i+56|0;g=i+4|0;k[i>>2]=27524;k[u>>2]=27544;B=0;wa(508,i+56|0,g|0);w=B;B=0;if(w&1){w=Rb()|0;O=Q;P=w;vva(u);Qb(P|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[u>>2]=27488;B=0;va(448,g|0);w=B;B=0;do if(w&1){v=Rb()|0;R=Q;S=v}else{k[g>>2]=27560;v=i+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[i+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,g|0,h|0);t=B;B=0;if(t&1){t=Rb()|0;K=Q;Yua(h);Yua(v);Ava(g);R=K;S=t;break}Yua(h);B=0;t=Ia(40,i|0,124556,31)|0;K=B;B=0;b:do if(((((((!(K&1)?(B=0,J=Xa(242,t|0,f|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,J|0,124588,25)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Xa(242,s|0,c|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,J|0,124614,1)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Xa(242,s|0,d|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,J|0,124616,2)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,j|0,124619,77);J=B;B=0;do if(!(J&1)){B=0;eb(502,l|0,124697,13);n=B;B=0;if(n&1){n=Rb()|0;D=Q;Yua(j);T=D;U=n;break}B=0;wa(510,m|0,g|0);n=B;B=0;if(n&1){n=Rb()|0;V=n;W=Q;X=1}else{B=0;ua(163,s|0,j|0,l|0,38,m|0);n=B;B=0;if(n&1)Y=1;else{B=0;eb(503,s|0,1240,229);B=0;Y=0}n=Rb()|0;D=Q;Yua(m);V=n;W=D;X=Y}Yua(l);Yua(j);if(X){T=W;U=V}else{Z=V;_=W;break b}}else{D=Rb()|0;T=Q;U=D}while(0);zb(s|0);Z=U;_=T}else L=23;while(0);if((L|0)==23){t=Rb()|0;Z=t;_=Q}k[i>>2]=27468;k[u>>2]=27488;k[g>>2]=27560;Yua(v);Ava(g);vva(u);M=Z;N=_;Qb(M|0)}while(0);O=R;P=S;vva(u);Qb(P|0)}function w5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135838,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,9,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function x5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135856,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,12,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function y5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,145111,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,15,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function z5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function A5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,21,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function B5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136199,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,24,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function C5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,29,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function D5(a,b){a=a|0;b=b|0;return 0}function E5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function F5(a,b){a=a|0;b=b|0;var c=0;a=Qqa(4)|0;k[a>>2]=38240;c=ed[k[38284>>2]&511](a,b)|0;Ec[k[(k[a>>2]|0)+4>>2]&1023](a);MN(c);return c|0}function G5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;a=r;r=r+448|0;c=a+432|0;d=a+428|0;e=a+280|0;f=a+416|0;g=a+264|0;h=a+248|0;i=a+260|0;j=a+48|0;l=a+40|0;m=a+32|0;n=a+24|0;o=a+16|0;q=a+8|0;s=a;t=a+244|0;u=a+240|0;v=a+104|0;w=a+88|0;x=a+76|0;y=a+64|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{z=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){z=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{A=0;r=a;return A|0}break}default:{C=e+56|0;D=e+4|0;k[e>>2]=27524;k[C>>2]=27544;B=0;wa(508,e+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=e+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(D);I=L;J=K;break}Yua(c);B=0;K=Ia(40,e|0,144639,5)|0;L=B;B=0;b:do if((((!(L&1)?(B=0,M=ya(427,k[d>>2]|0)|0,N=B,B=0,!(N&1)):0)?(N=Lta(M)|0,B=0,O=Ia(40,K|0,M|0,N|0)|0,N=B,B=0,!(N&1)):0)?(B=0,N=Ia(40,O|0,146481,18)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,N|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,f|0,124780,91);O=B;B=0;do if(!(O&1)){B=0;eb(502,g|0,144203,13);M=B;B=0;if(M&1){M=Rb()|0;P=Q;Yua(f);R=M;S=P;break}B=0;wa(510,h|0,D|0);P=B;B=0;if(P&1){P=Rb()|0;T=P;U=Q;V=1}else{B=0;ua(163,N|0,f|0,g|0,64,h|0);P=B;B=0;if(P&1)W=1;else{B=0;eb(503,N|0,1240,229);B=0;W=0}P=Rb()|0;M=Q;Yua(h);T=P;U=M;V=W}Yua(g);Yua(f);if(V){R=T;S=U}else{X=T;Y=U;break b}}else{M=Rb()|0;R=M;S=Q}while(0);zb(N|0);X=R;Y=S}else Z=22;while(0);if((Z|0)==22){K=Rb()|0;X=K;Y=Q}k[e>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);_=X;$=Y;Qb(_|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}}while(0);k[t>>2]=0;k[u>>2]=0;G=Hc[k[(k[z>>2]|0)+164>>2]&511](z)|0;J=iq(z,536)|0;I=Rqa(G>>>0>536870911?-1:G<<3)|0;F=G<<1;Y=Rqa(F>>>0>536870911?-1:F<<3)|0;Uo(z,u);cp(z,i,199);qp(z,t,0,180);F=Wo(z,353)|0;X=Wo(z,201)|0;e=Wo(z,179)|0;S=Wo(z,674)|0;R=Wo(z,677)|0;U=ed[k[(k[z>>2]|0)+308>>2]&511](z,2)|0;T=Hc[k[(k[U>>2]|0)+8>>2]&511](U)|0;c:do if((T|0)<(Hc[k[(k[U>>2]|0)+12>>2]&511](U)|0)){V=(G|0)>0;f=j+8|0;g=U+8|0;W=J+4|0;h=(G|0)<1;b=T;d:while(1){Fc[k[(k[U>>2]|0)+24>>2]&1023](U,b);rd[k[(k[z>>2]|0)+260>>2]&511](z,n,k[u>>2]|0,U);nd[k[(k[z>>2]|0)+336>>2]&1023](z,I,U);rd[k[(k[z>>2]|0)+340>>2]&511](z,Y,k[u>>2]|0,U);nd[k[(k[F>>2]|0)+48>>2]&1023](F,o,U);rd[k[(k[F>>2]|0)+60>>2]&511](F,j,k[u>>2]|0,U);nd[k[(k[X>>2]|0)+48>>2]&1023](X,q,U);e:do if((k[i>>2]|0)>0){D=0;while(1){rd[k[(k[e>>2]|0)+56>>2]&511](e,s,U,k[(k[t>>2]|0)+(D<<2)>>2]|0);f:do switch(k[(k[t>>2]|0)+(D<<2)>>2]|0){case 669:{if(V){E=k[W>>2]|0;K=0;do{L=E+(K<<3)|0;p[L>>3]=(+p[q>>3]-+p[o>>3])*+p[s>>3]*+p[n>>3]*+p[g>>3]*+p[I+(K<<3)>>3]+ +p[L>>3];K=K+1|0}while((K|0)!=(G|0))}break}case 689:{if(V){K=k[W>>2]|0;E=0;do{L=K+(E<<3)|0;p[L>>3]=+p[L>>3]-+p[s>>3]*+p[j>>3]*+p[Y+(E<<3)>>3]*+p[n>>3]*+p[g>>3];E=E+1|0}while((E|0)!=(G|0));if(V){E=k[W>>2]|0;K=0;do{L=E+(K<<3)|0;p[L>>3]=+p[L>>3]-+p[s>>3]*+p[f>>3]*+p[Y+(K+G<<3)>>3]*+p[n>>3]*+p[g>>3];K=K+1|0}while((K|0)!=(G|0))}}break}case 690:{nd[k[(k[S>>2]|0)+48>>2]&1023](S,l,U);nd[k[(k[R>>2]|0)+48>>2]&1023](R,m,U);ba=+p[l>>3];ca=+p[m>>3];da=+aa(+(ba*ba+ca*ca))+1.0e-09;ea=ba/da;p[l>>3]=ea;ba=ca/da;p[m>>3]=ba;if(V){K=k[W>>2]|0;da=ea;ea=ba;E=0;while(1){L=K+(E<<3)|0;p[L>>3]=+p[L>>3]-+p[g>>3]*(+p[n>>3]*(+p[s>>3]*(+p[j>>3]*da+ +p[f>>3]*ea)*(da*+p[Y+(E<<3)>>3]+ea*+p[Y+(E+G<<3)>>3])));L=E+1|0;if((L|0)==(G|0))break f;da=+p[l>>3];ea=+p[m>>3];E=L}}break}case 691:{nd[k[(k[S>>2]|0)+48>>2]&1023](S,l,U);nd[k[(k[R>>2]|0)+48>>2]&1023](R,m,U);ea=+p[l>>3];da=+p[m>>3];ba=+aa(+(ea*ea+da*da))+1.0e-09;ca=ea/ba;p[l>>3]=ca;ea=da/ba;p[m>>3]=ea;if(V){E=k[W>>2]|0;ba=ea;ea=ca;K=0;while(1){ca=-ba;L=E+(K<<3)|0;p[L>>3]=+p[L>>3]-+p[g>>3]*(+p[n>>3]*(+p[s>>3]*(+p[j>>3]*ca+ +p[f>>3]*ea)*(+p[Y+(K<<3)>>3]*ca+ea*+p[Y+(K+G<<3)>>3])));L=K+1|0;if((L|0)==(G|0))break f;ba=+p[m>>3];ea=+p[l>>3];K=L}}break}case 692:{ea=+p[o>>3];if(!(!(ea<0.0)|h)){K=k[W>>2]|0;ba=ea;E=0;while(1){L=K+(E<<3)|0;p[L>>3]=+p[s>>3]*-2.0*ba*+p[n>>3]*+p[g>>3]*+p[I+(E<<3)>>3]+ +p[L>>3];L=E+1|0;if((L|0)==(G|0))break f;ba=+p[o>>3];E=L}}break}default:{fa=D;break d}}while(0);D=D+1|0;if((D|0)>=(k[i>>2]|0))break e}}while(0);b=b+1|0;if((b|0)>=(Hc[k[(k[U>>2]|0)+12>>2]&511](U)|0))break c}b=v+56|0;g=v+4|0;k[v>>2]=27524;k[b>>2]=27544;B=0;wa(508,v+56|0,g|0);W=B;B=0;if(W&1){W=Rb()|0;ga=Q;ha=W;vva(b);Qb(ha|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);W=B;B=0;do if(W&1){h=Rb()|0;ia=Q;ja=h}else{k[g>>2]=27560;h=v+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);f=B;B=0;if(f&1){f=Rb()|0;V=Q;Yua(c);Yua(h);Ava(g);ia=V;ja=f;break}Yua(c);B=0;f=Ia(40,v|0,125591,9)|0;V=B;B=0;g:do if((((!(V&1)?(B=0,C=ya(427,k[(k[t>>2]|0)+(fa<<2)>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(C)|0,B=0,D=Ia(40,f|0,C|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,w|0,124780,91);D=B;B=0;do if(!(D&1)){B=0;eb(502,x|0,144203,13);C=B;B=0;if(C&1){C=Rb()|0;N=Q;Yua(w);ka=N;la=C;break}B=0;wa(510,y|0,g|0);C=B;B=0;if(C&1){C=Rb()|0;ma=1;na=C;oa=Q}else{B=0;ua(163,H|0,w|0,x|0,140,y|0);C=B;B=0;if(C&1)pa=1;else{B=0;eb(503,H|0,1240,229);B=0;pa=0}C=Rb()|0;N=Q;Yua(y);ma=pa;na=C;oa=N}Yua(x);Yua(w);if(ma){ka=oa;la=na}else{qa=na;ra=oa;break g}}else{N=Rb()|0;ka=Q;la=N}while(0);zb(H|0);qa=la;ra=ka}else Z=79;while(0);if((Z|0)==79){f=Rb()|0;qa=f;ra=Q}k[v>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(h);Ava(g);vva(b);_=qa;$=ra;Qb(_|0)}while(0);ga=ia;ha=ja;vva(b);Qb(ha|0)}while(0);ha=k[t>>2]|0;if(ha)Tqa(ha);k[t>>2]=0;t=k[u>>2]|0;if(t)Tqa(t);k[u>>2]=0;Tqa(I);Tqa(Y);if((k[d>>2]|0)!=300?(ap(z),(z|0)!=0):0)Ec[k[(k[z>>2]|0)+4>>2]&1023](z);if(U)Ec[k[(k[U>>2]|0)+4>>2]&1023](U);A=J;r=a;return A|0}function H5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124780,91);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,155,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function I5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;a=r;r=r+544|0;f=a+524|0;g=a+520|0;h=a+516|0;i=a+368|0;j=a+504|0;l=a+356|0;m=a+344|0;n=a+208|0;o=a+60|0;p=a+48|0;q=a+36|0;s=a+72|0;t=a+24|0;u=a+12|0;v=a;if(!($p(c)|0)){r=a;return}k[g>>2]=0;cp(c,h,199);qp(c,g,0,180);switch(d|0){case 36:case 674:case 677:break;default:{w=i+56|0;x=i+4|0;k[i>>2]=27524;k[w>>2]=27544;B=0;wa(508,i+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(w);Qb(A|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=i+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,x|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(f);Yua(C);Ava(x);D=G;E=F;break}Yua(f);B=0;F=Ia(40,i|0,125582,8)|0;G=B;B=0;a:do if((((!(G&1)?(B=0,H=ya(427,d|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(H)|0,B=0,J=Ia(40,F|0,H|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,J|0,144645,14)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,j|0,124780,91);J=B;B=0;do if(!(J&1)){B=0;eb(502,l|0,138252,9);H=B;B=0;if(H&1){H=Rb()|0;K=Q;Yua(j);L=K;M=H;break}B=0;wa(510,m|0,x|0);H=B;B=0;if(H&1){H=Rb()|0;N=Q;O=H;P=1}else{B=0;ua(163,I|0,j|0,l|0,179,m|0);H=B;B=0;if(H&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}H=Rb()|0;K=Q;Yua(m);N=K;O=H;P=R}Yua(l);Yua(j);if(P){L=N;M=O}else{S=N;T=O;break a}}else{H=Rb()|0;L=Q;M=H}while(0);zb(I|0);S=L;T=M}else U=23;while(0);if((U|0)==23){F=Rb()|0;S=Q;T=F}k[i>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(w);V=S;W=T;Qb(W|0)}while(0);z=D;A=E;vva(w);Qb(A|0)}}A=k[h>>2]|0;b:do if((A|0)>0){h=k[g>>2]|0;w=0;c:while(1){switch(k[h+(w<<2)>>2]|0){case 692:case 691:case 690:case 689:case 669:break;default:{X=w;break c}}w=w+1|0;if((w|0)>=(A|0))break b}w=n+56|0;h=n+4|0;k[n>>2]=27524;k[w>>2]=27544;B=0;wa(508,n+56|0,h|0);C=B;B=0;if(C&1){C=Rb()|0;Y=Q;Z=C;vva(w);Qb(Z|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[w>>2]=27488;B=0;va(448,h|0);C=B;B=0;do if(C&1){E=Rb()|0;_=Q;$=E}else{k[h>>2]=27560;E=n+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,h|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;z=Q;Yua(f);Yua(E);Ava(h);_=z;$=D;break}Yua(f);B=0;D=Ia(40,n|0,125591,9)|0;z=B;B=0;d:do if((((!(z&1)?(B=0,T=ya(427,k[(k[g>>2]|0)+(X<<2)>>2]|0)|0,S=B,B=0,!(S&1)):0)?(S=Lta(T)|0,B=0,x=Ia(40,D|0,T|0,S|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,S|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,o|0,124780,91);x=B;B=0;do if(!(x&1)){B=0;eb(502,p|0,138252,9);T=B;B=0;if(T&1){T=Rb()|0;i=Q;Yua(o);aa=T;ba=i;break}B=0;wa(510,q|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;ca=1;da=Q;ea=i}else{B=0;ua(163,S|0,o|0,p|0,189,q|0);i=B;B=0;if(i&1)fa=1;else{B=0;eb(503,S|0,1240,229);B=0;fa=0}i=Rb()|0;T=Q;Yua(q);ca=fa;da=T;ea=i}Yua(p);Yua(o);if(ca){aa=ea;ba=da}else{ga=da;ha=ea;break d}}else{i=Rb()|0;aa=i;ba=Q}while(0);zb(S|0);ga=ba;ha=aa}else U=50;while(0);if((U|0)==50){D=Rb()|0;ga=Q;ha=D}k[n>>2]=27468;k[w>>2]=27488;k[h>>2]=27560;Yua(E);Ava(h);vva(w);V=ga;W=ha;Qb(W|0)}while(0);Y=_;Z=$;vva(w);Qb(Z|0)}while(0);switch(d|0){case 36:{J5(0,c,b,e);break}case 674:{K5(0,c,b,e);break}case 677:{L5(0,c,b,e);break}default:{e=s+56|0;b=s+4|0;k[s>>2]=27524;k[e>>2]=27544;B=0;wa(508,s+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;ia=Q;ja=c;vva(e);Qb(ja|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){Z=Rb()|0;ka=Q;la=Z}else{k[b>>2]=27560;Z=s+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);$=B;B=0;if($&1){$=Rb()|0;_=Q;Yua(f);Yua(Z);Ava(b);ka=_;la=$;break}Yua(f);B=0;$=Ia(40,s|0,125227,32)|0;_=B;B=0;e:do if(((!(_&1)?(B=0,Y=ya(427,d|0)|0,ha=B,B=0,!(ha&1)):0)?(ha=Lta(Y)|0,B=0,ga=Ia(40,$|0,Y|0,ha|0)|0,ha=B,B=0,!(ha&1)):0)?(B=0,Xa(239,ga|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,t|0,124780,91);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,u|0,138252,9);Y=B;B=0;if(Y&1){Y=Rb()|0;n=Q;Yua(t);ma=Y;na=n;break}B=0;wa(510,v|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;oa=1;pa=Q;qa=n}else{B=0;ua(163,ga|0,t|0,u|0,197,v|0);n=B;B=0;if(n&1)ra=1;else{B=0;eb(503,ga|0,1240,229);B=0;ra=0}n=Rb()|0;Y=Q;Yua(v);oa=ra;pa=Y;qa=n}Yua(u);Yua(t);if(oa){ma=qa;na=pa}else{sa=pa;ta=qa;break e}}else{n=Rb()|0;ma=n;na=Q}while(0);zb(ga|0);sa=na;ta=ma}else U=80;while(0);if((U|0)==80){$=Rb()|0;sa=Q;ta=$}k[s>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(Z);Ava(b);vva(e);V=sa;W=ta;Qb(W|0)}while(0);ia=ka;ja=la;vva(e);Qb(ja|0)}}ja=k[g>>2]|0;if(ja)Tqa(ja);r=a;return}function J5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;a=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;e=a>>>0>536870911?-1:a<<3;f=Rqa(e)|0;if(a)WEa(f|0,0,a<<3|0)|0;g=Rqa(e)|0;e=Rqa(a>>>0>1073741823?-1:a<<2)|0;Mp(b,e,d,0);xp(b,g,934);if((a|0)>0){b=0;do{p[f+(b<<3)>>3]=-+p[g+(b<<3)>>3];b=b+1|0}while((b|0)!=(a|0))}if(!(k[c>>2]|0)){Tqa(f);Tqa(g);Tqa(e);return}b=k[k[c+4>>2]>>2]|0;Dc[k[(k[b>>2]|0)+16>>2]&255](b,a,e,f,0);Tqa(f);Tqa(g);Tqa(e);return}function K5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0;a=r;r=r+80|0;e=a+56|0;f=a+48|0;g=a+24|0;h=a;i=a+64|0;k[i>>2]=0;j=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;l=j>>>0>536870911?-1:j<<3;m=Rqa(l)|0;n=Rqa(l)|0;if(j)WEa(n|0,0,j<<3|0)|0;l=Rqa(j>>>0>1073741823?-1:j<<2)|0;Uo(b,i);Mp(b,l,d,0);d=Wo(b,353)|0;o=Wo(b,934)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;a:do if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=q+8|0;if((j|0)>0)u=s;else{v=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,v);rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[i>>2]|0,q);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,q);rd[k[(k[d>>2]|0)+60>>2]&511](d,h,k[i>>2]|0,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[i>>2]|0,q);nd[k[(k[b>>2]|0)+356>>2]&1023](b,m,q);v=v+1|0;if((v|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))break a}}do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,u);rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[i>>2]|0,q);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,q);rd[k[(k[d>>2]|0)+60>>2]&511](d,h,k[i>>2]|0,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[i>>2]|0,q);nd[k[(k[b>>2]|0)+356>>2]&1023](b,m,q);w=+p[e>>3]*+p[g>>3]*+p[f>>3];v=0;do{x=n+(v<<3)|0;p[x>>3]=+p[x>>3]+w*+p[t>>3]*+p[m+(v<<3)>>3];v=v+1|0}while((v|0)!=(j|0));u=u+1|0}while((u|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}while(0);if(k[c>>2]|0){u=k[k[c+4>>2]>>2]|0;Dc[k[(k[u>>2]|0)+16>>2]&255](u,j,l,n,1)}j=k[i>>2]|0;if(j)Tqa(j);k[i>>2]=0;Tqa(m);Tqa(n);Tqa(l);if(!q){r=a;return}Ec[k[(k[q>>2]|0)+4>>2]&1023](q);r=a;return}function L5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;a=r;r=r+80|0;e=a+56|0;f=a+48|0;g=a+24|0;h=a;i=a+64|0;k[i>>2]=0;j=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;l=j>>>0>536870911?-1:j<<3;m=Rqa(l)|0;n=Rqa(l)|0;if(j)WEa(n|0,0,j<<3|0)|0;l=Rqa(j>>>0>1073741823?-1:j<<2)|0;Uo(b,i);Mp(b,l,d,0);d=Wo(b,353)|0;o=Wo(b,934)|0;q=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;s=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;a:do if((s|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){t=g+8|0;u=q+8|0;if((j|0)>0)v=s;else{w=s;while(1){Fc[k[(k[q>>2]|0)+24>>2]&1023](q,w);rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[i>>2]|0,q);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,q);rd[k[(k[d>>2]|0)+60>>2]&511](d,h,k[i>>2]|0,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[i>>2]|0,q);nd[k[(k[b>>2]|0)+356>>2]&1023](b,m,q);w=w+1|0;if((w|0)>=(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))break a}}do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,v);rd[k[(k[o>>2]|0)+60>>2]&511](o,g,k[i>>2]|0,q);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,q);rd[k[(k[d>>2]|0)+60>>2]&511](d,h,k[i>>2]|0,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[i>>2]|0,q);nd[k[(k[b>>2]|0)+356>>2]&1023](b,m,q);x=+p[e>>3]*+p[t>>3]*+p[f>>3];w=0;do{y=n+(w<<3)|0;p[y>>3]=+p[y>>3]+x*+p[u>>3]*+p[m+(w<<3)>>3];w=w+1|0}while((w|0)!=(j|0));v=v+1|0}while((v|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}while(0);if(k[c>>2]|0){v=k[k[c+4>>2]>>2]|0;Dc[k[(k[v>>2]|0)+16>>2]&255](v,j,l,n,1)}j=k[i>>2]|0;if(j)Tqa(j);k[i>>2]=0;Tqa(m);Tqa(n);Tqa(l);if(!q){r=a;return}Ec[k[(k[q>>2]|0)+4>>2]&1023](q);r=a;return}function M5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;cp(c,e,298);switch(k[e>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,934);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,934);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,124780,91);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,333,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function N5(a,b){a=a|0;b=b|0;return}function O5(a){a=a|0;return}function P5(a){a=a|0;Sqa(a);return}function Q5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135838,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,9,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function R5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135856,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,12,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function S5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,145111,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,15,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function T5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function U5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,21,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function V5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136199,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,24,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function W5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,29,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function X5(a,b){a=a|0;b=b|0;return 0}function Y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Z5(a,b){a=a|0;b=b|0;var c=0;a=Qqa(4)|0;k[a>>2]=38316;c=ed[k[38360>>2]&511](a,b)|0;Ec[k[(k[a>>2]|0)+4>>2]&1023](a);return c|0}function _5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;a=r;r=r+240|0;c=a+220|0;d=a+216|0;e=a+24|0;f=a+16|0;g=a+8|0;h=a;i=a+212|0;j=a+208|0;l=a+72|0;m=a+56|0;n=a+44|0;o=a+32|0;k[i>>2]=0;k[j>>2]=0;q=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;s=iq(b,536)|0;t=Rqa(q>>>0>536870911?-1:q<<3)|0;u=q<<1;v=Rqa(u>>>0>536870911?-1:u<<3)|0;Uo(b,j);cp(b,d,199);qp(b,i,0,180);u=Wo(b,339)|0;w=Wo(b,202)|0;x=Wo(b,179)|0;Wo(b,674)|0;Wo(b,677)|0;y=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;z=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;a:do if((z|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){A=(q|0)>0;C=y+8|0;D=s+4|0;E=z;b:while(1){Fc[k[(k[y>>2]|0)+24>>2]&1023](y,E);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[j>>2]|0,y);nd[k[(k[b>>2]|0)+336>>2]&1023](b,t,y);rd[k[(k[b>>2]|0)+340>>2]&511](b,v,k[j>>2]|0,y);nd[k[(k[u>>2]|0)+48>>2]&1023](u,f,y);nd[k[(k[w>>2]|0)+48>>2]&1023](w,g,y);c:do if((k[d>>2]|0)>0){F=k[i>>2]|0;if(A){G=F;H=0}else{I=F;F=0;while(1){rd[k[(k[x>>2]|0)+56>>2]&511](x,h,y,k[I+(F<<2)>>2]|0);I=k[i>>2]|0;if((k[I+(F<<2)>>2]|0)!=670){J=F;break b}F=F+1|0;if((F|0)>=(k[d>>2]|0))break c}}do{rd[k[(k[x>>2]|0)+56>>2]&511](x,h,y,k[G+(H<<2)>>2]|0);G=k[i>>2]|0;if((k[G+(H<<2)>>2]|0)!=670){J=H;break b}F=k[D>>2]|0;I=0;do{K=F+(I<<3)|0;p[K>>3]=(+p[g>>3]-+p[f>>3])*+p[h>>3]*+p[e>>3]*+p[C>>3]*+p[t+(I<<3)>>3]+ +p[K>>3];I=I+1|0}while((I|0)!=(q|0));H=H+1|0}while((H|0)<(k[d>>2]|0))}while(0);E=E+1|0;if((E|0)>=(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))break a}E=l+56|0;C=l+4|0;k[l>>2]=27524;k[E>>2]=27544;B=0;wa(508,l+56|0,C|0);D=B;B=0;if(D&1){D=Rb()|0;L=Q;M=D;vva(E);Qb(M|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[E>>2]=27488;B=0;va(448,C|0);D=B;B=0;do if(D&1){A=Rb()|0;N=Q;O=A}else{k[C>>2]=27560;A=l+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);I=B;B=0;if(I&1){I=Rb()|0;F=Q;Yua(c);Yua(A);Ava(C);N=F;O=I;break}Yua(c);B=0;I=Ia(40,l|0,125591,9)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[(k[i>>2]|0)+(J<<2)>>2]|0)|0,K=B,B=0,!(K&1)):0)?(K=Lta(F)|0,B=0,P=Ia(40,I|0,F|0,K|0)|0,K=B,B=0,!(K&1)):0)?(B=0,K=Ia(40,P|0,146481,18)|0,P=B,B=0,!(P&1)):0)?(B=0,Xa(239,K|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,m|0,124917,92);P=B;B=0;do if(!(P&1)){B=0;eb(502,n|0,144203,13);F=B;B=0;if(F&1){F=Rb()|0;I=Q;Yua(m);R=I;S=F;break}B=0;wa(510,o|0,C|0);F=B;B=0;if(F&1){F=Rb()|0;T=Q;U=F;V=1}else{B=0;ua(163,K|0,m|0,n|0,94,o|0);F=B;B=0;if(F&1)W=1;else{B=0;eb(503,K|0,1240,229);B=0;W=0}F=Rb()|0;I=Q;Yua(o);T=I;U=F;V=W}Yua(n);Yua(m);if(V){R=T;S=U}else{X=T;Y=U;k[l>>2]=27468;k[E>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(E);Qb(Y|0)}}else{F=Rb()|0;R=Q;S=F}while(0);zb(K|0);X=R;Y=S;k[l>>2]=27468;k[E>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(E);Qb(Y|0)}P=Rb()|0;X=Q;Y=P;k[l>>2]=27468;k[E>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(E);Qb(Y|0)}while(0);L=N;M=O;vva(E);Qb(M|0)}while(0);M=k[i>>2]|0;if(M)Tqa(M);k[i>>2]=0;i=k[j>>2]|0;if(i)Tqa(i);k[j>>2]=0;Tqa(t);Tqa(v);if(!y){r=a;return s|0}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=a;return s|0}function $5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,124917,92);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,109,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function a6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;a=r;r=r+384|0;f=a+360|0;g=a+356|0;h=a+352|0;i=a+216|0;j=a+200|0;l=a+48|0;m=a+36|0;n=a+64|0;o=a+24|0;p=a+12|0;q=a;if(!($p(c)|0)){r=a;return}k[g>>2]=0;cp(c,h,199);qp(c,g,0,180);s=k[h>>2]|0;a:do if((s|0)>0){h=k[g>>2]|0;t=0;while(1){if((k[h+(t<<2)>>2]|0)!=670){u=t;break}t=t+1|0;if((t|0)>=(s|0))break a}t=i+56|0;h=i+4|0;k[i>>2]=27524;k[t>>2]=27544;B=0;wa(508,i+56|0,h|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[t>>2]=27488;B=0;va(448,h|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[h>>2]=27560;y=i+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,h|0,f|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(f);Yua(y);Ava(h);z=D;A=C;break}Yua(f);B=0;C=Ia(40,i|0,125591,9)|0;D=B;B=0;b:do if((((!(D&1)?(B=0,E=ya(427,k[(k[g>>2]|0)+(u<<2)>>2]|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,C|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,146481,18)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,j|0,124917,92);G=B;B=0;do if(!(G&1)){B=0;eb(502,l|0,138252,9);E=B;B=0;if(E&1){E=Rb()|0;H=Q;Yua(j);I=E;J=H;break}B=0;wa(510,m|0,h|0);H=B;B=0;if(H&1){H=Rb()|0;K=Q;L=H;M=1}else{B=0;ua(163,F|0,j|0,l|0,134,m|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,F|0,1240,229);B=0;N=0}H=Rb()|0;E=Q;Yua(m);K=E;L=H;M=N}Yua(l);Yua(j);if(M){I=L;J=K}else{O=L;P=K;break b}}else{H=Rb()|0;I=H;J=Q}while(0);zb(F|0);O=I;P=J}else R=23;while(0);if((R|0)==23){C=Rb()|0;O=C;P=Q}k[i>>2]=27468;k[t>>2]=27488;k[h>>2]=27560;Yua(y);Ava(h);vva(t);S=P;T=O;Qb(T|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}while(0);switch(d|0){case 379:{b6(0,c,b,e);break}case 36:{c6(0,c,b,e);break}default:{e=n+56|0;b=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;U=Q;V=c;vva(e);Qb(V|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){x=Rb()|0;W=Q;X=x}else{k[b>>2]=27560;x=n+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(f);Yua(x);Ava(b);W=z;X=A;break}Yua(f);B=0;A=Ia(40,n|0,125227,32)|0;z=B;B=0;c:do if(((!(z&1)?(B=0,w=ya(427,d|0)|0,O=B,B=0,!(O&1)):0)?(O=Lta(w)|0,B=0,P=Ia(40,A|0,w|0,O|0)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,P|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,o|0,124917,92);O=B;B=0;do if(!(O&1)){B=0;eb(502,p|0,138252,9);w=B;B=0;if(w&1){w=Rb()|0;i=Q;Yua(o);Y=w;Z=i;break}B=0;wa(510,q|0,b|0);i=B;B=0;if(i&1){i=Rb()|0;_=1;$=Q;aa=i}else{B=0;ua(163,P|0,o|0,p|0,141,q|0);i=B;B=0;if(i&1)ba=1;else{B=0;eb(503,P|0,1240,229);B=0;ba=0}i=Rb()|0;w=Q;Yua(q);_=ba;$=w;aa=i}Yua(p);Yua(o);if(_){Y=aa;Z=$}else{ca=$;da=aa;break c}}else{i=Rb()|0;Y=i;Z=Q}while(0);zb(P|0);ca=Z;da=Y}else R=52;while(0);if((R|0)==52){A=Rb()|0;ca=Q;da=A}k[n>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(x);Ava(b);vva(e);S=ca;T=da;Qb(T|0)}while(0);U=W;V=X;vva(e);Qb(V|0)}}V=k[g>>2]|0;if(V)Tqa(V);r=a;return}function b6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0;a=r;r=r+64|0;e=a+40|0;f=a+24|0;g=a+16|0;h=a+8|0;i=a;j=a+56|0;k[j>>2]=0;l=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;m=l>>>0>536870911?-1:l<<3;n=Rqa(m)|0;o=Rqa(m)|0;if(l)WEa(o|0,0,l<<3|0)|0;m=Rqa(l>>>0>1073741823?-1:l<<2)|0;Uo(b,j);Mp(b,m,d,0);d=Wo(b,934)|0;q=Wo(b,339)|0;s=Wo(b,380)|0;t=Wo(b,379)|0;u=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;v=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;a:do if((v|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){w=u+8|0;x=f+8|0;y=e+8|0;if((l|0)>0)z=v;else{A=v;while(1){Fc[k[(k[u>>2]|0)+24>>2]&1023](u,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,i,k[j>>2]|0,u);nd[k[(k[b>>2]|0)+356>>2]&1023](b,n,u);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,u);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,u);rd[k[(k[d>>2]|0)+60>>2]&511](d,e,k[j>>2]|0,u);rd[k[(k[q>>2]|0)+60>>2]&511](q,f,k[j>>2]|0,u);A=A+1|0;if((A|0)>=(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))break a}}do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,z);rd[k[(k[b>>2]|0)+260>>2]&511](b,i,k[j>>2]|0,u);nd[k[(k[b>>2]|0)+356>>2]&1023](b,n,u);nd[k[(k[s>>2]|0)+48>>2]&1023](s,g,u);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,u);rd[k[(k[d>>2]|0)+60>>2]&511](d,e,k[j>>2]|0,u);rd[k[(k[q>>2]|0)+60>>2]&511](q,f,k[j>>2]|0,u);B=+p[i>>3];C=+p[g>>3];D=+ja(+(+p[h>>3]));E=+p[f>>3]*+p[e>>3]+ +p[x>>3]*+p[y>>3];A=0;do{F=o+(A<<3)|0;p[F>>3]=+p[F>>3]-B*+p[w>>3]*+p[n+(A<<3)>>3]*D*C*E;A=A+1|0}while((A|0)!=(l|0));z=z+1|0}while((z|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}while(0);if(k[c>>2]|0){z=k[k[c+4>>2]>>2]|0;Dc[k[(k[z>>2]|0)+16>>2]&255](z,l,m,o,1)}Tqa(o);o=k[j>>2]|0;if(o)Tqa(o);k[j>>2]=0;Tqa(n);Tqa(m);if(!u){r=a;return}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);r=a;return}function c6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0;a=r;r=r+32|0;e=a+8|0;f=a;g=a+16|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;i=h>>>0>536870911?-1:h<<3;j=Rqa(i)|0;l=Rqa(i)|0;if(h)WEa(l|0,0,h<<3|0)|0;i=Rqa(h>>>0>1073741823?-1:h<<2)|0;Uo(b,g);Mp(b,i,d,0);d=Wo(b,934)|0;m=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;n=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;a:do if((n|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){o=m+8|0;if((h|0)>0)q=n;else{s=n;while(1){Fc[k[(k[m>>2]|0)+24>>2]&1023](m,s);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,m);nd[k[(k[b>>2]|0)+356>>2]&1023](b,j,m);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,m);s=s+1|0;if((s|0)>=(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))break a}}do{Fc[k[(k[m>>2]|0)+24>>2]&1023](m,q);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,m);nd[k[(k[b>>2]|0)+356>>2]&1023](b,j,m);nd[k[(k[d>>2]|0)+48>>2]&1023](d,e,m);t=+p[f>>3];u=+p[e>>3];s=0;do{v=l+(s<<3)|0;p[v>>3]=+p[v>>3]-t*+p[o>>3]*+p[j+(s<<3)>>3]*u;s=s+1|0}while((s|0)!=(h|0));q=q+1|0}while((q|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))}while(0);if(k[c>>2]|0){q=k[k[c+4>>2]>>2]|0;Dc[k[(k[q>>2]|0)+16>>2]&255](q,h,i,l,1)}Tqa(l);l=k[g>>2]|0;if(l)Tqa(l);k[g>>2]=0;Tqa(j);Tqa(i);if(!m){r=a;return}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=a;return}function d6(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,934);return}function e6(a,b){a=a|0;b=b|0;return}function f6(a){a=a|0;Sqa(a);return}function g6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135838,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,9,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function h6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135856,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,12,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function i6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,145111,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,15,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function j6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135868,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,18,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function k6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,21,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function l6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136199,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,24,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function m6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,29,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function n6(a,b){a=a|0;b=b|0;return 0}function o6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function p6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;Ap(b,d,533);switch(k[d>>2]|0){case 536:{i=q6(0,b)|0;r=a;return i|0}case 539:{i=r6(0,b)|0;r=a;return i|0}case 540:{i=s6(0,b)|0;r=a;return i|0}case 542:{i=t6(0,b)|0;r=a;return i|0}case 534:{i=0;r=a;return i|0}default:{i=e+56|0;a=e+4|0;k[e>>2]=27524;k[i>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;l=b;vva(i);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[i>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[d>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,125033,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,144189,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,53,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}while(0);j=n;l=o;vva(i);Qb(l|0)}}return 0}function q6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+240|0;c=a+220|0;d=a+216|0;e=a+40|0;f=a+204|0;g=a+192|0;h=a+180|0;j=a+32|0;l=a+24|0;m=a;n=a+176|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{o=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){o=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{q=0;r=a;return q|0}break}default:{s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;A=Ia(40,e|0,144639,5)|0;C=B;B=0;if((((!(C&1)?(B=0,C=ya(427,k[d>>2]|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(C)|0,B=0,E=Ia(40,A|0,C|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Ia(40,E|0,146481,18)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,f|0,125033,80);E=B;B=0;do if(!(E&1)){B=0;eb(502,g|0,128218,16);C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(f);F=C;G=A;break}B=0;wa(510,h|0,t|0);A=B;B=0;if(A&1){A=Rb()|0;H=A;I=Q;J=1}else{B=0;ua(163,D|0,f|0,g|0,243,h|0);A=B;B=0;if(A&1)K=1;else{B=0;eb(503,D|0,1240,229);B=0;K=0}A=Rb()|0;C=Q;Yua(h);H=A;I=C;J=K}Yua(g);Yua(f);if(J){F=H;G=I}else{L=H;M=I;k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(L|0)}}else{C=Rb()|0;F=C;G=Q}while(0);zb(D|0);L=F;M=G;k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(L|0)}E=Rb()|0;L=E;M=Q;k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Qb(L|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}}while(0);k[n>>2]=0;w=Hc[k[(k[o>>2]|0)+164>>2]&511](o)|0;op(o,c,184);z=Qqa(4)|0;k[z>>2]=38696;y=ed[k[38740>>2]&511](z,b)|0;Ec[k[(k[z>>2]|0)+4>>2]&1023](z);if(!(i[c>>0]|0)){Uo(o,n);c=Wo(o,674)|0;z=Wo(o,677)|0;b=Wo(o,353)|0;v=w<<1;L=Rqa(v>>>0>536870911?-1:v<<3)|0;M=ed[k[(k[o>>2]|0)+308>>2]&511](o,2)|0;G=Hc[k[(k[M>>2]|0)+8>>2]&511](M)|0;if((G|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0)){F=o+28|0;I=m+8|0;H=m+16|0;J=(w|0)>0;f=M+8|0;g=y+12|0;K=G;do{Fc[k[(k[M>>2]|0)+24>>2]&1023](M,K);rd[k[(k[o>>2]|0)+260>>2]&511](o,e,k[n>>2]|0,M);rd[k[(k[o>>2]|0)+340>>2]&511](o,L,k[n>>2]|0,M);nd[k[(k[b>>2]|0)+48>>2]&1023](b,j,M);Xo(o,m,k[n>>2]|0,M,c,z);G=k[F>>2]|0;nd[k[(k[G>>2]|0)+132>>2]&1023](G,l,m);N=+p[m>>3];O=+p[I>>3];P=N*2.0+O;R=+p[H>>3];S=N+O*2.0;if(J){G=k[g>>2]|0;h=0;do{t=L+(h<<3)|0;u=L+(h+w<<3)|0;E=h<<1;C=ma(E,v)|0;A=ma(E|1,v)|0;E=0;do{O=+p[t>>3];N=+p[u>>3];T=P*O+R*N;U=+p[L+(E<<3)>>3];V=+p[L+(E+w<<3)>>3];W=P*U+R*V;X=R*O+S*N;N=R*U+S*V;Y=E<<1;Z=Y+C|0;_=G+(Z<<3)|0;p[_>>3]=+p[_>>3]+T*(W*(+p[j>>3]*(+p[l>>3]*(+p[f>>3]*+p[e>>3]*2.0))));_=G+((Z|1)<<3)|0;p[_>>3]=+p[_>>3]+T*(N*(+p[j>>3]*(+p[l>>3]*(+p[f>>3]*+p[e>>3]*2.0))));_=Y+A|0;Y=G+(_<<3)|0;p[Y>>3]=+p[Y>>3]+X*(W*(+p[j>>3]*(+p[l>>3]*(+p[f>>3]*+p[e>>3]*2.0))));Y=G+((_|1)<<3)|0;p[Y>>3]=+p[Y>>3]+X*(N*(+p[j>>3]*(+p[l>>3]*(+p[f>>3]*+p[e>>3]*2.0))));E=E+1|0}while((E|0)!=(w|0));h=h+1|0}while((h|0)!=(w|0))}K=K+1|0}while((K|0)<(Hc[k[(k[M>>2]|0)+12>>2]&511](M)|0))}Fq(o,y,971);Ec[k[(k[M>>2]|0)+4>>2]&1023](M);Tqa(L);L=k[n>>2]|0;if(L)Tqa(L);k[n>>2]=0;if((k[d>>2]|0)!=300?(ap(o),(o|0)!=0):0)Ec[k[(k[o>>2]|0)+4>>2]&1023](o)}else if((k[d>>2]|0)!=300?(ap(o),(o|0)!=0):0)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);q=y;r=a;return q|0}function r6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+176|0;d=a+188|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;j=Qqa(4)|0;k[j>>2]=38696;l=ed[k[38740>>2]&511](j,b)|0;Ec[k[(k[j>>2]|0)+4>>2]&1023](j);op(b,d,184);if(i[d>>0]|0){r=a;return l|0}l=e+56|0;a=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,a|0);d=B;B=0;if(d&1){d=Rb()|0;m=Q;n=d;vva(l);Qb(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,a|0);d=B;B=0;do if(d&1){b=Rb()|0;o=Q;p=b}else{k[a>>2]=27560;b=e+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;q=Q;Yua(c);Yua(b);Ava(a);o=q;p=j;break}Yua(c);B=0;j=Ia(40,e|0,125114,46)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,f|0,125033,80);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,125161,17);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,j|0,f|0,g|0,223,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,j|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[l>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(l);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(j|0);A=u;C=v;k[e>>2]=27468;k[l>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(l);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[l>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(l);Qb(C|0)}while(0);m=o;n=p;vva(l);Qb(n|0);return 0}function s6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0;a=r;r=r+64|0;c=a+60|0;d=a+48|0;e=a+40|0;f=a;g=a+56|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;op(b,c,184);j=Qqa(4)|0;k[j>>2]=38696;l=ed[k[38740>>2]&511](j,b)|0;Ec[k[(k[j>>2]|0)+4>>2]&1023](j);if(i[c>>0]|0){r=a;return l|0}Uo(b,g);c=Wo(b,674)|0;j=Wo(b,677)|0;m=h*3|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;m=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;o=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;if((o|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)){q=b+28|0;s=f+8|0;t=f+16|0;u=f+24|0;v=f+32|0;w=(h|0)>0;x=h<<1;y=m+8|0;z=l+12|0;A=o;do{Fc[k[(k[m>>2]|0)+24>>2]&1023](m,A);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[g>>2]|0,m);rd[k[(k[b>>2]|0)+340>>2]&511](b,n,k[g>>2]|0,m);ep(b,f,k[g>>2]|0,m,c,j);o=k[q>>2]|0;nd[k[(k[o>>2]|0)+120>>2]&1023](o,e,f);B=+p[f>>3];C=+p[s>>3];D=B*2.0+C;E=+p[t>>3];F=B+C*2.0;C=+p[u>>3];B=+p[v>>3];if(w){o=k[z>>2]|0;G=0;do{H=n+(G<<3)|0;I=n+(G+h<<3)|0;J=n+(G+x<<3)|0;K=G<<1;L=ma(K,x)|0;M=ma(K|1,x)|0;K=0;do{N=+p[H>>3];O=+p[I>>3];P=+p[J>>3];Q=D*N+E*O+C*P;R=+p[n+(K<<3)>>3];S=+p[n+(K+h<<3)>>3];T=+p[n+(K+x<<3)>>3];U=D*R+E*S+C*T;V=E*N+F*O+B*P;P=E*R+F*S+B*T;W=K<<1;X=W+L|0;Y=o+(X<<3)|0;p[Y>>3]=+p[Y>>3]+Q*(U*(+p[e>>3]*(+p[y>>3]*+p[d>>3]*2.0)));Y=o+((X|1)<<3)|0;p[Y>>3]=+p[Y>>3]+Q*(P*(+p[e>>3]*(+p[y>>3]*+p[d>>3]*2.0)));Y=W+M|0;W=o+(Y<<3)|0;p[W>>3]=+p[W>>3]+V*(U*(+p[e>>3]*(+p[y>>3]*+p[d>>3]*2.0)));W=o+((Y|1)<<3)|0;p[W>>3]=+p[W>>3]+V*(P*(+p[e>>3]*(+p[y>>3]*+p[d>>3]*2.0)));K=K+1|0}while((K|0)!=(h|0));G=G+1|0}while((G|0)!=(h|0))}A=A+1|0}while((A|0)<(Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0))}Fq(b,l,971);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Tqa(n);n=k[g>>2]|0;if(n)Tqa(n);k[g>>2]=0;r=a;return l|0}function t6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0;a=r;r=r+256|0;c=a+240|0;d=a+252|0;e=a+236|0;f=a+48|0;g=a+40|0;h=a;j=a+232|0;l=a+96|0;m=a+80|0;n=a+68|0;o=a+56|0;k[j>>2]=0;cp(b,e,299);q=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;s=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;t=(ma(k[e>>2]|0,q)|0)+s|0;op(b,d,184);s=Qqa(4)|0;k[s>>2]=38696;u=ed[k[38740>>2]&511](s,b)|0;Ec[k[(k[s>>2]|0)+4>>2]&1023](s);if(i[d>>0]|0){r=a;return u|0}Uo(b,j);d=Wo(b,674)|0;s=Wo(b,677)|0;if((k[e>>2]|0)==3){Wo(b,679)|0;v=ma(k[e>>2]|0,q)|0;e=Rqa(v>>>0>536870911?-1:v<<3)|0;v=ed[k[(k[b>>2]|0)+308>>2]&511](b,5)|0;w=Hc[k[(k[v>>2]|0)+8>>2]&511](v)|0;if((w|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0)){x=b+28|0;y=h+16|0;z=h+24|0;A=h+8|0;C=h+32|0;D=(q|0)>0;E=q<<1;F=v+8|0;G=u+12|0;H=w;do{Fc[k[(k[v>>2]|0)+24>>2]&1023](v,H);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[j>>2]|0,v);rd[k[(k[b>>2]|0)+340>>2]&511](b,e,k[j>>2]|0,v);ep(b,h,k[j>>2]|0,v,d,s);w=k[x>>2]|0;nd[k[(k[w>>2]|0)+112>>2]&1023](w,g,h);I=+p[h>>3];J=+p[y>>3];K=+p[z>>3];L=+p[A>>3];M=+p[C>>3];N=-I-L;if(D){w=k[G>>2]|0;O=0;do{P=e+(O<<3)|0;R=e+(O+q<<3)|0;S=e+(O+E<<3)|0;T=O<<2;U=ma(T,t)|0;V=ma(T|1,t)|0;W=ma(T|2,t)|0;T=0;do{X=+p[P>>3];Y=+p[R>>3];Z=+p[S>>3];_=I*X+J*Y+K*Z;$=+p[e+(T<<3)>>3];aa=+p[e+(T+q<<3)>>3];ba=+p[e+(T+E<<3)>>3];ca=I*$+J*aa+K*ba;da=J*X+L*Y+M*Z;ea=J*$+L*aa+M*ba;fa=K*X+M*Y+N*Z;Z=K*$+M*aa+N*ba;ga=T<<2;ha=ga+U|0;ia=w+(ha<<3)|0;p[ia>>3]=+p[ia>>3]+_*(ca*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ia=w+((ha|1)<<3)|0;p[ia>>3]=+p[ia>>3]+_*(ea*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ia=w+((ha|2)<<3)|0;p[ia>>3]=+p[ia>>3]+_*(Z*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ia=ga+V|0;ha=w+(ia<<3)|0;p[ha>>3]=+p[ha>>3]+da*(ca*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ha=w+(ia+1<<3)|0;p[ha>>3]=+p[ha>>3]+da*(ea*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ha=w+(ia+2<<3)|0;p[ha>>3]=+p[ha>>3]+da*(Z*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ha=ga+W|0;ga=w+(ha<<3)|0;p[ga>>3]=+p[ga>>3]+fa*(ca*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ga=w+((ha|1)<<3)|0;p[ga>>3]=+p[ga>>3]+fa*(ea*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));ga=w+(ha+2<<3)|0;p[ga>>3]=+p[ga>>3]+fa*(Z*(+p[g>>3]*(+p[F>>3]*+p[f>>3]*2.0)));T=T+1|0}while((T|0)!=(q|0));O=O+1|0}while((O|0)!=(q|0))}H=H+1|0}while((H|0)<(Hc[k[(k[v>>2]|0)+12>>2]&511](v)|0))}Fq(b,u,972);Ec[k[(k[v>>2]|0)+4>>2]&1023](v);Tqa(e);e=k[j>>2]|0;if(e)Tqa(e);k[j>>2]=0;r=a;return u|0}u=l+56|0;a=l+4|0;k[l>>2]=27524;k[u>>2]=27544;B=0;wa(508,l+56|0,a|0);j=B;B=0;if(j&1){j=Rb()|0;ja=Q;ka=j;vva(u);Qb(ka|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[u>>2]=27488;B=0;va(448,a|0);j=B;B=0;do if(j&1){e=Rb()|0;la=Q;na=e}else{k[a>>2]=27560;e=l+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;b=Q;Yua(c);Yua(e);Ava(a);la=b;na=v;break}Yua(c);B=0;v=Ia(40,l|0,144350,19)|0;b=B;B=0;if(!(b&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,m|0,125033,80);b=B;B=0;do if(!(b&1)){B=0;eb(502,n|0,125179,15);H=B;B=0;if(H&1){H=Rb()|0;q=Q;Yua(m);oa=q;pa=H;break}B=0;wa(510,o|0,a|0);H=B;B=0;if(H&1){H=Rb()|0;qa=Q;ra=H;sa=1}else{B=0;ua(163,v|0,m|0,n|0,92,o|0);H=B;B=0;if(H&1)ta=1;else{B=0;eb(503,v|0,1240,229);B=0;ta=0}H=Rb()|0;q=Q;Yua(o);qa=q;ra=H;sa=ta}Yua(n);Yua(m);if(sa){oa=qa;pa=ra}else{xa=qa;ya=ra;k[l>>2]=27468;k[u>>2]=27488;k[a>>2]=27560;Yua(e);Ava(a);vva(u);Qb(ya|0)}}else{H=Rb()|0;oa=Q;pa=H}while(0);zb(v|0);xa=oa;ya=pa;k[l>>2]=27468;k[u>>2]=27488;k[a>>2]=27560;Yua(e);Ava(a);vva(u);Qb(ya|0)}b=Rb()|0;xa=Q;ya=b;k[l>>2]=27468;k[u>>2]=27488;k[a>>2]=27560;Yua(e);Ava(a);vva(u);Qb(ya|0)}while(0);ja=la;ka=na;vva(u);Qb(ka|0);return 0}function u6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;c=a+180|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;Ap(b,d,533);switch(k[d>>2]|0){case 536:{i=v6(0,b)|0;r=a;return i|0}case 539:{i=v6(0,b)|0;r=a;return i|0}case 540:{i=w6(0,b)|0;r=a;return i|0}case 542:{i=x6(0,b)|0;r=a;return i|0}case 534:{i=0;r=a;return i|0}default:{i=e+56|0;a=e+4|0;k[e>>2]=27524;k[i>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;l=b;vva(i);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[i>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(a);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,127478,14)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[d>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144645,14)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,125033,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,144203,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,330,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(i);Qb(C|0)}while(0);j=n;l=o;vva(i);Qb(l|0)}}return 0}function v6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0;a=r;r=r+448|0;c=a+424|0;d=a+420|0;e=a+272|0;f=a+408|0;g=a+256|0;h=a+240|0;i=a+252|0;j=a+48|0;l=a+40|0;m=a+32|0;n=a+24|0;o=a+16|0;q=a+8|0;s=a;t=a+236|0;u=a+232|0;v=a+96|0;w=a+80|0;x=a+68|0;y=a+56|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{z=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){z=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{A=0;r=a;return A|0}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){z=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{A=0;r=a;return A|0}break}default:{C=e+56|0;D=e+4|0;k[e>>2]=27524;k[C>>2]=27544;B=0;wa(508,e+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=e+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(D);I=L;J=K;break}Yua(c);B=0;K=Ia(40,e|0,144639,5)|0;L=B;B=0;b:do if((((!(L&1)?(B=0,M=ya(427,k[d>>2]|0)|0,N=B,B=0,!(N&1)):0)?(N=Lta(M)|0,B=0,O=Ia(40,K|0,M|0,N|0)|0,N=B,B=0,!(N&1)):0)?(B=0,N=Ia(40,O|0,146481,18)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,N|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,f|0,125033,80);O=B;B=0;do if(!(O&1)){B=0;eb(502,g|0,128235,16);M=B;B=0;if(M&1){M=Rb()|0;P=Q;Yua(f);R=M;S=P;break}B=0;wa(510,h|0,D|0);P=B;B=0;if(P&1){P=Rb()|0;T=P;U=Q;V=1}else{B=0;ua(163,N|0,f|0,g|0,824,h|0);P=B;B=0;if(P&1)W=1;else{B=0;eb(503,N|0,1240,229);B=0;W=0}P=Rb()|0;M=Q;Yua(h);T=P;U=M;V=W}Yua(g);Yua(f);if(V){R=T;S=U}else{X=T;Y=U;break b}}else{M=Rb()|0;R=M;S=Q}while(0);zb(N|0);X=R;Y=S}else Z=24;while(0);if((Z|0)==24){K=Rb()|0;X=K;Y=Q}k[e>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);_=X;ba=Y;Qb(_|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}}while(0);k[t>>2]=0;k[u>>2]=0;G=Hc[k[(k[z>>2]|0)+164>>2]&511](z)|0;J=iq(z,536)|0;I=Rqa(G>>>0>536870911?-1:G<<3)|0;Uo(z,u);cp(z,i,199);qp(z,t,0,180);F=Wo(z,179)|0;Y=Wo(z,674)|0;X=Wo(z,203)|0;if((k[d>>2]|0)==301){ca=0;da=0}else{e=Wo(z,677)|0;ca=e;da=Wo(z,204)|0}e=k[i>>2]|0;c:do if((e|0)>0){S=k[t>>2]|0;R=0;while(1){if((k[S+(R<<2)>>2]|0)==660)break;R=R+1|0;if((R|0)>=(e|0))break c}Bp(z,s,659)}while(0);e=ed[k[(k[z>>2]|0)+308>>2]&511](z,4)|0;R=Hc[k[(k[e>>2]|0)+8>>2]&511](e)|0;d:do if((R|0)<(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0)){S=(G|0)>0;C=e+8|0;U=J+4|0;T=R;e:while(1){Fc[k[(k[e>>2]|0)+24>>2]&1023](e,T);rd[k[(k[z>>2]|0)+260>>2]&511](z,j,k[u>>2]|0,e);nd[k[(k[z>>2]|0)+336>>2]&1023](z,I,e);nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,l,e);nd[k[(k[X>>2]|0)+48>>2]&1023](X,n,e);if((k[d>>2]|0)!=301){nd[k[(k[ca>>2]|0)+48>>2]&1023](ca,m,e);nd[k[(k[da>>2]|0)+48>>2]&1023](da,o,e)}f:do if((k[i>>2]|0)>0){V=k[t>>2]|0;f=0;while(1){rd[k[(k[F>>2]|0)+56>>2]&511](F,q,e,k[V+(f<<2)>>2]|0);V=k[t>>2]|0;switch(k[V+(f<<2)>>2]|0){case 658:{if(S){g=k[U>>2]|0;if((k[d>>2]|0)==301){W=0;do{h=g+(W<<3)|0;p[h>>3]=(+p[n>>3]-+p[l>>3])*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[I+(W<<3)>>3]+ +p[h>>3];W=W+1|0}while((W|0)!=(G|0))}else{W=0;do{ea=+p[o>>3]-+p[m>>3];h=I+(W<<3)|0;b=W<<1;D=g+(b<<3)|0;p[D>>3]=(+p[n>>3]-+p[l>>3])*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[h>>3]+ +p[D>>3];D=g+((b|1)<<3)|0;p[D>>3]=ea*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[h>>3]+ +p[D>>3];W=W+1|0}while((W|0)!=(G|0))}}break}case 663:{if(S){W=k[U>>2]|0;if((k[d>>2]|0)==301){g=0;do{ea=+p[n>>3];fa=3.170979198376458e-05/(ea+2.220446049250313e-16);D=W+(g<<3)|0;p[D>>3]=+p[D>>3]+ +p[I+(g<<3)>>3]*(+p[C>>3]*(+p[j>>3]*(+p[q>>3]*((ea==0.0?0.0:fa*fa)*(ea-+p[l>>3])))));g=g+1|0}while((g|0)!=(G|0))}else{g=0;do{ea=+p[n>>3];fa=3.170979198376458e-05/(ea+2.220446049250313e-16);ga=+p[o>>3];ha=3.170979198376458e-05/(ga+2.220446049250313e-16);ia=(ga-+p[m>>3])*(ga==0.0?0.0:ha*ha);D=I+(g<<3)|0;h=g<<1;b=W+(h<<3)|0;p[b>>3]=(ea==0.0?0.0:fa*fa)*(ea-+p[l>>3])*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[D>>3]+ +p[b>>3];b=W+((h|1)<<3)|0;p[b>>3]=ia*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[D>>3]+ +p[b>>3];g=g+1|0}while((g|0)!=(G|0))}}break}case 661:{if(S){g=k[U>>2]|0;if((k[d>>2]|0)==301){W=0;do{ia=+p[l>>3];ea=+$(+ia)+2.220446049250313e-16;fa=ia*(-8.044087261228962e-09/(ea*ea)*+ka(+(ea/(+$(+(+p[n>>3]))+2.220446049250313e-16))));b=g+(W<<3)|0;p[b>>3]=+p[b>>3]+ +p[I+(W<<3)>>3]*(+p[C>>3]*(+p[j>>3]*(+p[q>>3]*fa)));W=W+1|0}while((W|0)!=(G|0))}else{W=0;do{fa=+p[l>>3];ea=+p[m>>3];ia=+aa(+(fa*fa+ea*ea))+2.220446049250313e-16;ha=+p[n>>3];ga=+p[o>>3];ja=-8.044087261228962e-09/(ia*ia)*+ka(+(ia/(+aa(+(ha*ha+ga*ga))+2.220446049250313e-16)));b=I+(W<<3)|0;D=W<<1;h=g+(D<<3)|0;p[h>>3]=+p[h>>3]+ +p[b>>3]*(+p[C>>3]*(+p[j>>3]*(+p[q>>3]*(fa*ja))));h=g+((D|1)<<3)|0;p[h>>3]=ea*ja*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[b>>3]+ +p[h>>3];W=W+1|0}while((W|0)!=(G|0))}}break}case 660:{if(S){W=k[U>>2]|0;if((k[d>>2]|0)==301){g=0;do{ja=+p[l>>3];ea=+p[n>>3];fa=(ea-ja)*(1.0/(+p[s>>3]*2.0*+$(+(ja-ea))+2.220446049250313e-16));h=W+(g<<3)|0;p[h>>3]=+p[h>>3]+ +p[I+(g<<3)>>3]*(+p[C>>3]*(+p[j>>3]*(+p[q>>3]*fa)));g=g+1|0}while((g|0)!=(G|0))}else{g=0;do{fa=+p[l>>3];ea=+p[n>>3];ja=fa-ea;ga=+p[m>>3];ha=+p[o>>3];ia=ga-ha;la=1.0/(+p[s>>3]*2.0*+aa(+(ja*ja+ia*ia))+2.220446049250313e-16);h=I+(g<<3)|0;b=g<<1;D=W+(b<<3)|0;p[D>>3]=+p[D>>3]+ +p[h>>3]*(+p[C>>3]*(+p[j>>3]*(+p[q>>3]*((ea-fa)*la))));D=W+((b|1)<<3)|0;p[D>>3]=(ha-ga)*la*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[h>>3]+ +p[D>>3];g=g+1|0}while((g|0)!=(G|0))}}break}case 662:{if(S){g=k[U>>2]|0;if((k[d>>2]|0)==301){W=0;do{la=+p[l>>3];ga=+$(+la)+2.220446049250313e-16;ha=+ka(+(ga/(+$(+(+p[n>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(la+2.220446049250313e-16);D=g+(W<<3)|0;p[D>>3]=ha*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[I+(W<<3)>>3]+ +p[D>>3];W=W+1|0}while((W|0)!=(G|0))}else{W=0;do{ha=+p[l>>3];la=+$(+ha)+2.220446049250313e-16;ga=+ka(+(la/(+$(+(+p[n>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(ha+2.220446049250313e-16);ha=+p[m>>3];la=+$(+ha)+2.220446049250313e-16;fa=+ka(+(la/(+$(+(+p[o>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(ha+2.220446049250313e-16);D=I+(W<<3)|0;h=W<<1;b=g+(h<<3)|0;p[b>>3]=ga*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[D>>3]+ +p[b>>3];b=g+((h|1)<<3)|0;p[b>>3]=fa*+p[q>>3]*+p[j>>3]*+p[C>>3]*+p[D>>3]+ +p[b>>3];W=W+1|0}while((W|0)!=(G|0))}}break}case 695:case 694:case 691:case 690:case 689:case 696:break;default:{ma=f;break e}}f=f+1|0;if((f|0)>=(k[i>>2]|0))break f}}while(0);T=T+1|0;if((T|0)>=(Hc[k[(k[e>>2]|0)+12>>2]&511](e)|0))break d}T=v+56|0;C=v+4|0;k[v>>2]=27524;k[T>>2]=27544;B=0;wa(508,v+56|0,C|0);U=B;B=0;if(U&1){U=Rb()|0;na=Q;oa=U;vva(T);Qb(oa|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[T>>2]=27488;B=0;va(448,C|0);U=B;B=0;do if(U&1){S=Rb()|0;pa=Q;qa=S}else{k[C>>2]=27560;S=v+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;f=Q;Yua(c);Yua(S);Ava(C);pa=f;qa=H;break}Yua(c);B=0;H=Ia(40,v|0,125591,9)|0;f=B;B=0;g:do if((((!(f&1)?(B=0,V=ya(427,k[(k[t>>2]|0)+(ma<<2)>>2]|0)|0,N=B,B=0,!(N&1)):0)?(N=Lta(V)|0,B=0,W=Ia(40,H|0,V|0,N|0)|0,N=B,B=0,!(N&1)):0)?(B=0,N=Ia(40,W|0,146481,18)|0,W=B,B=0,!(W&1)):0)?(B=0,Xa(239,N|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,w|0,125033,80);W=B;B=0;do if(!(W&1)){B=0;eb(502,x|0,128235,16);V=B;B=0;if(V&1){V=Rb()|0;g=Q;Yua(w);ra=g;sa=V;break}B=0;wa(510,y|0,C|0);V=B;B=0;if(V&1){V=Rb()|0;ta=1;xa=V;za=Q}else{B=0;ua(163,N|0,w|0,x|0,1033,y|0);V=B;B=0;if(V&1)Aa=1;else{B=0;eb(503,N|0,1240,229);B=0;Aa=0}V=Rb()|0;g=Q;Yua(y);ta=Aa;xa=V;za=g}Yua(x);Yua(w);if(ta){ra=za;sa=xa}else{Ba=xa;Ca=za;break g}}else{g=Rb()|0;ra=Q;sa=g}while(0);zb(N|0);Ba=sa;Ca=ra}else Z=86;while(0);if((Z|0)==86){H=Rb()|0;Ba=H;Ca=Q}k[v>>2]=27468;k[T>>2]=27488;k[C>>2]=27560;Yua(S);Ava(C);vva(T);_=Ba;ba=Ca;Qb(_|0)}while(0);na=pa;oa=qa;vva(T);Qb(oa|0)}while(0);if((k[d>>2]|0)!=301)xq(z,J,971);oa=k[t>>2]|0;if(oa)Tqa(oa);k[t>>2]=0;t=k[u>>2]|0;if(t)Tqa(t);k[u>>2]=0;Tqa(I);if((k[d>>2]|0)!=300?(ap(z),(z|0)!=0):0)Ec[k[(k[z>>2]|0)+4>>2]&1023](z);if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);A=J;r=a;return A|0}function w6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0;a=r;r=r+272|0;c=a+248|0;d=a+244|0;e=a+240|0;f=a+48|0;g=a+40|0;h=a+32|0;i=a+24|0;j=a+16|0;l=a+8|0;m=a;n=a+236|0;o=a+232|0;q=a+96|0;s=a+80|0;t=a+68|0;u=a+56|0;if(!(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0)){v=0;r=a;return v|0}k[n>>2]=0;k[o>>2]=0;cp(b,e,298);w=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;x=iq(b,540)|0;y=Rqa(w>>>0>536870911?-1:w<<3)|0;Fc[k[(k[b>>2]|0)+192>>2]&1023](b,o);cp(b,d,199);qp(b,n,0,180);z=Wo(b,179)|0;A=Wo(b,674)|0;C=Wo(b,203)|0;if((k[e>>2]|0)==301){D=0;E=0}else{F=Wo(b,677)|0;D=F;E=Wo(b,204)|0}F=k[d>>2]|0;a:do if((F|0)>0){G=k[n>>2]|0;H=0;while(1){if((k[G+(H<<2)>>2]|0)==660)break;H=H+1|0;if((H|0)>=(F|0))break a}Bp(b,m,659)}while(0);F=ed[k[(k[b>>2]|0)+332>>2]&511](b,4)|0;H=Hc[k[(k[F>>2]|0)+8>>2]&511](F)|0;b:do if((H|0)<(Hc[k[(k[F>>2]|0)+12>>2]&511](F)|0)){G=(w|0)>0;I=F+8|0;J=x+4|0;K=H;c:while(1){Fc[k[(k[F>>2]|0)+24>>2]&1023](F,K);rd[k[(k[b>>2]|0)+276>>2]&511](b,f,k[o>>2]|0,F);nd[k[(k[b>>2]|0)+336>>2]&1023](b,y,F);nd[k[(k[A>>2]|0)+48>>2]&1023](A,g,F);nd[k[(k[C>>2]|0)+48>>2]&1023](C,i,F);if((k[e>>2]|0)!=301){nd[k[(k[D>>2]|0)+48>>2]&1023](D,h,F);nd[k[(k[E>>2]|0)+48>>2]&1023](E,j,F)}d:do if((k[d>>2]|0)>0){L=k[n>>2]|0;M=0;while(1){rd[k[(k[z>>2]|0)+56>>2]&511](z,l,F,k[L+(M<<2)>>2]|0);L=k[n>>2]|0;switch(k[L+(M<<2)>>2]|0){case 658:{if(G){N=k[J>>2]|0;if((k[e>>2]|0)==301){O=0;do{P=N+(O<<3)|0;p[P>>3]=(+p[i>>3]-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[y+(O<<3)>>3]+ +p[P>>3];O=O+1|0}while((O|0)!=(w|0))}else{O=0;do{R=+p[j>>3]-+p[h>>3];P=y+(O<<3)|0;S=O<<1;T=N+(S<<3)|0;p[T>>3]=(+p[i>>3]-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[P>>3]+ +p[T>>3];T=N+((S|1)<<3)|0;p[T>>3]=R*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[P>>3]+ +p[T>>3];O=O+1|0}while((O|0)!=(w|0))}}break}case 663:{if(G){O=k[J>>2]|0;if((k[e>>2]|0)==301){N=0;do{R=+p[i>>3];U=3.170979198376458e-05/(R+2.220446049250313e-16);T=O+(N<<3)|0;p[T>>3]=+p[T>>3]+ +p[y+(N<<3)>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*((R==0.0?0.0:U*U)*(R-+p[g>>3])))));N=N+1|0}while((N|0)!=(w|0))}else{N=0;do{R=+p[i>>3];U=3.170979198376458e-05/(R+2.220446049250313e-16);V=+p[j>>3];W=3.170979198376458e-05/(V+2.220446049250313e-16);X=(V-+p[h>>3])*(V==0.0?0.0:W*W);T=y+(N<<3)|0;P=N<<1;S=O+(P<<3)|0;p[S>>3]=(R==0.0?0.0:U*U)*(R-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[S>>3];S=O+((P|1)<<3)|0;p[S>>3]=X*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[S>>3];N=N+1|0}while((N|0)!=(w|0))}}break}case 661:{if(G){N=k[J>>2]|0;if((k[e>>2]|0)==301){O=0;do{X=+p[g>>3];R=+$(+X)+2.220446049250313e-16;U=X*(-8.044087261228962e-09/(R*R)*+ka(+(R/(+$(+(+p[i>>3]))+2.220446049250313e-16))));S=N+(O<<3)|0;p[S>>3]=+p[S>>3]+ +p[y+(O<<3)>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*U)));O=O+1|0}while((O|0)!=(w|0))}else{O=0;do{U=+p[g>>3];R=+p[h>>3];X=+aa(+(U*U+R*R))+2.220446049250313e-16;W=+p[i>>3];V=+p[j>>3];Y=-8.044087261228962e-09/(X*X)*+ka(+(X/(+aa(+(W*W+V*V))+2.220446049250313e-16)));S=y+(O<<3)|0;T=O<<1;P=N+(T<<3)|0;p[P>>3]=+p[P>>3]+ +p[S>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*(U*Y))));P=N+((T|1)<<3)|0;p[P>>3]=R*Y*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[S>>3]+ +p[P>>3];O=O+1|0}while((O|0)!=(w|0))}}break}case 660:{if(G){O=k[J>>2]|0;if((k[e>>2]|0)==301){N=0;do{Y=+p[g>>3];R=+p[i>>3];U=(R-Y)*(1.0/(+p[m>>3]*2.0*+$(+(Y-R))+2.220446049250313e-16));P=O+(N<<3)|0;p[P>>3]=+p[P>>3]+ +p[y+(N<<3)>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*U)));N=N+1|0}while((N|0)!=(w|0))}else{N=0;do{U=+p[g>>3];R=+p[i>>3];Y=U-R;V=+p[h>>3];W=+p[j>>3];X=V-W;Z=1.0/(+p[m>>3]*2.0*+aa(+(Y*Y+X*X))+2.220446049250313e-16);P=y+(N<<3)|0;S=N<<1;T=O+(S<<3)|0;p[T>>3]=+p[T>>3]+ +p[P>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*((R-U)*Z))));T=O+((S|1)<<3)|0;p[T>>3]=(W-V)*Z*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[P>>3]+ +p[T>>3];N=N+1|0}while((N|0)!=(w|0))}}break}case 662:{if(G){N=k[J>>2]|0;if((k[e>>2]|0)==301){O=0;do{Z=+p[g>>3];V=+$(+Z)+2.220446049250313e-16;W=+ka(+(V/(+$(+(+p[i>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(Z+2.220446049250313e-16);T=N+(O<<3)|0;p[T>>3]=W*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[y+(O<<3)>>3]+ +p[T>>3];O=O+1|0}while((O|0)!=(w|0))}else{O=0;do{W=+p[g>>3];Z=+$(+W)+2.220446049250313e-16;V=+ka(+(Z/(+$(+(+p[i>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(W+2.220446049250313e-16);W=+p[h>>3];Z=+$(+W)+2.220446049250313e-16;U=+ka(+(Z/(+$(+(+p[j>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(W+2.220446049250313e-16);T=y+(O<<3)|0;P=O<<1;S=N+(P<<3)|0;p[S>>3]=V*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[S>>3];S=N+((P|1)<<3)|0;p[S>>3]=U*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[S>>3];O=O+1|0}while((O|0)!=(w|0))}}break}case 695:case 694:case 691:case 690:case 689:case 696:break;default:{_=M;break c}}M=M+1|0;if((M|0)>=(k[d>>2]|0))break d}}while(0);K=K+1|0;if((K|0)>=(Hc[k[(k[F>>2]|0)+12>>2]&511](F)|0))break b}K=q+56|0;I=q+4|0;k[q>>2]=27524;k[K>>2]=27544;B=0;wa(508,q+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;ba=Q;ca=J;vva(K);Qb(ca|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[K>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){G=Rb()|0;da=Q;ea=G}else{k[I>>2]=27560;G=q+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;L=Q;Yua(c);Yua(G);Ava(I);da=L;ea=M;break}Yua(c);B=0;M=Ia(40,q|0,125591,9)|0;L=B;B=0;if((((!(L&1)?(B=0,L=ya(427,k[(k[n>>2]|0)+(_<<2)>>2]|0)|0,O=B,B=0,!(O&1)):0)?(O=Lta(L)|0,B=0,N=Ia(40,M|0,L|0,O|0)|0,O=B,B=0,!(O&1)):0)?(B=0,O=Ia(40,N|0,146481,18)|0,N=B,B=0,!(N&1)):0)?(B=0,Xa(239,O|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,s|0,125033,80);N=B;B=0;do if(!(N&1)){B=0;eb(502,t|0,125195,15);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(s);fa=M;ga=L;break}B=0;wa(510,u|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;ha=Q;ia=L;ja=1}else{B=0;ua(163,O|0,s|0,t|0,788,u|0);L=B;B=0;if(L&1)la=1;else{B=0;eb(503,O|0,1240,229);B=0;la=0}L=Rb()|0;M=Q;Yua(u);ha=M;ia=L;ja=la}Yua(t);Yua(s);if(ja){fa=ha;ga=ia}else{ma=ha;na=ia;k[q>>2]=27468;k[K>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(K);Qb(na|0)}}else{L=Rb()|0;fa=Q;ga=L}while(0);zb(O|0);ma=fa;na=ga;k[q>>2]=27468;k[K>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(K);Qb(na|0)}N=Rb()|0;ma=Q;na=N;k[q>>2]=27468;k[K>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(K);Qb(na|0)}while(0);ba=da;ca=ea;vva(K);Qb(ca|0)}while(0);if((k[e>>2]|0)!=301)xq(b,x,971);b=k[n>>2]|0;if(b)Tqa(b);k[n>>2]=0;n=k[o>>2]|0;if(n)Tqa(n);k[o>>2]=0;Tqa(y);if(F)Ec[k[(k[F>>2]|0)+4>>2]&1023](F);v=x;r=a;return v|0}function x6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0.0,P=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0,ba=0.0,ca=0.0,da=0.0,ea=0,fa=0.0,ga=0,ha=0,ia=0,ja=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;a=r;r=r+272|0;c=a+248|0;d=a+244|0;e=a+240|0;f=a+48|0;g=a+40|0;h=a+32|0;i=a+24|0;j=a+16|0;l=a+8|0;m=a;n=a+236|0;o=a+232|0;q=a+96|0;s=a+80|0;t=a+68|0;u=a+56|0;if(!(Hc[k[(k[b>>2]|0)+252>>2]&511](b)|0)){v=0;r=a;return v|0}k[n>>2]=0;k[o>>2]=0;cp(b,e,298);w=Hc[k[(k[b>>2]|0)+396>>2]&511](b)|0;x=Hc[k[(k[b>>2]|0)+392>>2]&511](b)|0;y=x+w|0;z=Rqa(y>>>0>1073741823?-1:y<<2)|0;y=(w|0)>0;if((k[e>>2]|0)==301){if(y){A=0;do{k[z+(A<<2)>>2]=971;A=A+1|0}while((A|0)!=(w|0))}}else if(y){A=0;do{k[z+(A<<2)>>2]=972;A=A+1|0}while((A|0)!=(w|0))}if((x|0)>0){A=0;do{k[z+(A+w<<2)>>2]=653;A=A+1|0}while((A|0)!=(x|0))}x=iq(b,542)|0;A=Rqa(w>>>0>536870911?-1:w<<3)|0;Fc[k[(k[b>>2]|0)+192>>2]&1023](b,o);cp(b,d,199);qp(b,n,0,180);C=Wo(b,179)|0;D=Wo(b,674)|0;E=Wo(b,203)|0;if((k[e>>2]|0)==301){F=0;G=0}else{H=Wo(b,677)|0;F=H;G=Wo(b,204)|0}H=k[d>>2]|0;a:do if((H|0)>0){I=k[n>>2]|0;J=0;while(1){if((k[I+(J<<2)>>2]|0)==660)break;J=J+1|0;if((J|0)>=(H|0))break a}Bp(b,m,659)}while(0);H=ed[k[(k[b>>2]|0)+332>>2]&511](b,4)|0;J=Hc[k[(k[H>>2]|0)+8>>2]&511](H)|0;b:do if((J|0)<(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0)){I=H+8|0;K=x+4|0;L=0.0;M=J;c:while(1){Fc[k[(k[H>>2]|0)+24>>2]&1023](H,M);rd[k[(k[b>>2]|0)+276>>2]&511](b,f,k[o>>2]|0,H);nd[k[(k[b>>2]|0)+368>>2]&1023](b,A,H);nd[k[(k[D>>2]|0)+48>>2]&1023](D,g,H);nd[k[(k[E>>2]|0)+48>>2]&1023](E,i,H);if((k[e>>2]|0)!=301){nd[k[(k[F>>2]|0)+48>>2]&1023](F,h,H);nd[k[(k[G>>2]|0)+48>>2]&1023](G,j,H)}d:do if((k[d>>2]|0)>0){N=k[n>>2]|0;O=L;P=0;while(1){rd[k[(k[C>>2]|0)+56>>2]&511](C,l,H,k[N+(P<<2)>>2]|0);N=k[n>>2]|0;switch(k[N+(P<<2)>>2]|0){case 658:{if(y){R=k[K>>2]|0;if((k[e>>2]|0)==301){S=0;do{T=R+(S<<1<<3)|0;p[T>>3]=(+p[i>>3]-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[A+(S<<3)>>3]+ +p[T>>3];S=S+1|0}while((S|0)!=(w|0));U=O}else{S=0;do{T=A+(S<<3)|0;V=S*3|0;W=R+(V<<3)|0;p[W>>3]=(+p[i>>3]-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[W>>3];X=+p[j>>3]-+p[h>>3];W=R+(V+1<<3)|0;p[W>>3]=X*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[W>>3];S=S+1|0}while((S|0)!=(w|0));U=X}}else U=O;break}case 663:{if(y){S=k[K>>2]|0;if((k[e>>2]|0)==301){R=0;do{X=+p[i>>3];Y=3.170979198376458e-05/(X+2.220446049250313e-16);W=A+(R<<3)|0;T=R<<1;V=S+(T<<3)|0;p[V>>3]=+p[V>>3]+ +p[W>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*((X==0.0?0.0:Y*Y)*(X-+p[g>>3])))));V=S+((T|1)<<3)|0;p[V>>3]=O*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[W>>3]+ +p[V>>3];R=R+1|0}while((R|0)!=(w|0));U=O}else{R=0;do{X=+p[i>>3];Y=3.170979198376458e-05/(X+2.220446049250313e-16);Z=+p[j>>3];_=3.170979198376458e-05/(Z+2.220446049250313e-16);ba=(Z-+p[h>>3])*(Z==0.0?0.0:_*_);V=A+(R<<3)|0;W=R*3|0;T=S+(W<<3)|0;p[T>>3]=(X==0.0?0.0:Y*Y)*(X-+p[g>>3])*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[V>>3]+ +p[T>>3];T=S+(W+1<<3)|0;p[T>>3]=ba*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[V>>3]+ +p[T>>3];R=R+1|0}while((R|0)!=(w|0));U=ba}}else U=O;break}case 661:{if(y){R=k[K>>2]|0;if((k[e>>2]|0)==301){S=0;do{ba=+p[g>>3];X=+$(+ba)+2.220446049250313e-16;Y=ba*(-8.044087261228962e-09/(X*X)*+ka(+(X/(+$(+(+p[i>>3]))+2.220446049250313e-16))));T=R+(S<<1<<3)|0;p[T>>3]=+p[T>>3]+ +p[A+(S<<3)>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*Y)));S=S+1|0}while((S|0)!=(w|0));U=O}else{S=0;do{Y=+p[g>>3];X=+p[h>>3];ba=+aa(+(Y*Y+X*X))+2.220446049250313e-16;_=+p[i>>3];Z=+p[j>>3];ca=-8.044087261228962e-09/(ba*ba)*+ka(+(ba/(+aa(+(_*_+Z*Z))+2.220446049250313e-16)));Z=X*ca;T=A+(S<<3)|0;V=S*3|0;W=R+(V<<3)|0;p[W>>3]=+p[W>>3]+ +p[T>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*(Y*ca))));W=R+(V+1<<3)|0;p[W>>3]=Z*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[T>>3]+ +p[W>>3];S=S+1|0}while((S|0)!=(w|0));U=Z}}else U=O;break}case 660:{if(y){S=k[K>>2]|0;if((k[e>>2]|0)==301){R=0;do{Z=+p[g>>3];ca=+p[i>>3];Y=(ca-Z)*(1.0/(+p[m>>3]*2.0*+$(+(Z-ca))+2.220446049250313e-16));W=S+(R<<1<<3)|0;p[W>>3]=+p[W>>3]+ +p[A+(R<<3)>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*Y)));R=R+1|0}while((R|0)!=(w|0));U=O}else{R=0;do{Y=+p[g>>3];ca=+p[i>>3];Z=Y-ca;X=+p[h>>3];_=+p[j>>3];ba=X-_;da=1.0/(+p[m>>3]*2.0*+aa(+(Z*Z+ba*ba))+2.220446049250313e-16);ba=(_-X)*da;W=A+(R<<3)|0;T=R*3|0;V=S+(T<<3)|0;p[V>>3]=+p[V>>3]+ +p[W>>3]*(+p[I>>3]*(+p[f>>3]*(+p[l>>3]*((ca-Y)*da))));V=S+(T+1<<3)|0;p[V>>3]=ba*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[W>>3]+ +p[V>>3];R=R+1|0}while((R|0)!=(w|0));U=ba}}else U=O;break}case 662:{if(y){R=k[K>>2]|0;if((k[e>>2]|0)==301){S=0;do{ba=+p[g>>3];da=+$(+ba)+2.220446049250313e-16;Y=+ka(+(da/(+$(+(+p[i>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(ba+2.220446049250313e-16);V=R+(S<<1<<3)|0;p[V>>3]=Y*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[A+(S<<3)>>3]+ +p[V>>3];S=S+1|0}while((S|0)!=(w|0));U=O}else{S=0;do{Y=+p[g>>3];ba=+$(+Y)+2.220446049250313e-16;da=+ka(+(ba/(+$(+(+p[i>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(Y+2.220446049250313e-16);Y=+p[h>>3];ba=+$(+Y)+2.220446049250313e-16;ca=+ka(+(ba/(+$(+(+p[j>>3]))+2.220446049250313e-16)))*-1.0055109076536202e-09/(Y+2.220446049250313e-16);V=A+(S<<3)|0;W=S*3|0;T=R+(W<<3)|0;p[T>>3]=da*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[V>>3]+ +p[T>>3];T=R+(W+1<<3)|0;p[T>>3]=ca*+p[l>>3]*+p[f>>3]*+p[I>>3]*+p[V>>3]+ +p[T>>3];S=S+1|0}while((S|0)!=(w|0));U=ca}}else U=O;break}case 694:case 691:case 690:case 689:case 696:{U=O;break}default:{ea=P;break c}}P=P+1|0;if((P|0)>=(k[d>>2]|0)){fa=U;break d}else O=U}}else fa=L;while(0);M=M+1|0;if((M|0)>=(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0))break b;else L=fa}M=q+56|0;I=q+4|0;k[q>>2]=27524;k[M>>2]=27544;B=0;wa(508,q+56|0,I|0);K=B;B=0;if(K&1){K=Rb()|0;ga=Q;ha=K;vva(M);Qb(ha|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[M>>2]=27488;B=0;va(448,I|0);K=B;B=0;do if(K&1){P=Rb()|0;ia=Q;ja=P}else{k[I>>2]=27560;P=q+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;S=Q;Yua(c);Yua(P);Ava(I);ia=S;ja=N;break}Yua(c);B=0;N=Ia(40,q|0,125591,9)|0;S=B;B=0;if((((!(S&1)?(B=0,S=ya(427,k[(k[n>>2]|0)+(ea<<2)>>2]|0)|0,R=B,B=0,!(R&1)):0)?(R=Lta(S)|0,B=0,T=Ia(40,N|0,S|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Ia(40,T|0,146481,18)|0,T=B,B=0,!(T&1)):0)?(B=0,Xa(239,R|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,s|0,125033,80);T=B;B=0;do if(T&1){S=Rb()|0;la=Q;ma=S}else{B=0;eb(502,t|0,125211,15);S=B;B=0;if(S&1){S=Rb()|0;N=Q;Yua(s);la=N;ma=S;break}B=0;wa(510,u|0,I|0);S=B;B=0;if(S&1){S=Rb()|0;na=Q;oa=S;pa=1}else{B=0;ua(163,R|0,s|0,t|0,553,u|0);S=B;B=0;if(S&1)qa=1;else{B=0;eb(503,R|0,1240,229);B=0;qa=0}S=Rb()|0;N=Q;Yua(u);na=N;oa=S;pa=qa}Yua(t);Yua(s);if(pa){la=na;ma=oa;break}else{ra=na;sa=oa}k[q>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(P);Ava(I);vva(M);Qb(sa|0)}while(0);zb(R|0);ra=la;sa=ma;k[q>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(P);Ava(I);vva(M);Qb(sa|0)}T=Rb()|0;ra=Q;sa=T;k[q>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(P);Ava(I);vva(M);Qb(sa|0)}while(0);ga=ia;ha=ja;vva(M);Qb(ha|0)}while(0);zq(b,x,z);Tqa(z);z=k[n>>2]|0;if(z)Tqa(z);k[n>>2]=0;n=k[o>>2]|0;if(n)Tqa(n);k[o>>2]=0;Tqa(A);if(H)Ec[k[(k[H>>2]|0)+4>>2]&1023](H);v=x;r=a;return v|0}function y6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125033,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,1050,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function z6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0;a=r;r=r+1408|0;f=a+1396|0;g=a+1356|0;h=a+1340|0;i=a+1324|0;j=a+1176|0;l=a+1384|0;m=a+1372|0;n=a+1360|0;o=a+1040|0;p=a+1344|0;q=a+1328|0;s=a+1312|0;t=a+904|0;u=a+888|0;v=a+740|0;w=a+728|0;x=a+752|0;y=a+304|0;z=a+156|0;A=a+144|0;C=a+592|0;D=a+132|0;E=a+120|0;F=a+108|0;G=a+456|0;H=a+96|0;I=a+84|0;J=a+72|0;K=a+320|0;L=a+60|0;M=a+48|0;N=a+36|0;O=a+168|0;P=a+24|0;R=a+12|0;S=a;if(!($p(c)|0)){r=a;return}Ap(c,g,533);k[h>>2]=0;cp(c,i,199);qp(c,h,0,180);switch(d|0){case 104:case 105:case 214:case 215:case 227:break;default:{T=j+56|0;U=j+4|0;k[j>>2]=27524;k[T>>2]=27544;B=0;wa(508,j+56|0,U|0);V=B;B=0;if(V&1){V=Rb()|0;W=Q;X=V;vva(T);Qb(X|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[T>>2]=27488;B=0;va(448,U|0);V=B;B=0;do if(V&1){Y=Rb()|0;Z=Q;_=Y}else{k[U>>2]=27560;Y=j+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,U|0,f|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(f);Yua(Y);Ava(U);Z=aa;_=$;break}Yua(f);B=0;$=Ia(40,j|0,125582,8)|0;aa=B;B=0;a:do if((((!(aa&1)?(B=0,ba=ya(427,d|0)|0,ca=B,B=0,!(ca&1)):0)?(ca=Lta(ba)|0,B=0,da=Ia(40,$|0,ba|0,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Ia(40,da|0,144645,14)|0,da=B,B=0,!(da&1)):0)?(B=0,Xa(239,ca|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,l|0,125033,80);da=B;B=0;do if(!(da&1)){B=0;eb(502,m|0,138252,9);ba=B;B=0;if(ba&1){ba=Rb()|0;ea=Q;Yua(l);fa=ea;ga=ba;break}B=0;wa(510,n|0,U|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ha=Q;ia=ba;ja=1}else{B=0;ua(163,ca|0,l|0,m|0,1080,n|0);ba=B;B=0;if(ba&1)ka=1;else{B=0;eb(503,ca|0,1240,229);B=0;ka=0}ba=Rb()|0;ea=Q;Yua(n);ha=ea;ia=ba;ja=ka}Yua(m);Yua(l);if(ja){fa=ha;ga=ia}else{la=ha;ma=ia;break a}}else{ba=Rb()|0;fa=Q;ga=ba}while(0);zb(ca|0);la=fa;ma=ga}else na=22;while(0);if((na|0)==22){$=Rb()|0;la=Q;ma=$}k[j>>2]=27468;k[T>>2]=27488;k[U>>2]=27560;Yua(Y);Ava(U);vva(T);oa=la;pa=ma;Qb(pa|0)}while(0);W=Z;X=_;vva(T);Qb(X|0)}}b:do if((k[i>>2]|0)>0){X=0;c:while(1){switch(k[(k[h>>2]|0)+(X<<2)>>2]|0){case 660:case 662:case 661:case 663:case 658:break;case 696:{A6(0,c,b,e);break}case 694:{B6(0,c,b,e);break}case 695:{C6(0,c,b,e);break}default:{qa=X;break c}}X=X+1|0;if((X|0)>=(k[i>>2]|0))break b}X=o+56|0;Y=o+4|0;k[o>>2]=27524;k[X>>2]=27544;B=0;wa(508,o+56|0,Y|0);T=B;B=0;if(T&1){T=Rb()|0;ra=Q;sa=T;vva(X);Qb(sa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[X>>2]=27488;B=0;va(448,Y|0);T=B;B=0;do if(T&1){_=Rb()|0;ta=Q;xa=_}else{k[Y>>2]=27560;_=o+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,Y|0,f|0);Z=B;B=0;if(Z&1){Z=Rb()|0;W=Q;Yua(f);Yua(_);Ava(Y);ta=W;xa=Z;break}Yua(f);B=0;Z=Ia(40,o|0,125591,9)|0;W=B;B=0;d:do if((((!(W&1)?(B=0,ma=ya(427,k[(k[h>>2]|0)+(qa<<2)>>2]|0)|0,la=B,B=0,!(la&1)):0)?(la=Lta(ma)|0,B=0,U=Ia(40,Z|0,ma|0,la|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,U|0,146481,18)|0,U=B,B=0,!(U&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,p|0,125033,80);U=B;B=0;do if(!(U&1)){B=0;eb(502,q|0,138252,9);ma=B;B=0;if(ma&1){ma=Rb()|0;j=Q;Yua(p);za=j;Aa=ma;break}B=0;wa(510,s|0,Y|0);ma=B;B=0;if(ma&1){ma=Rb()|0;Ba=1;Ca=Q;Da=ma}else{B=0;ua(163,la|0,p|0,q|0,1093,s|0);ma=B;B=0;if(ma&1)Ea=1;else{B=0;eb(503,la|0,1240,229);B=0;Ea=0}ma=Rb()|0;j=Q;Yua(s);Ba=Ea;Ca=j;Da=ma}Yua(q);Yua(p);if(Ba){za=Ca;Aa=Da}else{Fa=Ca;Ga=Da;break d}}else{ma=Rb()|0;za=Q;Aa=ma}while(0);zb(la|0);Fa=za;Ga=Aa}else na=52;while(0);if((na|0)==52){Z=Rb()|0;Fa=Q;Ga=Z}k[o>>2]=27468;k[X>>2]=27488;k[Y>>2]=27560;Yua(_);Ava(Y);vva(X);oa=Fa;pa=Ga;Qb(pa|0)}while(0);ra=ta;sa=xa;vva(X);Qb(sa|0)}while(0);e:do switch(d|0){case 105:{switch(k[g>>2]|0){case 534:{break e;break}case 536:{D6(0,c,b,e);break e;break}case 539:{D6(0,c,b,e);break e;break}case 540:{E6(0,c,b,e);break e;break}case 542:{F6(0,c,b,e);break e;break}default:{sa=t+56|0;xa=t+4|0;k[t>>2]=27524;k[sa>>2]=27544;B=0;wa(508,t+56|0,xa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Ha=Q;Ja=ta;vva(sa);Qb(Ja|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[sa>>2]=27488;B=0;va(448,xa|0);ta=B;B=0;do if(ta&1){ra=Rb()|0;Ka=Q;La=ra}else{k[xa>>2]=27560;ra=t+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[t+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,xa|0,f|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Fa=Q;Yua(f);Yua(ra);Ava(xa);Ka=Fa;La=Ga;break}Yua(f);B=0;Ga=Ia(40,t|0,128699,14)|0;Fa=B;B=0;f:do if((((!(Fa&1)?(B=0,o=ya(427,k[g>>2]|0)|0,Aa=B,B=0,!(Aa&1)):0)?(Aa=Lta(o)|0,B=0,za=Ia(40,Ga|0,o|0,Aa|0)|0,Aa=B,B=0,!(Aa&1)):0)?(B=0,Aa=Ia(40,za|0,146481,18)|0,za=B,B=0,!(za&1)):0)?(B=0,Xa(239,Aa|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,u|0,125033,80);za=B;B=0;do if(!(za&1)){B=0;eb(502,v|0,138252,9);o=B;B=0;if(o&1){o=Rb()|0;Da=Q;Yua(u);Ma=Da;Na=o;break}B=0;wa(510,w|0,xa|0);o=B;B=0;if(o&1){o=Rb()|0;Oa=1;Pa=Q;Qa=o}else{B=0;ua(163,Aa|0,u|0,v|0,1105,w|0);o=B;B=0;if(o&1)Ra=1;else{B=0;eb(503,Aa|0,1240,229);B=0;Ra=0}o=Rb()|0;Da=Q;Yua(w);Oa=Ra;Pa=Da;Qa=o}Yua(v);Yua(u);if(Oa){Ma=Pa;Na=Qa}else{Sa=Pa;Ta=Qa;break f}}else{o=Rb()|0;Ma=Q;Na=o}while(0);zb(Aa|0);Sa=Ma;Ta=Na}else na=85;while(0);if((na|0)==85){Ga=Rb()|0;Sa=Q;Ta=Ga}k[t>>2]=27468;k[sa>>2]=27488;k[xa>>2]=27560;Yua(ra);Ava(xa);vva(sa);oa=Sa;pa=Ta;Qb(pa|0)}while(0);Ha=Ka;Ja=La;vva(sa);Qb(Ja|0)}}break}case 104:{switch(k[g>>2]|0){case 534:{break e;break}case 536:{G6(0,c,b,e);break e;break}case 539:{D6(0,c,b,e);break e;break}case 540:{H6(0,c,b,e);break e;break}case 542:{I6(0,c,b,e);break e;break}default:{xa=x+56|0;ta=x+4|0;k[x>>2]=27524;k[xa>>2]=27544;B=0;wa(508,x+56|0,ta|0);X=B;B=0;if(X&1){X=Rb()|0;Ua=Q;Va=X;vva(xa);Qb(Va|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[xa>>2]=27488;B=0;va(448,ta|0);X=B;B=0;do if(X&1){Ga=Rb()|0;Wa=Q;Ya=Ga}else{k[ta>>2]=27560;Ga=x+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[x+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ta|0,f|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;_=Q;Yua(f);Yua(Ga);Ava(ta);Wa=_;Ya=Fa;break}Yua(f);B=0;Fa=Ia(40,x|0,128699,14)|0;_=B;B=0;g:do if((((!(_&1)?(B=0,za=ya(427,k[g>>2]|0)|0,la=B,B=0,!(la&1)):0)?(la=Lta(za)|0,B=0,o=Ia(40,Fa|0,za|0,la|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,o|0,146481,18)|0,o=B,B=0,!(o&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,y|0,125033,80);o=B;B=0;do if(!(o&1)){B=0;eb(502,z|0,138252,9);za=B;B=0;if(za&1){za=Rb()|0;Da=Q;Yua(y);Za=Da;_a=za;break}B=0;wa(510,A|0,ta|0);za=B;B=0;if(za&1){za=Rb()|0;$a=Q;ab=1;bb=za}else{B=0;ua(163,la|0,y|0,z|0,1115,A|0);za=B;B=0;if(za&1)cb=1;else{B=0;eb(503,la|0,1240,229);B=0;cb=0}za=Rb()|0;Da=Q;Yua(A);$a=Da;ab=cb;bb=za}Yua(z);Yua(y);if(ab){Za=$a;_a=bb}else{db=$a;fb=bb;break g}}else{za=Rb()|0;Za=Q;_a=za}while(0);zb(la|0);db=Za;fb=_a}else na=116;while(0);if((na|0)==116){Fa=Rb()|0;db=Q;fb=Fa}k[x>>2]=27468;k[xa>>2]=27488;k[ta>>2]=27560;Yua(Ga);Ava(ta);vva(xa);oa=db;pa=fb;Qb(pa|0)}while(0);Ua=Wa;Va=Ya;vva(xa);Qb(Va|0)}}break}case 215:{switch(k[g>>2]|0){case 534:{break e;break}case 536:{J6(0,c,b,e);break e;break}case 539:{J6(0,c,b,e);break e;break}case 540:{J6(0,c,b,e);break e;break}case 542:{J6(0,c,b,e);break e;break}default:{ta=C+56|0;X=C+4|0;k[C>>2]=27524;k[ta>>2]=27544;B=0;wa(508,C+56|0,X|0);sa=B;B=0;if(sa&1){sa=Rb()|0;gb=Q;hb=sa;vva(ta);Qb(hb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[ta>>2]=27488;B=0;va(448,X|0);sa=B;B=0;do if(sa&1){Fa=Rb()|0;ib=Q;jb=Fa}else{k[X>>2]=27560;Fa=C+36|0;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[C+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,X|0,f|0);_=B;B=0;if(_&1){_=Rb()|0;ra=Q;Yua(f);Yua(Fa);Ava(X);ib=ra;jb=_;break}Yua(f);B=0;_=Ia(40,C|0,128699,14)|0;ra=B;B=0;h:do if((((!(ra&1)?(B=0,o=ya(427,k[g>>2]|0)|0,Aa=B,B=0,!(Aa&1)):0)?(Aa=Lta(o)|0,B=0,za=Ia(40,_|0,o|0,Aa|0)|0,Aa=B,B=0,!(Aa&1)):0)?(B=0,Aa=Ia(40,za|0,146481,18)|0,za=B,B=0,!(za&1)):0)?(B=0,Xa(239,Aa|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,D|0,125033,80);za=B;B=0;do if(!(za&1)){B=0;eb(502,E|0,138252,9);o=B;B=0;if(o&1){o=Rb()|0;Da=Q;Yua(D);kb=Da;lb=o;break}B=0;wa(510,F|0,X|0);o=B;B=0;if(o&1){o=Rb()|0;mb=1;nb=Q;ob=o}else{B=0;ua(163,Aa|0,D|0,E|0,1125,F|0);o=B;B=0;if(o&1)pb=1;else{B=0;eb(503,Aa|0,1240,229);B=0;pb=0}o=Rb()|0;Da=Q;Yua(F);mb=pb;nb=Da;ob=o}Yua(E);Yua(D);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break h}}else{o=Rb()|0;kb=Q;lb=o}while(0);zb(Aa|0);qb=kb;rb=lb}else na=147;while(0);if((na|0)==147){_=Rb()|0;qb=Q;rb=_}k[C>>2]=27468;k[ta>>2]=27488;k[X>>2]=27560;Yua(Fa);Ava(X);vva(ta);oa=qb;pa=rb;Qb(pa|0)}while(0);gb=ib;hb=jb;vva(ta);Qb(hb|0)}}break}case 214:{switch(k[g>>2]|0){case 534:{break e;break}case 536:{K6(0,c,b,e);break e;break}case 540:{L6(0,c,b,e);break e;break}case 542:{L6(0,c,b,e);break e;break}default:{X=G+56|0;sa=G+4|0;k[G>>2]=27524;k[X>>2]=27544;B=0;wa(508,G+56|0,sa|0);xa=B;B=0;if(xa&1){xa=Rb()|0;sb=Q;tb=xa;vva(X);Qb(tb|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[X>>2]=27488;B=0;va(448,sa|0);xa=B;B=0;do if(xa&1){_=Rb()|0;ub=Q;vb=_}else{k[sa>>2]=27560;_=G+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[G+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,sa|0,f|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ga=Q;Yua(f);Yua(_);Ava(sa);ub=Ga;vb=ra;break}Yua(f);B=0;ra=Ia(40,G|0,128699,14)|0;Ga=B;B=0;i:do if((((!(Ga&1)?(B=0,za=ya(427,k[g>>2]|0)|0,la=B,B=0,!(la&1)):0)?(la=Lta(za)|0,B=0,o=Ia(40,ra|0,za|0,la|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,o|0,146481,18)|0,o=B,B=0,!(o&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,H|0,125033,80);o=B;B=0;do if(!(o&1)){B=0;eb(502,I|0,138252,9);za=B;B=0;if(za&1){za=Rb()|0;Da=Q;Yua(H);wb=Da;xb=za;break}B=0;wa(510,J|0,sa|0);za=B;B=0;if(za&1){za=Rb()|0;yb=1;Bb=Q;Cb=za}else{B=0;ua(163,la|0,H|0,I|0,1134,J|0);za=B;B=0;if(za&1)Db=1;else{B=0;eb(503,la|0,1240,229);B=0;Db=0}za=Rb()|0;Da=Q;Yua(J);yb=Db;Bb=Da;Cb=za}Yua(I);Yua(H);if(yb){wb=Bb;xb=Cb}else{Eb=Bb;Fb=Cb;break i}}else{za=Rb()|0;wb=Q;xb=za}while(0);zb(la|0);Eb=wb;Fb=xb}else na=177;while(0);if((na|0)==177){ra=Rb()|0;Eb=Q;Fb=ra}k[G>>2]=27468;k[X>>2]=27488;k[sa>>2]=27560;Yua(_);Ava(sa);vva(X);oa=Eb;pa=Fb;Qb(pa|0)}while(0);sb=ub;tb=vb;vva(X);Qb(tb|0)}}break}case 227:{switch(k[g>>2]|0){case 534:{break e;break}case 536:{M6(0,c,b,e);break e;break}default:{}}sa=K+56|0;xa=K+4|0;k[K>>2]=27524;k[sa>>2]=27544;B=0;wa(508,K+56|0,xa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Gb=Q;Hb=ta;vva(sa);Qb(Hb|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[sa>>2]=27488;B=0;va(448,xa|0);ta=B;B=0;do if(ta&1){ra=Rb()|0;Ib=Q;Jb=ra}else{k[xa>>2]=27560;ra=K+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[K+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,xa|0,f|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Fa=Q;Yua(f);Yua(ra);Ava(xa);Ib=Fa;Jb=Ga;break}Yua(f);B=0;Ga=Ia(40,K|0,128699,14)|0;Fa=B;B=0;j:do if((((!(Fa&1)?(B=0,o=ya(427,k[g>>2]|0)|0,Aa=B,B=0,!(Aa&1)):0)?(Aa=Lta(o)|0,B=0,za=Ia(40,Ga|0,o|0,Aa|0)|0,Aa=B,B=0,!(Aa&1)):0)?(B=0,Aa=Ia(40,za|0,146481,18)|0,za=B,B=0,!(za&1)):0)?(B=0,Xa(239,Aa|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,L|0,125033,80);za=B;B=0;do if(!(za&1)){B=0;eb(502,M|0,138252,9);o=B;B=0;if(o&1){o=Rb()|0;Da=Q;Yua(L);Kb=Da;Lb=o;break}B=0;wa(510,N|0,xa|0);o=B;B=0;if(o&1){o=Rb()|0;Mb=1;Nb=Q;Ob=o}else{B=0;ua(163,Aa|0,L|0,M|0,1141,N|0);o=B;B=0;if(o&1)Pb=1;else{B=0;eb(503,Aa|0,1240,229);B=0;Pb=0}o=Rb()|0;Da=Q;Yua(N);Mb=Pb;Nb=Da;Ob=o}Yua(M);Yua(L);if(Mb){Kb=Nb;Lb=Ob}else{Sb=Nb;Tb=Ob;break j}}else{o=Rb()|0;Kb=Q;Lb=o}while(0);zb(Aa|0);Sb=Kb;Tb=Lb}else na=205;while(0);if((na|0)==205){Ga=Rb()|0;Sb=Q;Tb=Ga}k[K>>2]=27468;k[sa>>2]=27488;k[xa>>2]=27560;Yua(ra);Ava(xa);vva(sa);oa=Sb;pa=Tb;Qb(pa|0)}while(0);Gb=Ib;Hb=Jb;vva(sa);Qb(Hb|0);break}default:{xa=O+56|0;ta=O+4|0;k[O>>2]=27524;k[xa>>2]=27544;B=0;wa(508,O+56|0,ta|0);X=B;B=0;if(X&1){X=Rb()|0;Ub=Q;Vb=X;vva(xa);Qb(Vb|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[xa>>2]=27488;B=0;va(448,ta|0);X=B;B=0;do if(X&1){Ga=Rb()|0;Wb=Q;Xb=Ga}else{k[ta>>2]=27560;Ga=O+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[O+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ta|0,f|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;_=Q;Yua(f);Yua(Ga);Ava(ta);Wb=_;Xb=Fa;break}Yua(f);B=0;Fa=Ia(40,O|0,125227,32)|0;_=B;B=0;k:do if(((!(_&1)?(B=0,za=ya(427,d|0)|0,la=B,B=0,!(la&1)):0)?(la=Lta(za)|0,B=0,o=Ia(40,Fa|0,za|0,la|0)|0,la=B,B=0,!(la&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,P|0,125033,80);la=B;B=0;do if(!(la&1)){B=0;eb(502,R|0,138252,9);za=B;B=0;if(za&1){za=Rb()|0;Da=Q;Yua(P);Yb=Da;Zb=za;break}B=0;wa(510,S|0,ta|0);za=B;B=0;if(za&1){za=Rb()|0;_b=1;$b=Q;ac=za}else{B=0;ua(163,o|0,P|0,R|0,1144,S|0);za=B;B=0;if(za&1)bc=1;else{B=0;eb(503,o|0,1240,229);B=0;bc=0}za=Rb()|0;Da=Q;Yua(S);_b=bc;$b=Da;ac=za}Yua(R);Yua(P);if(_b){Yb=$b;Zb=ac}else{cc=$b;dc=ac;break k}}else{za=Rb()|0;Yb=Q;Zb=za}while(0);zb(o|0);cc=Yb;dc=Zb}else na=230;while(0);if((na|0)==230){Fa=Rb()|0;cc=Q;dc=Fa}k[O>>2]=27468;k[xa>>2]=27488;k[ta>>2]=27560;Yua(Ga);Ava(ta);vva(xa);oa=cc;pa=dc;Qb(pa|0)}while(0);Ub=Wb;Vb=Xb;vva(xa);Qb(Vb|0)}}while(0);Vb=k[h>>2]|0;if(Vb)Tqa(Vb);r=a;return}function A6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0;a=r;r=r+224|0;e=a+160|0;f=a+212|0;g=a+24|0;h=a+200|0;i=a+188|0;j=a+176|0;l=a;m=a+172|0;if(_p(b)|0){r=a;return}cp(b,f,298);switch(k[f>>2]|0){case 300:{n=b;o=2;q=33;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){n=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;o=1;q=33}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){n=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;o=2;q=33}break}default:{b=g+56|0;s=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(b);Qb(v|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=g+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(e);Yua(w);Ava(s);x=A;y=z;break}Yua(e);B=0;z=Ia(40,g|0,144639,5)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,k[f>>2]|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,z|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,h|0,125033,80);D=B;B=0;do if(!(D&1)){B=0;eb(502,i|0,125260,21);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(h);E=A;F=z;break}B=0;wa(510,j|0,s|0);z=B;B=0;if(z&1){z=Rb()|0;G=z;H=Q;I=1}else{B=0;ua(163,C|0,h|0,i|0,1580,j|0);z=B;B=0;if(z&1)J=1;else{B=0;eb(503,C|0,1240,229);B=0;J=0}z=Rb()|0;A=Q;Yua(j);G=z;H=A;I=J}Yua(i);Yua(h);if(I){E=G;F=H}else{K=G;L=H;k[g>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(b);Qb(K|0)}}else{A=Rb()|0;E=A;F=Q}while(0);zb(C|0);K=E;L=F;k[g>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(b);Qb(K|0)}D=Rb()|0;K=D;L=Q;k[g>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(b);Qb(K|0)}while(0);u=x;v=y;vva(b);Qb(v|0)}}if((q|0)==33){k[m>>2]=0;q=Hc[k[(k[n>>2]|0)+172>>2]&511](n)|0;v=q<<1;b=Rqa(v>>>0>536870911?-1:v<<3)|0;v=Rqa(q>>>0>536870911?-1:q<<3)|0;if(q)WEa(v|0,0,q<<3|0)|0;y=Rqa(q>>>0>1073741823?-1:q<<2)|0;Uo(n,m);Mp(n,y,d,0);d=Wo(n,105)|0;x=Wo(n,179)|0;u=ed[k[(k[n>>2]|0)+308>>2]&511](n,2)|0;K=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;if((K|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){s=(q|0)>0;L=(o|0)==2;o=u+8|0;F=l+8|0;E=K;do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,E);rd[k[(k[n>>2]|0)+260>>2]&511](n,e,k[m>>2]|0,u);rd[k[(k[n>>2]|0)+360>>2]&511](n,b,k[m>>2]|0,u);rd[k[(k[x>>2]|0)+56>>2]&511](x,g,u,696);rd[k[(k[d>>2]|0)+60>>2]&511](d,l,k[m>>2]|0,u);if(s){M=+p[g>>3];N=+p[e>>3];O=+p[l>>3];if(L){P=+p[F>>3];R=M*N;K=0;do{H=v+(K<<3)|0;p[H>>3]=+p[H>>3]-R*+p[o>>3]*(+p[b+(K<<3)>>3]*O+ +p[b+(K+q<<3)>>3]*P);K=K+1|0}while((K|0)!=(q|0))}else{P=M*N;K=0;do{w=v+(K<<3)|0;p[w>>3]=+p[w>>3]-P*+p[o>>3]*+p[b+(K<<3)>>3]*O;K=K+1|0}while((K|0)!=(q|0))}}E=E+1|0}while((E|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}if(k[c>>2]|0){E=k[k[c+4>>2]>>2]|0;Dc[k[(k[E>>2]|0)+16>>2]&255](E,q,y,v,1)}q=k[m>>2]|0;if(q)Tqa(q);k[m>>2]=0;Tqa(b);Tqa(v);Tqa(y);if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);if((k[f>>2]|0)!=300?(ap(n),(n|0)!=0):0)Ec[k[(k[n>>2]|0)+4>>2]&1023](n)}r=a;return}function B6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0;a=r;r=r+224|0;e=a+160|0;f=a+212|0;g=a+24|0;h=a+200|0;i=a+188|0;j=a+176|0;l=a;m=a+172|0;cp(b,f,298);a:do switch(k[f>>2]|0){case 300:{n=b;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){n=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{r=a;return}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){n=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{r=a;return}break}default:{o=g+56|0;q=g+4|0;k[g>>2]=27524;k[o>>2]=27544;B=0;wa(508,g+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);Yua(v);Ava(q);w=z;x=y;break}Yua(e);B=0;y=Ia(40,g|0,144639,5)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,k[f>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,y|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,h|0,125033,80);C=B;B=0;do if(!(C&1)){B=0;eb(502,i|0,125282,21);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(h);D=z;E=y;break}B=0;wa(510,j|0,q|0);y=B;B=0;if(y&1){y=Rb()|0;F=y;G=Q;H=1}else{B=0;ua(163,A|0,h|0,i|0,1175,j|0);y=B;B=0;if(y&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}y=Rb()|0;z=Q;Yua(j);F=y;G=z;H=I}Yua(i);Yua(h);if(H){D=F;E=G}else{J=F;K=G;k[g>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}}else{z=Rb()|0;D=z;E=Q}while(0);zb(A|0);J=D;K=E;k[g>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}C=Rb()|0;J=C;K=Q;k[g>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Qb(J|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}}while(0);k[m>>2]=0;u=Hc[k[(k[n>>2]|0)+172>>2]&511](n)|0;x=u<<1;w=Rqa(x>>>0>536870911?-1:x<<3)|0;x=Rqa(u>>>0>536870911?-1:u<<3)|0;if(u)WEa(x|0,0,u<<3|0)|0;t=Rqa(u>>>0>1073741823?-1:u<<2)|0;Uo(n,m);Mp(n,t,d,0);d=Wo(n,215)|0;J=Wo(n,179)|0;K=ed[k[(k[n>>2]|0)+308>>2]&511](n,2)|0;E=Hc[k[(k[K>>2]|0)+8>>2]&511](K)|0;if((E|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0)){D=(u|0)>0;G=K+8|0;F=l+8|0;H=E;do{Fc[k[(k[K>>2]|0)+24>>2]&1023](K,H);rd[k[(k[n>>2]|0)+260>>2]&511](n,e,k[m>>2]|0,K);rd[k[(k[n>>2]|0)+360>>2]&511](n,w,k[m>>2]|0,K);rd[k[(k[J>>2]|0)+56>>2]&511](J,g,K,694);rd[k[(k[d>>2]|0)+60>>2]&511](d,l,k[m>>2]|0,K);if(D){L=+p[g>>3];M=+p[e>>3];N=+p[l>>3];if((k[f>>2]|0)==301){O=L*M;E=0;do{h=x+(E<<3)|0;p[h>>3]=+p[h>>3]-O*+p[G>>3]*+p[w+(E<<3)>>3]*N;E=E+1|0}while((E|0)!=(u|0))}else{O=+p[F>>3];P=L*M;E=0;do{o=x+(E<<3)|0;p[o>>3]=+p[o>>3]-P*+p[G>>3]*(+p[w+(E<<3)>>3]*N+ +p[w+(E+u<<3)>>3]*O);E=E+1|0}while((E|0)!=(u|0))}}H=H+1|0}while((H|0)<(Hc[k[(k[K>>2]|0)+12>>2]&511](K)|0))}if(k[c>>2]|0){H=k[k[c+4>>2]>>2]|0;Dc[k[(k[H>>2]|0)+16>>2]&255](H,u,t,x,1)}u=k[m>>2]|0;if(u)Tqa(u);k[m>>2]=0;Tqa(w);Tqa(x);Tqa(t);if(K)Ec[k[(k[K>>2]|0)+4>>2]&1023](K);if((k[f>>2]|0)!=300?(ap(n),(n|0)!=0):0)Ec[k[(k[n>>2]|0)+4>>2]&1023](n);r=a;return}function C6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+224|0;e=a+160|0;f=a+212|0;g=a+24|0;h=a+200|0;i=a+188|0;j=a+176|0;l=a;m=a+172|0;cp(b,f,298);if(((k[f>>2]|0)+-300|0)>>>0<3){k[m>>2]=0;n=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;o=n*3|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;o=Rqa(n>>>0>536870911?-1:n<<3)|0;if(n)WEa(o|0,0,n<<3|0)|0;s=Rqa(n>>>0>1073741823?-1:n<<2)|0;Uo(b,m);Mp(b,s,d,0);d=Wo(b,214)|0;t=Wo(b,179)|0;u=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;v=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;if((v|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){w=(n|0)>0;x=u+8|0;y=l+8|0;z=n<<1;A=l+16|0;C=v;do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,C);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[m>>2]|0,u);rd[k[(k[b>>2]|0)+360>>2]&511](b,q,k[m>>2]|0,u);rd[k[(k[t>>2]|0)+56>>2]&511](t,g,u,695);rd[k[(k[d>>2]|0)+60>>2]&511](d,l,k[m>>2]|0,u);if(w){D=+p[g>>3];E=+p[e>>3];F=+p[l>>3];G=+p[y>>3];if((k[f>>2]|0)==301){H=+p[A>>3];I=D*E;v=0;do{J=o+(v<<3)|0;p[J>>3]=+p[J>>3]-I*+p[x>>3]*(+p[q+(v<<3)>>3]*F+ +p[q+(v+n<<3)>>3]*G+ +p[q+(v+z<<3)>>3]*H);v=v+1|0}while((v|0)!=(n|0))}else{H=D*E;v=0;do{J=o+(v<<3)|0;p[J>>3]=+p[J>>3]-H*+p[x>>3]*(+p[q+(v<<3)>>3]*F+ +p[q+(v+n<<3)>>3]*G);v=v+1|0}while((v|0)!=(n|0))}}C=C+1|0}while((C|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}if(k[c>>2]|0){C=k[k[c+4>>2]>>2]|0;Dc[k[(k[C>>2]|0)+16>>2]&255](C,n,s,o,1)}n=k[m>>2]|0;if(n)Tqa(n);k[m>>2]=0;Tqa(q);Tqa(o);Tqa(s);if(!u){r=a;return}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);r=a;return}a=g+56|0;u=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,u|0);s=B;B=0;if(s&1){s=Rb()|0;K=Q;L=s;vva(a);Qb(L|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,u|0);s=B;B=0;do if(s&1){o=Rb()|0;M=Q;N=o}else{k[u>>2]=27560;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;m=Q;Yua(e);Yua(o);Ava(u);M=m;N=q;break}Yua(e);B=0;q=Ia(40,g|0,144639,5)|0;m=B;B=0;if((((!(m&1)?(B=0,m=ya(427,k[f>>2]|0)|0,n=B,B=0,!(n&1)):0)?(n=Lta(m)|0,B=0,C=Ia(40,q|0,m|0,n|0)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,125033,80);C=B;B=0;do if(!(C&1)){B=0;eb(502,i|0,125304,18);m=B;B=0;if(m&1){m=Rb()|0;q=Q;Yua(h);O=m;P=q;break}B=0;wa(510,j|0,u|0);q=B;B=0;if(q&1){q=Rb()|0;R=q;S=Q;T=1}else{B=0;ua(163,n|0,h|0,i|0,1342,j|0);q=B;B=0;if(q&1)U=1;else{B=0;eb(503,n|0,1240,229);B=0;U=0}q=Rb()|0;m=Q;Yua(j);R=q;S=m;T=U}Yua(i);Yua(h);if(T){O=R;P=S}else{V=R;W=S;k[g>>2]=27468;k[a>>2]=27488;k[u>>2]=27560;Yua(o);Ava(u);vva(a);Qb(V|0)}}else{m=Rb()|0;O=m;P=Q}while(0);zb(n|0);V=O;W=P;k[g>>2]=27468;k[a>>2]=27488;k[u>>2]=27560;Yua(o);Ava(u);vva(a);Qb(V|0)}C=Rb()|0;V=C;W=Q;k[g>>2]=27468;k[a>>2]=27488;k[u>>2]=27560;Yua(o);Ava(u);vva(a);Qb(V|0)}while(0);K=M;L=N;vva(a);Qb(L|0)}function D6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0;a=r;r=r+256|0;e=a+48|0;f=a+240|0;g=a+104|0;h=a+88|0;i=a+76|0;j=a+64|0;l=a+40|0;m=a+32|0;n=a+24|0;o=a+16|0;q=a+8|0;s=a;t=a+60|0;if(_p(b)|0){r=a;return}cp(b,f,298);switch(k[f>>2]|0){case 300:{u=b;v=2;w=33;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){u=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;v=1;w=33}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){u=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;v=2;w=33}break}default:{b=g+56|0;x=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(b);Qb(A|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=g+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,x|0,e|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(e);Yua(C);Ava(x);D=G;E=F;break}Yua(e);B=0;F=Ia(40,g|0,144639,5)|0;G=B;B=0;a:do if((((!(G&1)?(B=0,H=ya(427,k[f>>2]|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(H)|0,B=0,J=Ia(40,F|0,H|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,J|0,146481,18)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,125033,80);J=B;B=0;do if(!(J&1)){B=0;eb(502,i|0,125323,16);H=B;B=0;if(H&1){H=Rb()|0;K=Q;Yua(h);L=H;M=K;break}B=0;wa(510,j|0,x|0);K=B;B=0;if(K&1){K=Rb()|0;N=K;O=Q;P=1}else{B=0;ua(163,I|0,h|0,i|0,1837,j|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}K=Rb()|0;H=Q;Yua(j);N=K;O=H;P=R}Yua(i);Yua(h);if(P){L=N;M=O}else{S=N;T=O;break a}}else{H=Rb()|0;L=H;M=Q}while(0);zb(I|0);S=L;T=M}else w=25;while(0);if((w|0)==25){F=Rb()|0;S=F;T=Q}k[g>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(b);U=S;V=T;Qb(U|0)}while(0);z=D;A=E;vva(b);Qb(A|0)}}if((w|0)==33){k[t>>2]=0;w=Hc[k[(k[u>>2]|0)+172>>2]&511](u)|0;A=w>>>0>536870911?-1:w<<3;b=Rqa(A)|0;E=Rqa(A)|0;if(w)WEa(E|0,0,w<<3|0)|0;A=Rqa(w>>>0>1073741823?-1:w<<2)|0;D=Qqa(16)|0;B=0;eb(524,D|0,u|0,v|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;Sqa(D);U=v;V=z;Qb(U|0)}Uo(u,t);Mp(u,A,d,0);d=Wo(u,674)|0;U=Wo(u,677)|0;z=Wo(u,638)|0;V=Wo(u,639)|0;v=Wo(u,105)|0;T=ed[k[(k[u>>2]|0)+308>>2]&511](u,4)|0;S=Hc[k[(k[T>>2]|0)+8>>2]&511](T)|0;b:do if((S|0)<(Hc[k[(k[T>>2]|0)+12>>2]&511](T)|0)){x=T+8|0;if((w|0)>0)W=S;else{g=S;while(1){Fc[k[(k[T>>2]|0)+24>>2]&1023](T,g);nd[k[(k[z>>2]|0)+48>>2]&1023](z,q,T);nd[k[(k[V>>2]|0)+48>>2]&1023](V,s,T);nd[k[(k[d>>2]|0)+48>>2]&1023](d,n,T);nd[k[(k[U>>2]|0)+48>>2]&1023](U,o,T);nd[k[(k[v>>2]|0)+48>>2]&1023](v,l,T);cla(D,m,T);rd[k[(k[u>>2]|0)+260>>2]&511](u,e,k[t>>2]|0,T);nd[k[(k[u>>2]|0)+356>>2]&1023](u,b,T);g=g+1|0;if((g|0)>=(Hc[k[(k[T>>2]|0)+12>>2]&511](T)|0))break b}}do{Fc[k[(k[T>>2]|0)+24>>2]&1023](T,W);nd[k[(k[z>>2]|0)+48>>2]&1023](z,q,T);nd[k[(k[V>>2]|0)+48>>2]&1023](V,s,T);nd[k[(k[d>>2]|0)+48>>2]&1023](d,n,T);nd[k[(k[U>>2]|0)+48>>2]&1023](U,o,T);nd[k[(k[v>>2]|0)+48>>2]&1023](v,l,T);cla(D,m,T);rd[k[(k[u>>2]|0)+260>>2]&511](u,e,k[t>>2]|0,T);nd[k[(k[u>>2]|0)+356>>2]&1023](u,b,T);X=+p[e>>3]*(+p[l>>3]*-2.0*+p[m>>3]*(+p[q>>3]*+p[n>>3]+ +p[s>>3]*+p[o>>3]));g=0;do{C=E+(g<<3)|0;p[C>>3]=+p[C>>3]+ +p[b+(g<<3)>>3]*(+p[x>>3]*X);g=g+1|0}while((g|0)!=(w|0));W=W+1|0}while((W|0)<(Hc[k[(k[T>>2]|0)+12>>2]&511](T)|0))}while(0);if(k[c>>2]|0){W=k[k[c+4>>2]>>2]|0;Dc[k[(k[W>>2]|0)+16>>2]&255](W,w,A,E,1)}w=k[t>>2]|0;if(w)Tqa(w);k[t>>2]=0;Tqa(b);Tqa(E);Tqa(A);if(T)Ec[k[(k[T>>2]|0)+4>>2]&1023](T);bla(D);Sqa(D);if((k[f>>2]|0)!=300?(ap(u),(u|0)!=0):0)Ec[k[(k[u>>2]|0)+4>>2]&1023](u)}r=a;return}function E6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0;a=r;r=r+64|0;e=a+48|0;f=a+40|0;g=a+32|0;h=a+24|0;i=a+16|0;j=a+8|0;l=a;m=a+60|0;n=a+56|0;if(_p(b)|0){r=a;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=a;return}k[m>>2]=0;cp(b,n,298);o=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;q=o>>>0>536870911?-1:o<<3;s=Rqa(q)|0;t=Rqa(q)|0;if(o)WEa(t|0,0,o<<3|0)|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;u=(k[n>>2]|0)==301?2:3;v=Qqa(16)|0;B=0;eb(524,v|0,b|0,u|0);u=B;B=0;if(u&1){u=Rb()|0;Sqa(v);Qb(u|0)}Fc[k[(k[b>>2]|0)+188>>2]&1023](b,m);Mp(b,q,d,0);d=Wo(b,674)|0;u=Wo(b,638)|0;w=Wo(b,105)|0;if((k[n>>2]|0)==301){x=0;y=0}else{z=Wo(b,677)|0;x=Wo(b,639)|0;y=z}z=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;A=Hc[k[(k[z>>2]|0)+8>>2]&511](z)|0;if((A|0)<(Hc[k[(k[z>>2]|0)+12>>2]&511](z)|0)){C=(o|0)>0;D=z+8|0;E=A;do{Fc[k[(k[z>>2]|0)+24>>2]&1023](z,E);nd[k[(k[u>>2]|0)+48>>2]&1023](u,j,z);nd[k[(k[d>>2]|0)+48>>2]&1023](d,h,z);if((k[n>>2]|0)!=301){nd[k[(k[x>>2]|0)+48>>2]&1023](x,l,z);nd[k[(k[y>>2]|0)+48>>2]&1023](y,i,z)}nd[k[(k[w>>2]|0)+48>>2]&1023](w,f,z);cla(v,g,z);rd[k[(k[b>>2]|0)+264>>2]&511](b,e,k[m>>2]|0,z);nd[k[(k[b>>2]|0)+356>>2]&1023](b,s,z);if(C){F=+p[f>>3];G=+p[g>>3];H=+p[j>>3];I=+p[h>>3];if((k[n>>2]|0)==301){J=F*-2.0*G*(H*I)*+p[e>>3];A=0;do{K=t+(A<<3)|0;p[K>>3]=+p[K>>3]+J*+p[D>>3]*+p[s+(A<<3)>>3];A=A+1|0}while((A|0)!=(o|0))}else{J=+p[e>>3]*(F*-2.0*G*(H*I+ +p[l>>3]*+p[i>>3]));A=0;do{K=t+(A<<3)|0;p[K>>3]=+p[K>>3]+ +p[s+(A<<3)>>3]*(+p[D>>3]*J);A=A+1|0}while((A|0)!=(o|0))}}E=E+1|0}while((E|0)<(Hc[k[(k[z>>2]|0)+12>>2]&511](z)|0))}if(k[c>>2]|0){E=k[k[c+4>>2]>>2]|0;Dc[k[(k[E>>2]|0)+16>>2]&255](E,o,q,t,1)}o=k[m>>2]|0;if(o)Tqa(o);k[m>>2]=0;Tqa(s);Tqa(t);Tqa(q);if(z)Ec[k[(k[z>>2]|0)+4>>2]&1023](z);bla(v);Sqa(v);r=a;return}function F6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0;a=r;r=r+112|0;e=a+100|0;f=a+88|0;g=a+80|0;h=a+72|0;i=a+48|0;j=a+40|0;l=a+32|0;m=a+24|0;n=a+16|0;o=a+8|0;q=a;s=a+96|0;if(_p(b)|0){r=a;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=a;return}k[s>>2]=0;t=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;u=t>>>0>536870911?-1:t<<3;v=Rqa(u)|0;w=Rqa(u)|0;if(t)WEa(w|0,0,t<<3|0)|0;u=Rqa(t>>>0>1073741823?-1:t<<2)|0;cp(b,e,298);x=(k[e>>2]|0)==301?2:3;y=Qqa(16)|0;B=0;eb(524,y|0,b|0,x|0);x=B;B=0;if(x&1){x=Rb()|0;Sqa(y);Qb(x|0)}Fc[k[(k[b>>2]|0)+188>>2]&1023](b,s);Mp(b,u,d,0);d=Wo(b,674)|0;x=Wo(b,677)|0;z=Wo(b,638)|0;A=Wo(b,639)|0;if((k[e>>2]|0)==301){C=0;D=0}else{E=Wo(b,679)|0;C=Wo(b,640)|0;D=E}E=Wo(b,105)|0;F=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;G=Hc[k[(k[F>>2]|0)+8>>2]&511](F)|0;if((G|0)<(Hc[k[(k[F>>2]|0)+12>>2]&511](F)|0)){H=(t|0)>0;I=F+8|0;J=i+16|0;K=i+8|0;L=G;do{Fc[k[(k[F>>2]|0)+24>>2]&1023](F,L);nd[k[(k[z>>2]|0)+48>>2]&1023](z,n,F);nd[k[(k[A>>2]|0)+48>>2]&1023](A,o,F);nd[k[(k[d>>2]|0)+48>>2]&1023](d,j,F);nd[k[(k[x>>2]|0)+48>>2]&1023](x,l,F);if((k[e>>2]|0)!=301){nd[k[(k[C>>2]|0)+48>>2]&1023](C,q,F);nd[k[(k[D>>2]|0)+48>>2]&1023](D,m,F)}nd[k[(k[E>>2]|0)+48>>2]&1023](E,g,F);cla(y,h,F);nd[k[(k[b>>2]|0)+380>>2]&1023](b,i,k[s>>2]|0);rd[k[(k[b>>2]|0)+264>>2]&511](b,f,k[s>>2]|0,F);nd[k[(k[b>>2]|0)+356>>2]&1023](b,v,F);if((k[e>>2]|0)==301){if(H){M=+p[g>>3];N=+p[h>>3];O=+p[f>>3]*(+p[n>>3]*-2.0*M*N*+p[j>>3]-+p[l>>3]*(N*(M*(+p[o>>3]*2.0))));G=0;do{P=w+(G<<3)|0;p[P>>3]=+p[P>>3]+ +p[v+(G<<3)>>3]*(+p[I>>3]*O);G=G+1|0}while((G|0)!=(t|0))}}else if(H){O=+p[j>>3];M=+p[m>>3];N=+p[i>>3];Q=+p[J>>3];R=+p[l>>3];S=+p[K>>3];T=+p[g>>3]*2.0*+p[h>>3];U=+p[f>>3]*(-(+p[n>>3]*(T*(O-M*N*Q)))-+p[o>>3]*(T*(R-Q*(M*S)))-+p[q>>3]*(T*(-(O*N*Q)-Q*(R*S))));G=0;do{P=w+(G<<3)|0;p[P>>3]=+p[P>>3]+ +p[v+(G<<3)>>3]*(+p[I>>3]*U);G=G+1|0}while((G|0)!=(t|0))}L=L+1|0}while((L|0)<(Hc[k[(k[F>>2]|0)+12>>2]&511](F)|0))}if(k[c>>2]|0){L=k[k[c+4>>2]>>2]|0;Dc[k[(k[L>>2]|0)+16>>2]&255](L,t,u,w,1)}t=k[s>>2]|0;if(t)Tqa(t);k[s>>2]=0;Tqa(v);Tqa(w);Tqa(u);if(F)Ec[k[(k[F>>2]|0)+4>>2]&1023](F);bla(y);Sqa(y);r=a;return}function G6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;a=r;r=r+272|0;e=a+208|0;f=a+260|0;g=a+72|0;h=a+248|0;i=a+236|0;j=a+224|0;l=a+64|0;m=a+56|0;n=a+48|0;o=a+40|0;q=a+32|0;s=a+220|0;t=a+24|0;u=a+16|0;v=a+8|0;w=a;if(_p(b)|0){r=a;return}cp(b,f,298);switch(k[f>>2]|0){case 300:{x=b;y=2;z=33;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){x=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;y=1;z=33}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){x=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;y=2;z=33}break}default:{b=g+56|0;A=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,A|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;E=C;vva(b);Qb(E|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,A|0);C=B;B=0;do if(C&1){F=Rb()|0;G=Q;H=F}else{k[A>>2]=27560;F=g+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,A|0,e|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(e);Yua(F);Ava(A);G=J;H=I;break}Yua(e);B=0;I=Ia(40,g|0,144639,5)|0;J=B;B=0;a:do if((((!(J&1)?(B=0,K=ya(427,k[f>>2]|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(K)|0,B=0,M=Ia(40,I|0,K|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,M|0,146481,18)|0,M=B,B=0,!(M&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,h|0,125033,80);M=B;B=0;do if(!(M&1)){B=0;eb(502,i|0,125340,21);K=B;B=0;if(K&1){K=Rb()|0;N=Q;Yua(h);O=K;P=N;break}B=0;wa(510,j|0,A|0);N=B;B=0;if(N&1){N=Rb()|0;R=N;S=Q;T=1}else{B=0;ua(163,L|0,h|0,i|0,2099,j|0);N=B;B=0;if(N&1)U=1;else{B=0;eb(503,L|0,1240,229);B=0;U=0}N=Rb()|0;K=Q;Yua(j);R=N;S=K;T=U}Yua(i);Yua(h);if(T){O=R;P=S}else{V=R;W=S;break a}}else{K=Rb()|0;O=K;P=Q}while(0);zb(L|0);V=O;W=P}else z=25;while(0);if((z|0)==25){I=Rb()|0;V=I;W=Q}k[g>>2]=27468;k[b>>2]=27488;k[A>>2]=27560;Yua(F);Ava(A);vva(b);X=V;Y=W;Qb(X|0)}while(0);D=G;E=H;vva(b);Qb(E|0)}}if((z|0)==33){k[s>>2]=0;z=Hc[k[(k[x>>2]|0)+172>>2]&511](x)|0;E=z>>>0>536870911?-1:z<<3;b=Rqa(E)|0;H=Rqa(E)|0;if(z)WEa(H|0,0,z<<3|0)|0;E=Rqa(z>>>0>1073741823?-1:z<<2)|0;G=Qqa(16)|0;B=0;eb(524,G|0,x|0,y|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;Sqa(G);X=y;Y=D;Qb(X|0)}Uo(x,s);Mp(x,E,d,0);d=Wo(x,674)|0;X=Wo(x,677)|0;D=Wo(x,638)|0;Y=Wo(x,639)|0;y=Wo(x,108)|0;W=Wo(x,110)|0;V=Wo(x,104)|0;A=Wo(x,217)|0;P=Wo(x,115)|0;O=ed[k[(k[x>>2]|0)+308>>2]&511](x,4)|0;S=Hc[k[(k[O>>2]|0)+8>>2]&511](O)|0;if((S|0)<(Hc[k[(k[O>>2]|0)+12>>2]&511](O)|0)){R=(z|0)>0;T=O+8|0;h=S;do{Fc[k[(k[O>>2]|0)+24>>2]&1023](O,h);nd[k[(k[D>>2]|0)+48>>2]&1023](D,o,O);nd[k[(k[Y>>2]|0)+48>>2]&1023](Y,q,O);nd[k[(k[d>>2]|0)+48>>2]&1023](d,m,O);nd[k[(k[X>>2]|0)+48>>2]&1023](X,n,O);cla(G,l,O);rd[k[(k[x>>2]|0)+260>>2]&511](x,e,k[s>>2]|0,O);nd[k[(k[x>>2]|0)+356>>2]&1023](x,b,O);nd[k[(k[y>>2]|0)+48>>2]&1023](y,g,O);nd[k[(k[W>>2]|0)+48>>2]&1023](W,t,O);nd[k[(k[V>>2]|0)+48>>2]&1023](V,u,O);nd[k[(k[P>>2]|0)+48>>2]&1023](P,v,O);nd[k[(k[A>>2]|0)+48>>2]&1023](A,w,O);if(R){Z=+p[e>>3]*(+p[l>>3]*(+p[o>>3]*+p[m>>3]+ +p[q>>3]*+p[n>>3]));S=0;do{i=H+(S<<3)|0;p[i>>3]=+p[i>>3]-+p[b+(S<<3)>>3]*(+p[T>>3]*Z);S=S+1|0}while((S|0)!=(z|0))}h=h+1|0}while((h|0)<(Hc[k[(k[O>>2]|0)+12>>2]&511](O)|0))}if(k[c>>2]|0){h=k[k[c+4>>2]>>2]|0;Dc[k[(k[h>>2]|0)+16>>2]&255](h,z,E,H,1)}z=k[s>>2]|0;if(z)Tqa(z);k[s>>2]=0;Tqa(b);Tqa(H);Tqa(E);if(O)Ec[k[(k[O>>2]|0)+4>>2]&1023](O);bla(G);Sqa(G);if((k[f>>2]|0)!=300?(ap(x),(x|0)!=0):0)Ec[k[(k[x>>2]|0)+4>>2]&1023](x)}r=a;return}function H6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0;a=r;r=r+64|0;e=a+40|0;f=a+32|0;g=a+24|0;h=a+16|0;i=a+8|0;j=a;l=a+52|0;m=a+48|0;if(_p(b)|0){r=a;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=a;return}k[l>>2]=0;cp(b,m,298);n=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;o=n>>>0>536870911?-1:n<<3;q=Rqa(o)|0;s=Rqa(o)|0;if(n)WEa(s|0,0,n<<3|0)|0;o=Rqa(n>>>0>1073741823?-1:n<<2)|0;t=(k[m>>2]|0)==301?2:3;u=Qqa(16)|0;B=0;eb(524,u|0,b|0,t|0);t=B;B=0;if(t&1){t=Rb()|0;Sqa(u);Qb(t|0)}Fc[k[(k[b>>2]|0)+188>>2]&1023](b,l);Mp(b,o,d,0);d=Wo(b,674)|0;t=Wo(b,638)|0;if((k[m>>2]|0)==301){v=0;w=0}else{x=Wo(b,677)|0;v=Wo(b,639)|0;w=x}x=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;y=Hc[k[(k[x>>2]|0)+8>>2]&511](x)|0;if((y|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0)){z=(n|0)>0;A=x+8|0;C=y;do{Fc[k[(k[x>>2]|0)+24>>2]&1023](x,C);nd[k[(k[t>>2]|0)+48>>2]&1023](t,i,x);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,x);if((k[m>>2]|0)!=301){nd[k[(k[v>>2]|0)+48>>2]&1023](v,j,x);nd[k[(k[w>>2]|0)+48>>2]&1023](w,h,x)}cla(u,f,x);rd[k[(k[b>>2]|0)+264>>2]&511](b,e,k[l>>2]|0,x);nd[k[(k[b>>2]|0)+356>>2]&1023](b,q,x);if(z){D=+p[f>>3];E=+p[i>>3];F=+p[g>>3];if((k[m>>2]|0)==301){G=D*(E*F)*+p[e>>3];y=0;do{H=s+(y<<3)|0;p[H>>3]=+p[H>>3]-G*+p[A>>3]*+p[q+(y<<3)>>3];y=y+1|0}while((y|0)!=(n|0))}else{G=D*(E*F+ +p[j>>3]*+p[h>>3])*+p[e>>3];y=0;do{H=s+(y<<3)|0;p[H>>3]=+p[H>>3]-G*+p[A>>3]*+p[q+(y<<3)>>3];y=y+1|0}while((y|0)!=(n|0))}}C=C+1|0}while((C|0)<(Hc[k[(k[x>>2]|0)+12>>2]&511](x)|0))}if(k[c>>2]|0){C=k[k[c+4>>2]>>2]|0;Dc[k[(k[C>>2]|0)+16>>2]&255](C,n,o,s,1)}n=k[l>>2]|0;if(n)Tqa(n);k[l>>2]=0;Tqa(q);Tqa(s);Tqa(o);if(x)Ec[k[(k[x>>2]|0)+4>>2]&1023](x);bla(u);Sqa(u);r=a;return}function I6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0;a=r;r=r+96|0;e=a+92|0;f=a+80|0;g=a+72|0;h=a+48|0;i=a+40|0;j=a+32|0;l=a+24|0;m=a+16|0;n=a+8|0;o=a;q=a+88|0;if(_p(b)|0){r=a;return}if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){r=a;return}k[q>>2]=0;s=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;t=s>>>0>536870911?-1:s<<3;u=Rqa(t)|0;v=Rqa(t)|0;if(s)WEa(v|0,0,s<<3|0)|0;t=Rqa(s>>>0>1073741823?-1:s<<2)|0;cp(b,e,298);w=(k[e>>2]|0)==301?2:3;x=Qqa(16)|0;B=0;eb(524,x|0,b|0,w|0);w=B;B=0;if(w&1){w=Rb()|0;Sqa(x);Qb(w|0)}Fc[k[(k[b>>2]|0)+188>>2]&1023](b,q);Mp(b,t,d,0);d=Wo(b,674)|0;w=Wo(b,677)|0;y=Wo(b,638)|0;z=Wo(b,639)|0;if((k[e>>2]|0)==301){A=0;C=0}else{D=Wo(b,679)|0;A=Wo(b,640)|0;C=D}D=ed[k[(k[b>>2]|0)+324>>2]&511](b,4)|0;E=Hc[k[(k[D>>2]|0)+8>>2]&511](D)|0;if((E|0)<(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0)){F=(s|0)>0;G=D+8|0;H=h+16|0;I=h+8|0;J=E;do{Fc[k[(k[D>>2]|0)+24>>2]&1023](D,J);nd[k[(k[y>>2]|0)+48>>2]&1023](y,m,D);nd[k[(k[z>>2]|0)+48>>2]&1023](z,n,D);nd[k[(k[d>>2]|0)+48>>2]&1023](d,i,D);nd[k[(k[w>>2]|0)+48>>2]&1023](w,j,D);if((k[e>>2]|0)!=301){nd[k[(k[A>>2]|0)+48>>2]&1023](A,o,D);nd[k[(k[C>>2]|0)+48>>2]&1023](C,l,D)}cla(x,g,D);nd[k[(k[b>>2]|0)+380>>2]&1023](b,h,k[q>>2]|0);rd[k[(k[b>>2]|0)+264>>2]&511](b,f,k[q>>2]|0,D);nd[k[(k[b>>2]|0)+356>>2]&1023](b,u,D);if((k[e>>2]|0)==301){if(F){K=+p[g>>3];L=+p[f>>3]*(-(+p[m>>3]*K*+p[i>>3])-K*+p[n>>3]*+p[j>>3]);E=0;do{M=v+(E<<3)|0;p[M>>3]=+p[M>>3]+ +p[u+(E<<3)>>3]*(+p[G>>3]*L);E=E+1|0}while((E|0)!=(s|0))}}else if(F){L=+p[g>>3];K=+p[i>>3];N=+p[l>>3];O=+p[h>>3];P=+p[H>>3];Q=+p[j>>3];R=+p[I>>3];S=+p[f>>3]*(-(+p[m>>3]*(L*(K-N*O*P)))-+p[n>>3]*(L*(Q-P*(N*R)))-+p[o>>3]*(L*(-(K*O*P)-P*(Q*R))));E=0;do{M=v+(E<<3)|0;p[M>>3]=+p[M>>3]+ +p[u+(E<<3)>>3]*(+p[G>>3]*S);E=E+1|0}while((E|0)!=(s|0))}J=J+1|0}while((J|0)<(Hc[k[(k[D>>2]|0)+12>>2]&511](D)|0))}if(k[c>>2]|0){J=k[k[c+4>>2]>>2]|0;Dc[k[(k[J>>2]|0)+16>>2]&255](J,s,t,v,1)}s=k[q>>2]|0;if(s)Tqa(s);k[q>>2]=0;Tqa(u);Tqa(v);Tqa(t);if(D)Ec[k[(k[D>>2]|0)+4>>2]&1023](D);bla(x);Sqa(x);r=a;return}function J6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0;a=r;r=r+304|0;e=a+240|0;f=a+292|0;g=a+104|0;h=a+280|0;i=a+268|0;j=a+256|0;l=a+96|0;m=a+72|0;n=a+48|0;o=a+24|0;q=a;s=a+252|0;cp(b,f,298);a:do switch(k[f>>2]|0){case 300:{t=b;u=2;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=1;break a}else{r=a;return}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=2;break a}else{r=a;return}break}default:{v=g+56|0;w=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);Yua(A);Ava(w);C=F;D=E;break}Yua(e);B=0;E=Ia(40,g|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[f>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,h|0,125033,80);H=B;B=0;do if(!(H&1)){B=0;eb(502,i|0,125362,16);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(h);I=F;J=E;break}B=0;wa(510,j|0,w|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,G|0,h|0,i|0,1263,j|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}E=Rb()|0;F=Q;Yua(j);K=E;L=F;M=N}Yua(i);Yua(h);if(M){I=K;J=L}else{O=K;P=L;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=F;J=Q}while(0);zb(G|0);O=I;P=J;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);k[s>>2]=0;z=Hc[k[(k[t>>2]|0)+172>>2]&511](t)|0;D=z>>>0>536870911?-1:z<<3;C=Rqa(D)|0;y=Rqa(D)|0;if(z)WEa(y|0,0,z<<3|0)|0;D=Rqa(z>>>0>1073741823?-1:z<<2)|0;Uo(t,s);Mp(t,D,d,0);d=Wo(t,353)|0;O=Wo(t,674)|0;P=Wo(t,677)|0;J=Wo(t,638)|0;I=Wo(t,639)|0;Wo(t,215)|0;L=ed[k[(k[t>>2]|0)+308>>2]&511](t,4)|0;K=Hc[k[(k[L>>2]|0)+8>>2]&511](L)|0;if((K|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0)){M=(z|0)>0;h=n+8|0;i=m+8|0;N=o+8|0;j=q+8|0;b=L+8|0;w=K;do{Fc[k[(k[L>>2]|0)+24>>2]&1023](L,w);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,L);rd[k[(k[O>>2]|0)+60>>2]&511](O,m,k[s>>2]|0,L);rd[k[(k[P>>2]|0)+60>>2]&511](P,n,k[s>>2]|0,L);rd[k[(k[J>>2]|0)+60>>2]&511](J,o,k[s>>2]|0,L);rd[k[(k[I>>2]|0)+60>>2]&511](I,q,k[s>>2]|0,L);gp(t,l,u,k[s>>2]|0,L,O,P);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[s>>2]|0,L);nd[k[(k[t>>2]|0)+356>>2]&1023](t,C,L);if(M){R=+p[m>>3];S=+p[h>>3];T=+p[e>>3]*(+p[l>>3]*+p[g>>3]*((R+S*2.0)*2.0*+p[j>>3]+(+p[o>>3]*((R*2.0+S)*2.0)+(+p[i>>3]+ +p[n>>3])*(+p[N>>3]+ +p[q>>3]))));K=0;do{x=y+(K<<3)|0;p[x>>3]=+p[x>>3]-+p[C+(K<<3)>>3]*(+p[b>>3]*T);K=K+1|0}while((K|0)!=(z|0))}w=w+1|0}while((w|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0))}if(k[c>>2]|0){w=k[k[c+4>>2]>>2]|0;Dc[k[(k[w>>2]|0)+16>>2]&255](w,z,D,y,1)}z=k[s>>2]|0;if(z)Tqa(z);k[s>>2]=0;Tqa(C);Tqa(y);Tqa(D);if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);if((k[f>>2]|0)!=300?(ap(t),(t|0)!=0):0)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);r=a;return}function K6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0;a=r;r=r+304|0;e=a+240|0;f=a+292|0;g=a+104|0;h=a+280|0;i=a+268|0;j=a+256|0;l=a+96|0;m=a+72|0;n=a+48|0;o=a+24|0;q=a;s=a+252|0;cp(b,f,298);a:do switch(k[f>>2]|0){case 300:{t=b;u=2;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=1;break a}else{r=a;return}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=2;break a}else{r=a;return}break}default:{v=g+56|0;w=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);Yua(A);Ava(w);C=F;D=E;break}Yua(e);B=0;E=Ia(40,g|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[f>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,h|0,125033,80);H=B;B=0;do if(!(H&1)){B=0;eb(502,i|0,125379,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(h);I=F;J=E;break}B=0;wa(510,j|0,w|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,G|0,h|0,i|0,1493,j|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}E=Rb()|0;F=Q;Yua(j);K=E;L=F;M=N}Yua(i);Yua(h);if(M){I=K;J=L}else{O=K;P=L;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=F;J=Q}while(0);zb(G|0);O=I;P=J;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);k[s>>2]=0;z=Hc[k[(k[t>>2]|0)+172>>2]&511](t)|0;D=z>>>0>536870911?-1:z<<3;C=Rqa(D)|0;y=Rqa(D)|0;if(z)WEa(y|0,0,z<<3|0)|0;D=Rqa(z>>>0>1073741823?-1:z<<2)|0;Uo(t,s);Mp(t,D,d,0);d=Wo(t,353)|0;O=Wo(t,674)|0;P=Wo(t,677)|0;J=Wo(t,638)|0;I=Wo(t,639)|0;Wo(t,214)|0;L=ed[k[(k[t>>2]|0)+308>>2]&511](t,4)|0;K=Hc[k[(k[L>>2]|0)+8>>2]&511](L)|0;if((K|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0)){M=(z|0)>0;h=n+8|0;i=m+8|0;N=o+8|0;j=q+8|0;b=L+8|0;w=K;do{Fc[k[(k[L>>2]|0)+24>>2]&1023](L,w);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,L);rd[k[(k[O>>2]|0)+60>>2]&511](O,m,k[s>>2]|0,L);rd[k[(k[P>>2]|0)+60>>2]&511](P,n,k[s>>2]|0,L);rd[k[(k[J>>2]|0)+60>>2]&511](J,o,k[s>>2]|0,L);rd[k[(k[I>>2]|0)+60>>2]&511](I,q,k[s>>2]|0,L);gp(t,l,u,k[s>>2]|0,L,O,P);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[s>>2]|0,L);nd[k[(k[t>>2]|0)+356>>2]&1023](t,C,L);if(M){R=+p[m>>3];S=+p[h>>3];T=+p[e>>3]*(+p[l>>3]*+p[g>>3]*((R+S*2.0)*2.0*+p[j>>3]+(+p[o>>3]*((R*2.0+S)*2.0)+(+p[i>>3]+ +p[n>>3])*(+p[N>>3]+ +p[q>>3]))));K=0;do{x=y+(K<<3)|0;p[x>>3]=+p[x>>3]-+p[C+(K<<3)>>3]*(+p[b>>3]*T);K=K+1|0}while((K|0)!=(z|0))}w=w+1|0}while((w|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0))}if(k[c>>2]|0){w=k[k[c+4>>2]>>2]|0;Dc[k[(k[w>>2]|0)+16>>2]&255](w,z,D,y,1)}z=k[s>>2]|0;if(z)Tqa(z);k[s>>2]=0;Tqa(C);Tqa(y);Tqa(D);if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);if((k[f>>2]|0)!=300?(ap(t),(t|0)!=0):0)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);r=a;return}function L6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0.0;a=r;r=r+128|0;e=a+124|0;f=a+112|0;g=a+104|0;h=a+96|0;i=a+72|0;j=a+48|0;l=a+24|0;m=a;n=a+120|0;cp(b,e,298);k[n>>2]=0;o=Hc[k[(k[b>>2]|0)+172>>2]&511](b)|0;q=o>>>0>536870911?-1:o<<3;s=Rqa(q)|0;t=Rqa(q)|0;if(o)WEa(t|0,0,o<<3|0)|0;q=Rqa(o>>>0>1073741823?-1:o<<2)|0;Uo(b,n);Mp(b,q,d,0);d=Wo(b,353)|0;u=Wo(b,674)|0;v=Wo(b,638)|0;Wo(b,214)|0;if((k[e>>2]|0)==301){w=0;x=0}else{y=Wo(b,677)|0;w=Wo(b,639)|0;x=y}y=ed[k[(k[b>>2]|0)+308>>2]&511](b,4)|0;z=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((z|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){A=(o|0)>0;B=y+8|0;C=j+8|0;D=i+8|0;E=l+8|0;F=m+8|0;G=z;do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,G);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,y);rd[k[(k[u>>2]|0)+60>>2]&511](u,i,k[n>>2]|0,y);rd[k[(k[v>>2]|0)+60>>2]&511](v,l,k[n>>2]|0,y);if((k[e>>2]|0)==301)H=2;else{rd[k[(k[w>>2]|0)+60>>2]&511](w,m,k[n>>2]|0,y);rd[k[(k[x>>2]|0)+60>>2]&511](x,j,k[n>>2]|0,y);H=3}dp(b,h,H,k[n>>2]|0,y,u,x);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[n>>2]|0,y);nd[k[(k[b>>2]|0)+356>>2]&1023](b,s,y);if(A){I=+p[h>>3];J=+p[g>>3];K=+p[i>>3];if((k[e>>2]|0)==301){L=I*J*-4.0*K*+p[l>>3]*+p[f>>3];z=0;do{M=t+(z<<3)|0;p[M>>3]=+p[M>>3]+L*+p[B>>3]*+p[s+(z<<3)>>3];z=z+1|0}while((z|0)!=(o|0))}else{L=+p[C>>3];N=+p[f>>3]*(I*J*((K+L*2.0)*2.0*+p[F>>3]+(+p[l>>3]*((K*2.0+L)*2.0)+(+p[D>>3]+ +p[j>>3])*(+p[E>>3]+ +p[m>>3]))));z=0;do{M=t+(z<<3)|0;p[M>>3]=+p[M>>3]-+p[s+(z<<3)>>3]*(+p[B>>3]*N);z=z+1|0}while((z|0)!=(o|0))}}G=G+1|0}while((G|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}if(k[c>>2]|0){G=k[k[c+4>>2]>>2]|0;Dc[k[(k[G>>2]|0)+16>>2]&255](G,o,q,t,1)}o=k[n>>2]|0;if(o)Tqa(o);k[n>>2]=0;Tqa(s);Tqa(t);Tqa(q);if(!y){r=a;return}Ec[k[(k[y>>2]|0)+4>>2]&1023](y);r=a;return}function M6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0;a=r;r=r+304|0;e=a+240|0;f=a+292|0;g=a+104|0;h=a+280|0;i=a+268|0;j=a+256|0;l=a+96|0;m=a+72|0;n=a+48|0;o=a+24|0;q=a;s=a+252|0;cp(b,f,298);a:do switch(k[f>>2]|0){case 300:{t=b;u=2;break}case 301:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=1;break a}else{r=a;return}break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;u=2;break a}else{r=a;return}break}default:{v=g+56|0;w=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);Yua(A);Ava(w);C=F;D=E;break}Yua(e);B=0;E=Ia(40,g|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[f>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,h|0,125033,80);H=B;B=0;do if(!(H&1)){B=0;eb(502,i|0,125393,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(h);I=F;J=E;break}B=0;wa(510,j|0,w|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,G|0,h|0,i|0,2222,j|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}E=Rb()|0;F=Q;Yua(j);K=E;L=F;M=N}Yua(i);Yua(h);if(M){I=K;J=L}else{O=K;P=L;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=F;J=Q}while(0);zb(G|0);O=I;P=J;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);k[s>>2]=0;z=Hc[k[(k[t>>2]|0)+172>>2]&511](t)|0;D=z>>>0>536870911?-1:z<<3;C=Rqa(D)|0;y=Rqa(D)|0;if(z)WEa(y|0,0,z<<3|0)|0;D=Rqa(z>>>0>1073741823?-1:z<<2)|0;Uo(t,s);Mp(t,D,d,0);d=Wo(t,353)|0;O=Wo(t,674)|0;P=Wo(t,677)|0;J=Wo(t,638)|0;I=Wo(t,639)|0;Wo(t,215)|0;L=ed[k[(k[t>>2]|0)+308>>2]&511](t,4)|0;K=Hc[k[(k[L>>2]|0)+8>>2]&511](L)|0;if((K|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0)){M=(z|0)>0;h=n+8|0;i=m+8|0;N=o+8|0;j=q+8|0;b=L+8|0;w=K;do{Fc[k[(k[L>>2]|0)+24>>2]&1023](L,w);nd[k[(k[d>>2]|0)+48>>2]&1023](d,g,L);rd[k[(k[O>>2]|0)+60>>2]&511](O,m,k[s>>2]|0,L);rd[k[(k[P>>2]|0)+60>>2]&511](P,n,k[s>>2]|0,L);rd[k[(k[J>>2]|0)+60>>2]&511](J,o,k[s>>2]|0,L);rd[k[(k[I>>2]|0)+60>>2]&511](I,q,k[s>>2]|0,L);ip(t,l,u,k[s>>2]|0,L,O,P);rd[k[(k[t>>2]|0)+260>>2]&511](t,e,k[s>>2]|0,L);nd[k[(k[t>>2]|0)+356>>2]&1023](t,C,L);if(M){R=+p[m>>3];S=+p[h>>3];T=+p[e>>3]*(+p[l>>3]*+p[g>>3]*((R+S*2.0)*2.0*+p[j>>3]+(+p[o>>3]*((R*2.0+S)*2.0)+(+p[i>>3]+ +p[n>>3])*(+p[N>>3]+ +p[q>>3]))));K=0;do{x=y+(K<<3)|0;p[x>>3]=+p[x>>3]-+p[C+(K<<3)>>3]*(+p[b>>3]*T);K=K+1|0}while((K|0)!=(z|0))}w=w+1|0}while((w|0)<(Hc[k[(k[L>>2]|0)+12>>2]&511](L)|0))}if(k[c>>2]|0){w=k[k[c+4>>2]>>2]|0;Dc[k[(k[w>>2]|0)+16>>2]&255](w,z,D,y,1)}z=k[s>>2]|0;if(z)Tqa(z);k[s>>2]=0;Tqa(C);Tqa(y);Tqa(D);if(L)Ec[k[(k[L>>2]|0)+4>>2]&1023](L);if((k[f>>2]|0)!=300?(ap(t),(t|0)!=0):0)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);r=a;return}function N6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Ap(c,d,533);if((k[d>>2]&-9|0)==534){O6(0,b,c);r=a;return}else{P6(0,b,c);r=a;return}}function O6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0.0,Ea=0.0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0;a=r;r=r+1616|0;d=a+1600|0;e=a+1572|0;f=a+1556|0;g=a+1552|0;h=a;i=a+1524|0;j=a+1376|0;l=a+1588|0;m=a+1576|0;n=a+1560|0;o=a+1224|0;q=a+1540|0;s=a+1528|0;u=a+1512|0;v=a+1072|0;w=a+1360|0;x=a+1208|0;y=a+1056|0;z=a+920|0;A=a+768|0;C=a+616|0;D=a+328|0;E=a+784|0;F=a+176|0;G=a+164|0;H=a+152|0;I=a+632|0;J=a+140|0;K=a+128|0;L=a+116|0;M=a+480|0;N=a+104|0;O=a+92|0;P=a+80|0;R=a+344|0;S=a+68|0;T=a+56|0;U=a+44|0;V=a+192|0;W=a+32|0;X=a+20|0;Y=a+8|0;k[f>>2]=0;k[g>>2]=0;cp(c,i,298);switch(k[i>>2]|0){case 302:case 300:{Z=3;break}case 301:{Z=2;break}default:{_=j+56|0;aa=j+4|0;k[j>>2]=27524;k[_>>2]=27544;B=0;wa(508,j+56|0,aa|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(_);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[_>>2]=27488;B=0;va(448,aa|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[aa>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,aa|0,d|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(d);Yua(ea);Ava(aa);fa=ia;ga=ha;break}Yua(d);B=0;ha=Ia(40,j|0,144639,5)|0;ia=B;B=0;a:do if((((!(ia&1)?(B=0,ja=ya(427,k[i>>2]|0)|0,ka=B,B=0,!(ka&1)):0)?(ka=Lta(ja)|0,B=0,la=Ia(40,ha|0,ja|0,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,ka=Ia(40,la|0,146481,18)|0,la=B,B=0,!(la&1)):0)?(B=0,Xa(239,ka|0,0)|0,ka=B,B=0,!(ka&1)):0){ka=Ab(20)|0;B=0;eb(502,l|0,125033,80);la=B;B=0;do if(!(la&1)){B=0;eb(502,m|0,128297,25);ja=B;B=0;if(ja&1){ja=Rb()|0;na=Q;Yua(l);oa=ja;pa=na;break}B=0;wa(510,n|0,aa|0);na=B;B=0;if(na&1){na=Rb()|0;qa=na;ra=Q;sa=1}else{B=0;ua(163,ka|0,l|0,m|0,2310,n|0);na=B;B=0;if(na&1)ta=1;else{B=0;eb(503,ka|0,1240,229);B=0;ta=0}na=Rb()|0;ja=Q;Yua(n);qa=na;ra=ja;sa=ta}Yua(m);Yua(l);if(sa){oa=qa;pa=ra}else{xa=qa;za=ra;break a}}else{ja=Rb()|0;oa=ja;pa=Q}while(0);zb(ka|0);xa=oa;za=pa}else Aa=21;while(0);if((Aa|0)==21){ha=Rb()|0;xa=ha;za=Q}k[j>>2]=27468;k[_>>2]=27488;k[aa>>2]=27560;Yua(ea);Ava(aa);vva(_);Ba=xa;Ca=za;Qb(Ba|0)}while(0);ca=fa;da=ga;vva(_);Qb(da|0)}}da=Hc[k[(k[c>>2]|0)+396>>2]&511](c)|0;_=Hc[k[(k[c>>2]|0)+392>>2]&511](c)|0;ga=ma(da,Z)|0;fa=_+ga|0;ca=Rqa(fa>>>0>536870911?-1:fa<<3)|0;fa=da>>>0>536870911?-1:da<<3;za=Rqa(fa)|0;xa=Rqa(fa)|0;aa=Rqa(fa)|0;fa=Rqa(_>>>0>536870911?-1:_<<3)|0;j=_+da|0;pa=Rqa(j>>>0>1073741823?-1:j<<2)|0;j=(da|0)>0;if((Z|0)==2){if(j){oa=0;do{k[pa+(oa<<2)>>2]=971;oa=oa+1|0}while((oa|0)!=(da|0))}}else if(j){oa=0;do{k[pa+(oa<<2)>>2]=972;oa=oa+1|0}while((oa|0)!=(da|0))}oa=(_|0)>0;if(oa){ra=0;do{k[pa+(ra+da<<2)>>2]=653;ra=ra+1|0}while((ra|0)!=(_|0))}tp(c,f,943);sp(c,g,943);if((ga|0)>0){ra=k[f>>2]|0;qa=0;do{p[ca+(qa<<3)>>3]=+p[b+(k[ra+(qa<<2)>>2]<<3)>>3];qa=qa+1|0}while((qa|0)!=(ga|0))}if(oa){qa=k[g>>2]|0;ra=0;do{p[ca+(ra+ga<<3)>>3]=+p[b+(k[qa+(ra<<2)>>2]<<3)>>3];ra=ra+1|0}while((ra|0)!=(_|0))}Cq(c,ca,pa);b:do if(j){c:do if((Z|0)==3){ra=0;while(1){qa=ra*3|0;Da=+p[ca+(qa<<3)>>3];p[za+(ra<<3)>>3]=Da;Ea=+$(+Da);p[t>>3]=Ea;b=k[t>>2]|0;sa=k[t+4>>2]|0;if(sa>>>0>2146435072|(sa|0)==2146435072&b>>>0>0){Aa=54;break c}if((b|0)==0&(sa|0)==2146435072){Aa=78;break c}Ea=+p[ca+(qa+1<<3)>>3];p[xa+(ra<<3)>>3]=Ea;Da=+$(+Ea);p[t>>3]=Da;sa=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&sa>>>0>0){Aa=102;break c}if((sa|0)==0&(b|0)==2146435072){Aa=126;break c}Da=+p[ca+(qa+2<<3)>>3];p[aa+(ra<<3)>>3]=Da;Ea=+$(+Da);p[t>>3]=Ea;qa=k[t>>2]|0;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&qa>>>0>0){Aa=149;break}if((qa|0)==0&(b|0)==2146435072){Aa=172;break}ra=ra+1|0;if((ra|0)>=(da|0))break b}if((Aa|0)==149){ra=I+56|0;ka=I+4|0;k[I>>2]=27524;k[ra>>2]=27544;B=0;wa(508,I+56|0,ka|0);b=B;B=0;if(b&1){b=Rb()|0;Fa=Q;Ga=b;vva(ra);Qb(Ga|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[ra>>2]=27488;B=0;va(448,ka|0);b=B;B=0;do if(b&1){qa=Rb()|0;Ha=Q;Ja=qa}else{k[ka>>2]=27560;qa=I+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[I+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ka|0,d|0);sa=B;B=0;if(sa&1){sa=Rb()|0;l=Q;Yua(d);Yua(qa);Ava(ka);Ha=l;Ja=sa;break}Yua(d);B=0;sa=Ia(40,I|0,135564,28)|0;l=B;B=0;d:do if(!(l&1)?(B=0,Xa(239,sa|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,J|0,125033,80);ta=B;B=0;do if(!(ta&1)){B=0;eb(502,K|0,128297,25);n=B;B=0;if(n&1){n=Rb()|0;ba=Q;Yua(J);Ka=n;La=ba;break}B=0;wa(510,L|0,ka|0);ba=B;B=0;if(ba&1){ba=Rb()|0;Ma=1;Na=ba;Oa=Q}else{B=0;ua(163,m|0,J|0,K|0,2353,L|0);ba=B;B=0;if(ba&1)Pa=1;else{B=0;eb(503,m|0,1240,229);B=0;Pa=0}ba=Rb()|0;n=Q;Yua(L);Ma=Pa;Na=ba;Oa=n}Yua(K);Yua(J);if(Ma){Ka=Na;La=Oa}else{Qa=Na;Ra=Oa;break d}}else{n=Rb()|0;Ka=n;La=Q}while(0);zb(m|0);Qa=Ka;Ra=La}else Aa=164;while(0);if((Aa|0)==164){sa=Rb()|0;Qa=sa;Ra=Q}k[I>>2]=27468;k[ra>>2]=27488;k[ka>>2]=27560;Yua(qa);Ava(ka);vva(ra);Ba=Qa;Ca=Ra;Qb(Ba|0)}while(0);Fa=Ha;Ga=Ja;vva(ra);Qb(Ga|0)}else if((Aa|0)==172){ka=M+56|0;b=M+4|0;k[M>>2]=27524;k[ka>>2]=27544;B=0;wa(508,M+56|0,b|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Sa=Q;Ta=sa;vva(ka);Qb(Ta|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[ka>>2]=27488;B=0;va(448,b|0);sa=B;B=0;do if(sa&1){l=Rb()|0;Ua=Q;Va=l}else{k[b>>2]=27560;l=M+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[M+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;n=Q;Yua(d);Yua(l);Ava(b);Ua=n;Va=ta;break}Yua(d);B=0;ta=Ia(40,M|0,135593,28)|0;n=B;B=0;e:do if(!(n&1)?(B=0,Xa(239,ta|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,N|0,125033,80);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,O|0,128297,25);ia=B;B=0;if(ia&1){ia=Rb()|0;la=Q;Yua(N);Wa=ia;Ya=la;break}B=0;wa(510,P|0,b|0);la=B;B=0;if(la&1){la=Rb()|0;Za=1;_a=la;$a=Q}else{B=0;ua(163,ba|0,N|0,O|0,2354,P|0);la=B;B=0;if(la&1)ab=1;else{B=0;eb(503,ba|0,1240,229);B=0;ab=0}la=Rb()|0;ia=Q;Yua(P);Za=ab;_a=la;$a=ia}Yua(O);Yua(N);if(Za){Wa=_a;Ya=$a}else{bb=_a;cb=$a;break e}}else{ia=Rb()|0;Wa=ia;Ya=Q}while(0);zb(ba|0);bb=Wa;cb=Ya}else Aa=187;while(0);if((Aa|0)==187){ta=Rb()|0;bb=ta;cb=Q}k[M>>2]=27468;k[ka>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(ka);Ba=bb;Ca=cb;Qb(Ba|0)}while(0);Sa=Ua;Ta=Va;vva(ka);Qb(Ta|0)}}else{b=0;while(1){sa=ma(b,Z)|0;Ea=+p[ca+(sa<<3)>>3];p[za+(b<<3)>>3]=Ea;Da=+$(+Ea);p[t>>3]=Da;ra=k[t>>2]|0;ta=k[t+4>>2]|0;if(ta>>>0>2146435072|(ta|0)==2146435072&ra>>>0>0){Aa=54;break c}if((ra|0)==0&(ta|0)==2146435072){Aa=78;break c}Da=+p[ca+(sa+1<<3)>>3];p[xa+(b<<3)>>3]=Da;Ea=+$(+Da);p[t>>3]=Ea;sa=k[t>>2]|0;ta=k[t+4>>2]|0;if(ta>>>0>2146435072|(ta|0)==2146435072&sa>>>0>0){Aa=102;break c}if((sa|0)==0&(ta|0)==2146435072){Aa=126;break c}b=b+1|0;if((b|0)>=(da|0))break b}}while(0);if((Aa|0)==54){ea=o+56|0;b=o+4|0;k[o>>2]=27524;k[ea>>2]=27544;B=0;wa(508,o+56|0,b|0);ka=B;B=0;if(ka&1){ka=Rb()|0;db=Q;fb=ka;vva(ea);Qb(fb|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[ea>>2]=27488;B=0;va(448,b|0);ka=B;B=0;do if(ka&1){ta=Rb()|0;gb=Q;hb=ta}else{k[b>>2]=27560;ta=o+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(d);Yua(ta);Ava(b);gb=ra;hb=sa;break}Yua(d);B=0;sa=Ia(40,o|0,135564,28)|0;ra=B;B=0;f:do if(!(ra&1)?(B=0,Xa(239,sa|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,q|0,125033,80);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,s|0,128297,25);ha=B;B=0;if(ha&1){ha=Rb()|0;m=Q;Yua(q);ib=ha;jb=m;break}B=0;wa(510,u|0,b|0);m=B;B=0;if(m&1){m=Rb()|0;kb=1;lb=m;mb=Q}else{B=0;ua(163,n|0,q|0,s|0,2346,u|0);m=B;B=0;if(m&1)nb=1;else{B=0;eb(503,n|0,1240,229);B=0;nb=0}m=Rb()|0;ha=Q;Yua(u);kb=nb;lb=m;mb=ha}Yua(s);Yua(q);if(kb){ib=lb;jb=mb}else{ob=lb;pb=mb;break f}}else{ha=Rb()|0;ib=ha;jb=Q}while(0);zb(n|0);ob=ib;pb=jb}else Aa=69;while(0);if((Aa|0)==69){sa=Rb()|0;ob=sa;pb=Q}k[o>>2]=27468;k[ea>>2]=27488;k[b>>2]=27560;Yua(ta);Ava(b);vva(ea);Ba=ob;Ca=pb;Qb(Ba|0)}while(0);db=gb;fb=hb;vva(ea);Qb(fb|0)}else if((Aa|0)==78){b=v+56|0;ka=v+4|0;k[v>>2]=27524;k[b>>2]=27544;B=0;wa(508,v+56|0,ka|0);sa=B;B=0;if(sa&1){sa=Rb()|0;qb=Q;rb=sa;vva(b);Qb(rb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[b>>2]=27488;B=0;va(448,ka|0);sa=B;B=0;do if(sa&1){ra=Rb()|0;sb=Q;tb=ra}else{k[ka>>2]=27560;ra=v+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[v+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ka|0,d|0);qa=B;B=0;if(qa&1){qa=Rb()|0;l=Q;Yua(d);Yua(ra);Ava(ka);sb=l;tb=qa;break}Yua(d);B=0;qa=Ia(40,v|0,135593,28)|0;l=B;B=0;g:do if(!(l&1)?(B=0,Xa(239,qa|0,0)|0,ha=B,B=0,!(ha&1)):0){ha=Ab(20)|0;B=0;eb(502,w|0,125033,80);m=B;B=0;do if(!(m&1)){B=0;eb(502,x|0,128297,25);ia=B;B=0;if(ia&1){ia=Rb()|0;la=Q;Yua(w);ub=ia;vb=la;break}B=0;wa(510,y|0,ka|0);la=B;B=0;if(la&1){la=Rb()|0;wb=1;xb=la;yb=Q}else{B=0;ua(163,ha|0,w|0,x|0,2347,y|0);la=B;B=0;if(la&1)Bb=1;else{B=0;eb(503,ha|0,1240,229);B=0;Bb=0}la=Rb()|0;ia=Q;Yua(y);wb=Bb;xb=la;yb=ia}Yua(x);Yua(w);if(wb){ub=xb;vb=yb}else{Cb=xb;Db=yb;break g}}else{ia=Rb()|0;ub=ia;vb=Q}while(0);zb(ha|0);Cb=ub;Db=vb}else Aa=93;while(0);if((Aa|0)==93){qa=Rb()|0;Cb=qa;Db=Q}k[v>>2]=27468;k[b>>2]=27488;k[ka>>2]=27560;Yua(ra);Ava(ka);vva(b);Ba=Cb;Ca=Db;Qb(Ba|0)}while(0);qb=sb;rb=tb;vva(b);Qb(rb|0)}else if((Aa|0)==102){ka=z+56|0;sa=z+4|0;k[z>>2]=27524;k[ka>>2]=27544;B=0;wa(508,z+56|0,sa|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Eb=Q;Fb=ea;vva(ka);Qb(Fb|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[ka>>2]=27488;B=0;va(448,sa|0);ea=B;B=0;do if(ea&1){qa=Rb()|0;Gb=Q;Hb=qa}else{k[sa>>2]=27560;qa=z+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[z+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,sa|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;ta=Q;Yua(d);Yua(qa);Ava(sa);Gb=ta;Hb=l;break}Yua(d);B=0;l=Ia(40,z|0,135564,28)|0;ta=B;B=0;h:do if(!(ta&1)?(B=0,Xa(239,l|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,A|0,125033,80);n=B;B=0;do if(!(n&1)){B=0;eb(502,C|0,128297,25);ia=B;B=0;if(ia&1){ia=Rb()|0;la=Q;Yua(A);Ib=ia;Jb=la;break}B=0;wa(510,D|0,sa|0);la=B;B=0;if(la&1){la=Rb()|0;Kb=1;Lb=la;Mb=Q}else{B=0;ua(163,m|0,A|0,C|0,2349,D|0);la=B;B=0;if(la&1)Nb=1;else{B=0;eb(503,m|0,1240,229);B=0;Nb=0}la=Rb()|0;ia=Q;Yua(D);Kb=Nb;Lb=la;Mb=ia}Yua(C);Yua(A);if(Kb){Ib=Lb;Jb=Mb}else{Ob=Lb;Pb=Mb;break h}}else{ia=Rb()|0;Ib=ia;Jb=Q}while(0);zb(m|0);Ob=Ib;Pb=Jb}else Aa=117;while(0);if((Aa|0)==117){l=Rb()|0;Ob=l;Pb=Q}k[z>>2]=27468;k[ka>>2]=27488;k[sa>>2]=27560;Yua(qa);Ava(sa);vva(ka);Ba=Ob;Ca=Pb;Qb(Ba|0)}while(0);Eb=Gb;Fb=Hb;vva(ka);Qb(Fb|0)}else if((Aa|0)==126){sa=E+56|0;ea=E+4|0;k[E>>2]=27524;k[sa>>2]=27544;B=0;wa(508,E+56|0,ea|0);b=B;B=0;if(b&1){b=Rb()|0;Sb=Q;Tb=b;vva(sa);Qb(Tb|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[sa>>2]=27488;B=0;va(448,ea|0);b=B;B=0;do if(b&1){l=Rb()|0;Ub=Q;Vb=l}else{k[ea>>2]=27560;l=E+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[E+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ea|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ra=Q;Yua(d);Yua(l);Ava(ea);Ub=ra;Vb=ta;break}Yua(d);B=0;ta=Ia(40,E|0,135593,28)|0;ra=B;B=0;i:do if(!(ra&1)?(B=0,Xa(239,ta|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,F|0,125033,80);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,G|0,128297,25);ia=B;B=0;if(ia&1){ia=Rb()|0;la=Q;Yua(F);Wb=ia;Xb=la;break}B=0;wa(510,H|0,ea|0);la=B;B=0;if(la&1){la=Rb()|0;Yb=1;Zb=la;_b=Q}else{B=0;ua(163,n|0,F|0,G|0,2350,H|0);la=B;B=0;if(la&1)$b=1;else{B=0;eb(503,n|0,1240,229);B=0;$b=0}la=Rb()|0;ia=Q;Yua(H);Yb=$b;Zb=la;_b=ia}Yua(G);Yua(F);if(Yb){Wb=Zb;Xb=_b}else{ac=Zb;bc=_b;break i}}else{ia=Rb()|0;Wb=ia;Xb=Q}while(0);zb(n|0);ac=Wb;bc=Xb}else Aa=141;while(0);if((Aa|0)==141){ta=Rb()|0;ac=ta;bc=Q}k[E>>2]=27468;k[sa>>2]=27488;k[ea>>2]=27560;Yua(l);Ava(ea);vva(sa);Ba=ac;Ca=bc;Qb(Ba|0)}while(0);Sb=Ub;Tb=Vb;vva(sa);Qb(Tb|0)}}while(0);do if(oa){Tb=0;while(1){Ea=+p[ca+(Tb+ga<<3)>>3];p[fa+(Tb<<3)>>3]=Ea;Da=+$(+Ea);p[t>>3]=Da;Vb=k[t>>2]|0;Ub=k[t+4>>2]|0;if(Ub>>>0>2146435072|(Ub|0)==2146435072&Vb>>>0>0){Aa=198;break}Tb=Tb+1|0;if((Vb|0)==0&(Ub|0)==2146435072){Aa=222;break}if((Tb|0)>=(_|0)){Aa=245;break}}if((Aa|0)==198){Tb=R+56|0;sa=R+4|0;k[R>>2]=27524;k[Tb>>2]=27544;B=0;wa(508,R+56|0,sa|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;cc=Q;dc=Ub;vva(Tb);Qb(dc|0)}k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[Tb>>2]=27488;B=0;va(448,sa|0);Ub=B;B=0;do if(Ub&1){Vb=Rb()|0;ec=Q;fc=Vb}else{k[sa>>2]=27560;Vb=R+36|0;k[Vb>>2]=0;k[Vb+4>>2]=0;k[Vb+8>>2]=0;k[Vb+12>>2]=0;k[R+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,sa|0,d|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;bc=Q;Yua(d);Yua(Vb);Ava(sa);ec=bc;fc=Sb;break}Yua(d);B=0;Sb=Ia(40,R|0,135564,28)|0;bc=B;B=0;j:do if(!(bc&1)?(B=0,Xa(239,Sb|0,0)|0,ac=B,B=0,!(ac&1)):0){ac=Ab(20)|0;B=0;eb(502,S|0,125033,80);E=B;B=0;do if(!(E&1)){B=0;eb(502,T|0,128297,25);Xb=B;B=0;if(Xb&1){Xb=Rb()|0;Wb=Q;Yua(S);gc=Xb;hc=Wb;break}B=0;wa(510,U|0,sa|0);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;ic=1;jc=Wb;kc=Q}else{B=0;ua(163,ac|0,S|0,T|0,2359,U|0);Wb=B;B=0;if(Wb&1)lc=1;else{B=0;eb(503,ac|0,1240,229);B=0;lc=0}Wb=Rb()|0;Xb=Q;Yua(U);ic=lc;jc=Wb;kc=Xb}Yua(T);Yua(S);if(ic){gc=jc;hc=kc}else{mc=jc;nc=kc;break j}}else{Xb=Rb()|0;gc=Xb;hc=Q}while(0);zb(ac|0);mc=gc;nc=hc}else Aa=213;while(0);if((Aa|0)==213){Sb=Rb()|0;mc=Sb;nc=Q}k[R>>2]=27468;k[Tb>>2]=27488;k[sa>>2]=27560;Yua(Vb);Ava(sa);vva(Tb);Ba=mc;Ca=nc;Qb(Ba|0)}while(0);cc=ec;dc=fc;vva(Tb);Qb(dc|0)}else if((Aa|0)==222){sa=V+56|0;Ub=V+4|0;k[V>>2]=27524;k[sa>>2]=27544;B=0;wa(508,V+56|0,Ub|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;oc=Q;pc=Sb;vva(sa);Qb(pc|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[sa>>2]=27488;B=0;va(448,Ub|0);Sb=B;B=0;do if(Sb&1){bc=Rb()|0;qc=Q;rc=bc}else{k[Ub>>2]=27560;bc=V+36|0;k[bc>>2]=0;k[bc+4>>2]=0;k[bc+8>>2]=0;k[bc+12>>2]=0;k[V+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ub|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;E=Q;Yua(d);Yua(bc);Ava(Ub);qc=E;rc=l;break}Yua(d);B=0;l=Ia(40,V|0,135593,28)|0;E=B;B=0;k:do if(!(E&1)?(B=0,Xa(239,l|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,W|0,125033,80);Xb=B;B=0;do if(!(Xb&1)){B=0;eb(502,X|0,128297,25);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;_b=Q;Yua(W);sc=Wb;tc=_b;break}B=0;wa(510,Y|0,Ub|0);_b=B;B=0;if(_b&1){_b=Rb()|0;uc=1;vc=_b;wc=Q}else{B=0;ua(163,n|0,W|0,X|0,2360,Y|0);_b=B;B=0;if(_b&1)xc=1;else{B=0;eb(503,n|0,1240,229);B=0;xc=0}_b=Rb()|0;Wb=Q;Yua(Y);uc=xc;vc=_b;wc=Wb}Yua(X);Yua(W);if(uc){sc=vc;tc=wc}else{yc=vc;zc=wc;break k}}else{Wb=Rb()|0;sc=Wb;tc=Q}while(0);zb(n|0);yc=sc;zc=tc}else Aa=237;while(0);if((Aa|0)==237){l=Rb()|0;yc=l;zc=Q}k[V>>2]=27468;k[sa>>2]=27488;k[Ub>>2]=27560;Yua(bc);Ava(Ub);vva(sa);Ba=yc;Ca=zc;Qb(Ba|0)}while(0);oc=qc;pc=rc;vva(sa);Qb(pc|0)}else if((Aa|0)==245){pp(c,h,85);if(!oa)break;Da=+p[h>>3];Ub=0;do{Sb=fa+(Ub<<3)|0;p[Sb>>3]=+p[Sb>>3]*Da;Ub=Ub+1|0}while((Ub|0)!=(_|0))}}else pp(c,h,85);while(0);h=k[c>>2]|0;_=k[h+48>>2]|0;oa=Hc[k[h+504>>2]&511](c)|0;rd[_&511](c,638,za,oa);oa=k[c>>2]|0;_=k[oa+48>>2]|0;h=Hc[k[oa+504>>2]&511](c)|0;rd[_&511](c,639,xa,h);if((k[i>>2]|0)!=301){i=k[c>>2]|0;h=k[i+48>>2]|0;_=Hc[k[i+504>>2]&511](c)|0;rd[h&511](c,640,aa,_)}cp(c,e,102);switch(k[e>>2]|0){case 754:case 758:break;default:{e=k[c>>2]|0;_=k[e+48>>2]|0;h=Hc[k[e+404>>2]&511](c)|0;rd[_&511](c,637,fa,h)}}h=k[f>>2]|0;if(h)Tqa(h);k[f>>2]=0;f=k[g>>2]|0;if(!f){k[g>>2]=0;Tqa(pa);Tqa(fa);Tqa(aa);Tqa(xa);Tqa(za);Tqa(ca);r=a;return}Tqa(f);k[g>>2]=0;Tqa(pa);Tqa(fa);Tqa(aa);Tqa(xa);Tqa(za);Tqa(ca);r=a;return}function P6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0;a=r;r=r+720|0;d=a+704|0;e=a+700|0;f=a+684|0;g=a+536|0;h=a+688|0;i=a+672|0;j=a+520|0;l=a+384|0;m=a+232|0;n=a+84|0;o=a+72|0;q=a+248|0;s=a+60|0;u=a+48|0;v=a+36|0;w=a+96|0;x=a+24|0;y=a+12|0;z=a;k[e>>2]=0;cp(c,f,298);A=Hc[k[(k[c>>2]|0)+164>>2]&511](c)|0;C=A<<((k[f>>2]|0)!=301&1);rp(c,e,534,943);D=Rqa(C>>>0>536870911?-1:C<<3)|0;E=A>>>0>536870911?-1:A<<3;F=Rqa(E)|0;G=Rqa(E)|0;if((C|0)>0){E=k[e>>2]|0;H=0;do{p[D+(H<<3)>>3]=+p[b+(k[E+(H<<2)>>2]<<3)>>3];H=H+1|0}while((H|0)!=(C|0))}if((k[f>>2]|0)!=301)Aq(c,D,971);a:do if((A|0)>0){b:do if((k[f>>2]|0)!=301){C=0;while(1){H=C<<1;I=+p[D+(H<<3)>>3];p[F+(C<<3)>>3]=I;J=+p[D+((H|1)<<3)>>3];p[G+(C<<3)>>3]=J;K=+$(+I);p[t>>3]=K;H=k[t>>2]|0;E=k[t+4>>2]|0;if(E>>>0>2146435072|(E|0)==2146435072&H>>>0>0){L=12;break b}if((H|0)==0&(E|0)==2146435072){L=36;break b}K=+$(+J);p[t>>3]=K;E=k[t>>2]|0;H=k[t+4>>2]|0;if(H>>>0>2146435072|(H|0)==2146435072&E>>>0>0){L=60;break}if((E|0)==0&(H|0)==2146435072){L=84;break}C=C+1|0;if((C|0)>=(A|0))break a}if((L|0)==60){C=q+56|0;H=q+4|0;k[q>>2]=27524;k[C>>2]=27544;B=0;wa(508,q+56|0,H|0);E=B;B=0;if(E&1){E=Rb()|0;M=Q;N=E;vva(C);Qb(N|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[C>>2]=27488;B=0;va(448,H|0);E=B;B=0;do if(E&1){b=Rb()|0;O=Q;P=b}else{k[H>>2]=27560;b=q+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[q+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,H|0,d|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(d);Yua(b);Ava(H);O=S;P=R;break}Yua(d);B=0;R=Ia(40,q|0,135564,28)|0;S=B;B=0;c:do if(!(S&1)?(B=0,Xa(239,R|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,s|0,125033,80);U=B;B=0;do if(!(U&1)){B=0;eb(502,u|0,125407,28);V=B;B=0;if(V&1){V=Rb()|0;W=Q;Yua(s);X=V;Y=W;break}B=0;wa(510,v|0,H|0);W=B;B=0;if(W&1){W=Rb()|0;Z=1;_=Q;aa=W}else{B=0;ua(163,T|0,s|0,u|0,2420,v|0);W=B;B=0;if(W&1)ba=1;else{B=0;eb(503,T|0,1240,229);B=0;ba=0}W=Rb()|0;V=Q;Yua(v);Z=ba;_=V;aa=W}Yua(u);Yua(s);if(Z){X=aa;Y=_}else{ca=_;da=aa;break c}}else{W=Rb()|0;X=W;Y=Q}while(0);zb(T|0);ca=Y;da=X}else L=75;while(0);if((L|0)==75){R=Rb()|0;ca=Q;da=R}k[q>>2]=27468;k[C>>2]=27488;k[H>>2]=27560;Yua(b);Ava(H);vva(C);ea=ca;fa=da;Qb(fa|0)}while(0);M=O;N=P;vva(C);Qb(N|0)}else if((L|0)==84){H=w+56|0;E=w+4|0;k[w>>2]=27524;k[H>>2]=27544;B=0;wa(508,w+56|0,E|0);R=B;B=0;if(R&1){R=Rb()|0;ga=Q;ha=R;vva(H);Qb(ha|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[H>>2]=27488;B=0;va(448,E|0);R=B;B=0;do if(R&1){S=Rb()|0;ia=Q;ja=S}else{k[E>>2]=27560;S=w+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[w+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,E|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;W=Q;Yua(d);Yua(S);Ava(E);ia=W;ja=U;break}Yua(d);B=0;U=Ia(40,w|0,135593,28)|0;W=B;B=0;d:do if(!(W&1)?(B=0,Xa(239,U|0,0)|0,V=B,B=0,!(V&1)):0){V=Ab(20)|0;B=0;eb(502,x|0,125033,80);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,y|0,125407,28);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(x);na=la;oa=ma;break}B=0;wa(510,z|0,E|0);ma=B;B=0;if(ma&1){ma=Rb()|0;pa=1;qa=Q;ra=ma}else{B=0;ua(163,V|0,x|0,y|0,2421,z|0);ma=B;B=0;if(ma&1)sa=1;else{B=0;eb(503,V|0,1240,229);B=0;sa=0}ma=Rb()|0;la=Q;Yua(z);pa=sa;qa=la;ra=ma}Yua(y);Yua(x);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break d}}else{ma=Rb()|0;na=ma;oa=Q}while(0);zb(V|0);ta=oa;xa=na}else L=99;while(0);if((L|0)==99){U=Rb()|0;ta=Q;xa=U}k[w>>2]=27468;k[H>>2]=27488;k[E>>2]=27560;Yua(S);Ava(E);vva(H);ea=ta;fa=xa;Qb(fa|0)}while(0);ga=ia;ha=ja;vva(H);Qb(ha|0)}}else{E=0;while(1){K=+p[D+(E<<3)>>3];p[F+(E<<3)>>3]=K;p[G+(E<<3)>>3]=0.0;J=+$(+K);p[t>>3]=J;R=k[t>>2]|0;C=k[t+4>>2]|0;if(C>>>0>2146435072|(C|0)==2146435072&R>>>0>0){L=12;break b}if((R|0)==0&(C|0)==2146435072){L=36;break b}E=E+1|0;if((E|0)>=(A|0))break a}}while(0);if((L|0)==12){E=g+56|0;H=g+4|0;k[g>>2]=27524;k[E>>2]=27544;B=0;wa(508,g+56|0,H|0);C=B;B=0;if(C&1){C=Rb()|0;ya=Q;za=C;vva(E);Qb(za|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[E>>2]=27488;B=0;va(448,H|0);C=B;B=0;do if(C&1){R=Rb()|0;Aa=Q;Ba=R}else{k[H>>2]=27560;R=g+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,H|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;W=Q;Yua(d);Yua(R);Ava(H);Aa=W;Ba=U;break}Yua(d);B=0;U=Ia(40,g|0,135564,28)|0;W=B;B=0;e:do if(!(W&1)?(B=0,Xa(239,U|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,125033,80);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,i|0,125407,28);T=B;B=0;if(T&1){T=Rb()|0;ma=Q;Yua(h);Ca=ma;Da=T;break}B=0;wa(510,j|0,H|0);T=B;B=0;if(T&1){T=Rb()|0;Ea=Q;Fa=T;Ga=1}else{B=0;ua(163,b|0,h|0,i|0,2418,j|0);T=B;B=0;if(T&1)Ha=1;else{B=0;eb(503,b|0,1240,229);B=0;Ha=0}T=Rb()|0;ma=Q;Yua(j);Ea=ma;Fa=T;Ga=Ha}Yua(i);Yua(h);if(Ga){Ca=Ea;Da=Fa}else{Ja=Ea;Ka=Fa;break e}}else{T=Rb()|0;Ca=Q;Da=T}while(0);zb(b|0);Ja=Ca;Ka=Da}else L=27;while(0);if((L|0)==27){U=Rb()|0;Ja=Q;Ka=U}k[g>>2]=27468;k[E>>2]=27488;k[H>>2]=27560;Yua(R);Ava(H);vva(E);ea=Ja;fa=Ka;Qb(fa|0)}while(0);ya=Aa;za=Ba;vva(E);Qb(za|0)}else if((L|0)==36){H=l+56|0;C=l+4|0;k[l>>2]=27524;k[H>>2]=27544;B=0;wa(508,l+56|0,C|0);U=B;B=0;if(U&1){U=Rb()|0;La=Q;Ma=U;vva(H);Qb(Ma|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[H>>2]=27488;B=0;va(448,C|0);U=B;B=0;do if(U&1){W=Rb()|0;Na=Q;Oa=W}else{k[C>>2]=27560;W=l+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[l+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);ka=B;B=0;if(ka&1){ka=Rb()|0;S=Q;Yua(d);Yua(W);Ava(C);Na=S;Oa=ka;break}Yua(d);B=0;ka=Ia(40,l|0,135593,28)|0;S=B;B=0;f:do if(!(S&1)?(B=0,Xa(239,ka|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,m|0,125033,80);ma=B;B=0;do if(!(ma&1)){B=0;eb(502,n|0,125407,28);la=B;B=0;if(la&1){la=Rb()|0;Pa=Q;Yua(m);Qa=la;Ra=Pa;break}B=0;wa(510,o|0,C|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Sa=1;Ta=Q;Ua=Pa}else{B=0;ua(163,T|0,m|0,n|0,2419,o|0);Pa=B;B=0;if(Pa&1)Va=1;else{B=0;eb(503,T|0,1240,229);B=0;Va=0}Pa=Rb()|0;la=Q;Yua(o);Sa=Va;Ta=la;Ua=Pa}Yua(n);Yua(m);if(Sa){Qa=Ua;Ra=Ta}else{Wa=Ta;Ya=Ua;break f}}else{Pa=Rb()|0;Qa=Pa;Ra=Q}while(0);zb(T|0);Wa=Ra;Ya=Qa}else L=51;while(0);if((L|0)==51){ka=Rb()|0;Wa=Q;Ya=ka}k[l>>2]=27468;k[H>>2]=27488;k[C>>2]=27560;Yua(W);Ava(C);vva(H);ea=Wa;fa=Ya;Qb(fa|0)}while(0);La=Na;Ma=Oa;vva(H);Qb(Ma|0)}}while(0);Ma=k[c>>2]|0;Oa=k[Ma+48>>2]|0;Na=Hc[k[Ma+128>>2]&511](c)|0;rd[Oa&511](c,638,F,Na);Na=k[c>>2]|0;Oa=k[Na+48>>2]|0;Ma=Hc[k[Na+128>>2]&511](c)|0;rd[Oa&511](c,639,G,Ma);Tqa(D);Tqa(F);Tqa(G);G=k[e>>2]|0;if(!G){r=a;return}Tqa(G);r=a;return}function Q6(a,b){a=a|0;b=b|0;return}function R6(a){a=a|0;Sqa(a);return}function S6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=r;r=r+16|0;d=a;Fka(c,d,125463);if((k[d>>2]|0)==3){r=a;return}qoa(b,c,125629,484,738,0);r=a;return}function T6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;a=r;r=r+16|0;d=a+8|0;e=a;f=a+12|0;Fka(c,f,125463);if((k[f>>2]|0)!=3){r=a;return}doa(c);k[e>>2]=137052;Ska(c,1,e);e=c+60|0;f=k[e>>2]|0;a:do if((f|0)>0){g=c+76|0;h=c+32|0;j=c+104|0;l=f;m=0;while(1){if(!(i[(k[h>>2]|0)+((k[(k[g>>2]|0)+((m<<2|2)<<2)>>2]|0)+-1)>>0]|0)){n=m+1|0;o=l}else{p=Qqa(48)|0;q=m+1|0;B=0;La(36,p|0,q+(k[j>>2]|0)|0,m|0,m|0,c|0,484);s=B;B=0;if(s&1){t=p;break}ih(b,p)|0;n=q;o=k[e>>2]|0}if((n|0)<(o|0)){l=o;m=n}else break a}m=Rb()|0;Sqa(t);Qb(m|0)}while(0);k[d>>2]=137052;Lka(c,1,d);r=a;return}function U6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=r;r=r+208|0;d=a+8|0;e=a;f=a+196|0;g=a+192|0;h=a+56|0;i=a+40|0;j=a+28|0;l=a+16|0;Fka(c,g,125463);m=(k[c+40>>2]|0)==302;do if((k[g>>2]|0)==3){if(m){n=h+56|0;o=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,o|0,f|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);Yua(t);Ava(o);u=x;v=w;break}Yua(f);B=0;w=Ia(40,h|0,132101,25)|0;x=B;B=0;if(!(x&1)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,i|0,125497,84);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,145111,11);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(i);A=z;C=y;break}B=0;wa(510,l|0,o|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;F=1}else{B=0;ua(163,w|0,i|0,j|0,59,l|0);y=B;B=0;if(y&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}y=Rb()|0;z=Q;Yua(l);D=z;E=y;F=G}Yua(j);Yua(i);if(F){A=D;C=E}else{H=D;I=E;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);Qb(I|0)}}else{y=Rb()|0;A=Q;C=y}while(0);zb(w|0);H=A;I=C;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);Qb(I|0)}x=Rb()|0;H=Q;I=x;k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);Qb(I|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}}else{if(m?(k[e>>2]=136615,k[e+4>>2]=136636,Ska(c,2,e),(k[g>>2]|0)==3):0)break;hoa(b,c,484,738,534);k[d>>2]=136615;J=d+4|0;k[J>>2]=136636;Lka(c,2,d);r=a;return}while(0);hoa(b,c,484,739,534);k[d>>2]=136615;J=d+4|0;k[J>>2]=136636;Lka(c,2,d);r=a;return}function V6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function W6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;a=r;r=r+16|0;f=a;Fka(c,f,125463);g=(k[f>>2]|0)==3?739:738;f=c+56|0;h=k[f>>2]|0;if((h|0)>0){j=c+32|0;l=h;h=0;m=0;while(1){if(!(i[(k[j>>2]|0)+m>>0]|0)){n=l;o=h}else{p=qh(b,h)|0;Uc[k[(k[p>>2]|0)+480>>2]&63](p,m,c,d,e,g);n=k[f>>2]|0;o=h+1|0}m=m+1|0;if((m|0)>=(n|0))break;else{l=n;h=o}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,135923,674);Zka(c,b,135944,677);Zka(c,b,134027,39);Zka(c,b,134252,388);Zka(c,b,126035,36);if((k[c+40>>2]|0)==300){r=a;return}Zka(c,b,136615,287);Zka(c,b,136636,288);r=a;return}function X6(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;YN(b,Ika(c,125463,35)|0);return}function Y6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125497,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,119,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Z6(a,b){a=a|0;b=b|0;return 0}function _6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125497,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,126,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function $6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){i=0;r=c;return i|0}j=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;switch(Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0){case 742:case 738:{l=a7(a,j)|0;break}case 739:{l=b7(a,j)|0;break}default:{a=e+56|0;m=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,m|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);Yua(q);Ava(m);s=v;t=u;break}Yua(d);B=0;u=Ia(40,e|0,132447,13)|0;v=B;B=0;if(((((!(v&1)?(B=0,v=ya(k[(k[b>>2]|0)+112>>2]|0,b|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=ya(427,v|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(w)|0,B=0,x=Ia(40,u|0,w|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,f|0,125497,84);x=B;B=0;do if(!(x&1)){B=0;eb(502,g|0,144189,13);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(f);y=u;z=w;break}B=0;wa(510,h|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,v|0,f|0,g|0,142,h|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,v|0,1240,229);B=0;E=0}w=Rb()|0;u=Q;Yua(h);A=u;C=w;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(v|0);F=y;G=z;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[e>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}while(0);o=s;p=t;vva(a);Qb(p|0)}}cp(b,d,298);if((k[d>>2]|0)!=300?(ap(j),(j|0)!=0):0)Ec[k[(k[j>>2]|0)+4>>2]&1023](j);i=l;r=c;return i|0}function a7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0;a=r;r=r+112|0;c=a+96|0;d=a+92|0;e=a+80|0;f=a+72|0;g=a+64|0;h=a+48|0;i=a+32|0;j=a+88|0;l=a;k[j>>2]=0;m=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;n=gq(b,534)|0;o=m<<1;q=o>>>0>536870911?-1:o<<3;o=Rqa(q)|0;s=Rqa(q)|0;Uo(b,j);cp(b,d,298);cp(b,c,35);if((k[d>>2]|0)==300){d=Wo(b,674)|0;t=d;u=Wo(b,677)|0}else{d=Wo(b,673)|0;t=d;u=Wo(b,676)|0}v=+Zc[k[(k[b>>2]|0)+72>>2]&255](b);d=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[d>>2]|0)+8>>2]&511](d)|0;a:do if((q|0)<(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0)){w=i+8|0;x=d+8|0;y=l+8|0;z=l+16|0;A=l+24|0;B=n+12|0;C=v*.5;D=q;while(1){Fc[k[(k[d>>2]|0)+24>>2]&1023](d,D);rd[k[(k[b>>2]|0)+260>>2]&511](b,e,k[j>>2]|0,d);E=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;F=Rqa(E>>>0>536870911?-1:E<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,F,d);if((E|0)>0){G=0;do{H=+p[F+(G<<3)>>3];p[o+(G<<3)>>3]=H;p[o+(G+E<<3)>>3]=H;G=G+1|0}while((G|0)!=(E|0))}Tqa(F);E=k[j>>2]|0;G=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;I=G<<1;J=Rqa(I>>>0>536870911?-1:I<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,J,E,d);if((G|0)>0){E=0;do{p[s+(E<<3)>>3]=+p[J+(E<<3)>>3];I=E+G|0;p[s+(I<<3)>>3]=+p[J+(I<<3)>>3];E=E+1|0}while((E|0)!=(G|0))}Tqa(J);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,d);nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,d);rd[k[(k[t>>2]|0)+60>>2]&511](t,h,k[j>>2]|0,d);rd[k[(k[u>>2]|0)+60>>2]&511](u,i,k[j>>2]|0,d);H=+p[w>>3];K=+p[x>>3]*+p[e>>3];p[l>>3]=+p[h>>3]*K;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;p[A>>3]=H*K;ZX(o,2,m,1,l,2,2,0,o,2,m,0,k[B>>2]|0,1)|0;p[l>>3]=K*+p[f>>3];p[A>>3]=K*+p[g>>3];ZX(o,2,m,1,l,2,2,0,s,2,m,0,k[B>>2]|0,1)|0;G=k[c>>2]|0;switch(G|0){case 1:{H=+p[f>>3];L=+p[g>>3];M=v/(+aa(+(H*H+L*L))*2.0);N=H*M;p[l>>3]=H*N;O=M*L;p[z>>3]=O*H;p[y>>3]=L*N;p[A>>3]=L*O;P=16;break}case 2:{Fc[k[(k[t>>2]|0)+64>>2]&1023](t,f);Fc[k[(k[u>>2]|0)+64>>2]&1023](u,g);O=C*+$(+(+p[f>>3]));p[l>>3]=O;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;O=C*+$(+(+p[g>>3]));p[A>>3]=O;Q=k[c>>2]|0;P=15;break}default:{Q=G;P=15}}if((P|0)==15?(P=0,(Q+-1|0)>>>0<2):0)P=16;if((P|0)==16){P=0;p[l>>3]=K*+p[l>>3];p[z>>3]=K*+p[z>>3];p[y>>3]=K*+p[y>>3];p[A>>3]=K*+p[A>>3];ZX(s,2,m,1,l,2,2,0,s,2,m,0,k[B>>2]|0,1)|0}D=D+1|0;if((D|0)>=(Hc[k[(k[d>>2]|0)+12>>2]&511](d)|0))break a}}while(0);m=k[j>>2]|0;if(!m){k[j>>2]=0;Tqa(o);Tqa(s);R=k[d>>2]|0;S=R+4|0;T=k[S>>2]|0;Ec[T&1023](d);r=a;return n|0}Tqa(m);k[j>>2]=0;Tqa(o);Tqa(s);R=k[d>>2]|0;S=R+4|0;T=k[S>>2]|0;Ec[T&1023](d);r=a;return n|0}function b7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+96|0;c=a+92|0;d=a+80|0;e=a+72|0;f=a+64|0;g=a+48|0;h=a+32|0;i=a+88|0;j=a;k[i>>2]=0;l=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;m=gq(b,534)|0;n=l<<1;o=n>>>0>536870911?-1:n<<3;n=Rqa(o)|0;q=Rqa(o)|0;Uo(b,i);cp(b,c,298);if((k[c>>2]|0)==300){c=Wo(b,674)|0;s=c;t=Wo(b,677)|0}else{c=Wo(b,673)|0;s=c;t=Wo(b,676)|0}c=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;o=Hc[k[(k[c>>2]|0)+8>>2]&511](c)|0;if((o|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0)){u=c+8|0;v=j+8|0;w=j+24|0;x=m+12|0;y=o;do{Fc[k[(k[c>>2]|0)+24>>2]&1023](c,y);rd[k[(k[b>>2]|0)+260>>2]&511](b,d,k[i>>2]|0,c);nd[k[(k[s>>2]|0)+48>>2]&1023](s,e,c);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,c);rd[k[(k[s>>2]|0)+60>>2]&511](s,g,k[i>>2]|0,c);rd[k[(k[t>>2]|0)+60>>2]&511](t,h,k[i>>2]|0,c);o=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;z=Rqa(o>>>0>536870911?-1:o<<3)|0;nd[k[(k[b>>2]|0)+336>>2]&1023](b,z,c);if((o|0)>0){A=0;do{B=+p[z+(A<<3)>>3];p[q+(A<<3)>>3]=B;p[q+(A+o<<3)>>3]=B;A=A+1|0}while((A|0)!=(o|0))}Tqa(z);o=k[i>>2]|0;A=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;C=A<<1;D=Rqa(C>>>0>536870911?-1:C<<3)|0;rd[k[(k[b>>2]|0)+340>>2]&511](b,D,o,c);if((A|0)>0){o=0;do{p[n+(o<<3)>>3]=+p[D+(o<<3)>>3];C=o+A|0;p[n+(C<<3)>>3]=+p[D+(C<<3)>>3];o=o+1|0}while((o|0)!=(A|0))}Tqa(D);B=-(+p[u>>3]*+p[d>>3]);p[j>>3]=+p[e>>3]*B;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;p[w>>3]=+p[f>>3]*B;ZX(n,2,l,1,j,2,2,0,q,2,l,0,k[x>>2]|0,1)|0;y=y+1|0}while((y|0)<(Hc[k[(k[c>>2]|0)+12>>2]&511](c)|0))}y=k[i>>2]|0;if(!y){k[i>>2]=0;Tqa(n);Tqa(q);E=k[c>>2]|0;F=E+4|0;G=k[F>>2]|0;Ec[G&1023](c);r=a;return m|0}Tqa(y);k[i>>2]=0;Tqa(n);Tqa(q);E=k[c>>2]|0;F=E+4|0;G=k[F>>2]|0;Ec[G&1023](c);r=a;return m|0}function c7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;if(!(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0)){h=0;r=a;return h|0}i=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;switch(Hc[k[(k[b>>2]|0)+112>>2]&511](b)|0){case 742:case 738:{j=d7(0,i)|0;break}case 739:{j=e7(0,i)|0;break}default:{l=d+56|0;m=d+4|0;k[d>>2]=27524;k[l>>2]=27544;B=0;wa(508,d+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;u=Ia(40,d|0,132447,13)|0;v=B;B=0;if(((((!(v&1)?(B=0,v=ya(k[(k[b>>2]|0)+112>>2]|0,b|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=ya(427,v|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(w)|0,B=0,x=Ia(40,u|0,w|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,e|0,125497,84);x=B;B=0;do if(!(x&1)){B=0;eb(502,f|0,144203,13);w=B;B=0;if(w&1){w=Rb()|0;u=Q;Yua(e);y=u;z=w;break}B=0;wa(510,g|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,v|0,e|0,f|0,334,g|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,v|0,1240,229);B=0;E=0}w=Rb()|0;u=Q;Yua(g);A=u;C=w;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(v|0);F=y;G=z;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[d>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);Qb(G|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}}cp(b,c,298);if((k[c>>2]|0)!=300?(ap(i),(i|0)!=0):0)Ec[k[(k[i>>2]|0)+4>>2]&1023](i);h=j;r=a;return h|0}function d7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+48|0;c=a+24|0;d=a+16|0;e=a+8|0;f=a;g=a+32|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,g);l=Wo(b,39)|0;m=Wo(b,388)|0;n=Wo(b,36)|0;o=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;a:do if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=o+8|0;t=i+4|0;if((h|0)>0)u=q;else{v=q;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,v);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=v+1|0;if((v|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))break a}}do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=k[t>>2]|0;w=0;do{x=v+(w<<3)|0;p[x>>3]=+p[x>>3]+ +p[j+(w<<3)>>3]*(+p[f>>3]*+p[s>>3]*(+p[e>>3]-+p[d>>3]-+p[c>>3]));w=w+1|0}while((w|0)!=(h|0));u=u+1|0}while((u|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}while(0);u=k[g>>2]|0;if(!u){k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}Tqa(u);k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}function e7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+48|0;c=a+24|0;d=a+16|0;e=a+8|0;f=a;g=a+32|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,g);l=Wo(b,39)|0;m=Wo(b,388)|0;n=Wo(b,36)|0;o=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;a:do if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=o+8|0;t=i+4|0;if((h|0)>0)u=q;else{v=q;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,v);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=v+1|0;if((v|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))break a}}do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,e,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=k[t>>2]|0;w=0;do{x=v+(w<<3)|0;p[x>>3]=+p[x>>3]+ +p[j+(w<<3)>>3]*(+p[f>>3]*+p[s>>3]*(+p[e>>3]-+p[d>>3]-+p[c>>3]));w=w+1|0}while((w|0)!=(h|0));u=u+1|0}while((u|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}while(0);u=k[g>>2]|0;if(!u){k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}Tqa(u);k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}function f7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125497,84);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,480,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function g7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0;a=r;r=r+688|0;f=a+668|0;g=a+120|0;h=a+112|0;i=a+104|0;j=a+96|0;l=a+72|0;m=a+64|0;n=a+56|0;o=a+40|0;q=a+24|0;s=a+16|0;t=a+8|0;u=a;v=a+664|0;w=a+660|0;x=a+656|0;y=a+640|0;z=a+504|0;A=a+644|0;C=a+488|0;D=a+336|0;E=a+352|0;F=a+188|0;G=a+176|0;H=a+164|0;I=a+200|0;J=a+152|0;K=a+140|0;L=a+128|0;if(!($p(c)|0)){r=a;return}k[v>>2]=0;k[w>>2]=0;cp(c,x,199);qp(c,w,0,180);cp(c,y,476);if((k[y>>2]|0)!=489){y=z+56|0;M=z+4|0;k[z>>2]=27524;k[y>>2]=27544;B=0;wa(508,z+56|0,M|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(y);Qb(P|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[y>>2]=27488;B=0;va(448,M|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[M>>2]=27560;R=z+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[z+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,M|0,f|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(f);Yua(R);Ava(M);S=V;T=U;break}Yua(f);B=0;U=Ia(40,z|0,149721,19)|0;V=B;B=0;a:do if(!(V&1)?(B=0,Xa(239,U|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,A|0,125497,84);X=B;B=0;do if(!(X&1)){B=0;eb(502,C|0,138252,9);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(A);_=Y;$=Z;break}B=0;wa(510,D|0,M|0);Z=B;B=0;if(Z&1){Z=Rb()|0;ba=Z;ca=Q;da=1}else{B=0;ua(163,W|0,A|0,C|0,500,D|0);Z=B;B=0;if(Z&1)ea=1;else{B=0;eb(503,W|0,1240,229);B=0;ea=0}Z=Rb()|0;Y=Q;Yua(D);ba=Z;ca=Y;da=ea}Yua(C);Yua(A);if(da){_=ba;$=ca}else{fa=ba;ga=ca;break a}}else{Y=Rb()|0;_=Y;$=Q}while(0);zb(W|0);fa=_;ga=$}else ha=18;while(0);if((ha|0)==18){U=Rb()|0;fa=U;ga=Q}k[z>>2]=27468;k[y>>2]=27488;k[M>>2]=27560;Yua(R);Ava(M);vva(y);ia=ga;ja=fa;Qb(ja|0)}while(0);O=S;P=T;vva(y);Qb(P|0)}if((d|0)!=353){P=E+56|0;y=E+4|0;k[E>>2]=27524;k[P>>2]=27544;B=0;wa(508,E+56|0,y|0);T=B;B=0;if(T&1){T=Rb()|0;ka=Q;la=T;vva(P);Qb(la|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[P>>2]=27488;B=0;va(448,y|0);T=B;B=0;do if(T&1){S=Rb()|0;ma=Q;na=S}else{k[y>>2]=27560;S=E+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[E+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,y|0,f|0);O=B;B=0;if(O&1){O=Rb()|0;fa=Q;Yua(f);Yua(S);Ava(y);ma=fa;na=O;break}Yua(f);B=0;O=Ia(40,E|0,125582,8)|0;fa=B;B=0;b:do if((((!(fa&1)?(B=0,ga=ya(427,d|0)|0,M=B,B=0,!(M&1)):0)?(M=Lta(ga)|0,B=0,z=Ia(40,O|0,ga|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,M=Ia(40,z|0,144645,14)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,F|0,125497,84);z=B;B=0;do if(!(z&1)){B=0;eb(502,G|0,138252,9);ga=B;B=0;if(ga&1){ga=Rb()|0;$=Q;Yua(F);oa=$;pa=ga;break}B=0;wa(510,H|0,y|0);ga=B;B=0;if(ga&1){ga=Rb()|0;qa=1;ra=ga;sa=Q}else{B=0;ua(163,M|0,F|0,G|0,501,H|0);ga=B;B=0;if(ga&1)ta=1;else{B=0;eb(503,M|0,1240,229);B=0;ta=0}ga=Rb()|0;$=Q;Yua(H);qa=ta;ra=ga;sa=$}Yua(G);Yua(F);if(qa){oa=sa;pa=ra}else{xa=ra;za=sa;break b}}else{$=Rb()|0;oa=Q;pa=$}while(0);zb(M|0);xa=pa;za=oa}else ha=45;while(0);if((ha|0)==45){O=Rb()|0;xa=O;za=Q}k[E>>2]=27468;k[P>>2]=27488;k[y>>2]=27560;Yua(S);Ava(y);vva(P);ia=za;ja=xa;Qb(ja|0)}while(0);ka=ma;la=na;vva(P);Qb(la|0)}la=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;P=la>>>0>536870911?-1:la<<3;na=Rqa(P)|0;ma=la<<1;ka=Rqa(ma>>>0>536870911?-1:ma<<3)|0;ma=Rqa(P)|0;if(la)WEa(ma|0,0,la<<3|0)|0;P=Rqa(la>>>0>1073741823?-1:la<<2)|0;Uo(c,v);Mp(c,P,e,0);e=Wo(c,353)|0;xa=Wo(c,201)|0;za=Wo(c,179)|0;y=Wo(c,674)|0;E=Wo(c,677)|0;oa=Wo(c,388)|0;pa=Wo(c,39)|0;sa=Wo(c,36)|0;ra=ed[k[(k[c>>2]|0)+308>>2]&511](c,4)|0;qa=Hc[k[(k[ra>>2]|0)+8>>2]&511](ra)|0;c:do if((qa|0)<(Hc[k[(k[ra>>2]|0)+12>>2]&511](ra)|0)){F=(la|0)>0;G=l+8|0;ta=ra+8|0;H=q+8|0;d=qa;d:while(1){Fc[k[(k[ra>>2]|0)+24>>2]&1023](ra,d);nd[k[(k[e>>2]|0)+48>>2]&1023](e,i,ra);rd[k[(k[e>>2]|0)+60>>2]&511](e,l,k[v>>2]|0,ra);nd[k[(k[xa>>2]|0)+48>>2]&1023](xa,j,ra);rd[k[(k[c>>2]|0)+260>>2]&511](c,g,k[v>>2]|0,ra);nd[k[(k[c>>2]|0)+356>>2]&1023](c,na,ra);rd[k[(k[c>>2]|0)+360>>2]&511](c,ka,k[v>>2]|0,ra);e:do if((k[x>>2]|0)>0){T=0;while(1){rd[k[(k[za>>2]|0)+56>>2]&511](za,h,ra,k[(k[w>>2]|0)+(T<<2)>>2]|0);switch(k[(k[w>>2]|0)+(T<<2)>>2]|0){case 669:{if(F){Aa=(+p[j>>3]-+p[i>>3])*+p[h>>3]*+p[g>>3];O=0;do{fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]+Aa*+p[ta>>3]*+p[na+(O<<3)>>3];O=O+1|0}while((O|0)!=(la|0))}break}case 689:{if(F){Aa=+p[g>>3];Ba=+p[h>>3]*+p[l>>3];O=0;do{fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]-Ba*+p[ka+(O<<3)>>3]*Aa*+p[ta>>3];O=O+1|0}while((O|0)!=(la|0));if(F){Aa=+p[g>>3];Ba=+p[h>>3]*+p[G>>3];O=0;do{fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]-Ba*+p[ka+(O+la<<3)>>3]*Aa*+p[ta>>3];O=O+1|0}while((O|0)!=(la|0))}}break}case 690:{nd[k[(k[y>>2]|0)+48>>2]&1023](y,m,ra);nd[k[(k[E>>2]|0)+48>>2]&1023](E,n,ra);Aa=+p[m>>3];Ba=+p[n>>3];Ca=+aa(+(Aa*Aa+Ba*Ba))+1.0e-09;Da=Aa/Ca;p[m>>3]=Da;Aa=Ba/Ca;p[n>>3]=Aa;if(F){Ca=+p[g>>3];Ba=+p[h>>3]*(+p[l>>3]*Da+ +p[G>>3]*Aa);O=0;do{fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]-+p[ta>>3]*(Ca*(Ba*(Da*+p[ka+(O<<3)>>3]+Aa*+p[ka+(O+la<<3)>>3])));O=O+1|0}while((O|0)!=(la|0))}break}case 691:{nd[k[(k[y>>2]|0)+48>>2]&1023](y,m,ra);nd[k[(k[E>>2]|0)+48>>2]&1023](E,n,ra);Aa=+p[m>>3];Da=+p[n>>3];Ba=+aa(+(Aa*Aa+Da*Da))+1.0e-09;Ca=Aa/Ba;p[m>>3]=Ca;Aa=Da/Ba;p[n>>3]=Aa;if(F){Ba=+p[g>>3];Da=-Aa;Aa=+p[h>>3]*(+p[l>>3]*Da+ +p[G>>3]*Ca);O=0;do{fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]-+p[ta>>3]*(Ba*(Aa*(+p[ka+(O<<3)>>3]*Da+Ca*+p[ka+(O+la<<3)>>3])));O=O+1|0}while((O|0)!=(la|0))}break}case 641:{nd[k[(k[oa>>2]|0)+48>>2]&1023](oa,u,ra);nd[k[(k[pa>>2]|0)+48>>2]&1023](pa,t,ra);nd[k[(k[sa>>2]|0)+48>>2]&1023](sa,s,ra);nd[k[(k[y>>2]|0)+48>>2]&1023](y,m,ra);rd[k[(k[y>>2]|0)+60>>2]&511](y,o,k[v>>2]|0,ra);nd[k[(k[E>>2]|0)+48>>2]&1023](E,n,ra);rd[k[(k[E>>2]|0)+60>>2]&511](E,q,k[v>>2]|0,ra);if(F){Ca=+p[m>>3];Da=+p[n>>3];Aa=+p[h>>3]*+p[g>>3];Ba=+p[o>>3]+ +p[H>>3];Ea=Ca*+p[l>>3]+Da*+p[G>>3]+ +p[i>>3]*Ba;Fa=+p[u>>3]-+p[t>>3]-+p[s>>3];O=0;do{Ga=Ca*+p[ka+(O<<3)>>3]+Da*+p[ka+(O+la<<3)>>3]+Ba*+p[na+(O<<3)>>3];fa=ma+(O<<3)|0;p[fa>>3]=+p[fa>>3]-Aa*+p[ta>>3]*(Ea*Ga-Ga*Fa);O=O+1|0}while((O|0)!=(la|0))}break}default:{Ha=T;break d}}T=T+1|0;if((T|0)>=(k[x>>2]|0))break e}}while(0);d=d+1|0;if((d|0)>=(Hc[k[(k[ra>>2]|0)+12>>2]&511](ra)|0))break c}d=I+56|0;ta=I+4|0;k[I>>2]=27524;k[d>>2]=27544;B=0;wa(508,I+56|0,ta|0);G=B;B=0;if(G&1){G=Rb()|0;Ja=Q;Ka=G;vva(d);Qb(Ka|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[d>>2]=27488;B=0;va(448,ta|0);G=B;B=0;do if(G&1){H=Rb()|0;La=Q;Ma=H}else{k[ta>>2]=27560;H=I+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[I+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ta|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;S=Q;Yua(f);Yua(H);Ava(ta);La=S;Ma=F;break}Yua(f);B=0;F=Ia(40,I|0,125591,9)|0;S=B;B=0;f:do if((((!(S&1)?(B=0,M=ya(427,k[(k[w>>2]|0)+(Ha<<2)>>2]|0)|0,T=B,B=0,!(T&1)):0)?(T=Lta(M)|0,B=0,O=Ia(40,F|0,M|0,T|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,O|0,146481,18)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,T|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,J|0,125497,84);O=B;B=0;do if(!(O&1)){B=0;eb(502,K|0,138252,9);M=B;B=0;if(M&1){M=Rb()|0;fa=Q;Yua(J);Na=fa;Oa=M;break}B=0;wa(510,L|0,ta|0);M=B;B=0;if(M&1){M=Rb()|0;Pa=1;Qa=M;Ra=Q}else{B=0;ua(163,T|0,J|0,K|0,582,L|0);M=B;B=0;if(M&1)Sa=1;else{B=0;eb(503,T|0,1240,229);B=0;Sa=0}M=Rb()|0;fa=Q;Yua(L);Pa=Sa;Qa=M;Ra=fa}Yua(K);Yua(J);if(Pa){Na=Ra;Oa=Qa}else{Ta=Qa;Ua=Ra;break f}}else{fa=Rb()|0;Na=Q;Oa=fa}while(0);zb(T|0);Ta=Oa;Ua=Na}else ha=102;while(0);if((ha|0)==102){F=Rb()|0;Ta=F;Ua=Q}k[I>>2]=27468;k[d>>2]=27488;k[ta>>2]=27560;Yua(H);Ava(ta);vva(d);ia=Ua;ja=Ta;Qb(ja|0)}while(0);Ja=La;Ka=Ma;vva(d);Qb(Ka|0)}while(0);if(k[b>>2]|0){Ka=k[k[b+4>>2]>>2]|0;Dc[k[(k[Ka>>2]|0)+16>>2]&255](Ka,la,P,ma,1)}la=k[v>>2]|0;if(la)Tqa(la);k[v>>2]=0;Tqa(na);Tqa(ma);Tqa(P);P=k[w>>2]|0;if(P)Tqa(P);k[w>>2]=0;if(ra)Ec[k[(k[ra>>2]|0)+4>>2]&1023](ra);r=a;return}function h7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;d=a+180|0;e=a+176|0;f=a+40|0;g=a+24|0;h=a+12|0;i=a;cp(c,e,298);switch(k[e>>2]|0){case 300:{nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,353);r=a;return}case 302:{nd[k[(k[c>>2]|0)+228>>2]&1023](c,b,353);r=a;return}default:{a=f+56|0;b=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;j=Q;l=c;vva(a);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144639,5)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,125497,84);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,137199,23);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,609,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[a>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}}}function i7(a,b){a=a|0;b=b|0;return}function j7(a){a=a|0;Sqa(a);return}function k7(a,b,c){a=a|0;b=b|0;c=c|0;qoa(b,c,125629,486,738,0);return}function l7(a,b,c){a=a|0;b=b|0;c=c|0;return}function m7(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,486,738,534);return}function n7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function o7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,134027,39);Zka(c,b,134252,388);Zka(c,b,126035,36);Zka(c,b,125662,379);a=c+56|0;f=k[a>>2]|0;if((f|0)<=0)return;g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}return}function p7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function q7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125688,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function r7(a,b){a=a|0;b=b|0;return 0}function s7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;a=r;r=r+224|0;c=a+204|0;d=a+8|0;e=a;f=a+200|0;g=a+64|0;h=a+48|0;i=a+36|0;j=a+24|0;k[f>>2]=0;l=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;m=Rqa(l>>>0>536870911?-1:l<<3)|0;Uo(b,f);n=Wo(b,664)|0;o=Wo(b,665)|0;q=Wo(b,339)|0;s=Wo(b,214)|0;t=+Dp(b,265);u=t*+Dp(b,65);v=Hc[k[(k[b>>2]|0)+304>>2]&511](b)|0;a:do if((l|0)>0){w=d+8|0;b:do if((n|0)!=0&(o|0)!=0){x=0;while(1){y=k[(k[v>>2]|0)+32>>2]|0;z=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[y&1023](v,z,x);nd[k[(k[s>>2]|0)+48>>2]&1023](s,e,v);nd[k[(k[n>>2]|0)+48>>2]&1023](n,d,v);nd[k[(k[o>>2]|0)+48>>2]&1023](o,w,v);t=+p[d>>3];A=+p[w>>3];C=+aa(+(t*t+A*A));if(C==0.0)break b;if(C<1.0e-05){D=t/C*1.0e5;p[d>>3]=D;E=A/C*1.0e5;p[w>>3]=E;F=D;G=E}else{F=t;G=A}A=+ba(+u,3.0)*3.90625e+21*1.0000000000000001e-24/+ba(+(+p[e>>3]*.3968502629920499),3.0)*(F*F+G*G)/5.0;p[m+(x<<3)>>3]=A;x=x+1|0;if((x|0)>=(l|0))break a}}else{x=0;while(1){z=k[(k[v>>2]|0)+32>>2]|0;y=Hc[k[(k[b>>2]|0)+128>>2]&511](b)|0;nd[z&1023](v,y,x);nd[k[(k[s>>2]|0)+48>>2]&1023](s,e,v);rd[k[(k[q>>2]|0)+60>>2]&511](q,d,k[f>>2]|0,v);A=+p[d>>3];t=+p[w>>3];E=+aa(+(A*A+t*t));if(E==0.0)break b;if(E<1.0e-05){D=A/E*1.0e5;p[d>>3]=D;C=t/E*1.0e5;p[w>>3]=C;H=D;I=C}else{H=A;I=t}t=+ba(+u,3.0)*3.90625e+21*1.0000000000000001e-24/+ba(+(+p[e>>3]*.3968502629920499),3.0)*(H*H+I*I)/5.0;p[m+(x<<3)>>3]=t;x=x+1|0;if((x|0)>=(l|0))break a}}while(0);w=g+56|0;x=g+4|0;k[g>>2]=27524;k[w>>2]=27544;B=0;wa(508,g+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;J=Q;K=y;vva(w);Qb(K|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){z=Rb()|0;L=Q;M=z}else{k[x>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(c);Yua(z);Ava(x);L=O;M=N;break}Yua(c);B=0;N=Ia(40,g|0,125774,21)|0;O=B;B=0;if(!(O&1)?(B=0,Xa(239,N|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,h|0,125688,85);O=B;B=0;do if(!(O&1)){B=0;eb(502,i|0,125796,8);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(h);S=R;T=P;break}B=0;wa(510,j|0,x|0);P=B;B=0;if(P&1){P=Rb()|0;U=Q;V=P;W=1}else{B=0;ua(163,N|0,h|0,i|0,103,j|0);P=B;B=0;if(P&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}P=Rb()|0;R=Q;Yua(j);U=R;V=P;W=X}Yua(i);Yua(h);if(W){S=U;T=V}else{Y=U;Z=V;k[g>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(z);Ava(x);vva(w);Qb(Z|0)}}else{P=Rb()|0;S=Q;T=P}while(0);zb(N|0);Y=S;Z=T;k[g>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(z);Ava(x);vva(w);Qb(Z|0)}O=Rb()|0;Y=Q;Z=O;k[g>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(z);Ava(x);vva(w);Qb(Z|0)}while(0);J=L;K=M;vva(w);Qb(K|0)}while(0);K=k[b>>2]|0;M=k[K+48>>2]|0;L=Hc[k[K+128>>2]&511](b)|0;rd[M&511](b,380,m,L);Tqa(m);m=k[f>>2]|0;if(m)Tqa(m);k[f>>2]=0;if(!v){r=a;return}Ec[k[(k[v>>2]|0)+4>>2]&1023](v);r=a;return}function t7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125688,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,130,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function u7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0;a=r;r=r+32|0;c=a+16|0;d=a+8|0;e=a;f=a+24|0;k[f>>2]=0;g=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;h=gq(b,534)|0;i=g<<1;j=Rqa(i>>>0>536870911?-1:i<<3)|0;Uo(b,f);i=Wo(b,379)|0;l=Wo(b,380)|0;if(!l){s7(0,b);m=Wo(b,380)|0}else m=l;l=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;n=Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0;if((n|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0)){o=(g|0)>0;q=l+8|0;s=h+12|0;t=n;do{Fc[k[(k[l>>2]|0)+24>>2]&1023](l,t);rd[k[(k[b>>2]|0)+340>>2]&511](b,j,k[f>>2]|0,l);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[f>>2]|0,l);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,l);nd[k[(k[i>>2]|0)+48>>2]&1023](i,e,l);if(o){n=k[s>>2]|0;u=0;do{v=j+(u<<3)|0;w=j+(u+g<<3)|0;x=ma(u,g)|0;y=0;do{z=+p[d>>3]*+ja(+(+p[e>>3]));A=n+(y+x<<3)|0;p[A>>3]=+p[A>>3]+z*+p[q>>3]*+p[c>>3]*(+p[v>>3]*+p[j+(y<<3)>>3]+ +p[w>>3]*+p[j+(y+g<<3)>>3]);y=y+1|0}while((y|0)!=(g|0));u=u+1|0}while((u|0)!=(g|0))}t=t+1|0}while((t|0)<(Hc[k[(k[l>>2]|0)+12>>2]&511](l)|0))}t=k[f>>2]|0;if(!t){k[f>>2]=0;Tqa(j);B=k[l>>2]|0;C=B+4|0;D=k[C>>2]|0;Ec[D&1023](l);r=a;return h|0}Tqa(t);k[f>>2]=0;Tqa(j);B=k[l>>2]|0;C=B+4|0;D=k[C>>2]|0;Ec[D&1023](l);r=a;return h|0}function v7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+48|0;c=a+24|0;d=a+16|0;e=a+8|0;f=a;g=a+32|0;k[g>>2]=0;h=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;i=iq(b,534)|0;j=Rqa(h>>>0>536870911?-1:h<<3)|0;Uo(b,g);l=Wo(b,388)|0;m=Wo(b,39)|0;n=Wo(b,36)|0;o=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;q=Hc[k[(k[o>>2]|0)+8>>2]&511](o)|0;a:do if((q|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0)){s=o+8|0;t=i+4|0;if((h|0)>0)u=q;else{v=q;while(1){Fc[k[(k[o>>2]|0)+24>>2]&1023](o,v);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=v+1|0;if((v|0)>=(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))break a}}do{Fc[k[(k[o>>2]|0)+24>>2]&1023](o,u);rd[k[(k[b>>2]|0)+260>>2]&511](b,f,k[g>>2]|0,o);nd[k[(k[b>>2]|0)+336>>2]&1023](b,j,o);nd[k[(k[l>>2]|0)+48>>2]&1023](l,e,o);nd[k[(k[m>>2]|0)+48>>2]&1023](m,d,o);nd[k[(k[n>>2]|0)+48>>2]&1023](n,c,o);v=k[t>>2]|0;w=0;do{x=v+(w<<3)|0;p[x>>3]=+p[x>>3]+ +p[f>>3]*+p[s>>3]*((+p[e>>3]-+p[d>>3]-+p[c>>3])*+p[j+(w<<3)>>3]);w=w+1|0}while((w|0)!=(h|0));u=u+1|0}while((u|0)<(Hc[k[(k[o>>2]|0)+12>>2]&511](o)|0))}while(0);u=k[g>>2]|0;if(!u){k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}Tqa(u);k[g>>2]=0;Tqa(j);y=k[o>>2]|0;z=y+4|0;A=k[z>>2]|0;Ec[A&1023](o);r=a;return i|0}function w7(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[c>>2]|0)+176>>2]&1023](c,b,339);return}function x7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125688,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,222,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function y7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0.0;a=r;r=r+48|0;d=a+24|0;e=a+16|0;f=a+8|0;g=a;h=a+40|0;k[h>>2]=0;nd[k[(k[c>>2]|0)+232>>2]&1023](c,b,339);b=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;i=b>>>0>536870911?-1:b<<3;j=Rqa(i)|0;l=Rqa(i)|0;m=Rqa(i)|0;Uo(c,h);i=Wo(c,377)|0;Wo(c,353)|0;n=Wo(c,339)|0;o=Wo(c,64)|0;q=Hc[k[(k[c>>2]|0)+304>>2]&511](c)|0;if((b|0)>0){s=d+8|0;if(!i){t=0;do{Fc[k[(k[q>>2]|0)+28>>2]&1023](q,t);p[g>>3]=0.0;nd[k[(k[o>>2]|0)+48>>2]&1023](o,f,q);nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,q);rd[k[(k[n>>2]|0)+60>>2]&511](n,d,k[h>>2]|0,q);u=+p[g>>3]*(-1.0/(+p[e>>3]-+p[f>>3]));v=+p[d>>3]*u;p[l+(t<<3)>>3]=v;w=+p[s>>3]*u;p[m+(t<<3)>>3]=w;u=+aa(+(v*v+w*w));p[j+(t<<3)>>3]=u;t=t+1|0}while((t|0)!=(b|0))}else{t=0;do{Fc[k[(k[q>>2]|0)+28>>2]&1023](q,t);nd[k[(k[i>>2]|0)+48>>2]&1023](i,g,q);nd[k[(k[o>>2]|0)+48>>2]&1023](o,f,q);nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,q);rd[k[(k[n>>2]|0)+60>>2]&511](n,d,k[h>>2]|0,q);u=+p[g>>3]*(-1.0/(+p[e>>3]-+p[f>>3]));w=+p[d>>3]*u;p[l+(t<<3)>>3]=w;v=+p[s>>3]*u;p[m+(t<<3)>>3]=v;u=+aa(+(w*w+v*v));p[j+(t<<3)>>3]=u;t=t+1|0}while((t|0)!=(b|0))}}rd[k[(k[c>>2]|0)+48>>2]&511](c,674,l,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,677,m,738);rd[k[(k[c>>2]|0)+48>>2]&511](c,671,j,738);if(q)Ec[k[(k[q>>2]|0)+4>>2]&1023](q);Tqa(m);Tqa(l);Tqa(j);j=k[h>>2]|0;if(!j){r=a;return}Tqa(j);r=a;return}function z7(a,b){a=a|0;b=b|0;return}function A7(a){a=a|0;Sqa(a);return}function B7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135868,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,9,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0);return 0}function C7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136199,16);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,12,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function D7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,136133,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,15,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function E7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,145111,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,18,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function F7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135838,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,21,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function G7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,135856,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,24,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function H7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,29,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function I7(a,b){a=a|0;b=b|0;return 0}function J7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,36,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function K7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144189,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function L7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144203,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function M7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function N7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,48,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function O7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125836,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,137199,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function P7(a,b){a=a|0;b=b|0;return}function Q7(a){a=a|0;Sqa(a);return}function R7(a,b,c){a=a|0;b=b|0;c=c|0;return}function S7(a,b,c){a=a|0;b=b|0;c=c|0;return}function T7(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;if((k[c+40>>2]|0)!=302){hoa(b,c,490,738,534);r=a;return}a=e+56|0;c=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;i=Q;j=b;vva(a);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;m=Q;n=l}else{k[c>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(c);m=p;n=o;break}Yua(d);B=0;o=Ia(40,e|0,132101,25)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,125951,83);p=B;B=0;do if(!(p&1)){B=0;eb(502,g|0,145111,11);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);t=s;u=q;break}B=0;wa(510,h|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,f|0,g|0,20,h|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(h);v=s;w=q;x=y}Yua(g);Yua(f);if(x){t=v;u=w}else{z=v;A=w;k[e>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(a);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[e>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(a);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[e>>2]=27468;k[a>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(a);Qb(A|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function U7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function V7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}Zka(c,b,137052,353);Zka(c,b,134925,339);Zka(c,b,134945,64);Yka(c,b,137955,999,0.0);Zka(c,b,137867,206);Zka(c,b,135923,674);Zka(c,b,135944,677);Zka(c,b,134027,39);Zka(c,b,134252,388);Zka(c,b,126035,36);if((k[c+40>>2]|0)==300)return;Zka(c,b,136615,287);Zka(c,b,136636,288);return}function W7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function X7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125951,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,61,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Y7(a,b){a=a|0;b=b|0;return 0}function Z7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125951,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function _7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0,S=0;a=r;r=r+80|0;c=a+56|0;d=a+48|0;e=a+40|0;f=a+32|0;g=a+16|0;h=a;i=a+64|0;k[i>>2]=0;j=Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0;l=gq(b,534)|0;m=j<<1;n=j>>>0>536870911?-1:j<<3;o=Rqa(n)|0;q=Rqa(m>>>0>536870911?-1:m<<3)|0;m=Rqa(n)|0;s=Rqa(n)|0;t=Rqa(n)|0;u=Rqa(n)|0;v=Rqa(n)|0;Uo(b,i);n=Wo(b,353)|0;w=+Zc[k[(k[b>>2]|0)+72>>2]&255](b);vp(b,u,704);vp(b,v,705);vp(b,t,353);x=(j|0)>0;if(x){y=0;do{z=+p[u+(y<<3)>>3];A=+p[v+(y<<3)>>3];B=+aa(+(z*z+A*A+1.0e-10));C=+p[t+(y<<3)>>3];p[m+(y<<3)>>3]=-(z*C)/B;p[s+(y<<3)>>3]=-(C*A)/B;y=y+1|0}while((y|0)!=(j|0))}y=ed[k[(k[b>>2]|0)+308>>2]&511](b,2)|0;D=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0;if((D|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0)){E=y+8|0;F=h+8|0;G=l+12|0;H=D;do{Fc[k[(k[y>>2]|0)+24>>2]&1023](y,H);nd[k[(k[n>>2]|0)+48>>2]&1023](n,d,y);if(+p[d>>3]<50.0)p[d>>3]=50.0;Dc[k[(k[b>>2]|0)+496>>2]&255](b,g,m,k[i>>2]|0,y);Dc[k[(k[b>>2]|0)+496>>2]&255](b,h,s,k[i>>2]|0,y);rd[k[(k[b>>2]|0)+500>>2]&511](b,e,m,y);rd[k[(k[b>>2]|0)+500>>2]&511](b,f,s,y);B=w/(+p[d>>3]*2.0+1.0e-10);rd[k[(k[b>>2]|0)+260>>2]&511](b,c,k[i>>2]|0,y);nd[k[(k[b>>2]|0)+336>>2]&1023](b,o,y);rd[k[(k[b>>2]|0)+340>>2]&511](b,q,k[i>>2]|0,y);if(x){D=k[G>>2]|0;I=0;do{J=o+(I<<3)|0;K=q+(I<<3)|0;L=q+(I+j<<3)|0;M=ma(I,j)|0;N=0;do{A=+p[J>>3];C=+p[g>>3]+ +p[F>>3];z=+p[e>>3];O=+p[f>>3];P=D+(N+M<<3)|0;p[P>>3]=+p[P>>3]+ +p[E>>3]*+p[c>>3]*((A+B*(A*C+ +p[K>>3]*z+ +p[L>>3]*O))*(C*+p[o+(N<<3)>>3]+z*+p[q+(N<<3)>>3]+O*+p[q+(N+j<<3)>>3]));N=N+1|0}while((N|0)!=(j|0));I=I+1|0}while((I|0)!=(j|0))}H=H+1|0}while((H|0)<(Hc[k[(k[y>>2]|0)+12>>2]&511](y)|0))}H=k[i>>2]|0;if(!H){k[i>>2]=0;Tqa(o);Tqa(q);Tqa(t);Tqa(u);Tqa(v);Tqa(m);Tqa(s);Q=k[y>>2]|0;R=Q+4|0;S=k[R>>2]|0;Ec[S&1023](y);r=a;return l|0}Tqa(H);k[i>>2]=0;Tqa(o);Tqa(q);Tqa(t);Tqa(u);Tqa(v);Tqa(m);Tqa(s);Q=k[y>>2]|0;R=Q+4|0;S=k[R>>2]|0;Ec[S&1023](y);r=a;return l|0}function $7(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0;a=r;r=r+272|0;c=a+208|0;d=a+260|0;e=a+72|0;f=a+248|0;g=a+236|0;h=a+224|0;i=a+64|0;j=a+56|0;l=a+48|0;m=a+40|0;n=a+32|0;o=a+16|0;q=a;s=a+220|0;cp(b,d,298);a:do switch(k[d>>2]|0){case 300:{t=b;break}case 302:{if(Hc[k[(k[b>>2]|0)+248>>2]&511](b)|0){t=Hc[k[(k[b>>2]|0)+432>>2]&511](b)|0;break a}else{u=0;r=a;return u|0}break}default:{v=e+56|0;w=e+4|0;k[e>>2]=27524;k[v>>2]=27544;B=0;wa(508,e+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=e+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;E=Ia(40,e|0,144639,5)|0;F=B;B=0;if((((!(F&1)?(B=0,F=ya(427,k[d>>2]|0)|0,G=B,B=0,!(G&1)):0)?(G=Lta(F)|0,B=0,H=Ia(40,E|0,F|0,G|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,H|0,146481,18)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,f|0,125951,83);H=B;B=0;do if(!(H&1)){B=0;eb(502,g|0,144203,13);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(f);I=F;J=E;break}B=0;wa(510,h|0,w|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,G|0,f|0,g|0,164,h|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,G|0,1240,229);B=0;N=0}E=Rb()|0;F=Q;Yua(h);K=E;L=F;M=N}Yua(g);Yua(f);if(M){I=K;J=L}else{O=K;P=L;k[e>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}}else{F=Rb()|0;I=F;J=Q}while(0);zb(G|0);O=I;P=J;k[e>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}H=Rb()|0;O=H;P=Q;k[e>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Qb(O|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}}while(0);k[s>>2]=0;z=Hc[k[(k[t>>2]|0)+164>>2]&511](t)|0;D=iq(t,534)|0;C=z>>>0>536870911?-1:z<<3;y=Rqa(C)|0;O=z<<1;P=Rqa(O>>>0>536870911?-1:O<<3)|0;O=Rqa(C)|0;J=Rqa(C)|0;I=Rqa(C)|0;Uo(t,s);C=Wo(t,388)|0;L=Wo(t,39)|0;K=Wo(t,36)|0;M=Wo(t,353)|0;R=+Zc[k[(k[t>>2]|0)+72>>2]&255](t);vp(t,J,704);vp(t,I,705);vp(t,O,353);f=(z|0)>0;if(f){g=0;do{N=J+(g<<3)|0;S=+p[N>>3];h=I+(g<<3)|0;T=+p[h>>3];U=+aa(+(S*S+T*T+1.0e-10));V=+p[O+(g<<3)>>3];p[N>>3]=-(S*V)/U;p[h>>3]=-(V*T)/U;g=g+1|0}while((g|0)!=(z|0))}g=ed[k[(k[t>>2]|0)+308>>2]&511](t,2)|0;h=Hc[k[(k[g>>2]|0)+8>>2]&511](g)|0;if((h|0)<(Hc[k[(k[g>>2]|0)+12>>2]&511](g)|0)){N=g+8|0;w=q+8|0;x=D+4|0;H=h;do{Fc[k[(k[g>>2]|0)+24>>2]&1023](g,H);rd[k[(k[t>>2]|0)+260>>2]&511](t,j,k[s>>2]|0,g);nd[k[(k[t>>2]|0)+336>>2]&1023](t,y,g);rd[k[(k[t>>2]|0)+340>>2]&511](t,P,k[s>>2]|0,g);Dc[k[(k[b>>2]|0)+496>>2]&255](b,o,J,k[s>>2]|0,g);Dc[k[(k[b>>2]|0)+496>>2]&255](b,q,I,k[s>>2]|0,g);rd[k[(k[b>>2]|0)+500>>2]&511](b,m,J,g);rd[k[(k[b>>2]|0)+500>>2]&511](b,n,I,g);nd[k[(k[C>>2]|0)+48>>2]&1023](C,i,g);nd[k[(k[L>>2]|0)+48>>2]&1023](L,e,g);nd[k[(k[K>>2]|0)+48>>2]&1023](K,c,g);nd[k[(k[M>>2]|0)+48>>2]&1023](M,l,g);U=+p[l>>3];if(U<50.0){p[l>>3]=50.0;W=50.0}else W=U;U=R/(W*2.0+1.0e-10);if(f){h=k[x>>2]|0;F=0;do{T=+p[y+(F<<3)>>3];E=h+(F<<3)|0;p[E>>3]=+p[E>>3]+ +p[j>>3]*+p[N>>3]*(+p[i>>3]-+p[e>>3]-+p[c>>3])*(T+U*(T*(+p[o>>3]+ +p[w>>3])+ +p[m>>3]*+p[P+(F<<3)>>3]+ +p[n>>3]*+p[P+(F+z<<3)>>3]));F=F+1|0}while((F|0)!=(z|0))}H=H+1|0}while((H|0)<(Hc[k[(k[g>>2]|0)+12>>2]&511](g)|0))}H=k[s>>2]|0;if(H)Tqa(H);k[s>>2]=0;Tqa(y);Tqa(P);Tqa(O);Tqa(J);Tqa(I);Ec[k[(k[g>>2]|0)+4>>2]&1023](g);if((k[d>>2]|0)!=300?(ap(t),(t|0)!=0):0)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);u=D;r=a;return u|0}function a8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,125951,83);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,242,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}
+-function CR(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,82956,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,49,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function DR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ER(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function FR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function GR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function JR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function KR(a,b){a=a|0;b=b|0;p[a+8>>3]=+(b&1);return}function LR(a,b){a=a|0;b=b|0;p[a+8>>3]=+(b|0);return}function MR(a,b){a=a|0;b=+b;p[a+8>>3]=b;return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function PR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function QR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function RR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function SR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function TR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function UR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function VR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function WR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,82956,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function XR(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function YR(a){a=a|0;k[a>>2]=35208;return}function ZR(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=35208;k[a+4>>2]=b;k[a+8>>2]=c;return}function _R(a){a=a|0;k[a>>2]=35208;return}function $R(a){a=a|0;Sqa(a);return}function aS(a){a=a|0;bS(a);return}function bS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;o=Ia(40,d|0,83055,13)|0;p=B;B=0;if((((((!(p&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=35,p=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[p>>2]=k[p>>2]&-177|32,B=0,p=ya(427,k[a+4>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,149175,1)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Xa(245,q|0,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,149177,1)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function cS(a){a=a|0;return 572}function dS(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=35208;k[b+4>>2]=c;k[b+8>>2]=d;return b|0}function eS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=60;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+12;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+4|0;o=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;a=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=a;i[n+1>>0]=a>>8;i[n+2>>0]=a>>16;i[n+3>>0]=a>>24;k[b>>2]=(k[b>>2]|0)+4;k[n>>2]=0;r=e;return}default:{e=g+56|0;n=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,n|0);b=B;B=0;if(b&1){b=Rb()|0;p=Q;q=b;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,n|0);b=B;B=0;do if(b&1){a=Rb()|0;s=Q;t=a}else{k[n>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;c=Q;Yua(f);Yua(a);Ava(n);s=c;t=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,83069,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);d=B;B=0;if(d&1){d=Rb()|0;u=Q;Yua(h);v=u;w=d;break}B=0;wa(510,m|0,n|0);d=B;B=0;if(d&1){d=Rb()|0;x=d;y=Q;z=1}else{B=0;ua(163,o|0,h|0,j|0,59,m|0);d=B;B=0;if(d&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}d=Rb()|0;u=Q;Yua(m);x=d;y=u;z=A}Yua(j);Yua(h);if(z){v=y;w=x}else{C=y;D=x;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}}else{u=Rb()|0;v=Q;w=u}while(0);zb(o|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function fS(a){a=a|0;return k[a+4>>2]|0}function gS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,42,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function jS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function kS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function lS(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83165,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,47,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function mS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function nS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function oS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function qS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,83145,19)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,86385,30)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(b);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,b|0,f|0,52,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function rS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function sS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function tS(a,b){a=a|0;b=b|0;k[b>>2]=k[a+8>>2];return}function uS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function vS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xS(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86273,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83165,85);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,60,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function yS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function zS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function AS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function BS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function CS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function DS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ES(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function FS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function GS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,83145,19)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,83906,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,69,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,83145,19)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,85982,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,83165,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(b);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,b|0,f|0,70,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function IS(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function JS(a){a=a|0;k[a>>2]=35360;return}function KS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;k[a>>2]=35360;k[a+4>>2]=b;k[a+12>>2]=d;if(!d){k[a+8>>2]=0;return}b=Rqa(d>>>0>1073741823?-1:d<<2)|0;e=a+8|0;k[e>>2]=b;if((d|0)>0)f=0;else return;while(1){b=k[c+(f<<2)>>2]|0;a=(Lta(b)|0)+1|0;g=Rqa(a)|0;if(!b){h=5;break}if(a){j=0;do{i[g+j>>0]=i[b+j>>0]|0;j=j+1|0}while((j|0)!=(a|0))}k[(k[e>>2]|0)+(f<<2)>>2]=g;f=f+1|0;if((f|0)>=(d|0)){h=9;break}}if((h|0)==5)yb(142353,85118,137,142345);else if((h|0)==9)return}function LS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=35360;b=a+12|0;c=k[b>>2]|0;d=a+8|0;a=k[d>>2]|0;if((c|0)>0){e=c;c=a;f=0;while(1){g=k[c+(f<<2)>>2]|0;if(!g){h=e;i=c}else{Tqa(g);h=k[b>>2]|0;i=k[d>>2]|0}f=f+1|0;if((f|0)>=(h|0)){j=i;break}else{e=h;c=i}}}else j=a;if(!j){k[d>>2]=0;return}Tqa(j);k[d>>2]=0;return}function MS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=35360;b=a+12|0;c=k[b>>2]|0;d=a+8|0;e=k[d>>2]|0;if((c|0)>0){f=c;c=e;g=0;while(1){h=k[c+(g<<2)>>2]|0;if(!h){i=f;j=c}else{Tqa(h);i=k[b>>2]|0;j=k[d>>2]|0}g=g+1|0;if((g|0)>=(i|0)){l=j;break}else{f=i;c=j}}}else l=e;if(!l){Sqa(a);return}Tqa(l);Sqa(a);return}function NS(a){a=a|0;OS(a);return}function OS(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;t=Ia(40,d|0,83270,20)|0;u=B;B=0;do if((((!(u&1)?(k[t+(k[(k[t>>2]|0)+-12>>2]|0)+12>>2]=35,v=t+(k[(k[t>>2]|0)+-12>>2]|0)+4|0,k[v>>2]=k[v>>2]&-177|32,B=0,v=ya(427,k[a+4>>2]|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(v)|0,B=0,x=Ia(40,t|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,Ia(40,x|0,83291,2)|0,x=B,B=0,!(x&1)):0)?(B=0,wa(510,e|0,l|0),x=B,B=0,!(x&1)):0){B=0;ya(424,e|0)|0;x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(e);y=w;z=x;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);x=a+12|0;a:do if((k[x>>2]|0)>0){w=f+56|0;v=f+4|0;A=f+56|0;C=f+128|0;D=f+132|0;E=f+36|0;F=f+52|0;G=a+8|0;H=0;while(1){k[f>>2]=27524;k[w>>2]=27544;B=0;wa(508,A|0,v|0);I=B;B=0;if(I&1){J=33;break}k[C>>2]=0;k[D>>2]=-1;k[f>>2]=27468;k[w>>2]=27488;B=0;va(448,v|0);I=B;B=0;if(I&1){J=34;break}k[v>>2]=27560;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[F>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);I=B;B=0;if(I&1){J=32;break}Yua(c);B=0;I=Ia(40,f|0,83297,2)|0;K=B;B=0;if(K&1){J=43;break}K=k[(k[G>>2]|0)+(H<<2)>>2]|0;L=Lta(K)|0;B=0;M=Ia(40,I|0,K|0,L|0)|0;L=B;B=0;if(L&1){J=43;break}B=0;Ia(40,M|0,83300,1)|0;M=B;B=0;if(M&1){J=43;break}B=0;wa(510,g|0,v|0);M=B;B=0;if(M&1){J=43;break}B=0;ya(424,g|0)|0;M=B;B=0;if(M&1){J=44;break}Yua(g);k[f>>2]=27468;k[w>>2]=27488;k[v>>2]=27560;Yua(E);Ava(v);vva(w);H=H+1|0;if((H|0)>=(k[x>>2]|0))break a}if((J|0)==32){H=Rb()|0;G=Q;Yua(c);Yua(E);Ava(v);N=G;O=H;J=35}else if((J|0)==33){H=Rb()|0;P=Q;R=H;vva(w);Qb(R|0)}else if((J|0)==34){H=Rb()|0;N=Q;O=H;J=35}else if((J|0)==43){H=Rb()|0;S=Q;T=H;J=45}else if((J|0)==44){H=Rb()|0;G=Q;Yua(g);S=G;T=H;J=45}if((J|0)==35){P=N;R=O;vva(w);Qb(R|0)}else if((J|0)==45){k[f>>2]=27468;k[w>>2]=27488;k[v>>2]=27560;Yua(E);Ava(v);vva(w);U=S;V=T;Qb(V|0)}}while(0);x=h+56|0;H=h+4|0;k[h>>2]=27524;k[x>>2]=27544;B=0;wa(508,h+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;W=Q;X=G;vva(x);Qb(X|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[x>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){F=Rb()|0;Y=Q;Z=F}else{k[H>>2]=27560;F=h+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(c);Yua(F);Ava(H);Y=C;Z=D;break}Yua(c);B=0;Ia(40,h|0,83294,2)|0;D=B;B=0;do if(!(D&1)?(B=0,wa(510,i|0,H|0),C=B,B=0,!(C&1)):0){B=0;ya(424,i|0)|0;C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(i);_=A;$=C;break}else{Yua(i);k[h>>2]=27468;k[x>>2]=27488;k[H>>2]=27560;Yua(F);Ava(H);vva(x);r=b;return}}else J=49;while(0);if((J|0)==49){D=Rb()|0;_=Q;$=D}k[h>>2]=27468;k[x>>2]=27488;k[H>>2]=27560;Yua(F);Ava(H);vva(x);U=_;V=$;Qb(V|0)}while(0);W=Y;X=Z;vva(x);Qb(X|0)}else J=26;while(0);if((J|0)==26){t=Rb()|0;y=Q;z=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);U=y;V=z;Qb(V|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function PS(a){a=a|0;return 617}function QS(a){a=a|0;var b=0;b=Qqa(16)|0;B=0;ib(294,b|0,k[a+4>>2]|0,k[a+8>>2]|0,k[a+12>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function RS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;t=(d|0)==2;if((d&-3|0)==0?(u=k[a+12>>2]|0,(u|0)!=0):0){v=Rqa(u>>>0>1073741823?-1:u<<2)|0;if((u|0)>0){w=k[a+8>>2]|0;x=0;do{y=(Lta(k[w+(x<<2)>>2]|0)|0)+1|0;k[v+(x<<2)>>2]=y;x=x+1|0}while((x|0)<(u|0));z=v}else z=v}else z=0;do if(s){v=k[b>>2]|0;i[v>>0]=105;i[v+1>>0]=2;i[v+2>>0]=0;i[v+3>>0]=0;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+4|0;x=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[v>>0]=x;i[v+1>>0]=x>>8;i[v+2>>0]=x>>16;i[v+3>>0]=x>>24;x=(k[b>>2]|0)+4|0;k[b>>2]=x;v=a+12|0;u=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[x>>0]=u;i[x+1>>0]=u>>8;i[x+2>>0]=u>>16;i[x+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;A=v}else{if(t){k[c>>2]=(k[c>>2]|0)+12;A=a+12|0;break}if((d|0)==1){v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+4|0;x=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=x;i[u+1>>0]=x>>8;i[u+2>>0]=x>>16;i[u+3>>0]=x>>24;x=(k[b>>2]|0)+4|0;k[b>>2]=x;u=a+12|0;v=l[x>>0]|l[x+1>>0]<<8|l[x+2>>0]<<16|l[x+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;k[b>>2]=(k[b>>2]|0)+4;A=u;break}u=g+56|0;v=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,v|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;vva(u);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);x=B;B=0;do if(x&1){w=Rb()|0;E=Q;F=w}else{k[v>>2]=27560;w=g+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;G=Q;Yua(f);Yua(w);Ava(v);E=G;F=y;break}Yua(f);B=0;y=Ia(40,g|0,143951,43)|0;G=B;B=0;a:do if(!(G&1)?(B=0,Xa(239,y|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,h|0,83302,82);I=B;B=0;do if(!(I&1)){B=0;eb(502,j|0,149525,8);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(h);L=K;M=J;break}B=0;wa(510,m|0,v|0);J=B;B=0;if(J&1){J=Rb()|0;N=Q;O=J;P=1}else{B=0;ua(163,H|0,h|0,j|0,92,m|0);J=B;B=0;if(J&1)R=1;else{B=0;eb(503,H|0,1240,229);B=0;R=0}J=Rb()|0;K=Q;Yua(m);N=K;O=J;P=R}Yua(j);Yua(h);if(P){L=N;M=O}else{S=N;T=O;break a}}else{J=Rb()|0;L=Q;M=J}while(0);zb(H|0);S=L;T=M}else U=24;while(0);if((U|0)==24){y=Rb()|0;S=Q;T=y}k[g>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(w);Ava(v);vva(u);V=S;W=T;Qb(W|0)}while(0);C=E;D=F;vva(u);Qb(D|0)}while(0);D=k[A>>2]|0;b:do if(D){F=(z|0)==0;do if(s){i[k[b>>2]>>0]=F&1;E=(k[b>>2]|0)+1|0;k[b>>2]=E;if(F){X=0;Y=0}else{TEa(E|0,z|0,k[A>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[A>>2]<<2);X=0;Y=z}}else{if(t){E=(k[c>>2]|0)+1|0;k[c>>2]=E;if(F){X=0;Y=0;break}k[c>>2]=E+(k[A>>2]<<2);X=0;Y=z;break}E=k[b>>2]|0;C=i[E>>0]|0;T=E+1|0;k[b>>2]=T;E=D>>>0>1073741823?-1:D<<2;if(!(C&1)){C=Rqa(E)|0;S=D<<2;TEa(C|0,T|0,S|0)|0;k[b>>2]=T+S;Z=C}else Z=z;C=Rqa(E)|0;k[a+8>>2]=C;X=1;Y=Z}while(0);if((k[A>>2]|0)>0){F=a+8|0;if(s){u=k[b>>2]|0;C=0;while(1){E=(k[(k[F>>2]|0)+(C<<2)>>2]|0)==0;i[u>>0]=E&1;S=(k[b>>2]|0)+1|0;k[b>>2]=S;if(E)_=S;else{E=Y+(C<<2)|0;TEa(S|0,k[(k[F>>2]|0)+(C<<2)>>2]|0,k[E>>2]|0)|0;S=(k[b>>2]|0)+(k[E>>2]|0)|0;k[b>>2]=S;_=S}C=C+1|0;if((C|0)>=(k[A>>2]|0)){$=Y;break b}else u=_}}else aa=0;while(1){if(t){u=(k[(k[F>>2]|0)+(aa<<2)>>2]|0)==0;C=(k[c>>2]|0)+1|0;k[c>>2]=C;if(!u)k[c>>2]=C+(k[Y+(aa<<2)>>2]|0)}else{if(!X)break;C=k[b>>2]|0;u=i[C>>0]|0;k[b>>2]=C+1;if(!(u&1)){u=Y+(aa<<2)|0;C=Rqa(k[u>>2]|0)|0;k[(k[F>>2]|0)+(aa<<2)>>2]=C;TEa(k[(k[F>>2]|0)+(aa<<2)>>2]|0,k[b>>2]|0,k[u>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+(k[u>>2]|0)}}aa=aa+1|0;if((aa|0)>=(k[A>>2]|0)){$=Y;break b}}F=n+56|0;u=n+4|0;k[n>>2]=27524;k[F>>2]=27544;B=0;wa(508,n+56|0,u|0);C=B;B=0;if(C&1){C=Rb()|0;ba=Q;ca=C;vva(F);Qb(ca|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[F>>2]=27488;B=0;va(448,u|0);C=B;B=0;do if(C&1){S=Rb()|0;da=Q;ea=S}else{k[u>>2]=27560;S=n+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,u|0,f|0);E=B;B=0;if(E&1){E=Rb()|0;T=Q;Yua(f);Yua(S);Ava(u);da=T;ea=E;break}Yua(f);B=0;E=Ia(40,n|0,143951,43)|0;T=B;B=0;c:do if(!(T&1)?(B=0,Xa(239,E|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,o|0,83302,82);M=B;B=0;do if(!(M&1)){B=0;eb(502,p|0,149525,8);L=B;B=0;if(L&1){L=Rb()|0;O=Q;Yua(o);fa=O;ga=L;break}B=0;wa(510,q|0,u|0);L=B;B=0;if(L&1){L=Rb()|0;ha=1;ia=Q;ja=L}else{B=0;ua(163,g|0,o|0,p|0,100,q|0);L=B;B=0;if(L&1)ka=1;else{B=0;eb(503,g|0,1240,229);B=0;ka=0}L=Rb()|0;O=Q;Yua(q);ha=ka;ia=O;ja=L}Yua(p);Yua(o);if(ha){fa=ia;ga=ja}else{la=ia;ma=ja;break c}}else{L=Rb()|0;fa=Q;ga=L}while(0);zb(g|0);la=fa;ma=ga}else U=69;while(0);if((U|0)==69){E=Rb()|0;la=Q;ma=E}k[n>>2]=27468;k[F>>2]=27488;k[u>>2]=27560;Yua(S);Ava(u);vva(F);V=la;W=ma;Qb(W|0)}while(0);ba=da;ca=ea;vva(F);Qb(ca|0)}else $=Y}else{k[a+8>>2]=0;$=z}while(0);if(!$){r=e;return}Tqa($);r=e;return}function SS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;d=k[a+12>>2]|0;a:do if(d){e=Rqa(d>>>0>1073741823?-1:d<<2)|0;if((d|0)>0){f=k[a+8>>2]|0;g=0;while(1){h=k[f+(g<<2)>>2]|0;j=(Lta(h)|0)+1|0;l=Rqa(j)|0;if(!h)break;if(j){m=0;do{i[l+m>>0]=i[h+m>>0]|0;m=m+1|0}while((m|0)!=(j|0))}k[e+(g<<2)>>2]=l;g=g+1|0;if((g|0)>=(d|0)){n=e;break a}}yb(142353,85118,137,142345)}else n=e}else n=0;while(0);if(!c){k[b>>2]=n;return}k[c>>2]=d;k[b>>2]=n;return}function TS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;d=a+12|0;e=k[d>>2]|0;f=a+8|0;a=k[f>>2]|0;if((e|0)>0){g=e;e=a;h=0;while(1){j=k[e+(h<<2)>>2]|0;if(!j){l=g;m=e}else{Tqa(j);l=k[d>>2]|0;m=k[f>>2]|0}h=h+1|0;if((h|0)>=(l|0)){n=m;break}else{g=l;e=m}}}else n=a;if(n)Tqa(n);k[d>>2]=c;d=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[f>>2]=d;if((c|0)>0)o=0;else return;while(1){d=k[b+(o<<2)>>2]|0;n=(Lta(d)|0)+1|0;a=Rqa(n)|0;if(!d){p=10;break}if(n){m=0;do{i[a+m>>0]=i[d+m>>0]|0;m=m+1|0}while((m|0)!=(n|0))}k[(k[f>>2]|0)+(o<<2)>>2]=a;o=o+1|0;if((o|0)>=(c|0)){p=13;break}}if((p|0)==10)yb(142353,85118,137,142345);else if((p|0)==13)return}function US(a){a=a|0;return k[a+4>>2]|0}function VS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function WS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function XS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function YS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function _S(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83385,92);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,48,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function $S(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function aT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function bT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function cT(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,83478,18)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,86385,30)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(b);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,b|0,f|0,53,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function dT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function eT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function fT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function gT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function jT(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83385,92);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,61,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function kT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function lT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function mT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function nT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function oT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function pT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function qT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function rT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function sT(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,83385,92);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function tT(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function uT(a){a=a|0;k[a>>2]=35512;return}function vT(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[a>>2]=35512;k[a+4>>2]=b;k[a+12>>2]=d;k[a+16>>2]=e;b=ma(e,d)|0;d=Rqa(b>>>0>536870911?-1:b<<3)|0;k[a+8>>2]=d;if(!c)yb(142353,85118,137,142345);if(!b)return;TEa(d|0,c|0,b<<3|0)|0;return}function wT(a){a=a|0;var b=0;k[a>>2]=35512;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function xT(a){a=a|0;var b=0;k[a>>2]=35512;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function yT(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,83514,16)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,85228,9)|0;G=B;B=0;do if((((((!(G&1)?(H=a+4|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,83531,16)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(242,S|0,k[a+12>>2]|0)|0;V=B;B=0;if(V&1){W=50;break}B=0;V=Ia(40,U|0,83548,1)|0;U=B;B=0;if(U&1){W=50;break}B=0;U=Xa(242,V|0,k[a+16>>2]|0)|0;V=B;B=0;if(V&1){W=50;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=50;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=50;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=50;while(0);if((W|0)==50){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=47;while(0);if((W|0)==47){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=44;while(0);if((W|0)==44){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function zT(a){a=a|0;return 565}function AT(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=Qqa(20)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;f=k[a+16>>2]|0;k[b>>2]=35512;k[b+4>>2]=c;k[b+12>>2]=e;k[b+16>>2]=f;c=ma(f,e)|0;B=0;e=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;f=B;B=0;if(f&1){g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}k[b+8>>2]=e;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}if(!c)return b|0;TEa(e|0,d|0,c<<3|0)|0;return b|0}function BT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=53;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+8|0;q=(k[n>>2]|0)==0;i[p>>0]=q&1;p=(k[b>>2]|0)+1|0;k[b>>2]=p;if(q){r=e;return}TEa(p|0,k[n>>2]|0,ma(k[d>>2]<<3,k[o>>2]|0)|0)|0;n=ma(k[d>>2]<<3,k[o>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+n;r=e;return}case 2:{n=(k[a+8>>2]|0)==0;o=(k[c>>2]|0)+17|0;k[c>>2]=o;if(n){r=e;return}n=(ma(k[a+12>>2]<<3,k[a+16>>2]|0)|0)+o|0;k[c>>2]=n;r=e;return}case 1:{n=(k[b>>2]|0)+4|0;k[b>>2]=n;c=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[c>>0]=o;i[c+1>>0]=o>>8;i[c+2>>0]=o>>16;i[c+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;c=a+12|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[c>>0]=n;i[c+1>>0]=n>>8;i[c+2>>0]=n>>16;i[c+3>>0]=n>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+16|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;o=k[b>>2]|0;c=o+4|0;k[b>>2]=c;p=i[c>>0]|0;k[b>>2]=o+5;if(p&1){r=e;return}p=ma(d,n)|0;o=Rqa(p>>>0>536870911?-1:p<<3)|0;k[a+8>>2]=o;a=k[b>>2]|0;p=ma(n<<3,d)|0;TEa(o|0,a|0,p|0)|0;k[b>>2]=a+p;r=e;return}default:{e=g+56|0;p=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,p|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(e);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,p|0);a=B;B=0;do if(a&1){b=Rb()|0;u=Q;v=b}else{k[p>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,p|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;d=Q;Yua(f);Yua(b);Ava(p);u=d;v=o;break}Yua(f);B=0;o=Ia(40,g|0,143951,43)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,h|0,83550,80);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;c=Q;Yua(h);w=c;x=n;break}B=0;wa(510,m|0,p|0);n=B;B=0;if(n&1){n=Rb()|0;y=Q;z=n;A=1}else{B=0;ua(163,o|0,h|0,j|0,77,m|0);n=B;B=0;if(n&1)C=1;else{B=0;eb(503,o|0,1240,229);B=0;C=0}n=Rb()|0;c=Q;Yua(m);y=c;z=n;A=C}Yua(j);Yua(h);if(A){w=y;x=z}else{D=y;E=z;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}}else{n=Rb()|0;w=Q;x=n}while(0);zb(o|0);D=w;E=x;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}d=Rb()|0;D=Q;E=d;k[g>>2]=27468;k[e>>2]=27488;k[p>>2]=27560;Yua(b);Ava(p);vva(e);Qb(E|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}}}function CT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=k[a+12>>2]|0;f=a+16|0;g=ma(k[f>>2]|0,e)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;i=k[a+8>>2]|0;if(!i)yb(142353,85118,137,142345);if(g){a=0;do{p[h+(a<<3)>>3]=+p[i+(a<<3)>>3];a=a+1|0}while((a|0)!=(g|0))}if(c)k[c>>2]=e;if(!d){k[b>>2]=h;return}k[d>>2]=k[f>>2];k[b>>2]=h;return}function DT(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,83631,18)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,84703,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,83550,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,100,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ET(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=a+8|0;f=k[e>>2]|0;if(f)Tqa(f);f=ma(d,c)|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;k[e>>2]=g;if(!b)yb(142353,85118,137,142345);if(f)TEa(g|0,b|0,f<<3|0)|0;k[a+12>>2]=c;k[a+16>>2]=d;return}function FT(a){a=a|0;return k[a+4>>2]|0}function GT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function JT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function KT(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83650,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,49,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function LT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function MT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function NT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function OT(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function PT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function QT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function RT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ST(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function TT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function UT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function VT(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83650,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,62,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function WT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function XT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function YT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85543,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function ZT(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85514,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function _T(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85485,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function $T(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function aU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function bU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function cU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,83650,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,72,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function dU(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function eU(a){a=a|0;k[a>>2]=35664;return}function fU(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0;k[a>>2]=35664;k[a+4>>2]=b;b=a+12|0;k[b>>2]=d;if(!d){k[a+8>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;return}g=d>>>0>1073741823?-1:d<<2;h=Rqa(g)|0;i=a+8|0;k[i>>2]=h;h=Rqa(g)|0;j=a+16|0;k[j>>2]=h;l=Rqa(g)|0;g=a+20|0;k[g>>2]=l;if((d|0)<=0)return;d=h;h=l;l=0;while(1){a=k[e+(l<<2)>>2]|0;m=k[f+(l<<2)>>2]|0;k[d+(l<<2)>>2]=a;k[h+(l<<2)>>2]=m;n=ma(m,a)|0;if(!n)o=0;else{a=Rqa(n>>>0>536870911?-1:n<<3)|0;m=k[c+(l<<2)>>2]|0;if(!m){q=6;break}else r=0;do{p[a+(r<<3)>>3]=+p[m+(r<<3)>>3];r=r+1|0}while((r|0)!=(n|0));o=a}k[(k[i>>2]|0)+(l<<2)>>2]=o;a=l+1|0;if((a|0)>=(k[b>>2]|0)){q=11;break}d=k[j>>2]|0;h=k[g>>2]|0;l=a}if((q|0)==6)yb(142353,85118,137,142345);else if((q|0)==11)return}function gU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=35664;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;c=k[b>>2]|0;d=a+8|0;a=k[d>>2]|0;if((c|0)>0){e=a;f=c;c=0;while(1){g=k[e+(c<<2)>>2]|0;if(!g){h=f;i=e}else{Tqa(g);h=k[b>>2]|0;i=k[d>>2]|0}c=c+1|0;if((c|0)>=(h|0)){j=i;break}else{e=i;f=h}}}else j=a;if(!j){k[d>>2]=0;return}Tqa(j);k[d>>2]=0;return}function hU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;k[a>>2]=35664;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;c=k[b>>2]|0;d=a+8|0;e=k[d>>2]|0;if((c|0)>0){f=e;g=c;c=0;while(1){h=k[f+(c<<2)>>2]|0;if(!h){i=g;j=f}else{Tqa(h);i=k[b>>2]|0;j=k[d>>2]|0}c=c+1|0;if((c|0)>=(i|0)){l=j;break}else{f=j;g=i}}}else l=e;if(!l){Sqa(a);return}Tqa(l);Sqa(a);return}function iU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=d+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,d|0,83763,21)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,e|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(424,e|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);y=x;z=w;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);w=f+56|0;x=f+4|0;k[f>>2]=27524;k[w>>2]=27544;B=0;wa(508,f+56|0,x|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(w);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[x>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(c);Yua(E);Ava(x);F=I;G=H;break}Yua(c);B=0;H=Ia(40,f|0,85228,9)|0;I=B;B=0;do if((((((!(I&1)?(J=a+4|0,B=0,K=Xa(242,H|0,k[J>>2]|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,K|0,144166,2)|0,K=B,B=0,!(K&1)):0)?(B=0,K=ya(427,k[J>>2]|0)|0,J=B,B=0,!(J&1)):0)?(J=Lta(K)|0,B=0,M=Ia(40,L|0,K|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,Ia(40,M|0,145593,2)|0,M=B,B=0,!(M&1)):0)?(B=0,wa(510,g|0,x|0),M=B,B=0,!(M&1)):0){B=0;ya(424,g|0)|0;M=B;B=0;if(M&1){M=Rb()|0;J=Q;Yua(g);N=J;O=M;break}Yua(g);k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);M=h+56|0;J=h+4|0;k[h>>2]=27524;k[M>>2]=27544;B=0;wa(508,h+56|0,J|0);K=B;B=0;if(K&1){K=Rb()|0;P=Q;R=K;vva(M);Qb(R|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[M>>2]=27488;B=0;va(448,J|0);K=B;B=0;do if(K&1){L=Rb()|0;S=Q;T=L}else{k[J>>2]=27560;L=h+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(c);Yua(L);Ava(J);S=V;T=U;break}Yua(c);B=0;U=Ia(40,h|0,83785,15)|0;V=B;B=0;do if(V&1)W=61;else{B=0;X=Xa(242,U|0,k[a+12>>2]|0)|0;Y=B;B=0;if(Y&1){W=61;break}B=0;Ia(40,X|0,149177,1)|0;X=B;B=0;if(X&1){W=61;break}B=0;wa(510,i|0,J|0);X=B;B=0;if(X&1){W=61;break}B=0;ya(424,i|0)|0;X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(i);Z=Y;_=X;break}Yua(i);k[h>>2]=27468;k[M>>2]=27488;k[J>>2]=27560;Yua(L);Ava(J);vva(M);X=j+56|0;Y=j+4|0;k[j>>2]=27524;k[X>>2]=27544;B=0;wa(508,j+56|0,Y|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;ba=$;vva(X);Qb(ba|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[X>>2]=27488;B=0;va(448,Y|0);$=B;B=0;do if($&1){ca=Rb()|0;da=Q;ea=ca}else{k[Y>>2]=27560;ca=j+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Y|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(c);Yua(ca);Ava(Y);da=ga;ea=fa;break}Yua(c);B=0;fa=Ia(40,j|0,83801,18)|0;ga=B;B=0;do if(!(ga&1)){B=0;ha=Xa(245,fa|0,k[a+8>>2]|0)|0;ia=B;B=0;if(ia&1){W=64;break}B=0;Ia(40,ha|0,149177,1)|0;ha=B;B=0;if(ha&1){W=64;break}B=0;wa(510,l|0,Y|0);ha=B;B=0;if(ha&1){W=64;break}B=0;ya(424,l|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(l);ja=ia;ka=ha;break}else{Yua(l);k[j>>2]=27468;k[X>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(X);r=b;return}}else W=64;while(0);if((W|0)==64){fa=Rb()|0;ja=Q;ka=fa}k[j>>2]=27468;k[X>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(X);la=ja;ma=ka;Qb(ma|0)}while(0);aa=da;ba=ea;vva(X);Qb(ba|0)}while(0);if((W|0)==61){U=Rb()|0;Z=Q;_=U}k[h>>2]=27468;k[M>>2]=27488;k[J>>2]=27560;Yua(L);Ava(J);vva(M);la=Z;ma=_;Qb(ma|0)}while(0);P=S;R=T;vva(M);Qb(R|0)}else W=58;while(0);if((W|0)==58){H=Rb()|0;N=Q;O=H}k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);la=N;ma=O;Qb(ma|0)}while(0);C=F;D=G;vva(w);Qb(D|0)}else W=55;while(0);if((W|0)==55){v=Rb()|0;y=Q;z=v}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);la=y;ma=z;Qb(ma|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}function jU(a){a=a|0;return 564}function kU(a){a=a|0;var b=0;b=Qqa(24)|0;B=0;La(31,b|0,k[a+4>>2]|0,k[a+8>>2]|0,k[a+12>>2]|0,k[a+16>>2]|0,k[a+20>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function lU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;e=r;r=r+528|0;f=e+516|0;g=e+368|0;h=e+504|0;j=e+356|0;m=e+344|0;n=e+208|0;o=e+60|0;p=e+48|0;q=e+36|0;s=e+72|0;t=e+24|0;u=e+12|0;v=e;w=(d|0)==0;a:do if(w){x=k[b>>2]|0;i[x>>0]=52;i[x+1>>0]=2;i[x+2>>0]=0;i[x+3>>0]=0;x=(k[b>>2]|0)+4|0;k[b>>2]=x;y=a+4|0;z=l[y>>0]|l[y+1>>0]<<8|l[y+2>>0]<<16|l[y+3>>0]<<24;i[x>>0]=z;i[x+1>>0]=z>>8;i[x+2>>0]=z>>16;i[x+3>>0]=z>>24;z=(k[b>>2]|0)+4|0;k[b>>2]=z;x=a+12|0;y=l[x>>0]|l[x+1>>0]<<8|l[x+2>>0]<<16|l[x+3>>0]<<24;i[z>>0]=y;i[z+1>>0]=y>>8;i[z+2>>0]=y>>16;i[z+3>>0]=y>>24;k[b>>2]=(k[b>>2]|0)+4;A=x}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;A=a+12|0;break a;break}case 1:{x=(k[b>>2]|0)+4|0;k[b>>2]=x;y=a+4|0;z=l[x>>0]|l[x+1>>0]<<8|l[x+2>>0]<<16|l[x+3>>0]<<24;i[y>>0]=z;i[y+1>>0]=z>>8;i[y+2>>0]=z>>16;i[y+3>>0]=z>>24;z=(k[b>>2]|0)+4|0;k[b>>2]=z;y=a+12|0;x=l[z>>0]|l[z+1>>0]<<8|l[z+2>>0]<<16|l[z+3>>0]<<24;i[y>>0]=x;i[y+1>>0]=x>>8;i[y+2>>0]=x>>16;i[y+3>>0]=x>>24;k[b>>2]=(k[b>>2]|0)+4;A=y;break a;break}default:{y=g+56|0;x=g+4|0;k[g>>2]=27524;k[y>>2]=27544;B=0;wa(508,g+56|0,x|0);z=B;B=0;if(z&1){z=Rb()|0;C=Q;D=z;vva(y);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[y>>2]=27488;B=0;va(448,x|0);z=B;B=0;do if(z&1){E=Rb()|0;F=Q;G=E}else{k[x>>2]=27560;E=g+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,x|0,f|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(f);Yua(E);Ava(x);F=I;G=H;break}Yua(f);B=0;H=Ia(40,g|0,143951,43)|0;I=B;B=0;b:do if(!(I&1)?(B=0,Xa(239,H|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,h|0,83820,85);K=B;B=0;do if(!(K&1)){B=0;eb(502,j|0,149525,8);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(h);N=M;O=L;break}B=0;wa(510,m|0,x|0);L=B;B=0;if(L&1){L=Rb()|0;P=Q;R=L;S=1}else{B=0;ua(163,J|0,h|0,j|0,126,m|0);L=B;B=0;if(L&1)T=1;else{B=0;eb(503,J|0,1240,229);B=0;T=0}L=Rb()|0;M=Q;Yua(m);P=M;R=L;S=T}Yua(j);Yua(h);if(S){N=P;O=R}else{U=P;V=R;break b}}else{L=Rb()|0;N=Q;O=L}while(0);zb(J|0);U=N;V=O}else W=18;while(0);if((W|0)==18){H=Rb()|0;U=Q;V=H}k[g>>2]=27468;k[y>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(y);X=U;Y=V;Qb(Y|0)}while(0);C=F;D=G;vva(y);Qb(D|0)}}while(0);D=k[A>>2]|0;if(!D){k[a+8>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;r=e;return}G=a+16|0;F=(k[G>>2]|0)==0;c:do if(w){i[k[b>>2]>>0]=F&1;C=(k[b>>2]|0)+1|0;k[b>>2]=C;if(F)Z=C;else{TEa(C|0,k[G>>2]|0,k[A>>2]<<2|0)|0;C=(k[b>>2]|0)+(k[A>>2]<<2)|0;k[b>>2]=C;Z=C}C=a+20|0;V=(k[C>>2]|0)==0;i[Z>>0]=V&1;U=(k[b>>2]|0)+1|0;k[b>>2]=U;if(V){_=0;$=C}else{TEa(U|0,k[C>>2]|0,k[A>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[A>>2]<<2);_=0;$=C}}else switch(d|0){case 2:{C=(k[c>>2]|0)+1|0;k[c>>2]=C;if(F)aa=C;else{U=C+(k[A>>2]<<2)|0;k[c>>2]=U;aa=U}U=a+20|0;C=(k[U>>2]|0)==0;V=aa+1|0;k[c>>2]=V;if(C){_=0;$=U;break c}k[c>>2]=V+(k[A>>2]<<2);_=0;$=U;break c;break}case 1:{U=k[b>>2]|0;V=i[U>>0]|0;C=U+1|0;k[b>>2]=C;if(!(V&1)){V=Rqa(D>>>0>1073741823?-1:D<<2)|0;k[G>>2]=V;U=k[b>>2]|0;g=D<<2;TEa(V|0,U|0,g|0)|0;V=U+g|0;k[b>>2]=V;ba=V}else ba=C;C=a+20|0;V=i[ba>>0]|0;k[b>>2]=ba+1;if(!(V&1)){V=Rqa(D>>>0>1073741823?-1:D<<2)|0;k[C>>2]=V;g=k[b>>2]|0;U=D<<2;TEa(V|0,g|0,U|0)|0;k[b>>2]=g+U}U=Rqa(D>>>0>1073741823?-1:D<<2)|0;k[a+8>>2]=U;_=1;$=C;break c;break}default:{C=n+56|0;U=n+4|0;k[n>>2]=27524;k[C>>2]=27544;B=0;wa(508,n+56|0,U|0);g=B;B=0;if(g&1){g=Rb()|0;ca=Q;da=g;vva(C);Qb(da|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[C>>2]=27488;B=0;va(448,U|0);g=B;B=0;do if(g&1){V=Rb()|0;ea=Q;fa=V}else{k[U>>2]=27560;V=n+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,U|0,f|0);O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(f);Yua(V);Ava(U);ea=N;fa=O;break}Yua(f);B=0;O=Ia(40,n|0,143951,43)|0;N=B;B=0;d:do if(!(N&1)?(B=0,Xa(239,O|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,o|0,83820,85);P=B;B=0;do if(!(P&1)){B=0;eb(502,p|0,149525,8);S=B;B=0;if(S&1){S=Rb()|0;h=Q;Yua(o);ga=h;ha=S;break}B=0;wa(510,q|0,U|0);S=B;B=0;if(S&1){S=Rb()|0;ia=Q;ja=1;ka=S}else{B=0;ua(163,R|0,o|0,p|0,131,q|0);S=B;B=0;if(S&1)la=1;else{B=0;eb(503,R|0,1240,229);B=0;la=0}S=Rb()|0;h=Q;Yua(q);ia=h;ja=la;ka=S}Yua(p);Yua(o);if(ja){ga=ia;ha=ka}else{na=ia;oa=ka;break d}}else{S=Rb()|0;ga=Q;ha=S}while(0);zb(R|0);na=ga;oa=ha}else W=49;while(0);if((W|0)==49){O=Rb()|0;na=Q;oa=O}k[n>>2]=27468;k[C>>2]=27488;k[U>>2]=27560;Yua(V);Ava(U);vva(C);X=na;Y=oa;Qb(Y|0)}while(0);ca=ea;da=fa;vva(C);Qb(da|0)}}while(0);if((k[A>>2]|0)<=0){r=e;return}da=a+8|0;a=(d|0)==2;d=0;e:while(1){fa=(k[(k[da>>2]|0)+(d<<2)>>2]|0)==0;do if(w){i[k[b>>2]>>0]=fa&1;ea=(k[b>>2]|0)+1|0;k[b>>2]=ea;if(!fa){TEa(ea|0,k[(k[da>>2]|0)+(d<<2)>>2]|0,ma(k[(k[G>>2]|0)+(d<<2)>>2]<<3,k[(k[$>>2]|0)+(d<<2)>>2]|0)|0)|0;ea=ma(k[(k[G>>2]|0)+(d<<2)>>2]<<3,k[(k[$>>2]|0)+(d<<2)>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+ea}}else{if(a){ea=(k[c>>2]|0)+1|0;k[c>>2]=ea;if(fa)break;ca=(ma(k[(k[G>>2]|0)+(d<<2)>>2]<<3,k[(k[$>>2]|0)+(d<<2)>>2]|0)|0)+ea|0;k[c>>2]=ca;break}if(!_)break e;ca=k[b>>2]|0;ea=i[ca>>0]|0;k[b>>2]=ca+1;if(!(ea&1)){ea=ma(k[(k[$>>2]|0)+(d<<2)>>2]|0,k[(k[G>>2]|0)+(d<<2)>>2]|0)|0;ca=Rqa(ea>>>0>536870911?-1:ea<<3)|0;k[(k[da>>2]|0)+(d<<2)>>2]=ca;TEa(k[(k[da>>2]|0)+(d<<2)>>2]|0,k[b>>2]|0,ma(k[(k[G>>2]|0)+(d<<2)>>2]<<3,k[(k[$>>2]|0)+(d<<2)>>2]|0)|0)|0;ca=ma(k[(k[G>>2]|0)+(d<<2)>>2]<<3,k[(k[$>>2]|0)+(d<<2)>>2]|0)|0;k[b>>2]=(k[b>>2]|0)+ca}}while(0);d=d+1|0;if((d|0)>=(k[A>>2]|0)){W=104;break}}if((W|0)==104){r=e;return}e=s+56|0;A=s+4|0;k[s>>2]=27524;k[e>>2]=27544;B=0;wa(508,s+56|0,A|0);d=B;B=0;if(d&1){d=Rb()|0;pa=Q;qa=d;vva(e);Qb(qa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[e>>2]=27488;B=0;va(448,A|0);d=B;B=0;do if(d&1){b=Rb()|0;ra=Q;sa=b}else{k[A>>2]=27560;b=s+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,A|0,f|0);$=B;B=0;if($&1){$=Rb()|0;G=Q;Yua(f);Yua(b);Ava(A);ra=G;sa=$;break}Yua(f);B=0;$=Ia(40,s|0,143951,43)|0;G=B;B=0;f:do if(!(G&1)?(B=0,Xa(239,$|0,0)|0,da=B,B=0,!(da&1)):0){da=Ab(20)|0;B=0;eb(502,t|0,83820,85);_=B;B=0;do if(!(_&1)){B=0;eb(502,u|0,149525,8);c=B;B=0;if(c&1){c=Rb()|0;a=Q;Yua(t);ta=a;xa=c;break}B=0;wa(510,v|0,A|0);c=B;B=0;if(c&1){c=Rb()|0;ya=1;za=Q;Aa=c}else{B=0;ua(163,da|0,t|0,u|0,135,v|0);c=B;B=0;if(c&1)Ba=1;else{B=0;eb(503,da|0,1240,229);B=0;Ba=0}c=Rb()|0;a=Q;Yua(v);ya=Ba;za=a;Aa=c}Yua(u);Yua(t);if(ya){ta=za;xa=Aa}else{Ca=za;Da=Aa;break f}}else{c=Rb()|0;ta=Q;xa=c}while(0);zb(da|0);Ca=ta;Da=xa}else W=90;while(0);if((W|0)==90){$=Rb()|0;Ca=Q;Da=$}k[s>>2]=27468;k[e>>2]=27488;k[A>>2]=27560;Yua(b);Ava(A);vva(e);X=Ca;Y=Da;Qb(Y|0)}while(0);pa=ra;qa=sa;vva(e);Qb(qa|0)}function mU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=k[a+12>>2]|0;a:do if(f){g=f>>>0>1073741823?-1:f<<2;h=Rqa(g)|0;i=Rqa(g)|0;j=Rqa(g)|0;g=k[a+16>>2]|0;if(!g)yb(142353,85118,137,142345);else l=0;do{k[i+(l<<2)>>2]=k[g+(l<<2)>>2];l=l+1|0}while((l|0)!=(f|0));m=k[a+20>>2]|0;if(!m)yb(142353,85118,137,142345);else n=0;do{k[j+(n<<2)>>2]=k[m+(n<<2)>>2];n=n+1|0}while((n|0)!=(f|0));if((f|0)>0){o=a+8|0;q=0;while(1){r=ma(k[m+(q<<2)>>2]|0,k[g+(q<<2)>>2]|0)|0;if(!r)s=0;else{t=k[(k[o>>2]|0)+(q<<2)>>2]|0;u=Rqa(r>>>0>536870911?-1:r<<3)|0;if(!t)break;else v=0;do{p[u+(v<<3)>>3]=+p[t+(v<<3)>>3];v=v+1|0}while((v|0)!=(r|0));s=u}k[h+(q<<2)>>2]=s;q=q+1|0;if((q|0)>=(f|0)){w=h;x=i;y=j;break a}}yb(142353,85118,137,142345)}else{w=h;x=i;y=j}}else{w=0;x=0;y=0}while(0);if(c)k[c>>2]=f;if(d)k[d>>2]=x;if(!e){k[b>>2]=w;return}k[e>>2]=y;k[b>>2]=w;return}function nU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0;f=a+16|0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;g=a+20|0;h=k[g>>2]|0;if(h)Tqa(h);k[g>>2]=0;h=a+12|0;i=k[h>>2]|0;j=a+8|0;a=k[j>>2]|0;if((i|0)>0){l=a;m=i;i=0;while(1){n=k[l+(i<<2)>>2]|0;if(!n){o=m;q=l}else{Tqa(n);o=k[h>>2]|0;q=k[j>>2]|0}i=i+1|0;if((i|0)>=(o|0)){r=q;break}else{l=q;m=o}}}else r=a;if(r)Tqa(r);k[h>>2]=c;r=c>>>0>1073741823?-1:c<<2;a=Rqa(r)|0;k[j>>2]=a;a=Rqa(r)|0;k[f>>2]=a;f=Rqa(r)|0;k[g>>2]=f;if(!d)yb(142353,85118,137,142345);g=(c|0)==0;if(!g){r=0;do{k[a+(r<<2)>>2]=k[d+(r<<2)>>2];r=r+1|0}while((r|0)!=(c|0))}if(!e)yb(142353,85118,137,142345);if(g)return;else s=0;do{k[f+(s<<2)>>2]=k[e+(s<<2)>>2];s=s+1|0}while((s|0)!=(c|0));c=k[h>>2]|0;if((c|0)>0)t=0;else return;while(1){h=k[b+(t<<2)>>2]|0;s=ma(k[e+(t<<2)>>2]|0,k[d+(t<<2)>>2]|0)|0;f=Rqa(s>>>0>536870911?-1:s<<3)|0;g=f;if(!h){u=22;break}if(s){r=0;do{p[f+(r<<3)>>3]=+p[h+(r<<3)>>3];r=r+1|0}while((r|0)!=(s|0))}k[(k[j>>2]|0)+(t<<2)>>2]=g;t=t+1|0;if((t|0)>=(c|0)){u=25;break}}if((u|0)==22)yb(142353,85118,137,142345);else if((u|0)==25)return}function oU(a){a=a|0;return k[a+4>>2]|0}function pU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84532,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function qU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84507,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function rU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84472,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function sU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84472,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function tU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84445,26)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function uU(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83927,95);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,50,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function vU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84422,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84393,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function xU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84360,32)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function yU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84360,32)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function zU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84340,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function AU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84320,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function BU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84299,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function CU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function DU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84277,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function EU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84254,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function FU(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,84233,20)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,83927,95);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,63,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function GU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84212,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84185,26)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function IU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84150,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function JU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84115,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function KU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84087,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function LU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84059,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function MU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84041,17)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function NU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84023,17)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85058,19)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,83906,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,83927,95);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,72,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function PU(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function QU(a){a=a|0;k[a>>2]=35816;return}function RU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=35816;k[a+4>>2]=b;k[a+12>>2]=d;if(!d){k[a+8>>2]=0;return}b=Rqa(d>>>0>536870911?-1:d<<3)|0;k[a+8>>2]=b;if(!c)yb(142353,85118,137,142345);TEa(b|0,c|0,d<<3|0)|0;return}function SU(a){a=a|0;var b=0;k[a>>2]=35816;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function TU(a){a=a|0;var b=0;k[a>>2]=35816;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function UU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;o=Ia(40,d|0,84570,18)|0;p=B;B=0;if((((((!(p&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=35,p=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[p>>2]=k[p>>2]&-177|32,B=0,p=ya(427,k[a+4>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,84589,7)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Xa(242,q|0,k[a+12>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,149177,1)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function VU(a){a=a|0;return 567}function WU(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;k[b>>2]=35816;k[b+4>>2]=c;k[b+12>>2]=e;if(!e){k[b+8>>2]=0;return b|0}B=0;c=ya(422,(e>>>0>536870911?-1:e<<3)|0)|0;a=B;B=0;if(a&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}k[b+8>>2]=c;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}else{TEa(c|0,d|0,e<<3|0)|0;return b|0}return 0}function XU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=55;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=(k[o>>2]|0)==0;i[n>>0]=p&1;n=(k[b>>2]|0)+1|0;k[b>>2]=n;if(p){r=e;return}TEa(n|0,k[o>>2]|0,k[d>>2]<<3|0)|0;k[b>>2]=(k[b>>2]|0)+(k[d>>2]<<3);r=e;return}case 2:{d=(k[a+8>>2]|0)==0;o=(k[c>>2]|0)+13|0;k[c>>2]=o;if(d){r=e;return}k[c>>2]=o+(k[a+12>>2]<<3);r=e;return}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;c=a+4|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[c>>0]=d;i[c+1>>0]=d>>8;i[c+2>>0]=d>>16;i[c+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;c=a+12|0;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[c>>0]=o;i[c+1>>0]=o>>8;i[c+2>>0]=o>>16;i[c+3>>0]=o>>24;c=k[b>>2]|0;d=c+4|0;k[b>>2]=d;n=i[d>>0]|0;k[b>>2]=c+5;if(n&1){r=e;return}n=Rqa(o>>>0>536870911?-1:o<<3)|0;k[a+8>>2]=n;a=k[b>>2]|0;c=o<<3;TEa(n|0,a|0,c|0)|0;k[b>>2]=a+c;r=e;return}default:{e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;s=a;vva(e);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);a=B;B=0;do if(a&1){b=Rb()|0;t=Q;u=b}else{k[c>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);Yua(b);Ava(c);t=o;u=n;break}Yua(f);B=0;n=Ia(40,g|0,143951,43)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,84597,80);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,149525,8);d=B;B=0;if(d&1){d=Rb()|0;p=Q;Yua(h);v=p;w=d;break}B=0;wa(510,m|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;x=Q;y=d;z=1}else{B=0;ua(163,n|0,h|0,j|0,69,m|0);d=B;B=0;if(d&1)A=1;else{B=0;eb(503,n|0,1240,229);B=0;A=0}d=Rb()|0;p=Q;Yua(m);x=p;y=d;z=A}Yua(j);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}}else{d=Rb()|0;v=Q;w=d}while(0);zb(n|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}o=Rb()|0;C=Q;D=o;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(b);Ava(c);vva(e);Qb(D|0)}while(0);q=t;s=u;vva(e);Qb(s|0)}}}function YU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[a+12>>2]|0;e=Rqa(d>>>0>536870911?-1:d<<3)|0;f=k[a+8>>2]|0;if(!f)yb(142353,85118,137,142345);if(d){a=0;do{p[e+(a<<3)>>3]=+p[f+(a<<3)>>3];a=a+1|0}while((a|0)!=(d|0))}if(!c){k[b>>2]=e;return}k[c>>2]=d;k[b>>2]=e;return}function ZU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=k[a+12>>2]|0;f=Rqa(e>>>0>536870911?-1:e<<3)|0;g=k[a+8>>2]|0;if(!g)yb(142353,85118,137,142345);if(e){a=0;do{p[f+(a<<3)>>3]=+p[g+(a<<3)>>3];a=a+1|0}while((a|0)!=(e|0))}if(c)k[c>>2]=e;if(!d){k[b>>2]=f;return}k[d>>2]=1;k[b>>2]=f;return}function _U(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,84678,24)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,84703,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,84597,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,109,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function $U(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=a+8|0;e=k[d>>2]|0;if(e)Tqa(e);e=Rqa(c>>>0>536870911?-1:c<<3)|0;k[d>>2]=e;if(!b)yb(142353,85118,137,142345);if(!c){f=a+12|0;k[f>>2]=c;return}TEa(e|0,b|0,c<<3|0)|0;f=a+12|0;k[f>>2]=c;return}function aV(a,b,c){a=a|0;b=b|0;c=c|0;if(c)k[c>>2]=k[a+12>>2];k[b>>2]=k[a+8>>2];return}function bV(a){a=a|0;return k[a+4>>2]|0}function cV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function dV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function eV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function fV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function gV(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,84735,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,48,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function hV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function jV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function kV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function lV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function mV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function nV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function oV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function pV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function qV(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,84735,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,61,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function rV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function sV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function tV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,84826,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}
+-function uV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85485,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function vV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85485,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function wV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function yV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function zV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,84735,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function AV(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function BV(a){a=a|0;k[a>>2]=35968;return}function CV(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=35968;k[a+4>>2]=b;b=Rqa((Lta(c)|0)+1|0)|0;k[a+8>>2]=b;a=(Lta(c)|0)+1|0;if(!c)yb(142353,85118,137,142345);if(!a)return;TEa(b|0,c|0,a|0)|0;return}function DV(a){a=a|0;var b=0;k[a>>2]=35968;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function EV(a){a=a|0;var b=0;k[a>>2]=35968;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function FV(a){a=a|0;GV(a);return}function GV(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;o=Ia(40,d|0,84876,15)|0;p=B;B=0;if((((((!(p&1)?(k[o+(k[(k[o>>2]|0)+-12>>2]|0)+12>>2]=35,p=o+(k[(k[o>>2]|0)+-12>>2]|0)+4|0,k[p>>2]=k[p>>2]&-177|32,B=0,p=ya(427,k[a+4>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,149175,1)|0,s=B,B=0,!(s&1)):0)?(s=k[a+8>>2]|0,p=Lta(s)|0,B=0,o=Ia(40,q|0,s|0,p|0)|0,p=B,B=0,!(p&1)):0)?(B=0,Ia(40,o|0,149177,1)|0,o=B,B=0,!(o&1)):0)?(B=0,wa(510,e|0,g|0),o=B,B=0,!(o&1)):0){B=0;ya(424,e|0)|0;o=B;B=0;if(!(o&1)){Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=b;return}o=Rb()|0;p=Q;Yua(e);t=p;u=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}o=Rb()|0;t=Q;u=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function HV(a){a=a|0;return 618}function IV(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=35968;k[b+4>>2]=c;c=(Lta(d)|0)+1|0;B=0;a=ya(422,c|0)|0;c=B;B=0;if(c&1){e=Rb()|0;f=Q;Sqa(b);Qb(e|0)}k[b+8>>2]=a;c=(Lta(d)|0)+1|0;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;e=Rb()|0;f=Q;Sqa(b);Qb(e|0)}if(!c)return b|0;TEa(a|0,d|0,c|0)|0;return b|0}function JV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;if(!(d&-3))n=(Lta(k[a+8>>2]|0)|0)+1|0;else n=0;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=106;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;o=a+4|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[d>>0]=p;i[d+1>>0]=p>>8;i[d+2>>0]=p>>16;i[d+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;i[p>>0]=n;i[p+1>>0]=n>>8;i[p+2>>0]=n>>16;i[p+3>>0]=n>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;d=a+8|0;o=(k[d>>2]|0)==0;i[p>>0]=o&1;p=(k[b>>2]|0)+1|0;k[b>>2]=p;if(o){r=e;return}TEa(p|0,k[d>>2]|0,n|0)|0;k[b>>2]=(k[b>>2]|0)+n;r=e;return}case 2:{d=(k[a+8>>2]|0)==0;p=(k[c>>2]|0)+13|0;k[c>>2]=p;if(d){r=e;return}k[c>>2]=p+n;r=e;return}case 1:{n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+4|0;c=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=c;i[p+1>>0]=c>>8;i[p+2>>0]=c>>16;i[p+3>>0]=c>>24;c=k[b>>2]|0;p=c+4|0;k[b>>2]=p;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;p=c+8|0;k[b>>2]=p;d=i[p>>0]|0;k[b>>2]=c+9;if(d&1){r=e;return}d=Rqa(n)|0;k[a+8>>2]=d;a=k[b>>2]|0;TEa(d|0,a|0,n|0)|0;k[b>>2]=a+n;r=e;return}default:{e=g+56|0;n=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,n|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;s=a;vva(e);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,n|0);a=B;B=0;do if(a&1){b=Rb()|0;t=Q;u=b}else{k[n>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(f);Yua(b);Ava(n);t=c;u=d;break}Yua(f);B=0;d=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,84892,77);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Yua(h);v=o;w=p;break}B=0;wa(510,m|0,n|0);p=B;B=0;if(p&1){p=Rb()|0;x=Q;y=p;z=1}else{B=0;ua(163,d|0,h|0,j|0,64,m|0);p=B;B=0;if(p&1)A=1;else{B=0;eb(503,d|0,1240,229);B=0;A=0}p=Rb()|0;o=Q;Yua(m);x=o;y=p;z=A}Yua(j);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(e);Qb(D|0)}}else{p=Rb()|0;v=Q;w=p}while(0);zb(d|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(b);Ava(n);vva(e);Qb(D|0)}while(0);q=t;s=u;vva(e);Qb(s|0)}}}function KV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=k[a+8>>2]|0;a=(Lta(c)|0)+1|0;d=Rqa(a)|0;if(!c)yb(142353,85118,137,142345);if(!a){k[b>>2]=d;return}else e=0;do{i[d+e>>0]=i[c+e>>0]|0;e=e+1|0}while((e|0)!=(a|0));k[b>>2]=d;return}function LV(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+8|0;a=k[c>>2]|0;if(a)Tqa(a);k[c>>2]=0;a=(Lta(b)|0)+1|0;d=Rqa(a)|0;k[c>>2]=d;if(!b)yb(142353,85118,137,142345);if(!a)return;TEa(d|0,b|0,a|0)|0;return}function MV(a){a=a|0;return k[a+4>>2]|0}function NV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function PV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function QV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function RV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function SV(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,84970,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,48,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function TV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function UV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function VV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function WV(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function XV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function YV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ZV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85058,19)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,85078,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(e);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,e|0,f|0,56,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function _V(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function $V(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function aW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function bW(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,84970,87);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,61,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function cW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function dW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function eW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function fW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function gW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function hW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function jW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function kW(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,84970,87);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function lW(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function mW(a){a=a|0;k[a>>2]=36120;return}function nW(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;k[a>>2]=36120;k[a+4>>2]=b;k[a+8>>2]=f;i[a+12>>0]=e&1;e=f>>>0>536870911?-1:f<<3;b=Rqa(e)|0;k[a+16>>2]=b;if(!c)yb(142353,85118,137,142345);g=(f|0)==0;if(!g)TEa(b|0,c|0,f<<3|0)|0;c=Rqa(e)|0;k[a+20>>2]=c;if(!d)yb(142353,85118,137,142345);if(g)return;TEa(c|0,d|0,f<<3|0)|0;return}function oW(a){a=a|0;var b=0,c=0;k[a>>2]=36120;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+20|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function pW(a){a=a|0;var b=0,c=0;k[a>>2]=36120;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+20>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function qW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,85211,16)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,85228,9)|0;G=B;B=0;do if((((((!(G&1)?(H=a+4|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,85238,9)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(242,S|0,k[a+8>>2]|0)|0;V=B;B=0;if(V&1){W=48;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=48;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=48;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=48;while(0);if((W|0)==48){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=45;while(0);if((W|0)==45){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=42;while(0);if((W|0)==42){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function rW(a){a=a|0;return 582}function sW(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=Qqa(24)|0;c=k[a+4>>2]|0;d=k[a+16>>2]|0;e=k[a+20>>2]|0;f=i[a+12>>0]|0;g=k[a+8>>2]|0;k[b>>2]=36120;k[b+4>>2]=c;k[b+8>>2]=g;i[b+12>>0]=f;f=g>>>0>536870911?-1:g<<3;B=0;c=ya(422,f|0)|0;a=B;B=0;do if(!(a&1)){k[b+16>>2]=c;if(!d){B=0;ib(283,142353,85118,137,142345);B=0;break}h=(g|0)==0;if(!h)TEa(c|0,d|0,g<<3|0)|0;B=0;j=ya(422,f|0)|0;l=B;B=0;if(!(l&1)){k[b+20>>2]=j;if(!e){B=0;ib(283,142353,85118,137,142345);B=0;break}if(h)return b|0;TEa(j|0,e|0,g<<3|0)|0;return b|0}}while(0);g=Rb()|0;Sqa(b);Qb(g|0);return 0}function tW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=70;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=i[a+12>>0]|0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;TEa(n|0,k[a+16>>2]|0,k[d>>2]<<3|0)|0;n=k[d>>2]<<3;o=(k[b>>2]|0)+n|0;k[b>>2]=o;TEa(o|0,k[a+20>>2]|0,n|0)|0;k[b>>2]=(k[b>>2]|0)+(k[d>>2]<<3);r=e;return}case 2:{d=(k[c>>2]|0)+13|0;k[c>>2]=d;n=a+8|0;o=(k[n>>2]<<3)+d|0;k[c>>2]=o;k[c>>2]=(k[n>>2]<<3)+o;r=e;return}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+4|0;c=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;i[a+12>>0]=i[c>>0]|0;c=(k[b>>2]|0)+1|0;k[b>>2]=c;n=a+8|0;o=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;c=o>>>0>536870911?-1:o<<3;d=Rqa(c)|0;k[a+16>>2]=d;p=Rqa(c)|0;c=a+20|0;k[c>>2]=p;p=k[b>>2]|0;a=o<<3;TEa(d|0,p|0,a|0)|0;d=p+a|0;k[b>>2]=d;TEa(k[c>>2]|0,d|0,a|0)|0;k[b>>2]=(k[b>>2]|0)+(k[n>>2]<<3);r=e;return}default:{e=g+56|0;n=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,n|0);b=B;B=0;if(b&1){b=Rb()|0;q=Q;s=b;vva(e);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,n|0);b=B;B=0;do if(b&1){a=Rb()|0;t=Q;u=a}else{k[n>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(f);Yua(a);Ava(n);t=c;u=d;break}Yua(f);B=0;d=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,85248,80);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Yua(h);v=o;w=p;break}B=0;wa(510,m|0,n|0);p=B;B=0;if(p&1){p=Rb()|0;x=Q;y=p;z=1}else{B=0;ua(163,d|0,h|0,j|0,78,m|0);p=B;B=0;if(p&1)A=1;else{B=0;eb(503,d|0,1240,229);B=0;A=0}p=Rb()|0;o=Q;Yua(m);x=o;y=p;z=A}Yua(j);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}}else{p=Rb()|0;v=Q;w=p}while(0);zb(d|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}c=Rb()|0;C=Q;D=c;k[g>>2]=27468;k[e>>2]=27488;k[n>>2]=27560;Yua(a);Ava(n);vva(e);Qb(D|0)}while(0);q=t;s=u;vva(e);Qb(s|0)}}}function uW(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0.0,f=0.0,g=0,h=0,j=0,l=0.0,m=0,n=0,o=0.0,q=0.0,r=0,s=0.0,t=0,u=0;d=k[a+20>>2]|0;e=+p[d>>3];if(e>c){f=+p[k[a+16>>2]>>3];p[b>>3]=f;return}g=k[a+8>>2]|0;h=g+-1|0;if(!(+p[d+(h<<3)>>3]<c)?(i[a+12>>0]|0)!=0:0){if((g|0)<=0){f=0.0;p[b>>3]=f;return}a:do if(e==c)j=0;else{l=e;m=0;while(1){n=m+1|0;if(l<c?(o=+p[d+(n<<3)>>3],o>c):0){q=l;r=n;s=o;t=m;break}if((n|0)>=(g|0)){f=0.0;u=14;break}l=+p[d+(n<<3)>>3];if(l==c){j=n;break a}else m=n}if((u|0)==14){p[b>>3]=f;return}l=(c-q)/(s-q);m=k[a+16>>2]|0;f=(1.0-l)*+p[m+(t<<3)>>3]+l*+p[m+(r<<3)>>3];p[b>>3]=f;return}while(0);f=+p[(k[a+16>>2]|0)+(j<<3)>>3];p[b>>3]=f;return}f=+p[(k[a+16>>2]|0)+(h<<3)>>3];p[b>>3]=f;return}function vW(a){a=a|0;return k[a+4>>2]|0}function wW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function yW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function zW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85725,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,48,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function AW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function BW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function CW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function DW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function EW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function FW(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function GW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,57,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,58,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function JW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function KW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85625,22)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,61,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function LW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function MW(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,85329,10)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,85579,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,85374,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,63,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function NW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function OW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function PW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85543,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function QW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function RW(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85514,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function SW(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85485,28)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function TW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function UW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function VW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,72,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function WW(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,85329,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,85374,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,73,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function XW(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function YW(a){a=a|0;k[a>>2]=36272;k[a+8>>2]=0;return}function ZW(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=36272;k[a+4>>2]=b;b=hh(c)|0;k[a+8>>2]=b;return}function _W(a){a=a|0;var b=0;k[a>>2]=36272;b=k[a+8>>2]|0;if(!b)return;jh(b);Sqa(b);return}function $W(a){a=a|0;var b=0;k[a>>2]=36272;b=k[a+8>>2]|0;if(!b){Sqa(a);return}jh(b);Sqa(b);Sqa(a);return}function aX(a){a=a|0;bX(a);return}function bX(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;q=Ia(40,d|0,85837,16)|0;s=B;B=0;do if((((!(s&1)?(k[q+(k[(k[q>>2]|0)+-12>>2]|0)+12>>2]=35,t=q+(k[(k[q>>2]|0)+-12>>2]|0)+4|0,k[t>>2]=k[t>>2]&-177|32,t=a+4|0,B=0,u=ya(427,k[t>>2]|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,q|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,Ia(40,w|0,85854,13)|0,w=B,B=0,!(w&1)):0)?(B=0,wa(510,e|0,i|0),w=B,B=0,!(w&1)):0){B=0;ya(424,e|0)|0;w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(e);x=v;y=w;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);oh(k[a+8>>2]|0);w=f+56|0;v=f+4|0;k[f>>2]=27524;k[w>>2]=27544;B=0;wa(508,f+56|0,v|0);u=B;B=0;if(u&1){u=Rb()|0;z=Q;A=u;vva(w);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[w>>2]=27488;B=0;va(448,v|0);u=B;B=0;do if(u&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);k[f+(k[(k[f>>2]|0)+-12>>2]|0)+12>>2]=22;B=0;F=Ia(40,f|0,85837,16)|0;G=B;B=0;do if(((!(G&1)?(k[F+(k[(k[F>>2]|0)+-12>>2]|0)+12>>2]=35,H=F+(k[(k[F>>2]|0)+-12>>2]|0)+4|0,k[H>>2]=k[H>>2]&-177|32,B=0,H=ya(427,k[t>>2]|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(H)|0,B=0,J=Ia(40,F|0,H|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,J|0,85868,11)|0,J=B,B=0,!(J&1)):0){B=0;wa(510,g|0,v|0);J=B;B=0;if(J&1){K=33;break}B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(g);L=I;M=J;break}else{Yua(g);k[f>>2]=27468;k[w>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(w);r=b;return}}else K=33;while(0);if((K|0)==33){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[w>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(w);N=L;O=M;Qb(O|0)}while(0);z=D;A=E;vva(w);Qb(A|0)}else K=30;while(0);if((K|0)==30){q=Rb()|0;x=Q;y=q}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);N=x;O=y;Qb(O|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}function cX(a){a=a|0;return 563}function dX(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=36272;k[b+4>>2]=c;B=0;c=ya(432,d|0)|0;d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}else{k[b+8>>2]=c;return b|0}return 0}function eX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 1:{n=Qqa(36)|0;B=0;va(480,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Sqa(n);q=o;s=p;Qb(q|0)}else{k[a+8>>2]=n;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;t=a+8|0;u=k[t>>2]|0;lh(u,b,c,d);r=e;return}break}case 0:{o=k[b>>2]|0;i[o>>0]=51;i[o+1>>0]=2;i[o+2>>0]=0;i[o+3>>0]=0;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+4|0;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;t=a+8|0;u=k[t>>2]|0;lh(u,b,c,d);r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+8;t=a+8|0;u=k[t>>2]|0;lh(u,b,c,d);r=e;return}default:{e=g+56|0;d=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;v=Q;w=c;vva(e);Qb(w|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;x=Q;y=b}else{k[d>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(f);Yua(b);Ava(d);x=t;y=u;break}Yua(f);B=0;u=Ia(40,g|0,143951,43)|0;t=B;B=0;a:do if(!(t&1)?(B=0,Xa(239,u|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,85880,78);n=B;B=0;do if(!(n&1)){B=0;eb(502,j|0,149525,8);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(h);z=p;A=o;break}B=0;wa(510,m|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;C=o;D=Q;E=1}else{B=0;ua(163,a|0,h|0,j|0,64,m|0);o=B;B=0;if(o&1)F=1;else{B=0;eb(503,a|0,1240,229);B=0;F=0}o=Rb()|0;p=Q;Yua(m);C=o;D=p;E=F}Yua(j);Yua(h);if(E){z=D;A=C}else{G=D;H=C;break a}}else{p=Rb()|0;z=Q;A=p}while(0);zb(a|0);G=z;H=A}else I=19;while(0);if((I|0)==19){u=Rb()|0;G=Q;H=u}k[g>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);q=H;s=G;Qb(q|0)}while(0);v=x;w=y;vva(e);Qb(w|0)}}}function fX(a,b){a=a|0;b=b|0;var c=0;c=hh(k[a+8>>2]|0)|0;k[b>>2]=c;return}function gX(a){a=a|0;return k[a+4>>2]|0}function hX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,43,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function iX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,44,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function jX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,45,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function kX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,46,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function lX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,47,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function mX(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,86017,88);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,48,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function nX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,50,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function oX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,51,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function pX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,52,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function qX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,53,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function rX(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,85959,22)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,86385,30)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(b);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,b|0,f|0,54,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function sX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function tX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function uX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86295,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,49,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function vX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,59,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,60,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xX(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+4>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86273,21)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,86017,88);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,61,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function yX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,62,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function zX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function AX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function BX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function CX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function DX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86188,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function EX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function FX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function GX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+4>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86122,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,63,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function HX(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,85959,22)|0;q=B;B=0;if((((((!(q&1)?(q=a+4|0,B=0,s=Xa(242,p|0,k[q>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[q>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(s)|0,B=0,t=Ia(40,p|0,s|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,t|0,85982,34)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,86017,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;p=Q;Yua(b);u=p;v=s;break}B=0;wa(510,g|0,h|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,q|0,b|0,f|0,72,g|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}s=Rb()|0;p=Q;Yua(g);w=p;x=s;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(q|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function IX(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function JX(a){a=a|0;k[a>>2]=36424;p[a+8>>3]=F;p[a+72>>3]=F;p[a+136>>3]=F;p[a+16>>3]=F;p[a+80>>3]=F;p[a+144>>3]=F;p[a+24>>3]=F;p[a+88>>3]=F;p[a+152>>3]=F;p[a+32>>3]=F;p[a+96>>3]=F;p[a+160>>3]=F;p[a+40>>3]=F;p[a+104>>3]=F;p[a+168>>3]=F;p[a+48>>3]=F;p[a+112>>3]=F;p[a+176>>3]=F;p[a+56>>3]=F;p[a+120>>3]=F;p[a+184>>3]=F;p[a+64>>3]=F;p[a+128>>3]=F;p[a+192>>3]=F;return}function KX(a){a=a|0;return}function LX(a){a=a|0;Sqa(a);return}function MX(a){a=a|0;var b=0;b=Qqa(200)|0;k[b>>2]=36424;p[b+48>>3]=F;p[b+112>>3]=F;p[b+176>>3]=F;p[b+56>>3]=F;p[b+120>>3]=F;p[b+184>>3]=F;p[b+64>>3]=F;p[b+128>>3]=F;p[b+192>>3]=F;p[b+8>>3]=+p[a+8>>3];p[b+72>>3]=+p[a+72>>3];p[b+136>>3]=+p[a+136>>3];p[b+16>>3]=+p[a+16>>3];p[b+80>>3]=+p[a+80>>3];p[b+144>>3]=+p[a+144>>3];p[b+24>>3]=+p[a+24>>3];p[b+88>>3]=+p[a+88>>3];p[b+152>>3]=+p[a+152>>3];p[b+32>>3]=+p[a+32>>3];p[b+96>>3]=+p[a+96>>3];p[b+160>>3]=+p[a+160>>3];p[b+40>>3]=+p[a+40>>3];p[b+104>>3]=+p[a+104>>3];p[b+168>>3]=+p[a+168>>3];p[b+48>>3]=+p[a+48>>3];p[b+112>>3]=+p[a+112>>3];p[b+176>>3]=+p[a+176>>3];p[b+56>>3]=+p[a+56>>3];p[b+120>>3]=+p[a+120>>3];p[b+184>>3]=+p[a+184>>3];p[b+64>>3]=+p[a+64>>3];p[b+128>>3]=+p[a+128>>3];p[b+192>>3]=+p[a+192>>3];return b|0}function NX(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;a=r;r=r+496|0;b=a+476|0;c=a+328|0;d=a+464|0;e=a+192|0;f=a+176|0;g=a+40|0;h=a+24|0;i=a+12|0;j=a;a=c+56|0;l=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(a);Qb(o|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=c+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,l|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);Yua(p);Ava(l);q=u;s=t;break}Yua(b);B=0;Ia(40,c|0,86609,10)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,d|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,d|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);w=v;x=u;break}Yua(d);k[c>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(a);u=e+56|0;v=e+4|0;k[e>>2]=27524;k[u>>2]=27544;B=0;wa(508,e+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=e+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[e+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,v|0,b|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(b);Yua(C);Ava(v);D=G;E=F;break}Yua(b);B=0;Ia(40,e|0,86620,15)|0;F=B;B=0;do if(!(F&1)?(B=0,wa(510,f|0,v|0),G=B,B=0,!(G&1)):0){B=0;ya(424,f|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(f);I=H;J=G;break}Yua(f);k[e>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);G=g+56|0;H=g+4|0;k[g>>2]=27524;k[G>>2]=27544;B=0;wa(508,g+56|0,H|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;M=K;vva(G);Qb(M|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);K=B;B=0;do if(K&1){N=Rb()|0;O=Q;P=N}else{k[H>>2]=27560;N=g+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[g+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,H|0,b|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(b);Yua(N);Ava(H);O=S;P=R;break}Yua(b);B=0;R=Ia(40,g|0,149721,19)|0;S=B;B=0;a:do if(S&1)T=44;else{B=0;Xa(239,R|0,0)|0;U=B;B=0;if(U&1){T=44;break}U=Ab(20)|0;B=0;eb(502,h|0,86636,67);V=B;B=0;do if(!(V&1)){B=0;eb(502,i|0,149562,4);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(h);Y=X;Z=W;break}B=0;wa(510,j|0,H|0);W=B;B=0;if(W&1){W=Rb()|0;_=1;$=Q;aa=W}else{B=0;ua(163,U|0,h|0,i|0,47,j|0);W=B;B=0;if(W&1)ba=1;else{B=0;eb(503,U|0,1240,229);B=0;ba=0}W=Rb()|0;X=Q;Yua(j);_=ba;$=X;aa=W}Yua(i);Yua(h);if(_){Y=$;Z=aa}else{ca=$;da=aa;break a}}else{W=Rb()|0;Y=Q;Z=W}while(0);zb(U|0);ca=Y;da=Z}while(0);if((T|0)==44){R=Rb()|0;ca=Q;da=R}k[g>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(N);Ava(H);vva(G);ea=ca;fa=da;Qb(fa|0)}while(0);L=O;M=P;vva(G);Qb(M|0)}else T=41;while(0);if((T|0)==41){F=Rb()|0;I=Q;J=F}k[e>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);ea=I;fa=J;Qb(fa|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else T=38;while(0);if((T|0)==38){t=Rb()|0;w=Q;x=t}k[c>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(a);ea=w;fa=x;Qb(fa|0)}while(0);n=q;o=s;vva(a);Qb(o|0)}function OX(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function PX(a){a=a|0;return -1}function QX(a){a=a|0;return 595}function RX(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=83;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[d>>0]=0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;m=d;d=a+8|0;n=m+64|0;do{i[m>>0]=i[d>>0]|0;m=m+1|0;d=d+1|0}while((m|0)<(n|0));o=(k[b>>2]|0)+64|0;k[b>>2]=o;i[o>>0]=0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;m=o;d=a+72|0;n=m+64|0;do{i[m>>0]=i[d>>0]|0;m=m+1|0;d=d+1|0}while((m|0)<(n|0));o=(k[b>>2]|0)+64|0;k[b>>2]=o;i[o>>0]=0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;m=o;d=a+136|0;n=m+64|0;do{i[m>>0]=i[d>>0]|0;m=m+1|0;d=d+1|0}while((m|0)<(n|0));k[b>>2]=(k[b>>2]|0)+64;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+199;r=e;return}case 1:{c=k[b>>2]|0;d=c+4|0;k[b>>2]=d;m=c+5|0;n=(i[d>>0]&1)==0;d=c+69|0;c=n?d:m;k[b>>2]=n?d:m;m=(i[c>>0]&1)==0?c+65|0:c+1|0;k[b>>2]=m;c=i[m>>0]|0;k[b>>2]=m+1;if(c&1){r=e;return}k[b>>2]=m+65;r=e;return}default:{e=g+56|0;m=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;p=Q;q=b;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);b=B;B=0;do if(b&1){c=Rb()|0;s=Q;t=c}else{k[m>>2]=27560;c=g+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;n=Q;Yua(f);Yua(c);Ava(m);s=n;t=d;break}Yua(f);B=0;d=Ia(40,g|0,143951,43)|0;n=B;B=0;if(!(n&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,86636,67);n=B;B=0;do if(!(n&1)){B=0;eb(502,j|0,149525,8);a=B;B=0;if(a&1){a=Rb()|0;o=Q;Yua(h);u=o;v=a;break}B=0;wa(510,l|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,d|0,h|0,j|0,69,l|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,d|0,1240,229);B=0;z=0}a=Rb()|0;o=Q;Yua(l);w=o;x=a;y=z}Yua(j);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(d|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(C|0)}n=Rb()|0;A=Q;C=n;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(e);Qb(C|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}}}function SX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0;d=r;r=r+528|0;e=d+516|0;f=d+368|0;g=d+504|0;h=d+356|0;i=d+344|0;j=d+208|0;l=d+60|0;m=d+48|0;n=d+36|0;o=d+72|0;q=d+24|0;s=d+12|0;u=d;if(!c)uY()|0;c=Ub()|0;v=a+8+(b<<3)|0;w=+$(+(+p[v>>3]));p[t>>3]=w;x=k[t+4>>2]|0;if(!(x>>>0>2146435072|(x|0)==2146435072&(k[t>>2]|0)>>>0>0)){x=f+56|0;y=f+4|0;k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,f+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=f+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,y|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);Yua(D);Ava(y);E=H;F=G;break}Yua(e);B=0;G=Ia(40,f|0,86704,18)|0;H=B;B=0;a:do if(!(H&1)?(B=0,Xa(239,G|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,g|0,86636,67);J=B;B=0;do if(!(J&1)){B=0;eb(502,h|0,86723,3);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(g);M=L;N=K;break}B=0;wa(510,i|0,y|0);K=B;B=0;if(K&1){K=Rb()|0;O=K;P=Q;R=1}else{B=0;ua(163,I|0,g|0,h|0,110,i|0);K=B;B=0;if(K&1)S=1;else{B=0;eb(503,I|0,1240,229);B=0;S=0}K=Rb()|0;L=Q;Yua(i);O=K;P=L;R=S}Yua(h);Yua(g);if(R){M=P;N=O}else{T=P;U=O;break a}}else{L=Rb()|0;M=Q;N=L}while(0);zb(I|0);T=M;U=N}else V=19;while(0);if((V|0)==19){G=Rb()|0;T=Q;U=G}k[f>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);W=T;X=U;Qb(X|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}p[v>>3]=+(c|0);w=+$(+(+p[a+72+(b<<3)>>3]));p[t>>3]=w;c=k[t+4>>2]|0;if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)){c=j+56|0;v=j+4|0;k[j>>2]=27524;k[c>>2]=27544;B=0;wa(508,j+56|0,v|0);C=B;B=0;if(C&1){C=Rb()|0;Y=Q;Z=C;vva(c);Qb(Z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[c>>2]=27488;B=0;va(448,v|0);C=B;B=0;do if(C&1){x=Rb()|0;_=Q;aa=x}else{k[v>>2]=27560;x=j+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,v|0,e|0);F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(e);Yua(x);Ava(v);_=E;aa=F;break}Yua(e);B=0;F=Ia(40,j|0,86704,18)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,F|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,l|0,86636,67);U=B;B=0;do if(!(U&1)){B=0;eb(502,m|0,86723,3);T=B;B=0;if(T&1){T=Rb()|0;y=Q;Yua(l);ba=T;ca=y;break}B=0;wa(510,n|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;da=1;ea=Q;fa=y}else{B=0;ua(163,A|0,l|0,m|0,112,n|0);y=B;B=0;if(y&1)ga=1;else{B=0;eb(503,A|0,1240,229);B=0;ga=0}y=Rb()|0;T=Q;Yua(n);da=ga;ea=T;fa=y}Yua(m);Yua(l);if(da){ba=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{y=Rb()|0;ba=y;ca=Q}while(0);zb(A|0);ha=ca;ia=ba}else V=43;while(0);if((V|0)==43){F=Rb()|0;ha=Q;ia=F}k[j>>2]=27468;k[c>>2]=27488;k[v>>2]=27560;Yua(x);Ava(v);vva(c);W=ha;X=ia;Qb(X|0)}while(0);Y=_;Z=aa;vva(c);Qb(Z|0)}w=+$(+(+p[a+136+(b<<3)>>3]));p[t>>3]=w;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0){r=d;return}d=o+56|0;b=o+4|0;k[o>>2]=27524;k[d>>2]=27544;B=0;wa(508,o+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;ja=Q;ka=a;vva(d);Qb(ka|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){Z=Rb()|0;la=Q;ma=Z}else{k[b>>2]=27560;Z=o+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);c=B;B=0;if(c&1){c=Rb()|0;aa=Q;Yua(e);Yua(Z);Ava(b);la=aa;ma=c;break}Yua(e);B=0;c=Ia(40,o|0,86704,18)|0;aa=B;B=0;c:do if(!(aa&1)?(B=0,Xa(239,c|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,q|0,86636,67);Y=B;B=0;do if(!(Y&1)){B=0;eb(502,s|0,86723,3);ia=B;B=0;if(ia&1){ia=Rb()|0;ha=Q;Yua(q);na=ia;oa=ha;break}B=0;wa(510,u|0,b|0);ha=B;B=0;if(ha&1){ha=Rb()|0;pa=1;qa=Q;ra=ha}else{B=0;ua(163,_|0,q|0,s|0,114,u|0);ha=B;B=0;if(ha&1)sa=1;else{B=0;eb(503,_|0,1240,229);B=0;sa=0}ha=Rb()|0;ia=Q;Yua(u);pa=sa;qa=ia;ra=ha}Yua(s);Yua(q);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break c}}else{ha=Rb()|0;na=ha;oa=Q}while(0);zb(_|0);ta=oa;xa=na}else V=67;while(0);if((V|0)==67){c=Rb()|0;ta=Q;xa=c}k[o>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(Z);Ava(b);vva(d);W=ta;X=xa;Qb(X|0)}while(0);ja=la;ka=ma;vva(d);Qb(ka|0)}function TX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=+p[a+8+(b<<3)>>3];q=+$(+o);p[t>>3]=q;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0){b=f+56|0;s=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,s|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(b);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,s|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[s>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(s);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,86727,11)|0;C=B;B=0;a:do if(!(C&1)?(B=0,Xa(239,A|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,g|0,86636,67);E=B;B=0;do if(!(E&1)){B=0;eb(502,h|0,86739,9);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(g);H=F;I=G;break}B=0;wa(510,i|0,s|0);G=B;B=0;if(G&1){G=Rb()|0;J=G;K=Q;L=1}else{B=0;ua(163,D|0,g|0,h|0,124,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(i);J=G;K=F;L=M}Yua(h);Yua(g);if(L){H=J;I=K}else{N=J;O=K;break a}}else{F=Rb()|0;H=F;I=Q}while(0);zb(D|0);N=H;O=I}else P=17;while(0);if((P|0)==17){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(x);Ava(s);vva(b);R=N;S=O;Qb(R|0)}while(0);v=y;w=z;vva(b);Qb(w|0)}q=+p[a+8+(c<<3)>>3];T=+$(+q);p[t>>3]=T;c=k[t+4>>2]|0;if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)){r=d;return +((q-o)/1.0e6)}d=j+56|0;c=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;U=Q;V=a;vva(d);Qb(V|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,c|0);a=B;B=0;do if(a&1){w=Rb()|0;W=Q;X=w}else{k[c>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,c|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;z=Q;Yua(e);Yua(w);Ava(c);W=z;X=b;break}Yua(e);B=0;b=Ia(40,j|0,86727,11)|0;z=B;B=0;b:do if(!(z&1)?(B=0,Xa(239,b|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,l|0,86636,67);v=B;B=0;do if(!(v&1)){B=0;eb(502,m|0,86739,9);O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(l);Y=N;Z=O;break}B=0;wa(510,n|0,c|0);O=B;B=0;if(O&1){O=Rb()|0;_=1;aa=O;ba=Q}else{B=0;ua(163,y|0,l|0,m|0,130,n|0);O=B;B=0;if(O&1)ca=1;else{B=0;eb(503,y|0,1240,229);B=0;ca=0}O=Rb()|0;N=Q;Yua(n);_=ca;aa=O;ba=N}Yua(m);Yua(l);if(_){Y=ba;Z=aa}else{da=aa;ea=ba;break b}}else{N=Rb()|0;Y=Q;Z=N}while(0);zb(y|0);da=Z;ea=Y}else P=41;while(0);if((P|0)==41){b=Rb()|0;da=b;ea=Q}k[j>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(w);Ava(c);vva(d);R=da;S=ea;Qb(R|0)}while(0);U=W;V=X;vva(d);Qb(V|0);return +(0.0)}function UX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=+p[a+72+(b<<3)>>3];q=+$(+o);p[t>>3]=q;b=k[t+4>>2]|0;if(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0){b=f+56|0;s=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,s|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(b);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,s|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[s>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(s);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,86727,11)|0;C=B;B=0;a:do if(!(C&1)?(B=0,Xa(239,A|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,g|0,86636,67);E=B;B=0;do if(!(E&1)){B=0;eb(502,h|0,86749,10);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(g);H=F;I=G;break}B=0;wa(510,i|0,s|0);G=B;B=0;if(G&1){G=Rb()|0;J=G;K=Q;L=1}else{B=0;ua(163,D|0,g|0,h|0,145,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(i);J=G;K=F;L=M}Yua(h);Yua(g);if(L){H=J;I=K}else{N=J;O=K;break a}}else{F=Rb()|0;H=F;I=Q}while(0);zb(D|0);N=H;O=I}else P=17;while(0);if((P|0)==17){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[b>>2]=27488;k[s>>2]=27560;Yua(x);Ava(s);vva(b);R=N;S=O;Qb(R|0)}while(0);v=y;w=z;vva(b);Qb(w|0)}q=+p[a+72+(c<<3)>>3];T=+$(+q);p[t>>3]=T;c=k[t+4>>2]|0;if(!(c>>>0>2146435072|(c|0)==2146435072&(k[t>>2]|0)>>>0>0)){r=d;return +(q-o)}d=j+56|0;c=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;U=Q;V=a;vva(d);Qb(V|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,c|0);a=B;B=0;do if(a&1){w=Rb()|0;W=Q;X=w}else{k[c>>2]=27560;w=j+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,c|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;z=Q;Yua(e);Yua(w);Ava(c);W=z;X=b;break}Yua(e);B=0;b=Ia(40,j|0,86727,11)|0;z=B;B=0;b:do if(!(z&1)?(B=0,Xa(239,b|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,l|0,86636,67);v=B;B=0;do if(!(v&1)){B=0;eb(502,m|0,86749,10);O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(l);Y=N;Z=O;break}B=0;wa(510,n|0,c|0);O=B;B=0;if(O&1){O=Rb()|0;_=1;aa=O;ba=Q}else{B=0;ua(163,y|0,l|0,m|0,151,n|0);O=B;B=0;if(O&1)ca=1;else{B=0;eb(503,y|0,1240,229);B=0;ca=0}O=Rb()|0;N=Q;Yua(n);_=ca;aa=O;ba=N}Yua(m);Yua(l);if(_){Y=ba;Z=aa}else{da=aa;ea=ba;break b}}else{N=Rb()|0;Y=Q;Z=N}while(0);zb(y|0);da=Z;ea=Y}else P=41;while(0);if((P|0)==41){b=Rb()|0;da=b;ea=Q}k[j>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(w);Ava(c);vva(d);R=da;S=ea;Qb(R|0)}while(0);U=W;V=X;vva(d);Qb(V|0);return +(0.0)}function VX(a,b,c){a=a|0;b=b|0;c=c|0;return (~~+TX(a,b,c)|0)/3600|0|0}function WX(a,b,c){a=a|0;b=b|0;c=c|0;return ((~~+TX(a,b,c)|0)%3600|0|0)/60|0|0}function XX(a,b,c){a=a|0;b=b|0;c=c|0;return (~~+TX(a,b,c)|0)%60|0|0}function YX(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=+$(+(+p[a+72+(b<<3)>>3]));p[t>>3]=i;j=k[t+4>>2]|0;if(!(j>>>0>2146435072|(j|0)==2146435072&(k[t>>2]|0)>>>0>0)){r=c;return +(+p[a+136+(b<<3)>>3])}b=e+56|0;a=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;l=Q;m=c;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){j=Rb()|0;n=Q;o=j}else{k[a>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(j);Ava(a);n=s;o=q;break}Yua(d);B=0;q=Ia(40,e|0,86727,11)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,86636,67);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,86760,6);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(f);w=v;x=u;break}B=0;wa(510,h|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,q|0,f|0,g|0,181,h|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,q|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(h);y=v;z=u;A=C}Yua(g);Yua(f);if(A){w=y;x=z}else{D=y;E=z;k[e>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(b);Qb(E|0)}}else{u=Rb()|0;w=Q;x=u}while(0);zb(q|0);D=w;E=x;k[e>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(b);Qb(E|0)}s=Rb()|0;D=Q;E=s;k[e>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(b);Qb(E|0)}while(0);l=n;m=o;vva(b);Qb(m|0);return +(0.0)}function ZX(a,b,c,d,e,f,g,h,i,j,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0;p=r;r=r+5504|0;q=p+5492|0;s=p;t=p+5320|0;u=p+5480|0;v=p+5468|0;w=p+5456|0;x=p+5184|0;y=p+5168|0;z=p+4884|0;A=p+4872|0;C=p+5032|0;D=p+4860|0;E=p+4848|0;F=p+4836|0;G=p+4896|0;H=p+4824|0;I=p+4812|0;J=p+4800|0;K=(d|0)==0;L=K?b:c;M=K?c:b;if(!h)if((M|0)==(f|0))N=g;else{K=t+56|0;O=t+4|0;k[t>>2]=27524;k[K>>2]=27544;B=0;wa(508,t+56|0,O|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(K);Qb(S|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[K>>2]=27488;B=0;va(448,O|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[O>>2]=27560;T=t+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[t+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,O|0,q|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(q);Yua(T);Ava(O);U=X;V=W;break}Yua(q);B=0;W=Ia(40,t|0,86767,44)|0;X=B;B=0;a:do if(!(X&1)?(B=0,Xa(239,W|0,0)|0,Y=B,B=0,!(Y&1)):0){Y=Ab(20)|0;B=0;eb(502,u|0,86812,76);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,v|0,86889,14);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(u);aa=$;ba=_;break}B=0;wa(510,w|0,O|0);_=B;B=0;if(_&1){_=Rb()|0;ca=Q;da=_;ea=1}else{B=0;ua(163,Y|0,u|0,v|0,40,w|0);_=B;B=0;if(_&1)fa=1;else{B=0;eb(503,Y|0,1240,229);B=0;fa=0}_=Rb()|0;$=Q;Yua(w);ca=$;da=_;ea=fa}Yua(v);Yua(u);if(ea){aa=ca;ba=da}else{ga=ca;ha=da;break a}}else{_=Rb()|0;aa=Q;ba=_}while(0);zb(Y|0);ga=aa;ha=ba}else ia=18;while(0);if((ia|0)==18){W=Rb()|0;ga=Q;ha=W}k[t>>2]=27468;k[K>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(K);ja=ga;ka=ha;Qb(ka|0)}while(0);R=U;S=V;vva(K);Qb(S|0)}else if((M|0)==(g|0))N=f;else{S=x+56|0;K=x+4|0;k[x>>2]=27524;k[S>>2]=27544;B=0;wa(508,x+56|0,K|0);V=B;B=0;if(V&1){V=Rb()|0;la=Q;na=V;vva(S);Qb(na|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[S>>2]=27488;B=0;va(448,K|0);V=B;B=0;do if(V&1){U=Rb()|0;oa=Q;pa=U}else{k[K>>2]=27560;U=x+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[x+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,K|0,q|0);R=B;B=0;if(R&1){R=Rb()|0;ha=Q;Yua(q);Yua(U);Ava(K);oa=ha;pa=R;break}Yua(q);B=0;R=Ia(40,x|0,86767,44)|0;ha=B;B=0;b:do if(!(ha&1)?(B=0,Xa(239,R|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,y|0,86812,76);O=B;B=0;do if(!(O&1)){B=0;eb(502,z|0,86889,14);t=B;B=0;if(t&1){t=Rb()|0;ba=Q;Yua(y);qa=t;ra=ba;break}B=0;wa(510,A|0,K|0);ba=B;B=0;if(ba&1){ba=Rb()|0;sa=1;ta=Q;xa=ba}else{B=0;ua(163,ga|0,y|0,z|0,44,A|0);ba=B;B=0;if(ba&1)ya=1;else{B=0;eb(503,ga|0,1240,229);B=0;ya=0}ba=Rb()|0;t=Q;Yua(A);sa=ya;ta=t;xa=ba}Yua(z);Yua(y);if(sa){qa=xa;ra=ta}else{za=ta;Aa=xa;break b}}else{ba=Rb()|0;qa=ba;ra=Q}while(0);zb(ga|0);za=ra;Aa=qa}else ia=42;while(0);if((ia|0)==42){R=Rb()|0;za=Q;Aa=R}k[x>>2]=27468;k[S>>2]=27488;k[K>>2]=27560;Yua(U);Ava(K);vva(S);ja=za;ka=Aa;Qb(ka|0)}while(0);la=oa;na=pa;vva(S);Qb(na|0)}if(!m)if((N|0)==(j|0))Ba=l;else{na=C+56|0;S=C+4|0;k[C>>2]=27524;k[na>>2]=27544;B=0;wa(508,C+56|0,S|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Ca=Q;Da=pa;vva(na);Qb(Da|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[na>>2]=27488;B=0;va(448,S|0);pa=B;B=0;do if(pa&1){oa=Rb()|0;Ea=Q;Fa=oa}else{k[S>>2]=27560;oa=C+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[C+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,S|0,q|0);la=B;B=0;if(la&1){la=Rb()|0;Aa=Q;Yua(q);Yua(oa);Ava(S);Ea=Aa;Fa=la;break}Yua(q);B=0;la=Ia(40,C|0,86904,44)|0;Aa=B;B=0;c:do if(!(Aa&1)?(B=0,Xa(239,la|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,D|0,86812,76);K=B;B=0;do if(!(K&1)){B=0;eb(502,E|0,86889,14);x=B;B=0;if(x&1){x=Rb()|0;qa=Q;Yua(D);Ga=x;Ha=qa;break}B=0;wa(510,F|0,S|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Ja=1;Ka=Q;La=qa}else{B=0;ua(163,za|0,D|0,E|0,49,F|0);qa=B;B=0;if(qa&1)Ma=1;else{B=0;eb(503,za|0,1240,229);B=0;Ma=0}qa=Rb()|0;x=Q;Yua(F);Ja=Ma;Ka=x;La=qa}Yua(E);Yua(D);if(Ja){Ga=La;Ha=Ka}else{Na=Ka;Oa=La;break c}}else{qa=Rb()|0;Ga=qa;Ha=Q}while(0);zb(za|0);Na=Ha;Oa=Ga}else ia=67;while(0);if((ia|0)==67){la=Rb()|0;Na=Q;Oa=la}k[C>>2]=27468;k[na>>2]=27488;k[S>>2]=27560;Yua(oa);Ava(S);vva(na);ja=Na;ka=Oa;Qb(ka|0)}while(0);Ca=Ea;Da=Fa;vva(na);Qb(Da|0)}else if((N|0)==(l|0))Ba=j;else{Da=G+56|0;na=G+4|0;k[G>>2]=27524;k[Da>>2]=27544;B=0;wa(508,G+56|0,na|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Pa=Q;Qa=Fa;vva(Da);Qb(Qa|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[Da>>2]=27488;B=0;va(448,na|0);Fa=B;B=0;do if(Fa&1){Ea=Rb()|0;Ra=Q;Sa=Ea}else{k[na>>2]=27560;Ea=G+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[G+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,na|0,q|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Oa=Q;Yua(q);Yua(Ea);Ava(na);Ra=Oa;Sa=Ca;break}Yua(q);B=0;Ca=Ia(40,G|0,86904,44)|0;Oa=B;B=0;d:do if(!(Oa&1)?(B=0,Xa(239,Ca|0,0)|0,Na=B,B=0,!(Na&1)):0){Na=Ab(20)|0;B=0;eb(502,H|0,86812,76);S=B;B=0;do if(!(S&1)){B=0;eb(502,I|0,86889,14);C=B;B=0;if(C&1){C=Rb()|0;Ga=Q;Yua(H);Ta=C;Ua=Ga;break}B=0;wa(510,J|0,na|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Va=1;Wa=Q;Ya=Ga}else{B=0;ua(163,Na|0,H|0,I|0,53,J|0);Ga=B;B=0;if(Ga&1)Za=1;else{B=0;eb(503,Na|0,1240,229);B=0;Za=0}Ga=Rb()|0;C=Q;Yua(J);Va=Za;Wa=C;Ya=Ga}Yua(I);Yua(H);if(Va){Ta=Ya;Ua=Wa}else{_a=Wa;$a=Ya;break d}}else{Ga=Rb()|0;Ta=Ga;Ua=Q}while(0);zb(Na|0);_a=Ua;$a=Ta}else ia=91;while(0);if((ia|0)==91){Ca=Rb()|0;_a=Q;$a=Ca}k[G>>2]=27468;k[Da>>2]=27488;k[na>>2]=27560;Yua(Ea);Ava(na);vva(Da);ja=_a;ka=$a;Qb(ka|0)}while(0);Pa=Ra;Qa=Sa;vva(Da);Qb(Qa|0)}Qa=ma(N,L)|0;if((Qa|0)>600){Da=Rqa(Qa>>>0>536870911?-1:Qa<<3)|0;ab=Da;bb=Da}else{ab=s;bb=0}if((ma(Ba+M|0,Qa)|0)>(ma(ma(N+L|0,M)|0,Ba)|0)){_X(e,f,g,h,i,j,l,m,ab,0)|0;_X(a,b,c,d,ab,M,Ba,0,n,o)|0}else{_X(a,b,c,d,e,f,g,h,ab,0)|0;_X(ab,L,N,0,i,j,l,m,n,o)|0}if(!bb){r=p;return 1}Tqa(bb);r=p;return 1}function _X(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;l=r;r=r+192|0;m=l+176|0;n=l+40|0;o=l+24|0;q=l+12|0;s=l;t=(d|0)==0;d=t?b:c;u=t?c:1;v=t?1:c;w=t?c:b;b=(h|0)==0;h=b?g:f;c=b?g:1;t=b?1:g;if((w|0)==((b?f:g)|0)){if((j|0)==0?(j=ma(h,d)|0,(j|0)>0):0)WEa(i|0,0,j<<3|0)|0;if((d|0)<=0){r=l;return 1}j=(w|0)>0;if((h|0)>0){x=0;y=0}else{r=l;return 1}while(1){g=ma(x,u)|0;if(j){f=y;b=0;while(1){z=ma(b,t)|0;A=i+(f<<3)|0;C=+p[A>>3];D=g;E=z;z=0;while(1){C=C+ +p[a+(D<<3)>>3]*+p[e+(E<<3)>>3];p[A>>3]=C;z=z+1|0;if((z|0)==(w|0))break;else{D=D+v|0;E=E+c|0}}b=b+1|0;if((b|0)==(h|0))break;else f=f+1|0}}x=x+1|0;if((x|0)==(d|0))break;else y=h+y|0}r=l;return 1}l=n+56|0;y=n+4|0;k[n>>2]=27524;k[l>>2]=27544;B=0;wa(508,n+56|0,y|0);h=B;B=0;if(h&1){h=Rb()|0;F=Q;G=h;vva(l);Qb(G|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[l>>2]=27488;B=0;va(448,y|0);h=B;B=0;do if(h&1){d=Rb()|0;H=Q;I=d}else{k[y>>2]=27560;d=n+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[n+52>>2]=16;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;B=0;wa(509,y|0,m|0);x=B;B=0;if(x&1){x=Rb()|0;c=Q;Yua(m);Yua(d);Ava(y);H=c;I=x;break}Yua(m);B=0;x=Ia(40,n|0,86949,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,o|0,86812,76);c=B;B=0;do if(!(c&1)){B=0;eb(502,q|0,86993,14);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(o);J=w;K=v;break}B=0;wa(510,s|0,y|0);v=B;B=0;if(v&1){v=Rb()|0;L=Q;M=v;N=1}else{B=0;ua(163,x|0,o|0,q|0,124,s|0);v=B;B=0;if(v&1)O=1;else{B=0;eb(503,x|0,1240,229);B=0;O=0}v=Rb()|0;w=Q;Yua(s);L=w;M=v;N=O}Yua(q);Yua(o);if(N){J=L;K=M}else{P=L;R=M;k[n>>2]=27468;k[l>>2]=27488;k[y>>2]=27560;Yua(d);Ava(y);vva(l);Qb(R|0)}}else{v=Rb()|0;J=Q;K=v}while(0);zb(x|0);P=J;R=K;k[n>>2]=27468;k[l>>2]=27488;k[y>>2]=27560;Yua(d);Ava(y);vva(l);Qb(R|0)}c=Rb()|0;P=Q;R=c;k[n>>2]=27468;k[l>>2]=27488;k[y>>2]=27560;Yua(d);Ava(y);vva(l);Qb(R|0)}while(0);F=H;G=I;vva(l);Qb(G|0);return 0}function $X(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0.0,aa=0,ba=0,ca=0.0,da=0,ea=0,fa=0.0,ga=0.0,ha=0,ia=0.0,ja=0,ka=0.0,la=0.0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0;g=r;r=r+368|0;h=g+344|0;i=g+208|0;j=g+196|0;l=g+184|0;m=g+36|0;n=g+48|0;o=g+24|0;q=g+12|0;s=g;if((d|0)==0&(e|0)!=0){t=i+56|0;u=i+4|0;k[i>>2]=27524;k[t>>2]=27544;B=0;wa(508,i+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=i+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[i+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,u|0,h|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(h);Yua(y);Ava(u);z=D;A=C;break}Yua(h);B=0;C=Ia(40,i|0,87008,28)|0;D=B;B=0;a:do if(((!(D&1)?(B=0,E=Xa(242,C|0,e|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,E|0,157077,1)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,j|0,86812,76);E=B;B=0;do if(!(E&1)){B=0;eb(502,l|0,87037,13);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(j);I=G;J=H;break}B=0;wa(510,m|0,u|0);H=B;B=0;if(H&1){H=Rb()|0;K=H;L=Q;M=1}else{B=0;ua(163,F|0,j|0,l|0,166,m|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,F|0,1240,229);B=0;N=0}H=Rb()|0;G=Q;Yua(m);K=H;L=G;M=N}Yua(l);Yua(j);if(M){I=K;J=L}else{O=K;P=L;break a}}else{G=Rb()|0;I=G;J=Q}while(0);zb(F|0);O=I;P=J}else R=19;while(0);if((R|0)==19){C=Rb()|0;O=C;P=Q}k[i>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);S=P;T=O;Qb(T|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}x=c>>>0>1073741823?-1:c<<2;t=Rqa(x)|0;A=Rqa(x)|0;z=Rqa(x)|0;x=(c|0)>0;b:do if(x){w=(e|0)>0;U=1.0;O=0;P=0;u=0;while(1){i=P;J=u;I=0;V=0.0;while(1){if(!(k[z+(I<<2)>>2]|0)){L=ma(I,b)|0;K=i;M=J;j=0;W=V;while(1){if((k[z+(j<<2)>>2]|0)==0?(X=+p[a+(j+L<<3)>>3],+$(+X)>+$(+W)):0){Y=j;Z=I;_=X}else{Y=K;Z=M;_=W}j=j+1|0;if((j|0)==(c|0)){aa=Y;ba=Z;ca=_;break}else{K=Y;M=Z;W=_}}}else{aa=i;ba=J;ca=V}I=I+1|0;if((I|0)==(c|0)){da=aa;ea=ba;fa=ca;break}else{i=aa;J=ba;V=ca}}if(+$(+fa)<2.220446049250313e-16){ga=fa;break}k[t+(O<<2)>>2]=ea;k[A+(O<<2)>>2]=da;J=z+(da<<2)|0;k[J>>2]=(k[J>>2]|0)+1;if((ea|0)==(da|0)){ha=ma(da,b)|0;ia=U}else{J=ma(ea,b)|0;i=ma(da,b)|0;I=0;do{F=a+(I+J<<3)|0;V=+p[F>>3];M=a+(I+i<<3)|0;p[F>>3]=+p[M>>3];p[M>>3]=V;I=I+1|0}while((I|0)!=(c|0));I=ma(ea,e)|0;J=ma(da,e)|0;if(w){M=0;do{F=d+(M+I<<3)|0;V=+p[F>>3];K=d+(M+J<<3)|0;p[F>>3]=+p[K>>3];p[K>>3]=V;M=M+1|0}while((M|0)!=(e|0))}ha=i;ia=-U}p[a+(ha+da<<3)>>3]=1.0;M=0;do{J=a+(M+ha<<3)|0;p[J>>3]=+p[J>>3]/fa;M=M+1|0}while((M|0)!=(c|0));M=ma(da,e)|0;if(w){i=0;do{J=d+(i+M<<3)|0;p[J>>3]=+p[J>>3]/fa;i=i+1|0}while((i|0)!=(e|0));if(w){i=0;do{if((i|0)!=(da|0)?(J=ma(i,b)|0,I=a+(J+da<<3)|0,V=+p[I>>3],p[I>>3]=0.0,+$(+V)>2.220446049250313e-16):0){I=0;do{K=a+(I+J<<3)|0;p[K>>3]=+p[K>>3]-V*+p[a+(I+ha<<3)>>3];I=I+1|0}while((I|0)!=(c|0));I=ma(i,e)|0;J=0;do{K=d+(J+I<<3)|0;p[K>>3]=+p[K>>3]-V*+p[d+(J+M<<3)>>3];J=J+1|0}while((J|0)!=(e|0))}i=i+1|0}while((i|0)!=(c|0))}else{ja=0;R=86}}else{ja=0;R=86}if((R|0)==86)while(1){R=0;if((ja|0)!=(da|0)?(i=ma(ja,b)|0,M=a+(i+da<<3)|0,V=+p[M>>3],p[M>>3]=0.0,+$(+V)>2.220446049250313e-16):0){M=0;do{J=a+(M+i<<3)|0;p[J>>3]=+p[J>>3]-V*+p[a+(M+ha<<3)>>3];M=M+1|0}while((M|0)!=(c|0))}ja=ja+1|0;if((ja|0)==(c|0))break;else R=86}V=fa*ia;M=O+1|0;if((M|0)<(c|0)){U=V;O=M;P=da;u=ea}else{ka=V;R=37;break}}if((R|0)==37){if(!x){la=ka;break}u=c+-1|0;P=0;while(1){O=u-P|0;w=k[t+(O<<2)>>2]|0;y=k[A+(O<<2)>>2]|0;if((w|0)!=(y|0)){O=0;M=0;while(1){i=a+(O+w<<3)|0;U=+p[i>>3];J=a+(O+y<<3)|0;p[i>>3]=+p[J>>3];p[J>>3]=U;M=M+1|0;if((M|0)==(c|0))break;else O=O+b|0}}P=P+1|0;if((P|0)==(c|0)){la=ka;break b}}}Tqa(t);Tqa(A);Tqa(z);P=n+56|0;u=n+4|0;k[n>>2]=27524;k[P>>2]=27544;B=0;wa(508,n+56|0,u|0);O=B;B=0;if(O&1){O=Rb()|0;na=Q;oa=O;vva(P);Qb(oa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[P>>2]=27488;B=0;va(448,u|0);O=B;B=0;do if(O&1){M=Rb()|0;pa=Q;qa=M}else{k[u>>2]=27560;M=n+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,u|0,h|0);y=B;B=0;if(y&1){y=Rb()|0;w=Q;Yua(h);Yua(M);Ava(u);pa=w;qa=y;break}Yua(h);B=0;y=Ia(40,n|0,87051,6)|0;w=B;B=0;c:do if(((!(w&1)?(B=0,J=Sa(1,y|0,+ga)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,J|0,87058,26)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,i|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,o|0,86812,76);J=B;B=0;do if(!(J&1)){B=0;eb(502,q|0,87037,13);I=B;B=0;if(I&1){I=Rb()|0;K=Q;Yua(o);ra=I;sa=K;break}B=0;wa(510,s|0,u|0);K=B;B=0;if(K&1){K=Rb()|0;ta=1;xa=Q;ya=K}else{B=0;ua(163,i|0,o|0,q|0,205,s|0);K=B;B=0;if(K&1)za=1;else{B=0;eb(503,i|0,1240,229);B=0;za=0}K=Rb()|0;I=Q;Yua(s);ta=za;xa=I;ya=K}Yua(q);Yua(o);if(ta){ra=ya;sa=xa}else{Aa=xa;Ba=ya;break c}}else{K=Rb()|0;ra=K;sa=Q}while(0);zb(i|0);Aa=sa;Ba=ra}else R=60;while(0);if((R|0)==60){y=Rb()|0;Aa=Q;Ba=y}k[n>>2]=27468;k[P>>2]=27488;k[u>>2]=27560;Yua(M);Ava(u);vva(P);S=Aa;T=Ba;Qb(T|0)}while(0);na=pa;oa=qa;vva(P);Qb(oa|0)}else la=1.0;while(0);if(!f){Tqa(t);Tqa(A);Tqa(z);r=g;return 1}p[f>>3]=la;Tqa(t);Tqa(A);Tqa(z);r=g;return 1}function aY(a,b){a=a|0;b=b|0;p[a>>3]=+p[b>>3]*+p[b+24>>3]-+p[b+16>>3]*+p[b+8>>3];return}function bY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0.0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=+p[b+24>>3];j=b+16|0;l=b+8|0;m=+p[b>>3]*i-+p[j>>3]*+p[l>>3];if(!(+$(+m)<2.220446049250313e-16)){n=1.0/m;p[a>>3]=i*n;p[a+8>>3]=-(n*+p[l>>3]);p[a+16>>3]=-(n*+p[j>>3]);p[a+24>>3]=n*+p[b>>3];r=c;return}c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;o=Q;q=a;vva(c);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){j=Rb()|0;s=Q;t=j}else{k[b>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;u=Q;Yua(d);Yua(j);Ava(b);s=u;t=l;break}Yua(d);B=0;l=Ia(40,e|0,87085,40)|0;u=B;B=0;if(!(u&1)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,f|0,86812,76);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,87126,15);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,b|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,l|0,f|0,g|0,336,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,l|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(F|0)}}else{v=Rb()|0;x=Q;y=v}while(0);zb(l|0);E=x;F=y;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(F|0)}u=Rb()|0;E=Q;F=u;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(F|0)}while(0);o=s;q=t;vva(c);Qb(q|0)}function cY(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;var h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;h=-e-g;i=f*f;j=h*h-(e*g-i)*4.0;k=i+(e*e+g*g);do if(!(k<1.0e-30)){if(j<k*1.0e-05){l=h*-.5;m=l;n=l;o=1.0;q=0.0;break}l=+aa(+j);r=(-h-l)*.5;s=(l-h)*.5;l=e-r;t=i+l*l;u=g-r;v=i+u*u;if(v<t){w=+aa(+t);m=r;n=s;o=-f/w;q=l/w;break}else{w=+aa(+v);m=r;n=s;o=-u/w;q=f/w;break}}else{m=0.0;n=0.0;o=1.0;q=0.0}while(0);p[a>>3]=m;p[b>>3]=n;p[c>>3]=o;p[d>>3]=q;return}function dY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;c=+p[b>>3];d=+p[b+32>>3];e=+p[b+64>>3];f=+p[b+40>>3];g=+p[b+56>>3];h=+p[b+24>>3];i=+p[b+8>>3];j=+p[b+16>>3];k=+p[b+48>>3];p[a>>3]=c*d*e-c*f*g-e*(h*i)+g*(h*j)+f*(i*k)-d*(j*k);return}function eY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0.0,m=0,n=0.0,o=0,q=0.0,s=0,t=0.0,u=0,v=0.0,w=0,x=0.0,y=0,z=0.0,A=0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=+p[b>>3];j=b+32|0;l=+p[j>>3];m=b+64|0;n=+p[m>>3];o=b+40|0;q=+p[o>>3];s=b+56|0;t=+p[s>>3];u=b+24|0;v=+p[u>>3];w=b+8|0;x=+p[w>>3];y=b+16|0;z=+p[y>>3];A=b+48|0;C=+p[A>>3];D=i*l*n-i*q*t-n*(v*x)+t*(v*z)+q*(x*C)-l*(z*C);if(!(+$(+D)<2.220446049250313e-16)){C=1.0/D;p[a>>3]=(l*n-q*t)*C;p[a+8>>3]=C*(+p[y>>3]*+p[s>>3]-+p[w>>3]*+p[m>>3]);p[a+16>>3]=C*(+p[w>>3]*+p[o>>3]-+p[y>>3]*+p[j>>3]);p[a+24>>3]=C*(+p[o>>3]*+p[A>>3]-+p[u>>3]*+p[m>>3]);p[a+32>>3]=C*(+p[b>>3]*+p[m>>3]-+p[y>>3]*+p[A>>3]);p[a+40>>3]=C*(+p[y>>3]*+p[u>>3]-+p[b>>3]*+p[o>>3]);p[a+48>>3]=C*(+p[u>>3]*+p[s>>3]-+p[j>>3]*+p[A>>3]);p[a+56>>3]=C*(+p[w>>3]*+p[A>>3]-+p[b>>3]*+p[s>>3]);p[a+64>>3]=C*(+p[b>>3]*+p[j>>3]-+p[w>>3]*+p[u>>3]);r=c;return}c=e+56|0;u=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,u|0);w=B;B=0;if(w&1){w=Rb()|0;E=Q;F=w;vva(c);Qb(F|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,u|0);w=B;B=0;do if(w&1){j=Rb()|0;G=Q;H=j}else{k[u>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,u|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;a=Q;Yua(d);Yua(j);Ava(u);G=a;H=b;break}Yua(d);B=0;b=Ia(40,e|0,87085,40)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,f|0,86812,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,g|0,87142,15);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(f);I=A;J=s;break}B=0;wa(510,h|0,u|0);s=B;B=0;if(s&1){s=Rb()|0;K=Q;L=s;M=1}else{B=0;ua(163,b|0,f|0,g|0,456,h|0);s=B;B=0;if(s&1)N=1;else{B=0;eb(503,b|0,1240,229);B=0;N=0}s=Rb()|0;A=Q;Yua(h);K=A;L=s;M=N}Yua(g);Yua(f);if(M){I=K;J=L}else{O=K;P=L;k[e>>2]=27468;k[c>>2]=27488;k[u>>2]=27560;Yua(j);Ava(u);vva(c);Qb(P|0)}}else{s=Rb()|0;I=Q;J=s}while(0);zb(b|0);O=I;P=J;k[e>>2]=27468;k[c>>2]=27488;k[u>>2]=27560;Yua(j);Ava(u);vva(c);Qb(P|0)}a=Rb()|0;O=Q;P=a;k[e>>2]=27468;k[c>>2]=27488;k[u>>2]=27560;Yua(j);Ava(u);vva(c);Qb(P|0)}while(0);E=G;F=H;vva(c);Qb(F|0)}function fY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+80|0;e=d;eY(e,b);b=c+8|0;f=c+16|0;p[a>>3]=+p[e>>3]*+p[c>>3]+ +p[e+8>>3]*+p[b>>3]+ +p[e+16>>3]*+p[f>>3];p[a+8>>3]=+p[e+24>>3]*+p[c>>3]+ +p[e+32>>3]*+p[b>>3]+ +p[e+40>>3]*+p[f>>3];p[a+16>>3]=+p[e+48>>3]*+p[c>>3]+ +p[e+56>>3]*+p[b>>3]+ +p[e+64>>3]*+p[f>>3];r=d;return}function gY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0;c=+p[b>>3];d=+p[b+8>>3];e=+p[b+16>>3];f=+p[b+24>>3];g=+p[b+32>>3];h=+p[b+40>>3];i=+p[b+48>>3];j=+p[b+56>>3];k=+p[b+64>>3];l=+p[b+72>>3];m=+p[b+80>>3];n=+p[b+88>>3];o=+p[b+96>>3];q=+p[b+104>>3];r=+p[b+112>>3];s=+p[b+120>>3];p[a>>3]=j*l*r+(n*(i*q)+(h*m*s-n*(h*r)-i*l*s))-m*(j*q);t=i*k;u=i*o;v=j*k;w=j*o;p[a+32>>3]=-(v*r+(n*u+(g*m*s-n*(g*r)-t*s))-m*w);x=g*l;y=g*q;z=h*k;A=h*o;p[a+64>>3]=v*q+(n*A+(x*s-n*y-z*s))-l*w;p[a+96>>3]=-(t*q+(m*A+(x*r-m*y-z*r))-l*u);u=d*m;z=d*r;y=e*l;x=e*q;A=f*l;t=f*q;p[a+8>>3]=-(A*r+(n*x+(u*s-n*z-y*s))-m*t);w=c*m;v=c*r;B=e*k;C=e*o;D=f*k;E=f*o;p[a+40>>3]=D*r+(n*C+(w*s-n*v-B*s))-m*E;F=c*l;G=c*q;H=d*k;k=d*o;p[a+72>>3]=-(D*q+(n*k+(F*s-n*G-H*s))-l*E);p[a+104>>3]=B*q+(m*k+(F*r-m*G-H*r))-l*C;o=d*i;I=e*h;J=f*h;p[a+16>>3]=J*r+(j*x+(o*s-j*z-I*s))-i*t;t=c*i;z=e*g;e=f*g;p[a+48>>3]=-(e*r+(j*C+(t*s-j*v-z*s))-i*E);v=c*h;c=d*g;p[a+80>>3]=e*q+(j*k+(v*s-j*G-c*s))-h*E;p[a+112>>3]=-(z*q+(i*k+(v*r-i*G-c*r))-h*C);p[a+24>>3]=-(J*m+(j*y+(o*n-j*u-I*n))-i*A);p[a+56>>3]=e*m+(j*B+(t*n-j*w-z*n))-i*D;p[a+88>>3]=-(e*l+(j*H+(v*n-j*F-c*n))-h*D);p[a+120>>3]=z*l+(i*H+(v*m-i*F-c*m))-h*B;return}function hY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=+p[b+32>>3];j=+p[b+40>>3];l=+p[b+48>>3];m=+p[b+56>>3];n=+p[b+64>>3];o=+p[b+72>>3];q=+p[b+80>>3];s=+p[b+88>>3];t=+p[b+96>>3];u=+p[b+104>>3];v=+p[b+112>>3];w=+p[b+120>>3];x=l*n;y=l*t;z=m*n;A=m*t;C=i*o;D=i*u;E=j*n;n=j*t;t=+p[b+16>>3]*(z*u+(s*n+(C*w-s*D-E*w))-o*A)+(+p[b>>3]*(m*o*v+(s*(l*u)+(j*q*w-s*(j*v)-l*o*w))-q*(m*u))-+p[b+8>>3]*(z*v+(s*y+(i*q*w-s*(i*v)-x*w))-q*A))-+p[b+24>>3]*(x*u+(q*n+(C*v-q*D-E*v))-o*y);if(!(+$(+t)<2.220446049250313e-16)){y=1.0/t;gY(a,b);p[a>>3]=y*+p[a>>3];b=a+8|0;p[b>>3]=y*+p[b>>3];b=a+16|0;p[b>>3]=y*+p[b>>3];b=a+24|0;p[b>>3]=y*+p[b>>3];b=a+32|0;p[b>>3]=y*+p[b>>3];b=a+40|0;p[b>>3]=y*+p[b>>3];b=a+48|0;p[b>>3]=y*+p[b>>3];b=a+56|0;p[b>>3]=y*+p[b>>3];b=a+64|0;p[b>>3]=y*+p[b>>3];b=a+72|0;p[b>>3]=y*+p[b>>3];b=a+80|0;p[b>>3]=y*+p[b>>3];b=a+88|0;p[b>>3]=y*+p[b>>3];b=a+96|0;p[b>>3]=y*+p[b>>3];b=a+104|0;p[b>>3]=y*+p[b>>3];b=a+112|0;p[b>>3]=y*+p[b>>3];b=a+120|0;p[b>>3]=y*+p[b>>3];r=c;return}c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;F=Q;G=a;vva(c);Qb(G|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){H=Rb()|0;I=Q;J=H}else{k[b>>2]=27560;H=e+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(d);Yua(H);Ava(b);I=L;J=K;break}Yua(d);B=0;K=Ia(40,e|0,87085,40)|0;L=B;B=0;if(!(L&1)?(B=0,Xa(239,K|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,f|0,86812,76);L=B;B=0;do if(!(L&1)){B=0;eb(502,g|0,87158,15);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(f);O=N;P=M;break}B=0;wa(510,h|0,b|0);M=B;B=0;if(M&1){M=Rb()|0;R=Q;S=M;T=1}else{B=0;ua(163,K|0,f|0,g|0,560,h|0);M=B;B=0;if(M&1)U=1;else{B=0;eb(503,K|0,1240,229);B=0;U=0}M=Rb()|0;N=Q;Yua(h);R=N;S=M;T=U}Yua(g);Yua(f);if(T){O=R;P=S}else{V=R;W=S;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(H);Ava(b);vva(c);Qb(W|0)}}else{M=Rb()|0;O=Q;P=M}while(0);zb(K|0);V=O;W=P;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(H);Ava(b);vva(c);Qb(W|0)}L=Rb()|0;V=Q;W=L;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(H);Ava(b);vva(c);Qb(W|0)}while(0);F=I;G=J;vva(c);Qb(G|0)}function iY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=r;r=r+128|0;e=d;hY(e,b);b=c+8|0;f=c+16|0;g=c+24|0;p[a>>3]=+p[e>>3]*+p[c>>3]+ +p[e+8>>3]*+p[b>>3]+ +p[e+16>>3]*+p[f>>3]+ +p[e+24>>3]*+p[g>>3];p[a+8>>3]=+p[e+32>>3]*+p[c>>3]+ +p[e+40>>3]*+p[b>>3]+ +p[e+48>>3]*+p[f>>3]+ +p[e+56>>3]*+p[g>>3];p[a+16>>3]=+p[e+64>>3]*+p[c>>3]+ +p[e+72>>3]*+p[b>>3]+ +p[e+80>>3]*+p[f>>3]+ +p[e+88>>3]*+p[g>>3];p[a+24>>3]=+p[e+96>>3]*+p[c>>3]+ +p[e+104>>3]*+p[b>>3]+ +p[e+112>>3]*+p[f>>3]+ +p[e+120>>3]*+p[g>>3];r=d;return}function jY(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=k[a>>2]|0;f=d+1|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;if((d|0)>0){f=e;h=0;do{i=h;h=h+1|0;p[g+(h<<3)>>3]=+p[f+(i<<3)>>3]}while((h|0)!=(d|0))}if(c)p[g>>3]=b;else p[g+(d<<3)>>3]=b;if(!e){k[a>>2]=g;return}Tqa(e);k[a>>2]=g;return}function kY(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0;if((b|0)>0){c=0;d=0.0}else{e=0.0;return +e}while(1){f=d+ +p[a+(c<<3)>>3];c=c+1|0;if((c|0)==(b|0)){e=f;break}else d=f}return +e}function lY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;b=k[a>>2]|0;e=Rqa(d>>>0>536870911?-1:d<<3)|0;if((d|0)>0){f=b;g=0;do{p[e+(g<<3)>>3]=+p[f+(k[c+(g<<2)>>2]<<3)>>3];g=g+1|0}while((g|0)!=(d|0))}if(!b){k[a>>2]=e;return}Tqa(b);k[a>>2]=e;return}function mY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0;e=k[a>>2]|0;f=b+1|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;if((c|0)>0){f=0;do{p[g+(f<<3)>>3]=+p[e+(f<<3)>>3];f=f+1|0}while((f|0)!=(c|0))}f=e+(c<<3)|0;p[g+(c<<3)>>3]=+p[f>>3]*d;p[g+(c+1<<3)>>3]=+p[f>>3]*d;f=c+2|0;if((f|0)>(b|0)){Tqa(e);k[a>>2]=g;return}else h=f;while(1){p[g+(h<<3)>>3]=+p[e+(h+-1<<3)>>3];if((h|0)<(b|0))h=h+1|0;else break}Tqa(e);k[a>>2]=g;return}function nY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;if(vY()|0){n=e+56|0;o=e+4|0;k[e>>2]=27524;k[n>>2]=27544;B=0;wa(508,e+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=e+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(o);u=x;v=w;break}Yua(d);B=0;w=Ia(40,e|0,87174,44)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,f|0,87219,72);z=B;B=0;do if(!(z&1)){B=0;eb(502,g|0,87292,7);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(f);D=A;E=C;break}B=0;wa(510,h|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;G=C;H=1}else{B=0;ua(163,y|0,f|0,g|0,22,h|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(h);F=A;G=C;H=I}Yua(g);Yua(f);if(H){D=G;E=F}else{J=G;K=F;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=D;K=E}else L=17;while(0);if((L|0)==17){w=Rb()|0;J=w;K=Q}k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=K;N=J;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}s=Ysa(a,b)|0;if(s){r=c;return s|0}s=i+56|0;c=i+4|0;k[i>>2]=27524;k[s>>2]=27544;B=0;wa(508,i+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;O=Q;P=b;vva(s);Qb(P|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[s>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){n=Rb()|0;R=Q;S=n}else{k[c>>2]=27560;n=i+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(d);Yua(n);Ava(c);R=u;S=v;break}Yua(d);B=0;v=Ia(40,i|0,87300,20)|0;u=B;B=0;b:do if(((!(u&1)?(q=Lta(a)|0,B=0,J=Ia(40,v|0,a|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,J|0,87321,30)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,j|0,87219,72);J=B;B=0;do if(!(J&1)){B=0;eb(502,l|0,87292,7);K=B;B=0;if(K&1){K=Rb()|0;o=Q;Yua(j);T=K;U=o;break}B=0;wa(510,m|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;V=1;W=Q;X=o}else{B=0;ua(163,q|0,j|0,l|0,26,m|0);o=B;B=0;if(o&1)Y=1;else{B=0;eb(503,q|0,1240,229);B=0;Y=0}o=Rb()|0;K=Q;Yua(m);V=Y;W=K;X=o}Yua(l);Yua(j);if(V){T=X;U=W}else{Z=W;_=X;break b}}else{o=Rb()|0;T=o;U=Q}while(0);zb(q|0);Z=U;_=T}else L=43;while(0);if((L|0)==43){v=Rb()|0;Z=Q;_=v}k[i>>2]=27468;k[s>>2]=27488;k[c>>2]=27560;Yua(n);Ava(c);vva(s);M=Z;N=_;Qb(N|0)}while(0);O=R;P=S;vva(s);Qb(P|0);return 0}function oY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=vY()|0;l=wY()|0;if((l|0)>0){m=0;n=0;while(1){if((j|0)==(n|0))o=Ysa(a,b)|0;else o=m;uY()|0;n=n+1|0;if((n|0)==(l|0)){p=o;break}else m=o}}else p=0;if(!((p|0)==0&c)){r=d;return p|0}p=f+56|0;d=f+4|0;k[f>>2]=27524;k[p>>2]=27544;B=0;wa(508,f+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;q=Q;s=c;vva(p);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[p>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){o=Rb()|0;t=Q;u=o}else{k[d>>2]=27560;o=f+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Yua(e);Yua(o);Ava(d);t=l;u=m;break}Yua(e);B=0;m=Ia(40,f|0,87300,20)|0;l=B;B=0;if(((!(l&1)?(l=Lta(a)|0,B=0,n=Ia(40,m|0,a|0,l|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,n|0,87321,30)|0,n=B,B=0,!(n&1)):0)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,g|0,87219,72);n=B;B=0;do if(!(n&1)){B=0;eb(502,h|0,87352,6);m=B;B=0;if(m&1){m=Rb()|0;b=Q;Yua(g);v=b;w=m;break}B=0;wa(510,i|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;x=Q;y=m;z=1}else{B=0;ua(163,l|0,g|0,h|0,43,i|0);m=B;B=0;if(m&1)A=1;else{B=0;eb(503,l|0,1240,229);B=0;A=0}m=Rb()|0;b=Q;Yua(i);x=b;y=m;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[p>>2]=27488;k[d>>2]=27560;Yua(o);Ava(d);vva(p);Qb(D|0)}}else{m=Rb()|0;v=Q;w=m}while(0);zb(l|0);C=v;D=w;k[f>>2]=27468;k[p>>2]=27488;k[d>>2]=27560;Yua(o);Ava(d);vva(p);Qb(D|0)}n=Rb()|0;C=Q;D=n;k[f>>2]=27468;k[p>>2]=27488;k[d>>2]=27560;Yua(o);Ava(d);vva(p);Qb(D|0)}while(0);q=t;s=u;vva(p);Qb(s|0);return 0}function pY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if(!(Tsa(a)|0)){r=c;return}c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(a);n=q;o=p;break}Yua(d);B=0;p=Ia(40,e|0,87359,21)|0;q=B;B=0;if((!(q&1)?(q=Lta(b)|0,B=0,s=Ia(40,p|0,b|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,87381,73);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,87455,7);p=B;B=0;if(p&1){p=Rb()|0;t=Q;Yua(f);u=t;v=p;break}B=0;wa(510,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;w=Q;x=p;y=1}else{B=0;ua(163,s|0,f|0,g|0,18,h|0);p=B;B=0;if(p&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}p=Rb()|0;t=Q;Yua(h);w=t;x=p;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}}else{p=Rb()|0;u=Q;v=p}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function qY(a){a=a|0;if(vY()|0)return 1;uqa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0);return 1}function rY(a){a=a|0;uqa((i[a>>0]&1)==0?a+1|0:k[a+8>>2]|0);return 1}function sY(a){a=a|0;i[53730]=1;k[6862]=a;return}function tY(){i[53730]=0;return}function uY(){var a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;if(i[53730]|0){r=a;return k[6862]|0}a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;j=Q;l=h;vva(a);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){m=Rb()|0;n=Q;o=m}else{k[g>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(g);n=q;o=p;break}Yua(b);B=0;p=Ia(40,c|0,87463,33)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,d|0,87497,74);q=B;B=0;do if(!(q&1)){B=0;eb(502,e|0,87572,7);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(d);u=t;v=s;break}B=0;wa(510,f|0,g|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,d|0,e|0,31,f|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(f);w=t;x=s;y=z}Yua(e);Yua(d);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(a);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(a);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(m);Ava(g);vva(a);Qb(C|0)}while(0);j=n;l=o;vva(a);Qb(l|0);return 0}function vY(){var a=0,b=0,c=0;a=r;r=r+16|0;b=a;k[b>>2]=0;if(!(i[53730]|0)){c=0;r=a;return c|0}iZ(k[6862]|0,b)|0;c=k[b>>2]|0;r=a;return c|0}function wY(){var a=0,b=0,c=0;a=r;r=r+16|0;b=a;k[b>>2]=1;if(!(i[53730]|0)){c=1;r=a;return c|0}jZ(k[6862]|0,b)|0;c=k[b>>2]|0;r=a;return c|0}function xY(a){a=a|0;var b=0;do switch(a|0){case 0:{b=87588;break}case 1:{b=87604;break}case 2:{b=87613;break}case 3:{b=87626;break}case 4:{b=87636;break}case 5:{b=87654;break}case 6:{b=87664;break}case 7:{b=87672;break}case 8:{b=87680;break}case 9:{b=87699;break}case 10:{b=87721;break}case 11:{b=87749;break}case 12:{b=87778;break}case 13:{b=87807;break}case 14:{b=87838;break}case 15:{b=87863;break}case 16:{b=87887;break}case 17:{b=87917;break}case 18:{b=87948;break}case 19:{b=87979;break}case 20:{b=88006;break}case 21:{b=88023;break}case 22:{b=88034;break}case 23:{b=88049;break}case 24:{b=88073;break}case 25:{b=88099;break}case 26:{b=88123;break}case 27:{b=88155;break}case 28:{b=88168;break}case 29:{b=88185;break}case 30:{b=88202;break}case 31:{b=88219;break}case 32:{b=88236;break}case 33:{b=88259;break}case 34:{b=88284;break}case 35:{b=88313;break}case 36:{b=88343;break}case 37:{b=88374;break}case 38:{b=88388;break}case 39:{b=88416;break}case 40:{b=88452;break}case 41:{b=88488;break}case 42:{b=88522;break}case 43:{b=88554;break}case 44:{b=88587;break}case 45:{b=88615;break}case 46:{b=88647;break}case 47:{b=88675;break}case 48:{b=88707;break}case 49:{b=88728;break}case 50:{b=88746;break}case 51:{b=88771;break}case 52:{b=88798;break}case 53:{b=88828;break}case 54:{b=88848;break}case 55:{b=88868;break}case 56:{b=88896;break}case 57:{b=88929;break}case 58:{b=88957;break}case 59:{b=88985;break}case 60:{b=89002;break}case 61:{b=89025;break}case 62:{b=89048;break}case 63:{b=89074;break}case 64:{b=89078;break}case 65:{b=89083;break}case 66:{b=89094;break}case 67:{b=89124;break}case 68:{b=89137;break}case 69:{b=89153;break}case 70:{b=89173;break}case 71:{b=89206;break}case 72:{b=89228;break}case 73:{b=89249;break}case 74:{b=89276;break}case 75:{b=89301;break}case 76:{b=89321;break}case 77:{b=89354;break}case 78:{b=89384;break}case 79:{b=89404;break}case 80:{b=89433;break}case 81:{b=89467;break}case 82:{b=89495;break}case 83:{b=89514;break}case 84:{b=89533;break}case 85:{b=89552;break}case 86:{b=89582;break}case 87:{b=89609;break}case 88:{b=89641;break}case 89:{b=89655;break}case 90:{b=89669;break}case 91:{b=89683;break}case 92:{b=89705;break}case 93:{b=89726;break}case 94:{b=89747;break}case 95:{b=89775;break}case 96:{b=89793;break}case 97:{b=89811;break}case 98:{b=89830;break}case 99:{b=89847;break}case 100:{b=89864;break}case 101:{b=89882;break}case 102:{b=89899;break}case 103:{b=89916;break}case 104:{b=89943;break}case 105:{b=89954;break}case 106:{b=89974;break}case 107:{b=90001;break}case 108:{b=90011;break}case 109:{b=90021;break}case 110:{b=90031;break}case 111:{b=90041;break}case 112:{b=90053;break}case 113:{b=90067;break}case 114:{b=90077;break}case 115:{b=90096;break}case 116:{b=90122;break}case 117:{b=90139;break}case 118:{b=90164;break}case 119:{b=90179;break}case 120:{b=90195;break}case 121:{b=90225;break}case 122:{b=90254;break}case 123:{b=90266;break}case 124:{b=90279;break}case 125:{b=90295;break}case 126:{b=90316;break}case 127:{b=90334;break}case 128:{b=90342;break}case 129:{b=90353;break}case 130:{b=90367;break}case 131:{b=90381;break}case 132:{b=90398;break}case 133:{b=90417;break}case 134:{b=90435;break}case 135:{b=90462;break}case 136:{b=90497;break}case 137:{b=90525;break}case 138:{b=90554;break}case 139:{b=90587;break}case 140:{b=90619;break}case 141:{b=90641;break}case 142:{b=90670;break}case 143:{b=90698;break}case 144:{b=90728;break}case 145:{b=90751;break}case 146:{b=90782;break}case 147:{b=90813;break}case 148:{b=90840;break}case 149:{b=90864;break}case 150:{b=90891;break}case 151:{b=90915;break}case 152:{b=90942;break}case 153:{b=90970;break}case 154:{b=90999;break}case 155:{b=91024;break}case 156:{b=91048;break}case 157:{b=91073;break}case 158:{b=91098;break}case 159:{b=91121;break}case 160:{b=91144;break}case 161:{b=91172;break}case 162:{b=91187;break}case 163:{b=91205;break}case 164:{b=91224;break}case 165:{b=91246;break}case 166:{b=91263;break}case 167:{b=91277;break}case 168:{b=91296;break}case 169:{b=91317;break}case 170:{b=91337;break}case 171:{b=91361;break}case 172:{b=91382;break}case 173:{b=91400;break}case 174:{b=91421;break}case 175:{b=91438;break}case 176:{b=91460;break}case 177:{b=91487;break}case 178:{b=91518;break}case 179:{b=91549;break}case 180:{b=91584;break}case 181:{b=91607;break}case 182:{b=91632;break}case 183:{b=91651;break}case 184:{b=91665;break}case 185:{b=91692;break}case 186:{b=91715;break}case 187:{b=91739;break}case 188:{b=91756;break}case 189:{b=91774;break}case 190:{b=91789;break}case 191:{b=91804;break}case 192:{b=91819;break}case 193:{b=91834;break}case 194:{b=91849;break}case 195:{b=91868;break}case 196:{b=91891;break}case 197:{b=91907;break}case 198:{b=91922;break}case 199:{b=91952;break}case 200:{b=91978;break}case 201:{b=92001;break}case 202:{b=92023;break}case 203:{b=92043;break}case 204:{b=92058;break}case 205:{b=92073;break}case 206:{b=92088;break}case 207:{b=92104;break}case 208:{b=92122;break}case 209:{b=92139;break}case 210:{b=92153;break}case 211:{b=92175;break}case 212:{b=92195;break}case 213:{b=92217;break}case 214:{b=92245;break}case 215:{b=92264;break}case 216:{b=92286;break}case 217:{b=92307;break}case 218:{b=92326;break}case 219:{b=92346;break}case 220:{b=92369;break}case 221:{b=92389;break}case 222:{b=92412;break}case 223:{b=92432;break}case 224:{b=92455;break}case 225:{b=92470;break}case 226:{b=92478;break}case 227:{b=92486;break}case 228:{b=92497;break}case 229:{b=92507;break}case 230:{b=92516;break}case 231:{b=92525;break}case 232:{b=92534;break}case 233:{b=92543;break}case 234:{b=92563;break}case 235:{b=92577;break}case 236:{b=92599;break}case 237:{b=92611;break}case 238:{b=92631;break}case 239:{b=92645;break}case 240:{b=92661;break}case 241:{b=92677;break}case 242:{b=92695;break}case 243:{b=92730;break}case 244:{b=92762;break}case 245:{b=92769;break}case 246:{b=92779;break}case 247:{b=92801;break}case 248:{b=92812;break}case 249:{b=92831;break}case 250:{b=92850;break}case 251:{b=92867;break}case 252:{b=92878;break}case 253:{b=92898;break}case 254:{b=92913;break}case 255:{b=92937;break}case 256:{b=92959;break}case 257:{b=92987;break}case 258:{b=93003;break}case 259:{b=93016;break}case 260:{b=93029;break}case 261:{b=93049;break}case 262:{b=93069;break}case 263:{b=93088;break}case 264:{b=93112;break}case 265:{b=93132;break}case 266:{b=93148;break}case 267:{b=93169;break}case 268:{b=93192;break}case 269:{b=93209;break}case 270:{b=93242;break}case 271:{b=93271;break}case 272:{b=93305;break}case 273:{b=93338;break}case 274:{b=93366;break}case 275:{b=93394;break}case 276:{b=93417;break}case 277:{b=93439;break}case 278:{b=93469;break}case 279:{b=93484;break}case 280:{b=93497;break}case 281:{b=93515;break}case 282:{b=93538;break}case 283:{b=93559;break}case 284:{b=93578;break}case 285:{b=93601;break}case 286:{b=93622;break}case 287:{b=93640;break}case 288:{b=93657;break}case 289:{b=93677;break}case 290:{b=93698;break}case 291:{b=93704;break}case 292:{b=93710;break}case 293:{b=93716;break}case 294:{b=93724;break}case 295:{b=93733;break}case 296:{b=93739;break}case 297:{b=93755;break}case 298:{b=93768;break}case 299:{b=93779;break}case 300:{b=93795;break}case 301:{b=93814;break}case 302:{b=93831;break}case 303:{b=93840;break}case 304:{b=93856;break}case 305:{b=93874;break}case 306:{b=93909;break}case 307:{b=93936;break}case 308:{b=93962;break}case 309:{b=93989;break}case 310:{b=94015;break}case 311:{b=94042;break}case 312:{b=94069;break}case 313:{b=94102;break}case 314:{b=94132;break}case 315:{b=94144;break}case 316:{b=94161;break}case 317:{b=94185;break}case 318:{b=94212;break}case 319:{b=94234;break}case 320:{b=94255;break}case 321:{b=94268;break}case 322:{b=94291;break}case 323:{b=94314;break}case 324:{b=94328;break}case 325:{b=94344;break}case 326:{b=94367;break}case 327:{b=94384;break}case 328:{b=94399;break}case 329:{b=94423;break}case 330:{b=94450;break}case 331:{b=94469;break}case 332:{b=94484;break}case 333:{b=94504;break}case 334:{b=94526;break}case 335:{b=94548;break}case 336:{b=94567;break}case 337:{b=94598;break}case 338:{b=94616;break}case 339:{b=94644;break}case 340:{b=94652;break}case 341:{b=94670;break}case 342:{b=94695;break}case 343:{b=94709;break}case 344:{b=94724;break}case 345:{b=94745;break}case 346:{b=94764;break}case 347:{b=94788;break}case 348:{b=94810;break}case 349:{b=94831;break}case 350:{b=94858;break}case 351:{b=94882;break}case 352:{b=94901;break}case 353:{b=94925;break}case 354:{b=94935;break}case 355:{b=94957;break}case 356:{b=94979;break}case 357:{b=95006;break}case 358:{b=95028;break}case 359:{b=95049;break}case 360:{b=95076;break}case 361:{b=95091;break}case 362:{b=95110;break}case 363:{b=95135;break}case 364:{b=95160;break}case 365:{b=95185;break}case 366:{b=95204;break}case 367:{b=95219;break}case 368:{b=95246;break}case 369:{b=95267;break}case 370:{b=95290;break}case 371:{b=95305;break}case 372:{b=95334;break}case 373:{b=95360;break}case 374:{b=95370;break}case 375:{b=95399;break}case 376:{b=95435;break}case 377:{b=95459;break}case 378:{b=95496;break}case 379:{b=95516;break}case 380:{b=95538;break}case 381:{b=95557;break}case 382:{b=95561;break}case 383:{b=95573;break}case 384:{b=95585;break}case 385:{b=95608;break}case 386:{b=95628;break}case 387:{b=95645;break}case 388:{b=95656;break}case 389:{b=95671;break}case 390:{b=95679;break}case 391:{b=95701;break}case 392:{b=95707;break}case 393:{b=95712;break}case 394:{b=95721;break}case 395:{b=95730;break}case 396:{b=95735;break}case 397:{b=95742;break}case 398:{b=95750;break}case 399:{b=95758;break}case 400:{b=95767;break}case 401:{b=95772;break}case 402:{b=95778;break}case 403:{b=95784;break}case 404:{b=95790;break}case 405:{b=95796;break}case 406:{b=95804;break}case 407:{b=95813;break}case 408:{b=95823;break}case 409:{b=95831;break}case 410:{b=95840;break}case 411:{b=95849;break}case 412:{b=95855;break}case 413:{b=95863;break}case 414:{b=95871;break}case 415:{b=95885;break}case 416:{b=95894;break}case 417:{b=95902;break}case 418:{b=95913;break}case 419:{b=95922;break}case 420:{b=95931;break}case 421:{b=95936;break}case 422:{b=95941;break}case 423:{b=95947;break}case 424:{b=95954;break}case 425:{b=95961;break}case 426:{b=95967;break}case 427:{b=95983;break}case 428:{b=95988;break}case 429:{b=95993;break}case 430:{b=95998;break}case 431:{b=96015;break}case 432:{b=96027;break}case 433:{b=96042;break}case 434:{b=96055;break}case 435:{b=96073;break}case 436:{b=96083;break}case 437:{b=96102;break}case 438:{b=96121;break}case 439:{b=96128;break}case 440:{b=96140;break}case 441:{b=96159;break}case 442:{b=96173;break}case 443:{b=96185;break}case 444:{b=96197;break}case 445:{b=96225;break}case 446:{b=96246;break}case 447:{b=96272;break}case 448:{b=96291;break}case 449:{b=96308;break}case 450:{b=96318;break}case 451:{b=96325;break}case 452:{b=96332;break}case 453:{b=96341;break}case 454:{b=96353;break}case 455:{b=96361;break}case 456:{b=96370;break}case 457:{b=96380;break}case 458:{b=96391;break}case 459:{b=96402;break}case 460:{b=96415;break}case 461:{b=96438;break}case 462:{b=96446;break}case 463:{b=96456;break}case 464:{b=96464;break}case 465:{b=96472;break}case 466:{b=96483;break}case 467:{b=96497;break}case 468:{b=96513;break}case 469:{b=96528;break}case 470:{b=96538;break}case 471:{b=96556;break}case 472:{b=96564;break}case 473:{b=96576;break}case 474:{b=96583;break}case 475:{b=96592;break}case 476:{b=96610;break}case 477:{b=96623;break}case 478:{b=96636;break}case 479:{b=96654;break}case 480:{b=96686;break}case 481:{b=96719;break}case 482:{b=96740;break}case 483:{b=96756;break}case 484:{b=96772;break}case 485:{b=96797;break}case 486:{b=96822;break}case 487:{b=96848;break}case 488:{b=96874;break}case 489:{b=96903;break}case 490:{b=96932;break}case 491:{b=96956;break}case 492:{b=96980;break}case 493:{b=97004;break}case 494:{b=97029;break}case 495:{b=97046;break}case 496:{b=97070;break}case 497:{b=97094;break}case 498:{b=97116;break}case 499:{b=97141;break}case 500:{b=97163;break}case 501:{b=97193;break}case 502:{b=97210;break}case 503:{b=97224;break}case 504:{b=97238;break}case 505:{b=97262;break}case 506:{b=97293;break}case 507:{b=97322;break}case 508:{b=97347;break}case 509:{b=97365;break}case 510:{b=97381;break}case 511:{b=97403;break}case 512:{b=97425;break}case 513:{b=97449;break}case 514:{b=97472;break}case 515:{b=97494;break}case 516:{b=97518;break}case 517:{b=97541;break}case 518:{b=97562;break}case 519:{b=97582;break}case 520:{b=97603;break}case 521:{b=97618;break}case 522:{b=97634;break}case 523:{b=97650;break}case 524:{b=97668;break}case 525:{b=97690;break}case 526:{b=97702;break}case 527:{b=97714;break}case 528:{b=97738;break}case 529:{b=97762;break}case 530:{b=97779;break}case 531:{b=97801;break}case 532:{b=97823;break}case 533:{b=97851;break}case 534:{b=97865;break}case 535:{b=97883;break}case 536:{b=97900;break}case 537:{b=97917;break}case 538:{b=97936;break}case 539:{b=97955;break}case 540:{b=97973;break}case 541:{b=97989;break}case 542:{b=98007;break}case 543:{b=98023;break}case 544:{b=98034;break}case 545:{b=98045;break}case 546:{b=98053;break}case 547:{b=98065;break}case 548:{b=98071;break}case 549:{b=98081;break}case 550:{b=98087;break}case 551:{b=98096;break}case 552:{b=98107;break}case 553:{b=98116;break}case 554:{b=98124;break}case 555:{b=98137;break}case 556:{b=98148;break}case 557:{b=98158;break}case 558:{b=98168;break}case 559:{b=114756;break}case 560:{b=98176;break}case 561:{b=98189;break}case 562:{b=98201;break}case 563:{b=98218;break}case 564:{b=98231;break}case 565:{b=98251;break}case 566:{b=98266;break}case 567:{b=98278;break}case 568:{b=98293;break}case 569:{b=98301;break}case 570:{b=98313;break}case 571:{b=98318;break}case 572:{b=98333;break}case 573:{b=98343;break}case 574:{b=98349;break}case 575:{b=98358;break}case 576:{b=98373;break}case 577:{b=98390;break}case 578:{b=98410;break}case 579:{b=98424;break}case 580:{b=98450;break}case 581:{b=98459;break}case 582:{b=98471;break}case 583:{b=98486;break}case 584:{b=98493;break}case 585:{b=98506;break}case 586:{b=98515;break}case 587:{b=98522;break}case 588:{b=98527;break}case 589:{b=98541;break}case 590:{b=98559;break}case 591:{b=98571;break}case 592:{b=98577;break}case 593:{b=98584;break}case 594:{b=98592;break}case 595:{b=98600;break}case 596:{b=98609;break}case 597:{b=98621;break}case 598:{b=98629;break}case 599:{b=98641;break}case 600:{b=98663;break}case 601:{b=98679;break}case 602:{b=98692;break}case 603:{b=98709;break}case 604:{b=98736;break}case 605:{b=98754;break}case 606:{b=98772;break}case 607:{b=98790;break}case 608:{b=98807;break}case 609:{b=98815;break}case 610:{b=98827;break}case 611:{b=98837;break}case 612:{b=98851;break}case 613:{b=98859;break}case 614:{b=98876;break}case 615:{b=98887;break}case 616:{b=98897;break}case 617:{b=98910;break}case 618:{b=98927;break}case 619:{b=98939;break}case 620:{b=98943;break}case 621:{b=98952;break}case 622:{b=98957;break}case 623:{b=98967;break}case 624:{b=98973;break}case 625:{b=98984;break}case 626:{b=98990;break}case 627:{b=99001;break}case 628:{b=99008;break}case 629:{b=99018;break}case 630:{b=99028;break}case 631:{b=99032;break}case 632:{b=99036;break}case 633:{b=99044;break}case 634:{b=99050;break}case 635:{b=99057;break}case 636:{b=99062;break}case 637:{b=99067;break}case 638:{b=99076;break}case 639:{b=99085;break}case 640:{b=99094;break}case 641:{b=99103;break}case 642:{b=99126;break}case 643:{b=99136;break}case 644:{b=99146;break}case 645:{b=99155;break}case 646:{b=99165;break}case 647:{b=99170;break}case 648:{b=99188;break}case 649:{b=99197;break}case 650:{b=99206;break}case 651:{b=99215;break}case 652:{b=99229;break}case 653:{b=99236;break}case 654:{b=99245;break}case 655:{b=99260;break}case 656:{b=99287;break}case 657:{b=99302;break}case 658:{b=113694;break}case 659:{b=99320;break}case 660:{b=114189;break}case 661:{b=113936;break}case 662:{b=114059;break}case 663:{b=113815;break}case 664:{b=99332;break}case 665:{b=99346;break}case 666:{b=99360;break}case 667:{b=99372;break}case 668:{b=99390;break}case 669:{b=99405;break}case 670:{b=99424;break}case 671:{b=99441;break}case 672:{b=99445;break}case 673:{b=99454;break}case 674:{b=99464;break}case 675:{b=99467;break}case 676:{b=99476;break}case 677:{b=99486;break}case 678:{b=99489;break}case 679:{b=99498;break}case 680:{b=99501;break}case 681:{b=99507;break}case 682:{b=99512;break}case 683:{b=99521;break}case 684:{b=99526;break}case 685:{b=99533;break}case 686:{b=99540;break}case 687:{b=99547;break}case 688:{b=99556;break}case 689:{b=99571;break}case 690:{b=99592;break}case 691:{b=99615;break}case 692:{b=99639;break}case 693:{b=99657;break}case 694:{b=114464;break}case 695:{b=114591;break}case 696:{b=114328;break}case 697:{b=99669;break}case 698:{b=99684;break}case 699:{b=99698;break}case 700:{b=99710;break}case 701:{b=99724;break}case 702:{b=99739;break}case 703:{b=99756;break}case 704:{b=99773;break}case 705:{b=99788;break}case 706:{b=99803;break}case 707:{b=99811;break}case 708:{b=99824;break}case 709:{b=99839;break}case 710:{b=99854;break}case 711:{b=99869;break}case 712:{b=99884;break}case 713:{b=99899;break}case 714:{b=99914;break}case 715:{b=99933;break}case 716:{b=99950;break}case 717:{b=99969;break}case 718:{b=99988;break}case 719:{b=100007;break}case 720:{b=100026;break}case 721:{b=100045;break}case 722:{b=100064;break}case 723:{b=100090;break}case 724:{b=100098;break}case 725:{b=100109;break}case 726:{b=100122;break}case 727:{b=100135;break}case 728:{b=100148;break}case 729:{b=100161;break}case 730:{b=100174;break}case 731:{b=100187;break}case 732:{b=100198;break}case 733:{b=100212;break}case 734:{b=100233;break}case 735:{b=100241;break}case 736:{b=100246;break}case 737:{b=100249;break}case 738:{b=100257;break}case 739:{b=100260;break}case 740:{b=100265;break}case 741:{b=100274;break}case 742:{b=100292;break}case 743:{b=100295;break}case 744:{b=100304;break}case 745:{b=100322;break}case 746:{b=100328;break}case 747:{b=100334;break}case 748:{b=100340;break}case 749:{b=100346;break}case 750:{b=100351;break}case 751:{b=100359;break}case 752:{b=100364;break}case 753:{b=100378;break}case 754:{b=100389;break}case 755:{b=100402;break}case 756:{b=100414;break}case 757:{b=100426;break}case 758:{b=100442;break}case 759:{b=100460;break}case 760:{b=100472;break}case 761:{b=100491;break}case 762:{b=100512;break}case 763:{b=100536;break}case 764:{b=100554;break}case 765:{b=100556;break}case 766:{b=100577;break}case 767:{b=100582;break}case 768:{b=100587;break}case 769:{b=100602;break}case 770:{b=100619;break}case 771:{b=100637;break}case 772:{b=100655;break}case 773:{b=100673;break}case 774:{b=100691;break}case 775:{b=100709;break}case 776:{b=100727;break}case 777:{b=100745;break}case 778:{b=100763;break}case 779:{b=100781;break}case 780:{b=100800;break}case 781:{b=100819;break}case 782:{b=100838;break}case 783:{b=100857;break}case 784:{b=100876;break}case 785:{b=100895;break}case 786:{b=100914;break}case 787:{b=100933;break}case 788:{b=100952;break}case 789:{b=100971;break}case 790:{b=100990;break}case 791:{b=101009;break}case 792:{b=101028;break}case 793:{b=101047;break}case 794:{b=101066;break}case 795:{b=101085;break}case 796:{b=101104;break}case 797:{b=101123;break}case 798:{b=101142;break}case 799:{b=101161;break}case 800:{b=101180;break}case 801:{b=101199;break}case 802:{b=101218;break}case 803:{b=101237;break}case 804:{b=101256;break}case 805:{b=101275;break}case 806:{b=101294;break}case 807:{b=101313;break}case 808:{b=101332;break}case 809:{b=101351;break}case 810:{b=101370;break}case 811:{b=101389;break}case 812:{b=101408;break}case 813:{b=101427;break}case 814:{b=101446;break}case 815:{b=101465;break}case 816:{b=101484;break}case 817:{b=101503;break}case 818:{b=101522;break}case 819:{b=101541;break}case 820:{b=101560;break}case 821:{b=101579;break}case 822:{b=101598;break}case 823:{b=101617;break}case 824:{b=101636;break}case 825:{b=101655;break}case 826:{b=101674;break}case 827:{b=101693;break}case 828:{b=101712;break}case 829:{b=101731;break}case 830:{b=101750;break}case 831:{b=101769;break}case 832:{b=101788;break}case 833:{b=101807;break}case 834:{b=101826;break}case 835:{b=101845;break}case 836:{b=101864;break}case 837:{b=101883;break}case 838:{b=101902;break}case 839:{b=101921;break}case 840:{b=101940;break}case 841:{b=101959;break}case 842:{b=101978;break}case 843:{b=101997;break}case 844:{b=102016;break}case 845:{b=102035;break}case 846:{b=102054;break}case 847:{b=102073;break}case 848:{b=102092;break}case 849:{b=102111;break}case 850:{b=102130;break}case 851:{b=102149;break}case 852:{b=102168;break}case 853:{b=102187;break}case 854:{b=102206;break}case 855:{b=102225;break}case 856:{b=102244;break}case 857:{b=102263;break}case 858:{b=102282;break}case 859:{b=102301;break}case 860:{b=102320;break}case 861:{b=102339;break}case 862:{b=102358;break}case 863:{b=102377;break}case 864:{b=102396;break}case 865:{b=102415;break}case 866:{b=102434;break}case 867:{b=102453;break}case 868:{b=102472;break}case 869:{b=102491;break}case 870:{b=102511;break}case 871:{b=102532;break}case 872:{b=102547;break}case 873:{b=102566;break}case 874:{b=102595;break}case 875:{b=102618;break}case 876:{b=102629;break}case 877:{b=102644;break}case 878:{b=102669;break}case 879:{b=102689;break}case 880:{b=102704;break}case 881:{b=102715;break}case 882:{b=102736;break}case 883:{b=102752;break}case 884:{b=102770;break}case 885:{b=102792;break}case 886:{b=102804;break}case 887:{b=102828;break}case 888:{b=102842;break}case 889:{b=102860;break}case 890:{b=102879;break}case 891:{b=102905;break}case 892:{b=102911;break}case 893:{b=102924;break}case 894:{b=102930;break}case 895:{b=102943;break}case 896:{b=102950;break}case 897:{b=102957;break}case 898:{b=102963;break}case 899:{b=102969;break}case 900:{b=102978;break}case 901:{b=102984;break}case 902:{b=102990;break}case 903:{b=102999;break}case 904:{b=103005;break}case 905:{b=103011;break}case 906:{b=103020;break}case 907:{b=103033;break}case 908:{b=103046;break}case 909:{b=103054;break}case 910:{b=103064;break}case 911:{b=103089;break}case 912:{b=103106;break}case 913:{b=103123;break}case 914:{b=103132;break}case 915:{b=103141;break}case 916:{b=103153;break}case 917:{b=103174;break}case 918:{b=103198;break}case 919:{b=103225;break}case 920:{b=103254;break}case 921:{b=103279;break}case 922:{b=103284;break}case 923:{b=103304;break}case 924:{b=103318;break}case 925:{b=103338;break}case 926:{b=103359;break}case 927:{b=103367;break}case 928:{b=103381;break}case 929:{b=103405;break}case 930:{b=138571;break}case 931:{b=138932;break}case 932:{b=139212;break}case 933:{b=103414;break}case 934:{b=103423;break}case 935:{b=103431;break}case 936:{b=103440;break}case 937:{b=103454;break}case 938:{b=103459;break}case 939:{b=103469;break}case 940:{b=103479;break}case 941:{b=103489;break}case 942:{b=103498;break}case 943:{b=103521;break}case 944:{b=103526;break}case 945:{b=103532;break}case 946:{b=103540;break}case 947:{b=103550;break}case 948:{b=103556;break}case 949:{b=103568;break}case 950:{b=103588;break}case 951:{b=103612;break}case 952:{b=103630;break}case 953:{b=103647;break}case 954:{b=103656;break}case 955:{b=103671;break}case 956:{b=103685;break}case 957:{b=103698;break}case 958:{b=103714;break}case 959:{b=103738;break}case 960:{b=103761;break}case 961:{b=103772;break}case 962:{b=103782;break}case 963:{b=103793;break}case 964:{b=103801;break}case 965:{b=103808;break}case 966:{b=103817;break}case 967:{b=103822;break}case 968:{b=103830;break}case 969:{b=103845;break}case 970:{b=103860;break}case 971:{b=103874;break}case 972:{b=103877;break}case 973:{b=103881;break}case 974:{b=103887;break}case 975:{b=103896;break}case 976:{b=103906;break}case 977:{b=103910;break}case 978:{b=103914;break}case 979:{b=103920;break}case 980:{b=103924;break}case 981:{b=103931;break}case 982:{b=103945;break}case 983:{b=103956;break}case 984:{b=103969;break}case 985:{b=103976;break}case 986:{b=103986;break}case 987:{b=104002;break}case 988:{b=104011;break}case 989:{b=104021;break}case 990:{b=104036;break}case 991:{b=104048;break}case 992:{b=104070;break}case 993:{b=104092;break}case 994:{b=104115;break}case 995:{b=104138;break}case 996:{b=104161;break}case 997:{b=104185;break}case 998:{b=104206;break}case 999:{b=104227;break}case 1e3:{b=104236;break}case 1001:{b=104253;break}case 1002:{b=104280;break}case 1003:{b=104300;break}case 1004:{b=104319;break}case 1005:{b=104338;break}case 1006:{b=104356;break}case 1007:{b=104374;break}case 1008:{b=104396;break}case 1009:{b=104418;break}case 1010:{b=104436;break}case 1011:{b=104456;break}case 1012:{b=104477;break}case 1013:{b=104498;break}case 1014:{b=104517;break}case 1015:{b=104541;break}case 1016:{b=104570;break}case 1017:{b=104602;break}case 1018:{b=104616;break}default:b=87580}while(0);return b|0}function yY(a,b){a=a|0;b=b|0;var c=0,d=0;c=xY(b)|0;b=(Lta(c)|0)+1|0;d=Rqa(b)|0;TEa(d|0,c|0,b|0)|0;k[a>>2]=d;return}function zY(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;do if(Ita(a,87588)|0)if(Ita(a,87604)|0)if(Ita(a,87613)|0)if(Ita(a,87626)|0)if(Ita(a,87636)|0)if(Ita(a,87654)|0)if(Ita(a,87664)|0)if(Ita(a,87672)|0)if(Ita(a,87680)|0)if(Ita(a,87699)|0)if(Ita(a,87721)|0)if(Ita(a,87749)|0)if(Ita(a,87778)|0)if(Ita(a,87807)|0)if(Ita(a,87838)|0)if(Ita(a,87863)|0)if(Ita(a,87887)|0)if(Ita(a,87917)|0)if(!(Ita(a,87948)|0))i=18;else{if(!(Ita(a,87979)|0)){i=19;break}if(!(Ita(a,88006)|0)){i=20;break}if(!(Ita(a,88023)|0)){i=21;break}if(!(Ita(a,88034)|0)){i=22;break}if(!(Ita(a,88049)|0)){i=23;break}if(!(Ita(a,88073)|0)){i=24;break}if(!(Ita(a,88099)|0)){i=25;break}if(!(Ita(a,88123)|0)){i=26;break}if(!(Ita(a,88155)|0)){i=27;break}if(!(Ita(a,88168)|0)){i=28;break}if(!(Ita(a,88185)|0)){i=29;break}if(!(Ita(a,88202)|0)){i=30;break}if(!(Ita(a,88219)|0)){i=31;break}if(!(Ita(a,88236)|0)){i=32;break}if(!(Ita(a,88259)|0)){i=33;break}if(!(Ita(a,88284)|0)){i=34;break}if(!(Ita(a,88313)|0)){i=35;break}if(!(Ita(a,88343)|0)){i=36;break}if(!(Ita(a,88374)|0)){i=37;break}if(!(Ita(a,88388)|0)){i=38;break}if(!(Ita(a,88416)|0)){i=39;break}if(!(Ita(a,88452)|0)){i=40;break}if(!(Ita(a,88488)|0)){i=41;break}if(!(Ita(a,88522)|0)){i=42;break}if(!(Ita(a,88554)|0)){i=43;break}if(!(Ita(a,88587)|0)){i=44;break}if(!(Ita(a,88615)|0)){i=45;break}if(!(Ita(a,88647)|0)){i=46;break}if(!(Ita(a,88675)|0)){i=47;break}if(!(Ita(a,88707)|0)){i=48;break}if(!(Ita(a,88728)|0)){i=49;break}if(!(Ita(a,88746)|0)){i=50;break}if(!(Ita(a,88771)|0)){i=51;break}if(!(Ita(a,88798)|0)){i=52;break}if(!(Ita(a,88828)|0)){i=53;break}if(!(Ita(a,88848)|0)){i=54;break}if(!(Ita(a,88868)|0)){i=55;break}if(!(Ita(a,88896)|0)){i=56;break}if(!(Ita(a,88929)|0)){i=57;break}if(!(Ita(a,88957)|0)){i=58;break}if(!(Ita(a,88985)|0)){i=59;break}if(!(Ita(a,89002)|0)){i=60;break}if(!(Ita(a,89025)|0)){i=61;break}if(!(Ita(a,89048)|0)){i=62;break}if(!(Ita(a,89074)|0)){i=63;break}if(!(Ita(a,89078)|0)){i=64;break}if(!(Ita(a,89083)|0)){i=65;break}if(!(Ita(a,89094)|0)){i=66;break}if(!(Ita(a,89124)|0)){i=67;break}if(!(Ita(a,89137)|0)){i=68;break}if(!(Ita(a,89153)|0)){i=69;break}if(!(Ita(a,89173)|0)){i=70;break}if(!(Ita(a,89206)|0)){i=71;break}if(!(Ita(a,89228)|0)){i=72;break}if(!(Ita(a,89249)|0)){i=73;break}if(!(Ita(a,89276)|0)){i=74;break}if(!(Ita(a,89301)|0)){i=75;break}if(!(Ita(a,89321)|0)){i=76;break}if(!(Ita(a,89354)|0)){i=77;break}if(!(Ita(a,89384)|0)){i=78;break}if(!(Ita(a,89404)|0)){i=79;break}if(!(Ita(a,89433)|0)){i=80;break}if(!(Ita(a,89467)|0)){i=81;break}if(!(Ita(a,89495)|0)){i=82;break}if(!(Ita(a,89514)|0)){i=83;break}if(!(Ita(a,89533)|0)){i=84;break}if(!(Ita(a,89552)|0)){i=85;break}if(!(Ita(a,89582)|0)){i=86;break}if(!(Ita(a,89609)|0)){i=87;break}if(!(Ita(a,89641)|0)){i=88;break}if(!(Ita(a,89655)|0)){i=89;break}if(!(Ita(a,89669)|0)){i=90;break}if(!(Ita(a,89683)|0)){i=91;break}if(!(Ita(a,89705)|0)){i=92;break}if(!(Ita(a,89726)|0)){i=93;break}if(!(Ita(a,89747)|0)){i=94;break}if(!(Ita(a,89775)|0)){i=95;break}if(!(Ita(a,89793)|0)){i=96;break}if(!(Ita(a,89811)|0)){i=97;break}if(!(Ita(a,89830)|0)){i=98;break}if(!(Ita(a,89847)|0)){i=99;break}if(!(Ita(a,89864)|0)){i=100;break}if(!(Ita(a,89882)|0)){i=101;break}if(!(Ita(a,89899)|0)){i=102;break}if(!(Ita(a,89916)|0)){i=103;break}if(!(Ita(a,89943)|0)){i=104;break}if(!(Ita(a,89954)|0)){i=105;break}if(!(Ita(a,89974)|0)){i=106;break}if(!(Ita(a,90001)|0)){i=107;break}if(!(Ita(a,90011)|0)){i=108;break}if(!(Ita(a,90021)|0)){i=109;break}if(!(Ita(a,90031)|0)){i=110;break}if(!(Ita(a,90041)|0)){i=111;break}if(!(Ita(a,90053)|0)){i=112;break}if(!(Ita(a,90067)|0)){i=113;break}if(!(Ita(a,90077)|0)){i=114;break}if(!(Ita(a,90096)|0)){i=115;break}if(!(Ita(a,90122)|0)){i=116;break}if(!(Ita(a,90139)|0)){i=117;break}if(!(Ita(a,90164)|0)){i=118;break}if(!(Ita(a,90179)|0)){i=119;break}if(!(Ita(a,90195)|0)){i=120;break}if(!(Ita(a,90225)|0)){i=121;break}if(!(Ita(a,90254)|0)){i=122;break}if(!(Ita(a,90266)|0)){i=123;break}if(!(Ita(a,90279)|0)){i=124;break}if(!(Ita(a,90295)|0)){i=125;break}if(!(Ita(a,90316)|0)){i=126;break}if(!(Ita(a,90334)|0)){i=127;break}if(!(Ita(a,90342)|0)){i=128;break}if(!(Ita(a,90353)|0)){i=129;break}if(!(Ita(a,90367)|0)){i=130;break}if(!(Ita(a,90381)|0)){i=131;break}if(!(Ita(a,90398)|0)){i=132;break}if(!(Ita(a,90417)|0)){i=133;break}if(!(Ita(a,90435)|0)){i=134;break}if(!(Ita(a,90462)|0)){i=135;break}if(!(Ita(a,90497)|0)){i=136;break}if(!(Ita(a,90525)|0)){i=137;break}if(!(Ita(a,90554)|0)){i=138;break}if(!(Ita(a,90587)|0)){i=139;break}if(!(Ita(a,90619)|0)){i=140;break}if(!(Ita(a,90641)|0)){i=141;break}if(!(Ita(a,90670)|0)){i=142;break}if(!(Ita(a,90698)|0)){i=143;break}if(!(Ita(a,90728)|0)){i=144;break}if(!(Ita(a,90751)|0)){i=145;break}if(!(Ita(a,90782)|0)){i=146;break}if(!(Ita(a,90813)|0)){i=147;break}if(!(Ita(a,90840)|0)){i=148;break}if(!(Ita(a,90864)|0)){i=149;break}if(!(Ita(a,90891)|0)){i=150;break}if(!(Ita(a,90915)|0)){i=151;break}if(!(Ita(a,90942)|0)){i=152;break}if(!(Ita(a,90970)|0)){i=153;break}if(!(Ita(a,90999)|0)){i=154;break}if(!(Ita(a,91024)|0)){i=155;break}if(!(Ita(a,91048)|0)){i=156;break}if(!(Ita(a,91073)|0)){i=157;break}if(!(Ita(a,91098)|0)){i=158;break}if(!(Ita(a,91121)|0)){i=159;break}if(!(Ita(a,91144)|0)){i=160;break}if(!(Ita(a,91172)|0)){i=161;break}if(!(Ita(a,91187)|0)){i=162;break}if(!(Ita(a,91205)|0)){i=163;break}if(!(Ita(a,91224)|0)){i=164;break}if(!(Ita(a,91246)|0)){i=165;break}if(!(Ita(a,91263)|0)){i=166;break}if(!(Ita(a,91277)|0)){i=167;break}if(!(Ita(a,91296)|0)){i=168;break}if(!(Ita(a,91317)|0)){i=169;break}if(!(Ita(a,91337)|0)){i=170;break}if(!(Ita(a,91361)|0)){i=171;break}if(!(Ita(a,91382)|0)){i=172;break}if(!(Ita(a,91400)|0)){i=173;break}if(!(Ita(a,91421)|0)){i=174;break}if(!(Ita(a,91438)|0)){i=175;break}if(!(Ita(a,91460)|0)){i=176;break}if(!(Ita(a,91487)|0)){i=177;break}if(!(Ita(a,91518)|0)){i=178;break}if(!(Ita(a,91549)|0)){i=179;break}if(!(Ita(a,91584)|0)){i=180;break}if(!(Ita(a,91607)|0)){i=181;break}if(!(Ita(a,91632)|0)){i=182;break}if(!(Ita(a,91651)|0)){i=183;break}if(!(Ita(a,91665)|0)){i=184;break}if(!(Ita(a,91692)|0)){i=185;break}if(!(Ita(a,91715)|0)){i=186;break}if(!(Ita(a,91739)|0)){i=187;break}if(!(Ita(a,91756)|0)){i=188;break}if(!(Ita(a,91774)|0)){i=189;break}if(!(Ita(a,91789)|0)){i=190;break}if(!(Ita(a,91804)|0)){i=191;break}if(!(Ita(a,91819)|0)){i=192;break}if(!(Ita(a,91834)|0)){i=193;break}if(!(Ita(a,91849)|0)){i=194;break}if(!(Ita(a,91868)|0)){i=195;break}if(!(Ita(a,91891)|0)){i=196;break}if(!(Ita(a,91907)|0)){i=197;break}if(!(Ita(a,91922)|0)){i=198;break}if(!(Ita(a,91952)|0)){i=199;break}if(!(Ita(a,91978)|0)){i=200;break}if(!(Ita(a,92001)|0)){i=201;break}if(!(Ita(a,92023)|0)){i=202;break}if(!(Ita(a,92043)|0)){i=203;break}if(!(Ita(a,92058)|0)){i=204;break}if(!(Ita(a,92073)|0)){i=205;break}if(!(Ita(a,92088)|0)){i=206;break}if(!(Ita(a,92104)|0)){i=207;break}if(!(Ita(a,92122)|0)){i=208;break}if(!(Ita(a,92139)|0)){i=209;break}if(!(Ita(a,92153)|0)){i=210;break}if(!(Ita(a,92175)|0)){i=211;break}if(!(Ita(a,92195)|0)){i=212;break}if(!(Ita(a,92217)|0)){i=213;break}if(!(Ita(a,92245)|0)){i=214;break}if(!(Ita(a,92264)|0)){i=215;break}if(!(Ita(a,92286)|0)){i=216;break}if(!(Ita(a,92307)|0)){i=217;break}if(!(Ita(a,92326)|0)){i=218;break}if(!(Ita(a,92346)|0)){i=219;break}if(!(Ita(a,92369)|0)){i=220;break}if(!(Ita(a,92389)|0)){i=221;break}if(!(Ita(a,92412)|0)){i=222;break}if(!(Ita(a,92432)|0)){i=223;break}if(!(Ita(a,92455)|0)){i=224;break}if(!(Ita(a,92470)|0)){i=225;break}if(!(Ita(a,92478)|0)){i=226;break}if(!(Ita(a,92486)|0)){i=227;break}if(!(Ita(a,92497)|0)){i=228;break}if(!(Ita(a,92507)|0)){i=229;break}if(!(Ita(a,92516)|0)){i=230;break}if(!(Ita(a,92525)|0)){i=231;break}if(!(Ita(a,92534)|0)){i=232;break}if(!(Ita(a,92543)|0)){i=233;break}if(!(Ita(a,92563)|0)){i=234;break}if(!(Ita(a,92577)|0)){i=235;break}if(!(Ita(a,92599)|0)){i=236;break}if(!(Ita(a,92611)|0)){i=237;break}if(!(Ita(a,92631)|0)){i=238;break}if(!(Ita(a,92645)|0)){i=239;break}if(!(Ita(a,92661)|0)){i=240;break}if(!(Ita(a,92677)|0)){i=241;break}if(!(Ita(a,92695)|0)){i=242;break}if(!(Ita(a,92730)|0)){i=243;break}if(!(Ita(a,92762)|0)){i=244;break}if(!(Ita(a,92769)|0)){i=245;break}if(!(Ita(a,92779)|0)){i=246;break}if(!(Ita(a,92801)|0)){i=247;break}if(!(Ita(a,92812)|0)){i=248;break}if(!(Ita(a,92831)|0)){i=249;break}if(!(Ita(a,92850)|0)){i=250;break}if(!(Ita(a,92867)|0)){i=251;break}if(!(Ita(a,92878)|0)){i=252;break}if(!(Ita(a,92898)|0)){i=253;break}if(!(Ita(a,92913)|0)){i=254;break}if(!(Ita(a,92937)|0)){i=255;break}if(!(Ita(a,92959)|0)){i=256;break}if(!(Ita(a,92987)|0)){i=257;break}if(!(Ita(a,93003)|0)){i=258;break}if(!(Ita(a,93016)|0)){i=259;break}if(!(Ita(a,93029)|0)){i=260;break}if(!(Ita(a,93049)|0)){i=261;break}if(!(Ita(a,93069)|0)){i=262;break}if(!(Ita(a,93088)|0)){i=263;break}if(!(Ita(a,93112)|0)){i=264;break}if(!(Ita(a,93132)|0)){i=265;break}if(!(Ita(a,93148)|0)){i=266;break}if(!(Ita(a,93169)|0)){i=267;break}if(!(Ita(a,93192)|0)){i=268;break}if(!(Ita(a,93209)|0)){i=269;break}if(!(Ita(a,93242)|0)){i=270;break}if(!(Ita(a,93271)|0)){i=271;break}if(!(Ita(a,93305)|0)){i=272;break}if(!(Ita(a,93338)|0)){i=273;break}if(!(Ita(a,93366)|0)){i=274;break}if(!(Ita(a,93394)|0)){i=275;break}if(!(Ita(a,93417)|0)){i=276;break}if(!(Ita(a,93439)|0)){i=277;break}if(!(Ita(a,93469)|0)){i=278;break}if(!(Ita(a,93484)|0)){i=279;break}if(!(Ita(a,93497)|0)){i=280;break}if(!(Ita(a,93515)|0)){i=281;break}if(!(Ita(a,93538)|0)){i=282;break}if(!(Ita(a,93559)|0)){i=283;break}if(!(Ita(a,93578)|0)){i=284;break}if(!(Ita(a,93601)|0)){i=285;break}if(!(Ita(a,93622)|0)){i=286;break}if(!(Ita(a,93640)|0)){i=287;break}if(!(Ita(a,93657)|0)){i=288;break}if(!(Ita(a,93677)|0)){i=289;break}if(!(Ita(a,93698)|0)){i=290;break}if(!(Ita(a,93704)|0)){i=291;break}if(!(Ita(a,93710)|0)){i=292;break}if(!(Ita(a,93716)|0)){i=293;break}if(!(Ita(a,93724)|0)){i=294;break}if(!(Ita(a,93733)|0)){i=295;break}if(!(Ita(a,93739)|0)){i=296;break}if(!(Ita(a,93755)|0)){i=297;break}if(!(Ita(a,93768)|0)){i=298;break}if(!(Ita(a,93779)|0)){i=299;break}if(!(Ita(a,93795)|0)){i=300;break}if(!(Ita(a,93814)|0)){i=301;break}if(!(Ita(a,93831)|0)){i=302;break}if(!(Ita(a,93840)|0)){i=303;break}if(!(Ita(a,93856)|0)){i=304;break}if(!(Ita(a,93874)|0)){i=305;break}if(!(Ita(a,93909)|0)){i=306;break}if(!(Ita(a,93936)|0)){i=307;break}if(!(Ita(a,93962)|0)){i=308;break}if(!(Ita(a,93989)|0)){i=309;break}if(!(Ita(a,94015)|0)){i=310;break}if(!(Ita(a,94042)|0)){i=311;break}if(!(Ita(a,94069)|0)){i=312;break}if(!(Ita(a,94102)|0)){i=313;break}if(!(Ita(a,94132)|0)){i=314;break}if(!(Ita(a,94144)|0)){i=315;break}if(!(Ita(a,94161)|0)){i=316;break}if(!(Ita(a,94185)|0)){i=317;break}if(!(Ita(a,94212)|0)){i=318;break}if(!(Ita(a,94234)|0)){i=319;break}if(!(Ita(a,94255)|0)){i=320;break}if(!(Ita(a,94268)|0)){i=321;break}if(!(Ita(a,94291)|0)){i=322;break}if(!(Ita(a,94314)|0)){i=323;break}if(!(Ita(a,94328)|0)){i=324;break}if(!(Ita(a,94344)|0)){i=325;break}if(!(Ita(a,94367)|0)){i=326;break}if(!(Ita(a,94384)|0)){i=327;break}if(!(Ita(a,94399)|0)){i=328;break}if(!(Ita(a,94423)|0)){i=329;break}if(!(Ita(a,94450)|0)){i=330;break}if(!(Ita(a,94469)|0)){i=331;break}if(!(Ita(a,94484)|0)){i=332;break}if(!(Ita(a,94504)|0)){i=333;break}if(!(Ita(a,94526)|0)){i=334;break}if(!(Ita(a,94548)|0)){i=335;break}if(!(Ita(a,94567)|0)){i=336;break}if(!(Ita(a,94598)|0)){i=337;break}if(!(Ita(a,94616)|0)){i=338;break}if(!(Ita(a,94644)|0)){i=339;break}if(!(Ita(a,94652)|0)){i=340;break}if(!(Ita(a,94670)|0)){i=341;break}if(!(Ita(a,94695)|0)){i=342;break}if(!(Ita(a,94709)|0)){i=343;break}if(!(Ita(a,94724)|0)){i=344;break}if(!(Ita(a,94745)|0)){i=345;break}if(!(Ita(a,94764)|0)){i=346;break}if(!(Ita(a,94788)|0)){i=347;break}if(!(Ita(a,94810)|0)){i=348;break}if(!(Ita(a,94831)|0)){i=349;break}if(!(Ita(a,94858)|0)){i=350;break}if(!(Ita(a,94882)|0)){i=351;break}if(!(Ita(a,94901)|0)){i=352;break}if(!(Ita(a,94925)|0)){i=353;break}if(!(Ita(a,94935)|0)){i=354;break}if(!(Ita(a,94957)|0)){i=355;break}if(!(Ita(a,94979)|0)){i=356;break}if(!(Ita(a,95006)|0)){i=357;break}if(!(Ita(a,95028)|0)){i=358;break}if(!(Ita(a,95049)|0)){i=359;break}if(!(Ita(a,95076)|0)){i=360;break}if(!(Ita(a,95091)|0)){i=361;break}if(!(Ita(a,95110)|0)){i=362;break}if(!(Ita(a,95135)|0)){i=363;break}if(!(Ita(a,95160)|0)){i=364;break}if(!(Ita(a,95185)|0)){i=365;break}if(!(Ita(a,95204)|0)){i=366;break}if(!(Ita(a,95219)|0)){i=367;break}if(!(Ita(a,95246)|0)){i=368;break}if(!(Ita(a,95267)|0)){i=369;break}if(!(Ita(a,95290)|0)){i=370;break}if(!(Ita(a,95305)|0)){i=371;break}if(!(Ita(a,95334)|0)){i=372;break}if(!(Ita(a,95360)|0)){i=373;break}if(!(Ita(a,95370)|0)){i=374;break}if(!(Ita(a,95399)|0)){i=375;break}if(!(Ita(a,95435)|0)){i=376;break}if(!(Ita(a,95459)|0)){i=377;break}if(!(Ita(a,95496)|0)){i=378;break}if(!(Ita(a,95516)|0)){i=379;break}if(!(Ita(a,95538)|0)){i=380;break}if(!(Ita(a,95557)|0)){i=381;break}if(!(Ita(a,95561)|0)){i=382;break}if(!(Ita(a,95573)|0)){i=383;break}if(!(Ita(a,95585)|0)){i=384;break}if(!(Ita(a,95608)|0)){i=385;break}if(!(Ita(a,95628)|0)){i=386;break}if(!(Ita(a,95645)|0)){i=387;break}if(!(Ita(a,95656)|0)){i=388;break}if(!(Ita(a,95671)|0)){i=389;break}if(!(Ita(a,95679)|0)){i=390;break}if(!(Ita(a,95701)|0)){i=391;break}if(!(Ita(a,95707)|0)){i=392;break}if(!(Ita(a,95712)|0)){i=393;break}if(!(Ita(a,95721)|0)){i=394;break}if(!(Ita(a,95730)|0)){i=395;break}if(!(Ita(a,95735)|0)){i=396;break}if(!(Ita(a,95742)|0)){i=397;break}if(!(Ita(a,95750)|0)){i=398;break}if(!(Ita(a,95758)|0)){i=399;break}if(!(Ita(a,95767)|0)){i=400;break}if(!(Ita(a,95772)|0)){i=401;break}if(!(Ita(a,95778)|0)){i=402;break}if(!(Ita(a,95784)|0)){i=403;break}if(!(Ita(a,95790)|0)){i=404;break}if(!(Ita(a,95796)|0)){i=405;break}if(!(Ita(a,95804)|0)){i=406;break}if(!(Ita(a,95813)|0)){i=407;break}if(!(Ita(a,95823)|0)){i=408;break}if(!(Ita(a,95831)|0)){i=409;break}if(!(Ita(a,95840)|0)){i=410;break}if(!(Ita(a,95849)|0)){i=411;break}if(!(Ita(a,95855)|0)){i=412;break}if(!(Ita(a,95863)|0)){i=413;break}if(!(Ita(a,95871)|0)){i=414;break}if(!(Ita(a,95885)|0)){i=415;break}if(!(Ita(a,95894)|0)){i=416;break}if(!(Ita(a,95902)|0)){i=417;break}if(!(Ita(a,95913)|0)){i=418;break}if(!(Ita(a,95922)|0)){i=419;break}if(!(Ita(a,95931)|0)){i=420;break}if(!(Ita(a,95936)|0)){i=421;break}if(!(Ita(a,95941)|0)){i=422;break}if(!(Ita(a,95947)|0)){i=423;break}if(!(Ita(a,95954)|0)){i=424;break}if(!(Ita(a,95961)|0)){i=425;break}if(!(Ita(a,95967)|0)){i=426;break}if(!(Ita(a,95983)|0)){i=427;break}if(!(Ita(a,95988)|0)){i=428;break}if(!(Ita(a,95993)|0)){i=429;break}if(!(Ita(a,95998)|0)){i=430;break}if(!(Ita(a,96015)|0)){i=431;break}if(!(Ita(a,96027)|0)){i=432;break}if(!(Ita(a,96042)|0)){i=433;break}if(!(Ita(a,96055)|0)){i=434;break}if(!(Ita(a,96073)|0)){i=435;break}if(!(Ita(a,96083)|0)){i=436;break}if(!(Ita(a,96102)|0)){i=437;break}if(!(Ita(a,96121)|0)){i=438;break}if(!(Ita(a,96128)|0)){i=439;break}if(!(Ita(a,96140)|0)){i=440;break}if(!(Ita(a,96159)|0)){i=441;break}if(!(Ita(a,96173)|0)){i=442;break}if(!(Ita(a,96185)|0)){i=443;break}if(!(Ita(a,96197)|0)){i=444;break}if(!(Ita(a,96225)|0)){i=445;break}if(!(Ita(a,96246)|0)){i=446;break}if(!(Ita(a,96272)|0)){i=447;break}if(!(Ita(a,96291)|0)){i=448;break}if(!(Ita(a,96308)|0)){i=449;break}if(!(Ita(a,96318)|0)){i=450;break}if(!(Ita(a,96325)|0)){i=451;break}if(!(Ita(a,96332)|0)){i=452;break}if(!(Ita(a,96341)|0)){i=453;break}if(!(Ita(a,96353)|0)){i=454;break}if(!(Ita(a,96361)|0)){i=455;break}if(!(Ita(a,96370)|0)){i=456;break}if(!(Ita(a,96380)|0)){i=457;break}if(!(Ita(a,96391)|0)){i=458;break}if(!(Ita(a,96402)|0)){i=459;break}if(!(Ita(a,96415)|0)){i=460;break}if(!(Ita(a,96438)|0)){i=461;break}if(!(Ita(a,96446)|0)){i=462;break}if(!(Ita(a,96456)|0)){i=463;break}if(!(Ita(a,96464)|0)){i=464;break}if(!(Ita(a,96472)|0)){i=465;break}if(!(Ita(a,96483)|0)){i=466;break}if(!(Ita(a,96497)|0)){i=467;break}if(!(Ita(a,96513)|0)){i=468;break}if(!(Ita(a,96528)|0)){i=469;break}if(!(Ita(a,96538)|0)){i=470;break}if(!(Ita(a,96556)|0)){i=471;break}if(!(Ita(a,96564)|0)){i=472;break}if(!(Ita(a,96576)|0)){i=473;break}if(!(Ita(a,96583)|0)){i=474;break}if(!(Ita(a,96592)|0)){i=475;break}if(!(Ita(a,96610)|0)){i=476;break}if(!(Ita(a,96623)|0)){i=477;break}if(!(Ita(a,96636)|0)){i=478;break}if(!(Ita(a,96654)|0)){i=479;break}if(!(Ita(a,96686)|0)){i=480;break}if(!(Ita(a,96719)|0)){i=481;break}if(!(Ita(a,96740)|0)){i=482;break}if(!(Ita(a,96756)|0)){i=483;break}if(!(Ita(a,96772)|0)){i=484;break}if(!(Ita(a,96797)|0)){i=485;break}if(!(Ita(a,96822)|0)){i=486;break}if(!(Ita(a,96848)|0)){i=487;break}if(!(Ita(a,96874)|0)){i=488;break}if(!(Ita(a,96903)|0)){i=489;break}if(!(Ita(a,96932)|0)){i=490;break}if(!(Ita(a,96956)|0)){i=491;break}if(!(Ita(a,96980)|0)){i=492;break}if(!(Ita(a,97004)|0)){i=493;break}if(!(Ita(a,97029)|0)){i=494;break}if(!(Ita(a,97046)|0)){i=495;break}if(!(Ita(a,97070)|0)){i=496;break}if(!(Ita(a,97094)|0)){i=497;break}if(!(Ita(a,97116)|0)){i=498;break}if(!(Ita(a,97141)|0)){i=499;break}if(!(Ita(a,97163)|0)){i=500;break}if(!(Ita(a,97193)|0)){i=501;break}if(!(Ita(a,97210)|0)){i=502;break}if(!(Ita(a,97224)|0)){i=503;break}if(!(Ita(a,97238)|0)){i=504;break}if(!(Ita(a,97262)|0)){i=505;break}if(!(Ita(a,97293)|0)){i=506;break}if(!(Ita(a,97322)|0)){i=507;break}if(!(Ita(a,97347)|0)){i=508;break}if(!(Ita(a,97365)|0)){i=509;break}if(!(Ita(a,97381)|0)){i=510;break}if(!(Ita(a,97403)|0)){i=511;break}if(!(Ita(a,97425)|0)){i=512;break}if(!(Ita(a,97449)|0)){i=513;break}if(!(Ita(a,97472)|0)){i=514;break}if(!(Ita(a,97494)|0)){i=515;break}if(!(Ita(a,97518)|0)){i=516;break}if(!(Ita(a,97541)|0)){i=517;break}if(!(Ita(a,97562)|0)){i=518;break}if(!(Ita(a,97582)|0)){i=519;break}if(!(Ita(a,97603)|0)){i=520;break}if(!(Ita(a,97618)|0)){i=521;break}if(!(Ita(a,97634)|0)){i=522;break}if(!(Ita(a,97650)|0)){i=523;break}if(!(Ita(a,97668)|0)){i=524;break}if(!(Ita(a,97690)|0)){i=525;break}if(!(Ita(a,97702)|0)){i=526;break}if(!(Ita(a,97714)|0)){i=527;break}if(!(Ita(a,97738)|0)){i=528;break}if(!(Ita(a,97762)|0)){i=529;break}if(!(Ita(a,97779)|0)){i=530;break}if(!(Ita(a,97801)|0)){i=531;break}if(!(Ita(a,97823)|0)){i=532;break}if(!(Ita(a,97851)|0)){i=533;break}if(!(Ita(a,97865)|0)){i=534;break}if(!(Ita(a,97883)|0)){i=535;break}if(!(Ita(a,97900)|0)){i=536;break}if(!(Ita(a,97917)|0)){i=537;break}if(!(Ita(a,97936)|0)){i=538;break}if(!(Ita(a,97955)|0)){i=539;break}if(!(Ita(a,97973)|0)){i=540;break}if(!(Ita(a,97989)|0)){i=541;break}if(!(Ita(a,98007)|0)){i=542;break}if(!(Ita(a,98023)|0)){i=543;break}if(!(Ita(a,98034)|0)){i=544;break}if(!(Ita(a,98045)|0)){i=545;break}if(!(Ita(a,98053)|0)){i=546;break}if(!(Ita(a,98065)|0)){i=547;break}if(!(Ita(a,98071)|0)){i=548;break}if(!(Ita(a,98081)|0)){i=549;break}if(!(Ita(a,98087)|0)){i=550;break}if(!(Ita(a,98096)|0)){i=551;break}if(!(Ita(a,98107)|0)){i=552;break}if(!(Ita(a,98116)|0)){i=553;break}if(!(Ita(a,98124)|0)){i=554;break}if(!(Ita(a,98137)|0)){i=555;break}if(!(Ita(a,98148)|0)){i=556;break}if(!(Ita(a,98158)|0)){i=557;break}if(!(Ita(a,98168)|0)){i=558;break}if(!(Ita(a,114756)|0)){i=559;break}if(!(Ita(a,98176)|0)){i=560;break}if(!(Ita(a,98189)|0)){i=561;break}if(!(Ita(a,98201)|0)){i=562;break}if(!(Ita(a,98218)|0)){i=563;break}if(!(Ita(a,98231)|0)){i=564;break}if(!(Ita(a,98251)|0)){i=565;break}if(!(Ita(a,98266)|0)){i=566;break}if(!(Ita(a,98278)|0)){i=567;break}if(!(Ita(a,98293)|0)){i=568;break}if(!(Ita(a,98301)|0)){i=569;break}if(!(Ita(a,98313)|0)){i=570;break}if(!(Ita(a,98318)|0)){i=571;break}if(!(Ita(a,98333)|0)){i=572;break}if(!(Ita(a,98343)|0)){i=573;break}if(!(Ita(a,98349)|0)){i=574;break}if(!(Ita(a,98358)|0)){i=575;break}if(!(Ita(a,98373)|0)){i=576;break}if(!(Ita(a,98390)|0)){i=577;break}if(!(Ita(a,98410)|0)){i=578;break}if(!(Ita(a,98424)|0)){i=579;break}if(!(Ita(a,98450)|0)){i=580;break}if(!(Ita(a,98459)|0)){i=581;break}if(!(Ita(a,98471)|0)){i=582;break}if(!(Ita(a,98486)|0)){i=583;break}if(!(Ita(a,98493)|0)){i=584;break}if(!(Ita(a,98506)|0)){i=585;break}if(!(Ita(a,98515)|0)){i=586;break}if(!(Ita(a,98522)|0)){i=587;break}if(!(Ita(a,98527)|0)){i=588;break}if(!(Ita(a,98541)|0)){i=589;break}if(!(Ita(a,98559)|0)){i=590;break}if(!(Ita(a,98571)|0)){i=591;break}if(!(Ita(a,98577)|0)){i=592;break}if(!(Ita(a,98584)|0)){i=593;break}if(!(Ita(a,98592)|0)){i=594;break}if(!(Ita(a,98600)|0)){i=595;break}if(!(Ita(a,98609)|0)){i=596;break}if(!(Ita(a,98621)|0)){i=597;break}if(!(Ita(a,98629)|0)){i=598;break}if(!(Ita(a,98641)|0)){i=599;break}if(!(Ita(a,98663)|0)){i=600;break}if(!(Ita(a,98679)|0)){i=601;break}if(!(Ita(a,98692)|0)){i=602;break}if(!(Ita(a,98709)|0)){i=603;break}if(!(Ita(a,98736)|0)){i=604;break}if(!(Ita(a,98754)|0)){i=605;break}if(!(Ita(a,98772)|0)){i=606;break}if(!(Ita(a,98790)|0)){i=607;break}if(!(Ita(a,98807)|0)){i=608;break}if(!(Ita(a,98815)|0)){i=609;break}if(!(Ita(a,98827)|0)){i=610;break}if(!(Ita(a,98837)|0)){i=611;break}if(!(Ita(a,98851)|0)){i=612;break}if(!(Ita(a,98859)|0)){i=613;break}if(!(Ita(a,98876)|0)){i=614;break}if(!(Ita(a,98887)|0)){i=615;break}if(!(Ita(a,98897)|0)){i=616;break}if(!(Ita(a,98910)|0)){i=617;break}if(!(Ita(a,98927)|0)){i=618;break}if(!(Ita(a,98939)|0)){i=619;break}if(!(Ita(a,98943)|0)){i=620;break}if(!(Ita(a,98952)|0)){i=621;break}if(!(Ita(a,98957)|0)){i=622;break}if(!(Ita(a,98967)|0)){i=623;break}if(!(Ita(a,98973)|0)){i=624;break}if(!(Ita(a,98984)|0)){i=625;break}if(!(Ita(a,98990)|0)){i=626;break}if(!(Ita(a,99001)|0)){i=627;break}if(!(Ita(a,99008)|0)){i=628;break}if(!(Ita(a,99018)|0)){i=629;break}if(!(Ita(a,99028)|0)){i=630;break}if(!(Ita(a,99032)|0)){i=631;break}if(!(Ita(a,99036)|0)){i=632;break}if(!(Ita(a,99044)|0)){i=633;break}if(!(Ita(a,99050)|0)){i=634;break}if(!(Ita(a,99057)|0)){i=635;break}if(!(Ita(a,99062)|0)){i=636;break}if(!(Ita(a,99067)|0)){i=637;break}if(!(Ita(a,99076)|0)){i=638;break}if(!(Ita(a,99085)|0)){i=639;break}if(!(Ita(a,99094)|0)){i=640;break}if(!(Ita(a,99103)|0)){i=641;break}if(!(Ita(a,99126)|0)){i=642;break}if(!(Ita(a,99136)|0)){i=643;break}if(!(Ita(a,99146)|0)){i=644;break}if(!(Ita(a,99155)|0)){i=645;break}if(!(Ita(a,99165)|0)){i=646;break}if(!(Ita(a,99170)|0)){i=647;break}if(!(Ita(a,99188)|0)){i=648;break}if(!(Ita(a,99197)|0)){i=649;break}if(!(Ita(a,99206)|0)){i=650;break}if(!(Ita(a,99215)|0)){i=651;break}if(!(Ita(a,99229)|0)){i=652;break}if(!(Ita(a,99236)|0)){i=653;break}if(!(Ita(a,99245)|0)){i=654;break}if(!(Ita(a,99260)|0)){i=655;break}if(!(Ita(a,99287)|0)){i=656;break}if(!(Ita(a,99302)|0)){i=657;break}if(!(Ita(a,113694)|0)){i=658;break}if(!(Ita(a,99320)|0)){i=659;break}if(!(Ita(a,114189)|0)){i=660;break}if(!(Ita(a,113936)|0)){i=661;break}if(!(Ita(a,114059)|0)){i=662;break}if(!(Ita(a,113815)|0)){i=663;break}if(!(Ita(a,99332)|0)){i=664;break}if(!(Ita(a,99346)|0)){i=665;break}if(!(Ita(a,99360)|0)){i=666;break}if(!(Ita(a,99372)|0)){i=667;break}if(!(Ita(a,99390)|0)){i=668;break}if(!(Ita(a,99405)|0)){i=669;break}if(!(Ita(a,99424)|0)){i=670;break}if(!(Ita(a,99441)|0)){i=671;break}if(!(Ita(a,99445)|0)){i=672;break}if(!(Ita(a,99454)|0)){i=673;break}if(!(Ita(a,99464)|0)){i=674;break}if(!(Ita(a,99467)|0)){i=675;break}if(!(Ita(a,99476)|0)){i=676;break}if(!(Ita(a,99486)|0)){i=677;break}if(!(Ita(a,99489)|0)){i=678;break}if(!(Ita(a,99498)|0)){i=679;break}if(!(Ita(a,99501)|0)){i=680;break}if(!(Ita(a,99507)|0)){i=681;break}if(!(Ita(a,99512)|0)){i=682;break}if(!(Ita(a,99521)|0)){i=683;break}if(!(Ita(a,99526)|0)){i=684;break}if(!(Ita(a,99533)|0)){i=685;break}if(!(Ita(a,99540)|0)){i=686;break}if(!(Ita(a,99547)|0)){i=687;break}if(!(Ita(a,99556)|0)){i=688;break}if(!(Ita(a,99571)|0)){i=689;break}if(!(Ita(a,99592)|0)){i=690;break}if(!(Ita(a,99615)|0)){i=691;break}if(!(Ita(a,99639)|0)){i=692;break}if(!(Ita(a,99657)|0)){i=693;break}if(!(Ita(a,114464)|0)){i=694;break}if(!(Ita(a,114591)|0)){i=695;break}if(!(Ita(a,114328)|0)){i=696;break}if(!(Ita(a,99669)|0)){i=697;break}if(!(Ita(a,99684)|0)){i=698;break}if(!(Ita(a,99698)|0)){i=699;break}if(!(Ita(a,99710)|0)){i=700;break}if(!(Ita(a,99724)|0)){i=701;break}if(!(Ita(a,99739)|0)){i=702;break}if(!(Ita(a,99756)|0)){i=703;break}if(!(Ita(a,99773)|0)){i=704;break}if(!(Ita(a,99788)|0)){i=705;break}if(!(Ita(a,99803)|0)){i=706;break}if(!(Ita(a,99811)|0)){i=707;break}if(!(Ita(a,99824)|0)){i=708;break}if(!(Ita(a,99839)|0)){i=709;break}if(!(Ita(a,99854)|0)){i=710;break}if(!(Ita(a,99869)|0)){i=711;break}if(!(Ita(a,99884)|0)){i=712;break}if(!(Ita(a,99899)|0)){i=713;break}if(!(Ita(a,99914)|0)){i=714;break}if(!(Ita(a,99933)|0)){i=715;break}if(!(Ita(a,99950)|0)){i=716;break}if(!(Ita(a,99969)|0)){i=717;break}if(!(Ita(a,99988)|0)){i=718;break}if(!(Ita(a,100007)|0)){i=719;break}if(!(Ita(a,100026)|0)){i=720;break}if(!(Ita(a,100045)|0)){i=721;break}if(!(Ita(a,100064)|0)){i=722;break}if(!(Ita(a,100090)|0)){i=723;break}if(!(Ita(a,100098)|0)){i=724;break}if(!(Ita(a,100109)|0)){i=725;break}if(!(Ita(a,100122)|0)){i=726;break}if(!(Ita(a,100135)|0)){i=727;break}if(!(Ita(a,100148)|0)){i=728;break}if(!(Ita(a,100161)|0)){i=729;break}if(!(Ita(a,100174)|0)){i=730;break}if(!(Ita(a,100187)|0)){i=731;break}if(!(Ita(a,100198)|0)){i=732;break}if(!(Ita(a,100212)|0)){i=733;break}if(!(Ita(a,100233)|0)){i=734;break}if(!(Ita(a,100241)|0)){i=735;break}if(!(Ita(a,100246)|0)){i=736;break}if(!(Ita(a,100249)|0)){i=737;break}if(!(Ita(a,100257)|0)){i=738;break}if(!(Ita(a,100260)|0)){i=739;break}if(!(Ita(a,100265)|0)){i=740;break}if(!(Ita(a,100274)|0)){i=741;break}if(!(Ita(a,100292)|0)){i=742;break}if(!(Ita(a,100295)|0)){i=743;break}if(!(Ita(a,100304)|0)){i=744;break}if(!(Ita(a,100322)|0)){i=745;break}if(!(Ita(a,100328)|0)){i=746;break}if(!(Ita(a,100334)|0)){i=747;break}if(!(Ita(a,100340)|0)){i=748;break}if(!(Ita(a,100346)|0)){i=749;break}if(!(Ita(a,100351)|0)){i=750;break}if(!(Ita(a,100359)|0)){i=751;break}if(!(Ita(a,100364)|0)){i=752;break}if(!(Ita(a,100378)|0)){i=753;break}if(!(Ita(a,100389)|0)){i=754;break}if(!(Ita(a,100402)|0)){i=755;break}if(!(Ita(a,100414)|0)){i=756;break}if(!(Ita(a,100426)|0)){i=757;break}if(!(Ita(a,100442)|0)){i=758;break}if(!(Ita(a,100460)|0)){i=759;break}if(!(Ita(a,100472)|0)){i=760;break}if(!(Ita(a,100491)|0)){i=761;break}if(!(Ita(a,100512)|0)){i=762;break}if(!(Ita(a,100536)|0)){i=763;break}if(!(Ita(a,100554)|0)){i=764;break}if(!(Ita(a,100556)|0)){i=765;break}if(!(Ita(a,100577)|0)){i=766;break}if(!(Ita(a,100582)|0)){i=767;break}if(!(Ita(a,100587)|0)){i=768;break}if(!(Ita(a,100602)|0)){i=769;break}if(!(Ita(a,100619)|0)){i=770;break}if(!(Ita(a,100637)|0)){i=771;break}if(!(Ita(a,100655)|0)){i=772;break}if(!(Ita(a,100673)|0)){i=773;break}if(!(Ita(a,100691)|0)){i=774;break}if(!(Ita(a,100709)|0)){i=775;break}if(!(Ita(a,100727)|0)){i=776;break}if(!(Ita(a,100745)|0)){i=777;break}if(!(Ita(a,100763)|0)){i=778;break}if(!(Ita(a,100781)|0)){i=779;break}if(!(Ita(a,100800)|0)){i=780;break}if(!(Ita(a,100819)|0)){i=781;break}if(!(Ita(a,100838)|0)){i=782;break}if(!(Ita(a,100857)|0)){i=783;break}if(!(Ita(a,100876)|0)){i=784;break}if(!(Ita(a,100895)|0)){i=785;break}if(!(Ita(a,100914)|0)){i=786;break}if(!(Ita(a,100933)|0)){i=787;break}if(!(Ita(a,100952)|0)){i=788;break}if(!(Ita(a,100971)|0)){i=789;break}if(!(Ita(a,100990)|0)){i=790;break}if(!(Ita(a,101009)|0)){i=791;break}if(!(Ita(a,101028)|0)){i=792;break}if(!(Ita(a,101047)|0)){i=793;break}if(!(Ita(a,101066)|0)){i=794;break}if(!(Ita(a,101085)|0)){i=795;break}if(!(Ita(a,101104)|0)){i=796;break}if(!(Ita(a,101123)|0)){i=797;break}if(!(Ita(a,101142)|0)){i=798;break}if(!(Ita(a,101161)|0)){i=799;break}if(!(Ita(a,101180)|0)){i=800;break}if(!(Ita(a,101199)|0)){i=801;break}if(!(Ita(a,101218)|0)){i=802;break}if(!(Ita(a,101237)|0)){i=803;break}if(!(Ita(a,101256)|0)){i=804;break}if(!(Ita(a,101275)|0)){i=805;break}if(!(Ita(a,101294)|0)){i=806;break}if(!(Ita(a,101313)|0)){i=807;break}if(!(Ita(a,101332)|0)){i=808;break}if(!(Ita(a,101351)|0)){i=809;break}if(!(Ita(a,101370)|0)){i=810;break}if(!(Ita(a,101389)|0)){i=811;break}if(!(Ita(a,101408)|0)){i=812;break}if(!(Ita(a,101427)|0)){i=813;break}if(!(Ita(a,101446)|0)){i=814;break}if(!(Ita(a,101465)|0)){i=815;break}if(!(Ita(a,101484)|0)){i=816;break}if(!(Ita(a,101503)|0)){i=817;break}if(!(Ita(a,101522)|0)){i=818;break}if(!(Ita(a,101541)|0)){i=819;break}if(!(Ita(a,101560)|0)){i=820;break}if(!(Ita(a,101579)|0)){i=821;break}if(!(Ita(a,101598)|0)){i=822;break}if(!(Ita(a,101617)|0)){i=823;break}if(!(Ita(a,101636)|0)){i=824;break}if(!(Ita(a,101655)|0)){i=825;break}if(!(Ita(a,101674)|0)){i=826;break}if(!(Ita(a,101693)|0)){i=827;break}if(!(Ita(a,101712)|0)){i=828;break}if(!(Ita(a,101731)|0)){i=829;break}if(!(Ita(a,101750)|0)){i=830;break}if(!(Ita(a,101769)|0)){i=831;break}if(!(Ita(a,101788)|0)){i=832;break}if(!(Ita(a,101807)|0)){i=833;break}if(!(Ita(a,101826)|0)){i=834;break}if(!(Ita(a,101845)|0)){i=835;break}if(!(Ita(a,101864)|0)){i=836;break}if(!(Ita(a,101883)|0)){i=837;break}if(!(Ita(a,101902)|0)){i=838;break}if(!(Ita(a,101921)|0)){i=839;break}if(!(Ita(a,101940)|0)){i=840;break}if(!(Ita(a,101959)|0)){i=841;break}if(!(Ita(a,101978)|0)){i=842;break}if(!(Ita(a,101997)|0)){i=843;break}if(!(Ita(a,102016)|0)){i=844;break}if(!(Ita(a,102035)|0)){i=845;break}if(!(Ita(a,102054)|0)){i=846;break}if(!(Ita(a,102073)|0)){i=847;break}if(!(Ita(a,102092)|0)){i=848;break}if(!(Ita(a,102111)|0)){i=849;break}if(!(Ita(a,102130)|0)){i=850;break}if(!(Ita(a,102149)|0)){i=851;break}if(!(Ita(a,102168)|0)){i=852;break}if(!(Ita(a,102187)|0)){i=853;break}if(!(Ita(a,102206)|0)){i=854;break}if(!(Ita(a,102225)|0)){i=855;break}if(!(Ita(a,102244)|0)){i=856;break}if(!(Ita(a,102263)|0)){i=857;break}if(!(Ita(a,102282)|0)){i=858;break}if(!(Ita(a,102301)|0)){i=859;break}if(!(Ita(a,102320)|0)){i=860;break}if(!(Ita(a,102339)|0)){i=861;break}if(!(Ita(a,102358)|0)){i=862;break}if(!(Ita(a,102377)|0)){i=863;break}if(!(Ita(a,102396)|0)){i=864;break}if(!(Ita(a,102415)|0)){i=865;break}if(!(Ita(a,102434)|0)){i=866;break}if(!(Ita(a,102453)|0)){i=867;break}if(!(Ita(a,102472)|0)){i=868;break}if(!(Ita(a,102491)|0)){i=869;break}if(!(Ita(a,102511)|0)){i=870;break}if(!(Ita(a,102532)|0)){i=871;break}if(!(Ita(a,102547)|0)){i=872;break}if(!(Ita(a,102566)|0)){i=873;break}if(!(Ita(a,102595)|0)){i=874;break}if(!(Ita(a,102618)|0)){i=875;break}if(!(Ita(a,102629)|0)){i=876;break}if(!(Ita(a,102644)|0)){i=877;break}if(!(Ita(a,102669)|0)){i=878;break}if(!(Ita(a,102689)|0)){i=879;break}if(!(Ita(a,102704)|0)){i=880;break}if(!(Ita(a,102715)|0)){i=881;break}if(!(Ita(a,102736)|0)){i=882;break}if(!(Ita(a,102752)|0)){i=883;break}if(!(Ita(a,102770)|0)){i=884;break}if(!(Ita(a,102792)|0)){i=885;break}if(!(Ita(a,102804)|0)){i=886;break}if(!(Ita(a,102828)|0)){i=887;break}if(!(Ita(a,102842)|0)){i=888;break}if(!(Ita(a,102860)|0)){i=889;break}if(!(Ita(a,102879)|0)){i=890;break}if(!(Ita(a,102905)|0)){i=891;break}if(!(Ita(a,102911)|0)){i=892;break}if(!(Ita(a,102924)|0)){i=893;break}if(!(Ita(a,102930)|0)){i=894;break}if(!(Ita(a,102943)|0)){i=895;break}if(!(Ita(a,102950)|0)){i=896;break}if(!(Ita(a,102957)|0)){i=897;break}if(!(Ita(a,102963)|0)){i=898;break}if(!(Ita(a,102969)|0)){i=899;break}if(!(Ita(a,102978)|0)){i=900;break}if(!(Ita(a,102984)|0)){i=901;break}if(!(Ita(a,102990)|0)){i=902;break}if(!(Ita(a,102999)|0)){i=903;break}if(!(Ita(a,103005)|0)){i=904;break}if(!(Ita(a,103011)|0)){i=905;break}if(!(Ita(a,103020)|0)){i=906;break}if(!(Ita(a,103033)|0)){i=907;break}if(!(Ita(a,103046)|0)){i=908;break}if(!(Ita(a,103054)|0)){i=909;break}if(!(Ita(a,103064)|0)){i=910;break}if(!(Ita(a,103089)|0)){i=911;break}if(!(Ita(a,103106)|0)){i=912;break}if(!(Ita(a,103123)|0)){i=913;break}if(!(Ita(a,103132)|0)){i=914;break}if(!(Ita(a,103141)|0)){i=915;break}if(!(Ita(a,103153)|0)){i=916;break}if(!(Ita(a,103174)|0)){i=917;break}if(!(Ita(a,103198)|0)){i=918;break}if(!(Ita(a,103225)|0)){i=919;break}if(!(Ita(a,103254)|0)){i=920;break}if(!(Ita(a,103279)|0)){i=921;break}if(!(Ita(a,103284)|0)){i=922;break}if(!(Ita(a,103304)|0)){i=923;break}if(!(Ita(a,103318)|0)){i=924;break}if(!(Ita(a,103338)|0)){i=925;break}if(!(Ita(a,103359)|0)){i=926;break}if(!(Ita(a,103367)|0)){i=927;break}if(!(Ita(a,103381)|0)){i=928;break}if(!(Ita(a,103405)|0)){i=929;break}if(!(Ita(a,138571)|0)){i=930;break}if(!(Ita(a,138932)|0)){i=931;break}if(!(Ita(a,139212)|0)){i=932;break}if(!(Ita(a,103414)|0)){i=933;break}if(!(Ita(a,103423)|0)){i=934;break}if(!(Ita(a,103431)|0)){i=935;break}if(!(Ita(a,103440)|0)){i=936;break}if(!(Ita(a,103454)|0)){i=937;break}if(!(Ita(a,103459)|0)){i=938;break}if(!(Ita(a,103469)|0)){i=939;break}if(!(Ita(a,103479)|0)){i=940;break}if(!(Ita(a,103489)|0)){i=941;break}if(!(Ita(a,103498)|0)){i=942;break}if(!(Ita(a,103521)|0)){i=943;break}if(!(Ita(a,103526)|0)){i=944;break}if(!(Ita(a,103532)|0)){i=945;break}if(!(Ita(a,103540)|0)){i=946;break}if(!(Ita(a,103550)|0)){i=947;break}if(!(Ita(a,103556)|0)){i=948;break}if(!(Ita(a,103568)|0)){i=949;break}if(!(Ita(a,103588)|0)){i=950;break}if(!(Ita(a,103612)|0)){i=951;break}if(!(Ita(a,103630)|0)){i=952;break}if(!(Ita(a,103647)|0)){i=953;break}if(!(Ita(a,103656)|0)){i=954;break}if(!(Ita(a,103671)|0)){i=955;break}if(!(Ita(a,103685)|0)){i=956;break}if(!(Ita(a,103698)|0)){i=957;break}if(!(Ita(a,103714)|0)){i=958;break}if(!(Ita(a,103738)|0)){i=959;break}if(!(Ita(a,103761)|0)){i=960;break}if(!(Ita(a,103772)|0)){i=961;break}if(!(Ita(a,103782)|0)){i=962;break}if(!(Ita(a,103793)|0)){i=963;break}if(!(Ita(a,103801)|0)){i=964;break}if(!(Ita(a,103808)|0)){i=965;break}if(!(Ita(a,103817)|0)){i=966;break}if(!(Ita(a,103822)|0)){i=967;break}if(!(Ita(a,103830)|0)){i=968;break}if(!(Ita(a,103845)|0)){i=969;break}if(!(Ita(a,103860)|0)){i=970;break}if(!(Ita(a,103874)|0)){i=971;break}if(!(Ita(a,103877)|0)){i=972;break}if(!(Ita(a,103881)|0)){i=973;break}if(!(Ita(a,103887)|0)){i=974;break}if(!(Ita(a,103896)|0)){i=975;break}if(!(Ita(a,103906)|0)){i=976;break}if(!(Ita(a,103910)|0)){i=977;break}if(!(Ita(a,103914)|0)){i=978;break}if(!(Ita(a,103920)|0)){i=979;break}if(!(Ita(a,103924)|0)){i=980;break}if(!(Ita(a,103931)|0)){i=981;break}if(!(Ita(a,103945)|0)){i=982;break}if(!(Ita(a,103956)|0)){i=983;break}if(!(Ita(a,103969)|0)){i=984;break}if(!(Ita(a,103976)|0)){i=985;break}if(!(Ita(a,103986)|0)){i=986;break}if(!(Ita(a,104002)|0)){i=987;break}if(!(Ita(a,104011)|0)){i=988;break}if(!(Ita(a,104021)|0)){i=989;break}if(!(Ita(a,104036)|0)){i=990;break}if(!(Ita(a,104048)|0)){i=991;break}if(!(Ita(a,104070)|0)){i=992;break}if(!(Ita(a,104092)|0)){i=993;break}if(!(Ita(a,104115)|0)){i=994;break}if(!(Ita(a,104138)|0)){i=995;break}if(!(Ita(a,104161)|0)){i=996;break}if(!(Ita(a,104185)|0)){i=997;break}if(!(Ita(a,104206)|0)){i=998;break}if(!(Ita(a,104227)|0)){i=999;break}if(!(Ita(a,104236)|0)){i=1e3;break}if(!(Ita(a,104253)|0)){i=1001;break}if(!(Ita(a,104280)|0)){i=1002;break}if(!(Ita(a,104300)|0)){i=1003;break}if(!(Ita(a,104319)|0)){i=1004;break}if(!(Ita(a,104338)|0)){i=1005;break}if(!(Ita(a,104356)|0)){i=1006;break}if(!(Ita(a,104374)|0)){i=1007;break}if(!(Ita(a,104396)|0)){i=1008;break}if(!(Ita(a,104418)|0)){i=1009;break}if(!(Ita(a,104436)|0)){i=1010;break}if(!(Ita(a,104456)|0)){i=1011;break}if(!(Ita(a,104477)|0)){i=1012;break}if(!(Ita(a,104498)|0)){i=1013;break}if(!(Ita(a,104517)|0)){i=1014;break}if(!(Ita(a,104541)|0)){i=1015;break}if(!(Ita(a,104570)|0)){i=1016;break}if(!(Ita(a,104602)|0)){i=1017;break}j=(Ita(a,104616)|0)==0;if(j|b^1){i=j?1018:-1;break}j=e+56|0;l=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);Yua(p);Ava(l);q=u;s=t;break}Yua(d);B=0;t=Ia(40,e|0,104643,5)|0;u=B;B=0;do if(!(u&1)){v=Lta(a)|0;B=0;w=Ia(40,t|0,a|0,v|0)|0;v=B;B=0;if(v&1)break;B=0;v=Ia(40,w|0,114879,10)|0;w=B;B=0;if(w&1)break;B=0;Xa(239,v|0,0)|0;v=B;B=0;if(v&1)break;v=Ab(20)|0;B=0;eb(502,f|0,104649,76);w=B;B=0;do if(w&1){x=Rb()|0;y=Q;z=x}else{B=0;eb(502,g|0,104726,13);x=B;B=0;if(x&1){x=Rb()|0;A=Q;Yua(f);y=A;z=x;break}B=0;wa(510,h|0,l|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,v|0,f|0,g|0,1066,h|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,v|0,1240,229);B=0;F=0}x=Rb()|0;A=Q;Yua(h);C=A;D=x;E=F}Yua(g);Yua(f);if(E){y=C;z=D;break}else{G=C;H=D}k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(H|0)}while(0);zb(v|0);G=y;H=z;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(H|0)}while(0);t=Rb()|0;G=Q;H=t;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(H|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}else i=17;else i=16;else i=15;else i=14;else i=13;else i=12;else i=11;else i=10;else i=9;else i=8;else i=7;else i=6;else i=5;else i=4;else i=3;else i=2;else i=1;else i=0;while(0);r=c;return i|0}function AY(){return (k[9114]&1|0)!=0|0}function BY(){return (k[9114]&2|0)!=0|0}function CY(){return (k[9114]&4|0)!=0|0}function DY(){return (k[9114]&8|0)!=0|0}function EY(){return (k[9114]&16|0)!=0|0}function FY(){return (k[9114]&32|0)!=0|0}function GY(){return (k[9114]&256|0)!=0|0}
+-function Ala(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0;b=r;r=r+1968|0;c=b+1952|0;d=b+1744|0;e=b+1940|0;f=b+1592|0;g=b+1928|0;h=b+1456|0;i=b+1916|0;j=b+1304|0;l=b+1904|0;m=b+1168|0;n=b+1892|0;o=b+1016|0;p=b+1880|0;q=b+880|0;s=b+1728|0;t=b+744|0;u=b+1440|0;v=b+592|0;w=b+1152|0;x=b+456|0;y=b+728|0;z=b+304|0;A=b+440|0;C=b+168|0;D=b+152|0;E=b+16|0;F=b;if(!(k[a>>2]|0)){G=E+56|0;H=E+4|0;k[E>>2]=27524;k[G>>2]=27544;B=0;wa(508,E+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;K=I;vva(G);Qb(K|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){L=Rb()|0;M=Q;N=L}else{k[H>>2]=27560;L=E+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(c);Yua(L);Ava(H);M=P;N=O;break}Yua(c);B=0;Ia(40,E|0,142729,16)|0;O=B;B=0;do if(!(O&1)?(B=0,wa(510,F|0,H|0),P=B,B=0,!(P&1)):0){B=0;ya(424,F|0)|0;P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(F);S=R;T=P;break}Yua(F);k[E>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(G);r=b;return}else U=202;while(0);if((U|0)==202){O=Rb()|0;S=Q;T=O}k[E>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(G);V=S;W=T;Qb(W|0)}while(0);J=M;K=N;vva(G);Qb(K|0)}K=d+56|0;G=d+4|0;k[d>>2]=27524;k[K>>2]=27544;B=0;wa(508,d+56|0,G|0);N=B;B=0;if(N&1){N=Rb()|0;X=Q;Y=N;vva(K);Qb(Y|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[K>>2]=27488;B=0;va(448,G|0);N=B;B=0;do if(N&1){M=Rb()|0;Z=Q;_=M}else{k[G>>2]=27560;M=d+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,G|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;T=Q;Yua(c);Yua(M);Ava(G);Z=T;_=J;break}Yua(c);B=0;Ia(40,d|0,142679,10)|0;J=B;B=0;do if(!(J&1)?(B=0,wa(510,e|0,G|0),T=B,B=0,!(T&1)):0){B=0;ya(424,e|0)|0;T=B;B=0;if(T&1){T=Rb()|0;S=Q;Yua(e);$=S;aa=T;break}Yua(e);k[d>>2]=27468;k[K>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(K);T=f+56|0;S=f+4|0;k[f>>2]=27524;k[T>>2]=27544;B=0;wa(508,f+56|0,S|0);H=B;B=0;if(H&1){H=Rb()|0;ba=Q;ca=H;vva(T);Qb(ca|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[T>>2]=27488;B=0;va(448,S|0);H=B;B=0;do if(H&1){E=Rb()|0;da=Q;ea=E}else{k[S>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,S|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;Yua(c);Yua(E);Ava(S);da=I;ea=F;break}Yua(c);B=0;F=Ia(40,f|0,142690,10)|0;I=B;B=0;do if(((!(I&1)?(B=0,O=Xa(242,F|0,k[a>>2]|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,O|0,149177,1)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,g|0,S|0),O=B,B=0,!(O&1)):0){B=0;ya(424,g|0)|0;O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);fa=P;ga=O;break}Yua(g);k[f>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(E);Ava(S);vva(T);O=h+56|0;P=h+4|0;k[h>>2]=27524;k[O>>2]=27544;B=0;wa(508,h+56|0,P|0);R=B;B=0;if(R&1){R=Rb()|0;ha=Q;ia=R;vva(O);Qb(ia|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[O>>2]=27488;B=0;va(448,P|0);R=B;B=0;do if(R&1){ja=Rb()|0;ka=Q;la=ja}else{k[P>>2]=27560;ja=h+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(c);Yua(ja);Ava(P);ka=na;la=ma;break}Yua(c);B=0;Ia(40,h|0,142701,11)|0;ma=B;B=0;do if(ma&1)U=58;else{B=0;wa(510,i|0,P|0);na=B;B=0;if(na&1){U=58;break}B=0;ya(424,i|0)|0;na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(i);pa=oa;qa=na;break}Yua(i);k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(ja);Ava(P);vva(O);a:do if((k[a>>2]|0)>0){na=j+56|0;oa=j+4|0;ra=j+56|0;sa=j+128|0;ta=j+132|0;ua=j+36|0;xa=j+52|0;za=a+8|0;Aa=0;while(1){k[j>>2]=27524;k[na>>2]=27544;B=0;wa(508,ra|0,oa|0);Ba=B;B=0;if(Ba&1){U=43;break}k[sa>>2]=0;k[ta>>2]=-1;k[j>>2]=27468;k[na>>2]=27488;B=0;va(448,oa|0);Ba=B;B=0;if(Ba&1){U=44;break}k[oa>>2]=27560;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[xa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,oa|0,c|0);Ba=B;B=0;if(Ba&1){U=42;break}Yua(c);B=0;Ba=Xa(242,j|0,k[(k[za>>2]|0)+(Aa<<2)>>2]|0)|0;Ca=B;B=0;if(Ca&1){U=61;break}B=0;Ia(40,Ba|0,149175,1)|0;Ba=B;B=0;if(Ba&1){U=61;break}B=0;wa(510,l|0,oa|0);Ba=B;B=0;if(Ba&1){U=61;break}B=0;ya(424,l|0)|0;Ba=B;B=0;if(Ba&1){U=62;break}Yua(l);k[j>>2]=27468;k[na>>2]=27488;k[oa>>2]=27560;Yua(ua);Ava(oa);vva(na);Aa=Aa+1|0;if((Aa|0)>=(k[a>>2]|0))break a}if((U|0)==42){Aa=Rb()|0;za=Q;Yua(c);Yua(ua);Ava(oa);Da=za;Ea=Aa;U=45}else if((U|0)==43){Aa=Rb()|0;Fa=Q;Ga=Aa;vva(na);Qb(Ga|0)}else if((U|0)==44){Aa=Rb()|0;Da=Q;Ea=Aa;U=45}else if((U|0)==61){Aa=Rb()|0;Ha=Q;Ja=Aa;U=63}else if((U|0)==62){Aa=Rb()|0;za=Q;Yua(l);Ha=za;Ja=Aa;U=63}if((U|0)==45){Fa=Da;Ga=Ea;vva(na);Qb(Ga|0)}else if((U|0)==63){k[j>>2]=27468;k[na>>2]=27488;k[oa>>2]=27560;Yua(ua);Ava(oa);vva(na);V=Ha;W=Ja;Qb(W|0)}}while(0);Aa=m+56|0;za=m+4|0;k[m>>2]=27524;k[Aa>>2]=27544;B=0;wa(508,m+56|0,za|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ka=Q;La=xa;vva(Aa);Qb(La|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[Aa>>2]=27488;B=0;va(448,za|0);xa=B;B=0;do if(xa&1){ta=Rb()|0;Ma=Q;Na=ta}else{k[za>>2]=27560;ta=m+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(c);Yua(ta);Ava(za);Ma=ra;Na=sa;break}Yua(c);B=0;Ia(40,m|0,149177,1)|0;sa=B;B=0;do if(sa&1)U=101;else{B=0;wa(510,n|0,za|0);ra=B;B=0;if(ra&1){U=101;break}B=0;ya(424,n|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;Ba=Q;Yua(n);Oa=Ba;Pa=ra;break}Yua(n);k[m>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(ta);Ava(za);vva(Aa);ra=o+56|0;Ba=o+4|0;k[o>>2]=27524;k[ra>>2]=27544;B=0;wa(508,o+56|0,Ba|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Qa=Q;Ra=Ca;vva(ra);Qb(Ra|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[ra>>2]=27488;B=0;va(448,Ba|0);Ca=B;B=0;do if(Ca&1){Sa=Rb()|0;Ta=Q;Ua=Sa}else{k[Ba>>2]=27560;Sa=o+36|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ba|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;Wa=Q;Yua(c);Yua(Sa);Ava(Ba);Ta=Wa;Ua=Va;break}Yua(c);B=0;Ia(40,o|0,142713,15)|0;Va=B;B=0;do if(Va&1)U=104;else{B=0;wa(510,p|0,Ba|0);Wa=B;B=0;if(Wa&1){U=104;break}B=0;ya(424,p|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(p);Za=Ya;_a=Wa;break}Yua(p);k[o>>2]=27468;k[ra>>2]=27488;k[Ba>>2]=27560;Yua(Sa);Ava(Ba);vva(ra);b:do if((k[a>>2]|0)>0){Wa=q+56|0;Ya=q+4|0;$a=q+56|0;ab=q+128|0;bb=q+132|0;cb=q+36|0;db=q+52|0;eb=a+12|0;fb=0;while(1){k[q>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,$a|0,Ya|0);gb=B;B=0;if(gb&1){U=92;break}k[ab>>2]=0;k[bb>>2]=-1;k[q>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Ya|0);gb=B;B=0;if(gb&1){U=93;break}k[Ya>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[db>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);gb=B;B=0;if(gb&1){U=91;break}Yua(c);B=0;gb=Xa(242,q|0,k[(k[eb>>2]|0)+(fb<<2)>>2]|0)|0;hb=B;B=0;if(hb&1){U=107;break}B=0;Ia(40,gb|0,149175,1)|0;gb=B;B=0;if(gb&1){U=107;break}B=0;wa(510,s|0,Ya|0);gb=B;B=0;if(gb&1){U=107;break}B=0;ya(424,s|0)|0;gb=B;B=0;if(gb&1){U=108;break}Yua(s);k[q>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);fb=fb+1|0;if((fb|0)>=(k[a>>2]|0))break b}if((U|0)==91){fb=Rb()|0;eb=Q;Yua(c);Yua(cb);Ava(Ya);ib=eb;jb=fb;U=94}else if((U|0)==92){fb=Rb()|0;kb=Q;lb=fb;vva(Wa);Qb(lb|0)}else if((U|0)==93){fb=Rb()|0;ib=Q;jb=fb;U=94}else if((U|0)==107){fb=Rb()|0;mb=Q;nb=fb;U=109}else if((U|0)==108){fb=Rb()|0;eb=Q;Yua(s);mb=eb;nb=fb;U=109}if((U|0)==94){kb=ib;lb=jb;vva(Wa);Qb(lb|0)}else if((U|0)==109){k[q>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);V=mb;W=nb;Qb(W|0)}}while(0);fb=t+56|0;eb=t+4|0;k[t>>2]=27524;k[fb>>2]=27544;B=0;wa(508,t+56|0,eb|0);db=B;B=0;if(db&1){db=Rb()|0;ob=Q;pb=db;vva(fb);Qb(pb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[fb>>2]=27488;B=0;va(448,eb|0);db=B;B=0;do if(db&1){bb=Rb()|0;qb=Q;rb=bb}else{k[eb>>2]=27560;bb=t+36|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,eb|0,c|0);ab=B;B=0;if(ab&1){ab=Rb()|0;$a=Q;Yua(c);Yua(bb);Ava(eb);qb=$a;rb=ab;break}Yua(c);B=0;Ia(40,t|0,149177,1)|0;ab=B;B=0;do if(ab&1)U=134;else{B=0;wa(510,u|0,eb|0);$a=B;B=0;if($a&1){U=134;break}B=0;ya(424,u|0)|0;$a=B;B=0;if($a&1){$a=Rb()|0;gb=Q;Yua(u);sb=gb;tb=$a;break}Yua(u);k[t>>2]=27468;k[fb>>2]=27488;k[eb>>2]=27560;Yua(bb);Ava(eb);vva(fb);$a=a+4|0;if(!(k[$a>>2]|0)){gb=v+56|0;hb=v+4|0;k[v>>2]=27524;k[gb>>2]=27544;B=0;wa(508,v+56|0,hb|0);ub=B;B=0;if(ub&1){ub=Rb()|0;vb=Q;wb=ub;vva(gb);Qb(wb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[gb>>2]=27488;B=0;va(448,hb|0);ub=B;B=0;do if(ub&1){xb=Rb()|0;yb=Q;zb=xb}else{k[hb>>2]=27560;xb=v+36|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hb|0,c|0);Ab=B;B=0;if(Ab&1){Ab=Rb()|0;Bb=Q;Yua(c);Yua(xb);Ava(hb);yb=Bb;zb=Ab;break}Yua(c);B=0;Ia(40,v|0,142746,37)|0;Ab=B;B=0;do if(Ab&1)U=137;else{B=0;wa(510,w|0,hb|0);Bb=B;B=0;if(Bb&1){U=137;break}B=0;ya(424,w|0)|0;Bb=B;B=0;if(Bb&1){Bb=Rb()|0;Cb=Q;Yua(w);Db=Cb;Eb=Bb;break}Yua(w);k[v>>2]=27468;k[gb>>2]=27488;k[hb>>2]=27560;Yua(xb);Ava(hb);vva(gb);r=b;return}while(0);if((U|0)==137){Ab=Rb()|0;Db=Q;Eb=Ab}k[v>>2]=27468;k[gb>>2]=27488;k[hb>>2]=27560;Yua(xb);Ava(hb);vva(gb);V=Db;W=Eb;Qb(W|0)}while(0);vb=yb;wb=zb;vva(gb);Qb(wb|0)}hb=x+56|0;ub=x+4|0;k[x>>2]=27524;k[hb>>2]=27544;B=0;wa(508,x+56|0,ub|0);Ab=B;B=0;if(Ab&1){Ab=Rb()|0;Fb=Q;Gb=Ab;vva(hb);Qb(Gb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[hb>>2]=27488;B=0;va(448,ub|0);Ab=B;B=0;do if(Ab&1){Bb=Rb()|0;Hb=Q;Ib=Bb}else{k[ub>>2]=27560;Bb=x+36|0;k[Bb>>2]=0;k[Bb+4>>2]=0;k[Bb+8>>2]=0;k[Bb+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Jb=Q;Yua(c);Yua(Bb);Ava(ub);Hb=Jb;Ib=Cb;break}Yua(c);B=0;Ia(40,x|0,142784,18)|0;Cb=B;B=0;do if(!(Cb&1)){B=0;wa(510,y|0,ub|0);Jb=B;B=0;if(Jb&1){U=168;break}B=0;ya(424,y|0)|0;Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Kb=Q;Yua(y);Lb=Kb;Mb=Jb;break}Yua(y);k[x>>2]=27468;k[hb>>2]=27488;k[ub>>2]=27560;Yua(Bb);Ava(ub);vva(hb);if((k[a>>2]|0)<=0){r=b;return}Jb=z+56|0;Kb=z+4|0;Nb=z+56|0;Ob=z+128|0;Pb=z+132|0;Sb=z+36|0;Tb=z+52|0;Ub=C+56|0;Vb=C+4|0;Wb=C+56|0;Xb=C+128|0;Yb=C+132|0;Zb=C+36|0;_b=C+52|0;$b=0;while(1){k[z>>2]=27524;k[Jb>>2]=27544;B=0;wa(508,Nb|0,Kb|0);ac=B;B=0;if(ac&1){U=157;break}k[Ob>>2]=0;k[Pb>>2]=-1;k[z>>2]=27468;k[Jb>>2]=27488;B=0;va(448,Kb|0);ac=B;B=0;if(ac&1){U=158;break}k[Kb>>2]=27560;k[Sb>>2]=0;k[Sb+4>>2]=0;k[Sb+8>>2]=0;k[Sb+12>>2]=0;k[Tb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Kb|0,c|0);ac=B;B=0;if(ac&1){U=156;break}Yua(c);B=0;ac=Ia(40,z|0,142803,16)|0;bc=B;B=0;if(bc&1){U=171;break}B=0;bc=Xa(242,ac|0,$b|0)|0;ac=B;B=0;if(ac&1){U=171;break}B=0;Ia(40,bc|0,149177,1)|0;bc=B;B=0;if(bc&1){U=171;break}B=0;wa(510,A|0,Kb|0);bc=B;B=0;if(bc&1){U=171;break}B=0;ya(424,A|0)|0;bc=B;B=0;if(bc&1){U=172;break}Yua(A);k[z>>2]=27468;k[Jb>>2]=27488;k[Kb>>2]=27560;Yua(Sb);Ava(Kb);vva(Jb);bc=k[(k[$a>>2]|0)+($b<<2)>>2]|0;if(!bc){k[C>>2]=27524;k[Ub>>2]=27544;B=0;wa(508,Wb|0,Vb|0);ac=B;B=0;if(ac&1){U=178;break}k[Xb>>2]=0;k[Yb>>2]=-1;k[C>>2]=27468;k[Ub>>2]=27488;B=0;va(448,Vb|0);ac=B;B=0;if(ac&1){U=179;break}k[Vb>>2]=27560;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[_b>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Vb|0,c|0);ac=B;B=0;if(ac&1){U=177;break}Yua(c);B=0;Ia(40,C|0,142820,50)|0;ac=B;B=0;if(ac&1){U=186;break}B=0;wa(510,D|0,Vb|0);ac=B;B=0;if(ac&1){U=186;break}B=0;ya(424,D|0)|0;ac=B;B=0;if(ac&1){U=187;break}Yua(D);k[C>>2]=27468;k[Ub>>2]=27488;k[Vb>>2]=27560;Yua(Zb);Ava(Vb);vva(Ub)}else Ec[k[(k[bc>>2]|0)+12>>2]&1023](bc);$b=$b+1|0;if(($b|0)>=(k[a>>2]|0)){U=205;break}}switch(U|0){case 156:{$b=Rb()|0;_b=Q;Yua(c);Yua(Sb);Ava(Kb);cc=_b;dc=$b;U=159;break}case 157:{$b=Rb()|0;ec=Q;fc=$b;vva(Jb);Qb(fc|0);break}case 158:{$b=Rb()|0;cc=Q;dc=$b;U=159;break}case 171:{$b=Rb()|0;gc=Q;hc=$b;U=173;break}case 172:{$b=Rb()|0;_b=Q;Yua(A);gc=_b;hc=$b;U=173;break}case 177:{$b=Rb()|0;_b=Q;Yua(c);Yua(Zb);Ava(Vb);ic=_b;jc=$b;U=180;break}case 178:{$b=Rb()|0;kc=Q;lc=$b;vva(Ub);Qb(lc|0);break}case 179:{$b=Rb()|0;ic=Q;jc=$b;U=180;break}case 186:{$b=Rb()|0;mc=Q;nc=$b;U=188;break}case 187:{$b=Rb()|0;_b=Q;Yua(D);mc=_b;nc=$b;U=188;break}case 205:{r=b;return}}if((U|0)==159){ec=cc;fc=dc;vva(Jb);Qb(fc|0)}else if((U|0)==173){k[z>>2]=27468;k[Jb>>2]=27488;k[Kb>>2]=27560;Yua(Sb);Ava(Kb);vva(Jb);V=gc;W=hc;Qb(W|0)}else if((U|0)==180){kc=ic;lc=jc;vva(Ub);Qb(lc|0)}else if((U|0)==188){k[C>>2]=27468;k[Ub>>2]=27488;k[Vb>>2]=27560;Yua(Zb);Ava(Vb);vva(Ub);V=mc;W=nc;Qb(W|0)}}else U=168;while(0);if((U|0)==168){Cb=Rb()|0;Lb=Q;Mb=Cb}k[x>>2]=27468;k[hb>>2]=27488;k[ub>>2]=27560;Yua(Bb);Ava(ub);vva(hb);V=Lb;W=Mb;Qb(W|0)}while(0);Fb=Hb;Gb=Ib;vva(hb);Qb(Gb|0)}while(0);if((U|0)==134){ab=Rb()|0;sb=Q;tb=ab}k[t>>2]=27468;k[fb>>2]=27488;k[eb>>2]=27560;Yua(bb);Ava(eb);vva(fb);V=sb;W=tb;Qb(W|0)}while(0);ob=qb;pb=rb;vva(fb);Qb(pb|0)}while(0);if((U|0)==104){Va=Rb()|0;Za=Q;_a=Va}k[o>>2]=27468;k[ra>>2]=27488;k[Ba>>2]=27560;Yua(Sa);Ava(Ba);vva(ra);V=Za;W=_a;Qb(W|0)}while(0);Qa=Ta;Ra=Ua;vva(ra);Qb(Ra|0)}while(0);if((U|0)==101){sa=Rb()|0;Oa=Q;Pa=sa}k[m>>2]=27468;k[Aa>>2]=27488;k[za>>2]=27560;Yua(ta);Ava(za);vva(Aa);V=Oa;W=Pa;Qb(W|0)}while(0);Ka=Ma;La=Na;vva(Aa);Qb(La|0)}while(0);if((U|0)==58){ma=Rb()|0;pa=Q;qa=ma}k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(ja);Ava(P);vva(O);V=pa;W=qa;Qb(W|0)}while(0);ha=ka;ia=la;vva(O);Qb(ia|0)}else U=55;while(0);if((U|0)==55){F=Rb()|0;fa=Q;ga=F}k[f>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(E);Ava(S);vva(T);V=fa;W=ga;Qb(W|0)}while(0);ba=da;ca=ea;vva(T);Qb(ca|0)}else U=52;while(0);if((U|0)==52){J=Rb()|0;$=Q;aa=J}k[d>>2]=27468;k[K>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(K);V=$;W=aa;Qb(W|0)}while(0);X=Z;Y=_;vva(K);Qb(Y|0)}function Bla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;b=Qqa(16)|0;c=k[a+8>>2]|0;d=k[a>>2]|0;k[b>>2]=d;if((d|0)<1){k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;return b|0}e=d>>>0>1073741823?-1:d<<2;B=0;f=ya(422,e|0)|0;g=B;B=0;if(g&1){h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}g=b+4|0;k[g>>2]=f;B=0;j=ya(422,e|0)|0;l=B;B=0;if(l&1){h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}l=b+8|0;k[l>>2]=j;B=0;m=ya(422,e|0)|0;e=B;B=0;if(e&1){h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}h=b+12|0;k[h>>2]=m;k[j>>2]=k[c>>2];k[f>>2]=0;k[m>>2]=0;if((d|0)>1){k[j+4>>2]=k[c+4>>2];k[f+4>>2]=0;k[(k[h>>2]|0)+4>>2]=0;f=k[b>>2]|0;if((f|0)>2){j=2;do{d=k[g>>2]|0;k[(k[l>>2]|0)+(j<<2)>>2]=k[c+(j<<2)>>2];k[d+(j<<2)>>2]=0;k[(k[h>>2]|0)+(j<<2)>>2]=0;j=j+1|0;d=k[b>>2]|0}while((j|0)<(d|0));n=d}else n=f;if((n|0)<=0)return b|0}n=a+4|0;f=b+4|0;j=a+12|0;a=b+12|0;h=0;do{k[(k[f>>2]|0)+(h<<2)>>2]=k[(k[n>>2]|0)+(h<<2)>>2];k[(k[a>>2]|0)+(h<<2)>>2]=k[(k[j>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)<(k[b>>2]|0));return b|0}function Cla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==1;if(s){t=k[a>>2]|0;if((t|0)>0){u=a+4|0;v=0;do{k[(k[u>>2]|0)+(v<<2)>>2]=0;v=v+1|0}while((v|0)!=(t|0));w=5}else{x=a;w=33}}else w=5;a:do if((w|0)==5)switch(d|0){case 0:{t=k[b>>2]|0;i[t>>0]=58;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;v=l[a>>0]|l[a+1>>0]<<8|l[a+2>>0]<<16|l[a+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;k[b>>2]=(k[b>>2]|0)+4;y=a;z=1;break a;break}case 2:{k[c>>2]=(k[c>>2]|0)+8;y=a;z=0;break a;break}default:{if(s){x=a;w=33;break a}v=g+56|0;t=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;A=Q;C=u;vva(v);Qb(C|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){D=Rb()|0;E=Q;F=D}else{k[t>>2]=27560;D=g+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(f);Yua(D);Ava(t);E=H;F=G;break}Yua(f);B=0;G=Ia(40,g|0,143951,43)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,G|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,142871,63);J=B;B=0;do if(!(J&1)){B=0;eb(502,j|0,149525,8);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(h);M=L;N=K;break}B=0;wa(510,m|0,t|0);K=B;B=0;if(K&1){K=Rb()|0;O=Q;P=K;R=1}else{B=0;ua(163,I|0,h|0,j|0,126,m|0);K=B;B=0;if(K&1)S=1;else{B=0;eb(503,I|0,1240,229);B=0;S=0}K=Rb()|0;L=Q;Yua(m);O=L;P=K;R=S}Yua(j);Yua(h);if(R){M=O;N=P}else{T=O;U=P;break b}}else{K=Rb()|0;M=Q;N=K}while(0);zb(I|0);T=M;U=N}else w=23;while(0);if((w|0)==23){G=Rb()|0;T=Q;U=G}k[g>>2]=27468;k[v>>2]=27488;k[t>>2]=27560;Yua(D);Ava(t);vva(v);V=T;W=U;Qb(W|0)}while(0);A=E;C=F;vva(v);Qb(C|0)}}while(0);if((w|0)==33){C=(k[b>>2]|0)+4|0;k[b>>2]=C;F=l[C>>0]|l[C+1>>0]<<8|l[C+2>>0]<<16|l[C+3>>0]<<24;i[x>>0]=F;i[x+1>>0]=F>>8;i[x+2>>0]=F>>16;i[x+3>>0]=F>>24;k[b>>2]=(k[b>>2]|0)+4;y=x;z=0}x=k[y>>2]|0;F=a+8|0;if((x|0)<1){k[F>>2]=0;k[a+4>>2]=0;k[a+12>>2]=0;k[y>>2]=0;r=e;return}C=(k[F>>2]|0)==0;if(z){i[k[b>>2]>>0]=C&1;z=(k[b>>2]|0)+1|0;k[b>>2]=z;if(C)X=z;else{TEa(z|0,k[F>>2]|0,k[y>>2]<<2|0)|0;z=(k[b>>2]|0)+(k[y>>2]<<2)|0;k[b>>2]=z;X=z}z=a+12|0;E=(k[z>>2]|0)==0;i[X>>0]=E&1;X=(k[b>>2]|0)+1|0;k[b>>2]=X;if(E)Y=X;else{TEa(X|0,k[z>>2]|0,k[y>>2]<<2|0)|0;z=(k[b>>2]|0)+(k[y>>2]<<2)|0;k[b>>2]=z;Y=z}z=a+4|0;X=(k[z>>2]|0)==0;i[Y>>0]=X&1;Y=(k[b>>2]|0)+1|0;k[b>>2]=Y;if(X){r=e;return}TEa(Y|0,k[z>>2]|0,k[y>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[y>>2]<<2);r=e;return}if((d|0)==2){d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(C)Z=d;else{C=d+(k[y>>2]<<2)|0;k[c>>2]=C;Z=C}C=(k[a+12>>2]|0)==0;d=Z+1|0;k[c>>2]=d;if(C)_=d;else{C=d+(k[y>>2]<<2)|0;k[c>>2]=C;_=C}C=(k[a+4>>2]|0)==0;d=_+1|0;k[c>>2]=d;if(C){r=e;return}k[c>>2]=d+(k[y>>2]<<2);r=e;return}if(s){s=k[b>>2]|0;y=i[s>>0]|0;d=s+1|0;k[b>>2]=d;if(!(y&1)){y=Rqa(x>>>0>1073741823?-1:x<<2)|0;k[F>>2]=y;F=k[b>>2]|0;s=x<<2;TEa(y|0,F|0,s|0)|0;y=F+s|0;k[b>>2]=y;$=y}else $=d;d=i[$>>0]|0;y=$+1|0;k[b>>2]=y;if(!(d&1)){d=Rqa(x>>>0>1073741823?-1:x<<2)|0;k[a+12>>2]=d;$=k[b>>2]|0;s=x<<2;TEa(d|0,$|0,s|0)|0;d=$+s|0;k[b>>2]=d;aa=d}else aa=y;y=i[aa>>0]|0;k[b>>2]=aa+1;if(y&1){r=e;return}y=Rqa(x>>>0>1073741823?-1:x<<2)|0;k[a+4>>2]=y;a=k[b>>2]|0;aa=x<<2;TEa(y|0,a|0,aa|0)|0;k[b>>2]=a+aa;r=e;return}e=n+56|0;aa=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,aa|0);a=B;B=0;if(a&1){a=Rb()|0;ba=Q;ca=a;vva(e);Qb(ca|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,aa|0);a=B;B=0;do if(a&1){b=Rb()|0;da=Q;ea=b}else{k[aa>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,aa|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(f);Yua(b);Ava(aa);da=x;ea=y;break}Yua(f);B=0;y=Ia(40,n|0,143951,43)|0;x=B;B=0;c:do if(!(x&1)?(B=0,Xa(239,y|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,o|0,142871,63);s=B;B=0;do if(!(s&1)){B=0;eb(502,p|0,149525,8);$=B;B=0;if($&1){$=Rb()|0;F=Q;Yua(o);fa=F;ga=$;break}B=0;wa(510,q|0,aa|0);$=B;B=0;if($&1){$=Rb()|0;ha=1;ia=Q;ja=$}else{B=0;ua(163,d|0,o|0,p|0,136,q|0);$=B;B=0;if($&1)ka=1;else{B=0;eb(503,d|0,1240,229);B=0;ka=0}$=Rb()|0;F=Q;Yua(q);ha=ka;ia=F;ja=$}Yua(p);Yua(o);if(ha){fa=ia;ga=ja}else{la=ia;ma=ja;break c}}else{$=Rb()|0;fa=Q;ga=$}while(0);zb(d|0);la=fa;ma=ga}else w=56;while(0);if((w|0)==56){y=Rb()|0;la=Q;ma=y}k[n>>2]=27468;k[e>>2]=27488;k[aa>>2]=27560;Yua(b);Ava(aa);vva(e);V=la;W=ma;Qb(W|0)}while(0);ba=da;ca=ea;vva(e);Qb(ca|0)}function Dla(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;if((b|0)<=0)return;c=a+4|0;a=0;do{k[(k[c>>2]|0)+(a<<2)>>2]=0;a=a+1|0}while((a|0)<(b|0));return}function Ela(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;if((k[a>>2]|0)<=0){r=c;return}i=a+8|0;j=a+4|0;l=a+12|0;m=0;a:while(1){b:do if((k[(k[i>>2]|0)+(m<<2)>>2]|0)!=-1){n=k[(k[j>>2]|0)+(m<<2)>>2]|0;if(n){o=Hc[k[(k[n>>2]|0)+16>>2]&511](n)|0;if((o|0)==(k[(k[i>>2]|0)+(m<<2)>>2]|0))break;k[(k[j>>2]|0)+(m<<2)>>2]=0}o=k[l>>2]|0;n=o+(m<<2)|0;p=k[n>>2]|0;do if((p|0)!=-9999){q=qh(b,p)|0;s=Hc[k[(k[q>>2]|0)+16>>2]&511](q)|0;if((s|0)==(k[(k[i>>2]|0)+(m<<2)>>2]|0)){k[(k[j>>2]|0)+(m<<2)>>2]=q;break b}else{q=k[l>>2]|0;k[q+(m<<2)>>2]=-9999;t=q;break}}else{k[n>>2]=-9999;t=o}while(0);if((k[(k[j>>2]|0)+(m<<2)>>2]|0)==0?(o=rh(b,t+(m<<2)|0,k[(k[i>>2]|0)+(m<<2)>>2]|0)|0,k[(k[j>>2]|0)+(m<<2)>>2]=o,o=k[(k[j>>2]|0)+(m<<2)>>2]|0,n=Hc[k[(k[o>>2]|0)+16>>2]&511](o)|0,(n|0)!=(k[(k[i>>2]|0)+(m<<2)>>2]|0)):0){u=m;break a}}while(0);m=m+1|0;if((m|0)>=(k[a>>2]|0)){v=43;break}}if((v|0)==43){r=c;return}c=e+56|0;v=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,v|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;vva(c);Qb(x|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,v|0);a=B;B=0;do if(a&1){m=Rb()|0;y=Q;z=m}else{k[v>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;b=Q;Yua(d);Yua(m);Ava(v);y=b;z=t;break}Yua(d);B=0;t=Ia(40,e|0,142935,10)|0;b=B;B=0;if((((((!(b&1)?(b=k[(k[j>>2]|0)+(u<<2)>>2]|0,B=0,l=ya(k[(k[b>>2]|0)+16>>2]|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Xa(242,t|0,l|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,b|0,142946,4)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Xa(242,l|0,k[(k[i>>2]|0)+(u<<2)>>2]|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,b|0,142951,22)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,f|0,142871,63);b=B;B=0;do if(!(b&1)){B=0;eb(502,g|0,142974,9);t=B;B=0;if(t&1){t=Rb()|0;n=Q;Yua(f);A=n;C=t;break}B=0;wa(510,h|0,v|0);t=B;B=0;if(t&1){t=Rb()|0;D=Q;E=t;F=1}else{B=0;ua(163,l|0,f|0,g|0,193,h|0);t=B;B=0;if(t&1)G=1;else{B=0;eb(503,l|0,1240,229);B=0;G=0}t=Rb()|0;n=Q;Yua(h);D=n;E=t;F=G}Yua(g);Yua(f);if(F){A=D;C=E}else{H=D;I=E;k[e>>2]=27468;k[c>>2]=27488;k[v>>2]=27560;Yua(m);Ava(v);vva(c);Qb(I|0)}}else{t=Rb()|0;A=Q;C=t}while(0);zb(l|0);H=A;I=C;k[e>>2]=27468;k[c>>2]=27488;k[v>>2]=27560;Yua(m);Ava(v);vva(c);Qb(I|0)}b=Rb()|0;H=Q;I=b;k[e>>2]=27468;k[c>>2]=27488;k[v>>2]=27560;Yua(m);Ava(v);vva(c);Qb(I|0)}while(0);w=y;x=z;vva(c);Qb(x|0)}function Fla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;i=b+24|0;j=b+12|0;l=b;if((k[a>>2]|0)==1){m=k[a+4>>2]|0;if(m){r=b;return k[m>>2]|0}m=h+56|0;b=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(m);Qb(p|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[b>>2]=27560;q=h+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(b);s=v;t=u;break}Yua(c);B=0;u=Ia(40,h|0,143058,59)|0;v=B;B=0;a:do if(!(v&1)?(B=0,Xa(239,u|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,i|0,142871,63);x=B;B=0;do if(!(x&1)){B=0;eb(502,j|0,143049,8);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(i);A=y;C=z;break}B=0;wa(510,l|0,b|0);z=B;B=0;if(z&1){z=Rb()|0;D=1;E=Q;F=z}else{B=0;ua(163,w|0,i|0,j|0,204,l|0);z=B;B=0;if(z&1)G=1;else{B=0;eb(503,w|0,1240,229);B=0;G=0}z=Rb()|0;y=Q;Yua(l);D=G;E=y;F=z}Yua(j);Yua(i);if(D){A=F;C=E}else{H=E;I=F;break a}}else{z=Rb()|0;A=z;C=Q}while(0);zb(w|0);H=C;I=A}else J=44;while(0);if((J|0)==44){u=Rb()|0;H=Q;I=u}k[h>>2]=27468;k[m>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(m);K=H;L=I;Qb(L|0)}while(0);o=s;p=t;vva(m);Qb(p|0)}p=d+56|0;m=d+4|0;k[d>>2]=27524;k[p>>2]=27544;B=0;wa(508,d+56|0,m|0);t=B;B=0;if(t&1){t=Rb()|0;M=Q;N=t;vva(p);Qb(N|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[p>>2]=27488;B=0;va(448,m|0);t=B;B=0;do if(t&1){s=Rb()|0;O=Q;P=s}else{k[m>>2]=27560;s=d+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;I=Q;Yua(c);Yua(s);Ava(m);O=I;P=o;break}Yua(c);B=0;o=Ia(40,d|0,142984,55)|0;I=B;B=0;b:do if((((!(I&1)?(B=0,H=Xa(242,o|0,k[a>>2]|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,H|0,143040,8)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,b|0,149177,1)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,e|0,142871,63);b=B;B=0;do if(!(b&1)){B=0;eb(502,f|0,143049,8);h=B;B=0;if(h&1){h=Rb()|0;A=Q;Yua(e);R=h;S=A;break}B=0;wa(510,g|0,m|0);A=B;B=0;if(A&1){A=Rb()|0;T=Q;U=A;V=1}else{B=0;ua(163,H|0,e|0,f|0,201,g|0);A=B;B=0;if(A&1)W=1;else{B=0;eb(503,H|0,1240,229);B=0;W=0}A=Rb()|0;h=Q;Yua(g);T=h;U=A;V=W}Yua(f);Yua(e);if(V){R=U;S=T}else{X=U;Y=T;break b}}else{A=Rb()|0;R=A;S=Q}while(0);zb(H|0);X=R;Y=S}else J=20;while(0);if((J|0)==20){o=Rb()|0;X=o;Y=Q}k[d>>2]=27468;k[p>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(p);K=Y;L=X;Qb(L|0)}while(0);M=O;N=P;vva(p);Qb(N|0);return 0}function Gla(a){a=a|0;return k[a+4>>2]|0}function Hla(a){a=a|0;return k[a>>2]|0}function Ila(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=Qqa(16)|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;p=k[a>>2]|0;if(!p){k[o>>2]=0;r=d;return o|0}if((p|0)<(c|0)){p=f+56|0;q=f+4|0;k[f>>2]=27524;k[p>>2]=27544;B=0;wa(508,f+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(p);Qb(u|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[p>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=f+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);Yua(v);Ava(q);w=z;x=y;break}Yua(e);B=0;y=Ia(40,f|0,143118,23)|0;z=B;B=0;a:do if(((((!(z&1)?(B=0,A=Xa(242,y|0,c|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,A|0,143142,24)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Xa(242,C|0,k[a>>2]|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,A|0,143040,8)|0,A=B,B=0,!(A&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,g|0,142871,63);A=B;B=0;do if(!(A&1)){B=0;eb(502,h|0,143167,5);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(g);F=D;G=E;break}B=0;wa(510,i|0,q|0);E=B;B=0;if(E&1){E=Rb()|0;H=Q;I=E;J=1}else{B=0;ua(163,C|0,g|0,h|0,237,i|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,C|0,1240,229);B=0;K=0}E=Rb()|0;D=Q;Yua(i);H=D;I=E;J=K}Yua(h);Yua(g);if(J){F=I;G=H}else{L=I;M=H;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(C|0);L=F;M=G}else N=23;while(0);if((N|0)==23){y=Rb()|0;L=y;M=Q}k[f>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(p);O=M;P=L;Qb(P|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}else{k[o>>2]=c;if((c|0)>=1){u=c>>>0>1073741823?-1:c<<2;p=Rqa(u)|0;k[o+4>>2]=p;x=Rqa(u)|0;k[o+8>>2]=x;w=Rqa(u)|0;k[o+12>>2]=w;u=a+4|0;t=a+8|0;L=a+12|0;a=0;do{M=b+(a<<2)|0;q=k[M>>2]|0;k[p+(a<<2)>>2]=k[(k[u>>2]|0)+(q<<2)>>2];k[x+(a<<2)>>2]=k[(k[t>>2]|0)+(q<<2)>>2];k[w+(a<<2)>>2]=k[(k[L>>2]|0)+(k[M>>2]<<2)>>2];a=a+1|0}while((a|0)<(c|0));r=d;return o|0}o=j+56|0;d=j+4|0;k[j>>2]=27524;k[o>>2]=27544;B=0;wa(508,j+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;R=Q;S=c;vva(o);Qb(S|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[o>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){a=Rb()|0;T=Q;U=a}else{k[d>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);L=B;B=0;if(L&1){L=Rb()|0;w=Q;Yua(e);Yua(a);Ava(d);T=w;U=L;break}Yua(e);B=0;L=Ia(40,j|0,143173,43)|0;w=B;B=0;b:do if(!(w&1)?(B=0,Xa(239,L|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,l|0,142871,63);x=B;B=0;do if(!(x&1)){B=0;eb(502,m|0,143167,5);u=B;B=0;if(u&1){u=Rb()|0;p=Q;Yua(l);V=u;W=p;break}B=0;wa(510,n|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;X=1;Y=Q;Z=p}else{B=0;ua(163,t|0,l|0,m|0,241,n|0);p=B;B=0;if(p&1)_=1;else{B=0;eb(503,t|0,1240,229);B=0;_=0}p=Rb()|0;u=Q;Yua(n);X=_;Y=u;Z=p}Yua(m);Yua(l);if(X){V=Z;W=Y}else{$=Y;aa=Z;break b}}else{p=Rb()|0;V=p;W=Q}while(0);zb(t|0);$=W;aa=V}else N=47;while(0);if((N|0)==47){L=Rb()|0;$=Q;aa=L}k[j>>2]=27468;k[o>>2]=27488;k[d>>2]=27560;Yua(a);Ava(d);vva(o);O=$;P=aa;Qb(P|0)}while(0);R=T;S=U;vva(o);Qb(S|0)}return 0}function Jla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;d=r;r=r+16|0;e=d;k[a>>2]=40876;k[a+4>>2]=41040;k[a+8>>2]=b;k[e>>2]=c+1;B=0;c=ya(423,16)|0;b=B;B=0;if(b&1){b=Rb()|0;f=Q;g=b;Qb(g|0)}B=0;eb(509,c|0,e|0,1);e=B;B=0;if(!(e&1)){k[a+12>>2]=c;k[a+16>>2]=0;r=d;return}d=Rb()|0;a=Q;Sqa(c);f=a;g=d;Qb(g|0)}function Kla(a){a=a|0;var b=0;k[a>>2]=40876;k[a+4>>2]=41040;b=k[a+12>>2]|0;if(!b)return;yla(b);Sqa(b);return}function Lla(a){a=a|0;var b=0;k[a>>2]=40876;k[a+4>>2]=41040;b=k[a+12>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function Mla(a){a=a|0;var b=0,c=0;b=Qqa(20)|0;k[b>>2]=40876;k[b+4>>2]=41040;k[b+8>>2]=k[a+8>>2];c=a+12|0;a=Bla(k[c>>2]|0)|0;k[b+12>>2]=a;a=Fla(k[c>>2]|0)|0;k[b+16>>2]=a;return b|0}function Nla(a,b){a=a|0;b=b|0;var c=0,d=0;c=Qqa(20)|0;k[c>>2]=40876;k[c+4>>2]=41040;k[c+8>>2]=k[a+8>>2];d=Bla(k[a+12>>2]|0)|0;k[c+12>>2]=d;k[c+16>>2]=b;return c|0}function Ola(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,143227,10)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,143238,8)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;Ia(40,h|0,143247,12)|0;S=B;B=0;do if(!(S&1)){B=0;wa(510,i|0,I|0);T=B;B=0;if(T&1){U=43;break}B=0;ya(424,i|0)|0;T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(i);W=V;X=T;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);zla(k[a+12>>2]|0);r=b;return}}else U=43;while(0);if((U|0)==43){S=Rb()|0;W=Q;X=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);Y=W;Z=X;Qb(Z|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else U=40;while(0);if((U|0)==40){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Y=J;Z=K;Qb(Z|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else U=37;while(0);if((U|0)==37){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Y=w;Z=x;Qb(Z|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function Pla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,143227,10)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,143238,8)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;Ia(40,h|0,143247,12)|0;S=B;B=0;do if(!(S&1)){B=0;wa(510,i|0,I|0);T=B;B=0;if(T&1){U=43;break}B=0;ya(424,i|0)|0;T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(i);W=V;X=T;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);zla(k[a+12>>2]|0);r=b;return}}else U=43;while(0);if((U|0)==43){S=Rb()|0;W=Q;X=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);Y=W;Z=X;Qb(Z|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else U=40;while(0);if((U|0)==40){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Y=J;Z=K;Qb(Z|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else U=37;while(0);if((U|0)==37){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Y=w;Z=x;Qb(Z|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function Qla(a){a=a|0;return k[a+8>>2]|0}function Rla(a){a=a|0;return 585}function Sla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 1:{n=Qqa(16)|0;B=0;va(489,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Sqa(n);q=o;s=p;Qb(q|0)}else{k[a+12>>2]=n;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;t=a+12|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+16|0;k[x>>2]=w;r=e;return}break}case 0:{o=k[b>>2]|0;i[o>>0]=73;i[o+1>>0]=2;i[o+2>>0]=0;i[o+3>>0]=0;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;t=a+12|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+16|0;k[x>>2]=w;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+8;t=a+12|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+16|0;k[x>>2]=w;r=e;return}default:{e=g+56|0;w=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(e);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){a=Rb()|0;A=Q;C=a}else{k[w>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;t=Q;Yua(f);Yua(a);Ava(w);A=t;C=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;t=B;B=0;a:do if(!(t&1)?(B=0,Xa(239,v|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,143260,77);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);b=B;B=0;if(b&1){b=Rb()|0;u=Q;Yua(h);D=u;E=b;break}B=0;wa(510,m|0,w|0);b=B;B=0;if(b&1){b=Rb()|0;F=b;G=Q;H=1}else{B=0;ua(163,d|0,h|0,j|0,118,m|0);b=B;B=0;if(b&1)I=1;else{B=0;eb(503,d|0,1240,229);B=0;I=0}b=Rb()|0;u=Q;Yua(m);F=b;G=u;H=I}Yua(j);Yua(h);if(H){D=G;E=F}else{J=G;K=F;break a}}else{u=Rb()|0;D=Q;E=u}while(0);zb(d|0);J=D;K=E}else L=19;while(0);if((L|0)==19){v=Rb()|0;J=Q;K=v}k[g>>2]=27468;k[e>>2]=27488;k[w>>2]=27560;Yua(a);Ava(w);vva(e);q=K;s=J;Qb(q|0)}while(0);y=A;z=C;vva(e);Qb(z|0)}}}function Tla(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;Ela(k[c>>2]|0,b);b=Fla(k[c>>2]|0)|0;k[a+16>>2]=b;return}function Ula(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143338,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,140,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Vla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143343,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,144,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Wla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143351,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,148,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Xla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143356,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,153,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Yla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143364,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,157,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function Zla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143369,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,161,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function _la(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143374,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,166,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function $la(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143382,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,171,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function ama(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,143260,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143391,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,175,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function bma(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,143260,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143404,14);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,224,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function cma(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,143260,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143419,14);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,228,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function dma(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,143260,77);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143434,15);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,232,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ema(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143450,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,236,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function fma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143473,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,240,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function gma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143497,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,244,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function hma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143529,33);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,248,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ima(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function jma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function kma(a,b,c){a=a|0;b=+b;c=c|0;return}function lma(a,b,c){a=a|0;b=+b;c=c|0;return}function mma(a,b,c){a=a|0;b=b|0;c=c|0;return}function nma(a,b,c){a=a|0;b=b|0;c=c|0;return}function oma(a,b,c){a=a|0;b=b|0;c=c|0;return}function pma(a,b,c){a=a|0;b=b|0;c=c|0;return}function qma(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0;i=r;r=r+128|0;j=i+112|0;l=i+104|0;m=i+96|0;n=i+72|0;o=i+48|0;q=i+24|0;s=i+16|0;t=i+8|0;u=i;nd[k[(k[f>>2]|0)+48>>2]&1023](f,j,e);rd[k[(k[f>>2]|0)+60>>2]&511](f,n,d,e);nd[k[(k[g>>2]|0)+48>>2]&1023](g,l,e);rd[k[(k[g>>2]|0)+60>>2]&511](g,o,d,e);if((c|0)==3){nd[k[(k[h>>2]|0)+48>>2]&1023](h,m,e);rd[k[(k[h>>2]|0)+60>>2]&511](h,q,d,e);v=q}else{p[m>>3]=0.0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[q+16>>2]=0;k[q+20>>2]=0;v=q}q=a+16|0;a=oC(k[(k[q>>2]|0)+16>>2]|0,220)|0;d=oC(k[(k[q>>2]|0)+16>>2]|0,222)|0;h=oC(k[(k[q>>2]|0)+16>>2]|0,218)|0;nd[k[(k[a>>2]|0)+48>>2]&1023](a,t,e);nd[k[(k[d>>2]|0)+48>>2]&1023](d,u,e);nd[k[(k[h>>2]|0)+48>>2]&1023](h,s,e);w=+rma(0,+p[s>>3],+p[t>>3],+p[u>>3],+p[j>>3],+p[l>>3],+p[m>>3],n,o,v);p[b>>3]=w;r=i;return}function rma(a,b,c,d,e,f,g,h,i,j){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;a=r;r=r+48|0;k=a+32|0;l=a+24|0;m=a;n=+aa(+(e*e+f*f+g*g));if(n<1.0e-12){o=0.0;q=0.0;s=0.0}else{t=1.0/(+aa(+n)*2.0);u=e*2.0;v=f*2.0;w=g*2.0;o=t*(u*+p[h+16>>3]+v*+p[i+16>>3]+w*+p[j+16>>3]);q=t*(u*+p[h+8>>3]+v*+p[i+8>>3]+w*+p[j+8>>3]);s=t*(u*+p[h>>3]+v*+p[i>>3]+w*+p[j>>3])}p[m>>3]=s;p[m+8>>3]=q;p[m+16>>3]=o;_Y(k,l,e,f,g,n,h,i,j,m);n=+aZ(+p[k>>3],+p[l>>3]);g=+p[k>>3];f=1.0/(+ba(+(g*(g*((n*((d-c)*n)+c)*b))),.3333333333333333)*2.0);r=a;return +f}function sma(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[a>>2]|0)+84>>2]&1023](a,b,c);return}function tma(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0;h=r;r=r+112|0;i=h+104|0;j=h+96|0;l=h+72|0;m=h+48|0;n=h+24|0;o=h+16|0;q=h+8|0;s=h;nd[k[(k[f>>2]|0)+48>>2]&1023](f,i,e);rd[k[(k[f>>2]|0)+60>>2]&511](f,l,d,e);if((c|0)==3){nd[k[(k[g>>2]|0)+48>>2]&1023](g,j,e);rd[k[(k[g>>2]|0)+60>>2]&511](g,m,d,e);t=m;u=+p[m+8>>3]}else{p[l+16>>3]=0.0;p[j>>3]=0.0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;t=m;u=0.0};k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;p[n+16>>3]=-+p[l>>3]-u;m=a+16|0;a=oC(k[(k[m>>2]|0)+16>>2]|0,220)|0;d=oC(k[(k[m>>2]|0)+16>>2]|0,222)|0;g=oC(k[(k[m>>2]|0)+16>>2]|0,218)|0;nd[k[(k[a>>2]|0)+48>>2]&1023](a,q,e);nd[k[(k[d>>2]|0)+48>>2]&1023](d,s,e);nd[k[(k[g>>2]|0)+48>>2]&1023](g,o,e);u=+rma(0,+p[o>>3],+p[q>>3],+p[s>>3],+p[i>>3],+p[j>>3],0.0,l,t,n);p[b>>3]=u;r=h;return}function uma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143563,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,352,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function vma(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,143594,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,355,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function wma(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0;h=r;r=r+112|0;i=h+104|0;j=h+96|0;l=h+72|0;m=h+48|0;n=h+24|0;o=h+16|0;q=h+8|0;s=h;nd[k[(k[f>>2]|0)+48>>2]&1023](f,i,e);rd[k[(k[f>>2]|0)+60>>2]&511](f,l,d,e);if((c|0)==2){nd[k[(k[g>>2]|0)+48>>2]&1023](g,j,e);rd[k[(k[g>>2]|0)+60>>2]&511](g,m,d,e);t=m;u=+p[m+8>>3]}else{d=l+8|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;p[j>>3]=0.0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[m+16>>2]=0;k[m+20>>2]=0;t=m;u=0.0};k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;p[n+16>>3]=-+p[l>>3]-u;m=a+16|0;a=oC(k[(k[m>>2]|0)+16>>2]|0,221)|0;d=oC(k[(k[m>>2]|0)+16>>2]|0,223)|0;g=oC(k[(k[m>>2]|0)+16>>2]|0,219)|0;nd[k[(k[a>>2]|0)+48>>2]&1023](a,q,e);nd[k[(k[d>>2]|0)+48>>2]&1023](d,s,e);nd[k[(k[g>>2]|0)+48>>2]&1023](g,o,e);u=+rma(0,+p[o>>3],+p[q>>3],+p[s>>3],+p[i>>3],+p[j>>3],0.0,l,t,n);p[b>>3]=u;r=h;return}function xma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143260,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143608,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,394,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function yma(a){a=a|0;k[a+16>>2]=0;Dla(k[a+12>>2]|0);return}function zma(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143656,77);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Ama(a,b,c){a=a|0;b=b|0;c=c|0;zma(a+-4|0,b,c)}function Bma(a,b){a=a|0;b=b|0;var c=0,d=0;if((th(a)|0)>0)c=0;else return;do{d=qh(a,c)|0;if(ed[k[(k[d>>2]|0)+40>>2]&511](d,b)|0)Ec[k[(k[d>>2]|0)+32>>2]&1023](d);c=c+1|0}while((c|0)<(th(a)|0));return}function Cma(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+4|0;d=b;e=th(a)|0;k[c>>2]=e;nZ(c,d,1,4,4,0,uY()|0)|0;uY()|0;r=b;return k[d>>2]|0}function Dma(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+16|0;g=f+8|0;h=f+4|0;i=f;k[a>>2]=41068;k[a+4>>2]=41188;k[a+8>>2]=b;k[a+12>>2]=e;k[g>>2]=c+1+(k[d+100>>2]|0);k[i>>2]=k[(k[d+92>>2]|0)+(c<<2)>>2];k[h>>2]=(k[d+56>>2]|0)+1;B=0;d=ya(423,16)|0;c=B;B=0;if(!(c&1)){B=0;eb(509,d|0,g|0,1);g=B;B=0;if(g&1){g=Rb()|0;c=Q;Sqa(d);j=c;l=g;Qb(l|0)}k[a+16>>2]=d;B=0;d=ya(423,16)|0;g=B;B=0;if(!(g&1)){B=0;eb(509,d|0,i|0,1);i=B;B=0;if(i&1){i=Rb()|0;g=Q;Sqa(d);j=g;l=i;Qb(l|0)}k[a+20>>2]=d;B=0;d=ya(423,16)|0;i=B;B=0;if(!(i&1)){B=0;eb(509,d|0,h|0,1);h=B;B=0;if(!(h&1)){k[a+24>>2]=d;h=a+28|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;r=f;return}f=Rb()|0;h=Q;Sqa(d);j=h;l=f;Qb(l|0)}}}f=Rb()|0;j=Q;l=f;Qb(l|0)}function Ema(a){a=a|0;var b=0;k[a>>2]=41068;k[a+4>>2]=41188;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b)return;yla(b);Sqa(b);return}function Fma(a){a=a|0;var b=0;k[a>>2]=41068;k[a+4>>2]=41188;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function Gma(a){a=a|0;var b=0,c=0,d=0,e=0;b=Qqa(44)|0;k[b>>2]=41068;k[b+4>>2]=41188;c=b+16|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+40>>2]=k[a+40>>2];d=Bla(k[a+16>>2]|0)|0;k[c>>2]=d;c=Bla(k[a+24>>2]|0)|0;k[b+24>>2]=c;e=Bla(k[a+20>>2]|0)|0;k[b+20>>2]=e;a=Fla(d)|0;k[b+28>>2]=a;a=Fla(c)|0;k[b+36>>2]=a;a=Fla(e)|0;k[b+32>>2]=a;return b|0}function Hma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;a:do switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=80;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+12;break}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[p>>0]=n;i[p+1>>0]=n>>8;i[p+2>>0]=n>>16;i[p+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0)}k[a+16>>2]=o;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0)}k[a+20>>2]=o;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(!(p&1)){k[a+24>>2]=o;break a}p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0);break}default:{p=g+56|0;n=g+4|0;k[g>>2]=27524;k[p>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;u=o;vva(p);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[p>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){v=Rb()|0;w=Q;x=v}else{k[n>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(f);Yua(v);Ava(n);w=z;x=y;break}Yua(f);B=0;y=Ia(40,g|0,143951,43)|0;z=B;B=0;b:do if(!(z&1)?(B=0,Xa(239,y|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,h|0,143742,71);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,149525,8);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(h);F=E;G=D;break}B=0;wa(510,m|0,n|0);D=B;B=0;if(D&1){D=Rb()|0;H=D;I=Q;J=1}else{B=0;ua(163,A|0,h|0,j|0,104,m|0);D=B;B=0;if(D&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}D=Rb()|0;E=Q;Yua(m);H=D;I=E;J=K}Yua(j);Yua(h);if(J){F=I;G=H}else{L=I;M=H;break b}}else{E=Rb()|0;F=Q;G=E}while(0);zb(A|0);L=F;M=G}else N=17;while(0);if((N|0)==17){y=Rb()|0;L=Q;M=y}k[g>>2]=27468;k[p>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(p);q=L;s=M;Qb(s|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}}while(0);u=a+16|0;Cla(k[u>>2]|0,b,c,d);x=a+20|0;Cla(k[x>>2]|0,b,c,d);w=a+24|0;Cla(k[w>>2]|0,b,c,d);d=Fla(k[u>>2]|0)|0;k[a+28>>2]=d;d=Fla(k[w>>2]|0)|0;k[a+36>>2]=d;d=Fla(k[x>>2]|0)|0;k[a+32>>2]=d;r=e;return}function Ima(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;b=d+56|0;m=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(b);Qb(p|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;Ia(40,d|0,143814,8)|0;u=B;B=0;do if(!(u&1)?(B=0,wa(510,e|0,m|0),v=B,B=0,!(v&1)):0){B=0;ya(424,e|0)|0;v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(e);x=w;y=v;break}Yua(e);k[d>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(b);v=f+56|0;w=f+4|0;k[f>>2]=27524;k[v>>2]=27544;B=0;wa(508,f+56|0,w|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(v);Qb(C|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[w>>2]=27560;D=f+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(w);E=H;F=G;break}Yua(c);B=0;G=Ia(40,f|0,144086,7)|0;H=B;B=0;do if(((!(H&1)?(B=0,I=Xa(242,G|0,k[a+8>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,Ia(40,I|0,149177,1)|0,I=B,B=0,!(I&1)):0)?(B=0,wa(510,g|0,w|0),I=B,B=0,!(I&1)):0){B=0;ya(424,g|0)|0;I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(g);K=J;L=I;break}Yua(g);k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(v);I=h+56|0;J=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,J|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;O=M;vva(I);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);M=B;B=0;do if(M&1){P=Rb()|0;R=Q;S=P}else{k[J>>2]=27560;P=h+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(c);Yua(P);Ava(J);R=U;S=T;break}Yua(c);B=0;T=Ia(40,h|0,144094,18)|0;U=B;B=0;do if(U&1)V=57;else{B=0;W=ya(427,k[a+12>>2]|0)|0;X=B;B=0;if(X&1){V=57;break}X=Lta(W)|0;B=0;Y=Ia(40,T|0,W|0,X|0)|0;X=B;B=0;if(X&1){V=57;break}B=0;Ia(40,Y|0,149177,1)|0;Y=B;B=0;if(Y&1){V=57;break}B=0;wa(510,i|0,J|0);Y=B;B=0;if(Y&1){V=57;break}B=0;ya(424,i|0)|0;Y=B;B=0;if(Y&1){Y=Rb()|0;X=Q;Yua(i);Z=X;_=Y;break}Yua(i);k[h>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(P);Ava(J);vva(I);Ala(k[a+16>>2]|0);Ala(k[a+20>>2]|0);Ala(k[a+24>>2]|0);Y=j+56|0;X=j+4|0;k[j>>2]=27524;k[Y>>2]=27544;B=0;wa(508,j+56|0,X|0);W=B;B=0;if(W&1){W=Rb()|0;$=Q;aa=W;vva(Y);Qb(aa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Y>>2]=27488;B=0;va(448,X|0);W=B;B=0;do if(W&1){ba=Rb()|0;ca=Q;da=ba}else{k[X>>2]=27560;ba=j+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,X|0,c|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(c);Yua(ba);Ava(X);ca=fa;da=ea;break}Yua(c);B=0;Ia(40,j|0,144113,14)|0;ea=B;B=0;do if(!(ea&1)){B=0;wa(510,l|0,X|0);fa=B;B=0;if(fa&1){V=60;break}B=0;ya(424,l|0)|0;fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(l);ha=ga;ia=fa;break}else{Yua(l);k[j>>2]=27468;k[Y>>2]=27488;k[X>>2]=27560;Yua(ba);Ava(X);vva(Y);$N(k[a+40>>2]|0)}}else V=60;while(0);if((V|0)==60){ea=Rb()|0;ha=Q;ia=ea}k[j>>2]=27468;k[Y>>2]=27488;k[X>>2]=27560;Yua(ba);Ava(X);vva(Y);ja=ha;ka=ia;Qb(ka|0)}while(0);$=ca;aa=da;vva(Y);Qb(aa|0)}while(0);if((V|0)==57){T=Rb()|0;Z=Q;_=T}k[h>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(P);Ava(J);vva(I);ja=Z;ka=_;Qb(ka|0)}while(0);N=R;O=S;vva(I);Qb(O|0)}else V=54;while(0);if((V|0)==54){G=Rb()|0;K=Q;L=G}k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(v);ja=K;ka=L;Qb(ka|0)}while(0);A=E;C=F;vva(v);Qb(C|0)}else V=51;while(0);if((V|0)==51){u=Rb()|0;x=Q;y=u}k[d>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(b);ja=x;ka=y;Qb(ka|0)}while(0);o=s;p=t;vva(b);Qb(p|0)}function Jma(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function Kma(a){a=a|0;return k[a+8>>2]|0}function Lma(a){a=a|0;return 592}function Mma(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;e=a+16|0;Ela(k[e>>2]|0,d);d=a+20|0;Ela(k[d>>2]|0,b);b=a+24|0;Ela(k[b>>2]|0,f);f=Fla(k[e>>2]|0)|0;k[a+28>>2]=f;f=Fla(k[d>>2]|0)|0;k[a+32>>2]=f;f=Fla(k[b>>2]|0)|0;k[a+36>>2]=f;k[a+40>>2]=g;return}function Nma(a,b,c){a=a|0;b=b|0;c=c|0;return}function Oma(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c;e=c+188|0;f=c+40|0;g=c+176|0;h=c+24|0;i=c+12|0;j=a+40|0;cO(k[j>>2]|0,e,477);if((k[e>>2]|0)==507){e=a+28|0;if(fo(k[e>>2]|0)|0){r=c;return}l=Qqa(24)|0;B=0;ua(166,l|0,e|0,1,k[j>>2]|0,534);j=B;B=0;if(j&1){j=Rb()|0;Sqa(l);Qb(j|0)}j=k[a+32>>2]|0;rd[k[(k[j>>2]|0)+144>>2]&511](j,d,k[e>>2]|0,171);p[k[l+4>>2]>>3]=+p[d>>3];TN(l,b);SN(l);Sqa(l);r=c;return}c=f+56|0;l=f+4|0;k[f>>2]=27524;k[c>>2]=27544;B=0;wa(508,f+56|0,l|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(c);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[c>>2]=27488;B=0;va(448,l|0);b=B;B=0;do if(b&1){e=Rb()|0;o=Q;q=e}else{k[l>>2]=27560;e=f+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Yua(d);Yua(e);Ava(l);o=a;q=j;break}Yua(d);B=0;j=Ia(40,f|0,143823,32)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,g|0,143742,71);a=B;B=0;do if(!(a&1)){B=0;eb(502,h|0,144203,13);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(g);u=t;v=s;break}B=0;wa(510,i|0,l|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,j|0,g|0,h|0,185,i|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,j|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(i);w=t;x=s;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(e);Ava(l);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(j|0);A=u;C=v;k[f>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(e);Ava(l);vva(c);Qb(C|0)}a=Rb()|0;A=Q;C=a;k[f>>2]=27468;k[c>>2]=27488;k[l>>2]=27560;Yua(e);Ava(l);vva(c);Qb(C|0)}while(0);m=o;n=q;vva(c);Qb(n|0)}function Pma(a,b){a=a|0;b=b|0;var c=0;c=Rn(k[a+28>>2]|0)|0;k[b>>2]=c;return}function Qma(a,b){a=a|0;b=b|0;var c=0;c=Qn(k[a+28>>2]|0)|0;k[b>>2]=c;return}function Rma(a){a=a|0;return 1}function Sma(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function Tma(a){a=a|0;return 1}function Uma(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}function Vma(a,b,c){a=a|0;b=b|0;c=+c;return}function Wma(a){a=a|0;var b=0;b=a+28|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;Dla(k[a+16>>2]|0);Dla(k[a+20>>2]|0);Dla(k[a+24>>2]|0);return}function Xma(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function Yma(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;g=r;r=r+192|0;j=g+176|0;l=g+40|0;m=g+24|0;n=g+12|0;o=g;p=a+28|0;a=e+(Rn(k[p>>2]|0)|0)|0;if(i[a>>0]|0){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}a=e+(Rn(k[p>>2]|0)|0)|0;i[a>>0]=1;a=0;while(1){e=f+(a<<2)|0;if((k[e>>2]|0)>-1)a=a+1|0;else{u=e;break}}a=Rn(k[p>>2]|0)|0;k[u>>2]=a;switch(h|0){case 937:{if(!(k[d+28>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}h=(fo(k[p>>2]|0)|0)==0;q=h;s=h&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}case 943:{if(!(k[d+24>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}h=(fo(k[p>>2]|0)|0)==0;q=h;s=h&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}case 966:{if(!(k[d+32>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}d=(fo(k[p>>2]|0)|0)==0;q=d;s=d&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}default:{g=l+56|0;s=l+4|0;k[l>>2]=27524;k[g>>2]=27544;B=0;wa(508,l+56|0,s|0);c=B;B=0;if(c&1){c=Rb()|0;v=Q;w=c;vva(g);Qb(w|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[g>>2]=27488;B=0;va(448,s|0);c=B;B=0;do if(c&1){t=Rb()|0;x=Q;y=t}else{k[s>>2]=27560;t=l+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[l+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,s|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;q=Q;Yua(j);Yua(t);Ava(s);x=q;y=b;break}Yua(j);B=0;b=Ia(40,l|0,145010,13)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,m|0,143742,71);q=B;B=0;do if(!(q&1)){B=0;eb(502,n|0,144217,23);d=B;B=0;if(d&1){d=Rb()|0;p=Q;Yua(m);z=p;A=d;break}B=0;wa(510,o|0,s|0);d=B;B=0;if(d&1){d=Rb()|0;C=Q;D=d;E=1}else{B=0;ua(163,b|0,m|0,n|0,296,o|0);d=B;B=0;if(d&1)F=1;else{B=0;eb(503,b|0,1240,229);B=0;F=0}d=Rb()|0;p=Q;Yua(o);C=p;D=d;E=F}Yua(n);Yua(m);if(E){z=C;A=D}else{G=C;H=D;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}}else{d=Rb()|0;z=Q;A=d}while(0);zb(b|0);G=z;H=A;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}q=Rb()|0;G=Q;H=q;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}while(0);v=x;w=y;vva(g);Qb(w|0)}}}function Zma(a,b,c){a=a|0;b=+b;c=c|0;return}function _ma(a,b,c){a=a|0;b=+b;c=c|0;return}function $ma(a,b,c){a=a|0;b=b|0;c=c|0;return}function ana(a,b,c){a=a|0;b=b|0;c=c|0;return}function bna(a,b,c){a=a|0;b=b|0;c=c|0;return}function cna(a,b,c){a=a|0;b=b|0;c=c|0;return}function dna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function ena(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function fna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143856,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function gna(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,144350,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,143856,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,144370,27);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,75,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,143856,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,62,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ina(a,b,c){a=a|0;b=b|0;c=c|0;hna(a+-4|0,b,c)}function jna(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+32|0;h=g+16|0;i=g+8|0;j=g;k[a>>2]=41216;k[a+4>>2]=41336;l=c*3|0;c=k[e+(l<<2)>>2]|0;k[i>>2]=c;m=k[e+(l+1<<2)>>2]|0;k[i+4>>2]=m;n=k[d+100>>2]|0;k[j>>2]=c+n;k[j+4>>2]=m+n;k[h>>2]=k[e+(l+2<<2)>>2];k[a+8>>2]=b;k[a+12>>2]=f;B=0;f=ya(423,16)|0;b=B;B=0;if(!(b&1)){B=0;eb(509,f|0,j|0,2);j=B;B=0;if(j&1){j=Rb()|0;b=Q;Sqa(f);o=b;p=j;Qb(p|0)}k[a+20>>2]=f;B=0;f=ya(423,16)|0;j=B;B=0;if(!(j&1)){B=0;eb(509,f|0,i|0,2);i=B;B=0;if(i&1){i=Rb()|0;j=Q;Sqa(f);o=j;p=i;Qb(p|0)}k[a+24>>2]=f;B=0;f=ya(423,16)|0;i=B;B=0;if(!(i&1)){B=0;eb(509,f|0,h|0,1);h=B;B=0;if(!(h&1)){k[a+16>>2]=f;k[a+40>>2]=0;k[a+28>>2]=0;k[a+36>>2]=0;r=g;return}g=Rb()|0;a=Q;Sqa(f);o=a;p=g;Qb(p|0)}}}g=Rb()|0;o=Q;p=g;Qb(p|0)}function kna(a){a=a|0;var b=0;k[a>>2]=41216;k[a+4>>2]=41336;k[a+40>>2]=0;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b)return;yla(b);Sqa(b);return}function lna(a){a=a|0;var b=0;k[a>>2]=41216;k[a+4>>2]=41336;k[a+40>>2]=0;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function mna(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(44)|0;k[b>>2]=41216;k[b+4>>2]=41336;c=b+16|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+40>>2]=k[a+40>>2];d=Bla(k[a+20>>2]|0)|0;k[b+20>>2]=d;e=Bla(k[a+24>>2]|0)|0;k[b+24>>2]=e;f=Bla(k[a+16>>2]|0)|0;k[c>>2]=f;c=Gla(d)|0;k[b+36>>2]=c;c=Gla(e)|0;k[b+32>>2]=c;c=Fla(f)|0;k[b+28>>2]=c;return b|0}function nna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;a:do switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=78;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+12;break}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[p>>0]=n;i[p+1>>0]=n>>8;i[p+2>>0]=n>>16;i[p+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0)}k[a+20>>2]=o;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0)}k[a+24>>2]=o;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(!(p&1)){k[a+16>>2]=o;break a}p=Rb()|0;n=Q;Sqa(o);q=n;s=p;Qb(s|0);break}default:{p=g+56|0;n=g+4|0;k[g>>2]=27524;k[p>>2]=27544;B=0;wa(508,g+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;t=Q;u=o;vva(p);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[p>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){v=Rb()|0;w=Q;x=v}else{k[n>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(f);Yua(v);Ava(n);w=z;x=y;break}Yua(f);B=0;y=Ia(40,g|0,143951,43)|0;z=B;B=0;b:do if(!(z&1)?(B=0,Xa(239,y|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,h|0,143995,76);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,149525,8);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(h);F=E;G=D;break}B=0;wa(510,m|0,n|0);D=B;B=0;if(D&1){D=Rb()|0;H=D;I=Q;J=1}else{B=0;ua(163,A|0,h|0,j|0,108,m|0);D=B;B=0;if(D&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}D=Rb()|0;E=Q;Yua(m);H=D;I=E;J=K}Yua(j);Yua(h);if(J){F=I;G=H}else{L=I;M=H;break b}}else{E=Rb()|0;F=Q;G=E}while(0);zb(A|0);L=F;M=G}else N=17;while(0);if((N|0)==17){y=Rb()|0;L=Q;M=y}k[g>>2]=27468;k[p>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(p);q=L;s=M;Qb(s|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}}while(0);u=a+20|0;Cla(k[u>>2]|0,b,c,d);x=a+16|0;Cla(k[x>>2]|0,b,c,d);w=a+24|0;Cla(k[w>>2]|0,b,c,d);d=Gla(k[u>>2]|0)|0;k[a+36>>2]=d;d=Gla(k[w>>2]|0)|0;k[a+32>>2]=d;d=Fla(k[x>>2]|0)|0;k[a+28>>2]=d;r=e;return}function ona(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=d+56|0;p=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=d+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;Ia(40,d|0,144072,13)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,e|0,p|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,144086,7)|0;K=B;B=0;do if(((!(K&1)?(B=0,L=Xa(242,J|0,k[a+8>>2]|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,L|0,149177,1)|0,L=B,B=0,!(L&1)):0)?(B=0,wa(510,g|0,z|0),L=B,B=0,!(L&1)):0){B=0;ya(424,g|0)|0;L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(g);N=M;O=L;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);L=h+56|0;M=h+4|0;k[h>>2]=27524;k[L>>2]=27544;B=0;wa(508,h+56|0,M|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(L);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[L>>2]=27488;B=0;va(448,M|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,144094,18)|0;X=B;B=0;do if(X&1)Y=58;else{B=0;Z=ya(427,k[a+12>>2]|0)|0;_=B;B=0;if(_&1){Y=58;break}_=Lta(Z)|0;B=0;$=Ia(40,W|0,Z|0,_|0)|0;_=B;B=0;if(_&1){Y=58;break}B=0;Ia(40,$|0,149177,1)|0;$=B;B=0;if($&1){Y=58;break}B=0;wa(510,i|0,M|0);$=B;B=0;if($&1){Y=58;break}B=0;ya(424,i|0)|0;$=B;B=0;if($&1){$=Rb()|0;_=Q;Yua(i);aa=_;ba=$;break}Yua(i);k[h>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);Ala(k[a+20>>2]|0);Ala(k[a+24>>2]|0);Ala(k[a+16>>2]|0);$=j+56|0;_=j+4|0;k[j>>2]=27524;k[$>>2]=27544;B=0;wa(508,j+56|0,_|0);Z=B;B=0;if(Z&1){Z=Rb()|0;ca=Q;da=Z;vva($);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[$>>2]=27488;B=0;va(448,_|0);Z=B;B=0;do if(Z&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;Ia(40,j|0,144113,14)|0;ha=B;B=0;do if(ha&1)Y=61;else{B=0;wa(510,l|0,_|0);ia=B;B=0;if(ia&1){Y=61;break}B=0;ya(424,l|0)|0;ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(l);ka=ja;la=ia;break}Yua(l);k[j>>2]=27468;k[$>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva($);ia=k[a+40>>2]|0;if(ia)$N(ia);ia=m+56|0;ja=m+4|0;k[m>>2]=27524;k[ia>>2]=27544;B=0;wa(508,m+56|0,ja|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;oa=ma;vva(ia);Qb(oa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ia>>2]=27488;B=0;va(448,ja|0);ma=B;B=0;do if(ma&1){pa=Rb()|0;qa=Q;ra=pa}else{k[ja>>2]=27560;pa=m+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ja|0,c|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(c);Yua(pa);Ava(ja);qa=ta;ra=sa;break}Yua(c);B=0;Ia(40,m|0,144128,11)|0;sa=B;B=0;do if(!(sa&1)){B=0;wa(510,n|0,ja|0);ta=B;B=0;if(ta&1){Y=76;break}B=0;ya(424,n|0)|0;ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;Yua(n);xa=ua;za=ta;break}else{Yua(n);k[m>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(pa);Ava(ja);vva(ia);r=b;return}}else Y=76;while(0);if((Y|0)==76){sa=Rb()|0;xa=Q;za=sa}k[m>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(pa);Ava(ja);vva(ia);Aa=xa;Ba=za;Qb(Ba|0)}while(0);na=qa;oa=ra;vva(ia);Qb(oa|0)}while(0);if((Y|0)==61){ha=Rb()|0;ka=Q;la=ha}k[j>>2]=27468;k[$>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva($);Aa=ka;Ba=la;Qb(Ba|0)}while(0);ca=fa;da=ga;vva($);Qb(da|0)}while(0);if((Y|0)==58){W=Rb()|0;aa=Q;ba=W}k[h>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);Aa=aa;Ba=ba;Qb(Ba|0)}while(0);R=U;S=V;vva(L);Qb(S|0)}else Y=55;while(0);if((Y|0)==55){J=Rb()|0;N=Q;O=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);Aa=N;Ba=O;Qb(Ba|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=52;while(0);if((Y|0)==52){x=Rb()|0;A=Q;C=x}k[d>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);Aa=A;Ba=C;Qb(Ba|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}function pna(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=d+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,d|0,144072,13)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,e|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(424,e|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);y=x;z=w;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);w=f+56|0;x=f+4|0;k[f>>2]=27524;k[w>>2]=27544;B=0;wa(508,f+56|0,x|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(w);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[x>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(c);Yua(E);Ava(x);F=I;G=H;break}Yua(c);B=0;H=Ia(40,f|0,144086,7)|0;I=B;B=0;do if(((!(I&1)?(B=0,J=Xa(242,H|0,k[a+8>>2]|0)|0,K=B,B=0,!(K&1)):0)?(B=0,Ia(40,J|0,149177,1)|0,J=B,B=0,!(J&1)):0)?(B=0,wa(510,g|0,x|0),J=B,B=0,!(J&1)):0){B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(g);L=K;M=J;break}Yua(g);k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);J=h+56|0;K=h+4|0;k[h>>2]=27524;k[J>>2]=27544;B=0;wa(508,h+56|0,K|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(J);Qb(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[K>>2]=27560;R=h+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,K|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(c);Yua(R);Ava(K);S=V;T=U;break}Yua(c);B=0;U=Ia(40,h|0,144094,18)|0;V=B;B=0;do if(V&1)W=59;else{B=0;X=ya(427,k[a+12>>2]|0)|0;Y=B;B=0;if(Y&1){W=59;break}Y=Lta(X)|0;B=0;Z=Ia(40,U|0,X|0,Y|0)|0;Y=B;B=0;if(Y&1){W=59;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){W=59;break}B=0;wa(510,i|0,K|0);Z=B;B=0;if(Z&1){W=59;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;Y=Q;Yua(i);_=Y;$=Z;break}Yua(i);k[h>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(R);Ava(K);vva(J);zla(k[a+20>>2]|0);zla(k[a+24>>2]|0);zla(k[a+16>>2]|0);Z=j+56|0;Y=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,Y|0);X=B;B=0;if(X&1){X=Rb()|0;aa=Q;ba=X;vva(Z);Qb(ba|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,Y|0);X=B;B=0;do if(X&1){ca=Rb()|0;da=Q;ea=ca}else{k[Y>>2]=27560;ca=j+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Y|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(c);Yua(ca);Ava(Y);da=ga;ea=fa;break}Yua(c);B=0;fa=Ia(40,j|0,144140,15)|0;ga=B;B=0;do if(!(ga&1)){B=0;ha=Xa(245,fa|0,k[a+40>>2]|0)|0;ia=B;B=0;if(ia&1){W=62;break}B=0;Ia(40,ha|0,149177,1)|0;ha=B;B=0;if(ha&1){W=62;break}B=0;wa(510,l|0,Y|0);ha=B;B=0;if(ha&1){W=62;break}B=0;ya(424,l|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(l);ja=ia;ka=ha;break}else{Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(Z);r=b;return}}else W=62;while(0);if((W|0)==62){fa=Rb()|0;ja=Q;ka=fa}k[j>>2]=27468;k[Z>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(Z);la=ja;ma=ka;Qb(ma|0)}while(0);aa=da;ba=ea;vva(Z);Qb(ba|0)}while(0);if((W|0)==59){U=Rb()|0;_=Q;$=U}k[h>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(R);Ava(K);vva(J);la=_;ma=$;Qb(ma|0)}while(0);O=S;P=T;vva(J);Qb(P|0)}else W=56;while(0);if((W|0)==56){H=Rb()|0;L=Q;M=H}k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);la=L;ma=M;Qb(ma|0)}while(0);C=F;D=G;vva(w);Qb(D|0)}else W=53;while(0);if((W|0)==53){v=Rb()|0;y=Q;z=v}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);la=y;ma=z;Qb(ma|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}function qna(a){a=a|0;return k[a+8>>2]|0}function rna(a){a=a|0;return 590}function sna(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;f=a+20|0;Ela(k[f>>2]|0,d);d=a+24|0;Ela(k[d>>2]|0,e);e=a+16|0;Ela(k[e>>2]|0,b);b=Gla(k[f>>2]|0)|0;k[a+36>>2]=b;b=Gla(k[d>>2]|0)|0;k[a+32>>2]=b;b=Fla(k[e>>2]|0)|0;k[a+28>>2]=b;k[a+40>>2]=g;return}function tna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+180|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;cO(k[a+40>>2]|0,d,477);if((k[d>>2]|0)==507){r=c;return}c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[a>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,a|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(a);n=q;o=p;break}Yua(b);B=0;p=Ia(40,e|0,144156,9)|0;q=B;B=0;if((((((!(q&1)?(B=0,q=Xa(242,p|0,k[d>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,q|0,144166,2)|0,q=B,B=0,!(q&1)):0)?(B=0,q=ya(427,k[d>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144169,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,143995,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,144189,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,196,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(m);Ava(a);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function una(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;cO(k[a+40>>2]|0,e,477);if((k[e>>2]|0)==507){j=vna(a)|0;if(!j){r=c;return}TN(j,b);SN(j);Sqa(j);r=c;return}c=f+56|0;j=f+4|0;k[f>>2]=27524;k[c>>2]=27544;B=0;wa(508,f+56|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(c);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[c>>2]=27488;B=0;va(448,j|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[j>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,j|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(a);Ava(j);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,144156,9)|0;q=B;B=0;if((((((!(q&1)?(B=0,q=Xa(242,p|0,k[e>>2]|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,q|0,144166,2)|0,q=B,B=0,!(q&1)):0)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,144169,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,143995,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,144203,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,j|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,219,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(C|0)}while(0);l=n;m=o;vva(c);Qb(m|0)}function vna(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0;b=r;r=r+80|0;c=b+72|0;d=b+64|0;e=b+16|0;f=b;g=k[a+28>>2]|0;if(!($p(g)|0)){h=0;r=b;return h|0}if(_p(g)|0){h=0;r=b;return h|0}i=Qqa(24)|0;j=a+36|0;B=0;ua(166,i|0,k[j>>2]|0,2,k[a+40>>2]|0,534);l=B;B=0;if(l&1){l=Rb()|0;m=Q;Sqa(i);n=l;o=m;Qb(n|0)}Ko(e,k[a+32>>2]|0,2,0);a=oC(k[g+16>>2]|0,173)|0;m=ed[k[(k[g>>2]|0)+160>>2]&511](g,k[k[j>>2]>>2]|0)|0;l=ed[k[(k[g>>2]|0)+160>>2]&511](g,k[(k[j>>2]|0)+4>>2]|0)|0;j=Qqa(64)|0;B=0;ib(289,j|0,m|0,l|0,2);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Sqa(j);n=q;o=s;Qb(n|0)}n=Hc[k[(k[j>>2]|0)+8>>2]&511](j)|0;if((n|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0)){s=j+8|0;o=i+4|0;q=f+8|0;t=n;do{Fc[k[(k[j>>2]|0)+24>>2]&1023](j,t);yw(g,c,e,j);zw(g,f,j,m,l,Hc[k[(k[g>>2]|0)+112>>2]&511](g)|0);nd[k[(k[a>>2]|0)+48>>2]&1023](a,d,j);n=k[o>>2]|0;p[n>>3]=+p[s>>3]*+p[c>>3]*+p[d>>3]*+p[f>>3]+ +p[n>>3];u=n+8|0;p[u>>3]=+p[s>>3]*+p[c>>3]*+p[d>>3]*+p[q>>3]+ +p[u>>3];t=t+1|0}while((t|0)<(Hc[k[(k[j>>2]|0)+12>>2]&511](j)|0))}Ec[k[(k[j>>2]|0)+4>>2]&1023](j);h=i;r=b;return h|0}function wna(a,b){a=a|0;b=b|0;var c=0;c=a+36|0;a=Rn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Rn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function xna(a,b){a=a|0;b=b|0;var c=0;c=a+36|0;a=Qn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Qn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function yna(a){a=a|0;return 2}function zna(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function Ana(a){a=a|0;return 0}function Bna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}function Cna(a,b,c){a=a|0;b=b|0;c=+c;return}function Dna(a){a=a|0;var b=0;b=a+28|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;Dla(k[a+20>>2]|0);Dla(k[a+24>>2]|0);Dla(k[a+16>>2]|0);return}function Ena(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function Fna(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;g=r;r=r+192|0;d=g+176|0;j=g+40|0;l=g+24|0;m=g+12|0;n=g;if((Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)<=0){o=0;p=0;k[b>>2]=o;k[c>>2]=p;r=g;return}q=a+36|0;if((h|0)==937){s=0;t=0;u=0;while(1){v=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;do if(!(i[v>>0]|0)){w=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;i[w>>0]=1;w=0;while(1){x=f+(w<<2)|0;if((k[x>>2]|0)>-1)w=w+1|0;else{y=x;break}}w=Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0;k[y>>2]=w;w=k[(k[q>>2]|0)+(t<<2)>>2]|0;if(k[w+28>>2]|0)if(!(fo(w)|0)){z=s+1|0;A=u;break}else{z=s;A=u+1|0;break}else{z=s;A=u}}else{z=s;A=u}while(0);t=t+1|0;if((t|0)>=(Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)){o=z;p=A;break}else{s=z;u=A}}k[b>>2]=o;k[c>>2]=p;r=g;return}else{C=0;D=0;E=0}a:while(1){A=e+(Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0)|0;b:do if(!(i[A>>0]|0)){u=e+(Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0)|0;i[u>>0]=1;u=0;while(1){z=f+(u<<2)|0;if((k[z>>2]|0)>-1)u=u+1|0;else{F=z;break}}u=Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0;k[F>>2]=u;switch(h|0){case 966:{u=k[(k[q>>2]|0)+(D<<2)>>2]|0;if(!(k[u+32>>2]|0)){G=C;H=E;break b}if(!(fo(u)|0)){G=C+1|0;H=E;break b}else{G=C;H=E+1|0;break b}break}case 943:{u=k[(k[q>>2]|0)+(D<<2)>>2]|0;if(!(k[u+24>>2]|0)){G=C;H=E;break b}if(!(fo(u)|0)){G=C+1|0;H=E;break b}else{G=C;H=E+1|0;break b}break}default:break a}}else{G=C;H=E}while(0);D=D+1|0;if((D|0)>=(Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)){o=G;p=H;I=11;break}else{C=G;E=H}}if((I|0)==11){k[b>>2]=o;k[c>>2]=p;r=g;return}g=j+56|0;p=j+4|0;k[j>>2]=27524;k[g>>2]=27544;B=0;wa(508,j+56|0,p|0);c=B;B=0;if(c&1){c=Rb()|0;J=Q;K=c;vva(g);Qb(K|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[g>>2]=27488;B=0;va(448,p|0);c=B;B=0;do if(c&1){o=Rb()|0;L=Q;M=o}else{k[p>>2]=27560;o=j+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,p|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;I=Q;Yua(d);Yua(o);Ava(p);L=I;M=b;break}Yua(d);B=0;b=Ia(40,j|0,145010,13)|0;I=B;B=0;if(!(I&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,l|0,143995,76);I=B;B=0;do if(!(I&1)){B=0;eb(502,m|0,144217,23);H=B;B=0;if(H&1){H=Rb()|0;E=Q;Yua(l);N=E;O=H;break}B=0;wa(510,n|0,p|0);H=B;B=0;if(H&1){H=Rb()|0;P=Q;R=H;S=1}else{B=0;ua(163,b|0,l|0,m|0,336,n|0);H=B;B=0;if(H&1)T=1;else{B=0;eb(503,b|0,1240,229);B=0;T=0}H=Rb()|0;E=Q;Yua(n);P=E;R=H;S=T}Yua(m);Yua(l);if(S){N=P;O=R}else{U=P;V=R;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}}else{H=Rb()|0;N=Q;O=H}while(0);zb(b|0);U=N;V=O;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}I=Rb()|0;U=Q;V=I;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}while(0);J=L;K=M;vva(g);Qb(K|0)}function Gna(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,144241,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Hna(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,144350,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,144241,85);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,144370,27);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ina(a,b,c){a=a|0;b=+b;c=c|0;return}function Jna(a,b,c){a=a|0;b=b|0;c=c|0;return}function Kna(a,b,c){a=a|0;b=b|0;c=c|0;return}function Lna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,144241,85);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function Mna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Nna(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Ona(a,b,c){a=a|0;b=+b;c=c|0;return}function Pna(a,b,c){a=a|0;b=b|0;c=c|0;return}function Qna(a,b,c){a=a|0;b=b|0;c=c|0;return}function Rna(a,b,c){a=a|0;b=b|0;c=c|0;Lna(a+-4|0,b,c)}function Sna(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0;d=c>>>0>536870911?-1:c<<3;e=Rqa(d)|0;k[a>>2]=e;e=Rqa(d)|0;k[b>>2]=e;if((c|0)>=8){b=Rqa(d)|0;f=Rqa(d)|0;p[b>>3]=0.0;p[f>>3]=2.0;WEa(b+8|0,0,(c<<3)+-8|0)|0;d=1;do{g=1.0/(4.0-1.0/+(ma(d,d)|0));p[f+(d<<3)>>3]=g;d=d+1|0}while((d|0)!=(c|0));Tna(k[a>>2]|0,e,c,b,f);Tqa(f);Tqa(b);return}if((c|0)<=0)return;b=c+-1|0;f=k[41356+(b<<2)>>2]|0;d=k[a>>2]|0;a=k[41384+(b<<2)>>2]|0;b=0;do{p[d+(b<<3)>>3]=+p[f+(b<<3)>>3];p[e+(b<<3)>>3]=+p[a+(b<<3)>>3];b=b+1|0}while((b|0)!=(c|0));return}function Tna(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0.0,R=0,S=0.0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;if((c|0)==1){p[a>>3]=+p[d>>3];p[b>>3]=+p[e>>3];r=f;return}m=Rqa(c>>>0>536870911?-1:c<<3)|0;p[a>>3]=+p[d>>3];p[b>>3]=1.0;n=c+-1|0;p[m+(n<<3)>>3]=0.0;o=(c|0)>1;if(o){q=1;do{p[a+(q<<3)>>3]=+p[d+(q<<3)>>3];s=+aa(+(+p[e+(q<<3)>>3]));p[m+(q+-1<<3)>>3]=s;p[b+(q<<3)>>3]=0.0;q=q+1|0}while((q|0)!=(c|0));q=(c|0)>0;a:do if(q){d=1;t=0;b:while(1){u=a+(t<<3)|0;v=t;t=t+1|0;w=a+(t<<3)|0;x=m+(v<<3)|0;y=0;while(1){z=v;while(1){if((z|0)>=(c|0)|(z|0)==(n|0)){A=z;break}s=+$(+(+p[m+(z<<3)>>3]));C=+$(+(+p[a+(z<<3)>>3]));D=z+1|0;if(!(s<=(C+ +$(+(+p[a+(D<<3)>>3])))*2.220446049250313e-16))z=D;else{A=z;break}}C=+p[u>>3];if((A|0)==(v|0)){E=y;break}y=y+1|0;s=+p[x>>3];F=(+p[w>>3]-C)/(s*2.0);G=+aa(+(F*F+1.0));H=+$(+G);G=+p[a+(A<<3)>>3]-C+s/(F+(F>=0.0?H:-H));if((A|0)>(v|0)){z=d+A|0;H=1.0;F=G;D=1;s=0.0;I=1.0;while(1){J=A-D|0;K=+p[m+(J<<3)>>3];L=I*K;M=H*K;if(!(+$(+L)>=+$(+F))){K=L/F;N=+aa(+(K*K+1.0));O=J+1|0;p[m+(O<<3)>>3]=F*N;P=1.0/N;R=O;S=P;T=K*P}else{P=F/L;K=+aa(+(P*P+1.0));O=J+1|0;p[m+(O<<3)>>3]=L*K;L=1.0/K;R=O;S=P*L;T=L}O=a+(R<<3)|0;L=+p[O>>3]-s;P=M*(S*2.0)+T*(+p[a+(J<<3)>>3]-L);K=T*P;p[O>>3]=L+K;L=S*P-M;O=b+(R<<3)|0;M=+p[O>>3];U=b+(J<<3)|0;P=+p[U>>3];p[O>>3]=S*M+T*P;p[U>>3]=S*P-T*M;D=D+1|0;if((D|0)==(z|0)){V=K;W=L;break}else{H=S;F=L;s=K;I=T}}X=+p[u>>3];Y=W;Z=V}else{X=C;Y=G;Z=0.0}p[u>>3]=X-Z;p[x>>3]=Y;p[m+(A<<3)>>3]=0.0;if((y|0)>=30)break b}if((E|0)>29)break;if((t|0)>=(c|0)){_=q;break a}else d=d+-1|0}Tqa(m);d=h+56|0;t=h+4|0;k[h>>2]=27524;k[d>>2]=27544;B=0;wa(508,h+56|0,t|0);y=B;B=0;if(y&1){y=Rb()|0;ba=Q;ca=y;vva(d);Qb(ca|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[d>>2]=27488;B=0;va(448,t|0);y=B;B=0;do if(y&1){x=Rb()|0;da=Q;ea=x}else{k[t>>2]=27560;x=h+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,t|0,g|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);Yua(x);Ava(t);da=v;ea=u;break}Yua(g);B=0;u=Ia(40,h|0,144419,30)|0;v=B;B=0;if((!(v&1)?(B=0,v=Xa(242,u|0,30)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,i|0,144450,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,j|0,144529,10);w=B;B=0;if(w&1){w=Rb()|0;z=Q;Yua(i);fa=z;ga=w;break}B=0;wa(510,l|0,t|0);w=B;B=0;if(w&1){w=Rb()|0;ha=Q;ia=w;ja=1}else{B=0;ua(163,v|0,i|0,j|0,1662,l|0);w=B;B=0;if(w&1)ka=1;else{B=0;eb(503,v|0,1240,229);B=0;ka=0}w=Rb()|0;z=Q;Yua(l);ha=z;ia=w;ja=ka}Yua(j);Yua(i);if(ja){fa=ha;ga=ia}else{la=ha;ma=ia;k[h>>2]=27468;k[d>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(d);Qb(ma|0)}}else{w=Rb()|0;fa=Q;ga=w}while(0);zb(v|0);la=fa;ma=ga;k[h>>2]=27468;k[d>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(d);Qb(ma|0)}u=Rb()|0;la=Q;ma=u;k[h>>2]=27468;k[d>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(d);Qb(ma|0)}while(0);ba=da;ca=ea;vva(d);Qb(ca|0)}else _=0;while(0);if(o){o=0;do{ca=a+(o<<3)|0;Y=+p[ca>>3];ea=o;o=o+1|0;if((o|0)<(c|0)){da=o;ba=ea;Z=Y;while(1){X=+p[a+(da<<3)>>3];ma=X<Z;h=ma?da:ba;da=da+1|0;if((da|0)==(c|0)){na=h;break}else{ba=h;Z=ma?X:Z}}if((na|0)>(ea|0)){ba=a+(na<<3)|0;p[ca>>3]=+p[ba>>3];p[ba>>3]=Y;ba=b+(ea<<3)|0;Z=+p[ba>>3];da=b+(na<<3)|0;p[ba>>3]=+p[da>>3];p[da>>3]=Z}}}while((o|0)!=(n|0))}if(_){_=0;do{n=b+(_<<3)|0;Z=+p[n>>3];p[n>>3]=Z*(+p[e>>3]*Z);_=_+1|0}while((_|0)!=(c|0))}}Tqa(m);r=f;return}function Una(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0;g=r;r=r+16|0;h=g+4|0;i=g;k[h>>2]=0;k[i>>2]=0;if((f|0)<21){j=f+-1|0;l=k[41412+(j<<2)>>2]|0;k[a>>2]=l;m=l>>>0>536870911?-1:l<<3;n=Rqa(m)|0;k[b>>2]=n;n=Rqa(m)|0;k[c>>2]=n;n=Rqa(m)|0;k[d>>2]=n;n=Rqa(m)|0;k[e>>2]=n;m=k[41492+(j<<2)>>2]|0;o=k[b>>2]|0;q=k[41572+(j<<2)>>2]|0;s=k[c>>2]|0;t=k[41652+(j<<2)>>2]|0;u=k[d>>2]|0;v=k[41732+(j<<2)>>2]|0;j=0;do{p[o+(j<<3)>>3]=+p[m+(j<<3)>>3];p[s+(j<<3)>>3]=+p[q+(j<<3)>>3];p[u+(j<<3)>>3]=+p[t+(j<<3)>>3];p[n+(j<<3)>>3]=+p[v+(j<<3)>>3];j=j+1|0}while((j|0)<(l|0));r=g;return}l=(f|0)/2|0;f=l+1|0;j=ma(f,f)|0;k[a>>2]=j;a=j>>>0>536870911?-1:j<<3;j=Rqa(a)|0;k[b>>2]=j;j=Rqa(a)|0;k[c>>2]=j;j=Rqa(a)|0;k[d>>2]=j;j=Rqa(a)|0;k[e>>2]=j;Sna(h,i,f);f=k[h>>2]|0;j=k[i>>2]|0;a=k[e>>2]|0;e=k[b>>2]|0;b=k[c>>2]|0;c=k[d>>2]|0;d=0;v=0;while(1){n=f+(v<<3)|0;t=j+(v<<3)|0;u=0;q=d;while(1){w=+p[n>>3];x=1.0-w;y=x*.5*+p[f+(u<<3)>>3];p[a+(q<<3)>>3]=x*.4330127018922193*(+p[j+(u<<3)>>3]*+p[t>>3]);x=(w+1.0)*.8660254037844386/1.7320508075688772;p[e+(q<<3)>>3]=(1.0-y-x)*.5;p[b+(q<<3)>>3]=(y+1.0-x)*.5;p[c+(q<<3)>>3]=x;s=q+1|0;if((u|0)<(l|0)){u=u+1|0;q=s}else{z=s;break}}if((v|0)<(l|0)){d=z;v=v+1|0}else break}Tqa(j);k[i>>2]=0;Tqa(f);k[h>>2]=0;r=g;return}function Vna(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0;h=r;r=r+16|0;i=h+4|0;j=h;k[i>>2]=0;k[j>>2]=0;if((g|0)<7){l=g+-1|0;m=k[41812+(l<<2)>>2]|0;k[a>>2]=m;n=m>>>0>536870911?-1:m<<3;o=Rqa(n)|0;k[b>>2]=o;o=Rqa(n)|0;k[c>>2]=o;o=Rqa(n)|0;k[d>>2]=o;o=Rqa(n)|0;k[e>>2]=o;o=Rqa(n)|0;k[f>>2]=o;n=k[41836+(l<<2)>>2]|0;q=k[b>>2]|0;s=k[41860+(l<<2)>>2]|0;t=k[c>>2]|0;u=k[41884+(l<<2)>>2]|0;v=k[d>>2]|0;w=k[41908+(l<<2)>>2]|0;x=k[e>>2]|0;y=k[41932+(l<<2)>>2]|0;l=0;do{p[q+(l<<3)>>3]=+p[n+(l<<3)>>3];p[t+(l<<3)>>3]=+p[s+(l<<3)>>3];p[v+(l<<3)>>3]=+p[u+(l<<3)>>3];p[x+(l<<3)>>3]=+p[w+(l<<3)>>3];p[o+(l<<3)>>3]=+p[y+(l<<3)>>3];l=l+1|0}while((l|0)<(m|0));r=h;return}m=(g|0)/2|0;g=m+1|0;l=ma(ma(g,g)|0,g)|0;k[a>>2]=l;a=l>>>0>536870911?-1:l<<3;l=Rqa(a)|0;k[b>>2]=l;l=Rqa(a)|0;k[c>>2]=l;l=Rqa(a)|0;k[d>>2]=l;l=Rqa(a)|0;k[e>>2]=l;l=Rqa(a)|0;k[f>>2]=l;Sna(i,j,g);g=k[i>>2]|0;l=k[j>>2]|0;a=k[f>>2]|0;f=k[b>>2]|0;b=k[c>>2]|0;c=k[d>>2]|0;d=k[e>>2]|0;e=0;y=0;while(1){o=g+(y<<3)|0;w=l+(y<<3)|0;x=e;u=0;while(1){v=g+(u<<3)|0;s=l+(u<<3)|0;t=0;n=x;while(1){z=+p[v>>3];A=1.0-z;B=+p[o>>3];C=1.0-B;D=A*.25*C*+p[g+(t<<3)>>3];E=z*3.0;z=(E+5.0-B-E*B)*.14433756729740646;E=(B+1.0)*.816496580927726;p[a+(n<<3)>>3]=A*.08838834764831845*(C*C)*(+p[l+(t<<3)>>3]*+p[s>>3]*+p[w>>3]);C=z/1.7320508075688772;A=E/2.449489742783178;p[f+(n<<3)>>3]=(1.0-D-C-A)*.5;p[b+(n<<3)>>3]=(D+1.0-C-A)*.5;A=E/2.8284271247461903;p[c+(n<<3)>>3]=(z-A)/1.7320508075688772;p[d+(n<<3)>>3]=A*1.7320508075688772;q=n+1|0;if((t|0)<(m|0)){t=t+1|0;n=q}else{F=q;break}}if((u|0)<(m|0)){x=F;u=u+1|0}else{G=F;break}}if((y|0)<(m|0)){e=G;y=y+1|0}else break}Tqa(l);k[j>>2]=0;Tqa(g);k[i>>2]=0;r=h;return}function Wna(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,h=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0,n=0.0;if(d==0.0){g=0.0;p[a>>3]=g;return 0}h=(e+1.0)/e+-1.0;e=h*b*2.302585092994046;i=c*2.302585092994046;j=0;k=+psa(f);while(1){f=+ba(10.0,+k);l=+ba(+f,+h);m=k-(f*c+l*b-d)/(i*f+e*l);if(+$(+(m-k))/+$(+m)<1.0e-12){n=m;break}if((j|0)>49){n=m;break}else{j=j+1|0;k=m}}g=+ba(10.0,+(n>50.0?50.0:n));p[a>>3]=g;return 0}function Xna(a){a=+a;var b=0.0,c=0.0;b=a+-273.15;do if(!(b<=-45.0)){if(b>=-45.0&b<=-40.0){a=b+45.0;c=a*a*.007395902726819-+ba(+a,3.0)*.000396645116301-a*.253161292268336+5.772078366321591;break}if(b>=-40.0&b<=-35.0){a=b+40.0;c=a*a*.001446225982305+ +ba(+a,3.0)*.000408322072669-a*.208950648722716+4.641588833612773;break}if(b>=-35.0&b<=-30.0){a=b+35.0;c=a*a*.007571057072334-+ba(+a,3.0)*.000423888728124-a*.163864233449525+3.684031498640382;break}if(b>=-30.0&b<=-25.0){a=b+30.0;c=a*a*.001212726150476+ +ba(+a,3.0)*.000147154327025-a*.119945317335478+3.001000667185614;break}if(b>=-25.0&b<=-20.0){a=b+25.0;c=a*a*.003420041055847-+ba(+a,3.0)*.000193435838672-a*.096781481303861+2.44998652514822;break}if(b>=-20.0&b<=-15.0){a=b+20.0;c=a*a*.000518503475772+ +ba(+a,3.0)*.000219771255067-a*.077088758645767+2.027400665191131;break}if(b>=-15.0&b<=-10.0){a=b+15.0;c=a*a*.003815072301777-+ba(+a,3.0)*.000653438900191-a*.055420879758021+1.682390865739973;break}if(b>=-10.0&b<=-5.0){a=b+10.0;c=+ba(+a,3.0)*.000692439419762-a*a*.005986511201093-a*.066278074254598+1.418983411970382;break}if(b>=-5.0&b<=-2.0){a=b+5.0;c=a*a*.004400080095332-+ba(+a,3.0)*.00013228200411-a*.074210229783403+1.024485188140279;break}else{a=b+2.0;c=a*a*.003209542058346-+ba(+a,3.0)*.00013228200411-a*.051381363322371+.837883605537096;break}}else{a=b+50.0;c=a*a*.013345579471334-+ba(+a,3.0)*.000396645116301-a*.356868703259105+7.272363035371383}while(0);b=c*1.0e8;return +(b<0.0?1.0e6:b)}function Yna(a,b,c){a=+a;b=+b;c=+c;var d=0.0;d=+Xna(a);return +(d*+ba(+(+LY(0.0,+KY(.01,b))*181.25+1.0),+(-1.0/c)))}function Zna(a){a=+a;var b=0.0,c=0.0;b=a+-273.15;do if(!(b<=-45.0)){if(b>=-45.0&b<=-40.0){a=b+45.0;c=a*a*.007279645014004-+ba(+a,3.0)*.000292866376675-a*.230243014094813+5.154964909039554;break}if(b>=-40.0&b<=-35.0){a=b+40.0;c=a*a*.002886649363879+ +ba(+a,3.0)*.000072737147457-a*.179411542205399+4.149132666831214;break}if(b>=-35.0&b<=-30.0){a=b+35.0;c=a*a*.003977706575736-+ba(+a,3.0)*.000086144770023-a*.145089762507325+3.333333333333331;break}if(b>=-30.0&b<=-25.0){a=b+30.0;c=a*a*.002685535025386-+ba(+a,3.0)*.000043984685769-a*.111773554501713+2.696559088937191;break}if(b>=-25.0&b<=-20.0){a=b+25.0;c=a*a*.002025764738854-+ba(+a,3.0)*.000029799523463-a*.088217055680511+2.199331606342181;break}if(b>=-20.0&b<=-15.0){a=b+20.0;c=a*a*.00157877188691+ +ba(+a,3.0)*.000136920904777-a*.07019437255169+1.805165505978111;break}if(b>=-15.0&b<=-10.0){a=b+15.0;c=a*a*.003632585458564-+ba(+a,3.0)*.000899763781026-a*.044137585824322+1.510778053489523;break}if(b>=-10.0&b<=-5.0){a=b+10.0;c=+ba(+a,3.0)*.00167696432507-a*a*.009863871256831-a*.075294014815659+1.268434288203714;break}if(b>=-5.0&b<=-2.0){a=b+5.0;c=a*a*.015290593619213-+ba(+a,3.0)*.003748937622487-a*.048160403003748+.854987973338348;break}else{a=b+2.0;c=+ba(+a,3.0)*-.003748937622488-a*a*.018449844983174-a*.057638157095631+.74690079109286;break}}else{a=b+50.0;c=a*a*.01167264066413-+ba(+a,3.0)*.000292866376675-a*.325004442485481+6.524779401948101}while(0);b=c*1.0e8;return +(b<0.0?1.0e6:b)}function _na(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0;d=a-b*.000866;b=d*8.314;if(d<263.15)e=+ja(+(-6.0e4/b))*3.61e-13;else e=+ja(+(-139.0e3/b))*1730.0;return +(+ba(+e,+(-1.0/c)))}function $na(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var h=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;h=b*d;d=(273.15-h-e)*f;if(d>a){b=h+(a/f+e);e=b*8.314;if(!(b<=263.15)){i=e;j=0.0;k=6}else{l=+ja(+(-6.0e4/e))*3.61e-13;m=0.0}}else{e=(a-d)/g;if(e>.01){i=2270.9691;j=.01;k=6}else{i=2270.9691;j=e;k=6}}if((k|0)==6){l=+ja(+(-139.0e3/i))*1730.0;m=j}return +(+ba(+(l*(m*181.25+1.0)),+(-1.0/c)))}function aoa(a,b){a=+a;b=+b;var c=0.0,d=0,e=0.0,f=0.0;do if(!(a<=.01)){if(!(!(a>.01)|!(a<=.02))){c=(a+-.01)*1.5854895991882293e-08+0.0;break}if(!(a>.02)|!(a<=.03))c=1.5854895991882295e-09;else c=(a+-.02)*1.4269406392694067e-07+1.5854895991882293e-10}else c=0.0;while(0);d=a>.01;if(b==0.0){e=c*31536.0e3;return +(d&a-e<.01?a+-.01:e)}if(!d){f=c;return +f}if(!(a-c*b<.01)){f=c;return +f}f=(a+-.01)/b;return +f}function boa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c+4|0;e=c;iZ(b,e)|0;jZ(b,d)|0;b=k[d>>2]|0;d=Rqa(b>>>0>1073741823?-1:b<<2)|0;f=~~+_(+(+(a|0)/+(b|0)));if((b|0)>0){g=0;do{k[d+(g<<2)>>2]=f;g=g+1|0}while((g|0)<(b|0))}g=a-(ma(f,b)|0)|0;if((g|0)>0)h=0;else{i=k[e>>2]|0;j=d+(i<<2)|0;l=k[j>>2]|0;Tqa(d);r=c;return l|0}do{b=d+(h<<2)|0;k[b>>2]=(k[b>>2]|0)+1;h=h+1|0}while((h|0)!=(g|0));i=k[e>>2]|0;j=d+(i<<2)|0;l=k[j>>2]|0;Tqa(d);r=c;return l|0}function coa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e+4|0;g=e+8|0;h=e;k[f>>2]=c;jZ(d,h)|0;iZ(d,g)|0;c=k[h>>2]|0;h=Rqa(c>>>0>1073741823?-1:c<<2)|0;dZ(f,1,4,h,1,4,d)|0;d=k[h>>2]|0;f=k[g>>2]|0;if((f|0)<1){i=0;j=d;k[a>>2]=i;k[b>>2]=j;Tqa(h);r=e;return}else{l=d;m=1;n=0;o=d}while(1){d=l+n|0;l=k[h+(m<<2)>>2]|0;g=l+o|0;if((m|0)>=(f|0)){i=d;j=g;break}else{m=m+1|0;n=d;o=g}}k[a>>2]=i;k[b>>2]=j;Tqa(h);r=e;return}function doa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;j=b+24|0;l=b+12|0;m=b;n=a+76|0;if(k[n>>2]|0){r=b;return}o=k[a+52>>2]|0;if((o|0)<3){p=d+56|0;q=d+4|0;k[d>>2]=27524;k[p>>2]=27544;B=0;wa(508,d+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(p);Qb(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[p>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;y=Ia(40,d|0,150121,27)|0;z=B;B=0;a:do if(!(z&1)?(B=0,Xa(239,y|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,e|0,144540,86);C=B;B=0;do if(!(C&1)){B=0;eb(502,f|0,144627,11);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(e);F=E;G=D;break}B=0;wa(510,g|0,q|0);D=B;B=0;if(D&1){D=Rb()|0;H=D;I=Q;J=1}else{B=0;ua(163,A|0,e|0,f|0,15,g|0);D=B;B=0;if(D&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}D=Rb()|0;E=Q;Yua(g);H=D;I=E;J=K}Yua(f);Yua(e);if(J){F=I;G=H}else{L=H;M=I;break a}}else{E=Rb()|0;F=Q;G=E}while(0);zb(A|0);L=G;M=F}else N=18;while(0);if((N|0)==18){y=Rb()|0;L=y;M=Q}k[d>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(p);O=L;P=M;Qb(O|0)}while(0);t=w;u=x;vva(p);Qb(u|0)}switch(k[a+40>>2]|0){case 301:case 300:{u=k[a+56>>2]|0;p=u*3|0;x=u*12|0;w=Rqa(x>>>0>1073741823?-1:x<<2)|0;x=Rqa(p)|0;if((u|0)!=0?(WEa(x|0,0,p|0)|0,t=(u|0)>0,t):0){M=0;do{k[w+((M<<2|3)<<2)>>2]=-1;M=M+1|0}while((M|0)<(p|0));R=t}else R=0;t=Rqa(o>>>0>1073741823?-1:o<<2)|0;M=Rqa(p>>>0>1073741823?-1:p<<2)|0;if((o|0)>0)WEa(t|0,-1,((o|0)>1?o:1)<<2|0)|0;if(R){R=k[a+72>>2]|0;o=0;p=0;while(1){L=o*3|0;o=o+1|0;q=0;d=p;while(1){F=q+L|0;G=R+(F<<2)|0;I=k[G>>2]|0;H=k[R+(((q|0)==2?L:F+1|0)<<2)>>2]|0;F=(H|0)<(I|0);J=F?H:I;e=F?I:H;H=t+(J<<2)|0;I=k[H>>2]|0;b:do if((I|0)==-1)N=63;else{F=I;while(1){f=F<<2;if((k[w+((f|1)<<2)>>2]|0)==(e|0)){S=f;break}F=k[M+(F<<2)>>2]|0;if((F|0)==-1){N=63;break b}}k[w+((S|3)<<2)>>2]=o;T=d}while(0);if((N|0)==63){N=0;A=d<<2;k[w+(A<<2)>>2]=J;k[w+((A|1)<<2)>>2]=e;k[w+((A|2)<<2)>>2]=o;if((J|0)!=(k[G>>2]|0))i[x+d>>0]=1;k[M+(d<<2)>>2]=I;k[H>>2]=d;T=d+1|0}q=q+1|0;if((q|0)==3){U=T;break}else d=T}if((o|0)>=(u|0)){V=U;break}else p=U}}else V=0;Tqa(t);Tqa(M);M=V<<2;t=Rqa(M>>>0>1073741823?-1:M<<2)|0;if((V|0)>0){M=0;do{U=M<<2;p=k[w+(U<<2)>>2]|0;if(!(i[x+M>>0]|0)){k[t+(U<<2)>>2]=p;u=U|1;k[t+(u<<2)>>2]=k[w+(u<<2)>>2]}else{u=U|1;k[t+(U<<2)>>2]=k[w+(u<<2)>>2];k[t+(u<<2)>>2]=p}p=U|2;k[t+(p<<2)>>2]=k[w+(p<<2)>>2];p=U|3;k[t+(p<<2)>>2]=k[w+(p<<2)>>2];M=M+1|0}while((M|0)!=(V|0))}Tqa(w);Tqa(x);k[n>>2]=t;k[a+60>>2]=V;r=b;return}case 302:{eoa(a);r=b;return}default:{b=h+56|0;a=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,a|0);V=B;B=0;if(V&1){V=Rb()|0;W=Q;X=V;vva(b);Qb(X|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);V=B;B=0;do if(V&1){t=Rb()|0;Y=Q;Z=t}else{k[a>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;x=Q;Yua(c);Yua(t);Ava(a);Y=x;Z=n;break}Yua(c);B=0;n=Ia(40,h|0,150248,32)|0;x=B;B=0;c:do if(!(x&1)?(B=0,Xa(239,n|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,j|0,144540,86);M=B;B=0;do if(!(M&1)){B=0;eb(502,l|0,144627,11);p=B;B=0;if(p&1){p=Rb()|0;U=Q;Yua(j);_=p;$=U;break}B=0;wa(510,m|0,a|0);U=B;B=0;if(U&1){U=Rb()|0;aa=1;ba=U;ca=Q}else{B=0;ua(163,w|0,j|0,l|0,27,m|0);U=B;B=0;if(U&1)da=1;else{B=0;eb(503,w|0,1240,229);B=0;da=0}U=Rb()|0;p=Q;Yua(m);aa=da;ba=U;ca=p}Yua(l);Yua(j);if(aa){_=ba;$=ca}else{ea=ba;fa=ca;break c}}else{p=Rb()|0;_=p;$=Q}while(0);zb(w|0);ea=_;fa=$}else N=43;while(0);if((N|0)==43){n=Rb()|0;ea=n;fa=Q}k[h>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(t);Ava(a);vva(b);O=ea;P=fa;Qb(O|0)}while(0);W=Y;X=Z;vva(b);Qb(X|0)}}}function eoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+48|0;switch(k[h>>2]|0){case 625:{i=Rqa(100)|0;j=Rqa(20)|0;k[j>>2]=1;k[j+4>>2]=1;k[i>>2]=3;k[i+4>>2]=0;k[i+8>>2]=1;k[i+12>>2]=2;k[i+20>>2]=3;k[i+24>>2]=3;k[i+28>>2]=4;k[i+32>>2]=5;k[j+8>>2]=2;k[j+12>>2]=2;k[j+16>>2]=2;k[i+40>>2]=4;k[i+44>>2]=1;k[i+48>>2]=2;k[i+52>>2]=5;k[i+56>>2]=4;k[i+60>>2]=4;k[i+64>>2]=2;k[i+68>>2]=0;k[i+72>>2]=3;k[i+76>>2]=5;k[i+80>>2]=4;k[i+84>>2]=0;k[i+88>>2]=1;k[i+92>>2]=4;k[i+96>>2]=3;l=5;m=i;n=j;o=6;p=4;break}case 623:{j=Rqa(64)|0;i=Rqa(16)|0;k[i>>2]=1;k[i+4>>2]=1;k[i+8>>2]=1;k[i+12>>2]=1;k[j>>2]=3;k[j+4>>2]=0;k[j+8>>2]=1;k[j+12>>2]=2;k[j+16>>2]=3;k[j+20>>2]=0;k[j+24>>2]=3;k[j+28>>2]=1;k[j+32>>2]=3;k[j+36>>2]=1;k[j+40>>2]=3;k[j+44>>2]=2;k[j+48>>2]=3;k[j+52>>2]=0;k[j+56>>2]=2;k[j+60>>2]=3;l=4;m=j;n=i;o=4;p=3;break}default:{i=d+56|0;j=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,j|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(i);Qb(t|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[j>>2]=27560;u=d+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(j);v=y;w=x;break}Yua(c);B=0;x=Ia(40,d|0,144639,5)|0;y=B;B=0;if((((!(y&1)?(B=0,y=ya(427,k[h>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(y)|0,B=0,A=Ia(40,x|0,y|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,A|0,144645,14)|0,A=B,B=0,!(A&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,e|0,144540,86);A=B;B=0;do if(!(A&1)){B=0;eb(502,f|0,144660,13);y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(e);C=x;D=y;break}B=0;wa(510,g|0,j|0);y=B;B=0;if(y&1){y=Rb()|0;E=Q;F=y;G=1}else{B=0;ua(163,z|0,e|0,f|0,173,g|0);y=B;B=0;if(y&1)H=1;else{B=0;eb(503,z|0,1240,229);B=0;H=0}y=Rb()|0;x=Q;Yua(g);E=x;F=y;G=H}Yua(f);Yua(e);if(G){C=E;D=F}else{I=E;J=F;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(u);Ava(j);vva(i);Qb(J|0)}}else{y=Rb()|0;C=Q;D=y}while(0);zb(z|0);I=C;J=D;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(u);Ava(j);vva(i);Qb(J|0)}A=Rb()|0;I=Q;J=A;k[d>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(u);Ava(j);vva(i);Qb(J|0)}while(0);s=v;t=w;vva(i);Qb(t|0)}}t=k[a+56>>2]|0;i=ma(t,l)|0;w=i>>>0>1073741823?-1:i<<2;v=Rqa(w)|0;s=p+4|0;J=ma(i,s)|0;j=Rqa(J>>>0>1073741823?-1:J<<2)|0;if((i|0)>0){J=0;do{d=j+((ma(J,s)|0)+1<<2)|0;k[d>>2]=-1;J=J+1|0}while((J|0)!=(i|0))}i=k[a+52>>2]|0;J=Rqa(i>>>0>1073741823?-1:i<<2)|0;d=Rqa(w)|0;if((i|0)>0)WEa(J|0,-1,((i|0)>1?i:1)<<2|0)|0;i=Rqa(p<<2)|0;if((t|0)>0){p=i+4|0;w=i+8|0;I=i+-4|0;D=a+72|0;C=0;F=0;while(1){E=ma(C,l)|0;G=ma(C,o)|0;C=C+1|0;e=0;f=F;while(1){H=ma(e,l)|0;g=k[m+(H<<2)>>2]|0;h=(g|0)>0;if(h){c=H+1|0;H=k[D>>2]|0;q=0;do{k[i+(q<<2)>>2]=(k[H+((k[m+(c+q<<2)>>2]|0)+G<<2)>>2]|0)+-1;q=q+1|0}while((q|0)!=(g|0));if((g|0)>=2){q=((g|0)/2|0)+1|0;c=g;a:while(1){if((q|0)<2){H=I+(c<<2)|0;A=k[H>>2]|0;y=c+-1|0;k[H>>2]=k[i>>2];if((y|0)==1){K=A;break}else{L=A;M=q;N=y}}else{y=q+-1|0;L=k[I+(y<<2)>>2]|0;M=y;N=c}y=M<<1;b:do if((y|0)>(N|0))O=M;else{A=y;H=M;while(1){if((A|0)<(N|0)){x=A|1;P=(k[I+(A<<2)>>2]|0)<(k[I+(x<<2)>>2]|0)?x:A}else P=A;x=k[I+(P<<2)>>2]|0;R=I+(H<<2)|0;if((L|0)>=(x|0)){S=R;break}k[R>>2]=x;A=P<<1;if((A|0)>(N|0)){O=P;break b}else H=P}k[S>>2]=L;q=M;c=N;continue a}while(0);k[I+(O<<2)>>2]=L;q=M;c=N}k[i>>2]=K;T=K}else U=41}else U=41;if((U|0)==41){U=0;T=k[i>>2]|0}c=J+(T<<2)|0;q=k[c>>2]|0;c:do if((q|0)==-1)U=60;else{y=(k[p>>2]|0)+1|0;H=q;while(1){A=ma(H,s)|0;if((k[j+(A+5<<2)>>2]|0)==(y|0)?(k[j+(A+6<<2)>>2]|0)==((k[w>>2]|0)+1|0):0){V=A;W=H;break}H=k[d+(H<<2)>>2]|0;if((H|0)==-1){U=60;break c}}k[j+(V+1<<2)>>2]=C;k[v+(e+E<<2)>>2]=W;X=f}while(0);if((U|0)==60){U=0;H=ma(f,s)|0;k[j+(H<<2)>>2]=C;k[j+(H+2<<2)>>2]=k[n+(e<<2)>>2];k[j+(H+3<<2)>>2]=g;if(h?(y=H+4|0,k[j+(H+4<<2)>>2]=T+1,(g|0)!=1):0){H=1;do{k[j+(y+H<<2)>>2]=(k[i+(H<<2)>>2]|0)+1;H=H+1|0}while((H|0)!=(g|0))}k[v+(e+E<<2)>>2]=f;k[d+(f<<2)>>2]=q;k[c>>2]=f;X=f+1|0}e=e+1|0;if((e|0)>=(l|0)){Y=X;break}else f=X}if((C|0)>=(t|0)){Z=Y;break}else F=Y}}else Z=0;Tqa(J);Tqa(d);Tqa(i);Tqa(m);Tqa(n);n=ma(Z,s)|0;m=Rqa(n>>>0>1073741823?-1:n<<2)|0;if(!n){Tqa(j);_=a+76|0;k[_>>2]=m;$=a+60|0;k[$>>2]=Z;aa=a+68|0;k[aa>>2]=s;ba=a+88|0;k[ba>>2]=v;r=b;return}TEa(m|0,j|0,n<<2|0)|0;Tqa(j);_=a+76|0;k[_>>2]=m;$=a+60|0;k[$>>2]=Z;aa=a+68|0;k[aa>>2]=s;ba=a+88|0;k[ba>>2]=v;r=b;return}function foa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+92|0;if(k[h>>2]|0){r=b;return}j=k[a+52>>2]|0;l=Rqa(j>>>0>1073741823?-1:j<<2)|0;if(j)WEa(l|0,0,j<<2|0)|0;switch(k[a+48>>2]|0){case 621:{m=3;break}case 625:{m=6;break}case 623:{m=4;break}default:{j=d+56|0;n=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(j);Qb(q|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=d+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;v=Ia(40,d|0,144674,10)|0;w=B;B=0;if((((!(w&1)?(B=0,w=ya(427,k[a+40>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,v|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,146481,18)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,e|0,144685,112);y=B;B=0;do if(!(y&1)){B=0;eb(502,f|0,144798,37);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(e);z=v;A=w;break}B=0;wa(510,g|0,n|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;E=1}else{B=0;ua(163,x|0,e|0,f|0,36,g|0);w=B;B=0;if(w&1)F=1;else{B=0;eb(503,x|0,1240,229);B=0;F=0}w=Rb()|0;v=Q;Yua(g);C=v;D=w;E=F}Yua(f);Yua(e);if(E){z=C;A=D}else{G=C;H=D;k[d>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}}else{w=Rb()|0;z=Q;A=w}while(0);zb(x|0);G=z;H=A;k[d>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}y=Rb()|0;G=Q;H=y;k[d>>2]=27468;k[j>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(j);Qb(H|0)}while(0);p=t;q=u;vva(j);Qb(q|0)}}q=k[a+56>>2]|0;if((q|0)>0){j=k[a+32>>2]|0;u=a+72|0;a=0;while(1){if(!(i[j+a>>0]|0))I=a+1|0;else{t=ma(a,m)|0;p=k[u>>2]|0;H=a+1|0;n=0;do{k[l+((k[p+(n+t<<2)>>2]|0)+-1<<2)>>2]=H;n=n+1|0}while((n|0)<(m|0));I=H}if((I|0)<(q|0))a=I;else break}}k[h>>2]=l;r=b;return}function goa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+96|0;if(k[h>>2]|0){r=b;return}i=k[a+52>>2]|0;j=Rqa(i>>>0>1073741823?-1:i<<2)|0;if(i)WEa(j|0,0,i<<2|0)|0;switch(k[a+48>>2]|0){case 621:{l=3;break}case 623:{l=4;break}case 625:{l=6;break}default:{i=d+56|0;m=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(i);Qb(p|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;u=Ia(40,d|0,144836,22)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,e|0,144859,112);v=B;B=0;do if(!(v&1)){B=0;eb(502,f|0,144972,37);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);y=x;z=w;break}B=0;wa(510,g|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;A=Q;C=w;D=1}else{B=0;ua(163,u|0,e|0,f|0,42,g|0);w=B;B=0;if(w&1)E=1;else{B=0;eb(503,u|0,1240,229);B=0;E=0}w=Rb()|0;x=Q;Yua(g);A=x;C=w;D=E}Yua(f);Yua(e);if(D){y=A;z=C}else{F=A;G=C;k[d>>2]=27468;k[i>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(i);Qb(G|0)}}else{w=Rb()|0;y=Q;z=w}while(0);zb(u|0);F=y;G=z;k[d>>2]=27468;k[i>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(i);Qb(G|0)}v=Rb()|0;F=Q;G=v;k[d>>2]=27468;k[i>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(i);Qb(G|0)}while(0);o=s;p=t;vva(i);Qb(p|0)}}p=k[a+56>>2]|0;if((p|0)>0){i=k[a+72>>2]|0;a=0;do{t=ma(a,l)|0;s=0;do{o=j+((k[i+(s+t<<2)>>2]|0)+-1<<2)|0;k[o>>2]=(k[o>>2]|0)+1;s=s+1|0}while((s|0)<(l|0));a=a+1|0}while((a|0)<(p|0))}k[h>>2]=j;r=b;return}function hoa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0;f=r;r=r+2112|0;g=f+2100|0;h=f+2024|0;j=f+2020|0;l=f+1992|0;m=f+1856|0;n=f+2088|0;o=f+2076|0;p=f+2064|0;q=f+1704|0;s=f+2052|0;t=f+2040|0;u=f+2028|0;v=f+1552|0;w=f+2008|0;x=f+1996|0;y=f+1840|0;z=f+1416|0;A=f+1688|0;C=f+1404|0;D=f+1392|0;E=f+1256|0;F=f+1104|0;G=f+952|0;H=f+800|0;I=f+1120|0;J=f+512|0;K=f+228|0;L=f+216|0;M=f+968|0;N=f+204|0;O=f+192|0;P=f+180|0;R=f+816|0;S=f+168|0;T=f+156|0;U=f+144|0;V=f+664|0;W=f+132|0;X=f+120|0;Y=f+108|0;Z=f+528|0;_=f+96|0;$=f+84|0;aa=f+72|0;ba=f+376|0;ca=f+60|0;da=f+48|0;ea=f+36|0;fa=f+240|0;ga=f+24|0;ha=f+12|0;ia=f;ja=b+100|0;ka=k[ja>>2]|0;k[h>>2]=0;k[j>>2]=0;k[l>>2]=0;a:do switch(d|0){case 738:{la=b+52|0;na=k[la>>2]|0;if((na|0)>0){oa=b+36|0;pa=ka+1|0;qa=na;na=0;ra=0;while(1){if(!(k[(k[oa>>2]|0)+(na<<2)>>2]|0)){sa=qa;ta=ra}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,pa+na|0,na|0,ra|0,na|0,b|0,c|0,e|0);za=B;B=0;if(za&1){Aa=xa;break}ih(a,xa)|0;sa=k[la>>2]|0;ta=ra+1|0}na=na+1|0;if((na|0)>=(sa|0))break a;else{qa=sa;ra=ta}}ra=Rb()|0;qa=Q;Sqa(Aa);Ba=qa;Ca=ra;Qb(Ca|0)}break}case 739:{jqa(l,k[b+32>>2]|0,k[b+36>>2]|0,b,0);ra=b+56|0;if((k[ra>>2]|0)>0){qa=b+72|0;na=0;la=0;while(1){pa=na*3|0;oa=pa+ka|0;xa=k[l>>2]|0;if(!(i[xa+pa>>0]|0)){Da=xa;Ea=la}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,oa+1|0,oa|0,la|0,(k[(k[qa>>2]|0)+(pa<<2)>>2]|0)+-1|0,b|0,c|0,e|0);za=B;B=0;if(za&1){Fa=xa;break}ih(a,xa)|0;Da=k[l>>2]|0;Ea=la+1|0}xa=pa+1|0;if(!(i[Da+xa>>0]|0)){Ga=Da;Ha=Ea}else{za=Qqa(144)|0;B=0;Ka(13,za|0,oa+2|0,oa+1|0,Ea|0,(k[(k[qa>>2]|0)+(xa<<2)>>2]|0)+-1|0,b|0,c|0,e|0);xa=B;B=0;if(xa&1){Fa=za;break}ih(a,za)|0;Ga=k[l>>2]|0;Ha=Ea+1|0}za=pa+2|0;if(!(i[Ga+za>>0]|0))Ja=Ha;else{pa=Qqa(144)|0;B=0;Ka(13,pa|0,oa+3|0,oa+2|0,Ha|0,(k[(k[qa>>2]|0)+(za<<2)>>2]|0)+-1|0,b|0,c|0,e|0);za=B;B=0;if(za&1){Fa=pa;break}ih(a,pa)|0;Ja=Ha+1|0}na=na+1|0;if((na|0)>=(k[ra>>2]|0))break a;else la=Ja}la=Rb()|0;ra=Q;Sqa(Fa);Ba=ra;Ca=la;Qb(Ca|0)}break}case 740:{la=b+52|0;ra=k[la>>2]|0;b:do if((ra|0)>0){na=b+36|0;qa=ka+1|0;pa=ra;za=0;oa=0;while(1){if(!(k[(k[na>>2]|0)+(za<<2)>>2]|0)){La=pa;Ma=oa}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,qa+za|0,za|0,oa|0,za|0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){Oa=xa;break}ih(a,xa)|0;La=k[la>>2]|0;Ma=oa+1|0}za=za+1|0;if((za|0)>=(La|0)){Pa=Ma;break b}else{pa=La;oa=Ma}}oa=Rb()|0;pa=Q;Sqa(Oa);Ba=pa;Ca=oa;Qb(Ca|0)}else Pa=0;while(0);ra=b+56|0;oa=k[ra>>2]|0;if((oa|0)>0){pa=b+32|0;za=ka+1|0;qa=oa;oa=0;na=Pa;while(1){if(!(i[(k[pa>>2]|0)+oa>>0]|0)){Qa=qa;Ra=na}else{xa=Qqa(144)|0;Na=k[la>>2]|0;B=0;Ka(13,xa|0,za+oa+Na|0,Na+oa|0,na|0,0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){Sa=xa;break}ih(a,xa)|0;Qa=k[ra>>2]|0;Ra=na+1|0}oa=oa+1|0;if((oa|0)>=(Qa|0))break a;else{qa=Qa;na=Ra}}na=Rb()|0;qa=Q;Sqa(Sa);Ba=qa;Ca=na;Qb(Ca|0)}break}case 741:{na=b+52|0;qa=k[na>>2]|0;c:do if((qa|0)>0){oa=b+36|0;ra=ka+1|0;za=qa;la=0;pa=0;while(1){if(!(k[(k[oa>>2]|0)+(la<<2)>>2]|0)){Ta=za;Ua=pa}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,ra+la|0,la|0,pa|0,la|0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){Va=xa;break}ih(a,xa)|0;Ta=k[na>>2]|0;Ua=pa+1|0}la=la+1|0;if((la|0)>=(Ta|0)){Wa=Ua;break c}else{za=Ta;pa=Ua}}pa=Rb()|0;za=Q;Sqa(Va);Ba=za;Ca=pa;Qb(Ca|0)}else Wa=0;while(0);qa=b+56|0;pa=k[qa>>2]|0;if((pa|0)>0){za=b+32|0;la=ka+1|0;ra=pa;pa=0;oa=Wa;while(1){if(!(i[(k[za>>2]|0)+pa>>0]|0)){Ya=ra;Za=oa}else{xa=Qqa(144)|0;Na=k[na>>2]|0;B=0;Ka(13,xa|0,la+pa+Na|0,Na+pa|0,oa|0,0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){_a=xa;break}En(xa);ih(a,xa)|0;Ya=k[qa>>2]|0;Za=oa+1|0}pa=pa+1|0;if((pa|0)>=(Ya|0))break a;else{ra=Ya;oa=Za}}oa=Rb()|0;ra=Q;Sqa(_a);Ba=ra;Ca=oa;Qb(Ca|0)}break}case 746:{lqa(j,b);oa=b+52|0;ra=k[oa>>2]|0;d:do if((ra|0)>0){pa=b+36|0;qa=ka+1|0;la=ra;na=0;za=0;while(1){if(!(k[(k[pa>>2]|0)+(na<<2)>>2]|0)){$a=la;ab=za}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,qa+na|0,na|0,za|0,na|0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){bb=xa;break}ih(a,xa)|0;$a=k[oa>>2]|0;ab=za+1|0}na=na+1|0;if((na|0)>=($a|0)){cb=$a;db=ab;break d}else{la=$a;za=ab}}za=Rb()|0;la=Q;Sqa(bb);Ba=la;Ca=za;Qb(Ca|0)}else{cb=ra;db=0}while(0);ra=b+64|0;za=k[ra>>2]|0;if((za|0)>0){la=b+80|0;na=ka+1|0;qa=za;za=cb;pa=0;xa=db;e:while(1){do if((k[(k[la>>2]|0)+((pa*3|0)+2<<2)>>2]|0)==2){if(!(i[(k[j>>2]|0)+pa>>0]|0)){fb=qa;gb=za+1|0;hb=xa;break}Na=Qqa(144)|0;ib=za+1|0;B=0;Ka(13,Na|0,na+pa+(k[oa>>2]|0)|0,ib|0,xa|0,0,b|0,c|0,e|0);jb=B;B=0;if(jb&1){kb=Na;break e}ih(a,Na)|0;fb=k[ra>>2]|0;gb=ib;hb=xa+1|0}else{fb=qa;gb=za;hb=xa}while(0);pa=pa+1|0;if((pa|0)>=(fb|0))break a;else{qa=fb;za=gb;xa=hb}}xa=Rb()|0;za=Q;Sqa(kb);Ba=za;Ca=xa;Qb(Ca|0)}break}case 747:{lqa(j,b);xa=b+52|0;za=k[xa>>2]|0;f:do if((za|0)>0){qa=b+36|0;pa=ka+1|0;ra=za;oa=0;na=0;while(1){if(!(k[(k[qa>>2]|0)+(oa<<2)>>2]|0)){lb=ra;mb=na}else{la=Qqa(144)|0;B=0;Ka(13,la|0,pa+oa|0,oa|0,na|0,oa|0,b|0,c|0,e|0);ib=B;B=0;if(ib&1){nb=la;break}ih(a,la)|0;lb=k[xa>>2]|0;mb=na+1|0}oa=oa+1|0;if((oa|0)>=(lb|0)){ob=lb;pb=mb;break f}else{ra=lb;na=mb}}na=Rb()|0;ra=Q;Sqa(nb);Ba=ra;Ca=na;Qb(Ca|0)}else{ob=za;pb=0}while(0);za=b+64|0;na=k[za>>2]|0;if((na|0)>0){ra=b+80|0;oa=ka+1|0;pa=ka+2|0;qa=na;na=ob;la=0;ib=pb;g:while(1){do if((k[(k[ra>>2]|0)+((la*3|0)+2<<2)>>2]|0)==2){if(!(i[(k[j>>2]|0)+la>>0]|0)){qb=qa;rb=na+2|0;sb=ib;break}Na=Qqa(144)|0;jb=la<<1;B=0;Ka(13,Na|0,oa+jb+(k[xa>>2]|0)|0,na+1|0,ib|0,0,b|0,c|0,e|0);tb=B;B=0;if(tb&1){ub=Na;vb=83;break g}ih(a,Na)|0;Na=Qqa(144)|0;tb=na+2|0;B=0;Ka(13,Na|0,pa+jb+(k[xa>>2]|0)|0,tb|0,ib+1|0,0,b|0,c|0,e|0);jb=B;B=0;if(jb&1){wb=Na;vb=84;break g}ih(a,Na)|0;qb=k[za>>2]|0;rb=tb;sb=ib+2|0}else{qb=qa;rb=na;sb=ib}while(0);la=la+1|0;if((la|0)>=(qb|0))break a;else{qa=qb;na=rb;ib=sb}}if((vb|0)==83){ib=Rb()|0;na=Q;Sqa(ub);Ba=na;Ca=ib;Qb(Ca|0)}else if((vb|0)==84){ib=Rb()|0;na=Q;Sqa(wb);Ba=na;Ca=ib;Qb(Ca|0)}}break}case 745:{lqa(j,b);ib=b+52|0;na=k[ib>>2]|0;h:do if((na|0)>0){qa=b+36|0;la=ka+1|0;za=na;xa=0;pa=0;while(1){if(!(k[(k[qa>>2]|0)+(xa<<2)>>2]|0)){xb=za;yb=pa}else{oa=Qqa(144)|0;B=0;Ka(13,oa|0,la+xa|0,xa|0,pa|0,xa|0,b|0,c|0,e|0);ra=B;B=0;if(ra&1){Bb=oa;break}ih(a,oa)|0;xb=k[ib>>2]|0;yb=pa+1|0}xa=xa+1|0;if((xa|0)>=(xb|0)){Cb=xb;Db=yb;break h}else{za=xb;pa=yb}}pa=Rb()|0;za=Q;Sqa(Bb);Ba=za;Ca=pa;Qb(Ca|0)}else{Cb=na;Db=0}while(0);na=b+64|0;pa=k[na>>2]|0;if((pa|0)>0){za=b+80|0;xa=ka+1|0;la=pa;pa=Cb;qa=0;oa=Db;i:while(1){do if((k[(k[za>>2]|0)+((qa*3|0)+2<<2)>>2]|0)==2){Eb=la;Fb=pa;Gb=oa}else{if(!(i[(k[j>>2]|0)+qa>>0]|0)){Eb=la;Fb=pa+1|0;Gb=oa;break}ra=Qqa(144)|0;tb=pa+1|0;B=0;Ka(13,ra|0,xa+qa+(k[ib>>2]|0)|0,tb|0,oa|0,0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){Hb=ra;break i}ih(a,ra)|0;Eb=k[na>>2]|0;Fb=tb;Gb=oa+1|0}while(0);qa=qa+1|0;if((qa|0)>=(Eb|0))break a;else{la=Eb;pa=Fb;oa=Gb}}oa=Rb()|0;pa=Q;Sqa(Hb);Ba=pa;Ca=oa;Qb(Ca|0)}break}case 742:{lqa(j,b);oa=b+52|0;pa=k[oa>>2]|0;j:do if((pa|0)>0){la=b+36|0;qa=ka+1|0;na=pa;ib=0;xa=0;while(1){if(!(k[(k[la>>2]|0)+(ib<<2)>>2]|0)){Ib=na;Jb=xa}else{za=Qqa(144)|0;B=0;Ka(13,za|0,qa+ib|0,ib|0,xa|0,ib|0,b|0,c|0,e|0);tb=B;B=0;if(tb&1){Kb=za;break}ih(a,za)|0;Ib=k[oa>>2]|0;Jb=xa+1|0}ib=ib+1|0;if((ib|0)>=(Ib|0)){Lb=Ib;Mb=Jb;break j}else{na=Ib;xa=Jb}}xa=Rb()|0;na=Q;Sqa(Kb);Ba=na;Ca=xa;Qb(Ca|0)}else{Lb=pa;Mb=0}while(0);pa=b+64|0;xa=k[pa>>2]|0;do if((xa|0)>0){na=ka+1|0;ib=xa;qa=0;la=Mb;while(1){if(!(i[(k[j>>2]|0)+qa>>0]|0)){Nb=ib;Ob=la}else{za=Qqa(144)|0;tb=k[oa>>2]|0;B=0;Ka(13,za|0,na+qa+tb|0,tb+qa|0,la|0,0,b|0,c|0,e|0);tb=B;B=0;if(tb&1){Pb=za;break}ih(a,za)|0;Nb=k[pa>>2]|0;Ob=la+1|0}qa=qa+1|0;if((qa|0)>=(Nb|0)){Sb=Nb;Tb=Ob;vb=116;break}else{ib=Nb;la=Ob}}if((vb|0)==116){Ub=Sb;Vb=k[oa>>2]|0;Wb=Tb;break}la=Rb()|0;ib=Q;Sqa(Pb);Ba=ib;Ca=la;Qb(Ca|0)}else{Ub=xa;Vb=Lb;Wb=Mb}while(0);if((k[b+48>>2]|0)==625?(mqa(h,b),xa=b+60|0,la=k[xa>>2]|0,(la|0)>0):0){ib=b+68|0;qa=b+76|0;na=ka+1+Ub+Vb|0;za=la;la=0;tb=Wb;k:while(1){ra=(ma(k[ib>>2]|0,la)|0)+2|0;switch(k[(k[qa>>2]|0)+(ra<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+la>>0]|0)){Xb=za;Yb=tb}else{ra=Qqa(144)|0;B=0;Ka(13,ra|0,na+la|0,(k[oa>>2]|0)+la+(k[pa>>2]|0)|0,tb|0,0,b|0,c|0,e|0);Na=B;B=0;if(Na&1){Zb=ra;vb=124;break k}ih(a,ra)|0;Xb=k[xa>>2]|0;Yb=tb+1|0}break}case 1:{Xb=za;Yb=tb;break}default:break k}la=la+1|0;if((la|0)>=(Xb|0))break a;else{za=Xb;tb=Yb}}if((vb|0)==124){tb=Rb()|0;za=Q;Sqa(Zb);Ba=za;Ca=tb;Qb(Ca|0)}tb=m+56|0;za=m+4|0;k[m>>2]=27524;k[tb>>2]=27544;B=0;wa(508,m+56|0,za|0);la=B;B=0;if(la&1){la=Rb()|0;_b=Q;$b=la;vva(tb);Qb($b|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[tb>>2]=27488;B=0;va(448,za|0);la=B;B=0;do if(la&1){xa=Rb()|0;ac=Q;bc=xa}else{k[za>>2]=27560;xa=m+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,za|0,g|0);pa=B;B=0;if(pa&1){pa=Rb()|0;oa=Q;Yua(g);Yua(xa);Ava(za);ac=oa;bc=pa;break}Yua(g);B=0;pa=Ia(40,m|0,145010,13)|0;oa=B;B=0;l:do if(!(oa&1)?(B=0,Xa(239,pa|0,0)|0,na=B,B=0,!(na&1)):0){na=Ab(20)|0;B=0;eb(502,n|0,145024,86);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,o|0,145111,11);ib=B;B=0;if(ib&1){ib=Rb()|0;ra=Q;Yua(n);cc=ra;dc=ib;break}B=0;wa(510,p|0,za|0);ib=B;B=0;if(ib&1){ib=Rb()|0;ec=Q;fc=ib;gc=1}else{B=0;ua(163,na|0,n|0,o|0,159,p|0);ib=B;B=0;if(ib&1)hc=1;else{B=0;eb(503,na|0,1240,229);B=0;hc=0}ib=Rb()|0;ra=Q;Yua(p);ec=ra;fc=ib;gc=hc}Yua(o);Yua(n);if(gc){cc=ec;dc=fc}else{ic=ec;jc=fc;break l}}else{ib=Rb()|0;cc=Q;dc=ib}while(0);zb(na|0);ic=cc;jc=dc}else vb=140;while(0);if((vb|0)==140){pa=Rb()|0;ic=Q;jc=pa}k[m>>2]=27468;k[tb>>2]=27488;k[za>>2]=27560;Yua(xa);Ava(za);vva(tb);Ba=ic;Ca=jc;Qb(Ca|0)}while(0);_b=ac;$b=bc;vva(tb);Qb($b|0)}break}case 743:{lqa(j,b);za=b+52|0;la=k[za>>2]|0;m:do if((la|0)>0){pa=b+36|0;oa=ka+1|0;qa=la;ib=0;ra=0;while(1){if(!(k[(k[pa>>2]|0)+(ib<<2)>>2]|0)){kc=qa;lc=ra}else{Na=Qqa(144)|0;B=0;Ka(13,Na|0,oa+ib|0,ib|0,ra|0,ib|0,b|0,c|0,e|0);jb=B;B=0;if(jb&1){mc=Na;break}ih(a,Na)|0;kc=k[za>>2]|0;lc=ra+1|0}ib=ib+1|0;if((ib|0)>=(kc|0)){nc=kc;oc=lc;break m}else{qa=kc;ra=lc}}ra=Rb()|0;qa=Q;Sqa(mc);Ba=qa;Ca=ra;Qb(Ca|0)}else{nc=la;oc=0}while(0);la=b+64|0;tb=k[la>>2]|0;do if((tb|0)>0){ra=ka+1|0;qa=tb;ib=0;oa=oc;while(1){if(!(i[(k[j>>2]|0)+ib>>0]|0)){pc=qa;qc=oa}else{pa=Qqa(144)|0;xa=k[za>>2]|0;B=0;Ka(13,pa|0,ra+ib+xa|0,xa+ib|0,oa|0,0,b|0,c|0,e|0);xa=B;B=0;if(xa&1){rc=pa;break}ih(a,pa)|0;pc=k[la>>2]|0;qc=oa+1|0}ib=ib+1|0;if((ib|0)>=(pc|0)){sc=pc;tc=qc;vb=163;break}else{qa=pc;oa=qc}}if((vb|0)==163){uc=sc;vc=k[za>>2]|0;wc=tc;break}oa=Rb()|0;qa=Q;Sqa(rc);Ba=qa;Ca=oa;Qb(Ca|0)}else{uc=tb;vc=nc;wc=oc}while(0);tb=uc+ka+vc|0;if((k[b+48>>2]|0)==625){mqa(h,b);oa=b+60|0;qa=k[oa>>2]|0;n:do if((qa|0)>0){ib=b+68|0;ra=b+76|0;pa=tb+1|0;xa=qa;Na=0;jb=wc;o:while(1){xc=(ma(k[ib>>2]|0,Na)|0)+2|0;switch(k[(k[ra>>2]|0)+(xc<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+Na>>0]|0)){yc=xa;zc=jb}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,pa+Na|0,(k[za>>2]|0)+Na+(k[la>>2]|0)|0,jb|0,0,b|0,c|0,e|0);Ac=B;B=0;if(Ac&1){Bc=xc;vb=171;break o}ih(a,xc)|0;yc=k[oa>>2]|0;zc=jb+1|0}break}case 1:{yc=xa;zc=jb;break}default:break o}Na=Na+1|0;if((Na|0)>=(yc|0)){Cc=yc;Dc=zc;break n}else{xa=yc;jb=zc}}if((vb|0)==171){jb=Rb()|0;xa=Q;Sqa(Bc);Ba=xa;Ca=jb;Qb(Ca|0)}jb=q+56|0;xa=q+4|0;k[q>>2]=27524;k[jb>>2]=27544;B=0;wa(508,q+56|0,xa|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Ec=Q;Fc=Na;vva(jb);Qb(Fc|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[jb>>2]=27488;B=0;va(448,xa|0);Na=B;B=0;do if(Na&1){pa=Rb()|0;Gc=Q;Hc=pa}else{k[xa>>2]=27560;pa=q+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[q+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,xa|0,g|0);ra=B;B=0;if(ra&1){ra=Rb()|0;ib=Q;Yua(g);Yua(pa);Ava(xa);Gc=ib;Hc=ra;break}Yua(g);B=0;ra=Ia(40,q|0,145010,13)|0;ib=B;B=0;p:do if(!(ib&1)?(B=0,Xa(239,ra|0,0)|0,xc=B,B=0,!(xc&1)):0){xc=Ab(20)|0;B=0;eb(502,s|0,145024,86);Ac=B;B=0;do if(!(Ac&1)){B=0;eb(502,t|0,145111,11);Ic=B;B=0;if(Ic&1){Ic=Rb()|0;Jc=Q;Yua(s);Kc=Jc;Lc=Ic;break}B=0;wa(510,u|0,xa|0);Ic=B;B=0;if(Ic&1){Ic=Rb()|0;Mc=1;Nc=Q;Oc=Ic}else{B=0;ua(163,xc|0,s|0,t|0,190,u|0);Ic=B;B=0;if(Ic&1)Pc=1;else{B=0;eb(503,xc|0,1240,229);B=0;Pc=0}Ic=Rb()|0;Jc=Q;Yua(u);Mc=Pc;Nc=Jc;Oc=Ic}Yua(t);Yua(s);if(Mc){Kc=Nc;Lc=Oc}else{Qc=Nc;Rc=Oc;break p}}else{Ic=Rb()|0;Kc=Q;Lc=Ic}while(0);zb(xc|0);Qc=Kc;Rc=Lc}else vb=187;while(0);if((vb|0)==187){ra=Rb()|0;Qc=Q;Rc=ra}k[q>>2]=27468;k[jb>>2]=27488;k[xa>>2]=27560;Yua(pa);Ava(xa);vva(jb);Ba=Qc;Ca=Rc;Qb(Ca|0)}while(0);Ec=Gc;Fc=Hc;vva(jb);Qb(Fc|0)}else{Cc=qa;Dc=wc}while(0);Sc=Cc+tb|0;Tc=Dc}else{Sc=tb;Tc=wc}qa=b+56|0;oa=k[qa>>2]|0;if((oa|0)>0){la=b+32|0;za=Sc+1|0;xa=oa;oa=0;Na=Tc;while(1){if(!(i[(k[la>>2]|0)+oa>>0]|0)){Uc=xa;Vc=Na}else{ra=Qqa(144)|0;B=0;Ka(13,ra|0,za+oa|0,oa+Sc-(k[ja>>2]|0)|0,Na|0,0,b|0,c|0,e|0);ib=B;B=0;if(ib&1){Wc=ra;break}ih(a,ra)|0;Uc=k[qa>>2]|0;Vc=Na+1|0}oa=oa+1|0;if((oa|0)>=(Uc|0))break a;else{xa=Uc;Na=Vc}}Na=Rb()|0;xa=Q;Sqa(Wc);Ba=xa;Ca=Na;Qb(Ca|0)}break}case 748:{lqa(j,b);mqa(h,b);Na=b+52|0;xa=k[Na>>2]|0;q:do if((xa|0)>0){oa=b+36|0;qa=ka+1|0;za=xa;la=0;tb=0;while(1){if(!(k[(k[oa>>2]|0)+(la<<2)>>2]|0)){Xc=za;Yc=tb}else{ra=Qqa(144)|0;B=0;Ka(13,ra|0,qa+la|0,la|0,tb|0,la|0,b|0,c|0,e|0);ib=B;B=0;if(ib&1){Zc=ra;break}ih(a,ra)|0;Xc=k[Na>>2]|0;Yc=tb+1|0}la=la+1|0;if((la|0)>=(Xc|0)){_c=Xc;$c=Yc;break q}else{za=Xc;tb=Yc}}tb=Rb()|0;za=Q;Sqa(Zc);Ba=za;Ca=tb;Qb(Ca|0)}else{_c=xa;$c=0}while(0);xa=b+64|0;tb=k[xa>>2]|0;r:do if((tb|0)>0){za=b+80|0;la=ka+1|0;qa=ka+2|0;oa=ka+3|0;jb=_c;ra=0;ib=$c;s:while(1){na=ra*3|0;t:do switch(k[(k[za>>2]|0)+(na+2<<2)>>2]|0){case 2:{if(!(i[(k[j>>2]|0)+ra>>0]|0)){ad=jb+3|0;bd=ib;break t}Ac=Qqa(144)|0;B=0;Ka(13,Ac|0,la+na+(k[Na>>2]|0)|0,jb+1|0,ib|0,0,b|0,c|0,e|0);Ic=B;B=0;if(Ic&1){cd=Ac;vb=220;break s}ih(a,Ac)|0;Ac=Qqa(144)|0;B=0;Ka(13,Ac|0,qa+na+(k[Na>>2]|0)|0,jb+2|0,ib+1|0,0,b|0,c|0,e|0);Ic=B;B=0;if(Ic&1){dd=Ac;vb=221;break s}ih(a,Ac)|0;Ac=Qqa(144)|0;Ic=jb+3|0;B=0;Ka(13,Ac|0,oa+na+(k[Na>>2]|0)|0,Ic|0,ib+2|0,0,b|0,c|0,e|0);Jc=B;B=0;if(Jc&1){ed=Ac;vb=222;break s}ih(a,Ac)|0;ad=Ic;bd=ib+3|0;break}case 1:{if(!(i[(k[j>>2]|0)+ra>>0]|0)){ad=jb+1|0;bd=ib;break t}Ic=Qqa(144)|0;Ac=jb+1|0;B=0;Ka(13,Ic|0,la+na+(k[Na>>2]|0)|0,Ac|0,ib|0,0,b|0,c|0,e|0);Jc=B;B=0;if(Jc&1){fd=Ic;vb=227;break s}ih(a,Ic)|0;ad=Ac;bd=ib+1|0;break}default:{vb=228;break s}}while(0);ra=ra+1|0;na=k[xa>>2]|0;if((ra|0)>=(na|0)){gd=na;hd=ad;id=bd;break r}else{jb=ad;ib=bd}}if((vb|0)==220){ib=Rb()|0;jb=Q;Sqa(cd);Ba=jb;Ca=ib;Qb(Ca|0)}else if((vb|0)==221){ib=Rb()|0;jb=Q;Sqa(dd);Ba=jb;Ca=ib;Qb(Ca|0)}else if((vb|0)==222){ib=Rb()|0;jb=Q;Sqa(ed);Ba=jb;Ca=ib;Qb(Ca|0)}else if((vb|0)==227){ib=Rb()|0;jb=Q;Sqa(fd);Ba=jb;Ca=ib;Qb(Ca|0)}else if((vb|0)==228){ib=v+56|0;jb=v+4|0;k[v>>2]=27524;k[ib>>2]=27544;B=0;wa(508,v+56|0,jb|0);ra=B;B=0;if(ra&1){ra=Rb()|0;jd=Q;kd=ra;vva(ib);Qb(kd|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[ib>>2]=27488;B=0;va(448,jb|0);ra=B;B=0;do if(ra&1){la=Rb()|0;ld=Q;md=la}else{k[jb>>2]=27560;la=v+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[v+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,jb|0,g|0);oa=B;B=0;if(oa&1){oa=Rb()|0;qa=Q;Yua(g);Yua(la);Ava(jb);ld=qa;md=oa;break}Yua(g);B=0;oa=Ia(40,v|0,145010,13)|0;qa=B;B=0;u:do if(!(qa&1)?(B=0,Xa(239,oa|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,w|0,145024,86);na=B;B=0;do if(!(na&1)){B=0;eb(502,x|0,145111,11);pa=B;B=0;if(pa&1){pa=Rb()|0;Ac=Q;Yua(w);nd=Ac;od=pa;break}B=0;wa(510,y|0,jb|0);pa=B;B=0;if(pa&1){pa=Rb()|0;pd=1;qd=Q;rd=pa}else{B=0;ua(163,za|0,w|0,x|0,230,y|0);pa=B;B=0;if(pa&1)sd=1;else{B=0;eb(503,za|0,1240,229);B=0;sd=0}pa=Rb()|0;Ac=Q;Yua(y);pd=sd;qd=Ac;rd=pa}Yua(x);Yua(w);if(pd){nd=qd;od=rd}else{td=qd;ud=rd;break u}}else{pa=Rb()|0;nd=Q;od=pa}while(0);zb(za|0);td=nd;ud=od}else vb=243;while(0);if((vb|0)==243){oa=Rb()|0;td=Q;ud=oa}k[v>>2]=27468;k[ib>>2]=27488;k[jb>>2]=27560;Yua(la);Ava(jb);vva(ib);Ba=td;Ca=ud;Qb(Ca|0)}while(0);jd=ld;kd=md;vva(ib);Qb(kd|0)}}else{gd=tb;hd=_c;id=$c}while(0);tb=b+60|0;xa=k[tb>>2]|0;if((xa|0)>0){jb=b+68|0;ra=b+76|0;oa=(k[Na>>2]|0)+ka|0;qa=xa;xa=hd;na=0;xc=id;v:while(1){pa=(ma(k[jb>>2]|0,na)|0)+2|0;w:do switch(k[(k[ra>>2]|0)+(pa<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+na>>0]|0)){vd=qa;wd=xa+3|0;xd=xc;break w}Ac=Qqa(144)|0;Ic=oa+((na+gd|0)*3|0)|0;B=0;Ka(13,Ac|0,Ic+1|0,xa+1|0,xc|0,0,b|0,c|0,e|0);Jc=B;B=0;if(Jc&1){yd=Ac;vb=261;break v}ih(a,Ac)|0;Ac=Qqa(144)|0;B=0;Ka(13,Ac|0,Ic+2|0,xa+2|0,xc+1|0,0,b|0,c|0,e|0);Jc=B;B=0;if(Jc&1){zd=Ac;vb=262;break v}ih(a,Ac)|0;Ac=Qqa(144)|0;Jc=xa+3|0;B=0;Ka(13,Ac|0,Ic+3|0,Jc|0,xc+2|0,0,b|0,c|0,e|0);Ic=B;B=0;if(Ic&1){Ad=Ac;vb=263;break v}ih(a,Ac)|0;vd=k[tb>>2]|0;wd=Jc;xd=xc+3|0;break}case 1:{vd=qa;wd=xa;xd=xc;break}default:{vb=264;break v}}while(0);na=na+1|0;if((na|0)>=(vd|0))break a;else{qa=vd;xa=wd;xc=xd}}if((vb|0)==261){xc=Rb()|0;xa=Q;Sqa(yd);Ba=xa;Ca=xc;Qb(Ca|0)}else if((vb|0)==262){xc=Rb()|0;xa=Q;Sqa(zd);Ba=xa;Ca=xc;Qb(Ca|0)}else if((vb|0)==263){xc=Rb()|0;xa=Q;Sqa(Ad);Ba=xa;Ca=xc;Qb(Ca|0)}else if((vb|0)==264){xc=z+56|0;xa=z+4|0;k[z>>2]=27524;k[xc>>2]=27544;B=0;wa(508,z+56|0,xa|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Bd=Q;Cd=qa;vva(xc);Qb(Cd|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[xc>>2]=27488;B=0;va(448,xa|0);qa=B;B=0;do if(qa&1){na=Rb()|0;Dd=Q;Ed=na}else{k[xa>>2]=27560;na=z+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[z+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,xa|0,g|0);tb=B;B=0;if(tb&1){tb=Rb()|0;oa=Q;Yua(g);Yua(na);Ava(xa);Dd=oa;Ed=tb;break}Yua(g);B=0;tb=Ia(40,z|0,145010,13)|0;oa=B;B=0;x:do if(!(oa&1)?(B=0,Xa(239,tb|0,0)|0,ra=B,B=0,!(ra&1)):0){ra=Ab(20)|0;B=0;eb(502,A|0,145024,86);jb=B;B=0;do if(!(jb&1)){B=0;eb(502,C|0,145111,11);Na=B;B=0;if(Na&1){Na=Rb()|0;pa=Q;Yua(A);Fd=pa;Gd=Na;break}B=0;wa(510,D|0,xa|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Hd=Q;Id=Na;Jd=1}else{B=0;ua(163,ra|0,A|0,C|0,250,D|0);Na=B;B=0;if(Na&1)Kd=1;else{B=0;eb(503,ra|0,1240,229);B=0;Kd=0}Na=Rb()|0;pa=Q;Yua(D);Hd=pa;Id=Na;Jd=Kd}Yua(C);Yua(A);if(Jd){Fd=Hd;Gd=Id}else{Ld=Hd;Md=Id;break x}}else{Na=Rb()|0;Fd=Q;Gd=Na}while(0);zb(ra|0);Ld=Fd;Md=Gd}else vb=279;while(0);if((vb|0)==279){tb=Rb()|0;Ld=Q;Md=tb}k[z>>2]=27468;k[xc>>2]=27488;k[xa>>2]=27560;Yua(na);Ava(xa);vva(xc);Ba=Ld;Ca=Md;Qb(Ca|0)}while(0);Bd=Dd;Cd=Ed;vva(xc);Qb(Cd|0)}}break}case 749:{xa=b+52|0;qa=k[xa>>2]|0;if((qa|0)>0){tb=b+36|0;oa=ka+1|0;jb=qa;qa=0;la=0;while(1){if(!(k[(k[tb>>2]|0)+(qa<<2)>>2]|0)){Nd=jb;Od=la}else{Na=Qqa(144)|0;B=0;Ka(13,Na|0,oa+qa|0,qa|0,la|0,qa|0,b|0,c|0,543);pa=B;B=0;if(pa&1){Pd=Na;vb=291;break}ih(a,Na)|0;Nd=k[xa>>2]|0;Od=la+1|0}qa=qa+1|0;if((qa|0)>=(Nd|0)){Qd=Nd;Rd=Od;break}else{jb=Nd;la=Od}}if((vb|0)==291){la=Rb()|0;jb=Q;Sqa(Pd);Ba=jb;Ca=la;Qb(Ca|0)}if((Qd|0)>0){la=b+36|0;jb=ka+1+Qd|0;qa=Qd;oa=0;tb=Rd;while(1){if(!(k[(k[la>>2]|0)+(oa<<2)>>2]|0)){Sd=qa;Td=tb}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,jb+oa|0,qa+oa|0,tb|0,oa|0,b|0,c|0,544);Na=B;B=0;if(Na&1){Ud=xc;break}ih(a,xc)|0;Sd=k[xa>>2]|0;Td=tb+1|0}oa=oa+1|0;if((oa|0)>=(Sd|0))break a;else{qa=Sd;tb=Td}}tb=Rb()|0;qa=Q;Sqa(Ud);Ba=qa;Ca=tb;Qb(Ca|0)}}break}case 750:{tb=b+52|0;qa=k[tb>>2]|0;if((qa|0)>0){oa=b+36|0;xa=ka+1|0;jb=qa;qa=0;la=0;while(1){if(!(k[(k[oa>>2]|0)+(qa<<2)>>2]|0)){Vd=jb;Wd=la}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,xa+qa|0,qa|0,la|0,qa|0,b|0,c|0,543);Na=B;B=0;if(Na&1){Xd=xc;vb=303;break}ih(a,xc)|0;Vd=k[tb>>2]|0;Wd=la+1|0}qa=qa+1|0;if((qa|0)>=(Vd|0)){Yd=Vd;Zd=Wd;break}else{jb=Vd;la=Wd}}if((vb|0)==303){la=Rb()|0;jb=Q;Sqa(Xd);Ba=jb;Ca=la;Qb(Ca|0)}if((Yd|0)>0){la=b+36|0;jb=ka+1+Yd|0;qa=Yd;xa=0;oa=Zd;while(1){if(!(k[(k[la>>2]|0)+(xa<<2)>>2]|0)){_d=qa;$d=oa}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,jb+xa|0,qa+xa|0,oa|0,xa|0,b|0,c|0,544);Na=B;B=0;if(Na&1){ae=xc;break}ih(a,xc)|0;_d=k[tb>>2]|0;$d=oa+1|0}xa=xa+1|0;if((xa|0)>=(_d|0))break a;else{qa=_d;oa=$d}}oa=Rb()|0;qa=Q;Sqa(ae);Ba=qa;Ca=oa;Qb(Ca|0)}}break}case 752:{oa=b+52|0;qa=k[oa>>2]|0;y:do if((qa|0)>0){xa=b+36|0;tb=ka+1|0;jb=qa;la=0;xc=0;while(1){if(!(k[(k[xa>>2]|0)+(la<<2)>>2]|0)){be=jb;ce=xc}else{Na=Qqa(144)|0;B=0;Ka(13,Na|0,tb+la|0,la|0,xc|0,la|0,b|0,c|0,543);pa=B;B=0;if(pa&1){de=Na;break}ih(a,Na)|0;be=k[oa>>2]|0;ce=xc+1|0}la=la+1|0;if((la|0)>=(be|0)){ee=be;fe=ce;break y}else{jb=be;xc=ce}}xc=Rb()|0;jb=Q;Sqa(de);Ba=jb;Ca=xc;Qb(Ca|0)}else{ee=qa;fe=0}while(0);qa=b+56|0;xc=k[qa>>2]|0;do if((xc|0)>0){jb=b+32|0;la=ka+1|0;tb=xc;xa=0;na=fe;while(1){if(!(i[(k[jb>>2]|0)+xa>>0]|0)){ge=tb;he=na}else{Na=Qqa(144)|0;pa=k[oa>>2]|0;B=0;Ka(13,Na|0,la+xa+pa|0,pa+xa|0,na|0,0,b|0,c|0,543);pa=B;B=0;if(pa&1){ie=Na;break}En(Na);ih(a,Na)|0;ge=k[qa>>2]|0;he=na+1|0}xa=xa+1|0;if((xa|0)>=(ge|0)){je=ge;ke=he;vb=324;break}else{tb=ge;na=he}}if((vb|0)==324){le=je;me=k[oa>>2]|0;ne=ke;break}na=Rb()|0;tb=Q;Sqa(ie);Ba=tb;Ca=na;Qb(Ca|0)}else{le=xc;me=ee;ne=fe}while(0);if((me|0)>0){xc=b+36|0;na=ka+1+le+me|0;tb=me;xa=0;la=ne;while(1){if(!(k[(k[xc>>2]|0)+(xa<<2)>>2]|0)){oe=tb;pe=la}else{jb=Qqa(144)|0;B=0;Ka(13,jb|0,na+xa|0,tb+xa+(k[qa>>2]|0)|0,la|0,xa|0,b|0,c|0,544);Na=B;B=0;if(Na&1){qe=jb;break}ih(a,jb)|0;oe=k[oa>>2]|0;pe=la+1|0}xa=xa+1|0;if((xa|0)>=(oe|0))break a;else{tb=oe;la=pe}}la=Rb()|0;tb=Q;Sqa(qe);Ba=tb;Ca=la;Qb(Ca|0)}break}case 751:{la=b+52|0;tb=k[la>>2]|0;z:do if((tb|0)>0){xa=b+36|0;oa=ka+1|0;qa=tb;na=0;xc=0;while(1){if(!(k[(k[xa>>2]|0)+(na<<2)>>2]|0)){re=qa;se=xc}else{jb=Qqa(144)|0;B=0;Ka(13,jb|0,oa+na|0,na|0,xc|0,na|0,b|0,c|0,543);Na=B;B=0;if(Na&1){te=jb;break}ih(a,jb)|0;re=k[la>>2]|0;se=xc+1|0}na=na+1|0;if((na|0)>=(re|0)){ue=re;ve=se;break z}else{qa=re;xc=se}}xc=Rb()|0;qa=Q;Sqa(te);Ba=qa;Ca=xc;Qb(Ca|0)}else{ue=tb;ve=0}while(0);tb=b+56|0;xc=k[tb>>2]|0;do if((xc|0)>0){qa=b+32|0;na=ka+1|0;oa=xc;xa=0;jb=ve;while(1){if(!(i[(k[qa>>2]|0)+xa>>0]|0)){we=oa;xe=jb}else{Na=Qqa(144)|0;pa=k[la>>2]|0;B=0;Ka(13,Na|0,na+xa+pa|0,pa+xa|0,jb|0,0,b|0,c|0,543);pa=B;B=0;if(pa&1){ye=Na;break}ih(a,Na)|0;we=k[tb>>2]|0;xe=jb+1|0}xa=xa+1|0;if((xa|0)>=(we|0)){ze=we;Ae=xe;vb=344;break}else{oa=we;jb=xe}}if((vb|0)==344){Be=ze;Ce=k[la>>2]|0;De=Ae;break}jb=Rb()|0;oa=Q;Sqa(ye);Ba=oa;Ca=jb;Qb(Ca|0)}else{Be=xc;Ce=ue;De=ve}while(0);if((Ce|0)>0){xc=b+36|0;jb=ka+1+Be+Ce|0;oa=Ce;xa=0;na=De;while(1){if(!(k[(k[xc>>2]|0)+(xa<<2)>>2]|0)){Ee=oa;Fe=na}else{qa=Qqa(144)|0;B=0;Ka(13,qa|0,jb+xa|0,oa+xa+(k[tb>>2]|0)|0,na|0,xa|0,b|0,c|0,544);Na=B;B=0;if(Na&1){Ge=qa;break}ih(a,qa)|0;Ee=k[la>>2]|0;Fe=na+1|0}xa=xa+1|0;if((xa|0)>=(Ee|0))break a;else{oa=Ee;na=Fe}}na=Rb()|0;oa=Q;Sqa(Ge);Ba=oa;Ca=na;Qb(Ca|0)}break}case 755:case 753:{lqa(j,b);na=b+52|0;oa=k[na>>2]|0;A:do if((oa|0)>0){xa=b+36|0;la=ka+1|0;tb=oa;jb=0;xc=0;while(1){if(!(k[(k[xa>>2]|0)+(jb<<2)>>2]|0)){He=tb;Ie=xc}else{qa=Qqa(144)|0;B=0;Ka(13,qa|0,la+jb|0,jb|0,xc|0,jb|0,b|0,c|0,543);Na=B;B=0;if(Na&1){Je=qa;break}ih(a,qa)|0;He=k[na>>2]|0;Ie=xc+1|0}jb=jb+1|0;if((jb|0)>=(He|0)){Ke=He;Le=Ie;break A}else{tb=He;xc=Ie}}xc=Rb()|0;tb=Q;Sqa(Je);Ba=tb;Ca=xc;Qb(Ca|0)}else{Ke=oa;Le=0}while(0);oa=b+64|0;xc=k[oa>>2]|0;do if((xc|0)>0){tb=ka+1|0;jb=xc;la=0;xa=Le;while(1){if(!(i[(k[j>>2]|0)+la>>0]|0)){Me=jb;Ne=xa}else{qa=Qqa(144)|0;Na=k[na>>2]|0;B=0;Ka(13,qa|0,tb+la+Na|0,Na+la|0,xa|0,0,b|0,c|0,543);Na=B;B=0;if(Na&1){Oe=qa;break}ih(a,qa)|0;Me=k[oa>>2]|0;Ne=xa+1|0}la=la+1|0;if((la|0)>=(Me|0)){Pe=Me;Qe=Ne;vb=366;break}else{jb=Me;xa=Ne}}if((vb|0)==366){Re=Pe;Se=k[na>>2]|0;Te=Qe;break}xa=Rb()|0;jb=Q;Sqa(Oe);Ba=jb;Ca=xa;Qb(Ca|0)}else{Re=xc;Se=Ke;Te=Le}while(0);xc=Re+ka+Se|0;xa=b+48|0;if((k[xa>>2]|0)==625){mqa(h,b);jb=b+60|0;la=k[jb>>2]|0;B:do if((la|0)>0){tb=b+68|0;qa=b+76|0;Na=xc+1|0;pa=la;ib=0;Jc=Te;C:while(1){Ac=(ma(k[tb>>2]|0,ib)|0)+2|0;switch(k[(k[qa>>2]|0)+(Ac<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+ib>>0]|0)){Ue=pa;Ve=Jc}else{Ac=Qqa(144)|0;B=0;Ka(13,Ac|0,Na+ib|0,(k[na>>2]|0)+ib+(k[oa>>2]|0)|0,Jc|0,0,b|0,c|0,543);Ic=B;B=0;if(Ic&1){We=Ac;vb=374;break C}ih(a,Ac)|0;Ue=k[jb>>2]|0;Ve=Jc+1|0}break}case 1:{Ue=pa;Ve=Jc;break}default:break C}ib=ib+1|0;if((ib|0)>=(Ue|0)){Xe=Ue;Ye=Ve;break B}else{pa=Ue;Jc=Ve}}if((vb|0)==374){Jc=Rb()|0;pa=Q;Sqa(We);Ba=pa;Ca=Jc;Qb(Ca|0)}Jc=E+56|0;pa=E+4|0;k[E>>2]=27524;k[Jc>>2]=27544;B=0;wa(508,E+56|0,pa|0);ib=B;B=0;if(ib&1){ib=Rb()|0;Ze=Q;_e=ib;vva(Jc);Qb(_e|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Jc>>2]=27488;B=0;va(448,pa|0);ib=B;B=0;do if(ib&1){Na=Rb()|0;$e=Q;af=Na}else{k[pa>>2]=27560;Na=E+36|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[E+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,pa|0,g|0);qa=B;B=0;if(qa&1){qa=Rb()|0;tb=Q;Yua(g);Yua(Na);Ava(pa);$e=tb;af=qa;break}Yua(g);B=0;qa=Ia(40,E|0,145010,13)|0;tb=B;B=0;D:do if(!(tb&1)?(B=0,Xa(239,qa|0,0)|0,Ac=B,B=0,!(Ac&1)):0){Ac=Ab(20)|0;B=0;eb(502,F|0,145024,86);Ic=B;B=0;do if(!(Ic&1)){B=0;eb(502,G|0,145111,11);bf=B;B=0;if(bf&1){bf=Rb()|0;cf=Q;Yua(F);df=cf;ef=bf;break}B=0;wa(510,H|0,pa|0);bf=B;B=0;if(bf&1){bf=Rb()|0;ff=1;gf=Q;hf=bf}else{B=0;ua(163,Ac|0,F|0,G|0,361,H|0);bf=B;B=0;if(bf&1)jf=1;else{B=0;eb(503,Ac|0,1240,229);B=0;jf=0}bf=Rb()|0;cf=Q;Yua(H);ff=jf;gf=cf;hf=bf}Yua(G);Yua(F);if(ff){df=gf;ef=hf}else{kf=gf;lf=hf;break D}}else{bf=Rb()|0;df=Q;ef=bf}while(0);zb(Ac|0);kf=df;lf=ef}else vb=390;while(0);if((vb|0)==390){qa=Rb()|0;kf=Q;lf=qa}k[E>>2]=27468;k[Jc>>2]=27488;k[pa>>2]=27560;Yua(Na);Ava(pa);vva(Jc);Ba=kf;Ca=lf;Qb(Ca|0)}while(0);Ze=$e;_e=af;vva(Jc);Qb(_e|0)}else{Xe=la;Ye=Te}while(0);mf=Ye;nf=(k[xa>>2]|0)==625?Xe:0}else{mf=Te;nf=0}la=k[na>>2]|0;if((la|0)>0){jb=b+36|0;pa=xc+1+nf|0;ib=la;la=0;qa=mf;while(1){if(!(k[(k[jb>>2]|0)+(la<<2)>>2]|0)){of=ib;pf=qa}else{tb=Qqa(144)|0;B=0;Ka(13,tb|0,pa+la|0,la+nf+ib+(k[oa>>2]|0)|0,qa|0,la|0,b|0,c|0,544);ra=B;B=0;if(ra&1){qf=tb;break}ih(a,tb)|0;of=k[na>>2]|0;pf=qa+1|0}la=la+1|0;if((la|0)>=(of|0))break a;else{ib=of;qa=pf}}qa=Rb()|0;ib=Q;Sqa(qf);Ba=ib;Ca=qa;Qb(Ca|0)}break}case 754:{lqa(j,b);qa=b+52|0;ib=k[qa>>2]|0;E:do if((ib|0)>0){la=b+36|0;na=ka+1|0;oa=ib;pa=0;jb=0;while(1){if(!(k[(k[la>>2]|0)+(pa<<2)>>2]|0)){rf=oa;sf=jb}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,na+pa|0,pa|0,jb|0,pa|0,b|0,c|0,543);xa=B;B=0;if(xa&1){tf=xc;break}ih(a,xc)|0;rf=k[qa>>2]|0;sf=jb+1|0}pa=pa+1|0;if((pa|0)>=(rf|0)){uf=rf;vf=sf;break E}else{oa=rf;jb=sf}}jb=Rb()|0;oa=Q;Sqa(tf);Ba=oa;Ca=jb;Qb(Ca|0)}else{uf=ib;vf=0}while(0);ib=b+64|0;jb=k[ib>>2]|0;do if((jb|0)>0){oa=ka+1|0;pa=jb;na=0;la=vf;while(1){if(!(i[(k[j>>2]|0)+na>>0]|0)){wf=pa;xf=la}else{Jc=Qqa(144)|0;xc=k[qa>>2]|0;B=0;Ka(13,Jc|0,oa+na+xc|0,xc+na|0,la|0,0,b|0,c|0,543);xc=B;B=0;if(xc&1){yf=Jc;break}ih(a,Jc)|0;wf=k[ib>>2]|0;xf=la+1|0}na=na+1|0;if((na|0)>=(wf|0)){zf=wf;Af=xf;vb=421;break}else{pa=wf;la=xf}}if((vb|0)==421){Bf=zf;Cf=k[qa>>2]|0;Df=Af;break}la=Rb()|0;pa=Q;Sqa(yf);Ba=pa;Ca=la;Qb(Ca|0)}else{Bf=jb;Cf=uf;Df=vf}while(0);if((k[b+48>>2]|0)==625?(mqa(h,b),jb=b+60|0,la=k[jb>>2]|0,(la|0)>0):0){pa=b+68|0;na=b+76|0;oa=ka+1+Bf+Cf|0;Jc=la;la=0;xc=Df;F:while(1){xa=(ma(k[pa>>2]|0,la)|0)+2|0;switch(k[(k[na>>2]|0)+(xa<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+la>>0]|0)){Ef=Jc;Ff=xc}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,oa+la|0,(k[qa>>2]|0)+la+(k[ib>>2]|0)|0,xc|0,0,b|0,c|0,543);tb=B;B=0;if(tb&1){Gf=xa;vb=429;break F}ih(a,xa)|0;Ef=k[jb>>2]|0;Ff=xc+1|0}break}case 1:{Ef=Jc;Ff=xc;break}default:break F}la=la+1|0;if((la|0)>=(Ef|0))break a;else{Jc=Ef;xc=Ff}}if((vb|0)==429){xc=Rb()|0;Jc=Q;Sqa(Gf);Ba=Jc;Ca=xc;Qb(Ca|0)}xc=I+56|0;Jc=I+4|0;k[I>>2]=27524;k[xc>>2]=27544;B=0;wa(508,I+56|0,Jc|0);la=B;B=0;if(la&1){la=Rb()|0;Hf=Q;If=la;vva(xc);Qb(If|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[xc>>2]=27488;B=0;va(448,Jc|0);la=B;B=0;do if(la&1){jb=Rb()|0;Jf=Q;Kf=jb}else{k[Jc>>2]=27560;jb=I+36|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[I+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,Jc|0,g|0);ib=B;B=0;if(ib&1){ib=Rb()|0;qa=Q;Yua(g);Yua(jb);Ava(Jc);Jf=qa;Kf=ib;break}Yua(g);B=0;ib=Ia(40,I|0,145010,13)|0;qa=B;B=0;G:do if(!(qa&1)?(B=0,Xa(239,ib|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,J|0,145024,86);na=B;B=0;do if(!(na&1)){B=0;eb(502,K|0,145111,11);pa=B;B=0;if(pa&1){pa=Rb()|0;xa=Q;Yua(J);Lf=xa;Mf=pa;break}B=0;wa(510,L|0,Jc|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Nf=1;Of=Q;Pf=pa}else{B=0;ua(163,oa|0,J|0,K|0,408,L|0);pa=B;B=0;if(pa&1)Qf=1;else{B=0;eb(503,oa|0,1240,229);B=0;Qf=0}pa=Rb()|0;xa=Q;Yua(L);Nf=Qf;Of=xa;Pf=pa}Yua(K);Yua(J);if(Nf){Lf=Of;Mf=Pf}else{Rf=Of;Sf=Pf;break G}}else{pa=Rb()|0;Lf=Q;Mf=pa}while(0);zb(oa|0);Rf=Lf;Sf=Mf}else vb=445;while(0);if((vb|0)==445){ib=Rb()|0;Rf=Q;Sf=ib}k[I>>2]=27468;k[xc>>2]=27488;k[Jc>>2]=27560;Yua(jb);Ava(Jc);vva(xc);Ba=Rf;Ca=Sf;Qb(Ca|0)}while(0);Hf=Jf;If=Kf;vva(xc);Qb(If|0)}break}case 756:{lqa(j,b);mqa(h,b);Jc=b+52|0;la=k[Jc>>2]|0;H:do if((la|0)>0){ib=b+36|0;qa=ka+1|0;na=la;Na=0;pa=0;while(1){if(!(k[(k[ib>>2]|0)+(Na<<2)>>2]|0)){Tf=na;Uf=pa}else{xa=Qqa(144)|0;B=0;Ka(13,xa|0,qa+Na|0,Na|0,pa|0,Na|0,b|0,c|0,543);tb=B;B=0;if(tb&1){Vf=xa;break}ih(a,xa)|0;Tf=k[Jc>>2]|0;Uf=pa+1|0}Na=Na+1|0;if((Na|0)>=(Tf|0)){Wf=Tf;Xf=Uf;break H}else{na=Tf;pa=Uf}}pa=Rb()|0;na=Q;Sqa(Vf);Ba=na;Ca=pa;Qb(Ca|0)}else{Wf=la;Xf=0}while(0);la=b+64|0;xc=k[la>>2]|0;do if((xc|0)>0){pa=b+80|0;na=ka+1|0;Na=ka+2|0;qa=ka+3|0;ib=Wf;jb=0;xa=Xf;I:while(1){tb=jb*3|0;J:do switch(k[(k[pa>>2]|0)+(tb+2<<2)>>2]|0){case 2:{if(!(i[(k[j>>2]|0)+jb>>0]|0)){Yf=ib+3|0;Zf=xa;break J}ra=Qqa(144)|0;B=0;Ka(13,ra|0,na+tb+(k[Jc>>2]|0)|0,ib+1|0,xa|0,0,b|0,c|0,543);Ic=B;B=0;if(Ic&1){_f=ra;vb=470;break I}ih(a,ra)|0;ra=Qqa(144)|0;B=0;Ka(13,ra|0,Na+tb+(k[Jc>>2]|0)|0,ib+2|0,xa+1|0,0,b|0,c|0,543);Ic=B;B=0;if(Ic&1){$f=ra;vb=471;break I}ih(a,ra)|0;ra=Qqa(144)|0;Ic=ib+3|0;B=0;Ka(13,ra|0,qa+tb+(k[Jc>>2]|0)|0,Ic|0,xa+2|0,0,b|0,c|0,543);za=B;B=0;if(za&1){ag=ra;vb=472;break I}ih(a,ra)|0;Yf=Ic;Zf=xa+3|0;break}case 1:{if(!(i[(k[j>>2]|0)+jb>>0]|0)){Yf=ib+1|0;Zf=xa;break J}Ic=Qqa(144)|0;ra=ib+1|0;B=0;Ka(13,Ic|0,na+tb+(k[Jc>>2]|0)|0,ra|0,xa|0,0,b|0,c|0,543);za=B;B=0;if(za&1){bg=Ic;vb=477;break I}ih(a,Ic)|0;Yf=ra;Zf=xa+1|0;break}default:{vb=478;break I}}while(0);jb=jb+1|0;tb=k[la>>2]|0;if((jb|0)>=(tb|0)){cg=tb;dg=Yf;eg=Zf;vb=502;break}else{ib=Yf;xa=Zf}}if((vb|0)==470){xa=Rb()|0;ib=Q;Sqa(_f);Ba=ib;Ca=xa;Qb(Ca|0)}else if((vb|0)==471){xa=Rb()|0;ib=Q;Sqa($f);Ba=ib;Ca=xa;Qb(Ca|0)}else if((vb|0)==472){xa=Rb()|0;ib=Q;Sqa(ag);Ba=ib;Ca=xa;Qb(Ca|0)}else if((vb|0)==477){xa=Rb()|0;ib=Q;Sqa(bg);Ba=ib;Ca=xa;Qb(Ca|0)}else if((vb|0)==478){xa=M+56|0;ib=M+4|0;k[M>>2]=27524;k[xa>>2]=27544;B=0;wa(508,M+56|0,ib|0);jb=B;B=0;if(jb&1){jb=Rb()|0;fg=Q;gg=jb;vva(xa);Qb(gg|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[xa>>2]=27488;B=0;va(448,ib|0);jb=B;B=0;do if(jb&1){na=Rb()|0;hg=Q;ig=na}else{k[ib>>2]=27560;na=M+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[M+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ib|0,g|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Na=Q;Yua(g);Yua(na);Ava(ib);hg=Na;ig=qa;break}Yua(g);B=0;qa=Ia(40,M|0,145010,13)|0;Na=B;B=0;K:do if(!(Na&1)?(B=0,Xa(239,qa|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,N|0,145024,86);tb=B;B=0;do if(!(tb&1)){B=0;eb(502,O|0,145111,11);oa=B;B=0;if(oa&1){oa=Rb()|0;ra=Q;Yua(N);jg=ra;kg=oa;break}B=0;wa(510,P|0,ib|0);oa=B;B=0;if(oa&1){oa=Rb()|0;lg=1;mg=Q;ng=oa}else{B=0;ua(163,pa|0,N|0,O|0,446,P|0);oa=B;B=0;if(oa&1)og=1;else{B=0;eb(503,pa|0,1240,229);B=0;og=0}oa=Rb()|0;ra=Q;Yua(P);lg=og;mg=ra;ng=oa}Yua(O);Yua(N);if(lg){jg=mg;kg=ng}else{pg=mg;qg=ng;break K}}else{oa=Rb()|0;jg=Q;kg=oa}while(0);zb(pa|0);pg=jg;qg=kg}else vb=493;while(0);if((vb|0)==493){qa=Rb()|0;pg=Q;qg=qa}k[M>>2]=27468;k[xa>>2]=27488;k[ib>>2]=27560;Yua(na);Ava(ib);vva(xa);Ba=pg;Ca=qg;Qb(Ca|0)}while(0);fg=hg;gg=ig;vva(xa);Qb(gg|0)}else if((vb|0)==502){rg=cg;sg=k[Jc>>2]|0;tg=dg;ug=eg;break}}else{rg=xc;sg=Wf;tg=Wf;ug=Xf}while(0);xc=(rg*3|0)+ka+sg|0;la=b+60|0;ib=k[la>>2]|0;do if((ib|0)>0){jb=b+68|0;qa=b+76|0;Na=ib;tb=tg;Ac=0;oa=ug;L:while(1){ra=(ma(k[jb>>2]|0,Ac)|0)+2|0;M:do switch(k[(k[qa>>2]|0)+(ra<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+Ac>>0]|0)){vg=Na;wg=tb+3|0;xg=oa;break M}Ic=Qqa(144)|0;za=(Ac*3|0)+xc|0;B=0;Ka(13,Ic|0,za+1|0,tb+1|0,oa|0,0,b|0,c|0,543);bf=B;B=0;if(bf&1){yg=Ic;vb=512;break L}ih(a,Ic)|0;Ic=Qqa(144)|0;B=0;Ka(13,Ic|0,za+2|0,tb+2|0,oa+1|0,0,b|0,c|0,543);bf=B;B=0;if(bf&1){zg=Ic;vb=513;break L}ih(a,Ic)|0;Ic=Qqa(144)|0;bf=tb+3|0;B=0;Ka(13,Ic|0,za+3|0,bf|0,oa+2|0,0,b|0,c|0,543);za=B;B=0;if(za&1){Ag=Ic;vb=514;break L}ih(a,Ic)|0;vg=k[la>>2]|0;wg=bf;xg=oa+3|0;break}case 1:{vg=Na;wg=tb;xg=oa;break}default:{vb=515;break L}}while(0);Ac=Ac+1|0;if((Ac|0)>=(vg|0)){Bg=vg;Cg=wg;Dg=xg;vb=539;break}else{Na=vg;tb=wg;oa=xg}}if((vb|0)==512){oa=Rb()|0;tb=Q;Sqa(yg);Ba=tb;Ca=oa;Qb(Ca|0)}else if((vb|0)==513){oa=Rb()|0;tb=Q;Sqa(zg);Ba=tb;Ca=oa;Qb(Ca|0)}else if((vb|0)==514){oa=Rb()|0;tb=Q;Sqa(Ag);Ba=tb;Ca=oa;Qb(Ca|0)}else if((vb|0)==515){oa=R+56|0;tb=R+4|0;k[R>>2]=27524;k[oa>>2]=27544;B=0;wa(508,R+56|0,tb|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Eg=Q;Fg=Na;vva(oa);Qb(Fg|0)}k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[oa>>2]=27488;B=0;va(448,tb|0);Na=B;B=0;do if(Na&1){Ac=Rb()|0;Gg=Q;Hg=Ac}else{k[tb>>2]=27560;Ac=R+36|0;k[Ac>>2]=0;k[Ac+4>>2]=0;k[Ac+8>>2]=0;k[Ac+12>>2]=0;k[R+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,tb|0,g|0);qa=B;B=0;if(qa&1){qa=Rb()|0;jb=Q;Yua(g);Yua(Ac);Ava(tb);Gg=jb;Hg=qa;break}Yua(g);B=0;qa=Ia(40,R|0,145010,13)|0;jb=B;B=0;N:do if(!(jb&1)?(B=0,Xa(239,qa|0,0)|0,xa=B,B=0,!(xa&1)):0){xa=Ab(20)|0;B=0;eb(502,S|0,145024,86);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,T|0,145111,11);na=B;B=0;if(na&1){na=Rb()|0;bf=Q;Yua(S);Ig=bf;Jg=na;break}B=0;wa(510,U|0,tb|0);na=B;B=0;if(na&1){na=Rb()|0;Kg=1;Lg=Q;Mg=na}else{B=0;ua(163,xa|0,S|0,T|0,466,U|0);na=B;B=0;if(na&1)Ng=1;else{B=0;eb(503,xa|0,1240,229);B=0;Ng=0}na=Rb()|0;bf=Q;Yua(U);Kg=Ng;Lg=bf;Mg=na}Yua(T);Yua(S);if(Kg){Ig=Lg;Jg=Mg}else{Og=Lg;Pg=Mg;break N}}else{na=Rb()|0;Ig=Q;Jg=na}while(0);zb(xa|0);Og=Ig;Pg=Jg}else vb=530;while(0);if((vb|0)==530){qa=Rb()|0;Og=Q;Pg=qa}k[R>>2]=27468;k[oa>>2]=27488;k[tb>>2]=27560;Yua(Ac);Ava(tb);vva(oa);Ba=Og;Ca=Pg;Qb(Ca|0)}while(0);Eg=Gg;Fg=Hg;vva(oa);Qb(Fg|0)}else if((vb|0)==539){Qg=Bg;Rg=k[Jc>>2]|0;Sg=Cg;Tg=Dg;break}}else{Qg=ib;Rg=sg;Sg=tg;Tg=ug}while(0);if((Rg|0)>0){ib=b+36|0;la=xc+1+(Qg*3|0)|0;tb=Rg;Na=Sg;qa=0;jb=Tg;while(1){if(!(k[(k[ib>>2]|0)+(qa<<2)>>2]|0)){Ug=Na+1|0;Vg=tb;Wg=jb}else{ra=Qqa(144)|0;pa=Na+1|0;B=0;Ka(13,ra|0,la+qa|0,pa|0,jb|0,qa|0,b|0,c|0,544);na=B;B=0;if(na&1){Xg=ra;break}ih(a,ra)|0;Ug=pa;Vg=k[Jc>>2]|0;Wg=jb+1|0}qa=qa+1|0;if((qa|0)>=(Vg|0))break a;else{tb=Vg;Na=Ug;jb=Wg}}jb=Rb()|0;Na=Q;Sqa(Xg);Ba=Na;Ca=jb;Qb(Ca|0)}break}case 757:{lqa(j,b);jb=b+52|0;Na=k[jb>>2]|0;O:do if((Na|0)>0){tb=b+36|0;qa=ka+1|0;Jc=Na;la=0;ib=0;while(1){if(!(k[(k[tb>>2]|0)+(la<<2)>>2]|0)){Yg=Jc;Zg=ib}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,qa+la|0,la|0,ib|0,la|0,b|0,c|0,543);pa=B;B=0;if(pa&1){_g=xc;break}ih(a,xc)|0;Yg=k[jb>>2]|0;Zg=ib+1|0}la=la+1|0;if((la|0)>=(Yg|0)){$g=Yg;ah=Zg;break O}else{Jc=Yg;ib=Zg}}ib=Rb()|0;Jc=Q;Sqa(_g);Ba=Jc;Ca=ib;Qb(Ca|0)}else{$g=Na;ah=0}while(0);Na=b+64|0;ib=k[Na>>2]|0;do if((ib|0)>0){Jc=ka+1|0;la=ib;qa=0;tb=ah;while(1){if(!(i[(k[j>>2]|0)+qa>>0]|0)){bh=la;ch=tb}else{oa=Qqa(144)|0;xc=k[jb>>2]|0;B=0;Ka(13,oa|0,Jc+qa+xc|0,xc+qa|0,tb|0,0,b|0,c|0,543);xc=B;B=0;if(xc&1){dh=oa;break}ih(a,oa)|0;bh=k[Na>>2]|0;ch=tb+1|0}qa=qa+1|0;if((qa|0)>=(bh|0)){eh=bh;fh=ch;vb=562;break}else{la=bh;tb=ch}}if((vb|0)==562){gh=eh;hh=k[jb>>2]|0;jh=fh;break}tb=Rb()|0;la=Q;Sqa(dh);Ba=la;Ca=tb;Qb(Ca|0)}else{gh=ib;hh=$g;jh=ah}while(0);ib=gh+ka+hh|0;tb=b+48|0;if((k[tb>>2]|0)==625){mqa(h,b);la=b+60|0;qa=k[la>>2]|0;P:do if((qa|0)>0){Jc=b+68|0;oa=b+76|0;xc=ib+1|0;pa=qa;ra=0;na=jh;Q:while(1){bf=(ma(k[Jc>>2]|0,ra)|0)+2|0;switch(k[(k[oa>>2]|0)+(bf<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+ra>>0]|0)){kh=pa;lh=na}else{bf=Qqa(144)|0;B=0;Ka(13,bf|0,xc+ra|0,(k[jb>>2]|0)+ra+(k[Na>>2]|0)|0,na|0,0,b|0,c|0,543);Ic=B;B=0;if(Ic&1){mh=bf;vb=570;break Q}ih(a,bf)|0;kh=k[la>>2]|0;lh=na+1|0}break}case 1:{kh=pa;lh=na;break}default:break Q}ra=ra+1|0;if((ra|0)>=(kh|0)){nh=kh;oh=lh;break P}else{pa=kh;na=lh}}if((vb|0)==570){na=Rb()|0;pa=Q;Sqa(mh);Ba=pa;Ca=na;Qb(Ca|0)}na=V+56|0;pa=V+4|0;k[V>>2]=27524;k[na>>2]=27544;B=0;wa(508,V+56|0,pa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;ph=Q;qh=ra;vva(na);Qb(qh|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[na>>2]=27488;B=0;va(448,pa|0);ra=B;B=0;do if(ra&1){xc=Rb()|0;rh=Q;sh=xc}else{k[pa>>2]=27560;xc=V+36|0;k[xc>>2]=0;k[xc+4>>2]=0;k[xc+8>>2]=0;k[xc+12>>2]=0;k[V+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,pa|0,g|0);oa=B;B=0;if(oa&1){oa=Rb()|0;Jc=Q;Yua(g);Yua(xc);Ava(pa);rh=Jc;sh=oa;break}Yua(g);B=0;oa=Ia(40,V|0,145010,13)|0;Jc=B;B=0;R:do if(!(Jc&1)?(B=0,Xa(239,oa|0,0)|0,bf=B,B=0,!(bf&1)):0){bf=Ab(20)|0;B=0;eb(502,W|0,145024,86);Ic=B;B=0;do if(!(Ic&1)){B=0;eb(502,X|0,145111,11);za=B;B=0;if(za&1){za=Rb()|0;cf=Q;Yua(W);th=cf;uh=za;break}B=0;wa(510,Y|0,pa|0);za=B;B=0;if(za&1){za=Rb()|0;vh=1;wh=Q;xh=za}else{B=0;ua(163,bf|0,W|0,X|0,507,Y|0);za=B;B=0;if(za&1)yh=1;else{B=0;eb(503,bf|0,1240,229);B=0;yh=0}za=Rb()|0;cf=Q;Yua(Y);vh=yh;wh=cf;xh=za}Yua(X);Yua(W);if(vh){th=wh;uh=xh}else{zh=wh;Ah=xh;break R}}else{za=Rb()|0;th=Q;uh=za}while(0);zb(bf|0);zh=th;Ah=uh}else vb=586;while(0);if((vb|0)==586){oa=Rb()|0;zh=Q;Ah=oa}k[V>>2]=27468;k[na>>2]=27488;k[pa>>2]=27560;Yua(xc);Ava(pa);vva(na);Ba=zh;Ca=Ah;Qb(Ca|0)}while(0);ph=rh;qh=sh;vva(na);Qb(qh|0)}else{nh=qa;oh=jh}while(0);Bh=nh+ib|0;Ch=oh}else{Bh=ib;Ch=jh}qa=b+56|0;la=k[qa>>2]|0;S:do if((la|0)>0){Na=b+32|0;jb=Bh+1|0;pa=la;ra=0;oa=Ch;while(1){if(!(i[(k[Na>>2]|0)+ra>>0]|0)){Dh=pa;Eh=oa}else{Jc=Qqa(144)|0;B=0;Ka(13,Jc|0,jb+ra|0,ra+Bh-(k[ja>>2]|0)|0,oa|0,0,b|0,c|0,543);Ac=B;B=0;if(Ac&1){Fh=Jc;break}ih(a,Jc)|0;Dh=k[qa>>2]|0;Eh=oa+1|0}ra=ra+1|0;if((ra|0)>=(Dh|0)){Gh=Dh;Hh=Eh;break S}else{pa=Dh;oa=Eh}}oa=Rb()|0;pa=Q;Sqa(Fh);Ba=pa;Ca=oa;Qb(Ca|0)}else{Gh=la;Hh=Ch}while(0);la=Gh+Bh|0;switch(k[tb>>2]|0){case 621:{Ih=3;break}case 623:{Ih=4;break}case 625:{Ih=6;break}default:{ib=Z+56|0;oa=Z+4|0;k[Z>>2]=27524;k[ib>>2]=27544;B=0;wa(508,Z+56|0,oa|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Jh=Q;Kh=pa;vva(ib);Qb(Kh|0)}k[Z+128>>2]=0;k[Z+132>>2]=-1;k[Z>>2]=27468;k[ib>>2]=27488;B=0;va(448,oa|0);pa=B;B=0;do if(pa&1){ra=Rb()|0;Lh=Q;Mh=ra}else{k[oa>>2]=27560;ra=Z+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[Z+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,oa|0,g|0);jb=B;B=0;if(jb&1){jb=Rb()|0;Na=Q;Yua(g);Yua(ra);Ava(oa);Lh=Na;Mh=jb;break}Yua(g);B=0;jb=Ia(40,Z|0,150248,32)|0;Na=B;B=0;T:do if(!(Na&1)?(B=0,Xa(239,jb|0,0)|0,na=B,B=0,!(na&1)):0){na=Ab(20)|0;B=0;eb(502,_|0,145024,86);Jc=B;B=0;do if(!(Jc&1)){B=0;eb(502,$|0,145111,11);Ac=B;B=0;if(Ac&1){Ac=Rb()|0;Ic=Q;Yua(_);Nh=Ic;Oh=Ac;break}B=0;wa(510,aa|0,oa|0);Ac=B;B=0;if(Ac&1){Ac=Rb()|0;Ph=1;Qh=Q;Rh=Ac}else{B=0;ua(163,na|0,_|0,$|0,524,aa|0);Ac=B;B=0;if(Ac&1)Sh=1;else{B=0;eb(503,na|0,1240,229);B=0;Sh=0}Ac=Rb()|0;Ic=Q;Yua(aa);Ph=Sh;Qh=Ic;Rh=Ac}Yua($);Yua(_);if(Ph){Nh=Qh;Oh=Rh}else{Th=Qh;Uh=Rh;break T}}else{Ac=Rb()|0;Nh=Q;Oh=Ac}while(0);zb(na|0);Th=Nh;Uh=Oh}else vb=621;while(0);if((vb|0)==621){jb=Rb()|0;Th=Q;Uh=jb}k[Z>>2]=27468;k[ib>>2]=27488;k[oa>>2]=27560;Yua(ra);Ava(oa);vva(ib);Ba=Th;Ca=Uh;Qb(Ca|0)}while(0);Jh=Lh;Kh=Mh;vva(ib);Qb(Kh|0)}}if((Gh|0)>0){oa=b+32|0;pa=la+1|0;tb=b+72|0;jb=Gh;Na=0;Jc=Hh;U:while(1){if(!(i[(k[oa>>2]|0)+Na>>0]|0)){Vh=jb;Wh=Jc}else{xc=ma(Na,Ih)|0;Ac=pa+xc|0;Ic=xc+la|0;xa=0;za=Jc;while(1){cf=Qqa(144)|0;B=0;Ka(13,cf|0,Ac+xa|0,Ic+xa-(k[ja>>2]|0)|0,za|0,(k[(k[tb>>2]|0)+(xa+xc<<2)>>2]|0)+-1|0,b|0,c|0,544);Xh=B;B=0;if(Xh&1){Yh=cf;break U}Xh=za+1|0;ih(a,cf)|0;xa=xa+1|0;if((xa|0)>=(Ih|0)){Zh=Xh;break}else za=Xh}Vh=k[qa>>2]|0;Wh=Zh}Na=Na+1|0;if((Na|0)>=(Vh|0))break a;else{jb=Vh;Jc=Wh}}Jc=Rb()|0;jb=Q;Sqa(Yh);Ba=jb;Ca=Jc;Qb(Ca|0)}break}case 758:{lqa(j,b);Jc=b+52|0;jb=k[Jc>>2]|0;V:do if((jb|0)>0){Na=b+36|0;qa=ka+1|0;tb=jb;la=0;pa=0;while(1){if(!(k[(k[Na>>2]|0)+(la<<2)>>2]|0)){_h=tb;$h=pa}else{oa=Qqa(144)|0;B=0;Ka(13,oa|0,qa+la|0,la|0,pa|0,la|0,b|0,c|0,543);ib=B;B=0;if(ib&1){ai=oa;break}ih(a,oa)|0;_h=k[Jc>>2]|0;$h=pa+1|0}la=la+1|0;if((la|0)>=(_h|0)){bi=_h;ci=$h;break V}else{tb=_h;pa=$h}}pa=Rb()|0;tb=Q;Sqa(ai);Ba=tb;Ca=pa;Qb(Ca|0)}else{bi=jb;ci=0}while(0);jb=b+64|0;pa=k[jb>>2]|0;do if((pa|0)>0){tb=ka+1|0;la=pa;qa=0;Na=ci;while(1){if(!(i[(k[j>>2]|0)+qa>>0]|0)){di=la;ei=Na}else{oa=Qqa(144)|0;ib=k[Jc>>2]|0;B=0;Ka(13,oa|0,tb+qa+ib|0,ib+qa|0,Na|0,0,b|0,c|0,543);ib=B;B=0;if(ib&1){fi=oa;break}ih(a,oa)|0;di=k[jb>>2]|0;ei=Na+1|0}qa=qa+1|0;if((qa|0)>=(di|0)){gi=di;hi=ei;vb=652;break}else{la=di;Na=ei}}if((vb|0)==652){ii=gi;ji=k[Jc>>2]|0;ki=hi;break}Na=Rb()|0;la=Q;Sqa(fi);Ba=la;Ca=Na;Qb(Ca|0)}else{ii=pa;ji=bi;ki=ci}while(0);pa=ii+ka+ji|0;if((k[b+48>>2]|0)==625){mqa(h,b);Na=b+60|0;la=k[Na>>2]|0;W:do if((la|0)>0){qa=b+68|0;tb=b+76|0;oa=pa+1|0;ib=la;za=0;xa=ki;X:while(1){xc=(ma(k[qa>>2]|0,za)|0)+2|0;switch(k[(k[tb>>2]|0)+(xc<<2)>>2]|0){case 2:{if(!(i[(k[h>>2]|0)+za>>0]|0)){li=ib;mi=xa}else{xc=Qqa(144)|0;B=0;Ka(13,xc|0,oa+za|0,(k[Jc>>2]|0)+za+(k[jb>>2]|0)|0,xa|0,0,b|0,c|0,543);Ic=B;B=0;if(Ic&1){ni=xc;vb=660;break X}ih(a,xc)|0;li=k[Na>>2]|0;mi=xa+1|0}break}case 1:{li=ib;mi=xa;break}default:break X}za=za+1|0;if((za|0)>=(li|0)){oi=li;pi=mi;break W}else{ib=li;xa=mi}}if((vb|0)==660){xa=Rb()|0;ib=Q;Sqa(ni);Ba=ib;Ca=xa;Qb(Ca|0)}xa=ba+56|0;ib=ba+4|0;k[ba>>2]=27524;k[xa>>2]=27544;B=0;wa(508,ba+56|0,ib|0);za=B;B=0;if(za&1){za=Rb()|0;qi=Q;ri=za;vva(xa);Qb(ri|0)}k[ba+128>>2]=0;k[ba+132>>2]=-1;k[ba>>2]=27468;k[xa>>2]=27488;B=0;va(448,ib|0);za=B;B=0;do if(za&1){oa=Rb()|0;si=Q;ti=oa}else{k[ib>>2]=27560;oa=ba+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[ba+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ib|0,g|0);tb=B;B=0;if(tb&1){tb=Rb()|0;qa=Q;Yua(g);Yua(oa);Ava(ib);si=qa;ti=tb;break}Yua(g);B=0;tb=Ia(40,ba|0,145010,13)|0;qa=B;B=0;Y:do if(!(qa&1)?(B=0,Xa(239,tb|0,0)|0,xc=B,B=0,!(xc&1)):0){xc=Ab(20)|0;B=0;eb(502,ca|0,145024,86);Ic=B;B=0;do if(!(Ic&1)){B=0;eb(502,da|0,145111,11);Ac=B;B=0;if(Ac&1){Ac=Rb()|0;ra=Q;Yua(ca);ui=ra;vi=Ac;break}B=0;wa(510,ea|0,ib|0);Ac=B;B=0;if(Ac&1){Ac=Rb()|0;wi=1;xi=Q;yi=Ac}else{B=0;ua(163,xc|0,ca|0,da|0,563,ea|0);Ac=B;B=0;if(Ac&1)zi=1;else{B=0;eb(503,xc|0,1240,229);B=0;zi=0}Ac=Rb()|0;ra=Q;Yua(ea);wi=zi;xi=ra;yi=Ac}Yua(da);Yua(ca);if(wi){ui=xi;vi=yi}else{Ai=xi;Bi=yi;break Y}}else{Ac=Rb()|0;ui=Q;vi=Ac}while(0);zb(xc|0);Ai=ui;Bi=vi}else vb=676;while(0);if((vb|0)==676){tb=Rb()|0;Ai=Q;Bi=tb}k[ba>>2]=27468;k[xa>>2]=27488;k[ib>>2]=27560;Yua(oa);Ava(ib);vva(xa);Ba=Ai;Ca=Bi;Qb(Ca|0)}while(0);qi=si;ri=ti;vva(xa);Qb(ri|0)}else{oi=la;pi=ki}while(0);Ci=oi+pa|0;Di=pi}else{Ci=pa;Di=ki}la=b+56|0;Na=k[la>>2]|0;if((Na|0)>0){jb=b+32|0;Jc=Ci+1|0;ib=Na;Na=0;za=Di;while(1){if(!(i[(k[jb>>2]|0)+Na>>0]|0)){Ei=ib;Fi=za}else{tb=Qqa(144)|0;B=0;Ka(13,tb|0,Jc+Na|0,Na+Ci-(k[ja>>2]|0)|0,za|0,0,b|0,c|0,543);qa=B;B=0;if(qa&1){Gi=tb;break}ih(a,tb)|0;Ei=k[la>>2]|0;Fi=za+1|0}Na=Na+1|0;if((Na|0)>=(Ei|0))break a;else{ib=Ei;za=Fi}}za=Rb()|0;ib=Q;Sqa(Gi);Ba=ib;Ca=za;Qb(Ca|0)}break}default:{za=fa+56|0;ib=fa+4|0;k[fa>>2]=27524;k[za>>2]=27544;B=0;wa(508,fa+56|0,ib|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Hi=Q;Ii=Na;vva(za);Qb(Ii|0)}k[fa+128>>2]=0;k[fa+132>>2]=-1;k[fa>>2]=27468;k[za>>2]=27488;B=0;va(448,ib|0);Na=B;B=0;do if(Na&1){la=Rb()|0;Ji=Q;Ki=la}else{k[ib>>2]=27560;la=fa+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[fa+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ib|0,g|0);Jc=B;B=0;if(Jc&1){Jc=Rb()|0;jb=Q;Yua(g);Yua(la);Ava(ib);Ji=jb;Ki=Jc;break}Yua(g);B=0;Jc=Ia(40,fa|0,145867,15)|0;jb=B;B=0;Z:do if((((!(jb&1)?(B=0,pa=ya(427,d|0)|0,tb=B,B=0,!(tb&1)):0)?(tb=Lta(pa)|0,B=0,qa=Ia(40,Jc|0,pa|0,tb|0)|0,tb=B,B=0,!(tb&1)):0)?(B=0,tb=Ia(40,qa|0,146481,18)|0,qa=B,B=0,!(qa&1)):0)?(B=0,Xa(239,tb|0,0)|0,tb=B,B=0,!(tb&1)):0){tb=Ab(20)|0;B=0;eb(502,ga|0,145024,86);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,ha|0,145111,11);pa=B;B=0;if(pa&1){pa=Rb()|0;na=Q;Yua(ga);Li=pa;Mi=na;break}B=0;wa(510,ia|0,ib|0);na=B;B=0;if(na&1){na=Rb()|0;Ni=1;Oi=Q;Pi=na}else{B=0;ua(163,tb|0,ga|0,ha|0,578,ia|0);na=B;B=0;if(na&1)Qi=1;else{B=0;eb(503,tb|0,1240,229);B=0;Qi=0}na=Rb()|0;pa=Q;Yua(ia);Ni=Qi;Oi=pa;Pi=na}Yua(ha);Yua(ga);if(Ni){Li=Pi;Mi=Oi}else{Ri=Oi;Si=Pi;break Z}}else{na=Rb()|0;Li=na;Mi=Q}while(0);zb(tb|0);Ri=Mi;Si=Li}else vb=711;while(0);if((vb|0)==711){Jc=Rb()|0;Ri=Q;Si=Jc}k[fa>>2]=27468;k[za>>2]=27488;k[ib>>2]=27560;Yua(la);Ava(ib);vva(za);Ba=Ri;Ca=Si;Qb(Ca|0)}while(0);Hi=Ji;Ii=Ki;vva(za);Qb(Ii|0)}}while(0);Ii=k[h>>2]|0;if(Ii)Tqa(Ii);k[h>>2]=0;h=k[j>>2]|0;if(h)Tqa(h);k[j>>2]=0;j=k[l>>2]|0;if(!j){r=f;return}Tqa(j);r=f;return}function ioa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;f=nn(d)|0;g=Qqa(8)|0;B=0;va(485,g|0);h=B;B=0;a:do if(h&1)i=21;else{do if(k[g>>2]|0){B=0;j=ya(423,4)|0;l=B;B=0;if(l&1){i=21;break a}B=0;eb(505,j|0,f|0,0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;Sqa(j);n=m;o=l;break a}else{k[g+4>>2]=j;break}}while(0);j=Qqa(8)|0;B=0;va(485,j|0);l=B;B=0;b:do if(l&1)i=23;else{do if(k[j>>2]|0){B=0;m=ya(423,4)|0;p=B;B=0;if(p&1){i=23;break b}B=0;eb(505,m|0,f|0,0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(m);r=q;s=p;break b}else{k[j+4>>2]=m;break}}while(0);m=Qqa(8)|0;B=0;va(485,m|0);p=B;B=0;c:do if(p&1)i=25;else{do if(k[m>>2]|0){B=0;q=ya(423,4)|0;t=B;B=0;if(t&1){i=25;break c}B=0;eb(505,q|0,f|0,0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Sqa(q);v=u;w=t;break c}else{k[m+4>>2]=q;break}}while(0);if((th(d)|0)>0){q=0;do{Jo(qh(d,q)|0,g,j,m,e);q=q+1|0}while((q|0)<(th(d)|0))}if(k[g>>2]|0){q=k[k[g+4>>2]>>2]|0;Ec[k[(k[q>>2]|0)+12>>2]&1023](q)}if(k[j>>2]|0){q=k[k[j+4>>2]>>2]|0;Ec[k[(k[q>>2]|0)+12>>2]&1023](q)}if(k[m>>2]|0){q=k[k[m+4>>2]>>2]|0;Ec[k[(k[q>>2]|0)+12>>2]&1023](q)}if(!(k[g>>2]|0))x=0;else{q=k[k[g+4>>2]>>2]|0;x=Hc[k[(k[q>>2]|0)+52>>2]&511](q)|0}q=x;if(!(k[j>>2]|0))y=0;else{t=k[k[j+4>>2]>>2]|0;y=Hc[k[(k[t>>2]|0)+52>>2]&511](t)|0}if(!(k[m>>2]|0))z=0;else{t=k[k[m+4>>2]>>2]|0;z=Hc[k[(k[t>>2]|0)+52>>2]&511](t)|0}if((k[g>>2]|0)!=0?(t=k[g+4>>2]|0,(t|0)!=0):0){u=k[t>>2]|0;if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Sqa(t)}Sqa(g);if((k[j>>2]|0)!=0?(t=k[j+4>>2]|0,(t|0)!=0):0){u=k[t>>2]|0;if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Sqa(t)}Sqa(j);do if(k[m>>2]|0){t=k[m+4>>2]|0;if(!t)break;u=k[t>>2]|0;if(u)Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Sqa(t)}while(0);Sqa(m);do if(!a){if(!x)break;Tqa(x)}else k[a>>2]=q;while(0);do if(!b){if(!y)break;Tqa(y)}else k[b>>2]=y;while(0);if(c){k[c>>2]=z;return}if(!z)return;Tqa(z);return}while(0);if((i|0)==25){p=Rb()|0;v=Q;w=p}Sqa(m);A=v;C=w;Qb(C|0)}while(0);if((i|0)==23){l=Rb()|0;r=Q;s=l}Sqa(j);A=r;C=s;Qb(C|0)}while(0);if((i|0)==21){i=Rb()|0;n=Q;o=i}Sqa(g);A=n;C=o;Qb(C|0)}function joa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=a+20|0;if((th(k[d>>2]|0)|0)>0)e=0;else return;do{Sp(qh(k[d>>2]|0,e)|0,b,c);e=e+1|0}while((e|0)<(th(k[d>>2]|0)|0));return}function koa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=a+20|0;if((th(k[d>>2]|0)|0)>0)e=0;else return;do{a=qh(k[d>>2]|0,e)|0;nd[k[(k[a>>2]|0)+220>>2]&1023](a,b,c);e=e+1|0}while((e|0)<(th(k[d>>2]|0)|0));return}function loa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;f=r;r=r+16|0;g=f+8|0;h=f+4|0;i=f;k[h>>2]=0;k[i>>2]=0;j=e+44|0;cO(k[j>>2]|0,g,478);cO(k[j>>2]|0,f+12|0,277);j=e+24|0;l=en(k[j>>2]|0,k[g>>2]|0,937)|0;m=en(k[j>>2]|0,k[g>>2]|0,966)|0;n=fn(k[j>>2]|0,k[g>>2]|0,937)|0;o=fn(k[j>>2]|0,k[g>>2]|0,966)|0;an(k[j>>2]|0,k[g>>2]|0,943)|0;g=qZ()|0;j=(a|0)!=0;a:do if(j){if(!(Ita(g,145123)|0)){p=Qqa(8)|0;B=0;va(539,p|0);q=B;B=0;do if(!(q&1)){if(!(k[p>>2]|0)){s=p;break a}B=0;t=ya(423,4)|0;u=B;B=0;if(!(u&1)){B=0;Ta(32,t|0,n|0,n|0,l|0,l|0,0,0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Sqa(t);w=v;x=u;break}else{k[p+4>>2]=t;s=p;break a}}else y=9}else y=9;while(0);if((y|0)==9){q=Rb()|0;w=Q;x=q}Sqa(p);z=w;A=x;Qb(A|0)}moa(h,i,e,937,937);q=Qqa(8)|0;t=k[h>>2]|0;u=k[i>>2]|0;B=0;va(539,q|0);v=B;B=0;b:do if(v&1)y=22;else{do if(k[q>>2]|0){B=0;C=ya(423,4)|0;D=B;B=0;if(D&1){y=22;break b}B=0;Ta(32,C|0,n|0,n|0,l|0,l|0,t|0,u|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Sqa(C);F=E;G=D;break b}else{k[q+4>>2]=C;break}}while(0);if(t)Tqa(t);k[h>>2]=0;if(u)Tqa(u);k[i>>2]=0;s=q;break a}while(0);if((y|0)==22){u=Rb()|0;F=Q;G=u}Sqa(q);z=F;A=G;Qb(A|0)}else s=0;while(0);G=(b|0)==0;c:do if(G)H=0;else{if(!(Ita(g,145123)|0)){F=Qqa(8)|0;B=0;va(539,F|0);x=B;B=0;do if(!(x&1)){if(!(k[F>>2]|0)){H=F;break c}B=0;w=ya(423,4)|0;u=B;B=0;if(!(u&1)){B=0;Ta(32,w|0,n|0,o|0,l|0,m|0,0,0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Sqa(w);I=t;J=u;break}else{k[F+4>>2]=w;H=F;break c}}else y=32}else y=32;while(0);if((y|0)==32){x=Rb()|0;I=Q;J=x}Sqa(F);z=I;A=J;Qb(A|0)}moa(h,i,e,937,966);x=Qqa(8)|0;q=k[h>>2]|0;w=k[i>>2]|0;B=0;va(539,x|0);u=B;B=0;d:do if(u&1)y=45;else{do if(k[x>>2]|0){B=0;t=ya(423,4)|0;v=B;B=0;if(v&1){y=45;break d}B=0;Ta(32,t|0,n|0,o|0,l|0,m|0,q|0,w|0);v=B;B=0;if(v&1){v=Rb()|0;p=Q;Sqa(t);K=p;L=v;break d}else{k[x+4>>2]=t;break}}while(0);if(q)Tqa(q);k[h>>2]=0;if(w)Tqa(w);k[i>>2]=0;H=x;break c}while(0);if((y|0)==45){w=Rb()|0;K=Q;L=w}Sqa(x);z=K;A=L;Qb(A|0)}while(0);L=(c|0)==0;e:do if(L)M=0;else{K=Qqa(8)|0;B=0;va(485,K|0);i=B;B=0;do if(!(i&1)){if(!(k[K>>2]|0)){M=K;break e}B=0;h=ya(423,4)|0;m=B;B=0;if(!(m&1)){B=0;eb(525,h|0,n|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;o=Q;Sqa(h);N=o;O=m;break}else{k[K+4>>2]=h;M=K;break e}}else y=54}else y=54;while(0);if((y|0)==54){i=Rb()|0;N=Q;O=i}Sqa(K);z=N;A=O;Qb(A|0)}while(0);O=(d|0)==0;f:do if(O)P=0;else{N=Qqa(8)|0;B=0;va(485,N|0);i=B;B=0;do if(!(i&1)){if(!(k[N>>2]|0)){P=N;break f}B=0;x=ya(423,4)|0;h=B;B=0;if(!(h&1)){B=0;eb(525,x|0,n|0,l|0);h=B;B=0;if(h&1){h=Rb()|0;m=Q;Sqa(x);R=m;S=h;break}else{k[N+4>>2]=x;P=N;break f}}else y=63}else y=63;while(0);if((y|0)==63){i=Rb()|0;R=Q;S=i}Sqa(N);z=R;A=S;Qb(A|0)}while(0);if(g)Tqa(g);if(j)k[a>>2]=s;if(!G)k[b>>2]=H;if(!L)k[c>>2]=M;if(O){r=f;return}k[d>>2]=P;r=f;return}function moa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=r;r=r+208|0;g=f+188|0;h=f+184|0;j=f+180|0;l=f+176|0;m=f+40|0;n=f+24|0;o=f+12|0;p=f;cO(k[c+44>>2]|0,h,478);q=c+24|0;s=bn(k[q>>2]|0,k[h>>2]|0)|0;t=th(k[q>>2]|0)|0;u=an(k[q>>2]|0,k[h>>2]|0,943)|0;en(k[q>>2]|0,k[h>>2]|0,d)|0;v=en(k[q>>2]|0,k[h>>2]|0,e)|0;w=fn(k[q>>2]|0,k[h>>2]|0,d)|0;x=fn(k[q>>2]|0,k[h>>2]|0,e)|0;y=c+20|0;z=Pq(k[y>>2]|0)|0;A=c+36|0;c=cL(k[A>>2]|0,k[h>>2]|0)|0;C=t>>>0>1073741823?-1:t<<2;D=Rqa(C)|0;E=(t|0)>0;if(E)WEa(D|0,-1,t<<2|0)|0;F=ma(th(k[y>>2]|0)|0,z)|0;G=Rqa(F>>>0>1073741823?-1:F<<2)|0;F=ma(th(k[y>>2]|0)|0,z)|0;H=Rqa(F>>>0>1073741823?-1:F<<2)|0;if((th(k[y>>2]|0)|0)>0){F=0;I=0;while(1){J=qh(k[y>>2]|0,F)|0;K=Hc[k[(k[J>>2]|0)+164>>2]&511](J)|0;L=Rqa(K>>>0>1073741823?-1:K<<2)|0;Ep(J,L);if((Hc[k[(k[J>>2]|0)+164>>2]&511](J)|0)>0){K=0;M=I;while(1){N=k[L+(K<<2)>>2]|0;k[H+(M<<2)>>2]=F;O=D+(N<<2)|0;k[G+(M<<2)>>2]=k[O>>2];N=M+1|0;k[O>>2]=M;K=K+1|0;if((K|0)>=(Hc[k[(k[J>>2]|0)+164>>2]&511](J)|0)){P=N;break}else M=N}}else P=I;if((z|0)>(Hc[k[(k[J>>2]|0)+164>>2]&511](J)|0)){M=0;K=P;while(1){N=K+1|0;M=M+1|0;if((M|0)>=(z-(Hc[k[(k[J>>2]|0)+164>>2]&511](J)|0)|0)){R=N;break}else K=N}}else R=P;Tqa(L);F=F+1|0;if((F|0)>=(th(k[y>>2]|0)|0))break;else I=R}}R=Rqa(C)|0;if(E)WEa(R|0,-1,t<<2|0)|0;I=ma(gL(k[A>>2]|0,k[h>>2]|0)|0,c)|0;F=Rqa(I>>>0>1073741823?-1:I<<2)|0;I=ma(gL(k[A>>2]|0,k[h>>2]|0)|0,c)|0;P=Rqa(I>>>0>1073741823?-1:I<<2)|0;if((bL(k[A>>2]|0)|0)>0){I=0;z=0;while(1){K=qh(k[A>>2]|0,I)|0;if(ed[k[(k[K>>2]|0)+60>>2]&511](K,k[h>>2]|0)|0){J=Hc[k[(k[K>>2]|0)+56>>2]&511](K)|0;M=Rqa(J>>>0>1073741823?-1:J<<2)|0;Fc[k[(k[K>>2]|0)+48>>2]&1023](K,M);if((Hc[k[(k[K>>2]|0)+56>>2]&511](K)|0)>0){J=0;N=z;while(1){O=k[M+(J<<2)>>2]|0;k[P+(N<<2)>>2]=I;S=R+(O<<2)|0;k[F+(N<<2)>>2]=k[S>>2];O=N+1|0;k[S>>2]=N;J=J+1|0;if((J|0)>=(Hc[k[(k[K>>2]|0)+56>>2]&511](K)|0)){T=O;break}else N=O}}else T=z;if((c|0)>(Hc[k[(k[K>>2]|0)+56>>2]&511](K)|0)){N=0;J=T;while(1){L=J+1|0;N=N+1|0;if((N|0)>=(c-(Hc[k[(k[K>>2]|0)+56>>2]&511](K)|0)|0)){U=L;break}else J=L}}else U=T;Tqa(M);V=U}else V=z;I=I+1|0;if((I|0)>=(bL(k[A>>2]|0)|0))break;else z=V}}V=Rqa(t)|0;z=Rqa(C)|0;C=s>>>0>1073741823?-1:s<<2;I=Rqa(C)|0;if(!s){U=Rqa(C)|0;T=Rqa(C)|0;W=Rqa(C)|0;X=U;Y=T}else{T=s<<2;WEa(I|0,0,T|0)|0;U=Rqa(C)|0;WEa(U|0,0,T|0)|0;c=Rqa(C)|0;WEa(c|0,0,T|0)|0;J=Rqa(C)|0;WEa(J|0,0,T|0)|0;W=J;X=U;Y=c}if(E){WEa(V|0,0,t|0)|0;WEa(z|0,-1,t<<2|0)|0}if((th(k[q>>2]|0)|0)>0){t=0;do{E=qh(k[q>>2]|0,t)|0;if(Tn(E,k[h>>2]|0)|0){c=k[z>>2]|0;if((c|0)>-1){U=c;c=z;J=0;do{i[V+U>>0]=0;k[c>>2]=-1;J=J+1|0;c=z+(J<<2)|0;U=k[c>>2]|0}while((U|0)>-1)}U=D+((Rn(E)|0)<<2)|0;c=k[U>>2]|0;if((c|0)!=-1){U=c;do{rq(qh(k[y>>2]|0,k[H+(U<<2)>>2]|0)|0,j,l,E,V,z,d,e);c=(fo(E)|0)==0;J=k[j>>2]|0;if(c){c=I+((Qn(E)|0)<<2)|0;k[c>>2]=(k[c>>2]|0)+J;c=k[l>>2]|0;M=X+((Qn(E)|0)<<2)|0;k[M>>2]=(k[M>>2]|0)+c}else{c=(k[l>>2]|0)+J|0;J=Y+((Qn(E)|0)<<2)|0;k[J>>2]=c+(k[J>>2]|0)}U=k[G+(U<<2)>>2]|0}while((U|0)!=-1)}U=R+((Rn(E)|0)<<2)|0;J=k[U>>2]|0;if((J|0)!=-1){U=J;do{J=qh(k[A>>2]|0,k[P+(U<<2)>>2]|0)|0;Tc[k[(k[J>>2]|0)+88>>2]&15](J,j,l,E,V,z,d,e);J=(fo(E)|0)==0;c=k[j>>2]|0;if(J){J=I+((Qn(E)|0)<<2)|0;k[J>>2]=(k[J>>2]|0)+c;J=k[l>>2]|0;M=X+((Qn(E)|0)<<2)|0;k[M>>2]=(k[M>>2]|0)+J}else{J=(k[l>>2]|0)+c|0;c=Y+((Qn(E)|0)<<2)|0;k[c>>2]=J+(k[c>>2]|0)}U=k[F+(U<<2)>>2]|0}while((U|0)!=-1)}}t=t+1|0}while((t|0)<(th(k[q>>2]|0)|0))}Tqa(V);Tqa(z);Tqa(H);Tqa(D);Tqa(G);Tqa(P);Tqa(R);Tqa(F);fZ(Y,W,s,4,4,uY()|0)|0;Tqa(Y);if((d|0)==937){d=w>>>0>1073741823?-1:w<<2;w=Rqa(d)|0;Y=Rqa(d)|0;if((th(k[q>>2]|0)|0)<=0){Tqa(I);Tqa(X);Tqa(W);k[a>>2]=w;k[b>>2]=Y;r=f;return}d=v-x|0;v=0;s=0;while(1){F=qh(k[q>>2]|0,s)|0;if((Tn(F,k[h>>2]|0)|0?(fo(F)|0)==0:0)?(R=F+28|0,(k[R>>2]|0)>0):0){P=v;G=0;while(1){D=I+((Qn(F)|0)<<2)|0;H=k[D>>2]|0;D=W+((Qn(F)|0)<<2)|0;z=ma((k[D>>2]|0)+H|0,u)|0;H=w+(P<<2)|0;k[H>>2]=z;z=X+((Qn(F)|0)<<2)|0;D=k[z>>2]|0;z=W+((Qn(F)|0)<<2)|0;V=ma((k[z>>2]|0)+D|0,u)|0;D=Y+(P<<2)|0;k[D>>2]=V;if((k[H>>2]|0)>(x|0))k[H>>2]=x;if((V|0)>(d|0))k[D>>2]=d;D=P+1|0;G=G+1|0;if((G|0)>=(k[R>>2]|0)){Z=D;break}else P=D}}else Z=v;s=s+1|0;if((s|0)>=(th(k[q>>2]|0)|0))break;else v=Z}Tqa(I);Tqa(X);Tqa(W);k[a>>2]=w;k[b>>2]=Y;r=f;return}f=m+56|0;Y=m+4|0;k[m>>2]=27524;k[f>>2]=27544;B=0;wa(508,m+56|0,Y|0);b=B;B=0;if(b&1){b=Rb()|0;_=Q;$=b;vva(f);Qb($|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[f>>2]=27488;B=0;va(448,Y|0);b=B;B=0;do if(b&1){w=Rb()|0;aa=Q;ba=w}else{k[Y>>2]=27560;w=m+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,Y|0,g|0);a=B;B=0;if(a&1){a=Rb()|0;W=Q;Yua(g);Yua(w);Ava(Y);aa=W;ba=a;break}Yua(g);B=0;a=Ia(40,m|0,145128,20)|0;W=B;B=0;if(!(W&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,n|0,145149,106);W=B;B=0;do if(!(W&1)){B=0;eb(502,o|0,145256,14);X=B;B=0;if(X&1){X=Rb()|0;I=Q;Yua(n);ca=I;da=X;break}B=0;wa(510,p|0,Y|0);X=B;B=0;if(X&1){X=Rb()|0;ea=Q;fa=X;ga=1}else{B=0;ua(163,a|0,n|0,o|0,273,p|0);X=B;B=0;if(X&1)ha=1;else{B=0;eb(503,a|0,1240,229);B=0;ha=0}X=Rb()|0;I=Q;Yua(p);ea=I;fa=X;ga=ha}Yua(o);Yua(n);if(ga){ca=ea;da=fa}else{ia=ea;ja=fa;k[m>>2]=27468;k[f>>2]=27488;k[Y>>2]=27560;Yua(w);Ava(Y);vva(f);Qb(ja|0)}}else{X=Rb()|0;ca=Q;da=X}while(0);zb(a|0);ia=ca;ja=da;k[m>>2]=27468;k[f>>2]=27488;k[Y>>2]=27560;Yua(w);Ava(Y);vva(f);Qb(ja|0)}W=Rb()|0;ia=Q;ja=W;k[m>>2]=27468;k[f>>2]=27488;k[Y>>2]=27560;Yua(w);Ava(Y);vva(f);Qb(ja|0)}while(0);_=aa;$=ba;vva(f);Qb($|0)}function noa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;g=r;r=r+528|0;f=g+516|0;c=g+368|0;b=g+504|0;h=g+356|0;i=g+344|0;j=g+208|0;l=g+60|0;m=g+48|0;n=g+36|0;o=g+72|0;p=g+24|0;q=g+12|0;s=g;switch(bZ()|0){case 973:{t=Qqa(16)|0;k[t>>2]=28724;k[t+4>>2]=d;k[t+8>>2]=e;u=t+12|0;k[u>>2]=0;v=ma(e,d)|0;if(!v){k[a>>2]=t;r=g;return}B=0;d=ya(422,(v>>>0>536870911?-1:v<<3)|0)|0;e=B;B=0;if(e&1){e=Rb()|0;w=Q;Sqa(t);x=w;y=e;Qb(y|0)}else{WEa(d|0,0,v<<3|0)|0;k[u>>2]=d;k[a>>2]=t;r=g;return}break}case 974:{g=c+56|0;t=c+4|0;k[c>>2]=27524;k[g>>2]=27544;B=0;wa(508,c+56|0,t|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;vva(g);Qb(A|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[g>>2]=27488;B=0;va(448,t|0);a=B;B=0;do if(a&1){d=Rb()|0;C=Q;D=d}else{k[t>>2]=27560;d=c+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[c+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(f);Yua(d);Ava(t);C=v;D=u;break}Yua(f);B=0;u=Ia(40,c|0,145271,44)|0;v=B;B=0;a:do if(!(v&1)?(B=0,Xa(239,u|0,0)|0,e=B,B=0,!(e&1)):0){e=Ab(20)|0;B=0;eb(502,b|0,145316,134);w=B;B=0;do if(!(w&1)){B=0;eb(502,h|0,145451,7);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(b);G=F;H=E;break}B=0;wa(510,i|0,t|0);E=B;B=0;if(E&1){E=Rb()|0;I=E;J=Q;K=1}else{B=0;ua(163,e|0,b|0,h|0,131,i|0);E=B;B=0;if(E&1)L=1;else{B=0;eb(503,e|0,1240,229);B=0;L=0}E=Rb()|0;F=Q;Yua(i);I=E;J=F;K=L}Yua(h);Yua(b);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=Q;H=F}while(0);zb(e|0);M=G;N=H}else O=22;while(0);if((O|0)==22){u=Rb()|0;M=Q;N=u}k[c>>2]=27468;k[g>>2]=27488;k[t>>2]=27560;Yua(d);Ava(t);vva(g);x=M;y=N;Qb(y|0)}while(0);z=C;A=D;vva(g);Qb(A|0);break}case 975:{A=j+56|0;g=j+4|0;k[j>>2]=27524;k[A>>2]=27544;B=0;wa(508,j+56|0,g|0);D=B;B=0;if(D&1){D=Rb()|0;P=Q;R=D;vva(A);Qb(R|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[A>>2]=27488;B=0;va(448,g|0);D=B;B=0;do if(D&1){C=Rb()|0;S=Q;T=C}else{k[g>>2]=27560;C=j+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,g|0,f|0);z=B;B=0;if(z&1){z=Rb()|0;N=Q;Yua(f);Yua(C);Ava(g);S=N;T=z;break}Yua(f);B=0;z=Ia(40,j|0,145459,45)|0;N=B;B=0;b:do if(!(N&1)?(B=0,Xa(239,z|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,l|0,145316,134);t=B;B=0;do if(!(t&1)){B=0;eb(502,m|0,145451,7);c=B;B=0;if(c&1){c=Rb()|0;H=Q;Yua(l);U=c;V=H;break}B=0;wa(510,n|0,g|0);H=B;B=0;if(H&1){H=Rb()|0;W=1;X=Q;Y=H}else{B=0;ua(163,M|0,l|0,m|0,138,n|0);H=B;B=0;if(H&1)Z=1;else{B=0;eb(503,M|0,1240,229);B=0;Z=0}H=Rb()|0;c=Q;Yua(n);W=Z;X=c;Y=H}Yua(m);Yua(l);if(W){U=Y;V=X}else{_=X;$=Y;break b}}else{H=Rb()|0;U=H;V=Q}while(0);zb(M|0);_=V;$=U}else O=45;while(0);if((O|0)==45){z=Rb()|0;_=Q;$=z}k[j>>2]=27468;k[A>>2]=27488;k[g>>2]=27560;Yua(C);Ava(g);vva(A);x=_;y=$;Qb(y|0)}while(0);P=S;R=T;vva(A);Qb(R|0);break}default:{R=o+56|0;A=o+4|0;k[o>>2]=27524;k[R>>2]=27544;B=0;wa(508,o+56|0,A|0);T=B;B=0;if(T&1){T=Rb()|0;aa=Q;ba=T;vva(R);Qb(ba|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[R>>2]=27488;B=0;va(448,A|0);T=B;B=0;do if(T&1){S=Rb()|0;ca=Q;da=S}else{k[A>>2]=27560;S=o+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,A|0,f|0);P=B;B=0;if(P&1){P=Rb()|0;$=Q;Yua(f);Yua(S);Ava(A);ca=$;da=P;break}Yua(f);B=0;P=Ia(40,o|0,145505,30)|0;$=B;B=0;c:do if(!($&1)?(B=0,Xa(239,P|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,p|0,145316,134);g=B;B=0;do if(!(g&1)){B=0;eb(502,q|0,145451,7);j=B;B=0;if(j&1){j=Rb()|0;U=Q;Yua(p);ea=j;fa=U;break}B=0;wa(510,s|0,A|0);U=B;B=0;if(U&1){U=Rb()|0;ga=1;ha=Q;ia=U}else{B=0;ua(163,_|0,p|0,q|0,142,s|0);U=B;B=0;if(U&1)ja=1;else{B=0;eb(503,_|0,1240,229);B=0;ja=0}U=Rb()|0;j=Q;Yua(s);ga=ja;ha=j;ia=U}Yua(q);Yua(p);if(ga){ea=ia;fa=ha}else{ka=ha;la=ia;break c}}else{U=Rb()|0;ea=U;fa=Q}while(0);zb(_|0);ka=fa;la=ea}else O=68;while(0);if((O|0)==68){P=Rb()|0;ka=Q;la=P}k[o>>2]=27468;k[R>>2]=27488;k[A>>2]=27560;Yua(S);Ava(A);vva(R);x=ka;y=la;Qb(y|0)}while(0);aa=ca;ba=da;vva(R);Qb(ba|0)}}}function ooa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0;g=r;r=r+352|0;h=g+336|0;i=g+332|0;j=g+328|0;l=g+324|0;m=g+320|0;n=g+316|0;o=g+312|0;q=g+308|0;s=g+304|0;t=g+168|0;u=g+152|0;v=g+16|0;w=g;k[n>>2]=0;k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;a:do if(BY()|0){x=t+56|0;y=t+4|0;k[t>>2]=27524;k[x>>2]=27544;B=0;wa(508,t+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=t+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[t+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,y|0,h|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(h);Yua(D);Ava(y);E=H;F=G;break}Yua(h);B=0;Ia(40,t|0,145536,22)|0;G=B;B=0;do if(!(G&1)?(B=0,wa(510,u|0,y|0),H=B,B=0,!(H&1)):0){B=0;ya(425,u|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(u);J=H;K=I;break}else{Yua(u);k[t>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);break a}}else L=14;while(0);if((L|0)==14){G=Rb()|0;J=G;K=Q}k[t>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);M=J;N=K;Qb(M|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}while(0);C=f+44|0;cO(k[C>>2]|0,l,478);cO(k[C>>2]|0,m,477);C=n_(k[m>>2]|0)|0;m=f+36|0;F=aL(k[m>>2]|0,k[l>>2]|0)|0;if(F){k[h>>2]=0;loa(h,0,0,0,f);E=f+20|0;if((th(k[E>>2]|0)|0)>0){A=0;do{K=qh(k[E>>2]|0,A)|0;J=ed[k[(k[C>>2]|0)+44>>2]&511](C,K)|0;t=ed[k[(k[C>>2]|0)+48>>2]&511](C,K)|0;nd[k[(k[K>>2]|0)+408>>2]&1023](K,J,t);if(J){IN(J,k[h>>2]|0,0);HN(J);Sqa(J)}if(t){SN(t);Sqa(t)}A=A+1|0}while((A|0)<(th(k[E>>2]|0)|0))}if((bL(k[m>>2]|0)|0)>0){E=0;do{A=qh(k[m>>2]|0,E)|0;if(ed[k[(k[A>>2]|0)+60>>2]&511](A,k[l>>2]|0)|0)nd[k[(k[A>>2]|0)+40>>2]&1023](A,k[h>>2]|0,0);E=E+1|0}while((E|0)<(bL(k[m>>2]|0)|0))}E=k[h>>2]|0;if(k[E>>2]|0){A=k[k[E+4>>2]>>2]|0;Ec[k[(k[A>>2]|0)+12>>2]&1023](A);A=k[h>>2]|0;if(!(k[A>>2]|0)){O=A;P=0.0}else{t=k[k[A+4>>2]>>2]|0;R=+id[k[(k[t>>2]|0)+16>>2]&63](t,0);O=k[h>>2]|0;P=R}}else{O=E;P=0.0}if(O){if((k[O>>2]|0)!=0?(E=k[O+4>>2]|0,(E|0)!=0):0){t=k[E>>2]|0;if(t)Ec[k[(k[t>>2]|0)+4>>2]&1023](t);Sqa(E)}Sqa(O)}S=P}else S=0.0;loa(n,o,s,q,f);b:do if(BY()|0){O=k[n>>2]|0;if(k[O>>2]|0){E=k[k[O+4>>2]>>2]|0;nd[k[(k[E>>2]|0)+20>>2]&1023](E,i,j)}E=v+56|0;O=v+4|0;k[v>>2]=27524;k[E>>2]=27544;B=0;wa(508,v+56|0,O|0);t=B;B=0;if(t&1){t=Rb()|0;T=Q;U=t;vva(E);Qb(U|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[E>>2]=27488;B=0;va(448,O|0);t=B;B=0;do if(t&1){A=Rb()|0;V=Q;W=A}else{k[O>>2]=27560;A=v+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[v+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,O|0,h|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(h);Yua(A);Ava(O);V=K;W=J;break}Yua(h);B=0;J=Ia(40,v|0,145559,29)|0;K=B;B=0;do if(((((!(K&1)?(B=0,u=Xa(242,J|0,k[i>>2]|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,u|0,145589,3)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Xa(242,y|0,k[j>>2]|0)|0,y=B,B=0,!(y&1)):0)?(B=0,Ia(40,u|0,145593,2)|0,u=B,B=0,!(u&1)):0)?(B=0,wa(510,w|0,O|0),u=B,B=0,!(u&1)):0){B=0;ya(425,w|0)|0;u=B;B=0;if(u&1){u=Rb()|0;y=Q;Yua(w);X=u;Y=y;break}else{Yua(w);k[v>>2]=27468;k[E>>2]=27488;k[O>>2]=27560;Yua(A);Ava(O);vva(E);break b}}else L=62;while(0);if((L|0)==62){J=Rb()|0;X=J;Y=Q}k[v>>2]=27468;k[E>>2]=27488;k[O>>2]=27560;Yua(A);Ava(O);vva(E);M=X;N=Y;Qb(M|0)}while(0);T=V;U=W;vva(E);Qb(U|0)}while(0);U=f+20|0;if((th(k[U>>2]|0)|0)>0){f=0;do{W=qh(k[U>>2]|0,f)|0;V=ed[k[(k[C>>2]|0)+44>>2]&511](C,W)|0;T=ed[k[(k[C>>2]|0)+48>>2]&511](C,W)|0;nd[k[(k[W>>2]|0)+408>>2]&1023](W,V,T);W=(V|0)==0;if(!W)IN(V,k[n>>2]|0,k[o>>2]|0);M=(T|0)==0;if(!M)TN(T,k[q>>2]|0);if(!W){HN(V);Sqa(V)}if(!M){SN(T);Sqa(T)}f=f+1|0}while((f|0)<(th(k[U>>2]|0)|0))}if((bL(k[m>>2]|0)|0)>0){f=0;do{T=qh(k[m>>2]|0,f)|0;if(ed[k[(k[T>>2]|0)+60>>2]&511](T,k[l>>2]|0)|0){nd[k[(k[T>>2]|0)+40>>2]&1023](T,k[n>>2]|0,k[o>>2]|0);Fc[k[(k[T>>2]|0)+44>>2]&1023](T,k[q>>2]|0)}f=f+1|0}while((f|0)<(bL(k[m>>2]|0)|0))}if(F?(bL(k[m>>2]|0)|0)>0:0){F=0;do{f=qh(k[m>>2]|0,F)|0;if(ed[k[(k[f>>2]|0)+60>>2]&511](f,k[l>>2]|0)|0){md[k[(k[f>>2]|0)+72>>2]&31](f,k[n>>2]|0,k[o>>2]|0,S);Xc[k[(k[f>>2]|0)+76>>2]&63](f,k[q>>2]|0,S)}F=F+1|0}while((F|0)<(bL(k[m>>2]|0)|0))}m=(d|0)!=0;if(m?(th(k[U>>2]|0)|0)>0:0){F=0;do{l=qh(k[U>>2]|0,F)|0;f=ed[k[(k[C>>2]|0)+36>>2]&511](C,l)|0;if(f){UN(f,k[s>>2]|0);SN(f);Sqa(f)}F=F+1|0}while((F|0)<(th(k[U>>2]|0)|0))}U=k[n>>2]|0;if(k[U>>2]|0){F=k[k[U+4>>2]>>2]|0;Ec[k[(k[F>>2]|0)+12>>2]&1023](F)}F=k[o>>2]|0;if(k[F>>2]|0){U=k[k[F+4>>2]>>2]|0;Ec[k[(k[U>>2]|0)+12>>2]&1023](U)}U=k[q>>2]|0;if(k[U>>2]|0){F=k[k[U+4>>2]>>2]|0;Ec[k[(k[F>>2]|0)+12>>2]&1023](F)}F=k[s>>2]|0;if(k[F>>2]|0){U=k[k[F+4>>2]>>2]|0;Ec[k[(k[U>>2]|0)+12>>2]&1023](U)}if(C)Ec[k[(k[C>>2]|0)+4>>2]&1023](C);C=k[n>>2]|0;if(!a){if(C){if((k[C>>2]|0)!=0?(n=k[C+4>>2]|0,(n|0)!=0):0){U=k[n>>2]|0;if(U)Ec[k[(k[U>>2]|0)+4>>2]&1023](U);Sqa(n)}Sqa(C)}}else k[a>>2]=C;C=k[o>>2]|0;if(!b){if(C){if((k[C>>2]|0)!=0?(o=k[C+4>>2]|0,(o|0)!=0):0){a=k[o>>2]|0;if(a)Ec[k[(k[a>>2]|0)+4>>2]&1023](a);Sqa(o)}Sqa(C)}}else k[b>>2]=C;C=k[q>>2]|0;if(!c){if(C){if((k[C>>2]|0)!=0?(q=k[C+4>>2]|0,(q|0)!=0):0){b=k[q>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);Sqa(q)}Sqa(C)}}else k[c>>2]=C;C=k[s>>2]|0;if(!m){if(C){do if(k[C>>2]|0){m=k[C+4>>2]|0;if(!m)break;s=k[m>>2]|0;if(s)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);Sqa(m)}while(0);Sqa(C)}}else k[d>>2]=C;if(!e){r=g;return}p[e>>3]=S;r=g;return}function poa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;a:do if(BY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;Ia(40,f|0,145596,28)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,g|0,i|0),s=B,B=0,!(s&1)):0){B=0;ya(425,g|0)|0;s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(g);u=t;v=s;break}else{Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}}else w=14;while(0);if((w|0)==14){q=Rb()|0;u=Q;v=q}k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);x=u;y=v;Qb(y|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=en(b,c,966)|0;p=fn(b,c,966)|0;o=Qqa(8)|0;B=0;va(485,o|0);l=B;B=0;b:do if(l&1)w=24;else{do if(k[o>>2]|0){B=0;v=ya(423,4)|0;u=B;B=0;if(u&1){w=24;break b}B=0;eb(525,v|0,p|0,m|0);u=B;B=0;if(u&1){u=Rb()|0;f=Q;Sqa(v);z=f;A=u;break b}else{k[o+4>>2]=v;break}}while(0);if((th(b)|0)>0){h=0;do{v=qh(b,h)|0;if(Tn(v,c)|0)_n(v,o);h=h+1|0}while((h|0)<(th(b)|0))}if(!(k[o>>2]|0)){k[a>>2]=o;r=d;return}h=k[k[o+4>>2]>>2]|0;Ec[k[(k[h>>2]|0)+12>>2]&1023](h);k[a>>2]=o;r=d;return}while(0);if((w|0)==24){w=Rb()|0;z=Q;A=w}Sqa(o);x=z;y=A;Qb(y|0)}function qoa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;g=r;r=r+384|0;h=g+372|0;i=g+368|0;j=g+364|0;l=g+360|0;m=g+356|0;n=g+352|0;o=g+216|0;p=g+200|0;q=g+48|0;s=g+36|0;t=g+64|0;u=g+24|0;v=g+12|0;w=g;k[l>>2]=0;Oka(b,i,j,c)|0;if((k[i>>2]|0)!=7){i=o+56|0;x=o+4|0;k[o>>2]=27524;k[i>>2]=27544;B=0;wa(508,o+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(i);Qb(A|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[i>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=o+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[o+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,x|0,h|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(h);Yua(C);Ava(x);D=G;E=F;break}Yua(h);B=0;F=Ia(40,o|0,145625,46)|0;G=B;B=0;a:do if((!(G&1)?(H=Lta(c)|0,B=0,I=Ia(40,F|0,c|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,p|0,145672,102);H=B;B=0;do if(!(H&1)){B=0;eb(502,q|0,145775,21);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(p);L=J;M=K;break}B=0;wa(510,s|0,x|0);K=B;B=0;if(K&1){K=Rb()|0;N=Q;O=K;P=1}else{B=0;ua(163,I|0,p|0,q|0,19,s|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}K=Rb()|0;J=Q;Yua(s);N=J;O=K;P=R}Yua(q);Yua(p);if(P){L=O;M=N}else{S=O;T=N;break a}}else{K=Rb()|0;L=K;M=Q}while(0);zb(I|0);S=L;T=M}else U=18;while(0);if((U|0)==18){F=Rb()|0;S=F;T=Q}k[o>>2]=27468;k[i>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(i);V=T;W=S;Qb(W|0)}while(0);z=D;A=E;vva(i);Qb(A|0)}if((k[j>>2]|0)==1){Qka(b,l,m,n,c);roa(a,b,k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,d,e,f);f=k[l>>2]|0;if(!f){r=g;return}Tqa(f);r=g;return}g=t+56|0;f=t+4|0;k[t>>2]=27524;k[g>>2]=27544;B=0;wa(508,t+56|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;X=Q;Y=l;vva(g);Qb(Y|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[g>>2]=27488;B=0;va(448,f|0);l=B;B=0;do if(l&1){e=Rb()|0;Z=Q;_=e}else{k[f>>2]=27560;e=t+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[t+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,f|0,h|0);d=B;B=0;if(d&1){d=Rb()|0;n=Q;Yua(h);Yua(e);Ava(f);Z=n;_=d;break}Yua(h);B=0;d=Ia(40,t|0,145797,41)|0;n=B;B=0;b:do if((!(n&1)?(m=Lta(c)|0,B=0,b=Ia(40,d|0,c|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,u|0,145672,102);m=B;B=0;do if(!(m&1)){B=0;eb(502,v|0,145775,21);a=B;B=0;if(a&1){a=Rb()|0;j=Q;Yua(u);$=a;aa=j;break}B=0;wa(510,w|0,f|0);j=B;B=0;if(j&1){j=Rb()|0;ba=1;ca=Q;da=j}else{B=0;ua(163,b|0,u|0,v|0,20,w|0);j=B;B=0;if(j&1)ea=1;else{B=0;eb(503,b|0,1240,229);B=0;ea=0}j=Rb()|0;a=Q;Yua(w);ba=ea;ca=a;da=j}Yua(v);Yua(u);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{j=Rb()|0;$=j;aa=Q}while(0);zb(b|0);fa=aa;ga=$}else U=43;while(0);if((U|0)==43){d=Rb()|0;fa=Q;ga=d}k[t>>2]=27468;k[g>>2]=27488;k[f>>2]=27560;Yua(e);Ava(f);vva(g);V=fa;W=ga;Qb(W|0)}while(0);X=Z;Y=_;vva(g);Qb(Y|0)}function roa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0.0,ab=0.0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0.0,kb=0,lb=0,mb=0,nb=0,ob=0.0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0.0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0.0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0.0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0.0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0;j=r;r=r+1088|0;l=j+1064|0;m=j+1036|0;n=j+1020|0;o=j+1016|0;q=j+880|0;s=j+1052|0;u=j+1040|0;v=j+1024|0;w=j+728|0;x=j+864|0;y=j+712|0;z=j+560|0;A=j+576|0;C=j+272|0;D=j+120|0;E=j+108|0;F=j+424|0;G=j+96|0;H=j+84|0;I=j+72|0;J=j+288|0;K=j+60|0;L=j+48|0;M=j+36|0;N=j+136|0;O=j+24|0;P=j+12|0;R=j;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;a:do switch(g|0){case 741:case 738:{S=0;break}case 740:{switch(k[b+48>>2]|0){case 621:{S=3;break a;break}case 623:{S=4;break a;break}case 625:{S=6;break a;break}default:{T=q+56|0;U=q+4|0;k[q>>2]=27524;k[T>>2]=27544;B=0;wa(508,q+56|0,U|0);V=B;B=0;if(V&1){V=Rb()|0;W=Q;X=V;vva(T);Qb(X|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[T>>2]=27488;B=0;va(448,U|0);V=B;B=0;do if(V&1){Y=Rb()|0;Z=Q;_=Y}else{k[U>>2]=27560;Y=q+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[q+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,U|0,l|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(l);Yua(Y);Ava(U);Z=ba;_=aa;break}Yua(l);B=0;aa=Ia(40,q|0,145839,27)|0;ba=B;B=0;b:do if(!(ba&1)?(B=0,Xa(239,aa|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,s|0,145672,102);da=B;B=0;do if(!(da&1)){B=0;eb(502,u|0,145775,21);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(s);ga=fa;ha=ea;break}B=0;wa(510,v|0,U|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ia=Q;ja=ea;ka=1}else{B=0;ua(163,ca|0,s|0,u|0,77,v|0);ea=B;B=0;if(ea&1)la=1;else{B=0;eb(503,ca|0,1240,229);B=0;la=0}ea=Rb()|0;fa=Q;Yua(v);ia=fa;ja=ea;ka=la}Yua(u);Yua(s);if(ka){ga=ia;ha=ja}else{na=ia;oa=ja;break b}}else{ea=Rb()|0;ga=Q;ha=ea}while(0);zb(ca|0);na=ga;oa=ha}else pa=20;while(0);if((pa|0)==20){aa=Rb()|0;na=Q;oa=aa}k[q>>2]=27468;k[T>>2]=27488;k[U>>2]=27560;Yua(Y);Ava(U);vva(T);qa=na;ra=oa;Qb(ra|0)}while(0);W=Z;X=_;vva(T);Qb(X|0)}}break}case 746:{lqa(m,b);S=0;break}case 747:{lqa(m,b);S=0;break}case 745:{lqa(m,b);S=0;break}case 742:{lqa(m,b);if((k[b+48>>2]|0)==625)mqa(n,b);oqa(o,b);S=0;break}case 743:{lqa(m,b);U=b+48|0;if((k[U>>2]|0)==625)mqa(n,b);oqa(o,b);switch(k[U>>2]|0){case 621:{S=3;break a;break}case 623:{S=4;break a;break}case 625:{S=6;break a;break}default:{U=w+56|0;V=w+4|0;k[w>>2]=27524;k[U>>2]=27544;B=0;wa(508,w+56|0,V|0);aa=B;B=0;if(aa&1){aa=Rb()|0;sa=Q;ta=aa;vva(U);Qb(ta|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[U>>2]=27488;B=0;va(448,V|0);aa=B;B=0;do if(aa&1){ba=Rb()|0;xa=Q;za=ba}else{k[V>>2]=27560;ba=w+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[w+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,V|0,l|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(l);Yua(ba);Ava(V);xa=ea;za=da;break}Yua(l);B=0;da=Ia(40,w|0,145839,27)|0;ea=B;B=0;c:do if(!(ea&1)?(B=0,Xa(239,da|0,0)|0,fa=B,B=0,!(fa&1)):0){fa=Ab(20)|0;B=0;eb(502,x|0,145672,102);Aa=B;B=0;do if(!(Aa&1)){B=0;eb(502,y|0,145775,21);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(x);Da=Ca;Ea=Ba;break}B=0;wa(510,z|0,V|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Fa=1;Ga=Q;Ha=Ba}else{B=0;ua(163,fa|0,x|0,y|0,109,z|0);Ba=B;B=0;if(Ba&1)Ja=1;else{B=0;eb(503,fa|0,1240,229);B=0;Ja=0}Ba=Rb()|0;Ca=Q;Yua(z);Fa=Ja;Ga=Ca;Ha=Ba}Yua(y);Yua(x);if(Fa){Da=Ga;Ea=Ha}else{La=Ga;Ma=Ha;break c}}else{Ba=Rb()|0;Da=Q;Ea=Ba}while(0);zb(fa|0);La=Da;Ma=Ea}else pa=54;while(0);if((pa|0)==54){da=Rb()|0;La=Q;Ma=da}k[w>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(ba);Ava(V);vva(U);qa=La;ra=Ma;Qb(ra|0)}while(0);sa=xa;ta=za;vva(U);Qb(ta|0)}}break}case 748:{lqa(m,b);mqa(n,b);S=0;break}default:{V=A+56|0;aa=A+4|0;k[A>>2]=27524;k[V>>2]=27544;B=0;wa(508,A+56|0,aa|0);T=B;B=0;if(T&1){T=Rb()|0;Na=Q;Oa=T;vva(V);Qb(Oa|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[V>>2]=27488;B=0;va(448,aa|0);T=B;B=0;do if(T&1){da=Rb()|0;Qa=Q;Ra=da}else{k[aa>>2]=27560;da=A+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[A+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,aa|0,l|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Y=Q;Yua(l);Yua(da);Ava(aa);Qa=Y;Ra=ea;break}Yua(l);B=0;ea=Ia(40,A|0,145867,15)|0;Y=B;B=0;d:do if((((!(Y&1)?(B=0,Aa=ya(427,g|0)|0,ca=B,B=0,!(ca&1)):0)?(ca=Lta(Aa)|0,B=0,Ba=Ia(40,ea|0,Aa|0,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Ia(40,Ba|0,146481,18)|0,Ba=B,B=0,!(Ba&1)):0)?(B=0,Xa(239,ca|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,C|0,145672,102);Ba=B;B=0;do if(!(Ba&1)){B=0;eb(502,D|0,145775,21);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ca=Q;Yua(C);Sa=Ca;Ta=Aa;break}B=0;wa(510,E|0,aa|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ua=1;Va=Q;Wa=Aa}else{B=0;ua(163,ca|0,C|0,D|0,117,E|0);Aa=B;B=0;if(Aa&1)Ya=1;else{B=0;eb(503,ca|0,1240,229);B=0;Ya=0}Aa=Rb()|0;Ca=Q;Yua(E);Ua=Ya;Va=Ca;Wa=Aa}Yua(D);Yua(C);if(Ua){Sa=Va;Ta=Wa}else{Za=Va;_a=Wa;break d}}else{Aa=Rb()|0;Sa=Q;Ta=Aa}while(0);zb(ca|0);Za=Sa;_a=Ta}else pa=81;while(0);if((pa|0)==81){ea=Rb()|0;Za=Q;_a=ea}k[A>>2]=27468;k[V>>2]=27488;k[aa>>2]=27560;Yua(da);Ava(aa);vva(V);qa=Za;ra=_a;Qb(ra|0)}while(0);Na=Qa;Oa=Ra;vva(V);Qb(Oa|0)}}while(0);Oa=b+52|0;Ra=k[Oa>>2]|0;e:do if((Ra|0)==(d|0))do switch(g|0){case 738:{if((d|0)<=0)break e;Qa=b+36|0;Na=b+108|0;_a=b+100|0;Za=d;A=0;Ta=0;while(1){if((k[(k[Qa>>2]|0)+(Ta<<2)>>2]|0)!=0?($a=+p[c+(Ta<<3)>>3],ab=+$(+$a),p[t>>3]=ab,Sa=k[t+4>>2]|0,!(Sa>>>0>2146435072|(Sa|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Sa=Qqa(32)|0;Wa=A+1|0;B=0;Pa(1,Sa|0,Wa+(k[Na>>2]|0)|0,Ta+1+(k[_a>>2]|0)|0,h|0,+$a,f|0);Va=B;B=0;if(Va&1){bb=Sa;break}ih(a,Sa)|0;cb=k[Oa>>2]|0;db=Wa}else{cb=Za;db=A}Ta=Ta+1|0;if((Ta|0)>=(cb|0))break e;else{Za=cb;A=db}}A=Rb()|0;Za=Q;Sqa(bb);qa=Za;ra=A;Qb(ra|0);break}case 742:{f:do if((d|0)>0){A=b+36|0;Za=b+108|0;Ta=b+100|0;_a=d;Na=0;Qa=0;while(1){if((k[(k[A>>2]|0)+(Qa<<2)>>2]|0)!=0?($a=+p[c+(Qa<<3)>>3],ab=+$(+$a),p[t>>3]=ab,da=k[t+4>>2]|0,!(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){da=Qqa(32)|0;Wa=Na+1|0;B=0;Pa(1,da|0,Wa+(k[Za>>2]|0)|0,Qa+1+(k[Ta>>2]|0)|0,h|0,+$a,f|0);Sa=B;B=0;if(Sa&1){fb=da;break}ih(a,da)|0;gb=k[Oa>>2]|0;hb=Wa}else{gb=_a;hb=Na}Qa=Qa+1|0;if((Qa|0)>=(gb|0)){ib=hb;break f}else{_a=gb;Na=hb}}Na=Rb()|0;_a=Q;Sqa(fb);qa=_a;ra=Na;Qb(ra|0)}else ib=0;while(0);Na=b+64|0;_a=k[Na>>2]|0;g:do if((_a|0)>0){Qa=b+80|0;Ta=b+108|0;Za=b+100|0;A=_a;ca=ib;Wa=0;while(1){if((((i[(k[m>>2]|0)+Wa>>0]|0)!=0?(i[(k[o>>2]|0)+Wa>>0]|0)!=0:0)?(da=Wa*3|0,Sa=k[Qa>>2]|0,$a=+p[c+((k[Sa+(da<<2)>>2]|0)+-1<<3)>>3],ab=+$(+$a),p[t>>3]=ab,Va=k[t+4>>2]|0,!(Va>>>0>2146435072|(Va|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(ab=+p[c+((k[Sa+(da+1<<2)>>2]|0)+-1<<3)>>3],jb=+$(+ab),p[t>>3]=jb,da=k[t+4>>2]|0,!(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){da=Qqa(32)|0;Sa=ca+1|0;B=0;Pa(1,da|0,Sa+(k[Ta>>2]|0)|0,Wa+1+(k[Za>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(($a+ab)*.5),f|0);Va=B;B=0;if(Va&1){kb=da;break}ih(a,da)|0;lb=k[Na>>2]|0;mb=Sa}else{lb=A;mb=ca}Wa=Wa+1|0;if((Wa|0)>=(lb|0)){nb=mb;break g}else{A=lb;ca=mb}}ca=Rb()|0;A=Q;Sqa(kb);qa=A;ra=ca;Qb(ra|0)}else nb=ib;while(0);if((k[b+48>>2]|0)!=625)break e;_a=b+60|0;ca=k[_a>>2]|0;if((ca|0)<=0)break e;A=b+68|0;Wa=b+76|0;Za=b+108|0;Ta=b+100|0;Qa=ca;ca=nb;Sa=0;while(1){da=ma(k[A>>2]|0,Sa)|0;Va=k[Wa>>2]|0;if((k[Va+(da+2<<2)>>2]|0)==2?(i[(k[n>>2]|0)+Sa>>0]|0)!=0:0){Ua=k[Va+(da+3<<2)>>2]|0;if((Ua|0)>0){C=0;ab=0.0;while(1){$a=ab+ +p[c+((k[Va+(C+4+da<<2)>>2]|0)+-1<<3)>>3];C=C+1|0;if((C|0)==(Ua|0)){ob=$a;break}else ab=$a}}else ob=0.0;ab=ob/+(Ua|0);$a=+$(+ab);p[t>>3]=$a;C=k[t+4>>2]|0;if(!(C>>>0>2146435072|(C|0)==2146435072&(k[t>>2]|0)>>>0>0)){C=Qqa(32)|0;da=ca+1|0;B=0;Pa(1,C|0,da+(k[Za>>2]|0)|0,Sa+1+(k[Ta>>2]|0)+(k[Oa>>2]|0)+(k[Na>>2]|0)|0,h|0,+ab,f|0);Va=B;B=0;if(Va&1){pb=C;break}ih(a,C)|0;qb=k[_a>>2]|0;rb=da}else{qb=Qa;rb=ca}}else{qb=Qa;rb=ca}Sa=Sa+1|0;if((Sa|0)>=(qb|0))break e;else{Qa=qb;ca=rb}}ca=Rb()|0;Qa=Q;Sqa(pb);qa=Qa;ra=ca;Qb(ra|0);break}case 743:{h:do if((d|0)>0){ca=b+36|0;Qa=b+108|0;Sa=b+100|0;_a=d;Na=0;Ta=0;while(1){if((k[(k[ca>>2]|0)+(Ta<<2)>>2]|0)!=0?(ab=+p[c+(Ta<<3)>>3],$a=+$(+ab),p[t>>3]=$a,Za=k[t+4>>2]|0,!(Za>>>0>2146435072|(Za|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Za=Qqa(32)|0;Wa=Na+1|0;B=0;Pa(1,Za|0,Wa+(k[Qa>>2]|0)|0,Ta+1+(k[Sa>>2]|0)|0,h|0,+ab,f|0);A=B;B=0;if(A&1){sb=Za;break}ih(a,Za)|0;tb=k[Oa>>2]|0;ub=Wa}else{tb=_a;ub=Na}Ta=Ta+1|0;if((Ta|0)>=(tb|0)){vb=ub;break h}else{_a=tb;Na=ub}}Na=Rb()|0;_a=Q;Sqa(sb);qa=_a;ra=Na;Qb(ra|0)}else vb=0;while(0);Na=b+64|0;_a=k[Na>>2]|0;i:do if((_a|0)>0){Ta=b+80|0;Sa=b+108|0;Qa=b+100|0;ca=_a;Ua=vb;Wa=0;while(1){if((((i[(k[m>>2]|0)+Wa>>0]|0)!=0?(i[(k[o>>2]|0)+Wa>>0]|0)!=0:0)?(Za=Wa*3|0,A=k[Ta>>2]|0,ab=+p[c+((k[A+(Za<<2)>>2]|0)+-1<<3)>>3],$a=+$(+ab),p[t>>3]=$a,da=k[t+4>>2]|0,!(da>>>0>2146435072|(da|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?($a=+p[c+((k[A+(Za+1<<2)>>2]|0)+-1<<3)>>3],jb=+$(+$a),p[t>>3]=jb,Za=k[t+4>>2]|0,!(Za>>>0>2146435072|(Za|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Za=Qqa(32)|0;A=Ua+1|0;B=0;Pa(1,Za|0,A+(k[Sa>>2]|0)|0,Wa+1+(k[Qa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+((ab+$a)*.5),f|0);da=B;B=0;if(da&1){wb=Za;break}ih(a,Za)|0;xb=k[Na>>2]|0;yb=A}else{xb=ca;yb=Ua}Wa=Wa+1|0;if((Wa|0)>=(xb|0)){Bb=yb;break i}else{ca=xb;Ua=yb}}Ua=Rb()|0;ca=Q;Sqa(wb);qa=ca;ra=Ua;Qb(ra|0)}else Bb=vb;while(0);_a=b+48|0;j:do if((k[_a>>2]|0)==625?(Ua=b+60|0,ca=k[Ua>>2]|0,(ca|0)>0):0){Wa=b+68|0;Qa=b+76|0;Sa=b+108|0;Ta=b+100|0;A=ca;ca=Bb;Za=0;while(1){da=ma(k[Wa>>2]|0,Za)|0;C=k[Qa>>2]|0;if((k[C+(da+2<<2)>>2]|0)==2?(i[(k[n>>2]|0)+Za>>0]|0)!=0:0){Va=k[C+(da+3<<2)>>2]|0;if((Va|0)>0){D=0;$a=0.0;while(1){ab=$a+ +p[c+((k[C+(D+4+da<<2)>>2]|0)+-1<<3)>>3];D=D+1|0;if((D|0)==(Va|0)){Cb=ab;break}else $a=ab}}else Cb=0.0;$a=Cb/+(Va|0);ab=+$(+$a);p[t>>3]=ab;D=k[t+4>>2]|0;if(!(D>>>0>2146435072|(D|0)==2146435072&(k[t>>2]|0)>>>0>0)){D=Qqa(32)|0;da=ca+1|0;B=0;Pa(1,D|0,da+(k[Sa>>2]|0)|0,Za+1+(k[Ta>>2]|0)+(k[Oa>>2]|0)+(k[Na>>2]|0)|0,h|0,+$a,f|0);C=B;B=0;if(C&1){Db=D;break}ih(a,D)|0;Eb=k[Ua>>2]|0;Fb=da}else{Eb=A;Fb=ca}}else{Eb=A;Fb=ca}Za=Za+1|0;if((Za|0)>=(Eb|0)){Gb=Fb;break j}else{A=Eb;ca=Fb}}ca=Rb()|0;A=Q;Sqa(Db);qa=A;ra=ca;Qb(ra|0)}else Gb=Bb;while(0);ca=b+56|0;A=k[ca>>2]|0;if((A|0)<=0)break e;Za=b+32|0;Ua=b+72|0;$a=+(S|0);Ta=b+100|0;Sa=b+60|0;Qa=b+108|0;if((S|0)>1){Wa=A;da=Gb;D=0;while(1){if(i[(k[Za>>2]|0)+D>>0]|0){C=ma(D,S)|0;Ya=k[Ua>>2]|0;E=1;ab=+p[c+((k[Ya+(C<<2)>>2]|0)+-1<<3)>>3];while(1){jb=ab+ +p[c+((k[Ya+(E+C<<2)>>2]|0)+-1<<3)>>3];E=E+1|0;if((E|0)==(S|0)){Hb=jb;break}else ab=jb}ab=Hb/$a;jb=+$(+ab);p[t>>3]=jb;E=k[t+4>>2]|0;if(!(E>>>0>2146435072|(E|0)==2146435072&(k[t>>2]|0)>>>0>0)){E=D+1+(k[Ta>>2]|0)+(k[Oa>>2]|0)+(k[Na>>2]|0)|0;if((k[_a>>2]|0)==625)Ib=(k[Sa>>2]|0)+E|0;else Ib=E;E=Qqa(32)|0;C=da+1|0;B=0;Pa(1,E|0,C+(k[Qa>>2]|0)|0,Ib|0,h|0,+ab,f|0);Ya=B;B=0;if(Ya&1){Jb=E;break}ih(a,E)|0;Kb=k[ca>>2]|0;Lb=C}else{Kb=Wa;Lb=da}}else{Kb=Wa;Lb=da}D=D+1|0;if((D|0)>=(Kb|0))break e;else{Wa=Kb;da=Lb}}da=Rb()|0;Mb=da;Nb=Q;Ob=Jb}else{da=A;Wa=Gb;D=0;while(1){if((i[(k[Za>>2]|0)+D>>0]|0)!=0?(C=ma(D,S)|0,ab=+p[c+((k[(k[Ua>>2]|0)+(C<<2)>>2]|0)+-1<<3)>>3]/$a,jb=+$(+ab),p[t>>3]=jb,C=k[t+4>>2]|0,!(C>>>0>2146435072|(C|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){C=D+1+(k[Ta>>2]|0)+(k[Oa>>2]|0)+(k[Na>>2]|0)|0;if((k[_a>>2]|0)==625)Pb=(k[Sa>>2]|0)+C|0;else Pb=C;C=Qqa(32)|0;E=Wa+1|0;B=0;Pa(1,C|0,E+(k[Qa>>2]|0)|0,Pb|0,h|0,+ab,f|0);Ya=B;B=0;if(Ya&1){Sb=C;break}ih(a,C)|0;Tb=k[ca>>2]|0;Ub=E}else{Tb=da;Ub=Wa}D=D+1|0;if((D|0)>=(Tb|0))break e;else{da=Tb;Wa=Ub}}Wa=Rb()|0;Mb=Wa;Nb=Q;Ob=Sb}Sqa(Ob);qa=Nb;ra=Mb;Qb(ra|0);break}case 748:{k:do if((d|0)>0){Wa=b+36|0;da=b+108|0;D=b+100|0;ca=d;Qa=0;Sa=0;while(1){if((k[(k[Wa>>2]|0)+(Sa<<2)>>2]|0)!=0?($a=+p[c+(Sa<<3)>>3],ab=+$(+$a),p[t>>3]=ab,_a=k[t+4>>2]|0,!(_a>>>0>2146435072|(_a|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){_a=Qqa(32)|0;Na=Qa+1|0;B=0;Pa(1,_a|0,Na+(k[da>>2]|0)|0,Sa+1+(k[D>>2]|0)|0,h|0,+$a,f|0);Ta=B;B=0;if(Ta&1){Vb=_a;break}ih(a,_a)|0;Wb=k[Oa>>2]|0;Xb=Na}else{Wb=ca;Xb=Qa}Sa=Sa+1|0;if((Sa|0)>=(Wb|0)){Yb=Xb;break k}else{ca=Wb;Qa=Xb}}Qa=Rb()|0;ca=Q;Sqa(Vb);qa=ca;ra=Qa;Qb(ra|0)}else Yb=0;while(0);Qa=b+64|0;l:do if((k[Qa>>2]|0)>0){ca=b+80|0;Sa=b+108|0;D=b+100|0;da=Yb;Wa=0;while(1){Na=Wa*3|0;_a=Na+2|0;Ta=k[ca>>2]|0;Ua=k[Ta+(_a<<2)>>2]|0;if((Ua|0)==2)if(((i[(k[m>>2]|0)+Wa>>0]|0)!=0?(Za=c+((k[Ta+(Na<<2)>>2]|0)+-1<<3)|0,$a=+p[Za>>3],ab=+$(+$a),p[t>>3]=ab,A=k[t+4>>2]|0,!(A>>>0>2146435072|(A|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(A=Na+1|0,E=c+((k[Ta+(A<<2)>>2]|0)+-1<<3)|0,ab=+p[E>>3],jb=+$(+ab),p[t>>3]=jb,C=k[t+4>>2]|0,!(C>>>0>2146435072|(C|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){C=Qqa(32)|0;B=0;Pa(1,C|0,da+1+(k[Sa>>2]|0)|0,A+(k[D>>2]|0)+(k[Oa>>2]|0)|0,h|0,+($a*.5+ab*.5),f|0);A=B;B=0;if(A&1){Zb=C;pa=210;break}ih(a,C)|0;C=Qqa(32)|0;B=0;Pa(1,C|0,da+2+(k[Sa>>2]|0)|0,_a+(k[D>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(+p[Za>>3]*.5+ +p[E>>3]*.5),f|0);A=B;B=0;if(A&1){_b=C;pa=211;break}ih(a,C)|0;C=Qqa(32)|0;A=da+3|0;B=0;Pa(1,C|0,A+(k[Sa>>2]|0)|0,Na+3+(k[D>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(+p[Za>>3]*.5+ +p[E>>3]*.5),f|0);E=B;B=0;if(E&1){$b=C;pa=212;break}ih(a,C)|0;C=k[ca>>2]|0;ac=k[C+(_a<<2)>>2]|0;bc=C;cc=A;pa=213}else dc=da;else{ac=Ua;bc=Ta;cc=da;pa=213}if((pa|0)==213){pa=0;if((((ac|0)==1?(i[(k[m>>2]|0)+Wa>>0]|0)!=0:0)?(ab=+p[c+((k[bc+(Na<<2)>>2]|0)+-1<<3)>>3],$a=+$(+ab),p[t>>3]=$a,Ta=k[t+4>>2]|0,!(Ta>>>0>2146435072|(Ta|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(Ta=Na+1|0,$a=+p[c+((k[bc+(Ta<<2)>>2]|0)+-1<<3)>>3],jb=+$(+$a),p[t>>3]=jb,Na=k[t+4>>2]|0,!(Na>>>0>2146435072|(Na|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Na=Qqa(32)|0;Ua=cc+1|0;B=0;Pa(1,Na|0,Ua+(k[Sa>>2]|0)|0,Ta+(k[D>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(ab*.5+$a*.5),f|0);Ta=B;B=0;if(Ta&1){ec=Na;pa=219;break}ih(a,Na)|0;dc=Ua}else dc=cc}Wa=Wa+1|0;if((Wa|0)>=(k[Qa>>2]|0)){fc=dc;break l}else da=dc}if((pa|0)==210){da=Rb()|0;Wa=Q;Sqa(Zb);qa=Wa;ra=da;Qb(ra|0)}else if((pa|0)==211){da=Rb()|0;Wa=Q;Sqa(_b);qa=Wa;ra=da;Qb(ra|0)}else if((pa|0)==212){da=Rb()|0;Wa=Q;Sqa($b);qa=Wa;ra=da;Qb(ra|0)}else if((pa|0)==219){da=Rb()|0;Wa=Q;Sqa(ec);qa=Wa;ra=da;Qb(ra|0)}}else fc=Yb;while(0);da=b+60|0;Wa=k[da>>2]|0;if((Wa|0)<=0)break e;D=b+68|0;Sa=b+76|0;ca=b+108|0;Ua=b+100|0;Na=Wa;Wa=fc;Ta=0;while(1){A=ma(k[D>>2]|0,Ta)|0;C=k[Sa>>2]|0;if((k[C+(A+2<<2)>>2]|0)==2?(i[(k[n>>2]|0)+Ta>>0]|0)!=0:0){_a=k[C+(A+3<<2)>>2]|0;if((_a|0)>0){E=0;$a=0.0;while(1){ab=$a+ +p[c+((k[C+(E+4+A<<2)>>2]|0)+-1<<3)>>3];E=E+1|0;if((E|0)==(_a|0)){gc=ab;break}else $a=ab}}else gc=0.0;$a=gc/+(_a|0);ab=+$(+$a);p[t>>3]=ab;E=k[t+4>>2]|0;if(!(E>>>0>2146435072|(E|0)==2146435072&(k[t>>2]|0)>>>0>0)){E=Qqa(32)|0;A=Ta*3|0;B=0;Pa(1,E|0,Wa+1+(k[ca>>2]|0)|0,A+1+(k[Ua>>2]|0)+(k[Oa>>2]|0)+((k[Qa>>2]|0)*3|0)|0,h|0,+$a,f|0);C=B;B=0;if(C&1){hc=E;pa=230;break}ih(a,E)|0;E=Qqa(32)|0;B=0;Pa(1,E|0,Wa+2+(k[ca>>2]|0)|0,A+2+(k[Ua>>2]|0)+(k[Oa>>2]|0)+((k[Qa>>2]|0)*3|0)|0,h|0,+$a,f|0);C=B;B=0;if(C&1){ic=E;pa=231;break}ih(a,E)|0;E=Qqa(32)|0;C=Wa+3|0;B=0;Pa(1,E|0,C+(k[ca>>2]|0)|0,A+3+(k[Ua>>2]|0)+(k[Oa>>2]|0)+((k[Qa>>2]|0)*3|0)|0,h|0,+$a,f|0);A=B;B=0;if(A&1){jc=E;pa=232;break}ih(a,E)|0;kc=k[da>>2]|0;lc=C}else{kc=Na;lc=Wa}}else{kc=Na;lc=Wa}Ta=Ta+1|0;if((Ta|0)>=(kc|0))break e;else{Na=kc;Wa=lc}}if((pa|0)==230){Wa=Rb()|0;Na=Q;Sqa(hc);qa=Na;ra=Wa;Qb(ra|0)}else if((pa|0)==231){Wa=Rb()|0;Na=Q;Sqa(ic);qa=Na;ra=Wa;Qb(ra|0)}else if((pa|0)==232){Wa=Rb()|0;Na=Q;Sqa(jc);qa=Na;ra=Wa;Qb(ra|0)}break}case 740:{m:do if((d|0)>0){Wa=b+36|0;Na=b+108|0;Ta=b+100|0;da=d;Qa=0;Ua=0;while(1){if((k[(k[Wa>>2]|0)+(Ua<<2)>>2]|0)!=0?($a=+p[c+(Ua<<3)>>3],ab=+$(+$a),p[t>>3]=ab,ca=k[t+4>>2]|0,!(ca>>>0>2146435072|(ca|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){ca=Qqa(32)|0;Sa=Qa+1|0;B=0;Pa(1,ca|0,Sa+(k[Na>>2]|0)|0,Ua+1+(k[Ta>>2]|0)|0,h|0,+$a,f|0);D=B;B=0;if(D&1){mc=ca;break}ih(a,ca)|0;nc=k[Oa>>2]|0;oc=Sa}else{nc=da;oc=Qa}Ua=Ua+1|0;if((Ua|0)>=(nc|0)){pc=oc;break m}else{da=nc;Qa=oc}}Qa=Rb()|0;da=Q;Sqa(mc);qa=da;ra=Qa;Qb(ra|0)}else pc=0;while(0);Qa=b+56|0;da=k[Qa>>2]|0;if((da|0)<=0)break e;Ua=b+32|0;Ta=b+72|0;$a=+(S|0);Na=b+108|0;Wa=b+100|0;if((S|0)>1){_a=da;Sa=pc;ca=0;while(1){if(i[(k[Ua>>2]|0)+ca>>0]|0){D=ma(ca,S)|0;C=k[Ta>>2]|0;E=1;ab=+p[c+((k[C+(D<<2)>>2]|0)+-1<<3)>>3];while(1){jb=ab+ +p[c+((k[C+(E+D<<2)>>2]|0)+-1<<3)>>3];E=E+1|0;if((E|0)==(S|0)){qc=jb;break}else ab=jb}ab=qc/$a;jb=+$(+ab);p[t>>3]=jb;E=k[t+4>>2]|0;if(!(E>>>0>2146435072|(E|0)==2146435072&(k[t>>2]|0)>>>0>0)){E=Qqa(32)|0;D=Sa+1|0;B=0;Pa(1,E|0,D+(k[Na>>2]|0)|0,ca+1+(k[Wa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+ab,f|0);C=B;B=0;if(C&1){rc=E;break}ih(a,E)|0;sc=k[Qa>>2]|0;tc=D}else{sc=_a;tc=Sa}}else{sc=_a;tc=Sa}ca=ca+1|0;if((ca|0)>=(sc|0))break e;else{_a=sc;Sa=tc}}Sa=Rb()|0;uc=Sa;vc=Q;wc=rc}else{Sa=da;_a=pc;ca=0;while(1){if((i[(k[Ua>>2]|0)+ca>>0]|0)!=0?(D=ma(ca,S)|0,ab=+p[c+((k[(k[Ta>>2]|0)+(D<<2)>>2]|0)+-1<<3)>>3]/$a,jb=+$(+ab),p[t>>3]=jb,D=k[t+4>>2]|0,!(D>>>0>2146435072|(D|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){D=Qqa(32)|0;E=_a+1|0;B=0;Pa(1,D|0,E+(k[Na>>2]|0)|0,ca+1+(k[Wa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+ab,f|0);C=B;B=0;if(C&1){xc=D;break}ih(a,D)|0;yc=k[Qa>>2]|0;zc=E}else{yc=Sa;zc=_a}ca=ca+1|0;if((ca|0)>=(yc|0))break e;else{Sa=yc;_a=zc}}_a=Rb()|0;uc=_a;vc=Q;wc=xc}Sqa(wc);qa=vc;ra=uc;Qb(ra|0);break}case 741:{if((d|0)<=0)break e;_a=b+36|0;Sa=b+108|0;ca=b+100|0;Qa=d;Wa=0;Na=0;while(1){if((k[(k[_a>>2]|0)+(Na<<2)>>2]|0)!=0?($a=+p[c+(Na<<3)>>3],ab=+$(+$a),p[t>>3]=ab,Ta=k[t+4>>2]|0,!(Ta>>>0>2146435072|(Ta|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Ta=Qqa(32)|0;Ua=Wa+1|0;B=0;Pa(1,Ta|0,Ua+(k[Sa>>2]|0)|0,Na+1+(k[ca>>2]|0)|0,h|0,+$a,f|0);da=B;B=0;if(da&1){Ac=Ta;break}ih(a,Ta)|0;Bc=k[Oa>>2]|0;Cc=Ua}else{Bc=Qa;Cc=Wa}Na=Na+1|0;if((Na|0)>=(Bc|0))break e;else{Qa=Bc;Wa=Cc}}Wa=Rb()|0;Qa=Q;Sqa(Ac);qa=Qa;ra=Wa;Qb(ra|0);break}case 746:{n:do if((d|0)>0){Wa=b+36|0;Qa=b+108|0;Na=b+100|0;ca=d;Sa=0;_a=0;while(1){if((k[(k[Wa>>2]|0)+(_a<<2)>>2]|0)!=0?($a=+p[c+(_a<<3)>>3],ab=+$(+$a),p[t>>3]=ab,Ua=k[t+4>>2]|0,!(Ua>>>0>2146435072|(Ua|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Ua=Qqa(32)|0;Ta=Sa+1|0;B=0;Pa(1,Ua|0,Ta+(k[Qa>>2]|0)|0,_a+1+(k[Na>>2]|0)|0,h|0,+$a,f|0);da=B;B=0;if(da&1){Dc=Ua;break}ih(a,Ua)|0;Ec=k[Oa>>2]|0;Fc=Ta}else{Ec=ca;Fc=Sa}_a=_a+1|0;if((_a|0)>=(Ec|0)){Gc=Fc;break n}else{ca=Ec;Sa=Fc}}Sa=Rb()|0;ca=Q;Sqa(Dc);qa=ca;ra=Sa;Qb(ra|0)}else Gc=0;while(0);Sa=b+64|0;ca=k[Sa>>2]|0;if((ca|0)<=0)break e;_a=b+80|0;Na=b+108|0;Qa=b+100|0;Wa=ca;ca=Gc;Ta=0;while(1){Ua=Ta*3|0;da=k[_a>>2]|0;if((((k[da+(Ua+2<<2)>>2]|0)==2?(i[(k[m>>2]|0)+Ta>>0]|0)!=0:0)?($a=+p[c+((k[da+(Ua<<2)>>2]|0)+-1<<3)>>3],ab=+$(+$a),p[t>>3]=ab,E=k[t+4>>2]|0,!(E>>>0>2146435072|(E|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(ab=+p[c+((k[da+(Ua+1<<2)>>2]|0)+-1<<3)>>3],jb=+$(+ab),p[t>>3]=jb,Ua=k[t+4>>2]|0,!(Ua>>>0>2146435072|(Ua|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Ua=Qqa(32)|0;da=ca+1|0;B=0;Pa(1,Ua|0,da+(k[Na>>2]|0)|0,Ta+1+(k[Qa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(($a+ab)*.5),f|0);E=B;B=0;if(E&1){Hc=Ua;break}ih(a,Ua)|0;Ic=k[Sa>>2]|0;Jc=da}else{Ic=Wa;Jc=ca}Ta=Ta+1|0;if((Ta|0)>=(Ic|0))break e;else{Wa=Ic;ca=Jc}}ca=Rb()|0;Wa=Q;Sqa(Hc);qa=Wa;ra=ca;Qb(ra|0);break}case 747:{o:do if((d|0)>0){ca=b+36|0;Wa=b+108|0;Ta=b+100|0;Sa=d;Qa=0;Na=0;while(1){if((k[(k[ca>>2]|0)+(Na<<2)>>2]|0)!=0?(ab=+p[c+(Na<<3)>>3],$a=+$(+ab),p[t>>3]=$a,_a=k[t+4>>2]|0,!(_a>>>0>2146435072|(_a|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){_a=Qqa(32)|0;da=Qa+1|0;B=0;Pa(1,_a|0,da+(k[Wa>>2]|0)|0,Na+1+(k[Ta>>2]|0)|0,h|0,+ab,f|0);Ua=B;B=0;if(Ua&1){Kc=_a;break}ih(a,_a)|0;Lc=k[Oa>>2]|0;Mc=da}else{Lc=Sa;Mc=Qa}Na=Na+1|0;if((Na|0)>=(Lc|0)){Nc=Mc;break o}else{Sa=Lc;Qa=Mc}}Qa=Rb()|0;Sa=Q;Sqa(Kc);qa=Sa;ra=Qa;Qb(ra|0)}else Nc=0;while(0);Qa=b+64|0;Sa=k[Qa>>2]|0;if((Sa|0)<=0)break e;Na=b+80|0;Ta=b+108|0;Wa=b+100|0;ca=Sa;Sa=Nc;da=0;while(1){_a=da*3|0;Ua=k[Na>>2]|0;if((((k[Ua+(_a+2<<2)>>2]|0)==2?(i[(k[m>>2]|0)+da>>0]|0)!=0:0)?(E=c+((k[Ua+(_a<<2)>>2]|0)+-1<<3)|0,ab=+p[E>>3],$a=+$(+ab),p[t>>3]=$a,D=k[t+4>>2]|0,!(D>>>0>2146435072|(D|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(D=c+((k[Ua+(_a+1<<2)>>2]|0)+-1<<3)|0,$a=+p[D>>3],jb=+$(+$a),p[t>>3]=jb,_a=k[t+4>>2]|0,!(_a>>>0>2146435072|(_a|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){_a=Qqa(32)|0;Ua=da<<1;B=0;Pa(1,_a|0,Sa+1+(k[Ta>>2]|0)|0,(Ua|1)+(k[Wa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(ab*.6666666666666666+$a*.3333333333333333),f|0);C=B;B=0;if(C&1){Oc=_a;pa=294;break}ih(a,_a)|0;_a=Qqa(32)|0;C=Sa+2|0;B=0;Pa(1,_a|0,C+(k[Ta>>2]|0)|0,Ua+2+(k[Wa>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(+p[E>>3]*.3333333333333333+ +p[D>>3]*.6666666666666666),f|0);D=B;B=0;if(D&1){Pc=_a;pa=295;break}ih(a,_a)|0;Qc=k[Qa>>2]|0;Rc=C}else{Qc=ca;Rc=Sa}da=da+1|0;if((da|0)>=(Qc|0))break e;else{ca=Qc;Sa=Rc}}if((pa|0)==294){Sa=Rb()|0;ca=Q;Sqa(Oc);qa=ca;ra=Sa;Qb(ra|0)}else if((pa|0)==295){Sa=Rb()|0;ca=Q;Sqa(Pc);qa=ca;ra=Sa;Qb(ra|0)}break}case 745:{p:do if((d|0)>0){Sa=b+36|0;ca=b+108|0;da=b+100|0;Qa=d;Wa=0;Ta=0;while(1){if((k[(k[Sa>>2]|0)+(Ta<<2)>>2]|0)!=0?($a=+p[c+(Ta<<3)>>3],ab=+$(+$a),p[t>>3]=ab,Na=k[t+4>>2]|0,!(Na>>>0>2146435072|(Na|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Na=Qqa(32)|0;C=Wa+1|0;B=0;Pa(1,Na|0,C+(k[ca>>2]|0)|0,Ta+1+(k[da>>2]|0)|0,h|0,+$a,f|0);_a=B;B=0;if(_a&1){Sc=Na;break}ih(a,Na)|0;Tc=k[Oa>>2]|0;Uc=C}else{Tc=Qa;Uc=Wa}Ta=Ta+1|0;if((Ta|0)>=(Tc|0)){Vc=Uc;break p}else{Qa=Tc;Wa=Uc}}Wa=Rb()|0;Qa=Q;Sqa(Sc);qa=Qa;ra=Wa;Qb(ra|0)}else Vc=0;while(0);Wa=b+64|0;Qa=k[Wa>>2]|0;if((Qa|0)<=0)break e;Ta=b+80|0;da=b+108|0;ca=b+100|0;Sa=Qa;Qa=Vc;C=0;while(1){Na=C*3|0;_a=k[Ta>>2]|0;if((((k[_a+(Na+2<<2)>>2]|0)!=2?(i[(k[m>>2]|0)+C>>0]|0)!=0:0)?($a=+p[c+((k[_a+(Na<<2)>>2]|0)+-1<<3)>>3],ab=+$(+$a),p[t>>3]=ab,D=k[t+4>>2]|0,!(D>>>0>2146435072|(D|0)==2146435072&(k[t>>2]|0)>>>0>0)):0)?(ab=+p[c+((k[_a+(Na+1<<2)>>2]|0)+-1<<3)>>3],jb=+$(+ab),p[t>>3]=jb,Na=k[t+4>>2]|0,!(Na>>>0>2146435072|(Na|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){Na=Qqa(32)|0;_a=Qa+1|0;B=0;Pa(1,Na|0,_a+(k[da>>2]|0)|0,C+1+(k[ca>>2]|0)+(k[Oa>>2]|0)|0,h|0,+(($a+ab)*.5),f|0);D=B;B=0;if(D&1){Wc=Na;break}ih(a,Na)|0;Xc=k[Wa>>2]|0;Yc=_a}else{Xc=Sa;Yc=Qa}C=C+1|0;if((C|0)>=(Xc|0))break e;else{Sa=Xc;Qa=Yc}}Qa=Rb()|0;Sa=Q;Sqa(Wc);qa=Sa;ra=Qa;Qb(ra|0);break}default:{Qa=F+56|0;Sa=F+4|0;k[F>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,F+56|0,Sa|0);C=B;B=0;if(C&1){C=Rb()|0;Zc=Q;_c=C;vva(Qa);Qb(_c|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Sa|0);C=B;B=0;do if(C&1){Wa=Rb()|0;$c=Q;ad=Wa}else{k[Sa>>2]=27560;Wa=F+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[F+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Sa|0,l|0);ca=B;B=0;if(ca&1){ca=Rb()|0;da=Q;Yua(l);Yua(Wa);Ava(Sa);$c=da;ad=ca;break}Yua(l);B=0;ca=Ia(40,F|0,145867,15)|0;da=B;B=0;q:do if((((!(da&1)?(B=0,Ta=ya(427,g|0)|0,_a=B,B=0,!(_a&1)):0)?(_a=Lta(Ta)|0,B=0,Na=Ia(40,ca|0,Ta|0,_a|0)|0,_a=B,B=0,!(_a&1)):0)?(B=0,_a=Ia(40,Na|0,146481,18)|0,Na=B,B=0,!(Na&1)):0)?(B=0,Xa(239,_a|0,0)|0,_a=B,B=0,!(_a&1)):0){_a=Ab(20)|0;B=0;eb(502,G|0,145672,102);Na=B;B=0;do if(!(Na&1)){B=0;eb(502,H|0,145775,21);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;D=Q;Yua(G);bd=D;cd=Ta;break}B=0;wa(510,I|0,Sa|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;dd=Q;ed=Ta;fd=1}else{B=0;ua(163,_a|0,G|0,H|0,396,I|0);Ta=B;B=0;if(Ta&1)gd=1;else{B=0;eb(503,_a|0,1240,229);B=0;gd=0}Ta=Rb()|0;D=Q;Yua(I);dd=D;ed=Ta;fd=gd}Yua(H);Yua(G);if(fd){bd=dd;cd=ed}else{hd=dd;id=ed;break q}}else{Ta=Rb()|0;bd=Q;cd=Ta}while(0);zb(_a|0);hd=bd;id=cd}else pa=331;while(0);if((pa|0)==331){ca=Rb()|0;hd=Q;id=ca}k[F>>2]=27468;k[Qa>>2]=27488;k[Sa>>2]=27560;Yua(Wa);Ava(Sa);vva(Qa);qa=hd;ra=id;Qb(ra|0)}while(0);Zc=$c;_c=ad;vva(Qa);Qb(_c|0)}}while(0);else{if((Ra+1|0)!=(d|0)){V=N+56|0;Sa=N+4|0;k[N>>2]=27524;k[V>>2]=27544;B=0;wa(508,N+56|0,Sa|0);C=B;B=0;if(C&1){C=Rb()|0;jd=Q;kd=C;vva(V);Qb(kd|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[V>>2]=27488;B=0;va(448,Sa|0);C=B;B=0;do if(C&1){ca=Rb()|0;ld=Q;md=ca}else{k[Sa>>2]=27560;ca=N+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[N+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,Sa|0,l|0);da=B;B=0;if(da&1){da=Rb()|0;Na=Q;Yua(l);Yua(ca);Ava(Sa);ld=Na;md=da;break}Yua(l);B=0;da=Ia(40,N|0,145883,31)|0;Na=B;B=0;r:do if(!(Na&1)?(B=0,Xa(239,da|0,0)|0,Va=B,B=0,!(Va&1)):0){Va=Ab(20)|0;B=0;eb(502,O|0,145672,102);Ta=B;B=0;do if(!(Ta&1)){B=0;eb(502,P|0,145775,21);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(O);nd=E;od=D;break}B=0;wa(510,R|0,Sa|0);D=B;B=0;if(D&1){D=Rb()|0;pd=1;qd=Q;rd=D}else{B=0;ua(163,Va|0,O|0,P|0,551,R|0);D=B;B=0;if(D&1)sd=1;else{B=0;eb(503,Va|0,1240,229);B=0;sd=0}D=Rb()|0;E=Q;Yua(R);pd=sd;qd=E;rd=D}Yua(P);Yua(O);if(pd){nd=qd;od=rd}else{td=qd;ud=rd;break r}}else{D=Rb()|0;nd=Q;od=D}while(0);zb(Va|0);td=nd;ud=od}else pa=474;while(0);if((pa|0)==474){da=Rb()|0;td=Q;ud=da}k[N>>2]=27468;k[V>>2]=27488;k[Sa>>2]=27560;Yua(ca);Ava(Sa);vva(V);qa=td;ra=ud;Qb(ra|0)}while(0);jd=ld;kd=md;vva(V);Qb(kd|0)}Sa=e>>>0>536870911?-1:e<<3;C=Rqa(Sa)|0;da=(e|0)>0;if(da)TEa(C|0,c+((ma(d+-1|0,e)|0)<<3)|0,e<<3|0)|0;s:do switch(g|0){case 738:{if((Ra|0)>0){Na=b+36|0;Qa=b+108|0;Ta=b+100|0;if(!da){Wa=0;while(1){Wa=Wa+1|0;if((Wa|0)>=(Ra|0))break s}}Wa=e<<3;ca=Ra;D=0;E=0;while(1){Ua=ma(E,e)|0;if(!(k[(k[Na>>2]|0)+(E<<2)>>2]|0)){vd=ca;wd=D}else{A=Rqa(Sa)|0;TEa(A|0,c+(Ua<<3)|0,Wa|0)|0;Za=0;Ya=0;do{ab=+$(+(+p[c+(Za+Ua<<3)>>3]));p[t>>3]=ab;ta=k[t+4>>2]|0;Ya=Ya|(ta>>>0<2146435072|(ta|0)==2146435072&(k[t>>2]|0)>>>0<1);Za=Za+1|0}while((Za|0)!=(e|0));if(Ya){Za=Qqa(36)|0;Ua=D+1|0;B=0;Ka(11,Za|0,Ua+(k[Qa>>2]|0)|0,E+1+(k[Ta>>2]|0)|0,h|0,e|0,C|0,A|0,f|0);Va=B;B=0;if(Va&1){xd=Za;break}ih(a,Za)|0;yd=Ua}else yd=D;Tqa(A);vd=k[Oa>>2]|0;wd=yd}E=E+1|0;if((E|0)>=(vd|0))break s;else{ca=vd;D=wd}}D=Rb()|0;ca=Q;Sqa(xd);qa=ca;ra=D;Qb(ra|0)}break}case 742:{t:do if((Ra|0)>0){D=b+36|0;ca=b+108|0;E=b+100|0;if(!da){Ta=0;while(1){Ta=Ta+1|0;if((Ta|0)>=(Ra|0)){zd=0;break t}}}Ta=e<<3;A=Ra;Ya=0;Qa=0;while(1){Wa=ma(Qa,e)|0;if(!(k[(k[D>>2]|0)+(Qa<<2)>>2]|0)){Ad=A;Bd=Ya}else{Na=Rqa(Sa)|0;TEa(Na|0,c+(Wa<<3)|0,Ta|0)|0;Ua=0;Za=0;do{ab=+$(+(+p[c+(Ua+Wa<<3)>>3]));p[t>>3]=ab;Va=k[t+4>>2]|0;Za=Za|(Va>>>0<2146435072|(Va|0)==2146435072&(k[t>>2]|0)>>>0<1);Ua=Ua+1|0}while((Ua|0)!=(e|0));if(Za){Ua=Qqa(36)|0;Wa=Ya+1|0;B=0;Ka(11,Ua|0,Wa+(k[ca>>2]|0)|0,Qa+1+(k[E>>2]|0)|0,h|0,e|0,C|0,Na|0,f|0);_a=B;B=0;if(_a&1){Cd=Ua;break}ih(a,Ua)|0;Dd=Wa}else Dd=Ya;Tqa(Na);Ad=k[Oa>>2]|0;Bd=Dd}Qa=Qa+1|0;if((Qa|0)>=(Ad|0)){zd=Bd;break t}else{A=Ad;Ya=Bd}}Ya=Rb()|0;A=Q;Sqa(Cd);qa=A;ra=Ya;Qb(ra|0)}else zd=0;while(0);Ya=b+64|0;A=k[Ya>>2]|0;if((A|0)>0){Qa=b+80|0;E=b+108|0;ca=b+100|0;if(da){Ed=A;Fd=zd;Gd=0}else{Ta=0;while(1){Ta=Ta+1|0;if((Ta|0)>=(A|0))break s}}while(1){if(!(i[(k[m>>2]|0)+Gd>>0]|0)){Hd=Ed;Id=Fd}else{A=Gd*3|0;Ta=k[Qa>>2]|0;D=(k[Ta+(A<<2)>>2]|0)+-1|0;Wa=(k[Ta+(A+1<<2)>>2]|0)+-1|0;A=Rqa(Sa)|0;Ta=ma(D,e)|0;D=ma(Wa,e)|0;Wa=0;Ua=0;do{ab=(+p[c+(Wa+Ta<<3)>>3]+ +p[c+(Wa+D<<3)>>3])*.5;p[A+(Wa<<3)>>3]=ab;$a=+$(+ab);p[t>>3]=$a;_a=k[t+4>>2]|0;Ua=Ua|(_a>>>0<2146435072|(_a|0)==2146435072&(k[t>>2]|0)>>>0<1);Wa=Wa+1|0}while((Wa|0)!=(e|0));if(Ua){Wa=Qqa(36)|0;D=Fd+1|0;B=0;Ka(11,Wa|0,D+(k[E>>2]|0)|0,Gd+1+(k[ca>>2]|0)+(k[Oa>>2]|0)|0,h|0,e|0,C|0,A|0,f|0);Ta=B;B=0;if(Ta&1){Jd=Wa;break}ih(a,Wa)|0;Kd=D}else Kd=Fd;Tqa(A);Hd=k[Ya>>2]|0;Id=Kd}Gd=Gd+1|0;if((Gd|0)>=(Hd|0))break s;else{Ed=Hd;Fd=Id}}Ya=Rb()|0;ca=Q;Sqa(Jd);qa=ca;ra=Ya;Qb(ra|0)}break}case 746:{u:do if((Ra|0)>0){Ya=b+36|0;ca=b+108|0;E=b+100|0;if(!da){Qa=0;while(1){Qa=Qa+1|0;if((Qa|0)>=(Ra|0)){Ld=0;break u}}}Qa=e<<3;A=Ra;Ua=0;D=0;while(1){Wa=ma(D,e)|0;if(!(k[(k[Ya>>2]|0)+(D<<2)>>2]|0)){Md=A;Nd=Ua}else{Ta=Rqa(Sa)|0;TEa(Ta|0,c+(Wa<<3)|0,Qa|0)|0;_a=0;Va=0;do{$a=+$(+(+p[c+(_a+Wa<<3)>>3]));p[t>>3]=$a;ta=k[t+4>>2]|0;Va=Va|(ta>>>0<2146435072|(ta|0)==2146435072&(k[t>>2]|0)>>>0<1);_a=_a+1|0}while((_a|0)!=(e|0));if(Va){_a=Qqa(36)|0;Wa=Ua+1|0;B=0;Ka(11,_a|0,Wa+(k[ca>>2]|0)|0,D+1+(k[E>>2]|0)|0,h|0,e|0,C|0,Ta|0,f|0);Na=B;B=0;if(Na&1){Od=_a;break}ih(a,_a)|0;Pd=Wa}else Pd=Ua;Tqa(Ta);Md=k[Oa>>2]|0;Nd=Pd}D=D+1|0;if((D|0)>=(Md|0)){Ld=Nd;break u}else{A=Md;Ua=Nd}}Ua=Rb()|0;A=Q;Sqa(Od);qa=A;ra=Ua;Qb(ra|0)}else Ld=0;while(0);Ua=b+64|0;A=k[Ua>>2]|0;if((A|0)>0){D=b+80|0;E=b+108|0;ca=b+100|0;if(da){Qd=A;Rd=Ld;Sd=0}else{Qa=0;while(1){Qa=Qa+1|0;if((Qa|0)>=(A|0))break s}}while(1){A=Sd*3|0;Qa=k[D>>2]|0;if((k[Qa+(A+2<<2)>>2]|0)==2?(i[(k[m>>2]|0)+Sd>>0]|0)!=0:0){Ya=(k[Qa+(A<<2)>>2]|0)+-1|0;Wa=(k[Qa+(A+1<<2)>>2]|0)+-1|0;A=Rqa(Sa)|0;Qa=ma(Ya,e)|0;Ya=ma(Wa,e)|0;Wa=0;_a=0;do{$a=(+p[c+(Wa+Qa<<3)>>3]+ +p[c+(Wa+Ya<<3)>>3])*.5;p[A+(Wa<<3)>>3]=$a;ab=+$(+$a);p[t>>3]=ab;Na=k[t+4>>2]|0;_a=_a|(Na>>>0<2146435072|(Na|0)==2146435072&(k[t>>2]|0)>>>0<1);Wa=Wa+1|0}while((Wa|0)!=(e|0));if(_a){Wa=Qqa(36)|0;Ya=Rd+1|0;B=0;Ka(11,Wa|0,Ya+(k[E>>2]|0)|0,Sd+1+(k[ca>>2]|0)+(k[Oa>>2]|0)|0,h|0,e|0,C|0,A|0,f|0);Qa=B;B=0;if(Qa&1){Td=Wa;break}ih(a,Wa)|0;Ud=Ya}else Ud=Rd;Tqa(A);Vd=k[Ua>>2]|0;Wd=Ud}else{Vd=Qd;Wd=Rd}Sd=Sd+1|0;if((Sd|0)>=(Vd|0))break s;else{Qd=Vd;Rd=Wd}}Ua=Rb()|0;ca=Q;Sqa(Td);qa=ca;ra=Ua;Qb(ra|0)}break}case 745:{v:do if((Ra|0)>0){Ua=b+36|0;ca=b+108|0;E=b+100|0;if(!da){D=0;while(1){D=D+1|0;if((D|0)>=(Ra|0)){Xd=0;break v}}}D=e<<3;A=Ra;_a=0;Ya=0;while(1){Wa=ma(Ya,e)|0;if(!(k[(k[Ua>>2]|0)+(Ya<<2)>>2]|0)){Yd=A;Zd=_a}else{Qa=Rqa(Sa)|0;TEa(Qa|0,c+(Wa<<3)|0,D|0)|0;Na=0;Za=0;do{ab=+$(+(+p[c+(Na+Wa<<3)>>3]));p[t>>3]=ab;ta=k[t+4>>2]|0;Za=Za|(ta>>>0<2146435072|(ta|0)==2146435072&(k[t>>2]|0)>>>0<1);Na=Na+1|0}while((Na|0)!=(e|0));if(Za){Na=Qqa(36)|0;Wa=_a+1|0;B=0;Ka(11,Na|0,Wa+(k[ca>>2]|0)|0,Ya+1+(k[E>>2]|0)|0,h|0,e|0,C|0,Qa|0,f|0);Ta=B;B=0;if(Ta&1){_d=Na;break}ih(a,Na)|0;$d=Wa}else $d=_a;Tqa(Qa);Yd=k[Oa>>2]|0;Zd=$d}Ya=Ya+1|0;if((Ya|0)>=(Yd|0)){Xd=Zd;break v}else{A=Yd;_a=Zd}}_a=Rb()|0;A=Q;Sqa(_d);qa=A;ra=_a;Qb(ra|0)}else Xd=0;while(0);_a=b+64|0;A=k[_a>>2]|0;if((A|0)>0){Ya=b+80|0;E=b+108|0;ca=b+100|0;if(da){ae=A;be=Xd;ce=0}else{D=0;while(1){D=D+1|0;if((D|0)>=(A|0))break s}}while(1){A=ce*3|0;D=k[Ya>>2]|0;if((k[D+(A+2<<2)>>2]|0)!=2?(i[(k[m>>2]|0)+ce>>0]|0)!=0:0){Ua=(k[D+(A<<2)>>2]|0)+-1|0;Wa=(k[D+(A+1<<2)>>2]|0)+-1|0;A=Rqa(Sa)|0;D=ma(Ua,e)|0;Ua=ma(Wa,e)|0;Wa=0;Na=0;do{ab=(+p[c+(Wa+D<<3)>>3]+ +p[c+(Wa+Ua<<3)>>3])*.5;p[A+(Wa<<3)>>3]=ab;$a=+$(+ab);p[t>>3]=$a;Ta=k[t+4>>2]|0;Na=Na|(Ta>>>0<2146435072|(Ta|0)==2146435072&(k[t>>2]|0)>>>0<1);Wa=Wa+1|0}while((Wa|0)!=(e|0));if(Na){Wa=Qqa(36)|0;Ua=be+1|0;B=0;Ka(11,Wa|0,Ua+(k[E>>2]|0)|0,ce+1+(k[ca>>2]|0)+(k[Oa>>2]|0)|0,h|0,e|0,C|0,A|0,f|0);D=B;B=0;if(D&1){de=Wa;break}ih(a,Wa)|0;ee=Ua}else ee=be;Tqa(A);fe=k[_a>>2]|0;ge=ee}else{fe=ae;ge=be}ce=ce+1|0;if((ce|0)>=(fe|0))break s;else{ae=fe;be=ge}}_a=Rb()|0;ca=Q;Sqa(de);qa=ca;ra=_a;Qb(ra|0)}break}default:{_a=J+56|0;ca=J+4|0;k[J>>2]=27524;k[_a>>2]=27544;B=0;wa(508,J+56|0,ca|0);E=B;B=0;if(E&1){E=Rb()|0;he=Q;ie=E;vva(_a);Qb(ie|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[_a>>2]=27488;B=0;va(448,ca|0);E=B;B=0;do if(E&1){Ya=Rb()|0;je=Q;ke=Ya}else{k[ca>>2]=27560;Ya=J+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[J+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,ca|0,l|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Wa=Q;Yua(l);Yua(Ya);Ava(ca);je=Wa;ke=Ua;break}Yua(l);B=0;Ua=Ia(40,J|0,145867,15)|0;Wa=B;B=0;w:do if((((!(Wa&1)?(B=0,D=ya(427,g|0)|0,Ta=B,B=0,!(Ta&1)):0)?(Ta=Lta(D)|0,B=0,Va=Ia(40,Ua|0,D|0,Ta|0)|0,Ta=B,B=0,!(Ta&1)):0)?(B=0,Ta=Ia(40,Va|0,146481,18)|0,Va=B,B=0,!(Va&1)):0)?(B=0,Xa(239,Ta|0,0)|0,Ta=B,B=0,!(Ta&1)):0){Ta=Ab(20)|0;B=0;eb(502,K|0,145672,102);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,L|0,145775,21);D=B;B=0;if(D&1){D=Rb()|0;ta=Q;Yua(K);le=ta;me=D;break}B=0;wa(510,M|0,ca|0);D=B;B=0;if(D&1){D=Rb()|0;ne=1;oe=Q;pe=D}else{B=0;ua(163,Ta|0,K|0,L|0,547,M|0);D=B;B=0;if(D&1)qe=1;else{B=0;eb(503,Ta|0,1240,229);B=0;qe=0}D=Rb()|0;ta=Q;Yua(M);ne=qe;oe=ta;pe=D}Yua(L);Yua(K);if(ne){le=oe;me=pe}else{re=oe;se=pe;break w}}else{D=Rb()|0;le=Q;me=D}while(0);zb(Ta|0);re=le;se=me}else pa=451;while(0);if((pa|0)==451){Ua=Rb()|0;re=Q;se=Ua}k[J>>2]=27468;k[_a>>2]=27488;k[ca>>2]=27560;Yua(Ya);Ava(ca);vva(_a);qa=re;ra=se;Qb(ra|0)}while(0);he=je;ie=ke;vva(_a);Qb(ie|0)}}while(0);Tqa(C)}while(0);ie=k[m>>2]|0;if(ie)Tqa(ie);k[m>>2]=0;m=k[n>>2]|0;if(m)Tqa(m);k[n>>2]=0;n=k[o>>2]|0;if(!n){r=j;return}Tqa(n);r=j;return}function soa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;g=r;r=r+384|0;h=g+372|0;i=g+368|0;j=g+364|0;l=g+360|0;m=g+356|0;n=g+352|0;o=g+216|0;p=g+200|0;q=g+48|0;s=g+36|0;t=g+64|0;u=g+24|0;v=g+12|0;w=g;k[l>>2]=0;Oka(b,i,j,c)|0;if((k[i>>2]|0)!=7){i=o+56|0;x=o+4|0;k[o>>2]=27524;k[i>>2]=27544;B=0;wa(508,o+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(i);Qb(A|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[i>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=o+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[o+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,x|0,h|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(h);Yua(C);Ava(x);D=G;E=F;break}Yua(h);B=0;F=Ia(40,o|0,145625,46)|0;G=B;B=0;a:do if((!(G&1)?(H=Lta(c)|0,B=0,I=Ia(40,F|0,c|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,p|0,145672,102);H=B;B=0;do if(!(H&1)){B=0;eb(502,q|0,145915,28);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(p);L=J;M=K;break}B=0;wa(510,s|0,x|0);K=B;B=0;if(K&1){K=Rb()|0;N=Q;O=K;P=1}else{B=0;ua(163,I|0,p|0,q|0,40,s|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}K=Rb()|0;J=Q;Yua(s);N=J;O=K;P=R}Yua(q);Yua(p);if(P){L=O;M=N}else{S=O;T=N;break a}}else{K=Rb()|0;L=K;M=Q}while(0);zb(I|0);S=L;T=M}else U=18;while(0);if((U|0)==18){F=Rb()|0;S=F;T=Q}k[o>>2]=27468;k[i>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(i);V=T;W=S;Qb(W|0)}while(0);z=D;A=E;vva(i);Qb(A|0)}if((k[j>>2]|0)==1){Qka(b,l,m,n,c);toa(a,b,k[l>>2]|0,k[m>>2]|0,0,d,e,f);f=k[l>>2]|0;if(!f){r=g;return}Tqa(f);r=g;return}g=t+56|0;f=t+4|0;k[t>>2]=27524;k[g>>2]=27544;B=0;wa(508,t+56|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;X=Q;Y=l;vva(g);Qb(Y|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[g>>2]=27488;B=0;va(448,f|0);l=B;B=0;do if(l&1){e=Rb()|0;Z=Q;_=e}else{k[f>>2]=27560;e=t+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[t+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,f|0,h|0);d=B;B=0;if(d&1){d=Rb()|0;m=Q;Yua(h);Yua(e);Ava(f);Z=m;_=d;break}Yua(h);B=0;d=Ia(40,t|0,145797,41)|0;m=B;B=0;b:do if((!(m&1)?(b=Lta(c)|0,B=0,a=Ia(40,d|0,c|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,u|0,145672,102);b=B;B=0;do if(!(b&1)){B=0;eb(502,v|0,145915,28);n=B;B=0;if(n&1){n=Rb()|0;j=Q;Yua(u);$=n;aa=j;break}B=0;wa(510,w|0,f|0);j=B;B=0;if(j&1){j=Rb()|0;ba=1;ca=Q;da=j}else{B=0;ua(163,a|0,u|0,v|0,41,w|0);j=B;B=0;if(j&1)ea=1;else{B=0;eb(503,a|0,1240,229);B=0;ea=0}j=Rb()|0;n=Q;Yua(w);ba=ea;ca=n;da=j}Yua(v);Yua(u);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{j=Rb()|0;$=j;aa=Q}while(0);zb(a|0);fa=aa;ga=$}else U=43;while(0);if((U|0)==43){d=Rb()|0;fa=Q;ga=d}k[t>>2]=27468;k[g>>2]=27488;k[f>>2]=27560;Yua(e);Ava(f);vva(g);V=fa;W=ga;Qb(W|0)}while(0);X=Z;Y=_;vva(g);Qb(Y|0)}function toa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;e=r;r=r+368|0;i=e+344|0;j=e+208|0;l=e+196|0;m=e+184|0;n=e+36|0;o=e+48|0;q=e+24|0;s=e+12|0;u=e;if((g|0)!=738){v=j+56|0;w=j+4|0;k[j>>2]=27524;k[v>>2]=27544;B=0;wa(508,j+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=j+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[j+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,w|0,i|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(i);Yua(A);Ava(w);C=F;D=E;break}Yua(i);B=0;E=Ia(40,j|0,145867,15)|0;F=B;B=0;a:do if((((!(F&1)?(B=0,G=ya(427,g|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(G)|0,B=0,I=Ia(40,E|0,G|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,I|0,146481,18)|0,I=B,B=0,!(I&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,l|0,145672,102);I=B;B=0;do if(!(I&1)){B=0;eb(502,m|0,145915,28);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Yua(l);K=J;L=G;break}B=0;wa(510,n|0,w|0);G=B;B=0;if(G&1){G=Rb()|0;M=Q;N=G;O=1}else{B=0;ua(163,H|0,l|0,m|0,571,n|0);G=B;B=0;if(G&1)P=1;else{B=0;eb(503,H|0,1240,229);B=0;P=0}G=Rb()|0;J=Q;Yua(n);M=J;N=G;O=P}Yua(m);Yua(l);if(O){K=M;L=N}else{R=M;S=N;break a}}else{G=Rb()|0;K=Q;L=G}while(0);zb(H|0);R=K;S=L}else T=20;while(0);if((T|0)==20){E=Rb()|0;R=Q;S=E}k[j>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);U=R;V=S;Qb(V|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}z=b+52|0;if((k[z>>2]|0)==(d|0)){if((d|0)<=0){r=e;return}v=b+36|0;D=b+108|0;C=b+100|0;b=d;d=0;y=0;while(1){if((k[(k[v>>2]|0)+(y<<2)>>2]|0)!=0?(W=+$(+(+p[c+(y<<3)>>3])),p[t>>3]=W,S=k[t+4>>2]|0,!(S>>>0>2146435072|(S|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){S=Qqa(40)|0;R=d+1|0;B=0;ua(174,S|0,R+(k[D>>2]|0)|0,y+1+(k[C>>2]|0)|0,h|0,f|0);w=B;B=0;if(w&1){X=S;break}ih(a,S)|0;Y=k[z>>2]|0;Z=R}else{Y=b;Z=d}y=y+1|0;if((y|0)>=(Y|0)){T=60;break}else{b=Y;d=Z}}if((T|0)==60){r=e;return}e=Rb()|0;Z=Q;Sqa(X);U=Z;V=e;Qb(V|0)}e=o+56|0;Z=o+4|0;k[o>>2]=27524;k[e>>2]=27544;B=0;wa(508,o+56|0,Z|0);X=B;B=0;if(X&1){X=Rb()|0;_=Q;aa=X;vva(e);Qb(aa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[e>>2]=27488;B=0;va(448,Z|0);X=B;B=0;do if(X&1){d=Rb()|0;ba=Q;ca=d}else{k[Z>>2]=27560;d=o+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[o+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,Z|0,i|0);Y=B;B=0;if(Y&1){Y=Rb()|0;b=Q;Yua(i);Yua(d);Ava(Z);ba=b;ca=Y;break}Yua(i);B=0;Y=Ia(40,o|0,145883,31)|0;b=B;B=0;b:do if(!(b&1)?(B=0,Xa(239,Y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,q|0,145672,102);z=B;B=0;do if(!(z&1)){B=0;eb(502,s|0,145915,28);a=B;B=0;if(a&1){a=Rb()|0;f=Q;Yua(q);da=a;ea=f;break}B=0;wa(510,u|0,Z|0);f=B;B=0;if(f&1){f=Rb()|0;fa=1;ga=Q;ha=f}else{B=0;ua(163,y|0,q|0,s|0,592,u|0);f=B;B=0;if(f&1)ia=1;else{B=0;eb(503,y|0,1240,229);B=0;ia=0}f=Rb()|0;a=Q;Yua(u);fa=ia;ga=a;ha=f}Yua(s);Yua(q);if(fa){da=ha;ea=ga}else{ja=ga;ka=ha;break b}}else{f=Rb()|0;da=f;ea=Q}while(0);zb(y|0);ja=ea;ka=da}else T=52;while(0);if((T|0)==52){Y=Rb()|0;ja=Q;ka=Y}k[o>>2]=27468;k[e>>2]=27488;k[Z>>2]=27560;Yua(d);Ava(Z);vva(e);U=ja;V=ka;Qb(V|0)}while(0);_=ba;aa=ca;vva(e);Qb(aa|0)}function uoa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;a:do if(BY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;Ia(40,f|0,145944,31)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=q;u=s;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}s=Rb()|0;t=s;u=Q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=a+20|0;if((th(k[m>>2]|0)|0)>0){p=0;do{o=qh(k[m>>2]|0,p)|0;nd[k[(k[o>>2]|0)+40>>2]&1023](o,b,c);p=p+1|0}while((p|0)<(th(k[m>>2]|0)|0))}m=a+36|0;if((bL(k[m>>2]|0)|0)>0){p=0;do{o=(qh(k[m>>2]|0,p)|0)+4|0;nd[k[(k[o>>2]|0)+12>>2]&1023](o,b,c);p=p+1|0}while((p|0)<(bL(k[m>>2]|0)|0))}m=a+40|0;if((th(k[m>>2]|0)|0)>0)v=0;else{r=d;return}do{a=(qh(k[m>>2]|0,v)|0)+4|0;nd[k[(k[a>>2]|0)+12>>2]&1023](a,b,c);v=v+1|0}while((v|0)<(th(k[m>>2]|0)|0));r=d;return}function voa(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;a:do if(BY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;Ia(40,f|0,145944,31)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=q;u=s;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}s=Rb()|0;t=s;u=Q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=a+20|0;if((th(k[m>>2]|0)|0)>0){p=0;do{o=qh(k[m>>2]|0,p)|0;Nc[k[(k[o>>2]|0)+32>>2]&31](o,b,c);p=p+1|0}while((p|0)<(th(k[m>>2]|0)|0))}m=a+36|0;if((bL(k[m>>2]|0)|0)>0){p=0;do{o=(qh(k[m>>2]|0,p)|0)+4|0;Nc[k[(k[o>>2]|0)+4>>2]&31](o,b,c);p=p+1|0}while((p|0)<(bL(k[m>>2]|0)|0))}m=a+40|0;if((th(k[m>>2]|0)|0)>0)v=0;else{r=d;return}do{a=(qh(k[m>>2]|0,v)|0)+4|0;Nc[k[(k[a>>2]|0)+4>>2]&31](a,b,c);v=v+1|0}while((v|0)<(th(k[m>>2]|0)|0));r=d;return}function woa(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;d=r;r=r+176|0;e=d+152|0;f=d+16|0;g=d;a:do if(BY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(n);Ava(i);o=s;p=q;break}Yua(e);B=0;Ia(40,f|0,145944,31)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=s;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}q=Rb()|0;t=Q;u=q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(u|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);if((th(a)|0)>0)v=0;else{r=d;return}do{m=qh(a,v)|0;Nc[k[(k[m>>2]|0)+32>>2]&31](m,b,c);v=v+1|0}while((v|0)<(th(a)|0));r=d;return}function xoa(a,b){a=a|0;b=b|0;var c=0;if(!(k[b>>2]|0)){yoa(a,0);return}c=k[k[b+4>>2]>>2]|0;b=Hc[k[(k[c>>2]|0)+52>>2]&511](c)|0;yoa(a,b);if(!b)return;Tqa(b);return}function yoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;c=r;r=r+176|0;d=c+156|0;e=c+152|0;f=c+16|0;g=c;cO(k[a+44>>2]|0,e,477);a:do if(BY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;Ia(40,f|0,145976,33)|0;q=B;B=0;if(!(q&1)?(B=0,wa(510,g|0,i|0),q=B,B=0,!(q&1)):0){B=0;ya(425,g|0)|0;q=B;B=0;if(!(q&1)){Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}q=Rb()|0;s=Q;Yua(g);t=q;u=s;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}s=Rb()|0;t=s;u=Q;k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);Qb(t|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);m=n_(k[e>>2]|0)|0;e=a+20|0;if((th(k[e>>2]|0)|0)<=0){if(!m){r=c;return}}else{a=0;do{p=qh(k[e>>2]|0,a)|0;nd[k[(k[m>>2]|0)+60>>2]&1023](m,b,p);a=a+1|0}while((a|0)<(th(k[e>>2]|0)|0))}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=c;return}function zoa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;b=r;r=r+352|0;c=b+332|0;d=b+328|0;e=b+192|0;f=b+176|0;g=b+40|0;h=b+24|0;i=b+12|0;j=b;cO(k[a+44>>2]|0,d,37);switch(k[d>>2]|0){case 62:{a:do if(CY()|0){l=e+56|0;m=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(l);Qb(p|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(m);s=v;t=u;break}Yua(c);B=0;Ia(40,e|0,146010,42)|0;u=B;B=0;do if(!(u&1)?(B=0,wa(510,f|0,m|0),v=B,B=0,!(v&1)):0){B=0;ya(425,f|0)|0;v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}else{Yua(f);k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);break a}}else z=15;while(0);if((z|0)==15){u=Rb()|0;x=Q;y=u}k[e>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(l);A=x;C=y;Qb(C|0)}while(0);o=s;p=t;vva(l);Qb(p|0)}while(0);p=a+20|0;if((th(k[p>>2]|0)|0)>0)D=0;else{r=b;return}do{cq(qh(k[p>>2]|0,D)|0);D=D+1|0}while((D|0)<(th(k[p>>2]|0)|0));r=b;return}case 60:case 61:case 59:{r=b;return}default:{b=g+56|0;p=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,p|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(b);Qb(F|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,p|0);D=B;B=0;do if(D&1){a=Rb()|0;G=Q;H=a}else{k[p>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Yua(c);Yua(a);Ava(p);G=s;H=t;break}Yua(c);B=0;t=Ia(40,g|0,146460,20)|0;s=B;B=0;b:do if((((!(s&1)?(B=0,o=ya(427,k[d>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(o)|0,B=0,x=Ia(40,t|0,o|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,y|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,h|0,146053,90);x=B;B=0;do if(!(x&1)){B=0;eb(502,i|0,146144,15);o=B;B=0;if(o&1){o=Rb()|0;e=Q;Yua(h);I=e;J=o;break}B=0;wa(510,j|0,p|0);o=B;B=0;if(o&1){o=Rb()|0;K=1;L=Q;M=o}else{B=0;ua(163,y|0,h|0,i|0,29,j|0);o=B;B=0;if(o&1)N=1;else{B=0;eb(503,y|0,1240,229);B=0;N=0}o=Rb()|0;e=Q;Yua(j);K=N;L=e;M=o}Yua(i);Yua(h);if(K){I=L;J=M}else{O=L;P=M;break b}}else{o=Rb()|0;I=Q;J=o}while(0);zb(y|0);O=I;P=J}else z=38;while(0);if((z|0)==38){t=Rb()|0;O=Q;P=t}k[g>>2]=27468;k[b>>2]=27488;k[p>>2]=27560;Yua(a);Ava(p);vva(b);A=O;C=P;Qb(C|0)}while(0);E=G;F=H;vva(b);Qb(F|0)}}}function Aoa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;c=r;r=r+352|0;d=c+336|0;e=c+332|0;f=c+328|0;g=c+192|0;h=c+176|0;i=c+40|0;j=c+24|0;l=c+12|0;m=c;a:do if(BY()|0){n=g+56|0;o=g+4|0;k[g>>2]=27524;k[n>>2]=27544;B=0;wa(508,g+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(o);u=x;v=w;break}Yua(d);B=0;Ia(40,g|0,146160,28)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,h|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,h|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=x;A=y;break}else{Yua(h);k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=14;while(0);if((C|0)==14){w=Rb()|0;z=w;A=Q}k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(D|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);s=b+44|0;cO(k[s>>2]|0,e,478);cO(k[s>>2]|0,f,477);s=en(k[b+24>>2]|0,k[e>>2]|0,943)|0;if(s){v=Qqa(8)|0;B=0;va(485,v|0);u=B;B=0;b:do if(u&1)C=52;else{do if(k[v>>2]|0){B=0;q=ya(423,4)|0;A=B;B=0;if(A&1){C=52;break b}B=0;eb(505,q|0,s|0,0);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Sqa(q);F=z;G=A;break b}else{k[v+4>>2]=q;break}}while(0);n=n_(k[f>>2]|0)|0;q=b+20|0;if((th(k[q>>2]|0)|0)<=0){if(n)C=55}else{A=0;do{z=qh(k[q>>2]|0,A)|0;nd[k[(k[n>>2]|0)+52>>2]&1023](n,v,z);A=A+1|0}while((A|0)<(th(k[q>>2]|0)|0));C=55}if((C|0)==55)Ec[k[(k[n>>2]|0)+4>>2]&1023](n);if(!(k[v>>2]|0)){k[a>>2]=v;r=c;return}q=k[k[v+4>>2]>>2]|0;Ec[k[(k[q>>2]|0)+12>>2]&1023](q);k[a>>2]=v;r=c;return}while(0);if((C|0)==52){c=Rb()|0;F=Q;G=c}Sqa(v);D=G;E=F;Qb(D|0)}F=i+56|0;G=i+4|0;k[i>>2]=27524;k[F>>2]=27544;B=0;wa(508,i+56|0,G|0);v=B;B=0;if(v&1){v=Rb()|0;H=Q;I=v;vva(F);Qb(I|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);v=B;B=0;do if(v&1){c=Rb()|0;J=Q;K=c}else{k[G>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,G|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(d);Yua(c);Ava(G);J=b;K=a;break}Yua(d);B=0;a=Ia(40,i|0,146189,56)|0;b=B;B=0;c:do if(((!(b&1)?(B=0,f=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(f)|0,B=0,u=Ia(40,a|0,f|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,j|0,146246,104);s=B;B=0;do if(!(s&1)){B=0;eb(502,l|0,146351,22);f=B;B=0;if(f&1){f=Rb()|0;q=Q;Yua(j);L=f;M=q;break}B=0;wa(510,m|0,G|0);q=B;B=0;if(q&1){q=Rb()|0;N=q;O=1;P=Q}else{B=0;ua(163,u|0,j|0,l|0,26,m|0);q=B;B=0;if(q&1)R=1;else{B=0;eb(503,u|0,1240,229);B=0;R=0}q=Rb()|0;f=Q;Yua(m);N=q;O=R;P=f}Yua(l);Yua(j);if(O){L=N;M=P}else{S=N;T=P;break c}}else{f=Rb()|0;L=f;M=Q}while(0);zb(u|0);S=L;T=M}else C=35;while(0);if((C|0)==35){a=Rb()|0;S=a;T=Q}k[i>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(c);Ava(G);vva(F);D=S;E=T;Qb(D|0)}while(0);H=J;I=K;vva(F);Qb(I|0)}function Boa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+496|0;c=b+480|0;d=b+476|0;e=b+328|0;f=b+464|0;g=b+192|0;h=b+176|0;i=b+40|0;j=b+24|0;l=b+12|0;m=b;cO(k[a+44>>2]|0,d,37);switch(k[d>>2]|0){case 60:{a:do if(CY()|0){n=e+56|0;o=e+4|0;k[e>>2]=27524;k[n>>2]=27544;B=0;wa(508,e+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=e+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;Ia(40,e|0,146374,42)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,f|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,f|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(f);z=y;A=x;break}else{Yua(f);k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=15;while(0);if((C|0)==15){w=Rb()|0;z=Q;A=w}k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);s=a+20|0;if((th(k[s>>2]|0)|0)>0)F=0;else{r=b;return}do{bq(qh(k[s>>2]|0,F)|0);F=F+1|0}while((F|0)<(th(k[s>>2]|0)|0));r=b;return}case 61:{b:do if(CY()|0){s=g+56|0;F=g+4|0;k[g>>2]=27524;k[s>>2]=27544;B=0;wa(508,g+56|0,F|0);v=B;B=0;if(v&1){v=Rb()|0;G=Q;H=v;vva(s);Qb(H|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[s>>2]=27488;B=0;va(448,F|0);v=B;B=0;do if(v&1){u=Rb()|0;I=Q;J=u}else{k[F>>2]=27560;u=g+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;A=Q;Yua(c);Yua(u);Ava(F);I=A;J=q;break}Yua(c);B=0;Ia(40,g|0,146417,42)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,h|0,F|0),A=B,B=0,!(A&1)):0){B=0;ya(425,h|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(h);K=z;L=A;break}else{Yua(h);k[g>>2]=27468;k[s>>2]=27488;k[F>>2]=27560;Yua(u);Ava(F);vva(s);break b}}else C=33;while(0);if((C|0)==33){q=Rb()|0;K=Q;L=q}k[g>>2]=27468;k[s>>2]=27488;k[F>>2]=27560;Yua(u);Ava(F);vva(s);D=K;E=L;Qb(E|0)}while(0);G=I;H=J;vva(s);Qb(H|0)}while(0);H=a+20|0;if((th(k[H>>2]|0)|0)>0)M=0;else{r=b;return}do{fq(qh(k[H>>2]|0,M)|0);M=M+1|0}while((M|0)<(th(k[H>>2]|0)|0));r=b;return}case 62:case 59:{r=b;return}default:{b=i+56|0;H=i+4|0;k[i>>2]=27524;k[b>>2]=27544;B=0;wa(508,i+56|0,H|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;O=M;vva(b);Qb(O|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[b>>2]=27488;B=0;va(448,H|0);M=B;B=0;do if(M&1){a=Rb()|0;P=Q;R=a}else{k[H>>2]=27560;a=i+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[i+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(c);Yua(a);Ava(H);P=I;R=J;break}Yua(c);B=0;J=Ia(40,i|0,146460,20)|0;I=B;B=0;c:do if((((!(I&1)?(B=0,G=ya(427,k[d>>2]|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(G)|0,B=0,K=Ia(40,J|0,G|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,K|0,146481,18)|0,K=B,B=0,!(K&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,j|0,146500,106);K=B;B=0;do if(!(K&1)){B=0;eb(502,l|0,146607,23);G=B;B=0;if(G&1){G=Rb()|0;g=Q;Yua(j);S=g;T=G;break}B=0;wa(510,m|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;U=1;V=Q;W=G}else{B=0;ua(163,L|0,j|0,l|0,32,m|0);G=B;B=0;if(G&1)X=1;else{B=0;eb(503,L|0,1240,229);B=0;X=0}G=Rb()|0;g=Q;Yua(m);U=X;V=g;W=G}Yua(l);Yua(j);if(U){S=V;T=W}else{Y=V;Z=W;break c}}else{G=Rb()|0;S=Q;T=G}while(0);zb(L|0);Y=S;Z=T}else C=56;while(0);if((C|0)==56){J=Rb()|0;Y=Q;Z=J}k[i>>2]=27468;k[b>>2]=27488;k[H>>2]=27560;Yua(a);Ava(H);vva(b);D=Y;E=Z;Qb(E|0)}while(0);N=P;O=R;vva(b);Qb(O|0)}}}function Coa(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;d=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;e=d>>>0>536870911?-1:d<<3;f=Rqa(e)|0;g=Rqa(e)|0;h=Rqa(e)|0;i=Rqa(e)|0;j=Rqa(e)|0;l=Rqa(e)|0;xp(a,f,461);xp(a,g,462);xp(a,h,463);xp(a,i,464);xp(a,j,339);e=a+32|0;m=+WJ(k[e>>2]|0,265);n=+WJ(k[e>>2]|0,267);if((d|0)>0){e=0;do{o=+p[g+(e<<3)>>3];q=+p[j+(e<<3)>>3];r=+p[f+(e<<3)>>3];if(o>0.0)s=+p[h+(e<<3)>>3]*(q-r);else s=+p[i+(e<<3)>>3]*(q-r);p[l+(e<<3)>>3]=n*((o+s)/1.0e3)/m;e=e+1|0}while((e|0)!=(d|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,388,l,738);Tqa(f);Tqa(g);Tqa(h);Tqa(i);Tqa(j);Tqa(l);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Doa(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{jp(qh(k[b>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Eoa(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{kp(qh(k[b>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function Foa(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{lp(qh(k[b>>2]|0,c)|0);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}
+-function p1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=d+56|0;q=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;y=Ia(40,d|0,119576,15)|0;z=B;B=0;do if(((((!(z&1)?(A=k[a+12>>2]|0,C=Lta(A)|0,B=0,D=Ia(40,y|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,149175,1)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Xa(242,C|0,k[a+8>>2]|0)|0,C=B,B=0,!(C&1)):0)?(B=0,Ia(40,D|0,149177,1)|0,D=B,B=0,!(D&1)):0)?(B=0,wa(510,e|0,q|0),D=B,B=0,!(D&1)):0){B=0;ya(424,e|0)|0;D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(e);E=C;F=D;break}Yua(e);k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);D=f+56|0;C=f+4|0;k[f>>2]=27524;k[D>>2]=27544;B=0;wa(508,f+56|0,C|0);A=B;B=0;if(A&1){A=Rb()|0;G=Q;H=A;vva(D);Qb(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[D>>2]=27488;B=0;va(448,C|0);A=B;B=0;do if(A&1){I=Rb()|0;J=Q;K=I}else{k[C>>2]=27560;I=f+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(c);Yua(I);Ava(C);J=M;K=L;break}Yua(c);B=0;L=Ia(40,f|0,119592,11)|0;M=B;B=0;do if((!(M&1)?(N=k[a+16>>2]|0,O=Lta(N)|0,B=0,P=Ia(40,L|0,N|0,O|0)|0,O=B,B=0,!(O&1)):0)?(B=0,Ia(40,P|0,149177,1)|0,P=B,B=0,!(P&1)):0){B=0;wa(510,g|0,C|0);P=B;B=0;if(P&1){R=72;break}B=0;ya(424,g|0)|0;P=B;B=0;if(P&1){P=Rb()|0;O=Q;Yua(g);S=O;T=P;break}Yua(g);k[f>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(D);P=h+56|0;O=h+4|0;k[h>>2]=27524;k[P>>2]=27544;B=0;wa(508,h+56|0,O|0);N=B;B=0;if(N&1){N=Rb()|0;U=Q;V=N;vva(P);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[P>>2]=27488;B=0;va(448,O|0);N=B;B=0;do if(N&1){W=Rb()|0;X=Q;Y=W}else{k[O>>2]=27560;W=h+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,O|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(O);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,h|0,119604,11)|0;_=B;B=0;do if(_&1)R=75;else{$=k[a+20>>2]|0;aa=Lta($)|0;B=0;ba=Ia(40,Z|0,$|0,aa|0)|0;aa=B;B=0;if(aa&1){R=75;break}B=0;Ia(40,ba|0,149177,1)|0;ba=B;B=0;if(ba&1){R=75;break}B=0;wa(510,i|0,O|0);ba=B;B=0;if(ba&1){R=75;break}B=0;ya(424,i|0)|0;ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(i);ca=aa;da=ba;break}Yua(i);k[h>>2]=27468;k[P>>2]=27488;k[O>>2]=27560;Yua(W);Ava(O);vva(P);ba=j+56|0;aa=j+4|0;k[j>>2]=27524;k[ba>>2]=27544;B=0;wa(508,j+56|0,aa|0);$=B;B=0;if($&1){$=Rb()|0;ea=Q;fa=$;vva(ba);Qb(fa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ba>>2]=27488;B=0;va(448,aa|0);$=B;B=0;do if($&1){ga=Rb()|0;ha=Q;ia=ga}else{k[aa>>2]=27560;ga=j+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,aa|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(c);Yua(ga);Ava(aa);ha=ka;ia=ja;break}Yua(c);B=0;ja=Ia(40,j|0,119616,11)|0;ka=B;B=0;do if(ka&1)R=78;else{B=0;la=Sa(1,ja|0,+(+p[a+24>>3]))|0;ma=B;B=0;if(ma&1){R=78;break}B=0;Ia(40,la|0,149177,1)|0;la=B;B=0;if(la&1){R=78;break}B=0;wa(510,l|0,aa|0);la=B;B=0;if(la&1){R=78;break}B=0;ya(424,l|0)|0;la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(l);na=ma;oa=la;break}Yua(l);k[j>>2]=27468;k[ba>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva(ba);la=m+56|0;ma=m+4|0;k[m>>2]=27524;k[la>>2]=27544;B=0;wa(508,m+56|0,ma|0);pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;ra=pa;vva(la);Qb(ra|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[la>>2]=27488;B=0;va(448,ma|0);pa=B;B=0;do if(pa&1){sa=Rb()|0;ta=Q;ua=sa}else{k[ma>>2]=27560;sa=m+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(c);Yua(sa);Ava(ma);ta=za;ua=xa;break}Yua(c);B=0;xa=Ia(40,m|0,119628,10)|0;za=B;B=0;do if(!(za&1)){B=0;Aa=Sa(1,xa|0,+(+p[a+32>>3]))|0;Ba=B;B=0;if(Ba&1){R=81;break}B=0;Ia(40,Aa|0,149177,1)|0;Aa=B;B=0;if(Aa&1){R=81;break}B=0;wa(510,n|0,ma|0);Aa=B;B=0;if(Aa&1){R=81;break}B=0;ya(424,n|0)|0;Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Yua(n);Ca=Ba;Da=Aa;break}else{Yua(n);k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);r=b;return}}else R=81;while(0);if((R|0)==81){xa=Rb()|0;Ca=Q;Da=xa}k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);Ea=Ca;Fa=Da;Qb(Fa|0)}while(0);qa=ta;ra=ua;vva(la);Qb(ra|0)}while(0);if((R|0)==78){ja=Rb()|0;na=Q;oa=ja}k[j>>2]=27468;k[ba>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva(ba);Ea=na;Fa=oa;Qb(Fa|0)}while(0);ea=ha;fa=ia;vva(ba);Qb(fa|0)}while(0);if((R|0)==75){Z=Rb()|0;ca=Q;da=Z}k[h>>2]=27468;k[P>>2]=27488;k[O>>2]=27560;Yua(W);Ava(O);vva(P);Ea=ca;Fa=da;Qb(Fa|0)}while(0);U=X;V=Y;vva(P);Qb(V|0)}else R=72;while(0);if((R|0)==72){L=Rb()|0;S=Q;T=L}k[f>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(D);Ea=S;Fa=T;Qb(Fa|0)}while(0);G=J;H=K;vva(D);Qb(H|0)}else R=69;while(0);if((R|0)==69){y=Rb()|0;E=Q;F=y}k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Ea=E;Fa=F;Qb(Fa|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}function q1(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function r1(a){a=a|0;return -1}function s1(a){a=a|0;return 601}function t1(a){a=a|0;var b=0;b=Qqa(40)|0;B=0;Na(1,b|0,k[a+12>>2]|0,k[a+8>>2]|0,k[a+16>>2]|0,k[a+20>>2]|0,+(+p[a+24>>3]),+(+p[a+32>>3]));a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function u1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,119474,101);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,91,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function v1(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function w1(a){a=a|0;return k[a+8>>2]|0}function x1(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+O2(b,k[a+16>>2]|0);d=+O2(b,k[a+20>>2]|0);return +(c*+p[a+24>>3]+d*+p[a+32>>3])}function y1(a){a=a|0;var b=0,c=0;k[a+-4>>2]=37304;k[a>>2]=37356;b=a+8|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+16|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function z1(a){a=a|0;var b=0,c=0,d=0;b=a+-4|0;k[b>>2]=37304;k[a>>2]=37356;c=a+8|0;d=k[c>>2]|0;if(d){Tqa(d);k[c>>2]=0}c=a+12|0;d=k[c>>2]|0;if(d){Tqa(d);k[c>>2]=0}c=k[a+16>>2]|0;if(!c){Sqa(b);return}Tqa(c);Sqa(b);return}function A1(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function B1(a){a=a|0;return k[a+4>>2]|0}function C1(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+O2(b,k[a+12>>2]|0);d=+O2(b,k[a+16>>2]|0);return +(c*+p[a+20>>3]+d*+p[a+28>>3])}function D1(a){a=a|0;var b=0,c=0;k[a>>2]=37384;k[a+4>>2]=37436;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+16|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function E1(a){a=a|0;var b=0,c=0;k[a>>2]=37384;k[a+4>>2]=37436;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=k[a+16>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function F1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;t=Ia(40,d|0,119764,10)|0;u=B;B=0;do if(((((!(u&1)?(v=k[a+12>>2]|0,w=Lta(v)|0,B=0,x=Ia(40,t|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,149175,1)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Xa(242,w|0,k[a+8>>2]|0)|0,w=B,B=0,!(w&1)):0)?(B=0,Ia(40,x|0,149177,1)|0,x=B,B=0,!(x&1)):0)?(B=0,wa(510,e|0,l|0),x=B,B=0,!(x&1)):0){B=0;ya(424,e|0)|0;x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(e);y=w;z=x;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);x=f+56|0;w=f+4|0;k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,f+56|0,w|0);v=B;B=0;if(v&1){v=Rb()|0;A=Q;C=v;vva(x);Qb(C|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);v=B;B=0;do if(v&1){D=Rb()|0;E=Q;F=D}else{k[w>>2]=27560;D=f+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(w);E=H;F=G;break}Yua(c);B=0;G=Ia(40,f|0,119775,14)|0;H=B;B=0;do if((!(H&1)?(B=0,I=Xa(245,G|0,k[a+16>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,Ia(40,I|0,149177,1)|0,I=B,B=0,!(I&1)):0){B=0;wa(510,g|0,w|0);I=B;B=0;if(I&1){K=46;break}B=0;ya(424,g|0)|0;I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(g);L=J;M=I;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(x);I=h+56|0;J=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,J|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(I);Qb(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[J>>2]=27560;R=h+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(c);Yua(R);Ava(J);S=V;T=U;break}Yua(c);B=0;U=Ia(40,h|0,119790,7)|0;V=B;B=0;do if(!(V&1)){B=0;W=Xa(242,U|0,k[a+20>>2]|0)|0;X=B;B=0;if(X&1){K=49;break}B=0;Ia(40,W|0,149177,1)|0;W=B;B=0;if(W&1){K=49;break}B=0;wa(510,i|0,J|0);W=B;B=0;if(W&1){K=49;break}B=0;ya(424,i|0)|0;W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(i);Y=X;Z=W;break}else{Yua(i);k[h>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(R);Ava(J);vva(I);r=b;return}}else K=49;while(0);if((K|0)==49){U=Rb()|0;Y=Q;Z=U}k[h>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(R);Ava(J);vva(I);_=Y;$=Z;Qb($|0)}while(0);O=S;P=T;vva(I);Qb(P|0)}else K=46;while(0);if((K|0)==46){G=Rb()|0;L=Q;M=G}k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(x);_=L;$=M;Qb($|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}else K=43;while(0);if((K|0)==43){t=Rb()|0;y=Q;z=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);_=y;$=z;Qb($|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function G1(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function H1(a){a=a|0;return -1}function I1(a){a=a|0;return 597}function J1(a){a=a|0;var b=0;b=Qqa(24)|0;B=0;ua(173,b|0,k[a+12>>2]|0,k[a+8>>2]|0,k[a+16>>2]|0,k[a+20>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function K1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,119667,96);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,80,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function L1(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function M1(a){a=a|0;return k[a+8>>2]|0}function N1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;p[e>>3]=0.0;f=b+20|0;if((th(k[f>>2]|0)|0)>0){b=a+16|0;g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+id[k[(k[h>>2]|0)+280>>2]&63](h,k[b>>2]|0)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}fZ(d,e,1,2,4,uY()|0)|0;r=c;return +(+p[e>>3])}function O1(a){a=a|0;var b=0,c=0;b=a+-4|0;k[b>>2]=37384;k[b+4>>2]=37436;a=b+12|0;c=k[a>>2]|0;if(c){Tqa(c);k[a>>2]=0}a=b+16|0;b=k[a>>2]|0;if(!b)return;Tqa(b);k[a>>2]=0;return}function P1(a){a=a|0;var b=0,c=0;b=a+-4|0;k[b>>2]=37384;k[b+4>>2]=37436;a=b+12|0;c=k[a>>2]|0;if(c){Tqa(c);k[a>>2]=0}a=k[b+16>>2]|0;if(!a){Sqa(b);return}Tqa(a);Sqa(b);return}function Q1(a){a=a|0;var b=0,c=0;b=k[a+-4+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function R1(a){a=a|0;return k[a+-4+8>>2]|0}function S1(a,b){a=a|0;b=b|0;return +(+N1(a+-4|0,b))}function T1(a){a=a|0;var b=0;k[a>>2]=37224;k[a+4>>2]=37276;b=a+12|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function U1(a){a=a|0;var b=0;k[a>>2]=37224;k[a+4>>2]=37276;b=k[a+12>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function V1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;t=Ia(40,d|0,119907,13)|0;u=B;B=0;do if(((((!(u&1)?(v=k[a+12>>2]|0,w=Lta(v)|0,B=0,x=Ia(40,t|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,149175,1)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Xa(242,w|0,k[a+8>>2]|0)|0,w=B,B=0,!(w&1)):0)?(B=0,Ia(40,x|0,149177,1)|0,x=B,B=0,!(x&1)):0)?(B=0,wa(510,e|0,l|0),x=B,B=0,!(x&1)):0){B=0;ya(424,e|0)|0;x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(e);y=w;z=x;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);x=f+56|0;w=f+4|0;k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,f+56|0,w|0);v=B;B=0;if(v&1){v=Rb()|0;A=Q;C=v;vva(x);Qb(C|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);v=B;B=0;do if(v&1){D=Rb()|0;E=Q;F=D}else{k[w>>2]=27560;D=f+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(w);E=H;F=G;break}Yua(c);B=0;G=Ia(40,f|0,119921,16)|0;H=B;B=0;do if((!(H&1)?(I=a+16|0,B=0,J=Xa(242,G|0,k[I>>2]|0)|0,K=B,B=0,!(K&1)):0)?(B=0,K=Ia(40,J|0,149175,1)|0,J=B,B=0,!(J&1)):0){B=0;J=ya(427,k[I>>2]|0)|0;I=B;B=0;if(I&1){L=49;break}I=Lta(J)|0;B=0;M=Ia(40,K|0,J|0,I|0)|0;I=B;B=0;if(I&1){L=49;break}B=0;Ia(40,M|0,149177,1)|0;M=B;B=0;if(M&1){L=49;break}B=0;wa(510,g|0,w|0);M=B;B=0;if(M&1){L=49;break}B=0;ya(424,g|0)|0;M=B;B=0;if(M&1){M=Rb()|0;I=Q;Yua(g);N=I;O=M;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(x);M=h+56|0;I=h+4|0;k[h>>2]=27524;k[M>>2]=27544;B=0;wa(508,h+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;P=Q;R=J;vva(M);Qb(R|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[M>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){K=Rb()|0;S=Q;T=K}else{k[I>>2]=27560;K=h+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(c);Yua(K);Ava(I);S=V;T=U;break}Yua(c);B=0;U=Ia(40,h|0,119938,10)|0;V=B;B=0;do if(!(V&1)){B=0;W=Xa(242,U|0,k[a+20>>2]|0)|0;X=B;B=0;if(X&1){L=52;break}B=0;Ia(40,W|0,149177,1)|0;W=B;B=0;if(W&1){L=52;break}B=0;wa(510,i|0,I|0);W=B;B=0;if(W&1){L=52;break}B=0;ya(424,i|0)|0;W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(i);Y=X;Z=W;break}else{Yua(i);k[h>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(K);Ava(I);vva(M);r=b;return}}else L=52;while(0);if((L|0)==52){U=Rb()|0;Y=Q;Z=U}k[h>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(K);Ava(I);vva(M);_=Y;$=Z;Qb($|0)}while(0);P=S;R=T;vva(M);Qb(R|0)}else L=49;while(0);if((L|0)==49){G=Rb()|0;N=Q;O=G}k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(x);_=N;$=O;Qb($|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}else L=46;while(0);if((L|0)==46){t=Rb()|0;y=Q;z=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);_=y;$=z;Qb($|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function W1(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function X1(a){a=a|0;return -1}function Y1(a){a=a|0;return 875}function Z1(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=Qqa(24)|0;c=k[a+12>>2]|0;d=k[a+8>>2]|0;e=k[a+16>>2]|0;f=k[a+20>>2]|0;k[b>>2]=37224;k[b+4>>2]=37276;k[b+8>>2]=d;d=(Lta(c)|0)+1|0;B=0;a=ya(422,d|0)|0;d=B;B=0;if(d&1){g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}k[b+12>>2]=a;d=(Lta(c)|0)+1|0;if(!c){B=0;ib(283,142353,118972,137,142345);B=0;g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}if(!d){i=b+16|0;k[i>>2]=e;j=b+20|0;k[j>>2]=f;return b|0}TEa(a|0,c|0,d|0)|0;i=b+16|0;k[i>>2]=e;j=b+20|0;k[j>>2]=f;return b|0}function _1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,119807,99);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,82,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function $1(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function a2(a){a=a|0;return k[a+8>>2]|0}function b2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=b+44|0;oO(k[e>>2]|0,k[a+20>>2]|0,944);AZ(d,k[a+16>>2]|0,k[b+20>>2]|0,k[b+24>>2]|0,k[b+28>>2]|0,k[b+36>>2]|0,k[b+40>>2]|0,k[e>>2]|0);r=c;return +(+p[d>>3])}function c2(a){a=a|0;var b=0;b=a+-4|0;k[b>>2]=37224;k[b+4>>2]=37276;a=b+12|0;b=k[a>>2]|0;if(!b)return;Tqa(b);k[a>>2]=0;return}function d2(a){a=a|0;var b=0;b=a+-4|0;k[b>>2]=37224;k[b+4>>2]=37276;a=k[b+12>>2]|0;if(!a){Sqa(b);return}Tqa(a);Sqa(b);return}function e2(a){a=a|0;var b=0,c=0;b=k[a+-4+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function f2(a){a=a|0;return k[a+-4+8>>2]|0}function g2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;e=a+-4|0;a=b+44|0;oO(k[a>>2]|0,k[e+20>>2]|0,944);AZ(d,k[e+16>>2]|0,k[b+20>>2]|0,k[b+24>>2]|0,k[b+28>>2]|0,k[b+36>>2]|0,k[b+40>>2]|0,k[a>>2]|0);r=c;return +(+p[d>>3])}function h2(a){a=a|0;var b=0,c=0;k[a>>2]=37464;k[a+4>>2]=37516;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+28|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}p[a+40>>3]=0.0;k[a+48>>2]=0;return}function i2(a){a=a|0;var b=0,c=0;k[a>>2]=37464;k[a+4>>2]=37516;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=k[a+28>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function j2(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;j=b+728|0;l=b+304|0;m=b+576|0;n=b+152|0;o=b+288|0;p=b+16|0;q=b;s=d+56|0;t=d+4|0;k[d>>2]=27524;k[s>>2]=27544;B=0;wa(508,d+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=d+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;A=Ia(40,d|0,120058,9)|0;C=B;B=0;do if(((((!(C&1)?(D=k[a+12>>2]|0,E=Lta(D)|0,B=0,F=Ia(40,A|0,D|0,E|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,F|0,149175,1)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Xa(242,E|0,k[a+8>>2]|0)|0,E=B,B=0,!(E&1)):0)?(B=0,Ia(40,F|0,149177,1)|0,F=B,B=0,!(F&1)):0)?(B=0,wa(510,e|0,t|0),F=B,B=0,!(F&1)):0){B=0;ya(424,e|0)|0;F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(e);G=E;H=F;break}Yua(e);k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);F=f+56|0;E=f+4|0;k[f>>2]=27524;k[F>>2]=27544;B=0;wa(508,f+56|0,E|0);D=B;B=0;if(D&1){D=Rb()|0;I=Q;J=D;vva(F);Qb(J|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[F>>2]=27488;B=0;va(448,E|0);D=B;B=0;do if(D&1){K=Rb()|0;L=Q;M=K}else{k[E>>2]=27560;K=f+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(c);Yua(K);Ava(E);L=O;M=N;break}Yua(c);B=0;N=Ia(40,f|0,119921,16)|0;O=B;B=0;do if((!(O&1)?(P=a+16|0,B=0,R=Xa(242,N|0,k[P>>2]|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,149175,1)|0,R=B,B=0,!(R&1)):0){B=0;R=ya(427,k[P>>2]|0)|0;P=B;B=0;if(P&1){T=94;break}P=Lta(R)|0;B=0;U=Ia(40,S|0,R|0,P|0)|0;P=B;B=0;if(P&1){T=94;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){T=94;break}B=0;wa(510,g|0,E|0);U=B;B=0;if(U&1){T=94;break}B=0;ya(424,g|0)|0;U=B;B=0;if(U&1){U=Rb()|0;P=Q;Yua(g);V=P;W=U;break}Yua(g);k[f>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(F);U=h+56|0;P=h+4|0;k[h>>2]=27524;k[U>>2]=27544;B=0;wa(508,h+56|0,P|0);R=B;B=0;if(R&1){R=Rb()|0;X=Q;Y=R;vva(U);Qb(Y|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[U>>2]=27488;B=0;va(448,P|0);R=B;B=0;do if(R&1){S=Rb()|0;Z=Q;_=S}else{k[P>>2]=27560;S=h+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(c);Yua(S);Ava(P);Z=aa;_=$;break}Yua(c);B=0;$=Ia(40,h|0,120068,22)|0;aa=B;B=0;do if(aa&1)T=97;else{ba=a+20|0;B=0;ca=Xa(242,$|0,k[ba>>2]|0)|0;da=B;B=0;if(da&1){T=97;break}B=0;da=Ia(40,ca|0,149175,1)|0;ca=B;B=0;if(ca&1){T=97;break}B=0;ca=ya(427,k[ba>>2]|0)|0;ba=B;B=0;if(ba&1){T=97;break}ba=Lta(ca)|0;B=0;ea=Ia(40,da|0,ca|0,ba|0)|0;ba=B;B=0;if(ba&1){T=97;break}B=0;Ia(40,ea|0,149177,1)|0;ea=B;B=0;if(ea&1){T=97;break}B=0;wa(510,j|0,P|0);ea=B;B=0;if(ea&1){T=97;break}B=0;ya(424,j|0)|0;ea=B;B=0;if(ea&1){ea=Rb()|0;ba=Q;Yua(j);fa=ba;ga=ea;break}Yua(j);k[h>>2]=27468;k[U>>2]=27488;k[P>>2]=27560;Yua(S);Ava(P);vva(U);ea=l+56|0;ba=l+4|0;k[l>>2]=27524;k[ea>>2]=27544;B=0;wa(508,l+56|0,ba|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ha=Q;ia=ca;vva(ea);Qb(ia|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[ea>>2]=27488;B=0;va(448,ba|0);ca=B;B=0;do if(ca&1){da=Rb()|0;ja=Q;ka=da}else{k[ba>>2]=27560;da=l+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(c);Yua(da);Ava(ba);ja=ma;ka=la;break}Yua(c);B=0;la=Ia(40,l|0,120091,18)|0;ma=B;B=0;do if(ma&1)T=100;else{na=a+24|0;B=0;oa=Xa(242,la|0,k[na>>2]|0)|0;pa=B;B=0;if(pa&1){T=100;break}B=0;pa=Ia(40,oa|0,149175,1)|0;oa=B;B=0;if(oa&1){T=100;break}B=0;oa=ya(427,k[na>>2]|0)|0;na=B;B=0;if(na&1){T=100;break}na=Lta(oa)|0;B=0;qa=Ia(40,pa|0,oa|0,na|0)|0;na=B;B=0;if(na&1){T=100;break}B=0;Ia(40,qa|0,149177,1)|0;qa=B;B=0;if(qa&1){T=100;break}B=0;wa(510,m|0,ba|0);qa=B;B=0;if(qa&1){T=100;break}B=0;ya(424,m|0)|0;qa=B;B=0;if(qa&1){qa=Rb()|0;na=Q;Yua(m);ra=na;sa=qa;break}Yua(m);k[l>>2]=27468;k[ea>>2]=27488;k[ba>>2]=27560;Yua(da);Ava(ba);vva(ea);qa=n+56|0;na=n+4|0;k[n>>2]=27524;k[qa>>2]=27544;B=0;wa(508,n+56|0,na|0);oa=B;B=0;if(oa&1){oa=Rb()|0;ta=Q;ua=oa;vva(qa);Qb(ua|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[qa>>2]=27488;B=0;va(448,na|0);oa=B;B=0;do if(oa&1){pa=Rb()|0;xa=Q;za=pa}else{k[na>>2]=27560;pa=n+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Yua(c);Yua(pa);Ava(na);xa=Ba;za=Aa;break}Yua(c);B=0;Aa=Ia(40,n|0,120110,23)|0;Ba=B;B=0;do if(Ba&1)T=103;else{Ca=k[a+28>>2]|0;Da=Lta(Ca)|0;B=0;Ea=Ia(40,Aa|0,Ca|0,Da|0)|0;Da=B;B=0;if(Da&1){T=103;break}B=0;Ia(40,Ea|0,149177,1)|0;Ea=B;B=0;if(Ea&1){T=103;break}B=0;wa(510,o|0,na|0);Ea=B;B=0;if(Ea&1){T=103;break}B=0;ya(424,o|0)|0;Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Da=Q;Yua(o);Fa=Da;Ga=Ea;break}Yua(o);k[n>>2]=27468;k[qa>>2]=27488;k[na>>2]=27560;Yua(pa);Ava(na);vva(qa);Ea=p+56|0;Da=p+4|0;k[p>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,p+56|0,Da|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ha=Q;Ja=Ca;vva(Ea);Qb(Ja|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Da|0);Ca=B;B=0;do if(Ca&1){Ka=Rb()|0;La=Q;Ma=Ka}else{k[Da>>2]=27560;Ka=p+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Da|0,c|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Oa=Q;Yua(c);Yua(Ka);Ava(Da);La=Oa;Ma=Na;break}Yua(c);B=0;Na=Ia(40,p|0,120134,11)|0;Oa=B;B=0;do if(!(Oa&1)){B=0;Pa=Xa(247,Na|0,(i[a+32>>0]|0)!=0|0)|0;Qa=B;B=0;if(Qa&1){T=106;break}B=0;Ia(40,Pa|0,149177,1)|0;Pa=B;B=0;if(Pa&1){T=106;break}B=0;wa(510,q|0,Da|0);Pa=B;B=0;if(Pa&1){T=106;break}B=0;ya(424,q|0)|0;Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Yua(q);Ra=Qa;Sa=Pa;break}else{Yua(q);k[p>>2]=27468;k[Ea>>2]=27488;k[Da>>2]=27560;Yua(Ka);Ava(Da);vva(Ea);r=b;return}}else T=106;while(0);if((T|0)==106){Na=Rb()|0;Ra=Q;Sa=Na}k[p>>2]=27468;k[Ea>>2]=27488;k[Da>>2]=27560;Yua(Ka);Ava(Da);vva(Ea);Ta=Ra;Ua=Sa;Qb(Ua|0)}while(0);Ha=La;Ja=Ma;vva(Ea);Qb(Ja|0)}while(0);if((T|0)==103){Aa=Rb()|0;Fa=Q;Ga=Aa}k[n>>2]=27468;k[qa>>2]=27488;k[na>>2]=27560;Yua(pa);Ava(na);vva(qa);Ta=Fa;Ua=Ga;Qb(Ua|0)}while(0);ta=xa;ua=za;vva(qa);Qb(ua|0)}while(0);if((T|0)==100){la=Rb()|0;ra=Q;sa=la}k[l>>2]=27468;k[ea>>2]=27488;k[ba>>2]=27560;Yua(da);Ava(ba);vva(ea);Ta=ra;Ua=sa;Qb(Ua|0)}while(0);ha=ja;ia=ka;vva(ea);Qb(ia|0)}while(0);if((T|0)==97){$=Rb()|0;fa=Q;ga=$}k[h>>2]=27468;k[U>>2]=27488;k[P>>2]=27560;Yua(S);Ava(P);vva(U);Ta=fa;Ua=ga;Qb(Ua|0)}while(0);X=Z;Y=_;vva(U);Qb(Y|0)}else T=94;while(0);if((T|0)==94){N=Rb()|0;V=Q;W=N}k[f>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(F);Ta=V;Ua=W;Qb(Ua|0)}while(0);I=L;J=M;vva(F);Qb(J|0)}else T=91;while(0);if((T|0)==91){A=Rb()|0;G=Q;H=A}k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Ta=G;Ua=H;Qb(Ua|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function k2(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function l2(a){a=a|0;return -1}function m2(a){a=a|0;return 652}function n2(a){a=a|0;var b=0,c=0;b=Qqa(56)|0;B=0;Ka(12,b|0,k[a+12>>2]|0,k[a+8>>2]|0,k[a+16>>2]|0,k[a+20>>2]|0,k[a+28>>2]|0,(i[a+32>>0]|0)!=0|0,k[a+24>>2]|0);c=B;B=0;if(c&1){c=Rb()|0;Sqa(b);Qb(c|0)}else{p[b+40>>3]=+p[a+40>>3];k[b+48>>2]=k[a+48>>2];return b|0}return 0}function o2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,119962,95);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,107,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function p2(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function q2(a){a=a|0;return k[a+8>>2]|0}function r2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0.0,A=0.0;c=r;r=r+64|0;d=c+56|0;e=c+48|0;f=c+40|0;g=c+32|0;h=c+24|0;j=c+16|0;l=c+8|0;m=c;n=b+44|0;dO(k[n>>2]|0,e,354);dO(k[n>>2]|0,f,355);dO(k[n>>2]|0,d,767);dO(k[n>>2]|0,g,358);if(!(i[a+32>>0]|0)){n=a+48|0;if(!(k[n>>2]|0)){o=+P2(b,k[a+16>>2]|0);q=qh(k[b+20>>2]|0,0)|0;s=Wo(q,k[a+20>>2]|0)|0;Fc[k[(k[s>>2]|0)+64>>2]&1023](s,h);s=a+40|0;t=+p[s>>3]+ +p[g>>3]*(o-+p[h>>3]);p[s>>3]=t;o=+p[d>>3];if(o==+p[f>>3])k[n>>2]=1;u=t/(o-+p[e>>3])}else u=+p[a+40>>3]/(+p[d>>3]-+p[e>>3]);v=u;r=c;return +v}p[h>>3]=0.0;p[j>>3]=0.0;p[l>>3]=0.0;n=a+48|0;if(!(k[n>>2]|0)){s=b+20|0;if((th(k[s>>2]|0)|0)>0){b=a+16|0;q=a+20|0;w=a+24|0;x=0;do{y=qh(k[s>>2]|0,x)|0;u=+Vc[k[(k[y>>2]|0)+296>>2]&7](y,k[b>>2]|0,k[q>>2]|0,k[w>>2]|0);p[h>>3]=u+ +p[h>>3];u=+id[k[(k[y>>2]|0)+300>>2]&63](y,k[w>>2]|0);p[l>>3]=u+ +p[l>>3];x=x+1|0}while((x|0)<(th(k[s>>2]|0)|0))}fZ(h,j,1,2,4,uY()|0)|0;fZ(l,m,1,2,4,uY()|0)|0;u=+p[m>>3];p[l>>3]=u;o=+p[j>>3];if(u!=0.0)z=o/u;else z=o;p[h>>3]=z;h=a+40|0;o=+p[h>>3]+z*+p[g>>3];p[h>>3]=o;z=+p[d>>3];if(z==+p[f>>3])k[n>>2]=1;A=o/(z-+p[e>>3])}else A=+p[a+40>>3]/(+p[d>>3]-+p[e>>3]);v=A;r=c;return +v}function s2(a){a=a|0;var b=0,c=0;k[a+-4>>2]=37464;k[a>>2]=37516;b=a+8|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+24|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}p[a+36>>3]=0.0;k[a+44>>2]=0;return}function t2(a){a=a|0;var b=0,c=0,d=0;b=a+-4|0;k[b>>2]=37464;k[a>>2]=37516;c=a+8|0;d=k[c>>2]|0;if(d){Tqa(d);k[c>>2]=0}c=k[a+24>>2]|0;if(!c){Sqa(b);return}Tqa(c);Sqa(b);return}function u2(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function v2(a){a=a|0;return k[a+4>>2]|0}function w2(a,b){a=a|0;b=b|0;return +(+r2(a+-4|0,b))}function x2(a){a=a|0;var b=0,c=0;k[a>>2]=37544;k[a+4>>2]=37596;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+36|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function y2(a){a=a|0;x2(a);Sqa(a);return}function z2(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,120258,17)|0;x=B;B=0;do if(((((!(x&1)?(y=k[a+12>>2]|0,z=Lta(y)|0,B=0,A=Ia(40,w|0,y|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,A|0,149175,1)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Xa(242,z|0,k[a+8>>2]|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Ia(40,A|0,149177,1)|0,A=B,B=0,!(A&1)):0)?(B=0,wa(510,e|0,n|0),A=B,B=0,!(A&1)):0){B=0;ya(424,e|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(e);C=z;D=A;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);A=f+56|0;z=f+4|0;k[f>>2]=27524;k[A>>2]=27544;B=0;wa(508,f+56|0,z|0);y=B;B=0;if(y&1){y=Rb()|0;E=Q;F=y;vva(A);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[A>>2]=27488;B=0;va(448,z|0);y=B;B=0;do if(y&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,120276,17)|0;K=B;B=0;do if((!(K&1)?(L=a+16|0,B=0,M=Xa(242,J|0,k[L>>2]|0)|0,N=B,B=0,!(N&1)):0)?(B=0,Ia(40,M|0,149177,1)|0,M=B,B=0,!(M&1)):0){B=0;wa(510,g|0,z|0);M=B;B=0;if(M&1){O=46;break}B=0;ya(424,g|0)|0;M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(g);P=N;R=M;break}Yua(g);k[f>>2]=27468;k[A>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(A);if(!(k[L>>2]|0)){r=b;return}M=h+56|0;N=h+4|0;k[h>>2]=27524;k[M>>2]=27544;B=0;wa(508,h+56|0,N|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;U=S;vva(M);Qb(U|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[M>>2]=27488;B=0;va(448,N|0);S=B;B=0;do if(S&1){V=Rb()|0;W=Q;X=V}else{k[N>>2]=27560;V=h+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(c);Yua(V);Ava(N);W=Z;X=Y;break}Yua(c);B=0;Ia(40,h|0,120294,28)|0;Y=B;B=0;do if(!(Y&1)){B=0;wa(510,i|0,N|0);Z=B;B=0;if(Z&1){O=49;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(i);$=_;aa=Z;break}Yua(i);k[h>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(V);Ava(N);vva(M);if((k[L>>2]|0)<=0){r=b;return}Z=j+56|0;_=j+4|0;ba=j+56|0;ca=j+128|0;da=j+132|0;ea=j+36|0;fa=j+52|0;ga=a+36|0;ha=a+20|0;ia=a+24|0;ja=a+28|0;ka=a+32|0;la=0;while(1){k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,ba|0,_|0);ma=B;B=0;if(ma&1){O=56;break}k[ca>>2]=0;k[da>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ma=B;B=0;if(ma&1){O=57;break}k[_>>2]=27560;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[fa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ma=B;B=0;if(ma&1){O=55;break}Yua(c);B=0;ma=Xa(242,j|0,k[(k[ga>>2]|0)+(la<<2)>>2]|0)|0;na=B;B=0;if(na&1){O=73;break}B=0;na=Ia(40,ma|0,149175,1)|0;ma=B;B=0;if(ma&1){O=73;break}B=0;ma=Sa(1,na|0,+(+p[(k[ha>>2]|0)+(la<<3)>>3]))|0;na=B;B=0;if(na&1){O=73;break}B=0;na=Ia(40,ma|0,149175,1)|0;ma=B;B=0;if(ma&1){O=73;break}B=0;ma=Sa(1,na|0,+(+p[(k[ia>>2]|0)+(la<<3)>>3]))|0;na=B;B=0;if(na&1){O=73;break}B=0;na=Ia(40,ma|0,149175,1)|0;ma=B;B=0;if(ma&1){O=73;break}B=0;ma=Sa(1,na|0,+(+p[(k[ja>>2]|0)+(la<<3)>>3]))|0;na=B;B=0;if(na&1){O=73;break}B=0;na=Ia(40,ma|0,149175,1)|0;ma=B;B=0;if(ma&1){O=73;break}B=0;ma=Sa(1,na|0,+(+p[(k[ka>>2]|0)+(la<<3)>>3]))|0;na=B;B=0;if(na&1){O=73;break}B=0;Ia(40,ma|0,149177,1)|0;ma=B;B=0;if(ma&1){O=73;break}B=0;wa(510,l|0,_|0);ma=B;B=0;if(ma&1){O=73;break}B=0;ya(424,l|0)|0;ma=B;B=0;if(ma&1){O=74;break}Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);la=la+1|0;if((la|0)>=(k[L>>2]|0)){O=76;break}}if((O|0)==55){la=Rb()|0;ka=Q;Yua(c);Yua(ea);Ava(_);oa=ka;pa=la;O=58}else if((O|0)==56){la=Rb()|0;qa=Q;ra=la;vva(Z);Qb(ra|0)}else if((O|0)==57){la=Rb()|0;oa=Q;pa=la;O=58}else if((O|0)==73){la=Rb()|0;sa=Q;ta=la;O=75}else if((O|0)==74){la=Rb()|0;ka=Q;Yua(l);sa=ka;ta=la;O=75}else if((O|0)==76){r=b;return}if((O|0)==58){qa=oa;ra=pa;vva(Z);Qb(ra|0)}else if((O|0)==75){k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);ua=sa;xa=ta;Qb(xa|0)}}else O=49;while(0);if((O|0)==49){Y=Rb()|0;$=Q;aa=Y}k[h>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(V);Ava(N);vva(M);ua=$;xa=aa;Qb(xa|0)}while(0);T=W;U=X;vva(M);Qb(U|0)}else O=46;while(0);if((O|0)==46){J=Rb()|0;P=Q;R=J}k[f>>2]=27468;k[A>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(A);ua=P;xa=R;Qb(xa|0)}while(0);E=H;F=I;vva(A);Qb(F|0)}else O=43;while(0);if((O|0)==43){w=Rb()|0;C=Q;D=w}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);ua=C;xa=D;Qb(xa|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}function A2(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function B2(a){a=a|0;return -1}function C2(a){a=a|0;return 871}function D2(a){a=a|0;var b=0;b=Qqa(40)|0;B=0;Va(1,b|0,k[a+12>>2]|0,k[a+8>>2]|0,k[a+16>>2]|0,k[a+20>>2]|0,k[a+24>>2]|0,k[a+28>>2]|0,k[a+32>>2]|0,k[a+36>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function E2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,120154,103);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,124,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function F2(a){a=a|0;var b=0,c=0;b=k[a+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function G2(a){a=a|0;return k[a+8>>2]|0}function H2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;p[e>>3]=0.0;f=a+16|0;if((k[f>>2]|0)<=0){g=uY()|0;fZ(d,e,1,2,4,g)|0;h=+p[e>>3];r=c;return +h}i=b+20|0;b=a+36|0;j=a+20|0;l=a+24|0;m=a+28|0;n=a+32|0;o=0.0;a=0;while(1){a:do if((th(k[i>>2]|0)|0)>0){q=0;while(1){s=qh(k[i>>2]|0,q)|0;t=Hc[k[(k[s>>2]|0)+16>>2]&511](s)|0;q=q+1|0;if((t|0)==(k[(k[b>>2]|0)+(a<<2)>>2]|0)){u=s;v=s;w=t;break}if((q|0)>=(th(k[i>>2]|0)|0)){x=o;break a}}y=+Mc[k[(k[u>>2]|0)+288>>2]&7](v,+p[(k[j>>2]|0)+(a<<3)>>3],+p[(k[l>>2]|0)+(a<<3)>>3],+p[(k[m>>2]|0)+(a<<3)>>3],+p[(k[n>>2]|0)+(a<<3)>>3],w)+o;p[d>>3]=y;x=y}else x=o;while(0);a=a+1|0;if((a|0)>=(k[f>>2]|0))break;else o=x}g=uY()|0;fZ(d,e,1,2,4,g)|0;h=+p[e>>3];r=c;return +h}function I2(a){a=a|0;x2(a+-4|0);return}function J2(a){a=a|0;var b=0;b=a+-4|0;x2(b);Sqa(b);return}function K2(a){a=a|0;var b=0,c=0;b=k[a+-4+12>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function L2(a){a=a|0;return k[a+-4+8>>2]|0}function M2(a,b){a=a|0;b=b|0;return +(+H2(a+-4|0,b))}function N2(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0;k[a>>2]=37544;k[a+4>>2]=37596;k[a+8>>2]=c;c=Rqa((Lta(b)|0)+1|0)|0;k[a+12>>2]=c;j=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(j)TEa(c|0,b|0,j|0)|0;k[a+16>>2]=d;if(!d)return;j=d>>>0>536870911?-1:d<<3;b=Rqa(j)|0;k[a+20>>2]=b;if(!e)yb(142353,118972,137,142345);TEa(b|0,e|0,d<<3|0)|0;e=Rqa(j)|0;k[a+24>>2]=e;if(!f)yb(142353,118972,137,142345);TEa(e|0,f|0,d<<3|0)|0;f=Rqa(j)|0;k[a+28>>2]=f;if(!g)yb(142353,118972,137,142345);TEa(f|0,g|0,d<<3|0)|0;g=Rqa(j)|0;k[a+32>>2]=g;if(!h)yb(142353,118972,137,142345);TEa(g|0,h|0,d<<3|0)|0;h=Rqa(d>>>0>1073741823?-1:d<<2)|0;k[a+36>>2]=h;if(!i)yb(142353,118972,137,142345);TEa(h|0,i|0,d<<2|0)|0;return}function O2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=(nO(k[a+44>>2]|0,769)|0)+8|0;j=k[i>>2]|0;a:do if((th(j)|0)>0){i=0;while(1){l=qh(j,i)|0;if(!l)m=0;else m=ura(l,168,1336,-2)|0;l=Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0;if(!(Ita(l,b)|0)){n=m;o=l;break}if(l)Tqa(l);i=i+1|0;if((i|0)>=(th(j)|0))break a}p=+id[k[(k[n>>2]|0)+16>>2]&63](n,a);if(!o){r=c;return +p}Tqa(o);r=c;return +p}while(0);c=e+56|0;o=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,o|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;s=a;vva(c);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,o|0);a=B;B=0;do if(a&1){n=Rb()|0;t=Q;u=n}else{k[o>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;Yua(d);Yua(n);Ava(o);t=m;u=j;break}Yua(d);B=0;j=Ia(40,e|0,120343,50)|0;m=B;B=0;if(((!(m&1)?(m=Lta(b)|0,B=0,i=Ia(40,j|0,b|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,i|0,120394,46)|0,i=B,B=0,!(i&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,f|0,120441,112);i=B;B=0;do if(!(i&1)){B=0;eb(502,g|0,120554,26);j=B;B=0;if(j&1){j=Rb()|0;l=Q;Yua(f);v=l;w=j;break}B=0;wa(510,h|0,o|0);j=B;B=0;if(j&1){j=Rb()|0;x=Q;y=j;z=1}else{B=0;ua(163,m|0,f|0,g|0,37,h|0);j=B;B=0;if(j&1)A=1;else{B=0;eb(503,m|0,1240,229);B=0;A=0}j=Rb()|0;l=Q;Yua(h);x=l;y=j;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(c);Qb(D|0)}}else{j=Rb()|0;v=Q;w=j}while(0);zb(m|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(c);Qb(D|0)}i=Rb()|0;C=Q;D=i;k[e>>2]=27468;k[c>>2]=27488;k[o>>2]=27560;Yua(n);Ava(o);vva(c);Qb(D|0)}while(0);q=t;s=u;vva(c);Qb(s|0);return +(0.0)}function P2(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=(nO(k[a+44>>2]|0,769)|0)+8|0;j=k[i>>2]|0;a:do if((th(j)|0)>0){i=0;while(1){l=qh(j,i)|0;if(!l)m=0;else m=ura(l,168,1336,-2)|0;i=i+1|0;if((Hc[k[(k[m>>2]|0)+12>>2]&511](m)|0)==(b|0)){n=m;break}if((i|0)>=(th(j)|0))break a}o=+id[k[(k[n>>2]|0)+16>>2]&63](n,a);r=c;return +o}while(0);c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);n=B;B=0;if(n&1){n=Rb()|0;p=Q;q=n;vva(c);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);n=B;B=0;do if(n&1){j=Rb()|0;s=Q;t=j}else{k[a>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;i=Q;Yua(d);Yua(j);Ava(a);s=i;t=m;break}Yua(d);B=0;m=Ia(40,e|0,120343,50)|0;i=B;B=0;if(((!(i&1)?(B=0,i=Xa(242,m|0,b|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,i|0,120394,46)|0,i=B,B=0,!(i&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,f|0,120441,112);i=B;B=0;do if(!(i&1)){B=0;eb(502,g|0,120554,26);l=B;B=0;if(l&1){l=Rb()|0;u=Q;Yua(f);v=u;w=l;break}B=0;wa(510,h|0,a|0);l=B;B=0;if(l&1){l=Rb()|0;x=Q;y=l;z=1}else{B=0;ua(163,m|0,f|0,g|0,64,h|0);l=B;B=0;if(l&1)A=1;else{B=0;eb(503,m|0,1240,229);B=0;A=0}l=Rb()|0;u=Q;Yua(h);x=u;y=l;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(c);Qb(D|0)}}else{l=Rb()|0;v=Q;w=l}while(0);zb(m|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(c);Qb(D|0)}i=Rb()|0;C=Q;D=i;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(j);Ava(a);vva(c);Qb(D|0)}while(0);p=s;q=t;vva(c);Qb(q|0);return +(0.0)}function Q2(a){a=a|0;k[a>>2]=32164;k[a>>2]=37624;k[a+12>>2]=0;return}function R2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;k[a>>2]=32164;B=0;e=B;B=0;if(e&1){e=Rb()|0;f=e;g=Q;Qb(f|0)}k[a>>2]=37624;k[a+4>>2]=b;k[a+8>>2]=d;B=0;b=Xa(251,a|0,d|0)|0;d=B;B=0;if(!(d&1)){if((b|0)<=0){k[a+12>>2]=0;return}B=0;d=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;e=B;B=0;if(!(e&1)){k[a+12>>2]=d;a=0;do{p[d+(a<<3)>>3]=+p[c+(a<<3)>>3];a=a+1|0}while((a|0)!=(b|0));return}}b=Rb()|0;f=b;g=Q;Qb(f|0)}function S2(a){a=a|0;var b=0;k[a>>2]=37624;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function T2(a){a=a|0;var b=0,c=0;k[a>>2]=37624;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;Sqa(a);return}function U2(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function V2(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(l);s=v;t=u;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;u=Ia(40,d|0,120594,14)|0;v=B;B=0;do if((((!(v&1)?(k[u+(k[(k[u>>2]|0)+-12>>2]|0)+12>>2]=25,w=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0,k[w>>2]=k[w>>2]&-177|32,B=0,w=ya(427,k[a+4>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,u|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,Ia(40,y|0,120962,2)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,l|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(e);z=x;A=y;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);y=a+8|0;a:do if((XB(a,k[y>>2]|0)|0)>0){x=f+56|0;w=f+4|0;C=f+56|0;D=f+128|0;E=f+132|0;F=f+36|0;G=f+52|0;H=a+12|0;I=0;while(1){k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,C|0,w|0);J=B;B=0;if(J&1){K=33;break}k[D>>2]=0;k[E>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);J=B;B=0;if(J&1){K=34;break}k[w>>2]=27560;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[G>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);J=B;B=0;if(J&1){K=32;break}Yua(c);B=0;J=Ia(40,f|0,149175,1)|0;L=B;B=0;if(L&1){K=42;break}B=0;Sa(1,J|0,+(+p[(k[H>>2]|0)+(I<<3)>>3]))|0;J=B;B=0;if(J&1){K=42;break}B=0;wa(510,g|0,w|0);J=B;B=0;if(J&1){K=42;break}B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){K=43;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);I=I+1|0;if((I|0)>=(XB(a,k[y>>2]|0)|0))break a}if((K|0)==32){I=Rb()|0;H=Q;Yua(c);Yua(F);Ava(w);M=H;N=I;K=35}else if((K|0)==33){I=Rb()|0;O=Q;P=I;vva(x);Qb(P|0)}else if((K|0)==34){I=Rb()|0;M=Q;N=I;K=35}else if((K|0)==42){I=Rb()|0;R=Q;S=I;K=44}else if((K|0)==43){I=Rb()|0;H=Q;Yua(g);R=H;S=I;K=44}if((K|0)==35){O=M;P=N;vva(x);Qb(P|0)}else if((K|0)==44){k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);T=R;U=S;Qb(U|0)}}while(0);y=h+56|0;I=h+4|0;k[h>>2]=27524;k[y>>2]=27544;B=0;wa(508,h+56|0,I|0);H=B;B=0;if(H&1){H=Rb()|0;V=Q;W=H;vva(y);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[y>>2]=27488;B=0;va(448,I|0);H=B;B=0;do if(H&1){G=Rb()|0;X=Q;Y=G}else{k[I>>2]=27560;G=h+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(c);Yua(G);Ava(I);X=D;Y=E;break}Yua(c);B=0;Ia(40,h|0,149198,2)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,i|0,I|0),D=B,B=0,!(D&1)):0){B=0;ya(424,i|0)|0;D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(i);Z=C;_=D;break}else{Yua(i);k[h>>2]=27468;k[y>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(y);r=b;return}}else K=48;while(0);if((K|0)==48){E=Rb()|0;Z=Q;_=E}k[h>>2]=27468;k[y>>2]=27488;k[I>>2]=27560;Yua(G);Ava(I);vva(y);T=Z;U=_;Qb(U|0)}while(0);V=X;W=Y;vva(y);Qb(W|0)}else K=26;while(0);if((K|0)==26){u=Rb()|0;z=Q;A=u}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);T=z;U=A;Qb(U|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}function W2(a){a=a|0;return -1}function X2(a){a=a|0;return 626}function Y2(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+12>>2]|0;e=k[a+8>>2]|0;k[b>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;f=a;g=Q;Sqa(b);Qb(f|0)}k[b>>2]=37624;k[b+4>>2]=c;k[b+8>>2]=e;B=0;c=Xa(251,b|0,e|0)|0;e=B;B=0;if(!(e&1)){if((c|0)<=0){k[b+12>>2]=0;return b|0}B=0;e=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;a=B;B=0;if(!(a&1)){k[b+12>>2]=e;a=0;do{p[e+(a<<3)>>3]=+p[d+(a<<3)>>3];a=a+1|0}while((a|0)!=(c|0));return b|0}}c=Rb()|0;f=c;g=Q;Sqa(b);Qb(f|0);return 0}function Z2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=114;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+8|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=a+8|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+8|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;t=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;y=v;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(t);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,120609,76);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,t|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,71,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(u);T=R;U=P;Qb(T|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=XB(a,k[w>>2]|0)|0;w=a+12|0;if((y|0)<=0){k[w>>2]=0;r=e;return}a=(k[w>>2]|0)==0;if(s){i[k[b>>2]>>0]=a&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(a){r=e;return}C=y<<3;TEa(s|0,k[w>>2]|0,C|0)|0;k[b>>2]=(k[b>>2]|0)+C;r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(a){r=e;return}k[c>>2]=d+(y<<3);r=e;return}case 1:{d=k[b>>2]|0;c=i[d>>0]|0;k[b>>2]=d+1;if(c&1){r=e;return}c=Rqa(y>>>0>536870911?-1:y<<3)|0;k[w>>2]=c;w=k[b>>2]|0;d=y<<3;TEa(c|0,w|0,d|0)|0;k[b>>2]=w+d;r=e;return}default:{e=n+56|0;d=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;V=Q;W=w;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);w=B;B=0;do if(w&1){b=Rb()|0;X=Q;Y=b}else{k[d>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(f);Yua(b);Ava(d);X=y;Y=c;break}Yua(f);B=0;c=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,c|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,o|0,120609,76);C=B;B=0;do if(!(C&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(o);Z=s;_=A;break}B=0;wa(510,q|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;$=1;aa=Q;ba=A}else{B=0;ua(163,a|0,o|0,p|0,78,q|0);A=B;B=0;if(A&1)ca=1;else{B=0;eb(503,a|0,1240,229);B=0;ca=0}A=Rb()|0;s=Q;Yua(q);$=ca;aa=s;ba=A}Yua(p);Yua(o);if($){Z=ba;_=aa}else{da=ba;ea=aa;break c}}else{A=Rb()|0;Z=A;_=Q}while(0);zb(a|0);da=Z;ea=_}else S=49;while(0);if((S|0)==49){c=Rb()|0;da=c;ea=Q}k[n>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);T=da;U=ea;Qb(T|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}}}function _2(a){a=a|0;return k[a+4>>2]|0}function $2(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+32|0;f=e;if((k[a+8>>2]|0)==736){g=Qqa(16)|0;B=0;ib(284,g|0,k[a+4>>2]|0,k[a+12>>2]|0,736);h=B;B=0;if(!(h&1)){i=g;r=e;return i|0}h=Rb()|0;j=Q;Sqa(g);l=j;m=h;Qb(m|0)}h=k[a+12>>2]|0;p[f>>3]=+p[h+(b<<3)>>3];p[f+8>>3]=+p[h+(c<<3)>>3];p[f+16>>3]=+p[h+(d<<3)>>3];d=Qqa(16)|0;B=0;ib(284,d|0,k[a+4>>2]|0,f|0,738);f=B;B=0;if(f&1){f=Rb()|0;a=Q;Sqa(d);l=a;m=f;Qb(m|0)}else{i=d;r=e;return i|0}return 0}function a3(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,120609,76);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121282,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,123,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0);return 0}function b3(a){a=a|0;return ((k[a+8>>2]|0)==736?736:738)|0}function c3(a){a=a|0;return XB(a,k[a+8>>2]|0)|0}function d3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=XB(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;e=k[a+12>>2]|0;a=ma(c,d)|0;d=0;do{p[b+(d+a<<3)>>3]=+p[e+(d<<3)>>3];d=d+1|0}while((d|0)!=(c|0));return}function e3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;if((k[a+8>>2]|0)==736){r=b;return}b=d+56|0;a=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(a);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,149721,19)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,120609,76);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,160,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(b);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(b);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(b);Qb(A|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function f3(a,b,c){a=a|0;b=b|0;c=c|0;ZB(a,b,k[a+12>>2]|0,c,k[a+8>>2]|0);return}function g3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;WB(a,b,k[a+12>>2]|0,c,d,k[a+8>>2]|0);return}function h3(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function i3(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=XB(a,k[a+8>>2]|0)|0;d=+(c|0);if((c|0)<=0){e=0.0;f=e/d;p[b>>3]=f;return}g=k[a+12>>2]|0;a=0;h=0.0;while(1){i=h+ +p[g+(a<<3)>>3];a=a+1|0;if((a|0)==(c|0)){e=i;break}else h=i}f=e/d;p[b>>3]=f;return}function j3(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=XB(a,k[a+8>>2]|0)|0;d=k[a+12>>2]|0;e=+p[d>>3];f=e*e;if((c|0)>1){g=1;h=f}else{i=f;p[b>>3]=i;return}while(1){f=+p[d+(g<<3)>>3];e=f*f;f=e<h?e:h;g=g+1|0;if((g|0)==(c|0)){i=f;break}else h=f}p[b>>3]=i;return}function k3(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=XB(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;if(+p[e>>3]<b)p[e>>3]=b;a=a+1|0}while((a|0)!=(c|0));return}function l3(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0;b=XB(a,k[a+8>>2]|0)|0;if((b|0)<=0){c=0.0;return +c}d=k[a+12>>2]|0;a=0;e=0.0;while(1){f=+$(+(+p[d+(a<<3)>>3]));g=f>e?f:e;a=a+1|0;if((a|0)==(b|0)){c=g;break}else e=g}return +c}function m3(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=XB(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function n3(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=XB(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function o3(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=XB(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function p3(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=XB(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function q3(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=XB(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;p[e>>3]=+p[e>>3]*b;a=a+1|0}while((a|0)!=(c|0));return}function r3(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=a+8|0;q=XB(a,k[o>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)==559)s=k[b+12>>2]|0;else s=b;if((Hc[k[(k[s>>2]|0)+20>>2]&511](s)|0)!=626){b=f+56|0;t=f+4|0;k[f>>2]=27524;k[b>>2]=27544;B=0;wa(508,f+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(b);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[b>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(t);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,121046,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[s>>2]|0)+20>>2]|0,s|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,g|0,120609,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,121097,4);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(g);H=E;I=G;break}B=0;wa(510,i|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,g|0,h|0,288,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(i);J=E;K=G;L=M}Yua(h);Yua(g);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=22;while(0);if((P|0)==22){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[b>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(b);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(b);Qb(w|0)}w=s+8|0;if((k[w>>2]|0)==(k[o>>2]|0)){if((q|0)<=0){r=d;return}o=k[a+12>>2]|0;a=k[s+12>>2]|0;s=0;do{b=o+(s<<3)|0;p[b>>3]=+p[b>>3]+ +p[a+(s<<3)>>3]*c;s=s+1|0}while((s|0)!=(q|0));r=d;return}d=j+56|0;q=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;T=Q;U=s;vva(d);Qb(U|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){a=Rb()|0;V=Q;W=a}else{k[q>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;b=Q;Yua(e);Yua(a);Ava(q);V=b;W=o;break}Yua(e);B=0;o=Ia(40,j|0,121046,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,z=ya(427,k[w>>2]|0)|0,y=B,B=0,!(y&1)):0)?(y=Lta(z)|0,B=0,v=Ia(40,o|0,z|0,y|0)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,l|0,120609,76);y=B;B=0;do if(!(y&1)){B=0;eb(502,m|0,121097,4);z=B;B=0;if(z&1){z=Rb()|0;N=Q;Yua(l);X=z;Y=N;break}B=0;wa(510,n|0,q|0);N=B;B=0;if(N&1){N=Rb()|0;Z=1;_=Q;$=N}else{B=0;ua(163,v|0,l|0,m|0,290,n|0);N=B;B=0;if(N&1)aa=1;else{B=0;eb(503,v|0,1240,229);B=0;aa=0}N=Rb()|0;z=Q;Yua(n);Z=aa;_=z;$=N}Yua(m);Yua(l);if(Z){X=$;Y=_}else{ba=_;ca=$;break b}}else{N=Rb()|0;X=N;Y=Q}while(0);zb(v|0);ba=Y;ca=X}else P=50;while(0);if((P|0)==50){o=Rb()|0;ba=Q;ca=o}k[j>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(a);Ava(q);vva(d);R=ba;S=ca;Qb(S|0)}while(0);T=V;U=W;vva(d);Qb(U|0)}function s3(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0.0,f=0,g=0,h=0,i=0;d=XB(a,k[a+8>>2]|0)|0;e=+$(+b);p[t>>3]=e;f=k[t+4>>2]|0;g=(d|0)>0;if((f>>>0<2146435072|(f|0)==2146435072&(k[t>>2]|0)>>>0<1)&g){f=k[a+12>>2]|0;h=0;do{i=f+(h<<3)|0;if(+p[i>>3]<b)p[i>>3]=b;h=h+1|0}while((h|0)!=(d|0))}b=+$(+c);p[t>>3]=b;h=k[t+4>>2]|0;if(!((h>>>0<2146435072|(h|0)==2146435072&(k[t>>2]|0)>>>0<1)&g))return;g=k[a+12>>2]|0;a=0;do{h=g+(a<<3)|0;if(+p[h>>3]>c)p[h>>3]=c;a=a+1|0}while((a|0)!=(d|0));return}function t3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=a+8|0;if((k[i>>2]|0)==738){j=k[a+12>>2]|0;if((b|0)==-1){p[j+24>>3]=+p[j>>3];p[j+32>>3]=+p[j+8>>3];p[j+40>>3]=+p[j+16>>3];r=c;return}else{p[j>>3]=+p[j+24>>3];p[j+8>>3]=+p[j+32>>3];p[j+16>>3]=+p[j+40>>3];r=c;return}}c=e+56|0;j=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,j|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[j>>2]=27560;a=e+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,j|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(a);Ava(j);n=s;o=q;break}Yua(d);B=0;q=Ia(40,e|0,120686,27)|0;s=B;B=0;if(((!(s&1)?(B=0,s=ya(427,k[i>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,f|0,120609,76);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,121296,7);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,j|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,u|0,f|0,g|0,319,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,u|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(u|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(D|0)}t=Rb()|0;C=Q;D=t;k[e>>2]=27468;k[c>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(c);Qb(D|0)}while(0);l=n;m=o;vva(c);Qb(m|0)}function u3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=r;r=r+368|0;d=c+352|0;e=c;f=c+216|0;g=c+204|0;h=c+192|0;i=c+44|0;j=c+56|0;l=c+32|0;m=c+20|0;n=c+8|0;if((Hc[k[(k[b>>2]|0)+32>>2]&511](b)|0)!=353){o=f+56|0;q=f+4|0;k[f>>2]=27524;k[o>>2]=27544;B=0;wa(508,f+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=f+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,q|0,d|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(d);Yua(v);Ava(q);w=z;x=y;break}Yua(d);B=0;y=Ia(40,f|0,120714,48)|0;z=B;B=0;a:do if(((((!(z&1)?(B=0,A=ya(k[(k[b>>2]|0)+32>>2]|0,b|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=ya(427,A|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(C)|0,B=0,D=Ia(40,y|0,C|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,D|0,141170,1)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,g|0,120609,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,121304,19);C=B;B=0;if(C&1){C=Rb()|0;E=Q;Yua(g);F=C;G=E;break}B=0;wa(510,i|0,q|0);E=B;B=0;if(E&1){E=Rb()|0;H=E;I=Q;J=1}else{B=0;ua(163,A|0,g|0,h|0,329,i|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}E=Rb()|0;C=Q;Yua(i);H=E;I=C;J=K}Yua(h);Yua(g);if(J){F=H;G=I}else{L=H;M=I;break a}}else{C=Rb()|0;F=C;G=Q}while(0);zb(A|0);L=F;M=G}else N=21;while(0);if((N|0)==21){y=Rb()|0;L=y;M=Q}k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);O=L;P=M;Qb(O|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}u=a+8|0;switch(k[u>>2]|0){case 742:case 740:case 738:{k[u>>2]=738;o=Qqa(72)|0;B=0;va(493,o|0);x=B;B=0;if(!(x&1)){x=a+12|0;Fc[k[(k[o>>2]|0)+28>>2]&1023](o,0);nd[k[(k[b>>2]|0)+48>>2]&1023](b,e,o);a=k[x>>2]|0;w=a+24|0;R=+p[e>>3]*((+p[a>>3]+ +p[w>>3])*.5);p[a>>3]=R;p[w>>3]=R;Fc[k[(k[o>>2]|0)+28>>2]&1023](o,1);nd[k[(k[b>>2]|0)+48>>2]&1023](b,e,o);w=k[x>>2]|0;a=w+8|0;t=w+32|0;R=+p[e>>3]*((+p[a>>3]+ +p[t>>3])*.5);p[a>>3]=R;p[t>>3]=R;Fc[k[(k[o>>2]|0)+28>>2]&1023](o,2);nd[k[(k[b>>2]|0)+48>>2]&1023](b,e,o);b=k[x>>2]|0;x=b+16|0;t=b+40|0;R=+p[e>>3]*((+p[x>>3]+ +p[t>>3])*.5);p[x>>3]=R;p[t>>3]=R;Ec[k[(k[o>>2]|0)+4>>2]&1023](o);r=c;return}c=Rb()|0;t=Q;Sqa(o);O=c;P=t;Qb(O|0);break}default:{}}t=j+56|0;c=j+4|0;k[j>>2]=27524;k[t>>2]=27544;B=0;wa(508,j+56|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;S=Q;T=o;vva(t);Qb(T|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[t>>2]=27488;B=0;va(448,c|0);o=B;B=0;do if(o&1){x=Rb()|0;U=Q;V=x}else{k[c>>2]=27560;x=j+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);e=B;B=0;if(e&1){e=Rb()|0;b=Q;Yua(d);Yua(x);Ava(c);U=b;V=e;break}Yua(d);B=0;e=Ia(40,j|0,120686,27)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,a=ya(427,k[u>>2]|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(a)|0,B=0,M=Ia(40,e|0,a|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,l|0,120609,76);w=B;B=0;do if(!(w&1)){B=0;eb(502,m|0,121304,19);a=B;B=0;if(a&1){a=Rb()|0;L=Q;Yua(l);W=L;X=a;break}B=0;wa(510,n|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;Y=1;Z=a;_=Q}else{B=0;ua(163,M|0,l|0,m|0,349,n|0);a=B;B=0;if(a&1)$=1;else{B=0;eb(503,M|0,1240,229);B=0;$=0}a=Rb()|0;L=Q;Yua(n);Y=$;Z=a;_=L}Yua(m);Yua(l);if(Y){W=_;X=Z}else{aa=Z;ba=_;break b}}else{L=Rb()|0;W=Q;X=L}while(0);zb(M|0);aa=X;ba=W}else N=50;while(0);if((N|0)==50){e=Rb()|0;aa=e;ba=Q}k[j>>2]=27468;k[t>>2]=27488;k[c>>2]=27560;Yua(x);Ava(c);vva(t);O=aa;P=ba;Qb(O|0)}while(0);S=U;T=V;vva(t);Qb(T|0)}function v3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=XB(a,k[n>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=626){q=e+56|0;s=e+4|0;k[e>>2]=27524;k[q>>2]=27544;B=0;wa(508,e+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=e+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(d);Yua(w);Ava(s);x=A;y=z;break}Yua(d);B=0;z=Ia(40,e|0,121102,50)|0;A=B;B=0;a:do if((((!(A&1)?(B=0,C=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=ya(427,C|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(D)|0,B=0,E=Ia(40,z|0,D|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,f|0,120609,76);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,121179,15);D=B;B=0;if(D&1){D=Rb()|0;F=Q;Yua(f);G=D;H=F;break}B=0;wa(510,h|0,s|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;J=F;K=1}else{B=0;ua(163,E|0,f|0,g|0,363,h|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,E|0,1240,229);B=0;L=0}F=Rb()|0;D=Q;Yua(h);I=D;J=F;K=L}Yua(g);Yua(f);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=F;H=Q}while(0);zb(E|0);M=G;N=H}else O=20;while(0);if((O|0)==20){z=Rb()|0;M=z;N=Q}k[e>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);P=N;R=M;Qb(R|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}v=b+8|0;q=k[v>>2]|0;if((q|0)==(k[n>>2]|0)){n=Rqa(o>>>0>536870911?-1:o<<3)|0;if((o|0)>0){y=k[a+12>>2]|0;x=k[b+12>>2]|0;b=0;do{p[n+(b<<3)>>3]=+p[y+(b<<3)>>3]/+p[x+(b<<3)>>3];b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;S=a;T=Q}else{k[o>>2]=37624;k[o+4>>2]=b;k[o+8>>2]=q;B=0;b=Xa(251,o|0,q|0)|0;q=B;B=0;if(!(q&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(n);r=c;return o|0}B=0;q=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=q;TEa(q|0,n|0,b<<3|0)|0;Tqa(n);r=c;return o|0}}c=Rb()|0;S=c;T=Q}Sqa(o);P=T;R=S;Qb(R|0)}S=i+56|0;T=i+4|0;k[i>>2]=27524;k[S>>2]=27544;B=0;wa(508,i+56|0,T|0);o=B;B=0;if(o&1){o=Rb()|0;U=Q;V=o;vva(S);Qb(V|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);o=B;B=0;do if(o&1){c=Rb()|0;W=Q;X=c}else{k[T>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,T|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;b=Q;Yua(d);Yua(c);Ava(T);W=b;X=n;break}Yua(d);B=0;n=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,q=ya(427,k[v>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(q)|0,B=0,x=Ia(40,n|0,q|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,j|0,120609,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121179,15);q=B;B=0;if(q&1){q=Rb()|0;y=Q;Yua(j);Y=q;Z=y;break}B=0;wa(510,m|0,T|0);y=B;B=0;if(y&1){y=Rb()|0;_=1;$=Q;aa=y}else{B=0;ua(163,x|0,j|0,l|0,365,m|0);y=B;B=0;if(y&1)ba=1;else{B=0;eb(503,x|0,1240,229);B=0;ba=0}y=Rb()|0;q=Q;Yua(m);_=ba;$=q;aa=y}Yua(l);Yua(j);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{y=Rb()|0;Y=y;Z=Q}while(0);zb(x|0);ca=Z;da=Y}else O=46;while(0);if((O|0)==46){n=Rb()|0;ca=Q;da=n}k[i>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(c);Ava(T);vva(S);P=ca;R=da;Qb(R|0)}while(0);U=W;V=X;vva(S);Qb(V|0);return 0}function w3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=XB(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=626){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,120609,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121153,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,397,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T>U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=37624;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(251,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,120609,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121153,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,399,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function x3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=XB(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=626){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,120609,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121166,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,427,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T<U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=37624;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(251,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,120609,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121166,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,429,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function y3(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!(k[b>>2]|0))return;d=k[k[b+4>>2]>>2]|0;Dc[k[(k[d>>2]|0)+16>>2]&255](d,6,c,k[a+12>>2]|0,0);return}function z3(a,b){a=a|0;b=b|0;return}function A3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,120787,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,50,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function B3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,120787,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function C3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,120787,86);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,54,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function D3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,120787,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function E3(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,120787,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,58,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function F3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,120787,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function G3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,120787,86);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,60,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function H3(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,120787,86);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,64,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function I3(a){a=a|0;return 1}function J3(a){a=a|0;k[a>>2]=32164;k[a>>2]=37816;k[a+12>>2]=0;return}function K3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;k[a>>2]=32164;B=0;e=B;B=0;if(e&1){e=Rb()|0;f=e;g=Q;Qb(f|0)}k[a>>2]=37816;k[a+4>>2]=b;k[a+8>>2]=d;B=0;b=Xa(252,a|0,d|0)|0;d=B;B=0;if(!(d&1)){if((b|0)<=0){k[a+12>>2]=0;return}B=0;d=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;e=B;B=0;if(!(e&1)){k[a+12>>2]=d;a=0;do{p[d+(a<<3)>>3]=+p[c+(a<<3)>>3];a=a+1|0}while((a|0)!=(b|0));return}}b=Rb()|0;f=b;g=Q;Qb(f|0)}function L3(a){a=a|0;var b=0;k[a>>2]=37816;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function M3(a){a=a|0;var b=0,c=0;k[a>>2]=37816;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;Sqa(a);return}function N3(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function O3(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(l);s=v;t=u;break}Yua(c);k[d+(k[(k[d>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;u=Ia(40,d|0,120947,14)|0;v=B;B=0;do if((((!(v&1)?(k[u+(k[(k[u>>2]|0)+-12>>2]|0)+12>>2]=25,w=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0,k[w>>2]=k[w>>2]&-177|32,B=0,w=ya(427,k[a+4>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,u|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,Ia(40,y|0,120962,2)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,l|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(e);z=x;A=y;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);y=a+8|0;a:do if((iz(a,k[y>>2]|0)|0)>0){x=f+56|0;w=f+4|0;C=f+56|0;D=f+128|0;E=f+132|0;F=f+36|0;G=f+52|0;H=a+12|0;I=0;while(1){k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,C|0,w|0);J=B;B=0;if(J&1){K=33;break}k[D>>2]=0;k[E>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);J=B;B=0;if(J&1){K=34;break}k[w>>2]=27560;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[G>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);J=B;B=0;if(J&1){K=32;break}Yua(c);B=0;J=Ia(40,f|0,149175,1)|0;L=B;B=0;if(L&1){K=42;break}B=0;Sa(1,J|0,+(+p[(k[H>>2]|0)+(I<<3)>>3]))|0;J=B;B=0;if(J&1){K=42;break}B=0;wa(510,g|0,w|0);J=B;B=0;if(J&1){K=42;break}B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){K=43;break}Yua(g);k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);I=I+1|0;if((I|0)>=(iz(a,k[y>>2]|0)|0))break a}if((K|0)==32){I=Rb()|0;H=Q;Yua(c);Yua(F);Ava(w);M=H;N=I;K=35}else if((K|0)==33){I=Rb()|0;O=Q;P=I;vva(x);Qb(P|0)}else if((K|0)==34){I=Rb()|0;M=Q;N=I;K=35}else if((K|0)==42){I=Rb()|0;R=Q;S=I;K=44}else if((K|0)==43){I=Rb()|0;H=Q;Yua(g);R=H;S=I;K=44}if((K|0)==35){O=M;P=N;vva(x);Qb(P|0)}else if((K|0)==44){k[f>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);T=R;U=S;Qb(U|0)}}while(0);I=h+56|0;H=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;V=Q;W=G;vva(I);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){E=Rb()|0;X=Q;Y=E}else{k[H>>2]=27560;E=h+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;C=Q;Yua(c);Yua(E);Ava(H);X=C;Y=D;break}Yua(c);B=0;D=Ia(40,h|0,120965,3)|0;C=B;B=0;do if((!(C&1)?(B=0,J=ya(427,k[y>>2]|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(J)|0,B=0,Z=Ia(40,D|0,J|0,L|0)|0,L=B,B=0,!(L&1)):0){B=0;Ia(40,Z|0,145593,2)|0;Z=B;B=0;if(Z&1){K=51;break}B=0;wa(510,i|0,H|0);Z=B;B=0;if(Z&1){K=51;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;L=Q;Yua(i);_=L;$=Z;break}else{Yua(i);k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(I);r=b;return}}else K=51;while(0);if((K|0)==51){D=Rb()|0;_=Q;$=D}k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(E);Ava(H);vva(I);T=_;U=$;Qb(U|0)}while(0);V=X;W=Y;vva(I);Qb(W|0)}else K=26;while(0);if((K|0)==26){u=Rb()|0;z=Q;A=u}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);T=z;U=A;Qb(U|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}function P3(a){a=a|0;return -1}function Q3(a){a=a|0;return 624}function R3(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=Qqa(16)|0;c=k[a+4>>2]|0;d=k[a+12>>2]|0;e=k[a+8>>2]|0;k[b>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;f=a;g=Q;Sqa(b);Qb(f|0)}k[b>>2]=37816;k[b+4>>2]=c;k[b+8>>2]=e;B=0;c=Xa(252,b|0,e|0)|0;e=B;B=0;if(!(e&1)){if((c|0)<=0){k[b+12>>2]=0;return b|0}B=0;e=ya(422,(c>>>0>536870911?-1:c<<3)|0)|0;a=B;B=0;if(!(a&1)){k[b+12>>2]=e;a=0;do{p[e+(a<<3)>>3]=+p[d+(a<<3)>>3];a=a+1|0}while((a|0)!=(c|0));return b|0}}c=Rb()|0;f=c;g=Q;Sqa(b);Qb(f|0);return 0}function S3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=112;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+8|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=a+8|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+8|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;t=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;y=v;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(t);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,120969,76);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,t|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,71,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(u);T=R;U=P;Qb(T|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=iz(a,k[w>>2]|0)|0;w=a+12|0;if((y|0)<=0){k[w>>2]=0;r=e;return}a=(k[w>>2]|0)==0;if(s){i[k[b>>2]>>0]=a&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(a){r=e;return}C=y<<3;TEa(s|0,k[w>>2]|0,C|0)|0;k[b>>2]=(k[b>>2]|0)+C;r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(a){r=e;return}k[c>>2]=d+(y<<3);r=e;return}case 1:{d=k[b>>2]|0;c=i[d>>0]|0;k[b>>2]=d+1;if(c&1){r=e;return}c=Rqa(y>>>0>536870911?-1:y<<3)|0;k[w>>2]=c;w=k[b>>2]|0;d=y<<3;TEa(c|0,w|0,d|0)|0;k[b>>2]=w+d;r=e;return}default:{e=n+56|0;d=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;V=Q;W=w;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);w=B;B=0;do if(w&1){b=Rb()|0;X=Q;Y=b}else{k[d>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(f);Yua(b);Ava(d);X=y;Y=c;break}Yua(f);B=0;c=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,c|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,o|0,120969,76);C=B;B=0;do if(!(C&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(o);Z=s;_=A;break}B=0;wa(510,q|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;$=1;aa=Q;ba=A}else{B=0;ua(163,a|0,o|0,p|0,78,q|0);A=B;B=0;if(A&1)ca=1;else{B=0;eb(503,a|0,1240,229);B=0;ca=0}A=Rb()|0;s=Q;Yua(q);$=ca;aa=s;ba=A}Yua(p);Yua(o);if($){Z=ba;_=aa}else{da=ba;ea=aa;break c}}else{A=Rb()|0;Z=A;_=Q}while(0);zb(a|0);da=Z;ea=_}else S=49;while(0);if((S|0)==49){c=Rb()|0;da=c;ea=Q}k[n>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);T=da;U=ea;Qb(T|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}}}function T3(a){a=a|0;return k[a+4>>2]|0}function U3(a){a=a|0;return ((k[a+8>>2]|0)==736?736:738)|0}function V3(a){a=a|0;return iz(a,k[a+8>>2]|0)|0}function W3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;c=iz(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;e=k[a+12>>2]|0;a=ma(c,d)|0;d=0;do{p[b+(d+a<<3)>>3]=+p[e+(d<<3)>>3];d=d+1|0}while((d|0)!=(c|0));return}function X3(a,b,c){a=a|0;b=b|0;c=c|0;kz(a,b,k[a+12>>2]|0,c,k[a+8>>2]|0);return}function Y3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;hz(a,b,k[a+12>>2]|0,c,d,k[a+8>>2]|0);return}function Z3(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function _3(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=iz(a,k[a+8>>2]|0)|0;d=+(c|0);if((c|0)<=0){e=0.0;f=e/d;p[b>>3]=f;return}g=k[a+12>>2]|0;a=0;h=0.0;while(1){i=h+ +p[g+(a<<3)>>3];a=a+1|0;if((a|0)==(c|0)){e=i;break}else h=i}f=e/d;p[b>>3]=f;return}function $3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Rqa(8)|0;f=Rqa(8)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,e);p[f>>3]=0.0;k[b>>2]=e;k[c>>2]=f;k[d>>2]=1;return}function a4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0;f=Rqa(8)|0;g=Rqa(8)|0;Fc[k[(k[a>>2]|0)+64>>2]&1023](a,f);p[g>>3]=e;k[b>>2]=f;k[c>>2]=g;k[d>>2]=1;return}function b4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+32|0;f=e;if((k[a+8>>2]|0)==736){g=Qqa(16)|0;B=0;ib(284,g|0,k[a+4>>2]|0,k[a+12>>2]|0,736);h=B;B=0;if(!(h&1)){i=g;r=e;return i|0}h=Rb()|0;j=Q;Sqa(g);l=j;m=h;Qb(m|0)}h=k[a+12>>2]|0;p[f>>3]=+p[h+(b<<3)>>3];p[f+8>>3]=+p[h+(c<<3)>>3];p[f+16>>3]=+p[h+(d<<3)>>3];d=Qqa(16)|0;B=0;ib(284,d|0,k[a+4>>2]|0,f|0,738);f=B;B=0;if(f&1){f=Rb()|0;a=Q;Sqa(d);l=a;m=f;Qb(m|0)}else{i=d;r=e;return i|0}return 0}function c4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0,h=0.0,i=0.0;c=iz(a,k[a+8>>2]|0)|0;d=k[a+12>>2]|0;e=+p[d>>3];f=e*e;if((c|0)>1){g=1;h=f}else{i=f;p[b>>3]=i;return}while(1){f=+p[d+(g<<3)>>3];e=f*f;f=e<h?e:h;g=g+1|0;if((g|0)==(c|0)){i=f;break}else h=f}p[b>>3]=i;return}function d4(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=iz(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;if(+p[e>>3]<b)p[e>>3]=b;a=a+1|0}while((a|0)!=(c|0));return}function e4(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0;b=iz(a,k[a+8>>2]|0)|0;if((b|0)<=0){c=0.0;return +c}d=k[a+12>>2]|0;a=0;e=0.0;while(1){f=+$(+(+p[d+(a<<3)>>3]));g=f>e?f:e;a=a+1|0;if((a|0)==(b|0)){c=g;break}else e=g}return +c}function f4(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=iz(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function g4(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=iz(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d>f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function h4(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=iz(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+p[c>>3];if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+p[c+(e<<3)>>3];h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function i4(a){a=a|0;var b=0,c=0,d=0.0,e=0,f=0.0,g=0.0,h=0.0;b=iz(a,k[a+8>>2]|0)|0;c=k[a+12>>2]|0;d=+$(+(+p[c>>3]));if((b|0)>1){e=1;f=d}else{g=d;return +g}while(1){d=+$(+(+p[c+(e<<3)>>3]));h=d<f?d:f;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return +g}function j4(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=iz(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{e=d+(a<<3)|0;p[e>>3]=+p[e>>3]*b;a=a+1|0}while((a|0)!=(c|0));return}function k4(a,b){a=a|0;b=+b;var c=0,d=0;c=iz(a,k[a+8>>2]|0)|0;if((c|0)<=0)return;d=k[a+12>>2]|0;a=0;do{p[d+(a<<3)>>3]=b;a=a+1|0}while((a|0)!=(c|0));return}function l4(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;o=a+8|0;q=iz(a,k[o>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=624){s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(t);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,121046,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,g|0,120969,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,h|0,121097,4);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(g);H=E;I=G;break}B=0;wa(510,i|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,g|0,h|0,313,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(i);J=E;K=G;L=M}Yua(h);Yua(g);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}if((k[b+8>>2]|0)==(k[o>>2]|0)){if((q|0)<=0){r=d;return}o=k[a+12>>2]|0;a=k[b+12>>2]|0;w=0;do{s=o+(w<<3)|0;p[s>>3]=+p[s>>3]+ +p[a+(w<<3)>>3]*c;w=w+1|0}while((w|0)!=(q|0));r=d;return}d=j+56|0;q=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,q|0);w=B;B=0;if(w&1){w=Rb()|0;T=Q;U=w;vva(d);Qb(U|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,q|0);w=B;B=0;do if(w&1){a=Rb()|0;V=Q;W=a}else{k[q>>2]=27560;a=j+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;s=Q;Yua(e);Yua(a);Ava(q);V=s;W=o;break}Yua(e);B=0;o=Ia(40,j|0,121046,50)|0;s=B;B=0;b:do if((((!(s&1)?(B=0,z=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=ya(427,z|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(y)|0,B=0,v=Ia(40,o|0,y|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,l|0,120969,76);z=B;B=0;do if(!(z&1)){B=0;eb(502,m|0,121097,4);y=B;B=0;if(y&1){y=Rb()|0;N=Q;Yua(l);X=y;Y=N;break}B=0;wa(510,n|0,q|0);N=B;B=0;if(N&1){N=Rb()|0;Z=1;_=Q;$=N}else{B=0;ua(163,v|0,l|0,m|0,315,n|0);N=B;B=0;if(N&1)aa=1;else{B=0;eb(503,v|0,1240,229);B=0;aa=0}N=Rb()|0;y=Q;Yua(n);Z=aa;_=y;$=N}Yua(m);Yua(l);if(Z){X=$;Y=_}else{ba=_;ca=$;break b}}else{N=Rb()|0;X=N;Y=Q}while(0);zb(v|0);ba=Y;ca=X}else P=49;while(0);if((P|0)==49){o=Rb()|0;ba=Q;ca=o}k[j>>2]=27468;k[d>>2]=27488;k[q>>2]=27560;Yua(a);Ava(q);vva(d);R=ba;S=ca;Qb(S|0)}while(0);T=V;U=W;vva(d);Qb(U|0)}function m4(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0.0,f=0,g=0,h=0,i=0;d=iz(a,k[a+8>>2]|0)|0;e=+$(+b);p[t>>3]=e;f=k[t+4>>2]|0;g=(d|0)>0;if((f>>>0<2146435072|(f|0)==2146435072&(k[t>>2]|0)>>>0<1)&g){f=k[a+12>>2]|0;h=0;do{i=f+(h<<3)|0;if(+p[i>>3]<b)p[i>>3]=b;h=h+1|0}while((h|0)!=(d|0))}b=+$(+c);p[t>>3]=b;h=k[t+4>>2]|0;if(!((h>>>0<2146435072|(h|0)==2146435072&(k[t>>2]|0)>>>0<1)&g))return;g=k[a+12>>2]|0;a=0;do{h=g+(a<<3)|0;if(+p[h>>3]>c)p[h>>3]=c;a=a+1|0}while((a|0)!=(d|0));return}function n4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!(k[b>>2]|0))return;d=k[k[b+4>>2]>>2]|0;Dc[k[(k[d>>2]|0)+16>>2]&255](d,4,c,k[a+12>>2]|0,0);return}function o4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=iz(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=624){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,120969,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121153,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,348,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T>U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=37816;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(252,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,120969,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121153,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,350,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function p4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=iz(a,k[n>>2]|0)|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=624){s=e+56|0;t=e+4|0;k[e>>2]=27524;k[s>>2]=27544;B=0;wa(508,e+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=e+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(d);Yua(x);Ava(t);y=C;z=A;break}Yua(d);B=0;A=Ia(40,e|0,121102,50)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=ya(427,D|0)|0,D=B,B=0,!(D&1)):0)?(D=Lta(E)|0,B=0,F=Ia(40,A|0,E|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,f|0,120969,76);D=B;B=0;do if(!(D&1)){B=0;eb(502,g|0,121166,12);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(f);H=E;I=G;break}B=0;wa(510,h|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,F|0,f|0,g|0,379,h|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,F|0,1240,229);B=0;M=0}G=Rb()|0;E=Q;Yua(h);J=E;K=G;L=M}Yua(g);Yua(f);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(F|0);N=H;O=I}else P=20;while(0);if((P|0)==20){A=Rb()|0;N=A;O=Q}k[e>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}w=b+8|0;s=k[w>>2]|0;if((s|0)==(k[n>>2]|0)){if((o|0)>0){n=k[a+12>>2]|0;z=k[b+12>>2]|0;b=0;do{T=+p[n+(b<<3)>>3];U=+p[z+(b<<3)>>3];p[q+(b<<3)>>3]=T<U?U:T;b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;V=a;W=Q}else{k[o>>2]=37816;k[o+4>>2]=b;k[o+8>>2]=s;B=0;b=Xa(252,o|0,s|0)|0;s=B;B=0;if(!(s&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(q);r=c;return o|0}B=0;s=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=s;TEa(s|0,q|0,b<<3|0)|0;Tqa(q);r=c;return o|0}}c=Rb()|0;V=c;W=Q}Sqa(o);R=W;S=V;Qb(S|0)}V=i+56|0;W=i+4|0;k[i>>2]=27524;k[V>>2]=27544;B=0;wa(508,i+56|0,W|0);o=B;B=0;if(o&1){o=Rb()|0;X=Q;Y=o;vva(V);Qb(Y|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[V>>2]=27488;B=0;va(448,W|0);o=B;B=0;do if(o&1){c=Rb()|0;Z=Q;_=c}else{k[W>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,W|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(d);Yua(c);Ava(W);Z=b;_=q;break}Yua(d);B=0;q=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,s=ya(427,k[w>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(s)|0,B=0,z=Ia(40,q|0,s|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,120969,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121166,12);s=B;B=0;if(s&1){s=Rb()|0;n=Q;Yua(j);$=s;aa=n;break}B=0;wa(510,m|0,W|0);n=B;B=0;if(n&1){n=Rb()|0;ba=1;ca=Q;da=n}else{B=0;ua(163,z|0,j|0,l|0,381,m|0);n=B;B=0;if(n&1)ea=1;else{B=0;eb(503,z|0,1240,229);B=0;ea=0}n=Rb()|0;s=Q;Yua(m);ba=ea;ca=s;da=n}Yua(l);Yua(j);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{n=Rb()|0;$=n;aa=Q}while(0);zb(z|0);fa=aa;ga=$}else P=48;while(0);if((P|0)==48){q=Rb()|0;fa=Q;ga=q}k[i>>2]=27468;k[V>>2]=27488;k[W>>2]=27560;Yua(c);Ava(W);vva(V);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(V);Qb(Y|0);return 0}function q4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+8|0;o=iz(a,k[n>>2]|0)|0;if((Hc[k[(k[b>>2]|0)+20>>2]&511](b)|0)!=624){q=e+56|0;s=e+4|0;k[e>>2]=27524;k[q>>2]=27544;B=0;wa(508,e+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=e+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(d);Yua(w);Ava(s);x=A;y=z;break}Yua(d);B=0;z=Ia(40,e|0,121102,50)|0;A=B;B=0;a:do if((((!(A&1)?(B=0,C=ya(k[(k[b>>2]|0)+20>>2]|0,b|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=ya(427,C|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(D)|0,B=0,E=Ia(40,z|0,D|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,f|0,120969,76);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,121179,15);D=B;B=0;if(D&1){D=Rb()|0;F=Q;Yua(f);G=D;H=F;break}B=0;wa(510,h|0,s|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;J=F;K=1}else{B=0;ua(163,E|0,f|0,g|0,408,h|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,E|0,1240,229);B=0;L=0}F=Rb()|0;D=Q;Yua(h);I=D;J=F;K=L}Yua(g);Yua(f);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=F;H=Q}while(0);zb(E|0);M=G;N=H}else O=20;while(0);if((O|0)==20){z=Rb()|0;M=z;N=Q}k[e>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);P=N;R=M;Qb(R|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}v=b+8|0;q=k[v>>2]|0;if((q|0)==(k[n>>2]|0)){n=Rqa(o>>>0>536870911?-1:o<<3)|0;if((o|0)>0){y=k[a+12>>2]|0;x=k[b+12>>2]|0;b=0;do{p[n+(b<<3)>>3]=+p[y+(b<<3)>>3]/+p[x+(b<<3)>>3];b=b+1|0}while((b|0)!=(o|0))}o=Qqa(16)|0;b=k[a+4>>2]|0;k[o>>2]=32164;B=0;a=B;B=0;if(a&1){a=Rb()|0;S=a;T=Q}else{k[o>>2]=37816;k[o+4>>2]=b;k[o+8>>2]=q;B=0;b=Xa(252,o|0,q|0)|0;q=B;B=0;if(!(q&1)){if((b|0)<=0){k[o+12>>2]=0;Tqa(n);r=c;return o|0}B=0;q=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;a=B;B=0;if(!(a&1)){k[o+12>>2]=q;TEa(q|0,n|0,b<<3|0)|0;Tqa(n);r=c;return o|0}}c=Rb()|0;S=c;T=Q}Sqa(o);P=T;R=S;Qb(R|0)}S=i+56|0;T=i+4|0;k[i>>2]=27524;k[S>>2]=27544;B=0;wa(508,i+56|0,T|0);o=B;B=0;if(o&1){o=Rb()|0;U=Q;V=o;vva(S);Qb(V|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);o=B;B=0;do if(o&1){c=Rb()|0;W=Q;X=c}else{k[T>>2]=27560;c=i+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,T|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;b=Q;Yua(d);Yua(c);Ava(T);W=b;X=n;break}Yua(d);B=0;n=Ia(40,i|0,121102,50)|0;b=B;B=0;b:do if(((!(b&1)?(B=0,q=ya(427,k[v>>2]|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(q)|0,B=0,x=Ia(40,n|0,q|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,j|0,120969,76);a=B;B=0;do if(!(a&1)){B=0;eb(502,l|0,121179,15);q=B;B=0;if(q&1){q=Rb()|0;y=Q;Yua(j);Y=q;Z=y;break}B=0;wa(510,m|0,T|0);y=B;B=0;if(y&1){y=Rb()|0;_=1;$=Q;aa=y}else{B=0;ua(163,x|0,j|0,l|0,410,m|0);y=B;B=0;if(y&1)ba=1;else{B=0;eb(503,x|0,1240,229);B=0;ba=0}y=Rb()|0;q=Q;Yua(m);_=ba;$=q;aa=y}Yua(l);Yua(j);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{y=Rb()|0;Y=y;Z=Q}while(0);zb(x|0);ca=Z;da=Y}else O=46;while(0);if((O|0)==46){n=Rb()|0;ca=Q;da=n}k[i>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(c);Ava(T);vva(S);P=ca;R=da;Qb(R|0)}while(0);U=W;V=X;vva(S);Qb(V|0);return 0}function r4(a,b){a=a|0;b=b|0;return}function s4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function t4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,52,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function u4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function v4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,121195,86);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,55,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function w4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function x4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,59,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function y4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function z4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121296,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function A4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,121195,86);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121282,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,39,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0);return 0}function B4(a){a=a|0;return 1}function C4(a){a=a|0;return (m[(k[a>>2]|0)+24+(k[a+4>>2]<<1)>>1]|0)&4|0}function D4(a){a=a|0;return (m[(k[a>>2]|0)+24+(k[a+4>>2]<<1)>>1]|0)&1012|0}function E4(a){a=a|0;W4(k[a>>2]|0,k[a+4>>2]|0);return}function F4(a,b){a=a|0;b=b|0;M4(a,k[b>>2]|0,k[b+4>>2]|0);return}function G4(a,b){a=a|0;b=b|0;return k[(k[a>>2]|0)+(j[52932+(k[a+4>>2]<<2)+(k[b>>2]<<1)>>1]<<2)>>2]|0}function H4(a){a=a|0;return (k[a>>2]|0)+32|0}function I4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=k[a>>2]|0;if(!d)e=0;else{f=k[a+4>>2]|0;k[d+12+(f<<2)>>2]=k[b>>2];d=k[a>>2]|0;j[d+24+(f<<1)>>1]=k[b+4>>2]|c;e=d}d=k[b>>2]|0;if(!d)return;f=k[b+4>>2]|0;k[d+12+(f<<2)>>2]=e;j[(k[b>>2]|0)+24+(f<<1)>>1]=k[a+4>>2]|c;return}function J4(a){a=a|0;return}function K4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;f=r;r=r+368|0;g=f+344|0;h=f+208|0;i=f+196|0;l=f+184|0;m=f+36|0;n=f+48|0;o=f+24|0;p=f+12|0;q=f;s=k[b+8>>2]|0;t=k[b+44>>2]|0;if((d|c|e|0)<0){b=h+56|0;u=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(b);Qb(x|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=h+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,u|0,g|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(g);Yua(y);Ava(u);z=D;A=C;break}Yua(g);B=0;C=Ia(40,h|0,121369,17)|0;D=B;B=0;a:do if(!(D&1)?(B=0,Xa(239,C|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,i|0,121387,64);F=B;B=0;do if(!(F&1)){B=0;eb(502,l|0,121452,8);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(i);I=H;J=G;break}B=0;wa(510,m|0,u|0);G=B;B=0;if(G&1){G=Rb()|0;K=G;L=Q;M=1}else{B=0;ua(163,E|0,i|0,l|0,21,m|0);G=B;B=0;if(G&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}G=Rb()|0;H=Q;Yua(m);K=G;L=H;M=N}Yua(l);Yua(i);if(M){I=L;J=K}else{O=L;P=K;break a}}else{H=Rb()|0;I=Q;J=H}while(0);zb(E|0);O=I;P=J}else R=17;while(0);if((R|0)==17){C=Rb()|0;O=Q;P=C}k[h>>2]=27468;k[b>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(b);S=O;T=P;Qb(T|0)}while(0);w=z;x=A;vva(b);Qb(x|0)}if((t|0)>(e|0)&((t|0)>(c|0)&(t|0)>(d|0))){k[a>>2]=s+(c*72|0);k[a+4>>2]=s+(d*72|0);k[a+8>>2]=s+(e*72|0);e=a+12|0;s=a+32|0;k[s>>2]=0;k[s+4>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;j[e+16>>1]=0;r=f;return}f=n+56|0;e=n+4|0;k[n>>2]=27524;k[f>>2]=27544;B=0;wa(508,n+56|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;U=Q;V=s;vva(f);Qb(V|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[f>>2]=27488;B=0;va(448,e|0);s=B;B=0;do if(s&1){a=Rb()|0;W=Q;X=a}else{k[e>>2]=27560;a=n+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[n+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,e|0,g|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(g);Yua(a);Ava(e);W=c;X=d;break}Yua(g);B=0;d=Ia(40,n|0,121461,26)|0;c=B;B=0;b:do if(!(c&1)?(B=0,Xa(239,d|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,o|0,121387,64);x=B;B=0;do if(!(x&1)){B=0;eb(502,p|0,121452,8);b=B;B=0;if(b&1){b=Rb()|0;A=Q;Yua(o);Y=b;Z=A;break}B=0;wa(510,q|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;_=1;$=Q;aa=A}else{B=0;ua(163,t|0,o|0,p|0,24,q|0);A=B;B=0;if(A&1)ba=1;else{B=0;eb(503,t|0,1240,229);B=0;ba=0}A=Rb()|0;b=Q;Yua(q);_=ba;$=b;aa=A}Yua(p);Yua(o);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{A=Rb()|0;Y=A;Z=Q}while(0);zb(t|0);ca=Z;da=Y}else R=41;while(0);if((R|0)==41){d=Rb()|0;ca=Q;da=d}k[n>>2]=27468;k[f>>2]=27488;k[e>>2]=27560;Yua(a);Ava(e);vva(f);S=ca;T=da;Qb(T|0)}while(0);U=W;V=X;vva(f);Qb(V|0)}function L4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;k[a>>2]=b;k[a+4>>2]=c;k[a+8>>2]=d;d=a+12|0;c=a+32|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;j[d+16>>1]=0;if(!b){b=c;k[b>>2]=-1;k[b+4>>2]=-1;k[a+40>>2]=0;return}else{a=c;k[a>>2]=0;k[a+4>>2]=0;return}}function M4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=(m[b+24+(c<<1)>>1]|0)&3;k[a>>2]=k[b+12+(c<<2)>>2];k[a+4>>2]=d;return}function N4(a,b){a=a|0;b=b|0;return (m[a+24+(b<<1)>>1]|0)&1020|0}function O4(a,b){a=a|0;b=b|0;return (m[a+24+(b<<1)>>1]|0)&16|0}function P4(a,b){a=a|0;b=b|0;return (m[a+24+(b<<1)>>1]|0)&4|0}function Q4(a,b){a=a|0;b=b|0;return (m[a+24+((b&3)<<1)>>1]|0)&3|0}function R4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;l=j[52944+(b<<16>>16<<1)>>1]|0;b=j[52956+(l<<1)>>1]|0;n=0;o=l;l=m[a+24+(b<<1)>>1]&3;p=a;q=k[a+12+(b<<2)>>2]|0;a:while(1){b=o;s=l;t=p;u=q;while(1){if(S4(t,b&65535,c)|0){v=s;w=u;break}x=j[52950+(b<<1)>>1]|0;y=k[t+12+(x<<2)>>2]|0;if((y|0)==(a|0)){z=n;A=30;break a}else{C=t;b=j[52950+((m[t+24+(x<<1)>>1]&3)<<1)>>1]|0;s=x;t=y;u=C}}if((n|0)>19999)break;n=n+1|0;o=j[52950+((m[w+24+(v<<1)>>1]&3)<<1)>>1]|0;l=v;p=k[w+12+(v<<2)>>2]|0;q=w}if((A|0)==30){r=d;return z|0}z=f+56|0;d=f+4|0;k[f>>2]=27524;k[z>>2]=27544;B=0;wa(508,f+56|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;D=Q;E=A;vva(z);Qb(E|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[z>>2]=27488;B=0;va(448,d|0);A=B;B=0;do if(A&1){w=Rb()|0;F=Q;G=w}else{k[d>>2]=27560;w=f+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;Yua(e);Yua(w);Ava(d);F=v;G=q;break}Yua(e);B=0;q=Ia(40,f|0,121488,8)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,g|0,121387,64);v=B;B=0;do if(!(v&1)){B=0;eb(502,h|0,121497,5);p=B;B=0;if(p&1){p=Rb()|0;l=Q;Yua(g);H=l;I=p;break}B=0;wa(510,i|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;J=Q;K=p;L=1}else{B=0;ua(163,q|0,g|0,h|0,130,i|0);p=B;B=0;if(p&1)M=1;else{B=0;eb(503,q|0,1240,229);B=0;M=0}p=Rb()|0;l=Q;Yua(i);J=l;K=p;L=M}Yua(h);Yua(g);if(L){H=J;I=K}else{N=J;O=K;k[f>>2]=27468;k[z>>2]=27488;k[d>>2]=27560;Yua(w);Ava(d);vva(z);Qb(O|0)}}else{p=Rb()|0;H=Q;I=p}while(0);zb(q|0);N=H;O=I;k[f>>2]=27468;k[z>>2]=27488;k[d>>2]=27560;Yua(w);Ava(d);vva(z);Qb(O|0)}v=Rb()|0;N=Q;O=v;k[f>>2]=27468;k[z>>2]=27488;k[d>>2]=27560;Yua(w);Ava(d);vva(z);Qb(O|0)}while(0);D=F;E=G;vva(z);Qb(E|0);return 0}function S4(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0,Aa=0;d=b<<16>>16;if((d+3|0)>>>0>6){e=0;return e|0}f=k[a+12+(d<<2)>>2]|0;g=a+24+(d<<1)|0;h=j[g>>1]|0;i=h<<16>>16;if((i+3|0)>>>0>6){e=0;return e|0}l=k[a+(j[52932+(d<<2)>>1]<<2)>>2]|0;n=k[a+(j[52932+(d<<2)+2>>1]<<2)>>2]|0;o=k[a+(j[52944+(d<<1)>>1]<<2)>>2]|0;d=k[f+(j[52944+(i<<1)>>1]<<2)>>2]|0;i=a+32|0;q=k[i>>2]|0;r=k[i+4>>2]|0;i=f+32|0;s=k[i>>2]|0;t=k[i+4>>2]|0;i=QEa(s|0,t|0,q|0,r|0)|0;u=Q;v=(r|0)<0;w=REa(0,0,q|0,r|0)|0;x=v?Q:r;y=(t|0)<0;z=REa(0,0,s|0,t|0)|0;A=QEa((y?z:s)|0,(y?Q:t)|0,(v?w:q)|0,x|0)|0;x=Q;w=(r|0)<(t|0)|(r|0)==(t|0)&q>>>0<s>>>0;v=w?q:s;y=w?r:t;do if(l){if(!n){w=k[o>>2]|0;z=(k[l>>2]|0)-w|0;B=k[o+4>>2]|0;C=(k[l+4>>2]|0)-B|0;D=(k[d>>2]|0)-w|0;w=(k[d+4>>2]|0)-B|0;B=bFa(w|0,((w|0)<0)<<31>>31|0,z|0,((z|0)<0)<<31>>31|0)|0;z=Q;w=bFa(D|0,((D|0)<0)<<31>>31|0,C|0,((C|0)<0)<<31>>31|0)|0;C=REa(B|0,z|0,w|0,Q|0)|0;w=Q;E=C;F=w;G=s;H=t;I=((w|0)>0|(w|0)==0&C>>>0>0)&1;J=16;break}if((o|0)!=0&(d|0)!=0){C=k[l>>2]|0;w=k[o>>2]|0;z=C-w|0;B=k[l+4>>2]|0;D=k[o+4>>2]|0;K=B-D|0;L=k[d>>2]|0;M=L-w|0;N=k[d+4>>2]|0;O=N-D|0;P=((O|0)<0)<<31>>31;R=bFa(O|0,P|0,z|0,((z|0)<0)<<31>>31|0)|0;z=Q;S=bFa(M|0,((M|0)<0)<<31>>31|0,K|0,((K|0)<0)<<31>>31|0)|0;K=REa(R|0,z|0,S|0,Q|0)|0;S=Q;z=REa(0,0,K|0,S|0)|0;R=Q;M=REa(i|0,u|0,K|0,S|0)|0;T=Q;U=(S|0)<0;V=(T|0)<0;W=REa(0,0,M|0,T|0)|0;X=QEa((V?W:M)|0,(V?Q:T)|0,(U?z:K)|0,(U?R:S)|0)|0;R=Q;U=(R|0)<(x|0)|(R|0)==(x|0)&X>>>0<A>>>0;X=U&1;R=(S|0)<(T|0)|(S|0)==(T|0)&K>>>0<M>>>0;z=R?S:T;if(((z|0)>0|(z|0)==0&(R?K:M)>>>0>0)&(U^1)){U=(v|0)==0&(y|0)==0;if(U){E=K;F=S;G=M;H=T;I=U&1;J=16}else{if(!c){U=n;R=k[U>>2]|0;z=k[U+4>>2]|0;U=l;V=k[U>>2]|0;W=k[U+4>>2]|0;U=o;Y=k[U>>2]|0;Z=k[U+4>>2]|0;_=+p[o+24>>3];$=+p[o+32>>3];ba=+p[o+40>>3];ca=+(R-V|0);da=+(z-W|0);ea=-(ca*$+da*ba);fa=ca*_+da*$;ga=+(Y-V|0);ha=+(Z-W|0);ia=-(ga*$+ha*ba);ja=ga*_+ha*$;ka=ja*ea;la=fa*ia;ma=(ka-la)*2.0;if((ma<0.0?-ma:ma)>((ka<0.0?-ka:ka)+(la<0.0?-la:la))*.001?(la=+p[d+24>>3],ka=+p[d+32>>3],na=+p[d+40>>3],oa=-(ca*ka+da*na),pa=ca*la+da*ka,da=-(ga*ka+ha*na),ca=ga*la+ha*ka,ha=ca*oa,ga=pa*da,qa=(ha-ga)*2.0,(qa<0.0?-qa:qa)>((ha<0.0?-ha:ha)+(ga<0.0?-ga:ga))*.001):0){ga=+(V+R|0)*.5;ha=+(W+z|0)*.5;ra=+(L|0);sa=+(N|0);ta=+(Y|0);ua=+(D|0);va=+(Y-R|0);wa=+(Z-z|0);xa=(va*ja-wa*ia)/ma;ma=ga+xa*ea;ea=ha+fa*xa;xa=ma-ra;fa=ea-sa;ia=ma-ta;ma=ea-ua;ea=(va*ca-wa*da)/qa;qa=ga+ea*oa;oa=ha+pa*ea;ea=qa-ra;ra=oa-sa;sa=qa-ta;ta=oa-ua;E=K;F=S;G=M;H=T;I=+aa(+(ba*(fa*fa)+(_*(xa*xa)+$*(fa*(xa*2.0)))))/+aa(+(ba*(ma*ma)+(_*(ia*ia)+$*(ma*(ia*2.0)))))+ +aa(+(na*(ra*ra)+(la*(ea*ea)+ka*(ra*(ea*2.0)))))/+aa(+(na*(ta*ta)+(la*(sa*sa)+ka*(ta*(sa*2.0)))))<2.0&1;J=16;break}else{ya=R;za=Y;Aa=V}}else{ya=k[n>>2]|0;za=w;Aa=C}C=ya-za|0;w=L-za|0;V=k[n+4>>2]|0;Y=V-D|0;D=ya-Aa|0;R=L-Aa|0;L=V-B|0;V=N-B|0;B=bFa(w|0,((w|0)<0)<<31>>31|0,C|0,((C|0)<0)<<31>>31|0)|0;C=Q;w=bFa(O|0,P|0,Y|0,((Y|0)<0)<<31>>31|0)|0;Y=QEa(w|0,Q|0,B|0,C|0)|0;sa=+(Y>>>0)+4294967296.0*+(Q|0);Y=bFa(D|0,((D|0)<0)<<31>>31|0,R|0,((R|0)<0)<<31>>31|0)|0;R=Q;D=bFa(L|0,((L|0)<0)<<31>>31|0,V|0,((V|0)<0)<<31>>31|0)|0;V=QEa(D|0,Q|0,Y|0,R|0)|0;E=K;F=S;G=M;H=T;I=(+(s>>>0)+4294967296.0*+(t|0))*sa<(+(M>>>0)+4294967296.0*+(T|0))*(+(V>>>0)+4294967296.0*+(Q|0))&1;J=16}}else{E=K;F=S;G=M;H=T;I=X;J=16}}}else{X=k[d>>2]|0;T=(k[n>>2]|0)-X|0;M=k[d+4>>2]|0;S=(k[n+4>>2]|0)-M|0;K=(k[o>>2]|0)-X|0;X=(k[o+4>>2]|0)-M|0;M=bFa(X|0,((X|0)<0)<<31>>31|0,T|0,((T|0)<0)<<31>>31|0)|0;T=Q;X=bFa(K|0,((K|0)<0)<<31>>31|0,S|0,((S|0)<0)<<31>>31|0)|0;S=REa(M|0,T|0,X|0,Q|0)|0;X=Q;E=q;F=r;G=S;H=X;I=((X|0)>0|(X|0)==0&S>>>0>0)&1;J=16}while(0);if((J|0)==16?(I|0)!=0:0){s5(a,b,f,h,o,d,E,F,G,H);e=I;return e|0}I=f+24+((h&3)<<1)|0;j[I>>1]=m[I>>1]|8;j[g>>1]=m[g>>1]|8;e=0;return e|0}function T4(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=b&3;b=k[a+12+(c<<2)>>2]|0;d=a+24+(c<<1)|0;e=m[d>>1]|0;j[d>>1]=e&55;if(!b)return;d=e&3;k[b+12+(d<<2)>>2]=a;j[b+24+(d<<1)>>1]=e&52|c;return}function U4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b<<16>>16;k[a+12+(e<<2)>>2]=c;j[a+24+(e<<1)>>1]=d;if(!c)return;e=d<<16>>16;k[c+12+(e<<2)>>2]=a;j[c+24+(e<<1)>>1]=b;return}function V4(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a+12+(b<<2)>>2]|0;d=a+24+(b<<1)|0;if(c){b=c+24+(((m[d>>1]|0)&3)<<1)|0;j[b>>1]=m[b>>1]|0|16}j[d>>1]=m[d>>1]|0|16;return}function W4(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24+(b<<1)|0;d=(k[a+12+(b<<2)>>2]|0)+24+(((m[c>>1]|0)&3)<<1)|0;j[d>>1]=m[d>>1]|0|4;j[c>>1]=m[c>>1]|0|4;return}function X4(a){a=a|0;var b=0,c=0;b=k[a>>2]|0;if(b){k[b+64>>2]=a;j[(k[a>>2]|0)+60>>1]=0}b=a+4|0;c=k[b>>2]|0;if(c){k[c+64>>2]=a;j[(k[b>>2]|0)+60>>1]=1}b=a+8|0;c=k[b>>2]|0;if(!c)return;k[c+64>>2]=a;j[(k[b>>2]|0)+60>>1]=2;return}function Y4(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+24+(b<<1)|0;d=(k[a+12+(b<<2)>>2]|0)+24+(((m[c>>1]|0)&3)<<1)|0;j[d>>1]=(m[d>>1]|0)&55;j[c>>1]=(m[c>>1]|0)&55;return}function Z4(a,b){a=a|0;b=b|0;return k[a+12+((b&3)<<2)>>2]|0}function _4(a){a=a|0;var b=0,c=0,d=0;b=a+56|0;c=a;d=c+48|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(d|0));ppa(b);k[a+52>>2]=0;return}function $4(a){a=a|0;return k[a+48>>2]|0}function a5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a+64|0;e=k[d>>2]|0;if((e|0)!=0?(f=a+60|0,a=j[f>>1]|0,(a&65535)<3):0){g=R4(e,a,c)|0;if(!b){k[d>>2]=0;j[f>>1]=0;h=g}else h=g}else h=0;return h|0}function b5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0.0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0.0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0.0,of=0.0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0.0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0;c=r;r=r+4080|0;d=c+4064|0;e=c+3736|0;f=c+4052|0;g=c+3584|0;h=c+4040|0;i=c+4028|0;l=c+4016|0;m=c+3448|0;n=c+4004|0;o=c+3992|0;q=c+3980|0;s=c+3296|0;t=c+3968|0;u=c+3956|0;v=c+3944|0;w=c+3160|0;x=c+3932|0;y=c+3008|0;z=c+3920|0;A=c+2872|0;C=c+3908|0;D=c+2720|0;E=c+3896|0;F=c+2584|0;H=c+3884|0;I=c+3872|0;J=c+3720|0;K=c+2432|0;L=c+3432|0;M=c+2296|0;N=c+3144|0;O=c+2144|0;P=c+2856|0;R=c+2008|0;S=c+2568|0;T=c+1872|0;U=c+2280|0;V=c+1720|0;W=c+1856|0;X=c+1584|0;Y=c+1568|0;Z=c+1432|0;_=c+1280|0;$=c+1296|0;ba=c+1128|0;ca=c+844|0;da=c+832|0;ea=c+1144|0;fa=c+544|0;ga=c+392|0;ha=c+240|0;ia=c+992|0;ja=c+228|0;ka=c+216|0;la=c+204|0;ma=c+856|0;na=c+192|0;oa=c+696|0;pa=c+180|0;qa=c+168|0;ra=c+156|0;sa=c+560|0;ta=c+144|0;xa=c+48|0;za=c+408|0;Aa=c+132|0;Ba=c+120|0;Ca=c+108|0;Da=c+256|0;Ea=c+96|0;Fa=c+84|0;Ga=c+72|0;Ha=c+24|0;Ja=c;a:do if(b){Ka=k[b+108>>2]|0;La=+p[b+48>>3]*3.141592653589793/180.0;if((Ka|0)>1){Ma=e+56|0;Na=e+4|0;k[e>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,e+56|0,Na|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Qa=Oa;vva(Ma);Qb(Qa|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Oa=B;B=0;do if(Oa&1){Ra=Rb()|0;Sa=Q;Ta=Ra}else{k[Na>>2]=27560;Ra=e+36|0;k[Ra>>2]=0;k[Ra+4>>2]=0;k[Ra+8>>2]=0;k[Ra+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Na|0,d|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Yua(d);Yua(Ra);Ava(Na);Sa=Va;Ta=Ua;break}Yua(d);B=0;Ia(40,e|0,121577,49)|0;Ua=B;B=0;do if(!(Ua&1)?(B=0,wa(510,f|0,Na|0),Va=B,B=0,!(Va&1)):0){B=0;ya(424,f|0)|0;Va=B;B=0;if(Va&1){Va=Rb()|0;Wa=Q;Yua(f);Ya=Wa;Za=Va;break}else{Yua(f);k[e>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ra);Ava(Na);vva(Ma);_a=La;$a=Ka;break a}}else ab=15;while(0);if((ab|0)==15){Ua=Rb()|0;Ya=Q;Za=Ua}k[e>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ra);Ava(Na);vva(Ma);bb=Za;cb=Ya;Qb(bb|0)}while(0);Pa=Sa;Qa=Ta;vva(Ma);Qb(Qa|0)}else{_a=La;$a=Ka}}else{_a=.17453292519943295;$a=0}while(0);Qa=a+48|0;Ta=k[Qa>>2]|0;if((Ta|0)>=1?(Sa=a+44|0,Pa=k[Sa>>2]|0,(Pa|0)>=1):0){if(_a>=0.0)p[(k[a>>2]|0)+80>>3]=_a;Ya=Qqa(20)|0;B=0;eb(522,Ya|0,Ta*3|0,Pa|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Ta=Q;Sqa(Ya);bb=Pa;cb=Ta;Qb(bb|0)}Ta=k[Qa>>2]|0;Pa=Ta*3|0;Za=Rqa(Pa>>>0>1073741823?-1:Pa<<2)|0;if((Ta|0)>0)WEa(Za|0,-1,((Pa|0)>1?Pa:1)<<2|0)|0;Pa=a+52|0;Ta=k[Pa>>2]|0;if((Ta|0)>0){e=a+16|0;f=a+8|0;b=0;do{Na=k[e>>2]|0;Oa=k[f>>2]|0;aqa(Ya,((k[Na+(b*24|0)>>2]|0)-Oa|0)/72|0,((k[Na+(b*24|0)+4>>2]|0)-Oa|0)/72|0)|0;b=b+1|0;Oa=k[Pa>>2]|0}while((b|0)<(Oa|0));db=Oa}else db=Ta;if((db|0)!=($pa(Ya)|0)){Tqa(Za);db=m+56|0;Ta=m+4|0;k[m>>2]=27524;k[db>>2]=27544;B=0;wa(508,m+56|0,Ta|0);b=B;B=0;if(b&1){b=Rb()|0;fb=Q;gb=b;vva(db);Qb(gb|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[db>>2]=27488;B=0;va(448,Ta|0);b=B;B=0;do if(b&1){f=Rb()|0;hb=Q;ib=f}else{k[Ta>>2]=27560;f=m+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ta|0,d|0);e=B;B=0;if(e&1){e=Rb()|0;Oa=Q;Yua(d);Yua(f);Ava(Ta);hb=Oa;ib=e;break}Yua(d);B=0;e=Ia(40,m|0,121686,44)|0;Oa=B;B=0;b:do if((((!(Oa&1)?(B=0,Na=Xa(253,e|0,k[Pa>>2]|0)|0,Ua=B,B=0,!(Ua&1)):0)?(B=0,Ua=Ia(40,Na|0,121731,7)|0,Na=B,B=0,!(Na&1)):0)?(B=0,Na=ya(435,Ya|0)|0,Va=B,B=0,!(Va&1)):0)?(B=0,Va=Xa(253,Ua|0,Na|0)|0,Na=B,B=0,!(Na&1)):0){B=0;Xa(239,Va|0,0)|0;Va=B;B=0;if(Va&1){ab=72;break}Va=Ab(20)|0;B=0;eb(502,n|0,121503,60);Na=B;B=0;do if(!(Na&1)){B=0;eb(502,o|0,121664,21);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Wa=Q;Yua(n);jb=Wa;kb=Ua;break}B=0;wa(510,q|0,Ta|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;lb=1;mb=Ua;nb=Q}else{B=0;ua(163,Va|0,n|0,o|0,1316,q|0);Ua=B;B=0;if(Ua&1)ob=1;else{B=0;eb(503,Va|0,1240,229);B=0;ob=0}Ua=Rb()|0;Wa=Q;Yua(q);lb=ob;mb=Ua;nb=Wa}Yua(o);Yua(n);if(lb){jb=nb;kb=mb}else{pb=mb;qb=nb;break b}}else{Wa=Rb()|0;jb=Q;kb=Wa}while(0);zb(Va|0);pb=kb;qb=jb}else ab=72;while(0);if((ab|0)==72){e=Rb()|0;pb=e;qb=Q}k[m>>2]=27468;k[db>>2]=27488;k[Ta>>2]=27560;Yua(f);Ava(Ta);vva(db);bb=pb;cb=qb;Qb(bb|0)}while(0);fb=hb;gb=ib;vva(db);Qb(gb|0)}gb=k[Pa>>2]|0;c:do if((k[Qa>>2]|0)>0){db=a+12|0;ib=a+8|0;hb=0;d:while(1){fb=hb*3|0;qb=0;do{pb=k[db>>2]|0;Ta=j[52932+(qb<<2)>>1]|0;m=k[ib>>2]|0;jb=j[52932+(qb<<2)+2>>1]|0;kb=aqa(Ya,((k[pb+(hb*48|0)+(Ta<<2)>>2]|0)-m|0)/72|0,((k[pb+(hb*48|0)+(jb<<2)>>2]|0)-m|0)/72|0)|0;m=O4((k[db>>2]|0)+(hb*48|0)|0,qb)|0;pb=Za+(kb<<2)|0;nb=k[pb>>2]|0;if((nb|0)==-1)rb=qb+fb|0;else{if((nb|0)<=-1){sb=Ta;tb=jb;ub=kb;vb=pb;wb=hb;xb=qb;break d}if(Z4((k[db>>2]|0)+(hb*48|0)|0,qb)|0){ab=88;break d}jb=k[pb>>2]|0;if(Z4((k[db>>2]|0)+(((jb|0)/3|0)*48|0)|0,(jb|0)%3|0)|0){ab=88;break d}jb=k[db>>2]|0;Ta=k[pb>>2]|0;U4(jb+(hb*48|0)|0,qb&65535,jb+(((Ta|0)/3|0)*48|0)|0,((Ta|0)%3|0)&65535);if(m)V4((k[db>>2]|0)+(hb*48|0)|0,qb);if((kb|0)<(k[Pa>>2]|0))W4((k[db>>2]|0)+(hb*48|0)|0,qb);rb=-2-(k[pb>>2]|0)|0}k[pb>>2]=rb;qb=qb+1|0}while((qb|0)<3);hb=hb+1|0;if((hb|0)>=(k[Qa>>2]|0))break c}if((ab|0)==88){hb=s+56|0;f=s+4|0;k[s>>2]=27524;k[hb>>2]=27544;B=0;wa(508,s+56|0,f|0);qb=B;B=0;if(qb&1){qb=Rb()|0;yb=Q;Bb=qb;vva(hb);Qb(Bb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[hb>>2]=27488;B=0;va(448,f|0);qb=B;B=0;do if(qb&1){fb=Rb()|0;Cb=Q;Db=fb}else{k[f>>2]=27560;fb=s+36|0;k[fb>>2]=0;k[fb+4>>2]=0;k[fb+8>>2]=0;k[fb+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,f|0,d|0);Va=B;B=0;if(Va&1){Va=Rb()|0;pb=Q;Yua(d);Yua(fb);Ava(f);Cb=pb;Db=Va;break}Yua(d);B=0;Va=Ia(40,s|0,121739,87)|0;pb=B;B=0;e:do if(!(pb&1)?(B=0,Xa(239,Va|0,0)|0,kb=B,B=0,!(kb&1)):0){kb=Ab(20)|0;B=0;eb(502,t|0,121503,60);m=B;B=0;do if(!(m&1)){B=0;eb(502,u|0,121664,21);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;jb=Q;Yua(t);Eb=jb;Fb=Ta;break}B=0;wa(510,v|0,f|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Gb=1;Hb=Ta;Ib=Q}else{B=0;ua(163,kb|0,t|0,u|0,1336,v|0);Ta=B;B=0;if(Ta&1)Jb=1;else{B=0;eb(503,kb|0,1240,229);B=0;Jb=0}Ta=Rb()|0;jb=Q;Yua(v);Gb=Jb;Hb=Ta;Ib=jb}Yua(u);Yua(t);if(Gb){Eb=Ib;Fb=Hb}else{Kb=Hb;Lb=Ib;break e}}else{jb=Rb()|0;Eb=Q;Fb=jb}while(0);zb(kb|0);Kb=Fb;Lb=Eb}else ab=103;while(0);if((ab|0)==103){Va=Rb()|0;Kb=Va;Lb=Q}k[s>>2]=27468;k[hb>>2]=27488;k[f>>2]=27560;Yua(fb);Ava(f);vva(hb);bb=Kb;cb=Lb;Qb(bb|0)}while(0);yb=Cb;Bb=Db;vva(hb);Qb(Bb|0)}f=w+56|0;qb=w+4|0;k[w>>2]=27524;k[f>>2]=27544;B=0;wa(508,w+56|0,qb|0);Va=B;B=0;if(Va&1){Va=Rb()|0;Mb=Q;Nb=Va;vva(f);Qb(Nb|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[f>>2]=27488;B=0;va(448,qb|0);Va=B;B=0;do if(Va&1){pb=Rb()|0;Ob=Q;Pb=pb}else{k[qb>>2]=27560;pb=w+36|0;k[pb>>2]=0;k[pb+4>>2]=0;k[pb+8>>2]=0;k[pb+12>>2]=0;k[w+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,qb|0,d|0);m=B;B=0;if(m&1){m=Rb()|0;jb=Q;Yua(d);Yua(pb);Ava(qb);Ob=jb;Pb=m;break}Yua(d);B=0;m=Ia(40,w|0,121827,10)|0;jb=B;B=0;do if(((!(jb&1)?(B=0,Ta=Xa(253,m|0,((k[(k[db>>2]|0)+(wb*48|0)+(sb<<2)>>2]|0)-(k[ib>>2]|0)|0)/72|0|0)|0,nb=B,B=0,!(nb&1)):0)?(B=0,nb=Ia(40,Ta|0,121838,1)|0,Ta=B,B=0,!(Ta&1)):0)?(B=0,Ta=Xa(253,nb|0,((k[(k[db>>2]|0)+(wb*48|0)+(tb<<2)>>2]|0)-(k[ib>>2]|0)|0)/72|0|0)|0,nb=B,B=0,!(nb&1)):0){B=0;nb=Ia(40,Ta|0,121840,36)|0;Ta=B;B=0;if(Ta&1){ab=195;break}B=0;Ta=Xa(253,nb|0,ub|0)|0;nb=B;B=0;if(nb&1){ab=195;break}B=0;Ia(40,Ta|0,145593,2)|0;Ta=B;B=0;if(Ta&1){ab=195;break}B=0;wa(510,x|0,qb|0);Ta=B;B=0;if(Ta&1){ab=195;break}B=0;ya(424,x|0)|0;Ta=B;B=0;if(Ta&1){Ta=Rb()|0;nb=Q;Yua(x);Sb=nb;Tb=Ta;break}Yua(x);k[w>>2]=27468;k[f>>2]=27488;k[qb>>2]=27560;Yua(pb);Ava(qb);vva(f);Ta=y+56|0;nb=y+4|0;k[y>>2]=27524;k[Ta>>2]=27544;B=0;wa(508,y+56|0,nb|0);mb=B;B=0;if(mb&1){mb=Rb()|0;Ub=Q;Vb=mb;vva(Ta);Qb(Vb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Ta>>2]=27488;B=0;va(448,nb|0);mb=B;B=0;do if(mb&1){lb=Rb()|0;Wb=Q;Xb=lb}else{k[nb>>2]=27560;lb=y+36|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,nb|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(d);Yua(lb);Ava(nb);Wb=o;Xb=n;break}Yua(d);B=0;n=Ia(40,y|0,121877,5)|0;o=B;B=0;do if(o&1)ab=198;else{B=0;ob=Xa(242,n|0,xb|0)|0;q=B;B=0;if(q&1){ab=198;break}B=0;q=Ia(40,ob|0,121883,13)|0;ob=B;B=0;if(ob&1){ab=198;break}B=0;ob=Xa(242,q|0,wb|0)|0;q=B;B=0;if(q&1){ab=198;break}B=0;Ia(40,ob|0,149177,1)|0;ob=B;B=0;if(ob&1){ab=198;break}B=0;wa(510,z|0,nb|0);ob=B;B=0;if(ob&1){ab=198;break}B=0;ya(424,z|0)|0;ob=B;B=0;if(ob&1){ob=Rb()|0;q=Q;Yua(z);Yb=ob;Zb=q;break}Yua(z);k[y>>2]=27468;k[Ta>>2]=27488;k[nb>>2]=27560;Yua(lb);Ava(nb);vva(Ta);q=A+56|0;ob=A+4|0;k[A>>2]=27524;k[q>>2]=27544;B=0;wa(508,A+56|0,ob|0);b=B;B=0;if(b&1){b=Rb()|0;_b=Q;$b=b;vva(q);Qb($b|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[q>>2]=27488;B=0;va(448,ob|0);b=B;B=0;do if(b&1){e=Rb()|0;ac=Q;bc=e}else{k[ob>>2]=27560;e=A+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[A+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ob|0,d|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Ka=Q;Yua(d);Yua(e);Ava(ob);ac=Ka;bc=Oa;break}Yua(d);B=0;Oa=Ia(40,A|0,121877,5)|0;Ka=B;B=0;do if(Ka&1)ab=201;else{B=0;Ma=Xa(253,Oa|0,(2-(k[vb>>2]|0)|0)%3|0|0)|0;Na=B;B=0;if(Na&1){ab=201;break}B=0;Na=Ia(40,Ma|0,121883,13)|0;Ma=B;B=0;if(Ma&1){ab=201;break}B=0;Ma=Xa(253,Na|0,(2-(k[vb>>2]|0)|0)/3|0|0)|0;Na=B;B=0;if(Na&1){ab=201;break}B=0;Ia(40,Ma|0,149177,1)|0;Ma=B;B=0;if(Ma&1){ab=201;break}B=0;wa(510,C|0,ob|0);Ma=B;B=0;if(Ma&1){ab=201;break}B=0;ya(424,C|0)|0;Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Na=Q;Yua(C);cc=Ma;dc=Na;break}Yua(C);k[A>>2]=27468;k[q>>2]=27488;k[ob>>2]=27560;Yua(e);Ava(ob);vva(q);Na=D+56|0;Ma=D+4|0;k[D>>2]=27524;k[Na>>2]=27544;B=0;wa(508,D+56|0,Ma|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;ec=Q;fc=Ra;vva(Na);Qb(fc|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[Na>>2]=27488;B=0;va(448,Ma|0);Ra=B;B=0;do if(Ra&1){Wa=Rb()|0;gc=Q;hc=Wa}else{k[Ma>>2]=27560;Wa=D+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[D+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ma|0,d|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;ic=Q;Yua(d);Yua(Wa);Ava(Ma);gc=ic;hc=Ua;break}Yua(d);B=0;Ua=Ia(40,D|0,121877,5)|0;ic=B;B=0;do if(ic&1)ab=204;else{jc=2-(k[vb>>2]|0)|0;B=0;kc=Xa(254,(k[db>>2]|0)+(((jc|0)/3|0)*48|0)|0,(jc|0)%3|0|0)|0;jc=B;B=0;if(jc&1){ab=204;break}B=0;jc=Xa(255,Ua|0,kc|0)|0;kc=B;B=0;if(kc&1){ab=204;break}B=0;kc=Ia(40,jc|0,121883,13)|0;jc=B;B=0;if(jc&1){ab=204;break}jc=2-(k[vb>>2]|0)|0;B=0;lc=Xa(256,(k[db>>2]|0)+(((jc|0)/3|0)*48|0)|0,(jc|0)%3|0|0)|0;jc=B;B=0;if(jc&1){ab=204;break}B=0;jc=Xa(253,kc|0,(lc-(k[db>>2]|0)|0)/48|0|0)|0;lc=B;B=0;if(lc&1){ab=204;break}B=0;Ia(40,jc|0,149177,1)|0;jc=B;B=0;if(jc&1){ab=204;break}B=0;wa(510,E|0,Ma|0);jc=B;B=0;if(jc&1){ab=204;break}B=0;ya(424,E|0)|0;jc=B;B=0;if(jc&1){jc=Rb()|0;lc=Q;Yua(E);mc=jc;nc=lc;break}Yua(E);k[D>>2]=27468;k[Na>>2]=27488;k[Ma>>2]=27560;Yua(Wa);Ava(Ma);vva(Na);lc=F+56|0;jc=F+4|0;k[F>>2]=27524;k[lc>>2]=27544;B=0;wa(508,F+56|0,jc|0);kc=B;B=0;if(kc&1){kc=Rb()|0;oc=Q;pc=kc;vva(lc);Qb(pc|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[lc>>2]=27488;B=0;va(448,jc|0);kc=B;B=0;do if(kc&1){qc=Rb()|0;rc=Q;sc=qc}else{k[jc>>2]=27560;qc=F+36|0;k[qc>>2]=0;k[qc+4>>2]=0;k[qc+8>>2]=0;k[qc+12>>2]=0;k[F+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,jc|0,d|0);tc=B;B=0;if(tc&1){tc=Rb()|0;uc=Q;Yua(d);Yua(qc);Ava(jc);rc=uc;sc=tc;break}Yua(d);B=0;tc=Ia(40,F|0,121897,40)|0;uc=B;B=0;f:do if(uc&1)ab=207;else{B=0;Xa(239,tc|0,0)|0;vc=B;B=0;if(vc&1){ab=207;break}vc=Ab(20)|0;B=0;eb(502,H|0,121503,60);wc=B;B=0;do if(!(wc&1)){B=0;eb(502,I|0,121664,21);xc=B;B=0;if(xc&1){xc=Rb()|0;yc=Q;Yua(H);zc=yc;Ac=xc;break}B=0;wa(510,J|0,jc|0);xc=B;B=0;if(xc&1){xc=Rb()|0;Bc=xc;Cc=Q;Dc=1}else{B=0;ua(163,vc|0,H|0,I|0,1354,J|0);xc=B;B=0;if(xc&1)Ec=1;else{B=0;eb(503,vc|0,1240,229);B=0;Ec=0}xc=Rb()|0;yc=Q;Yua(J);Bc=xc;Cc=yc;Dc=Ec}Yua(I);Yua(H);if(Dc){zc=Cc;Ac=Bc}else{Fc=Bc;Gc=Cc;break f}}else{yc=Rb()|0;zc=Q;Ac=yc}while(0);zb(vc|0);Fc=Ac;Gc=zc}while(0);if((ab|0)==207){tc=Rb()|0;Fc=tc;Gc=Q}k[F>>2]=27468;k[lc>>2]=27488;k[jc>>2]=27560;Yua(qc);Ava(jc);vva(lc);bb=Fc;cb=Gc;Qb(bb|0)}while(0);oc=rc;pc=sc;vva(lc);Qb(pc|0)}while(0);if((ab|0)==204){Ua=Rb()|0;mc=Ua;nc=Q}k[D>>2]=27468;k[Na>>2]=27488;k[Ma>>2]=27560;Yua(Wa);Ava(Ma);vva(Na);bb=mc;cb=nc;Qb(bb|0)}while(0);ec=gc;fc=hc;vva(Na);Qb(fc|0)}while(0);if((ab|0)==201){Oa=Rb()|0;cc=Oa;dc=Q}k[A>>2]=27468;k[q>>2]=27488;k[ob>>2]=27560;Yua(e);Ava(ob);vva(q);bb=cc;cb=dc;Qb(bb|0)}while(0);_b=ac;$b=bc;vva(q);Qb($b|0)}while(0);if((ab|0)==198){n=Rb()|0;Yb=n;Zb=Q}k[y>>2]=27468;k[Ta>>2]=27488;k[nb>>2]=27560;Yua(lb);Ava(nb);vva(Ta);bb=Yb;cb=Zb;Qb(bb|0)}while(0);Ub=Wb;Vb=Xb;vva(Ta);Qb(Vb|0)}else ab=195;while(0);if((ab|0)==195){m=Rb()|0;Sb=Q;Tb=m}k[w>>2]=27468;k[f>>2]=27488;k[qb>>2]=27560;Yua(pb);Ava(qb);vva(f);bb=Tb;cb=Sb;Qb(bb|0)}while(0);Mb=Ob;Nb=Pb;vva(f);Qb(Nb|0)}while(0);Nb=$pa(Ya)|0;Pb=k[Ya+12>>2]|0;if(Pb)Tqa(Pb);Pb=k[Ya+16>>2]|0;if(Pb)Tqa(Pb);Sqa(Ya);g:do if(($a|0)>5){Ya=K+56|0;Pb=K+4|0;k[K>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,K+56|0,Pb|0);Ob=B;B=0;if(Ob&1){Ob=Rb()|0;Hc=Q;Ic=Ob;vva(Ya);Qb(Ic|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[Ya>>2]=27488;B=0;va(448,Pb|0);Ob=B;B=0;do if(Ob&1){Mb=Rb()|0;Jc=Q;Kc=Mb}else{k[Pb>>2]=27560;Mb=K+36|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[K+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Pb|0,d|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;Tb=Q;Yua(d);Yua(Mb);Ava(Pb);Jc=Tb;Kc=Sb;break}Yua(d);B=0;Ia(40,K|0,121938,23)|0;Sb=B;B=0;do if(Sb&1)ab=301;else{B=0;wa(510,L|0,Pb|0);Tb=B;B=0;if(Tb&1){ab=301;break}B=0;ya(424,L|0)|0;Tb=B;B=0;if(Tb&1){Tb=Rb()|0;w=Q;Yua(L);Lc=Tb;Mc=w;break}Yua(L);k[K>>2]=27468;k[Ya>>2]=27488;k[Pb>>2]=27560;Yua(Mb);Ava(Pb);vva(Ya);w=M+56|0;Tb=M+4|0;k[M>>2]=27524;k[w>>2]=27544;B=0;wa(508,M+56|0,Tb|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;Nc=Q;Oc=Vb;vva(w);Qb(Oc|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[w>>2]=27488;B=0;va(448,Tb|0);Vb=B;B=0;do if(Vb&1){Xb=Rb()|0;Pc=Q;Qc=Xb}else{k[Tb>>2]=27560;Xb=M+36|0;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[M+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Tb|0,d|0);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;Ub=Q;Yua(d);Yua(Xb);Ava(Tb);Pc=Ub;Qc=Wb;break}Yua(d);B=0;Wb=Ia(40,M|0,121962,38)|0;Ub=B;B=0;do if(Ub&1)ab=304;else{B=0;Zb=Xa(253,Wb|0,k[Sa>>2]|0)|0;Yb=B;B=0;if(Yb&1){ab=304;break}B=0;Ia(40,Zb|0,149177,1)|0;Zb=B;B=0;if(Zb&1){ab=304;break}B=0;wa(510,N|0,Tb|0);Zb=B;B=0;if(Zb&1){ab=304;break}B=0;ya(424,N|0)|0;Zb=B;B=0;if(Zb&1){Zb=Rb()|0;Yb=Q;Yua(N);Rc=Zb;Sc=Yb;break}Yua(N);k[M>>2]=27468;k[w>>2]=27488;k[Tb>>2]=27560;Yua(Xb);Ava(Tb);vva(w);Yb=O+56|0;Zb=O+4|0;k[O>>2]=27524;k[Yb>>2]=27544;B=0;wa(508,O+56|0,Zb|0);y=B;B=0;if(y&1){y=Rb()|0;Tc=Q;Uc=y;vva(Yb);Qb(Uc|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[Yb>>2]=27488;B=0;va(448,Zb|0);y=B;B=0;do if(y&1){$b=Rb()|0;Vc=Q;Wc=$b}else{k[Zb>>2]=27560;$b=O+36|0;k[$b>>2]=0;k[$b+4>>2]=0;k[$b+8>>2]=0;k[$b+12>>2]=0;k[O+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Zb|0,d|0);bc=B;B=0;if(bc&1){bc=Rb()|0;ac=Q;Yua(d);Yua($b);Ava(Zb);Vc=ac;Wc=bc;break}Yua(d);B=0;bc=Ia(40,O|0,122001,38)|0;ac=B;B=0;do if(ac&1)ab=307;else{B=0;_b=Xa(253,bc|0,k[Qa>>2]|0)|0;dc=B;B=0;if(dc&1){ab=307;break}B=0;Ia(40,_b|0,149177,1)|0;_b=B;B=0;if(_b&1){ab=307;break}B=0;wa(510,P|0,Zb|0);_b=B;B=0;if(_b&1){ab=307;break}B=0;ya(424,P|0)|0;_b=B;B=0;if(_b&1){_b=Rb()|0;dc=Q;Yua(P);Xc=_b;Yc=dc;break}Yua(P);k[O>>2]=27468;k[Yb>>2]=27488;k[Zb>>2]=27560;Yua($b);Ava(Zb);vva(Yb);dc=R+56|0;_b=R+4|0;k[R>>2]=27524;k[dc>>2]=27544;B=0;wa(508,R+56|0,_b|0);cc=B;B=0;if(cc&1){cc=Rb()|0;Zc=Q;_c=cc;vva(dc);Qb(_c|0)}k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[dc>>2]=27488;B=0;va(448,_b|0);cc=B;B=0;do if(cc&1){A=Rb()|0;$c=Q;ad=A}else{k[_b>>2]=27560;A=R+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[R+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,_b|0,d|0);fc=B;B=0;if(fc&1){fc=Rb()|0;hc=Q;Yua(d);Yua(A);Ava(_b);$c=hc;ad=fc;break}Yua(d);B=0;fc=Ia(40,R|0,122040,38)|0;hc=B;B=0;do if(hc&1)ab=310;else{B=0;gc=Xa(253,fc|0,k[Pa>>2]|0)|0;ec=B;B=0;if(ec&1){ab=310;break}B=0;Ia(40,gc|0,149177,1)|0;gc=B;B=0;if(gc&1){ab=310;break}B=0;wa(510,S|0,_b|0);gc=B;B=0;if(gc&1){ab=310;break}B=0;ya(424,S|0)|0;gc=B;B=0;if(gc&1){gc=Rb()|0;ec=Q;Yua(S);bd=ec;cd=gc;break}Yua(S);k[R>>2]=27468;k[dc>>2]=27488;k[_b>>2]=27560;Yua(A);Ava(_b);vva(dc);gc=T+56|0;ec=T+4|0;k[T>>2]=27524;k[gc>>2]=27544;B=0;wa(508,T+56|0,ec|0);nc=B;B=0;if(nc&1){nc=Rb()|0;dd=Q;ed=nc;vva(gc);Qb(ed|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[gc>>2]=27488;B=0;va(448,ec|0);nc=B;B=0;do if(nc&1){mc=Rb()|0;fd=Q;gd=mc}else{k[ec>>2]=27560;mc=T+36|0;k[mc>>2]=0;k[mc+4>>2]=0;k[mc+8>>2]=0;k[mc+12>>2]=0;k[T+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ec|0,d|0);D=B;B=0;if(D&1){D=Rb()|0;pc=Q;Yua(d);Yua(mc);Ava(ec);fd=pc;gd=D;break}Yua(d);B=0;D=Ia(40,T|0,122079,38)|0;pc=B;B=0;do if(pc&1)ab=313;else{B=0;sc=Xa(253,D|0,Nb|0)|0;rc=B;B=0;if(rc&1){ab=313;break}B=0;Ia(40,sc|0,149177,1)|0;sc=B;B=0;if(sc&1){ab=313;break}B=0;wa(510,U|0,ec|0);sc=B;B=0;if(sc&1){ab=313;break}B=0;ya(424,U|0)|0;sc=B;B=0;if(sc&1){sc=Rb()|0;rc=Q;Yua(U);hd=sc;id=rc;break}Yua(U);k[T>>2]=27468;k[gc>>2]=27488;k[ec>>2]=27560;Yua(mc);Ava(ec);vva(gc);rc=V+56|0;sc=V+4|0;k[V>>2]=27524;k[rc>>2]=27544;B=0;wa(508,V+56|0,sc|0);oc=B;B=0;if(oc&1){oc=Rb()|0;jd=Q;kd=oc;vva(rc);Qb(kd|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[rc>>2]=27488;B=0;va(448,sc|0);oc=B;B=0;do if(oc&1){Gc=Rb()|0;ld=Q;md=Gc}else{k[sc>>2]=27560;Gc=V+36|0;k[Gc>>2]=0;k[Gc+4>>2]=0;k[Gc+8>>2]=0;k[Gc+12>>2]=0;k[V+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,sc|0,d|0);Fc=B;B=0;if(Fc&1){Fc=Rb()|0;F=Q;Yua(d);Yua(Gc);Ava(sc);ld=F;md=Fc;break}Yua(d);B=0;Fc=Ia(40,V|0,122118,45)|0;F=B;B=0;do if(!(F&1)){B=0;zc=Xa(253,Fc|0,(k[Qa>>2]|0)-Nb+(k[Sa>>2]|0)|0)|0;Ac=B;B=0;if(Ac&1){ab=316;break}B=0;Ia(40,zc|0,149177,1)|0;zc=B;B=0;if(zc&1){ab=316;break}B=0;wa(510,W|0,sc|0);zc=B;B=0;if(zc&1){ab=316;break}B=0;ya(424,W|0)|0;zc=B;B=0;if(zc&1){zc=Rb()|0;Ac=Q;Yua(W);nd=zc;od=Ac;break}else{Yua(W);k[V>>2]=27468;k[rc>>2]=27488;k[sc>>2]=27560;Yua(Gc);Ava(sc);vva(rc);break g}}else ab=316;while(0);if((ab|0)==316){Fc=Rb()|0;nd=Fc;od=Q}k[V>>2]=27468;k[rc>>2]=27488;k[sc>>2]=27560;Yua(Gc);Ava(sc);vva(rc);bb=nd;cb=od;Qb(bb|0)}while(0);jd=ld;kd=md;vva(rc);Qb(kd|0)}while(0);if((ab|0)==313){D=Rb()|0;hd=D;id=Q}k[T>>2]=27468;k[gc>>2]=27488;k[ec>>2]=27560;Yua(mc);Ava(ec);vva(gc);bb=hd;cb=id;Qb(bb|0)}while(0);dd=fd;ed=gd;vva(gc);Qb(ed|0)}while(0);if((ab|0)==310){fc=Rb()|0;bd=Q;cd=fc}k[R>>2]=27468;k[dc>>2]=27488;k[_b>>2]=27560;Yua(A);Ava(_b);vva(dc);bb=cd;cb=bd;Qb(bb|0)}while(0);Zc=$c;_c=ad;vva(dc);Qb(_c|0)}while(0);if((ab|0)==307){bc=Rb()|0;Xc=bc;Yc=Q}k[O>>2]=27468;k[Yb>>2]=27488;k[Zb>>2]=27560;Yua($b);Ava(Zb);vva(Yb);bb=Xc;cb=Yc;Qb(bb|0)}while(0);Tc=Vc;Uc=Wc;vva(Yb);Qb(Uc|0)}while(0);if((ab|0)==304){Wb=Rb()|0;Rc=Wb;Sc=Q}k[M>>2]=27468;k[w>>2]=27488;k[Tb>>2]=27560;Yua(Xb);Ava(Tb);vva(w);bb=Rc;cb=Sc;Qb(bb|0)}while(0);Nc=Pc;Oc=Qc;vva(w);Qb(Oc|0)}while(0);if((ab|0)==301){Sb=Rb()|0;Lc=Sb;Mc=Q}k[K>>2]=27468;k[Ya>>2]=27488;k[Pb>>2]=27560;Yua(Mb);Ava(Pb);vva(Ya);bb=Lc;cb=Mc;Qb(bb|0)}while(0);Hc=Jc;Ic=Kc;vva(Ya);Qb(Ic|0)}while(0);Ic=(Nb|0)>0;if(Ic){Kc=a+12|0;Jc=0;Hc=0;Mc=0;while(1){Lc=k[Za+(Jc<<2)>>2]|0;if((Lc|0)<-1){K=-2-Lc|0;Oc=(K|0)/3|0;Qc=Z4((k[Kc>>2]|0)+(Oc*48|0)|0,(K|0)%3|0)|0;pd=(((Jc|0)<(gb|0)?1:(k[(k[Kc>>2]|0)+(Oc*48|0)+40>>2]|0)!=(k[Qc+40>>2]|0))&1)+Hc|0;qd=Mc}else{pd=Hc;qd=(Lc>>>31^1)+Mc|0}Jc=Jc+1|0;if((Jc|0)==(Nb|0)){rd=pd;sd=qd;break}else{Hc=pd;Mc=qd}}}else{rd=0;sd=0}qd=rd+sd|0;do if(qd){k[Pa>>2]=qd;sd=a+16|0;rd=k[sd>>2]|0;Mc=Rqa(qd>>>0>178956970?-1:qd*24|0)|0;k[sd>>2]=Mc;h:do if(($a|0)>4){Mc=X+56|0;pd=X+4|0;k[X>>2]=27524;k[Mc>>2]=27544;B=0;wa(508,X+56|0,pd|0);Hc=B;B=0;if(Hc&1){Hc=Rb()|0;td=Q;ud=Hc;vva(Mc);Qb(ud|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[Mc>>2]=27488;B=0;va(448,pd|0);Hc=B;B=0;do if(Hc&1){Jc=Rb()|0;vd=Q;wd=Jc}else{k[pd>>2]=27560;Jc=X+36|0;k[Jc>>2]=0;k[Jc+4>>2]=0;k[Jc+8>>2]=0;k[Jc+12>>2]=0;k[X+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,pd|0,d|0);Kc=B;B=0;if(Kc&1){Kc=Rb()|0;Lc=Q;Yua(d);Yua(Jc);Ava(pd);vd=Lc;wd=Kc;break}Yua(d);B=0;Kc=Ia(40,X|0,122164,29)|0;Lc=B;B=0;do if(!(Lc&1)){B=0;Qc=Xa(253,Kc|0,k[Pa>>2]|0)|0;Oc=B;B=0;if(Oc&1){ab=341;break}B=0;Ia(40,Qc|0,149177,1)|0;Qc=B;B=0;if(Qc&1){ab=341;break}B=0;wa(510,Y|0,pd|0);Qc=B;B=0;if(Qc&1){ab=341;break}B=0;ya(424,Y|0)|0;Qc=B;B=0;if(Qc&1){Qc=Rb()|0;Oc=Q;Yua(Y);xd=Qc;yd=Oc;break}else{Yua(Y);k[X>>2]=27468;k[Mc>>2]=27488;k[pd>>2]=27560;Yua(Jc);Ava(pd);vva(Mc);break h}}else ab=341;while(0);if((ab|0)==341){Kc=Rb()|0;xd=Kc;yd=Q}k[X>>2]=27468;k[Mc>>2]=27488;k[pd>>2]=27560;Yua(Jc);Ava(pd);vva(Mc);bb=xd;cb=yd;Qb(bb|0)}while(0);td=vd;ud=wd;vva(Mc);Qb(ud|0)}while(0);i:do if(Ic){Ya=a+12|0;pd=Z+56|0;Hc=Z+4|0;Mb=Z+56|0;Kc=Z+128|0;Lc=Z+132|0;w=Z+36|0;Oc=Z+52|0;Qc=0;K=0;j:while(1){Pc=k[Za+(Qc<<2)>>2]|0;do if((Pc|0)<-1){Nc=-2-Pc|0;Sc=(Nc|0)/3|0;Rc=(Nc|0)%3|0;Nc=Z4((k[Ya>>2]|0)+(Sc*48|0)|0,Rc)|0;if((Qc|0)<(gb|0)?1:(k[(k[Ya>>2]|0)+(Sc*48|0)+40>>2]|0)!=(k[Nc+40>>2]|0)){zd=Sc;Ad=Rc;ab=348}else Bd=K}else{if((Pc|0)<=-1){Bd=K;break}zd=(Pc|0)/3|0;Ad=(Pc|0)%3|0;ab=348}while(0);do if((ab|0)==348){ab=0;Pc=K+1|0;if((K|0)<=-1){Bd=Pc;break}if((K|0)>=(k[Pa>>2]|0)){Bd=Pc;break}k[(k[sd>>2]|0)+(K*24|0)>>2]=k[(k[Ya>>2]|0)+(zd*48|0)+(j[52932+(Ad<<2)>>1]<<2)>>2];k[(k[sd>>2]|0)+(K*24|0)+4>>2]=k[(k[Ya>>2]|0)+(zd*48|0)+(j[52932+(Ad<<2)+2>>1]<<2)>>2];Jc=k[sd>>2]|0;Rc=Jc+(K*24|0)+12|0;k[Rc>>2]=0;if((Qc|0)>=(gb|0)){Sc=$4(k[Jc+(K*24|0)>>2]|0)|0;Nc=$4(k[(k[sd>>2]|0)+(K*24|0)+4>>2]|0)|0;k[(k[sd>>2]|0)+(K*24|0)+8>>2]=(Sc|0)<(Nc|0)?Sc:Nc;Bd=Pc;break}k[Jc+(K*24|0)+8>>2]=k[rd+(Qc*24|0)+8>>2];k[Rc>>2]=k[rd+(Qc*24|0)+12>>2];k[Z>>2]=27524;k[pd>>2]=27544;B=0;wa(508,Mb|0,Hc|0);Rc=B;B=0;if(Rc&1){ab=355;break j}k[Kc>>2]=0;k[Lc>>2]=-1;k[Z>>2]=27468;k[pd>>2]=27488;B=0;va(448,Hc|0);Rc=B;B=0;if(Rc&1){ab=356;break j}k[Hc>>2]=27560;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[Oc>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Hc|0,d|0);Rc=B;B=0;if(Rc&1){ab=354;break j}Yua(d);B=0;Ia(40,Z|0,122194,9)|0;Rc=B;B=0;if(Rc&1){ab=363;break j}B=0;wa(510,_|0,Hc|0);Rc=B;B=0;if(Rc&1){ab=363;break j}B=0;ya(424,_|0)|0;Rc=B;B=0;if(Rc&1){ab=364;break j}Yua(_);k[Z>>2]=27468;k[pd>>2]=27488;k[Hc>>2]=27560;Yua(w);Ava(Hc);vva(pd);Bd=Pc}while(0);Qc=Qc+1|0;if((Qc|0)>=(Nb|0)){Cd=Bd;break i}else K=Bd}if((ab|0)==354){K=Rb()|0;Qc=Q;Yua(d);Yua(w);Ava(Hc);Dd=Qc;Ed=K;ab=357}else if((ab|0)==355){K=Rb()|0;Fd=Q;Gd=K;vva(pd);Qb(Gd|0)}else if((ab|0)==356){K=Rb()|0;Dd=Q;Ed=K;ab=357}else if((ab|0)==363){K=Rb()|0;Hd=K;Id=Q;ab=365}else if((ab|0)==364){K=Rb()|0;Qc=Q;Yua(_);Hd=K;Id=Qc;ab=365}if((ab|0)==357){Fd=Dd;Gd=Ed;vva(pd);Qb(Gd|0)}else if((ab|0)==365){k[Z>>2]=27468;k[pd>>2]=27488;k[Hc>>2]=27560;Yua(w);Ava(Hc);vva(pd);bb=Hd;cb=Id;Qb(bb|0)}}else Cd=0;while(0);if((Cd|0)==(k[Pa>>2]|0)){if(!rd)break;Tqa(rd);break}sd=$+56|0;Qc=$+4|0;k[$>>2]=27524;k[sd>>2]=27544;B=0;wa(508,$+56|0,Qc|0);K=B;B=0;if(K&1){K=Rb()|0;Jd=Q;Kd=K;vva(sd);Qb(Kd|0)}k[$+128>>2]=0;k[$+132>>2]=-1;k[$>>2]=27468;k[sd>>2]=27488;B=0;va(448,Qc|0);K=B;B=0;do if(K&1){Oc=Rb()|0;Ld=Q;Md=Oc}else{k[Qc>>2]=27560;Oc=$+36|0;k[Oc>>2]=0;k[Oc+4>>2]=0;k[Oc+8>>2]=0;k[Oc+12>>2]=0;k[$+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Qc|0,d|0);Lc=B;B=0;if(Lc&1){Lc=Rb()|0;Kc=Q;Yua(d);Yua(Oc);Ava(Qc);Ld=Kc;Md=Lc;break}Yua(d);B=0;Lc=Ia(40,$|0,122204,64)|0;Kc=B;B=0;k:do if(Kc&1)ab=384;else{B=0;Xa(239,Lc|0,0)|0;Mb=B;B=0;if(Mb&1){ab=384;break}Mb=Ab(20)|0;B=0;eb(502,ba|0,121503,60);Ya=B;B=0;do if(!(Ya&1)){B=0;eb(502,ca|0,121664,21);Mc=B;B=0;if(Mc&1){Mc=Rb()|0;Pc=Q;Yua(ba);Nd=Mc;Od=Pc;break}B=0;wa(510,da|0,Qc|0);Pc=B;B=0;if(Pc&1){Pc=Rb()|0;Pd=1;Qd=Pc;Rd=Q}else{B=0;ua(163,Mb|0,ba|0,ca|0,1436,da|0);Pc=B;B=0;if(Pc&1)Sd=1;else{B=0;eb(503,Mb|0,1240,229);B=0;Sd=0}Pc=Rb()|0;Mc=Q;Yua(da);Pd=Sd;Qd=Pc;Rd=Mc}Yua(ca);Yua(ba);if(Pd){Nd=Qd;Od=Rd}else{Td=Qd;Ud=Rd;break k}}else{Mc=Rb()|0;Nd=Mc;Od=Q}while(0);zb(Mb|0);Td=Nd;Ud=Od}while(0);if((ab|0)==384){Lc=Rb()|0;Td=Lc;Ud=Q}k[$>>2]=27468;k[sd>>2]=27488;k[Qc>>2]=27560;Yua(Oc);Ava(Qc);vva(sd);bb=Td;cb=Ud;Qb(bb|0)}while(0);Jd=Ld;Kd=Md;vva(sd);Qb(Kd|0)}while(0);Kd=k[Sa>>2]|0;if((Kd|0)>0){Md=k[a+8>>2]|0;Ld=0;do{k[Md+(Ld*72|0)+64>>2]=0;Ld=Ld+1|0;Jd=k[Sa>>2]|0}while((Ld|0)<(Jd|0));Vd=Jd}else Vd=Kd;Kd=k[Pa>>2]|0;if((Kd|0)>0){Ld=k[a+16>>2]|0;Md=0;do{Jd=(k[Ld+(Md*24|0)>>2]|0)+64|0;k[Jd>>2]=(k[Jd>>2]|0)+1;Jd=(k[Ld+(Md*24|0)+4>>2]|0)+64|0;k[Jd>>2]=(k[Jd>>2]|0)+1;Md=Md+1|0;Jd=k[Pa>>2]|0}while((Md|0)<(Jd|0));Wd=Jd;Xd=k[Sa>>2]|0;Yd=Wd}else{Xd=Vd;Yd=Kd}if((Xd|0)>0){Xd=k[a+8>>2]|0;Kd=0;do{Vd=Xd+(Kd*72|0)+64|0;k[Vd>>2]=(k[Vd>>2]|0)==2?-1:-2;Kd=Kd+1|0}while((Kd|0)<(k[Sa>>2]|0));Zd=k[Pa>>2]|0}else Zd=Yd;l:do if((Zd|0)>0){Yd=a+16|0;Kd=0;m:while(1){Xd=Kd<<1;Vd=k[Yd>>2]|0;Wd=k[Vd+(Kd*24|0)>>2]|0;Md=Wd+64|0;Ld=k[Md>>2]|0;do if((Ld|0)<0){k[Vd+(Kd*24|0)+16>>2]=0;if((Ld|0)!=-1)break;k[Md>>2]=Xd}else{Jd=(Ld|0)%2|0;Ud=(Ld|0)/2|0;if((Wd|0)!=(k[Vd+(Ud*24|0)+(Jd<<2)>>2]|0))break m;k[Vd+(Kd*24|0)+16>>2]=Vd+(Ud*24|0);Td=k[Yd>>2]|0;k[Td+(Ud*24|0)+16+(Jd<<2)>>2]=Td+(Kd*24|0);k[Md>>2]=-3}while(0);Md=k[Yd>>2]|0;Vd=k[Md+(Kd*24|0)+4>>2]|0;Wd=Vd+64|0;Ld=k[Wd>>2]|0;do if((Ld|0)<0){k[Md+(Kd*24|0)+20>>2]=0;if((Ld|0)!=-1)break;k[Wd>>2]=Xd|1}else{Oc=(Ld|0)%2|0;Td=(Ld|0)/2|0;if((Vd|0)!=(k[Md+(Td*24|0)+(Oc<<2)>>2]|0))break m;k[Md+(Kd*24|0)+20>>2]=Md+(Td*24|0);Jd=k[Yd>>2]|0;k[Jd+(Td*24|0)+16+(Oc<<2)>>2]=Jd+(Kd*24|0);k[Wd>>2]=-3}while(0);Kd=Kd+1|0;if((Kd|0)>=(k[Pa>>2]|0))break l}Kd=ea+56|0;Yd=ea+4|0;k[ea>>2]=27524;k[Kd>>2]=27544;B=0;wa(508,ea+56|0,Yd|0);sd=B;B=0;if(sd&1){sd=Rb()|0;_d=Q;$d=sd;vva(Kd);Qb($d|0)}k[ea+128>>2]=0;k[ea+132>>2]=-1;k[ea>>2]=27468;k[Kd>>2]=27488;B=0;va(448,Yd|0);sd=B;B=0;do if(sd&1){Wd=Rb()|0;ae=Q;be=Wd}else{k[Yd>>2]=27560;Wd=ea+36|0;k[Wd>>2]=0;k[Wd+4>>2]=0;k[Wd+8>>2]=0;k[Wd+12>>2]=0;k[ea+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Yd|0,d|0);Md=B;B=0;if(Md&1){Md=Rb()|0;Vd=Q;Yua(d);Yua(Wd);Ava(Yd);ae=Vd;be=Md;break}Yua(d);B=0;Md=Ia(40,ea|0,122269,78)|0;Vd=B;B=0;n:do if(Vd&1)ab=426;else{B=0;Xa(239,Md|0,0)|0;Ld=B;B=0;if(Ld&1){ab=426;break}Ld=Ab(20)|0;B=0;eb(502,fa|0,121503,60);Xd=B;B=0;do if(!(Xd&1)){B=0;eb(502,ga|0,121664,21);Jd=B;B=0;if(Jd&1){Jd=Rb()|0;Oc=Q;Yua(fa);ce=Oc;de=Jd;break}B=0;wa(510,ha|0,Yd|0);Jd=B;B=0;if(Jd&1){Jd=Rb()|0;ee=1;fe=Jd;ge=Q}else{B=0;ua(163,Ld|0,fa|0,ga|0,1481,ha|0);Jd=B;B=0;if(Jd&1)he=1;else{B=0;eb(503,Ld|0,1240,229);B=0;he=0}Jd=Rb()|0;Oc=Q;Yua(ha);ee=he;fe=Jd;ge=Oc}Yua(ga);Yua(fa);if(ee){ce=ge;de=fe}else{ie=fe;je=ge;break n}}else{Oc=Rb()|0;ce=Q;de=Oc}while(0);zb(Ld|0);ie=de;je=ce}while(0);if((ab|0)==426){Md=Rb()|0;ie=Md;je=Q}k[ea>>2]=27468;k[Kd>>2]=27488;k[Yd>>2]=27560;Yua(Wd);Ava(Yd);vva(Kd);bb=ie;cb=je;Qb(bb|0)}while(0);_d=ae;$d=be;vva(Kd);Qb($d|0)}while(0);$d=a+60|0;if(k[$d>>2]|0){be=ia+56|0;ae=ia+4|0;k[ia>>2]=27524;k[be>>2]=27544;B=0;wa(508,ia+56|0,ae|0);_d=B;B=0;if(_d&1){_d=Rb()|0;ke=Q;le=_d;vva(be);Qb(le|0)}k[ia+128>>2]=0;k[ia+132>>2]=-1;k[ia>>2]=27468;k[be>>2]=27488;B=0;va(448,ae|0);_d=B;B=0;do if(_d&1){je=Rb()|0;me=Q;ne=je}else{k[ae>>2]=27560;je=ia+36|0;k[je>>2]=0;k[je+4>>2]=0;k[je+8>>2]=0;k[je+12>>2]=0;k[ia+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ae|0,d|0);ie=B;B=0;if(ie&1){ie=Rb()|0;ea=Q;Yua(d);Yua(je);Ava(ae);me=ea;ne=ie;break}Yua(d);B=0;ie=Ia(40,ia|0,122348,24)|0;ea=B;B=0;o:do if(ea&1)ab=452;else{B=0;Xa(239,ie|0,0)|0;ce=B;B=0;if(ce&1){ab=452;break}ce=Ab(20)|0;B=0;eb(502,ja|0,121503,60);de=B;B=0;do if(!(de&1)){B=0;eb(502,ka|0,121664,21);ge=B;B=0;if(ge&1){ge=Rb()|0;fe=Q;Yua(ja);oe=ge;pe=fe;break}B=0;wa(510,la|0,ae|0);fe=B;B=0;if(fe&1){fe=Rb()|0;qe=1;re=fe;se=Q}else{B=0;ua(163,ce|0,ja|0,ka|0,1498,la|0);fe=B;B=0;if(fe&1)te=1;else{B=0;eb(503,ce|0,1240,229);B=0;te=0}fe=Rb()|0;ge=Q;Yua(la);qe=te;re=fe;se=ge}Yua(ka);Yua(ja);if(qe){oe=re;pe=se}else{ue=re;ve=se;break o}}else{ge=Rb()|0;oe=ge;pe=Q}while(0);zb(ce|0);ue=oe;ve=pe}while(0);if((ab|0)==452){ie=Rb()|0;ue=ie;ve=Q}k[ia>>2]=27468;k[be>>2]=27488;k[ae>>2]=27560;Yua(je);Ava(ae);vva(be);bb=ue;cb=ve;Qb(bb|0)}while(0);ke=me;le=ne;vva(be);Qb(le|0)}k[$d>>2]=0;le=k[Qa>>2]|0;be=Rqa(le>>>0>1073741823?-1:le<<2)|0;if((le|0)>0){WEa(be|0,-1,((le|0)>1?le:1)<<2|0)|0;ne=a+12|0;me=Za+4|0;ke=0;ve=le;le=0;while(1){ue=be+(le<<2)|0;if((k[ue>>2]|0)<0){k[ue>>2]=ke;ue=k[(k[ne>>2]|0)+(le*48|0)+40>>2]|0;k[Za>>2]=le;k[me>>2]=0;ae=1;p:while(1){ia=Za+(ae<<2)|0;pe=Za+(ae+-1<<2)|0;oe=k[ia>>2]|0;k[ia>>2]=oe+1;q:do if((oe|0)<3){se=oe;r:while(1){re=(k[ne>>2]|0)+((k[pe>>2]|0)*48|0)|0;qe=Z4(re,se)|0;do if((qe|0)!=0&(P4(re,se)|0)==0){ja=(qe-(k[ne>>2]|0)|0)/48|0;ka=be+(ja<<2)|0;if((k[ka>>2]|0)!=-1)break;if((k[qe+40>>2]|0)==(ue|0)){we=ja;xe=ka;break r}}while(0);se=k[ia>>2]|0;k[ia>>2]=se+1;if((se|0)>=3)break q}se=k[$d>>2]|0;k[xe>>2]=se;k[Za+(ae+1<<2)>>2]=we;Ld=ae+2|0;k[Za+(Ld<<2)>>2]=0;if((ae|0)>-2){ae=Ld;continue p}else{ye=se;break p}}while(0);if((ae|0)>2)ae=ae+-2|0;else{ab=471;break}}if((ab|0)==471){ab=0;ye=k[$d>>2]|0}ae=ye+1|0;k[$d>>2]=ae;ze=k[Qa>>2]|0;Ae=ae}else{ze=ve;Ae=ke}le=le+1|0;if((le|0)>=(ze|0)){Be=Ae;break}else{ke=Ae;ve=ze}}}else Be=0;ze=($a|0)>3;s:do if(ze){$a=ma+56|0;ve=ma+4|0;k[ma>>2]=27524;k[$a>>2]=27544;B=0;wa(508,ma+56|0,ve|0);Ae=B;B=0;if(Ae&1){Ae=Rb()|0;Ce=Q;De=Ae;vva($a);Qb(De|0)}k[ma+128>>2]=0;k[ma+132>>2]=-1;k[ma>>2]=27468;k[$a>>2]=27488;B=0;va(448,ve|0);Ae=B;B=0;do if(Ae&1){ke=Rb()|0;Ee=Q;Fe=ke}else{k[ve>>2]=27560;ke=ma+36|0;k[ke>>2]=0;k[ke+4>>2]=0;k[ke+8>>2]=0;k[ke+12>>2]=0;k[ma+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ve|0,d|0);le=B;B=0;if(le&1){le=Rb()|0;ye=Q;Yua(d);Yua(ke);Ava(ve);Ee=ye;Fe=le;break}Yua(d);B=0;le=Ia(40,ma|0,122373,33)|0;ye=B;B=0;do if(!(ye&1)){B=0;we=Xa(253,le|0,k[$d>>2]|0)|0;xe=B;B=0;if(xe&1){ab=489;break}B=0;Ia(40,we|0,149177,1)|0;we=B;B=0;if(we&1){ab=489;break}B=0;wa(510,na|0,ve|0);we=B;B=0;if(we&1){ab=489;break}B=0;ya(424,na|0)|0;we=B;B=0;if(we&1){we=Rb()|0;xe=Q;Yua(na);Ge=we;He=xe;break}else{Yua(na);k[ma>>2]=27468;k[$a>>2]=27488;k[ve>>2]=27560;Yua(ke);Ava(ve);vva($a);Ie=k[$d>>2]|0;break s}}else ab=489;while(0);if((ab|0)==489){le=Rb()|0;Ge=le;He=Q}k[ma>>2]=27468;k[$a>>2]=27488;k[ve>>2]=27560;Yua(ke);Ava(ve);vva($a);bb=Ge;cb=He;Qb(bb|0)}while(0);Ce=Ee;De=Fe;vva($a);Qb(De|0)}else Ie=Be;while(0);Be=Rqa(Ie>>>0>268435455?-1:Ie<<4)|0;De=a+28|0;k[De>>2]=Be;if((Ie|0)>0){Fe=0;do{k[Be+(Fe<<4)>>2]=0;Fe=Fe+1|0}while((Fe|0)<(Ie|0))}if((k[Qa>>2]|0)>0){Fe=a+12|0;Be=0;Ee=0;while(1){Ce=be+(Be<<2)|0;He=Z4((k[Fe>>2]|0)+(Be*48|0)|0,0)|0;if((He|0)!=0?(Ge=k[Fe>>2]|0,(k[He+40>>2]|0)==(k[Ge+(Be*48|0)+40>>2]|0)):0){Je=Ge;Ke=Ee}else ab=498;do if((ab|0)==498){ab=0;Ge=k[Ce>>2]|0;He=k[De>>2]|0;ma=He+(Ge<<4)|0;na=k[Fe>>2]|0;if(k[ma>>2]|0){Je=na;Ke=Ee;break}k[ma>>2]=na+(Be*48|0);k[He+(Ge<<4)+4>>2]=k[na+(Be*48|0)+40>>2];k[He+(Ge<<4)+8>>2]=0;k[He+(Ge<<4)+12>>2]=0;Je=na;Ke=Ee+1|0}while(0);$a=Z4(Je+(Be*48|0)|0,1)|0;if(($a|0)!=0?(na=k[Fe>>2]|0,(k[$a+40>>2]|0)==(k[na+(Be*48|0)+40>>2]|0)):0){Le=na;Me=Ke}else ab=652;do if((ab|0)==652){ab=0;na=k[Ce>>2]|0;$a=k[De>>2]|0;Ge=$a+(na<<4)|0;He=k[Fe>>2]|0;if(k[Ge>>2]|0){Le=He;Me=Ke;break}k[Ge>>2]=He+(Be*48|0);k[$a+(na<<4)+4>>2]=k[He+(Be*48|0)+40>>2];k[$a+(na<<4)+8>>2]=1;k[$a+(na<<4)+12>>2]=0;Le=He;Me=Ke+1|0}while(0);He=Z4(Le+(Be*48|0)|0,2)|0;if((He|0)!=0?(k[He+40>>2]|0)==(k[(k[Fe>>2]|0)+(Be*48|0)+40>>2]|0):0)Ne=Me;else ab=656;do if((ab|0)==656){ab=0;He=k[Ce>>2]|0;na=k[De>>2]|0;$a=na+(He<<4)|0;if(k[$a>>2]|0){Ne=Me;break}Ge=k[Fe>>2]|0;k[$a>>2]=Ge+(Be*48|0);k[na+(He<<4)+4>>2]=k[Ge+(Be*48|0)+40>>2];k[na+(He<<4)+8>>2]=2;k[na+(He<<4)+12>>2]=0;Ne=Me+1|0}while(0);Be=Be+1|0;if((Be|0)>=(k[Qa>>2]|0)){Oe=Ne;break}else Ee=Ne}Pe=k[$d>>2]|0;Qe=Oe}else{Pe=Ie;Qe=0}Tqa(be);if((Qe|0)!=(Pe|0)){Pe=oa+56|0;Qe=oa+4|0;k[oa>>2]=27524;k[Pe>>2]=27544;B=0;wa(508,oa+56|0,Qe|0);be=B;B=0;if(be&1){be=Rb()|0;Re=Q;Se=be;vva(Pe);Qb(Se|0)}k[oa+128>>2]=0;k[oa+132>>2]=-1;k[oa>>2]=27468;k[Pe>>2]=27488;B=0;va(448,Qe|0);be=B;B=0;do if(be&1){Ie=Rb()|0;Te=Q;Ue=Ie}else{k[Qe>>2]=27560;Ie=oa+36|0;k[Ie>>2]=0;k[Ie+4>>2]=0;k[Ie+8>>2]=0;k[Ie+12>>2]=0;k[oa+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Qe|0,d|0);Oe=B;B=0;if(Oe&1){Oe=Rb()|0;Ne=Q;Yua(d);Yua(Ie);Ava(Qe);Te=Ne;Ue=Oe;break}Yua(d);B=0;Oe=Ia(40,oa|0,122407,16)|0;Ne=B;B=0;t:do if(Ne&1)ab=518;else{B=0;Xa(239,Oe|0,0)|0;Ee=B;B=0;if(Ee&1){ab=518;break}Ee=Ab(20)|0;B=0;eb(502,pa|0,121503,60);Be=B;B=0;do if(!(Be&1)){B=0;eb(502,qa|0,121664,21);Me=B;B=0;if(Me&1){Me=Rb()|0;Fe=Q;Yua(pa);Ve=Me;We=Fe;break}B=0;wa(510,ra|0,Qe|0);Fe=B;B=0;if(Fe&1){Fe=Rb()|0;Xe=1;Ye=Fe;Ze=Q}else{B=0;ua(163,Ee|0,pa|0,qa|0,1567,ra|0);Fe=B;B=0;if(Fe&1)_e=1;else{B=0;eb(503,Ee|0,1240,229);B=0;_e=0}Fe=Rb()|0;Me=Q;Yua(ra);Xe=_e;Ye=Fe;Ze=Me}Yua(qa);Yua(pa);if(Xe){Ve=Ye;We=Ze}else{$e=Ye;af=Ze;break t}}else{Me=Rb()|0;Ve=Me;We=Q}while(0);zb(Ee|0);$e=Ve;af=We}while(0);if((ab|0)==518){Oe=Rb()|0;$e=Oe;af=Q}k[oa>>2]=27468;k[Pe>>2]=27488;k[Qe>>2]=27560;Yua(Ie);Ava(Qe);vva(Pe);bb=$e;cb=af;Qb(bb|0)}while(0);Re=Te;Se=Ue;vva(Pe);Qb(Se|0)}Tqa(Za);Za=k[Sa>>2]|0;Se=Rqa(Za>>>0>1073741823?-1:Za<<2)|0;Pe=(Za|0)>0;if(Pe)WEa(Se|0,-1,((Za|0)>1?Za:1)<<2|0)|0;Ue=k[Pa>>2]|0;if((Ue|0)>0){Te=k[a+16>>2]|0;Re=k[a+8>>2]|0;af=0;do{k[Se+((((k[Te+(af*24|0)>>2]|0)-Re|0)/72|0)<<2)>>2]=0;k[Se+((((k[Te+(af*24|0)+4>>2]|0)-Re|0)/72|0)<<2)>>2]=0;af=af+1|0}while((af|0)<(Ue|0))}if(Pe){Pe=0;af=0;while(1){Re=Se+(Pe<<2)|0;if(!(k[Re>>2]|0)){k[Re>>2]=af;bf=af+1|0}else bf=af;Pe=Pe+1|0;if((Pe|0)>=(Za|0)){cf=bf;break}else af=bf}}else cf=0;k[(k[a>>2]|0)+4>>2]=cf;k[(k[a>>2]|0)+8>>2]=Ue;bf=Rqa(cf>>>0>59652323?-1:cf*72|0)|0;do if(!cf)df=Ue;else{af=bf+(cf*72|0)|0;Za=bf;while(1){B=0;va(530,Za|0);Pe=B;B=0;if(Pe&1)break;k[Za+68>>2]=0;Za=Za+72|0;if((Za|0)==(af|0)){ab=539;break}}if((ab|0)==539){df=k[Pa>>2]|0;break}af=Rb()|0;Za=Q;Tqa(bf);bb=af;cb=Za;Qb(bb|0)}while(0);k[(k[a>>2]|0)+20>>2]=bf;bf=Rqa(df>>>0>59652323?-1:df*72|0)|0;if(df){cf=bf+(df*72|0)|0;df=bf;do{Ue=df+16|0;df=df+72|0;k[Ue>>2]=0;k[Ue+4>>2]=0;k[Ue+8>>2]=0;k[Ue+12>>2]=0;k[Ue+16>>2]=0;k[Ue+20>>2]=0;k[Ue+24>>2]=0;k[Ue+28>>2]=0}while((df|0)!=(cf|0))}k[(k[a>>2]|0)+24>>2]=bf;bf=k[$d>>2]|0;k[(k[a>>2]|0)+12>>2]=bf;cf=Rqa(bf>>>0>357913941?-1:bf*12|0)|0;k[(k[a>>2]|0)+32>>2]=cf;u:do if(ze){cf=sa+56|0;bf=sa+4|0;k[sa>>2]=27524;k[cf>>2]=27544;B=0;wa(508,sa+56|0,bf|0);df=B;B=0;if(df&1){df=Rb()|0;ef=Q;ff=df;vva(cf);Qb(ff|0)}k[sa+128>>2]=0;k[sa+132>>2]=-1;k[sa>>2]=27468;k[cf>>2]=27488;B=0;va(448,bf|0);df=B;B=0;do if(df&1){Ue=Rb()|0;gf=Q;hf=Ue}else{k[bf>>2]=27560;Ue=sa+36|0;k[Ue>>2]=0;k[Ue+4>>2]=0;k[Ue+8>>2]=0;k[Ue+12>>2]=0;k[sa+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,bf|0,d|0);Za=B;B=0;if(Za&1){Za=Rb()|0;af=Q;Yua(d);Yua(Ue);Ava(bf);gf=af;hf=Za;break}Yua(d);B=0;Za=Ia(40,sa|0,122424,24)|0;af=B;B=0;do if(!(af&1)){B=0;Ie=Xa(253,Za|0,k[(k[a>>2]|0)+4>>2]|0)|0;Pe=B;B=0;if(Pe&1){ab=561;break}B=0;Pe=Ia(40,Ie|0,122449,22)|0;Ie=B;B=0;if(Ie&1){ab=561;break}B=0;Ie=Xa(253,Pe|0,k[(k[a>>2]|0)+8>>2]|0)|0;Pe=B;B=0;if(Pe&1){ab=561;break}B=0;Ia(40,Ie|0,149177,1)|0;Ie=B;B=0;if(Ie&1){ab=561;break}B=0;wa(510,ta|0,bf|0);Ie=B;B=0;if(Ie&1){ab=561;break}B=0;ya(424,ta|0)|0;Ie=B;B=0;if(Ie&1){Ie=Rb()|0;Pe=Q;Yua(ta);jf=Ie;kf=Pe;break}else{Yua(ta);k[sa>>2]=27468;k[cf>>2]=27488;k[bf>>2]=27560;Yua(Ue);Ava(bf);vva(cf);break u}}else ab=561;while(0);if((ab|0)==561){Za=Rb()|0;jf=Za;kf=Q}k[sa>>2]=27468;k[cf>>2]=27488;k[bf>>2]=27560;Yua(Ue);Ava(bf);vva(cf);bb=jf;cb=kf;Qb(bb|0)}while(0);ef=gf;ff=hf;vva(cf);Qb(ff|0)}while(0);ff=k[(k[a>>2]|0)+4>>2]|0;k[a+152>>2]=ff;hf=Rqa(ff>>>0>178956970?-1:ff*24|0)|0;v:do if(ff){gf=hf+(ff*24|0)|0;ef=hf;while(1){B=0;va(531,ef|0);kf=B;B=0;if(kf&1)break;ef=ef+24|0;if((ef|0)==(gf|0))break v}gf=Rb()|0;ef=Q;Tqa(hf);bb=gf;cb=ef;Qb(bb|0)}while(0);ff=a+156|0;k[ff>>2]=hf;k[a+160>>2]=0;k[a+164>>2]=0;hf=k[Sa>>2]|0;if((hf|0)>0){ef=a+8|0;gf=hf;hf=0;while(1){cf=k[Se+(hf<<2)>>2]|0;if((cf|0)>-1){kf=k[(k[a>>2]|0)+20>>2]|0;jf=kf+(cf*72|0)|0;sa=(k[ef>>2]|0)+(hf*72|0)|0;ta=jf+68|0;do{k[jf>>2]=k[sa>>2];jf=jf+4|0;sa=sa+4|0}while((jf|0)<(ta|0));k[kf+(cf*72|0)+64>>2]=0;sa=(k[ff>>2]|0)+(cf*24|0)|0;dqa(xa,(k[ef>>2]|0)+(hf*72|0)|0,(k[(k[a>>2]|0)+20>>2]|0)+(cf*72|0)|0);k[sa>>2]=k[xa>>2];k[sa+4>>2]=k[xa+4>>2];k[sa+8>>2]=k[xa+8>>2];k[sa+12>>2]=k[xa+12>>2];k[sa+16>>2]=k[xa+16>>2];lf=k[Sa>>2]|0}else lf=gf;hf=hf+1|0;if((hf|0)>=(lf|0))break;else gf=lf}}lf=k[a>>2]|0;gf=lf+40|0;hf=(k[lf+20>>2]|0)+8|0;k[gf>>2]=k[hf>>2];k[gf+4>>2]=k[hf+4>>2];k[gf+8>>2]=k[hf+8>>2];k[gf+12>>2]=k[hf+12>>2];hf=k[a>>2]|0;gf=hf+56|0;lf=(k[hf+20>>2]|0)+8|0;k[gf>>2]=k[lf>>2];k[gf+4>>2]=k[lf+4>>2];k[gf+8>>2]=k[lf+8>>2];k[gf+12>>2]=k[lf+12>>2];lf=k[a>>2]|0;if((k[lf+4>>2]|0)>0){gf=lf;hf=0;while(1){xa=gf+40|0;La=+p[xa>>3];_a=+p[(k[gf+20>>2]|0)+(hf*72|0)+8>>3];p[xa>>3]=La<_a?La:_a;xa=k[a>>2]|0;ef=xa+48|0;_a=+p[ef>>3];La=+p[(k[xa+20>>2]|0)+(hf*72|0)+16>>3];p[ef>>3]=_a<La?_a:La;ef=k[a>>2]|0;xa=ef+56|0;La=+p[xa>>3];_a=+p[(k[ef+20>>2]|0)+(hf*72|0)+8>>3];p[xa>>3]=La>_a?La:_a;xa=k[a>>2]|0;ef=xa+64|0;_a=+p[ef>>3];La=+p[(k[xa+20>>2]|0)+(hf*72|0)+16>>3];p[ef>>3]=_a>La?_a:La;hf=hf+1|0;ef=k[a>>2]|0;if((hf|0)>=(k[ef+4>>2]|0)){mf=ef;break}else gf=ef}}else mf=lf;lf=mf+40|0;La=+p[lf>>3];gf=mf+48|0;_a=+p[gf>>3];nf=(+p[mf+56>>3]-La)*.05;of=(+p[mf+64>>3]-_a)*.05;p[lf>>3]=La-nf;p[gf>>3]=_a-of;gf=k[a>>2]|0;lf=gf+56|0;p[lf>>3]=nf+ +p[lf>>3];lf=gf+64|0;p[lf>>3]=of+ +p[lf>>3];lf=k[a>>2]|0;of=+p[lf+56>>3]-+p[lf+40>>3];nf=+p[lf+64>>3]-+p[lf+48>>3];p[lf+72>>3]=1073741823.0/(of>nf?of:nf);lf=k[a>>2]|0;if(+p[lf+72>>3]<=0.0){Tqa(Se);gf=za+56|0;mf=za+4|0;k[za>>2]=27524;k[gf>>2]=27544;B=0;wa(508,za+56|0,mf|0);hf=B;B=0;if(hf&1){hf=Rb()|0;pf=Q;qf=hf;vva(gf);Qb(qf|0)}k[za+128>>2]=0;k[za+132>>2]=-1;k[za>>2]=27468;k[gf>>2]=27488;B=0;va(448,mf|0);hf=B;B=0;do if(hf&1){ef=Rb()|0;rf=Q;sf=ef}else{k[mf>>2]=27560;ef=za+36|0;k[ef>>2]=0;k[ef+4>>2]=0;k[ef+8>>2]=0;k[ef+12>>2]=0;k[za+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,mf|0,d|0);xa=B;B=0;if(xa&1){xa=Rb()|0;ff=Q;Yua(d);Yua(ef);Ava(mf);rf=ff;sf=xa;break}Yua(d);B=0;xa=Ia(40,za|0,122472,60)|0;ff=B;B=0;w:do if(ff&1)ab=592;else{B=0;Xa(239,xa|0,0)|0;sa=B;B=0;if(sa&1){ab=592;break}sa=Ab(20)|0;B=0;eb(502,Aa|0,121503,60);jf=B;B=0;do if(!(jf&1)){B=0;eb(502,Ba|0,121664,21);ta=B;B=0;if(ta&1){ta=Rb()|0;ze=Q;Yua(Aa);tf=ta;uf=ze;break}B=0;wa(510,Ca|0,mf|0);ze=B;B=0;if(ze&1){ze=Rb()|0;vf=1;wf=ze;xf=Q}else{B=0;ua(163,sa|0,Aa|0,Ba|0,1628,Ca|0);ze=B;B=0;if(ze&1)yf=1;else{B=0;eb(503,sa|0,1240,229);B=0;yf=0}ze=Rb()|0;ta=Q;Yua(Ca);vf=yf;wf=ze;xf=ta}Yua(Ba);Yua(Aa);if(vf){tf=wf;uf=xf}else{zf=wf;Af=xf;break w}}else{ta=Rb()|0;tf=ta;uf=Q}while(0);zb(sa|0);zf=tf;Af=uf}while(0);if((ab|0)==592){xa=Rb()|0;zf=xa;Af=Q}k[za>>2]=27468;k[gf>>2]=27488;k[mf>>2]=27560;Yua(ef);Ava(mf);vva(gf);bb=zf;cb=Af;Qb(bb|0)}while(0);pf=rf;qf=sf;vva(gf);Qb(qf|0)}qf=lf+4|0;lf=k[qf>>2]|0;gf=Rqa(lf>>>0>536870911?-1:lf<<3)|0;lf=k[qf>>2]|0;if((lf|0)>0)WEa(gf|0,0,((lf|0)>1?lf:1)<<3|0)|0;lf=Qqa(20)|0;B=0;eb(522,lf|0,k[Pa>>2]|0,k[Sa>>2]|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;qf=Q;Sqa(lf);bb=Sa;cb=qf;Qb(bb|0)}x:do if((k[Pa>>2]|0)>0){qf=a+16|0;Sa=a+8|0;nf=G;sf=0;while(1){rf=k[qf>>2]|0;pf=k[Sa>>2]|0;Af=((k[rf+(sf*24|0)>>2]|0)-pf|0)/72|0;zf=((k[rf+(sf*24|0)+4>>2]|0)-pf|0)/72|0;pf=k[Se+(Af<<2)>>2]|0;rf=k[Se+(zf<<2)>>2]|0;mf=k[a>>2]|0;k[(k[mf+24>>2]|0)+(sf*72|0)>>2]=(k[mf+20>>2]|0)+(pf*72|0);mf=k[a>>2]|0;k[(k[mf+24>>2]|0)+(sf*72|0)+4>>2]=(k[mf+20>>2]|0)+(rf*72|0);k[(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)+64>>2]=0;mf=(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)+16|0;k[mf>>2]=0;k[mf+4>>2]=0;k[mf+8>>2]=0;k[mf+12>>2]=0;mf=(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)+32|0;k[mf>>2]=0;k[mf+4>>2]=0;k[mf+8>>2]=0;k[mf+12>>2]=0;mf=k[qf>>2]|0;za=mf+(sf*24|0)+12|0;uf=(k[za>>2]|0)==0;k[za>>2]=(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0);if(uf)Bf=mf;else{Apa(k[(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)>>2]|0);Apa(k[(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)+4>>2]|0);wpa((k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)|0);Bf=k[qf>>2]|0}mf=k[(k[a>>2]|0)+20>>2]|0;of=+p[mf+(pf*72|0)+8>>3]-+p[mf+(rf*72|0)+8>>3];_a=+p[mf+(pf*72|0)+16>>3]-+p[mf+(rf*72|0)+16>>3];La=+aa(+(of*of+_a*_a));uf=mf+(rf*72|0)+64|0;k[uf>>2]=(k[uf>>2]|0)+1;uf=(k[(k[a>>2]|0)+20>>2]|0)+(pf*72|0)+64|0;k[uf>>2]=(k[uf>>2]|0)+1;uf=gf+(pf<<3)|0;p[uf>>3]=La+ +p[uf>>3];uf=gf+(rf<<3)|0;p[uf>>3]=La+ +p[uf>>3];k[(k[(k[a>>2]|0)+24>>2]|0)+(sf*72|0)+8>>2]=k[Bf+(sf*24|0)+8>>2];if((aqa(lf,Af,zf)|0)!=(sf|0))break;_a=nf<La?nf:La;sf=sf+1|0;if((sf|0)>=(k[Pa>>2]|0)){Cf=_a;break x}else nf=_a}Tqa(gf);Tqa(Se);sf=Da+56|0;qf=Da+4|0;k[Da>>2]=27524;k[sf>>2]=27544;B=0;wa(508,Da+56|0,qf|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Df=Q;Ef=Sa;vva(sf);Qb(Ef|0)}k[Da+128>>2]=0;k[Da+132>>2]=-1;k[Da>>2]=27468;k[sf>>2]=27488;B=0;va(448,qf|0);Sa=B;B=0;do if(Sa&1){ef=Rb()|0;Ff=Q;Gf=ef}else{k[qf>>2]=27560;ef=Da+36|0;k[ef>>2]=0;k[ef+4>>2]=0;k[ef+8>>2]=0;k[ef+12>>2]=0;k[Da+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,qf|0,d|0);zf=B;B=0;if(zf&1){zf=Rb()|0;Af=Q;Yua(d);Yua(ef);Ava(qf);Ff=Af;Gf=zf;break}Yua(d);B=0;zf=Ia(40,Da|0,122533,37)|0;Af=B;B=0;y:do if(Af&1)ab=626;else{B=0;Xa(239,zf|0,0)|0;uf=B;B=0;if(uf&1){ab=626;break}uf=Ab(20)|0;B=0;eb(502,Ea|0,121503,60);rf=B;B=0;do if(!(rf&1)){B=0;eb(502,Fa|0,121664,21);pf=B;B=0;if(pf&1){pf=Rb()|0;mf=Q;Yua(Ea);Hf=pf;If=mf;break}B=0;wa(510,Ga|0,qf|0);mf=B;B=0;if(mf&1){mf=Rb()|0;Jf=1;Kf=mf;Lf=Q}else{B=0;ua(163,uf|0,Ea|0,Fa|0,1681,Ga|0);mf=B;B=0;if(mf&1)Mf=1;else{B=0;eb(503,uf|0,1240,229);B=0;Mf=0}mf=Rb()|0;pf=Q;Yua(Ga);Jf=Mf;Kf=mf;Lf=pf}Yua(Fa);Yua(Ea);if(Jf){Hf=Kf;If=Lf}else{Nf=Kf;Of=Lf;break y}}else{pf=Rb()|0;Hf=pf;If=Q}while(0);zb(uf|0);Nf=Hf;Of=If}while(0);if((ab|0)==626){zf=Rb()|0;Nf=zf;Of=Q}k[Da>>2]=27468;k[sf>>2]=27488;k[qf>>2]=27560;Yua(ef);Ava(qf);vva(sf);bb=Nf;cb=Of;Qb(bb|0)}while(0);Df=Ff;Ef=Gf;vva(sf);Qb(Ef|0)}else Cf=G;while(0);Ef=k[a>>2]|0;if((k[Ef+4>>2]|0)>0){Gf=Ef;Ef=0;do{Ff=k[Gf+20>>2]|0;Df=k[Ff+(Ef*72|0)+64>>2]|0;Of=Ff+(Ef*72|0)+24|0;if((Df|0)>0){Kpa(Ha,+p[gf+(Ef<<3)>>3]/+(Df|0));k[Of>>2]=k[Ha>>2];k[Of+4>>2]=k[Ha+4>>2];k[Of+8>>2]=k[Ha+8>>2];k[Of+12>>2]=k[Ha+12>>2];k[Of+16>>2]=k[Ha+16>>2];k[Of+20>>2]=k[Ha+20>>2]}else{Kpa(Ja,Cf);k[Of>>2]=k[Ja>>2];k[Of+4>>2]=k[Ja+4>>2];k[Of+8>>2]=k[Ja+8>>2];k[Of+12>>2]=k[Ja+12>>2];k[Of+16>>2]=k[Ja+16>>2];k[Of+20>>2]=k[Ja+20>>2]}Ef=Ef+1|0;Gf=k[a>>2]|0}while((Ef|0)<(k[Gf+4>>2]|0))}Tqa(gf);if((k[$d>>2]|0)>0){gf=a+12|0;Gf=a+8|0;Ef=a+16|0;Ja=k[De>>2]|0;Ha=k[Gf>>2]|0;Of=0;do{Df=k[gf>>2]|0;Ff=((k[Ja+(Of<<4)>>2]|0)-Df|0)/48|0;Nf=k[Ja+(Of<<4)+8>>2]|0;Da=Df;Df=((k[Da+(Ff*48|0)+(j[52932+(Nf<<2)>>1]<<2)>>2]|0)-Ha|0)/72|0;If=bqa(lf,Df,((k[Da+(Ff*48|0)+(j[52932+(Nf<<2)+2>>1]<<2)>>2]|0)-Ha|0)/72|0)|0;Ha=k[Gf>>2]|0;Nf=k[Ef>>2]|0;Ff=(Ha+(Df*72|0)|0)==(k[Nf+(If*24|0)>>2]|0)?1:-1;Ja=k[De>>2]|0;k[Ja+(Of<<4)+8>>2]=Ff;k[Ja+(Of<<4)+12>>2]=Nf+(If*24|0);Nf=k[a>>2]|0;k[(k[Nf+32>>2]|0)+(Of*12|0)>>2]=(k[Nf+24>>2]|0)+(If*72|0);k[(k[(k[a>>2]|0)+32>>2]|0)+(Of*12|0)+4>>2]=Ff;k[(k[(k[a>>2]|0)+32>>2]|0)+(Of*12|0)+8>>2]=k[Ja+(Of<<4)+4>>2];Of=Of+1|0}while((Of|0)<(k[$d>>2]|0))}$d=k[lf+12>>2]|0;if($d)Tqa($d);$d=k[lf+16>>2]|0;if($d)Tqa($d);Sqa(lf);Tqa(Se);if((k[Qa>>2]|0)<=0){r=c;return}Se=a+12|0;a=0;do{lf=(k[Se>>2]|0)+(a*48|0)|0;U4(lf,0,0,(N4(lf,0)|0)&65535);lf=(k[Se>>2]|0)+(a*48|0)|0;U4(lf,1,0,(N4(lf,1)|0)&65535);lf=(k[Se>>2]|0)+(a*48|0)|0;U4(lf,2,0,(N4(lf,2)|0)&65535);a=a+1|0}while((a|0)<(k[Qa>>2]|0));r=c;return}c=g+56|0;Qa=g+4|0;k[g>>2]=27524;k[c>>2]=27544;B=0;wa(508,g+56|0,Qa|0);a=B;B=0;if(a&1){a=Rb()|0;Pf=Q;Qf=a;vva(c);Qb(Qf|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[c>>2]=27488;B=0;va(448,Qa|0);a=B;B=0;do if(a&1){Se=Rb()|0;Rf=Q;Sf=Se}else{k[Qa>>2]=27560;Se=g+36|0;k[Se>>2]=0;k[Se+4>>2]=0;k[Se+8>>2]=0;k[Se+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Qa|0,d|0);lf=B;B=0;if(lf&1){lf=Rb()|0;$d=Q;Yua(d);Yua(Se);Ava(Qa);Rf=$d;Sf=lf;break}Yua(d);B=0;lf=Ia(40,g|0,121627,36)|0;$d=B;B=0;z:do if(!($d&1)?(B=0,Xa(239,lf|0,0)|0,Of=B,B=0,!(Of&1)):0){Of=Ab(20)|0;B=0;eb(502,h|0,121503,60);Ja=B;B=0;do if(!(Ja&1)){B=0;eb(502,i|0,121664,21);De=B;B=0;if(De&1){De=Rb()|0;Ha=Q;Yua(h);Tf=Ha;Uf=De;break}B=0;wa(510,l|0,Qa|0);De=B;B=0;if(De&1){De=Rb()|0;Vf=Q;Wf=De;Xf=1}else{B=0;ua(163,Of|0,h|0,i|0,1294,l|0);De=B;B=0;if(De&1)Yf=1;else{B=0;eb(503,Of|0,1240,229);B=0;Yf=0}De=Rb()|0;Ha=Q;Yua(l);Vf=Ha;Wf=De;Xf=Yf}Yua(i);Yua(h);if(Xf){Tf=Vf;Uf=Wf}else{Zf=Wf;_f=Vf;break z}}else{De=Rb()|0;Tf=Q;Uf=De}while(0);zb(Of|0);Zf=Uf;_f=Tf}else ab=35;while(0);if((ab|0)==35){lf=Rb()|0;Zf=lf;_f=Q}k[g>>2]=27468;k[c>>2]=27488;k[Qa>>2]=27560;Yua(Se);Ava(Qa);vva(c);bb=Zf;cb=_f;Qb(bb|0)}while(0);Pf=Rf;Qf=Sf;vva(c);Qb(Qf|0)}function c5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,C=0.0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0.0,P=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;b=r;r=r+512|0;c=b+492|0;d=b+344|0;e=b+480|0;f=b+332|0;g=b+320|0;h=b+184|0;i=b+36|0;j=b+48|0;l=b+24|0;m=b+12|0;n=b;o=a+72|0;q=a+8|0;s=k[q>>2]|0;t=s+8|0;k[o>>2]=k[t>>2];k[o+4>>2]=k[t+4>>2];k[o+8>>2]=k[t+8>>2];k[o+12>>2]=k[t+12>>2];u=a+88|0;k[u>>2]=k[t>>2];k[u+4>>2]=k[t+4>>2];k[u+8>>2]=k[t+8>>2];k[u+12>>2]=k[t+12>>2];t=a+44|0;v=k[t>>2]|0;w=(v|0)>0;if(w){x=a+80|0;y=a+96|0;z=+p[o>>3];A=+p[x>>3];C=+p[u>>3];D=+p[y>>3];E=0;while(1){F=s+(E*72|0)+8|0;G=+p[F>>3];H=z<G?z:G;p[o>>3]=H;I=s+(E*72|0)+16|0;G=+p[I>>3];J=A<G?A:G;p[x>>3]=J;G=+p[F>>3];K=C>G?C:G;p[u>>3]=K;G=+p[I>>3];L=D>G?D:G;p[y>>3]=L;E=E+1|0;if((E|0)>=(v|0)){M=y;N=x;O=K;P=H;R=L;S=J;break}else{z=H;A=J;C=K;D=L}}}else{x=a+96|0;y=a+80|0;M=x;N=y;O=+p[u>>3];P=+p[o>>3];R=+p[x>>3];S=+p[y>>3]}D=(O-P)*.05;C=(R-S)*.05;A=P-D;P=S-C;y=a+72|0;p[y>>3]=A;p[N>>3]=P;S=D+O;O=C+R;p[a+88>>3]=S;p[M>>3]=O;R=S-A;S=O-P;O=1073741823.0/(R>S?R:S);M=a+104|0;p[M>>3]=O;if(O<=0.0){x=d+56|0;o=d+4|0;k[d>>2]=27524;k[x>>2]=27544;B=0;wa(508,d+56|0,o|0);u=B;B=0;if(u&1){u=Rb()|0;T=Q;U=u;vva(x);Qb(U|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[x>>2]=27488;B=0;va(448,o|0);u=B;B=0;do if(u&1){v=Rb()|0;V=Q;W=v}else{k[o>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;I=Q;Yua(c);Yua(v);Ava(o);V=I;W=E;break}Yua(c);B=0;E=Ia(40,d|0,122571,65)|0;I=B;B=0;a:do if(!(I&1)?(B=0,Xa(239,E|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,e|0,121503,60);X=B;B=0;do if(!(X&1)){B=0;eb(502,f|0,122637,10);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(e);_=Z;$=Y;break}B=0;wa(510,g|0,o|0);Y=B;B=0;if(Y&1){Y=Rb()|0;aa=Y;ba=Q;ca=1}else{B=0;ua(163,F|0,e|0,f|0,3790,g|0);Y=B;B=0;if(Y&1)da=1;else{B=0;eb(503,F|0,1240,229);B=0;da=0}Y=Rb()|0;Z=Q;Yua(g);aa=Y;ba=Z;ca=da}Yua(f);Yua(e);if(ca){_=ba;$=aa}else{ea=ba;fa=aa;break a}}else{Z=Rb()|0;_=Q;$=Z}while(0);zb(F|0);ea=_;fa=$}else ga=22;while(0);if((ga|0)==22){E=Rb()|0;ea=Q;fa=E}k[d>>2]=27468;k[x>>2]=27488;k[o>>2]=27560;Yua(v);Ava(o);vva(x);ha=fa;ia=ea;Qb(ha|0)}while(0);T=V;U=W;vva(x);Qb(U|0)}b:do if(w){U=s;S=A;R=O;C=P;x=0;while(1){W=~~(R*(+p[U+(x*72|0)+16>>3]-C));V=U+(x*72|0)|0;k[V>>2]=~~(R*(+p[U+(x*72|0)+8>>3]-S));k[V+4>>2]=W;W=x+1|0;if((W|0)>=(k[t>>2]|0))break b;U=k[q>>2]|0;S=+p[y>>3];R=+p[M>>3];C=+p[N>>3];x=W}}while(0);N=a+48|0;M=k[N>>2]|0;if((M|0)<=0){r=b;return}y=a+12|0;a=h+56|0;q=h+4|0;t=h+56|0;s=h+128|0;w=h+132|0;x=h+36|0;U=h+52|0;v=M;M=0;W=0;while(1){V=k[y>>2]|0;T=k[V+(M*48|0)>>2]|0;ea=k[V+(M*48|0)+4>>2]|0;fa=k[V+(M*48|0)+8>>2]|0;if((T|0)!=0&(ea|0)!=0&(fa|0)!=0){o=T;T=k[o>>2]|0;d=k[o+4>>2]|0;o=ea;ea=fa;fa=(k[o>>2]|0)-T|0;$=(k[o+4>>2]|0)-d|0;o=(k[ea>>2]|0)-T|0;T=(k[ea+4>>2]|0)-d|0;d=bFa(T|0,((T|0)<0)<<31>>31|0,fa|0,((fa|0)<0)<<31>>31|0)|0;fa=Q;T=bFa(o|0,((o|0)<0)<<31>>31|0,$|0,(($|0)<0)<<31>>31|0)|0;$=REa(d|0,fa|0,T|0,Q|0)|0;T=Q;fa=V+(M*48|0)+32|0;k[fa>>2]=$;k[fa+4>>2]=T;if((T|0)<0|(T|0)==0&$>>>0<1){$=W+1|0;if(($|0)<20){k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,t|0,q|0);T=B;B=0;if(T&1){ga=41;break}k[s>>2]=0;k[w>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,q|0);T=B;B=0;if(T&1){ga=42;break}k[q>>2]=27560;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[U>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);T=B;B=0;if(T&1){ga=40;break}Yua(c);B=0;T=Ia(40,h|0,122648,17)|0;fa=B;B=0;if(fa&1){ga=53;break}B=0;fa=Xa(253,T|0,M+1|0)|0;T=B;B=0;if(T&1){ga=53;break}B=0;T=Ia(40,fa|0,122666,10)|0;fa=B;B=0;if(fa&1){ga=53;break}fa=(k[y>>2]|0)+(M*48|0)+32|0;B=0;d=Ia(44,T|0,k[fa>>2]|0,k[fa+4>>2]|0)|0;fa=B;B=0;if(fa&1){ga=53;break}B=0;Ia(40,d|0,145593,2)|0;d=B;B=0;if(d&1){ga=53;break}B=0;wa(510,i|0,q|0);d=B;B=0;if(d&1){ga=53;break}B=0;ya(424,i|0)|0;d=B;B=0;if(d&1){ga=54;break}Yua(i);k[h>>2]=27468;k[a>>2]=27488;k[q>>2]=27560;Yua(x);Ava(q);vva(a);ja=k[N>>2]|0;ka=$}else{ja=v;ka=$}}else{ja=v;ka=W}}else{$=V+(M*48|0)+32|0;k[$>>2]=-1;k[$+4>>2]=-1;ja=v;ka=W}M=M+1|0;if((M|0)>=(ja|0)){la=ka;ga=58;break}else{v=ja;W=ka}}if((ga|0)==40){ka=Rb()|0;W=Q;Yua(c);Yua(x);Ava(q);ma=W;na=ka;ga=43}else if((ga|0)==41){ka=Rb()|0;oa=Q;pa=ka;vva(a);Qb(pa|0)}else if((ga|0)==42){ka=Rb()|0;ma=Q;na=ka;ga=43}else if((ga|0)==53){ka=Rb()|0;qa=ka;ra=Q;ga=55}else if((ga|0)==54){ka=Rb()|0;W=Q;Yua(i);qa=ka;ra=W;ga=55}else if((ga|0)==58){if(!la){r=b;return}b=j+56|0;la=j+4|0;k[j>>2]=27524;k[b>>2]=27544;B=0;wa(508,j+56|0,la|0);W=B;B=0;if(W&1){W=Rb()|0;sa=Q;ta=W;vva(b);Qb(ta|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[b>>2]=27488;B=0;va(448,la|0);W=B;B=0;do if(W&1){ka=Rb()|0;xa=Q;za=ka}else{k[la>>2]=27560;ka=j+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,la|0,c|0);i=B;B=0;if(i&1){i=Rb()|0;ja=Q;Yua(c);Yua(ka);Ava(la);xa=ja;za=i;break}Yua(c);B=0;i=Ia(40,j|0,122677,58)|0;ja=B;B=0;c:do if(!(ja&1)?(B=0,Xa(239,i|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,l|0,121503,60);M=B;B=0;do if(!(M&1)){B=0;eb(502,m|0,122637,10);N=B;B=0;if(N&1){N=Rb()|0;y=Q;Yua(l);Aa=y;Ba=N;break}B=0;wa(510,n|0,la|0);N=B;B=0;if(N&1){N=Rb()|0;Ca=1;Da=N;Ea=Q}else{B=0;ua(163,v|0,l|0,m|0,3826,n|0);N=B;B=0;if(N&1)Fa=1;else{B=0;eb(503,v|0,1240,229);B=0;Fa=0}N=Rb()|0;y=Q;Yua(n);Ca=Fa;Da=N;Ea=y}Yua(m);Yua(l);if(Ca){Aa=Ea;Ba=Da}else{Ga=Da;Ha=Ea;break c}}else{y=Rb()|0;Aa=Q;Ba=y}while(0);zb(v|0);Ga=Ba;Ha=Aa}else ga=74;while(0);if((ga|0)==74){i=Rb()|0;Ga=i;Ha=Q}k[j>>2]=27468;k[b>>2]=27488;k[la>>2]=27560;Yua(ka);Ava(la);vva(b);ha=Ga;ia=Ha;Qb(ha|0)}while(0);sa=xa;ta=za;vva(b);Qb(ta|0)}if((ga|0)==43){oa=ma;pa=na;vva(a);Qb(pa|0)}else if((ga|0)==55){k[h>>2]=27468;k[a>>2]=27488;k[q>>2]=27560;Yua(x);Ava(q);vva(a);ha=qa;ia=ra;Qb(ha|0)}}function d5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0;b=r;r=r+2512|0;c=b+48|0;d=b+2256|0;e=b+2500|0;f=b+2488|0;g=b+2476|0;h=b+2120|0;i=b+2464|0;l=b+2452|0;m=b+2440|0;n=b+1968|0;o=b+2428|0;p=b+1816|0;q=b+2416|0;s=b+1664|0;t=b+2404|0;u=b+2392|0;v=b+2104|0;w=b+1528|0;x=b+1952|0;y=b+1800|0;z=b+1512|0;A=b+1504|0;C=b+1368|0;D=b+1352|0;E=b+1340|0;F=b+1328|0;G=b+1184|0;H=b+1040|0;I=b;J=b+1192|0;K=b+616|0;L=b+464|0;M=b+180|0;N=b+1048|0;O=b+168|0;P=b+904|0;R=b+156|0;S=b+768|0;T=b+144|0;U=b+632|0;V=b+132|0;W=b+480|0;X=b+120|0;Y=b+328|0;Z=b+108|0;_=b+192|0;$=b+96|0;aa=b+84|0;ba=b+72|0;ca=a+44|0;da=k[ca>>2]|0;if((da|0)>0){ea=a+24|0;fa=0;do{k[(k[ea>>2]|0)+(fa<<2)>>2]=0;fa=fa+1|0}while((fa|0)<(da|0))}k[a+60>>2]=0;fa=Qqa(20)|0;ea=a+48|0;B=0;eb(522,fa|0,(k[ea>>2]|0)*3|0,da|0);da=B;B=0;if(da&1){da=Rb()|0;ga=Q;Sqa(fa);ha=da;ia=ga;Qb(ha|0)}ga=a+52|0;da=k[ga>>2]|0;if((da|0)>0){ja=a+16|0;ka=a+8|0;la=0;ma=0;while(1){na=k[ja>>2]|0;oa=k[ka>>2]|0;pa=((la|0)==(aqa(fa,((k[na+(la*24|0)>>2]|0)-oa|0)/72|0,((k[na+(la*24|0)+4>>2]|0)-oa|0)/72|0)|0)&1)+ma|0;la=la+1|0;oa=k[ga>>2]|0;if((la|0)>=(oa|0)){qa=oa;ra=pa;break}else ma=pa}}else{qa=da;ra=0}if((ra|0)!=(qa|0)){qa=d+56|0;da=d+4|0;k[d>>2]=27524;k[qa>>2]=27544;B=0;wa(508,d+56|0,da|0);ma=B;B=0;if(ma&1){ma=Rb()|0;sa=Q;ta=ma;vva(qa);Qb(ta|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[qa>>2]=27488;B=0;va(448,da|0);ma=B;B=0;do if(ma&1){la=Rb()|0;xa=Q;za=la}else{k[da>>2]=27560;la=d+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;ja=Q;Yua(c);Yua(la);Ava(da);xa=ja;za=ka;break}Yua(c);B=0;ka=Ia(40,d|0,122736,10)|0;ja=B;B=0;a:do if(((!(ja&1)?(B=0,pa=Xa(253,ka|0,ra-(k[ga>>2]|0)|0)|0,oa=B,B=0,!(oa&1)):0)?(B=0,oa=Ia(40,pa|0,122747,25)|0,pa=B,B=0,!(pa&1)):0)?(B=0,Xa(239,oa|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,e|0,121503,60);pa=B;B=0;do if(!(pa&1)){B=0;eb(502,f|0,122773,23);na=B;B=0;if(na&1){na=Rb()|0;Aa=Q;Yua(e);Ba=Aa;Ca=na;break}B=0;wa(510,g|0,da|0);na=B;B=0;if(na&1){na=Rb()|0;Da=Q;Ea=na;Fa=1}else{B=0;ua(163,oa|0,e|0,f|0,3431,g|0);na=B;B=0;if(na&1)Ga=1;else{B=0;eb(503,oa|0,1240,229);B=0;Ga=0}na=Rb()|0;Aa=Q;Yua(g);Da=Aa;Ea=na;Fa=Ga}Yua(f);Yua(e);if(Fa){Ba=Da;Ca=Ea}else{Ha=Ea;Ja=Da;break a}}else{na=Rb()|0;Ba=Q;Ca=na}while(0);zb(oa|0);Ha=Ca;Ja=Ba}else Ka=27;while(0);if((Ka|0)==27){ka=Rb()|0;Ha=ka;Ja=Q}k[d>>2]=27468;k[qa>>2]=27488;k[da>>2]=27560;Yua(la);Ava(da);vva(qa);ha=Ha;ia=Ja;Qb(ha|0)}while(0);sa=xa;ta=za;vva(qa);Qb(ta|0)}ta=k[ea>>2]|0;qa=ta*3|0;za=Rqa(qa>>>0>1073741823?-1:qa<<2)|0;b:do if((ta|0)>0){WEa(za|0,-1,((qa|0)>1?qa:1)<<2|0)|0;xa=a+12|0;sa=a+8|0;Ja=0;c:while(1){Ha=Ja*3|0;da=0;do{d=k[xa>>2]|0;Ba=j[52932+(da<<2)>>1]|0;Ca=k[sa>>2]|0;Da=j[52932+(da<<2)+2>>1]|0;Ea=aqa(fa,((k[d+(Ja*48|0)+(Ba<<2)>>2]|0)-Ca|0)/72|0,((k[d+(Ja*48|0)+(Da<<2)>>2]|0)-Ca|0)/72|0)|0;Ca=O4((k[xa>>2]|0)+(Ja*48|0)|0,da)|0;d=za+(Ea<<2)|0;Fa=k[d>>2]|0;if((Fa|0)==-1)La=da+Ha|0;else{if((Fa|0)<=-1){Ma=Ba;Na=Da;Oa=Ja;break c}Da=k[xa>>2]|0;U4(Da+(Ja*48|0)|0,da&65535,Da+(((Fa|0)/3|0)*48|0)|0,((Fa|0)%3|0)&65535);if(Ca)V4((k[xa>>2]|0)+(Ja*48|0)|0,da);if((Ea|0)<(k[ga>>2]|0))W4((k[xa>>2]|0)+(Ja*48|0)|0,da);La=-2-(k[d>>2]|0)|0}k[d>>2]=La;da=da+1|0}while((da|0)<3);Ja=Ja+1|0;if((Ja|0)>=(k[ea>>2]|0))break b}Ja=h+56|0;la=h+4|0;k[h>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,h+56|0,la|0);da=B;B=0;if(da&1){da=Rb()|0;Pa=Q;Qa=da;vva(Ja);Qb(Qa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Ja>>2]=27488;B=0;va(448,la|0);da=B;B=0;do if(da&1){Ha=Rb()|0;Ra=Q;Sa=Ha}else{k[la>>2]=27560;Ha=h+36|0;k[Ha>>2]=0;k[Ha+4>>2]=0;k[Ha+8>>2]=0;k[Ha+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,la|0,c|0);oa=B;B=0;if(oa&1){oa=Rb()|0;d=Q;Yua(c);Yua(Ha);Ava(la);Ra=d;Sa=oa;break}Yua(c);B=0;oa=Ia(40,h|0,121827,10)|0;d=B;B=0;d:do if(((((!(d&1)?(B=0,Ea=Xa(253,oa|0,((k[(k[xa>>2]|0)+(Oa*48|0)+(Ma<<2)>>2]|0)-(k[sa>>2]|0)|0)/72|0|0)|0,Ca=B,B=0,!(Ca&1)):0)?(B=0,Ca=Ia(40,Ea|0,122797,3)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Ea=Xa(253,Ca|0,((k[(k[xa>>2]|0)+(Oa*48|0)+(Na<<2)>>2]|0)-(k[sa>>2]|0)|0)/72|0|0)|0,Ca=B,B=0,!(Ca&1)):0)?(B=0,Ca=Ia(40,Ea|0,122801,34)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Xa(239,Ca|0,0)|0,Ca=B,B=0,!(Ca&1)):0){Ca=Ab(20)|0;B=0;eb(502,i|0,121503,60);Ea=B;B=0;do if(!(Ea&1)){B=0;eb(502,l|0,122773,23);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Da=Q;Yua(i);Ta=Da;Ua=Fa;break}B=0;wa(510,m|0,la|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Va=1;Wa=Fa;Ya=Q}else{B=0;ua(163,Ca|0,i|0,l|0,3463,m|0);Fa=B;B=0;if(Fa&1)Za=1;else{B=0;eb(503,Ca|0,1240,229);B=0;Za=0}Fa=Rb()|0;Da=Q;Yua(m);Va=Za;Wa=Fa;Ya=Da}Yua(l);Yua(i);if(Va){Ta=Ya;Ua=Wa}else{_a=Wa;$a=Ya;break d}}else{Da=Rb()|0;Ta=Q;Ua=Da}while(0);zb(Ca|0);_a=Ua;$a=Ta}else Ka=68;while(0);if((Ka|0)==68){oa=Rb()|0;_a=oa;$a=Q}k[h>>2]=27468;k[Ja>>2]=27488;k[la>>2]=27560;Yua(Ha);Ava(la);vva(Ja);ha=_a;ia=$a;Qb(ha|0)}while(0);Pa=Ra;Qa=Sa;vva(Ja);Qb(Qa|0)}while(0);e:do if(($pa(fa)|0)>0){Qa=a+8|0;Sa=a+24|0;Ra=n+56|0;Pa=n+4|0;$a=n+56|0;_a=n+128|0;h=n+132|0;Ta=n+36|0;Ua=n+52|0;Ya=p+56|0;Wa=p+4|0;Va=p+56|0;i=p+128|0;l=p+132|0;Za=p+36|0;m=p+52|0;Na=0;Oa=0;f:while(1){do if((k[za+(Na<<2)>>2]|0)>-1){if((Na|0)<(k[ga>>2]|0)){Ma=Zpa(fa,Na)|0;k[(k[Sa>>2]|0)+(Ma<<2)>>2]=(k[Qa>>2]|0)+(Ma*72|0);Ma=_pa(fa,Na)|0;k[(k[Sa>>2]|0)+(Ma<<2)>>2]=(k[Qa>>2]|0)+(Ma*72|0);ab=Oa;break}Ma=Oa+1|0;if((Ma|0)>=10){if((Ma|0)!=10){ab=Ma;break}k[p>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,Va|0,Wa|0);La=B;B=0;if(La&1){Ka=109;break f}k[i>>2]=0;k[l>>2]=-1;k[p>>2]=27468;k[Ya>>2]=27488;B=0;va(448,Wa|0);La=B;B=0;if(La&1){Ka=110;break f}k[Wa>>2]=27560;k[Za>>2]=0;k[Za+4>>2]=0;k[Za+8>>2]=0;k[Za+12>>2]=0;k[m>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Wa|0,c|0);La=B;B=0;if(La&1){Ka=108;break f}Yua(c);B=0;Ia(40,p|0,122861,39)|0;La=B;B=0;if(La&1){Ka=117;break f}B=0;wa(510,q|0,Wa|0);La=B;B=0;if(La&1){Ka=117;break f}B=0;ya(424,q|0)|0;La=B;B=0;if(La&1){Ka=118;break f}Yua(q);k[p>>2]=27468;k[Ya>>2]=27488;k[Wa>>2]=27560;Yua(Za);Ava(Wa);vva(Ya);ab=10;break}k[n>>2]=27524;k[Ra>>2]=27544;B=0;wa(508,$a|0,Pa|0);La=B;B=0;if(La&1){Ka=85;break f}k[_a>>2]=0;k[h>>2]=-1;k[n>>2]=27468;k[Ra>>2]=27488;B=0;va(448,Pa|0);La=B;B=0;if(La&1){Ka=86;break f}k[Pa>>2]=27560;k[Ta>>2]=0;k[Ta+4>>2]=0;k[Ta+8>>2]=0;k[Ta+12>>2]=0;k[Ua>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Pa|0,c|0);La=B;B=0;if(La&1){Ka=84;break f}Yua(c);B=0;La=Ia(40,n|0,122836,20)|0;qa=B;B=0;if(qa&1){Ka=101;break f}B=0;qa=Xa(253,La|0,Na|0)|0;La=B;B=0;if(La&1){Ka=101;break f}B=0;La=Ia(40,qa|0,122857,3)|0;qa=B;B=0;if(qa&1){Ka=101;break f}B=0;qa=Xa(257,fa|0,Na|0)|0;ta=B;B=0;if(ta&1){Ka=101;break f}B=0;ta=Xa(253,La|0,qa|0)|0;qa=B;B=0;if(qa&1){Ka=101;break f}B=0;qa=Ia(40,ta|0,149175,1)|0;ta=B;B=0;if(ta&1){Ka=101;break f}B=0;ta=Xa(258,fa|0,Na|0)|0;La=B;B=0;if(La&1){Ka=101;break f}B=0;La=Xa(253,qa|0,ta|0)|0;ta=B;B=0;if(ta&1){Ka=101;break f}B=0;Ia(40,La|0,149177,1)|0;La=B;B=0;if(La&1){Ka=101;break f}B=0;wa(510,o|0,Pa|0);La=B;B=0;if(La&1){Ka=101;break f}B=0;ya(424,o|0)|0;La=B;B=0;if(La&1){Ka=102;break f}Yua(o);k[n>>2]=27468;k[Ra>>2]=27488;k[Pa>>2]=27560;Yua(Ta);Ava(Pa);vva(Ra);ab=Ma}else ab=Oa;while(0);Na=Na+1|0;if((Na|0)>=($pa(fa)|0)){bb=ab;Ka=121;break}else Oa=ab}switch(Ka|0){case 84:{Oa=Rb()|0;Na=Q;Yua(c);Yua(Ta);Ava(Pa);cb=Na;db=Oa;Ka=87;break}case 85:{Oa=Rb()|0;fb=Q;gb=Oa;vva(Ra);Qb(gb|0);break}case 86:{Oa=Rb()|0;cb=Q;db=Oa;Ka=87;break}case 101:{hb=Rb()|0;ib=Q;Ka=103;break}case 102:{Oa=Rb()|0;Na=Q;Yua(o);hb=Oa;ib=Na;Ka=103;break}case 108:{Na=Rb()|0;Oa=Q;Yua(c);Yua(Za);Ava(Wa);jb=Oa;kb=Na;Ka=111;break}case 109:{Na=Rb()|0;lb=Q;mb=Na;vva(Ya);Qb(mb|0);break}case 110:{Na=Rb()|0;jb=Q;kb=Na;Ka=111;break}case 117:{nb=Rb()|0;ob=Q;Ka=119;break}case 118:{Na=Rb()|0;Oa=Q;Yua(q);nb=Na;ob=Oa;Ka=119;break}case 121:{if(!bb)break e;Oa=s+56|0;Na=s+4|0;k[s>>2]=27524;k[Oa>>2]=27544;B=0;wa(508,s+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;pb=Q;qb=Ua;vva(Oa);Qb(qb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Oa>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){h=Rb()|0;rb=Q;sb=h}else{k[Na>>2]=27560;h=s+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);_a=B;B=0;if(_a&1){_a=Rb()|0;$a=Q;Yua(c);Yua(h);Ava(Na);rb=$a;sb=_a;break}Yua(c);B=0;_a=Xa(253,s|0,bb|0)|0;$a=B;B=0;g:do if((!($a&1)?(B=0,m=Ia(40,_a|0,122901,65)|0,l=B,B=0,!(l&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,t|0,121503,60);l=B;B=0;do if(!(l&1)){B=0;eb(502,u|0,122773,23);i=B;B=0;if(i&1){i=Rb()|0;Va=Q;Yua(t);tb=i;ub=Va;break}B=0;wa(510,v|0,Na|0);Va=B;B=0;if(Va&1){Va=Rb()|0;vb=1;wb=Va;xb=Q}else{B=0;ua(163,m|0,t|0,u|0,3501,v|0);Va=B;B=0;if(Va&1)yb=1;else{B=0;eb(503,m|0,1240,229);B=0;yb=0}Va=Rb()|0;i=Q;Yua(v);vb=yb;wb=Va;xb=i}Yua(u);Yua(t);if(vb){tb=wb;ub=xb}else{Bb=wb;Cb=xb;break g}}else{i=Rb()|0;tb=i;ub=Q}while(0);zb(m|0);Bb=tb;Cb=ub}else Ka=140;while(0);if((Ka|0)==140){_a=Rb()|0;Bb=_a;Cb=Q}k[s>>2]=27468;k[Oa>>2]=27488;k[Na>>2]=27560;Yua(h);Ava(Na);vva(Oa);ha=Bb;ia=Cb;Qb(ha|0)}while(0);pb=rb;qb=sb;vva(Oa);Qb(qb|0);break}}if((Ka|0)==87){fb=cb;gb=db;vva(Ra);Qb(gb|0)}else if((Ka|0)==103){k[n>>2]=27468;k[Ra>>2]=27488;k[Pa>>2]=27560;Yua(Ta);Ava(Pa);vva(Ra);ha=hb;ia=ib;Qb(ha|0)}else if((Ka|0)==111){lb=jb;mb=kb;vva(Ya);Qb(mb|0)}else if((Ka|0)==119){k[p>>2]=27468;k[Ya>>2]=27488;k[Wa>>2]=27560;Yua(Za);Ava(Wa);vva(Ya);ha=nb;ia=ob;Qb(ha|0)}}while(0);ob=k[ca>>2]|0;if((ob|0)>0){nb=a+8|0;p=a+24|0;mb=0;kb=0;while(1){k[(k[nb>>2]|0)+(mb*72|0)+64>>2]=0;j[(k[nb>>2]|0)+(mb*72|0)+60>>1]=0;jb=k[p>>2]|0;lb=k[jb+(mb<<2)>>2]|0;if(!lb)Db=kb;else{k[jb+(kb<<2)>>2]=lb;Db=kb+1|0}mb=mb+1|0;if((mb|0)>=(ob|0)){Eb=Db;break}else kb=Db}}else Eb=0;Db=a+12|0;kb=k[Db>>2]|0;ob=k[ea>>2]|0;mb=a+40|0;p=k[mb>>2]|0;nb=a+28|0;lb=k[nb>>2]|0;k[nb>>2]=0;jb=Eb<<1;ib=Rqa(jb>>>0>89478485?-1:jb*48|0)|0;h:do if(Eb){hb=ib+(jb*48|0)|0;n=ib;while(1){B=0;va(532,n|0);gb=B;B=0;if(gb&1)break;n=n+48|0;if((n|0)==(hb|0))break h}hb=Rb()|0;n=Q;Tqa(ib);ha=hb;ia=n;Qb(ha|0)}while(0);k[Db>>2]=ib;k[ea>>2]=2;k[mb>>2]=jb;jb=a+24|0;ib=k[jb>>2]|0;n=k[ib>>2]|0;hb=k[ib+4>>2]|0;Ya=k[n>>2]|0;Wa=(k[hb>>2]|0)-Ya|0;Za=((Wa|0)<0)<<31>>31;Ra=k[n+4>>2]|0;n=(k[hb+4>>2]|0)-Ra|0;hb=((n|0)<0)<<31>>31;Pa=2;while(1){Ta=ib+(Pa<<2)|0;Oa=k[Ta>>2]|0;gb=(k[Oa>>2]|0)-Ya|0;db=(k[Oa+4>>2]|0)-Ra|0;cb=bFa(db|0,((db|0)<0)<<31>>31|0,Wa|0,Za|0)|0;db=Q;fb=bFa(gb|0,((gb|0)<0)<<31>>31|0,n|0,hb|0)|0;if(!((cb|0)==(fb|0)&(db|0)==(Q|0))){Fb=Ta;Gb=Oa;break}Pa=Pa+1|0;if((Pa|0)>=(Eb|0)){Ka=158;break}}if((Ka|0)==158){Pa=w+56|0;hb=w+4|0;k[w>>2]=27524;k[Pa>>2]=27544;B=0;wa(508,w+56|0,hb|0);n=B;B=0;if(n&1){n=Rb()|0;Hb=Q;Ib=n;vva(Pa);Qb(Ib|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[Pa>>2]=27488;B=0;va(448,hb|0);n=B;B=0;do if(n&1){Za=Rb()|0;Jb=Q;Kb=Za}else{k[hb>>2]=27560;Za=w+36|0;k[Za>>2]=0;k[Za+4>>2]=0;k[Za+8>>2]=0;k[Za+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hb|0,c|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ra=Q;Yua(c);Yua(Za);Ava(hb);Jb=Ra;Kb=Wa;break}Yua(c);B=0;Wa=Ia(40,w|0,122967,53)|0;Ra=B;B=0;i:do if(!(Ra&1)?(B=0,Xa(239,Wa|0,0)|0,Ya=B,B=0,!(Ya&1)):0){Ya=Ab(20)|0;B=0;eb(502,x|0,121503,60);Oa=B;B=0;do if(!(Oa&1)){B=0;eb(502,y|0,122773,23);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;db=Q;Yua(x);Lb=Ta;Mb=db;break}B=0;wa(510,z|0,hb|0);db=B;B=0;if(db&1){db=Rb()|0;Nb=1;Ob=db;Pb=Q}else{B=0;ua(163,Ya|0,x|0,y|0,3528,z|0);db=B;B=0;if(db&1)Sb=1;else{B=0;eb(503,Ya|0,1240,229);B=0;Sb=0}db=Rb()|0;Ta=Q;Yua(z);Nb=Sb;Ob=db;Pb=Ta}Yua(y);Yua(x);if(Nb){Lb=Ob;Mb=Pb}else{Tb=Ob;Ub=Pb;break i}}else{Ta=Rb()|0;Lb=Ta;Mb=Q}while(0);zb(Ya|0);Tb=Lb;Ub=Mb}else Ka=174;while(0);if((Ka|0)==174){Wa=Rb()|0;Tb=Wa;Ub=Q}k[w>>2]=27468;k[Pa>>2]=27488;k[hb>>2]=27560;Yua(Za);Ava(hb);vva(Pa);ha=Tb;ia=Ub;Qb(ha|0)}while(0);Hb=Jb;Ib=Kb;vva(Pa);Qb(Ib|0)}Ib=ib+8|0;ib=k[Ib>>2]|0;k[Ib>>2]=Gb;k[Fb>>2]=ib;ib=k[jb>>2]|0;Fb=k[ib>>2]|0;Gb=k[ib+4>>2]|0;k[k[Db>>2]>>2]=0;k[(k[Db>>2]|0)+4>>2]=Fb;k[(k[Db>>2]|0)+8>>2]=Gb;k[(k[Db>>2]|0)+48>>2]=0;k[(k[Db>>2]|0)+56>>2]=Fb;k[(k[Db>>2]|0)+52>>2]=Gb;ib=k[Db>>2]|0;U4(ib,0,ib+48|0,0);ib=k[Db>>2]|0;U4(ib,1,ib+48|0,2);ib=k[Db>>2]|0;U4(ib,2,ib+48|0,1);ib=k[Db>>2]|0;Ib=ib+32|0;k[Ib>>2]=-1;k[Ib+4>>2]=-1;Ib=ib+80|0;k[Ib>>2]=-1;k[Ib+4>>2]=-1;X4(ib);X4((k[Db>>2]|0)+48|0);ib=k[Db>>2]|0;k[ib+40>>2]=ib+48;ib=k[Db>>2]|0;k[ib+88>>2]=ib;ib=a+20|0;Ib=Qqa(16)|0;B=0;eb(523,Ib|0,a|0,0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Kb=Q;Sqa(Ib);ha=Pa;ia=Kb;Qb(ha|0)}k[ib>>2]=Ib;Npa(Ib,Fb);Npa(k[ib>>2]|0,Gb);if((Eb|0)>2){Gb=2;do{Fb=k[(k[jb>>2]|0)+(Gb<<2)>>2]|0;Ib=o5(a,Fb,c,0)|0;Npa(k[ib>>2]|0,Fb);j5(a,Fb,Ib,c);a5(Fb,1,1)|0;Gb=Gb+1|0}while((Gb|0)!=(Eb|0))}k[A>>2]=0;k[A+4>>2]=0;Eb=k[ga>>2]|0;if((Eb|0)>0){Gb=a+16|0;jb=Eb;Eb=0;Fb=0;Ib=0;while(1){if(((k[za+(Eb<<2)>>2]|0)>-1?(Kb=k[Gb>>2]|0,Pa=k[Kb+(Eb*24|0)>>2]|0,Jb=k[Kb+(Eb*24|0)+4>>2]|0,(k[Pa+64>>2]|0)!=0):0)?(k[Jb+64>>2]|0)!=0:0){Kb=((k5(Pa,Jb,A)|0)>>>31)+Ib|0;Vb=k[ga>>2]|0;Wb=Fb+1|0;Xb=Kb}else{Vb=jb;Wb=Fb;Xb=Ib}Eb=Eb+1|0;if((Eb|0)>=(Vb|0)){Yb=Wb;Zb=Xb;break}else{jb=Vb;Fb=Wb;Ib=Xb}}if(Zb){Xb=C+56|0;Ib=C+4|0;k[C>>2]=27524;k[Xb>>2]=27544;B=0;wa(508,C+56|0,Ib|0);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;_b=Q;$b=Wb;vva(Xb);Qb($b|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Xb>>2]=27488;B=0;va(448,Ib|0);Wb=B;B=0;do if(Wb&1){Fb=Rb()|0;ac=Q;bc=Fb}else{k[Ib>>2]=27560;Fb=C+36|0;k[Fb>>2]=0;k[Fb+4>>2]=0;k[Fb+8>>2]=0;k[Fb+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ib|0,c|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;jb=Q;Yua(c);Yua(Fb);Ava(Ib);ac=jb;bc=Vb;break}Yua(c);B=0;Vb=Ia(40,C|0,123021,8)|0;jb=B;B=0;j:do if(!(jb&1)?(B=0,Eb=Xa(253,Vb|0,Zb|0)|0,A=B,B=0,!(A&1)):0){B=0;A=Ia(40,Eb|0,123030,22)|0;Eb=B;B=0;if(Eb&1){Ka=213;break}B=0;Eb=Xa(253,A|0,Yb|0)|0;A=B;B=0;if(A&1){Ka=213;break}B=0;Xa(239,Eb|0,0)|0;Eb=B;B=0;if(Eb&1){Ka=213;break}Eb=Ab(20)|0;B=0;eb(502,D|0,121503,60);A=B;B=0;do if(!(A&1)){B=0;eb(502,E|0,122773,23);Gb=B;B=0;if(Gb&1){Gb=Rb()|0;Kb=Q;Yua(D);cc=Gb;dc=Kb;break}B=0;wa(510,F|0,Ib|0);Kb=B;B=0;if(Kb&1){Kb=Rb()|0;ec=1;fc=Kb;gc=Q}else{B=0;ua(163,Eb|0,D|0,E|0,3588,F|0);Kb=B;B=0;if(Kb&1)hc=1;else{B=0;eb(503,Eb|0,1240,229);B=0;hc=0}Kb=Rb()|0;Gb=Q;Yua(F);ec=hc;fc=Kb;gc=Gb}Yua(E);Yua(D);if(ec){cc=fc;dc=gc}else{ic=fc;jc=gc;break j}}else{Gb=Rb()|0;cc=Gb;dc=Q}while(0);zb(Eb|0);ic=cc;jc=dc}else Ka=213;while(0);if((Ka|0)==213){Vb=Rb()|0;ic=Vb;jc=Q}k[C>>2]=27468;k[Xb>>2]=27488;k[Ib>>2]=27560;Yua(Fb);Ava(Ib);vva(Xb);ha=ic;ia=jc;Qb(ha|0)}while(0);_b=ac;$b=bc;vva(Xb);Qb($b|0)}}l5(a,1);$b=k[ea>>2]|0;if(($b|0)>0){Xb=c+4|0;bc=a+8|0;ac=$b;_b=0;while(1){jc=k[Db>>2]|0;if(!(k[jc+(_b*48|0)+40>>2]|0))kc=ac;else{ic=jc;jc=0;while(1){M4(c,ic+(_b*48|0)|0,jc);Ib=k[c>>2]|0;if(!(k[Ib+40>>2]|0)){C=k[Xb>>2]|0;k[G>>2]=0;dc=G4(c,G)|0;k[H>>2]=1;cc=G4(c,H)|0;if(!dc)lc=k[ca>>2]|0;else lc=(dc-(k[bc>>2]|0)|0)/72|0;if(!cc)mc=k[ca>>2]|0;else mc=(cc-(k[bc>>2]|0)|0)/72|0;cc=za+((aqa(fa,lc,mc)|0)<<2)|0;dc=k[cc>>2]|0;U4(Ib,C&65535,kb+(((dc|0)/3|0)*48|0)|0,((dc|0)%3|0)&65535);E4(c);k[cc>>2]=-2-(k[cc>>2]|0)}cc=jc+1|0;if((cc|0)==3)break;ic=k[Db>>2]|0;jc=cc}kc=k[ea>>2]|0}_b=_b+1|0;if((_b|0)>=(kc|0)){nc=kc;break}else ac=kc}if((nc|0)>0){kc=k[Db>>2]|0;ac=0;_b=0;while(1){mc=kc+(_b*48|0)+40|0;if(!(k[mc>>2]|0)){k[mc>>2]=ac+ob;oc=kc;pc=ac+1|0}else{L4(I,0,0,0);qc=kc+(_b*48|0)|0;rc=I;sc=qc+44|0;do{k[qc>>2]=k[rc>>2];qc=qc+4|0;rc=rc+4|0}while((qc|0)<(sc|0));mc=k[Db>>2]|0;k[mc+(_b*48|0)+40>>2]=-1;oc=mc;pc=ac}_b=_b+1|0;mc=k[ea>>2]|0;if((_b|0)>=(mc|0)){tc=oc;uc=mc;break}else{kc=oc;ac=pc}}if((uc|0)>0){pc=uc;ac=tc;oc=0;kc=ob;while(1){if((k[ac+(oc*48|0)+40>>2]|0)>-1){qc=kb+(kc*48|0)|0;rc=ac+(oc*48|0)|0;sc=qc+44|0;do{k[qc>>2]=k[rc>>2];qc=qc+4|0;rc=rc+4|0}while((qc|0)<(sc|0));k[kb+(kc*48|0)+40>>2]=0;vc=k[Db>>2]|0;wc=k[ea>>2]|0;xc=kc+1|0}else{vc=ac;wc=pc;xc=kc}oc=oc+1|0;if((oc|0)>=(wc|0)){yc=wc;zc=vc;Ac=xc;break}else{pc=wc;ac=vc;kc=xc}}}else{yc=uc;zc=tc;Ac=ob}}else{Bc=nc;Ka=224}}else{Bc=$b;Ka=224}if((Ka|0)==224){yc=Bc;zc=k[Db>>2]|0;Ac=ob}ob=zc+(yc*48|0)|0;if((Ac|0)>0){yc=0;Bc=0;while(1){$b=kb+(yc*48|0)|0;nc=Z4($b,0)|0;tc=Q4($b,0)|0;uc=P4($b,0)|0;if(nc)if((nc>>>0<ob>>>0?nc>>>0>=(k[Db>>2]|0)>>>0:0)?(U4($b,0,kb+((k[nc+40>>2]|0)*48|0)|0,tc),(uc|0)!=0):0){W4($b,0);Cc=Bc}else Cc=Bc;else Cc=Bc+1|0;uc=Z4($b,1)|0;tc=Q4($b,1)|0;nc=P4($b,1)|0;if(uc)if((uc>>>0<ob>>>0?uc>>>0>=(k[Db>>2]|0)>>>0:0)?(U4($b,1,kb+((k[uc+40>>2]|0)*48|0)|0,tc),(nc|0)!=0):0){W4($b,1);Dc=Cc}else Dc=Cc;else Dc=Cc+1|0;nc=Z4($b,2)|0;tc=Q4($b,2)|0;uc=P4($b,2)|0;do if(nc)if(nc>>>0<ob>>>0?nc>>>0>=(k[Db>>2]|0)>>>0:0){U4($b,2,kb+((k[nc+40>>2]|0)*48|0)|0,tc);if(!uc){Ec=Dc;break}W4($b,2);Ec=Dc}else Ec=Dc;else Ec=Dc+1|0;while(0);yc=yc+1|0;if((yc|0)==(Ac|0)){Fc=Ec;break}else Bc=Ec}Gc=k[Db>>2]|0;Hc=Fc}else{Gc=zc;Hc=0}k[ea>>2]=Ac;k[mb>>2]=p;if(Gc)Tqa(Gc);Gc=k[nb>>2]|0;if(Gc)Tqa(Gc);k[Db>>2]=kb;k[nb>>2]=lb;if(Hc){lb=J+56|0;nb=J+4|0;k[J>>2]=27524;k[lb>>2]=27544;B=0;wa(508,J+56|0,nb|0);kb=B;B=0;if(kb&1){kb=Rb()|0;Ic=Q;Jc=kb;vva(lb);Qb(Jc|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[lb>>2]=27488;B=0;va(448,nb|0);kb=B;B=0;do if(kb&1){Db=Rb()|0;Kc=Q;Lc=Db}else{k[nb>>2]=27560;Db=J+36|0;k[Db>>2]=0;k[Db+4>>2]=0;k[Db+8>>2]=0;k[Db+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nb|0,c|0);Gc=B;B=0;if(Gc&1){Gc=Rb()|0;p=Q;Yua(c);Yua(Db);Ava(nb);Kc=p;Lc=Gc;break}Yua(c);B=0;Gc=Ia(40,J|0,123053,34)|0;p=B;B=0;k:do if(p&1)Ka=276;else{B=0;mb=Xa(253,Gc|0,Hc|0)|0;Ac=B;B=0;if(Ac&1){Ka=276;break}B=0;Xa(239,mb|0,0)|0;mb=B;B=0;if(mb&1){Ka=276;break}mb=Ab(20)|0;B=0;eb(502,K|0,121503,60);Ac=B;B=0;do if(!(Ac&1)){B=0;eb(502,L|0,122773,23);ea=B;B=0;if(ea&1){ea=Rb()|0;zc=Q;Yua(K);Mc=ea;Nc=zc;break}B=0;wa(510,M|0,nb|0);zc=B;B=0;if(zc&1){zc=Rb()|0;Oc=1;Pc=zc;Qc=Q}else{B=0;ua(163,mb|0,K|0,L|0,3663,M|0);zc=B;B=0;if(zc&1)Rc=1;else{B=0;eb(503,mb|0,1240,229);B=0;Rc=0}zc=Rb()|0;ea=Q;Yua(M);Oc=Rc;Pc=zc;Qc=ea}Yua(L);Yua(K);if(Oc){Mc=Pc;Nc=Qc}else{Sc=Pc;Tc=Qc;break k}}else{ea=Rb()|0;Mc=ea;Nc=Q}while(0);zb(mb|0);Sc=Mc;Tc=Nc}while(0);if((Ka|0)==276){Gc=Rb()|0;Sc=Gc;Tc=Q}k[J>>2]=27468;k[lb>>2]=27488;k[nb>>2]=27560;Yua(Db);Ava(nb);vva(lb);ha=Sc;ia=Tc;Qb(ha|0)}while(0);Ic=Kc;Jc=Lc;vva(lb);Qb(Jc|0)}l5(a,0);Jc=k[fa+12>>2]|0;if(Jc)Tqa(Jc);Jc=k[fa+16>>2]|0;if(Jc)Tqa(Jc);Sqa(fa);Tqa(za);do if((k[ca>>2]|0)>0){za=a+8|0;fa=0;do{Npa(k[ib>>2]|0,(k[za>>2]|0)+(fa*72|0)|0);fa=fa+1|0;Jc=k[ca>>2]|0}while((fa|0)<(Jc|0));Uc=Jc;if((Uc|0)<=0)break;fa=a+8|0;za=0;do{k[(k[fa>>2]|0)+(za*72|0)+64>>2]=0;za=za+1|0}while((za|0)!=(Uc|0))}while(0);Uc=a+152|0;if((k[Uc>>2]|0)>0){ca=a+156|0;ib=0;do{hqa((k[ca>>2]|0)+(ib*24|0)|0);ib=ib+1|0}while((ib|0)<(k[Uc>>2]|0))}Uc=a+160|0;if((k[Uc>>2]|0)>0){ib=a+164|0;ca=0;do{hqa((k[ib>>2]|0)+(ca*24|0)|0);ca=ca+1|0}while((ca|0)<(k[Uc>>2]|0))}Uc=k[ga>>2]|0;if((Uc|0)<=0){r=b;return}ca=a+16|0;ib=Uc;Uc=0;while(1){za=k[ca>>2]|0;if(!(k[za+(Uc*24|0)+12>>2]|0))Vc=ib;else{if(!(k[za+(Uc*24|0)+16>>2]|0)){if(!(gqa(k[(k[za+(Uc*24|0)>>2]|0)+64>>2]|0)|0)){Wc=Uc;Xc=0;break}Yc=k[ca>>2]|0}else Yc=za;if((k[Yc+(Uc*24|0)+20>>2]|0)==0?(gqa(k[(k[Yc+(Uc*24|0)+4>>2]|0)+64>>2]|0)|0)==0:0){Wc=Uc;Xc=1;break}Vc=k[ga>>2]|0}Uc=Uc+1|0;if((Uc|0)>=(Vc|0)){Ka=441;break}else ib=Vc}if((Ka|0)==441){r=b;return}b=N+56|0;Vc=N+4|0;k[N>>2]=27524;k[b>>2]=27544;B=0;wa(508,N+56|0,Vc|0);ib=B;B=0;if(ib&1){ib=Rb()|0;Zc=Q;_c=ib;vva(b);Qb(_c|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[b>>2]=27488;B=0;va(448,Vc|0);ib=B;B=0;do if(ib&1){Uc=Rb()|0;$c=Q;ad=Uc}else{k[Vc>>2]=27560;Uc=N+36|0;k[Uc>>2]=0;k[Uc+4>>2]=0;k[Uc+8>>2]=0;k[Uc+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Vc|0,c|0);ga=B;B=0;if(ga&1){ga=Rb()|0;Yc=Q;Yua(c);Yua(Uc);Ava(Vc);$c=Yc;ad=ga;break}Yua(c);B=0;ga=Ia(40,N|0,123088,68)|0;Yc=B;B=0;do if(Yc&1)Ka=355;else{B=0;za=Xa(253,ga|0,Wc+1|0)|0;fa=B;B=0;if(fa&1){Ka=355;break}B=0;fa=Ia(40,za|0,121573,3)|0;za=B;B=0;if(za&1){Ka=355;break}za=a+8|0;B=0;Db=Xa(253,fa|0,(((k[(k[ca>>2]|0)+(Wc*24|0)>>2]|0)-(k[za>>2]|0)|0)/72|0)+1|0)|0;fa=B;B=0;if(fa&1){Ka=355;break}B=0;fa=Ia(40,Db|0,149175,1)|0;Db=B;B=0;if(Db&1){Ka=355;break}B=0;Db=Xa(253,fa|0,(((k[(k[ca>>2]|0)+(Wc*24|0)+4>>2]|0)-(k[za>>2]|0)|0)/72|0)+1|0)|0;fa=B;B=0;if(fa&1){Ka=355;break}B=0;Ia(40,Db|0,149198,2)|0;Db=B;B=0;if(Db&1){Ka=355;break}B=0;wa(510,O|0,Vc|0);Db=B;B=0;if(Db&1){Ka=355;break}B=0;ya(424,O|0)|0;Db=B;B=0;if(Db&1){Db=Rb()|0;fa=Q;Yua(O);bd=Db;cd=fa;break}Yua(O);k[N>>2]=27468;k[b>>2]=27488;k[Vc>>2]=27560;Yua(Uc);Ava(Vc);vva(b);fa=P+56|0;Db=P+4|0;k[P>>2]=27524;k[fa>>2]=27544;B=0;wa(508,P+56|0,Db|0);Jc=B;B=0;if(Jc&1){Jc=Rb()|0;dd=Q;ed=Jc;vva(fa);Qb(ed|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[fa>>2]=27488;B=0;va(448,Db|0);Jc=B;B=0;do if(Jc&1){lb=Rb()|0;fd=Q;gd=lb}else{k[Db>>2]=27560;lb=P+36|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Db|0,c|0);Lc=B;B=0;if(Lc&1){Lc=Rb()|0;Kc=Q;Yua(c);Yua(lb);Ava(Db);fd=Kc;gd=Lc;break}Yua(c);B=0;Lc=Ia(40,P|0,123157,40)|0;Kc=B;B=0;do if(Kc&1)Ka=358;else{B=0;Ic=Xa(259,k[a>>2]|0,k[(k[ca>>2]|0)+(Wc*24|0)+12>>2]|0)|0;Tc=B;B=0;if(Tc&1){Ka=358;break}B=0;Tc=Xa(253,Lc|0,Ic+1|0)|0;Ic=B;B=0;if(Ic&1){Ka=358;break}B=0;Ia(40,Tc|0,149177,1)|0;Tc=B;B=0;if(Tc&1){Ka=358;break}B=0;wa(510,R|0,Db|0);Tc=B;B=0;if(Tc&1){Ka=358;break}B=0;ya(424,R|0)|0;Tc=B;B=0;if(Tc&1){Tc=Rb()|0;Ic=Q;Yua(R);hd=Tc;id=Ic;break}Yua(R);k[P>>2]=27468;k[fa>>2]=27488;k[Db>>2]=27560;Yua(lb);Ava(Db);vva(fa);l:do if(!(eqa(k[(k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)+64>>2]|0)|0)){if(!(fqa(k[(k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)+64>>2]|0)|0)){Ic=W+56|0;Tc=W+4|0;k[W>>2]=27524;k[Ic>>2]=27544;B=0;wa(508,W+56|0,Tc|0);Sc=B;B=0;if(Sc&1){Sc=Rb()|0;jd=Q;kd=Sc;vva(Ic);Qb(kd|0)}k[W+128>>2]=0;k[W+132>>2]=-1;k[W>>2]=27468;k[Ic>>2]=27488;B=0;va(448,Tc|0);Sc=B;B=0;do if(Sc&1){nb=Rb()|0;ld=Q;md=nb}else{k[Tc>>2]=27560;nb=W+36|0;k[nb>>2]=0;k[nb+4>>2]=0;k[nb+8>>2]=0;k[nb+12>>2]=0;k[W+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Tc|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;Nc=Q;Yua(c);Yua(nb);Ava(Tc);ld=Nc;md=J;break}Yua(c);B=0;J=Ia(40,W|0,123307,15)|0;Nc=B;B=0;do if(!(Nc&1)){B=0;Mc=Xa(245,J|0,k[(k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)+64>>2]|0)|0;Qc=B;B=0;if(Qc&1){Ka=399;break}B=0;Ia(40,Mc|0,149177,1)|0;Mc=B;B=0;if(Mc&1){Ka=399;break}B=0;wa(510,X|0,Tc|0);Mc=B;B=0;if(Mc&1){Ka=399;break}B=0;ya(424,X|0)|0;Mc=B;B=0;if(Mc&1){Mc=Rb()|0;Qc=Q;Yua(X);nd=Mc;od=Qc;break}else{Yua(X);k[W>>2]=27468;k[Ic>>2]=27488;k[Tc>>2]=27560;Yua(nb);Ava(Tc);vva(Ic);break l}}else Ka=399;while(0);if((Ka|0)==399){J=Rb()|0;nd=J;od=Q}k[W>>2]=27468;k[Ic>>2]=27488;k[Tc>>2]=27560;Yua(nb);Ava(Tc);vva(Ic);ha=nd;ia=od;Qb(ha|0)}while(0);jd=ld;kd=md;vva(Ic);Qb(kd|0)}Tc=U+56|0;Sc=U+4|0;k[U>>2]=27524;k[Tc>>2]=27544;B=0;wa(508,U+56|0,Sc|0);J=B;B=0;if(J&1){J=Rb()|0;pd=Q;qd=J;vva(Tc);Qb(qd|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[Tc>>2]=27488;B=0;va(448,Sc|0);J=B;B=0;do if(J&1){Nc=Rb()|0;rd=Q;sd=Nc}else{k[Sc>>2]=27560;Nc=U+36|0;k[Nc>>2]=0;k[Nc+4>>2]=0;k[Nc+8>>2]=0;k[Nc+12>>2]=0;k[U+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Sc|0,c|0);Qc=B;B=0;if(Qc&1){Qc=Rb()|0;Mc=Q;Yua(c);Yua(Nc);Ava(Sc);rd=Mc;sd=Qc;break}Yua(c);B=0;Qc=Ia(40,U|0,123198,18)|0;Mc=B;B=0;do if(!(Mc&1)){B=0;Pc=Xa(253,Qc|0,(((k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)-(k[za>>2]|0)|0)/72|0)+1|0)|0;Oc=B;B=0;if(Oc&1){Ka=382;break}B=0;Oc=Ia(40,Pc|0,123265,41)|0;Pc=B;B=0;if(Pc&1){Ka=382;break}B=0;Pc=Xa(259,k[a>>2]|0,k[(k[(k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)+64>>2]|0)+16>>2]|0)|0;K=B;B=0;if(K&1){Ka=382;break}B=0;K=Xa(253,Oc|0,Pc+1|0)|0;Pc=B;B=0;if(Pc&1){Ka=382;break}B=0;Ia(40,K|0,149177,1)|0;K=B;B=0;if(K&1){Ka=382;break}B=0;wa(510,V|0,Sc|0);K=B;B=0;if(K&1){Ka=382;break}B=0;ya(424,V|0)|0;K=B;B=0;if(K&1){K=Rb()|0;Pc=Q;Yua(V);td=K;ud=Pc;break}else{Yua(V);k[U>>2]=27468;k[Tc>>2]=27488;k[Sc>>2]=27560;Yua(Nc);Ava(Sc);vva(Tc);break l}}else Ka=382;while(0);if((Ka|0)==382){Qc=Rb()|0;td=Qc;ud=Q}k[U>>2]=27468;k[Tc>>2]=27488;k[Sc>>2]=27560;Yua(Nc);Ava(Sc);vva(Tc);ha=td;ia=ud;Qb(ha|0)}while(0);pd=rd;qd=sd;vva(Tc);Qb(qd|0)}else{Sc=S+56|0;J=S+4|0;k[S>>2]=27524;k[Sc>>2]=27544;B=0;wa(508,S+56|0,J|0);Ic=B;B=0;if(Ic&1){Ic=Rb()|0;vd=Q;wd=Ic;vva(Sc);Qb(wd|0)}k[S+128>>2]=0;k[S+132>>2]=-1;k[S>>2]=27468;k[Sc>>2]=27488;B=0;va(448,J|0);Ic=B;B=0;do if(Ic&1){Qc=Rb()|0;xd=Q;yd=Qc}else{k[J>>2]=27560;Qc=S+36|0;k[Qc>>2]=0;k[Qc+4>>2]=0;k[Qc+8>>2]=0;k[Qc+12>>2]=0;k[S+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);Mc=B;B=0;if(Mc&1){Mc=Rb()|0;nb=Q;Yua(c);Yua(Qc);Ava(J);xd=nb;yd=Mc;break}Yua(c);B=0;Mc=Ia(40,S|0,123198,18)|0;nb=B;B=0;do if(!(nb&1)){B=0;Pc=Xa(253,Mc|0,(((k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)-(k[za>>2]|0)|0)/72|0)+1|0)|0;K=B;B=0;if(K&1){Ka=361;break}B=0;K=Ia(40,Pc|0,123217,47)|0;Pc=B;B=0;if(Pc&1){Ka=361;break}B=0;Pc=Xa(260,k[a>>2]|0,k[(k[(k[(k[ca>>2]|0)+(Wc*24|0)+(Xc<<2)>>2]|0)+64>>2]|0)+16>>2]|0)|0;Oc=B;B=0;if(Oc&1){Ka=361;break}B=0;Oc=Xa(253,K|0,Pc+1|0)|0;Pc=B;B=0;if(Pc&1){Ka=361;break}B=0;Ia(40,Oc|0,149177,1)|0;Oc=B;B=0;if(Oc&1){Ka=361;break}B=0;wa(510,T|0,J|0);Oc=B;B=0;if(Oc&1){Ka=361;break}B=0;ya(424,T|0)|0;Oc=B;B=0;if(Oc&1){Oc=Rb()|0;Pc=Q;Yua(T);zd=Oc;Ad=Pc;break}else{Yua(T);k[S>>2]=27468;k[Sc>>2]=27488;k[J>>2]=27560;Yua(Qc);Ava(J);vva(Sc);break l}}else Ka=361;while(0);if((Ka|0)==361){Mc=Rb()|0;zd=Mc;Ad=Q}k[S>>2]=27468;k[Sc>>2]=27488;k[J>>2]=27560;Yua(Qc);Ava(J);vva(Sc);ha=zd;ia=Ad;Qb(ha|0)}while(0);vd=xd;wd=yd;vva(Sc);Qb(wd|0)}while(0);J=Y+56|0;Ic=Y+4|0;k[Y>>2]=27524;k[J>>2]=27544;B=0;wa(508,Y+56|0,Ic|0);Tc=B;B=0;if(Tc&1){Tc=Rb()|0;Bd=Q;Cd=Tc;vva(J);Qb(Cd|0)}k[Y+128>>2]=0;k[Y+132>>2]=-1;k[Y>>2]=27468;k[J>>2]=27488;B=0;va(448,Ic|0);Tc=B;B=0;do if(Tc&1){Mc=Rb()|0;Dd=Q;Ed=Mc}else{k[Ic>>2]=27560;Mc=Y+36|0;k[Mc>>2]=0;k[Mc+4>>2]=0;k[Mc+8>>2]=0;k[Mc+12>>2]=0;k[Y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ic|0,c|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Nc=Q;Yua(c);Yua(Mc);Ava(Ic);Dd=Nc;Ed=nb;break}Yua(c);B=0;Ia(40,Y|0,123323,98)|0;nb=B;B=0;do if(nb&1)Ka=428;else{B=0;wa(510,Z|0,Ic|0);Nc=B;B=0;if(Nc&1){Ka=428;break}B=0;ya(424,Z|0)|0;Nc=B;B=0;if(Nc&1){Nc=Rb()|0;Pc=Q;Yua(Z);Fd=Nc;Gd=Pc;break}Yua(Z);k[Y>>2]=27468;k[J>>2]=27488;k[Ic>>2]=27560;Yua(Mc);Ava(Ic);vva(J);Pc=_+56|0;Nc=_+4|0;k[_>>2]=27524;k[Pc>>2]=27544;B=0;wa(508,_+56|0,Nc|0);Oc=B;B=0;if(Oc&1){Oc=Rb()|0;Hd=Q;Id=Oc;vva(Pc);Qb(Id|0)}k[_+128>>2]=0;k[_+132>>2]=-1;k[_>>2]=27468;k[Pc>>2]=27488;B=0;va(448,Nc|0);Oc=B;B=0;do if(Oc&1){K=Rb()|0;Jd=Q;Kd=K}else{k[Nc>>2]=27560;K=_+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[_+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Nc|0,c|0);L=B;B=0;if(L&1){L=Rb()|0;Rc=Q;Yua(c);Yua(K);Ava(Nc);Jd=Rc;Kd=L;break}Yua(c);B=0;L=Ia(40,_|0,123422,31)|0;Rc=B;B=0;m:do if(Rc&1)Ka=431;else{B=0;Xa(239,L|0,0)|0;M=B;B=0;if(M&1){Ka=431;break}M=Ab(20)|0;B=0;eb(502,$|0,121503,60);Hc=B;B=0;do if(!(Hc&1)){B=0;eb(502,aa|0,122773,23);kb=B;B=0;if(kb&1){kb=Rb()|0;Gc=Q;Yua($);Ld=kb;Md=Gc;break}B=0;wa(510,ba|0,Nc|0);Gc=B;B=0;if(Gc&1){Gc=Rb()|0;Nd=1;Od=Gc;Pd=Q}else{B=0;ua(163,M|0,$|0,aa|0,3693,ba|0);Gc=B;B=0;if(Gc&1)Qd=1;else{B=0;eb(503,M|0,1240,229);B=0;Qd=0}Gc=Rb()|0;kb=Q;Yua(ba);Nd=Qd;Od=Gc;Pd=kb}Yua(aa);Yua($);if(Nd){Ld=Od;Md=Pd}else{Rd=Od;Sd=Pd;break m}}else{kb=Rb()|0;Ld=kb;Md=Q}while(0);zb(M|0);Rd=Ld;Sd=Md}while(0);if((Ka|0)==431){L=Rb()|0;Rd=L;Sd=Q}k[_>>2]=27468;k[Pc>>2]=27488;k[Nc>>2]=27560;Yua(K);Ava(Nc);vva(Pc);ha=Rd;ia=Sd;Qb(ha|0)}while(0);Hd=Jd;Id=Kd;vva(Pc);Qb(Id|0)}while(0);if((Ka|0)==428){nb=Rb()|0;Fd=nb;Gd=Q}k[Y>>2]=27468;k[J>>2]=27488;k[Ic>>2]=27560;Yua(Mc);Ava(Ic);vva(J);ha=Fd;ia=Gd;Qb(ha|0)}while(0);Bd=Dd;Cd=Ed;vva(J);Qb(Cd|0)}while(0);if((Ka|0)==358){Lc=Rb()|0;hd=Lc;id=Q}k[P>>2]=27468;k[fa>>2]=27488;k[Db>>2]=27560;Yua(lb);Ava(Db);vva(fa);ha=hd;ia=id;Qb(ha|0)}while(0);dd=fd;ed=gd;vva(fa);Qb(ed|0)}while(0);if((Ka|0)==355){ga=Rb()|0;bd=ga;cd=Q}k[N>>2]=27468;k[b>>2]=27488;k[Vc>>2]=27560;Yua(Uc);Ava(Vc);vva(b);ha=bd;ia=cd;Qb(ha|0)}while(0);Zc=$c;_c=ad;vva(b);Qb(_c|0)}function e5(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0;g=Qqa(88)|0;B=0;va(533,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;Sqa(g);j=i;l=h;Qb(l|0)}k[a>>2]=g;k[a+4>>2]=a;g=a+72|0;h=a+112|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[g+20>>2]=0;k[g+24>>2]=0;k[g+28>>2]=0;Ipa(h,256,16);B=0;va(534,19999999);g=B;B=0;if(!(g&1)){k[a+32>>2]=0;k[a+20>>2]=0;g=a+44|0;k[a+16>>2]=0;k[a+28>>2]=0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[g+16>>2]=0;k[a+36>>2]=0;g=a+40|0;i=a+152|0;m=i+48|0;do{k[i>>2]=0;i=i+4|0}while((i|0)<(m|0));k[a+8>>2]=0;k[a+24>>2]=0;k[a+12>>2]=0;k[g>>2]=0;B=0;La(35,a|0,b|0,c|0,d|0,e|0,f|0);f=B;B=0;if((!(f&1)?(B=0,wa(521,a|0,0),f=B,B=0,!(f&1)):0)?(B=0,va(535,a|0),a=B,B=0,!(a&1)):0)return}a=Rb()|0;f=Q;Jpa(h);j=f;l=a;Qb(l|0)}function f5(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;g=r;r=r+416|0;h=g+392|0;j=g;l=g+24|0;m=g+256|0;n=g+108|0;o=g+120|0;q=g+96|0;s=g+84|0;t=g+72|0;Kpa(j,1.0);u=a+44|0;k[u>>2]=e;v=a+36|0;k[v>>2]=e;w=a+48|0;k[w>>2]=f;f=Rqa(e>>>0>59652323?-1:e*72|0)|0;do if(e){x=f+(e*72|0)|0;y=f;while(1){B=0;va(530,y|0);z=B;B=0;if(z&1){A=5;break}y=y+72|0;if((y|0)==(x|0)){A=6;break}}if((A|0)==5){x=Rb()|0;Tqa(f);Qb(x|0)}else if((A|0)==6){C=k[u>>2]|0;break}}else C=0;while(0);e=a+8|0;k[e>>2]=f;x=Rqa(C>>>0>1073741823?-1:C<<2)|0;k[a+24>>2]=x;if((C|0)>0){x=f;f=0;do{p[x+(f*72|0)+8>>3]=+p[c+(f<<3)>>3];p[x+(f*72|0)+16>>3]=+p[d+(f<<3)>>3];k[x+(f*72|0)+48>>2]=1;k[x+(f*72|0)+56>>2]=k[9500];y=x+(f*72|0)+24|0;k[y>>2]=k[j>>2];k[y+4>>2]=k[j+4>>2];k[y+8>>2]=k[j+8>>2];k[y+12>>2]=k[j+12>>2];k[y+16>>2]=k[j+16>>2];k[y+20>>2]=k[j+20>>2];x=k[e>>2]|0;k[x+(f*72|0)+64>>2]=0;f=f+1|0;y=k[u>>2]|0}while((f|0)<(y|0));D=y}else D=C;C=(k[v>>2]<<1)+-2|0;k[a+40>>2]=C;v=Rqa(C>>>0>89478485?-1:C*48|0)|0;do if(!C)E=D;else{f=v+(C*48|0)|0;x=v;while(1){B=0;va(532,x|0);e=B;B=0;if(e&1)break;x=x+48|0;if((x|0)==(f|0)){A=14;break}}if((A|0)==14){E=k[u>>2]|0;break}f=Rb()|0;x=Q;Tqa(v);F=x;G=f;Qb(G|0)}while(0);C=a+12|0;k[C>>2]=v;D=Rqa(E)|0;if((E|0)>0)WEa(D|0,0,((E|0)>1?E:1)|0)|0;a:do if((k[w>>2]|0)>0){E=v;f=0;while(1){x=f*3|0;e=(k[b+(x<<2)>>2]|0)+-1|0;j=(k[b+(x+1<<2)>>2]|0)+-1|0;d=(k[b+(x+2<<2)>>2]|0)+-1|0;K4(l,a,e,j,d);x=E+(f*48|0)|0;c=l;y=x+44|0;do{k[x>>2]=k[c>>2];x=x+4|0;c=c+4|0}while((x|0)<(y|0));k[E+(f*48|0)+40>>2]=1;i[D+d>>0]=1;i[D+j>>0]=1;i[D+e>>0]=1;c=f+1|0;if((c|0)>=(k[w>>2]|0))break a;E=k[C>>2]|0;f=c}}while(0);b5(a,0);Cpa(k[a>>2]|0);a=k[u>>2]|0;if((a|0)<=0){Tqa(D);r=g;return}C=m+56|0;w=m+4|0;l=m+56|0;b=m+128|0;v=m+132|0;f=m+36|0;E=m+52|0;c=a;a=0;x=0;while(1){if(!(i[D+a>>0]|0)){k[m>>2]=27524;k[C>>2]=27544;B=0;wa(508,l|0,w|0);y=B;B=0;if(y&1){A=30;break}k[b>>2]=0;k[v>>2]=-1;k[m>>2]=27468;k[C>>2]=27488;B=0;va(448,w|0);y=B;B=0;if(y&1){A=31;break}k[w>>2]=27560;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[E>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,w|0,h|0);y=B;B=0;if(y&1){A=29;break}Yua(h);B=0;y=Ia(40,m|0,123454,7)|0;z=B;B=0;if(z&1){A=40;break}z=a+1|0;B=0;H=Xa(253,y|0,z|0)|0;y=B;B=0;if(y&1){A=40;break}B=0;Ia(40,H|0,123462,32)|0;H=B;B=0;if(H&1){A=40;break}B=0;wa(510,n|0,w|0);H=B;B=0;if(H&1){A=40;break}B=0;ya(424,n|0)|0;H=B;B=0;if(H&1){A=41;break}Yua(n);k[m>>2]=27468;k[C>>2]=27488;k[w>>2]=27560;Yua(f);Ava(w);vva(C);I=z;J=k[u>>2]|0;K=1}else{I=a+1|0;J=c;K=x}if((I|0)<(J|0)){c=J;a=I;x=K}else{A=44;break}}if((A|0)==29){x=Rb()|0;I=Q;Yua(h);Yua(f);Ava(w);L=I;M=x;A=32}else if((A|0)==30){x=Rb()|0;N=Q;O=x;vva(C);Qb(O|0)}else if((A|0)==31){x=Rb()|0;L=Q;M=x;A=32}else if((A|0)==40){x=Rb()|0;P=Q;R=x;A=42}else if((A|0)==41){x=Rb()|0;I=Q;Yua(n);P=I;R=x;A=42}else if((A|0)==44){if(!K){Tqa(D);r=g;return}g=o+56|0;D=o+4|0;k[o>>2]=27524;k[g>>2]=27544;B=0;wa(508,o+56|0,D|0);K=B;B=0;if(K&1){K=Rb()|0;S=Q;T=K;vva(g);Qb(T|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[g>>2]=27488;B=0;va(448,D|0);K=B;B=0;do if(K&1){x=Rb()|0;U=Q;V=x}else{k[D>>2]=27560;x=o+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[o+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,D|0,h|0);I=B;B=0;if(I&1){I=Rb()|0;n=Q;Yua(h);Yua(x);Ava(D);U=n;V=I;break}Yua(h);B=0;I=Ia(40,o|0,123495,35)|0;n=B;B=0;b:do if(!(n&1)?(B=0,Xa(239,I|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,q|0,121503,60);J=B;B=0;do if(!(J&1)){B=0;eb(502,s|0,121564,8);c=B;B=0;if(c&1){c=Rb()|0;u=Q;Yua(q);W=c;X=u;break}B=0;wa(510,t|0,D|0);u=B;B=0;if(u&1){u=Rb()|0;Y=1;Z=Q;_=u}else{B=0;ua(163,a|0,q|0,s|0,307,t|0);u=B;B=0;if(u&1)$=1;else{B=0;eb(503,a|0,1240,229);B=0;$=0}u=Rb()|0;c=Q;Yua(t);Y=$;Z=c;_=u}Yua(s);Yua(q);if(Y){W=_;X=Z}else{aa=Z;ba=_;break b}}else{u=Rb()|0;W=u;X=Q}while(0);zb(a|0);aa=X;ba=W}else A=60;while(0);if((A|0)==60){I=Rb()|0;aa=Q;ba=I}k[o>>2]=27468;k[g>>2]=27488;k[D>>2]=27560;Yua(x);Ava(D);vva(g);F=aa;G=ba;Qb(G|0)}while(0);S=U;T=V;vva(g);Qb(T|0)}if((A|0)==32){N=L;O=M;vva(C);Qb(O|0)}else if((A|0)==42){k[m>>2]=27468;k[C>>2]=27488;k[w>>2]=27560;Yua(f);Ava(w);vva(C);F=P;G=R;Qb(G|0)}}function g5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=a+48|0;if((k[i>>2]|0)>0){j=0;do{k[b+(j<<2)>>2]=-1;j=j+1|0}while((j|0)<(k[i>>2]|0))}i=a+60|0;if((k[i>>2]|0)<=0){l=0;r=c;return l|0}j=k[a+28>>2]|0;m=a+12|0;a=0;n=0;while(1){o=k[j+(a<<4)>>2]|0;if(!o)break;p=k[m>>2]|0;q=n;s=o;while(1){t=q+1|0;k[b+(((s-p|0)/48|0)<<2)>>2]=a;s=k[s+40>>2]|0;if((o|0)==(s|0)){u=t;break}else q=t}a=a+1|0;if((a|0)>=(k[i>>2]|0)){l=u;v=5;break}else n=u}if((v|0)==5){r=c;return l|0}l=e+56|0;c=e+4|0;k[e>>2]=27524;k[l>>2]=27544;B=0;wa(508,e+56|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(l);Qb(x|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[l>>2]=27488;B=0;va(448,c|0);v=B;B=0;do if(v&1){u=Rb()|0;y=Q;z=u}else{k[c>>2]=27560;u=e+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;i=Q;Yua(d);Yua(u);Ava(c);y=i;z=n;break}Yua(d);B=0;n=Ia(40,e|0,123531,31)|0;i=B;B=0;if(!(i&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,f|0,121503,60);i=B;B=0;do if(!(i&1)){B=0;eb(502,g|0,123563,21);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(f);A=b;C=a;break}B=0;wa(510,h|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;D=Q;E=a;F=1}else{B=0;ua(163,n|0,f|0,g|0,4145,h|0);a=B;B=0;if(a&1)G=1;else{B=0;eb(503,n|0,1240,229);B=0;G=0}a=Rb()|0;b=Q;Yua(h);D=b;E=a;F=G}Yua(g);Yua(f);if(F){A=D;C=E}else{H=D;I=E;k[e>>2]=27468;k[l>>2]=27488;k[c>>2]=27560;Yua(u);Ava(c);vva(l);Qb(I|0)}}else{a=Rb()|0;A=Q;C=a}while(0);zb(n|0);H=A;I=C;k[e>>2]=27468;k[l>>2]=27488;k[c>>2]=27560;Yua(u);Ava(c);vva(l);Qb(I|0)}i=Rb()|0;H=Q;I=i;k[e>>2]=27468;k[l>>2]=27488;k[c>>2]=27560;Yua(u);Ava(c);vva(l);Qb(I|0)}while(0);w=y;x=z;vva(l);Qb(x|0);return 0}function h5(a,b){a=a|0;b=b|0;return (b-(k[a+8>>2]|0)|0)/72|0|0}function i5(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);c=a+16|0;d=k[c>>2]|0;if(d)Tqa(d);d=a+12|0;e=k[d>>2]|0;if(e)Tqa(e);e=a+20|0;f=k[e>>2]|0;if(f){Opa(f);Sqa(f)}f=a+24|0;g=k[f>>2]|0;if(g)Tqa(g);g=a+28|0;h=k[g>>2]|0;if(h)Tqa(h);h=k[a+164>>2]|0;if(h)Tqa(h);h=k[a+156>>2]|0;if(h)Tqa(h);h=k[a+172>>2]|0;if(h)Tqa(h);h=k[a+180>>2]|0;if(h)Tqa(h);h=k[a>>2]|0;i=k[h>>2]|0;if((i|0)<=0){if(!((h|0)==0|(i|0)!=0)){Dpa(h);Sqa(h)}}else k[h>>2]=i+-1;i=k[a+4>>2]|0;do if((i|0)!=(a|0)){h=i+32|0;j=k[h>>2]|0;if((j|0)>0){k[h>>2]=j+-1;break}if(!j){i5(i);Sqa(i)}}while(0);B=0;va(534,19999999);i=B;B=0;if(i&1){i=Rb(0)|0;Jpa(a+112|0);Dd(i)}else{k[a+32>>2]=0;k[e>>2]=0;e=a+44|0;k[c>>2]=0;k[g>>2]=0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;k[a+36>>2]=0;e=a+40|0;g=a+152|0;c=g+48|0;do{k[g>>2]=0;g=g+4|0}while((g|0)<(c|0));k[b>>2]=0;k[f>>2]=0;k[d>>2]=0;k[e>>2]=0;Jpa(a+112|0);return}}function j5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0;e=r;r=r+752|0;f=e+728|0;g=e+704|0;h=e;i=e+544|0;l=e+716|0;m=e+692|0;n=e+680|0;o=e+408|0;p=e+392|0;q=e+244|0;s=e+232|0;t=e+256|0;u=e+84|0;v=e+72|0;w=e+60|0;x=e+96|0;y=e+48|0;z=e+36|0;A=e+24|0;C=k[c>>2]|0;D=k[c+4>>2]|0;E=k[c+8>>2]|0;F=c+32|0;G=F;H=k[G>>2]|0;I=k[G+4>>2]|0;G=(C|0)!=0;if(G)if(D){J=(E|0)!=0;if(!(J&(I|0)<0)){K=J?-1:2;L=J;M=4}}else{K=1;L=0;M=4}else{K=0;L=0;M=4}if((M|0)==4?!(((I|0)>0|(I|0)==0&H>>>0>0)&(K|0)>-1):0){do if(!d){if(L){K=b;H=k[K>>2]|0;I=k[K+4>>2]|0;K=D;J=k[K>>2]|0;N=k[K+4>>2]|0;K=E;O=k[K>>2]|0;P=k[K+4>>2]|0;K=J-H|0;R=N-I|0;S=O-H|0;T=P-I|0;U=bFa(T|0,((T|0)<0)<<31>>31|0,K|0,((K|0)<0)<<31>>31|0)|0;K=Q;T=bFa(S|0,((S|0)<0)<<31>>31|0,R|0,((R|0)<0)<<31>>31|0)|0;R=REa(U|0,K|0,T|0,Q|0)|0;T=Q;K=h;k[K>>2]=R;k[K+4>>2]=T;K=C;U=k[K>>2]|0;S=k[K+4>>2]|0;K=H-U|0;H=((K|0)<0)<<31>>31;V=I-S|0;I=((V|0)<0)<<31>>31;W=O-U|0;O=P-S|0;P=bFa(O|0,((O|0)<0)<<31>>31|0,K|0,H|0)|0;O=Q;X=bFa(W|0,((W|0)<0)<<31>>31|0,V|0,I|0)|0;W=REa(P|0,O|0,X|0,Q|0)|0;X=h+8|0;k[X>>2]=W;k[X+4>>2]=Q;X=J-U|0;U=N-S|0;S=bFa(V|0,I|0,X|0,((X|0)<0)<<31>>31|0)|0;X=Q;I=bFa(K|0,H|0,U|0,((U|0)<0)<<31>>31|0)|0;U=REa(S|0,X|0,I|0,Q|0)|0;I=h+16|0;k[I>>2]=U;k[I+4>>2]=Q;Y=h;Z=R;_=T;break}do if(G){T=h;k[T>>2]=-1;k[T+4>>2]=-1;if(!D){T=C;R=k[T>>2]|0;I=k[T+4>>2]|0;T=b;U=E;X=(k[T>>2]|0)-R|0;S=(k[T+4>>2]|0)-I|0;T=(k[U>>2]|0)-R|0;R=(k[U+4>>2]|0)-I|0;I=bFa(R|0,((R|0)<0)<<31>>31|0,X|0,((X|0)<0)<<31>>31|0)|0;X=Q;R=bFa(T|0,((T|0)<0)<<31>>31|0,S|0,((S|0)<0)<<31>>31|0)|0;S=REa(I|0,X|0,R|0,Q|0)|0;$=S;aa=Q;ba=-1;ca=-1;M=36;break}S=h+8|0;k[S>>2]=-1;k[S+4>>2]=-1;if(!E){S=C;R=k[S>>2]|0;X=k[S+4>>2]|0;S=D;I=b;T=(k[S>>2]|0)-R|0;U=(k[S+4>>2]|0)-X|0;S=(k[I>>2]|0)-R|0;R=(k[I+4>>2]|0)-X|0;X=bFa(R|0,((R|0)<0)<<31>>31|0,T|0,((T|0)<0)<<31>>31|0)|0;T=Q;R=bFa(S|0,((S|0)<0)<<31>>31|0,U|0,((U|0)<0)<<31>>31|0)|0;U=REa(X|0,T|0,R|0,Q|0)|0;da=U;ea=Q;fa=-1;ga=-1}else{da=-1;ea=-1;fa=-1;ga=-1}}else{U=b;R=k[U>>2]|0;T=k[U+4>>2]|0;U=D;X=E;S=(k[U>>2]|0)-R|0;I=(k[U+4>>2]|0)-T|0;U=(k[X>>2]|0)-R|0;R=(k[X+4>>2]|0)-T|0;T=bFa(R|0,((R|0)<0)<<31>>31|0,S|0,((S|0)<0)<<31>>31|0)|0;S=Q;R=bFa(U|0,((U|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;I=REa(T|0,S|0,R|0,Q|0)|0;R=Q;S=h;k[S>>2]=I;k[S+4>>2]=R;$=-1;aa=-1;ba=I;ca=R;M=36}while(0);if((M|0)==36){R=h+8|0;k[R>>2]=$;k[R+4>>2]=aa;da=-1;ea=-1;fa=ba;ga=ca}R=h+16|0;k[R>>2]=da;k[R+4>>2]=ea;Y=h;Z=fa;_=ga}else{R=d;Y=d;Z=k[R>>2]|0;_=k[R+4>>2]|0}while(0);d=(Z|0)==0&(_|0)==0;_=Y+8|0;Z=_;ga=(k[Z>>2]|0)==0&(k[Z+4>>2]|0)==0;Z=Y+16|0;fa=Z;h=(k[fa>>2]|0)==0&(k[fa+4>>2]|0)==0;fa=h?2:ga?1:(d^1)<<31>>31;switch((h&1)+(ga?(d?2:1):d&1)|0){case 0:{ha=0;break}case 1:{d=j[52944+(fa<<1)>>1]|0;M4(f,c,d<<16>>16);ga=F;h=k[ga+4>>2]|0;if((h|0)>-1|(h|0)==-1&(k[ga>>2]|0)>>>0>4294967295?(ga=k[f>>2]|0,(k[ga+32+4>>2]|0)<0):0){j5(a,b,ga,0);r=e;return}ha=d;break}default:{d=o+56|0;ga=o+4|0;k[o>>2]=27524;k[d>>2]=27544;B=0;wa(508,o+56|0,ga|0);h=B;B=0;if(h&1){h=Rb()|0;ia=Q;ja=h;vva(d);Qb(ja|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[d>>2]=27488;B=0;va(448,ga|0);h=B;B=0;do if(h&1){ea=Rb()|0;ka=Q;la=ea}else{k[ga>>2]=27560;ea=o+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ga|0,f|0);da=B;B=0;if(da&1){da=Rb()|0;ca=Q;Yua(f);Yua(ea);Ava(ga);ka=ca;la=da;break}Yua(f);B=0;da=Ia(40,o|0,123648,52)|0;ca=B;B=0;a:do if(!(ca&1)?(B=0,Xa(239,da|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,p|0,121503,60);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,q|0,123638,9);$=B;B=0;if($&1){$=Rb()|0;E=Q;Yua(p);ma=E;na=$;break}B=0;wa(510,s|0,ga|0);$=B;B=0;if($&1){$=Rb()|0;oa=1;pa=Q;qa=$}else{B=0;ua(163,ba|0,p|0,q|0,1180,s|0);$=B;B=0;if($&1)ra=1;else{B=0;eb(503,ba|0,1240,229);B=0;ra=0}$=Rb()|0;E=Q;Yua(s);oa=ra;pa=E;qa=$}Yua(q);Yua(p);if(oa){ma=pa;na=qa}else{sa=pa;ta=qa;break a}}else{$=Rb()|0;ma=Q;na=$}while(0);zb(ba|0);sa=ma;ta=na}else M=60;while(0);if((M|0)==60){da=Rb()|0;sa=Q;ta=da}k[o>>2]=27468;k[d>>2]=27488;k[ga>>2]=27560;Yua(ea);Ava(ga);vva(d);xa=sa;ya=ta;Qb(ya|0)}while(0);ia=ka;ja=la;vva(d);Qb(ja|0)}}Y4(c,0);Y4(c,1);Y4(c,2);k[g>>2]=c;ja=a+48|0;d=k[ja>>2]|0;la=d+1|0;ka=k[a+12>>2]|0;ia=ka+(d*48|0)|0;k[g+4>>2]=ia;ta=d+2|0;k[ja>>2]=ta;ja=ka+(la*48|0)|0;k[g+8>>2]=ja;if((ta|0)>(k[a+40>>2]|0)){a=t+56|0;ta=t+4|0;k[t>>2]=27524;k[a>>2]=27544;B=0;wa(508,t+56|0,ta|0);sa=B;B=0;if(sa&1){sa=Rb()|0;za=Q;Aa=sa;vva(a);Qb(Aa|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[a>>2]=27488;B=0;va(448,ta|0);sa=B;B=0;do if(sa&1){ga=Rb()|0;Ba=Q;Ca=ga}else{k[ta>>2]=27560;ga=t+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[t+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ta|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;na=Q;Yua(f);Yua(ga);Ava(ta);Ba=na;Ca=o;break}Yua(f);B=0;o=Ia(40,t|0,123701,20)|0;na=B;B=0;b:do if(!(na&1)?(B=0,Xa(239,o|0,0)|0,ma=B,B=0,!(ma&1)):0){ma=Ab(20)|0;B=0;eb(502,u|0,121503,60);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,v|0,123638,9);pa=B;B=0;if(pa&1){pa=Rb()|0;oa=Q;Yua(u);Da=oa;Ea=pa;break}B=0;wa(510,w|0,ta|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Fa=1;Ga=Q;Ha=pa}else{B=0;ua(163,ma|0,u|0,v|0,1193,w|0);pa=B;B=0;if(pa&1)Ja=1;else{B=0;eb(503,ma|0,1240,229);B=0;Ja=0}pa=Rb()|0;oa=Q;Yua(w);Fa=Ja;Ga=oa;Ha=pa}Yua(v);Yua(u);if(Fa){Da=Ga;Ea=Ha}else{Ka=Ga;La=Ha;break b}}else{pa=Rb()|0;Da=Q;Ea=pa}while(0);zb(ma|0);Ka=Da;La=Ea}else M=84;while(0);if((M|0)==84){o=Rb()|0;Ka=Q;La=o}k[t>>2]=27468;k[a>>2]=27488;k[ta>>2]=27560;Yua(ga);Ava(ta);vva(a);xa=Ka;ya=La;Qb(ya|0)}while(0);za=Ba;Aa=Ca;vva(a);Qb(Aa|0)}Aa=ja;a=ja;Ca=c;Ba=a+44|0;do{k[a>>2]=k[Ca>>2];a=a+4|0;Ca=Ca+4|0}while((a|0)<(Ba|0));UEa(ia|0,c|0,44)|0;k[c+40>>2]=ia;k[ka+(d*48|0)+40>>2]=Aa;k[c>>2]=b;k[ka+(d*48|0)+4>>2]=b;k[ka+(la*48|0)+8>>2]=b;b=Y;Y=k[b+4>>2]|0;Aa=F;k[Aa>>2]=k[b>>2];k[Aa+4>>2]=Y;Y=_;_=k[Y+4>>2]|0;Aa=ka+(d*48|0)+32|0;k[Aa>>2]=k[Y>>2];k[Aa+4>>2]=_;_=Z;Z=k[_+4>>2]|0;Aa=ka+(la*48|0)+32|0;k[Aa>>2]=k[_>>2];k[Aa+4>>2]=Z;T4(c,0);T4(ia,1);T4(ja,2);U4(c,2,ja,0);U4(ia,0,c,1);U4(ja,1,ia,2);X4(c);X4(ia);X4(ja);if((fa|0)<=-1){r=e;return}if(S4(k[g+(fa<<2)>>2]|0,ha,0)|0){r=e;return}e=x+56|0;ha=x+4|0;k[x>>2]=27524;k[e>>2]=27544;B=0;wa(508,x+56|0,ha|0);fa=B;B=0;if(fa&1){fa=Rb()|0;Ma=Q;Na=fa;vva(e);Qb(Na|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[e>>2]=27488;B=0;va(448,ha|0);fa=B;B=0;do if(fa&1){g=Rb()|0;Oa=Q;Pa=g}else{k[ha>>2]=27560;g=x+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[x+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ha|0,f|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ia=Q;Yua(f);Yua(g);Ava(ha);Oa=ia;Pa=ja;break}Yua(f);B=0;ja=Ia(40,x|0,123722,29)|0;ia=B;B=0;c:do if(!(ia&1)?(B=0,Xa(239,ja|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,y|0,121503,60);Z=B;B=0;do if(!(Z&1)){B=0;eb(502,z|0,123638,9);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;_=Q;Yua(y);Qa=_;Ra=Aa;break}B=0;wa(510,A|0,ha|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Sa=1;Ta=Q;Ua=Aa}else{B=0;ua(163,c|0,y|0,z|0,1229,A|0);Aa=B;B=0;if(Aa&1)Va=1;else{B=0;eb(503,c|0,1240,229);B=0;Va=0}Aa=Rb()|0;_=Q;Yua(A);Sa=Va;Ta=_;Ua=Aa}Yua(z);Yua(y);if(Sa){Qa=Ta;Ra=Ua}else{Wa=Ta;Ya=Ua;break c}}else{Aa=Rb()|0;Qa=Q;Ra=Aa}while(0);zb(c|0);Wa=Qa;Ya=Ra}else M=109;while(0);if((M|0)==109){ja=Rb()|0;Wa=Q;Ya=ja}k[x>>2]=27468;k[e>>2]=27488;k[ha>>2]=27560;Yua(g);Ava(ha);vva(e);xa=Wa;ya=Ya;Qb(ya|0)}while(0);Ma=Oa;Na=Pa;vva(e);Qb(Na|0)}Na=i+56|0;e=i+4|0;k[i>>2]=27524;k[Na>>2]=27544;B=0;wa(508,i+56|0,e|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Za=Q;_a=Pa;vva(Na);Qb(_a|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[Na>>2]=27488;B=0;va(448,e|0);Pa=B;B=0;do if(Pa&1){Oa=Rb()|0;$a=Q;ab=Oa}else{k[e>>2]=27560;Oa=i+36|0;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Ya=Q;Yua(f);Yua(Oa);Ava(e);$a=Ya;ab=Ma;break}Yua(f);B=0;Ma=Ia(40,i|0,123585,52)|0;Ya=B;B=0;d:do if(!(Ya&1)?(B=0,Xa(239,Ma|0,0)|0,Wa=B,B=0,!(Wa&1)):0){Wa=Ab(20)|0;B=0;eb(502,l|0,121503,60);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,m|0,123638,9);x=B;B=0;if(x&1){x=Rb()|0;Ra=Q;Yua(l);bb=Ra;cb=x;break}B=0;wa(510,n|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;db=Q;fb=x;gb=1}else{B=0;ua(163,Wa|0,l|0,m|0,1138,n|0);x=B;B=0;if(x&1)hb=1;else{B=0;eb(503,Wa|0,1240,229);B=0;hb=0}x=Rb()|0;Ra=Q;Yua(n);db=Ra;fb=x;gb=hb}Yua(m);Yua(l);if(gb){bb=db;cb=fb}else{ib=db;jb=fb;break d}}else{x=Rb()|0;bb=Q;cb=x}while(0);zb(Wa|0);ib=bb;jb=cb}else M=20;while(0);if((M|0)==20){Ma=Rb()|0;ib=Q;jb=Ma}k[i>>2]=27468;k[Na>>2]=27488;k[e>>2]=27560;Yua(Oa);Ava(e);vva(Na);xa=ib;ya=jb;Qb(ya|0)}while(0);Za=$a;_a=ab;vva(Na);Qb(_a|0)}function k5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,l=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0;d=r;r=r+976|0;e=d+952|0;f=d+912|0;g=d+776|0;h=d+940|0;i=d+928|0;l=d+916|0;n=d+32|0;o=d+768|0;p=d+24|0;q=d+16|0;s=d+624|0;t=d+620|0;u=d+632|0;v=d+600|0;w=d+452|0;x=d+440|0;y=d+8|0;z=d+160|0;A=d+156|0;C=d+616|0;D=d+612|0;E=d+464|0;F=d+144|0;G=d+132|0;H=d+120|0;I=d;J=d+304|0;K=d+108|0;L=d+96|0;M=d+84|0;N=d+80|0;O=d+76|0;P=d+168|0;R=d+64|0;S=d+52|0;T=d+40|0;k[f>>2]=0;U=a+64|0;if((k[U>>2]|0)!=0?(k[b+64>>2]|0)!=0:0){k[c>>2]=0;k[c+4>>2]=0;V=m[52932+(j[a+60>>1]<<2)>>1]|0;k[n>>2]=k[U>>2];k[n+4>>2]=V&3;k[o>>2]=0;V=G4(n,o)|0;do if(!V){o=p;k[o>>2]=-1;k[o+4>>2]=-1;F4(s,n);o=m[52956+(k[s+4>>2]<<1)>>1]&3;U=n;k[U>>2]=k[s>>2];k[U+4>>2]=o;k[t>>2]=0;o=G4(n,t)|0;if(o){U=o;W=k[U>>2]|0;X=k[U+4>>2]|0;U=a;Y=b;Z=(k[U>>2]|0)-W|0;_=(k[U+4>>2]|0)-X|0;U=(k[Y>>2]|0)-W|0;W=(k[Y+4>>2]|0)-X|0;X=bFa(W|0,((W|0)<0)<<31>>31|0,Z|0,((Z|0)<0)<<31>>31|0)|0;Z=Q;W=bFa(U|0,((U|0)<0)<<31>>31|0,_|0,((_|0)<0)<<31>>31|0)|0;_=REa(X|0,Z|0,W|0,Q|0)|0;$=q;aa=b;ba=a;ca=_;da=Q;ea=o;break}o=u+56|0;_=u+4|0;k[u>>2]=27524;k[o>>2]=27544;B=0;wa(508,u+56|0,_|0);W=B;B=0;if(W&1){W=Rb()|0;fa=Q;ga=W;vva(o);Qb(ga|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[o>>2]=27488;B=0;va(448,_|0);W=B;B=0;do if(W&1){Z=Rb()|0;ha=Q;ia=Z}else{k[_>>2]=27560;Z=u+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[u+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,_|0,e|0);X=B;B=0;if(X&1){X=Rb()|0;U=Q;Yua(e);Yua(Z);Ava(_);ha=U;ia=X;break}Yua(e);B=0;X=Ia(40,u|0,123775,3)|0;U=B;B=0;a:do if(!(U&1)?(B=0,Xa(239,X|0,0)|0,Y=B,B=0,!(Y&1)):0){Y=Ab(20)|0;B=0;eb(502,v|0,121503,60);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,w|0,123765,9);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(v);ma=ka;na=la;break}B=0;wa(510,x|0,_|0);la=B;B=0;if(la&1){la=Rb()|0;oa=1;pa=la;qa=Q}else{B=0;ua(163,Y|0,v|0,w|0,4897,x|0);la=B;B=0;if(la&1)ra=1;else{B=0;eb(503,Y|0,1240,229);B=0;ra=0}la=Rb()|0;ka=Q;Yua(x);oa=ra;pa=la;qa=ka}Yua(w);Yua(v);if(oa){ma=pa;na=qa}else{sa=pa;ta=qa;break a}}else{ka=Rb()|0;ma=ka;na=Q}while(0);zb(Y|0);sa=ma;ta=na}else xa=44;while(0);if((xa|0)==44){X=Rb()|0;sa=X;ta=Q}k[u>>2]=27468;k[o>>2]=27488;k[_>>2]=27560;Yua(Z);Ava(_);vva(o);ya=sa;za=ta;Qb(ya|0)}while(0);fa=ha;ga=ia;vva(o);Qb(ga|0)}else{_=V;W=k[_>>2]|0;X=k[_+4>>2]|0;_=a;U=b;ja=(k[_>>2]|0)-W|0;ka=(k[_+4>>2]|0)-X|0;_=(k[U>>2]|0)-W|0;W=(k[U+4>>2]|0)-X|0;X=bFa(W|0,((W|0)<0)<<31>>31|0,ja|0,((ja|0)<0)<<31>>31|0)|0;ja=Q;W=bFa(_|0,((_|0)<0)<<31>>31|0,ka|0,((ka|0)<0)<<31>>31|0)|0;ka=REa(X|0,ja|0,W|0,Q|0)|0;W=Q;ja=p;k[ja>>2]=ka;k[ja+4>>2]=W;$=q;aa=b;ba=a;ca=ka;da=W;ea=V}while(0);V=p;k[V>>2]=ca;k[V+4>>2]=da;V=z+4|0;$=y+4|0;ga=ca;ca=da;da=0;ia=ea;while(1){if((ia|0)==(b|0)){xa=142;break}F4(z,n);ha=m[52956+(k[V>>2]<<1)>>1]|0;k[y>>2]=k[z>>2];k[$>>2]=ha&3;k[A>>2]=0;ha=ia;ia=G4(y,A)|0;fa=q;k[fa>>2]=ga;k[fa+4>>2]=ca;fa=(ia|0)!=0;if(fa){ta=ia;sa=k[ta>>2]|0;u=k[ta+4>>2]|0;ta=ba;na=aa;ma=(k[ta>>2]|0)-sa|0;qa=(k[ta+4>>2]|0)-u|0;ta=(k[na>>2]|0)-sa|0;sa=(k[na+4>>2]|0)-u|0;u=bFa(sa|0,((sa|0)<0)<<31>>31|0,ma|0,((ma|0)<0)<<31>>31|0)|0;ma=Q;sa=bFa(ta|0,((ta|0)<0)<<31>>31|0,qa|0,((qa|0)<0)<<31>>31|0)|0;qa=REa(u|0,ma|0,sa|0,Q|0)|0;Aa=qa;Ba=Q}else{Aa=ga;Ba=ca}qa=p;k[qa>>2]=Aa;k[qa+4>>2]=Ba;if(((Ba|0)>0|(Ba|0)==0&Aa>>>0>0)&(ca|0)<0){Ca=fa;Da=ha;xa=58;break}ha=y;fa=k[ha+4>>2]|0;qa=n;k[qa>>2]=k[ha>>2];k[qa+4>>2]=fa;if((da|0)>1998){xa=118;break}if((ea|0)==(ia|0)){Ea=-1;xa=143;break}else{ga=Aa;ca=Ba;da=da+1|0}}if((xa|0)==58){k[C>>2]=a;k[D>>2]=b;da=m[52956+(k[$>>2]<<1)>>1]&3;$=y;k[$>>2]=k[y>>2];k[$+4>>2]=da;if(!((Da|0)!=0&Ca)){Ca=E+56|0;Da=E+4|0;k[E>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,E+56|0,Da|0);da=B;B=0;if(da&1){da=Rb()|0;Fa=Q;Ga=da;vva(Ca);Qb(Ga|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Ca>>2]=27488;B=0;va(448,Da|0);da=B;B=0;do if(da&1){$=Rb()|0;Ha=Q;Ja=$}else{k[Da>>2]=27560;$=E+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[E+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Da|0,e|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;ca=Q;Yua(e);Yua($);Ava(Da);Ha=ca;Ja=Ba;break}Yua(e);B=0;Ba=Ia(40,E|0,123779,10)|0;ca=B;B=0;b:do if(!(ca&1)?(B=0,Xa(239,Ba|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,F|0,121503,60);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,G|0,123765,9);ia=B;B=0;if(ia&1){ia=Rb()|0;ea=Q;Yua(F);Ka=ia;La=ea;break}B=0;wa(510,H|0,Da|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Ma=1;Na=ea;Oa=Q}else{B=0;ua(163,Aa|0,F|0,G|0,4914,H|0);ea=B;B=0;if(ea&1)Pa=1;else{B=0;eb(503,Aa|0,1240,229);B=0;Pa=0}ea=Rb()|0;ia=Q;Yua(H);Ma=Pa;Na=ea;Oa=ia}Yua(G);Yua(F);if(Ma){Ka=Na;La=Oa}else{Qa=Na;Ra=Oa;break b}}else{ia=Rb()|0;Ka=ia;La=Q}while(0);zb(Aa|0);Qa=Ka;Ra=La}else xa=74;while(0);if((xa|0)==74){Ba=Rb()|0;Qa=Ba;Ra=Q}k[E>>2]=27468;k[Ca>>2]=27488;k[Da>>2]=27560;Yua($);Ava(Da);vva(Ca);ya=Qa;za=Ra;Qb(ya|0)}while(0);Fa=Ha;Ga=Ja;vva(Ca);Qb(Ga|0)}Ga=I;k[Ga>>2]=0;k[Ga+4>>2]=0;Ga=0;Ca=0;while(1){if(!(r5(C,D,y,I,q,p,f)|0)){xa=112;break}Ja=QEa(Ga|0,Ca|0,1,0)|0;Ha=Q;if((Ca|0)>0|(Ca|0)==0&Ga>>>0>1e7){Sa=Ja;Ta=Ha;break}else{Ga=Ja;Ca=Ha}}if((xa|0)==112){k[N>>2]=0;Ca=G4(y,N)|0;k[O>>2]=1;N=G4(y,O)|0;if(!((Ca|0)==(a|0)&(N|0)==(b|0))?!((Ca|0)==(b|0)&(N|0)==(a|0)):0){N=y;Ca=k[N+4>>2]|0;O=c;k[O>>2]=k[N>>2];k[O+4>>2]=Ca;Ua=-2}else{E4(y);a5(a,1,0)|0;a5(b,1,0)|0;Ca=y;y=k[Ca+4>>2]|0;O=c;k[O>>2]=k[Ca>>2];k[O+4>>2]=y;Ua=k[f>>2]|0}Ea=Ua;r=d;return Ea|0}Ua=J+56|0;y=J+4|0;k[J>>2]=27524;k[Ua>>2]=27544;B=0;wa(508,J+56|0,y|0);O=B;B=0;if(O&1){O=Rb()|0;Va=Q;Wa=O;vva(Ua);Qb(Wa|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[Ua>>2]=27488;B=0;va(448,y|0);O=B;B=0;do if(O&1){Ca=Rb()|0;Ya=Q;Za=Ca}else{k[y>>2]=27560;Ca=J+36|0;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[J+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,y|0,e|0);N=B;B=0;if(N&1){N=Rb()|0;Ga=Q;Yua(e);Yua(Ca);Ava(y);Ya=Ga;Za=N;break}Yua(e);B=0;N=Ia(40,J|0,123790,33)|0;Ga=B;B=0;c:do if(((((!(Ga&1)?(B=0,p=Xa(242,N|0,k[f>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,p|0,123824,18)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(44,q|0,Sa|0,Ta|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,p|0,123843,9)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,K|0,121503,60);p=B;B=0;do if(!(p&1)){B=0;eb(502,L|0,123765,9);I=B;B=0;if(I&1){I=Rb()|0;D=Q;Yua(K);_a=I;$a=D;break}B=0;wa(510,M|0,y|0);D=B;B=0;if(D&1){D=Rb()|0;ab=1;bb=D;cb=Q}else{B=0;ua(163,q|0,K|0,L|0,4919,M|0);D=B;B=0;if(D&1)db=1;else{B=0;eb(503,q|0,1240,229);B=0;db=0}D=Rb()|0;I=Q;Yua(M);ab=db;bb=D;cb=I}Yua(L);Yua(K);if(ab){_a=bb;$a=cb}else{fb=bb;gb=cb;break c}}else{I=Rb()|0;_a=I;$a=Q}while(0);zb(q|0);fb=_a;gb=$a}else xa=104;while(0);if((xa|0)==104){N=Rb()|0;fb=N;gb=Q}k[J>>2]=27468;k[Ua>>2]=27488;k[y>>2]=27560;Yua(Ca);Ava(y);vva(Ua);ya=fb;za=gb;Qb(ya|0)}while(0);Va=Ya;Wa=Za;vva(Ua);Qb(Wa|0)}else if((xa|0)==118){Wa=P+56|0;Ua=P+4|0;k[P>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,P+56|0,Ua|0);Za=B;B=0;if(Za&1){Za=Rb()|0;hb=Q;ib=Za;vva(Wa);Qb(ib|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Ua|0);Za=B;B=0;do if(Za&1){Ya=Rb()|0;jb=Q;kb=Ya}else{k[Ua>>2]=27560;Ya=P+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[P+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Ua|0,e|0);Va=B;B=0;if(Va&1){Va=Rb()|0;gb=Q;Yua(e);Yua(Ya);Ava(Ua);jb=gb;kb=Va;break}Yua(e);B=0;Va=Ia(40,P|0,123853,7)|0;gb=B;B=0;d:do if(!(gb&1)?(B=0,Xa(239,Va|0,0)|0,fb=B,B=0,!(fb&1)):0){fb=Ab(20)|0;B=0;eb(502,R|0,121503,60);y=B;B=0;do if(!(y&1)){B=0;eb(502,S|0,123765,9);J=B;B=0;if(J&1){J=Rb()|0;$a=Q;Yua(R);lb=J;mb=$a;break}B=0;wa(510,T|0,Ua|0);$a=B;B=0;if($a&1){$a=Rb()|0;nb=1;ob=$a;pb=Q}else{B=0;ua(163,fb|0,R|0,S|0,4938,T|0);$a=B;B=0;if($a&1)qb=1;else{B=0;eb(503,fb|0,1240,229);B=0;qb=0}$a=Rb()|0;J=Q;Yua(T);nb=qb;ob=$a;pb=J}Yua(S);Yua(R);if(nb){lb=ob;mb=pb}else{rb=ob;sb=pb;break d}}else{J=Rb()|0;lb=J;mb=Q}while(0);zb(fb|0);rb=lb;sb=mb}else xa=133;while(0);if((xa|0)==133){Va=Rb()|0;rb=Va;sb=Q}k[P>>2]=27468;k[Wa>>2]=27488;k[Ua>>2]=27560;Yua(Ya);Ava(Ua);vva(Wa);ya=rb;za=sb;Qb(ya|0)}while(0);hb=jb;ib=kb;vva(Wa);Qb(ib|0)}else if((xa|0)==142){E4(n);ib=n;n=k[ib+4>>2]|0;Wa=c;k[Wa>>2]=k[ib>>2];k[Wa+4>>2]=n;a5(a,1,0)|0;a5(b,1,0)|0;Ea=0;r=d;return Ea|0}else if((xa|0)==143){r=d;return Ea|0}}Ea=g+56|0;d=g+4|0;k[g>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,g+56|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;tb=Q;ub=b;vva(Ea);Qb(ub|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[Ea>>2]=27488;B=0;va(448,d|0);b=B;B=0;do if(b&1){a=Rb()|0;vb=Q;wb=a}else{k[d>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);n=B;B=0;if(n&1){n=Rb()|0;Wa=Q;Yua(e);Yua(a);Ava(d);vb=Wa;wb=n;break}Yua(e);B=0;n=Ia(40,g|0,123752,12)|0;Wa=B;B=0;e:do if(!(Wa&1)?(B=0,Xa(239,n|0,0)|0,ib=B,B=0,!(ib&1)):0){ib=Ab(20)|0;B=0;eb(502,h|0,121503,60);c=B;B=0;do if(!(c&1)){B=0;eb(502,i|0,123765,9);kb=B;B=0;if(kb&1){kb=Rb()|0;jb=Q;Yua(h);xb=kb;yb=jb;break}B=0;wa(510,l|0,d|0);jb=B;B=0;if(jb&1){jb=Rb()|0;Bb=jb;Cb=Q;Db=1}else{B=0;ua(163,ib|0,h|0,i|0,4880,l|0);jb=B;B=0;if(jb&1)Eb=1;else{B=0;eb(503,ib|0,1240,229);B=0;Eb=0}jb=Rb()|0;kb=Q;Yua(l);Bb=jb;Cb=kb;Db=Eb}Yua(i);Yua(h);if(Db){xb=Bb;yb=Cb}else{Fb=Bb;Gb=Cb;break e}}else{kb=Rb()|0;xb=kb;yb=Q}while(0);zb(ib|0);Fb=xb;Gb=yb}else xa=18;while(0);if((xa|0)==18){n=Rb()|0;Fb=n;Gb=Q}k[g>>2]=27468;k[Ea>>2]=27488;k[d>>2]=27560;Yua(a);Ava(d);vva(Ea);ya=Fb;za=Gb;Qb(ya|0)}while(0);tb=vb;ub=wb;vva(Ea);Qb(ub|0);return 0}function l5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,l=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0;c=r;r=r+912|0;d=c+896|0;e=c+696|0;f=c+880|0;g=c+868|0;h=c+856|0;i=c+560|0;l=c+844|0;n=c+832|0;o=c+548|0;q=c;s=c+544|0;t=c+264|0;u=c+408|0;v=c+116|0;w=c+104|0;x=c+92|0;y=c+272|0;z=c+80|0;A=c+68|0;C=c+56|0;D=c+48|0;E=c+128|0;F=c+32|0;G=c+20|0;H=c+8|0;I=a+48|0;J=k[I>>2]|0;K=Rqa(J>>>0>2147483647?-1:J<<1)|0;L=Rqa(J>>>0>1073741823?-1:J<<2)|0;M=(J|0)>0;if(M){N=a+12|0;O=0;do{k[(k[N>>2]|0)+(O*48|0)+40>>2]=0;O=O+1|0}while((O|0)<(J|0));if(M){M=a+12|0;O=J;N=0;P=0;while(1){R=k[M>>2]|0;S=R+(P*48|0)|0;T=R+(P*48|0)+40|0;if(!(k[T>>2]|0)){k[T>>2]=S;k[L>>2]=S;j[K>>1]=3;S=3;R=0;while(1){U=K+(R<<1)|0;V=S+-1<<16>>16;j[U>>1]=V;a:do if(!(S<<16>>16))W=R;else{X=U;Y=V;Z=R;while(1){_=L+(Z<<2)|0;$=Y;while(1){aa=$<<16>>16;ba=k[_>>2]|0;if((P4(ba,aa)|0)==0?(ca=Z4(ba,aa)|0,aa=ca+40|0,(k[aa>>2]|0)==0):0){da=ca;ea=aa;break}aa=j[X>>1]|0;$=aa+-1<<16>>16;j[X>>1]=$;if(!(aa<<16>>16)){W=Z;break a}}$=Z+1|0;k[ea>>2]=k[T>>2];k[T>>2]=da;_=K+($<<1)|0;k[L+($<<2)>>2]=da;j[_>>1]=2;X=_;Y=2;Z=$}}while(0);V=W+-1|0;if((W|0)<=0)break;S=j[K+(V<<1)>>1]|0;R=V}fa=k[I>>2]|0;ga=N+1|0}else{fa=O;ga=N}P=P+1|0;if((P|0)>=(fa|0)){ha=fa;ia=ga;break}else{O=fa;N=ga}}ga=a+64|0;k[ga>>2]=0;if((ha|0)>0){N=a+12|0;fa=0;O=ia;P=0;while(1){W=k[N>>2]|0;do if(k[W+(P*48|0)+40>>2]|0){if(((k[W+(P*48|0)>>2]|0)!=0?(k[W+(P*48|0)+4>>2]|0)!=0:0)?(k[W+(P*48|0)+8>>2]|0)!=0:0){ja=fa;ka=O;break}da=O+-1|0;ea=W+(P*48|0)|0;M=fa+-1|0;k[ga>>2]=M;if(!ea){ja=M;ka=da}else{R=M;M=ea;while(1){ea=R+1|0;S=M+40|0;M=k[S>>2]|0;k[S>>2]=0;if(!M){la=ea;break}else R=ea}k[ga>>2]=la;ja=la;ka=da}}else{ja=fa;ka=O}while(0);P=P+1|0;if((P|0)>=(ha|0)){ma=ga;na=ha;oa=ja;pa=ka;break}else{fa=ja;O=ka}}}else{ma=ga;na=ha;oa=0;pa=ia}}else qa=18}else qa=18;if((qa|0)==18){ia=a+64|0;k[ia>>2]=0;ma=ia;na=J;oa=0;pa=0}Tqa(K);if(!((pa|0)!=0&(na|0)!=(oa|0))){oa=e+56|0;na=e+4|0;k[e>>2]=27524;k[oa>>2]=27544;B=0;wa(508,e+56|0,na|0);K=B;B=0;if(K&1){K=Rb()|0;ra=Q;sa=K;vva(oa);Qb(sa|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[oa>>2]=27488;B=0;va(448,na|0);K=B;B=0;do if(K&1){J=Rb()|0;ta=Q;xa=J}else{k[na>>2]=27560;J=e+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,na|0,d|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ha=Q;Yua(d);Yua(J);Ava(na);ta=ha;xa=ia;break}Yua(d);B=0;ia=Ia(40,e|0,123861,52)|0;ha=B;B=0;b:do if(!(ha&1)?(B=0,Xa(239,ia|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,f|0,121503,60);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,g|0,123914,13);O=B;B=0;if(O&1){O=Rb()|0;ja=Q;Yua(f);ya=O;za=ja;break}B=0;wa(510,h|0,na|0);ja=B;B=0;if(ja&1){ja=Rb()|0;Aa=1;Ba=ja;Ca=Q}else{B=0;ua(163,ga|0,f|0,g|0,2503,h|0);ja=B;B=0;if(ja&1)Da=1;else{B=0;eb(503,ga|0,1240,229);B=0;Da=0}ja=Rb()|0;O=Q;Yua(h);Aa=Da;Ba=ja;Ca=O}Yua(g);Yua(f);if(Aa){ya=Ba;za=Ca}else{Ea=Ba;Fa=Ca;break b}}else{O=Rb()|0;ya=O;za=Q}while(0);zb(ga|0);Ea=ya;Fa=za}else qa=45;while(0);if((qa|0)==45){ia=Rb()|0;Ea=ia;Fa=Q}k[e>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(J);Ava(na);vva(oa);Ga=Ea;Ha=Fa;Qb(Ga|0)}while(0);ra=ta;sa=xa;vva(oa);Qb(sa|0)}Tqa(L);L=(b|0)!=0;if((!L?(b=k[a>>2]|0,(k[b+32>>2]|0)!=0):0)?(sa=k[b+12>>2]|0,(sa|0)!=0):0){b=a+60|0;oa=a+28|0;xa=k[oa>>2]|0;ta=(xa|0)==0;if((sa|0)==(k[b>>2]|0))if(ta)qa=137;else Ja=k[a>>2]|0;else if(ta)qa=137;else{Tqa(xa);k[oa>>2]=0;qa=137}if((qa|0)==137){xa=k[a>>2]|0;ta=k[xa+12>>2]|0;sa=Rqa(ta>>>0>268435455?-1:ta<<4)|0;k[oa>>2]=sa;Ja=xa}k[b>>2]=k[Ja+12>>2];Ja=k[a+44>>2]|0;if((Ja|0)>0){xa=a+8|0;sa=0;do{ta=k[xa>>2]|0;j[ta+(sa*72|0)+60>>1]=0;k[ta+(sa*72|0)+64>>2]=0;sa=sa+1|0}while((sa|0)!=(Ja|0))}Ja=k[I>>2]|0;if((Ja|0)>0){sa=a+12|0;xa=0;do{X4((k[sa>>2]|0)+(xa*48|0)|0);xa=xa+1|0;ta=k[I>>2]|0}while((xa|0)<(ta|0));Ka=ta}else Ka=Ja;Ja=Rqa(Ka>>>0>1073741823?-1:Ka<<2)|0;Ka=m5(a)|0;xa=k[I>>2]|0;if((xa|0)>0){sa=k[a+12>>2]|0;ta=0;do{k[Ja+(ta<<2)>>2]=(k[sa+(ta*48|0)+40>>2]|0)!=0?-1:-2;ta=ta+1|0}while((ta|0)<(xa|0))}xa=k[b>>2]|0;c:do if((xa|0)>0){ta=q+4|0;sa=D+4|0;ra=a+12|0;Fa=0;Ea=0;d:while(1){na=k[(k[a>>2]|0)+32>>2]|0;e=k[na+(Fa*12|0)>>2]|0;k[(k[oa>>2]|0)+(Fa<<4)+4>>2]=k[na+(Fa*12|0)+8>>2];na=Ka+((Gpa(k[a>>2]|0,e)|0)<<2)|0;za=k[na>>2]|0;na=k[za>>2]|0;ya=k[za+4>>2]|0;Ca=k[na+64>>2]|0;Ba=k[(k[(k[a>>2]|0)+32>>2]|0)+(Fa*12|0)+4>>2]|0;Aa=k[e>>2]|0;f=k[e+4>>2]|0;e=(+p[Aa+8>>3]-+p[f+8>>3])*(+p[na+8>>3]-+p[ya+8>>3])+(+p[Aa+16>>3]-+p[f+16>>3])*(+p[na+16>>3]-+p[ya+16>>3])<0.0?0-Ba|0:Ba;Ba=k[oa>>2]|0;k[Ba+(Fa<<4)+8>>2]=e;k[Ba+(Fa<<4)+12>>2]=za;za=m[52932+(j[na+60>>1]<<2)>>1]|0;k[q>>2]=Ca;k[ta>>2]=za&3;while(1){k[s>>2]=0;if((G4(q,s)|0)==(ya|0))break;F4(D,q);za=k[D>>2]|0;na=m[52956+(k[sa>>2]<<1)>>1]&3;Ba=q;k[Ba>>2]=za;k[Ba+4>>2]=na;if((Ca|0)==(za|0)){La=Fa;qa=214;break d}}if((e|0)>0){F4(t,q);Ca=k[t>>2]|0;ya=k[oa>>2]|0;k[ya+(Fa<<4)>>2]=Ca;Ma=ya;Na=Ca}else{Ca=k[q>>2]|0;ya=k[oa>>2]|0;k[ya+(Fa<<4)>>2]=Ca;Ma=ya;Na=Ca}Ca=k[ra>>2]|0;ya=Ca;if(Na>>>0<Ca>>>0){Oa=Fa;qa=159;break}if(Na>>>0>=(Ca+((k[I>>2]|0)*48|0)|0)>>>0){Oa=Fa;qa=159;break}if((k[Na+32+4>>2]|0)<0){Oa=Fa;qa=159;break}if(!(k[Na+40>>2]|0)){Oa=Fa;qa=159;break}if((k[Ja+(((Na-ya|0)/48|0)<<2)>>2]|0)>-1)Pa=Ea;else{if((Fa|0)==(Ea|0))Qa=ya;else{ya=Ma+(Fa<<4)|0;Ca=Ma+(Ea<<4)|0;k[d>>2]=k[ya>>2];k[d+4>>2]=k[ya+4>>2];k[d+8>>2]=k[ya+8>>2];k[d+12>>2]=k[ya+12>>2];k[ya>>2]=k[Ca>>2];k[ya+4>>2]=k[Ca+4>>2];k[ya+8>>2]=k[Ca+8>>2];k[ya+12>>2]=k[Ca+12>>2];k[Ca>>2]=k[d>>2];k[Ca+4>>2]=k[d+4>>2];k[Ca+8>>2]=k[d+8>>2];k[Ca+12>>2]=k[d+12>>2];Qa=k[ra>>2]|0}Ca=Ea+1|0;ya=Na;while(1){ga=Ja+(((ya-Qa|0)/48|0)<<2)|0;if((k[ga>>2]|0)>-1){qa=188;break d}k[ga>>2]=Fa;ya=k[ya+40>>2]|0;if((ya|0)==(Na|0)){Pa=Ca;break}}}Fa=Fa+1|0;Ca=k[b>>2]|0;if((Fa|0)>=(Ca|0)){Ra=Ca;Sa=Pa;break c}else Ea=Pa}if((qa|0)==159){Ea=u+56|0;Fa=u+4|0;k[u>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,u+56|0,Fa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ta=Q;Ua=ra;vva(Ea);Qb(Ua|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Fa|0);ra=B;B=0;do if(ra&1){sa=Rb()|0;Va=Q;Wa=sa}else{k[Fa>>2]=27560;sa=u+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Fa|0,d|0);ta=B;B=0;if(ta&1){ta=Rb()|0;J=Q;Yua(d);Yua(sa);Ava(Fa);Va=J;Wa=ta;break}Yua(d);B=0;ta=Ia(40,u|0,123944,28)|0;J=B;B=0;e:do if(!(J&1)?(B=0,Ca=Xa(242,ta|0,Oa|0)|0,ya=B,B=0,!(ya&1)):0){B=0;Xa(239,Ca|0,0)|0;Ca=B;B=0;if(Ca&1){qa=175;break}Ca=Ab(20)|0;B=0;eb(502,v|0,121503,60);ya=B;B=0;do if(!(ya&1)){B=0;eb(502,w|0,123914,13);e=B;B=0;if(e&1){e=Rb()|0;ga=Q;Yua(v);Ya=e;Za=ga;break}B=0;wa(510,x|0,Fa|0);ga=B;B=0;if(ga&1){ga=Rb()|0;_a=ga;$a=Q;ab=1}else{B=0;ua(163,Ca|0,v|0,w|0,2627,x|0);ga=B;B=0;if(ga&1)bb=1;else{B=0;eb(503,Ca|0,1240,229);B=0;bb=0}ga=Rb()|0;e=Q;Yua(x);_a=ga;$a=e;ab=bb}Yua(w);Yua(v);if(ab){Ya=_a;Za=$a}else{cb=_a;db=$a;break e}}else{e=Rb()|0;Ya=e;Za=Q}while(0);zb(Ca|0);cb=Ya;db=Za}else qa=175;while(0);if((qa|0)==175){ta=Rb()|0;cb=ta;db=Q}k[u>>2]=27468;k[Ea>>2]=27488;k[Fa>>2]=27560;Yua(sa);Ava(Fa);vva(Ea);Ga=cb;Ha=db;Qb(Ga|0)}while(0);Ta=Va;Ua=Wa;vva(Ea);Qb(Ua|0)}else if((qa|0)==188){Fa=y+56|0;ra=y+4|0;k[y>>2]=27524;k[Fa>>2]=27544;B=0;wa(508,y+56|0,ra|0);ta=B;B=0;if(ta&1){ta=Rb()|0;fb=Q;gb=ta;vva(Fa);Qb(gb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Fa>>2]=27488;B=0;va(448,ra|0);ta=B;B=0;do if(ta&1){J=Rb()|0;hb=Q;ib=J}else{k[ra>>2]=27560;J=y+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ra|0,d|0);ya=B;B=0;if(ya&1){ya=Rb()|0;e=Q;Yua(d);Yua(J);Ava(ra);hb=e;ib=ya;break}Yua(d);B=0;ya=Ia(40,y|0,123973,18)|0;e=B;B=0;f:do if(!(e&1)?(B=0,Xa(239,ya|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,z|0,121503,60);za=B;B=0;do if(!(za&1)){B=0;eb(502,A|0,123914,13);na=B;B=0;if(na&1){na=Rb()|0;Ba=Q;Yua(z);jb=na;kb=Ba;break}B=0;wa(510,C|0,ra|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;lb=1;mb=Ba;nb=Q}else{B=0;ua(163,ga|0,z|0,A|0,2642,C|0);Ba=B;B=0;if(Ba&1)ob=1;else{B=0;eb(503,ga|0,1240,229);B=0;ob=0}Ba=Rb()|0;na=Q;Yua(C);lb=ob;mb=Ba;nb=na}Yua(A);Yua(z);if(lb){jb=mb;kb=nb}else{pb=mb;qb=nb;break f}}else{na=Rb()|0;jb=na;kb=Q}while(0);zb(ga|0);pb=jb;qb=kb}else qa=203;while(0);if((qa|0)==203){ya=Rb()|0;pb=ya;qb=Q}k[y>>2]=27468;k[Fa>>2]=27488;k[ra>>2]=27560;Yua(J);Ava(ra);vva(Fa);Ga=pb;Ha=qb;Qb(Ga|0)}while(0);fb=hb;gb=ib;vva(Fa);Qb(gb|0)}else if((qa|0)==214){ra=E+56|0;ta=E+4|0;k[E>>2]=27524;k[ra>>2]=27544;B=0;wa(508,E+56|0,ta|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;rb=Q;sb=Ea;vva(ra);Qb(sb|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[ra>>2]=27488;B=0;va(448,ta|0);Ea=B;B=0;do if(Ea&1){ya=Rb()|0;tb=Q;ub=ya}else{k[ta>>2]=27560;ya=E+36|0;k[ya>>2]=0;k[ya+4>>2]=0;k[ya+8>>2]=0;k[ya+12>>2]=0;k[E+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ta|0,d|0);e=B;B=0;if(e&1){e=Rb()|0;sa=Q;Yua(d);Yua(ya);Ava(ta);tb=sa;ub=e;break}Yua(d);B=0;e=Ia(40,E|0,123944,28)|0;sa=B;B=0;g:do if(!(sa&1)?(B=0,za=Xa(242,e|0,La|0)|0,Ca=B,B=0,!(Ca&1)):0){B=0;Xa(239,za|0,0)|0;za=B;B=0;if(za&1){qa=230;break}za=Ab(20)|0;B=0;eb(502,F|0,121503,60);Ca=B;B=0;do if(!(Ca&1)){B=0;eb(502,G|0,123914,13);na=B;B=0;if(na&1){na=Rb()|0;Ba=Q;Yua(F);vb=na;wb=Ba;break}B=0;wa(510,H|0,ta|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;xb=1;yb=Ba;Bb=Q}else{B=0;ua(163,za|0,F|0,G|0,2651,H|0);Ba=B;B=0;if(Ba&1)Cb=1;else{B=0;eb(503,za|0,1240,229);B=0;Cb=0}Ba=Rb()|0;na=Q;Yua(H);xb=Cb;yb=Ba;Bb=na}Yua(G);Yua(F);if(xb){vb=yb;wb=Bb}else{Db=yb;Eb=Bb;break g}}else{na=Rb()|0;vb=na;wb=Q}while(0);zb(za|0);Db=vb;Eb=wb}else qa=230;while(0);if((qa|0)==230){e=Rb()|0;Db=e;Eb=Q}k[E>>2]=27468;k[ra>>2]=27488;k[ta>>2]=27560;Yua(ya);Ava(ta);vva(ra);Ga=Db;Ha=Eb;Qb(Ga|0)}while(0);rb=tb;sb=ub;vva(ra);Qb(sb|0)}}else{Ra=xa;Sa=0}while(0);if((Sa|0)<(Ra|0))k[b>>2]=Sa;Sa=k[I>>2]|0;if((Sa|0)>0){b=a+12|0;Ra=0;do{if((k[Ja+(Ra<<2)>>2]|0)==-1){k[ma>>2]=(k[ma>>2]|0)+1;k[(k[b>>2]|0)+(Ra*48|0)+40>>2]=0}Ra=Ra+1|0}while((Ra|0)<(Sa|0))}Tqa(Ka);Tqa(Ja)}else{Ja=a+28|0;Ka=k[Ja>>2]|0;if(Ka)Tqa(Ka);Ka=Rqa(pa>>>0>268435455?-1:pa<<4)|0;k[Ja>>2]=Ka;Sa=a+60|0;k[Sa>>2]=pa;if((pa|0)>0){Ra=0;do{k[Ka+(Ra<<4)>>2]=0;b=Ra;Ra=Ra+1|0;k[Ka+(b<<4)+4>>2]=Ra}while((Ra|0)<(pa|0))}Ra=k[I>>2]|0;b=Rqa(Ra>>>0>1073741823?-1:Ra<<2)|0;xa=(Ra|0)>0;if(xa){sb=k[a+12>>2]|0;ub=0;do{k[b+(ub<<2)>>2]=(k[sb+(ub*48|0)+40>>2]|0)!=0?-1:-2;ub=ub+1|0}while((ub|0)<(Ra|0));if(xa){xa=a+12|0;ub=0;sb=0;while(1){tb=b+(ub<<2)|0;if((k[tb>>2]|0)==-1){rb=k[xa>>2]|0;Eb=rb+(ub*48|0)|0;Db=k[rb+(ub*48|0)+40>>2]|0;k[tb>>2]=sb;k[Ka+(sb<<4)>>2]=Eb;E=rb;rb=Db;do{k[b+(((rb-E|0)/48|0)<<2)>>2]=sb;rb=k[rb+40>>2]|0}while((rb|0)!=(Eb|0));k[tb>>2]=sb;Fb=sb+1|0}else Fb=sb;ub=ub+1|0;if((ub|0)>=(Ra|0)){Gb=Fb;break}else sb=Fb}}else Gb=0}else Gb=0;if((Gb|0)!=(pa|0)){Tqa(b);Gb=i+56|0;Fb=i+4|0;k[i>>2]=27524;k[Gb>>2]=27544;B=0;wa(508,i+56|0,Fb|0);sb=B;B=0;if(sb&1){sb=Rb()|0;Hb=Q;Ib=sb;vva(Gb);Qb(Ib|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[Gb>>2]=27488;B=0;va(448,Fb|0);sb=B;B=0;do if(sb&1){ub=Rb()|0;Jb=Q;Kb=ub}else{k[Fb>>2]=27560;ub=i+36|0;k[ub>>2]=0;k[ub+4>>2]=0;k[ub+8>>2]=0;k[ub+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Fb|0,d|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;xa=Q;Yua(d);Yua(ub);Ava(Fb);Jb=xa;Kb=Ka;break}Yua(d);B=0;Ka=Ia(40,i|0,123928,15)|0;xa=B;B=0;h:do if(!(xa&1)?(B=0,Xa(239,Ka|0,0)|0,Eb=B,B=0,!(Eb&1)):0){Eb=Ab(20)|0;B=0;eb(502,l|0,121503,60);rb=B;B=0;do if(!(rb&1)){B=0;eb(502,n|0,123914,13);E=B;B=0;if(E&1){E=Rb()|0;ra=Q;Yua(l);Lb=E;Mb=ra;break}B=0;wa(510,o|0,Fb|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Nb=1;Ob=ra;Pb=Q}else{B=0;ua(163,Eb|0,l|0,n|0,2540,o|0);ra=B;B=0;if(ra&1)Sb=1;else{B=0;eb(503,Eb|0,1240,229);B=0;Sb=0}ra=Rb()|0;E=Q;Yua(o);Nb=Sb;Ob=ra;Pb=E}Yua(n);Yua(l);if(Nb){Lb=Ob;Mb=Pb}else{Tb=Ob;Ub=Pb;break h}}else{E=Rb()|0;Lb=E;Mb=Q}while(0);zb(Eb|0);Tb=Lb;Ub=Mb}else qa=86;while(0);if((qa|0)==86){Ka=Rb()|0;Tb=Ka;Ub=Q}k[i>>2]=27468;k[Gb>>2]=27488;k[Fb>>2]=27560;Yua(ub);Ava(Fb);vva(Gb);Ga=Tb;Ha=Ub;Qb(Ga|0)}while(0);Hb=Jb;Ib=Kb;vva(Gb);Qb(Ib|0)}if(L){L=a+12|0;Ib=Ra;Ra=pa;i:while(1){if((Ra|0)!=0&(Ib|0)>0){pa=0;Gb=Ra;while(1){if(!Gb)break i;Kb=b+(pa<<2)|0;Jb=0;Hb=Gb;while(1){Ga=Z4((k[L>>2]|0)+(pa*48|0)|0,Jb)|0;if(!Ga)Vb=-2;else Vb=k[b+(((Ga-(k[L>>2]|0)|0)/48|0)<<2)>>2]|0;Ga=k[Kb>>2]|0;do if((Ga|0)==(Vb|0))Wb=Hb;else{Ub=(Vb|0)>-1;do if(Ub){Ha=k[Ja>>2]|0;Tb=k[Ha+(Vb<<4)+4>>2]|0;if(!((Ga|0)>-1&(Tb|0)<0)){Xb=Hb;break}Fb=Ha+(Ga<<4)+4|0;if((k[Fb>>2]|0)<=-1){Xb=Hb;break}k[Fb>>2]=Tb+-1;Xb=Hb+-1|0}else Xb=Hb;while(0);if((Ga|0)<=-1){if(!Ub){Wb=Xb;break}Tb=(k[Ja>>2]|0)+(Vb<<4)+4|0;if((k[Tb>>2]|0)<=-1){Wb=Xb;break}k[Tb>>2]=-1;Wb=Xb+-1|0;break}Tb=k[Ja>>2]|0;Fb=Tb+(Ga<<4)+4|0;Ha=k[Fb>>2]|0;do if(Ub&(Ha|0)<0){i=Tb+(Vb<<4)+4|0;if((k[i>>2]|0)<=-1){Yb=Xb;break}k[i>>2]=Ha+-1;Yb=Xb+-1|0}else Yb=Xb;while(0);if((Vb|0)>=0){Wb=Yb;break}if((k[Fb>>2]|0)<=-1){Wb=Yb;break}k[Fb>>2]=-1;Wb=Yb+-1|0}while(0);Jb=Jb+1|0;if(!((Wb|0)!=0&(Jb|0)<3)){Zb=Wb;break}else Hb=Wb}Hb=k[I>>2]|0;pa=pa+1|0;if(!((Zb|0)!=0&(pa|0)<(Hb|0))){_b=Hb;$b=Zb;break}else Gb=Zb}}else{_b=Ib;$b=Ra}if(!$b)break;else{Ib=_b;Ra=$b}}$b=k[Sa>>2]|0;if(($b|0)>0){Ra=$b;$b=0;_b=0;while(1){Ib=k[Ja>>2]|0;Zb=Ib+($b<<4)|0;if(!(k[Ib+($b<<4)+4>>2]&1)){Wb=k[Zb>>2]|0;if(!Wb){ac=Ra;bc=_b}else{Yb=k[ma>>2]|0;Vb=Wb;while(1){Wb=Yb+1|0;Xb=Vb+40|0;Vb=k[Xb>>2]|0;k[Xb>>2]=0;if(!Vb){cc=Wb;break}else Yb=Wb}k[ma>>2]=cc;ac=Ra;bc=_b}}else{if(($b|0)==(_b|0))dc=Ra;else{Yb=Ib+(_b<<4)|0;k[d>>2]=k[Zb>>2];k[d+4>>2]=k[Zb+4>>2];k[d+8>>2]=k[Zb+8>>2];k[d+12>>2]=k[Zb+12>>2];k[Zb>>2]=k[Yb>>2];k[Zb+4>>2]=k[Yb+4>>2];k[Zb+8>>2]=k[Yb+8>>2];k[Zb+12>>2]=k[Yb+12>>2];k[Yb>>2]=k[d>>2];k[Yb+4>>2]=k[d+4>>2];k[Yb+8>>2]=k[d+8>>2];k[Yb+12>>2]=k[d+12>>2];dc=k[Sa>>2]|0}ac=dc;bc=_b+1|0}$b=$b+1|0;if(($b|0)>=(ac|0)){ec=bc;break}else{Ra=ac;_b=bc}}}else ec=0;k[Sa>>2]=ec}Tqa(b)}k[ma>>2]=0;b=k[I>>2]|0;if((b|0)<=0){r=c;return}I=k[a+12>>2]|0;a=0;ec=0;while(1){if(!(k[I+(ec*48|0)+40>>2]|0)){Sa=a+1|0;k[ma>>2]=Sa;fc=Sa}else fc=a;ec=ec+1|0;if((ec|0)>=(b|0))break;else a=fc}r=c;return}
+-function lf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;h=r;r=r+160|0;i=h+64|0;j=h+56|0;l=h+48|0;m=h+40|0;n=h+32|0;o=h+24|0;q=h+16|0;s=h+8|0;t=h+152|0;u=h+148|0;v=h+144|0;w=h+140|0;x=h+136|0;y=h+132|0;z=h+128|0;A=h+120|0;B=h+112|0;C=h+104|0;D=h+96|0;E=h+88|0;F=h+80|0;G=h;H=h+72|0;k[t>>2]=a;k[u>>2]=b;k[v>>2]=c;k[w>>2]=d;k[x>>2]=e;k[y>>2]=f;k[z>>2]=g;if((k[(k[u>>2]|0)+116>>2]|0)>2){k[s>>2]=k[w>>2];mta(58246,s)|0}if((k[w>>2]|0)==2){Be(k[t>>2]|0,k[u>>2]|0,k[y>>2]|0);k[(k[k[y>>2]>>2]|0)+((k[27620+(k[(k[y>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[k[v>>2]>>2];k[(k[k[y>>2]>>2]|0)+((k[27632+(k[(k[y>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];Be(k[t>>2]|0,k[u>>2]|0,k[z>>2]|0);k[(k[k[z>>2]>>2]|0)+((k[27620+(k[(k[z>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[k[z>>2]>>2]|0)+((k[27632+(k[(k[z>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[k[v>>2]>>2];k[(k[k[y>>2]>>2]|0)+(k[(k[y>>2]|0)+4>>2]<<2)>>2]=k[k[z>>2]>>2]|k[(k[z>>2]|0)+4>>2];k[(k[k[z>>2]>>2]|0)+(k[(k[z>>2]|0)+4>>2]<<2)>>2]=k[k[y>>2]>>2]|k[(k[y>>2]|0)+4>>2];k[(k[y>>2]|0)+4>>2]=k[27632+(k[(k[y>>2]|0)+4>>2]<<2)>>2];k[(k[z>>2]|0)+4>>2]=k[27620+(k[(k[z>>2]|0)+4>>2]<<2)>>2];k[(k[k[y>>2]>>2]|0)+(k[(k[y>>2]|0)+4>>2]<<2)>>2]=k[k[z>>2]>>2]|k[(k[z>>2]|0)+4>>2];k[(k[k[z>>2]>>2]|0)+(k[(k[z>>2]|0)+4>>2]<<2)>>2]=k[k[y>>2]>>2]|k[(k[y>>2]|0)+4>>2];k[(k[y>>2]|0)+4>>2]=k[27632+(k[(k[y>>2]|0)+4>>2]<<2)>>2];k[(k[z>>2]|0)+4>>2]=k[27620+(k[(k[z>>2]|0)+4>>2]<<2)>>2];k[(k[k[y>>2]>>2]|0)+(k[(k[y>>2]|0)+4>>2]<<2)>>2]=k[k[z>>2]>>2]|k[(k[z>>2]|0)+4>>2];k[(k[k[z>>2]>>2]|0)+(k[(k[z>>2]|0)+4>>2]<<2)>>2]=k[k[y>>2]>>2]|k[(k[y>>2]|0)+4>>2];if((k[(k[u>>2]|0)+116>>2]|0)>2){mta(58276,q)|0;ee(k[t>>2]|0,k[u>>2]|0,k[y>>2]|0);mta(58276,o)|0;ee(k[t>>2]|0,k[u>>2]|0,k[z>>2]|0)}k[k[y>>2]>>2]=k[k[z>>2]>>2];k[(k[y>>2]|0)+4>>2]=k[27632+(k[(k[z>>2]|0)+4>>2]<<2)>>2];r=h;return}if((k[w>>2]|0)!=3){k[H>>2]=k[w>>2]>>1;lf(k[t>>2]|0,k[u>>2]|0,k[v>>2]|0,k[H>>2]|0,1-(k[x>>2]|0)|0,k[y>>2]|0,E);lf(k[t>>2]|0,k[u>>2]|0,(k[v>>2]|0)+(k[H>>2]<<2)|0,(k[w>>2]|0)-(k[H>>2]|0)|0,1-(k[x>>2]|0)|0,F,k[z>>2]|0);if((k[(k[u>>2]|0)+116>>2]|0)>1){o=(k[w>>2]|0)-(k[H>>2]|0)|0;k[i>>2]=k[H>>2];k[i+4>>2]=o;mta(58288,i)|0}kf(k[t>>2]|0,k[u>>2]|0,k[y>>2]|0,E,F,k[z>>2]|0,k[x>>2]|0);r=h;return}Be(k[t>>2]|0,k[u>>2]|0,A);Be(k[t>>2]|0,k[u>>2]|0,B);Be(k[t>>2]|0,k[u>>2]|0,C);Be(k[t>>2]|0,k[u>>2]|0,D);I=+Ie(k[t>>2]|0,k[u>>2]|0,k[k[v>>2]>>2]|0,k[(k[v>>2]|0)+4>>2]|0,k[(k[v>>2]|0)+8>>2]|0);p[G>>3]=I;x=+p[G>>3]==0.0;k[(k[A>>2]|0)+((k[27620+(k[A+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[k[v>>2]>>2];F=k[v>>2]|0;do if(!x){k[(k[B>>2]|0)+((k[27632+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[F>>2];k[(k[D>>2]|0)+((k[27620+(k[D+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[k[v>>2]>>2];E=k[v>>2]|0;if(+p[G>>3]>0.0){k[(k[A>>2]|0)+((k[27632+(k[A+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[E+4>>2];k[(k[B>>2]|0)+((k[27620+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[C>>2]|0)+((k[27632+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[A>>2]|0)+((k[A+4>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[C>>2]|0)+((k[27620+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[D>>2]|0)+((k[27632+(k[D+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2]}else{k[(k[A>>2]|0)+((k[27632+(k[A+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[E+8>>2];k[(k[B>>2]|0)+((k[27620+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[C>>2]|0)+((k[27632+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[A>>2]|0)+((k[A+4>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[C>>2]|0)+((k[27620+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[D>>2]|0)+((k[27632+(k[D+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2]}k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[A+4>>2]=k[27620+(k[A+4>>2]<<2)>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[A+4>>2]=k[27620+(k[A+4>>2]<<2)>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[B+4>>2]=k[27632+(k[B+4>>2]<<2)>>2];k[C+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[B+4>>2]=k[27632+(k[B+4>>2]<<2)>>2];k[D+4>>2]=k[27632+(k[D+4>>2]<<2)>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[C+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[D+4>>2]=k[27632+(k[D+4>>2]<<2)>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[k[y>>2]>>2]=k[B>>2];k[(k[y>>2]|0)+4>>2]=k[B+4>>2];if(+p[G>>3]>0.0){k[k[z>>2]>>2]=k[C>>2];k[(k[z>>2]|0)+4>>2]=k[C+4>>2];break}else{k[k[z>>2]>>2]=k[k[y>>2]>>2];k[(k[z>>2]|0)+4>>2]=k[27620+(k[(k[y>>2]|0)+4>>2]<<2)>>2];break}}else{k[(k[A>>2]|0)+((k[27632+(k[A+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[F+4>>2];k[(k[B>>2]|0)+((k[27620+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[B>>2]|0)+((k[27632+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[k[v>>2]>>2];k[(k[C>>2]|0)+((k[27620+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[C>>2]|0)+((k[27632+(k[C+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[D>>2]|0)+((k[27620+(k[D+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+4>>2];k[(k[D>>2]|0)+((k[27632+(k[D+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[v>>2]|0)+8>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[A+4>>2]=k[27620+(k[A+4>>2]<<2)>>2];k[B+4>>2]=k[27632+(k[B+4>>2]<<2)>>2];k[C+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[D+4>>2]=k[27632+(k[D+4>>2]<<2)>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[A+4>>2]=k[27620+(k[A+4>>2]<<2)>>2];k[B+4>>2]=k[27632+(k[B+4>>2]<<2)>>2];k[C+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[D+4>>2]=k[27632+(k[D+4>>2]<<2)>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[(k[C>>2]|0)+(k[C+4>>2]<<2)>>2]=k[D>>2]|k[D+4>>2];k[(k[D>>2]|0)+(k[D+4>>2]<<2)>>2]=k[C>>2]|k[C+4>>2];k[k[y>>2]>>2]=k[B>>2];k[(k[y>>2]|0)+4>>2]=k[B+4>>2];k[k[z>>2]>>2]=k[C>>2];k[(k[z>>2]|0)+4>>2]=k[C+4>>2]}while(0);if((k[(k[u>>2]|0)+116>>2]|0)<=2){r=h;return}mta(58276,n)|0;ee(k[t>>2]|0,k[u>>2]|0,A);mta(58276,m)|0;ee(k[t>>2]|0,k[u>>2]|0,B);mta(58276,l)|0;ee(k[t>>2]|0,k[u>>2]|0,C);mta(58276,j)|0;ee(k[t>>2]|0,k[u>>2]|0,D);r=h;return}function mf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0;d=r;r=r+64|0;e=d+48|0;f=d+44|0;g=d+40|0;h=d+32|0;i=d+24|0;j=d+16|0;l=d+12|0;m=d+8|0;n=d+4|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;if(k[(k[f>>2]|0)+116>>2]|0)mta(58339,d)|0;k[h>>2]=k[k[g>>2]>>2];k[h+4>>2]=k[27632+(k[(k[g>>2]|0)+4>>2]<<2)>>2];k[n>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[h+4>>2]=k[n>>2]&3;k[h>>2]=k[n>>2]^k[h+4>>2];k[k[(k[e>>2]|0)+49768>>2]>>2]=k[h>>2]|k[h+4>>2];k[i>>2]=k[k[g>>2]>>2];k[i+4>>2]=k[(k[g>>2]|0)+4>>2];k[m>>2]=0;do{k[m>>2]=(k[m>>2]|0)+1;k[j>>2]=k[i>>2];k[j+4>>2]=k[27620+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[n>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[n>>2]&3;k[i>>2]=k[n>>2]^k[i+4>>2];if(((k[k[f>>2]>>2]|0)==0?(k[i>>2]|0)!=(k[(k[e>>2]|0)+49768>>2]|0):0)?(k[l>>2]=k[(k[i>>2]|0)+((k[27620+(k[i+4>>2]<<2)>>2]|0)+3<<2)>>2],(k[(k[l>>2]|0)+(k[(k[e>>2]|0)+49696>>2]<<2)>>2]|0)==0):0)k[(k[l>>2]|0)+(k[(k[e>>2]|0)+49696>>2]<<2)>>2]=1;k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2]=k[(k[e>>2]|0)+49768>>2];k[n>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[i+4>>2]=k[n>>2]&3;k[i>>2]=k[n>>2]^k[i+4>>2];re(k[e>>2]|0,k[j>>2]|0);if((k[i>>2]|0)==(k[k[g>>2]>>2]|0))o=(k[i+4>>2]|0)==(k[(k[g>>2]|0)+4>>2]|0);else o=0}while(o^1);r=d;return k[m>>2]|0}function nf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;c=r;r=r+80|0;d=c+24|0;e=c+8|0;f=c+64|0;g=c+60|0;h=c+56|0;i=c+48|0;j=c+40|0;l=c+36|0;m=c+32|0;n=c+28|0;k[f>>2]=a;k[g>>2]=b;if(k[(k[g>>2]|0)+116>>2]|0)mta(58368,c)|0;b=ae(k[(k[f>>2]|0)+49648>>2]<<2)|0;k[h>>2]=b;me((k[f>>2]|0)+112|0);k[m>>2]=0;while(1){if((k[m>>2]|0)>=(k[(k[f>>2]|0)+49648>>2]|0))break;b=we(k[f>>2]|0)|0;k[(k[h>>2]|0)+(k[m>>2]<<2)>>2]=b;k[m>>2]=(k[m>>2]|0)+1}gf(k[h>>2]|0,k[(k[f>>2]|0)+49648>>2]|0);k[m>>2]=0;k[n>>2]=1;while(1){o=k[m>>2]|0;if((k[n>>2]|0)>=(k[(k[f>>2]|0)+49648>>2]|0))break;if(+p[k[(k[h>>2]|0)+(o<<2)>>2]>>3]==+p[k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]>>3]?+p[(k[(k[h>>2]|0)+(k[m>>2]<<2)>>2]|0)+8>>3]==+p[(k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]|0)+8>>3]:0){if(!(k[(k[g>>2]|0)+112>>2]|0)){q=+p[(k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]|0)+8>>3];p[e>>3]=+p[k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]>>3];p[e+8>>3]=q;mta(58389,e)|0}k[(k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]|0)+((k[(k[f>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32767;b=(k[f>>2]|0)+49668|0;k[b>>2]=(k[b>>2]|0)+1}else{k[m>>2]=(k[m>>2]|0)+1;k[(k[h>>2]|0)+(k[m>>2]<<2)>>2]=k[(k[h>>2]|0)+(k[n>>2]<<2)>>2]}k[n>>2]=(k[n>>2]|0)+1}k[m>>2]=o+1;if((k[(k[g>>2]|0)+100>>2]|0)!=0?(k[l>>2]=k[m>>2]>>1,((k[m>>2]|0)-(k[l>>2]|0)|0)>=2):0){if((k[l>>2]|0)>=2)jf(k[h>>2]|0,k[l>>2]|0,1);jf((k[h>>2]|0)+(k[l>>2]<<2)|0,(k[m>>2]|0)-(k[l>>2]|0)|0,1)}if(!(k[(k[g>>2]|0)+116>>2]|0)){s=k[f>>2]|0;t=k[g>>2]|0;u=k[h>>2]|0;v=k[m>>2]|0;lf(s,t,u,v,0,i,j);w=k[h>>2]|0;be(w);x=k[f>>2]|0;y=k[g>>2]|0;z=mf(x,y,i)|0;r=c;return z|0}mta(58463,d)|0;s=k[f>>2]|0;t=k[g>>2]|0;u=k[h>>2]|0;v=k[m>>2]|0;lf(s,t,u,v,0,i,j);w=k[h>>2]|0;be(w);x=k[f>>2]|0;y=k[g>>2]|0;z=mf(x,y,i)|0;r=c;return z|0}function of(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+48|0;d=c+36|0;e=c+32|0;f=c+24|0;g=c;k[d>>2]=a;k[e>>2]=b;if(k[(k[e>>2]|0)+116>>2]|0)mta(58489,c+8|0)|0;p[g>>3]=+p[(k[d>>2]|0)+49616>>3]-+p[(k[d>>2]|0)+49608>>3];if(+p[(k[d>>2]|0)+49632>>3]-+p[(k[d>>2]|0)+49624>>3]>+p[g>>3])p[g>>3]=+p[(k[d>>2]|0)+49632>>3]-+p[(k[d>>2]|0)+49624>>3];if(+p[g>>3]==0.0)p[g>>3]=1.0;b=ae(k[(k[d>>2]|0)+112+28>>2]|0)|0;k[(k[d>>2]|0)+49756>>2]=b;b=ae(k[(k[d>>2]|0)+112+28>>2]|0)|0;k[(k[d>>2]|0)+49760>>2]=b;b=ae(k[(k[d>>2]|0)+112+28>>2]|0)|0;k[(k[d>>2]|0)+49764>>2]=b;p[k[(k[d>>2]|0)+49756>>2]>>3]=+p[(k[d>>2]|0)+49608>>3]-+p[g>>3]*50.0;p[(k[(k[d>>2]|0)+49756>>2]|0)+8>>3]=+p[(k[d>>2]|0)+49624>>3]-+p[g>>3]*40.0;p[k[(k[d>>2]|0)+49760>>2]>>3]=+p[(k[d>>2]|0)+49616>>3]+ +p[g>>3]*50.0;p[(k[(k[d>>2]|0)+49760>>2]|0)+8>>3]=+p[(k[d>>2]|0)+49624>>3]-+p[g>>3]*40.0;p[k[(k[d>>2]|0)+49764>>2]>>3]=(+p[(k[d>>2]|0)+49608>>3]+ +p[(k[d>>2]|0)+49616>>3])*.5;p[(k[(k[d>>2]|0)+49764>>2]|0)+8>>3]=+p[(k[d>>2]|0)+49632>>3]+ +p[g>>3]*60.0;Be(k[d>>2]|0,k[e>>2]|0,f);k[(k[f>>2]|0)+((k[27620+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[d>>2]|0)+49756>>2];k[(k[f>>2]|0)+((k[27632+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[(k[d>>2]|0)+49760>>2];k[(k[f>>2]|0)+((k[f+4>>2]|0)+3<<2)>>2]=k[(k[d>>2]|0)+49764>>2];k[k[(k[d>>2]|0)+49768>>2]>>2]=k[f>>2];if((k[(k[e>>2]|0)+116>>2]|0)<=2){r=c;return}mta(58276,c+16|0)|0;ee(k[d>>2]|0,k[e>>2]|0,f);r=c;return}function pf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+80|0;d=c+68|0;e=c+64|0;f=c+56|0;g=c+48|0;h=c+40|0;i=c+32|0;j=c+24|0;l=c+16|0;m=c+12|0;n=c+8|0;o=c+4|0;k[d>>2]=a;k[e>>2]=b;if(k[(k[e>>2]|0)+116>>2]|0)mta(58526,c)|0;k[i>>2]=k[(k[d>>2]|0)+49768>>2];k[i+4>>2]=0;k[o>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[o>>2]&3;k[i>>2]=k[o>>2]^k[i+4>>2];k[j>>2]=k[i>>2];k[j+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[27620+(k[i+4>>2]<<2)>>2];k[o>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[o>>2]&3;k[i>>2]=k[o>>2]^k[i+4>>2];k[g>>2]=k[i>>2];k[g+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[o>>2]=k[(k[g>>2]|0)+(k[g+4>>2]<<2)>>2];k[g+4>>2]=k[o>>2]&3;k[g>>2]=k[o>>2]^k[g+4>>2];k[h>>2]=k[i>>2];k[h+4>>2]=k[27620+(k[i+4>>2]<<2)>>2];k[o>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[h+4>>2]=k[o>>2]&3;k[h>>2]=k[o>>2]^k[h+4>>2];if((k[h>>2]|0)==(k[(k[d>>2]|0)+49768>>2]|0)){k[g+4>>2]=k[27632+(k[g+4>>2]<<2)>>2];k[o>>2]=k[(k[g>>2]|0)+(k[g+4>>2]<<2)>>2];k[g+4>>2]=k[o>>2]&3;k[g>>2]=k[o>>2]^k[g+4>>2]}k[k[(k[d>>2]|0)+49768>>2]>>2]=k[g>>2]|k[g+4>>2];k[n>>2]=-2;while(1){if((k[i>>2]|0)==(k[j>>2]|0))p=(k[i+4>>2]|0)==(k[j+4>>2]|0);else p=0;if(!(p^1))break;k[n>>2]=(k[n>>2]|0)+1;k[l>>2]=k[i>>2];k[l+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[o>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[l+4>>2]=k[o>>2]&3;k[l>>2]=k[o>>2]^k[l+4>>2];if(((k[k[e>>2]>>2]|0)==0?(k[l>>2]|0)!=(k[(k[d>>2]|0)+49768>>2]|0):0)?(k[m>>2]=k[(k[l>>2]|0)+((k[27620+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2],(k[(k[m>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]|0)==0):0)k[(k[m>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]=1;k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[(k[d>>2]|0)+49768>>2];k[f>>2]=k[i>>2];k[f+4>>2]=k[27620+(k[i+4>>2]<<2)>>2];k[o>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[i+4>>2]=k[o>>2]&3;k[i>>2]=k[o>>2]^k[i+4>>2];re(k[d>>2]|0,k[f>>2]|0);if((k[i>>2]|0)!=(k[(k[d>>2]|0)+49768>>2]|0))continue;k[i>>2]=k[l>>2];k[i+4>>2]=k[l+4>>2]}re(k[d>>2]|0,k[j>>2]|0);be(k[(k[d>>2]|0)+49756>>2]|0);be(k[(k[d>>2]|0)+49760>>2]|0);be(k[(k[d>>2]|0)+49764>>2]|0);r=c;return k[n>>2]|0}function qf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0;c=r;r=r+48|0;d=c+8|0;e=c+44|0;f=c+40|0;g=c+32|0;h=c+24|0;k[e>>2]=a;k[f>>2]=b;of(k[e>>2]|0,k[f>>2]|0);if(k[(k[f>>2]|0)+116>>2]|0)mta(58563,c)|0;me((k[e>>2]|0)+112|0);b=we(k[e>>2]|0)|0;k[h>>2]=b;while(1){i=k[e>>2]|0;if(!(k[h>>2]|0))break;k[g>>2]=k[i+49768>>2];if((cf(k[e>>2]|0,k[f>>2]|0,k[h>>2]|0,g,0,0,0)|0)==3){if(!(k[(k[f>>2]|0)+112>>2]|0)){j=+p[(k[h>>2]|0)+8>>3];p[d>>3]=+p[k[h>>2]>>3];p[d+8>>3]=j;mta(58389,d)|0}k[(k[h>>2]|0)+((k[(k[e>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32767;b=(k[e>>2]|0)+49668|0;k[b>>2]=(k[b>>2]|0)+1}b=we(k[e>>2]|0)|0;k[h>>2]=b}h=pf(i,k[f>>2]|0)|0;r=c;return h|0}function rf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;d=r;r=r+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+8|0;i=d;j=d+24|0;l=d+20|0;m=d+16|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;p[h>>3]=+p[k[g>>2]>>3];p[i>>3]=+p[(k[g>>2]|0)+8>>3];k[j>>2]=k[f>>2];k[m>>2]=(k[j>>2]|0)>0&1;a:while(1){if(!(k[m>>2]|0))break;k[l>>2]=(k[j>>2]|0)-1>>1;do if(!(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]<+p[i>>3])){if(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]==+p[i>>3]?+p[k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]>>3]<=+p[h>>3]:0)break;k[(k[e>>2]|0)+(k[j>>2]<<2)>>2]=k[(k[e>>2]|0)+(k[l>>2]<<2)>>2];k[(k[(k[e>>2]|0)+(k[j>>2]<<2)>>2]|0)+20>>2]=k[j>>2];k[j>>2]=k[l>>2];k[m>>2]=(k[j>>2]|0)>0&1;continue a}while(0);k[m>>2]=0}k[(k[e>>2]|0)+(k[j>>2]<<2)>>2]=k[g>>2];k[(k[g>>2]|0)+20>>2]=k[j>>2];r=d;return}function sf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0;d=r;r=r+48|0;e=d+44|0;f=d+40|0;g=d+36|0;h=d+32|0;i=d+8|0;j=d;l=d+28|0;m=d+24|0;n=d+20|0;o=d+16|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;k[h>>2]=k[(k[e>>2]|0)+(k[g>>2]<<2)>>2];p[i>>3]=+p[k[h>>2]>>3];p[j>>3]=+p[(k[h>>2]|0)+8>>3];k[l>>2]=(k[g>>2]<<1)+1;k[o>>2]=(k[l>>2]|0)<(k[f>>2]|0)&1;while(1){if(!(k[o>>2]|0))break;do if(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]<+p[j>>3])q=6;else{if(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]==+p[j>>3]?+p[k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]>>3]<+p[i>>3]:0){q=6;break}k[n>>2]=k[g>>2]}while(0);if((q|0)==6){q=0;k[n>>2]=k[l>>2]}k[m>>2]=(k[l>>2]|0)+1;do if((k[m>>2]|0)<(k[f>>2]|0)){if(!(+p[(k[(k[e>>2]|0)+(k[m>>2]<<2)>>2]|0)+8>>3]<+p[(k[(k[e>>2]|0)+(k[n>>2]<<2)>>2]|0)+8>>3])){if(!(+p[(k[(k[e>>2]|0)+(k[m>>2]<<2)>>2]|0)+8>>3]==+p[(k[(k[e>>2]|0)+(k[n>>2]<<2)>>2]|0)+8>>3]))break;if(!(+p[k[(k[e>>2]|0)+(k[m>>2]<<2)>>2]>>3]<+p[k[(k[e>>2]|0)+(k[n>>2]<<2)>>2]>>3]))break}k[n>>2]=k[m>>2]}while(0);if((k[n>>2]|0)==(k[g>>2]|0)){k[o>>2]=0;continue}else{k[(k[e>>2]|0)+(k[g>>2]<<2)>>2]=k[(k[e>>2]|0)+(k[n>>2]<<2)>>2];k[(k[(k[e>>2]|0)+(k[g>>2]<<2)>>2]|0)+20>>2]=k[g>>2];k[(k[e>>2]|0)+(k[n>>2]<<2)>>2]=k[h>>2];k[(k[h>>2]|0)+20>>2]=k[n>>2];k[g>>2]=k[n>>2];k[l>>2]=(k[g>>2]<<1)+1;k[o>>2]=(k[l>>2]|0)<(k[f>>2]|0)&1;continue}}r=d;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=r;r=r+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+24|0;i=d+8|0;j=d;l=d+20|0;m=d+16|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;k[h>>2]=k[(k[e>>2]|0)+((k[f>>2]|0)-1<<2)>>2];if((k[g>>2]|0)<=0){n=k[h>>2]|0;o=k[g>>2]|0;q=k[e>>2]|0;s=q+(o<<2)|0;k[s>>2]=n;t=k[g>>2]|0;u=k[h>>2]|0;v=u+20|0;k[v>>2]=t;w=k[e>>2]|0;x=k[f>>2]|0;y=x-1|0;z=k[g>>2]|0;sf(w,y,z);r=d;return}p[i>>3]=+p[k[h>>2]>>3];p[j>>3]=+p[(k[h>>2]|0)+8>>3];do{k[l>>2]=(k[g>>2]|0)-1>>1;do if(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]<+p[j>>3])A=6;else{if(+p[(k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]|0)+8>>3]==+p[j>>3]?+p[k[(k[e>>2]|0)+(k[l>>2]<<2)>>2]>>3]<=+p[i>>3]:0){A=6;break}k[(k[e>>2]|0)+(k[g>>2]<<2)>>2]=k[(k[e>>2]|0)+(k[l>>2]<<2)>>2];k[(k[(k[e>>2]|0)+(k[g>>2]<<2)>>2]|0)+20>>2]=k[g>>2];k[g>>2]=k[l>>2];k[m>>2]=(k[g>>2]|0)>0&1}while(0);if((A|0)==6){A=0;k[m>>2]=0}}while((k[m>>2]|0)!=0);n=k[h>>2]|0;o=k[g>>2]|0;q=k[e>>2]|0;s=q+(o<<2)|0;k[s>>2]=n;t=k[g>>2]|0;u=k[h>>2]|0;v=u+20|0;k[v>>2]=t;w=k[e>>2]|0;x=k[f>>2]|0;y=x-1|0;z=k[g>>2]|0;sf(w,y,z);r=d;return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+32|0;f=e+24|0;g=e+20|0;h=e+16|0;i=e+12|0;j=e+8|0;l=e+4|0;m=e;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;k[l>>2]=((k[(k[f>>2]|0)+49648>>2]|0)*3|0)/2|0;d=ae(k[l>>2]<<2)|0;k[k[g>>2]>>2]=d;d=ae((k[l>>2]|0)*24|0)|0;k[k[h>>2]>>2]=d;me((k[f>>2]|0)+112|0);k[m>>2]=0;while(1){if((k[m>>2]|0)>=(k[(k[f>>2]|0)+49648>>2]|0))break;d=we(k[f>>2]|0)|0;k[j>>2]=d;k[(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0)+16>>2]=k[j>>2];p[(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0)>>3]=+p[k[j>>2]>>3];p[(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0)+8>>3]=+p[(k[j>>2]|0)+8>>3];rf(k[k[g>>2]>>2]|0,k[m>>2]|0,(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0)|0);k[m>>2]=(k[m>>2]|0)+1}k[k[i>>2]>>2]=0;k[m>>2]=(k[l>>2]|0)-1;while(1){if((k[m>>2]|0)<(k[(k[f>>2]|0)+49648>>2]|0))break;k[(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0)+16>>2]=k[k[i>>2]>>2];k[k[i>>2]>>2]=(k[k[h>>2]>>2]|0)+((k[m>>2]|0)*24|0);k[m>>2]=(k[m>>2]|0)+-1}r=e;return}function vf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;d=r;r=r+64|0;e=d+52|0;f=d+48|0;g=d+44|0;h=d+40|0;i=d+36|0;j=d+32|0;l=d+24|0;m=d+16|0;n=d+8|0;o=d;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;c=(k[f>>2]|0)+49744|0;k[c>>2]=(k[c>>2]|0)+1;k[i>>2]=k[(k[k[g>>2]>>2]|0)+((k[27632+(k[(k[g>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[j>>2]=k[(k[k[g>>2]>>2]|0)+((k[(k[g>>2]|0)+4>>2]|0)+3<<2)>>2];do if(!(+p[(k[i>>2]|0)+8>>3]<+p[(k[j>>2]|0)+8>>3])){if(+p[(k[i>>2]|0)+8>>3]==+p[(k[j>>2]|0)+8>>3]?+p[k[i>>2]>>3]<+p[k[j>>2]>>3]:0){q=4;break}if(+p[k[h>>2]>>3]<=+p[k[i>>2]>>3]){k[e>>2]=0;s=k[e>>2]|0;r=d;return s|0}}else q=4;while(0);if((q|0)==4?+p[k[h>>2]>>3]>=+p[k[j>>2]>>3]:0){k[e>>2]=1;s=k[e>>2]|0;r=d;return s|0}p[l>>3]=+p[k[i>>2]>>3]-+p[k[h>>2]>>3];p[m>>3]=+p[(k[i>>2]|0)+8>>3]-+p[(k[h>>2]|0)+8>>3];p[n>>3]=+p[k[j>>2]>>3]-+p[k[h>>2]>>3];p[o>>3]=+p[(k[j>>2]|0)+8>>3]-+p[(k[h>>2]|0)+8>>3];k[e>>2]=+p[m>>3]*(+p[n>>3]*+p[n>>3]+ +p[o>>3]*+p[o>>3])>+p[o>>3]*(+p[l>>3]*+p[l>>3]+ +p[m>>3]*+p[m>>3])&1;s=k[e>>2]|0;r=d;return s|0}function wf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0;f=r;r=r+96|0;g=f+92|0;h=f+88|0;i=f+84|0;j=f+80|0;l=f+72|0;m=f+64|0;n=f+56|0;o=f+48|0;q=f+40|0;s=f+32|0;t=f+24|0;u=f+16|0;v=f+8|0;w=f;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;p[l>>3]=e;d=(k[g>>2]|0)+49752|0;k[d>>2]=(k[d>>2]|0)+1;p[m>>3]=+p[k[h>>2]>>3]-+p[k[j>>2]>>3];p[n>>3]=+p[(k[h>>2]|0)+8>>3]-+p[(k[j>>2]|0)+8>>3];p[o>>3]=+p[k[i>>2]>>3]-+p[k[j>>2]>>3];p[q>>3]=+p[(k[i>>2]|0)+8>>3]-+p[(k[j>>2]|0)+8>>3];p[s>>3]=+p[k[h>>2]>>3]-+p[k[i>>2]>>3];p[t>>3]=+p[(k[h>>2]|0)+8>>3]-+p[(k[i>>2]|0)+8>>3];p[u>>3]=+p[m>>3]*+p[m>>3]+ +p[n>>3]*+p[n>>3];p[v>>3]=+p[o>>3]*+p[o>>3]+ +p[q>>3]*+p[q>>3];p[w>>3]=+p[s>>3]*+p[s>>3]+ +p[t>>3]*+p[t>>3];e=+p[m>>3]*+p[v>>3]-+p[o>>3]*+p[u>>3]+ +aa(+(+p[u>>3]*+p[v>>3]*+p[w>>3]));r=f;return +(+p[(k[j>>2]|0)+8>>3]+e/(+p[l>>3]*2.0))}function xf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;e=r;r=r+32|0;f=e+24|0;g=e+20|0;h=e+16|0;i=e+12|0;j=e+8|0;l=e+4|0;m=e;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;k[l>>2]=k[(k[k[f>>2]>>2]|0)+((k[27620+(k[(k[f>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if(!(k[l>>2]|0)){r=e;return}k[j>>2]=k[l>>2];k[m>>2]=k[(k[j>>2]|0)+20>>2];k[(k[j>>2]|0)+16>>2]=k[k[g>>2]>>2];k[k[g>>2]>>2]=k[j>>2];tf(k[h>>2]|0,k[k[i>>2]>>2]|0,k[m>>2]|0);m=k[i>>2]|0;k[m>>2]=(k[m>>2]|0)+-1;k[(k[k[f>>2]>>2]|0)+((k[27620+(k[(k[f>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;r=e;return}function yf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;e=r;r=r+64|0;f=e+48|0;g=e+44|0;h=e+40|0;i=e+36|0;j=e+32|0;l=e+28|0;m=e+24|0;n=e+20|0;o=e+16|0;p=e+12|0;q=e+8|0;s=e+4|0;t=e;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;if(!(k[h>>2]|0)){k[f>>2]=0;u=k[f>>2]|0;r=e;return u|0}k[q>>2]=k[(k[k[h>>2]>>2]|0)+((k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];d=k[g>>2]|0;c=k[h>>2]|0;if((k[q>>2]|0)!=(k[(k[h>>2]|0)+8>>2]|0)){b=yf(d,k[c+12>>2]|0,k[i>>2]|0,k[j>>2]|0)|0;k[n>>2]=b;b=yf(k[g>>2]|0,k[(k[h>>2]|0)+16>>2]|0,k[i>>2]|0,k[j>>2]|0)|0;k[o>>2]=b;le((k[g>>2]|0)+392|0,k[h>>2]|0);b=k[o>>2]|0;if(!(k[n>>2]|0)){k[f>>2]=b;u=k[f>>2]|0;r=e;return u|0}a=k[n>>2]|0;if(!b){k[f>>2]=a;u=k[f>>2]|0;r=e;return u|0}b=k[(k[o>>2]|0)+12>>2]|0;if(!(k[a+16>>2]|0)){k[(k[n>>2]|0)+16>>2]=b;k[(k[o>>2]|0)+12>>2]=k[n>>2];k[f>>2]=k[o>>2];u=k[f>>2]|0;r=e;return u|0}a=k[(k[n>>2]|0)+16>>2]|0;if(!b){k[(k[o>>2]|0)+12>>2]=a;k[(k[n>>2]|0)+16>>2]=k[o>>2];k[f>>2]=k[n>>2];u=k[f>>2]|0;r=e;return u|0}k[p>>2]=a;while(1){if(!(k[(k[p>>2]|0)+16>>2]|0))break;k[p>>2]=k[(k[p>>2]|0)+16>>2]}k[(k[p>>2]|0)+16>>2]=k[o>>2];k[f>>2]=k[n>>2];u=k[f>>2]|0;r=e;return u|0}n=vf(d,c,k[i>>2]|0)|0;k[s>>2]=n;n=k[h>>2]|0;if(k[s>>2]|0){k[k[j>>2]>>2]=k[n>>2];k[(k[j>>2]|0)+4>>2]=k[(k[h>>2]|0)+4>>2];k[l>>2]=k[(k[h>>2]|0)+16>>2]}else k[l>>2]=k[n+12>>2];if(!(k[l>>2]|0)){k[f>>2]=k[h>>2];u=k[f>>2]|0;r=e;return u|0}k[q>>2]=k[(k[k[l>>2]>>2]|0)+((k[27632+(k[(k[l>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[q>>2]|0)!=(k[(k[l>>2]|0)+8>>2]|0)?(q=yf(k[g>>2]|0,k[l>>2]|0,k[i>>2]|0,k[j>>2]|0)|0,k[l>>2]=q,(k[l>>2]|0)==0):0){q=k[h>>2]|0;if(k[s>>2]|0)k[q+16>>2]=0;else k[q+12>>2]=0;k[f>>2]=k[h>>2];u=k[f>>2]|0;r=e;return u|0}q=vf(k[g>>2]|0,k[l>>2]|0,k[i>>2]|0)|0;k[t>>2]=q;if(k[t>>2]|0){k[k[j>>2]>>2]=k[k[l>>2]>>2];k[(k[j>>2]|0)+4>>2]=k[(k[l>>2]|0)+4>>2];q=yf(k[g>>2]|0,k[(k[l>>2]|0)+16>>2]|0,k[i>>2]|0,k[j>>2]|0)|0;k[m>>2]=q;k[(k[l>>2]|0)+16>>2]=k[m>>2]}else{q=yf(k[g>>2]|0,k[(k[l>>2]|0)+12>>2]|0,k[i>>2]|0,k[j>>2]|0)|0;k[m>>2]=q;k[(k[l>>2]|0)+12>>2]=k[m>>2]}if(!(k[m>>2]|0)){q=k[l>>2]|0;if(k[s>>2]|0){k[(k[h>>2]|0)+16>>2]=k[q+12>>2];k[(k[l>>2]|0)+12>>2]=k[h>>2]}else{k[(k[h>>2]|0)+12>>2]=k[q+16>>2];k[(k[l>>2]|0)+16>>2]=k[h>>2]}k[f>>2]=k[l>>2];u=k[f>>2]|0;r=e;return u|0}q=(k[s>>2]|0)!=0;if(k[t>>2]|0){if(q){k[(k[h>>2]|0)+16>>2]=k[(k[l>>2]|0)+12>>2];k[(k[l>>2]|0)+12>>2]=k[h>>2]}else{k[(k[h>>2]|0)+12>>2]=k[(k[m>>2]|0)+16>>2];k[(k[m>>2]|0)+16>>2]=k[h>>2]}k[(k[l>>2]|0)+16>>2]=k[(k[m>>2]|0)+12>>2];k[(k[m>>2]|0)+12>>2]=k[l>>2]}else{if(q){k[(k[h>>2]|0)+16>>2]=k[(k[m>>2]|0)+12>>2];k[(k[m>>2]|0)+12>>2]=k[h>>2]}else{k[(k[h>>2]|0)+12>>2]=k[(k[l>>2]|0)+16>>2];k[(k[l>>2]|0)+16>>2]=k[h>>2]}k[(k[l>>2]|0)+12>>2]=k[(k[m>>2]|0)+16>>2];k[(k[m>>2]|0)+16>>2]=k[l>>2]}k[f>>2]=k[m>>2];u=k[f>>2]|0;r=e;return u|0}function zf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;d=ke((k[f>>2]|0)+392|0)|0;k[j>>2]=d;k[k[j>>2]>>2]=k[k[h>>2]>>2];k[(k[j>>2]|0)+4>>2]=k[(k[h>>2]|0)+4>>2];k[(k[j>>2]|0)+8>>2]=k[(k[k[h>>2]>>2]|0)+((k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if(!(k[g>>2]|0)){k[(k[j>>2]|0)+12>>2]=0;k[(k[j>>2]|0)+16>>2]=0;l=k[j>>2]|0;r=e;return l|0}h=(vf(k[f>>2]|0,k[g>>2]|0,k[i>>2]|0)|0)!=0;i=k[g>>2]|0;if(h){k[(k[j>>2]|0)+12>>2]=i;k[(k[j>>2]|0)+16>>2]=k[(k[g>>2]|0)+16>>2];k[(k[g>>2]|0)+16>>2]=0;l=k[j>>2]|0;r=e;return l|0}else{k[(k[j>>2]|0)+12>>2]=k[i+12>>2];k[(k[j>>2]|0)+16>>2]=k[g>>2];k[(k[g>>2]|0)+12>>2]=0;l=k[j>>2]|0;r=e;return l|0}return 0}function Af(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=r;r=r+128|0;j=i+112|0;l=i+108|0;m=i+104|0;n=i+100|0;o=i+96|0;q=i+92|0;s=i+88|0;t=i+72|0;u=i+64|0;v=i+56|0;w=i+48|0;x=i+40|0;y=i+32|0;z=i+24|0;A=i+16|0;B=i;k[j>>2]=a;k[l>>2]=b;k[m>>2]=c;k[n>>2]=d;k[o>>2]=e;k[q>>2]=f;k[s>>2]=g;p[t>>3]=h;h=+Ie(k[j>>2]|0,k[l>>2]|0,k[o>>2]|0,k[q>>2]|0,k[s>>2]|0);p[u>>3]=h;p[v>>3]=+p[k[o>>2]>>3]-+p[k[s>>2]>>3];p[w>>3]=+p[(k[o>>2]|0)+8>>3]-+p[(k[s>>2]|0)+8>>3];p[x>>3]=+p[k[q>>2]>>3]-+p[k[s>>2]>>3];p[y>>3]=+p[(k[q>>2]|0)+8>>3]-+p[(k[s>>2]|0)+8>>3];p[z>>3]=+p[v>>3]*+p[v>>3]+ +p[w>>3]*+p[w>>3];p[A>>3]=+p[x>>3]*+p[x>>3]+ +p[y>>3]*+p[y>>3];p[B>>3]=+p[k[s>>2]>>3]-(+p[w>>3]*+p[A>>3]-+p[y>>3]*+p[z>>3])/(+p[u>>3]*2.0);p[B+8>>3]=+p[t>>3];t=k[j>>2]|0;u=yf(k[j>>2]|0,k[m>>2]|0,B,i+80|0)|0;m=zf(t,u,k[n>>2]|0,B)|0;r=i;return m|0}function Bf(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=r;r=r+32|0;h=g+28|0;i=g+24|0;j=g+20|0;l=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;k[h>>2]=a;k[i>>2]=b;k[j>>2]=c;k[l>>2]=d;k[m>>2]=e;k[n>>2]=f;k[k[m>>2]>>2]=k[k[j>>2]>>2];k[(k[m>>2]|0)+4>>2]=k[(k[j>>2]|0)+4>>2];f=yf(k[h>>2]|0,k[i>>2]|0,k[l>>2]|0,k[m>>2]|0)|0;k[i>>2]=f;k[o>>2]=0;while(1){if(k[o>>2]|0){q=7;break}if(!(vf(k[h>>2]|0,k[m>>2]|0,k[l>>2]|0)|0)){q=7;break}k[(k[m>>2]|0)+4>>2]=k[27632+(k[(k[m>>2]|0)+4>>2]<<2)>>2];k[p>>2]=k[(k[k[m>>2]>>2]|0)+(k[(k[m>>2]|0)+4>>2]<<2)>>2];k[(k[m>>2]|0)+4>>2]=k[p>>2]&3;k[k[m>>2]>>2]=k[p>>2]^k[(k[m>>2]|0)+4>>2];if((k[k[m>>2]>>2]|0)==(k[k[j>>2]>>2]|0))s=(k[(k[m>>2]|0)+4>>2]|0)==(k[(k[j>>2]|0)+4>>2]|0);else s=0;k[o>>2]=s&1}if((q|0)==7){k[k[n>>2]>>2]=k[o>>2];r=g;return k[i>>2]|0}return 0}function Cf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;c=r;r=r+224|0;d=c+56|0;e=c+40|0;f=c+32|0;g=c+212|0;h=c+208|0;i=c+204|0;j=c+196|0;l=c+192|0;m=c+188|0;n=c+184|0;o=c+176|0;q=c+168|0;s=c+160|0;t=c+152|0;u=c+144|0;v=c+136|0;w=c+128|0;x=c+120|0;y=c+116|0;z=c+112|0;A=c+108|0;B=c+104|0;C=c+100|0;D=c+96|0;E=c+92|0;F=c+88|0;G=c+8|0;H=c;I=c+84|0;J=c+80|0;K=c+76|0;L=c+72|0;k[g>>2]=a;k[h>>2]=b;ie((k[g>>2]|0)+392|0,20,508,508,0);k[n>>2]=0;if(k[(k[h>>2]|0)+116>>2]|0)mta(58600,c+16|0)|0;uf(k[g>>2]|0,i,c+200|0,j);k[I>>2]=k[(k[g>>2]|0)+49648>>2];if(k[(k[h>>2]|0)+116>>2]|0)mta(58463,c+24|0)|0;Be(k[g>>2]|0,k[h>>2]|0,t);Be(k[g>>2]|0,k[h>>2]|0,u);k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[t+4>>2]=k[27620+(k[t+4>>2]<<2)>>2];k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[t+4>>2]=k[27620+(k[t+4>>2]<<2)>>2];k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[y>>2]=k[(k[k[i>>2]>>2]|0)+16>>2];k[(k[k[i>>2]>>2]|0)+16>>2]=k[j>>2];k[j>>2]=k[k[i>>2]>>2];tf(k[i>>2]|0,k[I>>2]|0,0);k[I>>2]=(k[I>>2]|0)+-1;do{if(!(k[I>>2]|0)){mta(58635,f)|0;$d(1)}k[z>>2]=k[(k[k[i>>2]>>2]|0)+16>>2];k[(k[k[i>>2]>>2]|0)+16>>2]=k[j>>2];k[j>>2]=k[k[i>>2]>>2];tf(k[i>>2]|0,k[I>>2]|0,0);k[I>>2]=(k[I>>2]|0)+-1;if(+p[k[y>>2]>>3]==+p[k[z>>2]>>3]?+p[(k[y>>2]|0)+8>>3]==+p[(k[z>>2]|0)+8>>3]:0){if(!(k[(k[h>>2]|0)+112>>2]|0)){M=+p[(k[z>>2]|0)+8>>3];p[e>>3]=+p[k[z>>2]>>3];p[e+8>>3]=M;mta(58389,e)|0}k[(k[z>>2]|0)+((k[(k[g>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32767;b=(k[g>>2]|0)+49668|0;k[b>>2]=(k[b>>2]|0)+1}if(!(+p[k[y>>2]>>3]==+p[k[z>>2]>>3]))break}while(+p[(k[y>>2]|0)+8>>3]==+p[(k[z>>2]|0)+8>>3]);k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[y>>2];k[(k[t>>2]|0)+((k[27632+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[u>>2]|0)+((k[27632+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[y>>2];k[o>>2]=k[t>>2];k[o+4>>2]=k[27632+(k[t+4>>2]<<2)>>2];k[B>>2]=k[z>>2];while(1){if((k[I>>2]|0)<=0)break;k[l>>2]=k[k[i>>2]>>2];tf(k[i>>2]|0,k[I>>2]|0,0);k[I>>2]=(k[I>>2]|0)+-1;k[J>>2]=1;z=k[(k[l>>2]|0)+16>>2]|0;do if(+p[k[l>>2]>>3]<+p[(k[g>>2]|0)+49608>>3]){k[s+4>>2]=z&3;k[s>>2]=k[(k[l>>2]|0)+16>>2]^k[s+4>>2];k[L>>2]=k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2];k[v+4>>2]=k[L>>2]&3;k[v>>2]=k[L>>2]^k[v+4>>2];k[v+4>>2]=k[27620+(k[v+4>>2]<<2)>>2];xf(v,j,k[i>>2]|0,I);k[w>>2]=k[s>>2];k[w+4>>2]=k[27632+(k[s+4>>2]<<2)>>2];k[L>>2]=k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2];k[w+4>>2]=k[L>>2]&3;k[w>>2]=k[L>>2]^k[w+4>>2];xf(w,j,k[i>>2]|0,I);if((k[v>>2]|0)==(k[o>>2]|0)?(k[v+4>>2]|0)==(k[o+4>>2]|0):0){k[o>>2]=k[s>>2];k[o+4>>2]=k[27632+(k[s+4>>2]<<2)>>2]}af(k[g>>2]|0,k[h>>2]|0,s);k[(k[s>>2]|0)+((k[s+4>>2]|0)+3<<2)>>2]=0;k[t>>2]=k[s>>2];k[t+4>>2]=k[27632+(k[s+4>>2]<<2)>>2];k[u>>2]=k[s>>2];k[u+4>>2]=k[27620+(k[s+4>>2]<<2)>>2];k[L>>2]=k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2];k[v+4>>2]=k[L>>2]&3;k[v>>2]=k[L>>2]^k[v+4>>2];if(!(Qe(10)|0)){k[L>>2]=k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2];k[s+4>>2]=k[L>>2]&3;k[s>>2]=k[L>>2]^k[s+4>>2];k[D>>2]=k[(k[s>>2]|0)+((k[27632+(k[s+4>>2]<<2)>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[s>>2]|0)+((k[s+4>>2]|0)+3<<2)>>2];k[F>>2]=k[(k[s>>2]|0)+((k[27620+(k[s+4>>2]<<2)>>2]|0)+3<<2)>>2];y=Af(k[g>>2]|0,k[h>>2]|0,k[n>>2]|0,t,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0,+p[(k[l>>2]|0)+8>>3])|0;k[n>>2]=y}}else{k[A>>2]=z;if(+p[k[A>>2]>>3]==+p[k[B>>2]>>3]?+p[(k[A>>2]|0)+8>>3]==+p[(k[B>>2]|0)+8>>3]:0){if(!(k[(k[h>>2]|0)+112>>2]|0)){M=+p[(k[A>>2]|0)+8>>3];p[d>>3]=+p[k[A>>2]>>3];p[d+8>>3]=M;mta(58389,d)|0}k[(k[A>>2]|0)+((k[(k[g>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32767;y=(k[g>>2]|0)+49668|0;k[y>>2]=(k[y>>2]|0)+1;k[J>>2]=0;break}k[B>>2]=k[A>>2];y=Bf(k[g>>2]|0,k[n>>2]|0,o,k[A>>2]|0,q,K)|0;k[n>>2]=y;xf(q,j,k[i>>2]|0,I);k[w>>2]=k[q>>2];k[w+4>>2]=k[q+4>>2];k[L>>2]=k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2];k[v+4>>2]=k[L>>2]&3;k[v>>2]=k[L>>2]^k[v+4>>2];Be(k[g>>2]|0,k[h>>2]|0,t);Be(k[g>>2]|0,k[h>>2]|0,u);k[C>>2]=k[(k[w>>2]|0)+((k[27632+(k[w+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[C>>2];k[(k[t>>2]|0)+((k[27632+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[u>>2]|0)+((k[27632+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[C>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[t+4>>2]=k[27620+(k[t+4>>2]<<2)>>2];k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[t+4>>2]=k[27620+(k[t+4>>2]<<2)>>2];k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[v>>2]|k[v+4>>2];k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2]=k[w>>2]|k[w+4>>2];k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2]=k[u>>2]|k[u+4>>2];if(((k[K>>2]|0)==0?(k[w>>2]|0)==(k[o>>2]|0):0)?(k[w+4>>2]|0)==(k[o+4>>2]|0):0){k[o>>2]=k[t>>2];k[o+4>>2]=k[t+4>>2]}if(!(Qe(10)|0)){y=zf(k[g>>2]|0,k[n>>2]|0,t,k[A>>2]|0)|0;k[n>>2]=y;break}if(!(Qe(10)|0)){k[x>>2]=k[u>>2];k[x+4>>2]=k[27620+(k[u+4>>2]<<2)>>2];y=zf(k[g>>2]|0,k[n>>2]|0,x,k[A>>2]|0)|0;k[n>>2]=y}}while(0);k[(k[l>>2]|0)+16>>2]=k[j>>2];k[j>>2]=k[l>>2];if(!(k[J>>2]|0))continue;k[D>>2]=k[(k[v>>2]|0)+((k[v+4>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[t>>2]|0)+((k[27632+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2];k[F>>2]=k[(k[t>>2]|0)+((k[t+4>>2]|0)+3<<2)>>2];M=+Ie(k[g>>2]|0,k[h>>2]|0,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0);p[G>>3]=M;if(+p[G>>3]>0.0){k[m>>2]=k[j>>2];k[j>>2]=k[(k[j>>2]|0)+16>>2];p[k[m>>2]>>3]=+p[(k[g>>2]|0)+49640>>3];M=+wf(k[g>>2]|0,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0,+p[G>>3]);p[(k[m>>2]|0)+8>>3]=M;k[(k[m>>2]|0)+16>>2]=k[t>>2]|k[t+4>>2];rf(k[i>>2]|0,k[I>>2]|0,k[m>>2]|0);k[I>>2]=(k[I>>2]|0)+1;k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[m>>2]}k[D>>2]=k[(k[u>>2]|0)+((k[u+4>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];k[F>>2]=k[(k[w>>2]|0)+((k[w+4>>2]|0)+3<<2)>>2];M=+Ie(k[g>>2]|0,k[h>>2]|0,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0);p[H>>3]=M;if(!(+p[H>>3]>0.0))continue;k[m>>2]=k[j>>2];k[j>>2]=k[(k[j>>2]|0)+16>>2];p[k[m>>2]>>3]=+p[(k[g>>2]|0)+49640>>3];M=+wf(k[g>>2]|0,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0,+p[H>>3]);p[(k[m>>2]|0)+8>>3]=M;k[(k[m>>2]|0)+16>>2]=k[w>>2]|k[w+4>>2];rf(k[i>>2]|0,k[I>>2]|0,k[m>>2]|0);k[I>>2]=(k[I>>2]|0)+1;k[(k[w>>2]|0)+((k[27620+(k[w+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[m>>2]}je((k[g>>2]|0)+392|0);k[o+4>>2]=k[27632+(k[o+4>>2]<<2)>>2];m=mf(k[g>>2]|0,k[h>>2]|0,o)|0;r=c;return m|0}function Df(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+48|0;d=c+24|0;e=c+16|0;f=c+8|0;g=c+40|0;h=c+36|0;i=c+32|0;j=c+28|0;k[h>>2]=a;k[i>>2]=b;k[(k[h>>2]|0)+49684>>2]=0;qe(k[h>>2]|0,k[i>>2]|0);do if(!(k[(k[i>>2]|0)+112>>2]|0)){mta(58678,c)|0;if(k[(k[i>>2]|0)+92>>2]|0){mta(58715,f)|0;break}if(k[(k[i>>2]|0)+96>>2]|0){mta(58739,e)|0;break}else{mta(58761,d)|0;break}}while(0);do if(!(k[(k[i>>2]|0)+92>>2]|0)){d=k[h>>2]|0;e=k[i>>2]|0;if(k[(k[i>>2]|0)+96>>2]|0){f=Cf(d,e)|0;k[j>>2]=f;break}else{f=nf(d,e)|0;k[j>>2]=f;break}}else{f=qf(k[h>>2]|0,k[i>>2]|0)|0;k[j>>2]=f}while(0);if(!(k[(k[h>>2]|0)+40>>2]|0)){k[g>>2]=0;l=k[g>>2]|0;r=c;return l|0}else{k[g>>2]=k[j>>2];l=k[g>>2]|0;r=c;return l|0}return 0}function Ef(a,b,c,d,e,f,g,h,i,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;var m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;m=r;r=r+272|0;n=m+48|0;o=m+40|0;q=m+32|0;s=m+24|0;t=m+16|0;u=m+264|0;v=m+260|0;w=m+256|0;x=m+252|0;y=m+248|0;z=m+244|0;A=m+240|0;B=m+236|0;C=m+232|0;D=m+228|0;E=m+224|0;F=m+220|0;G=m+216|0;H=m+208|0;I=m+200|0;J=m+192|0;K=m+184|0;L=m+176|0;M=m+168|0;N=m+164|0;O=m+160|0;P=m+156|0;Q=m+152|0;R=m+148|0;S=m+144|0;T=m+140|0;U=m+136|0;V=m+132|0;W=m+128|0;X=m+124|0;Y=m;Z=m+112|0;_=m+104|0;$=m+96|0;aa=m+92|0;ba=m+88|0;ca=m+84|0;da=m+80|0;ea=m+76|0;fa=m+72|0;ga=m+68|0;ha=m+64|0;ia=m+60|0;ja=m+56|0;ka=m+52|0;k[u>>2]=a;k[v>>2]=b;k[w>>2]=c;k[x>>2]=d;k[y>>2]=e;k[z>>2]=f;k[A>>2]=g;k[B>>2]=h;k[C>>2]=i;k[D>>2]=j;k[E>>2]=l;k[(k[u>>2]|0)+49652>>2]=k[z>>2];k[aa>>2]=k[A>>2];if((k[aa>>2]|0)<3){mta(58792,m+8|0)|0;$d(1)}k[(k[u>>2]|0)+49684>>2]=k[B>>2];qe(k[u>>2]|0,k[v>>2]|0);k[ga>>2]=1;while(1){if((k[ga>>2]|0)>(k[(k[u>>2]|0)+49652>>2]|0))break;Be(k[u>>2]|0,k[v>>2]|0,H);k[(k[H>>2]|0)+12>>2]=k[H>>2];k[ga>>2]=(k[ga>>2]|0)+1}k[ba>>2]=0;a:do if(k[k[v>>2]>>2]|0){k[(k[u>>2]|0)+49656>>2]=k[E>>2];k[ba>>2]=(k[D>>2]|0)!=0&1;k[ha>>2]=1;while(1){if((k[ha>>2]|0)>(k[(k[u>>2]|0)+49656>>2]|0))break a;Ce(k[u>>2]|0,M);k[(k[M>>2]|0)+8>>2]=k[M>>2];k[ha>>2]=(k[ha>>2]|0)+1}}while(0);k[F>>2]=0;k[G>>2]=0;if(!(k[(k[v>>2]|0)+112>>2]|0))mta(58842,t)|0;t=ae(k[(k[u>>2]|0)+112+40>>2]<<2)|0;k[N>>2]=t;k[ia>>2]=0;while(1){if((k[ia>>2]|0)>=(k[(k[u>>2]|0)+112+40>>2]|0))break;k[(k[N>>2]|0)+(k[ia>>2]<<2)>>2]=k[(k[u>>2]|0)+49768>>2];k[ia>>2]=(k[ia>>2]|0)+1}if(k[(k[v>>2]|0)+116>>2]|0)mta(58864,s)|0;me(k[u>>2]|0);s=se(k[u>>2]|0)|0;k[H>>2]=s;k[ga>>2]=k[(k[v>>2]|0)+40>>2];while(1){if(!(k[H>>2]|0))break;k[ja>>2]=0;while(1){if((k[ja>>2]|0)>=3)break;s=k[F>>2]|0;k[F>>2]=s+1;k[Z+(k[ja>>2]<<2)>>2]=k[(k[w>>2]|0)+(s<<2)>>2];if(!((k[Z+(k[ja>>2]<<2)>>2]|0)>=(k[(k[v>>2]|0)+40>>2]|0)?(k[Z+(k[ja>>2]<<2)>>2]|0)<((k[(k[v>>2]|0)+40>>2]|0)+(k[(k[u>>2]|0)+49648>>2]|0)|0):0)){k[q>>2]=k[ga>>2];mta(58889,q)|0;$d(1)}k[ja>>2]=(k[ja>>2]|0)+1}k[ja>>2]=3;while(1){if((k[ja>>2]|0)>=(k[aa>>2]|0))break;s=k[F>>2]|0;k[F>>2]=s+1;k[$>>2]=k[(k[w>>2]|0)+(s<<2)>>2];if(((k[$>>2]|0)>=(k[(k[v>>2]|0)+40>>2]|0)?(k[$>>2]|0)<((k[(k[v>>2]|0)+40>>2]|0)+(k[(k[u>>2]|0)+49648>>2]|0)|0):0)?(s=ze(k[u>>2]|0,k[v>>2]|0,k[$>>2]|0)|0,k[V>>2]=s,(k[(k[V>>2]|0)+((k[(k[u>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)!=-32768):0)ve(k[u>>2]|0,k[V>>2]|0);k[ja>>2]=(k[ja>>2]|0)+1}k[ja>>2]=0;while(1){if((k[ja>>2]|0)>=(k[(k[u>>2]|0)+49684>>2]|0))break;s=k[G>>2]|0;k[G>>2]=s+1;p[(k[H>>2]|0)+((k[(k[u>>2]|0)+49708>>2]|0)+(k[ja>>2]|0)<<3)>>3]=+p[(k[x>>2]|0)+(s<<3)>>3];k[ja>>2]=(k[ja>>2]|0)+1}if(k[(k[v>>2]|0)+12>>2]|0){p[Y>>3]=+p[(k[y>>2]|0)+((k[ga>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<3)>>3];p[(k[H>>2]|0)+(k[(k[u>>2]|0)+49712>>2]<<3)>>3]=+p[Y>>3]}k[H+4>>2]=0;s=ze(k[u>>2]|0,k[v>>2]|0,k[Z>>2]|0)|0;k[(k[H>>2]|0)+((k[27620+(k[H+4>>2]<<2)>>2]|0)+3<<2)>>2]=s;s=ze(k[u>>2]|0,k[v>>2]|0,k[Z+4>>2]|0)|0;k[(k[H>>2]|0)+((k[27632+(k[H+4>>2]<<2)>>2]|0)+3<<2)>>2]=s;s=ze(k[u>>2]|0,k[v>>2]|0,k[Z+8>>2]|0)|0;k[(k[H>>2]|0)+((k[H+4>>2]|0)+3<<2)>>2]=s;k[H+4>>2]=0;while(1){if((k[H+4>>2]|0)>=3)break;k[da>>2]=k[Z+(k[H+4>>2]<<2)>>2];k[P>>2]=k[(k[N>>2]|0)+((k[da>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<2)>>2];k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2]=k[P>>2];k[(k[N>>2]|0)+((k[da>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<2)>>2]=k[H>>2]|k[H+4>>2];k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2];if((k[J>>2]|0)!=(k[(k[u>>2]|0)+49768>>2]|0)){k[Q>>2]=k[(k[H>>2]|0)+((k[27632+(k[H+4>>2]<<2)>>2]|0)+3<<2)>>2];k[R>>2]=k[(k[H>>2]|0)+((k[H+4>>2]|0)+3<<2)>>2];do{k[S>>2]=k[(k[J>>2]|0)+((k[27632+(k[J+4>>2]<<2)>>2]|0)+3<<2)>>2];k[T>>2]=k[(k[J>>2]|0)+((k[J+4>>2]|0)+3<<2)>>2];if((k[R>>2]|0)==(k[S>>2]|0)){k[I>>2]=k[H>>2];k[I+4>>2]=k[27632+(k[H+4>>2]<<2)>>2];k[(k[I>>2]|0)+(k[I+4>>2]<<2)>>2]=k[J>>2]|k[J+4>>2];k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2]=k[I>>2]|k[I+4>>2]}if((k[Q>>2]|0)==(k[T>>2]|0)){k[K>>2]=k[J>>2];k[K+4>>2]=k[27632+(k[J+4>>2]<<2)>>2];k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2]=k[K>>2]|k[K+4>>2];k[(k[K>>2]|0)+(k[K+4>>2]<<2)>>2]=k[H>>2]|k[H+4>>2]}k[P>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2];k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2]}while((k[J>>2]|0)!=(k[(k[u>>2]|0)+49768>>2]|0))}s=H+4|0;k[s>>2]=(k[s>>2]|0)+1}s=se(k[u>>2]|0)|0;k[H>>2]=s;k[ga>>2]=(k[ga>>2]|0)+1}k[F>>2]=0;k[ea>>2]=0;b:do if(k[k[v>>2]>>2]|0){if(k[(k[v>>2]|0)+116>>2]|0)mta(58940,o)|0;k[ca>>2]=0;me((k[u>>2]|0)+56|0);ga=ue(k[u>>2]|0)|0;k[M>>2]=ga;k[ha>>2]=k[(k[v>>2]|0)+40>>2];while(1){if(!(k[M>>2]|0))break b;ga=k[F>>2]|0;k[F>>2]=ga+1;k[_>>2]=k[(k[C>>2]|0)+(ga<<2)>>2];ga=k[F>>2]|0;k[F>>2]=ga+1;k[_+4>>2]=k[(k[C>>2]|0)+(ga<<2)>>2];if(k[ba>>2]|0)k[ca>>2]=k[(k[D>>2]|0)+((k[ha>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<2)>>2];k[ja>>2]=0;while(1){if((k[ja>>2]|0)>=2)break;if(!((k[_+(k[ja>>2]<<2)>>2]|0)>=(k[(k[v>>2]|0)+40>>2]|0)?(k[_+(k[ja>>2]<<2)>>2]|0)<((k[(k[v>>2]|0)+40>>2]|0)+(k[(k[u>>2]|0)+49648>>2]|0)|0):0)){k[n>>2]=k[ha>>2];mta(58978,n)|0;$d(1)}k[ja>>2]=(k[ja>>2]|0)+1}k[M+4>>2]=0;ga=ze(k[u>>2]|0,k[v>>2]|0,k[_>>2]|0)|0;k[W>>2]=ga;ga=ze(k[u>>2]|0,k[v>>2]|0,k[_+4>>2]|0)|0;k[X>>2]=ga;k[(k[M>>2]|0)+(2+(k[M+4>>2]|0)<<2)>>2]=k[W>>2];k[(k[M>>2]|0)+(3-(k[M+4>>2]|0)<<2)>>2]=k[X>>2];k[(k[M>>2]|0)+(4+(k[M+4>>2]|0)<<2)>>2]=k[W>>2];k[(k[M>>2]|0)+(5-(k[M+4>>2]|0)<<2)>>2]=k[X>>2];k[(k[M>>2]|0)+32>>2]=k[ca>>2];k[M+4>>2]=0;while(1){if((k[M+4>>2]|0)>=2)break;k[da>>2]=k[_+(1-(k[M+4>>2]|0)<<2)>>2];k[O>>2]=(k[N>>2]|0)+((k[da>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<2);k[P>>2]=k[(k[N>>2]|0)+((k[da>>2]|0)-(k[(k[v>>2]|0)+40>>2]|0)<<2)>>2];k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2];k[U>>2]=k[(k[M>>2]|0)+(2+(k[M+4>>2]|0)<<2)>>2];k[fa>>2]=1;while(1){if(!(k[fa>>2]|0))break;if((k[J>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0))break;k[S>>2]=k[(k[J>>2]|0)+((k[27632+(k[J+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[U>>2]|0)==(k[S>>2]|0)){k[k[O>>2]>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2];k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2]=k[M>>2]|k[M+4>>2];k[(k[M>>2]|0)+(6+(k[M+4>>2]|0)<<2)>>2]=k[J>>2]|k[J+4>>2];k[ka>>2]=k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2];k[L+4>>2]=k[ka>>2]&3;k[L>>2]=k[ka>>2]^k[L+4>>2];if((k[L>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0)){$e(k[u>>2]|0,k[v>>2]|0,J,1);k[ea>>2]=(k[ea>>2]|0)+1}k[fa>>2]=0}k[O>>2]=(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2);k[P>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2];k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2]}ga=M+4|0;k[ga>>2]=(k[ga>>2]|0)+1}ga=ue(k[u>>2]|0)|0;k[M>>2]=ga;k[ha>>2]=(k[ha>>2]|0)+1}}while(0);k[ia>>2]=0;while(1){if((k[ia>>2]|0)>=(k[(k[u>>2]|0)+112+40>>2]|0))break;k[P>>2]=k[(k[N>>2]|0)+(k[ia>>2]<<2)>>2];k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2];while(1){if((k[J>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0))break;k[P>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2];k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2]=k[(k[u>>2]|0)+49776>>2];k[ka>>2]=k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2];k[L+4>>2]=k[ka>>2]&3;k[L>>2]=k[ka>>2]^k[L+4>>2];if((k[L>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0)){$e(k[u>>2]|0,k[v>>2]|0,J,1);k[ea>>2]=(k[ea>>2]|0)+1}k[J+4>>2]=k[P>>2]&3;k[J>>2]=k[P>>2]^k[J+4>>2]}k[ia>>2]=(k[ia>>2]|0)+1}be(k[N>>2]|0);r=m;return k[ea>>2]|0}function Ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0;e=r;r=r+160|0;f=e+80|0;g=e+64|0;h=e+56|0;i=e+40|0;j=e+24|0;l=e+16|0;m=e+144|0;n=e+140|0;o=e+136|0;q=e+132|0;s=e+128|0;t=e+120|0;u=e+116|0;v=e+112|0;w=e+108|0;x=e+8|0;y=e;z=e+104|0;A=e+100|0;B=e+96|0;k[n>>2]=a;k[o>>2]=b;k[q>>2]=c;k[s>>2]=d;k[u>>2]=k[(k[k[q>>2]>>2]|0)+((k[27620+(k[(k[q>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[k[q>>2]>>2]|0)+((k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[k[q>>2]>>2]|0)+((k[(k[q>>2]|0)+4>>2]|0)+3<<2)>>2];C=+Ie(k[n>>2]|0,k[o>>2]|0,k[s>>2]|0,k[u>>2]|0,k[v>>2]|0);p[x>>3]=C;k[z>>2]=+p[x>>3]>0.0&1;C=+Ie(k[n>>2]|0,k[o>>2]|0,k[u>>2]|0,k[s>>2]|0,k[w>>2]|0);p[y>>3]=C;k[A>>2]=+p[y>>3]>0.0&1;do if((k[z>>2]|0)!=0&(k[A>>2]|0)!=0){k[t>>2]=k[k[q>>2]>>2];k[t+4>>2]=k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[B>>2]=k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2];k[t+4>>2]=k[B>>2]&3;k[t>>2]=k[B>>2]^k[t+4>>2];if((k[t>>2]|0)==(k[(k[n>>2]|0)+49768>>2]|0)){k[z>>2]=0;break}else{k[A>>2]=0;break}}while(0);while(1){if(!(k[z>>2]|0))break;k[(k[q>>2]|0)+4>>2]=k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[B>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[(k[q>>2]|0)+4>>2]=k[B>>2]&3;k[k[q>>2]>>2]=k[B>>2]^k[(k[q>>2]|0)+4>>2];if((k[k[q>>2]>>2]|0)==(k[(k[n>>2]|0)+49768>>2]|0)){mta(59028,l)|0;C=+p[(k[u>>2]|0)+8>>3];p[j>>3]=+p[k[u>>2]>>3];p[j+8>>3]=C;mta(59082,j)|0;C=+p[(k[s>>2]|0)+8>>3];p[i>>3]=+p[k[s>>2]>>3];p[i+8>>3]=C;mta(59124,i)|0;ce()}k[v>>2]=k[(k[k[q>>2]>>2]|0)+((k[(k[q>>2]|0)+4>>2]|0)+3<<2)>>2];p[y>>3]=+p[x>>3];C=+Ie(k[n>>2]|0,k[o>>2]|0,k[s>>2]|0,k[u>>2]|0,k[v>>2]|0);p[x>>3]=C;k[z>>2]=+p[x>>3]>0.0&1}while(1){if(!(k[A>>2]|0))break;k[B>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[(k[q>>2]|0)+4>>2]=k[B>>2]&3;k[k[q>>2]>>2]=k[B>>2]^k[(k[q>>2]|0)+4>>2];k[(k[q>>2]|0)+4>>2]=k[27620+(k[(k[q>>2]|0)+4>>2]<<2)>>2];if((k[k[q>>2]>>2]|0)==(k[(k[n>>2]|0)+49768>>2]|0)){mta(59028,h)|0;C=+p[(k[u>>2]|0)+8>>3];p[g>>3]=+p[k[u>>2]>>3];p[g+8>>3]=C;mta(59082,g)|0;C=+p[(k[s>>2]|0)+8>>3];p[f>>3]=+p[k[s>>2]>>3];p[f+8>>3]=C;mta(59124,f)|0;ce()}k[w>>2]=k[(k[k[q>>2]>>2]|0)+((k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];p[x>>3]=+p[y>>3];C=+Ie(k[n>>2]|0,k[o>>2]|0,k[u>>2]|0,k[s>>2]|0,k[w>>2]|0);p[y>>3]=C;k[A>>2]=+p[y>>3]>0.0&1}if(+p[x>>3]==0.0){k[m>>2]=1;D=k[m>>2]|0;r=e;return D|0}if(+p[y>>3]==0.0){k[m>>2]=2;D=k[m>>2]|0;r=e;return D|0}else{k[m>>2]=0;D=k[m>>2]|0;r=e;return D|0}return 0}function Gf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0;f=r;r=r+240|0;g=f+152|0;h=f+144|0;i=f+136|0;j=f+128|0;l=f+80|0;m=f+224|0;n=f+220|0;o=f+216|0;q=f+212|0;s=f+208|0;t=f+200|0;u=f+196|0;v=f+192|0;w=f+188|0;x=f+184|0;y=f+180|0;z=f+176|0;A=f+172|0;B=f+168|0;C=f+56|0;D=f+48|0;E=f+40|0;F=f+32|0;G=f+24|0;H=f+16|0;I=f+8|0;J=f;K=f+164|0;L=f+160|0;M=f+156|0;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;k[q>>2]=d;k[s>>2]=e;k[u>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[k[o>>2]>>2]|0)+((k[27632+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];p[E>>3]=+p[k[w>>2]>>3]-+p[k[v>>2]>>3];p[F>>3]=+p[(k[w>>2]|0)+8>>3]-+p[(k[v>>2]|0)+8>>3];p[C>>3]=+p[k[s>>2]>>3]-+p[k[u>>2]>>3];p[D>>3]=+p[(k[s>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3];p[G>>3]=+p[k[v>>2]>>3]-+p[k[s>>2]>>3];p[H>>3]=+p[(k[v>>2]|0)+8>>3]-+p[(k[s>>2]|0)+8>>3];p[J>>3]=+p[F>>3]*+p[C>>3]-+p[E>>3]*+p[D>>3];if(+p[J>>3]==0.0){mta(59143,f+64|0)|0;mta(59184,f+72|0)|0;ce()}p[I>>3]=(+p[D>>3]*+p[G>>3]-+p[C>>3]*+p[H>>3])/+p[J>>3];J=ke((k[m>>2]|0)+112|0)|0;k[z>>2]=J;k[K>>2]=0;while(1){if((k[K>>2]|0)>=(2+(k[(k[m>>2]|0)+49680>>2]|0)|0))break;p[(k[z>>2]|0)+(k[K>>2]<<3)>>3]=+p[(k[v>>2]|0)+(k[K>>2]<<3)>>3]+ +p[I>>3]*(+p[(k[w>>2]|0)+(k[K>>2]<<3)>>3]-+p[(k[v>>2]|0)+(k[K>>2]<<3)>>3]);k[K>>2]=(k[K>>2]|0)+1}k[(k[z>>2]|0)+(k[(k[m>>2]|0)+49696>>2]<<2)>>2]=k[(k[k[q>>2]>>2]|0)+32>>2];k[(k[z>>2]|0)+((k[(k[m>>2]|0)+49696>>2]|0)+1<<2)>>2]=0;if((k[(k[n>>2]|0)+116>>2]|0)>1){N=+p[(k[v>>2]|0)+8>>3];O=+p[k[w>>2]>>3];P=+p[(k[w>>2]|0)+8>>3];Q=+p[k[z>>2]>>3];R=+p[(k[z>>2]|0)+8>>3];p[l>>3]=+p[k[v>>2]>>3];p[l+8>>3]=N;p[l+16>>3]=O;p[l+24>>3]=P;p[l+32>>3]=Q;p[l+40>>3]=R;mta(59238,l)|0}l=cf(k[m>>2]|0,k[n>>2]|0,k[z>>2]|0,k[o>>2]|0,k[q>>2]|0,0,0)|0;k[A>>2]=l;if(k[A>>2]|0){mta(59311,j)|0;mta(59353,i)|0;ce()}k[(k[z>>2]|0)+(k[(k[m>>2]|0)+49700>>2]<<2)>>2]=k[k[o>>2]>>2]|k[(k[o>>2]|0)+4>>2];if((k[(k[m>>2]|0)+49692>>2]|0)>0){i=(k[m>>2]|0)+49692|0;k[i>>2]=(k[i>>2]|0)+-1}k[(k[q>>2]|0)+4>>2]=1-(k[(k[q>>2]|0)+4>>2]|0);k[M>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[t+4>>2]=k[M>>2]&1;k[t>>2]=k[M>>2]&-4;k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2]=k[(k[m>>2]|0)+49776>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[(k[m>>2]|0)+49776>>2];do{k[(k[k[q>>2]>>2]|0)+(4+(k[(k[q>>2]|0)+4>>2]|0)<<2)>>2]=k[z>>2];k[M>>2]=k[(k[k[q>>2]>>2]|0)+(1-(k[(k[q>>2]|0)+4>>2]|0)<<2)>>2];k[(k[q>>2]|0)+4>>2]=k[M>>2]&1;k[k[q>>2]>>2]=k[M>>2]&-4}while((k[k[q>>2]>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0));do{k[(k[t>>2]|0)+(4+(k[t+4>>2]|0)<<2)>>2]=k[z>>2];k[M>>2]=k[(k[t>>2]|0)+(1-(k[t+4>>2]|0)<<2)>>2];k[t+4>>2]=k[M>>2]&1;k[t>>2]=k[M>>2]&-4}while((k[t>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0));t=Ff(k[m>>2]|0,k[n>>2]|0,k[o>>2]|0,k[u>>2]|0)|0;k[B>>2]=t;k[y>>2]=k[(k[k[o>>2]>>2]|0)+((k[27632+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[x>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2];if(+p[k[x>>2]>>3]==+p[k[u>>2]>>3]?+p[(k[x>>2]|0)+8>>3]==+p[(k[u>>2]|0)+8>>3]:0){k[(k[o>>2]|0)+4>>2]=k[27632+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[L>>2]=k[(k[k[o>>2]>>2]|0)+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[(k[o>>2]|0)+4>>2]=k[L>>2]&3;k[k[o>>2]>>2]=k[L>>2]^k[(k[o>>2]|0)+4>>2];r=f;return}if(!(+p[k[y>>2]>>3]!=+p[k[u>>2]>>3])?!(+p[(k[y>>2]|0)+8>>3]!=+p[(k[u>>2]|0)+8>>3]):0){r=f;return}mta(59311,h)|0;mta(59384,g)|0;ce();r=f;return}function Hf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0;f=r;r=r+64|0;g=f+52|0;h=f+48|0;i=f+44|0;j=f+40|0;l=f+36|0;m=f+32|0;n=f+24|0;o=f+16|0;q=f+12|0;s=f+8|0;t=f+4|0;u=f;k[h>>2]=a;k[i>>2]=b;k[j>>2]=c;k[l>>2]=d;k[m>>2]=e;e=Ff(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[l>>2]|0)|0;k[t>>2]=e;k[s>>2]=k[(k[k[j>>2]>>2]|0)+((k[27632+(k[(k[j>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[q>>2]=k[(k[k[j>>2]>>2]|0)+((k[(k[j>>2]|0)+4>>2]|0)+3<<2)>>2];if(!(+p[k[q>>2]>>3]==+p[k[l>>2]>>3]?+p[(k[q>>2]|0)+8>>3]==+p[(k[l>>2]|0)+8>>3]:0))v=3;do if((v|0)==3){if(+p[k[s>>2]>>3]==+p[k[l>>2]>>3]?+p[(k[s>>2]|0)+8>>3]==+p[(k[l>>2]|0)+8>>3]:0)break;if((k[t>>2]|0)==1){k[(k[j>>2]|0)+4>>2]=k[27632+(k[(k[j>>2]|0)+4>>2]<<2)>>2];$e(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[m>>2]|0);e=Hf(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[l>>2]|0,k[m>>2]|0)|0;k[g>>2]=e;w=k[g>>2]|0;r=f;return w|0}if((k[t>>2]|0)==2){$e(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[m>>2]|0);k[(k[j>>2]|0)+4>>2]=k[27620+(k[(k[j>>2]|0)+4>>2]<<2)>>2];e=Hf(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[l>>2]|0,k[m>>2]|0)|0;k[g>>2]=e;w=k[g>>2]|0;r=f;return w|0}k[n>>2]=k[k[j>>2]>>2];k[n+4>>2]=k[27620+(k[(k[j>>2]|0)+4>>2]<<2)>>2];k[u>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[o+4>>2]=k[u>>2]&1;k[o>>2]=k[u>>2]&-4;if((k[o>>2]|0)==(k[(k[h>>2]|0)+49776>>2]|0)){k[g>>2]=0;w=k[g>>2]|0;r=f;return w|0}else{Gf(k[h>>2]|0,k[i>>2]|0,n,o,k[l>>2]|0);k[k[j>>2]>>2]=k[n>>2];k[(k[j>>2]|0)+4>>2]=k[n+4>>2];$e(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[m>>2]|0);e=Hf(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[l>>2]|0,k[m>>2]|0)|0;k[g>>2]=e;w=k[g>>2]|0;r=f;return w|0}}while(0);if(+p[k[q>>2]>>3]==+p[k[l>>2]>>3]?+p[(k[q>>2]|0)+8>>3]==+p[(k[l>>2]|0)+8>>3]:0)k[(k[j>>2]|0)+4>>2]=k[27632+(k[(k[j>>2]|0)+4>>2]<<2)>>2];$e(k[h>>2]|0,k[i>>2]|0,k[j>>2]|0,k[m>>2]|0);k[g>>2]=1;w=k[g>>2]|0;r=f;return w|0}function If(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0;f=r;r=r+160|0;g=f+80|0;h=f+72|0;i=f+56|0;j=f+40|0;l=f+8|0;m=f+152|0;n=f+148|0;o=f+144|0;q=f+140|0;s=f+136|0;t=f+128|0;u=f+120|0;v=f+112|0;w=f+104|0;x=f+100|0;y=f+96|0;z=f+92|0;A=f+88|0;B=f+84|0;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;k[q>>2]=d;k[s>>2]=e;if((k[(k[n>>2]|0)+116>>2]|0)>2){mta(59440,f)|0;C=+p[(k[o>>2]|0)+8>>3];D=+p[k[q>>2]>>3];E=+p[(k[q>>2]|0)+8>>3];p[l>>3]=+p[k[o>>2]>>3];p[l+8>>3]=C;p[l+16>>3]=D;p[l+24>>3]=E;mta(59500,l)|0}l=ke((k[m>>2]|0)+112|0)|0;k[w>>2]=l;k[A>>2]=0;while(1){if((k[A>>2]|0)>=(2+(k[(k[m>>2]|0)+49680>>2]|0)|0))break;p[(k[w>>2]|0)+(k[A>>2]<<3)>>3]=(+p[(k[o>>2]|0)+(k[A>>2]<<3)>>3]+ +p[(k[q>>2]|0)+(k[A>>2]<<3)>>3])*.5;k[A>>2]=(k[A>>2]|0)+1}k[(k[w>>2]|0)+(k[(k[m>>2]|0)+49696>>2]<<2)>>2]=k[s>>2];k[(k[w>>2]|0)+((k[(k[m>>2]|0)+49696>>2]|0)+1<<2)>>2]=1;k[t>>2]=k[(k[m>>2]|0)+49768>>2];A=cf(k[m>>2]|0,k[n>>2]|0,k[w>>2]|0,t,0,0,0)|0;k[z>>2]=A;if((k[z>>2]|0)!=3){if((k[z>>2]|0)==2){if((k[(k[n>>2]|0)+116>>2]|0)>2){E=+p[(k[w>>2]|0)+8>>3];p[i>>3]=+p[k[w>>2]>>3];p[i+8>>3]=E;mta(59587,i)|0}k[B>>2]=k[(k[t>>2]|0)+(6+(k[t+4>>2]|0)<<2)>>2];k[v+4>>2]=k[B>>2]&1;k[v>>2]=k[B>>2]&-4;B=cf(k[m>>2]|0,k[n>>2]|0,k[w>>2]|0,t,v,0,0)|0;k[z>>2]=B;if(k[z>>2]|0){mta(59632,h)|0;mta(59353,g)|0;ce()}}if((k[(k[m>>2]|0)+49692>>2]|0)>0){g=(k[m>>2]|0)+49692|0;k[g>>2]=(k[g>>2]|0)+-1}}else{if((k[(k[n>>2]|0)+116>>2]|0)>2){E=+p[(k[w>>2]|0)+8>>3];p[j>>3]=+p[k[w>>2]>>3];p[j+8>>3]=E;mta(59533,j)|0}ve(k[m>>2]|0,k[w>>2]|0);k[w>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]}k[u>>2]=k[t>>2];k[u+4>>2]=k[t+4>>2];Ff(k[m>>2]|0,k[n>>2]|0,u,k[q>>2]|0)|0;if(!(Hf(k[m>>2]|0,k[n>>2]|0,t,k[o>>2]|0,k[s>>2]|0)|0)){k[x>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2];If(k[m>>2]|0,k[n>>2]|0,k[x>>2]|0,k[o>>2]|0,k[s>>2]|0)}if(Hf(k[m>>2]|0,k[n>>2]|0,u,k[q>>2]|0,k[s>>2]|0)|0){r=f;return}k[y>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];If(k[m>>2]|0,k[n>>2]|0,k[y>>2]|0,k[q>>2]|0,k[s>>2]|0);r=f;return}function Jf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;e=r;r=r+64|0;f=e+60|0;g=e+56|0;h=e+52|0;i=e+48|0;j=e+40|0;l=e+32|0;m=e+24|0;n=e+20|0;o=e+16|0;p=e+12|0;q=e+8|0;s=e+4|0;t=e;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;k[j>>2]=k[k[h>>2]>>2];k[j+4>>2]=k[27620+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[s>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[s>>2]&3;k[l>>2]=k[s>>2]^k[l+4>>2];if((k[l>>2]|0)==(k[(k[f>>2]|0)+49768>>2]|0)){r=e;return}k[t>>2]=k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2];k[m+4>>2]=k[t>>2]&1;k[m>>2]=k[t>>2]&-4;if((k[m>>2]|0)!=(k[(k[f>>2]|0)+49776>>2]|0)){r=e;return}k[n>>2]=k[(k[j>>2]|0)+((k[j+4>>2]|0)+3<<2)>>2];k[o>>2]=k[(k[j>>2]|0)+((k[27620+(k[j+4>>2]<<2)>>2]|0)+3<<2)>>2];k[p>>2]=k[(k[j>>2]|0)+((k[27632+(k[j+4>>2]<<2)>>2]|0)+3<<2)>>2];k[q>>2]=k[(k[l>>2]|0)+((k[l+4>>2]|0)+3<<2)>>2];m=k[f>>2]|0;t=k[g>>2]|0;if(k[i>>2]|0){if(+Ie(m,t,k[n>>2]|0,k[o>>2]|0,k[q>>2]|0)<=0.0){r=e;return}}else if(+Ie(m,t,k[q>>2]|0,k[p>>2]|0,k[n>>2]|0)<=0.0){r=e;return}if(+Ie(k[f>>2]|0,k[g>>2]|0,k[p>>2]|0,k[o>>2]|0,k[q>>2]|0)>0.0?+Ke(k[f>>2]|0,k[g>>2]|0,k[o>>2]|0,k[q>>2]|0,k[p>>2]|0,k[n>>2]|0)<=0.0:0){r=e;return}af(k[f>>2]|0,k[g>>2]|0,j);k[(k[h>>2]|0)+4>>2]=k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2];Jf(k[f>>2]|0,k[g>>2]|0,k[h>>2]|0,k[i>>2]|0);Jf(k[f>>2]|0,k[g>>2]|0,l,k[i>>2]|0);r=e;return}function Kf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;f=r;r=r+80|0;g=f+72|0;h=f+68|0;i=f+64|0;j=f+60|0;l=f+56|0;m=f+48|0;n=f+40|0;o=f+32|0;q=f+28|0;s=f+24|0;t=f;u=f+20|0;v=f+16|0;w=f+12|0;x=f+8|0;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;k[l>>2]=e;k[q>>2]=k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[m>>2]=k[k[i>>2]>>2];k[m+4>>2]=k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2];af(k[g>>2]|0,k[h>>2]|0,m);k[u>>2]=0;k[v>>2]=0;do{k[s>>2]=k[(k[m>>2]|0)+((k[27620+(k[m+4>>2]<<2)>>2]|0)+3<<2)>>2];if(+p[k[s>>2]>>3]==+p[k[j>>2]>>3]?+p[(k[s>>2]|0)+8>>3]==+p[(k[j>>2]|0)+8>>3]:0){k[w>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[n+4>>2]=k[w>>2]&3;k[n>>2]=k[w>>2]^k[n+4>>2];k[n+4>>2]=k[27620+(k[n+4>>2]<<2)>>2];Jf(k[g>>2]|0,k[h>>2]|0,m,0);Jf(k[g>>2]|0,k[h>>2]|0,n,1);k[v>>2]=1}else y=5;do if((y|0)==5){y=0;z=+Ie(k[g>>2]|0,k[h>>2]|0,k[q>>2]|0,k[j>>2]|0,k[s>>2]|0);p[t>>3]=z;if(+p[t>>3]==0.0){k[u>>2]=1;k[w>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[n+4>>2]=k[w>>2]&3;k[n>>2]=k[w>>2]^k[n+4>>2];k[n+4>>2]=k[27620+(k[n+4>>2]<<2)>>2];Jf(k[g>>2]|0,k[h>>2]|0,m,0);Jf(k[g>>2]|0,k[h>>2]|0,n,1);k[v>>2]=1;break}if(+p[t>>3]>0.0){k[w>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[n+4>>2]=k[w>>2]&3;k[n>>2]=k[w>>2]^k[n+4>>2];k[n+4>>2]=k[27620+(k[n+4>>2]<<2)>>2];Jf(k[g>>2]|0,k[h>>2]|0,n,1);k[m+4>>2]=k[27632+(k[m+4>>2]<<2)>>2]}else{Jf(k[g>>2]|0,k[h>>2]|0,m,0);k[w>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[m+4>>2]=k[w>>2]&3;k[m>>2]=k[w>>2]^k[m+4>>2];k[m+4>>2]=k[27620+(k[m+4>>2]<<2)>>2]}k[x>>2]=k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2];k[o+4>>2]=k[x>>2]&1;k[o>>2]=k[x>>2]&-4;if((k[o>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0)){af(k[g>>2]|0,k[h>>2]|0,m);break}else{k[u>>2]=1;Gf(k[g>>2]|0,k[h>>2]|0,m,o,k[j>>2]|0);k[v>>2]=1;break}}while(0)}while((k[v>>2]|0)!=0^1);$e(k[g>>2]|0,k[h>>2]|0,m,k[l>>2]|0);if(!(k[u>>2]|0)){r=f;return}if(Hf(k[g>>2]|0,k[h>>2]|0,m,k[j>>2]|0,k[l>>2]|0)|0){r=f;return}Kf(k[g>>2]|0,k[h>>2]|0,m,k[j>>2]|0,k[l>>2]|0);r=f;return}function Lf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0;f=r;r=r+144|0;g=f+64|0;h=f+56|0;i=f+40|0;j=f+32|0;l=f;m=f+128|0;n=f+124|0;o=f+120|0;q=f+116|0;s=f+112|0;t=f+104|0;u=f+96|0;v=f+88|0;w=f+84|0;x=f+80|0;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;k[q>>2]=d;k[s>>2]=e;if((k[(k[n>>2]|0)+116>>2]|0)>1){y=+p[(k[o>>2]|0)+8>>3];z=+p[k[q>>2]>>3];A=+p[(k[q>>2]|0)+8>>3];p[l>>3]=+p[k[o>>2]>>3];p[l+8>>3]=y;p[l+16>>3]=z;p[l+24>>3]=A;mta(59669,l)|0}k[w>>2]=0;k[v>>2]=k[(k[o>>2]|0)+(k[(k[m>>2]|0)+49700>>2]<<2)>>2];if(k[v>>2]|0){k[t+4>>2]=k[v>>2]&3;k[t>>2]=k[v>>2]^k[t+4>>2];k[w>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2]}if((k[w>>2]|0)!=(k[o>>2]|0)?(k[t>>2]=k[(k[m>>2]|0)+49768>>2],k[t+4>>2]=0,k[x>>2]=k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2],k[t+4>>2]=k[x>>2]&3,k[t>>2]=k[x>>2]^k[t+4>>2],(_e(k[m>>2]|0,k[n>>2]|0,k[o>>2]|0,t)|0)!=2):0){mta(59717,j)|0;A=+p[(k[o>>2]|0)+8>>3];p[i>>3]=+p[k[o>>2]>>3];p[i+8>>3]=A;mta(59783,i)|0;ce()}k[(k[m>>2]|0)+49784>>2]=k[t>>2];k[(k[m>>2]|0)+49784+4>>2]=k[t+4>>2];if(Hf(k[m>>2]|0,k[n>>2]|0,t,k[q>>2]|0,k[s>>2]|0)|0){r=f;return}k[o>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=0;k[v>>2]=k[(k[q>>2]|0)+(k[(k[m>>2]|0)+49700>>2]<<2)>>2];if(k[v>>2]|0){k[u+4>>2]=k[v>>2]&3;k[u>>2]=k[v>>2]^k[u+4>>2];k[w>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2]}if((k[w>>2]|0)!=(k[q>>2]|0)?(k[u>>2]=k[(k[m>>2]|0)+49768>>2],k[u+4>>2]=0,k[x>>2]=k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2],k[u+4>>2]=k[x>>2]&3,k[u>>2]=k[x>>2]^k[u+4>>2],(_e(k[m>>2]|0,k[n>>2]|0,k[q>>2]|0,u)|0)!=2):0){mta(59717,h)|0;A=+p[(k[q>>2]|0)+8>>3];p[g>>3]=+p[k[q>>2]>>3];p[g+8>>3]=A;mta(59783,g)|0;ce()}k[(k[m>>2]|0)+49784>>2]=k[u>>2];k[(k[m>>2]|0)+49784+4>>2]=k[u+4>>2];if(Hf(k[m>>2]|0,k[n>>2]|0,u,k[o>>2]|0,k[s>>2]|0)|0){r=f;return}k[q>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];u=k[m>>2]|0;m=k[n>>2]|0;if(k[(k[n>>2]|0)+104>>2]|0){If(u,m,k[o>>2]|0,k[q>>2]|0,k[s>>2]|0);r=f;return}else{Kf(u,m,t,k[q>>2]|0,k[s>>2]|0);r=f;return}}function Mf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+48|0;d=c+36|0;e=c+32|0;f=c+24|0;g=c+16|0;h=c+8|0;i=c;k[d>>2]=a;k[e>>2]=b;k[f>>2]=k[(k[d>>2]|0)+49768>>2];k[f+4>>2]=0;k[i>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[f+4>>2]=k[i>>2]&3;k[f>>2]=k[i>>2]^k[f+4>>2];k[h>>2]=k[f>>2];k[h+4>>2]=k[f+4>>2];do{$e(k[d>>2]|0,k[e>>2]|0,f,1);k[f+4>>2]=k[27620+(k[f+4>>2]<<2)>>2];k[i>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[g+4>>2]=k[i>>2]&3;k[g>>2]=k[i>>2]^k[g+4>>2];k[g+4>>2]=k[27620+(k[g+4>>2]<<2)>>2];while(1){if((k[g>>2]|0)==(k[(k[d>>2]|0)+49768>>2]|0))break;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[i>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[g+4>>2]=k[i>>2]&3;k[g>>2]=k[i>>2]^k[g+4>>2];k[g+4>>2]=k[27620+(k[g+4>>2]<<2)>>2]}if((k[f>>2]|0)==(k[h>>2]|0))j=(k[f+4>>2]|0)==(k[h+4>>2]|0);else j=0}while(j^1);r=c;return}function Nf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;f=r;r=r+112|0;g=f+40|0;h=f+32|0;i=f+24|0;j=f+16|0;l=f+8|0;m=f;n=f+92|0;o=f+88|0;q=f+84|0;s=f+80|0;t=f+76|0;u=f+96|0;v=f+72|0;w=f+68|0;x=f+64|0;y=f+60|0;z=f+56|0;A=f+52|0;B=f+48|0;C=f+44|0;k[n>>2]=a;k[o>>2]=b;k[q>>2]=c;k[s>>2]=d;k[t>>2]=e;a:do if(k[k[o>>2]>>2]|0){if(!(k[(k[o>>2]|0)+112>>2]|0))mta(59819,m)|0;Jta(u,59867)|0;k[(k[n>>2]|0)+49656>>2]=k[t>>2];k[y>>2]=(k[s>>2]|0)!=0&1;k[v>>2]=0;if(!(k[(k[n>>2]|0)+40>>2]|0)){r=f;return}if((k[(k[n>>2]|0)+49656>>2]|0)>0?(Ye(k[n>>2]|0,k[o>>2]|0),(k[(k[o>>2]|0)+116>>2]|0)!=0):0)mta(59873,l)|0;k[B>>2]=0;k[C>>2]=0;while(1){if((k[C>>2]|0)>=(k[(k[n>>2]|0)+49656>>2]|0))break a;e=k[v>>2]|0;k[v>>2]=e+1;k[z>>2]=k[(k[q>>2]|0)+(e<<2)>>2];e=k[v>>2]|0;k[v>>2]=e+1;k[A>>2]=k[(k[q>>2]|0)+(e<<2)>>2];if(k[y>>2]|0)k[B>>2]=k[(k[s>>2]|0)+(k[C>>2]<<2)>>2];do if((k[z>>2]|0)>=(k[(k[o>>2]|0)+40>>2]|0)?(k[z>>2]|0)<((k[(k[o>>2]|0)+40>>2]|0)+(k[(k[n>>2]|0)+49648>>2]|0)|0):0){if((k[A>>2]|0)>=(k[(k[o>>2]|0)+40>>2]|0)?(k[A>>2]|0)<((k[(k[o>>2]|0)+40>>2]|0)+(k[(k[n>>2]|0)+49648>>2]|0)|0):0){e=ze(k[n>>2]|0,k[o>>2]|0,k[z>>2]|0)|0;k[w>>2]=e;e=ze(k[n>>2]|0,k[o>>2]|0,k[A>>2]|0)|0;k[x>>2]=e;if(+p[k[w>>2]>>3]==+p[k[x>>2]>>3]?+p[(k[w>>2]|0)+8>>3]==+p[(k[x>>2]|0)+8>>3]:0){if(k[(k[o>>2]|0)+112>>2]|0)break;k[h>>2]=(k[(k[o>>2]|0)+40>>2]|0)+(k[C>>2]|0);k[h+4>>2]=u;mta(60013,h)|0;break}Lf(k[n>>2]|0,k[o>>2]|0,k[w>>2]|0,k[x>>2]|0,k[B>>2]|0);break}if(!(k[(k[o>>2]|0)+112>>2]|0)){k[i>>2]=(k[(k[o>>2]|0)+40>>2]|0)+(k[C>>2]|0);k[i+4>>2]=u;mta(59957,i)|0}}else D=14;while(0);if((D|0)==14?(D=0,(k[(k[o>>2]|0)+112>>2]|0)==0):0){k[j>>2]=(k[(k[o>>2]|0)+40>>2]|0)+(k[C>>2]|0);k[j+4>>2]=u;mta(59902,j)|0}k[C>>2]=(k[C>>2]|0)+1}}else k[(k[n>>2]|0)+49656>>2]=0;while(0);if((k[(k[o>>2]|0)+28>>2]|0)==0?(k[k[o>>2]>>2]|0)!=0:0){r=f;return}if(k[(k[o>>2]|0)+116>>2]|0)mta(60070,g)|0;Mf(k[n>>2]|0,k[o>>2]|0);r=f;return}function Of(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0;c=r;r=r+64|0;d=c+60|0;e=c+56|0;f=c+48|0;g=c+40|0;h=c+32|0;i=c+24|0;j=c+20|0;l=c+16|0;m=c+12|0;n=c+8|0;o=c+4|0;k[d>>2]=a;k[e>>2]=b;if(k[(k[e>>2]|0)+116>>2]|0)mta(60110,c)|0;k[f>>2]=k[(k[d>>2]|0)+49768>>2];k[f+4>>2]=0;k[n>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[f+4>>2]=k[n>>2]&3;k[f>>2]=k[n>>2]^k[f+4>>2];k[h>>2]=k[f>>2];k[h+4>>2]=k[f+4>>2];do{do if(!(k[(k[f>>2]|0)+24>>2]&2)){k[o>>2]=k[(k[f>>2]|0)+(6+(k[f+4>>2]|0)<<2)>>2];k[i+4>>2]=k[o>>2]&1;k[i>>2]=k[o>>2]&-4;if((k[i>>2]|0)==(k[(k[d>>2]|0)+49776>>2]|0)){if(k[(k[f>>2]|0)+24>>2]&2)break;k[(k[f>>2]|0)+24>>2]=k[(k[f>>2]|0)+24>>2]|2;e=ke((k[d>>2]|0)+168|0)|0;k[j>>2]=e;k[k[j>>2]>>2]=k[f>>2];break}if(!(k[(k[i>>2]|0)+32>>2]|0)){k[(k[i>>2]|0)+32>>2]=1;k[l>>2]=k[(k[f>>2]|0)+((k[27620+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2];k[m>>2]=k[(k[f>>2]|0)+((k[27632+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2];if(!(k[(k[l>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[l>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]=1;if(!(k[(k[m>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[m>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]=1}}while(0);k[f+4>>2]=k[27620+(k[f+4>>2]<<2)>>2];k[n>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[g+4>>2]=k[n>>2]&3;k[g>>2]=k[n>>2]^k[g+4>>2];k[g+4>>2]=k[27620+(k[g+4>>2]<<2)>>2];while(1){if((k[g>>2]|0)==(k[(k[d>>2]|0)+49768>>2]|0))break;k[f>>2]=k[g>>2];k[f+4>>2]=k[g+4>>2];k[n>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[g+4>>2]=k[n>>2]&3;k[g>>2]=k[n>>2]^k[g+4>>2];k[g+4>>2]=k[27620+(k[g+4>>2]<<2)>>2]}if((k[f>>2]|0)==(k[h>>2]|0))p=(k[f+4>>2]|0)==(k[h+4>>2]|0);else p=0}while(p^1);r=c;return}function Pf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+208|0;d=c+112|0;e=c+104|0;f=c+56|0;g=c+8|0;h=c+204|0;i=c+200|0;j=c+192|0;l=c+184|0;m=c+180|0;n=c+176|0;o=c+168|0;q=c+160|0;s=c+156|0;t=c+152|0;u=c+148|0;v=c+144|0;w=c+140|0;x=c+136|0;y=c+132|0;z=c+128|0;k[h>>2]=a;k[i>>2]=b;if(k[(k[i>>2]|0)+116>>2]|0)mta(60171,c)|0;me((k[h>>2]|0)+168|0);b=ne((k[h>>2]|0)+168|0)|0;k[m>>2]=b;while(1){if(!(k[m>>2]|0))break;k[j>>2]=k[k[m>>2]>>2];k[(k[j>>2]|0)+24>>2]=k[(k[j>>2]|0)+24>>2]&-3;if((k[(k[i>>2]|0)+116>>2]|0)>2){k[j+4>>2]=0;k[u>>2]=k[(k[j>>2]|0)+((k[27620+(k[j+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[j>>2]|0)+((k[27632+(k[j+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[j>>2]|0)+((k[j+4>>2]|0)+3<<2)>>2];A=+p[(k[u>>2]|0)+8>>3];B=+p[k[v>>2]>>3];C=+p[(k[v>>2]|0)+8>>3];D=+p[k[w>>2]>>3];E=+p[(k[w>>2]|0)+8>>3];p[g>>3]=+p[k[u>>2]>>3];p[g+8>>3]=A;p[g+16>>3]=B;p[g+24>>3]=C;p[g+32>>3]=D;p[g+40>>3]=E;mta(60213,g)|0}k[j+4>>2]=0;while(1){if((k[j+4>>2]|0)>=3)break;k[y>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];k[z>>2]=k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2];k[o+4>>2]=k[z>>2]&1;k[o>>2]=k[z>>2]&-4;do if((k[l>>2]|0)!=(k[(k[h>>2]|0)+49768>>2]|0)?(k[(k[l>>2]|0)+24>>2]&2|0)==0:0){if((k[o>>2]|0)==(k[(k[h>>2]|0)+49776>>2]|0)){if((k[(k[i>>2]|0)+116>>2]|0)>2){k[u>>2]=k[(k[l>>2]|0)+((k[27620+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[l>>2]|0)+((k[27632+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[l>>2]|0)+((k[l+4>>2]|0)+3<<2)>>2];E=+p[(k[u>>2]|0)+8>>3];D=+p[k[v>>2]>>3];C=+p[(k[v>>2]|0)+8>>3];B=+p[k[w>>2]>>3];A=+p[(k[w>>2]|0)+8>>3];p[f>>3]=+p[k[u>>2]>>3];p[f+8>>3]=E;p[f+16>>3]=D;p[f+24>>3]=C;p[f+32>>3]=B;p[f+40>>3]=A;mta(60272,f)|0}k[(k[l>>2]|0)+24>>2]=k[(k[l>>2]|0)+24>>2]|2;b=ke((k[h>>2]|0)+168|0)|0;k[n>>2]=b;k[k[n>>2]>>2]=k[l>>2];break}k[(k[o>>2]|0)+(6+(k[o+4>>2]|0)<<2)>>2]=k[(k[h>>2]|0)+49768>>2];if(!(k[(k[o>>2]|0)+32>>2]|0))k[(k[o>>2]|0)+32>>2]=1;k[s>>2]=k[(k[l>>2]|0)+((k[27620+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2];k[t>>2]=k[(k[l>>2]|0)+((k[27632+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2];if(!(k[(k[s>>2]|0)+(k[(k[h>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[s>>2]|0)+(k[(k[h>>2]|0)+49696>>2]<<2)>>2]=1;if(!(k[(k[t>>2]|0)+(k[(k[h>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[t>>2]|0)+(k[(k[h>>2]|0)+49696>>2]<<2)>>2]=1}else F=11;while(0);if(((F|0)==11?(F=0,(k[o>>2]|0)!=(k[(k[h>>2]|0)+49776>>2]|0)):0)?(te(k[h>>2]|0,k[o>>2]|0),(k[l>>2]|0)!=(k[(k[h>>2]|0)+49768>>2]|0)):0){k[(k[l>>2]|0)+24>>2]=k[(k[l>>2]|0)+24>>2]&-3;k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[(k[h>>2]|0)+49776>>2];k[(k[l>>2]|0)+24>>2]=k[(k[l>>2]|0)+24>>2]|2}b=j+4|0;k[b>>2]=(k[b>>2]|0)+1}k[(k[j>>2]|0)+24>>2]=k[(k[j>>2]|0)+24>>2]|2;b=ne((k[h>>2]|0)+168|0)|0;k[m>>2]=b}if(k[(k[i>>2]|0)+116>>2]|0)mta(60330,e)|0;me((k[h>>2]|0)+168|0);e=ne((k[h>>2]|0)+168|0)|0;k[m>>2]=e;while(1){if(!(k[m>>2]|0))break;k[j>>2]=k[k[m>>2]>>2];k[j+4>>2]=0;while(1){G=j+4|0;if((k[j+4>>2]|0)>=3)break;k[q>>2]=k[(k[j>>2]|0)+((k[27620+(k[G>>2]<<2)>>2]|0)+3<<2)>>2];if(k[q>>2]|0){k[x>>2]=1;k[(k[j>>2]|0)+((k[27620+(k[j+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;k[l>>2]=k[j>>2];k[l+4>>2]=k[27632+(k[j+4>>2]<<2)>>2];k[y>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];while(1){if((k[l>>2]|0)!=(k[(k[h>>2]|0)+49768>>2]|0)){if((k[l>>2]|0)==(k[j>>2]|0))H=(k[l+4>>2]|0)==(k[j+4>>2]|0);else H=0;I=H^1}else I=0;J=k[l>>2]|0;if(!I)break;if(k[J+24>>2]&2)k[(k[l>>2]|0)+((k[27620+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;else k[x>>2]=0;k[l+4>>2]=k[27632+(k[l+4>>2]<<2)>>2];k[y>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2]}a:do if((J|0)==(k[(k[h>>2]|0)+49768>>2]|0)){k[y>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];k[l+4>>2]=k[27620+(k[l+4>>2]<<2)>>2];while(1){if((k[l>>2]|0)==(k[(k[h>>2]|0)+49768>>2]|0))break a;if(k[(k[l>>2]|0)+24>>2]&2)k[(k[l>>2]|0)+((k[27620+(k[l+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;else k[x>>2]=0;k[y>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];k[l+4>>2]=k[27620+(k[l+4>>2]<<2)>>2]}}while(0);if(k[x>>2]|0){if((k[(k[i>>2]|0)+116>>2]|0)>1){A=+p[(k[q>>2]|0)+8>>3];p[d>>3]=+p[k[q>>2]>>3];p[d+8>>3]=A;mta(60360,d)|0}k[(k[q>>2]|0)+((k[(k[h>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32767;e=(k[h>>2]|0)+49668|0;k[e>>2]=(k[e>>2]|0)+1}}e=j+4|0;k[e>>2]=(k[e>>2]|0)+1}k[G>>2]=0;while(1){if((k[j+4>>2]|0)>=3)break;k[y>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];e=k[h>>2]|0;if((k[l>>2]|0)==(k[(k[h>>2]|0)+49768>>2]|0)){o=e+49688|0;k[o>>2]=(k[o>>2]|0)+-1}else{k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[e+49768>>2];e=(k[h>>2]|0)+49688|0;k[e>>2]=(k[e>>2]|0)+1}e=j+4|0;k[e>>2]=(k[e>>2]|0)+1}re(k[h>>2]|0,k[j>>2]|0);e=ne((k[h>>2]|0)+168|0)|0;k[m>>2]=e}he((k[h>>2]|0)+168|0);r=c;return}function Qf(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0;e=r;r=r+192|0;f=e+120|0;g=e+72|0;h=e+24|0;i=e+180|0;j=e+176|0;l=e+8|0;m=e;n=e+168|0;o=e+160|0;q=e+156|0;s=e+152|0;t=e+144|0;u=e+140|0;v=e+136|0;w=e+132|0;x=e+128|0;y=e+124|0;k[i>>2]=a;k[j>>2]=b;p[l>>3]=c;p[m>>3]=d;if((k[(k[j>>2]|0)+116>>2]|0)>1)mta(60171,e+16|0)|0;me((k[i>>2]|0)+168|0);b=ne((k[i>>2]|0)+168|0)|0;k[q>>2]=b;while(1){if(!(k[q>>2]|0))break;k[n>>2]=k[k[q>>2]>>2];k[(k[n>>2]|0)+24>>2]=k[(k[n>>2]|0)+24>>2]&-3;if(k[(k[j>>2]|0)+24>>2]|0)p[(k[n>>2]|0)+((k[(k[i>>2]|0)+49708>>2]|0)+(k[(k[i>>2]|0)+49684>>2]|0)<<3)>>3]=+p[l>>3];if(k[(k[j>>2]|0)+12>>2]|0)p[(k[n>>2]|0)+(k[(k[i>>2]|0)+49712>>2]<<3)>>3]=+p[m>>3];if((k[(k[j>>2]|0)+116>>2]|0)>2){k[n+4>>2]=0;k[u>>2]=k[(k[n>>2]|0)+((k[27620+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[n>>2]|0)+((k[27632+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[n>>2]|0)+((k[n+4>>2]|0)+3<<2)>>2];d=+p[(k[u>>2]|0)+8>>3];c=+p[k[v>>2]>>3];z=+p[(k[v>>2]|0)+8>>3];A=+p[k[w>>2]>>3];B=+p[(k[w>>2]|0)+8>>3];p[h>>3]=+p[k[u>>2]>>3];p[h+8>>3]=d;p[h+16>>3]=c;p[h+24>>3]=z;p[h+32>>3]=A;p[h+40>>3]=B;mta(60213,h)|0}k[n+4>>2]=0;while(1){if((k[n+4>>2]|0)>=3)break;k[x>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[o+4>>2]=k[x>>2]&3;k[o>>2]=k[x>>2]^k[o+4>>2];k[y>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[t+4>>2]=k[y>>2]&1;k[t>>2]=k[y>>2]&-4;if(((k[o>>2]|0)!=(k[(k[i>>2]|0)+49768>>2]|0)?(k[(k[o>>2]|0)+24>>2]&2|0)==0:0)?(k[t>>2]|0)==(k[(k[i>>2]|0)+49776>>2]|0):0){if((k[(k[j>>2]|0)+116>>2]|0)>2){k[u>>2]=k[(k[o>>2]|0)+((k[27620+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[o>>2]|0)+((k[27632+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2];B=+p[(k[u>>2]|0)+8>>3];A=+p[k[v>>2]>>3];z=+p[(k[v>>2]|0)+8>>3];c=+p[k[w>>2]>>3];d=+p[(k[w>>2]|0)+8>>3];p[g>>3]=+p[k[u>>2]>>3];p[g+8>>3]=B;p[g+16>>3]=A;p[g+24>>3]=z;p[g+32>>3]=c;p[g+40>>3]=d;mta(60272,g)|0}k[(k[o>>2]|0)+24>>2]=k[(k[o>>2]|0)+24>>2]|2;b=ke((k[i>>2]|0)+168|0)|0;k[s>>2]=b;k[k[s>>2]>>2]=k[o>>2]}b=n+4|0;k[b>>2]=(k[b>>2]|0)+1}k[(k[n>>2]|0)+24>>2]=k[(k[n>>2]|0)+24>>2]|2;b=ne((k[i>>2]|0)+168|0)|0;k[q>>2]=b}if((k[(k[j>>2]|0)+116>>2]|0)>1)mta(60396,f)|0;me((k[i>>2]|0)+168|0);f=ne((k[i>>2]|0)+168|0)|0;k[q>>2]=f;while(1){if(!(k[q>>2]|0))break;k[n>>2]=k[k[q>>2]>>2];k[(k[n>>2]|0)+24>>2]=k[(k[n>>2]|0)+24>>2]&-3;f=ne((k[i>>2]|0)+168|0)|0;k[q>>2]=f}he((k[i>>2]|0)+168|0);r=e;return}function Rf(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=r;r=r+112|0;h=g+32|0;i=g+24|0;j=g+16|0;l=g+8|0;m=g;n=g+108|0;o=g+104|0;q=g+100|0;s=g+96|0;t=g+92|0;u=g+88|0;v=g+80|0;w=g+72|0;x=g+64|0;y=g+60|0;z=g+56|0;A=g+52|0;B=g+48|0;C=g+44|0;D=g+40|0;E=g+36|0;k[n>>2]=a;k[o>>2]=b;k[q>>2]=c;k[s>>2]=d;k[t>>2]=e;k[u>>2]=f;do if(!(k[(k[o>>2]|0)+112>>2]|0)){if((k[(k[o>>2]|0)+80>>2]|0)!=0?(k[(k[o>>2]|0)+28>>2]|0)!=0:0)break;mta(60427,m)|0;if((k[s>>2]|0)>0?(k[(k[o>>2]|0)+116>>2]|0)!=0:0)mta(60457,l)|0}while(0);if((k[u>>2]|0)>0){l=ae(k[u>>2]<<3)|0;k[x>>2]=l}else k[x>>2]=0;if((k[s>>2]|0)>0?(k[(k[o>>2]|0)+80>>2]|0)==0:0)F=12;else F=11;if((F|0)==11?((k[u>>2]|0)>0?1:(k[(k[o>>2]|0)+28>>2]|0)==0):0)F=12;if((F|0)==12)ie((k[n>>2]|0)+168|0,4,1020,1020,0);if(!(k[(k[o>>2]|0)+28>>2]|0))Of(k[n>>2]|0,k[o>>2]|0);a:do if((k[s>>2]|0)>0?(k[(k[o>>2]|0)+80>>2]|0)==0:0){k[D>>2]=0;while(1){if((k[D>>2]|0)>=(k[s>>2]<<1|0))break a;if((((((+p[(k[q>>2]|0)+(k[D>>2]<<3)>>3]>=+p[(k[n>>2]|0)+49608>>3]?+p[(k[q>>2]|0)+(k[D>>2]<<3)>>3]<=+p[(k[n>>2]|0)+49616>>3]:0)?+p[(k[q>>2]|0)+((k[D>>2]|0)+1<<3)>>3]>=+p[(k[n>>2]|0)+49624>>3]:0)?+p[(k[q>>2]|0)+((k[D>>2]|0)+1<<3)>>3]<=+p[(k[n>>2]|0)+49632>>3]:0)?(k[v>>2]=k[(k[n>>2]|0)+49768>>2],k[v+4>>2]=0,k[E>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2],k[v+4>>2]=k[E>>2]&3,k[v>>2]=k[E>>2]^k[v+4>>2],k[A>>2]=k[(k[v>>2]|0)+((k[27620+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2],k[B>>2]=k[(k[v>>2]|0)+((k[27632+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2],+Ie(k[n>>2]|0,k[o>>2]|0,k[A>>2]|0,k[B>>2]|0,(k[q>>2]|0)+(k[D>>2]<<3)|0)>0.0):0)?(l=_e(k[n>>2]|0,k[o>>2]|0,(k[q>>2]|0)+(k[D>>2]<<3)|0,v)|0,k[C>>2]=l,(k[C>>2]|0)!=3):0)?(k[(k[v>>2]|0)+24>>2]&2|0)==0:0){k[(k[v>>2]|0)+24>>2]=k[(k[v>>2]|0)+24>>2]|2;l=ke((k[n>>2]|0)+168|0)|0;k[y>>2]=l;k[k[y>>2]>>2]=k[v>>2]}k[D>>2]=(k[D>>2]|0)+2}}while(0);b:do if((k[u>>2]|0)>0){k[D>>2]=0;while(1){if((k[D>>2]|0)>=(k[u>>2]|0))break b;k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]=k[(k[n>>2]|0)+49768>>2];if((((((+p[(k[t>>2]|0)+(k[D>>2]<<2<<3)>>3]>=+p[(k[n>>2]|0)+49608>>3]?+p[(k[t>>2]|0)+(k[D>>2]<<2<<3)>>3]<=+p[(k[n>>2]|0)+49616>>3]:0)?+p[(k[t>>2]|0)+((k[D>>2]<<2)+1<<3)>>3]>=+p[(k[n>>2]|0)+49624>>3]:0)?+p[(k[t>>2]|0)+((k[D>>2]<<2)+1<<3)>>3]<=+p[(k[n>>2]|0)+49632>>3]:0)?(k[v>>2]=k[(k[n>>2]|0)+49768>>2],k[v+4>>2]=0,k[E>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2],k[v+4>>2]=k[E>>2]&3,k[v>>2]=k[E>>2]^k[v+4>>2],k[A>>2]=k[(k[v>>2]|0)+((k[27620+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2],k[B>>2]=k[(k[v>>2]|0)+((k[27632+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2],+Ie(k[n>>2]|0,k[o>>2]|0,k[A>>2]|0,k[B>>2]|0,(k[t>>2]|0)+(k[D>>2]<<2<<3)|0)>0.0):0)?(y=_e(k[n>>2]|0,k[o>>2]|0,(k[t>>2]|0)+(k[D>>2]<<2<<3)|0,v)|0,k[C>>2]=y,(k[C>>2]|0)!=3):0)?(k[(k[v>>2]|0)+24>>2]&2|0)==0:0){k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]=k[v>>2];k[(k[x>>2]|0)+(k[D>>2]<<3)+4>>2]=k[v+4>>2]}k[D>>2]=(k[D>>2]|0)+1}}while(0);if((k[(k[n>>2]|0)+168+40>>2]|0)>0)Pf(k[n>>2]|0,k[o>>2]|0);if((k[u>>2]|0)>0){do if(!(k[(k[o>>2]|0)+112>>2]|0)){if(!(k[(k[o>>2]|0)+24>>2]|0)){mta(60576,h)|0;break}if(k[(k[o>>2]|0)+12>>2]|0){mta(60491,j)|0;break}else{mta(60544,i)|0;break}}while(0);c:do if((k[(k[o>>2]|0)+24>>2]|0)!=0?(k[(k[o>>2]|0)+4>>2]|0)==0:0){me(k[n>>2]|0);k[w+4>>2]=0;i=se(k[n>>2]|0)|0;k[w>>2]=i;while(1){if(!(k[w>>2]|0))break c;p[(k[w>>2]|0)+((k[(k[n>>2]|0)+49708>>2]|0)+(k[(k[n>>2]|0)+49684>>2]|0)<<3)>>3]=0.0;i=se(k[n>>2]|0)|0;k[w>>2]=i}}while(0);k[D>>2]=0;while(1){if((k[D>>2]|0)>=(k[u>>2]|0))break;if((k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]|0)!=(k[(k[n>>2]|0)+49768>>2]|0)?(k[(k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]|0)+4>>2]|0)!=0:0){k[(k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]|0)+24>>2]=k[(k[(k[x>>2]|0)+(k[D>>2]<<3)>>2]|0)+24>>2]|2;w=ke((k[n>>2]|0)+168|0)|0;k[z>>2]=w;k[k[z>>2]>>2]=k[(k[x>>2]|0)+(k[D>>2]<<3)>>2];Qf(k[n>>2]|0,k[o>>2]|0,+p[(k[t>>2]|0)+((k[D>>2]<<2)+2<<3)>>3],+p[(k[t>>2]|0)+((k[D>>2]<<2)+3<<3)>>3])}k[D>>2]=(k[D>>2]|0)+1}if((k[(k[o>>2]|0)+24>>2]|0)!=0?(k[(k[o>>2]|0)+4>>2]|0)==0:0){D=(k[n>>2]|0)+49684|0;k[D>>2]=(k[D>>2]|0)+1}}if((k[s>>2]|0)>0?(k[(k[o>>2]|0)+80>>2]|0)==0:0)F=66;else F=65;if((F|0)==65?((k[u>>2]|0)>0?1:(k[(k[o>>2]|0)+28>>2]|0)==0):0)F=66;if((F|0)==66)je((k[n>>2]|0)+168|0);if((k[u>>2]|0)<=0){r=g;return}be(k[x>>2]|0);r=g;return}function Sf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+8|0;g=c;k[d>>2]=a;k[e>>2]=b;me((k[d>>2]|0)+56|0);k[f+4>>2]=0;b=ue(k[d>>2]|0)|0;k[f>>2]=b;while(1){if(!(k[f>>2]|0))break;b=We(k[d>>2]|0,k[e>>2]|0,f)|0;k[g>>2]=b;b=ue(k[d>>2]|0)|0;k[f>>2]=b}r=c;return}function Tf(){var a=0;a=r;r=r+16|0;mta(60614,a)|0;mta(60677,a+8|0)|0;r=a;return}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0;d=r;r=r+256|0;e=d+136|0;f=d+128|0;g=d+120|0;h=d+112|0;i=d+104|0;j=d+88|0;l=d+40|0;m=d+240|0;n=d+236|0;o=d+232|0;q=d+224|0;s=d+216|0;t=d+208|0;u=d+200|0;v=d+192|0;w=d+188|0;x=d+184|0;y=d+180|0;z=d+176|0;A=d+172|0;B=d+32|0;C=d+24|0;D=d+16|0;E=d+8|0;F=d;G=d+168|0;H=d+164|0;I=d+160|0;J=d+156|0;K=d+152|0;L=d+148|0;M=d+144|0;N=d+140|0;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;a:while(1){if((k[(k[m>>2]|0)+224+40>>2]|0)<=0){O=50;break}if(!(k[(k[m>>2]|0)+49692>>2]|0)){O=50;break}me((k[m>>2]|0)+224|0);c=ye(k[m>>2]|0)|0;k[v>>2]=c;while(1){if(!(k[v>>2]|0))continue a;if(!(k[(k[m>>2]|0)+49692>>2]|0))continue a;k[u+4>>2]=k[k[v>>2]>>2]&1;k[u>>2]=k[k[v>>2]>>2]&-4;k[w>>2]=k[(k[u>>2]|0)+(2+(k[u+4>>2]|0)<<2)>>2];k[x>>2]=k[(k[u>>2]|0)+(3-(k[u+4>>2]|0)<<2)>>2];if(((k[(k[u>>2]|0)+4>>2]|0)!=0?(k[w>>2]|0)==(k[(k[v>>2]|0)+4>>2]|0):0)?(k[x>>2]|0)==(k[(k[v>>2]|0)+8>>2]|0):0){k[M>>2]=k[(k[u>>2]|0)+(6+(k[u+4>>2]|0)<<2)>>2];k[q+4>>2]=k[M>>2]&3;k[q>>2]=k[M>>2]^k[q+4>>2];k[s>>2]=k[q>>2];k[s+4>>2]=k[27620+(k[q+4>>2]<<2)>>2];k[N>>2]=k[(k[s>>2]|0)+(6+(k[s+4>>2]|0)<<2)>>2];k[t+4>>2]=k[N>>2]&1;k[t>>2]=k[N>>2]&-4;k[G>>2]=(k[t>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0)&1;k[s+4>>2]=k[27620+(k[s+4>>2]<<2)>>2];k[N>>2]=k[(k[s>>2]|0)+(6+(k[s+4>>2]|0)<<2)>>2];k[t+4>>2]=k[N>>2]&1;k[t>>2]=k[N>>2]&-4;k[I>>2]=(k[t>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0)&1;b:do if(!(((k[G>>2]|0)!=0?1:(k[(k[n>>2]|0)+88>>2]|0)!=0)|(k[I>>2]|0)!=0)){k[y>>2]=k[(k[q>>2]|0)+((k[q+4>>2]|0)+3<<2)>>2];while(1){if((k[(k[y>>2]|0)+((k[(k[m>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)!=2)break b;if(!((+p[k[w>>2]>>3]-+p[k[y>>2]>>3])*(+p[k[x>>2]>>3]-+p[k[y>>2]>>3])+(+p[(k[w>>2]|0)+8>>3]-+p[(k[y>>2]|0)+8>>3])*(+p[(k[x>>2]|0)+8>>3]-+p[(k[y>>2]|0)+8>>3])<0.0))break b;ef(k[m>>2]|0,k[n>>2]|0,s);k[M>>2]=k[(k[u>>2]|0)+(6+(k[u+4>>2]|0)<<2)>>2];k[q+4>>2]=k[M>>2]&3;k[q>>2]=k[M>>2]^k[q+4>>2];k[y>>2]=k[(k[q>>2]|0)+((k[q+4>>2]|0)+3<<2)>>2];k[s>>2]=k[q>>2];k[s+4>>2]=k[27632+(k[q+4>>2]<<2)>>2]}}while(0);k[M>>2]=k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2];k[s+4>>2]=k[M>>2]&3;k[s>>2]=k[M>>2]^k[s+4>>2];c:do if((k[s>>2]|0)!=(k[(k[m>>2]|0)+49768>>2]|0)?(k[s+4>>2]=k[27620+(k[s+4>>2]<<2)>>2],k[N>>2]=k[(k[s>>2]|0)+(6+(k[s+4>>2]|0)<<2)>>2],k[t+4>>2]=k[N>>2]&1,k[t>>2]=k[N>>2]&-4,k[J>>2]=(k[t>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0)&1,k[I>>2]=((k[I>>2]|0)!=0?1:(k[J>>2]|0)!=0)&1,k[s+4>>2]=k[27620+(k[s+4>>2]<<2)>>2],k[N>>2]=k[(k[s>>2]|0)+(6+(k[s+4>>2]|0)<<2)>>2],k[t+4>>2]=k[N>>2]&1,k[t>>2]=k[N>>2]&-4,k[H>>2]=(k[t>>2]|0)!=(k[(k[m>>2]|0)+49776>>2]|0)&1,k[G>>2]=((k[G>>2]|0)!=0?1:(k[H>>2]|0)!=0)&1,!(((k[H>>2]|0)!=0?1:(k[(k[n>>2]|0)+88>>2]|0)!=0)|(k[J>>2]|0)!=0)):0){k[y>>2]=k[(k[s>>2]|0)+((k[27620+(k[s+4>>2]<<2)>>2]|0)+3<<2)>>2];while(1){if((k[(k[y>>2]|0)+((k[(k[m>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)!=2)break c;if(!((+p[k[w>>2]>>3]-+p[k[y>>2]>>3])*(+p[k[x>>2]>>3]-+p[k[y>>2]>>3])+(+p[(k[w>>2]|0)+8>>3]-+p[(k[y>>2]|0)+8>>3])*(+p[(k[x>>2]|0)+8>>3]-+p[(k[y>>2]|0)+8>>3])<0.0))break c;ef(k[m>>2]|0,k[n>>2]|0,s);k[M>>2]=k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2];k[s+4>>2]=k[M>>2]&3;k[s>>2]=k[M>>2]^k[s+4>>2];k[y>>2]=k[(k[s>>2]|0)+((k[s+4>>2]|0)+3<<2)>>2];k[s+4>>2]=k[27632+(k[s+4>>2]<<2)>>2]}}while(0);if((k[G>>2]|0)!=0|(k[I>>2]|0)!=0){P=+aa(+((+p[k[x>>2]>>3]-+p[k[w>>2]>>3])*(+p[k[x>>2]>>3]-+p[k[w>>2]>>3])+(+p[(k[x>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3])*(+p[(k[x>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3])));p[B>>3]=P;p[C>>3]=1.0;while(1){if(!(+p[B>>3]>+p[C>>3]*3.0))break;p[C>>3]=+p[C>>3]*2.0}while(1){Q=+p[C>>3];if(!(+p[B>>3]<+p[C>>3]*1.5))break;p[C>>3]=Q*.5}p[D>>3]=Q/+p[B>>3];if(k[I>>2]|0)p[D>>3]=1.0-+p[D>>3]}else p[D>>3]=.5;c=ke((k[m>>2]|0)+112|0)|0;k[z>>2]=c;k[L>>2]=0;while(1){if((k[L>>2]|0)>=(2+(k[(k[m>>2]|0)+49680>>2]|0)|0))break;p[(k[z>>2]|0)+(k[L>>2]<<3)>>3]=+p[(k[w>>2]|0)+(k[L>>2]<<3)>>3]+ +p[D>>3]*(+p[(k[x>>2]|0)+(k[L>>2]<<3)>>3]-+p[(k[w>>2]|0)+(k[L>>2]<<3)>>3]);k[L>>2]=(k[L>>2]|0)+1}if(((k[(k[n>>2]|0)+84>>2]|0)==0?(P=+Ie(k[m>>2]|0,k[n>>2]|0,k[w>>2]|0,k[x>>2]|0,k[z>>2]|0),p[E>>3]=P,p[F>>3]=(+p[k[w>>2]>>3]-+p[k[x>>2]>>3])*(+p[k[w>>2]>>3]-+p[k[x>>2]>>3])+(+p[(k[w>>2]|0)+8>>3]-+p[(k[x>>2]|0)+8>>3])*(+p[(k[w>>2]|0)+8>>3]-+p[(k[x>>2]|0)+8>>3]),+p[E>>3]!=0.0&+p[F>>3]!=0.0):0)?(p[E>>3]=+p[E>>3]/+p[F>>3],+p[E>>3]==+p[E>>3]):0){c=k[z>>2]|0;p[c>>3]=+p[c>>3]+ +p[E>>3]*(+p[(k[x>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3]);c=(k[z>>2]|0)+8|0;p[c>>3]=+p[c>>3]+ +p[E>>3]*(+p[k[w>>2]>>3]-+p[k[x>>2]>>3])}k[(k[z>>2]|0)+(k[(k[m>>2]|0)+49696>>2]<<2)>>2]=k[(k[u>>2]|0)+32>>2];k[(k[z>>2]|0)+((k[(k[m>>2]|0)+49696>>2]|0)+1<<2)>>2]=1;if((k[(k[n>>2]|0)+116>>2]|0)>1){P=+p[(k[w>>2]|0)+8>>3];R=+p[k[x>>2]>>3];S=+p[(k[x>>2]|0)+8>>3];T=+p[k[z>>2]>>3];U=+p[(k[z>>2]|0)+8>>3];p[l>>3]=+p[k[w>>2]>>3];p[l+8>>3]=P;p[l+16>>3]=R;p[l+24>>3]=S;p[l+32>>3]=T;p[l+40>>3]=U;mta(59238,l)|0}if(+p[k[z>>2]>>3]==+p[k[w>>2]>>3]?+p[(k[z>>2]|0)+8>>3]==+p[(k[w>>2]|0)+8>>3]:0)O=43;else O=41;if(((O|0)==41?(O=0,+p[k[z>>2]>>3]==+p[k[x>>2]>>3]):0)?+p[(k[z>>2]|0)+8>>3]==+p[(k[x>>2]|0)+8>>3]:0)O=43;if((O|0)==43){O=0;U=+p[(k[z>>2]|0)+8>>3];p[j>>3]=+p[k[z>>2]>>3];p[j+8>>3]=U;mta(60736,j)|0;mta(60785,i)|0;mta(60840,h)|0;mta(60890,g)|0;Tf();$d(1)}c=cf(k[m>>2]|0,k[n>>2]|0,k[z>>2]|0,q,u,1,k[o>>2]|0)|0;k[A>>2]=c;if((k[A>>2]|0)!=0&(k[A>>2]|0)!=1){mta(60920,f)|0;mta(59353,e)|0;ce()}if((k[(k[m>>2]|0)+49692>>2]|0)>0){c=(k[m>>2]|0)+49692|0;k[c>>2]=(k[c>>2]|0)+-1}c=We(k[m>>2]|0,k[n>>2]|0,u)|0;k[K>>2]=c;k[N>>2]=k[(k[u>>2]|0)+(1-(k[u+4>>2]|0)<<2)>>2];k[u+4>>2]=k[N>>2]&1;k[u>>2]=k[N>>2]&-4;c=We(k[m>>2]|0,k[n>>2]|0,u)|0;k[K>>2]=c}xe(k[m>>2]|0,k[v>>2]|0);c=ye(k[m>>2]|0)|0;k[v>>2]=c}}if((O|0)==50){r=d;return}}function Vf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+8|0;k[d>>2]=a;k[e>>2]=b;if(k[(k[e>>2]|0)+116>>2]|0)mta(60955,c)|0;me(k[d>>2]|0);k[f+4>>2]=0;b=se(k[d>>2]|0)|0;k[f>>2]=b;while(1){if(!(k[f>>2]|0))break;Xe(k[d>>2]|0,k[e>>2]|0,f);b=se(k[d>>2]|0)|0;k[f>>2]=b}r=c;return}function Wf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0;d=r;r=r+256|0;e=d+200|0;f=d+192|0;g=d+184|0;h=d+176|0;i=d+128|0;j=d+120|0;l=d+104|0;m=d+88|0;n=d+72|0;o=d+24|0;q=d+248|0;s=d+244|0;t=d+240|0;u=d+232|0;v=d+228|0;w=d+224|0;x=d+220|0;y=d+216|0;z=d+8|0;A=d;B=d+212|0;C=d+208|0;D=d+204|0;k[q>>2]=a;k[s>>2]=b;k[t>>2]=c;k[u+4>>2]=k[k[t>>2]>>2]&3;k[u>>2]=k[k[t>>2]>>2]^k[u+4>>2];k[v>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[u>>2]|0)+((k[27632+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];k[x>>2]=k[(k[u>>2]|0)+((k[u+4>>2]|0)+3<<2)>>2];if(!(k[(k[u>>2]|0)+4>>2]|0)){r=d;return}if((k[v>>2]|0)!=(k[(k[t>>2]|0)+16>>2]|0)){r=d;return}if((k[w>>2]|0)!=(k[(k[t>>2]|0)+20>>2]|0)){r=d;return}if((k[x>>2]|0)!=(k[(k[t>>2]|0)+24>>2]|0)){r=d;return}if((k[(k[s>>2]|0)+116>>2]|0)>1){mta(60990,d+16|0)|0;E=+p[(k[v>>2]|0)+8>>3];F=+p[k[w>>2]>>3];G=+p[(k[w>>2]|0)+8>>3];H=+p[k[x>>2]>>3];I=+p[(k[x>>2]|0)+8>>3];p[o>>3]=+p[k[v>>2]>>3];p[o+8>>3]=E;p[o+16>>3]=F;p[o+24>>3]=G;p[o+32>>3]=H;p[o+40>>3]=I;mta(57292,o)|0}k[C>>2]=0;o=ke((k[q>>2]|0)+112|0)|0;k[y>>2]=o;Oe(k[q>>2]|0,k[s>>2]|0,k[v>>2]|0,k[w>>2]|0,k[x>>2]|0,k[y>>2]|0,z,A,1);if(+p[k[y>>2]>>3]==+p[k[v>>2]>>3]?+p[(k[y>>2]|0)+8>>3]==+p[(k[v>>2]|0)+8>>3]:0)J=13;else J=9;do if((J|0)==9){if(+p[k[y>>2]>>3]==+p[k[w>>2]>>3]?+p[(k[y>>2]|0)+8>>3]==+p[(k[w>>2]|0)+8>>3]:0){J=13;break}if(+p[k[y>>2]>>3]==+p[k[x>>2]>>3]?+p[(k[y>>2]|0)+8>>3]==+p[(k[x>>2]|0)+8>>3]:0){J=13;break}k[D>>2]=2;while(1){if((k[D>>2]|0)>=(2+(k[(k[q>>2]|0)+49680>>2]|0)|0))break;p[(k[y>>2]|0)+(k[D>>2]<<3)>>3]=+p[(k[v>>2]|0)+(k[D>>2]<<3)>>3]+ +p[z>>3]*(+p[(k[w>>2]|0)+(k[D>>2]<<3)>>3]-+p[(k[v>>2]|0)+(k[D>>2]<<3)>>3])+ +p[A>>3]*(+p[(k[x>>2]|0)+(k[D>>2]<<3)>>3]-+p[(k[v>>2]|0)+(k[D>>2]<<3)>>3]);k[D>>2]=(k[D>>2]|0)+1}k[(k[y>>2]|0)+(k[(k[q>>2]|0)+49696>>2]<<2)>>2]=0;k[(k[y>>2]|0)+((k[(k[q>>2]|0)+49696>>2]|0)+1<<2)>>2]=2;if(+p[A>>3]<+p[z>>3])k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];o=cf(k[q>>2]|0,k[s>>2]|0,k[y>>2]|0,u,0,1,1)|0;k[B>>2]=o;if(!(k[B>>2]|0)){if((k[(k[q>>2]|0)+49692>>2]|0)<=0)break;o=(k[q>>2]|0)+49692|0;k[o>>2]=(k[o>>2]|0)+-1;break}if((k[B>>2]|0)==1){ff(k[q>>2]|0,k[s>>2]|0);if((k[(k[s>>2]|0)+116>>2]|0)>1){I=+p[(k[y>>2]|0)+8>>3];p[m>>3]=+p[k[y>>2]>>3];p[m+8>>3]=I;mta(61101,m)|0}ve(k[q>>2]|0,k[y>>2]|0);break}if((k[B>>2]|0)==2){ve(k[q>>2]|0,k[y>>2]|0);break}if(!(k[(k[s>>2]|0)+112>>2]|0)){I=+p[(k[y>>2]|0)+8>>3];p[l>>3]=+p[k[y>>2]>>3];p[l+8>>3]=I;mta(61038,l)|0;k[C>>2]=1}ve(k[q>>2]|0,k[y>>2]|0)}while(0);if((J|0)==13){if(!(k[(k[s>>2]|0)+112>>2]|0)){I=+p[(k[y>>2]|0)+8>>3];p[n>>3]=+p[k[y>>2]>>3];p[n+8>>3]=I;mta(61038,n)|0;k[C>>2]=1}ve(k[q>>2]|0,k[y>>2]|0)}if(!(k[C>>2]|0)){r=d;return}if(k[(k[s>>2]|0)+116>>2]|0){mta(61130,j)|0;I=+p[(k[v>>2]|0)+8>>3];H=+p[k[w>>2]>>3];G=+p[(k[w>>2]|0)+8>>3];F=+p[k[x>>2]>>3];E=+p[(k[x>>2]|0)+8>>3];p[i>>3]=+p[k[v>>2]>>3];p[i+8>>3]=I;p[i+16>>3]=H;p[i+24>>3]=G;p[i+32>>3]=F;p[i+40>>3]=E;mta(57292,i)|0}mta(61183,h)|0;mta(61241,g)|0;mta(61301,f)|0;mta(61357,e)|0;Tf();r=d;return}function Xf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;c=r;r=r+96|0;d=c+72|0;e=c+64|0;f=c+56|0;g=c+48|0;h=c+40|0;i=c+32|0;j=c+24|0;l=c+16|0;m=c+88|0;n=c+84|0;o=c+80|0;q=c+76|0;k[m>>2]=a;k[n>>2]=b;if(!(k[(k[n>>2]|0)+112>>2]|0))mta(61398,c)|0;ie((k[m>>2]|0)+224|0,12,252,252,0);if(k[(k[n>>2]|0)+116>>2]|0)mta(61441,c+8|0)|0;Sf(k[m>>2]|0,k[n>>2]|0);if((k[(k[n>>2]|0)+116>>2]|0)!=0?(k[(k[m>>2]|0)+224+40>>2]|0)>0:0)mta(61480,l)|0;Uf(k[m>>2]|0,k[n>>2]|0,0);if(!(((!(+p[(k[n>>2]|0)+136>>3]>0.0)?(k[(k[n>>2]|0)+12>>2]|0)==0:0)?(k[(k[n>>2]|0)+16>>2]|0)==0:0)?(k[(k[n>>2]|0)+20>>2]|0)==0:0))s=12;a:do if((s|0)==12){ie((k[m>>2]|0)+280|0,32,4092,4092,0);k[q>>2]=0;while(1){if((k[q>>2]|0)>=4096)break;k[(k[m>>2]|0)+448+(k[q>>2]<<2)>>2]=0;k[q>>2]=(k[q>>2]|0)+1}k[(k[m>>2]|0)+49600>>2]=-1;Vf(k[m>>2]|0,k[n>>2]|0);ie((k[m>>2]|0)+336|0,8,252,252,0);k[(k[m>>2]|0)+49720>>2]=1;if(k[(k[n>>2]|0)+116>>2]|0)mta(61517,j)|0;while(1){if((k[(k[m>>2]|0)+280+40>>2]|0)<=0)break a;if(!(k[(k[m>>2]|0)+49692>>2]|0))break a;l=Ve(k[m>>2]|0)|0;k[o>>2]=l;Wf(k[m>>2]|0,k[n>>2]|0,k[o>>2]|0);l=k[m>>2]|0;if((k[(k[m>>2]|0)+224+40>>2]|0)>0){Te(l,k[n>>2]|0,k[o>>2]|0);Uf(k[m>>2]|0,k[n>>2]|0,1);continue}else{le(l+280|0,k[o>>2]|0);continue}}}while(0);if(k[(k[n>>2]|0)+112>>2]|0){r=c;return}if(!(k[(k[n>>2]|0)+88>>2]|0)){r=c;return}if((k[(k[m>>2]|0)+224+40>>2]|0)<=0){r=c;return}if(k[(k[m>>2]|0)+49692>>2]|0){r=c;return}mta(61545,i)|0;if((k[(k[m>>2]|0)+224+40>>2]|0)==1)mta(61603,h)|0;else{k[g>>2]=k[(k[m>>2]|0)+224+40>>2];mta(61666,g)|0}mta(61730,f)|0;mta(61790,e)|0;mta(61852,d)|0;r=c;return}function Yf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0;c=r;r=r+80|0;d=c+8|0;e=c+76|0;f=c+72|0;g=c+64|0;h=c+56|0;i=c+48|0;j=c+44|0;l=c+40|0;m=c+36|0;n=c+32|0;o=c+28|0;q=c+24|0;k[e>>2]=a;k[f>>2]=b;if(!(k[(k[f>>2]|0)+112>>2]|0))mta(61895,c)|0;k[(k[e>>2]|0)+112+12>>2]=0;me(k[e>>2]|0);b=se(k[e>>2]|0)|0;k[g>>2]=b;while(1){if(!(k[g>>2]|0))break;k[g+4>>2]=0;while(1){if((k[g+4>>2]|0)>=3)break;k[o>>2]=k[(k[g>>2]|0)+(k[g+4>>2]<<2)>>2];k[h+4>>2]=k[o>>2]&3;k[h>>2]=k[o>>2]^k[h+4>>2];if(!((k[g>>2]|0)>>>0>=(k[h>>2]|0)>>>0?(k[h>>2]|0)!=(k[(k[e>>2]|0)+49768>>2]|0):0)){k[l>>2]=k[(k[g>>2]|0)+((k[27620+(k[g+4>>2]<<2)>>2]|0)+3<<2)>>2];k[m>>2]=k[(k[g>>2]|0)+((k[27632+(k[g+4>>2]<<2)>>2]|0)+3<<2)>>2];b=ke((k[e>>2]|0)+112|0)|0;k[j>>2]=b;k[n>>2]=0;while(1){if((k[n>>2]|0)>=(2+(k[(k[e>>2]|0)+49680>>2]|0)|0))break;p[(k[j>>2]|0)+(k[n>>2]<<3)>>3]=(+p[(k[l>>2]|0)+(k[n>>2]<<3)>>3]+ +p[(k[m>>2]|0)+(k[n>>2]<<3)>>3])*.5;k[n>>2]=(k[n>>2]|0)+1}k[(k[j>>2]|0)+(k[(k[e>>2]|0)+49696>>2]<<2)>>2]=(k[h>>2]|0)==(k[(k[e>>2]|0)+49768>>2]|0)&1;k[(k[j>>2]|0)+((k[(k[e>>2]|0)+49696>>2]|0)+1<<2)>>2]=(k[h>>2]|0)==(k[(k[e>>2]|0)+49768>>2]|0)?2:1;if((k[(k[f>>2]|0)+120>>2]|0)!=0?(k[q>>2]=k[(k[g>>2]|0)+(6+(k[g+4>>2]|0)<<2)>>2],k[i+4>>2]=k[q>>2]&1,k[i>>2]=k[q>>2]&-4,(k[i>>2]|0)!=(k[(k[e>>2]|0)+49776>>2]|0)):0){k[(k[j>>2]|0)+(k[(k[e>>2]|0)+49696>>2]<<2)>>2]=k[(k[i>>2]|0)+32>>2];k[(k[j>>2]|0)+((k[(k[e>>2]|0)+49696>>2]|0)+1<<2)>>2]=1}if((k[(k[f>>2]|0)+116>>2]|0)>1){s=+p[(k[j>>2]|0)+8>>3];p[d>>3]=+p[k[j>>2]>>3];p[d+8>>3]=s;mta(61940,d)|0}k[(k[g>>2]|0)+((k[(k[e>>2]|0)+49704>>2]|0)+(k[g+4>>2]|0)<<2)>>2]=k[j>>2];if((k[h>>2]|0)!=(k[(k[e>>2]|0)+49768>>2]|0))k[(k[h>>2]|0)+((k[(k[e>>2]|0)+49704>>2]|0)+(k[h+4>>2]|0)<<2)>>2]=k[j>>2]}b=g+4|0;k[b>>2]=(k[b>>2]|0)+1}b=se(k[e>>2]|0)|0;k[g>>2]=b}r=c;return}function Zf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0;h=r;r=r+80|0;i=h+64|0;j=h+60|0;l=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;q=h+40|0;s=h+36|0;t=h+8|0;u=h;v=h+32|0;w=h+28|0;x=h+24|0;y=h+20|0;k[i>>2]=a;k[j>>2]=b;k[l>>2]=c;k[m>>2]=d;k[n>>2]=e;k[o>>2]=f;k[q>>2]=g;k[(k[i>>2]|0)+49648>>2]=k[o>>2];k[(k[i>>2]|0)+49676>>2]=2;k[(k[i>>2]|0)+49680>>2]=k[q>>2];k[(k[i>>2]|0)+49724>>2]=0;if((k[(k[i>>2]|0)+49648>>2]|0)<3){mta(61968,h+16|0)|0;$d(1)}if(!(k[(k[i>>2]|0)+49680>>2]|0))k[(k[j>>2]|0)+32>>2]=0;pe(k[i>>2]|0,k[j>>2]|0);k[x>>2]=0;k[y>>2]=0;k[v>>2]=0;while(1){z=k[i>>2]|0;if((k[v>>2]|0)>=(k[(k[i>>2]|0)+49648>>2]|0))break;j=ke(z+112|0)|0;k[s>>2]=j;j=k[x>>2]|0;k[x>>2]=j+1;A=+p[(k[l>>2]|0)+(j<<3)>>3];p[k[s>>2]>>3]=A;p[t>>3]=A;j=k[x>>2]|0;k[x>>2]=j+1;A=+p[(k[l>>2]|0)+(j<<3)>>3];p[(k[s>>2]|0)+8>>3]=A;p[u>>3]=A;k[w>>2]=0;while(1){if((k[w>>2]|0)>=(k[q>>2]|0))break;j=k[y>>2]|0;k[y>>2]=j+1;p[(k[s>>2]|0)+(2+(k[w>>2]|0)<<3)>>3]=+p[(k[m>>2]|0)+(j<<3)>>3];k[w>>2]=(k[w>>2]|0)+1}if(k[n>>2]|0)k[(k[s>>2]|0)+(k[(k[i>>2]|0)+49696>>2]<<2)>>2]=k[(k[n>>2]|0)+(k[v>>2]<<2)>>2];else k[(k[s>>2]|0)+(k[(k[i>>2]|0)+49696>>2]<<2)>>2]=0;k[(k[s>>2]|0)+((k[(k[i>>2]|0)+49696>>2]|0)+1<<2)>>2]=0;A=+p[t>>3];j=k[i>>2]|0;if(!(k[v>>2]|0)){p[j+49616>>3]=A;p[(k[i>>2]|0)+49608>>3]=A;B=+p[u>>3];p[(k[i>>2]|0)+49632>>3]=B;p[(k[i>>2]|0)+49624>>3]=B}else{if(A<+p[j+49608>>3])C=+p[t>>3];else C=+p[(k[i>>2]|0)+49608>>3];p[(k[i>>2]|0)+49608>>3]=C;if(+p[t>>3]>+p[(k[i>>2]|0)+49616>>3])D=+p[t>>3];else D=+p[(k[i>>2]|0)+49616>>3];p[(k[i>>2]|0)+49616>>3]=D;if(+p[u>>3]<+p[(k[i>>2]|0)+49624>>3])E=+p[u>>3];else E=+p[(k[i>>2]|0)+49624>>3];p[(k[i>>2]|0)+49624>>3]=E;if(+p[u>>3]>+p[(k[i>>2]|0)+49632>>3])F=+p[u>>3];else F=+p[(k[i>>2]|0)+49632>>3];p[(k[i>>2]|0)+49632>>3]=F}k[v>>2]=(k[v>>2]|0)+1}p[(k[i>>2]|0)+49640>>3]=+p[z+49608>>3]*10.0-+p[(k[i>>2]|0)+49616>>3]*9.0;r=h;return}function _f(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0;f=r;r=r+64|0;g=f+56|0;h=f+52|0;i=f+48|0;j=f+44|0;l=f+40|0;m=f+36|0;n=f+32|0;o=f+28|0;q=f+24|0;s=f+20|0;t=f+16|0;u=f+12|0;v=f+8|0;w=f+4|0;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;k[l>>2]=e;e=k[(k[g>>2]|0)+112+40>>2]|0;if(k[(k[h>>2]|0)+36>>2]|0)k[u>>2]=e-(k[(k[g>>2]|0)+49668>>2]|0);else k[u>>2]=e;if(!(k[(k[h>>2]|0)+112>>2]|0))mta(62024,f)|0;if(!(k[k[i>>2]>>2]|0)){e=ae(k[u>>2]<<1<<3)|0;k[k[i>>2]>>2]=e}if((k[(k[g>>2]|0)+49680>>2]|0)>0?(k[k[j>>2]>>2]|0)==0:0){e=ae((ma(k[u>>2]|0,k[(k[g>>2]|0)+49680>>2]|0)|0)<<3)|0;k[k[j>>2]>>2]=e}if((k[(k[h>>2]|0)+60>>2]|0)==0?(k[k[l>>2]>>2]|0)==0:0){e=ae(k[u>>2]<<2)|0;k[k[l>>2]>>2]=e}k[m>>2]=k[k[i>>2]>>2];k[n>>2]=k[k[j>>2]>>2];k[o>>2]=k[k[l>>2]>>2];k[q>>2]=0;k[s>>2]=0;me((k[g>>2]|0)+112|0);k[v>>2]=k[(k[h>>2]|0)+40>>2];l=we(k[g>>2]|0)|0;k[t>>2]=l;while(1){if(!(k[t>>2]|0))break;if(!((k[(k[h>>2]|0)+36>>2]|0)!=0?(k[(k[t>>2]|0)+((k[(k[g>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)==-32767:0)){x=+p[k[t>>2]>>3];l=k[q>>2]|0;k[q>>2]=l+1;p[(k[m>>2]|0)+(l<<3)>>3]=x;x=+p[(k[t>>2]|0)+8>>3];l=k[q>>2]|0;k[q>>2]=l+1;p[(k[m>>2]|0)+(l<<3)>>3]=x;k[w>>2]=0;while(1){if((k[w>>2]|0)>=(k[(k[g>>2]|0)+49680>>2]|0))break;x=+p[(k[t>>2]|0)+(2+(k[w>>2]|0)<<3)>>3];l=k[s>>2]|0;k[s>>2]=l+1;p[(k[n>>2]|0)+(l<<3)>>3]=x;k[w>>2]=(k[w>>2]|0)+1}if(!(k[(k[h>>2]|0)+60>>2]|0))k[(k[o>>2]|0)+((k[v>>2]|0)-(k[(k[h>>2]|0)+40>>2]|0)<<2)>>2]=k[(k[t>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2];k[(k[t>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2]=k[v>>2];k[v>>2]=(k[v>>2]|0)+1}l=we(k[g>>2]|0)|0;k[t>>2]=l}r=f;return}function $f(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+12|0;e=c+8|0;f=c+4|0;g=c;k[d>>2]=a;k[e>>2]=b;me((k[d>>2]|0)+112|0);k[g>>2]=k[(k[e>>2]|0)+40>>2];b=we(k[d>>2]|0)|0;k[f>>2]=b;while(1){if(!(k[f>>2]|0))break;k[(k[f>>2]|0)+(k[(k[d>>2]|0)+49696>>2]<<2)>>2]=k[g>>2];if(!((k[(k[e>>2]|0)+36>>2]|0)!=0?(k[(k[f>>2]|0)+((k[(k[d>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)==-32767:0))k[g>>2]=(k[g>>2]|0)+1;b=we(k[d>>2]|0)|0;k[f>>2]=b}r=c;return}function ag(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;e=r;r=r+80|0;f=e+76|0;g=e+72|0;h=e+68|0;i=e+64|0;j=e+60|0;l=e+56|0;m=e+52|0;n=e+48|0;o=e+40|0;q=e+32|0;s=e+28|0;t=e+24|0;u=e+20|0;v=e+16|0;w=e+12|0;x=e+8|0;y=e+4|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;if(!(k[(k[g>>2]|0)+112>>2]|0))mta(62043,e)|0;if(!(k[k[h>>2]>>2]|0)){d=ae((ma(k[(k[f>>2]|0)+40>>2]|0,(ma((k[(k[g>>2]|0)+124>>2]|0)+1|0,(k[(k[g>>2]|0)+124>>2]|0)+2|0)|0)/2|0)|0)<<2)|0;k[k[h>>2]>>2]=d}if((k[(k[f>>2]|0)+49684>>2]|0)>0?(k[k[i>>2]>>2]|0)==0:0){d=ae((ma(k[(k[f>>2]|0)+40>>2]|0,k[(k[f>>2]|0)+49684>>2]|0)|0)<<3)|0;k[k[i>>2]>>2]=d}k[j>>2]=k[k[h>>2]>>2];k[l>>2]=k[k[i>>2]>>2];k[m>>2]=0;k[n>>2]=0;me(k[f>>2]|0);i=se(k[f>>2]|0)|0;k[o>>2]=i;k[o+4>>2]=0;k[x>>2]=k[(k[g>>2]|0)+40>>2];while(1){if(!(k[o>>2]|0))break;k[q>>2]=k[(k[o>>2]|0)+((k[27620+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2];k[s>>2]=k[(k[o>>2]|0)+((k[27632+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2];k[t>>2]=k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2];i=k[f>>2]|0;if((k[(k[g>>2]|0)+124>>2]|0)==1){h=k[(k[q>>2]|0)+(k[i+49696>>2]<<2)>>2]|0;d=k[m>>2]|0;k[m>>2]=d+1;k[(k[j>>2]|0)+(d<<2)>>2]=h;h=k[(k[s>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;d=k[m>>2]|0;k[m>>2]=d+1;k[(k[j>>2]|0)+(d<<2)>>2]=h;h=k[(k[t>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;d=k[m>>2]|0;k[m>>2]=d+1;k[(k[j>>2]|0)+(d<<2)>>2]=h}else{k[u>>2]=k[(k[o>>2]|0)+((k[i+49704>>2]|0)+1<<2)>>2];k[v>>2]=k[(k[o>>2]|0)+((k[(k[f>>2]|0)+49704>>2]|0)+2<<2)>>2];k[w>>2]=k[(k[o>>2]|0)+(k[(k[f>>2]|0)+49704>>2]<<2)>>2];i=k[(k[q>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[s>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[t>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[u>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[v>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[w>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i}k[y>>2]=0;while(1){z=k[f>>2]|0;if((k[y>>2]|0)>=(k[(k[f>>2]|0)+49684>>2]|0))break;A=+p[(k[o>>2]|0)+((k[z+49708>>2]|0)+(k[y>>2]|0)<<3)>>3];i=k[n>>2]|0;k[n>>2]=i+1;p[(k[l>>2]|0)+(i<<3)>>3]=A;k[y>>2]=(k[y>>2]|0)+1}i=se(z)|0;k[o>>2]=i;k[x>>2]=(k[x>>2]|0)+1}r=e;return}function bg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+64|0;f=e+48|0;g=e+44|0;h=e+40|0;i=e+36|0;j=e+32|0;l=e+28|0;m=e+24|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;if(!(k[(k[g>>2]|0)+112>>2]|0))mta(62063,e)|0;if(!(k[k[h>>2]>>2]|0)){d=ae(k[(k[f>>2]|0)+56+40>>2]<<1<<2)|0;k[k[h>>2]>>2]=d}if((k[(k[g>>2]|0)+60>>2]|0)==0?(k[k[i>>2]>>2]|0)==0:0){d=ae(k[(k[f>>2]|0)+56+40>>2]<<2)|0;k[k[i>>2]>>2]=d}k[j>>2]=k[k[h>>2]>>2];k[l>>2]=k[k[i>>2]>>2];k[m>>2]=0;me((k[f>>2]|0)+56|0);i=ue(k[f>>2]|0)|0;k[n>>2]=i;k[n+4>>2]=0;k[q>>2]=k[(k[g>>2]|0)+40>>2];while(1){if(!(k[n>>2]|0))break;k[o>>2]=k[(k[n>>2]|0)+(2+(k[n+4>>2]|0)<<2)>>2];k[p>>2]=k[(k[n>>2]|0)+(3-(k[n+4>>2]|0)<<2)>>2];i=k[(k[o>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[p>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;if(!(k[(k[g>>2]|0)+60>>2]|0))k[(k[l>>2]|0)+((k[q>>2]|0)-(k[(k[g>>2]|0)+40>>2]|0)<<2)>>2]=k[(k[n>>2]|0)+32>>2];i=ue(k[f>>2]|0)|0;k[n>>2]=i;k[q>>2]=(k[q>>2]|0)+1}r=e;return}function cg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;e=r;r=r+80|0;f=e+72|0;g=e+68|0;h=e+64|0;i=e+60|0;j=e+56|0;l=e+52|0;m=e+48|0;n=e+40|0;o=e+32|0;p=e+24|0;q=e+20|0;s=e+16|0;t=e+12|0;u=e+8|0;v=e+4|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;if(!(k[(k[g>>2]|0)+112>>2]|0))mta(62082,e)|0;if(!(k[k[h>>2]>>2]|0)){d=ae(k[(k[f>>2]|0)+49672>>2]<<1<<2)|0;k[k[h>>2]>>2]=d}if((k[(k[g>>2]|0)+60>>2]|0)==0?(k[k[i>>2]>>2]|0)==0:0){d=ae(k[(k[f>>2]|0)+49672>>2]<<2)|0;k[k[i>>2]>>2]=d}k[j>>2]=k[k[h>>2]>>2];k[l>>2]=k[k[i>>2]>>2];k[m>>2]=0;me(k[f>>2]|0);i=se(k[f>>2]|0)|0;k[n>>2]=i;k[t>>2]=k[(k[g>>2]|0)+40>>2];while(1){if(!(k[n>>2]|0))break;k[n+4>>2]=0;while(1){if((k[n+4>>2]|0)>=3)break;k[u>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[o+4>>2]=k[u>>2]&3;k[o>>2]=k[u>>2]^k[o+4>>2];if(!((k[n>>2]|0)>>>0>=(k[o>>2]|0)>>>0?(k[o>>2]|0)!=(k[(k[f>>2]|0)+49768>>2]|0):0)){k[q>>2]=k[(k[n>>2]|0)+((k[27620+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2];k[s>>2]=k[(k[n>>2]|0)+((k[27632+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2];i=k[(k[q>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;i=k[(k[s>>2]|0)+(k[(k[f>>2]|0)+49696>>2]<<2)>>2]|0;h=k[m>>2]|0;k[m>>2]=h+1;k[(k[j>>2]|0)+(h<<2)>>2]=i;do if(!(k[(k[g>>2]|0)+60>>2]|0)){if(!(k[(k[g>>2]|0)+120>>2]|0)){k[(k[l>>2]|0)+((k[t>>2]|0)-(k[(k[g>>2]|0)+40>>2]|0)<<2)>>2]=(k[o>>2]|0)==(k[(k[f>>2]|0)+49768>>2]|0)&1;break}k[v>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[p+4>>2]=k[v>>2]&1;k[p>>2]=k[v>>2]&-4;if((k[p>>2]|0)==(k[(k[f>>2]|0)+49776>>2]|0)){k[(k[l>>2]|0)+((k[t>>2]|0)-(k[(k[g>>2]|0)+40>>2]|0)<<2)>>2]=0;break}else{k[(k[l>>2]|0)+((k[t>>2]|0)-(k[(k[g>>2]|0)+40>>2]|0)<<2)>>2]=k[(k[p>>2]|0)+32>>2];break}}while(0);k[t>>2]=(k[t>>2]|0)+1}i=n+4|0;k[i>>2]=(k[i>>2]|0)+1}i=se(k[f>>2]|0)|0;k[n>>2]=i}r=e;return}function dg(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0;i=r;r=r+160|0;j=i+40|0;l=i+148|0;m=i+144|0;n=i+140|0;o=i+136|0;q=i+132|0;s=i+128|0;t=i+124|0;u=i+120|0;v=i+116|0;w=i+112|0;x=i+108|0;y=i+104|0;z=i+100|0;A=i+96|0;B=i+88|0;C=i+80|0;D=i+76|0;E=i+72|0;F=i+68|0;G=i+16|0;H=i+8|0;I=i;J=i+64|0;K=i+60|0;L=i+56|0;M=i+52|0;N=i+48|0;O=i+44|0;k[l>>2]=a;k[m>>2]=b;k[n>>2]=c;k[o>>2]=d;k[q>>2]=e;k[s>>2]=f;k[t>>2]=g;k[u>>2]=h;if(!(k[(k[m>>2]|0)+112>>2]|0))mta(62098,i+32|0)|0;if(!(k[k[n>>2]>>2]|0)){h=ae(k[(k[l>>2]|0)+40>>2]<<1<<3)|0;k[k[n>>2]>>2]=h}if(!(k[k[o>>2]>>2]|0)){h=ae((ma(k[(k[l>>2]|0)+40>>2]|0,k[(k[l>>2]|0)+49680>>2]|0)|0)<<3)|0;k[k[o>>2]>>2]=h}k[k[q>>2]>>2]=0;k[v>>2]=k[k[n>>2]>>2];k[w>>2]=k[k[o>>2]>>2];k[z>>2]=0;k[A>>2]=0;me(k[l>>2]|0);o=se(k[l>>2]|0)|0;k[B>>2]=o;k[B+4>>2]=0;k[J>>2]=k[(k[m>>2]|0)+40>>2];while(1){if(!(k[B>>2]|0))break;k[D>>2]=k[(k[B>>2]|0)+((k[27620+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[B>>2]|0)+((k[27632+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2];k[F>>2]=k[(k[B>>2]|0)+((k[B+4>>2]|0)+3<<2)>>2];Oe(k[l>>2]|0,k[m>>2]|0,k[D>>2]|0,k[E>>2]|0,k[F>>2]|0,G,H,I,0);P=+p[G>>3];o=k[z>>2]|0;k[z>>2]=o+1;p[(k[v>>2]|0)+(o<<3)>>3]=P;P=+p[G+8>>3];o=k[z>>2]|0;k[z>>2]=o+1;p[(k[v>>2]|0)+(o<<3)>>3]=P;k[N>>2]=2;while(1){if((k[N>>2]|0)>=(2+(k[(k[l>>2]|0)+49680>>2]|0)|0))break;P=+p[(k[D>>2]|0)+(k[N>>2]<<3)>>3]+ +p[H>>3]*(+p[(k[E>>2]|0)+(k[N>>2]<<3)>>3]-+p[(k[D>>2]|0)+(k[N>>2]<<3)>>3])+ +p[I>>3]*(+p[(k[F>>2]|0)+(k[N>>2]<<3)>>3]-+p[(k[D>>2]|0)+(k[N>>2]<<3)>>3]);o=k[A>>2]|0;k[A>>2]=o+1;p[(k[w>>2]|0)+(o<<3)>>3]=P;k[N>>2]=(k[N>>2]|0)+1}k[(k[B>>2]|0)+24>>2]=k[J>>2];o=se(k[l>>2]|0)|0;k[B>>2]=o;k[J>>2]=(k[J>>2]|0)+1}if(!(k[(k[m>>2]|0)+112>>2]|0))mta(62125,j)|0;if(!(k[k[s>>2]>>2]|0)){j=ae(k[(k[l>>2]|0)+49672>>2]<<1<<2)|0;k[k[s>>2]>>2]=j}k[k[t>>2]>>2]=0;if(!(k[k[u>>2]>>2]|0)){t=ae(k[(k[l>>2]|0)+49672>>2]<<1<<3)|0;k[k[u>>2]>>2]=t}k[x>>2]=k[k[s>>2]>>2];k[y>>2]=k[k[u>>2]>>2];k[z>>2]=0;me(k[l>>2]|0);u=se(k[l>>2]|0)|0;k[B>>2]=u;k[K>>2]=k[(k[m>>2]|0)+40>>2];while(1){if(!(k[B>>2]|0))break;k[B+4>>2]=0;while(1){if((k[B+4>>2]|0)>=3)break;k[O>>2]=k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2];k[C+4>>2]=k[O>>2]&3;k[C>>2]=k[O>>2]^k[C+4>>2];if(!((k[B>>2]|0)>>>0>=(k[C>>2]|0)>>>0?(k[C>>2]|0)!=(k[(k[l>>2]|0)+49768>>2]|0):0)){k[L>>2]=k[(k[B>>2]|0)+24>>2];if((k[C>>2]|0)==(k[(k[l>>2]|0)+49768>>2]|0)){k[D>>2]=k[(k[B>>2]|0)+((k[27620+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[B>>2]|0)+((k[27632+(k[B+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[x>>2]|0)+(k[z>>2]<<2)>>2]=k[L>>2];P=+p[(k[E>>2]|0)+8>>3]-+p[(k[D>>2]|0)+8>>3];m=k[z>>2]|0;k[z>>2]=m+1;p[(k[y>>2]|0)+(m<<3)>>3]=P;k[(k[x>>2]|0)+(k[z>>2]<<2)>>2]=-1;P=+p[k[D>>2]>>3]-+p[k[E>>2]>>3];m=k[z>>2]|0;k[z>>2]=m+1;p[(k[y>>2]|0)+(m<<3)>>3]=P}else{k[M>>2]=k[(k[C>>2]|0)+24>>2];k[(k[x>>2]|0)+(k[z>>2]<<2)>>2]=k[L>>2];m=k[z>>2]|0;k[z>>2]=m+1;p[(k[y>>2]|0)+(m<<3)>>3]=0.0;k[(k[x>>2]|0)+(k[z>>2]<<2)>>2]=k[M>>2];m=k[z>>2]|0;k[z>>2]=m+1;p[(k[y>>2]|0)+(m<<3)>>3]=0.0}k[K>>2]=(k[K>>2]|0)+1}m=B+4|0;k[m>>2]=(k[m>>2]|0)+1}m=se(k[l>>2]|0)|0;k[B>>2]=m}r=i;return}function eg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;d=r;r=r+64|0;e=d+56|0;f=d+52|0;g=d+48|0;h=d+44|0;i=d+40|0;j=d+32|0;l=d+24|0;m=d+20|0;n=d+16|0;o=d+12|0;p=d+8|0;q=d+4|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;if(!(k[(k[f>>2]|0)+112>>2]|0))mta(62149,d)|0;if(!(k[k[g>>2]>>2]|0)){c=ae((k[(k[e>>2]|0)+40>>2]|0)*3<<2)|0;k[k[g>>2]>>2]=c}k[h>>2]=k[k[g>>2]>>2];k[i>>2]=0;me(k[e>>2]|0);g=se(k[e>>2]|0)|0;k[j>>2]=g;k[j+4>>2]=0;k[m>>2]=k[(k[f>>2]|0)+40>>2];while(1){if(!(k[j>>2]|0))break;k[(k[j>>2]|0)+24>>2]=k[m>>2];g=se(k[e>>2]|0)|0;k[j>>2]=g;k[m>>2]=(k[m>>2]|0)+1}k[(k[(k[e>>2]|0)+49768>>2]|0)+24>>2]=-1;me(k[e>>2]|0);g=se(k[e>>2]|0)|0;k[j>>2]=g;k[m>>2]=k[(k[f>>2]|0)+40>>2];while(1){if(!(k[j>>2]|0))break;k[j+4>>2]=1;k[q>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[q>>2]&3;k[l>>2]=k[q>>2]^k[l+4>>2];k[n>>2]=k[(k[l>>2]|0)+24>>2];k[j+4>>2]=2;k[q>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[q>>2]&3;k[l>>2]=k[q>>2]^k[l+4>>2];k[o>>2]=k[(k[l>>2]|0)+24>>2];k[j+4>>2]=0;k[q>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[l+4>>2]=k[q>>2]&3;k[l>>2]=k[q>>2]^k[l+4>>2];k[p>>2]=k[(k[l>>2]|0)+24>>2];f=k[n>>2]|0;g=k[i>>2]|0;k[i>>2]=g+1;k[(k[h>>2]|0)+(g<<2)>>2]=f;f=k[o>>2]|0;g=k[i>>2]|0;k[i>>2]=g+1;k[(k[h>>2]|0)+(g<<2)>>2]=f;f=k[p>>2]|0;g=k[i>>2]|0;k[i>>2]=g+1;k[(k[h>>2]|0)+(g<<2)>>2]=f;f=se(k[e>>2]|0)|0;k[j>>2]=f;k[m>>2]=(k[m>>2]|0)+1}r=d;return}function fg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,ba=0.0,da=0.0;c=r;r=r+848|0;d=c+640|0;e=c+616|0;f=c+608|0;g=c+592|0;h=c+584|0;i=c+544|0;j=c+496|0;l=c+456|0;m=c+448|0;n=c+432|0;o=c+416|0;q=c+400|0;s=c+836|0;t=c+832|0;u=c+824|0;v=c+808|0;w=c+328|0;x=c+200|0;y=c+176|0;z=c+152|0;A=c+128|0;B=c+120|0;C=c+112|0;D=c+104|0;E=c+96|0;F=c+88|0;G=c+80|0;H=c+72|0;I=c+64|0;J=c+56|0;K=c+48|0;L=c+40|0;M=c+32|0;N=c+24|0;O=c+16|0;P=c+8|0;Q=c;R=c+736|0;S=c+672|0;T=c+668|0;U=c+664|0;V=c+660|0;W=c+656|0;X=c+652|0;Y=c+648|0;Z=c+644|0;k[s>>2]=a;k[t>>2]=b;mta(62169,c+392|0)|0;p[P>>3]=.17453292519943295;p[Q>>3]=57.29577951308232;k[W>>2]=0;while(1){if((k[W>>2]|0)>=8)break;_=+ca(+(+p[P>>3]*+((k[W>>2]|0)+1|0)));p[w+(k[W>>2]<<3)>>3]=_;p[w+(k[W>>2]<<3)>>3]=+p[w+(k[W>>2]<<3)>>3]*+p[w+(k[W>>2]<<3)>>3];k[W>>2]=(k[W>>2]|0)+1}k[W>>2]=0;while(1){if((k[W>>2]|0)>=18)break;k[R+(k[W>>2]<<2)>>2]=0;k[W>>2]=(k[W>>2]|0)+1}p[x>>3]=1.5;p[x+8>>3]=2.0;p[x+16>>3]=2.5;p[x+24>>3]=3.0;p[x+32>>3]=4.0;p[x+40>>3]=6.0;p[x+48>>3]=10.0;p[x+56>>3]=15.0;p[x+64>>3]=25.0;p[x+72>>3]=50.0;p[x+80>>3]=100.0;p[x+88>>3]=300.0;p[x+96>>3]=1.0e3;p[x+104>>3]=1.0e4;p[x+112>>3]=1.0e5;p[x+120>>3]=0.0;k[W>>2]=0;while(1){if((k[W>>2]|0)>=16)break;k[S+(k[W>>2]<<2)>>2]=0;k[W>>2]=(k[W>>2]|0)+1}p[M>>3]=0.0;p[K>>3]=+p[(k[s>>2]|0)+49616>>3]-+p[(k[s>>2]|0)+49608>>3]+ +p[(k[s>>2]|0)+49632>>3]-+p[(k[s>>2]|0)+49624>>3];p[K>>3]=+p[K>>3]*+p[K>>3];p[E>>3]=+p[K>>3];p[F>>3]=0.0;p[H>>3]=+p[K>>3];p[I>>3]=0.0;p[M>>3]=0.0;p[N>>3]=0.0;p[O>>3]=2.0;k[V>>2]=1;me(k[s>>2]|0);P=se(k[s>>2]|0)|0;k[u>>2]=P;k[u+4>>2]=0;while(1){if(!(k[u>>2]|0))break;k[v>>2]=k[(k[u>>2]|0)+((k[27620+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v+4>>2]=k[(k[u>>2]|0)+((k[27632+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v+8>>2]=k[(k[u>>2]|0)+((k[u+4>>2]|0)+3<<2)>>2];p[G>>3]=0.0;k[W>>2]=0;while(1){if((k[W>>2]|0)>=3)break;k[Y>>2]=k[27620+(k[W>>2]<<2)>>2];k[Z>>2]=k[27632+(k[W>>2]<<2)>>2];p[y+(k[W>>2]<<3)>>3]=+p[k[v+(k[Y>>2]<<2)>>2]>>3]-+p[k[v+(k[Z>>2]<<2)>>2]>>3];p[z+(k[W>>2]<<3)>>3]=+p[(k[v+(k[Y>>2]<<2)>>2]|0)+8>>3]-+p[(k[v+(k[Z>>2]<<2)>>2]|0)+8>>3];p[A+(k[W>>2]<<3)>>3]=+p[y+(k[W>>2]<<3)>>3]*+p[y+(k[W>>2]<<3)>>3]+ +p[z+(k[W>>2]<<3)>>3]*+p[z+(k[W>>2]<<3)>>3];if(+p[A+(k[W>>2]<<3)>>3]>+p[G>>3])p[G>>3]=+p[A+(k[W>>2]<<3)>>3];if(+p[A+(k[W>>2]<<3)>>3]>+p[F>>3])p[F>>3]=+p[A+(k[W>>2]<<3)>>3];if(+p[A+(k[W>>2]<<3)>>3]<+p[E>>3])p[E>>3]=+p[A+(k[W>>2]<<3)>>3];k[W>>2]=(k[W>>2]|0)+1}_=+Ie(k[s>>2]|0,k[t>>2]|0,k[v>>2]|0,k[v+4>>2]|0,k[v+8>>2]|0);p[D>>3]=_;if(+p[D>>3]<+p[H>>3])p[H>>3]=+p[D>>3];if(+p[D>>3]>+p[I>>3])p[I>>3]=+p[D>>3];p[J>>3]=+p[D>>3]*+p[D>>3]/+p[G>>3];if(+p[J>>3]<+p[K>>3])p[K>>3]=+p[J>>3];p[L>>3]=+p[G>>3]/+p[J>>3];if(+p[L>>3]>+p[M>>3])p[M>>3]=+p[L>>3];k[T>>2]=0;while(1){$=k[T>>2]|0;if(!(+p[L>>3]>+p[x+(k[T>>2]<<3)>>3]*+p[x+(k[T>>2]<<3)>>3]?(k[T>>2]|0)<15:0))break;k[T>>2]=$+1}P=S+($<<2)|0;k[P>>2]=(k[P>>2]|0)+1;k[W>>2]=0;while(1){if((k[W>>2]|0)>=3)break;k[Y>>2]=k[27620+(k[W>>2]<<2)>>2];k[Z>>2]=k[27632+(k[W>>2]<<2)>>2];p[B>>3]=+p[y+(k[Y>>2]<<3)>>3]*+p[y+(k[Z>>2]<<3)>>3]+ +p[z+(k[Y>>2]<<3)>>3]*+p[z+(k[Z>>2]<<3)>>3];p[C>>3]=+p[B>>3]*+p[B>>3]/(+p[A+(k[Y>>2]<<3)>>3]*+p[A+(k[Z>>2]<<3)>>3]);k[U>>2]=8;k[X>>2]=7;while(1){if((k[X>>2]|0)<0)break;if(+p[C>>3]>+p[w+(k[X>>2]<<3)>>3])k[U>>2]=k[X>>2];k[X>>2]=(k[X>>2]|0)+-1}P=k[U>>2]|0;do if(+p[B>>3]<=0.0){b=R+(P<<2)|0;k[b>>2]=(k[b>>2]|0)+1;if(+p[C>>3]>+p[N>>3])p[N>>3]=+p[C>>3];if((k[V>>2]|0)!=0?+p[C>>3]<+p[O>>3]:0)p[O>>3]=+p[C>>3]}else{b=R+(17-P<<2)|0;k[b>>2]=(k[b>>2]|0)+1;if((k[V>>2]|0)==0?!(+p[C>>3]>+p[O>>3]):0)break;p[O>>3]=+p[C>>3];k[V>>2]=0}while(0);k[W>>2]=(k[W>>2]|0)+1}P=se(k[s>>2]|0)|0;k[u>>2]=P}_=+aa(+(+p[E>>3]));p[E>>3]=_;_=+aa(+(+p[F>>3]));p[F>>3]=_;_=+aa(+(+p[K>>3]));p[K>>3]=_;_=+aa(+(+p[M>>3]));p[M>>3]=_;p[H>>3]=+p[H>>3]*.5;p[I>>3]=+p[I>>3]*.5;if(+p[N>>3]>=1.0)p[N>>3]=0.0;else{_=+p[Q>>3]*+fa(+(+aa(+(+p[N>>3]))));p[N>>3]=_}do if(!(+p[O>>3]>=1.0)){_=+p[Q>>3]*+fa(+(+aa(+(+p[O>>3]))));if(k[V>>2]|0){p[O>>3]=_;break}else{p[O>>3]=180.0-_;break}}else p[O>>3]=180.0;while(0);_=+p[I>>3];p[q>>3]=+p[H>>3];p[q+8>>3]=_;mta(62196,q)|0;_=+p[F>>3];p[o>>3]=+p[E>>3];p[o+8>>3]=_;mta(62247,o)|0;_=+p[M>>3];p[n>>3]=+p[K>>3];p[n+8>>3]=_;mta(62298,n)|0;mta(62361,m)|0;m=k[S>>2]|0;_=+p[x+56>>3];ba=+p[x+64>>3];n=k[S+32>>2]|0;p[l>>3]=+p[x>>3];k[l+8>>2]=m;p[l+16>>3]=_;p[l+24>>3]=ba;k[l+32>>2]=n;mta(62397,l)|0;k[W>>2]=1;while(1){if((k[W>>2]|0)>=7)break;ba=+p[x+(k[W>>2]<<3)>>3];l=k[S+(k[W>>2]<<2)>>2]|0;_=+p[x+((k[W>>2]|0)+7<<3)>>3];da=+p[x+((k[W>>2]|0)+8<<3)>>3];n=k[S+((k[W>>2]|0)+8<<2)>>2]|0;p[j>>3]=+p[x+((k[W>>2]|0)-1<<3)>>3];p[j+8>>3]=ba;k[j+16>>2]=l;p[j+24>>3]=_;p[j+32>>3]=da;k[j+40>>2]=n;mta(62457,j)|0;k[W>>2]=(k[W>>2]|0)+1}da=+p[x+56>>3];j=k[S+28>>2]|0;_=+p[x+112>>3];n=k[S+60>>2]|0;p[i>>3]=+p[x+48>>3];p[i+8>>3]=da;k[i+16>>2]=j;p[i+24>>3]=_;k[i+32>>2]=n;mta(62516,i)|0;mta(62575,h)|0;_=+p[O>>3];p[g>>3]=+p[N>>3];p[g+8>>3]=_;mta(62639,g)|0;mta(62693,f)|0;k[W>>2]=0;while(1){if((k[W>>2]|0)>=9)break;f=((k[W>>2]|0)*10|0)+10|0;g=k[R+(k[W>>2]<<2)>>2]|0;N=((k[W>>2]|0)*10|0)+90|0;O=((k[W>>2]|0)*10|0)+100|0;h=k[R+((k[W>>2]|0)+9<<2)>>2]|0;k[e>>2]=(k[W>>2]|0)*10;k[e+4>>2]=f;k[e+8>>2]=g;k[e+12>>2]=N;k[e+16>>2]=O;k[e+20>>2]=h;mta(62713,e)|0;k[W>>2]=(k[W>>2]|0)+1}mta(149177,d)|0;r=c;return}function gg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+256|0;d=c+232|0;e=c+224|0;f=c+216|0;g=c+208|0;h=c+200|0;i=c+192|0;j=c+184|0;l=c+176|0;m=c+168|0;n=c+160|0;o=c+152|0;p=c+144|0;q=c+136|0;s=c+128|0;t=c+120|0;u=c+112|0;v=c+104|0;w=c+96|0;x=c+88|0;y=c+80|0;z=c+72|0;A=c+64|0;B=c+56|0;C=c+48|0;D=c+40|0;E=c+32|0;F=c+24|0;G=c+16|0;H=c+8|0;I=c+240|0;J=c+236|0;k[I>>2]=a;k[J>>2]=b;mta(62774,c)|0;k[H>>2]=k[(k[I>>2]|0)+49648>>2];mta(62789,H)|0;if(k[(k[J>>2]|0)+4>>2]|0){k[G>>2]=k[(k[I>>2]|0)+49652>>2];mta(62811,G)|0}if((k[k[J>>2]>>2]|0)!=0?(k[F>>2]=k[(k[I>>2]|0)+49656>>2],mta(62834,F)|0,(k[(k[J>>2]|0)+4>>2]|0)==0):0){k[E>>2]=k[(k[I>>2]|0)+49660>>2];mta(62856,E)|0}k[D>>2]=(k[(k[I>>2]|0)+112+40>>2]|0)-(k[(k[I>>2]|0)+49668>>2]|0);mta(62875,D)|0;k[C>>2]=k[(k[I>>2]|0)+40>>2];mta(62898,C)|0;k[B>>2]=k[(k[I>>2]|0)+49672>>2];mta(62921,B)|0;k[A>>2]=k[(k[I>>2]|0)+49688>>2];mta(62940,A)|0;if(!((k[k[J>>2]>>2]|0)==0?(k[(k[J>>2]|0)+4>>2]|0)==0:0)){k[z>>2]=(k[(k[I>>2]|0)+56+40>>2]|0)-(k[(k[I>>2]|0)+49688>>2]|0);mta(62977,z)|0;k[y>>2]=k[(k[I>>2]|0)+56+40>>2];mta(63014,y)|0}mta(149177,x)|0;if(!(k[(k[J>>2]|0)+116>>2]|0)){r=c;return}fg(k[I>>2]|0,k[J>>2]|0);mta(63059,w)|0;k[v>>2]=k[(k[I>>2]|0)+112+44>>2];mta(63091,v)|0;k[u>>2]=k[(k[I>>2]|0)+44>>2];mta(63126,u)|0;if((k[(k[I>>2]|0)+56+44>>2]|0)>0){k[t>>2]=k[(k[I>>2]|0)+56+44>>2];mta(63162,t)|0}if((k[(k[I>>2]|0)+168+44>>2]|0)>0){k[s>>2]=k[(k[I>>2]|0)+168+44>>2];mta(63200,s)|0}if((k[(k[I>>2]|0)+224+44>>2]|0)>0){k[q>>2]=k[(k[I>>2]|0)+224+44>>2];mta(63231,q)|0}if((k[(k[I>>2]|0)+280+44>>2]|0)>0){k[p>>2]=k[(k[I>>2]|0)+280+44>>2];mta(63280,p)|0}if((k[(k[I>>2]|0)+336+44>>2]|0)>0){k[o>>2]=k[(k[I>>2]|0)+336+44>>2];mta(63320,o)|0}if((k[(k[I>>2]|0)+392+44>>2]|0)>0){k[n>>2]=k[(k[I>>2]|0)+392+44>>2];mta(63369,n)|0}n=ma(k[(k[I>>2]|0)+112+44>>2]|0,k[(k[I>>2]|0)+112+28>>2]|0)|0;o=n+(ma(k[(k[I>>2]|0)+44>>2]|0,k[(k[I>>2]|0)+28>>2]|0)|0)|0;n=o+(ma(k[(k[I>>2]|0)+56+44>>2]|0,k[(k[I>>2]|0)+56+28>>2]|0)|0)|0;o=n+(ma(k[(k[I>>2]|0)+168+44>>2]|0,k[(k[I>>2]|0)+168+28>>2]|0)|0)|0;n=o+(ma(k[(k[I>>2]|0)+224+44>>2]|0,k[(k[I>>2]|0)+224+28>>2]|0)|0)|0;o=n+(ma(k[(k[I>>2]|0)+280+44>>2]|0,k[(k[I>>2]|0)+280+28>>2]|0)|0)|0;n=o+(ma(k[(k[I>>2]|0)+336+44>>2]|0,k[(k[I>>2]|0)+336+28>>2]|0)|0)|0;o=n+(ma(k[(k[I>>2]|0)+392+44>>2]|0,k[(k[I>>2]|0)+392+28>>2]|0)|0)|0;k[m>>2]=o;mta(63412,m)|0;mta(63457,l)|0;l=k[I>>2]|0;if(k[(k[J>>2]|0)+32>>2]|0){k[i>>2]=k[l+49740>>2];mta(63516,i)|0}else{k[j>>2]=k[l+49732>>2];mta(63483,j)|0}k[h>>2]=k[(k[I>>2]|0)+49736>>2];mta(63555,h)|0;if((k[(k[I>>2]|0)+49744>>2]|0)>0){k[g>>2]=k[(k[I>>2]|0)+49744>>2];mta(63594,g)|0}if((k[(k[I>>2]|0)+49752>>2]|0)>0){k[f>>2]=k[(k[I>>2]|0)+49752>>2];mta(63637,f)|0}if((k[(k[I>>2]|0)+49748>>2]|0)>0){k[e>>2]=k[(k[I>>2]|0)+49748>>2];mta(63679,e)|0}mta(149177,d)|0;r=c;return}function hg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;e=r;r=r+50016|0;f=e+49984|0;g=e+49976|0;h=e+49968|0;i=e+49960|0;j=e+50008|0;l=e+50004|0;m=e+5e4|0;n=e+49996|0;o=e+168|0;p=e;q=e+49992|0;s=e+49988|0;k[j>>2]=a;k[l>>2]=b;k[m>>2]=c;k[n>>2]=d;Pe(o);de(1,j,p);k[o+49692>>2]=k[p+132>>2];Zf(o,p,k[k[l>>2]>>2]|0,k[(k[l>>2]|0)+4>>2]|0,k[(k[l>>2]|0)+8>>2]|0,k[(k[l>>2]|0)+12>>2]|0,k[(k[l>>2]|0)+16>>2]|0);if(k[p+4>>2]|0){j=Ef(o,p,k[(k[l>>2]|0)+20>>2]|0,k[(k[l>>2]|0)+24>>2]|0,k[(k[l>>2]|0)+28>>2]|0,k[(k[l>>2]|0)+36>>2]|0,k[(k[l>>2]|0)+40>>2]|0,k[(k[l>>2]|0)+44>>2]|0,k[(k[l>>2]|0)+48>>2]|0,k[(k[l>>2]|0)+52>>2]|0,k[(k[l>>2]|0)+56>>2]|0)|0;k[o+49688>>2]=j}else{j=Df(o,p)|0;k[o+49688>>2]=j}k[o+49756>>2]=0;k[o+49760>>2]=0;k[o+49764>>2]=0;if((k[p+120>>2]|0)!=0?(k[o+49716>>2]=1,(k[p+4>>2]|0)==0):0)Nf(o,p,k[(k[l>>2]|0)+48>>2]|0,k[(k[l>>2]|0)+52>>2]|0,k[(k[l>>2]|0)+56>>2]|0);if((k[p>>2]|0)!=0?(k[o+40>>2]|0)>0:0){k[q>>2]=k[(k[l>>2]|0)+60>>2];k[o+49660>>2]=k[(k[l>>2]|0)+64>>2];k[s>>2]=k[(k[l>>2]|0)+68>>2];k[o+49664>>2]=k[(k[l>>2]|0)+72>>2];if(!(k[p+4>>2]|0))Rf(o,p,k[q>>2]|0,k[o+49660>>2]|0,k[s>>2]|0,k[o+49664>>2]|0)}else{k[o+49660>>2]=0;k[o+49664>>2]=0}if((k[p+8>>2]|0)!=0?(k[o+40>>2]|0)>0:0)Xf(o,p);k[o+49672>>2]=(((k[o+40>>2]|0)*3|0)+(k[o+49688>>2]|0)|0)/2|0;if((k[p+124>>2]|0)>1)Yf(o,p);if(!(k[p+112>>2]|0))mta(149177,i)|0;i=k[o+112+40>>2]|0;if(k[p+36>>2]|0)k[(k[m>>2]|0)+12>>2]=i-(k[o+49668>>2]|0);else k[(k[m>>2]|0)+12>>2]=i;k[(k[m>>2]|0)+16>>2]=k[o+49680>>2];k[(k[m>>2]|0)+36>>2]=k[o+40>>2];i=(ma((k[p+124>>2]|0)+1|0,(k[p+124>>2]|0)+2|0)|0)/2|0;k[(k[m>>2]|0)+40>>2]=i;k[(k[m>>2]|0)+44>>2]=k[o+49684>>2];k[(k[m>>2]|0)+88>>2]=k[o+49672>>2];if(k[p+120>>2]|0)k[(k[m>>2]|0)+56>>2]=k[o+56+40>>2];else k[(k[m>>2]|0)+56>>2]=k[o+49688>>2];if(k[n>>2]|0){k[(k[n>>2]|0)+12>>2]=k[o+40>>2];k[(k[n>>2]|0)+16>>2]=k[o+49680>>2];k[(k[n>>2]|0)+88>>2]=k[o+49672>>2]}do if(k[p+68>>2]|0)t=30;else{if((k[p+76>>2]|0)!=0?(k[o+49724>>2]|0)!=0:0){t=30;break}_f(o,p,k[m>>2]|0,(k[m>>2]|0)+4|0,(k[m>>2]|0)+8|0)}while(0);if((t|0)==30){if(!(k[p+112>>2]|0))mta(63732,h)|0;$f(o,p)}if(k[p+72>>2]|0){if(!(k[p+112>>2]|0))mta(63755,g)|0}else ag(o,p,(k[m>>2]|0)+20|0,(k[m>>2]|0)+24|0);if(!((k[p>>2]|0)==0?(k[p+28>>2]|0)==0:0))t=40;do if((t|0)==40){if((k[p+64>>2]|0)==0?(k[p+76>>2]|0)==0:0){bg(o,p,(k[m>>2]|0)+48|0,(k[m>>2]|0)+52|0);k[(k[m>>2]|0)+64>>2]=k[o+49660>>2];k[(k[m>>2]|0)+72>>2]=k[o+49664>>2];if(k[p>>2]|0){k[(k[m>>2]|0)+60>>2]=k[(k[l>>2]|0)+60>>2];k[(k[m>>2]|0)+68>>2]=k[(k[l>>2]|0)+68>>2];break}else{k[(k[m>>2]|0)+60>>2]=0;k[(k[m>>2]|0)+68>>2]=0;break}}if(!(k[p+112>>2]|0))mta(63779,f)|0}while(0);if(k[p+44>>2]|0)cg(o,p,(k[m>>2]|0)+76|0,(k[m>>2]|0)+80|0);if(k[p+48>>2]|0)dg(o,p,k[n>>2]|0,(k[n>>2]|0)+4|0,(k[n>>2]|0)+8|0,(k[n>>2]|0)+76|0,(k[n>>2]|0)+80|0,(k[n>>2]|0)+84|0);if(k[p+52>>2]|0)eg(o,p,(k[m>>2]|0)+32|0);if(!(k[p+112>>2]|0))gg(o,p);if(!(k[p+108>>2]|0)){Ae(o,p);r=e;return}Re(o,p);Se(o,p);Ae(o,p);r=e;return}function ig(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(c|0)!=0))return;f=ma(e,d)|0;e=Rqa(f>>>0>536870911?-1:f<<3)|0;if((f|0)>0){g=0;do{p[e+(g<<3)>>3]=+(k[c+(g<<2)>>2]|0);g=g+1|0}while((g|0)!=(f|0))}k[a>>2]=e;k[b>>2]=d;return}function jg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!((a|0)!=0&(d|0)!=0))return;g=ma(f,e)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;if((g|0)>0){i=0;do{p[h+(i<<3)>>3]=+(k[d+(i<<2)>>2]|0);i=i+1|0}while((i|0)!=(g|0))}k[a>>2]=h;k[b>>2]=e;k[c>>2]=f;return}function kg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!((a|0)!=0&(d|0)!=0))return;g=ma(f,e)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;if((g|0)>0)TEa(h|0,d|0,g<<3|0)|0;k[a>>2]=h;if(b)k[b>>2]=e;if(!c)return;k[c>>2]=f;return}function lg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(!((a|0)!=0&(c|0)!=0))return;e=Rqa(d>>>0>536870911?-1:d<<3)|0;if((d|0)>0)TEa(e|0,c|0,d<<3|0)|0;k[a>>2]=e;k[b>>2]=d;return}function mg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(!((a|0)!=0&(c|0)!=0))return;e=Rqa(d>>>0>536870911?-1:d<<3)|0;if((d|0)>0){f=0;do{p[e+(f<<3)>>3]=+(k[c+(f<<2)>>2]|0);f=f+1|0}while((f|0)!=(d|0))}k[a>>2]=e;k[b>>2]=d;return}function ng(a,b){a=a|0;b=+b;p[a>>3]=b;return}function og(a,b){a=a|0;b=b|0;return}function pg(a,b){a=a|0;b=b|0;var c=0,d=0;c=Rqa((Lta(b)|0)+1|0)|0;d=(Lta(b)|0)+1|0;if(!b)yb(142353,63802,137,142345);if(!d){k[a>>2]=c;return}TEa(c|0,b|0,d|0)|0;k[a>>2]=c;return}function qg(a,b){a=a|0;b=b|0;var c=0,d=0;c=Rqa((Lta(b)|0)+1|0)|0;d=(Lta(b)|0)+1|0;if(!b)yb(142353,63802,137,142345);if(!d){k[a>>2]=c;return}TEa(c|0,b|0,d|0)|0;k[a>>2]=c;return}function rg(a,b){a=a|0;b=b|0;k[a>>2]=b;return}function sg(a,b){a=a|0;b=+b;p[a>>3]=b;return}function tg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=Rqa(d>>>0>536870911?-1:d<<3)|0;if(!c)yb(142353,63802,137,142345);if(!d){k[a>>2]=e;k[b>>2]=d;return}TEa(e|0,c|0,d<<3|0)|0;k[a>>2]=e;k[b>>2]=d;return}function ug(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!((a|0)!=0&(d|0)!=0))return;g=ma(f,e)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;if((g|0)>0)TEa(h|0,d|0,g<<3|0)|0;if(b)k[b>>2]=e;if(c)k[c>>2]=f;k[a>>2]=h;return}function vg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!((a|0)!=0&(d|0)!=0))return;g=ma(f,e)|0;h=Rqa(g>>>0>1073741823?-1:g<<2)|0;if(g)TEa(h|0,d|0,g<<2|0)|0;if(b)k[b>>2]=e;if(c)k[c>>2]=f;k[a>>2]=h;return}function wg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=Qqa(36)|0;B=0;va(452,e|0);f=B;B=0;if(f&1){f=Rb()|0;Sqa(e);Qb(f|0)}if(!d){k[a>>2]=e;return}f=Qqa(24)|0;k[f>>2]=27652;g=f+4|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;i[g+16>>0]=0;k[f+8>>2]=d;g=d>>>0>536870911?-1:d<<3;h=Rqa(g)|0;k[f+12>>2]=h;if(!b)yb(142353,63802,137,142345);j=d<<3;TEa(h|0,b|0,j|0)|0;b=Rqa(g)|0;k[f+16>>2]=b;if(!c)yb(142353,63802,137,142345);TEa(b|0,c|0,j|0)|0;ih(e,f)|0;k[a>>2]=e;return}function xg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0;c=Qqa(36)|0;B=0;va(453,c|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(c);Qb(b|0)}else{b=Qqa(32)|0;k[b>>2]=27692;f=b+4|0;k[f>>2]=0;g=b+16|0;k[g>>2]=0;h=b+20|0;k[h>>2]=0;i=b+24|0;k[i>>2]=0;j=Rqa((Lta(d)|0)+1|0)|0;k[f>>2]=j;TEa(j|0,d|0,(Lta(d)|0)+1|0)|0;p[b+8>>3]=e;k[g>>2]=1;k[h>>2]=1;k[i>>2]=0;q_(c,b)|0;k[a>>2]=c;return}}function yg(a){a=a|0;var b=0,c=0;k[a>>2]=27692;b=a+4|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+24|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function zg(a){a=a|0;var b=0,c=0;k[a>>2]=27692;b=a+4|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=k[a+24>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function Ag(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function Bg(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+96|0;c=b;d=c;e=d+81|0;do{i[d>>0]=0;d=d+1|0}while((d|0)<(e|0));Fc[k[(k[a>>2]|0)+32>>2]&1023](a,c);r=b;return}function Cg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,64133,114);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149550,2);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,77,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Dg(a){a=a|0;return 981}function Eg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,64133,114);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149534,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,83,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function Fg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,64027,105);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,28,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Gg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;c=r;r=r+1008|0;d=c+904|0;e=c+916|0;f=c+744|0;g=c+892|0;h=c+592|0;i=c+880|0;j=c+440|0;l=c+728|0;m=c+304|0;n=c+576|0;o=c+168|0;q=c+152|0;s=c+16|0;t=c;u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=f+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(d);Yua(z);Ava(v);A=E;C=D;break}Yua(d);D=Lta(b)|0;B=0;E=Ia(40,f|0,b|0,D|0)|0;D=B;B=0;do if((((!(D&1)?(B=0,F=Ia(40,E|0,63914,16)|0,G=B,B=0,!(G&1)):0)?(G=k[a+4>>2]|0,H=Lta(G)|0,B=0,I=Ia(40,F|0,G|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,I|0,63931,2)|0,I=B,B=0,!(I&1)):0)?(B=0,wa(510,g|0,v|0),I=B,B=0,!(I&1)):0){B=0;ya(425,g|0)|0;I=B;B=0;if(I&1){I=Rb()|0;H=Q;Yua(g);J=H;K=I;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);I=h+56|0;H=h+4|0;k[h>>2]=27524;k[I>>2]=27544;B=0;wa(508,h+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;L=Q;M=G;vva(I);Qb(M|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[I>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){F=Rb()|0;N=Q;O=F}else{k[H>>2]=27560;F=h+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[h+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,H|0,d|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(d);Yua(F);Ava(H);N=R;O=P;break}Yua(d);P=Lta(b)|0;B=0;R=Ia(40,h|0,b|0,P|0)|0;P=B;B=0;do if(((!(P&1)?(B=0,S=Ia(40,R|0,63934,16)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Xa(242,S|0,k[a+16>>2]|0)|0,S=B,B=0,!(S&1)):0)?(B=0,Ia(40,T|0,149177,1)|0,T=B,B=0,!(T&1)):0){B=0;wa(510,i|0,H|0);T=B;B=0;if(T&1){U=41;break}B=0;ya(425,i|0)|0;T=B;B=0;if(T&1){T=Rb()|0;S=Q;Yua(i);V=S;W=T;break}Yua(i);k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(F);Ava(H);vva(I);T=j+56|0;S=j+4|0;k[j>>2]=27524;k[T>>2]=27544;B=0;wa(508,j+56|0,S|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Z=X;vva(T);Qb(Z|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[T>>2]=27488;B=0;va(448,S|0);X=B;B=0;do if(X&1){_=Rb()|0;$=Q;aa=_}else{k[S>>2]=27560;_=j+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,S|0,d|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(d);Yua(_);Ava(S);$=ca;aa=ba;break}Yua(d);ba=Lta(b)|0;B=0;ca=Ia(40,j|0,b|0,ba|0)|0;ba=B;B=0;do if(ba&1)U=50;else{B=0;da=Ia(40,ca|0,63951,16)|0;ea=B;B=0;if(ea&1){U=50;break}ea=a+20|0;B=0;fa=Xa(242,da|0,k[ea>>2]|0)|0;da=B;B=0;if(da&1){U=50;break}B=0;Ia(40,fa|0,149177,1)|0;fa=B;B=0;if(fa&1){U=50;break}B=0;wa(510,l|0,S|0);fa=B;B=0;if(fa&1){U=50;break}B=0;ya(425,l|0)|0;fa=B;B=0;if(fa&1){fa=Rb()|0;da=Q;Yua(l);ga=da;ha=fa;break}Yua(l);k[j>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(_);Ava(S);vva(T);fa=k[a+24>>2]|0;a:do if(!fa){da=o+56|0;ia=o+4|0;k[o>>2]=27524;k[da>>2]=27544;B=0;wa(508,o+56|0,ia|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;la=ja;vva(da);Qb(la|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[da>>2]=27488;B=0;va(448,ia|0);ja=B;B=0;do if(ja&1){ma=Rb()|0;na=Q;oa=ma}else{k[ia>>2]=27560;ma=o+36|0;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ia|0,d|0);pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;Yua(d);Yua(ma);Ava(ia);na=qa;oa=pa;break}Yua(d);pa=Lta(b)|0;B=0;qa=Ia(40,o|0,b|0,pa|0)|0;pa=B;B=0;do if(!(pa&1)){B=0;Ia(40,qa|0,63985,24)|0;ra=B;B=0;if(ra&1){U=84;break}B=0;wa(510,q|0,ia|0);ra=B;B=0;if(ra&1){U=84;break}B=0;ya(425,q|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;Yua(q);ta=sa;ua=ra;break}else{Yua(q);k[o>>2]=27468;k[da>>2]=27488;k[ia>>2]=27560;Yua(ma);Ava(ia);vva(da);break a}}else U=84;while(0);if((U|0)==84){qa=Rb()|0;ta=Q;ua=qa}k[o>>2]=27468;k[da>>2]=27488;k[ia>>2]=27560;Yua(ma);Ava(ia);vva(da);xa=ta;za=ua;Qb(za|0)}while(0);ka=na;la=oa;vva(da);Qb(la|0)}else{s_(e,fa,k[ea>>2]|0)|0;ia=m+56|0;ja=m+4|0;k[m>>2]=27524;k[ia>>2]=27544;B=0;wa(508,m+56|0,ja|0);qa=B;B=0;if(qa&1){qa=Rb()|0;Aa=Q;Ba=qa;vva(ia);Qb(Ba|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ia>>2]=27488;B=0;va(448,ja|0);qa=B;B=0;do if(qa&1){pa=Rb()|0;Ca=Q;Da=pa}else{k[ja>>2]=27560;pa=m+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,ja|0,d|0);ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;Yua(d);Yua(pa);Ava(ja);Ca=sa;Da=ra;break}Yua(d);ra=Lta(b)|0;B=0;sa=Ia(40,m|0,b|0,ra|0)|0;ra=B;B=0;do if(!(ra&1)){B=0;Ea=Ia(40,sa|0,63968,16)|0;Fa=B;B=0;if(Fa&1){U=68;break}Fa=Lta(e)|0;B=0;Ga=Ia(40,Ea|0,e|0,Fa|0)|0;Fa=B;B=0;if(Fa&1){U=68;break}B=0;Ia(40,Ga|0,149177,1)|0;Ga=B;B=0;if(Ga&1){U=68;break}B=0;wa(510,n|0,ja|0);Ga=B;B=0;if(Ga&1){U=68;break}B=0;ya(425,n|0)|0;Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Fa=Q;Yua(n);Ha=Fa;Ja=Ga;break}else{Yua(n);k[m>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(pa);Ava(ja);vva(ia);break a}}else U=68;while(0);if((U|0)==68){sa=Rb()|0;Ha=Q;Ja=sa}k[m>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(pa);Ava(ja);vva(ia);xa=Ha;za=Ja;Qb(za|0)}while(0);Aa=Ca;Ba=Da;vva(ia);Qb(Ba|0)}while(0);ea=s+56|0;fa=s+4|0;k[s>>2]=27524;k[ea>>2]=27544;B=0;wa(508,s+56|0,fa|0);ja=B;B=0;if(ja&1){ja=Rb()|0;Ka=Q;La=ja;vva(ea);Qb(La|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[ea>>2]=27488;B=0;va(448,fa|0);ja=B;B=0;do if(ja&1){qa=Rb()|0;Ma=Q;Na=qa}else{k[fa>>2]=27560;qa=s+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,fa|0,d|0);da=B;B=0;if(da&1){da=Rb()|0;sa=Q;Yua(d);Yua(qa);Ava(fa);Ma=sa;Na=da;break}Yua(d);da=Lta(b)|0;B=0;sa=Ia(40,s|0,b|0,da|0)|0;da=B;B=0;do if(!(da&1)){B=0;ra=Ia(40,sa|0,64010,16)|0;ma=B;B=0;if(ma&1){U=102;break}B=0;ma=Sa(1,ra|0,+(+p[a+8>>3]))|0;ra=B;B=0;if(ra&1){U=102;break}B=0;Ia(40,ma|0,149177,1)|0;ma=B;B=0;if(ma&1){U=102;break}B=0;wa(510,t|0,fa|0);ma=B;B=0;if(ma&1){U=102;break}B=0;ya(424,t|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;ra=Q;Yua(t);Oa=ra;Pa=ma;break}else{Yua(t);k[s>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(qa);Ava(fa);vva(ea);r=c;return}}else U=102;while(0);if((U|0)==102){sa=Rb()|0;Oa=Q;Pa=sa}k[s>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(qa);Ava(fa);vva(ea);xa=Oa;za=Pa;Qb(za|0)}while(0);Ka=Ma;La=Na;vva(ea);Qb(La|0)}while(0);if((U|0)==50){ca=Rb()|0;ga=Q;ha=ca}k[j>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(_);Ava(S);vva(T);xa=ga;za=ha;Qb(za|0)}while(0);Y=$;Z=aa;vva(T);Qb(Z|0)}else U=41;while(0);if((U|0)==41){R=Rb()|0;V=Q;W=R}k[h>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(F);Ava(H);vva(I);xa=V;za=W;Qb(za|0)}while(0);L=N;M=O;vva(I);Qb(M|0)}else U=24;while(0);if((U|0)==24){E=Rb()|0;J=Q;K=E}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);xa=J;za=K;Qb(za|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}function Hg(a){a=a|0;return k[a+4>>2]|0}function Ig(a){a=a|0;return k[a+16>>2]|0}function Jg(a){a=a|0;return k[a+20>>2]|0}function Kg(a){a=a|0;return k[a+24>>2]|0}function Lg(a){a=a|0;var b=0,c=0;k[a>>2]=27652;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+16|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function Mg(a){a=a|0;var b=0,c=0;k[a>>2]=27652;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+16>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function Ng(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;j=b+440|0;l=b+152|0;m=b+288|0;n=b+16|0;o=b;q=d+56|0;s=d+4|0;k[d>>2]=27524;k[q>>2]=27544;B=0;wa(508,d+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=d+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;z=Ia(40,d|0,64382,10)|0;A=B;B=0;do if(((!(A&1)?(B=0,C=Xa(242,z|0,k[a+4>>2]|0)|0,D=B,B=0,!(D&1)):0)?(B=0,Ia(40,C|0,149177,1)|0,C=B,B=0,!(C&1)):0)?(B=0,wa(510,e|0,s|0),C=B,B=0,!(C&1)):0){B=0;ya(424,e|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}Yua(e);k[d>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);C=f+56|0;D=f+4|0;k[f>>2]=27524;k[C>>2]=27544;B=0;wa(508,f+56|0,D|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(C);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[D>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(D);K=N;L=M;break}Yua(c);B=0;M=Ia(40,f|0,64393,10)|0;N=B;B=0;do if(((!(N&1)?(O=a+8|0,B=0,P=Xa(242,M|0,k[O>>2]|0)|0,R=B,B=0,!(R&1)):0)?(B=0,Ia(40,P|0,149177,1)|0,P=B,B=0,!(P&1)):0)?(B=0,wa(510,g|0,D|0),P=B,B=0,!(P&1)):0){B=0;ya(424,g|0)|0;P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(g);S=R;T=P;break}Yua(g);k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);P=h+56|0;R=h+4|0;k[h>>2]=27524;k[P>>2]=27544;B=0;wa(508,h+56|0,R|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;W=U;vva(P);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[P>>2]=27488;B=0;va(448,R|0);U=B;B=0;do if(U&1){X=Rb()|0;Y=Q;Z=X}else{k[R>>2]=27560;X=h+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(c);Yua(X);Ava(R);Y=$;Z=_;break}Yua(c);B=0;_=Ia(40,h|0,64404,10)|0;$=B;B=0;do if($&1)aa=60;else{ba=(i[a+20>>0]|0)!=0;B=0;ca=Ia(40,_|0,(ba?159247:159252)|0,(ba?4:5)|0)|0;ba=B;B=0;if(ba&1){aa=60;break}B=0;Ia(40,ca|0,149177,1)|0;ca=B;B=0;if(ca&1){aa=60;break}B=0;wa(510,j|0,R|0);ca=B;B=0;if(ca&1){aa=60;break}B=0;ya(424,j|0)|0;ca=B;B=0;if(ca&1){ca=Rb()|0;ba=Q;Yua(j);da=ba;ea=ca;break}Yua(j);k[h>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(P);if(!(k[O>>2]|0)){r=b;return}ca=l+56|0;ba=l+4|0;k[l>>2]=27524;k[ca>>2]=27544;B=0;wa(508,l+56|0,ba|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;ha=fa;vva(ca);Qb(ha|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[ca>>2]=27488;B=0;va(448,ba|0);fa=B;B=0;do if(fa&1){ia=Rb()|0;ja=Q;ka=ia}else{k[ba>>2]=27560;ia=l+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(c);Yua(ia);Ava(ba);ja=ma;ka=la;break}Yua(c);B=0;Ia(40,l|0,64415,10)|0;la=B;B=0;do if(!(la&1)){B=0;wa(510,m|0,ba|0);ma=B;B=0;if(ma&1){aa=63;break}B=0;ya(424,m|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(m);oa=na;pa=ma;break}Yua(m);k[l>>2]=27468;k[ca>>2]=27488;k[ba>>2]=27560;Yua(ia);Ava(ba);vva(ca);if((k[O>>2]|0)<=0){r=b;return}ma=n+56|0;na=n+4|0;qa=n+56|0;ra=n+128|0;sa=n+132|0;ta=n+36|0;ua=n+52|0;xa=a+12|0;za=a+16|0;Aa=0;while(1){k[n>>2]=27524;k[ma>>2]=27544;B=0;wa(508,qa|0,na|0);Ba=B;B=0;if(Ba&1){aa=70;break}k[ra>>2]=0;k[sa>>2]=-1;k[n>>2]=27468;k[ma>>2]=27488;B=0;va(448,na|0);Ba=B;B=0;if(Ba&1){aa=71;break}k[na>>2]=27560;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[ua>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);Ba=B;B=0;if(Ba&1){aa=69;break}Yua(c);B=0;Ba=Xa(242,n|0,Aa|0)|0;Ca=B;B=0;if(Ca&1){aa=83;break}B=0;Ca=Ia(40,Ba|0,160061,2)|0;Ba=B;B=0;if(Ba&1){aa=83;break}B=0;Ba=Sa(1,Ca|0,+(+p[(k[xa>>2]|0)+(Aa<<3)>>3]))|0;Ca=B;B=0;if(Ca&1){aa=83;break}B=0;Ca=Ia(40,Ba|0,148718,3)|0;Ba=B;B=0;if(Ba&1){aa=83;break}B=0;Ba=Sa(1,Ca|0,+(+p[(k[za>>2]|0)+(Aa<<3)>>3]))|0;Ca=B;B=0;if(Ca&1){aa=83;break}B=0;Ia(40,Ba|0,149177,1)|0;Ba=B;B=0;if(Ba&1){aa=83;break}B=0;wa(510,o|0,na|0);Ba=B;B=0;if(Ba&1){aa=83;break}B=0;ya(424,o|0)|0;Ba=B;B=0;if(Ba&1){aa=84;break}Yua(o);k[n>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Aa=Aa+1|0;if((Aa|0)>=(k[O>>2]|0)){aa=86;break}}if((aa|0)==69){Aa=Rb()|0;za=Q;Yua(c);Yua(ta);Ava(na);Da=za;Ea=Aa;aa=72}else if((aa|0)==70){Aa=Rb()|0;Fa=Q;Ga=Aa;vva(ma);Qb(Ga|0)}else if((aa|0)==71){Aa=Rb()|0;Da=Q;Ea=Aa;aa=72}else if((aa|0)==83){Aa=Rb()|0;Ha=Q;Ja=Aa;aa=85}else if((aa|0)==84){Aa=Rb()|0;za=Q;Yua(o);Ha=za;Ja=Aa;aa=85}else if((aa|0)==86){r=b;return}if((aa|0)==72){Fa=Da;Ga=Ea;vva(ma);Qb(Ga|0)}else if((aa|0)==85){k[n>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Ka=Ha;La=Ja;Qb(La|0)}}else aa=63;while(0);if((aa|0)==63){la=Rb()|0;oa=Q;pa=la}k[l>>2]=27468;k[ca>>2]=27488;k[ba>>2]=27560;Yua(ia);Ava(ba);vva(ca);Ka=oa;La=pa;Qb(La|0)}while(0);ga=ja;ha=ka;vva(ca);Qb(ha|0)}while(0);if((aa|0)==60){_=Rb()|0;da=Q;ea=_}k[h>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(P);Ka=da;La=ea;Qb(La|0)}while(0);V=Y;W=Z;vva(P);Qb(W|0)}else aa=57;while(0);if((aa|0)==57){M=Rb()|0;S=Q;T=M}k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);Ka=S;La=T;Qb(La|0)}while(0);H=K;I=L;vva(C);Qb(I|0)}else aa=54;while(0);if((aa|0)==54){z=Rb()|0;E=Q;F=z}k[d>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Ka=E;La=F;Qb(La|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}function Og(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function Pg(a){a=a|0;return k[a+4>>2]|0}function Qg(a){a=a|0;return 558}function Rg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;b=Qqa(24)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=k[a+12>>2]|0;f=k[a+16>>2]|0;g=i[a+20>>0]|0;k[b>>2]=27652;k[b+4>>2]=c;k[b+8>>2]=d;i[b+20>>0]=g;if(!d)return b|0;g=d>>>0>536870911?-1:d<<3;B=0;c=ya(422,g|0)|0;a=B;B=0;do if(!(a&1)){k[b+12>>2]=c;if(!e){B=0;ib(283,142353,63802,137,142345);B=0;break}h=d<<3;TEa(c|0,e|0,h|0)|0;B=0;j=ya(422,g|0)|0;l=B;B=0;if(!(l&1)){k[b+16>>2]=j;if(!f){B=0;ib(283,142353,63802,137,142345);B=0;break}TEa(j|0,f|0,h|0)|0;return b|0}}while(0);f=Rb()|0;Sqa(b);Qb(f|0);return 0}function Sg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149435,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,64283,98);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,149525,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,86,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Tg(a,b,c,d,e,f,g,h,i,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=+l;var m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;m=r;r=r+464|0;n=m;o=m+200|0;q=m+108|0;s=m+16|0;t=m+208|0;k[o>>2]=0;u=q+12|0;k[u>>2]=0;if((th(i)|0)>0){v=0;w=0;while(1){x=(qh(i,w)|0)+8|0;y=(k[x>>2]|0)+-1+v|0;k[u>>2]=y;w=w+1|0;if((w|0)>=(th(i)|0)){z=y;break}else v=y}}else z=0;if((th(j)|0)>0){v=z;w=0;while(1){y=(qh(j,w)|0)+8|0;x=v+(k[y>>2]|0)|0;k[u>>2]=x;w=w+1|0;if((w|0)>=(th(j)|0)){A=x;break}else v=x}}else A=z;k[q+16>>2]=1;z=A<<1;v=Rqa(z>>>0>536870911?-1:z<<3)|0;k[q>>2]=v;if((th(i)|0)>0){z=0;w=0;while(1){x=qh(i,w)|0;y=k[x+8>>2]|0;if((y|0)>1){B=k[x+12>>2]|0;C=k[x+16>>2]|0;x=y+-1|0;y=z;D=0;while(1){E=y<<1;p[v+(E<<3)>>3]=+p[B+(D<<3)>>3];p[v+((E|1)<<3)>>3]=+p[C+(D<<3)>>3];E=y+1|0;D=D+1|0;if((D|0)>=(x|0)){F=E;break}else y=E}}else F=z;w=w+1|0;if((w|0)>=(th(i)|0)){G=F;break}else z=F}}else G=0;if((th(j)|0)>0){F=G;G=0;while(1){z=qh(j,G)|0;w=k[z+8>>2]|0;if((w|0)>0){y=k[z+12>>2]|0;x=k[z+16>>2]|0;z=F;D=0;while(1){C=z<<1;p[v+(C<<3)>>3]=+p[y+(D<<3)>>3];p[v+((C|1)<<3)>>3]=+p[x+(D<<3)>>3];C=z+1|0;D=D+1|0;if((D|0)>=(w|0)){H=C;break}else z=C}}else H=F;G=G+1|0;if((G|0)>=(th(j)|0))break;else F=H}}H=Rqa(A>>>0>536870911?-1:A<<3)|0;k[q+4>>2]=H;if((A|0)>0){WEa(H|0,0,((A|0)>1?A:1)<<3|0)|0;I=k[u>>2]|0}else I=A;H=Rqa(A>>>0>1073741823?-1:A<<2)|0;k[q+8>>2]=H;if((I|0)>0){I=k[u>>2]|0;u=0;do{k[H+(u<<2)>>2]=0;u=u+1|0}while((u|0)<(I|0))}I=q+56|0;k[I>>2]=0;if((th(i)|0)>0){u=0;H=0;while(1){A=(qh(i,H)|0)+8|0;F=(k[A>>2]|0)+-1+u|0;k[I>>2]=F;H=H+1|0;if((H|0)>=(th(i)|0)){J=F;break}else u=F}}else J=0;if((th(j)|0)>0){u=J;H=0;while(1){F=(qh(j,H)|0)+8|0;A=(k[F>>2]|0)+-1+u|0;k[I>>2]=A;H=H+1|0;if((H|0)>=(th(j)|0)){K=A;break}else u=A}}else K=J;J=K<<1;u=Rqa(J>>>0>1073741823?-1:J<<2)|0;k[q+48>>2]=u;J=Rqa(K>>>0>1073741823?-1:K<<2)|0;if(K)WEa(J|0,0,K<<2|0)|0;k[q+52>>2]=J;if((th(i)|0)>0){K=0;H=0;while(1){I=(qh(i,H)|0)+8|0;A=(k[I>>2]|0)>2;F=K<<1;k[u+(F<<2)>>2]=K;if(A){A=F;G=K;v=0;while(1){z=G+1|0;k[u+((A|1)<<2)>>2]=z;k[J+(G<<2)>>2]=0;v=v+1|0;w=(v|0)<((k[I>>2]|0)+-2|0);D=z<<1;k[u+(D<<2)>>2]=z;if(!w){L=D;M=z;break}else{A=D;G=z}}}else{L=F;M=K}k[u+((L|1)<<2)>>2]=K;k[J+(M<<2)>>2]=0;G=M+1|0;H=H+1|0;if((H|0)>=(th(i)|0)){N=G;break}else K=G}}else N=0;if((th(j)|0)>0){K=N;H=N;N=0;while(1){M=(qh(j,N)|0)+8|0;if((k[M>>2]|0)>1){L=N+2|0;G=K;A=H;I=0;while(1){v=A<<1;k[u+(v<<2)>>2]=G;z=G+1|0;k[u+((v|1)<<2)>>2]=z;k[J+(A<<2)>>2]=L;v=A+1|0;I=I+1|0;if((I|0)>=((k[M>>2]|0)+-1|0)){O=z;P=v;break}else{G=z;A=v}}}else{O=K;P=H}N=N+1|0;if((N|0)>=(th(j)|0))break;else{K=O+1|0;H=P}}}k[q+72>>2]=0;P=(th(i)|0)+-1|0;k[q+64>>2]=P;if((P|0)!=0?(H=P<<1,P=Rqa(H>>>0>536870911?-1:H<<3)|0,k[q+60>>2]=P,(th(i)|0)>1):0){H=0;do{O=H;H=H+1|0;K=qh(i,H)|0;j=O<<1;dh(P+(j<<3)|0,P+((j|1)<<3)|0,(k[K+8>>2]|0)+-1|0,k[K+12>>2]|0,k[K+16>>2]|0)|0}while((H|0)<((th(i)|0)+-1|0))}k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;i=s+20|0;k[i>>2]=0;k[s+24>>2]=0;k[s+32>>2]=0;H=s+48|0;k[H>>2]=0;P=s+52|0;k[P>>2]=0;k[s+76>>2]=0;k[s+80>>2]=0;k[n>>2]=64444;p[n+8>>3]=l;qta(t,64438,n)|0;hg(t,q,s,0);q=s+36|0;t=k[q>>2]|0;n=t*3|0;K=Rqa(n>>>0>1073741823?-1:n<<2)|0;n=s+12|0;j=k[n>>2]|0;O=j>>>0>536870911?-1:j<<3;N=Rqa(O)|0;J=Rqa(O)|0;O=s+56|0;u=k[O>>2]|0;A=u*3|0;G=Rqa(A>>>0>1073741823?-1:A<<2)|0;k[o>>2]=G;A=Rqa(u>>>0>1073741823?-1:u<<2)|0;if((t|0)>0){M=k[i>>2]|0;i=k[s+40>>2]|0;I=(i|0)>0;L=0;do{if(I){F=L*3|0;v=ma(i,L)|0;z=0;do{k[K+(z+F<<2)>>2]=(k[M+(v+z<<2)>>2]|0)+1;z=z+1|0}while((z|0)<(i|0))}L=L+1|0}while((L|0)<(t|0))}if((j|0)>0){L=k[s>>2]|0;s=0;do{i=s<<1;p[N+(s<<3)>>3]=+p[L+(i<<3)>>3];p[J+(s<<3)>>3]=+p[L+((i|1)<<3)>>3];s=s+1|0}while((s|0)<(j|0))}if((u|0)<=0){Q=u;R=t;ch(o,Q,K,R)|0;S=k[O>>2]|0;T=k[q>>2]|0;eh(o,S,K,T)|0;k[a>>2]=K;k[b>>2]=N;k[c>>2]=J;U=k[o>>2]|0;k[d>>2]=U;k[e>>2]=A;V=k[q>>2]|0;k[f>>2]=V;W=k[n>>2]|0;k[g>>2]=W;X=k[O>>2]|0;k[h>>2]=X;r=m;return}t=k[H>>2]|0;H=k[P>>2]|0;P=0;do{u=P<<1;j=P*3|0;k[G+(j<<2)>>2]=(k[t+(u<<2)>>2]|0)+1;k[G+(j+1<<2)>>2]=(k[t+((u|1)<<2)>>2]|0)+1;k[A+(P<<2)>>2]=k[H+(P<<2)>>2];P=P+1|0;u=k[O>>2]|0}while((P|0)<(u|0));Y=u;Q=Y;R=k[q>>2]|0;ch(o,Q,K,R)|0;S=k[O>>2]|0;T=k[q>>2]|0;eh(o,S,K,T)|0;k[a>>2]=K;k[b>>2]=N;k[c>>2]=J;U=k[o>>2]|0;k[d>>2]=U;k[e>>2]=A;V=k[q>>2]|0;k[f>>2]=V;W=k[n>>2]|0;k[g>>2]=W;X=k[O>>2]|0;k[h>>2]=X;r=m;return}function Ug(a,b,c,d,e,f,g,h,i,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;l=l|0;m=m|0;n=n|0;o=o|0;var q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0,Ga=0.0,Ha=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0;q=r;r=r+480|0;s=q+460|0;t=q+96|0;u=q+80|0;v=q+56|0;w=q+48|0;x=q+40|0;y=q+16|0;z=q+312|0;A=q+448|0;C=q+300|0;D=q+288|0;E=q+8|0;G=q;H=q+144|0;I=q+152|0;J=q+128|0;K=q+116|0;L=q+104|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;M=(h|0)==(e|0);if(!(M|(h|0)==(f|0))){N=z+56|0;O=z+4|0;k[z>>2]=27524;k[N>>2]=27544;B=0;wa(508,z+56|0,O|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(N);Qb(S|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[O>>2]=27560;T=z+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[z+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,O|0,s|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(s);Yua(T);Ava(O);U=X;V=W;break}Yua(s);B=0;W=Ia(40,z|0,64454,33)|0;X=B;B=0;a:do if(((((((!(X&1)?(B=0,Y=Xa(242,W|0,e|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=Ia(40,Y|0,64488,4)|0,Y=B,B=0,!(Y&1)):0)?(B=0,Y=Xa(242,Z|0,f|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=Ia(40,Y|0,64493,12)|0,Y=B,B=0,!(Y&1)):0)?(B=0,Y=Xa(242,Z|0,h|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=Ia(40,Y|0,141170,1)|0,Y=B,B=0,!(Y&1)):0)?(B=0,Xa(239,Z|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,A|0,64506,106);Y=B;B=0;do if(!(Y&1)){B=0;eb(502,C|0,64613,23);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(A);aa=_;ba=$;break}B=0;wa(510,D|0,O|0);$=B;B=0;if($&1){$=Rb()|0;ca=Q;da=$;ea=1}else{B=0;ua(163,Z|0,A|0,C|0,35,D|0);$=B;B=0;if($&1)fa=1;else{B=0;eb(503,Z|0,1240,229);B=0;fa=0}$=Rb()|0;_=Q;Yua(D);ca=_;da=$;ea=fa}Yua(C);Yua(A);if(ea){aa=da;ba=ca}else{ga=da;ha=ca;break a}}else{$=Rb()|0;aa=$;ba=Q}while(0);zb(Z|0);ga=aa;ha=ba}else ia=23;while(0);if((ia|0)==23){W=Rb()|0;ga=W;ha=Q}k[z>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(T);Ava(O);vva(N);ja=ha;ka=ga;Qb(ka|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}if(!(r_(o,64637)|0))la=0;else{Vg(o,t,64637);la=1}o=ma(n,i)|0;S=Rqa(o>>>0>536870911?-1:o<<3)|0;o=Qqa(200)|0;B=0;La(30,o|0,b|0,c|0,d|0,e|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;N=Q;Sqa(o);ja=N;ka=b;Qb(ka|0)}b=o+48|0;N=k[b>>2]|0;V=Rqa(N>>>0>1073741823?-1:N<<2)|0;g5(o,V)|0;N=k[o+44>>2]|0;if((N|0)>0){U=o+8|0;R=0;do{ga=k[U>>2]|0;j[ga+(R*72|0)+60>>1]=0;k[ga+(R*72|0)+64>>2]=0;R=R+1|0}while((R|0)!=(N|0))}if((k[b>>2]|0)>0){N=o+12|0;R=0;do{X4((k[N>>2]|0)+(R*48|0)|0);R=R+1|0}while((R|0)<(k[b>>2]|0))}na=+p[c>>3];oa=+p[d>>3];if((e|0)>1){b=1;pa=na;qa=na;ra=oa;sa=oa;while(1){ta=+p[c+(b<<3)>>3];xa=ta<qa?ta:qa;ya=ta>pa?ta:pa;ta=+p[d+(b<<3)>>3];za=ta<sa?ta:sa;Aa=ta>ra?ta:ra;b=b+1|0;if((b|0)==(e|0)){Ba=ya;Ca=xa;Da=Aa;Ea=za;break}else{pa=ya;qa=xa;ra=Aa;sa=za}}}else{Ba=na;Ca=na;Da=oa;Ea=oa}if((n|0)<=0){i5(o);Sqa(o);Tqa(V);k[a>>2]=S;r=q;return 1}e=(i|0)>0;oa=+p[t>>3];t=u+8|0;b=y+8|0;d=v+8|0;c=y+16|0;R=v+16|0;N=z+4|0;U=i<<3;ga=0;b:while(1){ha=S+(ma(U,ga)|0)|0;O=l+(ga<<3)|0;na=+p[O>>3];do if(la){if(!(na<Ca|na>Ba)?(ba=m+(ga<<3)|0,sa=+p[ba>>3],!(sa<Ea|sa>Da)):0){Fa=ba;Ga=sa;ia=52;break}if(e){ba=ma(ga,i)|0;aa=0;do{p[S+(aa+ba<<3)>>3]=oa;aa=aa+1|0}while((aa|0)!=(i|0))}}else{aa=m+(ga<<3)|0;Fa=aa;Ga=+p[aa>>3];ia=52}while(0);if((ia|0)==52){ia=0;p[u>>3]=na;p[t>>3]=Ga;p5(E,o,u);T=o5(o,E,y,0)|0;aa=T+32|0;ba=aa;Z=k[ba>>2]|0;ca=k[ba+4>>2]|0;do if((ca|0)>0|(ca|0)==0&Z>>>0>0){ba=y;sa=+(Z>>>0)+4294967296.0*+(ca|0);p[v>>3]=(+((k[ba>>2]|0)>>>0)+4294967296.0*+(k[ba+4>>2]|0))/sa;ba=b;p[d>>3]=(+((k[ba>>2]|0)>>>0)+4294967296.0*+(k[ba+4>>2]|0))/sa;ba=c;p[R>>3]=(+((k[ba>>2]|0)>>>0)+4294967296.0*+(k[ba+4>>2]|0))/sa;ba=h5(o,k[T>>2]|0)|0;da=h5(o,k[T+4>>2]|0)|0;ea=h5(o,k[T+8>>2]|0)|0;A=n5(o,T)|0;if((k[V+(A<<2)>>2]|0)<0?la:0){if(e){C=ma(ga,i)|0;fa=0;do{p[S+(fa+C<<3)>>3]=oa;fa=fa+1|0}while((fa|0)!=(i|0))}}else{Ha=ba;Ja=da;Ka=ea;Ma=A;ia=63}}else{if(!la){fa=E;C=k[fa+4>>2]|0;D=G;k[D>>2]=k[fa>>2];k[D+4>>2]=C;k[s>>2]=k[G>>2];k[s+4>>2]=k[G+4>>2];q5(H,s,T,w,x);F4(z,H);C=k[N>>2]|0;D=k[z>>2]|0;sa=+p[w>>3];p[v+(j[52932+(C<<2)+2>>1]<<3)>>3]=sa;ra=+p[x>>3];p[v+(j[52932+(C<<2)>>1]<<3)>>3]=ra;p[v+(j[52944+(C<<1)>>1]<<3)>>3]=1.0-sa-ra;C=h5(o,k[D>>2]|0)|0;fa=h5(o,k[D+4>>2]|0)|0;h=h5(o,k[D+8>>2]|0)|0;Ha=C;Ja=fa;Ka=h;Ma=n5(o,D)|0;ia=63;break}if(e){D=ma(ga,i)|0;h=0;do{p[S+(h+D<<3)>>3]=oa;h=h+1|0}while((h|0)!=(i|0))}}while(0);c:do if((ia|0)==63){ia=0;if(M){if(!e)break;na=+p[v>>3];T=ma(Ha,i)|0;ra=+p[d>>3];ca=ma(Ja,i)|0;sa=+p[R>>3];Z=ma(Ka,i)|0;h=ma(ga,i)|0;D=0;while(1){p[S+(D+h<<3)>>3]=na*+p[g+(D+T<<3)>>3]+ra*+p[g+(D+ca<<3)>>3]+sa*+p[g+(D+Z<<3)>>3];D=D+1|0;if((D|0)==(i|0))break c}}if((k[aa+4>>2]|0)>=0?(k[V+(Ma<<2)>>2]|0)>=0:0){if(!((Ma|0)>-1&(Ma|0)<(f|0))){Na=O;Oa=Fa;Pa=Ma;break b}if(!e)break;TEa(ha|0,g+((ma(Ma,i)|0)<<3)|0,U|0)|0;break}if(e){D=ma(ga,i)|0;Z=0;do{p[S+(Z+D<<3)>>3]=F;Z=Z+1|0}while((Z|0)!=(i|0))}}while(0)}ga=ga+1|0;if((ga|0)>=(n|0)){ia=108;break}}if((ia|0)==108){i5(o);Sqa(o);Tqa(V);k[a>>2]=S;r=q;return 1}q=I+56|0;S=I+4|0;k[I>>2]=27524;k[q>>2]=27544;B=0;wa(508,I+56|0,S|0);a=B;B=0;if(a&1){a=Rb()|0;Qa=Q;Ra=a;vva(q);Qb(Ra|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[q>>2]=27488;B=0;va(448,S|0);a=B;B=0;do if(a&1){V=Rb()|0;Ta=Q;Ua=V}else{k[S>>2]=27560;V=I+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[I+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,S|0,s|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(s);Yua(V);Ava(S);Ta=n;Ua=o;break}Yua(s);B=0;o=Ia(40,I|0,64645,16)|0;n=B;B=0;d:do if(((((((!(n&1)?(B=0,ga=Xa(242,o|0,Pa|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,ga|0,64662,11)|0,ga=B,B=0,!(ga&1)):0)?(B=0,ga=Xa(242,i|0,f|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,ga|0,64674,50)|0,ga=B,B=0,!(ga&1)):0)?(B=0,ga=Sa(1,i|0,+(+p[Na>>3]))|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,ga|0,149175,1)|0,ga=B,B=0,!(ga&1)):0)?(B=0,ga=Sa(1,i|0,+(+p[Oa>>3]))|0,i=B,B=0,!(i&1)):0){B=0;i=Ia(40,ga|0,141170,1)|0;ga=B;B=0;if(ga&1){ia=98;break}B=0;Xa(239,i|0,0)|0;i=B;B=0;if(i&1){ia=98;break}i=Ab(20)|0;B=0;eb(502,J|0,64506,106);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,K|0,64613,23);e=B;B=0;if(e&1){e=Rb()|0;U=Q;Yua(J);Va=e;Wa=U;break}B=0;wa(510,L|0,S|0);U=B;B=0;if(U&1){U=Rb()|0;Ya=1;Za=Q;_a=U}else{B=0;ua(163,i|0,J|0,K|0,146,L|0);U=B;B=0;if(U&1)$a=1;else{B=0;eb(503,i|0,1240,229);B=0;$a=0}U=Rb()|0;e=Q;Yua(L);Ya=$a;Za=e;_a=U}Yua(K);Yua(J);if(Ya){Va=_a;Wa=Za}else{ab=Za;bb=_a;break d}}else{U=Rb()|0;Va=U;Wa=Q}while(0);zb(i|0);ab=Wa;bb=Va}else ia=98;while(0);if((ia|0)==98){o=Rb()|0;ab=Q;bb=o}k[I>>2]=27468;k[q>>2]=27488;k[S>>2]=27560;Yua(V);Ava(S);vva(q);ja=ab;ka=bb;Qb(ka|0)}while(0);Qa=Ta;Ra=Ua;vva(q);Qb(Ra|0);return 0}function Vg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=r_(a,c)|0;if(j){p[b>>3]=+p[j+8>>3];r=d;return}d=f+56|0;j=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;m=b;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,j|0);b=B;B=0;do if(b&1){a=Rb()|0;n=Q;o=a}else{k[j>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(a);Ava(j);n=s;o=q;break}Yua(e);B=0;q=Ia(40,f|0,64725,16)|0;s=B;B=0;if(((!(s&1)?(s=Lta(c)|0,B=0,t=Ia(40,q|0,c|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,64742,51)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,64794,112);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,64907,3);q=B;B=0;if(q&1){q=Rb()|0;u=Q;Yua(g);v=u;w=q;break}B=0;wa(510,i|0,j|0);q=B;B=0;if(q&1){q=Rb()|0;x=Q;y=q;z=1}else{B=0;ua(163,s|0,g|0,h|0,36,i|0);q=B;B=0;if(q&1)A=1;else{B=0;eb(503,s|0,1240,229);B=0;A=0}q=Rb()|0;u=Q;Yua(i);x=u;y=q;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(d);Qb(D|0)}}else{q=Rb()|0;v=Q;w=q}while(0);zb(s|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(d);Qb(D|0)}t=Rb()|0;C=Q;D=t;k[f>>2]=27468;k[d>>2]=27488;k[j>>2]=27560;Yua(a);Ava(j);vva(d);Qb(D|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function Wg(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var l=0,m=0,n=0,o=0,q=0;l=r;r=r+32|0;m=l;n=Rqa(i>>>0>536870911?-1:i<<3)|0;if(i)WEa(n|0,0,i<<3|0)|0;o=Rqa(h>>>0>536870911?-1:h<<3)|0;if(h)WEa(o|0,0,h<<3|0)|0;k[m>>2]=f;k[m+4>>2]=i;k[m+8>>2]=j;k[m+12>>2]=n;k[m+16>>2]=d;k[m+20>>2]=e;_g(426,m,1);if(!(Ita(g,64911)|0))if((h|0)>0)q=0;else{k[a>>2]=n;k[b>>2]=o;r=l;return 1}else if((Ita(g,64919)|0)==0&(h|0)>0)q=0;else{k[a>>2]=n;k[b>>2]=o;r=l;return 1}do{g=c+(q*3<<3)|0;if((+p[n+(~~+p[g>>3]+-1<<3)>>3]==1.0?+p[n+(~~+p[g+8>>3]+-1<<3)>>3]==1.0:0)?+p[n+(~~+p[g+16>>3]+-1<<3)>>3]==1.0:0)p[o+(q<<3)>>3]=1.0;q=q+1|0}while((q|0)<(h|0));k[a>>2]=n;k[b>>2]=o;r=l;return 1}function Xg(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0.0;b=r;r=r+16|0;c=b+4|0;d=b;e=k[a>>2]|0;f=k[e>>2]|0;g=k[e+8>>2]|0;h=k[e+12>>2]|0;i=k[e+16>>2]|0;j=k[e+20>>2]|0;$g(d,c,k[e+4>>2]|0,k[a+8>>2]|0,k[a+4>>2]|0);if((th(f)|0)>0)l=0;else{r=b;return 0}do{a=qh(f,l)|0;e=k[a+12>>2]|0;m=k[a+16>>2]|0;n=k[a+8>>2]|0;a=k[d>>2]|0;o=k[c>>2]|0;q=+p[e>>3];s=+p[m>>3];if((n|0)>1){t=1;u=q;v=q;w=s;x=s;while(1){y=+p[e+(t<<3)>>3];z=y<v?y:v;A=y>u?y:u;y=+p[m+(t<<3)>>3];B=y<x?y:x;C=y>w?y:w;t=t+1|0;if((t|0)==(n|0)){D=A;E=z;F=C;G=B;break}else{u=A;v=z;w=C;x=B}}}else{D=q;E=q;F=s;G=s}if((a|0)<(o|0)){t=a;do{H=h+(t<<3)|0;if(!(+p[H>>3]!=0.0)){x=+p[i+(t<<3)>>3];w=+p[j+(t<<3)>>3];if(w>F|(x<E|x>D|w<G))I=0.0;else I=+(bh(n,e,m,x,w,g)|0);p[H>>3]=I}t=t+1|0}while((t|0)!=(o|0))}l=l+1|0}while((l|0)<(th(f)|0));r=b;return 0}function Yg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;m=e*51|0;n=Rqa(m>>>0>1073741823?-1:m<<2)|0;if(e)WEa(n|0,0,e*204|0)|0;if((d|0)>0){m=0;do{o=m*3|0;m=m+1|0;p=(k[c+(o<<2)>>2]|0)*51|0;q=p+-51|0;s=n+(p+-1<<2)|0;p=k[s>>2]|0;a:do if((p|0)>0){t=n+(q<<2)|0;u=0;while(1){if((m|0)==(k[t+(u<<2)>>2]|0))break a;u=u+1|0;if((u|0)>=(p|0)){v=10;break}}}else v=10;while(0);b:do if((v|0)==10){v=0;k[n+(q+p<<2)>>2]=m;k[s>>2]=p+1;u=(k[c+(o+1<<2)>>2]|0)*51|0;t=u+-51|0;w=n+(u+-1<<2)|0;u=k[w>>2]|0;if((u|0)>0){x=n+(t<<2)|0;y=0;do{if((m|0)==(k[x+(y<<2)>>2]|0))break b;y=y+1|0}while((y|0)<(u|0))}k[n+(t+u<<2)>>2]=m;k[w>>2]=u+1;y=(k[c+(o+2<<2)>>2]|0)*51|0;x=y+-51|0;z=n+(y+-1<<2)|0;y=k[z>>2]|0;if((y|0)>0){A=n+(x<<2)|0;C=0;do{if((m|0)==(k[A+(C<<2)>>2]|0))break b;C=C+1|0}while((C|0)<(y|0))}k[n+(x+y<<2)>>2]=m;k[z>>2]=y+1}while(0)}while((m|0)!=(d|0))}if((e|0)>0)D=0;else{k[a>>2]=n;k[b>>2]=51;r=f;return}while(1){d=n+(D*51<<2)+200|0;D=D+1|0;if((k[d>>2]|0)>50){E=d;break}if((D|0)>=(e|0)){v=38;break}}if((v|0)==38){k[a>>2]=n;k[b>>2]=51;r=f;return}f=h+56|0;b=h+4|0;k[h>>2]=27524;k[f>>2]=27544;B=0;wa(508,h+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;F=Q;G=n;vva(f);Qb(G|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[f>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){a=Rb()|0;H=Q;I=a}else{k[b>>2]=27560;a=h+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,b|0,g|0);v=B;B=0;if(v&1){v=Rb()|0;e=Q;Yua(g);Yua(a);Ava(b);H=e;I=v;break}Yua(g);B=0;v=Ia(40,h|0,64936,32)|0;e=B;B=0;if(((!(e&1)?(B=0,e=Xa(242,v|0,k[E>>2]|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,e|0,64969,39)|0,e=B,B=0,!(e&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,i|0,65009,94);e=B;B=0;do if(!(e&1)){B=0;eb(502,j|0,65104,17);D=B;B=0;if(D&1){D=Rb()|0;d=Q;Yua(i);J=d;K=D;break}B=0;wa(510,l|0,b|0);D=B;B=0;if(D&1){D=Rb()|0;L=Q;M=D;N=1}else{B=0;ua(163,v|0,i|0,j|0,67,l|0);D=B;B=0;if(D&1)O=1;else{B=0;eb(503,v|0,1240,229);B=0;O=0}D=Rb()|0;d=Q;Yua(l);L=d;M=D;N=O}Yua(j);Yua(i);if(N){J=L;K=M}else{P=L;R=M;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(f);Qb(R|0)}}else{D=Rb()|0;J=Q;K=D}while(0);zb(v|0);P=J;R=K;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(f);Qb(R|0)}e=Rb()|0;P=Q;R=e;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(f);Qb(R|0)}while(0);F=H;G=I;vva(f);Qb(G|0)}function Zg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=f+-1|0;g=c*3|0;h=Rqa(g>>>0>1073741823?-1:g<<2)|0;if(!c){k[a>>2]=h;return}WEa(h|0,0,c*12|0)|0;if((c|0)>0)i=0;else{k[a>>2]=h;return}do{g=i*3|0;j=b+(g<<2)|0;l=j+4|0;m=j+8|0;n=h+(g<<2)|0;o=h+(g+1<<2)|0;p=h+(g+2<<2)|0;q=0;do{r=ma((k[b+(q+g<<2)>>2]|0)+-1|0,f)|0;s=k[d+(e+r<<2)>>2]|0;if((s|0)>0){t=k[j>>2]|0;u=k[l>>2]|0;v=k[m>>2]|0;w=0;do{x=k[d+(w+r<<2)>>2]|0;y=b+((x*3|0)+-3<<2)|0;z=k[y>>2]|0;A=k[y+4>>2]|0;B=k[y+8>>2]|0;do if((((t|0)==(A|0)&1)+((t|0)==(z|0)&1)+((t|0)==(B|0)&1)+((u|0)==(z|0)&1)+((u|0)==(A|0)&1)+((u|0)==(B|0)&1)+((v|0)==(z|0)&1)+((v|0)==(A|0)&1)+((v|0)==(B|0)&1)|0)==2){y=k[n>>2]|0;if(y){if((x|0)==(y|0))break;y=k[o>>2]|0;if(y){if((x|0)==(y|0))break;if(!(k[p>>2]|0))C=p;else break}else C=o}else C=n;k[C>>2]=x}while(0);w=w+1|0}while((w|0)!=(s|0))}q=q+1|0}while((q|0)!=3);i=i+1|0}while((i|0)!=(c|0));k[a>>2]=h;return}function _g(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;c=r;r=r+16|0;d=c;k[d>>2]=b;k[d+4>>2]=0;k[d+8>>2]=1;Hc[a&511](d)|0;r=c;return}function $g(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=~~+_(+(+(c|0)/+(d|0)));if((e|0)<0){g=-1;h=-1}else{i=ma(f,e)|0;g=i;h=(d+-1|0)==(e|0)?c:i+f|0}k[a>>2]=g;k[b>>2]=h;return}function ah(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;if((g|0)>0)i=0;else return 1;do{j=a+(i<<3)|0;do if(!(+p[j>>3]!=0.0))if(!(bh(d,b,c,+p[e+(i<<3)>>3],+p[f+(i<<3)>>3],h)|0)){p[j>>3]=0.0;break}else{p[j>>3]=1.0;break}while(0);i=i+1|0}while((i|0)!=(g|0));return 1}function bh(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,h=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0;g=a+-1|0;a:do if((f|0)!=2){if((a|0)<=0){h=0;return h|0}i=+p[b+(g<<3)>>3];j=+p[c+(g<<3)>>3];k=0;while(1){l=j;j=+p[c+(k<<3)>>3];m=j-l;n=i;i=+p[b+(k<<3)>>3];o=i-n;q=m*m+o*o;r=e-l;l=d-n;n=r*r+l*l;s=q*n;t=+$(+(+aa(+s)));k=k+1|0;if(!(n<=q?m*r+o*l!=(s==-G?G:t):1)){h=f;break}if((k|0)>=(a|0))break a}return h|0}while(0);if((a|0)>0){u=0;v=0;w=g}else{h=0;return h|0}while(1){g=c+(v<<3)|0;i=+p[g>>3];j=+p[c+(w<<3)>>3];if(!(i<=e&j>e))if(j<=e?(t=+p[g>>3],t>e):0){x=t;y=10}else z=u;else{x=i;y=10}if((y|0)==10){y=0;i=+p[b+(v<<3)>>3];if(i+(+p[b+(w<<3)>>3]-i)*(e-x)/(j-x)>d)z=(u|0)==0&1;else z=u}g=v+1|0;if((g|0)==(a|0)){h=z;break}else{f=v;u=z;v=g;w=f}}return h|0}function ch(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=k[a>>2]|0;if((b|0)>0)f=0;else{k[a>>2]=e;return 1}do{g=f*3|0;h=(fh(k[e+(g<<2)>>2]|0,k[e+(g+1<<2)>>2]|0,c,d)|0)+1|0;k[e+(g+2<<2)>>2]=h;f=f+1|0}while((f|0)!=(b|0));k[a>>2]=e;return 1}function dh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,q=0.0;f=r;r=r+32|0;g=f+16|0;h=f+8|0;i=f;p[g>>3]=0.0;j=+p[d>>3];k=+p[e>>3];l=c+-1|0;m=(j+ +p[d+(l<<3)>>3])*.5;n=(k+ +p[e+(l<<3)>>3])*.5;o=(n-k)*.17632698070846498;p[h>>3]=m+o;k=(j-m)*.17632698070846498;p[i>>3]=n+k;ah(g,h,i,1,d,e,c,2)|0;if(+p[g>>3]!=0.0){p[a>>3]=m-o;q=n-k;p[b>>3]=q;r=f;return 1}else{p[a>>3]=+p[h>>3];q=+p[i>>3];p[b>>3]=q;r=f;return 1}return 0}function eh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=k[a>>2]|0;if((b|0)>0)e=0;else return 1;do{a=e*3|0;f=d+(a<<2)|0;g=k[f>>2]|0;h=d+(a+1<<2)|0;i=k[h>>2]|0;j=(k[d+(a+2<<2)>>2]|0)*3|0;a=k[c+(j+-3<<2)>>2]|0;do if((a|0)==(g|0)){if((k[c+(j+-1<<2)>>2]|0)==(i|0)){k[f>>2]=i;k[h>>2]=g}}else{l=k[c+(j+-2<<2)>>2]|0;if((l|0)==(g|0)){if((a|0)!=(i|0))break;k[f>>2]=i;k[h>>2]=g;break}else{if((l|0)!=(i|0))break;k[f>>2]=i;k[h>>2]=g;break}}while(0);e=e+1|0}while((e|0)!=(b|0));return 1}function fh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((d|0)>0)e=0;else{f=-1;return f|0}while(1){g=e*3|0;h=k[c+(g<<2)>>2]|0;if(!(((h|0)!=(a|0)?(k[c+(g+1<<2)>>2]|0)!=(a|0):0)?(k[c+(g+2<<2)>>2]|0)!=(a|0):0)){if((h|0)==(b|0)){f=e;i=9;break}if((k[c+(g+1<<2)>>2]|0)==(b|0)){f=e;i=9;break}if((k[c+(g+2<<2)>>2]|0)==(b|0)){f=e;i=9;break}}e=e+1|0;if((e|0)>=(d|0)){f=-1;i=9;break}}if((i|0)==9)return f|0;return 0}function gh(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+16>>2]=0;k[a+24>>2]=0;k[a+20>>2]=0;k[a+12>>2]=-1;k[a+28>>2]=0;k[a+32>>2]=0;return}function hh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0;b=r;r=r+16|0;c=b;d=Qqa(36)|0;e=k[a+12>>2]|0;k[d>>2]=0;f=d+4|0;k[f>>2]=0;g=d+8|0;k[g>>2]=0;k[d+12>>2]=e;e=d+16|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[e+16>>2]=0;h=a+16|0;i=k[h>>2]|0;k[e>>2]=i;e=a+24|0;j=k[e>>2]|0;k[d+24>>2]=j;k[d+20>>2]=k[a+20>>2];l=k[a>>2]|0;m=a+4|0;if(l>>>0<(k[m>>2]|0)>>>0){n=l;do{l=k[n>>2]|0;o=Hc[k[(k[l>>2]|0)+24>>2]&511](l)|0;k[c>>2]=o;l=k[f>>2]|0;if((l|0)==(k[g>>2]|0))uh(d,c);else{k[l>>2]=o;k[f>>2]=(k[f>>2]|0)+4}n=n+4|0}while(n>>>0<(k[m>>2]|0)>>>0);p=k[h>>2]|0;q=k[e>>2]|0}else{p=i;q=j}j=(q|0)>0&(p|0)!=0;if(j?(p=k[a+32>>2]|0,(p|0)!=0):0){i=Rqa(q>>>0>1073741823?-1:q<<2)|0;k[d+32>>2]=i;if(!q)s=14;else{e=0;do{k[i+(e<<2)>>2]=k[p+(e<<2)>>2];e=e+1|0}while((e|0)!=(q|0));s=13}}else{k[d+32>>2]=0;s=13}if((s|0)==13?j:0)s=14;if((s|0)==14?(s=k[a+28>>2]|0,(s|0)!=0):0){a=Rqa(q>>>0>1073741823?-1:q<<2)|0;k[d+28>>2]=a;if(!q){r=b;return d|0}else t=0;do{k[a+(t<<2)>>2]=k[s+(t<<2)>>2];t=t+1|0}while((t|0)!=(q|0));r=b;return d|0}k[d+28>>2]=0;r=b;return d|0}function ih(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=a+4|0;f=k[e>>2]|0;if((f|0)==(k[a+8>>2]|0)){uh(a,d);r=c;return 1}else{k[f>>2]=b;k[e>>2]=(k[e>>2]|0)+4;r=c;return 1}return 0}function jh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+4|0;c=k[b>>2]|0;d=k[a>>2]|0;if(d>>>0<c>>>0){e=d;f=c;while(1){f=f+-4|0;g=k[f>>2]|0;if(!g)h=e;else{Ec[k[(k[g>>2]|0)+4>>2]&1023](g);h=k[a>>2]|0}if(h>>>0>=f>>>0){i=h;break}else e=h}j=k[b>>2]|0;l=i}else{j=c;l=d}if((j|0)!=(l|0))k[b>>2]=j+(~((j+-4-l|0)>>>2)<<2);l=a+28|0;j=k[l>>2]|0;if(j)Tqa(j);k[l>>2]=0;l=a+32|0;j=k[l>>2]|0;if(j)Tqa(j);k[l>>2]=0;l=k[a>>2]|0;if(!l)return;a=k[b>>2]|0;if((a|0)!=(l|0))k[b>>2]=a+(~((a+-4-l|0)>>>2)<<2);Sqa(l);return}function kh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=a+4|0;c=k[b>>2]|0;d=k[a>>2]|0;if(d>>>0<c>>>0){e=d;f=c;while(1){f=f+-4|0;g=k[f>>2]|0;if(!g)h=e;else{Ec[k[(k[g>>2]|0)+4>>2]&1023](g);h=k[a>>2]|0}if(h>>>0>=f>>>0){i=h;break}else e=h}j=k[b>>2]|0;l=i}else{j=c;l=d}if((j|0)==(l|0))return;k[b>>2]=j+(~((j+-4-l|0)>>>2)<<2);return}function lh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0;e=r;r=r+528|0;f=e+516|0;g=e+272|0;h=e+504|0;j=e+492|0;m=e+480|0;n=e+136|0;o=e+468|0;p=e+456|0;q=e+444|0;s=e;t=e+432|0;u=e+420|0;v=e+408|0;w=(d|0)==0;x=(d|0)==2;y=(d&-3|0)==0;z=a+4|0;if(!y){A=k[z>>2]|0;C=k[a>>2]|0;if(C>>>0<A>>>0){D=A;E=C;while(1){D=D+-4|0;F=k[D>>2]|0;if(!F)G=E;else{Ec[k[(k[F>>2]|0)+4>>2]&1023](F);G=k[a>>2]|0}if(G>>>0>=D>>>0){H=G;break}else E=G}I=k[z>>2]|0;J=H}else{I=A;J=C}if((I|0)==(J|0))K=0;else{k[z>>2]=I+(~((I+-4-J|0)>>>2)<<2);K=0}}else K=(k[z>>2]|0)-(k[a>>2]|0)>>2;do if(w){J=k[b>>2]|0;i[J>>0]=33;i[J+1>>0]=2;i[J+2>>0]=0;i[J+3>>0]=0;J=(k[b>>2]|0)+4|0;k[b>>2]=J;I=a+12|0;C=l[I>>0]|l[I+1>>0]<<8|l[I+2>>0]<<16|l[I+3>>0]<<24;i[J>>0]=C;i[J+1>>0]=C>>8;i[J+2>>0]=C>>16;i[J+3>>0]=C>>24;C=(k[b>>2]|0)+4|0;k[b>>2]=C;J=a+16|0;I=l[J>>0]|l[J+1>>0]<<8|l[J+2>>0]<<16|l[J+3>>0]<<24;i[C>>0]=I;i[C+1>>0]=I>>8;i[C+2>>0]=I>>16;i[C+3>>0]=I>>24;I=(k[b>>2]|0)+4|0;k[b>>2]=I;C=a+20|0;J=l[C>>0]|l[C+1>>0]<<8|l[C+2>>0]<<16|l[C+3>>0]<<24;i[I>>0]=J;i[I+1>>0]=J>>8;i[I+2>>0]=J>>16;i[I+3>>0]=J>>24;J=(k[b>>2]|0)+4|0;k[b>>2]=J;I=a+24|0;C=l[I>>0]|l[I+1>>0]<<8|l[I+2>>0]<<16|l[I+3>>0]<<24;i[J>>0]=C;i[J+1>>0]=C>>8;i[J+2>>0]=C>>16;i[J+3>>0]=C>>24;k[b>>2]=(k[b>>2]|0)+4}else{if(x){k[c>>2]=(k[c>>2]|0)+20;break}if((d|0)==1){C=(k[b>>2]|0)+4|0;k[b>>2]=C;J=a+12|0;I=l[C>>0]|l[C+1>>0]<<8|l[C+2>>0]<<16|l[C+3>>0]<<24;i[J>>0]=I;i[J+1>>0]=I>>8;i[J+2>>0]=I>>16;i[J+3>>0]=I>>24;I=(k[b>>2]|0)+4|0;k[b>>2]=I;J=a+16|0;C=l[I>>0]|l[I+1>>0]<<8|l[I+2>>0]<<16|l[I+3>>0]<<24;i[J>>0]=C;i[J+1>>0]=C>>8;i[J+2>>0]=C>>16;i[J+3>>0]=C>>24;C=(k[b>>2]|0)+4|0;k[b>>2]=C;J=a+20|0;I=l[C>>0]|l[C+1>>0]<<8|l[C+2>>0]<<16|l[C+3>>0]<<24;i[J>>0]=I;i[J+1>>0]=I>>8;i[J+2>>0]=I>>16;i[J+3>>0]=I>>24;I=(k[b>>2]|0)+4|0;k[b>>2]=I;J=a+24|0;C=l[I>>0]|l[I+1>>0]<<8|l[I+2>>0]<<16|l[I+3>>0]<<24;i[J>>0]=C;i[J+1>>0]=C>>8;i[J+2>>0]=C>>16;i[J+3>>0]=C>>24;k[b>>2]=(k[b>>2]|0)+4;break}C=g+56|0;J=g+4|0;k[g>>2]=27524;k[C>>2]=27544;B=0;wa(508,g+56|0,J|0);I=B;B=0;if(I&1){I=Rb()|0;L=Q;M=I;vva(C);Qb(M|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[C>>2]=27488;B=0;va(448,J|0);I=B;B=0;do if(I&1){A=Rb()|0;N=Q;O=A}else{k[J>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,J|0,f|0);H=B;B=0;if(H&1){H=Rb()|0;G=Q;Yua(f);Yua(A);Ava(J);N=G;O=H;break}Yua(f);B=0;H=Ia(40,g|0,143951,43)|0;G=B;B=0;a:do if(!(G&1)?(B=0,Xa(239,H|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,h|0,65122,73);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,149525,8);F=B;B=0;if(F&1){F=Rb()|0;P=Q;Yua(h);R=P;S=F;break}B=0;wa(510,m|0,J|0);F=B;B=0;if(F&1){F=Rb()|0;T=Q;U=F;V=1}else{B=0;ua(163,E|0,h|0,j|0,107,m|0);F=B;B=0;if(F&1)W=1;else{B=0;eb(503,E|0,1240,229);B=0;W=0}F=Rb()|0;P=Q;Yua(m);T=P;U=F;V=W}Yua(j);Yua(h);if(V){R=T;S=U}else{X=T;Y=U;break a}}else{F=Rb()|0;R=Q;S=F}while(0);zb(E|0);X=R;Y=S}else Z=28;while(0);if((Z|0)==28){H=Rb()|0;X=Q;Y=H}k[g>>2]=27468;k[C>>2]=27488;k[J>>2]=27560;Yua(A);Ava(J);vva(C);_=X;$=Y;Qb($|0)}while(0);L=N;M=O;vva(C);Qb(M|0)}while(0);if(y){if(((k[a+16>>2]|0)!=0?(k[a+24>>2]|0)>0:0)?(y=k[a+32>>2]|0,(y|0)!=0):0){M=a+28|0;aa=M;ba=(k[M>>2]|0)==0;ca=y}else{y=a+28|0;k[y>>2]=0;k[a+32>>2]=0;aa=y;ba=1;ca=0}do if(!w)if(x){y=(k[c>>2]|0)+1|0;k[c>>2]=y;if(ba)da=y;else{M=y+(k[a+24>>2]<<2)|0;k[c>>2]=M;da=M}M=da+1|0;k[c>>2]=M;if(!ca)ea=M;else{y=M+(k[a+24>>2]<<2)|0;k[c>>2]=y;ea=y}k[c>>2]=ea+4;break}else{y=k[b>>2]|0;M=i[y>>0]|0;O=y+1|0;k[b>>2]=O;if(!(M&1)){M=k[a+24>>2]|0;y=Rqa(M>>>0>1073741823?-1:M<<2)|0;k[aa>>2]=y;N=k[b>>2]|0;L=M<<2;TEa(y|0,N|0,L|0)|0;y=N+L|0;k[b>>2]=y;fa=y}else fa=O;O=i[fa>>0]|0;y=fa+1|0;k[b>>2]=y;if(!(O&1)){O=k[a+24>>2]|0;L=Rqa(O>>>0>1073741823?-1:O<<2)|0;k[a+32>>2]=L;N=k[b>>2]|0;M=O<<2;TEa(L|0,N|0,M|0)|0;L=N+M|0;k[b>>2]=L;ga=L}else ga=y;k[b>>2]=ga+4;break}else{i[k[b>>2]>>0]=ba&1;y=(k[b>>2]|0)+1|0;k[b>>2]=y;if(ba)ha=y;else{L=a+24|0;TEa(y|0,k[aa>>2]|0,k[L>>2]<<2|0)|0;y=(k[b>>2]|0)+(k[L>>2]<<2)|0;k[b>>2]=y;ha=y}y=a+32|0;L=(k[y>>2]|0)==0;i[ha>>0]=L&1;M=(k[b>>2]|0)+1|0;k[b>>2]=M;if(L)ia=M;else{L=a+24|0;TEa(M|0,k[y>>2]|0,k[L>>2]<<2|0)|0;y=(k[b>>2]|0)+(k[L>>2]<<2)|0;k[b>>2]=y;ia=y}i[ia>>0]=K;i[ia+1>>0]=K>>8;i[ia+2>>0]=K>>16;i[ia+3>>0]=K>>24;k[b>>2]=(k[b>>2]|0)+4}while(0);ia=k[a>>2]|0;if(ia>>>0>=(k[z>>2]|0)>>>0){r=e;return}if(w){ha=ia;do{aa=k[ha>>2]|0;ba=Hc[k[(k[aa>>2]|0)+20>>2]&511](aa)|0;aa=k[b>>2]|0;i[aa>>0]=ba;i[aa+1>>0]=ba>>8;i[aa+2>>0]=ba>>16;i[aa+3>>0]=ba>>24;k[b>>2]=(k[b>>2]|0)+4;ba=k[ha>>2]|0;rd[k[(k[ba>>2]|0)+28>>2]&511](ba,b,c,0);ha=ha+4|0}while(ha>>>0<(k[z>>2]|0)>>>0);r=e;return}if(x){ha=ia;do{ba=k[ha>>2]|0;Hc[k[(k[ba>>2]|0)+20>>2]&511](ba)|0;k[c>>2]=(k[c>>2]|0)+4;ba=k[ha>>2]|0;rd[k[(k[ba>>2]|0)+28>>2]&511](ba,b,c,2);ha=ha+4|0}while(ha>>>0<(k[z>>2]|0)>>>0);r=e;return}else{ha=ia;do{ia=k[ha>>2]|0;Hc[k[(k[ia>>2]|0)+20>>2]&511](ia)|0;k[b>>2]=(k[b>>2]|0)+4;ia=k[ha>>2]|0;rd[k[(k[ia>>2]|0)+28>>2]&511](ia,b,c,d);ha=ha+4|0}while(ha>>>0<(k[z>>2]|0)>>>0);r=e;return}}ha=a+28|0;ia=(k[ha>>2]|0)==0;do if(w){i[k[b>>2]>>0]=ia&1;ba=(k[b>>2]|0)+1|0;k[b>>2]=ba;if(ia)ja=ba;else{aa=a+24|0;TEa(ba|0,k[ha>>2]|0,k[aa>>2]<<2|0)|0;ba=(k[b>>2]|0)+(k[aa>>2]<<2)|0;k[b>>2]=ba;ja=ba}ba=a+32|0;aa=(k[ba>>2]|0)==0;i[ja>>0]=aa&1;ga=(k[b>>2]|0)+1|0;k[b>>2]=ga;if(aa)ka=ba;else{aa=a+24|0;TEa(ga|0,k[ba>>2]|0,k[aa>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[aa>>2]<<2);ka=ba}}else if(x){ba=(k[c>>2]|0)+1|0;k[c>>2]=ba;if(ia)la=ba;else{aa=ba+(k[a+24>>2]<<2)|0;k[c>>2]=aa;la=aa}aa=a+32|0;ba=(k[aa>>2]|0)==0;ga=la+1|0;k[c>>2]=ga;if(ba){ka=aa;break}k[c>>2]=ga+(k[a+24>>2]<<2);ka=aa;break}else{aa=k[b>>2]|0;ga=i[aa>>0]|0;ba=aa+1|0;k[b>>2]=ba;if(!(ga&1)){ga=k[a+24>>2]|0;aa=Rqa(ga>>>0>1073741823?-1:ga<<2)|0;k[ha>>2]=aa;fa=k[b>>2]|0;ea=ga<<2;TEa(aa|0,fa|0,ea|0)|0;aa=fa+ea|0;k[b>>2]=aa;ma=aa}else ma=ba;ba=a+32|0;aa=i[ma>>0]|0;k[b>>2]=ma+1;if(aa&1){ka=ba;break}aa=k[a+24>>2]|0;ea=Rqa(aa>>>0>1073741823?-1:aa<<2)|0;k[ba>>2]=ea;fa=k[b>>2]|0;ga=aa<<2;TEa(ea|0,fa|0,ga|0)|0;k[b>>2]=fa+ga;ka=ba;break}while(0);if(!((k[a+16>>2]|0)!=0?(k[a+24>>2]|0)>0:0)){k[ha>>2]=0;k[ka>>2]=0}do if(w){ka=k[b>>2]|0;i[ka>>0]=K;i[ka+1>>0]=K>>8;i[ka+2>>0]=K>>16;i[ka+3>>0]=K>>24;k[b>>2]=(k[b>>2]|0)+4;na=K}else{if(x){k[c>>2]=(k[c>>2]|0)+4;na=K;break}if((d|0)==1){ka=k[b>>2]|0;ha=l[ka>>0]|l[ka+1>>0]<<8|l[ka+2>>0]<<16|l[ka+3>>0]<<24;k[b>>2]=ka+4;na=ha;break}ha=n+56|0;ka=n+4|0;k[n>>2]=27524;k[ha>>2]=27544;B=0;wa(508,n+56|0,ka|0);ma=B;B=0;if(ma&1){ma=Rb()|0;oa=Q;pa=ma;vva(ha);Qb(pa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[ha>>2]=27488;B=0;va(448,ka|0);ma=B;B=0;do if(ma&1){la=Rb()|0;qa=Q;ra=la}else{k[ka>>2]=27560;la=n+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ka|0,f|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(f);Yua(la);Ava(ka);qa=ja;ra=ia;break}Yua(f);B=0;ia=Ia(40,n|0,143951,43)|0;ja=B;B=0;b:do if(!(ja&1)?(B=0,Xa(239,ia|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,o|0,65122,73);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,p|0,149525,8);fa=B;B=0;if(fa&1){fa=Rb()|0;ea=Q;Yua(o);sa=fa;ta=ea;break}B=0;wa(510,q|0,ka|0);ea=B;B=0;if(ea&1){ea=Rb()|0;xa=1;za=Q;Aa=ea}else{B=0;ua(163,ba|0,o|0,p|0,138,q|0);ea=B;B=0;if(ea&1)Ba=1;else{B=0;eb(503,ba|0,1240,229);B=0;Ba=0}ea=Rb()|0;fa=Q;Yua(q);xa=Ba;za=fa;Aa=ea}Yua(p);Yua(o);if(xa){sa=Aa;ta=za}else{Ca=za;Da=Aa;break b}}else{ea=Rb()|0;sa=ea;ta=Q}while(0);zb(ba|0);Ca=ta;Da=sa}else Z=106;while(0);if((Z|0)==106){ia=Rb()|0;Ca=Q;Da=ia}k[n>>2]=27468;k[ha>>2]=27488;k[ka>>2]=27560;Yua(la);Ava(ka);vva(ha);_=Ca;$=Da;Qb($|0)}while(0);oa=qa;pa=ra;vva(ha);Qb(pa|0)}while(0);if((na|0)<=0){r=e;return}pa=a+8|0;ra=k[7517]|0;qa=k[7834]|0;oa=k[7671]|0;Da=k[7369]|0;Ca=0;n=0;c:while(1){do if(!w)if(x){k[c>>2]=(k[c>>2]|0)+4;Ea=n;break}else{sa=k[b>>2]|0;ta=l[sa>>0]|l[sa+1>>0]<<8|l[sa+2>>0]<<16|l[sa+3>>0]<<24;k[b>>2]=sa+4;Ea=ta;break}else{ta=k[b>>2]|0;i[ta>>0]=n;i[ta+1>>0]=n>>8;i[ta+2>>0]=n>>16;i[ta+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;Ea=n}while(0);do switch(Ea|0){case 587:{ha=Qqa(144)|0;B=0;va(454,ha|0);ta=B;B=0;if(ta&1){Fa=ha;Z=127;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 627:{ha=Qqa(88)|0;B=0;va(455,ha|0);ta=B;B=0;if(ta&1){Ga=ha;Z=133;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 583:{ha=Qqa(24)|0;B=0;va(456,ha|0);ta=B;B=0;if(ta&1){Ha=ha;Z=139;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 586:{ha=Qqa(376)|0;B=0;va(457,ha|0);ta=B;B=0;if(ta&1){Ja=ha;Z=145;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 615:{ha=Qqa(32)|0;B=0;va(458,ha|0);ta=B;B=0;if(ta&1){Ka=ha;Z=151;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 614:{ha=Qqa(40)|0;B=0;va(459,ha|0);ta=B;B=0;if(ta&1){La=ha;Z=157;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 616:{ha=Qqa(36)|0;B=0;va(460,ha|0);ta=B;B=0;if(ta&1){Ma=ha;Z=163;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 621:{ha=Qqa(72)|0;B=0;va(461,ha|0);ta=B;B=0;if(ta&1){Na=ha;Z=174;break c}ta=ha+48|0;B=0;va(462,ta|0);sa=B;B=0;if(sa&1){Oa=ha;Pa=ha;Z=167;break c}B=0;sa=B;B=0;if(sa&1){Qa=ha;Ra=ha;Sa=ta;Z=168;break c}k[ha>>2]=30040;k[ha+4>>2]=30604;rd[ra&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 625:{ha=Qqa(76)|0;B=0;va(461,ha|0);ta=B;B=0;if(ta&1){Ta=ha;Z=186;break c}ta=ha+48|0;B=0;va(462,ta|0);sa=B;B=0;if(sa&1){Ua=ha;Va=ha;Z=179;break c}B=0;sa=B;B=0;if(sa&1){Wa=ha;Ya=ha;Za=ta;Z=180;break c}k[ha>>2]=31308;k[ha+4>>2]=31872;rd[qa&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 623:{ha=Qqa(72)|0;B=0;va(461,ha|0);ta=B;B=0;if(ta&1){_a=ha;Z=198;break c}ta=ha+48|0;B=0;va(462,ta|0);sa=B;B=0;if(sa&1){$a=ha;ab=ha;Z=191;break c}B=0;sa=B;B=0;if(sa&1){bb=ha;cb=ha;db=ta;Z=192;break c}k[ha>>2]=30656;k[ha+4>>2]=31220;rd[oa&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 619:{ha=Qqa(72)|0;B=0;va(461,ha|0);ta=B;B=0;if(ta&1){fb=ha;Z=210;break c}ta=ha+48|0;B=0;va(462,ta|0);sa=B;B=0;if(sa&1){gb=ha;hb=ha;Z=203;break c}B=0;sa=B;B=0;if(sa&1){ib=ha;jb=ha;kb=ta;Z=204;break c}k[ha>>2]=29448;k[ha+4>>2]=30012;rd[Da&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 556:{ha=Qqa(12)|0;B=0;va(463,ha|0);ta=B;B=0;if(ta&1){lb=ha;Z=217;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 561:{ha=Qqa(16)|0;B=0;va(464,ha|0);ta=B;B=0;if(ta&1){mb=ha;Z=223;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 574:{ha=Qqa(12)|0;B=0;va(465,ha|0);ta=B;B=0;if(ta&1){nb=ha;Z=229;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 559:{ha=Qqa(32)|0;B=0;va(466,ha|0);ta=B;B=0;if(ta&1){ob=ha;Z=235;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 697:{ha=Qqa(24)|0;B=0;va(467,ha|0);ta=B;B=0;if(ta&1){pb=ha;Z=241;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 622:{ha=Qqa(16)|0;B=0;va(468,ha|0);ta=B;B=0;if(ta&1){qb=ha;Z=247;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 626:{ha=Qqa(16)|0;B=0;va(469,ha|0);ta=B;B=0;if(ta&1){rb=ha;Z=253;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 624:{ha=Qqa(16)|0;B=0;va(470,ha|0);ta=B;B=0;if(ta&1){sb=ha;Z=259;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 620:{ha=Qqa(16)|0;B=0;va(471,ha|0);ta=B;B=0;if(ta&1){tb=ha;Z=265;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 610:{ha=Qqa(128)|0;B=0;va(472,ha|0);ta=B;B=0;if(ta&1){ub=ha;Z=271;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 588:{ha=Qqa(48)|0;B=0;va(473,ha|0);ta=B;B=0;if(ta&1){vb=ha;Z=277;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 593:{ha=Qqa(52)|0;B=0;va(474,ha|0);ta=B;B=0;if(ta&1){wb=ha;Z=283;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}case 594:{ha=Qqa(28)|0;B=0;va(475,ha|0);ta=B;B=0;if(ta&1){xb=ha;Z=289;break c}rd[k[(k[ha>>2]|0)+28>>2]&511](ha,b,c,d);k[f>>2]=ha;ta=k[z>>2]|0;if((ta|0)==(k[pa>>2]|0))uh(a,f);else{k[ta>>2]=ha;k[z>>2]=(k[z>>2]|0)+4}break}default:{yb=Ea;Z=290;break c}}while(0);Ca=Ca+1|0;if((Ca|0)>=(na|0)){Z=318;break}else n=Ea}switch(Z|0){case 127:{Ea=Rb()|0;n=Q;Sqa(Fa);_=n;$=Ea;Qb($|0);break}case 133:{Ea=Rb()|0;n=Q;Sqa(Ga);_=n;$=Ea;Qb($|0);break}case 139:{Ea=Rb()|0;n=Q;Sqa(Ha);_=n;$=Ea;Qb($|0);break}case 145:{Ea=Rb()|0;n=Q;Sqa(Ja);_=n;$=Ea;Qb($|0);break}case 151:{Ea=Rb()|0;n=Q;Sqa(Ka);_=n;$=Ea;Qb($|0);break}case 157:{Ea=Rb()|0;n=Q;Sqa(La);_=n;$=Ea;Qb($|0);break}case 163:{Ea=Rb()|0;n=Q;Sqa(Ma);_=n;$=Ea;Qb($|0);break}case 167:{Ea=Rb()|0;Bb=Q;Cb=Ea;Db=Pa;Eb=Oa;Z=169;break}case 168:{Oa=Rb()|0;Pa=Q;Tq(Sa);Bb=Pa;Cb=Oa;Db=Ra;Eb=Qa;Z=169;break}case 174:{Qa=Rb()|0;Fb=Na;Gb=Q;Hb=Qa;Z=175;break}case 179:{Qa=Rb()|0;Ib=Q;Jb=Qa;Kb=Va;Lb=Ua;Z=181;break}case 180:{Ua=Rb()|0;Va=Q;Tq(Za);Ib=Va;Jb=Ua;Kb=Ya;Lb=Wa;Z=181;break}case 186:{Wa=Rb()|0;Mb=Ta;Nb=Q;Ob=Wa;Z=187;break}case 191:{Wa=Rb()|0;Pb=Q;Sb=Wa;Tb=ab;Ub=$a;Z=193;break}case 192:{$a=Rb()|0;ab=Q;Tq(db);Pb=ab;Sb=$a;Tb=cb;Ub=bb;Z=193;break}case 198:{bb=Rb()|0;Vb=_a;Wb=Q;Xb=bb;Z=199;break}case 203:{bb=Rb()|0;Yb=Q;Zb=bb;_b=hb;$b=gb;Z=205;break}case 204:{gb=Rb()|0;hb=Q;Tq(kb);Yb=hb;Zb=gb;_b=jb;$b=ib;Z=205;break}case 210:{ib=Rb()|0;ac=fb;bc=Q;cc=ib;Z=211;break}case 217:{ib=Rb()|0;fb=Q;Sqa(lb);_=fb;$=ib;Qb($|0);break}case 223:{ib=Rb()|0;fb=Q;Sqa(mb);_=fb;$=ib;Qb($|0);break}case 229:{ib=Rb()|0;fb=Q;Sqa(nb);_=fb;$=ib;Qb($|0);break}case 235:{ib=Rb()|0;fb=Q;Sqa(ob);_=fb;$=ib;Qb($|0);break}case 241:{ib=Rb()|0;fb=Q;Sqa(pb);_=fb;$=ib;Qb($|0);break}case 247:{ib=Rb()|0;fb=Q;Sqa(qb);_=fb;$=ib;Qb($|0);break}case 253:{ib=Rb()|0;fb=Q;Sqa(rb);_=fb;$=ib;Qb($|0);break}case 259:{ib=Rb()|0;fb=Q;Sqa(sb);_=fb;$=ib;Qb($|0);break}case 265:{ib=Rb()|0;fb=Q;Sqa(tb);_=fb;$=ib;Qb($|0);break}case 271:{ib=Rb()|0;fb=Q;Sqa(ub);_=fb;$=ib;Qb($|0);break}case 277:{ib=Rb()|0;fb=Q;Sqa(vb);_=fb;$=ib;Qb($|0);break}case 283:{ib=Rb()|0;fb=Q;Sqa(wb);_=fb;$=ib;Qb($|0);break}case 289:{ib=Rb()|0;fb=Q;Sqa(xb);_=fb;$=ib;Qb($|0);break}case 290:{ib=s+56|0;fb=s+4|0;k[s>>2]=27524;k[ib>>2]=27544;B=0;wa(508,s+56|0,fb|0);xb=B;B=0;if(xb&1){xb=Rb()|0;dc=Q;ec=xb;vva(ib);Qb(ec|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[ib>>2]=27488;B=0;va(448,fb|0);xb=B;B=0;do if(xb&1){wb=Rb()|0;fc=Q;gc=wb}else{k[fb>>2]=27560;wb=s+36|0;k[wb>>2]=0;k[wb+4>>2]=0;k[wb+8>>2]=0;k[wb+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,fb|0,f|0);vb=B;B=0;if(vb&1){vb=Rb()|0;ub=Q;Yua(f);Yua(wb);Ava(fb);fc=ub;gc=vb;break}Yua(f);B=0;vb=Ia(40,s|0,65196,31)|0;ub=B;B=0;d:do if(((((!(ub&1)?(B=0,tb=Xa(242,vb|0,yb|0)|0,sb=B,B=0,!(sb&1)):0)?(B=0,sb=Ia(40,tb|0,160061,2)|0,tb=B,B=0,!(tb&1)):0)?(B=0,tb=ya(427,yb|0)|0,rb=B,B=0,!(rb&1)):0)?(rb=Lta(tb)|0,B=0,qb=Ia(40,sb|0,tb|0,rb|0)|0,rb=B,B=0,!(rb&1)):0)?(B=0,Xa(239,qb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,t|0,65122,73);rb=B;B=0;do if(!(rb&1)){B=0;eb(502,u|0,149525,8);tb=B;B=0;if(tb&1){tb=Rb()|0;sb=Q;Yua(t);hc=tb;ic=sb;break}B=0;wa(510,v|0,fb|0);sb=B;B=0;if(sb&1){sb=Rb()|0;jc=1;kc=Q;lc=sb}else{B=0;ua(163,qb|0,t|0,u|0,295,v|0);sb=B;B=0;if(sb&1)mc=1;else{B=0;eb(503,qb|0,1240,229);B=0;mc=0}sb=Rb()|0;tb=Q;Yua(v);jc=mc;kc=tb;lc=sb}Yua(u);Yua(t);if(jc){hc=lc;ic=kc}else{nc=kc;oc=lc;break d}}else{sb=Rb()|0;hc=sb;ic=Q}while(0);zb(qb|0);nc=ic;oc=hc}else Z=309;while(0);if((Z|0)==309){vb=Rb()|0;nc=Q;oc=vb}k[s>>2]=27468;k[ib>>2]=27488;k[fb>>2]=27560;Yua(wb);Ava(fb);vva(ib);_=nc;$=oc;Qb($|0)}while(0);dc=fc;ec=gc;vva(ib);Qb(ec|0);break}case 318:{r=e;return}}if((Z|0)==169){Qo(Db);Fb=Eb;Gb=Bb;Hb=Cb;Z=175}else if((Z|0)==181){Qo(Kb);Mb=Lb;Nb=Ib;Ob=Jb;Z=187}else if((Z|0)==193){Qo(Tb);Vb=Ub;Wb=Pb;Xb=Sb;Z=199}else if((Z|0)==205){Qo(_b);ac=$b;bc=Yb;cc=Zb;Z=211}if((Z|0)==175){Sqa(Fb);_=Gb;$=Hb;Qb($|0)}else if((Z|0)==187){Sqa(Mb);_=Nb;$=Ob;Qb($|0)}else if((Z|0)==199){Sqa(Vb);_=Wb;$=Xb;Qb($|0)}else if((Z|0)==211){Sqa(ac);_=bc;$=cc;Qb($|0)}}function mh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;if(!b)return 1;c=k[a>>2]|0;d=a+4|0;a=k[d>>2]|0;e=a;a:do if((c|0)==(a|0))f=c;else{g=c;while(1){if((k[g>>2]|0)==(b|0)){f=g;break a}g=g+4|0;if((g|0)==(a|0)){f=a;break}}}while(0);a=k[f>>2]|0;if(!a)h=e;else{Ec[k[(k[a>>2]|0)+4>>2]&1023](a);h=k[d>>2]|0}a=f+4|0;e=h-a|0;UEa(f|0,a|0,e|0)|0;a=f+(e>>2<<2)|0;e=k[d>>2]|0;if((e|0)==(a|0))return 1;k[d>>2]=e+(~((e+-4-a|0)>>>2)<<2);return 1}function nh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,65228,14)|0;p=B;B=0;if(((!(p&1)?(p=a+4|0,B=0,q=Xa(243,o|0,(k[p>>2]|0)-(k[a>>2]|0)>>2|0)|0,o=B,B=0,!(o&1)):0)?(B=0,Ia(40,q|0,65243,9)|0,q=B,B=0,!(q&1)):0)?(B=0,wa(510,e|0,g|0),q=B,B=0,!(q&1)):0){B=0;ya(425,e|0)|0;q=B;B=0;if(q&1){q=Rb()|0;o=Q;Yua(e);s=q;t=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);o=k[a>>2]|0;if(o>>>0<(k[p>>2]|0)>>>0)u=o;else{r=b;return}do{o=k[u>>2]|0;Ec[k[(k[o>>2]|0)+12>>2]&1023](o);u=u+4|0}while(u>>>0<(k[p>>2]|0)>>>0);r=b;return}p=Rb()|0;s=p;t=Q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function oh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,65228,14)|0;p=B;B=0;if(((!(p&1)?(p=a+4|0,B=0,q=Xa(243,o|0,(k[p>>2]|0)-(k[a>>2]|0)>>2|0)|0,o=B,B=0,!(o&1)):0)?(B=0,Ia(40,q|0,65243,9)|0,q=B,B=0,!(q&1)):0)?(B=0,wa(510,e|0,g|0),q=B,B=0,!(q&1)):0){B=0;ya(425,e|0)|0;q=B;B=0;if(q&1){q=Rb()|0;o=Q;Yua(e);s=q;t=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);o=k[a>>2]|0;if(o>>>0<(k[p>>2]|0)>>>0)u=o;else{r=b;return}do{o=k[u>>2]|0;Ec[k[(k[o>>2]|0)+8>>2]&1023](o);u=u+4|0}while(u>>>0<(k[p>>2]|0)>>>0);r=b;return}p=Rb()|0;s=p;t=Q;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function ph(a,b){a=a|0;b=b|0;var c=0;c=k[(k[a>>2]|0)+(b<<2)>>2]|0;return Hc[k[(k[c>>2]|0)+20>>2]&511](c)|0}function qh(a,b){a=a|0;b=b|0;return k[(k[a>>2]|0)+(b<<2)>>2]|0}function rh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;d=r;r=r+368|0;e=d+356|0;f=d+352|0;g=d+216|0;h=d+200|0;i=d+48|0;j=d+36|0;l=d+64|0;m=d+24|0;n=d+12|0;o=d;if((k[a+16>>2]|0)!=0?(p=(k[a+4>>2]|0)-(k[a>>2]|0)>>2,p>>>0<=(k[a+24>>2]|0)>>>0):0){if(UY(f,c,k[a+28>>2]|0,p)|0){p=k[(k[a+32>>2]|0)+(k[f>>2]<<2)>>2]|0;if(!b){q=k[a>>2]|0;s=q+(p<<2)|0;t=k[s>>2]|0;r=d;return t|0}k[b>>2]=p;q=k[a>>2]|0;s=q+(p<<2)|0;t=k[s>>2]|0;r=d;return t|0}t=l+56|0;d=l+4|0;k[l>>2]=27524;k[t>>2]=27544;B=0;wa(508,l+56|0,d|0);s=B;B=0;if(s&1){s=Rb()|0;u=Q;v=s;vva(t);Qb(v|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[t>>2]=27488;B=0;va(448,d|0);s=B;B=0;do if(s&1){p=Rb()|0;w=Q;x=p}else{k[d>>2]=27560;p=l+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;b=Q;Yua(e);Yua(p);Ava(d);w=b;x=q;break}Yua(e);B=0;q=Ia(40,l|0,65316,30)|0;b=B;B=0;a:do if(((((!(b&1)?(B=0,f=Xa(242,q|0,c|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,f|0,65347,12)|0,f=B,B=0,!(f&1)):0)?(B=0,f=ya(427,k[a+12>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(f)|0,B=0,A=Ia(40,y|0,f|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,m|0,65122,73);z=B;B=0;do if(!(z&1)){B=0;eb(502,n|0,65302,13);f=B;B=0;if(f&1){f=Rb()|0;y=Q;Yua(m);C=f;D=y;break}B=0;wa(510,o|0,d|0);y=B;B=0;if(y&1){y=Rb()|0;E=1;F=Q;G=y}else{B=0;ua(163,A|0,m|0,n|0,403,o|0);y=B;B=0;if(y&1)H=1;else{B=0;eb(503,A|0,1240,229);B=0;H=0}y=Rb()|0;f=Q;Yua(o);E=H;F=f;G=y}Yua(n);Yua(m);if(E){C=G;D=F}else{I=F;J=G;break a}}else{y=Rb()|0;C=y;D=Q}while(0);zb(A|0);I=D;J=C}else K=46;while(0);if((K|0)==46){q=Rb()|0;I=Q;J=q}k[l>>2]=27468;k[t>>2]=27488;k[d>>2]=27560;Yua(p);Ava(d);vva(t);L=I;M=J;Qb(M|0)}while(0);u=w;v=x;vva(t);Qb(v|0)}v=g+56|0;t=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,t|0);x=B;B=0;if(x&1){x=Rb()|0;N=Q;O=x;vva(v);Qb(O|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,t|0);x=B;B=0;do if(x&1){w=Rb()|0;P=Q;R=w}else{k[t>>2]=27560;w=g+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);u=B;B=0;if(u&1){u=Rb()|0;J=Q;Yua(e);Yua(w);Ava(t);P=J;R=u;break}Yua(e);B=0;u=Ia(40,g|0,65253,48)|0;J=B;B=0;b:do if(!(J&1)?(B=0,Xa(239,u|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,h|0,65122,73);d=B;B=0;do if(!(d&1)){B=0;eb(502,i|0,65302,13);l=B;B=0;if(l&1){l=Rb()|0;C=Q;Yua(h);S=l;T=C;break}B=0;wa(510,j|0,t|0);C=B;B=0;if(C&1){C=Rb()|0;U=Q;V=C;W=1}else{B=0;ua(163,I|0,h|0,i|0,399,j|0);C=B;B=0;if(C&1)X=1;else{B=0;eb(503,I|0,1240,229);B=0;X=0}C=Rb()|0;l=Q;Yua(j);U=l;V=C;W=X}Yua(i);Yua(h);if(W){S=V;T=U}else{Y=V;Z=U;break b}}else{C=Rb()|0;S=C;T=Q}while(0);zb(I|0);Y=S;Z=T}else K=18;while(0);if((K|0)==18){u=Rb()|0;Y=u;Z=Q}k[g>>2]=27468;k[v>>2]=27488;k[t>>2]=27560;Yua(w);Ava(t);vva(v);L=Z;M=Y;Qb(M|0)}while(0);N=P;O=R;vva(v);Qb(O|0);return 0}function sh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;b=a+4|0;c=k[b>>2]|0;a:do if((c|0)!=(k[a>>2]|0)){d=a+28|0;e=k[d>>2]|0;if(e){Tqa(e);k[d>>2]=0}e=a+32|0;f=k[e>>2]|0;if(f){Tqa(f);k[e>>2]=0}f=k[b>>2]|0;g=k[a>>2]|0;h=f-g>>2;i=h>>>0>1073741823?-1:h<<2;h=Rqa(i)|0;k[d>>2]=h;h=Rqa(i)|0;k[e>>2]=h;if((f|0)==(g|0)){j=f;l=f}else{f=g;g=h;h=0;while(1){k[g+(h<<2)>>2]=h;i=k[f+(h<<2)>>2]|0;m=Hc[k[(k[i>>2]|0)+16>>2]&511](i)|0;k[(k[d>>2]|0)+(h<<2)>>2]=m;m=h+1|0;i=k[b>>2]|0;n=k[a>>2]|0;if(m>>>0>=i-n>>2>>>0){j=i;l=n;break a}f=n;g=k[e>>2]|0;h=m}}}else{j=c;l=c}while(0);k[a+24>>2]=j-l>>2;k[a+16>>2]=1;return}function th(a){a=a|0;return (k[a+4>>2]|0)-(k[a>>2]|0)>>2|0}function uh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){Oqa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0<e>>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=Qqa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;TEa(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;Sqa(f);return}function vh(a){a=a|0;var b=0,c=0;b=a+8|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=k[a+20>>2]|0;if(b){Mq(b);Sqa(b)}b=k[a+24>>2]|0;if(b){_m(b);Sqa(b)}b=k[a+28>>2]|0;if(b){kn(b);Sqa(b)}b=k[a+32>>2]|0;if(b){jh(b);Sqa(b)}b=k[a+36>>2]|0;if(b){$K(b);Sqa(b)}b=k[a+40>>2]|0;if(b){GI(b);Sqa(b)}b=k[a+44>>2]|0;if(b){XN(b);Sqa(b)}b=k[a+48>>2]|0;if(b){Mo(b);Sqa(b)}b=k[a+16>>2]|0;if(!b)return;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);return}function wh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;a=r;r=r+336|0;f=a+304|0;g=a+184|0;h=a+48|0;j=a+40|0;l=a+325|0;m=a+324|0;n=a+323|0;o=a+322|0;p=a+321|0;q=a+320|0;s=a+319|0;t=a+318|0;u=a+317|0;v=a+316|0;w=a;x=a+28|0;y=a+16|0;z=a+4|0;do switch(e|0){case 499:{Fka(d,j,128764);zka(d,f,129324);zka(d,h,132257);k[g>>2]=497;k[g+4>>2]=500;if(!(i[f>>0]|0))A=2;else{k[g+8>>2]=498;A=3}k[g+(A<<2)>>2]=493;k[g+(A+1<<2)>>2]=515;C=A+3|0;k[g+(A+2<<2)>>2]=517;if((k[j>>2]&-5|0)==754){k[g+(C<<2)>>2]=524;D=A|4}else D=C;E=D;break}case 518:{zka(d,f,129324);zka(d,h,135466);k[g>>2]=497;k[g+4>>2]=500;if(!(i[f>>0]|0))F=2;else{k[g+8>>2]=498;F=3}C=F+1|0;G=g+(F<<2)|0;if(!(i[h>>0]|0)){k[G>>2]=521;k[g+(C<<2)>>2]=509;H=F+2|0}else{k[G>>2]=501;H=C}k[g+(H<<2)>>2]=493;E=H+1|0;break}case 522:{zka(d,f,135466);if(!(i[f>>0]|0)){k[g>>2]=521;k[g+4>>2]=509;I=2}else{k[g>>2]=501;I=1}E=I;break}case 508:{k[g>>2]=504;k[g+4>>2]=505;k[g+8>>2]=506;k[g+12>>2]=493;k[g+16>>2]=492;E=5;break}case 511:{k[g>>2]=510;k[g+4>>2]=382;E=2;break}case 485:{k[g>>2]=484;E=1;break}case 487:{k[g>>2]=493;k[g+4>>2]=520;k[g+8>>2]=486;E=3;break}case 489:{k[g>>2]=484;E=1;break}case 491:{k[g>>2]=490;k[g+4>>2]=520;E=2;break}case 519:{k[g>>2]=493;E=1;break}case 494:{k[g>>2]=493;E=1;break}case 525:{k[g>>2]=526;E=1;break}case 997:{k[g>>2]=998;E=1;break}case 383:{k[g>>2]=382;E=1;break}case 495:{k[g>>2]=496;E=1;break}case 523:{zka(d,f,129324);zka(d,h,132257);zka(d,j,106786);zka(d,l,135466);zka(d,p,134882);zka(d,m,106757);zka(d,o,106728);zka(d,n,132209);zka(d,s,106828);zka(d,q,106859);zka(d,t,132238);zka(d,u,106884);zka(d,v,106809);if(!(i[o>>0]|0))J=0;else{Fka(d,w,128764);k[g>>2]=497;k[g+4>>2]=500;if(!(i[f>>0]|0))K=2;else{k[g+8>>2]=498;K=3}C=K+1|0;k[g+(K<<2)>>2]=517;if((k[w>>2]&-5|0)==754){k[g+(C<<2)>>2]=524;L=K+2|0}else L=C;J=L}do if((i[j>>0]|0)!=0?(k[d+40>>2]|0)==302:0){C=J+1|0;G=g+(J<<2)|0;if(!(i[l>>0]|0)){k[G>>2]=521;k[g+(C<<2)>>2]=509;M=J+2|0;break}else{k[G>>2]=501;M=C;break}}else M=J;while(0);if(!((i[n>>0]|i[m>>0])<<24>>24))N=M;else{k[g+(M<<2)>>2]=510;N=M+1|0}if(!(i[t>>0]|0))O=N;else{k[g+(N<<2)>>2]=382;O=N+1|0}if(!(i[p>>0]|0))P=O;else{k[g+(O<<2)>>2]=529;k[g+(O+1<<2)>>2]=531;k[g+(O+2<<2)>>2]=532;P=O+3|0}if(!(i[q>>0]|0))R=P;else{k[g+(P<<2)>>2]=504;k[g+(P+1<<2)>>2]=507;k[g+(P+2<<2)>>2]=505;k[g+(P+3<<2)>>2]=506;k[g+(P+4<<2)>>2]=492;R=P+5|0}if(!(i[s>>0]|0))S=R;else{k[g+(R<<2)>>2]=496;S=R+1|0}if(!(i[u>>0]|0))T=S;else{k[g+(S<<2)>>2]=998;T=S+1|0}if(!(i[v>>0]|0))U=T;else{k[g+(T<<2)>>2]=526;U=T+1|0}if(((k[d+40>>2]|0)+-301|0)>>>0<2){k[g+(U<<2)>>2]=515;k[g+(U+1<<2)>>2]=516;k[g+(U+2<<2)>>2]=512;k[g+(U+3<<2)>>2]=513;V=U+4|0}else V=U;k[g+(V<<2)>>2]=493;E=V+1|0;break}default:{C=h+56|0;G=h+4|0;k[h>>2]=27524;k[C>>2]=27544;B=0;wa(508,h+56|0,G|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(C);Qb(Y|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[C>>2]=27488;B=0;va(448,G|0);W=B;B=0;do if(W&1){Z=Rb()|0;_=Q;$=Z}else{k[G>>2]=27560;Z=h+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,G|0,f|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(f);Yua(Z);Ava(G);_=ba;$=aa;break}Yua(f);B=0;aa=Ia(40,h|0,110535,15)|0;ba=B;B=0;if((((!(ba&1)?(B=0,ba=ya(427,e|0)|0,ca=B,B=0,!(ca&1)):0)?(ca=Lta(ba)|0,B=0,da=Ia(40,aa|0,ba|0,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Ia(40,da|0,146956,19)|0,da=B,B=0,!(da&1)):0)?(B=0,Xa(239,ca|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,x|0,65553,67);da=B;B=0;do if(!(da&1)){B=0;eb(502,y|0,65621,20);ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(x);ea=ba;fa=aa;break}B=0;wa(510,z|0,G|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ga=Q;ha=aa;ia=1}else{B=0;ua(163,ca|0,x|0,y|0,622,z|0);aa=B;B=0;if(aa&1)ja=1;else{B=0;eb(503,ca|0,1240,229);B=0;ja=0}aa=Rb()|0;ba=Q;Yua(z);ga=ba;ha=aa;ia=ja}Yua(y);Yua(x);if(ia){ea=ha;fa=ga}else{ka=ha;la=ga;k[h>>2]=27468;k[C>>2]=27488;k[G>>2]=27560;Yua(Z);Ava(G);vva(C);Qb(ka|0)}}else{aa=Rb()|0;ea=aa;fa=Q}while(0);zb(ca|0);ka=ea;la=fa;k[h>>2]=27468;k[C>>2]=27488;k[G>>2]=27560;Yua(Z);Ava(G);vva(C);Qb(ka|0)}da=Rb()|0;ka=da;la=Q;k[h>>2]=27468;k[C>>2]=27488;k[G>>2]=27560;Yua(Z);Ava(G);vva(C);Qb(ka|0)}while(0);X=_;Y=$;vva(C);Qb(Y|0)}}while(0);Y=Rqa(E>>>0>1073741823?-1:E<<2)|0;if((E|0)>0)TEa(Y|0,g|0,E<<2|0)|0;if(c)k[c>>2]=E;if(!b){Tqa(Y);r=a;return}else{k[b>>2]=Y;r=a;return}}function xh(a,b){a=a|0;b=b|0;yh(a,b,b);return}function yh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;d=r;r=r+352|0;e=d+328|0;f=d+192|0;g=d+176|0;h=d+24|0;i=d+12|0;j=d+40|0;l=d;m=k[a>>2]|0;a:do if((m|0)>0){n=k[a+8>>2]|0;o=0;while(1){if((k[n+(o<<2)>>2]|0)==(b|0)){p=o;break}o=o+1|0;if((o|0)>=(m|0))break a}if((p|0)!=-1){k[a+12>>2]=p;o=a+44|0;oO(k[o>>2]|0,p,482);oO(k[o>>2]|0,c,477);oO(k[o>>2]|0,b,478);n=a+20|0;q=k[n>>2]|0;s=a+36|0;t=a+24|0;u=a+28|0;v=a+40|0;Nq(q,q,k[s>>2]|0,k[t>>2]|0,k[u>>2]|0,k[v>>2]|0,k[o>>2]|0);q=k[s>>2]|0;fL(q,k[n>>2]|0,q,k[t>>2]|0,k[u>>2]|0,k[v>>2]|0,k[o>>2]|0);if(!(aO(k[o>>2]|0,959)|0)){r=d;return}tO(k[o>>2]|0,c);if(!(DY()|0)){r=d;return}o=j+56|0;v=j+4|0;k[j>>2]=27524;k[o>>2]=27544;B=0;wa(508,j+56|0,v|0);u=B;B=0;if(u&1){u=Rb()|0;w=Q;x=u;vva(o);Qb(x|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[o>>2]=27488;B=0;va(448,v|0);u=B;B=0;do if(u&1){t=Rb()|0;y=Q;z=t}else{k[v>>2]=27560;t=j+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,v|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;n=Q;Yua(e);Yua(t);Ava(v);y=n;z=q;break}Yua(e);B=0;q=Ia(40,j|0,65823,46)|0;n=B;B=0;do if((((!(n&1)?(B=0,s=ya(427,c|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(s)|0,B=0,C=Ia(40,q|0,s|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,Ia(40,C|0,149177,1)|0,C=B,B=0,!(C&1)):0)?(B=0,wa(510,l|0,v|0),C=B,B=0,!(C&1)):0){B=0;ya(425,l|0)|0;C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(l);D=A;E=C;break}Yua(l);k[j>>2]=27468;k[o>>2]=27488;k[v>>2]=27560;Yua(t);Ava(v);vva(o);r=d;return}else F=49;while(0);if((F|0)==49){q=Rb()|0;D=Q;E=q}k[j>>2]=27468;k[o>>2]=27488;k[v>>2]=27560;Yua(t);Ava(v);vva(o);G=D;H=E;Qb(H|0)}while(0);w=y;x=z;vva(o);Qb(x|0)}}while(0);x=f+56|0;z=f+4|0;k[f>>2]=27524;k[x>>2]=27544;B=0;wa(508,f+56|0,z|0);y=B;B=0;if(y&1){y=Rb()|0;I=Q;J=y;vva(x);Qb(J|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[x>>2]=27488;B=0;va(448,z|0);y=B;B=0;do if(y&1){w=Rb()|0;K=Q;L=w}else{k[z>>2]=27560;w=f+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,z|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;D=Q;Yua(e);Yua(w);Ava(z);K=D;L=E;break}Yua(e);B=0;E=Ia(40,f|0,65753,39)|0;D=B;B=0;b:do if((((!(D&1)?(B=0,j=ya(427,b|0)|0,d=B,B=0,!(d&1)):0)?(d=Lta(j)|0,B=0,l=Ia(40,E|0,j|0,d|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,l|0,65793,29)|0,l=B,B=0,!(l&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,g|0,65553,67);l=B;B=0;do if(!(l&1)){B=0;eb(502,h|0,71356,23);j=B;B=0;if(j&1){j=Rb()|0;c=Q;Yua(g);M=c;N=j;break}B=0;wa(510,i|0,z|0);j=B;B=0;if(j&1){j=Rb()|0;O=Q;P=j;R=1}else{B=0;ua(163,d|0,g|0,h|0,292,i|0);j=B;B=0;if(j&1)S=1;else{B=0;eb(503,d|0,1240,229);B=0;S=0}j=Rb()|0;c=Q;Yua(i);O=c;P=j;R=S}Yua(h);Yua(g);if(R){M=O;N=P}else{T=O;U=P;break b}}else{j=Rb()|0;M=Q;N=j}while(0);zb(d|0);T=M;U=N}else F=25;while(0);if((F|0)==25){E=Rb()|0;T=Q;U=E}k[f>>2]=27468;k[x>>2]=27488;k[z>>2]=27560;Yua(w);Ava(z);vva(x);G=T;H=U;Qb(H|0)}while(0);I=K;J=L;vva(x);Qb(J|0)}function zh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0;b=r;r=r+624|0;c=b+608|0;d=b+620|0;e=b+604|0;f=b+588|0;g=b+440|0;h=b+592|0;j=b+304|0;l=b+576|0;m=b+152|0;n=b+288|0;o=b+16|0;q=b;i[d>>0]=0;k[f>>2]=0;s=g+56|0;t=g+4|0;k[g>>2]=27524;k[s>>2]=27544;B=0;wa(508,g+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=g+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;Ia(40,g|0,136216,25)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,h|0,t|0),C=B,B=0,!(C&1)):0){B=0;ya(425,h|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(h);E=D;F=C;break}Yua(h);k[g>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);C=a+44|0;cO(k[C>>2]|0,e,476);i_(f,k[C>>2]|0,k[e>>2]|0,0);D=a+16|0;SX(k[D>>2]|0,3,0);Ec[k[f>>2]&1023](a);SX(k[D>>2]|0,4,0);SX(k[D>>2]|0,5,0);k_(a);SX(k[D>>2]|0,6,0);bO(k[C>>2]|0,d,331);if(!(i[d>>0]|0)){r=b;return}G=+TX(k[D>>2]|0,3,4);H=+UX(k[D>>2]|0,3,4);I=+YX(k[D>>2]|0,4);D=j+56|0;C=j+4|0;k[j>>2]=27524;k[D>>2]=27544;B=0;wa(508,j+56|0,C|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(D);Qb(L|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[D>>2]=27488;B=0;va(448,C|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[C>>2]=27560;M=j+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(c);Yua(M);Ava(C);N=R;O=P;break}Yua(c);B=0;P=Ia(40,j|0,65870,32)|0;R=B;B=0;do if(((!(R&1)?(B=0,S=Sa(1,P|0,+G)|0,T=B,B=0,!(T&1)):0)?(B=0,Ia(40,S|0,65903,9)|0,S=B,B=0,!(S&1)):0)?(B=0,wa(510,l|0,C|0),S=B,B=0,!(S&1)):0){B=0;ya(425,l|0)|0;S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(l);U=T;V=S;break}Yua(l);k[j>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(M);Ava(C);vva(D);S=m+56|0;T=m+4|0;k[m>>2]=27524;k[S>>2]=27544;B=0;wa(508,m+56|0,T|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(S);Qb(Y|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);W=B;B=0;do if(W&1){Z=Rb()|0;_=Q;$=Z}else{k[T>>2]=27560;Z=m+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,T|0,c|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(c);Yua(Z);Ava(T);_=ba;$=aa;break}Yua(c);B=0;aa=Ia(40,m|0,65913,32)|0;ba=B;B=0;do if(ba&1)ca=65;else{B=0;da=Sa(1,aa|0,+H)|0;ea=B;B=0;if(ea&1){ca=65;break}B=0;Ia(40,da|0,65946,7)|0;da=B;B=0;if(da&1){ca=65;break}B=0;wa(510,n|0,T|0);da=B;B=0;if(da&1){ca=65;break}B=0;ya(425,n|0)|0;da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(n);fa=ea;ga=da;break}Yua(n);k[m>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(Z);Ava(T);vva(S);da=o+56|0;ea=o+4|0;k[o>>2]=27524;k[da>>2]=27544;B=0;wa(508,o+56|0,ea|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;ja=ha;vva(da);Qb(ja|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[da>>2]=27488;B=0;va(448,ea|0);ha=B;B=0;do if(ha&1){ka=Rb()|0;la=Q;ma=ka}else{k[ea>>2]=27560;ka=o+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ea|0,c|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(c);Yua(ka);Ava(ea);la=oa;ma=na;break}Yua(c);B=0;na=Ia(40,o|0,65954,32)|0;oa=B;B=0;do if(oa&1)ca=68;else{B=0;pa=Sa(1,na|0,+I)|0;qa=B;B=0;if(qa&1){ca=68;break}B=0;Ia(40,pa|0,65987,7)|0;pa=B;B=0;if(pa&1){ca=68;break}B=0;wa(510,q|0,ea|0);pa=B;B=0;if(pa&1){ca=68;break}B=0;ya(425,q|0)|0;pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;Yua(q);ra=qa;sa=pa;break}Yua(q);k[o>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);pa=a+48|0;qa=k[pa>>2]|0;ta=Qqa(48)|0;B=0;ua=ya(428,qa|0)|0;xa=B;B=0;do if(!(xa&1)){k[ta>>2]=27904;k[ta+4>>2]=ua+1;p[ta+16>>3]=G;k[ta+32>>2]=0;p[ta+40>>3]=0.0;k[ta+24>>2]=1;k[ta+28>>2]=1;B=0;wa(512,ta+8|0,334);za=B;B=0;if(za&1)break;ih(qa,ta)|0;za=k[pa>>2]|0;Aa=Qqa(48)|0;B=0;Ba=ya(428,za|0)|0;Ca=B;B=0;do if(!(Ca&1)){k[Aa>>2]=27904;k[Aa+4>>2]=Ba+1;p[Aa+16>>3]=I;k[Aa+32>>2]=0;p[Aa+40>>3]=0.0;k[Aa+24>>2]=1;k[Aa+28>>2]=1;B=0;wa(512,Aa+8|0,332);Da=B;B=0;if(Da&1)break;ih(za,Aa)|0;Da=k[pa>>2]|0;Ea=Qqa(48)|0;B=0;Fa=ya(428,Da|0)|0;Ga=B;B=0;do if(!(Ga&1)){k[Ea>>2]=27904;k[Ea+4>>2]=Fa+1;p[Ea+16>>3]=H;k[Ea+32>>2]=0;p[Ea+40>>3]=0.0;k[Ea+24>>2]=1;k[Ea+28>>2]=1;B=0;wa(512,Ea+8|0,333);Ha=B;B=0;if(Ha&1)break;ih(Da,Ea)|0;r=b;return}while(0);Da=Rb()|0;Fa=Q;Sqa(Ea);Ja=Fa;Ka=Da;Qb(Ka|0)}while(0);za=Rb()|0;Ba=Q;Sqa(Aa);Ja=Ba;Ka=za;Qb(Ka|0)}while(0);pa=Rb()|0;qa=Q;Sqa(ta);Ja=qa;Ka=pa;Qb(Ka|0)}while(0);if((ca|0)==68){na=Rb()|0;ra=Q;sa=na}k[o>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);Ja=ra;Ka=sa;Qb(Ka|0)}while(0);ia=la;ja=ma;vva(da);Qb(ja|0)}while(0);if((ca|0)==65){aa=Rb()|0;fa=Q;ga=aa}k[m>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(Z);Ava(T);vva(S);Ja=fa;Ka=ga;Qb(Ka|0)}while(0);X=_;Y=$;vva(S);Qb(Y|0)}else ca=62;while(0);if((ca|0)==62){P=Rb()|0;U=Q;V=P}k[j>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(M);Ava(C);vva(D);Ja=U;Ka=V;Qb(Ka|0)}while(0);K=N;L=O;vva(D);Qb(L|0)}else ca=59;while(0);if((ca|0)==59){A=Rb()|0;E=Q;F=A}k[g>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Ja=E;Ka=F;Qb(Ka|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function Ah(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[c>>2]=0;fO(k[a+44>>2]|0,c,957);f=oY(k[c>>2]|0,108824,1)|0;k[d>>2]=0;Bh(a,0,d,2);g=Rqa(k[d>>2]|0)|0;k[e>>2]=g;Bh(a,e,0,0);k[e>>2]=g;jta(g,k[d>>2]|0,1,f)|0;pY(f,k[c>>2]|0);f=k[e>>2]|0;if(f)Tqa(f);k[e>>2]=0;e=k[c>>2]|0;if(!e){r=b;return}Tqa(e);r=b;return}function Bh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;n=(d|0)==1;do if(n){o=a+16|0;p=k[o>>2]|0;if(p)Ec[k[(k[p>>2]|0)+4>>2]&1023](p);p=a+36|0;q=k[p>>2]|0;if(q){$K(q);Sqa(q)}q=a+40|0;s=k[q>>2]|0;if(s){GI(s);Sqa(s)}s=a+44|0;t=k[s>>2]|0;if(t){XN(t);Sqa(t)}t=a+32|0;u=k[t>>2]|0;if(u){jh(u);Sqa(u)}u=a+48|0;v=k[u>>2]|0;if(v){Mo(v);Sqa(v)}v=a+24|0;w=k[v>>2]|0;if(w){_m(w);Sqa(w)}w=a+28|0;x=k[w>>2]|0;if(x){kn(x);Sqa(x)}x=a+20|0;y=k[x>>2]|0;if(y){Mq(y);Sqa(y)}y=a+8|0;z=k[y>>2]|0;if(z)Tqa(z);k[y>>2]=0;y=Qqa(200)|0;B=0;va(476,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Sqa(y);C=A;D=z;Qb(D|0)}k[o>>2]=y;y=Qqa(36)|0;B=0;va(477,y|0);o=B;B=0;if(o&1){o=Rb()|0;z=Q;Sqa(y);C=z;D=o;Qb(D|0)}k[p>>2]=y;y=Qqa(36)|0;B=0;va(478,y|0);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Sqa(y);C=o;D=p;Qb(D|0)}k[q>>2]=y;y=Qqa(4064)|0;B=0;va(479,y|0);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Sqa(y);C=p;D=q;Qb(D|0)}k[s>>2]=y;y=Qqa(36)|0;B=0;va(480,y|0);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Sqa(y);C=q;D=s;Qb(D|0)}k[y+12>>2]=546;k[t>>2]=y;y=Qqa(36)|0;B=0;va(481,y|0);t=B;B=0;if(t&1){t=Rb()|0;s=Q;Sqa(y);C=s;D=t;Qb(D|0)}k[u>>2]=y;y=Qqa(36)|0;B=0;va(482,y|0);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Sqa(y);C=t;D=u;Qb(D|0)}k[v>>2]=y;y=Qqa(36)|0;B=0;va(483,y|0);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Sqa(y);C=u;D=v;Qb(D|0)}k[w>>2]=y;y=Qqa(36)|0;B=0;va(484,y|0);w=B;B=0;if(!(w&1)){k[x>>2]=y;break}x=Rb()|0;w=Q;Sqa(y);C=w;D=x;Qb(D|0)}while(0);a:do switch(d|0){case 0:{x=k[b>>2]|0;i[x>>0]=1;i[x+1>>0]=0;i[x+2>>0]=0;i[x+3>>0]=0;x=(k[b>>2]|0)+4|0;k[b>>2]=x;w=a+4|0;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=(k[b>>2]|0)+4|0;k[b>>2]=y;x=a+12|0;w=l[x>>0]|l[x+1>>0]<<8|l[x+2>>0]<<16|l[x+3>>0]<<24;i[y>>0]=w;i[y+1>>0]=w>>8;i[y+2>>0]=w>>16;i[y+3>>0]=w>>24;w=(k[b>>2]|0)+4|0;k[b>>2]=w;y=l[a>>0]|l[a+1>>0]<<8|l[a+2>>0]<<16|l[a+3>>0]<<24;i[w>>0]=y;i[w+1>>0]=y>>8;i[w+2>>0]=y>>16;i[w+3>>0]=y>>24;y=(k[b>>2]|0)+4|0;k[b>>2]=y;w=a+8|0;x=(k[w>>2]|0)==0;i[y>>0]=x&1;y=(k[b>>2]|0)+1|0;k[b>>2]=y;if(x)E=w;else{TEa(y|0,k[w>>2]|0,k[a>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[a>>2]<<2);E=w}break}case 2:{w=a+8|0;y=(k[w>>2]|0)==0;x=(k[c>>2]|0)+17|0;k[c>>2]=x;if(y)E=w;else{k[c>>2]=x+(k[a>>2]<<2);E=w}break}default:{if(n){w=(k[b>>2]|0)+4|0;k[b>>2]=w;x=a+4|0;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=(k[b>>2]|0)+4|0;k[b>>2]=y;x=a+12|0;w=l[y>>0]|l[y+1>>0]<<8|l[y+2>>0]<<16|l[y+3>>0]<<24;i[x>>0]=w;i[x+1>>0]=w>>8;i[x+2>>0]=w>>16;i[x+3>>0]=w>>24;w=(k[b>>2]|0)+4|0;k[b>>2]=w;x=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[a>>0]=x;i[a+1>>0]=x>>8;i[a+2>>0]=x>>16;i[a+3>>0]=x>>24;w=k[b>>2]|0;y=w+4|0;k[b>>2]=y;v=a+8|0;u=i[y>>0]|0;k[b>>2]=w+5;if(u&1){E=v;break a}u=Rqa(x>>>0>1073741823?-1:x<<2)|0;k[v>>2]=u;w=k[b>>2]|0;y=x<<2;TEa(u|0,w|0,y|0)|0;k[b>>2]=w+y;E=v;break a}v=g+56|0;y=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,y|0);w=B;B=0;if(w&1){w=Rb()|0;F=Q;G=w;vva(v);Qb(G|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,y|0);w=B;B=0;do if(w&1){u=Rb()|0;H=Q;I=u}else{k[y>>2]=27560;u=g+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,y|0,f|0);x=B;B=0;if(x&1){x=Rb()|0;t=Q;Yua(f);Yua(u);Ava(y);H=t;I=x;break}Yua(f);B=0;x=Ia(40,g|0,143951,43)|0;t=B;B=0;b:do if(!(t&1)?(B=0,Xa(239,x|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,65553,67);q=B;B=0;do if(!(q&1)){B=0;eb(502,j|0,149525,8);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Yua(h);J=o;K=p;break}B=0;wa(510,m|0,y|0);p=B;B=0;if(p&1){p=Rb()|0;L=Q;M=p;N=1}else{B=0;ua(163,s|0,h|0,j|0,757,m|0);p=B;B=0;if(p&1)O=1;else{B=0;eb(503,s|0,1240,229);B=0;O=0}p=Rb()|0;o=Q;Yua(m);L=o;M=p;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{p=Rb()|0;J=Q;K=p}while(0);zb(s|0);P=J;R=K}else S=58;while(0);if((S|0)==58){x=Rb()|0;P=Q;R=x}k[g>>2]=27468;k[v>>2]=27488;k[y>>2]=27560;Yua(u);Ava(y);vva(v);C=P;D=R;Qb(D|0)}while(0);F=H;G=I;vva(v);Qb(G|0)}}while(0);G=k[a+16>>2]|0;rd[k[(k[G>>2]|0)+28>>2]&511](G,b,c,d);G=a+36|0;lh(k[G>>2]|0,b,c,d);I=a+40|0;lh(k[I>>2]|0,b,c,d);H=a+44|0;ZN(k[H>>2]|0,b,c,d);F=a+32|0;lh(k[F>>2]|0,b,c,d);lh(k[a+48>>2]|0,b,c,d);D=a+24|0;lh(k[D>>2]|0,b,c,d);R=a+28|0;lh(k[R>>2]|0,b,c,d);P=a+20|0;lh(k[P>>2]|0,b,c,d);if(!n){r=e;return}Oq(k[P>>2]|0);eL(k[G>>2]|0);HI(k[I>>2]|0);if((k[a>>2]|0)>0){n=0;do{d=k[(k[E>>2]|0)+(n<<2)>>2]|0;yh(a,d,d);if(!n)BZ(k[R>>2]|0,k[H>>2]|0);YZ(k[D>>2]|0,k[F>>2]|0,k[H>>2]|0,d);zZ(k[D>>2]|0,k[H>>2]|0,d);XZ(k[P>>2]|0,k[G>>2]|0,k[D>>2]|0,k[R>>2]|0,k[I>>2]|0,k[H>>2]|0)|0;n=n+1|0}while((n|0)<(k[a>>2]|0))}n=k[(k[E>>2]|0)+(k[a+12>>2]<<2)>>2]|0;yh(a,n,n);r=e;return}function Ch(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+208|0;c=b+188|0;d=b+184|0;e=b+180|0;f=b+176|0;g=b+40|0;h=b+24|0;i=b+12|0;j=b;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;l=a+44|0;fO(k[l>>2]|0,e,957);m=oY(k[e>>2]|0,65363,0)|0;if(!m){n=k[e>>2]|0;if(n)Tqa(n);k[e>>2]=0;r=b;return}dta(m,0,2)|0;n=hta(m)|0;dta(m,0,0)|0;o=Rqa(n)|0;k[f>>2]=o;if((ata(o,n,1,m)|0)==1){n=k[f>>2]|0;lO(k[l>>2]|0,d,951);Bh(a,f,0,1);rO(k[l>>2]|0,k[d>>2]|0,951);k[f>>2]=n;pY(m,k[e>>2]|0);m=k[e>>2]|0;if(m)Tqa(m);k[e>>2]=0;e=k[f>>2]|0;if(e)Tqa(e);k[f>>2]=0;r=b;return}b=g+56|0;f=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;p=Q;q=e;vva(b);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,f|0);e=B;B=0;do if(e&1){m=Rb()|0;s=Q;t=m}else{k[f>>2]=27560;m=g+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,f|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;d=Q;Yua(c);Yua(m);Ava(f);s=d;t=n;break}Yua(c);B=0;n=Ia(40,g|0,65995,46)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,65553,67);d=B;B=0;do if(!(d&1)){B=0;eb(502,i|0,66042,7);l=B;B=0;if(l&1){l=Rb()|0;a=Q;Yua(h);u=a;v=l;break}B=0;wa(510,j|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;w=Q;x=l;y=1}else{B=0;ua(163,n|0,h|0,i|0,707,j|0);l=B;B=0;if(l&1)z=1;else{B=0;eb(503,n|0,1240,229);B=0;z=0}l=Rb()|0;a=Q;Yua(j);w=a;x=l;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[b>>2]=27488;k[f>>2]=27560;Yua(m);Ava(f);vva(b);Qb(C|0)}}else{l=Rb()|0;u=Q;v=l}while(0);zb(n|0);A=u;C=v;k[g>>2]=27468;k[b>>2]=27488;k[f>>2]=27560;Yua(m);Ava(f);vva(b);Qb(C|0)}d=Rb()|0;A=Q;C=d;k[g>>2]=27468;k[b>>2]=27488;k[f>>2]=27560;Yua(m);Ava(f);vva(b);Qb(C|0)}while(0);p=s;q=t;vva(b);Qb(q|0)}function Dh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+176|0;c=b+160|0;d=b+156|0;e=b+152|0;f=b+16|0;g=b;k[d>>2]=0;k[e>>2]=0;a:do if(CY()|0){h=f+56|0;i=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);B=0;Ia(40,f|0,66050,31)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,g|0,i|0),s=B,B=0,!(s&1)):0){B=0;ya(425,g|0)|0;s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(g);u=s;v=t;break}else{Yua(g);k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);break a}}else w=14;while(0);if((w|0)==14){q=Rb()|0;u=q;v=Q}k[f>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);x=u;y=v;Qb(x|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}while(0);UZ(d,a,339,628);UZ(e,a,64,628);m=Qqa(8)|0;p=a+28|0;B=0;o=ya(429,k[p>>2]|0)|0;l=B;B=0;b:do if(!(l&1)?(B=0,va(485,m|0),v=B,B=0,!(v&1)):0){do if(k[m>>2]|0){B=0;v=ya(423,4)|0;u=B;B=0;if(u&1){w=66;break b}B=0;eb(505,v|0,o|0,0);u=B;B=0;if(u&1){u=Rb()|0;f=Q;Sqa(v);z=f;A=u;break b}else{k[m+4>>2]=v;break}}while(0);h=Qqa(8)|0;B=0;v=ya(429,k[p>>2]|0)|0;u=B;B=0;c:do if(!(u&1)?(B=0,va(485,h|0),f=B,B=0,!(f&1)):0){do if(k[h>>2]|0){B=0;f=ya(423,4)|0;g=B;B=0;if(g&1){w=68;break c}B=0;eb(505,f|0,v|0,0);g=B;B=0;if(g&1){g=Rb()|0;c=Q;Sqa(f);C=c;D=g;break c}else{k[h+4>>2]=f;break}}while(0);n=Qqa(8)|0;B=0;f=ya(429,k[p>>2]|0)|0;g=B;B=0;d:do if(!(g&1)?(B=0,va(485,n|0),c=B,B=0,!(c&1)):0){do if(k[n>>2]|0){B=0;c=ya(423,4)|0;i=B;B=0;if(i&1){w=70;break d}B=0;eb(505,c|0,f|0,0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;Sqa(c);E=j;F=i;break d}else{k[n+4>>2]=c;break}}while(0);if((th(k[p>>2]|0)|0)>0){c=a+44|0;i=0;do{j=qh(k[p>>2]|0,i)|0;Do(j,m,h,n,k[c>>2]|0,k[d>>2]|0,k[e>>2]|0);i=i+1|0}while((i|0)<(th(k[p>>2]|0)|0))}if(k[m>>2]|0){i=k[k[m+4>>2]>>2]|0;Ec[k[(k[i>>2]|0)+12>>2]&1023](i)}if(k[h>>2]|0){i=k[k[h+4>>2]>>2]|0;Ec[k[(k[i>>2]|0)+12>>2]&1023](i)}if(k[n>>2]|0){i=k[k[n+4>>2]>>2]|0;Ec[k[(k[i>>2]|0)+12>>2]&1023](i)}VZ(a,m,684,628);VZ(a,h,685,628);VZ(a,n,686,628);if((k[m>>2]|0)!=0?(i=k[m+4>>2]|0,(i|0)!=0):0){c=k[i>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(i)}Sqa(m);do if(k[h>>2]|0){i=k[h+4>>2]|0;if(!i)break;c=k[i>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(i)}while(0);Sqa(h);do if(k[n>>2]|0){i=k[n+4>>2]|0;if(!i)break;c=k[i>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(i)}while(0);Sqa(n);i=k[e>>2]|0;if(i)Tqa(i);k[e>>2]=0;i=k[d>>2]|0;if(!i){r=b;return 1}Tqa(i);r=b;return 1}else w=70;while(0);if((w|0)==70){f=Rb()|0;E=Q;F=f}Sqa(n);x=F;y=E;Qb(x|0)}else w=68;while(0);if((w|0)==68){v=Rb()|0;C=Q;D=v}Sqa(h);x=D;y=C;Qb(x|0)}else w=66;while(0);if((w|0)==66){w=Rb()|0;z=Q;A=w}Sqa(m);x=A;y=z;Qb(x|0);return 0}function Eh(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;b=r;r=r+176|0;c=b+164|0;d=b;e=b+160|0;f=b+24|0;g=b+8|0;h=a+44|0;cO(k[h>>2]|0,e,477);dO(k[h>>2]|0,d,767);a:do if(BY()|0){i=f+56|0;j=f+4|0;k[f>>2]=27524;k[i>>2]=27544;B=0;wa(508,f+56|0,j|0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;n=l;vva(i);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[i>>2]=27488;B=0;va(448,j|0);l=B;B=0;do if(l&1){o=Rb()|0;q=Q;s=o}else{k[j>>2]=27560;o=f+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(o);Ava(j);q=u;s=t;break}Yua(c);B=0;t=Ia(40,f|0,66082,54)|0;u=B;B=0;if((((((!(u&1)?(B=0,u=ya(427,k[e>>2]|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,t|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,66137,11)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Sa(1,v|0,+(+p[d>>3]))|0,v=B,B=0,!(v&1)):0)?(B=0,Ia(40,w|0,149177,1)|0,w=B,B=0,!(w&1)):0)?(B=0,wa(510,g|0,j|0),w=B,B=0,!(w&1)):0){B=0;ya(425,g|0)|0;w=B;B=0;if(!(w&1)){Yua(g);k[f>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);break a}w=Rb()|0;v=Q;Yua(g);x=w;y=v;k[f>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(x|0)}v=Rb()|0;x=v;y=Q;k[f>>2]=27468;k[i>>2]=27488;k[j>>2]=27560;Yua(o);Ava(j);vva(i);Qb(x|0)}while(0);m=q;n=s;vva(i);Qb(n|0)}while(0);n=n_(k[e>>2]|0)|0;Fc[k[(k[n>>2]|0)+64>>2]&1023](n,a);if(!n){z=a+24|0;A=k[z>>2]|0;C=a+32|0;D=k[C>>2]|0;E=k[h>>2]|0;F=k[e>>2]|0;YZ(A,D,E,F);G=k[z>>2]|0;H=k[h>>2]|0;I=k[e>>2]|0;zZ(G,H,I);r=b;return}Ec[k[(k[n>>2]|0)+4>>2]&1023](n);z=a+24|0;A=k[z>>2]|0;C=a+32|0;D=k[C>>2]|0;E=k[h>>2]|0;F=k[e>>2]|0;YZ(A,D,E,F);G=k[z>>2]|0;H=k[h>>2]|0;I=k[e>>2]|0;zZ(G,H,I);r=b;return}function Fh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[b>>2]|0;d=k[b+4>>2]|0;b=a+20|0;if((th(k[b>>2]|0)|0)<=0)return;a=d>>1;e=c;if(!(d&1))f=0;else{d=0;do{g=(ura(qh(k[b>>2]|0,d)|0,168,456,0)|0)+a|0;Ec[k[(k[g>>2]|0)+c>>2]&1023](g);d=d+1|0}while((d|0)<(th(k[b>>2]|0)|0));return}do{d=qh(k[b>>2]|0,f)|0;if(!d)h=0;else h=ura(d,168,456,0)|0;Ec[e&1023](h+a|0);f=f+1|0}while((f|0)<(th(k[b>>2]|0)|0));return}function Gh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{g=+bp(qh(k[f>>2]|0,a)|0)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Hh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[e>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=+$(+(+bp(qh(k[f>>2]|0,a)|0)));if(h>g){p[e>>3]=h;i=h}else i=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=i}}nZ(e,d,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[d>>3];r=c;return}function Ih(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+200>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Jh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+204>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Kh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+208>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Lh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+196>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Mh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+116>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Nh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+rC(k[h>>2]|0,671);if(i<g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Oh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+pC(k[h>>2]|0,671);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Ph(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+rC(k[h>>2]|0,674);if(i<g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Qh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+pC(k[h>>2]|0,674);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Rh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+qC(k[h>>2]|0,674);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Sh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+rC(k[h>>2]|0,677);if(i<g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Th(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+pC(k[h>>2]|0,677);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Uh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+qC(k[h>>2]|0,677);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Vh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+rC(k[h>>2]|0,679);if(i<g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Wh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+pC(k[h>>2]|0,679);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Xh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0,i=0.0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=-G;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=-G;a=0;while(1){h=(qh(k[f>>2]|0,a)|0)+16|0;i=+qC(k[h>>2]|0,679);if(i>g){p[d>>3]=i;j=i}else j=g;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else g=j}}nZ(d,e,1,2,1,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function Yh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;c=r;r=r+240|0;d=c+212|0;e=c+224|0;f=c+8|0;g=c;h=c+208|0;j=c+204|0;l=c+200|0;m=c+196|0;n=c+192|0;o=c+56|0;q=c+40|0;s=c+28|0;t=c+16|0;i[e>>0]=0;p[f>>3]=0.0;p[g>>3]=0.0;k[j>>2]=0;k[m>>2]=0;k[n>>2]=0;u=a+44|0;bO(k[u>>2]|0,e,316);if(i[e>>0]|0){kO(k[u>>2]|0,j,l,m,n,315);cO(k[u>>2]|0,h,944);u=(k[h>>2]|0)+-1|0;h=k[(k[j>>2]|0)+(u<<2)>>2]|0;e=k[(k[m>>2]|0)+(u<<2)>>2]|0;if((e|0)>0){u=a+20|0;a=0;do{v=h+(a*5<<3)|0;w=~~+p[v+32>>3];a:do if((th(k[u>>2]|0)|0)>0){x=0;while(1){y=qh(k[u>>2]|0,x)|0;x=x+1|0;if((Hc[k[(k[y>>2]|0)+16>>2]&511](y)|0)==(w|0)){z=y;A=y;break}if((x|0)>=(th(k[u>>2]|0)|0))break a}C=+id[k[(k[z>>2]|0)+284>>2]&63](A,v);p[f>>3]=C+ +p[f>>3]}while(0);a=a+1|0}while((a|0)!=(e|0))}fZ(f,g,1,2,4,uY()|0)|0;p[f>>3]=+p[g>>3];g=k[l>>2]|0;if((g|0)>0){e=g;g=0;while(1){a=k[(k[j>>2]|0)+(g<<2)>>2]|0;if(!a)D=e;else{Tqa(a);D=k[l>>2]|0}g=g+1|0;if((g|0)>=(D|0))break;else e=D}}D=k[m>>2]|0;if(D)Tqa(D);k[m>>2]=0;m=k[n>>2]|0;if(m)Tqa(m);k[n>>2]=0;n=k[j>>2]|0;if(!n){E=+p[f>>3];p[b>>3]=E;r=c;return}Tqa(n);E=+p[f>>3];p[b>>3]=E;r=c;return}c=o+56|0;b=o+4|0;k[o>>2]=27524;k[c>>2]=27544;B=0;wa(508,o+56|0,b|0);f=B;B=0;if(f&1){f=Rb()|0;F=Q;G=f;vva(c);Qb(G|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);f=B;B=0;do if(f&1){n=Rb()|0;H=Q;I=n}else{k[b>>2]=27560;n=o+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;Yua(d);Yua(n);Ava(b);H=m;I=j;break}Yua(d);B=0;j=Ia(40,o|0,66149,32)|0;m=B;B=0;if(!(m&1)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,q|0,65553,67);m=B;B=0;do if(!(m&1)){B=0;eb(502,s|0,66182,9);D=B;B=0;if(D&1){D=Rb()|0;e=Q;Yua(q);J=e;K=D;break}B=0;wa(510,t|0,b|0);D=B;B=0;if(D&1){D=Rb()|0;L=Q;M=D;N=1}else{B=0;ua(163,j|0,q|0,s|0,1284,t|0);D=B;B=0;if(D&1)O=1;else{B=0;eb(503,j|0,1240,229);B=0;O=0}D=Rb()|0;e=Q;Yua(t);L=e;M=D;N=O}Yua(s);Yua(q);if(N){J=L;K=M}else{P=L;R=M;k[o>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(c);Qb(R|0)}}else{D=Rb()|0;J=Q;K=D}while(0);zb(j|0);P=J;R=K;k[o>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(c);Qb(R|0)}m=Rb()|0;P=Q;R=m;k[o>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(c);Qb(R|0)}while(0);F=H;G=I;vva(c);Qb(G|0)}function Zh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0;c=r;r=r+64|0;d=c+48|0;e=c+40|0;f=c+32|0;g=c+24|0;h=c+56|0;i=c;p[d>>3]=0.0;k[h>>2]=0;j=a+20|0;if((th(k[j>>2]|0)|0)<=0){l=uY()|0;nZ(d,e,1,2,4,0,l)|0;uY()|0;m=+p[e>>3];p[b>>3]=m;r=c;return}a=i+8|0;n=0;do{o=qh(k[j>>2]|0,n)|0;if($p(o)|0){Uo(o,h);q=Wo(o,179)|0;s=Wo(o,353)|0;t=ed[k[(k[o>>2]|0)+308>>2]&511](o,2)|0;u=Hc[k[(k[t>>2]|0)+8>>2]&511](t)|0;if((u|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0)){v=t+8|0;w=u;do{Fc[k[(k[t>>2]|0)+24>>2]&1023](t,w);rd[k[(k[o>>2]|0)+260>>2]&511](o,g,k[h>>2]|0,t);rd[k[(k[q>>2]|0)+56>>2]&511](q,f,t,689);rd[k[(k[s>>2]|0)+60>>2]&511](s,i,k[h>>2]|0,t);x=+p[i>>3];y=+p[a>>3];p[d>>3]=+p[d>>3]+ +p[v>>3]*(+p[g>>3]*(+p[f>>3]*.5*(x*x+y*y)));w=w+1|0}while((w|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))}w=k[h>>2]|0;if(w)Tqa(w);k[h>>2]=0;Ec[k[(k[t>>2]|0)+4>>2]&1023](t)}n=n+1|0}while((n|0)<(th(k[j>>2]|0)|0));l=uY()|0;nZ(d,e,1,2,4,0,l)|0;uY()|0;m=+p[e>>3];p[b>>3]=m;r=c;return}function _h(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0;c=r;r=r+144|0;d=c+120|0;e=c+112|0;f=c+104|0;g=c+96|0;h=c+88|0;i=c+80|0;j=c+64|0;l=c+48|0;m=c+32|0;n=c+24|0;o=c+16|0;q=c+8|0;s=c;t=c+128|0;p[d>>3]=0.0;k[t>>2]=0;u=a+20|0;if((th(k[u>>2]|0)|0)<=0){v=uY()|0;nZ(d,e,1,2,4,0,v)|0;uY()|0;w=+p[e>>3];p[b>>3]=w;r=c;return}a=m+8|0;x=l+8|0;y=0;do{z=qh(k[u>>2]|0,y)|0;if($p(z)|0){Uo(z,t);A=Wo(z,179)|0;B=Wo(z,353)|0;C=Wo(z,674)|0;D=Wo(z,677)|0;E=Wo(z,388)|0;F=Wo(z,39)|0;G=Wo(z,36)|0;H=ed[k[(k[z>>2]|0)+308>>2]&511](z,2)|0;I=Hc[k[(k[H>>2]|0)+8>>2]&511](H)|0;if((I|0)<(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0)){J=H+8|0;K=I;do{Fc[k[(k[H>>2]|0)+24>>2]&1023](H,K);rd[k[(k[z>>2]|0)+260>>2]&511](z,n,k[t>>2]|0,H);rd[k[(k[A>>2]|0)+56>>2]&511](A,f,H,641);nd[k[(k[B>>2]|0)+48>>2]&1023](B,i,H);rd[k[(k[B>>2]|0)+60>>2]&511](B,m,k[t>>2]|0,H);nd[k[(k[E>>2]|0)+48>>2]&1023](E,s,H);nd[k[(k[F>>2]|0)+48>>2]&1023](F,q,H);nd[k[(k[G>>2]|0)+48>>2]&1023](G,o,H);nd[k[(k[C>>2]|0)+48>>2]&1023](C,g,H);rd[k[(k[C>>2]|0)+60>>2]&511](C,j,k[t>>2]|0,H);nd[k[(k[D>>2]|0)+48>>2]&1023](D,h,H);rd[k[(k[D>>2]|0)+60>>2]&511](D,l,k[t>>2]|0,H);L=+p[g>>3]*+p[m>>3]+ +p[h>>3]*+p[a>>3]+ +p[i>>3]*(+p[j>>3]+ +p[x>>3])-(+p[s>>3]-+p[q>>3]-+p[o>>3]);p[d>>3]=+p[d>>3]+ +p[J>>3]*(+p[n>>3]*(L*(+p[f>>3]*.5*L)));K=K+1|0}while((K|0)<(Hc[k[(k[H>>2]|0)+12>>2]&511](H)|0))}K=k[t>>2]|0;if(K)Tqa(K);k[t>>2]=0;Ec[k[(k[H>>2]|0)+4>>2]&1023](H)}y=y+1|0}while((y|0)<(th(k[u>>2]|0)|0));v=uY()|0;nZ(d,e,1,2,4,0,v)|0;uY()|0;w=+p[e>>3];p[b>>3]=w;r=c;return}function $h(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+468>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function ai(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+472>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function bi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;f=a+20|0;if((th(k[f>>2]|0)|0)>0){g=0.0;a=0;do{h=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[h>>2]|0)+476>>2]&255](h)+g;p[d>>3]=g;a=a+1|0}while((a|0)<(th(k[f>>2]|0)|0))}nZ(d,e,1,2,4,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function ci(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;f=r;r=r+240|0;g=f+220|0;h=f+232|0;j=f+216|0;l=f+8|0;m=f;n=f+212|0;o=f+208|0;q=f+204|0;s=f+200|0;t=f+196|0;u=f+192|0;v=f+56|0;w=f+40|0;x=f+28|0;y=f+16|0;z=k[b>>2]|0;if(!z){A=Qqa(36)|0;B=0;va(481,A|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Sqa(A);E=C;F=D;Qb(E|0)}else G=A}else G=z;z=a+44|0;cO(k[z>>2]|0,j,766);dO(k[z>>2]|0,l,767);bO(k[z>>2]|0,h,325);if((d|0)<=0){k[b>>2]=G;r=f;return}A=a+20|0;D=a+28|0;C=a+24|0;H=a+36|0;I=a+40|0;J=0;a:while(1){K=k[c+(J<<2)>>2]|0;L=zY(K,0)|0;b:do if((L|0)<0){M=+O2(a,K);p[m>>3]=M;if(e){N=Qqa(48)|0;B=0;O=ya(428,G|0)|0;P=B;B=0;if(P&1){R=N;S=16;break a}M=+p[m>>3];P=k[j>>2]|0;T=+p[l>>3];k[N>>2]=27904;k[N+4>>2]=O+1;p[N+16>>3]=M;k[N+32>>2]=P;p[N+40>>3]=T;k[N+24>>2]=1;k[N+28>>2]=1;P=(Lta(K)|0)+1|0;B=0;O=ya(422,P|0)|0;P=B;B=0;if(P&1){R=N;S=16;break a}k[N+8>>2]=O;P=(Lta(K)|0)+1|0;if(!K){U=N;S=14;break a}if(P)TEa(O|0,K|0,P|0)|0;Oo(G,N)|0}}else{if((L+-770|0)>>>0<10){T=+P2(a,L);p[m>>3]=T;if(!e)break;N=Qqa(48)|0;B=0;P=ya(428,G|0)|0;O=B;B=0;if(O&1){V=N;S=27;break a}T=+p[m>>3];O=k[j>>2]|0;M=+p[l>>3];k[N>>2]=27904;k[N+4>>2]=P+1;p[N+16>>3]=T;k[N+32>>2]=O;p[N+40>>3]=M;k[N+24>>2]=1;k[N+28>>2]=1;O=(Lta(K)|0)+1|0;B=0;P=ya(422,O|0)|0;O=B;B=0;if(O&1){V=N;S=27;break a}k[N+8>>2]=P;O=(Lta(K)|0)+1|0;if(!K){W=N;S=25;break a}if(O)TEa(P|0,K|0,O|0)|0;Oo(G,N)|0;break}do switch(L|0){case 731:{Gh(a,m);break}case 732:{Hh(a,m);break}case 908:{Ih(a,m);break}case 909:{Jh(a,m);break}case 910:{Kh(a,m);break}case 907:{Lh(a,m);break}case 906:{Mh(a,m);break}case 895:{Nh(a,m);break}case 896:{Oh(a,m);break}case 897:{Ph(a,m);break}case 898:{Qh(a,m);break}case 899:{Rh(a,m);break}case 900:{Sh(a,m);break}case 901:{Th(a,m);break}case 902:{Uh(a,m);break}case 903:{Vh(a,m);break}case 904:{Wh(a,m);break}case 905:{Xh(a,m);break}case 650:{Yh(a,m);break}case 911:{$h(a,m);break}case 912:{ai(a,m);break}case 913:{bi(a,m);break}case 658:{F_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 663:{H_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 661:{J_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 662:{L_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 660:{N_(m,a);break}case 669:{P_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 689:{Zh(a,m);break}case 690:{T_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 691:{V_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 692:{di(a,m);break}case 694:{X_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 695:{Z_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 696:{R_(m,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[H>>2]|0,k[I>>2]|0,k[z>>2]|0);break}case 641:{_h(a,m);break}case 670:{ei(a,m);break}default:{k[s>>2]=-1;k[t>>2]=-1;k[u>>2]=-1;if((th(k[A>>2]|0)|0)>0){N=0;O=0;while(1){lq(qh(k[A>>2]|0,N)|0,s,t,u,L);P=k[u>>2]|0;X=(P|0)>(O|0)?P:O;N=N+1|0;if((N|0)>=(th(k[A>>2]|0)|0)){Y=X;break}else O=X}}else Y=0;k[u>>2]=Y;nZ(s,n,1,4,1,0,uY()|0)|0;nZ(t,o,1,4,1,0,uY()|0)|0;nZ(u,q,1,4,1,0,uY()|0)|0;uY()|0;uY()|0;uY()|0;c:do if(!(i[h>>0]|0)){switch(k[n>>2]|0){case 736:{Z=Qq(k[A>>2]|0)|0;break}case 738:{Z=nn(k[D>>2]|0)|0;break}case 737:{O=Qq(k[A>>2]|0)|0;N=k[q>>2]|0;X=ma(N,O)|0;P=X>>>0>536870911?-1:X<<3;_=Rqa(P)|0;if(X)WEa(_|0,0,X<<3|0)|0;$=Rqa(P)|0;if((th(k[A>>2]|0)|0)>0){P=0;do{pq(qh(k[A>>2]|0,P)|0,_,N,L);P=P+1|0}while((P|0)<(th(k[A>>2]|0)|0))}fZ(_,$,X,3,4,uY()|0)|0;Tqa(_);if(e){P=Qqa(40)|0;B=0;aa=ya(428,G|0)|0;ba=B;B=0;if(ba&1){ca=P;S=142;break a}ba=k[j>>2]|0;M=+p[l>>3];k[P>>2]=27964;k[P+4>>2]=aa+1;aa=P+16|0;k[aa>>2]=O;da=P+20|0;k[da>>2]=N;B=0;wa(512,P+8|0,L|0);ea=B;B=0;if(ea&1){ca=P;S=142;break a}k[P+24>>2]=ba;p[P+32>>3]=M;ba=ma(k[da>>2]|0,k[aa>>2]|0)|0;if(!ba)k[P+12>>2]=0;else{B=0;aa=ya(422,(ba>>>0>536870911?-1:ba<<3)|0)|0;da=B;B=0;if(da&1){ca=P;S=142;break a}k[P+12>>2]=aa;TEa(aa|0,$|0,ba<<3|0)|0}Oo(G,P)|0}Tqa($);break c;break}default:{S=87;break a}}P=Qqa(8)|0;B=0;va(485,P|0);ba=B;B=0;if(ba&1){fa=P;S=123;break a}if(k[P>>2]|0){B=0;ba=ya(423,4)|0;aa=B;B=0;if(aa&1){fa=P;S=123;break a}B=0;eb(505,ba|0,Z|0,0);aa=B;B=0;if(aa&1){ga=P;ha=ba;S=119;break a}k[P+4>>2]=ba}if((th(k[A>>2]|0)|0)>0){ba=0;do{qq(qh(k[A>>2]|0,ba)|0,P,L);ba=ba+1|0}while((ba|0)<(th(k[A>>2]|0)|0))}if(k[P>>2]|0){ba=k[k[P+4>>2]>>2]|0;Ec[k[(k[ba>>2]|0)+12>>2]&1023](ba)}if(e){ba=Qqa(40)|0;B=0;$=ya(428,G|0)|0;N=B;B=0;if(N&1){ia=ba;S=129;break a}N=k[j>>2]|0;M=+p[l>>3];k[ba>>2]=28024;k[ba+4>>2]=$+1;k[ba+16>>2]=0;k[ba+20>>2]=0;B=0;wa(512,ba+8|0,L|0);$=B;B=0;if($&1){ia=ba;S=129;break a}k[ba+24>>2]=N;p[ba+32>>3]=M;k[ba+12>>2]=P;Oo(G,ba)|0}}else{ba=Qq(k[A>>2]|0)|0;N=ma(k[o>>2]|0,ba)|0;$=N>>>0>536870911?-1:N<<3;O=Rqa($)|0;if(N)WEa(O|0,0,N<<3|0)|0;N=Rqa($)|0;if((th(k[A>>2]|0)|0)>0){$=0;do{_=qh(k[A>>2]|0,$)|0;oq(_,O,k[o>>2]|0,L);$=$+1|0}while(($|0)<(th(k[A>>2]|0)|0))}$=ma(k[o>>2]|0,ba)|0;fZ(O,N,$,3,4,uY()|0)|0;Tqa(O);if(e){$=Qqa(40)|0;B=0;P=ya(428,G|0)|0;_=B;B=0;if(_&1){ja=$;S=82;break a}_=k[o>>2]|0;X=k[j>>2]|0;M=+p[l>>3];k[$>>2]=27964;k[$+4>>2]=P+1;P=$+16|0;k[P>>2]=ba;aa=$+20|0;k[aa>>2]=_;B=0;wa(512,$+8|0,L|0);_=B;B=0;if(_&1){ja=$;S=82;break a}k[$+24>>2]=X;p[$+32>>3]=M;X=ma(k[aa>>2]|0,k[P>>2]|0)|0;if(!X)k[$+12>>2]=0;else{B=0;P=ya(422,(X>>>0>536870911?-1:X<<3)|0)|0;aa=B;B=0;if(aa&1){ja=$;S=82;break a}k[$+12>>2]=P;TEa(P|0,N|0,X<<3|0)|0}Oo(G,$)|0}Tqa(N)}while(0);break b}}while(0);if(e){$=Qqa(48)|0;B=0;X=ya(428,G|0)|0;P=B;B=0;if(P&1){ka=$;S=153;break a}M=+p[m>>3];P=k[j>>2]|0;T=+p[l>>3];k[$>>2]=27904;k[$+4>>2]=X+1;p[$+16>>3]=M;k[$+32>>2]=P;p[$+40>>3]=T;k[$+24>>2]=1;k[$+28>>2]=1;P=(Lta(K)|0)+1|0;B=0;X=ya(422,P|0)|0;P=B;B=0;if(P&1){ka=$;S=153;break a}k[$+8>>2]=X;P=(Lta(K)|0)+1|0;if(!K){la=$;S=151;break a}if(P)TEa(X|0,K|0,P|0)|0;Oo(G,$)|0}}while(0);J=J+1|0;if((J|0)>=(d|0)){S=6;break}}switch(S|0){case 6:{k[b>>2]=G;r=f;return}case 14:{B=0;ib(283,142353,68290,137,142345);B=0;na=U;oa=Rb()|0;pa=Q;S=17;break}case 16:{na=R;oa=Rb()|0;pa=Q;S=17;break}case 25:{B=0;ib(283,142353,68290,137,142345);B=0;qa=W;ra=Rb()|0;sa=Q;S=28;break}case 27:{qa=V;ra=Rb()|0;sa=Q;S=28;break}case 82:{V=Rb()|0;W=Q;Sqa(ja);E=V;F=W;Qb(E|0);break}case 87:{W=v+56|0;V=v+4|0;k[v>>2]=27524;k[W>>2]=27544;B=0;wa(508,v+56|0,V|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ta=Q;xa=ja;vva(W);Qb(xa|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[W>>2]=27488;B=0;va(448,V|0);ja=B;B=0;do if(ja&1){R=Rb()|0;za=Q;Aa=R}else{k[V>>2]=27560;R=v+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[v+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,V|0,g|0);U=B;B=0;if(U&1){U=Rb()|0;f=Q;Yua(g);Yua(R);Ava(V);za=f;Aa=U;break}Yua(g);B=0;U=Ia(40,v|0,66192,14)|0;f=B;B=0;d:do if((((!(f&1)?(B=0,G=ya(427,k[n>>2]|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(G)|0,B=0,d=Ia(40,U|0,G|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,d|0,146481,18)|0,d=B,B=0,!(d&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,w|0,65553,67);d=B;B=0;do if(!(d&1)){B=0;eb(502,x|0,66207,17);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Yua(w);Ba=G;Ca=J;break}B=0;wa(510,y|0,V|0);J=B;B=0;if(J&1){J=Rb()|0;Da=J;Ea=Q;Fa=1}else{B=0;ua(163,b|0,w|0,x|0,1115,y|0);J=B;B=0;if(J&1)Ga=1;else{B=0;eb(503,b|0,1240,229);B=0;Ga=0}J=Rb()|0;G=Q;Yua(y);Da=J;Ea=G;Fa=Ga}Yua(x);Yua(w);if(Fa){Ba=Da;Ca=Ea}else{Ha=Da;Ja=Ea;break d}}else{G=Rb()|0;Ba=G;Ca=Q}while(0);zb(b|0);Ha=Ba;Ja=Ca}else S=105;while(0);if((S|0)==105){U=Rb()|0;Ha=U;Ja=Q}k[v>>2]=27468;k[W>>2]=27488;k[V>>2]=27560;Yua(R);Ava(V);vva(W);E=Ha;F=Ja;Qb(E|0)}while(0);ta=za;xa=Aa;vva(W);Qb(xa|0);break}case 119:{xa=Rb()|0;W=Q;Sqa(ha);Ka=ga;La=W;Ma=xa;S=124;break}case 123:{xa=Rb()|0;Ka=fa;La=Q;Ma=xa;S=124;break}case 129:{xa=Rb()|0;fa=Q;Sqa(ia);E=xa;F=fa;Qb(E|0);break}case 142:{fa=Rb()|0;xa=Q;Sqa(ca);E=fa;F=xa;Qb(E|0);break}case 151:{B=0;ib(283,142353,68290,137,142345);B=0;Na=la;Oa=Rb()|0;Pa=Q;S=154;break}case 153:{Na=ka;Oa=Rb()|0;Pa=Q;S=154;break}}if((S|0)==17){Sqa(na);E=oa;F=pa;Qb(E|0)}else if((S|0)==28){Sqa(qa);E=ra;F=sa;Qb(E|0)}else if((S|0)==124){Sqa(Ka);E=Ma;F=La;Qb(E|0)}else if((S|0)==154){Sqa(Na);E=Oa;F=Pa;Qb(E|0)}}function di(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c+8|0;h=c+40|0;i=c;p[d>>3]=0.0;k[h>>2]=0;j=a+20|0;if((th(k[j>>2]|0)|0)>0)l=0;else{m=uY()|0;nZ(d,e,1,2,4,0,m)|0;uY()|0;n=+p[e>>3];p[b>>3]=n;r=c;return}do{a=qh(k[j>>2]|0,l)|0;if($p(a)|0){Uo(a,h);o=Wo(a,179)|0;q=Wo(a,353)|0;s=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;t=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((t|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){u=s+8|0;v=t;do{Fc[k[(k[s>>2]|0)+24>>2]&1023](s,v);rd[k[(k[a>>2]|0)+260>>2]&511](a,g,k[h>>2]|0,s);rd[k[(k[o>>2]|0)+56>>2]&511](o,f,s,692);nd[k[(k[q>>2]|0)+48>>2]&1023](q,i,s);w=+p[i>>3];if(w<=0.0)p[d>>3]=+p[d>>3]+ +p[u>>3]*(+p[g>>3]*(w*(w*+p[f>>3])));v=v+1|0}while((v|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))}v=k[h>>2]|0;if(v)Tqa(v);k[h>>2]=0;Ec[k[(k[s>>2]|0)+4>>2]&1023](s)}l=l+1|0}while((l|0)<(th(k[j>>2]|0)|0));m=uY()|0;nZ(d,e,1,2,4,0,m)|0;uY()|0;n=+p[e>>3];p[b>>3]=n;r=c;return}function ei(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;c=r;r=r+64|0;d=c+40|0;e=c+32|0;f=c+24|0;g=c+16|0;h=c+8|0;i=c;j=c+48|0;p[d>>3]=0.0;k[j>>2]=0;l=a+20|0;if((th(k[l>>2]|0)|0)>0)m=0;else{n=uY()|0;nZ(d,e,1,2,4,0,n)|0;uY()|0;o=+p[e>>3];p[b>>3]=o;r=c;return}do{a=qh(k[l>>2]|0,m)|0;if($p(a)|0){Uo(a,j);q=Wo(a,179)|0;s=Wo(a,339)|0;t=Wo(a,202)|0;u=ed[k[(k[a>>2]|0)+308>>2]&511](a,2)|0;v=Hc[k[(k[u>>2]|0)+8>>2]&511](u)|0;if((v|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0)){w=u+8|0;x=v;do{Fc[k[(k[u>>2]|0)+24>>2]&1023](u,x);rd[k[(k[a>>2]|0)+260>>2]&511](a,i,k[j>>2]|0,u);rd[k[(k[q>>2]|0)+56>>2]&511](q,h,u,670);nd[k[(k[s>>2]|0)+48>>2]&1023](s,f,u);nd[k[(k[t>>2]|0)+48>>2]&1023](t,g,u);y=+p[f>>3]-+p[g>>3];p[d>>3]=+p[d>>3]+ +p[w>>3]*(+p[i>>3]*(+p[h>>3]*(y*(y*.5))));x=x+1|0}while((x|0)<(Hc[k[(k[u>>2]|0)+12>>2]&511](u)|0))}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);x=k[j>>2]|0;if(x)Tqa(x);k[j>>2]=0}m=m+1|0}while((m|0)<(th(k[l>>2]|0)|0));n=uY()|0;nZ(d,e,1,2,4,0,n)|0;uY()|0;o=+p[e>>3];p[b>>3]=o;r=c;return}function fi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Rqa(d>>>0>1073741823?-1:d<<2)|0;g=(d|0)>0;if(g)h=0;else{ci(a,b,f,d,e);Tqa(f);return}do{yY(f+(h<<2)|0,k[c+(h<<2)>>2]|0);h=h+1|0}while((h|0)!=(d|0));ci(a,b,f,d,e);if(g)i=0;else{Tqa(f);return}do{g=f+(i<<2)|0;e=k[g>>2]|0;if(e)Tqa(e);k[g>>2]=0;i=i+1|0}while((i|0)!=(d|0));Tqa(f);return}function gi(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+188|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;i[d>>0]=0;vY()|0;bO(k[a+44>>2]|0,d,8);if(!(i[d>>0]|0)){r=b;return}b=e+56|0;d=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(b);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,d|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[d>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(d);n=q;o=p;break}Yua(c);B=0;p=Ia(40,e|0,66225,72)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,f|0,65553,67);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,66298,20);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,d|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,f|0,g|0,1213,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[b>>2]=27488;k[d>>2]=27560;Yua(m);Ava(d);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0.0;c=r;r=r+16|0;d=c+8|0;e=c;p[d>>3]=0.0;p[e>>3]=0.0;f=a+20|0;a=qh(k[f>>2]|0,0)|0;g=+Zc[k[(k[a>>2]|0)+464>>2]&255](a);p[d>>3]=g;if((th(k[f>>2]|0)|0)>1){h=g;a=1;while(1){i=qh(k[f>>2]|0,a)|0;g=+Zc[k[(k[i>>2]|0)+464>>2]&255](i);if(g<h){p[d>>3]=g;j=g}else j=h;a=a+1|0;if((a|0)>=(th(k[f>>2]|0)|0))break;else h=j}}nZ(d,e,1,2,2,0,uY()|0)|0;uY()|0;p[b>>3]=+p[e>>3];r=c;return}function ii(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;Ec[k[(k[a>>2]|0)+484>>2]&1023](a);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function ji(a){a=a|0;var b=0,c=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;Ec[k[(k[a>>2]|0)+488>>2]&1023](a);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function ki(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0.0,q=0.0,s=0,t=0.0;e=r;r=r+16|0;f=e+8|0;g=e+4|0;h=e;k[g>>2]=0;k[h>>2]=0;i=a+44|0;cO(k[i>>2]|0,f,199);hO(k[i>>2]|0,g,0,180);fi(a,h,k[g>>2]|0,k[f>>2]|0,1);a=k[f>>2]|0;i=Rqa(a>>>0>536870911?-1:a<<3)|0;j=i;if((a|0)>0){a=k[h>>2]|0;l=0.0;m=0;while(1){n=qh(a,m)|0;o=+Zc[k[(k[n>>2]|0)+44>>2]&255](n);p[i+(m<<3)>>3]=o;q=l+o;m=m+1|0;if((m|0)>=(k[f>>2]|0)){s=a;t=q;break}else l=q}}else{s=k[h>>2]|0;t=0.0}if(s){Mo(s);Sqa(s)}s=k[g>>2]|0;if(s)Tqa(s);k[g>>2]=0;if(b)p[b>>3]=t;if(!c)Tqa(i);else k[c>>2]=j;if(!d){r=e;return}k[d>>2]=k[f>>2];r=e;return}function li(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;c=r;r=r+208|0;d=c+196|0;e=c+192|0;f=c+188|0;g=c;h=c+184|0;i=c+48|0;j=c+32|0;l=c+20|0;m=c+8|0;k[h>>2]=0;n=k[b>>2]|0;if(!n){b=Qqa(36)|0;B=0;va(481,b|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Sqa(b);s=o;t=q;Qb(s|0)}else u=b}else u=n;n=a+44|0;cO(k[n>>2]|0,e,198);hO(k[n>>2]|0,h,0,176);cO(k[n>>2]|0,f,766);dO(k[n>>2]|0,g,767);n=k[h>>2]|0;a:do if((k[e>>2]|0)>0){b=a+28|0;q=a+20|0;o=n;v=0;b:while(1){w=k[o+(v<<2)>>2]|0;switch(v|0){case 0:{x=938;break}case 1:{x=939;break}case 2:{x=940;break}default:{y=12;break b}}z=Qqa(8)|0;B=0;A=ya(429,k[b>>2]|0)|0;C=B;B=0;if(C&1){D=z;y=55;break}B=0;va(485,z|0);C=B;B=0;if(C&1){D=z;y=55;break}if(k[z>>2]|0){B=0;C=ya(423,4)|0;E=B;B=0;if(E&1){D=z;y=55;break}B=0;eb(505,C|0,A|0,0);A=B;B=0;if(A&1){F=z;G=C;y=41;break}k[z+4>>2]=C}C=Qqa(8)|0;B=0;A=ya(429,k[b>>2]|0)|0;E=B;B=0;if(E&1){H=C;y=57;break}B=0;va(485,C|0);E=B;B=0;if(E&1){H=C;y=57;break}if(k[C>>2]|0){B=0;E=ya(423,4)|0;I=B;B=0;if(I&1){H=C;y=57;break}B=0;eb(505,E|0,A|0,0);A=B;B=0;if(A&1){J=C;K=E;y=49;break}k[C+4>>2]=E}if((th(k[q>>2]|0)|0)>0){E=0;do{A=qh(k[q>>2]|0,E)|0;rd[k[(k[A>>2]|0)+100>>2]&511](A,z,C,w);E=E+1|0}while((E|0)<(th(k[q>>2]|0)|0))}if(k[z>>2]|0){E=k[k[z+4>>2]>>2]|0;Ec[k[(k[E>>2]|0)+12>>2]&1023](E)}if(k[C>>2]|0){E=k[k[C+4>>2]>>2]|0;Ec[k[(k[E>>2]|0)+12>>2]&1023](E)}E=Qqa(40)|0;B=0;A=ya(428,u|0)|0;I=B;B=0;if(I&1){L=E;y=64;break}I=k[f>>2]|0;M=+p[g>>3];k[E>>2]=28024;k[E+4>>2]=A+1;k[E+16>>2]=0;k[E+20>>2]=0;B=0;wa(512,E+8|0,w|0);A=B;B=0;if(A&1){L=E;y=64;break}k[E+24>>2]=I;p[E+32>>3]=M;k[E+12>>2]=z;Oo(u,E)|0;E=Qqa(40)|0;B=0;I=ya(428,u|0)|0;A=B;B=0;if(A&1){N=E;y=65;break}A=k[f>>2]|0;M=+p[g>>3];k[E>>2]=28024;k[E+4>>2]=I+1;k[E+16>>2]=0;k[E+20>>2]=0;B=0;wa(512,E+8|0,x|0);I=B;B=0;if(I&1){N=E;y=65;break}k[E+24>>2]=A;p[E+32>>3]=M;k[E+12>>2]=C;Oo(u,E)|0;v=v+1|0;E=k[h>>2]|0;if((v|0)>=(k[e>>2]|0)){O=E;break a}else o=E}if((y|0)==12){o=i+56|0;v=i+4|0;k[i>>2]=27524;k[o>>2]=27544;B=0;wa(508,i+56|0,v|0);q=B;B=0;if(q&1){q=Rb()|0;P=Q;R=q;vva(o);Qb(R|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[o>>2]=27488;B=0;va(448,v|0);q=B;B=0;do if(q&1){b=Rb()|0;S=Q;T=b}else{k[v>>2]=27560;b=i+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,v|0,d|0);E=B;B=0;if(E&1){E=Rb()|0;A=Q;Yua(d);Yua(b);Ava(v);S=A;T=E;break}Yua(d);B=0;E=Ia(40,i|0,66319,40)|0;A=B;B=0;c:do if(!(A&1)?(B=0,Xa(239,E|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,j|0,65553,67);U=B;B=0;do if(!(U&1)){B=0;eb(502,l|0,66360,15);V=B;B=0;if(V&1){V=Rb()|0;W=Q;Yua(j);X=V;Y=W;break}B=0;wa(510,m|0,v|0);W=B;B=0;if(W&1){W=Rb()|0;Z=W;_=Q;$=1}else{B=0;ua(163,I|0,j|0,l|0,2120,m|0);W=B;B=0;if(W&1)aa=1;else{B=0;eb(503,I|0,1240,229);B=0;aa=0}W=Rb()|0;V=Q;Yua(m);Z=W;_=V;$=aa}Yua(l);Yua(j);if($){X=Z;Y=_}else{ba=Z;ca=_;break c}}else{V=Rb()|0;X=V;Y=Q}while(0);zb(I|0);ba=X;ca=Y}else y=27;while(0);if((y|0)==27){E=Rb()|0;ba=E;ca=Q}k[i>>2]=27468;k[o>>2]=27488;k[v>>2]=27560;Yua(b);Ava(v);vva(o);s=ba;t=ca;Qb(s|0)}while(0);P=S;R=T;vva(o);Qb(R|0)}else if((y|0)==41){v=Rb()|0;q=Q;Sqa(G);da=F;ea=q;fa=v;y=56}else if((y|0)==49){v=Rb()|0;q=Q;Sqa(K);ga=J;ha=q;ia=v;y=58}else if((y|0)==55){v=Rb()|0;da=D;ea=Q;fa=v;y=56}else if((y|0)==57){v=Rb()|0;ga=H;ha=Q;ia=v;y=58}else if((y|0)==64){v=Rb()|0;q=Q;Sqa(L);s=v;t=q;Qb(s|0)}else if((y|0)==65){q=Rb()|0;v=Q;Sqa(N);s=q;t=v;Qb(s|0)}if((y|0)==56){Sqa(da);s=fa;t=ea;Qb(s|0)}else if((y|0)==58){Sqa(ga);s=ia;t=ha;Qb(s|0)}}else O=n;while(0);if(!O){r=c;return}Tqa(O);r=c;return}function mi(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;if(!a)d=0;else d=ura(a,168,456,0)|0;Ec[k[(k[d>>2]|0)+56>>2]&1023](d);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function ni(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;if(!a)d=0;else d=ura(a,168,456,0)|0;Ec[k[(k[d>>2]|0)+60>>2]&1023](d);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function oi(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;if(!a)d=0;else d=ura(a,168,456,0)|0;Ec[k[(k[d>>2]|0)+444>>2]&1023](d);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function pi(a){a=a|0;var b=0,c=0,d=0;b=a+20|0;if((th(k[b>>2]|0)|0)>0)c=0;else return;do{a=qh(k[b>>2]|0,c)|0;if(!a)d=0;else d=ura(a,168,456,0)|0;Ec[k[(k[d>>2]|0)+448>>2]&1023](d);c=c+1|0}while((c|0)<(th(k[b>>2]|0)|0));return}function qi(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=a+20|0;if((th(k[f>>2]|0)|0)>0)g=0;else return;do{a=qh(k[f>>2]|0,g)|0;Dc[k[(k[a>>2]|0)+524>>2]&255](a,b,c,d,e);g=g+1|0}while((g|0)<(th(k[f>>2]|0)|0));return}function ri(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;g=r;r=r+384|0;h=g+364|0;i=g+48|0;j=g+40|0;l=g+32|0;m=g+24|0;n=g+16|0;o=g+8|0;q=g;s=g+360|0;t=g+356|0;u=g+208|0;v=g+344|0;w=g+72|0;x=g+56|0;p[i>>3]=0.0;p[j>>3]=0.0;p[l>>3]=0.0;p[m>>3]=0.0;p[n>>3]=0.0;p[o>>3]=0.0;p[q>>3]=0.0;y=a+20|0;a=th(k[y>>2]|0)|0;k[s>>2]=a;if((a|0)>0){z=0.0;A=0.0;C=0;do{D=qh(k[y>>2]|0,C)|0;z=+Zc[k[(k[D>>2]|0)+540>>2]&255](D)+z;p[n>>3]=z;A=+Zc[k[(k[D>>2]|0)+544>>2]&255](D)+A;p[q>>3]=A;C=C+1|0}while((C|0)<(a|0))}nZ(n,m,1,2,4,0,uY()|0)|0;uY()|0;nZ(q,o,1,2,4,0,uY()|0)|0;uY()|0;nZ(s,t,1,4,1,0,uY()|0)|0;uY()|0;a:do if((k[t>>2]|0)>0){q=u+56|0;n=u+4|0;a=u+56|0;C=u+128|0;D=u+132|0;E=u+36|0;F=u+52|0;G=b+4|0;H=0;while(1){if((H|0)<(k[s>>2]|0)){I=(H|0)%100|0;if((I|0)==0&(EY()|0)){k[u>>2]=27524;k[q>>2]=27544;B=0;wa(508,a|0,n|0);J=B;B=0;if(J&1){K=13;break}k[C>>2]=0;k[D>>2]=-1;k[u>>2]=27468;k[q>>2]=27488;B=0;va(448,n|0);J=B;B=0;if(J&1){K=14;break}k[n>>2]=27560;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[F>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,n|0,h|0);J=B;B=0;if(J&1){K=12;break}Yua(h);B=0;J=Ia(40,u|0,66376,1)|0;L=B;B=0;if(L&1){K=24;break}B=0;L=Ia(40,J|0,66378,28)|0;J=B;B=0;if(J&1){K=24;break}B=0;J=Sa(1,L|0,+(+(H|0)/+(k[s>>2]|0)*100.0))|0;L=B;B=0;if(L&1){K=24;break}B=0;Ia(40,J|0,66407,3)|0;J=B;B=0;if(J&1){K=24;break}B=0;wa(510,v|0,n|0);J=B;B=0;if(J&1){K=24;break}B=0;ya(425,v|0)|0;J=B;B=0;if(J&1){K=25;break}Yua(v);k[u>>2]=27468;k[q>>2]=27488;k[n>>2]=27560;Yua(E);Ava(n);vva(q)}J=qh(k[y>>2]|0,H)|0;Lc[k[(k[J>>2]|0)+528>>2]&15](J,b,l,d,e,f,+p[m>>3],+p[o>>3]);p[j>>3]=+p[l>>3]+ +p[j>>3];M=I}else M=(H|0)%100|0;if((M|0)==0?(k[b>>2]|0)!=0:0){I=k[k[G>>2]>>2]|0;Ec[k[(k[I>>2]|0)+12>>2]&1023](I)}H=H+1|0;if((H|0)>=(k[t>>2]|0))break a}if((K|0)==12){H=Rb()|0;G=Q;Yua(h);Yua(E);Ava(n);N=G;O=H;K=15}else if((K|0)==13){H=Rb()|0;P=Q;R=H;vva(q);Qb(R|0)}else if((K|0)==14){H=Rb()|0;N=Q;O=H;K=15}else if((K|0)==24){H=Rb()|0;S=Q;T=H;K=26}else if((K|0)==25){H=Rb()|0;G=Q;Yua(v);S=G;T=H;K=26}if((K|0)==15){P=N;R=O;vva(q);Qb(R|0)}else if((K|0)==26){k[u>>2]=27468;k[q>>2]=27488;k[n>>2]=27560;Yua(E);Ava(n);vva(q);U=S;V=T;Qb(V|0)}}while(0);b:do if(EY()|0){T=w+56|0;S=w+4|0;k[w>>2]=27524;k[T>>2]=27544;B=0;wa(508,w+56|0,S|0);u=B;B=0;if(u&1){u=Rb()|0;W=Q;X=u;vva(T);Qb(X|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[T>>2]=27488;B=0;va(448,S|0);u=B;B=0;do if(u&1){R=Rb()|0;Y=Q;Z=R}else{k[S>>2]=27560;R=w+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[w+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,S|0,h|0);O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(h);Yua(R);Ava(S);Y=N;Z=O;break}Yua(h);B=0;Ia(40,w|0,149177,1)|0;O=B;B=0;do if(!(O&1)?(B=0,wa(510,x|0,S|0),N=B,B=0,!(N&1)):0){B=0;ya(425,x|0)|0;N=B;B=0;if(N&1){N=Rb()|0;P=Q;Yua(x);_=P;$=N;break}else{Yua(x);k[w>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(R);Ava(S);vva(T);break b}}else K=44;while(0);if((K|0)==44){O=Rb()|0;_=Q;$=O}k[w>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(R);Ava(S);vva(T);U=_;V=$;Qb(V|0)}while(0);W=Y;X=Z;vva(T);Qb(X|0)}while(0);if(!(k[b>>2]|0)){aa=uY()|0;nZ(j,i,1,2,4,0,aa)|0;uY()|0;ba=+p[i>>3];p[c>>3]=ba;r=g;return}X=k[k[b+4>>2]>>2]|0;Ec[k[(k[X>>2]|0)+12>>2]&1023](X);aa=uY()|0;nZ(j,i,1,2,4,0,aa)|0;uY()|0;ba=+p[i>>3];p[c>>3]=ba;r=g;return}function si(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;h=r;r=r+352|0;i=h+340|0;j=h+24|0;l=h+16|0;m=h+8|0;n=h;o=h+336|0;q=h+332|0;s=h+184|0;t=h+320|0;u=h+48|0;v=h+32|0;p[j>>3]=0.0;p[l>>3]=0.0;p[m>>3]=0.0;p[n>>3]=0.0;if(!(k[c>>2]|0))w=0;else{x=k[k[c+4>>2]>>2]|0;w=Hc[k[(k[x>>2]|0)+52>>2]&511](x)|0}x=a+20|0;a=th(k[x>>2]|0)|0;k[o>>2]=a;if((a|0)>0){y=0.0;z=0.0;c=0;do{A=qh(k[x>>2]|0,c)|0;y=+Zc[k[(k[A>>2]|0)+540>>2]&255](A)+y;p[l>>3]=y;z=+Zc[k[(k[A>>2]|0)+544>>2]&255](A)+z;p[n>>3]=z;c=c+1|0}while((c|0)<(a|0))}nZ(l,j,1,2,4,0,uY()|0)|0;uY()|0;nZ(n,m,1,2,4,0,uY()|0)|0;uY()|0;nZ(o,q,1,4,1,0,uY()|0)|0;uY()|0;a:do if((k[q>>2]|0)>0){n=s+56|0;l=s+4|0;a=s+56|0;c=s+128|0;A=s+132|0;C=s+36|0;D=s+52|0;E=b+4|0;F=0;while(1){if((F|0)<(k[o>>2]|0)){if(g?((F|0)%100|0|0)==0&(EY()|0):0){k[s>>2]=27524;k[n>>2]=27544;B=0;wa(508,a|0,l|0);G=B;B=0;if(G&1){H=15;break}k[c>>2]=0;k[A>>2]=-1;k[s>>2]=27468;k[n>>2]=27488;B=0;va(448,l|0);G=B;B=0;if(G&1){H=16;break}k[l>>2]=27560;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[D>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,l|0,i|0);G=B;B=0;if(G&1){H=14;break}Yua(i);B=0;G=Ia(40,s|0,66376,1)|0;I=B;B=0;if(I&1){H=26;break}B=0;I=Ia(40,G|0,66378,28)|0;G=B;B=0;if(G&1){H=26;break}B=0;G=Sa(1,I|0,+(+(F|0)/+(k[o>>2]|0)*100.0))|0;I=B;B=0;if(I&1){H=26;break}B=0;Ia(40,G|0,66411,4)|0;G=B;B=0;if(G&1){H=26;break}B=0;wa(510,t|0,l|0);G=B;B=0;if(G&1){H=26;break}B=0;ya(424,t|0)|0;G=B;B=0;if(G&1){H=27;break}Yua(t);k[s>>2]=27468;k[n>>2]=27488;k[l>>2]=27560;Yua(C);Ava(l);vva(n)}G=qh(k[x>>2]|0,F)|0;Lc[k[(k[G>>2]|0)+532>>2]&15](G,b,w,d,e,f,+p[j>>3],+p[m>>3])}if(((F|0)%100|0|0)==0?(k[b>>2]|0)!=0:0){G=k[k[E>>2]>>2]|0;Ec[k[(k[G>>2]|0)+12>>2]&1023](G)}F=F+1|0;if((F|0)>=(k[q>>2]|0))break a}if((H|0)==14){F=Rb()|0;E=Q;Yua(i);Yua(C);Ava(l);J=E;K=F;H=17}else if((H|0)==15){F=Rb()|0;L=Q;M=F;vva(n);Qb(M|0)}else if((H|0)==16){F=Rb()|0;J=Q;K=F;H=17}else if((H|0)==26){F=Rb()|0;N=Q;O=F;H=28}else if((H|0)==27){F=Rb()|0;E=Q;Yua(t);N=E;O=F;H=28}if((H|0)==17){L=J;M=K;vva(n);Qb(M|0)}else if((H|0)==28){k[s>>2]=27468;k[n>>2]=27488;k[l>>2]=27560;Yua(C);Ava(l);vva(n);P=N;R=O;Qb(R|0)}}while(0);b:do if(g?EY()|0:0){O=u+56|0;N=u+4|0;k[u>>2]=27524;k[O>>2]=27544;B=0;wa(508,u+56|0,N|0);s=B;B=0;if(s&1){s=Rb()|0;S=Q;T=s;vva(O);Qb(T|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[O>>2]=27488;B=0;va(448,N|0);s=B;B=0;do if(s&1){M=Rb()|0;U=Q;V=M}else{k[N>>2]=27560;M=u+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[u+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,N|0,i|0);K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(i);Yua(M);Ava(N);U=J;V=K;break}Yua(i);B=0;Ia(40,u|0,149177,1)|0;K=B;B=0;do if(!(K&1)?(B=0,wa(510,v|0,N|0),J=B,B=0,!(J&1)):0){B=0;ya(424,v|0)|0;J=B;B=0;if(J&1){J=Rb()|0;L=Q;Yua(v);W=L;X=J;break}else{Yua(v);k[u>>2]=27468;k[O>>2]=27488;k[N>>2]=27560;Yua(M);Ava(N);vva(O);break b}}else H=47;while(0);if((H|0)==47){K=Rb()|0;W=Q;X=K}k[u>>2]=27468;k[O>>2]=27488;k[N>>2]=27560;Yua(M);Ava(N);vva(O);P=W;R=X;Qb(R|0)}while(0);S=U;T=V;vva(O);Qb(T|0)}while(0);if(!w){r=h;return}Tqa(w);r=h;return}function ti(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0.0,m=0.0,n=0.0,o=0.0;c=r;r=r+32|0;d=c+24|0;e=c+16|0;f=c+8|0;g=c;if(!(k[b>>2]|0))h=0;else{i=k[k[b+4>>2]>>2]|0;h=Hc[k[(k[i>>2]|0)+52>>2]&511](i)|0}p[e>>3]=0.0;p[g>>3]=0.0;i=a+20|0;if((th(k[i>>2]|0)|0)>0){j=0.0;l=0.0;a=0;do{b=qh(k[i>>2]|0,a)|0;j=+Zc[k[(k[b>>2]|0)+540>>2]&255](b)+j;p[g>>3]=j;l=+id[k[(k[b>>2]|0)+536>>2]&63](b,h)+l;p[e>>3]=l;a=a+1|0}while((a|0)<(th(k[i>>2]|0)|0))}nZ(g,f,1,2,4,0,uY()|0)|0;uY()|0;nZ(e,d,1,2,4,0,uY()|0)|0;uY()|0;if(!h){m=+p[d>>3];n=+p[f>>3];o=m/n;r=c;return +o}Tqa(h);m=+p[d>>3];n=+p[f>>3];o=m/n;r=c;return +o}function ui(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;c=r;r=r+192|0;d=c+172|0;e=c+168|0;f=c+164|0;g=c+160|0;h=c+156|0;i=c+152|0;j=c+16|0;l=c;k[e>>2]=0;k[f>>2]=0;m=Qqa(4)|0;k[m>>2]=39316;n=Qqa(4)|0;k[n>>2]=39240;o=Qqa(8)|0;q=a+24|0;B=0;s=Xa(244,k[q>>2]|0,506)|0;t=B;B=0;a:do if(!(t&1)?(B=0,va(485,o|0),u=B,B=0,!(u&1)):0){do if(k[o>>2]|0){B=0;u=ya(423,4)|0;v=B;B=0;if(v&1){w=21;break a}B=0;eb(505,u|0,s|0,0);v=B;B=0;if(v&1){v=Rb()|0;x=Q;Sqa(u);y=x;z=v;break a}else{k[o+4>>2]=u;break}}while(0);u=Qqa(8)|0;B=0;v=Xa(244,k[q>>2]|0,506)|0;x=B;B=0;b:do if(!(x&1)?(B=0,va(485,u|0),A=B,B=0,!(A&1)):0){do if(k[u>>2]|0){B=0;A=ya(423,4)|0;C=B;B=0;if(C&1){w=23;break b}B=0;eb(505,A|0,v|0,0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Sqa(A);E=D;F=C;break b}else{k[u+4>>2]=A;break}}while(0);A=a+44|0;hO(k[A>>2]|0,f,0,131);cO(k[A>>2]|0,g,159);UZ(e,a,141,608);C=a+20|0;if((th(k[C>>2]|0)|0)>0){D=0;do{G=qh(k[C>>2]|0,D)|0;Kda(m,o,u,k[f>>2]|0,G);D=D+1|0}while((D|0)<(th(k[C>>2]|0)|0))}if((k[u>>2]|0)!=0?(D=u+4|0,G=k[k[D>>2]>>2]|0,Ec[k[(k[G>>2]|0)+12>>2]&1023](G),(k[u>>2]|0)!=0):0){G=k[k[D>>2]>>2]|0;H=Hc[k[(k[G>>2]|0)+52>>2]&511](G)|0}else H=0;if((th(k[q>>2]|0)|0)>0){G=o+4|0;D=0;do{I=qh(k[q>>2]|0,D)|0;J=H+((Qn(I)|0)<<3)|0;if(+p[J>>3]==1.0){J=Rn(I)|0;K=(k[f>>2]|0)+(J<<2)|0;k[K>>2]=(k[K>>2]|0)+1}K=Rn(I)|0;J=k[g>>2]|0;if(((J|0)!=0?(k[(k[f>>2]|0)+(K<<2)>>2]|0)>(J|0):0)?(J=Qn(I)|0,K=Qn(I)|0,(k[o>>2]|0)!=0):0){I=k[k[G>>2]>>2]|0;Jc[k[(k[I>>2]|0)+20>>2]&1](I,J,+p[(k[e>>2]|0)+(K<<3)>>3],0)}D=D+1|0}while((D|0)<(th(k[q>>2]|0)|0))}D=k[A>>2]|0;G=k[f>>2]|0;qO(D,G,th(k[q>>2]|0)|0,131);if((k[o>>2]|0)!=0?(G=o+4|0,D=k[k[G>>2]>>2]|0,Ec[k[(k[D>>2]|0)+12>>2]&1023](D),(k[o>>2]|0)!=0):0){D=k[k[G>>2]>>2]|0;L=Hc[k[(k[D>>2]|0)+52>>2]&511](D)|0}else L=0;D=k[f>>2]|0;if(D)Tqa(D);k[f>>2]=0;if(H)Tqa(H);D=k[e>>2]|0;if(D)Tqa(D);k[e>>2]=0;if((k[o>>2]|0)!=0?(D=k[o+4>>2]|0,(D|0)!=0):0){G=k[D>>2]|0;if(G)Ec[k[(k[G>>2]|0)+4>>2]&1023](G);Sqa(D)}Sqa(o);if((k[u>>2]|0)!=0?(D=k[u+4>>2]|0,(D|0)!=0):0){G=k[D>>2]|0;if(G)Ec[k[(k[G>>2]|0)+4>>2]&1023](G);Sqa(D)}Sqa(u);WZ(a,L,141,608);if(L)Tqa(L);oda(n,a);D=Qqa(8)|0;B=0;G=Xa(244,k[q>>2]|0,506)|0;K=B;B=0;c:do if(K&1)w=69;else{B=0;va(485,D|0);J=B;B=0;if(J&1){w=69;break}do if(k[D>>2]|0){B=0;J=ya(423,4)|0;I=B;B=0;if(I&1){w=69;break c}B=0;eb(505,J|0,G|0,0);I=B;B=0;if(I&1){I=Rb()|0;M=Q;Sqa(J);N=M;O=I;break c}else{k[D+4>>2]=J;break}}while(0);if((th(k[C>>2]|0)|0)>0){J=0;do{Mda(m,D,qh(k[C>>2]|0,J)|0);J=J+1|0}while((J|0)<(th(k[C>>2]|0)|0))}do if(!(k[D>>2]|0))P=0;else{J=D+4|0;I=k[k[J>>2]>>2]|0;Ec[k[(k[I>>2]|0)+12>>2]&1023](I);if(!(k[D>>2]|0)){P=0;break}I=k[k[J>>2]>>2]|0;M=Hc[k[(k[I>>2]|0)+52>>2]&511](I)|0;if(!(k[D>>2]|0)){P=M;break}I=k[J>>2]|0;if(!I){P=M;break}J=k[I>>2]|0;if(J)Ec[k[(k[J>>2]|0)+4>>2]&1023](J);Sqa(I);P=M}while(0);Sqa(D);k[h>>2]=0;if((th(k[q>>2]|0)|0)>0){M=0;do{I=qh(k[q>>2]|0,M)|0;do if(Tn(I,506)|0){J=P+((Qn(I)|0)<<3)|0;if(!(+p[J>>3]==1.0)){$n(I);break}bo(I);if(fo(I)|0)break;k[h>>2]=(k[h>>2]|0)+1}while(0);M=M+1|0}while((M|0)<(th(k[q>>2]|0)|0))}if(P)Tqa(P);Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Ec[k[(k[n>>2]|0)+4>>2]&1023](n);nZ(h,i,1,4,4,0,uY()|0)|0;uY()|0;M=k[i>>2]|0;k[h>>2]=M;p[b>>3]=+(M|0);if(!(CY()|0)){Eh(a);r=c;return}M=j+56|0;I=j+4|0;k[j>>2]=27524;k[M>>2]=27544;B=0;wa(508,j+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;R=Q;S=J;vva(M);Qb(S|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[M>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){T=Rb()|0;U=Q;V=T}else{k[I>>2]=27560;T=j+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,I|0,d|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(d);Yua(T);Ava(I);U=X;V=W;break}Yua(d);B=0;W=Ia(40,j|0,66416,40)|0;X=B;B=0;do if(X&1)w=95;else{B=0;Y=Xa(242,W|0,k[h>>2]|0)|0;Z=B;B=0;if(Z&1){w=95;break}B=0;Ia(40,Y|0,149177,1)|0;Y=B;B=0;if(Y&1){w=95;break}B=0;wa(510,l|0,I|0);Y=B;B=0;if(Y&1){w=95;break}B=0;ya(425,l|0)|0;Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(l);_=Y;$=Z;break}Yua(l);k[j>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(T);Ava(I);vva(M);Eh(a);r=c;return}while(0);if((w|0)==95){W=Rb()|0;_=W;$=Q}k[j>>2]=27468;k[M>>2]=27488;k[I>>2]=27560;Yua(T);Ava(I);vva(M);aa=_;ba=$;Qb(aa|0)}while(0);R=U;S=V;vva(M);Qb(S|0)}while(0);if((w|0)==69){C=Rb()|0;N=Q;O=C}Sqa(D);aa=O;ba=N;Qb(aa|0)}else w=23;while(0);if((w|0)==23){v=Rb()|0;E=Q;F=v}Sqa(u);aa=F;ba=E;Qb(aa|0)}else w=21;while(0);if((w|0)==21){w=Rb()|0;y=Q;z=w}Sqa(o);aa=z;ba=y;Qb(aa|0)}function vi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+176|0;d=c+160|0;e=c+156|0;f=c+152|0;g=c+16|0;h=c;i=Qqa(4)|0;k[i>>2]=39316;j=Qqa(8)|0;l=a+24|0;B=0;m=Xa(244,k[l>>2]|0,506)|0;n=B;B=0;a:do if(!(n&1)?(B=0,va(485,j|0),o=B,B=0,!(o&1)):0){do if(k[j>>2]|0){B=0;o=ya(423,4)|0;q=B;B=0;if(q&1){s=17;break a}B=0;eb(505,o|0,m|0,0);q=B;B=0;if(q&1){q=Rb()|0;t=Q;Sqa(o);u=t;v=q;break a}else{k[j+4>>2]=o;break}}while(0);o=a+20|0;if((th(k[o>>2]|0)|0)>0){q=0;do{Mda(i,j,qh(k[o>>2]|0,q)|0);q=q+1|0}while((q|0)<(th(k[o>>2]|0)|0))}if((k[j>>2]|0)!=0?(o=j+4|0,q=k[k[o>>2]>>2]|0,Ec[k[(k[q>>2]|0)+12>>2]&1023](q),(k[j>>2]|0)!=0):0){q=k[k[o>>2]>>2]|0;t=Hc[k[(k[q>>2]|0)+52>>2]&511](q)|0;if((k[j>>2]|0)!=0?(q=k[o>>2]|0,(q|0)!=0):0){o=k[q>>2]|0;if(o)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);Sqa(q);w=t}else w=t}else w=0;Sqa(j);Ec[k[(k[i>>2]|0)+4>>2]&1023](i);k[e>>2]=0;if((th(k[l>>2]|0)|0)>0){t=0;q=0;while(1){o=qh(k[l>>2]|0,q)|0;do if(Tn(o,492)|0){x=w+((Qn(o)|0)<<3)|0;if(!(+p[x>>3]==1.0)){$n(o);y=t;break}bo(o);if(!(fo(o)|0)){x=t+1|0;k[e>>2]=x;y=x}else y=t}else y=t;while(0);q=q+1|0;if((q|0)>=(th(k[l>>2]|0)|0))break;else t=y}}if(w)Tqa(w);nZ(e,f,1,4,4,0,uY()|0)|0;uY()|0;t=k[f>>2]|0;k[e>>2]=t;p[b>>3]=+(t|0);if(!(CY()|0)){r=c;return}t=g+56|0;q=g+4|0;k[g>>2]=27524;k[t>>2]=27544;B=0;wa(508,g+56|0,q|0);o=B;B=0;if(o&1){o=Rb()|0;z=Q;A=o;vva(t);Qb(A|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[t>>2]=27488;B=0;va(448,q|0);o=B;B=0;do if(o&1){x=Rb()|0;C=Q;D=x}else{k[q>>2]=27560;x=g+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,q|0,d|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(d);Yua(x);Ava(q);C=F;D=E;break}Yua(d);B=0;E=Ia(40,g|0,66457,41)|0;F=B;B=0;do if(((!(F&1)?(B=0,G=Xa(242,E|0,k[e>>2]|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,G|0,149177,1)|0,G=B,B=0,!(G&1)):0)?(B=0,wa(510,h|0,q|0),G=B,B=0,!(G&1)):0){B=0;ya(425,h|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(h);I=G;J=H;break}Yua(h);k[g>>2]=27468;k[t>>2]=27488;k[q>>2]=27560;Yua(x);Ava(q);vva(t);r=c;return}else s=43;while(0);if((s|0)==43){E=Rb()|0;I=E;J=Q}k[g>>2]=27468;k[t>>2]=27488;k[q>>2]=27560;Yua(x);Ava(q);vva(t);K=I;L=J;Qb(K|0)}while(0);z=C;A=D;vva(t);Qb(A|0)}else s=17;while(0);if((s|0)==17){s=Rb()|0;u=Q;v=s}Sqa(j);K=v;L=u;Qb(K|0)}function wi(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;sY(g);f=Qqa(200)|0;B=0;va(476,f|0);i=B;B=0;if(i&1){i=Rb()|0;Sqa(f);Qb(i|0)}else{i=a+16|0;k[i>>2]=f;SX(f,0,0);f=zY(e,1)|0;SX(k[i>>2]|0,1,0);xi(a,b,c,d,f,h,0);SX(k[i>>2]|0,2,0);i=k[a+44>>2]|0;a=Qqa(12)|0;k[a>>2]=27752;k[a+4>>2]=g;k[a+8>>2]=2;YN(i,a);return}}function xi(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0;h=r;r=r+960|0;i=h+936|0;j=h+920|0;l=h+904|0;m=h+768|0;n=h+924|0;o=h+616|0;p=h+908|0;q=h+480|0;s=h+752|0;t=h+328|0;u=h+464|0;v=h+192|0;w=h+176|0;x=h+40|0;y=h+24|0;z=h+12|0;A=h;C=vY()|0;D=a+4|0;k[D>>2]=e;k[a+12>>2]=(k[a>>2]|0)+-1;E=Qqa(36)|0;B=0;va(481,E|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Sqa(E);H=G;I=F;Qb(I|0)}k[a+48>>2]=E;E=(C|0)==0;if(E)J=Xsa(b,c,65360)|0;else J=0;c=Qqa(112)|0;B=0;ua(164,c|0,J|0,e|0,f|0,g|0);g=B;B=0;if(g&1){g=Rb()|0;f=Q;Sqa(c);H=f;I=g;Qb(I|0)}g=a+8|0;wh(0,g,a,c,k[D>>2]|0);f=Xsa(d,(Lta(d)|0)+1|0,65363)|0;d=a+20|0;e=a+24|0;b=a+28|0;C=a+40|0;F=a+32|0;G=a+36|0;K=a+44|0;tZ(d,e,b,C,F,G,K,c,f,159121,k[D>>2]|0,k[a>>2]|0,k[g>>2]|0);a:do if((k[a>>2]|0)>0){D=m+56|0;L=m+4|0;M=m+56|0;N=m+128|0;O=m+132|0;P=m+36|0;R=m+52|0;S=o+56|0;T=o+4|0;U=o+56|0;V=o+128|0;W=o+132|0;X=o+36|0;Y=o+52|0;Z=q+56|0;_=q+4|0;$=q+56|0;aa=q+128|0;ba=q+132|0;ca=q+36|0;da=q+52|0;ea=t+56|0;fa=t+4|0;ga=t+56|0;ha=t+128|0;ia=t+132|0;ja=t+36|0;ka=t+52|0;la=v+56|0;ma=v+4|0;na=v+56|0;oa=v+128|0;pa=v+132|0;qa=v+36|0;ra=v+52|0;sa=0;while(1){if(AY()|0){k[m>>2]=27524;k[D>>2]=27544;B=0;wa(508,M|0,L|0);ta=B;B=0;if(ta&1){xa=13;break}k[N>>2]=0;k[O>>2]=-1;k[m>>2]=27468;k[D>>2]=27488;B=0;va(448,L|0);ta=B;B=0;if(ta&1){xa=14;break}k[L>>2]=27560;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[R>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,L|0,i|0);ta=B;B=0;if(ta&1){xa=12;break}Yua(i);B=0;ta=Ia(40,m|0,65365,47)|0;za=B;B=0;if(za&1){xa=25;break}B=0;za=ya(427,k[(k[g>>2]|0)+(sa<<2)>>2]|0)|0;Aa=B;B=0;if(Aa&1){xa=25;break}Aa=Lta(za)|0;B=0;Ba=Ia(40,ta|0,za|0,Aa|0)|0;Aa=B;B=0;if(Aa&1){xa=25;break}B=0;Ia(40,Ba|0,136770,2)|0;Ba=B;B=0;if(Ba&1){xa=25;break}B=0;wa(510,n|0,L|0);Ba=B;B=0;if(Ba&1){xa=25;break}B=0;ya(425,n|0)|0;Ba=B;B=0;if(Ba&1){xa=26;break}Yua(n);k[m>>2]=27468;k[D>>2]=27488;k[L>>2]=27560;Yua(P);Ava(L);vva(D)}Ba=k[(k[g>>2]|0)+(sa<<2)>>2]|0;yh(a,Ba,Ba);if(!sa){if(AY()|0){k[o>>2]=27524;k[S>>2]=27544;B=0;wa(508,U|0,T|0);Aa=B;B=0;if(Aa&1){xa=34;break}k[V>>2]=0;k[W>>2]=-1;k[o>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);Aa=B;B=0;if(Aa&1){xa=35;break}k[T>>2]=27560;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[Y>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,T|0,i|0);Aa=B;B=0;if(Aa&1){xa=33;break}Yua(i);B=0;Ia(40,o|0,65450,27)|0;Aa=B;B=0;if(Aa&1){xa=42;break}B=0;wa(510,p|0,T|0);Aa=B;B=0;if(Aa&1){xa=42;break}B=0;ya(425,p|0)|0;Aa=B;B=0;if(Aa&1){xa=43;break}Yua(p);k[o>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(X);Ava(T);vva(S)}BZ(k[b>>2]|0,k[K>>2]|0)}if(AY()|0){k[q>>2]=27524;k[Z>>2]=27544;B=0;wa(508,$|0,_|0);Aa=B;B=0;if(Aa&1){xa=51;break}k[aa>>2]=0;k[ba>>2]=-1;k[q>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);Aa=B;B=0;if(Aa&1){xa=52;break}k[_>>2]=27560;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[da>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,_|0,i|0);Aa=B;B=0;if(Aa&1){xa=50;break}Yua(i);B=0;Ia(40,q|0,65478,33)|0;Aa=B;B=0;if(Aa&1){xa=59;break}B=0;wa(510,s|0,_|0);Aa=B;B=0;if(Aa&1){xa=59;break}B=0;ya(425,s|0)|0;Aa=B;B=0;if(Aa&1){xa=60;break}Yua(s);k[q>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ca);Ava(_);vva(Z)}YZ(k[e>>2]|0,k[F>>2]|0,k[K>>2]|0,Ba);if(AY()|0){k[t>>2]=27524;k[ea>>2]=27544;B=0;wa(508,ga|0,fa|0);Aa=B;B=0;if(Aa&1){xa=67;break}k[ha>>2]=0;k[ia>>2]=-1;k[t>>2]=27468;k[ea>>2]=27488;B=0;va(448,fa|0);Aa=B;B=0;if(Aa&1){xa=68;break}k[fa>>2]=27560;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[ka>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,fa|0,i|0);Aa=B;B=0;if(Aa&1){xa=66;break}Yua(i);B=0;Ia(40,t|0,65512,40)|0;Aa=B;B=0;if(Aa&1){xa=75;break}B=0;wa(510,u|0,fa|0);Aa=B;B=0;if(Aa&1){xa=75;break}B=0;ya(425,u|0)|0;Aa=B;B=0;if(Aa&1){xa=76;break}Yua(u);k[t>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(ja);Ava(fa);vva(ea)}zZ(k[e>>2]|0,k[K>>2]|0,Ba);if(AY()|0){k[v>>2]=27524;k[la>>2]=27544;B=0;wa(508,na|0,ma|0);Ba=B;B=0;if(Ba&1){xa=83;break}k[oa>>2]=0;k[pa>>2]=-1;k[v>>2]=27468;k[la>>2]=27488;B=0;va(448,ma|0);Ba=B;B=0;if(Ba&1){xa=84;break}k[ma>>2]=27560;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[ra>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,ma|0,i|0);Ba=B;B=0;if(Ba&1){xa=82;break}Yua(i);B=0;Ia(40,v|0,65413,36)|0;Ba=B;B=0;if(Ba&1){xa=91;break}B=0;wa(510,w|0,ma|0);Ba=B;B=0;if(Ba&1){xa=91;break}B=0;ya(425,w|0)|0;Ba=B;B=0;if(Ba&1){xa=92;break}Yua(w);k[v>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(qa);Ava(ma);vva(la)}XZ(k[d>>2]|0,k[G>>2]|0,k[e>>2]|0,k[b>>2]|0,k[C>>2]|0,k[K>>2]|0)|0;sa=sa+1|0;if((sa|0)>=(k[a>>2]|0))break a}switch(xa|0){case 12:{sa=Rb()|0;ra=Q;Yua(i);Yua(P);Ava(L);Ca=ra;Da=sa;xa=15;break}case 13:{sa=Rb()|0;Ea=Q;Fa=sa;vva(D);Qb(Fa|0);break}case 14:{sa=Rb()|0;Ca=Q;Da=sa;xa=15;break}case 25:{sa=Rb()|0;Ga=Q;Ha=sa;xa=27;break}case 26:{sa=Rb()|0;ra=Q;Yua(n);Ga=ra;Ha=sa;xa=27;break}case 33:{sa=Rb()|0;ra=Q;Yua(i);Yua(X);Ava(T);Ja=ra;Ka=sa;xa=36;break}case 34:{sa=Rb()|0;La=Q;Ma=sa;vva(S);Qb(Ma|0);break}case 35:{sa=Rb()|0;Ja=Q;Ka=sa;xa=36;break}case 42:{sa=Rb()|0;Na=Q;Oa=sa;xa=44;break}case 43:{sa=Rb()|0;ra=Q;Yua(p);Na=ra;Oa=sa;xa=44;break}case 50:{sa=Rb()|0;ra=Q;Yua(i);Yua(ca);Ava(_);Pa=ra;Qa=sa;xa=53;break}case 51:{sa=Rb()|0;Ra=Q;Sa=sa;vva(Z);Qb(Sa|0);break}case 52:{sa=Rb()|0;Pa=Q;Qa=sa;xa=53;break}case 59:{sa=Rb()|0;Ta=Q;Ua=sa;xa=61;break}case 60:{sa=Rb()|0;ra=Q;Yua(s);Ta=ra;Ua=sa;xa=61;break}case 66:{sa=Rb()|0;ra=Q;Yua(i);Yua(ja);Ava(fa);Va=ra;Wa=sa;xa=69;break}case 67:{sa=Rb()|0;Ya=Q;Za=sa;vva(ea);Qb(Za|0);break}case 68:{sa=Rb()|0;Va=Q;Wa=sa;xa=69;break}case 75:{sa=Rb()|0;_a=Q;$a=sa;xa=77;break}case 76:{sa=Rb()|0;ra=Q;Yua(u);_a=ra;$a=sa;xa=77;break}case 82:{sa=Rb()|0;ra=Q;Yua(i);Yua(qa);Ava(ma);ab=ra;bb=sa;xa=85;break}case 83:{sa=Rb()|0;cb=Q;db=sa;vva(la);Qb(db|0);break}case 84:{sa=Rb()|0;ab=Q;bb=sa;xa=85;break}case 91:{sa=Rb()|0;fb=Q;gb=sa;xa=93;break}case 92:{sa=Rb()|0;ra=Q;Yua(w);fb=ra;gb=sa;xa=93;break}}switch(xa|0){case 15:{Ea=Ca;Fa=Da;vva(D);Qb(Fa|0);break}case 27:{k[m>>2]=27468;k[D>>2]=27488;k[L>>2]=27560;Yua(P);Ava(L);vva(D);H=Ga;I=Ha;Qb(I|0);break}case 36:{La=Ja;Ma=Ka;vva(S);Qb(Ma|0);break}case 44:{k[o>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(X);Ava(T);vva(S);H=Na;I=Oa;Qb(I|0);break}case 53:{Ra=Pa;Sa=Qa;vva(Z);Qb(Sa|0);break}case 61:{k[q>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ca);Ava(_);vva(Z);H=Ta;I=Ua;Qb(I|0);break}case 69:{Ya=Va;Za=Wa;vva(ea);Qb(Za|0);break}case 77:{k[t>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(ja);Ava(fa);vva(ea);H=_a;I=$a;Qb(I|0);break}case 85:{cb=ab;db=bb;vva(la);Qb(db|0);break}case 93:{k[v>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(qa);Ava(ma);vva(la);H=fb;I=gb;Qb(I|0);break}}}while(0);if(E)Tsa(J)|0;Tsa(f)|0;f=lta(l,j)|0;if(f){rO(k[K>>2]|0,f,951);f=k[K>>2]|0;J=Qqa(12)|0;k[J>>2]=28084;k[J+4>>2]=l;k[J+8>>2]=949;YN(f,J);J=k[K>>2]|0;K=Qqa(12)|0;k[K>>2]=28236;k[K+4>>2]=j;k[K+8>>2]=950;YN(J,K);Dka(c);Sqa(c);r=h;return}h=x+56|0;c=x+4|0;k[x>>2]=27524;k[h>>2]=27544;B=0;wa(508,x+56|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;hb=Q;ib=K;vva(h);Qb(ib|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[h>>2]=27488;B=0;va(448,c|0);K=B;B=0;do if(K&1){J=Rb()|0;jb=Q;kb=J}else{k[c>>2]=27560;J=x+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[x+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,c|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;f=Q;Yua(i);Yua(J);Ava(c);jb=f;kb=j;break}Yua(i);B=0;j=Ia(40,x|0,66499,34)|0;f=B;B=0;b:do if(!(f&1)?(B=0,Xa(239,j|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,y|0,65553,67);E=B;B=0;do if(!(E&1)){B=0;eb(502,z|0,66534,15);gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(y);lb=gb;mb=fb;break}B=0;wa(510,A|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;nb=1;ob=Q;pb=fb}else{B=0;ua(163,l|0,y|0,z|0,2672,A|0);fb=B;B=0;if(fb&1)qb=1;else{B=0;eb(503,l|0,1240,229);B=0;qb=0}fb=Rb()|0;gb=Q;Yua(A);nb=qb;ob=gb;pb=fb}Yua(z);Yua(y);if(nb){lb=pb;mb=ob}else{rb=ob;sb=pb;break b}}else{fb=Rb()|0;lb=fb;mb=Q}while(0);zb(l|0);rb=mb;sb=lb}else xa=113;while(0);if((xa|0)==113){j=Rb()|0;rb=Q;sb=j}k[x>>2]=27468;k[h>>2]=27488;k[c>>2]=27560;Yua(J);Ava(c);vva(h);H=rb;I=sb;Qb(I|0)}while(0);hb=jb;ib=kb;vva(h);Qb(ib|0)}
+-function Pm(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0;b=r;r=r+1216|0;c=b+1204|0;d=b+1032|0;e=b+1192|0;f=b+880|0;g=b+1180|0;h=b+744|0;i=b+1168|0;j=b+592|0;l=b+1016|0;m=b+440|0;n=b+728|0;o=b+304|0;q=b+576|0;s=b+152|0;t=b+288|0;u=b+16|0;v=b;w=d+56|0;x=d+4|0;k[d>>2]=27524;k[w>>2]=27544;B=0;wa(508,d+56|0,x|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(w);Qb(A|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[x>>2]=27560;C=d+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(x);D=G;E=F;break}Yua(c);B=0;Ia(40,d|0,68031,14)|0;F=B;B=0;do if(!(F&1)?(B=0,wa(510,e|0,x|0),G=B,B=0,!(G&1)):0){B=0;ya(424,e|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);I=H;J=G;break}Yua(e);k[d>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(w);G=f+56|0;H=f+4|0;k[f>>2]=27524;k[G>>2]=27544;B=0;wa(508,f+56|0,H|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;M=K;vva(G);Qb(M|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);K=B;B=0;do if(K&1){N=Rb()|0;O=Q;P=N}else{k[H>>2]=27560;N=f+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(c);Yua(N);Ava(H);O=S;P=R;break}Yua(c);B=0;R=Ia(40,f|0,79833,8)|0;S=B;B=0;do if(((!(S&1)?(B=0,T=Xa(242,R|0,k[a+4>>2]|0)|0,U=B,B=0,!(U&1)):0)?(B=0,Ia(40,T|0,149177,1)|0,T=B,B=0,!(T&1)):0)?(B=0,wa(510,g|0,H|0),T=B,B=0,!(T&1)):0){B=0;ya(424,g|0)|0;T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(g);V=U;W=T;break}Yua(g);k[f>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(N);Ava(H);vva(G);T=h+56|0;U=h+4|0;k[h>>2]=27524;k[T>>2]=27544;B=0;wa(508,h+56|0,U|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Z=X;vva(T);Qb(Z|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[T>>2]=27488;B=0;va(448,U|0);X=B;B=0;do if(X&1){_=Rb()|0;$=Q;aa=_}else{k[U>>2]=27560;_=h+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,U|0,c|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(c);Yua(_);Ava(U);$=ca;aa=ba;break}Yua(c);B=0;ba=Ia(40,h|0,79842,11)|0;ca=B;B=0;do if(ca&1)da=114;else{B=0;ea=Xa(242,ba|0,k[a+8>>2]|0)|0;fa=B;B=0;if(fa&1){da=114;break}B=0;Ia(40,ea|0,149177,1)|0;ea=B;B=0;if(ea&1){da=114;break}B=0;wa(510,i|0,U|0);ea=B;B=0;if(ea&1){da=114;break}B=0;ya(424,i|0)|0;ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(i);ga=fa;ha=ea;break}Yua(i);k[h>>2]=27468;k[T>>2]=27488;k[U>>2]=27560;Yua(_);Ava(U);vva(T);ea=j+56|0;fa=j+4|0;k[j>>2]=27524;k[ea>>2]=27544;B=0;wa(508,j+56|0,fa|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;ka=ia;vva(ea);Qb(ka|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ea>>2]=27488;B=0;va(448,fa|0);ia=B;B=0;do if(ia&1){la=Rb()|0;ma=Q;na=la}else{k[fa>>2]=27560;la=j+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fa|0,c|0);oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;Yua(c);Yua(la);Ava(fa);ma=pa;na=oa;break}Yua(c);B=0;oa=Ia(40,j|0,79854,8)|0;pa=B;B=0;do if(pa&1)da=117;else{B=0;qa=Xa(242,oa|0,k[a+12>>2]|0)|0;ra=B;B=0;if(ra&1){da=117;break}B=0;Ia(40,qa|0,149177,1)|0;qa=B;B=0;if(qa&1){da=117;break}B=0;wa(510,l|0,fa|0);qa=B;B=0;if(qa&1){da=117;break}B=0;ya(424,l|0)|0;qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(l);sa=ra;ta=qa;break}Yua(l);k[j>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(la);Ava(fa);vva(ea);qa=m+56|0;ra=m+4|0;k[m>>2]=27524;k[qa>>2]=27544;B=0;wa(508,m+56|0,ra|0);ua=B;B=0;if(ua&1){ua=Rb()|0;xa=Q;za=ua;vva(qa);Qb(za|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[qa>>2]=27488;B=0;va(448,ra|0);ua=B;B=0;do if(ua&1){Aa=Rb()|0;Ba=Q;Ca=Aa}else{k[ra>>2]=27560;Aa=m+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(c);Yua(Aa);Ava(ra);Ba=Ea;Ca=Da;break}Yua(c);B=0;Da=Ia(40,m|0,68046,11)|0;Ea=B;B=0;do if(Ea&1)da=120;else{Fa=a+24|0;B=0;Ga=Xa(242,Da|0,k[Fa>>2]|0)|0;Ha=B;B=0;if(Ha&1){da=120;break}B=0;Ia(40,Ga|0,149177,1)|0;Ga=B;B=0;if(Ga&1){da=120;break}B=0;wa(510,n|0,ra|0);Ga=B;B=0;if(Ga&1){da=120;break}B=0;ya(424,n|0)|0;Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ha=Q;Yua(n);Ja=Ha;Ka=Ga;break}Yua(n);k[m>>2]=27468;k[qa>>2]=27488;k[ra>>2]=27560;Yua(Aa);Ava(ra);vva(qa);Ga=o+56|0;Ha=o+4|0;k[o>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,o+56|0,Ha|0);La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Na=La;vva(Ga);Qb(Na|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Ha|0);La=B;B=0;do if(La&1){Oa=Rb()|0;Pa=Q;Qa=Oa}else{k[Ha>>2]=27560;Oa=o+36|0;k[Oa>>2]=0;k[Oa+4>>2]=0;k[Oa+8>>2]=0;k[Oa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ha|0,c|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;Ta=Q;Yua(c);Yua(Oa);Ava(Ha);Pa=Ta;Qa=Ra;break}Yua(c);B=0;Ra=Ia(40,o|0,144094,18)|0;Ta=B;B=0;do if(Ta&1)da=123;else{B=0;Ua=ya(427,k[a+28>>2]|0)|0;Va=B;B=0;if(Va&1){da=123;break}Va=Lta(Ua)|0;B=0;Wa=Ia(40,Ra|0,Ua|0,Va|0)|0;Va=B;B=0;if(Va&1){da=123;break}B=0;Ia(40,Wa|0,149177,1)|0;Wa=B;B=0;if(Wa&1){da=123;break}B=0;wa(510,q|0,Ha|0);Wa=B;B=0;if(Wa&1){da=123;break}B=0;ya(424,q|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Va=Q;Yua(q);Ya=Va;Za=Wa;break}Yua(q);k[o>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Oa);Ava(Ha);vva(Ga);Wa=s+56|0;Va=s+4|0;k[s>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,s+56|0,Va|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;_a=Q;$a=Ua;vva(Wa);Qb($a|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Va|0);Ua=B;B=0;do if(Ua&1){ab=Rb()|0;bb=Q;cb=ab}else{k[Va>>2]=27560;ab=s+36|0;k[ab>>2]=0;k[ab+4>>2]=0;k[ab+8>>2]=0;k[ab+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Va|0,c|0);db=B;B=0;if(db&1){db=Rb()|0;eb=Q;Yua(c);Yua(ab);Ava(Va);bb=eb;cb=db;break}Yua(c);B=0;Ia(40,s|0,68058,22)|0;db=B;B=0;do if(!(db&1)){B=0;wa(510,t|0,Va|0);eb=B;B=0;if(eb&1){da=126;break}B=0;ya(424,t|0)|0;eb=B;B=0;if(eb&1){eb=Rb()|0;fb=Q;Yua(t);gb=fb;hb=eb;break}Yua(t);k[s>>2]=27468;k[Wa>>2]=27488;k[Va>>2]=27560;Yua(ab);Ava(Va);vva(Wa);if((k[Fa>>2]|0)<=0){r=b;return}eb=u+56|0;fb=u+4|0;ib=u+56|0;jb=u+128|0;kb=u+132|0;lb=u+36|0;mb=u+52|0;nb=a+20|0;ob=a+16|0;pb=0;while(1){k[u>>2]=27524;k[eb>>2]=27544;B=0;wa(508,ib|0,fb|0);qb=B;B=0;if(qb&1){da=95;break}k[jb>>2]=0;k[kb>>2]=-1;k[u>>2]=27468;k[eb>>2]=27488;B=0;va(448,fb|0);qb=B;B=0;if(qb&1){da=96;break}k[fb>>2]=27560;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[mb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fb|0,c|0);qb=B;B=0;if(qb&1){da=94;break}Yua(c);B=0;qb=Xa(242,u|0,pb|0)|0;rb=B;B=0;if(rb&1){da=129;break}B=0;rb=Ia(40,qb|0,124614,1)|0;qb=B;B=0;if(qb&1){da=129;break}B=0;qb=Sa(1,rb|0,+(+p[(k[nb>>2]|0)+(pb<<3)>>3]))|0;rb=B;B=0;if(rb&1){da=129;break}B=0;rb=Ia(40,qb|0,104947,1)|0;qb=B;B=0;if(qb&1){da=129;break}B=0;qb=Sa(1,rb|0,+(+p[(k[ob>>2]|0)+(pb<<3)>>3]))|0;rb=B;B=0;if(rb&1){da=129;break}B=0;Ia(40,qb|0,149177,1)|0;qb=B;B=0;if(qb&1){da=129;break}B=0;wa(510,v|0,fb|0);qb=B;B=0;if(qb&1){da=129;break}B=0;ya(424,v|0)|0;qb=B;B=0;if(qb&1){da=130;break}Yua(v);k[u>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(lb);Ava(fb);vva(eb);pb=pb+1|0;if((pb|0)>=(k[Fa>>2]|0)){da=132;break}}if((da|0)==94){pb=Rb()|0;ob=Q;Yua(c);Yua(lb);Ava(fb);sb=ob;tb=pb;da=97}else if((da|0)==95){pb=Rb()|0;ub=Q;vb=pb;vva(eb);Qb(vb|0)}else if((da|0)==96){pb=Rb()|0;sb=Q;tb=pb;da=97}else if((da|0)==129){pb=Rb()|0;wb=Q;xb=pb;da=131}else if((da|0)==130){pb=Rb()|0;ob=Q;Yua(v);wb=ob;xb=pb;da=131}else if((da|0)==132){r=b;return}if((da|0)==97){ub=sb;vb=tb;vva(eb);Qb(vb|0)}else if((da|0)==131){k[u>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(lb);Ava(fb);vva(eb);yb=wb;zb=xb;Qb(zb|0)}}else da=126;while(0);if((da|0)==126){db=Rb()|0;gb=Q;hb=db}k[s>>2]=27468;k[Wa>>2]=27488;k[Va>>2]=27560;Yua(ab);Ava(Va);vva(Wa);yb=gb;zb=hb;Qb(zb|0)}while(0);_a=bb;$a=cb;vva(Wa);Qb($a|0)}while(0);if((da|0)==123){Ra=Rb()|0;Ya=Q;Za=Ra}k[o>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Oa);Ava(Ha);vva(Ga);yb=Ya;zb=Za;Qb(zb|0)}while(0);Ma=Pa;Na=Qa;vva(Ga);Qb(Na|0)}while(0);if((da|0)==120){Da=Rb()|0;Ja=Q;Ka=Da}k[m>>2]=27468;k[qa>>2]=27488;k[ra>>2]=27560;Yua(Aa);Ava(ra);vva(qa);yb=Ja;zb=Ka;Qb(zb|0)}while(0);xa=Ba;za=Ca;vva(qa);Qb(za|0)}while(0);if((da|0)==117){oa=Rb()|0;sa=Q;ta=oa}k[j>>2]=27468;k[ea>>2]=27488;k[fa>>2]=27560;Yua(la);Ava(fa);vva(ea);yb=sa;zb=ta;Qb(zb|0)}while(0);ja=ma;ka=na;vva(ea);Qb(ka|0)}while(0);if((da|0)==114){ba=Rb()|0;ga=Q;ha=ba}k[h>>2]=27468;k[T>>2]=27488;k[U>>2]=27560;Yua(_);Ava(U);vva(T);yb=ga;zb=ha;Qb(zb|0)}while(0);Y=$;Z=aa;vva(T);Qb(Z|0)}else da=111;while(0);if((da|0)==111){R=Rb()|0;V=Q;W=R}k[f>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(N);Ava(H);vva(G);yb=V;zb=W;Qb(zb|0)}while(0);L=O;M=P;vva(G);Qb(M|0)}else da=108;while(0);if((da|0)==108){F=Rb()|0;I=Q;J=F}k[d>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(C);Ava(x);vva(w);yb=I;zb=J;Qb(zb|0)}while(0);z=D;A=E;vva(w);Qb(A|0)}function Qm(a){a=a|0;return k[a+4>>2]|0}function Rm(a){a=a|0;return 616}function Sm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=104;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+8|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;u=(k[b>>2]|0)+4|0;k[b>>2]=u;v=a+12|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+28|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;i[v>>0]=i[a+32>>0]|0;v=(k[b>>2]|0)+1|0;k[b>>2]=v;t=a+24|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=t}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+25;w=a+24|0;break a;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+8|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+12|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;u=a+28|0;t=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;i[a+32>>0]=i[t>>0]|0;t=(k[b>>2]|0)+1|0;k[b>>2]=t;u=a+24|0;v=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=v;i[u+1>>0]=v>>8;i[u+2>>0]=v>>16;i[u+3>>0]=v>>24;k[b>>2]=(k[b>>2]|0)+4;w=u;break a;break}default:{u=g+56|0;v=g+4|0;k[g>>2]=27524;k[u>>2]=27544;B=0;wa(508,g+56|0,v|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;vva(u);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);t=B;B=0;do if(t&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,v|0,f|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(f);Yua(z);Ava(v);A=E;C=D;break}Yua(f);B=0;D=Ia(40,g|0,143951,43)|0;E=B;B=0;b:do if(!(E&1)?(B=0,Xa(239,D|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,h|0,68081,83);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(h);J=I;K=H;break}B=0;wa(510,m|0,v|0);H=B;B=0;if(H&1){H=Rb()|0;L=Q;M=H;N=1}else{B=0;ua(163,F|0,h|0,j|0,89,m|0);H=B;B=0;if(H&1)O=1;else{B=0;eb(503,F|0,1240,229);B=0;O=0}H=Rb()|0;I=Q;Yua(m);L=I;M=H;N=O}Yua(j);Yua(h);if(N){J=L;K=M}else{P=L;R=M;break b}}else{H=Rb()|0;J=Q;K=H}while(0);zb(F|0);P=J;R=K}else S=18;while(0);if((S|0)==18){D=Rb()|0;P=Q;R=D}k[g>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);T=P;U=R;Qb(U|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}}while(0);y=k[w>>2]|0;C=a+16|0;if(!y){k[C>>2]=0;k[a+20>>2]=0;r=e;return}A=(k[C>>2]|0)==0;if(s){i[k[b>>2]>>0]=A&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(A)V=s;else{TEa(s|0,k[C>>2]|0,k[w>>2]<<3|0)|0;s=(k[b>>2]|0)+(k[w>>2]<<3)|0;k[b>>2]=s;V=s}s=a+20|0;x=(k[s>>2]|0)==0;i[V>>0]=x&1;V=(k[b>>2]|0)+1|0;k[b>>2]=V;if(x){r=e;return}TEa(V|0,k[s>>2]|0,k[w>>2]<<3|0)|0;k[b>>2]=(k[b>>2]|0)+(k[w>>2]<<3);r=e;return}switch(d|0){case 2:{d=(k[c>>2]|0)+1|0;k[c>>2]=d;if(A)W=d;else{A=d+(k[w>>2]<<3)|0;k[c>>2]=A;W=A}A=(k[a+20>>2]|0)==0;d=W+1|0;k[c>>2]=d;if(A){r=e;return}k[c>>2]=d+(k[w>>2]<<3);r=e;return}case 1:{w=k[b>>2]|0;d=i[w>>0]|0;c=w+1|0;k[b>>2]=c;if(!(d&1)){d=Rqa(y>>>0>536870911?-1:y<<3)|0;k[C>>2]=d;C=k[b>>2]|0;w=y<<3;TEa(d|0,C|0,w|0)|0;d=C+w|0;k[b>>2]=d;X=d}else X=c;c=i[X>>0]|0;k[b>>2]=X+1;if(c&1){r=e;return}c=Rqa(y>>>0>536870911?-1:y<<3)|0;k[a+20>>2]=c;a=k[b>>2]|0;X=y<<3;TEa(c|0,a|0,X|0)|0;k[b>>2]=a+X;r=e;return}default:{e=n+56|0;X=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,X|0);a=B;B=0;if(a&1){a=Rb()|0;Y=Q;Z=a;vva(e);Qb(Z|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,X|0);a=B;B=0;do if(a&1){b=Rb()|0;_=Q;$=b}else{k[X>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,X|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;y=Q;Yua(f);Yua(b);Ava(X);_=y;$=c;break}Yua(f);B=0;c=Ia(40,n|0,143951,43)|0;y=B;B=0;c:do if(!(y&1)?(B=0,Xa(239,c|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,o|0,68081,83);w=B;B=0;do if(!(w&1)){B=0;eb(502,p|0,149525,8);C=B;B=0;if(C&1){C=Rb()|0;A=Q;Yua(o);aa=A;ba=C;break}B=0;wa(510,q|0,X|0);C=B;B=0;if(C&1){C=Rb()|0;ca=1;da=Q;ea=C}else{B=0;ua(163,d|0,o|0,p|0,98,q|0);C=B;B=0;if(C&1)fa=1;else{B=0;eb(503,d|0,1240,229);B=0;fa=0}C=Rb()|0;A=Q;Yua(q);ca=fa;da=A;ea=C}Yua(p);Yua(o);if(ca){aa=da;ba=ea}else{ga=da;ha=ea;break c}}else{C=Rb()|0;aa=Q;ba=C}while(0);zb(d|0);ga=aa;ha=ba}else S=49;while(0);if((S|0)==49){c=Rb()|0;ga=Q;ha=c}k[n>>2]=27468;k[e>>2]=27488;k[X>>2]=27560;Yua(b);Ava(X);vva(e);T=ga;U=ha;Qb(U|0)}while(0);Y=_;Z=$;vva(e);Qb(Z|0)}}}function Tm(a){a=a|0;i[a+32>>0]=1;return}function Um(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;d=r;r=r+208|0;e=d+184|0;f=d;g=d+48|0;h=d+32|0;j=d+20|0;l=d+8|0;p[f>>3]=0.0;m=rh(b,0,k[a+8>>2]|0)|0;if(!((m|0)!=0&(i[a+32>>0]|0)==0)){r=d;return}dO(c,f,767);n=+p[f>>3];f=k[a+20>>2]|0;o=+p[f>>3];a:do if(!(n<=o)){c=k[a+24>>2]|0;b=c+-1|0;if(n>=+p[f+(b<<3)>>3]){q=+p[(k[a+16>>2]|0)+(b<<3)>>3];break}b:do if((c|0)>1){s=o;u=0;while(1){v=u+1|0;if(s<=n?(w=+p[f+(v<<3)>>3],n<w):0){x=s;y=w;z=v;A=u;break}if((v|0)>=(b|0))break b;s=+p[f+(v<<3)>>3];u=v}s=(n-x)/(y-x);u=k[a+16>>2]|0;q=(1.0-s)*+p[u+(A<<3)>>3]+s*+p[u+(z<<3)>>3];break a}while(0);b=g+56|0;c=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;C=Q;D=u;vva(b);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,c|0);u=B;B=0;do if(u&1){v=Rb()|0;E=Q;F=v}else{k[c>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,c|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(e);Yua(v);Ava(c);E=H;F=G;break}Yua(e);B=0;G=Ia(40,g|0,68165,42)|0;H=B;B=0;if(!(H&1)?(B=0,Xa(239,G|0,0)|0,G=B,B=0,!(G&1)):0){G=Ab(20)|0;B=0;eb(502,h|0,68081,83);H=B;B=0;do if(!(H&1)){B=0;eb(502,j|0,68208,13);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(h);K=J;L=I;break}B=0;wa(510,l|0,c|0);I=B;B=0;if(I&1){I=Rb()|0;M=Q;N=I;O=1}else{B=0;ua(163,G|0,h|0,j|0,151,l|0);I=B;B=0;if(I&1)P=1;else{B=0;eb(503,G|0,1240,229);B=0;P=0}I=Rb()|0;J=Q;Yua(l);M=J;N=I;O=P}Yua(j);Yua(h);if(O){K=M;L=N}else{R=M;S=N;k[g>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(v);Ava(c);vva(b);Qb(S|0)}}else{I=Rb()|0;K=Q;L=I}while(0);zb(G|0);R=K;S=L;k[g>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(v);Ava(c);vva(b);Qb(S|0)}H=Rb()|0;R=Q;S=H;k[g>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(v);Ava(c);vva(b);Qb(S|0)}while(0);C=E;D=F;vva(b);Qb(D|0)}else q=+p[k[a+16>>2]>>3];while(0);x=+$(+q);p[t>>3]=x;D=k[t+4>>2]|0;F=k[a+12>>2]|0;if(D>>>0>2146435072|(D|0)==2146435072&(k[t>>2]|0)>>>0>0){Yn(m,F);r=d;return}else{Un(m,F,q);r=d;return}}function Vm(a,b){a=a|0;b=b|0;return (k[a+28>>2]|0)==(b|0)|0}function Wm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0;f=r;r=r+368|0;g=f+352|0;h=f+216|0;j=f+204|0;l=f+192|0;m=f+44|0;n=f;o=f+56|0;q=f+32|0;s=f+20|0;u=f+8|0;if(!(i[a+32>>0]|0)){v=h+56|0;w=h+4|0;k[h>>2]=27524;k[v>>2]=27544;B=0;wa(508,h+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=h+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,w|0,g|0);E=B;B=0;if(E&1){E=Rb()|0;G=Q;Yua(g);Yua(A);Ava(w);C=G;D=E;break}Yua(g);B=0;E=Ia(40,h|0,68222,54)|0;G=B;B=0;a:do if(!(G&1)?(B=0,Xa(239,E|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,j|0,68081,83);I=B;B=0;do if(!(I&1)){B=0;eb(502,l|0,80053,18);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(j);L=J;M=K;break}B=0;wa(510,m|0,w|0);K=B;B=0;if(K&1){K=Rb()|0;N=Q;O=K;P=1}else{B=0;ua(163,H|0,j|0,l|0,169,m|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,H|0,1240,229);B=0;R=0}K=Rb()|0;J=Q;Yua(m);N=J;O=K;P=R}Yua(l);Yua(j);if(P){L=O;M=N}else{S=O;T=N;break a}}else{K=Rb()|0;L=K;M=Q}while(0);zb(H|0);S=L;T=M}else U=17;while(0);if((U|0)==17){E=Rb()|0;S=E;T=Q}k[h>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);V=T;W=S;Qb(W|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}p[n>>3]=0.0;z=rh(d,0,k[a+8>>2]|0)|0;if(!z){X=-1;Y=F;k[b>>2]=X;p[c>>3]=Y;r=f;return}dO(e,n,767);Z=+p[n>>3];n=k[a+20>>2]|0;_=+p[n>>3];b:do if(!(Z<=_)){e=k[a+24>>2]|0;d=e+-1|0;if(Z>=+p[n+(d<<3)>>3]){aa=+p[(k[a+16>>2]|0)+(d<<3)>>3];break}c:do if((e|0)>1){ba=_;v=0;while(1){D=v+1|0;if(ba<=Z?(ca=+p[n+(D<<3)>>3],Z<ca):0){da=ba;ea=ca;fa=D;ga=v;break}if((D|0)>=(d|0))break c;ba=+p[n+(D<<3)>>3];v=D}ba=(Z-da)/(ea-da);v=k[a+16>>2]|0;aa=(1.0-ba)*+p[v+(ga<<3)>>3]+ba*+p[v+(fa<<3)>>3];break b}while(0);d=o+56|0;e=o+4|0;k[o>>2]=27524;k[d>>2]=27544;B=0;wa(508,o+56|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;ha=Q;ia=A;vva(d);Qb(ia|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[d>>2]=27488;B=0;va(448,e|0);A=B;B=0;do if(A&1){v=Rb()|0;ja=Q;ka=v}else{k[e>>2]=27560;v=o+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[o+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,e|0,g|0);H=B;B=0;if(H&1){H=Rb()|0;D=Q;Yua(g);Yua(v);Ava(e);ja=D;ka=H;break}Yua(g);B=0;H=Ia(40,o|0,68165,42)|0;D=B;B=0;d:do if(!(D&1)?(B=0,Xa(239,H|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,q|0,68081,83);y=B;B=0;do if(!(y&1)){B=0;eb(502,s|0,80053,18);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(q);la=S;ma=T;break}B=0;wa(510,u|0,e|0);T=B;B=0;if(T&1){T=Rb()|0;na=1;oa=Q;pa=T}else{B=0;ua(163,C|0,q|0,s|0,205,u|0);T=B;B=0;if(T&1)qa=1;else{B=0;eb(503,C|0,1240,229);B=0;qa=0}T=Rb()|0;S=Q;Yua(u);na=qa;oa=S;pa=T}Yua(s);Yua(q);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break d}}else{T=Rb()|0;la=T;ma=Q}while(0);zb(C|0);ra=ma;sa=la}else U=51;while(0);if((U|0)==51){H=Rb()|0;ra=Q;sa=H}k[o>>2]=27468;k[d>>2]=27488;k[e>>2]=27560;Yua(v);Ava(e);vva(d);V=ra;W=sa;Qb(W|0)}while(0);ha=ja;ia=ka;vva(d);Qb(ia|0)}else aa=+p[k[a+16>>2]>>3];while(0);ia=Nn(z,k[a+12>>2]|0,943)|0;da=+$(+aa);p[t>>3]=da;a=k[t+4>>2]|0;X=a>>>0>2146435072|(a|0)==2146435072&(k[t>>2]|0)>>>0>0?-1:ia;Y=aa;k[b>>2]=X;p[c>>3]=Y;r=f;return}function Xm(a){a=a|0;gh(a);k[a+12>>2]=550;return}function Ym(a){a=a|0;jh(a);return}function Zm(a){a=a|0;gh(a);k[a+12>>2]=549;return}function _m(a){a=a|0;jh(a);return}function $m(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;d=r;r=r+16|0;e=d;k[e>>2]=0;f=vY()|0;g=wY()|0;if((th(a)|0)>0){h=0;do{i=qh(a,h)|0;if(Tn(i,b)|0)io(i,e,c);h=h+1|0}while((h|0)<(th(a)|0))}h=Rqa(g>>>0>1073741823?-1:g<<2)|0;lZ(e,1,4,h,1,4,0,uY()|0)|0;uY()|0;k[e>>2]=0;if((f|0)>0){g=0;i=0;while(1){j=g+(k[h+(i<<2)>>2]|0)|0;i=i+1|0;if((i|0)==(f|0)){l=j;break}else g=j}k[e>>2]=l}if((th(a)|0)>0){l=0;do{g=qh(a,l)|0;if(Tn(g,b)|0)jo(g,k[e>>2]|0,c);l=l+1|0}while((l|0)<(th(a)|0))}l=an(a,b,c)|0;e=ma(bn(a,b)|0,l)|0;if(!e){m=0;n=0}else{g=e>>>0>1073741823?-1:e<<2;f=Rqa(g)|0;i=e<<2;WEa(f|0,0,i|0)|0;j=Rqa(g)|0;WEa(j|0,0,i|0)|0;m=j;n=f}if((th(a)|0)>0){f=0;do{j=qh(a,f)|0;if(Tn(j,b)|0)ko(j,n,l,c);f=f+1|0}while((f|0)<(th(a)|0))}fZ(n,m,e,4,1,uY()|0)|0;if((th(a)|0)>0){e=0;do{f=qh(a,e)|0;if(Tn(f,b)|0)lo(f,m,l,c);e=e+1|0}while((e|0)<(th(a)|0))}if((th(a)|0)>0){e=0;do{c=qh(a,e)|0;if(Tn(c,b)|0)Xn(c);e=e+1|0}while((e|0)<(th(a)|0))}Tqa(h);if(n)Tqa(n);if(!m){r=d;return}Tqa(m);r=d;return}function an(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+16|0;e=d+4|0;f=d;k[e>>2]=0;if((th(a)|0)>0){g=0;h=0;while(1){i=qh(a,h)|0;if(Tn(i,b)|0?(j=eo(i,534,c)|0,(j|0)>(g|0)):0){k[e>>2]=j;l=j}else l=g;h=h+1|0;if((h|0)>=(th(a)|0))break;else g=l}}fZ(e,f,1,4,1,uY()|0)|0;r=d;return k[f>>2]|0}function bn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=-1;if((th(a)|0)>0){f=-1;g=0;while(1){h=qh(a,g)|0;if(Tn(h,b)|0?(i=Qn(h)|0,(i|0)>(f|0)):0){k[d>>2]=i;j=i}else j=f;g=g+1|0;if((g|0)>=(th(a)|0))break;else f=j}}nZ(d,e,1,4,1,0,uY()|0)|0;uY()|0;r=c;return (k[e>>2]|0)+1|0}function cn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=wY()|0;d=bn(a,b)|0;e=d>>>0>1073741823?-1:d<<2;f=Rqa(e)|0;g=Rqa(e)|0;if((d|0)>0){e=0;do{k[f+(e<<2)>>2]=c;e=e+1|0}while((e|0)!=(d|0))}e=vY()|0;if((th(a)|0)>0){c=0;do{h=qh(a,c)|0;if(Tn(h,b)|0){i=f+((Qn(h)|0)<<2)|0;k[i>>2]=e}c=c+1|0}while((c|0)<(th(a)|0))}fZ(f,g,d,4,2,uY()|0)|0;if((th(a)|0)>0)j=0;else{Tqa(f);Tqa(g);return}do{d=qh(a,j)|0;if(Tn(d,b)|0)mo(d,g);j=j+1|0}while((j|0)<(th(a)|0));Tqa(f);Tqa(g);return}function dn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=-1;e=(k[a+16>>2]|0)==0;f=th(a)|0;do if(e){if((f|0)>0){g=-1;h=0;while(1){i=qh(a,h)|0;j=Hc[k[(k[i>>2]|0)+16>>2]&511](i)|0;if((j|0)>(g|0)){k[c>>2]=j;l=j}else l=g;h=h+1|0;if((h|0)>=(th(a)|0))break;else g=l}}}else if(!f){k[c>>2]=0;break}else{g=qh(a,(th(a)|0)+-1|0)|0;h=Hc[k[(k[g>>2]|0)+16>>2]&511](g)|0;k[c>>2]=h;break}while(0);fZ(c,d,1,4,1,uY()|0)|0;r=b;return k[d>>2]|0}function en(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+16|0;e=d+4|0;f=d;if((th(a)|0)>0){g=0;h=0;while(1){i=qh(a,g)|0;if(Tn(i,b)|0?(fo(i)|0)==0:0)j=(eo(i,534,c)|0)+h|0;else j=h;g=g+1|0;if((g|0)>=(th(a)|0)){l=j;break}else h=j}}else l=0;k[f>>2]=l;fZ(f,e,1,4,4,uY()|0)|0;r=d;return k[e>>2]|0}function fn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;if((th(a)|0)>0){d=0;e=0}else{f=0;return f|0}while(1){g=qh(a,d)|0;if(Tn(g,b)|0?(fo(g)|0)==0:0)h=(eo(g,534,c)|0)+e|0;else h=e;d=d+1|0;if((d|0)>=(th(a)|0)){f=h;break}else e=h}return f|0}function gn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=0;k[d>>2]=0;if((th(a)|0)>0){e=0;f=0;while(1){if(!(fo(qh(a,f)|0)|0)){g=e+1|0;k[c>>2]=g;h=g}else h=e;f=f+1|0;if((f|0)>=(th(a)|0))break;else e=h}}fZ(c,d,1,4,4,uY()|0)|0;r=b;return k[d>>2]|0}function hn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=0;a:do if((th(a)|0)>0){f=0;while(1){g=qh(a,f)|0;if(Tn(g,b)|0?Wn(g)|0:0)break;f=f+1|0;if((f|0)>=(th(a)|0))break a}k[d>>2]=1}while(0);fZ(d,e,1,4,1,uY()|0)|0;r=c;return (k[e>>2]|0)!=0|0}function jn(a){a=a|0;gh(a);k[a+12>>2]=552;return}function kn(a){a=a|0;jh(a);return}function ln(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[d>>2]=0;e=vY()|0;f=wY()|0;if((th(a)|0)>0){g=0;do{Eo(qh(a,g)|0,d);g=g+1|0}while((g|0)<(th(a)|0))}g=Rqa(f>>>0>1073741823?-1:f<<2)|0;lZ(d,1,4,g,1,4,0,uY()|0)|0;uY()|0;k[d>>2]=0;if((e|0)>0){f=0;h=0;while(1){i=f+(k[g+(h<<2)>>2]|0)|0;h=h+1|0;if((h|0)==(e|0)){j=i;break}else f=i}k[d>>2]=j}if((th(a)|0)>0){j=0;do{f=qh(a,j)|0;Fo(f,k[d>>2]|0);j=j+1|0}while((j|0)<(th(a)|0))}j=b>>>0>1073741823?-1:b<<2;d=Rqa(j)|0;if(!b)l=Rqa(j)|0;else{f=b<<2;WEa(d|0,0,f|0)|0;e=Rqa(j)|0;WEa(e|0,0,f|0)|0;l=e}if((th(a)|0)>0){e=0;do{Go(qh(a,e)|0,d);e=e+1|0}while((e|0)<(th(a)|0))}fZ(d,l,b,4,1,uY()|0)|0;if((th(a)|0)>0)m=0;else{Tqa(g);Tqa(d);Tqa(l);r=c;return}do{Ho(qh(a,m)|0,l);m=m+1|0}while((m|0)<(th(a)|0));Tqa(g);Tqa(d);Tqa(l);r=c;return}function mn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=wY()|0;d=b>>>0>1073741823?-1:b<<2;e=Rqa(d)|0;f=Rqa(d)|0;if((b|0)>0){d=0;do{k[e+(d<<2)>>2]=c;d=d+1|0}while((d|0)!=(b|0))}d=vY()|0;if((th(a)|0)>0){c=0;do{g=e+((Bo(qh(a,c)|0)|0)<<2)|0;k[g>>2]=d;c=c+1|0}while((c|0)<(th(a)|0))}fZ(e,f,b,4,2,uY()|0)|0;if((th(a)|0)>0)h=0;else{Tqa(e);Tqa(f);return}do{Io(qh(a,h)|0,f);h=h+1|0}while((h|0)<(th(a)|0));Tqa(e);Tqa(f);return}function nn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=0;if((th(a)|0)>0){e=0;f=0;while(1){g=Bo(qh(a,f)|0)|0;if((g|0)>(e|0)){k[c>>2]=g;h=g}else h=e;f=f+1|0;if((f|0)>=(th(a)|0))break;else e=h}}nZ(c,d,1,4,1,0,uY()|0)|0;uY()|0;r=b;return (k[d>>2]|0)+1|0}function on(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;i=b+24|0;j=b+12|0;l=b;k[a+4>>2]=0;m=qZ()|0;if(!(Ita(m,68695)|0)){n=d+56|0;o=d+4|0;k[d>>2]=27524;k[n>>2]=27544;B=0;wa(508,d+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,68701,50)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,e|0,68752,101);z=B;B=0;do if(!(z&1)){B=0;eb(502,f|0,68854,19);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);D=A;E=C;break}B=0;wa(510,g|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;G=C;H=1}else{B=0;ua(163,y|0,e|0,f|0,144,g|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(g);F=A;G=C;H=I}Yua(f);Yua(e);if(H){D=G;E=F}else{J=G;K=F;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=D;K=E}else L=17;while(0);if((L|0)==17){w=Rb()|0;J=w;K=Q}k[d>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=K;N=J;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}if(!(Ita(m,145123)|0)){k[a>>2]=1;if(!m){r=b;return}Tqa(m);r=b;return}b=h+56|0;m=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;O=Q;P=a;vva(b);Qb(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){s=Rb()|0;R=Q;S=s}else{k[m>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;v=Q;Yua(c);Yua(s);Ava(m);R=v;S=n;break}Yua(c);B=0;n=Ia(40,h|0,68874,20)|0;v=B;B=0;b:do if(!(v&1)?(B=0,Xa(239,n|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,i|0,68752,101);q=B;B=0;do if(!(q&1)){B=0;eb(502,j|0,68854,19);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(i);T=J;U=K;break}B=0;wa(510,l|0,m|0);K=B;B=0;if(K&1){K=Rb()|0;V=1;W=Q;X=K}else{B=0;ua(163,u|0,i|0,j|0,151,l|0);K=B;B=0;if(K&1)Y=1;else{B=0;eb(503,u|0,1240,229);B=0;Y=0}K=Rb()|0;J=Q;Yua(l);V=Y;W=J;X=K}Yua(j);Yua(i);if(V){T=X;U=W}else{Z=W;_=X;break b}}else{K=Rb()|0;T=K;U=Q}while(0);zb(u|0);Z=U;_=T}else L=44;while(0);if((L|0)==44){n=Rb()|0;Z=Q;_=n}k[h>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(b);M=Z;N=_;Qb(N|0)}while(0);O=R;P=S;vva(b);Qb(P|0)}function pn(a){a=a|0;var b=0,c=0;k[a>>2]=28724;b=a+12|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}function qn(a){a=a|0;var b=0;k[a>>2]=28724;b=k[a+12>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function rn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=d+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(c);Yua(q);Ava(l);s=v;t=u;break}Yua(c);B=0;u=Ia(40,d|0,68642,18)|0;v=B;B=0;do if(((((!(v&1)?(w=a+4|0,B=0,x=Xa(242,u|0,k[w>>2]|0)|0,y=B,B=0,!(y&1)):0)?(B=0,y=Ia(40,x|0,124614,1)|0,x=B,B=0,!(x&1)):0)?(x=a+8|0,B=0,z=Xa(242,y|0,k[x>>2]|0)|0,y=B,B=0,!(y&1)):0)?(B=0,Ia(40,z|0,149177,1)|0,z=B,B=0,!(z&1)):0)?(B=0,wa(510,e|0,l|0),z=B,B=0,!(z&1)):0){B=0;ya(424,e|0)|0;z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(e);A=y;C=z;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);if((k[w>>2]|0)<=0){r=b;return}z=h+56|0;y=h+4|0;D=h+56|0;E=h+128|0;F=h+132|0;G=h+36|0;H=h+52|0;I=f+56|0;J=f+4|0;K=f+56|0;L=f+128|0;M=f+132|0;N=f+36|0;O=f+52|0;P=a+12|0;R=0;a:while(1){if((k[x>>2]|0)>0){S=0;do{k[f>>2]=27524;k[I>>2]=27544;B=0;wa(508,K|0,J|0);T=B;B=0;if(T&1){U=23;break a}k[L>>2]=0;k[M>>2]=-1;k[f>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);T=B;B=0;if(T&1){U=24;break a}k[J>>2]=27560;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[O>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);T=B;B=0;if(T&1){U=22;break a}Yua(c);T=(ma(k[x>>2]|0,R)|0)+S|0;B=0;V=Sa(1,f|0,+(+p[(k[P>>2]|0)+(T<<3)>>3]))|0;T=B;B=0;if(T&1){U=35;break a}B=0;Ia(40,V|0,149175,1)|0;V=B;B=0;if(V&1){U=35;break a}B=0;wa(510,g|0,J|0);V=B;B=0;if(V&1){U=35;break a}B=0;ya(424,g|0)|0;V=B;B=0;if(V&1){U=36;break a}Yua(g);k[f>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);S=S+1|0}while((S|0)<(k[x>>2]|0))}k[h>>2]=27524;k[z>>2]=27544;B=0;wa(508,D|0,y|0);S=B;B=0;if(S&1){U=42;break}k[E>>2]=0;k[F>>2]=-1;k[h>>2]=27468;k[z>>2]=27488;B=0;va(448,y|0);S=B;B=0;if(S&1){U=43;break}k[y>>2]=27560;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[H>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);S=B;B=0;if(S&1){U=41;break}Yua(c);B=0;Ia(40,h|0,149177,1)|0;S=B;B=0;if(S&1){U=50;break}B=0;wa(510,i|0,y|0);S=B;B=0;if(S&1){U=50;break}B=0;ya(424,i|0)|0;S=B;B=0;if(S&1){U=51;break}Yua(i);k[h>>2]=27468;k[z>>2]=27488;k[y>>2]=27560;Yua(G);Ava(y);vva(z);R=R+1|0;if((R|0)>=(k[w>>2]|0)){U=53;break}}switch(U|0){case 22:{w=Rb()|0;R=Q;Yua(c);Yua(N);Ava(J);W=R;X=w;U=25;break}case 23:{w=Rb()|0;Y=Q;Z=w;vva(I);Qb(Z|0);break}case 24:{w=Rb()|0;W=Q;X=w;U=25;break}case 35:{w=Rb()|0;_=Q;$=w;U=37;break}case 36:{w=Rb()|0;R=Q;Yua(g);_=R;$=w;U=37;break}case 41:{w=Rb()|0;R=Q;Yua(c);Yua(G);Ava(y);aa=R;ba=w;U=44;break}case 42:{w=Rb()|0;ca=Q;da=w;vva(z);Qb(da|0);break}case 43:{w=Rb()|0;aa=Q;ba=w;U=44;break}case 50:{w=Rb()|0;ea=Q;fa=w;U=52;break}case 51:{w=Rb()|0;R=Q;Yua(i);ea=R;fa=w;U=52;break}case 53:{r=b;return}}if((U|0)==25){Y=W;Z=X;vva(I);Qb(Z|0)}else if((U|0)==37){k[f>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);ga=_;ha=$;Qb(ha|0)}else if((U|0)==44){ca=aa;da=ba;vva(z);Qb(da|0)}else if((U|0)==52){k[h>>2]=27468;k[z>>2]=27488;k[y>>2]=27560;Yua(G);Ava(y);vva(z);ga=ea;ha=fa;Qb(ha|0)}}else U=32;while(0);if((U|0)==32){u=Rb()|0;A=Q;C=u}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);ga=A;ha=C;Qb(ha|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}function sn(a){a=a|0;return}function tn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0,n=0.0,o=0,q=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{b=a+4|0;if((k[b>>2]|0)<=0){i=0.0;r=c;return +i}j=a+8|0;l=a+12|0;m=0;n=0.0;while(1){o=k[j>>2]|0;if((o|0)>0){q=k[l>>2]|0;s=ma(o,m)|0;t=0.0;u=0;while(1){v=t+ +$(+(+p[q+(s+u<<3)>>3]));u=u+1|0;if((u|0)>=(o|0)){w=v;break}else t=v}}else w=0.0;t=+LY(n,w);m=m+1|0;if((m|0)>=(k[b>>2]|0)){i=t;break}else n=t}r=c;return +i}case 2:{b=k[a+4>>2]|0;if((b|0)>0?(m=k[a+8>>2]|0,(m|0)>0):0){l=k[a+12>>2]|0;a=0;n=0.0;while(1){j=ma(m,a)|0;o=0;w=n;while(1){t=+p[l+(j+o<<3)>>3];v=w+t*t;o=o+1|0;if((o|0)>=(m|0)){x=v;break}else w=v}a=a+1|0;if((a|0)>=(b|0)){y=x;break}else n=x}}else y=0.0;i=+aa(+y);r=c;return +i}default:{c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;vva(c);Qb(A|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){m=Rb()|0;C=Q;D=m}else{k[b>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);l=B;B=0;if(l&1){l=Rb()|0;o=Q;Yua(d);Yua(m);Ava(b);C=o;D=l;break}Yua(d);B=0;l=Ia(40,e|0,68622,14)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,f|0,68394,115);o=B;B=0;do if(!(o&1)){B=0;eb(502,g|0,68637,4);j=B;B=0;if(j&1){j=Rb()|0;u=Q;Yua(f);E=u;F=j;break}B=0;wa(510,h|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;G=Q;H=j;I=1}else{B=0;ua(163,l|0,f|0,g|0,163,h|0);j=B;B=0;if(j&1)J=1;else{B=0;eb(503,l|0,1240,229);B=0;J=0}j=Rb()|0;u=Q;Yua(h);G=u;H=j;I=J}Yua(g);Yua(f);if(I){E=G;F=H}else{K=G;L=H;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(L|0)}}else{j=Rb()|0;E=Q;F=j}while(0);zb(l|0);K=E;L=F;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(L|0)}o=Rb()|0;K=Q;L=o;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(L|0)}while(0);z=C;A=D;vva(c);Qb(A|0)}}return +(0.0)}function un(a,b,c){a=a|0;b=b|0;c=c|0;k[b>>2]=k[a+4>>2];k[c>>2]=k[a+8>>2];return}function vn(a,b,c){a=a|0;b=b|0;c=c|0;k[b>>2]=k[a+4>>2];k[c>>2]=k[a+8>>2];return}function wn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=r;r=r+384|0;e=d+360|0;f=d+356|0;g=d+352|0;h=d+216|0;i=d+200|0;j=d+48|0;l=d+36|0;m=d+64|0;n=d+24|0;o=d+12|0;q=d;Fc[k[(k[b>>2]|0)+28>>2]&1023](b,f);Fc[k[(k[c>>2]|0)+28>>2]&1023](c,g);s=k[a+4>>2]|0;if((s|0)!=(k[g>>2]|0)){g=h+56|0;t=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(g);Qb(w|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=h+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(t);y=C;z=A;break}Yua(e);B=0;A=Ia(40,h|0,68520,45)|0;C=B;B=0;a:do if(!(C&1)?(B=0,Xa(239,A|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,i|0,68394,115);E=B;B=0;do if(!(E&1)){B=0;eb(502,j|0,68566,7);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(i);H=F;I=G;break}B=0;wa(510,l|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,D|0,i|0,j|0,202,l|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(l);J=F;K=G;L=M}Yua(j);Yua(i);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(D|0);N=H;O=I}else P=17;while(0);if((P|0)==17){A=Rb()|0;N=A;O=Q}k[h>>2]=27468;k[g>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(g);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(g);Qb(w|0)}w=k[a+8>>2]|0;if((w|0)==(k[f>>2]|0)){if((s|0)<=0){r=d;return}f=k[c+4>>2]|0;if((w|0)<=0){WEa(f|0,0,((s|0)>1?s:1)<<3|0)|0;r=d;return}c=k[a+12>>2]|0;a=k[b+4>>2]|0;b=0;do{g=ma(w,b)|0;T=0.0;z=0;while(1){U=T+ +p[c+(g+z<<3)>>3]*+p[a+(z<<3)>>3];z=z+1|0;if((z|0)>=(w|0)){V=U;break}else T=U}p[f+(b<<3)>>3]=V;b=b+1|0}while((b|0)<(s|0));r=d;return}d=m+56|0;s=m+4|0;k[m>>2]=27524;k[d>>2]=27544;B=0;wa(508,m+56|0,s|0);b=B;B=0;if(b&1){b=Rb()|0;W=Q;X=b;vva(d);Qb(X|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[d>>2]=27488;B=0;va(448,s|0);b=B;B=0;do if(b&1){f=Rb()|0;Y=Q;Z=f}else{k[s>>2]=27560;f=m+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);w=B;B=0;if(w&1){w=Rb()|0;a=Q;Yua(e);Yua(f);Ava(s);Y=a;Z=w;break}Yua(e);B=0;w=Ia(40,m|0,68574,47)|0;a=B;B=0;b:do if(!(a&1)?(B=0,Xa(239,w|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,n|0,68394,115);z=B;B=0;do if(!(z&1)){B=0;eb(502,o|0,68566,7);g=B;B=0;if(g&1){g=Rb()|0;x=Q;Yua(n);_=g;$=x;break}B=0;wa(510,q|0,s|0);x=B;B=0;if(x&1){x=Rb()|0;aa=1;ba=Q;ca=x}else{B=0;ua(163,c|0,n|0,o|0,203,q|0);x=B;B=0;if(x&1)da=1;else{B=0;eb(503,c|0,1240,229);B=0;da=0}x=Rb()|0;g=Q;Yua(q);aa=da;ba=g;ca=x}Yua(o);Yua(n);if(aa){_=ca;$=ba}else{ea=ba;fa=ca;break b}}else{x=Rb()|0;_=x;$=Q}while(0);zb(c|0);ea=$;fa=_}else P=48;while(0);if((P|0)==48){w=Rb()|0;ea=Q;fa=w}k[m>>2]=27468;k[d>>2]=27488;k[s>>2]=27560;Yua(f);Ava(s);vva(d);R=ea;S=fa;Qb(S|0)}while(0);W=Y;X=Z;vva(d);Qb(X|0)}function xn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=Qqa(16)|0;c=k[a+12>>2]|0;d=k[a+4>>2]|0;e=k[a+8>>2]|0;k[b>>2]=28724;k[b+4>>2]=d;k[b+8>>2]=e;a=b+12|0;k[a>>2]=0;f=ma(e,d)|0;if(!f)return b|0;B=0;d=ya(422,(f>>>0>536870911?-1:f<<3)|0)|0;e=B;B=0;if(e&1){g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}e=f<<3;WEa(d|0,0,e|0)|0;k[a>>2]=d;if(!c){B=0;ib(283,142353,68290,137,142345);B=0;g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}else{TEa(d|0,c|0,e|0)|0;return b|0}return 0}function yn(a){a=a|0;var b=0,c=0,d=0,e=0;b=ma(k[a+8>>2]|0,k[a+4>>2]|0)|0;if(!b){c=0;return c|0}d=Rqa(b>>>0>536870911?-1:b<<3)|0;e=k[a+12>>2]|0;if(!e)yb(142353,68290,137,142345);TEa(d|0,e|0,b<<3|0)|0;c=d;return c|0}function zn(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;h=r;r=r+192|0;i=h+176|0;j=h+40|0;l=h+24|0;m=h+12|0;n=h;switch(g|0){case 1:{if(!((b|0)>0&(d|0)>0)){r=h;return}g=k[a+8>>2]|0;o=k[a+12>>2]|0;q=0;do{s=ma(q,d)|0;t=ma(k[c+(q<<2)>>2]|0,g)|0;u=0;do{v=o+(t+(k[e+(u<<2)>>2]|0)<<3)|0;p[v>>3]=+p[f+(u+s<<3)>>3]+ +p[v>>3];u=u+1|0}while((u|0)!=(d|0));q=q+1|0}while((q|0)!=(b|0));r=h;return}case 0:{if(!((b|0)>0&(d|0)>0)){r=h;return}q=k[a+8>>2]|0;o=k[a+12>>2]|0;a=0;do{g=ma(a,d)|0;u=ma(k[c+(a<<2)>>2]|0,q)|0;s=0;do{p[o+(u+(k[e+(s<<2)>>2]|0)<<3)>>3]=+p[f+(s+g<<3)>>3];s=s+1|0}while((s|0)!=(d|0));a=a+1|0}while((a|0)!=(b|0));r=h;return}default:{h=j+56|0;b=j+4|0;k[j>>2]=27524;k[h>>2]=27544;B=0;wa(508,j+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;vva(h);Qb(x|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){d=Rb()|0;y=Q;z=d}else{k[b>>2]=27560;d=j+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[j+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,b|0,i|0);f=B;B=0;if(f&1){f=Rb()|0;e=Q;Yua(i);Yua(d);Ava(b);y=e;z=f;break}Yua(i);B=0;f=Ia(40,j|0,68373,20)|0;e=B;B=0;if(!(e&1)?(B=0,Xa(239,f|0,0)|0,f=B,B=0,!(f&1)):0){f=Ab(20)|0;B=0;eb(502,l|0,68394,115);e=B;B=0;do if(!(e&1)){B=0;eb(502,m|0,68510,9);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(l);A=q;C=o;break}B=0;wa(510,n|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;D=Q;E=o;F=1}else{B=0;ua(163,f|0,l|0,m|0,249,n|0);o=B;B=0;if(o&1)G=1;else{B=0;eb(503,f|0,1240,229);B=0;G=0}o=Rb()|0;q=Q;Yua(n);D=q;E=o;F=G}Yua(m);Yua(l);if(F){A=D;C=E}else{H=D;I=E;k[j>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(h);Qb(I|0)}}else{o=Rb()|0;A=Q;C=o}while(0);zb(f|0);H=A;I=C;k[j>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(h);Qb(I|0)}e=Rb()|0;H=Q;I=e;k[j>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(h);Qb(I|0)}while(0);w=y;x=z;vva(h);Qb(x|0)}}}function An(a,b){a=a|0;b=b|0;return}function Bn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=r;r=r+16|0;e=d;k[e>>2]=0;f=a+8|0;v5(e,k[a+12>>2]|0,k[a+4>>2]|0,k[f>>2]|0,k[b+4>>2]|0,k[b+8>>2]|0,c);c=Qqa(12)|0;b=k[e>>2]|0;e=k[f>>2]|0;k[c>>2]=28388;k[c+8>>2]=e;f=c+4|0;k[f>>2]=0;do if(!e){if(!b){r=d;return c|0}}else{B=0;a=ya(422,(e>>>0>536870911?-1:e<<3)|0)|0;g=B;B=0;if(g&1){h=Rb()|0;i=Q;Sqa(c);Qb(h|0)}k[f>>2]=a;if(b){TEa(a|0,b|0,e<<3|0)|0;break}B=0;ib(283,142353,68290,137,142345);B=0;h=Rb()|0;i=Q;Sqa(c);Qb(h|0)}while(0);Tqa(b);r=d;return c|0}function Cn(a){a=a|0;k[a>>2]=28784;mla(a+24|0);k[a+4>>2]=0;return}function Dn(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;j=r;r=r+16|0;l=j;k[a>>2]=28784;m=a+24|0;B=0;va(487,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=n;q=Q;Qb(o|0)}k[l>>2]=0;k[a+8>>2]=b;k[a+12>>2]=c;k[a+16>>2]=d;k[a+68>>2]=g;d=a+72|0;c=d;b=c+64|0;do{k[c>>2]=0;c=c+4|0}while((c|0)<(b|0));p[d>>3]=1.0;p[a+104>>3]=1.0;p[a+136>>3]=1.0;c=a+20|0;i[c>>0]=1;B=0;b=ya(430,g|0)|0;n=B;B=0;a:do if((!(n&1)?(s=f+40|0,B=0,t=cb(k[(k[b>>2]|0)+20>>2]|0,b|0,l|0,k[s>>2]|0,h|0)|0,u=B,B=0,!(u&1)):0)?(B=0,eb(506,m|0,t|0,k[l>>2]|0),t=B,B=0,!(t&1)):0){t=k[l>>2]|0;if(t)Tqa(t);k[l>>2]=0;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);t=a+4|0;do if((g|0)==497){k[t>>2]=h;B=0;u=Xa(246,f|0,129116)|0;v=B;B=0;if(v&1)break a;B=0;wa(513,d|0,u+(e*6<<3)|0);u=B;B=0;if(u&1)break a;b:do switch(k[s>>2]|0){case 300:case 303:{w=36;break}default:switch(h|0){case 535:{break b;break}case 536:{B=0;u=Xa(246,f|0,136615)|0;v=B;B=0;if(v&1)break a;if(~~+p[u+(e<<3)>>3]){r=j;return}B=0;va(488,m|0);u=B;B=0;if(u&1)break a;i[a+38>>0]=1;r=j;return}case 539:{B=0;u=Xa(246,f|0,136615)|0;v=B;B=0;if(v&1)break a;if(~~+p[u+(e<<3)>>3]){r=j;return}B=0;va(488,m|0);u=B;B=0;if(u&1)break a;i[a+38>>0]=1;r=j;return}case 537:{B=0;u=Xa(246,f|0,129090)|0;v=B;B=0;if(v&1)break a;if(!~~+p[u+(e<<3)>>3]){r=j;return}B=0;u=Xa(246,f|0,136615)|0;v=B;B=0;if(v&1)break a;if(~~+p[u+(e<<3)>>3]){r=j;return}B=0;va(488,m|0);u=B;B=0;if(u&1)break a;i[a+38>>0]=1;r=j;return}case 538:{B=0;u=Xa(246,f|0,129090)|0;v=B;B=0;if(v&1)break a;if(!~~+p[u+(e<<3)>>3]){r=j;return}B=0;u=Xa(246,f|0,136615)|0;v=B;B=0;if(v&1)break a;if(~~+p[u+(e<<3)>>3]){r=j;return}u=k[a+40>>2]|0;v=a+38|0;x=a+44|0;if(i[u>>0]|0){i[c>>0]=1;i[u>>0]=0;i[k[x>>2]>>0]=1}i[v>>0]=1;y=u+1|0;if(i[y>>0]|0){i[c>>0]=1;i[y>>0]=0;i[(k[x>>2]|0)+1>>0]=1}i[v>>0]=1;w=36;break b;break}default:{r=j;return}}}while(0);if((w|0)==36?(h|0)!=535:0)break;B=0;va(488,m|0);v=B;B=0;if(v&1)break a;i[a+38>>0]=1}else k[t>>2]=0;while(0);switch(g|0){case 484:case 493:case 505:case 506:case 509:case 510:case 512:case 529:{w=40;break}case 513:break;default:{r=j;return}}if((w|0)==40){switch(k[s>>2]|0){case 300:case 303:break;default:{B=0;t=Xa(246,f|0,136615)|0;v=B;B=0;if(v&1)break a;if(!(+p[t+(e<<3)>>3]!=0.0)){B=0;va(488,m|0);t=B;B=0;if(t&1)break a;i[a+38>>0]=1}}}if((g|0)!=513){r=j;return}}if((k[s>>2]|0)==300){r=j;return}B=0;t=Xa(246,f|0,136636)|0;v=B;B=0;if(!(v&1)){if(+p[t+(e<<3)>>3]!=0.0){r=j;return}B=0;va(488,m|0);t=B;B=0;if(!(t&1)){i[a+38>>0]=1;r=j;return}}}while(0);j=Rb()|0;a=Q;ola(m);o=j;q=a;Qb(o|0)}function En(a){a=a|0;tla(a+24|0);i[a+38>>0]=1;return}function Fn(a){a=a|0;k[a>>2]=28784;ola(a+24|0);return}function Gn(a){a=a|0;k[a>>2]=28784;ola(a+24|0);Sqa(a);return}function Hn(a){a=a|0;var b=0,c=0,d=0,e=0;b=Qqa(144)|0;k[b>>2]=28784;c=b+24|0;B=0;va(487,c|0);d=B;B=0;if(d&1){d=Rb()|0;Sqa(b);Qb(d|0)}else{k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+16>>2]=k[a+16>>2];k[b+68>>2]=k[a+68>>2];k[b+4>>2]=k[a+4>>2];d=b+72|0;e=a+72|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[d+8>>2]=k[e+8>>2];k[d+12>>2]=k[e+12>>2];k[d+16>>2]=k[e+16>>2];k[d+20>>2]=k[e+20>>2];e=b+96|0;d=a+96|0;k[e>>2]=k[d>>2];k[e+4>>2]=k[d+4>>2];k[e+8>>2]=k[d+8>>2];k[e+12>>2]=k[d+12>>2];k[e+16>>2]=k[d+16>>2];k[e+20>>2]=k[d+20>>2];d=b+120|0;e=a+120|0;k[d>>2]=k[e>>2];k[d+4>>2]=k[e+4>>2];k[d+8>>2]=k[e+8>>2];k[d+12>>2]=k[e+12>>2];k[d+16>>2]=k[e+16>>2];k[d+20>>2]=k[e+20>>2];i[b+20>>0]=i[a+20>>0]|0;pla(c,a+24|0);return b|0}return 0}function In(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=75;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[d>>0]=i[a+20>>0]|0;k[b>>2]=(k[b>>2]|0)+1;vla(a+24|0,b,c,0);d=k[b>>2]|0;n=a+68|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=o;q=a+72|0;s=p+72|0;do{i[p>>0]=i[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(s|0));k[b>>2]=(k[b>>2]|0)+72;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+17;vla(a+24|0,b,c,2);k[c>>2]=(k[c>>2]|0)+76;r=e;return}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;d=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+16|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;i[a+20>>0]=i[n>>0]|0;k[b>>2]=(k[b>>2]|0)+1;vla(a+24|0,b,c,1);c=a+68|0;n=k[b>>2]|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[c>>0]=d;i[c+1>>0]=d>>8;i[c+2>>0]=d>>16;i[c+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;p=a+72|0;q=d;s=p+72|0;do{i[p>>0]=i[q>>0]|0;p=p+1|0;q=q+1|0}while((p|0)<(s|0));k[b>>2]=(k[b>>2]|0)+72;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;t=Q;u=q;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);q=B;B=0;do if(q&1){p=Rb()|0;v=Q;w=p}else{k[b>>2]=27560;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);s=B;B=0;if(s&1){s=Rb()|0;d=Q;Yua(f);Yua(p);Ava(b);v=d;w=s;break}Yua(f);B=0;s=Ia(40,g|0,143951,43)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,68901,63);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,149525,8);a=B;B=0;if(a&1){a=Rb()|0;c=Q;Yua(h);x=c;y=a;break}B=0;wa(510,m|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;C=1}else{B=0;ua(163,s|0,h|0,j|0,154,m|0);a=B;B=0;if(a&1)D=1;else{B=0;eb(503,s|0,1240,229);B=0;D=0}a=Rb()|0;c=Q;Yua(m);z=c;A=a;C=D}Yua(j);Yua(h);if(C){x=z;y=A}else{E=z;F=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(p);Ava(b);vva(e);Qb(F|0)}}else{a=Rb()|0;x=Q;y=a}while(0);zb(s|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(p);Ava(b);vva(e);Qb(F|0)}d=Rb()|0;E=Q;F=d;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(p);Ava(b);vva(e);Qb(F|0)}while(0);t=v;u=w;vva(e);Qb(u|0)}}}function Jn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;j=b+728|0;l=b+304|0;m=b+576|0;n=b+152|0;o=b+288|0;p=b+16|0;q=b;s=d+56|0;t=d+4|0;k[d>>2]=27524;k[s>>2]=27544;B=0;wa(508,d+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=d+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;Ia(40,d|0,68965,6)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,e|0,t|0),C=B,B=0,!(C&1)):0){B=0;ya(424,e|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}Yua(e);k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);C=f+56|0;D=f+4|0;k[f>>2]=27524;k[C>>2]=27544;B=0;wa(508,f+56|0,D|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(C);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[D>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(D);K=N;L=M;break}Yua(c);B=0;M=Ia(40,f|0,69728,8)|0;N=B;B=0;do if(((!(N&1)?(B=0,O=Xa(242,M|0,k[a+8>>2]|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,O|0,149177,1)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,g|0,D|0),O=B,B=0,!(O&1)):0){B=0;ya(424,g|0)|0;O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);R=P;S=O;break}Yua(g);k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);O=h+56|0;P=h+4|0;k[h>>2]=27524;k[O>>2]=27544;B=0;wa(508,h+56|0,P|0);T=B;B=0;if(T&1){T=Rb()|0;U=Q;V=T;vva(O);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[O>>2]=27488;B=0;va(448,P|0);T=B;B=0;do if(T&1){W=Rb()|0;X=Q;Y=W}else{k[P>>2]=27560;W=h+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(P);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,h|0,79833,8)|0;_=B;B=0;do if(_&1)$=86;else{B=0;aa=Xa(242,Z|0,k[a+12>>2]|0)|0;ba=B;B=0;if(ba&1){$=86;break}B=0;Ia(40,aa|0,149177,1)|0;aa=B;B=0;if(aa&1){$=86;break}B=0;wa(510,j|0,P|0);aa=B;B=0;if(aa&1){$=86;break}B=0;ya(424,j|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(j);ca=ba;da=aa;break}Yua(j);k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);aa=l+56|0;ba=l+4|0;k[l>>2]=27524;k[aa>>2]=27544;B=0;wa(508,l+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;ga=ea;vva(aa);Qb(ga|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[aa>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){ha=Rb()|0;ia=Q;ja=ha}else{k[ba>>2]=27560;ha=l+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(c);Yua(ha);Ava(ba);ia=la;ja=ka;break}Yua(c);B=0;ka=Ia(40,l|0,68972,18)|0;la=B;B=0;do if(la&1)$=89;else{B=0;ma=ya(427,k[a+68>>2]|0)|0;na=B;B=0;if(na&1){$=89;break}na=Lta(ma)|0;B=0;oa=Ia(40,ka|0,ma|0,na|0)|0;na=B;B=0;if(na&1){$=89;break}B=0;Ia(40,oa|0,149177,1)|0;oa=B;B=0;if(oa&1){$=89;break}B=0;wa(510,m|0,ba|0);oa=B;B=0;if(oa&1){$=89;break}B=0;ya(424,m|0)|0;oa=B;B=0;if(oa&1){oa=Rb()|0;na=Q;Yua(m);pa=na;qa=oa;break}Yua(m);k[l>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);oa=n+56|0;na=n+4|0;k[n>>2]=27524;k[oa>>2]=27544;B=0;wa(508,n+56|0,na|0);ma=B;B=0;if(ma&1){ma=Rb()|0;ra=Q;sa=ma;vva(oa);Qb(sa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[oa>>2]=27488;B=0;va(448,na|0);ma=B;B=0;do if(ma&1){ta=Rb()|0;ua=Q;xa=ta}else{k[na>>2]=27560;ta=n+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(c);Yua(ta);Ava(na);ua=Aa;xa=za;break}Yua(c);B=0;za=Ia(40,n|0,68991,18)|0;Aa=B;B=0;do if(Aa&1)$=92;else{B=0;Ba=ya(427,k[a+4>>2]|0)|0;Ca=B;B=0;if(Ca&1){$=92;break}Ca=Lta(Ba)|0;B=0;Da=Ia(40,za|0,Ba|0,Ca|0)|0;Ca=B;B=0;if(Ca&1){$=92;break}B=0;Ia(40,Da|0,149177,1)|0;Da=B;B=0;if(Da&1){$=92;break}B=0;wa(510,o|0,na|0);Da=B;B=0;if(Da&1){$=92;break}B=0;ya(424,o|0)|0;Da=B;B=0;if(Da&1){Da=Rb()|0;Ca=Q;Yua(o);Ea=Ca;Fa=Da;break}Yua(o);k[n>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(oa);Da=p+56|0;Ca=p+4|0;k[p>>2]=27524;k[Da>>2]=27544;B=0;wa(508,p+56|0,Ca|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ga=Q;Ha=Ba;vva(Da);Qb(Ha|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Da>>2]=27488;B=0;va(448,Ca|0);Ba=B;B=0;do if(Ba&1){Ja=Rb()|0;Ka=Q;La=Ja}else{k[Ca>>2]=27560;Ja=p+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Na=Q;Yua(c);Yua(Ja);Ava(Ca);Ka=Na;La=Ma;break}Yua(c);B=0;Ma=Ia(40,p|0,69010,19)|0;Na=B;B=0;do if(!(Na&1)){B=0;Oa=Xa(247,Ma|0,(i[a+20>>0]|0)!=0|0)|0;Pa=B;B=0;if(Pa&1){$=95;break}B=0;Ia(40,Oa|0,149177,1)|0;Oa=B;B=0;if(Oa&1){$=95;break}B=0;wa(510,q|0,Ca|0);Oa=B;B=0;if(Oa&1){$=95;break}B=0;ya(424,q|0)|0;Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Yua(q);Qa=Pa;Ra=Oa;break}else{Yua(q);k[p>>2]=27468;k[Da>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Da);rla(a+24|0);r=b;return}}else $=95;while(0);if(($|0)==95){Ma=Rb()|0;Qa=Q;Ra=Ma}k[p>>2]=27468;k[Da>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Da);Sa=Qa;Ta=Ra;Qb(Ta|0)}while(0);Ga=Ka;Ha=La;vva(Da);Qb(Ha|0)}while(0);if(($|0)==92){za=Rb()|0;Ea=Q;Fa=za}k[n>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(oa);Sa=Ea;Ta=Fa;Qb(Ta|0)}while(0);ra=ua;sa=xa;vva(oa);Qb(sa|0)}while(0);if(($|0)==89){ka=Rb()|0;pa=Q;qa=ka}k[l>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);Sa=pa;Ta=qa;Qb(Ta|0)}while(0);fa=ia;ga=ja;vva(aa);Qb(ga|0)}while(0);if(($|0)==86){Z=Rb()|0;ca=Q;da=Z}k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);Sa=ca;Ta=da;Qb(Ta|0)}while(0);U=X;V=Y;vva(O);Qb(V|0)}else $=83;while(0);if(($|0)==83){M=Rb()|0;R=Q;S=M}k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);Sa=R;Ta=S;Qb(Ta|0)}while(0);H=K;I=L;vva(C);Qb(I|0)}else $=80;while(0);if(($|0)==80){A=Rb()|0;E=Q;F=A}k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Sa=E;Ta=F;Qb(Ta|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function Kn(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;j=b+728|0;l=b+304|0;m=b+576|0;n=b+152|0;o=b+288|0;p=b+16|0;q=b;s=d+56|0;t=d+4|0;k[d>>2]=27524;k[s>>2]=27544;B=0;wa(508,d+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=d+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;Ia(40,d|0,68965,6)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,e|0,t|0),C=B,B=0,!(C&1)):0){B=0;ya(424,e|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}Yua(e);k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);C=f+56|0;D=f+4|0;k[f>>2]=27524;k[C>>2]=27544;B=0;wa(508,f+56|0,D|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(C);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[D>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(D);K=N;L=M;break}Yua(c);B=0;M=Ia(40,f|0,144086,7)|0;N=B;B=0;do if(((!(N&1)?(B=0,O=Xa(242,M|0,k[a+8>>2]|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,O|0,149177,1)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,g|0,D|0),O=B,B=0,!(O&1)):0){B=0;ya(424,g|0)|0;O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);R=P;S=O;break}Yua(g);k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);O=h+56|0;P=h+4|0;k[h>>2]=27524;k[O>>2]=27544;B=0;wa(508,h+56|0,P|0);T=B;B=0;if(T&1){T=Rb()|0;U=Q;V=T;vva(O);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[O>>2]=27488;B=0;va(448,P|0);T=B;B=0;do if(T&1){W=Rb()|0;X=Q;Y=W}else{k[P>>2]=27560;W=h+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(P);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,h|0,79833,8)|0;_=B;B=0;do if(_&1)$=86;else{B=0;aa=Xa(242,Z|0,k[a+12>>2]|0)|0;ba=B;B=0;if(ba&1){$=86;break}B=0;Ia(40,aa|0,149177,1)|0;aa=B;B=0;if(aa&1){$=86;break}B=0;wa(510,j|0,P|0);aa=B;B=0;if(aa&1){$=86;break}B=0;ya(424,j|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(j);ca=ba;da=aa;break}Yua(j);k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);aa=l+56|0;ba=l+4|0;k[l>>2]=27524;k[aa>>2]=27544;B=0;wa(508,l+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;ga=ea;vva(aa);Qb(ga|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[aa>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){ha=Rb()|0;ia=Q;ja=ha}else{k[ba>>2]=27560;ha=l+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(c);Yua(ha);Ava(ba);ia=la;ja=ka;break}Yua(c);B=0;ka=Ia(40,l|0,68972,18)|0;la=B;B=0;do if(la&1)$=89;else{B=0;ma=ya(427,k[a+68>>2]|0)|0;na=B;B=0;if(na&1){$=89;break}na=Lta(ma)|0;B=0;oa=Ia(40,ka|0,ma|0,na|0)|0;na=B;B=0;if(na&1){$=89;break}B=0;Ia(40,oa|0,149177,1)|0;oa=B;B=0;if(oa&1){$=89;break}B=0;wa(510,m|0,ba|0);oa=B;B=0;if(oa&1){$=89;break}B=0;ya(424,m|0)|0;oa=B;B=0;if(oa&1){oa=Rb()|0;na=Q;Yua(m);pa=na;qa=oa;break}Yua(m);k[l>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);oa=n+56|0;na=n+4|0;k[n>>2]=27524;k[oa>>2]=27544;B=0;wa(508,n+56|0,na|0);ma=B;B=0;if(ma&1){ma=Rb()|0;ra=Q;sa=ma;vva(oa);Qb(sa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[oa>>2]=27488;B=0;va(448,na|0);ma=B;B=0;do if(ma&1){ta=Rb()|0;ua=Q;xa=ta}else{k[na>>2]=27560;ta=n+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(c);Yua(ta);Ava(na);ua=Aa;xa=za;break}Yua(c);B=0;za=Ia(40,n|0,68991,18)|0;Aa=B;B=0;do if(Aa&1)$=92;else{B=0;Ba=ya(427,k[a+4>>2]|0)|0;Ca=B;B=0;if(Ca&1){$=92;break}Ca=Lta(Ba)|0;B=0;Da=Ia(40,za|0,Ba|0,Ca|0)|0;Ca=B;B=0;if(Ca&1){$=92;break}B=0;Ia(40,Da|0,149177,1)|0;Da=B;B=0;if(Da&1){$=92;break}B=0;wa(510,o|0,na|0);Da=B;B=0;if(Da&1){$=92;break}B=0;ya(424,o|0)|0;Da=B;B=0;if(Da&1){Da=Rb()|0;Ca=Q;Yua(o);Ea=Ca;Fa=Da;break}Yua(o);k[n>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(oa);Da=p+56|0;Ca=p+4|0;k[p>>2]=27524;k[Da>>2]=27544;B=0;wa(508,p+56|0,Ca|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ga=Q;Ha=Ba;vva(Da);Qb(Ha|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Da>>2]=27488;B=0;va(448,Ca|0);Ba=B;B=0;do if(Ba&1){Ja=Rb()|0;Ka=Q;La=Ja}else{k[Ca>>2]=27560;Ja=p+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Na=Q;Yua(c);Yua(Ja);Ava(Ca);Ka=Na;La=Ma;break}Yua(c);B=0;Ma=Ia(40,p|0,69010,19)|0;Na=B;B=0;do if(!(Na&1)){B=0;Oa=Xa(247,Ma|0,(i[a+20>>0]|0)!=0|0)|0;Pa=B;B=0;if(Pa&1){$=95;break}B=0;Ia(40,Oa|0,149177,1)|0;Oa=B;B=0;if(Oa&1){$=95;break}B=0;wa(510,q|0,Ca|0);Oa=B;B=0;if(Oa&1){$=95;break}B=0;ya(424,q|0)|0;Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Yua(q);Qa=Pa;Ra=Oa;break}else{Yua(q);k[p>>2]=27468;k[Da>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Da);sla(a+24|0);r=b;return}}else $=95;while(0);if(($|0)==95){Ma=Rb()|0;Qa=Q;Ra=Ma}k[p>>2]=27468;k[Da>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Da);Sa=Qa;Ta=Ra;Qb(Ta|0)}while(0);Ga=Ka;Ha=La;vva(Da);Qb(Ha|0)}while(0);if(($|0)==92){za=Rb()|0;Ea=Q;Fa=za}k[n>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(oa);Sa=Ea;Ta=Fa;Qb(Ta|0)}while(0);ra=ua;sa=xa;vva(oa);Qb(sa|0)}while(0);if(($|0)==89){ka=Rb()|0;pa=Q;qa=ka}k[l>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);Sa=pa;Ta=qa;Qb(Ta|0)}while(0);fa=ia;ga=ja;vva(aa);Qb(ga|0)}while(0);if(($|0)==86){Z=Rb()|0;ca=Q;da=Z}k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);Sa=ca;Ta=da;Qb(Ta|0)}while(0);U=X;V=Y;vva(O);Qb(V|0)}else $=83;while(0);if(($|0)==83){M=Rb()|0;R=Q;S=M}k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);Sa=R;Ta=S;Qb(Ta|0)}while(0);H=K;I=L;vva(C);Qb(I|0)}else $=80;while(0);if(($|0)==80){A=Rb()|0;E=Q;F=A}k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Sa=E;Ta=F;Qb(Ta|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function Ln(a){a=a|0;return k[a+8>>2]|0}function Mn(a){a=a|0;return 587}function Nn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;switch(c|0){case 943:{j=(k[a+56>>2]|0)+(b<<2)|0;l=k[j>>2]|0;r=d;return l|0}case 937:{j=(k[a+60>>2]|0)+(b<<2)|0;l=k[j>>2]|0;r=d;return l|0}case 966:{j=(k[a+64>>2]|0)+(b<<2)|0;l=k[j>>2]|0;r=d;return l|0}default:{l=f+56|0;d=f+4|0;k[f>>2]=27524;k[l>>2]=27544;B=0;wa(508,f+56|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;n=j;vva(l);Qb(n|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[l>>2]=27488;B=0;va(448,d|0);j=B;B=0;do if(j&1){b=Rb()|0;o=Q;p=b}else{k[d>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(e);Yua(b);Ava(d);o=q;p=a;break}Yua(e);B=0;a=Ia(40,f|0,142357,17)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146956,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,68901,63);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,69030,6);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(g);u=a;v=q;break}B=0;wa(510,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,216,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(i);w=a;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[l>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(l);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[l>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(l);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[l>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(l);Qb(C|0)}while(0);m=o;n=p;vva(l);Qb(n|0)}}return 0}function On(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;m=(d|0)==943;if((c|0)==534){if(m){n=a+24|0;if((k[n>>2]|0)<=0){r=e;return}o=k[a+56>>2]|0;p=0;do{k[b+(p<<2)>>2]=k[o+(p<<2)>>2];p=p+1|0}while((p|0)<(k[n>>2]|0))}switch(d|0){case 937:{n=a+28|0;if((k[n>>2]|0)<=0){r=e;return}p=k[a+60>>2]|0;o=0;do{k[b+(o<<2)>>2]=k[p+(o<<2)>>2];o=o+1|0}while((o|0)<(k[n>>2]|0));r=e;return}case 966:{n=a+32|0;if((k[n>>2]|0)<=0){r=e;return}o=k[a+64>>2]|0;p=0;do{k[b+(p<<2)>>2]=k[o+(p<<2)>>2];p=p+1|0}while((p|0)<(k[n>>2]|0));r=e;return}default:{r=e;return}}}if(m){m=k[a+52>>2]|0;n=a+24|0;p=k[n>>2]|0;o=(p|0)>0;if(!m){if(!o){r=e;return}q=k[a+56>>2]|0;s=0;do{k[b+(s<<2)>>2]=k[q+(s<<2)>>2];s=s+1|0}while((s|0)<(k[n>>2]|0));r=e;return}if(!o){r=e;return}o=a+56|0;s=p;p=0;q=0;while(1){if((k[m+(q<<2)>>2]|0)==(c|0)){k[b+(p<<2)>>2]=k[(k[o>>2]|0)+(q<<2)>>2];t=k[n>>2]|0;u=p+1|0}else{t=s;u=p}q=q+1|0;if((q|0)>=(t|0))break;else{s=t;p=u}}r=e;return}switch(d|0){case 937:{u=k[a+52>>2]|0;if(!u){p=a+28|0;if((k[p>>2]|0)<=0){r=e;return}t=k[a+60>>2]|0;s=0;do{k[b+(s<<2)>>2]=k[t+(s<<2)>>2];s=s+1|0}while((s|0)<(k[p>>2]|0));r=e;return}p=a+24|0;s=k[p>>2]|0;if((s|0)<=0){r=e;return}t=k[a+40>>2]|0;q=a+60|0;n=s;s=0;o=0;m=0;while(1){if(!(i[t+m>>0]|0)){v=n;w=s;x=o}else{if((k[u+(m<<2)>>2]|0)==(c|0)){k[b+(s<<2)>>2]=k[(k[q>>2]|0)+(o<<2)>>2];y=k[p>>2]|0;z=s+1|0}else{y=n;z=s}v=y;w=z;x=o+1|0}m=m+1|0;if((m|0)>=(v|0))break;else{n=v;s=w;o=x}}r=e;return}case 966:{x=k[a+52>>2]|0;if(!x){o=a+32|0;if((k[o>>2]|0)<=0){r=e;return}w=k[a+64>>2]|0;s=0;do{k[b+(s<<2)>>2]=k[w+(s<<2)>>2];s=s+1|0}while((s|0)<(k[o>>2]|0));r=e;return}o=a+24|0;s=k[o>>2]|0;if((s|0)<=0){r=e;return}w=k[a+44>>2]|0;v=a+64|0;a=s;s=0;n=0;m=0;while(1){if(!(i[w+m>>0]|0)){A=a;C=s;D=n}else{if((k[x+(m<<2)>>2]|0)==(c|0)){k[b+(s<<2)>>2]=k[(k[v>>2]|0)+(n<<2)>>2];E=k[o>>2]|0;F=s+1|0}else{E=a;F=s}A=E;C=F;D=n+1|0}m=m+1|0;if((m|0)>=(A|0))break;else{a=A;s=C;n=D}}r=e;return}default:{e=g+56|0;D=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,D|0);n=B;B=0;if(n&1){n=Rb()|0;G=Q;H=n;vva(e);Qb(H|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,D|0);n=B;B=0;do if(n&1){C=Rb()|0;I=Q;J=C}else{k[D>>2]=27560;C=g+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,D|0,f|0);s=B;B=0;if(s&1){s=Rb()|0;A=Q;Yua(f);Yua(C);Ava(D);I=A;J=s;break}Yua(f);B=0;s=Ia(40,g|0,142357,17)|0;A=B;B=0;if((((!(A&1)?(B=0,A=ya(427,d|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(A)|0,B=0,m=Ia(40,s|0,A|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,m|0,146956,19)|0,m=B,B=0,!(m&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,68901,63);m=B;B=0;do if(!(m&1)){B=0;eb(502,j|0,69037,10);A=B;B=0;if(A&1){A=Rb()|0;s=Q;Yua(h);K=s;L=A;break}B=0;wa(510,l|0,D|0);A=B;B=0;if(A&1){A=Rb()|0;M=Q;N=A;O=1}else{B=0;ua(163,a|0,h|0,j|0,278,l|0);A=B;B=0;if(A&1)P=1;else{B=0;eb(503,a|0,1240,229);B=0;P=0}A=Rb()|0;s=Q;Yua(l);M=s;N=A;O=P}Yua(j);Yua(h);if(O){K=M;L=N}else{R=M;S=N;k[g>>2]=27468;k[e>>2]=27488;k[D>>2]=27560;Yua(C);Ava(D);vva(e);Qb(S|0)}}else{A=Rb()|0;K=Q;L=A}while(0);zb(a|0);R=K;S=L;k[g>>2]=27468;k[e>>2]=27488;k[D>>2]=27560;Yua(C);Ava(D);vva(e);Qb(S|0)}m=Rb()|0;R=Q;S=m;k[g>>2]=27468;k[e>>2]=27488;k[D>>2]=27560;Yua(C);Ava(D);vva(e);Qb(S|0)}while(0);G=I;H=J;vva(e);Qb(H|0)}}}function Pn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;l=e+36|0;m=e+48|0;n=e+24|0;o=e+12|0;p=e;q=(d|0)==943;if((c|0)==534){if(q){s=a+24|0;if((k[s>>2]|0)>0)t=0;else{r=e;return}do{k[b+(t<<2)>>2]=t;t=t+1|0}while((t|0)<(k[s>>2]|0));r=e;return}switch(d|0){case 937:{s=a+24|0;t=k[s>>2]|0;if((t|0)<=0){r=e;return}u=k[a+40>>2]|0;v=t;t=0;w=0;while(1){if(!(i[u+w>>0]|0)){x=v;y=t}else{k[b+(t<<2)>>2]=w;x=k[s>>2]|0;y=t+1|0}w=w+1|0;if((w|0)>=(x|0))break;else{v=x;t=y}}r=e;return}case 966:{y=a+24|0;t=k[y>>2]|0;if((t|0)<=0){r=e;return}x=k[a+44>>2]|0;v=t;t=0;w=0;while(1){if(!(i[x+w>>0]|0)){z=v;A=t}else{k[b+(t<<2)>>2]=w;z=k[y>>2]|0;A=t+1|0}w=w+1|0;if((w|0)>=(z|0))break;else{v=z;t=A}}r=e;return}default:{A=g+56|0;t=g+4|0;k[g>>2]=27524;k[A>>2]=27544;B=0;wa(508,g+56|0,t|0);z=B;B=0;if(z&1){z=Rb()|0;C=Q;D=z;vva(A);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[A>>2]=27488;B=0;va(448,t|0);z=B;B=0;do if(z&1){v=Rb()|0;E=Q;F=v}else{k[t>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);w=B;B=0;if(w&1){w=Rb()|0;y=Q;Yua(f);Yua(v);Ava(t);E=y;F=w;break}Yua(f);B=0;w=Ia(40,g|0,142357,17)|0;y=B;B=0;a:do if((((!(y&1)?(B=0,x=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(x)|0,B=0,u=Ia(40,w|0,x|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,u|0,146956,19)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,68901,63);u=B;B=0;do if(!(u&1)){B=0;eb(502,j|0,69048,15);x=B;B=0;if(x&1){x=Rb()|0;G=Q;Yua(h);H=x;I=G;break}B=0;wa(510,l|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,s|0,h|0,j|0,309,l|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,s|0,1240,229);B=0;M=0}G=Rb()|0;x=Q;Yua(l);J=x;K=G;L=M}Yua(j);Yua(h);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(s|0);N=H;O=I}else P=34;while(0);if((P|0)==34){w=Rb()|0;N=w;O=Q}k[g>>2]=27468;k[A>>2]=27488;k[t>>2]=27560;Yua(v);Ava(t);vva(A);R=O;S=N;Qb(S|0)}while(0);C=E;D=F;vva(A);Qb(D|0)}}}if(q){q=k[a+52>>2]|0;D=a+24|0;A=k[D>>2]|0;F=(A|0)>0;if(!q){if(F)T=0;else{r=e;return}do{k[b+(T<<2)>>2]=T;T=T+1|0}while((T|0)<(k[D>>2]|0));r=e;return}if(F){U=A;V=0;W=0}else{r=e;return}while(1){if((k[q+(W<<2)>>2]|0)==(c|0)){k[b+(V<<2)>>2]=V;X=k[D>>2]|0;Y=V+1|0}else{X=U;Y=V}W=W+1|0;if((W|0)>=(X|0))break;else{U=X;V=Y}}r=e;return}switch(d|0){case 937:{Y=k[a+52>>2]|0;V=a+24|0;X=k[V>>2]|0;U=(X|0)>0;if(!Y){if(!U){r=e;return}W=k[a+40>>2]|0;D=X;q=0;A=0;while(1){if(!(i[W+A>>0]|0)){Z=D;_=q}else{k[b+(q<<2)>>2]=A;Z=k[V>>2]|0;_=q+1|0}A=A+1|0;if((A|0)>=(Z|0))break;else{D=Z;q=_}}r=e;return}if(!U){r=e;return}U=a+40|0;_=X;X=0;q=0;Z=0;while(1){if((k[Y+(Z<<2)>>2]|0)==(c|0)){if(!(i[(k[U>>2]|0)+Z>>0]|0)){$=_;aa=X}else{k[b+(X<<2)>>2]=q;$=k[V>>2]|0;aa=X+1|0}ba=$;ca=aa;da=q+1|0}else{ba=_;ca=X;da=q}Z=Z+1|0;if((Z|0)>=(ba|0))break;else{_=ba;X=ca;q=da}}r=e;return}case 966:{da=k[a+52>>2]|0;q=a+24|0;ca=k[q>>2]|0;X=(ca|0)>0;if(!da){if(!X){r=e;return}ba=k[a+44>>2]|0;_=ca;Z=0;aa=0;while(1){if(!(i[ba+aa>>0]|0)){ea=_;fa=Z}else{k[b+(Z<<2)>>2]=aa;ea=k[q>>2]|0;fa=Z+1|0}aa=aa+1|0;if((aa|0)>=(ea|0))break;else{_=ea;Z=fa}}r=e;return}if(!X){r=e;return}X=a+44|0;a=ca;ca=0;fa=0;Z=0;while(1){if((k[da+(Z<<2)>>2]|0)==(c|0)){if(!(i[(k[X>>2]|0)+Z>>0]|0)){ga=a;ha=ca}else{k[b+(ca<<2)>>2]=fa;ga=k[q>>2]|0;ha=ca+1|0}ia=ga;ja=ha;ka=fa+1|0}else{ia=a;ja=ca;ka=fa}Z=Z+1|0;if((Z|0)>=(ia|0))break;else{a=ia;ca=ja;fa=ka}}r=e;return}default:{e=m+56|0;ka=m+4|0;k[m>>2]=27524;k[e>>2]=27544;B=0;wa(508,m+56|0,ka|0);fa=B;B=0;if(fa&1){fa=Rb()|0;la=Q;ma=fa;vva(e);Qb(ma|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[e>>2]=27488;B=0;va(448,ka|0);fa=B;B=0;do if(fa&1){ja=Rb()|0;na=Q;oa=ja}else{k[ka>>2]=27560;ja=m+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ka|0,f|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ia=Q;Yua(f);Yua(ja);Ava(ka);na=ia;oa=ca;break}Yua(f);B=0;ca=Ia(40,m|0,142357,17)|0;ia=B;B=0;b:do if((((!(ia&1)?(B=0,a=ya(427,d|0)|0,Z=B,B=0,!(Z&1)):0)?(Z=Lta(a)|0,B=0,ha=Ia(40,ca|0,a|0,Z|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Z=Ia(40,ha|0,146956,19)|0,ha=B,B=0,!(ha&1)):0)?(B=0,Xa(239,Z|0,0)|0,Z=B,B=0,!(Z&1)):0){Z=Ab(20)|0;B=0;eb(502,n|0,68901,63);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,o|0,69048,15);a=B;B=0;if(a&1){a=Rb()|0;ga=Q;Yua(n);pa=a;qa=ga;break}B=0;wa(510,p|0,ka|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ra=1;sa=Q;ta=ga}else{B=0;ua(163,Z|0,n|0,o|0,378,p|0);ga=B;B=0;if(ga&1)xa=1;else{B=0;eb(503,Z|0,1240,229);B=0;xa=0}ga=Rb()|0;a=Q;Yua(p);ra=xa;sa=a;ta=ga}Yua(o);Yua(n);if(ra){pa=ta;qa=sa}else{za=sa;Aa=ta;break b}}else{ga=Rb()|0;pa=ga;qa=Q}while(0);zb(Z|0);za=qa;Aa=pa}else P=95;while(0);if((P|0)==95){ca=Rb()|0;za=Q;Aa=ca}k[m>>2]=27468;k[e>>2]=27488;k[ka>>2]=27560;Yua(ja);Ava(ka);vva(e);R=za;S=Aa;Qb(S|0)}while(0);la=na;ma=oa;vva(e);Qb(ma|0)}}}function Qn(a){a=a|0;return k[a+12>>2]|0}function Rn(a){a=a|0;return k[a+16>>2]|0}function Sn(a,b){a=a|0;b=b|0;p[b>>3]=+p[a+72>>3];p[b+8>>3]=+p[a+80>>3];p[b+16>>3]=+p[a+88>>3];p[b+24>>3]=+p[a+96>>3];p[b+32>>3]=+p[a+104>>3];p[b+40>>3]=+p[a+112>>3];p[b+48>>3]=+p[a+120>>3];p[b+56>>3]=+p[a+128>>3];p[b+64>>3]=+p[a+136>>3];return}function Tn(a,b){a=a|0;b=b|0;return (k[a+68>>2]|0)==(b|0)|0}function Un(a,b,c){a=a|0;b=b|0;c=+c;var d=0;d=(k[a+40>>2]|0)+b|0;if(i[d>>0]|0){i[a+20>>0]=1;i[d>>0]=0;i[(k[a+44>>2]|0)+b>>0]=1}p[(k[a+48>>2]|0)+(b<<3)>>3]=c;return}function Vn(a,b){a=a|0;b=b|0;var c=0;c=(k[a+40>>2]|0)+b|0;if(!(i[c>>0]|0))return;i[a+20>>0]=1;i[c>>0]=0;i[(k[a+44>>2]|0)+b>>0]=1;return}function Wn(a){a=a|0;return (i[a+20>>0]|0)!=0|0}function Xn(a){a=a|0;i[a+20>>0]=0;return}function Yn(a,b){a=a|0;b=b|0;Zn(a,b);p[(k[a+48>>2]|0)+(b<<3)>>3]=0.0;return}function Zn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;j=(k[a+40>>2]|0)+b|0;if(i[j>>0]|0){r=c;return}if(!(i[a+38>>0]|0)){i[a+20>>0]=1;i[j>>0]=1;i[(k[a+44>>2]|0)+b>>0]=0;r=c;return}c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;m=a;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){j=Rb()|0;n=Q;o=j}else{k[b>>2]=27560;j=e+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(j);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,e|0,69064,32)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,f|0,68901,63);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,69097,9);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,p|0,f|0,g|0,479,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,p|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(p|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(j);Ava(b);vva(c);Qb(C|0)}while(0);l=n;m=o;vva(c);Qb(m|0)}function _n(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0;c=k[a+32>>2]|0;if(!c)return;d=Rqa(c>>>0>536870911?-1:c<<3)|0;e=k[a+24>>2]|0;if((e|0)>0){f=k[a+44>>2]|0;g=a+48|0;h=0;j=0;while(1){if(!(i[f+j>>0]|0))l=h;else{p[d+(h<<3)>>3]=+p[(k[g>>2]|0)+(j<<3)>>3];l=h+1|0}j=j+1|0;if((j|0)>=(e|0))break;else h=l}}if(k[b>>2]|0){l=k[k[b+4>>2]>>2]|0;Dc[k[(k[l>>2]|0)+16>>2]&255](l,c,k[a+64>>2]|0,d,0)}Tqa(d);return}function $n(a){a=a|0;if(!(i[a+37>>0]|0))return;if(i[a+38>>0]|0)return;i[a+20>>0]=1;tla(a+24|0);return}function ao(a){a=a|0;return (i[a+37>>0]|0)!=0|0}function bo(a){a=a|0;if(i[a+37>>0]|0)return;if(i[a+38>>0]|0)return;i[a+20>>0]=1;ula(a+24|0);return}function co(a){a=a|0;return k[a+4>>2]|0}function eo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;m=d+24|0;n=d+12|0;o=d;p=(c|0)==943;if((b|0)==534){if(p){q=k[a+24>>2]|0;r=d;return q|0}switch(c|0){case 937:{q=k[a+28>>2]|0;r=d;return q|0}case 966:{q=k[a+32>>2]|0;r=d;return q|0}default:{s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=f+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,t|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(t);y=C;z=A;break}Yua(e);B=0;A=Ia(40,f|0,142357,17)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,D=ya(427,c|0)|0,E=B,B=0,!(E&1)):0)?(E=Lta(D)|0,B=0,F=Ia(40,A|0,D|0,E|0)|0,E=B,B=0,!(E&1)):0)?(B=0,E=Ia(40,F|0,146956,19)|0,F=B,B=0,!(F&1)):0)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,68901,63);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,69107,15);D=B;B=0;if(D&1){D=Rb()|0;G=Q;Yua(g);H=D;I=G;break}B=0;wa(510,i|0,t|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,E|0,g|0,h|0,542,i|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,E|0,1240,229);B=0;M=0}G=Rb()|0;D=Q;Yua(i);J=D;K=G;L=M}Yua(h);Yua(g);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(E|0);N=H;O=I}else P=25;while(0);if((P|0)==25){A=Rb()|0;N=A;O=Q}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}}}if(p){p=k[a+52>>2]|0;w=k[a+24>>2]|0;if(!p){q=w;r=d;return q|0}if((w|0)>0){T=0;U=0}else{q=0;r=d;return q|0}while(1){s=((k[p+(T<<2)>>2]|0)==(b|0)&1)+U|0;T=T+1|0;if((T|0)>=(w|0)){q=s;break}else U=s}r=d;return q|0}switch(c|0){case 937:{U=k[a+52>>2]|0;if(!U){q=k[a+28>>2]|0;r=d;return q|0}w=k[a+24>>2]|0;if((w|0)<=0){q=0;r=d;return q|0}T=a+40|0;p=0;s=0;while(1){if((k[U+(p<<2)>>2]|0)==(b|0))V=(l[(k[T>>2]|0)+p>>0]|0)+s|0;else V=s;p=p+1|0;if((p|0)>=(w|0)){q=V;break}else s=V}r=d;return q|0}case 966:{V=k[a+52>>2]|0;if(!V){q=k[a+32>>2]|0;r=d;return q|0}s=k[a+24>>2]|0;if((s|0)<=0){q=0;r=d;return q|0}w=a+44|0;a=0;p=0;while(1){if((k[V+(a<<2)>>2]|0)==(b|0))W=(l[(k[w>>2]|0)+a>>0]|0)+p|0;else W=p;a=a+1|0;if((a|0)>=(s|0)){q=W;break}else p=W}r=d;return q|0}default:{q=j+56|0;d=j+4|0;k[j>>2]=27524;k[q>>2]=27544;B=0;wa(508,j+56|0,d|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(q);Qb(Y|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[q>>2]=27488;B=0;va(448,d|0);W=B;B=0;do if(W&1){p=Rb()|0;Z=Q;_=p}else{k[d>>2]=27560;p=j+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;a=Q;Yua(e);Yua(p);Ava(d);Z=a;_=s;break}Yua(e);B=0;s=Ia(40,j|0,142357,17)|0;a=B;B=0;b:do if((((!(a&1)?(B=0,w=ya(427,c|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(w)|0,B=0,V=Ia(40,s|0,w|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,V|0,146956,19)|0,V=B,B=0,!(V&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,m|0,68901,63);V=B;B=0;do if(!(V&1)){B=0;eb(502,n|0,69107,15);w=B;B=0;if(w&1){w=Rb()|0;T=Q;Yua(m);$=w;aa=T;break}B=0;wa(510,o|0,d|0);T=B;B=0;if(T&1){T=Rb()|0;ba=1;ca=Q;da=T}else{B=0;ua(163,b|0,m|0,n|0,572,o|0);T=B;B=0;if(T&1)ea=1;else{B=0;eb(503,b|0,1240,229);B=0;ea=0}T=Rb()|0;w=Q;Yua(o);ba=ea;ca=w;da=T}Yua(n);Yua(m);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break b}}else{T=Rb()|0;$=T;aa=Q}while(0);zb(b|0);fa=aa;ga=$}else P=70;while(0);if((P|0)==70){s=Rb()|0;fa=Q;ga=s}k[j>>2]=27468;k[q>>2]=27488;k[d>>2]=27560;Yua(p);Ava(d);vva(q);R=fa;S=ga;Qb(S|0)}while(0);X=Z;Y=_;vva(q);Qb(Y|0)}}return 0}function fo(a){a=a|0;return l[a+36>>0]|0|0}function go(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 937:{d=k[a+28>>2]|0;if(!d){r=e;return}m=Rqa(d>>>0>1073741823?-1:d<<2)|0;n=Rqa(d>>>0>536870911?-1:d<<3)|0;o=k[a+24>>2]|0;if((o|0)>0){q=k[a+40>>2]|0;s=a+60|0;t=a+56|0;u=0;v=0;while(1){if(!(i[q+v>>0]|0))w=u;else{p[n+(u<<3)>>3]=+p[c+(k[(k[s>>2]|0)+(u<<2)>>2]<<3)>>3];k[m+(u<<2)>>2]=k[(k[t>>2]|0)+(v<<2)>>2];w=u+1|0}v=v+1|0;if((v|0)>=(o|0))break;else u=w}}if(!(k[b>>2]|0)){x=m;y=n}else{w=k[k[b+4>>2]>>2]|0;Dc[k[(k[w>>2]|0)+16>>2]&255](w,d,m,n,0);x=m;y=n}break}case 966:{n=k[a+32>>2]|0;if(!n){r=e;return}m=Rqa(n>>>0>1073741823?-1:n<<2)|0;d=Rqa(n>>>0>536870911?-1:n<<3)|0;w=k[a+24>>2]|0;if((w|0)>0){u=k[a+44>>2]|0;o=a+64|0;v=a+56|0;a=0;t=0;while(1){if(!(i[u+t>>0]|0))z=a;else{p[d+(a<<3)>>3]=+p[c+(k[(k[o>>2]|0)+(a<<2)>>2]<<3)>>3];k[m+(a<<2)>>2]=k[(k[v>>2]|0)+(t<<2)>>2];z=a+1|0}t=t+1|0;if((t|0)>=(w|0))break;else a=z}}if(!(k[b>>2]|0)){x=m;y=d}else{z=k[k[b+4>>2]>>2]|0;Dc[k[(k[z>>2]|0)+16>>2]&255](z,n,m,d,0);x=m;y=d}break}default:{d=g+56|0;m=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;A=Q;C=n;vva(d);Qb(C|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){z=Rb()|0;D=Q;E=z}else{k[m>>2]=27560;z=g+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;a=Q;Yua(f);Yua(z);Ava(m);D=a;E=b;break}Yua(f);B=0;b=Ia(40,g|0,69123,59)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,68901,63);a=B;B=0;do if(!(a&1)){B=0;eb(502,j|0,69183,8);w=B;B=0;if(w&1){w=Rb()|0;t=Q;Yua(h);F=t;G=w;break}B=0;wa(510,l|0,m|0);w=B;B=0;if(w&1){w=Rb()|0;H=Q;I=w;J=1}else{B=0;ua(163,b|0,h|0,j|0,626,l|0);w=B;B=0;if(w&1)K=1;else{B=0;eb(503,b|0,1240,229);B=0;K=0}w=Rb()|0;t=Q;Yua(l);H=t;I=w;J=K}Yua(j);Yua(h);if(J){F=H;G=I}else{L=H;M=I;k[g>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(z);Ava(m);vva(d);Qb(M|0)}}else{w=Rb()|0;F=Q;G=w}while(0);zb(b|0);L=F;M=G;k[g>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(z);Ava(m);vva(d);Qb(M|0)}a=Rb()|0;L=Q;M=a;k[g>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(z);Ava(m);vva(d);Qb(M|0)}while(0);A=D;C=E;vva(d);Qb(C|0)}}Tqa(y);Tqa(x);r=e;return}function ho(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;switch(d|0){case 937:{d=k[a+28>>2]|0;if(!d){r=e;return}m=Rqa(d>>>0>536870911?-1:d<<3)|0;n=k[a+24>>2]|0;if((n|0)>0){o=k[a+40>>2]|0;q=a+56|0;s=0;t=0;while(1){if(!(i[o+t>>0]|0))u=s;else{p[m+(s<<3)>>3]=+p[c+(k[(k[q>>2]|0)+(t<<2)>>2]<<3)>>3];u=s+1|0}t=t+1|0;if((t|0)>=(n|0))break;else s=u}}if(!(k[b>>2]|0))v=m;else{u=k[k[b+4>>2]>>2]|0;Dc[k[(k[u>>2]|0)+16>>2]&255](u,d,k[a+60>>2]|0,m,0);v=m}break}case 966:{m=k[a+32>>2]|0;if(!m){r=e;return}d=Rqa(m>>>0>536870911?-1:m<<3)|0;u=k[a+24>>2]|0;if((u|0)>0){s=k[a+44>>2]|0;n=a+56|0;t=0;q=0;while(1){if(!(i[s+q>>0]|0))w=t;else{p[d+(t<<3)>>3]=+p[c+(k[(k[n>>2]|0)+(q<<2)>>2]<<3)>>3];w=t+1|0}q=q+1|0;if((q|0)>=(u|0))break;else t=w}}if(!(k[b>>2]|0))v=d;else{w=k[k[b+4>>2]>>2]|0;Dc[k[(k[w>>2]|0)+16>>2]&255](w,m,k[a+64>>2]|0,d,0);v=d}break}default:{d=g+56|0;a=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,a|0);m=B;B=0;if(m&1){m=Rb()|0;x=Q;y=m;vva(d);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,a|0);m=B;B=0;do if(m&1){w=Rb()|0;z=Q;A=w}else{k[a>>2]=27560;w=g+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;t=Q;Yua(f);Yua(w);Ava(a);z=t;A=b;break}Yua(f);B=0;b=Ia(40,g|0,69192,60)|0;t=B;B=0;if(!(t&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,68901,63);t=B;B=0;do if(!(t&1)){B=0;eb(502,j|0,69253,9);u=B;B=0;if(u&1){u=Rb()|0;q=Q;Yua(h);C=q;D=u;break}B=0;wa(510,l|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;E=Q;F=u;G=1}else{B=0;ua(163,b|0,h|0,j|0,671,l|0);u=B;B=0;if(u&1)H=1;else{B=0;eb(503,b|0,1240,229);B=0;H=0}u=Rb()|0;q=Q;Yua(l);E=q;F=u;G=H}Yua(j);Yua(h);if(G){C=E;D=F}else{I=E;J=F;k[g>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(w);Ava(a);vva(d);Qb(J|0)}}else{u=Rb()|0;C=Q;D=u}while(0);zb(b|0);I=C;J=D;k[g>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(w);Ava(a);vva(d);Qb(J|0)}t=Rb()|0;I=Q;J=t;k[g>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(w);Ava(a);vva(d);Qb(J|0)}while(0);x=z;y=A;vva(d);Qb(y|0)}}Tqa(v);r=e;return}function io(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;l=k[b>>2]|0;m=(c|0)==937;if(!m)if((c|0)==966){qla(a+24|0,966);n=1}else n=0;else{qla(a+24|0,937);n=0}if(i[a+36>>0]|0){r=d;return}a:do if((c|0)==943){o=a+24|0;p=k[o>>2]|0;if((p|0)>0){q=k[a+56>>2]|0;s=0;do{k[q+(s<<2)>>2]=s+l;s=s+1|0;t=k[o>>2]|0}while((s|0)<(t|0));u=t}else u=p}else{if(m){s=a+28|0;o=k[s>>2]|0;if((o|0)<=0){u=o;break}o=k[a+60>>2]|0;q=0;while(1){k[o+(q<<2)>>2]=q+l;q=q+1|0;t=k[s>>2]|0;if((q|0)>=(t|0)){u=t;break a}}}if(n){q=a+32|0;s=k[q>>2]|0;if((s|0)<=0){u=s;break}s=k[a+64>>2]|0;o=0;while(1){k[s+(o<<2)>>2]=o+l;o=o+1|0;p=k[q>>2]|0;if((o|0)>=(p|0)){u=p;break a}}}o=f+56|0;q=f+4|0;k[f>>2]=27524;k[o>>2]=27544;B=0;wa(508,f+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;v=Q;w=s;vva(o);Qb(w|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){p=Rb()|0;x=Q;y=p}else{k[q>>2]=27560;p=f+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);t=B;B=0;if(t&1){t=Rb()|0;z=Q;Yua(e);Yua(p);Ava(q);x=z;y=t;break}Yua(e);B=0;t=Ia(40,f|0,142357,17)|0;z=B;B=0;if((((!(z&1)?(B=0,z=ya(427,c|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,t|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,146956,19)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,g|0,68901,63);C=B;B=0;do if(C&1){z=Rb()|0;D=Q;E=z}else{B=0;eb(502,h|0,69263,14);z=B;B=0;if(z&1){z=Rb()|0;t=Q;Yua(g);D=t;E=z;break}B=0;wa(510,j|0,q|0);z=B;B=0;if(z&1){z=Rb()|0;F=Q;G=z;H=1}else{B=0;ua(163,A|0,g|0,h|0,714,j|0);z=B;B=0;if(z&1)I=1;else{B=0;eb(503,A|0,1240,229);B=0;I=0}z=Rb()|0;t=Q;Yua(j);F=t;G=z;H=I}Yua(h);Yua(g);if(H){D=F;E=G;break}else{J=F;K=G}k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(p);Ava(q);vva(o);Qb(K|0)}while(0);zb(A|0);J=D;K=E;k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(p);Ava(q);vva(o);Qb(K|0)}C=Rb()|0;J=Q;K=C;k[f>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(p);Ava(q);vva(o);Qb(K|0)}while(0);v=x;w=y;vva(o);Qb(w|0)}while(0);k[b>>2]=u+l;r=d;return}function jo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;if(i[a+36>>0]|0){r=d;return}switch(c|0){case 943:{l=a+24|0;if((k[l>>2]|0)<=0){r=d;return}m=k[a+56>>2]|0;n=0;do{o=m+(n<<2)|0;k[o>>2]=(k[o>>2]|0)+b;n=n+1|0}while((n|0)<(k[l>>2]|0));r=d;return}case 937:{l=a+28|0;if((k[l>>2]|0)<=0){r=d;return}n=k[a+60>>2]|0;m=0;do{o=n+(m<<2)|0;k[o>>2]=(k[o>>2]|0)+b;m=m+1|0}while((m|0)<(k[l>>2]|0));r=d;return}case 966:{l=a+32|0;if((k[l>>2]|0)<=0){r=d;return}m=k[a+64>>2]|0;a=0;do{n=m+(a<<2)|0;k[n>>2]=(k[n>>2]|0)+b;a=a+1|0}while((a|0)<(k[l>>2]|0));r=d;return}default:{d=f+56|0;l=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,l|0);a=B;B=0;if(a&1){a=Rb()|0;p=Q;q=a;vva(d);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);a=B;B=0;do if(a&1){b=Rb()|0;s=Q;t=b}else{k[l>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,l|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Yua(e);Yua(b);Ava(l);s=n;t=m;break}Yua(e);B=0;m=Ia(40,f|0,142357,17)|0;n=B;B=0;if((((!(n&1)?(B=0,n=ya(427,c|0)|0,o=B,B=0,!(o&1)):0)?(o=Lta(n)|0,B=0,u=Ia(40,m|0,n|0,o|0)|0,o=B,B=0,!(o&1)):0)?(B=0,o=Ia(40,u|0,146956,19)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,g|0,68901,63);u=B;B=0;do if(!(u&1)){B=0;eb(502,h|0,69278,10);n=B;B=0;if(n&1){n=Rb()|0;m=Q;Yua(g);v=m;w=n;break}B=0;wa(510,j|0,l|0);n=B;B=0;if(n&1){n=Rb()|0;x=Q;y=n;z=1}else{B=0;ua(163,o|0,g|0,h|0,739,j|0);n=B;B=0;if(n&1)A=1;else{B=0;eb(503,o|0,1240,229);B=0;A=0}n=Rb()|0;m=Q;Yua(j);x=m;y=n;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(d);Qb(D|0)}}else{n=Rb()|0;v=Q;w=n}while(0);zb(o|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(d);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[f>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(d);Qb(D|0)}while(0);p=s;q=t;vva(d);Qb(q|0)}}}function ko(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;if(i[a+36>>0]|0){r=e;return}switch(d|0){case 943:{m=a+24|0;if((k[m>>2]|0)<=0){r=e;return}n=k[a+56>>2]|0;o=a+12|0;p=0;do{q=b+((ma(k[o>>2]|0,c)|0)+p<<2)|0;k[q>>2]=k[n+(p<<2)>>2];p=p+1|0}while((p|0)<(k[m>>2]|0));r=e;return}case 937:{m=a+28|0;if((k[m>>2]|0)<=0){r=e;return}p=k[a+60>>2]|0;n=a+12|0;o=0;do{q=b+((ma(k[n>>2]|0,c)|0)+o<<2)|0;k[q>>2]=k[p+(o<<2)>>2];o=o+1|0}while((o|0)<(k[m>>2]|0));r=e;return}case 966:{m=a+32|0;if((k[m>>2]|0)<=0){r=e;return}o=k[a+64>>2]|0;p=a+12|0;a=0;do{n=b+((ma(k[p>>2]|0,c)|0)+a<<2)|0;k[n>>2]=k[o+(a<<2)>>2];a=a+1|0}while((a|0)<(k[m>>2]|0));r=e;return}default:{e=g+56|0;m=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(e);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){o=Rb()|0;u=Q;v=o}else{k[m>>2]=27560;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;p=Q;Yua(f);Yua(o);Ava(m);u=p;v=c;break}Yua(f);B=0;c=Ia(40,g|0,142357,17)|0;p=B;B=0;if((((!(p&1)?(B=0,p=ya(427,d|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(p)|0,B=0,n=Ia(40,c|0,p|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,n|0,146956,19)|0,n=B,B=0,!(n&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,68901,63);n=B;B=0;do if(!(n&1)){B=0;eb(502,j|0,69289,12);p=B;B=0;if(p&1){p=Rb()|0;c=Q;Yua(h);w=c;x=p;break}B=0;wa(510,l|0,m|0);p=B;B=0;if(p&1){p=Rb()|0;y=Q;z=p;A=1}else{B=0;ua(163,b|0,h|0,j|0,761,l|0);p=B;B=0;if(p&1)C=1;else{B=0;eb(503,b|0,1240,229);B=0;C=0}p=Rb()|0;c=Q;Yua(l);y=c;z=p;A=C}Yua(j);Yua(h);if(A){w=y;x=z}else{D=y;E=z;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}}else{p=Rb()|0;w=Q;x=p}while(0);zb(b|0);D=w;E=x;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}n=Rb()|0;D=Q;E=n;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}}}function lo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;l=e;if(!(i[a+36>>0]|0)){r=e;return}switch(d|0){case 943:{m=a+24|0;if((k[m>>2]|0)<=0){r=e;return}n=a+12|0;o=k[a+56>>2]|0;p=0;do{q=b+((ma(k[n>>2]|0,c)|0)+p<<2)|0;k[o+(p<<2)>>2]=k[q>>2];p=p+1|0}while((p|0)<(k[m>>2]|0));r=e;return}case 937:{m=a+28|0;if((k[m>>2]|0)<=0){r=e;return}p=a+12|0;o=k[a+60>>2]|0;n=0;do{q=b+((ma(k[p>>2]|0,c)|0)+n<<2)|0;k[o+(n<<2)>>2]=k[q>>2];n=n+1|0}while((n|0)<(k[m>>2]|0));r=e;return}case 966:{m=a+32|0;if((k[m>>2]|0)<=0){r=e;return}n=a+12|0;o=k[a+64>>2]|0;a=0;do{p=b+((ma(k[n>>2]|0,c)|0)+a<<2)|0;k[o+(a<<2)>>2]=k[p>>2];a=a+1|0}while((a|0)<(k[m>>2]|0));r=e;return}default:{e=g+56|0;m=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(e);Qb(t|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){o=Rb()|0;u=Q;v=o}else{k[m>>2]=27560;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;Yua(f);Yua(o);Ava(m);u=n;v=c;break}Yua(f);B=0;c=Ia(40,g|0,142357,17)|0;n=B;B=0;if((((!(n&1)?(B=0,n=ya(427,d|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(n)|0,B=0,p=Ia(40,c|0,n|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,p|0,146956,19)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,h|0,68901,63);p=B;B=0;do if(!(p&1)){B=0;eb(502,j|0,69302,15);n=B;B=0;if(n&1){n=Rb()|0;c=Q;Yua(h);w=c;x=n;break}B=0;wa(510,l|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;y=Q;z=n;A=1}else{B=0;ua(163,b|0,h|0,j|0,786,l|0);n=B;B=0;if(n&1)C=1;else{B=0;eb(503,b|0,1240,229);B=0;C=0}n=Rb()|0;c=Q;Yua(l);y=c;z=n;A=C}Yua(j);Yua(h);if(A){w=y;x=z}else{D=y;E=z;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}}else{n=Rb()|0;w=Q;x=n}while(0);zb(b|0);D=w;E=x;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}p=Rb()|0;D=Q;E=p;k[g>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(o);Ava(m);vva(e);Qb(E|0)}while(0);s=u;t=v;vva(e);Qb(t|0)}}}function mo(a,b){a=a|0;b=b|0;var c=0;c=vY()|0;i[a+36>>0]=(k[b+(k[a+12>>2]<<2)>>2]|0)!=(c|0)&1;return}function no(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!b){e=0;return e|0}f=b>>>0>1073741823?-1:b<<2;g=Rqa(f)|0;h=Rqa(f)|0;f=(b|0)>0;if(f){if((d|0)==534){i=0;j=0;l=0;while(1){k[h+(i<<2)>>2]=l;m=a+(i<<2)|0;n=eo(k[m>>2]|0,534,c)|0;k[g+(i<<2)>>2]=n;o=n+j|0;i=i+1|0;if((i|0)==(b|0)){p=o;break}else{j=o;l=(k[(k[m>>2]|0)+24>>2]|0)+l|0}}}else{l=0;j=0;i=0;while(1){k[h+(l<<2)>>2]=i;m=a+(l<<2)|0;o=eo(k[m>>2]|0,d,c)|0;k[g+(l<<2)>>2]=o;n=k[m>>2]|0;m=k[n+52>>2]|0;q=k[n+24>>2]|0;if(m)if((q|0)>0){n=0;r=0;while(1){s=((k[m+(n<<2)>>2]|0)==(d|0)&1)+r|0;n=n+1|0;if((n|0)==(q|0)){t=s;break}else r=s}}else t=0;else t=q;r=o+j|0;l=l+1|0;if((l|0)==(b|0)){p=r;break}else{j=r;i=t+i|0}}}if(p){i=Rqa(p>>>0>1073741823?-1:p<<2)|0;if(f){p=0;t=0;while(1){Pn(k[a+(t<<2)>>2]|0,i+(p<<2)|0,d,c);j=t+1|0;if((j|0)==(b|0))break;else{p=(k[g+(t<<2)>>2]|0)+p|0;t=j}}if(f){f=0;t=0;while(1){p=k[g+(t<<2)>>2]|0;if((p|0)>0){c=k[h+(t<<2)>>2]|0;d=0;do{a=i+(d+f<<2)|0;k[a>>2]=(k[a>>2]|0)+c;d=d+1|0}while((d|0)<(p|0))}t=t+1|0;if((t|0)==(b|0)){u=i;break}else f=p+f|0}}else u=i}else u=i}else u=0}else u=0;Tqa(g);Tqa(h);e=u;return e|0}function oo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;if(!b){e=0;return e|0}f=Rqa(b>>>0>1073741823?-1:b<<2)|0;g=(b|0)>0;if(g){h=0;i=0;while(1){j=eo(k[a+(h<<2)>>2]|0,d,c)|0;k[f+(h<<2)>>2]=j;l=j+i|0;h=h+1|0;if((h|0)==(b|0)){m=l;break}else i=l}if(m){i=Rqa(m>>>0>1073741823?-1:m<<2)|0;if(g){g=0;m=0;while(1){On(k[a+(m<<2)>>2]|0,i+(g<<2)|0,d,c);h=m+1|0;if((h|0)==(b|0)){n=i;break}else{g=(k[f+(m<<2)>>2]|0)+g|0;m=h}}}else n=i}else n=0}else n=0;Tqa(f);e=n;return e|0}function po(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;if((b|0)>0){e=0;f=0}else{g=0;return g|0}while(1){h=(eo(k[a+(e<<2)>>2]|0,d,c)|0)+f|0;e=e+1|0;if((e|0)==(b|0)){g=h;break}else f=h}return g|0}function qo(a){a=a|0;k[a>>2]=28824;return}function ro(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0;k[a>>2]=28824;k[a+12>>2]=b;k[a+16>>2]=c;k[a+20>>2]=-9999;c=(Jka(e,108266)|0)+(d<<3)|0;p[a+24>>3]=+p[c>>3];c=(Jka(e,108276)|0)+(d<<3)|0;p[a+32>>3]=+p[c>>3];c=(Jka(e,127183)|0)+(d<<3)|0;p[a+40>>3]=+p[c>>3];c=k[e+40>>2]|0;k[a+8>>2]=c;switch(c|0){case 302:{c=(Jka(e,127183)|0)+(d<<3)|0;f=+p[c>>3];c=(Jka(e,134945)|0)+(d<<3)|0;g=+p[c>>3];c=(Jka(e,137052)|0)+(d<<3)|0;p[a+72>>3]=(f-g)/+p[c>>3];break}case 303:{c=(Jka(e,108286)|0)+(d<<3)|0;p[a+48>>3]=+p[c>>3];c=(Jka(e,108298)|0)+(d<<3)|0;p[a+56>>3]=+p[c>>3];c=(Jka(e,108311)|0)+(d<<3)|0;p[a+64>>3]=+p[c>>3];break}case 300:{p[a+72>>3]=0.0;break}case 301:{c=(Jka(e,108276)|0)+(d<<3)|0;g=+p[c>>3];c=(Jka(e,134945)|0)+(d<<3)|0;f=+p[c>>3];c=(Jka(e,137052)|0)+(d<<3)|0;p[a+72>>3]=(g-f)/+p[c>>3];break}default:{}}k[a+80>>2]=k[(k[e+96>>2]|0)+(d<<2)>>2];return}function so(a){a=a|0;k[a>>2]=28824;return}function to(a){a=a|0;Sqa(a);return}function uo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0;b=r;r=r+1520|0;c=b+1504|0;d=b+1320|0;e=b+1492|0;f=b+1168|0;g=b+1480|0;h=b+1016|0;j=b+1468|0;l=b+880|0;m=b+1456|0;n=b+744|0;o=b+1304|0;q=b+592|0;s=b+1152|0;t=b+456|0;u=b+728|0;v=b+304|0;w=b+440|0;x=b+152|0;y=b+288|0;z=b+16|0;A=b;C=d+56|0;D=d+4|0;k[d>>2]=27524;k[C>>2]=27544;B=0;wa(508,d+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=d+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(D);I=L;J=K;break}Yua(c);B=0;Ia(40,d|0,69326,8)|0;K=B;B=0;do if(!(K&1)?(B=0,wa(510,e|0,D|0),L=B,B=0,!(L&1)):0){B=0;ya(424,e|0)|0;L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(e);N=M;O=L;break}Yua(e);k[d>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);L=f+56|0;M=f+4|0;k[f>>2]=27524;k[L>>2]=27544;B=0;wa(508,f+56|0,M|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(L);Qb(S|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[L>>2]=27488;B=0;va(448,M|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=f+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,f|0,144086,7)|0;X=B;B=0;do if(((!(X&1)?(B=0,Y=Xa(242,W|0,k[a+12>>2]|0)|0,Z=B,B=0,!(Z&1)):0)?(B=0,Ia(40,Y|0,149177,1)|0,Y=B,B=0,!(Y&1)):0)?(B=0,wa(510,g|0,M|0),Y=B,B=0,!(Y&1)):0){B=0;ya(424,g|0)|0;Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(g);_=Z;$=Y;break}Yua(g);k[f>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);Y=h+56|0;Z=h+4|0;k[h>>2]=27524;k[Y>>2]=27544;B=0;wa(508,h+56|0,Z|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;ca=aa;vva(Y);Qb(ca|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Y>>2]=27488;B=0;va(448,Z|0);aa=B;B=0;do if(aa&1){da=Rb()|0;ea=Q;fa=da}else{k[Z>>2]=27560;da=h+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Z|0,c|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(c);Yua(da);Ava(Z);ea=ha;fa=ga;break}Yua(c);B=0;ga=Ia(40,h|0,79833,8)|0;ha=B;B=0;do if(ha&1)ia=136;else{B=0;ja=Xa(242,ga|0,k[a+16>>2]|0)|0;ka=B;B=0;if(ka&1){ia=136;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){ia=136;break}B=0;wa(510,j|0,Z|0);ja=B;B=0;if(ja&1){ia=136;break}B=0;ya(424,j|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(j);la=ka;ma=ja;break}Yua(j);k[h>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(da);Ava(Z);vva(Y);ja=l+56|0;ka=l+4|0;k[l>>2]=27524;k[ja>>2]=27544;B=0;wa(508,l+56|0,ka|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;pa=na;vva(ja);Qb(pa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[ja>>2]=27488;B=0;va(448,ka|0);na=B;B=0;do if(na&1){qa=Rb()|0;ra=Q;sa=qa}else{k[ka>>2]=27560;qa=l+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ka|0,c|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;Yua(c);Yua(qa);Ava(ka);ra=ua;sa=ta;break}Yua(c);B=0;ta=Ia(40,l|0,69335,8)|0;ua=B;B=0;do if(ua&1)ia=139;else{B=0;xa=Xa(242,ta|0,k[a+20>>2]|0)|0;za=B;B=0;if(za&1){ia=139;break}B=0;Ia(40,xa|0,149177,1)|0;xa=B;B=0;if(xa&1){ia=139;break}B=0;wa(510,m|0,ka|0);xa=B;B=0;if(xa&1){ia=139;break}B=0;ya(424,m|0)|0;xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(m);Aa=za;Ba=xa;break}Yua(m);k[l>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(qa);Ava(ka);vva(ja);xa=n+56|0;za=n+4|0;k[n>>2]=27524;k[xa>>2]=27544;B=0;wa(508,n+56|0,za|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Ea=Ca;vva(xa);Qb(Ea|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[xa>>2]=27488;B=0;va(448,za|0);Ca=B;B=0;do if(Ca&1){Fa=Rb()|0;Ga=Q;Ha=Fa}else{k[za>>2]=27560;Fa=n+36|0;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ka=Q;Yua(c);Yua(Fa);Ava(za);Ga=Ka;Ha=Ja;break}Yua(c);B=0;Ja=Ia(40,n|0,69344,6)|0;Ka=B;B=0;do if(Ka&1)ia=142;else{B=0;La=Sa(1,Ja|0,+(+p[a+24>>3]))|0;Ma=B;B=0;if(Ma&1){ia=142;break}B=0;Ia(40,La|0,149177,1)|0;La=B;B=0;if(La&1){ia=142;break}B=0;wa(510,o|0,za|0);La=B;B=0;if(La&1){ia=142;break}B=0;ya(424,o|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Yua(o);Na=Ma;Oa=La;break}Yua(o);k[n>>2]=27468;k[xa>>2]=27488;k[za>>2]=27560;Yua(Fa);Ava(za);vva(xa);La=q+56|0;Ma=q+4|0;k[q>>2]=27524;k[La>>2]=27544;B=0;wa(508,q+56|0,Ma|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Ra=Pa;vva(La);Qb(Ra|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[La>>2]=27488;B=0;va(448,Ma|0);Pa=B;B=0;do if(Pa&1){Ta=Rb()|0;Ua=Q;Va=Ta}else{k[Ma>>2]=27560;Ta=q+36|0;k[Ta>>2]=0;k[Ta+4>>2]=0;k[Ta+8>>2]=0;k[Ta+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(c);Yua(Ta);Ava(Ma);Ua=Ya;Va=Wa;break}Yua(c);B=0;Wa=Ia(40,q|0,69351,6)|0;Ya=B;B=0;do if(Ya&1)ia=145;else{B=0;Za=Sa(1,Wa|0,+(+p[a+32>>3]))|0;_a=B;B=0;if(_a&1){ia=145;break}B=0;Ia(40,Za|0,149177,1)|0;Za=B;B=0;if(Za&1){ia=145;break}B=0;wa(510,s|0,Ma|0);Za=B;B=0;if(Za&1){ia=145;break}B=0;ya(424,s|0)|0;Za=B;B=0;if(Za&1){Za=Rb()|0;_a=Q;Yua(s);$a=_a;ab=Za;break}Yua(s);k[q>>2]=27468;k[La>>2]=27488;k[Ma>>2]=27560;Yua(Ta);Ava(Ma);vva(La);Za=t+56|0;_a=t+4|0;k[t>>2]=27524;k[Za>>2]=27544;B=0;wa(508,t+56|0,_a|0);bb=B;B=0;if(bb&1){bb=Rb()|0;cb=Q;db=bb;vva(Za);Qb(db|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Za>>2]=27488;B=0;va(448,_a|0);bb=B;B=0;do if(bb&1){eb=Rb()|0;fb=Q;gb=eb}else{k[_a>>2]=27560;eb=t+36|0;k[eb>>2]=0;k[eb+4>>2]=0;k[eb+8>>2]=0;k[eb+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_a|0,c|0);hb=B;B=0;if(hb&1){hb=Rb()|0;ib=Q;Yua(c);Yua(eb);Ava(_a);fb=ib;gb=hb;break}Yua(c);B=0;hb=Ia(40,t|0,69358,6)|0;ib=B;B=0;do if(ib&1)ia=148;else{B=0;jb=Sa(1,hb|0,+(+p[a+40>>3]))|0;kb=B;B=0;if(kb&1){ia=148;break}B=0;Ia(40,jb|0,149177,1)|0;jb=B;B=0;if(jb&1){ia=148;break}B=0;wa(510,u|0,_a|0);jb=B;B=0;if(jb&1){ia=148;break}B=0;ya(424,u|0)|0;jb=B;B=0;if(jb&1){jb=Rb()|0;kb=Q;Yua(u);lb=kb;mb=jb;break}Yua(u);k[t>>2]=27468;k[Za>>2]=27488;k[_a>>2]=27560;Yua(eb);Ava(_a);vva(Za);jb=v+56|0;kb=v+4|0;k[v>>2]=27524;k[jb>>2]=27544;B=0;wa(508,v+56|0,kb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;ob=Q;pb=nb;vva(jb);Qb(pb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[jb>>2]=27488;B=0;va(448,kb|0);nb=B;B=0;do if(nb&1){qb=Rb()|0;rb=Q;sb=qb}else{k[kb>>2]=27560;qb=v+36|0;k[qb>>2]=0;k[qb+4>>2]=0;k[qb+8>>2]=0;k[qb+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,kb|0,c|0);tb=B;B=0;if(tb&1){tb=Rb()|0;ub=Q;Yua(c);Yua(qb);Ava(kb);rb=ub;sb=tb;break}Yua(c);B=0;tb=Ia(40,v|0,69365,10)|0;ub=B;B=0;do if(ub&1)ia=151;else{B=0;vb=Sa(1,tb|0,+(+p[a+72>>3]))|0;wb=B;B=0;if(wb&1){ia=151;break}B=0;Ia(40,vb|0,149177,1)|0;vb=B;B=0;if(vb&1){ia=151;break}B=0;wa(510,w|0,kb|0);vb=B;B=0;if(vb&1){ia=151;break}B=0;ya(424,w|0)|0;vb=B;B=0;if(vb&1){vb=Rb()|0;wb=Q;Yua(w);xb=wb;yb=vb;break}Yua(w);k[v>>2]=27468;k[jb>>2]=27488;k[kb>>2]=27560;Yua(qb);Ava(kb);vva(jb);vb=x+56|0;wb=x+4|0;k[x>>2]=27524;k[vb>>2]=27544;B=0;wa(508,x+56|0,wb|0);zb=B;B=0;if(zb&1){zb=Rb()|0;Ab=Q;Bb=zb;vva(vb);Qb(Bb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[vb>>2]=27488;B=0;va(448,wb|0);zb=B;B=0;do if(zb&1){Cb=Rb()|0;Db=Q;Eb=Cb}else{k[wb>>2]=27560;Cb=x+36|0;k[Cb>>2]=0;k[Cb+4>>2]=0;k[Cb+8>>2]=0;k[Cb+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,wb|0,c|0);Fb=B;B=0;if(Fb&1){Fb=Rb()|0;Gb=Q;Yua(c);Yua(Cb);Ava(wb);Db=Gb;Eb=Fb;break}Yua(c);B=0;Fb=Ia(40,x|0,69376,17)|0;Gb=B;B=0;do if(Gb&1)ia=154;else{B=0;Hb=Xa(242,Fb|0,k[a+80>>2]|0)|0;Ib=B;B=0;if(Ib&1){ia=154;break}B=0;Ia(40,Hb|0,149177,1)|0;Hb=B;B=0;if(Hb&1){ia=154;break}B=0;wa(510,y|0,wb|0);Hb=B;B=0;if(Hb&1){ia=154;break}B=0;ya(424,y|0)|0;Hb=B;B=0;if(Hb&1){Hb=Rb()|0;Ib=Q;Yua(y);Jb=Ib;Kb=Hb;break}Yua(y);k[x>>2]=27468;k[vb>>2]=27488;k[wb>>2]=27560;Yua(Cb);Ava(wb);vva(vb);Hb=z+56|0;Ib=z+4|0;k[z>>2]=27524;k[Hb>>2]=27544;B=0;wa(508,z+56|0,Ib|0);Lb=B;B=0;if(Lb&1){Lb=Rb()|0;Mb=Q;Nb=Lb;vva(Hb);Qb(Nb|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[Hb>>2]=27488;B=0;va(448,Ib|0);Lb=B;B=0;do if(Lb&1){Ob=Rb()|0;Pb=Q;Sb=Ob}else{k[Ib>>2]=27560;Ob=z+36|0;k[Ob>>2]=0;k[Ob+4>>2]=0;k[Ob+8>>2]=0;k[Ob+12>>2]=0;k[z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ib|0,c|0);Tb=B;B=0;if(Tb&1){Tb=Rb()|0;Ub=Q;Yua(c);Yua(Ob);Ava(Ib);Pb=Ub;Sb=Tb;break}Yua(c);B=0;Tb=Ia(40,z|0,69394,10)|0;Ub=B;B=0;do if(!(Ub&1)){B=0;Vb=Xa(247,Tb|0,(i[a+4>>0]|0)!=0|0)|0;Wb=B;B=0;if(Wb&1){ia=157;break}B=0;Ia(40,Vb|0,149177,1)|0;Vb=B;B=0;if(Vb&1){ia=157;break}B=0;wa(510,A|0,Ib|0);Vb=B;B=0;if(Vb&1){ia=157;break}B=0;ya(424,A|0)|0;Vb=B;B=0;if(Vb&1){Vb=Rb()|0;Wb=Q;Yua(A);Xb=Wb;Yb=Vb;break}else{Yua(A);k[z>>2]=27468;k[Hb>>2]=27488;k[Ib>>2]=27560;Yua(Ob);Ava(Ib);vva(Hb);r=b;return}}else ia=157;while(0);if((ia|0)==157){Tb=Rb()|0;Xb=Q;Yb=Tb}k[z>>2]=27468;k[Hb>>2]=27488;k[Ib>>2]=27560;Yua(Ob);Ava(Ib);vva(Hb);Zb=Xb;_b=Yb;Qb(_b|0)}while(0);Mb=Pb;Nb=Sb;vva(Hb);Qb(Nb|0)}while(0);if((ia|0)==154){Fb=Rb()|0;Jb=Q;Kb=Fb}k[x>>2]=27468;k[vb>>2]=27488;k[wb>>2]=27560;Yua(Cb);Ava(wb);vva(vb);Zb=Jb;_b=Kb;Qb(_b|0)}while(0);Ab=Db;Bb=Eb;vva(vb);Qb(Bb|0)}while(0);if((ia|0)==151){tb=Rb()|0;xb=Q;yb=tb}k[v>>2]=27468;k[jb>>2]=27488;k[kb>>2]=27560;Yua(qb);Ava(kb);vva(jb);Zb=xb;_b=yb;Qb(_b|0)}while(0);ob=rb;pb=sb;vva(jb);Qb(pb|0)}while(0);if((ia|0)==148){hb=Rb()|0;lb=Q;mb=hb}k[t>>2]=27468;k[Za>>2]=27488;k[_a>>2]=27560;Yua(eb);Ava(_a);vva(Za);Zb=lb;_b=mb;Qb(_b|0)}while(0);cb=fb;db=gb;vva(Za);Qb(db|0)}while(0);if((ia|0)==145){Wa=Rb()|0;$a=Q;ab=Wa}k[q>>2]=27468;k[La>>2]=27488;k[Ma>>2]=27560;Yua(Ta);Ava(Ma);vva(La);Zb=$a;_b=ab;Qb(_b|0)}while(0);Qa=Ua;Ra=Va;vva(La);Qb(Ra|0)}while(0);if((ia|0)==142){Ja=Rb()|0;Na=Q;Oa=Ja}k[n>>2]=27468;k[xa>>2]=27488;k[za>>2]=27560;Yua(Fa);Ava(za);vva(xa);Zb=Na;_b=Oa;Qb(_b|0)}while(0);Da=Ga;Ea=Ha;vva(xa);Qb(Ea|0)}while(0);if((ia|0)==139){ta=Rb()|0;Aa=Q;Ba=ta}k[l>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(qa);Ava(ka);vva(ja);Zb=Aa;_b=Ba;Qb(_b|0)}while(0);oa=ra;pa=sa;vva(ja);Qb(pa|0)}while(0);if((ia|0)==136){ga=Rb()|0;la=Q;ma=ga}k[h>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(da);Ava(Z);vva(Y);Zb=la;_b=ma;Qb(_b|0)}while(0);ba=ea;ca=fa;vva(Y);Qb(ca|0)}else ia=133;while(0);if((ia|0)==133){W=Rb()|0;_=Q;$=W}k[f>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);Zb=_;_b=$;Qb(_b|0)}while(0);R=U;S=V;vva(L);Qb(S|0)}else ia=130;while(0);if((ia|0)==130){K=Rb()|0;N=Q;O=K}k[d>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);Zb=N;_b=O;Qb(_b|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}function vo(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function wo(a){a=a|0;return k[a+12>>2]|0}function xo(a){a=a|0;return 627}function yo(a){a=a|0;var b=0,c=0,d=0;b=Qqa(88)|0;k[b>>2]=28824;c=b+4|0;d=a+4|0;a=c+80|0;do{k[c>>2]=k[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(a|0));return b|0}function zo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=115;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[d>>0]=i[a+4>>0]|0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;n=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+12|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+20|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+24|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+32|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+40|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+72|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+80|0;n=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+57;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;i[a+4>>0]=i[c>>0]|0;c=(k[b>>2]|0)+1|0;k[b>>2]=c;n=a+8|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+12|0;c=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+16|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+20|0;c=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;n=a+24|0;i[t>>0]=i[c>>0];i[t+1>>0]=i[c+1>>0];i[t+2>>0]=i[c+2>>0];i[t+3>>0]=i[c+3>>0];i[t+4>>0]=i[c+4>>0];i[t+5>>0]=i[c+5>>0];i[t+6>>0]=i[c+6>>0];i[t+7>>0]=i[c+7>>0];p[t>>3]=+p[t>>3];i[n>>0]=i[t>>0];i[n+1>>0]=i[t+1>>0];i[n+2>>0]=i[t+2>>0];i[n+3>>0]=i[t+3>>0];i[n+4>>0]=i[t+4>>0];i[n+5>>0]=i[t+5>>0];i[n+6>>0]=i[t+6>>0];i[n+7>>0]=i[t+7>>0];n=(k[b>>2]|0)+8|0;k[b>>2]=n;c=a+32|0;i[t>>0]=i[n>>0];i[t+1>>0]=i[n+1>>0];i[t+2>>0]=i[n+2>>0];i[t+3>>0]=i[n+3>>0];i[t+4>>0]=i[n+4>>0];i[t+5>>0]=i[n+5>>0];i[t+6>>0]=i[n+6>>0];i[t+7>>0]=i[n+7>>0];p[t>>3]=+p[t>>3];i[c>>0]=i[t>>0];i[c+1>>0]=i[t+1>>0];i[c+2>>0]=i[t+2>>0];i[c+3>>0]=i[t+3>>0];i[c+4>>0]=i[t+4>>0];i[c+5>>0]=i[t+5>>0];i[c+6>>0]=i[t+6>>0];i[c+7>>0]=i[t+7>>0];c=(k[b>>2]|0)+8|0;k[b>>2]=c;n=a+40|0;i[t>>0]=i[c>>0];i[t+1>>0]=i[c+1>>0];i[t+2>>0]=i[c+2>>0];i[t+3>>0]=i[c+3>>0];i[t+4>>0]=i[c+4>>0];i[t+5>>0]=i[c+5>>0];i[t+6>>0]=i[c+6>>0];i[t+7>>0]=i[c+7>>0];p[t>>3]=+p[t>>3];i[n>>0]=i[t>>0];i[n+1>>0]=i[t+1>>0];i[n+2>>0]=i[t+2>>0];i[n+3>>0]=i[t+3>>0];i[n+4>>0]=i[t+4>>0];i[n+5>>0]=i[t+5>>0];i[n+6>>0]=i[t+6>>0];i[n+7>>0]=i[t+7>>0];n=(k[b>>2]|0)+8|0;k[b>>2]=n;c=a+72|0;i[t>>0]=i[n>>0];i[t+1>>0]=i[n+1>>0];i[t+2>>0]=i[n+2>>0];i[t+3>>0]=i[n+3>>0];i[t+4>>0]=i[n+4>>0];i[t+5>>0]=i[n+5>>0];i[t+6>>0]=i[n+6>>0];i[t+7>>0]=i[n+7>>0];p[t>>3]=+p[t>>3];i[c>>0]=i[t>>0];i[c+1>>0]=i[t+1>>0];i[c+2>>0]=i[t+2>>0];i[c+3>>0]=i[t+3>>0];i[c+4>>0]=i[t+4>>0];i[c+5>>0]=i[t+5>>0];i[c+6>>0]=i[t+6>>0];i[c+7>>0]=i[t+7>>0];c=(k[b>>2]|0)+8|0;k[b>>2]=c;n=a+80|0;a=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[n>>0]=a;i[n+1>>0]=a>>8;i[n+2>>0]=a>>16;i[n+3>>0]=a>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;u=a;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){n=Rb()|0;v=Q;w=n}else{k[b>>2]=27560;n=g+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;d=Q;Yua(f);Yua(n);Ava(b);v=d;w=c;break}Yua(f);B=0;c=Ia(40,g|0,143951,43)|0;d=B;B=0;if(!(d&1)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,h|0,69405,65);d=B;B=0;do if(!(d&1)){B=0;eb(502,j|0,149525,8);q=B;B=0;if(q&1){q=Rb()|0;o=Q;Yua(h);x=o;y=q;break}B=0;wa(510,m|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;z=Q;A=q;C=1}else{B=0;ua(163,c|0,h|0,j|0,100,m|0);q=B;B=0;if(q&1)D=1;else{B=0;eb(503,c|0,1240,229);B=0;D=0}q=Rb()|0;o=Q;Yua(m);z=o;A=q;C=D}Yua(j);Yua(h);if(C){x=z;y=A}else{E=z;F=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(F|0)}}else{q=Rb()|0;x=Q;y=q}while(0);zb(c|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(F|0)}d=Rb()|0;E=Q;F=d;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(n);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function Ao(a){a=a|0;return k[a+80>>2]|0}function Bo(a){a=a|0;return k[a+16>>2]|0}function Co(a){a=a|0;return k[a+20>>2]|0}function Do(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+208|0;h=b+184|0;i=b;j=b+48|0;l=b+32|0;m=b+20|0;n=b+8|0;dO(e,i,358);switch(k[a+8>>2]|0){case 301:{e=a+32|0;o=+p[e>>3];q=k[a+20>>2]|0;s=+p[g+(q<<3)>>3];t=s+ +p[a+72>>3]*(+p[f+(q<<3)>>3]-s);s=+p[i>>3];p[e>>3]=t;if(!(k[c>>2]|0)){r=b;return}e=k[k[c+4>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,q,(t-o)/s,0);r=b;return}case 302:{q=a+40|0;s=+p[q>>3];e=k[a+20>>2]|0;o=+p[g+(e<<3)>>3];t=o+ +p[a+72>>3]*(+p[f+(e<<3)>>3]-o);o=+p[i>>3];p[q>>3]=t;if(!(k[d>>2]|0)){r=b;return}q=k[k[d+4>>2]>>2]|0;Jc[k[(k[q>>2]|0)+20>>2]&1](q,e,(t-s)/o,0);r=b;return}case 300:{r=b;return}default:{b=j+56|0;e=j+4|0;k[j>>2]=27524;k[b>>2]=27544;B=0;wa(508,j+56|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;u=Q;v=q;vva(b);Qb(v|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[b>>2]=27488;B=0;va(448,e|0);q=B;B=0;do if(q&1){d=Rb()|0;w=Q;x=d}else{k[e>>2]=27560;d=j+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[j+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,e|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;f=Q;Yua(h);Yua(d);Ava(e);w=f;x=i;break}Yua(h);B=0;i=Ia(40,j|0,143640,15)|0;f=B;B=0;if(!(f&1)?(B=0,Xa(239,i|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,l|0,69405,65);f=B;B=0;do if(!(f&1)){B=0;eb(502,m|0,69471,14);a=B;B=0;if(a&1){a=Rb()|0;g=Q;Yua(l);y=g;z=a;break}B=0;wa(510,n|0,e|0);a=B;B=0;if(a&1){a=Rb()|0;A=Q;C=a;D=1}else{B=0;ua(163,i|0,l|0,m|0,177,n|0);a=B;B=0;if(a&1)E=1;else{B=0;eb(503,i|0,1240,229);B=0;E=0}a=Rb()|0;g=Q;Yua(n);A=g;C=a;D=E}Yua(m);Yua(l);if(D){y=A;z=C}else{F=A;G=C;k[j>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(d);Ava(e);vva(b);Qb(G|0)}}else{a=Rb()|0;y=Q;z=a}while(0);zb(i|0);F=y;G=z;k[j>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(d);Ava(e);vva(b);Qb(G|0)}f=Rb()|0;F=Q;G=f;k[j>>2]=27468;k[b>>2]=27488;k[e>>2]=27560;Yua(d);Ava(e);vva(b);Qb(G|0)}while(0);u=w;v=x;vva(b);Qb(v|0)}}}function Eo(a,b){a=a|0;b=b|0;var c=0;c=k[b>>2]|0;if(i[a+4>>0]|0)return;k[a+20>>2]=c;k[b>>2]=c+1;return}function Fo(a,b){a=a|0;b=b|0;var c=0;if(i[a+4>>0]|0)return;c=a+20|0;k[c>>2]=(k[c>>2]|0)+b;return}function Go(a,b){a=a|0;b=b|0;if(i[a+4>>0]|0)return;k[b+(k[a+16>>2]<<2)>>2]=k[a+20>>2];return}function Ho(a,b){a=a|0;b=b|0;if(!(i[a+4>>0]|0))return;k[a+20>>2]=k[b+(k[a+16>>2]<<2)>>2];return}function Io(a,b){a=a|0;b=b|0;var c=0;c=vY()|0;i[a+4>>0]=(k[b+(k[a+16>>2]<<2)>>2]|0)!=(c|0)&1;return}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(i[a+4>>0]|0)return;f=a+16|0;g=k[f>>2]|0;h=(k[b>>2]|0)==0;if(e){if(!h){e=k[k[b+4>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,g,+p[a+48>>3],0)}if(k[c>>2]|0){e=k[k[c+4>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,k[f>>2]|0,+p[a+56>>3],0)}if(!(k[d>>2]|0))return;e=k[k[d+4>>2]>>2]|0;Jc[k[(k[e>>2]|0)+20>>2]&1](e,k[f>>2]|0,+p[a+64>>3],0);return}else{if(!h){h=k[k[b+4>>2]>>2]|0;Jc[k[(k[h>>2]|0)+20>>2]&1](h,g,+p[a+24>>3],0)}if(k[c>>2]|0){g=k[k[c+4>>2]>>2]|0;Jc[k[(k[g>>2]|0)+20>>2]&1](g,k[f>>2]|0,+p[a+32>>3],0)}if(!(k[d>>2]|0))return;g=k[k[d+4>>2]>>2]|0;Jc[k[(k[g>>2]|0)+20>>2]&1](g,k[f>>2]|0,+p[a+40>>3],0);return}}function Ko(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;e=(c|0)>0;if(d){if(e)f=0;else return;do{d=k[b+(f<<2)>>2]|0;g=f*3|0;p[a+(g<<3)>>3]=+p[d+48>>3];p[a+(g+1<<3)>>3]=+p[d+56>>3];p[a+(g+2<<3)>>3]=+p[d+64>>3];f=f+1|0}while((f|0)!=(c|0));return}else{if(e)h=0;else return;do{e=k[b+(h<<2)>>2]|0;f=h*3|0;p[a+(f<<3)>>3]=+p[e+24>>3];p[a+(f+1<<3)>>3]=+p[e+32>>3];p[a+(f+2<<3)>>3]=+p[e+40>>3];h=h+1|0}while((h|0)!=(c|0));return}}function Lo(a){a=a|0;gh(a);k[a+12>>2]=553;return}function Mo(a){a=a|0;jh(a);return}function No(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=r;r=r+16|0;d=c;e=c+4|0;k[d>>2]=0;lO(b,d,951);bO(b,e,326);if((th(a)|0)>0)f=0;else{r=c;return}do{b=qh(a,f)|0;nd[k[(k[b>>2]|0)+32>>2]&1023](b,k[d>>2]|0,(i[e>>0]|0)!=0);f=f+1|0}while((f|0)<(th(a)|0));r=c;return}function Oo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if((th(a)|0)<=0){ih(a,b)|0;return 1}c=0;while(1){d=qh(a,c)|0;e=Hc[k[(k[d>>2]|0)+40>>2]&511](d)|0;if((e|0)==(Hc[k[(k[b>>2]|0)+40>>2]&511](b)|0)){e=Hc[k[(k[d>>2]|0)+36>>2]&511](d)|0;f=Hc[k[(k[b>>2]|0)+36>>2]&511](b)|0;if(!(Ita(f,e)|0)){g=d;h=e;i=f;break}if(e)Tqa(e);if(f)Tqa(f)}c=c+1|0;if((c|0)>=(th(a)|0)){j=14;break}}if((j|0)==14){ih(a,b)|0;return 1}mh(a,g)|0;if(h)Tqa(h);if(!i){ih(a,b)|0;return 1}Tqa(i);ih(a,b)|0;return 1}function Po(a){a=a|0;var b=0;k[a>>2]=28864;k[a+4>>2]=29420;k[a+8>>2]=-1;k[a+12>>2]=-1;b=a+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;k[b+24>>2]=0;return}function Qo(a){a=a|0;var b=0,c=0;k[a>>2]=28864;k[a+4>>2]=29420;b=a+40|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+16>>2]|0;if(!b)return;jC(b);Sqa(b);return}function Ro(a){a=a|0;var b=0,c=0;k[a>>2]=28864;k[a+4>>2]=29420;b=a+40|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+16>>2]|0;if(!b){Sqa(a);return}jC(b);Sqa(b);Sqa(a);return}function So(a,b){a=a|0;b=b|0;mC(k[a+16>>2]|0,b)|0;return}function To(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0;b=r;r=r+96|0;c=b+80|0;d=b+72|0;e=b+64|0;f=b+56|0;g=b+48|0;h=b+40|0;i=b+32|0;j=b+24|0;l=b+16|0;m=b+8|0;n=b;o=b+92|0;q=b+88|0;s=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;t=s*3|0;u=Rqa(t>>>0>536870911?-1:t<<3)|0;Ko(u,k[a+24>>2]|0,s,0);Vo(a);s=a+36|0;cO(k[s>>2]|0,o,299);dO(k[s>>2]|0,i,236);dO(k[s>>2]|0,j,235);t=a+16|0;v=oC(k[t>>2]|0,725)|0;w=oC(k[t>>2]|0,728)|0;x=oC(k[t>>2]|0,726)|0;if((k[o>>2]|0)==3){y=oC(k[t>>2]|0,727)|0;z=oC(k[t>>2]|0,729)|0;A=y;B=z;C=oC(k[t>>2]|0,730)|0}else{A=0;B=0;C=0}z=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;y=Rqa(z>>>0>536870911?-1:z<<3)|0;D=oC(k[t>>2]|0,217)|0;cO(k[s>>2]|0,q,298);s=k[t>>2]|0;if((k[q>>2]|0)==300){E=oC(s,227)|0;F=oC(k[t>>2]|0,215)|0;G=E}else{E=oC(s,225)|0;F=oC(k[t>>2]|0,214)|0;G=E}E=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((z|0)>0){t=0;do{s=k[(k[E>>2]|0)+32>>2]|0;H=Hc[k[(k[a>>2]|0)+128>>2]&511](a)|0;nd[s&1023](E,H,t);nd[k[(k[v>>2]|0)+48>>2]&1023](v,c,E);nd[k[(k[w>>2]|0)+48>>2]&1023](w,e,E);nd[k[(k[x>>2]|0)+48>>2]&1023](x,d,E);if((k[o>>2]|0)==3){nd[k[(k[A>>2]|0)+48>>2]&1023](A,f,E);nd[k[(k[B>>2]|0)+48>>2]&1023](B,g,E);nd[k[(k[C>>2]|0)+48>>2]&1023](C,h,E);I=+p[f>>3];J=+p[g>>3]}else{p[f>>3]=0.0;p[g>>3]=0.0;p[h>>3]=0.0;I=0.0;J=0.0}K=+p[c>>3];L=+p[e>>3];M=+p[d>>3];N=+aa(+(K*L+(K*K+L*L+M*M+I*I+J*J)+1.0e-54));nd[k[(k[F>>2]|0)+48>>2]&1023](F,l,E);nd[k[(k[D>>2]|0)+48>>2]&1023](D,n,E);nd[k[(k[G>>2]|0)+48>>2]&1023](G,m,E);M=+p[n>>3];L=+ba(+(+p[j>>3]/+p[l>>3]),+M);do if(N>L){K=+ba(+(L/N),+(1.0/M));O=1.0-K*+ja(+(-(N-L)/(L*(+p[i>>3]+-1.0))));K=+p[m>>3];H=y+(t<<3)|0;if(O>K){p[H>>3]=O;break}else{p[H>>3]=K;break}}else p[y+(t<<3)>>3]=+p[m>>3];while(0);t=t+1|0}while((t|0)!=(z|0))}z=k[a>>2]|0;t=k[z+48>>2]|0;m=Hc[k[z+128>>2]&511](a)|0;rd[t&511](a,245,y,m);m=(k[q>>2]|0)==300;q=k[a>>2]|0;t=k[q+48>>2]|0;z=Hc[k[q+128>>2]&511](a)|0;if(m)rd[t&511](a,227,y,z);else rd[t&511](a,225,y,z);Tqa(u);Tqa(y);if(!E){r=b;return}Ec[k[(k[E>>2]|0)+4>>2]&1023](E);r=b;return}function Uo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;d=c*3|0;e=Rqa(d>>>0>536870911?-1:d<<3)|0;Ko(e,k[a+24>>2]|0,c,0);k[b>>2]=e;return}function Vo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0;b=r;r=r+64|0;c=b+48|0;d=b;e=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;f=e*3|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;Ko(g,k[a+24>>2]|0,e,0);cO(k[a+36>>2]|0,c,299);e=a+16|0;f=oC(k[e>>2]|0,674)|0;h=oC(k[e>>2]|0,677)|0;if((k[c>>2]|0)==3)i=oC(k[e>>2]|0,679)|0;else i=0;e=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;j=e>>>0>536870911?-1:e<<3;l=Rqa(j)|0;m=Rqa(j)|0;n=Rqa(j)|0;o=Rqa(j)|0;q=Rqa(j)|0;s=Rqa(j)|0;t=Rqa(j)|0;j=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((e|0)>0){u=d+8|0;v=d+16|0;w=d+24|0;x=d+32|0;y=d+40|0;z=0;do{Fc[k[(k[j>>2]|0)+28>>2]&1023](j,z);if((k[c>>2]|0)==2)Xo(0,d,g,j,f,h);else Yo(0,d,g,j,f,h,i);A=(k[c>>2]|0)==2;B=+p[d>>3];p[l+(z<<3)>>3]=B;C=+p[u>>3];p[m+(z<<3)>>3]=C;D=+p[v>>3];if(A){E=+aa(+(B*B+C*C+D*(D*2.0)))*.7071067811865475;F=D}else{p[n+(z<<3)>>3]=D;D=+p[w>>3];G=+p[x>>3];p[q+(z<<3)>>3]=G;H=+p[y>>3];p[s+(z<<3)>>3]=H;E=+aa(+(B*C+(B*B+C*C+D*D+G*G+H*H)));F=D}p[o+(z<<3)>>3]=F;p[t+(z<<3)>>3]=E;z=z+1|0}while((z|0)!=(e|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,725,l,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,726,o,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,727,q,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,728,m,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,729,s,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,730,n,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,264,t,738);if(!j){Tqa(g);Tqa(l);Tqa(m);Tqa(n);Tqa(o);Tqa(q);Tqa(s);Tqa(t);r=b;return}Ec[k[(k[j>>2]|0)+4>>2]&1023](j);Tqa(g);Tqa(l);Tqa(m);Tqa(n);Tqa(o);Tqa(q);Tqa(s);Tqa(t);r=b;return}function Wo(a,b){a=a|0;b=b|0;return oC(k[a+16>>2]|0,b)|0}function Xo(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+240|0;g=a+224|0;h=a+24|0;i=a;j=a+88|0;l=a+72|0;m=a+60|0;n=a+48|0;if((e|0)!=0&(f|0)!=0){rd[k[(k[e>>2]|0)+60>>2]&511](e,h,c,d);rd[k[(k[f>>2]|0)+60>>2]&511](f,i,c,d);p[b>>3]=+p[h>>3];p[b+8>>3]=+p[i+8>>3];p[b+16>>3]=(+p[h+8>>3]+ +p[i>>3])*.5;r=a;return}a=j+56|0;i=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,i|0);h=B;B=0;if(h&1){h=Rb()|0;o=Q;q=h;vva(a);Qb(q|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);h=B;B=0;do if(h&1){b=Rb()|0;s=Q;t=b}else{k[i>>2]=27560;b=j+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[j+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,i|0,g|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(g);Yua(b);Ava(i);s=c;t=d;break}Yua(g);B=0;d=Ia(40,j|0,69495,59)|0;c=B;B=0;if(((((!(c&1)?(B=0,c=Xa(245,d|0,e|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,c|0,69555,6)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(245,d|0,f|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,c|0,149177,1)|0,c=B,B=0,!(c&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,l|0,69562,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,m|0,69638,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(l);w=v;x=u;break}B=0;wa(510,n|0,i|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,d|0,l|0,m|0,2634,n|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,d|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(n);y=v;z=u;A=C}Yua(m);Yua(l);if(A){w=y;x=z}else{D=y;E=z;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(b);Ava(i);vva(a);Qb(E|0)}}else{u=Rb()|0;w=Q;x=u}while(0);zb(d|0);D=w;E=x;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(b);Ava(i);vva(a);Qb(E|0)}c=Rb()|0;D=Q;E=c;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(b);Ava(i);vva(a);Qb(E|0)}while(0);o=s;q=t;vva(a);Qb(q|0)}function Yo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+272|0;h=a+248|0;i=a+48|0;j=a+24|0;l=a;m=a+112|0;n=a+96|0;o=a+84|0;q=a+72|0;if((e|0)!=0&(f|0)!=0&(g|0)!=0){rd[k[(k[e>>2]|0)+60>>2]&511](e,i,c,d);rd[k[(k[f>>2]|0)+60>>2]&511](f,j,c,d);rd[k[(k[g>>2]|0)+60>>2]&511](g,l,c,d);p[b>>3]=+p[i>>3];p[b+8>>3]=+p[j+8>>3];p[b+16>>3]=+p[l+16>>3];p[b+24>>3]=(+p[i+8>>3]+ +p[j>>3])*.5;p[b+32>>3]=(+p[i+16>>3]+ +p[l>>3])*.5;p[b+40>>3]=(+p[j+16>>3]+ +p[l+8>>3])*.5;r=a;return}a=m+56|0;l=m+4|0;k[m>>2]=27524;k[a>>2]=27544;B=0;wa(508,m+56|0,l|0);j=B;B=0;if(j&1){j=Rb()|0;s=Q;t=j;vva(a);Qb(t|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[a>>2]=27488;B=0;va(448,l|0);j=B;B=0;do if(j&1){b=Rb()|0;u=Q;v=b}else{k[l>>2]=27560;b=m+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[m+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,l|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;d=Q;Yua(h);Yua(b);Ava(l);u=d;v=i;break}Yua(h);B=0;i=Ia(40,m|0,69495,59)|0;d=B;B=0;if(((((((!(d&1)?(B=0,d=Xa(245,i|0,e|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,d|0,69555,6)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Xa(245,i|0,f|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,d|0,69652,6)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Xa(245,i|0,g|0)|0,i=B,B=0,!(i&1)):0)?(B=0,i=Ia(40,d|0,149177,1)|0,d=B,B=0,!(d&1)):0)?(B=0,Xa(239,i|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,n|0,69562,75);d=B;B=0;do if(!(d&1)){B=0;eb(502,o|0,69659,12);c=B;B=0;if(c&1){c=Rb()|0;w=Q;Yua(n);x=c;y=w;break}B=0;wa(510,q|0,l|0);w=B;B=0;if(w&1){w=Rb()|0;z=Q;A=w;C=1}else{B=0;ua(163,i|0,n|0,o|0,2557,q|0);w=B;B=0;if(w&1)D=1;else{B=0;eb(503,i|0,1240,229);B=0;D=0}w=Rb()|0;c=Q;Yua(q);z=c;A=w;C=D}Yua(o);Yua(n);if(C){x=A;y=z}else{E=A;F=z;k[m>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(a);Qb(E|0)}}else{w=Rb()|0;x=w;y=Q}while(0);zb(i|0);E=x;F=y;k[m>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(a);Qb(E|0)}d=Rb()|0;E=d;F=Q;k[m>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(b);Ava(l);vva(a);Qb(E|0)}while(0);s=u;t=v;vva(a);Qb(t|0)}function Zo(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0;b=r;r=r+144|0;c=b+128|0;d=b+120|0;e=b+112|0;f=b+88|0;g=b+64|0;h=b+40|0;i=b+16|0;j=b+8|0;l=b;m=b+136|0;n=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;o=n*3|0;q=Rqa(o>>>0>536870911?-1:o<<3)|0;Ko(q,k[a+24>>2]|0,n,0);cO(k[a+36>>2]|0,m,299);n=a+16|0;o=oC(k[n>>2]|0,674)|0;s=oC(k[n>>2]|0,677)|0;if((k[m>>2]|0)==3)t=oC(k[n>>2]|0,679)|0;else t=0;n=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;u=n>>>0>536870911?-1:n<<3;v=Rqa(u)|0;w=Rqa(u)|0;x=Rqa(u)|0;y=Rqa(u)|0;z=Rqa(u)|0;A=Rqa(u)|0;B=Rqa(u)|0;u=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((n|0)>0){C=i+8|0;D=i+16|0;E=h+8|0;F=g+16|0;G=f+16|0;H=f+8|0;I=g+8|0;J=h+16|0;K=0;do{Fc[k[(k[u>>2]|0)+28>>2]&1023](u,K);nd[k[(k[o>>2]|0)+48>>2]&1023](o,c,u);rd[k[(k[o>>2]|0)+60>>2]&511](o,f,q,u);nd[k[(k[s>>2]|0)+48>>2]&1023](s,d,u);rd[k[(k[s>>2]|0)+60>>2]&511](s,g,q,u);if((k[m>>2]|0)==3){nd[k[(k[t>>2]|0)+48>>2]&1023](t,e,u);rd[k[(k[t>>2]|0)+60>>2]&511](t,h,q,u);L=+p[e>>3]}else{p[e>>3]=0.0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;k[h+20>>2]=0;L=0.0}M=+p[c>>3];N=+p[d>>3];O=+aa(+(M*M+N*N+L*L));if(O<1.0e-12){k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[i+16>>2]=0;k[i+20>>2]=0;P=1.0e-12}else{Q=1.0/(+aa(+O)*2.0);R=M*2.0;S=N*2.0;T=L*2.0;p[i>>3]=Q*(R*+p[f>>3]+S*+p[g>>3]+T*+p[h>>3]);p[C>>3]=Q*(R*+p[H>>3]+S*+p[I>>3]+T*+p[E>>3]);p[D>>3]=Q*(R*+p[G>>3]+S*+p[F>>3]+T*+p[J>>3]);P=O}_Y(j,l,M,N,L,P,f,g,h,i);N=+aZ(+p[j>>3],+p[l>>3]);p[v+(K<<3)>>3]=N;N=+p[E>>3]-+p[F>>3];p[w+(K<<3)>>3]=N;M=+p[G>>3]-+p[h>>3];p[x+(K<<3)>>3]=M;O=+p[g>>3]-+p[H>>3];p[y+(K<<3)>>3]=O;T=+p[C>>3];S=+p[e>>3];R=+p[D>>3];Q=+p[d>>3];p[z+(K<<3)>>3]=(T*S-R*Q)*2.0/P-N;N=+p[c>>3];U=+p[i>>3];p[A+(K<<3)>>3]=(R*N-U*S)*2.0/P-M;p[B+(K<<3)>>3]=(U*Q-T*N)*2.0/P-O;K=K+1|0}while((K|0)!=(n|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,723,v,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,790,w,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,791,x,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,792,y,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,800,z,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,801,A,738);rd[k[(k[a>>2]|0)+48>>2]&511](a,802,B,738);if(!u){Tqa(q);Tqa(v);r=b;return}Ec[k[(k[u>>2]|0)+4>>2]&1023](u);Tqa(q);Tqa(v);r=b;return}function _o(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0;a=r;r=r+432|0;f=a+416|0;g=a;h=a+280|0;i=a+268|0;j=a+256|0;l=a+108|0;m=a+120|0;n=a+96|0;o=a+84|0;q=a+72|0;s=(d|0)>0;a:do if(s){t=0;u=0;b:while(1){v=e+(t<<2)|0;switch(k[v>>2]|0){case 653:{w=u+1|0;break}case 971:{w=u+2|0;break}case 972:{w=u+3|0;break}default:{x=v;break b}}t=t+1|0;if((t|0)>=(d|0)){y=w;break a}else u=w}u=h+56|0;t=h+4|0;k[h>>2]=27524;k[u>>2]=27544;B=0;wa(508,h+56|0,t|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;vva(u);Qb(A|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[u>>2]=27488;B=0;va(448,t|0);v=B;B=0;do if(v&1){C=Rb()|0;D=Q;E=C}else{k[t>>2]=27560;C=h+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(f);Yua(C);Ava(t);D=G;E=F;break}Yua(f);B=0;F=Ia(40,h|0,69672,18)|0;G=B;B=0;c:do if((((!(G&1)?(B=0,H=ya(427,k[x>>2]|0)|0,I=B,B=0,!(I&1)):0)?(I=Lta(H)|0,B=0,J=Ia(40,F|0,H|0,I|0)|0,I=B,B=0,!(I&1)):0)?(B=0,I=Ia(40,J|0,146481,18)|0,J=B,B=0,!(J&1)):0)?(B=0,Xa(239,I|0,0)|0,I=B,B=0,!(I&1)):0){I=Ab(20)|0;B=0;eb(502,i|0,69562,75);J=B;B=0;do if(!(J&1)){B=0;eb(502,j|0,69691,25);H=B;B=0;if(H&1){H=Rb()|0;K=Q;Yua(i);L=H;M=K;break}B=0;wa(510,l|0,t|0);K=B;B=0;if(K&1){K=Rb()|0;N=Q;O=K;P=1}else{B=0;ua(163,I|0,i|0,j|0,328,l|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,I|0,1240,229);B=0;R=0}K=Rb()|0;H=Q;Yua(l);N=H;O=K;P=R}Yua(j);Yua(i);if(P){L=O;M=N}else{S=O;T=N;break c}}else{K=Rb()|0;L=K;M=Q}while(0);zb(I|0);S=L;T=M}else U=24;while(0);if((U|0)==24){F=Rb()|0;S=F;T=Q}k[h>>2]=27468;k[u>>2]=27488;k[t>>2]=27560;Yua(C);Ava(t);vva(u);V=T;W=S;Qb(W|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else y=0;while(0);A=ma(y,y)|0;E=Rqa(A>>>0>536870911?-1:A<<3)|0;if(A)WEa(E|0,0,((A|0)>1?A:1)<<3|0)|0;if(!s){k[b>>2]=E;r=a;return}s=g+24|0;A=g+8|0;D=g+16|0;z=g+32|0;S=g+40|0;T=g+48|0;h=g+56|0;M=g+64|0;L=0;N=0;d:while(1){Sn(k[c+(N<<2)>>2]|0,g);O=e+(N<<2)|0;switch(k[O>>2]|0){case 653:{P=E+((ma(L,y)|0)+L<<3)|0;p[P>>3]=1.0;X=L+1|0;break}case 971:{Y=+p[g>>3];Z=+p[s>>3];_=+aa(+(Y*Y+Z*Z));$=Y/_;P=(ma(L,y)|0)+L|0;p[E+(P<<3)>>3]=$;p[E+(P+1<<3)>>3]=-Z/_;P=(ma(L+1|0,y)|0)+L|0;p[E+(P<<3)>>3]=Z/_;p[E+(P+1<<3)>>3]=$;X=L+2|0;break}case 972:{P=(ma(L,y)|0)+L|0;p[E+(P<<3)>>3]=+p[g>>3];p[E+(P+1<<3)>>3]=+p[A>>3];p[E+(P+2<<3)>>3]=+p[D>>3];P=(ma(L+1|0,y)|0)+L|0;p[E+(P<<3)>>3]=+p[s>>3];p[E+(P+1<<3)>>3]=+p[z>>3];p[E+(P+2<<3)>>3]=+p[S>>3];P=(ma(L+2|0,y)|0)+L|0;p[E+(P<<3)>>3]=+p[T>>3];p[E+(P+1<<3)>>3]=+p[h>>3];p[E+(P+2<<3)>>3]=+p[M>>3];X=L+3|0;break}default:{ba=O;break d}}N=N+1|0;if((N|0)>=(d|0)){U=68;break}else L=X}if((U|0)==68){k[b>>2]=E;r=a;return}a=m+56|0;E=m+4|0;k[m>>2]=27524;k[a>>2]=27544;B=0;wa(508,m+56|0,E|0);b=B;B=0;if(b&1){b=Rb()|0;ca=Q;da=b;vva(a);Qb(da|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[a>>2]=27488;B=0;va(448,E|0);b=B;B=0;do if(b&1){X=Rb()|0;ea=Q;fa=X}else{k[E>>2]=27560;X=m+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[m+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,E|0,f|0);L=B;B=0;if(L&1){L=Rb()|0;d=Q;Yua(f);Yua(X);Ava(E);ea=d;fa=L;break}Yua(f);B=0;L=Ia(40,m|0,69672,18)|0;d=B;B=0;e:do if((((!(d&1)?(B=0,N=ya(427,k[ba>>2]|0)|0,M=B,B=0,!(M&1)):0)?(M=Lta(N)|0,B=0,h=Ia(40,L|0,N|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,M=Ia(40,h|0,146481,18)|0,h=B,B=0,!(h&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,n|0,69562,75);h=B;B=0;do if(!(h&1)){B=0;eb(502,o|0,69691,25);N=B;B=0;if(N&1){N=Rb()|0;T=Q;Yua(n);ga=N;ha=T;break}B=0;wa(510,q|0,E|0);T=B;B=0;if(T&1){T=Rb()|0;ia=1;ja=Q;ka=T}else{B=0;ua(163,M|0,n|0,o|0,377,q|0);T=B;B=0;if(T&1)la=1;else{B=0;eb(503,M|0,1240,229);B=0;la=0}T=Rb()|0;N=Q;Yua(q);ia=la;ja=N;ka=T}Yua(o);Yua(n);if(ia){ga=ka;ha=ja}else{na=ja;oa=ka;break e}}else{T=Rb()|0;ga=T;ha=Q}while(0);zb(M|0);na=ha;oa=ga}else U=59;while(0);if((U|0)==59){L=Rb()|0;na=Q;oa=L}k[m>>2]=27468;k[a>>2]=27488;k[E>>2]=27560;Yua(X);Ava(E);vva(a);V=na;W=oa;Qb(W|0)}while(0);ca=ea;da=fa;vva(a);Qb(da|0)}function $o(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0;b=r;r=r+1664|0;c=b+1652|0;d=b+1456|0;e=b+1640|0;f=b+1320|0;g=b+1628|0;h=b+1168|0;i=b+1616|0;j=b+1032|0;l=b+1604|0;m=b+880|0;n=b+1592|0;o=b+728|0;p=b+1304|0;q=b+592|0;s=b+1016|0;t=b+440|0;u=b+864|0;v=b+304|0;w=b+576|0;x=b+168|0;y=b+152|0;z=b+16|0;A=b;C=d+56|0;D=d+4|0;k[d>>2]=27524;k[C>>2]=27544;B=0;wa(508,d+56|0,D|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(C);Qb(G|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[D>>2]=27560;H=d+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(D);I=L;J=K;break}Yua(c);B=0;K=ya(k[(k[a>>2]|0)+20>>2]|0,a|0)|0;L=B;B=0;do if((((!(L&1)?(B=0,M=ya(427,K|0)|0,N=B,B=0,!(N&1)):0)?(N=Lta(M)|0,B=0,O=Ia(40,d|0,M|0,N|0)|0,N=B,B=0,!(N&1)):0)?(B=0,Ia(40,O|0,69717,10)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,e|0,D|0),O=B,B=0,!(O&1)):0){B=0;ya(424,e|0)|0;O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(e);P=O;R=N;break}Yua(e);k[d>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);N=f+56|0;O=f+4|0;k[f>>2]=27524;k[N>>2]=27544;B=0;wa(508,f+56|0,O|0);M=B;B=0;if(M&1){M=Rb()|0;S=Q;T=M;vva(N);Qb(T|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);M=B;B=0;do if(M&1){U=Rb()|0;V=Q;W=U}else{k[O>>2]=27560;U=f+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,O|0,c|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(c);Yua(U);Ava(O);V=Y;W=X;break}Yua(c);B=0;X=Ia(40,f|0,69728,8)|0;Y=B;B=0;do if(((!(Y&1)?(B=0,Z=Xa(242,X|0,k[a+8>>2]|0)|0,_=B,B=0,!(_&1)):0)?(B=0,Ia(40,Z|0,149177,1)|0,Z=B,B=0,!(Z&1)):0)?(B=0,wa(510,g|0,O|0),Z=B,B=0,!(Z&1)):0){B=0;ya(424,g|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(g);$=Z;aa=_;break}Yua(g);k[f>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(U);Ava(O);vva(N);_=h+56|0;Z=h+4|0;k[h>>2]=27524;k[_>>2]=27544;B=0;wa(508,h+56|0,Z|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(_);Qb(da|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[_>>2]=27488;B=0;va(448,Z|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[Z>>2]=27560;ea=h+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Z|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(Z);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,h|0,79833,8)|0;ia=B;B=0;do if(ia&1)ja=49;else{B=0;ka=Xa(242,ha|0,k[a+12>>2]|0)|0;la=B;B=0;if(la&1){ja=49;break}B=0;Ia(40,ka|0,149177,1)|0;ka=B;B=0;if(ka&1){ja=49;break}B=0;wa(510,i|0,Z|0);ka=B;B=0;if(ka&1){ja=49;break}B=0;ya(424,i|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(i);ma=ka;na=la;break}Yua(i);k[h>>2]=27468;k[_>>2]=27488;k[Z>>2]=27560;Yua(ea);Ava(Z);vva(_);la=a+24|0;a:do if(!(k[la>>2]|0)){ka=j+56|0;oa=j+4|0;k[j>>2]=27524;k[ka>>2]=27544;B=0;wa(508,j+56|0,oa|0);pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;ra=pa;vva(ka);Qb(ra|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ka>>2]=27488;B=0;va(448,oa|0);pa=B;B=0;do if(pa&1){sa=Rb()|0;ta=Q;ua=sa}else{k[oa>>2]=27560;sa=j+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,oa|0,c|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(c);Yua(sa);Ava(oa);ta=za;ua=xa;break}Yua(c);B=0;Ia(40,j|0,69737,16)|0;xa=B;B=0;do if(!(xa&1)){B=0;wa(510,l|0,oa|0);za=B;B=0;if(za&1){ja=65;break}B=0;ya(424,l|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(l);Ba=za;Ca=Aa;break}else{Yua(l);k[j>>2]=27468;k[ka>>2]=27488;k[oa>>2]=27560;Yua(sa);Ava(oa);vva(ka);break a}}else ja=65;while(0);if((ja|0)==65){xa=Rb()|0;Ba=xa;Ca=Q}k[j>>2]=27468;k[ka>>2]=27488;k[oa>>2]=27560;Yua(sa);Ava(oa);vva(ka);Da=Ba;Ea=Ca;Qb(Da|0)}while(0);qa=ta;ra=ua;vva(ka);Qb(ra|0)}else{oa=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((oa|0)>0)Fa=0;else break;do{pa=k[(k[la>>2]|0)+(Fa<<2)>>2]|0;Ec[k[(k[pa>>2]|0)+8>>2]&1023](pa);Fa=Fa+1|0}while((Fa|0)!=(oa|0))}while(0);la=a+20|0;b:do if(!(k[la>>2]|0)){oa=m+56|0;ka=m+4|0;k[m>>2]=27524;k[oa>>2]=27544;B=0;wa(508,m+56|0,ka|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Ga=Q;Ha=pa;vva(oa);Qb(Ha|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[oa>>2]=27488;B=0;va(448,ka|0);pa=B;B=0;do if(pa&1){xa=Rb()|0;Ja=Q;Ka=xa}else{k[ka>>2]=27560;xa=m+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ka|0,c|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;za=Q;Yua(c);Yua(xa);Ava(ka);Ja=za;Ka=Aa;break}Yua(c);B=0;Ia(40,m|0,69754,13)|0;Aa=B;B=0;do if(!(Aa&1)){B=0;wa(510,n|0,ka|0);za=B;B=0;if(za&1){ja=83;break}B=0;ya(424,n|0)|0;za=B;B=0;if(za&1){za=Rb()|0;La=Q;Yua(n);Ma=za;Na=La;break}else{Yua(n);k[m>>2]=27468;k[oa>>2]=27488;k[ka>>2]=27560;Yua(xa);Ava(ka);vva(oa);break b}}else ja=83;while(0);if((ja|0)==83){Aa=Rb()|0;Ma=Aa;Na=Q}k[m>>2]=27468;k[oa>>2]=27488;k[ka>>2]=27560;Yua(xa);Ava(ka);vva(oa);Da=Ma;Ea=Na;Qb(Da|0)}while(0);Ga=Ja;Ha=Ka;vva(oa);Qb(Ha|0)}else{ka=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;if((ka|0)>0)Oa=0;else break;do{pa=k[(k[la>>2]|0)+(Oa<<2)>>2]|0;Ec[k[(k[pa>>2]|0)+12>>2]&1023](pa);Oa=Oa+1|0}while((Oa|0)!=(ka|0))}while(0);la=k[a+28>>2]|0;c:do if(!la){ka=o+56|0;oa=o+4|0;k[o>>2]=27524;k[ka>>2]=27544;B=0;wa(508,o+56|0,oa|0);pa=B;B=0;if(pa&1){pa=Rb()|0;Pa=Q;Qa=pa;vva(ka);Qb(Qa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[ka>>2]=27488;B=0;va(448,oa|0);pa=B;B=0;do if(pa&1){Aa=Rb()|0;Ra=Q;Sa=Aa}else{k[oa>>2]=27560;Aa=o+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,oa|0,c|0);sa=B;B=0;if(sa&1){sa=Rb()|0;La=Q;Yua(c);Yua(Aa);Ava(oa);Ra=La;Sa=sa;break}Yua(c);B=0;Ia(40,o|0,69768,16)|0;sa=B;B=0;do if(!(sa&1)){B=0;wa(510,p|0,oa|0);La=B;B=0;if(La&1){ja=100;break}B=0;ya(424,p|0)|0;La=B;B=0;if(La&1){La=Rb()|0;za=Q;Yua(p);Ta=La;Ua=za;break}else{Yua(p);k[o>>2]=27468;k[ka>>2]=27488;k[oa>>2]=27560;Yua(Aa);Ava(oa);vva(ka);break c}}else ja=100;while(0);if((ja|0)==100){sa=Rb()|0;Ta=sa;Ua=Q}k[o>>2]=27468;k[ka>>2]=27488;k[oa>>2]=27560;Yua(Aa);Ava(oa);vva(ka);Da=Ta;Ea=Ua;Qb(Da|0)}while(0);Pa=Ra;Qa=Sa;vva(ka);Qb(Qa|0)}else Ec[k[(k[la>>2]|0)+12>>2]&1023](la);while(0);la=k[a+32>>2]|0;d:do if(!la){oa=q+56|0;pa=q+4|0;k[q>>2]=27524;k[oa>>2]=27544;B=0;wa(508,q+56|0,pa|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Va=Q;Wa=sa;vva(oa);Qb(Wa|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[oa>>2]=27488;B=0;va(448,pa|0);sa=B;B=0;do if(sa&1){xa=Rb()|0;Ya=Q;Za=xa}else{k[pa>>2]=27560;xa=q+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pa|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;La=Q;Yua(c);Yua(xa);Ava(pa);Ya=La;Za=za;break}Yua(c);B=0;Ia(40,q|0,69785,14)|0;za=B;B=0;do if(!(za&1)){B=0;wa(510,s|0,pa|0);La=B;B=0;if(La&1){ja=117;break}B=0;ya(424,s|0)|0;La=B;B=0;if(La&1){La=Rb()|0;_a=Q;Yua(s);$a=La;ab=_a;break}else{Yua(s);k[q>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);break d}}else ja=117;while(0);if((ja|0)==117){za=Rb()|0;$a=za;ab=Q}k[q>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);Da=$a;Ea=ab;Qb(Da|0)}while(0);Va=Ya;Wa=Za;vva(oa);Qb(Wa|0)}else Ec[k[(k[la>>2]|0)+12>>2]&1023](la);while(0);la=t+56|0;pa=t+4|0;k[t>>2]=27524;k[la>>2]=27544;B=0;wa(508,t+56|0,pa|0);sa=B;B=0;if(sa&1){sa=Rb()|0;bb=Q;cb=sa;vva(la);Qb(cb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[la>>2]=27488;B=0;va(448,pa|0);sa=B;B=0;do if(sa&1){ka=Rb()|0;db=Q;eb=ka}else{k[pa>>2]=27560;ka=t+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pa|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(c);Yua(ka);Ava(pa);db=Aa;eb=za;break}Yua(c);B=0;Ia(40,t|0,144113,14)|0;za=B;B=0;do if(za&1)ja=133;else{B=0;wa(510,u|0,pa|0);Aa=B;B=0;if(Aa&1){ja=133;break}B=0;ya(424,u|0)|0;Aa=B;B=0;if(Aa&1){Aa=Rb()|0;_a=Q;Yua(u);fb=Aa;gb=_a;break}Yua(u);k[t>>2]=27468;k[la>>2]=27488;k[pa>>2]=27560;Yua(ka);Ava(pa);vva(la);_a=k[a+36>>2]|0;if(_a)$N(_a);_a=v+56|0;Aa=v+4|0;k[v>>2]=27524;k[_a>>2]=27544;B=0;wa(508,v+56|0,Aa|0);La=B;B=0;if(La&1){La=Rb()|0;hb=Q;ib=La;vva(_a);Qb(ib|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[_a>>2]=27488;B=0;va(448,Aa|0);La=B;B=0;do if(La&1){jb=Rb()|0;kb=Q;lb=jb}else{k[Aa>>2]=27560;jb=v+36|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Aa|0,c|0);mb=B;B=0;if(mb&1){mb=Rb()|0;nb=Q;Yua(c);Yua(jb);Ava(Aa);kb=nb;lb=mb;break}Yua(c);B=0;Ia(40,v|0,69800,18)|0;mb=B;B=0;do if(mb&1)ja=148;else{B=0;wa(510,w|0,Aa|0);nb=B;B=0;if(nb&1){ja=148;break}B=0;ya(424,w|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;ob=Q;Yua(w);pb=nb;qb=ob;break}Yua(w);k[v>>2]=27468;k[_a>>2]=27488;k[Aa>>2]=27560;Yua(jb);Ava(Aa);vva(_a);ob=x+56|0;nb=x+4|0;k[x>>2]=27524;k[ob>>2]=27544;B=0;wa(508,x+56|0,nb|0);rb=B;B=0;if(rb&1){rb=Rb()|0;sb=Q;tb=rb;vva(ob);Qb(tb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ob>>2]=27488;B=0;va(448,nb|0);rb=B;B=0;do if(rb&1){ub=Rb()|0;vb=Q;wb=ub}else{k[nb>>2]=27560;ub=x+36|0;k[ub>>2]=0;k[ub+4>>2]=0;k[ub+8>>2]=0;k[ub+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nb|0,c|0);xb=B;B=0;if(xb&1){xb=Rb()|0;yb=Q;Yua(c);Yua(ub);Ava(nb);vb=yb;wb=xb;break}Yua(c);B=0;Ia(40,x|0,69819,10)|0;xb=B;B=0;do if(xb&1)ja=163;else{B=0;wa(510,y|0,nb|0);yb=B;B=0;if(yb&1){ja=163;break}B=0;ya(424,y|0)|0;yb=B;B=0;if(yb&1){yb=Rb()|0;zb=Q;Yua(y);Ab=yb;Bb=zb;break}Yua(y);k[x>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(ub);Ava(nb);vva(ob);zb=k[a+16>>2]|0;if(zb){nh(zb);r=b;return}zb=z+56|0;yb=z+4|0;k[z>>2]=27524;k[zb>>2]=27544;B=0;wa(508,z+56|0,yb|0);Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Db=Q;Eb=Cb;vva(zb);Qb(Eb|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[zb>>2]=27488;B=0;va(448,yb|0);Cb=B;B=0;do if(Cb&1){Fb=Rb()|0;Gb=Q;Hb=Fb}else{k[yb>>2]=27560;Fb=z+36|0;k[Fb>>2]=0;k[Fb+4>>2]=0;k[Fb+8>>2]=0;k[Fb+12>>2]=0;k[z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,yb|0,c|0);Ib=B;B=0;if(Ib&1){Ib=Rb()|0;Jb=Q;Yua(c);Yua(Fb);Ava(yb);Gb=Jb;Hb=Ib;break}Yua(c);B=0;Ia(40,z|0,69830,12)|0;Ib=B;B=0;do if(Ib&1)ja=178;else{B=0;wa(510,A|0,yb|0);Jb=B;B=0;if(Jb&1){ja=178;break}B=0;ya(424,A|0)|0;Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Kb=Q;Yua(A);Lb=Jb;Mb=Kb;break}Yua(A);k[z>>2]=27468;k[zb>>2]=27488;k[yb>>2]=27560;Yua(Fb);Ava(yb);vva(zb);r=b;return}while(0);if((ja|0)==178){Ib=Rb()|0;Lb=Ib;Mb=Q}k[z>>2]=27468;k[zb>>2]=27488;k[yb>>2]=27560;Yua(Fb);Ava(yb);vva(zb);Da=Lb;Ea=Mb;Qb(Da|0)}while(0);Db=Gb;Eb=Hb;vva(zb);Qb(Eb|0)}while(0);if((ja|0)==163){xb=Rb()|0;Ab=xb;Bb=Q}k[x>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(ub);Ava(nb);vva(ob);Da=Ab;Ea=Bb;Qb(Da|0)}while(0);sb=vb;tb=wb;vva(ob);Qb(tb|0)}while(0);if((ja|0)==148){mb=Rb()|0;pb=mb;qb=Q}k[v>>2]=27468;k[_a>>2]=27488;k[Aa>>2]=27560;Yua(jb);Ava(Aa);vva(_a);Da=pb;Ea=qb;Qb(Da|0)}while(0);hb=kb;ib=lb;vva(_a);Qb(ib|0)}while(0);if((ja|0)==133){za=Rb()|0;fb=za;gb=Q}k[t>>2]=27468;k[la>>2]=27488;k[pa>>2]=27560;Yua(ka);Ava(pa);vva(la);Da=fb;Ea=gb;Qb(Da|0)}while(0);bb=db;cb=eb;vva(la);Qb(cb|0)}while(0);if((ja|0)==49){ha=Rb()|0;ma=ha;na=Q}k[h>>2]=27468;k[_>>2]=27488;k[Z>>2]=27560;Yua(ea);Ava(Z);vva(_);Da=ma;Ea=na;Qb(Da|0)}while(0);ca=fa;da=ga;vva(_);Qb(da|0)}else ja=46;while(0);if((ja|0)==46){X=Rb()|0;$=X;aa=Q}k[f>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(U);Ava(O);vva(N);Da=$;Ea=aa;Qb(Da|0)}while(0);S=V;T=W;vva(N);Qb(T|0)}else ja=43;while(0);if((ja|0)==43){K=Rb()|0;P=K;R=Q}k[d>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(H);Ava(D);vva(C);Da=P;Ea=R;Qb(Da|0)}while(0);F=I;G=J;vva(C);Qb(G|0)}function ap(a){a=a|0;var b=0;b=k[a+28>>2]|0;if(!b)return;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);return}function bp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0.0;b=r;r=r+96|0;c=b+80|0;d=b+72|0;e=b+48|0;f=b+24|0;g=b;cO(k[a+36>>2]|0,c,299);h=a+16|0;i=oC(k[h>>2]|0,674)|0;j=oC(k[h>>2]|0,677)|0;if((k[c>>2]|0)==3)l=oC(k[h>>2]|0,679)|0;else l=0;h=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;m=h*3|0;n=Rqa(m>>>0>536870911?-1:m<<3)|0;Ko(n,k[a+24>>2]|0,h,0);h=ed[k[(k[a>>2]|0)+308>>2]&511](a,5)|0;m=Hc[k[(k[h>>2]|0)+8>>2]&511](h)|0;if((m|0)>=(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0)){o=0.0;Tqa(n);q=k[h>>2]|0;s=q+4|0;t=k[s>>2]|0;Ec[t&1023](h);r=b;return +o}u=f+8|0;v=h+8|0;w=g+16|0;x=0.0;y=m;while(1){Fc[k[(k[h>>2]|0)+24>>2]&1023](h,y);rd[k[(k[a>>2]|0)+260>>2]&511](a,d,n,h);rd[k[(k[i>>2]|0)+60>>2]&511](i,e,n,h);rd[k[(k[j>>2]|0)+60>>2]&511](j,f,n,h);if((k[c>>2]|0)==2)z=(+p[e>>3]+ +p[u>>3])*+p[v>>3]*+p[d>>3];else{rd[k[(k[l>>2]|0)+60>>2]&511](l,g,n,h);z=(+p[e>>3]+ +p[u>>3]+ +p[w>>3])*+p[v>>3]*+p[d>>3]}A=x+z;y=y+1|0;if((y|0)>=(Hc[k[(k[h>>2]|0)+12>>2]&511](h)|0)){o=A;break}else x=A}Tqa(n);q=k[h>>2]|0;s=q+4|0;t=k[s>>2]|0;Ec[t&1023](h);r=b;return +o}function cp(a,b,c){a=a|0;b=b|0;c=c|0;cO(k[a+36>>2]|0,b,c);return}function dp(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0;h=r;r=r+64|0;i=h+56|0;j=h+16|0;l=h;if((c|0)==3){ep(0,j,d,e,f,g);m=+p[j>>3];n=+p[j+8>>3];o=+p[j+16>>3];q=+p[j+24>>3];s=+p[j+32>>3];t=+aa(+(m*n+(m*m+n*n+o*o+q*q+s*s)+1.0e-54))}else{fp(0,l,d,e,f,0);s=+p[l>>3];q=+p[l+8>>3];t=+aa(+(s*s+q*(q*2.0)+1.0e-54))*.7071067811865475}l=k[a+28>>2]|0;Xc[k[(k[l>>2]|0)+88>>2]&63](l,i,t);p[b>>3]=+p[i>>3];r=h;return}function ep(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+240|0;g=a+224|0;h=a+24|0;i=a;j=a+88|0;l=a+72|0;m=a+60|0;n=a+48|0;if((e|0)!=0&(f|0)!=0){rd[k[(k[e>>2]|0)+60>>2]&511](e,h,c,d);rd[k[(k[f>>2]|0)+60>>2]&511](f,i,c,d);p[b>>3]=+p[h>>3];p[b+8>>3]=+p[i+8>>3];p[b+16>>3]=(+p[h+8>>3]+ +p[i>>3])*.5;p[b+24>>3]=+p[h+16>>3]*.5;p[b+32>>3]=+p[i+16>>3]*.5;r=a;return}a=j+56|0;i=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,i|0);b=B;B=0;if(b&1){b=Rb()|0;o=Q;q=b;vva(a);Qb(q|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);b=B;B=0;do if(b&1){h=Rb()|0;s=Q;t=h}else{k[i>>2]=27560;h=j+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[j+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,i|0,g|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(g);Yua(h);Ava(i);s=c;t=d;break}Yua(g);B=0;d=Ia(40,j|0,69495,59)|0;c=B;B=0;if(((((!(c&1)?(B=0,c=Xa(245,d|0,e|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,c|0,69555,6)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Xa(245,d|0,f|0)|0,d=B,B=0,!(d&1)):0)?(B=0,d=Ia(40,c|0,149177,1)|0,c=B,B=0,!(c&1)):0)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,l|0,69562,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,m|0,69843,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(l);w=v;x=u;break}B=0;wa(510,n|0,i|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,d|0,l|0,m|0,2589,n|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,d|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(n);y=v;z=u;A=C}Yua(m);Yua(l);if(A){w=y;x=z}else{D=y;E=z;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(h);Ava(i);vva(a);Qb(E|0)}}else{u=Rb()|0;w=Q;x=u}while(0);zb(d|0);D=w;E=x;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(h);Ava(i);vva(a);Qb(E|0)}c=Rb()|0;D=Q;E=c;k[j>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(h);Ava(i);vva(a);Qb(E|0)}while(0);o=s;q=t;vva(a);Qb(q|0)}function fp(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;f=r;r=r+224|0;a=f+200|0;g=f;h=f+64|0;i=f+48|0;j=f+36|0;l=f+24|0;if(e){rd[k[(k[e>>2]|0)+60>>2]&511](e,g,c,d);p[b>>3]=+p[g>>3];p[b+8>>3]=+p[g+8>>3]*.5;r=f;return}f=h+56|0;g=h+4|0;k[h>>2]=27524;k[f>>2]=27544;B=0;wa(508,h+56|0,g|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(f);Qb(n|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);b=B;B=0;do if(b&1){d=Rb()|0;o=Q;q=d}else{k[g>>2]=27560;d=h+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[h+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;e=Q;Yua(a);Yua(d);Ava(g);o=e;q=c;break}Yua(a);B=0;c=Ia(40,h|0,69495,59)|0;e=B;B=0;if(((!(e&1)?(B=0,e=Xa(245,c|0,0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Ia(40,e|0,149177,1)|0,e=B,B=0,!(e&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,i|0,69562,75);e=B;B=0;do if(!(e&1)){B=0;eb(502,j|0,69856,22);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(i);u=t;v=s;break}B=0;wa(510,l|0,g|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,c|0,i|0,j|0,2617,l|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,c|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(l);w=t;x=s;y=z}Yua(j);Yua(i);if(y){u=w;v=x}else{A=w;C=x;k[h>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(f);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(c|0);A=u;C=v;k[h>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(f);Qb(C|0)}e=Rb()|0;A=Q;C=e;k[h>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(f);Qb(C|0)}while(0);m=o;n=q;vva(f);Qb(n|0)}function gp(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0;h=r;r=r+48|0;i=h+32|0;j=h+8|0;l=h;if((c|0)==2){Xo(0,j,d,e,f,g);m=+p[j>>3];n=+p[j+8>>3];o=+p[j+16>>3];q=m*n+(m*m+n*n+o*o)}else{hp(0,l,d,e,f);o=+p[l>>3];q=o*o*.5}o=+aa(+q);l=k[a+28>>2]|0;Xc[k[(k[l>>2]|0)+88>>2]&63](l,i,o);p[b>>3]=+p[i>>3];r=h;return}function hp(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;a=r;r=r+224|0;f=a+200|0;g=a;h=a+64|0;i=a+48|0;j=a+36|0;l=a+24|0;if(e){rd[k[(k[e>>2]|0)+60>>2]&511](e,g,c,d);p[b>>3]=+p[g>>3];r=a;return}a=h+56|0;g=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,g|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(a);Qb(n|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);b=B;B=0;do if(b&1){d=Rb()|0;o=Q;q=d}else{k[g>>2]=27560;d=h+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,g|0,f|0);c=B;B=0;if(c&1){c=Rb()|0;e=Q;Yua(f);Yua(d);Ava(g);o=e;q=c;break}Yua(f);B=0;c=Ia(40,h|0,69495,59)|0;e=B;B=0;if(((!(e&1)?(B=0,e=Xa(245,c|0,0)|0,c=B,B=0,!(c&1)):0)?(B=0,c=Ia(40,e|0,149177,1)|0,e=B,B=0,!(e&1)):0)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,i|0,69562,75);e=B;B=0;do if(!(e&1)){B=0;eb(502,j|0,69879,15);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(i);u=t;v=s;break}B=0;wa(510,l|0,g|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,c|0,i|0,j|0,2652,l|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,c|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(l);w=t;x=s;y=z}Yua(j);Yua(i);if(y){u=w;v=x}else{A=w;C=x;k[h>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(a);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(c|0);A=u;C=v;k[h>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(a);Qb(C|0)}e=Rb()|0;A=Q;C=e;k[h>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(d);Ava(g);vva(a);Qb(C|0)}while(0);m=o;n=q;vva(a);Qb(n|0)}function ip(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0;h=r;r=r+48|0;i=h+32|0;j=h+8|0;l=h;if((c|0)==2){Xo(0,j,d,e,f,g);m=+p[j>>3];n=+p[j+8>>3];o=+p[j+16>>3];q=m*n+(m*m+n*n+o*o)}else{hp(0,l,d,e,f);o=+p[l>>3];q=o*o*.5}o=+aa(+q);l=k[a+28>>2]|0;Xc[k[(k[l>>2]|0)+92>>2]&63](l,i,o);p[b>>3]=+p[i>>3];r=h;return}function jp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;b=r;r=r+608|0;c=b+592|0;d=b+64|0;e=b+56|0;f=b+48|0;g=b+40|0;h=b+32|0;i=b+24|0;j=b+16|0;l=b+8|0;m=b;n=b+432|0;o=b+580|0;q=b+568|0;s=b+280|0;t=b+296|0;u=b+132|0;v=b+120|0;w=b+108|0;x=b+144|0;y=b+96|0;z=b+84|0;A=b+72|0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}C=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;D=C*12|0;E=D>>>0>536870911?-1:D<<3;D=Rqa(E)|0;F=Rqa(E)|0;G=Rqa(E)|0;H=Rqa(E)|0;I=Rqa(E)|0;E=Rqa(C>>>0>536870911?-1:C<<3)|0;J=a+36|0;dO(k[J>>2]|0,j,767);dO(k[J>>2]|0,l,67);dO(k[J>>2]|0,m,355);K=+p[l>>3];L=K*+_(+(+p[j>>3]/K));M=a+16|0;N=oC(k[M>>2]|0,446)|0;O=oC(k[M>>2]|0,447)|0;P=oC(k[M>>2]|0,444)|0;R=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;S=(C|0)>0;if(S){T=0;do{K=+(T|0)/12.0;U=0;do{Fc[k[(k[R>>2]|0)+28>>2]&1023](R,U);V=(U*12|0)+T|0;md[k[(k[N>>2]|0)+52>>2]&31](N,G+(V<<3)|0,R,K*+p[l>>3]);md[k[(k[O>>2]|0)+52>>2]&31](O,H+(V<<3)|0,R,K*+p[l>>3]);W=I+(V<<3)|0;md[k[(k[P>>2]|0)+52>>2]&31](P,W,R,K*+p[l>>3]);p[W>>3]=+p[W>>3]*+p[l>>3];U=U+1|0}while((U|0)!=(C|0));T=T+1|0}while((T|0)!=12)}eO(k[J>>2]|0,d,439,+p[m>>3]);eO(k[J>>2]|0,e,439,+p[m>>3]-+p[l>>3]*21.0e3);eO(k[J>>2]|0,f,439,+p[j>>3]);eO(k[J>>2]|0,g,440,+p[m>>3]);eO(k[J>>2]|0,h,440,+p[m>>3]-+p[l>>3]*21.0e3);eO(k[J>>2]|0,i,440,+p[j>>3]);if(S){j=0;do{m=j*12|0;XY(+p[g>>3],+p[h>>3],+p[i>>3],+p[d>>3],+p[e>>3],+p[f>>3],I+(m<<3)|0,H+(m<<3)|0,G+(m<<3)|0,D+(m<<3)|0,F+(m<<3)|0);j=j+1|0}while((j|0)!=(C|0))}j=Qqa(24)|0;B=0;wa(514,j|0,460);f=B;B=0;if(f&1){f=Rb()|0;e=Q;Sqa(j);X=e;Y=f;Qb(Y|0)}f=Qqa(24)|0;B=0;wa(514,f|0,448);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Sqa(f);X=d;Y=e;Qb(Y|0)}e=0;a:while(1){if(S){d=0;do{p[E+(d<<3)>>3]=+p[D+((d*12|0)+e<<3)>>3];d=d+1|0}while((d|0)!=(C|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{d=Qqa(16)|0;B=0;ib(284,d|0,460,E|0,738);i=B;B=0;if(i&1){Z=d;$=21;break a}fm(j,d,L+ +(e|0)/12.0*+p[l>>3]);break}case 625:{d=Qqa(16)|0;B=0;ib(285,d|0,460,E|0,738);i=B;B=0;if(i&1){aa=d;$=24;break a}fm(j,d,L+ +(e|0)/12.0*+p[l>>3]);break}case 623:{d=Qqa(16)|0;B=0;ib(286,d|0,460,E|0,738);i=B;B=0;if(i&1){ba=d;$=27;break a}fm(j,d,L+ +(e|0)/12.0*+p[l>>3]);break}default:{$=28;break a}}if(S){K=+p[l>>3];d=0;do{p[E+(d<<3)>>3]=+p[F+((d*12|0)+e<<3)>>3]/K;d=d+1|0}while((d|0)!=(C|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{d=Qqa(16)|0;B=0;ib(284,d|0,448,E|0,738);i=B;B=0;if(i&1){ca=d;$=55;break a}fm(f,d,L+ +(e|0)/12.0*+p[l>>3]);break}case 625:{d=Qqa(16)|0;B=0;ib(285,d|0,448,E|0,738);i=B;B=0;if(i&1){da=d;$=58;break a}fm(f,d,L+ +(e|0)/12.0*+p[l>>3]);break}case 623:{d=Qqa(16)|0;B=0;ib(286,d|0,448,E|0,738);i=B;B=0;if(i&1){ea=d;$=61;break a}fm(f,d,L+ +(e|0)/12.0*+p[l>>3]);break}default:{$=62;break a}}e=e+1|0;if((e|0)>=12){$=12;break}}if(($|0)==12){Fc[k[(k[j>>2]|0)+84>>2]&1023](j,k[J>>2]|0);Fc[k[(k[f>>2]|0)+84>>2]&1023](f,k[J>>2]|0);mC(k[M>>2]|0,j)|0;mC(k[M>>2]|0,f)|0;switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:break;case 623:case 625:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,460,-1);nd[k[(k[a>>2]|0)+220>>2]&1023](a,448,-1);break}default:{a=x+56|0;f=x+4|0;k[x>>2]=27524;k[a>>2]=27544;B=0;wa(508,x+56|0,f|0);M=B;B=0;if(M&1){M=Rb()|0;fa=Q;ga=M;vva(a);Qb(ga|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[a>>2]=27488;B=0;va(448,f|0);M=B;B=0;do if(M&1){j=Rb()|0;ha=Q;ia=j}else{k[f>>2]=27560;j=x+36|0;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;k[j+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,f|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;e=Q;Yua(c);Yua(j);Ava(f);ha=e;ia=J;break}Yua(c);B=0;J=Ia(40,x|0,144350,19)|0;e=B;B=0;b:do if(!(e&1)?(B=0,Xa(239,J|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,y|0,69562,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,z|0,69895,24);S=B;B=0;if(S&1){S=Rb()|0;d=Q;Yua(y);ja=S;ka=d;break}B=0;wa(510,A|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;la=1;ma=Q;na=d}else{B=0;ua(163,l|0,y|0,z|0,669,A|0);d=B;B=0;if(d&1)oa=1;else{B=0;eb(503,l|0,1240,229);B=0;oa=0}d=Rb()|0;S=Q;Yua(A);la=oa;ma=S;na=d}Yua(z);Yua(y);if(la){ja=na;ka=ma}else{pa=ma;qa=na;break b}}else{d=Rb()|0;ja=d;ka=Q}while(0);zb(l|0);pa=ka;qa=ja}else $=102;while(0);if(($|0)==102){J=Rb()|0;pa=Q;qa=J}k[x>>2]=27468;k[a>>2]=27488;k[f>>2]=27560;Yua(j);Ava(f);vva(a);X=pa;Y=qa;Qb(Y|0)}while(0);fa=ha;ga=ia;vva(a);Qb(ga|0)}}if(R)Ec[k[(k[R>>2]|0)+4>>2]&1023](R);Tqa(D);Tqa(F);Tqa(G);Tqa(H);Tqa(I);Tqa(E);r=b;return}else if(($|0)==21){b=Rb()|0;E=Q;Sqa(Z);X=E;Y=b;Qb(Y|0)}else if(($|0)==24){b=Rb()|0;E=Q;Sqa(aa);X=E;Y=b;Qb(Y|0)}else if(($|0)==27){b=Rb()|0;E=Q;Sqa(ba);X=E;Y=b;Qb(Y|0)}else if(($|0)==28){b=n+56|0;E=n+4|0;k[n>>2]=27524;k[b>>2]=27544;B=0;wa(508,n+56|0,E|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ra=Q;sa=ba;vva(b);Qb(sa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[b>>2]=27488;B=0;va(448,E|0);ba=B;B=0;do if(ba&1){aa=Rb()|0;ta=Q;xa=aa}else{k[E>>2]=27560;aa=n+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;I=Q;Yua(c);Yua(aa);Ava(E);ta=I;xa=Z;break}Yua(c);B=0;Z=Ia(40,n|0,144350,19)|0;I=B;B=0;c:do if(!(I&1)?(B=0,Xa(239,Z|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,o|0,69562,75);G=B;B=0;do if(!(G&1)){B=0;eb(502,q|0,69895,24);F=B;B=0;if(F&1){F=Rb()|0;D=Q;Yua(o);ya=D;za=F;break}B=0;wa(510,s|0,E|0);F=B;B=0;if(F&1){F=Rb()|0;Aa=F;Ba=Q;Ca=1}else{B=0;ua(163,H|0,o|0,q|0,646,s|0);F=B;B=0;if(F&1)Da=1;else{B=0;eb(503,H|0,1240,229);B=0;Da=0}F=Rb()|0;D=Q;Yua(s);Aa=F;Ba=D;Ca=Da}Yua(q);Yua(o);if(Ca){ya=Ba;za=Aa}else{Ea=Ba;Fa=Aa;break c}}else{D=Rb()|0;ya=Q;za=D}while(0);zb(H|0);Ea=ya;Fa=za}else $=43;while(0);if(($|0)==43){Z=Rb()|0;Ea=Q;Fa=Z}k[n>>2]=27468;k[b>>2]=27488;k[E>>2]=27560;Yua(aa);Ava(E);vva(b);X=Ea;Y=Fa;Qb(Y|0)}while(0);ra=ta;sa=xa;vva(b);Qb(sa|0)}else if(($|0)==55){sa=Rb()|0;b=Q;Sqa(ca);X=b;Y=sa;Qb(Y|0)}else if(($|0)==58){sa=Rb()|0;b=Q;Sqa(da);X=b;Y=sa;Qb(Y|0)}else if(($|0)==61){sa=Rb()|0;b=Q;Sqa(ea);X=b;Y=sa;Qb(Y|0)}else if(($|0)==62){sa=t+56|0;b=t+4|0;k[t>>2]=27524;k[sa>>2]=27544;B=0;wa(508,t+56|0,b|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Ga=Q;Ha=ea;vva(sa);Qb(Ha|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[sa>>2]=27488;B=0;va(448,b|0);ea=B;B=0;do if(ea&1){da=Rb()|0;Ja=Q;Ka=da}else{k[b>>2]=27560;da=t+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);ca=B;B=0;if(ca&1){ca=Rb()|0;xa=Q;Yua(c);Yua(da);Ava(b);Ja=xa;Ka=ca;break}Yua(c);B=0;ca=Ia(40,t|0,144350,19)|0;xa=B;B=0;d:do if(!(xa&1)?(B=0,Xa(239,ca|0,0)|0,ta=B,B=0,!(ta&1)):0){ta=Ab(20)|0;B=0;eb(502,u|0,69562,75);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,v|0,69895,24);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ea=Q;Yua(u);La=Fa;Ma=Ea;break}B=0;wa(510,w|0,b|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Na=1;Oa=Q;Pa=Ea}else{B=0;ua(163,ta|0,u|0,v|0,653,w|0);Ea=B;B=0;if(Ea&1)Qa=1;else{B=0;eb(503,ta|0,1240,229);B=0;Qa=0}Ea=Rb()|0;Fa=Q;Yua(w);Na=Qa;Oa=Fa;Pa=Ea}Yua(v);Yua(u);if(Na){La=Pa;Ma=Oa}else{Ra=Oa;Sa=Pa;break d}}else{Ea=Rb()|0;La=Ea;Ma=Q}while(0);zb(ta|0);Ra=Ma;Sa=La}else $=77;while(0);if(($|0)==77){ca=Rb()|0;Ra=Q;Sa=ca}k[t>>2]=27468;k[sa>>2]=27488;k[b>>2]=27560;Yua(da);Ava(b);vva(sa);X=Ra;Y=Sa;Qb(Y|0)}while(0);Ga=Ja;Ha=Ka;vva(sa);Qb(Ha|0)}}function kp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0.0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0;b=r;r=r+576|0;c=b+556|0;d=b+24|0;e=b+16|0;f=b+8|0;g=b;h=b+408|0;i=b+544|0;j=b+392|0;l=b+240|0;m=b+256|0;n=b+92|0;o=b+80|0;q=b+68|0;s=b+104|0;t=b+56|0;u=b+44|0;v=b+32|0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}w=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;x=w*12|0;y=x>>>0>536870911?-1:x<<3;x=Rqa(y)|0;z=Rqa(y)|0;A=Rqa(y)|0;C=Rqa(y)|0;D=Rqa(y)|0;E=Rqa(y)|0;y=Rqa(w>>>0>536870911?-1:w<<3)|0;F=a+36|0;dO(k[F>>2]|0,f,767);dO(k[F>>2]|0,g,67);G=+p[g>>3];H=G*+_(+(+p[f>>3]/G));I=a+16|0;J=oC(k[I>>2]|0,446)|0;K=oC(k[I>>2]|0,447)|0;L=oC(k[I>>2]|0,444)|0;M=oC(k[I>>2]|0,445)|0;N=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;O=(w|0)>0;if(O){P=0;do{G=+(P|0)/12.0;R=0;do{Fc[k[(k[N>>2]|0)+28>>2]&1023](N,R);S=(R*12|0)+P|0;md[k[(k[J>>2]|0)+52>>2]&31](J,A+(S<<3)|0,N,G*+p[g>>3]);md[k[(k[K>>2]|0)+52>>2]&31](K,C+(S<<3)|0,N,G*+p[g>>3]);T=D+(S<<3)|0;md[k[(k[L>>2]|0)+52>>2]&31](L,T,N,G*+p[g>>3]);U=E+(S<<3)|0;md[k[(k[M>>2]|0)+52>>2]&31](M,U,N,G*+p[g>>3]);V=+p[g>>3];p[T>>3]=+p[T>>3]*V;p[U>>3]=V*+p[U>>3];R=R+1|0}while((R|0)!=(w|0));P=P+1|0}while((P|0)!=12);eO(k[F>>2]|0,d,455,+p[f>>3]);eO(k[F>>2]|0,e,454,+p[f>>3]);if(O){P=0;do{M=P*12|0;YY(+p[d>>3],+p[e>>3],E+(M<<3)|0,D+(M<<3)|0,C+(M<<3)|0,A+(M<<3)|0,x+(M<<3)|0,z+(M<<3)|0);P=P+1|0}while((P|0)!=(w|0))}}else{eO(k[F>>2]|0,d,455,+p[f>>3]);eO(k[F>>2]|0,e,454,+p[f>>3])}f=Qqa(24)|0;B=0;wa(514,f|0,460);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Sqa(f);W=d;X=e;Qb(X|0)}e=Qqa(24)|0;B=0;wa(514,e|0,448);d=B;B=0;if(d&1){d=Rb()|0;P=Q;Sqa(e);W=P;X=d;Qb(X|0)}d=0;a:while(1){if(O){P=0;do{p[y+(P<<3)>>3]=+p[x+((P*12|0)+d<<3)>>3];P=P+1|0}while((P|0)!=(w|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{P=Qqa(16)|0;B=0;ib(284,P|0,460,y|0,738);M=B;B=0;if(M&1){Y=P;Z=22;break a}fm(f,P,H+ +(d|0)/12.0*+p[g>>3]);break}case 625:{P=Qqa(16)|0;B=0;ib(285,P|0,460,y|0,738);M=B;B=0;if(M&1){$=P;Z=25;break a}fm(f,P,H+ +(d|0)/12.0*+p[g>>3]);break}case 623:{P=Qqa(16)|0;B=0;ib(286,P|0,460,y|0,738);M=B;B=0;if(M&1){aa=P;Z=28;break a}fm(f,P,H+ +(d|0)/12.0*+p[g>>3]);break}default:{Z=29;break a}}if(O){G=+p[g>>3];P=0;do{p[y+(P<<3)>>3]=+p[z+((P*12|0)+d<<3)>>3]/G;P=P+1|0}while((P|0)!=(w|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{P=Qqa(16)|0;B=0;ib(284,P|0,448,y|0,738);M=B;B=0;if(M&1){ba=P;Z=56;break a}fm(e,P,H+ +(d|0)/12.0*+p[g>>3]);break}case 625:{P=Qqa(16)|0;B=0;ib(285,P|0,448,y|0,738);M=B;B=0;if(M&1){ca=P;Z=59;break a}fm(e,P,H+ +(d|0)/12.0*+p[g>>3]);break}case 623:{P=Qqa(16)|0;B=0;ib(286,P|0,448,y|0,738);M=B;B=0;if(M&1){da=P;Z=62;break a}fm(e,P,H+ +(d|0)/12.0*+p[g>>3]);break}default:{Z=63;break a}}d=d+1|0;if((d|0)>=12){Z=13;break}}if((Z|0)==13){Fc[k[(k[f>>2]|0)+84>>2]&1023](f,k[F>>2]|0);Fc[k[(k[e>>2]|0)+84>>2]&1023](e,k[F>>2]|0);mC(k[I>>2]|0,f)|0;mC(k[I>>2]|0,e)|0;switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:break;case 623:case 625:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,460,-1);nd[k[(k[a>>2]|0)+220>>2]&1023](a,448,-1);break}default:{a=s+56|0;e=s+4|0;k[s>>2]=27524;k[a>>2]=27544;B=0;wa(508,s+56|0,e|0);I=B;B=0;if(I&1){I=Rb()|0;ea=Q;fa=I;vva(a);Qb(fa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[a>>2]=27488;B=0;va(448,e|0);I=B;B=0;do if(I&1){f=Rb()|0;ga=Q;ha=f}else{k[e>>2]=27560;f=s+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,e|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;d=Q;Yua(c);Yua(f);Ava(e);ga=d;ha=F;break}Yua(c);B=0;F=Ia(40,s|0,144350,19)|0;d=B;B=0;b:do if(!(d&1)?(B=0,Xa(239,F|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,t|0,69562,75);w=B;B=0;do if(!(w&1)){B=0;eb(502,u|0,69920,24);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(t);ia=O;ja=P;break}B=0;wa(510,v|0,e|0);P=B;B=0;if(P&1){P=Rb()|0;ka=1;la=Q;ma=P}else{B=0;ua(163,g|0,t|0,u|0,767,v|0);P=B;B=0;if(P&1)na=1;else{B=0;eb(503,g|0,1240,229);B=0;na=0}P=Rb()|0;O=Q;Yua(v);ka=na;la=O;ma=P}Yua(u);Yua(t);if(ka){ia=ma;ja=la}else{oa=la;pa=ma;break b}}else{P=Rb()|0;ia=P;ja=Q}while(0);zb(g|0);oa=ja;pa=ia}else Z=103;while(0);if((Z|0)==103){F=Rb()|0;oa=Q;pa=F}k[s>>2]=27468;k[a>>2]=27488;k[e>>2]=27560;Yua(f);Ava(e);vva(a);W=oa;X=pa;Qb(X|0)}while(0);ea=ga;fa=ha;vva(a);Qb(fa|0)}}if(N)Ec[k[(k[N>>2]|0)+4>>2]&1023](N);Tqa(x);Tqa(z);Tqa(A);Tqa(C);Tqa(D);Tqa(E);Tqa(y);r=b;return}else if((Z|0)==22){b=Rb()|0;y=Q;Sqa(Y);W=y;X=b;Qb(X|0)}else if((Z|0)==25){b=Rb()|0;y=Q;Sqa($);W=y;X=b;Qb(X|0)}else if((Z|0)==28){b=Rb()|0;y=Q;Sqa(aa);W=y;X=b;Qb(X|0)}else if((Z|0)==29){b=h+56|0;y=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,y|0);aa=B;B=0;if(aa&1){aa=Rb()|0;qa=Q;ra=aa;vva(b);Qb(ra|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,y|0);aa=B;B=0;do if(aa&1){$=Rb()|0;sa=Q;ta=$}else{k[y>>2]=27560;$=h+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);Y=B;B=0;if(Y&1){Y=Rb()|0;E=Q;Yua(c);Yua($);Ava(y);sa=E;ta=Y;break}Yua(c);B=0;Y=Ia(40,h|0,144350,19)|0;E=B;B=0;c:do if(!(E&1)?(B=0,Xa(239,Y|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,i|0,69562,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,69920,24);A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(i);xa=z;ya=A;break}B=0;wa(510,l|0,y|0);A=B;B=0;if(A&1){A=Rb()|0;za=A;Aa=Q;Ba=1}else{B=0;ua(163,D|0,i|0,j|0,744,l|0);A=B;B=0;if(A&1)Ca=1;else{B=0;eb(503,D|0,1240,229);B=0;Ca=0}A=Rb()|0;z=Q;Yua(l);za=A;Aa=z;Ba=Ca}Yua(j);Yua(i);if(Ba){xa=Aa;ya=za}else{Da=Aa;Ea=za;break c}}else{z=Rb()|0;xa=Q;ya=z}while(0);zb(D|0);Da=xa;Ea=ya}else Z=44;while(0);if((Z|0)==44){Y=Rb()|0;Da=Q;Ea=Y}k[h>>2]=27468;k[b>>2]=27488;k[y>>2]=27560;Yua($);Ava(y);vva(b);W=Da;X=Ea;Qb(X|0)}while(0);qa=sa;ra=ta;vva(b);Qb(ra|0)}else if((Z|0)==56){ra=Rb()|0;b=Q;Sqa(ba);W=b;X=ra;Qb(X|0)}else if((Z|0)==59){ra=Rb()|0;b=Q;Sqa(ca);W=b;X=ra;Qb(X|0)}else if((Z|0)==62){ra=Rb()|0;b=Q;Sqa(da);W=b;X=ra;Qb(X|0)}else if((Z|0)==63){ra=m+56|0;b=m+4|0;k[m>>2]=27524;k[ra>>2]=27544;B=0;wa(508,m+56|0,b|0);da=B;B=0;if(da&1){da=Rb()|0;Fa=Q;Ga=da;vva(ra);Qb(Ga|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ra>>2]=27488;B=0;va(448,b|0);da=B;B=0;do if(da&1){ca=Rb()|0;Ha=Q;Ja=ca}else{k[b>>2]=27560;ca=m+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ta=Q;Yua(c);Yua(ca);Ava(b);Ha=ta;Ja=ba;break}Yua(c);B=0;ba=Ia(40,m|0,144350,19)|0;ta=B;B=0;d:do if(!(ta&1)?(B=0,Xa(239,ba|0,0)|0,sa=B,B=0,!(sa&1)):0){sa=Ab(20)|0;B=0;eb(502,n|0,69562,75);qa=B;B=0;do if(!(qa&1)){B=0;eb(502,o|0,69920,24);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Da=Q;Yua(n);Ka=Ea;La=Da;break}B=0;wa(510,q|0,b|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ma=1;Na=Q;Oa=Da}else{B=0;ua(163,sa|0,n|0,o|0,751,q|0);Da=B;B=0;if(Da&1)Pa=1;else{B=0;eb(503,sa|0,1240,229);B=0;Pa=0}Da=Rb()|0;Ea=Q;Yua(q);Ma=Pa;Na=Ea;Oa=Da}Yua(o);Yua(n);if(Ma){Ka=Oa;La=Na}else{Qa=Na;Ra=Oa;break d}}else{Da=Rb()|0;Ka=Da;La=Q}while(0);zb(sa|0);Qa=La;Ra=Ka}else Z=78;while(0);if((Z|0)==78){ba=Rb()|0;Qa=Q;Ra=ba}k[m>>2]=27468;k[ra>>2]=27488;k[b>>2]=27560;Yua(ca);Ava(b);vva(ra);W=Qa;X=Ra;Qb(X|0)}while(0);Fa=Ha;Ga=Ja;vva(ra);Qb(Ga|0)}}function lp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0;b=r;r=r+560|0;c=b+540|0;d=b+16|0;e=b+8|0;f=b;g=b+392|0;h=b+528|0;i=b+380|0;j=b+368|0;l=b+232|0;m=b+84|0;n=b+72|0;o=b+60|0;q=b+96|0;s=b+48|0;t=b+36|0;u=b+24|0;if(!(Hc[k[(k[a>>2]|0)+248>>2]&511](a)|0)){r=b;return}v=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;w=v*12|0;x=w>>>0>536870911?-1:w<<3;w=Rqa(x)|0;y=Rqa(x)|0;z=Rqa(x)|0;A=Rqa(x)|0;x=Rqa(v>>>0>536870911?-1:v<<3)|0;C=a+36|0;dO(k[C>>2]|0,e,767);dO(k[C>>2]|0,f,67);D=+p[f>>3];E=D*+_(+(+p[e>>3]/D));D=+WJ(k[a+32>>2]|0,458);F=a+16|0;G=oC(k[F>>2]|0,446)|0;H=oC(k[F>>2]|0,444)|0;I=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;J=(v|0)>0;if(J){K=0;do{L=+(K|0)/12.0;M=0;do{Fc[k[(k[I>>2]|0)+28>>2]&1023](I,M);N=(M*12|0)+K|0;md[k[(k[G>>2]|0)+52>>2]&31](G,z+(N<<3)|0,I,L*+p[f>>3]);O=A+(N<<3)|0;md[k[(k[H>>2]|0)+52>>2]&31](H,O,I,L*+p[f>>3]);p[O>>3]=+p[O>>3]*+p[f>>3];M=M+1|0}while((M|0)!=(v|0));K=K+1|0}while((K|0)!=12);eO(k[C>>2]|0,d,439,+p[e>>3]);if(J){K=0;do{H=K*12|0;ZY(+p[d>>3],D,A+(H<<3)|0,z+(H<<3)|0,w+(H<<3)|0,y+(H<<3)|0);K=K+1|0}while((K|0)!=(v|0))}}else eO(k[C>>2]|0,d,439,+p[e>>3]);e=Qqa(24)|0;B=0;wa(514,e|0,460);d=B;B=0;if(d&1){d=Rb()|0;K=Q;Sqa(e);P=K;R=d;Qb(R|0)}d=Qqa(24)|0;B=0;wa(514,d|0,448);K=B;B=0;if(K&1){K=Rb()|0;H=Q;Sqa(d);P=H;R=K;Qb(R|0)}K=0;a:while(1){if(J){H=0;do{p[x+(H<<3)>>3]=+p[w+((H*12|0)+K<<3)>>3];H=H+1|0}while((H|0)!=(v|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{H=Qqa(16)|0;B=0;ib(284,H|0,460,x|0,738);G=B;B=0;if(G&1){S=H;T=22;break a}fm(e,H,E+ +(K|0)/12.0*+p[f>>3]);break}case 625:{H=Qqa(16)|0;B=0;ib(285,H|0,460,x|0,738);G=B;B=0;if(G&1){U=H;T=25;break a}fm(e,H,E+ +(K|0)/12.0*+p[f>>3]);break}case 623:{H=Qqa(16)|0;B=0;ib(286,H|0,460,x|0,738);G=B;B=0;if(G&1){V=H;T=28;break a}fm(e,H,E+ +(K|0)/12.0*+p[f>>3]);break}default:{T=29;break a}}if(J){D=+p[f>>3];H=0;do{p[x+(H<<3)>>3]=+p[y+((H*12|0)+K<<3)>>3]/D;H=H+1|0}while((H|0)!=(v|0))}switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{H=Qqa(16)|0;B=0;ib(284,H|0,448,x|0,738);G=B;B=0;if(G&1){W=H;T=56;break a}fm(d,H,E+ +(K|0)/12.0*+p[f>>3]);break}case 625:{H=Qqa(16)|0;B=0;ib(285,H|0,448,x|0,738);G=B;B=0;if(G&1){X=H;T=59;break a}fm(d,H,E+ +(K|0)/12.0*+p[f>>3]);break}case 623:{H=Qqa(16)|0;B=0;ib(286,H|0,448,x|0,738);G=B;B=0;if(G&1){Y=H;T=62;break a}fm(d,H,E+ +(K|0)/12.0*+p[f>>3]);break}default:{T=63;break a}}K=K+1|0;if((K|0)>=12){T=13;break}}if((T|0)==13){Fc[k[(k[e>>2]|0)+84>>2]&1023](e,k[C>>2]|0);Fc[k[(k[d>>2]|0)+84>>2]&1023](d,k[C>>2]|0);mC(k[F>>2]|0,e)|0;mC(k[F>>2]|0,d)|0;switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:break;case 623:case 625:{nd[k[(k[a>>2]|0)+220>>2]&1023](a,460,-1);nd[k[(k[a>>2]|0)+220>>2]&1023](a,448,-1);break}default:{a=q+56|0;d=q+4|0;k[q>>2]=27524;k[a>>2]=27544;B=0;wa(508,q+56|0,d|0);F=B;B=0;if(F&1){F=Rb()|0;Z=Q;$=F;vva(a);Qb($|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[a>>2]=27488;B=0;va(448,d|0);F=B;B=0;do if(F&1){e=Rb()|0;aa=Q;ba=e}else{k[d>>2]=27560;e=q+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,d|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;K=Q;Yua(c);Yua(e);Ava(d);aa=K;ba=C;break}Yua(c);B=0;C=Ia(40,q|0,144350,19)|0;K=B;B=0;b:do if(!(K&1)?(B=0,Xa(239,C|0,0)|0,f=B,B=0,!(f&1)):0){f=Ab(20)|0;B=0;eb(502,s|0,69562,75);v=B;B=0;do if(!(v&1)){B=0;eb(502,t|0,69945,26);J=B;B=0;if(J&1){J=Rb()|0;H=Q;Yua(s);ca=J;da=H;break}B=0;wa(510,u|0,d|0);H=B;B=0;if(H&1){H=Rb()|0;ea=1;fa=Q;ga=H}else{B=0;ua(163,f|0,s|0,t|0,861,u|0);H=B;B=0;if(H&1)ha=1;else{B=0;eb(503,f|0,1240,229);B=0;ha=0}H=Rb()|0;J=Q;Yua(u);ea=ha;fa=J;ga=H}Yua(t);Yua(s);if(ea){ca=ga;da=fa}else{ia=fa;ja=ga;break b}}else{H=Rb()|0;ca=H;da=Q}while(0);zb(f|0);ia=da;ja=ca}else T=103;while(0);if((T|0)==103){C=Rb()|0;ia=Q;ja=C}k[q>>2]=27468;k[a>>2]=27488;k[d>>2]=27560;Yua(e);Ava(d);vva(a);P=ia;R=ja;Qb(R|0)}while(0);Z=aa;$=ba;vva(a);Qb($|0)}}if(I)Ec[k[(k[I>>2]|0)+4>>2]&1023](I);Tqa(w);Tqa(y);Tqa(z);Tqa(A);Tqa(x);r=b;return}else if((T|0)==22){b=Rb()|0;x=Q;Sqa(S);P=x;R=b;Qb(R|0)}else if((T|0)==25){b=Rb()|0;x=Q;Sqa(U);P=x;R=b;Qb(R|0)}else if((T|0)==28){b=Rb()|0;x=Q;Sqa(V);P=x;R=b;Qb(R|0)}else if((T|0)==29){b=g+56|0;x=g+4|0;k[g>>2]=27524;k[b>>2]=27544;B=0;wa(508,g+56|0,x|0);V=B;B=0;if(V&1){V=Rb()|0;ka=Q;la=V;vva(b);Qb(la|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[b>>2]=27488;B=0;va(448,x|0);V=B;B=0;do if(V&1){U=Rb()|0;ma=Q;na=U}else{k[x>>2]=27560;U=g+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;A=Q;Yua(c);Yua(U);Ava(x);ma=A;na=S;break}Yua(c);B=0;S=Ia(40,g|0,144350,19)|0;A=B;B=0;c:do if(!(A&1)?(B=0,Xa(239,S|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,h|0,69562,75);y=B;B=0;do if(!(y&1)){B=0;eb(502,i|0,69945,26);w=B;B=0;if(w&1){w=Rb()|0;I=Q;Yua(h);oa=I;pa=w;break}B=0;wa(510,j|0,x|0);w=B;B=0;if(w&1){w=Rb()|0;qa=w;ra=Q;sa=1}else{B=0;ua(163,z|0,h|0,i|0,838,j|0);w=B;B=0;if(w&1)ta=1;else{B=0;eb(503,z|0,1240,229);B=0;ta=0}w=Rb()|0;I=Q;Yua(j);qa=w;ra=I;sa=ta}Yua(i);Yua(h);if(sa){oa=ra;pa=qa}else{xa=ra;ya=qa;break c}}else{I=Rb()|0;oa=Q;pa=I}while(0);zb(z|0);xa=oa;ya=pa}else T=44;while(0);if((T|0)==44){S=Rb()|0;xa=Q;ya=S}k[g>>2]=27468;k[b>>2]=27488;k[x>>2]=27560;Yua(U);Ava(x);vva(b);P=xa;R=ya;Qb(R|0)}while(0);ka=ma;la=na;vva(b);Qb(la|0)}else if((T|0)==56){la=Rb()|0;b=Q;Sqa(W);P=b;R=la;Qb(R|0)}else if((T|0)==59){la=Rb()|0;b=Q;Sqa(X);P=b;R=la;Qb(R|0)}else if((T|0)==62){la=Rb()|0;b=Q;Sqa(Y);P=b;R=la;Qb(R|0)}else if((T|0)==63){la=l+56|0;b=l+4|0;k[l>>2]=27524;k[la>>2]=27544;B=0;wa(508,l+56|0,b|0);Y=B;B=0;if(Y&1){Y=Rb()|0;za=Q;Aa=Y;vva(la);Qb(Aa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[la>>2]=27488;B=0;va(448,b|0);Y=B;B=0;do if(Y&1){X=Rb()|0;Ba=Q;Ca=X}else{k[b>>2]=27560;X=l+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;na=Q;Yua(c);Yua(X);Ava(b);Ba=na;Ca=W;break}Yua(c);B=0;W=Ia(40,l|0,144350,19)|0;na=B;B=0;d:do if(!(na&1)?(B=0,Xa(239,W|0,0)|0,ma=B,B=0,!(ma&1)):0){ma=Ab(20)|0;B=0;eb(502,m|0,69562,75);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,n|0,69945,26);ya=B;B=0;if(ya&1){ya=Rb()|0;xa=Q;Yua(m);Da=ya;Ea=xa;break}B=0;wa(510,o|0,b|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Fa=1;Ga=Q;Ha=xa}else{B=0;ua(163,ma|0,m|0,n|0,845,o|0);xa=B;B=0;if(xa&1)Ja=1;else{B=0;eb(503,ma|0,1240,229);B=0;Ja=0}xa=Rb()|0;ya=Q;Yua(o);Fa=Ja;Ga=ya;Ha=xa}Yua(n);Yua(m);if(Fa){Da=Ha;Ea=Ga}else{Ka=Ga;La=Ha;break d}}else{xa=Rb()|0;Da=xa;Ea=Q}while(0);zb(ma|0);Ka=Ea;La=Da}else T=78;while(0);if((T|0)==78){W=Rb()|0;Ka=Q;La=W}k[l>>2]=27468;k[la>>2]=27488;k[b>>2]=27560;Yua(X);Ava(b);vva(la);P=Ka;R=La;Qb(R|0)}while(0);za=Ba;Aa=Ca;vva(la);Qb(Aa|0)}}function mp(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0;b=r;r=r+1824|0;c=b+1804|0;d=b+1608|0;e=b+1792|0;f=b+1456|0;g=b+1780|0;h=b+1320|0;i=b+1768|0;j=b+1168|0;l=b+1756|0;m=b+1016|0;n=b+1744|0;o=b+880|0;p=b+1592|0;q=b+728|0;s=b+1304|0;t=b+592|0;u=b+1152|0;v=b+440|0;w=b+864|0;x=b+304|0;y=b+576|0;z=b+168|0;A=b+152|0;C=b+16|0;D=b;E=d+56|0;F=d+4|0;k[d>>2]=27524;k[E>>2]=27544;B=0;wa(508,d+56|0,F|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(E);Qb(I|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[E>>2]=27488;B=0;va(448,F|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[F>>2]=27560;J=d+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(F);K=N;L=M;break}Yua(c);B=0;M=ya(k[(k[a>>2]|0)+20>>2]|0,a|0)|0;N=B;B=0;do if((((!(N&1)?(B=0,O=ya(427,M|0)|0,P=B,B=0,!(P&1)):0)?(P=Lta(O)|0,B=0,R=Ia(40,d|0,O|0,P|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,R|0,69717,10)|0,R=B,B=0,!(R&1)):0)?(B=0,wa(510,e|0,F|0),R=B,B=0,!(R&1)):0){B=0;ya(424,e|0)|0;R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(e);S=R;T=P;break}Yua(e);k[d>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(E);P=f+56|0;R=f+4|0;k[f>>2]=27524;k[P>>2]=27544;B=0;wa(508,f+56|0,R|0);O=B;B=0;if(O&1){O=Rb()|0;U=Q;V=O;vva(P);Qb(V|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[P>>2]=27488;B=0;va(448,R|0);O=B;B=0;do if(O&1){W=Rb()|0;X=Q;Y=W}else{k[R>>2]=27560;W=f+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(R);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,f|0,69728,8)|0;_=B;B=0;do if(((!(_&1)?(B=0,$=Xa(242,Z|0,k[a+8>>2]|0)|0,aa=B,B=0,!(aa&1)):0)?(B=0,Ia(40,$|0,149177,1)|0,$=B,B=0,!($&1)):0)?(B=0,wa(510,g|0,R|0),$=B,B=0,!($&1)):0){B=0;ya(424,g|0)|0;$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(g);ba=$;ca=aa;break}Yua(g);k[f>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(W);Ava(R);vva(P);aa=h+56|0;$=h+4|0;k[h>>2]=27524;k[aa>>2]=27544;B=0;wa(508,h+56|0,$|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva(aa);Qb(fa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[aa>>2]=27488;B=0;va(448,$|0);da=B;B=0;do if(da&1){ga=Rb()|0;ha=Q;ia=ga}else{k[$>>2]=27560;ga=h+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(c);Yua(ga);Ava($);ha=ka;ia=ja;break}Yua(c);B=0;ja=Ia(40,h|0,79833,8)|0;ka=B;B=0;do if(ka&1)la=49;else{B=0;ma=Xa(242,ja|0,k[a+12>>2]|0)|0;na=B;B=0;if(na&1){la=49;break}B=0;Ia(40,ma|0,149177,1)|0;ma=B;B=0;if(ma&1){la=49;break}B=0;wa(510,i|0,$|0);ma=B;B=0;if(ma&1){la=49;break}B=0;ya(424,i|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(i);oa=ma;pa=na;break}Yua(i);k[h>>2]=27468;k[aa>>2]=27488;k[$>>2]=27560;Yua(ga);Ava($);vva(aa);na=a+24|0;a:do if(!(k[na>>2]|0)){ma=j+56|0;qa=j+4|0;k[j>>2]=27524;k[ma>>2]=27544;B=0;wa(508,j+56|0,qa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;ta=ra;vva(ma);Qb(ta|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ma>>2]=27488;B=0;va(448,qa|0);ra=B;B=0;do if(ra&1){ua=Rb()|0;xa=Q;za=ua}else{k[qa>>2]=27560;ua=j+36|0;k[ua>>2]=0;k[ua+4>>2]=0;k[ua+8>>2]=0;k[ua+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qa|0,c|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Yua(c);Yua(ua);Ava(qa);xa=Ba;za=Aa;break}Yua(c);B=0;Ia(40,j|0,69737,16)|0;Aa=B;B=0;do if(!(Aa&1)){B=0;wa(510,l|0,qa|0);Ba=B;B=0;if(Ba&1){la=65;break}B=0;ya(424,l|0)|0;Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(l);Da=Ba;Ea=Ca;break}else{Yua(l);k[j>>2]=27468;k[ma>>2]=27488;k[qa>>2]=27560;Yua(ua);Ava(qa);vva(ma);break a}}else la=65;while(0);if((la|0)==65){Aa=Rb()|0;Da=Aa;Ea=Q}k[j>>2]=27468;k[ma>>2]=27488;k[qa>>2]=27560;Yua(ua);Ava(qa);vva(ma);Fa=Da;Ga=Ea;Qb(Fa|0)}while(0);sa=xa;ta=za;vva(ma);Qb(ta|0)}else{qa=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((qa|0)>0)Ha=0;else break;do{ra=k[(k[na>>2]|0)+(Ha<<2)>>2]|0;Ec[k[(k[ra>>2]|0)+8>>2]&1023](ra);Ha=Ha+1|0}while((Ha|0)!=(qa|0))}while(0);na=a+20|0;b:do if(k[na>>2]|0){qa=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;if((qa|0)<=0)break;ma=m+56|0;ra=m+4|0;Aa=m+56|0;Ca=m+128|0;Ba=m+132|0;Ja=m+36|0;Ka=m+52|0;La=0;while(1){k[m>>2]=27524;k[ma>>2]=27544;B=0;wa(508,Aa|0,ra|0);Ma=B;B=0;if(Ma&1){la=75;break}k[Ca>>2]=0;k[Ba>>2]=-1;k[m>>2]=27468;k[ma>>2]=27488;B=0;va(448,ra|0);Ma=B;B=0;if(Ma&1){la=76;break}k[ra>>2]=27560;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[Ka>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);Ma=B;B=0;if(Ma&1){la=74;break}Yua(c);B=0;Ma=Ia(40,m|0,69972,6)|0;Na=B;B=0;if(Na&1){la=86;break}B=0;Na=Xa(242,Ma|0,La|0)|0;Ma=B;B=0;if(Ma&1){la=86;break}B=0;Ma=Ia(40,Na|0,69979,4)|0;Na=B;B=0;if(Na&1){la=86;break}B=0;Xa(245,Ma|0,k[(k[na>>2]|0)+(La<<2)>>2]|0)|0;Ma=B;B=0;if(Ma&1){la=86;break}B=0;wa(510,n|0,ra|0);Ma=B;B=0;if(Ma&1){la=86;break}B=0;ya(424,n|0)|0;Ma=B;B=0;if(Ma&1){la=87;break}Yua(n);k[m>>2]=27468;k[ma>>2]=27488;k[ra>>2]=27560;Yua(Ja);Ava(ra);vva(ma);Ma=k[(k[na>>2]|0)+(La<<2)>>2]|0;Ec[k[(k[Ma>>2]|0)+8>>2]&1023](Ma);La=La+1|0;if((La|0)>=(qa|0))break b}if((la|0)==74){qa=Rb()|0;La=Q;Yua(c);Yua(Ja);Ava(ra);Oa=La;Pa=qa;la=77}else if((la|0)==75){qa=Rb()|0;Qa=Q;Ra=qa;vva(ma);Qb(Ra|0)}else if((la|0)==76){qa=Rb()|0;Oa=Q;Pa=qa;la=77}else if((la|0)==86){qa=Rb()|0;Sa=qa;Ta=Q;la=88}else if((la|0)==87){qa=Rb()|0;La=Q;Yua(n);Sa=qa;Ta=La;la=88}if((la|0)==77){Qa=Oa;Ra=Pa;vva(ma);Qb(Ra|0)}else if((la|0)==88){k[m>>2]=27468;k[ma>>2]=27488;k[ra>>2]=27560;Yua(Ja);Ava(ra);vva(ma);Fa=Sa;Ga=Ta;Qb(Fa|0)}}else{La=o+56|0;qa=o+4|0;k[o>>2]=27524;k[La>>2]=27544;B=0;wa(508,o+56|0,qa|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ua=Q;Va=Ka;vva(La);Qb(Va|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[La>>2]=27488;B=0;va(448,qa|0);Ka=B;B=0;do if(Ka&1){Ba=Rb()|0;Wa=Q;Ya=Ba}else{k[qa>>2]=27560;Ba=o+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qa|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Aa=Q;Yua(c);Yua(Ba);Ava(qa);Wa=Aa;Ya=Ca;break}Yua(c);B=0;Ia(40,o|0,69754,13)|0;Ca=B;B=0;do if(!(Ca&1)){B=0;wa(510,p|0,qa|0);Aa=B;B=0;if(Aa&1){la=101;break}B=0;ya(424,p|0)|0;Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ma=Q;Yua(p);Za=Aa;_a=Ma;break}else{Yua(p);k[o>>2]=27468;k[La>>2]=27488;k[qa>>2]=27560;Yua(Ba);Ava(qa);vva(La);break b}}else la=101;while(0);if((la|0)==101){Ca=Rb()|0;Za=Ca;_a=Q}k[o>>2]=27468;k[La>>2]=27488;k[qa>>2]=27560;Yua(Ba);Ava(qa);vva(La);Fa=Za;Ga=_a;Qb(Fa|0)}while(0);Ua=Wa;Va=Ya;vva(La);Qb(Va|0)}while(0);na=k[a+28>>2]|0;c:do if(!na){qa=q+56|0;Ka=q+4|0;k[q>>2]=27524;k[qa>>2]=27544;B=0;wa(508,q+56|0,Ka|0);ma=B;B=0;if(ma&1){ma=Rb()|0;$a=Q;ab=ma;vva(qa);Qb(ab|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[qa>>2]=27488;B=0;va(448,Ka|0);ma=B;B=0;do if(ma&1){ra=Rb()|0;bb=Q;cb=ra}else{k[Ka>>2]=27560;ra=q+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ka|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ca=Q;Yua(c);Yua(ra);Ava(Ka);bb=Ca;cb=Ja;break}Yua(c);B=0;Ia(40,q|0,69768,16)|0;Ja=B;B=0;do if(!(Ja&1)){B=0;wa(510,s|0,Ka|0);Ca=B;B=0;if(Ca&1){la=118;break}B=0;ya(424,s|0)|0;Ca=B;B=0;if(Ca&1){Ca=Rb()|0;ua=Q;Yua(s);db=Ca;eb=ua;break}else{Yua(s);k[q>>2]=27468;k[qa>>2]=27488;k[Ka>>2]=27560;Yua(ra);Ava(Ka);vva(qa);break c}}else la=118;while(0);if((la|0)==118){Ja=Rb()|0;db=Ja;eb=Q}k[q>>2]=27468;k[qa>>2]=27488;k[Ka>>2]=27560;Yua(ra);Ava(Ka);vva(qa);Fa=db;Ga=eb;Qb(Fa|0)}while(0);$a=bb;ab=cb;vva(qa);Qb(ab|0)}else Ec[k[(k[na>>2]|0)+8>>2]&1023](na);while(0);na=k[a+32>>2]|0;d:do if(!na){Ka=t+56|0;ma=t+4|0;k[t>>2]=27524;k[Ka>>2]=27544;B=0;wa(508,t+56|0,ma|0);La=B;B=0;if(La&1){La=Rb()|0;fb=Q;gb=La;vva(Ka);Qb(gb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Ka>>2]=27488;B=0;va(448,ma|0);La=B;B=0;do if(La&1){Ja=Rb()|0;hb=Q;ib=Ja}else{k[ma>>2]=27560;Ja=t+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;ua=Q;Yua(c);Yua(Ja);Ava(ma);hb=ua;ib=Ba;break}Yua(c);B=0;Ia(40,t|0,69785,14)|0;Ba=B;B=0;do if(!(Ba&1)){B=0;wa(510,u|0,ma|0);ua=B;B=0;if(ua&1){la=135;break}B=0;ya(424,u|0)|0;ua=B;B=0;if(ua&1){ua=Rb()|0;Ca=Q;Yua(u);jb=ua;kb=Ca;break}else{Yua(u);k[t>>2]=27468;k[Ka>>2]=27488;k[ma>>2]=27560;Yua(Ja);Ava(ma);vva(Ka);break d}}else la=135;while(0);if((la|0)==135){Ba=Rb()|0;jb=Ba;kb=Q}k[t>>2]=27468;k[Ka>>2]=27488;k[ma>>2]=27560;Yua(Ja);Ava(ma);vva(Ka);Fa=jb;Ga=kb;Qb(Fa|0)}while(0);fb=hb;gb=ib;vva(Ka);Qb(gb|0)}else Ec[k[(k[na>>2]|0)+8>>2]&1023](na);while(0);na=v+56|0;ma=v+4|0;k[v>>2]=27524;k[na>>2]=27544;B=0;wa(508,v+56|0,ma|0);La=B;B=0;if(La&1){La=Rb()|0;lb=Q;mb=La;vva(na);Qb(mb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[na>>2]=27488;B=0;va(448,ma|0);La=B;B=0;do if(La&1){qa=Rb()|0;nb=Q;ob=qa}else{k[ma>>2]=27560;qa=v+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;ra=Q;Yua(c);Yua(qa);Ava(ma);nb=ra;ob=Ba;break}Yua(c);B=0;Ia(40,v|0,144113,14)|0;Ba=B;B=0;do if(Ba&1)la=151;else{B=0;wa(510,w|0,ma|0);ra=B;B=0;if(ra&1){la=151;break}B=0;ya(424,w|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;Ca=Q;Yua(w);pb=ra;qb=Ca;break}Yua(w);k[v>>2]=27468;k[na>>2]=27488;k[ma>>2]=27560;Yua(qa);Ava(ma);vva(na);Ca=k[a+36>>2]|0;if(Ca)_N(Ca);Ca=x+56|0;ra=x+4|0;k[x>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,x+56|0,ra|0);ua=B;B=0;if(ua&1){ua=Rb()|0;rb=Q;sb=ua;vva(Ca);Qb(sb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Ca>>2]=27488;B=0;va(448,ra|0);ua=B;B=0;do if(ua&1){Ma=Rb()|0;tb=Q;ub=Ma}else{k[ra>>2]=27560;Ma=x+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Na=Q;Yua(c);Yua(Ma);Ava(ra);tb=Na;ub=Aa;break}Yua(c);B=0;Ia(40,x|0,69800,18)|0;Aa=B;B=0;do if(Aa&1)la=166;else{B=0;wa(510,y|0,ra|0);Na=B;B=0;if(Na&1){la=166;break}B=0;ya(424,y|0)|0;Na=B;B=0;if(Na&1){Na=Rb()|0;vb=Q;Yua(y);wb=Na;xb=vb;break}Yua(y);k[x>>2]=27468;k[Ca>>2]=27488;k[ra>>2]=27560;Yua(Ma);Ava(ra);vva(Ca);vb=z+56|0;Na=z+4|0;k[z>>2]=27524;k[vb>>2]=27544;B=0;wa(508,z+56|0,Na|0);yb=B;B=0;if(yb&1){yb=Rb()|0;zb=Q;Ab=yb;vva(vb);Qb(Ab|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[vb>>2]=27488;B=0;va(448,Na|0);yb=B;B=0;do if(yb&1){Bb=Rb()|0;Cb=Q;Db=Bb}else{k[Na>>2]=27560;Bb=z+36|0;k[Bb>>2]=0;k[Bb+4>>2]=0;k[Bb+8>>2]=0;k[Bb+12>>2]=0;k[z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Eb=B;B=0;if(Eb&1){Eb=Rb()|0;Fb=Q;Yua(c);Yua(Bb);Ava(Na);Cb=Fb;Db=Eb;break}Yua(c);B=0;Ia(40,z|0,69819,10)|0;Eb=B;B=0;do if(Eb&1)la=181;else{B=0;wa(510,A|0,Na|0);Fb=B;B=0;if(Fb&1){la=181;break}B=0;ya(424,A|0)|0;Fb=B;B=0;if(Fb&1){Fb=Rb()|0;Gb=Q;Yua(A);Hb=Fb;Ib=Gb;break}Yua(A);k[z>>2]=27468;k[vb>>2]=27488;k[Na>>2]=27560;Yua(Bb);Ava(Na);vva(vb);Gb=k[a+16>>2]|0;if(Gb){oh(Gb);r=b;return}Gb=C+56|0;Fb=C+4|0;k[C>>2]=27524;k[Gb>>2]=27544;B=0;wa(508,C+56|0,Fb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Kb=Q;Lb=Jb;vva(Gb);Qb(Lb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Gb>>2]=27488;B=0;va(448,Fb|0);Jb=B;B=0;do if(Jb&1){Mb=Rb()|0;Nb=Q;Ob=Mb}else{k[Fb>>2]=27560;Mb=C+36|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Fb|0,c|0);Pb=B;B=0;if(Pb&1){Pb=Rb()|0;Sb=Q;Yua(c);Yua(Mb);Ava(Fb);Nb=Sb;Ob=Pb;break}Yua(c);B=0;Ia(40,C|0,69830,12)|0;Pb=B;B=0;do if(Pb&1)la=196;else{B=0;wa(510,D|0,Fb|0);Sb=B;B=0;if(Sb&1){la=196;break}B=0;ya(424,D|0)|0;Sb=B;B=0;if(Sb&1){Sb=Rb()|0;Tb=Q;Yua(D);Ub=Sb;Vb=Tb;break}Yua(D);k[C>>2]=27468;k[Gb>>2]=27488;k[Fb>>2]=27560;Yua(Mb);Ava(Fb);vva(Gb);r=b;return}while(0);if((la|0)==196){Pb=Rb()|0;Ub=Pb;Vb=Q}k[C>>2]=27468;k[Gb>>2]=27488;k[Fb>>2]=27560;Yua(Mb);Ava(Fb);vva(Gb);Fa=Ub;Ga=Vb;Qb(Fa|0)}while(0);Kb=Nb;Lb=Ob;vva(Gb);Qb(Lb|0)}while(0);if((la|0)==181){Eb=Rb()|0;Hb=Eb;Ib=Q}k[z>>2]=27468;k[vb>>2]=27488;k[Na>>2]=27560;Yua(Bb);Ava(Na);vva(vb);Fa=Hb;Ga=Ib;Qb(Fa|0)}while(0);zb=Cb;Ab=Db;vva(vb);Qb(Ab|0)}while(0);if((la|0)==166){Aa=Rb()|0;wb=Aa;xb=Q}k[x>>2]=27468;k[Ca>>2]=27488;k[ra>>2]=27560;Yua(Ma);Ava(ra);vva(Ca);Fa=wb;Ga=xb;Qb(Fa|0)}while(0);rb=tb;sb=ub;vva(Ca);Qb(sb|0)}while(0);if((la|0)==151){Ba=Rb()|0;pb=Ba;qb=Q}k[v>>2]=27468;k[na>>2]=27488;k[ma>>2]=27560;Yua(qa);Ava(ma);vva(na);Fa=pb;Ga=qb;Qb(Fa|0)}while(0);lb=nb;mb=ob;vva(na);Qb(mb|0)}while(0);if((la|0)==49){ja=Rb()|0;oa=ja;pa=Q}k[h>>2]=27468;k[aa>>2]=27488;k[$>>2]=27560;Yua(ga);Ava($);vva(aa);Fa=oa;Ga=pa;Qb(Fa|0)}while(0);ea=ha;fa=ia;vva(aa);Qb(fa|0)}else la=46;while(0);if((la|0)==46){Z=Rb()|0;ba=Z;ca=Q}k[f>>2]=27468;k[P>>2]=27488;k[R>>2]=27560;Yua(W);Ava(R);vva(P);Fa=ba;Ga=ca;Qb(Fa|0)}while(0);U=X;V=Y;vva(P);Qb(V|0)}else la=43;while(0);if((la|0)==43){M=Rb()|0;S=M;T=Q}k[d>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(E);Fa=S;Ga=T;Qb(Fa|0)}while(0);H=K;I=L;vva(E);Qb(I|0)}function np(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;TJ(k[a+32>>2]|0,b,c,d,e);return}function op(a,b,c){a=a|0;b=b|0;c=c|0;bO(k[a+36>>2]|0,b,c);return}function pp(a,b,c){a=a|0;b=b|0;c=c|0;dO(k[a+36>>2]|0,b,c);return}function qp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;hO(k[a+36>>2]|0,b,c,d);return}function rp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;f=(e|0)>0;if(f){g=a+20|0;h=0;i=0;while(1){j=(eo(k[(k[g>>2]|0)+(h<<2)>>2]|0,c,d)|0)+i|0;h=h+1|0;if((h|0)==(e|0)){l=j;break}else i=j}}else l=0;i=Rqa(l>>>0>1073741823?-1:l<<2)|0;if(!f){k[b>>2]=i;return}f=a+20|0;a=0;l=0;do{On(k[(k[f>>2]|0)+(l<<2)>>2]|0,i+(a<<2)|0,c,d);a=(eo(k[(k[f>>2]|0)+(l<<2)>>2]|0,c,d)|0)+a|0;l=l+1|0}while((l|0)!=(e|0));k[b>>2]=i;return}function sp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0;e=Hc[k[(k[a>>2]|0)+392>>2]&511](a)|0;f=e+d|0;g=(e|0)>0;if(g){e=a+20|0;h=d;i=0;while(1){j=(eo(k[(k[e>>2]|0)+(h<<2)>>2]|0,542,c)|0)+i|0;h=h+1|0;if((h|0)>=(f|0)){l=j;break}else i=j}}else l=0;i=Rqa(l>>>0>1073741823?-1:l<<2)|0;if(!g){k[b>>2]=i;return}g=a+20|0;a=0;l=d;do{On(k[(k[g>>2]|0)+(l<<2)>>2]|0,i+(a<<2)|0,542,c);a=(eo(k[(k[g>>2]|0)+(l<<2)>>2]|0,542,c)|0)+a|0;l=l+1|0}while((l|0)<(f|0));k[b>>2]=i;return}function tp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0;e=(d|0)>0;if(e){f=a+20|0;g=0;h=0;while(1){i=(eo(k[(k[f>>2]|0)+(g<<2)>>2]|0,543,c)|0)+h|0;g=g+1|0;if((g|0)==(d|0)){j=i;break}else h=i}}else j=0;h=Rqa(j>>>0>1073741823?-1:j<<2)|0;if(!e){k[b>>2]=h;return}e=a+20|0;a=0;j=0;do{On(k[(k[e>>2]|0)+(j<<2)>>2]|0,h+(a<<2)|0,543,c);a=(eo(k[(k[e>>2]|0)+(j<<2)>>2]|0,543,c)|0)+a|0;j=j+1|0}while((j|0)!=(d|0));k[b>>2]=h;return}function up(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0;e=oC(k[a+16>>2]|0,c)|0;c=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;if(!e){if((c|0)>0)f=0;else return;do{p[b+(f<<3)>>3]=d;f=f+1|0}while((f|0)!=(c|0));return}f=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((c|0)<=0){if(!f)return}else{g=0;do{h=k[(k[f>>2]|0)+32>>2]|0;i=Hc[k[(k[a>>2]|0)+112>>2]&511](a)|0;nd[h&1023](f,i,g);nd[k[(k[e>>2]|0)+48>>2]&1023](e,b+(g<<3)|0,f);g=g+1|0}while((g|0)!=(c|0))}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);return}function vp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;l=oC(k[a+16>>2]|0,c)|0;if(l){m=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((j|0)<=0){if(!m){r=d;return}}else{n=0;do{o=k[(k[m>>2]|0)+32>>2]|0;p=Hc[k[(k[a>>2]|0)+112>>2]&511](a)|0;nd[o&1023](m,p,n);nd[k[(k[l>>2]|0)+48>>2]&1023](l,b+(n<<3)|0,m);n=n+1|0}while((n|0)!=(j|0))}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=d;return}d=f+56|0;m=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;q=Q;s=j;vva(d);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){n=Rb()|0;t=Q;u=n}else{k[m>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;Yua(e);Yua(n);Ava(m);t=l;u=b;break}Yua(e);B=0;b=Ia(40,f|0,109148,6)|0;l=B;B=0;if((((!(l&1)?(B=0,l=ya(427,c|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(l)|0,B=0,p=Ia(40,b|0,l|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,p|0,109155,21)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,g|0,69562,75);p=B;B=0;do if(!(p&1)){B=0;eb(502,h|0,69984,19);l=B;B=0;if(l&1){l=Rb()|0;b=Q;Yua(g);v=l;w=b;break}B=0;wa(510,i|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;x=b;y=Q;z=1}else{B=0;ua(163,a|0,g|0,h|0,1029,i|0);b=B;B=0;if(b&1)A=1;else{B=0;eb(503,a|0,1240,229);B=0;A=0}b=Rb()|0;l=Q;Yua(i);x=b;y=l;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}}else{l=Rb()|0;v=l;w=Q}while(0);zb(a|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}p=Rb()|0;C=p;D=Q;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}while(0);q=t;s=u;vva(d);Qb(s|0)}function wp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=Hc[k[(k[a>>2]|0)+396>>2]&511](a)|0;l=oC(k[a+16>>2]|0,c)|0;if(l){m=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((j|0)<=0){if(!m){r=d;return}}else{n=0;do{o=k[(k[m>>2]|0)+32>>2]|0;p=Hc[k[(k[a>>2]|0)+504>>2]&511](a)|0;nd[o&1023](m,p,n);nd[k[(k[l>>2]|0)+48>>2]&1023](l,b+(n<<3)|0,m);n=n+1|0}while((n|0)!=(j|0))}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=d;return}d=f+56|0;m=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;q=Q;s=j;vva(d);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){n=Rb()|0;t=Q;u=n}else{k[m>>2]=27560;n=f+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;l=Q;Yua(e);Yua(n);Ava(m);t=l;u=b;break}Yua(e);B=0;b=Ia(40,f|0,109148,6)|0;l=B;B=0;if((((!(l&1)?(B=0,l=ya(427,c|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(l)|0,B=0,p=Ia(40,b|0,l|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,p|0,109155,21)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,g|0,69562,75);p=B;B=0;do if(!(p&1)){B=0;eb(502,h|0,70004,27);l=B;B=0;if(l&1){l=Rb()|0;b=Q;Yua(g);v=l;w=b;break}B=0;wa(510,i|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;x=b;y=Q;z=1}else{B=0;ua(163,a|0,g|0,h|0,1046,i|0);b=B;B=0;if(b&1)A=1;else{B=0;eb(503,a|0,1240,229);B=0;A=0}b=Rb()|0;l=Q;Yua(i);x=b;y=l;z=A}Yua(h);Yua(g);if(z){v=x;w=y}else{C=x;D=y;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}}else{l=Rb()|0;v=l;w=Q}while(0);zb(a|0);C=v;D=w;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}p=Rb()|0;C=p;D=Q;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(n);Ava(m);vva(d);Qb(C|0)}while(0);q=t;s=u;vva(d);Qb(s|0)}function xp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,c)|0;if(j){l=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;m=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((l|0)<=0){if(!m){r=d;return}}else{a=0;do{Fc[k[(k[m>>2]|0)+28>>2]&1023](m,a);nd[k[(k[j>>2]|0)+48>>2]&1023](j,b+(a<<3)|0,m);a=a+1|0}while((a|0)!=(l|0))}Ec[k[(k[m>>2]|0)+4>>2]&1023](m);r=d;return}d=f+56|0;m=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;n=Q;o=l;vva(d);Qb(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,m|0);l=B;B=0;do if(l&1){a=Rb()|0;p=Q;q=a}else{k[m>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;j=Q;Yua(e);Yua(a);Ava(m);p=j;q=b;break}Yua(e);B=0;b=Ia(40,f|0,109148,6)|0;j=B;B=0;if((((!(j&1)?(B=0,j=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(j)|0,B=0,t=Ia(40,b|0,j|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,70032,22);j=B;B=0;if(j&1){j=Rb()|0;b=Q;Yua(g);u=j;v=b;break}B=0;wa(510,i|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;w=b;x=Q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1061,i|0);b=B;B=0;if(b&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}b=Rb()|0;j=Q;Yua(i);w=b;x=j;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(a);Ava(m);vva(d);Qb(A|0)}}else{j=Rb()|0;u=j;v=Q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(a);Ava(m);vva(d);Qb(A|0)}t=Rb()|0;A=t;C=Q;k[f>>2]=27468;k[d>>2]=27488;k[m>>2]=27560;Yua(a);Ava(m);vva(d);Qb(A|0)}while(0);n=p;o=q;vva(d);Qb(o|0)}function yp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0;e=oC(k[a+16>>2]|0,c)|0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if(!e){if((c|0)>0)f=0;else return;do{p[b+(f<<3)>>3]=d;f=f+1|0}while((f|0)!=(c|0));return}f=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((c|0)<=0){if(!f)return}else{a=0;do{Fc[k[(k[f>>2]|0)+28>>2]&1023](f,a);nd[k[(k[e>>2]|0)+48>>2]&1023](e,b+(a<<3)|0,f);a=a+1|0}while((a|0)!=(c|0))}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);return}function zp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,c)|0;if(j){Fc[k[(k[j>>2]|0)+36>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,109148,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1135,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function Ap(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,c)|0;if(j){Fc[k[(k[j>>2]|0)+40>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,109148,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1142,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function Bp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=oC(k[a+16>>2]|0,c)|0;if(j){Fc[k[(k[j>>2]|0)+44>>2]&1023](j,b);r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(d);Qb(m|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);j=B;B=0;do if(j&1){a=Rb()|0;n=Q;o=a}else{k[b>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(e);Yua(a);Ava(b);n=q;o=p;break}Yua(e);B=0;p=Ia(40,f|0,109148,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,c|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,1149,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);Qb(C|0)}while(0);l=n;m=o;vva(d);Qb(m|0)}function Cp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){nd[k[(k[l>>2]|0)+48>>2]&1023](l,b,c);r=e;return}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[c>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);Yua(l);Ava(c);o=q;p=a;break}Yua(f);B=0;a=Ia(40,g|0,109148,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,a|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,121355,13);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(h);u=a;v=q;break}B=0;wa(510,j|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,1156,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;a=Q;Yua(j);w=a;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function Dp(a,b){a=a|0;b=b|0;var c=0,d=0.0;switch(b|0){case 217:{c=k[a+28>>2]|0;d=+Zc[k[(k[c>>2]|0)+64>>2]&255](c);return +d}case 214:{c=k[a+28>>2]|0;d=+Zc[k[(k[c>>2]|0)+48>>2]&255](c);return +d}case 215:{c=k[a+28>>2]|0;d=+Zc[k[(k[c>>2]|0)+52>>2]&255](c);return +d}default:{d=+WJ(k[a+32>>2]|0,b);return +d}}return +(0.0)}function Ep(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;if((c|0)<=0)return;d=a+20|0;a=0;do{e=Rn(k[(k[d>>2]|0)+(a<<2)>>2]|0)|0;k[b+(a<<2)>>2]=e;a=a+1|0}while((a|0)!=(c|0));return}function Fp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=+p[c>>3];f=+p[c+24>>3];g=+p[c+32>>3];h=+p[c+8>>3];i=+p[c+40>>3];j=+p[c+16>>3];k=f*f;f=g*g;g=i*i;i=+aa(+(j*j+(g+(f+(g+(h*h+(k+(e*e+k+f))))))))*.7071067811865475;p[b>>3]=i*(i*4.0)*d;return}function Gp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e+180|0;g=e+176|0;h=e+40|0;i=e+24|0;j=e+12|0;l=e;m=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;n=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;k[g>>2]=0;switch(d|0){case 628:{o=Rqa(m>>>0>1073741823?-1:m<<2)|0;k[g>>2]=o;p=Rqa(m>>>0>536870911?-1:m<<3)|0;q=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((q|0)>0){s=a+24|0;t=0;do{u=Co(k[(k[s>>2]|0)+(t<<2)>>2]|0)|0;k[o+(t<<2)>>2]=u;t=t+1|0}while((t|0)!=(q|0))}xp(a,p,c);if(!(k[b>>2]|0)){v=o;w=p}else{q=k[k[b+4>>2]>>2]|0;Dc[k[(k[q>>2]|0)+16>>2]&255](q,m,o,p,0);v=o;w=p}break}case 629:{p=Rqa(m>>>0>1073741823?-1:m<<2)|0;k[g>>2]=p;o=Rqa(m>>>0>536870911?-1:m<<3)|0;q=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((q|0)>0){t=a+24|0;s=0;do{u=Bo(k[(k[t>>2]|0)+(s<<2)>>2]|0)|0;k[p+(s<<2)>>2]=u;s=s+1|0}while((s|0)!=(q|0))}xp(a,o,c);if(!(k[b>>2]|0)){v=p;w=o}else{q=k[k[b+4>>2]>>2]|0;Dc[k[(k[q>>2]|0)+16>>2]&255](q,m,p,o,0);v=p;w=o}break}case 549:{o=Rqa(n>>>0>1073741823?-1:n<<2)|0;k[g>>2]=o;o=Rqa(n>>>0>536870911?-1:n<<3)|0;vp(a,o,c);rp(a,g,534,943);p=k[g>>2]|0;if(!(k[b>>2]|0)){v=p;w=o}else{m=k[k[b+4>>2]>>2]|0;Dc[k[(k[m>>2]|0)+16>>2]&255](m,n,p,o,0);v=p;w=o}break}case 608:{o=Rqa(n>>>0>1073741823?-1:n<<2)|0;k[g>>2]=o;g=Rqa(n>>>0>536870911?-1:n<<3)|0;p=Hc[k[(k[a>>2]|0)+164>>2]&511](a)|0;if((p|0)>0){m=a+20|0;q=0;do{s=Qn(k[(k[m>>2]|0)+(q<<2)>>2]|0)|0;k[o+(q<<2)>>2]=s;q=q+1|0}while((q|0)!=(p|0))}vp(a,g,c);if(!(k[b>>2]|0)){v=o;w=g}else{c=k[k[b+4>>2]>>2]|0;Dc[k[(k[c>>2]|0)+16>>2]&255](c,n,o,g,0);v=o;w=g}break}default:{g=h+56|0;o=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,o|0);n=B;B=0;if(n&1){n=Rb()|0;x=Q;y=n;vva(g);Qb(y|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,o|0);n=B;B=0;do if(n&1){c=Rb()|0;z=Q;A=c}else{k[o>>2]=27560;c=h+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,o|0,f|0);b=B;B=0;if(b&1){b=Rb()|0;a=Q;Yua(f);Yua(c);Ava(o);z=a;A=b;break}Yua(f);B=0;b=Ia(40,h|0,74808,5)|0;a=B;B=0;if((((((!(a&1)?(B=0,a=Xa(242,b|0,d|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,a|0,144166,2)|0,a=B,B=0,!(a&1)):0)?(B=0,a=ya(427,d|0)|0,p=B,B=0,!(p&1)):0)?(p=Lta(a)|0,B=0,q=Ia(40,b|0,a|0,p|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,q|0,74814,21)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,i|0,69562,75);q=B;B=0;do if(!(q&1)){B=0;eb(502,j|0,115046,19);a=B;B=0;if(a&1){a=Rb()|0;b=Q;Yua(i);C=b;D=a;break}B=0;wa(510,l|0,o|0);a=B;B=0;if(a&1){a=Rb()|0;E=Q;F=a;G=1}else{B=0;ua(163,p|0,i|0,j|0,1291,l|0);a=B;B=0;if(a&1)H=1;else{B=0;eb(503,p|0,1240,229);B=0;H=0}a=Rb()|0;b=Q;Yua(l);E=b;F=a;G=H}Yua(j);Yua(i);if(G){C=E;D=F}else{I=E;J=F;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(c);Ava(o);vva(g);Qb(J|0)}}else{a=Rb()|0;C=Q;D=a}while(0);zb(p|0);I=C;J=D;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(c);Ava(o);vva(g);Qb(J|0)}q=Rb()|0;I=Q;J=q;k[h>>2]=27468;k[g>>2]=27488;k[o>>2]=27560;Yua(c);Ava(o);vva(g);Qb(J|0)}while(0);x=z;y=A;vva(g);Qb(y|0)}}if(!v){Tqa(w);r=e;return}Tqa(v);Tqa(w);r=e;return}function Hp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((c|0)<=0)return;d=a+24|0;a=0;do{e=Co(k[(k[d>>2]|0)+(a<<2)>>2]|0)|0;k[b+(a<<2)>>2]=e;a=a+1|0}while((a|0)!=(c|0));return}function Ip(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((c|0)<=0)return;d=a+24|0;a=0;do{e=Bo(k[(k[d>>2]|0)+(a<<2)>>2]|0)|0;k[b+(a<<2)>>2]=e;a=a+1|0}while((a|0)!=(c|0));return}function Jp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((c|0)<=0)return;d=a+24|0;a=0;do{e=Ao(k[(k[d>>2]|0)+(a<<2)>>2]|0)|0;k[b+(a<<2)>>2]=e;a=a+1|0}while((a|0)!=(c|0));return}function Kp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;if((f|0)>0){h=0;do{p[g+(h<<3)>>3]=+p[b+((h*3|0)+1<<3)>>3];h=h+1|0}while((h|0)!=(f|0))}rd[k[(k[a>>2]|0)+500>>2]&511](a,e,g,c);Tqa(g);r=d;return +(+p[e>>3])}function Lp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d;f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;g=Rqa(f>>>0>536870911?-1:f<<3)|0;if((f|0)>0){h=0;do{p[g+(h<<3)>>3]=+p[b+((h*3|0)+2<<3)>>3];h=h+1|0}while((h|0)!=(f|0))}rd[k[(k[a>>2]|0)+500>>2]&511](a,e,g,c);Tqa(g);r=d;return +(+p[e>>3])}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e;cO(k[a+36>>2]|0,f,198);g=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;h=(g|0)>0;if(d){if(!h){r=e;return}d=a+24|0;i=0;do{j=k[f>>2]|0;l=(ma(Bo(k[(k[d>>2]|0)+(i<<2)>>2]|0)|0,j)|0)+c|0;k[b+(i<<2)>>2]=l;i=i+1|0}while((i|0)!=(g|0));r=e;return}else{if(!h){r=e;return}h=a+24|0;a=0;do{i=k[f>>2]|0;d=(ma(Co(k[(k[h>>2]|0)+(a<<2)>>2]|0)|0,i)|0)+c|0;k[b+(a<<2)>>2]=d;a=a+1|0}while((a|0)!=(g|0));r=e;return}}function Np(a){a=a|0;return +pC(k[a+16>>2]|0,287)>0.0|0}function Op(a){a=a|0;return k[a+8>>2]|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;nC(k[a+16>>2]|0,b,c);return}function Qp(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0;i=r;r=r+1056|0;j=i+1040|0;l=i+856|0;m=i+1028|0;n=i+1016|0;o=i+1004|0;q=i+720|0;s=i+992|0;t=i+708|0;u=i+696|0;v=i;w=i+560|0;x=i+276|0;y=i+264|0;z=i+116|0;A=i+424|0;C=i+104|0;D=i+92|0;E=i+80|0;F=i+288|0;G=i+68|0;H=i+56|0;I=i+44|0;J=i+128|0;K=i+32|0;L=i+20|0;M=i+8|0;switch(f|0){case 1:{N=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;O=Rqa(N>>>0>1073741823?-1:N<<2)|0;P=Rqa(N>>>0>536870911?-1:N<<3)|0;R=(N|0)>0;if(R){S=k[c+72>>2]|0;T=ma(k[a+12>>2]|0,N)|0;U=0;do{k[O+(U<<2)>>2]=k[S+(T+U<<2)>>2];U=U+1|0}while((U|0)!=(N|0))}U=k[c+52>>2]|0;if((U|0)==(d|0)){if(R){T=0;do{p[P+(T<<3)>>3]=+p[b+((k[O+(T<<2)>>2]|0)+-1<<3)>>3];T=T+1|0}while((T|0)!=(N|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,g,P,738)}else{if((U+1|0)!=(d|0)){U=q+56|0;T=q+4|0;k[q>>2]=27524;k[U>>2]=27544;B=0;wa(508,q+56|0,T|0);S=B;B=0;if(S&1){S=Rb()|0;V=Q;W=S;vva(U);Qb(W|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[U>>2]=27488;B=0;va(448,T|0);S=B;B=0;do if(S&1){X=Rb()|0;Y=Q;Z=X}else{k[T>>2]=27560;X=q+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[q+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,T|0,j|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(j);Yua(X);Ava(T);Y=$;Z=_;break}Yua(j);B=0;_=Ia(40,q|0,70067,84)|0;$=B;B=0;a:do if((((((!($&1)?(B=0,aa=ya(427,g|0)|0,ba=B,B=0,!(ba&1)):0)?(ba=Lta(aa)|0,B=0,ca=Ia(40,_|0,aa|0,ba|0)|0,ba=B,B=0,!(ba&1)):0)?(B=0,ba=Ia(40,ca|0,70152,5)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Xa(242,ba|0,d|0)|0,ba=B,B=0,!(ba&1)):0)?(B=0,ba=Ia(40,ca|0,70158,5)|0,ca=B,B=0,!(ca&1)):0)?(B=0,Xa(239,ba|0,0)|0,ba=B,B=0,!(ba&1)):0){ba=Ab(20)|0;B=0;eb(502,s|0,69562,75);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,t|0,70055,11);aa=B;B=0;if(aa&1){aa=Rb()|0;da=Q;Yua(s);ea=da;fa=aa;break}B=0;wa(510,u|0,T|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ga=1;ha=Q;ia=aa}else{B=0;ua(163,ba|0,s|0,t|0,1453,u|0);aa=B;B=0;if(aa&1)ja=1;else{B=0;eb(503,ba|0,1240,229);B=0;ja=0}aa=Rb()|0;da=Q;Yua(u);ga=ja;ha=da;ia=aa}Yua(t);Yua(s);if(ga){ea=ha;fa=ia}else{ka=ha;la=ia;break a}}else{aa=Rb()|0;ea=Q;fa=aa}while(0);zb(ba|0);ka=ea;la=fa}else na=87;while(0);if((na|0)==87){_=Rb()|0;ka=Q;la=_}k[q>>2]=27468;k[U>>2]=27488;k[T>>2]=27560;Yua(X);Ava(T);vva(U);oa=ka;pa=la;Qb(pa|0)}while(0);V=Y;W=Z;vva(U);Qb(W|0)}W=Rqa(e>>>0>536870911?-1:e<<3)|0;U=(e|0)>0;if(U)TEa(W|0,b+((ma(d+-1|0,e)|0)<<3)|0,e<<3|0)|0;Z=Qqa(24)|0;B=0;ib(287,Z|0,g|0,W|0,e|0);Y=B;B=0;if(Y&1){Y=Rb()|0;V=Q;Sqa(Z);oa=V;pa=Y;Qb(pa|0)}b:do if(U){c:do if(R){Y=0;d:while(1){V=0;do{la=b+((ma((k[O+(V<<2)>>2]|0)+-1|0,e)|0)+Y<<3)|0;p[P+(V<<3)>>3]=+p[la>>3];V=V+1|0}while((V|0)!=(N|0));switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{V=Qqa(16)|0;B=0;ib(284,V|0,g|0,P|0,738);la=B;B=0;if(la&1){qa=V;na=27;break d}gm(Z,V);break}case 625:{V=Qqa(16)|0;B=0;ib(285,V|0,g|0,P|0,738);la=B;B=0;if(la&1){ra=V;na=26;break d}gm(Z,V);break}case 623:{V=Qqa(16)|0;B=0;ib(286,V|0,g|0,P|0,738);la=B;B=0;if(la&1){sa=V;na=25;break d}gm(Z,V);break}default:{na=42;break c}}Y=Y+1|0;if((Y|0)>=(e|0))break b}if((na|0)==25){Y=Rb()|0;ta=Y;xa=Q;za=sa;na=41;break}else if((na|0)==26){Y=Rb()|0;Aa=Q;Ba=Y;Ca=ra;na=37;break}else if((na|0)==27){Y=Rb()|0;Da=Y;Ea=Q;Fa=qa;na=33;break}}else{Y=0;e:while(1){switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{ba=Qqa(16)|0;B=0;ib(284,ba|0,g|0,P|0,738);V=B;B=0;if(V&1){Ga=ba;na=32;break e}gm(Z,ba);break}case 625:{ba=Qqa(16)|0;B=0;ib(285,ba|0,g|0,P|0,738);V=B;B=0;if(V&1){Ha=ba;na=36;break e}gm(Z,ba);break}case 623:{ba=Qqa(16)|0;B=0;ib(286,ba|0,g|0,P|0,738);V=B;B=0;if(V&1){Ja=ba;na=40;break e}gm(Z,ba);break}default:{na=42;break c}}Y=Y+1|0;if((Y|0)>=(e|0))break b}if((na|0)==32){Y=Rb()|0;Da=Y;Ea=Q;Fa=Ga;na=33;break}else if((na|0)==36){Y=Rb()|0;Aa=Q;Ba=Y;Ca=Ha;na=37;break}else if((na|0)==40){Y=Rb()|0;ta=Y;xa=Q;za=Ja;na=41;break}}while(0);if((na|0)==33){Sqa(Fa);oa=Ea;pa=Da;Qb(pa|0)}else if((na|0)==37){Sqa(Ca);oa=Aa;pa=Ba;Qb(pa|0)}else if((na|0)==41){Sqa(za);oa=xa;pa=ta;Qb(pa|0)}else if((na|0)==42){X=l+56|0;Y=l+4|0;k[l>>2]=27524;k[X>>2]=27544;B=0;wa(508,l+56|0,Y|0);ba=B;B=0;if(ba&1){ba=Rb()|0;Ka=Q;La=ba;vva(X);Qb(La|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[X>>2]=27488;B=0;va(448,Y|0);ba=B;B=0;do if(ba&1){V=Rb()|0;Ma=Q;Na=V}else{k[Y>>2]=27560;V=l+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[l+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,Y|0,j|0);la=B;B=0;if(la&1){la=Rb()|0;ka=Q;Yua(j);Yua(V);Ava(Y);Ma=ka;Na=la;break}Yua(j);B=0;la=Ia(40,l|0,144350,19)|0;ka=B;B=0;f:do if(!(ka&1)?(B=0,Xa(239,la|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,m|0,69562,75);q=B;B=0;do if(!(q&1)){B=0;eb(502,n|0,70055,11);fa=B;B=0;if(fa&1){fa=Rb()|0;ea=Q;Yua(m);Pa=ea;Qa=fa;break}B=0;wa(510,o|0,Y|0);fa=B;B=0;if(fa&1){fa=Rb()|0;Ra=Q;Sa=fa;Ta=1}else{B=0;ua(163,T|0,m|0,n|0,1447,o|0);fa=B;B=0;if(fa&1)Ua=1;else{B=0;eb(503,T|0,1240,229);B=0;Ua=0}fa=Rb()|0;ea=Q;Yua(o);Ra=ea;Sa=fa;Ta=Ua}Yua(n);Yua(m);if(Ta){Pa=Ra;Qa=Sa}else{Va=Ra;Wa=Sa;break f}}else{fa=Rb()|0;Pa=Q;Qa=fa}while(0);zb(T|0);Va=Pa;Wa=Qa}else na=57;while(0);if((na|0)==57){la=Rb()|0;Va=Q;Wa=la}k[l>>2]=27468;k[X>>2]=27488;k[Y>>2]=27560;Yua(V);Ava(Y);vva(X);oa=Va;pa=Wa;Qb(pa|0)}while(0);Ka=Ma;La=Na;vva(X);Qb(La|0)}}while(0);mC(k[a+16>>2]|0,Z)|0;Tqa(W)}Tqa(P);Tqa(O);r=i;return}case 2:{O=k[c+56>>2]|0;g:do if((O|0)==(d|0))switch(h|0){case 5:{c=k[a+16>>2]|0;P=Qqa(12)|0;B=0;eb(507,P|0,g|0,+p[b+(k[a+12>>2]<<3)>>3]!=0.0|0);W=B;B=0;if(!(W&1)){mC(c,P)|0;break g}c=Rb()|0;W=Q;Sqa(P);oa=W;pa=c;Qb(pa|0);break}case 6:{c=k[a+16>>2]|0;W=Qqa(12)|0;B=0;eb(508,W|0,g|0,~~+p[b+(k[a+12>>2]<<3)>>3]|0);P=B;B=0;if(!(P&1)){mC(c,W)|0;break g}c=Rb()|0;P=Q;Sqa(W);oa=P;pa=c;Qb(pa|0);break}case 7:{c=k[a+16>>2]|0;P=Qqa(16)|0;B=0;Oa(58,P|0,g|0,+(+p[b+(k[a+12>>2]<<3)>>3]));W=B;B=0;if(!(W&1)){mC(c,P)|0;break g}c=Rb()|0;W=Q;Sqa(P);oa=W;pa=c;Qb(pa|0);break}default:{c=w+56|0;W=w+4|0;k[w>>2]=27524;k[c>>2]=27544;B=0;wa(508,w+56|0,W|0);P=B;B=0;if(P&1){P=Rb()|0;Ya=Q;Za=P;vva(c);Qb(Za|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[c>>2]=27488;B=0;va(448,W|0);P=B;B=0;do if(P&1){Z=Rb()|0;_a=Q;$a=Z}else{k[W>>2]=27560;Z=w+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[w+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,W|0,j|0);La=B;B=0;if(La&1){La=Rb()|0;Na=Q;Yua(j);Yua(Z);Ava(W);_a=Na;$a=La;break}Yua(j);B=0;La=Ia(40,w|0,70164,47)|0;Na=B;B=0;h:do if((!(Na&1)?(B=0,Ma=Xa(242,La|0,h|0)|0,Ka=B,B=0,!(Ka&1)):0)?(B=0,Xa(239,Ma|0,0)|0,Ma=B,B=0,!(Ma&1)):0){Ma=Ab(20)|0;B=0;eb(502,x|0,69562,75);Ka=B;B=0;do if(!(Ka&1)){B=0;eb(502,y|0,70055,11);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Va=Q;Yua(x);ab=Va;bb=Wa;break}B=0;wa(510,z|0,W|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;cb=1;db=Q;fb=Wa}else{B=0;ua(163,Ma|0,x|0,y|0,1473,z|0);Wa=B;B=0;if(Wa&1)gb=1;else{B=0;eb(503,Ma|0,1240,229);B=0;gb=0}Wa=Rb()|0;Va=Q;Yua(z);cb=gb;db=Va;fb=Wa}Yua(y);Yua(x);if(cb){ab=db;bb=fb}else{hb=db;jb=fb;break h}}else{Wa=Rb()|0;ab=Q;bb=Wa}while(0);zb(Ma|0);hb=ab;jb=bb}else na=123;while(0);if((na|0)==123){La=Rb()|0;hb=Q;jb=La}k[w>>2]=27468;k[c>>2]=27488;k[W>>2]=27560;Yua(Z);Ava(W);vva(c);oa=hb;pa=jb;Qb(pa|0)}while(0);Ya=_a;Za=$a;vva(c);Qb(Za|0)}}else{if((O+1|0)!=(d|0)){W=F+56|0;P=F+4|0;k[F>>2]=27524;k[W>>2]=27544;B=0;wa(508,F+56|0,P|0);X=B;B=0;if(X&1){X=Rb()|0;kb=Q;lb=X;vva(W);Qb(lb|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[W>>2]=27488;B=0;va(448,P|0);X=B;B=0;do if(X&1){La=Rb()|0;mb=Q;nb=La}else{k[P>>2]=27560;La=F+36|0;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[F+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,P|0,j|0);Na=B;B=0;if(Na&1){Na=Rb()|0;V=Q;Yua(j);Yua(La);Ava(P);mb=V;nb=Na;break}Yua(j);B=0;Na=Ia(40,F|0,70212,86)|0;V=B;B=0;i:do if((((((!(V&1)?(B=0,Ka=ya(427,g|0)|0,T=B,B=0,!(T&1)):0)?(T=Lta(Ka)|0,B=0,Wa=Ia(40,Na|0,Ka|0,T|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,Wa|0,70152,5)|0,Wa=B,B=0,!(Wa&1)):0)?(B=0,Wa=Xa(242,T|0,d|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,Wa|0,70158,5)|0,Wa=B,B=0,!(Wa&1)):0)?(B=0,Xa(239,T|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,G|0,69562,75);Wa=B;B=0;do if(!(Wa&1)){B=0;eb(502,H|0,70055,11);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Va=Q;Yua(G);ob=Va;pb=Ka;break}B=0;wa(510,I|0,P|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;qb=1;rb=Q;sb=Ka}else{B=0;ua(163,T|0,G|0,H|0,1493,I|0);Ka=B;B=0;if(Ka&1)tb=1;else{B=0;eb(503,T|0,1240,229);B=0;tb=0}Ka=Rb()|0;Va=Q;Yua(I);qb=tb;rb=Va;sb=Ka}Yua(H);Yua(G);if(qb){ob=rb;pb=sb}else{ub=rb;vb=sb;break i}}else{Ka=Rb()|0;ob=Q;pb=Ka}while(0);zb(T|0);ub=ob;vb=pb}else na=193;while(0);if((na|0)==193){Na=Rb()|0;ub=Q;vb=Na}k[F>>2]=27468;k[W>>2]=27488;k[P>>2]=27560;Yua(La);Ava(P);vva(W);oa=ub;pa=vb;Qb(pa|0)}while(0);kb=mb;lb=nb;vva(W);Qb(lb|0)}P=Rqa(e>>>0>536870911?-1:e<<3)|0;X=(e|0)>0;if(X)TEa(P|0,b+((ma(d+-1|0,e)|0)<<3)|0,e<<3|0)|0;c=Qqa(24)|0;B=0;ib(287,c|0,g|0,P|0,e|0);Na=B;B=0;if(Na&1){Na=Rb()|0;V=Q;Sqa(c);oa=V;pa=Na;Qb(pa|0)}j:do if(X){Na=a+12|0;V=0;k:while(1){Z=b+((ma(k[Na>>2]|0,e)|0)+V<<3)|0;p[v>>3]=+p[Z>>3];switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{Z=Qqa(16)|0;B=0;ib(284,Z|0,g|0,v|0,736);Wa=B;B=0;if(Wa&1){wb=Z;na=141;break k}gm(c,Z);break}case 625:{Z=Qqa(16)|0;B=0;ib(285,Z|0,g|0,v|0,736);Wa=B;B=0;if(Wa&1){xb=Z;na=144;break k}gm(c,Z);break}case 623:{Z=Qqa(16)|0;B=0;ib(286,Z|0,g|0,v|0,736);Wa=B;B=0;if(Wa&1){yb=Z;na=147;break k}gm(c,Z);break}default:{na=148;break k}}V=V+1|0;if((V|0)>=(e|0))break j}if((na|0)==141){V=Rb()|0;Na=Q;Sqa(wb);oa=Na;pa=V;Qb(pa|0)}else if((na|0)==144){V=Rb()|0;Na=Q;Sqa(xb);oa=Na;pa=V;Qb(pa|0)}else if((na|0)==147){V=Rb()|0;Na=Q;Sqa(yb);oa=Na;pa=V;Qb(pa|0)}else if((na|0)==148){V=A+56|0;Na=A+4|0;k[A>>2]=27524;k[V>>2]=27544;B=0;wa(508,A+56|0,Na|0);La=B;B=0;if(La&1){La=Rb()|0;Bb=Q;Cb=La;vva(V);Qb(Cb|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[V>>2]=27488;B=0;va(448,Na|0);La=B;B=0;do if(La&1){Z=Rb()|0;Db=Q;Eb=Z}else{k[Na>>2]=27560;Z=A+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[A+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,Na|0,j|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ma=Q;Yua(j);Yua(Z);Ava(Na);Db=Ma;Eb=Wa;break}Yua(j);B=0;Wa=Ia(40,A|0,144350,19)|0;Ma=B;B=0;l:do if(!(Ma&1)?(B=0,Xa(239,Wa|0,0)|0,Ka=B,B=0,!(Ka&1)):0){Ka=Ab(20)|0;B=0;eb(502,C|0,69562,75);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,D|0,70055,11);l=B;B=0;if(l&1){l=Rb()|0;Qa=Q;Yua(C);Fb=Qa;Gb=l;break}B=0;wa(510,E|0,Na|0);l=B;B=0;if(l&1){l=Rb()|0;Hb=Q;Ib=l;Jb=1}else{B=0;ua(163,Ka|0,C|0,D|0,1487,E|0);l=B;B=0;if(l&1)Kb=1;else{B=0;eb(503,Ka|0,1240,229);B=0;Kb=0}l=Rb()|0;Qa=Q;Yua(E);Hb=Qa;Ib=l;Jb=Kb}Yua(D);Yua(C);if(Jb){Fb=Hb;Gb=Ib}else{Lb=Hb;Mb=Ib;break l}}else{l=Rb()|0;Fb=Q;Gb=l}while(0);zb(Ka|0);Lb=Fb;Mb=Gb}else na=163;while(0);if((na|0)==163){Wa=Rb()|0;Lb=Q;Mb=Wa}k[A>>2]=27468;k[V>>2]=27488;k[Na>>2]=27560;Yua(Z);Ava(Na);vva(V);oa=Lb;pa=Mb;Qb(pa|0)}while(0);Bb=Db;Cb=Eb;vva(V);Qb(Cb|0)}}while(0);mC(k[a+16>>2]|0,c)|0;Tqa(P)}while(0);r=i;return}default:{i=J+56|0;a=J+4|0;k[J>>2]=27524;k[i>>2]=27544;B=0;wa(508,J+56|0,a|0);Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Nb=Q;Ob=Cb;vva(i);Qb(Ob|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[i>>2]=27488;B=0;va(448,a|0);Cb=B;B=0;do if(Cb&1){Eb=Rb()|0;Pb=Q;Sb=Eb}else{k[a>>2]=27560;Eb=J+36|0;k[Eb>>2]=0;k[Eb+4>>2]=0;k[Eb+8>>2]=0;k[Eb+12>>2]=0;k[J+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,a|0,j|0);Db=B;B=0;if(Db&1){Db=Rb()|0;Bb=Q;Yua(j);Yua(Eb);Ava(a);Pb=Bb;Sb=Db;break}Yua(j);B=0;Db=Ia(40,J|0,70299,33)|0;Bb=B;B=0;m:do if(((!(Bb&1)?(B=0,Mb=Xa(242,Db|0,f|0)|0,Lb=B,B=0,!(Lb&1)):0)?(B=0,Lb=Ia(40,Mb|0,70333,16)|0,Mb=B,B=0,!(Mb&1)):0)?(B=0,Xa(239,Lb|0,0)|0,Lb=B,B=0,!(Lb&1)):0){Lb=Ab(20)|0;B=0;eb(502,K|0,69562,75);Mb=B;B=0;do if(!(Mb&1)){B=0;eb(502,L|0,70055,11);A=B;B=0;if(A&1){A=Rb()|0;Gb=Q;Yua(K);Tb=Gb;Ub=A;break}B=0;wa(510,M|0,a|0);A=B;B=0;if(A&1){A=Rb()|0;Vb=1;Wb=Q;Xb=A}else{B=0;ua(163,Lb|0,K|0,L|0,1495,M|0);A=B;B=0;if(A&1)Yb=1;else{B=0;eb(503,Lb|0,1240,229);B=0;Yb=0}A=Rb()|0;Gb=Q;Yua(M);Vb=Yb;Wb=Gb;Xb=A}Yua(L);Yua(K);if(Vb){Tb=Wb;Ub=Xb}else{Zb=Wb;_b=Xb;break m}}else{A=Rb()|0;Tb=Q;Ub=A}while(0);zb(Lb|0);Zb=Tb;_b=Ub}else na=219;while(0);if((na|0)==219){Db=Rb()|0;Zb=Q;_b=Db}k[J>>2]=27468;k[i>>2]=27488;k[a>>2]=27560;Yua(Eb);Ava(a);vva(i);oa=Zb;pa=_b;Qb(pa|0)}while(0);Nb=Pb;Ob=Sb;vva(i);Qb(Ob|0)}}}function Rp(a){a=a|0;return k[a+12>>2]|0}function Sp(a,b,c){a=a|0;b=b|0;c=c|0;switch(b|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}tC(k[a+16>>2]|0,b,c);return}function Tp(a,b){a=a|0;b=b|0;var c=0;switch(b|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:{c=1;break}default:c=0}return c|0}function Up(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}d=k[a+16>>2]|0;a=Qqa(12)|0;B=0;eb(508,a|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}mC(d,a)|0;return}function Vp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+-4|0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}a=k[d+16>>2]|0;d=Qqa(12)|0;B=0;eb(508,d|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(d);Qb(b|0)}mC(a,d)|0;return}function Wp(a,b,c){a=a|0;b=+b;c=c|0;var d=0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}d=k[a+16>>2]|0;a=Qqa(16)|0;B=0;Oa(58,a|0,c|0,+b);c=B;B=0;if(c&1){c=Rb()|0;Sqa(a);Qb(c|0)}mC(d,a)|0;return}function Xp(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=a+-4|0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}a=k[d+16>>2]|0;d=Qqa(16)|0;B=0;Oa(58,d|0,c|0,+b);c=B;B=0;if(c&1){c=Rb()|0;Sqa(d);Qb(c|0)}mC(a,d)|0;return}function Yp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}d=k[a+16>>2]|0;a=Qqa(12)|0;B=0;eb(507,a|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(a);Qb(b|0)}mC(d,a)|0;return}function Zp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=a+-4|0;switch(c|0){case 36:case 38:case 39:case 40:case 63:case 64:case 70:case 104:case 105:case 115:case 123:case 124:case 127:case 128:case 141:case 145:case 148:case 149:case 203:case 204:case 205:case 206:case 214:case 215:case 217:case 218:case 219:case 220:case 221:case 222:case 223:case 225:case 227:case 246:case 262:case 263:case 287:case 339:case 353:case 379:case 388:case 467:case 468:case 469:case 471:case 472:case 645:case 653:case 659:case 664:case 665:case 666:case 668:case 674:case 677:case 679:case 684:case 685:case 686:case 687:case 688:case 698:case 699:case 706:case 734:case 735:case 928:case 941:case 948:case 992:case 993:case 994:case 995:case 999:case 1e3:case 1001:break;default:return}a=k[d+16>>2]|0;d=Qqa(12)|0;B=0;eb(507,d|0,c|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Sqa(d);Qb(b|0)}mC(a,d)|0;return}function _p(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+180|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;cO(k[a+36>>2]|0,d,942);i=k[d>>2]|0;if((i&-2|0)==924){j=+pC(k[a+16>>2]|0,928)<=0.0;r=b;return j|0}switch(i|0){case 926:{j=!(+pC(k[a+16>>2]|0,928)>0.0);r=b;return j|0}case 921:case 922:case 923:case 927:{j=!(+rC(k[a+16>>2]|0,928)>0.0);r=b;return j|0}default:{j=e+56|0;b=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;m=a;vva(j);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){i=Rb()|0;n=Q;o=i}else{k[b>>2]=27560;i=e+36|0;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;k[i+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);d=B;B=0;if(d&1){d=Rb()|0;p=Q;Yua(c);Yua(i);Ava(b);n=p;o=d;break}Yua(c);B=0;d=Ia(40,e|0,70350,35)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,d|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,f|0,69562,75);p=B;B=0;do if(!(p&1)){B=0;eb(502,g|0,70386,10);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);t=s;u=q;break}B=0;wa(510,h|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=q;w=Q;x=1}else{B=0;ua(163,d|0,f|0,g|0,1550,h|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,d|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(h);v=q;w=s;x=y}Yua(g);Yua(f);if(x){t=w;u=v}else{z=w;A=v;k[e>>2]=27468;k[j>>2]=27488;k[b>>2]=27560;Yua(i);Ava(b);vva(j);Qb(A|0)}}else{s=Rb()|0;t=Q;u=s}while(0);zb(d|0);z=t;A=u;k[e>>2]=27468;k[j>>2]=27488;k[b>>2]=27560;Yua(i);Ava(b);vva(j);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[e>>2]=27468;k[j>>2]=27488;k[b>>2]=27560;Yua(i);Ava(b);vva(j);Qb(A|0)}while(0);l=n;m=o;vva(j);Qb(m|0)}}return 0}function $p(a){a=a|0;return +rC(k[a+16>>2]|0,206)<0.0|0}function aq(a){a=a|0;return +pC(k[a+16>>2]|0,207)>0.0|0}function bq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;g=f>>>0>536870911?-1:f<<3;h=Rqa(g)|0;i=Rqa(g)|0;g=a+36|0;dO(k[g>>2]|0,c,42);dO(k[g>>2]|0,d,43);dO(k[g>>2]|0,e,41);xp(a,h,64);if((f|0)<=0){j=k[a>>2]|0;l=j+48|0;m=k[l>>2]|0;rd[m&511](a,40,i,738);Tqa(h);Tqa(i);r=b;return}n=+p[d>>3];o=+p[c>>3];q=+p[e>>3];s=o-n;e=0;do{t=+p[h+(e<<3)>>3];do if(!(t>n))if(t<o){p[i+(e<<3)>>3]=q;break}else{p[i+(e<<3)>>3]=(t-n)*q/s;break}else p[i+(e<<3)>>3]=0.0;while(0);e=e+1|0}while((e|0)!=(f|0));j=k[a>>2]|0;l=j+48|0;m=k[l>>2]|0;rd[m&511](a,40,i,738);Tqa(h);Tqa(i);r=b;return}function cq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0;b=r;r=r+96|0;c=b+88|0;d=b+80|0;e=b+72|0;f=b+64|0;g=b+56|0;h=b+48|0;i=b+40|0;j=b+32|0;l=b+24|0;m=b+16|0;n=b+8|0;o=b;q=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;s=Rqa(q>>>0>536870911?-1:q<<3)|0;t=a+36|0;dO(k[t>>2]|0,c,47);dO(k[t>>2]|0,d,48);dO(k[t>>2]|0,e,49);dO(k[t>>2]|0,f,50);dO(k[t>>2]|0,g,51);dO(k[t>>2]|0,h,52);dO(k[t>>2]|0,i,53);dO(k[t>>2]|0,j,54);dO(k[t>>2]|0,l,55);dO(k[t>>2]|0,m,56);dO(k[t>>2]|0,n,57);dO(k[t>>2]|0,o,58);t=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;u=t*3|0;v=Rqa(u>>>0>536870911?-1:u<<3)|0;Ko(v,k[a+24>>2]|0,t,0);w=+p[f>>3];x=+p[g>>3];y=(+p[h>>3]-x)*.5;z=y*y;A=w*w;B=z-A;C=+$(+(+aa(+B)));D=(B==-G?G:C)/y;C=D*D;E=1.0-C;if((q|0)<=0){F=k[a>>2]|0;H=F+48|0;I=k[H>>2]|0;rd[I&511](a,38,s,738);Tqa(v);Tqa(s);r=b;return}J=(+ka(+((D+1.0)/(1.0-D)))*.5-D)*(E/+ba(+D,3.0));K=+p[i>>3];L=+p[j>>3];M=+p[l>>3];N=y+x+M;x=-N;O=N*N;N=-z-A+O;P=A*O;Q=A*(y*-8.0)*x;R=A*2.0;S=R-z*2.0;T=+aa(+((y-w)*(w+y)));U=T*1.4142135623730951;V=B+O;W=+ba(+y,4.0);y=+ba(+w,4.0);w=+ba(+x,4.0);X=E/(D*C);C=+p[e>>3];D=+p[d>>3]+-1.0;E=D/(J*D+1.0);D=C*x;x=+p[c>>3];J=+p[m>>3];Y=+p[n>>3]*J+ +p[o>>3]*(M-J);o=0;do{n=o*3|0;J=+p[v+(n<<3)>>3]-K;M=+p[v+(n+1<<3)>>3]-L;Z=J*J;J=M*M;M=J+(Z+N);_=+aa(+((z*(Z-A+J)+P)*4.0+M*M));ca=_+(J+(Z+V));da=+aa(+ca);ea=Z+J;fa=J+(Z+O);ga=ea*O;ha=da-U;ia=Q*(S+U*da)*(z*(ea*(_+(ea*2.0-R))+(ga-w))+(fa*fa*(_+fa)+(ea*W+ea*y)+A*(w-ga-ea*(_+(Z*2.0+J*2.0)))))/((U+da)*(ha*ha*(_*T*+ba(+ca,3.5))));ca=B/(z+(_+M)*.5);M=+$(+(+aa(+ca)));_=ca==-G?G:M;M=Y+x*(C-E*(D*ia+C*(X*(+ka(+((_+1.0)/(1.0-_)))*.5-_))));p[s+(o<<3)>>3]=M;o=o+1|0}while((o|0)!=(q|0));F=k[a>>2]|0;H=F+48|0;I=k[H>>2]|0;rd[I&511](a,38,s,738);Tqa(v);Tqa(s);r=b;return}function dq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;j=f+24|0;m=f+12|0;n=f;switch(d|0){case 1:{o=Qqa(36)|0;B=0;va(486,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Sqa(o);s=p;t=q;Qb(s|0)}k[a+16>>2]=o;k[a+20>>2]=0;o=(k[b>>2]|0)+4|0;k[b>>2]=o;q=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[q>>0]=p;i[q+1>>0]=p>>8;i[q+2>>0]=p>>16;i[q+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;q=a+12|0;o=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[q>>0]=o;i[q+1>>0]=o>>8;i[q+2>>0]=o>>16;i[q+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;q=a+44|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[q>>0]=p;i[q+1>>0]=p>>8;i[q+2>>0]=p>>16;i[q+3>>0]=p>>24;p=k[b>>2]|0;q=p+4|0;k[b>>2]=q;o=i[q>>0]|0;k[b>>2]=p+5;if(o&1){u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}o=Rqa(e>>>0>1073741823?-1:e<<2)|0;k[a+40>>2]=o;p=k[b>>2]|0;q=e<<2;TEa(o|0,p|0,q|0)|0;k[b>>2]=p+q;u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}case 0:{q=k[b>>2]|0;i[q>>0]=56;i[q+1>>0]=2;i[q+2>>0]=0;i[q+3>>0]=0;q=(k[b>>2]|0)+4|0;k[b>>2]=q;p=a+8|0;o=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[q>>0]=o;i[q+1>>0]=o>>8;i[q+2>>0]=o>>16;i[q+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;q=a+12|0;p=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[o>>0]=p;i[o+1>>0]=p>>8;i[o+2>>0]=p>>16;i[o+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;o=a+44|0;q=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[p>>0]=q;i[p+1>>0]=q>>8;i[p+2>>0]=q>>16;i[p+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;p=a+40|0;o=(k[p>>2]|0)==0;i[q>>0]=o&1;q=(k[b>>2]|0)+1|0;k[b>>2]=q;if(o){u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}o=e<<2;TEa(q|0,k[p>>2]|0,o|0)|0;k[b>>2]=(k[b>>2]|0)+o;u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}case 2:{o=(k[a+40>>2]|0)==0;p=(k[c>>2]|0)+17|0;k[c>>2]=p;if(o){u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}k[c>>2]=p+(e<<2);u=a+16|0;v=k[u>>2]|0;lh(v,b,c,d);r=f;return}default:{f=h+56|0;d=h+4|0;k[h>>2]=27524;k[f>>2]=27544;B=0;wa(508,h+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(f);Qb(x|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[f>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;y=Q;z=b}else{k[d>>2]=27560;b=h+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,d|0,g|0);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(g);Yua(b);Ava(d);y=u;z=v;break}Yua(g);B=0;v=Ia(40,h|0,143951,43)|0;u=B;B=0;a:do if(!(u&1)?(B=0,Xa(239,v|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,j|0,69562,75);e=B;B=0;do if(!(e&1)){B=0;eb(502,m|0,70397,15);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Yua(j);A=p;C=o;break}B=0;wa(510,n|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;D=o;E=Q;F=1}else{B=0;ua(163,a|0,j|0,m|0,1730,n|0);o=B;B=0;if(o&1)G=1;else{B=0;eb(503,a|0,1240,229);B=0;G=0}o=Rb()|0;p=Q;Yua(n);D=o;E=p;F=G}Yua(m);Yua(j);if(F){A=D;C=E}else{H=D;I=E;break a}}else{p=Rb()|0;A=p;C=Q}while(0);zb(a|0);H=A;I=C}else J=19;while(0);if((J|0)==19){v=Rb()|0;H=v;I=Q}k[h>>2]=27468;k[f>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(f);s=H;t=I;Qb(s|0)}while(0);w=y;x=z;vva(f);Qb(x|0)}}}function eq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;c=r;r=r+208|0;d=c+188|0;e=c+184|0;f=c+48|0;g=c+32|0;h=c+20|0;i=c+8|0;j=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;l=j>>>0>536870911?-1:j<<3;m=Rqa(l)|0;n=Rqa(l)|0;o=Rqa(l)|0;q=Rqa(l)|0;s=Rqa(l)|0;t=Rqa(l)|0;l=a+36|0;cO(k[l>>2]|0,e,942);dO(k[l>>2]|0,c,67);xp(a,n,353);xp(a,o,339);xp(a,q,64);xp(a,s,63);xp(a,t,999);xp(a,m,928);l=a+32|0;u=+WJ(k[l>>2]|0,266);v=+WJ(k[l>>2]|0,265)/u;l=(j|0)>0;if(!l){w=k[a>>2]|0;x=w+48|0;y=k[x>>2]|0;rd[y&511](a,928,m,738);z=k[a>>2]|0;A=z+48|0;C=k[A>>2]|0;rd[C&511](a,339,o,738);D=k[a>>2]|0;E=D+48|0;F=k[E>>2]|0;rd[F&511](a,64,q,738);Tqa(m);Tqa(s);Tqa(q);Tqa(o);Tqa(t);Tqa(n);r=c;return}G=a+24|0;u=-v;H=1.0-v;I=0;a:while(1){J=k[e>>2]|0;do if((J|0)==926){K=b+((Co(k[(k[G>>2]|0)+(I<<2)>>2]|0)|0)<<3)|0;if(!(+p[K>>3]<10.0)){L=k[e>>2]|0;M=10;break}K=b+((Co(k[(k[G>>2]|0)+(I<<2)>>2]|0)|0)<<3)|0;N=+p[K>>3];p[m+(I<<3)>>3]=N;if(N>=0.0)p[q+(I<<3)>>3]=+p[s+(I<<3)>>3]}else{L=J;M=10}while(0);b:do if((M|0)==10){M=0;if((L|0)==927?(J=q+(I<<3)|0,N=+p[s+(I<<3)>>3],+p[J>>3]<N):0){p[J>>3]=N;break}if(+p[m+(I<<3)>>3]<=0.0){J=q+(I<<3)|0;N=+p[s+(I<<3)>>3];if(!(+p[J>>3]<=N))break;p[J>>3]=N;p[o+(I<<3)>>3]=N+ +p[n+(I<<3)>>3];break}J=n+(I<<3)|0;N=+p[J>>3];K=t+(I<<3)|0;O=+p[K>>3];P=N*u+O;if(P>+p[s+(I<<3)>>3]){switch(L|0){case 922:case 924:case 925:{p[o+(I<<3)>>3]=H*N+O;p[q+(I<<3)>>3]=P;break b;break}case 923:{M=19;break}default:R=L}do if((M|0)==19){M=0;S=b+((Co(k[(k[G>>2]|0)+(I<<2)>>2]|0)|0)<<3)|0;if(+p[S>>3]<0.0){P=+p[J>>3];O=+p[K>>3];p[o+(I<<3)>>3]=H*P+O;p[q+(I<<3)>>3]=P*u+O;break b}else{R=k[e>>2]|0;break}}while(0);switch(R|0){case 923:case 926:case 927:break;default:break a}}}while(0);I=I+1|0;if((I|0)>=(j|0)){M=3;break}}if((M|0)==3){if(!l){w=k[a>>2]|0;x=w+48|0;y=k[x>>2]|0;rd[y&511](a,928,m,738);z=k[a>>2]|0;A=z+48|0;C=k[A>>2]|0;rd[C&511](a,339,o,738);D=k[a>>2]|0;E=D+48|0;F=k[E>>2]|0;rd[F&511](a,64,q,738);Tqa(m);Tqa(s);Tqa(q);Tqa(o);Tqa(t);Tqa(n);r=c;return}l=a+24|0;M=0;do{c:do switch(k[e>>2]|0){case 923:{I=m+(M<<3)|0;R=n+(M<<3)|0;if(!(+p[I>>3]<0.0)){G=t+(M<<3)|0;L=s+(M<<3)|0;if(!(+p[G>>3]-v*+p[R>>3]<=+p[L>>3])?(K=b+((Co(k[(k[l>>2]|0)+(M<<2)>>2]|0)|0)<<3)|0,!(+p[K>>3]<0.0)):0)break c;else{T=L;U=G}}else{T=s+(M<<3)|0;U=t+(M<<3)|0}p[I>>3]=+p[R>>3]+(+p[T>>3]-+p[U>>3])/v;break}case 926:break;default:p[m+(M<<3)>>3]=+p[n+(M<<3)>>3]+(+p[s+(M<<3)>>3]-+p[t+(M<<3)>>3])/v}while(0);M=M+1|0}while((M|0)!=(j|0));w=k[a>>2]|0;x=w+48|0;y=k[x>>2]|0;rd[y&511](a,928,m,738);z=k[a>>2]|0;A=z+48|0;C=k[A>>2]|0;rd[C&511](a,339,o,738);D=k[a>>2]|0;E=D+48|0;F=k[E>>2]|0;rd[F&511](a,64,q,738);Tqa(m);Tqa(s);Tqa(q);Tqa(o);Tqa(t);Tqa(n);r=c;return}c=f+56|0;n=f+4|0;k[f>>2]=27524;k[c>>2]=27544;B=0;wa(508,f+56|0,n|0);t=B;B=0;if(t&1){t=Rb()|0;V=Q;W=t;vva(c);Qb(W|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[c>>2]=27488;B=0;va(448,n|0);t=B;B=0;do if(t&1){o=Rb()|0;X=Q;Y=o}else{k[n>>2]=27560;o=f+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,n|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(o);Ava(n);X=s;Y=q;break}Yua(d);B=0;q=Ia(40,f|0,70413,81)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,g|0,69562,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,h|0,70495,20);m=B;B=0;if(m&1){m=Rb()|0;a=Q;Yua(g);Z=a;_=m;break}B=0;wa(510,i|0,n|0);m=B;B=0;if(m&1){m=Rb()|0;$=m;aa=Q;ba=1}else{B=0;ua(163,q|0,g|0,h|0,1797,i|0);m=B;B=0;if(m&1)ca=1;else{B=0;eb(503,q|0,1240,229);B=0;ca=0}m=Rb()|0;a=Q;Yua(i);$=m;aa=a;ba=ca}Yua(h);Yua(g);if(ba){Z=aa;_=$}else{da=aa;ea=$;k[f>>2]=27468;k[c>>2]=27488;k[n>>2]=27560;Yua(o);Ava(n);vva(c);Qb(ea|0)}}else{a=Rb()|0;Z=Q;_=a}while(0);zb(q|0);da=Z;ea=_;k[f>>2]=27468;k[c>>2]=27488;k[n>>2]=27560;Yua(o);Ava(n);vva(c);Qb(ea|0)}s=Rb()|0;da=Q;ea=s;k[f>>2]=27468;k[c>>2]=27488;k[n>>2]=27560;Yua(o);Ava(n);vva(c);Qb(ea|0)}while(0);V=X;W=Y;vva(c);Qb(W|0)}function fq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0;b=r;r=r+32|0;c=b+16|0;d=b+8|0;e=b;f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;g=f>>>0>536870911?-1:f<<3;h=Rqa(g)|0;i=Rqa(g)|0;j=Rqa(g)|0;g=a+36|0;dO(k[g>>2]|0,c,44);dO(k[g>>2]|0,d,45);dO(k[g>>2]|0,e,46);xp(a,h,64);xp(a,i,63);if((f|0)<=0){l=k[a>>2]|0;m=l+48|0;n=k[m>>2]|0;rd[n&511](a,40,j,738);Tqa(h);Tqa(i);Tqa(j);r=b;return}o=+p[e>>3];q=+p[c>>3];s=+p[d>>3];d=0;do{t=+p[h+(d<<3)>>3];if(t>o)u=0.0;else u=(o-t)*(q*+ssa((t-+p[i+(d<<3)>>3])/s));p[j+(d<<3)>>3]=u;d=d+1|0}while((d|0)!=(f|0));l=k[a>>2]|0;m=l+48|0;n=k[m>>2]|0;rd[n&511](a,40,j,738);Tqa(h);Tqa(i);Tqa(j);r=b;return}function gq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=Qqa(68)|0;d=k[a+20>>2]|0;B=0;e=ya(k[(k[a>>2]|0)+164>>2]|0,a|0)|0;f=B;B=0;if(!(f&1)?(B=0,ua(165,c|0,d|0,e|0,k[a+36>>2]|0,b|0),b=B,B=0,!(b&1)):0)return c|0;b=Rb()|0;Sqa(c);Qb(b|0);return 0}function hq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Qqa(68)|0;B=0;ua(165,d|0,k[a+20>>2]|0,b|0,k[a+36>>2]|0,c|0);c=B;B=0;if(c&1){c=Rb()|0;Sqa(d);Qb(c|0)}else return d|0;return 0}function iq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=Qqa(24)|0;d=k[a+20>>2]|0;B=0;e=ya(k[(k[a>>2]|0)+164>>2]|0,a|0)|0;f=B;B=0;if(!(f&1)?(B=0,ua(166,c|0,d|0,e|0,k[a+36>>2]|0,b|0),b=B,B=0,!(b&1)):0)return c|0;b=Rb()|0;Sqa(c);Qb(b|0);return 0}function jq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0.0,O=0.0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=r;r=r+224|0;g=f+208|0;h=f+24|0;i=f+16|0;j=f+8|0;l=f;m=f+72|0;n=f+56|0;o=f+44|0;q=f+32|0;s=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;t=s>>>0>536870911?-1:s<<3;u=Rqa(t)|0;v=Rqa(t)|0;w=Rqa(t)|0;x=s*12|0;y=x>>>0>536870911?-1:x<<3;x=Rqa(y)|0;z=Rqa(y)|0;y=Rqa(t)|0;WEa(y|0,0,s<<3|0)|0;A=Rqa(t)|0;C=Rqa(t)|0;D=Rqa(t)|0;E=Rqa(t)|0;t=a+32|0;F=+WJ(k[t>>2]|0,266);G=+WJ(k[t>>2]|0,265);H=+WJ(k[t>>2]|0,449);I=+WJ(k[t>>2]|0,452);J=+WJ(k[t>>2]|0,453);t=a+16|0;K=oC(k[t>>2]|0,460)|0;L=oC(k[t>>2]|0,448)|0;M=a+36|0;dO(k[M>>2]|0,j,767);dO(k[M>>2]|0,l,67);N=+p[l>>3];O=N*+_(+(+p[j>>3]/N));P=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;R=(s|0)>0;if(R){S=0;do{N=+(S|0)/12.0;T=0;do{Fc[k[(k[P>>2]|0)+28>>2]&1023](P,T);U=(T*12|0)+S|0;V=x+(U<<3)|0;md[k[(k[K>>2]|0)+52>>2]&31](K,V,P,O+N*+p[l>>3]);p[V>>3]=+p[V>>3]+-273.15;V=z+(U<<3)|0;md[k[(k[L>>2]|0)+52>>2]&31](L,V,P,O+N*+p[l>>3]);p[V>>3]=+p[V>>3]*+p[l>>3];T=T+1|0}while((T|0)!=(s|0));S=S+1|0}while((S|0)!=12)}if(e){eO(k[M>>2]|0,h,455,+p[j>>3]);eO(k[M>>2]|0,i,456,+p[j>>3])}else{p[h>>3]=0.0;p[i>>3]=0.0}xp(a,A,353);xp(a,C,339);xp(a,D,450);xp(a,E,451);if(R){R=0;do{j=R*12|0;M=x+(j<<3)|0;O=+WY(M,z+(j<<3)|0,b,c,v+(R<<3)|0,w+(R<<3)|0,d,+p[l>>3],+p[A+(R<<3)>>3],+p[C+(R<<3)>>3],H,+p[E+(R<<3)>>3],+p[D+(R<<3)>>3],I,J,+p[h>>3],+p[i>>3],F,G);p[u+(R<<3)>>3]=O;e=y+(R<<3)|0;p[e>>3]=+p[e>>3]+(+p[M>>3]+273.15)*.08333333333333333+(+p[x+((j|1)<<3)>>3]+273.15)*.08333333333333333+(+p[x+((j|2)<<3)>>3]+273.15)*.08333333333333333+(+p[x+((j|3)<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+4<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+5<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+6<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+7<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+8<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+9<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+10<<3)>>3]+273.15)*.08333333333333333+(+p[x+(j+11<<3)>>3]+273.15)*.08333333333333333;R=R+1|0}while((R|0)!=(s|0))}a:do switch(Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0){case 621:{s=k[t>>2]|0;R=Qqa(16)|0;B=0;ib(284,R|0,668,y|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(R);W=h;X=i;Qb(X|0)}mC(s,R)|0;R=k[t>>2]|0;s=Qqa(16)|0;B=0;ib(284,s|0,388,u|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(s);W=h;X=i;Qb(X|0)}mC(R,s)|0;s=k[t>>2]|0;R=Qqa(16)|0;B=0;ib(284,R|0,467,w|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(R);W=h;X=i;Qb(X|0)}mC(s,R)|0;R=k[t>>2]|0;s=Qqa(16)|0;B=0;ib(284,s|0,471,v|0,738);i=B;B=0;if(!(i&1)){mC(R,s)|0;break a}R=Rb()|0;i=Q;Sqa(s);W=i;X=R;Qb(X|0);break}case 625:{do if(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0){xp(a,C,666);p[y>>3]=+p[C>>3];p[y+8>>3]=+p[C+8>>3];p[y+16>>3]=+p[C+16>>3];R=k[t>>2]|0;i=Qqa(16)|0;B=0;ib(285,i|0,666,y|0,738);s=B;B=0;if(!(s&1)){mC(R,i)|0;break}R=Rb()|0;s=Q;Sqa(i);W=s;X=R;Qb(X|0)}while(0);R=k[t>>2]|0;s=Qqa(16)|0;B=0;ib(285,s|0,388,u|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(s);W=h;X=i;Qb(X|0)}mC(R,s)|0;s=k[t>>2]|0;R=Qqa(16)|0;B=0;ib(285,R|0,668,y|0,738);i=B;B=0;if(!(i&1)){mC(s,R)|0;nd[k[(k[a>>2]|0)+220>>2]&1023](a,668,-1);nd[k[(k[a>>2]|0)+220>>2]&1023](a,388,-1);break a}s=Rb()|0;i=Q;Sqa(R);W=i;X=s;Qb(X|0);break}case 623:{do if(Hc[k[(k[a>>2]|0)+252>>2]&511](a)|0){xp(a,C,666);p[y>>3]=+p[C>>3];p[y+8>>3]=+p[C+8>>3];p[y+16>>3]=+p[C+16>>3];s=k[t>>2]|0;i=Qqa(16)|0;B=0;ib(286,i|0,666,y|0,738);R=B;B=0;if(!(R&1)){mC(s,i)|0;break}s=Rb()|0;R=Q;Sqa(i);W=R;X=s;Qb(X|0)}while(0);s=k[t>>2]|0;R=Qqa(16)|0;B=0;ib(286,R|0,388,u|0,738);i=B;B=0;if(i&1){i=Rb()|0;h=Q;Sqa(R);W=h;X=i;Qb(X|0)}mC(s,R)|0;R=k[t>>2]|0;s=Qqa(16)|0;B=0;ib(286,s|0,668,y|0,738);i=B;B=0;if(!(i&1)){mC(R,s)|0;nd[k[(k[a>>2]|0)+220>>2]&1023](a,668,-1);nd[k[(k[a>>2]|0)+220>>2]&1023](a,388,-1);break a}R=Rb()|0;i=Q;Sqa(s);W=i;X=R;Qb(X|0);break}default:{R=m+56|0;i=m+4|0;k[m>>2]=27524;k[R>>2]=27544;B=0;wa(508,m+56|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;Y=Q;Z=s;vva(R);Qb(Z|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[R>>2]=27488;B=0;va(448,i|0);s=B;B=0;do if(s&1){h=Rb()|0;$=Q;aa=h}else{k[i>>2]=27560;h=m+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[m+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,i|0,g|0);l=B;B=0;if(l&1){l=Rb()|0;c=Q;Yua(g);Yua(h);Ava(i);$=c;aa=l;break}Yua(g);B=0;l=Ia(40,m|0,144350,19)|0;c=B;B=0;b:do if(!(c&1)?(B=0,Xa(239,l|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,n|0,69562,75);j=B;B=0;do if(!(j&1)){B=0;eb(502,o|0,70516,17);M=B;B=0;if(M&1){M=Rb()|0;e=Q;Yua(n);ba=e;ca=M;break}B=0;wa(510,q|0,i|0);M=B;B=0;if(M&1){M=Rb()|0;da=Q;ea=M;fa=1}else{B=0;ua(163,b|0,n|0,o|0,2003,q|0);M=B;B=0;if(M&1)ga=1;else{B=0;eb(503,b|0,1240,229);B=0;ga=0}M=Rb()|0;e=Q;Yua(q);da=e;ea=M;fa=ga}Yua(o);Yua(n);if(fa){ba=da;ca=ea}else{ha=da;ia=ea;break b}}else{M=Rb()|0;ba=Q;ca=M}while(0);zb(b|0);ha=ba;ia=ca}else ja=53;while(0);if((ja|0)==53){l=Rb()|0;ha=Q;ia=l}k[m>>2]=27468;k[R>>2]=27488;k[i>>2]=27560;Yua(h);Ava(i);vva(R);W=ha;X=ia;Qb(X|0)}while(0);Y=$;Z=aa;vva(R);Qb(Z|0)}}while(0);if(!P){Tqa(x);Tqa(z);Tqa(u);Tqa(v);Tqa(w);Tqa(y);Tqa(A);Tqa(C);Tqa(E);Tqa(D);r=f;return}Ec[k[(k[P>>2]|0)+4>>2]&1023](P);Tqa(x);Tqa(z);Tqa(u);Tqa(v);Tqa(w);Tqa(y);Tqa(A);Tqa(C);Tqa(E);Tqa(D);r=f;return}function kq(a,b){a=a|0;b=+b;return +(+UJ(k[a+32>>2]|0,b))}function lq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;f=r;r=r+368|0;g=f+356|0;h=f+352|0;i=f+216|0;j=f+200|0;l=f+48|0;m=f+36|0;n=f+64|0;o=f+24|0;p=f+12|0;q=f;a:do switch(e|0){case 701:{mq(a);break}case 714:{nq(a);break}case 713:case 712:case 711:case 710:case 709:case 708:{Ec[k[(k[a>>2]|0)+88>>2]&1023](a);break}case 264:case 730:case 729:case 728:case 727:case 726:case 725:{Vo(a);break}case 722:case 721:case 720:case 719:case 718:case 717:case 716:{Ec[k[(k[a>>2]|0)+80>>2]&1023](a);break}case 706:{Ec[k[(k[a>>2]|0)+84>>2]&1023](a);break}case 723:{Zo(a);break}case 245:{To(a);break}case 246:{Ec[k[(k[a>>2]|0)+452>>2]&1023](a);break}case 248:case 259:case 258:{Ec[k[(k[a>>2]|0)+444>>2]&1023](a);Ec[k[(k[a>>2]|0)+448>>2]&1023](a);cO(k[a+36>>2]|0,h,247);switch(k[h>>2]|0){case 252:case 253:{s=42;break a;break}case 250:{Ec[k[(k[a>>2]|0)+56>>2]&1023](a);s=42;break a;break}case 251:{Ec[k[(k[a>>2]|0)+60>>2]&1023](a);s=42;break a;break}default:{t=i+56|0;u=i+4|0;k[i>>2]=27524;k[t>>2]=27544;B=0;wa(508,i+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=i+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[i+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,u|0,g|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(g);Yua(y);Ava(u);z=D;A=C;break}Yua(g);B=0;C=Ia(40,i|0,136043,12)|0;D=B;B=0;b:do if((((!(D&1)?(B=0,E=ya(427,k[h>>2]|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,C|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,146481,18)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,j|0,69562,75);G=B;B=0;do if(!(G&1)){B=0;eb(502,l|0,70534,19);E=B;B=0;if(E&1){E=Rb()|0;H=Q;Yua(j);I=H;J=E;break}B=0;wa(510,m|0,u|0);E=B;B=0;if(E&1){E=Rb()|0;K=E;L=Q;M=1}else{B=0;ua(163,F|0,j|0,l|0,2081,m|0);E=B;B=0;if(E&1)N=1;else{B=0;eb(503,F|0,1240,229);B=0;N=0}E=Rb()|0;H=Q;Yua(m);K=E;L=H;M=N}Yua(l);Yua(j);if(M){I=L;J=K}else{O=L;P=K;break b}}else{H=Rb()|0;I=Q;J=H}while(0);zb(F|0);O=I;P=J}else s=32;while(0);if((s|0)==32){C=Rb()|0;O=Q;P=C}k[i>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);R=P;S=O;Qb(R|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}}break}case 262:{Ec[k[(k[a>>2]|0)+444>>2]&1023](a);s=42;break}case 263:{Ec[k[(k[a>>2]|0)+448>>2]&1023](a);s=42;break}default:{}}while(0);x=oC(k[a+16>>2]|0,e)|0;if(x){a=Hc[k[(k[x>>2]|0)+164>>2]&511](x)|0;k[b>>2]=a;a=Hc[k[(k[x>>2]|0)+168>>2]&511](x)|0;k[c>>2]=a;a=Hc[k[(k[x>>2]|0)+172>>2]&511](x)|0;k[d>>2]=a;r=f;return}f=n+56|0;a=n+4|0;k[n>>2]=27524;k[f>>2]=27544;B=0;wa(508,n+56|0,a|0);d=B;B=0;if(d&1){d=Rb()|0;T=Q;U=d;vva(f);Qb(U|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[f>>2]=27488;B=0;va(448,a|0);d=B;B=0;do if(d&1){x=Rb()|0;V=Q;W=x}else{k[a>>2]=27560;x=n+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[n+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,a|0,g|0);c=B;B=0;if(c&1){c=Rb()|0;b=Q;Yua(g);Yua(x);Ava(a);V=b;W=c;break}Yua(g);B=0;c=Ia(40,n|0,74566,6)|0;b=B;B=0;c:do if((((!(b&1)?(B=0,A=ya(427,e|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(A)|0,B=0,w=Ia(40,c|0,A|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,w|0,109155,21)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,o|0,69562,75);w=B;B=0;do if(!(w&1)){B=0;eb(502,p|0,70534,19);A=B;B=0;if(A&1){A=Rb()|0;O=Q;Yua(o);X=O;Y=A;break}B=0;wa(510,q|0,a|0);A=B;B=0;if(A&1){A=Rb()|0;Z=1;_=A;$=Q}else{B=0;ua(163,z|0,o|0,p|0,2092,q|0);A=B;B=0;if(A&1)aa=1;else{B=0;eb(503,z|0,1240,229);B=0;aa=0}A=Rb()|0;O=Q;Yua(q);Z=aa;_=A;$=O}Yua(p);Yua(o);if(Z){X=$;Y=_}else{ba=_;ca=$;break c}}else{O=Rb()|0;X=Q;Y=O}while(0);zb(z|0);ba=Y;ca=X}else s=62;while(0);if((s|0)==62){c=Rb()|0;ba=c;ca=Q}k[n>>2]=27468;k[f>>2]=27488;k[a>>2]=27560;Yua(x);Ava(a);vva(f);R=ba;S=ca;Qb(R|0)}while(0);T=V;U=W;vva(f);Qb(U|0)}function mq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;b=r;r=r+80|0;c=b+56|0;d=b+8|0;e=b;f=b+64|0;k[f>>2]=0;g=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;h=Rqa(g>>>0>536870911?-1:g<<3)|0;Fc[k[(k[a>>2]|0)+188>>2]&1023](a,f);i=a+16|0;j=oC(k[i>>2]|0,674)|0;l=oC(k[i>>2]|0,677)|0;m=oC(k[i>>2]|0,679)|0;n=oC(k[i>>2]|0,353)|0;i=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;if((g|0)>0){o=a+28|0;q=d+24|0;s=d+32|0;t=d+8|0;u=d+40|0;v=d+16|0;w=0;do{Fc[k[(k[i>>2]|0)+28>>2]&1023](i,w);nd[k[(k[n>>2]|0)+48>>2]&1023](n,e,i);Yo(0,d,k[f>>2]|0,i,j,l,m);x=k[o>>2]|0;Tc[k[(k[x>>2]|0)+108>>2]&15](x,c,3,k[f>>2]|0,i,j,l,m);y=+p[d>>3];z=+p[q>>3];A=+p[s>>3];B=+p[t>>3];C=+p[u>>3];D=+p[v>>3];E=z*z;z=A*A;A=C*C;C=+aa(+(D*D+(A+(z+(A+(B*B+(E+(y*y+E+z))))))))*.7071067811865475;p[h+(w<<3)>>3]=+p[e>>3]*(+p[c>>3]*(C*(C*4.0)));w=w+1|0}while((w|0)!=(g|0))}rd[k[(k[a>>2]|0)+48>>2]&511](a,701,h,738);Tqa(h);h=k[f>>2]|0;if(h)Tqa(h);k[f>>2]=0;if(!i){r=b;return}Ec[k[(k[i>>2]|0)+4>>2]&1023](i);r=b;return}function nq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;b=r;r=r+272|0;c=b+260|0;d=b+256|0;e=b+64|0;f=b+56|0;g=b+48|0;h=b+40|0;i=b+32|0;j=b+24|0;l=b;m=b+252|0;n=b+248|0;o=b+112|0;q=b+96|0;s=b+84|0;t=b+72|0;k[d>>2]=0;Ec[k[(k[a>>2]|0)+88>>2]&1023](a);cO(k[a+36>>2]|0,m,299);u=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;v=Rqa(u>>>0>536870911?-1:u<<3)|0;Fc[k[(k[a>>2]|0)+188>>2]&1023](a,d);w=a+16|0;x=oC(k[w>>2]|0,708)|0;y=oC(k[w>>2]|0,711)|0;z=oC(k[w>>2]|0,709)|0;if((k[m>>2]|0)==3){A=oC(k[w>>2]|0,710)|0;C=oC(k[w>>2]|0,712)|0;D=A;E=C;F=oC(k[w>>2]|0,713)|0}else{D=0;E=0;F=0}w=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;a:do if((u|0)>0){C=0;while(1){Fc[k[(k[w>>2]|0)+28>>2]&1023](w,C);nd[k[(k[x>>2]|0)+48>>2]&1023](x,e,w);nd[k[(k[y>>2]|0)+48>>2]&1023](y,f,w);nd[k[(k[z>>2]|0)+48>>2]&1023](z,h,w);A=k[m>>2]|0;if((A|0)==3){nd[k[(k[D>>2]|0)+48>>2]&1023](D,i,w);nd[k[(k[E>>2]|0)+48>>2]&1023](E,j,w);nd[k[(k[F>>2]|0)+48>>2]&1023](F,g,w);G=k[m>>2]|0}else G=A;if((G|0)==2){H=+p[f>>3];I=+p[e>>3];J=+p[h>>3];K=0.0;L=1.0;M=-H-I;N=H*I-J*J}else{J=+p[e>>3];I=+p[f>>3];H=+p[g>>3];O=J*I;P=+p[h>>3];R=+p[i>>3];S=+p[j>>3];K=-1.0;L=J+I+H;M=S*S+(R*R+(P*P+(-O-J*H-I*H)));N=P*2.0*R*S+(O*H-S*(J*S)-R*(I*R)-P*(H*P))}JY(K,L,M,N,l,n)|0;A=k[n>>2]|0;if((A|0)<=0)break;P=+$(+(+p[l>>3]));if((A|0)>1){T=1;H=P;while(1){R=+$(+(+p[l+(T<<3)>>3]));I=R>H?R:H;T=T+1|0;if((T|0)>=(A|0)){U=I;break}else H=I}}else U=P;p[v+(C<<3)>>3]=U;C=C+1|0;if((C|0)>=(u|0))break a}C=o+56|0;A=o+4|0;k[o>>2]=27524;k[C>>2]=27544;B=0;wa(508,o+56|0,A|0);T=B;B=0;if(T&1){T=Rb()|0;V=Q;W=T;vva(C);Qb(W|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[C>>2]=27488;B=0;va(448,A|0);T=B;B=0;do if(T&1){X=Rb()|0;Y=Q;Z=X}else{k[A>>2]=27560;X=o+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,A|0,c|0);_=B;B=0;if(_&1){_=Rb()|0;aa=Q;Yua(c);Yua(X);Ava(A);Y=aa;Z=_;break}Yua(c);B=0;_=Ia(40,o|0,70554,20)|0;aa=B;B=0;if(!(aa&1)?(B=0,Xa(239,_|0,0)|0,_=B,B=0,!(_&1)):0){_=Ab(20)|0;B=0;eb(502,q|0,69562,75);aa=B;B=0;do if(!(aa&1)){B=0;eb(502,s|0,70575,29);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(q);da=ca;ea=ba;break}B=0;wa(510,t|0,A|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;ga=ba;ha=1}else{B=0;ua(163,_|0,q|0,s|0,2727,t|0);ba=B;B=0;if(ba&1)ia=1;else{B=0;eb(503,_|0,1240,229);B=0;ia=0}ba=Rb()|0;ca=Q;Yua(t);fa=ca;ga=ba;ha=ia}Yua(s);Yua(q);if(ha){da=fa;ea=ga}else{ja=fa;ka=ga;k[o>>2]=27468;k[C>>2]=27488;k[A>>2]=27560;Yua(X);Ava(A);vva(C);Qb(ka|0)}}else{ba=Rb()|0;da=Q;ea=ba}while(0);zb(_|0);ja=da;ka=ea;k[o>>2]=27468;k[C>>2]=27488;k[A>>2]=27560;Yua(X);Ava(A);vva(C);Qb(ka|0)}aa=Rb()|0;ja=Q;ka=aa;k[o>>2]=27468;k[C>>2]=27488;k[A>>2]=27560;Yua(X);Ava(A);vva(C);Qb(ka|0)}while(0);V=Y;W=Z;vva(C);Qb(W|0)}while(0);rd[k[(k[a>>2]|0)+48>>2]&511](a,714,v,738);Tqa(v);v=k[d>>2]|0;if(v)Tqa(v);k[d>>2]=0;if(!w){r=b;return}Ec[k[(k[w>>2]|0)+4>>2]&1023](w);r=b;return}function oq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){rd[k[(k[l>>2]|0)+176>>2]&511](l,b,c,k[a+12>>2]|0);r=e;return}e=g+56|0;a=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;m=Q;n=c;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){b=Rb()|0;o=Q;p=b}else{k[a>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;q=Q;Yua(f);Yua(b);Ava(a);o=q;p=l;break}Yua(f);B=0;l=Ia(40,g|0,74566,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,l|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,115180,13);q=B;B=0;if(q&1){q=Rb()|0;l=Q;Yua(h);u=l;v=q;break}B=0;wa(510,j|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,2102,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;l=Q;Yua(j);w=l;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function pq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=oC(k[a+16>>2]|0,d)|0;if(l){rd[k[(k[l>>2]|0)+180>>2]&511](l,b,c,k[a+12>>2]|0);r=e;return}e=g+56|0;a=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;m=Q;n=c;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){b=Rb()|0;o=Q;p=b}else{k[a>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);l=B;B=0;if(l&1){l=Rb()|0;q=Q;Yua(f);Yua(b);Ava(a);o=q;p=l;break}Yua(f);B=0;l=Ia(40,g|0,74566,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,d|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,l|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,109155,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,h|0,69562,75);t=B;B=0;do if(!(t&1)){B=0;eb(502,i|0,70605,14);q=B;B=0;if(q&1){q=Rb()|0;l=Q;Yua(h);u=l;v=q;break}B=0;wa(510,j|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,h|0,i|0,2110,j|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;l=Q;Yua(j);w=l;x=q;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[g>>2]=27468;k[e>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function qq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;d=r;r=r+368|0;e=d;f=d+224|0;g=d+208|0;h=d+196|0;j=d+184|0;l=d+48|0;m=d+36|0;n=d+24|0;o=d+12|0;q=a+16|0;s=oC(k[q>>2]|0,c)|0;if(!s){t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=f+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,u|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);Yua(y);Ava(u);z=D;A=C;break}Yua(e);B=0;C=Ia(40,f|0,74566,6)|0;D=B;B=0;a:do if((((!(D&1)?(B=0,E=ya(427,c|0)|0,F=B,B=0,!(F&1)):0)?(F=Lta(E)|0,B=0,G=Ia(40,C|0,E|0,F|0)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Ia(40,G|0,109155,21)|0,G=B,B=0,!(G&1)):0)?(B=0,Xa(239,F|0,0)|0,F=B,B=0,!(F&1)):0){F=Ab(20)|0;B=0;eb(502,g|0,69562,75);G=B;B=0;do if(!(G&1)){B=0;eb(502,h|0,70620,14);E=B;B=0;if(E&1){E=Rb()|0;H=Q;Yua(g);I=E;J=H;break}B=0;wa(510,j|0,u|0);H=B;B=0;if(H&1){H=Rb()|0;K=H;L=Q;M=1}else{B=0;ua(163,F|0,g|0,h|0,2118,j|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,F|0,1240,229);B=0;N=0}H=Rb()|0;E=Q;Yua(j);K=H;L=E;M=N}Yua(h);Yua(g);if(M){I=K;J=L}else{O=K;P=L;break a}}else{E=Rb()|0;I=E;J=Q}while(0);zb(F|0);O=I;P=J}else R=20;while(0);if((R|0)==20){C=Rb()|0;O=C;P=Q}k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);S=O;T=P;Qb(S|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}switch(Hc[k[(k[s>>2]|0)+164>>2]&511](s)|0){case 736:{x=oC(k[q>>2]|0,c)|0;switch(Hc[k[(k[x>>2]|0)+20>>2]&511](x)|0){case 561:{Fc[k[(k[x>>2]|0)+44>>2]&1023](x,e);break}case 556:{Fc[k[(k[x>>2]|0)+36>>2]&1023](x,f);p[e>>3]=+((i[f>>0]|0)!=0&1);break}default:{f=Hc[k[(k[a>>2]|0)+304>>2]&511](a)|0;nd[k[(k[x>>2]|0)+48>>2]&1023](x,e,f);if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f)}}if(k[b>>2]|0){f=k[k[b+4>>2]>>2]|0;Jc[k[(k[f>>2]|0)+20>>2]&1](f,k[a+12>>2]|0,+p[e>>3],0)}r=d;return}case 738:{f=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;x=Rqa(f>>>0>536870911?-1:f<<3)|0;q=f>>>0>1073741823?-1:f<<2;t=Rqa(q)|0;A=Rqa(q)|0;q=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((q|0)>0){z=a+24|0;w=0;do{P=Bo(k[(k[z>>2]|0)+(w<<2)>>2]|0)|0;k[A+(w<<2)>>2]=P;w=w+1|0}while((w|0)!=(q|0))}q=Hc[k[(k[a>>2]|0)+172>>2]&511](a)|0;if((q|0)>0){w=a+24|0;z=0;do{P=Ao(k[(k[w>>2]|0)+(z<<2)>>2]|0)|0;k[t+(z<<2)>>2]=P;z=z+1|0}while((z|0)!=(q|0))}xp(a,x,c);if((f|0)>0){c=0;do{a=x+(c<<3)|0;p[a>>3]=+p[a>>3]/+(k[t+(c<<2)>>2]|0);c=c+1|0}while((c|0)!=(f|0))}if(k[b>>2]|0){c=k[k[b+4>>2]>>2]|0;Dc[k[(k[c>>2]|0)+16>>2]&255](c,f,A,x,1)}Tqa(x);Tqa(t);Tqa(A);r=d;return}default:{d=l+56|0;A=l+4|0;k[l>>2]=27524;k[d>>2]=27544;B=0;wa(508,l+56|0,A|0);t=B;B=0;if(t&1){t=Rb()|0;U=Q;V=t;vva(d);Qb(V|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[d>>2]=27488;B=0;va(448,A|0);t=B;B=0;do if(t&1){x=Rb()|0;W=Q;X=x}else{k[A>>2]=27560;x=l+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,A|0,e|0);f=B;B=0;if(f&1){f=Rb()|0;c=Q;Yua(e);Yua(x);Ava(A);W=c;X=f;break}Yua(e);B=0;f=Ia(40,l|0,70635,14)|0;c=B;B=0;b:do if(((((!(c&1)?(B=0,b=ya(k[(k[s>>2]|0)+164>>2]|0,s|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=ya(427,b|0)|0,b=B,B=0,!(b&1)):0)?(b=Lta(a)|0,B=0,q=Ia(40,f|0,a|0,b|0)|0,b=B,B=0,!(b&1)):0)?(B=0,b=Ia(40,q|0,146481,18)|0,q=B,B=0,!(q&1)):0)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,m|0,69562,75);q=B;B=0;do if(!(q&1)){B=0;eb(502,n|0,70620,14);a=B;B=0;if(a&1){a=Rb()|0;z=Q;Yua(m);Y=z;Z=a;break}B=0;wa(510,o|0,A|0);a=B;B=0;if(a&1){a=Rb()|0;_=1;$=a;aa=Q}else{B=0;ua(163,b|0,m|0,n|0,2160,o|0);a=B;B=0;if(a&1)ba=1;else{B=0;eb(503,b|0,1240,229);B=0;ba=0}a=Rb()|0;z=Q;Yua(o);_=ba;$=a;aa=z}Yua(n);Yua(m);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{z=Rb()|0;Y=Q;Z=z}while(0);zb(b|0);ca=Z;da=Y}else R=67;while(0);if((R|0)==67){f=Rb()|0;ca=f;da=Q}k[l>>2]=27468;k[d>>2]=27488;k[A>>2]=27560;Yua(x);Ava(A);vva(d);S=ca;T=da;Qb(S|0)}while(0);U=W;V=X;vva(d);Qb(V|0)}}}
+-function SI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 1:{n=Qqa(16)|0;B=0;va(489,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Sqa(n);q=o;s=p;Qb(q|0)}else{k[a+16>>2]=n;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[a+12>>0]=i[o>>0]|0;k[b>>2]=(k[b>>2]|0)+1;t=a+16|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+20|0;k[x>>2]=w;r=e;return}break}case 0:{o=k[b>>2]|0;i[o>>0]=71;i[o+1>>0]=2;i[o+2>>0]=0;i[o+3>>0]=0;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;i[n>>0]=i[a+12>>0]|0;k[b>>2]=(k[b>>2]|0)+1;t=a+16|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+20|0;k[x>>2]=w;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+9;t=a+16|0;u=k[t>>2]|0;Cla(u,b,c,d);v=k[t>>2]|0;w=Fla(v)|0;x=a+20|0;k[x>>2]=w;r=e;return}default:{e=g+56|0;w=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(e);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){a=Rb()|0;A=Q;C=a}else{k[w>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;t=Q;Yua(f);Yua(a);Ava(w);A=t;C=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;t=B;B=0;a:do if(!(t&1)?(B=0,Xa(239,v|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,78025,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);b=B;B=0;if(b&1){b=Rb()|0;u=Q;Yua(h);D=b;E=u;break}B=0;wa(510,m|0,w|0);u=B;B=0;if(u&1){u=Rb()|0;F=Q;G=u;H=1}else{B=0;ua(163,d|0,h|0,j|0,129,m|0);u=B;B=0;if(u&1)I=1;else{B=0;eb(503,d|0,1240,229);B=0;I=0}u=Rb()|0;b=Q;Yua(m);F=b;G=u;H=I}Yua(j);Yua(h);if(H){D=G;E=F}else{J=G;K=F;break a}}else{u=Rb()|0;D=u;E=Q}while(0);zb(d|0);J=D;K=E}else L=19;while(0);if((L|0)==19){v=Rb()|0;J=v;K=Q}k[g>>2]=27468;k[e>>2]=27488;k[w>>2]=27560;Yua(a);Ava(w);vva(e);q=J;s=K;Qb(q|0)}while(0);y=A;z=C;vva(e);Qb(z|0)}}}function TI(a,b){a=a|0;b=b|0;var c=0;c=a+16|0;Ela(k[c>>2]|0,b);b=Fla(k[c>>2]|0)|0;k[a+20>>2]=b;return}function UI(a){a=a|0;var b=0,c=0,d=0.0,e=0.0;b=r;r=r+16|0;c=b;lC(k[(k[a+20>>2]|0)+16>>2]|0,c,214);d=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);e=+ba(+(+p[c>>3]),+-d);r=b;return +e}function VI(a){a=a|0;var b=0,c=0,d=0.0,e=0.0;b=r;r=r+16|0;c=b;lC(k[(k[a+20>>2]|0)+16>>2]|0,c,215);d=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);e=+ba(+(+p[c>>3]),+-d);r=b;return +e}function WI(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;lC(k[(k[a+20>>2]|0)+16>>2]|0,c,214);r=b;return +(+p[c>>3])}function XI(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;lC(k[(k[a+20>>2]|0)+16>>2]|0,c,215);r=b;return +(+p[c>>3])}function YI(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;lC(k[(k[a+20>>2]|0)+16>>2]|0,c,217);r=b;return +(+p[c>>3])}function ZI(a){a=a|0;var b=0,c=0,d=0.0;b=r;r=r+16|0;c=b;if(!(i[a+12>>0]|0)){d=0.0;r=b;return +d}lC(k[(k[a+20>>2]|0)+16>>2]|0,c,225);d=+p[c>>3];r=b;return +d}function _I(a){a=a|0;var b=0,c=0,d=0.0;b=r;r=r+16|0;c=b;if(!(i[a+12>>0]|0)){d=0.0;r=b;return +d}lC(k[(k[a+20>>2]|0)+16>>2]|0,c,227);d=+p[c>>3];r=b;return +d}function $I(a){a=a|0;return (i[a+12>>0]|0)!=0|0}function aJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;l=+Zc[k[(k[a>>2]|0)+48>>2]&255](a);m=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);if(!(i[a+12>>0]|0))n=0.0;else n=+Zc[k[(k[a>>2]|0)+56>>2]&255](a);do if(!(m==1.0))if(c==0.0){o=5.0e13;p[b>>3]=o;r=d;return}else{q=l*(1.0-n)/(+ba(+c,+((m+-1.0)/m))*2.0);break}else q=l*(1.0-n)*.5;while(0);if(!(q<=0.0)){o=q;p[b>>3]=o;r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(d);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){u=Rb()|0;v=Q;w=u}else{k[b>>2]=27560;u=f+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(e);Yua(u);Ava(b);v=y;w=x;break}Yua(e);B=0;x=Ia(40,f|0,78110,18)|0;y=B;B=0;if(!(y&1)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,g|0,78025,75);y=B;B=0;do if(!(y&1)){B=0;eb(502,h|0,143391,12);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(g);C=A;D=z;break}B=0;wa(510,j|0,b|0);z=B;B=0;if(z&1){z=Rb()|0;E=Q;F=z;G=1}else{B=0;ua(163,x|0,g|0,h|0,273,j|0);z=B;B=0;if(z&1)H=1;else{B=0;eb(503,x|0,1240,229);B=0;H=0}z=Rb()|0;A=Q;Yua(j);E=A;F=z;G=H}Yua(h);Yua(g);if(G){C=E;D=F}else{I=E;J=F;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}}else{z=Rb()|0;C=Q;D=z}while(0);zb(x|0);I=C;J=D;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}y=Rb()|0;I=Q;J=y;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}while(0);s=v;t=w;vva(d);Qb(t|0)}function bJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0,f=0.0;d=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);if(!(i[a+12>>0]|0))e=0.0;else e=+Zc[k[(k[a>>2]|0)+56>>2]&255](a);if(d==1.0){f=(1.0-e)*.5;p[b>>3]=f;return}if(c==0.0){f=0.0;p[b>>3]=f;return}f=(1.0-e)/(+ba(+c,+((d+-1.0)/d))*2.0);p[b>>3]=f;return}function cJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0,f=0.0;d=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);e=+Zc[k[(k[a>>2]|0)+52>>2]&255](a);if(d==1.0){f=e*-.5;p[b>>3]=f;return}if(c==0.0){f=0.0;p[b>>3]=f;return}f=-e/(+ba(+c,+((d+-1.0)/d))*2.0);p[b>>3]=f;return}function dJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;j=d;l=+Zc[k[(k[a>>2]|0)+52>>2]&255](a);m=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);if(!(i[a+12>>0]|0))n=0.0;else n=+Zc[k[(k[a>>2]|0)+60>>2]&255](a);do if(!(m==1.0))if(c==0.0){o=5.0e13;p[b>>3]=o;r=d;return}else{q=l*(1.0-n)/(+ba(+c,+((m+-1.0)/m))*2.0);break}else q=l*(1.0-n)*.5;while(0);if(!(q<=0.0)){o=q;p[b>>3]=o;r=d;return}d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(d);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){u=Rb()|0;v=Q;w=u}else{k[b>>2]=27560;u=f+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(e);Yua(u);Ava(b);v=y;w=x;break}Yua(e);B=0;x=Ia(40,f|0,78110,18)|0;y=B;B=0;if(!(y&1)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,g|0,78025,75);y=B;B=0;do if(!(y&1)){B=0;eb(502,h|0,143434,15);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(g);C=A;D=z;break}B=0;wa(510,j|0,b|0);z=B;B=0;if(z&1){z=Rb()|0;E=Q;F=z;G=1}else{B=0;ua(163,x|0,g|0,h|0,377,j|0);z=B;B=0;if(z&1)H=1;else{B=0;eb(503,x|0,1240,229);B=0;H=0}z=Rb()|0;A=Q;Yua(j);E=A;F=z;G=H}Yua(h);Yua(g);if(G){C=E;D=F}else{I=E;J=F;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}}else{z=Rb()|0;C=Q;D=z}while(0);zb(x|0);I=C;J=D;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}y=Rb()|0;I=Q;J=y;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(u);Ava(b);vva(d);Qb(J|0)}while(0);s=v;t=w;vva(d);Qb(t|0)}function eJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,j=0.0,l=0.0;if(!(i[a+12>>0]|0))d=0.0;else d=+Zc[k[(k[a>>2]|0)+60>>2]&255](a);e=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);if(!c){f=45.0e16;p[b>>3]=f;return}g=+p[c>>3];h=+p[c+8>>3];j=+p[c+16>>3];l=g*h+(g*g+h*h+j*j);if(l==0.0){f=225.0e15;p[b>>3]=f;return}f=(1.0-d)/(+ba(+l,+((e+-1.0)/(e*2.0)))*2.0);p[b>>3]=f;return}function fJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;d=+Zc[k[(k[a>>2]|0)+52>>2]&255](a);e=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);if(!c){f=-45.0e16;p[b>>3]=f;return}g=+p[c>>3];h=+p[c+8>>3];i=+p[c+16>>3];j=g*h+(g*g+h*h+i*i);if(j==0.0){f=-225.0e15;p[b>>3]=f;return}f=-d/(+ba(+j,+((e+-1.0)/(e*2.0)))*2.0);p[b>>3]=f;return}function gJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,l=0.0,m=0.0;d=r;r=r+16|0;e=d;f=+p[c>>3];g=+p[c+8>>3];if(((f==0.0&g==0.0?+p[c+16>>3]==0.0:0)?+p[c+24>>3]==0.0:0)?+p[c+32>>3]==0.0:0){h=5.0e13;p[b>>3]=h;r=d;return}i=+p[c+16>>3];j=+p[c+24>>3];l=+p[c+32>>3];m=l*l+(j*j+(i*i+(f*g+(f*f+g*g))));g=+aa(+m);Xc[k[(k[a>>2]|0)+68>>2]&63](a,e,g);g=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);h=+p[e>>3]*((1.0-g)/(g*2.0))/m;p[b>>3]=h;r=d;return}function hJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;f=+p[c>>3];g=+p[c+8>>3];if(f==0.0&g==0.0?+p[c+16>>3]==0.0:0){h=5.0e13;p[b>>3]=h;r=d;return}i=+p[c+16>>3];j=i*i+(f*g+(f*f+g*g));g=+aa(+j);Xc[k[(k[a>>2]|0)+72>>2]&63](a,e,g);g=+Zc[k[(k[a>>2]|0)+64>>2]&255](a);h=+p[e>>3]*((1.0-g)/(g*2.0))/j;p[b>>3]=h;r=d;return}function iJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function jJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function kJ(a,b,c){a=a|0;b=+b;c=c|0;return}function lJ(a,b,c){a=a|0;b=+b;c=c|0;return}function mJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function nJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function oJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function pJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function qJ(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0.0;i=r;r=r+80|0;j=i+72|0;l=i+24|0;m=i;n=k[a+20>>2]|0;if((c|0)==3){Yo(n,l,d,e,f,g,h);o=+p[l>>3];q=+p[l+8>>3];s=+p[l+24>>3];t=+p[l+32>>3];u=+p[l+40>>3];v=+aa(+(o*q+(o*o+q*q+s*s+t*t+u*u)+1.0e-54));w=k[a>>2]|0;x=w+68|0;y=k[x>>2]|0;Xc[y&63](a,j,v);z=+p[j>>3];p[b>>3]=z;r=i;return}else{Xo(n,m,d,e,f,g);u=+p[m>>3];t=+p[m+8>>3];s=+p[m+16>>3];v=+aa(+(u*u+t*t+s*(s*2.0)))*.7071067811865475;w=k[a>>2]|0;x=w+68|0;y=k[x>>2]|0;Xc[y&63](a,j,v);z=+p[j>>3];p[b>>3]=z;r=i;return}}function rJ(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[a>>2]|0)+84>>2]&1023](a,b,c);return}function sJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0.0;h=r;r=r+64|0;i=h+56|0;j=h+16|0;l=h;m=k[a+20>>2]|0;if((c|0)==3){ep(m,j,d,e,f,g);n=+p[j>>3];o=+p[j+8>>3];q=+p[j+16>>3];s=+p[j+24>>3];t=+p[j+32>>3];u=+aa(+(n*o+(n*n+o*o+q*q+s*s+t*t)));v=k[a>>2]|0;w=v+68|0;x=k[w>>2]|0;Xc[x&63](a,i,u);y=+p[i>>3];p[b>>3]=y;r=h;return}else{fp(m,l,d,e,f,g);t=+p[l>>3];s=+p[l+8>>3];u=+aa(+(t*t+s*(s*2.0)))*.7071067811865475;v=k[a>>2]|0;w=v+68|0;x=k[w>>2]|0;Xc[x&63](a,i,u);y=+p[i>>3];p[b>>3]=y;r=h;return}}function tJ(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[a>>2]|0)+84>>2]&1023](a,b,c);return}function uJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;h=r;r=r+272|0;i=h+248|0;j=h+64|0;l=h+24|0;m=h;n=h+112|0;o=h+96|0;q=h+84|0;s=h+72|0;if((e|0)!=0&(f|0)!=0&(g|0)!=0){nd[k[(k[g>>2]|0)+48>>2]&1023](g,j,d);rd[k[(k[g>>2]|0)+60>>2]&511](g,m,c,d);g=a+20|0;t=+Lp(k[g>>2]|0,c,d);u=+WJ(k[(k[g>>2]|0)+32>>2]|0,265);v=u*+WJ(k[(k[g>>2]|0)+32>>2]|0,65);u=v*+$(+(+p[j>>3]-t));t=+p[m>>3];v=+p[m+8>>3];w=u*+aa(+(t*t+v*v));ep(k[g>>2]|0,l,c,d,e,f);v=+p[l>>3];t=+p[l+8>>3];u=+p[l+16>>3];x=+aa(+(u*u+(v*t+(v*v+t*t))));if(x==0.0){y=25.0e16;p[b>>3]=y;r=h;return}t=+Zc[k[(k[a>>2]|0)+40>>2]&255](a);v=w*w;w=-x/t;x=+aa(+(v*(v*v)*4.0/27.0+w*w));u=+ba(+((x-w)*.5),.3333333333333333)-+ba(+((w+x)*.5),.3333333333333333);y=1.0/(t*2.0*(v+u*u));p[b>>3]=y;r=h;return}h=n+56|0;b=n+4|0;k[n>>2]=27524;k[h>>2]=27544;B=0;wa(508,n+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;vva(h);Qb(A|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;C=Q;D=l}else{k[b>>2]=27560;l=n+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[n+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,b|0,i|0);f=B;B=0;if(f&1){f=Rb()|0;e=Q;Yua(i);Yua(l);Ava(b);C=e;D=f;break}Yua(i);B=0;f=Ia(40,n|0,78129,13)|0;e=B;B=0;if(!(e&1)?(B=0,Xa(239,f|0,0)|0,f=B,B=0,!(f&1)):0){f=Ab(20)|0;B=0;eb(502,o|0,78025,75);e=B;B=0;do if(!(e&1)){B=0;eb(502,q|0,143594,13);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(o);E=d;F=c;break}B=0;wa(510,s|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;G=Q;H=c;I=1}else{B=0;ua(163,f|0,o|0,q|0,676,s|0);c=B;B=0;if(c&1)J=1;else{B=0;eb(503,f|0,1240,229);B=0;J=0}c=Rb()|0;d=Q;Yua(s);G=d;H=c;I=J}Yua(q);Yua(o);if(I){E=H;F=G}else{K=H;L=G;k[n>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(K|0)}}else{c=Rb()|0;E=c;F=Q}while(0);zb(f|0);K=E;L=F;k[n>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(K|0)}e=Rb()|0;K=e;L=Q;k[n>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(K|0)}while(0);z=C;A=D;vva(h);Qb(A|0)}function vJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0.0,s=0.0;h=r;r=r+48|0;i=h+32|0;j=h+8|0;l=h;m=k[a+20>>2]|0;if((c|0)==2){Xo(m,j,d,e,f,g);n=+p[j>>3];o=+p[j+8>>3];q=+p[j+16>>3];s=n*o+(n*n+o*o+q*q)}else{hp(m,l,d,e,f);q=+p[l>>3];s=q*q*.5}q=+aa(+s);Xc[k[(k[a>>2]|0)+72>>2]&63](a,i,q);p[b>>3]=+p[i>>3];r=h;return}function wJ(a,b,c){a=a|0;b=b|0;c=c|0;nd[k[(k[a>>2]|0)+96>>2]&1023](a,b,c);return}function xJ(a){a=a|0;k[a+20>>2]=0;Dla(k[a+16>>2]|0);return}function yJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,78153,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,53,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function zJ(a,b,c){a=a|0;b=b|0;c=c|0;yJ(a+-4|0,b,c)}function AJ(a){a=a|0;k[a>>2]=33700;k[a+4>>2]=33864;return}function BJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0;d=r;r=r+576|0;e=d+556|0;f=d+544|0;g=d+532|0;h=d+568|0;j=d+528|0;l=d+524|0;m=d+520|0;n=d+384|0;o=d+232|0;p=d+84|0;q=d+72|0;s=d+248|0;t=d+60|0;u=d+48|0;v=d+36|0;w=d+96|0;x=d+24|0;y=d+12|0;z=d;k[a>>2]=33700;k[a+4>>2]=33864;A=a+16|0;C=a+24|0;D=a+32|0;E=a+40|0;F=a+48|0;G=a+56|0;H=a+64|0;I=a+72|0;J=a+80|0;K=a+88|0;L=a+96|0;M=a+104|0;N=a+112|0;O=a+120|0;P=a+136|0;R=a+144|0;S=a+152|0;T=a+160|0;U=a+176|0;V=a+168|0;W=a+184|0;X=a+192|0;Y=a+200|0;Z=a+208|0;_=a+216|0;$=a+224|0;aa=a+232|0;ba=a+240|0;ca=a+248|0;da=a+256|0;ea=a+264|0;fa=a+272|0;ga=a+280|0;ha=a+288|0;ia=a+296|0;WEa(A|0,0,360)|0;B=0;eb(512,c|0,j|0,131762);ja=B;B=0;a:do if((!(ja&1)?(B=0,eb(512,c|0,l|0,134789),ka=B,B=0,!(ka&1)):0)?(B=0,eb(512,c|0,m|0,127514),ka=B,B=0,!(ka&1)):0){k[a+8>>2]=b;if(((k[m>>2]|0)+-583|0)>>>0>=3){ka=w+56|0;la=w+4|0;k[w>>2]=27524;k[ka>>2]=27544;B=0;wa(508,w+56|0,la|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;oa=ma}else{k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);ma=B;B=0;do if(ma&1){pa=Rb()|0;qa=Q;ra=pa}else{k[la>>2]=27560;pa=w+36|0;k[pa>>2]=0;k[pa+4>>2]=0;k[pa+8>>2]=0;k[pa+12>>2]=0;k[w+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,la|0,e|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(e);Yua(pa);Ava(la);qa=ta;ra=sa;break}Yua(e);B=0;sa=Ia(40,w|0,79085,9)|0;ta=B;B=0;b:do if((((!(ta&1)?(B=0,xa=ya(427,k[m>>2]|0)|0,za=B,B=0,!(za&1)):0)?(za=Lta(xa)|0,B=0,Aa=Ia(40,sa|0,xa|0,za|0)|0,za=B,B=0,!(za&1)):0)?(B=0,za=Ia(40,Aa|0,146481,18)|0,Aa=B,B=0,!(Aa&1)):0)?(B=0,Xa(239,za|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,x|0,78522,75);Aa=B;B=0;do if(!(Aa&1)){B=0;eb(502,y|0,98515,6);xa=B;B=0;if(xa&1){xa=Rb()|0;Ba=Q;Yua(x);Ca=xa;Da=Ba;break}B=0;wa(510,z|0,la|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ea=1;Fa=Q;Ga=Ba}else{B=0;ua(163,za|0,x|0,y|0,171,z|0);Ba=B;B=0;if(Ba&1)Ha=1;else{B=0;eb(503,za|0,1240,229);B=0;Ha=0}Ba=Rb()|0;xa=Q;Yua(z);Ea=Ha;Fa=xa;Ga=Ba}Yua(y);Yua(x);if(Ea){Ca=Ga;Da=Fa}else{Ja=Fa;Ka=Ga;break b}}else{Ba=Rb()|0;Ca=Ba;Da=Q}while(0);zb(za|0);Ja=Da;Ka=Ca}else La=119;while(0);if((La|0)==119){sa=Rb()|0;Ja=Q;Ka=sa}k[w>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(pa);Ava(la);vva(ka);Ma=Ja;Na=Ka;Qb(Na|0)}while(0);na=qa;oa=ra}vva(ka);Oa=na;Pa=oa;break}B=0;eb(513,c|0,A|0,126961);la=B;B=0;if(((((((((((((!(la&1)?(B=0,eb(513,c|0,C|0,78237),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,D|0,78260),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,E|0,78288),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,F|0,129827),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,G|0,78310),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,H|0,78343),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,I|0,78381),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,J|0,78405),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,K|0,78423),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,L|0,129853),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,M|0,78449),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,N|0,78483),la=B,B=0,!(la&1)):0)?(B=0,eb(513,c|0,O|0,126946),la=B,B=0,!(la&1)):0){switch(k[l>>2]|0){case 470:case 466:case 465:case 459:case 387:break;case 389:{B=0;eb(513,c|0,V|0,133341);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,U|0,133328);la=B;B=0;if(la&1){La=5;break a}break}case 438:{B=0;eb(513,c|0,P|0,133544);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,R|0,133558);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,S|0,133571);la=B;B=0;if(la&1){La=5;break a}break}case 457:{B=0;eb(513,c|0,P|0,133544);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,R|0,133558);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,S|0,133571);la=B;B=0;if(la&1){La=5;break a}B=0;eb(513,c|0,T|0,133666);la=B;B=0;if(la&1){La=5;break a}break}default:{la=n+56|0;ma=n+4|0;k[n>>2]=27524;k[la>>2]=27544;B=0;wa(508,n+56|0,ma|0);sa=B;B=0;if(sa&1){sa=Rb()|0;Qa=Q;Ra=sa}else{k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[la>>2]=27488;B=0;va(448,ma|0);sa=B;B=0;do if(sa&1){ta=Rb()|0;Sa=Q;Ta=ta}else{k[ma>>2]=27560;ta=n+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[n+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ma|0,g|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ba=Q;Yua(g);Yua(ta);Ava(ma);Sa=Ba;Ta=Aa;break}Yua(g);B=0;Aa=Ia(40,n|0,133089,27)|0;Ba=B;B=0;c:do if(Ba&1)La=49;else{B=0;xa=ya(427,k[l>>2]|0)|0;Ua=B;B=0;if(Ua&1){La=49;break}Ua=Lta(xa)|0;B=0;Va=Ia(40,Aa|0,xa|0,Ua|0)|0;Ua=B;B=0;if(Ua&1){La=49;break}B=0;Ua=Ia(40,Va|0,146481,18)|0;Va=B;B=0;if(Va&1){La=49;break}B=0;Xa(239,Ua|0,0)|0;Ua=B;B=0;if(Ua&1){La=49;break}Ua=Ab(20)|0;B=0;eb(502,o|0,78522,75);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,p|0,98515,6);xa=B;B=0;if(xa&1){xa=Rb()|0;Wa=Q;Yua(o);Ya=Wa;Za=xa;break}B=0;wa(510,q|0,ma|0);xa=B;B=0;if(xa&1){xa=Rb()|0;_a=Q;$a=xa;ab=1}else{B=0;ua(163,Ua|0,o|0,p|0,132,q|0);xa=B;B=0;if(xa&1)bb=1;else{B=0;eb(503,Ua|0,1240,229);B=0;bb=0}xa=Rb()|0;Wa=Q;Yua(q);_a=Wa;$a=xa;ab=bb}Yua(p);Yua(o);if(ab){Ya=_a;Za=$a}else{cb=_a;db=$a;break c}}else{xa=Rb()|0;Ya=Q;Za=xa}while(0);zb(Ua|0);cb=Ya;db=Za}while(0);if((La|0)==49){Aa=Rb()|0;cb=Q;db=Aa}k[n>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(ta);Ava(ma);vva(la);Ma=cb;Na=db;Qb(Na|0)}while(0);Qa=Sa;Ra=Ta}vva(la);Oa=Qa;Pa=Ra;break a}}d:do switch(k[j>>2]|0){case 122:{B=0;eb(513,c|0,W|0,78598);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,X|0,78636);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,Y|0,78667);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,Z|0,78699);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(514,c|0,h|0,131781);ma=B;B=0;if(ma&1){La=5;break a}if(!(i[h>>0]|0))break d;B=0;eb(513,c|0,_|0,78734);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,$|0,78767);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,aa|0,78793);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,ba|0,78828);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,ca|0,78863);ma=B;B=0;if(ma&1){La=5;break a}B=0;eb(513,c|0,da|0,78894);ma=B;B=0;if(ma&1){La=5;break a}break}case 119:case 165:break;default:{ma=s+56|0;sa=s+4|0;k[s>>2]=27524;k[ma>>2]=27544;B=0;wa(508,s+56|0,sa|0);ka=B;B=0;if(ka&1){ka=Rb()|0;fb=Q;gb=ka}else{k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[ma>>2]=27488;B=0;va(448,sa|0);ka=B;B=0;do if(ka&1){Aa=Rb()|0;hb=Q;ib=Aa}else{k[sa>>2]=27560;Aa=s+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,sa|0,f|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;pa=Q;Yua(f);Yua(Aa);Ava(sa);hb=pa;ib=Ba;break}Yua(f);B=0;Ba=Ia(40,s|0,116424,16)|0;pa=B;B=0;e:do if(pa&1)La=88;else{B=0;Va=ya(427,k[j>>2]|0)|0;za=B;B=0;if(za&1){La=88;break}za=Lta(Va)|0;B=0;xa=Ia(40,Ba|0,Va|0,za|0)|0;za=B;B=0;if(za&1){La=88;break}B=0;za=Ia(40,xa|0,146481,18)|0;xa=B;B=0;if(xa&1){La=88;break}B=0;Xa(239,za|0,0)|0;za=B;B=0;if(za&1){La=88;break}za=Ab(20)|0;B=0;eb(502,t|0,78522,75);xa=B;B=0;do if(!(xa&1)){B=0;eb(502,u|0,98515,6);Va=B;B=0;if(Va&1){Va=Rb()|0;Wa=Q;Yua(t);jb=Va;kb=Wa;break}B=0;wa(510,v|0,sa|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;lb=1;mb=Q;nb=Wa}else{B=0;ua(163,za|0,t|0,u|0,157,v|0);Wa=B;B=0;if(Wa&1)ob=1;else{B=0;eb(503,za|0,1240,229);B=0;ob=0}Wa=Rb()|0;Va=Q;Yua(v);lb=ob;mb=Va;nb=Wa}Yua(u);Yua(t);if(lb){jb=nb;kb=mb}else{pb=mb;qb=nb;break e}}else{Wa=Rb()|0;jb=Wa;kb=Q}while(0);zb(za|0);pb=kb;qb=jb}while(0);if((La|0)==88){Ba=Rb()|0;pb=Q;qb=Ba}k[s>>2]=27468;k[ma>>2]=27488;k[sa>>2]=27560;Yua(Aa);Ava(sa);vva(ma);Ma=pb;Na=qb;Qb(Na|0)}while(0);fb=hb;gb=ib}vva(ma);Oa=fb;Pa=gb;break a}}while(0);B=0;eb(513,c|0,ea|0,78924);la=B;B=0;if(!(la&1)){B=0;eb(513,c|0,fa|0,78963);la=B;B=0;if(la&1){La=5;break}B=0;eb(513,c|0,ga|0,78996);la=B;B=0;if(la&1){La=5;break}B=0;eb(513,c|0,ha|0,79030);la=B;B=0;if(la&1){La=5;break}B=0;eb(513,c|0,ia|0,79058);la=B;B=0;if(la&1){La=5;break}r=d;return}else La=5}else La=5}else La=5;while(0);if((La|0)==5){La=Rb()|0;Oa=Q;Pa=La}Ma=Oa;Na=Pa;Qb(Na|0)}function CJ(a){a=a|0;k[a>>2]=33700;k[a+4>>2]=33864;return}function DJ(a){a=a|0;Sqa(a);return}function EJ(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0;b=r;r=r+3024|0;c=b+3e3|0;d=b+2744|0;e=b+2988|0;f=b+2608|0;g=b+2976|0;h=b+2456|0;i=b+2964|0;j=b+2320|0;l=b+2952|0;m=b+2184|0;n=b+2940|0;o=b+2032|0;q=b+2928|0;s=b+1896|0;t=b+2916|0;u=b+1744|0;v=b+2904|0;w=b+1608|0;x=b+2892|0;y=b+1456|0;z=b+2880|0;A=b+1304|0;C=b+2592|0;D=b+1168|0;E=b+2168|0;F=b+1032|0;G=b+1880|0;H=b+880|0;I=b+1592|0;J=b+744|0;K=b+1440|0;L=b+592|0;M=b+1016|0;N=b+456|0;O=b+728|0;P=b+304|0;R=b+440|0;S=b+168|0;T=b+152|0;U=b+16|0;V=b;W=d+56|0;X=d+4|0;k[d>>2]=27524;k[W>>2]=27544;B=0;wa(508,d+56|0,X|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;_=Y;vva(W);Qb(_|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[W>>2]=27488;B=0;va(448,X|0);Y=B;B=0;do if(Y&1){$=Rb()|0;aa=Q;ba=$}else{k[X>>2]=27560;$=d+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,X|0,c|0);ca=B;B=0;if(ca&1){ca=Rb()|0;da=Q;Yua(c);Yua($);Ava(X);aa=da;ba=ca;break}Yua(c);B=0;Ia(40,d|0,79095,8)|0;ca=B;B=0;do if(!(ca&1)?(B=0,wa(510,e|0,X|0),da=B,B=0,!(da&1)):0){B=0;ya(424,e|0)|0;da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(e);fa=ea;ga=da;break}Yua(e);k[d>>2]=27468;k[W>>2]=27488;k[X>>2]=27560;Yua($);Ava(X);vva(W);da=f+56|0;ea=f+4|0;k[f>>2]=27524;k[da>>2]=27544;B=0;wa(508,f+56|0,ea|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;ja=ha;vva(da);Qb(ja|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[da>>2]=27488;B=0;va(448,ea|0);ha=B;B=0;do if(ha&1){ka=Rb()|0;la=Q;ma=ka}else{k[ea>>2]=27560;ka=f+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ea|0,c|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(c);Yua(ka);Ava(ea);la=oa;ma=na;break}Yua(c);B=0;na=Ia(40,f|0,143238,8)|0;oa=B;B=0;do if(((!(oa&1)?(B=0,pa=Xa(242,na|0,k[a+8>>2]|0)|0,qa=B,B=0,!(qa&1)):0)?(B=0,Ia(40,pa|0,149177,1)|0,pa=B,B=0,!(pa&1)):0)?(B=0,wa(510,g|0,ea|0),pa=B,B=0,!(pa&1)):0){B=0;ya(424,g|0)|0;pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;Yua(g);ra=qa;sa=pa;break}Yua(g);k[f>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);pa=h+56|0;qa=h+4|0;k[h>>2]=27524;k[pa>>2]=27544;B=0;wa(508,h+56|0,qa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;xa=ta;vva(pa);Qb(xa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[pa>>2]=27488;B=0;va(448,qa|0);ta=B;B=0;do if(ta&1){za=Rb()|0;Aa=Q;Ba=za}else{k[qa>>2]=27560;za=h+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qa|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Yua(c);Yua(za);Ava(qa);Aa=Da;Ba=Ca;break}Yua(c);B=0;Ca=Ia(40,h|0,79104,12)|0;Da=B;B=0;do if(Da&1)Ea=266;else{B=0;Fa=Sa(1,Ca|0,+(+p[a+16>>3]))|0;Ga=B;B=0;if(Ga&1){Ea=266;break}B=0;Ia(40,Fa|0,149177,1)|0;Fa=B;B=0;if(Fa&1){Ea=266;break}B=0;wa(510,i|0,qa|0);Fa=B;B=0;if(Fa&1){Ea=266;break}B=0;ya(424,i|0)|0;Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(i);Ha=Ga;Ja=Fa;break}Yua(i);k[h>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);Fa=j+56|0;Ga=j+4|0;k[j>>2]=27524;k[Fa>>2]=27544;B=0;wa(508,j+56|0,Ga|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;La=Q;Ma=Ka;vva(Fa);Qb(Ma|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Fa>>2]=27488;B=0;va(448,Ga|0);Ka=B;B=0;do if(Ka&1){Na=Rb()|0;Oa=Q;Pa=Na}else{k[Ga>>2]=27560;Na=j+36|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ga|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Ra=Q;Yua(c);Yua(Na);Ava(Ga);Oa=Ra;Pa=Qa;break}Yua(c);B=0;Qa=Ia(40,j|0,79117,14)|0;Ra=B;B=0;do if(Ra&1)Ea=269;else{B=0;Ta=Sa(1,Qa|0,+(+p[a+24>>3]))|0;Ua=B;B=0;if(Ua&1){Ea=269;break}B=0;Ia(40,Ta|0,149177,1)|0;Ta=B;B=0;if(Ta&1){Ea=269;break}B=0;wa(510,l|0,Ga|0);Ta=B;B=0;if(Ta&1){Ea=269;break}B=0;ya(424,l|0)|0;Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Ua=Q;Yua(l);Va=Ua;Wa=Ta;break}Yua(l);k[j>>2]=27468;k[Fa>>2]=27488;k[Ga>>2]=27560;Yua(Na);Ava(Ga);vva(Fa);Ta=m+56|0;Ua=m+4|0;k[m>>2]=27524;k[Ta>>2]=27544;B=0;wa(508,m+56|0,Ua|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;Za=Q;_a=Ya;vva(Ta);Qb(_a|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[Ta>>2]=27488;B=0;va(448,Ua|0);Ya=B;B=0;do if(Ya&1){$a=Rb()|0;ab=Q;bb=$a}else{k[Ua>>2]=27560;$a=m+36|0;k[$a>>2]=0;k[$a+4>>2]=0;k[$a+8>>2]=0;k[$a+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);cb=B;B=0;if(cb&1){cb=Rb()|0;db=Q;Yua(c);Yua($a);Ava(Ua);ab=db;bb=cb;break}Yua(c);B=0;cb=Ia(40,m|0,79132,19)|0;db=B;B=0;do if(db&1)Ea=272;else{B=0;eb=Sa(1,cb|0,+(+p[a+32>>3]))|0;fb=B;B=0;if(fb&1){Ea=272;break}B=0;Ia(40,eb|0,149177,1)|0;eb=B;B=0;if(eb&1){Ea=272;break}B=0;wa(510,n|0,Ua|0);eb=B;B=0;if(eb&1){Ea=272;break}B=0;ya(424,n|0)|0;eb=B;B=0;if(eb&1){eb=Rb()|0;fb=Q;Yua(n);gb=fb;hb=eb;break}Yua(n);k[m>>2]=27468;k[Ta>>2]=27488;k[Ua>>2]=27560;Yua($a);Ava(Ua);vva(Ta);eb=o+56|0;fb=o+4|0;k[o>>2]=27524;k[eb>>2]=27544;B=0;wa(508,o+56|0,fb|0);ib=B;B=0;if(ib&1){ib=Rb()|0;jb=Q;kb=ib;vva(eb);Qb(kb|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[eb>>2]=27488;B=0;va(448,fb|0);ib=B;B=0;do if(ib&1){lb=Rb()|0;mb=Q;nb=lb}else{k[fb>>2]=27560;lb=o+36|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fb|0,c|0);ob=B;B=0;if(ob&1){ob=Rb()|0;pb=Q;Yua(c);Yua(lb);Ava(fb);mb=pb;nb=ob;break}Yua(c);B=0;ob=Ia(40,o|0,79152,13)|0;pb=B;B=0;do if(pb&1)Ea=275;else{B=0;qb=Sa(1,ob|0,+(+p[a+40>>3]))|0;rb=B;B=0;if(rb&1){Ea=275;break}B=0;Ia(40,qb|0,149177,1)|0;qb=B;B=0;if(qb&1){Ea=275;break}B=0;wa(510,q|0,fb|0);qb=B;B=0;if(qb&1){Ea=275;break}B=0;ya(424,q|0)|0;qb=B;B=0;if(qb&1){qb=Rb()|0;rb=Q;Yua(q);sb=rb;tb=qb;break}Yua(q);k[o>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(lb);Ava(fb);vva(eb);qb=s+56|0;rb=s+4|0;k[s>>2]=27524;k[qb>>2]=27544;B=0;wa(508,s+56|0,rb|0);ub=B;B=0;if(ub&1){ub=Rb()|0;vb=Q;wb=ub;vva(qb);Qb(wb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[qb>>2]=27488;B=0;va(448,rb|0);ub=B;B=0;do if(ub&1){xb=Rb()|0;yb=Q;zb=xb}else{k[rb>>2]=27560;xb=s+36|0;k[xb>>2]=0;k[xb+4>>2]=0;k[xb+8>>2]=0;k[xb+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,rb|0,c|0);Ab=B;B=0;if(Ab&1){Ab=Rb()|0;Bb=Q;Yua(c);Yua(xb);Ava(rb);yb=Bb;zb=Ab;break}Yua(c);B=0;Ab=Ia(40,s|0,79166,17)|0;Bb=B;B=0;do if(Bb&1)Ea=278;else{B=0;Cb=Sa(1,Ab|0,+(+p[a+48>>3]))|0;Db=B;B=0;if(Db&1){Ea=278;break}B=0;Ia(40,Cb|0,149177,1)|0;Cb=B;B=0;if(Cb&1){Ea=278;break}B=0;wa(510,t|0,rb|0);Cb=B;B=0;if(Cb&1){Ea=278;break}B=0;ya(424,t|0)|0;Cb=B;B=0;if(Cb&1){Cb=Rb()|0;Db=Q;Yua(t);Eb=Db;Fb=Cb;break}Yua(t);k[s>>2]=27468;k[qb>>2]=27488;k[rb>>2]=27560;Yua(xb);Ava(rb);vva(qb);Cb=u+56|0;Db=u+4|0;k[u>>2]=27524;k[Cb>>2]=27544;B=0;wa(508,u+56|0,Db|0);Gb=B;B=0;if(Gb&1){Gb=Rb()|0;Hb=Q;Ib=Gb;vva(Cb);Qb(Ib|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Cb>>2]=27488;B=0;va(448,Db|0);Gb=B;B=0;do if(Gb&1){Jb=Rb()|0;Kb=Q;Lb=Jb}else{k[Db>>2]=27560;Jb=u+36|0;k[Jb>>2]=0;k[Jb+4>>2]=0;k[Jb+8>>2]=0;k[Jb+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Db|0,c|0);Mb=B;B=0;if(Mb&1){Mb=Rb()|0;Nb=Q;Yua(c);Yua(Jb);Ava(Db);Kb=Nb;Lb=Mb;break}Yua(c);B=0;Mb=Ia(40,u|0,79184,24)|0;Nb=B;B=0;do if(Nb&1)Ea=281;else{B=0;Ob=Sa(1,Mb|0,+(+p[a+56>>3]))|0;Pb=B;B=0;if(Pb&1){Ea=281;break}B=0;Ia(40,Ob|0,149177,1)|0;Ob=B;B=0;if(Ob&1){Ea=281;break}B=0;wa(510,v|0,Db|0);Ob=B;B=0;if(Ob&1){Ea=281;break}B=0;ya(424,v|0)|0;Ob=B;B=0;if(Ob&1){Ob=Rb()|0;Pb=Q;Yua(v);Sb=Pb;Tb=Ob;break}Yua(v);k[u>>2]=27468;k[Cb>>2]=27488;k[Db>>2]=27560;Yua(Jb);Ava(Db);vva(Cb);Ob=w+56|0;Pb=w+4|0;k[w>>2]=27524;k[Ob>>2]=27544;B=0;wa(508,w+56|0,Pb|0);Ub=B;B=0;if(Ub&1){Ub=Rb()|0;Vb=Q;Wb=Ub;vva(Ob);Qb(Wb|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[Ob>>2]=27488;B=0;va(448,Pb|0);Ub=B;B=0;do if(Ub&1){Xb=Rb()|0;Yb=Q;Zb=Xb}else{k[Pb>>2]=27560;Xb=w+36|0;k[Xb>>2]=0;k[Xb+4>>2]=0;k[Xb+8>>2]=0;k[Xb+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Pb|0,c|0);_b=B;B=0;if(_b&1){_b=Rb()|0;$b=Q;Yua(c);Yua(Xb);Ava(Pb);Yb=$b;Zb=_b;break}Yua(c);B=0;_b=Ia(40,w|0,79209,29)|0;$b=B;B=0;do if($b&1)Ea=284;else{B=0;ac=Sa(1,_b|0,+(+p[a+64>>3]))|0;bc=B;B=0;if(bc&1){Ea=284;break}B=0;Ia(40,ac|0,149177,1)|0;ac=B;B=0;if(ac&1){Ea=284;break}B=0;wa(510,x|0,Pb|0);ac=B;B=0;if(ac&1){Ea=284;break}B=0;ya(424,x|0)|0;ac=B;B=0;if(ac&1){ac=Rb()|0;bc=Q;Yua(x);cc=bc;dc=ac;break}Yua(x);k[w>>2]=27468;k[Ob>>2]=27488;k[Pb>>2]=27560;Yua(Xb);Ava(Pb);vva(Ob);ac=y+56|0;bc=y+4|0;k[y>>2]=27524;k[ac>>2]=27544;B=0;wa(508,y+56|0,bc|0);ec=B;B=0;if(ec&1){ec=Rb()|0;fc=Q;gc=ec;vva(ac);Qb(gc|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[ac>>2]=27488;B=0;va(448,bc|0);ec=B;B=0;do if(ec&1){hc=Rb()|0;ic=Q;jc=hc}else{k[bc>>2]=27560;hc=y+36|0;k[hc>>2]=0;k[hc+4>>2]=0;k[hc+8>>2]=0;k[hc+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,bc|0,c|0);kc=B;B=0;if(kc&1){kc=Rb()|0;lc=Q;Yua(c);Yua(hc);Ava(bc);ic=lc;jc=kc;break}Yua(c);B=0;kc=Ia(40,y|0,79239,15)|0;lc=B;B=0;do if(lc&1)Ea=287;else{B=0;mc=Sa(1,kc|0,+(+p[a+72>>3]))|0;nc=B;B=0;if(nc&1){Ea=287;break}B=0;Ia(40,mc|0,149177,1)|0;mc=B;B=0;if(mc&1){Ea=287;break}B=0;wa(510,z|0,bc|0);mc=B;B=0;if(mc&1){Ea=287;break}B=0;ya(424,z|0)|0;mc=B;B=0;if(mc&1){mc=Rb()|0;nc=Q;Yua(z);oc=nc;pc=mc;break}Yua(z);k[y>>2]=27468;k[ac>>2]=27488;k[bc>>2]=27560;Yua(hc);Ava(bc);vva(ac);mc=A+56|0;nc=A+4|0;k[A>>2]=27524;k[mc>>2]=27544;B=0;wa(508,A+56|0,nc|0);qc=B;B=0;if(qc&1){qc=Rb()|0;rc=Q;sc=qc;vva(mc);Qb(sc|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[mc>>2]=27488;B=0;va(448,nc|0);qc=B;B=0;do if(qc&1){tc=Rb()|0;uc=Q;vc=tc}else{k[nc>>2]=27560;tc=A+36|0;k[tc>>2]=0;k[tc+4>>2]=0;k[tc+8>>2]=0;k[tc+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nc|0,c|0);wc=B;B=0;if(wc&1){wc=Rb()|0;xc=Q;Yua(c);Yua(tc);Ava(nc);uc=xc;vc=wc;break}Yua(c);B=0;wc=Ia(40,A|0,79255,9)|0;xc=B;B=0;do if(xc&1)Ea=290;else{B=0;yc=Sa(1,wc|0,+(+p[a+80>>3]))|0;zc=B;B=0;if(zc&1){Ea=290;break}B=0;Ia(40,yc|0,149177,1)|0;yc=B;B=0;if(yc&1){Ea=290;break}B=0;wa(510,C|0,nc|0);yc=B;B=0;if(yc&1){Ea=290;break}B=0;ya(424,C|0)|0;yc=B;B=0;if(yc&1){yc=Rb()|0;zc=Q;Yua(C);Ac=zc;Bc=yc;break}Yua(C);k[A>>2]=27468;k[mc>>2]=27488;k[nc>>2]=27560;Yua(tc);Ava(nc);vva(mc);yc=D+56|0;zc=D+4|0;k[D>>2]=27524;k[yc>>2]=27544;B=0;wa(508,D+56|0,zc|0);Cc=B;B=0;if(Cc&1){Cc=Rb()|0;Dc=Q;Ec=Cc;vva(yc);Qb(Ec|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[yc>>2]=27488;B=0;va(448,zc|0);Cc=B;B=0;do if(Cc&1){Fc=Rb()|0;Gc=Q;Hc=Fc}else{k[zc>>2]=27560;Fc=D+36|0;k[Fc>>2]=0;k[Fc+4>>2]=0;k[Fc+8>>2]=0;k[Fc+12>>2]=0;k[D+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,zc|0,c|0);Ic=B;B=0;if(Ic&1){Ic=Rb()|0;Jc=Q;Yua(c);Yua(Fc);Ava(zc);Gc=Jc;Hc=Ic;break}Yua(c);B=0;Ic=Ia(40,D|0,79265,17)|0;Jc=B;B=0;do if(Jc&1)Ea=293;else{B=0;Kc=Sa(1,Ic|0,+(+p[a+88>>3]))|0;Lc=B;B=0;if(Lc&1){Ea=293;break}B=0;Ia(40,Kc|0,149177,1)|0;Kc=B;B=0;if(Kc&1){Ea=293;break}B=0;wa(510,E|0,zc|0);Kc=B;B=0;if(Kc&1){Ea=293;break}B=0;ya(424,E|0)|0;Kc=B;B=0;if(Kc&1){Kc=Rb()|0;Lc=Q;Yua(E);Mc=Lc;Nc=Kc;break}Yua(E);k[D>>2]=27468;k[yc>>2]=27488;k[zc>>2]=27560;Yua(Fc);Ava(zc);vva(yc);Kc=F+56|0;Lc=F+4|0;k[F>>2]=27524;k[Kc>>2]=27544;B=0;wa(508,F+56|0,Lc|0);Oc=B;B=0;if(Oc&1){Oc=Rb()|0;Pc=Q;Qc=Oc;vva(Kc);Qb(Qc|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[Kc>>2]=27488;B=0;va(448,Lc|0);Oc=B;B=0;do if(Oc&1){Rc=Rb()|0;Sc=Q;Tc=Rc}else{k[Lc>>2]=27560;Rc=F+36|0;k[Rc>>2]=0;k[Rc+4>>2]=0;k[Rc+8>>2]=0;k[Rc+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Lc|0,c|0);Uc=B;B=0;if(Uc&1){Uc=Rb()|0;Vc=Q;Yua(c);Yua(Rc);Ava(Lc);Sc=Vc;Tc=Uc;break}Yua(c);B=0;Uc=Ia(40,F|0,79283,25)|0;Vc=B;B=0;do if(Vc&1)Ea=296;else{B=0;Wc=Sa(1,Uc|0,+(+p[a+96>>3]))|0;Xc=B;B=0;if(Xc&1){Ea=296;break}B=0;Ia(40,Wc|0,149177,1)|0;Wc=B;B=0;if(Wc&1){Ea=296;break}B=0;wa(510,G|0,Lc|0);Wc=B;B=0;if(Wc&1){Ea=296;break}B=0;ya(424,G|0)|0;Wc=B;B=0;if(Wc&1){Wc=Rb()|0;Xc=Q;Yua(G);Yc=Xc;Zc=Wc;break}Yua(G);k[F>>2]=27468;k[Kc>>2]=27488;k[Lc>>2]=27560;Yua(Rc);Ava(Lc);vva(Kc);Wc=H+56|0;Xc=H+4|0;k[H>>2]=27524;k[Wc>>2]=27544;B=0;wa(508,H+56|0,Xc|0);_c=B;B=0;if(_c&1){_c=Rb()|0;$c=Q;ad=_c;vva(Wc);Qb(ad|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[Wc>>2]=27488;B=0;va(448,Xc|0);_c=B;B=0;do if(_c&1){bd=Rb()|0;cd=Q;dd=bd}else{k[Xc>>2]=27560;bd=H+36|0;k[bd>>2]=0;k[bd+4>>2]=0;k[bd+8>>2]=0;k[bd+12>>2]=0;k[H+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Xc|0,c|0);ed=B;B=0;if(ed&1){ed=Rb()|0;fd=Q;Yua(c);Yua(bd);Ava(Xc);cd=fd;dd=ed;break}Yua(c);B=0;ed=Ia(40,H|0,79309,25)|0;fd=B;B=0;do if(fd&1)Ea=299;else{B=0;gd=Sa(1,ed|0,+(+p[a+104>>3]))|0;hd=B;B=0;if(hd&1){Ea=299;break}B=0;Ia(40,gd|0,149177,1)|0;gd=B;B=0;if(gd&1){Ea=299;break}B=0;wa(510,I|0,Xc|0);gd=B;B=0;if(gd&1){Ea=299;break}B=0;ya(424,I|0)|0;gd=B;B=0;if(gd&1){gd=Rb()|0;hd=Q;Yua(I);id=hd;jd=gd;break}Yua(I);k[H>>2]=27468;k[Wc>>2]=27488;k[Xc>>2]=27560;Yua(bd);Ava(Xc);vva(Wc);gd=J+56|0;hd=J+4|0;k[J>>2]=27524;k[gd>>2]=27544;B=0;wa(508,J+56|0,hd|0);kd=B;B=0;if(kd&1){kd=Rb()|0;ld=Q;md=kd;vva(gd);Qb(md|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[gd>>2]=27488;B=0;va(448,hd|0);kd=B;B=0;do if(kd&1){nd=Rb()|0;od=Q;pd=nd}else{k[hd>>2]=27560;nd=J+36|0;k[nd>>2]=0;k[nd+4>>2]=0;k[nd+8>>2]=0;k[nd+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hd|0,c|0);qd=B;B=0;if(qd&1){qd=Rb()|0;rd=Q;Yua(c);Yua(nd);Ava(hd);od=rd;pd=qd;break}Yua(c);B=0;qd=Ia(40,J|0,79335,30)|0;rd=B;B=0;do if(rd&1)Ea=302;else{B=0;sd=Sa(1,qd|0,+(+p[a+112>>3]))|0;td=B;B=0;if(td&1){Ea=302;break}B=0;Ia(40,sd|0,149177,1)|0;sd=B;B=0;if(sd&1){Ea=302;break}B=0;wa(510,K|0,hd|0);sd=B;B=0;if(sd&1){Ea=302;break}B=0;ya(424,K|0)|0;sd=B;B=0;if(sd&1){sd=Rb()|0;td=Q;Yua(K);ud=td;vd=sd;break}Yua(K);k[J>>2]=27468;k[gd>>2]=27488;k[hd>>2]=27560;Yua(nd);Ava(hd);vva(gd);sd=L+56|0;td=L+4|0;k[L>>2]=27524;k[sd>>2]=27544;B=0;wa(508,L+56|0,td|0);wd=B;B=0;if(wd&1){wd=Rb()|0;xd=Q;yd=wd;vva(sd);Qb(yd|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[sd>>2]=27488;B=0;va(448,td|0);wd=B;B=0;do if(wd&1){zd=Rb()|0;Ad=Q;Bd=zd}else{k[td>>2]=27560;zd=L+36|0;k[zd>>2]=0;k[zd+4>>2]=0;k[zd+8>>2]=0;k[zd+12>>2]=0;k[L+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,td|0,c|0);Cd=B;B=0;if(Cd&1){Cd=Rb()|0;Dd=Q;Yua(c);Yua(zd);Ava(td);Ad=Dd;Bd=Cd;break}Yua(c);B=0;Cd=Ia(40,L|0,79366,6)|0;Dd=B;B=0;do if(Dd&1)Ea=305;else{B=0;Ed=Sa(1,Cd|0,+(+p[a+120>>3]))|0;Fd=B;B=0;if(Fd&1){Ea=305;break}B=0;Ia(40,Ed|0,149177,1)|0;Ed=B;B=0;if(Ed&1){Ea=305;break}B=0;wa(510,M|0,td|0);Ed=B;B=0;if(Ed&1){Ea=305;break}B=0;ya(424,M|0)|0;Ed=B;B=0;if(Ed&1){Ed=Rb()|0;Fd=Q;Yua(M);Gd=Fd;Hd=Ed;break}Yua(M);k[L>>2]=27468;k[sd>>2]=27488;k[td>>2]=27560;Yua(zd);Ava(td);vva(sd);Ed=N+56|0;Fd=N+4|0;k[N>>2]=27524;k[Ed>>2]=27544;B=0;wa(508,N+56|0,Fd|0);Id=B;B=0;if(Id&1){Id=Rb()|0;Jd=Q;Kd=Id;vva(Ed);Qb(Kd|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[Ed>>2]=27488;B=0;va(448,Fd|0);Id=B;B=0;do if(Id&1){Ld=Rb()|0;Md=Q;Nd=Ld}else{k[Fd>>2]=27560;Ld=N+36|0;k[Ld>>2]=0;k[Ld+4>>2]=0;k[Ld+8>>2]=0;k[Ld+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Fd|0,c|0);Od=B;B=0;if(Od&1){Od=Rb()|0;Pd=Q;Yua(c);Yua(Ld);Ava(Fd);Md=Pd;Nd=Od;break}Yua(c);B=0;Od=Ia(40,N|0,79373,11)|0;Pd=B;B=0;do if(Pd&1)Ea=308;else{B=0;Qd=Sa(1,Od|0,+(+p[a+136>>3]))|0;Rd=B;B=0;if(Rd&1){Ea=308;break}B=0;Ia(40,Qd|0,149177,1)|0;Qd=B;B=0;if(Qd&1){Ea=308;break}B=0;wa(510,O|0,Fd|0);Qd=B;B=0;if(Qd&1){Ea=308;break}B=0;ya(424,O|0)|0;Qd=B;B=0;if(Qd&1){Qd=Rb()|0;Rd=Q;Yua(O);Sd=Rd;Td=Qd;break}Yua(O);k[N>>2]=27468;k[Ed>>2]=27488;k[Fd>>2]=27560;Yua(Ld);Ava(Fd);vva(Ed);Qd=P+56|0;Rd=P+4|0;k[P>>2]=27524;k[Qd>>2]=27544;B=0;wa(508,P+56|0,Rd|0);Ud=B;B=0;if(Ud&1){Ud=Rb()|0;Vd=Q;Wd=Ud;vva(Qd);Qb(Wd|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Qd>>2]=27488;B=0;va(448,Rd|0);Ud=B;B=0;do if(Ud&1){Xd=Rb()|0;Yd=Q;Zd=Xd}else{k[Rd>>2]=27560;Xd=P+36|0;k[Xd>>2]=0;k[Xd+4>>2]=0;k[Xd+8>>2]=0;k[Xd+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Rd|0,c|0);_d=B;B=0;if(_d&1){_d=Rb()|0;$d=Q;Yua(c);Yua(Xd);Ava(Rd);Yd=$d;Zd=_d;break}Yua(c);B=0;_d=Ia(40,P|0,79385,10)|0;$d=B;B=0;do if($d&1)Ea=311;else{B=0;ae=Sa(1,_d|0,+(+p[a+144>>3]))|0;be=B;B=0;if(be&1){Ea=311;break}B=0;Ia(40,ae|0,149177,1)|0;ae=B;B=0;if(ae&1){Ea=311;break}B=0;wa(510,R|0,Rd|0);ae=B;B=0;if(ae&1){Ea=311;break}B=0;ya(424,R|0)|0;ae=B;B=0;if(ae&1){ae=Rb()|0;be=Q;Yua(R);ce=be;de=ae;break}Yua(R);k[P>>2]=27468;k[Qd>>2]=27488;k[Rd>>2]=27560;Yua(Xd);Ava(Rd);vva(Qd);ae=S+56|0;be=S+4|0;k[S>>2]=27524;k[ae>>2]=27544;B=0;wa(508,S+56|0,be|0);ee=B;B=0;if(ee&1){ee=Rb()|0;fe=Q;ge=ee;vva(ae);Qb(ge|0)}k[S+128>>2]=0;k[S+132>>2]=-1;k[S>>2]=27468;k[ae>>2]=27488;B=0;va(448,be|0);ee=B;B=0;do if(ee&1){he=Rb()|0;ie=Q;je=he}else{k[be>>2]=27560;he=S+36|0;k[he>>2]=0;k[he+4>>2]=0;k[he+8>>2]=0;k[he+12>>2]=0;k[S+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,be|0,c|0);ke=B;B=0;if(ke&1){ke=Rb()|0;le=Q;Yua(c);Yua(he);Ava(be);ie=le;je=ke;break}Yua(c);B=0;ke=Ia(40,S|0,79396,13)|0;le=B;B=0;do if(le&1)Ea=314;else{B=0;me=Sa(1,ke|0,+(+p[a+152>>3]))|0;ne=B;B=0;if(ne&1){Ea=314;break}B=0;Ia(40,me|0,149177,1)|0;me=B;B=0;if(me&1){Ea=314;break}B=0;wa(510,T|0,be|0);me=B;B=0;if(me&1){Ea=314;break}B=0;ya(424,T|0)|0;me=B;B=0;if(me&1){me=Rb()|0;ne=Q;Yua(T);oe=ne;pe=me;break}Yua(T);k[S>>2]=27468;k[ae>>2]=27488;k[be>>2]=27560;Yua(he);Ava(be);vva(ae);me=U+56|0;ne=U+4|0;k[U>>2]=27524;k[me>>2]=27544;B=0;wa(508,U+56|0,ne|0);qe=B;B=0;if(qe&1){qe=Rb()|0;re=Q;se=qe;vva(me);Qb(se|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[me>>2]=27488;B=0;va(448,ne|0);qe=B;B=0;do if(qe&1){te=Rb()|0;ue=Q;ve=te}else{k[ne>>2]=27560;te=U+36|0;k[te>>2]=0;k[te+4>>2]=0;k[te+8>>2]=0;k[te+12>>2]=0;k[U+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ne|0,c|0);we=B;B=0;if(we&1){we=Rb()|0;xe=Q;Yua(c);Yua(te);Ava(ne);ue=xe;ve=we;break}Yua(c);B=0;we=Ia(40,U|0,79410,12)|0;xe=B;B=0;do if(!(xe&1)){B=0;ye=Sa(1,we|0,+(+p[a+160>>3]))|0;ze=B;B=0;if(ze&1){Ea=317;break}B=0;Ia(40,ye|0,149177,1)|0;ye=B;B=0;if(ye&1){Ea=317;break}B=0;wa(510,V|0,ne|0);ye=B;B=0;if(ye&1){Ea=317;break}B=0;ya(424,V|0)|0;ye=B;B=0;if(ye&1){ye=Rb()|0;ze=Q;Yua(V);Ae=ze;Be=ye;break}else{Yua(V);k[U>>2]=27468;k[me>>2]=27488;k[ne>>2]=27560;Yua(te);Ava(ne);vva(me);r=b;return}}else Ea=317;while(0);if((Ea|0)==317){we=Rb()|0;Ae=Q;Be=we}k[U>>2]=27468;k[me>>2]=27488;k[ne>>2]=27560;Yua(te);Ava(ne);vva(me);Ce=Ae;De=Be;Qb(De|0)}while(0);re=ue;se=ve;vva(me);Qb(se|0)}while(0);if((Ea|0)==314){ke=Rb()|0;oe=Q;pe=ke}k[S>>2]=27468;k[ae>>2]=27488;k[be>>2]=27560;Yua(he);Ava(be);vva(ae);Ce=oe;De=pe;Qb(De|0)}while(0);fe=ie;ge=je;vva(ae);Qb(ge|0)}while(0);if((Ea|0)==311){_d=Rb()|0;ce=Q;de=_d}k[P>>2]=27468;k[Qd>>2]=27488;k[Rd>>2]=27560;Yua(Xd);Ava(Rd);vva(Qd);Ce=ce;De=de;Qb(De|0)}while(0);Vd=Yd;Wd=Zd;vva(Qd);Qb(Wd|0)}while(0);if((Ea|0)==308){Od=Rb()|0;Sd=Q;Td=Od}k[N>>2]=27468;k[Ed>>2]=27488;k[Fd>>2]=27560;Yua(Ld);Ava(Fd);vva(Ed);Ce=Sd;De=Td;Qb(De|0)}while(0);Jd=Md;Kd=Nd;vva(Ed);Qb(Kd|0)}while(0);if((Ea|0)==305){Cd=Rb()|0;Gd=Q;Hd=Cd}k[L>>2]=27468;k[sd>>2]=27488;k[td>>2]=27560;Yua(zd);Ava(td);vva(sd);Ce=Gd;De=Hd;Qb(De|0)}while(0);xd=Ad;yd=Bd;vva(sd);Qb(yd|0)}while(0);if((Ea|0)==302){qd=Rb()|0;ud=Q;vd=qd}k[J>>2]=27468;k[gd>>2]=27488;k[hd>>2]=27560;Yua(nd);Ava(hd);vva(gd);Ce=ud;De=vd;Qb(De|0)}while(0);ld=od;md=pd;vva(gd);Qb(md|0)}while(0);if((Ea|0)==299){ed=Rb()|0;id=Q;jd=ed}k[H>>2]=27468;k[Wc>>2]=27488;k[Xc>>2]=27560;Yua(bd);Ava(Xc);vva(Wc);Ce=id;De=jd;Qb(De|0)}while(0);$c=cd;ad=dd;vva(Wc);Qb(ad|0)}while(0);if((Ea|0)==296){Uc=Rb()|0;Yc=Q;Zc=Uc}k[F>>2]=27468;k[Kc>>2]=27488;k[Lc>>2]=27560;Yua(Rc);Ava(Lc);vva(Kc);Ce=Yc;De=Zc;Qb(De|0)}while(0);Pc=Sc;Qc=Tc;vva(Kc);Qb(Qc|0)}while(0);if((Ea|0)==293){Ic=Rb()|0;Mc=Q;Nc=Ic}k[D>>2]=27468;k[yc>>2]=27488;k[zc>>2]=27560;Yua(Fc);Ava(zc);vva(yc);Ce=Mc;De=Nc;Qb(De|0)}while(0);Dc=Gc;Ec=Hc;vva(yc);Qb(Ec|0)}while(0);if((Ea|0)==290){wc=Rb()|0;Ac=Q;Bc=wc}k[A>>2]=27468;k[mc>>2]=27488;k[nc>>2]=27560;Yua(tc);Ava(nc);vva(mc);Ce=Ac;De=Bc;Qb(De|0)}while(0);rc=uc;sc=vc;vva(mc);Qb(sc|0)}while(0);if((Ea|0)==287){kc=Rb()|0;oc=Q;pc=kc}k[y>>2]=27468;k[ac>>2]=27488;k[bc>>2]=27560;Yua(hc);Ava(bc);vva(ac);Ce=oc;De=pc;Qb(De|0)}while(0);fc=ic;gc=jc;vva(ac);Qb(gc|0)}while(0);if((Ea|0)==284){_b=Rb()|0;cc=Q;dc=_b}k[w>>2]=27468;k[Ob>>2]=27488;k[Pb>>2]=27560;Yua(Xb);Ava(Pb);vva(Ob);Ce=cc;De=dc;Qb(De|0)}while(0);Vb=Yb;Wb=Zb;vva(Ob);Qb(Wb|0)}while(0);if((Ea|0)==281){Mb=Rb()|0;Sb=Q;Tb=Mb}k[u>>2]=27468;k[Cb>>2]=27488;k[Db>>2]=27560;Yua(Jb);Ava(Db);vva(Cb);Ce=Sb;De=Tb;Qb(De|0)}while(0);Hb=Kb;Ib=Lb;vva(Cb);Qb(Ib|0)}while(0);if((Ea|0)==278){Ab=Rb()|0;Eb=Q;Fb=Ab}k[s>>2]=27468;k[qb>>2]=27488;k[rb>>2]=27560;Yua(xb);Ava(rb);vva(qb);Ce=Eb;De=Fb;Qb(De|0)}while(0);vb=yb;wb=zb;vva(qb);Qb(wb|0)}while(0);if((Ea|0)==275){ob=Rb()|0;sb=Q;tb=ob}k[o>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(lb);Ava(fb);vva(eb);Ce=sb;De=tb;Qb(De|0)}while(0);jb=mb;kb=nb;vva(eb);Qb(kb|0)}while(0);if((Ea|0)==272){cb=Rb()|0;gb=Q;hb=cb}k[m>>2]=27468;k[Ta>>2]=27488;k[Ua>>2]=27560;Yua($a);Ava(Ua);vva(Ta);Ce=gb;De=hb;Qb(De|0)}while(0);Za=ab;_a=bb;vva(Ta);Qb(_a|0)}while(0);if((Ea|0)==269){Qa=Rb()|0;Va=Q;Wa=Qa}k[j>>2]=27468;k[Fa>>2]=27488;k[Ga>>2]=27560;Yua(Na);Ava(Ga);vva(Fa);Ce=Va;De=Wa;Qb(De|0)}while(0);La=Oa;Ma=Pa;vva(Fa);Qb(Ma|0)}while(0);if((Ea|0)==266){Ca=Rb()|0;Ha=Q;Ja=Ca}k[h>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);Ce=Ha;De=Ja;Qb(De|0)}while(0);ua=Aa;xa=Ba;vva(pa);Qb(xa|0)}else Ea=263;while(0);if((Ea|0)==263){na=Rb()|0;ra=Q;sa=na}k[f>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);Ce=ra;De=sa;Qb(De|0)}while(0);ia=la;ja=ma;vva(da);Qb(ja|0)}else Ea=260;while(0);if((Ea|0)==260){ca=Rb()|0;fa=Q;ga=ca}k[d>>2]=27468;k[W>>2]=27488;k[X>>2]=27560;Yua($);Ava(X);vva(W);Ce=fa;De=ga;Qb(De|0)}while(0);Z=aa;_=ba;vva(W);Qb(_|0)}function FJ(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function GJ(a){a=a|0;return k[a+8>>2]|0}function HJ(a){a=a|0;return 586}function IJ(a){a=a|0;var b=0,c=0,d=0;b=Qqa(376)|0;k[b>>2]=33700;k[b+4>>2]=33864;c=b+8|0;d=a+8|0;TEa(c|0,d|0,368)|0;k[c>>2]=k[d>>2];p[b+16>>3]=+p[a+16>>3];p[b+24>>3]=+p[a+24>>3];p[b+32>>3]=+p[a+32>>3];p[b+40>>3]=+p[a+40>>3];p[b+48>>3]=+p[a+48>>3];p[b+56>>3]=+p[a+56>>3];p[b+64>>3]=+p[a+64>>3];p[b+72>>3]=+p[a+72>>3];p[b+80>>3]=+p[a+80>>3];p[b+88>>3]=+p[a+88>>3];p[b+96>>3]=+p[a+96>>3];p[b+104>>3]=+p[a+104>>3];p[b+112>>3]=+p[a+112>>3];p[b+120>>3]=+p[a+120>>3];p[b+136>>3]=+p[a+136>>3];p[b+144>>3]=+p[a+144>>3];p[b+152>>3]=+p[a+152>>3];p[b+160>>3]=+p[a+160>>3];p[b+184>>3]=+p[a+184>>3];p[b+192>>3]=+p[a+192>>3];p[b+200>>3]=+p[a+200>>3];p[b+208>>3]=+p[a+208>>3];p[b+216>>3]=+p[a+216>>3];p[b+224>>3]=+p[a+224>>3];p[b+232>>3]=+p[a+232>>3];p[b+240>>3]=+p[a+240>>3];p[b+248>>3]=+p[a+248>>3];p[b+256>>3]=+p[a+256>>3];p[b+264>>3]=+p[a+264>>3];p[b+272>>3]=+p[a+272>>3];p[b+280>>3]=+p[a+280>>3];p[b+288>>3]=+p[a+288>>3];p[b+296>>3]=+p[a+296>>3];return b|0}function JJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=74;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+8|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+16|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+24|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+32|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+40|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+48|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+56|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+64|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+72|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+80|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+88|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+96|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+104|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+112|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+120|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+128|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+136|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+144|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+152|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+160|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+184|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+192|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+200|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+208|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+216|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+224|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+232|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+240|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+248|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+256|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+264|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+272|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+280|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+288|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+296|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+304|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+312|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+320|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+328|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+336|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+344|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+352|0;n=q;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q+4|0;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d;d=n;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=n+4|0;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=(k[b>>2]|0)+8|0;k[b>>2]=q;o=a+360|0;n=o;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=q;q=n;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;d=n+4|0;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+8|0;k[b>>2]=o;d=a+368|0;n=d;q=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=d+4|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;n=o;o=n;i[o>>0]=q;i[o+1>>0]=q>>8;i[o+2>>0]=q>>16;i[o+3>>0]=q>>24;q=n+4|0;i[q>>0]=d;i[q+1>>0]=d>>8;i[q+2>>0]=d>>16;i[q+3>>0]=d>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+352;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;d=a+8|0;q=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;d=a+16|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+24|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+32|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+40|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+48|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+56|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+64|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+72|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+80|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+88|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+96|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+104|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+112|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+120|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+128|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+136|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+144|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+152|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+160|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+184|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+192|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+200|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+208|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+216|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+224|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+232|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+240|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+248|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+256|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+264|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+272|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+280|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+288|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+296|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+304|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+312|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+320|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+328|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+336|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+344|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+352|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;q=a+360|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[q>>0]=i[t>>0];i[q+1>>0]=i[t+1>>0];i[q+2>>0]=i[t+2>>0];i[q+3>>0]=i[t+3>>0];i[q+4>>0]=i[t+4>>0];i[q+5>>0]=i[t+5>>0];i[q+6>>0]=i[t+6>>0];i[q+7>>0]=i[t+7>>0];q=(k[b>>2]|0)+8|0;k[b>>2]=q;d=a+368|0;i[t>>0]=i[q>>0];i[t+1>>0]=i[q+1>>0];i[t+2>>0]=i[q+2>>0];i[t+3>>0]=i[q+3>>0];i[t+4>>0]=i[q+4>>0];i[t+5>>0]=i[q+5>>0];i[t+6>>0]=i[q+6>>0];i[t+7>>0]=i[q+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;s=Q;u=d;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){q=Rb()|0;v=Q;w=q}else{k[b>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;c=Q;Yua(f);Yua(q);Ava(b);v=c;w=a;break}Yua(f);B=0;a=Ia(40,g|0,143951,43)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,78522,75);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(h);x=o;y=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;z=Q;A=n;C=1}else{B=0;ua(163,a|0,h|0,j|0,272,m|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,a|0,1240,229);B=0;D=0}n=Rb()|0;o=Q;Yua(m);z=o;A=n;C=D}Yua(j);Yua(h);if(C){x=z;y=A}else{E=z;F=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}}else{n=Rb()|0;x=Q;y=n}while(0);zb(a|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}c=Rb()|0;E=Q;F=c;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(q);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function KJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function LJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function MJ(a,b,c){a=a|0;b=+b;c=c|0;do switch(c|0){case 265:{p[a+16>>3]=b;return}case 266:{p[a+24>>3]=b;return}case 267:{p[a+32>>3]=b;return}case 268:{p[a+40>>3]=b;return}case 210:{p[a+48>>3]=b;return}case 270:{p[a+56>>3]=b;return}case 271:{p[a+64>>3]=b;return}case 211:{p[a+72>>3]=b;return}case 209:{p[a+80>>3]=b;return}case 212:{p[a+88>>3]=b;return}case 66:{p[a+96>>3]=b;return}case 213:{p[a+104>>3]=b;return}case 269:{p[a+56>>3]=b;return}case 65:{p[a+120>>3]=b;return}case 449:{p[a+136>>3]=b;return}case 452:{p[a+144>>3]=b;return}case 453:{p[a+152>>3]=b;return}case 458:{p[a+160>>3]=b;return}default:return}while(0)}function NJ(a,b,c){a=a|0;b=+b;c=c|0;do switch(c|0){case 265:{p[a+12>>3]=b;return}case 266:{p[a+20>>3]=b;return}case 267:{p[a+28>>3]=b;return}case 268:{p[a+36>>3]=b;return}case 210:{p[a+44>>3]=b;return}case 270:{p[a+52>>3]=b;return}case 271:{p[a+60>>3]=b;return}case 211:{p[a+68>>3]=b;return}case 209:{p[a+76>>3]=b;return}case 212:{p[a+84>>3]=b;return}case 66:{p[a+92>>3]=b;return}case 213:{p[a+100>>3]=b;return}case 269:{p[a+52>>3]=b;return}case 65:{p[a+116>>3]=b;return}case 449:{p[a+132>>3]=b;return}case 452:{p[a+140>>3]=b;return}case 453:{p[a+148>>3]=b;return}case 458:{p[a+156>>3]=b;return}default:return}while(0)}function OJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function PJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function QJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function RJ(a,b,c){a=a|0;b=b|0;c=c|0;return}function SJ(a,b){a=a|0;b=b|0;return}function TJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;f=+p[a+48>>3];g=+p[a+88>>3]-+p[a+80>>3]*e;e=+p[a+96>>3];h=f*(g-e);if(h>d){i=d/f+e;j=0.0;p[c>>3]=j;p[b>>3]=i;return}else{i=g;j=(d-h)/+p[a+72>>3];p[c>>3]=j;p[b>>3]=i;return}}function UJ(a,b){a=a|0;b=+b;return +(+p[a+48>>3]*(+p[a+88>>3]-+p[a+80>>3]*b-+p[a+96>>3]))}function VJ(a,b){a=a|0;b=+b;return +(+p[a+88>>3]-+p[a+80>>3]*b)}function WJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;do switch(b|0){case 265:{i=a+16|0;break}case 266:{i=a+24|0;break}case 267:{i=a+32|0;break}case 268:{i=a+40|0;break}case 210:{i=a+48|0;break}case 270:{i=a+56|0;break}case 271:{i=a+64|0;break}case 211:{i=a+72|0;break}case 209:{i=a+80|0;break}case 212:{i=a+88|0;break}case 66:{i=a+96|0;break}case 213:{i=a+104|0;break}case 269:{i=a+112|0;break}case 136:{i=a+192|0;break}case 137:{i=a+200|0;break}case 135:{i=a+184|0;break}case 144:{i=a+224|0;break}case 143:{i=a+216|0;break}case 151:{i=a+256|0;break}case 145:{i=a+232|0;break}case 146:{i=a+240|0;break}case 147:{i=a+248|0;break}case 139:{i=a+208|0;break}case 65:{i=a+120|0;break}case 449:{i=a+136|0;break}case 452:{i=a+144|0;break}case 453:{i=a+152|0;break}case 458:{i=a+160|0;break}case 272:{i=a+264|0;break}case 273:{i=a+272|0;break}case 275:{i=a+288|0;break}case 274:{i=a+280|0;break}case 276:{i=a+296|0;break}default:{j=e+56|0;l=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){q=Rb()|0;s=Q;t=q}else{k[l>>2]=27560;q=e+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(d);Yua(q);Ava(l);s=v;t=u;break}Yua(d);B=0;u=Ia(40,e|0,104643,5)|0;v=B;B=0;if((((!(v&1)?(B=0,v=ya(427,b|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(v)|0,B=0,x=Ia(40,u|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,146481,18)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,f|0,78522,75);x=B;B=0;do if(!(x&1)){B=0;eb(502,g|0,79423,20);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(f);y=u;z=v;break}B=0;wa(510,h|0,l|0);v=B;B=0;if(v&1){v=Rb()|0;A=Q;C=v;D=1}else{B=0;ua(163,w|0,f|0,g|0,531,h|0);v=B;B=0;if(v&1)E=1;else{B=0;eb(503,w|0,1240,229);B=0;E=0}v=Rb()|0;u=Q;Yua(h);A=u;C=v;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);Qb(G|0)}}else{v=Rb()|0;y=Q;z=v}while(0);zb(w|0);F=y;G=z;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(q);Ava(l);vva(j);Qb(G|0)}while(0);n=s;o=t;vva(j);Qb(o|0)}}while(0);r=c;return +(+p[i>>3])}function XJ(a){a=a|0;return}function YJ(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;var f=0.0,g=0.0,h=0.0;f=+p[a+88>>3]-+p[a+80>>3]*e;e=+p[a+48>>3];g=+p[a+96>>3];if(f>c){h=e*(c-g);p[b>>3]=h;return}else{h=e*(f-g)+ +p[a+72>>3]*d;p[b>>3]=h;return}}function ZJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,79601,5);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,98,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function _J(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143338,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,108,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function $J(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143343,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,109,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function aK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143351,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,110,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function bK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143356,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,111,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function cK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143369,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,113,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function dK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143374,7);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,114,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function eK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143364,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,112,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function fK(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,145010,13)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,79444,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143391,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,100,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function gK(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,145010,13)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,79444,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143434,15);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,103,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143450,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,104,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function iK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143473,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,105,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function jK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143497,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,106,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function kK(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,145010,13)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,79444,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143404,14);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,101,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function lK(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,145010,13)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,79444,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,143419,14);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,102,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function mK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143529,33);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,107,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function nK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143382,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,115,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return 0}function oK(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;h=r;r=r+192|0;g=h+176|0;f=h+40|0;e=h+24|0;d=h+12|0;c=h;h=f+56|0;b=f+4|0;k[f>>2]=27524;k[h>>2]=27544;B=0;wa(508,f+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(h);Qb(j|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,b|0,g|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(g);Yua(l);Ava(b);m=p;n=o;break}Yua(g);B=0;o=Ia(40,f|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,e|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,d|0,79589,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(e);v=u;w=t;break}B=0;wa(510,c|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,e|0,d|0,118,c|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(c);x=u;y=t;z=A}Yua(d);Yua(e);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[f>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(D|0)}while(0);i=m;j=n;vva(h);Qb(j|0)}function pK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,79558,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,119,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function qK(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,79546,11);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,120,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function rK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143563,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,121,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function sK(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,143594,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,122,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function tK(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;g=r;r=r+192|0;f=g+176|0;e=g+40|0;d=g+24|0;c=g+12|0;b=g;g=e+56|0;a=e+4|0;k[e>>2]=27524;k[g>>2]=27544;B=0;wa(508,e+56|0,a|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(g);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,a|0,f|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(f);Yua(l);Ava(a);m=p;n=o;break}Yua(f);B=0;o=Ia(40,e|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,c|0,79533,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,b|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,c|0,123,b|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(b);x=u;y=t;z=A}Yua(c);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[e>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(g);Qb(D|0)}while(0);i=m;j=n;vva(g);Qb(j|0)}function uK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,143608,31);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,124,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function vK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,79444,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,95,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function wK(a,b,c){a=a|0;b=b|0;c=c|0;vK(a+-4|0,b,c)}function xK(a){a=a|0;k[a>>2]=33892;return}function yK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;k[a>>2]=33892;k[a+4>>2]=b;k[a+8>>2]=c;k[a+12>>2]=d;p[a+16>>3]=e;k[a+24>>2]=f;i[a+28>>0]=0;return}function zK(a){a=a|0;k[a>>2]=33892;return}function AK(a){a=a|0;Sqa(a);return}function BK(a){a=a|0;var b=0,c=0,d=0;b=Qqa(32)|0;k[b>>2]=33892;c=b+4|0;d=a+4|0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];k[c+8>>2]=k[d+8>>2];k[c+12>>2]=k[d+12>>2];k[c+16>>2]=k[d+16>>2];k[c+20>>2]=k[d+20>>2];i[c+24>>0]=i[d+24>>0]|0;k[c>>2]=k[d>>2];k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];p[b+16>>3]=+p[a+16>>3];k[b+24>>2]=k[a+24>>2];return b|0}function CK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;i=b+728|0;j=b+304|0;l=b+576|0;m=b+152|0;n=b+288|0;o=b+16|0;q=b;s=d+56|0;t=d+4|0;k[d>>2]=27524;k[s>>2]=27544;B=0;wa(508,d+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=d+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;Ia(40,d|0,79618,11)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,e|0,t|0),C=B,B=0,!(C&1)):0){B=0;ya(424,e|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}Yua(e);k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);C=f+56|0;D=f+4|0;k[f>>2]=27524;k[C>>2]=27544;B=0;wa(508,f+56|0,D|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(C);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[D>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(D);K=N;L=M;break}Yua(c);B=0;M=Ia(40,f|0,79833,8)|0;N=B;B=0;do if(((!(N&1)?(B=0,O=Xa(242,M|0,k[a+4>>2]|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,O|0,149177,1)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,g|0,D|0),O=B,B=0,!(O&1)):0){B=0;ya(424,g|0)|0;O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);R=P;S=O;break}Yua(g);k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);O=h+56|0;P=h+4|0;k[h>>2]=27524;k[O>>2]=27544;B=0;wa(508,h+56|0,P|0);T=B;B=0;if(T&1){T=Rb()|0;U=Q;V=T;vva(O);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[O>>2]=27488;B=0;va(448,P|0);T=B;B=0;do if(T&1){W=Rb()|0;X=Q;Y=W}else{k[P>>2]=27560;W=h+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(P);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,h|0,79842,11)|0;_=B;B=0;do if(_&1)$=85;else{B=0;aa=Xa(242,Z|0,k[a+8>>2]|0)|0;ba=B;B=0;if(ba&1){$=85;break}B=0;Ia(40,aa|0,149177,1)|0;aa=B;B=0;if(aa&1){$=85;break}B=0;wa(510,i|0,P|0);aa=B;B=0;if(aa&1){$=85;break}B=0;ya(424,i|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(i);ca=ba;da=aa;break}Yua(i);k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);aa=j+56|0;ba=j+4|0;k[j>>2]=27524;k[aa>>2]=27544;B=0;wa(508,j+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;ga=ea;vva(aa);Qb(ga|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[aa>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){ha=Rb()|0;ia=Q;ja=ha}else{k[ba>>2]=27560;ha=j+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(c);Yua(ha);Ava(ba);ia=la;ja=ka;break}Yua(c);B=0;ka=Ia(40,j|0,79854,8)|0;la=B;B=0;do if(la&1)$=88;else{B=0;ma=Xa(242,ka|0,k[a+12>>2]|0)|0;na=B;B=0;if(na&1){$=88;break}B=0;Ia(40,ma|0,149177,1)|0;ma=B;B=0;if(ma&1){$=88;break}B=0;wa(510,l|0,ba|0);ma=B;B=0;if(ma&1){$=88;break}B=0;ya(424,l|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(l);oa=na;pa=ma;break}Yua(l);k[j>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);ma=m+56|0;na=m+4|0;k[m>>2]=27524;k[ma>>2]=27544;B=0;wa(508,m+56|0,na|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;sa=qa;vva(ma);Qb(sa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ma>>2]=27488;B=0;va(448,na|0);qa=B;B=0;do if(qa&1){ta=Rb()|0;ua=Q;xa=ta}else{k[na>>2]=27560;ta=m+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(c);Yua(ta);Ava(na);ua=Aa;xa=za;break}Yua(c);B=0;za=Ia(40,m|0,109037,10)|0;Aa=B;B=0;do if(Aa&1)$=91;else{B=0;Ba=Sa(1,za|0,+(+p[a+16>>3]))|0;Ca=B;B=0;if(Ca&1){$=91;break}B=0;Ia(40,Ba|0,149177,1)|0;Ba=B;B=0;if(Ba&1){$=91;break}B=0;wa(510,n|0,na|0);Ba=B;B=0;if(Ba&1){$=91;break}B=0;ya(424,n|0)|0;Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(n);Da=Ca;Ea=Ba;break}Yua(n);k[m>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Ba=o+56|0;Ca=o+4|0;k[o>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,o+56|0,Ca|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Ha=Fa;vva(Ba);Qb(Ha|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);Fa=B;B=0;do if(Fa&1){Ja=Rb()|0;Ka=Q;La=Ja}else{k[Ca>>2]=27560;Ja=o+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Na=Q;Yua(c);Yua(Ja);Ava(Ca);Ka=Na;La=Ma;break}Yua(c);B=0;Ma=Ia(40,o|0,144094,18)|0;Na=B;B=0;do if(!(Na&1)){B=0;Oa=ya(427,k[a+24>>2]|0)|0;Pa=B;B=0;if(Pa&1){$=94;break}Pa=Lta(Oa)|0;B=0;Qa=Ia(40,Ma|0,Oa|0,Pa|0)|0;Pa=B;B=0;if(Pa&1){$=94;break}B=0;Ia(40,Qa|0,149177,1)|0;Qa=B;B=0;if(Qa&1){$=94;break}B=0;wa(510,q|0,Ca|0);Qa=B;B=0;if(Qa&1){$=94;break}B=0;ya(424,q|0)|0;Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Pa=Q;Yua(q);Ra=Pa;Ta=Qa;break}else{Yua(q);k[o>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Ba);r=b;return}}else $=94;while(0);if(($|0)==94){Ma=Rb()|0;Ra=Q;Ta=Ma}k[o>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Ba);Ua=Ra;Va=Ta;Qb(Va|0)}while(0);Ga=Ka;Ha=La;vva(Ba);Qb(Ha|0)}while(0);if(($|0)==91){za=Rb()|0;Da=Q;Ea=za}k[m>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Ua=Da;Va=Ea;Qb(Va|0)}while(0);ra=ua;sa=xa;vva(ma);Qb(sa|0)}while(0);if(($|0)==88){ka=Rb()|0;oa=Q;pa=ka}k[j>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);Ua=oa;Va=pa;Qb(Va|0)}while(0);fa=ia;ga=ja;vva(aa);Qb(ga|0)}while(0);if(($|0)==85){Z=Rb()|0;ca=Q;da=Z}k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);Ua=ca;Va=da;Qb(Va|0)}while(0);U=X;V=Y;vva(O);Qb(V|0)}else $=82;while(0);if(($|0)==82){M=Rb()|0;R=Q;S=M}k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);Ua=R;Va=S;Qb(Va|0)}while(0);H=K;I=L;vva(C);Qb(I|0)}else $=79;while(0);if(($|0)==79){A=Rb()|0;E=Q;F=A}k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Ua=E;Va=F;Qb(Va|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function DK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;i=b+728|0;j=b+304|0;l=b+576|0;m=b+152|0;n=b+288|0;o=b+16|0;q=b;s=d+56|0;t=d+4|0;k[d>>2]=27524;k[s>>2]=27544;B=0;wa(508,d+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(s);Qb(w|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[t>>2]=27560;x=d+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(c);Yua(x);Ava(t);y=C;z=A;break}Yua(c);B=0;Ia(40,d|0,79618,11)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,e|0,t|0),C=B,B=0,!(C&1)):0){B=0;ya(424,e|0)|0;C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(e);E=D;F=C;break}Yua(e);k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);C=f+56|0;D=f+4|0;k[f>>2]=27524;k[C>>2]=27544;B=0;wa(508,f+56|0,D|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G;vva(C);Qb(I|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[C>>2]=27488;B=0;va(448,D|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[D>>2]=27560;J=f+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,D|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(c);Yua(J);Ava(D);K=N;L=M;break}Yua(c);B=0;M=Ia(40,f|0,79833,8)|0;N=B;B=0;do if(((!(N&1)?(B=0,O=Xa(242,M|0,k[a+4>>2]|0)|0,P=B,B=0,!(P&1)):0)?(B=0,Ia(40,O|0,149177,1)|0,O=B,B=0,!(O&1)):0)?(B=0,wa(510,g|0,D|0),O=B,B=0,!(O&1)):0){B=0;ya(424,g|0)|0;O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);R=P;S=O;break}Yua(g);k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);O=h+56|0;P=h+4|0;k[h>>2]=27524;k[O>>2]=27544;B=0;wa(508,h+56|0,P|0);T=B;B=0;if(T&1){T=Rb()|0;U=Q;V=T;vva(O);Qb(V|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[O>>2]=27488;B=0;va(448,P|0);T=B;B=0;do if(T&1){W=Rb()|0;X=Q;Y=W}else{k[P>>2]=27560;W=h+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(c);Yua(W);Ava(P);X=_;Y=Z;break}Yua(c);B=0;Z=Ia(40,h|0,79842,11)|0;_=B;B=0;do if(_&1)$=85;else{B=0;aa=Xa(242,Z|0,k[a+8>>2]|0)|0;ba=B;B=0;if(ba&1){$=85;break}B=0;Ia(40,aa|0,149177,1)|0;aa=B;B=0;if(aa&1){$=85;break}B=0;wa(510,i|0,P|0);aa=B;B=0;if(aa&1){$=85;break}B=0;ya(424,i|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(i);ca=ba;da=aa;break}Yua(i);k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);aa=j+56|0;ba=j+4|0;k[j>>2]=27524;k[aa>>2]=27544;B=0;wa(508,j+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;ga=ea;vva(aa);Qb(ga|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[aa>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){ha=Rb()|0;ia=Q;ja=ha}else{k[ba>>2]=27560;ha=j+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(c);Yua(ha);Ava(ba);ia=la;ja=ka;break}Yua(c);B=0;ka=Ia(40,j|0,79854,8)|0;la=B;B=0;do if(la&1)$=88;else{B=0;ma=Xa(242,ka|0,k[a+12>>2]|0)|0;na=B;B=0;if(na&1){$=88;break}B=0;Ia(40,ma|0,149177,1)|0;ma=B;B=0;if(ma&1){$=88;break}B=0;wa(510,l|0,ba|0);ma=B;B=0;if(ma&1){$=88;break}B=0;ya(424,l|0)|0;ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(l);oa=na;pa=ma;break}Yua(l);k[j>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);ma=m+56|0;na=m+4|0;k[m>>2]=27524;k[ma>>2]=27544;B=0;wa(508,m+56|0,na|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;sa=qa;vva(ma);Qb(sa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ma>>2]=27488;B=0;va(448,na|0);qa=B;B=0;do if(qa&1){ta=Rb()|0;ua=Q;xa=ta}else{k[na>>2]=27560;ta=m+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(c);Yua(ta);Ava(na);ua=Aa;xa=za;break}Yua(c);B=0;za=Ia(40,m|0,109037,10)|0;Aa=B;B=0;do if(Aa&1)$=91;else{B=0;Ba=Sa(1,za|0,+(+p[a+16>>3]))|0;Ca=B;B=0;if(Ca&1){$=91;break}B=0;Ia(40,Ba|0,149177,1)|0;Ba=B;B=0;if(Ba&1){$=91;break}B=0;wa(510,n|0,na|0);Ba=B;B=0;if(Ba&1){$=91;break}B=0;ya(424,n|0)|0;Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(n);Da=Ca;Ea=Ba;break}Yua(n);k[m>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Ba=o+56|0;Ca=o+4|0;k[o>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,o+56|0,Ca|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Ha=Fa;vva(Ba);Qb(Ha|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);Fa=B;B=0;do if(Fa&1){Ja=Rb()|0;Ka=Q;La=Ja}else{k[Ca>>2]=27560;Ja=o+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Na=Q;Yua(c);Yua(Ja);Ava(Ca);Ka=Na;La=Ma;break}Yua(c);B=0;Ma=Ia(40,o|0,144094,18)|0;Na=B;B=0;do if(!(Na&1)){B=0;Oa=ya(427,k[a+24>>2]|0)|0;Pa=B;B=0;if(Pa&1){$=94;break}Pa=Lta(Oa)|0;B=0;Qa=Ia(40,Ma|0,Oa|0,Pa|0)|0;Pa=B;B=0;if(Pa&1){$=94;break}B=0;Ia(40,Qa|0,149177,1)|0;Qa=B;B=0;if(Qa&1){$=94;break}B=0;wa(510,q|0,Ca|0);Qa=B;B=0;if(Qa&1){$=94;break}B=0;ya(424,q|0)|0;Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Pa=Q;Yua(q);Ra=Pa;Ta=Qa;break}else{Yua(q);k[o>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Ba);r=b;return}}else $=94;while(0);if(($|0)==94){Ma=Rb()|0;Ra=Q;Ta=Ma}k[o>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ja);Ava(Ca);vva(Ba);Ua=Ra;Va=Ta;Qb(Va|0)}while(0);Ga=Ka;Ha=La;vva(Ba);Qb(Ha|0)}while(0);if(($|0)==91){za=Rb()|0;Da=Q;Ea=za}k[m>>2]=27468;k[ma>>2]=27488;k[na>>2]=27560;Yua(ta);Ava(na);vva(ma);Ua=Da;Va=Ea;Qb(Va|0)}while(0);ra=ua;sa=xa;vva(ma);Qb(sa|0)}while(0);if(($|0)==88){ka=Rb()|0;oa=Q;pa=ka}k[j>>2]=27468;k[aa>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva(aa);Ua=oa;Va=pa;Qb(Va|0)}while(0);fa=ia;ga=ja;vva(aa);Qb(ga|0)}while(0);if(($|0)==85){Z=Rb()|0;ca=Q;da=Z}k[h>>2]=27468;k[O>>2]=27488;k[P>>2]=27560;Yua(W);Ava(P);vva(O);Ua=ca;Va=da;Qb(Va|0)}while(0);U=X;V=Y;vva(O);Qb(V|0)}else $=82;while(0);if(($|0)==82){M=Rb()|0;R=Q;S=M}k[f>>2]=27468;k[C>>2]=27488;k[D>>2]=27560;Yua(J);Ava(D);vva(C);Ua=R;Va=S;Qb(Va|0)}while(0);H=K;I=L;vva(C);Qb(I|0)}else $=79;while(0);if(($|0)==79){A=Rb()|0;E=Q;F=A}k[d>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(x);Ava(t);vva(s);Ua=E;Va=F;Qb(Va|0)}while(0);v=y;w=z;vva(s);Qb(w|0)}function EK(a){a=a|0;return k[a+4>>2]|0}function FK(a){a=a|0;return 615}function GK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=103;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+12|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+16|0;o=n;q=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;o=n+4|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;o=d;d=o;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=o+4|0;i[q>>0]=n;i[q+1>>0]=n>>8;i[q+2>>0]=n>>16;i[q+3>>0]=n>>24;n=(k[b>>2]|0)+8|0;k[b>>2]=n;q=a+24|0;o=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=i[a+28>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+29;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+4|0;n=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;c=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=c;i[o+1>>0]=c>>8;i[o+2>>0]=c>>16;i[o+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+12|0;n=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;i[t>>0]=i[n>>0];i[t+1>>0]=i[n+1>>0];i[t+2>>0]=i[n+2>>0];i[t+3>>0]=i[n+3>>0];i[t+4>>0]=i[n+4>>0];i[t+5>>0]=i[n+5>>0];i[t+6>>0]=i[n+6>>0];i[t+7>>0]=i[n+7>>0];p[t>>3]=+p[t>>3];i[o>>0]=i[t>>0];i[o+1>>0]=i[t+1>>0];i[o+2>>0]=i[t+2>>0];i[o+3>>0]=i[t+3>>0];i[o+4>>0]=i[t+4>>0];i[o+5>>0]=i[t+5>>0];i[o+6>>0]=i[t+6>>0];i[o+7>>0]=i[t+7>>0];o=(k[b>>2]|0)+8|0;k[b>>2]=o;n=a+24|0;c=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;i[a+28>>0]=i[c>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;s=Q;u=c;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){a=Rb()|0;v=Q;w=a}else{k[b>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);Yua(a);Ava(b);v=o;w=n;break}Yua(f);B=0;n=Ia(40,g|0,143951,43)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,79630,80);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,149525,8);q=B;B=0;if(q&1){q=Rb()|0;d=Q;Yua(h);x=d;y=q;break}B=0;wa(510,m|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;z=Q;A=q;C=1}else{B=0;ua(163,n|0,h|0,j|0,83,m|0);q=B;B=0;if(q&1)D=1;else{B=0;eb(503,n|0,1240,229);B=0;D=0}q=Rb()|0;d=Q;Yua(m);z=d;A=q;C=D}Yua(j);Yua(h);if(C){x=z;y=A}else{E=z;F=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}}else{q=Rb()|0;x=Q;y=q}while(0);zb(n|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}o=Rb()|0;E=Q;F=o;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function HK(a){a=a|0;i[a+28>>0]=1;return}function IK(a,b,c){a=a|0;b=b|0;c=c|0;c=rh(b,0,k[a+8>>2]|0)|0;if(!c)return;Un(c,k[a+12>>2]|0,+p[a+16>>3]);return}function JK(a,b){a=a|0;b=b|0;return (k[a+24>>2]|0)==(b|0)|0}function KK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,79711,95);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,80053,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,42,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function LK(a){a=a|0;k[a>>2]=33948;return}function MK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;k[a>>2]=33948;k[a+4>>2]=b;k[a+8>>2]=c;k[a+12>>2]=d;p[a+16>>3]=0.0;k[a+28>>2]=e;i[a+24>>0]=0;i[a+32>>0]=0;return}function NK(a){a=a|0;k[a>>2]=33948;return}function OK(a){a=a|0;Sqa(a);return}function PK(a){a=a|0;var b=0,c=0,d=0;b=Qqa(40)|0;k[b>>2]=33948;c=b+4|0;d=a+4|0;k[c>>2]=k[d>>2];k[c+4>>2]=k[d+4>>2];k[c+8>>2]=k[d+8>>2];k[c+12>>2]=k[d+12>>2];k[c+16>>2]=k[d+16>>2];k[c+20>>2]=k[d+20>>2];k[c+24>>2]=k[d+24>>2];i[c+28>>0]=i[d+28>>0]|0;k[c>>2]=k[d>>2];k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];p[b+16>>3]=+p[a+16>>3];k[b+28>>2]=k[a+28>>2];i[b+24>>0]=i[a+24>>0]|0;return b|0}function QK(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function RK(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0;b=r;r=r+1072|0;c=b+1052|0;d=b+880|0;e=b+1040|0;f=b+728|0;g=b+1028|0;h=b+592|0;j=b+1016|0;l=b+440|0;m=b+864|0;n=b+304|0;o=b+576|0;q=b+168|0;s=b+152|0;t=b+16|0;u=b;v=d+56|0;w=d+4|0;k[d>>2]=27524;k[v>>2]=27544;B=0;wa(508,d+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=d+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;Ia(40,d|0,79820,12)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,e|0,w|0),F=B,B=0,!(F&1)):0){B=0;ya(424,e|0)|0;F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(e);H=G;I=F;break}Yua(e);k[d>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);F=f+56|0;G=f+4|0;k[f>>2]=27524;k[F>>2]=27544;B=0;wa(508,f+56|0,G|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(F);Qb(L|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[G>>2]=27560;M=f+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,G|0,c|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(c);Yua(M);Ava(G);N=R;O=P;break}Yua(c);B=0;P=Ia(40,f|0,79833,8)|0;R=B;B=0;do if(((!(R&1)?(B=0,S=Xa(242,P|0,k[a+4>>2]|0)|0,T=B,B=0,!(T&1)):0)?(B=0,Ia(40,S|0,149177,1)|0,S=B,B=0,!(S&1)):0)?(B=0,wa(510,g|0,G|0),S=B,B=0,!(S&1)):0){B=0;ya(424,g|0)|0;S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(g);U=T;V=S;break}Yua(g);k[f>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(F);S=h+56|0;T=h+4|0;k[h>>2]=27524;k[S>>2]=27544;B=0;wa(508,h+56|0,T|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(S);Qb(Y|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[S>>2]=27488;B=0;va(448,T|0);W=B;B=0;do if(W&1){Z=Rb()|0;_=Q;$=Z}else{k[T>>2]=27560;Z=h+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,T|0,c|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(c);Yua(Z);Ava(T);_=ba;$=aa;break}Yua(c);B=0;aa=Ia(40,h|0,79842,11)|0;ba=B;B=0;do if(ba&1)ca=98;else{B=0;da=Xa(242,aa|0,k[a+8>>2]|0)|0;ea=B;B=0;if(ea&1){ca=98;break}B=0;Ia(40,da|0,149177,1)|0;da=B;B=0;if(da&1){ca=98;break}B=0;wa(510,j|0,T|0);da=B;B=0;if(da&1){ca=98;break}B=0;ya(424,j|0)|0;da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(j);fa=ea;ga=da;break}Yua(j);k[h>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(Z);Ava(T);vva(S);da=l+56|0;ea=l+4|0;k[l>>2]=27524;k[da>>2]=27544;B=0;wa(508,l+56|0,ea|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;ja=ha;vva(da);Qb(ja|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[da>>2]=27488;B=0;va(448,ea|0);ha=B;B=0;do if(ha&1){ka=Rb()|0;la=Q;ma=ka}else{k[ea>>2]=27560;ka=l+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ea|0,c|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(c);Yua(ka);Ava(ea);la=oa;ma=na;break}Yua(c);B=0;na=Ia(40,l|0,79854,8)|0;oa=B;B=0;do if(oa&1)ca=101;else{B=0;pa=Xa(242,na|0,k[a+12>>2]|0)|0;qa=B;B=0;if(qa&1){ca=101;break}B=0;Ia(40,pa|0,149177,1)|0;pa=B;B=0;if(pa&1){ca=101;break}B=0;wa(510,m|0,ea|0);pa=B;B=0;if(pa&1){ca=101;break}B=0;ya(424,m|0)|0;pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;Yua(m);ra=qa;sa=pa;break}Yua(m);k[l>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);pa=n+56|0;qa=n+4|0;k[n>>2]=27524;k[pa>>2]=27544;B=0;wa(508,n+56|0,qa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;xa=ta;vva(pa);Qb(xa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[pa>>2]=27488;B=0;va(448,qa|0);ta=B;B=0;do if(ta&1){za=Rb()|0;Aa=Q;Ba=za}else{k[qa>>2]=27560;za=n+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qa|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Yua(c);Yua(za);Ava(qa);Aa=Da;Ba=Ca;break}Yua(c);B=0;Ca=Ia(40,n|0,109037,10)|0;Da=B;B=0;do if(Da&1)ca=104;else{B=0;Ea=Sa(1,Ca|0,+(+p[a+16>>3]))|0;Fa=B;B=0;if(Fa&1){ca=104;break}B=0;Ia(40,Ea|0,149177,1)|0;Ea=B;B=0;if(Ea&1){ca=104;break}B=0;wa(510,o|0,qa|0);Ea=B;B=0;if(Ea&1){ca=104;break}B=0;ya(424,o|0)|0;Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(o);Ga=Fa;Ha=Ea;break}Yua(o);k[n>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);Ea=q+56|0;Fa=q+4|0;k[q>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,q+56|0,Fa|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ka=Q;La=Ja;vva(Ea);Qb(La|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Fa|0);Ja=B;B=0;do if(Ja&1){Ma=Rb()|0;Na=Q;Oa=Ma}else{k[Fa>>2]=27560;Ma=q+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Fa|0,c|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Yua(c);Yua(Ma);Ava(Fa);Na=Qa;Oa=Pa;break}Yua(c);B=0;Pa=Ia(40,q|0,79863,10)|0;Qa=B;B=0;do if(Qa&1)ca=107;else{Ra=(i[a+24>>0]|0)!=0;B=0;Ta=Ia(40,Pa|0,(Ra?159247:159252)|0,(Ra?4:5)|0)|0;Ra=B;B=0;if(Ra&1){ca=107;break}B=0;Ia(40,Ta|0,149177,1)|0;Ta=B;B=0;if(Ta&1){ca=107;break}B=0;wa(510,s|0,Fa|0);Ta=B;B=0;if(Ta&1){ca=107;break}B=0;ya(424,s|0)|0;Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Ra=Q;Yua(s);Ua=Ra;Va=Ta;break}Yua(s);k[q>>2]=27468;k[Ea>>2]=27488;k[Fa>>2]=27560;Yua(Ma);Ava(Fa);vva(Ea);Ta=t+56|0;Ra=t+4|0;k[t>>2]=27524;k[Ta>>2]=27544;B=0;wa(508,t+56|0,Ra|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Za=Wa;vva(Ta);Qb(Za|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Ta>>2]=27488;B=0;va(448,Ra|0);Wa=B;B=0;do if(Wa&1){_a=Rb()|0;$a=Q;ab=_a}else{k[Ra>>2]=27560;_a=t+36|0;k[_a>>2]=0;k[_a+4>>2]=0;k[_a+8>>2]=0;k[_a+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ra|0,c|0);bb=B;B=0;if(bb&1){bb=Rb()|0;cb=Q;Yua(c);Yua(_a);Ava(Ra);$a=cb;ab=bb;break}Yua(c);B=0;bb=Ia(40,t|0,144094,18)|0;cb=B;B=0;do if(!(cb&1)){B=0;db=ya(427,k[a+28>>2]|0)|0;eb=B;B=0;if(eb&1){ca=110;break}eb=Lta(db)|0;B=0;fb=Ia(40,bb|0,db|0,eb|0)|0;eb=B;B=0;if(eb&1){ca=110;break}B=0;Ia(40,fb|0,149177,1)|0;fb=B;B=0;if(fb&1){ca=110;break}B=0;wa(510,u|0,Ra|0);fb=B;B=0;if(fb&1){ca=110;break}B=0;ya(424,u|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;eb=Q;Yua(u);gb=eb;hb=fb;break}else{Yua(u);k[t>>2]=27468;k[Ta>>2]=27488;k[Ra>>2]=27560;Yua(_a);Ava(Ra);vva(Ta);r=b;return}}else ca=110;while(0);if((ca|0)==110){bb=Rb()|0;gb=Q;hb=bb}k[t>>2]=27468;k[Ta>>2]=27488;k[Ra>>2]=27560;Yua(_a);Ava(Ra);vva(Ta);ib=gb;jb=hb;Qb(jb|0)}while(0);Ya=$a;Za=ab;vva(Ta);Qb(Za|0)}while(0);if((ca|0)==107){Pa=Rb()|0;Ua=Q;Va=Pa}k[q>>2]=27468;k[Ea>>2]=27488;k[Fa>>2]=27560;Yua(Ma);Ava(Fa);vva(Ea);ib=Ua;jb=Va;Qb(jb|0)}while(0);Ka=Na;La=Oa;vva(Ea);Qb(La|0)}while(0);if((ca|0)==104){Ca=Rb()|0;Ga=Q;Ha=Ca}k[n>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);ib=Ga;jb=Ha;Qb(jb|0)}while(0);ua=Aa;xa=Ba;vva(pa);Qb(xa|0)}while(0);if((ca|0)==101){na=Rb()|0;ra=Q;sa=na}k[l>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ka);Ava(ea);vva(da);ib=ra;jb=sa;Qb(jb|0)}while(0);ia=la;ja=ma;vva(da);Qb(ja|0)}while(0);if((ca|0)==98){aa=Rb()|0;fa=Q;ga=aa}k[h>>2]=27468;k[S>>2]=27488;k[T>>2]=27560;Yua(Z);Ava(T);vva(S);ib=fa;jb=ga;Qb(jb|0)}while(0);X=_;Y=$;vva(S);Qb(Y|0)}else ca=95;while(0);if((ca|0)==95){P=Rb()|0;U=Q;V=P}k[f>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(F);ib=U;jb=V;Qb(jb|0)}while(0);K=N;L=O;vva(F);Qb(L|0)}else ca=92;while(0);if((ca|0)==92){E=Rb()|0;H=Q;I=E}k[d>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);ib=H;jb=I;Qb(jb|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}function SK(a){a=a|0;return k[a+4>>2]|0}function TK(a){a=a|0;return 614}function UK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=102;i[d+1>>0]=2;i[d+2>>0]=0;i[d+3>>0]=0;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[d>>0]=o;i[d+1>>0]=o>>8;i[d+2>>0]=o>>16;i[d+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;d=a+8|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+12|0;d=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=d;i[n+1>>0]=d>>8;i[n+2>>0]=d>>16;i[n+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;n=a+16|0;o=n;q=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;o=n+4|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;o=d;d=o;i[d>>0]=q;i[d+1>>0]=q>>8;i[d+2>>0]=q>>16;i[d+3>>0]=q>>24;q=o+4|0;i[q>>0]=n;i[q+1>>0]=n>>8;i[q+2>>0]=n>>16;i[q+3>>0]=n>>24;n=(k[b>>2]|0)+8|0;k[b>>2]=n;q=a+28|0;o=l[q>>0]|l[q+1>>0]<<8|l[q+2>>0]<<16|l[q+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[o>>0]=i[a+24>>0]|0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;i[o>>0]=i[a+32>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+30;r=e;return}case 1:{c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+4|0;n=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;c=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=c;i[o+1>>0]=c>>8;i[o+2>>0]=c>>16;i[o+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;o=a+12|0;n=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;i[t>>0]=i[n>>0];i[t+1>>0]=i[n+1>>0];i[t+2>>0]=i[n+2>>0];i[t+3>>0]=i[n+3>>0];i[t+4>>0]=i[n+4>>0];i[t+5>>0]=i[n+5>>0];i[t+6>>0]=i[n+6>>0];i[t+7>>0]=i[n+7>>0];p[t>>3]=+p[t>>3];i[o>>0]=i[t>>0];i[o+1>>0]=i[t+1>>0];i[o+2>>0]=i[t+2>>0];i[o+3>>0]=i[t+3>>0];i[o+4>>0]=i[t+4>>0];i[o+5>>0]=i[t+5>>0];i[o+6>>0]=i[t+6>>0];i[o+7>>0]=i[t+7>>0];o=(k[b>>2]|0)+8|0;k[b>>2]=o;n=a+28|0;c=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=c;i[n+1>>0]=c>>8;i[n+2>>0]=c>>16;i[n+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;i[a+24>>0]=i[c>>0]|0;c=(k[b>>2]|0)+1|0;k[b>>2]=c;i[a+32>>0]=i[c>>0]|0;k[b>>2]=(k[b>>2]|0)+1;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;s=Q;u=c;vva(e);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){a=Rb()|0;v=Q;w=a}else{k[b>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);Yua(a);Ava(b);v=o;w=n;break}Yua(f);B=0;n=Ia(40,g|0,143951,43)|0;o=B;B=0;if(!(o&1)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,h|0,79874,81);o=B;B=0;do if(!(o&1)){B=0;eb(502,j|0,149525,8);q=B;B=0;if(q&1){q=Rb()|0;d=Q;Yua(h);x=d;y=q;break}B=0;wa(510,m|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;z=Q;A=q;C=1}else{B=0;ua(163,n|0,h|0,j|0,81,m|0);q=B;B=0;if(q&1)D=1;else{B=0;eb(503,n|0,1240,229);B=0;D=0}q=Rb()|0;d=Q;Yua(m);z=d;A=q;C=D}Yua(j);Yua(h);if(C){x=z;y=A}else{E=z;F=A;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}}else{q=Rb()|0;x=Q;y=q}while(0);zb(n|0);E=x;F=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}o=Rb()|0;E=Q;F=o;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(e);Qb(F|0)}while(0);s=v;u=w;vva(e);Qb(u|0)}}}function VK(a){a=a|0;i[a+32>>0]=1;return}function WK(a,b,c){a=a|0;b=b|0;c=c|0;c=rh(b,0,k[a+8>>2]|0)|0;if(!c)return;Un(c,k[a+12>>2]|0,+p[a+16>>3]);return}function XK(a,b){a=a|0;b=b|0;return (k[a+28>>2]|0)==(b|0)|0}function YK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=rh(b,0,k[a+8>>2]|0)|0;b=c+((Nn(d,k[a+12>>2]|0,943)|0)<<3)|0;p[a+16>>3]=+p[b>>3];i[a+24>>0]=1;return}function ZK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,79956,96);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,80053,18);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function _K(a){a=a|0;gh(a);k[a+12>>2]=547;return}function $K(a){a=a|0;jh(a);return}function aL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=0;k[e>>2]=0;if((th(a)|0)>0){f=0;g=0;while(1){h=qh(a,g)|0;if(ed[k[(k[h>>2]|0)+60>>2]&511](h,b)|0?Hc[k[(k[h>>2]|0)+64>>2]&511](h)|0:0){h=f+1|0;k[d>>2]=h;i=h}else i=f;g=g+1|0;if((g|0)>=(th(a)|0))break;else f=i}}fZ(d,e,1,4,4,uY()|0)|0;r=c;return (k[e>>2]|0)!=0|0}function bL(a){a=a|0;return th(a)|0}function cL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=0;if((th(a)|0)>0){f=0;g=0;while(1){h=qh(a,g)|0;if(ed[k[(k[h>>2]|0)+60>>2]&511](h,b)|0?(i=Hc[k[(k[h>>2]|0)+56>>2]&511](h)|0,(i|0)>(f|0)):0){k[d>>2]=i;j=i}else j=f;g=g+1|0;if((g|0)>=(th(a)|0))break;else f=j}}fZ(d,e,1,4,1,uY()|0)|0;r=c;return k[e>>2]|0}function dL(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+4|0;d=b;e=th(a)|0;k[c>>2]=e;nZ(c,d,1,4,4,0,uY()|0)|0;uY()|0;r=b;return k[d>>2]|0}function eL(a){a=a|0;var b=0,c=0,d=0;b=k[a>>2]|0;c=a+4|0;if(b>>>0<(k[c>>2]|0)>>>0)d=b;else return;do{b=k[d>>2]|0;Ec[k[(k[b>>2]|0)+80>>2]&1023](b);d=d+4|0}while(d>>>0<(k[c>>2]|0)>>>0);return}function fL(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=k[a>>2]|0;i=a+4|0;if(h>>>0<(k[i>>2]|0)>>>0)j=h;else return;do{h=k[j>>2]|0;ad[k[(k[h>>2]|0)+84>>2]&63](h,b,c,d,e,f,g);j=j+4|0}while(j>>>0<(k[i>>2]|0)>>>0);return}function gL(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;if((th(a)|0)>0){c=0;d=0}else{e=0;return e|0}while(1){f=qh(a,c)|0;g=((ed[k[(k[f>>2]|0)+60>>2]&511](f,b)|0)&1)+d|0;c=c+1|0;if((c|0)>=(th(a)|0)){e=g;break}else d=g}return e|0}function hL(a){a=a|0;k[a>>2]=34004;k[a+4>>2]=34124;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=0;return}function iL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;k[a>>2]=34004;k[a+4>>2]=34124;k[a+8>>2]=b;k[a+12>>2]=d;B=0;d=ya(423,16)|0;b=B;B=0;if(b&1){b=Rb()|0;e=Q;f=b;Qb(f|0)}B=0;eb(509,d|0,c|0,2);c=B;B=0;if(!(c&1)){k[a+16>>2]=d;k[a+24>>2]=0;k[a+20>>2]=0;return}a=Rb()|0;c=Q;Sqa(d);e=c;f=a;Qb(f|0)}function jL(a){a=a|0;var b=0;k[a>>2]=34004;k[a+4>>2]=34124;b=k[a+16>>2]|0;if(!b)return;yla(b);Sqa(b);return}function kL(a){a=a|0;var b=0;k[a>>2]=34004;k[a+4>>2]=34124;b=k[a+16>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function lL(a){a=a|0;var b=0,c=0,d=0;b=Qqa(28)|0;k[b>>2]=34004;k[b+4>>2]=34124;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];c=Bla(k[a+16>>2]|0)|0;k[b+16>>2]=c;d=Gla(c)|0;k[b+20>>2]=d;k[b+24>>2]=k[a+24>>2];return b|0}function mL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=82;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;q=a+16|0;s=k[q>>2]|0;Cla(s,b,c,d);t=k[q>>2]|0;u=Gla(t)|0;v=a+20|0;k[v>>2]=u;r=e;return}case 2:{k[c>>2]=(k[c>>2]|0)+12;q=a+16|0;s=k[q>>2]|0;Cla(s,b,c,d);t=k[q>>2]|0;u=Gla(t)|0;v=a+20|0;k[v>>2]=u;r=e;return}case 1:{o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[p>>0]=n;i[p+1>>0]=n>>8;i[p+2>>0]=n>>16;i[p+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;k[b>>2]=(k[b>>2]|0)+4;o=Qqa(16)|0;B=0;va(489,o|0);p=B;B=0;if(p&1){p=Rb()|0;n=Q;Sqa(o);w=n;x=p;Qb(x|0)}else{k[a+16>>2]=o;q=a+16|0;s=k[q>>2]|0;Cla(s,b,c,d);t=k[q>>2]|0;u=Gla(t)|0;v=a+20|0;k[v>>2]=u;r=e;return}break}default:{e=g+56|0;u=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;y=Q;z=v;vva(e);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){a=Rb()|0;A=Q;C=a}else{k[u>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,u|0,f|0);t=B;B=0;if(t&1){t=Rb()|0;q=Q;Yua(f);Yua(a);Ava(u);A=q;C=t;break}Yua(f);B=0;t=Ia(40,g|0,143951,43)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,t|0,0)|0,d=B,B=0,!(d&1)):0){d=Ab(20)|0;B=0;eb(502,h|0,80081,72);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,149525,8);b=B;B=0;if(b&1){b=Rb()|0;s=Q;Yua(h);D=s;E=b;break}B=0;wa(510,m|0,u|0);b=B;B=0;if(b&1){b=Rb()|0;F=b;G=Q;H=1}else{B=0;ua(163,d|0,h|0,j|0,73,m|0);b=B;B=0;if(b&1)I=1;else{B=0;eb(503,d|0,1240,229);B=0;I=0}b=Rb()|0;s=Q;Yua(m);F=b;G=s;H=I}Yua(j);Yua(h);if(H){D=G;E=F}else{J=G;K=F;break a}}else{s=Rb()|0;D=Q;E=s}while(0);zb(d|0);J=D;K=E}else L=17;while(0);if((L|0)==17){t=Rb()|0;J=Q;K=t}k[g>>2]=27468;k[e>>2]=27488;k[u>>2]=27560;Yua(a);Ava(u);vva(e);w=J;x=K;Qb(x|0)}while(0);y=A;z=C;vva(e);Qb(z|0)}}}function nL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,80154,9)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,144086,7)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,144094,18)|0;T=B;B=0;do if(!(T&1)){B=0;U=ya(427,k[a+12>>2]|0)|0;V=B;B=0;if(V&1){W=46;break}V=Lta(U)|0;B=0;X=Ia(40,S|0,U|0,V|0)|0;V=B;B=0;if(V&1){W=46;break}B=0;Ia(40,X|0,149177,1)|0;X=B;B=0;if(X&1){W=46;break}B=0;wa(510,i|0,I|0);X=B;B=0;if(X&1){W=46;break}B=0;ya(424,i|0)|0;X=B;B=0;if(X&1){X=Rb()|0;V=Q;Yua(i);Y=V;Z=X;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);Ala(k[a+16>>2]|0);r=b;return}}else W=46;while(0);if((W|0)==46){S=Rb()|0;Y=Q;Z=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);_=Y;$=Z;Qb($|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else W=43;while(0);if((W|0)==43){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);_=J;$=K;Qb($|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=40;while(0);if((W|0)==40){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);_=w;$=x;Qb($|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function oL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,80154,9)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,144086,7)|0;G=B;B=0;do if(((!(G&1)?(B=0,H=Xa(242,F|0,k[a+8>>2]|0)|0,I=B,B=0,!(I&1)):0)?(B=0,Ia(40,H|0,149177,1)|0,H=B,B=0,!(H&1)):0)?(B=0,wa(510,g|0,v|0),H=B,B=0,!(H&1)):0){B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(g);J=I;K=H;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);H=h+56|0;I=h+4|0;k[h>>2]=27524;k[H>>2]=27544;B=0;wa(508,h+56|0,I|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(H);Qb(N|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[I>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(I);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,144094,18)|0;T=B;B=0;do if(!(T&1)){B=0;U=ya(427,k[a+12>>2]|0)|0;V=B;B=0;if(V&1){W=46;break}V=Lta(U)|0;B=0;X=Ia(40,S|0,U|0,V|0)|0;V=B;B=0;if(V&1){W=46;break}B=0;Ia(40,X|0,149177,1)|0;X=B;B=0;if(X&1){W=46;break}B=0;wa(510,i|0,I|0);X=B;B=0;if(X&1){W=46;break}B=0;ya(424,i|0)|0;X=B;B=0;if(X&1){X=Rb()|0;V=Q;Yua(i);Y=V;Z=X;break}else{Yua(i);k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);zla(k[a+16>>2]|0);r=b;return}}else W=46;while(0);if((W|0)==46){S=Rb()|0;Y=Q;Z=S}k[h>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(O);Ava(I);vva(H);_=Y;$=Z;Qb($|0)}while(0);M=P;N=R;vva(H);Qb(N|0)}else W=43;while(0);if((W|0)==43){F=Rb()|0;J=Q;K=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);_=J;$=K;Qb($|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=40;while(0);if((W|0)==40){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);_=w;$=x;Qb($|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function pL(a){a=a|0;return k[a+8>>2]|0}function qL(a){a=a|0;return 594}function rL(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;f=a+16|0;Ela(k[f>>2]|0,d);d=Gla(k[f>>2]|0)|0;k[a+20>>2]=d;k[a+24>>2]=g;return}function sL(a,b){a=a|0;b=b|0;nd[k[(k[a>>2]|0)+40>>2]&1023](a,b,0);return}function tL(a,b,c){a=a|0;b=b|0;c=c|0;return}function uL(a,b){a=a|0;b=b|0;return}function vL(a,b){a=a|0;b=b|0;var c=0;c=a+20|0;a=Qn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Qn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function wL(a,b){a=a|0;b=b|0;var c=0;c=a+20|0;a=Rn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Rn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function xL(a){a=a|0;return 2}function yL(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function zL(a){a=a|0;return 1}function AL(a,b,c){a=a|0;b=b|0;c=+c;md[k[(k[a>>2]|0)+72>>2]&31](a,b,0,c);return}function BL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+180|0;g=e+176|0;h=e+40|0;i=e+24|0;j=e+12|0;l=e;cO(k[a+24>>2]|0,g,477);switch(k[g>>2]|0){case 497:{m=CL(a,d)|0;IN(m,b,c);HN(m);Sqa(m);r=e;return}case 510:{m=DL(a,d)|0;IN(m,b,c);HN(m);Sqa(m);r=e;return}default:{e=h+56|0;m=h+4|0;k[h>>2]=27524;k[e>>2]=27544;B=0;wa(508,h+56|0,m|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;o=c;vva(e);Qb(o|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[e>>2]=27488;B=0;va(448,m|0);c=B;B=0;do if(c&1){b=Rb()|0;p=Q;q=b}else{k[m>>2]=27560;b=h+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;Yua(f);Yua(b);Ava(m);p=s;q=a;break}Yua(f);B=0;a=Ia(40,h|0,144156,9)|0;s=B;B=0;if((((((!(s&1)?(B=0,s=Xa(242,a|0,k[g>>2]|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[g>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,a|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,144169,19)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,i|0,80081,72);u=B;B=0;do if(!(u&1)){B=0;eb(502,j|0,118091,20);s=B;B=0;if(s&1){s=Rb()|0;a=Q;Yua(i);v=a;w=s;break}B=0;wa(510,l|0,m|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,i|0,j|0,197,l|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;a=Q;Yua(l);x=a;y=s;z=A}Yua(j);Yua(i);if(z){v=x;w=y}else{C=x;D=y;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(b);Ava(m);vva(e);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(b);Ava(m);vva(e);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[h>>2]=27468;k[e>>2]=27488;k[m>>2]=27560;Yua(b);Ava(m);vva(e);Qb(D|0)}while(0);n=p;o=q;vva(e);Qb(o|0)}}}function CL(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;c=r;r=r+704|0;d=c+692|0;e=c+520|0;f=c+680|0;g=c+668|0;h=c+656|0;i=c+384|0;j=c+368|0;l=c+84|0;m=c+72|0;n=c+232|0;o=c+60|0;p=c+48|0;q=c+36|0;s=c+96|0;t=c+24|0;u=c+12|0;v=c;w=a+20|0;x=co(k[k[w>>2]>>2]|0)|0;y=co(k[(k[w>>2]|0)+4>>2]|0)|0;a:do switch(x|0){case 536:{switch(y|0){case 536:{z=RL(a,b)|0;r=c;return z|0}case 540:{z=RL(a,b)|0;r=c;return z|0}default:{w=e+56|0;A=e+4|0;k[e>>2]=27524;k[w>>2]=27544;B=0;wa(508,e+56|0,A|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;E=C;vva(w);Qb(E|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[w>>2]=27488;B=0;va(448,A|0);C=B;B=0;do if(C&1){F=Rb()|0;G=Q;H=F}else{k[A>>2]=27560;F=e+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,A|0,d|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(d);Yua(F);Ava(A);G=J;H=I;break}Yua(d);B=0;I=Ia(40,e|0,127478,14)|0;J=B;B=0;b:do if((((!(J&1)?(B=0,K=ya(427,y|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(K)|0,B=0,M=Ia(40,I|0,K|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,M|0,146481,18)|0,M=B,B=0,!(M&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,f|0,80081,72);M=B;B=0;do if(!(M&1)){B=0;eb(502,g|0,118158,38);K=B;B=0;if(K&1){K=Rb()|0;N=Q;Yua(f);O=N;P=K;break}B=0;wa(510,h|0,A|0);K=B;B=0;if(K&1){K=Rb()|0;R=Q;S=K;T=1}else{B=0;ua(163,L|0,f|0,g|0,359,h|0);K=B;B=0;if(K&1)U=1;else{B=0;eb(503,L|0,1240,229);B=0;U=0}K=Rb()|0;N=Q;Yua(h);R=N;S=K;T=U}Yua(g);Yua(f);if(T){O=R;P=S}else{V=R;W=S;break b}}else{K=Rb()|0;O=Q;P=K}while(0);zb(L|0);V=O;W=P}else X=23;while(0);if((X|0)==23){I=Rb()|0;V=Q;W=I}k[e>>2]=27468;k[w>>2]=27488;k[A>>2]=27560;Yua(F);Ava(A);vva(w);Y=V;Z=W;Qb(Z|0)}while(0);D=G;E=H;vva(w);Qb(E|0)}}break}case 540:{switch(y|0){case 536:{z=RL(a,b)|0;r=c;return z|0}case 540:{z=RL(a,b)|0;r=c;return z|0}default:{A=i+56|0;C=i+4|0;k[i>>2]=27524;k[A>>2]=27544;B=0;wa(508,i+56|0,C|0);I=B;B=0;if(I&1){I=Rb()|0;_=Q;$=I;vva(A);Qb($|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[A>>2]=27488;B=0;va(448,C|0);I=B;B=0;do if(I&1){J=Rb()|0;aa=Q;ba=J}else{k[C>>2]=27560;J=i+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);M=B;B=0;if(M&1){M=Rb()|0;K=Q;Yua(d);Yua(J);Ava(C);aa=K;ba=M;break}Yua(d);B=0;M=Ia(40,i|0,127478,14)|0;K=B;B=0;c:do if((((!(K&1)?(B=0,N=ya(427,y|0)|0,ca=B,B=0,!(ca&1)):0)?(ca=Lta(N)|0,B=0,da=Ia(40,M|0,N|0,ca|0)|0,ca=B,B=0,!(ca&1)):0)?(B=0,ca=Ia(40,da|0,146481,18)|0,da=B,B=0,!(da&1)):0)?(B=0,Xa(239,ca|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,j|0,80081,72);da=B;B=0;do if(!(da&1)){B=0;eb(502,l|0,118158,38);N=B;B=0;if(N&1){N=Rb()|0;ea=Q;Yua(j);fa=N;ga=ea;break}B=0;wa(510,m|0,C|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ha=1;ia=Q;ja=ea}else{B=0;ua(163,ca|0,j|0,l|0,365,m|0);ea=B;B=0;if(ea&1)ka=1;else{B=0;eb(503,ca|0,1240,229);B=0;ka=0}ea=Rb()|0;N=Q;Yua(m);ha=ka;ia=N;ja=ea}Yua(l);Yua(j);if(ha){fa=ja;ga=ia}else{la=ia;ma=ja;break c}}else{ea=Rb()|0;fa=ea;ga=Q}while(0);zb(ca|0);la=ga;ma=fa}else X=52;while(0);if((X|0)==52){M=Rb()|0;la=Q;ma=M}k[i>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(J);Ava(C);vva(A);Y=la;Z=ma;Qb(Z|0)}while(0);_=aa;$=ba;vva(A);Qb($|0)}}break}case 543:{switch(y|0){case 543:{z=QL(a,b)|0;r=c;return z|0}case 534:{z=QL(a,b)|0;r=c;return z|0}default:{C=n+56|0;I=n+4|0;k[n>>2]=27524;k[C>>2]=27544;B=0;wa(508,n+56|0,I|0);w=B;B=0;if(w&1){w=Rb()|0;na=Q;oa=w;vva(C);Qb(oa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[C>>2]=27488;B=0;va(448,I|0);w=B;B=0;do if(w&1){M=Rb()|0;pa=Q;qa=M}else{k[I>>2]=27560;M=n+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[n+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,I|0,d|0);K=B;B=0;if(K&1){K=Rb()|0;F=Q;Yua(d);Yua(M);Ava(I);pa=F;qa=K;break}Yua(d);B=0;K=Ia(40,n|0,127478,14)|0;F=B;B=0;d:do if((((!(F&1)?(B=0,da=ya(427,y|0)|0,L=B,B=0,!(L&1)):0)?(L=Lta(da)|0,B=0,ea=Ia(40,K|0,da|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,ea|0,146481,18)|0,ea=B,B=0,!(ea&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,o|0,80081,72);ea=B;B=0;do if(!(ea&1)){B=0;eb(502,p|0,118158,38);da=B;B=0;if(da&1){da=Rb()|0;N=Q;Yua(o);ra=da;sa=N;break}B=0;wa(510,q|0,I|0);N=B;B=0;if(N&1){N=Rb()|0;ta=1;xa=Q;za=N}else{B=0;ua(163,L|0,o|0,p|0,371,q|0);N=B;B=0;if(N&1)Aa=1;else{B=0;eb(503,L|0,1240,229);B=0;Aa=0}N=Rb()|0;da=Q;Yua(q);ta=Aa;xa=da;za=N}Yua(p);Yua(o);if(ta){ra=za;sa=xa}else{Ba=xa;Ca=za;break d}}else{N=Rb()|0;ra=N;sa=Q}while(0);zb(L|0);Ba=sa;Ca=ra}else X=81;while(0);if((X|0)==81){K=Rb()|0;Ba=Q;Ca=K}k[n>>2]=27468;k[C>>2]=27488;k[I>>2]=27560;Yua(M);Ava(I);vva(C);Y=Ba;Z=Ca;Qb(Z|0)}while(0);na=pa;oa=qa;vva(C);Qb(oa|0)}}break}case 534:{switch(y|0){case 543:{z=QL(a,b)|0;r=c;return z|0}case 534:{z=QL(a,b)|0;r=c;return z|0}default:break a}break}default:{}}while(0);z=s+56|0;c=s+4|0;k[s>>2]=27524;k[z>>2]=27544;B=0;wa(508,s+56|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;Da=Q;Ea=a;vva(z);Qb(Ea|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[z>>2]=27488;B=0;va(448,c|0);a=B;B=0;do if(a&1){y=Rb()|0;Fa=Q;Ga=y}else{k[c>>2]=27560;y=s+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);oa=B;B=0;if(oa&1){oa=Rb()|0;qa=Q;Yua(d);Yua(y);Ava(c);Fa=qa;Ga=oa;break}Yua(d);B=0;oa=Ia(40,s|0,127478,14)|0;qa=B;B=0;e:do if((((!(qa&1)?(B=0,pa=ya(427,x|0)|0,na=B,B=0,!(na&1)):0)?(na=Lta(pa)|0,B=0,Ca=Ia(40,oa|0,pa|0,na|0)|0,na=B,B=0,!(na&1)):0)?(B=0,na=Ia(40,Ca|0,146481,18)|0,Ca=B,B=0,!(Ca&1)):0)?(B=0,Xa(239,na|0,0)|0,na=B,B=0,!(na&1)):0){na=Ab(20)|0;B=0;eb(502,t|0,80081,72);Ca=B;B=0;do if(!(Ca&1)){B=0;eb(502,u|0,118158,38);pa=B;B=0;if(pa&1){pa=Rb()|0;Ba=Q;Yua(t);Ha=pa;Ja=Ba;break}B=0;wa(510,v|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ka=1;La=Q;Ma=Ba}else{B=0;ua(163,na|0,t|0,u|0,378,v|0);Ba=B;B=0;if(Ba&1)Na=1;else{B=0;eb(503,na|0,1240,229);B=0;Na=0}Ba=Rb()|0;pa=Q;Yua(v);Ka=Na;La=pa;Ma=Ba}Yua(u);Yua(t);if(Ka){Ha=Ma;Ja=La}else{Oa=La;Pa=Ma;break e}}else{Ba=Rb()|0;Ha=Ba;Ja=Q}while(0);zb(na|0);Oa=Ja;Pa=Ha}else X=110;while(0);if((X|0)==110){oa=Rb()|0;Oa=Q;Pa=oa}k[s>>2]=27468;k[z>>2]=27488;k[c>>2]=27560;Yua(y);Ava(c);vva(z);Y=Oa;Z=Pa;Qb(Z|0)}while(0);Da=Fa;Ea=Ga;vva(z);Qb(Ea|0);return 0}function DL(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0.0,h=0.0;c=r;r=r+16|0;d=c;e=Qqa(68)|0;f=a+24|0;B=0;ua(165,e|0,k[a+20>>2]|0,2,k[f>>2]|0,534);a=B;B=0;if(a&1){a=Rb()|0;Sqa(e);Qb(a|0)}else{dO(k[f>>2]|0,d,308);g=+ba(10.0,+(+p[d>>3]))*b;f=k[e+12>>2]|0;p[f>>3]=g;g=-b;h=+ba(10.0,+(+p[d>>3]))*g;p[f+8>>3]=h;h=+ba(10.0,+(+p[d>>3]))*g;p[f+16>>3]=h;h=+ba(10.0,+(+p[d>>3]))*b;p[f+24>>3]=h;r=c;return e|0}return 0}function EL(a,b,c){a=a|0;b=b|0;c=+c;return}function FL(a){a=a|0;k[a+20>>2]=0;k[a+24>>2]=0;Dla(k[a+16>>2]|0);return}function GL(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function HL(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=r;r=r+192|0;d=g+176|0;j=g+40|0;l=g+24|0;m=g+12|0;n=g;o=a+20|0;a=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;p=(i[a>>0]|0)==0;if((h|0)==937){if(p){a=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;i[a>>0]=1;a=0;while(1){q=f+(a<<2)|0;if((k[q>>2]|0)>-1)a=a+1|0;else{s=q;break}}a=Rn(k[k[o>>2]>>2]|0)|0;k[s>>2]=a;a=k[k[o>>2]>>2]|0;if(k[a+28>>2]|0){s=(fo(a)|0)==0;t=s&1;u=s&1^1}else{t=0;u=0}}else{t=0;u=0}s=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;if(i[s>>0]|0){v=t;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}s=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;i[s>>0]=1;s=0;while(1){a=f+(s<<2)|0;if((k[a>>2]|0)>-1)s=s+1|0;else{x=a;break}}s=Rn(k[(k[o>>2]|0)+4>>2]|0)|0;k[x>>2]=s;s=k[(k[o>>2]|0)+4>>2]|0;if(!(k[s+28>>2]|0)){v=t;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(s)|0)){v=t+1|0;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=t;w=u+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}}a:do if(p){u=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;i[u>>0]=1;u=0;while(1){t=f+(u<<2)|0;if((k[t>>2]|0)>-1)u=u+1|0;else{y=t;break}}u=Rn(k[k[o>>2]>>2]|0)|0;k[y>>2]=u;switch(h|0){case 966:{u=k[k[o>>2]>>2]|0;if(!(k[u+32>>2]|0)){z=0;A=0;C=40;break a}t=(fo(u)|0)==0;z=t;A=t&1^1;C=40;break a;break}case 943:{t=k[k[o>>2]>>2]|0;if(!(k[t+24>>2]|0)){z=0;A=0;C=40;break a}u=(fo(t)|0)==0;z=u;A=u&1^1;C=40;break a;break}default:break a}}else{z=0;A=0;C=40}while(0);b:do if((C|0)==40){y=z&1;p=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;if(i[p>>0]|0){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}p=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;i[p>>0]=1;p=0;while(1){u=f+(p<<2)|0;if((k[u>>2]|0)>-1)p=p+1|0;else{D=u;break}}p=Rn(k[(k[o>>2]|0)+4>>2]|0)|0;k[D>>2]=p;switch(h|0){case 966:{p=k[(k[o>>2]|0)+4>>2]|0;if(!(k[p+32>>2]|0)){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(p)|0)){v=z?2:1;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=y;w=A+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}break}case 943:{p=k[(k[o>>2]|0)+4>>2]|0;if(!(k[p+24>>2]|0)){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(p)|0)){v=z?2:1;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=y;w=A+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}break}default:break b}}while(0);g=j+56|0;w=j+4|0;k[j>>2]=27524;k[g>>2]=27544;B=0;wa(508,j+56|0,w|0);c=B;B=0;if(c&1){c=Rb()|0;E=Q;F=c;vva(g);Qb(F|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[g>>2]=27488;B=0;va(448,w|0);c=B;B=0;do if(c&1){v=Rb()|0;G=Q;H=v}else{k[w>>2]=27560;v=j+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,w|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;A=Q;Yua(d);Yua(v);Ava(w);G=A;H=b;break}Yua(d);B=0;b=Ia(40,j|0,145010,13)|0;A=B;B=0;if(!(A&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,l|0,80081,72);A=B;B=0;do if(!(A&1)){B=0;eb(502,m|0,144217,23);z=B;B=0;if(z&1){z=Rb()|0;o=Q;Yua(l);I=o;J=z;break}B=0;wa(510,n|0,w|0);z=B;B=0;if(z&1){z=Rb()|0;K=Q;L=z;M=1}else{B=0;ua(163,b|0,l|0,m|0,270,n|0);z=B;B=0;if(z&1)N=1;else{B=0;eb(503,b|0,1240,229);B=0;N=0}z=Rb()|0;o=Q;Yua(n);K=o;L=z;M=N}Yua(m);Yua(l);if(M){I=K;J=L}else{O=K;P=L;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}}else{z=Rb()|0;I=Q;J=z}while(0);zb(b|0);O=I;P=J;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}A=Rb()|0;O=Q;P=A;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}while(0);E=G;F=H;vva(g);Qb(F|0)}function IL(a,b,c){a=a|0;b=+b;c=c|0;return}function JL(a,b,c){a=a|0;b=+b;c=c|0;return}function KL(a,b,c){a=a|0;b=b|0;c=c|0;return}function LL(a,b,c){a=a|0;b=b|0;c=c|0;return}function ML(a,b,c){a=a|0;b=b|0;c=c|0;return}function NL(a,b,c){a=a|0;b=b|0;c=c|0;return}function OL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function PL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function QL(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0,j=0.0,l=0,m=0;c=r;r=r+16|0;d=c;e=Qqa(68)|0;f=a+20|0;g=a+24|0;B=0;ua(165,e|0,k[f>>2]|0,2,k[g>>2]|0,543);a=B;B=0;if(a&1){a=Rb()|0;Sqa(e);Qb(a|0)}dO(k[g>>2]|0,d,73);g=eo(k[k[f>>2]>>2]|0,542,943)|0;eo(k[(k[f>>2]|0)+4>>2]|0,542,943)|0;f=g<<1;if((g|0)<=0){r=c;return e|0}a=k[e+12>>2]|0;h=-b;i=0;do{j=+ba(10.0,+(+p[d>>3]))*b;l=ma(i,f)|0;p[a+(l+i<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*h;m=i+g|0;p[a+(m+l<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*h;l=ma(m,f)|0;p[a+(l+i<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*b;p[a+(m+l<<3)>>3]=j;i=i+1|0}while((i|0)!=(g|0));r=c;return e|0}function RL(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,i=0,j=0.0,l=0,m=0;c=r;r=r+16|0;d=c;e=Qqa(68)|0;f=a+20|0;g=a+24|0;B=0;ua(165,e|0,k[f>>2]|0,2,k[g>>2]|0,534);a=B;B=0;if(a&1){a=Rb()|0;Sqa(e);Qb(a|0)}dO(k[g>>2]|0,d,73);g=eo(k[k[f>>2]>>2]|0,534,943)|0;eo(k[(k[f>>2]|0)+4>>2]|0,534,943)|0;f=g<<1;if((g|0)<=0){r=c;return e|0}a=k[e+12>>2]|0;h=-b;i=0;do{j=+ba(10.0,+(+p[d>>3]))*b;l=ma(i,f)|0;p[a+(l+i<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*h;m=i+g|0;p[a+(m+l<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*h;l=ma(m,f)|0;p[a+(l+i<<3)>>3]=j;j=+ba(10.0,+(+p[d>>3]))*b;p[a+(m+l<<3)>>3]=j;i=i+1|0}while((i|0)!=(g|0));r=c;return e|0}function SL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80170,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function TL(a,b,c){a=a|0;b=b|0;c=c|0;SL(a+-4|0,b,c)}function UL(a){a=a|0;var b=0;k[a>>2]=34152;k[a+4>>2]=34272;b=a+16|0;a=b+36|0;do{k[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function VL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+16|0;g=f+8|0;h=f+4|0;i=f;k[a>>2]=34152;k[a+4>>2]=34272;k[a+8>>2]=b;k[a+12>>2]=e;k[g>>2]=c+1+(k[d+100>>2]|0);k[i>>2]=k[(k[d+92>>2]|0)+(c<<2)>>2];k[h>>2]=(k[d+56>>2]|0)+1;B=0;d=ya(423,16)|0;c=B;B=0;if(!(c&1)){B=0;eb(509,d|0,g|0,1);g=B;B=0;if(g&1){g=Rb()|0;c=Q;Sqa(d);j=c;l=g;Qb(l|0)}k[a+16>>2]=d;B=0;d=ya(423,16)|0;g=B;B=0;if(!(g&1)){B=0;eb(509,d|0,i|0,1);i=B;B=0;if(i&1){i=Rb()|0;g=Q;Sqa(d);j=g;l=i;Qb(l|0)}k[a+20>>2]=d;B=0;d=ya(423,16)|0;i=B;B=0;if(!(i&1)){B=0;eb(509,d|0,h|0,1);h=B;B=0;if(!(h&1)){k[a+24>>2]=d;h=a+28|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[h+16>>2]=0;k[h+20>>2]=0;r=f;return}f=Rb()|0;h=Q;Sqa(d);j=h;l=f;Qb(l|0)}}}f=Rb()|0;j=Q;l=f;Qb(l|0)}function WL(a){a=a|0;var b=0;k[a>>2]=34152;k[a+4>>2]=34272;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b)return;yla(b);Sqa(b);return}function XL(a){a=a|0;var b=0;k[a>>2]=34152;k[a+4>>2]=34272;b=k[a+16>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function YL(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(52)|0;k[b>>2]=34152;k[b+4>>2]=34272;c=b+16|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[c+24>>2]=0;k[c+28>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+40>>2]=k[a+40>>2];d=Bla(k[a+16>>2]|0)|0;k[c>>2]=d;c=Bla(k[a+24>>2]|0)|0;k[b+24>>2]=c;e=Bla(k[a+20>>2]|0)|0;k[b+20>>2]=e;f=Fla(d)|0;k[b+28>>2]=f;f=Fla(c)|0;k[b+36>>2]=f;f=Fla(e)|0;k[b+32>>2]=f;k[a+44>>2]=0;k[b+44>>2]=0;k[a+48>>2]=0;k[b+48>>2]=0;return b|0}function ZL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;s=(d|0)==0;a:do if(s){t=k[b>>2]|0;i[t>>0]=81;i[t+1>>0]=2;i[t+2>>0]=0;i[t+3>>0]=0;t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+8|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[t>>0]=v;i[t+1>>0]=v>>8;i[t+2>>0]=v>>16;i[t+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;t=a+12|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;w=0}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+12;w=0;break a;break}case 1:{u=(k[b>>2]|0)+4|0;k[b>>2]=u;v=a+8|0;t=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[v>>0]=t;i[v+1>>0]=t>>8;i[v+2>>0]=t>>16;i[v+3>>0]=t>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;v=a+12|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=u;i[v+1>>0]=u>>8;i[v+2>>0]=u>>16;i[v+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+4;u=Qqa(16)|0;B=0;va(489,u|0);v=B;B=0;if(v&1){v=Rb()|0;t=Q;Sqa(u);x=t;y=v;Qb(y|0)}k[a+16>>2]=u;u=Qqa(16)|0;B=0;va(489,u|0);v=B;B=0;if(v&1){v=Rb()|0;t=Q;Sqa(u);x=t;y=v;Qb(y|0)}k[a+20>>2]=u;u=Qqa(16)|0;B=0;va(489,u|0);v=B;B=0;if(!(v&1)){k[a+24>>2]=u;w=1;break a}v=Rb()|0;t=Q;Sqa(u);x=t;y=v;Qb(y|0);break}default:{v=g+56|0;t=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,t|0);u=B;B=0;if(u&1){u=Rb()|0;z=Q;A=u;vva(v);Qb(A|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,t|0);u=B;B=0;do if(u&1){C=Rb()|0;D=Q;E=C}else{k[t>>2]=27560;C=g+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,t|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(f);Yua(C);Ava(t);D=G;E=F;break}Yua(f);B=0;F=Ia(40,g|0,143951,43)|0;G=B;B=0;b:do if(!(G&1)?(B=0,Xa(239,F|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,h|0,80261,72);I=B;B=0;do if(!(I&1)){B=0;eb(502,j|0,149525,8);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(h);L=K;M=J;break}B=0;wa(510,m|0,t|0);J=B;B=0;if(J&1){J=Rb()|0;N=Q;O=J;P=1}else{B=0;ua(163,H|0,h|0,j|0,119,m|0);J=B;B=0;if(J&1)R=1;else{B=0;eb(503,H|0,1240,229);B=0;R=0}J=Rb()|0;K=Q;Yua(m);N=K;O=J;P=R}Yua(j);Yua(h);if(P){L=N;M=O}else{S=N;T=O;break b}}else{J=Rb()|0;L=Q;M=J}while(0);zb(H|0);S=L;T=M}else U=18;while(0);if((U|0)==18){F=Rb()|0;S=Q;T=F}k[g>>2]=27468;k[v>>2]=27488;k[t>>2]=27560;Yua(C);Ava(t);vva(v);x=S;y=T;Qb(y|0)}while(0);z=D;A=E;vva(v);Qb(A|0)}}while(0);A=a+16|0;Cla(k[A>>2]|0,b,c,d);E=a+20|0;Cla(k[E>>2]|0,b,c,d);D=a+24|0;Cla(k[D>>2]|0,b,c,d);z=Fla(k[A>>2]|0)|0;k[a+28>>2]=z;z=Fla(k[D>>2]|0)|0;k[a+36>>2]=z;z=Fla(k[E>>2]|0)|0;k[a+32>>2]=z;if(s){s=k[b>>2]|0;z=a+44|0;E=l[z>>0]|l[z+1>>0]<<8|l[z+2>>0]<<16|l[z+3>>0]<<24;i[s>>0]=E;i[s+1>>0]=E>>8;i[s+2>>0]=E>>16;i[s+3>>0]=E>>24;E=(k[b>>2]|0)+4|0;k[b>>2]=E;s=a+48|0;z=l[s>>0]|l[s+1>>0]<<8|l[s+2>>0]<<16|l[s+3>>0]<<24;i[E>>0]=z;i[E+1>>0]=z>>8;i[E+2>>0]=z>>16;i[E+3>>0]=z>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}if((d|0)==2){k[c>>2]=(k[c>>2]|0)+8;r=e;return}if(w){w=a+44|0;c=k[b>>2]|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[w>>0]=d;i[w+1>>0]=d>>8;i[w+2>>0]=d>>16;i[w+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;w=a+48|0;a=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[w>>0]=a;i[w+1>>0]=a>>8;i[w+2>>0]=a>>16;i[w+3>>0]=a>>24;k[b>>2]=(k[b>>2]|0)+4;r=e;return}e=n+56|0;b=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;V=Q;W=a;vva(e);Qb(W|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){w=Rb()|0;X=Q;Y=w}else{k[b>>2]=27560;w=n+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);d=B;B=0;if(d&1){d=Rb()|0;c=Q;Yua(f);Yua(w);Ava(b);X=c;Y=d;break}Yua(f);B=0;d=Ia(40,n|0,143951,43)|0;c=B;B=0;c:do if(!(c&1)?(B=0,Xa(239,d|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,o|0,80261,72);E=B;B=0;do if(!(E&1)){B=0;eb(502,p|0,149525,8);s=B;B=0;if(s&1){s=Rb()|0;D=Q;Yua(o);Z=D;_=s;break}B=0;wa(510,q|0,b|0);s=B;B=0;if(s&1){s=Rb()|0;$=1;aa=Q;ba=s}else{B=0;ua(163,z|0,o|0,p|0,138,q|0);s=B;B=0;if(s&1)ca=1;else{B=0;eb(503,z|0,1240,229);B=0;ca=0}s=Rb()|0;D=Q;Yua(q);$=ca;aa=D;ba=s}Yua(p);Yua(o);if($){Z=aa;_=ba}else{da=aa;ea=ba;break c}}else{s=Rb()|0;Z=Q;_=s}while(0);zb(z|0);da=Z;ea=_}else U=53;while(0);if((U|0)==53){d=Rb()|0;da=Q;ea=d}k[n>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(w);Ava(b);vva(e);x=da;y=ea;Qb(y|0)}while(0);V=X;W=Y;vva(e);Qb(W|0)}function _L(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;i=b+728|0;j=b+304|0;l=b+576|0;m=b+152|0;n=b+288|0;o=b+16|0;p=b;b=d+56|0;q=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(b);Qb(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;Ia(40,d|0,80334,9)|0;y=B;B=0;do if(!(y&1)?(B=0,wa(510,e|0,q|0),z=B,B=0,!(z&1)):0){B=0;ya(424,e|0)|0;z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(e);C=A;D=z;break}Yua(e);k[d>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(b);z=f+56|0;A=f+4|0;k[f>>2]=27524;k[z>>2]=27544;B=0;wa(508,f+56|0,A|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(z);Qb(G|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[z>>2]=27488;B=0;va(448,A|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[A>>2]=27560;H=f+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,A|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(A);I=L;J=K;break}Yua(c);B=0;K=Ia(40,f|0,144086,7)|0;L=B;B=0;do if(((!(L&1)?(B=0,M=Xa(242,K|0,k[a+8>>2]|0)|0,N=B,B=0,!(N&1)):0)?(B=0,Ia(40,M|0,149177,1)|0,M=B,B=0,!(M&1)):0)?(B=0,wa(510,g|0,A|0),M=B,B=0,!(M&1)):0){B=0;ya(424,g|0)|0;M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(g);O=N;P=M;break}Yua(g);k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);M=h+56|0;N=h+4|0;k[h>>2]=27524;k[M>>2]=27544;B=0;wa(508,h+56|0,N|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;T=R;vva(M);Qb(T|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[M>>2]=27488;B=0;va(448,N|0);R=B;B=0;do if(R&1){U=Rb()|0;V=Q;W=U}else{k[N>>2]=27560;U=h+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(c);Yua(U);Ava(N);V=Y;W=X;break}Yua(c);B=0;X=Ia(40,h|0,144094,18)|0;Y=B;B=0;do if(Y&1)Z=83;else{B=0;_=ya(427,k[a+12>>2]|0)|0;$=B;B=0;if($&1){Z=83;break}$=Lta(_)|0;B=0;aa=Ia(40,X|0,_|0,$|0)|0;$=B;B=0;if($&1){Z=83;break}B=0;Ia(40,aa|0,149177,1)|0;aa=B;B=0;if(aa&1){Z=83;break}B=0;wa(510,i|0,N|0);aa=B;B=0;if(aa&1){Z=83;break}B=0;ya(424,i|0)|0;aa=B;B=0;if(aa&1){aa=Rb()|0;$=Q;Yua(i);ba=$;ca=aa;break}Yua(i);k[h>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(U);Ava(N);vva(M);Ala(k[a+16>>2]|0);Ala(k[a+20>>2]|0);Ala(k[a+24>>2]|0);aa=j+56|0;$=j+4|0;k[j>>2]=27524;k[aa>>2]=27544;B=0;wa(508,j+56|0,$|0);_=B;B=0;if(_&1){_=Rb()|0;da=Q;ea=_;vva(aa);Qb(ea|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[aa>>2]=27488;B=0;va(448,$|0);_=B;B=0;do if(_&1){fa=Rb()|0;ga=Q;ha=fa}else{k[$>>2]=27560;fa=j+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$|0,c|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(c);Yua(fa);Ava($);ga=ja;ha=ia;break}Yua(c);B=0;ia=Ia(40,j|0,80344,10)|0;ja=B;B=0;do if(ja&1)Z=86;else{B=0;ka=Xa(242,ia|0,k[a+44>>2]|0)|0;la=B;B=0;if(la&1){Z=86;break}B=0;Ia(40,ka|0,149177,1)|0;ka=B;B=0;if(ka&1){Z=86;break}B=0;wa(510,l|0,$|0);ka=B;B=0;if(ka&1){Z=86;break}B=0;ya(424,l|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(l);ma=la;na=ka;break}Yua(l);k[j>>2]=27468;k[aa>>2]=27488;k[$>>2]=27560;Yua(fa);Ava($);vva(aa);ka=m+56|0;la=m+4|0;k[m>>2]=27524;k[ka>>2]=27544;B=0;wa(508,m+56|0,la|0);oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;qa=oa;vva(ka);Qb(qa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);oa=B;B=0;do if(oa&1){ra=Rb()|0;sa=Q;ta=ra}else{k[la>>2]=27560;ra=m+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,la|0,c|0);ua=B;B=0;if(ua&1){ua=Rb()|0;xa=Q;Yua(c);Yua(ra);Ava(la);sa=xa;ta=ua;break}Yua(c);B=0;ua=Ia(40,m|0,80355,18)|0;xa=B;B=0;do if(xa&1)Z=89;else{B=0;za=Xa(242,ua|0,k[a+48>>2]|0)|0;Aa=B;B=0;if(Aa&1){Z=89;break}B=0;Ia(40,za|0,149177,1)|0;za=B;B=0;if(za&1){Z=89;break}B=0;wa(510,n|0,la|0);za=B;B=0;if(za&1){Z=89;break}B=0;ya(424,n|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(n);Ba=Aa;Ca=za;break}Yua(n);k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);za=o+56|0;Aa=o+4|0;k[o>>2]=27524;k[za>>2]=27544;B=0;wa(508,o+56|0,Aa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Fa=Da;vva(za);Qb(Fa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[za>>2]=27488;B=0;va(448,Aa|0);Da=B;B=0;do if(Da&1){Ga=Rb()|0;Ha=Q;Ja=Ga}else{k[Aa>>2]=27560;Ga=o+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Aa|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;La=Q;Yua(c);Yua(Ga);Ava(Aa);Ha=La;Ja=Ka;break}Yua(c);B=0;Ia(40,o|0,144113,14)|0;Ka=B;B=0;do if(!(Ka&1)){B=0;wa(510,p|0,Aa|0);La=B;B=0;if(La&1){Z=92;break}B=0;ya(424,p|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Yua(p);Na=Ma;Oa=La;break}else{Yua(p);k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);$N(k[a+40>>2]|0)}}else Z=92;while(0);if((Z|0)==92){Ka=Rb()|0;Na=Q;Oa=Ka}k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);Pa=Na;Qa=Oa;Qb(Qa|0)}while(0);Ea=Ha;Fa=Ja;vva(za);Qb(Fa|0)}while(0);if((Z|0)==89){ua=Rb()|0;Ba=Q;Ca=ua}k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);Pa=Ba;Qa=Ca;Qb(Qa|0)}while(0);pa=sa;qa=ta;vva(ka);Qb(qa|0)}while(0);if((Z|0)==86){ia=Rb()|0;ma=Q;na=ia}k[j>>2]=27468;k[aa>>2]=27488;k[$>>2]=27560;Yua(fa);Ava($);vva(aa);Pa=ma;Qa=na;Qb(Qa|0)}while(0);da=ga;ea=ha;vva(aa);Qb(ea|0)}while(0);if((Z|0)==83){X=Rb()|0;ba=Q;ca=X}k[h>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(U);Ava(N);vva(M);Pa=ba;Qa=ca;Qb(Qa|0)}while(0);S=V;T=W;vva(M);Qb(T|0)}else Z=80;while(0);if((Z|0)==80){K=Rb()|0;O=Q;P=K}k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);Pa=O;Qa=P;Qb(Qa|0)}while(0);F=I;G=J;vva(z);Qb(G|0)}else Z=77;while(0);if((Z|0)==77){y=Rb()|0;C=Q;D=y}k[d>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(b);Pa=C;Qa=D;Qb(Qa|0)}while(0);t=w;u=x;vva(b);Qb(u|0)}function $L(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function aM(a){a=a|0;return k[a+8>>2]|0}function bM(a){a=a|0;return 593}function cM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;e=a+16|0;Ela(k[e>>2]|0,d);d=a+20|0;Ela(k[d>>2]|0,b);b=a+24|0;Ela(k[b>>2]|0,f);f=Fla(k[e>>2]|0)|0;k[a+28>>2]=f;f=Fla(k[d>>2]|0)|0;k[a+32>>2]=f;f=Fla(k[b>>2]|0)|0;k[a+36>>2]=f;k[a+40>>2]=g;return}function dM(a,b,c){a=a|0;b=b|0;c=c|0;return}function eM(a,b){a=a|0;b=b|0;var c=0,d=0;c=r;r=r+16|0;d=c;cO(k[a+40>>2]|0,d,477);if((k[d>>2]|0)!=505){r=c;return}d=fM(a)|0;TN(d,b);SN(d);Sqa(d);r=c;return}function fM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0.0;b=r;r=r+16|0;c=b+8|0;d=b;e=Qqa(24)|0;f=a+28|0;g=a+40|0;B=0;ua(166,e|0,f|0,1,k[g>>2]|0,534);h=B;B=0;if(h&1){h=Rb()|0;Sqa(e);Qb(h|0)}h=k[a+32>>2]|0;rd[k[(k[h>>2]|0)+144>>2]&511](h,c,k[f>>2]|0,160);dO(k[g>>2]|0,d,358);i=+p[d>>3];if(!(i!=0.0)){r=b;return e|0}p[k[e+4>>2]>>3]=i*+p[c>>3];r=b;return e|0}function gM(a,b){a=a|0;b=b|0;var c=0;c=Rn(k[a+28>>2]|0)|0;k[b>>2]=c;return}function hM(a,b){a=a|0;b=b|0;var c=0;c=Qn(k[a+28>>2]|0)|0;k[b>>2]=c;return}function iM(a){a=a|0;return 1}function jM(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function kM(a){a=a|0;return 1}function lM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e;g=e+172|0;h=e+24|0;i=e+176|0;j=e+160|0;l=e+12|0;m=a+40|0;cO(k[m>>2]|0,g,477);switch(k[g>>2]|0){case 521:{do if(k[a+44>>2]|0){n=Qqa(68)|0;B=0;ua(165,n|0,a+28|0,1,k[m>>2]|0,534);o=B;B=0;if(o&1){o=Rb()|0;Sqa(n);Qb(o|0)}else{dO(k[m>>2]|0,f,344);q=+ba(10.0,+(+p[f>>3]))*d;p[k[n+12>>2]>>3]=q;s=n;break}}else s=0;while(0);t=s;break}case 509:{t=mM(a,d)|0;break}case 505:{dO(k[m>>2]|0,f,157);do if(k[a+44>>2]|0){s=Qqa(68)|0;B=0;ua(165,s|0,a+28|0,1,k[m>>2]|0,534);n=B;B=0;if(n&1){n=Rb()|0;Sqa(s);Qb(n|0)}else{q=+ba(10.0,+(+p[f>>3]))*d;p[k[s+12>>2]>>3]=q;u=s;break}}else u=0;while(0);t=u;break}default:{u=h+56|0;m=h+4|0;k[h>>2]=27524;k[u>>2]=27544;B=0;wa(508,h+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;v=Q;w=a;vva(u);Qb(w|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[u>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){s=Rb()|0;x=Q;y=s}else{k[m>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,m|0,f|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;Yua(f);Yua(s);Ava(m);x=o;y=n;break}Yua(f);B=0;n=Ia(40,h|0,144156,9)|0;o=B;B=0;if((((((!(o&1)?(B=0,o=Xa(242,n|0,k[g>>2]|0)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Ia(40,o|0,144166,2)|0,o=B,B=0,!(o&1)):0)?(B=0,o=ya(427,k[g>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(o)|0,B=0,A=Ia(40,n|0,o|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,A|0,144169,19)|0,A=B,B=0,!(A&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,i|0,80261,72);A=B;B=0;do if(!(A&1)){B=0;eb(502,j|0,118091,20);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Yua(i);C=n;D=o;break}B=0;wa(510,l|0,m|0);o=B;B=0;if(o&1){o=Rb()|0;E=Q;F=o;G=1}else{B=0;ua(163,z|0,i|0,j|0,264,l|0);o=B;B=0;if(o&1)H=1;else{B=0;eb(503,z|0,1240,229);B=0;H=0}o=Rb()|0;n=Q;Yua(l);E=n;F=o;G=H}Yua(j);Yua(i);if(G){C=E;D=F}else{I=E;J=F;k[h>>2]=27468;k[u>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(u);Qb(J|0)}}else{o=Rb()|0;C=Q;D=o}while(0);zb(z|0);I=C;J=D;k[h>>2]=27468;k[u>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(u);Qb(J|0)}A=Rb()|0;I=Q;J=A;k[h>>2]=27468;k[u>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(u);Qb(J|0)}while(0);v=x;w=y;vva(u);Qb(w|0)}}if(!t){r=e;return}IN(t,b,c);HN(t);Sqa(t);r=e;return}function mM(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=k[a+32>>2]|0;h=a+28|0;if(fo(k[h>>2]|0)|0){i=0;r=c;return i|0}j=Qqa(68)|0;l=a+40|0;B=0;ua(165,j|0,h|0,1,k[l>>2]|0,534);m=B;B=0;if(m&1){m=Rb()|0;Sqa(j);Qb(m|0)}rd[k[(k[g>>2]|0)+144>>2]&511](g,d,k[h>>2]|0,653);rd[k[(k[g>>2]|0)+144>>2]&511](g,e,k[h>>2]|0,666);dO(k[l>>2]|0,f,344);l=a+36|0;n=+WJ(k[l>>2]|0,212);o=+WJ(k[l>>2]|0,209);if(!(+p[e>>3]<n-o*+p[d>>3])){i=j;r=c;return i|0}o=+ba(10.0,+(+p[f>>3]))*b;p[k[j+12>>2]>>3]=o;i=j;r=c;return i|0}function nM(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+192|0;e=d+180|0;f=d+176|0;g=d+40|0;h=d+24|0;i=d+12|0;j=d;cO(k[a+40>>2]|0,f,477);switch(k[f>>2]|0){case 521:{l=oM(a,c)|0;break}case 509:{l=pM(a,0.0)|0;break}case 505:{l=qM(a,c)|0;break}case 481:case 497:{r=d;return}default:{a=g+56|0;m=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);Yua(q);Ava(m);s=v;t=u;break}Yua(e);B=0;u=Ia(40,g|0,144156,9)|0;v=B;B=0;if((((((!(v&1)?(B=0,v=Xa(242,u|0,k[f>>2]|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,144166,2)|0,v=B,B=0,!(v&1)):0)?(B=0,v=ya(427,k[f>>2]|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(v)|0,B=0,x=Ia(40,u|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,144169,19)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,h|0,80261,72);x=B;B=0;do if(!(x&1)){B=0;eb(502,i|0,118249,20);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(h);y=u;z=v;break}B=0;wa(510,j|0,m|0);v=B;B=0;if(v&1){v=Rb()|0;A=Q;C=v;D=1}else{B=0;ua(163,w|0,h|0,i|0,294,j|0);v=B;B=0;if(v&1)E=1;else{B=0;eb(503,w|0,1240,229);B=0;E=0}v=Rb()|0;u=Q;Yua(j);A=u;C=v;D=E}Yua(i);Yua(h);if(D){y=A;z=C}else{F=A;G=C;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}}else{v=Rb()|0;y=Q;z=v}while(0);zb(w|0);F=y;G=z;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}while(0);o=s;p=t;vva(a);Qb(p|0)}}if(!l){r=d;return}TN(l,b);SN(l);Sqa(l);r=d;return}function oM(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0;c=r;r=r+16|0;d=c+8|0;e=c;f=k[a+32>>2]|0;if(!(k[a+44>>2]|0)){g=0;r=c;return g|0}h=Qqa(24)|0;i=a+28|0;j=a+40|0;B=0;ua(166,h|0,i|0,1,k[j>>2]|0,534);l=B;B=0;if(l&1){l=Rb()|0;Sqa(h);Qb(l|0)}rd[k[(k[f>>2]|0)+144>>2]&511](f,d,k[i>>2]|0,653);dO(k[j>>2]|0,e,344);j=a+36|0;m=+WJ(k[j>>2]|0,212);n=+WJ(k[j>>2]|0,209);o=(m-n*+p[d>>3])*(+ba(10.0,+(+p[e>>3]))*b);p[k[h+4>>2]>>3]=o;g=h;r=c;return g|0}function pM(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0.0,t=0.0;c=r;r=r+48|0;d=c+32|0;e=c+24|0;f=c+16|0;g=c+8|0;h=c;i=k[a+32>>2]|0;j=a+28|0;if(fo(k[j>>2]|0)|0){l=0;r=c;return l|0}m=Qqa(24)|0;n=a+40|0;B=0;ua(166,m|0,j|0,1,k[n>>2]|0,534);o=B;B=0;if(o&1){o=Rb()|0;Sqa(m);Qb(o|0)}rd[k[(k[i>>2]|0)+144>>2]&511](i,d,k[j>>2]|0,653);rd[k[(k[i>>2]|0)+144>>2]&511](i,e,k[j>>2]|0,666);dO(k[n>>2]|0,f,651);dO(k[n>>2]|0,g,358);dO(k[n>>2]|0,h,344);n=a+36|0;b=+WJ(k[n>>2]|0,212);q=+WJ(k[n>>2]|0,209);s=b-q*+p[d>>3];q=+p[e>>3];if(q<s){p[k[m+4>>2]>>3]=0.0;l=m;r=c;return l|0}b=+p[g>>3];t=(q-s)*(+p[f>>3]*+ba(10.0,+(+p[h>>3])));if(b!=0.0){p[k[m+4>>2]>>3]=t/b;l=m;r=c;return l|0}else{p[k[m+4>>2]>>3]=t;l=m;r=c;return l|0}return 0}function qM(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0;c=r;r=r+16|0;d=c+8|0;e=c;if(!(k[a+44>>2]|0)){f=0;r=c;return f|0}g=Qqa(24)|0;h=a+28|0;i=a+40|0;B=0;ua(166,g|0,h|0,1,k[i>>2]|0,534);j=B;B=0;if(j&1){j=Rb()|0;Sqa(g);Qb(j|0)}j=Qqa(4)|0;k[j>>2]=39240;dO(k[i>>2]|0,e,157);lda(j,d,k[a+32>>2]|0,k[h>>2]|0);l=+ba(10.0,+(+p[e>>3]))*b;p[k[g+4>>2]>>3]=l*+p[d>>3];Ec[k[(k[j>>2]|0)+4>>2]&1023](j);f=g;r=c;return f|0}function rM(a){a=a|0;var b=0;b=a+28|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;Dla(k[a+16>>2]|0);Dla(k[a+20>>2]|0);Dla(k[a+24>>2]|0);return}function sM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function tM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;g=r;r=r+192|0;j=g+176|0;l=g+40|0;m=g+24|0;n=g+12|0;o=g;p=a+28|0;a=e+(Rn(k[p>>2]|0)|0)|0;if(i[a>>0]|0){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}a=e+(Rn(k[p>>2]|0)|0)|0;i[a>>0]=1;a=0;while(1){e=f+(a<<2)|0;if((k[e>>2]|0)>-1)a=a+1|0;else{u=e;break}}a=Rn(k[p>>2]|0)|0;k[u>>2]=a;switch(h|0){case 937:{if(!(k[d+28>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}h=(fo(k[p>>2]|0)|0)==0;q=h;s=h&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}case 943:{if(!(k[d+24>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}h=(fo(k[p>>2]|0)|0)==0;q=h;s=h&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}case 966:{if(!(k[d+32>>2]|0)){q=0;s=0;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}d=(fo(k[p>>2]|0)|0)==0;q=d;s=d&1^1;t=q&1;k[b>>2]=t;k[c>>2]=s;r=g;return}default:{g=l+56|0;s=l+4|0;k[l>>2]=27524;k[g>>2]=27544;B=0;wa(508,l+56|0,s|0);c=B;B=0;if(c&1){c=Rb()|0;v=Q;w=c;vva(g);Qb(w|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[g>>2]=27488;B=0;va(448,s|0);c=B;B=0;do if(c&1){t=Rb()|0;x=Q;y=t}else{k[s>>2]=27560;t=l+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[l+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,s|0,j|0);b=B;B=0;if(b&1){b=Rb()|0;q=Q;Yua(j);Yua(t);Ava(s);x=q;y=b;break}Yua(j);B=0;b=Ia(40,l|0,145010,13)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,m|0,80261,72);q=B;B=0;do if(!(q&1)){B=0;eb(502,n|0,144217,23);d=B;B=0;if(d&1){d=Rb()|0;p=Q;Yua(m);z=p;A=d;break}B=0;wa(510,o|0,s|0);d=B;B=0;if(d&1){d=Rb()|0;C=Q;D=d;E=1}else{B=0;ua(163,b|0,m|0,n|0,363,o|0);d=B;B=0;if(d&1)F=1;else{B=0;eb(503,b|0,1240,229);B=0;F=0}d=Rb()|0;p=Q;Yua(o);C=p;D=d;E=F}Yua(n);Yua(m);if(E){z=C;A=D}else{G=C;H=D;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}}else{d=Rb()|0;z=Q;A=d}while(0);zb(b|0);G=z;H=A;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}q=Rb()|0;G=Q;H=q;k[l>>2]=27468;k[g>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(g);Qb(H|0)}while(0);v=x;w=y;vva(g);Qb(w|0)}}}function uM(a,b,c){a=a|0;b=+b;c=c|0;return}function vM(a,b,c){a=a|0;b=+b;c=c|0;return}function wM(a,b,c){a=a|0;b=b|0;c=c|0;return}function xM(a,b,c){a=a|0;b=b|0;c=c|0;return}function yM(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=656|b^1)return;k[a+48>>2]=0;return}function zM(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=656|b^1)return;k[a+-4+48>>2]=0;return}function AM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function BM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function CM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;cO(k[a+40>>2]|0,e,477);switch(k[e>>2]|0){case 521:{DM(a,b);r=c;return}case 505:{EM(a,b);r=c;return}case 509:case 497:{r=c;return}default:{c=f+56|0;b=f+4|0;k[f>>2]=27524;k[c>>2]=27544;B=0;wa(508,f+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(c);Qb(l|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=f+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(b);n=q;o=p;break}Yua(d);B=0;p=Ia(40,f|0,80374,10)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[e>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,g|0,80261,72);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,80385,18);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(g);u=p;v=q;break}B=0;wa(510,i|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,g|0,h|0,430,i|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(i);w=p;x=q;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[f>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[f>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}}}function DM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+8|0;e=c;f=c+16|0;g=k[a+32>>2]|0;h=a+28|0;if(fo(k[h>>2]|0)|0){i=0;k[b>>2]=i;r=c;return}rd[k[(k[g>>2]|0)+144>>2]&511](g,d,k[h>>2]|0,653);rd[k[(k[g>>2]|0)+144>>2]&511](g,e,k[h>>2]|0,667);cO(k[a+40>>2]|0,f,345);j=+VJ(k[a+36>>2]|0,+p[d>>3]);d=+p[e>>3]>j&1;e=a+44|0;h=k[f>>2]|0;f=(h|0)==0;if((k[e>>2]|0)==(d|0))if(f)l=0;else{m=0;n=6}else if(f)l=1;else{f=a+48|0;k[f>>2]=(k[f>>2]|0)+1;m=1;n=6}if((n|0)==6)if((k[a+48>>2]|0)>(h|0)){k[e>>2]=1;l=0}else l=m;k[e>>2]=d;i=l;k[b>>2]=i;r=c;return}function EM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=a+28|0;if(fo(k[g>>2]|0)|0){k[b>>2]=0;r=c;return}h=a+32|0;i=k[h>>2]|0;if(!(Hc[k[(k[i>>2]|0)+248>>2]&511](i)|0)){k[a+44>>2]=0;k[b>>2]=0;r=c;return}i=Qqa(4)|0;k[i>>2]=39240;j=k[h>>2]|0;rd[k[(k[j>>2]|0)+144>>2]&511](j,e,k[g>>2]|0,123);lda(i,f,k[h>>2]|0,k[g>>2]|0);cO(k[a+40>>2]|0,d,158);g=+p[e>>3]>+p[f>>3]&1;f=a+44|0;e=k[d>>2]|0;d=(e|0)==0;if((k[f>>2]|0)==(g|0))if(d)l=0;else{m=0;n=9}else if(d)l=1;else{d=a+48|0;k[d>>2]=(k[d>>2]|0)+1;m=1;n=9}if((n|0)==9)if((k[a+48>>2]|0)>(e|0)){k[f>>2]=1;l=0}else l=m;k[f>>2]=g;Ec[k[(k[i>>2]|0)+4>>2]&1023](i);k[b>>2]=l;r=c;return}function FM(a){a=a|0;k[a+44>>2]=0;k[a+48>>2]=0;return}function GM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80404,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,74,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function HM(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,144350,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,80404,81);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,144370,27);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,79,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function IM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,80404,81);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,66,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function JM(a,b,c){a=a|0;b=b|0;c=c|0;IM(a+-4|0,b,c)}function KM(a){a=a|0;var b=0;k[a>>2]=34300;k[a+4>>2]=34420;k[a+44>>2]=0;b=a+20|0;k[a+40>>2]=0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;return}function LM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=r;r=r+32|0;g=c+24|0;h=c+16|0;i=c;k[a>>2]=34300;k[a+4>>2]=34420;j=d<<2;d=k[e+76>>2]|0;l=k[d+(j<<2)>>2]|0;m=k[d+((j|1)<<2)>>2]|0;n=k[d+((j|2)<<2)>>2]|0;o=k[d+((j|3)<<2)>>2]|0;k[g>>2]=n;if((o|0)==-1){k[h>>2]=l;k[h+4>>2]=m;j=n*3|0;d=j+-3|0;p=k[e+72>>2]|0;q=k[p+(d<<2)>>2]|0;s=k[p+(j+-2<<2)>>2]|0;t=k[p+(j+-1<<2)>>2]|0;j=k[e+100>>2]|0;k[i>>2]=((t|0)==(l|0)?3:(s|0)==(l|0)?2:(q|0)==(l|0)?1:-9999)+d+j;k[i+4>>2]=((t|0)==(m|0)?3:(s|0)==(m|0)?2:(q|0)==(m|0)?1:-9999)+d+j;u=h;v=2;w=644}else{k[g+4>>2]=o;k[h>>2]=l;k[h+4>>2]=m;j=n*3|0;n=j+-3|0;d=k[e+72>>2]|0;q=o*3|0;o=q+-3|0;s=k[d+(n<<2)>>2]|0;t=k[d+(o<<2)>>2]|0;p=k[d+(j+-2<<2)>>2]|0;x=k[d+(q+-2<<2)>>2]|0;y=k[d+(j+-1<<2)>>2]|0;j=k[d+(q+-1<<2)>>2]|0;q=k[e+100>>2]|0;k[i>>2]=((y|0)==(l|0)?3:(p|0)==(l|0)?2:(s|0)==(l|0)?1:-9999)+n+q;k[i+4>>2]=((y|0)==(m|0)?3:(p|0)==(m|0)?2:(s|0)==(m|0)?1:-9999)+n+q;k[i+8>>2]=((j|0)==(l|0)?3:(x|0)==(l|0)?2:(t|0)==(l|0)?1:-9999)+o+q;k[i+12>>2]=((j|0)==(m|0)?3:(x|0)==(m|0)?2:(t|0)==(m|0)?1:-9999)+o+q;u=h;v=4;w=649}k[a+8>>2]=b;k[a+12>>2]=f;k[a+16>>2]=w;B=0;w=ya(423,16)|0;f=B;B=0;if(!(f&1)){B=0;eb(509,w|0,i|0,v|0);v=B;B=0;if(v&1){v=Rb()|0;i=Q;Sqa(w);z=i;A=v;Qb(A|0)}k[a+24>>2]=w;B=0;w=ya(423,16)|0;v=B;B=0;if(!(v&1)){B=0;eb(509,w|0,u|0,2);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Sqa(w);z=v;A=u;Qb(A|0)}k[a+28>>2]=w;B=0;w=ya(423,16)|0;u=B;B=0;if(!(u&1)){B=0;eb(509,w|0,g|0,1);g=B;B=0;if(!(g&1)){k[a+20>>2]=w;k[a+44>>2]=0;k[a+32>>2]=0;k[a+40>>2]=0;r=c;return}c=Rb()|0;a=Q;Sqa(w);z=a;A=c;Qb(A|0)}}}c=Rb()|0;z=Q;A=c;Qb(A|0)}function MM(a){a=a|0;var b=0;k[a>>2]=34300;k[a+4>>2]=34420;k[a+44>>2]=0;b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+28>>2]|0;if(!b)return;yla(b);Sqa(b);return}function NM(a){a=a|0;var b=0;k[a>>2]=34300;k[a+4>>2]=34420;k[a+44>>2]=0;b=k[a+20>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+24>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+28>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function OM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(48)|0;k[b>>2]=34300;k[b+4>>2]=34420;c=b+20|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+16>>2]=k[a+16>>2];k[b+44>>2]=k[a+44>>2];d=Bla(k[a+24>>2]|0)|0;k[b+24>>2]=d;e=Bla(k[a+28>>2]|0)|0;k[b+28>>2]=e;f=Bla(k[a+20>>2]|0)|0;k[c>>2]=f;c=Gla(d)|0;k[b+40>>2]=c;c=Gla(e)|0;k[b+36>>2]=c;c=Fla(f)|0;k[b+32>>2]=c;return b|0}function PM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;a:do switch(d|0){case 0:{n=k[b>>2]|0;i[n>>0]=76;i[n+1>>0]=2;i[n+2>>0]=0;i[n+3>>0]=0;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=p;i[n+1>>0]=p>>8;i[n+2>>0]=p>>16;i[n+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;n=a+12|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+16|0;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+16;break}case 1:{n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;p=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=p;i[o+1>>0]=p>>8;i[o+2>>0]=p>>16;i[o+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;o=a+12|0;n=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=n;i[o+1>>0]=n>>8;i[o+2>>0]=n>>16;i[o+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+16|0;p=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=p;i[o+1>>0]=p>>8;i[o+2>>0]=p>>16;i[o+3>>0]=p>>24;k[b>>2]=(k[b>>2]|0)+4;p=Qqa(16)|0;B=0;va(489,p|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Sqa(p);q=n;s=o;Qb(s|0)}k[a+24>>2]=p;p=Qqa(16)|0;B=0;va(489,p|0);o=B;B=0;if(o&1){o=Rb()|0;n=Q;Sqa(p);q=n;s=o;Qb(s|0)}k[a+28>>2]=p;p=Qqa(16)|0;B=0;va(489,p|0);o=B;B=0;if(!(o&1)){k[a+20>>2]=p;break a}o=Rb()|0;n=Q;Sqa(p);q=n;s=o;Qb(s|0);break}default:{o=g+56|0;n=g+4|0;k[g>>2]=27524;k[o>>2]=27544;B=0;wa(508,g+56|0,n|0);p=B;B=0;if(p&1){p=Rb()|0;t=Q;u=p;vva(o);Qb(u|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[o>>2]=27488;B=0;va(448,n|0);p=B;B=0;do if(p&1){v=Rb()|0;w=Q;x=v}else{k[n>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(f);Yua(v);Ava(n);w=z;x=y;break}Yua(f);B=0;y=Ia(40,g|0,143951,43)|0;z=B;B=0;b:do if(!(z&1)?(B=0,Xa(239,y|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,h|0,80502,78);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,149525,8);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(h);F=E;G=D;break}B=0;wa(510,m|0,n|0);D=B;B=0;if(D&1){D=Rb()|0;H=Q;I=D;J=1}else{B=0;ua(163,A|0,h|0,j|0,165,m|0);D=B;B=0;if(D&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}D=Rb()|0;E=Q;Yua(m);H=E;I=D;J=K}Yua(j);Yua(h);if(J){F=H;G=I}else{L=H;M=I;break b}}else{D=Rb()|0;F=Q;G=D}while(0);zb(A|0);L=F;M=G}else N=17;while(0);if((N|0)==17){y=Rb()|0;L=Q;M=y}k[g>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(v);Ava(n);vva(o);q=L;s=M;Qb(s|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}}while(0);u=a+24|0;Cla(k[u>>2]|0,b,c,d);x=a+20|0;Cla(k[x>>2]|0,b,c,d);w=a+28|0;Cla(k[w>>2]|0,b,c,d);d=Gla(k[u>>2]|0)|0;k[a+40>>2]=d;d=Gla(k[w>>2]|0)|0;k[a+36>>2]=d;d=Fla(k[x>>2]|0)|0;k[a+32>>2]=d;r=e;return}function QM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;b=r;r=r+928|0;c=b+904|0;d=b+744|0;e=b+892|0;f=b+592|0;g=b+880|0;h=b+440|0;i=b+728|0;j=b+304|0;l=b+576|0;m=b+152|0;n=b+288|0;o=b+16|0;p=b;q=d+56|0;s=d+4|0;k[d>>2]=27524;k[q>>2]=27544;B=0;wa(508,d+56|0,s|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(q);Qb(v|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[q>>2]=27488;B=0;va(448,s|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[s>>2]=27560;w=d+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(c);Yua(w);Ava(s);x=A;y=z;break}Yua(c);B=0;Ia(40,d|0,80581,15)|0;z=B;B=0;do if(!(z&1)?(B=0,wa(510,e|0,s|0),A=B,B=0,!(A&1)):0){B=0;ya(424,e|0)|0;A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);D=C;E=A;break}Yua(e);k[d>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);A=f+56|0;C=f+4|0;k[f>>2]=27524;k[A>>2]=27544;B=0;wa(508,f+56|0,C|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;H=F;vva(A);Qb(H|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[A>>2]=27488;B=0;va(448,C|0);F=B;B=0;do if(F&1){I=Rb()|0;J=Q;K=I}else{k[C>>2]=27560;I=f+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,C|0,c|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(c);Yua(I);Ava(C);J=M;K=L;break}Yua(c);B=0;L=Ia(40,f|0,144086,7)|0;M=B;B=0;do if(((!(M&1)?(B=0,N=Xa(242,L|0,k[a+8>>2]|0)|0,O=B,B=0,!(O&1)):0)?(B=0,Ia(40,N|0,149177,1)|0,N=B,B=0,!(N&1)):0)?(B=0,wa(510,g|0,C|0),N=B,B=0,!(N&1)):0){B=0;ya(424,g|0)|0;N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(g);P=O;R=N;break}Yua(g);k[f>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(A);N=h+56|0;O=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,O|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;U=S;vva(N);Qb(U|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,O|0);S=B;B=0;do if(S&1){V=Rb()|0;W=Q;X=V}else{k[O>>2]=27560;V=h+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,O|0,c|0);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(c);Yua(V);Ava(O);W=Z;X=Y;break}Yua(c);B=0;Y=Ia(40,h|0,144094,18)|0;Z=B;B=0;do if(Z&1)_=71;else{B=0;$=ya(427,k[a+12>>2]|0)|0;aa=B;B=0;if(aa&1){_=71;break}aa=Lta($)|0;B=0;ba=Ia(40,Y|0,$|0,aa|0)|0;aa=B;B=0;if(aa&1){_=71;break}B=0;Ia(40,ba|0,149177,1)|0;ba=B;B=0;if(ba&1){_=71;break}B=0;wa(510,i|0,O|0);ba=B;B=0;if(ba&1){_=71;break}B=0;ya(424,i|0)|0;ba=B;B=0;if(ba&1){ba=Rb()|0;aa=Q;Yua(i);ca=aa;da=ba;break}Yua(i);k[h>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(V);Ava(O);vva(N);ba=j+56|0;aa=j+4|0;k[j>>2]=27524;k[ba>>2]=27544;B=0;wa(508,j+56|0,aa|0);$=B;B=0;if($&1){$=Rb()|0;ea=Q;fa=$;vva(ba);Qb(fa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[ba>>2]=27488;B=0;va(448,aa|0);$=B;B=0;do if($&1){ga=Rb()|0;ha=Q;ia=ga}else{k[aa>>2]=27560;ga=j+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,aa|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(c);Yua(ga);Ava(aa);ha=ka;ia=ja;break}Yua(c);B=0;ja=Ia(40,j|0,80597,14)|0;ka=B;B=0;do if(ka&1)_=74;else{B=0;la=Xa(242,ja|0,k[a+16>>2]|0)|0;ma=B;B=0;if(ma&1){_=74;break}B=0;Ia(40,la|0,149177,1)|0;la=B;B=0;if(la&1){_=74;break}B=0;wa(510,l|0,aa|0);la=B;B=0;if(la&1){_=74;break}B=0;ya(424,l|0)|0;la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(l);na=ma;oa=la;break}Yua(l);k[j>>2]=27468;k[ba>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva(ba);Ala(k[a+24>>2]|0);Ala(k[a+28>>2]|0);Ala(k[a+20>>2]|0);la=m+56|0;ma=m+4|0;k[m>>2]=27524;k[la>>2]=27544;B=0;wa(508,m+56|0,ma|0);pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;ra=pa;vva(la);Qb(ra|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[la>>2]=27488;B=0;va(448,ma|0);pa=B;B=0;do if(pa&1){sa=Rb()|0;ta=Q;ua=sa}else{k[ma>>2]=27560;sa=m+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(c);Yua(sa);Ava(ma);ta=za;ua=xa;break}Yua(c);B=0;Ia(40,m|0,144113,14)|0;xa=B;B=0;do if(xa&1)_=77;else{B=0;wa(510,n|0,ma|0);za=B;B=0;if(za&1){_=77;break}B=0;ya(424,n|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(n);Ba=Aa;Ca=za;break}Yua(n);k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);za=k[a+44>>2]|0;if(za)$N(za);za=o+56|0;Aa=o+4|0;k[o>>2]=27524;k[za>>2]=27544;B=0;wa(508,o+56|0,Aa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Fa=Da;vva(za);Qb(Fa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[za>>2]=27488;B=0;va(448,Aa|0);Da=B;B=0;do if(Da&1){Ga=Rb()|0;Ha=Q;Ja=Ga}else{k[Aa>>2]=27560;Ga=o+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Aa|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;La=Q;Yua(c);Yua(Ga);Ava(Aa);Ha=La;Ja=Ka;break}Yua(c);B=0;Ia(40,o|0,144128,11)|0;Ka=B;B=0;do if(!(Ka&1)){B=0;wa(510,p|0,Aa|0);La=B;B=0;if(La&1){_=92;break}B=0;ya(424,p|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Yua(p);Na=Ma;Oa=La;break}else{Yua(p);k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);r=b;return}}else _=92;while(0);if((_|0)==92){Ka=Rb()|0;Na=Q;Oa=Ka}k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);Pa=Na;Qa=Oa;Qb(Qa|0)}while(0);Ea=Ha;Fa=Ja;vva(za);Qb(Fa|0)}while(0);if((_|0)==77){xa=Rb()|0;Ba=Q;Ca=xa}k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);Pa=Ba;Qa=Ca;Qb(Qa|0)}while(0);qa=ta;ra=ua;vva(la);Qb(ra|0)}while(0);if((_|0)==74){ja=Rb()|0;na=Q;oa=ja}k[j>>2]=27468;k[ba>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva(ba);Pa=na;Qa=oa;Qb(Qa|0)}while(0);ea=ha;fa=ia;vva(ba);Qb(fa|0)}while(0);if((_|0)==71){Y=Rb()|0;ca=Q;da=Y}k[h>>2]=27468;k[N>>2]=27488;k[O>>2]=27560;Yua(V);Ava(O);vva(N);Pa=ca;Qa=da;Qb(Qa|0)}while(0);T=W;U=X;vva(N);Qb(U|0)}else _=68;while(0);if((_|0)==68){L=Rb()|0;P=Q;R=L}k[f>>2]=27468;k[A>>2]=27488;k[C>>2]=27560;Yua(I);Ava(C);vva(A);Pa=P;Qa=R;Qb(Qa|0)}while(0);G=J;H=K;vva(A);Qb(H|0)}else _=65;while(0);if((_|0)==65){z=Rb()|0;D=Q;E=z}k[d>>2]=27468;k[q>>2]=27488;k[s>>2]=27560;Yua(w);Ava(s);vva(q);Pa=D;Qa=E;Qb(Qa|0)}while(0);u=x;v=y;vva(q);Qb(v|0)}function RM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=d+56|0;p=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=d+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;Ia(40,d|0,80581,15)|0;x=B;B=0;do if(!(x&1)?(B=0,wa(510,e|0,p|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,144086,7)|0;K=B;B=0;do if(((!(K&1)?(B=0,L=Xa(242,J|0,k[a+8>>2]|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,L|0,149177,1)|0,L=B,B=0,!(L&1)):0)?(B=0,wa(510,g|0,z|0),L=B,B=0,!(L&1)):0){B=0;ya(424,g|0)|0;L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(g);N=M;O=L;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);L=h+56|0;M=h+4|0;k[h>>2]=27524;k[L>>2]=27544;B=0;wa(508,h+56|0,M|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;S=P;vva(L);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[L>>2]=27488;B=0;va(448,M|0);P=B;B=0;do if(P&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,144094,18)|0;X=B;B=0;do if(X&1)Y=72;else{B=0;Z=ya(427,k[a+12>>2]|0)|0;_=B;B=0;if(_&1){Y=72;break}_=Lta(Z)|0;B=0;$=Ia(40,W|0,Z|0,_|0)|0;_=B;B=0;if(_&1){Y=72;break}B=0;Ia(40,$|0,149177,1)|0;$=B;B=0;if($&1){Y=72;break}B=0;wa(510,i|0,M|0);$=B;B=0;if($&1){Y=72;break}B=0;ya(424,i|0)|0;$=B;B=0;if($&1){$=Rb()|0;_=Q;Yua(i);aa=_;ba=$;break}Yua(i);k[h>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);$=j+56|0;_=j+4|0;k[j>>2]=27524;k[$>>2]=27544;B=0;wa(508,j+56|0,_|0);Z=B;B=0;if(Z&1){Z=Rb()|0;ca=Q;da=Z;vva($);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[$>>2]=27488;B=0;va(448,_|0);Z=B;B=0;do if(Z&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,j|0,80597,14)|0;ia=B;B=0;do if(ia&1)Y=75;else{B=0;ja=Xa(242,ha|0,k[a+16>>2]|0)|0;ka=B;B=0;if(ka&1){Y=75;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){Y=75;break}B=0;wa(510,l|0,_|0);ja=B;B=0;if(ja&1){Y=75;break}B=0;ya(424,l|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(l);la=ka;ma=ja;break}Yua(l);k[j>>2]=27468;k[$>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva($);zla(k[a+24>>2]|0);zla(k[a+28>>2]|0);zla(k[a+20>>2]|0);ja=m+56|0;ka=m+4|0;k[m>>2]=27524;k[ja>>2]=27544;B=0;wa(508,m+56|0,ka|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;pa=na;vva(ja);Qb(pa|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ja>>2]=27488;B=0;va(448,ka|0);na=B;B=0;do if(na&1){qa=Rb()|0;ra=Q;sa=qa}else{k[ka>>2]=27560;qa=m+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ka|0,c|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;Yua(c);Yua(qa);Ava(ka);ra=ua;sa=ta;break}Yua(c);B=0;ta=Ia(40,m|0,144140,15)|0;ua=B;B=0;do if(!(ua&1)){B=0;xa=Xa(245,ta|0,k[a+44>>2]|0)|0;za=B;B=0;if(za&1){Y=78;break}B=0;Ia(40,xa|0,149177,1)|0;xa=B;B=0;if(xa&1){Y=78;break}B=0;wa(510,n|0,ka|0);xa=B;B=0;if(xa&1){Y=78;break}B=0;ya(424,n|0)|0;xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(n);Aa=za;Ba=xa;break}else{Yua(n);k[m>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(qa);Ava(ka);vva(ja);r=b;return}}else Y=78;while(0);if((Y|0)==78){ta=Rb()|0;Aa=Q;Ba=ta}k[m>>2]=27468;k[ja>>2]=27488;k[ka>>2]=27560;Yua(qa);Ava(ka);vva(ja);Ca=Aa;Da=Ba;Qb(Da|0)}while(0);oa=ra;pa=sa;vva(ja);Qb(pa|0)}while(0);if((Y|0)==75){ha=Rb()|0;la=Q;ma=ha}k[j>>2]=27468;k[$>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva($);Ca=la;Da=ma;Qb(Da|0)}while(0);ca=fa;da=ga;vva($);Qb(da|0)}while(0);if((Y|0)==72){W=Rb()|0;aa=Q;ba=W}k[h>>2]=27468;k[L>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(L);Ca=aa;Da=ba;Qb(Da|0)}while(0);R=U;S=V;vva(L);Qb(S|0)}else Y=69;while(0);if((Y|0)==69){J=Rb()|0;N=Q;O=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);Ca=N;Da=O;Qb(Da|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=66;while(0);if((Y|0)==66){x=Rb()|0;A=Q;C=x}k[d>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);Ca=A;Da=C;Qb(Da|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}function SM(a){a=a|0;return k[a+8>>2]|0}function TM(a){a=a|0;return 588}function UM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;f=a+24|0;Ela(k[f>>2]|0,d);d=a+28|0;Ela(k[d>>2]|0,e);e=a+20|0;Ela(k[e>>2]|0,b);b=Gla(k[f>>2]|0)|0;k[a+40>>2]=b;b=Gla(k[d>>2]|0)|0;k[a+36>>2]=b;b=Fla(k[e>>2]|0)|0;k[a+32>>2]=b;k[a+44>>2]=g;return}function VM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+192|0;e=d+180|0;f=d+176|0;g=d+40|0;h=d+24|0;i=d+12|0;j=d;cO(k[a+44>>2]|0,f,477);switch(k[f>>2]|0){case 510:{l=WM(a)|0;break}case 484:{l=XM(a)|0;break}case 479:{l=YM(a)|0;break}default:{a=g+56|0;m=g+4|0;k[g>>2]=27524;k[a>>2]=27544;B=0;wa(508,g+56|0,m|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(a);Qb(p|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[a>>2]=27488;B=0;va(448,m|0);n=B;B=0;do if(n&1){q=Rb()|0;s=Q;t=q}else{k[m>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);Yua(q);Ava(m);s=v;t=u;break}Yua(e);B=0;u=Ia(40,g|0,144156,9)|0;v=B;B=0;if((((((!(v&1)?(B=0,v=Xa(242,u|0,k[f>>2]|0)|0,u=B,B=0,!(u&1)):0)?(B=0,u=Ia(40,v|0,144166,2)|0,v=B,B=0,!(v&1)):0)?(B=0,v=ya(427,k[f>>2]|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(v)|0,B=0,x=Ia(40,u|0,v|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,x|0,144169,19)|0,x=B,B=0,!(x&1)):0)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,h|0,80502,78);x=B;B=0;do if(!(x&1)){B=0;eb(502,i|0,144189,13);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(h);y=u;z=v;break}B=0;wa(510,j|0,m|0);v=B;B=0;if(v&1){v=Rb()|0;A=Q;C=v;D=1}else{B=0;ua(163,w|0,h|0,i|0,262,j|0);v=B;B=0;if(v&1)E=1;else{B=0;eb(503,w|0,1240,229);B=0;E=0}v=Rb()|0;u=Q;Yua(j);A=u;C=v;D=E}Yua(i);Yua(h);if(D){y=A;z=C}else{F=A;G=C;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}}else{v=Rb()|0;y=Q;z=v}while(0);zb(w|0);F=y;G=z;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}x=Rb()|0;F=Q;G=x;k[g>>2]=27468;k[a>>2]=27488;k[m>>2]=27560;Yua(q);Ava(m);vva(a);Qb(G|0)}while(0);o=s;p=t;vva(a);Qb(p|0)}}if(!l){r=d;return}IN(l,b,c);HN(l);Sqa(l);r=d;return}function WM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;switch(k[a+16>>2]|0){case 649:{h=mN(a)|0;r=b;return h|0}case 644:{h=nN(a)|0;r=b;return h|0}default:{h=d+56|0;b=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(h);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(b);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,80612,22)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,80502,78);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,80635,26);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,625,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}while(0);i=m;j=n;vva(h);Qb(j|0)}}return 0}function XM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;switch(k[a+16>>2]|0){case 649:{h=lN(a)|0;r=b;return h|0}case 644:{h=kN(a)|0;r=b;return h|0}default:{h=d+56|0;b=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(h);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(b);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,80612,22)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,80502,78);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,80662,29);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,480,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}while(0);i=m;j=n;vva(h);Qb(j|0)}}return 0}function YM(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;switch(k[a+16>>2]|0){case 649:{h=lN(a)|0;if(!h){i=0;r=b;return i|0}MN(h);i=h;r=b;return i|0}case 644:{h=kN(a)|0;if(!h){i=0;r=b;return i|0}MN(h);i=h;r=b;return i|0}default:{i=d+56|0;b=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,b|0);h=B;B=0;if(h&1){h=Rb()|0;j=Q;l=h;vva(i);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,b|0);h=B;B=0;do if(h&1){a=Rb()|0;m=Q;n=a}else{k[b>>2]=27560;a=d+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(a);Ava(b);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,80612,22)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,80502,78);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,80692,36);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,454,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(i);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(i);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(i);Qb(A|0)}while(0);j=m;l=n;vva(i);Qb(l|0)}}return 0}function ZM(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;d=c+180|0;e=c+176|0;f=c+40|0;g=c+24|0;h=c+12|0;i=c;cO(k[a+44>>2]|0,e,477);switch(k[e>>2]|0){case 510:{j=_M(a)|0;break}case 484:{j=$M(a)|0;break}case 479:{r=c;return}default:{a=f+56|0;l=f+4|0;k[f>>2]=27524;k[a>>2]=27544;B=0;wa(508,f+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(a);Qb(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[a>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=f+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[f+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);Yua(p);Ava(l);q=u;s=t;break}Yua(d);B=0;t=Ia(40,f|0,144156,9)|0;u=B;B=0;if((((((!(u&1)?(B=0,u=Xa(242,t|0,k[e>>2]|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,144166,2)|0,u=B,B=0,!(u&1)):0)?(B=0,u=ya(427,k[e>>2]|0)|0,v=B,B=0,!(v&1)):0)?(v=Lta(u)|0,B=0,w=Ia(40,t|0,u|0,v|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,144169,19)|0,w=B,B=0,!(w&1)):0)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,g|0,80502,78);w=B;B=0;do if(!(w&1)){B=0;eb(502,h|0,144203,13);u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(g);x=t;y=u;break}B=0;wa(510,i|0,l|0);u=B;B=0;if(u&1){u=Rb()|0;z=Q;A=u;C=1}else{B=0;ua(163,v|0,g|0,h|0,291,i|0);u=B;B=0;if(u&1)D=1;else{B=0;eb(503,v|0,1240,229);B=0;D=0}u=Rb()|0;t=Q;Yua(i);z=t;A=u;C=D}Yua(h);Yua(g);if(C){x=z;y=A}else{E=z;F=A;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(a);Qb(F|0)}}else{u=Rb()|0;x=Q;y=u}while(0);zb(v|0);E=x;F=y;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(a);Qb(F|0)}w=Rb()|0;E=Q;F=w;k[f>>2]=27468;k[a>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(a);Qb(F|0)}while(0);n=q;o=s;vva(a);Qb(o|0)}}if(!j){r=c;return}TN(j,b);SN(j);Sqa(j);r=c;return}function _M(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;switch(k[a+16>>2]|0){case 644:{h=pN(a)|0;r=b;return h|0}case 649:{h=0;r=b;return h|0}default:{h=d+56|0;b=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(h);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(b);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,80612,22)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,80502,78);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,80729,26);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,863,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}while(0);i=m;j=n;vva(h);Qb(j|0)}}return 0}function $M(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;switch(k[a+16>>2]|0){case 644:{h=oN(a)|0;r=b;return h|0}case 649:{h=0;r=b;return h|0}default:{h=d+56|0;b=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;i=Q;j=a;vva(h);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;m=Q;n=l}else{k[b>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(b);m=p;n=o;break}Yua(c);B=0;o=Ia(40,d|0,80612,22)|0;p=B;B=0;if(!(p&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,e|0,80502,78);p=B;B=0;do if(!(p&1)){B=0;eb(502,f|0,80756,29);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);t=s;u=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;v=Q;w=q;x=1}else{B=0;ua(163,o|0,e|0,f|0,778,g|0);q=B;B=0;if(q&1)y=1;else{B=0;eb(503,o|0,1240,229);B=0;y=0}q=Rb()|0;s=Q;Yua(g);v=s;w=q;x=y}Yua(f);Yua(e);if(x){t=v;u=w}else{z=v;A=w;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}}else{q=Rb()|0;t=Q;u=q}while(0);zb(o|0);z=t;A=u;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}p=Rb()|0;z=Q;A=p;k[d>>2]=27468;k[h>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(h);Qb(A|0)}while(0);i=m;j=n;vva(h);Qb(j|0)}}return 0}function aN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=a+16|0;switch(k[i>>2]|0){case 649:{j=a+40|0;l=Rn(k[k[j>>2]>>2]|0)|0;k[b>>2]=l;l=Rn(k[(k[j>>2]|0)+4>>2]|0)|0;k[b+4>>2]=l;l=Rn(k[(k[j>>2]|0)+8>>2]|0)|0;k[b+8>>2]=l;l=Rn(k[(k[j>>2]|0)+12>>2]|0)|0;k[b+12>>2]=l;r=c;return}case 644:{l=a+40|0;a=Rn(k[k[l>>2]>>2]|0)|0;k[b>>2]=a;a=Rn(k[(k[l>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(c);Qb(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);o=q;p=j;break}Yua(d);B=0;j=Ia(40,e|0,80786,19)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[i>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,j|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,80502,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,80806,15);q=B;B=0;if(q&1){q=Rb()|0;j=Q;Yua(f);u=j;v=q;break}B=0;wa(510,h|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,315,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;j=Q;Yua(h);w=j;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);m=o;n=p;vva(c);Qb(n|0)}}}function bN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=a+16|0;switch(k[i>>2]|0){case 649:{j=a+40|0;l=Qn(k[k[j>>2]>>2]|0)|0;k[b>>2]=l;l=Qn(k[(k[j>>2]|0)+4>>2]|0)|0;k[b+4>>2]=l;l=Qn(k[(k[j>>2]|0)+8>>2]|0)|0;k[b+8>>2]=l;l=Qn(k[(k[j>>2]|0)+12>>2]|0)|0;k[b+12>>2]=l;r=c;return}case 644:{l=a+40|0;a=Qn(k[k[l>>2]>>2]|0)|0;k[b>>2]=a;a=Qn(k[(k[l>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(c);Qb(n|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);o=q;p=j;break}Yua(d);B=0;j=Ia(40,e|0,80786,19)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[i>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,j|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,80502,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,80822,15);q=B;B=0;if(q&1){q=Rb()|0;j=Q;Yua(f);u=j;v=q;break}B=0;wa(510,h|0,a|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,332,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;j=Q;Yua(h);w=j;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);m=o;n=p;vva(c);Qb(n|0)}}}function cN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+16|0;switch(k[h>>2]|0){case 644:{i=2;r=b;return i|0}case 649:{i=4;r=b;return i|0}default:{i=d+56|0;b=d+4|0;k[d>>2]=27524;k[i>>2]=27544;B=0;wa(508,d+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(i);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[i>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[b>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(b);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,80786,19)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[h>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,146481,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,80502,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,80838,16);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,b|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,344,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[i>>2]=27488;k[b>>2]=27560;Yua(m);Ava(b);vva(i);Qb(C|0)}while(0);j=n;l=o;vva(i);Qb(l|0)}}return 0}function dN(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function eN(a){a=a|0;return 0}function fN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}function gN(a,b,c){a=a|0;b=b|0;c=+c;return}function hN(a){a=a|0;var b=0;b=a+32|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;Dla(k[a+24>>2]|0);Dla(k[a+28>>2]|0);Dla(k[a+20>>2]|0);return}function iN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function jN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;g=r;r=r+192|0;d=g+176|0;j=g+40|0;l=g+24|0;m=g+12|0;n=g;if((Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)<=0){o=0;p=0;k[b>>2]=o;k[c>>2]=p;r=g;return}q=a+40|0;if((h|0)==937){s=0;t=0;u=0;while(1){v=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;do if(!(i[v>>0]|0)){w=e+(Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0)|0;i[w>>0]=1;w=0;while(1){x=f+(w<<2)|0;if((k[x>>2]|0)>-1)w=w+1|0;else{y=x;break}}w=Rn(k[(k[q>>2]|0)+(t<<2)>>2]|0)|0;k[y>>2]=w;w=k[(k[q>>2]|0)+(t<<2)>>2]|0;if(k[w+28>>2]|0)if(!(fo(w)|0)){z=s+1|0;A=u;break}else{z=s;A=u+1|0;break}else{z=s;A=u}}else{z=s;A=u}while(0);t=t+1|0;if((t|0)>=(Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)){o=z;p=A;break}else{s=z;u=A}}k[b>>2]=o;k[c>>2]=p;r=g;return}else{C=0;D=0;E=0}a:while(1){A=e+(Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0)|0;b:do if(!(i[A>>0]|0)){u=e+(Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0)|0;i[u>>0]=1;u=0;while(1){z=f+(u<<2)|0;if((k[z>>2]|0)>-1)u=u+1|0;else{F=z;break}}u=Rn(k[(k[q>>2]|0)+(D<<2)>>2]|0)|0;k[F>>2]=u;switch(h|0){case 966:{u=k[(k[q>>2]|0)+(D<<2)>>2]|0;if(!(k[u+32>>2]|0)){G=C;H=E;break b}if(!(fo(u)|0)){G=C+1|0;H=E;break b}else{G=C;H=E+1|0;break b}break}case 943:{u=k[(k[q>>2]|0)+(D<<2)>>2]|0;if(!(k[u+24>>2]|0)){G=C;H=E;break b}if(!(fo(u)|0)){G=C+1|0;H=E;break b}else{G=C;H=E+1|0;break b}break}default:break a}}else{G=C;H=E}while(0);D=D+1|0;if((D|0)>=(Hc[k[(k[a>>2]|0)+56>>2]&511](a)|0)){o=G;p=H;I=11;break}else{C=G;E=H}}if((I|0)==11){k[b>>2]=o;k[c>>2]=p;r=g;return}g=j+56|0;p=j+4|0;k[j>>2]=27524;k[g>>2]=27544;B=0;wa(508,j+56|0,p|0);c=B;B=0;if(c&1){c=Rb()|0;J=Q;K=c;vva(g);Qb(K|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[g>>2]=27488;B=0;va(448,p|0);c=B;B=0;do if(c&1){o=Rb()|0;L=Q;M=o}else{k[p>>2]=27560;o=j+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,p|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;I=Q;Yua(d);Yua(o);Ava(p);L=I;M=b;break}Yua(d);B=0;b=Ia(40,j|0,145010,13)|0;I=B;B=0;if(!(I&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,l|0,80502,78);I=B;B=0;do if(!(I&1)){B=0;eb(502,m|0,144217,23);H=B;B=0;if(H&1){H=Rb()|0;E=Q;Yua(l);N=E;O=H;break}B=0;wa(510,n|0,p|0);H=B;B=0;if(H&1){H=Rb()|0;P=Q;R=H;S=1}else{B=0;ua(163,b|0,l|0,m|0,434,n|0);H=B;B=0;if(H&1)T=1;else{B=0;eb(503,b|0,1240,229);B=0;T=0}H=Rb()|0;E=Q;Yua(n);P=E;R=H;S=T}Yua(m);Yua(l);if(S){N=P;O=R}else{U=P;V=R;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}}else{H=Rb()|0;N=Q;O=H}while(0);zb(b|0);U=N;V=O;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}I=Rb()|0;U=Q;V=I;k[j>>2]=27468;k[g>>2]=27488;k[p>>2]=27560;Yua(o);Ava(p);vva(g);Qb(V|0)}while(0);J=L;K=M;vva(g);Qb(K|0)}function kN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+144|0;c=b+136|0;d=b+128|0;e=b+120|0;f=b+112|0;g=b+104|0;h=b+96|0;i=b+48|0;j=b+32|0;l=b;m=k[a+32>>2]|0;if(!($p(m)|0)){n=0;r=b;return n|0}Ko(i,k[a+36>>2]|0,2,0);o=m+16|0;q=oC(k[o>>2]|0,674)|0;s=oC(k[o>>2]|0,677)|0;t=+p[i+24>>3]-+p[i>>3];u=+p[i+32>>3]-+p[i+8>>3];v=+aa(+(t*t+u*u));w=u/v;u=-t/v;o=a+40|0;x=ed[k[(k[m>>2]|0)+160>>2]&511](m,k[k[o>>2]>>2]|0)|0;y=ed[k[(k[m>>2]|0)+160>>2]&511](m,k[(k[o>>2]|0)+4>>2]|0)|0;z=Qqa(64)|0;B=0;va(491,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Sqa(z);D=C;E=A;Qb(E|0)}Mja(z,x,y);nd[k[(k[q>>2]|0)+48>>2]&1023](q,g,z);nd[k[(k[s>>2]|0)+48>>2]&1023](s,h,z);Ec[k[(k[z>>2]|0)+4>>2]&1023](z);if(w*+p[g>>3]+u*+p[h>>3]<=0.0){n=0;r=b;return n|0}h=Qqa(68)|0;B=0;ua(165,h|0,k[o>>2]|0,2,k[a+44>>2]|0,534);a=B;B=0;if(a&1){a=Rb()|0;o=Q;Sqa(h);D=o;E=a;Qb(E|0)}a=Qqa(64)|0;B=0;ib(289,a|0,x|0,y|0,2);o=B;B=0;if(o&1){o=Rb()|0;g=Q;Sqa(a);D=g;E=o;Qb(E|0)}E=Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0;if((E|0)<(Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0)){o=a+8|0;g=h+12|0;D=l+16|0;z=l+8|0;A=l+24|0;C=E;do{Fc[k[(k[a>>2]|0)+24>>2]&1023](a,C);zw(m,j,a,x,y,Hc[k[(k[m>>2]|0)+112>>2]&511](m)|0);nd[k[(k[q>>2]|0)+48>>2]&1023](q,e,a);nd[k[(k[s>>2]|0)+48>>2]&1023](s,f,a);v=w*+p[e>>3]+u*+p[f>>3];yw(m,d,i,a);p[c>>3]=v*(+p[o>>3]*+p[d>>3]);ZX(j,1,2,1,c,1,1,0,j,1,2,0,l,0)|0;E=k[g>>2]|0;p[E>>3]=+p[l>>3]+ +p[E>>3];F=E+8|0;p[F>>3]=+p[z>>3]+ +p[F>>3];F=E+16|0;p[F>>3]=+p[D>>3]+ +p[F>>3];F=E+24|0;p[F>>3]=+p[A>>3]+ +p[F>>3];C=C+1|0}while((C|0)<(Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0))}Ec[k[(k[a>>2]|0)+4>>2]&1023](a);n=h;r=b;return n|0}function lN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0,ma=0,na=0,oa=0.0,pa=0,qa=0.0,ra=0,sa=0.0,ta=0,va=0.0,wa=0,xa=0.0,ya=0,za=0.0,Aa=0,Ba=0.0,Ca=0,Da=0.0,Ea=0,Fa=0.0,Ga=0,Ha=0.0,Ia=0,Ja=0.0,Ka=0,La=0.0,Ma=0,Na=0.0;b=r;r=r+416|0;c=b+400|0;d=b+392|0;e=b+384|0;f=b+376|0;g=b+368|0;h=b+320|0;i=b+288|0;j=b+256|0;l=b+128|0;m=b;n=k[a+32>>2]|0;if(!($p(n)|0)){o=0;r=b;return o|0}q=Qqa(68)|0;s=a+40|0;B=0;ua(165,q|0,k[s>>2]|0,4,k[a+44>>2]|0,534);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Sqa(q);v=u;w=t;Qb(w|0)}Ko(h,k[a+36>>2]|0,2,0);a=n+16|0;t=oC(k[a>>2]|0,674)|0;u=oC(k[a>>2]|0,677)|0;x=+p[h+24>>3]-+p[h>>3];y=+p[h+32>>3]-+p[h+8>>3];z=+aa(+(x*x+y*y));A=y/z;y=-x/z;a=ed[k[(k[n>>2]|0)+160>>2]&511](n,k[k[s>>2]>>2]|0)|0;C=ed[k[(k[n>>2]|0)+160>>2]&511](n,k[(k[s>>2]|0)+4>>2]|0)|0;s=Qqa(64)|0;B=0;ib(289,s|0,a|0,C|0,2);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Sqa(s);v=E;w=D;Qb(w|0)}w=Hc[k[(k[s>>2]|0)+8>>2]&511](s)|0;if((w|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0)){D=s+8|0;E=q+12|0;v=m+96|0;F=l+8|0;G=l+16|0;H=l+24|0;I=l+32|0;J=l+40|0;K=l+48|0;L=l+56|0;M=l+64|0;N=l+72|0;O=l+80|0;P=l+88|0;R=l+96|0;S=l+104|0;T=l+112|0;U=l+120|0;V=m+8|0;W=m+16|0;X=m+24|0;Y=m+32|0;Z=m+40|0;_=m+48|0;ba=m+56|0;ca=m+64|0;da=m+72|0;ea=m+80|0;fa=m+88|0;ga=m+104|0;ha=m+112|0;ia=m+120|0;ja=w;do{Fc[k[(k[s>>2]|0)+24>>2]&1023](s,ja);ww(n,i,s,a,C,Hc[k[(k[n>>2]|0)+112>>2]&511](n)|0);xw(n,j,s,a,C,Hc[k[(k[n>>2]|0)+112>>2]&511](n)|0);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,s);nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,s);z=A*+p[f>>3]+y*+p[g>>3];yw(n,e,h,s);x=+p[D>>3]*+p[e>>3];p[c>>3]=z*x*.5;ka=x*+$(+z)*.5;p[d>>3]=ka;ZX(i,1,4,1,c,1,1,0,j,1,4,0,l,0)|0;ZX(i,1,4,1,d,1,1,0,i,1,4,0,m,0)|0;w=k[E>>2]|0;ka=+p[l>>3]+ +p[w>>3];p[w>>3]=ka;la=w+8|0;z=+p[F>>3]+ +p[la>>3];p[la>>3]=z;ma=w+16|0;x=+p[G>>3]+ +p[ma>>3];p[ma>>3]=x;na=w+24|0;oa=+p[H>>3]+ +p[na>>3];p[na>>3]=oa;pa=w+32|0;qa=+p[I>>3]+ +p[pa>>3];p[pa>>3]=qa;ra=w+40|0;sa=+p[J>>3]+ +p[ra>>3];p[ra>>3]=sa;ta=w+48|0;va=+p[K>>3]+ +p[ta>>3];p[ta>>3]=va;wa=w+56|0;xa=+p[L>>3]+ +p[wa>>3];p[wa>>3]=xa;ya=w+64|0;za=+p[M>>3]+ +p[ya>>3];p[ya>>3]=za;Aa=w+72|0;Ba=+p[N>>3]+ +p[Aa>>3];p[Aa>>3]=Ba;Ca=w+80|0;Da=+p[O>>3]+ +p[Ca>>3];p[Ca>>3]=Da;Ea=w+88|0;Fa=+p[P>>3]+ +p[Ea>>3];p[Ea>>3]=Fa;Ga=w+96|0;Ha=+p[R>>3]+ +p[Ga>>3];p[Ga>>3]=Ha;Ia=w+104|0;Ja=+p[S>>3]+ +p[Ia>>3];p[Ia>>3]=Ja;Ka=w+112|0;La=+p[T>>3]+ +p[Ka>>3];p[Ka>>3]=La;Ma=w+120|0;Na=+p[U>>3]+ +p[Ma>>3];p[Ma>>3]=Na;p[w>>3]=+p[m>>3]+ka;p[la>>3]=+p[V>>3]+z;p[ma>>3]=+p[W>>3]+x;p[na>>3]=+p[X>>3]+oa;p[pa>>3]=+p[Y>>3]+qa;p[ra>>3]=+p[Z>>3]+sa;p[ta>>3]=+p[_>>3]+va;p[wa>>3]=+p[ba>>3]+xa;p[ya>>3]=+p[ca>>3]+za;p[Aa>>3]=+p[da>>3]+Ba;p[Ca>>3]=+p[ea>>3]+Da;p[Ea>>3]=+p[fa>>3]+Fa;p[Ga>>3]=+p[v>>3]+Ha;p[Ia>>3]=+p[ga>>3]+Ja;p[Ka>>3]=+p[ha>>3]+La;p[Ma>>3]=+p[ia>>3]+Na;ja=ja+1|0}while((ja|0)<(Hc[k[(k[s>>2]|0)+12>>2]&511](s)|0))}Ec[k[(k[s>>2]|0)+4>>2]&1023](s);o=q;r=b;return o|0}function mN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0,ma=0,na=0,oa=0,pa=0.0,qa=0,ra=0.0,sa=0,ta=0.0,va=0,wa=0.0,xa=0,ya=0.0,za=0,Aa=0.0,Ba=0,Ca=0.0,Da=0,Ea=0.0,Fa=0,Ga=0.0,Ha=0,Ia=0.0,Ja=0,Ka=0.0,La=0,Ma=0.0,Na=0,Oa=0.0;b=r;r=r+416|0;c=b+408|0;d=b+400|0;e=b+392|0;f=b+384|0;g=b+376|0;h=b+368|0;i=b+320|0;j=b+288|0;l=b+256|0;m=b+128|0;n=b;o=k[a+32>>2]|0;if(!($p(o)|0)){q=0;r=b;return q|0}s=Qqa(68)|0;t=a+40|0;u=a+44|0;B=0;ua(165,s|0,k[t>>2]|0,4,k[u>>2]|0,534);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Sqa(s);x=w;y=v;Qb(y|0)}Ko(i,k[a+36>>2]|0,2,0);dO(k[u>>2]|0,f,358);u=o+16|0;a=oC(k[u>>2]|0,674)|0;v=oC(k[u>>2]|0,677)|0;z=+p[i+24>>3]-+p[i>>3];A=+p[i+32>>3]-+p[i+8>>3];C=+aa(+(z*z+A*A));D=A/C;A=-z/C;u=ed[k[(k[o>>2]|0)+160>>2]&511](o,k[k[t>>2]>>2]|0)|0;w=ed[k[(k[o>>2]|0)+160>>2]&511](o,k[(k[t>>2]|0)+4>>2]|0)|0;t=Qqa(64)|0;B=0;ib(289,t|0,u|0,w|0,2);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Sqa(t);x=F;y=E;Qb(y|0)}y=Hc[k[(k[t>>2]|0)+8>>2]&511](t)|0;if((y|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0)){E=t+8|0;F=s+12|0;x=n+96|0;G=m+8|0;H=m+16|0;I=m+24|0;J=m+32|0;K=m+40|0;L=m+48|0;M=m+56|0;N=m+64|0;O=m+72|0;P=m+80|0;R=m+88|0;S=m+96|0;T=m+104|0;U=m+112|0;V=m+120|0;W=n+8|0;X=n+16|0;Y=n+24|0;Z=n+32|0;_=n+40|0;ba=n+48|0;ca=n+56|0;da=n+64|0;ea=n+72|0;fa=n+80|0;ga=n+88|0;ha=n+104|0;ia=n+112|0;ja=n+120|0;ka=y;do{Fc[k[(k[t>>2]|0)+24>>2]&1023](t,ka);ww(o,j,t,u,w,Hc[k[(k[o>>2]|0)+112>>2]&511](o)|0);xw(o,l,t,u,w,Hc[k[(k[o>>2]|0)+112>>2]&511](o)|0);nd[k[(k[a>>2]|0)+48>>2]&1023](a,g,t);nd[k[(k[v>>2]|0)+48>>2]&1023](v,h,t);C=D*+p[g>>3]+A*+p[h>>3];yw(o,e,i,t);z=+p[E>>3]*+p[e>>3]*+p[f>>3];p[c>>3]=C*z*.5;la=z*+$(+C)*.5;p[d>>3]=la;ZX(j,1,4,1,c,1,1,0,l,1,4,0,m,0)|0;ZX(j,1,4,1,d,1,1,0,j,1,4,0,n,0)|0;y=k[F>>2]|0;la=+p[m>>3]+ +p[y>>3];p[y>>3]=la;ma=y+8|0;C=+p[G>>3]+ +p[ma>>3];p[ma>>3]=C;na=y+16|0;z=+p[H>>3]+ +p[na>>3];p[na>>3]=z;oa=y+24|0;pa=+p[I>>3]+ +p[oa>>3];p[oa>>3]=pa;qa=y+32|0;ra=+p[J>>3]+ +p[qa>>3];p[qa>>3]=ra;sa=y+40|0;ta=+p[K>>3]+ +p[sa>>3];p[sa>>3]=ta;va=y+48|0;wa=+p[L>>3]+ +p[va>>3];p[va>>3]=wa;xa=y+56|0;ya=+p[M>>3]+ +p[xa>>3];p[xa>>3]=ya;za=y+64|0;Aa=+p[N>>3]+ +p[za>>3];p[za>>3]=Aa;Ba=y+72|0;Ca=+p[O>>3]+ +p[Ba>>3];p[Ba>>3]=Ca;Da=y+80|0;Ea=+p[P>>3]+ +p[Da>>3];p[Da>>3]=Ea;Fa=y+88|0;Ga=+p[R>>3]+ +p[Fa>>3];p[Fa>>3]=Ga;Ha=y+96|0;Ia=+p[S>>3]+ +p[Ha>>3];p[Ha>>3]=Ia;Ja=y+104|0;Ka=+p[T>>3]+ +p[Ja>>3];p[Ja>>3]=Ka;La=y+112|0;Ma=+p[U>>3]+ +p[La>>3];p[La>>3]=Ma;Na=y+120|0;Oa=+p[V>>3]+ +p[Na>>3];p[Na>>3]=Oa;p[y>>3]=+p[n>>3]+la;p[ma>>3]=+p[W>>3]+C;p[na>>3]=+p[X>>3]+z;p[oa>>3]=+p[Y>>3]+pa;p[qa>>3]=+p[Z>>3]+ra;p[sa>>3]=+p[_>>3]+ta;p[va>>3]=+p[ba>>3]+wa;p[xa>>3]=+p[ca>>3]+ya;p[za>>3]=+p[da>>3]+Aa;p[Ba>>3]=+p[ea>>3]+Ca;p[Da>>3]=+p[fa>>3]+Ea;p[Fa>>3]=+p[ga>>3]+Ga;p[Ha>>3]=+p[x>>3]+Ia;p[Ja>>3]=+p[ha>>3]+Ka;p[La>>3]=+p[ia>>3]+Ma;p[Na>>3]=+p[ja>>3]+Oa;ka=ka+1|0}while((ka|0)<(Hc[k[(k[t>>2]|0)+12>>2]&511](t)|0))}Ec[k[(k[t>>2]|0)+4>>2]&1023](t);q=s;r=b;return q|0}function nN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;b=r;r=r+160|0;c=b+144|0;d=b+136|0;e=b+128|0;f=b+120|0;g=b+112|0;h=b+104|0;i=b+96|0;j=b+48|0;l=b+32|0;m=b;n=k[a+32>>2]|0;if(!($p(n)|0)){o=0;r=b;return o|0}Ko(j,k[a+36>>2]|0,2,0);q=a+44|0;dO(k[q>>2]|0,e,358);s=n+16|0;t=oC(k[s>>2]|0,674)|0;u=oC(k[s>>2]|0,677)|0;v=+p[j+24>>3]-+p[j>>3];w=+p[j+32>>3]-+p[j+8>>3];x=+aa(+(v*v+w*w));y=w/x;w=-v/x;s=a+40|0;a=ed[k[(k[n>>2]|0)+160>>2]&511](n,k[k[s>>2]>>2]|0)|0;z=ed[k[(k[n>>2]|0)+160>>2]&511](n,k[(k[s>>2]|0)+4>>2]|0)|0;A=Qqa(64)|0;B=0;va(491,A|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Sqa(A);E=D;F=C;Qb(F|0)}Mja(A,a,z);nd[k[(k[t>>2]|0)+48>>2]&1023](t,h,A);nd[k[(k[u>>2]|0)+48>>2]&1023](u,i,A);Ec[k[(k[A>>2]|0)+4>>2]&1023](A);if(y*+p[h>>3]+w*+p[i>>3]<=0.0){o=0;r=b;return o|0}i=Qqa(68)|0;B=0;ua(165,i|0,k[s>>2]|0,2,k[q>>2]|0,534);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Sqa(i);E=s;F=q;Qb(F|0)}q=Qqa(64)|0;B=0;ib(289,q|0,a|0,z|0,2);s=B;B=0;if(s&1){s=Rb()|0;h=Q;Sqa(q);E=h;F=s;Qb(F|0)}F=Hc[k[(k[q>>2]|0)+8>>2]&511](q)|0;if((F|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0)){s=q+8|0;h=i+12|0;E=m+16|0;A=m+8|0;C=m+24|0;D=F;do{Fc[k[(k[q>>2]|0)+24>>2]&1023](q,D);zw(n,l,q,a,z,Hc[k[(k[n>>2]|0)+112>>2]&511](n)|0);nd[k[(k[t>>2]|0)+48>>2]&1023](t,f,q);nd[k[(k[u>>2]|0)+48>>2]&1023](u,g,q);x=y*+p[f>>3]+w*+p[g>>3];yw(n,d,j,q);p[c>>3]=x*(+p[s>>3]*+p[d>>3]*+p[e>>3]);ZX(l,1,2,1,c,1,1,0,l,1,2,0,m,0)|0;F=k[h>>2]|0;p[F>>3]=+p[m>>3]+ +p[F>>3];G=F+8|0;p[G>>3]=+p[A>>3]+ +p[G>>3];G=F+16|0;p[G>>3]=+p[E>>3]+ +p[G>>3];G=F+24|0;p[G>>3]=+p[C>>3]+ +p[G>>3];D=D+1|0}while((D|0)<(Hc[k[(k[q>>2]|0)+12>>2]&511](q)|0))}Ec[k[(k[q>>2]|0)+4>>2]&1023](q);o=i;r=b;return o|0}function oN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+112|0;c=b+104|0;d=b+96|0;e=b+88|0;f=b+80|0;g=b+72|0;h=b+64|0;i=b+16|0;j=b;l=k[a+32>>2]|0;if(!($p(l)|0)){m=0;r=b;return m|0}Ko(i,k[a+36>>2]|0,2,0);n=l+16|0;o=oC(k[n>>2]|0,674)|0;q=oC(k[n>>2]|0,677)|0;s=oC(k[n>>2]|0,353)|0;t=+p[i+24>>3]-+p[i>>3];u=+p[i+32>>3]-+p[i+8>>3];v=+aa(+(t*t+u*u));w=u/v;u=-t/v;n=a+40|0;x=ed[k[(k[l>>2]|0)+160>>2]&511](l,k[k[n>>2]>>2]|0)|0;y=ed[k[(k[l>>2]|0)+160>>2]&511](l,k[(k[n>>2]|0)+4>>2]|0)|0;z=Qqa(64)|0;B=0;va(491,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Sqa(z);D=C;E=A;Qb(E|0)}Mja(z,x,y);nd[k[(k[o>>2]|0)+48>>2]&1023](o,f,z);nd[k[(k[q>>2]|0)+48>>2]&1023](q,g,z);Ec[k[(k[z>>2]|0)+4>>2]&1023](z);if(w*+p[f>>3]+u*+p[g>>3]>0.0){m=0;r=b;return m|0}g=Qqa(24)|0;B=0;ua(166,g|0,k[n>>2]|0,2,k[a+44>>2]|0,534);a=B;B=0;if(a&1){a=Rb()|0;n=Q;Sqa(g);D=n;E=a;Qb(E|0)}a=Qqa(64)|0;B=0;ib(289,a|0,x|0,y|0,2);n=B;B=0;if(n&1){n=Rb()|0;f=Q;Sqa(a);D=f;E=n;Qb(E|0)}E=Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0;if((E|0)<(Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0)){n=a+8|0;f=g+4|0;D=j+8|0;z=E;do{Fc[k[(k[a>>2]|0)+24>>2]&1023](a,z);zw(l,j,a,x,y,Hc[k[(k[l>>2]|0)+112>>2]&511](l)|0);nd[k[(k[o>>2]|0)+48>>2]&1023](o,d,a);nd[k[(k[q>>2]|0)+48>>2]&1023](q,e,a);nd[k[(k[s>>2]|0)+48>>2]&1023](s,h,a);v=w*+p[d>>3]+u*+p[e>>3];yw(l,c,i,a);t=+p[h>>3]*(v*(+p[n>>3]*+p[c>>3]));E=k[f>>2]|0;p[E>>3]=+p[E>>3]-t*+p[j>>3];A=E+8|0;p[A>>3]=+p[A>>3]-t*+p[D>>3];z=z+1|0}while((z|0)<(Hc[k[(k[a>>2]|0)+12>>2]&511](a)|0))}Ec[k[(k[a>>2]|0)+4>>2]&1023](a);m=g;r=b;return m|0}function pN(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0,ea=0,fa=0;b=r;r=r+320|0;c=b+296|0;d=b+112|0;e=b+104|0;f=b+96|0;g=b+88|0;h=b+80|0;i=b+72|0;j=b+64|0;l=b+16|0;m=b;n=b+160|0;o=b+144|0;q=b+132|0;s=b+120|0;u=k[a+32>>2]|0;if(!($p(u)|0)){v=0;r=b;return v|0}Ko(l,k[a+36>>2]|0,2,0);w=a+44|0;dO(k[w>>2]|0,e,358);x=u+16|0;y=oC(k[x>>2]|0,674)|0;z=oC(k[x>>2]|0,677)|0;A=oC(k[x>>2]|0,309)|0;C=+p[l+24>>3]-+p[l>>3];D=+p[l+32>>3]-+p[l+8>>3];E=+aa(+(C*C+D*D));F=D/E;D=-C/E;x=a+40|0;a=ed[k[(k[u>>2]|0)+160>>2]&511](u,k[k[x>>2]>>2]|0)|0;G=ed[k[(k[u>>2]|0)+160>>2]&511](u,k[(k[x>>2]|0)+4>>2]|0)|0;H=Qqa(64)|0;B=0;va(491,H|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Sqa(H);K=J;L=I;Qb(L|0)}Mja(H,a,G);nd[k[(k[y>>2]|0)+48>>2]&1023](y,h,H);nd[k[(k[z>>2]|0)+48>>2]&1023](z,i,H);Ec[k[(k[H>>2]|0)+4>>2]&1023](H);if(F*+p[h>>3]+D*+p[i>>3]>0.0){v=0;r=b;return v|0}i=Qqa(24)|0;B=0;ua(166,i|0,k[x>>2]|0,2,k[w>>2]|0,534);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Sqa(i);K=x;L=w;Qb(L|0)}w=Qqa(64)|0;B=0;ib(289,w|0,a|0,G|0,2);x=B;B=0;if(x&1){x=Rb()|0;h=Q;Sqa(w);K=h;L=x;Qb(L|0)}x=Hc[k[(k[w>>2]|0)+8>>2]&511](w)|0;a:do if((x|0)<(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0)){h=w+8|0;H=i+4|0;I=m+8|0;J=x;while(1){Fc[k[(k[w>>2]|0)+24>>2]&1023](w,J);zw(u,m,w,a,G,Hc[k[(k[u>>2]|0)+112>>2]&511](u)|0);nd[k[(k[y>>2]|0)+48>>2]&1023](y,f,w);nd[k[(k[z>>2]|0)+48>>2]&1023](z,g,w);nd[k[(k[A>>2]|0)+48>>2]&1023](A,j,w);E=+$(+(+p[j>>3]));p[t>>3]=E;M=k[t+4>>2]|0;if(M>>>0>2146435072|(M|0)==2146435072&(k[t>>2]|0)>>>0>0)break;E=F*+p[f>>3]+D*+p[g>>3];yw(u,d,l,w);C=+p[j>>3]*(E*(+p[h>>3]*+p[d>>3]*+p[e>>3]));M=k[H>>2]|0;p[M>>3]=+p[M>>3]-C*+p[m>>3];N=M+8|0;p[N>>3]=+p[N>>3]-C*+p[I>>3];J=J+1|0;if((J|0)>=(Hc[k[(k[w>>2]|0)+12>>2]&511](w)|0))break a}J=n+56|0;I=n+4|0;k[n>>2]=27524;k[J>>2]=27544;B=0;wa(508,n+56|0,I|0);H=B;B=0;if(H&1){H=Rb()|0;O=Q;P=H;vva(J);Qb(P|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[J>>2]=27488;B=0;va(448,I|0);H=B;B=0;do if(H&1){h=Rb()|0;R=Q;S=h}else{k[I>>2]=27560;h=n+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,I|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(c);Yua(h);Ava(I);R=M;S=N;break}Yua(c);B=0;N=Ia(40,n|0,80855,55)|0;M=B;B=0;b:do if(!(M&1)?(B=0,Xa(239,N|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,o|0,80502,78);U=B;B=0;do if(!(U&1)){B=0;eb(502,q|0,80911,34);V=B;B=0;if(V&1){V=Rb()|0;W=Q;Yua(o);X=W;Y=V;break}B=0;wa(510,s|0,I|0);V=B;B=0;if(V&1){V=Rb()|0;Z=Q;_=V;ba=1}else{B=0;ua(163,T|0,o|0,q|0,922,s|0);V=B;B=0;if(V&1)ca=1;else{B=0;eb(503,T|0,1240,229);B=0;ca=0}V=Rb()|0;W=Q;Yua(s);Z=W;_=V;ba=ca}Yua(q);Yua(o);if(ba){X=Z;Y=_}else{da=Z;ea=_;break b}}else{V=Rb()|0;X=Q;Y=V}while(0);zb(T|0);da=X;ea=Y}else fa=27;while(0);if((fa|0)==27){N=Rb()|0;da=Q;ea=N}k[n>>2]=27468;k[J>>2]=27488;k[I>>2]=27560;Yua(h);Ava(I);vva(J);K=da;L=ea;Qb(L|0)}while(0);O=R;P=S;vva(J);Qb(P|0)}while(0);Ec[k[(k[w>>2]|0)+4>>2]&1023](w);v=i;r=b;return v|0}
+-function yi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,_a=0;d=r;r=r+928|0;e=d+908|0;f=d+880|0;g=d+744|0;h=d+896|0;i=d+592|0;j=d+884|0;l=d+440|0;m=d+728|0;n=d+304|0;o=d+576|0;p=d+168|0;q=d+152|0;s=d+16|0;t=d;u=a+16|0;SX(k[u>>2]|0,7,0);v=g+56|0;w=g+4|0;k[g>>2]=27524;k[v>>2]=27544;B=0;wa(508,g+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);Yua(A);Ava(w);C=F;D=E;break}Yua(e);B=0;Ia(40,g|0,149177,1)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,h|0,w|0),F=B,B=0,!(F&1)):0){B=0;ya(425,h|0)|0;F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(h);H=G;I=F;break}Yua(h);k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);F=i+56|0;G=i+4|0;k[i>>2]=27524;k[F>>2]=27544;B=0;wa(508,i+56|0,G|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(F);Qb(L|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[G>>2]=27560;M=i+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[i+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,G|0,e|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(e);Yua(M);Ava(G);N=R;O=P;break}Yua(e);B=0;P=Ia(40,i|0,65642,3)|0;R=B;B=0;do if(((((!(R&1)?(k[P+(k[(k[P>>2]|0)+-12>>2]|0)+12>>2]=40,S=P+(k[(k[P>>2]|0)+-12>>2]|0)+4|0,k[S>>2]=k[S>>2]&-177|32,B=0,S=Ia(40,P|0,65646,37)|0,T=B,B=0,!(T&1)):0)?(B=0,U=+Za(1,k[u>>2]|0,1,2),T=B,B=0,!(T&1)):0)?(B=0,T=Sa(1,S|0,+U)|0,S=B,B=0,!(S&1)):0)?(B=0,Ia(40,T|0,149177,1)|0,T=B,B=0,!(T&1)):0)?(B=0,wa(510,j|0,G|0),T=B,B=0,!(T&1)):0){B=0;ya(425,j|0)|0;T=B;B=0;if(T&1){T=Rb()|0;S=Q;Yua(j);V=S;W=T;break}Yua(j);k[i>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(F);T=l+56|0;S=l+4|0;k[l>>2]=27524;k[T>>2]=27544;B=0;wa(508,l+56|0,S|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Z=X;vva(T);Qb(Z|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[T>>2]=27488;B=0;va(448,S|0);X=B;B=0;do if(X&1){_=Rb()|0;$=Q;aa=_}else{k[S>>2]=27560;_=l+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,S|0,e|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(e);Yua(_);Ava(S);$=ca;aa=ba;break}Yua(e);B=0;ba=Ia(40,l|0,65642,3)|0;ca=B;B=0;do if(ca&1)da=91;else{k[ba+(k[(k[ba>>2]|0)+-12>>2]|0)+12>>2]=40;ea=ba+(k[(k[ba>>2]|0)+-12>>2]|0)+4|0;k[ea>>2]=k[ea>>2]&-177|32;B=0;ea=Ia(40,ba|0,65684,27)|0;fa=B;B=0;if(fa&1){da=91;break}B=0;U=+Za(1,k[u>>2]|0,3,4);fa=B;B=0;if(fa&1){da=91;break}B=0;fa=Sa(1,ea|0,+U)|0;ea=B;B=0;if(ea&1){da=91;break}B=0;Ia(40,fa|0,149177,1)|0;fa=B;B=0;if(fa&1){da=91;break}B=0;wa(510,m|0,S|0);fa=B;B=0;if(fa&1){da=91;break}B=0;ya(425,m|0)|0;fa=B;B=0;if(fa&1){fa=Rb()|0;ea=Q;Yua(m);ga=ea;ha=fa;break}Yua(m);k[l>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(_);Ava(S);vva(T);fa=n+56|0;ea=n+4|0;k[n>>2]=27524;k[fa>>2]=27544;B=0;wa(508,n+56|0,ea|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;ka=ia;vva(fa);Qb(ka|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[fa>>2]=27488;B=0;va(448,ea|0);ia=B;B=0;do if(ia&1){la=Rb()|0;ma=Q;na=la}else{k[ea>>2]=27560;la=n+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[n+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,ea|0,e|0);oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;Yua(e);Yua(la);Ava(ea);ma=pa;na=oa;break}Yua(e);B=0;Ia(40,n|0,149177,1)|0;oa=B;B=0;do if(oa&1)da=94;else{B=0;wa(510,o|0,ea|0);pa=B;B=0;if(pa&1){da=94;break}B=0;ya(425,o|0)|0;pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;Yua(o);ra=qa;sa=pa;break}Yua(o);k[n>>2]=27468;k[fa>>2]=27488;k[ea>>2]=27560;Yua(la);Ava(ea);vva(fa);pa=p+56|0;qa=p+4|0;k[p>>2]=27524;k[pa>>2]=27544;B=0;wa(508,p+56|0,qa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;ua=Q;xa=ta;vva(pa);Qb(xa|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[pa>>2]=27488;B=0;va(448,qa|0);ta=B;B=0;do if(ta&1){za=Rb()|0;Aa=Q;Ba=za}else{k[qa>>2]=27560;za=p+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[p+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,qa|0,e|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Yua(e);Yua(za);Ava(qa);Aa=Da;Ba=Ca;break}Yua(e);B=0;Ca=Ia(40,p|0,65712,23)|0;Da=B;B=0;do if(Da&1)da=97;else{B=0;Ea=Ia(41,k[u>>2]|0,0,7)|0;Fa=B;B=0;if(Fa&1){da=97;break}B=0;Fa=Xa(242,Ca|0,Ea|0)|0;Ea=B;B=0;if(Ea&1){da=97;break}B=0;Ea=Ia(40,Fa|0,65736,5)|0;Fa=B;B=0;if(Fa&1){da=97;break}B=0;Fa=Ia(42,k[u>>2]|0,0,7)|0;Ga=B;B=0;if(Ga&1){da=97;break}B=0;Ga=Xa(242,Ea|0,Fa|0)|0;Fa=B;B=0;if(Fa&1){da=97;break}B=0;Fa=Ia(40,Ga|0,65742,5)|0;Ga=B;B=0;if(Ga&1){da=97;break}B=0;Ga=Ia(43,k[u>>2]|0,0,7)|0;Ea=B;B=0;if(Ea&1){da=97;break}B=0;Ea=Xa(242,Fa|0,Ga|0)|0;Ga=B;B=0;if(Ga&1){da=97;break}B=0;Ia(40,Ea|0,65748,4)|0;Ea=B;B=0;if(Ea&1){da=97;break}B=0;wa(510,q|0,qa|0);Ea=B;B=0;if(Ea&1){da=97;break}B=0;ya(425,q|0)|0;Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Ga=Q;Yua(q);Ha=Ga;Ja=Ea;break}Yua(q);k[p>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);Ea=s+56|0;Ga=s+4|0;k[s>>2]=27524;k[Ea>>2]=27544;B=0;wa(508,s+56|0,Ga|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ka=Q;La=Fa;vva(Ea);Qb(La|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ea>>2]=27488;B=0;va(448,Ga|0);Fa=B;B=0;do if(Fa&1){Ma=Rb()|0;Na=Q;Oa=Ma}else{k[Ga>>2]=27560;Ma=s+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[s+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Ga|0,e|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Yua(e);Yua(Ma);Ava(Ga);Na=Qa;Oa=Pa;break}Yua(e);B=0;Ia(40,s|0,149177,1)|0;Pa=B;B=0;do if(!(Pa&1)){B=0;wa(510,t|0,Ga|0);Qa=B;B=0;if(Qa&1){da=100;break}B=0;ya(425,t|0)|0;Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Ra=Q;Yua(t);Ta=Ra;Ua=Qa;break}else{Yua(t);k[s>>2]=27468;k[Ea>>2]=27488;k[Ga>>2]=27560;Yua(Ma);Ava(Ga);vva(Ea);Qa=a+44|0;Ra=(nO(k[Qa>>2]|0,949)|0)+4|0;Va=k[Ra>>2]|0;Ra=(nO(k[Qa>>2]|0,950)|0)+4|0;Wa=k[Ra>>2]|0;lO(k[Qa>>2]|0,f,951);Tsa(k[f>>2]|0)|0;k[b>>2]=k[Va>>2];k[c>>2]=k[Wa>>2];r=d;return}}else da=100;while(0);if((da|0)==100){Pa=Rb()|0;Ta=Q;Ua=Pa}k[s>>2]=27468;k[Ea>>2]=27488;k[Ga>>2]=27560;Yua(Ma);Ava(Ga);vva(Ea);Ya=Ta;_a=Ua;Qb(_a|0)}while(0);Ka=Na;La=Oa;vva(Ea);Qb(La|0)}while(0);if((da|0)==97){Ca=Rb()|0;Ha=Q;Ja=Ca}k[p>>2]=27468;k[pa>>2]=27488;k[qa>>2]=27560;Yua(za);Ava(qa);vva(pa);Ya=Ha;_a=Ja;Qb(_a|0)}while(0);ua=Aa;xa=Ba;vva(pa);Qb(xa|0)}while(0);if((da|0)==94){oa=Rb()|0;ra=Q;sa=oa}k[n>>2]=27468;k[fa>>2]=27488;k[ea>>2]=27560;Yua(la);Ava(ea);vva(fa);Ya=ra;_a=sa;Qb(_a|0)}while(0);ja=ma;ka=na;vva(fa);Qb(ka|0)}while(0);if((da|0)==91){ba=Rb()|0;ga=Q;ha=ba}k[l>>2]=27468;k[T>>2]=27488;k[S>>2]=27560;Yua(_);Ava(S);vva(T);Ya=ga;_a=ha;Qb(_a|0)}while(0);Y=$;Z=aa;vva(T);Qb(Z|0)}else da=88;while(0);if((da|0)==88){P=Rb()|0;V=Q;W=P}k[i>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(M);Ava(G);vva(F);Ya=V;_a=W;Qb(_a|0)}while(0);K=N;L=O;vva(F);Qb(L|0)}else da=85;while(0);if((da|0)==85){E=Rb()|0;H=Q;I=E}k[g>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);Ya=H;_a=I;Qb(_a|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}function zi(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+368|0;c=b+344|0;d=b+208|0;e=b+196|0;f=b+184|0;g=b+36|0;h=b+48|0;i=b+24|0;j=b+12|0;l=b;k[a+4>>2]=0;m=qZ()|0;if(!(Ita(m,68695)|0)){n=d+56|0;o=d+4|0;k[d>>2]=27524;k[n>>2]=27544;B=0;wa(508,d+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,67373,50)|0;x=B;B=0;a:do if(!(x&1)?(B=0,Xa(239,w|0,0)|0,y=B,B=0,!(y&1)):0){y=Ab(20)|0;B=0;eb(502,e|0,67424,87);z=B;B=0;do if(!(z&1)){B=0;eb(502,f|0,68854,19);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);D=A;E=C;break}B=0;wa(510,g|0,o|0);C=B;B=0;if(C&1){C=Rb()|0;F=Q;G=C;H=1}else{B=0;ua(163,y|0,e|0,f|0,115,g|0);C=B;B=0;if(C&1)I=1;else{B=0;eb(503,y|0,1240,229);B=0;I=0}C=Rb()|0;A=Q;Yua(g);F=A;G=C;H=I}Yua(f);Yua(e);if(H){D=G;E=F}else{J=G;K=F;break a}}else{C=Rb()|0;D=C;E=Q}while(0);zb(y|0);J=D;K=E}else L=17;while(0);if((L|0)==17){w=Rb()|0;J=w;K=Q}k[d>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);M=K;N=J;Qb(N|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}if(!(Ita(m,145123)|0)){k[a>>2]=1;if(!m){r=b;return}Tqa(m);r=b;return}b=h+56|0;m=h+4|0;k[h>>2]=27524;k[b>>2]=27544;B=0;wa(508,h+56|0,m|0);a=B;B=0;if(a&1){a=Rb()|0;O=Q;P=a;vva(b);Qb(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[b>>2]=27488;B=0;va(448,m|0);a=B;B=0;do if(a&1){s=Rb()|0;R=Q;S=s}else{k[m>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,m|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;v=Q;Yua(c);Yua(s);Ava(m);R=v;S=n;break}Yua(c);B=0;n=Ia(40,h|0,68874,20)|0;v=B;B=0;b:do if(!(v&1)?(B=0,Xa(239,n|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,i|0,67424,87);q=B;B=0;do if(!(q&1)){B=0;eb(502,j|0,68854,19);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(i);T=J;U=K;break}B=0;wa(510,l|0,m|0);K=B;B=0;if(K&1){K=Rb()|0;V=1;W=Q;X=K}else{B=0;ua(163,u|0,i|0,j|0,122,l|0);K=B;B=0;if(K&1)Y=1;else{B=0;eb(503,u|0,1240,229);B=0;Y=0}K=Rb()|0;J=Q;Yua(l);V=Y;W=J;X=K}Yua(j);Yua(i);if(V){T=X;U=W}else{Z=W;_=X;break b}}else{K=Rb()|0;T=K;U=Q}while(0);zb(u|0);Z=U;_=T}else L=44;while(0);if((L|0)==44){n=Rb()|0;Z=Q;_=n}k[h>>2]=27468;k[b>>2]=27488;k[m>>2]=27560;Yua(s);Ava(m);vva(b);M=Z;N=_;Qb(N|0)}while(0);O=R;P=S;vva(b);Qb(P|0)}function Ai(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;switch(cZ()|0){case 976:{n=Qqa(12)|0;k[n>>2]=28388;k[n+8>>2]=b;o=n+4|0;k[o>>2]=0;if(!b){k[a>>2]=n;r=c;return}B=0;p=ya(422,(b>>>0>536870911?-1:b<<3)|0)|0;q=B;B=0;if(q&1){q=Rb()|0;s=Q;Sqa(n);t=s;u=q;Qb(u|0)}else{WEa(p|0,0,b<<3|0)|0;k[o>>2]=p;k[a>>2]=n;r=c;return}break}case 977:{c=e+56|0;n=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,n|0);a=B;B=0;if(a&1){a=Rb()|0;v=Q;w=a;vva(c);Qb(w|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,n|0);a=B;B=0;do if(a&1){p=Rb()|0;x=Q;y=p}else{k[n>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,n|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;b=Q;Yua(d);Yua(p);Ava(n);x=b;y=o;break}Yua(d);B=0;o=Ia(40,e|0,126559,39)|0;b=B;B=0;a:do if(!(b&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,f|0,67124,96);s=B;B=0;do if(!(s&1)){B=0;eb(502,g|0,126695,7);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(f);C=z;D=A;break}B=0;wa(510,h|0,n|0);A=B;B=0;if(A&1){A=Rb()|0;E=Q;F=A;G=1}else{B=0;ua(163,q|0,f|0,g|0,94,h|0);A=B;B=0;if(A&1)H=1;else{B=0;eb(503,q|0,1240,229);B=0;H=0}A=Rb()|0;z=Q;Yua(h);E=z;F=A;G=H}Yua(g);Yua(f);if(G){C=F;D=E}else{I=F;J=E;break a}}else{A=Rb()|0;C=A;D=Q}while(0);zb(q|0);I=C;J=D}else K=22;while(0);if((K|0)==22){o=Rb()|0;I=o;J=Q}k[e>>2]=27468;k[c>>2]=27488;k[n>>2]=27560;Yua(p);Ava(n);vva(c);t=J;u=I;Qb(u|0)}while(0);v=x;w=y;vva(c);Qb(w|0);break}default:{w=i+56|0;c=i+4|0;k[i>>2]=27524;k[w>>2]=27544;B=0;wa(508,i+56|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;L=Q;M=y;vva(w);Qb(M|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[w>>2]=27488;B=0;va(448,c|0);y=B;B=0;do if(y&1){x=Rb()|0;N=Q;O=x}else{k[c>>2]=27560;x=i+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);v=B;B=0;if(v&1){v=Rb()|0;I=Q;Yua(d);Yua(x);Ava(c);N=I;O=v;break}Yua(d);B=0;v=Ia(40,i|0,126703,30)|0;I=B;B=0;b:do if(!(I&1)?(B=0,Xa(239,v|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,j|0,67124,96);n=B;B=0;do if(!(n&1)){B=0;eb(502,l|0,126695,7);e=B;B=0;if(e&1){e=Rb()|0;D=Q;Yua(j);P=e;R=D;break}B=0;wa(510,m|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;S=1;T=Q;U=D}else{B=0;ua(163,J|0,j|0,l|0,98,m|0);D=B;B=0;if(D&1)V=1;else{B=0;eb(503,J|0,1240,229);B=0;V=0}D=Rb()|0;e=Q;Yua(m);S=V;T=e;U=D}Yua(l);Yua(j);if(S){P=U;R=T}else{W=T;X=U;break b}}else{D=Rb()|0;P=D;R=Q}while(0);zb(J|0);W=R;X=P}else K=45;while(0);if((K|0)==45){v=Rb()|0;W=Q;X=v}k[i>>2]=27468;k[w>>2]=27488;k[c>>2]=27560;Yua(x);Ava(c);vva(w);t=W;u=X;Qb(u|0)}while(0);L=N;M=O;vva(w);Qb(M|0)}}}function Bi(a){a=a|0;return}function Ci(a){a=a|0;Sqa(a);return}function Di(a){a=a|0;jj(a);return}function Ei(a){a=a|0;return 554}function Fi(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;k[b>>2]=28236;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function Gi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+176|0;c=d+152|0;b=d+16|0;e=d;f=b+56|0;g=b+4|0;k[b>>2]=27524;k[f>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,66629,22)|0;p=B;B=0;if((((!(p&1)?(B=0,p=ya(427,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,66652,44)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=d;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function Hi(a){a=a|0;return k[a+8>>2]|0}function Ii(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ji(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ki(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Li(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Mi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ni(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,72,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function Oi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,73,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,74,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Qi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,75,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Ri(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,76,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Si(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,77,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function Ti(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,78,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ui(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,79,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Vi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,80,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Wi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,81,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Xi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82197,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,83,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Yi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,84,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Zi(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,82170,26)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,87,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function _i(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,88,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function $i(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,89,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function aj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,90,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function bj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,91,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function cj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,85,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function dj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,86,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ej(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,92,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function fj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,93,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function gj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,94,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function hj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,95,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function ij(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function jj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,66697,14)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,66712,10)|0;G=B;B=0;do if((((((!(G&1)?(H=a+8|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,109037,10)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(245,S|0,k[a+4>>2]|0)|0;V=B;B=0;if(V&1){W=48;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=48;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=48;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=48;while(0);if((W|0)==48){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=45;while(0);if((W|0)==45){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=42;while(0);if((W|0)==42){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function kj(a){a=a|0;Sqa(a);return}function lj(a){a=a|0;Tj(a);return}function mj(a){a=a|0;return 554}function nj(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;k[b>>2]=28084;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function oj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+176|0;c=d+152|0;b=d+16|0;e=d;f=b+56|0;g=b+4|0;k[b>>2]=27524;k[f>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,66629,22)|0;p=B;B=0;if((((!(p&1)?(B=0,p=ya(427,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,66652,44)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=d;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function pj(a){a=a|0;return k[a+8>>2]|0}function qj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function rj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function sj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function tj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function uj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function vj(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,72,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function wj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,73,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,74,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function yj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,75,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function zj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,76,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Aj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,77,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function Bj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,78,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Cj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,79,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Dj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,80,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Ej(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,81,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Fj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82197,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,83,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Gj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,84,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Hj(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,82170,26)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,87,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function Ij(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,88,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Jj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,89,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Kj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,90,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Lj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,91,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Mj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,85,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Nj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,86,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Oj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,92,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Pj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,93,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Qj(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,94,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Rj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,95,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function Sj(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function Tj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,66697,14)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,66712,10)|0;G=B;B=0;do if((((((!(G&1)?(H=a+8|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,109037,10)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(245,S|0,k[a+4>>2]|0)|0;V=B;B=0;if(V&1){W=48;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=48;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=48;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=48;while(0);if((W|0)==48){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=45;while(0);if((W|0)==45){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=42;while(0);if((W|0)==42){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function Uj(a){a=a|0;var b=0,c=0;k[a>>2]=28024;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b)return;if((k[b>>2]|0)!=0?(a=k[b+4>>2]|0,(a|0)!=0):0){c=k[a>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(a)}Sqa(b);return}function Vj(a){a=a|0;var b=0,c=0,d=0;k[a>>2]=28024;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b){Sqa(a);return}if((k[b>>2]|0)!=0?(c=k[b+4>>2]|0,(c|0)!=0):0){d=k[c>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);Sqa(c)}Sqa(b);Sqa(a);return}function Wj(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;b=r;r=r+176|0;c=b+152|0;d=b+16|0;e=b;f=d+56|0;g=d+4|0;k[d>>2]=27524;k[f>>2]=27544;B=0;wa(508,d+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=d+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;Ia(40,d|0,66948,45)|0;o=B;B=0;if(!(o&1)?(B=0,wa(510,e|0,g|0),o=B,B=0,!(o&1)):0){B=0;ya(424,e|0)|0;o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);q=p;s=o;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}Yua(e);k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);fk(a);o=k[a+12>>2]|0;if(!(k[o>>2]|0)){r=b;return}p=k[k[o+4>>2]>>2]|0;Ec[k[(k[p>>2]|0)+8>>2]&1023](p);r=b;return}p=Rb()|0;q=Q;s=p;k[d>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(s|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function Xj(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}function Yj(a){a=a|0;return -1}function Zj(a){a=a|0;return 921}function _j(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0.0;b=Qqa(40)|0;c=k[a+4>>2]|0;B=0;d=Xa(240,k[a+8>>2]|0,1)|0;e=B;B=0;if(e&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}e=k[a+12>>2]|0;h=k[a+24>>2]|0;i=+p[a+32>>3];k[b>>2]=28024;k[b+4>>2]=c;k[b+16>>2]=0;k[b+20>>2]=0;B=0;wa(512,b+8|0,d|0);d=B;B=0;if(d&1){f=Rb()|0;g=Q;Sqa(b);Qb(f|0)}else{k[b+24>>2]=h;p[b+32>>3]=i;k[b+12>>2]=e;return b|0}return 0}function $j(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,66876,71)|0;q=B;B=0;if(((!(q&1)?(q=k[a+8>>2]|0,s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,127493,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66769,96);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,149525,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,625,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ak(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+208|0;e=d;f=d+192|0;g=d+188|0;h=d+184|0;i=d+48|0;j=d+36|0;l=d+24|0;m=d+12|0;k[h>>2]=1;if(c){c=a+12|0;n=k[c>>2]|0;if(k[n>>2]|0){o=k[k[n+4>>2]>>2]|0;n=Hc[k[(k[o>>2]|0)+52>>2]&511](o)|0;o=k[c>>2]|0;if(!(k[o>>2]|0)){q=0;s=n}else{c=k[k[o+4>>2]>>2]|0;Fc[k[(k[c>>2]|0)+28>>2]&1023](c,g);q=k[g>>2]|0;s=n}}else{q=0;s=0}n=Rqa(q>>>0>536870911?-1:q<<3)|0;if((q|0)>0){c=0;do{p[n+(c<<3)>>3]=+p[s+(c<<3)>>3];c=c+1|0}while((c|0)<(q|0))}if(!(vY()|0)){q=a+8|0;c=(Lta(k[q>>2]|0)|0)+1|0;k[f>>2]=c;jta(f,4,1,b)|0;jta(k[q>>2]|0,k[f>>2]|0,1,b)|0;p[e>>3]=+p[a+32>>3];jta(e,8,1,b)|0;jta(a+24|0,4,1,b)|0;k[i>>2]=3;jta(i,4,1,b)|0;jta(g,4,1,b)|0;jta(h,4,1,b)|0;jta(n,ma(k[h>>2]<<3,k[g>>2]|0)|0,1,b)|0}Tqa(n);if(!s){r=d;return}Tqa(s);r=d;return}d=i+56|0;s=i+4|0;k[i>>2]=27524;k[d>>2]=27544;B=0;wa(508,i+56|0,s|0);n=B;B=0;if(n&1){n=Rb()|0;t=Q;u=n;vva(d);Qb(u|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[d>>2]=27488;B=0;va(448,s|0);n=B;B=0;do if(n&1){b=Rb()|0;v=Q;w=b}else{k[s>>2]=27560;b=i+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[i+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,s|0,e|0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Yua(e);Yua(b);Ava(s);v=h;w=g;break}Yua(e);B=0;g=Ia(40,i|0,134695,17)|0;h=B;B=0;if(!(h&1)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,j|0,66769,96);h=B;B=0;do if(!(h&1)){B=0;eb(502,l|0,66866,9);a=B;B=0;if(a&1){a=Rb()|0;f=Q;Yua(j);x=f;y=a;break}B=0;wa(510,m|0,s|0);a=B;B=0;if(a&1){a=Rb()|0;z=Q;A=a;C=1}else{B=0;ua(163,g|0,j|0,l|0,588,m|0);a=B;B=0;if(a&1)D=1;else{B=0;eb(503,g|0,1240,229);B=0;D=0}a=Rb()|0;f=Q;Yua(m);z=f;A=a;C=D}Yua(l);Yua(j);if(C){x=z;y=A}else{E=z;F=A;k[i>>2]=27468;k[d>>2]=27488;k[s>>2]=27560;Yua(b);Ava(s);vva(d);Qb(F|0)}}else{a=Rb()|0;x=Q;y=a}while(0);zb(g|0);E=x;F=y;k[i>>2]=27468;k[d>>2]=27488;k[s>>2]=27560;Yua(b);Ava(s);vva(d);Qb(F|0)}h=Rb()|0;E=Q;F=h;k[i>>2]=27468;k[d>>2]=27488;k[s>>2]=27560;Yua(b);Ava(s);vva(d);Qb(F|0)}while(0);t=v;u=w;vva(d);Qb(u|0)}function bk(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,68290,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function ck(a){a=a|0;return k[a+24>>2]|0}function dk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,108833,37)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,66769,96);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,108997,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,197,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function ek(a){a=a|0;return zY(k[a+8>>2]|0,0)|0}function fk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,109048,17)|0;x=B;B=0;do if(((!(x&1)?(B=0,y=Xa(242,w|0,k[a+4>>2]|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Ia(40,y|0,149177,1)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,n|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,109066,17)|0;K=B;B=0;do if(((!(K&1)?(L=k[a+8>>2]|0,M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,N|0,149177,1)|0,N=B,B=0,!(N&1)):0)?(B=0,wa(510,g|0,z|0),N=B,B=0,!(N&1)):0){B=0;ya(424,g|0)|0;N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(g);O=M;P=N;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);N=h+56|0;M=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,M|0);L=B;B=0;if(L&1){L=Rb()|0;R=Q;S=L;vva(N);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,M|0);L=B;B=0;do if(L&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,109084,17)|0;X=B;B=0;do if(X&1)Y=60;else{B=0;Z=Xa(242,W|0,k[a+24>>2]|0)|0;_=B;B=0;if(_&1){Y=60;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){Y=60;break}B=0;wa(510,i|0,M|0);Z=B;B=0;if(Z&1){Y=60;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(i);$=_;aa=Z;break}Yua(i);k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);Z=j+56|0;_=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,_|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(Z);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,j|0,109102,17)|0;ia=B;B=0;do if(!(ia&1)){B=0;ja=Sa(1,ha|0,+(+p[a+32>>3]))|0;ka=B;B=0;if(ka&1){Y=63;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){Y=63;break}B=0;wa(510,l|0,_|0);ja=B;B=0;if(ja&1){Y=63;break}B=0;ya(424,l|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(l);la=ka;ma=ja;break}else{Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);r=b;return}}else Y=63;while(0);if((Y|0)==63){ha=Rb()|0;la=Q;ma=ha}k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);na=la;oa=ma;Qb(oa|0)}while(0);ca=fa;da=ga;vva(Z);Qb(da|0)}while(0);if((Y|0)==60){W=Rb()|0;$=Q;aa=W}k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);na=$;oa=aa;Qb(oa|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}else Y=57;while(0);if((Y|0)==57){J=Rb()|0;O=Q;P=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);na=O;oa=P;Qb(oa|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=54;while(0);if((Y|0)==54){w=Rb()|0;A=Q;C=w}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);na=A;oa=C;Qb(oa|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}function gk(a){a=a|0;var b=0,c=0;k[a>>2]=27964;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function hk(a){a=a|0;var b=0,c=0;k[a>>2]=27964;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+12>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function ik(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(c);Yua(n);Ava(i);o=s;p=q;break}Yua(c);B=0;Ia(40,d|0,67048,37)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,e|0,i|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(e);u=t;v=s;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);tk(a);s=f+56|0;t=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,t|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(s);Qb(y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,t|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[t>>2]=27560;z=f+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,t|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(t);A=E;C=D;break}Yua(c);B=0;D=Ia(40,f|0,83531,16)|0;E=B;B=0;do if(((((!(E&1)?(B=0,F=Xa(242,D|0,k[a+16>>2]|0)|0,G=B,B=0,!(G&1)):0)?(B=0,G=Ia(40,F|0,124614,1)|0,F=B,B=0,!(F&1)):0)?(B=0,F=Xa(242,G|0,k[a+20>>2]|0)|0,G=B,B=0,!(G&1)):0)?(B=0,Ia(40,F|0,149177,1)|0,F=B,B=0,!(F&1)):0)?(B=0,wa(510,g|0,t|0),F=B,B=0,!(F&1)):0){B=0;ya(424,g|0)|0;F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(g);H=G;I=F;break}else{Yua(g);k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(s);r=b;return}}else J=31;while(0);if((J|0)==31){D=Rb()|0;H=Q;I=D}k[f>>2]=27468;k[s>>2]=27488;k[t>>2]=27560;Yua(z);Ava(t);vva(s);K=H;L=I;Qb(L|0)}while(0);x=A;y=C;vva(s);Qb(y|0)}else J=28;while(0);if((J|0)==28){q=Rb()|0;u=Q;v=q}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);K=u;L=v;Qb(L|0)}while(0);l=o;m=p;vva(h);Qb(m|0)}function jk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=d+56|0;q=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;Ia(40,d|0,67048,37)|0;y=B;B=0;do if(!(y&1)?(B=0,wa(510,e|0,q|0),z=B,B=0,!(z&1)):0){B=0;ya(424,e|0)|0;z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(e);C=A;D=z;break}Yua(e);k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);tk(a);z=f+56|0;A=f+4|0;k[f>>2]=27524;k[z>>2]=27544;B=0;wa(508,f+56|0,A|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(z);Qb(G|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[z>>2]=27488;B=0;va(448,A|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[A>>2]=27560;H=f+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,A|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(A);I=L;J=K;break}Yua(c);B=0;K=Ia(40,f|0,83531,16)|0;L=B;B=0;do if(((((!(L&1)?(M=a+16|0,B=0,N=Xa(242,K|0,k[M>>2]|0)|0,O=B,B=0,!(O&1)):0)?(B=0,O=Ia(40,N|0,124614,1)|0,N=B,B=0,!(N&1)):0)?(N=a+20|0,B=0,P=Xa(242,O|0,k[N>>2]|0)|0,O=B,B=0,!(O&1)):0)?(B=0,Ia(40,P|0,149177,1)|0,P=B,B=0,!(P&1)):0)?(B=0,wa(510,g|0,A|0),P=B,B=0,!(P&1)):0){B=0;ya(424,g|0)|0;P=B;B=0;if(P&1){P=Rb()|0;O=Q;Yua(g);R=O;S=P;break}Yua(g);k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);if((k[M>>2]|0)<=0){r=b;return}P=h+56|0;O=h+4|0;T=h+56|0;U=h+128|0;V=h+132|0;W=h+36|0;X=h+52|0;Y=m+56|0;Z=m+4|0;_=m+56|0;$=m+128|0;aa=m+132|0;ba=m+36|0;ca=m+52|0;da=j+56|0;ea=j+4|0;fa=j+56|0;ga=j+128|0;ha=j+132|0;ia=j+36|0;ja=j+52|0;ka=a+12|0;la=0;a:while(1){k[h>>2]=27524;k[P>>2]=27544;B=0;wa(508,T|0,O|0);na=B;B=0;if(na&1){oa=33;break}k[U>>2]=0;k[V>>2]=-1;k[h>>2]=27468;k[P>>2]=27488;B=0;va(448,O|0);na=B;B=0;if(na&1){oa=34;break}k[O>>2]=27560;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[X>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,O|0,c|0);na=B;B=0;if(na&1){oa=32;break}Yua(c);B=0;Ia(40,h|0,67086,5)|0;na=B;B=0;if(na&1){oa=60;break}B=0;wa(510,i|0,O|0);na=B;B=0;if(na&1){oa=60;break}B=0;ya(424,i|0)|0;na=B;B=0;if(na&1){oa=61;break}Yua(i);k[h>>2]=27468;k[P>>2]=27488;k[O>>2]=27560;Yua(W);Ava(O);vva(P);if((k[N>>2]|0)>0){na=0;do{k[j>>2]=27524;k[da>>2]=27544;B=0;wa(508,fa|0,ea|0);pa=B;B=0;if(pa&1){oa=45;break a}k[ga>>2]=0;k[ha>>2]=-1;k[j>>2]=27468;k[da>>2]=27488;B=0;va(448,ea|0);pa=B;B=0;if(pa&1){oa=46;break a}k[ea>>2]=27560;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[ja>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ea|0,c|0);pa=B;B=0;if(pa&1){oa=44;break a}Yua(c);B=0;pa=Ia(40,j|0,149175,1)|0;qa=B;B=0;if(qa&1){oa=63;break a}k[pa+(k[(k[pa>>2]|0)+-12>>2]|0)+12>>2]=11;k[pa+(k[(k[pa>>2]|0)+-12>>2]|0)+8>>2]=5;qa=(ma(k[N>>2]|0,la)|0)+na|0;B=0;Sa(1,pa|0,+(+p[(k[ka>>2]|0)+(qa<<3)>>3]))|0;qa=B;B=0;if(qa&1){oa=63;break a}B=0;wa(510,l|0,ea|0);qa=B;B=0;if(qa&1){oa=63;break a}B=0;ya(424,l|0)|0;qa=B;B=0;if(qa&1){oa=64;break a}Yua(l);k[j>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ia);Ava(ea);vva(da);na=na+1|0}while((na|0)<(k[N>>2]|0))}k[m>>2]=27524;k[Y>>2]=27544;B=0;wa(508,_|0,Z|0);na=B;B=0;if(na&1){oa=70;break}k[$>>2]=0;k[aa>>2]=-1;k[m>>2]=27468;k[Y>>2]=27488;B=0;va(448,Z|0);na=B;B=0;if(na&1){oa=71;break}k[Z>>2]=27560;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[ca>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Z|0,c|0);na=B;B=0;if(na&1){oa=69;break}Yua(c);B=0;Ia(40,m|0,67092,3)|0;na=B;B=0;if(na&1){oa=78;break}B=0;wa(510,n|0,Z|0);na=B;B=0;if(na&1){oa=78;break}B=0;ya(424,n|0)|0;na=B;B=0;if(na&1){oa=79;break}Yua(n);k[m>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(ba);Ava(Z);vva(Y);la=la+1|0;if((la|0)>=(k[M>>2]|0)){oa=81;break}}switch(oa|0){case 32:{M=Rb()|0;la=Q;Yua(c);Yua(W);Ava(O);ra=la;sa=M;oa=35;break}case 33:{M=Rb()|0;ta=Q;ua=M;vva(P);Qb(ua|0);break}case 34:{M=Rb()|0;ra=Q;sa=M;oa=35;break}case 44:{M=Rb()|0;la=Q;Yua(c);Yua(ia);Ava(ea);xa=la;za=M;oa=47;break}case 45:{M=Rb()|0;Aa=Q;Ba=M;vva(da);Qb(Ba|0);break}case 46:{M=Rb()|0;xa=Q;za=M;oa=47;break}case 60:{M=Rb()|0;Ca=Q;Da=M;oa=62;break}case 61:{M=Rb()|0;la=Q;Yua(i);Ca=la;Da=M;oa=62;break}case 63:{M=Rb()|0;Ea=Q;Fa=M;oa=65;break}case 64:{M=Rb()|0;la=Q;Yua(l);Ea=la;Fa=M;oa=65;break}case 69:{M=Rb()|0;la=Q;Yua(c);Yua(ba);Ava(Z);Ga=la;Ha=M;oa=72;break}case 70:{M=Rb()|0;Ja=Q;Ka=M;vva(Y);Qb(Ka|0);break}case 71:{M=Rb()|0;Ga=Q;Ha=M;oa=72;break}case 78:{M=Rb()|0;La=Q;Ma=M;oa=80;break}case 79:{M=Rb()|0;la=Q;Yua(n);La=la;Ma=M;oa=80;break}case 81:{r=b;return}}if((oa|0)==35){ta=ra;ua=sa;vva(P);Qb(ua|0)}else if((oa|0)==47){Aa=xa;Ba=za;vva(da);Qb(Ba|0)}else if((oa|0)==62){k[h>>2]=27468;k[P>>2]=27488;k[O>>2]=27560;Yua(W);Ava(O);vva(P);Na=Ca;Oa=Da;Qb(Oa|0)}else if((oa|0)==65){k[j>>2]=27468;k[da>>2]=27488;k[ea>>2]=27560;Yua(ia);Ava(ea);vva(da);Na=Ea;Oa=Fa;Qb(Oa|0)}else if((oa|0)==72){Ja=Ga;Ka=Ha;vva(Y);Qb(Ka|0)}else if((oa|0)==80){k[m>>2]=27468;k[Y>>2]=27488;k[Z>>2]=27560;Yua(ba);Ava(Z);vva(Y);Na=La;Oa=Ma;Qb(Oa|0)}}else oa=57;while(0);if((oa|0)==57){K=Rb()|0;R=Q;S=K}k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);Na=R;Oa=S;Qb(Oa|0)}while(0);F=I;G=J;vva(z);Qb(G|0)}else oa=54;while(0);if((oa|0)==54){y=Rb()|0;C=Q;D=y}k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Na=C;Oa=D;Qb(Oa|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}function kk(a){a=a|0;return -1}function lk(a){a=a|0;return 762}function mk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,l=0;b=Qqa(40)|0;c=k[a+4>>2]|0;B=0;d=Xa(240,k[a+8>>2]|0,1)|0;e=B;B=0;do if(!(e&1)?(f=k[a+12>>2]|0,g=k[a+16>>2]|0,h=k[a+20>>2]|0,i=k[a+24>>2]|0,j=+p[a+32>>3],k[b>>2]=27964,k[b+4>>2]=c,l=b+16|0,k[l>>2]=g,g=b+20|0,k[g>>2]=h,B=0,wa(512,b+8|0,d|0),h=B,B=0,!(h&1)):0){k[b+24>>2]=i;p[b+32>>3]=j;i=ma(k[g>>2]|0,k[l>>2]|0)|0;if(!i){k[b+12>>2]=0;return b|0}B=0;l=ya(422,(i>>>0>536870911?-1:i<<3)|0)|0;g=B;B=0;if(!(g&1)){k[b+12>>2]=l;if(!f){B=0;ib(283,142353,68290,137,142345);B=0;break}TEa(l|0,f|0,i<<3|0)|0;return b|0}}while(0);d=Rb()|0;Sqa(b);Qb(d|0);return 0}function nk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;n=Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0;switch(d|0){case 0:{d=k[b>>2]|0;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;d=a+4|0;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;d=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=d;i[o+1>>0]=d>>8;i[o+2>>0]=d>>16;i[o+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;o=a+16|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;d=a+20|0;q=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[n>>0]=q;i[n+1>>0]=q>>8;i[n+2>>0]=q>>16;i[n+3>>0]=q>>24;q=(k[b>>2]|0)+4|0;k[b>>2]=q;n=a+12|0;s=(k[n>>2]|0)==0;i[q>>0]=s&1;q=(k[b>>2]|0)+1|0;k[b>>2]=q;if(s)u=q;else{TEa(q|0,k[n>>2]|0,ma(k[o>>2]<<3,k[d>>2]|0)|0)|0;n=ma(k[o>>2]<<3,k[d>>2]|0)|0;d=(k[b>>2]|0)+n|0;k[b>>2]=d;u=d}d=a+24|0;n=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[u>>0]=n;i[u+1>>0]=n>>8;i[u+2>>0]=n>>16;i[u+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;u=a+32|0;d=u;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;d=u+4|0;u=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;d=n;n=d;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=d+4|0;i[o>>0]=u;i[o+1>>0]=u>>8;i[o+2>>0]=u>>16;i[o+3>>0]=u>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}case 2:{u=(k[a+12>>2]|0)==0;o=(k[c>>2]|0)+21|0;k[c>>2]=o;if(u)v=o;else{u=(ma(k[a+16>>2]<<3,k[a+20>>2]|0)|0)+o|0;k[c>>2]=u;v=u}k[c>>2]=v+12;r=e;return}case 1:{v=(k[b>>2]|0)+4|0;k[b>>2]=v;c=a+4|0;u=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[c>>0]=u;i[c+1>>0]=u>>8;i[c+2>>0]=u>>16;i[c+3>>0]=u>>24;u=(k[b>>2]|0)+4|0;k[b>>2]=u;c=a+8|0;v=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[c>>0]=v;i[c+1>>0]=v>>8;i[c+2>>0]=v>>16;i[c+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;c=a+16|0;u=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[c>>0]=u;i[c+1>>0]=u>>8;i[c+2>>0]=u>>16;i[c+3>>0]=u>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;v=a+20|0;o=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[v>>0]=o;i[v+1>>0]=o>>8;i[v+2>>0]=o>>16;i[v+3>>0]=o>>24;v=k[b>>2]|0;c=v+4|0;k[b>>2]=c;d=i[c>>0]|0;c=v+5|0;k[b>>2]=c;if(!(d&1)){d=ma(o,u)|0;v=Rqa(d>>>0>536870911?-1:d<<3)|0;k[a+12>>2]=v;d=k[b>>2]|0;n=ma(u<<3,o)|0;TEa(v|0,d|0,n|0)|0;v=d+n|0;k[b>>2]=v;w=v}else w=c;c=a+24|0;v=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[c>>0]=v;i[c+1>>0]=v>>8;i[c+2>>0]=v>>16;i[c+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;c=a+32|0;i[t>>0]=i[v>>0];i[t+1>>0]=i[v+1>>0];i[t+2>>0]=i[v+2>>0];i[t+3>>0]=i[v+3>>0];i[t+4>>0]=i[v+4>>0];i[t+5>>0]=i[v+5>>0];i[t+6>>0]=i[v+6>>0];i[t+7>>0]=i[v+7>>0];p[t>>3]=+p[t>>3];i[c>>0]=i[t>>0];i[c+1>>0]=i[t+1>>0];i[c+2>>0]=i[t+2>>0];i[c+3>>0]=i[t+3>>0];i[c+4>>0]=i[t+4>>0];i[c+5>>0]=i[t+5>>0];i[c+6>>0]=i[t+6>>0];i[c+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;x=Q;y=c;vva(e);Qb(y|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);c=B;B=0;do if(c&1){v=Rb()|0;z=Q;A=v}else{k[b>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;Yua(f);Yua(v);Ava(b);z=w;A=a;break}Yua(f);B=0;a=Ia(40,g|0,143951,43)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,66769,96);w=B;B=0;do if(!(w&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;d=Q;Yua(h);C=d;D=n;break}B=0;wa(510,m|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;E=Q;F=n;G=1}else{B=0;ua(163,a|0,h|0,j|0,438,m|0);n=B;B=0;if(n&1)H=1;else{B=0;eb(503,a|0,1240,229);B=0;H=0}n=Rb()|0;d=Q;Yua(m);E=d;F=n;G=H}Yua(j);Yua(h);if(G){C=E;D=F}else{I=E;J=F;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(e);Qb(J|0)}}else{n=Rb()|0;C=Q;D=n}while(0);zb(a|0);I=C;J=D;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(e);Qb(J|0)}w=Rb()|0;I=Q;J=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(v);Ava(b);vva(e);Qb(J|0)}while(0);x=z;y=A;vva(e);Qb(y|0)}}}function ok(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d;i=d+8|0;if((vY()|0)!=0&c){r=d;return}c=a+8|0;j=(Lta(k[c>>2]|0)|0)+1|0;k[i>>2]=j;jta(i,4,1,b)|0;jta(k[c>>2]|0,k[i>>2]|0,1,b)|0;p[h>>3]=+p[a+32>>3];jta(h,8,1,b)|0;jta(a+24|0,4,1,b)|0;k[e>>2]=3;jta(e,4,1,b)|0;k[f>>2]=k[a+16>>2];jta(f,4,1,b)|0;k[g>>2]=k[a+20>>2];jta(g,4,1,b)|0;jta(k[a+12>>2]|0,ma(k[g>>2]<<3,k[f>>2]|0)|0,1,b)|0;r=d;return}function pk(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,68290,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function qk(a){a=a|0;return k[a+24>>2]|0}function rk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,108833,37)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,66769,96);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,108997,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,197,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function sk(a){a=a|0;return zY(k[a+8>>2]|0,0)|0}function tk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,109048,17)|0;x=B;B=0;do if(((!(x&1)?(B=0,y=Xa(242,w|0,k[a+4>>2]|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Ia(40,y|0,149177,1)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,n|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,109066,17)|0;K=B;B=0;do if(((!(K&1)?(L=k[a+8>>2]|0,M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,N|0,149177,1)|0,N=B,B=0,!(N&1)):0)?(B=0,wa(510,g|0,z|0),N=B,B=0,!(N&1)):0){B=0;ya(424,g|0)|0;N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(g);O=M;P=N;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);N=h+56|0;M=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,M|0);L=B;B=0;if(L&1){L=Rb()|0;R=Q;S=L;vva(N);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,M|0);L=B;B=0;do if(L&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,109084,17)|0;X=B;B=0;do if(X&1)Y=60;else{B=0;Z=Xa(242,W|0,k[a+24>>2]|0)|0;_=B;B=0;if(_&1){Y=60;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){Y=60;break}B=0;wa(510,i|0,M|0);Z=B;B=0;if(Z&1){Y=60;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(i);$=_;aa=Z;break}Yua(i);k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);Z=j+56|0;_=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,_|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(Z);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,j|0,109102,17)|0;ia=B;B=0;do if(!(ia&1)){B=0;ja=Sa(1,ha|0,+(+p[a+32>>3]))|0;ka=B;B=0;if(ka&1){Y=63;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){Y=63;break}B=0;wa(510,l|0,_|0);ja=B;B=0;if(ja&1){Y=63;break}B=0;ya(424,l|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(l);la=ka;ma=ja;break}else{Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);r=b;return}}else Y=63;while(0);if((Y|0)==63){ha=Rb()|0;la=Q;ma=ha}k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);na=la;oa=ma;Qb(oa|0)}while(0);ca=fa;da=ga;vva(Z);Qb(da|0)}while(0);if((Y|0)==60){W=Rb()|0;$=Q;aa=W}k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);na=$;oa=aa;Qb(oa|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}else Y=57;while(0);if((Y|0)==57){J=Rb()|0;O=Q;P=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);na=O;oa=P;Qb(oa|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=54;while(0);if((Y|0)==54){w=Rb()|0;A=Q;C=w}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);na=A;oa=C;Qb(oa|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}function uk(a){a=a|0;var b=0,c=0;k[a>>2]=28388;b=a+8|0;if(!(k[b>>2]|0)){k[b>>2]=0;return}c=a+4|0;a=k[c>>2]|0;if(a)Tqa(a);k[c>>2]=0;k[b>>2]=0;return}function vk(a){a=a|0;var b=0;k[a>>2]=28388;if((k[a+8>>2]|0)!=0?(b=k[a+4>>2]|0,(b|0)!=0):0)Tqa(b);Sqa(a);return}function wk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;q=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(n);Ava(i);o=t;q=s;break}Yua(c);B=0;s=Ia(40,d|0,67321,16)|0;t=B;B=0;do if(((!(t&1)?(u=a+8|0,B=0,v=Xa(242,s|0,k[u>>2]|0)|0,w=B,B=0,!(w&1)):0)?(B=0,Ia(40,v|0,149177,1)|0,v=B,B=0,!(v&1)):0)?(B=0,wa(510,e|0,i|0),v=B,B=0,!(v&1)):0){B=0;ya(424,e|0)|0;v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(e);x=w;y=v;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);if((k[u>>2]|0)<=0){r=b;return}v=f+56|0;w=f+4|0;z=f+56|0;A=f+128|0;C=f+132|0;D=f+36|0;E=f+52|0;F=a+4|0;G=0;while(1){k[f>>2]=27524;k[v>>2]=27544;B=0;wa(508,z|0,w|0);H=B;B=0;if(H&1){I=20;break}k[A>>2]=0;k[C>>2]=-1;k[f>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);H=B;B=0;if(H&1){I=21;break}k[w>>2]=27560;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[E>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);H=B;B=0;if(H&1){I=19;break}Yua(c);B=0;H=Sa(1,f|0,+(+p[(k[F>>2]|0)+(G<<3)>>3]))|0;J=B;B=0;if(J&1){I=32;break}B=0;Ia(40,H|0,67338,2)|0;H=B;B=0;if(H&1){I=32;break}B=0;wa(510,g|0,w|0);H=B;B=0;if(H&1){I=32;break}B=0;ya(424,g|0)|0;H=B;B=0;if(H&1){I=33;break}Yua(g);k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(v);G=G+1|0;if((G|0)>=(k[u>>2]|0)){I=35;break}}if((I|0)==19){u=Rb()|0;G=Q;Yua(c);Yua(D);Ava(w);K=G;L=u;I=22}else if((I|0)==20){u=Rb()|0;M=Q;N=u;vva(v);Qb(N|0)}else if((I|0)==21){u=Rb()|0;K=Q;L=u;I=22}else if((I|0)==32){u=Rb()|0;O=Q;P=u;I=34}else if((I|0)==33){u=Rb()|0;G=Q;Yua(g);O=G;P=u;I=34}else if((I|0)==35){r=b;return}if((I|0)==22){M=K;N=L;vva(v);Qb(N|0)}else if((I|0)==34){k[f>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(D);Ava(w);vva(v);R=O;S=P;Qb(S|0)}}else I=29;while(0);if((I|0)==29){s=Rb()|0;x=Q;y=s}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);R=x;S=y;Qb(S|0)}while(0);l=o;m=q;vva(h);Qb(m|0)}function xk(a){a=a|0;return}function yk(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;switch(e|0){case 1:{if((b|0)<=0){r=f;return}e=k[a+4>>2]|0;m=0;do{n=e+(k[c+(m<<2)>>2]<<3)|0;p[n>>3]=+p[d+(m<<3)>>3]+ +p[n>>3];m=m+1|0}while((m|0)!=(b|0));r=f;return}case 0:{if((b|0)<=0){r=f;return}m=k[a+4>>2]|0;a=0;do{p[m+(k[c+(a<<2)>>2]<<3)>>3]=+p[d+(a<<3)>>3];a=a+1|0}while((a|0)!=(b|0));r=f;return}default:{f=h+56|0;b=h+4|0;k[h>>2]=27524;k[f>>2]=27544;B=0;wa(508,h+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;o=Q;q=a;vva(f);Qb(q|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[f>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){d=Rb()|0;s=Q;t=d}else{k[b>>2]=27560;d=h+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,b|0,g|0);c=B;B=0;if(c&1){c=Rb()|0;m=Q;Yua(g);Yua(d);Ava(b);s=m;t=c;break}Yua(g);B=0;c=Ia(40,h|0,68373,20)|0;m=B;B=0;if(!(m&1)?(B=0,Xa(239,c|0,0)|0,c=B,B=0,!(c&1)):0){c=Ab(20)|0;B=0;eb(502,i|0,67221,99);m=B;B=0;do if(!(m&1)){B=0;eb(502,j|0,68510,9);e=B;B=0;if(e&1){e=Rb()|0;n=Q;Yua(i);u=n;v=e;break}B=0;wa(510,l|0,b|0);e=B;B=0;if(e&1){e=Rb()|0;w=Q;x=e;y=1}else{B=0;ua(163,c|0,i|0,j|0,109,l|0);e=B;B=0;if(e&1)z=1;else{B=0;eb(503,c|0,1240,229);B=0;z=0}e=Rb()|0;n=Q;Yua(l);w=n;x=e;y=z}Yua(j);Yua(i);if(y){u=w;v=x}else{A=w;C=x;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(f);Qb(C|0)}}else{e=Rb()|0;u=Q;v=e}while(0);zb(c|0);A=u;C=v;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(f);Qb(C|0)}m=Rb()|0;A=Q;C=m;k[h>>2]=27468;k[f>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(f);Qb(C|0)}while(0);o=s;q=t;vva(f);Qb(q|0)}}}function zk(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;switch(d|0){case 1:{d=(k[a+4>>2]|0)+(b<<3)|0;p[d>>3]=+p[d>>3]+c;r=e;return}case 0:{p[(k[a+4>>2]|0)+(b<<3)>>3]=c;r=e;return}default:{e=g+56|0;b=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;l=Q;m=a;vva(e);Qb(m|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){d=Rb()|0;n=Q;o=d}else{k[b>>2]=27560;d=g+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(f);Yua(d);Ava(b);n=s;o=q;break}Yua(f);B=0;q=Ia(40,g|0,68373,20)|0;s=B;B=0;if(!(s&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,h|0,67221,99);s=B;B=0;do if(!(s&1)){B=0;eb(502,i|0,86106,8);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(h);v=u;w=t;break}B=0;wa(510,j|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,h|0,i|0,125,j|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(j);x=u;y=t;z=A}Yua(i);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(D|0)}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(D|0)}s=Rb()|0;C=Q;D=s;k[g>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(d);Ava(b);vva(e);Qb(D|0)}while(0);l=n;m=o;vva(e);Qb(m|0)}}}function Ak(a,b,c){a=a|0;b=b|0;c=c|0;p[b>>3]=+p[(k[a+4>>2]|0)+(c<<3)>>3];return}function Bk(a,b){a=a|0;b=b|0;k[b>>2]=k[a+8>>2];return}function Ck(a,b){a=a|0;b=b|0;k[b>>2]=k[a+8>>2];return}function Dk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=Qqa(12)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;k[b>>2]=28388;k[b+8>>2]=d;a=b+4|0;k[a>>2]=0;if(!d)return b|0;B=0;e=ya(422,(d>>>0>536870911?-1:d<<3)|0)|0;f=B;B=0;if(f&1){g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}k[a>>2]=e;if(!c){B=0;ib(283,142353,68290,137,142345);B=0;g=Rb()|0;h=Q;Sqa(b);Qb(g|0)}else{TEa(e|0,c|0,d<<3|0)|0;return b|0}return 0}function Ek(a,b){a=a|0;b=+b;var c=0,d=0;c=k[a+8>>2]|0;if((c|0)<=0)return;d=k[a+4>>2]|0;a=0;do{p[d+(a<<3)>>3]=b;a=a+1|0}while((a|0)<(c|0));return}function Fk(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;d=k[a+8>>2]|0;if((d|0)<=0)return;e=k[b+4>>2]|0;b=k[a+4>>2]|0;a=0;do{f=b+(a<<3)|0;p[f>>3]=+p[e+(a<<3)>>3]*c+ +p[f>>3];a=a+1|0}while((a|0)<(d|0));return}function Gk(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;d=k[a+8>>2]|0;if((d|0)<=0)return;e=k[b+4>>2]|0;b=k[a+4>>2]|0;a=0;do{f=b+(a<<3)|0;p[f>>3]=+p[e+(a<<3)>>3]+ +p[f>>3]*c;a=a+1|0}while((a|0)<(d|0));return}function Hk(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+8>>2]|0;if(!b){c=0;return c|0}d=Rqa(b>>>0>536870911?-1:b<<3)|0;e=k[a+4>>2]|0;if(!e)yb(142353,68290,137,142345);TEa(d|0,e|0,b<<3|0)|0;c=d;return c|0}function Ik(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=k[a+8>>2]|0;if((c|0)<=0)return;d=k[a+4>>2]|0;a=0;do{e=d+(a<<3)|0;p[e>>3]=+p[e>>3]+b;a=a+1|0}while((a|0)<(c|0));return}function Jk(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+8|0;k[b+8>>2]=k[c>>2];d=k[c>>2]|0;if((d|0)<=0)return;c=k[a+4>>2]|0;a=k[b+4>>2]|0;b=0;do{p[a+(b<<3)>>3]=+p[c+(b<<3)>>3];b=b+1|0}while((b|0)<(d|0));return}function Kk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0.0,j=0,l=0,m=0.0,n=0.0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{b=a+8|0;if((k[b>>2]|0)<=0){i=0.0;r=c;return +i}j=a+4|0;l=0;m=0.0;while(1){n=+LY(m,+p[(k[j>>2]|0)+(l<<3)>>3]);l=l+1|0;if((l|0)>=(k[b>>2]|0)){i=n;break}else m=n}r=c;return +i}case 1:{b=k[a+8>>2]|0;if((b|0)>0){l=k[a+4>>2]|0;a=0;m=0.0;while(1){n=+p[l+(a<<3)>>3];o=m+n*n;a=a+1|0;if((a|0)>=(b|0)){q=o;break}else m=o}}else q=0.0;i=+aa(+q);r=c;return +i}default:{c=e+56|0;b=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;s=Q;t=a;vva(c);Qb(t|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);a=B;B=0;do if(a&1){l=Rb()|0;u=Q;v=l}else{k[b>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;Yua(d);Yua(l);Ava(b);u=w;v=j;break}Yua(d);B=0;j=Ia(40,e|0,68622,14)|0;w=B;B=0;if(!(w&1)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,f|0,67221,99);w=B;B=0;do if(!(w&1)){B=0;eb(502,g|0,68637,4);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(f);z=y;A=x;break}B=0;wa(510,h|0,b|0);x=B;B=0;if(x&1){x=Rb()|0;C=Q;D=x;E=1}else{B=0;ua(163,j|0,f|0,g|0,238,h|0);x=B;B=0;if(x&1)F=1;else{B=0;eb(503,j|0,1240,229);B=0;F=0}x=Rb()|0;y=Q;Yua(h);C=y;D=x;E=F}Yua(g);Yua(f);if(E){z=C;A=D}else{G=C;H=D;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(H|0)}}else{x=Rb()|0;z=Q;A=x}while(0);zb(j|0);G=z;H=A;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(H|0)}w=Rb()|0;G=Q;H=w;k[e>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(c);Qb(H|0)}while(0);s=u;t=v;vva(c);Qb(t|0)}}return +(0.0)}function Lk(a,b){a=a|0;b=+b;var c=0,d=0,e=0;c=k[a+8>>2]|0;if((c|0)<=0)return;d=k[a+4>>2]|0;a=0;do{e=d+(a<<3)|0;p[e>>3]=+p[e>>3]*b;a=a+1|0}while((a|0)<(c|0));return}function Mk(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0.0,g=0.0;c=k[a+8>>2]|0;if((c|0)<=0){d=0.0;return +d}e=k[a+4>>2]|0;a=k[b+4>>2]|0;f=0.0;b=0;while(1){g=f+ +p[e+(b<<3)>>3]*+p[a+(b<<3)>>3];b=b+1|0;if((b|0)>=(c|0)){d=g;break}else f=g}return +d}function Nk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=k[a+8>>2]|0;if((d|0)<=0)return;e=k[b+4>>2]|0;b=k[c+4>>2]|0;c=k[a+4>>2]|0;a=0;do{p[c+(a<<3)>>3]=+p[e+(a<<3)>>3]/+p[b+(a<<3)>>3];a=a+1|0}while((a|0)<(d|0));return}function Ok(a){a=a|0;var b=0;k[a>>2]=27904;b=a+8|0;a=k[b>>2]|0;if(a)Tqa(a);k[b>>2]=0;return}function Pk(a){a=a|0;var b=0;k[a>>2]=27904;b=k[a+8>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function Qk(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function Rk(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;b=r;r=r+320|0;c=b+300|0;d=b+152|0;e=b+288|0;f=b+16|0;g=b;h=d+56|0;i=d+4|0;k[d>>2]=27524;k[h>>2]=27544;B=0;wa(508,d+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(h);Qb(m|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[h>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;q=n}else{k[i>>2]=27560;n=d+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,i|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(c);Yua(n);Ava(i);o=t;q=s;break}Yua(c);B=0;Ia(40,d|0,67528,31)|0;s=B;B=0;do if(!(s&1)?(B=0,wa(510,e|0,i|0),t=B,B=0,!(t&1)):0){B=0;ya(424,e|0)|0;t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(e);v=u;w=t;break}Yua(e);k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);al(a);t=f+56|0;u=f+4|0;k[f>>2]=27524;k[t>>2]=27544;B=0;wa(508,f+56|0,u|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(t);Qb(z|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[u>>2]=27560;A=f+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(u);C=F;D=E;break}Yua(c);B=0;E=Ia(40,f|0,109037,10)|0;F=B;B=0;do if(((!(F&1)?(B=0,G=Sa(1,E|0,+(+p[a+16>>3]))|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,G|0,149177,1)|0,G=B,B=0,!(G&1)):0)?(B=0,wa(510,g|0,u|0),G=B,B=0,!(G&1)):0){B=0;ya(424,g|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(g);I=H;J=G;break}else{Yua(g);k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(A);Ava(u);vva(t);r=b;return}}else K=29;while(0);if((K|0)==29){E=Rb()|0;I=Q;J=E}k[f>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(A);Ava(u);vva(t);L=I;M=J;Qb(M|0)}while(0);y=C;z=D;vva(t);Qb(z|0)}else K=26;while(0);if((K|0)==26){s=Rb()|0;v=Q;w=s}k[d>>2]=27468;k[h>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(h);L=v;M=w;Qb(M|0)}while(0);l=o;m=q;vva(h);Qb(m|0)}function Sk(a){a=a|0;return -1}function Tk(a){a=a|0;return 761}function Uk(a){a=a|0;var b=0,c=0,d=0,e=0.0,f=0,g=0.0,h=0,i=0;b=Qqa(48)|0;c=k[a+4>>2]|0;d=k[a+8>>2]|0;e=+p[a+16>>3];f=k[a+32>>2]|0;g=+p[a+40>>3];k[b>>2]=27904;k[b+4>>2]=c;p[b+16>>3]=e;k[b+32>>2]=f;p[b+40>>3]=g;k[b+24>>2]=1;k[b+28>>2]=1;f=(Lta(d)|0)+1|0;B=0;c=ya(422,f|0)|0;f=B;B=0;if(f&1){h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}k[b+8>>2]=c;f=(Lta(d)|0)+1|0;if(!d){B=0;ib(283,142353,68290,137,142345);B=0;h=Rb()|0;i=Q;Sqa(b);Qb(h|0)}if(!f)return b|0;TEa(c|0,d|0,f|0)|0;return b|0}function Vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$k(a,b,c,d);return}function Wk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c+8|0;e=c+24|0;f=c+20|0;g=c+16|0;h=c;if(vY()|0){r=c;return}i=a+8|0;j=(Lta(k[i>>2]|0)|0)+1|0;k[e>>2]=j;jta(e,4,1,b)|0;jta(k[i>>2]|0,k[e>>2]|0,1,b)|0;p[d>>3]=+p[a+40>>3];jta(d,8,1,b)|0;jta(a+32|0,4,1,b)|0;k[f>>2]=1;k[g>>2]=1;jta(f,4,1,b)|0;jta(g,4,1,b)|0;p[h>>3]=+p[a+16>>3];jta(h,k[g>>2]<<3,1,b)|0;r=c;return}function Xk(a){a=a|0;var b=0,c=0;b=k[a+8>>2]|0;a=Rqa((Lta(b)|0)+1|0)|0;c=(Lta(b)|0)+1|0;if(!b)yb(142353,68290,137,142345);if(!c)return a|0;TEa(a|0,b|0,c|0)|0;return a|0}function Yk(a){a=a|0;return k[a+32>>2]|0}function Zk(a){a=a|0;return +(+p[a+16>>3])}function _k(a){a=a|0;return zY(k[a+8>>2]|0,0)|0}function $k(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;e=r;r=r+528|0;f=e+516|0;g=e+368|0;h=e+504|0;j=e+356|0;m=e+344|0;n=e+208|0;o=e+60|0;q=e+48|0;s=e+36|0;u=e+72|0;v=e+24|0;w=e+12|0;x=e;y=Hc[k[(k[a>>2]|0)+20>>2]&511](a)|0;z=(d|0)==0;a:do if(z){A=k[b>>2]|0;i[A>>0]=y;i[A+1>>0]=y>>8;i[A+2>>0]=y>>16;i[A+3>>0]=y>>24;A=(k[b>>2]|0)+4|0;k[b>>2]=A;C=+p[a+16>>3]==0.0&1;D=a+4|0;E=l[D>>0]|l[D+1>>0]<<8|l[D+2>>0]<<16|l[D+3>>0]<<24;i[A>>0]=E;i[A+1>>0]=E>>8;i[A+2>>0]=E>>16;i[A+3>>0]=E>>24;E=(k[b>>2]|0)+4|0;k[b>>2]=E;A=a+8|0;D=l[A>>0]|l[A+1>>0]<<8|l[A+2>>0]<<16|l[A+3>>0]<<24;i[E>>0]=D;i[E+1>>0]=D>>8;i[E+2>>0]=D>>16;i[E+3>>0]=D>>24;D=(k[b>>2]|0)+4|0;k[b>>2]=D;i[D>>0]=C;k[b>>2]=(k[b>>2]|0)+1;F=0;G=C}else switch(d|0){case 2:{C=k[c>>2]|0;k[c>>2]=C+4;D=+p[a+16>>3]==0.0&1;k[c>>2]=C+13;F=1;G=D;break a;break}case 1:{D=(k[b>>2]|0)+4|0;k[b>>2]=D;C=a+4|0;E=l[D>>0]|l[D+1>>0]<<8|l[D+2>>0]<<16|l[D+3>>0]<<24;i[C>>0]=E;i[C+1>>0]=E>>8;i[C+2>>0]=E>>16;i[C+3>>0]=E>>24;E=(k[b>>2]|0)+4|0;k[b>>2]=E;C=a+8|0;D=l[E>>0]|l[E+1>>0]<<8|l[E+2>>0]<<16|l[E+3>>0]<<24;i[C>>0]=D;i[C+1>>0]=D>>8;i[C+2>>0]=D>>16;i[C+3>>0]=D>>24;D=k[b>>2]|0;C=D+4|0;k[b>>2]=C;E=i[C>>0]|0;k[b>>2]=D+5;F=0;G=E&1;break a;break}default:{E=g+56|0;D=g+4|0;k[g>>2]=27524;k[E>>2]=27544;B=0;wa(508,g+56|0,D|0);C=B;B=0;if(C&1){C=Rb()|0;H=Q;I=C;vva(E);Qb(I|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[E>>2]=27488;B=0;va(448,D|0);C=B;B=0;do if(C&1){A=Rb()|0;J=Q;K=A}else{k[D>>2]=27560;A=g+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,D|0,f|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(f);Yua(A);Ava(D);J=M;K=L;break}Yua(f);B=0;L=Ia(40,g|0,143951,43)|0;M=B;B=0;b:do if(!(M&1)?(B=0,Xa(239,L|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,h|0,66769,96);O=B;B=0;do if(!(O&1)){B=0;eb(502,j|0,67512,15);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(h);S=R;T=P;break}B=0;wa(510,m|0,D|0);P=B;B=0;if(P&1){P=Rb()|0;U=Q;V=P;W=1}else{B=0;ua(163,N|0,h|0,j|0,57,m|0);P=B;B=0;if(P&1)X=1;else{B=0;eb(503,N|0,1240,229);B=0;X=0}P=Rb()|0;R=Q;Yua(m);U=R;V=P;W=X}Yua(j);Yua(h);if(W){S=U;T=V}else{Y=U;Z=V;break b}}else{P=Rb()|0;S=Q;T=P}while(0);zb(N|0);Y=S;Z=T}else _=18;while(0);if((_|0)==18){L=Rb()|0;Y=Q;Z=L}k[g>>2]=27468;k[E>>2]=27488;k[D>>2]=27560;Yua(A);Ava(D);vva(E);$=Y;aa=Z;Qb(aa|0)}while(0);H=J;I=K;vva(E);Qb(I|0)}}while(0);do if(!(G<<24>>24)){if(z){I=a+16|0;K=I;J=l[K>>0]|l[K+1>>0]<<8|l[K+2>>0]<<16|l[K+3>>0]<<24;K=I+4|0;I=l[K>>0]|l[K+1>>0]<<8|l[K+2>>0]<<16|l[K+3>>0]<<24;K=k[b>>2]|0;H=K;i[H>>0]=J;i[H+1>>0]=J>>8;i[H+2>>0]=J>>16;i[H+3>>0]=J>>24;J=K+4|0;i[J>>0]=I;i[J+1>>0]=I>>8;i[J+2>>0]=I>>16;i[J+3>>0]=I>>24;I=(k[b>>2]|0)+8|0;k[b>>2]=I;ba=I;_=88;break}if(F){I=(k[c>>2]|0)+8|0;k[c>>2]=I;ca=I;_=89;break}if((d|0)==1){I=a+16|0;J=k[b>>2]|0;i[t>>0]=i[J>>0];i[t+1>>0]=i[J+1>>0];i[t+2>>0]=i[J+2>>0];i[t+3>>0]=i[J+3>>0];i[t+4>>0]=i[J+4>>0];i[t+5>>0]=i[J+5>>0];i[t+6>>0]=i[J+6>>0];i[t+7>>0]=i[J+7>>0];p[t>>3]=+p[t>>3];i[I>>0]=i[t>>0];i[I+1>>0]=i[t+1>>0];i[I+2>>0]=i[t+2>>0];i[I+3>>0]=i[t+3>>0];i[I+4>>0]=i[t+4>>0];i[I+5>>0]=i[t+5>>0];i[I+6>>0]=i[t+6>>0];i[I+7>>0]=i[t+7>>0];I=(k[b>>2]|0)+8|0;k[b>>2]=I;da=I;_=90;break}I=n+56|0;J=n+4|0;k[n>>2]=27524;k[I>>2]=27544;B=0;wa(508,n+56|0,J|0);K=B;B=0;if(K&1){K=Rb()|0;ea=Q;fa=K;vva(I);Qb(fa|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);K=B;B=0;do if(K&1){H=Rb()|0;ga=Q;ha=H}else{k[J>>2]=27560;H=n+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,J|0,f|0);Z=B;B=0;if(Z&1){Z=Rb()|0;Y=Q;Yua(f);Yua(H);Ava(J);ga=Y;ha=Z;break}Yua(f);B=0;Z=Ia(40,n|0,143951,43)|0;Y=B;B=0;c:do if(!(Y&1)?(B=0,Xa(239,Z|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,o|0,66769,96);T=B;B=0;do if(!(T&1)){B=0;eb(502,q|0,67512,15);S=B;B=0;if(S&1){S=Rb()|0;V=Q;Yua(o);ia=V;ja=S;break}B=0;wa(510,s|0,J|0);S=B;B=0;if(S&1){S=Rb()|0;ka=Q;la=S;ma=1}else{B=0;ua(163,g|0,o|0,q|0,65,s|0);S=B;B=0;if(S&1)na=1;else{B=0;eb(503,g|0,1240,229);B=0;na=0}S=Rb()|0;V=Q;Yua(s);ka=V;la=S;ma=na}Yua(q);Yua(o);if(ma){ia=ka;ja=la}else{oa=ka;pa=la;break c}}else{S=Rb()|0;ia=Q;ja=S}while(0);zb(g|0);oa=ia;pa=ja}else _=51;while(0);if((_|0)==51){Z=Rb()|0;oa=Q;pa=Z}k[n>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(H);Ava(J);vva(I);$=oa;aa=pa;Qb(aa|0)}while(0);ea=ga;fa=ha;vva(I);Qb(fa|0)}else{p[a+16>>3]=0.0;if(z){ba=k[b>>2]|0;_=88;break}if(F){ca=k[c>>2]|0;_=89;break}if((d|0)==1){da=k[b>>2]|0;_=90;break}J=u+56|0;K=u+4|0;k[u>>2]=27524;k[J>>2]=27544;B=0;wa(508,u+56|0,K|0);E=B;B=0;if(E&1){E=Rb()|0;qa=Q;ra=E;vva(J);Qb(ra|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);E=B;B=0;do if(E&1){Z=Rb()|0;sa=Q;ta=Z}else{k[K>>2]=27560;Z=u+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[u+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,K|0,f|0);Y=B;B=0;if(Y&1){Y=Rb()|0;A=Q;Yua(f);Yua(Z);Ava(K);sa=A;ta=Y;break}Yua(f);B=0;Y=Ia(40,u|0,143951,43)|0;A=B;B=0;d:do if(!(A&1)?(B=0,Xa(239,Y|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,v|0,66769,96);N=B;B=0;do if(!(N&1)){B=0;eb(502,w|0,67512,15);S=B;B=0;if(S&1){S=Rb()|0;V=Q;Yua(v);xa=V;ya=S;break}B=0;wa(510,x|0,K|0);S=B;B=0;if(S&1){S=Rb()|0;za=1;Aa=Q;Ba=S}else{B=0;ua(163,T|0,v|0,w|0,66,x|0);S=B;B=0;if(S&1)Ca=1;else{B=0;eb(503,T|0,1240,229);B=0;Ca=0}S=Rb()|0;V=Q;Yua(x);za=Ca;Aa=V;Ba=S}Yua(w);Yua(v);if(za){xa=Aa;ya=Ba}else{Da=Aa;Ea=Ba;break d}}else{S=Rb()|0;xa=Q;ya=S}while(0);zb(T|0);Da=xa;Ea=ya}else _=80;while(0);if((_|0)==80){Y=Rb()|0;Da=Q;Ea=Y}k[u>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(Z);Ava(K);vva(J);$=Da;aa=Ea;Qb(aa|0)}while(0);qa=sa;ra=ta;vva(J);Qb(ra|0)}while(0);if((_|0)==88){ra=a+32|0;ta=l[ra>>0]|l[ra+1>>0]<<8|l[ra+2>>0]<<16|l[ra+3>>0]<<24;i[ba>>0]=ta;i[ba+1>>0]=ta>>8;i[ba+2>>0]=ta>>16;i[ba+3>>0]=ta>>24;ta=(k[b>>2]|0)+4|0;k[b>>2]=ta;ba=a+40|0;ra=ba;sa=l[ra>>0]|l[ra+1>>0]<<8|l[ra+2>>0]<<16|l[ra+3>>0]<<24;ra=ba+4|0;ba=l[ra>>0]|l[ra+1>>0]<<8|l[ra+2>>0]<<16|l[ra+3>>0]<<24;ra=ta;ta=ra;i[ta>>0]=sa;i[ta+1>>0]=sa>>8;i[ta+2>>0]=sa>>16;i[ta+3>>0]=sa>>24;sa=ra+4|0;i[sa>>0]=ba;i[sa+1>>0]=ba>>8;i[sa+2>>0]=ba>>16;i[sa+3>>0]=ba>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}else if((_|0)==89){k[c>>2]=ca+12;r=e;return}else if((_|0)==90){_=a+32|0;ca=l[da>>0]|l[da+1>>0]<<8|l[da+2>>0]<<16|l[da+3>>0]<<24;i[_>>0]=ca;i[_+1>>0]=ca>>8;i[_+2>>0]=ca>>16;i[_+3>>0]=ca>>24;ca=(k[b>>2]|0)+4|0;k[b>>2]=ca;_=a+40|0;i[t>>0]=i[ca>>0];i[t+1>>0]=i[ca+1>>0];i[t+2>>0]=i[ca+2>>0];i[t+3>>0]=i[ca+3>>0];i[t+4>>0]=i[ca+4>>0];i[t+5>>0]=i[ca+5>>0];i[t+6>>0]=i[ca+6>>0];i[t+7>>0]=i[ca+7>>0];p[t>>3]=+p[t>>3];i[_>>0]=i[t>>0];i[_+1>>0]=i[t+1>>0];i[_+2>>0]=i[t+2>>0];i[_+3>>0]=i[t+3>>0];i[_+4>>0]=i[t+4>>0];i[_+5>>0]=i[t+5>>0];i[_+6>>0]=i[t+6>>0];i[_+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}}function al(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;s=o;vva(m);Qb(s|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){t=Rb()|0;u=Q;v=t}else{k[n>>2]=27560;t=d+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(n);u=x;v=w;break}Yua(c);B=0;w=Ia(40,d|0,109048,17)|0;x=B;B=0;do if(((!(x&1)?(B=0,y=Xa(242,w|0,k[a+4>>2]|0)|0,z=B,B=0,!(z&1)):0)?(B=0,Ia(40,y|0,149177,1)|0,y=B,B=0,!(y&1)):0)?(B=0,wa(510,e|0,n|0),y=B,B=0,!(y&1)):0){B=0;ya(424,e|0)|0;y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);A=z;C=y;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;F=D;vva(y);Qb(F|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);D=B;B=0;do if(D&1){G=Rb()|0;H=Q;I=G}else{k[z>>2]=27560;G=f+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,z|0,c|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(c);Yua(G);Ava(z);H=K;I=J;break}Yua(c);B=0;J=Ia(40,f|0,109066,17)|0;K=B;B=0;do if(((!(K&1)?(L=k[a+8>>2]|0,M=Lta(L)|0,B=0,N=Ia(40,J|0,L|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,N|0,149177,1)|0,N=B,B=0,!(N&1)):0)?(B=0,wa(510,g|0,z|0),N=B,B=0,!(N&1)):0){B=0;ya(424,g|0)|0;N=B;B=0;if(N&1){N=Rb()|0;M=Q;Yua(g);O=M;P=N;break}Yua(g);k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);N=h+56|0;M=h+4|0;k[h>>2]=27524;k[N>>2]=27544;B=0;wa(508,h+56|0,M|0);L=B;B=0;if(L&1){L=Rb()|0;R=Q;S=L;vva(N);Qb(S|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[N>>2]=27488;B=0;va(448,M|0);L=B;B=0;do if(L&1){T=Rb()|0;U=Q;V=T}else{k[M>>2]=27560;T=h+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Yua(c);Yua(T);Ava(M);U=X;V=W;break}Yua(c);B=0;W=Ia(40,h|0,109084,17)|0;X=B;B=0;do if(X&1)Y=60;else{B=0;Z=Xa(242,W|0,k[a+32>>2]|0)|0;_=B;B=0;if(_&1){Y=60;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){Y=60;break}B=0;wa(510,i|0,M|0);Z=B;B=0;if(Z&1){Y=60;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(i);$=_;aa=Z;break}Yua(i);k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);Z=j+56|0;_=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,_|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva(Z);Qb(da|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[_>>2]=27560;ea=j+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(c);Yua(ea);Ava(_);fa=ia;ga=ha;break}Yua(c);B=0;ha=Ia(40,j|0,109102,17)|0;ia=B;B=0;do if(!(ia&1)){B=0;ja=Sa(1,ha|0,+(+p[a+40>>3]))|0;ka=B;B=0;if(ka&1){Y=63;break}B=0;Ia(40,ja|0,149177,1)|0;ja=B;B=0;if(ja&1){Y=63;break}B=0;wa(510,l|0,_|0);ja=B;B=0;if(ja&1){Y=63;break}B=0;ya(424,l|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(l);la=ka;ma=ja;break}else{Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);r=b;return}}else Y=63;while(0);if((Y|0)==63){ha=Rb()|0;la=Q;ma=ha}k[j>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ea);Ava(_);vva(Z);na=la;oa=ma;Qb(oa|0)}while(0);ca=fa;da=ga;vva(Z);Qb(da|0)}while(0);if((Y|0)==60){W=Rb()|0;$=Q;aa=W}k[h>>2]=27468;k[N>>2]=27488;k[M>>2]=27560;Yua(T);Ava(M);vva(N);na=$;oa=aa;Qb(oa|0)}while(0);R=U;S=V;vva(N);Qb(S|0)}else Y=57;while(0);if((Y|0)==57){J=Rb()|0;O=Q;P=J}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(G);Ava(z);vva(y);na=O;oa=P;Qb(oa|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}else Y=54;while(0);if((Y|0)==54){w=Rb()|0;A=Q;C=w}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(t);Ava(n);vva(m);na=A;oa=C;Qb(oa|0)}while(0);q=u;s=v;vva(m);Qb(s|0)}function bl(a){a=a|0;Sqa(a);return}function cl(a){a=a|0;Kl(a);return}function dl(a){a=a|0;return 554}function el(a){a=a|0;var b=0,c=0,d=0;b=Qqa(12)|0;k[b>>2]=27752;c=a+4|0;a=k[c+4>>2]|0;d=b+4|0;k[d>>2]=k[c>>2];k[d+4>>2]=a;return b|0}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;d=r;r=r+176|0;c=d+152|0;b=d+16|0;e=d;f=b+56|0;g=b+4|0;k[b>>2]=27524;k[f>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(f);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[f>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,66629,22)|0;p=B;B=0;if((((!(p&1)?(B=0,p=ya(427,k[a+8>>2]|0)|0,q=B,B=0,!(q&1)):0)?(q=Lta(p)|0,B=0,s=Ia(40,o|0,p|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,Ia(40,s|0,66652,44)|0,s=B,B=0,!(s&1)):0)?(B=0,wa(510,e|0,g|0),s=B,B=0,!(s&1)):0){B=0;ya(424,e|0)|0;s=B;B=0;if(!(s&1)){Yua(e);k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);r=d;return}s=Rb()|0;q=Q;Yua(e);t=q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}s=Rb()|0;t=Q;u=s;k[b>>2]=27468;k[f>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(f);Qb(u|0)}while(0);i=m;j=n;vva(f);Qb(j|0)}function gl(a){a=a|0;return k[a+8>>2]|0}function hl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86577,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function il(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85796,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function jl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function kl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85760,35)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function ll(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86549,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ml(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+192|0;d=b+176|0;e=b+40|0;f=b+24|0;g=b+12|0;h=b;b=e+56|0;i=e+4|0;k[e>>2]=27524;k[b>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(b);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[b>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,86504,44)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86325,17);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,72,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[b>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(b);Qb(D|0)}while(0);l=o;m=p;vva(b);Qb(m|0)}function nl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86480,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,73,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ol(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86450,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,74,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function pl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,75,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function ql(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86416,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,76,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function rl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85695,29)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,77,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function sl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86364,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,78,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function tl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86343,20)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,79,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function ul(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85673,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,80,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function vl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85648,24)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86325,17);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,81,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function wl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82197,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,83,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function xl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85601,23)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,84,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function yl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(c);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,86115,6)|0;s=B;B=0;if((((!(s&1)?(B=0,s=ya(427,k[a+8>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,82170,26)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,66550,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,86106,8);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(f);v=q;w=s;break}B=0;wa(510,h|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,f|0,g|0,87,h|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(h);x=q;y=s;z=A}Yua(g);Yua(f);if(z){v=x;w=y}else{C=x;D=y;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(c);Qb(D|0)}while(0);l=o;m=p;vva(c);Qb(m|0)}function zl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86273,21)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,88,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Al(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86245,27)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,89,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Bl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,90,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function Cl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86213,31)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,91,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Dl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;b=c+176|0;d=c+40|0;e=c+24|0;f=c+12|0;g=c;c=d+56|0;h=d+4|0;k[d>>2]=27524;k[c>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,85,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function El(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;e=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,82144,25)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,86,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(C|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function Fl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86169,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,92,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Gl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,86150,18)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,93,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Hl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85465,19)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(e);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,e|0,f|0,94,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(e);if(y){u=w;v=x}else{A=w;C=x;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(C|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Il(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;f=e+12|0;g=e;e=c+56|0;h=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(e);Qb(l|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=c+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,h|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(h);n=q;o=p;break}Yua(d);B=0;p=Ia(40,c|0,86115,6)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,k[a+8>>2]|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,85340,33)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,b|0,66550,78);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,86106,8);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(b);u=p;v=q;break}B=0;wa(510,g|0,h|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,b|0,f|0,95,g|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(g);w=p;x=q;y=z}Yua(f);Yua(b);if(y){u=w;v=x}else{A=w;C=x;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[c>>2]=27468;k[e>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(e);Qb(C|0)}while(0);j=n;l=o;vva(e);Qb(l|0)}function Jl(a,b){a=a|0;b=b|0;k[a+8>>2]=b;return}function Kl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=r;r=r+464|0;c=b+452|0;d=b+304|0;e=b+440|0;f=b+152|0;g=b+288|0;h=b+16|0;i=b;j=d+56|0;l=d+4|0;k[d>>2]=27524;k[j>>2]=27544;B=0;wa(508,d+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=d+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,d|0,66697,14)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,e|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(424,e|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}Yua(e);k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);u=f+56|0;v=f+4|0;k[f>>2]=27524;k[u>>2]=27544;B=0;wa(508,f+56|0,v|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;A=y;vva(u);Qb(A|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);y=B;B=0;do if(y&1){C=Rb()|0;D=Q;E=C}else{k[v>>2]=27560;C=f+36|0;k[C>>2]=0;k[C+4>>2]=0;k[C+8>>2]=0;k[C+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(c);Yua(C);Ava(v);D=G;E=F;break}Yua(c);B=0;F=Ia(40,f|0,66712,10)|0;G=B;B=0;do if((((((!(G&1)?(H=a+8|0,B=0,I=Xa(242,F|0,k[H>>2]|0)|0,J=B,B=0,!(J&1)):0)?(B=0,J=Ia(40,I|0,144166,2)|0,I=B,B=0,!(I&1)):0)?(B=0,I=ya(427,k[H>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(I)|0,B=0,K=Ia(40,J|0,I|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,K|0,145593,2)|0,K=B,B=0,!(K&1)):0)?(B=0,wa(510,g|0,v|0),K=B,B=0,!(K&1)):0){B=0;ya(424,g|0)|0;K=B;B=0;if(K&1){K=Rb()|0;H=Q;Yua(g);L=H;M=K;break}Yua(g);k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);K=h+56|0;H=h+4|0;k[h>>2]=27524;k[K>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;N=Q;O=I;vva(K);Qb(O|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[K>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){J=Rb()|0;P=Q;R=J}else{k[H>>2]=27560;J=h+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(J);Ava(H);P=T;R=S;break}Yua(c);B=0;S=Ia(40,h|0,109037,10)|0;T=B;B=0;do if(!(T&1)){B=0;U=Xa(242,S|0,k[a+4>>2]|0)|0;V=B;B=0;if(V&1){W=48;break}B=0;Ia(40,U|0,149177,1)|0;U=B;B=0;if(U&1){W=48;break}B=0;wa(510,i|0,H|0);U=B;B=0;if(U&1){W=48;break}B=0;ya(424,i|0)|0;U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(i);X=V;Y=U;break}else{Yua(i);k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);r=b;return}}else W=48;while(0);if((W|0)==48){S=Rb()|0;X=Q;Y=S}k[h>>2]=27468;k[K>>2]=27488;k[H>>2]=27560;Yua(J);Ava(H);vva(K);Z=X;_=Y;Qb(_|0)}while(0);N=P;O=R;vva(K);Qb(O|0)}else W=45;while(0);if((W|0)==45){F=Rb()|0;L=Q;M=F}k[f>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(C);Ava(v);vva(u);Z=L;_=M;Qb(_|0)}while(0);z=D;A=E;vva(u);Qb(A|0)}else W=42;while(0);if((W|0)==42){t=Rb()|0;w=Q;x=t}k[d>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Z=w;_=x;Qb(_|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}function Ll(a){a=a|0;var b=0;k[a>>2]=28476;k[a+4>>2]=-9999;b=a+8|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;return}function Ml(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;k[a>>2]=28476;k[a+4>>2]=b;k[a+8>>2]=0;k[a+16>>2]=0;B=0;b=ya(423,36)|0;c=B;B=0;if(c&1){c=Rb()|0;d=Q;e=c;Qb(e|0)}B=0;va(486,b|0);c=B;B=0;if(!(c&1)){k[a+12>>2]=b;k[a+20>>2]=0;return}a=Rb()|0;c=Q;Sqa(b);d=c;e=a;Qb(e|0)}function Nl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;k[a>>2]=28476;k[a+4>>2]=b;k[a+8>>2]=d;B=0;b=ya(422,(d>>>0>536870911?-1:d<<3)|0)|0;e=B;B=0;do if(!(e&1)){k[a+16>>2]=b;if(!c){B=0;ib(283,142353,77590,137,142345);B=0;break}if(d)TEa(b|0,c|0,d<<3|0)|0;B=0;f=ya(423,36)|0;g=B;B=0;if(!(g&1)){B=0;va(486,f|0);g=B;B=0;if(!(g&1)){k[a+12>>2]=f;k[a+20>>2]=0;return}g=Rb()|0;h=Q;Sqa(f);i=h;j=g;Qb(j|0)}}while(0);a=Rb()|0;i=Q;j=a;Qb(j|0)}function Ol(a){a=a|0;var b=0,c=0;k[a>>2]=28476;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;k[a+8>>2]=0;k[a+20>>2]=0;b=k[a+12>>2]|0;if(!b)return;jC(b);Sqa(b);return}function Pl(a){a=a|0;var b=0,c=0;k[a>>2]=28476;b=a+16|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;k[a+8>>2]=0;k[a+20>>2]=0;b=k[a+12>>2]|0;if(!b){Sqa(a);return}jC(b);Sqa(b);Sqa(a);return}function Ql(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function Rl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0;b=r;r=r+768|0;c=b+752|0;d=b+592|0;e=b+740|0;f=b+456|0;g=b+728|0;h=b+304|0;i=b+440|0;j=b+152|0;l=b+288|0;m=b+16|0;n=b;o=d+56|0;q=d+4|0;k[d>>2]=27524;k[o>>2]=27544;B=0;wa(508,d+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=d+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(c);Yua(v);Ava(q);w=z;x=y;break}Yua(c);B=0;Ia(40,d|0,67622,16)|0;y=B;B=0;do if(!(y&1)?(B=0,wa(510,e|0,q|0),z=B,B=0,!(z&1)):0){B=0;ya(424,e|0)|0;z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(e);C=A;D=z;break}Yua(e);k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);z=f+56|0;A=f+4|0;k[f>>2]=27524;k[z>>2]=27544;B=0;wa(508,f+56|0,A|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;G=E;vva(z);Qb(G|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[z>>2]=27488;B=0;va(448,A|0);E=B;B=0;do if(E&1){H=Rb()|0;I=Q;J=H}else{k[A>>2]=27560;H=f+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,A|0,c|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;Yua(c);Yua(H);Ava(A);I=L;J=K;break}Yua(c);B=0;K=Ia(40,f|0,85228,9)|0;L=B;B=0;do if((((((!(L&1)?(M=a+4|0,B=0,N=Xa(242,K|0,k[M>>2]|0)|0,O=B,B=0,!(O&1)):0)?(B=0,O=Ia(40,N|0,144166,2)|0,N=B,B=0,!(N&1)):0)?(B=0,N=ya(427,k[M>>2]|0)|0,M=B,B=0,!(M&1)):0)?(M=Lta(N)|0,B=0,P=Ia(40,O|0,N|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,Ia(40,P|0,145593,2)|0,P=B,B=0,!(P&1)):0)?(B=0,wa(510,g|0,A|0),P=B,B=0,!(P&1)):0){B=0;ya(424,g|0)|0;P=B;B=0;if(P&1){P=Rb()|0;M=Q;Yua(g);R=M;S=P;break}Yua(g);k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);P=h+56|0;M=h+4|0;k[h>>2]=27524;k[P>>2]=27544;B=0;wa(508,h+56|0,M|0);N=B;B=0;if(N&1){N=Rb()|0;T=Q;U=N;vva(P);Qb(U|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[P>>2]=27488;B=0;va(448,M|0);N=B;B=0;do if(N&1){O=Rb()|0;V=Q;W=O}else{k[M>>2]=27560;O=h+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,M|0,c|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(c);Yua(O);Ava(M);V=Y;W=X;break}Yua(c);B=0;X=Ia(40,h|0,67639,17)|0;Y=B;B=0;do if(Y&1)Z=74;else{_=a+8|0;B=0;$=Xa(242,X|0,k[_>>2]|0)|0;aa=B;B=0;if(aa&1){Z=74;break}B=0;Ia(40,$|0,149177,1)|0;$=B;B=0;if($&1){Z=74;break}B=0;wa(510,i|0,M|0);$=B;B=0;if($&1){Z=74;break}B=0;ya(424,i|0)|0;$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(i);ba=aa;ca=$;break}Yua(i);k[h>>2]=27468;k[P>>2]=27488;k[M>>2]=27560;Yua(O);Ava(M);vva(P);$=j+56|0;aa=j+4|0;k[j>>2]=27524;k[$>>2]=27544;B=0;wa(508,j+56|0,aa|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva($);Qb(fa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[$>>2]=27488;B=0;va(448,aa|0);da=B;B=0;do if(da&1){ga=Rb()|0;ha=Q;ia=ga}else{k[aa>>2]=27560;ga=j+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,aa|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(c);Yua(ga);Ava(aa);ha=ka;ia=ja;break}Yua(c);B=0;Ia(40,j|0,67657,12)|0;ja=B;B=0;do if(!(ja&1)){B=0;wa(510,l|0,aa|0);ka=B;B=0;if(ka&1){Z=77;break}B=0;ya(424,l|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(l);ma=la;na=ka;break}Yua(l);k[j>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva($);if((k[_>>2]|0)<=0){r=b;return}ka=m+56|0;la=m+4|0;oa=m+56|0;pa=m+128|0;qa=m+132|0;ra=m+36|0;sa=m+52|0;ta=a+16|0;ua=a+12|0;xa=0;while(1){k[m>>2]=27524;k[ka>>2]=27544;B=0;wa(508,oa|0,la|0);za=B;B=0;if(za&1){Z=58;break}k[pa>>2]=0;k[qa>>2]=-1;k[m>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);za=B;B=0;if(za&1){Z=59;break}k[la>>2]=27560;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[sa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,la|0,c|0);za=B;B=0;if(za&1){Z=57;break}Yua(c);B=0;za=Ia(40,m|0,67670,9)|0;Aa=B;B=0;if(Aa&1){Z=80;break}B=0;Aa=Sa(1,za|0,+(+p[(k[ta>>2]|0)+(xa<<3)>>3]))|0;za=B;B=0;if(za&1){Z=80;break}B=0;Ia(40,Aa|0,67680,2)|0;Aa=B;B=0;if(Aa&1){Z=80;break}B=0;wa(510,n|0,la|0);Aa=B;B=0;if(Aa&1){Z=80;break}B=0;ya(424,n|0)|0;Aa=B;B=0;if(Aa&1){Z=81;break}Yua(n);k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);Aa=qh(k[ua>>2]|0,xa)|0;Ec[k[(k[Aa>>2]|0)+8>>2]&1023](Aa);xa=xa+1|0;if((xa|0)>=(k[_>>2]|0)){Z=83;break}}if((Z|0)==57){xa=Rb()|0;ua=Q;Yua(c);Yua(ra);Ava(la);Ba=ua;Ca=xa;Z=60}else if((Z|0)==58){xa=Rb()|0;Da=Q;Ea=xa;vva(ka);Qb(Ea|0)}else if((Z|0)==59){xa=Rb()|0;Ba=Q;Ca=xa;Z=60}else if((Z|0)==80){xa=Rb()|0;Fa=Q;Ga=xa;Z=82}else if((Z|0)==81){xa=Rb()|0;ua=Q;Yua(n);Fa=ua;Ga=xa;Z=82}else if((Z|0)==83){r=b;return}if((Z|0)==60){Da=Ba;Ea=Ca;vva(ka);Qb(Ea|0)}else if((Z|0)==82){k[m>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(ra);Ava(la);vva(ka);Ha=Fa;Ja=Ga;Qb(Ja|0)}}else Z=77;while(0);if((Z|0)==77){ja=Rb()|0;ma=Q;na=ja}k[j>>2]=27468;k[$>>2]=27488;k[aa>>2]=27560;Yua(ga);Ava(aa);vva($);Ha=ma;Ja=na;Qb(Ja|0)}while(0);ea=ha;fa=ia;vva($);Qb(fa|0)}while(0);if((Z|0)==74){X=Rb()|0;ba=Q;ca=X}k[h>>2]=27468;k[P>>2]=27488;k[M>>2]=27560;Yua(O);Ava(M);vva(P);Ha=ba;Ja=ca;Qb(Ja|0)}while(0);T=V;U=W;vva(P);Qb(U|0)}else Z=71;while(0);if((Z|0)==71){K=Rb()|0;R=Q;S=K}k[f>>2]=27468;k[z>>2]=27488;k[A>>2]=27560;Yua(H);Ava(A);vva(z);Ha=R;Ja=S;Qb(Ja|0)}while(0);F=I;G=J;vva(z);Qb(G|0)}else Z=68;while(0);if((Z|0)==68){y=Rb()|0;C=Q;D=y}k[d>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);Ha=C;Ja=D;Qb(Ja|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}function Sl(a){a=a|0;return -1}function Tl(a){a=a|0;return 697}function Ul(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(24)|0;k[b>>2]=28476;c=b+8|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[b+4>>2]=k[a+4>>2];d=k[a+8>>2]|0;k[c>>2]=d;c=Rqa(d>>>0>536870911?-1:d<<3)|0;k[b+16>>2]=c;e=k[a+16>>2]|0;if(!e)yb(142353,77590,137,142345);if(d){f=0;do{p[c+(f<<3)>>3]=+p[e+(f<<3)>>3];f=f+1|0}while((f|0)!=(d|0))}d=hh(k[a+12>>2]|0)|0;k[b+12>>2]=d;k[b+20>>2]=k[a+20>>2];return b|0}function Vl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 1:{n=Qqa(36)|0;B=0;va(486,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Sqa(n);q=o;s=p;Qb(q|0)}k[a+12>>2]=n;n=(k[b>>2]|0)+4|0;k[b>>2]=n;p=a+4|0;o=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[p>>0]=o;i[p+1>>0]=o>>8;i[p+2>>0]=o>>16;i[p+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+8|0;n=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[p>>0]=n;i[p+1>>0]=n>>8;i[p+2>>0]=n>>16;i[p+3>>0]=n>>24;p=k[b>>2]|0;o=p+4|0;k[b>>2]=o;t=i[o>>0]|0;k[b>>2]=p+5;if(t&1){u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}t=Rqa(n>>>0>536870911?-1:n<<3)|0;k[a+16>>2]=t;p=k[b>>2]|0;o=n<<3;TEa(t|0,p|0,o|0)|0;k[b>>2]=p+o;u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}case 0:{o=k[b>>2]|0;i[o>>0]=185;i[o+1>>0]=2;i[o+2>>0]=0;i[o+3>>0]=0;o=(k[b>>2]|0)+4|0;k[b>>2]=o;p=a+4|0;t=l[p>>0]|l[p+1>>0]<<8|l[p+2>>0]<<16|l[p+3>>0]<<24;i[o>>0]=t;i[o+1>>0]=t>>8;i[o+2>>0]=t>>16;i[o+3>>0]=t>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;o=a+8|0;p=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[t>>0]=p;i[t+1>>0]=p>>8;i[t+2>>0]=p>>16;i[t+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;t=a+16|0;n=(k[t>>2]|0)==0;i[p>>0]=n&1;p=(k[b>>2]|0)+1|0;k[b>>2]=p;if(n){u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}TEa(p|0,k[t>>2]|0,k[o>>2]<<3|0)|0;k[b>>2]=(k[b>>2]|0)+(k[o>>2]<<3);u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}case 2:{o=(k[a+16>>2]|0)==0;t=(k[c>>2]|0)+13|0;k[c>>2]=t;if(o){u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}k[c>>2]=t+(k[a+8>>2]<<3);u=a+12|0;v=k[u>>2]|0;lh(v,b,c,d);r=e;return}default:{e=g+56|0;d=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,d|0);c=B;B=0;if(c&1){c=Rb()|0;w=Q;x=c;vva(e);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,d|0);c=B;B=0;do if(c&1){b=Rb()|0;y=Q;z=b}else{k[d>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,d|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;u=Q;Yua(f);Yua(b);Ava(d);y=u;z=v;break}Yua(f);B=0;v=Ia(40,g|0,143951,43)|0;u=B;B=0;a:do if(!(u&1)?(B=0,Xa(239,v|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,67683,80);t=B;B=0;do if(!(t&1)){B=0;eb(502,j|0,149525,8);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(h);A=o;C=p;break}B=0;wa(510,m|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;D=p;E=Q;F=1}else{B=0;ua(163,a|0,h|0,j|0,110,m|0);p=B;B=0;if(p&1)G=1;else{B=0;eb(503,a|0,1240,229);B=0;G=0}p=Rb()|0;o=Q;Yua(m);D=p;E=o;F=G}Yua(j);Yua(h);if(F){A=D;C=E}else{H=D;I=E;break a}}else{o=Rb()|0;A=o;C=Q}while(0);zb(a|0);H=A;I=C}else J=19;while(0);if((J|0)==19){v=Rb()|0;H=v;I=Q}k[g>>2]=27468;k[e>>2]=27488;k[d>>2]=27560;Yua(b);Ava(d);vva(e);q=H;s=I;Qb(q|0)}while(0);w=y;x=z;vva(e);Qb(x|0)}}}function Wl(a){a=a|0;return k[a+4>>2]|0}function Xl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Qqa(24)|0;k[e>>2]=28476;f=e+8|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[e+4>>2]=k[a+4>>2];g=k[a+8>>2]|0;k[f>>2]=g;f=Rqa(g>>>0>536870911?-1:g<<3)|0;k[e+16>>2]=f;h=k[a+16>>2]|0;if(!h)yb(142353,77590,137,142345);if(g){i=0;do{p[f+(i<<3)>>3]=+p[h+(i<<3)>>3];i=i+1|0}while((i|0)!=(g|0))}g=uC(k[a+12>>2]|0,b,c,d)|0;k[e+12>>2]=g;k[e+20>>2]=k[a+20>>2];return e|0}function Yl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=Qqa(24)|0;k[d>>2]=28476;e=d+8|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[d+4>>2]=k[a+4>>2];f=k[a+8>>2]|0;k[e>>2]=f;e=Rqa(f>>>0>536870911?-1:f<<3)|0;k[d+16>>2]=e;g=k[a+16>>2]|0;if(!g)yb(142353,77590,137,142345);if(f){h=0;do{p[e+(h<<3)>>3]=+p[g+(h<<3)>>3];h=h+1|0}while((h|0)!=(f|0))}f=vC(k[a+12>>2]|0,b,c)|0;k[d+12>>2]=f;k[d+20>>2]=k[a+20>>2];return d|0}function Zl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;dO(k[a+20>>2]|0,e,767);f=_l(a,+p[e>>3])|0;nd[k[(k[f>>2]|0)+48>>2]&1023](f,b,c);if(!f){r=d;return}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);r=d;return}function _l(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0.0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0;c=r;r=r+16|0;d=c;bO(k[a+20>>2]|0,d,359);e=k[a+16>>2]|0;f=k[a+8>>2]|0;g=f+-1|0;if(!(+p[e>>3]>b)){h=+p[e+(g<<3)>>3];a:do if(!(h<=b)){j=0;l=(f|0)/2|0;m=g;while(1){n=l;o=m;while(1){q=+p[e+(n<<3)>>3];if(q<=b?+p[e+(n+1<<3)>>3]>b:0){s=q;t=n;break a}if(!(q>b)){u=n;v=o;break}w=n;n=((n-j|0)/2|0)+j|0;o=w}j=u;l=((v-u|0)/2|0)+u|0;m=v}}else{s=h;t=g}while(0);if((t|0)!=-1)if((t|0)==(g|0)|(i[d>>0]|0)==0){d=qh(k[a+12>>2]|0,t)|0;x=Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0;r=c;return x|0}else{d=t+1|0;h=(b-s)/(+p[e+(d<<3)>>3]-s);e=a+12|0;g=qh(k[e>>2]|0,t)|0;t=qh(k[e>>2]|0,d)|0;d=Hc[k[(k[g>>2]|0)+24>>2]&511](g)|0;Cc[k[(k[d>>2]|0)+120>>2]&63](d,1.0-h);Xc[k[(k[d>>2]|0)+124>>2]&63](d,t,h);x=d;r=c;return x|0}}d=qh(k[a+12>>2]|0,0)|0;x=Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0;r=c;return x|0}function $l(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0;e=_l(a,d)|0;nd[k[(k[e>>2]|0)+48>>2]&1023](e,b,c);if(!e)return;Ec[k[(k[e>>2]|0)+4>>2]&1023](e);return}function am(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=r;r=r+16|0;f=e;dO(k[a+20>>2]|0,f,767);g=_l(a,+p[f>>3])|0;rd[k[(k[g>>2]|0)+60>>2]&511](g,b,c,d);if(!g){r=e;return}Ec[k[(k[g>>2]|0)+4>>2]&1023](g);r=e;return}function bm(a,b){a=a|0;b=b|0;k[a+4>>2]=b;return}function cm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c;dO(k[a+20>>2]|0,d,767);e=_l(a,+p[d>>3])|0;Fc[k[(k[e>>2]|0)+64>>2]&1023](e,b);if(!e){r=c;return}Ec[k[(k[e>>2]|0)+4>>2]&1023](e);r=c;return}function dm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=a+8|0;f=k[e>>2]|0;g=f>>>0>536870911?-1:f<<3;h=Rqa(g)|0;i=Rqa(g)|0;if((f|0)<=0){j=f;k[b>>2]=i;k[c>>2]=h;k[d>>2]=j;return}f=a+12|0;g=a+16|0;a=0;do{l=qh(k[f>>2]|0,a)|0;Fc[k[(k[l>>2]|0)+64>>2]&1023](l,i+(a<<3)|0);p[h+(a<<3)>>3]=+p[(k[g>>2]|0)+(a<<3)>>3];a=a+1|0;l=k[e>>2]|0}while((a|0)<(l|0));j=l;k[b>>2]=i;k[c>>2]=h;k[d>>2]=j;return}function em(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0.0,m=0,n=0,o=0,q=0,r=0,s=0,t=0.0;f=a+8|0;g=k[f>>2]|0;a:do if((g|0)>0){h=k[a+16>>2]|0;i=0;j=0;while(1){l=+p[h+(i<<3)>>3];m=j|l==e;if(l>e){n=m;o=i;break a}q=i+1|0;if((q|0)<(g|0)){i=q;j=m}else{n=m;o=q;break}}}else{n=0;o=0}while(0);g=(n&1^1)+o|0;o=g>>>0>536870911?-1:g<<3;j=Rqa(o)|0;i=Rqa(o)|0;if((g|0)<=0){k[b>>2]=i;k[c>>2]=j;r=k[f>>2]|0;k[d>>2]=r;return}o=g+-1|0;h=a+12|0;q=a+16|0;if(n){n=0;do{m=qh(k[h>>2]|0,n)|0;Fc[k[(k[m>>2]|0)+64>>2]&1023](m,i+(n<<3)|0);p[j+(n<<3)>>3]=+p[(k[q>>2]|0)+(n<<3)>>3];n=n+1|0}while((n|0)!=(g|0));k[b>>2]=i;k[c>>2]=j;r=k[f>>2]|0;k[d>>2]=r;return}n=i+(o<<3)|0;m=0;do{if((m|0)==(o|0)){s=_l(a,e)|0;Fc[k[(k[s>>2]|0)+64>>2]&1023](s,n);t=e}else{s=qh(k[h>>2]|0,m)|0;Fc[k[(k[s>>2]|0)+64>>2]&1023](s,i+(m<<3)|0);t=+p[(k[q>>2]|0)+(m<<3)>>3]}p[j+(m<<3)>>3]=t;m=m+1|0}while((m|0)!=(g|0));k[b>>2]=i;k[c>>2]=j;r=k[f>>2]|0;k[d>>2]=r;return}function fm(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=a+8|0;l=k[j>>2]|0;do if((l|0)>0){m=a+16|0;n=k[m>>2]|0;if(!(+p[n+(l+-1<<3)>>3]>=c)){o=Rqa(l>>>0>536870911?-1:l<<3)|0;if(!n)yb(142353,77590,137,142345);else q=0;do{p[o+(q<<3)>>3]=+p[n+(q<<3)>>3];q=q+1|0}while((q|0)!=(l|0));Tqa(n);s=k[j>>2]|0;k[m>>2]=0;t=m;u=s;v=o;break}s=f+56|0;w=f+4|0;k[f>>2]=27524;k[s>>2]=27544;B=0;wa(508,f+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(s);Qb(z|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[s>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=f+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,w|0,e|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);Yua(A);Ava(w);C=F;D=E;break}Yua(e);B=0;E=Ia(40,f|0,67764,42)|0;F=B;B=0;if(!(F&1)?(B=0,Xa(239,E|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,g|0,67683,80);F=B;B=0;do if(!(F&1)){B=0;eb(502,h|0,67807,12);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(g);I=H;J=G;break}B=0;wa(510,i|0,w|0);G=B;B=0;if(G&1){G=Rb()|0;K=Q;L=G;M=1}else{B=0;ua(163,E|0,g|0,h|0,297,i|0);G=B;B=0;if(G&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}G=Rb()|0;H=Q;Yua(i);K=H;L=G;M=N}Yua(h);Yua(g);if(M){I=K;J=L}else{O=K;P=L;k[f>>2]=27468;k[s>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(s);Qb(P|0)}}else{G=Rb()|0;I=Q;J=G}while(0);zb(E|0);O=I;P=J;k[f>>2]=27468;k[s>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(s);Qb(P|0)}F=Rb()|0;O=Q;P=F;k[f>>2]=27468;k[s>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(s);Qb(P|0)}while(0);y=C;z=D;vva(s);Qb(z|0)}else{t=a+16|0;u=l;v=0}while(0);l=u+1|0;k[j>>2]=l;z=Rqa(l>>>0>536870911?-1:l<<3)|0;k[t>>2]=z;if((u|0)<=0){R=l;S=z;T=R+-1|0;U=S+(T<<3)|0;p[U>>3]=c;V=a+12|0;W=k[V>>2]|0;ih(W,b)|0;r=d;return}if(!v)yb(142353,77590,137,142345);TEa(z|0,v|0,(l<<3)+-8|0)|0;Tqa(v);R=k[j>>2]|0;S=k[t>>2]|0;T=R+-1|0;U=S+(T<<3)|0;p[U>>3]=c;V=a+12|0;W=k[V>>2]|0;ih(W,b)|0;r=d;return}function gm(a,b){a=a|0;b=b|0;ih(k[a+12>>2]|0,b)|0;return}function hm(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;c=Hc[k[(k[d>>2]|0)+164>>2]&511](d)|0;if(!d){r=b;return c|0}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return c|0}function im(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;c=Hc[k[(k[d>>2]|0)+168>>2]&511](d)|0;if(!d){r=b;return c|0}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return c|0}function jm(a){a=a|0;return 1}function km(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+8|0;if((k[c>>2]|0)<=0)return;d=a+12|0;a=0;do{e=qh(k[d>>2]|0,a)|0;Fc[k[(k[e>>2]|0)+136>>2]&1023](e,b);a=a+1|0}while((a|0)<(k[c>>2]|0));return}function lm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;dO(c,e,767);f=_l(a,+p[e>>3])|0;nd[k[(k[f>>2]|0)+88>>2]&1023](f,b,c);if(!f){r=d;return}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);r=d;return}function mm(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;e=+Zc[k[(k[d>>2]|0)+96>>2]&255](d);if(!d){r=b;return +e}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return +e}function nm(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;e=+Zc[k[(k[d>>2]|0)+108>>2]&255](d);if(!d){r=b;return +e}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return +e}function om(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;e=+Zc[k[(k[d>>2]|0)+100>>2]&255](d);if(!d){r=b;return +e}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return +e}function pm(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;e=+Zc[k[(k[d>>2]|0)+112>>2]&255](d);if(!d){r=b;return +e}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return +e}function qm(a){a=a|0;var b=0,c=0,d=0,e=0.0;b=r;r=r+16|0;c=b;dO(k[a+20>>2]|0,c,767);d=_l(a,+p[c>>3])|0;e=+Zc[k[(k[d>>2]|0)+104>>2]&255](d);if(!d){r=b;return +e}Ec[k[(k[d>>2]|0)+4>>2]&1023](d);r=b;return +e}function rm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;dO(k[a+20>>2]|0,e,767);f=_l(a,+p[e>>3])|0;nd[k[(k[f>>2]|0)+140>>2]&1023](f,b,c);if(!f){r=d;return}Ec[k[(k[f>>2]|0)+4>>2]&1023](f);r=d;return}function sm(a,b){a=a|0;b=b|0;k[a+20>>2]=b;return}function tm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,55,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function um(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,56,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function vm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function wm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function xm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function ym(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,67827,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,68,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function zm(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,67827,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,69,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function Am(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,67827,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115194,5);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,70,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function Bm(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,67827,90);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121097,4);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,71,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function Cm(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;a=r;r=r+192|0;d=a+176|0;e=a+40|0;f=a+24|0;g=a+12|0;h=a;a=e+56|0;i=e+4|0;k[e>>2]=27524;k[a>>2]=27544;B=0;wa(508,e+56|0,i|0);j=B;B=0;if(j&1){j=Rb()|0;l=Q;m=j;vva(a);Qb(m|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[a>>2]=27488;B=0;va(448,i|0);j=B;B=0;do if(j&1){n=Rb()|0;o=Q;p=n}else{k[i>>2]=27560;n=e+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(d);Yua(n);Ava(i);o=s;p=q;break}Yua(d);B=0;q=Ia(40,e|0,149721,19)|0;s=B;B=0;a:do if(!(s&1)?(B=0,Xa(239,q|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,67827,90);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,118419,9);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,i|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,72,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;break a}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y}else G=16;while(0);if((G|0)==16){q=Rb()|0;E=Q;F=q}k[e>>2]=27468;k[a>>2]=27488;k[i>>2]=27560;Yua(n);Ava(i);vva(a);Qb(F|0)}while(0);l=o;m=p;vva(a);Qb(m|0)}function Dm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121304,19);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,79,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Em(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Fm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,47,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Gm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,46,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Hm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,67827,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,51,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Im(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,76054,90);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,70605,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,66,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function Jm(a){a=a|0;k[a>>2]=28668;i[a+32>>0]=0;k[a+4>>2]=-1;k[a+8>>2]=-1;k[a+12>>2]=-1;k[a+16>>2]=0;k[a+20>>2]=0;k[a+24>>2]=-1;k[a+28>>2]=-1;return}function Km(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0;k[a>>2]=28668;i[a+32>>0]=0;k[a+4>>2]=b;k[a+8>>2]=c;k[a+12>>2]=d;k[a+24>>2]=e;if(!e){j=a+28|0;k[j>>2]=h;return}d=e>>>0>536870911?-1:e<<3;c=Rqa(d)|0;k[a+16>>2]=c;b=Rqa(d)|0;k[a+20>>2]=b;if(!g)yb(142353,67933,137,142345);else l=0;do{p[c+(l<<3)>>3]=+p[g+(l<<3)>>3];l=l+1|0}while((l|0)!=(e|0));if(!f)yb(142353,67933,137,142345);else m=0;do{p[b+(m<<3)>>3]=+p[f+(m<<3)>>3];m=m+1|0}while((m|0)!=(e|0));j=a+28|0;k[j>>2]=h;return}function Lm(a){a=a|0;var b=0,c=0;k[a>>2]=28668;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+16|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function Mm(a){a=a|0;var b=0,c=0;k[a>>2]=28668;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+16>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function Nm(a){a=a|0;var b=0;b=Qqa(36)|0;B=0;Ka(11,b|0,k[a+4>>2]|0,k[a+8>>2]|0,k[a+12>>2]|0,k[a+24>>2]|0,k[a+20>>2]|0,k[a+16>>2]|0,k[a+28>>2]|0);a=B;B=0;if(a&1){a=Rb()|0;Sqa(b);Qb(a|0)}else return b|0;return 0}function Om(a){a=a|0;Ec[k[(k[a>>2]|0)+8>>2]&1023](a);return}
+-function b$(a){a=a|0;var b=0;k[a>>2]=36788;b=k[a+12>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+16>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+20>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+24>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+28>>2]|0;if(!b)return;Ec[k[(k[b>>2]|0)+4>>2]&1023](b);return}function c$(a){a=a|0;var b=0;k[a>>2]=36788;b=k[a+12>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+16>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+20>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+24>>2]|0;if(b)Ec[k[(k[b>>2]|0)+4>>2]&1023](b);b=k[a+28>>2]|0;if(!b){Sqa(a);return}Ec[k[(k[b>>2]|0)+4>>2]&1023](b);Sqa(a);return}function d$(a){a=a|0;Ec[k[(k[a>>2]|0)+12>>2]&1023](a);return}function e$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;b=r;r=r+1072|0;c=b+1052|0;d=b+880|0;e=b+1040|0;f=b+728|0;g=b+1028|0;h=b+592|0;i=b+1016|0;j=b+440|0;l=b+864|0;m=b+304|0;n=b+576|0;o=b+168|0;p=b+152|0;q=b+16|0;s=b;t=d+56|0;u=d+4|0;k[d>>2]=27524;k[t>>2]=27544;B=0;wa(508,d+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=d+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(c);Yua(y);Ava(u);z=D;A=C;break}Yua(c);B=0;Ia(40,d|0,114769,14)|0;C=B;B=0;do if(!(C&1)?(B=0,wa(510,e|0,u|0),D=B,B=0,!(D&1)):0){B=0;ya(424,e|0)|0;D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(e);F=E;G=D;break}Yua(e);k[d>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);D=f+56|0;E=f+4|0;k[f>>2]=27524;k[D>>2]=27544;B=0;wa(508,f+56|0,E|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;J=H;vva(D);Qb(J|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[D>>2]=27488;B=0;va(448,E|0);H=B;B=0;do if(H&1){K=Rb()|0;L=Q;M=K}else{k[E>>2]=27560;K=f+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(c);Yua(K);Ava(E);L=O;M=N;break}Yua(c);k[f+(k[(k[f>>2]|0)+-12>>2]|0)+12>>2]=15;B=0;N=Ia(40,f|0,114784,16)|0;O=B;B=0;do if((((!(O&1)?(k[N+(k[(k[N>>2]|0)+-12>>2]|0)+12>>2]=25,P=N+(k[(k[N>>2]|0)+-12>>2]|0)+4|0,k[P>>2]=k[P>>2]&-177|32,B=0,P=ya(427,k[a+4>>2]|0)|0,R=B,B=0,!(R&1)):0)?(R=Lta(P)|0,B=0,S=Ia(40,N|0,P|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,Ia(40,S|0,149177,1)|0,S=B,B=0,!(S&1)):0)?(B=0,wa(510,g|0,E|0),S=B,B=0,!(S&1)):0){B=0;ya(424,g|0)|0;S=B;B=0;if(S&1){S=Rb()|0;R=Q;Yua(g);T=R;U=S;break}Yua(g);k[f>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(D);S=h+56|0;R=h+4|0;k[h>>2]=27524;k[S>>2]=27544;B=0;wa(508,h+56|0,R|0);P=B;B=0;if(P&1){P=Rb()|0;V=Q;W=P;vva(S);Qb(W|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[S>>2]=27488;B=0;va(448,R|0);P=B;B=0;do if(P&1){X=Rb()|0;Y=Q;Z=X}else{k[R>>2]=27560;X=h+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,R|0,c|0);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(c);Yua(X);Ava(R);Y=$;Z=_;break}Yua(c);B=0;Ia(40,h|0,114801,12)|0;_=B;B=0;do if(_&1)aa=45;else{B=0;wa(510,i|0,R|0);$=B;B=0;if($&1){aa=45;break}B=0;ya(424,i|0)|0;$=B;B=0;if($&1){$=Rb()|0;ba=Q;Yua(i);ca=ba;da=$;break}Yua(i);k[h>>2]=27468;k[S>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(S);$=k[a+12>>2]|0;if($)Ec[k[(k[$>>2]|0)+8>>2]&1023]($);$=j+56|0;ba=j+4|0;k[j>>2]=27524;k[$>>2]=27544;B=0;wa(508,j+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;ga=ea;vva($);Qb(ga|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[$>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){ha=Rb()|0;ia=Q;ja=ha}else{k[ba>>2]=27560;ha=j+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(c);Yua(ha);Ava(ba);ia=la;ja=ka;break}Yua(c);B=0;Ia(40,j|0,114814,17)|0;ka=B;B=0;do if(ka&1)aa=61;else{B=0;wa(510,l|0,ba|0);la=B;B=0;if(la&1){aa=61;break}B=0;ya(424,l|0)|0;la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(l);na=ma;oa=la;break}Yua(l);k[j>>2]=27468;k[$>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva($);la=k[a+16>>2]|0;if(la)Ec[k[(k[la>>2]|0)+8>>2]&1023](la);la=m+56|0;ma=m+4|0;k[m>>2]=27524;k[la>>2]=27544;B=0;wa(508,m+56|0,ma|0);pa=B;B=0;if(pa&1){pa=Rb()|0;qa=Q;ra=pa;vva(la);Qb(ra|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[la>>2]=27488;B=0;va(448,ma|0);pa=B;B=0;do if(pa&1){sa=Rb()|0;ta=Q;ua=sa}else{k[ma>>2]=27560;sa=m+36|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(c);Yua(sa);Ava(ma);ta=za;ua=xa;break}Yua(c);B=0;Ia(40,m|0,114832,15)|0;xa=B;B=0;do if(xa&1)aa=77;else{B=0;wa(510,n|0,ma|0);za=B;B=0;if(za&1){aa=77;break}B=0;ya(424,n|0)|0;za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(n);Ba=Aa;Ca=za;break}Yua(n);k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);za=k[a+20>>2]|0;if(za)Ec[k[(k[za>>2]|0)+8>>2]&1023](za);za=o+56|0;Aa=o+4|0;k[o>>2]=27524;k[za>>2]=27544;B=0;wa(508,o+56|0,Aa|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Fa=Da;vva(za);Qb(Fa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[za>>2]=27488;B=0;va(448,Aa|0);Da=B;B=0;do if(Da&1){Ga=Rb()|0;Ha=Q;Ja=Ga}else{k[Aa>>2]=27560;Ga=o+36|0;k[Ga>>2]=0;k[Ga+4>>2]=0;k[Ga+8>>2]=0;k[Ga+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Aa|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;La=Q;Yua(c);Yua(Ga);Ava(Aa);Ha=La;Ja=Ka;break}Yua(c);B=0;Ia(40,o|0,114848,15)|0;Ka=B;B=0;do if(Ka&1)aa=93;else{B=0;wa(510,p|0,Aa|0);La=B;B=0;if(La&1){aa=93;break}B=0;ya(424,p|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ma=Q;Yua(p);Na=Ma;Oa=La;break}Yua(p);k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);La=k[a+24>>2]|0;if(La)Ec[k[(k[La>>2]|0)+8>>2]&1023](La);La=q+56|0;Ma=q+4|0;k[q>>2]=27524;k[La>>2]=27544;B=0;wa(508,q+56|0,Ma|0);Pa=B;B=0;if(Pa&1){Pa=Rb()|0;Qa=Q;Ra=Pa;vva(La);Qb(Ra|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[La>>2]=27488;B=0;va(448,Ma|0);Pa=B;B=0;do if(Pa&1){Sa=Rb()|0;Ta=Q;Ua=Sa}else{k[Ma>>2]=27560;Sa=q+36|0;k[Sa>>2]=0;k[Sa+4>>2]=0;k[Sa+8>>2]=0;k[Sa+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;Wa=Q;Yua(c);Yua(Sa);Ava(Ma);Ta=Wa;Ua=Va;break}Yua(c);B=0;Ia(40,q|0,114864,14)|0;Va=B;B=0;do if(Va&1)aa=109;else{B=0;wa(510,s|0,Ma|0);Wa=B;B=0;if(Wa&1){aa=109;break}B=0;ya(424,s|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Xa=Q;Yua(s);Ya=Xa;Za=Wa;break}Yua(s);k[q>>2]=27468;k[La>>2]=27488;k[Ma>>2]=27560;Yua(Sa);Ava(Ma);vva(La);Wa=k[a+28>>2]|0;if(!Wa){r=b;return}Ec[k[(k[Wa>>2]|0)+8>>2]&1023](Wa);r=b;return}while(0);if((aa|0)==109){Va=Rb()|0;Ya=Q;Za=Va}k[q>>2]=27468;k[La>>2]=27488;k[Ma>>2]=27560;Yua(Sa);Ava(Ma);vva(La);_a=Ya;$a=Za;Qb($a|0)}while(0);Qa=Ta;Ra=Ua;vva(La);Qb(Ra|0)}while(0);if((aa|0)==93){Ka=Rb()|0;Na=Q;Oa=Ka}k[o>>2]=27468;k[za>>2]=27488;k[Aa>>2]=27560;Yua(Ga);Ava(Aa);vva(za);_a=Na;$a=Oa;Qb($a|0)}while(0);Ea=Ha;Fa=Ja;vva(za);Qb(Fa|0)}while(0);if((aa|0)==77){xa=Rb()|0;Ba=Q;Ca=xa}k[m>>2]=27468;k[la>>2]=27488;k[ma>>2]=27560;Yua(sa);Ava(ma);vva(la);_a=Ba;$a=Ca;Qb($a|0)}while(0);qa=ta;ra=ua;vva(la);Qb(ra|0)}while(0);if((aa|0)==61){ka=Rb()|0;na=Q;oa=ka}k[j>>2]=27468;k[$>>2]=27488;k[ba>>2]=27560;Yua(ha);Ava(ba);vva($);_a=na;$a=oa;Qb($a|0)}while(0);fa=ia;ga=ja;vva($);Qb(ga|0)}while(0);if((aa|0)==45){_=Rb()|0;ca=Q;da=_}k[h>>2]=27468;k[S>>2]=27488;k[R>>2]=27560;Yua(X);Ava(R);vva(S);_a=ca;$a=da;Qb($a|0)}while(0);V=Y;W=Z;vva(S);Qb(W|0)}else aa=42;while(0);if((aa|0)==42){N=Rb()|0;T=Q;U=N}k[f>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(K);Ava(E);vva(D);_a=T;$a=U;Qb($a|0)}while(0);I=L;J=M;vva(D);Qb(J|0)}else aa=39;while(0);if((aa|0)==39){C=Rb()|0;F=Q;G=C}k[d>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);_a=F;$a=G;Qb($a|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}function f$(a){a=a|0;return -1}function g$(a){a=a|0;return 559}function h$(a){a=a|0;var b=0,c=0,d=0;b=Qqa(32)|0;k[b>>2]=36788;c=b+8|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[b+4>>2]=k[a+4>>2];k[c>>2]=k[a+8>>2];c=k[a+12>>2]|0;if(c){d=Hc[k[(k[c>>2]|0)+24>>2]&511](c)|0;k[b+12>>2]=d}d=k[a+16>>2]|0;if(d){c=Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0;k[b+16>>2]=c}c=k[a+20>>2]|0;if(c){d=Hc[k[(k[c>>2]|0)+24>>2]&511](c)|0;k[b+20>>2]=d}d=k[a+24>>2]|0;if(d){c=Hc[k[(k[d>>2]|0)+24>>2]&511](d)|0;k[b+24>>2]=c}c=k[a+28>>2]|0;if(!c)return b|0;a=Hc[k[(k[c>>2]|0)+24>>2]&511](c)|0;k[b+28>>2]=a;return b|0}function i$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;p=e+12|0;q=e;a:do switch(d|0){case 0:{s=k[b>>2]|0;i[s>>0]=47;i[s+1>>0]=2;i[s+2>>0]=0;i[s+3>>0]=0;s=(k[b>>2]|0)+4|0;k[b>>2]=s;t=a+4|0;u=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[s>>0]=u;i[s+1>>0]=u>>8;i[s+2>>0]=u>>16;i[s+3>>0]=u>>24;u=(k[b>>2]|0)+4|0;k[b>>2]=u;s=a+8|0;t=l[s>>0]|l[s+1>>0]<<8|l[s+2>>0]<<16|l[s+3>>0]<<24;i[u>>0]=t;i[u+1>>0]=t>>8;i[u+2>>0]=t>>16;i[u+3>>0]=t>>24;k[b>>2]=(k[b>>2]|0)+4;break}case 2:{k[c>>2]=(k[c>>2]|0)+12;break}case 1:{t=(k[b>>2]|0)+4|0;k[b>>2]=t;u=a+4|0;s=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[u>>0]=s;i[u+1>>0]=s>>8;i[u+2>>0]=s>>16;i[u+3>>0]=s>>24;t=(k[b>>2]|0)+4|0;k[b>>2]=t;v=a+8|0;w=l[t>>0]|l[t+1>>0]<<8|l[t+2>>0]<<16|l[t+3>>0]<<24;i[v>>0]=w;i[v+1>>0]=w>>8;i[v+2>>0]=w>>16;i[v+3>>0]=w>>24;k[b>>2]=(k[b>>2]|0)+4;switch(s|0){case 622:{s=Qqa(16)|0;B=0;va(468,s|0);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Sqa(s);x=v;y=w;Qb(y|0)}k[a+12>>2]=s;s=Qqa(16)|0;B=0;va(468,s|0);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Sqa(s);x=v;y=w;Qb(y|0)}k[a+16>>2]=s;s=Qqa(16)|0;B=0;va(468,s|0);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Sqa(s);x=v;y=w;Qb(y|0)}k[a+20>>2]=s;s=Qqa(16)|0;B=0;va(468,s|0);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Sqa(s);x=v;y=w;Qb(y|0)}k[a+24>>2]=s;s=Qqa(16)|0;B=0;va(468,s|0);w=B;B=0;if(!(w&1)){k[a+28>>2]=s;break a}w=Rb()|0;v=Q;Sqa(s);x=v;y=w;Qb(y|0);break}case 626:{w=Qqa(16)|0;B=0;va(469,w|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Sqa(w);x=s;y=v;Qb(y|0)}k[a+12>>2]=w;w=Qqa(16)|0;B=0;va(469,w|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Sqa(w);x=s;y=v;Qb(y|0)}k[a+16>>2]=w;w=Qqa(16)|0;B=0;va(469,w|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Sqa(w);x=s;y=v;Qb(y|0)}k[a+20>>2]=w;w=Qqa(16)|0;B=0;va(469,w|0);v=B;B=0;if(v&1){v=Rb()|0;s=Q;Sqa(w);x=s;y=v;Qb(y|0)}k[a+24>>2]=w;w=Qqa(16)|0;B=0;va(469,w|0);v=B;B=0;if(!(v&1)){k[a+28>>2]=w;break a}v=Rb()|0;s=Q;Sqa(w);x=s;y=v;Qb(y|0);break}default:{v=n+56|0;s=n+4|0;k[n>>2]=27524;k[v>>2]=27544;B=0;wa(508,n+56|0,s|0);w=B;B=0;if(w&1){w=Rb()|0;z=Q;A=w;vva(v);Qb(A|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[v>>2]=27488;B=0;va(448,s|0);w=B;B=0;do if(w&1){t=Rb()|0;C=Q;D=t}else{k[s>>2]=27560;t=n+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,s|0,f|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(f);Yua(t);Ava(s);C=F;D=E;break}Yua(f);B=0;E=Ia(40,n|0,114627,14)|0;F=B;B=0;b:do if((((!(F&1)?(B=0,G=ya(427,k[u>>2]|0)|0,H=B,B=0,!(H&1)):0)?(H=Lta(G)|0,B=0,I=Ia(40,E|0,G|0,H|0)|0,H=B,B=0,!(H&1)):0)?(B=0,H=Ia(40,I|0,114642,34)|0,I=B,B=0,!(I&1)):0)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,o|0,114677,78);I=B;B=0;do if(!(I&1)){B=0;eb(502,p|0,149525,8);G=B;B=0;if(G&1){G=Rb()|0;J=Q;Yua(o);K=G;L=J;break}B=0;wa(510,q|0,s|0);J=B;B=0;if(J&1){J=Rb()|0;M=1;N=Q;O=J}else{B=0;ua(163,H|0,o|0,p|0,122,q|0);J=B;B=0;if(J&1)P=1;else{B=0;eb(503,H|0,1240,229);B=0;P=0}J=Rb()|0;G=Q;Yua(q);M=P;N=G;O=J}Yua(p);Yua(o);if(M){K=O;L=N}else{R=N;S=O;break b}}else{J=Rb()|0;K=J;L=Q}while(0);zb(H|0);R=L;S=K}else T=68;while(0);if((T|0)==68){E=Rb()|0;R=Q;S=E}k[n>>2]=27468;k[v>>2]=27488;k[s>>2]=27560;Yua(t);Ava(s);vva(v);x=R;y=S;Qb(y|0)}while(0);z=C;A=D;vva(v);Qb(A|0)}}break}default:{s=g+56|0;u=g+4|0;k[g>>2]=27524;k[s>>2]=27544;B=0;wa(508,g+56|0,u|0);w=B;B=0;if(w&1){w=Rb()|0;U=Q;V=w;vva(s);Qb(V|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[s>>2]=27488;B=0;va(448,u|0);w=B;B=0;do if(w&1){E=Rb()|0;W=Q;X=E}else{k[u>>2]=27560;E=g+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,u|0,f|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;Yua(f);Yua(E);Ava(u);W=I;X=F;break}Yua(f);B=0;F=Ia(40,g|0,143951,43)|0;I=B;B=0;c:do if(!(I&1)?(B=0,Xa(239,F|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,h|0,114677,78);G=B;B=0;do if(!(G&1)){B=0;eb(502,j|0,149525,8);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(h);_=Z;$=Y;break}B=0;wa(510,m|0,u|0);Y=B;B=0;if(Y&1){Y=Rb()|0;aa=Q;ba=Y;ca=1}else{B=0;ua(163,J|0,h|0,j|0,100,m|0);Y=B;B=0;if(Y&1)da=1;else{B=0;eb(503,J|0,1240,229);B=0;da=0}Y=Rb()|0;Z=Q;Yua(m);aa=Z;ba=Y;ca=da}Yua(j);Yua(h);if(ca){_=aa;$=ba}else{ea=aa;fa=ba;break c}}else{Y=Rb()|0;_=Q;$=Y}while(0);zb(J|0);ea=_;fa=$}else T=17;while(0);if((T|0)==17){F=Rb()|0;ea=Q;fa=F}k[g>>2]=27468;k[s>>2]=27488;k[u>>2]=27560;Yua(E);Ava(u);vva(s);x=ea;y=fa;Qb(y|0)}while(0);U=W;V=X;vva(s);Qb(V|0)}}while(0);V=k[a+12>>2]|0;if(V)rd[k[(k[V>>2]|0)+28>>2]&511](V,b,c,d);V=k[a+16>>2]|0;if(V)rd[k[(k[V>>2]|0)+28>>2]&511](V,b,c,d);V=k[a+20>>2]|0;if(V)rd[k[(k[V>>2]|0)+28>>2]&511](V,b,c,d);V=k[a+24>>2]|0;if(V)rd[k[(k[V>>2]|0)+28>>2]&511](V,b,c,d);V=k[a+28>>2]|0;if(!V){r=e;return}rd[k[(k[V>>2]|0)+28>>2]&511](V,b,c,d);r=e;return}function j$(a){a=a|0;return k[a+4>>2]|0}function k$(a,b,c){a=a|0;b=b|0;c=+c;var d=0;d=k[a+12>>2]|0;Xc[k[(k[d>>2]|0)+124>>2]&63](d,b,c);return}function l$(a){a=a|0;var b=0,c=0,d=0;b=a+12|0;c=k[b>>2]|0;d=ed[k[(k[c>>2]|0)+160>>2]&511](c,k[a+24>>2]|0)|0;c=k[b>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);k[b>>2]=d;c=ed[k[(k[d>>2]|0)+156>>2]&511](d,k[a+20>>2]|0)|0;a=k[b>>2]|0;if(!a){k[b>>2]=c;return}Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[b>>2]=c;return}function m$(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=k[a+12>>2]|0;Qc[k[(k[d>>2]|0)+128>>2]&15](d,b,c);return}function n$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+136>>2]&1023](c,b);c=k[a+16>>2]|0;Fc[k[(k[c>>2]|0)+136>>2]&1023](c,b);return}function o$(a){a=a|0;var b=0;b=k[a+12>>2]|0;return Hc[k[(k[b>>2]|0)+164>>2]&511](b)|0}function p$(a){a=a|0;var b=0;b=k[a+12>>2]|0;return Hc[k[(k[b>>2]|0)+168>>2]&511](b)|0}function q$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;i=a+8|0;switch(k[i>>2]|0){case 1:{Fc[k[(k[b>>2]|0)+80>>2]&1023](b,938);break}case 2:{Fc[k[(k[b>>2]|0)+80>>2]&1023](b,939);break}case 3:{Fc[k[(k[b>>2]|0)+80>>2]&1023](b,940);break}default:{j=e+56|0;l=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,l|0,d|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);Yua(p);Ava(l);q=u;s=t;break}Yua(d);B=0;t=Ia(40,e|0,114890,51)|0;u=B;B=0;if(((!(u&1)?(B=0,u=Xa(242,t|0,k[i>>2]|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,114942,55)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,f|0,114677,78);u=B;B=0;do if(!(u&1)){B=0;eb(502,g|0,114998,11);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);x=w;y=v;break}B=0;wa(510,h|0,l|0);v=B;B=0;if(v&1){v=Rb()|0;z=Q;A=v;C=1}else{B=0;ua(163,t|0,f|0,g|0,195,h|0);v=B;B=0;if(v&1)D=1;else{B=0;eb(503,t|0,1240,229);B=0;D=0}v=Rb()|0;w=Q;Yua(h);z=w;A=v;C=D}Yua(g);Yua(f);if(C){x=z;y=A}else{E=z;F=A;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}}else{v=Rb()|0;x=Q;y=v}while(0);zb(t|0);E=x;F=y;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}u=Rb()|0;E=Q;F=u;k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);Qb(F|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}}o=a+28|0;a=k[o>>2]|0;if(!a){k[o>>2]=b;r=c;return}Ec[k[(k[a>>2]|0)+4>>2]&1023](a);k[o>>2]=b;r=c;return}function r$(a,b){a=a|0;b=b|0;var c=0,d=0;c=a+12|0;d=k[c>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);k[c>>2]=b;s$(a);return}function s$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;c=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;h=a+12|0;i=k[h>>2]|0;if(i){j=a+16|0;l=k[j>>2]|0;if(!l){m=i;n=k[m>>2]|0;o=n+24|0;p=k[o>>2]|0;q=Hc[p&511](m)|0;k[j>>2]=q;r=b;return}Ec[k[(k[l>>2]|0)+4>>2]&1023](l);m=k[h>>2]|0;n=k[m>>2]|0;o=n+24|0;p=k[o>>2]|0;q=Hc[p&511](m)|0;k[j>>2]=q;r=b;return}b=d+56|0;q=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,q|0);j=B;B=0;if(j&1){j=Rb()|0;s=Q;t=j;vva(b);Qb(t|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,q|0);j=B;B=0;do if(j&1){m=Rb()|0;u=Q;v=m}else{k[q>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;o=Q;Yua(c);Yua(m);Ava(q);u=o;v=p;break}Yua(c);B=0;p=Ia(40,d|0,115010,10)|0;o=B;B=0;if((((!(o&1)?(B=0,o=ya(427,k[a+4>>2]|0)|0,n=B,B=0,!(n&1)):0)?(n=Lta(o)|0,B=0,h=Ia(40,p|0,o|0,n|0)|0,n=B,B=0,!(n&1)):0)?(B=0,n=Ia(40,h|0,114879,10)|0,h=B,B=0,!(h&1)):0)?(B=0,Xa(239,n|0,0)|0,n=B,B=0,!(n&1)):0){n=Ab(20)|0;B=0;eb(502,e|0,114677,78);h=B;B=0;do if(!(h&1)){B=0;eb(502,f|0,115021,9);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(e);w=p;x=o;break}B=0;wa(510,g|0,q|0);o=B;B=0;if(o&1){o=Rb()|0;y=Q;z=o;A=1}else{B=0;ua(163,n|0,e|0,f|0,267,g|0);o=B;B=0;if(o&1)C=1;else{B=0;eb(503,n|0,1240,229);B=0;C=0}o=Rb()|0;p=Q;Yua(g);y=p;z=o;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;k[d>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(b);Qb(E|0)}}else{o=Rb()|0;w=Q;x=o}while(0);zb(n|0);D=w;E=x;k[d>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(b);Qb(E|0)}h=Rb()|0;D=Q;E=h;k[d>>2]=27468;k[b>>2]=27488;k[q>>2]=27560;Yua(m);Ava(q);vva(b);Qb(E|0)}while(0);s=u;t=v;vva(b);Qb(t|0)}function t$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+12>>2]|0;return ld[k[(k[e>>2]|0)+144>>2]&127](e,b,c,d)|0}function u$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+12>>2]|0;return Rc[k[(k[d>>2]|0)+148>>2]&63](d,b,c)|0}function v$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+12>>2]|0;nd[k[(k[d>>2]|0)+140>>2]&1023](d,b,c);return}function w$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;if(!(Ita(d,115926)|0)){l=k[a+12>>2]|0;nd[k[(k[l>>2]|0)+140>>2]&1023](l,b,c);r=e;return}if(!(Ita(d,115325)|0)){l=k[a+20>>2]|0;nd[k[(k[l>>2]|0)+140>>2]&1023](l,b,c);r=e;return}if(!(Ita(d,115336)|0)){l=k[a+24>>2]|0;nd[k[(k[l>>2]|0)+140>>2]&1023](l,b,c);r=e;return}if(!(Ita(d,115031)|0)){l=k[a+28>>2]|0;nd[k[(k[l>>2]|0)+140>>2]&1023](l,b,c);r=e;return}e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(e);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){l=Rb()|0;o=Q;p=l}else{k[c>>2]=27560;l=g+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(f);Yua(l);Ava(c);o=q;p=a;break}Yua(f);B=0;a=Ia(40,g|0,115040,5)|0;q=B;B=0;if(((!(q&1)?(q=Lta(d)|0,B=0,s=Ia(40,a|0,d|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,146481,18)|0,s=B,B=0,!(s&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,h|0,114677,78);s=B;B=0;do if(!(s&1)){B=0;eb(502,i|0,115046,19);a=B;B=0;if(a&1){a=Rb()|0;t=Q;Yua(h);u=t;v=a;break}B=0;wa(510,j|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;w=Q;x=a;y=1}else{B=0;ua(163,q|0,h|0,i|0,236,j|0);a=B;B=0;if(a&1)z=1;else{B=0;eb(503,q|0,1240,229);B=0;z=0}a=Rb()|0;t=Q;Yua(j);w=t;x=a;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}}else{a=Rb()|0;u=Q;v=a}while(0);zb(q|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}s=Rb()|0;A=Q;C=s;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(e);Qb(C|0)}while(0);m=o;n=p;vva(e);Qb(n|0)}function x$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+64>>2]&1023](c,b);return}function y$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+36>>2]&1023](c,b);return}function z$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+40>>2]&1023](c,b);return}function A$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+44>>2]&1023](c,b);return}function B$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+12>>2]|0;nd[k[(k[d>>2]|0)+48>>2]&1023](d,b,c);return}function C$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=k[a+28>>2]|0;nd[k[(k[d>>2]|0)+48>>2]&1023](d,b,c);return}function D$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=k[a+12>>2]|0;rd[k[(k[e>>2]|0)+60>>2]&511](e,b,c,d);return}function E$(a){a=a|0;var b=0;b=k[a+12>>2]|0;return +(+Zc[k[(k[b>>2]|0)+112>>2]&255](b))}function F$(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;c=r;r=r+368|0;d=c+344|0;e=c+208|0;f=c+196|0;g=c+184|0;h=c+36|0;i=c+48|0;j=c+24|0;l=c+12|0;m=c;n=a+28|0;if(!(k[n>>2]|0)){o=e+56|0;p=e+4|0;k[e>>2]=27524;k[o>>2]=27544;B=0;wa(508,e+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(o);Qb(t|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[o>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=e+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,p|0,d|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(d);Yua(u);Ava(p);v=y;w=x;break}Yua(d);B=0;x=Ia(40,e|0,115066,12)|0;y=B;B=0;a:do if((((!(y&1)?(B=0,z=ya(427,k[a+4>>2]|0)|0,A=B,B=0,!(A&1)):0)?(A=Lta(z)|0,B=0,C=Ia(40,x|0,z|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,114879,10)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,f|0,114677,78);C=B;B=0;do if(!(C&1)){B=0;eb(502,g|0,115079,11);z=B;B=0;if(z&1){z=Rb()|0;D=Q;Yua(f);E=z;F=D;break}B=0;wa(510,h|0,p|0);D=B;B=0;if(D&1){D=Rb()|0;G=Q;H=D;I=1}else{B=0;ua(163,A|0,f|0,g|0,273,h|0);D=B;B=0;if(D&1)J=1;else{B=0;eb(503,A|0,1240,229);B=0;J=0}D=Rb()|0;z=Q;Yua(h);G=z;H=D;I=J}Yua(g);Yua(f);if(I){E=H;F=G}else{K=H;L=G;break a}}else{D=Rb()|0;E=D;F=Q}while(0);zb(A|0);K=E;L=F}else M=20;while(0);if((M|0)==20){x=Rb()|0;K=x;L=Q}k[e>>2]=27468;k[o>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(o);N=L;O=K;Qb(O|0)}while(0);s=v;t=w;vva(o);Qb(t|0)}t=a+16|0;o=k[t>>2]|0;if(o){w=a+12|0;v=k[w>>2]|0;if(!v){P=o;R=k[P>>2]|0;S=R+24|0;T=k[S>>2]|0;U=Hc[T&511](P)|0;k[w>>2]=U;V=k[U>>2]|0;W=V+124|0;X=k[W>>2]|0;Y=k[n>>2]|0;Xc[X&63](U,Y,b);r=c;return}Ec[k[(k[v>>2]|0)+4>>2]&1023](v);P=k[t>>2]|0;R=k[P>>2]|0;S=R+24|0;T=k[S>>2]|0;U=Hc[T&511](P)|0;k[w>>2]=U;V=k[U>>2]|0;W=V+124|0;X=k[W>>2]|0;Y=k[n>>2]|0;Xc[X&63](U,Y,b);r=c;return}c=i+56|0;Y=i+4|0;k[i>>2]=27524;k[c>>2]=27544;B=0;wa(508,i+56|0,Y|0);U=B;B=0;if(U&1){U=Rb()|0;Z=Q;_=U;vva(c);Qb(_|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[c>>2]=27488;B=0;va(448,Y|0);U=B;B=0;do if(U&1){X=Rb()|0;$=Q;aa=X}else{k[Y>>2]=27560;X=i+36|0;k[X>>2]=0;k[X+4>>2]=0;k[X+8>>2]=0;k[X+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Y|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;W=Q;Yua(d);Yua(X);Ava(Y);$=W;aa=n;break}Yua(d);B=0;n=Ia(40,i|0,115010,10)|0;W=B;B=0;b:do if((((!(W&1)?(B=0,V=ya(427,k[a+4>>2]|0)|0,w=B,B=0,!(w&1)):0)?(w=Lta(V)|0,B=0,P=Ia(40,n|0,V|0,w|0)|0,w=B,B=0,!(w&1)):0)?(B=0,w=Ia(40,P|0,114879,10)|0,P=B,B=0,!(P&1)):0)?(B=0,Xa(239,w|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,j|0,114677,78);P=B;B=0;do if(!(P&1)){B=0;eb(502,l|0,115079,11);V=B;B=0;if(V&1){V=Rb()|0;T=Q;Yua(j);ba=V;ca=T;break}B=0;wa(510,m|0,Y|0);T=B;B=0;if(T&1){T=Rb()|0;da=1;ea=Q;fa=T}else{B=0;ua(163,w|0,j|0,l|0,274,m|0);T=B;B=0;if(T&1)ga=1;else{B=0;eb(503,w|0,1240,229);B=0;ga=0}T=Rb()|0;V=Q;Yua(m);da=ga;ea=V;fa=T}Yua(l);Yua(j);if(da){ba=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{T=Rb()|0;ba=T;ca=Q}while(0);zb(w|0);ha=ca;ia=ba}else M=47;while(0);if((M|0)==47){n=Rb()|0;ha=Q;ia=n}k[i>>2]=27468;k[c>>2]=27488;k[Y>>2]=27560;Yua(X);Ava(Y);vva(c);N=ha;O=ia;Qb(O|0)}while(0);Z=$;_=aa;vva(c);Qb(_|0)}function G$(a,b){a=a|0;b=b|0;var c=0;c=k[a+12>>2]|0;Fc[k[(k[c>>2]|0)+132>>2]&1023](c,b);return}function H$(a,b){a=a|0;b=b|0;return}function I$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;e=c+24|0;f=c+12|0;g=c;c=a+56|0;h=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(c);Qb(l|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=a+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,h|0,b|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(b);Yua(m);Ava(h);n=q;o=p;break}Yua(b);B=0;p=Ia(40,a|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,115091,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,121355,13);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,56,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[a>>2]=27468;k[c>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(c);Qb(E|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}function J$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121355,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,57,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function K$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121324,30);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,60,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function L$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,120910,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,61,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function M$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;f=d+12|0;g=d;d=b+56|0;h=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(d);Qb(l|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=b+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,b|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,a|0,115091,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120878,31);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(a);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,a|0,f|0,62,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(a);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[b>>2]=27468;k[d>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(d);Qb(E|0)}while(0);j=n;l=o;vva(d);Qb(l|0)}function N$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115254,10);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,63,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function O$(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115244,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,64,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function P$(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,115091,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115231,12);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,65,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function Q$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115218,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,71,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function R$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115211,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,73,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function S$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115204,6);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,75,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function T$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115200,3);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,72,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0);return +(0.0)}function U$(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,120763,23)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,115091,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,120874,3);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,66,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function V$(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;a=r;r=r+192|0;c=a+176|0;d=a+40|0;e=a+24|0;f=a+12|0;g=a;a=d+56|0;h=d+4|0;k[d>>2]=27524;k[a>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(a);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[a>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(c);Yua(m);Ava(h);n=q;o=p;break}Yua(c);B=0;p=Ia(40,d|0,149721,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,115091,88);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,115194,5);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,67,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[a>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(a);Qb(E|0)}while(0);j=n;l=o;vva(a);Qb(l|0)}function W$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121179,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,43,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function X$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121166,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,45,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Y$(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,121153,12);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,44,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function Z$(a){a=a|0;return 1}function _$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;c=d+176|0;b=d+40|0;a=d+24|0;e=d+12|0;f=d;d=b+56|0;g=b+4|0;k[b>>2]=27524;k[d>>2]=27544;B=0;wa(508,b+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(d);Qb(j|0)}k[b+128>>2]=0;k[b+132>>2]=-1;k[b>>2]=27468;k[d>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=b+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[b+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,g|0,c|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(c);Yua(l);Ava(g);m=p;n=o;break}Yua(c);B=0;o=Ia(40,b|0,134695,17)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,a|0,115091,88);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115180,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(a);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,a|0,e|0,83,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(a);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[b>>2]=27468;k[d>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(d);Qb(D|0)}while(0);i=m;j=n;vva(d);Qb(j|0)}function $$(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0;b=r;r=r+432|0;c=b+32|0;d=b+412|0;e=b+408|0;f=b+404|0;g=b+421|0;h=b+420|0;j=b+400|0;l=b+396|0;m=b+392|0;n=b+388|0;o=b+384|0;q=b+380|0;s=b+232|0;t=b+368|0;u=b+224|0;v=b+216|0;w=b;x=b+80|0;y=b+68|0;z=b+64|0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;k[q>>2]=0;A=a+44|0;cO(k[A>>2]|0,b+416|0,198);hO(k[A>>2]|0,j,0,176);cO(k[A>>2]|0,e,196);hO(k[A>>2]|0,l,0,186);iO(k[A>>2]|0,m,0,200);cO(k[A>>2]|0,f,476);bO(k[A>>2]|0,g,99);bO(k[A>>2]|0,h,314);mO(k[A>>2]|0,0,759);j_(o,k[A>>2]|0,k[f>>2]|0);g0(q,k[f>>2]|0);a:do if(FY()|0){f=s+56|0;q=s+4|0;k[s>>2]=27524;k[f>>2]=27544;B=0;wa(508,s+56|0,q|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;E=C;vva(f);Qb(E|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[f>>2]=27488;B=0;va(448,q|0);C=B;B=0;do if(C&1){F=Rb()|0;G=Q;H=F}else{k[q>>2]=27560;F=s+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,q|0,c|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(c);Yua(F);Ava(q);G=J;H=I;break}Yua(c);B=0;Ia(40,s|0,115265,30)|0;I=B;B=0;do if(!(I&1)?(B=0,wa(510,t|0,q|0),J=B,B=0,!(J&1)):0){B=0;ya(425,t|0)|0;J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(t);L=J;M=K;break}else{Yua(t);k[s>>2]=27468;k[f>>2]=27488;k[q>>2]=27560;Yua(F);Ava(q);vva(f);break a}}else N=14;while(0);if((N|0)==14){I=Rb()|0;L=I;M=Q}k[s>>2]=27468;k[f>>2]=27488;k[q>>2]=27560;Yua(F);Ava(q);vva(f);O=L;P=M;Qb(O|0)}while(0);D=G;E=H;vva(f);Qb(E|0)}while(0);if(i[g>>0]|0)Ec[k[o>>2]&1023](a);k[u>>2]=0;g=a+20|0;E=a+24|0;H=a+28|0;G=a+36|0;D=a+40|0;$oa(u,k[g>>2]|0,k[E>>2]|0,k[H>>2]|0,k[G>>2]|0,k[D>>2]|0,k[A>>2]|0,115926,0);M=k[u>>2]|0;if(k[M>>2]|0){L=k[k[M+4>>2]>>2]|0;s=Hc[k[(k[L>>2]|0)+52>>2]&511](L)|0;L=k[u>>2]|0;if(!(k[L>>2]|0)){R=L;S=s}else{t=k[k[L+4>>2]>>2]|0;Fc[k[(k[t>>2]|0)+28>>2]&1023](t,d);R=k[u>>2]|0;S=s}}else{R=M;S=0}if(R){if((k[R>>2]|0)!=0?(M=k[R+4>>2]|0,(M|0)!=0):0){s=k[M>>2]|0;if(s)Ec[k[(k[s>>2]|0)+4>>2]&1023](s);Sqa(M)}Sqa(R)}R=k[e>>2]|0;M=k[d>>2]|0;s=k[l>>2]|0;u=k[m>>2]|0;k[v>>2]=a;k[v+4>>2]=M;p[w>>3]=0.0;p[w+8>>3]=1.0;k[w+16>>2]=u;k[w+20>>2]=s;k[w+24>>2]=R;k[w+28>>2]=M;k[c>>2]=k[w>>2];k[c+4>>2]=k[w+4>>2];k[c+8>>2]=k[w+8>>2];k[c+12>>2]=k[w+12>>2];k[c+16>>2]=k[w+16>>2];k[c+20>>2]=k[w+20>>2];k[c+24>>2]=k[w+24>>2];k[c+28>>2]=k[w+28>>2];epa(n,c,S,38,2,v);b:do if(FY()|0){v=x+56|0;w=x+4|0;k[x>>2]=27524;k[v>>2]=27544;B=0;wa(508,x+56|0,w|0);M=B;B=0;if(M&1){M=Rb()|0;T=Q;U=M;vva(v);Qb(U|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);M=B;B=0;do if(M&1){R=Rb()|0;V=Q;W=R}else{k[w>>2]=27560;R=x+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);s=B;B=0;if(s&1){s=Rb()|0;u=Q;Yua(c);Yua(R);Ava(w);V=u;W=s;break}Yua(c);B=0;Ia(40,x|0,115296,28)|0;s=B;B=0;do if(!(s&1)?(B=0,wa(510,y|0,w|0),u=B,B=0,!(u&1)):0){B=0;ya(425,y|0)|0;u=B;B=0;if(u&1){u=Rb()|0;t=Q;Yua(y);X=u;Y=t;break}else{Yua(y);k[x>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(R);Ava(w);vva(v);break b}}else N=42;while(0);if((N|0)==42){s=Rb()|0;X=s;Y=Q}k[x>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(R);Ava(w);vva(v);O=X;P=Y;Qb(O|0)}while(0);T=V;U=W;vva(v);Qb(U|0)}while(0);k[c>>2]=0;k[z>>2]=0;apa(c,k[g>>2]|0,k[E>>2]|0,k[H>>2]|0,k[G>>2]|0,k[D>>2]|0,k[A>>2]|0,115325,0);apa(z,k[g>>2]|0,k[E>>2]|0,k[H>>2]|0,k[G>>2]|0,k[D>>2]|0,k[A>>2]|0,115336,0);D=k[d>>2]|0;d=k[z>>2]|0;if((D|0)>0){G=k[c>>2]|0;H=0;do{E=S+(H<<3)|0;Z=+p[E>>3];_=+p[d+(H<<3)>>3];if(Z>_){p[E>>3]=_;$=_}else $=Z;Z=+p[G+(H<<3)>>3];if($<Z)p[E>>3]=Z;H=H+1|0}while((H|0)<(D|0))}if(d)Tqa(d);k[z>>2]=0;z=k[c>>2]|0;if(z)Tqa(z);k[c>>2]=0;bpa(a,S);mO(k[A>>2]|0,1,759);Ec[k[o>>2]&1023](a);c:do if(!(i[h>>0]|0)){o=a+48|0;li(a,o);A=k[o>>2]|0;o=Qqa(40)|0;B=0;c=ya(428,A|0)|0;z=B;B=0;d:do if(!(z&1)?(d=k[n>>2]|0,D=k[e>>2]|0,k[o>>2]=27964,k[o+4>>2]=c+1,H=o+16|0,k[H>>2]=D,D=o+20|0,k[D>>2]=1,B=0,wa(512,o+8|0,764),G=B,B=0,!(G&1)):0){k[o+24>>2]=0;p[o+32>>3]=0.0;G=ma(k[D>>2]|0,k[H>>2]|0)|0;do if(G){B=0;H=ya(422,(G>>>0>536870911?-1:G<<3)|0)|0;D=B;B=0;if(D&1)break d;k[o+12>>2]=H;if(!d){B=0;ib(283,142353,115347,137,142345);B=0;break d}else{TEa(H|0,d|0,G<<3|0)|0;break}}else k[o+12>>2]=0;while(0);ih(A,o)|0;break c}while(0);A=Rb()|0;c=Q;Sqa(o);O=A;P=c;Qb(O|0)}while(0);O=k[j>>2]|0;if(O)Tqa(O);k[j>>2]=0;j=k[l>>2]|0;if(j)Tqa(j);k[l>>2]=0;l=k[m>>2]|0;if(l)Tqa(l);k[m>>2]=0;m=k[n>>2]|0;if(m)Tqa(m);k[n>>2]=0;if(!S){r=b;return}Tqa(S);r=b;return}function a0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0;c=r;r=r+672|0;d=c+656|0;e=c;f=c+652|0;g=c+644|0;h=c+640|0;i=c+624|0;j=c+464|0;l=c+628|0;m=c+612|0;n=c+600|0;o=c+456|0;q=c+320|0;s=c+168|0;t=c+184|0;u=c+20|0;v=c+32|0;w=c+8|0;x=k[b>>2]|0;y=k[b+4>>2]|0;b=x+44|0;cO(k[b>>2]|0,c+648|0,477);cO(k[b>>2]|0,f,476);cO(k[b>>2]|0,g,199);k[h>>2]=0;k[i>>2]=0;z=x+20|0;A=x+24|0;C=x+28|0;D=x+36|0;E=x+40|0;apa(h,k[z>>2]|0,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[E>>2]|0,k[b>>2]|0,115325,0);apa(i,k[z>>2]|0,k[A>>2]|0,k[C>>2]|0,k[D>>2]|0,k[E>>2]|0,k[b>>2]|0,115336,0);if((y|0)>0){b=k[i>>2]|0;E=k[h>>2]|0;D=0;do{C=a+(D<<3)|0;F=+p[C>>3];G=+p[b+(D<<3)>>3];if(F>G){p[C>>3]=G;H=G}else H=F;F=+p[E+(D<<3)>>3];if(H<F)p[C>>3]=F;D=D+1|0}while((D|0)!=(y|0))}bpa(x,a);switch(k[f>>2]|0){case 518:{xh(x,497);j0(x);break}case 499:{xh(x,497);Woa(x,1);break}case 485:{xh(x,484);Voa(x);break}case 489:break;case 487:{xh(x,486);Voa(x);break}default:{a=j+56|0;y=j+4|0;k[j>>2]=27524;k[a>>2]=27544;B=0;wa(508,j+56|0,y|0);D=B;B=0;if(D&1){D=Rb()|0;I=Q;J=D;vva(a);Qb(J|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[a>>2]=27488;B=0;va(448,y|0);D=B;B=0;do if(D&1){E=Rb()|0;K=Q;L=E}else{k[y>>2]=27560;E=j+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,y|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;C=Q;Yua(d);Yua(E);Ava(y);K=C;L=b;break}Yua(d);B=0;b=Ia(40,j|0,134802,9)|0;C=B;B=0;a:do if((((!(C&1)?(B=0,A=ya(427,k[f>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(A)|0,B=0,M=Ia(40,b|0,A|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,M|0,127493,20)|0,M=B,B=0,!(M&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,l|0,115461,69);M=B;B=0;do if(!(M&1)){B=0;eb(502,m|0,115531,12);A=B;B=0;if(A&1){A=Rb()|0;N=Q;Yua(l);O=N;P=A;break}B=0;wa(510,n|0,y|0);A=B;B=0;if(A&1){A=Rb()|0;R=Q;S=A;T=1}else{B=0;ua(163,z|0,l|0,m|0,168,n|0);A=B;B=0;if(A&1)U=1;else{B=0;eb(503,z|0,1240,229);B=0;U=0}A=Rb()|0;N=Q;Yua(n);R=N;S=A;T=U}Yua(m);Yua(l);if(T){O=R;P=S}else{V=R;W=S;break a}}else{A=Rb()|0;O=Q;P=A}while(0);zb(z|0);V=O;W=P}else X=31;while(0);if((X|0)==31){b=Rb()|0;V=Q;W=b}k[j>>2]=27468;k[a>>2]=27488;k[y>>2]=27560;Yua(E);Ava(y);vva(a);Y=V;Z=W;Qb(Z|0)}while(0);I=K;J=L;vva(a);Qb(J|0)}}k[o>>2]=0;ki(x,e,o,0);x=q+56|0;J=q+4|0;k[q>>2]=27524;k[x>>2]=27544;B=0;wa(508,q+56|0,J|0);a=B;B=0;if(a&1){a=Rb()|0;_=Q;$=a;vva(x);Qb($|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[x>>2]=27488;B=0;va(448,J|0);a=B;B=0;do if(a&1){L=Rb()|0;aa=Q;ba=L}else{k[J>>2]=27560;L=q+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[q+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,J|0,d|0);K=B;B=0;if(K&1){K=Rb()|0;I=Q;Yua(d);Yua(L);Ava(J);aa=I;ba=K;break}Yua(d);B=0;K=Ia(40,q|0,115544,7)|0;I=B;B=0;do if(((!(I&1)?(k[K+(k[(k[K>>2]|0)+-12>>2]|0)+12>>2]=12,k[K+(k[(k[K>>2]|0)+-12>>2]|0)+8>>2]=7,B=0,W=Sa(1,K|0,+(+p[e>>3]))|0,V=B,B=0,!(V&1)):0)?(B=0,Ia(40,W|0,115552,5)|0,W=B,B=0,!(W&1)):0)?(B=0,wa(510,s|0,J|0),W=B,B=0,!(W&1)):0){B=0;ya(425,s|0)|0;W=B;B=0;if(W&1){W=Rb()|0;V=Q;Yua(s);ca=V;da=W;break}Yua(s);k[q>>2]=27468;k[x>>2]=27488;k[J>>2]=27560;Yua(L);Ava(J);vva(x);b:do if((k[g>>2]|0)>0){W=t+56|0;V=t+4|0;y=t+56|0;j=t+128|0;P=t+132|0;O=t+36|0;S=t+52|0;R=0;while(1){k[t>>2]=27524;k[W>>2]=27544;B=0;wa(508,y|0,V|0);T=B;B=0;if(T&1){X=70;break}k[j>>2]=0;k[P>>2]=-1;k[t>>2]=27468;k[W>>2]=27488;B=0;va(448,V|0);T=B;B=0;if(T&1){X=71;break}k[V>>2]=27560;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[S>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,V|0,d|0);T=B;B=0;if(T&1){X=69;break}Yua(d);B=0;T=Ia(40,t|0,149175,1)|0;l=B;B=0;if(l&1){X=79;break}k[T+(k[(k[T>>2]|0)+-12>>2]|0)+12>>2]=12;k[T+(k[(k[T>>2]|0)+-12>>2]|0)+8>>2]=7;B=0;Sa(1,T|0,+(+p[(k[o>>2]|0)+(R<<3)>>3]))|0;T=B;B=0;if(T&1){X=79;break}B=0;wa(510,u|0,V|0);T=B;B=0;if(T&1){X=79;break}B=0;ya(425,u|0)|0;T=B;B=0;if(T&1){X=80;break}Yua(u);k[t>>2]=27468;k[W>>2]=27488;k[V>>2]=27560;Yua(O);Ava(V);vva(W);R=R+1|0;if((R|0)>=(k[g>>2]|0))break b}if((X|0)==69){R=Rb()|0;S=Q;Yua(d);Yua(O);Ava(V);ea=S;fa=R;X=72}else if((X|0)==70){R=Rb()|0;ga=Q;ha=R;vva(W);Qb(ha|0)}else if((X|0)==71){R=Rb()|0;ea=Q;fa=R;X=72}else if((X|0)==79){R=Rb()|0;ia=Q;ja=R;X=81}else if((X|0)==80){R=Rb()|0;S=Q;Yua(u);ia=S;ja=R;X=81}if((X|0)==72){ga=ea;ha=fa;vva(W);Qb(ha|0)}else if((X|0)==81){k[t>>2]=27468;k[W>>2]=27488;k[V>>2]=27560;Yua(O);Ava(V);vva(W);Y=ia;Z=ja;Qb(Z|0)}}while(0);z=v+56|0;R=v+4|0;k[v>>2]=27524;k[z>>2]=27544;B=0;wa(508,v+56|0,R|0);S=B;B=0;if(S&1){S=Rb()|0;ka=Q;la=S;vva(z);Qb(la|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[z>>2]=27488;B=0;va(448,R|0);S=B;B=0;do if(S&1){P=Rb()|0;ma=Q;na=P}else{k[R>>2]=27560;P=v+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[v+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,R|0,d|0);j=B;B=0;if(j&1){j=Rb()|0;y=Q;Yua(d);Yua(P);Ava(R);ma=y;na=j;break}Yua(d);B=0;Ia(40,v|0,149177,1)|0;j=B;B=0;do if(!(j&1)?(B=0,wa(510,w|0,R|0),y=B,B=0,!(y&1)):0){B=0;ya(425,w|0)|0;y=B;B=0;if(y&1){y=Rb()|0;T=Q;Yua(w);oa=T;pa=y;break}Yua(w);k[v>>2]=27468;k[z>>2]=27488;k[R>>2]=27560;Yua(P);Ava(R);vva(z);y=k[i>>2]|0;if(y)Tqa(y);k[i>>2]=0;y=k[h>>2]|0;if(y)Tqa(y);k[h>>2]=0;y=k[o>>2]|0;if(!y){qa=+p[e>>3];r=c;return +qa}Tqa(y);qa=+p[e>>3];r=c;return +qa}else X=91;while(0);if((X|0)==91){j=Rb()|0;oa=Q;pa=j}k[v>>2]=27468;k[z>>2]=27488;k[R>>2]=27560;Yua(P);Ava(R);vva(z);Y=oa;Z=pa;Qb(Z|0)}while(0);ka=ma;la=na;vva(z);Qb(la|0)}else X=63;while(0);if((X|0)==63){K=Rb()|0;ca=Q;da=K}k[q>>2]=27468;k[x>>2]=27488;k[J>>2]=27560;Yua(L);Ava(J);vva(x);Y=ca;Z=da;Qb(Z|0)}while(0);_=aa;$=ba;vva(x);Qb($|0);return +(0.0)}function b0(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,R=0,S=0.0,T=0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0.0;d=r;r=r+528|0;e=d+504|0;f=d;g=d+500|0;h=d+496|0;i=d+488|0;j=d+484|0;l=d+480|0;m=d+476|0;n=d+472|0;o=d+468|0;q=d+464|0;s=d+460|0;t=d+312|0;u=d+448|0;v=d+160|0;w=d+296|0;x=d+24|0;y=d+8|0;k[g>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;k[o>>2]=0;z=k[c>>2]|0;A=k[c+4>>2]|0;c=z+44|0;cO(k[c>>2]|0,d+492|0,477);cO(k[c>>2]|0,h,476);cO(k[c>>2]|0,i,199);jO(k[c>>2]|0,l,0,0,181);cO(k[c>>2]|0,j,198);C=z+28|0;D=nn(k[C>>2]|0)|0;k[q>>2]=0;k[s>>2]=0;E=z+20|0;F=z+24|0;G=z+36|0;H=z+40|0;apa(q,k[E>>2]|0,k[F>>2]|0,k[C>>2]|0,k[G>>2]|0,k[H>>2]|0,k[c>>2]|0,115325,0);apa(s,k[E>>2]|0,k[F>>2]|0,k[C>>2]|0,k[G>>2]|0,k[H>>2]|0,k[c>>2]|0,115336,0);I=(A|0)>0;if(I){J=k[s>>2]|0;K=k[q>>2]|0;L=0;do{M=b+(L<<3)|0;N=+p[M>>3];O=+p[J+(L<<3)>>3];if(N>O){p[M>>3]=O;P=O}else P=N;N=+p[K+(L<<3)>>3];if(P<N)p[M>>3]=N;L=L+1|0}while((L|0)!=(A|0))}bpa(z,b);L=k[h>>2]|0;if((L|0)==518){v_(z);R=k[h>>2]|0}else R=L;g0(g,R);Ec[k[g>>2]&1023](z);dpa(n,o,k[E>>2]|0,k[F>>2]|0,k[C>>2]|0,k[G>>2]|0,k[H>>2]|0,k[c>>2]|0);g=k[l>>2]|0;R=k[o>>2]|0;P=+p[g>>3]/+p[R>>3];L=k[j>>2]|0;if((L|0)>1){N=+KY(P,+p[g+8>>3]/+p[R+8>>3]);R=k[j>>2]|0;if((R|0)>2){g=2;O=N;while(1){S=+KY(O,+p[(k[l>>2]|0)+(g<<3)>>3]/+p[(k[o>>2]|0)+(g<<3)>>3]);g=g+1|0;h=k[j>>2]|0;if((g|0)>=(h|0)){T=h;U=S;break}else O=S}}else{T=R;U=N}}else{T=L;U=P}if((T|0)>0?(L=k[n>>2]|0,(D|0)>0):0){R=0;do{g=ma(R,D)|0;j=0;do{h=L+(j+g<<3)|0;p[h>>3]=U*+p[h>>3];j=j+1|0}while((j|0)!=(D|0));R=R+1|0}while((R|0)<(T|0))}if(I){I=k[s>>2]|0;T=k[q>>2]|0;R=k[n>>2]|0;D=0;do{L=b+(D<<3)|0;U=+p[L>>3];if(!(U>=+p[I+(D<<3)>>3]))V=U;else{p[R+(D<<3)>>3]=0.0;V=+p[L>>3]}if(V<=+p[T+(D<<3)>>3])p[R+(D<<3)>>3]=0.0;D=D+1|0}while((D|0)!=(A|0));W=R}else W=k[n>>2]|0;_oa(k[E>>2]|0,k[F>>2]|0,k[C>>2]|0,k[G>>2]|0,k[H>>2]|0,k[c>>2]|0,W);ki(z,f,m,0);z=t+56|0;W=t+4|0;k[t>>2]=27524;k[z>>2]=27544;B=0;wa(508,t+56|0,W|0);c=B;B=0;if(c&1){c=Rb()|0;X=Q;Y=c;vva(z);Qb(Y|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[z>>2]=27488;B=0;va(448,W|0);c=B;B=0;do if(c&1){H=Rb()|0;Z=Q;_=H}else{k[W>>2]=27560;H=t+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,W|0,e|0);G=B;B=0;if(G&1){G=Rb()|0;C=Q;Yua(e);Yua(H);Ava(W);Z=C;_=G;break}Yua(e);B=0;G=Ia(40,t|0,115544,7)|0;C=B;B=0;do if(((!(C&1)?(k[G+(k[(k[G>>2]|0)+-12>>2]|0)+12>>2]=12,k[G+(k[(k[G>>2]|0)+-12>>2]|0)+8>>2]=7,B=0,F=Sa(1,G|0,+(+p[f>>3]))|0,E=B,B=0,!(E&1)):0)?(B=0,Ia(40,F|0,115552,5)|0,F=B,B=0,!(F&1)):0)?(B=0,wa(510,u|0,W|0),F=B,B=0,!(F&1)):0){B=0;ya(425,u|0)|0;F=B;B=0;if(F&1){F=Rb()|0;E=Q;Yua(u);$=E;aa=F;break}Yua(u);k[t>>2]=27468;k[z>>2]=27488;k[W>>2]=27560;Yua(H);Ava(W);vva(z);a:do if((k[i>>2]|0)>0){F=v+56|0;E=v+4|0;R=v+56|0;A=v+128|0;D=v+132|0;T=v+36|0;I=v+52|0;b=0;while(1){k[v>>2]=27524;k[F>>2]=27544;B=0;wa(508,R|0,E|0);L=B;B=0;if(L&1){ba=57;break}k[A>>2]=0;k[D>>2]=-1;k[v>>2]=27468;k[F>>2]=27488;B=0;va(448,E|0);L=B;B=0;if(L&1){ba=58;break}k[E>>2]=27560;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[I>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,E|0,e|0);L=B;B=0;if(L&1){ba=56;break}Yua(e);B=0;L=Ia(40,v|0,149175,1)|0;j=B;B=0;if(j&1){ba=66;break}k[L+(k[(k[L>>2]|0)+-12>>2]|0)+12>>2]=12;k[L+(k[(k[L>>2]|0)+-12>>2]|0)+8>>2]=7;B=0;Sa(1,L|0,+(+p[(k[m>>2]|0)+(b<<3)>>3]))|0;L=B;B=0;if(L&1){ba=66;break}B=0;wa(510,w|0,E|0);L=B;B=0;if(L&1){ba=66;break}B=0;ya(425,w|0)|0;L=B;B=0;if(L&1){ba=67;break}Yua(w);k[v>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(T);Ava(E);vva(F);b=b+1|0;if((b|0)>=(k[i>>2]|0))break a}if((ba|0)==56){b=Rb()|0;I=Q;Yua(e);Yua(T);Ava(E);ca=I;da=b;ba=59}else if((ba|0)==57){b=Rb()|0;ea=Q;fa=b;vva(F);Qb(fa|0)}else if((ba|0)==58){b=Rb()|0;ca=Q;da=b;ba=59}else if((ba|0)==66){b=Rb()|0;ga=Q;ha=b;ba=68}else if((ba|0)==67){b=Rb()|0;I=Q;Yua(w);ga=I;ha=b;ba=68}if((ba|0)==59){ea=ca;fa=da;vva(F);Qb(fa|0)}else if((ba|0)==68){k[v>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(T);Ava(E);vva(F);ia=ga;ja=ha;Qb(ja|0)}}while(0);b=x+56|0;I=x+4|0;k[x>>2]=27524;k[b>>2]=27544;B=0;wa(508,x+56|0,I|0);D=B;B=0;if(D&1){D=Rb()|0;ka=Q;la=D;vva(b);Qb(la|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[b>>2]=27488;B=0;va(448,I|0);D=B;B=0;do if(D&1){A=Rb()|0;na=Q;oa=A}else{k[I>>2]=27560;A=x+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[x+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,I|0,e|0);R=B;B=0;if(R&1){R=Rb()|0;L=Q;Yua(e);Yua(A);Ava(I);na=L;oa=R;break}Yua(e);B=0;Ia(40,x|0,149177,1)|0;R=B;B=0;do if(R&1)ba=82;else{B=0;wa(510,y|0,I|0);L=B;B=0;if(L&1){ba=82;break}B=0;ya(425,y|0)|0;L=B;B=0;if(L&1){L=Rb()|0;j=Q;Yua(y);pa=j;qa=L;break}Yua(y);k[x>>2]=27468;k[b>>2]=27488;k[I>>2]=27560;Yua(A);Ava(I);vva(b);L=k[s>>2]|0;if(L)Tqa(L);k[s>>2]=0;L=k[q>>2]|0;if(L)Tqa(L);k[q>>2]=0;L=k[o>>2]|0;if(L)Tqa(L);k[o>>2]=0;L=k[l>>2]|0;if(L)Tqa(L);k[l>>2]=0;L=k[m>>2]|0;if(!L){ra=k[n>>2]|0;k[a>>2]=ra;sa=+p[f>>3];r=d;return +sa}Tqa(L);ra=k[n>>2]|0;k[a>>2]=ra;sa=+p[f>>3];r=d;return +sa}while(0);if((ba|0)==82){R=Rb()|0;pa=Q;qa=R}k[x>>2]=27468;k[b>>2]=27488;k[I>>2]=27560;Yua(A);Ava(I);vva(b);ia=pa;ja=qa;Qb(ja|0)}while(0);ka=na;la=oa;vva(b);Qb(la|0)}else ba=50;while(0);if((ba|0)==50){G=Rb()|0;$=Q;aa=G}k[t>>2]=27468;k[z>>2]=27488;k[W>>2]=27560;Yua(H);Ava(W);vva(z);ia=$;ja=aa;Qb(ja|0)}while(0);X=Z;Y=_;vva(z);Qb(Y|0);return +(0.0)}function c0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,115558,48)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115607,72);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115680,15);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,214,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function d0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,115696,29)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115726,71);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115798,14);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,331,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function e0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;a=r;r=r+192|0;b=a+176|0;c=a+40|0;d=a+24|0;e=a+12|0;f=a;a=c+56|0;g=c+4|0;k[c>>2]=27524;k[a>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(a);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[a>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,c|0,115813,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,115833,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,115908,17);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,255,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[a>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(a);Qb(D|0)}while(0);i=m;j=n;vva(a);Qb(j|0)}function f0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0;b=r;r=r+1280|0;c=b+1264|0;d=b+1260|0;e=b+1256|0;f=b+16|0;g=b+8|0;h=b+1248|0;i=b+1232|0;j=b+1228|0;l=b+1212|0;m=b+1208|0;n=b+1192|0;o=b+1056|0;q=b+1236|0;s=b+904|0;t=b+1216|0;u=b+768|0;v=b+1196|0;w=b+616|0;x=b+1040|0;y=b+480|0;z=b+752|0;A=b+328|0;C=b+464|0;D=b+176|0;E=b+312|0;F=b+40|0;G=b+24|0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;H=a+44|0;cO(k[H>>2]|0,d,476);mO(k[H>>2]|0,0,759);cO(k[H>>2]|0,b+1252|0,199);dO(k[H>>2]|0,b,67);iO(k[H>>2]|0,h,0,177);k[n>>2]=0;I=a+20|0;J=a+24|0;K=a+28|0;L=a+36|0;M=a+40|0;$oa(n,k[I>>2]|0,k[J>>2]|0,k[K>>2]|0,k[L>>2]|0,k[M>>2]|0,k[H>>2]|0,115926,0);N=k[n>>2]|0;if(k[N>>2]|0){O=k[k[N+4>>2]>>2]|0;Fc[k[(k[O>>2]|0)+28>>2]&1023](O,e);O=k[n>>2]|0;if(!(k[O>>2]|0)){P=O;R=0}else{S=k[k[O+4>>2]>>2]|0;O=Hc[k[(k[S>>2]|0)+52>>2]&511](S)|0;P=k[n>>2]|0;R=O}}else{P=N;R=0}if(P){if((k[P>>2]|0)!=0?(N=k[P+4>>2]|0,(N|0)!=0):0){O=k[N>>2]|0;if(O)Ec[k[(k[O>>2]|0)+4>>2]&1023](O);Sqa(N)}Sqa(P)}P=k[e>>2]|0;N=Rqa(P>>>0>536870911?-1:P<<3)|0;j_(l,k[H>>2]|0,k[d>>2]|0);g0(m,k[d>>2]|0);a:do if(FY()|0){d=o+56|0;P=o+4|0;k[o>>2]=27524;k[d>>2]=27544;B=0;wa(508,o+56|0,P|0);O=B;B=0;if(O&1){O=Rb()|0;T=Q;U=O;vva(d);Qb(U|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[d>>2]=27488;B=0;va(448,P|0);O=B;B=0;do if(O&1){n=Rb()|0;V=Q;W=n}else{k[P>>2]=27560;n=o+36|0;k[n>>2]=0;k[n+4>>2]=0;k[n+8>>2]=0;k[n+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,P|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;X=Q;Yua(c);Yua(n);Ava(P);V=X;W=S;break}Yua(c);B=0;Ia(40,o|0,115932,28)|0;S=B;B=0;do if(!(S&1)?(B=0,wa(510,q|0,P|0),X=B,B=0,!(X&1)):0){B=0;ya(425,q|0)|0;X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(q);Z=X;_=Y;break}else{Yua(q);k[o>>2]=27468;k[d>>2]=27488;k[P>>2]=27560;Yua(n);Ava(P);vva(d);break a}}else aa=24;while(0);if((aa|0)==24){S=Rb()|0;Z=S;_=Q}k[o>>2]=27468;k[d>>2]=27488;k[P>>2]=27560;Yua(n);Ava(P);vva(d);ba=Z;ca=_;Qb(ba|0)}while(0);T=V;U=W;vva(d);Qb(U|0)}while(0);Ec[k[l>>2]&1023](a);b:do if(FY()|0){U=s+56|0;W=s+4|0;k[s>>2]=27524;k[U>>2]=27544;B=0;wa(508,s+56|0,W|0);V=B;B=0;if(V&1){V=Rb()|0;da=Q;ea=V;vva(U);Qb(ea|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[U>>2]=27488;B=0;va(448,W|0);V=B;B=0;do if(V&1){T=Rb()|0;fa=Q;ga=T}else{k[W>>2]=27560;T=s+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,W|0,c|0);_=B;B=0;if(_&1){_=Rb()|0;Z=Q;Yua(c);Yua(T);Ava(W);fa=Z;ga=_;break}Yua(c);B=0;Ia(40,s|0,115961,19)|0;_=B;B=0;do if(!(_&1)?(B=0,wa(510,t|0,W|0),Z=B,B=0,!(Z&1)):0){B=0;ya(425,t|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;o=Q;Yua(t);ha=Z;ia=o;break}else{Yua(t);k[s>>2]=27468;k[U>>2]=27488;k[W>>2]=27560;Yua(T);Ava(W);vva(U);break b}}else aa=40;while(0);if((aa|0)==40){_=Rb()|0;ha=_;ia=Q}k[s>>2]=27468;k[U>>2]=27488;k[W>>2]=27560;Yua(T);Ava(W);vva(U);ba=ha;ca=ia;Qb(ba|0)}while(0);da=fa;ea=ga;vva(U);Qb(ea|0)}while(0);Ec[k[m>>2]&1023](a);c:do if(FY()|0){m=u+56|0;ea=u+4|0;k[u>>2]=27524;k[m>>2]=27544;B=0;wa(508,u+56|0,ea|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ja=Q;ka=ga;vva(m);Qb(ka|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[m>>2]=27488;B=0;va(448,ea|0);ga=B;B=0;do if(ga&1){fa=Rb()|0;la=Q;na=fa}else{k[ea>>2]=27560;fa=u+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ea|0,c|0);da=B;B=0;if(da&1){da=Rb()|0;ia=Q;Yua(c);Yua(fa);Ava(ea);la=ia;na=da;break}Yua(c);B=0;Ia(40,u|0,115981,33)|0;da=B;B=0;do if(!(da&1)?(B=0,wa(510,v|0,ea|0),ia=B,B=0,!(ia&1)):0){B=0;ya(425,v|0)|0;ia=B;B=0;if(ia&1){ia=Rb()|0;ha=Q;Yua(v);oa=ia;pa=ha;break}else{Yua(v);k[u>>2]=27468;k[m>>2]=27488;k[ea>>2]=27560;Yua(fa);Ava(ea);vva(m);break c}}else aa=56;while(0);if((aa|0)==56){da=Rb()|0;oa=da;pa=Q}k[u>>2]=27468;k[m>>2]=27488;k[ea>>2]=27560;Yua(fa);Ava(ea);vva(m);ba=oa;ca=pa;Qb(ba|0)}while(0);ja=la;ka=na;vva(m);Qb(ka|0)}while(0);ki(a,f,i,0);ka=w+56|0;na=w+4|0;k[w>>2]=27524;k[ka>>2]=27544;B=0;wa(508,w+56|0,na|0);la=B;B=0;if(la&1){la=Rb()|0;qa=Q;ra=la;vva(ka);Qb(ra|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[ka>>2]=27488;B=0;va(448,na|0);la=B;B=0;do if(la&1){ja=Rb()|0;sa=Q;ta=ja}else{k[na>>2]=27560;ja=w+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);pa=B;B=0;if(pa&1){pa=Rb()|0;oa=Q;Yua(c);Yua(ja);Ava(na);sa=oa;ta=pa;break}Yua(c);B=0;pa=Ia(40,w|0,116015,29)|0;oa=B;B=0;do if(((!(oa&1)?(k[pa+(k[(k[pa>>2]|0)+-12>>2]|0)+12>>2]=12,k[pa+(k[(k[pa>>2]|0)+-12>>2]|0)+8>>2]=7,B=0,u=Sa(1,pa|0,+(+p[f>>3]))|0,v=B,B=0,!(v&1)):0)?(B=0,Ia(40,u|0,149177,1)|0,u=B,B=0,!(u&1)):0)?(B=0,wa(510,x|0,na|0),u=B,B=0,!(u&1)):0){B=0;ya(425,x|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(x);ua=u;xa=v;break}Yua(x);k[w>>2]=27468;k[ka>>2]=27488;k[na>>2]=27560;Yua(ja);Ava(na);vva(ka);v=k[i>>2]|0;if(v)Tqa(v);k[i>>2]=0;d:do if(FY()|0){v=y+56|0;u=y+4|0;k[y>>2]=27524;k[v>>2]=27544;B=0;wa(508,y+56|0,u|0);ea=B;B=0;if(ea&1){ea=Rb()|0;za=Q;Aa=ea;vva(v);Qb(Aa|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[v>>2]=27488;B=0;va(448,u|0);ea=B;B=0;do if(ea&1){ga=Rb()|0;Ba=Q;Ca=ga}else{k[u>>2]=27560;ga=y+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;da=Q;Yua(c);Yua(ga);Ava(u);Ba=da;Ca=U;break}Yua(c);B=0;Ia(40,y|0,116045,20)|0;U=B;B=0;do if(!(U&1)){B=0;wa(510,z|0,u|0);da=B;B=0;if(da&1){aa=90;break}B=0;ya(425,z|0)|0;da=B;B=0;if(da&1){da=Rb()|0;T=Q;Yua(z);Da=da;Ea=T;break}else{Yua(z);k[y>>2]=27468;k[v>>2]=27488;k[u>>2]=27560;Yua(ga);Ava(u);vva(v);break d}}else aa=90;while(0);if((aa|0)==90){U=Rb()|0;Da=U;Ea=Q}k[y>>2]=27468;k[v>>2]=27488;k[u>>2]=27560;Yua(ga);Ava(u);vva(v);ba=Da;ca=Ea;Qb(ba|0)}while(0);za=Ba;Aa=Ca;vva(v);Qb(Aa|0)}while(0);dpa(j,0,k[I>>2]|0,k[J>>2]|0,k[K>>2]|0,k[L>>2]|0,k[M>>2]|0,k[H>>2]|0);fa=k[e>>2]|0;if((fa|0)>0){u=k[j>>2]|0;ea=0;do{U=u+(ea<<3)|0;p[U>>3]=-+p[U>>3];ea=ea+1|0}while((ea|0)<(fa|0))}fa=Rqa(416)|0;ea=A+56|0;u=A+4|0;k[A>>2]=27524;k[ea>>2]=27544;B=0;wa(508,A+56|0,u|0);U=B;B=0;if(U&1){U=Rb()|0;Fa=Q;Ga=U;vva(ea);Qb(Ga|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[ea>>2]=27488;B=0;va(448,u|0);U=B;B=0;do if(U&1){T=Rb()|0;Ha=Q;Ja=T}else{k[u>>2]=27560;T=A+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);da=B;B=0;if(da&1){da=Rb()|0;ha=Q;Yua(c);Yua(T);Ava(u);Ha=ha;Ja=da;break}Yua(c);B=0;Ia(40,A|0,116066,26)|0;da=B;B=0;do if(da&1)aa=120;else{B=0;wa(510,C|0,u|0);ha=B;B=0;if(ha&1){aa=120;break}B=0;ya(425,C|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(C);Ka=ha;La=ia;break}Yua(C);k[A>>2]=27468;k[ea>>2]=27488;k[u>>2]=27560;Yua(T);Ava(u);vva(ea);ia=D+56|0;ha=D+4|0;k[D>>2]=27524;k[ia>>2]=27544;B=0;wa(508,D+56|0,ha|0);s=B;B=0;if(s&1){s=Rb()|0;Ma=Q;Na=s;vva(ia);Qb(Na|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[ia>>2]=27488;B=0;va(448,ha|0);s=B;B=0;do if(s&1){t=Rb()|0;Oa=Q;Pa=t}else{k[ha>>2]=27560;t=D+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[D+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ha|0,c|0);W=B;B=0;if(W&1){W=Rb()|0;V=Q;Yua(c);Yua(t);Ava(ha);Oa=V;Pa=W;break}Yua(c);B=0;Ia(40,D|0,116093,26)|0;W=B;B=0;do if(!(W&1)){B=0;wa(510,E|0,ha|0);V=B;B=0;if(V&1){aa=123;break}B=0;ya(425,E|0)|0;V=B;B=0;if(V&1){V=Rb()|0;d=Q;Yua(E);Qa=V;Ra=d;break}Yua(E);k[D>>2]=27468;k[ia>>2]=27488;k[ha>>2]=27560;Yua(t);Ava(ha);vva(ia);d=F+56|0;V=F+4|0;_=F+56|0;n=F+128|0;o=F+132|0;Z=F+36|0;q=F+52|0;P=0;while(1){Ta=+osa(1.0,0-P|0);O=k[e>>2]|0;if((O|0)>0){S=k[h>>2]|0;Y=0;do{p[N+(Y<<3)>>3]=+p[R+(Y<<3)>>3]+Ta*+p[S>>3];Y=Y+1|0}while((Y|0)<(O|0))}bpa(a,N);Ec[k[l>>2]&1023](a);ki(a,g,0,0);O=k[e>>2]|0;if((O|0)>0){Y=k[j>>2]|0;Ua=+p[k[h>>2]>>3];Va=0.0;S=0;while(1){Wa=Va+Ta*+p[Y+(S<<3)>>3]*Ua;S=S+1|0;if((S|0)>=(O|0)){Xa=Wa;break}else Va=Wa}}else Xa=0.0;Va=+$(+((+p[g>>3]-+p[f>>3])/Xa+-1.0));k[F>>2]=27524;k[d>>2]=27544;B=0;wa(508,_|0,V|0);O=B;B=0;if(O&1){aa=135;break}k[n>>2]=0;k[o>>2]=-1;k[F>>2]=27468;k[d>>2]=27488;B=0;va(448,V|0);O=B;B=0;if(O&1){aa=136;break}k[V>>2]=27560;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[q>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,V|0,c|0);O=B;B=0;if(O&1){aa=134;break}Yua(c);B=0;O=Ia(40,F|0,149175,1)|0;S=B;B=0;if(S&1){aa=148;break}k[O+(k[(k[O>>2]|0)+-12>>2]|0)+12>>2]=11;k[O+(k[(k[O>>2]|0)+-12>>2]|0)+8>>2]=5;B=0;S=Sa(1,O|0,+Ta)|0;O=B;B=0;if(O&1){aa=148;break}B=0;O=Ia(40,S|0,149175,1)|0;S=B;B=0;if(S&1){aa=148;break}k[O+(k[(k[O>>2]|0)+-12>>2]|0)+12>>2]=11;k[O+(k[(k[O>>2]|0)+-12>>2]|0)+8>>2]=5;B=0;S=Sa(1,O|0,+Va)|0;O=B;B=0;if(O&1){aa=148;break}B=0;Ia(40,S|0,149177,1)|0;S=B;B=0;if(S&1){aa=148;break}B=0;wa(510,G|0,V|0);S=B;B=0;if(S&1){aa=148;break}B=0;ya(425,G|0)|0;S=B;B=0;if(S&1){aa=149;break}Yua(G);k[F>>2]=27468;k[d>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(d);S=P<<1;p[fa+(S<<3)>>3]=Ta;p[fa+((S|1)<<3)>>3]=Va;P=P+1|0;if((P|0)>=26){aa=119;break}}if((aa|0)==119){P=a+48|0;q=k[P>>2]|0;o=Qqa(40)|0;B=0;n=ya(428,q|0)|0;_=B;B=0;do if(!(_&1)){k[o>>2]=27964;k[o+4>>2]=n+1;S=o+16|0;k[S>>2]=26;O=o+20|0;k[O>>2]=2;B=0;wa(512,o+8|0,764);Y=B;B=0;if(Y&1)break;k[o+24>>2]=0;p[o+32>>3]=0.0;Y=ma(k[O>>2]|0,k[S>>2]|0)|0;if(!Y)k[o+12>>2]=0;else{B=0;S=ya(422,(Y>>>0>536870911?-1:Y<<3)|0)|0;O=B;B=0;if(O&1)break;k[o+12>>2]=S;TEa(S|0,fa|0,Y<<3|0)|0}ih(q,o)|0;_oa(k[I>>2]|0,k[J>>2]|0,k[K>>2]|0,k[L>>2]|0,k[M>>2]|0,k[H>>2]|0,k[j>>2]|0);li(a,P);Tqa(fa);Y=k[j>>2]|0;if(Y)Tqa(Y);k[j>>2]=0;Tqa(N);if(!R){r=b;return}Tqa(R);r=b;return}while(0);P=Rb()|0;q=Q;Sqa(o);ba=P;ca=q;Qb(ba|0)}else if((aa|0)==134){q=Rb()|0;P=Q;Yua(c);Yua(Z);Ava(V);Ya=P;Za=q;aa=137}else if((aa|0)==135){q=Rb()|0;_a=Q;$a=q;vva(d);Qb($a|0)}else if((aa|0)==136){q=Rb()|0;Ya=Q;Za=q;aa=137}else if((aa|0)==148){q=Rb()|0;ab=q;bb=Q;aa=150}else if((aa|0)==149){q=Rb()|0;P=Q;Yua(G);ab=q;bb=P;aa=150}if((aa|0)==137){_a=Ya;$a=Za;vva(d);Qb($a|0)}else if((aa|0)==150){k[F>>2]=27468;k[d>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(d);ba=ab;ca=bb;Qb(ba|0)}}else aa=123;while(0);if((aa|0)==123){W=Rb()|0;Qa=W;Ra=Q}k[D>>2]=27468;k[ia>>2]=27488;k[ha>>2]=27560;Yua(t);Ava(ha);vva(ia);ba=Qa;ca=Ra;Qb(ba|0)}while(0);Ma=Oa;Na=Pa;vva(ia);Qb(Na|0)}while(0);if((aa|0)==120){da=Rb()|0;Ka=da;La=Q}k[A>>2]=27468;k[ea>>2]=27488;k[u>>2]=27560;Yua(T);Ava(u);vva(ea);ba=Ka;ca=La;Qb(ba|0)}while(0);Fa=Ha;Ga=Ja;vva(ea);Qb(Ga|0)}else aa=87;while(0);if((aa|0)==87){pa=Rb()|0;ua=pa;xa=Q}k[w>>2]=27468;k[ka>>2]=27488;k[na>>2]=27560;Yua(ja);Ava(na);vva(ka);ba=ua;ca=xa;Qb(ba|0)}while(0);qa=sa;ra=ta;vva(ka);Qb(ra|0)}function g0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 485:{i=528;k[a>>2]=i;r=c;return}case 487:{i=529;k[a>>2]=i;r=c;return}case 489:{i=517;k[a>>2]=i;r=c;return}case 518:case 499:{i=527;k[a>>2]=i;r=c;return}default:{c=e+56|0;i=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,i|0);a=B;B=0;if(a&1){a=Rb()|0;j=Q;l=a;vva(c);Qb(l|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,i|0);a=B;B=0;do if(a&1){m=Rb()|0;n=Q;o=m}else{k[i>>2]=27560;m=e+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,i|0,d|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(d);Yua(m);Ava(i);n=q;o=p;break}Yua(d);B=0;p=Ia(40,e|0,116120,45)|0;q=B;B=0;if((((!(q&1)?(B=0,q=ya(427,b|0)|0,s=B,B=0,!(s&1)):0)?(s=Lta(q)|0,B=0,t=Ia(40,p|0,q|0,s|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,t|0,116166,4)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,f|0,116171,91);t=B;B=0;do if(!(t&1)){B=0;eb(502,g|0,116263,34);q=B;B=0;if(q&1){q=Rb()|0;p=Q;Yua(f);u=p;v=q;break}B=0;wa(510,h|0,i|0);q=B;B=0;if(q&1){q=Rb()|0;w=Q;x=q;y=1}else{B=0;ua(163,s|0,f|0,g|0,41,h|0);q=B;B=0;if(q&1)z=1;else{B=0;eb(503,s|0,1240,229);B=0;z=0}q=Rb()|0;p=Q;Yua(h);w=p;x=q;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(m);Ava(i);vva(c);Qb(C|0)}}else{q=Rb()|0;u=Q;v=q}while(0);zb(s|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(m);Ava(i);vva(c);Qb(C|0)}t=Rb()|0;A=Q;C=t;k[e>>2]=27468;k[c>>2]=27488;k[i>>2]=27560;Yua(m);Ava(i);vva(c);Qb(C|0)}while(0);j=n;l=o;vva(c);Qb(l|0)}}}function h0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0;b=r;r=r+1584|0;c=b+1540|0;d=b+1500|0;e=b+1577|0;f=b+1576|0;g=b+1352|0;h=b+1528|0;j=b+1216|0;l=b+1516|0;m=b+1064|0;n=b+1504|0;o=b+1052|0;p=b+904|0;q=b+1488|0;s=b+768|0;t=b+1200|0;u=b+608|0;v=b+1040|0;w=b+472|0;x=b+756|0;y=b+320|0;z=b+744|0;A=b;C=b+168|0;D=b+456|0;E=b+32|0;F=b+304|0;G=b+20|0;H=b+8|0;I=a+44|0;bO(k[I>>2]|0,e,759);cO(k[I>>2]|0,d,118);a:do if(CY()|0){J=g+56|0;K=g+4|0;k[g>>2]=27524;k[J>>2]=27544;B=0;wa(508,g+56|0,K|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;N=L;vva(J);Qb(N|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);L=B;B=0;do if(L&1){O=Rb()|0;P=Q;R=O}else{k[K>>2]=27560;O=g+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,K|0,c|0);S=B;B=0;if(S&1){S=Rb()|0;T=Q;Yua(c);Yua(O);Ava(K);P=T;R=S;break}Yua(c);B=0;Ia(40,g|0,116298,25)|0;S=B;B=0;do if(!(S&1)?(B=0,wa(510,h|0,K|0),T=B,B=0,!(T&1)):0){B=0;ya(425,h|0)|0;T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(h);V=T;W=U;break}else{Yua(h);k[g>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(O);Ava(K);vva(J);break a}}else X=14;while(0);if((X|0)==14){S=Rb()|0;V=S;W=Q}k[g>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(O);Ava(K);vva(J);Y=V;Z=W;Qb(Y|0)}while(0);M=P;N=R;vva(J);Qb(N|0)}while(0);N=k[d>>2]|0;if((N|0)==119){o0(a);p0(a);_=k[d>>2]|0}else _=N;switch(_|0){case 119:{b:do if(CY()|0){_=j+56|0;N=j+4|0;k[j>>2]=27524;k[_>>2]=27544;B=0;wa(508,j+56|0,N|0);R=B;B=0;if(R&1){R=Rb()|0;$=Q;aa=R;vva(_);Qb(aa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[_>>2]=27488;B=0;va(448,N|0);R=B;B=0;do if(R&1){P=Rb()|0;ba=Q;ca=P}else{k[N>>2]=27560;P=j+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);M=B;B=0;if(M&1){M=Rb()|0;W=Q;Yua(c);Yua(P);Ava(N);ba=W;ca=M;break}Yua(c);B=0;Ia(40,j|0,116324,26)|0;M=B;B=0;do if(!(M&1)?(B=0,wa(510,l|0,N|0),W=B,B=0,!(W&1)):0){B=0;ya(425,l|0)|0;W=B;B=0;if(W&1){W=Rb()|0;V=Q;Yua(l);da=W;ea=V;break}else{Yua(l);k[j>>2]=27468;k[_>>2]=27488;k[N>>2]=27560;Yua(P);Ava(N);vva(_);break b}}else X=33;while(0);if((X|0)==33){M=Rb()|0;da=M;ea=Q}k[j>>2]=27468;k[_>>2]=27488;k[N>>2]=27560;Yua(P);Ava(N);vva(_);Y=da;Z=ea;Qb(Y|0)}while(0);$=ba;aa=ca;vva(_);Qb(aa|0)}while(0);xh(a,504);Woa(a,1);joa(a,699,768);if(!(i[e>>0]|0)){r=b;return}c:do if(CY()|0){aa=m+56|0;ca=m+4|0;k[m>>2]=27524;k[aa>>2]=27544;B=0;wa(508,m+56|0,ca|0);ba=B;B=0;if(ba&1){ba=Rb()|0;fa=Q;ga=ba;vva(aa);Qb(ga|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[aa>>2]=27488;B=0;va(448,ca|0);ba=B;B=0;do if(ba&1){$=Rb()|0;ha=Q;ia=$}else{k[ca>>2]=27560;$=m+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ca|0,c|0);ea=B;B=0;if(ea&1){ea=Rb()|0;da=Q;Yua(c);Yua($);Ava(ca);ha=da;ia=ea;break}Yua(c);B=0;Ia(40,m|0,116351,19)|0;ea=B;B=0;do if(!(ea&1)?(B=0,wa(510,n|0,ca|0),da=B,B=0,!(da&1)):0){B=0;ya(425,n|0)|0;da=B;B=0;if(da&1){da=Rb()|0;j=Q;Yua(n);ja=da;ka=j;break}else{Yua(n);k[m>>2]=27468;k[aa>>2]=27488;k[ca>>2]=27560;Yua($);Ava(ca);vva(aa);break c}}else X=50;while(0);if((X|0)==50){ea=Rb()|0;ja=ea;ka=Q}k[m>>2]=27468;k[aa>>2]=27488;k[ca>>2]=27560;Yua($);Ava(ca);vva(aa);Y=ja;Z=ka;Qb(Y|0)}while(0);fa=ha;ga=ia;vva(aa);Qb(ga|0)}while(0);k[o>>2]=k[9243];k[o+4>>2]=k[9244];k[o+8>>2]=k[9245];fi(a,a+48|0,o,3,1);d:do if(CY()|0){o=p+56|0;ga=p+4|0;k[p>>2]=27524;k[o>>2]=27544;B=0;wa(508,p+56|0,ga|0);ia=B;B=0;if(ia&1){ia=Rb()|0;la=Q;ma=ia;vva(o);Qb(ma|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[o>>2]=27488;B=0;va(448,ga|0);ia=B;B=0;do if(ia&1){ha=Rb()|0;na=Q;oa=ha}else{k[ga>>2]=27560;ha=p+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ga|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ka=Q;Yua(c);Yua(ha);Ava(ga);na=ka;oa=fa;break}Yua(c);B=0;Ia(40,p|0,116371,28)|0;fa=B;B=0;do if(!(fa&1)?(B=0,wa(510,q|0,ga|0),ka=B,B=0,!(ka&1)):0){B=0;ya(425,q|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;ja=Q;Yua(q);pa=ka;qa=ja;break}else{Yua(q);k[p>>2]=27468;k[o>>2]=27488;k[ga>>2]=27560;Yua(ha);Ava(ga);vva(o);break d}}else X=66;while(0);if((X|0)==66){fa=Rb()|0;pa=fa;qa=Q}k[p>>2]=27468;k[o>>2]=27488;k[ga>>2]=27560;Yua(ha);Ava(ga);vva(o);Y=pa;Z=qa;Qb(Y|0)}while(0);la=na;ma=oa;vva(o);Qb(ma|0)}while(0);CZ(a);r=b;return}case 122:{joa(a,123,124);bO(k[I>>2]|0,f,152);if(i[f>>0]|0){joa(a,127,128);joa(a,148,149)}i0(a);if(!(i[e>>0]|0)){r=b;return}e:do if(CY()|0){I=s+56|0;ma=s+4|0;k[s>>2]=27524;k[I>>2]=27544;B=0;wa(508,s+56|0,ma|0);oa=B;B=0;if(oa&1){oa=Rb()|0;ra=Q;sa=oa;vva(I);Qb(sa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[I>>2]=27488;B=0;va(448,ma|0);oa=B;B=0;do if(oa&1){na=Rb()|0;ta=Q;xa=na}else{k[ma>>2]=27560;na=s+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ma|0,c|0);la=B;B=0;if(la&1){la=Rb()|0;qa=Q;Yua(c);Yua(na);Ava(ma);ta=qa;xa=la;break}Yua(c);B=0;Ia(40,s|0,116351,19)|0;la=B;B=0;do if(!(la&1)?(B=0,wa(510,t|0,ma|0),qa=B,B=0,!(qa&1)):0){B=0;ya(425,t|0)|0;qa=B;B=0;if(qa&1){qa=Rb()|0;pa=Q;Yua(t);za=qa;Aa=pa;break}else{Yua(t);k[s>>2]=27468;k[I>>2]=27488;k[ma>>2]=27560;Yua(na);Ava(ma);vva(I);break e}}else X=86;while(0);if((X|0)==86){la=Rb()|0;za=la;Aa=Q}k[s>>2]=27468;k[I>>2]=27488;k[ma>>2]=27560;Yua(na);Ava(ma);vva(I);Y=za;Z=Aa;Qb(Y|0)}while(0);ra=ta;sa=xa;vva(I);Qb(sa|0)}while(0);if(!(i[f>>0]|0)){k[c>>2]=k[9255];k[c+4>>2]=k[9256];k[c+8>>2]=k[9257];fi(a,a+48|0,c,3,1)}else{f=c;sa=36984;xa=f+36|0;do{k[f>>2]=k[sa>>2];f=f+4|0;sa=sa+4|0}while((f|0)<(xa|0));fi(a,a+48|0,c,9,1)}f:do if(CY()|0){sa=u+56|0;f=u+4|0;k[u>>2]=27524;k[sa>>2]=27544;B=0;wa(508,u+56|0,f|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ba=Q;Ca=xa;vva(sa);Qb(Ca|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[sa>>2]=27488;B=0;va(448,f|0);xa=B;B=0;do if(xa&1){ta=Rb()|0;Da=Q;Ea=ta}else{k[f>>2]=27560;ta=u+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,f|0,c|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Aa=Q;Yua(c);Yua(ta);Ava(f);Da=Aa;Ea=ra;break}Yua(c);B=0;Ia(40,u|0,116371,28)|0;ra=B;B=0;do if(!(ra&1)?(B=0,wa(510,v|0,f|0),Aa=B,B=0,!(Aa&1)):0){B=0;ya(425,v|0)|0;Aa=B;B=0;if(Aa&1){Aa=Rb()|0;za=Q;Yua(v);Fa=Aa;Ga=za;break}else{Yua(v);k[u>>2]=27468;k[sa>>2]=27488;k[f>>2]=27560;Yua(ta);Ava(f);vva(sa);break f}}else X=105;while(0);if((X|0)==105){ra=Rb()|0;Fa=ra;Ga=Q}k[u>>2]=27468;k[sa>>2]=27488;k[f>>2]=27560;Yua(ta);Ava(f);vva(sa);Y=Fa;Z=Ga;Qb(Y|0)}while(0);Ba=Da;Ca=Ea;vva(sa);Qb(Ca|0)}while(0);CZ(a);r=b;return}case 165:{xh(a,507);Woa(a,1);g:do if(CY()|0){Ca=w+56|0;Ea=w+4|0;k[w>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,w+56|0,Ea|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Ha=Q;Ja=Da;vva(Ca);Qb(Ja|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[Ca>>2]=27488;B=0;va(448,Ea|0);Da=B;B=0;do if(Da&1){Ba=Rb()|0;Ka=Q;La=Ba}else{k[Ea>>2]=27560;Ba=w+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ea|0,c|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Fa=Q;Yua(c);Yua(Ba);Ava(Ea);Ka=Fa;La=Ga;break}Yua(c);B=0;Ia(40,w|0,116400,23)|0;Ga=B;B=0;do if(!(Ga&1)?(B=0,wa(510,x|0,Ea|0),Fa=B,B=0,!(Fa&1)):0){B=0;ya(425,x|0)|0;Fa=B;B=0;if(Fa&1){Fa=Rb()|0;u=Q;Yua(x);Ma=Fa;Na=u;break}else{Yua(x);k[w>>2]=27468;k[Ca>>2]=27488;k[Ea>>2]=27560;Yua(Ba);Ava(Ea);vva(Ca);break g}}else X=122;while(0);if((X|0)==122){Ga=Rb()|0;Ma=Ga;Na=Q}k[w>>2]=27468;k[Ca>>2]=27488;k[Ea>>2]=27560;Yua(Ba);Ava(Ea);vva(Ca);Y=Ma;Z=Na;Qb(Y|0)}while(0);Ha=Ka;Ja=La;vva(Ca);Qb(Ja|0)}while(0);Ja=Qqa(4)|0;k[Ja>>2]=39164;Uca(Ja,a);Ec[k[(k[Ja>>2]|0)+4>>2]&1023](Ja);if(!(i[e>>0]|0)){r=b;return}h:do if(CY()|0){e=y+56|0;Ja=y+4|0;k[y>>2]=27524;k[e>>2]=27544;B=0;wa(508,y+56|0,Ja|0);La=B;B=0;if(La&1){La=Rb()|0;Oa=Q;Pa=La;vva(e);Qb(Pa|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[e>>2]=27488;B=0;va(448,Ja|0);La=B;B=0;do if(La&1){Ka=Rb()|0;Qa=Q;Ra=Ka}else{k[Ja>>2]=27560;Ka=y+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Na=Q;Yua(c);Yua(Ka);Ava(Ja);Qa=Na;Ra=Ha;break}Yua(c);B=0;Ia(40,y|0,116351,19)|0;Ha=B;B=0;do if(!(Ha&1)?(B=0,wa(510,z|0,Ja|0),Na=B,B=0,!(Na&1)):0){B=0;ya(425,z|0)|0;Na=B;B=0;if(Na&1){Na=Rb()|0;Ma=Q;Yua(z);Sa=Na;Ta=Ma;break}else{Yua(z);k[y>>2]=27468;k[e>>2]=27488;k[Ja>>2]=27560;Yua(Ka);Ava(Ja);vva(e);break h}}else X=139;while(0);if((X|0)==139){Ha=Rb()|0;Sa=Ha;Ta=Q}k[y>>2]=27468;k[e>>2]=27488;k[Ja>>2]=27560;Yua(Ka);Ava(Ja);vva(e);Y=Sa;Z=Ta;Qb(Y|0)}while(0);Oa=Qa;Pa=Ra;vva(e);Qb(Pa|0)}while(0);Pa=A;k[Pa>>2]=166;k[Pa+4>>2]=167;fi(a,a+48|0,A,2,1);i:do if(CY()|0){A=C+56|0;Pa=C+4|0;k[C>>2]=27524;k[A>>2]=27544;B=0;wa(508,C+56|0,Pa|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;Ua=Q;Va=Ra;vva(A);Qb(Va|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[A>>2]=27488;B=0;va(448,Pa|0);Ra=B;B=0;do if(Ra&1){Qa=Rb()|0;Wa=Q;Ya=Qa}else{k[Pa>>2]=27560;Qa=C+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Pa|0,c|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Ta=Q;Yua(c);Yua(Qa);Ava(Pa);Wa=Ta;Ya=Oa;break}Yua(c);B=0;Ia(40,C|0,116371,28)|0;Oa=B;B=0;do if(!(Oa&1)?(B=0,wa(510,D|0,Pa|0),Ta=B,B=0,!(Ta&1)):0){B=0;ya(425,D|0)|0;Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Sa=Q;Yua(D);Za=Ta;_a=Sa;break}else{Yua(D);k[C>>2]=27468;k[A>>2]=27488;k[Pa>>2]=27560;Yua(Qa);Ava(Pa);vva(A);break i}}else X=155;while(0);if((X|0)==155){Oa=Rb()|0;Za=Oa;_a=Q}k[C>>2]=27468;k[A>>2]=27488;k[Pa>>2]=27560;Yua(Qa);Ava(Pa);vva(A);Y=Za;Z=_a;Qb(Y|0)}while(0);Ua=Wa;Va=Ya;vva(A);Qb(Va|0)}while(0);CZ(a);r=b;return}default:{b=E+56|0;a=E+4|0;k[E>>2]=27524;k[b>>2]=27544;B=0;wa(508,E+56|0,a|0);Va=B;B=0;if(Va&1){Va=Rb()|0;$a=Q;ab=Va;vva(b);Qb(ab|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[b>>2]=27488;B=0;va(448,a|0);Va=B;B=0;do if(Va&1){Ya=Rb()|0;bb=Q;cb=Ya}else{k[a>>2]=27560;Ya=E+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ua=Q;Yua(c);Yua(Ya);Ava(a);bb=Ua;cb=Wa;break}Yua(c);B=0;Wa=Ia(40,E|0,116424,16)|0;Ua=B;B=0;j:do if((((!(Ua&1)?(B=0,_a=ya(427,k[d>>2]|0)|0,Za=B,B=0,!(Za&1)):0)?(Za=Lta(_a)|0,B=0,C=Ia(40,Wa|0,_a|0,Za|0)|0,Za=B,B=0,!(Za&1)):0)?(B=0,Za=Ia(40,C|0,146481,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,Za|0,0)|0,Za=B,B=0,!(Za&1)):0){Za=Ab(20)|0;B=0;eb(502,F|0,116441,71);C=B;B=0;do if(!(C&1)){B=0;eb(502,G|0,116513,14);_a=B;B=0;if(_a&1){_a=Rb()|0;D=Q;Yua(F);db=D;fb=_a;break}B=0;wa(510,H|0,a|0);_a=B;B=0;if(_a&1){_a=Rb()|0;gb=1;hb=_a;ib=Q}else{B=0;ua(163,Za|0,F|0,G|0,100,H|0);_a=B;B=0;if(_a&1)jb=1;else{B=0;eb(503,Za|0,1240,229);B=0;jb=0}_a=Rb()|0;D=Q;Yua(H);gb=jb;hb=_a;ib=D}Yua(G);Yua(F);if(gb){db=ib;fb=hb}else{kb=ib;lb=hb;break j}}else{D=Rb()|0;db=Q;fb=D}while(0);zb(Za|0);kb=db;lb=fb}else X=177;while(0);if((X|0)==177){Wa=Rb()|0;kb=Q;lb=Wa}k[E>>2]=27468;k[b>>2]=27488;k[a>>2]=27560;Yua(Ya);Ava(a);vva(b);Y=lb;Z=kb;Qb(Y|0)}while(0);$a=bb;ab=cb;vva(b);Qb(ab|0)}}}function i0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Gc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0.0,Sc=0.0,Tc=0.0,Uc=0.0,Vc=0.0,Wc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0.0,dd=0.0,ed=0.0,fd=0,gd=0,hd=0,jd=0.0,kd=0.0,ld=0,md=0.0,nd=0.0,od=0.0,pd=0,qd=0.0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0;b=r;r=r+3136|0;c=b+3108|0;d=b+3092|0;e=b+3088|0;f=b+3084|0;g=b+3068|0;h=b+3052|0;j=b+3036|0;l=b+3020|0;m=b+3016|0;n=b+3012|0;o=b+3120|0;q=b+2984|0;s=b+2968|0;u=b+2964|0;v=b+24|0;w=b+16|0;x=b+8|0;y=b;z=b+2792|0;A=b+3096|0;C=b+2640|0;D=b+3072|0;E=b+2504|0;F=b+3056|0;G=b+3040|0;H=b+3024|0;I=b+2352|0;J=b+3e3|0;K=b+2988|0;L=b+2972|0;M=b+2216|0;N=b+2952|0;O=b+2064|0;P=b+2940|0;R=b+1912|0;S=b+2928|0;T=b+1776|0;U=b+2776|0;V=b+1624|0;W=b+2488|0;X=b+2200|0;Y=b+2048|0;Z=b+1472|0;_=b+1760|0;aa=b+1336|0;ba=b+1608|0;ca=b+1320|0;da=b+1168|0;ea=b+1184|0;fa=b+880|0;ga=b+1032|0;ha=b+728|0;ia=b+440|0;ja=b+288|0;ka=b+896|0;la=b+140|0;ma=b+128|0;na=b+116|0;oa=b+744|0;pa=b+104|0;qa=b+592|0;ra=b+92|0;sa=b+456|0;ta=b+80|0;xa=b+304|0;za=b+68|0;Aa=b+152|0;Ba=b+56|0;Ca=b+44|0;Da=b+32|0;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;xh(a,505);Ea=a+44|0;bO(k[Ea>>2]|0,o,152);cO(k[Ea>>2]|0,u,132);dO(k[Ea>>2]|0,w,133);Fa=i[o>>0]|0;Aoa(d,a);Ga=a+24|0;Koa(e,k[d>>2]|0,k[Ga>>2]|0,k[Ea>>2]|0);if(!(i[o>>0]|0)){Ha=0;Ja=0}else{Ka=Qqa(4)|0;k[Ka>>2]=39240;La=Qqa(4)|0;k[La>>2]=39316;xh(a,506);Aoa(f,a);oda(Ka,a);wda(La,a);Ha=La;Ja=Ka}Ka=z+56|0;La=z+4|0;Ma=z+56|0;Na=z+128|0;Oa=z+132|0;Pa=z+36|0;Qa=z+52|0;Ra=C+56|0;Ta=C+4|0;Ua=C+56|0;Va=C+128|0;Wa=C+132|0;Ya=C+36|0;Za=C+52|0;_a=M+56|0;$a=M+4|0;ab=M+56|0;bb=M+128|0;cb=M+132|0;db=M+36|0;fb=M+52|0;gb=O+56|0;hb=O+4|0;ib=O+56|0;jb=O+128|0;kb=O+132|0;lb=O+36|0;mb=O+52|0;nb=xa+56|0;ob=xa+4|0;pb=xa+56|0;qb=xa+128|0;rb=xa+132|0;sb=xa+36|0;tb=xa+52|0;ub=oa+56|0;vb=oa+4|0;wb=oa+56|0;xb=oa+128|0;yb=oa+132|0;Bb=oa+36|0;Cb=oa+52|0;Db=qa+56|0;Eb=qa+4|0;Fb=qa+56|0;Gb=qa+128|0;Hb=qa+132|0;Ib=qa+36|0;Jb=qa+52|0;Kb=sa+56|0;Lb=sa+4|0;Mb=sa+56|0;Nb=sa+128|0;Ob=sa+132|0;Pb=sa+36|0;Sb=sa+52|0;Tb=R+56|0;Ub=R+4|0;Vb=R+56|0;Wb=R+128|0;Xb=R+132|0;Yb=R+36|0;Zb=R+52|0;_b=T+56|0;$b=T+4|0;ac=T+56|0;bc=T+128|0;cc=T+132|0;dc=T+36|0;ec=T+52|0;fc=Z+56|0;gc=Z+4|0;hc=Z+56|0;ic=Z+128|0;jc=Z+132|0;kc=Z+36|0;lc=Z+52|0;mc=ea+56|0;nc=ea+4|0;oc=ea+56|0;pc=ea+128|0;qc=ea+132|0;rc=ea+36|0;sc=ea+52|0;tc=Fa<<24>>24!=1;Fa=1;uc=0;vc=0;wc=0;a:while(1){if(i[o>>0]|0){xc=k[d>>2]|0;yc=Qqa(8)|0;B=0;va(485,yc|0);zc=B;B=0;if(zc&1){Ac=yc;Bc=7;break}if(k[xc>>2]|0){zc=k[xc+4>>2]|0;xc=Qqa(4)|0;Cc=k[zc>>2]|0;Dc=Hc[k[(k[Cc>>2]|0)+36>>2]&511](Cc)|0;k[xc>>2]=Dc;Cc=k[zc>>2]|0;Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,Dc);k[yc+4>>2]=xc}xc=k[d>>2]|0;if(k[xc>>2]|0){Dc=k[k[xc+4>>2]>>2]|0;Fc[k[(k[Dc>>2]|0)+60>>2]&1023](Dc,k[k[yc+4>>2]>>2]|0)}Dc=k[f>>2]|0;xc=Qqa(8)|0;B=0;va(485,xc|0);Cc=B;B=0;if(Cc&1){Gc=xc;Bc=13;break}if(k[Dc>>2]|0){Cc=k[Dc+4>>2]|0;Dc=Qqa(4)|0;zc=k[Cc>>2]|0;Ic=Hc[k[(k[zc>>2]|0)+36>>2]&511](zc)|0;k[Dc>>2]=Ic;zc=k[Cc>>2]|0;Fc[k[(k[zc>>2]|0)+60>>2]&1023](zc,Ic);k[xc+4>>2]=Dc}Dc=k[f>>2]|0;if(!(k[Dc>>2]|0)){Jc=xc;Kc=yc}else{Ic=k[k[Dc+4>>2]>>2]|0;Fc[k[(k[Ic>>2]|0)+60>>2]&1023](Ic,k[k[xc+4>>2]>>2]|0);Jc=xc;Kc=yc}}else{Jc=vc;Kc=wc}xh(a,505);uoa(a,1,656);uoa(a,0,645);Eh(a);oO(k[Ea>>2]|0,162,161);Noa(a);yc=1;while(1){xc=k[e>>2]|0;Ic=Qqa(8)|0;B=0;va(485,Ic|0);Dc=B;B=0;if(Dc&1){Lc=Ic;Bc=20;break a}if(k[xc>>2]|0){Dc=k[xc+4>>2]|0;xc=Qqa(4)|0;zc=k[Dc>>2]|0;Cc=Hc[k[(k[zc>>2]|0)+36>>2]&511](zc)|0;k[xc>>2]=Cc;zc=k[Dc>>2]|0;Fc[k[(k[zc>>2]|0)+60>>2]&1023](zc,Cc);k[Ic+4>>2]=xc}xc=k[e>>2]|0;if(!(k[xc>>2]|0))Mc=yc;else{Cc=k[k[xc+4>>2]>>2]|0;Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,k[k[Ic+4>>2]>>2]|0);Mc=yc}while(1){if(CY()|0){k[z>>2]=27524;k[Ka>>2]=27544;B=0;wa(508,Ma|0,La|0);Cc=B;B=0;if(Cc&1){Bc=29;break a}k[Na>>2]=0;k[Oa>>2]=-1;k[z>>2]=27468;k[Ka>>2]=27488;B=0;va(448,La|0);Cc=B;B=0;if(Cc&1){Bc=30;break a}k[La>>2]=27560;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[Qa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,La|0,c|0);Cc=B;B=0;if(Cc&1){Bc=28;break a}Yua(c);B=0;Ia(40,z|0,116528,28)|0;Cc=B;B=0;if(Cc&1){Bc=37;break a}B=0;wa(510,A|0,La|0);Cc=B;B=0;if(Cc&1){Bc=37;break a}B=0;ya(425,A|0)|0;Cc=B;B=0;if(Cc&1){Bc=38;break a}Yua(A);k[z>>2]=27468;k[Ka>>2]=27488;k[La>>2]=27560;Yua(Pa);Ava(La);vva(Ka)}ooa(j,l,m,n,v,a);poa(h,k[Ga>>2]|0,505);Loa(k[m>>2]|0,k[l>>2]|0,k[h>>2]|0,0);Cc=k[l>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Cc=k[e>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Poa(e,k[j>>2]|0,k[m>>2]|0,Ic,k[n>>2]|0,k[Ea>>2]|0);Cc=k[j>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Cc=k[m>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Cc=k[n>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Cc=k[d>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}Roa(d,k[e>>2]|0,k[h>>2]|0,k[Ga>>2]|0,k[Ea>>2]|0,0);Cc=k[h>>2]|0;if(Cc){if((k[Cc>>2]|0)!=0?(xc=k[Cc+4>>2]|0,(xc|0)!=0):0){zc=k[xc>>2]|0;if(zc)Ec[k[(k[zc>>2]|0)+4>>2]&1023](zc);Sqa(xc)}Sqa(Cc)}xoa(a,k[d>>2]|0);Moa(q,s,a);if(EY()|0){k[C>>2]=27524;k[Ra>>2]=27544;B=0;wa(508,Ua|0,Ta|0);Cc=B;B=0;if(Cc&1){Bc=94;break a}k[Va>>2]=0;k[Wa>>2]=-1;k[C>>2]=27468;k[Ra>>2]=27488;B=0;va(448,Ta|0);Cc=B;B=0;if(Cc&1){Bc=95;break a}k[Ta>>2]=27560;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Za>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ta|0,c|0);Cc=B;B=0;if(Cc&1){Bc=93;break a}Yua(c);B=0;Cc=Ia(40,C|0,116557,37)|0;xc=B;B=0;if(xc&1){Bc=104;break a}B=0;xc=Xa(242,Cc|0,k[s>>2]|0)|0;Cc=B;B=0;if(Cc&1){Bc=104;break a}B=0;Ia(40,xc|0,149177,1)|0;xc=B;B=0;if(xc&1){Bc=104;break a}B=0;wa(510,D|0,Ta|0);xc=B;B=0;if(xc&1){Bc=104;break a}B=0;ya(425,D|0)|0;xc=B;B=0;if(xc&1){Bc=105;break a}Yua(D);k[C>>2]=27468;k[Ra>>2]=27488;k[Ta>>2]=27560;Yua(Ya);Ava(Ta);vva(Ra)}if((Mc|0)>=(k[u>>2]|0)){Bc=108;break a}xc=Mc+1|0;if(!(k[s>>2]|0)){Nc=xc;break}else Mc=xc}xc=Qqa(8)|0;B=0;va(485,xc|0);Cc=B;B=0;if(Cc&1){Oc=xc;Bc=136;break a}if((k[Ic>>2]|0)!=0?(Cc=Ic+4|0,zc=k[Cc>>2]|0,Dc=Qqa(4)|0,Pc=k[zc>>2]|0,Qc=Hc[k[(k[Pc>>2]|0)+36>>2]&511](Pc)|0,k[Dc>>2]=Qc,Pc=k[zc>>2]|0,Fc[k[(k[Pc>>2]|0)+60>>2]&1023](Pc,Qc),k[xc+4>>2]=Dc,(k[Ic>>2]|0)!=0):0){Qc=k[k[Cc>>2]>>2]|0;Fc[k[(k[Qc>>2]|0)+60>>2]&1023](Qc,k[Dc>>2]|0)}if((k[xc>>2]|0)!=0?(Dc=xc+4|0,Qc=k[k[Dc>>2]>>2]|0,Xc[k[(k[Qc>>2]|0)+48>>2]&63](Qc,k[k[(k[e>>2]|0)+4>>2]>>2]|0,-1.0),(k[xc>>2]|0)!=0):0){Qc=k[k[Dc>>2]>>2]|0;Rc=+id[k[(k[Qc>>2]|0)+64>>2]&63](Qc,1);if((k[xc>>2]|0)!=0?(Qc=k[Dc>>2]|0,(Qc|0)!=0):0){Dc=k[Qc>>2]|0;if(Dc)Ec[k[(k[Dc>>2]|0)+4>>2]&1023](Dc);Sqa(Qc);Sc=Rc}else Sc=Rc}else Sc=0.0;Sqa(xc);if(!(k[Ic>>2]|0))Tc=0.0;else{xc=k[k[Ic+4>>2]>>2]|0;Tc=+id[k[(k[xc>>2]|0)+64>>2]&63](xc,1)}Rc=+$(+Sc);p[t>>3]=Rc;xc=k[t+4>>2]|0;if(xc>>>0>2146435072|(xc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=150;break a}Rc=+$(+Tc);p[t>>3]=Rc;xc=k[t+4>>2]|0;if(xc>>>0>2146435072|(xc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=150;break a}Rc=Sc==0.0&Tc==0.0?1.0e-06:Tc;if(EY()|0){k[M>>2]=27524;k[_a>>2]=27544;B=0;wa(508,ab|0,$a|0);xc=B;B=0;if(xc&1){Bc=179;break a}k[bb>>2]=0;k[cb>>2]=-1;k[M>>2]=27468;k[_a>>2]=27488;B=0;va(448,$a|0);xc=B;B=0;if(xc&1){Bc=180;break a}k[$a>>2]=27560;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[fb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$a|0,c|0);xc=B;B=0;if(xc&1){Bc=178;break a}Yua(c);k[M+(k[(k[M>>2]|0)+-12>>2]|0)+12>>2]=50;xc=M+(k[(k[M>>2]|0)+-12>>2]|0)+4|0;k[xc>>2]=k[xc>>2]&-177|32;B=0;xc=Ia(40,M|0,116784,40)|0;Qc=B;B=0;if(Qc&1){Bc=191;break a}Uc=Sc/Rc;B=0;Qc=Sa(1,xc|0,+(Uc*100.0))|0;xc=B;B=0;if(xc&1){Bc=191;break a}B=0;xc=Ia(40,Qc|0,116825,21)|0;Qc=B;B=0;if(Qc&1){Bc=191;break a}B=0;Qc=Sa(1,xc|0,+(+p[w>>3]*10.0*100.0))|0;xc=B;B=0;if(xc&1){Bc=191;break a}B=0;Ia(40,Qc|0,148274,3)|0;Qc=B;B=0;if(Qc&1){Bc=191;break a}B=0;wa(510,N|0,$a|0);Qc=B;B=0;if(Qc&1){Bc=191;break a}B=0;ya(425,N|0)|0;Qc=B;B=0;if(Qc&1){Bc=192;break a}Yua(N);k[M>>2]=27468;k[_a>>2]=27488;k[$a>>2]=27560;Yua(db);Ava($a);vva(_a);Vc=Uc}else Vc=Sc/Rc;if(Vc<+p[w>>3]*10.0)if(EY()|0){k[O>>2]=27524;k[gb>>2]=27544;B=0;wa(508,ib|0,hb|0);Qc=B;B=0;if(Qc&1){Bc=200;break a}k[jb>>2]=0;k[kb>>2]=-1;k[O>>2]=27468;k[gb>>2]=27488;B=0;va(448,hb|0);Qc=B;B=0;if(Qc&1){Bc=201;break a}k[hb>>2]=27560;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[mb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hb|0,c|0);Qc=B;B=0;if(Qc&1){Bc=199;break a}Yua(c);B=0;Ia(40,O|0,116847,41)|0;Qc=B;B=0;if(Qc&1){Bc=208;break a}B=0;wa(510,P|0,hb|0);Qc=B;B=0;if(Qc&1){Bc=208;break a}B=0;ya(425,P|0)|0;Qc=B;B=0;if(Qc&1){Bc=209;break a}Yua(P);k[O>>2]=27468;k[gb>>2]=27488;k[hb>>2]=27560;Yua(lb);Ava(hb);vva(gb);Wc=1}else Wc=1;else Wc=0;if((k[Ic>>2]|0)!=0?(Qc=k[Ic+4>>2]|0,(Qc|0)!=0):0){xc=k[Qc>>2]|0;if(xc)Ec[k[(k[xc>>2]|0)+4>>2]&1023](xc);Sqa(Qc)}Sqa(Ic);if(Wc)break;else yc=Nc}pO(k[Ea>>2]|0,+p[v>>3],164);uoa(a,1,645);xoa(a,k[d>>2]|0);voa(a,+p[v>>3],164);if(!(i[o>>0]|0))Yc=uc;else{xh(a,506);ui(a,x);oda(Ja,a);uoa(a,1,656);uoa(a,0,645);oO(k[Ea>>2]|0,163,161);yc=uc;while(1){Qc=k[f>>2]|0;xc=Qqa(8)|0;B=0;va(485,xc|0);Dc=B;B=0;if(Dc&1){Zc=xc;Bc=221;break a}if(k[Qc>>2]|0){Dc=k[Qc+4>>2]|0;Qc=Qqa(4)|0;Cc=k[Dc>>2]|0;Pc=Hc[k[(k[Cc>>2]|0)+36>>2]&511](Cc)|0;k[Qc>>2]=Pc;Cc=k[Dc>>2]|0;Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,Pc);k[xc+4>>2]=Qc}Qc=k[f>>2]|0;if(k[Qc>>2]|0){Pc=k[k[Qc+4>>2]>>2]|0;Fc[k[(k[Pc>>2]|0)+60>>2]&1023](Pc,k[k[xc+4>>2]>>2]|0)}if(CY()|0){k[R>>2]=27524;k[Tb>>2]=27544;B=0;wa(508,Vb|0,Ub|0);Pc=B;B=0;if(Pc&1){Bc=230;break a}k[Wb>>2]=0;k[Xb>>2]=-1;k[R>>2]=27468;k[Tb>>2]=27488;B=0;va(448,Ub|0);Pc=B;B=0;if(Pc&1){Bc=231;break a}k[Ub>>2]=27560;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[Zb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ub|0,c|0);Pc=B;B=0;if(Pc&1){Bc=229;break a}Yua(c);B=0;Ia(40,R|0,116889,28)|0;Pc=B;B=0;if(Pc&1){Bc=238;break a}B=0;wa(510,S|0,Ub|0);Pc=B;B=0;if(Pc&1){Bc=238;break a}B=0;ya(425,S|0)|0;Pc=B;B=0;if(Pc&1){Bc=239;break a}Yua(S);k[R>>2]=27468;k[Tb>>2]=27488;k[Ub>>2]=27560;Yua(Yb);Ava(Ub);vva(Tb)}xh(a,492);vi(a,y);oda(Ja,a);oO(k[Ea>>2]|0,129,576);Voa(a);oO(k[Ea>>2]|0,130,576);Voa(a);xh(a,506);Jda(Ha,a);ui(a,x);oda(Ja,a);if(CY()|0){k[T>>2]=27524;k[_b>>2]=27544;B=0;wa(508,ac|0,$b|0);Pc=B;B=0;if(Pc&1){Bc=246;break a}k[bc>>2]=0;k[cc>>2]=-1;k[T>>2]=27468;k[_b>>2]=27488;B=0;va(448,$b|0);Pc=B;B=0;if(Pc&1){Bc=247;break a}k[$b>>2]=27560;k[dc>>2]=0;k[dc+4>>2]=0;k[dc+8>>2]=0;k[dc+12>>2]=0;k[ec>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$b|0,c|0);Pc=B;B=0;if(Pc&1){Bc=245;break a}Yua(c);B=0;Ia(40,T|0,116918,23)|0;Pc=B;B=0;if(Pc&1){Bc=254;break a}B=0;wa(510,U|0,$b|0);Pc=B;B=0;if(Pc&1){Bc=254;break a}B=0;ya(425,U|0)|0;Pc=B;B=0;if(Pc&1){Bc=255;break a}Yua(U);k[T>>2]=27468;k[_b>>2]=27488;k[$b>>2]=27560;Yua(dc);Ava($b);vva(_b)}ooa(j,l,m,n,0,a);poa(h,k[Ga>>2]|0,506);Loa(k[m>>2]|0,k[l>>2]|0,k[h>>2]|0,0);Pc=k[l>>2]|0;if(Pc){if((k[Pc>>2]|0)!=0?(Qc=k[Pc+4>>2]|0,(Qc|0)!=0):0){Cc=k[Qc>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Qc)}Sqa(Pc)}Pc=k[g>>2]|0;if(Pc){if((k[Pc>>2]|0)!=0?(Qc=k[Pc+4>>2]|0,(Qc|0)!=0):0){Cc=k[Qc>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Qc)}Sqa(Pc)}Poa(g,k[j>>2]|0,k[m>>2]|0,yc,k[n>>2]|0,k[Ea>>2]|0);Pc=k[j>>2]|0;if(Pc){if((k[Pc>>2]|0)!=0?(Qc=k[Pc+4>>2]|0,(Qc|0)!=0):0){Cc=k[Qc>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Qc)}Sqa(Pc)}Pc=k[m>>2]|0;if(Pc){if((k[Pc>>2]|0)!=0?(Qc=k[Pc+4>>2]|0,(Qc|0)!=0):0){Cc=k[Qc>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Qc)}Sqa(Pc)}Pc=k[n>>2]|0;if(Pc){if((k[Pc>>2]|0)!=0?(Qc=k[Pc+4>>2]|0,(Qc|0)!=0):0){Cc=k[Qc>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Qc)}Sqa(Pc)}if(yc){do if(k[yc>>2]|0){Pc=k[yc+4>>2]|0;if(!Pc)break;Qc=k[Pc>>2]|0;if(Qc)Ec[k[(k[Qc>>2]|0)+4>>2]&1023](Qc);Sqa(Pc)}while(0);Sqa(yc)}Ic=k[g>>2]|0;Pc=Qqa(8)|0;B=0;va(485,Pc|0);Qc=B;B=0;if(Qc&1){_c=Pc;Bc=301;break a}if(k[Ic>>2]|0){Qc=k[Ic+4>>2]|0;Ic=Qqa(4)|0;Cc=k[Qc>>2]|0;Dc=Hc[k[(k[Cc>>2]|0)+36>>2]&511](Cc)|0;k[Ic>>2]=Dc;Cc=k[Qc>>2]|0;Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,Dc);k[Pc+4>>2]=Ic}Ic=k[g>>2]|0;if(k[Ic>>2]|0){Dc=k[k[Ic+4>>2]>>2]|0;Fc[k[(k[Dc>>2]|0)+60>>2]&1023](Dc,k[k[Pc+4>>2]>>2]|0)}Dc=k[f>>2]|0;if(Dc){do if(k[Dc>>2]|0){Ic=k[Dc+4>>2]|0;if(!Ic)break;Cc=k[Ic>>2]|0;if(Cc)Ec[k[(k[Cc>>2]|0)+4>>2]&1023](Cc);Sqa(Ic)}while(0);Sqa(Dc)}Roa(f,k[g>>2]|0,k[h>>2]|0,k[Ga>>2]|0,k[Ea>>2]|0,0);Ic=k[h>>2]|0;if(Ic){do if(k[Ic>>2]|0){Cc=k[Ic+4>>2]|0;if(!Cc)break;Qc=k[Cc>>2]|0;if(Qc)Ec[k[(k[Qc>>2]|0)+4>>2]&1023](Qc);Sqa(Cc)}while(0);Sqa(Ic)}xoa(a,k[f>>2]|0);Moa(q,s,a);Dc=Qqa(8)|0;B=0;va(485,Dc|0);Cc=B;B=0;if(Cc&1){$c=Dc;Bc=321;break a}do if(k[xc>>2]|0){Cc=xc+4|0;Qc=k[Cc>>2]|0;zc=Qqa(4)|0;ad=k[Qc>>2]|0;bd=Hc[k[(k[ad>>2]|0)+36>>2]&511](ad)|0;k[zc>>2]=bd;ad=k[Qc>>2]|0;Fc[k[(k[ad>>2]|0)+60>>2]&1023](ad,bd);k[Dc+4>>2]=zc;if(!(k[xc>>2]|0))break;bd=k[k[Cc>>2]>>2]|0;Fc[k[(k[bd>>2]|0)+60>>2]&1023](bd,k[zc>>2]|0)}while(0);do if(!(k[Dc>>2]|0))cd=0.0;else{Ic=Dc+4|0;zc=k[k[Ic>>2]>>2]|0;Xc[k[(k[zc>>2]|0)+48>>2]&63](zc,k[k[(k[f>>2]|0)+4>>2]>>2]|0,-1.0);if(!(k[Dc>>2]|0)){cd=0.0;break}zc=k[k[Ic>>2]>>2]|0;Rc=+id[k[(k[zc>>2]|0)+64>>2]&63](zc,1);if(!(k[Dc>>2]|0)){cd=Rc;break}zc=k[Ic>>2]|0;if(!zc){cd=Rc;break}Ic=k[zc>>2]|0;if(Ic)Ec[k[(k[Ic>>2]|0)+4>>2]&1023](Ic);Sqa(zc);cd=Rc}while(0);Sqa(Dc);if(!(k[xc>>2]|0))dd=0.0;else{zc=k[k[xc+4>>2]>>2]|0;dd=+id[k[(k[zc>>2]|0)+64>>2]&63](zc,1)}Rc=+$(+cd);p[t>>3]=Rc;zc=k[t+4>>2]|0;if(zc>>>0>2146435072|(zc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=335;break a}Rc=+$(+dd);p[t>>3]=Rc;zc=k[t+4>>2]|0;if(zc>>>0>2146435072|(zc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=335;break a}Rc=cd==0.0&dd==0.0?1.0e-06:dd;if(EY()|0){k[Z>>2]=27524;k[fc>>2]=27544;B=0;wa(508,hc|0,gc|0);zc=B;B=0;if(zc&1){Bc=364;break a}k[ic>>2]=0;k[jc>>2]=-1;k[Z>>2]=27468;k[fc>>2]=27488;B=0;va(448,gc|0);zc=B;B=0;if(zc&1){Bc=365;break a}k[gc>>2]=27560;k[kc>>2]=0;k[kc+4>>2]=0;k[kc+8>>2]=0;k[kc+12>>2]=0;k[lc>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gc|0,c|0);zc=B;B=0;if(zc&1){Bc=363;break a}Yua(c);k[Z+(k[(k[Z>>2]|0)+-12>>2]|0)+12>>2]=50;zc=Z+(k[(k[Z>>2]|0)+-12>>2]|0)+4|0;k[zc>>2]=k[zc>>2]&-177|32;B=0;zc=Ia(40,Z|0,116942,35)|0;Ic=B;B=0;if(Ic&1){Bc=376;break a}Uc=cd/Rc;B=0;Ic=Sa(1,zc|0,+(Uc*100.0))|0;zc=B;B=0;if(zc&1){Bc=376;break a}B=0;zc=Ia(40,Ic|0,116825,21)|0;Ic=B;B=0;if(Ic&1){Bc=376;break a}B=0;Ic=Sa(1,zc|0,+(+p[w>>3]*10.0*100.0))|0;zc=B;B=0;if(zc&1){Bc=376;break a}B=0;Ia(40,Ic|0,148274,3)|0;Ic=B;B=0;if(Ic&1){Bc=376;break a}B=0;wa(510,_|0,gc|0);Ic=B;B=0;if(Ic&1){Bc=376;break a}B=0;ya(425,_|0)|0;Ic=B;B=0;if(Ic&1){Bc=377;break a}Yua(_);k[Z>>2]=27468;k[fc>>2]=27488;k[gc>>2]=27560;Yua(kc);Ava(gc);vva(fc);ed=Uc}else ed=cd/Rc;Ic=ed<+p[w>>3]*10.0;if((k[u>>2]|0)<2){Bc=380;break a}do if(k[xc>>2]|0){zc=k[xc+4>>2]|0;if(!zc)break;bd=k[zc>>2]|0;if(bd)Ec[k[(k[bd>>2]|0)+4>>2]&1023](bd);Sqa(zc)}while(0);Sqa(xc);if(Ic){fd=Pc;break}else yc=Pc}if(CY()|0){k[ea>>2]=27524;k[mc>>2]=27544;B=0;wa(508,oc|0,nc|0);yc=B;B=0;if(yc&1){Bc=416;break}k[pc>>2]=0;k[qc>>2]=-1;k[ea>>2]=27468;k[mc>>2]=27488;B=0;va(448,nc|0);yc=B;B=0;if(yc&1){Bc=417;break}k[nc>>2]=27560;k[rc>>2]=0;k[rc+4>>2]=0;k[rc+8>>2]=0;k[rc+12>>2]=0;k[sc>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nc|0,c|0);yc=B;B=0;if(yc&1){Bc=415;break}Yua(c);B=0;Ia(40,ea|0,117016,16)|0;yc=B;B=0;if(yc&1){Bc=424;break}B=0;wa(510,fa|0,nc|0);yc=B;B=0;if(yc&1){Bc=424;break}B=0;ya(425,fa|0)|0;yc=B;B=0;if(yc&1){Bc=425;break}Yua(fa);k[ea>>2]=27468;k[mc>>2]=27488;k[nc>>2]=27560;Yua(rc);Ava(nc);vva(mc)}uoa(a,1,645);xoa(a,k[f>>2]|0);xda(Ha,a);Yc=fd}if(tc){gd=Yc;Bc=619;break}yc=Qqa(8)|0;B=0;va(485,yc|0);Dc=B;B=0;if(Dc&1){hd=yc;Bc=431;break}if((k[Kc>>2]|0)!=0?(Dc=Kc+4|0,zc=k[Dc>>2]|0,bd=Qqa(4)|0,Cc=k[zc>>2]|0,ad=Hc[k[(k[Cc>>2]|0)+36>>2]&511](Cc)|0,k[bd>>2]=ad,Cc=k[zc>>2]|0,Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,ad),k[yc+4>>2]=bd,(k[Kc>>2]|0)!=0):0){ad=k[k[Dc>>2]>>2]|0;Fc[k[(k[ad>>2]|0)+60>>2]&1023](ad,k[bd>>2]|0)}if((k[yc>>2]|0)!=0?(bd=yc+4|0,ad=k[k[bd>>2]>>2]|0,Xc[k[(k[ad>>2]|0)+48>>2]&63](ad,k[k[(k[d>>2]|0)+4>>2]>>2]|0,-1.0),(k[yc>>2]|0)!=0):0){ad=k[k[bd>>2]>>2]|0;Rc=+id[k[(k[ad>>2]|0)+64>>2]&63](ad,1);if((k[yc>>2]|0)!=0?(ad=k[bd>>2]|0,(ad|0)!=0):0){bd=k[ad>>2]|0;if(bd)Ec[k[(k[bd>>2]|0)+4>>2]&1023](bd);Sqa(ad);jd=Rc}else jd=Rc}else jd=0.0;Sqa(yc);if(k[Kc>>2]|0){yc=Kc+4|0;ad=k[k[yc>>2]>>2]|0;Rc=+id[k[(k[ad>>2]|0)+64>>2]&63](ad,1);if((k[Kc>>2]|0)!=0?(ad=k[yc>>2]|0,(ad|0)!=0):0){yc=k[ad>>2]|0;if(yc)Ec[k[(k[yc>>2]|0)+4>>2]&1023](yc);Sqa(ad);kd=Rc}else kd=Rc}else kd=0.0;Sqa(Kc);Rc=+$(+jd);p[t>>3]=Rc;ad=k[t+4>>2]|0;if(ad>>>0>2146435072|(ad|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=449;break}Rc=+$(+kd);p[t>>3]=Rc;ad=k[t+4>>2]|0;if(ad>>>0>2146435072|(ad|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=449;break}Rc=jd==0.0&kd==0.0?1.0e-06:kd;ad=Qqa(8)|0;B=0;va(485,ad|0);yc=B;B=0;if(yc&1){ld=ad;Bc=474;break}if((k[Jc>>2]|0)!=0?(yc=Jc+4|0,bd=k[yc>>2]|0,Dc=Qqa(4)|0,Cc=k[bd>>2]|0,zc=Hc[k[(k[Cc>>2]|0)+36>>2]&511](Cc)|0,k[Dc>>2]=zc,Cc=k[bd>>2]|0,Fc[k[(k[Cc>>2]|0)+60>>2]&1023](Cc,zc),k[ad+4>>2]=Dc,(k[Jc>>2]|0)!=0):0){zc=k[k[yc>>2]>>2]|0;Fc[k[(k[zc>>2]|0)+60>>2]&1023](zc,k[Dc>>2]|0)}if((k[ad>>2]|0)!=0?(Dc=ad+4|0,zc=k[k[Dc>>2]>>2]|0,Xc[k[(k[zc>>2]|0)+48>>2]&63](zc,k[k[(k[f>>2]|0)+4>>2]>>2]|0,-1.0),(k[ad>>2]|0)!=0):0){zc=k[k[Dc>>2]>>2]|0;Uc=+id[k[(k[zc>>2]|0)+64>>2]&63](zc,1);if((k[ad>>2]|0)!=0?(zc=k[Dc>>2]|0,(zc|0)!=0):0){Dc=k[zc>>2]|0;if(Dc)Ec[k[(k[Dc>>2]|0)+4>>2]&1023](Dc);Sqa(zc);md=Uc}else md=Uc}else md=0.0;Sqa(ad);if(k[Jc>>2]|0){ad=Jc+4|0;zc=k[k[ad>>2]>>2]|0;Uc=+id[k[(k[zc>>2]|0)+64>>2]&63](zc,1);if((k[Jc>>2]|0)!=0?(zc=k[ad>>2]|0,(zc|0)!=0):0){ad=k[zc>>2]|0;if(ad)Ec[k[(k[ad>>2]|0)+4>>2]&1023](ad);Sqa(zc);nd=Uc}else nd=Uc}else nd=0.0;Sqa(Jc);Uc=+$(+md);p[t>>3]=Uc;zc=k[t+4>>2]|0;if(zc>>>0>2146435072|(zc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=492;break}Uc=+$(+nd);p[t>>3]=Uc;zc=k[t+4>>2]|0;if(zc>>>0>2146435072|(zc|0)==2146435072&(k[t>>2]|0)>>>0>0){Bc=492;break}Uc=+p[w>>3];od=+$(+Uc);p[t>>3]=od;zc=k[t+4>>2]|0;do if(zc>>>0>2146435072|(zc|0)==2146435072&(k[t>>2]|0)>>>0>0){k[xa>>2]=27524;k[nb>>2]=27544;B=0;wa(508,pb|0,ob|0);ad=B;B=0;if(ad&1){Bc=579;break a}k[qb>>2]=0;k[rb>>2]=-1;k[xa>>2]=27468;k[nb>>2]=27488;B=0;va(448,ob|0);ad=B;B=0;if(ad&1){Bc=580;break a}k[ob>>2]=27560;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[tb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ob|0,c|0);ad=B;B=0;if(ad&1){Bc=578;break a}Yua(c);k[xa+(k[(k[xa>>2]|0)+-12>>2]|0)+12>>2]=50;ad=xa+(k[(k[xa>>2]|0)+-12>>2]|0)+4|0;k[ad>>2]=k[ad>>2]&-177|32;B=0;ad=Ia(40,xa|0,117201,25)|0;Dc=B;B=0;if(Dc&1){Bc=589;break a}B=0;Dc=Sa(1,ad|0,+(jd/Rc*100.0))|0;ad=B;B=0;if(ad&1){Bc=589;break a}B=0;Ia(40,Dc|0,148274,3)|0;Dc=B;B=0;if(Dc&1){Bc=589;break a}B=0;wa(510,za|0,ob|0);Dc=B;B=0;if(Dc&1){Bc=589;break a}B=0;ya(425,za|0)|0;Dc=B;B=0;if(Dc&1){Bc=590;break a}Yua(za);k[xa>>2]=27468;k[nb>>2]=27488;k[ob>>2]=27560;Yua(sb);Ava(ob);vva(nb);pd=0}else{od=md/(md==0.0&nd==0.0?1.0e-06:nd);qd=jd/Rc;Dc=EY()|0;if(od<Uc&qd<Uc){if(!Dc){pd=1;break}k[oa>>2]=27524;k[ub>>2]=27544;B=0;wa(508,wb|0,vb|0);ad=B;B=0;if(ad&1){Bc=522;break a}k[xb>>2]=0;k[yb>>2]=-1;k[oa>>2]=27468;k[ub>>2]=27488;B=0;va(448,vb|0);ad=B;B=0;if(ad&1){Bc=523;break a}k[vb>>2]=27560;k[Bb>>2]=0;k[Bb+4>>2]=0;k[Bb+8>>2]=0;k[Bb+12>>2]=0;k[Cb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,vb|0,c|0);ad=B;B=0;if(ad&1){Bc=521;break a}Yua(c);k[oa+(k[(k[oa>>2]|0)+-12>>2]|0)+12>>2]=50;ad=oa+(k[(k[oa>>2]|0)+-12>>2]|0)+4|0;k[ad>>2]=k[ad>>2]&-177|32;B=0;ad=Ia(40,oa|0,117101,20)|0;yc=B;B=0;if(yc&1){Bc=532;break a}B=0;yc=Xa(242,ad|0,Fa|0)|0;ad=B;B=0;if(ad&1){Bc=532;break a}B=0;Ia(40,yc|0,117122,13)|0;yc=B;B=0;if(yc&1){Bc=532;break a}B=0;wa(510,pa|0,vb|0);yc=B;B=0;if(yc&1){Bc=532;break a}B=0;ya(425,pa|0)|0;yc=B;B=0;if(yc&1){Bc=533;break a}Yua(pa);k[oa>>2]=27468;k[ub>>2]=27488;k[vb>>2]=27560;Yua(Bb);Ava(vb);vva(ub);pd=1;break}if(Dc){k[qa>>2]=27524;k[Db>>2]=27544;B=0;wa(508,Fb|0,Eb|0);Dc=B;B=0;if(Dc&1){Bc=540;break a}k[Gb>>2]=0;k[Hb>>2]=-1;k[qa>>2]=27468;k[Db>>2]=27488;B=0;va(448,Eb|0);Dc=B;B=0;if(Dc&1){Bc=541;break a}k[Eb>>2]=27560;k[Ib>>2]=0;k[Ib+4>>2]=0;k[Ib+8>>2]=0;k[Ib+12>>2]=0;k[Jb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Eb|0,c|0);Dc=B;B=0;if(Dc&1){Bc=539;break a}Yua(c);k[qa+(k[(k[qa>>2]|0)+-12>>2]|0)+12>>2]=50;Dc=qa+(k[(k[qa>>2]|0)+-12>>2]|0)+4|0;k[Dc>>2]=k[Dc>>2]&-177|32;B=0;Dc=Ia(40,qa|0,117136,34)|0;yc=B;B=0;if(yc&1){Bc=552;break a}B=0;yc=Sa(1,Dc|0,+(qd*100.0))|0;Dc=B;B=0;if(Dc&1){Bc=552;break a}B=0;Dc=Ia(40,yc|0,116825,21)|0;yc=B;B=0;if(yc&1){Bc=552;break a}B=0;yc=Sa(1,Dc|0,+(+p[w>>3]*100.0))|0;Dc=B;B=0;if(Dc&1){Bc=552;break a}B=0;Ia(40,yc|0,148274,3)|0;yc=B;B=0;if(yc&1){Bc=552;break a}B=0;wa(510,ra|0,Eb|0);yc=B;B=0;if(yc&1){Bc=552;break a}B=0;ya(425,ra|0)|0;yc=B;B=0;if(yc&1){Bc=553;break a}Yua(ra);k[qa>>2]=27468;k[Db>>2]=27488;k[Eb>>2]=27560;Yua(Ib);Ava(Eb);vva(Db)}if(!(EY()|0)){pd=0;break}k[sa>>2]=27524;k[Kb>>2]=27544;B=0;wa(508,Mb|0,Lb|0);yc=B;B=0;if(yc&1){Bc=560;break a}k[Nb>>2]=0;k[Ob>>2]=-1;k[sa>>2]=27468;k[Kb>>2]=27488;B=0;va(448,Lb|0);yc=B;B=0;if(yc&1){Bc=561;break a}k[Lb>>2]=27560;k[Pb>>2]=0;k[Pb+4>>2]=0;k[Pb+8>>2]=0;k[Pb+12>>2]=0;k[Sb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Lb|0,c|0);yc=B;B=0;if(yc&1){Bc=559;break a}Yua(c);k[sa+(k[(k[sa>>2]|0)+-12>>2]|0)+12>>2]=50;yc=sa+(k[(k[sa>>2]|0)+-12>>2]|0)+4|0;k[yc>>2]=k[yc>>2]&-177|32;B=0;yc=Ia(40,sa|0,117171,29)|0;Dc=B;B=0;if(Dc&1){Bc=572;break a}B=0;Dc=Sa(1,yc|0,+(od*100.0))|0;yc=B;B=0;if(yc&1){Bc=572;break a}B=0;yc=Ia(40,Dc|0,116825,21)|0;Dc=B;B=0;if(Dc&1){Bc=572;break a}B=0;Dc=Sa(1,yc|0,+(+p[w>>3]*100.0))|0;yc=B;B=0;if(yc&1){Bc=572;break a}B=0;Ia(40,Dc|0,148274,3)|0;Dc=B;B=0;if(Dc&1){Bc=572;break a}B=0;wa(510,ta|0,Lb|0);Dc=B;B=0;if(Dc&1){Bc=572;break a}B=0;ya(425,ta|0)|0;Dc=B;B=0;if(Dc&1){Bc=573;break a}Yua(ta);k[sa>>2]=27468;k[Kb>>2]=27488;k[Lb>>2]=27560;Yua(Pb);Ava(Lb);vva(Kb);pd=0}while(0);if((Fa|0)>=(k[u>>2]|0)){Bc=593;break}if(pd){gd=Yc;Bc=619;break}else{tc=0;Fa=Fa+1|0;uc=Yc;vc=Jc;wc=Kc}}switch(Bc|0){case 7:{Kc=Rb()|0;Sqa(Ac);Qb(Kc|0);break}case 13:{Kc=Rb()|0;Sqa(Gc);Qb(Kc|0);break}case 20:{Kc=Rb()|0;Sqa(Lc);Qb(Kc|0);break}case 28:{Kc=Rb()|0;Lc=Q;Yua(c);Yua(Pa);Ava(La);rd=Lc;sd=Kc;Bc=31;break}case 29:{Kc=Rb()|0;td=Q;ud=Kc;vva(Ka);Qb(ud|0);break}case 30:{Kc=Rb()|0;rd=Q;sd=Kc;Bc=31;break}case 37:{Kc=Rb()|0;vd=Q;wd=Kc;Bc=39;break}case 38:{Kc=Rb()|0;Lc=Q;Yua(A);vd=Lc;wd=Kc;Bc=39;break}case 93:{Kc=Rb()|0;Lc=Q;Yua(c);Yua(Ya);Ava(Ta);xd=Lc;yd=Kc;Bc=96;break}case 94:{Kc=Rb()|0;zd=Q;Ad=Kc;vva(Ra);Qb(Ad|0);break}case 95:{Kc=Rb()|0;xd=Q;yd=Kc;Bc=96;break}case 104:{Kc=Rb()|0;Bd=Q;Cd=Kc;Bc=106;break}case 105:{Kc=Rb()|0;Lc=Q;Yua(D);Bd=Lc;Cd=Kc;Bc=106;break}case 108:{Kc=E+56|0;Lc=E+4|0;k[E>>2]=27524;k[Kc>>2]=27544;B=0;wa(508,E+56|0,Lc|0);D=B;B=0;if(D&1){D=Rb()|0;Dd=Q;Ed=D;vva(Kc);Qb(Ed|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Kc>>2]=27488;B=0;va(448,Lc|0);D=B;B=0;do if(D&1){A=Rb()|0;Fd=Q;Gd=A}else{k[Lc>>2]=27560;A=E+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Lc|0,c|0);Gc=B;B=0;if(Gc&1){Gc=Rb()|0;Ac=Q;Yua(c);Yua(A);Ava(Lc);Fd=Ac;Gd=Gc;break}Yua(c);B=0;Gc=Ia(40,E|0,116595,42)|0;Ac=B;B=0;b:do if(((!(Ac&1)?(B=0,wc=Xa(242,Gc|0,k[u>>2]|0)|0,Jc=B,B=0,!(Jc&1)):0)?(B=0,Jc=Ia(40,wc|0,116638,10)|0,wc=B,B=0,!(wc&1)):0)?(B=0,Xa(239,Jc|0,0)|0,Jc=B,B=0,!(Jc&1)):0){Jc=Ab(20)|0;B=0;eb(502,F|0,116649,101);wc=B;B=0;do if(!(wc&1)){B=0;eb(502,G|0,116751,32);vc=B;B=0;if(vc&1){vc=Rb()|0;Yc=Q;Yua(F);Hd=Yc;Id=vc;break}B=0;wa(510,H|0,Lc|0);vc=B;B=0;if(vc&1){vc=Rb()|0;Jd=1;Kd=Q;Ld=vc}else{B=0;ua(163,Jc|0,F|0,G|0,121,H|0);vc=B;B=0;if(vc&1)Md=1;else{B=0;eb(503,Jc|0,1240,229);B=0;Md=0}vc=Rb()|0;Yc=Q;Yua(H);Jd=Md;Kd=Yc;Ld=vc}Yua(G);Yua(F);if(Jd){Hd=Kd;Id=Ld}else{Nd=Kd;Od=Ld;break b}}else{vc=Rb()|0;Hd=Q;Id=vc}while(0);zb(Jc|0);Nd=Hd;Od=Id}else Bc=125;while(0);if((Bc|0)==125){Gc=Rb()|0;Nd=Q;Od=Gc}k[E>>2]=27468;k[Kc>>2]=27488;k[Lc>>2]=27560;Yua(A);Ava(Lc);vva(Kc);Pd=Nd;Qd=Od;Qb(Qd|0)}while(0);Dd=Fd;Ed=Gd;vva(Kc);Qb(Ed|0);break}case 136:{Ed=Rb()|0;Sqa(Oc);Qb(Ed|0);break}case 150:{Ed=I+56|0;Oc=I+4|0;k[I>>2]=27524;k[Ed>>2]=27544;B=0;wa(508,I+56|0,Oc|0);Kc=B;B=0;if(Kc&1){Kc=Rb()|0;Rd=Q;Sd=Kc;vva(Ed);Qb(Sd|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[Ed>>2]=27488;B=0;va(448,Oc|0);Kc=B;B=0;do if(Kc&1){Gd=Rb()|0;Td=Q;Ud=Gd}else{k[Oc>>2]=27560;Gd=I+36|0;k[Gd>>2]=0;k[Gd+4>>2]=0;k[Gd+8>>2]=0;k[Gd+12>>2]=0;k[I+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Oc|0,c|0);Fd=B;B=0;if(Fd&1){Fd=Rb()|0;Dd=Q;Yua(c);Yua(Gd);Ava(Oc);Td=Dd;Ud=Fd;break}Yua(c);B=0;Fd=Ia(40,I|0,148282,29)|0;Dd=B;B=0;c:do if(!(Dd&1)?(B=0,Xa(239,Fd|0,0)|0,Od=B,B=0,!(Od&1)):0){Od=Ab(20)|0;B=0;eb(502,J|0,116649,101);Nd=B;B=0;do if(!(Nd&1)){B=0;eb(502,K|0,116751,32);Lc=B;B=0;if(Lc&1){Lc=Rb()|0;E=Q;Yua(J);Vd=E;Wd=Lc;break}B=0;wa(510,L|0,Oc|0);Lc=B;B=0;if(Lc&1){Lc=Rb()|0;Xd=1;Yd=Q;Zd=Lc}else{B=0;ua(163,Od|0,J|0,K|0,139,L|0);Lc=B;B=0;if(Lc&1)_d=1;else{B=0;eb(503,Od|0,1240,229);B=0;_d=0}Lc=Rb()|0;E=Q;Yua(L);Xd=_d;Yd=E;Zd=Lc}Yua(K);Yua(J);if(Xd){Vd=Yd;Wd=Zd}else{$d=Yd;ae=Zd;break c}}else{Lc=Rb()|0;Vd=Q;Wd=Lc}while(0);zb(Od|0);$d=Vd;ae=Wd}else Bc=165;while(0);if((Bc|0)==165){Fd=Rb()|0;$d=Q;ae=Fd}k[I>>2]=27468;k[Ed>>2]=27488;k[Oc>>2]=27560;Yua(Gd);Ava(Oc);vva(Ed);Pd=$d;Qd=ae;Qb(Qd|0)}while(0);Rd=Td;Sd=Ud;vva(Ed);Qb(Sd|0);break}case 178:{Sd=Rb()|0;Ed=Q;Yua(c);Yua(db);Ava($a);be=Ed;ce=Sd;Bc=181;break}case 179:{Sd=Rb()|0;de=Q;ee=Sd;vva(_a);Qb(ee|0);break}case 180:{Sd=Rb()|0;be=Q;ce=Sd;Bc=181;break}case 191:{Sd=Rb()|0;fe=Q;ge=Sd;Bc=193;break}case 192:{Sd=Rb()|0;Ed=Q;Yua(N);fe=Ed;ge=Sd;Bc=193;break}case 199:{Sd=Rb()|0;Ed=Q;Yua(c);Yua(lb);Ava(hb);he=Ed;ie=Sd;Bc=202;break}case 200:{Sd=Rb()|0;je=Q;ke=Sd;vva(gb);Qb(ke|0);break}case 201:{Sd=Rb()|0;he=Q;ie=Sd;Bc=202;break}case 208:{Sd=Rb()|0;le=Q;me=Sd;Bc=210;break}case 209:{Sd=Rb()|0;Ed=Q;Yua(P);le=Ed;me=Sd;Bc=210;break}case 221:{Sd=Rb()|0;Sqa(Zc);Qb(Sd|0);break}case 229:{Sd=Rb()|0;Zc=Q;Yua(c);Yua(Yb);Ava(Ub);ne=Zc;oe=Sd;Bc=232;break}case 230:{Sd=Rb()|0;pe=Q;qe=Sd;vva(Tb);Qb(qe|0);break}case 231:{Sd=Rb()|0;ne=Q;oe=Sd;Bc=232;break}case 238:{Sd=Rb()|0;re=Q;se=Sd;Bc=240;break}case 239:{Sd=Rb()|0;Zc=Q;Yua(S);re=Zc;se=Sd;Bc=240;break}case 245:{Sd=Rb()|0;Zc=Q;Yua(c);Yua(dc);Ava($b);te=Zc;ue=Sd;Bc=248;break}case 246:{Sd=Rb()|0;ve=Q;we=Sd;vva(_b);Qb(we|0);break}case 247:{Sd=Rb()|0;te=Q;ue=Sd;Bc=248;break}case 254:{Sd=Rb()|0;xe=Q;ye=Sd;Bc=256;break}case 255:{Sd=Rb()|0;Zc=Q;Yua(U);xe=Zc;ye=Sd;Bc=256;break}case 301:{Sd=Rb()|0;Sqa(_c);Qb(Sd|0);break}case 321:{Sd=Rb()|0;Sqa($c);Qb(Sd|0);break}case 335:{Sd=V+56|0;$c=V+4|0;k[V>>2]=27524;k[Sd>>2]=27544;B=0;wa(508,V+56|0,$c|0);_c=B;B=0;if(_c&1){_c=Rb()|0;ze=Q;Ae=_c;vva(Sd);Qb(Ae|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[Sd>>2]=27488;B=0;va(448,$c|0);_c=B;B=0;do if(_c&1){Zc=Rb()|0;Be=Q;Ce=Zc}else{k[$c>>2]=27560;Zc=V+36|0;k[Zc>>2]=0;k[Zc+4>>2]=0;k[Zc+8>>2]=0;k[Zc+12>>2]=0;k[V+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$c|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;S=Q;Yua(c);Yua(Zc);Ava($c);Be=S;Ce=U;break}Yua(c);B=0;U=Ia(40,V|0,148282,29)|0;S=B;B=0;d:do if(!(S&1)?(B=0,Xa(239,U|0,0)|0,Ed=B,B=0,!(Ed&1)):0){Ed=Ab(20)|0;B=0;eb(502,W|0,116649,101);P=B;B=0;do if(!(P&1)){B=0;eb(502,X|0,116751,32);N=B;B=0;if(N&1){N=Rb()|0;Ud=Q;Yua(W);De=Ud;Ee=N;break}B=0;wa(510,Y|0,$c|0);N=B;B=0;if(N&1){N=Rb()|0;Fe=1;Ge=Q;He=N}else{B=0;ua(163,Ed|0,W|0,X|0,209,Y|0);N=B;B=0;if(N&1)Ie=1;else{B=0;eb(503,Ed|0,1240,229);B=0;Ie=0}N=Rb()|0;Ud=Q;Yua(Y);Fe=Ie;Ge=Ud;He=N}Yua(X);Yua(W);if(Fe){De=Ge;Ee=He}else{Je=Ge;Ke=He;break d}}else{N=Rb()|0;De=Q;Ee=N}while(0);zb(Ed|0);Je=De;Ke=Ee}else Bc=350;while(0);if((Bc|0)==350){U=Rb()|0;Je=Q;Ke=U}k[V>>2]=27468;k[Sd>>2]=27488;k[$c>>2]=27560;Yua(Zc);Ava($c);vva(Sd);Pd=Je;Qd=Ke;Qb(Qd|0)}while(0);ze=Be;Ae=Ce;vva(Sd);Qb(Ae|0);break}case 363:{Ae=Rb()|0;Sd=Q;Yua(c);Yua(kc);Ava(gc);Le=Sd;Me=Ae;Bc=366;break}case 364:{Ae=Rb()|0;Ne=Q;Oe=Ae;vva(fc);Qb(Oe|0);break}case 365:{Ae=Rb()|0;Le=Q;Me=Ae;Bc=366;break}case 376:{Ae=Rb()|0;Pe=Q;Qe=Ae;Bc=378;break}case 377:{Ae=Rb()|0;Sd=Q;Yua(_);Pe=Sd;Qe=Ae;Bc=378;break}case 380:{Ae=aa+56|0;Sd=aa+4|0;k[aa>>2]=27524;k[Ae>>2]=27544;B=0;wa(508,aa+56|0,Sd|0);_=B;B=0;if(_&1){_=Rb()|0;Re=Q;Se=_;vva(Ae);Qb(Se|0)}k[aa+128>>2]=0;k[aa+132>>2]=-1;k[aa>>2]=27468;k[Ae>>2]=27488;B=0;va(448,Sd|0);_=B;B=0;do if(_&1){Ce=Rb()|0;Te=Q;Ue=Ce}else{k[Sd>>2]=27560;Ce=aa+36|0;k[Ce>>2]=0;k[Ce+4>>2]=0;k[Ce+8>>2]=0;k[Ce+12>>2]=0;k[aa+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Sd|0,c|0);Be=B;B=0;if(Be&1){Be=Rb()|0;ze=Q;Yua(c);Yua(Ce);Ava(Sd);Te=ze;Ue=Be;break}Yua(c);B=0;Be=Ia(40,aa|0,116978,37)|0;ze=B;B=0;e:do if(((!(ze&1)?(B=0,Ke=Xa(242,Be|0,k[u>>2]|0)|0,Je=B,B=0,!(Je&1)):0)?(B=0,Je=Ia(40,Ke|0,116638,10)|0,Ke=B,B=0,!(Ke&1)):0)?(B=0,Xa(239,Je|0,0)|0,Je=B,B=0,!(Je&1)):0){Je=Ab(20)|0;B=0;eb(502,ba|0,116649,101);Ke=B;B=0;do if(!(Ke&1)){B=0;eb(502,ca|0,116751,32);$c=B;B=0;if($c&1){$c=Rb()|0;V=Q;Yua(ba);Ve=V;We=$c;break}B=0;wa(510,da|0,Sd|0);$c=B;B=0;if($c&1){$c=Rb()|0;Xe=1;Ye=Q;Ze=$c}else{B=0;ua(163,Je|0,ba|0,ca|0,214,da|0);$c=B;B=0;if($c&1)_e=1;else{B=0;eb(503,Je|0,1240,229);B=0;_e=0}$c=Rb()|0;V=Q;Yua(da);Xe=_e;Ye=V;Ze=$c}Yua(ca);Yua(ba);if(Xe){Ve=Ye;We=Ze}else{$e=Ye;af=Ze;break e}}else{$c=Rb()|0;Ve=Q;We=$c}while(0);zb(Je|0);$e=Ve;af=We}else Bc=397;while(0);if((Bc|0)==397){Be=Rb()|0;$e=Q;af=Be}k[aa>>2]=27468;k[Ae>>2]=27488;k[Sd>>2]=27560;Yua(Ce);Ava(Sd);vva(Ae);Pd=$e;Qd=af;Qb(Qd|0)}while(0);Re=Te;Se=Ue;vva(Ae);Qb(Se|0);break}case 415:{Se=Rb()|0;Ae=Q;Yua(c);Yua(rc);Ava(nc);bf=Ae;cf=Se;Bc=418;break}case 416:{Se=Rb()|0;df=Q;ef=Se;vva(mc);Qb(ef|0);break}case 417:{Se=Rb()|0;bf=Q;cf=Se;Bc=418;break}case 424:{Se=Rb()|0;ff=Q;gf=Se;Bc=426;break}case 425:{Se=Rb()|0;Ae=Q;Yua(fa);ff=Ae;gf=Se;Bc=426;break}case 431:{Se=Rb()|0;Sqa(hd);Qb(Se|0);break}case 449:{Se=ga+56|0;hd=ga+4|0;k[ga>>2]=27524;k[Se>>2]=27544;B=0;wa(508,ga+56|0,hd|0);Ae=B;B=0;if(Ae&1){Ae=Rb()|0;hf=Q;jf=Ae;vva(Se);Qb(jf|0)}k[ga+128>>2]=0;k[ga+132>>2]=-1;k[ga>>2]=27468;k[Se>>2]=27488;B=0;va(448,hd|0);Ae=B;B=0;do if(Ae&1){fa=Rb()|0;kf=Q;lf=fa}else{k[hd>>2]=27560;fa=ga+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[ga+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,hd|0,c|0);Ue=B;B=0;if(Ue&1){Ue=Rb()|0;Te=Q;Yua(c);Yua(fa);Ava(hd);kf=Te;lf=Ue;break}Yua(c);B=0;Ue=Ia(40,ga|0,117033,33)|0;Te=B;B=0;f:do if(!(Te&1)?(B=0,Xa(239,Ue|0,0)|0,Re=B,B=0,!(Re&1)):0){Re=Ab(20)|0;B=0;eb(502,ha|0,116649,101);af=B;B=0;do if(!(af&1)){B=0;eb(502,ia|0,116751,32);$e=B;B=0;if($e&1){$e=Rb()|0;Sd=Q;Yua(ha);mf=Sd;nf=$e;break}B=0;wa(510,ja|0,hd|0);$e=B;B=0;if($e&1){$e=Rb()|0;of=1;pf=Q;qf=$e}else{B=0;ua(163,Re|0,ha|0,ia|0,242,ja|0);$e=B;B=0;if($e&1)rf=1;else{B=0;eb(503,Re|0,1240,229);B=0;rf=0}$e=Rb()|0;Sd=Q;Yua(ja);of=rf;pf=Sd;qf=$e}Yua(ia);Yua(ha);if(of){mf=pf;nf=qf}else{sf=pf;tf=qf;break f}}else{$e=Rb()|0;mf=Q;nf=$e}while(0);zb(Re|0);sf=mf;tf=nf}else Bc=464;while(0);if((Bc|0)==464){Ue=Rb()|0;sf=Q;tf=Ue}k[ga>>2]=27468;k[Se>>2]=27488;k[hd>>2]=27560;Yua(fa);Ava(hd);vva(Se);Pd=sf;Qd=tf;Qb(Qd|0)}while(0);hf=kf;jf=lf;vva(Se);Qb(jf|0);break}case 474:{jf=Rb()|0;Sqa(ld);Qb(jf|0);break}case 492:{jf=ka+56|0;ld=ka+4|0;k[ka>>2]=27524;k[jf>>2]=27544;B=0;wa(508,ka+56|0,ld|0);Se=B;B=0;if(Se&1){Se=Rb()|0;uf=Q;vf=Se;vva(jf);Qb(vf|0)}k[ka+128>>2]=0;k[ka+132>>2]=-1;k[ka>>2]=27468;k[jf>>2]=27488;B=0;va(448,ld|0);Se=B;B=0;do if(Se&1){lf=Rb()|0;wf=Q;xf=lf}else{k[ld>>2]=27560;lf=ka+36|0;k[lf>>2]=0;k[lf+4>>2]=0;k[lf+8>>2]=0;k[lf+12>>2]=0;k[ka+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ld|0,c|0);kf=B;B=0;if(kf&1){kf=Rb()|0;hf=Q;Yua(c);Yua(lf);Ava(ld);wf=hf;xf=kf;break}Yua(c);B=0;kf=Ia(40,ka|0,117067,33)|0;hf=B;B=0;g:do if(!(hf&1)?(B=0,Xa(239,kf|0,0)|0,tf=B,B=0,!(tf&1)):0){tf=Ab(20)|0;B=0;eb(502,la|0,116649,101);sf=B;B=0;do if(!(sf&1)){B=0;eb(502,ma|0,116751,32);hd=B;B=0;if(hd&1){hd=Rb()|0;ga=Q;Yua(la);yf=ga;zf=hd;break}B=0;wa(510,na|0,ld|0);hd=B;B=0;if(hd&1){hd=Rb()|0;Af=1;Bf=Q;Cf=hd}else{B=0;ua(163,tf|0,la|0,ma|0,251,na|0);hd=B;B=0;if(hd&1)Df=1;else{B=0;eb(503,tf|0,1240,229);B=0;Df=0}hd=Rb()|0;ga=Q;Yua(na);Af=Df;Bf=ga;Cf=hd}Yua(ma);Yua(la);if(Af){yf=Bf;zf=Cf}else{Ef=Bf;Ff=Cf;break g}}else{hd=Rb()|0;yf=Q;zf=hd}while(0);zb(tf|0);Ef=yf;Ff=zf}else Bc=507;while(0);if((Bc|0)==507){kf=Rb()|0;Ef=Q;Ff=kf}k[ka>>2]=27468;k[jf>>2]=27488;k[ld>>2]=27560;Yua(lf);Ava(ld);vva(jf);Pd=Ef;Qd=Ff;Qb(Qd|0)}while(0);uf=wf;vf=xf;vva(jf);Qb(vf|0);break}case 521:{vf=Rb()|0;jf=Q;Yua(c);Yua(Bb);Ava(vb);Gf=jf;Hf=vf;Bc=524;break}case 522:{vf=Rb()|0;If=Q;Jf=vf;vva(ub);Qb(Jf|0);break}case 523:{vf=Rb()|0;Gf=Q;Hf=vf;Bc=524;break}case 532:{vf=Rb()|0;Kf=Q;Lf=vf;Bc=534;break}case 533:{vf=Rb()|0;jf=Q;Yua(pa);Kf=jf;Lf=vf;Bc=534;break}case 539:{vf=Rb()|0;jf=Q;Yua(c);Yua(Ib);Ava(Eb);Mf=jf;Nf=vf;Bc=542;break}case 540:{vf=Rb()|0;Of=Q;Pf=vf;vva(Db);Qb(Pf|0);break}case 541:{vf=Rb()|0;Mf=Q;Nf=vf;Bc=542;break}case 552:{vf=Rb()|0;Qf=Q;Rf=vf;Bc=554;break}case 553:{vf=Rb()|0;jf=Q;Yua(ra);Qf=jf;Rf=vf;Bc=554;break}case 559:{vf=Rb()|0;jf=Q;Yua(c);Yua(Pb);Ava(Lb);Sf=jf;Tf=vf;Bc=562;break}case 560:{vf=Rb()|0;Uf=Q;Vf=vf;vva(Kb);Qb(Vf|0);break}case 561:{vf=Rb()|0;Sf=Q;Tf=vf;Bc=562;break}case 572:{vf=Rb()|0;Wf=Q;Xf=vf;Bc=574;break}case 573:{vf=Rb()|0;jf=Q;Yua(ta);Wf=jf;Xf=vf;Bc=574;break}case 578:{vf=Rb()|0;jf=Q;Yua(c);Yua(sb);Ava(ob);Yf=jf;Zf=vf;Bc=581;break}case 579:{vf=Rb()|0;_f=Q;$f=vf;vva(nb);Qb($f|0);break}case 580:{vf=Rb()|0;Yf=Q;Zf=vf;Bc=581;break}case 589:{vf=Rb()|0;ag=Q;bg=vf;Bc=591;break}case 590:{vf=Rb()|0;jf=Q;Yua(za);ag=jf;bg=vf;Bc=591;break}case 593:{vf=Aa+56|0;jf=Aa+4|0;k[Aa>>2]=27524;k[vf>>2]=27544;B=0;wa(508,Aa+56|0,jf|0);za=B;B=0;if(za&1){za=Rb()|0;cg=Q;dg=za;vva(vf);Qb(dg|0)}k[Aa+128>>2]=0;k[Aa+132>>2]=-1;k[Aa>>2]=27468;k[vf>>2]=27488;B=0;va(448,jf|0);za=B;B=0;do if(za&1){ta=Rb()|0;eg=Q;fg=ta}else{k[jf>>2]=27560;ta=Aa+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[Aa+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,jf|0,c|0);ra=B;B=0;if(ra&1){ra=Rb()|0;pa=Q;Yua(c);Yua(ta);Ava(jf);eg=pa;fg=ra;break}Yua(c);B=0;ra=Ia(40,Aa|0,117227,54)|0;pa=B;B=0;h:do if(((!(pa&1)?(B=0,xf=Xa(242,ra|0,k[u>>2]|0)|0,wf=B,B=0,!(wf&1)):0)?(B=0,wf=Ia(40,xf|0,116638,10)|0,xf=B,B=0,!(xf&1)):0)?(B=0,Xa(239,wf|0,0)|0,wf=B,B=0,!(wf&1)):0){wf=Ab(20)|0;B=0;eb(502,Ba|0,116649,101);xf=B;B=0;do if(!(xf&1)){B=0;eb(502,Ca|0,116751,32);uf=B;B=0;if(uf&1){uf=Rb()|0;Ff=Q;Yua(Ba);gg=Ff;hg=uf;break}B=0;wa(510,Da|0,jf|0);uf=B;B=0;if(uf&1){uf=Rb()|0;ig=1;jg=Q;kg=uf}else{B=0;ua(163,wf|0,Ba|0,Ca|0,266,Da|0);uf=B;B=0;if(uf&1)lg=1;else{B=0;eb(503,wf|0,1240,229);B=0;lg=0}uf=Rb()|0;Ff=Q;Yua(Da);ig=lg;jg=Ff;kg=uf}Yua(Ca);Yua(Ba);if(ig){gg=jg;hg=kg}else{mg=jg;ng=kg;break h}}else{uf=Rb()|0;gg=Q;hg=uf}while(0);zb(wf|0);mg=gg;ng=hg}else Bc=610;while(0);if((Bc|0)==610){ra=Rb()|0;mg=Q;ng=ra}k[Aa>>2]=27468;k[vf>>2]=27488;k[jf>>2]=27560;Yua(ta);Ava(jf);vva(vf);Pd=mg;Qd=ng;Qb(Qd|0)}while(0);cg=eg;dg=fg;vva(vf);Qb(dg|0);break}case 619:{if(i[o>>0]|0)xoa(a,k[f>>2]|0);xh(a,505);xoa(a,k[d>>2]|0);a=k[f>>2]|0;if(a){if((k[a>>2]|0)!=0?(f=k[a+4>>2]|0,(f|0)!=0):0){o=k[f>>2]|0;if(o)Ec[k[(k[o>>2]|0)+4>>2]&1023](o);Sqa(f)}Sqa(a)}a=k[d>>2]|0;if(a){if((k[a>>2]|0)!=0?(d=k[a+4>>2]|0,(d|0)!=0):0){f=k[d>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);Sqa(d)}Sqa(a)}a=k[e>>2]|0;if(a){if((k[a>>2]|0)!=0?(e=k[a+4>>2]|0,(e|0)!=0):0){d=k[e>>2]|0;if(d)Ec[k[(k[d>>2]|0)+4>>2]&1023](d);Sqa(e)}Sqa(a)}a=k[g>>2]|0;if(a){if((k[a>>2]|0)!=0?(g=k[a+4>>2]|0,(g|0)!=0):0){e=k[g>>2]|0;if(e)Ec[k[(k[e>>2]|0)+4>>2]&1023](e);Sqa(g)}Sqa(a)}if(gd){if((k[gd>>2]|0)!=0?(a=k[gd+4>>2]|0,(a|0)!=0):0){g=k[a>>2]|0;if(g)Ec[k[(k[g>>2]|0)+4>>2]&1023](g);Sqa(a)}Sqa(gd)}if(Ja)Ec[k[(k[Ja>>2]|0)+4>>2]&1023](Ja);if(!Ha){r=b;return}Ec[k[(k[Ha>>2]|0)+4>>2]&1023](Ha);r=b;return}}switch(Bc|0){case 31:{td=rd;ud=sd;vva(Ka);Qb(ud|0);break}case 39:{k[z>>2]=27468;k[Ka>>2]=27488;k[La>>2]=27560;Yua(Pa);Ava(La);vva(Ka);Pd=vd;Qd=wd;Qb(Qd|0);break}case 96:{zd=xd;Ad=yd;vva(Ra);Qb(Ad|0);break}case 106:{k[C>>2]=27468;k[Ra>>2]=27488;k[Ta>>2]=27560;Yua(Ya);Ava(Ta);vva(Ra);Pd=Bd;Qd=Cd;Qb(Qd|0);break}case 181:{de=be;ee=ce;vva(_a);Qb(ee|0);break}case 193:{k[M>>2]=27468;k[_a>>2]=27488;k[$a>>2]=27560;Yua(db);Ava($a);vva(_a);Pd=fe;Qd=ge;Qb(Qd|0);break}case 202:{je=he;ke=ie;vva(gb);Qb(ke|0);break}case 210:{k[O>>2]=27468;k[gb>>2]=27488;k[hb>>2]=27560;Yua(lb);Ava(hb);vva(gb);Pd=le;Qd=me;Qb(Qd|0);break}case 232:{pe=ne;qe=oe;vva(Tb);Qb(qe|0);break}case 240:{k[R>>2]=27468;k[Tb>>2]=27488;k[Ub>>2]=27560;Yua(Yb);Ava(Ub);vva(Tb);Pd=re;Qd=se;Qb(Qd|0);break}case 248:{ve=te;we=ue;vva(_b);Qb(we|0);break}case 256:{k[T>>2]=27468;k[_b>>2]=27488;k[$b>>2]=27560;Yua(dc);Ava($b);vva(_b);Pd=xe;Qd=ye;Qb(Qd|0);break}case 366:{Ne=Le;Oe=Me;vva(fc);Qb(Oe|0);break}case 378:{k[Z>>2]=27468;k[fc>>2]=27488;k[gc>>2]=27560;Yua(kc);Ava(gc);vva(fc);Pd=Pe;Qd=Qe;Qb(Qd|0);break}case 418:{df=bf;ef=cf;vva(mc);Qb(ef|0);break}case 426:{k[ea>>2]=27468;k[mc>>2]=27488;k[nc>>2]=27560;Yua(rc);Ava(nc);vva(mc);Pd=ff;Qd=gf;Qb(Qd|0);break}case 524:{If=Gf;Jf=Hf;vva(ub);Qb(Jf|0);break}case 534:{k[oa>>2]=27468;k[ub>>2]=27488;k[vb>>2]=27560;Yua(Bb);Ava(vb);vva(ub);Pd=Kf;Qd=Lf;Qb(Qd|0);break}case 542:{Of=Mf;Pf=Nf;vva(Db);Qb(Pf|0);break}case 554:{k[qa>>2]=27468;k[Db>>2]=27488;k[Eb>>2]=27560;Yua(Ib);Ava(Eb);vva(Db);Pd=Qf;Qd=Rf;Qb(Qd|0);break}case 562:{Uf=Sf;Vf=Tf;vva(Kb);Qb(Vf|0);break}case 574:{k[sa>>2]=27468;k[Kb>>2]=27488;k[Lb>>2]=27560;Yua(Pb);Ava(Lb);vva(Kb);Pd=Wf;Qd=Xf;Qb(Qd|0);break}case 581:{_f=Yf;$f=Zf;vva(nb);Qb($f|0);break}case 591:{k[xa>>2]=27468;k[nb>>2]=27488;k[ob>>2]=27560;Yua(sb);Ava(ob);vva(nb);Pd=ag;Qd=bg;Qb(Qd|0);break}}}function j0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;b=r;r=r+336|0;c=b+316|0;d=b+312|0;e=b+333|0;f=b+332|0;g=b+331|0;h=b+330|0;j=b+329|0;l=b+328|0;m=b+308|0;n=b+304|0;o=b+300|0;p=b+152|0;q=b+288|0;s=b+16|0;t=b;k[n>>2]=0;k[o>>2]=0;u=a+44|0;cO(k[u>>2]|0,d,298);bO(k[u>>2]|0,e,95);bO(k[u>>2]|0,f,96);bO(k[u>>2]|0,g,97);bO(k[u>>2]|0,h,98);bO(k[u>>2]|0,j,99);bO(k[u>>2]|0,l,759);cO(k[u>>2]|0,m,476);cO(k[u>>2]|0,n,76);if(k[n>>2]|0)gO(k[u>>2]|0,o,n,77);a:do if(CY()|0){v=p+56|0;w=p+4|0;k[p>>2]=27524;k[v>>2]=27544;B=0;wa(508,p+56|0,w|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;z=x;vva(v);Qb(z|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[v>>2]=27488;B=0;va(448,w|0);x=B;B=0;do if(x&1){A=Rb()|0;C=Q;D=A}else{k[w>>2]=27560;A=p+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,w|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(c);Yua(A);Ava(w);C=F;D=E;break}Yua(c);B=0;Ia(40,p|0,117282,26)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,q|0,w|0),F=B,B=0,!(F&1)):0){B=0;ya(425,q|0)|0;F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(q);H=G;I=F;break}else{Yua(q);k[p>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);break a}}else J=16;while(0);if((J|0)==16){E=Rb()|0;H=Q;I=E}k[p>>2]=27468;k[v>>2]=27488;k[w>>2]=27560;Yua(A);Ava(w);vva(v);K=H;L=I;Qb(L|0)}while(0);y=C;z=D;vva(v);Qb(z|0)}while(0);if((i[e>>0]|0)==0?(z=i[j>>0]|0,!(z<<24>>24!=0&(k[d>>2]|0)==301)):0)M=z;else{o0(a);M=i[j>>0]|0}if(M<<24>>24){p0(a);xh(a,497);Ooa(k[a+20>>2]|0,k[a+24>>2]|0,k[a+28>>2]|0,k[a+36>>2]|0,k[a+40>>2]|0,k[u>>2]|0)}if(i[e>>0]|0){if((i[g>>0]|i[f>>0]|i[h>>0])<<24>>24)Soa(a,498);u=Qqa(4)|0;k[u>>2]=38860;Fc[k[38892>>2]&1023](u,a);Ec[k[(k[u>>2]|0)+4>>2]&1023](u);if((i[g>>0]|i[f>>0]|i[h>>0])<<24>>24)Soa(a,497)}if((i[g>>0]|i[f>>0]|i[h>>0]|i[j>>0])<<24>>24){j=Qqa(4)|0;k[j>>2]=38696;Fc[k[38728>>2]&1023](j,a);Ec[k[(k[j>>2]|0)+4>>2]&1023](j)}if((k[d>>2]|0)==302?(i[f>>0]|i[e>>0]|i[g>>0]|i[h>>0])<<24>>24!=0:0){h=Qqa(4)|0;k[h>>2]=38936;Fc[k[38968>>2]&1023](h,a);Ec[k[(k[h>>2]|0)+4>>2]&1023](h)}if(i[l>>0]|0){b:do if(CY()|0){l=s+56|0;h=s+4|0;k[s>>2]=27524;k[l>>2]=27544;B=0;wa(508,s+56|0,h|0);g=B;B=0;if(g&1){g=Rb()|0;N=Q;O=g;vva(l);Qb(O|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[l>>2]=27488;B=0;va(448,h|0);g=B;B=0;do if(g&1){e=Rb()|0;P=Q;R=e}else{k[h>>2]=27560;e=s+36|0;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;k[e+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,h|0,c|0);f=B;B=0;if(f&1){f=Rb()|0;d=Q;Yua(c);Yua(e);Ava(h);P=d;R=f;break}Yua(c);B=0;Ia(40,s|0,148942,18)|0;f=B;B=0;do if(!(f&1)?(B=0,wa(510,t|0,h|0),d=B,B=0,!(d&1)):0){B=0;ya(425,t|0)|0;d=B;B=0;if(d&1){d=Rb()|0;j=Q;Yua(t);S=j;T=d;break}else{Yua(t);k[s>>2]=27468;k[l>>2]=27488;k[h>>2]=27560;Yua(e);Ava(h);vva(l);break b}}else J=48;while(0);if((J|0)==48){f=Rb()|0;S=Q;T=f}k[s>>2]=27468;k[l>>2]=27488;k[h>>2]=27560;Yua(e);Ava(h);vva(l);K=S;L=T;Qb(L|0)}while(0);N=P;O=R;vva(l);Qb(O|0)}while(0);ci(a,a+48|0,k[o>>2]|0,k[n>>2]|0,1)}if((k[m>>2]|0)==499)gi(a);a=k[n>>2]|0;if(!a){r=b;return}m=k[o>>2]|0;if((a|0)>0){O=m;R=a;a=0;while(1){P=O+(a<<2)|0;N=k[P>>2]|0;if(!N)U=R;else{Tqa(N);U=k[n>>2]|0}k[P>>2]=0;a=a+1|0;P=k[o>>2]|0;if((a|0)>=(U|0)){V=P;break}else{O=P;R=U}}}else V=m;if(V)Tqa(V);k[o>>2]=0;r=b;return}function k0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;b=r;r=r+320|0;c=b+300|0;d=b+312|0;e=b+152|0;f=b+288|0;g=b+16|0;h=b;xh(a,484);bO(k[a+44>>2]|0,d,759);a:do if(CY()|0){j=e+56|0;l=e+4|0;k[e>>2]=27524;k[j>>2]=27544;B=0;wa(508,e+56|0,l|0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;o=m;vva(j);Qb(o|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[j>>2]=27488;B=0;va(448,l|0);m=B;B=0;do if(m&1){p=Rb()|0;q=Q;s=p}else{k[l>>2]=27560;p=e+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(c);Yua(p);Ava(l);q=u;s=t;break}Yua(c);B=0;Ia(40,e|0,136216,25)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,f|0,l|0),u=B,B=0,!(u&1)):0){B=0;ya(425,f|0)|0;u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(f);w=v;x=u;break}else{Yua(f);k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);break a}}else y=14;while(0);if((y|0)==14){t=Rb()|0;w=Q;x=t}k[e>>2]=27468;k[j>>2]=27488;k[l>>2]=27560;Yua(p);Ava(l);vva(j);z=w;A=x;Qb(A|0)}while(0);n=q;o=s;vva(j);Qb(o|0)}while(0);Voa(a);if(!(i[d>>0]|0)){r=b;return}b:do if(CY()|0){d=g+56|0;o=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,o|0);s=B;B=0;if(s&1){s=Rb()|0;C=Q;D=s;vva(d);Qb(D|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,o|0);s=B;B=0;do if(s&1){q=Rb()|0;E=Q;F=q}else{k[o>>2]=27560;q=g+36|0;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;k[q+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;x=Q;Yua(c);Yua(q);Ava(o);E=x;F=n;break}Yua(c);B=0;Ia(40,g|0,148942,18)|0;n=B;B=0;do if(!(n&1)?(B=0,wa(510,h|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,h|0)|0;x=B;B=0;if(x&1){x=Rb()|0;w=Q;Yua(h);G=w;H=x;break}else{Yua(h);k[g>>2]=27468;k[d>>2]=27488;k[o>>2]=27560;Yua(q);Ava(o);vva(d);break b}}else y=31;while(0);if((y|0)==31){n=Rb()|0;G=Q;H=n}k[g>>2]=27468;k[d>>2]=27488;k[o>>2]=27560;Yua(q);Ava(o);vva(d);z=G;A=H;Qb(A|0)}while(0);C=E;D=F;vva(d);Qb(D|0)}while(0);k[c>>2]=353;fi(a,a+48|0,c,1,1);r=b;return}function l0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;b=r;r=r+496|0;c=b+456|0;d=b+480|0;e=b+304|0;f=b+440|0;g=b+152|0;h=b+288|0;j=b+16|0;l=b;bO(k[a+44>>2]|0,d,759);a:do if(CY()|0){m=e+56|0;n=e+4|0;k[e>>2]=27524;k[m>>2]=27544;B=0;wa(508,e+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,e|0,117309,33)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,f|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,f|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(f);y=w;z=x;break}else{Yua(f);k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=v;z=Q}k[e>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(C|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);o0(a);b:do if(CY()|0){q=g+56|0;u=g+4|0;k[g>>2]=27524;k[q>>2]=27544;B=0;wa(508,g+56|0,u|0);t=B;B=0;if(t&1){t=Rb()|0;E=Q;F=t;vva(q);Qb(F|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[q>>2]=27488;B=0;va(448,u|0);t=B;B=0;do if(t&1){p=Rb()|0;G=Q;H=p}else{k[u>>2]=27560;p=g+36|0;k[p>>2]=0;k[p+4>>2]=0;k[p+8>>2]=0;k[p+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,u|0,c|0);z=B;B=0;if(z&1){z=Rb()|0;y=Q;Yua(c);Yua(p);Ava(u);G=y;H=z;break}Yua(c);B=0;Ia(40,g|0,136216,25)|0;z=B;B=0;do if(!(z&1)?(B=0,wa(510,h|0,u|0),y=B,B=0,!(y&1)):0){B=0;ya(425,h|0)|0;y=B;B=0;if(y&1){y=Rb()|0;e=Q;Yua(h);I=y;J=e;break}else{Yua(h);k[g>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(p);Ava(u);vva(q);break b}}else A=30;while(0);if((A|0)==30){z=Rb()|0;I=z;J=Q}k[g>>2]=27468;k[q>>2]=27488;k[u>>2]=27560;Yua(p);Ava(u);vva(q);C=I;D=J;Qb(C|0)}while(0);E=G;F=H;vva(q);Qb(F|0)}while(0);xh(a,486);Voa(a);if(!(i[d>>0]|0)){r=b;return}c:do if(CY()|0){d=j+56|0;F=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,F|0);H=B;B=0;if(H&1){H=Rb()|0;K=Q;L=H;vva(d);Qb(L|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,F|0);H=B;B=0;do if(H&1){G=Rb()|0;M=Q;N=G}else{k[F>>2]=27560;G=j+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;J=Q;Yua(c);Yua(G);Ava(F);M=J;N=E;break}Yua(c);B=0;Ia(40,j|0,148942,18)|0;E=B;B=0;do if(!(E&1)?(B=0,wa(510,l|0,F|0),J=B,B=0,!(J&1)):0){B=0;ya(425,l|0)|0;J=B;B=0;if(J&1){J=Rb()|0;I=Q;Yua(l);O=J;P=I;break}else{Yua(l);k[j>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(G);Ava(F);vva(d);break c}}else A=47;while(0);if((A|0)==47){E=Rb()|0;O=E;P=Q}k[j>>2]=27468;k[d>>2]=27488;k[F>>2]=27560;Yua(G);Ava(F);vva(d);C=O;D=P;Qb(C|0)}while(0);K=M;L=N;vva(d);Qb(L|0)}while(0);k[c>>2]=k[9258];k[c+4>>2]=k[9259];k[c+8>>2]=k[9260];k[c+12>>2]=k[9261];k[c+16>>2]=k[9262];k[c+20>>2]=k[9263];fi(a,a+48|0,c,6,1);r=b;return}function m0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;b=r;r=r+480|0;c=b+452|0;d=b+464|0;e=b+304|0;f=b+440|0;g=b+152|0;h=b+288|0;j=b+16|0;l=b;m=a+44|0;bO(k[m>>2]|0,d,759);a:do if(CY()|0){n=e+56|0;o=e+4|0;k[e>>2]=27524;k[n>>2]=27544;B=0;wa(508,e+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=e+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[e+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;Ia(40,e|0,117343,33)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,f|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,f|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(f);z=y;A=x;break}else{Yua(f);k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=14;while(0);if((C|0)==14){w=Rb()|0;z=Q;A=w}k[e>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);pO(k[m>>2]|0,8.0,579);xh(a,520);oO(k[m>>2]|0,704,578);Voa(a);oO(k[m>>2]|0,705,578);Voa(a);b:do if(CY()|0){m=g+56|0;s=g+4|0;k[g>>2]=27524;k[m>>2]=27544;B=0;wa(508,g+56|0,s|0);v=B;B=0;if(v&1){v=Rb()|0;F=Q;G=v;vva(m);Qb(G|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[m>>2]=27488;B=0;va(448,s|0);v=B;B=0;do if(v&1){u=Rb()|0;H=Q;I=u}else{k[s>>2]=27560;u=g+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[g+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,s|0,c|0);q=B;B=0;if(q&1){q=Rb()|0;A=Q;Yua(c);Yua(u);Ava(s);H=A;I=q;break}Yua(c);B=0;Ia(40,g|0,136216,25)|0;q=B;B=0;do if(!(q&1)?(B=0,wa(510,h|0,s|0),A=B,B=0,!(A&1)):0){B=0;ya(425,h|0)|0;A=B;B=0;if(A&1){A=Rb()|0;z=Q;Yua(h);J=z;K=A;break}else{Yua(h);k[g>>2]=27468;k[m>>2]=27488;k[s>>2]=27560;Yua(u);Ava(s);vva(m);break b}}else C=30;while(0);if((C|0)==30){q=Rb()|0;J=Q;K=q}k[g>>2]=27468;k[m>>2]=27488;k[s>>2]=27560;Yua(u);Ava(s);vva(m);D=J;E=K;Qb(E|0)}while(0);F=H;G=I;vva(m);Qb(G|0)}while(0);xh(a,490);Voa(a);if(!(i[d>>0]|0)){r=b;return}c:do if(CY()|0){d=j+56|0;G=j+4|0;k[j>>2]=27524;k[d>>2]=27544;B=0;wa(508,j+56|0,G|0);I=B;B=0;if(I&1){I=Rb()|0;L=Q;M=I;vva(d);Qb(M|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[d>>2]=27488;B=0;va(448,G|0);I=B;B=0;do if(I&1){H=Rb()|0;N=Q;O=H}else{k[G>>2]=27560;H=j+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,G|0,c|0);F=B;B=0;if(F&1){F=Rb()|0;K=Q;Yua(c);Yua(H);Ava(G);N=K;O=F;break}Yua(c);B=0;Ia(40,j|0,148942,18)|0;F=B;B=0;do if(!(F&1)?(B=0,wa(510,l|0,G|0),K=B,B=0,!(K&1)):0){B=0;ya(425,l|0)|0;K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(l);P=J;R=K;break}else{Yua(l);k[j>>2]=27468;k[d>>2]=27488;k[G>>2]=27560;Yua(H);Ava(G);vva(d);break c}}else C=47;while(0);if((C|0)==47){F=Rb()|0;P=Q;R=F}k[j>>2]=27468;k[d>>2]=27488;k[G>>2]=27560;Yua(H);Ava(G);vva(d);D=P;E=R;Qb(E|0)}while(0);L=N;M=O;vva(d);Qb(M|0)}while(0);k[c>>2]=k[9264];k[c+4>>2]=k[9265];k[c+8>>2]=k[9266];fi(a,a+48|0,c,3,1);r=b;return}function n0(a){a=a|0;return}function o0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=r;r=r+320|0;c=b;d=b+312|0;e=b+308|0;f=b+160|0;g=b+296|0;h=b+24|0;j=b+12|0;l=a+44|0;bO(k[l>>2]|0,d,759);cO(k[l>>2]|0,e,298);a:do if(CY()|0){m=f+56|0;n=f+4|0;k[f>>2]=27524;k[m>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,f|0,117377,19)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,g|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,g|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(g);y=x;z=w;break}else{Yua(g);k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=Q;z=v}k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);xh(a,493);oO(k[l>>2]|0,664,576);Voa(a);if(!((k[e>>2]|0)!=301?(oO(k[l>>2]|0,665,576),Voa(a),(k[e>>2]|0)!=301):0)){oO(k[l>>2]|0,664,575);y_(a)}if(!(i[d>>0]|0)){r=b;return}b:do if(CY()|0){d=h+56|0;l=h+4|0;k[h>>2]=27524;k[d>>2]=27544;B=0;wa(508,h+56|0,l|0);q=B;B=0;if(q&1){q=Rb()|0;E=Q;F=q;vva(d);Qb(F|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);q=B;B=0;do if(q&1){u=Rb()|0;G=Q;H=u}else{k[l>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;p=Q;Yua(c);Yua(u);Ava(l);G=p;H=t;break}Yua(c);B=0;Ia(40,h|0,149048,16)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,j|0,l|0),p=B,B=0,!(p&1)):0){B=0;ya(425,j|0)|0;p=B;B=0;if(p&1){p=Rb()|0;z=Q;Yua(j);I=z;J=p;break}else{Yua(j);k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);break b}}else A=34;while(0);if((A|0)==34){t=Rb()|0;I=Q;J=t}k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);C=I;D=J;Qb(D|0)}while(0);E=G;F=H;vva(d);Qb(F|0)}while(0);if((k[e>>2]|0)==301){k[c>>2]=664;fi(a,a+48|0,c,1,1);r=b;return}else{e=c;k[e>>2]=664;k[e+4>>2]=665;fi(a,a+48|0,c,2,1);r=b;return}}function p0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=r;r=r+320|0;c=b;d=b+312|0;e=b+308|0;f=b+160|0;g=b+296|0;h=b+24|0;j=b+12|0;l=a+44|0;bO(k[l>>2]|0,d,759);cO(k[l>>2]|0,e,298);a:do if(CY()|0){m=f+56|0;n=f+4|0;k[f>>2]=27524;k[m>>2]=27544;B=0;wa(508,f+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=f+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,f|0,117397,19)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,g|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(425,g|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(g);y=x;z=w;break}else{Yua(g);k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);break a}}else A=14;while(0);if((A|0)==14){v=Rb()|0;y=Q;z=v}k[f>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);C=y;D=z;Qb(D|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}while(0);xh(a,493);oO(k[l>>2]|0,642,576);Voa(a);if((k[e>>2]|0)!=301){oO(k[l>>2]|0,643,576);Voa(a)}if(!(i[d>>0]|0)){r=b;return}b:do if(CY()|0){d=h+56|0;l=h+4|0;k[h>>2]=27524;k[d>>2]=27544;B=0;wa(508,h+56|0,l|0);q=B;B=0;if(q&1){q=Rb()|0;E=Q;F=q;vva(d);Qb(F|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);q=B;B=0;do if(q&1){u=Rb()|0;G=Q;H=u}else{k[l>>2]=27560;u=h+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,l|0,c|0);t=B;B=0;if(t&1){t=Rb()|0;p=Q;Yua(c);Yua(u);Ava(l);G=p;H=t;break}Yua(c);B=0;Ia(40,h|0,148942,18)|0;t=B;B=0;do if(!(t&1)?(B=0,wa(510,j|0,l|0),p=B,B=0,!(p&1)):0){B=0;ya(425,j|0)|0;p=B;B=0;if(p&1){p=Rb()|0;z=Q;Yua(j);I=z;J=p;break}else{Yua(j);k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);break b}}else A=33;while(0);if((A|0)==33){t=Rb()|0;I=Q;J=t}k[h>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(u);Ava(l);vva(d);C=I;D=J;Qb(D|0)}while(0);E=G;F=H;vva(d);Qb(F|0)}while(0);if((k[e>>2]|0)==301){k[c>>2]=642;fi(a,a+48|0,c,1,1);r=b;return}else{e=c;k[e>>2]=642;k[e+4>>2]=643;fi(a,a+48|0,c,2,1);r=b;return}}function q0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;b=r;r=r+336|0;c=b+316|0;d=b+328|0;e=b+308|0;f=b+304|0;g=b+300|0;h=b+152|0;j=b+288|0;l=b+16|0;m=b;k[f>>2]=0;k[g>>2]=0;n=a+44|0;bO(k[n>>2]|0,d,759);cO(k[n>>2]|0,b+312|0,476);cO(k[n>>2]|0,f,242);if(k[f>>2]|0)gO(k[n>>2]|0,g,f,243);cO(k[n>>2]|0,e,237);a:do if(CY()|0){n=h+56|0;o=h+4|0;k[h>>2]=27524;k[n>>2]=27544;B=0;wa(508,h+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,o|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(c);Yua(t);Ava(o);u=x;v=w;break}Yua(c);B=0;Ia(40,h|0,117417,20)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,j|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,j|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(j);z=y;A=x;break}else{Yua(j);k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=16;while(0);if((C|0)==16){w=Rb()|0;z=Q;A=w}k[h>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);T8(a);xh(a,496);if((k[e>>2]|0)==4)Yoa(a);Voa(a);if(i[d>>0]|0){b:do if(CY()|0){d=l+56|0;e=l+4|0;k[l>>2]=27524;k[d>>2]=27544;B=0;wa(508,l+56|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;F=Q;G=s;vva(d);Qb(G|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[d>>2]=27488;B=0;va(448,e|0);s=B;B=0;do if(s&1){v=Rb()|0;H=Q;I=v}else{k[e>>2]=27560;v=l+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,e|0,c|0);u=B;B=0;if(u&1){u=Rb()|0;q=Q;Yua(c);Yua(v);Ava(e);H=q;I=u;break}Yua(c);B=0;Ia(40,l|0,148942,18)|0;u=B;B=0;do if(!(u&1)?(B=0,wa(510,m|0,e|0),q=B,B=0,!(q&1)):0){B=0;ya(425,m|0)|0;q=B;B=0;if(q&1){q=Rb()|0;A=Q;Yua(m);J=A;K=q;break}else{Yua(m);k[l>>2]=27468;k[d>>2]=27488;k[e>>2]=27560;Yua(v);Ava(e);vva(d);break b}}else C=35;while(0);if((C|0)==35){u=Rb()|0;J=Q;K=u}k[l>>2]=27468;k[d>>2]=27488;k[e>>2]=27560;Yua(v);Ava(e);vva(d);D=J;E=K;Qb(E|0)}while(0);F=H;G=I;vva(d);Qb(G|0)}while(0);ci(a,a+48|0,k[g>>2]|0,k[f>>2]|0,1)}a=k[f>>2]|0;if(!a){r=b;return}G=k[g>>2]|0;if((a|0)>0){I=G;H=a;a=0;while(1){F=I+(a<<2)|0;E=k[F>>2]|0;if(!E)L=H;else{Tqa(E);L=k[f>>2]|0}k[F>>2]=0;a=a+1|0;F=k[g>>2]|0;if((a|0)>=(L|0)){M=F;break}else{I=F;H=L}}}else M=G;if(M)Tqa(M);k[g>>2]=0;r=b;return}function r0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;b=r;r=r+176|0;c=b+156|0;d=b+173|0;e=b+172|0;f=b+171|0;g=b+170|0;h=b+169|0;j=b+168|0;l=b+152|0;m=b+16|0;n=b;o=a+44|0;cO(k[o>>2]|0,l,298);bO(k[o>>2]|0,d,759);bO(k[o>>2]|0,e,362);bO(k[o>>2]|0,f,364);bO(k[o>>2]|0,g,365);bO(k[o>>2]|0,j,369);if((i[g>>0]|0)!=0&(k[l>>2]|0)==302)bO(k[o>>2]|0,h,340);if(!(i[j>>0]|0)){r=b;return}Uha(a);a:do if(CY()|0){j=m+56|0;p=m+4|0;k[m>>2]=27524;k[j>>2]=27544;B=0;wa(508,m+56|0,p|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;t=q;vva(j);Qb(t|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[j>>2]=27488;B=0;va(448,p|0);q=B;B=0;do if(q&1){u=Rb()|0;v=Q;w=u}else{k[p>>2]=27560;u=m+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(c);Yua(u);Ava(p);v=y;w=x;break}Yua(c);B=0;Ia(40,m|0,117438,32)|0;x=B;B=0;if(!(x&1)?(B=0,wa(510,n|0,p|0),x=B,B=0,!(x&1)):0){B=0;ya(425,n|0)|0;x=B;B=0;if(!(x&1)){Yua(n);k[m>>2]=27468;k[j>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(j);break a}x=Rb()|0;y=Q;Yua(n);z=y;A=x;k[m>>2]=27468;k[j>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(j);Qb(A|0)}x=Rb()|0;z=Q;A=x;k[m>>2]=27468;k[j>>2]=27488;k[p>>2]=27560;Yua(u);Ava(p);vva(j);Qb(A|0)}while(0);s=v;t=w;vva(j);Qb(t|0)}while(0);kpa(a);t=(i[e>>0]|0)==0;e=i[f>>0]|0;f=(i[g>>0]|0)!=0&(k[l>>2]|0)==302;l=(f&1)+((t?0:2)|e&255)|0;g=Rqa(l<<2)|0;if(t)C=0;else{k[g>>2]=674;k[g+4>>2]=677;C=2}if(!(e<<24>>24))D=C;else{k[g+(C<<2)>>2]=353;D=C|1}if(f)k[g+(D<<2)>>2]=(i[h>>0]|0)==0?666:687;h=Qqa(4)|0;k[h>>2]=40380;if(l){D=0;do{oO(k[o>>2]|0,k[g+(D<<2)>>2]|0,991);Fc[k[(k[h>>2]|0)+32>>2]&1023](h,a);D=D+1|0}while((D|0)<(l|0))}Tqa(g);Ec[k[(k[h>>2]|0)+4>>2]&1023](h);h=Qqa(4)|0;k[h>>2]=40304;Fc[k[40336>>2]&1023](h,a);Ec[k[(k[h>>2]|0)+4>>2]&1023](h);SZ(a);if(!(i[d>>0]|0)){r=b;return}k[c>>2]=992;fi(a,a+48|0,c,1,1);r=b;return}function s0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;e=r;r=r+352|0;d=e+336|0;b=e+332|0;g=e+192|0;h=e+176|0;i=e+40|0;j=e+24|0;l=e+12|0;m=e;cO(f,b,942);cO(f,e+328|0,477);if((k[b>>2]|0)==921){r=e;return}a:do if(BY()|0){n=g+56|0;o=g+4|0;k[g>>2]=27524;k[n>>2]=27544;B=0;wa(508,g+56|0,o|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;s=p;vva(n);Qb(s|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[n>>2]=27488;B=0;va(448,o|0);p=B;B=0;do if(p&1){t=Rb()|0;u=Q;v=t}else{k[o>>2]=27560;t=g+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,o|0,d|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(d);Yua(t);Ava(o);u=x;v=w;break}Yua(d);B=0;Ia(40,g|0,117471,28)|0;w=B;B=0;do if(!(w&1)?(B=0,wa(510,h|0,o|0),x=B,B=0,!(x&1)):0){B=0;ya(425,h|0)|0;x=B;B=0;if(x&1){x=Rb()|0;y=Q;Yua(h);z=y;A=x;break}else{Yua(h);k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);break a}}else C=15;while(0);if((C|0)==15){w=Rb()|0;z=Q;A=w}k[g>>2]=27468;k[n>>2]=27488;k[o>>2]=27560;Yua(t);Ava(o);vva(n);D=z;E=A;Qb(E|0)}while(0);q=u;s=v;vva(n);Qb(s|0)}while(0);tO(f,483);switch(k[b>>2]|0){case 923:{s=t0(a,c,0)|0;F=u0(a,0,c,f,s)|0;G=s;break}case 926:{F=v0(a,c)|0;G=0;break}case 927:case 925:case 924:case 922:{F=0;G=0;break}default:{c=i+56|0;s=i+4|0;k[i>>2]=27524;k[c>>2]=27544;B=0;wa(508,i+56|0,s|0);f=B;B=0;if(f&1){f=Rb()|0;H=Q;I=f;vva(c);Qb(I|0)}k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[c>>2]=27488;B=0;va(448,s|0);f=B;B=0;do if(f&1){v=Rb()|0;J=Q;K=v}else{k[s>>2]=27560;v=i+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[i+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,s|0,d|0);u=B;B=0;if(u&1){u=Rb()|0;q=Q;Yua(d);Yua(v);Ava(s);J=q;K=u;break}Yua(d);B=0;u=Ia(40,i|0,117500,25)|0;q=B;B=0;b:do if((((!(q&1)?(B=0,A=ya(427,k[b>>2]|0)|0,z=B,B=0,!(z&1)):0)?(z=Lta(A)|0,B=0,g=Ia(40,u|0,A|0,z|0)|0,z=B,B=0,!(z&1)):0)?(B=0,z=Ia(40,g|0,146956,19)|0,g=B,B=0,!(g&1)):0)?(B=0,Xa(239,z|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,j|0,117526,106);g=B;B=0;do if(!(g&1)){B=0;eb(502,l|0,117633,23);A=B;B=0;if(A&1){A=Rb()|0;h=Q;Yua(j);L=h;M=A;break}B=0;wa(510,m|0,s|0);A=B;B=0;if(A&1){A=Rb()|0;N=1;O=Q;P=A}else{B=0;ua(163,z|0,j|0,l|0,46,m|0);A=B;B=0;if(A&1)R=1;else{B=0;eb(503,z|0,1240,229);B=0;R=0}A=Rb()|0;h=Q;Yua(m);N=R;O=h;P=A}Yua(l);Yua(j);if(N){L=O;M=P}else{S=O;T=P;break b}}else{A=Rb()|0;L=Q;M=A}while(0);zb(z|0);S=L;T=M}else C=40;while(0);if((C|0)==40){u=Rb()|0;S=Q;T=u}k[i>>2]=27468;k[c>>2]=27488;k[s>>2]=27560;Yua(v);Ava(s);vva(c);D=S;E=T;Qb(E|0)}while(0);H=J;I=K;vva(c);Qb(I|0)}}if((th(a)|0)>0){I=0;do{eq(qh(a,I)|0,F);I=I+1|0}while((I|0)<(th(a)|0))}if(G)Tqa(G);if(!F){r=e;return}Tqa(F);r=e;return}function t0(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=nn(b)|0;b=Qqa(8)|0;B=0;va(485,b|0);d=B;B=0;a:do if(!(d&1)){do if(k[b>>2]|0){B=0;e=ya(423,4)|0;f=B;B=0;if(f&1)break a;B=0;eb(505,e|0,c|0,0);f=B;B=0;if(!(f&1)){k[b+4>>2]=e;break}f=Rb()|0;g=Q;Sqa(e);h=g;i=f;Sqa(b);Qb(i|0)}while(0);if((th(a)|0)>0){f=0;do{g=qh(a,f)|0;Fc[k[(k[g>>2]|0)+400>>2]&1023](g,b);f=f+1|0}while((f|0)<(th(a)|0))}if(!(k[b>>2]|0)){j=0;Sqa(b);return j|0}f=b+4|0;g=k[k[f>>2]>>2]|0;Ec[k[(k[g>>2]|0)+12>>2]&1023](g);if(!(k[b>>2]|0)){j=0;Sqa(b);return j|0}g=k[k[f>>2]>>2]|0;e=Hc[k[(k[g>>2]|0)+52>>2]&511](g)|0;if(!(k[b>>2]|0)){j=e;Sqa(b);return j|0}g=k[f>>2]|0;if(!g){j=e;Sqa(b);return j|0}f=k[g>>2]|0;if(f)Ec[k[(k[f>>2]|0)+4>>2]&1023](f);Sqa(g);j=e;Sqa(b);return j|0}while(0);j=Rb()|0;h=Q;i=j;Sqa(b);Qb(i|0);return 0}function u0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;b=r;r=r+176|0;f=b+164|0;g=b+156|0;h=b+152|0;i=b+16|0;j=b;cO(d,b+160|0,477);d=Qqa(8)|0;B=0;l=ya(429,c|0)|0;c=B;B=0;a:do if(!(c&1)?(B=0,va(485,d|0),m=B,B=0,!(m&1)):0){do if(k[d>>2]|0){B=0;m=ya(423,4)|0;n=B;B=0;if(n&1){o=10;break a}B=0;eb(505,m|0,l|0,0);n=B;B=0;if(n&1){n=Rb()|0;q=Q;Sqa(m);s=q;t=n;break a}else{k[d+4>>2]=m;break}}while(0);if((th(a)|0)>0){m=0;do{Gp(qh(a,m)|0,d,928,628);m=m+1|0}while((m|0)<(th(a)|0))}m=d+4|0;if((k[d>>2]|0)!=0?(n=k[k[m>>2]>>2]|0,Ec[k[(k[n>>2]|0)+12>>2]&1023](n),(k[d>>2]|0)!=0):0){n=k[k[m>>2]>>2]|0;u=Hc[k[(k[n>>2]|0)+52>>2]&511](n)|0}else u=0;k[g>>2]=1;n=i+56|0;q=i+4|0;v=i+56|0;w=i+128|0;x=i+132|0;y=i+36|0;z=i+52|0;A=u;while(1){C=Qqa(8)|0;B=0;D=ya(434,a|0)|0;E=B;B=0;if(E&1){F=C;o=28;break}B=0;va(485,C|0);E=B;B=0;if(E&1){F=C;o=28;break}if(k[C>>2]|0){B=0;E=ya(423,4)|0;G=B;B=0;if(G&1){F=C;o=28;break}B=0;eb(505,E|0,D|0,1);D=B;B=0;if(D&1){H=C;I=E;o=24;break}k[C+4>>2]=E}if((th(a)|0)>0){E=C+4|0;D=0;do{G=qh(a,D)|0;J=Rp(G)|0;K=ed[k[(k[G>>2]|0)+244>>2]&511](G,A)|0;if(k[C>>2]|0){G=k[k[E>>2]>>2]|0;Jc[k[(k[G>>2]|0)+20>>2]&1](G,J,K?1.0:0.0,0)}D=D+1|0}while((D|0)<(th(a)|0))}if((k[C>>2]|0)!=0?(D=C+4|0,E=k[k[D>>2]>>2]|0,Ec[k[(k[E>>2]|0)+12>>2]&1023](E),(k[C>>2]|0)!=0):0){E=k[k[D>>2]>>2]|0;L=Hc[k[(k[E>>2]|0)+52>>2]&511](E)|0}else L=0;k[h>>2]=0;if((th(a)|0)>0){E=0;do{D=qh(a,E)|0;K=L+((Rp(D)|0)<<3)|0;if(~~+p[K>>3]){K=ld[k[(k[D>>2]|0)+492>>2]&127](D,e,d,A)|0;k[h>>2]=(k[h>>2]|0)+K}E=E+1|0}while((E|0)<(th(a)|0))}if(k[d>>2]|0){E=k[k[m>>2]>>2]|0;Ec[k[(k[E>>2]|0)+12>>2]&1023](E)}fZ(h,g,1,4,4,uY()|0)|0;if(EY()|0){k[i>>2]=27524;k[n>>2]=27544;B=0;wa(508,v|0,q|0);E=B;B=0;if(E&1){o=44;break}k[w>>2]=0;k[x>>2]=-1;k[i>>2]=27468;k[n>>2]=27488;B=0;va(448,q|0);E=B;B=0;if(E&1){o=45;break}k[q>>2]=27560;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[z>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,q|0,f|0);E=B;B=0;if(E&1){o=43;break}Yua(f);B=0;E=Ia(40,i|0,117657,54)|0;K=B;B=0;if(K&1){o=54;break}B=0;K=Xa(242,E|0,k[g>>2]|0)|0;E=B;B=0;if(E&1){o=54;break}B=0;Ia(40,K|0,149177,1)|0;K=B;B=0;if(K&1){o=54;break}B=0;wa(510,j|0,q|0);K=B;B=0;if(K&1){o=54;break}B=0;ya(425,j|0)|0;K=B;B=0;if(K&1){o=55;break}Yua(j);k[i>>2]=27468;k[n>>2]=27488;k[q>>2]=27560;Yua(y);Ava(q);vva(n)}if(L)Tqa(L);if(A)Tqa(A);if((k[C>>2]|0)!=0?(K=k[C+4>>2]|0,(K|0)!=0):0){E=k[K>>2]|0;if(E)Ec[k[(k[E>>2]|0)+4>>2]&1023](E);Sqa(K)}Sqa(C);if(!(k[d>>2]|0))M=0;else{K=k[k[m>>2]>>2]|0;M=Hc[k[(k[K>>2]|0)+52>>2]&511](K)|0}if(!(k[g>>2]|0)){N=M;o=69;break}else A=M}if((o|0)==24){A=Rb()|0;z=Q;Sqa(I);O=H;P=z;R=A;o=29}else if((o|0)==28){A=Rb()|0;O=F;P=Q;R=A;o=29}else if((o|0)==43){A=Rb()|0;z=Q;Yua(f);Yua(y);Ava(q);S=z;T=A;o=46}else if((o|0)==44){A=Rb()|0;U=Q;V=A;vva(n);Qb(V|0)}else if((o|0)==45){A=Rb()|0;S=Q;T=A;o=46}else if((o|0)==54){A=Rb()|0;W=Q;X=A;o=56}else if((o|0)==55){A=Rb()|0;z=Q;Yua(j);W=z;X=A;o=56}else if((o|0)==69){if(!(k[d>>2]|0)){Sqa(d);r=b;return N|0}A=k[m>>2]|0;if(!A){Sqa(d);r=b;return N|0}z=k[A>>2]|0;if(z)Ec[k[(k[z>>2]|0)+4>>2]&1023](z);Sqa(A);Sqa(d);r=b;return N|0}if((o|0)==29){Sqa(O);Y=P;Z=R;Qb(Z|0)}else if((o|0)==46){U=S;V=T;vva(n);Qb(V|0)}else if((o|0)==56){k[i>>2]=27468;k[n>>2]=27488;k[q>>2]=27560;Yua(y);Ava(q);vva(n);Y=W;Z=X;Qb(Z|0)}}else o=10;while(0);if((o|0)==10){o=Rb()|0;s=Q;t=o}Sqa(d);Y=s;Z=t;Qb(Z|0);return 0}function v0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0.0,t=0,u=0,v=0;c=nn(b)|0;b=Qqa(8)|0;B=0;va(485,b|0);d=B;B=0;a:do if(d&1)e=23;else{do if(k[b>>2]|0){B=0;f=ya(423,4)|0;g=B;B=0;if(g&1){e=23;break a}B=0;eb(505,f|0,c|0,0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Sqa(f);i=h;j=g;break a}else{k[b+4>>2]=f;break}}while(0);f=Qqa(8)|0;B=0;va(485,f|0);g=B;B=0;b:do if(g&1)e=25;else{do if(k[f>>2]|0){B=0;h=ya(423,4)|0;l=B;B=0;if(l&1){e=25;break b}B=0;eb(505,h|0,c|0,0);l=B;B=0;if(l&1){l=Rb()|0;m=Q;Sqa(h);n=m;o=l;break b}else{k[f+4>>2]=h;break}}while(0);h=Rqa(c>>>0>536870911?-1:c<<3)|0;if((th(a)|0)>0){l=0;do{m=qh(a,l)|0;nd[k[(k[m>>2]|0)+120>>2]&1023](m,b,f);l=l+1|0}while((l|0)<(th(a)|0))}if(k[b>>2]|0){l=k[k[b+4>>2]>>2]|0;Ec[k[(k[l>>2]|0)+12>>2]&1023](l)}if(k[f>>2]|0){l=k[k[f+4>>2]>>2]|0;Ec[k[(k[l>>2]|0)+12>>2]&1023](l)}if(!(k[b>>2]|0))q=0;else{l=k[k[b+4>>2]>>2]|0;q=Hc[k[(k[l>>2]|0)+52>>2]&511](l)|0}if(!(k[f>>2]|0))r=0;else{l=k[k[f+4>>2]>>2]|0;r=Hc[k[(k[l>>2]|0)+52>>2]&511](l)|0}if((c|0)>0){l=0;do{s=+p[q+(l<<3)>>3];m=+p[r+(l<<3)>>3]==1.0;do if(s==1.0){t=h+(l<<3)|0;if(m){p[t>>3]=0.0;break}else{p[t>>3]=1.0;break}}else{if(m){p[h+(l<<3)>>3]=-1.0;break}t=h+(l<<3)|0;if(s>10.0){p[t>>3]=9999.0;break}else{p[t>>3]=-9999.0;break}}while(0);l=l+1|0}while((l|0)!=(c|0))}if((k[b>>2]|0)!=0?(l=k[b+4>>2]|0,(l|0)!=0):0){m=k[l>>2]|0;if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Sqa(l)}Sqa(b);if((k[f>>2]|0)!=0?(l=k[f+4>>2]|0,(l|0)!=0):0){m=k[l>>2]|0;if(m)Ec[k[(k[m>>2]|0)+4>>2]&1023](m);Sqa(l)}Sqa(f);if(q)Tqa(q);if(!r)return h|0;Tqa(r);return h|0}while(0);if((e|0)==25){g=Rb()|0;n=Q;o=g}Sqa(f);u=n;v=o;Qb(v|0)}while(0);if((e|0)==23){e=Rb()|0;i=Q;j=e}Sqa(b);u=i;v=j;Qb(v|0);return 0}function w0(a){a=a|0;var b=0;k[a>>2]=37076;k[a+4>>2]=37196;k[a+124>>2]=0;b=a+44|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;return}function x0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0;f=r;r=r+32|0;g=f+16|0;h=f+8|0;j=f+4|0;l=f;k[a>>2]=37076;k[a+4>>2]=37196;B=0;eb(512,d|0,l|0,117723);m=B;B=0;do if(((((!(m&1)?(B=0,n=Xa(246,d|0,127458)|0,o=B,B=0,!(o&1)):0)?(o=c*12|0,q=~~+p[n+(o<<3)+16>>3],B=0,n=Xa(246,d|0,127458)|0,s=B,B=0,!(s&1)):0)?(s=~~+p[n+(o<<3)+24>>3],B=0,n=Xa(246,d|0,127458)|0,t=B,B=0,!(t&1)):0)?(t=~~+p[n+(o<<3)>>3],B=0,n=Xa(246,d|0,127458)|0,u=B,B=0,!(u&1)):0)?(u=~~+p[n+(o<<3)+8>>3],k[a+8>>2]=b,k[a+12>>2]=e,n=k[d+100>>2]|0,k[g>>2]=n+t,k[g+4>>2]=n+u,k[h>>2]=q,k[h+4>>2]=s,k[j>>2]=(k[d+56>>2]|0)+1,B=0,s=ya(423,16)|0,q=B,B=0,!(q&1)):0){B=0;eb(509,s|0,g|0,2);q=B;B=0;if(q&1){q=Rb()|0;u=Q;Sqa(s);v=u;w=q;Qb(w|0)}k[a+44>>2]=s;B=0;s=ya(423,16)|0;q=B;B=0;if(!(q&1)){B=0;eb(509,s|0,h|0,2);q=B;B=0;if(q&1){q=Rb()|0;u=Q;Sqa(s);v=u;w=q;Qb(w|0)}k[a+48>>2]=s;B=0;s=ya(423,16)|0;q=B;B=0;if(!(q&1)){B=0;eb(509,s|0,j|0,1);q=B;B=0;if(q&1){q=Rb()|0;u=Q;Sqa(s);v=u;w=q;Qb(w|0)}k[a+52>>2]=s;i[a+72>>0]=0;i[a+73>>0]=0;k[a+76>>2]=0;i[a+80>>0]=0;k[a+68>>2]=k[l>>2];i[a+81>>0]=0;B=0;s=Xa(246,d|0,127458)|0;q=B;B=0;if(((((((!(q&1)?(p[a+88>>3]=+p[s+(o<<3)+32>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(p[a+96>>3]=+p[s+(o<<3)+40>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(p[a+104>>3]=+p[s+(o<<3)+48>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(p[a+112>>3]=+p[s+(o<<3)+72>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(k[a+120>>2]=~~+p[s+(o<<3)+88>>3],k[a+16>>2]=613,B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(k[a+20>>2]=~~+p[s+(o<<3)+56>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0)?(p[a+24>>3]=+p[s+(o<<3)+64>>3],B=0,s=Xa(246,d|0,127458)|0,q=B,B=0,!(q&1)):0){p[a+32>>3]=+p[s+(o<<3)+80>>3];B=0;o=Xa(246,d|0,134962)|0;s=B;B=0;if(s&1)break;i[a+40>>0]=+p[o+(t+-1<<3)>>3]<0.0&1;k[a+124>>2]=0;k[a+60>>2]=0;k[a+64>>2]=0;k[a+56>>2]=0;r=f;return}}}}while(0);f=Rb()|0;v=Q;w=f;Qb(w|0)}function y0(a){a=a|0;var b=0;k[a>>2]=37076;k[a+4>>2]=37196;k[a+124>>2]=0;b=k[a+44>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+48>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+52>>2]|0;if(!b)return;yla(b);Sqa(b);return}function z0(a){a=a|0;var b=0;k[a>>2]=37076;k[a+4>>2]=37196;k[a+124>>2]=0;b=k[a+44>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+48>>2]|0;if(b){yla(b);Sqa(b)}b=k[a+52>>2]|0;if(!b){Sqa(a);return}yla(b);Sqa(b);Sqa(a);return}function A0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=Qqa(128)|0;k[b>>2]=37076;k[b+4>>2]=37196;c=b+44|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[c+16>>2]=0;k[c+20>>2]=0;k[b+8>>2]=k[a+8>>2];k[b+12>>2]=k[a+12>>2];k[b+16>>2]=k[a+16>>2];k[b+20>>2]=k[a+20>>2];p[b+24>>3]=+p[a+24>>3];p[b+32>>3]=+p[a+32>>3];i[b+40>>0]=i[a+40>>0]|0;k[b+124>>2]=k[a+124>>2];d=Bla(k[a+44>>2]|0)|0;k[c>>2]=d;d=Bla(k[a+48>>2]|0)|0;e=b+48|0;k[e>>2]=d;d=Bla(k[a+52>>2]|0)|0;f=b+52|0;k[f>>2]=d;d=Gla(k[c>>2]|0)|0;k[b+60>>2]=d;d=Gla(k[e>>2]|0)|0;k[b+64>>2]=d;d=Fla(k[f>>2]|0)|0;k[b+56>>2]=d;k[b+68>>2]=k[a+68>>2];d=j[a+72>>1]|0;i[b+72>>0]=d;i[b+73>>0]=(d&65535)>>>8;k[b+120>>2]=k[a+120>>2];k[b+76>>2]=k[a+76>>2];d=j[a+80>>1]|0;i[b+80>>0]=d;i[b+81>>0]=(d&65535)>>>8;p[b+88>>3]=+p[a+88>>3];p[b+96>>3]=+p[a+96>>3];p[b+104>>3]=+p[a+104>>3];p[b+112>>3]=+p[a+112>>3];return b|0}function B0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;e=r;r=r+368|0;f=e+344|0;g=e+208|0;h=e+196|0;j=e+184|0;m=e+36|0;n=e+48|0;o=e+24|0;q=e+12|0;s=e;u=(d|0)==0;a:do if(u){v=k[b>>2]|0;i[v>>0]=98;i[v+1>>0]=2;i[v+2>>0]=0;i[v+3>>0]=0;v=(k[b>>2]|0)+4|0;k[b>>2]=v;w=a+8|0;x=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[v>>0]=x;i[v+1>>0]=x>>8;i[v+2>>0]=x>>16;i[v+3>>0]=x>>24;x=(k[b>>2]|0)+4|0;k[b>>2]=x;v=a+12|0;w=l[v>>0]|l[v+1>>0]<<8|l[v+2>>0]<<16|l[v+3>>0]<<24;i[x>>0]=w;i[x+1>>0]=w>>8;i[x+2>>0]=w>>16;i[x+3>>0]=w>>24;w=(k[b>>2]|0)+4|0;k[b>>2]=w;x=a+16|0;v=l[x>>0]|l[x+1>>0]<<8|l[x+2>>0]<<16|l[x+3>>0]<<24;i[w>>0]=v;i[w+1>>0]=v>>8;i[w+2>>0]=v>>16;i[w+3>>0]=v>>24;v=(k[b>>2]|0)+4|0;k[b>>2]=v;w=a+20|0;x=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[v>>0]=x;i[v+1>>0]=x>>8;i[v+2>>0]=x>>16;i[v+3>>0]=x>>24;x=(k[b>>2]|0)+4|0;k[b>>2]=x;v=a+24|0;w=v;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;w=v+4|0;v=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;w=x;x=w;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=w+4|0;i[y>>0]=v;i[y+1>>0]=v>>8;i[y+2>>0]=v>>16;i[y+3>>0]=v>>24;v=(k[b>>2]|0)+8|0;k[b>>2]=v;y=a+32|0;w=y;x=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;w=y+4|0;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;w=v;v=w;i[v>>0]=x;i[v+1>>0]=x>>8;i[v+2>>0]=x>>16;i[v+3>>0]=x>>24;x=w+4|0;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=(k[b>>2]|0)+8|0;k[b>>2]=y;i[y>>0]=i[a+40>>0]|0;k[b>>2]=(k[b>>2]|0)+1;z=0}else switch(d|0){case 2:{k[c>>2]=(k[c>>2]|0)+37;z=0;break a;break}case 1:{y=(k[b>>2]|0)+4|0;k[b>>2]=y;x=a+8|0;w=l[y>>0]|l[y+1>>0]<<8|l[y+2>>0]<<16|l[y+3>>0]<<24;i[x>>0]=w;i[x+1>>0]=w>>8;i[x+2>>0]=w>>16;i[x+3>>0]=w>>24;w=(k[b>>2]|0)+4|0;k[b>>2]=w;x=a+12|0;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=(k[b>>2]|0)+4|0;k[b>>2]=y;x=a+16|0;w=l[y>>0]|l[y+1>>0]<<8|l[y+2>>0]<<16|l[y+3>>0]<<24;i[x>>0]=w;i[x+1>>0]=w>>8;i[x+2>>0]=w>>16;i[x+3>>0]=w>>24;w=(k[b>>2]|0)+4|0;k[b>>2]=w;x=a+20|0;y=l[w>>0]|l[w+1>>0]<<8|l[w+2>>0]<<16|l[w+3>>0]<<24;i[x>>0]=y;i[x+1>>0]=y>>8;i[x+2>>0]=y>>16;i[x+3>>0]=y>>24;y=(k[b>>2]|0)+4|0;k[b>>2]=y;x=a+24|0;i[t>>0]=i[y>>0];i[t+1>>0]=i[y+1>>0];i[t+2>>0]=i[y+2>>0];i[t+3>>0]=i[y+3>>0];i[t+4>>0]=i[y+4>>0];i[t+5>>0]=i[y+5>>0];i[t+6>>0]=i[y+6>>0];i[t+7>>0]=i[y+7>>0];p[t>>3]=+p[t>>3];i[x>>0]=i[t>>0];i[x+1>>0]=i[t+1>>0];i[x+2>>0]=i[t+2>>0];i[x+3>>0]=i[t+3>>0];i[x+4>>0]=i[t+4>>0];i[x+5>>0]=i[t+5>>0];i[x+6>>0]=i[t+6>>0];i[x+7>>0]=i[t+7>>0];x=(k[b>>2]|0)+8|0;k[b>>2]=x;y=a+32|0;i[t>>0]=i[x>>0];i[t+1>>0]=i[x+1>>0];i[t+2>>0]=i[x+2>>0];i[t+3>>0]=i[x+3>>0];i[t+4>>0]=i[x+4>>0];i[t+5>>0]=i[x+5>>0];i[t+6>>0]=i[x+6>>0];i[t+7>>0]=i[x+7>>0];p[t>>3]=+p[t>>3];i[y>>0]=i[t>>0];i[y+1>>0]=i[t+1>>0];i[y+2>>0]=i[t+2>>0];i[y+3>>0]=i[t+3>>0];i[y+4>>0]=i[t+4>>0];i[y+5>>0]=i[t+5>>0];i[y+6>>0]=i[t+6>>0];i[y+7>>0]=i[t+7>>0];y=(k[b>>2]|0)+8|0;k[b>>2]=y;i[a+40>>0]=i[y>>0]|0;k[b>>2]=(k[b>>2]|0)+1;y=Qqa(16)|0;B=0;va(489,y|0);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Sqa(y);A=w;C=x;Qb(C|0)}k[a+44>>2]=y;y=Qqa(16)|0;B=0;va(489,y|0);x=B;B=0;if(x&1){x=Rb()|0;w=Q;Sqa(y);A=w;C=x;Qb(C|0)}k[a+52>>2]=y;y=Qqa(16)|0;B=0;va(489,y|0);x=B;B=0;if(!(x&1)){k[a+48>>2]=y;z=1;break a}x=Rb()|0;w=Q;Sqa(y);A=w;C=x;Qb(C|0);break}default:{x=g+56|0;w=g+4|0;k[g>>2]=27524;k[x>>2]=27544;B=0;wa(508,g+56|0,w|0);y=B;B=0;if(y&1){y=Rb()|0;D=Q;E=y;vva(x);Qb(E|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);y=B;B=0;do if(y&1){v=Rb()|0;F=Q;G=v}else{k[w>>2]=27560;v=g+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(f);Yua(v);Ava(w);F=I;G=H;break}Yua(f);B=0;H=Ia(40,g|0,143951,43)|0;I=B;B=0;b:do if(!(I&1)?(B=0,Xa(239,H|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,h|0,117758,74);K=B;B=0;do if(!(K&1)){B=0;eb(502,j|0,149525,8);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(h);N=M;O=L;break}B=0;wa(510,m|0,w|0);L=B;B=0;if(L&1){L=Rb()|0;P=Q;R=L;S=1}else{B=0;ua(163,J|0,h|0,j|0,160,m|0);L=B;B=0;if(L&1)T=1;else{B=0;eb(503,J|0,1240,229);B=0;T=0}L=Rb()|0;M=Q;Yua(m);P=M;R=L;S=T}Yua(j);Yua(h);if(S){N=P;O=R}else{U=P;V=R;break b}}else{L=Rb()|0;N=Q;O=L}while(0);zb(J|0);U=N;V=O}else W=18;while(0);if((W|0)==18){H=Rb()|0;U=Q;V=H}k[g>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(x);A=U;C=V;Qb(C|0)}while(0);D=F;E=G;vva(x);Qb(E|0)}}while(0);E=a+44|0;Cla(k[E>>2]|0,b,c,d);G=a+52|0;Cla(k[G>>2]|0,b,c,d);F=a+48|0;Cla(k[F>>2]|0,b,c,d);D=Gla(k[E>>2]|0)|0;k[a+60>>2]=D;D=Fla(k[G>>2]|0)|0;k[a+56>>2]=D;D=Gla(k[F>>2]|0)|0;k[a+64>>2]=D;if(u){u=k[b>>2]|0;D=a+68|0;F=l[D>>0]|l[D+1>>0]<<8|l[D+2>>0]<<16|l[D+3>>0]<<24;i[u>>0]=F;i[u+1>>0]=F>>8;i[u+2>>0]=F>>16;i[u+3>>0]=F>>24;F=(k[b>>2]|0)+4|0;k[b>>2]=F;i[F>>0]=i[a+72>>0]|0;F=(k[b>>2]|0)+1|0;k[b>>2]=F;i[F>>0]=i[a+73>>0]|0;F=(k[b>>2]|0)+1|0;k[b>>2]=F;u=a+120|0;D=l[u>>0]|l[u+1>>0]<<8|l[u+2>>0]<<16|l[u+3>>0]<<24;i[F>>0]=D;i[F+1>>0]=D>>8;i[F+2>>0]=D>>16;i[F+3>>0]=D>>24;D=(k[b>>2]|0)+4|0;k[b>>2]=D;F=a+76|0;u=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;i[D>>0]=u;i[D+1>>0]=u>>8;i[D+2>>0]=u>>16;i[D+3>>0]=u>>24;u=(k[b>>2]|0)+4|0;k[b>>2]=u;i[u>>0]=i[a+80>>0]|0;u=(k[b>>2]|0)+1|0;k[b>>2]=u;i[u>>0]=i[a+81>>0]|0;u=(k[b>>2]|0)+1|0;k[b>>2]=u;D=a+88|0;F=D;G=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=D+4|0;D=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=u;u=F;i[u>>0]=G;i[u+1>>0]=G>>8;i[u+2>>0]=G>>16;i[u+3>>0]=G>>24;G=F+4|0;i[G>>0]=D;i[G+1>>0]=D>>8;i[G+2>>0]=D>>16;i[G+3>>0]=D>>24;D=(k[b>>2]|0)+8|0;k[b>>2]=D;G=a+96|0;F=G;u=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=G+4|0;G=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=D;D=F;i[D>>0]=u;i[D+1>>0]=u>>8;i[D+2>>0]=u>>16;i[D+3>>0]=u>>24;u=F+4|0;i[u>>0]=G;i[u+1>>0]=G>>8;i[u+2>>0]=G>>16;i[u+3>>0]=G>>24;G=(k[b>>2]|0)+8|0;k[b>>2]=G;u=a+104|0;F=u;D=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=u+4|0;u=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=G;G=F;i[G>>0]=D;i[G+1>>0]=D>>8;i[G+2>>0]=D>>16;i[G+3>>0]=D>>24;D=F+4|0;i[D>>0]=u;i[D+1>>0]=u>>8;i[D+2>>0]=u>>16;i[D+3>>0]=u>>24;u=(k[b>>2]|0)+8|0;k[b>>2]=u;D=a+112|0;F=D;G=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=D+4|0;D=l[F>>0]|l[F+1>>0]<<8|l[F+2>>0]<<16|l[F+3>>0]<<24;F=u;u=F;i[u>>0]=G;i[u+1>>0]=G>>8;i[u+2>>0]=G>>16;i[u+3>>0]=G>>24;G=F+4|0;i[G>>0]=D;i[G+1>>0]=D>>8;i[G+2>>0]=D>>16;i[G+3>>0]=D>>24;k[b>>2]=(k[b>>2]|0)+8;r=e;return}if((d|0)==2){k[c>>2]=(k[c>>2]|0)+48;r=e;return}if(z){z=a+68|0;c=k[b>>2]|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[z>>0]=d;i[z+1>>0]=d>>8;i[z+2>>0]=d>>16;i[z+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[a+72>>0]=i[d>>0]|0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;i[a+73>>0]=i[d>>0]|0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;z=a+120|0;c=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[z>>0]=c;i[z+1>>0]=c>>8;i[z+2>>0]=c>>16;i[z+3>>0]=c>>24;c=(k[b>>2]|0)+4|0;k[b>>2]=c;z=a+76|0;d=l[c>>0]|l[c+1>>0]<<8|l[c+2>>0]<<16|l[c+3>>0]<<24;i[z>>0]=d;i[z+1>>0]=d>>8;i[z+2>>0]=d>>16;i[z+3>>0]=d>>24;d=(k[b>>2]|0)+4|0;k[b>>2]=d;i[a+80>>0]=i[d>>0]|0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;i[a+81>>0]=i[d>>0]|0;d=(k[b>>2]|0)+1|0;k[b>>2]=d;z=a+88|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[z>>0]=i[t>>0];i[z+1>>0]=i[t+1>>0];i[z+2>>0]=i[t+2>>0];i[z+3>>0]=i[t+3>>0];i[z+4>>0]=i[t+4>>0];i[z+5>>0]=i[t+5>>0];i[z+6>>0]=i[t+6>>0];i[z+7>>0]=i[t+7>>0];z=(k[b>>2]|0)+8|0;k[b>>2]=z;d=a+96|0;i[t>>0]=i[z>>0];i[t+1>>0]=i[z+1>>0];i[t+2>>0]=i[z+2>>0];i[t+3>>0]=i[z+3>>0];i[t+4>>0]=i[z+4>>0];i[t+5>>0]=i[z+5>>0];i[t+6>>0]=i[z+6>>0];i[t+7>>0]=i[z+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];d=(k[b>>2]|0)+8|0;k[b>>2]=d;z=a+104|0;i[t>>0]=i[d>>0];i[t+1>>0]=i[d+1>>0];i[t+2>>0]=i[d+2>>0];i[t+3>>0]=i[d+3>>0];i[t+4>>0]=i[d+4>>0];i[t+5>>0]=i[d+5>>0];i[t+6>>0]=i[d+6>>0];i[t+7>>0]=i[d+7>>0];p[t>>3]=+p[t>>3];i[z>>0]=i[t>>0];i[z+1>>0]=i[t+1>>0];i[z+2>>0]=i[t+2>>0];i[z+3>>0]=i[t+3>>0];i[z+4>>0]=i[t+4>>0];i[z+5>>0]=i[t+5>>0];i[z+6>>0]=i[t+6>>0];i[z+7>>0]=i[t+7>>0];z=(k[b>>2]|0)+8|0;k[b>>2]=z;d=a+112|0;i[t>>0]=i[z>>0];i[t+1>>0]=i[z+1>>0];i[t+2>>0]=i[z+2>>0];i[t+3>>0]=i[z+3>>0];i[t+4>>0]=i[z+4>>0];i[t+5>>0]=i[z+5>>0];i[t+6>>0]=i[z+6>>0];i[t+7>>0]=i[z+7>>0];p[t>>3]=+p[t>>3];i[d>>0]=i[t>>0];i[d+1>>0]=i[t+1>>0];i[d+2>>0]=i[t+2>>0];i[d+3>>0]=i[t+3>>0];i[d+4>>0]=i[t+4>>0];i[d+5>>0]=i[t+5>>0];i[d+6>>0]=i[t+6>>0];i[d+7>>0]=i[t+7>>0];k[b>>2]=(k[b>>2]|0)+8;r=e;return}e=n+56|0;b=n+4|0;k[n>>2]=27524;k[e>>2]=27544;B=0;wa(508,n+56|0,b|0);d=B;B=0;if(d&1){d=Rb()|0;X=Q;Y=d;vva(e);Qb(Y|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[e>>2]=27488;B=0;va(448,b|0);d=B;B=0;do if(d&1){z=Rb()|0;Z=Q;_=z}else{k[b>>2]=27560;z=n+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,b|0,f|0);a=B;B=0;if(a&1){a=Rb()|0;c=Q;Yua(f);Yua(z);Ava(b);Z=c;_=a;break}Yua(f);B=0;a=Ia(40,n|0,143951,43)|0;c=B;B=0;c:do if(!(c&1)?(B=0,Xa(239,a|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,o|0,117758,74);G=B;B=0;do if(!(G&1)){B=0;eb(502,q|0,149525,8);F=B;B=0;if(F&1){F=Rb()|0;u=Q;Yua(o);$=F;aa=u;break}B=0;wa(510,s|0,b|0);u=B;B=0;if(u&1){u=Rb()|0;ba=1;ca=Q;da=u}else{B=0;ua(163,D|0,o|0,q|0,184,s|0);u=B;B=0;if(u&1)ea=1;else{B=0;eb(503,D|0,1240,229);B=0;ea=0}u=Rb()|0;F=Q;Yua(s);ba=ea;ca=F;da=u}Yua(q);Yua(o);if(ba){$=da;aa=ca}else{fa=ca;ga=da;break c}}else{u=Rb()|0;$=u;aa=Q}while(0);zb(D|0);fa=aa;ga=$}else W=53;while(0);if((W|0)==53){a=Rb()|0;fa=Q;ga=a}k[n>>2]=27468;k[e>>2]=27488;k[b>>2]=27560;Yua(z);Ava(b);vva(e);A=fa;C=ga;Qb(C|0)}while(0);X=Z;Y=_;vva(e);Qb(Y|0)}function C0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;b=r;r=r+624|0;c=b+604|0;d=b+456|0;e=b+592|0;f=b+304|0;g=b+440|0;h=b+152|0;i=b+288|0;j=b+16|0;l=b;m=d+56|0;n=d+4|0;k[d>>2]=27524;k[m>>2]=27544;B=0;wa(508,d+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(m);Qb(q|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=d+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(c);Yua(s);Ava(n);t=w;u=v;break}Yua(c);B=0;Ia(40,d|0,117833,11)|0;v=B;B=0;do if(!(v&1)?(B=0,wa(510,e|0,n|0),w=B,B=0,!(w&1)):0){B=0;ya(424,e|0)|0;w=B;B=0;if(w&1){w=Rb()|0;x=Q;Yua(e);y=x;z=w;break}Yua(e);k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);w=f+56|0;x=f+4|0;k[f>>2]=27524;k[w>>2]=27544;B=0;wa(508,f+56|0,x|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(w);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[w>>2]=27488;B=0;va(448,x|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[x>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(c);Yua(E);Ava(x);F=I;G=H;break}Yua(c);B=0;H=Ia(40,f|0,144086,7)|0;I=B;B=0;do if(((!(I&1)?(B=0,J=Xa(242,H|0,k[a+8>>2]|0)|0,K=B,B=0,!(K&1)):0)?(B=0,Ia(40,J|0,149177,1)|0,J=B,B=0,!(J&1)):0)?(B=0,wa(510,g|0,x|0),J=B,B=0,!(J&1)):0){B=0;ya(424,g|0)|0;J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(g);L=K;M=J;break}Yua(g);k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);J=h+56|0;K=h+4|0;k[h>>2]=27524;k[J>>2]=27544;B=0;wa(508,h+56|0,K|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(J);Qb(P|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[K>>2]=27560;R=h+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,K|0,c|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(c);Yua(R);Ava(K);S=V;T=U;break}Yua(c);B=0;U=Ia(40,h|0,144094,18)|0;V=B;B=0;do if(V&1)W=58;else{B=0;X=ya(427,k[a+12>>2]|0)|0;Y=B;B=0;if(Y&1){W=58;break}Y=Lta(X)|0;B=0;Z=Ia(40,U|0,X|0,Y|0)|0;Y=B;B=0;if(Y&1){W=58;break}B=0;Ia(40,Z|0,149177,1)|0;Z=B;B=0;if(Z&1){W=58;break}B=0;wa(510,i|0,K|0);Z=B;B=0;if(Z&1){W=58;break}B=0;ya(424,i|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;Y=Q;Yua(i);_=Y;$=Z;break}Yua(i);k[h>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(R);Ava(K);vva(J);Ala(k[a+44>>2]|0);Ala(k[a+48>>2]|0);Ala(k[a+52>>2]|0);Z=j+56|0;Y=j+4|0;k[j>>2]=27524;k[Z>>2]=27544;B=0;wa(508,j+56|0,Y|0);X=B;B=0;if(X&1){X=Rb()|0;aa=Q;ba=X;vva(Z);Qb(ba|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Z>>2]=27488;B=0;va(448,Y|0);X=B;B=0;do if(X&1){ca=Rb()|0;da=Q;ea=ca}else{k[Y>>2]=27560;ca=j+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[j+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Y|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(c);Yua(ca);Ava(Y);da=ga;ea=fa;break}Yua(c);B=0;Ia(40,j|0,144113,14)|0;fa=B;B=0;do if(!(fa&1)){B=0;wa(510,l|0,Y|0);ga=B;B=0;if(ga&1){W=61;break}B=0;ya(424,l|0)|0;ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(l);ia=ha;ja=ga;break}Yua(l);k[j>>2]=27468;k[Z>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(Z);ga=k[a+124>>2]|0;if(!ga){r=b;return}else $N(ga)}else W=61;while(0);if((W|0)==61){fa=Rb()|0;ia=Q;ja=fa}k[j>>2]=27468;k[Z>>2]=27488;k[Y>>2]=27560;Yua(ca);Ava(Y);vva(Z);ka=ia;la=ja;Qb(la|0)}while(0);aa=da;ba=ea;vva(Z);Qb(ba|0)}while(0);if((W|0)==58){U=Rb()|0;_=Q;$=U}k[h>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(R);Ava(K);vva(J);ka=_;la=$;Qb(la|0)}while(0);O=S;P=T;vva(J);Qb(P|0)}else W=55;while(0);if((W|0)==55){H=Rb()|0;L=Q;M=H}k[f>>2]=27468;k[w>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(w);ka=L;la=M;Qb(la|0)}while(0);C=F;D=G;vva(w);Qb(D|0)}else W=52;while(0);if((W|0)==52){v=Rb()|0;y=Q;z=v}k[d>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(m);ka=y;la=z;Qb(la|0)}while(0);p=t;q=u;vva(m);Qb(q|0)}function D0(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0;b=r;r=r+3168|0;c=b+3152|0;d=b+2896|0;e=b+3140|0;f=b+2760|0;g=b+3128|0;h=b+2608|0;j=b+3116|0;l=b+2472|0;m=b+3104|0;n=b+2320|0;o=b+3092|0;q=b+2184|0;s=b+3080|0;t=b+2032|0;u=b+3068|0;v=b+1896|0;w=b+3056|0;x=b+1744|0;y=b+3044|0;z=b+1592|0;A=b+3032|0;C=b+1456|0;D=b+2744|0;E=b+1320|0;F=b+2456|0;G=b+1168|0;H=b+2168|0;I=b+1016|0;J=b+1880|0;K=b+880|0;L=b+1728|0;M=b+744|0;N=b+1304|0;O=b+592|0;P=b+1152|0;R=b+456|0;S=b+728|0;T=b+304|0;U=b+440|0;V=b+168|0;W=b+152|0;X=b+16|0;Y=b;Z=d+56|0;_=d+4|0;k[d>>2]=27524;k[Z>>2]=27544;B=0;wa(508,d+56|0,_|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;ba=$;vva(Z);Qb(ba|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);$=B;B=0;do if($&1){ca=Rb()|0;da=Q;ea=ca}else{k[_>>2]=27560;ca=d+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(c);Yua(ca);Ava(_);da=ga;ea=fa;break}Yua(c);B=0;Ia(40,d|0,117833,11)|0;fa=B;B=0;do if(!(fa&1)?(B=0,wa(510,e|0,_|0),ga=B,B=0,!(ga&1)):0){B=0;ya(424,e|0)|0;ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(e);ia=ha;ja=ga;break}Yua(e);k[d>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ca);Ava(_);vva(Z);ga=f+56|0;ha=f+4|0;k[f>>2]=27524;k[ga>>2]=27544;B=0;wa(508,f+56|0,ha|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;ma=ka;vva(ga);Qb(ma|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[ga>>2]=27488;B=0;va(448,ha|0);ka=B;B=0;do if(ka&1){na=Rb()|0;oa=Q;pa=na}else{k[ha>>2]=27560;na=f+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ha|0,c|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(c);Yua(na);Ava(ha);oa=ra;pa=qa;break}Yua(c);B=0;qa=Ia(40,f|0,144086,7)|0;ra=B;B=0;do if(((!(ra&1)?(B=0,sa=Xa(242,qa|0,k[a+8>>2]|0)|0,ta=B,B=0,!(ta&1)):0)?(B=0,Ia(40,sa|0,149177,1)|0,sa=B,B=0,!(sa&1)):0)?(B=0,wa(510,g|0,ha|0),sa=B,B=0,!(sa&1)):0){B=0;ya(424,g|0)|0;sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;Yua(g);ua=ta;xa=sa;break}Yua(g);k[f>>2]=27468;k[ga>>2]=27488;k[ha>>2]=27560;Yua(na);Ava(ha);vva(ga);sa=h+56|0;ta=h+4|0;k[h>>2]=27524;k[sa>>2]=27544;B=0;wa(508,h+56|0,ta|0);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Ba=za;vva(sa);Qb(Ba|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[sa>>2]=27488;B=0;va(448,ta|0);za=B;B=0;do if(za&1){Ca=Rb()|0;Da=Q;Ea=Ca}else{k[ta>>2]=27560;Ca=h+36|0;k[Ca>>2]=0;k[Ca+4>>2]=0;k[Ca+8>>2]=0;k[Ca+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ta|0,c|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(c);Yua(Ca);Ava(ta);Da=Ga;Ea=Fa;break}Yua(c);B=0;Fa=Ia(40,h|0,144094,18)|0;Ga=B;B=0;do if(Ga&1)Ha=280;else{B=0;Ja=ya(427,k[a+12>>2]|0)|0;Ka=B;B=0;if(Ka&1){Ha=280;break}Ka=Lta(Ja)|0;B=0;La=Ia(40,Fa|0,Ja|0,Ka|0)|0;Ka=B;B=0;if(Ka&1){Ha=280;break}B=0;Ia(40,La|0,149177,1)|0;La=B;B=0;if(La&1){Ha=280;break}B=0;wa(510,j|0,ta|0);La=B;B=0;if(La&1){Ha=280;break}B=0;ya(424,j|0)|0;La=B;B=0;if(La&1){La=Rb()|0;Ka=Q;Yua(j);Ma=Ka;Na=La;break}Yua(j);k[h>>2]=27468;k[sa>>2]=27488;k[ta>>2]=27560;Yua(Ca);Ava(ta);vva(sa);La=l+56|0;Ka=l+4|0;k[l>>2]=27524;k[La>>2]=27544;B=0;wa(508,l+56|0,Ka|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Oa=Q;Pa=Ja;vva(La);Qb(Pa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[La>>2]=27488;B=0;va(448,Ka|0);Ja=B;B=0;do if(Ja&1){Qa=Rb()|0;Ra=Q;Ta=Qa}else{k[Ka>>2]=27560;Qa=l+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ka|0,c|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Yua(c);Yua(Qa);Ava(Ka);Ra=Va;Ta=Ua;break}Yua(c);B=0;Ua=Ia(40,l|0,117845,11)|0;Va=B;B=0;do if(Va&1)Ha=283;else{B=0;Wa=Xa(245,Ua|0,k[a+44>>2]|0)|0;Ya=B;B=0;if(Ya&1){Ha=283;break}B=0;Ia(40,Wa|0,149177,1)|0;Wa=B;B=0;if(Wa&1){Ha=283;break}B=0;wa(510,m|0,Ka|0);Wa=B;B=0;if(Wa&1){Ha=283;break}B=0;ya(424,m|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(m);Za=Ya;_a=Wa;break}Yua(m);k[l>>2]=27468;k[La>>2]=27488;k[Ka>>2]=27560;Yua(Qa);Ava(Ka);vva(La);Wa=n+56|0;Ya=n+4|0;k[n>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,n+56|0,Ya|0);$a=B;B=0;if($a&1){$a=Rb()|0;ab=Q;bb=$a;vva(Wa);Qb(bb|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Ya|0);$a=B;B=0;do if($a&1){cb=Rb()|0;db=Q;eb=cb}else{k[Ya>>2]=27560;cb=n+36|0;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(c);Yua(cb);Ava(Ya);db=gb;eb=fb;break}Yua(c);B=0;fb=Ia(40,n|0,117857,14)|0;gb=B;B=0;do if(gb&1)Ha=286;else{B=0;hb=Xa(245,fb|0,k[a+48>>2]|0)|0;ib=B;B=0;if(ib&1){Ha=286;break}B=0;Ia(40,hb|0,149177,1)|0;hb=B;B=0;if(hb&1){Ha=286;break}B=0;wa(510,o|0,Ya|0);hb=B;B=0;if(hb&1){Ha=286;break}B=0;ya(424,o|0)|0;hb=B;B=0;if(hb&1){hb=Rb()|0;ib=Q;Yua(o);jb=ib;kb=hb;break}Yua(o);k[n>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);hb=q+56|0;ib=q+4|0;k[q>>2]=27524;k[hb>>2]=27544;B=0;wa(508,q+56|0,ib|0);lb=B;B=0;if(lb&1){lb=Rb()|0;mb=Q;nb=lb;vva(hb);Qb(nb|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[hb>>2]=27488;B=0;va(448,ib|0);lb=B;B=0;do if(lb&1){ob=Rb()|0;pb=Q;qb=ob}else{k[ib>>2]=27560;ob=q+36|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ib|0,c|0);rb=B;B=0;if(rb&1){rb=Rb()|0;sb=Q;Yua(c);Yua(ob);Ava(ib);pb=sb;qb=rb;break}Yua(c);B=0;rb=Ia(40,q|0,117872,12)|0;sb=B;B=0;do if(sb&1)Ha=289;else{B=0;tb=Xa(245,rb|0,k[a+52>>2]|0)|0;ub=B;B=0;if(ub&1){Ha=289;break}B=0;Ia(40,tb|0,149177,1)|0;tb=B;B=0;if(tb&1){Ha=289;break}B=0;wa(510,s|0,ib|0);tb=B;B=0;if(tb&1){Ha=289;break}B=0;ya(424,s|0)|0;tb=B;B=0;if(tb&1){tb=Rb()|0;ub=Q;Yua(s);vb=ub;wb=tb;break}Yua(s);k[q>>2]=27468;k[hb>>2]=27488;k[ib>>2]=27560;Yua(ob);Ava(ib);vva(hb);tb=t+56|0;ub=t+4|0;k[t>>2]=27524;k[tb>>2]=27544;B=0;wa(508,t+56|0,ub|0);xb=B;B=0;if(xb&1){xb=Rb()|0;yb=Q;zb=xb;vva(tb);Qb(zb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[tb>>2]=27488;B=0;va(448,ub|0);xb=B;B=0;do if(xb&1){Ab=Rb()|0;Bb=Q;Cb=Ab}else{k[ub>>2]=27560;Ab=t+36|0;k[Ab>>2]=0;k[Ab+4>>2]=0;k[Ab+8>>2]=0;k[Ab+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);Db=B;B=0;if(Db&1){Db=Rb()|0;Eb=Q;Yua(c);Yua(Ab);Ava(ub);Bb=Eb;Cb=Db;break}Yua(c);B=0;Db=Ia(40,t|0,144140,15)|0;Eb=B;B=0;do if(Eb&1)Ha=292;else{B=0;Fb=Xa(245,Db|0,k[a+124>>2]|0)|0;Gb=B;B=0;if(Gb&1){Ha=292;break}B=0;Ia(40,Fb|0,149177,1)|0;Fb=B;B=0;if(Fb&1){Ha=292;break}B=0;wa(510,u|0,ub|0);Fb=B;B=0;if(Fb&1){Ha=292;break}B=0;ya(424,u|0)|0;Fb=B;B=0;if(Fb&1){Fb=Rb()|0;Gb=Q;Yua(u);Hb=Gb;Ib=Fb;break}Yua(u);k[t>>2]=27468;k[tb>>2]=27488;k[ub>>2]=27560;Yua(Ab);Ava(ub);vva(tb);Fb=v+56|0;Gb=v+4|0;k[v>>2]=27524;k[Fb>>2]=27544;B=0;wa(508,v+56|0,Gb|0);Jb=B;B=0;if(Jb&1){Jb=Rb()|0;Kb=Q;Lb=Jb;vva(Fb);Qb(Lb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[Fb>>2]=27488;B=0;va(448,Gb|0);Jb=B;B=0;do if(Jb&1){Mb=Rb()|0;Nb=Q;Ob=Mb}else{k[Gb>>2]=27560;Mb=v+36|0;k[Mb>>2]=0;k[Mb+4>>2]=0;k[Mb+8>>2]=0;k[Mb+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Gb|0,c|0);Pb=B;B=0;if(Pb&1){Pb=Rb()|0;Sb=Q;Yua(c);Yua(Mb);Ava(Gb);Nb=Sb;Ob=Pb;break}Yua(c);B=0;Ia(40,v|0,117885,25)|0;Pb=B;B=0;do if(Pb&1)Ha=295;else{B=0;wa(510,w|0,Gb|0);Sb=B;B=0;if(Sb&1){Ha=295;break}B=0;ya(424,w|0)|0;Sb=B;B=0;if(Sb&1){Sb=Rb()|0;Tb=Q;Yua(w);Ub=Tb;Vb=Sb;break}Yua(w);k[v>>2]=27468;k[Fb>>2]=27488;k[Gb>>2]=27560;Yua(Mb);Ava(Gb);vva(Fb);Sb=x+56|0;Tb=x+4|0;k[x>>2]=27524;k[Sb>>2]=27544;B=0;wa(508,x+56|0,Tb|0);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;Xb=Q;Yb=Wb;vva(Sb);Qb(Yb|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Sb>>2]=27488;B=0;va(448,Tb|0);Wb=B;B=0;do if(Wb&1){Zb=Rb()|0;_b=Q;$b=Zb}else{k[Tb>>2]=27560;Zb=x+36|0;k[Zb>>2]=0;k[Zb+4>>2]=0;k[Zb+8>>2]=0;k[Zb+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Tb|0,c|0);ac=B;B=0;if(ac&1){ac=Rb()|0;bc=Q;Yua(c);Yua(Zb);Ava(Tb);_b=bc;$b=ac;break}Yua(c);B=0;ac=Ia(40,x|0,117911,11)|0;bc=B;B=0;do if(bc&1)Ha=298;else{B=0;cc=Sa(1,ac|0,+(+p[a+88>>3]))|0;dc=B;B=0;if(dc&1){Ha=298;break}B=0;dc=Ia(40,cc|0,117923,1)|0;cc=B;B=0;if(cc&1){Ha=298;break}B=0;cc=Sa(1,dc|0,+(+p[a+96>>3]))|0;dc=B;B=0;if(dc&1){Ha=298;break}B=0;Ia(40,cc|0,149177,1)|0;cc=B;B=0;if(cc&1){Ha=298;break}B=0;wa(510,y|0,Tb|0);cc=B;B=0;if(cc&1){Ha=298;break}B=0;ya(424,y|0)|0;cc=B;B=0;if(cc&1){cc=Rb()|0;dc=Q;Yua(y);ec=dc;fc=cc;break}Yua(y);k[x>>2]=27468;k[Sb>>2]=27488;k[Tb>>2]=27560;Yua(Zb);Ava(Tb);vva(Sb);cc=z+56|0;dc=z+4|0;k[z>>2]=27524;k[cc>>2]=27544;B=0;wa(508,z+56|0,dc|0);gc=B;B=0;if(gc&1){gc=Rb()|0;hc=Q;ic=gc;vva(cc);Qb(ic|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[cc>>2]=27488;B=0;va(448,dc|0);gc=B;B=0;do if(gc&1){jc=Rb()|0;kc=Q;lc=jc}else{k[dc>>2]=27560;jc=z+36|0;k[jc>>2]=0;k[jc+4>>2]=0;k[jc+8>>2]=0;k[jc+12>>2]=0;k[z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,dc|0,c|0);mc=B;B=0;if(mc&1){mc=Rb()|0;nc=Q;Yua(c);Yua(jc);Ava(dc);kc=nc;lc=mc;break}Yua(c);B=0;mc=Ia(40,z|0,117925,11)|0;nc=B;B=0;do if(nc&1)Ha=301;else{B=0;oc=Sa(1,mc|0,+(+p[a+104>>3]))|0;pc=B;B=0;if(pc&1){Ha=301;break}B=0;Ia(40,oc|0,149177,1)|0;oc=B;B=0;if(oc&1){Ha=301;break}B=0;wa(510,A|0,dc|0);oc=B;B=0;if(oc&1){Ha=301;break}B=0;ya(424,A|0)|0;oc=B;B=0;if(oc&1){oc=Rb()|0;pc=Q;Yua(A);qc=pc;rc=oc;break}Yua(A);k[z>>2]=27468;k[cc>>2]=27488;k[dc>>2]=27560;Yua(jc);Ava(dc);vva(cc);oc=C+56|0;pc=C+4|0;k[C>>2]=27524;k[oc>>2]=27544;B=0;wa(508,C+56|0,pc|0);sc=B;B=0;if(sc&1){sc=Rb()|0;tc=Q;uc=sc;vva(oc);Qb(uc|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[oc>>2]=27488;B=0;va(448,pc|0);sc=B;B=0;do if(sc&1){vc=Rb()|0;wc=Q;xc=vc}else{k[pc>>2]=27560;vc=C+36|0;k[vc>>2]=0;k[vc+4>>2]=0;k[vc+8>>2]=0;k[vc+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pc|0,c|0);yc=B;B=0;if(yc&1){yc=Rb()|0;zc=Q;Yua(c);Yua(vc);Ava(pc);wc=zc;xc=yc;break}Yua(c);B=0;yc=Ia(40,C|0,117937,17)|0;zc=B;B=0;do if(zc&1)Ha=304;else{B=0;Ac=Xa(242,yc|0,k[a+68>>2]|0)|0;Bc=B;B=0;if(Bc&1){Ha=304;break}B=0;Ia(40,Ac|0,149177,1)|0;Ac=B;B=0;if(Ac&1){Ha=304;break}B=0;wa(510,D|0,pc|0);Ac=B;B=0;if(Ac&1){Ha=304;break}B=0;ya(424,D|0)|0;Ac=B;B=0;if(Ac&1){Ac=Rb()|0;Bc=Q;Yua(D);Cc=Bc;Dc=Ac;break}Yua(D);k[C>>2]=27468;k[oc>>2]=27488;k[pc>>2]=27560;Yua(vc);Ava(pc);vva(oc);Ac=E+56|0;Bc=E+4|0;k[E>>2]=27524;k[Ac>>2]=27544;B=0;wa(508,E+56|0,Bc|0);Ec=B;B=0;if(Ec&1){Ec=Rb()|0;Fc=Q;Gc=Ec;vva(Ac);Qb(Gc|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[Ac>>2]=27488;B=0;va(448,Bc|0);Ec=B;B=0;do if(Ec&1){Hc=Rb()|0;Ic=Q;Jc=Hc}else{k[Bc>>2]=27560;Hc=E+36|0;k[Hc>>2]=0;k[Hc+4>>2]=0;k[Hc+8>>2]=0;k[Hc+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Bc|0,c|0);Kc=B;B=0;if(Kc&1){Kc=Rb()|0;Lc=Q;Yua(c);Yua(Hc);Ava(Bc);Ic=Lc;Jc=Kc;break}Yua(c);B=0;Kc=Ia(40,E|0,142516,11)|0;Lc=B;B=0;do if(Lc&1)Ha=307;else{Mc=(i[a+72>>0]|0)!=0;B=0;Nc=Ia(40,Kc|0,(Mc?159247:159252)|0,(Mc?4:5)|0)|0;Mc=B;B=0;if(Mc&1){Ha=307;break}B=0;Ia(40,Nc|0,149177,1)|0;Nc=B;B=0;if(Nc&1){Ha=307;break}B=0;wa(510,F|0,Bc|0);Nc=B;B=0;if(Nc&1){Ha=307;break}B=0;ya(424,F|0)|0;Nc=B;B=0;if(Nc&1){Nc=Rb()|0;Mc=Q;Yua(F);Oc=Mc;Pc=Nc;break}Yua(F);k[E>>2]=27468;k[Ac>>2]=27488;k[Bc>>2]=27560;Yua(Hc);Ava(Bc);vva(Ac);Nc=G+56|0;Mc=G+4|0;k[G>>2]=27524;k[Nc>>2]=27544;B=0;wa(508,G+56|0,Mc|0);Qc=B;B=0;if(Qc&1){Qc=Rb()|0;Rc=Q;Sc=Qc;vva(Nc);Qb(Sc|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[Nc>>2]=27488;B=0;va(448,Mc|0);Qc=B;B=0;do if(Qc&1){Tc=Rb()|0;Uc=Q;Vc=Tc}else{k[Mc>>2]=27560;Tc=G+36|0;k[Tc>>2]=0;k[Tc+4>>2]=0;k[Tc+8>>2]=0;k[Tc+12>>2]=0;k[G+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Mc|0,c|0);Wc=B;B=0;if(Wc&1){Wc=Rb()|0;Xc=Q;Yua(c);Yua(Tc);Ava(Mc);Uc=Xc;Vc=Wc;break}Yua(c);B=0;Wc=Ia(40,G|0,117955,12)|0;Xc=B;B=0;do if(Xc&1)Ha=310;else{B=0;Yc=Xa(242,Wc|0,k[a+76>>2]|0)|0;Zc=B;B=0;if(Zc&1){Ha=310;break}B=0;Ia(40,Yc|0,149177,1)|0;Yc=B;B=0;if(Yc&1){Ha=310;break}B=0;wa(510,H|0,Mc|0);Yc=B;B=0;if(Yc&1){Ha=310;break}B=0;ya(424,H|0)|0;Yc=B;B=0;if(Yc&1){Yc=Rb()|0;Zc=Q;Yua(H);_c=Zc;$c=Yc;break}Yua(H);k[G>>2]=27468;k[Nc>>2]=27488;k[Mc>>2]=27560;Yua(Tc);Ava(Mc);vva(Nc);Yc=I+56|0;Zc=I+4|0;k[I>>2]=27524;k[Yc>>2]=27544;B=0;wa(508,I+56|0,Zc|0);ad=B;B=0;if(ad&1){ad=Rb()|0;bd=Q;cd=ad;vva(Yc);Qb(cd|0)}k[I+128>>2]=0;k[I+132>>2]=-1;k[I>>2]=27468;k[Yc>>2]=27488;B=0;va(448,Zc|0);ad=B;B=0;do if(ad&1){dd=Rb()|0;ed=Q;fd=dd}else{k[Zc>>2]=27560;dd=I+36|0;k[dd>>2]=0;k[dd+4>>2]=0;k[dd+8>>2]=0;k[dd+12>>2]=0;k[I+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Zc|0,c|0);gd=B;B=0;if(gd&1){gd=Rb()|0;hd=Q;Yua(c);Yua(dd);Ava(Zc);ed=hd;fd=gd;break}Yua(c);B=0;gd=Ia(40,I|0,117968,14)|0;hd=B;B=0;do if(hd&1)Ha=313;else{id=(i[a+80>>0]|0)!=0;B=0;jd=Ia(40,gd|0,(id?159247:159252)|0,(id?4:5)|0)|0;id=B;B=0;if(id&1){Ha=313;break}B=0;Ia(40,jd|0,149177,1)|0;jd=B;B=0;if(jd&1){Ha=313;break}B=0;wa(510,J|0,Zc|0);jd=B;B=0;if(jd&1){Ha=313;break}B=0;ya(424,J|0)|0;jd=B;B=0;if(jd&1){jd=Rb()|0;id=Q;Yua(J);kd=id;ld=jd;break}Yua(J);k[I>>2]=27468;k[Yc>>2]=27488;k[Zc>>2]=27560;Yua(dd);Ava(Zc);vva(Yc);jd=K+56|0;id=K+4|0;k[K>>2]=27524;k[jd>>2]=27544;B=0;wa(508,K+56|0,id|0);md=B;B=0;if(md&1){md=Rb()|0;nd=Q;od=md;vva(jd);Qb(od|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[jd>>2]=27488;B=0;va(448,id|0);md=B;B=0;do if(md&1){pd=Rb()|0;qd=Q;rd=pd}else{k[id>>2]=27560;pd=K+36|0;k[pd>>2]=0;k[pd+4>>2]=0;k[pd+8>>2]=0;k[pd+12>>2]=0;k[K+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,id|0,c|0);sd=B;B=0;if(sd&1){sd=Rb()|0;td=Q;Yua(c);Yua(pd);Ava(id);qd=td;rd=sd;break}Yua(c);B=0;sd=Ia(40,K|0,117983,23)|0;td=B;B=0;do if(td&1)Ha=316;else{ud=(i[a+81>>0]|0)!=0;B=0;vd=Ia(40,sd|0,(ud?159247:159252)|0,(ud?4:5)|0)|0;ud=B;B=0;if(ud&1){Ha=316;break}B=0;Ia(40,vd|0,149177,1)|0;vd=B;B=0;if(vd&1){Ha=316;break}B=0;wa(510,L|0,id|0);vd=B;B=0;if(vd&1){Ha=316;break}B=0;ya(424,L|0)|0;vd=B;B=0;if(vd&1){vd=Rb()|0;ud=Q;Yua(L);wd=ud;xd=vd;break}Yua(L);k[K>>2]=27468;k[jd>>2]=27488;k[id>>2]=27560;Yua(pd);Ava(id);vva(jd);vd=M+56|0;ud=M+4|0;k[M>>2]=27524;k[vd>>2]=27544;B=0;wa(508,M+56|0,ud|0);yd=B;B=0;if(yd&1){yd=Rb()|0;zd=Q;Ad=yd;vva(vd);Qb(Ad|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[vd>>2]=27488;B=0;va(448,ud|0);yd=B;B=0;do if(yd&1){Bd=Rb()|0;Cd=Q;Dd=Bd}else{k[ud>>2]=27560;Bd=M+36|0;k[Bd>>2]=0;k[Bd+4>>2]=0;k[Bd+8>>2]=0;k[Bd+12>>2]=0;k[M+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ud|0,c|0);Ed=B;B=0;if(Ed&1){Ed=Rb()|0;Fd=Q;Yua(c);Yua(Bd);Ava(ud);Cd=Fd;Dd=Ed;break}Yua(c);B=0;Ed=Ia(40,M|0,118007,9)|0;Fd=B;B=0;do if(Fd&1)Ha=319;else{B=0;Gd=Xa(242,Ed|0,k[a+20>>2]|0)|0;Hd=B;B=0;if(Hd&1){Ha=319;break}B=0;Ia(40,Gd|0,149177,1)|0;Gd=B;B=0;if(Gd&1){Ha=319;break}B=0;wa(510,N|0,ud|0);Gd=B;B=0;if(Gd&1){Ha=319;break}B=0;ya(424,N|0)|0;Gd=B;B=0;if(Gd&1){Gd=Rb()|0;Hd=Q;Yua(N);Id=Hd;Jd=Gd;break}Yua(N);k[M>>2]=27468;k[vd>>2]=27488;k[ud>>2]=27560;Yua(Bd);Ava(ud);vva(vd);Gd=O+56|0;Hd=O+4|0;k[O>>2]=27524;k[Gd>>2]=27544;B=0;wa(508,O+56|0,Hd|0);Kd=B;B=0;if(Kd&1){Kd=Rb()|0;Ld=Q;Md=Kd;vva(Gd);Qb(Md|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[Gd>>2]=27488;B=0;va(448,Hd|0);Kd=B;B=0;do if(Kd&1){Nd=Rb()|0;Od=Q;Pd=Nd}else{k[Hd>>2]=27560;Nd=O+36|0;k[Nd>>2]=0;k[Nd+4>>2]=0;k[Nd+8>>2]=0;k[Nd+12>>2]=0;k[O+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Hd|0,c|0);Qd=B;B=0;if(Qd&1){Qd=Rb()|0;Rd=Q;Yua(c);Yua(Nd);Ava(Hd);Od=Rd;Pd=Qd;break}Yua(c);B=0;Qd=Ia(40,O|0,118017,13)|0;Rd=B;B=0;do if(Rd&1)Ha=322;else{B=0;Sd=Sa(1,Qd|0,+(+p[a+24>>3]))|0;Td=B;B=0;if(Td&1){Ha=322;break}B=0;Ia(40,Sd|0,149177,1)|0;Sd=B;B=0;if(Sd&1){Ha=322;break}B=0;wa(510,P|0,Hd|0);Sd=B;B=0;if(Sd&1){Ha=322;break}B=0;ya(424,P|0)|0;Sd=B;B=0;if(Sd&1){Sd=Rb()|0;Td=Q;Yua(P);Ud=Td;Vd=Sd;break}Yua(P);k[O>>2]=27468;k[Gd>>2]=27488;k[Hd>>2]=27560;Yua(Nd);Ava(Hd);vva(Gd);Sd=R+56|0;Td=R+4|0;k[R>>2]=27524;k[Sd>>2]=27544;B=0;wa(508,R+56|0,Td|0);Wd=B;B=0;if(Wd&1){Wd=Rb()|0;Xd=Q;Yd=Wd;vva(Sd);Qb(Yd|0)}k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[Sd>>2]=27488;B=0;va(448,Td|0);Wd=B;B=0;do if(Wd&1){Zd=Rb()|0;_d=Q;$d=Zd}else{k[Td>>2]=27560;Zd=R+36|0;k[Zd>>2]=0;k[Zd+4>>2]=0;k[Zd+8>>2]=0;k[Zd+12>>2]=0;k[R+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Td|0,c|0);ae=B;B=0;if(ae&1){ae=Rb()|0;be=Q;Yua(c);Yua(Zd);Ava(Td);_d=be;$d=ae;break}Yua(c);B=0;ae=Ia(40,R|0,118031,13)|0;be=B;B=0;do if(be&1)Ha=325;else{B=0;ce=Sa(1,ae|0,+(+p[a+112>>3]))|0;de=B;B=0;if(de&1){Ha=325;break}B=0;Ia(40,ce|0,149177,1)|0;ce=B;B=0;if(ce&1){Ha=325;break}B=0;wa(510,S|0,Td|0);ce=B;B=0;if(ce&1){Ha=325;break}B=0;ya(424,S|0)|0;ce=B;B=0;if(ce&1){ce=Rb()|0;de=Q;Yua(S);ee=de;fe=ce;break}Yua(S);k[R>>2]=27468;k[Sd>>2]=27488;k[Td>>2]=27560;Yua(Zd);Ava(Td);vva(Sd);ce=T+56|0;de=T+4|0;k[T>>2]=27524;k[ce>>2]=27544;B=0;wa(508,T+56|0,de|0);ge=B;B=0;if(ge&1){ge=Rb()|0;he=Q;ie=ge;vva(ce);Qb(ie|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[ce>>2]=27488;B=0;va(448,de|0);ge=B;B=0;do if(ge&1){je=Rb()|0;ke=Q;le=je}else{k[de>>2]=27560;je=T+36|0;k[je>>2]=0;k[je+4>>2]=0;k[je+8>>2]=0;k[je+12>>2]=0;k[T+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,de|0,c|0);me=B;B=0;if(me&1){me=Rb()|0;ne=Q;Yua(c);Yua(je);Ava(de);ke=ne;le=me;break}Yua(c);B=0;me=Ia(40,T|0,118045,22)|0;ne=B;B=0;do if(ne&1)Ha=328;else{B=0;oe=Sa(1,me|0,+(+p[a+32>>3]))|0;pe=B;B=0;if(pe&1){Ha=328;break}B=0;Ia(40,oe|0,149177,1)|0;oe=B;B=0;if(oe&1){Ha=328;break}B=0;wa(510,U|0,de|0);oe=B;B=0;if(oe&1){Ha=328;break}B=0;ya(424,U|0)|0;oe=B;B=0;if(oe&1){oe=Rb()|0;pe=Q;Yua(U);qe=pe;re=oe;break}Yua(U);k[T>>2]=27468;k[ce>>2]=27488;k[de>>2]=27560;Yua(je);Ava(de);vva(ce);oe=V+56|0;pe=V+4|0;k[V>>2]=27524;k[oe>>2]=27544;B=0;wa(508,V+56|0,pe|0);se=B;B=0;if(se&1){se=Rb()|0;te=Q;ue=se;vva(oe);Qb(ue|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[oe>>2]=27488;B=0;va(448,pe|0);se=B;B=0;do if(se&1){ve=Rb()|0;we=Q;xe=ve}else{k[pe>>2]=27560;ve=V+36|0;k[ve>>2]=0;k[ve+4>>2]=0;k[ve+8>>2]=0;k[ve+12>>2]=0;k[V+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pe|0,c|0);ye=B;B=0;if(ye&1){ye=Rb()|0;ze=Q;Yua(c);Yua(ve);Ava(pe);we=ze;xe=ye;break}Yua(c);B=0;ye=Ia(40,V|0,118068,10)|0;ze=B;B=0;do if(ze&1)Ha=331;else{B=0;Ae=Xa(242,ye|0,k[a+120>>2]|0)|0;Be=B;B=0;if(Be&1){Ha=331;break}B=0;Ia(40,Ae|0,149177,1)|0;Ae=B;B=0;if(Ae&1){Ha=331;break}B=0;wa(510,W|0,pe|0);Ae=B;B=0;if(Ae&1){Ha=331;break}B=0;ya(424,W|0)|0;Ae=B;B=0;if(Ae&1){Ae=Rb()|0;Be=Q;Yua(W);Ce=Be;De=Ae;break}Yua(W);k[V>>2]=27468;k[oe>>2]=27488;k[pe>>2]=27560;Yua(ve);Ava(pe);vva(oe);Ae=X+56|0;Be=X+4|0;k[X>>2]=27524;k[Ae>>2]=27544;B=0;wa(508,X+56|0,Be|0);Ee=B;B=0;if(Ee&1){Ee=Rb()|0;Fe=Q;Ge=Ee;vva(Ae);Qb(Ge|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[Ae>>2]=27488;B=0;va(448,Be|0);Ee=B;B=0;do if(Ee&1){He=Rb()|0;Ie=Q;Je=He}else{k[Be>>2]=27560;He=X+36|0;k[He>>2]=0;k[He+4>>2]=0;k[He+8>>2]=0;k[He+12>>2]=0;k[X+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Be|0,c|0);Ke=B;B=0;if(Ke&1){Ke=Rb()|0;Le=Q;Yua(c);Yua(He);Ava(Be);Ie=Le;Je=Ke;break}Yua(c);B=0;Ke=Ia(40,X|0,118079,11)|0;Le=B;B=0;do if(!(Le&1)){Me=(i[a+73>>0]|0)!=0;B=0;Ne=Ia(40,Ke|0,(Me?159247:159252)|0,(Me?4:5)|0)|0;Me=B;B=0;if(Me&1){Ha=334;break}B=0;Ia(40,Ne|0,149177,1)|0;Ne=B;B=0;if(Ne&1){Ha=334;break}B=0;wa(510,Y|0,Be|0);Ne=B;B=0;if(Ne&1){Ha=334;break}B=0;ya(424,Y|0)|0;Ne=B;B=0;if(Ne&1){Ne=Rb()|0;Me=Q;Yua(Y);Oe=Me;Pe=Ne;break}else{Yua(Y);k[X>>2]=27468;k[Ae>>2]=27488;k[Be>>2]=27560;Yua(He);Ava(Be);vva(Ae);r=b;return}}else Ha=334;while(0);if((Ha|0)==334){Ke=Rb()|0;Oe=Q;Pe=Ke}k[X>>2]=27468;k[Ae>>2]=27488;k[Be>>2]=27560;Yua(He);Ava(Be);vva(Ae);Qe=Oe;Re=Pe;Qb(Re|0)}while(0);Fe=Ie;Ge=Je;vva(Ae);Qb(Ge|0)}while(0);if((Ha|0)==331){ye=Rb()|0;Ce=Q;De=ye}k[V>>2]=27468;k[oe>>2]=27488;k[pe>>2]=27560;Yua(ve);Ava(pe);vva(oe);Qe=Ce;Re=De;Qb(Re|0)}while(0);te=we;ue=xe;vva(oe);Qb(ue|0)}while(0);if((Ha|0)==328){me=Rb()|0;qe=Q;re=me}k[T>>2]=27468;k[ce>>2]=27488;k[de>>2]=27560;Yua(je);Ava(de);vva(ce);Qe=qe;Re=re;Qb(Re|0)}while(0);he=ke;ie=le;vva(ce);Qb(ie|0)}while(0);if((Ha|0)==325){ae=Rb()|0;ee=Q;fe=ae}k[R>>2]=27468;k[Sd>>2]=27488;k[Td>>2]=27560;Yua(Zd);Ava(Td);vva(Sd);Qe=ee;Re=fe;Qb(Re|0)}while(0);Xd=_d;Yd=$d;vva(Sd);Qb(Yd|0)}while(0);if((Ha|0)==322){Qd=Rb()|0;Ud=Q;Vd=Qd}k[O>>2]=27468;k[Gd>>2]=27488;k[Hd>>2]=27560;Yua(Nd);Ava(Hd);vva(Gd);Qe=Ud;Re=Vd;Qb(Re|0)}while(0);Ld=Od;Md=Pd;vva(Gd);Qb(Md|0)}while(0);if((Ha|0)==319){Ed=Rb()|0;Id=Q;Jd=Ed}k[M>>2]=27468;k[vd>>2]=27488;k[ud>>2]=27560;Yua(Bd);Ava(ud);vva(vd);Qe=Id;Re=Jd;Qb(Re|0)}while(0);zd=Cd;Ad=Dd;vva(vd);Qb(Ad|0)}while(0);if((Ha|0)==316){sd=Rb()|0;wd=Q;xd=sd}k[K>>2]=27468;k[jd>>2]=27488;k[id>>2]=27560;Yua(pd);Ava(id);vva(jd);Qe=wd;Re=xd;Qb(Re|0)}while(0);nd=qd;od=rd;vva(jd);Qb(od|0)}while(0);if((Ha|0)==313){gd=Rb()|0;kd=Q;ld=gd}k[I>>2]=27468;k[Yc>>2]=27488;k[Zc>>2]=27560;Yua(dd);Ava(Zc);vva(Yc);Qe=kd;Re=ld;Qb(Re|0)}while(0);bd=ed;cd=fd;vva(Yc);Qb(cd|0)}while(0);if((Ha|0)==310){Wc=Rb()|0;_c=Q;$c=Wc}k[G>>2]=27468;k[Nc>>2]=27488;k[Mc>>2]=27560;Yua(Tc);Ava(Mc);vva(Nc);Qe=_c;Re=$c;Qb(Re|0)}while(0);Rc=Uc;Sc=Vc;vva(Nc);Qb(Sc|0)}while(0);if((Ha|0)==307){Kc=Rb()|0;Oc=Q;Pc=Kc}k[E>>2]=27468;k[Ac>>2]=27488;k[Bc>>2]=27560;Yua(Hc);Ava(Bc);vva(Ac);Qe=Oc;Re=Pc;Qb(Re|0)}while(0);Fc=Ic;Gc=Jc;vva(Ac);Qb(Gc|0)}while(0);if((Ha|0)==304){yc=Rb()|0;Cc=Q;Dc=yc}k[C>>2]=27468;k[oc>>2]=27488;k[pc>>2]=27560;Yua(vc);Ava(pc);vva(oc);Qe=Cc;Re=Dc;Qb(Re|0)}while(0);tc=wc;uc=xc;vva(oc);Qb(uc|0)}while(0);if((Ha|0)==301){mc=Rb()|0;qc=Q;rc=mc}k[z>>2]=27468;k[cc>>2]=27488;k[dc>>2]=27560;Yua(jc);Ava(dc);vva(cc);Qe=qc;Re=rc;Qb(Re|0)}while(0);hc=kc;ic=lc;vva(cc);Qb(ic|0)}while(0);if((Ha|0)==298){ac=Rb()|0;ec=Q;fc=ac}k[x>>2]=27468;k[Sb>>2]=27488;k[Tb>>2]=27560;Yua(Zb);Ava(Tb);vva(Sb);Qe=ec;Re=fc;Qb(Re|0)}while(0);Xb=_b;Yb=$b;vva(Sb);Qb(Yb|0)}while(0);if((Ha|0)==295){Pb=Rb()|0;Ub=Q;Vb=Pb}k[v>>2]=27468;k[Fb>>2]=27488;k[Gb>>2]=27560;Yua(Mb);Ava(Gb);vva(Fb);Qe=Ub;Re=Vb;Qb(Re|0)}while(0);Kb=Nb;Lb=Ob;vva(Fb);Qb(Lb|0)}while(0);if((Ha|0)==292){Db=Rb()|0;Hb=Q;Ib=Db}k[t>>2]=27468;k[tb>>2]=27488;k[ub>>2]=27560;Yua(Ab);Ava(ub);vva(tb);Qe=Hb;Re=Ib;Qb(Re|0)}while(0);yb=Bb;zb=Cb;vva(tb);Qb(zb|0)}while(0);if((Ha|0)==289){rb=Rb()|0;vb=Q;wb=rb}k[q>>2]=27468;k[hb>>2]=27488;k[ib>>2]=27560;Yua(ob);Ava(ib);vva(hb);Qe=vb;Re=wb;Qb(Re|0)}while(0);mb=pb;nb=qb;vva(hb);Qb(nb|0)}while(0);if((Ha|0)==286){fb=Rb()|0;jb=Q;kb=fb}k[n>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);Qe=jb;Re=kb;Qb(Re|0)}while(0);ab=db;bb=eb;vva(Wa);Qb(bb|0)}while(0);if((Ha|0)==283){Ua=Rb()|0;Za=Q;_a=Ua}k[l>>2]=27468;k[La>>2]=27488;k[Ka>>2]=27560;Yua(Qa);Ava(Ka);vva(La);Qe=Za;Re=_a;Qb(Re|0)}while(0);Oa=Ra;Pa=Ta;vva(La);Qb(Pa|0)}while(0);if((Ha|0)==280){Fa=Rb()|0;Ma=Q;Na=Fa}k[h>>2]=27468;k[sa>>2]=27488;k[ta>>2]=27560;Yua(Ca);Ava(ta);vva(sa);Qe=Ma;Re=Na;Qb(Re|0)}while(0);Aa=Da;Ba=Ea;vva(sa);Qb(Ba|0)}else Ha=277;while(0);if((Ha|0)==277){qa=Rb()|0;ua=Q;xa=qa}k[f>>2]=27468;k[ga>>2]=27488;k[ha>>2]=27560;Yua(na);Ava(ha);vva(ga);Qe=ua;Re=xa;Qb(Re|0)}while(0);la=oa;ma=pa;vva(ga);Qb(ma|0)}else Ha=274;while(0);if((Ha|0)==274){fa=Rb()|0;ia=Q;ja=fa}k[d>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua(ca);Ava(_);vva(Z);Qe=ia;Re=ja;Qb(Re|0)}while(0);aa=da;ba=ea;vva(Z);Qb(ba|0)}function E0(a){a=a|0;return k[a+8>>2]|0}function F0(a){a=a|0;return 610}function G0(a,b,c){a=a|0;b=b|0;c=c|0;return}function H0(a,b,c){a=a|0;b=b|0;c=c|0;return}function I0(a,b,c){a=a|0;b=+b;c=c|0;return}function J0(a,b,c){a=a|0;b=+b;c=c|0;return}function K0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function L0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function M0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;e=a+44|0;Ela(k[e>>2]|0,d);d=a+48|0;Ela(k[d>>2]|0,b);b=a+52|0;Ela(k[b>>2]|0,f);f=Gla(k[e>>2]|0)|0;k[a+60>>2]=f;f=Gla(k[d>>2]|0)|0;k[a+64>>2]=f;f=Fla(k[b>>2]|0)|0;k[a+56>>2]=f;k[a+124>>2]=g;return}function N0(a,b,c){a=a|0;b=b|0;c=c|0;return}function O0(a,b){a=a|0;b=b|0;return}function P0(a,b){a=a|0;b=b|0;var c=0;c=a+60|0;a=Rn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Rn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function Q0(a,b){a=a|0;b=b|0;var c=0;c=a+60|0;a=Qn(k[k[c>>2]>>2]|0)|0;k[b>>2]=a;a=Qn(k[(k[c>>2]|0)+4>>2]|0)|0;k[b+4>>2]=a;return}function R0(a){a=a|0;return 2}function S0(a,b){a=a|0;b=b|0;return (k[a+12>>2]|0)==(b|0)|0}function T0(a){a=a|0;return 1}function U0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+180|0;g=e+176|0;h=e+40|0;i=e+24|0;j=e+12|0;l=e;cO(k[a+124>>2]|0,g,477);switch(k[g>>2]|0){case 497:{m=V0(a,d)|0;break}case 481:{m=V0(a,d)|0;break}default:{a=h+56|0;n=h+4|0;k[h>>2]=27524;k[a>>2]=27544;B=0;wa(508,h+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;q=o;vva(a);Qb(q|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[a>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){s=Rb()|0;t=Q;u=s}else{k[n>>2]=27560;s=h+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[h+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,n|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;Yua(f);Yua(s);Ava(n);t=w;u=v;break}Yua(f);B=0;v=Ia(40,h|0,144156,9)|0;w=B;B=0;if((((((!(w&1)?(B=0,w=Xa(242,v|0,k[g>>2]|0)|0,v=B,B=0,!(v&1)):0)?(B=0,v=Ia(40,w|0,144166,2)|0,w=B,B=0,!(w&1)):0)?(B=0,w=ya(427,k[g>>2]|0)|0,x=B,B=0,!(x&1)):0)?(x=Lta(w)|0,B=0,y=Ia(40,v|0,w|0,x|0)|0,x=B,B=0,!(x&1)):0)?(B=0,x=Ia(40,y|0,144169,19)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,i|0,117758,74);y=B;B=0;do if(!(y&1)){B=0;eb(502,j|0,118091,20);w=B;B=0;if(w&1){w=Rb()|0;v=Q;Yua(i);z=v;A=w;break}B=0;wa(510,l|0,n|0);w=B;B=0;if(w&1){w=Rb()|0;C=Q;D=w;E=1}else{B=0;ua(163,x|0,i|0,j|0,334,l|0);w=B;B=0;if(w&1)F=1;else{B=0;eb(503,x|0,1240,229);B=0;F=0}w=Rb()|0;v=Q;Yua(l);C=v;D=w;E=F}Yua(j);Yua(i);if(E){z=C;A=D}else{G=C;H=D;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(a);Qb(H|0)}}else{w=Rb()|0;z=Q;A=w}while(0);zb(x|0);G=z;H=A;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(a);Qb(H|0)}y=Rb()|0;G=Q;H=y;k[h>>2]=27468;k[a>>2]=27488;k[n>>2]=27560;Yua(s);Ava(n);vva(a);Qb(H|0)}while(0);p=t;q=u;vva(a);Qb(q|0)}}if(!m){r=e;return}IN(m,b,c);HN(m);Sqa(m);r=e;return}function V0(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;c=r;r=r+400|0;d=c+376|0;e=c+8|0;f=c;g=c+240|0;h=c+224|0;j=c+72|0;l=c+60|0;m=c+88|0;n=c+48|0;o=c+36|0;q=c+24|0;s=a+64|0;t=k[k[s>>2]>>2]|0;if((Hc[k[(k[t>>2]|0)+20>>2]&511](t)|0)!=621){t=g+56|0;u=g+4|0;k[g>>2]=27524;k[t>>2]=27544;B=0;wa(508,g+56|0,u|0);v=B;B=0;if(v&1){v=Rb()|0;w=Q;x=v;vva(t);Qb(x|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[t>>2]=27488;B=0;va(448,u|0);v=B;B=0;do if(v&1){y=Rb()|0;z=Q;A=y}else{k[u>>2]=27560;y=g+36|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,u|0,d|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(d);Yua(y);Ava(u);z=D;A=C;break}Yua(d);B=0;C=Ia(40,g|0,118112,45)|0;D=B;B=0;a:do if(!(D&1)?(B=0,Xa(239,C|0,0)|0,E=B,B=0,!(E&1)):0){E=Ab(20)|0;B=0;eb(502,h|0,117758,74);F=B;B=0;do if(!(F&1)){B=0;eb(502,j|0,118158,38);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(h);I=G;J=H;break}B=0;wa(510,l|0,u|0);H=B;B=0;if(H&1){H=Rb()|0;K=H;L=Q;M=1}else{B=0;ua(163,E|0,h|0,j|0,455,l|0);H=B;B=0;if(H&1)N=1;else{B=0;eb(503,E|0,1240,229);B=0;N=0}H=Rb()|0;G=Q;Yua(l);K=H;L=G;M=N}Yua(j);Yua(h);if(M){I=K;J=L}else{O=K;P=L;break a}}else{G=Rb()|0;I=G;J=Q}while(0);zb(E|0);O=I;P=J}else R=17;while(0);if((R|0)==17){C=Rb()|0;O=C;P=Q}k[g>>2]=27468;k[t>>2]=27488;k[u>>2]=27560;Yua(y);Ava(u);vva(t);S=P;T=O;Qb(T|0)}while(0);w=z;x=A;vva(t);Qb(x|0)}x=k[s>>2]|0;s=k[x>>2]|0;t=k[x+4>>2]|0;if(!(i[a+72>>0]|0)){U=0;r=c;return U|0}x=Qqa(68)|0;A=a+60|0;z=a+124|0;B=0;ua(165,x|0,k[A>>2]|0,2,k[z>>2]|0,534);w=B;B=0;if(w&1){w=Rb()|0;O=Q;Sqa(x);S=O;T=w;Qb(T|0)}dO(k[z>>2]|0,f,73);rd[k[(k[s>>2]|0)+144>>2]&511](s,e,k[k[A>>2]>>2]|0,353);s=e+8|0;rd[k[(k[t>>2]|0)+144>>2]&511](t,s,k[(k[A>>2]|0)+4>>2]|0,353);V=+p[e>>3];if(!(V!=+p[s>>3])){s=a+88|0;W=+p[s>>3];X=W*W*b*+ba(10.0,+(+p[f>>3]));e=x+12|0;A=k[e>>2]|0;p[A>>3]=X+ +p[A>>3];t=a+96|0;X=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));z=A+8|0;p[z>>3]=X+ +p[z>>3];X=+p[s>>3];W=X*X*b*+ba(10.0,+(+p[f>>3]));z=A+16|0;p[z>>3]=+p[z>>3]-W;W=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));z=A+24|0;p[z>>3]=+p[z>>3]-W;W=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));z=A+32|0;p[z>>3]=W+ +p[z>>3];W=+p[t>>3];X=W*W*b*+ba(10.0,+(+p[f>>3]));z=A+40|0;p[z>>3]=X+ +p[z>>3];X=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));z=A+48|0;p[z>>3]=+p[z>>3]-X;X=+p[t>>3];W=X*X*b*+ba(10.0,+(+p[f>>3]));z=A+56|0;p[z>>3]=+p[z>>3]-W;W=+p[s>>3];X=W*W*b*+ba(10.0,+(+p[f>>3]));z=A+64|0;p[z>>3]=+p[z>>3]-X;X=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));z=A+72|0;p[z>>3]=+p[z>>3]-X;X=+p[s>>3];W=X*X*b*+ba(10.0,+(+p[f>>3]));z=k[e>>2]|0;A=z+80|0;p[A>>3]=W+ +p[A>>3];W=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));A=z+88|0;p[A>>3]=W+ +p[A>>3];W=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));A=z+96|0;p[A>>3]=+p[A>>3]-W;W=+p[t>>3];X=W*W*b*+ba(10.0,+(+p[f>>3]));A=z+104|0;p[A>>3]=+p[A>>3]-X;X=+p[s>>3]*+p[t>>3]*b*+ba(10.0,+(+p[f>>3]));A=z+112|0;p[A>>3]=X+ +p[A>>3];X=+p[t>>3];W=X*X*b*+ba(10.0,+(+p[f>>3]));f=z+120|0;p[f>>3]=W+ +p[f>>3];W=+p[t>>3];f=a+104|0;A=a+24|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(W*W)));a=z+8|0;p[a>>3]=+p[a>>3]-+p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[t>>3];a=z+16|0;p[a>>3]=+p[a>>3]-+p[A>>3]*(+p[f>>3]*(V*(W*W)));a=k[e>>2]|0;z=a+24|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));z=a+32|0;p[z>>3]=+p[z>>3]-+p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[s>>3];z=a+40|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(W*W)));z=a+48|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[s>>3];z=a+56|0;p[z>>3]=+p[z>>3]-+p[A>>3]*(+p[f>>3]*(V*(W*W)));W=+p[t>>3];z=a+64|0;p[z>>3]=+p[z>>3]-+p[A>>3]*(+p[f>>3]*(V*(W*W)));z=a+72|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[t>>3];z=a+80|0;p[z>>3]=+p[z>>3]+ +p[A>>3]*(+p[f>>3]*(V*(W*W)));z=a+88|0;p[z>>3]=+p[z>>3]-+p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));z=k[e>>2]|0;e=z+96|0;p[e>>3]=+p[e>>3]+ +p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[s>>3];e=z+104|0;p[e>>3]=+p[e>>3]-+p[A>>3]*(+p[f>>3]*(V*(W*W)));e=z+112|0;p[e>>3]=+p[e>>3]-+p[A>>3]*(+p[f>>3]*(V*(+p[s>>3]*+p[t>>3])));W=+p[s>>3];s=z+120|0;p[s>>3]=+p[s>>3]+ +p[A>>3]*(+p[f>>3]*(V*(W*W)));U=x;r=c;return U|0}U=m+56|0;c=m+4|0;k[m>>2]=27524;k[U>>2]=27544;B=0;wa(508,m+56|0,c|0);x=B;B=0;if(x&1){x=Rb()|0;Y=Q;Z=x;vva(U);Qb(Z|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[U>>2]=27488;B=0;va(448,c|0);x=B;B=0;do if(x&1){f=Rb()|0;_=Q;$=f}else{k[c>>2]=27560;f=m+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,c|0,d|0);A=B;B=0;if(A&1){A=Rb()|0;s=Q;Yua(d);Yua(f);Ava(c);_=s;$=A;break}Yua(d);B=0;A=Ia(40,m|0,118197,51)|0;s=B;B=0;b:do if(!(s&1)?(B=0,Xa(239,A|0,0)|0,z=B,B=0,!(z&1)):0){z=Ab(20)|0;B=0;eb(502,n|0,117758,74);t=B;B=0;do if(!(t&1)){B=0;eb(502,o|0,118158,38);e=B;B=0;if(e&1){e=Rb()|0;a=Q;Yua(n);aa=e;ca=a;break}B=0;wa(510,q|0,c|0);a=B;B=0;if(a&1){a=Rb()|0;da=1;ea=Q;fa=a}else{B=0;ua(163,z|0,n|0,o|0,467,q|0);a=B;B=0;if(a&1)ga=1;else{B=0;eb(503,z|0,1240,229);B=0;ga=0}a=Rb()|0;e=Q;Yua(q);da=ga;ea=e;fa=a}Yua(o);Yua(n);if(da){aa=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{a=Rb()|0;aa=a;ca=Q}while(0);zb(z|0);ha=ca;ia=aa}else R=44;while(0);if((R|0)==44){A=Rb()|0;ha=Q;ia=A}k[m>>2]=27468;k[U>>2]=27488;k[c>>2]=27560;Yua(f);Ava(c);vva(U);S=ha;T=ia;Qb(T|0)}while(0);Y=_;Z=$;vva(U);Qb(Z|0);return 0}function W0(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0;d=r;r=r+192|0;e=d+180|0;f=d+176|0;g=d+40|0;h=d+24|0;i=d+12|0;j=d;cO(k[a+124>>2]|0,f,477);switch(k[f>>2]|0){case 497:{l=X0(a,0.0)|0;if(!l){r=d;return}TN(l,b);SN(l);Sqa(l);r=d;return}case 481:{r=d;return}default:{d=g+56|0;l=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,l|0);b=B;B=0;if(b&1){b=Rb()|0;m=Q;n=b;vva(d);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,l|0);b=B;B=0;do if(b&1){a=Rb()|0;o=Q;p=a}else{k[l>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,l|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;s=Q;Yua(e);Yua(a);Ava(l);o=s;p=q;break}Yua(e);B=0;q=Ia(40,g|0,144156,9)|0;s=B;B=0;if((((((!(s&1)?(B=0,s=Xa(242,q|0,k[f>>2]|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,s|0,144166,2)|0,s=B,B=0,!(s&1)):0)?(B=0,s=ya(427,k[f>>2]|0)|0,t=B,B=0,!(t&1)):0)?(t=Lta(s)|0,B=0,u=Ia(40,q|0,s|0,t|0)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Ia(40,u|0,144169,19)|0,u=B,B=0,!(u&1)):0)?(B=0,Xa(239,t|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,h|0,117758,74);u=B;B=0;do if(!(u&1)){B=0;eb(502,i|0,118249,20);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(h);v=q;w=s;break}B=0;wa(510,j|0,l|0);s=B;B=0;if(s&1){s=Rb()|0;x=Q;y=s;z=1}else{B=0;ua(163,t|0,h|0,i|0,359,j|0);s=B;B=0;if(s&1)A=1;else{B=0;eb(503,t|0,1240,229);B=0;A=0}s=Rb()|0;q=Q;Yua(j);x=q;y=s;z=A}Yua(i);Yua(h);if(z){v=x;w=y}else{C=x;D=y;k[g>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(a);Ava(l);vva(d);Qb(D|0)}}else{s=Rb()|0;v=Q;w=s}while(0);zb(t|0);C=v;D=w;k[g>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(a);Ava(l);vva(d);Qb(D|0)}u=Rb()|0;C=Q;D=u;k[g>>2]=27468;k[d>>2]=27488;k[l>>2]=27560;Yua(a);Ava(l);vva(d);Qb(D|0)}while(0);m=o;n=p;vva(d);Qb(n|0)}}}function X0(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0.0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0.0,Ma=0.0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;c=r;r=r+912|0;d=c+900|0;e=c+16|0;f=c;g=c+728|0;h=c+888|0;j=c+876|0;l=c+864|0;m=c+592|0;n=c+580|0;o=c+568|0;q=c+280|0;s=c+432|0;t=c+128|0;u=c+116|0;v=c+104|0;w=c+296|0;x=c+92|0;y=c+80|0;z=c+68|0;A=c+144|0;C=c+56|0;D=c+44|0;E=c+32|0;F=a+64|0;G=k[k[F>>2]>>2]|0;if((Hc[k[(k[G>>2]|0)+20>>2]&511](G)|0)!=621){G=g+56|0;H=g+4|0;k[g>>2]=27524;k[G>>2]=27544;B=0;wa(508,g+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;K=I;vva(G);Qb(K|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){L=Rb()|0;M=Q;N=L}else{k[H>>2]=27560;L=g+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,H|0,d|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(d);Yua(L);Ava(H);M=P;N=O;break}Yua(d);B=0;O=Ia(40,g|0,118112,45)|0;P=B;B=0;a:do if(!(P&1)?(B=0,Xa(239,O|0,0)|0,R=B,B=0,!(R&1)):0){R=Ab(20)|0;B=0;eb(502,h|0,117758,74);S=B;B=0;do if(!(S&1)){B=0;eb(502,j|0,118270,38);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(h);V=U;W=T;break}B=0;wa(510,l|0,H|0);T=B;B=0;if(T&1){T=Rb()|0;X=Q;Y=T;Z=1}else{B=0;ua(163,R|0,h|0,j|0,541,l|0);T=B;B=0;if(T&1)_=1;else{B=0;eb(503,R|0,1240,229);B=0;_=0}T=Rb()|0;U=Q;Yua(l);X=U;Y=T;Z=_}Yua(j);Yua(h);if(Z){V=X;W=Y}else{$=X;aa=Y;break a}}else{T=Rb()|0;V=Q;W=T}while(0);zb(R|0);$=V;aa=W}else ba=17;while(0);if((ba|0)==17){O=Rb()|0;$=Q;aa=O}k[g>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(G);ca=$;da=aa;Qb(da|0)}while(0);J=M;K=N;vva(G);Qb(K|0)}K=k[F>>2]|0;F=k[K>>2]|0;G=k[K+4>>2]|0;if(i[a+72>>0]|0){ea=0;r=c;return ea|0}K=Qqa(24)|0;N=a+60|0;B=0;ua(166,K|0,k[N>>2]|0,2,k[a+124>>2]|0,534);M=B;B=0;if(M&1){M=Rb()|0;J=Q;Sqa(K);ca=J;da=M;Qb(da|0)}M=a+56|0;b=+WJ(k[M>>2]|0,265);fa=+WJ(k[M>>2]|0,266);ga=+WJ(k[M>>2]|0,65);rd[k[(k[F>>2]|0)+144>>2]&511](F,e,k[k[N>>2]>>2]|0,353);M=e+8|0;rd[k[(k[G>>2]|0)+144>>2]&511](G,M,k[(k[N>>2]|0)+4>>2]|0,353);ha=+p[e>>3];if(ha!=+p[M>>3]){M=m+56|0;e=m+4|0;k[m>>2]=27524;k[M>>2]=27544;B=0;wa(508,m+56|0,e|0);J=B;B=0;if(J&1){J=Rb()|0;ia=Q;ja=J;vva(M);Qb(ja|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[M>>2]=27488;B=0;va(448,e|0);J=B;B=0;do if(J&1){aa=Rb()|0;ka=Q;la=aa}else{k[e>>2]=27560;aa=m+36|0;k[aa>>2]=0;k[aa+4>>2]=0;k[aa+8>>2]=0;k[aa+12>>2]=0;k[m+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,e|0,d|0);$=B;B=0;if($&1){$=Rb()|0;H=Q;Yua(d);Yua(aa);Ava(e);ka=H;la=$;break}Yua(d);B=0;$=Ia(40,m|0,118197,51)|0;H=B;B=0;b:do if(!(H&1)?(B=0,Xa(239,$|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,n|0,117758,74);W=B;B=0;do if(!(W&1)){B=0;eb(502,o|0,118270,38);V=B;B=0;if(V&1){V=Rb()|0;Y=Q;Yua(n);ma=Y;na=V;break}B=0;wa(510,q|0,e|0);V=B;B=0;if(V&1){V=Rb()|0;oa=1;pa=Q;qa=V}else{B=0;ua(163,g|0,n|0,o|0,555,q|0);V=B;B=0;if(V&1)ra=1;else{B=0;eb(503,g|0,1240,229);B=0;ra=0}V=Rb()|0;Y=Q;Yua(q);oa=ra;pa=Y;qa=V}Yua(o);Yua(n);if(oa){ma=pa;na=qa}else{sa=pa;ta=qa;break b}}else{V=Rb()|0;ma=Q;na=V}while(0);zb(g|0);sa=ma;ta=na}else ba=44;while(0);if((ba|0)==44){$=Rb()|0;sa=Q;ta=$}k[m>>2]=27468;k[M>>2]=27488;k[e>>2]=27560;Yua(aa);Ava(e);vva(M);ca=sa;da=ta;Qb(da|0)}while(0);ia=ka;ja=la;vva(M);Qb(ja|0)}rd[k[(k[F>>2]|0)+144>>2]&511](F,f,k[k[N>>2]>>2]|0,64);F=f+8|0;rd[k[(k[G>>2]|0)+144>>2]&511](G,F,k[(k[N>>2]|0)+4>>2]|0,64);xa=+p[f>>3];if(xa!=+p[F>>3]){F=s+56|0;f=s+4|0;k[s>>2]=27524;k[F>>2]=27544;B=0;wa(508,s+56|0,f|0);N=B;B=0;if(N&1){N=Rb()|0;ya=Q;za=N;vva(F);Qb(za|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[F>>2]=27488;B=0;va(448,f|0);N=B;B=0;do if(N&1){G=Rb()|0;Aa=Q;Ba=G}else{k[f>>2]=27560;G=s+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,f|0,d|0);ja=B;B=0;if(ja&1){ja=Rb()|0;M=Q;Yua(d);Yua(G);Ava(f);Aa=M;Ba=ja;break}Yua(d);B=0;ja=Ia(40,s|0,118309,44)|0;M=B;B=0;c:do if(!(M&1)?(B=0,Xa(239,ja|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,t|0,117758,74);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,u|0,118270,38);ia=B;B=0;if(ia&1){ia=Rb()|0;ta=Q;Yua(t);Ca=ta;Da=ia;break}B=0;wa(510,v|0,f|0);ia=B;B=0;if(ia&1){ia=Rb()|0;Ea=1;Fa=Q;Ga=ia}else{B=0;ua(163,la|0,t|0,u|0,559,v|0);ia=B;B=0;if(ia&1)Ha=1;else{B=0;eb(503,la|0,1240,229);B=0;Ha=0}ia=Rb()|0;ta=Q;Yua(v);Ea=Ha;Fa=ta;Ga=ia}Yua(u);Yua(t);if(Ea){Ca=Fa;Da=Ga}else{Ja=Fa;Ka=Ga;break c}}else{ia=Rb()|0;Ca=Q;Da=ia}while(0);zb(la|0);Ja=Ca;Ka=Da}else ba=68;while(0);if((ba|0)==68){ja=Rb()|0;Ja=Q;Ka=ja}k[s>>2]=27468;k[F>>2]=27488;k[f>>2]=27560;Yua(G);Ava(f);vva(F);ca=Ja;da=Ka;Qb(da|0)}while(0);ya=Aa;za=Ba;vva(F);Qb(za|0)}za=a+20|0;d:do switch(k[za>>2]|0){case 633:{La=ha*ha;Ma=b*ga*La*.5;Na=fa*ga;if(!(i[a+40>>0]|0)){Oa=Ma-Na*La*.5;break d}else{Oa=Ma-Na*(xa*xa)*.5;break d}break}case 630:{Oa=b*ga*(ha*ha)*.5;break}case 631:{Oa=0.0;break}case 632:{if(i[a+40>>0]|0){Na=b*ga;Ma=+p[a+112>>3];La=ha*Ma;Pa=ha*(b/fa*Ma);Oa=Na*(ha*ha)*.5-Na*(La*La)*.5-fa*.5*ga*(xa*xa-Pa*Pa);break d}F=w+56|0;Ba=w+4|0;k[w>>2]=27524;k[F>>2]=27544;B=0;wa(508,w+56|0,Ba|0);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Qa=Q;Ra=Aa;vva(F);Qb(Ra|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[F>>2]=27488;B=0;va(448,Ba|0);Aa=B;B=0;do if(Aa&1){ya=Rb()|0;Sa=Q;Ta=ya}else{k[Ba>>2]=27560;ya=w+36|0;k[ya>>2]=0;k[ya+4>>2]=0;k[ya+8>>2]=0;k[ya+12>>2]=0;k[w+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Ba|0,d|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ja=Q;Yua(d);Yua(ya);Ava(Ba);Sa=Ja;Ta=Ka;break}Yua(d);B=0;Ka=Ia(40,w|0,118354,10)|0;Ja=B;B=0;e:do if(((!(Ja&1)?(B=0,f=Xa(242,Ka|0,k[za>>2]|0)|0,s=B,B=0,!(s&1)):0)?(B=0,s=Ia(40,f|0,118365,33)|0,f=B,B=0,!(f&1)):0)?(B=0,Xa(239,s|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,x|0,117758,74);f=B;B=0;do if(!(f&1)){B=0;eb(502,y|0,118270,38);Da=B;B=0;if(Da&1){Da=Rb()|0;Ca=Q;Yua(x);Ua=Ca;Va=Da;break}B=0;wa(510,z|0,Ba|0);Da=B;B=0;if(Da&1){Da=Rb()|0;Wa=1;Ya=Q;Za=Da}else{B=0;ua(163,s|0,x|0,y|0,587,z|0);Da=B;B=0;if(Da&1)_a=1;else{B=0;eb(503,s|0,1240,229);B=0;_a=0}Da=Rb()|0;Ca=Q;Yua(z);Wa=_a;Ya=Ca;Za=Da}Yua(y);Yua(x);if(Wa){Ua=Ya;Va=Za}else{$a=Ya;ab=Za;break e}}else{Da=Rb()|0;Ua=Q;Va=Da}while(0);zb(s|0);$a=Ua;ab=Va}else ba=99;while(0);if((ba|0)==99){Ka=Rb()|0;$a=Q;ab=Ka}k[w>>2]=27468;k[F>>2]=27488;k[Ba>>2]=27560;Yua(ya);Ava(Ba);vva(F);ca=$a;da=ab;Qb(da|0)}while(0);Qa=Sa;Ra=Ta;vva(F);Qb(Ra|0);break}default:{Ba=A+56|0;Aa=A+4|0;k[A>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,A+56|0,Aa|0);G=B;B=0;if(G&1){G=Rb()|0;bb=Q;cb=G;vva(Ba);Qb(cb|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Aa|0);G=B;B=0;do if(G&1){Ka=Rb()|0;db=Q;fb=Ka}else{k[Aa>>2]=27560;Ka=A+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[A+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,Aa|0,d|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;la=Q;Yua(d);Yua(Ka);Ava(Aa);db=la;fb=Ja;break}Yua(d);B=0;Ja=Ia(40,A|0,118354,10)|0;la=B;B=0;f:do if(((!(la&1)?(B=0,f=Xa(242,Ja|0,k[za>>2]|0)|0,Da=B,B=0,!(Da&1)):0)?(B=0,Da=Ia(40,f|0,118399,19)|0,f=B,B=0,!(f&1)):0)?(B=0,Xa(239,Da|0,0)|0,Da=B,B=0,!(Da&1)):0){Da=Ab(20)|0;B=0;eb(502,C|0,117758,74);f=B;B=0;do if(!(f&1)){B=0;eb(502,D|0,118270,38);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ga=Q;Yua(C);gb=Ga;hb=Ca;break}B=0;wa(510,E|0,Aa|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;ib=1;jb=Q;kb=Ca}else{B=0;ua(163,Da|0,C|0,D|0,597,E|0);Ca=B;B=0;if(Ca&1)lb=1;else{B=0;eb(503,Da|0,1240,229);B=0;lb=0}Ca=Rb()|0;Ga=Q;Yua(E);ib=lb;jb=Ga;kb=Ca}Yua(D);Yua(C);if(ib){gb=jb;hb=kb}else{mb=jb;nb=kb;break f}}else{Ca=Rb()|0;gb=Q;hb=Ca}while(0);zb(Da|0);mb=gb;nb=hb}else ba=125;while(0);if((ba|0)==125){Ja=Rb()|0;mb=Q;nb=Ja}k[A>>2]=27468;k[Ba>>2]=27488;k[Aa>>2]=27560;Yua(Ka);Ava(Aa);vva(Ba);ca=mb;da=nb;Qb(da|0)}while(0);bb=db;cb=fb;vva(Ba);Qb(cb|0)}}while(0);cb=a+104|0;fb=k[K+4>>2]|0;db=a+88|0;p[fb>>3]=Oa*+p[db>>3]*+p[cb>>3]+ +p[fb>>3];bb=a+96|0;a=fb+8|0;p[a>>3]=Oa*+p[bb>>3]*+p[cb>>3]+ +p[a>>3];a=fb+16|0;p[a>>3]=+p[a>>3]-Oa*+p[db>>3]*+p[cb>>3];db=fb+24|0;p[db>>3]=+p[db>>3]-Oa*+p[bb>>3]*+p[cb>>3];ea=K;r=c;return ea|0}function Y0(a){a=a|0;k[a+60>>2]=0;k[a+64>>2]=0;k[a+56>>2]=0;k[a+124>>2]=0;Dla(k[a+44>>2]|0);Dla(k[a+48>>2]|0);Dla(k[a+52>>2]|0);return}function Z0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return}function _0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=r;r=r+192|0;d=g+176|0;j=g+40|0;l=g+24|0;m=g+12|0;n=g;o=a+60|0;a=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;p=(i[a>>0]|0)==0;if((h|0)==937){if(p){a=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;i[a>>0]=1;a=0;while(1){q=f+(a<<2)|0;if((k[q>>2]|0)>-1)a=a+1|0;else{s=q;break}}a=Rn(k[k[o>>2]>>2]|0)|0;k[s>>2]=a;a=k[k[o>>2]>>2]|0;if(k[a+28>>2]|0){s=(fo(a)|0)==0;t=s&1;u=s&1^1}else{t=0;u=0}}else{t=0;u=0}s=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;if(i[s>>0]|0){v=t;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}s=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;i[s>>0]=1;s=0;while(1){a=f+(s<<2)|0;if((k[a>>2]|0)>-1)s=s+1|0;else{x=a;break}}s=Rn(k[(k[o>>2]|0)+4>>2]|0)|0;k[x>>2]=s;s=k[(k[o>>2]|0)+4>>2]|0;if(!(k[s+28>>2]|0)){v=t;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(s)|0)){v=t+1|0;w=u;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=t;w=u+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}}a:do if(p){u=e+(Rn(k[k[o>>2]>>2]|0)|0)|0;i[u>>0]=1;u=0;while(1){t=f+(u<<2)|0;if((k[t>>2]|0)>-1)u=u+1|0;else{y=t;break}}u=Rn(k[k[o>>2]>>2]|0)|0;k[y>>2]=u;switch(h|0){case 966:{u=k[k[o>>2]>>2]|0;if(!(k[u+32>>2]|0)){z=0;A=0;C=40;break a}t=(fo(u)|0)==0;z=t;A=t&1^1;C=40;break a;break}case 943:{t=k[k[o>>2]>>2]|0;if(!(k[t+24>>2]|0)){z=0;A=0;C=40;break a}u=(fo(t)|0)==0;z=u;A=u&1^1;C=40;break a;break}default:break a}}else{z=0;A=0;C=40}while(0);b:do if((C|0)==40){y=z&1;p=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;if(i[p>>0]|0){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}p=e+(Rn(k[(k[o>>2]|0)+4>>2]|0)|0)|0;i[p>>0]=1;p=0;while(1){u=f+(p<<2)|0;if((k[u>>2]|0)>-1)p=p+1|0;else{D=u;break}}p=Rn(k[(k[o>>2]|0)+4>>2]|0)|0;k[D>>2]=p;switch(h|0){case 966:{p=k[(k[o>>2]|0)+4>>2]|0;if(!(k[p+32>>2]|0)){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(p)|0)){v=z?2:1;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=y;w=A+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}break}case 943:{p=k[(k[o>>2]|0)+4>>2]|0;if(!(k[p+24>>2]|0)){v=y;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}if(!(fo(p)|0)){v=z?2:1;w=A;k[b>>2]=v;k[c>>2]=w;r=g;return}else{v=y;w=A+1|0;k[b>>2]=v;k[c>>2]=w;r=g;return}break}default:break b}}while(0);g=j+56|0;w=j+4|0;k[j>>2]=27524;k[g>>2]=27544;B=0;wa(508,j+56|0,w|0);c=B;B=0;if(c&1){c=Rb()|0;E=Q;F=c;vva(g);Qb(F|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[g>>2]=27488;B=0;va(448,w|0);c=B;B=0;do if(c&1){v=Rb()|0;G=Q;H=v}else{k[w>>2]=27560;v=j+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,w|0,d|0);b=B;B=0;if(b&1){b=Rb()|0;A=Q;Yua(d);Yua(v);Ava(w);G=A;H=b;break}Yua(d);B=0;b=Ia(40,j|0,145010,13)|0;A=B;B=0;if(!(A&1)?(B=0,Xa(239,b|0,0)|0,b=B,B=0,!(b&1)):0){b=Ab(20)|0;B=0;eb(502,l|0,117758,74);A=B;B=0;do if(!(A&1)){B=0;eb(502,m|0,144217,23);z=B;B=0;if(z&1){z=Rb()|0;o=Q;Yua(l);I=o;J=z;break}B=0;wa(510,n|0,w|0);z=B;B=0;if(z&1){z=Rb()|0;K=Q;L=z;M=1}else{B=0;ua(163,b|0,l|0,m|0,431,n|0);z=B;B=0;if(z&1)N=1;else{B=0;eb(503,b|0,1240,229);B=0;N=0}z=Rb()|0;o=Q;Yua(n);K=o;L=z;M=N}Yua(m);Yua(l);if(M){I=K;J=L}else{O=K;P=L;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}}else{z=Rb()|0;I=Q;J=z}while(0);zb(b|0);O=I;P=J;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}A=Rb()|0;O=Q;P=A;k[j>>2]=27468;k[g>>2]=27488;k[w>>2]=27560;Yua(v);Ava(w);vva(g);Qb(P|0)}while(0);E=G;F=H;vva(g);Qb(F|0)}function $0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;c=r;r=r+224|0;d=c+208|0;e=c+24|0;f=c+16|0;g=c+8|0;h=c;j=c+72|0;m=c+56|0;n=c+44|0;o=c+32|0;q=a+64|0;s=k[k[q>>2]>>2]|0;if((Hc[k[(k[s>>2]|0)+20>>2]&511](s)|0)==621){s=k[q>>2]|0;q=k[s>>2]|0;t=k[s+4>>2]|0;if(i[a+73>>0]|0){k[b>>2]=0;r=c;return 1}switch(k[a+120>>2]|0){case 636:{i[a+72>>0]=0;break}case 634:{i[a+72>>0]=1;break}default:{s=a+60|0;rd[k[(k[q>>2]|0)+144>>2]&511](q,e,k[k[s>>2]>>2]|0,674);rd[k[(k[t>>2]|0)+144>>2]&511](t,g,k[(k[s>>2]|0)+4>>2]|0,674);rd[k[(k[q>>2]|0)+144>>2]&511](q,f,k[k[s>>2]>>2]|0,677);rd[k[(k[t>>2]|0)+144>>2]&511](t,h,k[(k[s>>2]|0)+4>>2]|0,677);s=(+p[g>>3]-+p[e>>3])*+p[a+88>>3]+(+p[h>>3]-+p[f>>3])*+p[a+96>>3]<0.0;f=a+76|0;h=k[f>>2]|0;if((h|0)>(k[a+68>>2]|0)){k[f>>2]=0;e=a+112|0;u=+p[a+32>>3]+ +p[e>>3];p[e>>3]=u;if(u>1.0){p[e>>3]=1.0;v=0}else v=0}else v=h;h=a+72|0;if((l[h>>0]|0)==(s&1|0))w=0;else{k[f>>2]=v+1;w=1}i[h>>0]=s&1;k[b>>2]=w;r=c;return 1}}k[b>>2]=0;r=c;return 1}c=j+56|0;b=j+4|0;k[j>>2]=27524;k[c>>2]=27544;B=0;wa(508,j+56|0,b|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(c);Qb(y|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[c>>2]=27488;B=0;va(448,b|0);w=B;B=0;do if(w&1){s=Rb()|0;z=Q;A=s}else{k[b>>2]=27560;s=j+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[j+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,b|0,d|0);h=B;B=0;if(h&1){h=Rb()|0;v=Q;Yua(d);Yua(s);Ava(b);z=v;A=h;break}Yua(d);B=0;h=Ia(40,j|0,118112,45)|0;v=B;B=0;if(!(v&1)?(B=0,Xa(239,h|0,0)|0,h=B,B=0,!(h&1)):0){h=Ab(20)|0;B=0;eb(502,m|0,117758,74);v=B;B=0;do if(!(v&1)){B=0;eb(502,n|0,118419,9);f=B;B=0;if(f&1){f=Rb()|0;a=Q;Yua(m);C=a;D=f;break}B=0;wa(510,o|0,b|0);f=B;B=0;if(f&1){f=Rb()|0;E=Q;F=f;G=1}else{B=0;ua(163,h|0,m|0,n|0,630,o|0);f=B;B=0;if(f&1)H=1;else{B=0;eb(503,h|0,1240,229);B=0;H=0}f=Rb()|0;a=Q;Yua(o);E=a;F=f;G=H}Yua(n);Yua(m);if(G){C=E;D=F}else{I=E;J=F;k[j>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(s);Ava(b);vva(c);Qb(J|0)}}else{f=Rb()|0;C=Q;D=f}while(0);zb(h|0);I=C;J=D;k[j>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(s);Ava(b);vva(c);Qb(J|0)}v=Rb()|0;I=Q;J=v;k[j>>2]=27468;k[c>>2]=27488;k[b>>2]=27560;Yua(s);Ava(b);vva(c);Qb(J|0)}while(0);x=z;y=A;vva(c);Qb(y|0);return 0}function a1(a){a=a|0;i[a+73>>0]=1;return}function b1(a){a=a|0;return (i[a+73>>0]|0)!=0|0}function c1(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,118429,102);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,77,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function d1(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;b=r;r=r+192|0;a=b+176|0;d=b+40|0;e=b+24|0;f=b+12|0;g=b;b=d+56|0;h=d+4|0;k[d>>2]=27524;k[b>>2]=27544;B=0;wa(508,d+56|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;j=Q;l=i;vva(b);Qb(l|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[b>>2]=27488;B=0;va(448,h|0);i=B;B=0;do if(i&1){m=Rb()|0;n=Q;o=m}else{k[h>>2]=27560;m=d+36|0;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;k[m+12>>2]=0;k[d+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,h|0,a|0);p=B;B=0;if(p&1){p=Rb()|0;q=Q;Yua(a);Yua(m);Ava(h);n=q;o=p;break}Yua(a);B=0;p=Ia(40,d|0,144350,19)|0;q=B;B=0;a:do if(!(q&1)?(B=0,Xa(239,p|0,0)|0,s=B,B=0,!(s&1)):0){s=Ab(20)|0;B=0;eb(502,e|0,118429,102);t=B;B=0;do if(!(t&1)){B=0;eb(502,f|0,144370,27);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(e);w=v;x=u;break}B=0;wa(510,g|0,h|0);u=B;B=0;if(u&1){u=Rb()|0;y=Q;z=u;A=1}else{B=0;ua(163,s|0,e|0,f|0,85,g|0);u=B;B=0;if(u&1)C=1;else{B=0;eb(503,s|0,1240,229);B=0;C=0}u=Rb()|0;v=Q;Yua(g);y=v;z=u;A=C}Yua(f);Yua(e);if(A){w=y;x=z}else{D=y;E=z;break a}}else{u=Rb()|0;w=Q;x=u}while(0);zb(s|0);D=w;E=x}else F=16;while(0);if((F|0)==16){p=Rb()|0;D=Q;E=p}k[d>>2]=27468;k[b>>2]=27488;k[h>>2]=27560;Yua(m);Ava(h);vva(b);Qb(E|0)}while(0);j=n;l=o;vva(b);Qb(l|0)}function e1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,118532,20)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,118429,102);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,118553,23);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,68,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function f1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,118429,102);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144327,22);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,70,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function g1(a,b,c){a=a|0;b=b|0;c=c|0;e1(a+-4|0,b,c)}function h1(a,b,c){a=a|0;b=b|0;c=c|0;f1(a+-4|0,b,c)}function i1(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,La=0,Ma=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0;d=r;r=r+352|0;e=d+332|0;f=d+328|0;g=d+324|0;h=d+320|0;i=d+316|0;j=d+312|0;l=d+308|0;m=d+304|0;n=d+300|0;o=d+296|0;q=d+292|0;s=d+288|0;t=d+284|0;u=d+280|0;v=d+276|0;w=d+272|0;x=d+268|0;y=d+264|0;z=d+260|0;A=d+256|0;C=d+252|0;D=d+248|0;E=d+244|0;F=d+240|0;G=d+236|0;H=d+232|0;I=d+228|0;J=d+224|0;K=d+220|0;L=d+216|0;M=d+212|0;N=d+208|0;O=d+204|0;P=d+200|0;R=d+196|0;S=d+192|0;T=d+188|0;U=d+184|0;V=d+180|0;W=d+176|0;X=d+40|0;Y=d+24|0;Z=d+12|0;_=d;k[f>>2]=0;$=Qqa(36)|0;B=0;va(480,$|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Sqa($);ca=ba;da=aa;Qb(da|0)}Cka(c,f,g,0,118577);a:do if((k[g>>2]|0)>0){aa=0;b:while(1){switch(k[(k[f>>2]|0)+(aa<<2)>>2]|0){case 871:{k[i>>2]=0;k[j>>2]=0;k[l>>2]=0;k[m>>2]=0;Tka(c,i,h,118602);Vka(c,j,e,118625);Xka(c,l,m,0,e,118658);if((k[h>>2]|0)>0){ba=0;while(1){ea=Qqa(40)|0;B=0;ua(172,ea|0,k[(k[i>>2]|0)+(ba<<2)>>2]|0,k[(k[j>>2]|0)+(ba<<2)>>2]|0,k[(k[m>>2]|0)+(ba<<2)>>2]|0,k[(k[l>>2]|0)+(ba<<2)>>2]|0);fa=B;B=0;if(fa&1){ga=ea;ha=11;break b}ih($,ea)|0;ba=ba+1|0;ea=k[h>>2]|0;if((ba|0)>=(ea|0)){ia=ea;break}}ba=k[i>>2]|0;if((ia|0)>0){ea=ba;fa=0;while(1){ja=k[ea+(fa<<2)>>2]|0;if(ja)Tqa(ja);ja=k[(k[l>>2]|0)+(fa<<2)>>2]|0;if(ja)Tqa(ja);fa=fa+1|0;ja=k[i>>2]|0;if((fa|0)>=(k[h>>2]|0)){ka=ja;break}else ea=ja}}else ka=ba}else ka=k[i>>2]|0;if(ka)Tqa(ka);k[i>>2]=0;ea=k[l>>2]|0;if(ea)Tqa(ea);k[l>>2]=0;ea=k[m>>2]|0;if(ea)Tqa(ea);k[m>>2]=0;ea=k[j>>2]|0;if(ea)Tqa(ea);break}case 652:{k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;k[t>>2]=0;k[u>>2]=0;k[v>>2]=0;k[w>>2]=0;k[x>>2]=0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;k[C>>2]=0;k[D>>2]=0;Tka(c,o,n,118685);Vka(c,q,n,118700);Vka(c,s,n,118725);Xka(c,t,v,w,n,118746);Vka(c,u,n,118768);Tka(c,y,n,118795);Vka(c,x,n,118823);Xka(c,z,A,C,n,118839);Vka(c,D,n,118857);if((k[n>>2]|0)>0){ea=0;while(1){fa=Qqa(56)|0;B=0;Ka(12,fa|0,k[(k[o>>2]|0)+(ea<<2)>>2]|0,k[(k[q>>2]|0)+(ea<<2)>>2]|0,k[(k[s>>2]|0)+(ea<<2)>>2]|0,k[(k[u>>2]|0)+(ea<<2)>>2]|0,k[(k[y>>2]|0)+(ea<<2)>>2]|0,(k[(k[x>>2]|0)+(ea<<2)>>2]|0)!=0|0,k[(k[D>>2]|0)+(ea<<2)>>2]|0);ja=B;B=0;if(ja&1){la=fa;ha=32;break b}ih($,fa)|0;if((th(a)|0)>0){fa=0;do{ja=qh(a,fa)|0;Qp(ja,k[(k[t>>2]|0)+(ea<<2)>>2]|0,c,k[(k[v>>2]|0)+(ea<<2)>>2]|0,k[(k[w>>2]|0)+(ea<<2)>>2]|0,1,k[(k[u>>2]|0)+(ea<<2)>>2]|0,7);Qp(ja,k[(k[z>>2]|0)+(ea<<2)>>2]|0,c,k[(k[A>>2]|0)+(ea<<2)>>2]|0,k[(k[C>>2]|0)+(ea<<2)>>2]|0,1,k[(k[D>>2]|0)+(ea<<2)>>2]|0,7);fa=fa+1|0}while((fa|0)<(th(a)|0))}ea=ea+1|0;fa=k[n>>2]|0;if((ea|0)>=(fa|0)){ma=fa;break}}ea=k[o>>2]|0;if((ma|0)>0){ba=ea;fa=0;while(1){ja=k[ba+(fa<<2)>>2]|0;if(ja)Tqa(ja);ja=k[(k[y>>2]|0)+(fa<<2)>>2]|0;if(ja)Tqa(ja);ja=k[(k[t>>2]|0)+(fa<<2)>>2]|0;if(ja)Tqa(ja);ja=k[(k[z>>2]|0)+(fa<<2)>>2]|0;if(ja)Tqa(ja);fa=fa+1|0;ja=k[o>>2]|0;if((fa|0)>=(k[n>>2]|0)){na=ja;break}else ba=ja}}else na=ea}else na=k[o>>2]|0;if(na)Tqa(na);k[o>>2]=0;ba=k[s>>2]|0;if(ba)Tqa(ba);k[s>>2]=0;ba=k[q>>2]|0;if(ba)Tqa(ba);k[q>>2]=0;ba=k[t>>2]|0;if(ba)Tqa(ba);k[t>>2]=0;ba=k[u>>2]|0;if(ba)Tqa(ba);k[u>>2]=0;ba=k[v>>2]|0;if(ba)Tqa(ba);k[v>>2]=0;ba=k[w>>2]|0;if(ba)Tqa(ba);k[w>>2]=0;ba=k[x>>2]|0;if(ba)Tqa(ba);k[x>>2]=0;ba=k[y>>2]|0;if(ba)Tqa(ba);k[y>>2]=0;ba=k[z>>2]|0;if(ba)Tqa(ba);k[z>>2]=0;ba=k[A>>2]|0;if(ba)Tqa(ba);k[A>>2]=0;ba=k[C>>2]|0;if(ba)Tqa(ba);k[C>>2]=0;ba=k[D>>2]|0;if(ba)Tqa(ba);break}case 875:{k[F>>2]=0;k[G>>2]=0;k[H>>2]=0;k[I>>2]=0;Tka(c,F,E,118880);Vka(c,G,E,118899);Vka(c,H,E,118928);Vka(c,I,E,118953);if((k[E>>2]|0)>0){ba=0;while(1){fa=Qqa(24)|0;ja=k[(k[F>>2]|0)+(ba<<2)>>2]|0;oa=k[(k[G>>2]|0)+(ba<<2)>>2]|0;pa=k[(k[H>>2]|0)+(ba<<2)>>2]|0;qa=(k[(k[I>>2]|0)+(ba<<2)>>2]|0)+-1|0;k[fa>>2]=37224;k[fa+4>>2]=37276;k[fa+8>>2]=oa;oa=(Lta(ja)|0)+1|0;B=0;ra=ya(422,oa|0)|0;oa=B;B=0;if(oa&1){sa=fa;ha=79;break b}k[fa+12>>2]=ra;oa=(Lta(ja)|0)+1|0;if(!ja){ta=fa;ha=77;break b}if(oa)TEa(ra|0,ja|0,oa|0)|0;k[fa+16>>2]=pa;k[fa+20>>2]=qa;ih($,fa)|0;ba=ba+1|0;fa=k[E>>2]|0;if((ba|0)>=(fa|0)){xa=fa;break}}ba=k[F>>2]|0;if((xa|0)>0){ea=ba;fa=xa;qa=0;while(1){pa=k[ea+(qa<<2)>>2]|0;if(!pa){za=fa;Aa=ea}else{Tqa(pa);za=k[E>>2]|0;Aa=k[F>>2]|0}qa=qa+1|0;if((qa|0)>=(za|0)){Ba=Aa;break}else{ea=Aa;fa=za}}}else Ba=ba}else Ba=k[F>>2]|0;if(Ba)Tqa(Ba);k[F>>2]=0;fa=k[H>>2]|0;if(fa)Tqa(fa);k[H>>2]=0;fa=k[G>>2]|0;if(fa)Tqa(fa);k[G>>2]=0;fa=k[I>>2]|0;if(fa)Tqa(fa);break}case 597:{k[K>>2]=0;k[L>>2]=0;k[M>>2]=0;k[N>>2]=0;k[O>>2]=0;Tka(c,K,J,119107);Vka(c,L,J,119123);Xka(c,M,N,O,J,119149);if((k[J>>2]|0)>0){fa=0;while(1){ea=Qqa(24)|0;B=0;ua(173,ea|0,k[(k[K>>2]|0)+(fa<<2)>>2]|0,k[(k[L>>2]|0)+(fa<<2)>>2]|0,k[(k[M>>2]|0)+(fa<<2)>>2]|0,k[(k[N>>2]|0)+(fa<<2)>>2]|0);qa=B;B=0;if(qa&1){Ca=ea;ha=98;break b}ih($,ea)|0;fa=fa+1|0;ea=k[J>>2]|0;if((fa|0)>=(ea|0)){Da=ea;break}}fa=k[K>>2]|0;if((Da|0)>0){ba=fa;ea=0;while(1){qa=k[ba+(ea<<2)>>2]|0;if(qa)Tqa(qa);qa=k[(k[M>>2]|0)+(ea<<2)>>2]|0;if(qa)Tqa(qa);ea=ea+1|0;qa=k[K>>2]|0;if((ea|0)>=(k[J>>2]|0)){Ea=qa;break}else ba=qa}}else Ea=fa}else Ea=k[K>>2]|0;if(Ea)Tqa(Ea);k[K>>2]=0;ba=k[M>>2]|0;if(ba)Tqa(ba);k[M>>2]=0;ba=k[N>>2]|0;if(ba)Tqa(ba);k[N>>2]=0;ba=k[O>>2]|0;if(ba)Tqa(ba);k[O>>2]=0;ba=k[L>>2]|0;if(ba)Tqa(ba);break}case 601:{k[P>>2]=0;k[R>>2]=0;k[S>>2]=0;k[T>>2]=0;k[U>>2]=0;k[V>>2]=0;Tka(c,P,W,119169);Vka(c,R,W,119190);Tka(c,S,W,119221);Tka(c,T,W,119243);Wka(c,U,W,119265);Wka(c,V,W,119287);if((k[W>>2]|0)>0){ba=0;while(1){ea=Qqa(40)|0;B=0;Na(1,ea|0,k[(k[P>>2]|0)+(ba<<2)>>2]|0,k[(k[R>>2]|0)+(ba<<2)>>2]|0,k[(k[S>>2]|0)+(ba<<2)>>2]|0,k[(k[T>>2]|0)+(ba<<2)>>2]|0,+(+p[(k[U>>2]|0)+(ba<<3)>>3]),+(+p[(k[V>>2]|0)+(ba<<3)>>3]));qa=B;B=0;if(qa&1){Fa=ea;ha=120;break b}ih($,ea)|0;ba=ba+1|0;ea=k[W>>2]|0;if((ba|0)>=(ea|0)){Ga=ea;break}}ba=k[P>>2]|0;if((Ga|0)>0){fa=ba;ea=0;while(1){qa=k[fa+(ea<<2)>>2]|0;if(qa)Tqa(qa);qa=k[(k[S>>2]|0)+(ea<<2)>>2]|0;if(qa)Tqa(qa);qa=k[(k[T>>2]|0)+(ea<<2)>>2]|0;if(qa)Tqa(qa);ea=ea+1|0;qa=k[P>>2]|0;if((ea|0)>=(k[W>>2]|0)){Ha=qa;break}else fa=qa}}else Ha=ba}else Ha=k[P>>2]|0;if(Ha)Tqa(Ha);k[P>>2]=0;fa=k[S>>2]|0;if(fa)Tqa(fa);k[S>>2]=0;fa=k[T>>2]|0;if(fa)Tqa(fa);k[T>>2]=0;fa=k[R>>2]|0;if(fa)Tqa(fa);k[R>>2]=0;fa=k[U>>2]|0;if(fa)Tqa(fa);k[U>>2]=0;fa=k[V>>2]|0;if(fa)Tqa(fa);break}default:{Ja=aa;ha=141;break b}}aa=aa+1|0;if((aa|0)>=(k[g>>2]|0))break a}if((ha|0)==11){aa=Rb()|0;fa=Q;Sqa(ga);ca=fa;da=aa;Qb(da|0)}else if((ha|0)==32){aa=Rb()|0;fa=Q;Sqa(la);ca=fa;da=aa;Qb(da|0)}else if((ha|0)==77){B=0;ib(283,142353,118972,137,142345);B=0;aa=Rb()|0;La=ta;Ma=aa;Oa=Q}else if((ha|0)==79){aa=Rb()|0;La=sa;Ma=aa;Oa=Q}else if((ha|0)==98){aa=Rb()|0;fa=Q;Sqa(Ca);ca=fa;da=aa;Qb(da|0)}else if((ha|0)==120){aa=Rb()|0;fa=Q;Sqa(Fa);ca=fa;da=aa;Qb(da|0)}else if((ha|0)==141){aa=X+56|0;fa=X+4|0;k[X>>2]=27524;k[aa>>2]=27544;B=0;wa(508,X+56|0,fa|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Pa=Q;Qa=ea;vva(aa);Qb(Qa|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[aa>>2]=27488;B=0;va(448,fa|0);ea=B;B=0;do if(ea&1){qa=Rb()|0;Ra=Q;Sa=qa}else{k[fa>>2]=27560;qa=X+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[X+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,fa|0,e|0);pa=B;B=0;if(pa&1){pa=Rb()|0;oa=Q;Yua(e);Yua(qa);Ava(fa);Ra=oa;Sa=pa;break}Yua(e);B=0;pa=Ia(40,X|0,119308,23)|0;oa=B;B=0;c:do if(((!(oa&1)?(B=0,ja=Xa(242,pa|0,k[(k[f>>2]|0)+(Ja<<2)>>2]|0)|0,ra=B,B=0,!(ra&1)):0)?(B=0,ra=Ia(40,ja|0,119332,18)|0,ja=B,B=0,!(ja&1)):0)?(B=0,Xa(239,ra|0,0)|0,ra=B,B=0,!(ra&1)):0){ra=Ab(20)|0;B=0;eb(502,Y|0,119351,98);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,Z|0,119450,23);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Ua=Q;Yua(Y);Va=Ua;Wa=Ta;break}B=0;wa(510,_|0,fa|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Ya=Q;Za=Ta;_a=1}else{B=0;ua(163,ra|0,Y|0,Z|0,234,_|0);Ta=B;B=0;if(Ta&1)$a=1;else{B=0;eb(503,ra|0,1240,229);B=0;$a=0}Ta=Rb()|0;Ua=Q;Yua(_);Ya=Ua;Za=Ta;_a=$a}Yua(Z);Yua(Y);if(_a){Va=Ya;Wa=Za}else{ab=Ya;bb=Za;break c}}else{Ta=Rb()|0;Va=Q;Wa=Ta}while(0);zb(ra|0);ab=Va;bb=Wa}else ha=158;while(0);if((ha|0)==158){pa=Rb()|0;ab=Q;bb=pa}k[X>>2]=27468;k[aa>>2]=27488;k[fa>>2]=27560;Yua(qa);Ava(fa);vva(aa);ca=ab;da=bb;Qb(da|0)}while(0);Pa=Ra;Qa=Sa;vva(aa);Qb(Qa|0)}Sqa(La);ca=Oa;da=Ma;Qb(da|0)}while(0);Ma=Qqa(12)|0;B=0;eb(521,Ma|0,769,$|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;La=Q;Sqa(Ma);ca=La;da=Oa;Qb(da|0)}YN(b,Ma);jh($);Sqa($);$=k[f>>2]|0;if(!$){r=d;return}Tqa($);r=d;return}function j1(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;k[a>>2]=37544;k[a+4>>2]=37596;k[a+8>>2]=c;c=Rqa((Lta(b)|0)+1|0)|0;k[a+12>>2]=c;f=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(f)TEa(c|0,b|0,f|0)|0;f=a+16|0;k[f>>2]=d;if(!d)return;b=d>>>0>536870911?-1:d<<3;c=Rqa(b)|0;k[a+20>>2]=c;g=Rqa(b)|0;k[a+28>>2]=g;h=Rqa(b)|0;k[a+24>>2]=h;i=Rqa(b)|0;k[a+32>>2]=i;b=Rqa(d>>>0>1073741823?-1:d<<2)|0;k[a+36>>2]=b;if((d|0)<=0)return;d=k[f>>2]|0;f=0;do{a=f*5|0;p[c+(f<<3)>>3]=+p[e+(a<<3)>>3];p[h+(f<<3)>>3]=+p[e+(a+1<<3)>>3];p[g+(f<<3)>>3]=+p[e+(a+2<<3)>>3];p[i+(f<<3)>>3]=+p[e+(a+3<<3)>>3];k[b+(f<<2)>>2]=~~+p[e+(a+4<<3)>>3];f=f+1|0}while((f|0)<(d|0));return}function k1(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;k[a>>2]=37464;k[a+4>>2]=37516;k[a+8>>2]=c;c=Rqa((Lta(b)|0)+1|0)|0;k[a+12>>2]=c;j=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(j)TEa(c|0,b|0,j|0)|0;j=Rqa((Lta(f)|0)+1|0)|0;k[a+28>>2]=j;b=(Lta(f)|0)+1|0;if(!f)yb(142353,118972,137,142345);if(b)TEa(j|0,f|0,b|0)|0;k[a+16>>2]=d;k[a+20>>2]=e;k[a+24>>2]=h;i[a+32>>0]=g&1;p[a+40>>3]=0.0;k[a+48>>2]=0;return}function l1(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;k[a>>2]=37384;k[a+4>>2]=37436;k[a+8>>2]=c;c=Rqa((Lta(b)|0)+1|0)|0;k[a+12>>2]=c;f=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(f)TEa(c|0,b|0,f|0)|0;f=Rqa(e>>>0>536870911?-1:e<<3)|0;k[a+16>>2]=f;if(!d)yb(142353,118972,137,142345);if(!e){g=a+20|0;k[g>>2]=e;return}TEa(f|0,d|0,e<<3|0)|0;g=a+20|0;k[g>>2]=e;return}function m1(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;var h=0,i=0,j=0;k[a>>2]=37304;k[a+4>>2]=37356;k[a+8>>2]=c;c=Rqa((Lta(b)|0)+1|0)|0;k[a+12>>2]=c;h=(Lta(b)|0)+1|0;if(!b)yb(142353,118972,137,142345);if(h)TEa(c|0,b|0,h|0)|0;h=Rqa((Lta(d)|0)+1|0)|0;k[a+16>>2]=h;b=(Lta(d)|0)+1|0;if(!d)yb(142353,118972,137,142345);if(b)TEa(h|0,d|0,b|0)|0;b=Rqa((Lta(e)|0)+1|0)|0;k[a+20>>2]=b;d=(Lta(e)|0)+1|0;if(!e)yb(142353,118972,137,142345);if(!d){i=a+24|0;p[i>>3]=f;j=a+32|0;p[j>>3]=g;return}TEa(b|0,e|0,d|0)|0;i=a+24|0;p[i>>3]=f;j=a+32|0;p[j>>3]=g;return}function n1(a){a=a|0;var b=0,c=0;k[a>>2]=37304;k[a+4>>2]=37356;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+16|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+20|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function o1(a){a=a|0;var b=0,c=0;k[a>>2]=37304;k[a+4>>2]=37356;b=a+12|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+16|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=k[a+20>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}
+-function sd(a){a=a|0;var b=0;b=r;r=r+a|0;r=r+15&-16;return b|0}function td(){return r|0}function ud(a){a=a|0;r=a}function vd(a,b){a=a|0;b=b|0;r=a;s=b}function wd(a,b){a=a|0;b=b|0;if(!B){B=a;C=b}}function xd(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0]}function yd(a){a=a|0;i[t>>0]=i[a>>0];i[t+1>>0]=i[a+1>>0];i[t+2>>0]=i[a+2>>0];i[t+3>>0]=i[a+3>>0];i[t+4>>0]=i[a+4>>0];i[t+5>>0]=i[a+5>>0];i[t+6>>0]=i[a+6>>0];i[t+7>>0]=i[a+7>>0]}function zd(a){a=a|0;Q=a}function Ad(){return Q|0}function Bd(a){a=a|0;var b=0,c=0;k[a>>2]=27468;b=a+56|0;k[b>>2]=27488;c=a+4|0;k[c>>2]=27560;Yua(a+36|0);Ava(c);vva(b);return}function Cd(a,b,c,d,e,f,g,h,i,j,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=+m;var n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;n=r;r=r+80|0;o=n+24|0;q=n+16|0;s=n+8|0;t=n;u=n+64|0;v=n+60|0;w=n+56|0;x=n+52|0;y=n+48|0;z=n+44|0;A=n+40|0;C=n+36|0;D=n+32|0;E=n+28|0;k[u>>2]=0;k[v>>2]=0;k[w>>2]=0;k[x>>2]=0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;B=0;fb(3);F=B;B=0;if(((((((((!(F&1)?(B=0,ib(279,u|0,i|0,j|0,l|0),l=B,B=0,!(l&1)):0)?(B=0,ib(279,v|0,0,0,0),l=B,B=0,!(l&1)):0)?(B=0,ta(53,t|0,+m),l=B,B=0,!(l&1)):0)?(B=0,za(1,w|0,x|0,y|0,z|0,A|0,C|0,D|0,E|0,k[u>>2]|0,k[v>>2]|0,+(+p[t>>3])),t=B,B=0,!(t&1)):0)?(B=0,ua(161,a|0,d|0,k[w>>2]|0,k[C>>2]|0,3),C=B,B=0,!(C&1)):0)?(B=0,ib(280,b|0,e|0,k[x>>2]|0,k[D>>2]|0),b=B,B=0,!(b&1)):0)?(B=0,ib(280,c|0,e|0,k[y>>2]|0,k[D>>2]|0),D=B,B=0,!(D&1)):0)?(B=0,ua(161,f|0,h|0,k[z>>2]|0,k[E>>2]|0,3),f=B,B=0,!(f&1)):0)?(B=0,ib(281,g|0,h|0,k[A>>2]|0,k[E>>2]|0),E=B,B=0,!(E&1)):0){E=k[u>>2]|0;if(E){Ym(E);Sqa(E)}E=k[v>>2]|0;if(E){Ym(E);Sqa(E)}E=k[w>>2]|0;if(E)Tqa(E);k[w>>2]=0;w=k[x>>2]|0;if(w)Tqa(w);k[x>>2]=0;x=k[y>>2]|0;if(x)Tqa(x);k[y>>2]=0;y=k[z>>2]|0;if(y)Tqa(y);k[z>>2]=0;z=k[A>>2]|0;if(z)Tqa(z);k[A>>2]=0;r=n;return 0}A=Rb(1240,25216,0)|0;z=Q;if((z|0)!=(Kb(1240)|0)){y=(z|0)==(Kb(25216)|0);z=Nb(A|0)|0;if(y){mta(Hc[k[(k[z>>2]|0)+8>>2]&511](z)|0,q)|0;Pb();r=n;return 0}else{mta(55001,o)|0;Pb();r=n;return 0}}o=Nb(A|0)|0;B=0;A=ya(420,o|0)|0;o=B;B=0;if(!(o&1)){mta(A,s)|0;Pb();r=n;return 0}n=Rb()|0;B=0;fb(4);s=B;B=0;if(s&1){s=Rb(0)|0;Dd(s)}else Qb(n|0);return 0}function Dd(a){a=a|0;Nb(a|0)|0;Zqa()}function Ed(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=27468;a=b+56|0;k[a>>2]=27488;c=b+4|0;k[c>>2]=27560;Yua(b+36|0);Ava(c);vva(a);return}function Fd(a){a=a|0;var b=0,c=0;k[a>>2]=27468;b=a+56|0;k[b>>2]=27488;c=a+4|0;k[c>>2]=27560;Yua(a+36|0);Ava(c);vva(b);Sqa(a);return}function Gd(a){a=a|0;var b=0,c=0;b=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[b>>2]=27468;a=b+56|0;k[a>>2]=27488;c=b+4|0;k[c>>2]=27560;Yua(b+36|0);Ava(c);vva(a);Sqa(b);return}function Hd(a){a=a|0;k[a>>2]=27560;Yua(a+32|0);Ava(a);return}function Id(a){a=a|0;k[a>>2]=27560;Yua(a+32|0);Ava(a);Sqa(a);return}function Jd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=b+44|0;h=k[g>>2]|0;j=b+24|0;l=k[j>>2]|0;m=l;if(h>>>0<l>>>0){k[g>>2]=l;n=m}else n=h;h=f&24;if(!h){g=a;k[g>>2]=0;k[g+4>>2]=0;g=a+8|0;k[g>>2]=-1;k[g+4>>2]=-1;return}if((e|0)==1&(h|0)==24){h=a;k[h>>2]=0;k[h+4>>2]=0;h=a+8|0;k[h>>2]=-1;k[h+4>>2]=-1;return}a:do switch(e|0){case 0:{o=0;p=0;break}case 1:{if(!(f&8)){h=m-(k[b+20>>2]|0)|0;o=h;p=((h|0)<0)<<31>>31;break a}else{h=(k[b+12>>2]|0)-(k[b+8>>2]|0)|0;o=h;p=((h|0)<0)<<31>>31;break a}break}case 2:{h=b+32|0;if(!(i[h>>0]&1))q=h+1|0;else q=k[b+40>>2]|0;h=n-q|0;o=h;p=((h|0)<0)<<31>>31;break}default:{h=a;k[h>>2]=0;k[h+4>>2]=0;h=a+8|0;k[h>>2]=-1;k[h+4>>2]=-1;return}}while(0);q=QEa(o|0,p|0,c|0,d|0)|0;d=Q;if((d|0)>=0){c=b+32|0;if(!(i[c>>0]&1))r=c+1|0;else r=k[b+40>>2]|0;c=n-r|0;r=((c|0)<0)<<31>>31;if(!((r|0)<(d|0)|(r|0)==(d|0)&c>>>0<q>>>0)){c=f&8;if(!((q|0)==0&(d|0)==0)){if((c|0)!=0?(k[b+12>>2]|0)==0:0){r=a;k[r>>2]=0;k[r+4>>2]=0;r=a+8|0;k[r>>2]=-1;k[r+4>>2]=-1;return}if((f&16|0)!=0&(l|0)==0){l=a;k[l>>2]=0;k[l+4>>2]=0;l=a+8|0;k[l>>2]=-1;k[l+4>>2]=-1;return}}if(c){k[b+12>>2]=(k[b+8>>2]|0)+q;k[b+16>>2]=n}if(f&16)k[j>>2]=(k[b+20>>2]|0)+q;b=a;k[b>>2]=0;k[b+4>>2]=0;b=a+8|0;k[b>>2]=q;k[b+4>>2]=d;return}}d=a;k[d>>2]=0;k[d+4>>2]=0;d=a+8|0;k[d>>2]=-1;k[d+4>>2]=-1;return}function Kd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=c+8|0;Uc[k[(k[b>>2]|0)+16>>2]&63](a,b,k[e>>2]|0,k[e+4>>2]|0,0,d);return}function Ld(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=a+44|0;c=k[b>>2]|0;d=k[a+24>>2]|0;if(c>>>0<d>>>0){k[b>>2]=d;e=d}else e=c;if(!(k[a+48>>2]&8)){f=-1;return f|0}c=a+16|0;d=k[c>>2]|0;b=k[a+12>>2]|0;if(d>>>0<e>>>0){k[c>>2]=e;g=e}else g=d;if(b>>>0>=g>>>0){f=-1;return f|0}f=l[b>>0]|0;return f|0}function Md(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=a+44|0;d=k[c>>2]|0;e=k[a+24>>2]|0;if(d>>>0<e>>>0){k[c>>2]=e;f=e}else f=d;d=f;f=a+8|0;e=k[f>>2]|0;c=a+12|0;g=k[c>>2]|0;h=e;if(e>>>0>=g>>>0){j=-1;return j|0}if((b|0)==-1){k[c>>2]=g+-1;k[a+16>>2]=d;j=0;return j|0}if(!(k[a+48>>2]&16)){e=b&255;l=g+-1|0;if(e<<24>>24==(i[l>>0]|0)){m=e;n=l}else{j=-1;return j|0}}else{m=b&255;n=g+-1|0}k[f>>2]=h;k[c>>2]=n;k[a+16>>2]=d;i[n>>0]=m;j=b;return j|0}function Nd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+16|0;d=c;if((b|0)==-1){e=0;r=c;return e|0}f=a+12|0;g=a+8|0;h=(k[f>>2]|0)-(k[g>>2]|0)|0;j=a+24|0;l=k[j>>2]|0;m=a+28|0;n=k[m>>2]|0;do if((l|0)==(n|0)){o=a+48|0;if(!(k[o>>2]&16)){e=-1;r=c;return e|0}p=a+20|0;q=k[p>>2]|0;s=l-q|0;t=a+44|0;u=(k[t>>2]|0)-q|0;q=a+32|0;B=0;wa(503,q|0,0);v=B;B=0;if(!(v&1)){if(!(i[q>>0]&1))w=10;else w=(k[q>>2]&-2)+-1|0;B=0;eb(501,q|0,w|0,0);v=B;B=0;if(!(v&1)){v=i[q>>0]|0;if(!(v&1)){x=q+1|0;y=(v&255)>>>1}else{x=k[a+40>>2]|0;y=k[a+36>>2]|0}v=x+y|0;k[p>>2]=x;k[m>>2]=v;p=x+s|0;k[j>>2]=p;s=x+u|0;k[t>>2]=s;z=t;A=o;C=t;D=p;E=s;F=v;break}}v=Rb(0)|0;Nb(v|0)|0;Pb();e=-1;r=c;return e|0}else{v=a+44|0;z=v;A=a+48|0;C=v;D=l;E=k[v>>2]|0;F=n}while(0);n=D+1|0;k[d>>2]=n;l=k[(n>>>0<E>>>0?C:d)>>2]|0;k[z>>2]=l;if(k[A>>2]&8){A=a+32|0;if(!(i[A>>0]&1))G=A+1|0;else G=k[a+40>>2]|0;k[g>>2]=G;k[f>>2]=G+h;k[a+16>>2]=l}if((D|0)==(F|0)){e=ed[k[(k[a>>2]|0)+52>>2]&511](a,b&255)|0;r=c;return e|0}else{k[j>>2]=n;i[D>>0]=b;e=b&255;r=c;return e|0}return 0}function Od(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+32|0;Zua(c,b)|0;b=a+44|0;k[b>>2]=0;d=a+48|0;e=k[d>>2]|0;if(e&8){f=i[c>>0]|0;if(!(f&1)){g=((f&255)>>>1)+(c+1)|0;k[b>>2]=g;h=g;j=c+1|0;l=c+1|0}else{g=k[a+40>>2]|0;f=g+(k[a+36>>2]|0)|0;k[b>>2]=f;h=f;j=g;l=g}k[a+8>>2]=j;k[a+12>>2]=l;k[a+16>>2]=h}if(!(e&16))return;e=i[c>>0]|0;if(!(e&1)){h=(e&255)>>>1;k[b>>2]=c+1+h;m=10;n=h}else{h=k[a+36>>2]|0;k[b>>2]=(k[a+40>>2]|0)+h;m=(k[c>>2]&-2)+-1|0;n=h}ava(c,m,0);m=i[c>>0]|0;if(!(m&1)){o=c+1|0;p=(m&255)>>>1;q=c+1|0}else{c=k[a+40>>2]|0;o=c;p=k[a+36>>2]|0;q=c}c=a+24|0;k[c>>2]=q;k[a+20>>2]=q;k[a+28>>2]=o+p;if(!(k[d>>2]&3))return;k[c>>2]=q+n;return}function Pd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;d=r;r=r+16|0;e=d+12|0;f=d;g=d+8|0;B=0;wa(504,f|0,a|0);h=B;B=0;a:do if(h&1){j=Rb(0)|0;l=j;m=a;n=a}else{do if(i[f>>0]|0){j=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;k[g>>2]=k[j+24>>2];o=k[j+4>>2]|0;p=b+c|0;q=j+76|0;s=k[q>>2]|0;do if((s|0)==-1){B=0;t=ya(421,j|0)|0;u=B;B=0;if(u&1)v=13;else{k[e>>2]=t;B=0;t=Xa(238,e|0,49320)|0;u=B;B=0;if(!(u&1)?(B=0,u=Xa(k[(k[t>>2]|0)+28>>2]|0,t|0,32)|0,t=B,B=0,!(t&1)):0){ZAa(e);t=u<<24>>24;k[q>>2]=t;w=t;v=9;break}t=Rb(0)|0;ZAa(e);x=t}}else{w=s;v=9}while(0);if((v|0)==9){B=0;k[e>>2]=k[g>>2];s=xa(39,e|0,b|0,((o&176|0)==32?p:b)|0,p|0,j|0,w&255|0)|0;q=B;B=0;if(!(q&1)){if(s)break;s=a+(k[(k[a>>2]|0)+-12>>2]|0)|0;B=0;wa(505,s|0,k[s+16>>2]|5|0);s=B;B=0;if(!(s&1))break;else v=13}else v=13}if((v|0)==13){s=Rb(0)|0;x=s}twa(f);l=x;m=a;n=a;break a}while(0);twa(f);r=d;return a|0}while(0);Nb(l|0)|0;B=0;va(447,m+(k[(k[n>>2]|0)+-12>>2]|0)|0);n=B;B=0;if(!(n&1)){Pb();r=d;return a|0}a=Rb()|0;B=0;fb(4);d=B;B=0;if(d&1){d=Rb(0)|0;Dd(d)}else Qb(a|0);return 0}function Qd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0;g=r;r=r+16|0;h=g;j=k[a>>2]|0;if(!j){l=0;r=g;return l|0}m=d;d=b;n=m-d|0;o=e+12|0;e=k[o>>2]|0;p=(e|0)>(n|0)?e-n|0:0;n=c;e=n-d|0;if((e|0)>0?(Rc[k[(k[j>>2]|0)+48>>2]&63](j,b,e)|0)!=(e|0):0){k[a>>2]=0;l=0;r=g;return l|0}do if((p|0)>0){Xua(h,p,f);B=0;e=Ia(k[(k[j>>2]|0)+48>>2]|0,j|0,((i[h>>0]&1)==0?h+1|0:k[h+8>>2]|0)|0,p|0)|0;b=B;B=0;if(b&1){b=Rb()|0;Yua(h);Qb(b|0)}if((e|0)==(p|0)){Yua(h);break}k[a>>2]=0;Yua(h);l=0;r=g;return l|0}while(0);h=m-n|0;if((h|0)>0?(Rc[k[(k[j>>2]|0)+48>>2]&63](j,c,h)|0)!=(h|0):0){k[a>>2]=0;l=0;r=g;return l|0}k[o>>2]=0;l=j;r=g;return l|0}function Rd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0;c=k[b+48>>2]|0;if(c&16){d=b+44|0;e=k[d>>2]|0;f=k[b+24>>2]|0;if(e>>>0<f>>>0){k[d>>2]=f;g=f}else g=e;e=k[b+20>>2]|0;f=g-e|0;if(f>>>0>4294967279)Nqa(a);if(f>>>0<11){i[a>>0]=f<<1;h=a+1|0}else{d=f+16&-16;j=Qqa(d)|0;k[a+8>>2]=j;k[a>>2]=d|1;k[a+4>>2]=f;h=j}if((e|0)==(g|0))l=h;else{j=e;e=h;while(1){i[e>>0]=i[j>>0]|0;j=j+1|0;if((j|0)==(g|0))break;else e=e+1|0}l=h+f|0}i[l>>0]=0;return}if(!(c&8)){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;return}c=k[b+8>>2]|0;l=k[b+16>>2]|0;b=l-c|0;if(b>>>0>4294967279)Nqa(a);if(b>>>0<11){i[a>>0]=b<<1;m=a+1|0}else{f=b+16&-16;h=Qqa(f)|0;k[a+8>>2]=h;k[a>>2]=f|1;k[a+4>>2]=b;m=h}if((c|0)==(l|0))n=m;else{h=c;c=m;while(1){i[c>>0]=i[h>>0]|0;h=h+1|0;if((h|0)==(l|0))break;else c=c+1|0}n=m+b|0}i[n>>0]=0;return}function Sd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;g=r;r=r+48|0;h=g+16|0;i=g+8|0;j=g;l=g+36|0;m=g+32|0;n=g+28|0;o=g+24|0;p=g+20|0;k[l>>2]=0;k[o>>2]=0;B=0;fb(3);q=B;B=0;if((((!(q&1)?(B=0,La(25,l|0,m|0,0,d|0,e|0,3),e=B,B=0,!(e&1)):0)?(B=0,wa(506,n|0,f|0),f=B,B=0,!(f&1)):0)?(B=0,ua(162,o|0,p|0,k[l>>2]|0,k[m>>2]|0,k[n>>2]|0),m=B,B=0,!(m&1)):0)?(B=0,La(26,a|0,b|0,c|0,k[o>>2]|0,k[n>>2]|0,k[p>>2]|0),p=B,B=0,!(p&1)):0){p=k[l>>2]|0;if(p)Tqa(p);k[l>>2]=0;l=k[o>>2]|0;if(l)Tqa(l);k[o>>2]=0;r=g;return 0}o=Rb(1240,25216,0)|0;l=Q;if((l|0)!=(Kb(1240)|0)){p=(l|0)==(Kb(25216)|0);l=Nb(o|0)|0;if(p){mta(Hc[k[(k[l>>2]|0)+8>>2]&511](l)|0,i)|0;Pb();r=g;return 0}else{mta(55001,h)|0;Pb();r=g;return 0}}h=Nb(o|0)|0;B=0;o=ya(420,h|0)|0;h=B;B=0;if(!(h&1)){mta(o,j)|0;Pb();r=g;return 0}g=Rb()|0;B=0;fb(4);j=B;B=0;if(j&1){j=Rb(0)|0;Dd(j)}else Qb(g|0);return 0}function Td(a,b,c,d,e,f,g,h,i,j,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=l|0;m=+m;var n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;n=r;r=r+256|0;o=n+16|0;p=n+8|0;q=n;s=n+232|0;t=n+228|0;u=n+224|0;v=n+220|0;w=n+216|0;x=n+212|0;y=n+208|0;z=n+204|0;A=n+200|0;C=n+196|0;D=n+192|0;E=n+56|0;F=n+44|0;G=n+32|0;H=n+20|0;k[w>>2]=0;k[x>>2]=0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;k[C>>2]=0;k[D>>2]=0;B=0;fb(3);I=B;B=0;a:do if(((((((!(I&1)?(B=0,La(27,w|0,u|0,0,c|0,i|0,3),J=B,B=0,!(J&1)):0)?(B=0,La(27,x|0,v|0,0,d|0,j|0,1),J=B,B=0,!(J&1)):0)?(B=0,La(27,y|0,0,0,e|0,j|0,1),J=B,B=0,!(J&1)):0)?(B=0,wa(506,t|0,~~m|0),J=B,B=0,!(J&1)):0)?(B=0,ib(279,A|0,f|0,g|0,l|0),J=B,B=0,!(J&1)):0)?(B=0,wa(507,z|0,h|0),J=B,B=0,!(J&1)):0)?(B=0,Ra(1,C|0,D|0,k[w>>2]|0,k[x>>2]|0,k[y>>2]|0,k[A>>2]|0,k[z>>2]|0,k[u>>2]|0,k[v>>2]|0,k[t>>2]|0)|0,J=B,B=0,!(J&1)):0){J=k[z>>2]|0;do if(!(Ita(J,53867)|0)){B=0;ib(280,a|0,0,k[C>>2]|0,k[v>>2]|0);K=B;B=0;if(K&1){L=12;break a}B=0;K=B;B=0;if(K&1){L=12;break a}}else{if(!(Ita(J,64911)|0)){B=0;ib(280,a|0,0,k[D>>2]|0,k[u>>2]|0);K=B;B=0;if(K&1){L=12;break a}B=0;K=B;B=0;if(K&1){L=12;break a}else break}if(!(Ita(J,64919)|0)){B=0;ib(280,a|0,0,k[C>>2]|0,k[v>>2]|0);K=B;B=0;if(K&1){L=12;break a}B=0;ib(280,b|0,0,k[D>>2]|0,k[u>>2]|0);K=B;B=0;if(K&1){L=12;break a}else break}K=E+56|0;M=E+4|0;k[E>>2]=27524;k[K>>2]=27544;B=0;wa(508,E+56|0,M|0);N=B;B=0;if(N&1){N=Rb(1240,25216,0)|0;O=Q;P=N}else{k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[K>>2]=27488;B=0;va(448,M|0);N=B;B=0;do if(N&1){R=Rb(1240,25216,0)|0;S=Q;T=R}else{k[M>>2]=27560;R=E+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[E+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,M|0,s|0);U=B;B=0;if(U&1){U=Rb(1240,25216,0)|0;V=Q;Yua(s);Yua(R);Ava(M);S=V;T=U;break}Yua(s);B=0;U=Ia(40,E|0,53872,24)|0;V=B;B=0;b:do if(V&1)L=35;else{B=0;Xa(239,U|0,0)|0;W=B;B=0;if(W&1){L=35;break}W=Ab(20)|0;B=0;eb(502,F|0,53897,97);X=B;B=0;do if(!(X&1)){B=0;eb(502,G|0,53995,19);Y=B;B=0;if(Y&1){Y=Rb(1240,25216,0)|0;Z=Q;Yua(F);_=Y;$=Z;break}B=0;wa(510,H|0,M|0);Z=B;B=0;if(Z&1){Z=Rb(1240,25216,0)|0;aa=Z;ba=Q;ca=1}else{B=0;ua(163,W|0,F|0,G|0,84,H|0);Z=B;B=0;if(Z&1)da=1;else{B=0;eb(503,W|0,1240,229);B=0;da=0}Z=Rb(1240,25216,0)|0;Y=Q;Yua(H);aa=Z;ba=Y;ca=da}Yua(G);Yua(F);if(ca){_=aa;$=ba}else{ea=aa;fa=ba;break b}}else{Y=Rb(1240,25216,0)|0;_=Y;$=Q}while(0);zb(W|0);ea=_;fa=$}while(0);if((L|0)==35){U=Rb(1240,25216,0)|0;ea=U;fa=Q}k[E>>2]=27468;k[K>>2]=27488;k[M>>2]=27560;Yua(R);Ava(M);vva(K);ga=ea;ha=fa;break a}while(0);O=S;P=T}vva(K);ia=O;ja=P;L=13;break a}while(0);J=k[w>>2]|0;if(J)Tqa(J);k[w>>2]=0;J=k[x>>2]|0;if(J)Tqa(J);k[x>>2]=0;J=k[y>>2]|0;if(J)Tqa(J);k[y>>2]=0;J=k[z>>2]|0;if(J)Tqa(J);k[z>>2]=0;J=k[A>>2]|0;if(J){Ym(J);Sqa(J)}J=k[C>>2]|0;if(J)Tqa(J);k[C>>2]=0;J=k[D>>2]|0;if(J)Tqa(J);k[D>>2]=0;r=n;return 0}else L=12;while(0);if((L|0)==12){D=Rb(1240,25216,0)|0;ia=Q;ja=D;L=13}if((L|0)==13){ga=ja;ha=ia}if((ha|0)!=(Kb(1240)|0)){ia=(ha|0)==(Kb(25216)|0);ha=Nb(ga|0)|0;if(ia){mta(Hc[k[(k[ha>>2]|0)+8>>2]&511](ha)|0,p)|0;Pb();r=n;return 0}else{mta(55001,o)|0;Pb();r=n;return 0}}o=Nb(ga|0)|0;B=0;ga=ya(420,o|0)|0;o=B;B=0;if(!(o&1)){mta(ga,q)|0;Pb();r=n;return 0}n=Rb()|0;B=0;fb(4);q=B;B=0;if(q&1){q=Rb(0)|0;Dd(q)}else Qb(n|0);return 0}function Ud(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=r;r=r+48|0;h=g+16|0;i=g+8|0;j=g;l=g+40|0;m=g+36|0;n=g+32|0;o=g+28|0;p=g+24|0;q=g+20|0;k[l>>2]=0;k[m>>2]=0;k[q>>2]=0;B=0;fb(3);s=B;B=0;if((((!(s&1)?(B=0,La(25,l|0,n|0,0,b|0,d|0,3),d=B,B=0,!(d&1)):0)?(B=0,La(25,m|0,o|0,p|0,c|0,e|0,f|0),f=B,B=0,!(f&1)):0)?(B=0,La(28,q|0,k[l>>2]|0,k[n>>2]|0,k[m>>2]|0,k[o>>2]|0,k[p>>2]|0),p=B,B=0,!(p&1)):0)?(B=0,La(26,a|0,0,0,k[q>>2]|0,k[n>>2]|0,3),n=B,B=0,!(n&1)):0){n=k[l>>2]|0;if(n)Tqa(n);k[l>>2]=0;l=k[m>>2]|0;if(l)Tqa(l);k[m>>2]=0;m=k[q>>2]|0;if(m)Tqa(m);k[q>>2]=0;r=g;return 0}q=Rb(1240,25216,0)|0;m=Q;if((m|0)!=(Kb(1240)|0)){l=(m|0)==(Kb(25216)|0);m=Nb(q|0)|0;if(l){mta(Hc[k[(k[m>>2]|0)+8>>2]&511](m)|0,i)|0;Pb();r=g;return 0}else{mta(55001,h)|0;Pb();r=g;return 0}}h=Nb(q|0)|0;B=0;q=ya(420,h|0)|0;h=B;B=0;if(!(h&1)){mta(q,j)|0;Pb();r=g;return 0}g=Rb()|0;B=0;fb(4);j=B;B=0;if(j&1){j=Rb(0)|0;Dd(j)}else Qb(g|0);return 0}function Vd(a,b,c,d,e,f,g,h,i,j,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;l=+l;var m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,bb=0,cb=0,db=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Lb=0,Mb=0,Ob=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0;m=r;r=r+1200|0;n=m+16|0;o=m+8|0;p=m;q=m+1188|0;s=m+1176|0;t=m+1164|0;u=m+1152|0;v=m+1140|0;w=m+1128|0;x=m+1124|0;y=m+1120|0;z=m+1116|0;A=m+1112|0;C=m+1108|0;D=m+1104|0;E=m+1100|0;F=m+1096|0;G=m+1092|0;H=m+1088|0;I=m+1084|0;J=m+1080|0;K=m+1076|0;L=m+1072|0;M=m+936|0;N=m+920|0;O=m+768|0;P=m+480|0;R=m+784|0;S=m+328|0;T=m+176|0;U=m+164|0;V=m+632|0;W=m+152|0;X=m+140|0;Y=m+128|0;Z=m+496|0;_=m+116|0;$=m+104|0;aa=m+92|0;ba=m+344|0;ca=m+80|0;da=m+68|0;ea=m+56|0;fa=m+192|0;ga=m+44|0;ha=m+32|0;ia=m+20|0;k[x>>2]=0;k[y>>2]=0;k[z>>2]=0;k[A>>2]=0;k[G>>2]=0;k[H>>2]=0;k[J>>2]=0;k[K>>2]=0;B=0;fb(3);ja=B;B=0;a:do if(!(ja&1)?(B=0,La(25,x|0,D|0,L|0,b|0,h|0,3),ka=B,B=0,!(ka&1)):0){if((k[L>>2]|0)!=3){ka=M+56|0;la=M+4|0;k[M>>2]=27524;k[ka>>2]=27544;B=0;wa(508,M+56|0,la|0);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;oa=Q;pa=na}else{k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);na=B;B=0;do if(na&1){qa=Rb(1240,25216,0)|0;ra=Q;sa=qa}else{k[la>>2]=27560;qa=M+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[M+52>>2]=16;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;B=0;wa(509,la|0,w|0);ta=B;B=0;if(ta&1){ta=Rb(1240,25216,0)|0;xa=Q;Yua(w);Yua(qa);Ava(la);ra=xa;sa=ta;break}Yua(w);B=0;ta=Ia(40,M|0,54015,27)|0;xa=B;B=0;b:do if(!(xa&1)?(B=0,Xa(239,ta|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,N|0,54043,115);Aa=B;B=0;do if(!(Aa&1)){B=0;eb(502,O|0,54159,28);Ca=B;B=0;if(Ca&1){Ca=Rb(1240,25216,0)|0;Da=Q;Yua(N);Ea=Da;Fa=Ca;break}B=0;wa(510,P|0,la|0);Ca=B;B=0;if(Ca&1){Ca=Rb(1240,25216,0)|0;Ga=Ca;Ha=Q;Ja=1}else{B=0;ua(163,za|0,N|0,O|0,63,P|0);Ca=B;B=0;if(Ca&1)Ka=1;else{B=0;eb(503,za|0,1240,229);B=0;Ka=0}Ca=Rb(1240,25216,0)|0;Da=Q;Yua(P);Ga=Ca;Ha=Da;Ja=Ka}Yua(O);Yua(N);if(Ja){Ea=Ha;Fa=Ga}else{Ma=Ga;Na=Ha;break b}}else{Da=Rb(1240,25216,0)|0;Ea=Q;Fa=Da}while(0);zb(za|0);Ma=Fa;Na=Ea}else Oa=21;while(0);if((Oa|0)==21){ta=Rb(1240,25216,0)|0;Ma=ta;Na=Q}k[M>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(qa);Ava(la);vva(ka);Pa=Ma;Qa=Na;break a}while(0);oa=ra;pa=sa}vva(ka);Ra=oa;Sa=pa;Oa=20;break}B=0;ib(282,y|0,C|0,c|0,i|0);la=B;B=0;if(!(la&1)){if((k[C>>2]|0)<3){la=R+56|0;na=R+4|0;k[R>>2]=27524;k[la>>2]=27544;B=0;wa(508,R+56|0,na|0);ta=B;B=0;if(ta&1){ta=Rb(1240,25216,0)|0;Ta=Q;Ua=ta}else{k[R+128>>2]=0;k[R+132>>2]=-1;k[R>>2]=27468;k[la>>2]=27488;B=0;va(448,na|0);ta=B;B=0;do if(ta&1){xa=Rb(1240,25216,0)|0;Va=Q;Wa=xa}else{k[na>>2]=27560;xa=R+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[R+52>>2]=16;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;B=0;wa(509,na|0,v|0);Aa=B;B=0;if(Aa&1){Aa=Rb(1240,25216,0)|0;Da=Q;Yua(v);Yua(xa);Ava(na);Va=Da;Wa=Aa;break}Yua(v);B=0;Aa=Ia(40,R|0,54188,37)|0;Da=B;B=0;c:do if(!(Da&1)?(B=0,Xa(239,Aa|0,0)|0,Ca=B,B=0,!(Ca&1)):0){Ca=Ab(20)|0;B=0;eb(502,S|0,54043,115);Ya=B;B=0;do if(!(Ya&1)){B=0;eb(502,T|0,54159,28);Za=B;B=0;if(Za&1){Za=Rb(1240,25216,0)|0;_a=Q;Yua(S);$a=Za;bb=_a;break}B=0;wa(510,U|0,na|0);_a=B;B=0;if(_a&1){_a=Rb(1240,25216,0)|0;cb=1;db=_a;gb=Q}else{B=0;ua(163,Ca|0,S|0,T|0,64,U|0);_a=B;B=0;if(_a&1)hb=1;else{B=0;eb(503,Ca|0,1240,229);B=0;hb=0}_a=Rb(1240,25216,0)|0;Za=Q;Yua(U);cb=hb;db=_a;gb=Za}Yua(T);Yua(S);if(cb){$a=db;bb=gb}else{jb=db;kb=gb;break c}}else{Za=Rb(1240,25216,0)|0;$a=Za;bb=Q}while(0);zb(Ca|0);jb=$a;kb=bb}else Oa=46;while(0);if((Oa|0)==46){Aa=Rb(1240,25216,0)|0;jb=Aa;kb=Q}k[R>>2]=27468;k[la>>2]=27488;k[na>>2]=27560;Yua(xa);Ava(na);vva(la);Pa=jb;Qa=kb;break a}while(0);Ta=Va;Ua=Wa}vva(la);Ra=Ta;Sa=Ua;Oa=20;break}B=0;ib(282,z|0,L|0,d|0,i|0);na=B;B=0;if(!(na&1)){if((k[L>>2]|0)!=(k[C>>2]|0)){na=V+56|0;ta=V+4|0;k[V>>2]=27524;k[na>>2]=27544;B=0;wa(508,V+56|0,ta|0);ka=B;B=0;if(ka&1){ka=Rb(1240,25216,0)|0;lb=Q;mb=ka}else{k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[na>>2]=27488;B=0;va(448,ta|0);ka=B;B=0;do if(ka&1){Aa=Rb(1240,25216,0)|0;nb=Q;ob=Aa}else{k[ta>>2]=27560;Aa=V+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[V+52>>2]=16;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;B=0;wa(509,ta|0,u|0);Da=B;B=0;if(Da&1){Da=Rb(1240,25216,0)|0;qa=Q;Yua(u);Yua(Aa);Ava(ta);nb=qa;ob=Da;break}Yua(u);B=0;Da=Ia(40,V|0,54226,43)|0;qa=B;B=0;d:do if(!(qa&1)?(B=0,Xa(239,Da|0,0)|0,Ya=B,B=0,!(Ya&1)):0){Ya=Ab(20)|0;B=0;eb(502,W|0,54043,115);za=B;B=0;do if(!(za&1)){B=0;eb(502,X|0,54159,28);Za=B;B=0;if(Za&1){Za=Rb(1240,25216,0)|0;_a=Q;Yua(W);pb=Za;qb=_a;break}B=0;wa(510,Y|0,ta|0);_a=B;B=0;if(_a&1){_a=Rb(1240,25216,0)|0;rb=1;sb=_a;tb=Q}else{B=0;ua(163,Ya|0,W|0,X|0,65,Y|0);_a=B;B=0;if(_a&1)ub=1;else{B=0;eb(503,Ya|0,1240,229);B=0;ub=0}_a=Rb(1240,25216,0)|0;Za=Q;Yua(Y);rb=ub;sb=_a;tb=Za}Yua(X);Yua(W);if(rb){pb=sb;qb=tb}else{vb=sb;wb=tb;break d}}else{Za=Rb(1240,25216,0)|0;pb=Za;qb=Q}while(0);zb(Ya|0);vb=pb;wb=qb}else Oa=71;while(0);if((Oa|0)==71){Da=Rb(1240,25216,0)|0;vb=Da;wb=Q}k[V>>2]=27468;k[na>>2]=27488;k[ta>>2]=27560;Yua(Aa);Ava(ta);vva(na);Pa=vb;Qa=wb;break a}while(0);lb=nb;mb=ob}vva(na);Ra=lb;Sa=mb;Oa=20;break}B=0;La(27,A|0,E|0,F|0,e|0,i|0,1);ta=B;B=0;if(!(ta&1)){if((ma(k[F>>2]|0,k[E>>2]|0)|0)<1){ta=Z+56|0;ka=Z+4|0;k[Z>>2]=27524;k[ta>>2]=27544;B=0;wa(508,Z+56|0,ka|0);la=B;B=0;if(la&1){la=Rb(1240,25216,0)|0;xb=Q;yb=la}else{k[Z+128>>2]=0;k[Z+132>>2]=-1;k[Z>>2]=27468;k[ta>>2]=27488;B=0;va(448,ka|0);la=B;B=0;do if(la&1){Da=Rb(1240,25216,0)|0;Bb=Q;Cb=Da}else{k[ka>>2]=27560;Da=Z+36|0;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[Z+52>>2]=16;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;B=0;wa(509,ka|0,t|0);qa=B;B=0;if(qa&1){qa=Rb(1240,25216,0)|0;xa=Q;Yua(t);Yua(Da);Ava(ka);Bb=xa;Cb=qa;break}Yua(t);B=0;qa=Ia(40,Z|0,54270,13)|0;xa=B;B=0;e:do if(!(xa&1)?(B=0,Xa(239,qa|0,0)|0,za=B,B=0,!(za&1)):0){za=Ab(20)|0;B=0;eb(502,_|0,54043,115);Ca=B;B=0;do if(!(Ca&1)){B=0;eb(502,$|0,54159,28);Za=B;B=0;if(Za&1){Za=Rb(1240,25216,0)|0;_a=Q;Yua(_);Db=Za;Eb=_a;break}B=0;wa(510,aa|0,ka|0);_a=B;B=0;if(_a&1){_a=Rb(1240,25216,0)|0;Fb=_a;Gb=Q;Hb=1}else{B=0;ua(163,za|0,_|0,$|0,66,aa|0);_a=B;B=0;if(_a&1)Ib=1;else{B=0;eb(503,za|0,1240,229);B=0;Ib=0}_a=Rb(1240,25216,0)|0;Za=Q;Yua(aa);Fb=_a;Gb=Za;Hb=Ib}Yua($);Yua(_);if(Hb){Db=Fb;Eb=Gb}else{Jb=Fb;Lb=Gb;break e}}else{Za=Rb(1240,25216,0)|0;Db=Za;Eb=Q}while(0);zb(za|0);Jb=Db;Lb=Eb}else Oa=96;while(0);if((Oa|0)==96){qa=Rb(1240,25216,0)|0;Jb=qa;Lb=Q}k[Z>>2]=27468;k[ta>>2]=27488;k[ka>>2]=27560;Yua(Da);Ava(ka);vva(ta);Pa=Jb;Qa=Lb;break a}while(0);xb=Bb;yb=Cb}vva(ta);Ra=xb;Sa=yb;Oa=20;break}B=0;ib(282,G|0,I|0,f|0,j|0);ka=B;B=0;if(!(ka&1)){if((k[I>>2]|0)<1){ka=ba+56|0;la=ba+4|0;k[ba>>2]=27524;k[ka>>2]=27544;B=0;wa(508,ba+56|0,la|0);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;Mb=Q;Ob=na}else{k[ba+128>>2]=0;k[ba+132>>2]=-1;k[ba>>2]=27468;k[ka>>2]=27488;B=0;va(448,la|0);na=B;B=0;do if(na&1){qa=Rb(1240,25216,0)|0;Sb=Q;Tb=qa}else{k[la>>2]=27560;qa=ba+36|0;k[qa>>2]=0;k[qa+4>>2]=0;k[qa+8>>2]=0;k[qa+12>>2]=0;k[ba+52>>2]=16;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;B=0;wa(509,la|0,s|0);xa=B;B=0;if(xa&1){xa=Rb(1240,25216,0)|0;Aa=Q;Yua(s);Yua(qa);Ava(la);Sb=Aa;Tb=xa;break}Yua(s);B=0;xa=Ia(40,ba|0,54284,26)|0;Aa=B;B=0;f:do if(Aa&1)Oa=121;else{B=0;Xa(239,xa|0,0)|0;Ca=B;B=0;if(Ca&1){Oa=121;break}Ca=Ab(20)|0;B=0;eb(502,ca|0,54043,115);Ya=B;B=0;do if(!(Ya&1)){B=0;eb(502,da|0,54159,28);Za=B;B=0;if(Za&1){Za=Rb(1240,25216,0)|0;_a=Q;Yua(ca);Ub=Za;Vb=_a;break}B=0;wa(510,ea|0,la|0);_a=B;B=0;if(_a&1){_a=Rb(1240,25216,0)|0;Wb=1;Xb=_a;Yb=Q}else{B=0;ua(163,Ca|0,ca|0,da|0,67,ea|0);_a=B;B=0;if(_a&1)Zb=1;else{B=0;eb(503,Ca|0,1240,229);B=0;Zb=0}_a=Rb(1240,25216,0)|0;Za=Q;Yua(ea);Wb=Zb;Xb=_a;Yb=Za}Yua(da);Yua(ca);if(Wb){Ub=Xb;Vb=Yb}else{_b=Xb;$b=Yb;break f}}else{Za=Rb(1240,25216,0)|0;Ub=Za;Vb=Q}while(0);zb(Ca|0);_b=Ub;$b=Vb}while(0);if((Oa|0)==121){xa=Rb(1240,25216,0)|0;_b=xa;$b=Q}k[ba>>2]=27468;k[ka>>2]=27488;k[la>>2]=27560;Yua(qa);Ava(la);vva(ka);Pa=_b;Qa=$b;break a}while(0);Mb=Sb;Ob=Tb}vva(ka);Ra=Mb;Sa=Ob;Oa=20;break}B=0;ib(282,H|0,L|0,g|0,j|0);la=B;B=0;if(!(la&1)){if((k[L>>2]|0)==(k[I>>2]|0)){B=0;ab(16,J|0,6,6,54369,+l);la=B;B=0;if(la&1){Oa=19;break}B=0;Ba(1,K|0,k[x>>2]|0,k[y>>2]|0,k[z>>2]|0,k[C>>2]|0,k[D>>2]|0,k[A>>2]|0,k[E>>2]|0,k[F>>2]|0,k[G>>2]|0,k[H>>2]|0,k[I>>2]|0,k[J>>2]|0)|0;la=B;B=0;if(la&1){Oa=19;break}B=0;La(29,a|0,0,0,k[K>>2]|0,k[I>>2]|0,k[F>>2]|0);la=B;B=0;if(la&1){Oa=19;break}la=k[x>>2]|0;if(la)Tqa(la);k[x>>2]=0;la=k[y>>2]|0;if(la)Tqa(la);k[y>>2]=0;la=k[z>>2]|0;if(la)Tqa(la);k[z>>2]=0;la=k[A>>2]|0;if(la)Tqa(la);k[A>>2]=0;la=k[G>>2]|0;if(la)Tqa(la);k[G>>2]=0;la=k[H>>2]|0;if(la)Tqa(la);k[H>>2]=0;la=k[K>>2]|0;if(la)Tqa(la);k[K>>2]=0;la=k[J>>2]|0;if(!la){r=m;return 0}p_(la);Sqa(la);r=m;return 0}la=fa+56|0;na=fa+4|0;k[fa>>2]=27524;k[la>>2]=27544;B=0;wa(508,fa+56|0,na|0);ta=B;B=0;if(ta&1){ta=Rb(1240,25216,0)|0;ac=Q;bc=ta}else{k[fa+128>>2]=0;k[fa+132>>2]=-1;k[fa>>2]=27468;k[la>>2]=27488;B=0;va(448,na|0);ta=B;B=0;do if(ta&1){xa=Rb(1240,25216,0)|0;cc=Q;dc=xa}else{k[na>>2]=27560;xa=fa+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[fa+52>>2]=16;k[q>>2]=0;k[q+4>>2]=0;k[q+8>>2]=0;B=0;wa(509,na|0,q|0);Aa=B;B=0;if(Aa&1){Aa=Rb(1240,25216,0)|0;Da=Q;Yua(q);Yua(xa);Ava(na);cc=Da;dc=Aa;break}Yua(q);B=0;Aa=Ia(40,fa|0,54311,57)|0;Da=B;B=0;g:do if(Da&1)Oa=146;else{B=0;Xa(239,Aa|0,0)|0;Ya=B;B=0;if(Ya&1){Oa=146;break}Ya=Ab(20)|0;B=0;eb(502,ga|0,54043,115);za=B;B=0;do if(!(za&1)){B=0;eb(502,ha|0,54159,28);Za=B;B=0;if(Za&1){Za=Rb(1240,25216,0)|0;_a=Q;Yua(ga);ec=Za;fc=_a;break}B=0;wa(510,ia|0,na|0);_a=B;B=0;if(_a&1){_a=Rb(1240,25216,0)|0;gc=1;hc=_a;ic=Q}else{B=0;ua(163,Ya|0,ga|0,ha|0,68,ia|0);_a=B;B=0;if(_a&1)jc=1;else{B=0;eb(503,Ya|0,1240,229);B=0;jc=0}_a=Rb(1240,25216,0)|0;Za=Q;Yua(ia);gc=jc;hc=_a;ic=Za}Yua(ha);Yua(ga);if(gc){ec=hc;fc=ic}else{kc=hc;lc=ic;break g}}else{Za=Rb(1240,25216,0)|0;ec=Za;fc=Q}while(0);zb(Ya|0);kc=ec;lc=fc}while(0);if((Oa|0)==146){Aa=Rb(1240,25216,0)|0;kc=Aa;lc=Q}k[fa>>2]=27468;k[la>>2]=27488;k[na>>2]=27560;Yua(xa);Ava(na);vva(la);Pa=kc;Qa=lc;break a}while(0);ac=cc;bc=dc}vva(la);Ra=ac;Sa=bc;Oa=20}else Oa=19}else Oa=19}else Oa=19}else Oa=19}else Oa=19}else Oa=19;while(0);if((Oa|0)==19){bc=Rb(1240,25216,0)|0;Ra=Q;Sa=bc;Oa=20}if((Oa|0)==20){Pa=Sa;Qa=Ra}if((Qa|0)!=(Kb(1240)|0)){Ra=(Qa|0)==(Kb(25216)|0);Qa=Nb(Pa|0)|0;if(Ra){mta(Hc[k[(k[Qa>>2]|0)+8>>2]&511](Qa)|0,o)|0;Pb();r=m;return 0}else{mta(55001,n)|0;Pb();r=m;return 0}}n=Nb(Pa|0)|0;B=0;Pa=ya(420,n|0)|0;n=B;B=0;if(!(n&1)){mta(Pa,p)|0;Pb();r=m;return 0}m=Rb()|0;B=0;fb(4);p=B;B=0;if(p&1){p=Rb(0)|0;Dd(p)}else Qb(m|0);return 0}function Wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,gb=0,hb=0.0;d=r;r=r+768|0;e=d+16|0;f=d+8|0;g=d;h=d+752|0;j=d+740|0;l=d+728|0;m=d+716|0;n=d+712|0;o=d+576|0;p=d+560|0;q=d+276|0;s=d+264|0;t=d+424|0;u=d+116|0;v=d+104|0;w=d+92|0;x=d+288|0;y=d+80|0;z=d+68|0;A=d+56|0;C=d+128|0;D=d+44|0;E=d+32|0;F=d+20|0;k[n>>2]=0;B=0;fb(3);G=B;B=0;a:do if(!(G&1)?(B=0,wa(507,n|0,c|0),H=B,B=0,!(H&1)):0){H=k[n>>2]|0;if((((Ita(H,54383)|0)!=0?(Ita(H,54394)|0)!=0:0)?(Ita(H,54411)|0)!=0:0)?(Ita(H,54425)|0)!=0:0)if(Ita(H,54438)|0)if(((Ita(H,54449)|0)!=0?(Ita(H,54460)|0)!=0:0)?(Ita(H,54473)|0)!=0:0){if(!(Ita(H,54486)|0)){I=o+56|0;J=o+4|0;k[o>>2]=27524;k[I>>2]=27544;B=0;wa(508,o+56|0,J|0);K=B;B=0;if(K&1){K=Rb(1240,25216,0)|0;L=Q;M=K}else{k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);K=B;B=0;do if(K&1){N=Rb(1240,25216,0)|0;O=Q;P=N}else{k[J>>2]=27560;N=o+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[o+52>>2]=16;k[m>>2]=0;k[m+4>>2]=0;k[m+8>>2]=0;B=0;wa(509,J|0,m|0);R=B;B=0;if(R&1){R=Rb(1240,25216,0)|0;S=Q;Yua(m);Yua(N);Ava(J);O=S;P=R;break}Yua(m);B=0;R=Ia(40,o|0,54500,35)|0;S=B;B=0;b:do if(S&1)T=29;else{B=0;Xa(239,R|0,0)|0;U=B;B=0;if(U&1){T=29;break}U=Ab(20)|0;B=0;eb(502,p|0,54536,91);V=B;B=0;do if(!(V&1)){B=0;eb(502,q|0,54628,16);W=B;B=0;if(W&1){W=Rb(1240,25216,0)|0;X=Q;Yua(p);Y=X;Z=W;break}B=0;wa(510,s|0,J|0);W=B;B=0;if(W&1){W=Rb(1240,25216,0)|0;_=Q;$=W;aa=1}else{B=0;ua(163,U|0,p|0,q|0,80,s|0);W=B;B=0;if(W&1)ba=1;else{B=0;eb(503,U|0,1240,229);B=0;ba=0}W=Rb(1240,25216,0)|0;X=Q;Yua(s);_=X;$=W;aa=ba}Yua(q);Yua(p);if(aa){Y=_;Z=$}else{ca=_;da=$;break b}}else{W=Rb(1240,25216,0)|0;Y=Q;Z=W}while(0);zb(U|0);ca=Y;da=Z}while(0);if((T|0)==29){R=Rb(1240,25216,0)|0;ca=Q;da=R}k[o>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);ea=ca;fa=da;break a}while(0);L=O;M=P}vva(I);ga=L;ha=M;T=5;break}if(!(Ita(H,54645)|0)){J=t+56|0;K=t+4|0;k[t>>2]=27524;k[J>>2]=27544;B=0;wa(508,t+56|0,K|0);R=B;B=0;if(R&1){R=Rb(1240,25216,0)|0;ia=Q;ja=R}else{k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);R=B;B=0;do if(R&1){S=Rb(1240,25216,0)|0;ka=Q;la=S}else{k[K>>2]=27560;S=t+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[t+52>>2]=16;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;B=0;wa(509,K|0,l|0);V=B;B=0;if(V&1){V=Rb(1240,25216,0)|0;W=Q;Yua(l);Yua(S);Ava(K);ka=W;la=V;break}Yua(l);B=0;V=Ia(40,t|0,54659,35)|0;W=B;B=0;c:do if(W&1)T=53;else{B=0;Xa(239,V|0,0)|0;X=B;B=0;if(X&1){T=53;break}X=Ab(20)|0;B=0;eb(502,u|0,54536,91);ma=B;B=0;do if(!(ma&1)){B=0;eb(502,v|0,54628,16);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;oa=Q;Yua(u);pa=oa;qa=na;break}B=0;wa(510,w|0,K|0);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;ra=1;sa=Q;xa=na}else{B=0;ua(163,X|0,u|0,v|0,87,w|0);na=B;B=0;if(na&1)za=1;else{B=0;eb(503,X|0,1240,229);B=0;za=0}na=Rb(1240,25216,0)|0;oa=Q;Yua(w);ra=za;sa=oa;xa=na}Yua(v);Yua(u);if(ra){pa=sa;qa=xa}else{Aa=sa;Ba=xa;break c}}else{na=Rb(1240,25216,0)|0;pa=Q;qa=na}while(0);zb(X|0);Aa=pa;Ba=qa}while(0);if((T|0)==53){V=Rb(1240,25216,0)|0;Aa=Q;Ba=V}k[t>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(S);Ava(K);vva(J);ea=Aa;fa=Ba;break a}while(0);ia=ka;ja=la}vva(J);ga=ia;ha=ja;T=5;break}if(!(Ita(H,54695)|0)){K=x+56|0;R=x+4|0;k[x>>2]=27524;k[K>>2]=27544;B=0;wa(508,x+56|0,R|0);I=B;B=0;if(I&1){I=Rb(1240,25216,0)|0;Ca=Q;Da=I}else{k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[K>>2]=27488;B=0;va(448,R|0);I=B;B=0;do if(I&1){V=Rb(1240,25216,0)|0;Ea=Q;Fa=V}else{k[R>>2]=27560;V=x+36|0;k[V>>2]=0;k[V+4>>2]=0;k[V+8>>2]=0;k[V+12>>2]=0;k[x+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,R|0,j|0);W=B;B=0;if(W&1){W=Rb(1240,25216,0)|0;N=Q;Yua(j);Yua(V);Ava(R);Ea=N;Fa=W;break}Yua(j);B=0;W=Ia(40,x|0,54712,38)|0;N=B;B=0;d:do if(N&1)T=77;else{B=0;Xa(239,W|0,0)|0;ma=B;B=0;if(ma&1){T=77;break}ma=Ab(20)|0;B=0;eb(502,y|0,54536,91);U=B;B=0;do if(!(U&1)){B=0;eb(502,z|0,54628,16);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;oa=Q;Yua(y);Ga=oa;Ha=na;break}B=0;wa(510,A|0,R|0);na=B;B=0;if(na&1){na=Rb(1240,25216,0)|0;Ja=1;Ka=Q;La=na}else{B=0;ua(163,ma|0,y|0,z|0,96,A|0);na=B;B=0;if(na&1)Ma=1;else{B=0;eb(503,ma|0,1240,229);B=0;Ma=0}na=Rb(1240,25216,0)|0;oa=Q;Yua(A);Ja=Ma;Ka=oa;La=na}Yua(z);Yua(y);if(Ja){Ga=Ka;Ha=La}else{Na=Ka;Oa=La;break d}}else{na=Rb(1240,25216,0)|0;Ga=Q;Ha=na}while(0);zb(ma|0);Na=Ga;Oa=Ha}while(0);if((T|0)==77){W=Rb(1240,25216,0)|0;Na=Q;Oa=W}k[x>>2]=27468;k[K>>2]=27488;k[R>>2]=27560;Yua(V);Ava(R);vva(K);ea=Na;fa=Oa;break a}while(0);Ca=Ea;Da=Fa}vva(K);ga=Ca;ha=Da;T=5;break}do if(!(Ita(H,54751)|0)){B=0;R=ya(422,48)|0;I=B;B=0;if(I&1){T=4;break a}Pa=R;Qa=54763;Ra=Pa+48|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=R}else{if(!(Ita(H,54811)|0)){B=0;V=ya(422,30)|0;I=B;B=0;if(I&1){T=4;break a}Pa=V;Qa=110826;Ra=Pa+30|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=V;break}if(!(Ita(H,54824)|0)){B=0;R=ya(422,4)|0;I=B;B=0;if(I&1){T=4;break a}i[R>>0]=52;i[R+1>>0]=46;i[R+2>>0]=57;i[R+3>>0]=0;Sa=R;break}if(!(Ita(H,54840)|0)){B=0;R=ya(422,25)|0;I=B;B=0;if(I&1){T=4;break a}Pa=R;Qa=110887;Ra=Pa+25|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=R;break}if(!(Ita(H,54852)|0)){B=0;V=ya(422,18)|0;I=B;B=0;if(I&1){T=4;break a}Pa=V;Qa=110912;Ra=Pa+18|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=V;break}if(!(Ita(H,54870)|0)){B=0;R=ya(422,29)|0;I=B;B=0;if(I&1){T=4;break a}Pa=R;Qa=54889;Ra=Pa+29|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=R;break}if(!(Ita(H,54918)|0)){B=0;V=ya(422,13)|0;I=B;B=0;if(I&1){T=4;break a}Pa=V;Qa=54926;Ra=Pa+13|0;do{i[Pa>>0]=i[Qa>>0]|0;Pa=Pa+1|0;Qa=Qa+1|0}while((Pa|0)<(Ra|0));Sa=V;break}if(!(Ita(H,54939)|0)){B=0;R=ya(422,7)|0;I=B;B=0;if(I&1){T=4;break a};i[R>>0]=i[54949]|0;i[R+1>>0]=i[54950]|0;i[R+2>>0]=i[54951]|0;i[R+3>>0]=i[54952]|0;i[R+4>>0]=i[54953]|0;i[R+5>>0]=i[54954]|0;i[R+6>>0]=i[54955]|0;Sa=R;break}if(!(Ita(H,54956)|0)){B=0;R=ya(422,6)|0;I=B;B=0;if(I&1){T=4;break a};i[R>>0]=i[54968]|0;i[R+1>>0]=i[54969]|0;i[R+2>>0]=i[54970]|0;i[R+3>>0]=i[54971]|0;i[R+4>>0]=i[54972]|0;i[R+5>>0]=i[54973]|0;Sa=R;break}if(!(Ita(H,54974)|0)){B=0;R=ya(422,7)|0;I=B;B=0;if(I&1){T=4;break a};i[R>>0]=i[54984]|0;i[R+1>>0]=i[54985]|0;i[R+2>>0]=i[54986]|0;i[R+3>>0]=i[54987]|0;i[R+4>>0]=i[54988]|0;i[R+5>>0]=i[54989]|0;i[R+6>>0]=i[54990]|0;Sa=R;break}R=C+56|0;I=C+4|0;k[C>>2]=27524;k[R>>2]=27544;B=0;wa(508,C+56|0,I|0);J=B;B=0;if(J&1){J=Rb(1240,25216,0)|0;Ta=Q;Ua=J}else{k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[R>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){W=Rb(1240,25216,0)|0;Va=Q;Wa=W}else{k[I>>2]=27560;W=C+36|0;k[W>>2]=0;k[W+4>>2]=0;k[W+8>>2]=0;k[W+12>>2]=0;k[C+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,I|0,h|0);N=B;B=0;if(N&1){N=Rb(1240,25216,0)|0;S=Q;Yua(h);Yua(W);Ava(I);Va=S;Wa=N;break}Yua(h);B=0;N=Ia(40,C|0,54991,9)|0;S=B;B=0;e:do if(S&1)T=132;else{U=k[n>>2]|0;X=Lta(U)|0;B=0;na=Ia(40,N|0,U|0,X|0)|0;X=B;B=0;if(X&1){T=132;break}B=0;X=Ia(40,na|0,146481,18)|0;na=B;B=0;if(na&1){T=132;break}B=0;Xa(239,X|0,0)|0;X=B;B=0;if(X&1){T=132;break}X=Ab(20)|0;B=0;eb(502,D|0,54536,91);na=B;B=0;do if(!(na&1)){B=0;eb(502,E|0,54628,16);U=B;B=0;if(U&1){U=Rb(1240,25216,0)|0;oa=Q;Yua(D);Ya=oa;Za=U;break}B=0;wa(510,F|0,I|0);U=B;B=0;if(U&1){U=Rb(1240,25216,0)|0;_a=1;$a=Q;ab=U}else{B=0;ua(163,X|0,D|0,E|0,155,F|0);U=B;B=0;if(U&1)bb=1;else{B=0;eb(503,X|0,1240,229);B=0;bb=0}U=Rb(1240,25216,0)|0;oa=Q;Yua(F);_a=bb;$a=oa;ab=U}Yua(E);Yua(D);if(_a){Ya=$a;Za=ab}else{cb=$a;db=ab;break e}}else{U=Rb(1240,25216,0)|0;Ya=Q;Za=U}while(0);zb(X|0);cb=Ya;db=Za}while(0);if((T|0)==132){N=Rb(1240,25216,0)|0;cb=Q;db=N}k[C>>2]=27468;k[R>>2]=27488;k[I>>2]=27560;Yua(W);Ava(I);vva(R);ea=cb;fa=db;break a}while(0);Ta=Va;Ua=Wa}vva(R);ga=Ta;ha=Ua;T=5;break a}while(0);B=0;wa(511,b|0,Sa|0);H=B;B=0;if(H&1){T=4;break}else gb=Sa}else{hb=0.0;T=148}else{hb=1.0;T=148}else{hb=0.0;T=148}if((T|0)==148){B=0;ta(54,a|0,+hb);H=B;B=0;if(H&1){T=4;break}else gb=0}H=k[n>>2]|0;if(H)Tqa(H);k[n>>2]=0;if(!gb){r=d;return 0}Tqa(gb);r=d;return 0}else T=4;while(0);if((T|0)==4){gb=Rb(1240,25216,0)|0;ga=Q;ha=gb;T=5}if((T|0)==5){ea=ga;fa=ha}if((ea|0)!=(Kb(1240)|0)){ha=(ea|0)==(Kb(25216)|0);ea=Nb(fa|0)|0;if(ha){mta(Hc[k[(k[ea>>2]|0)+8>>2]&511](ea)|0,f)|0;Pb();r=d;return 0}else{mta(55001,e)|0;Pb();r=d;return 0}}e=Nb(fa|0)|0;B=0;fa=ya(420,e|0)|0;e=B;B=0;if(!(e&1)){mta(fa,g)|0;Pb();r=d;return 0}d=Rb()|0;B=0;fb(4);g=B;B=0;if(g&1){g=Rb(0)|0;Dd(g)}else Qb(d|0);return 0}function Xd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=c+24|0;h=c+20|0;k[g>>2]=0;B=0;fb(3);i=B;B=0;if(((!(i&1)?(B=0,wa(506,h|0,b|0),b=B,B=0,!(b&1)):0)?(B=0,wa(512,g|0,k[h>>2]|0),h=B,B=0,!(h&1)):0)?(B=0,wa(511,a|0,k[g>>2]|0),a=B,B=0,!(a&1)):0){a=k[g>>2]|0;if(a)Tqa(a);k[g>>2]=0;r=c;return 0}g=Rb(1240,25216,0)|0;a=Q;if((a|0)!=(Kb(1240)|0)){h=(a|0)==(Kb(25216)|0);a=Nb(g|0)|0;if(h){mta(Hc[k[(k[a>>2]|0)+8>>2]&511](a)|0,e)|0;Pb();r=c;return 0}else{mta(55001,d)|0;Pb();r=c;return 0}}d=Nb(g|0)|0;B=0;g=ya(420,d|0)|0;d=B;B=0;if(!(d&1)){mta(g,f)|0;Pb();r=c;return 0}c=Rb()|0;B=0;fb(4);f=B;B=0;if(f&1){f=Rb(0)|0;Dd(f)}else Qb(c|0);return 0}function Yd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+32|0;d=c+16|0;e=c+8|0;f=c;g=c+20|0;k[g>>2]=0;B=0;fb(3);h=B;B=0;if(((!(h&1)?(B=0,wa(507,g|0,b|0),b=B,B=0,!(b&1)):0)?(B=0,b=Xa(240,k[g>>2]|0,1)|0,h=B,B=0,!(h&1)):0)?(B=0,ta(54,a|0,+(+(b|0))),b=B,B=0,!(b&1)):0){b=k[g>>2]|0;if(b)Tqa(b);k[g>>2]=0;r=c;return 0}g=Rb(1240,25216,0)|0;b=Q;if((b|0)!=(Kb(1240)|0)){a=(b|0)==(Kb(25216)|0);b=Nb(g|0)|0;if(a){mta(Hc[k[(k[b>>2]|0)+8>>2]&511](b)|0,e)|0;Pb();r=c;return 0}else{mta(55001,d)|0;Pb();r=c;return 0}}d=Nb(g|0)|0;B=0;g=ya(420,d|0)|0;d=B;B=0;if(!(d&1)){mta(g,f)|0;Pb();r=c;return 0}c=Rb()|0;B=0;fb(4);f=B;B=0;if(f&1){f=Rb(0)|0;Dd(f)}else Qb(c|0);return 0}function Zd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;h=r;r=r+336|0;i=h+316|0;j=h+304|0;l=h+300|0;m=h+296|0;n=h+160|0;o=h+12|0;p=h+24|0;q=h;k[l>>2]=0;B=0;s=Xa(241,0,0)|0;t=B;B=0;do if(!(t&1)?(B=0,u=ya(423,52)|0,v=B,B=0,!(v&1)):0){B=0;Ka(10,u|0,c|0,d|0,e|0,f|0,g|0,s|0,0);v=B;B=0;if(v&1){v=Rb(1240,25216,0)|0;w=Q;Sqa(u);x=v;y=w;break}B=0;va(449,u|0);w=B;B=0;if(((!(w&1)?(B=0,va(450,u|0),w=B,B=0,!(w&1)):0)?(B=0,eb(504,u|0,l|0,m|0),w=B,B=0,!(w&1)):0)?(vh(u),Sqa(u),B=0,fb(5),u=B,B=0,!(u&1)):0){k[b>>2]=k[m>>2];k[a>>2]=k[l>>2];r=h;return 0}else z=9}else z=9;while(0);if((z|0)==9){l=Rb(1240,25216,0)|0;x=l;y=Q}if((y|0)==(Kb(1240)|0)){l=Nb(x|0)|0;B=0;va(451,l|0);l=B;B=0;if(!(l&1)){Pb();r=h;return 0}l=Rb()|0;a=Q;B=0;fb(4);m=B;B=0;if(m&1){A=Rb(0)|0;C=Q;Dd(A)}else{D=l;E=a;Qb(D|0)}}a=(y|0)==(Kb(25216)|0);y=Nb(x|0)|0;if(!a){a=n+56|0;x=n+4|0;k[n>>2]=27524;k[a>>2]=27544;B=0;wa(508,n+56|0,x|0);l=B;B=0;a:do if(l&1){m=Rb()|0;F=Q;G=m;z=39}else{k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[a>>2]=27488;B=0;va(448,x|0);m=B;B=0;do if(m&1){b=Rb()|0;H=Q;I=b}else{k[x>>2]=27560;b=n+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[n+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,x|0,i|0);s=B;B=0;if(s&1){s=Rb()|0;g=Q;Yua(i);Yua(b);Ava(x);H=g;I=s;break}Yua(i);B=0;Ia(40,n|0,55051,31)|0;s=B;B=0;do if(!(s&1)?(B=0,wa(510,o|0,x|0),g=B,B=0,!(g&1)):0){B=0;ya(424,o|0)|0;g=B;B=0;if(g&1){g=Rb()|0;f=Q;Yua(o);J=g;K=f;break}Yua(o);k[n>>2]=27468;k[a>>2]=27488;k[x>>2]=27560;Yua(b);Ava(x);vva(a);Pb();r=h;return 0}else z=40;while(0);if((z|0)==40){s=Rb()|0;J=s;K=Q}k[n>>2]=27468;k[a>>2]=27488;k[x>>2]=27560;Yua(b);Ava(x);vva(a);L=J;M=K;break a}while(0);F=H;G=I;z=39}while(0);if((z|0)==39){vva(a);L=G;M=F}B=0;fb(4);F=B;B=0;if(F&1){A=Rb(0)|0;C=Q;Dd(A)}else{D=L;E=M;Qb(D|0)}}M=p+56|0;L=p+4|0;k[p>>2]=27524;k[M>>2]=27544;B=0;wa(508,p+56|0,L|0);F=B;B=0;b:do if(F&1){G=Rb()|0;N=Q;O=G;z=44}else{k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[M>>2]=27488;B=0;va(448,L|0);G=B;B=0;do if(G&1){a=Rb()|0;P=Q;R=a}else{k[L>>2]=27560;a=p+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[p+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,L|0,j|0);I=B;B=0;if(I&1){I=Rb()|0;H=Q;Yua(j);Yua(a);Ava(L);P=H;R=I;break}Yua(j);B=0;I=Ia(40,p|0,55030,20)|0;H=B;B=0;do if(((!(H&1)?(K=Hc[k[(k[y>>2]|0)+8>>2]&511](y)|0,J=Lta(K)|0,B=0,x=Ia(40,I|0,K|0,J|0)|0,J=B,B=0,!(J&1)):0)?(B=0,Ia(40,x|0,104966,2)|0,x=B,B=0,!(x&1)):0)?(B=0,wa(510,q|0,L|0),x=B,B=0,!(x&1)):0){B=0;ya(424,q|0)|0;x=B;B=0;if(x&1){x=Rb()|0;J=Q;Yua(q);S=x;T=J;break}Yua(q);k[p>>2]=27468;k[M>>2]=27488;k[L>>2]=27560;Yua(a);Ava(L);vva(M);Pb();r=h;return 0}else z=45;while(0);if((z|0)==45){I=Rb()|0;S=I;T=Q}k[p>>2]=27468;k[M>>2]=27488;k[L>>2]=27560;Yua(a);Ava(L);vva(M);U=S;V=T;break b}while(0);N=P;O=R;z=44}while(0);if((z|0)==44){vva(M);U=O;V=N}B=0;fb(4);N=B;B=0;if(N&1){A=Rb(0)|0;C=Q;Dd(A)}else{D=U;E=V;Qb(D|0)}return 0}function _d(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0;e=r;r=r+112|0;f=e+100|0;g=e+96|0;h=e+92|0;i=e+88|0;j=e+72|0;l=e+64|0;m=e+56|0;n=e+48|0;o=e+40|0;q=e+32|0;s=e+24|0;t=e+16|0;u=e+8|0;v=e;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;p[e+80>>3]=d;p[j>>3]=+p[k[g>>2]>>3]-+p[k[i>>2]>>3];p[n>>3]=+p[(k[g>>2]|0)+8>>3]-+p[(k[i>>2]|0)+8>>3];p[l>>3]=+p[k[h>>2]>>3]-+p[k[i>>2]>>3];p[o>>3]=+p[(k[h>>2]|0)+8>>3]-+p[(k[i>>2]|0)+8>>3];p[m>>3]=+p[k[g>>2]>>3]-+p[k[h>>2]>>3];p[q>>3]=+p[(k[g>>2]|0)+8>>3]-+p[(k[h>>2]|0)+8>>3];p[s>>3]=+p[j>>3]*+p[j>>3]+ +p[n>>3]*+p[n>>3];p[t>>3]=+p[l>>3]*+p[l>>3]+ +p[o>>3]*+p[o>>3];p[u>>3]=+p[m>>3]*+p[m>>3]+ +p[q>>3]*+p[q>>3];p[v>>3]=+p[t>>3]>+p[s>>3]?+p[t>>3]:+p[s>>3];p[v>>3]=+p[u>>3]>+p[v>>3]?+p[u>>3]:+p[v>>3];if(+p[v>>3]>(+p[k[g>>2]>>3]*+p[k[g>>2]>>3]+ +p[(k[g>>2]|0)+8>>3]*+p[(k[g>>2]|0)+8>>3])*.05+.02){k[f>>2]=1;w=k[f>>2]|0;r=e;return w|0}else{k[f>>2]=0;w=k[f>>2]|0;r=e;return w|0}return 0}function $d(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;vc(k[c>>2]|0)}function ae(a){a=a|0;var b=0,c=0,d=0,e=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;k[c>>2]=a;a=lua(k[c>>2]|0)|0;k[d>>2]=a;if(k[d>>2]|0){e=k[d>>2]|0;r=b;return e|0}mta(55083,b)|0;$d(1);e=k[d>>2]|0;r=b;return e|0}function be(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;mua(k[c>>2]|0);r=b;return}function ce(){var a=0;a=r;r=r+32|0;mta(55107,a)|0;mta(55156,a+8|0)|0;mta(55221,a+16|0)|0;$d(1);r=a;return}function de(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;d=r;r=r+2128|0;e=d+48|0;f=d+40|0;g=d+32|0;h=d+24|0;j=d+16|0;l=d+8|0;m=d;n=d+72|0;o=d+68|0;q=d+64|0;s=d+60|0;t=d+56|0;u=d+52|0;v=d+80|0;k[n>>2]=a;k[o>>2]=b;k[q>>2]=c;k[(k[q>>2]|0)+8>>2]=0;k[(k[q>>2]|0)+4>>2]=0;k[k[q>>2]>>2]=0;k[(k[q>>2]|0)+20>>2]=0;k[(k[q>>2]|0)+16>>2]=0;k[(k[q>>2]|0)+12>>2]=0;k[(k[q>>2]|0)+36>>2]=0;k[(k[q>>2]|0)+32>>2]=0;k[(k[q>>2]|0)+28>>2]=0;k[(k[q>>2]|0)+24>>2]=0;k[(k[q>>2]|0)+40>>2]=1;k[(k[q>>2]|0)+56>>2]=0;k[(k[q>>2]|0)+52>>2]=0;k[(k[q>>2]|0)+48>>2]=0;k[(k[q>>2]|0)+44>>2]=0;k[(k[q>>2]|0)+72>>2]=0;k[(k[q>>2]|0)+68>>2]=0;k[(k[q>>2]|0)+64>>2]=0;k[(k[q>>2]|0)+60>>2]=0;k[(k[q>>2]|0)+76>>2]=0;k[(k[q>>2]|0)+84>>2]=0;k[(k[q>>2]|0)+80>>2]=0;k[(k[q>>2]|0)+96>>2]=0;k[(k[q>>2]|0)+92>>2]=0;k[(k[q>>2]|0)+100>>2]=1;k[(k[q>>2]|0)+104>>2]=0;k[(k[q>>2]|0)+108>>2]=0;k[(k[q>>2]|0)+128>>2]=0;k[(k[q>>2]|0)+88>>2]=0;k[(k[q>>2]|0)+132>>2]=-1;k[(k[q>>2]|0)+124>>2]=1;p[(k[q>>2]|0)+136>>3]=0.0;p[(k[q>>2]|0)+160>>3]=-1.0;k[(k[q>>2]|0)+116>>2]=0;k[(k[q>>2]|0)+112>>2]=0;k[s>>2]=0;while(1){if((k[s>>2]|0)>=(k[n>>2]|0))break;k[t>>2]=0;while(1){if(!(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0))break;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==112)k[k[q>>2]>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==114)k[(k[q>>2]|0)+4>>2]=1;do if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==113){k[(k[q>>2]|0)+8>>2]=1;if(!((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)>=48?(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)<=57:0))w=12;if((w|0)==12?(w=0,(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)!=46):0){p[(k[q>>2]|0)+136>>3]=20.0;break}k[u>>2]=0;while(1){if(!((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)>=48?(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)<=57:0))w=16;if((w|0)==16?(w=0,(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)!=46):0)break;k[t>>2]=(k[t>>2]|0)+1;i[v+(k[u>>2]|0)>>0]=i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0;k[u>>2]=(k[u>>2]|0)+1}i[v+(k[u>>2]|0)>>0]=0;x=+zta(v,0);p[(k[q>>2]|0)+136>>3]=x}while(0);do if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==97){k[(k[q>>2]|0)+8>>2]=1;if(!((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)>=48?(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)<=57:0))w=23;if((w|0)==23?(w=0,(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)!=46):0){k[(k[q>>2]|0)+12>>2]=1;break}k[(k[q>>2]|0)+16>>2]=1;k[u>>2]=0;while(1){if(!((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)>=48?(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)<=57:0))w=27;if((w|0)==27?(w=0,(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)!=46):0)break;k[t>>2]=(k[t>>2]|0)+1;i[v+(k[u>>2]|0)>>0]=i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0;k[u>>2]=(k[u>>2]|0)+1}i[v+(k[u>>2]|0)>>0]=0;x=+zta(v,0);p[(k[q>>2]|0)+160>>3]=x;if(+p[(k[q>>2]|0)+160>>3]<=0.0){mta(55265,m)|0;$d(1)}}while(0);if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==117){k[(k[q>>2]|0)+8>>2]=1;k[(k[q>>2]|0)+20>>2]=1}if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==65)k[(k[q>>2]|0)+24>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==99)k[(k[q>>2]|0)+28>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==119)k[(k[q>>2]|0)+32>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==87)k[(k[q>>2]|0)+32>>2]=2;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==106)k[(k[q>>2]|0)+36>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==122)k[(k[q>>2]|0)+40>>2]=0;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==101)k[(k[q>>2]|0)+44>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==118)k[(k[q>>2]|0)+48>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==110)k[(k[q>>2]|0)+52>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==103)k[(k[q>>2]|0)+56>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==66)k[(k[q>>2]|0)+60>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==80)k[(k[q>>2]|0)+64>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==78)k[(k[q>>2]|0)+68>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==69)k[(k[q>>2]|0)+72>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==79)k[(k[q>>2]|0)+80>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==88)k[(k[q>>2]|0)+84>>2]=1;do if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==111){if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)!=50)break;k[t>>2]=(k[t>>2]|0)+1;k[(k[q>>2]|0)+124>>2]=2}while(0);if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==89){c=(k[q>>2]|0)+128|0;k[c>>2]=(k[c>>2]|0)+1}a:do if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==83){k[(k[q>>2]|0)+132>>2]=0;while(1){if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)<48)break a;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+((k[t>>2]|0)+1)>>0]|0)>57)break a;k[t>>2]=(k[t>>2]|0)+1;k[(k[q>>2]|0)+132>>2]=((k[(k[q>>2]|0)+132>>2]|0)*10|0)+((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)-48)}}while(0);if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==105)k[(k[q>>2]|0)+92>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==70)k[(k[q>>2]|0)+96>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==108)k[(k[q>>2]|0)+100>>2]=0;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==115)k[(k[q>>2]|0)+104>>2]=1;if(!((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)!=68?(i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)!=76:0)){k[(k[q>>2]|0)+8>>2]=1;k[(k[q>>2]|0)+88>>2]=1}if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==67)k[(k[q>>2]|0)+108>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==81)k[(k[q>>2]|0)+112>>2]=1;if((i[(k[(k[o>>2]|0)+(k[s>>2]<<2)>>2]|0)+(k[t>>2]|0)>>0]|0)==86){c=(k[q>>2]|0)+116|0;k[c>>2]=(k[c>>2]|0)+1}k[t>>2]=(k[t>>2]|0)+1}k[s>>2]=(k[s>>2]|0)+1}if(((k[k[q>>2]>>2]|0)==0?(k[(k[q>>2]|0)+4>>2]|0)==0:0)?(k[(k[q>>2]|0)+8>>2]|0)==0:0)y=(k[(k[q>>2]|0)+28>>2]|0)!=0;else y=1;k[(k[q>>2]|0)+120>>2]=y&1;x=+ca(+(+p[(k[q>>2]|0)+136>>3]*3.141592653589793/180.0));p[(k[q>>2]|0)+144>>3]=x;y=k[q>>2]|0;if(+p[(k[q>>2]|0)+144>>3]==1.0)p[y+152>>3]=0.0;else{x=+aa(+((+p[y+144>>3]+1.0)/(1.0-+p[(k[q>>2]|0)+144>>3])))*.475;p[(k[q>>2]|0)+152>>3]=x}y=(k[q>>2]|0)+144|0;p[y>>3]=+p[y>>3]*+p[(k[q>>2]|0)+144>>3];if((k[(k[q>>2]|0)+4>>2]|0)!=0?(k[(k[q>>2]|0)+76>>2]|0)!=0:0){mta(55314,l)|0;$d(1)}if((k[(k[q>>2]|0)+4>>2]|0)==0?(k[k[q>>2]>>2]|0)==0:0)k[(k[q>>2]|0)+12>>2]=0;if(!((k[(k[q>>2]|0)+4>>2]|0)==0?(k[k[q>>2]>>2]|0)!=0:0))k[(k[q>>2]|0)+24>>2]=0;do if(k[(k[q>>2]|0)+32>>2]|0){if((k[k[q>>2]>>2]|0)==0?(k[(k[q>>2]|0)+8>>2]|0)==0:0)break;k[(k[q>>2]|0)+32>>2]=0;if(!(k[(k[q>>2]|0)+112>>2]|0)){mta(55383,j)|0;mta(55444,h)|0}}while(0);if(!(k[(k[q>>2]|0)+36>>2]|0)){r=d;return}if(!(k[(k[q>>2]|0)+68>>2]|0)){r=d;return}if(k[(k[q>>2]|0)+112>>2]|0){r=d;return}mta(55507,g)|0;mta(55564,f)|0;mta(55624,e)|0;r=d;return}function ee(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0;d=r;r=r+224|0;e=d+176|0;f=d+168|0;g=d+160|0;h=d+152|0;i=d+128|0;j=d+120|0;l=d+96|0;m=d+88|0;n=d+64|0;o=d+56|0;q=d+48|0;s=d+32|0;t=d+16|0;u=d;v=d+216|0;w=d+212|0;x=d+208|0;y=d+200|0;z=d+192|0;A=d+184|0;k[v>>2]=a;k[w>>2]=b;k[x>>2]=c;c=k[(k[x>>2]|0)+4>>2]|0;k[u>>2]=k[k[x>>2]>>2];k[u+4>>2]=c;mta(55674,u)|0;k[y+4>>2]=k[k[k[x>>2]>>2]>>2]&3;k[y>>2]=k[k[k[x>>2]>>2]>>2]^k[y+4>>2];if((k[y>>2]|0)==(k[(k[v>>2]|0)+49768>>2]|0))mta(55710,d+8|0)|0;else{u=k[y+4>>2]|0;k[t>>2]=k[y>>2];k[t+4>>2]=u;mta(55733,t)|0}k[y+4>>2]=k[(k[k[x>>2]>>2]|0)+4>>2]&3;k[y>>2]=k[(k[k[x>>2]>>2]|0)+4>>2]^k[y+4>>2];if((k[y>>2]|0)==(k[(k[v>>2]|0)+49768>>2]|0))mta(55753,d+24|0)|0;else{t=k[y+4>>2]|0;k[s>>2]=k[y>>2];k[s+4>>2]=t;mta(55776,s)|0}k[y+4>>2]=k[(k[k[x>>2]>>2]|0)+8>>2]&3;k[y>>2]=k[(k[k[x>>2]>>2]|0)+8>>2]^k[y+4>>2];if((k[y>>2]|0)==(k[(k[v>>2]|0)+49768>>2]|0))mta(55796,d+40|0)|0;else{s=k[y+4>>2]|0;k[q>>2]=k[y>>2];k[q+4>>2]=s;mta(55819,q)|0}k[A>>2]=k[(k[k[x>>2]>>2]|0)+((k[27620+(k[(k[x>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];q=(((k[(k[x>>2]|0)+4>>2]|0)+1|0)%3|0)+3|0;if(!(k[A>>2]|0)){k[o>>2]=q;mta(55839,o)|0}else{o=k[A>>2]|0;B=+p[k[A>>2]>>3];C=+p[(k[A>>2]|0)+8>>3];k[n>>2]=q;k[n+4>>2]=o;p[n+8>>3]=B;p[n+16>>3]=C;mta(55862,n)|0}k[A>>2]=k[(k[k[x>>2]>>2]|0)+((k[27632+(k[(k[x>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];n=(((k[(k[x>>2]|0)+4>>2]|0)+2|0)%3|0)+3|0;if(!(k[A>>2]|0)){k[m>>2]=n;mta(55901,m)|0}else{m=k[A>>2]|0;C=+p[k[A>>2]>>3];B=+p[(k[A>>2]|0)+8>>3];k[l>>2]=n;k[l+4>>2]=m;p[l+8>>3]=C;p[l+16>>3]=B;mta(55924,l)|0}k[A>>2]=k[(k[k[x>>2]>>2]|0)+((k[(k[x>>2]|0)+4>>2]|0)+3<<2)>>2];l=(k[(k[x>>2]|0)+4>>2]|0)+3|0;if(!(k[A>>2]|0)){k[j>>2]=l;mta(55963,j)|0}else{j=k[A>>2]|0;B=+p[k[A>>2]>>3];C=+p[(k[A>>2]|0)+8>>3];k[i>>2]=l;k[i+4>>2]=j;p[i+8>>3]=B;p[i+16>>3]=C;mta(55986,i)|0}if(k[(k[w>>2]|0)+120>>2]|0){k[z+4>>2]=k[(k[k[x>>2]>>2]|0)+24>>2]&1;k[z>>2]=k[(k[k[x>>2]>>2]|0)+24>>2]&-4;if((k[z>>2]|0)!=(k[(k[v>>2]|0)+49776>>2]|0)){i=k[z+4>>2]|0;k[h>>2]=k[z>>2];k[h+4>>2]=i;mta(56025,h)|0}k[z+4>>2]=k[(k[k[x>>2]>>2]|0)+28>>2]&1;k[z>>2]=k[(k[k[x>>2]>>2]|0)+28>>2]&-4;if((k[z>>2]|0)!=(k[(k[v>>2]|0)+49776>>2]|0)){h=k[z+4>>2]|0;k[g>>2]=k[z>>2];k[g+4>>2]=h;mta(56045,g)|0}k[z+4>>2]=k[(k[k[x>>2]>>2]|0)+32>>2]&1;k[z>>2]=k[(k[k[x>>2]>>2]|0)+32>>2]&-4;if((k[z>>2]|0)!=(k[(k[v>>2]|0)+49776>>2]|0)){g=k[z+4>>2]|0;k[f>>2]=k[z>>2];k[f+4>>2]=g;mta(56065,f)|0}}if(!(k[(k[w>>2]|0)+12>>2]|0)){r=d;return}p[e>>3]=+p[(k[k[x>>2]>>2]|0)+(k[(k[v>>2]|0)+49712>>2]<<3)>>3];mta(56085,e)|0;r=d;return}function fe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;d=r;r=r+256|0;e=d+184|0;f=d+176|0;g=d+152|0;h=d+144|0;i=d+136|0;j=d+120|0;l=d+88|0;m=d+80|0;n=d+56|0;o=d+48|0;q=d+40|0;s=d+24|0;t=d;u=d+240|0;v=d+232|0;w=d+224|0;x=d+216|0;y=d+208|0;k[u>>2]=a;k[d+236>>2]=b;k[v>>2]=c;c=k[(k[v>>2]|0)+4>>2]|0;b=k[(k[k[v>>2]>>2]|0)+32>>2]|0;k[t>>2]=k[k[v>>2]>>2];k[t+4>>2]=c;k[t+8>>2]=b;mta(56113,t)|0;k[w+4>>2]=k[k[k[v>>2]>>2]>>2]&1;k[w>>2]=k[k[k[v>>2]>>2]>>2]&-4;if((k[w>>2]|0)==(k[(k[u>>2]|0)+49776>>2]|0))mta(56163,d+16|0)|0;else{t=k[w+4>>2]|0;k[s>>2]=k[w>>2];k[s+4>>2]=t;mta(55733,s)|0}k[w+4>>2]=k[(k[k[v>>2]>>2]|0)+4>>2]&1;k[w>>2]=k[(k[k[v>>2]>>2]|0)+4>>2]&-4;if((k[w>>2]|0)==(k[(k[u>>2]|0)+49776>>2]|0))mta(56188,d+32|0)|0;else{s=k[w+4>>2]|0;k[q>>2]=k[w>>2];k[q+4>>2]=s;mta(55776,q)|0}k[y>>2]=k[(k[k[v>>2]>>2]|0)+(2+(k[(k[v>>2]|0)+4>>2]|0)<<2)>>2];q=2+(k[(k[v>>2]|0)+4>>2]|0)|0;if(!(k[y>>2]|0)){k[o>>2]=q;mta(55839,o)|0}else{o=k[y>>2]|0;z=+p[k[y>>2]>>3];A=+p[(k[y>>2]|0)+8>>3];k[n>>2]=q;k[n+4>>2]=o;p[n+8>>3]=z;p[n+16>>3]=A;mta(55862,n)|0}k[y>>2]=k[(k[k[v>>2]>>2]|0)+(3-(k[(k[v>>2]|0)+4>>2]|0)<<2)>>2];n=3-(k[(k[v>>2]|0)+4>>2]|0)|0;if(!(k[y>>2]|0)){k[m>>2]=n;mta(55901,m)|0}else{m=k[y>>2]|0;A=+p[k[y>>2]>>3];z=+p[(k[y>>2]|0)+8>>3];k[l>>2]=n;k[l+4>>2]=m;p[l+8>>3]=A;p[l+16>>3]=z;mta(55924,l)|0}k[x+4>>2]=k[(k[k[v>>2]>>2]|0)+24>>2]&3;k[x>>2]=k[(k[k[v>>2]>>2]|0)+24>>2]^k[x+4>>2];if((k[x>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0))mta(56213,d+112|0)|0;else{l=k[x+4>>2]|0;k[j>>2]=k[x>>2];k[j+4>>2]=l;mta(56025,j)|0}k[x+4>>2]=k[(k[k[v>>2]>>2]|0)+28>>2]&3;k[x>>2]=k[(k[k[v>>2]>>2]|0)+28>>2]^k[x+4>>2];if((k[x>>2]|0)==(k[(k[u>>2]|0)+49768>>2]|0))mta(56236,d+128|0)|0;else{u=k[x+4>>2]|0;k[i>>2]=k[x>>2];k[i+4>>2]=u;mta(56045,i)|0}k[y>>2]=k[(k[k[v>>2]>>2]|0)+(4+(k[(k[v>>2]|0)+4>>2]|0)<<2)>>2];i=4+(k[(k[v>>2]|0)+4>>2]|0)|0;if(!(k[y>>2]|0)){k[h>>2]=i;mta(56259,h)|0}else{h=k[y>>2]|0;z=+p[k[y>>2]>>3];A=+p[(k[y>>2]|0)+8>>3];k[g>>2]=i;k[g+4>>2]=h;p[g+8>>3]=z;p[g+16>>3]=A;mta(56290,g)|0}k[y>>2]=k[(k[k[v>>2]>>2]|0)+(5-(k[(k[v>>2]|0)+4>>2]|0)<<2)>>2];g=5-(k[(k[v>>2]|0)+4>>2]|0)|0;if(!(k[y>>2]|0)){k[f>>2]=g;mta(56337,f)|0;r=d;return}else{f=k[y>>2]|0;A=+p[k[y>>2]>>3];z=+p[(k[y>>2]|0)+8>>3];k[e>>2]=g;k[e+4>>2]=f;p[e+8>>3]=A;p[e+16>>3]=z;mta(56368,e)|0;r=d;return}}function ge(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;k[k[c>>2]>>2]=0;k[(k[c>>2]|0)+4>>2]=0;k[(k[c>>2]|0)+8>>2]=0;k[(k[c>>2]|0)+12>>2]=0;k[(k[c>>2]|0)+16>>2]=0;k[(k[c>>2]|0)+20>>2]=0;k[(k[c>>2]|0)+24>>2]=0;k[(k[c>>2]|0)+28>>2]=0;k[(k[c>>2]|0)+32>>2]=0;k[(k[c>>2]|0)+36>>2]=0;k[(k[c>>2]|0)+40>>2]=0;k[(k[c>>2]|0)+44>>2]=0;k[(k[c>>2]|0)+48>>2]=0;k[(k[c>>2]|0)+52>>2]=0;r=b;return}function he(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=a;k[(k[c>>2]|0)+40>>2]=0;k[(k[c>>2]|0)+44>>2]=0;k[(k[c>>2]|0)+4>>2]=k[k[c>>2]>>2];k[d>>2]=(k[(k[c>>2]|0)+4>>2]|0)+4;k[(k[c>>2]|0)+8>>2]=(k[d>>2]|0)+(k[(k[c>>2]|0)+24>>2]|0)-(((k[d>>2]|0)>>>0)%((k[(k[c>>2]|0)+24>>2]|0)>>>0)|0);k[(k[c>>2]|0)+48>>2]=k[(k[c>>2]|0)+36>>2];k[(k[c>>2]|0)+12>>2]=0;r=b;return}function ie(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0;f=r;r=r+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;l=f;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;k[l>>2]=e;if((k[l>>2]|0)>>>0>4)k[(k[g>>2]|0)+24>>2]=k[l>>2];else k[(k[g>>2]|0)+24>>2]=4;l=ma((((k[h>>2]|0)-1|0)/(k[(k[g>>2]|0)+24>>2]|0)|0)+1|0,k[(k[g>>2]|0)+24>>2]|0)|0;k[(k[g>>2]|0)+28>>2]=l;k[(k[g>>2]|0)+32>>2]=k[i>>2];if(!(k[j>>2]|0))k[(k[g>>2]|0)+36>>2]=k[i>>2];else k[(k[g>>2]|0)+36>>2]=k[j>>2];j=(ma(k[(k[g>>2]|0)+36>>2]|0,k[(k[g>>2]|0)+28>>2]|0)|0)+4|0;i=ae(j+(k[(k[g>>2]|0)+24>>2]|0)|0)|0;k[k[g>>2]>>2]=i;k[k[k[g>>2]>>2]>>2]=0;he(k[g>>2]|0);r=f;return}function je(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;while(1){if(!(k[k[c>>2]>>2]|0))break;k[(k[c>>2]|0)+4>>2]=k[k[k[c>>2]>>2]>>2];be(k[k[c>>2]>>2]|0);k[k[c>>2]>>2]=k[(k[c>>2]|0)+4>>2]}r=b;return}function ke(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;b=r;r=r+16|0;c=b+12|0;d=b+8|0;e=b+4|0;f=b;k[c>>2]=a;a=k[c>>2]|0;if(k[(k[c>>2]|0)+12>>2]|0){k[d>>2]=k[a+12>>2];k[(k[c>>2]|0)+12>>2]=k[k[(k[c>>2]|0)+12>>2]>>2];g=k[c>>2]|0;h=g+40|0;i=k[h>>2]|0;j=i+1|0;k[h>>2]=j;l=k[d>>2]|0;r=b;return l|0}if(!(k[a+48>>2]|0)){if(!(k[k[(k[c>>2]|0)+4>>2]>>2]|0)){a=(ma(k[(k[c>>2]|0)+32>>2]|0,k[(k[c>>2]|0)+28>>2]|0)|0)+4|0;m=ae(a+(k[(k[c>>2]|0)+24>>2]|0)|0)|0;k[e>>2]=m;k[k[(k[c>>2]|0)+4>>2]>>2]=k[e>>2];k[k[e>>2]>>2]=0}k[(k[c>>2]|0)+4>>2]=k[k[(k[c>>2]|0)+4>>2]>>2];k[f>>2]=(k[(k[c>>2]|0)+4>>2]|0)+4;k[(k[c>>2]|0)+8>>2]=(k[f>>2]|0)+(k[(k[c>>2]|0)+24>>2]|0)-(((k[f>>2]|0)>>>0)%((k[(k[c>>2]|0)+24>>2]|0)>>>0)|0);k[(k[c>>2]|0)+48>>2]=k[(k[c>>2]|0)+32>>2]}k[d>>2]=k[(k[c>>2]|0)+8>>2];k[(k[c>>2]|0)+8>>2]=(k[(k[c>>2]|0)+8>>2]|0)+(k[(k[c>>2]|0)+28>>2]|0);f=(k[c>>2]|0)+48|0;k[f>>2]=(k[f>>2]|0)+-1;f=(k[c>>2]|0)+44|0;k[f>>2]=(k[f>>2]|0)+1;g=k[c>>2]|0;h=g+40|0;i=k[h>>2]|0;j=i+1|0;k[h>>2]=j;l=k[d>>2]|0;r=b;return l|0}function le(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;k[k[e>>2]>>2]=k[(k[d>>2]|0)+12>>2];k[(k[d>>2]|0)+12>>2]=k[e>>2];e=(k[d>>2]|0)+40|0;k[e>>2]=(k[e>>2]|0)+-1;r=c;return}function me(a){a=a|0;var b=0,c=0,d=0;b=r;r=r+16|0;c=b+4|0;d=b;k[c>>2]=a;k[(k[c>>2]|0)+16>>2]=k[k[c>>2]>>2];k[d>>2]=(k[(k[c>>2]|0)+16>>2]|0)+4;k[(k[c>>2]|0)+20>>2]=(k[d>>2]|0)+(k[(k[c>>2]|0)+24>>2]|0)-(((k[d>>2]|0)>>>0)%((k[(k[c>>2]|0)+24>>2]|0)>>>0)|0);k[(k[c>>2]|0)+52>>2]=k[(k[c>>2]|0)+36>>2];r=b;return}function ne(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+12|0;d=b+8|0;e=b+4|0;f=b;k[d>>2]=a;if((k[(k[d>>2]|0)+20>>2]|0)==(k[(k[d>>2]|0)+8>>2]|0)){k[c>>2]=0;g=k[c>>2]|0;r=b;return g|0}if(!(k[(k[d>>2]|0)+52>>2]|0)){k[(k[d>>2]|0)+16>>2]=k[k[(k[d>>2]|0)+16>>2]>>2];k[f>>2]=(k[(k[d>>2]|0)+16>>2]|0)+4;k[(k[d>>2]|0)+20>>2]=(k[f>>2]|0)+(k[(k[d>>2]|0)+24>>2]|0)-(((k[f>>2]|0)>>>0)%((k[(k[d>>2]|0)+24>>2]|0)>>>0)|0);k[(k[d>>2]|0)+52>>2]=k[(k[d>>2]|0)+32>>2]}k[e>>2]=k[(k[d>>2]|0)+20>>2];k[(k[d>>2]|0)+20>>2]=(k[(k[d>>2]|0)+20>>2]|0)+(k[(k[d>>2]|0)+28>>2]|0);f=(k[d>>2]|0)+52|0;k[f>>2]=(k[f>>2]|0)+-1;k[c>>2]=k[e>>2];g=k[c>>2]|0;r=b;return g|0}function oe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=r;r=r+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;d=ae((k[h>>2]|0)+(k[(k[f>>2]|0)+24>>2]|0)|0)|0;k[(k[f>>2]|0)+49772>>2]=d;k[j>>2]=k[(k[f>>2]|0)+49772>>2];k[(k[f>>2]|0)+49768>>2]=(k[j>>2]|0)+(k[(k[f>>2]|0)+24>>2]|0)-(((k[j>>2]|0)>>>0)%((k[(k[f>>2]|0)+24>>2]|0)>>>0)|0);k[k[(k[f>>2]|0)+49768>>2]>>2]=k[(k[f>>2]|0)+49768>>2];k[(k[(k[f>>2]|0)+49768>>2]|0)+4>>2]=k[(k[f>>2]|0)+49768>>2];k[(k[(k[f>>2]|0)+49768>>2]|0)+8>>2]=k[(k[f>>2]|0)+49768>>2];k[(k[(k[f>>2]|0)+49768>>2]|0)+12>>2]=0;k[(k[(k[f>>2]|0)+49768>>2]|0)+16>>2]=0;k[(k[(k[f>>2]|0)+49768>>2]|0)+20>>2]=0;if(!(k[(k[g>>2]|0)+120>>2]|0)){r=e;return}g=ae((k[i>>2]|0)+(k[(k[f>>2]|0)+56+24>>2]|0)|0)|0;k[(k[f>>2]|0)+49780>>2]=g;k[j>>2]=k[(k[f>>2]|0)+49780>>2];k[(k[f>>2]|0)+49776>>2]=(k[j>>2]|0)+(k[(k[f>>2]|0)+56+24>>2]|0)-(((k[j>>2]|0)>>>0)%((k[(k[f>>2]|0)+56+24>>2]|0)>>>0)|0);k[k[(k[f>>2]|0)+49776>>2]>>2]=k[(k[f>>2]|0)+49776>>2];k[(k[(k[f>>2]|0)+49776>>2]|0)+4>>2]=k[(k[f>>2]|0)+49776>>2];k[(k[(k[f>>2]|0)+49776>>2]|0)+8>>2]=0;k[(k[(k[f>>2]|0)+49776>>2]|0)+12>>2]=0;k[(k[(k[f>>2]|0)+49776>>2]|0)+16>>2]=0;k[(k[(k[f>>2]|0)+49776>>2]|0)+20>>2]=0;k[(k[(k[f>>2]|0)+49776>>2]|0)+24>>2]=k[(k[f>>2]|0)+49768>>2];k[(k[(k[f>>2]|0)+49776>>2]|0)+28>>2]=k[(k[f>>2]|0)+49768>>2];k[(k[(k[f>>2]|0)+49776>>2]|0)+32>>2]=0;k[(k[(k[f>>2]|0)+49768>>2]|0)+24>>2]=k[(k[f>>2]|0)+49776>>2];k[(k[(k[f>>2]|0)+49768>>2]|0)+28>>2]=k[(k[f>>2]|0)+49776>>2];k[(k[(k[f>>2]|0)+49768>>2]|0)+32>>2]=k[(k[f>>2]|0)+49776>>2];r=e;return}function pe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+16|0;d=c+8|0;e=c+4|0;f=c;k[d>>2]=a;k[e>>2]=b;k[(k[d>>2]|0)+49696>>2]=((((k[(k[d>>2]|0)+49676>>2]|0)+(k[(k[d>>2]|0)+49680>>2]|0)<<3)+4-1|0)>>>0)/4|0;k[f>>2]=(k[(k[d>>2]|0)+49696>>2]|0)+2<<2;if(k[k[e>>2]>>2]|0){k[(k[d>>2]|0)+49700>>2]=(((k[f>>2]|0)+4-1|0)>>>0)/4|0;k[f>>2]=(k[(k[d>>2]|0)+49700>>2]|0)+1<<2}e=(k[d>>2]|0)+112|0;b=k[f>>2]|0;if((k[(k[d>>2]|0)+49648>>2]|0)<=4092){g=4092;ie(e,b,4092,g,8);r=c;return}g=k[(k[d>>2]|0)+49648>>2]|0;ie(e,b,4092,g,8);r=c;return}function qe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=r;r=r+16|0;d=c+8|0;e=c+4|0;f=c;k[d>>2]=a;k[e>>2]=b;k[(k[d>>2]|0)+49704>>2]=6+((k[(k[e>>2]|0)+120>>2]|0)*3|0);b=(ma((k[(k[e>>2]|0)+124>>2]|0)+1|0,(k[(k[e>>2]|0)+124>>2]|0)+2|0)|0)/2|0;k[f>>2]=b+((k[(k[d>>2]|0)+49704>>2]|0)-3)<<2;k[(k[d>>2]|0)+49708>>2]=(((k[f>>2]|0)+8-1|0)>>>0)/8|0;k[(k[d>>2]|0)+49712>>2]=(k[(k[d>>2]|0)+49708>>2]|0)+(k[(k[d>>2]|0)+49684>>2]|0)+(k[(k[e>>2]|0)+24>>2]|0);b=k[d>>2]|0;if(!(k[(k[e>>2]|0)+12>>2]|0)){if(((k[b+49684>>2]|0)+(k[(k[e>>2]|0)+24>>2]|0)|0)>0)k[f>>2]=k[(k[d>>2]|0)+49712>>2]<<3}else k[f>>2]=(k[b+49712>>2]|0)+1<<3;if(k[(k[e>>2]|0)+48>>2]|0){if((k[f>>2]|0)>>>0<28)g=8}else if((k[f>>2]|0)>>>0<28?(k[(k[e>>2]|0)+52>>2]|0)!=0:0)g=8;if((g|0)==8)k[f>>2]=28;if(((k[(k[d>>2]|0)+49648>>2]<<1)-2|0)>4092)h=(k[(k[d>>2]|0)+49648>>2]<<1)-2|0;else h=4092;ie(k[d>>2]|0,k[f>>2]|0,4092,h,4);h=k[d>>2]|0;if(k[(k[e>>2]|0)+120>>2]|0){ie(h+56|0,36,508,508,4);oe(k[d>>2]|0,k[e>>2]|0,k[(k[d>>2]|0)+28>>2]|0,k[(k[d>>2]|0)+56+28>>2]|0);r=c;return}else{oe(h,k[e>>2]|0,k[(k[d>>2]|0)+28>>2]|0,0);r=c;return}}function re(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;k[(k[e>>2]|0)+4>>2]=0;k[(k[e>>2]|0)+12>>2]=0;le(k[d>>2]|0,k[e>>2]|0);r=c;return}function se(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;while(1){a=ne(k[d>>2]|0)|0;k[e>>2]=a;if(!(k[e>>2]|0)){f=3;break}if(k[(k[e>>2]|0)+4>>2]|0){f=5;break}}if((f|0)==3){k[c>>2]=0;g=k[c>>2]|0;r=b;return g|0}else if((f|0)==5){k[c>>2]=k[e>>2];g=k[c>>2]|0;r=b;return g|0}return 0}function te(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;k[(k[e>>2]|0)+4>>2]=0;k[(k[e>>2]|0)+8>>2]=0;le((k[d>>2]|0)+56|0,k[e>>2]|0);r=c;return}function ue(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;while(1){a=ne((k[d>>2]|0)+56|0)|0;k[e>>2]=a;if(!(k[e>>2]|0)){f=3;break}if(k[(k[e>>2]|0)+4>>2]|0){f=5;break}}if((f|0)==3){k[c>>2]=0;g=k[c>>2]|0;r=b;return g|0}else if((f|0)==5){k[c>>2]=k[e>>2];g=k[c>>2]|0;r=b;return g|0}return 0}function ve(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;k[(k[e>>2]|0)+((k[(k[d>>2]|0)+49696>>2]|0)+1<<2)>>2]=-32768;le((k[d>>2]|0)+112|0,k[e>>2]|0);r=c;return}function we(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;while(1){a=ne((k[d>>2]|0)+112|0)|0;k[e>>2]=a;if(!(k[e>>2]|0)){f=3;break}if((k[(k[e>>2]|0)+((k[(k[d>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)!=-32768){f=5;break}}if((f|0)==3){k[c>>2]=0;g=k[c>>2]|0;r=b;return g|0}else if((f|0)==5){k[c>>2]=k[e>>2];g=k[c>>2]|0;r=b;return g|0}return 0}function xe(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;k[(k[e>>2]|0)+4>>2]=0;le((k[d>>2]|0)+224|0,k[e>>2]|0);r=c;return}function ye(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;while(1){a=ne((k[d>>2]|0)+224|0)|0;k[e>>2]=a;if(!(k[e>>2]|0)){f=3;break}if(k[(k[e>>2]|0)+4>>2]|0){f=5;break}}if((f|0)==3){k[c>>2]=0;g=k[c>>2]|0;r=b;return g|0}else if((f|0)==5){k[c>>2]=k[e>>2];g=k[c>>2]|0;r=b;return g|0}return 0}function ze(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+24|0;f=d+20|0;g=d+16|0;h=d+12|0;i=d+8|0;j=d+4|0;l=d;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;k[h>>2]=k[(k[e>>2]|0)+112>>2];k[l>>2]=k[(k[f>>2]|0)+40>>2];a:do if(((k[l>>2]|0)+(k[(k[e>>2]|0)+112+36>>2]|0)|0)<=(k[g>>2]|0)){k[h>>2]=k[k[h>>2]>>2];k[l>>2]=(k[l>>2]|0)+(k[(k[e>>2]|0)+112+36>>2]|0);while(1){if(((k[l>>2]|0)+(k[(k[e>>2]|0)+112+32>>2]|0)|0)>(k[g>>2]|0))break a;k[h>>2]=k[k[h>>2]>>2];k[l>>2]=(k[l>>2]|0)+(k[(k[e>>2]|0)+112+32>>2]|0)}}while(0);k[j>>2]=(k[h>>2]|0)+4;k[i>>2]=(k[j>>2]|0)+(k[(k[e>>2]|0)+112+24>>2]|0)-(((k[j>>2]|0)>>>0)%((k[(k[e>>2]|0)+112+24>>2]|0)>>>0)|0);j=(k[i>>2]|0)+(ma(k[(k[e>>2]|0)+112+28>>2]|0,(k[g>>2]|0)-(k[l>>2]|0)|0)|0)|0;r=d;return j|0}function Ae(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;je(k[d>>2]|0);be(k[(k[d>>2]|0)+49772>>2]|0);if(k[(k[e>>2]|0)+120>>2]|0){je((k[d>>2]|0)+56|0);be(k[(k[d>>2]|0)+49780>>2]|0)}je((k[d>>2]|0)+112|0);if(!(k[(k[e>>2]|0)+8>>2]|0)){r=c;return}je((k[d>>2]|0)+224|0);if(((!(+p[(k[e>>2]|0)+136>>3]>0.0)?(k[(k[e>>2]|0)+12>>2]|0)==0:0)?(k[(k[e>>2]|0)+16>>2]|0)==0:0)?(k[(k[e>>2]|0)+20>>2]|0)==0:0){r=c;return}je((k[d>>2]|0)+280|0);je((k[d>>2]|0)+336|0);r=c;return}function Be(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=r;r=r+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;c=ke(k[e>>2]|0)|0;k[k[g>>2]>>2]=c;k[k[k[g>>2]>>2]>>2]=k[(k[e>>2]|0)+49768>>2];k[(k[k[g>>2]>>2]|0)+4>>2]=k[(k[e>>2]|0)+49768>>2];k[(k[k[g>>2]>>2]|0)+8>>2]=k[(k[e>>2]|0)+49768>>2];k[(k[k[g>>2]>>2]|0)+12>>2]=0;k[(k[k[g>>2]>>2]|0)+16>>2]=0;k[(k[k[g>>2]>>2]|0)+20>>2]=0;if(k[(k[f>>2]|0)+120>>2]|0){k[(k[k[g>>2]>>2]|0)+24>>2]=k[(k[e>>2]|0)+49776>>2];k[(k[k[g>>2]>>2]|0)+28>>2]=k[(k[e>>2]|0)+49776>>2];k[(k[k[g>>2]>>2]|0)+32>>2]=k[(k[e>>2]|0)+49776>>2]}k[h>>2]=0;while(1){if((k[h>>2]|0)>=(k[(k[e>>2]|0)+49684>>2]|0))break;p[(k[k[g>>2]>>2]|0)+((k[(k[e>>2]|0)+49708>>2]|0)+(k[h>>2]|0)<<3)>>3]=0.0;k[h>>2]=(k[h>>2]|0)+1}if(!(k[(k[f>>2]|0)+12>>2]|0)){i=k[g>>2]|0;j=i+4|0;k[j>>2]=0;r=d;return}p[(k[k[g>>2]>>2]|0)+(k[(k[e>>2]|0)+49712>>2]<<3)>>3]=-1.0;i=k[g>>2]|0;j=i+4|0;k[j>>2]=0;r=d;return}function Ce(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r;r=r+16|0;d=c+4|0;e=c;k[d>>2]=a;k[e>>2]=b;b=ke((k[d>>2]|0)+56|0)|0;k[k[e>>2]>>2]=b;k[k[k[e>>2]>>2]>>2]=k[(k[d>>2]|0)+49776>>2];k[(k[k[e>>2]>>2]|0)+4>>2]=k[(k[d>>2]|0)+49776>>2];k[(k[k[e>>2]>>2]|0)+8>>2]=0;k[(k[k[e>>2]>>2]|0)+12>>2]=0;k[(k[k[e>>2]>>2]|0)+16>>2]=0;k[(k[k[e>>2]>>2]|0)+20>>2]=0;k[(k[k[e>>2]>>2]|0)+24>>2]=k[(k[d>>2]|0)+49768>>2];k[(k[k[e>>2]>>2]|0)+28>>2]=k[(k[d>>2]|0)+49768>>2];k[(k[k[e>>2]>>2]|0)+32>>2]=0;k[(k[e>>2]|0)+4>>2]=0;r=c;return}function De(){var a=0,b=0,c=0,d=0,e=0;a=r;r=r+32|0;b=a+16|0;c=a+8|0;d=a;e=a+24|0;k[e>>2]=1;p[b>>3]=.5;p[6]=1.0;p[5]=1.0;p[c>>3]=1.0;do{p[d>>3]=+p[c>>3];p[6]=+p[6]*+p[b>>3];if(k[e>>2]|0)p[5]=+p[5]*2.0;k[e>>2]=((k[e>>2]|0)!=0^1)&1;p[c>>3]=+p[6]+1.0;if(!(+p[c>>3]!=1.0))break}while(+p[c>>3]!=+p[d>>3]);p[5]=+p[5]+1.0;p[7]=(+p[6]*8.0+3.0)*+p[6];p[8]=(+p[6]*16.0+3.0)*+p[6];p[9]=(+p[6]*12.0+2.0)*+p[6];p[10]=(+p[6]*64.0+9.0)*+p[6]*+p[6];p[11]=(+p[6]*96.0+10.0)*+p[6];p[12]=(+p[6]*48.0+4.0)*+p[6];p[13]=(+p[6]*576.0+44.0)*+p[6]*+p[6];p[14]=(+p[6]*56.0+7.0)*+p[6];p[15]=(+p[6]*28.0+3.0)*+p[6];p[16]=(+p[6]*288.0+26.0)*+p[6]*+p[6];r=a;return}function Ee(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;f=r;r=r+112|0;g=f+100|0;h=f+96|0;i=f+92|0;j=f+88|0;l=f+84|0;m=f+64|0;n=f+56|0;o=f+48|0;q=f+40|0;s=f+32|0;t=f+24|0;u=f+16|0;v=f+80|0;w=f+76|0;x=f+72|0;y=f+8|0;z=f;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;k[l>>2]=e;p[y>>3]=+p[k[h>>2]>>3];p[z>>3]=+p[k[j>>2]>>3];k[w>>2]=0;k[v>>2]=0;if((+p[z>>3]>+p[y>>3]|0)==(+p[z>>3]>-+p[y>>3]|0)){p[m>>3]=+p[y>>3];e=(k[v>>2]|0)+1|0;k[v>>2]=e;p[y>>3]=+p[(k[h>>2]|0)+(e<<3)>>3]}else{p[m>>3]=+p[z>>3];e=(k[w>>2]|0)+1|0;k[w>>2]=e;p[z>>3]=+p[(k[j>>2]|0)+(e<<3)>>3]}k[x>>2]=0;a:do if((k[v>>2]|0)<(k[g>>2]|0)?(k[w>>2]|0)<(k[i>>2]|0):0){if((+p[z>>3]>+p[y>>3]|0)==(+p[z>>3]>-+p[y>>3]|0)){p[n>>3]=+p[y>>3]+ +p[m>>3];p[q>>3]=+p[n>>3]-+p[y>>3];p[o>>3]=+p[m>>3]-+p[q>>3];e=(k[v>>2]|0)+1|0;k[v>>2]=e;p[y>>3]=+p[(k[h>>2]|0)+(e<<3)>>3]}else{p[n>>3]=+p[z>>3]+ +p[m>>3];p[q>>3]=+p[n>>3]-+p[z>>3];p[o>>3]=+p[m>>3]-+p[q>>3];e=(k[w>>2]|0)+1|0;k[w>>2]=e;p[z>>3]=+p[(k[j>>2]|0)+(e<<3)>>3]}p[m>>3]=+p[n>>3];if(+p[o>>3]!=0.0){A=+p[o>>3];e=k[x>>2]|0;k[x>>2]=e+1;p[(k[l>>2]|0)+(e<<3)>>3]=A}while(1){if((k[v>>2]|0)>=(k[g>>2]|0))break a;if((k[w>>2]|0)>=(k[i>>2]|0))break a;A=+p[m>>3];if((+p[z>>3]>+p[y>>3]|0)==(+p[z>>3]>-+p[y>>3]|0)){p[n>>3]=A+ +p[y>>3];p[q>>3]=+p[n>>3]-+p[m>>3];p[s>>3]=+p[n>>3]-+p[q>>3];p[t>>3]=+p[y>>3]-+p[q>>3];p[u>>3]=+p[m>>3]-+p[s>>3];p[o>>3]=+p[u>>3]+ +p[t>>3];e=(k[v>>2]|0)+1|0;k[v>>2]=e;p[y>>3]=+p[(k[h>>2]|0)+(e<<3)>>3]}else{p[n>>3]=A+ +p[z>>3];p[q>>3]=+p[n>>3]-+p[m>>3];p[s>>3]=+p[n>>3]-+p[q>>3];p[t>>3]=+p[z>>3]-+p[q>>3];p[u>>3]=+p[m>>3]-+p[s>>3];p[o>>3]=+p[u>>3]+ +p[t>>3];e=(k[w>>2]|0)+1|0;k[w>>2]=e;p[z>>3]=+p[(k[j>>2]|0)+(e<<3)>>3]}p[m>>3]=+p[n>>3];if(!(+p[o>>3]!=0.0))continue;A=+p[o>>3];e=k[x>>2]|0;k[x>>2]=e+1;p[(k[l>>2]|0)+(e<<3)>>3]=A}}while(0);while(1){if((k[v>>2]|0)>=(k[g>>2]|0))break;p[n>>3]=+p[m>>3]+ +p[y>>3];p[q>>3]=+p[n>>3]-+p[m>>3];p[s>>3]=+p[n>>3]-+p[q>>3];p[t>>3]=+p[y>>3]-+p[q>>3];p[u>>3]=+p[m>>3]-+p[s>>3];p[o>>3]=+p[u>>3]+ +p[t>>3];e=(k[v>>2]|0)+1|0;k[v>>2]=e;p[y>>3]=+p[(k[h>>2]|0)+(e<<3)>>3];p[m>>3]=+p[n>>3];if(!(+p[o>>3]!=0.0))continue;A=+p[o>>3];e=k[x>>2]|0;k[x>>2]=e+1;p[(k[l>>2]|0)+(e<<3)>>3]=A}while(1){B=+p[m>>3];if((k[w>>2]|0)>=(k[i>>2]|0))break;p[n>>3]=B+ +p[z>>3];p[q>>3]=+p[n>>3]-+p[m>>3];p[s>>3]=+p[n>>3]-+p[q>>3];p[t>>3]=+p[z>>3]-+p[q>>3];p[u>>3]=+p[m>>3]-+p[s>>3];p[o>>3]=+p[u>>3]+ +p[t>>3];h=(k[w>>2]|0)+1|0;k[w>>2]=h;p[z>>3]=+p[(k[j>>2]|0)+(h<<3)>>3];p[m>>3]=+p[n>>3];if(!(+p[o>>3]!=0.0))continue;A=+p[o>>3];h=k[x>>2]|0;k[x>>2]=h+1;p[(k[l>>2]|0)+(h<<3)>>3]=A}if(!(B!=0.0|(k[x>>2]|0)==0)){C=k[x>>2]|0;r=f;return C|0}B=+p[m>>3];m=k[x>>2]|0;k[x>>2]=m+1;p[(k[l>>2]|0)+(m<<3)>>3]=B;C=k[x>>2]|0;r=f;return C|0}function Fe(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=r;r=r+192|0;f=e+176|0;g=e+172|0;h=e+152|0;i=e+168|0;j=e+144|0;l=e+136|0;m=e+128|0;n=e+120|0;o=e+112|0;q=e+164|0;s=e+160|0;t=e+104|0;u=e+96|0;v=e+88|0;w=e+80|0;x=e+72|0;y=e+64|0;z=e+56|0;A=e+48|0;B=e+40|0;C=e+32|0;D=e+24|0;E=e+16|0;F=e+8|0;G=e;k[f>>2]=a;k[g>>2]=b;p[h>>3]=c;k[i>>2]=d;p[y>>3]=+p[5]*+p[h>>3];p[z>>3]=+p[y>>3]-+p[h>>3];p[C>>3]=+p[y>>3]-+p[z>>3];p[D>>3]=+p[h>>3]-+p[C>>3];p[j>>3]=+p[k[g>>2]>>3]*+p[h>>3];p[y>>3]=+p[5]*+p[k[g>>2]>>3];p[z>>3]=+p[y>>3]-+p[k[g>>2]>>3];p[A>>3]=+p[y>>3]-+p[z>>3];p[B>>3]=+p[k[g>>2]>>3]-+p[A>>3];p[E>>3]=+p[j>>3]-+p[A>>3]*+p[C>>3];p[F>>3]=+p[E>>3]-+p[B>>3]*+p[C>>3];p[G>>3]=+p[F>>3]-+p[A>>3]*+p[D>>3];p[m>>3]=+p[B>>3]*+p[D>>3]-+p[G>>3];k[s>>2]=0;if(+p[m>>3]!=0.0){c=+p[m>>3];d=k[s>>2]|0;k[s>>2]=d+1;p[(k[i>>2]|0)+(d<<3)>>3]=c}k[q>>2]=1;while(1){if((k[q>>2]|0)>=(k[f>>2]|0))break;p[t>>3]=+p[(k[g>>2]|0)+(k[q>>2]<<3)>>3];p[n>>3]=+p[t>>3]*+p[h>>3];p[y>>3]=+p[5]*+p[t>>3];p[z>>3]=+p[y>>3]-+p[t>>3];p[A>>3]=+p[y>>3]-+p[z>>3];p[B>>3]=+p[t>>3]-+p[A>>3];p[E>>3]=+p[n>>3]-+p[A>>3]*+p[C>>3];p[F>>3]=+p[E>>3]-+p[B>>3]*+p[C>>3];p[G>>3]=+p[F>>3]-+p[A>>3]*+p[D>>3];p[o>>3]=+p[B>>3]*+p[D>>3]-+p[G>>3];p[l>>3]=+p[j>>3]+ +p[o>>3];p[u>>3]=+p[l>>3]-+p[j>>3];p[v>>3]=+p[l>>3]-+p[u>>3];p[w>>3]=+p[o>>3]-+p[u>>3];p[x>>3]=+p[j>>3]-+p[v>>3];p[m>>3]=+p[x>>3]+ +p[w>>3];if(+p[m>>3]!=0.0){c=+p[m>>3];d=k[s>>2]|0;k[s>>2]=d+1;p[(k[i>>2]|0)+(d<<3)>>3]=c}p[j>>3]=+p[n>>3]+ +p[l>>3];p[u>>3]=+p[j>>3]-+p[n>>3];p[m>>3]=+p[l>>3]-+p[u>>3];if(+p[m>>3]!=0.0){c=+p[m>>3];d=k[s>>2]|0;k[s>>2]=d+1;p[(k[i>>2]|0)+(d<<3)>>3]=c}k[q>>2]=(k[q>>2]|0)+1}if(!(+p[j>>3]!=0.0|(k[s>>2]|0)==0)){H=k[s>>2]|0;r=e;return H|0}c=+p[j>>3];j=k[s>>2]|0;k[s>>2]=j+1;p[(k[i>>2]|0)+(j<<3)>>3]=c;H=k[s>>2]|0;r=e;return H|0}function Ge(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+16|0;e=c+12|0;f=c;g=c+8|0;k[d>>2]=a;k[e>>2]=b;p[f>>3]=+p[k[e>>2]>>3];k[g>>2]=1;while(1){if((k[g>>2]|0)>=(k[d>>2]|0))break;p[f>>3]=+p[f>>3]+ +p[(k[e>>2]|0)+(k[g>>2]<<3)>>3];k[g>>2]=(k[g>>2]|0)+1}r=c;return +(+p[f>>3])}function He(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0.0;e=r;r=r+688|0;f=e+648|0;g=e+676|0;h=e+672|0;i=e+668|0;j=e+640|0;l=e+632|0;m=e+624|0;n=e+616|0;o=e+608|0;q=e+600|0;s=e+592|0;t=e+584|0;u=e+576|0;v=e+568|0;w=e+560|0;x=e+552|0;y=e+544|0;z=e+536|0;A=e+528|0;B=e+496|0;C=e+432|0;D=e+336|0;E=e+208|0;F=e+200|0;G=e+664|0;H=e+660|0;I=e+656|0;J=e+168|0;K=e+160|0;L=e+152|0;M=e+144|0;N=e+136|0;O=e+128|0;P=e+120|0;Q=e+112|0;R=e+104|0;S=e+96|0;T=e+88|0;U=e+80|0;V=e+72|0;W=e+64|0;X=e+56|0;Y=e+48|0;Z=e+40|0;_=e+32|0;$=e+24|0;aa=e+16|0;ba=e+8|0;ca=e;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;p[j>>3]=d;p[l>>3]=+p[k[g>>2]>>3]-+p[k[i>>2]>>3];p[n>>3]=+p[k[h>>2]>>3]-+p[k[i>>2]>>3];p[m>>3]=+p[(k[g>>2]|0)+8>>3]-+p[(k[i>>2]|0)+8>>3];p[o>>3]=+p[(k[h>>2]|0)+8>>3]-+p[(k[i>>2]|0)+8>>3];p[v>>3]=+p[l>>3]*+p[o>>3];p[T>>3]=+p[5]*+p[l>>3];p[U>>3]=+p[T>>3]-+p[l>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[l>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[o>>3];p[U>>3]=+p[T>>3]-+p[o>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[o>>3]-+p[X>>3];p[Z>>3]=+p[v>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[x>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[w>>3]=+p[m>>3]*+p[n>>3];p[T>>3]=+p[5]*+p[m>>3];p[U>>3]=+p[T>>3]-+p[m>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[m>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[n>>3];p[U>>3]=+p[T>>3]-+p[n>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[n>>3]-+p[X>>3];p[Z>>3]=+p[w>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[y>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[aa>>3]=+p[x>>3]-+p[y>>3];p[P>>3]=+p[x>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[y>>3];p[S>>3]=+p[x>>3]-+p[Q>>3];p[B>>3]=+p[S>>3]+ +p[R>>3];p[ba>>3]=+p[v>>3]+ +p[aa>>3];p[P>>3]=+p[ba>>3]-+p[v>>3];p[Q>>3]=+p[ba>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[v>>3]-+p[Q>>3];p[ca>>3]=+p[S>>3]+ +p[R>>3];p[aa>>3]=+p[ca>>3]-+p[w>>3];p[P>>3]=+p[ca>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[w>>3];p[S>>3]=+p[ca>>3]-+p[Q>>3];p[B+8>>3]=+p[S>>3]+ +p[R>>3];p[F>>3]=+p[ba>>3]+ +p[aa>>3];p[P>>3]=+p[F>>3]-+p[ba>>3];p[Q>>3]=+p[F>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[ba>>3]-+p[Q>>3];p[B+16>>3]=+p[S>>3]+ +p[R>>3];p[B+24>>3]=+p[F>>3];d=+Ge(4,B);p[z>>3]=d;p[A>>3]=+p[9]*+p[j>>3];if(!(+p[z>>3]>=+p[A>>3])?!(-+p[z>>3]>=+p[A>>3]):0){p[P>>3]=+p[k[g>>2]>>3]-+p[l>>3];p[Q>>3]=+p[l>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[k[i>>2]>>3];p[S>>3]=+p[k[g>>2]>>3]-+p[Q>>3];p[q>>3]=+p[S>>3]+ +p[R>>3];p[P>>3]=+p[k[h>>2]>>3]-+p[n>>3];p[Q>>3]=+p[n>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[k[i>>2]>>3];p[S>>3]=+p[k[h>>2]>>3]-+p[Q>>3];p[t>>3]=+p[S>>3]+ +p[R>>3];p[P>>3]=+p[(k[g>>2]|0)+8>>3]-+p[m>>3];p[Q>>3]=+p[m>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[(k[i>>2]|0)+8>>3];p[S>>3]=+p[(k[g>>2]|0)+8>>3]-+p[Q>>3];p[s>>3]=+p[S>>3]+ +p[R>>3];p[P>>3]=+p[(k[h>>2]|0)+8>>3]-+p[o>>3];p[Q>>3]=+p[o>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[(k[i>>2]|0)+8>>3];p[S>>3]=+p[(k[h>>2]|0)+8>>3]-+p[Q>>3];p[u>>3]=+p[S>>3]+ +p[R>>3];if(+p[q>>3]==0.0&+p[s>>3]==0.0&+p[t>>3]==0.0&+p[u>>3]==0.0){p[f>>3]=+p[z>>3];da=+p[f>>3];r=e;return +da}d=+p[z>>3];p[A>>3]=+p[10]*+p[j>>3]+ +p[7]*(+p[z>>3]>=0.0?d:-d);p[z>>3]=+p[z>>3]+(+p[l>>3]*+p[u>>3]+ +p[o>>3]*+p[q>>3]-(+p[m>>3]*+p[t>>3]+ +p[n>>3]*+p[s>>3]));if(!(+p[z>>3]>=+p[A>>3])?!(-+p[z>>3]>=+p[A>>3]):0){p[L>>3]=+p[q>>3]*+p[o>>3];p[T>>3]=+p[5]*+p[q>>3];p[U>>3]=+p[T>>3]-+p[q>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[q>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[o>>3];p[U>>3]=+p[T>>3]-+p[o>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[o>>3]-+p[X>>3];p[Z>>3]=+p[L>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[N>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[M>>3]=+p[s>>3]*+p[n>>3];p[T>>3]=+p[5]*+p[s>>3];p[U>>3]=+p[T>>3]-+p[s>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[s>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[n>>3];p[U>>3]=+p[T>>3]-+p[n>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[n>>3]-+p[X>>3];p[Z>>3]=+p[M>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[O>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[aa>>3]=+p[N>>3]-+p[O>>3];p[P>>3]=+p[N>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[O>>3];p[S>>3]=+p[N>>3]-+p[Q>>3];p[J>>3]=+p[S>>3]+ +p[R>>3];p[ba>>3]=+p[L>>3]+ +p[aa>>3];p[P>>3]=+p[ba>>3]-+p[L>>3];p[Q>>3]=+p[ba>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[L>>3]-+p[Q>>3];p[ca>>3]=+p[S>>3]+ +p[R>>3];p[aa>>3]=+p[ca>>3]-+p[M>>3];p[P>>3]=+p[ca>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[M>>3];p[S>>3]=+p[ca>>3]-+p[Q>>3];p[J+8>>3]=+p[S>>3]+ +p[R>>3];p[K>>3]=+p[ba>>3]+ +p[aa>>3];p[P>>3]=+p[K>>3]-+p[ba>>3];p[Q>>3]=+p[K>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[ba>>3]-+p[Q>>3];p[J+16>>3]=+p[S>>3]+ +p[R>>3];p[J+24>>3]=+p[K>>3];n=Ee(4,B,4,J,C)|0;k[G>>2]=n;p[L>>3]=+p[l>>3]*+p[u>>3];p[T>>3]=+p[5]*+p[l>>3];p[U>>3]=+p[T>>3]-+p[l>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[l>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[u>>3];p[U>>3]=+p[T>>3]-+p[u>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[u>>3]-+p[X>>3];p[Z>>3]=+p[L>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[N>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[M>>3]=+p[m>>3]*+p[t>>3];p[T>>3]=+p[5]*+p[m>>3];p[U>>3]=+p[T>>3]-+p[m>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[m>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[t>>3];p[U>>3]=+p[T>>3]-+p[t>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[t>>3]-+p[X>>3];p[Z>>3]=+p[M>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[O>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[aa>>3]=+p[N>>3]-+p[O>>3];p[P>>3]=+p[N>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[O>>3];p[S>>3]=+p[N>>3]-+p[Q>>3];p[J>>3]=+p[S>>3]+ +p[R>>3];p[ba>>3]=+p[L>>3]+ +p[aa>>3];p[P>>3]=+p[ba>>3]-+p[L>>3];p[Q>>3]=+p[ba>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[L>>3]-+p[Q>>3];p[ca>>3]=+p[S>>3]+ +p[R>>3];p[aa>>3]=+p[ca>>3]-+p[M>>3];p[P>>3]=+p[ca>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[M>>3];p[S>>3]=+p[ca>>3]-+p[Q>>3];p[J+8>>3]=+p[S>>3]+ +p[R>>3];p[K>>3]=+p[ba>>3]+ +p[aa>>3];p[P>>3]=+p[K>>3]-+p[ba>>3];p[Q>>3]=+p[K>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[ba>>3]-+p[Q>>3];p[J+16>>3]=+p[S>>3]+ +p[R>>3];p[J+24>>3]=+p[K>>3];m=Ee(k[G>>2]|0,C,4,J,D)|0;k[H>>2]=m;p[L>>3]=+p[q>>3]*+p[u>>3];p[T>>3]=+p[5]*+p[q>>3];p[U>>3]=+p[T>>3]-+p[q>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[q>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[u>>3];p[U>>3]=+p[T>>3]-+p[u>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[u>>3]-+p[X>>3];p[Z>>3]=+p[L>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[N>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[M>>3]=+p[s>>3]*+p[t>>3];p[T>>3]=+p[5]*+p[s>>3];p[U>>3]=+p[T>>3]-+p[s>>3];p[V>>3]=+p[T>>3]-+p[U>>3];p[W>>3]=+p[s>>3]-+p[V>>3];p[T>>3]=+p[5]*+p[t>>3];p[U>>3]=+p[T>>3]-+p[t>>3];p[X>>3]=+p[T>>3]-+p[U>>3];p[Y>>3]=+p[t>>3]-+p[X>>3];p[Z>>3]=+p[M>>3]-+p[V>>3]*+p[X>>3];p[_>>3]=+p[Z>>3]-+p[W>>3]*+p[X>>3];p[$>>3]=+p[_>>3]-+p[V>>3]*+p[Y>>3];p[O>>3]=+p[W>>3]*+p[Y>>3]-+p[$>>3];p[aa>>3]=+p[N>>3]-+p[O>>3];p[P>>3]=+p[N>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[O>>3];p[S>>3]=+p[N>>3]-+p[Q>>3];p[J>>3]=+p[S>>3]+ +p[R>>3];p[ba>>3]=+p[L>>3]+ +p[aa>>3];p[P>>3]=+p[ba>>3]-+p[L>>3];p[Q>>3]=+p[ba>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[L>>3]-+p[Q>>3];p[ca>>3]=+p[S>>3]+ +p[R>>3];p[aa>>3]=+p[ca>>3]-+p[M>>3];p[P>>3]=+p[ca>>3]-+p[aa>>3];p[Q>>3]=+p[aa>>3]+ +p[P>>3];p[R>>3]=+p[P>>3]-+p[M>>3];p[S>>3]=+p[ca>>3]-+p[Q>>3];p[J+8>>3]=+p[S>>3]+ +p[R>>3];p[K>>3]=+p[ba>>3]+ +p[aa>>3];p[P>>3]=+p[K>>3]-+p[ba>>3];p[Q>>3]=+p[K>>3]-+p[P>>3];p[R>>3]=+p[aa>>3]-+p[P>>3];p[S>>3]=+p[ba>>3]-+p[Q>>3];p[J+16>>3]=+p[S>>3]+ +p[R>>3];p[J+24>>3]=+p[K>>3];K=Ee(k[H>>2]|0,D,4,J,E)|0;k[I>>2]=K;p[f>>3]=+p[E+((k[I>>2]|0)-1<<3)>>3];da=+p[f>>3];r=e;return +da}p[f>>3]=+p[z>>3];da=+p[f>>3];r=e;return +da}p[f>>3]=+p[z>>3];da=+p[f>>3];r=e;return +da}function Ie(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0.0,v=0.0;f=r;r=r+80|0;g=f+40|0;h=f+64|0;i=f+60|0;j=f+56|0;l=f+52|0;m=f+48|0;n=f+32|0;o=f+24|0;q=f+16|0;s=f+8|0;t=f;k[h>>2]=a;k[i>>2]=b;k[j>>2]=c;k[l>>2]=d;k[m>>2]=e;e=(k[h>>2]|0)+49736|0;k[e>>2]=(k[e>>2]|0)+1;p[n>>3]=(+p[k[j>>2]>>3]-+p[k[m>>2]>>3])*(+p[(k[l>>2]|0)+8>>3]-+p[(k[m>>2]|0)+8>>3]);p[o>>3]=(+p[(k[j>>2]|0)+8>>3]-+p[(k[m>>2]|0)+8>>3])*(+p[k[l>>2]>>3]-+p[k[m>>2]>>3]);p[q>>3]=+p[n>>3]-+p[o>>3];if(k[(k[i>>2]|0)+84>>2]|0){p[g>>3]=+p[q>>3];u=+p[g>>3];r=f;return +u}do if(+p[n>>3]>0.0){if(!(+p[o>>3]<=0.0)){p[s>>3]=+p[n>>3]+ +p[o>>3];break}p[g>>3]=+p[q>>3];u=+p[g>>3];r=f;return +u}else{if(!(+p[n>>3]<0.0)){p[g>>3]=+p[q>>3];u=+p[g>>3];r=f;return +u}if(!(+p[o>>3]>=0.0)){p[s>>3]=-+p[n>>3]-+p[o>>3];break}p[g>>3]=+p[q>>3];u=+p[g>>3];r=f;return +u}while(0);p[t>>3]=+p[8]*+p[s>>3];if(!(+p[q>>3]>=+p[t>>3])?!(-+p[q>>3]>=+p[t>>3]):0){v=+He(k[j>>2]|0,k[l>>2]|0,k[m>>2]|0,+p[s>>3]);p[g>>3]=v;u=+p[g>>3];r=f;return +u}p[g>>3]=+p[q>>3];u=+p[g>>3];r=f;return +u}function Je(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0.0;f=r;r=r+26416|0;g=f+26136|0;h=f+26412|0;i=f+26408|0;j=f+26404|0;l=f+26400|0;m=f+26128|0;n=f+26120|0;o=f+26112|0;q=f+26104|0;s=f+26096|0;t=f+26088|0;u=f+26080|0;v=f+26072|0;w=f+26064|0;x=f+26056|0;y=f+26048|0;z=f+26040|0;A=f+26032|0;B=f+26024|0;C=f+26016|0;D=f+26008|0;E=f+26e3|0;F=f+25992|0;G=f+25984|0;H=f+25976|0;I=f+25968|0;J=f+25936|0;K=f+25904|0;L=f+25872|0;M=f+25864|0;N=f+25856|0;O=f+25848|0;P=f+25784|0;Q=f+25656|0;R=f+25592|0;S=f+25464|0;T=f+25208|0;U=f+26396|0;V=f+26392|0;W=f+26388|0;X=f+26384|0;Y=f+26380|0;Z=f+25144|0;_=f+25016|0;$=f+24952|0;aa=f+24824|0;ba=f+24568|0;ca=f+26376|0;da=f+26372|0;ea=f+26368|0;fa=f+26364|0;ga=f+26360|0;ha=f+24504|0;ia=f+24376|0;ja=f+24312|0;ka=f+24184|0;la=f+23928|0;ma=f+26356|0;na=f+26352|0;oa=f+26348|0;pa=f+26344|0;qa=f+26340|0;ra=f+23416|0;sa=f+26336|0;ta=f+14200|0;ua=f+4984|0;va=f+26332|0;wa=f+26328|0;xa=f+26324|0;ya=f+26320|0;za=f+4976|0;Aa=f+4968|0;Ba=f+4960|0;Ca=f+4952|0;Da=f+4944|0;Ea=f+4936|0;Fa=f+4928|0;Ga=f+4920|0;Ha=f+4912|0;Ia=f+4904|0;Ja=f+4896|0;Ka=f+4888|0;La=f+4880|0;Ma=f+4872|0;Na=f+4864|0;Oa=f+4856|0;Pa=f+4848|0;Qa=f+4840|0;Ra=f+4808|0;Sa=f+4776|0;Ta=f+4744|0;Ua=f+4736|0;Va=f+4728|0;Wa=f+4720|0;Xa=f+4712|0;Ya=f+4704|0;Za=f+4696|0;_a=f+4688|0;$a=f+4656|0;ab=f+4624|0;bb=f+4616|0;cb=f+4608|0;db=f+4544|0;eb=f+4416|0;fb=f+4288|0;gb=f+4160|0;hb=f+3904|0;ib=f+3648|0;jb=f+3264|0;kb=f+2752|0;lb=f+26316|0;mb=f+26312|0;nb=f+26308|0;ob=f+26304|0;pb=f+26300|0;qb=f+26296|0;rb=f+26292|0;sb=f+26288|0;tb=f+2688|0;ub=f+2624|0;vb=f+2560|0;wb=f+2496|0;xb=f+26284|0;yb=f+26280|0;zb=f+26276|0;Ab=f+26272|0;Bb=f+2432|0;Cb=f+2368|0;Db=f+2304|0;Eb=f+2240|0;Fb=f+26268|0;Gb=f+26264|0;Hb=f+26260|0;Ib=f+26256|0;Jb=f+2176|0;Kb=f+2112|0;Lb=f+2048|0;Mb=f+1984|0;Nb=f+26252|0;Ob=f+26248|0;Pb=f+26244|0;Qb=f+26240|0;Rb=f+1920|0;Sb=f+1856|0;Tb=f+1792|0;Ub=f+1728|0;Vb=f+1664|0;Wb=f+1600|0;Xb=f+26236|0;Yb=f+26232|0;Zb=f+26228|0;_b=f+26224|0;$b=f+26220|0;ac=f+26216|0;bc=f+1472|0;cc=f+1344|0;dc=f+1216|0;ec=f+1088|0;fc=f+960|0;gc=f+832|0;hc=f+26212|0;ic=f+26208|0;jc=f+26204|0;kc=f+26200|0;lc=f+26196|0;mc=f+26192|0;nc=f+768|0;oc=f+704|0;pc=f+640|0;qc=f+576|0;rc=f+512|0;sc=f+448|0;tc=f+26188|0;uc=f+26184|0;vc=f+26180|0;wc=f+26176|0;xc=f+26172|0;yc=f+26168|0;zc=f+384|0;Ac=f+320|0;Bc=f+256|0;Cc=f+26164|0;Dc=f+26160|0;Ec=f+26156|0;Fc=f+224|0;Gc=f+192|0;Hc=f+160|0;Ic=f+26152|0;Jc=f+26148|0;Kc=f+26144|0;Lc=f+152|0;Mc=f+144|0;Nc=f+136|0;Oc=f+128|0;Pc=f+120|0;Qc=f+112|0;Rc=f+104|0;Sc=f+96|0;Tc=f+88|0;Uc=f+80|0;Vc=f+72|0;Wc=f+64|0;Xc=f+56|0;Yc=f+48|0;Zc=f+40|0;_c=f+32|0;$c=f+24|0;ad=f+16|0;bd=f+8|0;cd=f;k[h>>2]=a;k[i>>2]=b;k[j>>2]=c;k[l>>2]=d;p[m>>3]=e;p[n>>3]=+p[k[h>>2]>>3]-+p[k[l>>2]>>3];p[o>>3]=+p[k[i>>2]>>3]-+p[k[l>>2]>>3];p[q>>3]=+p[k[j>>2]>>3]-+p[k[l>>2]>>3];p[s>>3]=+p[(k[h>>2]|0)+8>>3]-+p[(k[l>>2]|0)+8>>3];p[t>>3]=+p[(k[i>>2]|0)+8>>3]-+p[(k[l>>2]|0)+8>>3];p[u>>3]=+p[(k[j>>2]|0)+8>>3]-+p[(k[l>>2]|0)+8>>3];p[x>>3]=+p[o>>3]*+p[u>>3];p[Tc>>3]=+p[5]*+p[o>>3];p[Uc>>3]=+p[Tc>>3]-+p[o>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[o>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[u>>3];p[Uc>>3]=+p[Tc>>3]-+p[u>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[u>>3]-+p[Xc>>3];p[Zc>>3]=+p[x>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[D>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[y>>3]=+p[q>>3]*+p[t>>3];p[Tc>>3]=+p[5]*+p[q>>3];p[Uc>>3]=+p[Tc>>3]-+p[q>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[q>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[t>>3];p[Uc>>3]=+p[Tc>>3]-+p[t>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[t>>3]-+p[Xc>>3];p[Zc>>3]=+p[y>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[E>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[D>>3]-+p[E>>3];p[Pc>>3]=+p[D>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[E>>3];p[Sc>>3]=+p[D>>3]-+p[Qc>>3];p[J>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[x>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[x>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[x>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[y>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[y>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[J+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[M>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[M>>3]-+p[bd>>3];p[Qc>>3]=+p[M>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[J+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[J+24>>3]=+p[M>>3];M=Fe(4,J,+p[n>>3],P)|0;k[U>>2]=M;M=Fe(k[U>>2]|0,P,+p[n>>3],Q)|0;k[V>>2]=M;M=Fe(4,J,+p[s>>3],R)|0;k[W>>2]=M;M=Fe(k[W>>2]|0,R,+p[s>>3],S)|0;k[X>>2]=M;M=Ee(k[V>>2]|0,Q,k[X>>2]|0,S,T)|0;k[Y>>2]=M;p[z>>3]=+p[q>>3]*+p[s>>3];p[Tc>>3]=+p[5]*+p[q>>3];p[Uc>>3]=+p[Tc>>3]-+p[q>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[q>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[s>>3];p[Uc>>3]=+p[Tc>>3]-+p[s>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[s>>3]-+p[Xc>>3];p[Zc>>3]=+p[z>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[F>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[A>>3]=+p[n>>3]*+p[u>>3];p[Tc>>3]=+p[5]*+p[n>>3];p[Uc>>3]=+p[Tc>>3]-+p[n>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[n>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[u>>3];p[Uc>>3]=+p[Tc>>3]-+p[u>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[u>>3]-+p[Xc>>3];p[Zc>>3]=+p[A>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[G>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[F>>3]-+p[G>>3];p[Pc>>3]=+p[F>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[G>>3];p[Sc>>3]=+p[F>>3]-+p[Qc>>3];p[K>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[z>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[z>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[z>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[A>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[A>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[K+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[N>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[N>>3]-+p[bd>>3];p[Qc>>3]=+p[N>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[K+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[K+24>>3]=+p[N>>3];N=Fe(4,K,+p[o>>3],Z)|0;k[ca>>2]=N;N=Fe(k[ca>>2]|0,Z,+p[o>>3],_)|0;k[da>>2]=N;N=Fe(4,K,+p[t>>3],$)|0;k[ea>>2]=N;N=Fe(k[ea>>2]|0,$,+p[t>>3],aa)|0;k[fa>>2]=N;N=Ee(k[da>>2]|0,_,k[fa>>2]|0,aa,ba)|0;k[ga>>2]=N;p[B>>3]=+p[n>>3]*+p[t>>3];p[Tc>>3]=+p[5]*+p[n>>3];p[Uc>>3]=+p[Tc>>3]-+p[n>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[n>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[t>>3];p[Uc>>3]=+p[Tc>>3]-+p[t>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[t>>3]-+p[Xc>>3];p[Zc>>3]=+p[B>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[H>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[C>>3]=+p[o>>3]*+p[s>>3];p[Tc>>3]=+p[5]*+p[o>>3];p[Uc>>3]=+p[Tc>>3]-+p[o>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[o>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[s>>3];p[Uc>>3]=+p[Tc>>3]-+p[s>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[s>>3]-+p[Xc>>3];p[Zc>>3]=+p[C>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[I>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[H>>3]-+p[I>>3];p[Pc>>3]=+p[H>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[I>>3];p[Sc>>3]=+p[H>>3]-+p[Qc>>3];p[L>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[B>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[B>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[B>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[C>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[C>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[L+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[O>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[O>>3]-+p[bd>>3];p[Qc>>3]=+p[O>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[L+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[L+24>>3]=+p[O>>3];O=Fe(4,L,+p[q>>3],ha)|0;k[ma>>2]=O;O=Fe(k[ma>>2]|0,ha,+p[q>>3],ia)|0;k[na>>2]=O;O=Fe(4,L,+p[u>>3],ja)|0;k[oa>>2]=O;O=Fe(k[oa>>2]|0,ja,+p[u>>3],ka)|0;k[pa>>2]=O;O=Ee(k[na>>2]|0,ia,k[pa>>2]|0,ka,la)|0;k[qa>>2]=O;O=Ee(k[Y>>2]|0,T,k[ga>>2]|0,ba,ra)|0;k[sa>>2]=O;O=Ee(k[sa>>2]|0,ra,k[qa>>2]|0,la,ta)|0;k[ya>>2]=O;e=+Ge(k[ya>>2]|0,ta);p[v>>3]=e;p[w>>3]=+p[12]*+p[m>>3];if(!(+p[v>>3]>=+p[w>>3])?!(-+p[v>>3]>=+p[w>>3]):0){p[Pc>>3]=+p[k[h>>2]>>3]-+p[n>>3];p[Qc>>3]=+p[n>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[k[l>>2]>>3];p[Sc>>3]=+p[k[h>>2]>>3]-+p[Qc>>3];p[za>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Pc>>3]=+p[(k[h>>2]|0)+8>>3]-+p[s>>3];p[Qc>>3]=+p[s>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[(k[l>>2]|0)+8>>3];p[Sc>>3]=+p[(k[h>>2]|0)+8>>3]-+p[Qc>>3];p[Ca>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Pc>>3]=+p[k[i>>2]>>3]-+p[o>>3];p[Qc>>3]=+p[o>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[k[l>>2]>>3];p[Sc>>3]=+p[k[i>>2]>>3]-+p[Qc>>3];p[Aa>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Pc>>3]=+p[(k[i>>2]|0)+8>>3]-+p[t>>3];p[Qc>>3]=+p[t>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[(k[l>>2]|0)+8>>3];p[Sc>>3]=+p[(k[i>>2]|0)+8>>3]-+p[Qc>>3];p[Da>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Pc>>3]=+p[k[j>>2]>>3]-+p[q>>3];p[Qc>>3]=+p[q>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[k[l>>2]>>3];p[Sc>>3]=+p[k[j>>2]>>3]-+p[Qc>>3];p[Ba>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Pc>>3]=+p[(k[j>>2]|0)+8>>3]-+p[u>>3];p[Qc>>3]=+p[u>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[(k[l>>2]|0)+8>>3];p[Sc>>3]=+p[(k[j>>2]|0)+8>>3]-+p[Qc>>3];p[Ea>>3]=+p[Sc>>3]+ +p[Rc>>3];if(+p[za>>3]==0.0&+p[Aa>>3]==0.0&+p[Ba>>3]==0.0&+p[Ca>>3]==0.0&+p[Da>>3]==0.0&+p[Ea>>3]==0.0){p[g>>3]=+p[v>>3];dd=+p[g>>3];r=f;return +dd}e=+p[v>>3];p[w>>3]=+p[13]*+p[m>>3]+ +p[7]*(+p[v>>3]>=0.0?e:-e);p[v>>3]=+p[v>>3]+((+p[n>>3]*+p[n>>3]+ +p[s>>3]*+p[s>>3])*(+p[o>>3]*+p[Ea>>3]+ +p[u>>3]*+p[Aa>>3]-(+p[t>>3]*+p[Ba>>3]+ +p[q>>3]*+p[Da>>3]))+(+p[n>>3]*+p[za>>3]+ +p[s>>3]*+p[Ca>>3])*2.0*(+p[o>>3]*+p[u>>3]-+p[t>>3]*+p[q>>3])+((+p[o>>3]*+p[o>>3]+ +p[t>>3]*+p[t>>3])*(+p[q>>3]*+p[Ca>>3]+ +p[s>>3]*+p[Ba>>3]-(+p[u>>3]*+p[za>>3]+ +p[n>>3]*+p[Ea>>3]))+(+p[o>>3]*+p[Aa>>3]+ +p[t>>3]*+p[Da>>3])*2.0*(+p[q>>3]*+p[s>>3]-+p[u>>3]*+p[n>>3]))+((+p[q>>3]*+p[q>>3]+ +p[u>>3]*+p[u>>3])*(+p[n>>3]*+p[Da>>3]+ +p[t>>3]*+p[za>>3]-(+p[s>>3]*+p[Aa>>3]+ +p[o>>3]*+p[Ca>>3]))+(+p[q>>3]*+p[Ba>>3]+ +p[u>>3]*+p[Ea>>3])*2.0*(+p[n>>3]*+p[t>>3]-+p[s>>3]*+p[o>>3])));if(!(+p[v>>3]>=+p[w>>3])?!(-+p[v>>3]>=+p[w>>3]):0){k[va>>2]=ta;k[wa>>2]=ua;if(+p[Aa>>3]!=0.0|+p[Da>>3]!=0.0|+p[Ba>>3]!=0.0|+p[Ea>>3]!=0.0){p[Fa>>3]=+p[n>>3]*+p[n>>3];p[Tc>>3]=+p[5]*+p[n>>3];p[Uc>>3]=+p[Tc>>3]-+p[n>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[n>>3]-+p[Vc>>3];p[Zc>>3]=+p[Fa>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[La>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[Ga>>3]=+p[s>>3]*+p[s>>3];p[Tc>>3]=+p[5]*+p[s>>3];p[Uc>>3]=+p[Tc>>3]-+p[s>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[s>>3]-+p[Vc>>3];p[Zc>>3]=+p[Ga>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[Ma>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[ad>>3]=+p[La>>3]+ +p[Ma>>3];p[Pc>>3]=+p[ad>>3]-+p[La>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ma>>3]-+p[Pc>>3];p[Sc>>3]=+p[La>>3]-+p[Qc>>3];p[Ra>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Fa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Fa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Fa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ga>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ga>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Ra+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Ua>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Ua>>3]-+p[bd>>3];p[Qc>>3]=+p[Ua>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Ra+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Ra+24>>3]=+p[Ua>>3]}if(+p[Ba>>3]!=0.0|+p[Ea>>3]!=0.0|+p[za>>3]!=0.0|+p[Ca>>3]!=0.0){p[Ha>>3]=+p[o>>3]*+p[o>>3];p[Tc>>3]=+p[5]*+p[o>>3];p[Uc>>3]=+p[Tc>>3]-+p[o>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[o>>3]-+p[Vc>>3];p[Zc>>3]=+p[Ha>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[Na>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[Ia>>3]=+p[t>>3]*+p[t>>3];p[Tc>>3]=+p[5]*+p[t>>3];p[Uc>>3]=+p[Tc>>3]-+p[t>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[t>>3]-+p[Vc>>3];p[Zc>>3]=+p[Ia>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[Oa>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[ad>>3]=+p[Na>>3]+ +p[Oa>>3];p[Pc>>3]=+p[ad>>3]-+p[Na>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Oa>>3]-+p[Pc>>3];p[Sc>>3]=+p[Na>>3]-+p[Qc>>3];p[Sa>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Ha>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Ha>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Ha>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ia>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ia>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Sa+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Va>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Va>>3]-+p[bd>>3];p[Qc>>3]=+p[Va>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Sa+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Sa+24>>3]=+p[Va>>3]}if(+p[za>>3]!=0.0|+p[Ca>>3]!=0.0|+p[Aa>>3]!=0.0|+p[Da>>3]!=0.0){p[Ja>>3]=+p[q>>3]*+p[q>>3];p[Tc>>3]=+p[5]*+p[q>>3];p[Uc>>3]=+p[Tc>>3]-+p[q>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[q>>3]-+p[Vc>>3];p[Zc>>3]=+p[Ja>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[Pa>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[Ka>>3]=+p[u>>3]*+p[u>>3];p[Tc>>3]=+p[5]*+p[u>>3];p[Uc>>3]=+p[Tc>>3]-+p[u>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[u>>3]-+p[Vc>>3];p[Zc>>3]=+p[Ka>>3]-+p[Vc>>3]*+p[Vc>>3];p[$c>>3]=+p[Zc>>3]-(+p[Vc>>3]+ +p[Vc>>3])*+p[Wc>>3];p[Qa>>3]=+p[Wc>>3]*+p[Wc>>3]-+p[$c>>3];p[ad>>3]=+p[Pa>>3]+ +p[Qa>>3];p[Pc>>3]=+p[ad>>3]-+p[Pa>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Qa>>3]-+p[Pc>>3];p[Sc>>3]=+p[Pa>>3]-+p[Qc>>3];p[Ta>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Ja>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Ja>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Ja>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ka>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ka>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Ta+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Wa>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Wa>>3]-+p[bd>>3];p[Qc>>3]=+p[Wa>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Ta+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Ta+24>>3]=+p[Wa>>3]}if(+p[za>>3]!=0.0){Wa=Fe(4,J,+p[za>>3],Rb)|0;k[Xb>>2]=Wa;Wa=Fe(k[Xb>>2]|0,Rb,+p[n>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Ta,+p[za>>3],ub)|0;k[yb>>2]=Wa;Wa=Fe(k[yb>>2]|0,ub,+p[t>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Sa,+p[za>>3],tb)|0;k[xb>>2]=Wa;Wa=Fe(k[xb>>2]|0,tb,-+p[u>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Ca>>3]!=0.0){Wa=Fe(4,J,+p[Ca>>3],Sb)|0;k[Yb>>2]=Wa;Wa=Fe(k[Yb>>2]|0,Sb,+p[s>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Sa,+p[Ca>>3],vb)|0;k[zb>>2]=Wa;Wa=Fe(k[zb>>2]|0,vb,+p[q>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Ta,+p[Ca>>3],wb)|0;k[Ab>>2]=Wa;Wa=Fe(k[Ab>>2]|0,wb,-+p[o>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Aa>>3]!=0.0){Wa=Fe(4,K,+p[Aa>>3],Tb)|0;k[Zb>>2]=Wa;Wa=Fe(k[Zb>>2]|0,Tb,+p[o>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Ra,+p[Aa>>3],Bb)|0;k[Fb>>2]=Wa;Wa=Fe(k[Fb>>2]|0,Bb,+p[u>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Ta,+p[Aa>>3],Cb)|0;k[Gb>>2]=Wa;Wa=Fe(k[Gb>>2]|0,Cb,-+p[s>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Da>>3]!=0.0){Wa=Fe(4,K,+p[Da>>3],Ub)|0;k[_b>>2]=Wa;Wa=Fe(k[_b>>2]|0,Ub,+p[t>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Ta,+p[Da>>3],Eb)|0;k[Ib>>2]=Wa;Wa=Fe(k[Ib>>2]|0,Eb,+p[n>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Ra,+p[Da>>3],Db)|0;k[Hb>>2]=Wa;Wa=Fe(k[Hb>>2]|0,Db,-+p[q>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Ba>>3]!=0.0){Wa=Fe(4,L,+p[Ba>>3],Vb)|0;k[$b>>2]=Wa;Wa=Fe(k[$b>>2]|0,Vb,+p[q>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Sa,+p[Ba>>3],Kb)|0;k[Ob>>2]=Wa;Wa=Fe(k[Ob>>2]|0,Kb,+p[s>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Ra,+p[Ba>>3],Jb)|0;k[Nb>>2]=Wa;Wa=Fe(k[Nb>>2]|0,Jb,-+p[t>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Ea>>3]!=0.0){Wa=Fe(4,L,+p[Ea>>3],Wb)|0;k[ac>>2]=Wa;Wa=Fe(k[ac>>2]|0,Wb,+p[u>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(4,Ra,+p[Ea>>3],Lb)|0;k[Pb>>2]=Wa;Wa=Fe(k[Pb>>2]|0,Lb,+p[o>>3],fb)|0;k[nb>>2]=Wa;Wa=Fe(4,Sa,+p[Ea>>3],Mb)|0;k[Qb>>2]=Wa;Wa=Fe(k[Qb>>2]|0,Mb,-+p[n>>3],gb)|0;k[ob>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[ob>>2]|0,gb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}do if(+p[za>>3]!=0.0|+p[Ca>>3]!=0.0){if(+p[Aa>>3]!=0.0|+p[Da>>3]!=0.0|+p[Ba>>3]!=0.0|+p[Ea>>3]!=0.0){p[Xa>>3]=+p[Aa>>3]*+p[u>>3];p[Tc>>3]=+p[5]*+p[Aa>>3];p[Uc>>3]=+p[Tc>>3]-+p[Aa>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Aa>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[u>>3];p[Uc>>3]=+p[Tc>>3]-+p[u>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[u>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[o>>3]*+p[Ea>>3];p[Tc>>3]=+p[5]*+p[o>>3];p[Uc>>3]=+p[Tc>>3]-+p[o>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[o>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ea>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ea>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ea>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[$a>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[$a+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[bb>>3]-+p[bd>>3];p[Qc>>3]=+p[bb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[$a+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[$a+24>>3]=+p[bb>>3];p[Oc>>3]=-+p[t>>3];p[Xa>>3]=+p[Ba>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[Ba>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ba>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Ba>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Oc>>3]=-+p[Da>>3];p[Ya>>3]=+p[q>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[q>>3];p[Uc>>3]=+p[Tc>>3]-+p[q>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[q>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[ab>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[ab+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[cb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[cb>>3]-+p[bd>>3];p[Qc>>3]=+p[cb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[ab+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ab+24>>3]=+p[cb>>3];Wa=Ee(4,$a,4,ab,Ac)|0;k[Dc>>2]=Wa;p[Xa>>3]=+p[Aa>>3]*+p[Ea>>3];p[Tc>>3]=+p[5]*+p[Aa>>3];p[Uc>>3]=+p[Tc>>3]-+p[Aa>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Aa>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ea>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ea>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ea>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[Ba>>3]*+p[Da>>3];p[Tc>>3]=+p[5]*+p[Ba>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ba>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Ba>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Da>>3];p[Uc>>3]=+p[Tc>>3]-+p[Da>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Da>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]-+p[_a>>3];p[Pc>>3]=+p[Za>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[_a>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[Gc>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[Ya>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[Ya>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Gc+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Mc>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Mc>>3]-+p[bd>>3];p[Qc>>3]=+p[Mc>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Gc+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Gc+24>>3]=+p[Mc>>3];k[Jc>>2]=4}else{p[Ac>>3]=0.0;k[Dc>>2]=1;p[Gc>>3]=0.0;k[Jc>>2]=1}if(+p[za>>3]!=0.0){Wa=Fe(k[Xb>>2]|0,Rb,+p[za>>3],eb)|0;k[mb>>2]=Wa;Wa=Fe(k[Dc>>2]|0,Ac,+p[za>>3],bc)|0;k[hc>>2]=Wa;Wa=Fe(k[hc>>2]|0,bc,+p[n>>3]*2.0,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];if(+p[Da>>3]!=0.0){Wa=Fe(4,Ta,+p[za>>3],db)|0;k[lb>>2]=Wa;Wa=Fe(k[lb>>2]|0,db,+p[Da>>3],eb)|0;k[mb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Ea>>3]!=0.0){Wa=Fe(4,Sa,-+p[za>>3],db)|0;k[lb>>2]=Wa;Wa=Fe(k[lb>>2]|0,db,+p[Ea>>3],eb)|0;k[mb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}Wa=Fe(k[hc>>2]|0,bc,+p[za>>3],hb)|0;k[pb>>2]=Wa;Wa=Fe(k[Jc>>2]|0,Gc,+p[za>>3],nc)|0;k[tc>>2]=Wa;Wa=Fe(k[tc>>2]|0,nc,+p[n>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(k[tc>>2]|0,nc,+p[za>>3],fb)|0;k[nb>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=Wa;Wa=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(!(+p[Ca>>3]!=0.0))break;Wa=Fe(k[Yb>>2]|0,Sb,+p[Ca>>3],eb)|0;k[mb>>2]=Wa;Wa=Fe(k[Dc>>2]|0,Ac,+p[Ca>>3],cc)|0;k[ic>>2]=Wa;Wa=Fe(k[ic>>2]|0,cc,+p[s>>3]*2.0,hb)|0;k[pb>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];Wa=Fe(k[ic>>2]|0,cc,+p[Ca>>3],hb)|0;k[pb>>2]=Wa;Wa=Fe(k[Jc>>2]|0,Gc,+p[Ca>>3],oc)|0;k[uc>>2]=Wa;Wa=Fe(k[uc>>2]|0,oc,+p[s>>3]*2.0,eb)|0;k[mb>>2]=Wa;Wa=Fe(k[uc>>2]|0,oc,+p[Ca>>3],fb)|0;k[nb>>2]=Wa;Wa=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=Wa;Wa=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=Wa;Wa=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=Wa;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}while(0);do if(+p[Aa>>3]!=0.0|+p[Da>>3]!=0.0){if(+p[Ba>>3]!=0.0|+p[Ea>>3]!=0.0|+p[za>>3]!=0.0|+p[Ca>>3]!=0.0){p[Xa>>3]=+p[Ba>>3]*+p[s>>3];p[Tc>>3]=+p[5]*+p[Ba>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ba>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Ba>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[s>>3];p[Uc>>3]=+p[Tc>>3]-+p[s>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[s>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[q>>3]*+p[Ca>>3];p[Tc>>3]=+p[5]*+p[q>>3];p[Uc>>3]=+p[Tc>>3]-+p[q>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[q>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ca>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ca>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ca>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[$a>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[$a+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[bb>>3]-+p[bd>>3];p[Qc>>3]=+p[bb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[$a+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[$a+24>>3]=+p[bb>>3];p[Oc>>3]=-+p[u>>3];p[Xa>>3]=+p[za>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[za>>3];p[Uc>>3]=+p[Tc>>3]-+p[za>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[za>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Oc>>3]=-+p[Ea>>3];p[Ya>>3]=+p[n>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[n>>3];p[Uc>>3]=+p[Tc>>3]-+p[n>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[n>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[ab>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[ab+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[cb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[cb>>3]-+p[bd>>3];p[Qc>>3]=+p[cb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[ab+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ab+24>>3]=+p[cb>>3];oc=Ee(4,$a,4,ab,Bc)|0;k[Ec>>2]=oc;p[Xa>>3]=+p[Ba>>3]*+p[Ca>>3];p[Tc>>3]=+p[5]*+p[Ba>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ba>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Ba>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ca>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ca>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ca>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[za>>3]*+p[Ea>>3];p[Tc>>3]=+p[5]*+p[za>>3];p[Uc>>3]=+p[Tc>>3]-+p[za>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[za>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ea>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ea>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ea>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]-+p[_a>>3];p[Pc>>3]=+p[Za>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[_a>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[Hc>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[Ya>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[Ya>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Hc+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Nc>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Nc>>3]-+p[bd>>3];p[Qc>>3]=+p[Nc>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Hc+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Hc+24>>3]=+p[Nc>>3];k[Kc>>2]=4}else{p[Bc>>3]=0.0;k[Ec>>2]=1;p[Hc>>3]=0.0;k[Kc>>2]=1}if(+p[Aa>>3]!=0.0){oc=Fe(k[Zb>>2]|0,Tb,+p[Aa>>3],eb)|0;k[mb>>2]=oc;oc=Fe(k[Ec>>2]|0,Bc,+p[Aa>>3],dc)|0;k[jc>>2]=oc;oc=Fe(k[jc>>2]|0,dc,+p[o>>3]*2.0,hb)|0;k[pb>>2]=oc;oc=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];if(+p[Ea>>3]!=0.0){oc=Fe(4,Ra,+p[Aa>>3],db)|0;k[lb>>2]=oc;oc=Fe(k[lb>>2]|0,db,+p[Ea>>3],eb)|0;k[mb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Ca>>3]!=0.0){oc=Fe(4,Ta,-+p[Aa>>3],db)|0;k[lb>>2]=oc;oc=Fe(k[lb>>2]|0,db,+p[Ca>>3],eb)|0;k[mb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}oc=Fe(k[jc>>2]|0,dc,+p[Aa>>3],hb)|0;k[pb>>2]=oc;oc=Fe(k[Kc>>2]|0,Hc,+p[Aa>>3],pc)|0;k[vc>>2]=oc;oc=Fe(k[vc>>2]|0,pc,+p[o>>3]*2.0,eb)|0;k[mb>>2]=oc;oc=Fe(k[vc>>2]|0,pc,+p[Aa>>3],fb)|0;k[nb>>2]=oc;oc=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=oc;oc=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(!(+p[Da>>3]!=0.0))break;oc=Fe(k[_b>>2]|0,Ub,+p[Da>>3],eb)|0;k[mb>>2]=oc;oc=Fe(k[Ec>>2]|0,Bc,+p[Da>>3],ec)|0;k[kc>>2]=oc;oc=Fe(k[kc>>2]|0,ec,+p[t>>3]*2.0,hb)|0;k[pb>>2]=oc;oc=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];oc=Fe(k[kc>>2]|0,ec,+p[Da>>3],hb)|0;k[pb>>2]=oc;oc=Fe(k[Kc>>2]|0,Hc,+p[Da>>3],qc)|0;k[wc>>2]=oc;oc=Fe(k[wc>>2]|0,qc,+p[t>>3]*2.0,eb)|0;k[mb>>2]=oc;oc=Fe(k[wc>>2]|0,qc,+p[Da>>3],fb)|0;k[nb>>2]=oc;oc=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=oc;oc=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=oc;oc=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=oc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}while(0);do if(+p[Ba>>3]!=0.0|+p[Ea>>3]!=0.0){if(+p[za>>3]!=0.0|+p[Ca>>3]!=0.0|+p[Aa>>3]!=0.0|+p[Da>>3]!=0.0){p[Xa>>3]=+p[za>>3]*+p[t>>3];p[Tc>>3]=+p[5]*+p[za>>3];p[Uc>>3]=+p[Tc>>3]-+p[za>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[za>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[t>>3];p[Uc>>3]=+p[Tc>>3]-+p[t>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[t>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[n>>3]*+p[Da>>3];p[Tc>>3]=+p[5]*+p[n>>3];p[Uc>>3]=+p[Tc>>3]-+p[n>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[n>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Da>>3];p[Uc>>3]=+p[Tc>>3]-+p[Da>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Da>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[$a>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[$a+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[bb>>3]-+p[bd>>3];p[Qc>>3]=+p[bb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[$a+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[$a+24>>3]=+p[bb>>3];p[Oc>>3]=-+p[s>>3];p[Xa>>3]=+p[Aa>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[Aa>>3];p[Uc>>3]=+p[Tc>>3]-+p[Aa>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Aa>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Oc>>3]=-+p[Ca>>3];p[Ya>>3]=+p[o>>3]*+p[Oc>>3];p[Tc>>3]=+p[5]*+p[o>>3];p[Uc>>3]=+p[Tc>>3]-+p[o>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[o>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Oc>>3];p[Uc>>3]=+p[Tc>>3]-+p[Oc>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Oc>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]+ +p[_a>>3];p[Pc>>3]=+p[ad>>3]-+p[Za>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[_a>>3]-+p[Pc>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[ab>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]+ +p[Ya>>3];p[Pc>>3]=+p[ad>>3]-+p[cd>>3];p[Qc>>3]=+p[ad>>3]-+p[Pc>>3];p[Rc>>3]=+p[Ya>>3]-+p[Pc>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[ab+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[cb>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[cb>>3]-+p[bd>>3];p[Qc>>3]=+p[cb>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[ab+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ab+24>>3]=+p[cb>>3];qc=Ee(4,$a,4,ab,zc)|0;k[Cc>>2]=qc;p[Xa>>3]=+p[za>>3]*+p[Da>>3];p[Tc>>3]=+p[5]*+p[za>>3];p[Uc>>3]=+p[Tc>>3]-+p[za>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[za>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Da>>3];p[Uc>>3]=+p[Tc>>3]-+p[Da>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Da>>3]-+p[Xc>>3];p[Zc>>3]=+p[Xa>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[Za>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[Ya>>3]=+p[Aa>>3]*+p[Ca>>3];p[Tc>>3]=+p[5]*+p[Aa>>3];p[Uc>>3]=+p[Tc>>3]-+p[Aa>>3];p[Vc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Wc>>3]=+p[Aa>>3]-+p[Vc>>3];p[Tc>>3]=+p[5]*+p[Ca>>3];p[Uc>>3]=+p[Tc>>3]-+p[Ca>>3];p[Xc>>3]=+p[Tc>>3]-+p[Uc>>3];p[Yc>>3]=+p[Ca>>3]-+p[Xc>>3];p[Zc>>3]=+p[Ya>>3]-+p[Vc>>3]*+p[Xc>>3];p[_c>>3]=+p[Zc>>3]-+p[Wc>>3]*+p[Xc>>3];p[$c>>3]=+p[_c>>3]-+p[Vc>>3]*+p[Yc>>3];p[_a>>3]=+p[Wc>>3]*+p[Yc>>3]-+p[$c>>3];p[ad>>3]=+p[Za>>3]-+p[_a>>3];p[Pc>>3]=+p[Za>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[_a>>3];p[Sc>>3]=+p[Za>>3]-+p[Qc>>3];p[Fc>>3]=+p[Sc>>3]+ +p[Rc>>3];p[bd>>3]=+p[Xa>>3]+ +p[ad>>3];p[Pc>>3]=+p[bd>>3]-+p[Xa>>3];p[Qc>>3]=+p[bd>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[Xa>>3]-+p[Qc>>3];p[cd>>3]=+p[Sc>>3]+ +p[Rc>>3];p[ad>>3]=+p[cd>>3]-+p[Ya>>3];p[Pc>>3]=+p[cd>>3]-+p[ad>>3];p[Qc>>3]=+p[ad>>3]+ +p[Pc>>3];p[Rc>>3]=+p[Pc>>3]-+p[Ya>>3];p[Sc>>3]=+p[cd>>3]-+p[Qc>>3];p[Fc+8>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Lc>>3]=+p[bd>>3]+ +p[ad>>3];p[Pc>>3]=+p[Lc>>3]-+p[bd>>3];p[Qc>>3]=+p[Lc>>3]-+p[Pc>>3];p[Rc>>3]=+p[ad>>3]-+p[Pc>>3];p[Sc>>3]=+p[bd>>3]-+p[Qc>>3];p[Fc+16>>3]=+p[Sc>>3]+ +p[Rc>>3];p[Fc+24>>3]=+p[Lc>>3];k[Ic>>2]=4}else{p[zc>>3]=0.0;k[Cc>>2]=1;p[Fc>>3]=0.0;k[Ic>>2]=1}if(+p[Ba>>3]!=0.0){qc=Fe(k[$b>>2]|0,Vb,+p[Ba>>3],eb)|0;k[mb>>2]=qc;qc=Fe(k[Cc>>2]|0,zc,+p[Ba>>3],fc)|0;k[lc>>2]=qc;qc=Fe(k[lc>>2]|0,fc,+p[q>>3]*2.0,hb)|0;k[pb>>2]=qc;qc=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];if(+p[Ca>>3]!=0.0){qc=Fe(4,Sa,+p[Ba>>3],db)|0;k[lb>>2]=qc;qc=Fe(k[lb>>2]|0,db,+p[Ca>>3],eb)|0;k[mb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(+p[Da>>3]!=0.0){qc=Fe(4,Ra,-+p[Ba>>3],db)|0;k[lb>>2]=qc;qc=Fe(k[lb>>2]|0,db,+p[Da>>3],eb)|0;k[mb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[mb>>2]|0,eb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}qc=Fe(k[lc>>2]|0,fc,+p[Ba>>3],hb)|0;k[pb>>2]=qc;qc=Fe(k[Ic>>2]|0,Fc,+p[Ba>>3],rc)|0;k[xc>>2]=qc;qc=Fe(k[xc>>2]|0,rc,+p[q>>3]*2.0,eb)|0;k[mb>>2]=qc;qc=Fe(k[xc>>2]|0,rc,+p[Ba>>3],fb)|0;k[nb>>2]=qc;qc=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=qc;qc=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}if(!(+p[Ea>>3]!=0.0))break;qc=Fe(k[ac>>2]|0,Wb,+p[Ea>>3],eb)|0;k[mb>>2]=qc;qc=Fe(k[Cc>>2]|0,zc,+p[Ea>>3],gc)|0;k[mc>>2]=qc;qc=Fe(k[mc>>2]|0,gc,+p[u>>3]*2.0,hb)|0;k[pb>>2]=qc;qc=Ee(k[mb>>2]|0,eb,k[pb>>2]|0,hb,jb)|0;k[rb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[rb>>2]|0,jb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2];qc=Fe(k[mc>>2]|0,gc,+p[Ea>>3],hb)|0;k[pb>>2]=qc;qc=Fe(k[Ic>>2]|0,Fc,+p[Ea>>3],sc)|0;k[yc>>2]=qc;qc=Fe(k[yc>>2]|0,sc,+p[u>>3]*2.0,eb)|0;k[mb>>2]=qc;qc=Fe(k[yc>>2]|0,sc,+p[Ea>>3],fb)|0;k[nb>>2]=qc;qc=Ee(k[mb>>2]|0,eb,k[nb>>2]|0,fb,ib)|0;k[qb>>2]=qc;qc=Ee(k[pb>>2]|0,hb,k[qb>>2]|0,ib,kb)|0;k[sb>>2]=qc;qc=Ee(k[ya>>2]|0,k[va>>2]|0,k[sb>>2]|0,kb,k[wa>>2]|0)|0;k[ya>>2]=qc;k[xa>>2]=k[va>>2];k[va>>2]=k[wa>>2];k[wa>>2]=k[xa>>2]}while(0);p[g>>3]=+p[(k[va>>2]|0)+((k[ya>>2]|0)-1<<3)>>3];dd=+p[g>>3];r=f;return +dd}p[g>>3]=+p[v>>3];dd=+p[g>>3];r=f;return +dd}p[g>>3]=+p[v>>3];dd=+p[g>>3];r=f;return +dd}function Ke(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0;g=r;r=r+176|0;h=g+144|0;i=g+172|0;j=g+168|0;l=g+164|0;m=g+160|0;n=g+156|0;o=g+152|0;q=g+136|0;s=g+128|0;t=g+120|0;u=g+112|0;v=g+104|0;w=g+96|0;x=g+88|0;y=g+80|0;z=g+72|0;A=g+64|0;B=g+56|0;C=g+48|0;D=g+40|0;E=g+32|0;F=g+24|0;G=g+16|0;H=g+8|0;I=g;k[i>>2]=a;k[j>>2]=b;k[l>>2]=c;k[m>>2]=d;k[n>>2]=e;k[o>>2]=f;f=(k[i>>2]|0)+49732|0;k[f>>2]=(k[f>>2]|0)+1;p[q>>3]=+p[k[l>>2]>>3]-+p[k[o>>2]>>3];p[s>>3]=+p[k[m>>2]>>3]-+p[k[o>>2]>>3];p[t>>3]=+p[k[n>>2]>>3]-+p[k[o>>2]>>3];p[u>>3]=+p[(k[l>>2]|0)+8>>3]-+p[(k[o>>2]|0)+8>>3];p[v>>3]=+p[(k[m>>2]|0)+8>>3]-+p[(k[o>>2]|0)+8>>3];p[w>>3]=+p[(k[n>>2]|0)+8>>3]-+p[(k[o>>2]|0)+8>>3];p[x>>3]=+p[s>>3]*+p[w>>3];p[y>>3]=+p[t>>3]*+p[v>>3];p[D>>3]=+p[q>>3]*+p[q>>3]+ +p[u>>3]*+p[u>>3];p[z>>3]=+p[t>>3]*+p[u>>3];p[A>>3]=+p[q>>3]*+p[w>>3];p[E>>3]=+p[s>>3]*+p[s>>3]+ +p[v>>3]*+p[v>>3];p[B>>3]=+p[q>>3]*+p[v>>3];p[C>>3]=+p[s>>3]*+p[u>>3];p[F>>3]=+p[t>>3]*+p[t>>3]+ +p[w>>3]*+p[w>>3];p[G>>3]=+p[D>>3]*(+p[x>>3]-+p[y>>3])+ +p[E>>3]*(+p[z>>3]-+p[A>>3])+ +p[F>>3]*(+p[B>>3]-+p[C>>3]);if(k[(k[j>>2]|0)+84>>2]|0){p[h>>3]=+p[G>>3];J=+p[h>>3];r=g;return +J}K=+p[x>>3];L=+p[y>>3];M=+p[z>>3];N=+p[A>>3];O=+p[B>>3];P=+p[C>>3];p[H>>3]=((+p[x>>3]>=0.0?K:-K)+(+p[y>>3]>=0.0?L:-L))*+p[D>>3]+((+p[z>>3]>=0.0?M:-M)+(+p[A>>3]>=0.0?N:-N))*+p[E>>3]+((+p[B>>3]>=0.0?O:-O)+(+p[C>>3]>=0.0?P:-P))*+p[F>>3];p[I>>3]=+p[11]*+p[H>>3];if(!(+p[G>>3]>+p[I>>3])?!(-+p[G>>3]>+p[I>>3]):0){P=+Je(k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,k[o>>2]|0,+p[H>>3]);p[h>>3]=P;J=+p[h>>3];r=g;return +J}p[h>>3]=+p[G>>3];J=+p[h>>3];r=g;return +J}function Le(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=+h;i=+i;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0.0;j=r;r=r+5040|0;l=j+4936|0;m=j+5032|0;n=j+5028|0;o=j+5024|0;q=j+5020|0;s=j+4928|0;t=j+4920|0;u=j+4912|0;v=j+4904|0;w=j+4896|0;x=j+4888|0;y=j+4880|0;z=j+4872|0;A=j+4864|0;B=j+4856|0;C=j+4848|0;D=j+4840|0;E=j+4832|0;F=j+4824|0;G=j+4816|0;H=j+4808|0;I=j+4800|0;J=j+4792|0;K=j+4784|0;L=j+4776|0;M=j+4768|0;N=j+4760|0;O=j+4752|0;P=j+4744|0;Q=j+4736|0;R=j+4728|0;S=j+4720|0;T=j+4712|0;U=j+4680|0;V=j+4648|0;W=j+4616|0;X=j+4608|0;Y=j+4600|0;Z=j+4592|0;_=j+4528|0;$=j+4464|0;aa=j+4400|0;ba=j+5016|0;ca=j+5012|0;da=j+5008|0;ea=j+4272|0;fa=j+5004|0;ga=j+5e3|0;ha=j+4996|0;ia=j+4992|0;ja=j+2736|0;ka=j+1200|0;la=j+4988|0;ma=j+1192|0;na=j+1184|0;oa=j+1176|0;pa=j+1168|0;qa=j+1160|0;ra=j+1152|0;sa=j+1144|0;ta=j+1136|0;ua=j+1128|0;va=j+1120|0;wa=j+1112|0;xa=j+1104|0;ya=j+1096|0;za=j+1088|0;Aa=j+1080|0;Ba=j+1048|0;Ca=j+1016|0;Da=j+984|0;Ea=j+952|0;Fa=j+920|0;Ga=j+888|0;Ha=j+4984|0;Ia=j+4980|0;Ja=j+4976|0;Ka=j+4972|0;La=j+4968|0;Ma=j+4964|0;Na=j+880|0;Oa=j+872|0;Pa=j+864|0;Qa=j+856|0;Ra=j+848|0;Sa=j+840|0;Ta=j+832|0;Ua=j+824|0;Va=j+816|0;Wa=j+808|0;Xa=j+800|0;Ya=j+792|0;Za=j+784|0;_a=j+776|0;$a=j+768|0;ab=j+760|0;bb=j+752|0;cb=j+744|0;db=j+736|0;eb=j+728|0;fb=j+720|0;gb=j+712|0;hb=j+704|0;ib=j+696|0;jb=j+632|0;kb=j+568|0;lb=j+504|0;mb=j+4960|0;nb=j+4956|0;ob=j+4952|0;pb=j+496|0;qb=j+488|0;rb=j+480|0;sb=j+472|0;tb=j+464|0;ub=j+456|0;vb=j+448|0;wb=j+440|0;xb=j+432|0;yb=j+424|0;zb=j+416|0;Ab=j+408|0;Bb=j+376|0;Cb=j+280|0;Db=j+152|0;Eb=j+144|0;Fb=j+4948|0;Gb=j+4944|0;Hb=j+136|0;Ib=j+128|0;Jb=j+120|0;Kb=j+112|0;Lb=j+104|0;Mb=j+96|0;Nb=j+88|0;Ob=j+80|0;Pb=j+72|0;Qb=j+64|0;Rb=j+56|0;Sb=j+48|0;Tb=j+40|0;Ub=j+32|0;Vb=j+24|0;Wb=j+16|0;Xb=j+8|0;Yb=j;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;k[q>>2]=d;p[s>>3]=e;p[t>>3]=f;p[u>>3]=g;p[v>>3]=h;p[w>>3]=i;p[x>>3]=+p[k[m>>2]>>3]-+p[k[q>>2]>>3];p[y>>3]=+p[k[n>>2]>>3]-+p[k[q>>2]>>3];p[z>>3]=+p[k[o>>2]>>3]-+p[k[q>>2]>>3];p[A>>3]=+p[(k[m>>2]|0)+8>>3]-+p[(k[q>>2]|0)+8>>3];p[B>>3]=+p[(k[n>>2]|0)+8>>3]-+p[(k[q>>2]|0)+8>>3];p[C>>3]=+p[(k[o>>2]|0)+8>>3]-+p[(k[q>>2]|0)+8>>3];p[D>>3]=+p[s>>3]-+p[v>>3];p[E>>3]=+p[t>>3]-+p[v>>3];p[F>>3]=+p[u>>3]-+p[v>>3];p[I>>3]=+p[y>>3]*+p[C>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[y>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[I>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[O>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[J>>3]=+p[z>>3]*+p[B>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[z>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[J>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[P>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[O>>3]-+p[P>>3];p[Ib>>3]=+p[O>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[P>>3];p[Lb>>3]=+p[O>>3]-+p[Jb>>3];p[U>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[I>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[I>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[I>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[J>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[J>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[U+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[X>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[X>>3]-+p[Wb>>3];p[Jb>>3]=+p[X>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[U+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[U+24>>3]=+p[X>>3];X=Fe(4,U,+p[D>>3],_)|0;k[ba>>2]=X;p[K>>3]=+p[z>>3]*+p[A>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[z>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[K>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Q>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[L>>3]=+p[x>>3]*+p[C>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[x>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[L>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[R>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[Q>>3]-+p[R>>3];p[Ib>>3]=+p[Q>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[R>>3];p[Lb>>3]=+p[Q>>3]-+p[Jb>>3];p[V>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[K>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[K>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[K>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[L>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[L>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[V+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Y>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Y>>3]-+p[Wb>>3];p[Jb>>3]=+p[Y>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[V+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[V+24>>3]=+p[Y>>3];Y=Fe(4,V,+p[E>>3],$)|0;k[ca>>2]=Y;p[M>>3]=+p[x>>3]*+p[B>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[x>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[M>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[S>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[N>>3]=+p[y>>3]*+p[A>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[y>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[N>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[T>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[S>>3]-+p[T>>3];p[Ib>>3]=+p[S>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[T>>3];p[Lb>>3]=+p[S>>3]-+p[Jb>>3];p[W>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[M>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[M>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[M>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[N>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[N>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[W+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Z>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Z>>3]-+p[Wb>>3];p[Jb>>3]=+p[Z>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[W+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[W+24>>3]=+p[Z>>3];Z=Fe(4,W,+p[F>>3],aa)|0;k[da>>2]=Z;Z=Ee(k[ba>>2]|0,_,k[ca>>2]|0,$,ea)|0;k[fa>>2]=Z;Z=Ee(k[fa>>2]|0,ea,k[da>>2]|0,aa,ja)|0;k[la>>2]=Z;i=+Ge(k[la>>2]|0,ja);p[G>>3]=i;p[H>>3]=+p[15]*+p[w>>3];if(!(+p[G>>3]>=+p[H>>3])?!(-+p[G>>3]>=+p[H>>3]):0){p[Ib>>3]=+p[k[m>>2]>>3]-+p[x>>3];p[Jb>>3]=+p[x>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[k[q>>2]>>3];p[Lb>>3]=+p[k[m>>2]>>3]-+p[Jb>>3];p[ma>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[k[n>>2]>>3]-+p[y>>3];p[Jb>>3]=+p[y>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[k[q>>2]>>3];p[Lb>>3]=+p[k[n>>2]>>3]-+p[Jb>>3];p[na>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[k[o>>2]>>3]-+p[z>>3];p[Jb>>3]=+p[z>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[k[q>>2]>>3];p[Lb>>3]=+p[k[o>>2]>>3]-+p[Jb>>3];p[oa>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[(k[m>>2]|0)+8>>3]-+p[A>>3];p[Jb>>3]=+p[A>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[(k[q>>2]|0)+8>>3];p[Lb>>3]=+p[(k[m>>2]|0)+8>>3]-+p[Jb>>3];p[pa>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[(k[n>>2]|0)+8>>3]-+p[B>>3];p[Jb>>3]=+p[B>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[(k[q>>2]|0)+8>>3];p[Lb>>3]=+p[(k[n>>2]|0)+8>>3]-+p[Jb>>3];p[qa>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[(k[o>>2]|0)+8>>3]-+p[C>>3];p[Jb>>3]=+p[C>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[(k[q>>2]|0)+8>>3];p[Lb>>3]=+p[(k[o>>2]|0)+8>>3]-+p[Jb>>3];p[ra>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[s>>3]-+p[D>>3];p[Jb>>3]=+p[D>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[v>>3];p[Lb>>3]=+p[s>>3]-+p[Jb>>3];p[sa>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[t>>3]-+p[E>>3];p[Jb>>3]=+p[E>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[v>>3];p[Lb>>3]=+p[t>>3]-+p[Jb>>3];p[ta>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ib>>3]=+p[u>>3]-+p[F>>3];p[Jb>>3]=+p[F>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[v>>3];p[Lb>>3]=+p[u>>3]-+p[Jb>>3];p[ua>>3]=+p[Lb>>3]+ +p[Kb>>3];if(+p[ma>>3]==0.0&+p[na>>3]==0.0&+p[oa>>3]==0.0&+p[pa>>3]==0.0&+p[qa>>3]==0.0&+p[ra>>3]==0.0&+p[sa>>3]==0.0&+p[ta>>3]==0.0&+p[ua>>3]==0.0){p[l>>3]=+p[G>>3];Zb=+p[l>>3];r=j;return +Zb}i=+p[G>>3];p[H>>3]=+p[16]*+p[w>>3]+ +p[7]*(+p[G>>3]>=0.0?i:-i);p[G>>3]=+p[G>>3]+(+p[D>>3]*(+p[y>>3]*+p[ra>>3]+ +p[C>>3]*+p[na>>3]-(+p[B>>3]*+p[oa>>3]+ +p[z>>3]*+p[qa>>3]))+ +p[sa>>3]*(+p[y>>3]*+p[C>>3]-+p[B>>3]*+p[z>>3])+(+p[E>>3]*(+p[z>>3]*+p[pa>>3]+ +p[A>>3]*+p[oa>>3]-(+p[C>>3]*+p[ma>>3]+ +p[x>>3]*+p[ra>>3]))+ +p[ta>>3]*(+p[z>>3]*+p[A>>3]-+p[C>>3]*+p[x>>3]))+(+p[F>>3]*(+p[x>>3]*+p[qa>>3]+ +p[B>>3]*+p[ma>>3]-(+p[A>>3]*+p[na>>3]+ +p[y>>3]*+p[pa>>3]))+ +p[ua>>3]*(+p[x>>3]*+p[B>>3]-+p[A>>3]*+p[y>>3])));if(!(+p[G>>3]>=+p[H>>3])?!(-+p[G>>3]>=+p[H>>3]):0){k[ga>>2]=ja;k[ha>>2]=ka;ka=+p[pa>>3]==0.0;do if(+p[ma>>3]==0.0)if(ka){p[Ba>>3]=0.0;k[Ha>>2]=1;p[Ca>>3]=0.0;k[Ia>>2]=1;break}else{p[Hb>>3]=-+p[pa>>3];p[va>>3]=+p[Hb>>3]*+p[y>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[y>>3]-+p[Qb>>3];p[Sb>>3]=+p[va>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ba>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ba+8>>3]=+p[va>>3];k[Ha>>2]=2;p[wa>>3]=+p[pa>>3]*+p[z>>3];p[Mb>>3]=+p[5]*+p[pa>>3];p[Nb>>3]=+p[Mb>>3]-+p[pa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[pa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[z>>3]-+p[Qb>>3];p[Sb>>3]=+p[wa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ca>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ca+8>>3]=+p[wa>>3];k[Ia>>2]=2;break}else{i=+p[ma>>3]*+p[B>>3];if(ka){p[va>>3]=i;p[Mb>>3]=+p[5]*+p[ma>>3];p[Nb>>3]=+p[Mb>>3]-+p[ma>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ma>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[va>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ba>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ba+8>>3]=+p[va>>3];k[Ha>>2]=2;p[Hb>>3]=-+p[ma>>3];p[wa>>3]=+p[Hb>>3]*+p[C>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[wa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ca>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ca+8>>3]=+p[wa>>3];k[Ia>>2]=2;break}else{p[Ra>>3]=i;p[Mb>>3]=+p[5]*+p[ma>>3];p[Nb>>3]=+p[Mb>>3]-+p[ma>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ma>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[Ra>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Xa>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[bb>>3]=+p[pa>>3]*+p[y>>3];p[Mb>>3]=+p[5]*+p[pa>>3];p[Nb>>3]=+p[Mb>>3]-+p[pa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[pa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[y>>3]-+p[Qb>>3];p[Sb>>3]=+p[bb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[hb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[Xa>>3]-+p[hb>>3];p[Ib>>3]=+p[Xa>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[hb>>3];p[Lb>>3]=+p[Xa>>3]-+p[Jb>>3];p[Ba>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[Ra>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[Ra>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Ra>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[bb>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[bb>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Ba+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[va>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[va>>3]-+p[Wb>>3];p[Jb>>3]=+p[va>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Ba+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ba+24>>3]=+p[va>>3];k[Ha>>2]=4;p[ab>>3]=+p[pa>>3]*+p[z>>3];p[Mb>>3]=+p[5]*+p[pa>>3];p[Nb>>3]=+p[Mb>>3]-+p[pa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[pa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[z>>3]-+p[Qb>>3];p[Sb>>3]=+p[ab>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[gb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Qa>>3]=+p[ma>>3]*+p[C>>3];p[Mb>>3]=+p[5]*+p[ma>>3];p[Nb>>3]=+p[Mb>>3]-+p[ma>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ma>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[Qa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Wa>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[gb>>3]-+p[Wa>>3];p[Ib>>3]=+p[gb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Wa>>3];p[Lb>>3]=+p[gb>>3]-+p[Jb>>3];p[Ca>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[ab>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[ab>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[ab>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[Qa>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Qa>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Ca+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[wa>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[wa>>3]-+p[Wb>>3];p[Jb>>3]=+p[wa>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Ca+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ca+24>>3]=+p[wa>>3];k[Ia>>2]=4;break}}while(0);wa=+p[qa>>3]==0.0;do if(+p[na>>3]==0.0)if(wa){p[Da>>3]=0.0;k[Ja>>2]=1;p[Ea>>3]=0.0;k[Ka>>2]=1;break}else{p[Hb>>3]=-+p[qa>>3];p[xa>>3]=+p[Hb>>3]*+p[z>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[z>>3]-+p[Qb>>3];p[Sb>>3]=+p[xa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Da>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Da+8>>3]=+p[xa>>3];k[Ja>>2]=2;p[ya>>3]=+p[qa>>3]*+p[x>>3];p[Mb>>3]=+p[5]*+p[qa>>3];p[Nb>>3]=+p[Mb>>3]-+p[qa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[qa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[x>>3]-+p[Qb>>3];p[Sb>>3]=+p[ya>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ea>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ea+8>>3]=+p[ya>>3];k[Ka>>2]=2;break}else{i=+p[na>>3]*+p[C>>3];if(wa){p[xa>>3]=i;p[Mb>>3]=+p[5]*+p[na>>3];p[Nb>>3]=+p[Mb>>3]-+p[na>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[na>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[xa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Da>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Da+8>>3]=+p[xa>>3];k[Ja>>2]=2;p[Hb>>3]=-+p[na>>3];p[ya>>3]=+p[Hb>>3]*+p[A>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[ya>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ea>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ea+8>>3]=+p[ya>>3];k[Ka>>2]=2;break}else{p[Na>>3]=i;p[Mb>>3]=+p[5]*+p[na>>3];p[Nb>>3]=+p[Mb>>3]-+p[na>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[na>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[C>>3];p[Nb>>3]=+p[Mb>>3]-+p[C>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[C>>3]-+p[Qb>>3];p[Sb>>3]=+p[Na>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ta>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Za>>3]=+p[qa>>3]*+p[z>>3];p[Mb>>3]=+p[5]*+p[qa>>3];p[Nb>>3]=+p[Mb>>3]-+p[qa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[qa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[z>>3];p[Nb>>3]=+p[Mb>>3]-+p[z>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[z>>3]-+p[Qb>>3];p[Sb>>3]=+p[Za>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[db>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[Ta>>3]-+p[db>>3];p[Ib>>3]=+p[Ta>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[db>>3];p[Lb>>3]=+p[Ta>>3]-+p[Jb>>3];p[Da>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[Na>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[Na>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Na>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[Za>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Za>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Da+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[xa>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[xa>>3]-+p[Wb>>3];p[Jb>>3]=+p[xa>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Da+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Da+24>>3]=+p[xa>>3];k[Ja>>2]=4;p[cb>>3]=+p[qa>>3]*+p[x>>3];p[Mb>>3]=+p[5]*+p[qa>>3];p[Nb>>3]=+p[Mb>>3]-+p[qa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[qa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[x>>3]-+p[Qb>>3];p[Sb>>3]=+p[cb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[ib>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Sa>>3]=+p[na>>3]*+p[A>>3];p[Mb>>3]=+p[5]*+p[na>>3];p[Nb>>3]=+p[Mb>>3]-+p[na>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[na>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[Sa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ya>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[ib>>3]-+p[Ya>>3];p[Ib>>3]=+p[ib>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Ya>>3];p[Lb>>3]=+p[ib>>3]-+p[Jb>>3];p[Ea>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[cb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[cb>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[cb>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[Sa>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Sa>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Ea+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[ya>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[ya>>3]-+p[Wb>>3];p[Jb>>3]=+p[ya>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Ea+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ea+24>>3]=+p[ya>>3];k[Ka>>2]=4;break}}while(0);ya=+p[ra>>3]==0.0;do if(+p[oa>>3]==0.0)if(ya){p[Fa>>3]=0.0;k[La>>2]=1;p[Ga>>3]=0.0;k[Ma>>2]=1;break}else{p[Hb>>3]=-+p[ra>>3];p[za>>3]=+p[Hb>>3]*+p[x>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[x>>3]-+p[Qb>>3];p[Sb>>3]=+p[za>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Fa>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Fa+8>>3]=+p[za>>3];k[La>>2]=2;p[Aa>>3]=+p[ra>>3]*+p[y>>3];p[Mb>>3]=+p[5]*+p[ra>>3];p[Nb>>3]=+p[Mb>>3]-+p[ra>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ra>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[y>>3]-+p[Qb>>3];p[Sb>>3]=+p[Aa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ga>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ga+8>>3]=+p[Aa>>3];k[Ma>>2]=2;break}else{i=+p[oa>>3]*+p[A>>3];if(ya){p[za>>3]=i;p[Mb>>3]=+p[5]*+p[oa>>3];p[Nb>>3]=+p[Mb>>3]-+p[oa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[oa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[za>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Fa>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Fa+8>>3]=+p[za>>3];k[La>>2]=2;p[Hb>>3]=-+p[oa>>3];p[Aa>>3]=+p[Hb>>3]*+p[B>>3];p[Mb>>3]=+p[5]*+p[Hb>>3];p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[Aa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ga>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Ga+8>>3]=+p[Aa>>3];k[Ma>>2]=2;break}else{p[Pa>>3]=i;p[Mb>>3]=+p[5]*+p[oa>>3];p[Nb>>3]=+p[Mb>>3]-+p[oa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[oa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[A>>3];p[Nb>>3]=+p[Mb>>3]-+p[A>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[A>>3]-+p[Qb>>3];p[Sb>>3]=+p[Pa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Va>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[$a>>3]=+p[ra>>3]*+p[x>>3];p[Mb>>3]=+p[5]*+p[ra>>3];p[Nb>>3]=+p[Mb>>3]-+p[ra>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ra>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[x>>3];p[Nb>>3]=+p[Mb>>3]-+p[x>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[x>>3]-+p[Qb>>3];p[Sb>>3]=+p[$a>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[fb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[Va>>3]-+p[fb>>3];p[Ib>>3]=+p[Va>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[fb>>3];p[Lb>>3]=+p[Va>>3]-+p[Jb>>3];p[Fa>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[Pa>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[Pa>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Pa>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[$a>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[$a>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Fa+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[za>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[za>>3]-+p[Wb>>3];p[Jb>>3]=+p[za>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Fa+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Fa+24>>3]=+p[za>>3];k[La>>2]=4;p[_a>>3]=+p[ra>>3]*+p[y>>3];p[Mb>>3]=+p[5]*+p[ra>>3];p[Nb>>3]=+p[Mb>>3]-+p[ra>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ra>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[y>>3];p[Nb>>3]=+p[Mb>>3]-+p[y>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[y>>3]-+p[Qb>>3];p[Sb>>3]=+p[_a>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[eb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Oa>>3]=+p[oa>>3]*+p[B>>3];p[Mb>>3]=+p[5]*+p[oa>>3];p[Nb>>3]=+p[Mb>>3]-+p[oa>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[oa>>3]-+p[Ob>>3];p[Mb>>3]=+p[5]*+p[B>>3];p[Nb>>3]=+p[Mb>>3]-+p[B>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[B>>3]-+p[Qb>>3];p[Sb>>3]=+p[Oa>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Ua>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Vb>>3]=+p[eb>>3]-+p[Ua>>3];p[Ib>>3]=+p[eb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Ua>>3];p[Lb>>3]=+p[eb>>3]-+p[Jb>>3];p[Ga>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Wb>>3]=+p[_a>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Wb>>3]-+p[_a>>3];p[Jb>>3]=+p[Wb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[_a>>3]-+p[Jb>>3];p[Yb>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Vb>>3]=+p[Yb>>3]-+p[Oa>>3];p[Ib>>3]=+p[Yb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Vb>>3]+ +p[Ib>>3];p[Kb>>3]=+p[Ib>>3]-+p[Oa>>3];p[Lb>>3]=+p[Yb>>3]-+p[Jb>>3];p[Ga+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Aa>>3]=+p[Wb>>3]+ +p[Vb>>3];p[Ib>>3]=+p[Aa>>3]-+p[Wb>>3];p[Jb>>3]=+p[Aa>>3]-+p[Ib>>3];p[Kb>>3]=+p[Vb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Wb>>3]-+p[Jb>>3];p[Ga+16>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Ga+24>>3]=+p[Aa>>3];k[Ma>>2]=4;break}}while(0);Aa=Ee(k[Ja>>2]|0,Da,k[Ma>>2]|0,Ga,jb)|0;k[mb>>2]=Aa;Aa=Fe(k[mb>>2]|0,jb,+p[D>>3],Db)|0;k[Gb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2];Aa=Ee(k[La>>2]|0,Fa,k[Ia>>2]|0,Ca,kb)|0;k[nb>>2]=Aa;Aa=Fe(k[nb>>2]|0,kb,+p[E>>3],Db)|0;k[Gb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2];Aa=Ee(k[Ha>>2]|0,Ba,k[Ka>>2]|0,Ea,lb)|0;k[ob>>2]=Aa;Aa=Fe(k[ob>>2]|0,lb,+p[F>>3],Db)|0;k[Gb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2];if(+p[sa>>3]!=0.0){Aa=Fe(4,U,+p[sa>>3],Cb)|0;k[Fb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Fb>>2]|0,Cb,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ta>>3]!=0.0){Aa=Fe(4,V,+p[ta>>3],Cb)|0;k[Fb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Fb>>2]|0,Cb,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ua>>3]!=0.0){Aa=Fe(4,W,+p[ua>>3],Cb)|0;k[Fb>>2]=Aa;Aa=Ee(k[la>>2]|0,k[ga>>2]|0,k[Fb>>2]|0,Cb,k[ha>>2]|0)|0;k[la>>2]=Aa;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ma>>3]!=0.0){if(+p[qa>>3]!=0.0?(p[tb>>3]=+p[ma>>3]*+p[qa>>3],p[Mb>>3]=+p[5]*+p[ma>>3],p[Nb>>3]=+p[Mb>>3]-+p[ma>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[ma>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[qa>>3],p[Nb>>3]=+p[Mb>>3]-+p[qa>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[qa>>3]-+p[Qb>>3],p[Sb>>3]=+p[tb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[zb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[F>>3],p[Nb>>3]=+p[Mb>>3]-+p[F>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[F>>3]-+p[Qb>>3],p[Vb>>3]=+p[zb>>3]*+p[F>>3],p[Mb>>3]=+p[5]*+p[zb>>3],p[Nb>>3]=+p[Mb>>3]-+p[zb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[zb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[tb>>3]*+p[F>>3],p[Mb>>3]=+p[5]*+p[tb>>3],p[Nb>>3]=+p[Mb>>3]-+p[tb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[tb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],Aa=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=Aa,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[ua>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[ua>>3];p[Nb>>3]=+p[Mb>>3]-+p[ua>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[ua>>3]-+p[Qb>>3];p[Vb>>3]=+p[zb>>3]*+p[ua>>3];p[Mb>>3]=+p[5]*+p[zb>>3];p[Nb>>3]=+p[Mb>>3]-+p[zb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[zb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[tb>>3]*+p[ua>>3];p[Mb>>3]=+p[5]*+p[tb>>3];p[Nb>>3]=+p[Mb>>3]-+p[tb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[tb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];tb=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=tb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ra>>3]!=0.0?(p[Hb>>3]=-+p[ma>>3],p[sb>>3]=+p[Hb>>3]*+p[ra>>3],p[Mb>>3]=+p[5]*+p[Hb>>3],p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[ra>>3],p[Nb>>3]=+p[Mb>>3]-+p[ra>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[ra>>3]-+p[Qb>>3],p[Sb>>3]=+p[sb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[E>>3],p[Nb>>3]=+p[Mb>>3]-+p[E>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[E>>3]-+p[Qb>>3],p[Vb>>3]=+p[yb>>3]*+p[E>>3],p[Mb>>3]=+p[5]*+p[yb>>3],p[Nb>>3]=+p[Mb>>3]-+p[yb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[yb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[sb>>3]*+p[E>>3],p[Mb>>3]=+p[5]*+p[sb>>3],p[Nb>>3]=+p[Mb>>3]-+p[sb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[sb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],ma=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=ma,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[ta>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[ta>>3];p[Nb>>3]=+p[Mb>>3]-+p[ta>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[ta>>3]-+p[Qb>>3];p[Vb>>3]=+p[yb>>3]*+p[ta>>3];p[Mb>>3]=+p[5]*+p[yb>>3];p[Nb>>3]=+p[Mb>>3]-+p[yb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[yb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[sb>>3]*+p[ta>>3];p[Mb>>3]=+p[5]*+p[sb>>3];p[Nb>>3]=+p[Mb>>3]-+p[sb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[sb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];sb=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=sb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}}if(+p[na>>3]!=0.0){if(+p[ra>>3]!=0.0?(p[pb>>3]=+p[na>>3]*+p[ra>>3],p[Mb>>3]=+p[5]*+p[na>>3],p[Nb>>3]=+p[Mb>>3]-+p[na>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[na>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[ra>>3],p[Nb>>3]=+p[Mb>>3]-+p[ra>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[ra>>3]-+p[Qb>>3],p[Sb>>3]=+p[pb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[vb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[D>>3],p[Nb>>3]=+p[Mb>>3]-+p[D>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[D>>3]-+p[Qb>>3],p[Vb>>3]=+p[vb>>3]*+p[D>>3],p[Mb>>3]=+p[5]*+p[vb>>3],p[Nb>>3]=+p[Mb>>3]-+p[vb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[vb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[pb>>3]*+p[D>>3],p[Mb>>3]=+p[5]*+p[pb>>3],p[Nb>>3]=+p[Mb>>3]-+p[pb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[pb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],ra=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=ra,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[sa>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[sa>>3];p[Nb>>3]=+p[Mb>>3]-+p[sa>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[sa>>3]-+p[Qb>>3];p[Vb>>3]=+p[vb>>3]*+p[sa>>3];p[Mb>>3]=+p[5]*+p[vb>>3];p[Nb>>3]=+p[Mb>>3]-+p[vb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[vb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[pb>>3]*+p[sa>>3];p[Mb>>3]=+p[5]*+p[pb>>3];p[Nb>>3]=+p[Mb>>3]-+p[pb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[pb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];pb=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=pb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[pa>>3]!=0.0?(p[Hb>>3]=-+p[na>>3],p[ub>>3]=+p[Hb>>3]*+p[pa>>3],p[Mb>>3]=+p[5]*+p[Hb>>3],p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[pa>>3],p[Nb>>3]=+p[Mb>>3]-+p[pa>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[pa>>3]-+p[Qb>>3],p[Sb>>3]=+p[ub>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Ab>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[F>>3],p[Nb>>3]=+p[Mb>>3]-+p[F>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[F>>3]-+p[Qb>>3],p[Vb>>3]=+p[Ab>>3]*+p[F>>3],p[Mb>>3]=+p[5]*+p[Ab>>3],p[Nb>>3]=+p[Mb>>3]-+p[Ab>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[Ab>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[ub>>3]*+p[F>>3],p[Mb>>3]=+p[5]*+p[ub>>3],p[Nb>>3]=+p[Mb>>3]-+p[ub>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[ub>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],F=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=F,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[ua>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[ua>>3];p[Nb>>3]=+p[Mb>>3]-+p[ua>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[ua>>3]-+p[Qb>>3];p[Vb>>3]=+p[Ab>>3]*+p[ua>>3];p[Mb>>3]=+p[5]*+p[Ab>>3];p[Nb>>3]=+p[Mb>>3]-+p[Ab>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[Ab>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[ub>>3]*+p[ua>>3];p[Mb>>3]=+p[5]*+p[ub>>3];p[Nb>>3]=+p[Mb>>3]-+p[ub>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[ub>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];ub=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=ub;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}}if(+p[oa>>3]!=0.0){if(+p[pa>>3]!=0.0?(p[rb>>3]=+p[oa>>3]*+p[pa>>3],p[Mb>>3]=+p[5]*+p[oa>>3],p[Nb>>3]=+p[Mb>>3]-+p[oa>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[oa>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[pa>>3],p[Nb>>3]=+p[Mb>>3]-+p[pa>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[pa>>3]-+p[Qb>>3],p[Sb>>3]=+p[rb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[xb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[E>>3],p[Nb>>3]=+p[Mb>>3]-+p[E>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[E>>3]-+p[Qb>>3],p[Vb>>3]=+p[xb>>3]*+p[E>>3],p[Mb>>3]=+p[5]*+p[xb>>3],p[Nb>>3]=+p[Mb>>3]-+p[xb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[xb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[rb>>3]*+p[E>>3],p[Mb>>3]=+p[5]*+p[rb>>3],p[Nb>>3]=+p[Mb>>3]-+p[rb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[rb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],E=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=E,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[ta>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[ta>>3];p[Nb>>3]=+p[Mb>>3]-+p[ta>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[ta>>3]-+p[Qb>>3];p[Vb>>3]=+p[xb>>3]*+p[ta>>3];p[Mb>>3]=+p[5]*+p[xb>>3];p[Nb>>3]=+p[Mb>>3]-+p[xb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[xb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[rb>>3]*+p[ta>>3];p[Mb>>3]=+p[5]*+p[rb>>3];p[Nb>>3]=+p[Mb>>3]-+p[rb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[rb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];rb=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=rb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[qa>>3]!=0.0?(p[Hb>>3]=-+p[oa>>3],p[qb>>3]=+p[Hb>>3]*+p[qa>>3],p[Mb>>3]=+p[5]*+p[Hb>>3],p[Nb>>3]=+p[Mb>>3]-+p[Hb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[Hb>>3]-+p[Ob>>3],p[Mb>>3]=+p[5]*+p[qa>>3],p[Nb>>3]=+p[Mb>>3]-+p[qa>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[qa>>3]-+p[Qb>>3],p[Sb>>3]=+p[qb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[wb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Mb>>3]=+p[5]*+p[D>>3],p[Nb>>3]=+p[Mb>>3]-+p[D>>3],p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3],p[Rb>>3]=+p[D>>3]-+p[Qb>>3],p[Vb>>3]=+p[wb>>3]*+p[D>>3],p[Mb>>3]=+p[5]*+p[wb>>3],p[Nb>>3]=+p[Mb>>3]-+p[wb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[wb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Wb>>3]=+p[qb>>3]*+p[D>>3],p[Mb>>3]=+p[5]*+p[qb>>3],p[Nb>>3]=+p[Mb>>3]-+p[qb>>3],p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3],p[Pb>>3]=+p[qb>>3]-+p[Ob>>3],p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3],p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3],p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3],p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3],p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3],p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3],p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3],p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3],p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3],p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3],p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3],p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3],p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3],p[Bb+24>>3]=+p[Eb>>3],D=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0,k[la>>2]=D,k[ia>>2]=k[ga>>2],k[ga>>2]=k[ha>>2],k[ha>>2]=k[ia>>2],+p[sa>>3]!=0.0):0){p[Mb>>3]=+p[5]*+p[sa>>3];p[Nb>>3]=+p[Mb>>3]-+p[sa>>3];p[Qb>>3]=+p[Mb>>3]-+p[Nb>>3];p[Rb>>3]=+p[sa>>3]-+p[Qb>>3];p[Vb>>3]=+p[wb>>3]*+p[sa>>3];p[Mb>>3]=+p[5]*+p[wb>>3];p[Nb>>3]=+p[Mb>>3]-+p[wb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[wb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Vb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Bb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Wb>>3]=+p[qb>>3]*+p[sa>>3];p[Mb>>3]=+p[5]*+p[qb>>3];p[Nb>>3]=+p[Mb>>3]-+p[qb>>3];p[Ob>>3]=+p[Mb>>3]-+p[Nb>>3];p[Pb>>3]=+p[qb>>3]-+p[Ob>>3];p[Sb>>3]=+p[Wb>>3]-+p[Ob>>3]*+p[Qb>>3];p[Tb>>3]=+p[Sb>>3]-+p[Pb>>3]*+p[Qb>>3];p[Ub>>3]=+p[Tb>>3]-+p[Ob>>3]*+p[Rb>>3];p[Yb>>3]=+p[Pb>>3]*+p[Rb>>3]-+p[Ub>>3];p[Xb>>3]=+p[Vb>>3]+ +p[Yb>>3];p[Ib>>3]=+p[Xb>>3]-+p[Vb>>3];p[Jb>>3]=+p[Xb>>3]-+p[Ib>>3];p[Kb>>3]=+p[Yb>>3]-+p[Ib>>3];p[Lb>>3]=+p[Vb>>3]-+p[Jb>>3];p[Bb+8>>3]=+p[Lb>>3]+ +p[Kb>>3];p[Eb>>3]=+p[Wb>>3]+ +p[Xb>>3];p[Ib>>3]=+p[Eb>>3]-+p[Wb>>3];p[Bb+16>>3]=+p[Xb>>3]-+p[Ib>>3];p[Bb+24>>3]=+p[Eb>>3];Eb=Ee(k[la>>2]|0,k[ga>>2]|0,4,Bb,k[ha>>2]|0)|0;k[la>>2]=Eb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}}if(+p[sa>>3]!=0.0){Eb=Fe(k[mb>>2]|0,jb,+p[sa>>3],Db)|0;k[Gb>>2]=Eb;Eb=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Eb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ta>>3]!=0.0){Eb=Fe(k[nb>>2]|0,kb,+p[ta>>3],Db)|0;k[Gb>>2]=Eb;Eb=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Eb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}if(+p[ua>>3]!=0.0){Eb=Fe(k[ob>>2]|0,lb,+p[ua>>3],Db)|0;k[Gb>>2]=Eb;Eb=Ee(k[la>>2]|0,k[ga>>2]|0,k[Gb>>2]|0,Db,k[ha>>2]|0)|0;k[la>>2]=Eb;k[ia>>2]=k[ga>>2];k[ga>>2]=k[ha>>2];k[ha>>2]=k[ia>>2]}p[l>>3]=+p[(k[ga>>2]|0)+((k[la>>2]|0)-1<<3)>>3];Zb=+p[l>>3];r=j;return +Zb}p[l>>3]=+p[G>>3];Zb=+p[l>>3];r=j;return +Zb}p[l>>3]=+p[G>>3];Zb=+p[l>>3];r=j;return +Zb}function Me(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=+i;j=+j;var l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0;l=r;r=r+208|0;m=l+176|0;n=l+204|0;o=l+200|0;q=l+196|0;s=l+192|0;t=l+188|0;u=l+184|0;v=l+168|0;w=l+160|0;x=l+152|0;y=l+144|0;z=l+136|0;A=l+128|0;B=l+120|0;C=l+112|0;D=l+104|0;E=l+96|0;F=l+88|0;G=l+80|0;H=l+72|0;I=l+64|0;J=l+56|0;K=l+48|0;L=l+40|0;M=l+32|0;N=l+24|0;O=l+16|0;P=l+8|0;Q=l;k[n>>2]=a;k[o>>2]=b;k[q>>2]=c;k[s>>2]=d;k[t>>2]=e;k[u>>2]=f;p[v>>3]=g;p[w>>3]=h;p[x>>3]=i;p[y>>3]=j;f=(k[n>>2]|0)+49740|0;k[f>>2]=(k[f>>2]|0)+1;p[z>>3]=+p[k[q>>2]>>3]-+p[k[u>>2]>>3];p[A>>3]=+p[k[s>>2]>>3]-+p[k[u>>2]>>3];p[B>>3]=+p[k[t>>2]>>3]-+p[k[u>>2]>>3];p[C>>3]=+p[(k[q>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3];p[D>>3]=+p[(k[s>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3];p[E>>3]=+p[(k[t>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3];p[F>>3]=+p[v>>3]-+p[y>>3];p[G>>3]=+p[w>>3]-+p[y>>3];p[H>>3]=+p[x>>3]-+p[y>>3];p[I>>3]=+p[A>>3]*+p[E>>3];p[J>>3]=+p[B>>3]*+p[D>>3];p[K>>3]=+p[B>>3]*+p[C>>3];p[L>>3]=+p[z>>3]*+p[E>>3];p[M>>3]=+p[z>>3]*+p[D>>3];p[N>>3]=+p[A>>3]*+p[C>>3];p[O>>3]=+p[F>>3]*(+p[I>>3]-+p[J>>3])+ +p[G>>3]*(+p[K>>3]-+p[L>>3])+ +p[H>>3]*(+p[M>>3]-+p[N>>3]);if(k[(k[o>>2]|0)+84>>2]|0){p[m>>3]=+p[O>>3];R=+p[m>>3];r=l;return +R}j=+p[I>>3];i=+p[J>>3];h=+p[F>>3];g=+p[K>>3];S=+p[L>>3];T=+p[G>>3];U=+p[M>>3];V=+p[N>>3];W=+p[H>>3];p[P>>3]=((+p[I>>3]>=0.0?j:-j)+(+p[J>>3]>=0.0?i:-i))*(+p[F>>3]>=0.0?h:-h)+((+p[K>>3]>=0.0?g:-g)+(+p[L>>3]>=0.0?S:-S))*(+p[G>>3]>=0.0?T:-T)+((+p[M>>3]>=0.0?U:-U)+(+p[N>>3]>=0.0?V:-V))*(+p[H>>3]>=0.0?W:-W);p[Q>>3]=+p[14]*+p[P>>3];if(!(+p[O>>3]>+p[Q>>3])?!(-+p[O>>3]>+p[Q>>3]):0){W=+Le(k[q>>2]|0,k[s>>2]|0,k[t>>2]|0,k[u>>2]|0,+p[v>>3],+p[w>>3],+p[x>>3],+p[y>>3],+p[P>>3]);p[m>>3]=W;R=+p[m>>3];r=l;return +R}p[m>>3]=+p[O>>3];R=+p[m>>3];r=l;return +R}function Ne(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0.0,s=0.0;g=r;r=r+32|0;h=g;i=g+28|0;j=g+24|0;l=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;k[i>>2]=a;k[j>>2]=b;k[l>>2]=c;k[m>>2]=d;k[n>>2]=e;k[o>>2]=f;if(!(k[(k[j>>2]|0)+32>>2]|0)){q=+Ke(k[i>>2]|0,k[j>>2]|0,k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,k[o>>2]|0);p[h>>3]=q;s=+p[h>>3];r=g;return +s}f=k[i>>2]|0;i=k[j>>2]|0;e=k[l>>2]|0;d=k[m>>2]|0;c=k[n>>2]|0;b=k[o>>2]|0;a=k[l>>2]|0;if((k[(k[j>>2]|0)+32>>2]|0)==1){q=+Me(f,i,e,d,c,b,+p[a>>3]*+p[k[l>>2]>>3]+ +p[(k[l>>2]|0)+8>>3]*+p[(k[l>>2]|0)+8>>3]-+p[(k[l>>2]|0)+16>>3],+p[k[m>>2]>>3]*+p[k[m>>2]>>3]+ +p[(k[m>>2]|0)+8>>3]*+p[(k[m>>2]|0)+8>>3]-+p[(k[m>>2]|0)+16>>3],+p[k[n>>2]>>3]*+p[k[n>>2]>>3]+ +p[(k[n>>2]|0)+8>>3]*+p[(k[n>>2]|0)+8>>3]-+p[(k[n>>2]|0)+16>>3],+p[k[o>>2]>>3]*+p[k[o>>2]>>3]+ +p[(k[o>>2]|0)+8>>3]*+p[(k[o>>2]|0)+8>>3]-+p[(k[o>>2]|0)+16>>3]);p[h>>3]=q;s=+p[h>>3];r=g;return +s}else{q=+Me(f,i,e,d,c,b,+p[a+16>>3],+p[(k[m>>2]|0)+16>>3],+p[(k[n>>2]|0)+16>>3],+p[(k[o>>2]|0)+16>>3]);p[h>>3]=q;s=+p[h>>3];r=g;return +s}return +(0.0)}function Oe(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0;j=r;r=r+144|0;l=j+128|0;m=j+124|0;n=j+120|0;o=j+116|0;q=j+112|0;s=j+108|0;t=j+104|0;u=j+100|0;v=j+96|0;w=j+88|0;x=j+80|0;y=j+72|0;z=j+64|0;A=j+56|0;B=j+48|0;C=j+40|0;D=j+32|0;E=j+24|0;F=j+16|0;G=j+8|0;H=j;k[l>>2]=a;k[m>>2]=b;k[n>>2]=c;k[o>>2]=d;k[q>>2]=e;k[s>>2]=f;k[t>>2]=g;k[u>>2]=h;k[v>>2]=i;i=(k[l>>2]|0)+49748|0;k[i>>2]=(k[i>>2]|0)+1;p[w>>3]=+p[k[o>>2]>>3]-+p[k[n>>2]>>3];p[x>>3]=+p[(k[o>>2]|0)+8>>3]-+p[(k[n>>2]|0)+8>>3];p[y>>3]=+p[k[q>>2]>>3]-+p[k[n>>2]>>3];p[z>>3]=+p[(k[q>>2]|0)+8>>3]-+p[(k[n>>2]|0)+8>>3];p[A>>3]=+p[w>>3]*+p[w>>3]+ +p[x>>3]*+p[x>>3];p[B>>3]=+p[y>>3]*+p[y>>3]+ +p[z>>3]*+p[z>>3];p[C>>3]=(+p[k[o>>2]>>3]-+p[k[q>>2]>>3])*(+p[k[o>>2]>>3]-+p[k[q>>2]>>3])+(+p[(k[o>>2]|0)+8>>3]-+p[(k[q>>2]|0)+8>>3])*(+p[(k[o>>2]|0)+8>>3]-+p[(k[q>>2]|0)+8>>3]);if(k[(k[m>>2]|0)+84>>2]|0)p[D>>3]=.5/(+p[w>>3]*+p[z>>3]-+p[y>>3]*+p[x>>3]);else{I=.5/+Ie(k[l>>2]|0,k[m>>2]|0,k[o>>2]|0,k[q>>2]|0,k[n>>2]|0);p[D>>3]=I;i=(k[l>>2]|0)+49736|0;k[i>>2]=(k[i>>2]|0)+-1}p[E>>3]=(+p[z>>3]*+p[A>>3]-+p[x>>3]*+p[B>>3])*+p[D>>3];p[F>>3]=(+p[w>>3]*+p[B>>3]-+p[y>>3]*+p[A>>3])*+p[D>>3];if(+p[A>>3]<+p[B>>3]?+p[A>>3]<+p[C>>3]:0){if(((k[v>>2]|0)!=0?+p[(k[m>>2]|0)+152>>3]>0.0:0)?(p[G>>3]=+p[w>>3]*.5-+p[(k[m>>2]|0)+152>>3]*+p[x>>3],p[H>>3]=+p[x>>3]*.5+ +p[(k[m>>2]|0)+152>>3]*+p[w>>3],+p[G>>3]*+p[G>>3]+ +p[H>>3]*+p[H>>3]<+p[E>>3]*+p[E>>3]+ +p[F>>3]*+p[F>>3]):0){p[E>>3]=+p[G>>3];p[F>>3]=+p[H>>3]}}else J=10;do if((J|0)==10){A=(k[v>>2]|0)!=0;if(+p[B>>3]<+p[C>>3]){if(!A)break;if(!(+p[(k[m>>2]|0)+152>>3]>0.0))break;p[G>>3]=+p[y>>3]*.5+ +p[(k[m>>2]|0)+152>>3]*+p[z>>3];p[H>>3]=+p[z>>3]*.5-+p[(k[m>>2]|0)+152>>3]*+p[y>>3];if(!(+p[G>>3]*+p[G>>3]+ +p[H>>3]*+p[H>>3]<+p[E>>3]*+p[E>>3]+ +p[F>>3]*+p[F>>3]))break;p[E>>3]=+p[G>>3];p[F>>3]=+p[H>>3];break}else{if(!A)break;if(!(+p[(k[m>>2]|0)+152>>3]>0.0))break;p[G>>3]=(+p[k[q>>2]>>3]-+p[k[o>>2]>>3])*.5-+p[(k[m>>2]|0)+152>>3]*(+p[(k[q>>2]|0)+8>>3]-+p[(k[o>>2]|0)+8>>3]);p[H>>3]=(+p[(k[q>>2]|0)+8>>3]-+p[(k[o>>2]|0)+8>>3])*.5+ +p[(k[m>>2]|0)+152>>3]*(+p[k[q>>2]>>3]-+p[k[o>>2]>>3]);if(!(+p[G>>3]*+p[G>>3]+ +p[H>>3]*+p[H>>3]<(+p[E>>3]-+p[w>>3])*(+p[E>>3]-+p[w>>3])+(+p[F>>3]-+p[x>>3])*(+p[F>>3]-+p[x>>3])))break;p[E>>3]=+p[w>>3]+ +p[G>>3];p[F>>3]=+p[x>>3]+ +p[H>>3];break}}while(0);p[k[s>>2]>>3]=+p[k[n>>2]>>3]+ +p[E>>3];p[(k[s>>2]|0)+8>>3]=+p[(k[n>>2]|0)+8>>3]+ +p[F>>3];p[k[t>>2]>>3]=(+p[z>>3]*+p[E>>3]-+p[y>>3]*+p[F>>3])*(+p[D>>3]*2.0);p[k[u>>2]>>3]=(+p[w>>3]*+p[F>>3]-+p[x>>3]*+p[E>>3])*(+p[D>>3]*2.0);r=j;return}function Pe(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;ge((k[c>>2]|0)+112|0);ge(k[c>>2]|0);ge((k[c>>2]|0)+56|0);ge((k[c>>2]|0)+168|0);ge((k[c>>2]|0)+224|0);ge((k[c>>2]|0)+280|0);ge((k[c>>2]|0)+336|0);ge((k[c>>2]|0)+392|0);k[(k[c>>2]|0)+49784>>2]=0;k[(k[c>>2]|0)+49668>>2]=0;k[(k[c>>2]|0)+49728>>2]=1;k[(k[c>>2]|0)+49716>>2]=0;k[(k[c>>2]|0)+49720>>2]=0;k[(k[c>>2]|0)+49740>>2]=0;k[(k[c>>2]|0)+49736>>2]=0;k[(k[c>>2]|0)+49732>>2]=0;k[(k[c>>2]|0)+49748>>2]=0;k[(k[c>>2]|0)+49752>>2]=0;k[(k[c>>2]|0)+49744>>2]=0;k[6904]=1;De();r=b;return}function Qe(a){a=a|0;var b=0,c=0;b=r;r=r+16|0;c=b;k[c>>2]=a;k[6904]=((((k[6904]|0)*1366|0)+150889|0)>>>0)%714025|0;r=b;return ((k[6904]|0)>>>0)/(((714025/((k[c>>2]|0)>>>0)|0)+1|0)>>>0)|0|0}function Re(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+160|0;d=c+88|0;e=c+80|0;f=c+72|0;g=c+64|0;h=c+56|0;i=c+48|0;j=c+40|0;l=c+32|0;m=c+24|0;n=c+16|0;o=c+8|0;p=c+156|0;q=c+152|0;s=c+144|0;t=c+136|0;u=c+128|0;v=c+120|0;w=c+116|0;x=c+112|0;y=c+108|0;z=c+104|0;A=c+100|0;B=c+96|0;C=c+92|0;k[p>>2]=a;k[q>>2]=b;k[B>>2]=k[(k[q>>2]|0)+84>>2];k[(k[q>>2]|0)+84>>2]=0;if(!(k[(k[q>>2]|0)+112>>2]|0))mta(56415,c)|0;k[A>>2]=0;me(k[p>>2]|0);b=se(k[p>>2]|0)|0;k[s>>2]=b;while(1){if(!(k[s>>2]|0))break;k[s+4>>2]=0;while(1){if((k[s+4>>2]|0)>=3)break;k[v>>2]=k[(k[s>>2]|0)+((k[27620+(k[s+4>>2]<<2)>>2]|0)+3<<2)>>2];k[w>>2]=k[(k[s>>2]|0)+((k[27632+(k[s+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[s+4>>2]|0)==0?(k[x>>2]=k[(k[s>>2]|0)+((k[s+4>>2]|0)+3<<2)>>2],+Ie(k[p>>2]|0,k[q>>2]|0,k[v>>2]|0,k[w>>2]|0,k[x>>2]|0)<=0.0):0){mta(56450,o)|0;ee(k[p>>2]|0,k[q>>2]|0,s);k[A>>2]=(k[A>>2]|0)+1}k[C>>2]=k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2];k[t+4>>2]=k[C>>2]&3;k[t>>2]=k[C>>2]^k[t+4>>2];do if((k[t>>2]|0)!=(k[(k[p>>2]|0)+49768>>2]|0)){k[C>>2]=k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2];k[u+4>>2]=k[C>>2]&3;k[u>>2]=k[C>>2]^k[u+4>>2];if(!((k[s>>2]|0)==(k[u>>2]|0)?(k[s+4>>2]|0)==(k[u+4>>2]|0):0)){mta(56468,n)|0;if((k[s>>2]|0)==(k[u>>2]|0))mta(56512,m)|0;mta(56552,l)|0;ee(k[p>>2]|0,k[q>>2]|0,s);mta(56563,j)|0;ee(k[p>>2]|0,k[q>>2]|0,t);k[A>>2]=(k[A>>2]|0)+1}k[y>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2];k[z>>2]=k[(k[t>>2]|0)+((k[27632+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[v>>2]|0)==(k[z>>2]|0)?(k[w>>2]|0)==(k[y>>2]|0):0)break;mta(56594,i)|0;mta(56654,h)|0;ee(k[p>>2]|0,k[q>>2]|0,s);mta(56676,g)|0;ee(k[p>>2]|0,k[q>>2]|0,t);k[A>>2]=(k[A>>2]|0)+1}while(0);b=s+4|0;k[b>>2]=(k[b>>2]|0)+1}b=se(k[p>>2]|0)|0;k[s>>2]=b}if(!(k[A>>2]|0)){if(k[(k[q>>2]|0)+112>>2]|0){D=k[B>>2]|0;E=k[q>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}mta(56699,f)|0;D=k[B>>2]|0;E=k[q>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}if((k[A>>2]|0)==1){mta(56760,e)|0;D=k[B>>2]|0;E=k[q>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}else{k[d>>2]=k[A>>2];mta(56817,d)|0;D=k[B>>2]|0;E=k[q>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}}function Se(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;c=r;r=r+144|0;d=c+72|0;e=c+64|0;f=c+56|0;g=c+48|0;h=c+40|0;i=c+32|0;j=c+24|0;l=c+16|0;m=c+8|0;n=c+140|0;o=c+136|0;p=c+128|0;q=c+120|0;s=c+112|0;t=c+108|0;u=c+104|0;v=c+100|0;w=c+96|0;x=c+92|0;y=c+88|0;z=c+84|0;A=c+80|0;B=c+76|0;k[n>>2]=a;k[o>>2]=b;k[z>>2]=k[(k[o>>2]|0)+84>>2];k[(k[o>>2]|0)+84>>2]=0;if(!(k[(k[o>>2]|0)+112>>2]|0))mta(56859,c)|0;k[y>>2]=0;me(k[n>>2]|0);b=se(k[n>>2]|0)|0;k[p>>2]=b;while(1){if(!(k[p>>2]|0))break;k[p+4>>2]=0;while(1){if((k[p+4>>2]|0)>=3)break;k[t>>2]=k[(k[p>>2]|0)+((k[27620+(k[p+4>>2]<<2)>>2]|0)+3<<2)>>2];k[u>>2]=k[(k[p>>2]|0)+((k[27632+(k[p+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[p>>2]|0)+((k[p+4>>2]|0)+3<<2)>>2];k[A>>2]=k[(k[p>>2]|0)+(k[p+4>>2]<<2)>>2];k[q+4>>2]=k[A>>2]&3;k[q>>2]=k[A>>2]^k[q+4>>2];k[w>>2]=k[(k[q>>2]|0)+((k[q+4>>2]|0)+3<<2)>>2];if((((((((((((((k[q>>2]|0)!=(k[(k[n>>2]|0)+49768>>2]|0)?(k[(k[q>>2]|0)+4>>2]|0)!=0:0)?(k[p>>2]|0)>>>0<(k[q>>2]|0)>>>0:0)?(k[t>>2]|0)!=(k[(k[n>>2]|0)+49756>>2]|0):0)?(k[t>>2]|0)!=(k[(k[n>>2]|0)+49760>>2]|0):0)?(k[t>>2]|0)!=(k[(k[n>>2]|0)+49764>>2]|0):0)?(k[u>>2]|0)!=(k[(k[n>>2]|0)+49756>>2]|0):0)?(k[u>>2]|0)!=(k[(k[n>>2]|0)+49760>>2]|0):0)?(k[u>>2]|0)!=(k[(k[n>>2]|0)+49764>>2]|0):0)?(k[v>>2]|0)!=(k[(k[n>>2]|0)+49756>>2]|0):0)?(k[v>>2]|0)!=(k[(k[n>>2]|0)+49760>>2]|0):0)?(k[v>>2]|0)!=(k[(k[n>>2]|0)+49764>>2]|0):0)?(k[w>>2]|0)!=(k[(k[n>>2]|0)+49756>>2]|0):0)?(k[w>>2]|0)!=(k[(k[n>>2]|0)+49760>>2]|0):0)C=(k[w>>2]|0)!=(k[(k[n>>2]|0)+49764>>2]|0);else C=0;k[x>>2]=C&1;if(((k[x>>2]|0)!=0?(k[(k[n>>2]|0)+49716>>2]|0)!=0:0)?(k[B>>2]=k[(k[p>>2]|0)+(6+(k[p+4>>2]|0)<<2)>>2],k[s+4>>2]=k[B>>2]&1,k[s>>2]=k[B>>2]&-4,(k[s>>2]|0)!=(k[(k[n>>2]|0)+49776>>2]|0)):0)k[x>>2]=0;if((k[x>>2]|0)!=0?+Ne(k[n>>2]|0,k[o>>2]|0,k[t>>2]|0,k[u>>2]|0,k[v>>2]|0,k[w>>2]|0)>0.0:0){if(k[(k[o>>2]|0)+32>>2]|0){mta(56990,i)|0;mta(57030,h)|0;ee(k[n>>2]|0,k[o>>2]|0,p);mta(57053,g)|0}else{mta(56900,m)|0;mta(56941,l)|0;ee(k[n>>2]|0,k[o>>2]|0,p);mta(56965,j)|0}ee(k[n>>2]|0,k[o>>2]|0,q);k[y>>2]=(k[y>>2]|0)+1}b=p+4|0;k[b>>2]=(k[b>>2]|0)+1}b=se(k[n>>2]|0)|0;k[p>>2]=b}if(!(k[y>>2]|0)){if(k[(k[o>>2]|0)+112>>2]|0){D=k[z>>2]|0;E=k[o>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}mta(57077,f)|0;D=k[z>>2]|0;E=k[o>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}if((k[y>>2]|0)==1){mta(57150,e)|0;D=k[z>>2]|0;E=k[o>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}else{k[d>>2]=k[y>>2];mta(57216,d)|0;D=k[z>>2]|0;E=k[o>>2]|0;F=E+84|0;k[F>>2]=D;r=c;return}}function Te(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=r;r=r+112|0;e=d+24|0;f=d+100|0;g=d+96|0;h=d+92|0;i=d+8|0;j=d;l=d+88|0;m=d+84|0;n=d+80|0;o=d+76|0;q=d+72|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;if((k[(k[g>>2]|0)+116>>2]|0)>2){mta(57266,d+16|0)|0;s=+p[(k[(k[h>>2]|0)+16>>2]|0)+8>>3];t=+p[k[(k[h>>2]|0)+20>>2]>>3];u=+p[(k[(k[h>>2]|0)+20>>2]|0)+8>>3];v=+p[k[(k[h>>2]|0)+24>>2]>>3];w=+p[(k[(k[h>>2]|0)+24>>2]|0)+8>>3];p[e>>3]=+p[k[(k[h>>2]|0)+16>>2]>>3];p[e+8>>3]=s;p[e+16>>3]=t;p[e+24>>3]=u;p[e+32>>3]=v;p[e+40>>3]=w;mta(57292,e)|0}w=+p[(k[h>>2]|0)+8>>3];if(+p[(k[h>>2]|0)+8>>3]>=1.0){p[i>>3]=w;k[o>>2]=1}else{p[i>>3]=1.0/w;k[o>>2]=0}k[l>>2]=0;while(1){if(!(+p[i>>3]>2.0))break;k[m>>2]=1;p[j>>3]=.5;while(1){x=k[m>>2]|0;if(!(+p[i>>3]*+p[j>>3]*+p[j>>3]>1.0))break;k[m>>2]=x<<1;p[j>>3]=+p[j>>3]*+p[j>>3]}k[l>>2]=(k[l>>2]|0)+x;p[i>>3]=+p[i>>3]*+p[j>>3]}k[l>>2]=~~(+(k[l>>2]|0)*2.0+ +(+p[i>>3]>1.4142135623730951|0));i=k[l>>2]|0;if(k[o>>2]|0)k[n>>2]=2047-i;else k[n>>2]=2048+i;if(k[(k[f>>2]|0)+448+(k[n>>2]<<2)>>2]|0){k[(k[(k[f>>2]|0)+16832+(k[n>>2]<<2)>>2]|0)+28>>2]=k[h>>2];y=k[h>>2]|0;z=k[n>>2]|0;A=k[f>>2]|0;B=A+16832|0;C=B+(z<<2)|0;k[C>>2]=y;D=k[h>>2]|0;E=D+28|0;k[E>>2]=0;r=d;return}if((k[n>>2]|0)>(k[(k[f>>2]|0)+49600>>2]|0)){k[(k[f>>2]|0)+33216+(k[n>>2]<<2)>>2]=k[(k[f>>2]|0)+49600>>2];k[(k[f>>2]|0)+49600>>2]=k[n>>2]}else{k[q>>2]=(k[n>>2]|0)+1;while(1){F=k[q>>2]|0;if(k[(k[f>>2]|0)+448+(k[q>>2]<<2)>>2]|0)break;k[q>>2]=F+1}k[(k[f>>2]|0)+33216+(k[n>>2]<<2)>>2]=k[(k[f>>2]|0)+33216+(F<<2)>>2];k[(k[f>>2]|0)+33216+(k[q>>2]<<2)>>2]=k[n>>2]}k[(k[f>>2]|0)+448+(k[n>>2]<<2)>>2]=k[h>>2];y=k[h>>2]|0;z=k[n>>2]|0;A=k[f>>2]|0;B=A+16832|0;C=B+(z<<2)|0;k[C>>2]=y;D=k[h>>2]|0;E=D+28|0;k[E>>2]=0;r=d;return}function Ue(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0;h=r;r=r+48|0;i=h+32|0;j=h+28|0;l=h+24|0;m=h;n=h+20|0;o=h+16|0;q=h+12|0;s=h+8|0;k[i>>2]=a;k[j>>2]=b;k[l>>2]=c;p[m>>3]=d;k[n>>2]=e;k[o>>2]=f;k[q>>2]=g;g=ke((k[i>>2]|0)+280|0)|0;k[s>>2]=g;k[k[s>>2]>>2]=k[k[l>>2]>>2]|k[(k[l>>2]|0)+4>>2];p[(k[s>>2]|0)+8>>3]=+p[m>>3];k[(k[s>>2]|0)+24>>2]=k[n>>2];k[(k[s>>2]|0)+16>>2]=k[o>>2];k[(k[s>>2]|0)+20>>2]=k[q>>2];Te(k[i>>2]|0,k[j>>2]|0,k[s>>2]|0);r=h;return}function Ve(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=r;r=r+16|0;c=b+8|0;d=b+4|0;e=b;k[d>>2]=a;if((k[(k[d>>2]|0)+49600>>2]|0)<0){k[c>>2]=0;f=k[c>>2]|0;r=b;return f|0}k[e>>2]=k[(k[d>>2]|0)+448+(k[(k[d>>2]|0)+49600>>2]<<2)>>2];k[(k[d>>2]|0)+448+(k[(k[d>>2]|0)+49600>>2]<<2)>>2]=k[(k[e>>2]|0)+28>>2];if((k[e>>2]|0)==(k[(k[d>>2]|0)+16832+(k[(k[d>>2]|0)+49600>>2]<<2)>>2]|0))k[(k[d>>2]|0)+49600>>2]=k[(k[d>>2]|0)+33216+(k[(k[d>>2]|0)+49600>>2]<<2)>>2];k[c>>2]=k[e>>2];f=k[c>>2]|0;r=b;return f|0}function We(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0;d=r;r=r+112|0;e=d+8|0;f=d+96|0;g=d+92|0;h=d+88|0;i=d+80|0;j=d+72|0;l=d+64|0;m=d;n=d+60|0;o=d+56|0;q=d+52|0;s=d+48|0;t=d+44|0;u=d+40|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[n>>2]=0;k[o>>2]=0;k[q>>2]=k[(k[k[h>>2]>>2]|0)+(2+(k[(k[h>>2]|0)+4>>2]|0)<<2)>>2];k[s>>2]=k[(k[k[h>>2]>>2]|0)+(3-(k[(k[h>>2]|0)+4>>2]|0)<<2)>>2];k[u>>2]=k[(k[k[h>>2]>>2]|0)+(6+(k[(k[h>>2]|0)+4>>2]|0)<<2)>>2];k[i+4>>2]=k[u>>2]&3;k[i>>2]=k[u>>2]^k[i+4>>2];do if((k[i>>2]|0)!=(k[(k[f>>2]|0)+49768>>2]|0)?(k[o>>2]=(k[o>>2]|0)+1,k[t>>2]=k[(k[i>>2]|0)+((k[i+4>>2]|0)+3<<2)>>2],p[m>>3]=(+p[k[q>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[s>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]),+p[m>>3]<0.0):0){if((k[(k[g>>2]|0)+88>>2]|0)==0?!(+p[m>>3]*+p[m>>3]>=(+p[(k[g>>2]|0)+144>>3]*2.0-1.0)*(+p[(k[g>>2]|0)+144>>3]*2.0-1.0)*((+p[k[q>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[q>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]))*((+p[k[s>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[s>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]))):0)break;k[n>>2]=1}while(0);k[j>>2]=k[k[h>>2]>>2];k[j+4>>2]=1-(k[(k[h>>2]|0)+4>>2]|0);k[u>>2]=k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2];k[i+4>>2]=k[u>>2]&3;k[i>>2]=k[u>>2]^k[i+4>>2];do if((k[i>>2]|0)!=(k[(k[f>>2]|0)+49768>>2]|0)?(k[o>>2]=(k[o>>2]|0)+1,k[t>>2]=k[(k[i>>2]|0)+((k[i+4>>2]|0)+3<<2)>>2],p[m>>3]=(+p[k[q>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[s>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]),+p[m>>3]<0.0):0){if((k[(k[g>>2]|0)+88>>2]|0)==0?!(+p[m>>3]*+p[m>>3]>=(+p[(k[g>>2]|0)+144>>3]*2.0-1.0)*(+p[(k[g>>2]|0)+144>>3]*2.0-1.0)*((+p[k[q>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[q>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[q>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]))*((+p[k[s>>2]>>3]-+p[k[t>>2]>>3])*(+p[k[s>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])*(+p[(k[s>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3]))):0)break;k[n>>2]=(k[n>>2]|0)+2}while(0);if(!(k[n>>2]|0)){v=k[n>>2]|0;r=d;return v|0}if((k[(k[g>>2]|0)+128>>2]|0)!=0?!((k[o>>2]|0)==2?(k[(k[g>>2]|0)+128>>2]|0)==1:0):0){v=k[n>>2]|0;r=d;return v|0}if((k[(k[g>>2]|0)+116>>2]|0)>2){w=+p[(k[q>>2]|0)+8>>3];x=+p[k[s>>2]>>3];y=+p[(k[s>>2]|0)+8>>3];p[e>>3]=+p[k[q>>2]>>3];p[e+8>>3]=w;p[e+16>>3]=x;p[e+24>>3]=y;mta(57342,e)|0}e=ke((k[f>>2]|0)+224|0)|0;k[l>>2]=e;if((k[n>>2]|0)==1){k[k[l>>2]>>2]=k[k[h>>2]>>2]|k[(k[h>>2]|0)+4>>2];k[(k[l>>2]|0)+4>>2]=k[q>>2];k[(k[l>>2]|0)+8>>2]=k[s>>2];v=k[n>>2]|0;r=d;return v|0}else{k[k[l>>2]>>2]=k[j>>2]|k[j+4>>2];k[(k[l>>2]|0)+4>>2]=k[s>>2];k[(k[l>>2]|0)+8>>2]=k[q>>2];v=k[n>>2]|0;r=d;return v|0}return 0}function Xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;d=r;r=r+256|0;e=d+240|0;f=d+236|0;g=d+232|0;h=d+224|0;i=d+216|0;j=d+208|0;l=d+204|0;m=d+200|0;n=d+196|0;o=d+192|0;q=d+188|0;s=d+184|0;t=d+180|0;u=d+176|0;v=d+172|0;w=d+168|0;x=d+152|0;y=d+144|0;z=d+136|0;A=d+128|0;B=d+120|0;C=d+112|0;D=d+104|0;E=d+96|0;F=d+88|0;G=d+80|0;H=d+72|0;I=d+64|0;J=d+56|0;K=d+48|0;L=d+40|0;M=d+32|0;N=d+24|0;O=d+16|0;P=d+8|0;Q=d;R=d+164|0;S=d+160|0;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;k[l>>2]=k[(k[k[g>>2]>>2]|0)+((k[27620+(k[(k[g>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[m>>2]=k[(k[k[g>>2]>>2]|0)+((k[27632+(k[(k[g>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[n>>2]=k[(k[k[g>>2]>>2]|0)+((k[(k[g>>2]|0)+4>>2]|0)+3<<2)>>2];p[x>>3]=+p[k[l>>2]>>3]-+p[k[m>>2]>>3];p[y>>3]=+p[(k[l>>2]|0)+8>>3]-+p[(k[m>>2]|0)+8>>3];p[z>>3]=+p[k[m>>2]>>3]-+p[k[n>>2]>>3];p[A>>3]=+p[(k[m>>2]|0)+8>>3]-+p[(k[n>>2]|0)+8>>3];p[B>>3]=+p[k[n>>2]>>3]-+p[k[l>>2]>>3];p[C>>3]=+p[(k[n>>2]|0)+8>>3]-+p[(k[l>>2]|0)+8>>3];p[D>>3]=+p[x>>3]*+p[x>>3];p[E>>3]=+p[y>>3]*+p[y>>3];p[F>>3]=+p[z>>3]*+p[z>>3];p[G>>3]=+p[A>>3]*+p[A>>3];p[H>>3]=+p[B>>3]*+p[B>>3];p[I>>3]=+p[C>>3]*+p[C>>3];p[J>>3]=+p[D>>3]+ +p[E>>3];p[K>>3]=+p[F>>3]+ +p[G>>3];p[L>>3]=+p[H>>3]+ +p[I>>3];if(+p[J>>3]<+p[K>>3]?+p[J>>3]<+p[L>>3]:0){p[M>>3]=+p[J>>3];p[N>>3]=+p[z>>3]*+p[B>>3]+ +p[A>>3]*+p[C>>3];p[N>>3]=+p[N>>3]*+p[N>>3]/(+p[K>>3]*+p[L>>3]);k[o>>2]=k[l>>2];k[q>>2]=k[m>>2];k[h>>2]=k[k[g>>2]>>2];k[h+4>>2]=k[(k[g>>2]|0)+4>>2]}else T=4;do if((T|0)==4)if(+p[K>>3]<+p[L>>3]){p[M>>3]=+p[K>>3];p[N>>3]=+p[x>>3]*+p[B>>3]+ +p[y>>3]*+p[C>>3];p[N>>3]=+p[N>>3]*+p[N>>3]/(+p[J>>3]*+p[L>>3]);k[o>>2]=k[m>>2];k[q>>2]=k[n>>2];k[h>>2]=k[k[g>>2]>>2];k[h+4>>2]=k[27620+(k[(k[g>>2]|0)+4>>2]<<2)>>2];break}else{p[M>>3]=+p[L>>3];p[N>>3]=+p[x>>3]*+p[z>>3]+ +p[y>>3]*+p[A>>3];p[N>>3]=+p[N>>3]*+p[N>>3]/(+p[J>>3]*+p[K>>3]);k[o>>2]=k[n>>2];k[q>>2]=k[l>>2];k[h>>2]=k[k[g>>2]>>2];k[h+4>>2]=k[27632+(k[(k[g>>2]|0)+4>>2]<<2)>>2];break}while(0);if(!(((k[(k[f>>2]|0)+12>>2]|0)==0?(k[(k[f>>2]|0)+16>>2]|0)==0:0)?(k[(k[f>>2]|0)+20>>2]|0)==0:0)){p[O>>3]=(+p[x>>3]*+p[A>>3]-+p[y>>3]*+p[z>>3])*.5;if((k[(k[f>>2]|0)+16>>2]|0)!=0?+p[O>>3]>+p[(k[f>>2]|0)+160>>3]:0){Ue(k[e>>2]|0,k[f>>2]|0,k[g>>2]|0,+p[M>>3],k[n>>2]|0,k[l>>2]|0,k[m>>2]|0);r=d;return}if(((k[(k[f>>2]|0)+12>>2]|0)!=0?+p[O>>3]>+p[(k[k[g>>2]>>2]|0)+(k[(k[e>>2]|0)+49712>>2]<<3)>>3]:0)?+p[(k[k[g>>2]>>2]|0)+(k[(k[e>>2]|0)+49712>>2]<<3)>>3]>0.0:0){Ue(k[e>>2]|0,k[f>>2]|0,k[g>>2]|0,+p[M>>3],k[n>>2]|0,k[l>>2]|0,k[m>>2]|0);r=d;return}if((k[(k[f>>2]|0)+20>>2]|0)!=0?(_d(k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,+p[O>>3])|0)!=0:0){Ue(k[e>>2]|0,k[f>>2]|0,k[g>>2]|0,+p[M>>3],k[n>>2]|0,k[l>>2]|0,k[m>>2]|0);r=d;return}}if(!(+p[N>>3]>+p[(k[f>>2]|0)+144>>3])){r=d;return}if(((k[(k[o>>2]|0)+((k[(k[e>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)==1?(k[(k[q>>2]|0)+((k[(k[e>>2]|0)+49696>>2]|0)+1<<2)>>2]|0)==1:0)?(k[R>>2]=k[(k[h>>2]|0)+(6+(k[h+4>>2]|0)<<2)>>2],k[j+4>>2]=k[R>>2]&1,k[j>>2]=k[R>>2]&-4,(k[j>>2]|0)==(k[(k[e>>2]|0)+49776>>2]|0)):0){k[i>>2]=k[h>>2];k[i+4>>2]=k[h+4>>2];do{k[S>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[h+4>>2]=k[S>>2]&3;k[h>>2]=k[S>>2]^k[h+4>>2];k[h+4>>2]=k[27620+(k[h+4>>2]<<2)>>2];k[R>>2]=k[(k[h>>2]|0)+(6+(k[h+4>>2]|0)<<2)>>2];k[j+4>>2]=k[R>>2]&1;k[j>>2]=k[R>>2]&-4}while((k[j>>2]|0)==(k[(k[e>>2]|0)+49776>>2]|0));k[s>>2]=k[(k[j>>2]|0)+(4+(k[j+4>>2]|0)<<2)>>2];k[t>>2]=k[(k[j>>2]|0)+(5-(k[j+4>>2]|0)<<2)>>2];do{k[S>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[S>>2]&3;k[i>>2]=k[S>>2]^k[i+4>>2];k[i+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[R>>2]=k[(k[i>>2]|0)+(6+(k[i+4>>2]|0)<<2)>>2];k[j+4>>2]=k[R>>2]&1;k[j>>2]=k[R>>2]&-4}while((k[j>>2]|0)==(k[(k[e>>2]|0)+49776>>2]|0));k[u>>2]=k[(k[j>>2]|0)+(4+(k[j+4>>2]|0)<<2)>>2];k[v>>2]=k[(k[j>>2]|0)+(5-(k[j+4>>2]|0)<<2)>>2];k[w>>2]=0;if(+p[k[t>>2]>>3]==+p[k[u>>2]>>3]?+p[(k[t>>2]|0)+8>>3]==+p[(k[u>>2]|0)+8>>3]:0)k[w>>2]=k[t>>2];else T=31;if(((T|0)==31?+p[k[s>>2]>>3]==+p[k[v>>2]>>3]:0)?+p[(k[s>>2]|0)+8>>3]==+p[(k[v>>2]|0)+8>>3]:0)k[w>>2]=k[s>>2];if(((k[w>>2]|0)!=0?(p[P>>3]=(+p[k[o>>2]>>3]-+p[k[w>>2]>>3])*(+p[k[o>>2]>>3]-+p[k[w>>2]>>3])+(+p[(k[o>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3])*(+p[(k[o>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3]),p[Q>>3]=(+p[k[q>>2]>>3]-+p[k[w>>2]>>3])*(+p[k[q>>2]>>3]-+p[k[w>>2]>>3])+(+p[(k[q>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3])*(+p[(k[q>>2]|0)+8>>3]-+p[(k[w>>2]|0)+8>>3]),+p[P>>3]<+p[Q>>3]*1.001):0)?+p[P>>3]>+p[Q>>3]*.999:0){r=d;return}}Ue(k[e>>2]|0,k[f>>2]|0,k[g>>2]|0,+p[M>>3],k[n>>2]|0,k[l>>2]|0,k[m>>2]|0);r=d;return}function Ye(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=r;r=r+32|0;d=c+20|0;e=c+16|0;f=c+8|0;g=c+4|0;k[d>>2]=a;k[e>>2]=b;if(k[(k[e>>2]|0)+116>>2]|0)mta(57407,c)|0;me(k[d>>2]|0);e=se(k[d>>2]|0)|0;k[f>>2]=e;while(1){if(!(k[f>>2]|0))break;k[f+4>>2]=0;while(1){if((k[f+4>>2]|0)>=3)break;k[g>>2]=k[(k[f>>2]|0)+((k[27620+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[g>>2]|0)+(k[(k[d>>2]|0)+49700>>2]<<2)>>2]=k[f>>2]|k[f+4>>2];e=f+4|0;k[e>>2]=(k[e>>2]|0)+1}e=se(k[d>>2]|0)|0;k[f>>2]=e}r=c;return}function Ze(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0;f=r;r=r+144|0;g=f+32|0;h=f+16|0;i=f+140|0;j=f+136|0;l=f+132|0;m=f+128|0;n=f+124|0;o=f+120|0;q=f+112|0;s=f+104|0;t=f+100|0;u=f+96|0;v=f+92|0;w=f+8|0;x=f;y=f+88|0;z=f+84|0;A=f+80|0;k[j>>2]=a;k[l>>2]=b;k[m>>2]=c;k[n>>2]=d;k[o>>2]=e;if((k[(k[l>>2]|0)+116>>2]|0)>2){B=+p[(k[m>>2]|0)+8>>3];p[h>>3]=+p[k[m>>2]>>3];p[h+8>>3]=B;mta(57461,h)|0}k[t>>2]=k[(k[k[n>>2]>>2]|0)+((k[27620+(k[(k[n>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[u>>2]=k[(k[k[n>>2]>>2]|0)+((k[27632+(k[(k[n>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[k[n>>2]>>2]|0)+((k[(k[n>>2]|0)+4>>2]|0)+3<<2)>>2];a:while(1){if((k[(k[l>>2]|0)+116>>2]|0)>2){B=+p[(k[t>>2]|0)+8>>3];C=+p[k[u>>2]>>3];D=+p[(k[u>>2]|0)+8>>3];E=+p[k[v>>2]>>3];F=+p[(k[v>>2]|0)+8>>3];p[g>>3]=+p[k[t>>2]>>3];p[g+8>>3]=B;p[g+16>>3]=C;p[g+24>>3]=D;p[g+32>>3]=E;p[g+40>>3]=F;mta(57500,g)|0}if(+p[k[v>>2]>>3]==+p[k[m>>2]>>3]?+p[(k[v>>2]|0)+8>>3]==+p[(k[m>>2]|0)+8>>3]:0){G=8;break}F=+Ie(k[j>>2]|0,k[l>>2]|0,k[t>>2]|0,k[v>>2]|0,k[m>>2]|0);p[x>>3]=F;F=+Ie(k[j>>2]|0,k[l>>2]|0,k[v>>2]|0,k[u>>2]|0,k[m>>2]|0);p[w>>3]=F;h=+p[w>>3]>0.0;do if(+p[x>>3]>0.0)if(h){k[y>>2]=(+p[k[v>>2]>>3]-+p[k[m>>2]>>3])*(+p[k[u>>2]>>3]-+p[k[t>>2]>>3])+(+p[(k[v>>2]|0)+8>>3]-+p[(k[m>>2]|0)+8>>3])*(+p[(k[u>>2]|0)+8>>3]-+p[(k[t>>2]|0)+8>>3])>0.0&1;break}else{k[y>>2]=1;break}else{if(!h){G=15;break a}k[y>>2]=0}while(0);h=(k[y>>2]|0)!=0;k[q>>2]=k[k[n>>2]>>2];e=k[(k[n>>2]|0)+4>>2]|0;if(h){k[q+4>>2]=k[27632+(e<<2)>>2];k[u>>2]=k[v>>2]}else{k[q+4>>2]=k[27620+(e<<2)>>2];k[t>>2]=k[v>>2]}k[z>>2]=k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2];k[(k[n>>2]|0)+4>>2]=k[z>>2]&3;k[k[n>>2]>>2]=k[z>>2]^k[(k[n>>2]|0)+4>>2];if(((k[o>>2]|0)!=0?(k[(k[j>>2]|0)+49716>>2]|0)!=0:0)?(k[A>>2]=k[(k[q>>2]|0)+(6+(k[q+4>>2]|0)<<2)>>2],k[s+4>>2]=k[A>>2]&1,k[s>>2]=k[A>>2]&-4,(k[s>>2]|0)!=(k[(k[j>>2]|0)+49776>>2]|0)):0){G=25;break}if((k[k[n>>2]>>2]|0)==(k[(k[j>>2]|0)+49768>>2]|0)){G=27;break}k[v>>2]=k[(k[k[n>>2]>>2]|0)+((k[(k[n>>2]|0)+4>>2]|0)+3<<2)>>2]}if((G|0)==8){k[(k[n>>2]|0)+4>>2]=k[27632+(k[(k[n>>2]|0)+4>>2]<<2)>>2];k[i>>2]=2;H=k[i>>2]|0;r=f;return H|0}else if((G|0)==15){if(+p[x>>3]==0.0){k[(k[n>>2]|0)+4>>2]=k[27632+(k[(k[n>>2]|0)+4>>2]<<2)>>2];k[i>>2]=1;H=k[i>>2]|0;r=f;return H|0}if(+p[w>>3]==0.0){k[(k[n>>2]|0)+4>>2]=k[27620+(k[(k[n>>2]|0)+4>>2]<<2)>>2];k[i>>2]=1;H=k[i>>2]|0;r=f;return H|0}else{k[i>>2]=0;H=k[i>>2]|0;r=f;return H|0}}else if((G|0)==25){k[k[n>>2]>>2]=k[q>>2];k[(k[n>>2]|0)+4>>2]=k[q+4>>2];k[i>>2]=3;H=k[i>>2]|0;r=f;return H|0}else if((G|0)==27){k[k[n>>2]>>2]=k[q>>2];k[(k[n>>2]|0)+4>>2]=k[q+4>>2];k[i>>2]=3;H=k[i>>2]|0;r=f;return H|0}return 0}function _e(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0;e=r;r=r+176|0;f=e+72|0;g=e+56|0;h=e+40|0;i=e+24|0;j=e+160|0;l=e+156|0;m=e+152|0;n=e+148|0;o=e+144|0;q=e+140|0;s=e+136|0;t=e+128|0;u=e+120|0;v=e+116|0;w=e+112|0;x=e+16|0;y=e+8|0;z=e;A=e+108|0;B=e+104|0;C=e+100|0;D=e+96|0;E=e+92|0;F=e+88|0;k[l>>2]=a;k[m>>2]=b;k[n>>2]=c;k[o>>2]=d;if((k[(k[m>>2]|0)+116>>2]|0)>2){G=+p[(k[n>>2]|0)+8>>3];p[i>>3]=+p[k[n>>2]>>3];p[i+8>>3]=G;mta(57553,i)|0}k[u>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];p[x>>3]=(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])*(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])+(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3])*(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3]);if((k[(k[m>>2]|0)+116>>2]|0)>2){G=+p[(k[u>>2]|0)+8>>3];p[h>>3]=+p[k[u>>2]>>3];p[h+8>>3]=G;mta(57616,h)|0}if((k[(k[l>>2]|0)+49784>>2]|0)!=0?(k[(k[(k[l>>2]|0)+49784>>2]|0)+4>>2]|0)!=0:0){k[u>>2]=k[(k[(k[l>>2]|0)+49784>>2]|0)+((k[27620+(k[(k[l>>2]|0)+49784+4>>2]<<2)>>2]|0)+3<<2)>>2];if(+p[k[u>>2]>>3]==+p[k[n>>2]>>3]?+p[(k[u>>2]|0)+8>>3]==+p[(k[n>>2]|0)+8>>3]:0){k[k[o>>2]>>2]=k[(k[l>>2]|0)+49784>>2];k[(k[o>>2]|0)+4>>2]=k[(k[l>>2]|0)+49784+4>>2];k[j>>2]=2;H=k[j>>2]|0;r=e;return H|0}p[y>>3]=(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])*(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])+(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3])*(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3]);if(+p[y>>3]<+p[x>>3]?(k[k[o>>2]>>2]=k[(k[l>>2]|0)+49784>>2],k[(k[o>>2]|0)+4>>2]=k[(k[l>>2]|0)+49784+4>>2],p[x>>3]=+p[y>>3],(k[(k[m>>2]|0)+116>>2]|0)>2):0){G=+p[(k[u>>2]|0)+8>>3];p[g>>3]=+p[k[u>>2]>>3];p[g+8>>3]=G;mta(57666,g)|0}}while(1){g=ma((k[(k[l>>2]|0)+49728>>2]|0)*11|0,k[(k[l>>2]|0)+49728>>2]|0)|0;h=ma(g,k[(k[l>>2]|0)+49728>>2]|0)|0;g=(k[l>>2]|0)+49728|0;I=k[g>>2]|0;if((h|0)>=(k[(k[l>>2]|0)+40>>2]|0))break;k[g>>2]=I+1}k[A>>2]=(((I*4092|0)-1|0)/(k[(k[l>>2]|0)+44>>2]|0)|0)+1;I=(ma(k[(k[l>>2]|0)+49728>>2]|0,k[(k[l>>2]|0)+36>>2]|0)|0)-1|0;k[C>>2]=((I|0)/(k[(k[l>>2]|0)+44>>2]|0)|0)+1;k[B>>2]=k[(k[l>>2]|0)+49728>>2];k[D>>2]=k[(k[l>>2]|0)+36>>2];k[E>>2]=k[(k[l>>2]|0)+44>>2];k[q>>2]=k[k[l>>2]>>2];k[t+4>>2]=0;while(1){if((k[B>>2]|0)<=0)break;if((k[D>>2]|0)>(k[E>>2]|0))k[D>>2]=k[E>>2];k[w>>2]=(k[q>>2]|0)+4;k[s>>2]=(k[w>>2]|0)+(k[(k[l>>2]|0)+24>>2]|0)-(((k[w>>2]|0)>>>0)%((k[(k[l>>2]|0)+24>>2]|0)>>>0)|0);do{I=k[s>>2]|0;g=Qe(k[D>>2]|0)|0;h=I+(ma(g,k[(k[l>>2]|0)+28>>2]|0)|0)|0;k[t>>2]=h;if(((k[(k[t>>2]|0)+4>>2]|0)!=0?(k[u>>2]=k[(k[t>>2]|0)+((k[27620+(k[t+4>>2]<<2)>>2]|0)+3<<2)>>2],p[y>>3]=(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])*(+p[k[n>>2]>>3]-+p[k[u>>2]>>3])+(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3])*(+p[(k[n>>2]|0)+8>>3]-+p[(k[u>>2]|0)+8>>3]),+p[y>>3]<+p[x>>3]):0)?(k[k[o>>2]>>2]=k[t>>2],k[(k[o>>2]|0)+4>>2]=k[t+4>>2],p[x>>3]=+p[y>>3],(k[(k[m>>2]|0)+116>>2]|0)>2):0){G=+p[(k[u>>2]|0)+8>>3];p[f>>3]=+p[k[u>>2]>>3];p[f+8>>3]=G;mta(57724,f)|0}k[C>>2]=(k[C>>2]|0)+-1;k[B>>2]=(k[B>>2]|0)+-1}while((k[C>>2]|0)>0?(k[B>>2]|0)>0:0);if((k[B>>2]|0)<=0)continue;k[q>>2]=k[k[q>>2]>>2];k[C>>2]=k[A>>2];k[E>>2]=(k[E>>2]|0)-(k[D>>2]|0);k[D>>2]=4092}k[u>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[v>>2]=k[(k[k[o>>2]>>2]|0)+((k[27632+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if(+p[k[u>>2]>>3]==+p[k[n>>2]>>3]?+p[(k[u>>2]|0)+8>>3]==+p[(k[n>>2]|0)+8>>3]:0){k[j>>2]=2;H=k[j>>2]|0;r=e;return H|0}if(+p[k[v>>2]>>3]==+p[k[n>>2]>>3]?+p[(k[v>>2]|0)+8>>3]==+p[(k[n>>2]|0)+8>>3]:0){k[(k[o>>2]|0)+4>>2]=k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[j>>2]=2;H=k[j>>2]|0;r=e;return H|0}G=+Ie(k[l>>2]|0,k[m>>2]|0,k[u>>2]|0,k[v>>2]|0,k[n>>2]|0);p[z>>3]=G;if(!(+p[z>>3]<0.0)){if((+p[z>>3]==0.0?(+p[k[u>>2]>>3]<+p[k[n>>2]>>3]|0)==(+p[k[n>>2]>>3]<+p[k[v>>2]>>3]|0):0)?(+p[(k[u>>2]|0)+8>>3]<+p[(k[n>>2]|0)+8>>3]|0)==(+p[(k[n>>2]|0)+8>>3]<+p[(k[v>>2]|0)+8>>3]|0):0){k[j>>2]=1;H=k[j>>2]|0;r=e;return H|0}}else{k[F>>2]=k[(k[k[o>>2]>>2]|0)+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[(k[o>>2]|0)+4>>2]=k[F>>2]&3;k[k[o>>2]>>2]=k[F>>2]^k[(k[o>>2]|0)+4>>2]}F=Ze(k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,k[o>>2]|0,0)|0;k[j>>2]=F;H=k[j>>2]|0;r=e;return H|0}function $e(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+64|0;f=e;g=e+52|0;h=e+48|0;i=e+44|0;j=e+40|0;l=e+32|0;m=e+24|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[j>>2]=d;k[n>>2]=k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[o>>2]=k[(k[k[i>>2]>>2]|0)+((k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if(!(k[(k[n>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[n>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2]=k[j>>2];if(!(k[(k[o>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2]|0))k[(k[o>>2]|0)+(k[(k[g>>2]|0)+49696>>2]<<2)>>2]=k[j>>2];k[q>>2]=k[(k[k[i>>2]>>2]|0)+(6+(k[(k[i>>2]|0)+4>>2]|0)<<2)>>2];k[m+4>>2]=k[q>>2]&1;k[m>>2]=k[q>>2]&-4;if((k[m>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0)){Ce(k[g>>2]|0,m);k[(k[m>>2]|0)+(2+(k[m+4>>2]|0)<<2)>>2]=k[o>>2];k[(k[m>>2]|0)+(3-(k[m+4>>2]|0)<<2)>>2]=k[n>>2];k[(k[m>>2]|0)+(4+(k[m+4>>2]|0)<<2)>>2]=k[o>>2];k[(k[m>>2]|0)+(5-(k[m+4>>2]|0)<<2)>>2]=k[n>>2];k[(k[k[i>>2]>>2]|0)+(6+(k[(k[i>>2]|0)+4>>2]|0)<<2)>>2]=k[m>>2]|k[m+4>>2];k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[k[i>>2]>>2]|k[(k[i>>2]|0)+4>>2];k[p>>2]=k[(k[k[i>>2]>>2]|0)+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[l+4>>2]=k[p>>2]&3;k[l>>2]=k[p>>2]^k[l+4>>2];k[m+4>>2]=1-(k[m+4>>2]|0);k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[m>>2]|k[m+4>>2];k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[l>>2]|k[l+4>>2];k[(k[m>>2]|0)+32>>2]=k[j>>2];if((k[(k[h>>2]|0)+116>>2]|0)<=2){r=e;return}mta(57775,f)|0;fe(k[g>>2]|0,k[h>>2]|0,m);r=e;return}else{if(k[(k[m>>2]|0)+32>>2]|0){r=e;return}k[(k[m>>2]|0)+32>>2]=k[j>>2];r=e;return}}function af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+160|0;e=d+8|0;f=d;g=d+152|0;h=d+148|0;i=d+144|0;j=d+136|0;l=d+128|0;m=d+120|0;n=d+112|0;o=d+104|0;p=d+96|0;q=d+88|0;s=d+80|0;t=d+72|0;u=d+64|0;v=d+56|0;w=d+48|0;x=d+40|0;y=d+32|0;z=d+28|0;A=d+24|0;B=d+20|0;C=d+16|0;D=d+12|0;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[z>>2]=k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[y>>2]=k[(k[k[i>>2]>>2]|0)+((k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[A>>2]=k[(k[k[i>>2]>>2]|0)+((k[(k[i>>2]|0)+4>>2]|0)+3<<2)>>2];k[C>>2]=k[(k[k[i>>2]>>2]|0)+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[o+4>>2]=k[C>>2]&3;k[o>>2]=k[C>>2]^k[o+4>>2];k[B>>2]=k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2];k[m>>2]=k[o>>2];k[m+4>>2]=k[27632+(k[o+4>>2]<<2)>>2];k[C>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[s+4>>2]=k[C>>2]&3;k[s>>2]=k[C>>2]^k[s+4>>2];k[n>>2]=k[o>>2];k[n+4>>2]=k[27620+(k[o+4>>2]<<2)>>2];k[C>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[t+4>>2]=k[C>>2]&3;k[t>>2]=k[C>>2]^k[t+4>>2];k[j>>2]=k[k[i>>2]>>2];k[j+4>>2]=k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[C>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[p+4>>2]=k[C>>2]&3;k[p>>2]=k[C>>2]^k[p+4>>2];k[l>>2]=k[k[i>>2]>>2];k[l+4>>2]=k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[C>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[q+4>>2]=k[C>>2]&3;k[q>>2]=k[C>>2]^k[q+4>>2];k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2]=k[p>>2]|k[p+4>>2];k[(k[p>>2]|0)+(k[p+4>>2]<<2)>>2]=k[m>>2]|k[m+4>>2];k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2]=k[q>>2]|k[q+4>>2];k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2]=k[j>>2]|k[j+4>>2];k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[l>>2]|k[l+4>>2];k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2]=k[s>>2]|k[s+4>>2];k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2]=k[n>>2]|k[n+4>>2];do if(k[(k[g>>2]|0)+49716>>2]|0){k[D>>2]=k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2];k[w+4>>2]=k[D>>2]&1;k[w>>2]=k[D>>2]&-4;k[D>>2]=k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2];k[u+4>>2]=k[D>>2]&1;k[u>>2]=k[D>>2]&-4;k[D>>2]=k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2];k[v+4>>2]=k[D>>2]&1;k[v>>2]=k[D>>2]&-4;k[D>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[x+4>>2]=k[D>>2]&1;k[x>>2]=k[D>>2]&-4;if((k[w>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[w>>2]|k[w+4>>2];k[(k[w>>2]|0)+(6+(k[w+4>>2]|0)<<2)>>2]=k[n>>2]|k[n+4>>2]}if((k[u>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(6+(k[u+4>>2]|0)<<2)>>2]=k[m>>2]|k[m+4>>2]}if((k[v>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2]=k[v>>2]|k[v+4>>2];k[(k[v>>2]|0)+(6+(k[v+4>>2]|0)<<2)>>2]=k[j>>2]|k[j+4>>2]}if((k[x>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0)){k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];break}else{k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[x>>2]|k[x+4>>2];k[(k[x>>2]|0)+(6+(k[x+4>>2]|0)<<2)>>2]=k[l>>2]|k[l+4>>2];break}}while(0);k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[B>>2];k[(k[k[i>>2]>>2]|0)+((k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[k[i>>2]>>2]|0)+((k[(k[i>>2]|0)+4>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[o>>2]|0)+((k[27620+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[o>>2]|0)+((k[27632+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[B>>2];k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2]=k[y>>2];if((k[(k[h>>2]|0)+116>>2]|0)<=2){r=d;return}mta(57792,f)|0;ee(k[g>>2]|0,k[h>>2]|0,o);mta(57821,e)|0;ee(k[g>>2]|0,k[h>>2]|0,k[i>>2]|0);r=d;return}function bf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=r;r=r+160|0;e=d+8|0;f=d;g=d+152|0;h=d+148|0;i=d+144|0;j=d+136|0;l=d+128|0;m=d+120|0;n=d+112|0;o=d+104|0;p=d+96|0;q=d+88|0;s=d+80|0;t=d+72|0;u=d+64|0;v=d+56|0;w=d+48|0;x=d+40|0;y=d+32|0;z=d+28|0;A=d+24|0;B=d+20|0;C=d+16|0;D=d+12|0;k[g>>2]=a;k[h>>2]=b;k[i>>2]=c;k[z>>2]=k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[y>>2]=k[(k[k[i>>2]>>2]|0)+((k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[A>>2]=k[(k[k[i>>2]>>2]|0)+((k[(k[i>>2]|0)+4>>2]|0)+3<<2)>>2];k[C>>2]=k[(k[k[i>>2]>>2]|0)+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[o+4>>2]=k[C>>2]&3;k[o>>2]=k[C>>2]^k[o+4>>2];k[B>>2]=k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2];k[m>>2]=k[o>>2];k[m+4>>2]=k[27632+(k[o+4>>2]<<2)>>2];k[C>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[s+4>>2]=k[C>>2]&3;k[s>>2]=k[C>>2]^k[s+4>>2];k[n>>2]=k[o>>2];k[n+4>>2]=k[27620+(k[o+4>>2]<<2)>>2];k[C>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[t+4>>2]=k[C>>2]&3;k[t>>2]=k[C>>2]^k[t+4>>2];k[j>>2]=k[k[i>>2]>>2];k[j+4>>2]=k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[C>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[p+4>>2]=k[C>>2]&3;k[p>>2]=k[C>>2]^k[p+4>>2];k[l>>2]=k[k[i>>2]>>2];k[l+4>>2]=k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2];k[C>>2]=k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2];k[q+4>>2]=k[C>>2]&3;k[q>>2]=k[C>>2]^k[q+4>>2];k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2]=k[t>>2]|k[t+4>>2];k[(k[t>>2]|0)+(k[t+4>>2]<<2)>>2]=k[m>>2]|k[m+4>>2];k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2]=k[s>>2]|k[s+4>>2];k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2]=k[j>>2]|k[j+4>>2];k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[p>>2]|k[p+4>>2];k[(k[p>>2]|0)+(k[p+4>>2]<<2)>>2]=k[l>>2]|k[l+4>>2];k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2]=k[q>>2]|k[q+4>>2];k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2]=k[n>>2]|k[n+4>>2];do if(k[(k[g>>2]|0)+49716>>2]|0){k[D>>2]=k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2];k[w+4>>2]=k[D>>2]&1;k[w>>2]=k[D>>2]&-4;k[D>>2]=k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2];k[u+4>>2]=k[D>>2]&1;k[u>>2]=k[D>>2]&-4;k[D>>2]=k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2];k[v+4>>2]=k[D>>2]&1;k[v>>2]=k[D>>2]&-4;k[D>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[x+4>>2]=k[D>>2]&1;k[x>>2]=k[D>>2]&-4;if((k[w>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[j>>2]|0)+(6+(k[j+4>>2]|0)<<2)>>2]=k[w>>2]|k[w+4>>2];k[(k[w>>2]|0)+(6+(k[w+4>>2]|0)<<2)>>2]=k[j>>2]|k[j+4>>2]}if((k[u>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[l>>2]|0)+(6+(k[l+4>>2]|0)<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(6+(k[u+4>>2]|0)<<2)>>2]=k[l>>2]|k[l+4>>2]}if((k[v>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0))k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];else{k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[v>>2]|k[v+4>>2];k[(k[v>>2]|0)+(6+(k[v+4>>2]|0)<<2)>>2]=k[n>>2]|k[n+4>>2]}if((k[x>>2]|0)==(k[(k[g>>2]|0)+49776>>2]|0)){k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[(k[g>>2]|0)+49776>>2];break}else{k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[x>>2]|k[x+4>>2];k[(k[x>>2]|0)+(6+(k[x+4>>2]|0)<<2)>>2]=k[m>>2]|k[m+4>>2];break}}while(0);k[(k[k[i>>2]>>2]|0)+((k[27620+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[k[i>>2]>>2]|0)+((k[27632+(k[(k[i>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[B>>2];k[(k[k[i>>2]>>2]|0)+((k[(k[i>>2]|0)+4>>2]|0)+3<<2)>>2]=k[y>>2];k[(k[o>>2]|0)+((k[27620+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[B>>2];k[(k[o>>2]|0)+((k[27632+(k[o+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[A>>2];k[(k[o>>2]|0)+((k[o+4>>2]|0)+3<<2)>>2]=k[z>>2];if((k[(k[h>>2]|0)+116>>2]|0)<=2){r=d;return}mta(57834,f)|0;ee(k[g>>2]|0,k[h>>2]|0,k[i>>2]|0);mta(57821,e)|0;ee(k[g>>2]|0,k[h>>2]|0,o);r=d;return}function cf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0.0,ta=0,ua=0.0,va=0.0,wa=0;h=r;r=r+416|0;i=h+128|0;j=h+120|0;l=h+112|0;m=h+104|0;n=h+96|0;o=h+88|0;q=h+80|0;s=h+72|0;t=h+64|0;u=h+32|0;v=h+16|0;w=h+412|0;x=h+408|0;y=h+404|0;z=h+400|0;A=h+396|0;B=h+392|0;C=h+388|0;D=h+384|0;E=h+376|0;F=h+368|0;G=h+360|0;H=h+352|0;I=h+344|0;J=h+336|0;K=h+328|0;L=h+320|0;M=h+312|0;N=h+304|0;O=h+296|0;P=h+288|0;Q=h+280|0;R=h+272|0;S=h+264|0;T=h+256|0;U=h+248|0;V=h+240|0;W=h+232|0;X=h+224|0;Y=h+216|0;Z=h+208|0;_=h+200|0;$=h+196|0;aa=h+192|0;ba=h+188|0;ca=h+184|0;da=h+180|0;ea=h+176|0;fa=h+172|0;ga=h+168|0;ha=h+164|0;ia=h+8|0;ja=h;ka=h+160|0;la=h+156|0;ma=h+152|0;na=h+148|0;oa=h+144|0;pa=h+140|0;qa=h+136|0;ra=h+132|0;k[x>>2]=a;k[y>>2]=b;k[z>>2]=c;k[A>>2]=d;k[B>>2]=e;k[C>>2]=f;k[D>>2]=g;if((k[(k[y>>2]|0)+116>>2]|0)>1){sa=+p[(k[z>>2]|0)+8>>3];p[v>>3]=+p[k[z>>2]>>3];p[v+8>>3]=sa;mta(57865,v)|0}v=k[k[A>>2]>>2]|0;do if(!(k[B>>2]|0))if((v|0)==(k[(k[x>>2]|0)+49768>>2]|0)){k[E>>2]=k[(k[x>>2]|0)+49768>>2];k[E+4>>2]=0;k[qa>>2]=k[(k[E>>2]|0)+(k[E+4>>2]<<2)>>2];k[E+4>>2]=k[qa>>2]&3;k[E>>2]=k[qa>>2]^k[E+4>>2];g=_e(k[x>>2]|0,k[y>>2]|0,k[z>>2]|0,E)|0;k[la>>2]=g;break}else{k[E>>2]=k[k[A>>2]>>2];k[E+4>>2]=k[(k[A>>2]|0)+4>>2];g=Ze(k[x>>2]|0,k[y>>2]|0,k[z>>2]|0,E,1)|0;k[la>>2]=g;break}else{k[E>>2]=v;k[E+4>>2]=k[(k[A>>2]|0)+4>>2];k[la>>2]=1}while(0);if((k[la>>2]|0)==2){k[k[A>>2]>>2]=k[E>>2];k[(k[A>>2]|0)+4>>2]=k[E+4>>2];k[(k[x>>2]|0)+49784>>2]=k[E>>2];k[(k[x>>2]|0)+49784+4>>2]=k[E+4>>2];k[w>>2]=3;ta=k[w>>2]|0;r=h;return ta|0}if(!((k[la>>2]|0)==1|(k[la>>2]|0)==3)){k[G>>2]=k[E>>2];k[G+4>>2]=k[27620+(k[E+4>>2]<<2)>>2];k[H>>2]=k[E>>2];k[H+4>>2]=k[27632+(k[E+4>>2]<<2)>>2];k[qa>>2]=k[(k[G>>2]|0)+(k[G+4>>2]<<2)>>2];k[N+4>>2]=k[qa>>2]&3;k[N>>2]=k[qa>>2]^k[N+4>>2];k[qa>>2]=k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2];k[O+4>>2]=k[qa>>2]&3;k[O>>2]=k[qa>>2]^k[O+4>>2];Be(k[x>>2]|0,k[y>>2]|0,K);Be(k[x>>2]|0,k[y>>2]|0,L);k[ca>>2]=k[(k[E>>2]|0)+((k[27620+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];k[ba>>2]=k[(k[E>>2]|0)+((k[27632+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];k[da>>2]=k[(k[E>>2]|0)+((k[E+4>>2]|0)+3<<2)>>2];k[(k[K>>2]|0)+((k[27620+(k[K+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[ba>>2];k[(k[K>>2]|0)+((k[27632+(k[K+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[da>>2];k[(k[K>>2]|0)+((k[K+4>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[L>>2]|0)+((k[27620+(k[L+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[da>>2];k[(k[L>>2]|0)+((k[27632+(k[L+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[ca>>2];k[(k[L>>2]|0)+((k[L+4>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[E>>2]|0)+((k[E+4>>2]|0)+3<<2)>>2]=k[z>>2];k[pa>>2]=0;while(1){if((k[pa>>2]|0)>=(k[(k[x>>2]|0)+49684>>2]|0))break;p[ia>>3]=+p[(k[E>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3];p[(k[K>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[ia>>3];p[(k[L>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[ia>>3];k[pa>>2]=(k[pa>>2]|0)+1}if(k[(k[y>>2]|0)+12>>2]|0){p[ja>>3]=+p[(k[E>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3];p[(k[K>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[ja>>3];p[(k[L>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[ja>>3]}if(k[(k[x>>2]|0)+49716>>2]|0){k[ra>>2]=k[(k[G>>2]|0)+(6+(k[G+4>>2]|0)<<2)>>2];k[S+4>>2]=k[ra>>2]&1;k[S>>2]=k[ra>>2]&-4;if((k[S>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)){k[(k[G>>2]|0)+(6+(k[G+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];k[(k[K>>2]|0)+(6+(k[K+4>>2]|0)<<2)>>2]=k[S>>2]|k[S+4>>2];k[(k[S>>2]|0)+(6+(k[S+4>>2]|0)<<2)>>2]=k[K>>2]|k[K+4>>2]}k[ra>>2]=k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2];k[T+4>>2]=k[ra>>2]&1;k[T>>2]=k[ra>>2]&-4;if((k[T>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)){k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];k[(k[L>>2]|0)+(6+(k[L+4>>2]|0)<<2)>>2]=k[T>>2]|k[T+4>>2];k[(k[T>>2]|0)+(6+(k[T+4>>2]|0)<<2)>>2]=k[L>>2]|k[L+4>>2]}}k[(k[K>>2]|0)+(k[K+4>>2]<<2)>>2]=k[N>>2]|k[N+4>>2];k[(k[N>>2]|0)+(k[N+4>>2]<<2)>>2]=k[K>>2]|k[K+4>>2];k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[O>>2]|k[O+4>>2];k[(k[O>>2]|0)+(k[O+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[K+4>>2]=k[27620+(k[K+4>>2]<<2)>>2];k[L+4>>2]=k[27632+(k[L+4>>2]<<2)>>2];k[(k[K>>2]|0)+(k[K+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[K>>2]|k[K+4>>2];k[K+4>>2]=k[27620+(k[K+4>>2]<<2)>>2];k[(k[G>>2]|0)+(k[G+4>>2]<<2)>>2]=k[K>>2]|k[K+4>>2];k[(k[K>>2]|0)+(k[K+4>>2]<<2)>>2]=k[G>>2]|k[G+4>>2];k[L+4>>2]=k[27632+(k[L+4>>2]<<2)>>2];k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[H>>2]|k[H+4>>2];if(k[(k[x>>2]|0)+49720>>2]|0){he((k[x>>2]|0)+336|0);la=ke((k[x>>2]|0)+336|0)|0;k[(k[x>>2]|0)+49604>>2]=la;k[k[(k[x>>2]|0)+49604>>2]>>2]=k[E>>2]|k[E+4>>2];k[(k[(k[x>>2]|0)+49604>>2]|0)+4>>2]=0}if((k[(k[y>>2]|0)+116>>2]|0)>2){mta(57986,n)|0;ee(k[x>>2]|0,k[y>>2]|0,E);mta(58002,m)|0;ee(k[x>>2]|0,k[y>>2]|0,K);mta(58019,l)|0;ee(k[x>>2]|0,k[y>>2]|0,L)}}else{if(((k[B>>2]|0)==0?(k[(k[x>>2]|0)+49716>>2]|0)!=0:0)?(k[ra>>2]=k[(k[E>>2]|0)+(6+(k[E+4>>2]|0)<<2)>>2],k[W+4>>2]=k[ra>>2]&1,k[W>>2]=k[ra>>2]&-4,(k[W>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)):0){if(k[C>>2]|0){k[oa>>2]=(k[(k[y>>2]|0)+128>>2]|0)!=2&1;if((k[oa>>2]|0)!=0?(k[(k[y>>2]|0)+128>>2]|0)==1:0){k[qa>>2]=k[(k[E>>2]|0)+(k[E+4>>2]<<2)>>2];k[R+4>>2]=k[qa>>2]&3;k[R>>2]=k[qa>>2]^k[R+4>>2];k[oa>>2]=(k[R>>2]|0)!=(k[(k[x>>2]|0)+49768>>2]|0)&1}if((k[oa>>2]|0)!=0?(oa=ke((k[x>>2]|0)+224|0)|0,k[_>>2]=oa,k[k[_>>2]>>2]=k[W>>2]|k[W+4>>2],k[(k[_>>2]|0)+4>>2]=k[(k[W>>2]|0)+(2+(k[W+4>>2]|0)<<2)>>2],k[(k[_>>2]|0)+8>>2]=k[(k[W>>2]|0)+(3-(k[W+4>>2]|0)<<2)>>2],(k[(k[y>>2]|0)+116>>2]|0)>2):0){sa=+p[(k[(k[_>>2]|0)+4>>2]|0)+8>>3];ua=+p[k[(k[_>>2]|0)+8>>2]>>3];va=+p[(k[(k[_>>2]|0)+8>>2]|0)+8>>3];p[u>>3]=+p[k[(k[_>>2]|0)+4>>2]>>3];p[u+8>>3]=sa;p[u+16>>3]=ua;p[u+24>>3]=va;mta(57342,u)|0}}k[k[A>>2]>>2]=k[E>>2];k[(k[A>>2]|0)+4>>2]=k[E+4>>2];k[(k[x>>2]|0)+49784>>2]=k[E>>2];k[(k[x>>2]|0)+49784+4>>2]=k[E+4>>2];k[w>>2]=2;ta=k[w>>2]|0;r=h;return ta|0}k[H>>2]=k[E>>2];k[H+4>>2]=k[27632+(k[E+4>>2]<<2)>>2];k[qa>>2]=k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2];k[O+4>>2]=k[qa>>2]&3;k[O>>2]=k[qa>>2]^k[O+4>>2];k[qa>>2]=k[(k[E>>2]|0)+(k[E+4>>2]<<2)>>2];k[J+4>>2]=k[qa>>2]&3;k[J>>2]=k[qa>>2]^k[J+4>>2];k[na>>2]=(k[J>>2]|0)!=(k[(k[x>>2]|0)+49768>>2]|0)&1;if(k[na>>2]|0){k[J+4>>2]=k[27620+(k[J+4>>2]<<2)>>2];k[qa>>2]=k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2];k[Q+4>>2]=k[qa>>2]&3;k[Q>>2]=k[qa>>2]^k[Q+4>>2];Be(k[x>>2]|0,k[y>>2]|0,M)}else{u=(k[x>>2]|0)+49688|0;k[u>>2]=(k[u>>2]|0)+1}Be(k[x>>2]|0,k[y>>2]|0,L);k[ca>>2]=k[(k[E>>2]|0)+((k[27620+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];k[ba>>2]=k[(k[E>>2]|0)+((k[27632+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];k[da>>2]=k[(k[E>>2]|0)+((k[E+4>>2]|0)+3<<2)>>2];k[(k[L>>2]|0)+((k[27620+(k[L+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[da>>2];k[(k[L>>2]|0)+((k[27632+(k[L+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[ca>>2];k[(k[L>>2]|0)+((k[L+4>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[E>>2]|0)+((k[27620+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[pa>>2]=0;while(1){if((k[pa>>2]|0)>=(k[(k[x>>2]|0)+49684>>2]|0))break;p[(k[L>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[(k[H>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3];k[pa>>2]=(k[pa>>2]|0)+1}if(k[(k[y>>2]|0)+12>>2]|0)p[(k[L>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[(k[H>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3];if(k[na>>2]|0){k[ea>>2]=k[(k[J>>2]|0)+((k[27632+(k[J+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[M>>2]|0)+((k[27620+(k[M+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[ca>>2];k[(k[M>>2]|0)+((k[27632+(k[M+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[ea>>2];k[(k[M>>2]|0)+((k[M+4>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[J>>2]|0)+((k[27620+(k[J+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[pa>>2]=0;while(1){if((k[pa>>2]|0)>=(k[(k[x>>2]|0)+49684>>2]|0))break;p[(k[M>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[(k[J>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3];k[pa>>2]=(k[pa>>2]|0)+1}if(k[(k[y>>2]|0)+12>>2]|0)p[(k[M>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[(k[J>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]}if(k[(k[x>>2]|0)+49716>>2]|0){k[ra>>2]=k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2];k[T+4>>2]=k[ra>>2]&1;k[T>>2]=k[ra>>2]&-4;if((k[T>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)){k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];k[(k[L>>2]|0)+(6+(k[L+4>>2]|0)<<2)>>2]=k[T>>2]|k[T+4>>2];k[(k[T>>2]|0)+(6+(k[T+4>>2]|0)<<2)>>2]=k[L>>2]|k[L+4>>2]}if((k[na>>2]|0)!=0?(k[ra>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2],k[V+4>>2]=k[ra>>2]&1,k[V>>2]=k[ra>>2]&-4,(k[V>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)):0){k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];k[(k[M>>2]|0)+(6+(k[M+4>>2]|0)<<2)>>2]=k[V>>2]|k[V+4>>2];k[(k[V>>2]|0)+(6+(k[V+4>>2]|0)<<2)>>2]=k[M>>2]|k[M+4>>2]}}k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[O>>2]|k[O+4>>2];k[(k[O>>2]|0)+(k[O+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[L+4>>2]=k[27632+(k[L+4>>2]<<2)>>2];k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[H>>2]|k[H+4>>2];k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[L+4>>2]=k[27632+(k[L+4>>2]<<2)>>2];if(k[na>>2]|0){k[(k[M>>2]|0)+(k[M+4>>2]<<2)>>2]=k[Q>>2]|k[Q+4>>2];k[(k[Q>>2]|0)+(k[Q+4>>2]<<2)>>2]=k[M>>2]|k[M+4>>2];k[M+4>>2]=k[27620+(k[M+4>>2]<<2)>>2];k[(k[M>>2]|0)+(k[M+4>>2]<<2)>>2]=k[J>>2]|k[J+4>>2];k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2]=k[M>>2]|k[M+4>>2];k[M+4>>2]=k[27620+(k[M+4>>2]<<2)>>2];k[(k[M>>2]|0)+(k[M+4>>2]<<2)>>2]=k[L>>2]|k[L+4>>2];k[(k[L>>2]|0)+(k[L+4>>2]<<2)>>2]=k[M>>2]|k[M+4>>2]}if((k[B>>2]|0)!=0?(k[(k[k[B>>2]>>2]|0)+(3-(k[(k[B>>2]|0)+4>>2]|0)<<2)>>2]=k[z>>2],k[ga>>2]=k[(k[k[B>>2]>>2]|0)+(4+(k[(k[B>>2]|0)+4>>2]|0)<<2)>>2],k[ha>>2]=k[(k[k[B>>2]>>2]|0)+(5-(k[(k[B>>2]|0)+4>>2]|0)<<2)>>2],k[(k[B>>2]|0)+4>>2]=1-(k[(k[B>>2]|0)+4>>2]|0),k[ra>>2]=k[(k[k[B>>2]>>2]|0)+(k[(k[B>>2]|0)+4>>2]<<2)>>2],k[Y+4>>2]=k[ra>>2]&1,k[Y>>2]=k[ra>>2]&-4,$e(k[x>>2]|0,k[y>>2]|0,L,k[(k[k[B>>2]>>2]|0)+32>>2]|0),k[ra>>2]=k[(k[L>>2]|0)+(6+(k[L+4>>2]|0)<<2)>>2],k[Z+4>>2]=k[ra>>2]&1,k[Z>>2]=k[ra>>2]&-4,k[(k[Z>>2]|0)+(4+(k[Z+4>>2]|0)<<2)>>2]=k[ga>>2],k[(k[Z>>2]|0)+(5-(k[Z+4>>2]|0)<<2)>>2]=k[ha>>2],k[(k[k[B>>2]>>2]|0)+(k[(k[B>>2]|0)+4>>2]<<2)>>2]=k[Z>>2]|k[Z+4>>2],k[(k[Z>>2]|0)+(k[Z+4>>2]<<2)>>2]=k[k[B>>2]>>2]|k[(k[B>>2]|0)+4>>2],k[Z+4>>2]=1-(k[Z+4>>2]|0),k[(k[Z>>2]|0)+(k[Z+4>>2]<<2)>>2]=k[Y>>2]|k[Y+4>>2],k[(k[Y>>2]|0)+(k[Y+4>>2]<<2)>>2]=k[Z>>2]|k[Z+4>>2],k[(k[B>>2]|0)+4>>2]=1-(k[(k[B>>2]|0)+4>>2]|0),(k[(k[z>>2]|0)+(k[(k[x>>2]|0)+49696>>2]<<2)>>2]|0)==0):0)k[(k[z>>2]|0)+(k[(k[x>>2]|0)+49696>>2]<<2)>>2]=k[(k[k[B>>2]>>2]|0)+32>>2];if(k[(k[x>>2]|0)+49720>>2]|0){he((k[x>>2]|0)+336|0);B=ke((k[x>>2]|0)+336|0)|0;k[(k[x>>2]|0)+49604>>2]=B;k[k[(k[x>>2]|0)+49604>>2]>>2]=k[E>>2]|k[E+4>>2];k[(k[(k[x>>2]|0)+49604>>2]|0)+4>>2]=7}if((k[(k[y>>2]|0)+116>>2]|0)>2){mta(57894,t)|0;ee(k[x>>2]|0,k[y>>2]|0,H);if(k[na>>2]|0){mta(57918,s)|0;ee(k[x>>2]|0,k[y>>2]|0,J);mta(57939,q)|0;ee(k[x>>2]|0,k[y>>2]|0,M)}mta(57961,o)|0;ee(k[x>>2]|0,k[y>>2]|0,L)}k[E+4>>2]=k[27620+(k[E+4>>2]<<2)>>2]}k[ka>>2]=0;k[aa>>2]=k[(k[E>>2]|0)+((k[27620+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];k[ca>>2]=k[aa>>2];k[ba>>2]=k[(k[E>>2]|0)+((k[27632+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2];while(1){k[ma>>2]=1;if((((k[(k[x>>2]|0)+49716>>2]|0)!=0?(k[ra>>2]=k[(k[E>>2]|0)+(6+(k[E+4>>2]|0)<<2)>>2],k[X+4>>2]=k[ra>>2]&1,k[X>>2]=k[ra>>2]&-4,(k[X>>2]|0)!=(k[(k[x>>2]|0)+49776>>2]|0)):0)?(k[ma>>2]=0,(k[C>>2]|0)!=0):0)?(We(k[x>>2]|0,k[y>>2]|0,X)|0)!=0:0)k[ka>>2]=1;do if(k[ma>>2]|0){k[qa>>2]=k[(k[E>>2]|0)+(k[E+4>>2]<<2)>>2];k[F+4>>2]=k[qa>>2]&3;k[F>>2]=k[qa>>2]^k[F+4>>2];if((k[F>>2]|0)==(k[(k[x>>2]|0)+49768>>2]|0)){k[ma>>2]=0;break}k[fa>>2]=k[(k[F>>2]|0)+((k[F+4>>2]|0)+3<<2)>>2];a:do if(((k[ba>>2]|0)!=(k[(k[x>>2]|0)+49756>>2]|0)?(k[ba>>2]|0)!=(k[(k[x>>2]|0)+49760>>2]|0):0)?(k[ba>>2]|0)!=(k[(k[x>>2]|0)+49764>>2]|0):0){if(((k[ca>>2]|0)!=(k[(k[x>>2]|0)+49756>>2]|0)?(k[ca>>2]|0)!=(k[(k[x>>2]|0)+49760>>2]|0):0)?(k[ca>>2]|0)!=(k[(k[x>>2]|0)+49764>>2]|0):0){do if((k[fa>>2]|0)!=(k[(k[x>>2]|0)+49756>>2]|0)?(k[fa>>2]|0)!=(k[(k[x>>2]|0)+49760>>2]|0):0){if((k[fa>>2]|0)==(k[(k[x>>2]|0)+49764>>2]|0))break;L=+Ke(k[x>>2]|0,k[y>>2]|0,k[ba>>2]|0,k[z>>2]|0,k[ca>>2]|0,k[fa>>2]|0)>0.0&1;k[ma>>2]=L;break a}while(0);k[ma>>2]=0;break}L=+Ie(k[x>>2]|0,k[y>>2]|0,k[fa>>2]|0,k[ba>>2]|0,k[z>>2]|0)>0.0&1;k[ma>>2]=L}else wa=79;while(0);if((wa|0)==79){wa=0;L=+Ie(k[x>>2]|0,k[y>>2]|0,k[z>>2]|0,k[ca>>2]|0,k[fa>>2]|0)>0.0&1;k[ma>>2]=L}if(k[ma>>2]|0){k[I>>2]=k[F>>2];k[I+4>>2]=k[27632+(k[F+4>>2]<<2)>>2];k[qa>>2]=k[(k[I>>2]|0)+(k[I+4>>2]<<2)>>2];k[P+4>>2]=k[qa>>2]&3;k[P>>2]=k[qa>>2]^k[P+4>>2];k[J>>2]=k[F>>2];k[J+4>>2]=k[27620+(k[F+4>>2]<<2)>>2];k[qa>>2]=k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2];k[Q+4>>2]=k[qa>>2]&3;k[Q>>2]=k[qa>>2]^k[Q+4>>2];k[G>>2]=k[E>>2];k[G+4>>2]=k[27620+(k[E+4>>2]<<2)>>2];k[qa>>2]=k[(k[G>>2]|0)+(k[G+4>>2]<<2)>>2];k[N+4>>2]=k[qa>>2]&3;k[N>>2]=k[qa>>2]^k[N+4>>2];k[H>>2]=k[E>>2];k[H+4>>2]=k[27632+(k[E+4>>2]<<2)>>2];k[qa>>2]=k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2];k[O+4>>2]=k[qa>>2]&3;k[O>>2]=k[qa>>2]^k[O+4>>2];k[(k[I>>2]|0)+(k[I+4>>2]<<2)>>2]=k[N>>2]|k[N+4>>2];k[(k[N>>2]|0)+(k[N+4>>2]<<2)>>2]=k[I>>2]|k[I+4>>2];k[(k[G>>2]|0)+(k[G+4>>2]<<2)>>2]=k[O>>2]|k[O+4>>2];k[(k[O>>2]|0)+(k[O+4>>2]<<2)>>2]=k[G>>2]|k[G+4>>2];k[(k[H>>2]|0)+(k[H+4>>2]<<2)>>2]=k[Q>>2]|k[Q+4>>2];k[(k[Q>>2]|0)+(k[Q+4>>2]<<2)>>2]=k[H>>2]|k[H+4>>2];k[(k[J>>2]|0)+(k[J+4>>2]<<2)>>2]=k[P>>2]|k[P+4>>2];k[(k[P>>2]|0)+(k[P+4>>2]<<2)>>2]=k[J>>2]|k[J+4>>2];do if(k[(k[x>>2]|0)+49716>>2]|0){k[ra>>2]=k[(k[I>>2]|0)+(6+(k[I+4>>2]|0)<<2)>>2];k[U+4>>2]=k[ra>>2]&1;k[U>>2]=k[ra>>2]&-4;k[ra>>2]=k[(k[G>>2]|0)+(6+(k[G+4>>2]|0)<<2)>>2];k[S+4>>2]=k[ra>>2]&1;k[S>>2]=k[ra>>2]&-4;k[ra>>2]=k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2];k[T+4>>2]=k[ra>>2]&1;k[T>>2]=k[ra>>2]&-4;k[ra>>2]=k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2];k[V+4>>2]=k[ra>>2]&1;k[V>>2]=k[ra>>2]&-4;if((k[U>>2]|0)==(k[(k[x>>2]|0)+49776>>2]|0))k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];else{k[(k[J>>2]|0)+(6+(k[J+4>>2]|0)<<2)>>2]=k[U>>2]|k[U+4>>2];k[(k[U>>2]|0)+(6+(k[U+4>>2]|0)<<2)>>2]=k[J>>2]|k[J+4>>2]}if((k[S>>2]|0)==(k[(k[x>>2]|0)+49776>>2]|0))k[(k[I>>2]|0)+(6+(k[I+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];else{k[(k[I>>2]|0)+(6+(k[I+4>>2]|0)<<2)>>2]=k[S>>2]|k[S+4>>2];k[(k[S>>2]|0)+(6+(k[S+4>>2]|0)<<2)>>2]=k[I>>2]|k[I+4>>2]}if((k[T>>2]|0)==(k[(k[x>>2]|0)+49776>>2]|0))k[(k[G>>2]|0)+(6+(k[G+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];else{k[(k[G>>2]|0)+(6+(k[G+4>>2]|0)<<2)>>2]=k[T>>2]|k[T+4>>2];k[(k[T>>2]|0)+(6+(k[T+4>>2]|0)<<2)>>2]=k[G>>2]|k[G+4>>2]}if((k[V>>2]|0)==(k[(k[x>>2]|0)+49776>>2]|0)){k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2]=k[(k[x>>2]|0)+49776>>2];break}else{k[(k[H>>2]|0)+(6+(k[H+4>>2]|0)<<2)>>2]=k[V>>2]|k[V+4>>2];k[(k[V>>2]|0)+(6+(k[V+4>>2]|0)<<2)>>2]=k[H>>2]|k[H+4>>2];break}}while(0);k[(k[E>>2]|0)+((k[27620+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[fa>>2];k[(k[E>>2]|0)+((k[27632+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[E>>2]|0)+((k[E+4>>2]|0)+3<<2)>>2]=k[ca>>2];k[(k[F>>2]|0)+((k[27620+(k[F+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[z>>2];k[(k[F>>2]|0)+((k[27632+(k[F+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[fa>>2];k[(k[F>>2]|0)+((k[F+4>>2]|0)+3<<2)>>2]=k[ba>>2];k[pa>>2]=0;while(1){if((k[pa>>2]|0)>=(k[(k[x>>2]|0)+49684>>2]|0))break;p[ia>>3]=(+p[(k[F>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]+ +p[(k[E>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3])*.5;p[(k[F>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[ia>>3];p[(k[E>>2]|0)+((k[(k[x>>2]|0)+49708>>2]|0)+(k[pa>>2]|0)<<3)>>3]=+p[ia>>3];k[pa>>2]=(k[pa>>2]|0)+1}if(k[(k[y>>2]|0)+12>>2]|0){if(!(+p[(k[F>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]<=0.0)?!(+p[(k[E>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]<=0.0):0)p[ja>>3]=(+p[(k[F>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]+ +p[(k[E>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3])*.5;else p[ja>>3]=-1.0;p[(k[F>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[ja>>3];p[(k[E>>2]|0)+(k[(k[x>>2]|0)+49712>>2]<<3)>>3]=+p[ja>>3]}if(k[(k[x>>2]|0)+49720>>2]|0){L=ke((k[x>>2]|0)+336|0)|0;k[$>>2]=L;k[k[$>>2]>>2]=k[E>>2]|k[E+4>>2];k[(k[$>>2]|0)+4>>2]=k[(k[x>>2]|0)+49604>>2];k[(k[x>>2]|0)+49604>>2]=k[$>>2]}if((k[(k[y>>2]|0)+116>>2]|0)>2){mta(57792,j)|0;k[I+4>>2]=k[27620+(k[I+4>>2]<<2)>>2];ee(k[x>>2]|0,k[y>>2]|0,I);mta(57821,i)|0;ee(k[x>>2]|0,k[y>>2]|0,E)}k[E+4>>2]=k[27632+(k[E+4>>2]<<2)>>2];k[ba>>2]=k[fa>>2]}}while(0);if(k[ma>>2]|0)continue;if(k[D>>2]|0)Xe(k[x>>2]|0,k[y>>2]|0,E);k[E+4>>2]=k[27620+(k[E+4>>2]<<2)>>2];k[qa>>2]=k[(k[E>>2]|0)+(k[E+4>>2]<<2)>>2];k[R+4>>2]=k[qa>>2]&3;k[R>>2]=k[qa>>2]^k[R+4>>2];if((k[ba>>2]|0)==(k[aa>>2]|0))break;if((k[R>>2]|0)==(k[(k[x>>2]|0)+49768>>2]|0))break;k[E>>2]=k[R>>2];k[E+4>>2]=k[27620+(k[R+4>>2]<<2)>>2];k[ca>>2]=k[ba>>2];k[ba>>2]=k[(k[E>>2]|0)+((k[27632+(k[E+4>>2]<<2)>>2]|0)+3<<2)>>2]}k[k[A>>2]>>2]=k[E>>2];k[(k[A>>2]|0)+4>>2]=k[27620+(k[E+4>>2]<<2)>>2];k[(k[x>>2]|0)+49784>>2]=k[E>>2];k[(k[x>>2]|0)+49784+4>>2]=k[27620+(k[E+4>>2]<<2)>>2];k[w>>2]=k[ka>>2];ta=k[w>>2]|0;r=h;return ta|0}function df(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;h=r;r=r+144|0;i=h+40|0;j=h+8|0;l=h+136|0;m=h+132|0;n=h+128|0;o=h+124|0;q=h+120|0;s=h+116|0;t=h+112|0;u=h+104|0;v=h+96|0;w=h+88|0;x=h+80|0;y=h+76|0;z=h+72|0;A=h+68|0;B=h+64|0;C=h+60|0;D=h+56|0;k[l>>2]=a;k[m>>2]=b;k[n>>2]=c;k[o>>2]=d;k[q>>2]=e;k[s>>2]=f;k[t>>2]=g;k[x>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2];k[y>>2]=k[(k[k[n>>2]>>2]|0)+((k[27632+(k[(k[n>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[(k[m>>2]|0)+116>>2]|0)>2){mta(58037,h)|0;E=+p[(k[x>>2]|0)+8>>3];F=+p[k[y>>2]>>3];G=+p[(k[y>>2]|0)+8>>3];p[j>>3]=+p[k[x>>2]>>3];p[j+8>>3]=E;p[j+16>>3]=F;p[j+24>>3]=G;mta(58079,j)|0}k[v>>2]=k[k[n>>2]>>2];k[v+4>>2]=k[27632+(k[(k[n>>2]|0)+4>>2]<<2)>>2];k[D>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2];k[v+4>>2]=k[D>>2]&3;k[v>>2]=k[D>>2]^k[v+4>>2];k[A>>2]=k[(k[v>>2]|0)+((k[27632+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2];k[u>>2]=k[v>>2];k[u+4>>2]=k[v+4>>2];k[B>>2]=1;k[C>>2]=2;while(1){if((k[C>>2]|0)>((k[q>>2]|0)-2|0))break;k[u+4>>2]=k[27632+(k[u+4>>2]<<2)>>2];k[D>>2]=k[(k[u>>2]|0)+(k[u+4>>2]<<2)>>2];k[u+4>>2]=k[D>>2]&3;k[u>>2]=k[D>>2]^k[u+4>>2];k[z>>2]=k[(k[u>>2]|0)+((k[27632+(k[u+4>>2]<<2)>>2]|0)+3<<2)>>2];if(+Ke(k[l>>2]|0,k[m>>2]|0,k[x>>2]|0,k[y>>2]|0,k[A>>2]|0,k[z>>2]|0)>0.0){k[v>>2]=k[u>>2];k[v+4>>2]=k[u+4>>2];k[A>>2]=k[z>>2];k[B>>2]=k[C>>2]}k[C>>2]=(k[C>>2]|0)+1}if((k[(k[m>>2]|0)+116>>2]|0)>2){G=+p[(k[A>>2]|0)+8>>3];p[i>>3]=+p[k[A>>2]>>3];p[i+8>>3]=G;mta(58114,i)|0}if((k[B>>2]|0)>1){k[D>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2];k[w+4>>2]=k[D>>2]&3;k[w>>2]=k[D>>2]^k[w+4>>2];k[w+4>>2]=k[27620+(k[w+4>>2]<<2)>>2];df(k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,w,(k[B>>2]|0)+1|0,1,k[t>>2]|0)}if((k[B>>2]|0)<((k[q>>2]|0)-2|0)){k[D>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2];k[w+4>>2]=k[D>>2]&3;k[w>>2]=k[D>>2]^k[w+4>>2];df(k[l>>2]|0,k[m>>2]|0,v,k[o>>2]|0,(k[q>>2]|0)-(k[B>>2]|0)|0,1,k[t>>2]|0);k[D>>2]=k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2];k[v+4>>2]=k[D>>2]&3;k[v>>2]=k[D>>2]^k[v+4>>2]}if(!(k[s>>2]|0)){H=k[v>>2]|0;I=k[o>>2]|0;k[I>>2]=H;J=v+4|0;K=k[J>>2]|0;L=k[o>>2]|0;M=L+4|0;k[M>>2]=K;r=h;return}af(k[l>>2]|0,k[m>>2]|0,v);if(!(k[t>>2]|0)){H=k[v>>2]|0;I=k[o>>2]|0;k[I>>2]=H;J=v+4|0;K=k[J>>2]|0;L=k[o>>2]|0;M=L+4|0;k[M>>2]=K;r=h;return}k[D>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2];k[u+4>>2]=k[D>>2]&3;k[u>>2]=k[D>>2]^k[u+4>>2];Xe(k[l>>2]|0,k[m>>2]|0,u);H=k[v>>2]|0;I=k[o>>2]|0;k[I>>2]=H;J=v+4|0;K=k[J>>2]|0;L=k[o>>2]|0;M=L+4|0;k[M>>2]=K;r=h;return}function ef(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+144|0;e=d;f=d+128|0;g=d+124|0;h=d+120|0;i=d+112|0;j=d+104|0;l=d+96|0;m=d+88|0;n=d+80|0;o=d+72|0;q=d+64|0;s=d+56|0;t=d+48|0;u=d+40|0;v=d+32|0;w=d+28|0;x=d+24|0;y=d+20|0;z=d+16|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[v>>2]=k[(k[k[h>>2]>>2]|0)+((k[27620+(k[(k[h>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[(k[g>>2]|0)+116>>2]|0)>1){A=+p[(k[v>>2]|0)+8>>3];p[e>>3]=+p[k[v>>2]>>3];p[e+8>>3]=A;mta(58153,e)|0}ve(k[f>>2]|0,k[v>>2]|0);k[i>>2]=k[k[h>>2]>>2];k[i+4>>2]=k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[y>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[y>>2]&3;k[i>>2]=k[y>>2]^k[i+4>>2];k[x>>2]=1;while(1){if((k[k[h>>2]>>2]|0)==(k[i>>2]|0))B=(k[(k[h>>2]|0)+4>>2]|0)==(k[i+4>>2]|0);else B=0;C=k[x>>2]|0;if(!(B^1))break;k[x>>2]=C+1;k[i+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[y>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[i+4>>2]=k[y>>2]&3;k[i>>2]=k[y>>2]^k[i+4>>2]}if((C|0)>3){k[j>>2]=k[k[h>>2]>>2];k[j+4>>2]=k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[y>>2]=k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2];k[j+4>>2]=k[y>>2]&3;k[j>>2]=k[y>>2]^k[j+4>>2];k[y>>2]=k[(k[k[h>>2]>>2]|0)+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[l+4>>2]=k[y>>2]&3;k[l>>2]=k[y>>2]^k[l+4>>2];k[l+4>>2]=k[27620+(k[l+4>>2]<<2)>>2];df(k[f>>2]|0,k[g>>2]|0,j,l,k[x>>2]|0,0,((k[(k[g>>2]|0)+128>>2]|0)!=0^1)&1)}k[m>>2]=k[k[h>>2]>>2];k[m+4>>2]=k[27632+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[y>>2]=k[(k[k[h>>2]>>2]|0)+(k[(k[h>>2]|0)+4>>2]<<2)>>2];k[n+4>>2]=k[y>>2]&3;k[n>>2]=k[y>>2]^k[n+4>>2];k[n+4>>2]=k[27632+(k[n+4>>2]<<2)>>2];k[y>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[q+4>>2]=k[y>>2]&3;k[q>>2]=k[y>>2]^k[q+4>>2];k[y>>2]=k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2];k[o+4>>2]=k[y>>2]&3;k[o>>2]=k[y>>2]^k[o+4>>2];k[o+4>>2]=k[27620+(k[o+4>>2]<<2)>>2];k[y>>2]=k[(k[o>>2]|0)+(k[o+4>>2]<<2)>>2];k[s+4>>2]=k[y>>2]&3;k[s>>2]=k[y>>2]^k[s+4>>2];k[(k[k[h>>2]>>2]|0)+(k[(k[h>>2]|0)+4>>2]<<2)>>2]=k[q>>2]|k[q+4>>2];k[(k[q>>2]|0)+(k[q+4>>2]<<2)>>2]=k[k[h>>2]>>2]|k[(k[h>>2]|0)+4>>2];k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2]=k[s>>2]|k[s+4>>2];k[(k[s>>2]|0)+(k[s+4>>2]<<2)>>2]=k[m>>2]|k[m+4>>2];k[z>>2]=k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2];k[t+4>>2]=k[z>>2]&1;k[t>>2]=k[z>>2]&-4;if((k[t>>2]|0)!=(k[(k[f>>2]|0)+49776>>2]|0)){k[(k[k[h>>2]>>2]|0)+(6+(k[(k[h>>2]|0)+4>>2]|0)<<2)>>2]=k[t>>2]|k[t+4>>2];k[(k[t>>2]|0)+(6+(k[t+4>>2]|0)<<2)>>2]=k[k[h>>2]>>2]|k[(k[h>>2]|0)+4>>2]}k[z>>2]=k[(k[o>>2]|0)+(6+(k[o+4>>2]|0)<<2)>>2];k[u+4>>2]=k[z>>2]&1;k[u>>2]=k[z>>2]&-4;if((k[u>>2]|0)!=(k[(k[f>>2]|0)+49776>>2]|0)){k[(k[m>>2]|0)+(6+(k[m+4>>2]|0)<<2)>>2]=k[u>>2]|k[u+4>>2];k[(k[u>>2]|0)+(6+(k[u+4>>2]|0)<<2)>>2]=k[m>>2]|k[m+4>>2]}k[w>>2]=k[(k[n>>2]|0)+((k[27620+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[k[h>>2]>>2]|0)+((k[27620+(k[(k[h>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[w>>2];if(k[(k[g>>2]|0)+128>>2]|0){D=k[f>>2]|0;E=k[n>>2]|0;re(D,E);F=k[f>>2]|0;G=k[o>>2]|0;re(F,G);r=d;return}Xe(k[f>>2]|0,k[g>>2]|0,k[h>>2]|0);D=k[f>>2]|0;E=k[n>>2]|0;re(D,E);F=k[f>>2]|0;G=k[o>>2]|0;re(F,G);r=d;return}function ff(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0;c=r;r=r+112|0;d=c+108|0;e=c+104|0;f=c+96|0;g=c+88|0;h=c+80|0;i=c+72|0;j=c+64|0;l=c+56|0;m=c+48|0;n=c+40|0;o=c+32|0;p=c+24|0;q=c+16|0;s=c+12|0;t=c+8|0;u=c+4|0;v=c;k[d>>2]=a;k[e>>2]=b;while(1){if(!(k[(k[d>>2]|0)+49604>>2]|0))break;k[f+4>>2]=k[k[(k[d>>2]|0)+49604>>2]>>2]&3;k[f>>2]=k[k[(k[d>>2]|0)+49604>>2]>>2]^k[f+4>>2];do if(!(k[(k[(k[d>>2]|0)+49604>>2]|0)+4>>2]|0)){k[g>>2]=k[f>>2];k[g+4>>2]=k[27620+(k[f+4>>2]<<2)>>2];k[u>>2]=k[(k[g>>2]|0)+(k[g+4>>2]<<2)>>2];k[g+4>>2]=k[u>>2]&3;k[g>>2]=k[u>>2]^k[g+4>>2];k[g+4>>2]=k[27620+(k[g+4>>2]<<2)>>2];k[h>>2]=k[f>>2];k[h+4>>2]=k[27632+(k[f+4>>2]<<2)>>2];k[u>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[h+4>>2]=k[u>>2]&3;k[h>>2]=k[u>>2]^k[h+4>>2];k[h+4>>2]=k[27632+(k[h+4>>2]<<2)>>2];k[u>>2]=k[(k[g>>2]|0)+(k[g+4>>2]<<2)>>2];k[j+4>>2]=k[u>>2]&3;k[j>>2]=k[u>>2]^k[j+4>>2];k[u>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[l+4>>2]=k[u>>2]&3;k[l>>2]=k[u>>2]^k[l+4>>2];k[s>>2]=k[(k[g>>2]|0)+((k[27632+(k[g+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[f>>2]|0)+((k[f+4>>2]|0)+3<<2)>>2]=k[s>>2];k[f+4>>2]=k[27620+(k[f+4>>2]<<2)>>2];k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2]=k[j>>2]|k[j+4>>2];k[(k[j>>2]|0)+(k[j+4>>2]<<2)>>2]=k[f>>2]|k[f+4>>2];k[v>>2]=k[(k[g>>2]|0)+(6+(k[g+4>>2]|0)<<2)>>2];k[o+4>>2]=k[v>>2]&1;k[o>>2]=k[v>>2]&-4;k[(k[f>>2]|0)+(6+(k[f+4>>2]|0)<<2)>>2]=k[o>>2]|k[o+4>>2];k[(k[o>>2]|0)+(6+(k[o+4>>2]|0)<<2)>>2]=k[f>>2]|k[f+4>>2];k[f+4>>2]=k[27620+(k[f+4>>2]<<2)>>2];k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2]=k[l>>2]|k[l+4>>2];k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[f>>2]|k[f+4>>2];k[v>>2]=k[(k[h>>2]|0)+(6+(k[h+4>>2]|0)<<2)>>2];k[p+4>>2]=k[v>>2]&1;k[p>>2]=k[v>>2]&-4;k[(k[f>>2]|0)+(6+(k[f+4>>2]|0)<<2)>>2]=k[p>>2]|k[p+4>>2];k[(k[p>>2]|0)+(6+(k[p+4>>2]|0)<<2)>>2]=k[f>>2]|k[f+4>>2];re(k[d>>2]|0,k[g>>2]|0);re(k[d>>2]|0,k[h>>2]|0)}else{if((k[(k[(k[d>>2]|0)+49604>>2]|0)+4>>2]|0)!=7){bf(k[d>>2]|0,k[e>>2]|0,f);break}k[n>>2]=k[f>>2];k[n+4>>2]=k[27632+(k[f+4>>2]<<2)>>2];k[u>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[h+4>>2]=k[u>>2]&3;k[h>>2]=k[u>>2]^k[h+4>>2];k[h+4>>2]=k[27620+(k[h+4>>2]<<2)>>2];k[u>>2]=k[(k[h>>2]|0)+(k[h+4>>2]<<2)>>2];k[l+4>>2]=k[u>>2]&3;k[l>>2]=k[u>>2]^k[l+4>>2];k[t>>2]=k[(k[h>>2]|0)+((k[27632+(k[h+4>>2]<<2)>>2]|0)+3<<2)>>2];k[(k[f>>2]|0)+((k[27620+(k[f+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[t>>2];k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2]=k[l>>2]|k[l+4>>2];k[(k[l>>2]|0)+(k[l+4>>2]<<2)>>2]=k[n>>2]|k[n+4>>2];k[v>>2]=k[(k[h>>2]|0)+(6+(k[h+4>>2]|0)<<2)>>2];k[p+4>>2]=k[v>>2]&1;k[p>>2]=k[v>>2]&-4;k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[p>>2]|k[p+4>>2];k[(k[p>>2]|0)+(6+(k[p+4>>2]|0)<<2)>>2]=k[n>>2]|k[n+4>>2];re(k[d>>2]|0,k[h>>2]|0);k[u>>2]=k[(k[f>>2]|0)+(k[f+4>>2]<<2)>>2];k[n+4>>2]=k[u>>2]&3;k[n>>2]=k[u>>2]^k[n+4>>2];if((k[n>>2]|0)!=(k[(k[d>>2]|0)+49768>>2]|0)){k[n+4>>2]=k[27620+(k[n+4>>2]<<2)>>2];k[u>>2]=k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2];k[i+4>>2]=k[u>>2]&3;k[i>>2]=k[u>>2]^k[i+4>>2];k[i+4>>2]=k[27632+(k[i+4>>2]<<2)>>2];k[u>>2]=k[(k[i>>2]|0)+(k[i+4>>2]<<2)>>2];k[m+4>>2]=k[u>>2]&3;k[m>>2]=k[u>>2]^k[m+4>>2];k[(k[n>>2]|0)+((k[27620+(k[n+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[t>>2];k[(k[n>>2]|0)+(k[n+4>>2]<<2)>>2]=k[m>>2]|k[m+4>>2];k[(k[m>>2]|0)+(k[m+4>>2]<<2)>>2]=k[n>>2]|k[n+4>>2];k[v>>2]=k[(k[i>>2]|0)+(6+(k[i+4>>2]|0)<<2)>>2];k[q+4>>2]=k[v>>2]&1;k[q>>2]=k[v>>2]&-4;k[(k[n>>2]|0)+(6+(k[n+4>>2]|0)<<2)>>2]=k[q>>2]|k[q+4>>2];k[(k[q>>2]|0)+(6+(k[q+4>>2]|0)<<2)>>2]=k[n>>2]|k[n+4>>2];re(k[d>>2]|0,k[i>>2]|0)}k[(k[(k[d>>2]|0)+49604>>2]|0)+4>>2]=0}while(0);k[(k[d>>2]|0)+49604>>2]=k[(k[(k[d>>2]|0)+49604>>2]|0)+4>>2]}r=c;return}function gf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+48|0;d=c+36|0;e=c+32|0;f=c+28|0;g=c+24|0;h=c+20|0;i=c+8|0;j=c;l=c+16|0;k[d>>2]=a;k[e>>2]=b;if((k[e>>2]|0)==2){if(!(+p[k[k[d>>2]>>2]>>3]>+p[k[(k[d>>2]|0)+4>>2]>>3])){if(!(+p[k[k[d>>2]>>2]>>3]==+p[k[(k[d>>2]|0)+4>>2]>>3])){r=c;return}if(!(+p[(k[k[d>>2]>>2]|0)+8>>3]>+p[(k[(k[d>>2]|0)+4>>2]|0)+8>>3])){r=c;return}}k[l>>2]=k[(k[d>>2]|0)+4>>2];k[(k[d>>2]|0)+4>>2]=k[k[d>>2]>>2];k[k[d>>2]>>2]=k[l>>2];r=c;return}b=Qe(k[e>>2]|0)|0;k[h>>2]=b;p[i>>3]=+p[k[(k[d>>2]|0)+(k[h>>2]<<2)>>2]>>3];p[j>>3]=+p[(k[(k[d>>2]|0)+(k[h>>2]<<2)>>2]|0)+8>>3];k[f>>2]=-1;k[g>>2]=k[e>>2];while(1){if((k[f>>2]|0)>=(k[g>>2]|0))break;while(1){k[f>>2]=(k[f>>2]|0)+1;if((k[f>>2]|0)>(k[g>>2]|0))break;if(+p[k[(k[d>>2]|0)+(k[f>>2]<<2)>>2]>>3]<+p[i>>3])continue;if(!(+p[k[(k[d>>2]|0)+(k[f>>2]<<2)>>2]>>3]==+p[i>>3]))break;if(!(+p[(k[(k[d>>2]|0)+(k[f>>2]<<2)>>2]|0)+8>>3]<+p[j>>3]))break}while(1){k[g>>2]=(k[g>>2]|0)+-1;if((k[f>>2]|0)>(k[g>>2]|0))break;if(+p[k[(k[d>>2]|0)+(k[g>>2]<<2)>>2]>>3]>+p[i>>3])continue;if(!(+p[k[(k[d>>2]|0)+(k[g>>2]<<2)>>2]>>3]==+p[i>>3]))break;if(!(+p[(k[(k[d>>2]|0)+(k[g>>2]<<2)>>2]|0)+8>>3]>+p[j>>3]))break}if((k[f>>2]|0)>=(k[g>>2]|0))continue;k[l>>2]=k[(k[d>>2]|0)+(k[f>>2]<<2)>>2];k[(k[d>>2]|0)+(k[f>>2]<<2)>>2]=k[(k[d>>2]|0)+(k[g>>2]<<2)>>2];k[(k[d>>2]|0)+(k[g>>2]<<2)>>2]=k[l>>2]}if((k[f>>2]|0)>1)gf(k[d>>2]|0,k[f>>2]|0);if((k[g>>2]|0)>=((k[e>>2]|0)-2|0)){r=c;return}gf((k[d>>2]|0)+((k[g>>2]|0)+1<<2)|0,(k[e>>2]|0)-(k[g>>2]|0)-1|0);r=c;return}function hf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0;e=r;r=r+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;l=e+24|0;m=e+20|0;n=e+8|0;o=e;q=e+16|0;k[f>>2]=a;k[g>>2]=b;k[h>>2]=c;k[i>>2]=d;if((k[g>>2]|0)==2){if(!(+p[(k[k[f>>2]>>2]|0)+(k[i>>2]<<3)>>3]>+p[(k[(k[f>>2]|0)+4>>2]|0)+(k[i>>2]<<3)>>3])){if(!(+p[(k[k[f>>2]>>2]|0)+(k[i>>2]<<3)>>3]==+p[(k[(k[f>>2]|0)+4>>2]|0)+(k[i>>2]<<3)>>3])){r=e;return}if(!(+p[(k[k[f>>2]>>2]|0)+(1-(k[i>>2]|0)<<3)>>3]>+p[(k[(k[f>>2]|0)+4>>2]|0)+(1-(k[i>>2]|0)<<3)>>3])){r=e;return}}k[q>>2]=k[(k[f>>2]|0)+4>>2];k[(k[f>>2]|0)+4>>2]=k[k[f>>2]>>2];k[k[f>>2]>>2]=k[q>>2];r=e;return}d=Qe(k[g>>2]|0)|0;k[m>>2]=d;p[n>>3]=+p[(k[(k[f>>2]|0)+(k[m>>2]<<2)>>2]|0)+(k[i>>2]<<3)>>3];p[o>>3]=+p[(k[(k[f>>2]|0)+(k[m>>2]<<2)>>2]|0)+(1-(k[i>>2]|0)<<3)>>3];k[j>>2]=-1;k[l>>2]=k[g>>2];while(1){if((k[j>>2]|0)>=(k[l>>2]|0))break;while(1){k[j>>2]=(k[j>>2]|0)+1;if((k[j>>2]|0)>(k[l>>2]|0))break;if(+p[(k[(k[f>>2]|0)+(k[j>>2]<<2)>>2]|0)+(k[i>>2]<<3)>>3]<+p[n>>3])continue;if(!(+p[(k[(k[f>>2]|0)+(k[j>>2]<<2)>>2]|0)+(k[i>>2]<<3)>>3]==+p[n>>3]))break;if(!(+p[(k[(k[f>>2]|0)+(k[j>>2]<<2)>>2]|0)+(1-(k[i>>2]|0)<<3)>>3]<+p[o>>3]))break}while(1){k[l>>2]=(k[l>>2]|0)+-1;if((k[j>>2]|0)>(k[l>>2]|0))break;if(+p[(k[(k[f>>2]|0)+(k[l>>2]<<2)>>2]|0)+(k[i>>2]<<3)>>3]>+p[n>>3])continue;if(!(+p[(k[(k[f>>2]|0)+(k[l>>2]<<2)>>2]|0)+(k[i>>2]<<3)>>3]==+p[n>>3]))break;if(!(+p[(k[(k[f>>2]|0)+(k[l>>2]<<2)>>2]|0)+(1-(k[i>>2]|0)<<3)>>3]>+p[o>>3]))break}if((k[j>>2]|0)>=(k[l>>2]|0))continue;k[q>>2]=k[(k[f>>2]|0)+(k[j>>2]<<2)>>2];k[(k[f>>2]|0)+(k[j>>2]<<2)>>2]=k[(k[f>>2]|0)+(k[l>>2]<<2)>>2];k[(k[f>>2]|0)+(k[l>>2]<<2)>>2]=k[q>>2]}if((k[j>>2]|0)>(k[h>>2]|0))hf(k[f>>2]|0,k[j>>2]|0,k[h>>2]|0,k[i>>2]|0);if((k[l>>2]|0)>=((k[h>>2]|0)-1|0)){r=e;return}hf((k[f>>2]|0)+((k[l>>2]|0)+1<<2)|0,(k[g>>2]|0)-(k[l>>2]|0)-1|0,(k[h>>2]|0)-(k[l>>2]|0)-1|0,k[i>>2]|0);r=e;return}function jf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=r;r=r+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;k[e>>2]=a;k[f>>2]=b;k[g>>2]=c;k[h>>2]=k[f>>2]>>1;if((k[f>>2]|0)<=3)k[g>>2]=0;hf(k[e>>2]|0,k[f>>2]|0,k[h>>2]|0,k[g>>2]|0);if(((k[f>>2]|0)-(k[h>>2]|0)|0)<2){r=d;return}if((k[h>>2]|0)>=2)jf(k[e>>2]|0,k[h>>2]|0,1-(k[g>>2]|0)|0);jf((k[e>>2]|0)+(k[h>>2]<<2)|0,(k[f>>2]|0)-(k[h>>2]|0)|0,1-(k[g>>2]|0)|0);r=d;return}function kf(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;h=r;r=r+192|0;i=h+16|0;j=h+8|0;l=h;m=h+184|0;n=h+180|0;o=h+176|0;q=h+172|0;s=h+168|0;t=h+164|0;u=h+160|0;v=h+152|0;w=h+144|0;x=h+136|0;y=h+128|0;z=h+120|0;A=h+112|0;B=h+104|0;C=h+96|0;D=h+92|0;E=h+88|0;F=h+84|0;G=h+80|0;H=h+76|0;I=h+72|0;J=h+68|0;K=h+64|0;L=h+60|0;M=h+56|0;N=h+52|0;O=h+48|0;P=h+44|0;Q=h+40|0;R=h+36|0;S=h+32|0;T=h+28|0;U=h+24|0;V=h+20|0;k[m>>2]=a;k[n>>2]=b;k[o>>2]=c;k[q>>2]=d;k[s>>2]=e;k[t>>2]=f;k[u>>2]=g;k[D>>2]=k[(k[k[q>>2]>>2]|0)+((k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[F>>2]=k[(k[k[q>>2]>>2]|0)+((k[(k[q>>2]|0)+4>>2]|0)+3<<2)>>2];k[E>>2]=k[(k[k[s>>2]>>2]|0)+((k[27620+(k[(k[s>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[G>>2]=k[(k[k[s>>2]>>2]|0)+((k[(k[s>>2]|0)+4>>2]|0)+3<<2)>>2];a:do if((k[u>>2]|0)==1?(k[(k[n>>2]|0)+100>>2]|0)!=0:0){k[H>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[J>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2];k[I>>2]=k[(k[k[t>>2]>>2]|0)+((k[27632+(k[(k[t>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[K>>2]=k[(k[k[t>>2]>>2]|0)+((k[(k[t>>2]|0)+4>>2]|0)+3<<2)>>2];while(1){if(!(+p[(k[J>>2]|0)+8>>3]<+p[(k[H>>2]|0)+8>>3]))break;k[(k[o>>2]|0)+4>>2]=k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[V>>2]=k[(k[k[o>>2]>>2]|0)+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[(k[o>>2]|0)+4>>2]=k[V>>2]&3;k[k[o>>2]>>2]=k[V>>2]^k[(k[o>>2]|0)+4>>2];k[H>>2]=k[J>>2];k[J>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2]}k[V>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2];while(1){if(!(+p[(k[Q>>2]|0)+8>>3]>+p[(k[D>>2]|0)+8>>3]))break;k[k[q>>2]>>2]=k[C>>2];k[(k[q>>2]|0)+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[F>>2]=k[D>>2];k[D>>2]=k[Q>>2];k[V>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2]}while(1){if(!(+p[(k[G>>2]|0)+8>>3]<+p[(k[E>>2]|0)+8>>3]))break;k[(k[s>>2]|0)+4>>2]=k[27620+(k[(k[s>>2]|0)+4>>2]<<2)>>2];k[V>>2]=k[(k[k[s>>2]>>2]|0)+(k[(k[s>>2]|0)+4>>2]<<2)>>2];k[(k[s>>2]|0)+4>>2]=k[V>>2]&3;k[k[s>>2]>>2]=k[V>>2]^k[(k[s>>2]|0)+4>>2];k[E>>2]=k[G>>2];k[G>>2]=k[(k[k[s>>2]>>2]|0)+((k[(k[s>>2]|0)+4>>2]|0)+3<<2)>>2]}k[V>>2]=k[(k[k[t>>2]>>2]|0)+(k[(k[t>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2];while(1){if(!(+p[(k[Q>>2]|0)+8>>3]>+p[(k[I>>2]|0)+8>>3]))break a;k[k[t>>2]>>2]=k[C>>2];k[(k[t>>2]|0)+4>>2]=k[27620+(k[C+4>>2]<<2)>>2];k[K>>2]=k[I>>2];k[I>>2]=k[Q>>2];k[V>>2]=k[(k[k[t>>2]>>2]|0)+(k[(k[t>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2]}}while(0);do{k[R>>2]=0;if(+Ie(k[m>>2]|0,k[n>>2]|0,k[D>>2]|0,k[F>>2]|0,k[E>>2]|0)>0.0){k[(k[q>>2]|0)+4>>2]=k[27632+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[V>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[(k[q>>2]|0)+4>>2]=k[V>>2]&3;k[k[q>>2]>>2]=k[V>>2]^k[(k[q>>2]|0)+4>>2];k[D>>2]=k[F>>2];k[F>>2]=k[(k[k[q>>2]>>2]|0)+((k[(k[q>>2]|0)+4>>2]|0)+3<<2)>>2];k[R>>2]=1}if(+Ie(k[m>>2]|0,k[n>>2]|0,k[G>>2]|0,k[E>>2]|0,k[D>>2]|0)>0.0){k[(k[s>>2]|0)+4>>2]=k[27620+(k[(k[s>>2]|0)+4>>2]<<2)>>2];k[V>>2]=k[(k[k[s>>2]>>2]|0)+(k[(k[s>>2]|0)+4>>2]<<2)>>2];k[(k[s>>2]|0)+4>>2]=k[V>>2]&3;k[k[s>>2]>>2]=k[V>>2]^k[(k[s>>2]|0)+4>>2];k[E>>2]=k[G>>2];k[G>>2]=k[(k[k[s>>2]>>2]|0)+((k[(k[s>>2]|0)+4>>2]|0)+3<<2)>>2];k[R>>2]=1}}while((k[R>>2]|0)!=0);k[V>>2]=k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2];k[v+4>>2]=k[V>>2]&3;k[v>>2]=k[V>>2]^k[v+4>>2];k[V>>2]=k[(k[k[s>>2]>>2]|0)+(k[(k[s>>2]|0)+4>>2]<<2)>>2];k[w+4>>2]=k[V>>2]&3;k[w>>2]=k[V>>2]^k[w+4>>2];Be(k[m>>2]|0,k[n>>2]|0,x);k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2]=k[k[q>>2]>>2]|k[(k[q>>2]|0)+4>>2];k[(k[k[q>>2]>>2]|0)+(k[(k[q>>2]|0)+4>>2]<<2)>>2]=k[x>>2]|k[x+4>>2];k[x+4>>2]=k[27620+(k[x+4>>2]<<2)>>2];k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2]=k[k[s>>2]>>2]|k[(k[s>>2]|0)+4>>2];k[(k[k[s>>2]>>2]|0)+(k[(k[s>>2]|0)+4>>2]<<2)>>2]=k[x>>2]|k[x+4>>2];k[x+4>>2]=k[27620+(k[x+4>>2]<<2)>>2];k[(k[x>>2]|0)+((k[27620+(k[x+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[E>>2];k[(k[x>>2]|0)+((k[27632+(k[x+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[D>>2];if((k[(k[n>>2]|0)+116>>2]|0)>2){mta(58181,l)|0;ee(k[m>>2]|0,k[n>>2]|0,x)}k[H>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[D>>2]|0)==(k[H>>2]|0)){k[k[o>>2]>>2]=k[x>>2];k[(k[o>>2]|0)+4>>2]=k[27620+(k[x+4>>2]<<2)>>2]}k[I>>2]=k[(k[k[t>>2]>>2]|0)+((k[27632+(k[(k[t>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];if((k[E>>2]|0)==(k[I>>2]|0)){k[k[t>>2]>>2]=k[x>>2];k[(k[t>>2]|0)+4>>2]=k[27632+(k[x+4>>2]<<2)>>2]}k[L>>2]=k[D>>2];k[M>>2]=k[E>>2];k[N>>2]=k[(k[v>>2]|0)+((k[v+4>>2]|0)+3<<2)>>2];k[O>>2]=k[(k[w>>2]|0)+((k[w+4>>2]|0)+3<<2)>>2];while(1){E=+Ie(k[m>>2]|0,k[n>>2]|0,k[N>>2]|0,k[L>>2]|0,k[M>>2]|0)<=0.0&1;k[T>>2]=E;E=+Ie(k[m>>2]|0,k[n>>2]|0,k[O>>2]|0,k[L>>2]|0,k[M>>2]|0)<=0.0&1;k[U>>2]=E;if((k[T>>2]|0)!=0&(k[U>>2]|0)!=0)break;b:do if((k[T>>2]|0)==0?(k[y>>2]=k[v>>2],k[y+4>>2]=k[27632+(k[v+4>>2]<<2)>>2],k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2],k[y+4>>2]=k[V>>2]&3,k[y>>2]=k[V>>2]^k[y+4>>2],k[P>>2]=k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2],(k[P>>2]|0)!=0):0){E=+Ke(k[m>>2]|0,k[n>>2]|0,k[L>>2]|0,k[M>>2]|0,k[N>>2]|0,k[P>>2]|0)>0.0&1;k[S>>2]=E;while(1){if(!(k[S>>2]|0))break b;k[y+4>>2]=k[27620+(k[y+4>>2]<<2)>>2];k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2];k[A+4>>2]=k[V>>2]&3;k[A>>2]=k[V>>2]^k[A+4>>2];k[y+4>>2]=k[27620+(k[y+4>>2]<<2)>>2];k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2];k[z+4>>2]=k[V>>2]&3;k[z>>2]=k[V>>2]^k[z+4>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2]=k[z>>2]|k[z+4>>2];k[(k[z>>2]|0)+(k[z+4>>2]<<2)>>2]=k[v>>2]|k[v+4>>2];k[v+4>>2]=k[27620+(k[v+4>>2]<<2)>>2];k[V>>2]=k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2];k[B+4>>2]=k[V>>2]&3;k[B>>2]=k[V>>2]^k[B+4>>2];k[y+4>>2]=k[27632+(k[y+4>>2]<<2)>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[(k[v>>2]|0)+((k[27620+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[L>>2];k[(k[v>>2]|0)+((k[27632+(k[v+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;k[(k[v>>2]|0)+((k[v+4>>2]|0)+3<<2)>>2]=k[P>>2];k[(k[y>>2]|0)+((k[27620+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;k[(k[y>>2]|0)+((k[27632+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[N>>2];k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2]=k[P>>2];k[N>>2]=k[P>>2];k[y>>2]=k[z>>2];k[y+4>>2]=k[z+4>>2];k[P>>2]=k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2];if(k[P>>2]|0){E=+Ke(k[m>>2]|0,k[n>>2]|0,k[L>>2]|0,k[M>>2]|0,k[N>>2]|0,k[P>>2]|0)>0.0&1;k[S>>2]=E;continue}else{k[S>>2]=0;continue}}}while(0);c:do if((k[U>>2]|0)==0?(k[y>>2]=k[w>>2],k[y+4>>2]=k[27620+(k[w+4>>2]<<2)>>2],k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2],k[y+4>>2]=k[V>>2]&3,k[y>>2]=k[V>>2]^k[y+4>>2],k[P>>2]=k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2],(k[P>>2]|0)!=0):0){E=+Ke(k[m>>2]|0,k[n>>2]|0,k[L>>2]|0,k[M>>2]|0,k[O>>2]|0,k[P>>2]|0)>0.0&1;k[S>>2]=E;while(1){if(!(k[S>>2]|0))break c;k[y+4>>2]=k[27632+(k[y+4>>2]<<2)>>2];k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2];k[A+4>>2]=k[V>>2]&3;k[A>>2]=k[V>>2]^k[A+4>>2];k[y+4>>2]=k[27632+(k[y+4>>2]<<2)>>2];k[V>>2]=k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2];k[z+4>>2]=k[V>>2]&3;k[z>>2]=k[V>>2]^k[z+4>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[A>>2]|k[A+4>>2];k[(k[A>>2]|0)+(k[A+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2]=k[z>>2]|k[z+4>>2];k[(k[z>>2]|0)+(k[z+4>>2]<<2)>>2]=k[w>>2]|k[w+4>>2];k[w+4>>2]=k[27632+(k[w+4>>2]<<2)>>2];k[V>>2]=k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2];k[B+4>>2]=k[V>>2]&3;k[B>>2]=k[V>>2]^k[B+4>>2];k[y+4>>2]=k[27620+(k[y+4>>2]<<2)>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[B>>2]|k[B+4>>2];k[(k[B>>2]|0)+(k[B+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[(k[w>>2]|0)+((k[27620+(k[w+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;k[(k[w>>2]|0)+((k[27632+(k[w+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[M>>2];k[(k[w>>2]|0)+((k[w+4>>2]|0)+3<<2)>>2]=k[P>>2];k[(k[y>>2]|0)+((k[27620+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[O>>2];k[(k[y>>2]|0)+((k[27632+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=0;k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2]=k[P>>2];k[O>>2]=k[P>>2];k[y>>2]=k[z>>2];k[y+4>>2]=k[z+4>>2];k[P>>2]=k[(k[y>>2]|0)+((k[y+4>>2]|0)+3<<2)>>2];if(k[P>>2]|0){E=+Ke(k[m>>2]|0,k[n>>2]|0,k[L>>2]|0,k[M>>2]|0,k[O>>2]|0,k[P>>2]|0)>0.0&1;k[S>>2]=E;continue}else{k[S>>2]=0;continue}}}while(0);do if(k[T>>2]|0)W=52;else{if((k[U>>2]|0)==0?+Ke(k[m>>2]|0,k[n>>2]|0,k[N>>2]|0,k[L>>2]|0,k[M>>2]|0,k[O>>2]|0)>0.0:0){W=52;break}k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2]=k[v>>2]|k[v+4>>2];k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2]=k[x>>2]|k[x+4>>2];k[x>>2]=k[v>>2];k[x+4>>2]=k[27620+(k[v+4>>2]<<2)>>2];k[(k[x>>2]|0)+((k[27620+(k[x+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[M>>2];k[L>>2]=k[N>>2];k[V>>2]=k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2];k[v+4>>2]=k[V>>2]&3;k[v>>2]=k[V>>2]^k[v+4>>2];k[N>>2]=k[(k[v>>2]|0)+((k[v+4>>2]|0)+3<<2)>>2]}while(0);if((W|0)==52){W=0;k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2]=k[w>>2]|k[w+4>>2];k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2]=k[x>>2]|k[x+4>>2];k[x>>2]=k[w>>2];k[x+4>>2]=k[27632+(k[w+4>>2]<<2)>>2];k[(k[x>>2]|0)+((k[27632+(k[x+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[L>>2];k[M>>2]=k[O>>2];k[V>>2]=k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2];k[w+4>>2]=k[V>>2]&3;k[w>>2]=k[V>>2]^k[w+4>>2];k[O>>2]=k[(k[w>>2]|0)+((k[w+4>>2]|0)+3<<2)>>2]}if((k[(k[n>>2]|0)+116>>2]|0)<=2)continue;mta(58232,i)|0;ee(k[m>>2]|0,k[n>>2]|0,x)}Be(k[m>>2]|0,k[n>>2]|0,y);k[(k[y>>2]|0)+((k[27620+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[L>>2];k[(k[y>>2]|0)+((k[27632+(k[y+4>>2]<<2)>>2]|0)+3<<2)>>2]=k[M>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[x>>2]|k[x+4>>2];k[(k[x>>2]|0)+(k[x+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[y+4>>2]=k[27620+(k[y+4>>2]<<2)>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[w>>2]|k[w+4>>2];k[(k[w>>2]|0)+(k[w+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];k[y+4>>2]=k[27620+(k[y+4>>2]<<2)>>2];k[(k[y>>2]|0)+(k[y+4>>2]<<2)>>2]=k[v>>2]|k[v+4>>2];k[(k[v>>2]|0)+(k[v+4>>2]<<2)>>2]=k[y>>2]|k[y+4>>2];if((k[(k[n>>2]|0)+116>>2]|0)>2){mta(58207,j)|0;ee(k[m>>2]|0,k[n>>2]|0,y)}if(!((k[u>>2]|0)==1?(k[(k[n>>2]|0)+100>>2]|0)!=0:0)){r=h;return}k[H>>2]=k[(k[k[o>>2]>>2]|0)+((k[27620+(k[(k[o>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[J>>2]=k[(k[k[o>>2]>>2]|0)+((k[(k[o>>2]|0)+4>>2]|0)+3<<2)>>2];k[I>>2]=k[(k[k[t>>2]>>2]|0)+((k[27632+(k[(k[t>>2]|0)+4>>2]<<2)>>2]|0)+3<<2)>>2];k[K>>2]=k[(k[k[t>>2]>>2]|0)+((k[(k[t>>2]|0)+4>>2]|0)+3<<2)>>2];k[V>>2]=k[(k[k[o>>2]>>2]|0)+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2];while(1){if(!(+p[k[Q>>2]>>3]<+p[k[H>>2]>>3]))break;k[k[o>>2]>>2]=k[C>>2];k[(k[o>>2]|0)+4>>2]=k[27632+(k[C+4>>2]<<2)>>2];k[J>>2]=k[H>>2];k[H>>2]=k[Q>>2];k[V>>2]=k[(k[k[o>>2]>>2]|0)+(k[(k[o>>2]|0)+4>>2]<<2)>>2];k[C+4>>2]=k[V>>2]&3;k[C>>2]=k[V>>2]^k[C+4>>2];k[Q>>2]=k[(k[C>>2]|0)+((k[C+4>>2]|0)+3<<2)>>2]}while(1){if(!(+p[k[K>>2]>>3]>+p[k[I>>2]>>3]))break;k[(k[t>>2]|0)+4>>2]=k[27632+(k[(k[t>>2]|0)+4>>2]<<2)>>2];k[V>>2]=k[(k[k[t>>2]>>2]|0)+(k[(k[t>>2]|0)+4>>2]<<2)>>2];k[(k[t>>2]|0)+4>>2]=k[V>>2]&3;k[k[t>>2]>>2]=k[V>>2]^k[(k[t>>2]|0)+4>>2];k[I>>2]=k[K>>2];k[K>>2]=k[(k[k[t>>2]>>2]|0)+((k[(k[t>>2]|0)+4>>2]|0)+3<<2)>>2]}r=h;return}
+-function Xia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0;c=r;r=r+576|0;d=c+560|0;e=c+556|0;f=c+552|0;g=c+548|0;h=c+544|0;i=c+540|0;j=c+536|0;l=c+528|0;m=c+524|0;n=c+520|0;o=c+360|0;q=c+508|0;s=c+496|0;t=c+344|0;u=c+208|0;v=c+60|0;w=c+48|0;x=c+36|0;y=c+72|0;z=c+24|0;A=c+12|0;C=c;k[e>>2]=0;k[f>>2]=0;k[h>>2]=0;k[i>>2]=0;D=a+44|0;cO(k[D>>2]|0,l,6);cO(k[D>>2]|0,m,7);cO(k[D>>2]|0,n,5);E=vY()|0;F=(k[l>>2]|0)==(k[m>>2]|0);G=nO(k[D>>2]|0,4)|0;H=(G|0)==0;do if(F){if(!H?(ura(G,208,2088,0)|0)!=0:0)break;I=o+56|0;J=o+4|0;k[o>>2]=27524;k[I>>2]=27544;B=0;wa(508,o+56|0,J|0);K=B;B=0;if(K&1){K=Rb()|0;L=Q;M=K;vva(I);Qb(M|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[I>>2]=27488;B=0;va(448,J|0);K=B;B=0;do if(K&1){N=Rb()|0;O=Q;P=N}else{k[J>>2]=27560;N=o+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,J|0,d|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(d);Yua(N);Ava(J);O=S;P=R;break}Yua(d);B=0;R=Ia(40,o|0,137252,76)|0;S=B;B=0;a:do if(!(S&1)?(B=0,Xa(239,R|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,q|0,137329,74);U=B;B=0;do if(!(U&1)){B=0;eb(502,s|0,137404,15);V=B;B=0;if(V&1){V=Rb()|0;W=Q;Yua(q);X=W;Y=V;break}B=0;wa(510,t|0,J|0);V=B;B=0;if(V&1){V=Rb()|0;Z=Q;_=V;$=1}else{B=0;ua(163,T|0,q|0,s|0,113,t|0);V=B;B=0;if(V&1)aa=1;else{B=0;eb(503,T|0,1240,229);B=0;aa=0}V=Rb()|0;W=Q;Yua(t);Z=W;_=V;$=aa}Yua(s);Yua(q);if($){X=Z;Y=_}else{ba=Z;ca=_;break a}}else{V=Rb()|0;X=Q;Y=V}while(0);zb(T|0);ba=X;ca=Y}else da=19;while(0);if((da|0)==19){R=Rb()|0;ba=Q;ca=R}k[o>>2]=27468;k[I>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(I);ea=ba;fa=ca;Qb(fa|0)}while(0);L=O;M=P;vva(I);Qb(M|0)}else{if(!H?(ura(G,208,320,0)|0)!=0:0)break;J=u+56|0;K=u+4|0;k[u>>2]=27524;k[J>>2]=27544;B=0;wa(508,u+56|0,K|0);R=B;B=0;if(R&1){R=Rb()|0;ga=Q;ha=R;vva(J);Qb(ha|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[J>>2]=27488;B=0;va(448,K|0);R=B;B=0;do if(R&1){S=Rb()|0;ia=Q;ja=S}else{k[K>>2]=27560;S=u+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[u+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,K|0,d|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(d);Yua(S);Ava(K);ia=V;ja=U;break}Yua(d);B=0;U=Ia(40,u|0,137252,76)|0;V=B;B=0;b:do if(!(V&1)?(B=0,Xa(239,U|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,v|0,137329,74);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,w|0,137404,15);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(v);na=ma;oa=la;break}B=0;wa(510,x|0,K|0);la=B;B=0;if(la&1){la=Rb()|0;pa=1;qa=la;ra=Q}else{B=0;ua(163,W|0,v|0,w|0,118,x|0);la=B;B=0;if(la&1)sa=1;else{B=0;eb(503,W|0,1240,229);B=0;sa=0}la=Rb()|0;ma=Q;Yua(x);pa=sa;qa=la;ra=ma}Yua(w);Yua(v);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break b}}else{ma=Rb()|0;na=Q;oa=ma}while(0);zb(W|0);ta=oa;xa=na}else da=45;while(0);if((da|0)==45){U=Rb()|0;ta=U;xa=Q}k[u>>2]=27468;k[J>>2]=27488;k[K>>2]=27560;Yua(S);Ava(K);vva(J);ea=xa;fa=ta;Qb(fa|0)}while(0);ga=ia;ha=ja;vva(J);Qb(ha|0)}while(0);if((k[l>>2]|0)!=(k[m>>2]|0)){ha=nn(k[a+28>>2]|0)|0;k[j>>2]=ha;UZ(e,a,b,629)}ha=(E|0)==0;do if(ha){E=k[l>>2]|0;if((E|0)!=(k[m>>2]|0)){za=0;Aa=0;break}ja=(k[n>>2]|0)+-1|0;ia=ja>>>0>1073741823?-1:ja<<2;ja=Rqa(ia)|0;ga=Rqa(ia)|0;if((E|0)>0){E=0;do{ia=k[ga+(E<<2)>>2]|0;ta=Rqa(ia>>>0>536870911?-1:ia<<3)|0;k[ja+(E<<2)>>2]=ta;E=E+1|0}while((E|0)<(k[m>>2]|0));za=ja;Aa=ga}else{za=ja;Aa=ga}}else{za=0;Aa=0}while(0);c:do if((k[l>>2]|0)==(k[m>>2]|0)){E=nn(k[a+28>>2]|0)|0;k[j>>2]=E;J=Qqa(8)|0;B=0;va(485,J|0);ta=B;B=0;d:do if(ta&1)da=84;else{do if(k[J>>2]|0){B=0;ia=ya(423,4)|0;xa=B;B=0;if(xa&1){da=84;break d}B=0;eb(505,ia|0,E|0,0);xa=B;B=0;if(xa&1){xa=Rb()|0;u=Q;Sqa(ia);Ba=u;Ca=xa;break d}else{k[J+4>>2]=ia;break}}while(0);kO(k[D>>2]|0,f,g,h,i,1014);S=k[g>>2]|0;if((S|0)==(k[m>>2]|0)){if(ha&(S|0)>0){S=J+4|0;ia=0;do{xa=k[za+(ia<<2)>>2]|0;u=k[(k[f>>2]|0)+(ia<<2)>>2]|0;na=k[(k[h>>2]|0)+(ia<<2)>>2]|0;oa=Rqa(na>>>0>1073741823?-1:na<<2)|0;if((na|0)>0){ra=0;do{k[oa+(ra<<2)>>2]=~~+p[u+(ra<<3)>>3]+-1;ra=ra+1|0}while((ra|0)!=(na|0))}if(k[J>>2]|0){ra=k[k[S>>2]>>2]|0;Dc[k[(k[ra>>2]|0)+16>>2]&255](ra,na,oa,xa,0)}Tqa(oa);ia=ia+1|0}while((ia|0)<(k[m>>2]|0))}if(k[J>>2]|0){ia=k[k[J+4>>2]>>2]|0;Ec[k[(k[ia>>2]|0)+12>>2]&1023](ia)}VZ(a,J,b,629);Da=J;break c}ia=y+56|0;S=y+4|0;k[y>>2]=27524;k[ia>>2]=27544;B=0;wa(508,y+56|0,S|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ea=Q;Fa=ra;vva(ia);Qb(Fa|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[ia>>2]=27488;B=0;va(448,S|0);ra=B;B=0;do if(ra&1){u=Rb()|0;Ga=Q;Ha=u}else{k[S>>2]=27560;u=y+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[y+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,S|0,d|0);W=B;B=0;if(W&1){W=Rb()|0;qa=Q;Yua(d);Yua(u);Ava(S);Ga=qa;Ha=W;break}Yua(d);B=0;W=Ia(40,y|0,137420,98)|0;qa=B;B=0;e:do if(!(qa&1)?(B=0,Xa(239,W|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,z|0,137329,74);v=B;B=0;do if(!(v&1)){B=0;eb(502,A|0,137404,15);w=B;B=0;if(w&1){w=Rb()|0;sa=Q;Yua(z);Ja=sa;Ka=w;break}B=0;wa(510,C|0,S|0);w=B;B=0;if(w&1){w=Rb()|0;La=1;Ma=w;Na=Q}else{B=0;ua(163,pa|0,z|0,A|0,158,C|0);w=B;B=0;if(w&1)Oa=1;else{B=0;eb(503,pa|0,1240,229);B=0;Oa=0}w=Rb()|0;sa=Q;Yua(C);La=Oa;Ma=w;Na=sa}Yua(A);Yua(z);if(La){Ja=Na;Ka=Ma}else{Pa=Ma;Qa=Na;break e}}else{sa=Rb()|0;Ja=Q;Ka=sa}while(0);zb(pa|0);Pa=Ka;Qa=Ja}else da=86;while(0);if((da|0)==86){W=Rb()|0;Pa=W;Qa=Q}k[y>>2]=27468;k[ia>>2]=27488;k[S>>2]=27560;Yua(u);Ava(S);vva(ia);ea=Qa;fa=Pa;Qb(fa|0)}while(0);Ea=Ga;Fa=Ha;vva(ia);Qb(Fa|0)}while(0);if((da|0)==84){E=Rb()|0;Ba=Q;Ca=E}Sqa(J);ea=Ba;fa=Ca;Qb(fa|0)}else Da=0;while(0);if(za){fa=k[n>>2]|0;if((fa|0)>1){Ca=fa;fa=0;while(1){Ba=k[za+(fa<<2)>>2]|0;if(!Ba)Ra=Ca;else{Tqa(Ba);Ra=k[n>>2]|0}fa=fa+1|0;if((fa|0)>=(Ra+-1|0))break;else Ca=Ra}}Tqa(za)}za=k[e>>2]|0;if(za){Tqa(za);k[e>>2]=0}if(Da){if((k[Da>>2]|0)!=0?(e=k[Da+4>>2]|0,(e|0)!=0):0){za=k[e>>2]|0;if(za)Ec[k[(k[za>>2]|0)+4>>2]&1023](za);Sqa(e)}Sqa(Da)}Da=k[f>>2]|0;if(Da){e=k[m>>2]|0;if((e|0)>0){za=Da;Ra=e;e=0;while(1){Ca=k[za+(e<<2)>>2]|0;if(!Ca){Sa=Ra;Ta=za}else{Tqa(Ca);Sa=k[m>>2]|0;Ta=k[f>>2]|0}e=e+1|0;if((e|0)>=(Sa|0)){Ua=Ta;break}else{za=Ta;Ra=Sa}}if(Ua){Va=Ua;da=122}}else{Va=Da;da=122}if((da|0)==122)Tqa(Va);k[f>>2]=0;f=k[h>>2]|0;if(f)Tqa(f);k[h>>2]=0;h=k[i>>2]|0;if(h)Tqa(h);k[i>>2]=0}if(!Aa){r=c;return}Tqa(Aa);r=c;return}function Yia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;c=r;r=r+240|0;d=c+228|0;e=c+224|0;f=c+220|0;g=c+216|0;h=c+212|0;i=c+208|0;j=c+204|0;l=c+196|0;m=c+188|0;n=c+184|0;o=c+40|0;q=c+24|0;s=c+12|0;t=c;k[e>>2]=0;k[f>>2]=0;k[h>>2]=0;k[i>>2]=0;k[l>>2]=0;u=a+44|0;cO(k[u>>2]|0,m,6);cO(k[u>>2]|0,n,7);cO(k[u>>2]|0,c+180|0,5);v=vY()|0;w=k[u>>2]|0;if((k[m>>2]|0)==(k[n>>2]|0))hO(w,l,c+176|0,4);else cO(w,c+200|0,4);if((k[m>>2]|0)==(k[n>>2]|0)){w=nn(k[a+28>>2]|0)|0;k[j>>2]=w;UZ(e,a,b,629)}w=(v|0)==0;a:do if(w){if((k[m>>2]|0)!=(k[n>>2]|0)){v=k[j>>2]|0;x=Rqa(v>>>0>536870911?-1:v<<3)|0;break}kO(k[u>>2]|0,f,g,h,i,1014);v=k[g>>2]|0;if((v|0)==(k[n>>2]|0)){if((v|0)>0)y=0;else{x=0;break}while(1){v=k[(k[h>>2]|0)+(y<<2)>>2]|0;k[j>>2]=v;l=Rqa(v>>>0>536870911?-1:v<<3)|0;z=k[(k[f>>2]|0)+(y<<2)>>2]|0;if((v|0)>0){A=k[e>>2]|0;C=0;do{p[l+(C<<3)>>3]=+p[A+(~~+p[z+(C<<3)>>3]+-1<<3)>>3];C=C+1|0}while((C|0)<(v|0))}y=y+1|0;if((y|0)>=(k[n>>2]|0)){x=l;break a}}}v=o+56|0;C=o+4|0;k[o>>2]=27524;k[v>>2]=27544;B=0;wa(508,o+56|0,C|0);z=B;B=0;if(z&1){z=Rb()|0;D=Q;E=z;vva(v);Qb(E|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[v>>2]=27488;B=0;va(448,C|0);z=B;B=0;do if(z&1){A=Rb()|0;F=Q;G=A}else{k[C>>2]=27560;A=o+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,C|0,d|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(d);Yua(A);Ava(C);F=I;G=H;break}Yua(d);B=0;H=Ia(40,o|0,137519,99)|0;I=B;B=0;if(!(I&1)?(B=0,Xa(239,H|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,q|0,137329,74);I=B;B=0;do if(!(I&1)){B=0;eb(502,s|0,137619,16);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(q);L=J;M=K;break}B=0;wa(510,t|0,C|0);K=B;B=0;if(K&1){K=Rb()|0;N=K;O=Q;P=1}else{B=0;ua(163,H|0,q|0,s|0,256,t|0);K=B;B=0;if(K&1)R=1;else{B=0;eb(503,H|0,1240,229);B=0;R=0}K=Rb()|0;J=Q;Yua(t);N=K;O=J;P=R}Yua(s);Yua(q);if(P){L=N;M=O}else{S=N;T=O;k[o>>2]=27468;k[v>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(v);Qb(S|0)}}else{J=Rb()|0;L=J;M=Q}while(0);zb(H|0);S=L;T=M;k[o>>2]=27468;k[v>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(v);Qb(S|0)}I=Rb()|0;S=I;T=Q;k[o>>2]=27468;k[v>>2]=27488;k[C>>2]=27560;Yua(A);Ava(C);vva(v);Qb(S|0)}while(0);D=F;E=G;vva(v);Qb(E|0)}else x=0;while(0);if((k[m>>2]|0)==(k[n>>2]|0))U=x;else{uY()|0;n=k[j>>2]|0;if(w)V=x;else V=Rqa(n>>>0>536870911?-1:n<<3)|0;uY()|0;WZ(a,V,b,629);U=V}V=k[e>>2]|0;if(V){Tqa(V);k[e>>2]=0}if(U)Tqa(U);U=k[f>>2]|0;if(!U){r=c;return}e=k[g>>2]|0;if((e|0)>0){V=U;b=e;e=0;while(1){a=k[V+(e<<2)>>2]|0;if(!a){W=b;X=V}else{Tqa(a);W=k[g>>2]|0;X=k[f>>2]|0}e=e+1|0;if((e|0)>=(W|0)){Y=X;break}else{V=X;b=W}}if(Y){Z=Y;_=49}}else{Z=U;_=49}if((_|0)==49)Tqa(Z);k[f>>2]=0;f=k[h>>2]|0;if(f)Tqa(f);k[h>>2]=0;h=k[i>>2]|0;if(h)Tqa(h);k[i>>2]=0;r=c;return}function Zia(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0,u=0,v=0;b=r;r=r+32|0;c=b+20|0;d=b+16|0;e=b+12|0;f=b+8|0;g=b;k[d>>2]=0;k[e>>2]=0;k[f>>2]=0;p[g>>3]=0.0;cO(k[a+44>>2]|0,c,478);ioa(d,e,f,k[a+28>>2]|0,1);h=en(k[a+24>>2]|0,k[c>>2]|0,943)|0;c=Qqa(8)|0;B=0;va(485,c|0);i=B;B=0;a:do if(i&1)j=18;else{do if(k[c>>2]|0){B=0;l=ya(423,4)|0;m=B;B=0;if(m&1){j=18;break a}B=0;eb(505,l|0,h|0,0);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Sqa(l);o=n;q=m;break a}else{k[c+4>>2]=l;break}}while(0);ri(a,c,g,k[d>>2]|0,k[e>>2]|0,k[f>>2]|0);s=+ti(a,c);if(k[c>>2]|0){l=k[k[c+4>>2]>>2]|0;Cc[k[(k[l>>2]|0)+56>>2]&63](l,-+p[g>>3]-s)}l=k[a+48>>2]|0;m=Qqa(48)|0;B=0;n=ya(428,l|0)|0;t=B;B=0;if(!(t&1)?(s=-+p[g>>3],k[m>>2]=27904,k[m+4>>2]=n+1,p[m+16>>3]=s,k[m+32>>2]=-9999,p[m+40>>3]=-9999.0,k[m+24>>2]=1,k[m+28>>2]=1,B=0,wa(512,m+8|0,1e3),n=B,B=0,!(n&1)):0){Oo(l,m)|0;l=k[d>>2]|0;if(l)Tqa(l);k[d>>2]=0;l=k[e>>2]|0;if(l)Tqa(l);k[e>>2]=0;l=k[f>>2]|0;if(!l){r=b;return c|0}Tqa(l);r=b;return c|0}l=Rb()|0;n=Q;Sqa(m);u=n;v=l;Qb(v|0)}while(0);if((j|0)==18){j=Rb()|0;o=Q;q=j}Sqa(c);u=o;v=q;Qb(v|0);return 0}function _ia(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0;c=r;r=r+352|0;d=c+336|0;e=c+332|0;f=c+348|0;g=c+328|0;h=c+8|0;j=c;l=c+324|0;m=c+320|0;n=c+316|0;o=c+168|0;q=c+304|0;s=c+32|0;t=c+16|0;i[f>>0]=1;k[l>>2]=0;k[m>>2]=0;k[n>>2]=0;u=a+44|0;cO(k[u>>2]|0,g,1002);dO(k[u>>2]|0,h,1003);dO(k[u>>2]|0,j,1004);cO(k[u>>2]|0,e,478);ioa(l,m,n,k[a+28>>2]|0,1);u=en(k[a+24>>2]|0,k[e>>2]|0,943)|0;e=Qqa(8)|0;B=0;va(485,e|0);v=B;B=0;do if(v&1)w=52;else{if(k[e>>2]|0){B=0;x=ya(423,4)|0;y=B;B=0;if(y&1){w=52;break}B=0;eb(505,x|0,u|0,0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Sqa(x);A=z;C=y;break}k[e+4>>2]=x;if(k[e>>2]|0){y=k[x>>2]|0;Ec[k[(k[y>>2]|0)+12>>2]&1023](y)}}if(k[b>>2]|0){y=k[k[b+4>>2]>>2]|0;Fc[k[(k[y>>2]|0)+60>>2]&1023](y,k[k[e+4>>2]>>2]|0)}y=Qqa(8)|0;B=0;va(485,y|0);x=B;B=0;do if(x&1)w=54;else{if(k[y>>2]|0){B=0;z=ya(423,4)|0;D=B;B=0;if(D&1){w=54;break}B=0;eb(505,z|0,u|0,0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Sqa(z);F=E;G=D;break}k[y+4>>2]=z;if(k[y>>2]|0){D=k[z>>2]|0;Ec[k[(k[D>>2]|0)+12>>2]&1023](D)}}D=Qqa(8)|0;B=0;va(485,D|0);z=B;B=0;do if(!(z&1)){if(k[D>>2]|0){B=0;E=ya(423,4)|0;H=B;B=0;if(H&1){w=56;break}B=0;eb(505,E|0,u|0,0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Sqa(E);J=I;K=H;break}k[D+4>>2]=E;if(k[D>>2]|0){H=k[E>>2]|0;Ec[k[(k[H>>2]|0)+12>>2]&1023](H)}}i[f>>0]=0;H=b+4|0;E=e;I=y;L=1;M=1;while(1){if((k[I>>2]|0)!=0?(N=k[I+4>>2]|0,(N|0)!=0):0){O=k[N>>2]|0;if(O)Ec[k[(k[O>>2]|0)+4>>2]&1023](O);Sqa(N)}Sqa(I);N=Qqa(8)|0;B=0;va(485,N|0);O=B;B=0;if(O&1){P=N;w=58;break}if(k[N>>2]|0){B=0;O=ya(423,4)|0;R=B;B=0;if(R&1){P=N;w=58;break}B=0;eb(505,O|0,u|0,0);R=B;B=0;if(R&1){S=N;T=O;w=34;break}k[N+4>>2]=O;if(k[N>>2]|0){R=k[O>>2]|0;Ec[k[(k[R>>2]|0)+12>>2]&1023](R)}}R=Qqa(8)|0;B=0;va(485,R|0);O=B;B=0;if(O&1){U=R;w=60;break}if(k[R>>2]|0){B=0;O=ya(423,4)|0;V=B;B=0;if(V&1){U=R;w=60;break}B=0;eb(505,O|0,u|0,0);V=B;B=0;if(V&1){W=R;X=O;w=41;break}k[R+4>>2]=O;if(k[R>>2]|0){V=k[O>>2]|0;Ec[k[(k[V>>2]|0)+12>>2]&1023](V)}}si(a,R,E,k[l>>2]|0,k[m>>2]|0,k[n>>2]|0,M);if(k[R>>2]|0){V=k[k[R+4>>2]>>2]|0;Ec[k[(k[V>>2]|0)+12>>2]&1023](V)}Y=+ti(a,R);if(k[b>>2]|0){V=k[k[H>>2]>>2]|0;Fc[k[(k[V>>2]|0)+60>>2]&1023](V,k[k[N+4>>2]>>2]|0)}do if(k[N>>2]|0){V=N+4|0;O=k[k[V>>2]>>2]|0;Xc[k[(k[O>>2]|0)+44>>2]&63](O,k[k[R+4>>2]>>2]|0,1.0);if(!(k[N>>2]|0))break;O=k[k[V>>2]>>2]|0;Cc[k[(k[O>>2]|0)+56>>2]&63](O,-Y)}while(0);$ia(f,N,E,+p[h>>3],+p[j>>3]);R=L+1|0;if(i[f>>0]|0){Z=N;_=E;$=L;w=80;break}if((R|0)<(k[g>>2]|0)){O=E;E=N;L=R;M=0;I=O}else{aa=N;ba=E;ca=L;w=63;break}}a:do if((w|0)==34){L=Rb()|0;E=Q;Sqa(T);da=S;ea=E;fa=L;w=59}else if((w|0)==41){L=Rb()|0;E=Q;Sqa(X);ga=W;ha=E;ia=L;w=61}else if((w|0)==58){L=Rb()|0;da=P;ea=Q;fa=L;w=59}else if((w|0)==60){L=Rb()|0;ga=U;ha=Q;ia=L;w=61}else if((w|0)==63){L=o+56|0;E=o+4|0;k[o>>2]=27524;k[L>>2]=27544;B=0;wa(508,o+56|0,E|0);I=B;B=0;if(I&1){I=Rb()|0;ja=Q;ka=I;vva(L);Qb(ka|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[L>>2]=27488;B=0;va(448,E|0);I=B;B=0;do if(I&1){M=Rb()|0;la=Q;ma=M}else{k[E>>2]=27560;M=o+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[o+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,E|0,d|0);H=B;B=0;if(H&1){H=Rb()|0;O=Q;Yua(d);Yua(M);Ava(E);la=O;ma=H;break}Yua(d);B=0;H=Ia(40,o|0,147682,43)|0;O=B;B=0;do if(((!(O&1)?(B=0,R=Xa(242,H|0,k[g>>2]|0)|0,V=B,B=0,!(V&1)):0)?(B=0,Ia(40,R|0,148995,11)|0,R=B,B=0,!(R&1)):0)?(B=0,wa(510,q|0,E|0),R=B,B=0,!(R&1)):0){B=0;ya(425,q|0)|0;R=B;B=0;if(R&1){R=Rb()|0;V=Q;Yua(q);na=V;oa=R;break}else{Yua(q);k[o>>2]=27468;k[L>>2]=27488;k[E>>2]=27560;Yua(M);Ava(E);vva(L);i[f>>0]=1;Z=aa;_=ba;$=ca;w=80;break a}}else w=77;while(0);if((w|0)==77){H=Rb()|0;na=Q;oa=H}k[o>>2]=27468;k[L>>2]=27488;k[E>>2]=27560;Yua(M);Ava(E);vva(L);pa=na;qa=oa;Qb(qa|0)}while(0);ja=la;ka=ma;vva(L);Qb(ka|0)}while(0);if((w|0)==59){Sqa(da);pa=ea;qa=fa;Qb(qa|0)}else if((w|0)==61){Sqa(ga);pa=ha;qa=ia;Qb(qa|0)}else if((w|0)==80){b:do if(EY()|0){E=s+56|0;I=s+4|0;k[s>>2]=27524;k[E>>2]=27544;B=0;wa(508,s+56|0,I|0);N=B;B=0;if(N&1){N=Rb()|0;ra=Q;sa=N;vva(E);Qb(sa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[E>>2]=27488;B=0;va(448,I|0);N=B;B=0;do if(N&1){H=Rb()|0;ta=Q;ua=H}else{k[I>>2]=27560;H=s+36|0;k[H>>2]=0;k[H+4>>2]=0;k[H+8>>2]=0;k[H+12>>2]=0;k[s+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,I|0,d|0);O=B;B=0;if(O&1){O=Rb()|0;R=Q;Yua(d);Yua(H);Ava(I);ta=R;ua=O;break}Yua(d);B=0;O=Ia(40,s|0,147767,32)|0;R=B;B=0;do if(!(R&1)?(B=0,V=Xa(242,O|0,$|0)|0,xa=B,B=0,!(xa&1)):0){B=0;Ia(40,V|0,149177,1)|0;V=B;B=0;if(V&1){w=95;break}B=0;wa(510,t|0,I|0);V=B;B=0;if(V&1){w=95;break}B=0;ya(425,t|0)|0;V=B;B=0;if(V&1){V=Rb()|0;xa=Q;Yua(t);za=xa;Aa=V;break}else{Yua(t);k[s>>2]=27468;k[E>>2]=27488;k[I>>2]=27560;Yua(H);Ava(I);vva(E);break b}}else w=95;while(0);if((w|0)==95){O=Rb()|0;za=Q;Aa=O}k[s>>2]=27468;k[E>>2]=27488;k[I>>2]=27560;Yua(H);Ava(I);vva(E);pa=za;qa=Aa;Qb(qa|0)}while(0);ra=ta;sa=ua;vva(E);Qb(sa|0)}while(0);I=k[l>>2]|0;if(I)Tqa(I);k[l>>2]=0;I=k[m>>2]|0;if(I)Tqa(I);k[m>>2]=0;I=k[n>>2]|0;if(I)Tqa(I);k[n>>2]=0;if(!(k[_>>2]|0)){Sqa(_);r=c;return Z|0}I=k[_+4>>2]|0;if(!I){Sqa(_);r=c;return Z|0}N=k[I>>2]|0;if(N)Ec[k[(k[N>>2]|0)+4>>2]&1023](N);Sqa(I);Sqa(_);r=c;return Z|0}}else w=56;while(0);if((w|0)==56){z=Rb()|0;J=Q;K=z}Sqa(D);pa=J;qa=K;Qb(qa|0)}while(0);if((w|0)==54){x=Rb()|0;F=Q;G=x}Sqa(y);pa=F;qa=G;Qb(qa|0)}while(0);if((w|0)==52){w=Rb()|0;A=Q;C=w}Sqa(e);pa=A;qa=C;Qb(qa|0);return 0}function $ia(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;f=r;r=r+784|0;g=f+772|0;h=f+600|0;j=f+760|0;l=f+748|0;m=f+736|0;n=f+464|0;o=f+448|0;q=f+312|0;s=f+160|0;u=f+176|0;v=f+12|0;w=f+24|0;x=f;y=Qqa(8)|0;B=0;va(485,y|0);z=B;B=0;if(z&1){z=Rb()|0;Sqa(y);Qb(z|0)}if((k[c>>2]|0)!=0?(z=c+4|0,A=k[z>>2]|0,C=Qqa(4)|0,D=k[A>>2]|0,E=Hc[k[(k[D>>2]|0)+36>>2]&511](D)|0,k[C>>2]=E,D=k[A>>2]|0,Fc[k[(k[D>>2]|0)+60>>2]&1023](D,E),k[y+4>>2]=C,(k[c>>2]|0)!=0):0){E=k[k[z>>2]>>2]|0;Fc[k[(k[E>>2]|0)+60>>2]&1023](E,k[C>>2]|0)}if((k[y>>2]|0)!=0?(C=y+4|0,E=k[k[C>>2]>>2]|0,Xc[k[(k[E>>2]|0)+48>>2]&63](E,k[k[b+4>>2]>>2]|0,-1.0),(k[y>>2]|0)!=0):0){b=k[k[C>>2]>>2]|0;F=+id[k[(k[b>>2]|0)+64>>2]&63](b,1)}else F=0.0;G=+$(+d);p[t>>3]=G;b=k[t+4>>2]|0;C=b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0;if(!C?(k[c>>2]|0)!=0:0){b=k[k[c+4>>2]>>2]|0;H=+id[k[(k[b>>2]|0)+64>>2]&63](b,1)}else H=0.0;G=+$(+F);p[t>>3]=G;b=k[t+4>>2]|0;if(!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0)?(G=+$(+H),p[t>>3]=G,b=k[t+4>>2]|0,!(b>>>0>2146435072|(b|0)==2146435072&(k[t>>2]|0)>>>0>0)):0){if((k[y>>2]|0)!=0?(b=k[y+4>>2]|0,(b|0)!=0):0){c=k[b>>2]|0;if(c)Ec[k[(k[c>>2]|0)+4>>2]&1023](c);Sqa(b)}Sqa(y);a:do if(!C){G=F/H;y=EY()|0;if(G<d){if(!y){I=1;break}b=n+56|0;c=n+4|0;k[n>>2]=27524;k[b>>2]=27544;B=0;wa(508,n+56|0,c|0);E=B;B=0;if(E&1){E=Rb()|0;J=Q;K=E;vva(b);Qb(K|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[b>>2]=27488;B=0;va(448,c|0);E=B;B=0;do if(E&1){z=Rb()|0;L=Q;M=z}else{k[c>>2]=27560;z=n+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[n+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,c|0,g|0);D=B;B=0;if(D&1){D=Rb()|0;A=Q;Yua(g);Yua(z);Ava(c);L=A;M=D;break}Yua(g);k[n+(k[(k[n>>2]|0)+-12>>2]|0)+12>>2]=50;D=n+(k[(k[n>>2]|0)+-12>>2]|0)+4|0;k[D>>2]=k[D>>2]&-177|32;B=0;D=Ia(40,n|0,137757,45)|0;A=B;B=0;do if(!(A&1)?(B=0,N=Sa(1,D|0,+(G*100.0))|0,O=B,B=0,!(O&1)):0){B=0;O=Ia(40,N|0,148270,3)|0;N=B;B=0;if(N&1){P=61;break}B=0;N=Sa(1,O|0,+(d*100.0))|0;O=B;B=0;if(O&1){P=61;break}B=0;Ia(40,N|0,148274,3)|0;N=B;B=0;if(N&1){P=61;break}B=0;wa(510,o|0,c|0);N=B;B=0;if(N&1){P=61;break}B=0;ya(425,o|0)|0;N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(o);R=O;S=N;break}else{Yua(o);k[n>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(z);Ava(c);vva(b);I=1;break a}}else P=61;while(0);if((P|0)==61){D=Rb()|0;R=Q;S=D}k[n>>2]=27468;k[b>>2]=27488;k[c>>2]=27560;Yua(z);Ava(c);vva(b);T=R;U=S;Qb(U|0)}while(0);J=L;K=M;vva(b);Qb(K|0)}else{if(!y){I=0;break}c=q+56|0;E=q+4|0;k[q>>2]=27524;k[c>>2]=27544;B=0;wa(508,q+56|0,E|0);D=B;B=0;if(D&1){D=Rb()|0;V=Q;W=D;vva(c);Qb(W|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[c>>2]=27488;B=0;va(448,E|0);D=B;B=0;do if(D&1){A=Rb()|0;X=Q;Y=A}else{k[E>>2]=27560;A=q+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[q+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,E|0,g|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(g);Yua(A);Ava(E);X=O;Y=N;break}Yua(g);k[q+(k[(k[q>>2]|0)+-12>>2]|0)+12>>2]=50;N=q+(k[(k[q>>2]|0)+-12>>2]|0)+4|0;k[N>>2]=k[N>>2]&-177|32;B=0;N=Ia(40,q|0,137757,45)|0;O=B;B=0;do if(!(O&1)?(B=0,Z=Sa(1,N|0,+(G*100.0))|0,_=B,B=0,!(_&1)):0){B=0;_=Ia(40,Z|0,148278,3)|0;Z=B;B=0;if(Z&1){P=81;break}B=0;Z=Sa(1,_|0,+(d*100.0))|0;_=B;B=0;if(_&1){P=81;break}B=0;Ia(40,Z|0,148274,3)|0;Z=B;B=0;if(Z&1){P=81;break}B=0;wa(510,s|0,E|0);Z=B;B=0;if(Z&1){P=81;break}B=0;ya(425,s|0)|0;Z=B;B=0;if(Z&1){Z=Rb()|0;_=Q;Yua(s);aa=_;ba=Z;break}else{Yua(s);k[q>>2]=27468;k[c>>2]=27488;k[E>>2]=27560;Yua(A);Ava(E);vva(c);I=0;break a}}else P=81;while(0);if((P|0)==81){N=Rb()|0;aa=Q;ba=N}k[q>>2]=27468;k[c>>2]=27488;k[E>>2]=27560;Yua(A);Ava(E);vva(c);T=aa;U=ba;Qb(U|0)}while(0);V=X;W=Y;vva(c);Qb(W|0)}}else I=1;while(0);d=+$(+e);p[t>>3]=d;W=k[t+4>>2]|0;if(W>>>0>2146435072|(W|0)==2146435072&(k[t>>2]|0)>>>0>0){ca=I;da=ca&1;i[a>>0]=da;r=f;return}W=EY()|0;if(F<e){if(!W){ca=I;da=ca&1;i[a>>0]=da;r=f;return}Y=u+56|0;X=u+4|0;k[u>>2]=27524;k[Y>>2]=27544;B=0;wa(508,u+56|0,X|0);V=B;B=0;if(V&1){V=Rb()|0;ea=Q;fa=V;vva(Y);Qb(fa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Y>>2]=27488;B=0;va(448,X|0);V=B;B=0;do if(V&1){ba=Rb()|0;ga=Q;ha=ba}else{k[X>>2]=27560;ba=u+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[u+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,X|0,g|0);aa=B;B=0;if(aa&1){aa=Rb()|0;q=Q;Yua(g);Yua(ba);Ava(X);ga=q;ha=aa;break}Yua(g);k[u+(k[(k[u>>2]|0)+-12>>2]|0)+12>>2]=50;aa=u+(k[(k[u>>2]|0)+-12>>2]|0)+4|0;k[aa>>2]=k[aa>>2]&-177|32;B=0;aa=Ia(40,u|0,137803,37)|0;q=B;B=0;do if(!(q&1)?(B=0,s=Sa(1,aa|0,+F)|0,K=B,B=0,!(K&1)):0){B=0;K=Ia(40,s|0,148270,3)|0;s=B;B=0;if(s&1){P=103;break}B=0;s=Sa(1,K|0,+e)|0;K=B;B=0;if(K&1){P=103;break}B=0;Ia(40,s|0,137841,2)|0;s=B;B=0;if(s&1){P=103;break}B=0;wa(510,v|0,X|0);s=B;B=0;if(s&1){P=103;break}B=0;ya(425,v|0)|0;s=B;B=0;if(s&1){s=Rb()|0;K=Q;Yua(v);ia=K;ja=s;break}Yua(v);k[u>>2]=27468;k[Y>>2]=27488;k[X>>2]=27560;Yua(ba);Ava(X);vva(Y);ca=I;da=ca&1;i[a>>0]=da;r=f;return}else P=103;while(0);if((P|0)==103){aa=Rb()|0;ia=Q;ja=aa}k[u>>2]=27468;k[Y>>2]=27488;k[X>>2]=27560;Yua(ba);Ava(X);vva(Y);T=ia;U=ja;Qb(U|0)}while(0);ea=ga;fa=ha;vva(Y);Qb(fa|0)}else{if(!W){ca=0;da=ca&1;i[a>>0]=da;r=f;return}W=w+56|0;fa=w+4|0;k[w>>2]=27524;k[W>>2]=27544;B=0;wa(508,w+56|0,fa|0);Y=B;B=0;if(Y&1){Y=Rb()|0;ka=Q;la=Y;vva(W);Qb(la|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[W>>2]=27488;B=0;va(448,fa|0);Y=B;B=0;do if(Y&1){ha=Rb()|0;ma=Q;na=ha}else{k[fa>>2]=27560;ha=w+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[w+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,fa|0,g|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ea=Q;Yua(g);Yua(ha);Ava(fa);ma=ea;na=ga;break}Yua(g);k[w+(k[(k[w>>2]|0)+-12>>2]|0)+12>>2]=50;ga=w+(k[(k[w>>2]|0)+-12>>2]|0)+4|0;k[ga>>2]=k[ga>>2]&-177|32;B=0;ga=Ia(40,w|0,137803,37)|0;ea=B;B=0;do if(!(ea&1)?(B=0,ja=Sa(1,ga|0,+F)|0,ia=B,B=0,!(ia&1)):0){B=0;ia=Ia(40,ja|0,148278,3)|0;ja=B;B=0;if(ja&1){P=123;break}B=0;ja=Sa(1,ia|0,+e)|0;ia=B;B=0;if(ia&1){P=123;break}B=0;Ia(40,ja|0,137841,2)|0;ja=B;B=0;if(ja&1){P=123;break}B=0;wa(510,x|0,fa|0);ja=B;B=0;if(ja&1){P=123;break}B=0;ya(425,x|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;ia=Q;Yua(x);oa=ia;pa=ja;break}Yua(x);k[w>>2]=27468;k[W>>2]=27488;k[fa>>2]=27560;Yua(ha);Ava(fa);vva(W);ca=0;da=ca&1;i[a>>0]=da;r=f;return}else P=123;while(0);if((P|0)==123){ga=Rb()|0;oa=Q;pa=ga}k[w>>2]=27468;k[W>>2]=27488;k[fa>>2]=27560;Yua(ha);Ava(fa);vva(W);T=oa;U=pa;Qb(U|0)}while(0);ka=ma;la=na;vva(W);Qb(la|0)}}la=h+56|0;W=h+4|0;k[h>>2]=27524;k[la>>2]=27544;B=0;wa(508,h+56|0,W|0);na=B;B=0;if(na&1){na=Rb()|0;qa=Q;ra=na;vva(la);Qb(ra|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[la>>2]=27488;B=0;va(448,W|0);na=B;B=0;do if(na&1){ma=Rb()|0;sa=Q;ta=ma}else{k[W>>2]=27560;ma=h+36|0;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,W|0,g|0);ka=B;B=0;if(ka&1){ka=Rb()|0;pa=Q;Yua(g);Yua(ma);Ava(W);sa=pa;ta=ka;break}Yua(g);B=0;ka=Ia(40,h|0,148282,29)|0;pa=B;B=0;b:do if(!(pa&1)?(B=0,Xa(239,ka|0,0)|0,oa=B,B=0,!(oa&1)):0){oa=Ab(20)|0;B=0;eb(502,j|0,137655,86);fa=B;B=0;do if(!(fa&1)){B=0;eb(502,l|0,137742,14);w=B;B=0;if(w&1){w=Rb()|0;f=Q;Yua(j);xa=f;za=w;break}B=0;wa(510,m|0,W|0);w=B;B=0;if(w&1){w=Rb()|0;Aa=Q;Ba=w;Ca=1}else{B=0;ua(163,oa|0,j|0,l|0,130,m|0);w=B;B=0;if(w&1)Da=1;else{B=0;eb(503,oa|0,1240,229);B=0;Da=0}w=Rb()|0;f=Q;Yua(m);Aa=f;Ba=w;Ca=Da}Yua(l);Yua(j);if(Ca){xa=Aa;za=Ba}else{Ea=Aa;Fa=Ba;break b}}else{w=Rb()|0;xa=Q;za=w}while(0);zb(oa|0);Ea=xa;Fa=za}else P=29;while(0);if((P|0)==29){ka=Rb()|0;Ea=Q;Fa=ka}k[h>>2]=27468;k[la>>2]=27488;k[W>>2]=27560;Yua(ma);Ava(W);vva(la);T=Ea;U=Fa;Qb(U|0)}while(0);qa=sa;ra=ta;vva(la);Qb(ra|0)}function aja(a,b,c){a=a|0;b=b|0;c=c|0;return}function bja(a,b,c){a=a|0;b=b|0;c=c|0;return}function cja(a,b,c){a=a|0;b=b|0;c=c|0;hoa(b,c,998,738,534);return}function dja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function eja(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0;a=c+56|0;f=k[a>>2]|0;if((f|0)>0){g=c+32|0;h=f;f=0;j=0;while(1){if(!(i[(k[g>>2]|0)+j>>0]|0)){l=h;m=f}else{n=qh(b,f)|0;Uc[k[(k[n>>2]|0)+480>>2]&63](n,j,c,d,e,738);l=k[a>>2]|0;m=f+1|0}j=j+1|0;if((j|0)>=(l|0))break;else{h=l;f=m}}}Zka(c,b,137867,206);Zka(c,b,137888,207);Zka(c,b,137911,208);Zka(c,b,137933,1001);Yka(c,b,137955,999,0.0);return}function fja(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0.0,P=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0;e=r;r=r+64|0;d=e+52|0;a=e+48|0;f=e+44|0;g=e+56|0;h=e+40|0;j=e+36|0;l=e+32|0;m=e;n=e+28|0;o=e+24|0;q=e+20|0;s=e+16|0;t=e+12|0;u=e+8|0;k[a>>2]=0;k[f>>2]=0;i[g>>0]=0;p[m>>3]=.01;k[o>>2]=0;k[q>>2]=0;k[s>>2]=0;k[t>>2]=0;YN(b,Ika(c,137971,1003)|0);YN(b,Ika(c,137985,1004)|0);YN(b,Ika(c,137999,1002)|0);YN(b,Ika(c,138014,1009)|0);YN(b,Ika(c,138027,1010)|0);Kka(c,g,138027);if(i[g>>0]|0){Qka(c,a,d,0,138042);Qka(c,f,d,0,138056);Pka(c,m,138070);g=~~(180.0/+p[m>>3]+1.0);v=Rqa(g>>>0>536870911?-1:g<<3)|0;w=boa(g,uY()|0)|0;k[h>>2]=w;coa(j,l,w,uY()|0);x=Rqa(w>>>0>536870911?-1:w<<3)|0;w=k[j>>2]|0;y=k[l>>2]|0;a:do if((w|0)<(y|0)){l=k[d>>2]|0;z=l+-1|0;A=k[f>>2]|0;C=A+(z<<3)|0;D=k[a>>2]|0;E=D+(z<<3)|0;F=+p[m>>3];if((l|0)>0){G=0.0;H=0.0;I=w}else{z=w;while(1){J=(+p[C>>3]-+p[E>>3])*.5/+da(+(+(z|0)*F*3.141592653589793/180.0*.5));p[x+(z-w<<3)>>3]=J;z=z+1|0;if((z|0)>=(y|0))break a}}while(1){J=+(I|0)*F*3.141592653589793/180.0;K=(+p[C>>3]-+p[E>>3])*.5/+da(+(J*.5));z=x+(I-w<<3)|0;p[z>>3]=K;L=K;K=G;M=H;N=0;while(1){O=+p[A+(N<<3)>>3]-+p[C>>3]-+p[D+(N<<3)>>3]+ +p[E>>3];switch(N|0){case 0:{P=1.0;break}case 1:{P=+ca(+J);break}default:P=(K*(+((N<<1)+-1|0)*+ca(+J))-M*+(N+-1|0))/+(N|0)}L=O*P+L;p[z>>3]=L;N=N+1|0;if((N|0)==(l|0)){R=P;S=K;break}else{O=K;K=P;M=O}}N=I+1|0;if((N|0)<(y|0)){G=R;H=S;I=N}else break}}while(0);I=wY()|0;y=Rqa(I>>>0>1073741823?-1:I<<2)|0;I=wY()|0;w=Rqa(I>>>0>1073741823?-1:I<<2)|0;dZ(h,1,4,y,1,4,uY()|0)|0;dZ(j,1,4,w,1,4,uY()|0)|0;j=k[h>>2]|0;eZ(x,j,2,v,y,w,2,uY()|0)|0;Tqa(y);Tqa(w);p[v>>3]=+p[v+8>>3];w=Qqa(16)|0;B=0;ib(297,w|0,1012,v|0,g|0);g=B;B=0;if(g&1){g=Rb()|0;y=Q;Sqa(w);T=y;U=g;Qb(U|0)}YN(b,w);w=k[a>>2]|0;if(w)Tqa(w);k[a>>2]=0;a=k[f>>2]|0;if(a)Tqa(a);k[f>>2]=0;Tqa(v);Tqa(x)}Rka(c,q,s,t,u,138084);x=k[q>>2]|0;if(x){v=Qqa(24)|0;B=0;La(31,v|0,1014,x|0,k[u>>2]|0,k[s>>2]|0,k[t>>2]|0);x=B;B=0;if(x&1){x=Rb()|0;f=Q;Sqa(v);T=f;U=x;Qb(U|0)}YN(b,v);v=k[u>>2]|0;x=k[q>>2]|0;if((v|0)>0){f=x;a=v;v=0;while(1){w=k[f+(v<<2)>>2]|0;if(!w){V=a;W=f}else{Tqa(w);V=k[u>>2]|0;W=k[q>>2]|0}v=v+1|0;if((v|0)>=(V|0)){X=W;break}else{f=W;a=V}}}else X=x;if(X)Tqa(X);k[q>>2]=0;q=k[s>>2]|0;if(q)Tqa(q);k[s>>2]=0;s=k[t>>2]|0;if(s)Tqa(s);k[t>>2]=0}Hka(c,o,n,138103);t=Qqa(12)|0;B=0;eb(518,t|0,1016,k[n>>2]|0);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Sqa(t);T=q;U=s;Qb(U|0)}YN(b,t);t=k[n>>2]|0;if(!t){Y=0;Nka(c,o,Y,138103);r=e;return}s=Qqa(16)|0;B=0;ib(294,s|0,1015,k[o>>2]|0,t|0);t=B;B=0;if(t&1){t=Rb()|0;q=Q;Sqa(s);T=q;U=t;Qb(U|0)}else{YN(b,s);Y=k[n>>2]|0;Nka(c,o,Y,138103);r=e;return}}function gja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,143640,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138209,4);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,159,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function hja(a,b){a=a|0;b=b|0;return 0}function ija(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,138214,15)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144398,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,166,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function jja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144189,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,169,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function kja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,144203,13);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,172,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0);return 0}function lja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;c=r;r=r+192|0;b=c+176|0;a=c+40|0;d=c+24|0;e=c+12|0;f=c;c=a+56|0;g=a+4|0;k[a>>2]=27524;k[c>>2]=27544;B=0;wa(508,a+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(c);Qb(j|0)}k[a+128>>2]=0;k[a+132>>2]=-1;k[a>>2]=27468;k[c>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=a+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[a+52>>2]=16;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;B=0;wa(509,g|0,b|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(b);Yua(l);Ava(g);m=p;n=o;break}Yua(b);B=0;o=Ia(40,a|0,149721,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,138230,21);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,175,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[a>>2]=27468;k[c>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(c);Qb(D|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}function mja(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;e=r;r=r+192|0;d=e+176|0;c=e+40|0;b=e+24|0;a=e+12|0;f=e;e=c+56|0;g=c+4|0;k[c>>2]=27524;k[e>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(e);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[e>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,g|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(d);Yua(l);Ava(g);m=p;n=o;break}Yua(d);B=0;o=Ia(40,c|0,144350,19)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,b|0,138128,80);s=B;B=0;do if(!(s&1)){B=0;eb(502,a|0,138252,9);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(b);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,b|0,a|0,178,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(a);Yua(b);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[e>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(e);Qb(D|0)}while(0);i=m;j=n;vva(e);Qb(j|0)}function nja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;a=Hc[k[(k[c>>2]|0)+172>>2]&511](c)|0;d=Rqa(a>>>0>1073741823?-1:a<<2)|0;Ip(c,d);e=a>>>0>536870911?-1:a<<3;f=Rqa(e)|0;g=(a|0)>0;if(g){h=0;do{p[f+(h<<3)>>3]=+p[b+(k[d+(h<<2)>>2]<<3)>>3];h=h+1|0}while((h|0)!=(a|0))}h=Rqa(e)|0;yp(c,h,999,0.0);if(g)i=0;else{j=k[c>>2]|0;l=j+48|0;m=k[l>>2]|0;rd[m&511](c,999,h,738);Tqa(d);Tqa(f);Tqa(h);return}do{g=h+(i<<3)|0;p[g>>3]=+p[f+(i<<3)>>3]+ +p[g>>3];i=i+1|0}while((i|0)!=(a|0));j=k[c>>2]|0;l=j+48|0;m=k[l>>2]|0;rd[m&511](c,999,h,738);Tqa(d);Tqa(f);Tqa(h);return}function oja(a,b){a=a|0;b=b|0;return}function pja(a){a=a|0;Sqa(a);return}function qja(a){a=a|0;k[a>>2]=40684;k[a+16>>2]=-1;k[a+20>>2]=0;k[a+24>>2]=0;p[a+8>>3]=-9999.0;p[a+32>>3]=-9999.0;return}function rja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;c=r;r=r+16|0;d=c+4|0;e=c;k[a>>2]=40684;k[d>>2]=0;k[e>>2]=0;f=a+16|0;k[f>>2]=b;Sna(d,e,b);b=k[f>>2]|0;f=b>>>0>536870911?-1:b<<3;g=Rqa(f)|0;k[a+24>>2]=g;h=Rqa(f)|0;k[a+20>>2]=h;f=k[d>>2]|0;if((b|0)<=0){if(f)i=4}else{j=k[e>>2]|0;l=0;do{p[g+(l<<3)>>3]=+p[f+(l<<3)>>3];p[h+(l<<3)>>3]=+p[j+(l<<3)>>3];l=l+1|0}while((l|0)<(b|0));i=4}if((i|0)==4)Tqa(f);k[d>>2]=0;d=k[e>>2]|0;if(!d){m=a+8|0;p[m>>3]=-9999.0;n=a+32|0;p[n>>3]=-9999.0;r=c;return}Tqa(d);m=a+8|0;p[m>>3]=-9999.0;n=a+32|0;p[n>>3]=-9999.0;r=c;return}function sja(a,b){a=a|0;b=+b;var c=0,d=0;k[a>>2]=40684;k[a+16>>2]=1;c=Rqa(8)|0;k[a+24>>2]=c;d=Rqa(8)|0;k[a+20>>2]=d;p[c>>3]=b;p[d>>3]=1.0;p[a+8>>3]=-9999.0;p[a+32>>3]=-9999.0;return}function tja(a){a=a|0;var b=0,c=0;k[a>>2]=40684;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function uja(a){a=a|0;var b=0,c=0;k[a>>2]=40684;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+24>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function vja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0;b=r;r=r+1664|0;c=b+1652|0;d=b+1456|0;e=b+1640|0;f=b+1320|0;g=b+1628|0;h=b+1168|0;i=b+1616|0;j=b+1032|0;l=b+1604|0;m=b+880|0;n=b+1592|0;o=b+728|0;q=b+1304|0;s=b+592|0;t=b+1016|0;u=b+440|0;v=b+864|0;w=b+304|0;x=b+576|0;y=b+168|0;z=b+152|0;A=b+16|0;C=b;D=d+56|0;E=d+4|0;k[d>>2]=27524;k[D>>2]=27544;B=0;wa(508,d+56|0,E|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;H=F;vva(D);Qb(H|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[D>>2]=27488;B=0;va(448,E|0);F=B;B=0;do if(F&1){I=Rb()|0;J=Q;K=I}else{k[E>>2]=27560;I=d+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,E|0,c|0);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(c);Yua(I);Ava(E);J=M;K=L;break}Yua(c);B=0;Ia(40,d|0,138272,10)|0;L=B;B=0;do if(!(L&1)?(B=0,wa(510,e|0,E|0),M=B,B=0,!(M&1)):0){B=0;ya(424,e|0)|0;M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(e);O=N;P=M;break}Yua(e);k[d>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(I);Ava(E);vva(D);M=f+56|0;N=f+4|0;k[f>>2]=27524;k[M>>2]=27544;B=0;wa(508,f+56|0,N|0);R=B;B=0;if(R&1){R=Rb()|0;S=Q;T=R;vva(M);Qb(T|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[M>>2]=27488;B=0;va(448,N|0);R=B;B=0;do if(R&1){U=Rb()|0;V=Q;W=U}else{k[N>>2]=27560;U=f+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,N|0,c|0);X=B;B=0;if(X&1){X=Rb()|0;Y=Q;Yua(c);Yua(U);Ava(N);V=Y;W=X;break}Yua(c);B=0;X=Ia(40,f|0,139266,13)|0;Y=B;B=0;do if(((!(Y&1)?(Z=a+16|0,B=0,_=Xa(242,X|0,k[Z>>2]|0)|0,$=B,B=0,!($&1)):0)?(B=0,Ia(40,_|0,149177,1)|0,_=B,B=0,!(_&1)):0)?(B=0,wa(510,g|0,N|0),_=B,B=0,!(_&1)):0){B=0;ya(424,g|0)|0;_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(g);aa=$;ba=_;break}Yua(g);k[f>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(U);Ava(N);vva(M);_=a+20|0;a:do if(!(k[_>>2]|0)){$=o+56|0;ca=o+4|0;k[o>>2]=27524;k[$>>2]=27544;B=0;wa(508,o+56|0,ca|0);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;fa=da;vva($);Qb(fa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[$>>2]=27488;B=0;va(448,ca|0);da=B;B=0;do if(da&1){ga=Rb()|0;ha=Q;ia=ga}else{k[ca>>2]=27560;ga=o+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ca|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(c);Yua(ga);Ava(ca);ha=ka;ia=ja;break}Yua(c);B=0;Ia(40,o|0,139295,15)|0;ja=B;B=0;do if(!(ja&1)){B=0;wa(510,q|0,ca|0);ka=B;B=0;if(ka&1){la=92;break}B=0;ya(424,q|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;ma=Q;Yua(q);na=ma;oa=ka;break}else{Yua(q);k[o>>2]=27468;k[$>>2]=27488;k[ca>>2]=27560;Yua(ga);Ava(ca);vva($);break a}}else la=92;while(0);if((la|0)==92){ja=Rb()|0;na=Q;oa=ja}k[o>>2]=27468;k[$>>2]=27488;k[ca>>2]=27560;Yua(ga);Ava(ca);vva($);pa=na;qa=oa;Qb(qa|0)}while(0);ea=ha;fa=ia;vva($);Qb(fa|0)}else{ca=h+56|0;da=h+4|0;k[h>>2]=27524;k[ca>>2]=27544;B=0;wa(508,h+56|0,da|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ra=Q;sa=ja;vva(ca);Qb(sa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[ca>>2]=27488;B=0;va(448,da|0);ja=B;B=0;do if(ja&1){ka=Rb()|0;ta=Q;ua=ka}else{k[da>>2]=27560;ka=h+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);ma=B;B=0;if(ma&1){ma=Rb()|0;xa=Q;Yua(c);Yua(ka);Ava(da);ta=xa;ua=ma;break}Yua(c);B=0;Ia(40,h|0,139280,14)|0;ma=B;B=0;do if(ma&1)la=54;else{B=0;wa(510,i|0,da|0);xa=B;B=0;if(xa&1){la=54;break}B=0;ya(424,i|0)|0;xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(i);Aa=za;Ba=xa;break}Yua(i);k[h>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ka);Ava(da);vva(ca);b:do if((k[Z>>2]|0)>0){xa=j+56|0;za=j+4|0;Ca=j+56|0;Da=j+128|0;Ea=j+132|0;Fa=j+36|0;Ga=j+52|0;Ha=0;while(1){k[j>>2]=27524;k[xa>>2]=27544;B=0;wa(508,Ca|0,za|0);Ja=B;B=0;if(Ja&1){la=61;break}k[Da>>2]=0;k[Ea>>2]=-1;k[j>>2]=27468;k[xa>>2]=27488;B=0;va(448,za|0);Ja=B;B=0;if(Ja&1){la=62;break}k[za>>2]=27560;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[Ga>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);Ja=B;B=0;if(Ja&1){la=60;break}Yua(c);B=0;Ja=Ia(40,j|0,149175,1)|0;Ka=B;B=0;if(Ka&1){la=71;break}B=0;Ka=Sa(1,Ja|0,+(+p[(k[_>>2]|0)+(Ha<<3)>>3]))|0;Ja=B;B=0;if(Ja&1){la=71;break}B=0;Ia(40,Ka|0,149177,1)|0;Ka=B;B=0;if(Ka&1){la=71;break}B=0;wa(510,l|0,za|0);Ka=B;B=0;if(Ka&1){la=71;break}B=0;ya(424,l|0)|0;Ka=B;B=0;if(Ka&1){la=72;break}Yua(l);k[j>>2]=27468;k[xa>>2]=27488;k[za>>2]=27560;Yua(Fa);Ava(za);vva(xa);Ha=Ha+1|0;if((Ha|0)>=(k[Z>>2]|0))break b}if((la|0)==60){Ha=Rb()|0;Ga=Q;Yua(c);Yua(Fa);Ava(za);La=Ga;Ma=Ha;la=63}else if((la|0)==61){Ha=Rb()|0;Na=Q;Oa=Ha;vva(xa);Qb(Oa|0)}else if((la|0)==62){Ha=Rb()|0;La=Q;Ma=Ha;la=63}else if((la|0)==71){Ha=Rb()|0;Pa=Q;Qa=Ha;la=73}else if((la|0)==72){Ha=Rb()|0;Ga=Q;Yua(l);Pa=Ga;Qa=Ha;la=73}if((la|0)==63){Na=La;Oa=Ma;vva(xa);Qb(Oa|0)}else if((la|0)==73){k[j>>2]=27468;k[xa>>2]=27488;k[za>>2]=27560;Yua(Fa);Ava(za);vva(xa);pa=Pa;qa=Qa;Qb(qa|0)}}while(0);Ha=m+56|0;Ga=m+4|0;k[m>>2]=27524;k[Ha>>2]=27544;B=0;wa(508,m+56|0,Ga|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Ra=Q;Ta=Ea;vva(Ha);Qb(Ta|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[Ha>>2]=27488;B=0;va(448,Ga|0);Ea=B;B=0;do if(Ea&1){Da=Rb()|0;Ua=Q;Va=Da}else{k[Ga>>2]=27560;Da=m+36|0;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ga|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ka=Q;Yua(c);Yua(Da);Ava(Ga);Ua=Ka;Va=Ca;break}Yua(c);B=0;Ia(40,m|0,149198,2)|0;Ca=B;B=0;do if(!(Ca&1)){B=0;wa(510,n|0,Ga|0);Ka=B;B=0;if(Ka&1){la=77;break}B=0;ya(424,n|0)|0;Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ja=Q;Yua(n);Wa=Ja;Ya=Ka;break}else{Yua(n);k[m>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Da);Ava(Ga);vva(Ha);break a}}else la=77;while(0);if((la|0)==77){Ca=Rb()|0;Wa=Q;Ya=Ca}k[m>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Da);Ava(Ga);vva(Ha);pa=Wa;qa=Ya;Qb(qa|0)}while(0);Ra=Ua;Ta=Va;vva(Ha);Qb(Ta|0)}while(0);if((la|0)==54){ma=Rb()|0;Aa=Q;Ba=ma}k[h>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ka);Ava(da);vva(ca);pa=Aa;qa=Ba;Qb(qa|0)}while(0);ra=ta;sa=ua;vva(ca);Qb(sa|0)}while(0);_=a+24|0;c:do if(k[_>>2]|0){da=s+56|0;ja=s+4|0;k[s>>2]=27524;k[da>>2]=27544;B=0;wa(508,s+56|0,ja|0);$=B;B=0;if($&1){$=Rb()|0;Za=Q;_a=$;vva(da);Qb(_a|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[da>>2]=27488;B=0;va(448,ja|0);$=B;B=0;do if($&1){ma=Rb()|0;$a=Q;ab=ma}else{k[ja>>2]=27560;ma=s+36|0;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ja|0,c|0);ga=B;B=0;if(ga&1){ga=Rb()|0;Ga=Q;Yua(c);Yua(ma);Ava(ja);$a=Ga;ab=ga;break}Yua(c);B=0;Ia(40,s|0,139311,14)|0;ga=B;B=0;do if(ga&1)la=118;else{B=0;wa(510,t|0,ja|0);Ga=B;B=0;if(Ga&1){la=118;break}B=0;ya(424,t|0)|0;Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ea=Q;Yua(t);bb=Ea;cb=Ga;break}Yua(t);k[s>>2]=27468;k[da>>2]=27488;k[ja>>2]=27560;Yua(ma);Ava(ja);vva(da);d:do if((k[Z>>2]|0)>0){Ga=u+56|0;Ea=u+4|0;Ca=u+56|0;xa=u+128|0;za=u+132|0;Fa=u+36|0;Ka=u+52|0;Ja=0;while(1){k[u>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,Ca|0,Ea|0);db=B;B=0;if(db&1){la=125;break}k[xa>>2]=0;k[za>>2]=-1;k[u>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Ea|0);db=B;B=0;if(db&1){la=126;break}k[Ea>>2]=27560;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[Ka>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ea|0,c|0);db=B;B=0;if(db&1){la=124;break}Yua(c);B=0;db=Ia(40,u|0,149175,1)|0;eb=B;B=0;if(eb&1){la=135;break}B=0;eb=Sa(1,db|0,+(+p[(k[_>>2]|0)+(Ja<<3)>>3]))|0;db=B;B=0;if(db&1){la=135;break}B=0;Ia(40,eb|0,149177,1)|0;eb=B;B=0;if(eb&1){la=135;break}B=0;wa(510,v|0,Ea|0);eb=B;B=0;if(eb&1){la=135;break}B=0;ya(424,v|0)|0;eb=B;B=0;if(eb&1){la=136;break}Yua(v);k[u>>2]=27468;k[Ga>>2]=27488;k[Ea>>2]=27560;Yua(Fa);Ava(Ea);vva(Ga);Ja=Ja+1|0;if((Ja|0)>=(k[Z>>2]|0))break d}if((la|0)==124){Ja=Rb()|0;Ka=Q;Yua(c);Yua(Fa);Ava(Ea);fb=Ka;gb=Ja;la=127}else if((la|0)==125){Ja=Rb()|0;hb=Q;ib=Ja;vva(Ga);Qb(ib|0)}else if((la|0)==126){Ja=Rb()|0;fb=Q;gb=Ja;la=127}else if((la|0)==135){Ja=Rb()|0;jb=Q;kb=Ja;la=137}else if((la|0)==136){Ja=Rb()|0;Ka=Q;Yua(v);jb=Ka;kb=Ja;la=137}if((la|0)==127){hb=fb;ib=gb;vva(Ga);Qb(ib|0)}else if((la|0)==137){k[u>>2]=27468;k[Ga>>2]=27488;k[Ea>>2]=27560;Yua(Fa);Ava(Ea);vva(Ga);pa=jb;qa=kb;Qb(qa|0)}}while(0);Ha=w+56|0;Ja=w+4|0;k[w>>2]=27524;k[Ha>>2]=27544;B=0;wa(508,w+56|0,Ja|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;lb=Q;mb=Ka;vva(Ha);Qb(mb|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[Ha>>2]=27488;B=0;va(448,Ja|0);Ka=B;B=0;do if(Ka&1){za=Rb()|0;nb=Q;ob=za}else{k[Ja>>2]=27560;za=w+36|0;k[za>>2]=0;k[za+4>>2]=0;k[za+8>>2]=0;k[za+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ca=Q;Yua(c);Yua(za);Ava(Ja);nb=Ca;ob=xa;break}Yua(c);B=0;Ia(40,w|0,149198,2)|0;xa=B;B=0;do if(!(xa&1)){B=0;wa(510,x|0,Ja|0);Ca=B;B=0;if(Ca&1){la=141;break}B=0;ya(424,x|0)|0;Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Yua(x);pb=Da;qb=Ca;break}else{Yua(x);k[w>>2]=27468;k[Ha>>2]=27488;k[Ja>>2]=27560;Yua(za);Ava(Ja);vva(Ha);break c}}else la=141;while(0);if((la|0)==141){xa=Rb()|0;pb=Q;qb=xa}k[w>>2]=27468;k[Ha>>2]=27488;k[Ja>>2]=27560;Yua(za);Ava(Ja);vva(Ha);pa=pb;qa=qb;Qb(qa|0)}while(0);lb=nb;mb=ob;vva(Ha);Qb(mb|0)}while(0);if((la|0)==118){ga=Rb()|0;bb=Q;cb=ga}k[s>>2]=27468;k[da>>2]=27488;k[ja>>2]=27560;Yua(ma);Ava(ja);vva(da);pa=bb;qa=cb;Qb(qa|0)}while(0);Za=$a;_a=ab;vva(da);Qb(_a|0)}while(0);Z=y+56|0;_=y+4|0;k[y>>2]=27524;k[Z>>2]=27544;B=0;wa(508,y+56|0,_|0);ja=B;B=0;if(ja&1){ja=Rb()|0;rb=Q;sb=ja;vva(Z);Qb(sb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Z>>2]=27488;B=0;va(448,_|0);ja=B;B=0;do if(ja&1){$=Rb()|0;tb=Q;ub=$}else{k[_>>2]=27560;$=y+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,_|0,c|0);ca=B;B=0;if(ca&1){ca=Rb()|0;ga=Q;Yua(c);Yua($);Ava(_);tb=ga;ub=ca;break}Yua(c);B=0;ca=Ia(40,y|0,139435,12)|0;ga=B;B=0;do if(ga&1)la=171;else{B=0;ka=Sa(1,ca|0,+(+p[a+8>>3]))|0;Ja=B;B=0;if(Ja&1){la=171;break}B=0;Ia(40,ka|0,149177,1)|0;ka=B;B=0;if(ka&1){la=171;break}B=0;wa(510,z|0,_|0);ka=B;B=0;if(ka&1){la=171;break}B=0;ya(424,z|0)|0;ka=B;B=0;if(ka&1){ka=Rb()|0;Ja=Q;Yua(z);vb=Ja;wb=ka;break}Yua(z);k[y>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua($);Ava(_);vva(Z);ka=A+56|0;Ja=A+4|0;k[A>>2]=27524;k[ka>>2]=27544;B=0;wa(508,A+56|0,Ja|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;xb=Q;yb=Ka;vva(ka);Qb(yb|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[ka>>2]=27488;B=0;va(448,Ja|0);Ka=B;B=0;do if(Ka&1){xa=Rb()|0;zb=Q;Ab=xa}else{k[Ja>>2]=27560;xa=A+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Ea=Q;Yua(c);Yua(xa);Ava(Ja);zb=Ea;Ab=Ga;break}Yua(c);B=0;Ga=Ia(40,A|0,139448,12)|0;Ea=B;B=0;do if(!(Ea&1)){B=0;Fa=Sa(1,Ga|0,+(+p[a+32>>3]))|0;Ca=B;B=0;if(Ca&1){la=174;break}B=0;Ia(40,Fa|0,149177,1)|0;Fa=B;B=0;if(Fa&1){la=174;break}B=0;wa(510,C|0,Ja|0);Fa=B;B=0;if(Fa&1){la=174;break}B=0;ya(424,C|0)|0;Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ca=Q;Yua(C);Bb=Ca;Cb=Fa;break}else{Yua(C);k[A>>2]=27468;k[ka>>2]=27488;k[Ja>>2]=27560;Yua(xa);Ava(Ja);vva(ka);r=b;return}}else la=174;while(0);if((la|0)==174){Ga=Rb()|0;Bb=Q;Cb=Ga}k[A>>2]=27468;k[ka>>2]=27488;k[Ja>>2]=27560;Yua(xa);Ava(Ja);vva(ka);pa=Bb;qa=Cb;Qb(qa|0)}while(0);xb=zb;yb=Ab;vva(ka);Qb(yb|0)}while(0);if((la|0)==171){ca=Rb()|0;vb=Q;wb=ca}k[y>>2]=27468;k[Z>>2]=27488;k[_>>2]=27560;Yua($);Ava(_);vva(Z);pa=vb;qa=wb;Qb(qa|0)}while(0);rb=tb;sb=ub;vva(Z);Qb(sb|0)}else la=51;while(0);if((la|0)==51){X=Rb()|0;aa=Q;ba=X}k[f>>2]=27468;k[M>>2]=27488;k[N>>2]=27560;Yua(U);Ava(N);vva(M);pa=aa;qa=ba;Qb(qa|0)}while(0);S=V;T=W;vva(M);Qb(T|0)}else la=48;while(0);if((la|0)==48){L=Rb()|0;O=Q;P=L}k[d>>2]=27468;k[D>>2]=27488;k[E>>2]=27560;Yua(I);Ava(E);vva(D);pa=O;qa=P;Qb(qa|0)}while(0);G=J;H=K;vva(D);Qb(H|0)}function wja(a){a=a|0;return 929}function xja(a,b){a=a|0;b=b|0;p[a+8>>3]=+p[(k[a+20>>2]|0)+(b<<3)>>3];p[a+32>>3]=+p[(k[a+24>>2]|0)+(b<<3)>>3];return}function yja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{p[a+32>>3]=-1.0;r=c;return}case 1:{p[a+32>>3]=1.0;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;i=Q;j=b;vva(c);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);m=q;n=o;break}Yua(d);B=0;o=Ia(40,e|0,138283,31)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,138315,73);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,139532,11);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,o|0,f|0,g|0,120,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,o|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(o|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}}}function zja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;d=r;r=r+368|0;e=d+344|0;f=d+208|0;g=d+196|0;h=d+184|0;i=d+36|0;j=d+48|0;l=d+24|0;m=d+12|0;n=d;if((b&-2|0)!=738){o=j+56|0;q=j+4|0;k[j>>2]=27524;k[o>>2]=27544;B=0;wa(508,j+56|0,q|0);s=B;B=0;if(s&1){s=Rb()|0;t=Q;u=s;vva(o);Qb(u|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[o>>2]=27488;B=0;va(448,q|0);s=B;B=0;do if(s&1){v=Rb()|0;w=Q;x=v}else{k[q>>2]=27560;v=j+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,q|0,e|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(e);Yua(v);Ava(q);w=z;x=y;break}Yua(e);B=0;y=Ia(40,j|0,145867,15)|0;z=B;B=0;a:do if((((!(z&1)?(B=0,A=ya(427,b|0)|0,C=B,B=0,!(C&1)):0)?(C=Lta(A)|0,B=0,D=Ia(40,y|0,A|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,144645,14)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,l|0,138315,73);D=B;B=0;do if(!(D&1)){B=0;eb(502,m|0,139574,9);A=B;B=0;if(A&1){A=Rb()|0;E=Q;Yua(l);F=A;G=E;break}B=0;wa(510,n|0,q|0);E=B;B=0;if(E&1){E=Rb()|0;H=1;I=Q;J=E}else{B=0;ua(163,C|0,l|0,m|0,138,n|0);E=B;B=0;if(E&1)K=1;else{B=0;eb(503,C|0,1240,229);B=0;K=0}E=Rb()|0;A=Q;Yua(n);H=K;I=A;J=E}Yua(m);Yua(l);if(H){F=J;G=I}else{L=I;M=J;break a}}else{E=Rb()|0;F=E;G=Q}while(0);zb(C|0);L=G;M=F}else N=46;while(0);if((N|0)==46){y=Rb()|0;L=Q;M=y}k[j>>2]=27468;k[o>>2]=27488;k[q>>2]=27560;Yua(v);Ava(q);vva(o);O=L;P=M;Qb(P|0)}while(0);t=w;u=x;vva(o);Qb(u|0)}switch(c|0){case 0:{p[a+32>>3]=-1.0;r=d;return}case 1:{p[a+32>>3]=1.0;r=d;return}default:{d=f+56|0;a=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;R=Q;S=c;vva(d);Qb(S|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){u=Rb()|0;T=Q;U=u}else{k[a>>2]=27560;u=f+36|0;k[u>>2]=0;k[u+4>>2]=0;k[u+8>>2]=0;k[u+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);o=B;B=0;if(o&1){o=Rb()|0;x=Q;Yua(e);Yua(u);Ava(a);T=x;U=o;break}Yua(e);B=0;o=Ia(40,f|0,138389,29)|0;x=B;B=0;b:do if(!(x&1)?(B=0,Xa(239,o|0,0)|0,w=B,B=0,!(w&1)):0){w=Ab(20)|0;B=0;eb(502,g|0,138315,73);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,139574,9);M=B;B=0;if(M&1){M=Rb()|0;L=Q;Yua(g);V=M;W=L;break}B=0;wa(510,i|0,a|0);L=B;B=0;if(L&1){L=Rb()|0;X=Q;Y=L;Z=1}else{B=0;ua(163,w|0,g|0,h|0,135,i|0);L=B;B=0;if(L&1)_=1;else{B=0;eb(503,w|0,1240,229);B=0;_=0}L=Rb()|0;M=Q;Yua(i);X=M;Y=L;Z=_}Yua(h);Yua(g);if(Z){V=Y;W=X}else{$=Y;aa=X;break b}}else{L=Rb()|0;V=L;W=Q}while(0);zb(w|0);$=V;aa=W}else N=20;while(0);if((N|0)==20){o=Rb()|0;$=o;aa=Q}k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(u);Ava(a);vva(d);O=aa;P=$;Qb(P|0)}while(0);R=T;S=U;vva(d);Qb(S|0)}}}function Aja(a){a=a|0;return 0}function Bja(a){a=a|0;return k[a+16>>2]|0}function Cja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138315,73);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,139078,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,167,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Dja(a){a=a|0;var b=0;k[a>>2]=40732;k[a+16>>2]=-1;b=a+20|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;return}function Eja(a,b){a=a|0;b=b|0;k[a>>2]=40732;Una(a+16|0,a+24|0,a+28|0,a+32|0,a+20|0,b);p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;return}function Fja(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0;e=r;r=r+384|0;f=e+372|0;g=e+360|0;h=e+356|0;i=e+352|0;j=e+216|0;l=e+200|0;m=e+48|0;n=e+36|0;o=e+64|0;q=e+24|0;s=e+12|0;t=e;k[a>>2]=40732;k[h>>2]=0;k[i>>2]=0;u=a+16|0;k[u>>2]=d;B=0;eb(526,h|0,i|0,d|0);d=B;B=0;a:do if((((!(d&1)?(v=k[u>>2]|0,w=v>>>0>536870911?-1:v<<3,B=0,x=ya(422,w|0)|0,y=B,B=0,!(y&1)):0)?(k[a+24>>2]=x,B=0,y=ya(422,w|0)|0,z=B,B=0,!(z&1)):0)?(k[a+28>>2]=y,B=0,z=ya(422,w|0)|0,A=B,B=0,!(A&1)):0)?(k[a+32>>2]=z,B=0,A=ya(422,w|0)|0,w=B,B=0,!(w&1)):0){k[a+20>>2]=A;switch(b|0){case 0:{C=1.0;D=0.0;E=0.0;break}case 1:{C=0.0;D=1.0;E=0.0;break}case 2:{C=0.0;D=0.0;E=1.0;break}default:{w=j+56|0;F=j+4|0;k[j>>2]=27524;k[w>>2]=27544;B=0;wa(508,j+56|0,F|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;I=G}else{k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[w>>2]=27488;B=0;va(448,F|0);G=B;B=0;do if(G&1){J=Rb()|0;K=Q;L=J}else{k[F>>2]=27560;J=j+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[j+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,F|0,g|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(g);Yua(J);Ava(F);K=N;L=M;break}Yua(g);B=0;M=Ia(40,j|0,138437,58)|0;N=B;B=0;b:do if(((!(N&1)?(B=0,O=Xa(242,M|0,b|0)|0,P=B,B=0,!(P&1)):0)?(B=0,P=Ia(40,O|0,141170,1)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,P|0,0)|0,P=B,B=0,!(P&1)):0){P=Ab(20)|0;B=0;eb(502,l|0,138496,74);O=B;B=0;do if(!(O&1)){B=0;eb(502,m|0,138571,9);R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(l);T=R;U=S;break}B=0;wa(510,n|0,F|0);S=B;B=0;if(S&1){S=Rb()|0;V=Q;W=S;X=1}else{B=0;ua(163,P|0,l|0,m|0,65,n|0);S=B;B=0;if(S&1)Y=1;else{B=0;eb(503,P|0,1240,229);B=0;Y=0}S=Rb()|0;R=Q;Yua(n);V=R;W=S;X=Y}Yua(m);Yua(l);if(X){T=W;U=V}else{Z=W;_=V;break b}}else{S=Rb()|0;T=S;U=Q}while(0);zb(P|0);Z=T;_=U}else $=28;while(0);if(($|0)==28){M=Rb()|0;Z=M;_=Q}k[j>>2]=27468;k[w>>2]=27488;k[F>>2]=27560;Yua(J);Ava(F);vva(w);aa=_;ba=Z;Qb(ba|0)}while(0);H=K;I=L}vva(w);ca=H;da=I;break a}}switch(c|0){case 0:{ea=1.0;fa=0.0;ga=0.0;break}case 1:{ea=0.0;fa=1.0;ga=0.0;break}case 2:{ea=0.0;fa=0.0;ga=1.0;break}default:{F=o+56|0;G=o+4|0;k[o>>2]=27524;k[F>>2]=27544;B=0;wa(508,o+56|0,G|0);M=B;B=0;if(M&1){M=Rb()|0;ha=Q;ia=M}else{k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[F>>2]=27488;B=0;va(448,G|0);M=B;B=0;do if(M&1){N=Rb()|0;ja=Q;ka=N}else{k[G>>2]=27560;N=o+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,G|0,f|0);O=B;B=0;if(O&1){O=Rb()|0;S=Q;Yua(f);Yua(N);Ava(G);ja=S;ka=O;break}Yua(f);B=0;O=Ia(40,o|0,138581,59)|0;S=B;B=0;c:do if(((!(S&1)?(B=0,R=Xa(242,O|0,c|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,R|0,138641,2)|0,R=B,B=0,!(R&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,q|0,138496,74);R=B;B=0;do if(!(R&1)){B=0;eb(502,s|0,138571,9);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(q);oa=ma;pa=na;break}B=0;wa(510,t|0,G|0);na=B;B=0;if(na&1){na=Rb()|0;qa=1;ra=Q;sa=na}else{B=0;ua(163,la|0,q|0,s|0,77,t|0);na=B;B=0;if(na&1)ta=1;else{B=0;eb(503,la|0,1240,229);B=0;ta=0}na=Rb()|0;ma=Q;Yua(t);qa=ta;ra=ma;sa=na}Yua(s);Yua(q);if(qa){oa=sa;pa=ra}else{xa=ra;za=sa;break c}}else{na=Rb()|0;oa=na;pa=Q}while(0);zb(la|0);xa=pa;za=oa}else $=56;while(0);if(($|0)==56){O=Rb()|0;xa=Q;za=O}k[o>>2]=27468;k[F>>2]=27488;k[G>>2]=27560;Yua(N);Ava(G);vva(F);aa=xa;ba=za;Qb(ba|0)}while(0);ha=ja;ia=ka}vva(F);ca=ha;da=ia;break a}}if((v|0)>0){Aa=(C+ea)*.5;G=k[h>>2]|0;Ba=ea-C;Ca=(D+fa)*.5;Da=fa-D;Ea=(E+ga)*.5;Fa=ga-E;M=k[i>>2]|0;w=0;do{O=G+(w<<3)|0;p[x+(w<<3)>>3]=Aa+Ba*(+p[O>>3]*.5);p[y+(w<<3)>>3]=Ca+Da*(+p[O>>3]*.5);p[z+(w<<3)>>3]=Ea+Fa*(+p[O>>3]*.5);p[A+(w<<3)>>3]=+p[M+(w<<3)>>3];w=w+1|0}while((w|0)<(v|0));Ga=G}else Ga=k[h>>2]|0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;if(Ga)Tqa(Ga);k[h>>2]=0;G=k[i>>2]|0;if(!G){r=e;return}Tqa(G);r=e;return}else $=7;while(0);if(($|0)==7){$=Rb()|0;ca=Q;da=$}aa=ca;ba=da;Qb(ba|0)}function Gja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0;d=r;r=r+16|0;e=d+4|0;f=d;k[a>>2]=40732;k[e>>2]=0;k[f>>2]=0;g=a+16|0;k[g>>2]=c;Sna(e,f,c);c=k[g>>2]|0;g=c>>>0>536870911?-1:c<<3;h=Rqa(g)|0;k[a+24>>2]=h;i=Rqa(g)|0;k[a+28>>2]=i;j=Rqa(g)|0;k[a+32>>2]=j;l=Rqa(g)|0;k[a+20>>2]=l;if((c|0)>0){g=b+24|0;m=k[e>>2]|0;n=b+8|0;o=b+32|0;q=b+16|0;s=b+40|0;t=k[f>>2]|0;u=0;do{v=+p[b>>3];w=+p[g>>3];x=m+(u<<3)|0;p[h+(u<<3)>>3]=(v+w)*.5+(w-v)*(+p[x>>3]*.5);v=+p[n>>3];w=+p[o>>3];p[i+(u<<3)>>3]=(v+w)*.5+(w-v)*(+p[x>>3]*.5);v=+p[q>>3];w=+p[s>>3];p[j+(u<<3)>>3]=(v+w)*.5+(w-v)*(+p[x>>3]*.5);p[l+(u<<3)>>3]=+p[t+(u<<3)>>3];u=u+1|0}while((u|0)<(c|0));y=m}else y=k[e>>2]|0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;if(y)Tqa(y);k[e>>2]=0;e=k[f>>2]|0;if(!e){r=d;return}Tqa(e);r=d;return}function Hja(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0.0,R=0,S=0.0,T=0.0,U=0.0,V=0,W=0.0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0.0,Ea=0,Fa=0.0,Ga=0,Ha=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0.0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0;g=r;r=r+560|0;h=g+544|0;i=g+532|0;j=g+520|0;l=g+384|0;m=g+368|0;n=g+84|0;o=g+72|0;q=g+232|0;s=g+60|0;t=g+48|0;u=g+36|0;v=g+96|0;w=g+24|0;x=g+12|0;y=g;k[a>>2]=40732;a:do if(e){z=a+16|0;A=a+24|0;C=a+28|0;D=a+32|0;E=a+20|0;B=0;La(39,z|0,A|0,C|0,D|0,E|0,f|0);F=B;B=0;if(F&1)G=8;else{F=k[z>>2]|0;if((F|0)<=0){H=a+8|0;p[H>>3]=-9999.0;I=a+40|0;p[I>>3]=-9999.0;J=a+48|0;p[J>>3]=-9999.0;K=a+56|0;p[K>>3]=-9999.0;r=g;return}z=k[A>>2]|0;A=k[C>>2]|0;C=k[D>>2]|0;if(!b){D=k[E>>2]|0;L=0;do{M=z+(L<<3)|0;N=+p[M>>3]*0.0;O=A+(L<<3)|0;P=+p[O>>3];R=C+(L<<3)|0;S=+p[R>>3];T=N+P*c+S*0.0;U=N+P*0.0+S*d;p[M>>3]=1.0-T-U;p[O>>3]=T;p[R>>3]=U;R=D+(L<<3)|0;p[R>>3]=+p[R>>3]*c*d;L=L+1|0}while((L|0)<(F|0));H=a+8|0;p[H>>3]=-9999.0;I=a+40|0;p[I>>3]=-9999.0;J=a+48|0;p[J>>3]=-9999.0;K=a+56|0;p[K>>3]=-9999.0;r=g;return}else V=0;b:while(1){L=z+(V<<3)|0;U=+p[L>>3]*0.0;D=A+(V<<3)|0;T=+p[D>>3];R=C+(V<<3)|0;S=+p[R>>3];P=U+T*c+S*0.0;N=U+T*0.0+S*d;switch(b|0){case 2:{p[L>>3]=P;p[D>>3]=N;W=1.0-P-N;break}case 1:{p[L>>3]=N;p[D>>3]=1.0-P-N;W=P;break}default:break b}p[R>>3]=W;R=(k[E>>2]|0)+(V<<3)|0;p[R>>3]=+p[R>>3]*c*d;V=V+1|0;if((V|0)>=(F|0)){G=121;break}}if((G|0)==121){H=a+8|0;p[H>>3]=-9999.0;I=a+40|0;p[I>>3]=-9999.0;J=a+48|0;p[J>>3]=-9999.0;K=a+56|0;p[K>>3]=-9999.0;r=g;return}F=l+56|0;E=l+4|0;k[l>>2]=27524;k[F>>2]=27544;B=0;wa(508,l+56|0,E|0);C=B;B=0;if(C&1){C=Rb()|0;X=Q;Y=C}else{k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[F>>2]=27488;B=0;va(448,E|0);C=B;B=0;do if(C&1){A=Rb()|0;Z=Q;_=A}else{k[E>>2]=27560;A=l+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[l+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,E|0,j|0);z=B;B=0;if(z&1){z=Rb()|0;R=Q;Yua(j);Yua(A);Ava(E);Z=R;_=z;break}Yua(j);B=0;z=Ia(40,l|0,139246,6)|0;R=B;B=0;c:do if(((!(R&1)?(B=0,D=Xa(242,z|0,b|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,D|0,146481,18)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,m|0,138496,74);D=B;B=0;do if(!(D&1)){B=0;eb(502,n|0,138571,9);O=B;B=0;if(O&1){O=Rb()|0;M=Q;Yua(m);$=M;aa=O;break}B=0;wa(510,o|0,E|0);O=B;B=0;if(O&1){O=Rb()|0;ba=O;ca=Q;da=1}else{B=0;ua(163,L|0,m|0,n|0,184,o|0);O=B;B=0;if(O&1)ea=1;else{B=0;eb(503,L|0,1240,229);B=0;ea=0}O=Rb()|0;M=Q;Yua(o);ba=O;ca=M;da=ea}Yua(n);Yua(m);if(da){$=ca;aa=ba}else{fa=ca;ga=ba;break c}}else{M=Rb()|0;$=Q;aa=M}while(0);zb(L|0);fa=$;ga=aa}else G=29;while(0);if((G|0)==29){z=Rb()|0;fa=Q;ga=z}k[l>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(A);Ava(E);vva(F);ha=fa;ia=ga;Qb(ia|0)}while(0);X=Z;Y=_}vva(F);ja=X;ka=Y}}else{B=0;E=ya(423,64)|0;C=B;B=0;if(!(C&1)){k[E>>2]=40732;C=E+16|0;z=E+24|0;R=E+28|0;D=E+32|0;M=E+20|0;B=0;La(39,C|0,z|0,R|0,D|0,M|0,f|0);O=B;B=0;if(O&1){O=Rb()|0;la=Q;Sqa(E);ha=la;ia=O;Qb(ia|0)}p[E+8>>3]=-9999.0;p[E+40>>3]=-9999.0;p[E+48>>3]=-9999.0;p[E+56>>3]=-9999.0;B=0;O=ya(423,64)|0;la=B;B=0;if(!(la&1)){k[O>>2]=40732;la=O+16|0;ma=O+24|0;na=O+28|0;oa=O+32|0;pa=O+20|0;B=0;La(39,la|0,ma|0,na|0,oa|0,pa|0,f|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Sqa(O);ha=ra;ia=qa;Qb(ia|0)}p[O+8>>3]=-9999.0;p[O+40>>3]=-9999.0;p[O+48>>3]=-9999.0;p[O+56>>3]=-9999.0;qa=k[C>>2]|0;C=(qa|0)>0;d:do if(C){ra=k[z>>2]|0;sa=k[R>>2]|0;ta=k[D>>2]|0;P=1.0-d;if(!b){xa=k[M>>2]|0;za=0;while(1){Aa=ra+(za<<3)|0;N=+p[Aa>>3];Ba=sa+(za<<3)|0;S=+p[Ba>>3];Ca=ta+(za<<3)|0;T=+p[Ca>>3];U=N*c+S*0.0+T*0.0;Da=N*0.0+S+T*d;p[Aa>>3]=1.0-U-Da;p[Ba>>3]=U;p[Ca>>3]=Da;Ca=xa+(za<<3)|0;p[Ca>>3]=P*(+p[Ca>>3]*c);za=za+1|0;if((za|0)>=(qa|0))break d}}else Ea=0;e:while(1){za=ra+(Ea<<3)|0;Da=+p[za>>3];xa=sa+(Ea<<3)|0;U=+p[xa>>3];A=ta+(Ea<<3)|0;T=+p[A>>3];S=Da*c+U*0.0+T*0.0;N=Da*0.0+U+T*d;switch(b|0){case 2:{p[za>>3]=S;p[xa>>3]=N;Fa=1.0-S-N;break}case 1:{p[za>>3]=N;p[xa>>3]=1.0-S-N;Fa=S;break}default:break e}p[A>>3]=Fa;A=(k[M>>2]|0)+(Ea<<3)|0;p[A>>3]=P*(+p[A>>3]*c);Ea=Ea+1|0;if((Ea|0)>=(qa|0))break d}ta=q+56|0;sa=q+4|0;k[q>>2]=27524;k[ta>>2]=27544;B=0;wa(508,q+56|0,sa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ga=Q;Ha=ra}else{k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[ta>>2]=27488;B=0;va(448,sa|0);ra=B;B=0;do if(ra&1){A=Rb()|0;Ja=Q;Ka=A}else{k[sa>>2]=27560;A=q+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[q+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,sa|0,i|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Yua(i);Yua(A);Ava(sa);Ja=za;Ka=xa;break}Yua(i);B=0;xa=Ia(40,q|0,139246,6)|0;za=B;B=0;f:do if(((!(za&1)?(B=0,Ca=Xa(242,xa|0,b|0)|0,Ba=B,B=0,!(Ba&1)):0)?(B=0,Ba=Ia(40,Ca|0,146481,18)|0,Ca=B,B=0,!(Ca&1)):0)?(B=0,Xa(239,Ba|0,0)|0,Ba=B,B=0,!(Ba&1)):0){Ba=Ab(20)|0;B=0;eb(502,s|0,138496,74);Ca=B;B=0;do if(!(Ca&1)){B=0;eb(502,t|0,138571,9);Aa=B;B=0;if(Aa&1){Aa=Rb()|0;Ma=Q;Yua(s);Na=Aa;Oa=Ma;break}B=0;wa(510,u|0,sa|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Pa=1;Qa=Q;Ra=Ma}else{B=0;ua(163,Ba|0,s|0,t|0,222,u|0);Ma=B;B=0;if(Ma&1)Sa=1;else{B=0;eb(503,Ba|0,1240,229);B=0;Sa=0}Ma=Rb()|0;Aa=Q;Yua(u);Pa=Sa;Qa=Aa;Ra=Ma}Yua(t);Yua(s);if(Pa){Na=Ra;Oa=Qa}else{Ta=Qa;Ua=Ra;break f}}else{Ma=Rb()|0;Na=Ma;Oa=Q}while(0);zb(Ba|0);Ta=Oa;Ua=Na}else G=72;while(0);if((G|0)==72){xa=Rb()|0;Ta=Q;Ua=xa}k[q>>2]=27468;k[ta>>2]=27488;k[sa>>2]=27560;Yua(A);Ava(sa);vva(ta);ha=Ta;ia=Ua;Qb(ia|0)}while(0);Ga=Ja;Ha=Ka}vva(ta);ja=Ga;ka=Ha;break a}while(0);F=k[la>>2]|0;sa=(F|0)>0;g:do if(sa){ra=k[ma>>2]|0;xa=k[na>>2]|0;za=k[oa>>2]|0;P=1.0-c;if(!b){L=k[pa>>2]|0;Ca=0;while(1){Ma=ra+(Ca<<3)|0;S=+p[Ma>>3];Aa=xa+(Ca<<3)|0;N=+p[Aa>>3];Va=za+(Ca<<3)|0;T=+p[Va>>3];U=S*c+N+T*0.0;Da=S*0.0+N*0.0+T;p[Ma>>3]=1.0-U-Da;p[Aa>>3]=U;p[Va>>3]=Da;Va=L+(Ca<<3)|0;p[Va>>3]=P*+p[Va>>3];Ca=Ca+1|0;if((Ca|0)>=(F|0))break g}}else Wa=0;h:while(1){Ca=ra+(Wa<<3)|0;Da=+p[Ca>>3];L=xa+(Wa<<3)|0;U=+p[L>>3];ta=za+(Wa<<3)|0;T=+p[ta>>3];N=Da*c+U+T*0.0;S=Da*0.0+U*0.0+T;switch(b|0){case 2:{p[Ca>>3]=N;p[L>>3]=S;Ya=1.0-N-S;break}case 1:{p[Ca>>3]=S;p[L>>3]=1.0-N-S;Ya=N;break}default:break h}p[ta>>3]=Ya;ta=(k[pa>>2]|0)+(Wa<<3)|0;p[ta>>3]=P*+p[ta>>3];Wa=Wa+1|0;if((Wa|0)>=(F|0))break g}za=v+56|0;xa=v+4|0;k[v>>2]=27524;k[za>>2]=27544;B=0;wa(508,v+56|0,xa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Za=Q;_a=ra}else{k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[za>>2]=27488;B=0;va(448,xa|0);ra=B;B=0;do if(ra&1){ta=Rb()|0;$a=Q;ab=ta}else{k[xa>>2]=27560;ta=v+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[v+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,xa|0,h|0);L=B;B=0;if(L&1){L=Rb()|0;Ca=Q;Yua(h);Yua(ta);Ava(xa);$a=Ca;ab=L;break}Yua(h);B=0;L=Ia(40,v|0,139246,6)|0;Ca=B;B=0;i:do if(((!(Ca&1)?(B=0,Va=Xa(242,L|0,b|0)|0,Aa=B,B=0,!(Aa&1)):0)?(B=0,Aa=Ia(40,Va|0,146481,18)|0,Va=B,B=0,!(Va&1)):0)?(B=0,Xa(239,Aa|0,0)|0,Aa=B,B=0,!(Aa&1)):0){Aa=Ab(20)|0;B=0;eb(502,w|0,138496,74);Va=B;B=0;do if(!(Va&1)){B=0;eb(502,x|0,138571,9);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;bb=Q;Yua(w);cb=Ma;db=bb;break}B=0;wa(510,y|0,xa|0);bb=B;B=0;if(bb&1){bb=Rb()|0;fb=1;gb=Q;hb=bb}else{B=0;ua(163,Aa|0,w|0,x|0,253,y|0);bb=B;B=0;if(bb&1)ib=1;else{B=0;eb(503,Aa|0,1240,229);B=0;ib=0}bb=Rb()|0;Ma=Q;Yua(y);fb=ib;gb=Ma;hb=bb}Yua(x);Yua(w);if(fb){cb=hb;db=gb}else{jb=gb;kb=hb;break i}}else{bb=Rb()|0;cb=bb;db=Q}while(0);zb(Aa|0);jb=db;kb=cb}else G=101;while(0);if((G|0)==101){L=Rb()|0;jb=Q;kb=L}k[v>>2]=27468;k[za>>2]=27488;k[xa>>2]=27560;Yua(ta);Ava(xa);vva(za);ha=jb;ia=kb;Qb(ia|0)}while(0);Za=$a;_a=ab}vva(za);ja=Za;ka=_a;break a}while(0);la=qa+F|0;k[a+16>>2]=la;xa=la>>>0>536870911?-1:la<<3;B=0;la=ya(422,xa|0)|0;ra=B;B=0;if(((!(ra&1)?(k[a+24>>2]=la,B=0,ra=ya(422,xa|0)|0,L=B,B=0,!(L&1)):0)?(k[a+28>>2]=ra,B=0,L=ya(422,xa|0)|0,Ca=B,B=0,!(Ca&1)):0)?(k[a+32>>2]=L,B=0,Ca=ya(422,xa|0)|0,xa=B,B=0,!(xa&1)):0){k[a+20>>2]=Ca;if(C){xa=k[z>>2]|0;A=k[R>>2]|0;Va=k[D>>2]|0;Ba=k[M>>2]|0;bb=0;do{p[la+(bb<<3)>>3]=+p[xa+(bb<<3)>>3];p[ra+(bb<<3)>>3]=+p[A+(bb<<3)>>3];p[L+(bb<<3)>>3]=+p[Va+(bb<<3)>>3];p[Ca+(bb<<3)>>3]=+p[Ba+(bb<<3)>>3];bb=bb+1|0}while((bb|0)<(qa|0))}if(sa){bb=k[ma>>2]|0;Ba=k[na>>2]|0;Va=k[oa>>2]|0;A=k[pa>>2]|0;xa=0;do{M=qa+xa|0;p[la+(M<<3)>>3]=+p[bb+(xa<<3)>>3];p[ra+(M<<3)>>3]=+p[Ba+(xa<<3)>>3];p[L+(M<<3)>>3]=+p[Va+(xa<<3)>>3];p[Ca+(M<<3)>>3]=+p[A+(xa<<3)>>3];xa=xa+1|0}while((xa|0)<(F|0))}Ec[k[(k[E>>2]|0)+4>>2]&1023](E);Ec[k[(k[O>>2]|0)+4>>2]&1023](O);H=a+8|0;p[H>>3]=-9999.0;I=a+40|0;p[I>>3]=-9999.0;J=a+48|0;p[J>>3]=-9999.0;K=a+56|0;p[K>>3]=-9999.0;r=g;return}else G=8}else G=8}else G=8}while(0);if((G|0)==8){G=Rb()|0;ja=Q;ka=G}ha=ja;ia=ka;Qb(ia|0)}function Ija(a){a=a|0;var b=0,c=0;k[a>>2]=40732;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function Jja(a){a=a|0;var b=0,c=0;k[a>>2]=40732;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=k[a+24>>2]|0;if(!b){Sqa(a);return}Tqa(b);Sqa(a);return}function Kja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0;b=r;r=r+3312|0;c=b+3300|0;d=b+3032|0;e=b+3288|0;f=b+2896|0;g=b+3276|0;h=b+2760|0;i=b+3264|0;j=b+2608|0;l=b+3252|0;m=b+2472|0;n=b+3240|0;o=b+2320|0;q=b+3228|0;s=b+2184|0;t=b+3216|0;u=b+2032|0;v=b+3204|0;w=b+1880|0;x=b+3192|0;y=b+1744|0;z=b+3180|0;A=b+1592|0;C=b+3168|0;D=b+1456|0;E=b+2744|0;F=b+1320|0;G=b+2456|0;H=b+1168|0;I=b+2168|0;J=b+1032|0;K=b+2016|0;L=b+880|0;M=b+1728|0;N=b+728|0;O=b+1304|0;P=b+592|0;R=b+1016|0;S=b+440|0;T=b+864|0;U=b+304|0;V=b+576|0;W=b+152|0;X=b+288|0;Y=b+16|0;Z=b;_=d+56|0;$=d+4|0;k[d>>2]=27524;k[_>>2]=27544;B=0;wa(508,d+56|0,$|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;ca=aa;vva(_);Qb(ca|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[_>>2]=27488;B=0;va(448,$|0);aa=B;B=0;do if(aa&1){da=Rb()|0;ea=Q;fa=da}else{k[$>>2]=27560;da=d+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$|0,c|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;Yua(c);Yua(da);Ava($);ea=ha;fa=ga;break}Yua(c);B=0;Ia(40,d|0,138644,11)|0;ga=B;B=0;do if(!(ga&1)?(B=0,wa(510,e|0,$|0),ha=B,B=0,!(ha&1)):0){B=0;ya(424,e|0)|0;ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(e);ja=ia;ka=ha;break}Yua(e);k[d>>2]=27468;k[_>>2]=27488;k[$>>2]=27560;Yua(da);Ava($);vva(_);ha=f+56|0;ia=f+4|0;k[f>>2]=27524;k[ha>>2]=27544;B=0;wa(508,f+56|0,ia|0);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;na=la;vva(ha);Qb(na|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[ha>>2]=27488;B=0;va(448,ia|0);la=B;B=0;do if(la&1){oa=Rb()|0;pa=Q;qa=oa}else{k[ia>>2]=27560;oa=f+36|0;k[oa>>2]=0;k[oa+4>>2]=0;k[oa+8>>2]=0;k[oa+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ia|0,c|0);ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;Yua(c);Yua(oa);Ava(ia);pa=sa;qa=ra;break}Yua(c);B=0;ra=Ia(40,f|0,139266,13)|0;sa=B;B=0;do if(((!(sa&1)?(ta=a+16|0,B=0,ua=Xa(242,ra|0,k[ta>>2]|0)|0,xa=B,B=0,!(xa&1)):0)?(B=0,Ia(40,ua|0,149177,1)|0,ua=B,B=0,!(ua&1)):0)?(B=0,wa(510,g|0,ia|0),ua=B,B=0,!(ua&1)):0){B=0;ya(424,g|0)|0;ua=B;B=0;if(ua&1){ua=Rb()|0;xa=Q;Yua(g);za=xa;Aa=ua;break}Yua(g);k[f>>2]=27468;k[ha>>2]=27488;k[ia>>2]=27560;Yua(oa);Ava(ia);vva(ha);ua=a+20|0;a:do if(!(k[ua>>2]|0)){xa=o+56|0;Ba=o+4|0;k[o>>2]=27524;k[xa>>2]=27544;B=0;wa(508,o+56|0,Ba|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Da=Q;Ea=Ca;vva(xa);Qb(Ea|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[xa>>2]=27488;B=0;va(448,Ba|0);Ca=B;B=0;do if(Ca&1){Fa=Rb()|0;Ga=Q;Ha=Fa}else{k[Ba>>2]=27560;Fa=o+36|0;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ba|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ka=Q;Yua(c);Yua(Fa);Ava(Ba);Ga=Ka;Ha=Ja;break}Yua(c);B=0;Ia(40,o|0,139295,15)|0;Ja=B;B=0;do if(!(Ja&1)){B=0;wa(510,q|0,Ba|0);Ka=B;B=0;if(Ka&1){La=92;break}B=0;ya(424,q|0)|0;Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ma=Q;Yua(q);Na=Ma;Oa=Ka;break}else{Yua(q);k[o>>2]=27468;k[xa>>2]=27488;k[Ba>>2]=27560;Yua(Fa);Ava(Ba);vva(xa);break a}}else La=92;while(0);if((La|0)==92){Ja=Rb()|0;Na=Q;Oa=Ja}k[o>>2]=27468;k[xa>>2]=27488;k[Ba>>2]=27560;Yua(Fa);Ava(Ba);vva(xa);Pa=Na;Qa=Oa;Qb(Qa|0)}while(0);Da=Ga;Ea=Ha;vva(xa);Qb(Ea|0)}else{Ba=h+56|0;Ca=h+4|0;k[h>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,h+56|0,Ca|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Ra=Q;Ta=Ja;vva(Ba);Qb(Ta|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);Ja=B;B=0;do if(Ja&1){Ka=Rb()|0;Ua=Q;Va=Ka}else{k[Ca>>2]=27560;Ka=h+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Wa=Q;Yua(c);Yua(Ka);Ava(Ca);Ua=Wa;Va=Ma;break}Yua(c);B=0;Ia(40,h|0,139280,14)|0;Ma=B;B=0;do if(Ma&1)La=54;else{B=0;wa(510,i|0,Ca|0);Wa=B;B=0;if(Wa&1){La=54;break}B=0;ya(424,i|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(i);Za=Ya;_a=Wa;break}Yua(i);k[h>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ka);Ava(Ca);vva(Ba);b:do if((k[ta>>2]|0)>0){Wa=j+56|0;Ya=j+4|0;$a=j+56|0;ab=j+128|0;bb=j+132|0;cb=j+36|0;db=j+52|0;eb=0;while(1){k[j>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,$a|0,Ya|0);fb=B;B=0;if(fb&1){La=61;break}k[ab>>2]=0;k[bb>>2]=-1;k[j>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Ya|0);fb=B;B=0;if(fb&1){La=62;break}k[Ya>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[db>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);fb=B;B=0;if(fb&1){La=60;break}Yua(c);B=0;fb=Ia(40,j|0,149175,1)|0;gb=B;B=0;if(gb&1){La=71;break}B=0;gb=Sa(1,fb|0,+(+p[(k[ua>>2]|0)+(eb<<3)>>3]))|0;fb=B;B=0;if(fb&1){La=71;break}B=0;Ia(40,gb|0,149177,1)|0;gb=B;B=0;if(gb&1){La=71;break}B=0;wa(510,l|0,Ya|0);gb=B;B=0;if(gb&1){La=71;break}B=0;ya(424,l|0)|0;gb=B;B=0;if(gb&1){La=72;break}Yua(l);k[j>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);eb=eb+1|0;if((eb|0)>=(k[ta>>2]|0))break b}if((La|0)==60){eb=Rb()|0;db=Q;Yua(c);Yua(cb);Ava(Ya);hb=db;ib=eb;La=63}else if((La|0)==61){eb=Rb()|0;jb=Q;kb=eb;vva(Wa);Qb(kb|0)}else if((La|0)==62){eb=Rb()|0;hb=Q;ib=eb;La=63}else if((La|0)==71){eb=Rb()|0;lb=Q;mb=eb;La=73}else if((La|0)==72){eb=Rb()|0;db=Q;Yua(l);lb=db;mb=eb;La=73}if((La|0)==63){jb=hb;kb=ib;vva(Wa);Qb(kb|0)}else if((La|0)==73){k[j>>2]=27468;k[Wa>>2]=27488;k[Ya>>2]=27560;Yua(cb);Ava(Ya);vva(Wa);Pa=lb;Qa=mb;Qb(Qa|0)}}while(0);eb=m+56|0;db=m+4|0;k[m>>2]=27524;k[eb>>2]=27544;B=0;wa(508,m+56|0,db|0);bb=B;B=0;if(bb&1){bb=Rb()|0;nb=Q;ob=bb;vva(eb);Qb(ob|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[eb>>2]=27488;B=0;va(448,db|0);bb=B;B=0;do if(bb&1){ab=Rb()|0;pb=Q;qb=ab}else{k[db>>2]=27560;ab=m+36|0;k[ab>>2]=0;k[ab+4>>2]=0;k[ab+8>>2]=0;k[ab+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);$a=B;B=0;if($a&1){$a=Rb()|0;gb=Q;Yua(c);Yua(ab);Ava(db);pb=gb;qb=$a;break}Yua(c);B=0;Ia(40,m|0,149198,2)|0;$a=B;B=0;do if(!($a&1)){B=0;wa(510,n|0,db|0);gb=B;B=0;if(gb&1){La=77;break}B=0;ya(424,n|0)|0;gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(n);rb=fb;sb=gb;break}else{Yua(n);k[m>>2]=27468;k[eb>>2]=27488;k[db>>2]=27560;Yua(ab);Ava(db);vva(eb);break a}}else La=77;while(0);if((La|0)==77){$a=Rb()|0;rb=Q;sb=$a}k[m>>2]=27468;k[eb>>2]=27488;k[db>>2]=27560;Yua(ab);Ava(db);vva(eb);Pa=rb;Qa=sb;Qb(Qa|0)}while(0);nb=pb;ob=qb;vva(eb);Qb(ob|0)}while(0);if((La|0)==54){Ma=Rb()|0;Za=Q;_a=Ma}k[h>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ka);Ava(Ca);vva(Ba);Pa=Za;Qa=_a;Qb(Qa|0)}while(0);Ra=Ua;Ta=Va;vva(Ba);Qb(Ta|0)}while(0);ua=a+24|0;c:do if(!(k[ua>>2]|0)){Ca=y+56|0;Ja=y+4|0;k[y>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,y+56|0,Ja|0);xa=B;B=0;if(xa&1){xa=Rb()|0;tb=Q;ub=xa;vva(Ca);Qb(ub|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Ca>>2]=27488;B=0;va(448,Ja|0);xa=B;B=0;do if(xa&1){Ma=Rb()|0;vb=Q;wb=Ma}else{k[Ja>>2]=27560;Ma=y+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;db=Q;Yua(c);Yua(Ma);Ava(Ja);vb=db;wb=Fa;break}Yua(c);B=0;Ia(40,y|0,139326,15)|0;Fa=B;B=0;do if(!(Fa&1)){B=0;wa(510,z|0,Ja|0);db=B;B=0;if(db&1){La=156;break}B=0;ya(424,z|0)|0;db=B;B=0;if(db&1){db=Rb()|0;bb=Q;Yua(z);xb=bb;yb=db;break}else{Yua(z);k[y>>2]=27468;k[Ca>>2]=27488;k[Ja>>2]=27560;Yua(Ma);Ava(Ja);vva(Ca);break c}}else La=156;while(0);if((La|0)==156){Fa=Rb()|0;xb=Q;yb=Fa}k[y>>2]=27468;k[Ca>>2]=27488;k[Ja>>2]=27560;Yua(Ma);Ava(Ja);vva(Ca);Pa=xb;Qa=yb;Qb(Qa|0)}while(0);tb=vb;ub=wb;vva(Ca);Qb(ub|0)}else{Ja=s+56|0;xa=s+4|0;k[s>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,s+56|0,xa|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;zb=Q;Ab=Ba;vva(Ja);Qb(Ab|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ja>>2]=27488;B=0;va(448,xa|0);Ba=B;B=0;do if(Ba&1){Fa=Rb()|0;Bb=Q;Cb=Fa}else{k[xa>>2]=27560;Fa=s+36|0;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,xa|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;db=Q;Yua(c);Yua(Fa);Ava(xa);Bb=db;Cb=Ka;break}Yua(c);B=0;Ia(40,s|0,139311,14)|0;Ka=B;B=0;do if(Ka&1)La=118;else{B=0;wa(510,t|0,xa|0);db=B;B=0;if(db&1){La=118;break}B=0;ya(424,t|0)|0;db=B;B=0;if(db&1){db=Rb()|0;bb=Q;Yua(t);Db=bb;Eb=db;break}Yua(t);k[s>>2]=27468;k[Ja>>2]=27488;k[xa>>2]=27560;Yua(Fa);Ava(xa);vva(Ja);d:do if((k[ta>>2]|0)>0){db=u+56|0;bb=u+4|0;$a=u+56|0;Wa=u+128|0;Ya=u+132|0;cb=u+36|0;gb=u+52|0;fb=0;while(1){k[u>>2]=27524;k[db>>2]=27544;B=0;wa(508,$a|0,bb|0);Fb=B;B=0;if(Fb&1){La=125;break}k[Wa>>2]=0;k[Ya>>2]=-1;k[u>>2]=27468;k[db>>2]=27488;B=0;va(448,bb|0);Fb=B;B=0;if(Fb&1){La=126;break}k[bb>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[gb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,bb|0,c|0);Fb=B;B=0;if(Fb&1){La=124;break}Yua(c);B=0;Fb=Ia(40,u|0,149175,1)|0;Gb=B;B=0;if(Gb&1){La=135;break}B=0;Gb=Sa(1,Fb|0,+(+p[(k[ua>>2]|0)+(fb<<3)>>3]))|0;Fb=B;B=0;if(Fb&1){La=135;break}B=0;Ia(40,Gb|0,149177,1)|0;Gb=B;B=0;if(Gb&1){La=135;break}B=0;wa(510,v|0,bb|0);Gb=B;B=0;if(Gb&1){La=135;break}B=0;ya(424,v|0)|0;Gb=B;B=0;if(Gb&1){La=136;break}Yua(v);k[u>>2]=27468;k[db>>2]=27488;k[bb>>2]=27560;Yua(cb);Ava(bb);vva(db);fb=fb+1|0;if((fb|0)>=(k[ta>>2]|0))break d}if((La|0)==124){fb=Rb()|0;gb=Q;Yua(c);Yua(cb);Ava(bb);Hb=gb;Ib=fb;La=127}else if((La|0)==125){fb=Rb()|0;Jb=Q;Kb=fb;vva(db);Qb(Kb|0)}else if((La|0)==126){fb=Rb()|0;Hb=Q;Ib=fb;La=127}else if((La|0)==135){fb=Rb()|0;Lb=Q;Mb=fb;La=137}else if((La|0)==136){fb=Rb()|0;gb=Q;Yua(v);Lb=gb;Mb=fb;La=137}if((La|0)==127){Jb=Hb;Kb=Ib;vva(db);Qb(Kb|0)}else if((La|0)==137){k[u>>2]=27468;k[db>>2]=27488;k[bb>>2]=27560;Yua(cb);Ava(bb);vva(db);Pa=Lb;Qa=Mb;Qb(Qa|0)}}while(0);eb=w+56|0;fb=w+4|0;k[w>>2]=27524;k[eb>>2]=27544;B=0;wa(508,w+56|0,fb|0);gb=B;B=0;if(gb&1){gb=Rb()|0;Nb=Q;Ob=gb;vva(eb);Qb(Ob|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[eb>>2]=27488;B=0;va(448,fb|0);gb=B;B=0;do if(gb&1){Ya=Rb()|0;Pb=Q;Sb=Ya}else{k[fb>>2]=27560;Ya=w+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fb|0,c|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;$a=Q;Yua(c);Yua(Ya);Ava(fb);Pb=$a;Sb=Wa;break}Yua(c);B=0;Ia(40,w|0,149198,2)|0;Wa=B;B=0;do if(!(Wa&1)){B=0;wa(510,x|0,fb|0);$a=B;B=0;if($a&1){La=141;break}B=0;ya(424,x|0)|0;$a=B;B=0;if($a&1){$a=Rb()|0;ab=Q;Yua(x);Tb=ab;Ub=$a;break}else{Yua(x);k[w>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(Ya);Ava(fb);vva(eb);break c}}else La=141;while(0);if((La|0)==141){Wa=Rb()|0;Tb=Q;Ub=Wa}k[w>>2]=27468;k[eb>>2]=27488;k[fb>>2]=27560;Yua(Ya);Ava(fb);vva(eb);Pa=Tb;Qa=Ub;Qb(Qa|0)}while(0);Nb=Pb;Ob=Sb;vva(eb);Qb(Ob|0)}while(0);if((La|0)==118){Ka=Rb()|0;Db=Q;Eb=Ka}k[s>>2]=27468;k[Ja>>2]=27488;k[xa>>2]=27560;Yua(Fa);Ava(xa);vva(Ja);Pa=Db;Qa=Eb;Qb(Qa|0)}while(0);zb=Bb;Ab=Cb;vva(Ja);Qb(Ab|0)}while(0);ua=a+28|0;e:do if(!(k[ua>>2]|0)){xa=H+56|0;Ba=H+4|0;k[H>>2]=27524;k[xa>>2]=27544;B=0;wa(508,H+56|0,Ba|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Vb=Q;Wb=Ca;vva(xa);Qb(Wb|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[xa>>2]=27488;B=0;va(448,Ba|0);Ca=B;B=0;do if(Ca&1){Ka=Rb()|0;Xb=Q;Yb=Ka}else{k[Ba>>2]=27560;Ka=H+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[H+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ba|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;fb=Q;Yua(c);Yua(Ka);Ava(Ba);Xb=fb;Yb=Ma;break}Yua(c);B=0;Ia(40,H|0,139357,15)|0;Ma=B;B=0;do if(!(Ma&1)){B=0;wa(510,I|0,Ba|0);fb=B;B=0;if(fb&1){La=220;break}B=0;ya(424,I|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(I);Zb=gb;_b=fb;break}else{Yua(I);k[H>>2]=27468;k[xa>>2]=27488;k[Ba>>2]=27560;Yua(Ka);Ava(Ba);vva(xa);break e}}else La=220;while(0);if((La|0)==220){Ma=Rb()|0;Zb=Q;_b=Ma}k[H>>2]=27468;k[xa>>2]=27488;k[Ba>>2]=27560;Yua(Ka);Ava(Ba);vva(xa);Pa=Zb;Qa=_b;Qb(Qa|0)}while(0);Vb=Xb;Wb=Yb;vva(xa);Qb(Wb|0)}else{Ba=A+56|0;Ca=A+4|0;k[A>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,A+56|0,Ca|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;$b=Q;ac=Ja;vva(Ba);Qb(ac|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);Ja=B;B=0;do if(Ja&1){Ma=Rb()|0;bc=Q;cc=Ma}else{k[Ca>>2]=27560;Ma=A+36|0;k[Ma>>2]=0;k[Ma+4>>2]=0;k[Ma+8>>2]=0;k[Ma+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ca|0,c|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;fb=Q;Yua(c);Yua(Ma);Ava(Ca);bc=fb;cc=Fa;break}Yua(c);B=0;Ia(40,A|0,139342,14)|0;Fa=B;B=0;do if(Fa&1)La=182;else{B=0;wa(510,C|0,Ca|0);fb=B;B=0;if(fb&1){La=182;break}B=0;ya(424,C|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(C);dc=gb;ec=fb;break}Yua(C);k[A>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ma);Ava(Ca);vva(Ba);f:do if((k[ta>>2]|0)>0){fb=D+56|0;gb=D+4|0;Wa=D+56|0;db=D+128|0;bb=D+132|0;cb=D+36|0;$a=D+52|0;ab=0;while(1){k[D>>2]=27524;k[fb>>2]=27544;B=0;wa(508,Wa|0,gb|0);Gb=B;B=0;if(Gb&1){La=189;break}k[db>>2]=0;k[bb>>2]=-1;k[D>>2]=27468;k[fb>>2]=27488;B=0;va(448,gb|0);Gb=B;B=0;if(Gb&1){La=190;break}k[gb>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[$a>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);Gb=B;B=0;if(Gb&1){La=188;break}Yua(c);B=0;Gb=Ia(40,D|0,149175,1)|0;Fb=B;B=0;if(Fb&1){La=199;break}B=0;Fb=Sa(1,Gb|0,+(+p[(k[ua>>2]|0)+(ab<<3)>>3]))|0;Gb=B;B=0;if(Gb&1){La=199;break}B=0;Ia(40,Fb|0,149177,1)|0;Fb=B;B=0;if(Fb&1){La=199;break}B=0;wa(510,E|0,gb|0);Fb=B;B=0;if(Fb&1){La=199;break}B=0;ya(424,E|0)|0;Fb=B;B=0;if(Fb&1){La=200;break}Yua(E);k[D>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(cb);Ava(gb);vva(fb);ab=ab+1|0;if((ab|0)>=(k[ta>>2]|0))break f}if((La|0)==188){ab=Rb()|0;$a=Q;Yua(c);Yua(cb);Ava(gb);fc=$a;gc=ab;La=191}else if((La|0)==189){ab=Rb()|0;hc=Q;ic=ab;vva(fb);Qb(ic|0)}else if((La|0)==190){ab=Rb()|0;fc=Q;gc=ab;La=191}else if((La|0)==199){ab=Rb()|0;jc=Q;kc=ab;La=201}else if((La|0)==200){ab=Rb()|0;$a=Q;Yua(E);jc=$a;kc=ab;La=201}if((La|0)==191){hc=fc;ic=gc;vva(fb);Qb(ic|0)}else if((La|0)==201){k[D>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(cb);Ava(gb);vva(fb);Pa=jc;Qa=kc;Qb(Qa|0)}}while(0);eb=F+56|0;ab=F+4|0;k[F>>2]=27524;k[eb>>2]=27544;B=0;wa(508,F+56|0,ab|0);$a=B;B=0;if($a&1){$a=Rb()|0;lc=Q;mc=$a;vva(eb);Qb(mc|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[eb>>2]=27488;B=0;va(448,ab|0);$a=B;B=0;do if($a&1){bb=Rb()|0;nc=Q;oc=bb}else{k[ab>>2]=27560;bb=F+36|0;k[bb>>2]=0;k[bb+4>>2]=0;k[bb+8>>2]=0;k[bb+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ab|0,c|0);db=B;B=0;if(db&1){db=Rb()|0;Wa=Q;Yua(c);Yua(bb);Ava(ab);nc=Wa;oc=db;break}Yua(c);B=0;Ia(40,F|0,149198,2)|0;db=B;B=0;do if(!(db&1)){B=0;wa(510,G|0,ab|0);Wa=B;B=0;if(Wa&1){La=205;break}B=0;ya(424,G|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Ya=Q;Yua(G);pc=Ya;qc=Wa;break}else{Yua(G);k[F>>2]=27468;k[eb>>2]=27488;k[ab>>2]=27560;Yua(bb);Ava(ab);vva(eb);break e}}else La=205;while(0);if((La|0)==205){db=Rb()|0;pc=Q;qc=db}k[F>>2]=27468;k[eb>>2]=27488;k[ab>>2]=27560;Yua(bb);Ava(ab);vva(eb);Pa=pc;Qa=qc;Qb(Qa|0)}while(0);lc=nc;mc=oc;vva(eb);Qb(mc|0)}while(0);if((La|0)==182){Fa=Rb()|0;dc=Q;ec=Fa}k[A>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Ma);Ava(Ca);vva(Ba);Pa=dc;Qa=ec;Qb(Qa|0)}while(0);$b=bc;ac=cc;vva(Ba);Qb(ac|0)}while(0);ua=a+32|0;g:do if(!(k[ua>>2]|0)){Ca=P+56|0;Ja=P+4|0;k[P>>2]=27524;k[Ca>>2]=27544;B=0;wa(508,P+56|0,Ja|0);xa=B;B=0;if(xa&1){xa=Rb()|0;rc=Q;sc=xa;vva(Ca);Qb(sc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Ca>>2]=27488;B=0;va(448,Ja|0);xa=B;B=0;do if(xa&1){Fa=Rb()|0;tc=Q;uc=Fa}else{k[Ja>>2]=27560;Fa=P+36|0;k[Fa>>2]=0;k[Fa+4>>2]=0;k[Fa+8>>2]=0;k[Fa+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;ab=Q;Yua(c);Yua(Fa);Ava(Ja);tc=ab;uc=Ka;break}Yua(c);B=0;Ia(40,P|0,139388,15)|0;Ka=B;B=0;do if(!(Ka&1)){B=0;wa(510,R|0,Ja|0);ab=B;B=0;if(ab&1){La=284;break}B=0;ya(424,R|0)|0;ab=B;B=0;if(ab&1){ab=Rb()|0;$a=Q;Yua(R);vc=$a;wc=ab;break}else{Yua(R);k[P>>2]=27468;k[Ca>>2]=27488;k[Ja>>2]=27560;Yua(Fa);Ava(Ja);vva(Ca);break g}}else La=284;while(0);if((La|0)==284){Ka=Rb()|0;vc=Q;wc=Ka}k[P>>2]=27468;k[Ca>>2]=27488;k[Ja>>2]=27560;Yua(Fa);Ava(Ja);vva(Ca);Pa=vc;Qa=wc;Qb(Qa|0)}while(0);rc=tc;sc=uc;vva(Ca);Qb(sc|0)}else{Ja=J+56|0;xa=J+4|0;k[J>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,J+56|0,xa|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;xc=Q;yc=Ba;vva(Ja);Qb(yc|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[Ja>>2]=27488;B=0;va(448,xa|0);Ba=B;B=0;do if(Ba&1){Ka=Rb()|0;zc=Q;Ac=Ka}else{k[xa>>2]=27560;Ka=J+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,xa|0,c|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;ab=Q;Yua(c);Yua(Ka);Ava(xa);zc=ab;Ac=Ma;break}Yua(c);B=0;Ia(40,J|0,139373,14)|0;Ma=B;B=0;do if(Ma&1)La=246;else{B=0;wa(510,K|0,xa|0);ab=B;B=0;if(ab&1){La=246;break}B=0;ya(424,K|0)|0;ab=B;B=0;if(ab&1){ab=Rb()|0;$a=Q;Yua(K);Bc=$a;Cc=ab;break}Yua(K);k[J>>2]=27468;k[Ja>>2]=27488;k[xa>>2]=27560;Yua(Ka);Ava(xa);vva(Ja);h:do if((k[ta>>2]|0)>0){ab=L+56|0;$a=L+4|0;db=L+56|0;fb=L+128|0;gb=L+132|0;cb=L+36|0;Wa=L+52|0;Ya=0;while(1){k[L>>2]=27524;k[ab>>2]=27544;B=0;wa(508,db|0,$a|0);Fb=B;B=0;if(Fb&1){La=253;break}k[fb>>2]=0;k[gb>>2]=-1;k[L>>2]=27468;k[ab>>2]=27488;B=0;va(448,$a|0);Fb=B;B=0;if(Fb&1){La=254;break}k[$a>>2]=27560;k[cb>>2]=0;k[cb+4>>2]=0;k[cb+8>>2]=0;k[cb+12>>2]=0;k[Wa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$a|0,c|0);Fb=B;B=0;if(Fb&1){La=252;break}Yua(c);B=0;Fb=Ia(40,L|0,149175,1)|0;Gb=B;B=0;if(Gb&1){La=263;break}B=0;Gb=Sa(1,Fb|0,+(+p[(k[ua>>2]|0)+(Ya<<3)>>3]))|0;Fb=B;B=0;if(Fb&1){La=263;break}B=0;Ia(40,Gb|0,149177,1)|0;Gb=B;B=0;if(Gb&1){La=263;break}B=0;wa(510,M|0,$a|0);Gb=B;B=0;if(Gb&1){La=263;break}B=0;ya(424,M|0)|0;Gb=B;B=0;if(Gb&1){La=264;break}Yua(M);k[L>>2]=27468;k[ab>>2]=27488;k[$a>>2]=27560;Yua(cb);Ava($a);vva(ab);Ya=Ya+1|0;if((Ya|0)>=(k[ta>>2]|0))break h}if((La|0)==252){Ya=Rb()|0;Wa=Q;Yua(c);Yua(cb);Ava($a);Dc=Wa;Ec=Ya;La=255}else if((La|0)==253){Ya=Rb()|0;Fc=Q;Gc=Ya;vva(ab);Qb(Gc|0)}else if((La|0)==254){Ya=Rb()|0;Dc=Q;Ec=Ya;La=255}else if((La|0)==263){Ya=Rb()|0;Hc=Q;Ic=Ya;La=265}else if((La|0)==264){Ya=Rb()|0;Wa=Q;Yua(M);Hc=Wa;Ic=Ya;La=265}if((La|0)==255){Fc=Dc;Gc=Ec;vva(ab);Qb(Gc|0)}else if((La|0)==265){k[L>>2]=27468;k[ab>>2]=27488;k[$a>>2]=27560;Yua(cb);Ava($a);vva(ab);Pa=Hc;Qa=Ic;Qb(Qa|0)}}while(0);eb=N+56|0;Ya=N+4|0;k[N>>2]=27524;k[eb>>2]=27544;B=0;wa(508,N+56|0,Ya|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Jc=Q;Kc=Wa;vva(eb);Qb(Kc|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[eb>>2]=27488;B=0;va(448,Ya|0);Wa=B;B=0;do if(Wa&1){gb=Rb()|0;Lc=Q;Mc=gb}else{k[Ya>>2]=27560;gb=N+36|0;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;db=Q;Yua(c);Yua(gb);Ava(Ya);Lc=db;Mc=fb;break}Yua(c);B=0;Ia(40,N|0,149198,2)|0;fb=B;B=0;do if(!(fb&1)){B=0;wa(510,O|0,Ya|0);db=B;B=0;if(db&1){La=269;break}B=0;ya(424,O|0)|0;db=B;B=0;if(db&1){db=Rb()|0;bb=Q;Yua(O);Nc=bb;Oc=db;break}else{Yua(O);k[N>>2]=27468;k[eb>>2]=27488;k[Ya>>2]=27560;Yua(gb);Ava(Ya);vva(eb);break g}}else La=269;while(0);if((La|0)==269){fb=Rb()|0;Nc=Q;Oc=fb}k[N>>2]=27468;k[eb>>2]=27488;k[Ya>>2]=27560;Yua(gb);Ava(Ya);vva(eb);Pa=Nc;Qa=Oc;Qb(Qa|0)}while(0);Jc=Lc;Kc=Mc;vva(eb);Qb(Kc|0)}while(0);if((La|0)==246){Ma=Rb()|0;Bc=Q;Cc=Ma}k[J>>2]=27468;k[Ja>>2]=27488;k[xa>>2]=27560;Yua(Ka);Ava(xa);vva(Ja);Pa=Bc;Qa=Cc;Qb(Qa|0)}while(0);xc=zc;yc=Ac;vva(Ja);Qb(yc|0)}while(0);ta=S+56|0;ua=S+4|0;k[S>>2]=27524;k[ta>>2]=27544;B=0;wa(508,S+56|0,ua|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Pc=Q;Qc=xa;vva(ta);Qb(Qc|0)}k[S+128>>2]=0;k[S+132>>2]=-1;k[S>>2]=27468;k[ta>>2]=27488;B=0;va(448,ua|0);xa=B;B=0;do if(xa&1){Ba=Rb()|0;Rc=Q;Sc=Ba}else{k[ua>>2]=27560;Ba=S+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[S+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ua|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ma=Q;Yua(c);Yua(Ba);Ava(ua);Rc=Ma;Sc=Ca;break}Yua(c);B=0;Ca=Ia(40,S|0,139435,12)|0;Ma=B;B=0;do if(Ma&1)La=340;else{B=0;Fa=Sa(1,Ca|0,+(+p[a+8>>3]))|0;Ya=B;B=0;if(Ya&1){La=340;break}B=0;Ia(40,Fa|0,149177,1)|0;Fa=B;B=0;if(Fa&1){La=340;break}B=0;wa(510,T|0,ua|0);Fa=B;B=0;if(Fa&1){La=340;break}B=0;ya(424,T|0)|0;Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ya=Q;Yua(T);Tc=Ya;Uc=Fa;break}Yua(T);k[S>>2]=27468;k[ta>>2]=27488;k[ua>>2]=27560;Yua(Ba);Ava(ua);vva(ta);Fa=U+56|0;Ya=U+4|0;k[U>>2]=27524;k[Fa>>2]=27544;B=0;wa(508,U+56|0,Ya|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Vc=Q;Wc=Wa;vva(Fa);Qb(Wc|0)}k[U+128>>2]=0;k[U+132>>2]=-1;k[U>>2]=27468;k[Fa>>2]=27488;B=0;va(448,Ya|0);Wa=B;B=0;do if(Wa&1){fb=Rb()|0;Xc=Q;Yc=fb}else{k[Ya>>2]=27560;fb=U+36|0;k[fb>>2]=0;k[fb+4>>2]=0;k[fb+8>>2]=0;k[fb+12>>2]=0;k[U+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);ab=B;B=0;if(ab&1){ab=Rb()|0;$a=Q;Yua(c);Yua(fb);Ava(Ya);Xc=$a;Yc=ab;break}Yua(c);B=0;ab=Ia(40,U|0,139448,12)|0;$a=B;B=0;do if($a&1)La=343;else{B=0;cb=Sa(1,ab|0,+(+p[a+40>>3]))|0;db=B;B=0;if(db&1){La=343;break}B=0;Ia(40,cb|0,149177,1)|0;cb=B;B=0;if(cb&1){La=343;break}B=0;wa(510,V|0,Ya|0);cb=B;B=0;if(cb&1){La=343;break}B=0;ya(424,V|0)|0;cb=B;B=0;if(cb&1){cb=Rb()|0;db=Q;Yua(V);Zc=db;_c=cb;break}Yua(V);k[U>>2]=27468;k[Fa>>2]=27488;k[Ya>>2]=27560;Yua(fb);Ava(Ya);vva(Fa);cb=W+56|0;db=W+4|0;k[W>>2]=27524;k[cb>>2]=27544;B=0;wa(508,W+56|0,db|0);bb=B;B=0;if(bb&1){bb=Rb()|0;$c=Q;ad=bb;vva(cb);Qb(ad|0)}k[W+128>>2]=0;k[W+132>>2]=-1;k[W>>2]=27468;k[cb>>2]=27488;B=0;va(448,db|0);bb=B;B=0;do if(bb&1){Gb=Rb()|0;bd=Q;cd=Gb}else{k[db>>2]=27560;Gb=W+36|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[W+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);Fb=B;B=0;if(Fb&1){Fb=Rb()|0;dd=Q;Yua(c);Yua(Gb);Ava(db);bd=dd;cd=Fb;break}Yua(c);B=0;Fb=Ia(40,W|0,139461,12)|0;dd=B;B=0;do if(dd&1)La=346;else{B=0;ed=Sa(1,Fb|0,+(+p[a+48>>3]))|0;fd=B;B=0;if(fd&1){La=346;break}B=0;Ia(40,ed|0,149177,1)|0;ed=B;B=0;if(ed&1){La=346;break}B=0;wa(510,X|0,db|0);ed=B;B=0;if(ed&1){La=346;break}B=0;ya(424,X|0)|0;ed=B;B=0;if(ed&1){ed=Rb()|0;fd=Q;Yua(X);gd=fd;hd=ed;break}Yua(X);k[W>>2]=27468;k[cb>>2]=27488;k[db>>2]=27560;Yua(Gb);Ava(db);vva(cb);ed=Y+56|0;fd=Y+4|0;k[Y>>2]=27524;k[ed>>2]=27544;B=0;wa(508,Y+56|0,fd|0);id=B;B=0;if(id&1){id=Rb()|0;jd=Q;kd=id;vva(ed);Qb(kd|0)}k[Y+128>>2]=0;k[Y+132>>2]=-1;k[Y>>2]=27468;k[ed>>2]=27488;B=0;va(448,fd|0);id=B;B=0;do if(id&1){ld=Rb()|0;md=Q;nd=ld}else{k[fd>>2]=27560;ld=Y+36|0;k[ld>>2]=0;k[ld+4>>2]=0;k[ld+8>>2]=0;k[ld+12>>2]=0;k[Y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fd|0,c|0);od=B;B=0;if(od&1){od=Rb()|0;pd=Q;Yua(c);Yua(ld);Ava(fd);md=pd;nd=od;break}Yua(c);B=0;od=Ia(40,Y|0,139474,12)|0;pd=B;B=0;do if(!(pd&1)){B=0;qd=Sa(1,od|0,+(+p[a+56>>3]))|0;rd=B;B=0;if(rd&1){La=349;break}B=0;Ia(40,qd|0,149177,1)|0;qd=B;B=0;if(qd&1){La=349;break}B=0;wa(510,Z|0,fd|0);qd=B;B=0;if(qd&1){La=349;break}B=0;ya(424,Z|0)|0;qd=B;B=0;if(qd&1){qd=Rb()|0;rd=Q;Yua(Z);sd=rd;td=qd;break}else{Yua(Z);k[Y>>2]=27468;k[ed>>2]=27488;k[fd>>2]=27560;Yua(ld);Ava(fd);vva(ed);r=b;return}}else La=349;while(0);if((La|0)==349){od=Rb()|0;sd=Q;td=od}k[Y>>2]=27468;k[ed>>2]=27488;k[fd>>2]=27560;Yua(ld);Ava(fd);vva(ed);Pa=sd;Qa=td;Qb(Qa|0)}while(0);jd=md;kd=nd;vva(ed);Qb(kd|0)}while(0);if((La|0)==346){Fb=Rb()|0;gd=Q;hd=Fb}k[W>>2]=27468;k[cb>>2]=27488;k[db>>2]=27560;Yua(Gb);Ava(db);vva(cb);Pa=gd;Qa=hd;Qb(Qa|0)}while(0);$c=bd;ad=cd;vva(cb);Qb(ad|0)}while(0);if((La|0)==343){ab=Rb()|0;Zc=Q;_c=ab}k[U>>2]=27468;k[Fa>>2]=27488;k[Ya>>2]=27560;Yua(fb);Ava(Ya);vva(Fa);Pa=Zc;Qa=_c;Qb(Qa|0)}while(0);Vc=Xc;Wc=Yc;vva(Fa);Qb(Wc|0)}while(0);if((La|0)==340){Ca=Rb()|0;Tc=Q;Uc=Ca}k[S>>2]=27468;k[ta>>2]=27488;k[ua>>2]=27560;Yua(Ba);Ava(ua);vva(ta);Pa=Tc;Qa=Uc;Qb(Qa|0)}while(0);Pc=Rc;Qc=Sc;vva(ta);Qb(Qc|0)}else La=51;while(0);if((La|0)==51){ra=Rb()|0;za=Q;Aa=ra}k[f>>2]=27468;k[ha>>2]=27488;k[ia>>2]=27560;Yua(oa);Ava(ia);vva(ha);Pa=za;Qa=Aa;Qb(Qa|0)}while(0);ma=pa;na=qa;vva(ha);Qb(na|0)}else La=48;while(0);if((La|0)==48){ga=Rb()|0;ja=Q;ka=ga}k[d>>2]=27468;k[_>>2]=27488;k[$>>2]=27560;Yua(da);Ava($);vva(_);Pa=ja;Qa=ka;Qb(Qa|0)}while(0);ba=ea;ca=fa;vva(_);Qb(ca|0)}function Lja(a){a=a|0;return 930}function Mja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=(b|0)>(c|0);l=j?b:c;m=j?c:b;b=(m|0)==0;if(b&(l|0)==1){p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;r=d;return}c=(l|0)==2;if(b&c){p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;r=d;return}if((m|0)==1&c){p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;r=d;return}d=f+56|0;a=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;n=Q;o=c;vva(d);Qb(o|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){b=Rb()|0;q=Q;s=b}else{k[a>>2]=27560;b=f+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;t=Q;Yua(e);Yua(b);Ava(a);q=t;s=j;break}Yua(e);B=0;j=Ia(40,f|0,138656,60)|0;t=B;B=0;if(((((!(t&1)?(B=0,t=Xa(242,j|0,m|0)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Ia(40,t|0,138717,5)|0,t=B,B=0,!(t&1)):0)?(B=0,t=Xa(242,j|0,l|0)|0,j=B,B=0,!(j&1)):0)?(B=0,j=Ia(40,t|0,141170,1)|0,t=B,B=0,!(t&1)):0)?(B=0,Xa(239,j|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,g|0,138496,74);t=B;B=0;do if(!(t&1)){B=0;eb(502,h|0,138723,15);u=B;B=0;if(u&1){u=Rb()|0;v=Q;Yua(g);w=u;x=v;break}B=0;wa(510,i|0,a|0);v=B;B=0;if(v&1){v=Rb()|0;y=v;z=Q;A=1}else{B=0;ua(163,j|0,g|0,h|0,366,i|0);v=B;B=0;if(v&1)C=1;else{B=0;eb(503,j|0,1240,229);B=0;C=0}v=Rb()|0;u=Q;Yua(i);y=v;z=u;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(d);Qb(D|0)}}else{u=Rb()|0;w=u;x=Q}while(0);zb(j|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(d);Qb(D|0)}t=Rb()|0;D=t;E=Q;k[f>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(b);Ava(a);vva(d);Qb(D|0)}while(0);n=q;o=s;vva(d);Qb(o|0)}function Nja(a,b){a=a|0;b=b|0;p[a+8>>3]=+p[(k[a+20>>2]|0)+(b<<3)>>3];p[a+40>>3]=+p[(k[a+24>>2]|0)+(b<<3)>>3];p[a+48>>3]=+p[(k[a+28>>2]|0)+(b<<3)>>3];p[a+56>>3]=+p[(k[a+32>>2]|0)+(b<<3)>>3];return}function Oja(a,b,c,d){a=a|0;b=+b;c=+c;d=d|0;var e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;e=+p[d>>3];f=+p[d+8>>3];g=+p[d+24>>3];h=+p[d+32>>3];i=+p[d+48>>3];j=+p[d+56>>3];k=(f*i+(e*h+(g*j-h*i)-f*g)-e*j)*.5;l=b-i;b=c-j;c=(l*(h-j)-(g-i)*b)/k;p[a+40>>3]=c;g=((e-i)*b-l*(f-j))/k;p[a+48>>3]=g;p[a+56>>3]=1.0-c-g;return}function Pja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{p[a+40>>3]=1.0;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;r=c;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;r=c;return}case 2:{b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+56>>3]=1.0;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;i=Q;j=b;vva(c);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);m=q;n=o;break}Yua(d);B=0;o=Ia(40,e|0,138739,31)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,138496,74);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,139532,11);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,o|0,f|0,g|0,419,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,o|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(o|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}}}function Qja(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0;d=r;r=r+1056|0;e=d+1040|0;f=d+856|0;g=d+1028|0;h=d+1016|0;i=d+1004|0;j=d+704|0;l=d+992|0;m=d+840|0;n=d+552|0;o=d+568|0;q=d+268|0;s=d+256|0;t=d+108|0;u=d+416|0;v=d+96|0;w=d+84|0;x=d+72|0;y=d+280|0;z=d+60|0;A=d+48|0;C=d+36|0;D=d+120|0;E=d+24|0;F=d+12|0;G=d;switch(b|0){case 736:{if(!c){p[a+40>>3]=.3333333333333333;p[a+48>>3]=.3333333333333333;p[a+56>>3]=.3333333333333333;r=d;return}H=f+56|0;I=f+4|0;k[f>>2]=27524;k[H>>2]=27544;B=0;wa(508,f+56|0,I|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;L=J;vva(H);Qb(L|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[H>>2]=27488;B=0;va(448,I|0);J=B;B=0;do if(J&1){M=Rb()|0;N=Q;O=M}else{k[I>>2]=27560;M=f+36|0;k[M>>2]=0;k[M+4>>2]=0;k[M+8>>2]=0;k[M+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,I|0,e|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(e);Yua(M);Ava(I);N=R;O=P;break}Yua(e);B=0;P=Ia(40,f|0,138771,22)|0;R=B;B=0;a:do if(!(R&1)?(B=0,Xa(239,P|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,g|0,138496,74);T=B;B=0;do if(!(T&1)){B=0;eb(502,h|0,139574,9);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(g);W=V;X=U;break}B=0;wa(510,i|0,I|0);U=B;B=0;if(U&1){U=Rb()|0;Y=Q;Z=U;_=1}else{B=0;ua(163,S|0,g|0,h|0,434,i|0);U=B;B=0;if(U&1)$=1;else{B=0;eb(503,S|0,1240,229);B=0;$=0}U=Rb()|0;V=Q;Yua(i);Y=V;Z=U;_=$}Yua(h);Yua(g);if(_){W=Y;X=Z}else{aa=Y;ba=Z;break a}}else{U=Rb()|0;W=Q;X=U}while(0);zb(S|0);aa=W;ba=X}else ca=19;while(0);if((ca|0)==19){P=Rb()|0;aa=Q;ba=P}k[f>>2]=27468;k[H>>2]=27488;k[I>>2]=27560;Yua(M);Ava(I);vva(H);da=aa;ea=ba;Qb(ea|0)}while(0);K=N;L=O;vva(H);Qb(L|0);break}case 739:case 738:{switch(c|0){case 0:{p[a+40>>3]=1.0;L=a+48|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;r=d;return}case 2:{L=a+40|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;p[a+56>>3]=1.0;r=d;return}default:{L=j+56|0;H=j+4|0;k[j>>2]=27524;k[L>>2]=27544;B=0;wa(508,j+56|0,H|0);O=B;B=0;if(O&1){O=Rb()|0;fa=Q;ga=O;vva(L);Qb(ga|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[L>>2]=27488;B=0;va(448,H|0);O=B;B=0;do if(O&1){N=Rb()|0;ha=Q;ia=N}else{k[H>>2]=27560;N=j+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,H|0,e|0);K=B;B=0;if(K&1){K=Rb()|0;ba=Q;Yua(e);Yua(N);Ava(H);ha=ba;ia=K;break}Yua(e);B=0;K=Ia(40,j|0,138794,29)|0;ba=B;B=0;b:do if(!(ba&1)?(B=0,Xa(239,K|0,0)|0,aa=B,B=0,!(aa&1)):0){aa=Ab(20)|0;B=0;eb(502,l|0,138496,74);I=B;B=0;do if(!(I&1)){B=0;eb(502,m|0,139574,9);f=B;B=0;if(f&1){f=Rb()|0;X=Q;Yua(l);ja=X;ka=f;break}B=0;wa(510,n|0,H|0);f=B;B=0;if(f&1){f=Rb()|0;la=1;ma=Q;na=f}else{B=0;ua(163,aa|0,l|0,m|0,442,n|0);f=B;B=0;if(f&1)oa=1;else{B=0;eb(503,aa|0,1240,229);B=0;oa=0}f=Rb()|0;X=Q;Yua(n);la=oa;ma=X;na=f}Yua(m);Yua(l);if(la){ja=ma;ka=na}else{pa=ma;qa=na;break b}}else{f=Rb()|0;ja=Q;ka=f}while(0);zb(aa|0);pa=ja;qa=ka}else ca=46;while(0);if((ca|0)==46){K=Rb()|0;pa=Q;qa=K}k[j>>2]=27468;k[L>>2]=27488;k[H>>2]=27560;Yua(N);Ava(H);vva(L);da=pa;ea=qa;Qb(ea|0)}while(0);fa=ha;ga=ia;vva(L);Qb(ga|0)}}break}case 741:case 740:{switch(c|0){case 0:{p[a+40>>3]=1.0;ga=a+48|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;r=d;return}case 2:{ga=a+40|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;p[a+56>>3]=1.0;r=d;return}case 3:{p[a+40>>3]=.3333333333333333;p[a+48>>3]=.3333333333333333;p[a+56>>3]=.3333333333333333;r=d;return}default:{ga=o+56|0;L=o+4|0;k[o>>2]=27524;k[ga>>2]=27544;B=0;wa(508,o+56|0,L|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ra=Q;sa=ia;vva(ga);Qb(sa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[ga>>2]=27488;B=0;va(448,L|0);ia=B;B=0;do if(ia&1){ha=Rb()|0;ta=Q;xa=ha}else{k[L>>2]=27560;ha=o+36|0;k[ha>>2]=0;k[ha+4>>2]=0;k[ha+8>>2]=0;k[ha+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,L|0,e|0);fa=B;B=0;if(fa&1){fa=Rb()|0;qa=Q;Yua(e);Yua(ha);Ava(L);ta=qa;xa=fa;break}Yua(e);B=0;fa=Ia(40,o|0,138988,29)|0;qa=B;B=0;c:do if(!(qa&1)?(B=0,Xa(239,fa|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,q|0,138496,74);H=B;B=0;do if(!(H&1)){B=0;eb(502,s|0,139574,9);j=B;B=0;if(j&1){j=Rb()|0;ka=Q;Yua(q);za=ka;Aa=j;break}B=0;wa(510,t|0,L|0);j=B;B=0;if(j&1){j=Rb()|0;Ba=1;Ca=Q;Da=j}else{B=0;ua(163,pa|0,q|0,s|0,451,t|0);j=B;B=0;if(j&1)Ea=1;else{B=0;eb(503,pa|0,1240,229);B=0;Ea=0}j=Rb()|0;ka=Q;Yua(t);Ba=Ea;Ca=ka;Da=j}Yua(s);Yua(q);if(Ba){za=Ca;Aa=Da}else{Fa=Ca;Ga=Da;break c}}else{j=Rb()|0;za=Q;Aa=j}while(0);zb(pa|0);Fa=za;Ga=Aa}else ca=74;while(0);if((ca|0)==74){fa=Rb()|0;Fa=Q;Ga=fa}k[o>>2]=27468;k[ga>>2]=27488;k[L>>2]=27560;Yua(ha);Ava(L);vva(ga);da=Fa;ea=Ga;Qb(ea|0)}while(0);ra=ta;sa=xa;vva(ga);Qb(sa|0)}}break}case 742:{switch(c|0){case 0:{p[a+40>>3]=1.0;sa=a+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;r=d;return}case 2:{sa=a+40|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+56>>3]=1.0;r=d;return}case 3:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;r=d;return}case 4:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;r=d;return}case 5:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;r=d;return}default:{sa=u+56|0;ga=u+4|0;k[u>>2]=27524;k[sa>>2]=27544;B=0;wa(508,u+56|0,ga|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Ha=Q;Ja=xa;vva(sa);Qb(Ja|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[sa>>2]=27488;B=0;va(448,ga|0);xa=B;B=0;do if(xa&1){ta=Rb()|0;Ka=Q;La=ta}else{k[ga>>2]=27560;ta=u+36|0;k[ta>>2]=0;k[ta+4>>2]=0;k[ta+8>>2]=0;k[ta+12>>2]=0;k[u+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,ga|0,e|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ga=Q;Yua(e);Yua(ta);Ava(ga);Ka=Ga;La=ra;break}Yua(e);B=0;ra=Ia(40,u|0,139544,29)|0;Ga=B;B=0;d:do if(!(Ga&1)?(B=0,Xa(239,ra|0,0)|0,Fa=B,B=0,!(Fa&1)):0){Fa=Ab(20)|0;B=0;eb(502,v|0,138496,74);L=B;B=0;do if(!(L&1)){B=0;eb(502,w|0,139574,9);o=B;B=0;if(o&1){o=Rb()|0;Aa=Q;Yua(v);Ma=Aa;Na=o;break}B=0;wa(510,x|0,ga|0);o=B;B=0;if(o&1){o=Rb()|0;Oa=Q;Pa=o;Qa=1}else{B=0;ua(163,Fa|0,v|0,w|0,462,x|0);o=B;B=0;if(o&1)Ra=1;else{B=0;eb(503,Fa|0,1240,229);B=0;Ra=0}o=Rb()|0;Aa=Q;Yua(x);Oa=Aa;Pa=o;Qa=Ra}Yua(w);Yua(v);if(Qa){Ma=Oa;Na=Pa}else{Sa=Oa;Ta=Pa;break d}}else{o=Rb()|0;Ma=Q;Na=o}while(0);zb(Fa|0);Sa=Ma;Ta=Na}else ca=104;while(0);if((ca|0)==104){ra=Rb()|0;Sa=Q;Ta=ra}k[u>>2]=27468;k[sa>>2]=27488;k[ga>>2]=27560;Yua(ta);Ava(ga);vva(sa);da=Sa;ea=Ta;Qb(ea|0)}while(0);Ha=Ka;Ja=La;vva(sa);Qb(Ja|0)}}break}case 744:case 743:{switch(c|0){case 0:{p[a+40>>3]=1.0;c=a+48|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;r=d;return}case 2:{c=a+40|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;p[a+56>>3]=1.0;r=d;return}case 3:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;r=d;return}case 4:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;r=d;return}case 5:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;r=d;return}case 6:{p[a+40>>3]=.3333333333333333;p[a+48>>3]=.3333333333333333;p[a+56>>3]=.3333333333333333;r=d;return}default:{d=y+56|0;a=y+4|0;k[y>>2]=27524;k[d>>2]=27544;B=0;wa(508,y+56|0,a|0);c=B;B=0;if(c&1){c=Rb()|0;Ua=Q;Va=c;vva(d);Qb(Va|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[d>>2]=27488;B=0;va(448,a|0);c=B;B=0;do if(c&1){Ja=Rb()|0;Wa=Q;Ya=Ja}else{k[a>>2]=27560;Ja=y+36|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;k[y+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);sa=B;B=0;if(sa&1){sa=Rb()|0;La=Q;Yua(e);Yua(Ja);Ava(a);Wa=La;Ya=sa;break}Yua(e);B=0;sa=Ia(40,y|0,139645,29)|0;La=B;B=0;e:do if(!(La&1)?(B=0,Xa(239,sa|0,0)|0,Ka=B,B=0,!(Ka&1)):0){Ka=Ab(20)|0;B=0;eb(502,z|0,138496,74);Ha=B;B=0;do if(!(Ha&1)){B=0;eb(502,A|0,139574,9);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Sa=Q;Yua(z);Za=Sa;_a=Ta;break}B=0;wa(510,C|0,a|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;$a=1;ab=Q;bb=Ta}else{B=0;ua(163,Ka|0,z|0,A|0,474,C|0);Ta=B;B=0;if(Ta&1)cb=1;else{B=0;eb(503,Ka|0,1240,229);B=0;cb=0}Ta=Rb()|0;Sa=Q;Yua(C);$a=cb;ab=Sa;bb=Ta}Yua(A);Yua(z);if($a){Za=ab;_a=bb}else{db=ab;fb=bb;break e}}else{Ta=Rb()|0;Za=Q;_a=Ta}while(0);zb(Ka|0);db=Za;fb=_a}else ca=135;while(0);if((ca|0)==135){sa=Rb()|0;db=Q;fb=sa}k[y>>2]=27468;k[d>>2]=27488;k[a>>2]=27560;Yua(Ja);Ava(a);vva(d);da=db;ea=fb;Qb(ea|0)}while(0);Ua=Wa;Va=Ya;vva(d);Qb(Va|0)}}break}default:{Va=D+56|0;d=D+4|0;k[D>>2]=27524;k[Va>>2]=27544;B=0;wa(508,D+56|0,d|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;gb=Q;hb=Ya;vva(Va);Qb(hb|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[Va>>2]=27488;B=0;va(448,d|0);Ya=B;B=0;do if(Ya&1){Wa=Rb()|0;ib=Q;jb=Wa}else{k[d>>2]=27560;Wa=D+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[D+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,d|0,e|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;fb=Q;Yua(e);Yua(Wa);Ava(d);ib=fb;jb=Ua;break}Yua(e);B=0;Ua=Ia(40,D|0,145867,15)|0;fb=B;B=0;f:do if((((!(fb&1)?(B=0,db=ya(427,b|0)|0,a=B,B=0,!(a&1)):0)?(a=Lta(db)|0,B=0,y=Ia(40,Ua|0,db|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,y|0,144645,14)|0,y=B,B=0,!(y&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,E|0,138496,74);y=B;B=0;do if(!(y&1)){B=0;eb(502,F|0,139574,9);db=B;B=0;if(db&1){db=Rb()|0;_a=Q;Yua(E);kb=_a;lb=db;break}B=0;wa(510,G|0,d|0);db=B;B=0;if(db&1){db=Rb()|0;mb=1;nb=Q;ob=db}else{B=0;ua(163,a|0,E|0,F|0,477,G|0);db=B;B=0;if(db&1)pb=1;else{B=0;eb(503,a|0,1240,229);B=0;pb=0}db=Rb()|0;_a=Q;Yua(G);mb=pb;nb=_a;ob=db}Yua(F);Yua(E);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break f}}else{db=Rb()|0;kb=Q;lb=db}while(0);zb(a|0);qb=kb;rb=lb}else ca=161;while(0);if((ca|0)==161){Ua=Rb()|0;qb=Q;rb=Ua}k[D>>2]=27468;k[Va>>2]=27488;k[d>>2]=27560;Yua(Wa);Ava(d);vva(Va);da=qb;ea=rb;Qb(ea|0)}while(0);gb=ib;hb=jb;vva(Va);Qb(hb|0)}}}function Rja(a){a=a|0;return 0}function Sja(a){a=a|0;return k[a+16>>2]|0}function Tja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138496,74);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,139078,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,510,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function Uja(a){a=a|0;var b=0;k[a>>2]=40780;k[a+16>>2]=-1;b=a+20|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;p[a+64>>3]=-9999.0;return}function Vja(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0,h=0.0,i=0.0;k[a>>2]=40780;c=a+16|0;d=a+20|0;Vna(c,a+24|0,a+28|0,a+32|0,a+36|0,d,b);b=k[c>>2]|0;c=(b|0)>0;if(c){e=k[d>>2]|0;f=0;g=0.0;while(1){h=g+ +p[e+(f<<3)>>3];f=f+1|0;if((f|0)>=(b|0)){i=h;break}else g=h}if(!(i!=1.0|c^1)){c=k[d>>2]|0;d=0;do{f=c+(d<<3)|0;p[f>>3]=+p[f>>3]/6.0;d=d+1|0}while((d|0)<(b|0))}}p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;return}function Wja(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;k[a>>2]=40780;m=(b|0)==0;n=(d|0)==2;do if(m&(c|0)==1&n){o=a+16|0;B=0;La(39,o|0,a+24|0,a+28|0,a+32|0,a+20|0,e|0);p=B;B=0;if(!(p&1)?(p=k[o>>2]|0,B=0,o=ya(422,(p>>>0>536870911?-1:p<<3)|0)|0,q=B,B=0,!(q&1)):0){k[a+36>>2]=o;if((p|0)<=0){r=f;return}WEa(o|0,0,((p|0)>1?p:1)<<3|0)|0;r=f;return}else s=6}else{p=(c|0)==3;if(m&p&(d|0)==1){o=a+16|0;B=0;La(39,o|0,a+24|0,a+28|0,a+36|0,a+20|0,e|0);q=B;B=0;if(q&1){s=6;break}q=k[o>>2]|0;B=0;o=ya(422,(q>>>0>536870911?-1:q<<3)|0)|0;t=B;B=0;if(t&1){s=6;break}k[a+32>>2]=o;if((q|0)<=0){r=f;return}WEa(o|0,0,((q|0)>1?q:1)<<3|0)|0;r=f;return}if((b|0)==1&p&n){p=a+16|0;B=0;La(39,p|0,a+28|0,a+32|0,a+36|0,a+20|0,e|0);q=B;B=0;if(q&1){s=6;break}q=k[p>>2]|0;B=0;p=ya(422,(q>>>0>536870911?-1:q<<3)|0)|0;o=B;B=0;if(o&1){s=6;break}k[a+24>>2]=p;if((q|0)<=0){r=f;return}WEa(p|0,0,((q|0)>1?q:1)<<3|0)|0;r=f;return}if(m&(c|0)==2&(d|0)==3){q=a+16|0;B=0;La(39,q|0,a+24|0,a+32|0,a+36|0,a+20|0,e|0);p=B;B=0;if(p&1){s=6;break}p=k[q>>2]|0;B=0;q=ya(422,(p>>>0>536870911?-1:p<<3)|0)|0;o=B;B=0;if(o&1){s=6;break}k[a+28>>2]=q;if((p|0)<=0){r=f;return}WEa(q|0,0,((p|0)>1?p:1)<<3|0)|0;r=f;return}p=h+56|0;q=h+4|0;k[h>>2]=27524;k[p>>2]=27544;B=0;wa(508,h+56|0,q|0);o=B;B=0;if(o&1){o=Rb()|0;u=Q;v=o}else{k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[p>>2]=27488;B=0;va(448,q|0);o=B;B=0;do if(o&1){t=Rb()|0;w=Q;x=t}else{k[q>>2]=27560;t=h+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,q|0,g|0);y=B;B=0;if(y&1){y=Rb()|0;z=Q;Yua(g);Yua(t);Ava(q);w=z;x=y;break}Yua(g);B=0;y=Xa(242,h|0,b|0)|0;z=B;B=0;a:do if((((((!(z&1)?(B=0,A=Ia(40,y|0,149175,1)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Xa(242,A|0,c|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,149175,1)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Xa(242,A|0,d|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,C|0,138837,18)|0,C=B,B=0,!(C&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,i|0,138856,75);C=B;B=0;do if(!(C&1)){B=0;eb(502,j|0,138932,10);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(i);F=E;G=D;break}B=0;wa(510,l|0,q|0);D=B;B=0;if(D&1){D=Rb()|0;H=Q;I=D;J=1}else{B=0;ua(163,A|0,i|0,j|0,82,l|0);D=B;B=0;if(D&1)K=1;else{B=0;eb(503,A|0,1240,229);B=0;K=0}D=Rb()|0;E=Q;Yua(l);H=E;I=D;J=K}Yua(j);Yua(i);if(J){F=H;G=I}else{L=H;M=I;break a}}else{D=Rb()|0;F=Q;G=D}while(0);zb(A|0);L=F;M=G}else s=43;while(0);if((s|0)==43){y=Rb()|0;L=Q;M=y}k[h>>2]=27468;k[p>>2]=27488;k[q>>2]=27560;Yua(t);Ava(q);vva(p);N=L;O=M;Qb(O|0)}while(0);u=w;v=x}vva(p);P=u;R=v}while(0);if((s|0)==6){s=Rb()|0;P=Q;R=s}N=P;O=R;Qb(O|0)}function Xja(a){a=a|0;var b=0,c=0;k[a>>2]=40780;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+36|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function Yja(a){a=a|0;Xja(a);Sqa(a);return}function Zja(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0;b=r;r=r+4064|0;c=b+4052|0;d=b+3760|0;e=b+4040|0;f=b+3624|0;g=b+4028|0;h=b+3472|0;i=b+4016|0;j=b+3320|0;l=b+4004|0;m=b+3184|0;n=b+3992|0;o=b+3048|0;q=b+3980|0;s=b+2896|0;t=b+3968|0;u=b+2760|0;v=b+3956|0;w=b+2608|0;x=b+3944|0;y=b+2456|0;z=b+3932|0;A=b+2320|0;C=b+3920|0;D=b+2168|0;E=b+3908|0;F=b+2032|0;G=b+3896|0;H=b+1880|0;I=b+3608|0;J=b+1744|0;K=b+3456|0;L=b+1592|0;M=b+3032|0;N=b+1456|0;O=b+2744|0;P=b+1320|0;R=b+2592|0;S=b+1168|0;T=b+2304|0;U=b+1032|0;V=b+2016|0;W=b+880|0;X=b+1728|0;Y=b+728|0;Z=b+1304|0;_=b+592|0;$=b+1016|0;aa=b+440|0;ba=b+864|0;ca=b+304|0;da=b+576|0;ea=b+152|0;fa=b+288|0;ga=b+16|0;ha=b;ia=d+56|0;ja=d+4|0;k[d>>2]=27524;k[ia>>2]=27544;B=0;wa(508,d+56|0,ja|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;ma=ka;vva(ia);Qb(ma|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[ia>>2]=27488;B=0;va(448,ja|0);ka=B;B=0;do if(ka&1){na=Rb()|0;oa=Q;pa=na}else{k[ja>>2]=27560;na=d+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ja|0,c|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(c);Yua(na);Ava(ja);oa=ra;pa=qa;break}Yua(c);B=0;Ia(40,d|0,138943,12)|0;qa=B;B=0;do if(!(qa&1)?(B=0,wa(510,e|0,ja|0),ra=B,B=0,!(ra&1)):0){B=0;ya(424,e|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;Yua(e);ta=sa;ua=ra;break}Yua(e);k[d>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(na);Ava(ja);vva(ia);ra=f+56|0;sa=f+4|0;k[f>>2]=27524;k[ra>>2]=27544;B=0;wa(508,f+56|0,sa|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Aa=xa;vva(ra);Qb(Aa|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[ra>>2]=27488;B=0;va(448,sa|0);xa=B;B=0;do if(xa&1){Ba=Rb()|0;Ca=Q;Da=Ba}else{k[sa>>2]=27560;Ba=f+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sa|0,c|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(c);Yua(Ba);Ava(sa);Ca=Fa;Da=Ea;break}Yua(c);B=0;Ea=Ia(40,f|0,139266,13)|0;Fa=B;B=0;do if(((!(Fa&1)?(Ga=a+16|0,B=0,Ha=Xa(242,Ea|0,k[Ga>>2]|0)|0,Ja=B,B=0,!(Ja&1)):0)?(B=0,Ia(40,Ha|0,149177,1)|0,Ha=B,B=0,!(Ha&1)):0)?(B=0,wa(510,g|0,sa|0),Ha=B,B=0,!(Ha&1)):0){B=0;ya(424,g|0)|0;Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ja=Q;Yua(g);Ka=Ja;La=Ha;break}Yua(g);k[f>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(Ba);Ava(sa);vva(ra);Ha=a+20|0;a:do if(!(k[Ha>>2]|0)){Ja=o+56|0;Ma=o+4|0;k[o>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,o+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Oa=Q;Pa=Na;vva(Ja);Qb(Pa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Qa=Rb()|0;Ra=Q;Ta=Qa}else{k[Ma>>2]=27560;Qa=o+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Yua(c);Yua(Qa);Ava(Ma);Ra=Va;Ta=Ua;break}Yua(c);B=0;Ia(40,o|0,139295,15)|0;Ua=B;B=0;do if(!(Ua&1)){B=0;wa(510,q|0,Ma|0);Va=B;B=0;if(Va&1){Wa=92;break}B=0;ya(424,q|0)|0;Va=B;B=0;if(Va&1){Va=Rb()|0;Ya=Q;Yua(q);Za=Ya;_a=Va;break}else{Yua(q);k[o>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Qa);Ava(Ma);vva(Ja);break a}}else Wa=92;while(0);if((Wa|0)==92){Ua=Rb()|0;Za=Q;_a=Ua}k[o>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Qa);Ava(Ma);vva(Ja);$a=Za;ab=_a;Qb(ab|0)}while(0);Oa=Ra;Pa=Ta;vva(Ja);Qb(Pa|0)}else{Ma=h+56|0;Na=h+4|0;k[h>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,h+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;bb=Q;cb=Ua;vva(Ma);Qb(cb|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Va=Rb()|0;db=Q;eb=Va}else{k[Na>>2]=27560;Va=h+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;fb=Q;Yua(c);Yua(Va);Ava(Na);db=fb;eb=Ya;break}Yua(c);B=0;Ia(40,h|0,139280,14)|0;Ya=B;B=0;do if(Ya&1)Wa=54;else{B=0;wa(510,i|0,Na|0);fb=B;B=0;if(fb&1){Wa=54;break}B=0;ya(424,i|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(i);hb=gb;ib=fb;break}Yua(i);k[h>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Va);Ava(Na);vva(Ma);b:do if((k[Ga>>2]|0)>0){fb=j+56|0;gb=j+4|0;jb=j+56|0;kb=j+128|0;lb=j+132|0;mb=j+36|0;nb=j+52|0;ob=0;while(1){k[j>>2]=27524;k[fb>>2]=27544;B=0;wa(508,jb|0,gb|0);pb=B;B=0;if(pb&1){Wa=61;break}k[kb>>2]=0;k[lb>>2]=-1;k[j>>2]=27468;k[fb>>2]=27488;B=0;va(448,gb|0);pb=B;B=0;if(pb&1){Wa=62;break}k[gb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[nb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);pb=B;B=0;if(pb&1){Wa=60;break}Yua(c);B=0;pb=Ia(40,j|0,149175,1)|0;qb=B;B=0;if(qb&1){Wa=71;break}B=0;qb=Sa(1,pb|0,+(+p[(k[Ha>>2]|0)+(ob<<3)>>3]))|0;pb=B;B=0;if(pb&1){Wa=71;break}B=0;Ia(40,qb|0,149177,1)|0;qb=B;B=0;if(qb&1){Wa=71;break}B=0;wa(510,l|0,gb|0);qb=B;B=0;if(qb&1){Wa=71;break}B=0;ya(424,l|0)|0;qb=B;B=0;if(qb&1){Wa=72;break}Yua(l);k[j>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);ob=ob+1|0;if((ob|0)>=(k[Ga>>2]|0))break b}if((Wa|0)==60){ob=Rb()|0;nb=Q;Yua(c);Yua(mb);Ava(gb);rb=nb;sb=ob;Wa=63}else if((Wa|0)==61){ob=Rb()|0;tb=Q;ub=ob;vva(fb);Qb(ub|0)}else if((Wa|0)==62){ob=Rb()|0;rb=Q;sb=ob;Wa=63}else if((Wa|0)==71){ob=Rb()|0;vb=Q;wb=ob;Wa=73}else if((Wa|0)==72){ob=Rb()|0;nb=Q;Yua(l);vb=nb;wb=ob;Wa=73}if((Wa|0)==63){tb=rb;ub=sb;vva(fb);Qb(ub|0)}else if((Wa|0)==73){k[j>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);$a=vb;ab=wb;Qb(ab|0)}}while(0);ob=m+56|0;nb=m+4|0;k[m>>2]=27524;k[ob>>2]=27544;B=0;wa(508,m+56|0,nb|0);lb=B;B=0;if(lb&1){lb=Rb()|0;xb=Q;yb=lb;vva(ob);Qb(yb|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ob>>2]=27488;B=0;va(448,nb|0);lb=B;B=0;do if(lb&1){kb=Rb()|0;zb=Q;Ab=kb}else{k[nb>>2]=27560;kb=m+36|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nb|0,c|0);jb=B;B=0;if(jb&1){jb=Rb()|0;qb=Q;Yua(c);Yua(kb);Ava(nb);zb=qb;Ab=jb;break}Yua(c);B=0;Ia(40,m|0,149198,2)|0;jb=B;B=0;do if(!(jb&1)){B=0;wa(510,n|0,nb|0);qb=B;B=0;if(qb&1){Wa=77;break}B=0;ya(424,n|0)|0;qb=B;B=0;if(qb&1){qb=Rb()|0;pb=Q;Yua(n);Bb=pb;Cb=qb;break}else{Yua(n);k[m>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(kb);Ava(nb);vva(ob);break a}}else Wa=77;while(0);if((Wa|0)==77){jb=Rb()|0;Bb=Q;Cb=jb}k[m>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(kb);Ava(nb);vva(ob);$a=Bb;ab=Cb;Qb(ab|0)}while(0);xb=zb;yb=Ab;vva(ob);Qb(yb|0)}while(0);if((Wa|0)==54){Ya=Rb()|0;hb=Q;ib=Ya}k[h>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Va);Ava(Na);vva(Ma);$a=hb;ab=ib;Qb(ab|0)}while(0);bb=db;cb=eb;vva(Ma);Qb(cb|0)}while(0);Ha=a+24|0;c:do if(!(k[Ha>>2]|0)){Na=y+56|0;Ua=y+4|0;k[y>>2]=27524;k[Na>>2]=27544;B=0;wa(508,y+56|0,Ua|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Db=Q;Eb=Ja;vva(Na);Qb(Eb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Na>>2]=27488;B=0;va(448,Ua|0);Ja=B;B=0;do if(Ja&1){Ya=Rb()|0;Fb=Q;Gb=Ya}else{k[Ua>>2]=27560;Ya=y+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;nb=Q;Yua(c);Yua(Ya);Ava(Ua);Fb=nb;Gb=Qa;break}Yua(c);B=0;Ia(40,y|0,139326,15)|0;Qa=B;B=0;do if(!(Qa&1)){B=0;wa(510,z|0,Ua|0);nb=B;B=0;if(nb&1){Wa=156;break}B=0;ya(424,z|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(z);Hb=lb;Ib=nb;break}else{Yua(z);k[y>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Ya);Ava(Ua);vva(Na);break c}}else Wa=156;while(0);if((Wa|0)==156){Qa=Rb()|0;Hb=Q;Ib=Qa}k[y>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Ya);Ava(Ua);vva(Na);$a=Hb;ab=Ib;Qb(ab|0)}while(0);Db=Fb;Eb=Gb;vva(Na);Qb(Eb|0)}else{Ua=s+56|0;Ja=s+4|0;k[s>>2]=27524;k[Ua>>2]=27544;B=0;wa(508,s+56|0,Ja|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Jb=Q;Kb=Ma;vva(Ua);Qb(Kb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ua>>2]=27488;B=0;va(448,Ja|0);Ma=B;B=0;do if(Ma&1){Qa=Rb()|0;Lb=Q;Mb=Qa}else{k[Ja>>2]=27560;Qa=s+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;nb=Q;Yua(c);Yua(Qa);Ava(Ja);Lb=nb;Mb=Va;break}Yua(c);B=0;Ia(40,s|0,139311,14)|0;Va=B;B=0;do if(Va&1)Wa=118;else{B=0;wa(510,t|0,Ja|0);nb=B;B=0;if(nb&1){Wa=118;break}B=0;ya(424,t|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(t);Nb=lb;Ob=nb;break}Yua(t);k[s>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Qa);Ava(Ja);vva(Ua);d:do if((k[Ga>>2]|0)>0){nb=u+56|0;lb=u+4|0;jb=u+56|0;fb=u+128|0;gb=u+132|0;mb=u+36|0;qb=u+52|0;pb=0;while(1){k[u>>2]=27524;k[nb>>2]=27544;B=0;wa(508,jb|0,lb|0);Pb=B;B=0;if(Pb&1){Wa=125;break}k[fb>>2]=0;k[gb>>2]=-1;k[u>>2]=27468;k[nb>>2]=27488;B=0;va(448,lb|0);Pb=B;B=0;if(Pb&1){Wa=126;break}k[lb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[qb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);Pb=B;B=0;if(Pb&1){Wa=124;break}Yua(c);B=0;Pb=Ia(40,u|0,149175,1)|0;Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;Sb=Sa(1,Pb|0,+(+p[(k[Ha>>2]|0)+(pb<<3)>>3]))|0;Pb=B;B=0;if(Pb&1){Wa=135;break}B=0;Ia(40,Sb|0,149177,1)|0;Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;wa(510,v|0,lb|0);Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;ya(424,v|0)|0;Sb=B;B=0;if(Sb&1){Wa=136;break}Yua(v);k[u>>2]=27468;k[nb>>2]=27488;k[lb>>2]=27560;Yua(mb);Ava(lb);vva(nb);pb=pb+1|0;if((pb|0)>=(k[Ga>>2]|0))break d}if((Wa|0)==124){pb=Rb()|0;qb=Q;Yua(c);Yua(mb);Ava(lb);Tb=qb;Ub=pb;Wa=127}else if((Wa|0)==125){pb=Rb()|0;Vb=Q;Wb=pb;vva(nb);Qb(Wb|0)}else if((Wa|0)==126){pb=Rb()|0;Tb=Q;Ub=pb;Wa=127}else if((Wa|0)==135){pb=Rb()|0;Xb=Q;Yb=pb;Wa=137}else if((Wa|0)==136){pb=Rb()|0;qb=Q;Yua(v);Xb=qb;Yb=pb;Wa=137}if((Wa|0)==127){Vb=Tb;Wb=Ub;vva(nb);Qb(Wb|0)}else if((Wa|0)==137){k[u>>2]=27468;k[nb>>2]=27488;k[lb>>2]=27560;Yua(mb);Ava(lb);vva(nb);$a=Xb;ab=Yb;Qb(ab|0)}}while(0);ob=w+56|0;pb=w+4|0;k[w>>2]=27524;k[ob>>2]=27544;B=0;wa(508,w+56|0,pb|0);qb=B;B=0;if(qb&1){qb=Rb()|0;Zb=Q;_b=qb;vva(ob);Qb(_b|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[ob>>2]=27488;B=0;va(448,pb|0);qb=B;B=0;do if(qb&1){gb=Rb()|0;$b=Q;ac=gb}else{k[pb>>2]=27560;gb=w+36|0;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pb|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;jb=Q;Yua(c);Yua(gb);Ava(pb);$b=jb;ac=fb;break}Yua(c);B=0;Ia(40,w|0,149198,2)|0;fb=B;B=0;do if(!(fb&1)){B=0;wa(510,x|0,pb|0);jb=B;B=0;if(jb&1){Wa=141;break}B=0;ya(424,x|0)|0;jb=B;B=0;if(jb&1){jb=Rb()|0;kb=Q;Yua(x);bc=kb;cc=jb;break}else{Yua(x);k[w>>2]=27468;k[ob>>2]=27488;k[pb>>2]=27560;Yua(gb);Ava(pb);vva(ob);break c}}else Wa=141;while(0);if((Wa|0)==141){fb=Rb()|0;bc=Q;cc=fb}k[w>>2]=27468;k[ob>>2]=27488;k[pb>>2]=27560;Yua(gb);Ava(pb);vva(ob);$a=bc;ab=cc;Qb(ab|0)}while(0);Zb=$b;_b=ac;vva(ob);Qb(_b|0)}while(0);if((Wa|0)==118){Va=Rb()|0;Nb=Q;Ob=Va}k[s>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Qa);Ava(Ja);vva(Ua);$a=Nb;ab=Ob;Qb(ab|0)}while(0);Jb=Lb;Kb=Mb;vva(Ua);Qb(Kb|0)}while(0);Ha=a+28|0;e:do if(!(k[Ha>>2]|0)){Ja=H+56|0;Ma=H+4|0;k[H>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,H+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;dc=Q;ec=Na;vva(Ja);Qb(ec|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Va=Rb()|0;fc=Q;gc=Va}else{k[Ma>>2]=27560;Va=H+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[H+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;pb=Q;Yua(c);Yua(Va);Ava(Ma);fc=pb;gc=Ya;break}Yua(c);B=0;Ia(40,H|0,139357,15)|0;Ya=B;B=0;do if(!(Ya&1)){B=0;wa(510,I|0,Ma|0);pb=B;B=0;if(pb&1){Wa=220;break}B=0;ya(424,I|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(I);hc=qb;ic=pb;break}else{Yua(I);k[H>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Va);Ava(Ma);vva(Ja);break e}}else Wa=220;while(0);if((Wa|0)==220){Ya=Rb()|0;hc=Q;ic=Ya}k[H>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Va);Ava(Ma);vva(Ja);$a=hc;ab=ic;Qb(ab|0)}while(0);dc=fc;ec=gc;vva(Ja);Qb(ec|0)}else{Ma=A+56|0;Na=A+4|0;k[A>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,A+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;jc=Q;kc=Ua;vva(Ma);Qb(kc|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Ya=Rb()|0;lc=Q;mc=Ya}else{k[Na>>2]=27560;Ya=A+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;pb=Q;Yua(c);Yua(Ya);Ava(Na);lc=pb;mc=Qa;break}Yua(c);B=0;Ia(40,A|0,139342,14)|0;Qa=B;B=0;do if(Qa&1)Wa=182;else{B=0;wa(510,C|0,Na|0);pb=B;B=0;if(pb&1){Wa=182;break}B=0;ya(424,C|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(C);nc=qb;oc=pb;break}Yua(C);k[A>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ya);Ava(Na);vva(Ma);f:do if((k[Ga>>2]|0)>0){pb=D+56|0;qb=D+4|0;fb=D+56|0;nb=D+128|0;lb=D+132|0;mb=D+36|0;jb=D+52|0;kb=0;while(1){k[D>>2]=27524;k[pb>>2]=27544;B=0;wa(508,fb|0,qb|0);Sb=B;B=0;if(Sb&1){Wa=189;break}k[nb>>2]=0;k[lb>>2]=-1;k[D>>2]=27468;k[pb>>2]=27488;B=0;va(448,qb|0);Sb=B;B=0;if(Sb&1){Wa=190;break}k[qb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[jb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qb|0,c|0);Sb=B;B=0;if(Sb&1){Wa=188;break}Yua(c);B=0;Sb=Ia(40,D|0,149175,1)|0;Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;Pb=Sa(1,Sb|0,+(+p[(k[Ha>>2]|0)+(kb<<3)>>3]))|0;Sb=B;B=0;if(Sb&1){Wa=199;break}B=0;Ia(40,Pb|0,149177,1)|0;Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;wa(510,E|0,qb|0);Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;ya(424,E|0)|0;Pb=B;B=0;if(Pb&1){Wa=200;break}Yua(E);k[D>>2]=27468;k[pb>>2]=27488;k[qb>>2]=27560;Yua(mb);Ava(qb);vva(pb);kb=kb+1|0;if((kb|0)>=(k[Ga>>2]|0))break f}if((Wa|0)==188){kb=Rb()|0;jb=Q;Yua(c);Yua(mb);Ava(qb);pc=jb;qc=kb;Wa=191}else if((Wa|0)==189){kb=Rb()|0;rc=Q;sc=kb;vva(pb);Qb(sc|0)}else if((Wa|0)==190){kb=Rb()|0;pc=Q;qc=kb;Wa=191}else if((Wa|0)==199){kb=Rb()|0;tc=Q;uc=kb;Wa=201}else if((Wa|0)==200){kb=Rb()|0;jb=Q;Yua(E);tc=jb;uc=kb;Wa=201}if((Wa|0)==191){rc=pc;sc=qc;vva(pb);Qb(sc|0)}else if((Wa|0)==201){k[D>>2]=27468;k[pb>>2]=27488;k[qb>>2]=27560;Yua(mb);Ava(qb);vva(pb);$a=tc;ab=uc;Qb(ab|0)}}while(0);ob=F+56|0;kb=F+4|0;k[F>>2]=27524;k[ob>>2]=27544;B=0;wa(508,F+56|0,kb|0);jb=B;B=0;if(jb&1){jb=Rb()|0;vc=Q;wc=jb;vva(ob);Qb(wc|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[ob>>2]=27488;B=0;va(448,kb|0);jb=B;B=0;do if(jb&1){lb=Rb()|0;xc=Q;yc=lb}else{k[kb>>2]=27560;lb=F+36|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,kb|0,c|0);nb=B;B=0;if(nb&1){nb=Rb()|0;fb=Q;Yua(c);Yua(lb);Ava(kb);xc=fb;yc=nb;break}Yua(c);B=0;Ia(40,F|0,149198,2)|0;nb=B;B=0;do if(!(nb&1)){B=0;wa(510,G|0,kb|0);fb=B;B=0;if(fb&1){Wa=205;break}B=0;ya(424,G|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(G);zc=gb;Ac=fb;break}else{Yua(G);k[F>>2]=27468;k[ob>>2]=27488;k[kb>>2]=27560;Yua(lb);Ava(kb);vva(ob);break e}}else Wa=205;while(0);if((Wa|0)==205){nb=Rb()|0;zc=Q;Ac=nb}k[F>>2]=27468;k[ob>>2]=27488;k[kb>>2]=27560;Yua(lb);Ava(kb);vva(ob);$a=zc;ab=Ac;Qb(ab|0)}while(0);vc=xc;wc=yc;vva(ob);Qb(wc|0)}while(0);if((Wa|0)==182){Qa=Rb()|0;nc=Q;oc=Qa}k[A>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ya);Ava(Na);vva(Ma);$a=nc;ab=oc;Qb(ab|0)}while(0);jc=lc;kc=mc;vva(Ma);Qb(kc|0)}while(0);Ha=a+32|0;g:do if(!(k[Ha>>2]|0)){Na=P+56|0;Ua=P+4|0;k[P>>2]=27524;k[Na>>2]=27544;B=0;wa(508,P+56|0,Ua|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Bc=Q;Cc=Ja;vva(Na);Qb(Cc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Na>>2]=27488;B=0;va(448,Ua|0);Ja=B;B=0;do if(Ja&1){Qa=Rb()|0;Dc=Q;Ec=Qa}else{k[Ua>>2]=27560;Qa=P+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;kb=Q;Yua(c);Yua(Qa);Ava(Ua);Dc=kb;Ec=Va;break}Yua(c);B=0;Ia(40,P|0,139388,15)|0;Va=B;B=0;do if(!(Va&1)){B=0;wa(510,R|0,Ua|0);kb=B;B=0;if(kb&1){Wa=284;break}B=0;ya(424,R|0)|0;kb=B;B=0;if(kb&1){kb=Rb()|0;jb=Q;Yua(R);Fc=jb;Gc=kb;break}else{Yua(R);k[P>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Qa);Ava(Ua);vva(Na);break g}}else Wa=284;while(0);if((Wa|0)==284){Va=Rb()|0;Fc=Q;Gc=Va}k[P>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Qa);Ava(Ua);vva(Na);$a=Fc;ab=Gc;Qb(ab|0)}while(0);Bc=Dc;Cc=Ec;vva(Na);Qb(Cc|0)}else{Ua=J+56|0;Ja=J+4|0;k[J>>2]=27524;k[Ua>>2]=27544;B=0;wa(508,J+56|0,Ja|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Hc=Q;Ic=Ma;vva(Ua);Qb(Ic|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[Ua>>2]=27488;B=0;va(448,Ja|0);Ma=B;B=0;do if(Ma&1){Va=Rb()|0;Jc=Q;Kc=Va}else{k[Ja>>2]=27560;Va=J+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;kb=Q;Yua(c);Yua(Va);Ava(Ja);Jc=kb;Kc=Ya;break}Yua(c);B=0;Ia(40,J|0,139373,14)|0;Ya=B;B=0;do if(Ya&1)Wa=246;else{B=0;wa(510,K|0,Ja|0);kb=B;B=0;if(kb&1){Wa=246;break}B=0;ya(424,K|0)|0;kb=B;B=0;if(kb&1){kb=Rb()|0;jb=Q;Yua(K);Lc=jb;Mc=kb;break}Yua(K);k[J>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Va);Ava(Ja);vva(Ua);h:do if((k[Ga>>2]|0)>0){kb=L+56|0;jb=L+4|0;nb=L+56|0;pb=L+128|0;qb=L+132|0;mb=L+36|0;fb=L+52|0;gb=0;while(1){k[L>>2]=27524;k[kb>>2]=27544;B=0;wa(508,nb|0,jb|0);Pb=B;B=0;if(Pb&1){Wa=253;break}k[pb>>2]=0;k[qb>>2]=-1;k[L>>2]=27468;k[kb>>2]=27488;B=0;va(448,jb|0);Pb=B;B=0;if(Pb&1){Wa=254;break}k[jb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[fb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,jb|0,c|0);Pb=B;B=0;if(Pb&1){Wa=252;break}Yua(c);B=0;Pb=Ia(40,L|0,149175,1)|0;Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;Sb=Sa(1,Pb|0,+(+p[(k[Ha>>2]|0)+(gb<<3)>>3]))|0;Pb=B;B=0;if(Pb&1){Wa=263;break}B=0;Ia(40,Sb|0,149177,1)|0;Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;wa(510,M|0,jb|0);Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;ya(424,M|0)|0;Sb=B;B=0;if(Sb&1){Wa=264;break}Yua(M);k[L>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(mb);Ava(jb);vva(kb);gb=gb+1|0;if((gb|0)>=(k[Ga>>2]|0))break h}if((Wa|0)==252){gb=Rb()|0;fb=Q;Yua(c);Yua(mb);Ava(jb);Nc=fb;Oc=gb;Wa=255}else if((Wa|0)==253){gb=Rb()|0;Pc=Q;Qc=gb;vva(kb);Qb(Qc|0)}else if((Wa|0)==254){gb=Rb()|0;Nc=Q;Oc=gb;Wa=255}else if((Wa|0)==263){gb=Rb()|0;Rc=Q;Sc=gb;Wa=265}else if((Wa|0)==264){gb=Rb()|0;fb=Q;Yua(M);Rc=fb;Sc=gb;Wa=265}if((Wa|0)==255){Pc=Nc;Qc=Oc;vva(kb);Qb(Qc|0)}else if((Wa|0)==265){k[L>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(mb);Ava(jb);vva(kb);$a=Rc;ab=Sc;Qb(ab|0)}}while(0);ob=N+56|0;gb=N+4|0;k[N>>2]=27524;k[ob>>2]=27544;B=0;wa(508,N+56|0,gb|0);fb=B;B=0;if(fb&1){fb=Rb()|0;Tc=Q;Uc=fb;vva(ob);Qb(Uc|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[ob>>2]=27488;B=0;va(448,gb|0);fb=B;B=0;do if(fb&1){qb=Rb()|0;Vc=Q;Wc=qb}else{k[gb>>2]=27560;qb=N+36|0;k[qb>>2]=0;k[qb+4>>2]=0;k[qb+8>>2]=0;k[qb+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);pb=B;B=0;if(pb&1){pb=Rb()|0;nb=Q;Yua(c);Yua(qb);Ava(gb);Vc=nb;Wc=pb;break}Yua(c);B=0;Ia(40,N|0,149198,2)|0;pb=B;B=0;do if(!(pb&1)){B=0;wa(510,O|0,gb|0);nb=B;B=0;if(nb&1){Wa=269;break}B=0;ya(424,O|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(O);Xc=lb;Yc=nb;break}else{Yua(O);k[N>>2]=27468;k[ob>>2]=27488;k[gb>>2]=27560;Yua(qb);Ava(gb);vva(ob);break g}}else Wa=269;while(0);if((Wa|0)==269){pb=Rb()|0;Xc=Q;Yc=pb}k[N>>2]=27468;k[ob>>2]=27488;k[gb>>2]=27560;Yua(qb);Ava(gb);vva(ob);$a=Xc;ab=Yc;Qb(ab|0)}while(0);Tc=Vc;Uc=Wc;vva(ob);Qb(Uc|0)}while(0);if((Wa|0)==246){Ya=Rb()|0;Lc=Q;Mc=Ya}k[J>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Va);Ava(Ja);vva(Ua);$a=Lc;ab=Mc;Qb(ab|0)}while(0);Hc=Jc;Ic=Kc;vva(Ua);Qb(Ic|0)}while(0);Ha=a+36|0;i:do if(!(k[Ha>>2]|0)){Ja=Y+56|0;Ma=Y+4|0;k[Y>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,Y+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Zc=Q;_c=Na;vva(Ja);Qb(_c|0)}k[Y+128>>2]=0;k[Y+132>>2]=-1;k[Y>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Ya=Rb()|0;$c=Q;ad=Ya}else{k[Ma>>2]=27560;Ya=Y+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;gb=Q;Yua(c);Yua(Ya);Ava(Ma);$c=gb;ad=Qa;break}Yua(c);B=0;Ia(40,Y|0,139419,15)|0;Qa=B;B=0;do if(!(Qa&1)){B=0;wa(510,Z|0,Ma|0);gb=B;B=0;if(gb&1){Wa=348;break}B=0;ya(424,Z|0)|0;gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(Z);bd=fb;cd=gb;break}else{Yua(Z);k[Y>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Ya);Ava(Ma);vva(Ja);break i}}else Wa=348;while(0);if((Wa|0)==348){Qa=Rb()|0;bd=Q;cd=Qa}k[Y>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Ya);Ava(Ma);vva(Ja);$a=bd;ab=cd;Qb(ab|0)}while(0);Zc=$c;_c=ad;vva(Ja);Qb(_c|0)}else{Ma=S+56|0;Na=S+4|0;k[S>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,S+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;dd=Q;ed=Ua;vva(Ma);Qb(ed|0)}k[S+128>>2]=0;k[S+132>>2]=-1;k[S>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Qa=Rb()|0;fd=Q;gd=Qa}else{k[Na>>2]=27560;Qa=S+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[S+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;gb=Q;Yua(c);Yua(Qa);Ava(Na);fd=gb;gd=Va;break}Yua(c);B=0;Ia(40,S|0,139404,14)|0;Va=B;B=0;do if(Va&1)Wa=310;else{B=0;wa(510,T|0,Na|0);gb=B;B=0;if(gb&1){Wa=310;break}B=0;ya(424,T|0)|0;gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(T);hd=fb;id=gb;break}Yua(T);k[S>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Qa);Ava(Na);vva(Ma);j:do if((k[Ga>>2]|0)>0){gb=U+56|0;fb=U+4|0;pb=U+56|0;kb=U+128|0;jb=U+132|0;mb=U+36|0;nb=U+52|0;lb=0;while(1){k[U>>2]=27524;k[gb>>2]=27544;B=0;wa(508,pb|0,fb|0);Sb=B;B=0;if(Sb&1){Wa=317;break}k[kb>>2]=0;k[jb>>2]=-1;k[U>>2]=27468;k[gb>>2]=27488;B=0;va(448,fb|0);Sb=B;B=0;if(Sb&1){Wa=318;break}k[fb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[nb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fb|0,c|0);Sb=B;B=0;if(Sb&1){Wa=316;break}Yua(c);B=0;Sb=Ia(40,U|0,149175,1)|0;Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;Pb=Sa(1,Sb|0,+(+p[(k[Ha>>2]|0)+(lb<<3)>>3]))|0;Sb=B;B=0;if(Sb&1){Wa=327;break}B=0;Ia(40,Pb|0,149177,1)|0;Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;wa(510,V|0,fb|0);Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;ya(424,V|0)|0;Pb=B;B=0;if(Pb&1){Wa=328;break}Yua(V);k[U>>2]=27468;k[gb>>2]=27488;k[fb>>2]=27560;Yua(mb);Ava(fb);vva(gb);lb=lb+1|0;if((lb|0)>=(k[Ga>>2]|0))break j}if((Wa|0)==316){lb=Rb()|0;nb=Q;Yua(c);Yua(mb);Ava(fb);jd=nb;kd=lb;Wa=319}else if((Wa|0)==317){lb=Rb()|0;ld=Q;md=lb;vva(gb);Qb(md|0)}else if((Wa|0)==318){lb=Rb()|0;jd=Q;kd=lb;Wa=319}else if((Wa|0)==327){lb=Rb()|0;nd=Q;od=lb;Wa=329}else if((Wa|0)==328){lb=Rb()|0;nb=Q;Yua(V);nd=nb;od=lb;Wa=329}if((Wa|0)==319){ld=jd;md=kd;vva(gb);Qb(md|0)}else if((Wa|0)==329){k[U>>2]=27468;k[gb>>2]=27488;k[fb>>2]=27560;Yua(mb);Ava(fb);vva(gb);$a=nd;ab=od;Qb(ab|0)}}while(0);ob=W+56|0;lb=W+4|0;k[W>>2]=27524;k[ob>>2]=27544;B=0;wa(508,W+56|0,lb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;pd=Q;qd=nb;vva(ob);Qb(qd|0)}k[W+128>>2]=0;k[W+132>>2]=-1;k[W>>2]=27468;k[ob>>2]=27488;B=0;va(448,lb|0);nb=B;B=0;do if(nb&1){jb=Rb()|0;rd=Q;sd=jb}else{k[lb>>2]=27560;jb=W+36|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[W+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);kb=B;B=0;if(kb&1){kb=Rb()|0;pb=Q;Yua(c);Yua(jb);Ava(lb);rd=pb;sd=kb;break}Yua(c);B=0;Ia(40,W|0,149198,2)|0;kb=B;B=0;do if(!(kb&1)){B=0;wa(510,X|0,lb|0);pb=B;B=0;if(pb&1){Wa=333;break}B=0;ya(424,X|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(X);td=qb;ud=pb;break}else{Yua(X);k[W>>2]=27468;k[ob>>2]=27488;k[lb>>2]=27560;Yua(jb);Ava(lb);vva(ob);break i}}else Wa=333;while(0);if((Wa|0)==333){kb=Rb()|0;td=Q;ud=kb}k[W>>2]=27468;k[ob>>2]=27488;k[lb>>2]=27560;Yua(jb);Ava(lb);vva(ob);$a=td;ab=ud;Qb(ab|0)}while(0);pd=rd;qd=sd;vva(ob);Qb(qd|0)}while(0);if((Wa|0)==310){Va=Rb()|0;hd=Q;id=Va}k[S>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Qa);Ava(Na);vva(Ma);$a=hd;ab=id;Qb(ab|0)}while(0);dd=fd;ed=gd;vva(Ma);Qb(ed|0)}while(0);Ga=_+56|0;Ha=_+4|0;k[_>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,_+56|0,Ha|0);Na=B;B=0;if(Na&1){Na=Rb()|0;vd=Q;wd=Na;vva(Ga);Qb(wd|0)}k[_+128>>2]=0;k[_+132>>2]=-1;k[_>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Ha|0);Na=B;B=0;do if(Na&1){Ua=Rb()|0;xd=Q;yd=Ua}else{k[Ha>>2]=27560;Ua=_+36|0;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[_+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ha|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Va=Q;Yua(c);Yua(Ua);Ava(Ha);xd=Va;yd=Ja;break}Yua(c);B=0;Ja=Ia(40,_|0,139435,12)|0;Va=B;B=0;do if(Va&1)Wa=417;else{B=0;Ya=Sa(1,Ja|0,+(+p[a+8>>3]))|0;lb=B;B=0;if(lb&1){Wa=417;break}B=0;Ia(40,Ya|0,149177,1)|0;Ya=B;B=0;if(Ya&1){Wa=417;break}B=0;wa(510,$|0,Ha|0);Ya=B;B=0;if(Ya&1){Wa=417;break}B=0;ya(424,$|0)|0;Ya=B;B=0;if(Ya&1){Ya=Rb()|0;lb=Q;Yua($);zd=lb;Ad=Ya;break}Yua($);k[_>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Ua);Ava(Ha);vva(Ga);Ya=aa+56|0;lb=aa+4|0;k[aa>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,aa+56|0,lb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Bd=Q;Cd=nb;vva(Ya);Qb(Cd|0)}k[aa+128>>2]=0;k[aa+132>>2]=-1;k[aa>>2]=27468;k[Ya>>2]=27488;B=0;va(448,lb|0);nb=B;B=0;do if(nb&1){kb=Rb()|0;Dd=Q;Ed=kb}else{k[lb>>2]=27560;kb=aa+36|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[aa+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(c);Yua(kb);Ava(lb);Dd=fb;Ed=gb;break}Yua(c);B=0;gb=Ia(40,aa|0,139448,12)|0;fb=B;B=0;do if(fb&1)Wa=420;else{B=0;mb=Sa(1,gb|0,+(+p[a+40>>3]))|0;pb=B;B=0;if(pb&1){Wa=420;break}B=0;Ia(40,mb|0,149177,1)|0;mb=B;B=0;if(mb&1){Wa=420;break}B=0;wa(510,ba|0,lb|0);mb=B;B=0;if(mb&1){Wa=420;break}B=0;ya(424,ba|0)|0;mb=B;B=0;if(mb&1){mb=Rb()|0;pb=Q;Yua(ba);Fd=pb;Gd=mb;break}Yua(ba);k[aa>>2]=27468;k[Ya>>2]=27488;k[lb>>2]=27560;Yua(kb);Ava(lb);vva(Ya);mb=ca+56|0;pb=ca+4|0;k[ca>>2]=27524;k[mb>>2]=27544;B=0;wa(508,ca+56|0,pb|0);qb=B;B=0;if(qb&1){qb=Rb()|0;Hd=Q;Id=qb;vva(mb);Qb(Id|0)}k[ca+128>>2]=0;k[ca+132>>2]=-1;k[ca>>2]=27468;k[mb>>2]=27488;B=0;va(448,pb|0);qb=B;B=0;do if(qb&1){Pb=Rb()|0;Jd=Q;Kd=Pb}else{k[pb>>2]=27560;Pb=ca+36|0;k[Pb>>2]=0;k[Pb+4>>2]=0;k[Pb+8>>2]=0;k[Pb+12>>2]=0;k[ca+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pb|0,c|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;Ld=Q;Yua(c);Yua(Pb);Ava(pb);Jd=Ld;Kd=Sb;break}Yua(c);B=0;Sb=Ia(40,ca|0,139461,12)|0;Ld=B;B=0;do if(Ld&1)Wa=423;else{B=0;Md=Sa(1,Sb|0,+(+p[a+48>>3]))|0;Nd=B;B=0;if(Nd&1){Wa=423;break}B=0;Ia(40,Md|0,149177,1)|0;Md=B;B=0;if(Md&1){Wa=423;break}B=0;wa(510,da|0,pb|0);Md=B;B=0;if(Md&1){Wa=423;break}B=0;ya(424,da|0)|0;Md=B;B=0;if(Md&1){Md=Rb()|0;Nd=Q;Yua(da);Od=Nd;Pd=Md;break}Yua(da);k[ca>>2]=27468;k[mb>>2]=27488;k[pb>>2]=27560;Yua(Pb);Ava(pb);vva(mb);Md=ea+56|0;Nd=ea+4|0;k[ea>>2]=27524;k[Md>>2]=27544;B=0;wa(508,ea+56|0,Nd|0);Qd=B;B=0;if(Qd&1){Qd=Rb()|0;Rd=Q;Sd=Qd;vva(Md);Qb(Sd|0)}k[ea+128>>2]=0;k[ea+132>>2]=-1;k[ea>>2]=27468;k[Md>>2]=27488;B=0;va(448,Nd|0);Qd=B;B=0;do if(Qd&1){Td=Rb()|0;Ud=Q;Vd=Td}else{k[Nd>>2]=27560;Td=ea+36|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[ea+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Nd|0,c|0);Wd=B;B=0;if(Wd&1){Wd=Rb()|0;Xd=Q;Yua(c);Yua(Td);Ava(Nd);Ud=Xd;Vd=Wd;break}Yua(c);B=0;Wd=Ia(40,ea|0,139474,12)|0;Xd=B;B=0;do if(Xd&1)Wa=426;else{B=0;Yd=Sa(1,Wd|0,+(+p[a+56>>3]))|0;Zd=B;B=0;if(Zd&1){Wa=426;break}B=0;Ia(40,Yd|0,149177,1)|0;Yd=B;B=0;if(Yd&1){Wa=426;break}B=0;wa(510,fa|0,Nd|0);Yd=B;B=0;if(Yd&1){Wa=426;break}B=0;ya(424,fa|0)|0;Yd=B;B=0;if(Yd&1){Yd=Rb()|0;Zd=Q;Yua(fa);_d=Zd;$d=Yd;break}Yua(fa);k[ea>>2]=27468;k[Md>>2]=27488;k[Nd>>2]=27560;Yua(Td);Ava(Nd);vva(Md);Yd=ga+56|0;Zd=ga+4|0;k[ga>>2]=27524;k[Yd>>2]=27544;B=0;wa(508,ga+56|0,Zd|0);ae=B;B=0;if(ae&1){ae=Rb()|0;be=Q;ce=ae;vva(Yd);Qb(ce|0)}k[ga+128>>2]=0;k[ga+132>>2]=-1;k[ga>>2]=27468;k[Yd>>2]=27488;B=0;va(448,Zd|0);ae=B;B=0;do if(ae&1){de=Rb()|0;ee=Q;fe=de}else{k[Zd>>2]=27560;de=ga+36|0;k[de>>2]=0;k[de+4>>2]=0;k[de+8>>2]=0;k[de+12>>2]=0;k[ga+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Zd|0,c|0);ge=B;B=0;if(ge&1){ge=Rb()|0;he=Q;Yua(c);Yua(de);Ava(Zd);ee=he;fe=ge;break}Yua(c);B=0;ge=Ia(40,ga|0,139487,12)|0;he=B;B=0;do if(!(he&1)){B=0;ie=Sa(1,ge|0,+(+p[a+64>>3]))|0;je=B;B=0;if(je&1){Wa=429;break}B=0;Ia(40,ie|0,149177,1)|0;ie=B;B=0;if(ie&1){Wa=429;break}B=0;wa(510,ha|0,Zd|0);ie=B;B=0;if(ie&1){Wa=429;break}B=0;ya(424,ha|0)|0;ie=B;B=0;if(ie&1){ie=Rb()|0;je=Q;Yua(ha);ke=je;le=ie;break}else{Yua(ha);k[ga>>2]=27468;k[Yd>>2]=27488;k[Zd>>2]=27560;Yua(de);Ava(Zd);vva(Yd);r=b;return}}else Wa=429;while(0);if((Wa|0)==429){ge=Rb()|0;ke=Q;le=ge}k[ga>>2]=27468;k[Yd>>2]=27488;k[Zd>>2]=27560;Yua(de);Ava(Zd);vva(Yd);$a=ke;ab=le;Qb(ab|0)}while(0);be=ee;ce=fe;vva(Yd);Qb(ce|0)}while(0);if((Wa|0)==426){Wd=Rb()|0;_d=Q;$d=Wd}k[ea>>2]=27468;k[Md>>2]=27488;k[Nd>>2]=27560;Yua(Td);Ava(Nd);vva(Md);$a=_d;ab=$d;Qb(ab|0)}while(0);Rd=Ud;Sd=Vd;vva(Md);Qb(Sd|0)}while(0);if((Wa|0)==423){Sb=Rb()|0;Od=Q;Pd=Sb}k[ca>>2]=27468;k[mb>>2]=27488;k[pb>>2]=27560;Yua(Pb);Ava(pb);vva(mb);$a=Od;ab=Pd;Qb(ab|0)}while(0);Hd=Jd;Id=Kd;vva(mb);Qb(Id|0)}while(0);if((Wa|0)==420){gb=Rb()|0;Fd=Q;Gd=gb}k[aa>>2]=27468;k[Ya>>2]=27488;k[lb>>2]=27560;Yua(kb);Ava(lb);vva(Ya);$a=Fd;ab=Gd;Qb(ab|0)}while(0);Bd=Dd;Cd=Ed;vva(Ya);Qb(Cd|0)}while(0);if((Wa|0)==417){Ja=Rb()|0;zd=Q;Ad=Ja}k[_>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Ua);Ava(Ha);vva(Ga);$a=zd;ab=Ad;Qb(ab|0)}while(0);vd=xd;wd=yd;vva(Ga);Qb(wd|0)}else Wa=51;while(0);if((Wa|0)==51){Ea=Rb()|0;Ka=Q;La=Ea}k[f>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(Ba);Ava(sa);vva(ra);$a=Ka;ab=La;Qb(ab|0)}while(0);za=Ca;Aa=Da;vva(ra);Qb(Aa|0)}else Wa=48;while(0);if((Wa|0)==48){qa=Rb()|0;ta=Q;ua=qa}k[d>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(na);Ava(ja);vva(ia);$a=ta;ab=ua;Qb(ab|0)}while(0);la=oa;ma=pa;vva(ia);Qb(ma|0)}function _ja(a){a=a|0;return 931}function $ja(a,b){a=a|0;b=b|0;p[a+8>>3]=+p[(k[a+20>>2]|0)+(b<<3)>>3];p[a+40>>3]=+p[(k[a+24>>2]|0)+(b<<3)>>3];p[a+48>>3]=+p[(k[a+28>>2]|0)+(b<<3)>>3];p[a+56>>3]=+p[(k[a+32>>2]|0)+(b<<3)>>3];p[a+64>>3]=+p[(k[a+36>>2]|0)+(b<<3)>>3];return}function aka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{p[a+40>>3]=1.0;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;r=c;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;b=a+56|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;r=c;return}case 2:{b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=c;return}case 3:{b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;p[a+64>>3]=1.0;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;i=Q;j=b;vva(c);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);m=q;n=o;break}Yua(d);B=0;o=Ia(40,e|0,138956,31)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,138856,75);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,139532,11);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,o|0,f|0,g|0,169,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,o|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(o|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}}}function bka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0;d=r;r=r+704|0;e=d+692|0;f=d+520|0;g=d+680|0;h=d+668|0;i=d+656|0;j=d+384|0;l=d+368|0;m=d+84|0;n=d+72|0;o=d+232|0;q=d+60|0;s=d+48|0;t=d+36|0;u=d+96|0;v=d+24|0;w=d+12|0;x=d;switch(b|0){case 739:case 738:{switch(c|0){case 0:{p[a+40>>3]=1.0;y=a+48|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;k[y+20>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;y=a+56|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;r=d;return}case 2:{y=a+40|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 3:{y=a+40|0;k[y>>2]=0;k[y+4>>2]=0;k[y+8>>2]=0;k[y+12>>2]=0;k[y+16>>2]=0;k[y+20>>2]=0;p[a+64>>3]=1.0;r=d;return}default:{y=f+56|0;z=f+4|0;k[f>>2]=27524;k[y>>2]=27544;B=0;wa(508,f+56|0,z|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;D=A;vva(y);Qb(D|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[y>>2]=27488;B=0;va(448,z|0);A=B;B=0;do if(A&1){E=Rb()|0;F=Q;G=E}else{k[z>>2]=27560;E=f+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,z|0,e|0);H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(e);Yua(E);Ava(z);F=I;G=H;break}Yua(e);B=0;H=Ia(40,f|0,138988,29)|0;I=B;B=0;a:do if(!(I&1)?(B=0,Xa(239,H|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,g|0,138856,75);K=B;B=0;do if(!(K&1)){B=0;eb(502,h|0,139574,9);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(g);N=M;O=L;break}B=0;wa(510,i|0,z|0);L=B;B=0;if(L&1){L=Rb()|0;P=Q;R=L;S=1}else{B=0;ua(163,J|0,g|0,h|0,188,i|0);L=B;B=0;if(L&1)T=1;else{B=0;eb(503,J|0,1240,229);B=0;T=0}L=Rb()|0;M=Q;Yua(i);P=M;R=L;S=T}Yua(h);Yua(g);if(S){N=P;O=R}else{U=P;V=R;break a}}else{L=Rb()|0;N=Q;O=L}while(0);zb(J|0);U=N;V=O}else W=22;while(0);if((W|0)==22){H=Rb()|0;U=Q;V=H}k[f>>2]=27468;k[y>>2]=27488;k[z>>2]=27560;Yua(E);Ava(z);vva(y);X=U;Y=V;Qb(Y|0)}while(0);C=F;D=G;vva(y);Qb(D|0)}}break}case 741:case 740:{switch(c|0){case 0:{p[a+40>>3]=1.0;D=a+48|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[D+16>>2]=0;k[D+20>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;D=a+56|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;r=d;return}case 2:{D=a+40|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 3:{D=a+40|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[D+16>>2]=0;k[D+20>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=.25;p[a+48>>3]=.25;p[a+56>>3]=.25;p[a+64>>3]=.25;r=d;return}default:{D=j+56|0;y=j+4|0;k[j>>2]=27524;k[D>>2]=27544;B=0;wa(508,j+56|0,y|0);G=B;B=0;if(G&1){G=Rb()|0;Z=Q;_=G;vva(D);Qb(_|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[D>>2]=27488;B=0;va(448,y|0);G=B;B=0;do if(G&1){F=Rb()|0;$=Q;aa=F}else{k[y>>2]=27560;F=j+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,y|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;V=Q;Yua(e);Yua(F);Ava(y);$=V;aa=C;break}Yua(e);B=0;C=Ia(40,j|0,139018,29)|0;V=B;B=0;b:do if(!(V&1)?(B=0,Xa(239,C|0,0)|0,U=B,B=0,!(U&1)):0){U=Ab(20)|0;B=0;eb(502,l|0,138856,75);z=B;B=0;do if(!(z&1)){B=0;eb(502,m|0,139574,9);f=B;B=0;if(f&1){f=Rb()|0;O=Q;Yua(l);ba=f;ca=O;break}B=0;wa(510,n|0,y|0);O=B;B=0;if(O&1){O=Rb()|0;da=1;ea=Q;fa=O}else{B=0;ua(163,U|0,l|0,m|0,198,n|0);O=B;B=0;if(O&1)ga=1;else{B=0;eb(503,U|0,1240,229);B=0;ga=0}O=Rb()|0;f=Q;Yua(n);da=ga;ea=f;fa=O}Yua(m);Yua(l);if(da){ba=fa;ca=ea}else{ha=ea;ia=fa;break b}}else{O=Rb()|0;ba=O;ca=Q}while(0);zb(U|0);ha=ca;ia=ba}else W=51;while(0);if((W|0)==51){C=Rb()|0;ha=Q;ia=C}k[j>>2]=27468;k[D>>2]=27488;k[y>>2]=27560;Yua(F);Ava(y);vva(D);X=ha;Y=ia;Qb(Y|0)}while(0);Z=$;_=aa;vva(D);Qb(_|0)}}break}case 742:{do switch(c|0){case 0:{p[a+40>>3]=1.0;_=a+48|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;k[_+20>>2]=0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;_=a+56|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;r=d;return}case 2:{_=a+40|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 3:{_=a+40|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[_+16>>2]=0;k[_+20>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 5:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 6:{p[a+40>>3]=.5;p[a+48>>3]=.5;_=a+56|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;r=d;return}case 7:{p[a+40>>3]=.5;_=a+48|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;p[a+64>>3]=.5;r=d;return}case 8:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=.5;r=d;return}case 9:{_=a+40|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;p[a+56>>3]=.5;p[a+64>>3]=.5;r=d;return}default:{_=o+56|0;D=o+4|0;k[o>>2]=27524;k[_>>2]=27544;B=0;wa(508,o+56|0,D|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ja=Q;ka=aa;vva(_);Qb(ka|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[_>>2]=27488;B=0;va(448,D|0);aa=B;B=0;do if(aa&1){$=Rb()|0;la=Q;ma=$}else{k[D>>2]=27560;$=o+36|0;k[$>>2]=0;k[$+4>>2]=0;k[$+8>>2]=0;k[$+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,D|0,e|0);Z=B;B=0;if(Z&1){Z=Rb()|0;ia=Q;Yua(e);Yua($);Ava(D);la=ia;ma=Z;break}Yua(e);B=0;Z=Ia(40,o|0,139048,29)|0;ia=B;B=0;c:do if(!(ia&1)?(B=0,Xa(239,Z|0,0)|0,ha=B,B=0,!(ha&1)):0){ha=Ab(20)|0;B=0;eb(502,q|0,138856,75);y=B;B=0;do if(!(y&1)){B=0;eb(502,s|0,139574,9);j=B;B=0;if(j&1){j=Rb()|0;ba=Q;Yua(q);na=j;oa=ba;break}B=0;wa(510,t|0,D|0);ba=B;B=0;if(ba&1){ba=Rb()|0;pa=1;qa=Q;ra=ba}else{B=0;ua(163,ha|0,q|0,s|0,214,t|0);ba=B;B=0;if(ba&1)sa=1;else{B=0;eb(503,ha|0,1240,229);B=0;sa=0}ba=Rb()|0;j=Q;Yua(t);pa=sa;qa=j;ra=ba}Yua(s);Yua(q);if(pa){na=ra;oa=qa}else{ta=qa;xa=ra;break c}}else{ba=Rb()|0;na=ba;oa=Q}while(0);zb(ha|0);ta=oa;xa=na}else W=85;while(0);if((W|0)==85){Z=Rb()|0;ta=Q;xa=Z}k[o>>2]=27468;k[_>>2]=27488;k[D>>2]=27560;Yua($);Ava(D);vva(_);X=ta;Y=xa;Qb(Y|0)}while(0);ja=la;ka=ma;vva(_);Qb(ka|0)}}while(0);break}default:{ka=u+56|0;ma=u+4|0;k[u>>2]=27524;k[ka>>2]=27544;B=0;wa(508,u+56|0,ma|0);la=B;B=0;if(la&1){la=Rb()|0;za=Q;Aa=la;vva(ka);Qb(Aa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[ka>>2]=27488;B=0;va(448,ma|0);la=B;B=0;do if(la&1){ja=Rb()|0;Ba=Q;Ca=ja}else{k[ma>>2]=27560;ja=u+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[u+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,ma|0,e|0);xa=B;B=0;if(xa&1){xa=Rb()|0;ta=Q;Yua(e);Yua(ja);Ava(ma);Ba=ta;Ca=xa;break}Yua(e);B=0;xa=Ia(40,u|0,145867,15)|0;ta=B;B=0;d:do if((((!(ta&1)?(B=0,o=ya(427,b|0)|0,na=B,B=0,!(na&1)):0)?(na=Lta(o)|0,B=0,oa=Ia(40,xa|0,o|0,na|0)|0,na=B,B=0,!(na&1)):0)?(B=0,na=Ia(40,oa|0,144645,14)|0,oa=B,B=0,!(oa&1)):0)?(B=0,Xa(239,na|0,0)|0,na=B,B=0,!(na&1)):0){na=Ab(20)|0;B=0;eb(502,v|0,138856,75);oa=B;B=0;do if(!(oa&1)){B=0;eb(502,w|0,139574,9);o=B;B=0;if(o&1){o=Rb()|0;ra=Q;Yua(v);Da=o;Ea=ra;break}B=0;wa(510,x|0,ma|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Fa=1;Ga=Q;Ha=ra}else{B=0;ua(163,na|0,v|0,w|0,217,x|0);ra=B;B=0;if(ra&1)Ja=1;else{B=0;eb(503,na|0,1240,229);B=0;Ja=0}ra=Rb()|0;o=Q;Yua(x);Fa=Ja;Ga=o;Ha=ra}Yua(w);Yua(v);if(Fa){Da=Ha;Ea=Ga}else{Ka=Ga;La=Ha;break d}}else{ra=Rb()|0;Da=ra;Ea=Q}while(0);zb(na|0);Ka=Ea;La=Da}else W=111;while(0);if((W|0)==111){xa=Rb()|0;Ka=Q;La=xa}k[u>>2]=27468;k[ka>>2]=27488;k[ma>>2]=27560;Yua(ja);Ava(ma);vva(ka);X=Ka;Y=La;Qb(Y|0)}while(0);za=Ba;Aa=Ca;vva(ka);Qb(Aa|0)}}}function cka(a){a=a|0;return 0}function dka(a){a=a|0;return k[a+16>>2]|0}function eka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;b=r;r=r+192|0;a=b+176|0;c=b+40|0;d=b+24|0;e=b+12|0;f=b;b=c+56|0;g=c+4|0;k[c>>2]=27524;k[b>>2]=27544;B=0;wa(508,c+56|0,g|0);h=B;B=0;if(h&1){h=Rb()|0;i=Q;j=h;vva(b);Qb(j|0)}k[c+128>>2]=0;k[c+132>>2]=-1;k[c>>2]=27468;k[b>>2]=27488;B=0;va(448,g|0);h=B;B=0;do if(h&1){l=Rb()|0;m=Q;n=l}else{k[g>>2]=27560;l=c+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[c+52>>2]=16;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;B=0;wa(509,g|0,a|0);o=B;B=0;if(o&1){o=Rb()|0;p=Q;Yua(a);Yua(l);Ava(g);m=p;n=o;break}Yua(a);B=0;o=Ia(40,c|0,145010,13)|0;p=B;B=0;a:do if(!(p&1)?(B=0,Xa(239,o|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,d|0,138856,75);s=B;B=0;do if(!(s&1)){B=0;eb(502,e|0,139078,20);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Yua(d);v=u;w=t;break}B=0;wa(510,f|0,g|0);t=B;B=0;if(t&1){t=Rb()|0;x=Q;y=t;z=1}else{B=0;ua(163,q|0,d|0,e|0,252,f|0);t=B;B=0;if(t&1)A=1;else{B=0;eb(503,q|0,1240,229);B=0;A=0}t=Rb()|0;u=Q;Yua(f);x=u;y=t;z=A}Yua(e);Yua(d);if(z){v=x;w=y}else{C=x;D=y;break a}}else{t=Rb()|0;v=Q;w=t}while(0);zb(q|0);C=v;D=w}else E=16;while(0);if((E|0)==16){o=Rb()|0;C=Q;D=o}k[c>>2]=27468;k[b>>2]=27488;k[g>>2]=27560;Yua(l);Ava(g);vva(b);Qb(D|0)}while(0);i=m;j=n;vva(b);Qb(j|0)}function fka(a){a=a|0;var b=0;k[a>>2]=40828;k[a+16>>2]=-1;b=a+20|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;p[a+64>>3]=-9999.0;return}function gka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=r;r=r+32|0;e=d+24|0;f=d+20|0;g=d+16|0;h=d+12|0;i=d+8|0;j=d+4|0;l=d;k[a>>2]=40828;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;k[j>>2]=0;k[l>>2]=0;Una(e,f,g,h,i,b);Sna(j,l,c);b=k[e>>2]|0;e=ma(b,c)|0;k[a+16>>2]=e;m=e>>>0>536870911?-1:e<<3;e=Rqa(m)|0;k[a+24>>2]=e;n=Rqa(m)|0;k[a+28>>2]=n;o=Rqa(m)|0;k[a+32>>2]=o;q=Rqa(m)|0;k[a+36>>2]=q;s=Rqa(m)|0;k[a+20>>2]=s;if((b|0)>0){m=k[f>>2]|0;t=k[g>>2]|0;u=k[h>>2]|0;v=k[j>>2]|0;w=k[i>>2]|0;x=k[l>>2]|0;if((c|0)>0){y=0;do{z=m+(y<<3)|0;A=ma(y,c)|0;B=t+(y<<3)|0;C=u+(y<<3)|0;D=w+(y<<3)|0;E=0;do{F=E+A|0;p[e+(F<<3)>>3]=+p[z>>3];p[n+(F<<3)>>3]=+p[B>>3];p[o+(F<<3)>>3]=+p[C>>3];p[q+(F<<3)>>3]=+p[v+(E<<3)>>3];p[s+(F<<3)>>3]=+p[D>>3]*+p[x+(E<<3)>>3];E=E+1|0}while((E|0)!=(c|0));y=y+1|0}while((y|0)<(b|0));G=m}else G=m}else G=k[f>>2]|0;p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;p[a+64>>3]=-9999.0;if(G)Tqa(G);k[f>>2]=0;f=k[g>>2]|0;if(f)Tqa(f);k[g>>2]=0;g=k[h>>2]|0;if(g)Tqa(g);k[h>>2]=0;h=k[j>>2]|0;if(h)Tqa(h);k[j>>2]=0;j=k[i>>2]|0;if(j)Tqa(j);k[i>>2]=0;i=k[l>>2]|0;if(!i){r=d;return}Tqa(i);r=d;return}function hka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;e=r;r=r+208|0;f=e+184|0;g=e+180|0;h=e+176|0;i=e+40|0;j=e+24|0;l=e+12|0;m=e;k[a>>2]=40828;k[g>>2]=0;k[h>>2]=0;n=a+16|0;k[n>>2]=d;B=0;eb(526,g|0,h|0,d|0);d=B;B=0;a:do if(((((!(d&1)?(o=k[n>>2]|0,q=o>>>0>536870911?-1:o<<3,B=0,s=ya(422,q|0)|0,t=B,B=0,!(t&1)):0)?(k[a+24>>2]=s,B=0,t=ya(422,q|0)|0,u=B,B=0,!(u&1)):0)?(u=a+28|0,k[u>>2]=t,B=0,v=ya(422,q|0)|0,w=B,B=0,!(w&1)):0)?(w=a+32|0,k[w>>2]=v,B=0,v=ya(422,q|0)|0,x=B,B=0,!(x&1)):0)?(x=a+36|0,k[x>>2]=v,B=0,v=ya(422,q|0)|0,q=B,B=0,!(q&1)):0){q=a+20|0;k[q>>2]=v;b:do if((b|0)==0&(c|0)==3){v=(o|0)>0;if(v){y=0;do{p[s+(y<<3)>>3]=1.0;y=y+1|0}while((y|0)<(o|0));if((v?(WEa(t|0,0,((o|0)>1?o:1)<<3|0)|0,y=k[n>>2]|0,(y|0)>0):0)?(WEa(k[w>>2]|0,0,((y|0)>1?y:1)<<3|0)|0,y=k[n>>2]|0,z=(y|0)>0,z):0){A=k[g>>2]|0;C=k[x>>2]|0;D=0;do{p[C+(D<<3)>>3]=+p[A+(D<<3)>>3];D=D+1|0}while((D|0)<(y|0));if(z){D=k[h>>2]|0;A=k[q>>2]|0;C=0;do{p[A+(C<<3)>>3]=+p[D+(C<<3)>>3];C=C+1|0}while((C|0)<(y|0))}}}}else{if((b|0)==1&(c|0)==4){if((o|0)<=0)break;WEa(s|0,0,((o|0)>1?o:1)<<3|0)|0;y=k[n>>2]|0;C=(y|0)>0;if(!C)break;D=k[u>>2]|0;A=0;do{p[D+(A<<3)>>3]=1.0;A=A+1|0}while((A|0)<(y|0));if(C){WEa(k[w>>2]|0,0,((y|0)>1?y:1)<<3|0)|0;E=k[n>>2]|0}else E=y;A=(E|0)>0;if(!A)break;D=k[g>>2]|0;z=k[x>>2]|0;v=0;do{p[z+(v<<3)>>3]=+p[D+(v<<3)>>3];v=v+1|0}while((v|0)<(E|0));if(!A)break;v=k[h>>2]|0;D=k[q>>2]|0;z=0;while(1){p[D+(z<<3)>>3]=+p[v+(z<<3)>>3];z=z+1|0;if((z|0)>=(E|0))break b}}if((b|0)==2&(c|0)==5){if((o|0)<=0)break;WEa(s|0,0,((o|0)>1?o:1)<<3|0)|0;z=k[n>>2]|0;if((z|0)<=0)break;WEa(k[u>>2]|0,0,((z|0)>1?z:1)<<3|0)|0;z=k[n>>2]|0;v=(z|0)>0;if(!v)break;D=k[w>>2]|0;A=0;do{p[D+(A<<3)>>3]=1.0;A=A+1|0}while((A|0)<(z|0));if(!v)break;A=k[g>>2]|0;D=k[x>>2]|0;y=0;do{p[D+(y<<3)>>3]=+p[A+(y<<3)>>3];y=y+1|0}while((y|0)<(z|0));y=k[h>>2]|0;A=k[q>>2]|0;D=0;while(1){p[A+(D<<3)>>3]=+p[y+(D<<3)>>3];D=D+1|0;if((D|0)>=(z|0))break b}}z=i+56|0;D=i+4|0;k[i>>2]=27524;k[z>>2]=27544;B=0;wa(508,i+56|0,D|0);y=B;B=0;if(y&1){y=Rb()|0;F=Q;G=y}else{k[i+128>>2]=0;k[i+132>>2]=-1;k[i>>2]=27468;k[z>>2]=27488;B=0;va(448,D|0);y=B;B=0;do if(y&1){A=Rb()|0;H=Q;I=A}else{k[D>>2]=27560;A=i+36|0;k[A>>2]=0;k[A+4>>2]=0;k[A+8>>2]=0;k[A+12>>2]=0;k[i+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,D|0,f|0);v=B;B=0;if(v&1){v=Rb()|0;C=Q;Yua(f);Yua(A);Ava(D);H=C;I=v;break}Yua(f);B=0;v=Ia(40,i|0,139112,23)|0;C=B;B=0;c:do if(!(C&1)?(B=0,Xa(239,v|0,0)|0,J=B,B=0,!(J&1)):0){J=Ab(20)|0;B=0;eb(502,j|0,139136,75);K=B;B=0;do if(!(K&1)){B=0;eb(502,l|0,139212,10);L=B;B=0;if(L&1){L=Rb()|0;M=Q;Yua(j);N=L;O=M;break}B=0;wa(510,m|0,D|0);M=B;B=0;if(M&1){M=Rb()|0;P=M;R=Q;S=1}else{B=0;ua(163,J|0,j|0,l|0,126,m|0);M=B;B=0;if(M&1)T=1;else{B=0;eb(503,J|0,1240,229);B=0;T=0}M=Rb()|0;L=Q;Yua(m);P=M;R=L;S=T}Yua(l);Yua(j);if(S){N=P;O=R}else{U=P;V=R;break c}}else{L=Rb()|0;N=L;O=Q}while(0);zb(J|0);U=N;V=O}else W=59;while(0);if((W|0)==59){v=Rb()|0;U=v;V=Q}k[i>>2]=27468;k[z>>2]=27488;k[D>>2]=27560;Yua(A);Ava(D);vva(z);X=V;Y=U;Qb(Y|0)}while(0);F=H;G=I}vva(z);Z=F;_=G;break a}while(0);p[a+8>>3]=-9999.0;p[a+40>>3]=-9999.0;p[a+48>>3]=-9999.0;p[a+56>>3]=-9999.0;p[a+64>>3]=-9999.0;q=k[g>>2]|0;if(q)Tqa(q);k[g>>2]=0;q=k[h>>2]|0;if(!q){r=e;return}Tqa(q);r=e;return}else W=11;while(0);if((W|0)==11){W=Rb()|0;Z=Q;_=W}X=Z;Y=_;Qb(Y|0)}function ika(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;f=r;r=r+192|0;g=f+176|0;h=f+40|0;i=f+24|0;j=f+12|0;l=f;k[a>>2]=40828;do if((b|0)==0&(c|0)==1&(d|0)==2){m=a+16|0;B=0;La(39,m|0,a+24|0,a+28|0,a+32|0,a+20|0,e|0);n=B;B=0;if(!(n&1)?(n=k[m>>2]|0,B=0,m=ya(422,(n>>>0>536870911?-1:n<<3)|0)|0,o=B,B=0,!(o&1)):0){k[a+36>>2]=m;if((n|0)>0)q=0;else{r=f;return}do{p[m+(q<<3)>>3]=-1.0;q=q+1|0}while((q|0)<(n|0));r=f;return}else s=5}else{if((b|0)==3&(c|0)==4&(d|0)==5){n=a+16|0;B=0;La(39,n|0,a+24|0,a+28|0,a+32|0,a+20|0,e|0);m=B;B=0;if(m&1){s=5;break}m=k[n>>2]|0;B=0;n=ya(422,(m>>>0>536870911?-1:m<<3)|0)|0;o=B;B=0;if(o&1){s=5;break}k[a+36>>2]=n;if((m|0)>0)t=0;else{r=f;return}do{p[n+(t<<3)>>3]=1.0;t=t+1|0}while((t|0)<(m|0));r=f;return}m=h+56|0;n=h+4|0;k[h>>2]=27524;k[m>>2]=27544;B=0;wa(508,h+56|0,n|0);o=B;B=0;if(o&1){o=Rb()|0;u=Q;v=o}else{k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);o=B;B=0;do if(o&1){w=Rb()|0;x=Q;y=w}else{k[n>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,n|0,g|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(g);Yua(w);Ava(n);x=A;y=z;break}Yua(g);B=0;z=Ia(40,h|0,139223,22)|0;A=B;B=0;a:do if(!(A&1)?(B=0,Xa(239,z|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,i|0,139136,75);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,139212,10);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(i);G=F;H=E;break}B=0;wa(510,l|0,n|0);E=B;B=0;if(E&1){E=Rb()|0;I=E;J=Q;K=1}else{B=0;ua(163,C|0,i|0,j|0,165,l|0);E=B;B=0;if(E&1)L=1;else{B=0;eb(503,C|0,1240,229);B=0;L=0}E=Rb()|0;F=Q;Yua(l);I=E;J=F;K=L}Yua(j);Yua(i);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=Q;H=F}while(0);zb(C|0);M=G;N=H}else s=28;while(0);if((s|0)==28){z=Rb()|0;M=Q;N=z}k[h>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(w);Ava(n);vva(m);O=M;P=N;Qb(P|0)}while(0);u=x;v=y}vva(m);R=u;S=v}while(0);if((s|0)==5){s=Rb()|0;R=Q;S=s}O=R;P=S;Qb(P|0)}function jka(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0.0,P=0,R=0.0,S=0.0,T=0.0,U=0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0.0,Ma=0,Na=0.0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0.0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0;g=r;r=r+560|0;h=g+544|0;i=g+532|0;j=g+520|0;l=g+384|0;m=g+368|0;n=g+84|0;o=g+72|0;q=g+232|0;s=g+60|0;t=g+48|0;u=g+36|0;v=g+96|0;w=g+24|0;x=g+12|0;y=g;k[a>>2]=40828;a:do if(e){z=a+16|0;A=a+24|0;C=a+28|0;D=a+32|0;E=a+20|0;B=0;La(39,z|0,A|0,C|0,D|0,E|0,f|0);F=B;B=0;if(!(F&1)){F=k[z>>2]|0;z=(F|0)>0;b:do if(z){G=k[A>>2]|0;H=k[C>>2]|0;I=k[D>>2]|0;if(!b){J=k[E>>2]|0;K=0;while(1){L=G+(K<<3)|0;M=+p[L>>3]*0.0;N=H+(K<<3)|0;O=+p[N>>3];P=I+(K<<3)|0;R=+p[P>>3];S=M+O*c+R*0.0;T=M+O*0.0+R*d;p[L>>3]=1.0-S-T;p[N>>3]=S;p[P>>3]=T;P=J+(K<<3)|0;p[P>>3]=+p[P>>3]*c*d;K=K+1|0;if((K|0)>=(F|0))break b}}else U=0;c:while(1){K=G+(U<<3)|0;T=+p[K>>3]*0.0;J=H+(U<<3)|0;S=+p[J>>3];P=I+(U<<3)|0;R=+p[P>>3];O=T+S*c+R*0.0;M=T+S*0.0+R*d;switch(b|0){case 2:{p[K>>3]=O;p[J>>3]=M;V=1.0-O-M;break}case 1:{p[K>>3]=M;p[J>>3]=1.0-O-M;V=O;break}default:break c}p[P>>3]=V;P=(k[E>>2]|0)+(U<<3)|0;p[P>>3]=+p[P>>3]*c*d;U=U+1|0;if((U|0)>=(F|0))break b}I=l+56|0;H=l+4|0;k[l>>2]=27524;k[I>>2]=27544;B=0;wa(508,l+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;W=Q;X=G}else{k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[I>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){P=Rb()|0;Y=Q;Z=P}else{k[H>>2]=27560;P=l+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[l+52>>2]=16;k[j>>2]=0;k[j+4>>2]=0;k[j+8>>2]=0;B=0;wa(509,H|0,j|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(j);Yua(P);Ava(H);Y=K;Z=J;break}Yua(j);B=0;J=Ia(40,l|0,139246,6)|0;K=B;B=0;d:do if(((!(K&1)?(B=0,N=Xa(242,J|0,b|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,N|0,146481,18)|0,N=B,B=0,!(N&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,m|0,139136,75);N=B;B=0;do if(!(N&1)){B=0;eb(502,n|0,139212,10);_=B;B=0;if(_&1){_=Rb()|0;$=Q;Yua(m);aa=$;ba=_;break}B=0;wa(510,o|0,H|0);_=B;B=0;if(_&1){_=Rb()|0;ca=_;da=Q;ea=1}else{B=0;ua(163,L|0,m|0,n|0,286,o|0);_=B;B=0;if(_&1)fa=1;else{B=0;eb(503,L|0,1240,229);B=0;fa=0}_=Rb()|0;$=Q;Yua(o);ca=_;da=$;ea=fa}Yua(n);Yua(m);if(ea){aa=da;ba=ca}else{ga=da;ha=ca;break d}}else{$=Rb()|0;aa=Q;ba=$}while(0);zb(L|0);ga=aa;ha=ba}else ia=29;while(0);if((ia|0)==29){J=Rb()|0;ga=Q;ha=J}k[l>>2]=27468;k[I>>2]=27488;k[H>>2]=27560;Yua(P);Ava(H);vva(I);ja=ga;ka=ha;Qb(ka|0)}while(0);W=Y;X=Z}vva(I);la=W;ma=X;break a}while(0);B=0;E=ya(422,(F>>>0>536870911?-1:F<<3)|0)|0;D=B;B=0;if(!(D&1)){k[a+36>>2]=E;if(z)na=0;else{oa=a+8|0;p[oa>>3]=-9999.0;pa=a+40|0;p[pa>>3]=-9999.0;qa=a+48|0;p[qa>>3]=-9999.0;ra=a+56|0;p[ra>>3]=-9999.0;sa=a+64|0;p[sa>>3]=-9999.0;r=g;return}do{p[E+(na<<3)>>3]=-1.0;na=na+1|0}while((na|0)<(F|0));oa=a+8|0;p[oa>>3]=-9999.0;pa=a+40|0;p[pa>>3]=-9999.0;qa=a+48|0;p[qa>>3]=-9999.0;ra=a+56|0;p[ra>>3]=-9999.0;sa=a+64|0;p[sa>>3]=-9999.0;r=g;return}else ia=8}else ia=8}else{B=0;F=ya(423,72)|0;E=B;B=0;if(E&1)ia=8;else{k[F>>2]=40828;E=F+16|0;z=F+24|0;D=F+28|0;C=F+32|0;A=F+20|0;B=0;La(39,E|0,z|0,D|0,C|0,A|0,f|0);H=B;B=0;if(!(H&1)?(H=k[E>>2]|0,B=0,G=ya(422,(H>>>0>536870911?-1:H<<3)|0)|0,J=B,B=0,!(J&1)):0){J=F+36|0;k[J>>2]=G;if((H|0)>0){K=0;do{p[G+(K<<3)>>3]=-1.0;K=K+1|0}while((K|0)!=(H|0))}B=0;H=ya(423,72)|0;K=B;B=0;if(K&1){ia=8;break}k[H>>2]=40828;K=H+16|0;G=H+24|0;N=H+28|0;$=H+32|0;_=H+20|0;B=0;La(39,K|0,G|0,N|0,$|0,_|0,f|0);ta=B;B=0;if(!(ta&1)?(ta=k[K>>2]|0,B=0,K=ya(422,(ta>>>0>536870911?-1:ta<<3)|0)|0,xa=B,B=0,!(xa&1)):0){k[H+36>>2]=K;xa=(ta|0)>0;if(xa){za=0;do{p[K+(za<<3)>>3]=-1.0;za=za+1|0}while((za|0)!=(ta|0))}za=k[E>>2]|0;Aa=(za|0)>0;e:do if(Aa){Ba=k[z>>2]|0;Ca=k[D>>2]|0;Da=k[C>>2]|0;O=1.0-d;if(!b){Ea=k[A>>2]|0;Fa=0;while(1){Ga=Ba+(Fa<<3)|0;M=+p[Ga>>3];Ha=Ca+(Fa<<3)|0;R=+p[Ha>>3];Ja=Da+(Fa<<3)|0;S=+p[Ja>>3];T=M*c+R*0.0+S*0.0;Ka=M*0.0+R+S*d;p[Ga>>3]=1.0-T-Ka;p[Ha>>3]=T;p[Ja>>3]=Ka;Ja=Ea+(Fa<<3)|0;p[Ja>>3]=O*(+p[Ja>>3]*c);Fa=Fa+1|0;if((Fa|0)>=(za|0))break e}}else Ma=0;f:while(1){Fa=Ba+(Ma<<3)|0;Ka=+p[Fa>>3];Ea=Ca+(Ma<<3)|0;T=+p[Ea>>3];I=Da+(Ma<<3)|0;S=+p[I>>3];R=Ka*c+T*0.0+S*0.0;M=Ka*0.0+T+S*d;switch(b|0){case 2:{p[Fa>>3]=R;p[Ea>>3]=M;Na=1.0-R-M;break}case 1:{p[Fa>>3]=M;p[Ea>>3]=1.0-R-M;Na=R;break}default:break f}p[I>>3]=Na;I=(k[A>>2]|0)+(Ma<<3)|0;p[I>>3]=O*(+p[I>>3]*c);Ma=Ma+1|0;if((Ma|0)>=(za|0))break e}Da=q+56|0;Ca=q+4|0;k[q>>2]=27524;k[Da>>2]=27544;B=0;wa(508,q+56|0,Ca|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Oa=Q;Pa=Ba}else{k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[Da>>2]=27488;B=0;va(448,Ca|0);Ba=B;B=0;do if(Ba&1){I=Rb()|0;Qa=Q;Ra=I}else{k[Ca>>2]=27560;I=q+36|0;k[I>>2]=0;k[I+4>>2]=0;k[I+8>>2]=0;k[I+12>>2]=0;k[q+52>>2]=16;k[i>>2]=0;k[i+4>>2]=0;k[i+8>>2]=0;B=0;wa(509,Ca|0,i|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(i);Yua(I);Ava(Ca);Qa=Fa;Ra=Ea;break}Yua(i);B=0;Ea=Ia(40,q|0,139246,6)|0;Fa=B;B=0;g:do if(Fa&1)ia=81;else{B=0;Ja=Xa(242,Ea|0,b|0)|0;Ha=B;B=0;if(Ha&1){ia=81;break}B=0;Ha=Ia(40,Ja|0,146481,18)|0;Ja=B;B=0;if(Ja&1){ia=81;break}B=0;Xa(239,Ha|0,0)|0;Ha=B;B=0;if(Ha&1){ia=81;break}Ha=Ab(20)|0;B=0;eb(502,s|0,139136,75);Ja=B;B=0;do if(!(Ja&1)){B=0;eb(502,t|0,139212,10);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Sa=Q;Yua(s);Ta=Ga;Ua=Sa;break}B=0;wa(510,u|0,Ca|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Va=1;Wa=Q;Ya=Sa}else{B=0;ua(163,Ha|0,s|0,t|0,326,u|0);Sa=B;B=0;if(Sa&1)Za=1;else{B=0;eb(503,Ha|0,1240,229);B=0;Za=0}Sa=Rb()|0;Ga=Q;Yua(u);Va=Za;Wa=Ga;Ya=Sa}Yua(t);Yua(s);if(Va){Ta=Ya;Ua=Wa}else{_a=Wa;$a=Ya;break g}}else{Sa=Rb()|0;Ta=Sa;Ua=Q}while(0);zb(Ha|0);_a=Ua;$a=Ta}while(0);if((ia|0)==81){Ea=Rb()|0;_a=Q;$a=Ea}k[q>>2]=27468;k[Da>>2]=27488;k[Ca>>2]=27560;Yua(I);Ava(Ca);vva(Da);ja=_a;ka=$a;Qb(ka|0)}while(0);Oa=Qa;Pa=Ra}vva(Da);la=Oa;ma=Pa;break a}while(0);h:do if(xa){E=k[G>>2]|0;Ca=k[N>>2]|0;Ba=k[$>>2]|0;O=1.0-c;if(!b){Ea=k[_>>2]|0;Fa=0;while(1){P=E+(Fa<<3)|0;R=+p[P>>3];Ja=Ca+(Fa<<3)|0;M=+p[Ja>>3];L=Ba+(Fa<<3)|0;S=+p[L>>3];T=R*c+M+S*0.0;Ka=R*0.0+M*0.0+S;p[P>>3]=1.0-T-Ka;p[Ja>>3]=T;p[L>>3]=Ka;L=Ea+(Fa<<3)|0;p[L>>3]=O*+p[L>>3];Fa=Fa+1|0;if((Fa|0)>=(ta|0))break h}}else ab=0;i:while(1){Fa=E+(ab<<3)|0;Ka=+p[Fa>>3];Ea=Ca+(ab<<3)|0;T=+p[Ea>>3];Da=Ba+(ab<<3)|0;S=+p[Da>>3];M=Ka*c+T+S*0.0;R=Ka*0.0+T*0.0+S;switch(b|0){case 2:{p[Fa>>3]=M;p[Ea>>3]=R;bb=1.0-M-R;break}case 1:{p[Fa>>3]=R;p[Ea>>3]=1.0-M-R;bb=M;break}default:break i}p[Da>>3]=bb;Da=(k[_>>2]|0)+(ab<<3)|0;p[Da>>3]=O*+p[Da>>3];ab=ab+1|0;if((ab|0)>=(ta|0))break h}Ba=v+56|0;Ca=v+4|0;k[v>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,v+56|0,Ca|0);E=B;B=0;if(E&1){E=Rb()|0;cb=Q;db=E}else{k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[Ba>>2]=27488;B=0;va(448,Ca|0);E=B;B=0;do if(E&1){Da=Rb()|0;fb=Q;gb=Da}else{k[Ca>>2]=27560;Da=v+36|0;k[Da>>2]=0;k[Da+4>>2]=0;k[Da+8>>2]=0;k[Da+12>>2]=0;k[v+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Ca|0,h|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(h);Yua(Da);Ava(Ca);fb=Fa;gb=Ea;break}Yua(h);B=0;Ea=Ia(40,v|0,139246,6)|0;Fa=B;B=0;j:do if(Fa&1)ia=110;else{B=0;L=Xa(242,Ea|0,b|0)|0;Ja=B;B=0;if(Ja&1){ia=110;break}B=0;Ja=Ia(40,L|0,146481,18)|0;L=B;B=0;if(L&1){ia=110;break}B=0;Xa(239,Ja|0,0)|0;Ja=B;B=0;if(Ja&1){ia=110;break}Ja=Ab(20)|0;B=0;eb(502,w|0,139136,75);L=B;B=0;do if(!(L&1)){B=0;eb(502,x|0,139212,10);P=B;B=0;if(P&1){P=Rb()|0;Sa=Q;Yua(w);hb=P;ib=Sa;break}B=0;wa(510,y|0,Ca|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;jb=1;kb=Q;lb=Sa}else{B=0;ua(163,Ja|0,w|0,x|0,357,y|0);Sa=B;B=0;if(Sa&1)mb=1;else{B=0;eb(503,Ja|0,1240,229);B=0;mb=0}Sa=Rb()|0;P=Q;Yua(y);jb=mb;kb=P;lb=Sa}Yua(x);Yua(w);if(jb){hb=lb;ib=kb}else{nb=kb;ob=lb;break j}}else{Sa=Rb()|0;hb=Sa;ib=Q}while(0);zb(Ja|0);nb=ib;ob=hb}while(0);if((ia|0)==110){Ea=Rb()|0;nb=Q;ob=Ea}k[v>>2]=27468;k[Ba>>2]=27488;k[Ca>>2]=27560;Yua(Da);Ava(Ca);vva(Ba);ja=nb;ka=ob;Qb(ka|0)}while(0);cb=fb;db=gb}vva(Ba);la=cb;ma=db;break a}while(0);Ca=za+ta|0;k[a+16>>2]=Ca;E=Ca>>>0>536870911?-1:Ca<<3;B=0;Ca=ya(422,E|0)|0;Ea=B;B=0;if(Ea&1){ia=8;break}k[a+24>>2]=Ca;B=0;Ea=ya(422,E|0)|0;Fa=B;B=0;if(Fa&1){ia=8;break}k[a+28>>2]=Ea;B=0;Fa=ya(422,E|0)|0;I=B;B=0;if(I&1){ia=8;break}k[a+32>>2]=Fa;B=0;I=ya(422,E|0)|0;L=B;B=0;if(L&1){ia=8;break}k[a+36>>2]=I;B=0;L=ya(422,E|0)|0;E=B;B=0;if(E&1){ia=8;break}k[a+20>>2]=L;if(Aa){E=k[z>>2]|0;Ha=k[D>>2]|0;Sa=k[C>>2]|0;P=k[J>>2]|0;Ga=k[A>>2]|0;pb=0;do{p[Ca+(pb<<3)>>3]=+p[E+(pb<<3)>>3];p[Ea+(pb<<3)>>3]=+p[Ha+(pb<<3)>>3];p[Fa+(pb<<3)>>3]=+p[Sa+(pb<<3)>>3];p[I+(pb<<3)>>3]=+p[P+(pb<<3)>>3];p[L+(pb<<3)>>3]=+p[Ga+(pb<<3)>>3];pb=pb+1|0}while((pb|0)<(za|0))}if(xa){pb=k[G>>2]|0;Ga=k[N>>2]|0;P=k[$>>2]|0;Sa=k[_>>2]|0;Ha=0;do{E=za+Ha|0;p[Ca+(E<<3)>>3]=+p[pb+(Ha<<3)>>3];p[Ea+(E<<3)>>3]=+p[Ga+(Ha<<3)>>3];p[Fa+(E<<3)>>3]=+p[P+(Ha<<3)>>3];p[I+(E<<3)>>3]=+p[K+(Ha<<3)>>3];p[L+(E<<3)>>3]=+p[Sa+(Ha<<3)>>3];Ha=Ha+1|0}while((Ha|0)<(ta|0))}Ec[k[(k[F>>2]|0)+4>>2]&1023](F);Ec[k[(k[H>>2]|0)+4>>2]&1023](H);oa=a+8|0;p[oa>>3]=-9999.0;pa=a+40|0;p[pa>>3]=-9999.0;qa=a+48|0;p[qa>>3]=-9999.0;ra=a+56|0;p[ra>>3]=-9999.0;sa=a+64|0;p[sa>>3]=-9999.0;r=g;return}ta=Rb()|0;Ha=Q;Sqa(H);ja=Ha;ka=ta;Qb(ka|0)}ta=Rb()|0;Ha=Q;Sqa(F);ja=Ha;ka=ta;Qb(ka|0)}}while(0);if((ia|0)==8){ia=Rb()|0;la=Q;ma=ia}ja=la;ka=ma;Qb(ka|0)}function kka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0;e=r;r=r+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;k[a>>2]=40828;k[f>>2]=0;k[g>>2]=0;k[h>>2]=0;k[i>>2]=0;Sna(f,g,c);Sna(h,i,d);j=ma(d,c)|0;k[a+16>>2]=j;l=j>>>0>536870911?-1:j<<3;j=Rqa(l)|0;k[a+24>>2]=j;m=Rqa(l)|0;k[a+28>>2]=m;n=Rqa(l)|0;k[a+32>>2]=n;o=Rqa(l)|0;k[a+36>>2]=o;q=Rqa(l)|0;k[a+20>>2]=q;if((c|0)>0){a=b+24|0;l=k[f>>2]|0;s=b+8|0;t=b+32|0;u=b+16|0;v=b+40|0;w=k[h>>2]|0;x=k[g>>2]|0;y=k[i>>2]|0;if((d|0)>0){z=0;do{A=l+(z<<3)|0;B=ma(z,d)|0;C=x+(z<<3)|0;D=0;do{E=+p[b>>3];F=+p[a>>3];G=D+B|0;p[j+(G<<3)>>3]=(E+F)*.5+(F-E)*(+p[A>>3]*.5);E=+p[s>>3];F=+p[t>>3];p[m+(G<<3)>>3]=(E+F)*.5+(F-E)*(+p[A>>3]*.5);E=+p[u>>3];F=+p[v>>3];p[n+(G<<3)>>3]=(E+F)*.5+(F-E)*(+p[A>>3]*.5);p[o+(G<<3)>>3]=+p[w+(D<<3)>>3];p[q+(G<<3)>>3]=+p[C>>3]*+p[y+(D<<3)>>3];D=D+1|0}while((D|0)!=(d|0));z=z+1|0}while((z|0)!=(c|0));H=l;I=8}else{J=l;I=7}}else{J=k[f>>2]|0;I=7}if((I|0)==7?(J|0)!=0:0){H=J;I=8}if((I|0)==8)Tqa(H);k[f>>2]=0;f=k[g>>2]|0;if(f)Tqa(f);k[g>>2]=0;g=k[h>>2]|0;if(g)Tqa(g);k[h>>2]=0;h=k[i>>2]|0;if(!h){r=e;return}Tqa(h);r=e;return}function lka(a){a=a|0;var b=0,c=0;k[a>>2]=40828;b=a+20|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+24|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+28|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+32|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+36|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function mka(a){a=a|0;lka(a);Sqa(a);return}function nka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0;b=r;r=r+4064|0;c=b+4052|0;d=b+3760|0;e=b+4040|0;f=b+3624|0;g=b+4028|0;h=b+3472|0;i=b+4016|0;j=b+3320|0;l=b+4004|0;m=b+3184|0;n=b+3992|0;o=b+3048|0;q=b+3980|0;s=b+2896|0;t=b+3968|0;u=b+2760|0;v=b+3956|0;w=b+2608|0;x=b+3944|0;y=b+2456|0;z=b+3932|0;A=b+2320|0;C=b+3920|0;D=b+2168|0;E=b+3908|0;F=b+2032|0;G=b+3896|0;H=b+1880|0;I=b+3608|0;J=b+1744|0;K=b+3456|0;L=b+1592|0;M=b+3032|0;N=b+1456|0;O=b+2744|0;P=b+1320|0;R=b+2592|0;S=b+1168|0;T=b+2304|0;U=b+1032|0;V=b+2016|0;W=b+880|0;X=b+1728|0;Y=b+728|0;Z=b+1304|0;_=b+592|0;$=b+1016|0;aa=b+440|0;ba=b+864|0;ca=b+304|0;da=b+576|0;ea=b+152|0;fa=b+288|0;ga=b+16|0;ha=b;ia=d+56|0;ja=d+4|0;k[d>>2]=27524;k[ia>>2]=27544;B=0;wa(508,d+56|0,ja|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;ma=ka;vva(ia);Qb(ma|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[ia>>2]=27488;B=0;va(448,ja|0);ka=B;B=0;do if(ka&1){na=Rb()|0;oa=Q;pa=na}else{k[ja>>2]=27560;na=d+36|0;k[na>>2]=0;k[na+4>>2]=0;k[na+8>>2]=0;k[na+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ja|0,c|0);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(c);Yua(na);Ava(ja);oa=ra;pa=qa;break}Yua(c);B=0;Ia(40,d|0,139253,12)|0;qa=B;B=0;do if(!(qa&1)?(B=0,wa(510,e|0,ja|0),ra=B,B=0,!(ra&1)):0){B=0;ya(424,e|0)|0;ra=B;B=0;if(ra&1){ra=Rb()|0;sa=Q;Yua(e);ta=sa;ua=ra;break}Yua(e);k[d>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(na);Ava(ja);vva(ia);ra=f+56|0;sa=f+4|0;k[f>>2]=27524;k[ra>>2]=27544;B=0;wa(508,f+56|0,sa|0);xa=B;B=0;if(xa&1){xa=Rb()|0;za=Q;Aa=xa;vva(ra);Qb(Aa|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[ra>>2]=27488;B=0;va(448,sa|0);xa=B;B=0;do if(xa&1){Ba=Rb()|0;Ca=Q;Da=Ba}else{k[sa>>2]=27560;Ba=f+36|0;k[Ba>>2]=0;k[Ba+4>>2]=0;k[Ba+8>>2]=0;k[Ba+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sa|0,c|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(c);Yua(Ba);Ava(sa);Ca=Fa;Da=Ea;break}Yua(c);B=0;Ea=Ia(40,f|0,139266,13)|0;Fa=B;B=0;do if(((!(Fa&1)?(Ga=a+16|0,B=0,Ha=Xa(242,Ea|0,k[Ga>>2]|0)|0,Ja=B,B=0,!(Ja&1)):0)?(B=0,Ia(40,Ha|0,149177,1)|0,Ha=B,B=0,!(Ha&1)):0)?(B=0,wa(510,g|0,sa|0),Ha=B,B=0,!(Ha&1)):0){B=0;ya(424,g|0)|0;Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ja=Q;Yua(g);Ka=Ja;La=Ha;break}Yua(g);k[f>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(Ba);Ava(sa);vva(ra);Ha=a+20|0;a:do if(!(k[Ha>>2]|0)){Ja=o+56|0;Ma=o+4|0;k[o>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,o+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Oa=Q;Pa=Na;vva(Ja);Qb(Pa|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Qa=Rb()|0;Ra=Q;Ta=Qa}else{k[Ma>>2]=27560;Qa=o+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Yua(c);Yua(Qa);Ava(Ma);Ra=Va;Ta=Ua;break}Yua(c);B=0;Ia(40,o|0,139295,15)|0;Ua=B;B=0;do if(!(Ua&1)){B=0;wa(510,q|0,Ma|0);Va=B;B=0;if(Va&1){Wa=92;break}B=0;ya(424,q|0)|0;Va=B;B=0;if(Va&1){Va=Rb()|0;Ya=Q;Yua(q);Za=Ya;_a=Va;break}else{Yua(q);k[o>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Qa);Ava(Ma);vva(Ja);break a}}else Wa=92;while(0);if((Wa|0)==92){Ua=Rb()|0;Za=Q;_a=Ua}k[o>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Qa);Ava(Ma);vva(Ja);$a=Za;ab=_a;Qb(ab|0)}while(0);Oa=Ra;Pa=Ta;vva(Ja);Qb(Pa|0)}else{Ma=h+56|0;Na=h+4|0;k[h>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,h+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;bb=Q;cb=Ua;vva(Ma);Qb(cb|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Va=Rb()|0;db=Q;eb=Va}else{k[Na>>2]=27560;Va=h+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;fb=Q;Yua(c);Yua(Va);Ava(Na);db=fb;eb=Ya;break}Yua(c);B=0;Ia(40,h|0,139280,14)|0;Ya=B;B=0;do if(Ya&1)Wa=54;else{B=0;wa(510,i|0,Na|0);fb=B;B=0;if(fb&1){Wa=54;break}B=0;ya(424,i|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(i);hb=gb;ib=fb;break}Yua(i);k[h>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Va);Ava(Na);vva(Ma);b:do if((k[Ga>>2]|0)>0){fb=j+56|0;gb=j+4|0;jb=j+56|0;kb=j+128|0;lb=j+132|0;mb=j+36|0;nb=j+52|0;ob=0;while(1){k[j>>2]=27524;k[fb>>2]=27544;B=0;wa(508,jb|0,gb|0);pb=B;B=0;if(pb&1){Wa=61;break}k[kb>>2]=0;k[lb>>2]=-1;k[j>>2]=27468;k[fb>>2]=27488;B=0;va(448,gb|0);pb=B;B=0;if(pb&1){Wa=62;break}k[gb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[nb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);pb=B;B=0;if(pb&1){Wa=60;break}Yua(c);B=0;pb=Ia(40,j|0,149175,1)|0;qb=B;B=0;if(qb&1){Wa=71;break}B=0;qb=Sa(1,pb|0,+(+p[(k[Ha>>2]|0)+(ob<<3)>>3]))|0;pb=B;B=0;if(pb&1){Wa=71;break}B=0;Ia(40,qb|0,149177,1)|0;qb=B;B=0;if(qb&1){Wa=71;break}B=0;wa(510,l|0,gb|0);qb=B;B=0;if(qb&1){Wa=71;break}B=0;ya(424,l|0)|0;qb=B;B=0;if(qb&1){Wa=72;break}Yua(l);k[j>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);ob=ob+1|0;if((ob|0)>=(k[Ga>>2]|0))break b}if((Wa|0)==60){ob=Rb()|0;nb=Q;Yua(c);Yua(mb);Ava(gb);rb=nb;sb=ob;Wa=63}else if((Wa|0)==61){ob=Rb()|0;tb=Q;ub=ob;vva(fb);Qb(ub|0)}else if((Wa|0)==62){ob=Rb()|0;rb=Q;sb=ob;Wa=63}else if((Wa|0)==71){ob=Rb()|0;vb=Q;wb=ob;Wa=73}else if((Wa|0)==72){ob=Rb()|0;nb=Q;Yua(l);vb=nb;wb=ob;Wa=73}if((Wa|0)==63){tb=rb;ub=sb;vva(fb);Qb(ub|0)}else if((Wa|0)==73){k[j>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);$a=vb;ab=wb;Qb(ab|0)}}while(0);ob=m+56|0;nb=m+4|0;k[m>>2]=27524;k[ob>>2]=27544;B=0;wa(508,m+56|0,nb|0);lb=B;B=0;if(lb&1){lb=Rb()|0;xb=Q;yb=lb;vva(ob);Qb(yb|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[ob>>2]=27488;B=0;va(448,nb|0);lb=B;B=0;do if(lb&1){kb=Rb()|0;zb=Q;Ab=kb}else{k[nb>>2]=27560;kb=m+36|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nb|0,c|0);jb=B;B=0;if(jb&1){jb=Rb()|0;qb=Q;Yua(c);Yua(kb);Ava(nb);zb=qb;Ab=jb;break}Yua(c);B=0;Ia(40,m|0,149198,2)|0;jb=B;B=0;do if(!(jb&1)){B=0;wa(510,n|0,nb|0);qb=B;B=0;if(qb&1){Wa=77;break}B=0;ya(424,n|0)|0;qb=B;B=0;if(qb&1){qb=Rb()|0;pb=Q;Yua(n);Bb=pb;Cb=qb;break}else{Yua(n);k[m>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(kb);Ava(nb);vva(ob);break a}}else Wa=77;while(0);if((Wa|0)==77){jb=Rb()|0;Bb=Q;Cb=jb}k[m>>2]=27468;k[ob>>2]=27488;k[nb>>2]=27560;Yua(kb);Ava(nb);vva(ob);$a=Bb;ab=Cb;Qb(ab|0)}while(0);xb=zb;yb=Ab;vva(ob);Qb(yb|0)}while(0);if((Wa|0)==54){Ya=Rb()|0;hb=Q;ib=Ya}k[h>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Va);Ava(Na);vva(Ma);$a=hb;ab=ib;Qb(ab|0)}while(0);bb=db;cb=eb;vva(Ma);Qb(cb|0)}while(0);Ha=a+24|0;c:do if(!(k[Ha>>2]|0)){Na=y+56|0;Ua=y+4|0;k[y>>2]=27524;k[Na>>2]=27544;B=0;wa(508,y+56|0,Ua|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Db=Q;Eb=Ja;vva(Na);Qb(Eb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Na>>2]=27488;B=0;va(448,Ua|0);Ja=B;B=0;do if(Ja&1){Ya=Rb()|0;Fb=Q;Gb=Ya}else{k[Ua>>2]=27560;Ya=y+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;nb=Q;Yua(c);Yua(Ya);Ava(Ua);Fb=nb;Gb=Qa;break}Yua(c);B=0;Ia(40,y|0,139326,15)|0;Qa=B;B=0;do if(!(Qa&1)){B=0;wa(510,z|0,Ua|0);nb=B;B=0;if(nb&1){Wa=156;break}B=0;ya(424,z|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(z);Hb=lb;Ib=nb;break}else{Yua(z);k[y>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Ya);Ava(Ua);vva(Na);break c}}else Wa=156;while(0);if((Wa|0)==156){Qa=Rb()|0;Hb=Q;Ib=Qa}k[y>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Ya);Ava(Ua);vva(Na);$a=Hb;ab=Ib;Qb(ab|0)}while(0);Db=Fb;Eb=Gb;vva(Na);Qb(Eb|0)}else{Ua=s+56|0;Ja=s+4|0;k[s>>2]=27524;k[Ua>>2]=27544;B=0;wa(508,s+56|0,Ja|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Jb=Q;Kb=Ma;vva(Ua);Qb(Kb|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Ua>>2]=27488;B=0;va(448,Ja|0);Ma=B;B=0;do if(Ma&1){Qa=Rb()|0;Lb=Q;Mb=Qa}else{k[Ja>>2]=27560;Qa=s+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;nb=Q;Yua(c);Yua(Qa);Ava(Ja);Lb=nb;Mb=Va;break}Yua(c);B=0;Ia(40,s|0,139311,14)|0;Va=B;B=0;do if(Va&1)Wa=118;else{B=0;wa(510,t|0,Ja|0);nb=B;B=0;if(nb&1){Wa=118;break}B=0;ya(424,t|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(t);Nb=lb;Ob=nb;break}Yua(t);k[s>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Qa);Ava(Ja);vva(Ua);d:do if((k[Ga>>2]|0)>0){nb=u+56|0;lb=u+4|0;jb=u+56|0;fb=u+128|0;gb=u+132|0;mb=u+36|0;qb=u+52|0;pb=0;while(1){k[u>>2]=27524;k[nb>>2]=27544;B=0;wa(508,jb|0,lb|0);Pb=B;B=0;if(Pb&1){Wa=125;break}k[fb>>2]=0;k[gb>>2]=-1;k[u>>2]=27468;k[nb>>2]=27488;B=0;va(448,lb|0);Pb=B;B=0;if(Pb&1){Wa=126;break}k[lb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[qb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);Pb=B;B=0;if(Pb&1){Wa=124;break}Yua(c);B=0;Pb=Ia(40,u|0,149175,1)|0;Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;Sb=Sa(1,Pb|0,+(+p[(k[Ha>>2]|0)+(pb<<3)>>3]))|0;Pb=B;B=0;if(Pb&1){Wa=135;break}B=0;Ia(40,Sb|0,149177,1)|0;Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;wa(510,v|0,lb|0);Sb=B;B=0;if(Sb&1){Wa=135;break}B=0;ya(424,v|0)|0;Sb=B;B=0;if(Sb&1){Wa=136;break}Yua(v);k[u>>2]=27468;k[nb>>2]=27488;k[lb>>2]=27560;Yua(mb);Ava(lb);vva(nb);pb=pb+1|0;if((pb|0)>=(k[Ga>>2]|0))break d}if((Wa|0)==124){pb=Rb()|0;qb=Q;Yua(c);Yua(mb);Ava(lb);Tb=qb;Ub=pb;Wa=127}else if((Wa|0)==125){pb=Rb()|0;Vb=Q;Wb=pb;vva(nb);Qb(Wb|0)}else if((Wa|0)==126){pb=Rb()|0;Tb=Q;Ub=pb;Wa=127}else if((Wa|0)==135){pb=Rb()|0;Xb=Q;Yb=pb;Wa=137}else if((Wa|0)==136){pb=Rb()|0;qb=Q;Yua(v);Xb=qb;Yb=pb;Wa=137}if((Wa|0)==127){Vb=Tb;Wb=Ub;vva(nb);Qb(Wb|0)}else if((Wa|0)==137){k[u>>2]=27468;k[nb>>2]=27488;k[lb>>2]=27560;Yua(mb);Ava(lb);vva(nb);$a=Xb;ab=Yb;Qb(ab|0)}}while(0);ob=w+56|0;pb=w+4|0;k[w>>2]=27524;k[ob>>2]=27544;B=0;wa(508,w+56|0,pb|0);qb=B;B=0;if(qb&1){qb=Rb()|0;Zb=Q;_b=qb;vva(ob);Qb(_b|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[ob>>2]=27488;B=0;va(448,pb|0);qb=B;B=0;do if(qb&1){gb=Rb()|0;$b=Q;ac=gb}else{k[pb>>2]=27560;gb=w+36|0;k[gb>>2]=0;k[gb+4>>2]=0;k[gb+8>>2]=0;k[gb+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pb|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;jb=Q;Yua(c);Yua(gb);Ava(pb);$b=jb;ac=fb;break}Yua(c);B=0;Ia(40,w|0,149198,2)|0;fb=B;B=0;do if(!(fb&1)){B=0;wa(510,x|0,pb|0);jb=B;B=0;if(jb&1){Wa=141;break}B=0;ya(424,x|0)|0;jb=B;B=0;if(jb&1){jb=Rb()|0;kb=Q;Yua(x);bc=kb;cc=jb;break}else{Yua(x);k[w>>2]=27468;k[ob>>2]=27488;k[pb>>2]=27560;Yua(gb);Ava(pb);vva(ob);break c}}else Wa=141;while(0);if((Wa|0)==141){fb=Rb()|0;bc=Q;cc=fb}k[w>>2]=27468;k[ob>>2]=27488;k[pb>>2]=27560;Yua(gb);Ava(pb);vva(ob);$a=bc;ab=cc;Qb(ab|0)}while(0);Zb=$b;_b=ac;vva(ob);Qb(_b|0)}while(0);if((Wa|0)==118){Va=Rb()|0;Nb=Q;Ob=Va}k[s>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Qa);Ava(Ja);vva(Ua);$a=Nb;ab=Ob;Qb(ab|0)}while(0);Jb=Lb;Kb=Mb;vva(Ua);Qb(Kb|0)}while(0);Ha=a+28|0;e:do if(!(k[Ha>>2]|0)){Ja=H+56|0;Ma=H+4|0;k[H>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,H+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;dc=Q;ec=Na;vva(Ja);Qb(ec|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Va=Rb()|0;fc=Q;gc=Va}else{k[Ma>>2]=27560;Va=H+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[H+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;pb=Q;Yua(c);Yua(Va);Ava(Ma);fc=pb;gc=Ya;break}Yua(c);B=0;Ia(40,H|0,139357,15)|0;Ya=B;B=0;do if(!(Ya&1)){B=0;wa(510,I|0,Ma|0);pb=B;B=0;if(pb&1){Wa=220;break}B=0;ya(424,I|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(I);hc=qb;ic=pb;break}else{Yua(I);k[H>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Va);Ava(Ma);vva(Ja);break e}}else Wa=220;while(0);if((Wa|0)==220){Ya=Rb()|0;hc=Q;ic=Ya}k[H>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Va);Ava(Ma);vva(Ja);$a=hc;ab=ic;Qb(ab|0)}while(0);dc=fc;ec=gc;vva(Ja);Qb(ec|0)}else{Ma=A+56|0;Na=A+4|0;k[A>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,A+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;jc=Q;kc=Ua;vva(Ma);Qb(kc|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Ya=Rb()|0;lc=Q;mc=Ya}else{k[Na>>2]=27560;Ya=A+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;pb=Q;Yua(c);Yua(Ya);Ava(Na);lc=pb;mc=Qa;break}Yua(c);B=0;Ia(40,A|0,139342,14)|0;Qa=B;B=0;do if(Qa&1)Wa=182;else{B=0;wa(510,C|0,Na|0);pb=B;B=0;if(pb&1){Wa=182;break}B=0;ya(424,C|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(C);nc=qb;oc=pb;break}Yua(C);k[A>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ya);Ava(Na);vva(Ma);f:do if((k[Ga>>2]|0)>0){pb=D+56|0;qb=D+4|0;fb=D+56|0;nb=D+128|0;lb=D+132|0;mb=D+36|0;jb=D+52|0;kb=0;while(1){k[D>>2]=27524;k[pb>>2]=27544;B=0;wa(508,fb|0,qb|0);Sb=B;B=0;if(Sb&1){Wa=189;break}k[nb>>2]=0;k[lb>>2]=-1;k[D>>2]=27468;k[pb>>2]=27488;B=0;va(448,qb|0);Sb=B;B=0;if(Sb&1){Wa=190;break}k[qb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[jb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qb|0,c|0);Sb=B;B=0;if(Sb&1){Wa=188;break}Yua(c);B=0;Sb=Ia(40,D|0,149175,1)|0;Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;Pb=Sa(1,Sb|0,+(+p[(k[Ha>>2]|0)+(kb<<3)>>3]))|0;Sb=B;B=0;if(Sb&1){Wa=199;break}B=0;Ia(40,Pb|0,149177,1)|0;Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;wa(510,E|0,qb|0);Pb=B;B=0;if(Pb&1){Wa=199;break}B=0;ya(424,E|0)|0;Pb=B;B=0;if(Pb&1){Wa=200;break}Yua(E);k[D>>2]=27468;k[pb>>2]=27488;k[qb>>2]=27560;Yua(mb);Ava(qb);vva(pb);kb=kb+1|0;if((kb|0)>=(k[Ga>>2]|0))break f}if((Wa|0)==188){kb=Rb()|0;jb=Q;Yua(c);Yua(mb);Ava(qb);pc=jb;qc=kb;Wa=191}else if((Wa|0)==189){kb=Rb()|0;rc=Q;sc=kb;vva(pb);Qb(sc|0)}else if((Wa|0)==190){kb=Rb()|0;pc=Q;qc=kb;Wa=191}else if((Wa|0)==199){kb=Rb()|0;tc=Q;uc=kb;Wa=201}else if((Wa|0)==200){kb=Rb()|0;jb=Q;Yua(E);tc=jb;uc=kb;Wa=201}if((Wa|0)==191){rc=pc;sc=qc;vva(pb);Qb(sc|0)}else if((Wa|0)==201){k[D>>2]=27468;k[pb>>2]=27488;k[qb>>2]=27560;Yua(mb);Ava(qb);vva(pb);$a=tc;ab=uc;Qb(ab|0)}}while(0);ob=F+56|0;kb=F+4|0;k[F>>2]=27524;k[ob>>2]=27544;B=0;wa(508,F+56|0,kb|0);jb=B;B=0;if(jb&1){jb=Rb()|0;vc=Q;wc=jb;vva(ob);Qb(wc|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[ob>>2]=27488;B=0;va(448,kb|0);jb=B;B=0;do if(jb&1){lb=Rb()|0;xc=Q;yc=lb}else{k[kb>>2]=27560;lb=F+36|0;k[lb>>2]=0;k[lb+4>>2]=0;k[lb+8>>2]=0;k[lb+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,kb|0,c|0);nb=B;B=0;if(nb&1){nb=Rb()|0;fb=Q;Yua(c);Yua(lb);Ava(kb);xc=fb;yc=nb;break}Yua(c);B=0;Ia(40,F|0,149198,2)|0;nb=B;B=0;do if(!(nb&1)){B=0;wa(510,G|0,kb|0);fb=B;B=0;if(fb&1){Wa=205;break}B=0;ya(424,G|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(G);zc=gb;Ac=fb;break}else{Yua(G);k[F>>2]=27468;k[ob>>2]=27488;k[kb>>2]=27560;Yua(lb);Ava(kb);vva(ob);break e}}else Wa=205;while(0);if((Wa|0)==205){nb=Rb()|0;zc=Q;Ac=nb}k[F>>2]=27468;k[ob>>2]=27488;k[kb>>2]=27560;Yua(lb);Ava(kb);vva(ob);$a=zc;ab=Ac;Qb(ab|0)}while(0);vc=xc;wc=yc;vva(ob);Qb(wc|0)}while(0);if((Wa|0)==182){Qa=Rb()|0;nc=Q;oc=Qa}k[A>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Ya);Ava(Na);vva(Ma);$a=nc;ab=oc;Qb(ab|0)}while(0);jc=lc;kc=mc;vva(Ma);Qb(kc|0)}while(0);Ha=a+32|0;g:do if(!(k[Ha>>2]|0)){Na=P+56|0;Ua=P+4|0;k[P>>2]=27524;k[Na>>2]=27544;B=0;wa(508,P+56|0,Ua|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Bc=Q;Cc=Ja;vva(Na);Qb(Cc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Na>>2]=27488;B=0;va(448,Ua|0);Ja=B;B=0;do if(Ja&1){Qa=Rb()|0;Dc=Q;Ec=Qa}else{k[Ua>>2]=27560;Qa=P+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;kb=Q;Yua(c);Yua(Qa);Ava(Ua);Dc=kb;Ec=Va;break}Yua(c);B=0;Ia(40,P|0,139388,15)|0;Va=B;B=0;do if(!(Va&1)){B=0;wa(510,R|0,Ua|0);kb=B;B=0;if(kb&1){Wa=284;break}B=0;ya(424,R|0)|0;kb=B;B=0;if(kb&1){kb=Rb()|0;jb=Q;Yua(R);Fc=jb;Gc=kb;break}else{Yua(R);k[P>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Qa);Ava(Ua);vva(Na);break g}}else Wa=284;while(0);if((Wa|0)==284){Va=Rb()|0;Fc=Q;Gc=Va}k[P>>2]=27468;k[Na>>2]=27488;k[Ua>>2]=27560;Yua(Qa);Ava(Ua);vva(Na);$a=Fc;ab=Gc;Qb(ab|0)}while(0);Bc=Dc;Cc=Ec;vva(Na);Qb(Cc|0)}else{Ua=J+56|0;Ja=J+4|0;k[J>>2]=27524;k[Ua>>2]=27544;B=0;wa(508,J+56|0,Ja|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Hc=Q;Ic=Ma;vva(Ua);Qb(Ic|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[Ua>>2]=27488;B=0;va(448,Ja|0);Ma=B;B=0;do if(Ma&1){Va=Rb()|0;Jc=Q;Kc=Va}else{k[Ja>>2]=27560;Va=J+36|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ja|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;kb=Q;Yua(c);Yua(Va);Ava(Ja);Jc=kb;Kc=Ya;break}Yua(c);B=0;Ia(40,J|0,139373,14)|0;Ya=B;B=0;do if(Ya&1)Wa=246;else{B=0;wa(510,K|0,Ja|0);kb=B;B=0;if(kb&1){Wa=246;break}B=0;ya(424,K|0)|0;kb=B;B=0;if(kb&1){kb=Rb()|0;jb=Q;Yua(K);Lc=jb;Mc=kb;break}Yua(K);k[J>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Va);Ava(Ja);vva(Ua);h:do if((k[Ga>>2]|0)>0){kb=L+56|0;jb=L+4|0;nb=L+56|0;pb=L+128|0;qb=L+132|0;mb=L+36|0;fb=L+52|0;gb=0;while(1){k[L>>2]=27524;k[kb>>2]=27544;B=0;wa(508,nb|0,jb|0);Pb=B;B=0;if(Pb&1){Wa=253;break}k[pb>>2]=0;k[qb>>2]=-1;k[L>>2]=27468;k[kb>>2]=27488;B=0;va(448,jb|0);Pb=B;B=0;if(Pb&1){Wa=254;break}k[jb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[fb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,jb|0,c|0);Pb=B;B=0;if(Pb&1){Wa=252;break}Yua(c);B=0;Pb=Ia(40,L|0,149175,1)|0;Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;Sb=Sa(1,Pb|0,+(+p[(k[Ha>>2]|0)+(gb<<3)>>3]))|0;Pb=B;B=0;if(Pb&1){Wa=263;break}B=0;Ia(40,Sb|0,149177,1)|0;Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;wa(510,M|0,jb|0);Sb=B;B=0;if(Sb&1){Wa=263;break}B=0;ya(424,M|0)|0;Sb=B;B=0;if(Sb&1){Wa=264;break}Yua(M);k[L>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(mb);Ava(jb);vva(kb);gb=gb+1|0;if((gb|0)>=(k[Ga>>2]|0))break h}if((Wa|0)==252){gb=Rb()|0;fb=Q;Yua(c);Yua(mb);Ava(jb);Nc=fb;Oc=gb;Wa=255}else if((Wa|0)==253){gb=Rb()|0;Pc=Q;Qc=gb;vva(kb);Qb(Qc|0)}else if((Wa|0)==254){gb=Rb()|0;Nc=Q;Oc=gb;Wa=255}else if((Wa|0)==263){gb=Rb()|0;Rc=Q;Sc=gb;Wa=265}else if((Wa|0)==264){gb=Rb()|0;fb=Q;Yua(M);Rc=fb;Sc=gb;Wa=265}if((Wa|0)==255){Pc=Nc;Qc=Oc;vva(kb);Qb(Qc|0)}else if((Wa|0)==265){k[L>>2]=27468;k[kb>>2]=27488;k[jb>>2]=27560;Yua(mb);Ava(jb);vva(kb);$a=Rc;ab=Sc;Qb(ab|0)}}while(0);ob=N+56|0;gb=N+4|0;k[N>>2]=27524;k[ob>>2]=27544;B=0;wa(508,N+56|0,gb|0);fb=B;B=0;if(fb&1){fb=Rb()|0;Tc=Q;Uc=fb;vva(ob);Qb(Uc|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[ob>>2]=27488;B=0;va(448,gb|0);fb=B;B=0;do if(fb&1){qb=Rb()|0;Vc=Q;Wc=qb}else{k[gb>>2]=27560;qb=N+36|0;k[qb>>2]=0;k[qb+4>>2]=0;k[qb+8>>2]=0;k[qb+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);pb=B;B=0;if(pb&1){pb=Rb()|0;nb=Q;Yua(c);Yua(qb);Ava(gb);Vc=nb;Wc=pb;break}Yua(c);B=0;Ia(40,N|0,149198,2)|0;pb=B;B=0;do if(!(pb&1)){B=0;wa(510,O|0,gb|0);nb=B;B=0;if(nb&1){Wa=269;break}B=0;ya(424,O|0)|0;nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(O);Xc=lb;Yc=nb;break}else{Yua(O);k[N>>2]=27468;k[ob>>2]=27488;k[gb>>2]=27560;Yua(qb);Ava(gb);vva(ob);break g}}else Wa=269;while(0);if((Wa|0)==269){pb=Rb()|0;Xc=Q;Yc=pb}k[N>>2]=27468;k[ob>>2]=27488;k[gb>>2]=27560;Yua(qb);Ava(gb);vva(ob);$a=Xc;ab=Yc;Qb(ab|0)}while(0);Tc=Vc;Uc=Wc;vva(ob);Qb(Uc|0)}while(0);if((Wa|0)==246){Ya=Rb()|0;Lc=Q;Mc=Ya}k[J>>2]=27468;k[Ua>>2]=27488;k[Ja>>2]=27560;Yua(Va);Ava(Ja);vva(Ua);$a=Lc;ab=Mc;Qb(ab|0)}while(0);Hc=Jc;Ic=Kc;vva(Ua);Qb(Ic|0)}while(0);Ha=a+36|0;i:do if(!(k[Ha>>2]|0)){Ja=Y+56|0;Ma=Y+4|0;k[Y>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,Y+56|0,Ma|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Zc=Q;_c=Na;vva(Ja);Qb(_c|0)}k[Y+128>>2]=0;k[Y+132>>2]=-1;k[Y>>2]=27468;k[Ja>>2]=27488;B=0;va(448,Ma|0);Na=B;B=0;do if(Na&1){Ya=Rb()|0;$c=Q;ad=Ya}else{k[Ma>>2]=27560;Ya=Y+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[Y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ma|0,c|0);Qa=B;B=0;if(Qa&1){Qa=Rb()|0;gb=Q;Yua(c);Yua(Ya);Ava(Ma);$c=gb;ad=Qa;break}Yua(c);B=0;Ia(40,Y|0,139419,15)|0;Qa=B;B=0;do if(!(Qa&1)){B=0;wa(510,Z|0,Ma|0);gb=B;B=0;if(gb&1){Wa=348;break}B=0;ya(424,Z|0)|0;gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(Z);bd=fb;cd=gb;break}else{Yua(Z);k[Y>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Ya);Ava(Ma);vva(Ja);break i}}else Wa=348;while(0);if((Wa|0)==348){Qa=Rb()|0;bd=Q;cd=Qa}k[Y>>2]=27468;k[Ja>>2]=27488;k[Ma>>2]=27560;Yua(Ya);Ava(Ma);vva(Ja);$a=bd;ab=cd;Qb(ab|0)}while(0);Zc=$c;_c=ad;vva(Ja);Qb(_c|0)}else{Ma=S+56|0;Na=S+4|0;k[S>>2]=27524;k[Ma>>2]=27544;B=0;wa(508,S+56|0,Na|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;dd=Q;ed=Ua;vva(Ma);Qb(ed|0)}k[S+128>>2]=0;k[S+132>>2]=-1;k[S>>2]=27468;k[Ma>>2]=27488;B=0;va(448,Na|0);Ua=B;B=0;do if(Ua&1){Qa=Rb()|0;fd=Q;gd=Qa}else{k[Na>>2]=27560;Qa=S+36|0;k[Qa>>2]=0;k[Qa+4>>2]=0;k[Qa+8>>2]=0;k[Qa+12>>2]=0;k[S+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Na|0,c|0);Va=B;B=0;if(Va&1){Va=Rb()|0;gb=Q;Yua(c);Yua(Qa);Ava(Na);fd=gb;gd=Va;break}Yua(c);B=0;Ia(40,S|0,139404,14)|0;Va=B;B=0;do if(Va&1)Wa=310;else{B=0;wa(510,T|0,Na|0);gb=B;B=0;if(gb&1){Wa=310;break}B=0;ya(424,T|0)|0;gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(T);hd=fb;id=gb;break}Yua(T);k[S>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Qa);Ava(Na);vva(Ma);j:do if((k[Ga>>2]|0)>0){gb=U+56|0;fb=U+4|0;pb=U+56|0;kb=U+128|0;jb=U+132|0;mb=U+36|0;nb=U+52|0;lb=0;while(1){k[U>>2]=27524;k[gb>>2]=27544;B=0;wa(508,pb|0,fb|0);Sb=B;B=0;if(Sb&1){Wa=317;break}k[kb>>2]=0;k[jb>>2]=-1;k[U>>2]=27468;k[gb>>2]=27488;B=0;va(448,fb|0);Sb=B;B=0;if(Sb&1){Wa=318;break}k[fb>>2]=27560;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[nb>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fb|0,c|0);Sb=B;B=0;if(Sb&1){Wa=316;break}Yua(c);B=0;Sb=Ia(40,U|0,149175,1)|0;Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;Pb=Sa(1,Sb|0,+(+p[(k[Ha>>2]|0)+(lb<<3)>>3]))|0;Sb=B;B=0;if(Sb&1){Wa=327;break}B=0;Ia(40,Pb|0,149177,1)|0;Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;wa(510,V|0,fb|0);Pb=B;B=0;if(Pb&1){Wa=327;break}B=0;ya(424,V|0)|0;Pb=B;B=0;if(Pb&1){Wa=328;break}Yua(V);k[U>>2]=27468;k[gb>>2]=27488;k[fb>>2]=27560;Yua(mb);Ava(fb);vva(gb);lb=lb+1|0;if((lb|0)>=(k[Ga>>2]|0))break j}if((Wa|0)==316){lb=Rb()|0;nb=Q;Yua(c);Yua(mb);Ava(fb);jd=nb;kd=lb;Wa=319}else if((Wa|0)==317){lb=Rb()|0;ld=Q;md=lb;vva(gb);Qb(md|0)}else if((Wa|0)==318){lb=Rb()|0;jd=Q;kd=lb;Wa=319}else if((Wa|0)==327){lb=Rb()|0;nd=Q;od=lb;Wa=329}else if((Wa|0)==328){lb=Rb()|0;nb=Q;Yua(V);nd=nb;od=lb;Wa=329}if((Wa|0)==319){ld=jd;md=kd;vva(gb);Qb(md|0)}else if((Wa|0)==329){k[U>>2]=27468;k[gb>>2]=27488;k[fb>>2]=27560;Yua(mb);Ava(fb);vva(gb);$a=nd;ab=od;Qb(ab|0)}}while(0);ob=W+56|0;lb=W+4|0;k[W>>2]=27524;k[ob>>2]=27544;B=0;wa(508,W+56|0,lb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;pd=Q;qd=nb;vva(ob);Qb(qd|0)}k[W+128>>2]=0;k[W+132>>2]=-1;k[W>>2]=27468;k[ob>>2]=27488;B=0;va(448,lb|0);nb=B;B=0;do if(nb&1){jb=Rb()|0;rd=Q;sd=jb}else{k[lb>>2]=27560;jb=W+36|0;k[jb>>2]=0;k[jb+4>>2]=0;k[jb+8>>2]=0;k[jb+12>>2]=0;k[W+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);kb=B;B=0;if(kb&1){kb=Rb()|0;pb=Q;Yua(c);Yua(jb);Ava(lb);rd=pb;sd=kb;break}Yua(c);B=0;Ia(40,W|0,149198,2)|0;kb=B;B=0;do if(!(kb&1)){B=0;wa(510,X|0,lb|0);pb=B;B=0;if(pb&1){Wa=333;break}B=0;ya(424,X|0)|0;pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(X);td=qb;ud=pb;break}else{Yua(X);k[W>>2]=27468;k[ob>>2]=27488;k[lb>>2]=27560;Yua(jb);Ava(lb);vva(ob);break i}}else Wa=333;while(0);if((Wa|0)==333){kb=Rb()|0;td=Q;ud=kb}k[W>>2]=27468;k[ob>>2]=27488;k[lb>>2]=27560;Yua(jb);Ava(lb);vva(ob);$a=td;ab=ud;Qb(ab|0)}while(0);pd=rd;qd=sd;vva(ob);Qb(qd|0)}while(0);if((Wa|0)==310){Va=Rb()|0;hd=Q;id=Va}k[S>>2]=27468;k[Ma>>2]=27488;k[Na>>2]=27560;Yua(Qa);Ava(Na);vva(Ma);$a=hd;ab=id;Qb(ab|0)}while(0);dd=fd;ed=gd;vva(Ma);Qb(ed|0)}while(0);Ga=_+56|0;Ha=_+4|0;k[_>>2]=27524;k[Ga>>2]=27544;B=0;wa(508,_+56|0,Ha|0);Na=B;B=0;if(Na&1){Na=Rb()|0;vd=Q;wd=Na;vva(Ga);Qb(wd|0)}k[_+128>>2]=0;k[_+132>>2]=-1;k[_>>2]=27468;k[Ga>>2]=27488;B=0;va(448,Ha|0);Na=B;B=0;do if(Na&1){Ua=Rb()|0;xd=Q;yd=Ua}else{k[Ha>>2]=27560;Ua=_+36|0;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[_+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ha|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;Va=Q;Yua(c);Yua(Ua);Ava(Ha);xd=Va;yd=Ja;break}Yua(c);B=0;Ja=Ia(40,_|0,139435,12)|0;Va=B;B=0;do if(Va&1)Wa=417;else{B=0;Ya=Sa(1,Ja|0,+(+p[a+8>>3]))|0;lb=B;B=0;if(lb&1){Wa=417;break}B=0;Ia(40,Ya|0,149177,1)|0;Ya=B;B=0;if(Ya&1){Wa=417;break}B=0;wa(510,$|0,Ha|0);Ya=B;B=0;if(Ya&1){Wa=417;break}B=0;ya(424,$|0)|0;Ya=B;B=0;if(Ya&1){Ya=Rb()|0;lb=Q;Yua($);zd=lb;Ad=Ya;break}Yua($);k[_>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Ua);Ava(Ha);vva(Ga);Ya=aa+56|0;lb=aa+4|0;k[aa>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,aa+56|0,lb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Bd=Q;Cd=nb;vva(Ya);Qb(Cd|0)}k[aa+128>>2]=0;k[aa+132>>2]=-1;k[aa>>2]=27468;k[Ya>>2]=27488;B=0;va(448,lb|0);nb=B;B=0;do if(nb&1){kb=Rb()|0;Dd=Q;Ed=kb}else{k[lb>>2]=27560;kb=aa+36|0;k[kb>>2]=0;k[kb+4>>2]=0;k[kb+8>>2]=0;k[kb+12>>2]=0;k[aa+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,lb|0,c|0);gb=B;B=0;if(gb&1){gb=Rb()|0;fb=Q;Yua(c);Yua(kb);Ava(lb);Dd=fb;Ed=gb;break}Yua(c);B=0;gb=Ia(40,aa|0,139448,12)|0;fb=B;B=0;do if(fb&1)Wa=420;else{B=0;mb=Sa(1,gb|0,+(+p[a+40>>3]))|0;pb=B;B=0;if(pb&1){Wa=420;break}B=0;Ia(40,mb|0,149177,1)|0;mb=B;B=0;if(mb&1){Wa=420;break}B=0;wa(510,ba|0,lb|0);mb=B;B=0;if(mb&1){Wa=420;break}B=0;ya(424,ba|0)|0;mb=B;B=0;if(mb&1){mb=Rb()|0;pb=Q;Yua(ba);Fd=pb;Gd=mb;break}Yua(ba);k[aa>>2]=27468;k[Ya>>2]=27488;k[lb>>2]=27560;Yua(kb);Ava(lb);vva(Ya);mb=ca+56|0;pb=ca+4|0;k[ca>>2]=27524;k[mb>>2]=27544;B=0;wa(508,ca+56|0,pb|0);qb=B;B=0;if(qb&1){qb=Rb()|0;Hd=Q;Id=qb;vva(mb);Qb(Id|0)}k[ca+128>>2]=0;k[ca+132>>2]=-1;k[ca>>2]=27468;k[mb>>2]=27488;B=0;va(448,pb|0);qb=B;B=0;do if(qb&1){Pb=Rb()|0;Jd=Q;Kd=Pb}else{k[pb>>2]=27560;Pb=ca+36|0;k[Pb>>2]=0;k[Pb+4>>2]=0;k[Pb+8>>2]=0;k[Pb+12>>2]=0;k[ca+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pb|0,c|0);Sb=B;B=0;if(Sb&1){Sb=Rb()|0;Ld=Q;Yua(c);Yua(Pb);Ava(pb);Jd=Ld;Kd=Sb;break}Yua(c);B=0;Sb=Ia(40,ca|0,139461,12)|0;Ld=B;B=0;do if(Ld&1)Wa=423;else{B=0;Md=Sa(1,Sb|0,+(+p[a+48>>3]))|0;Nd=B;B=0;if(Nd&1){Wa=423;break}B=0;Ia(40,Md|0,149177,1)|0;Md=B;B=0;if(Md&1){Wa=423;break}B=0;wa(510,da|0,pb|0);Md=B;B=0;if(Md&1){Wa=423;break}B=0;ya(424,da|0)|0;Md=B;B=0;if(Md&1){Md=Rb()|0;Nd=Q;Yua(da);Od=Nd;Pd=Md;break}Yua(da);k[ca>>2]=27468;k[mb>>2]=27488;k[pb>>2]=27560;Yua(Pb);Ava(pb);vva(mb);Md=ea+56|0;Nd=ea+4|0;k[ea>>2]=27524;k[Md>>2]=27544;B=0;wa(508,ea+56|0,Nd|0);Qd=B;B=0;if(Qd&1){Qd=Rb()|0;Rd=Q;Sd=Qd;vva(Md);Qb(Sd|0)}k[ea+128>>2]=0;k[ea+132>>2]=-1;k[ea>>2]=27468;k[Md>>2]=27488;B=0;va(448,Nd|0);Qd=B;B=0;do if(Qd&1){Td=Rb()|0;Ud=Q;Vd=Td}else{k[Nd>>2]=27560;Td=ea+36|0;k[Td>>2]=0;k[Td+4>>2]=0;k[Td+8>>2]=0;k[Td+12>>2]=0;k[ea+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Nd|0,c|0);Wd=B;B=0;if(Wd&1){Wd=Rb()|0;Xd=Q;Yua(c);Yua(Td);Ava(Nd);Ud=Xd;Vd=Wd;break}Yua(c);B=0;Wd=Ia(40,ea|0,139474,12)|0;Xd=B;B=0;do if(Xd&1)Wa=426;else{B=0;Yd=Sa(1,Wd|0,+(+p[a+56>>3]))|0;Zd=B;B=0;if(Zd&1){Wa=426;break}B=0;Ia(40,Yd|0,149177,1)|0;Yd=B;B=0;if(Yd&1){Wa=426;break}B=0;wa(510,fa|0,Nd|0);Yd=B;B=0;if(Yd&1){Wa=426;break}B=0;ya(424,fa|0)|0;Yd=B;B=0;if(Yd&1){Yd=Rb()|0;Zd=Q;Yua(fa);_d=Zd;$d=Yd;break}Yua(fa);k[ea>>2]=27468;k[Md>>2]=27488;k[Nd>>2]=27560;Yua(Td);Ava(Nd);vva(Md);Yd=ga+56|0;Zd=ga+4|0;k[ga>>2]=27524;k[Yd>>2]=27544;B=0;wa(508,ga+56|0,Zd|0);ae=B;B=0;if(ae&1){ae=Rb()|0;be=Q;ce=ae;vva(Yd);Qb(ce|0)}k[ga+128>>2]=0;k[ga+132>>2]=-1;k[ga>>2]=27468;k[Yd>>2]=27488;B=0;va(448,Zd|0);ae=B;B=0;do if(ae&1){de=Rb()|0;ee=Q;fe=de}else{k[Zd>>2]=27560;de=ga+36|0;k[de>>2]=0;k[de+4>>2]=0;k[de+8>>2]=0;k[de+12>>2]=0;k[ga+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Zd|0,c|0);ge=B;B=0;if(ge&1){ge=Rb()|0;he=Q;Yua(c);Yua(de);Ava(Zd);ee=he;fe=ge;break}Yua(c);B=0;ge=Ia(40,ga|0,139487,12)|0;he=B;B=0;do if(!(he&1)){B=0;ie=Sa(1,ge|0,+(+p[a+64>>3]))|0;je=B;B=0;if(je&1){Wa=429;break}B=0;Ia(40,ie|0,149177,1)|0;ie=B;B=0;if(ie&1){Wa=429;break}B=0;wa(510,ha|0,Zd|0);ie=B;B=0;if(ie&1){Wa=429;break}B=0;ya(424,ha|0)|0;ie=B;B=0;if(ie&1){ie=Rb()|0;je=Q;Yua(ha);ke=je;le=ie;break}else{Yua(ha);k[ga>>2]=27468;k[Yd>>2]=27488;k[Zd>>2]=27560;Yua(de);Ava(Zd);vva(Yd);r=b;return}}else Wa=429;while(0);if((Wa|0)==429){ge=Rb()|0;ke=Q;le=ge}k[ga>>2]=27468;k[Yd>>2]=27488;k[Zd>>2]=27560;Yua(de);Ava(Zd);vva(Yd);$a=ke;ab=le;Qb(ab|0)}while(0);be=ee;ce=fe;vva(Yd);Qb(ce|0)}while(0);if((Wa|0)==426){Wd=Rb()|0;_d=Q;$d=Wd}k[ea>>2]=27468;k[Md>>2]=27488;k[Nd>>2]=27560;Yua(Td);Ava(Nd);vva(Md);$a=_d;ab=$d;Qb(ab|0)}while(0);Rd=Ud;Sd=Vd;vva(Md);Qb(Sd|0)}while(0);if((Wa|0)==423){Sb=Rb()|0;Od=Q;Pd=Sb}k[ca>>2]=27468;k[mb>>2]=27488;k[pb>>2]=27560;Yua(Pb);Ava(pb);vva(mb);$a=Od;ab=Pd;Qb(ab|0)}while(0);Hd=Jd;Id=Kd;vva(mb);Qb(Id|0)}while(0);if((Wa|0)==420){gb=Rb()|0;Fd=Q;Gd=gb}k[aa>>2]=27468;k[Ya>>2]=27488;k[lb>>2]=27560;Yua(kb);Ava(lb);vva(Ya);$a=Fd;ab=Gd;Qb(ab|0)}while(0);Bd=Dd;Cd=Ed;vva(Ya);Qb(Cd|0)}while(0);if((Wa|0)==417){Ja=Rb()|0;zd=Q;Ad=Ja}k[_>>2]=27468;k[Ga>>2]=27488;k[Ha>>2]=27560;Yua(Ua);Ava(Ha);vva(Ga);$a=zd;ab=Ad;Qb(ab|0)}while(0);vd=xd;wd=yd;vva(Ga);Qb(wd|0)}else Wa=51;while(0);if((Wa|0)==51){Ea=Rb()|0;Ka=Q;La=Ea}k[f>>2]=27468;k[ra>>2]=27488;k[sa>>2]=27560;Yua(Ba);Ava(sa);vva(ra);$a=Ka;ab=La;Qb(ab|0)}while(0);za=Ca;Aa=Da;vva(ra);Qb(Aa|0)}else Wa=48;while(0);if((Wa|0)==48){qa=Rb()|0;ta=Q;ua=qa}k[d>>2]=27468;k[ia>>2]=27488;k[ja>>2]=27560;Yua(na);Ava(ja);vva(ia);$a=ta;ab=ua;Qb(ab|0)}while(0);la=oa;ma=pa;vva(ia);Qb(ma|0)}function oka(a){a=a|0;return 932}function pka(a,b){a=a|0;b=b|0;p[a+8>>3]=+p[(k[a+20>>2]|0)+(b<<3)>>3];p[a+40>>3]=+p[(k[a+24>>2]|0)+(b<<3)>>3];p[a+48>>3]=+p[(k[a+28>>2]|0)+(b<<3)>>3];p[a+56>>3]=+p[(k[a+32>>2]|0)+(b<<3)>>3];p[a+64>>3]=+p[(k[a+36>>2]|0)+(b<<3)>>3];return}function qka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 0:{p[a+40>>3]=1.0;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+64>>3]=-1.0;r=c;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=c;return}case 2:{b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=c;return}case 3:{p[a+40>>3]=1.0;b=a+48|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+64>>3]=1.0;r=c;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=c;return}case 5:{b=a+40|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=c;return}default:{c=e+56|0;a=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,a|0);b=B;B=0;if(b&1){b=Rb()|0;i=Q;j=b;vva(c);Qb(j|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,a|0);b=B;B=0;do if(b&1){l=Rb()|0;m=Q;n=l}else{k[a>>2]=27560;l=e+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,a|0,d|0);o=B;B=0;if(o&1){o=Rb()|0;q=Q;Yua(d);Yua(l);Ava(a);m=q;n=o;break}Yua(d);B=0;o=Ia(40,e|0,139500,31)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,o|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,f|0,139136,75);q=B;B=0;do if(!(q&1)){B=0;eb(502,g|0,139532,11);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(f);u=t;v=s;break}B=0;wa(510,h|0,a|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,o|0,f|0,g|0,520,h|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,o|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(h);w=t;x=s;y=z}Yua(g);Yua(f);if(y){u=w;v=x}else{A=w;C=x;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(o|0);A=u;C=v;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[e>>2]=27468;k[c>>2]=27488;k[a>>2]=27560;Yua(l);Ava(a);vva(c);Qb(C|0)}while(0);i=m;j=n;vva(c);Qb(j|0)}}}function rka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0;d=r;r=r+1600|0;e=d+1576|0;f=d+1368|0;g=d+1564|0;h=d+1552|0;i=d+1540|0;j=d+1216|0;l=d+1528|0;m=d+1516|0;n=d+1504|0;o=d+1064|0;q=d+1352|0;s=d+1200|0;t=d+1048|0;u=d+912|0;v=d+760|0;w=d+608|0;x=d+320|0;y=d+776|0;z=d+168|0;A=d+156|0;C=d+144|0;D=d+624|0;E=d+132|0;F=d+120|0;G=d+108|0;H=d+472|0;I=d+96|0;J=d+84|0;K=d+72|0;L=d+336|0;M=d+60|0;N=d+48|0;O=d+36|0;P=d+184|0;R=d+24|0;S=d+12|0;T=d;switch(b|0){case 739:case 738:{switch(c|0){case 0:{p[a+40>>3]=1.0;U=a+48|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{U=a+40|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;U=a+48|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{U=a+40|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}default:{U=f+56|0;V=f+4|0;k[f>>2]=27524;k[U>>2]=27544;B=0;wa(508,f+56|0,V|0);W=B;B=0;if(W&1){W=Rb()|0;X=Q;Y=W;vva(U);Qb(Y|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[U>>2]=27488;B=0;va(448,V|0);W=B;B=0;do if(W&1){Z=Rb()|0;_=Q;$=Z}else{k[V>>2]=27560;Z=f+36|0;k[Z>>2]=0;k[Z+4>>2]=0;k[Z+8>>2]=0;k[Z+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,V|0,e|0);aa=B;B=0;if(aa&1){aa=Rb()|0;ba=Q;Yua(e);Yua(Z);Ava(V);_=ba;$=aa;break}Yua(e);B=0;aa=Ia(40,f|0,139544,29)|0;ba=B;B=0;a:do if(!(ba&1)?(B=0,Xa(239,aa|0,0)|0,ca=B,B=0,!(ca&1)):0){ca=Ab(20)|0;B=0;eb(502,g|0,139136,75);da=B;B=0;do if(!(da&1)){B=0;eb(502,h|0,139574,9);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(g);ga=fa;ha=ea;break}B=0;wa(510,i|0,V|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ia=Q;ja=ea;ka=1}else{B=0;ua(163,ca|0,g|0,h|0,558,i|0);ea=B;B=0;if(ea&1)la=1;else{B=0;eb(503,ca|0,1240,229);B=0;la=0}ea=Rb()|0;fa=Q;Yua(i);ia=fa;ja=ea;ka=la}Yua(h);Yua(g);if(ka){ga=ia;ha=ja}else{ma=ia;na=ja;break a}}else{ea=Rb()|0;ga=Q;ha=ea}while(0);zb(ca|0);ma=ga;na=ha}else oa=24;while(0);if((oa|0)==24){aa=Rb()|0;ma=Q;na=aa}k[f>>2]=27468;k[U>>2]=27488;k[V>>2]=27560;Yua(Z);Ava(V);vva(U);pa=ma;qa=na;Qb(qa|0)}while(0);X=_;Y=$;vva(U);Qb(Y|0)}}break}case 746:{do switch(c|0){case 0:{p[a+40>>3]=1.0;Y=a+48|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{Y=a+40|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;Y=a+48|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{Y=a+40|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=1.0;Y=a+48|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[Y+16>>2]=0;k[Y+20>>2]=0;r=d;return}case 7:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;Y=a+56|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;r=d;return}case 8:{Y=a+40|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}default:{Y=j+56|0;U=j+4|0;k[j>>2]=27524;k[Y>>2]=27544;B=0;wa(508,j+56|0,U|0);$=B;B=0;if($&1){$=Rb()|0;ra=Q;sa=$;vva(Y);Qb(sa|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[Y>>2]=27488;B=0;va(448,U|0);$=B;B=0;do if($&1){_=Rb()|0;ta=Q;xa=_}else{k[U>>2]=27560;_=j+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[j+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,U|0,e|0);X=B;B=0;if(X&1){X=Rb()|0;na=Q;Yua(e);Yua(_);Ava(U);ta=na;xa=X;break}Yua(e);B=0;X=Ia(40,j|0,139584,29)|0;na=B;B=0;b:do if(!(na&1)?(B=0,Xa(239,X|0,0)|0,ma=B,B=0,!(ma&1)):0){ma=Ab(20)|0;B=0;eb(502,l|0,139136,75);V=B;B=0;do if(!(V&1)){B=0;eb(502,m|0,139574,9);f=B;B=0;if(f&1){f=Rb()|0;ha=Q;Yua(l);za=ha;Aa=f;break}B=0;wa(510,n|0,U|0);f=B;B=0;if(f&1){f=Rb()|0;Ba=1;Ca=Q;Da=f}else{B=0;ua(163,ma|0,l|0,m|0,573,n|0);f=B;B=0;if(f&1)Ea=1;else{B=0;eb(503,ma|0,1240,229);B=0;Ea=0}f=Rb()|0;ha=Q;Yua(n);Ba=Ea;Ca=ha;Da=f}Yua(m);Yua(l);if(Ba){za=Ca;Aa=Da}else{Fa=Ca;Ga=Da;break b}}else{f=Rb()|0;za=Q;Aa=f}while(0);zb(ma|0);Fa=za;Ga=Aa}else oa=57;while(0);if((oa|0)==57){X=Rb()|0;Fa=Q;Ga=X}k[j>>2]=27468;k[Y>>2]=27488;k[U>>2]=27560;Yua(_);Ava(U);vva(Y);pa=Fa;qa=Ga;Qb(qa|0)}while(0);ra=ta;sa=xa;vva(Y);Qb(sa|0)}}while(0);break}case 747:{do switch(c|0){case 0:{p[a+40>>3]=1.0;sa=a+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{sa=a+40|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;sa=a+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{sa=a+40|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=1.0;sa=a+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+64>>3]=-.3333333333333333;r=d;return}case 7:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-.3333333333333333;r=d;return}case 8:{sa=a+40|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-.3333333333333333;r=d;return}case 9:{p[a+40>>3]=1.0;sa=a+48|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+64>>3]=.3333333333333333;r=d;return}case 10:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=.3333333333333333;r=d;return}case 11:{sa=a+40|0;k[sa>>2]=0;k[sa+4>>2]=0;k[sa+8>>2]=0;k[sa+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=.3333333333333333;r=d;return}default:{sa=o+56|0;xa=o+4|0;k[o>>2]=27524;k[sa>>2]=27544;B=0;wa(508,o+56|0,xa|0);ta=B;B=0;if(ta&1){ta=Rb()|0;Ha=Q;Ja=ta;vva(sa);Qb(Ja|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[sa>>2]=27488;B=0;va(448,xa|0);ta=B;B=0;do if(ta&1){ra=Rb()|0;Ka=Q;La=ra}else{k[xa>>2]=27560;ra=o+36|0;k[ra>>2]=0;k[ra+4>>2]=0;k[ra+8>>2]=0;k[ra+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,xa|0,e|0);Ga=B;B=0;if(Ga&1){Ga=Rb()|0;Fa=Q;Yua(e);Yua(ra);Ava(xa);Ka=Fa;La=Ga;break}Yua(e);B=0;Ga=Ia(40,o|0,139614,30)|0;Fa=B;B=0;c:do if(!(Fa&1)?(B=0,Xa(239,Ga|0,0)|0,j=B,B=0,!(j&1)):0){j=Ab(20)|0;B=0;eb(502,q|0,139136,75);Aa=B;B=0;do if(!(Aa&1)){B=0;eb(502,s|0,139574,9);za=B;B=0;if(za&1){za=Rb()|0;Da=Q;Yua(q);Ma=Da;Na=za;break}B=0;wa(510,t|0,xa|0);za=B;B=0;if(za&1){za=Rb()|0;Oa=1;Pa=Q;Qa=za}else{B=0;ua(163,j|0,q|0,s|0,591,t|0);za=B;B=0;if(za&1)Ra=1;else{B=0;eb(503,j|0,1240,229);B=0;Ra=0}za=Rb()|0;Da=Q;Yua(t);Oa=Ra;Pa=Da;Qa=za}Yua(s);Yua(q);if(Oa){Ma=Pa;Na=Qa}else{Sa=Pa;Ta=Qa;break c}}else{za=Rb()|0;Ma=Q;Na=za}while(0);zb(j|0);Sa=Ma;Ta=Na}else oa=93;while(0);if((oa|0)==93){Ga=Rb()|0;Sa=Q;Ta=Ga}k[o>>2]=27468;k[sa>>2]=27488;k[xa>>2]=27560;Yua(ra);Ava(xa);vva(sa);pa=Sa;qa=Ta;Qb(qa|0)}while(0);Ha=Ka;Ja=La;vva(sa);Qb(Ja|0)}}while(0);break}case 745:{do switch(c|0){case 0:{p[a+40>>3]=1.0;Ja=a+48|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{Ja=a+40|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;Ja=a+48|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{Ja=a+40|0;k[Ja>>2]=0;k[Ja+4>>2]=0;k[Ja+8>>2]=0;k[Ja+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 7:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 8:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 9:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 10:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 11:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}default:{Ja=u+56|0;La=u+4|0;k[u>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,u+56|0,La|0);Ka=B;B=0;if(Ka&1){Ka=Rb()|0;Ua=Q;Va=Ka;vva(Ja);Qb(Va|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Ja>>2]=27488;B=0;va(448,La|0);Ka=B;B=0;do if(Ka&1){Ha=Rb()|0;Wa=Q;Ya=Ha}else{k[La>>2]=27560;Ha=u+36|0;k[Ha>>2]=0;k[Ha+4>>2]=0;k[Ha+8>>2]=0;k[Ha+12>>2]=0;k[u+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,La|0,e|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Sa=Q;Yua(e);Yua(Ha);Ava(La);Wa=Sa;Ya=Ta;break}Yua(e);B=0;Ta=Ia(40,u|0,139614,30)|0;Sa=B;B=0;d:do if(!(Sa&1)?(B=0,Xa(239,Ta|0,0)|0,o=B,B=0,!(o&1)):0){o=Ab(20)|0;B=0;eb(502,v|0,139136,75);Na=B;B=0;do if(!(Na&1)){B=0;eb(502,w|0,139574,9);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Qa=Q;Yua(v);Za=Qa;_a=Ma;break}B=0;wa(510,x|0,La|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;$a=1;ab=Q;bb=Ma}else{B=0;ua(163,o|0,v|0,w|0,609,x|0);Ma=B;B=0;if(Ma&1)cb=1;else{B=0;eb(503,o|0,1240,229);B=0;cb=0}Ma=Rb()|0;Qa=Q;Yua(x);$a=cb;ab=Qa;bb=Ma}Yua(w);Yua(v);if($a){Za=ab;_a=bb}else{db=ab;fb=bb;break d}}else{Ma=Rb()|0;Za=Q;_a=Ma}while(0);zb(o|0);db=Za;fb=_a}else oa=129;while(0);if((oa|0)==129){Ta=Rb()|0;db=Q;fb=Ta}k[u>>2]=27468;k[Ja>>2]=27488;k[La>>2]=27560;Yua(Ha);Ava(La);vva(Ja);pa=db;qa=fb;Qb(qa|0)}while(0);Ua=Wa;Va=Ya;vva(Ja);Qb(Va|0)}}while(0);break}case 741:case 740:{switch(c|0){case 0:{p[a+40>>3]=1.0;Va=a+48|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{Va=a+40|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;Va=a+48|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{Va=a+40|0;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=.3333333333333333;p[a+48>>3]=.3333333333333333;p[a+56>>3]=.3333333333333333;p[a+64>>3]=0.0;r=d;return}default:{Va=y+56|0;Ya=y+4|0;k[y>>2]=27524;k[Va>>2]=27544;B=0;wa(508,y+56|0,Ya|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;gb=Q;hb=Wa;vva(Va);Qb(hb|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Va>>2]=27488;B=0;va(448,Ya|0);Wa=B;B=0;do if(Wa&1){Ua=Rb()|0;ib=Q;jb=Ua}else{k[Ya>>2]=27560;Ua=y+36|0;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[y+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Ya|0,e|0);fb=B;B=0;if(fb&1){fb=Rb()|0;db=Q;Yua(e);Yua(Ua);Ava(Ya);ib=db;jb=fb;break}Yua(e);B=0;fb=Ia(40,y|0,139645,29)|0;db=B;B=0;e:do if(!(db&1)?(B=0,Xa(239,fb|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,z|0,139136,75);_a=B;B=0;do if(!(_a&1)){B=0;eb(502,A|0,139574,9);Za=B;B=0;if(Za&1){Za=Rb()|0;bb=Q;Yua(z);kb=bb;lb=Za;break}B=0;wa(510,C|0,Ya|0);Za=B;B=0;if(Za&1){Za=Rb()|0;mb=1;nb=Q;ob=Za}else{B=0;ua(163,u|0,z|0,A|0,621,C|0);Za=B;B=0;if(Za&1)pb=1;else{B=0;eb(503,u|0,1240,229);B=0;pb=0}Za=Rb()|0;bb=Q;Yua(C);mb=pb;nb=bb;ob=Za}Yua(A);Yua(z);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break e}}else{Za=Rb()|0;kb=Q;lb=Za}while(0);zb(u|0);qb=kb;rb=lb}else oa=160;while(0);if((oa|0)==160){fb=Rb()|0;qb=Q;rb=fb}k[y>>2]=27468;k[Va>>2]=27488;k[Ya>>2]=27560;Yua(Ua);Ava(Ya);vva(Va);pa=qb;qa=rb;Qb(qa|0)}while(0);gb=ib;hb=jb;vva(Va);Qb(hb|0)}}break}case 742:{do switch(c|0){case 0:{p[a+40>>3]=1.0;hb=a+48|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{hb=a+40|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;hb=a+48|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{hb=a+40|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=1.0;hb=a+48|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;k[hb+16>>2]=0;k[hb+20>>2]=0;r=d;return}case 7:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;hb=a+56|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;r=d;return}case 8:{hb=a+40|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 9:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 10:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 11:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 12:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 13:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 14:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 15:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 16:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 17:{p[a+40>>3]=.5;p[a+48>>3]=.5;hb=a+56|0;k[hb>>2]=0;k[hb+4>>2]=0;k[hb+8>>2]=0;k[hb+12>>2]=0;r=d;return}default:{hb=D+56|0;Va=D+4|0;k[D>>2]=27524;k[hb>>2]=27544;B=0;wa(508,D+56|0,Va|0);jb=B;B=0;if(jb&1){jb=Rb()|0;sb=Q;tb=jb;vva(hb);Qb(tb|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[hb>>2]=27488;B=0;va(448,Va|0);jb=B;B=0;do if(jb&1){ib=Rb()|0;ub=Q;vb=ib}else{k[Va>>2]=27560;ib=D+36|0;k[ib>>2]=0;k[ib+4>>2]=0;k[ib+8>>2]=0;k[ib+12>>2]=0;k[D+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Va|0,e|0);gb=B;B=0;if(gb&1){gb=Rb()|0;rb=Q;Yua(e);Yua(ib);Ava(Va);ub=rb;vb=gb;break}Yua(e);B=0;gb=Ia(40,D|0,139675,30)|0;rb=B;B=0;f:do if(!(rb&1)?(B=0,Xa(239,gb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,E|0,139136,75);Ya=B;B=0;do if(!(Ya&1)){B=0;eb(502,F|0,139574,9);y=B;B=0;if(y&1){y=Rb()|0;lb=Q;Yua(E);wb=lb;xb=y;break}B=0;wa(510,G|0,Va|0);y=B;B=0;if(y&1){y=Rb()|0;yb=1;Bb=Q;Cb=y}else{B=0;ua(163,qb|0,E|0,F|0,647,G|0);y=B;B=0;if(y&1)Db=1;else{B=0;eb(503,qb|0,1240,229);B=0;Db=0}y=Rb()|0;lb=Q;Yua(G);yb=Db;Bb=lb;Cb=y}Yua(F);Yua(E);if(yb){wb=Bb;xb=Cb}else{Eb=Bb;Fb=Cb;break f}}else{y=Rb()|0;wb=Q;xb=y}while(0);zb(qb|0);Eb=wb;Fb=xb}else oa=202;while(0);if((oa|0)==202){gb=Rb()|0;Eb=Q;Fb=gb}k[D>>2]=27468;k[hb>>2]=27488;k[Va>>2]=27560;Yua(ib);Ava(Va);vva(hb);pa=Eb;qa=Fb;Qb(qa|0)}while(0);sb=ub;tb=vb;vva(hb);Qb(tb|0)}}while(0);break}case 744:case 743:{do switch(c|0){case 0:{p[a+40>>3]=1.0;tb=a+48|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{tb=a+40|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;tb=a+48|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{tb=a+40|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=1.0;tb=a+48|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[tb+16>>2]=0;k[tb+20>>2]=0;r=d;return}case 7:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;tb=a+56|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;r=d;return}case 8:{tb=a+40|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 9:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 10:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 11:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 12:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 13:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 14:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 15:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 16:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 17:{p[a+40>>3]=.5;p[a+48>>3]=.5;tb=a+56|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;r=d;return}case 18:{p[a+40>>3]=.3333333333333333;p[a+48>>3]=.3333333333333333;p[a+56>>3]=.3333333333333333;p[a+64>>3]=0.0;r=d;return}default:{tb=H+56|0;vb=H+4|0;k[H>>2]=27524;k[tb>>2]=27544;B=0;wa(508,H+56|0,vb|0);ub=B;B=0;if(ub&1){ub=Rb()|0;Gb=Q;Hb=ub;vva(tb);Qb(Hb|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[tb>>2]=27488;B=0;va(448,vb|0);ub=B;B=0;do if(ub&1){sb=Rb()|0;Ib=Q;Jb=sb}else{k[vb>>2]=27560;sb=H+36|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[H+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,vb|0,e|0);Fb=B;B=0;if(Fb&1){Fb=Rb()|0;Eb=Q;Yua(e);Yua(sb);Ava(vb);Ib=Eb;Jb=Fb;break}Yua(e);B=0;Fb=Ia(40,H|0,139706,30)|0;Eb=B;B=0;g:do if(!(Eb&1)?(B=0,Xa(239,Fb|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,I|0,139136,75);xb=B;B=0;do if(!(xb&1)){B=0;eb(502,J|0,139574,9);wb=B;B=0;if(wb&1){wb=Rb()|0;Cb=Q;Yua(I);Kb=Cb;Lb=wb;break}B=0;wa(510,K|0,vb|0);wb=B;B=0;if(wb&1){wb=Rb()|0;Mb=1;Nb=Q;Ob=wb}else{B=0;ua(163,D|0,I|0,J|0,675,K|0);wb=B;B=0;if(wb&1)Pb=1;else{B=0;eb(503,D|0,1240,229);B=0;Pb=0}wb=Rb()|0;Cb=Q;Yua(K);Mb=Pb;Nb=Cb;Ob=wb}Yua(J);Yua(I);if(Mb){Kb=Nb;Lb=Ob}else{Sb=Nb;Tb=Ob;break g}}else{wb=Rb()|0;Kb=Q;Lb=wb}while(0);zb(D|0);Sb=Kb;Tb=Lb}else oa=245;while(0);if((oa|0)==245){Fb=Rb()|0;Sb=Q;Tb=Fb}k[H>>2]=27468;k[tb>>2]=27488;k[vb>>2]=27560;Yua(sb);Ava(vb);vva(tb);pa=Sb;qa=Tb;Qb(qa|0)}while(0);Gb=Ib;Hb=Jb;vva(tb);Qb(Hb|0)}}while(0);break}case 748:{do switch(c|0){case 0:{p[a+40>>3]=1.0;Hb=a+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+64>>3]=-1.0;r=d;return}case 1:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 2:{Hb=a+40|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-1.0;r=d;return}case 3:{p[a+40>>3]=1.0;Hb=a+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+64>>3]=1.0;r=d;return}case 4:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 5:{Hb=a+40|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=1.0;r=d;return}case 6:{p[a+40>>3]=1.0;Hb=a+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;k[Hb+16>>2]=0;k[Hb+20>>2]=0;r=d;return}case 7:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;Hb=a+56|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;r=d;return}case 8:{Hb=a+40|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=0.0;r=d;return}case 9:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 10:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=-1.0;r=d;return}case 11:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=-1.0;r=d;return}case 12:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 13:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=1.0;r=d;return}case 14:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=1.0;r=d;return}case 15:{p[a+40>>3]=1.0;Hb=a+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+64>>3]=-.5;r=d;return}case 16:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=-.5;r=d;return}case 17:{Hb=a+40|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=-.5;r=d;return}case 18:{p[a+40>>3]=1.0;Hb=a+48|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+64>>3]=.5;r=d;return}case 19:{p[a+40>>3]=0.0;p[a+48>>3]=1.0;p[a+56>>3]=0.0;p[a+64>>3]=.5;r=d;return}case 20:{Hb=a+40|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;p[a+56>>3]=1.0;p[a+64>>3]=.5;r=d;return}case 21:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=-.5;r=d;return}case 22:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=-.5;r=d;return}case 23:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=-.5;r=d;return}case 24:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 25:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=0.0;r=d;return}case 26:{p[a+40>>3]=.5;p[a+48>>3]=.5;Hb=a+56|0;k[Hb>>2]=0;k[Hb+4>>2]=0;k[Hb+8>>2]=0;k[Hb+12>>2]=0;r=d;return}case 27:{p[a+40>>3]=0.0;p[a+48>>3]=.5;p[a+56>>3]=.5;p[a+64>>3]=.5;r=d;return}case 28:{p[a+40>>3]=.5;p[a+48>>3]=0.0;p[a+56>>3]=.5;p[a+64>>3]=.5;r=d;return}case 29:{p[a+40>>3]=.5;p[a+48>>3]=.5;p[a+56>>3]=0.0;p[a+64>>3]=.5;r=d;return}default:{Hb=L+56|0;Jb=L+4|0;k[L>>2]=27524;k[Hb>>2]=27544;B=0;wa(508,L+56|0,Jb|0);Ib=B;B=0;if(Ib&1){Ib=Rb()|0;Ub=Q;Vb=Ib;vva(Hb);Qb(Vb|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[Hb>>2]=27488;B=0;va(448,Jb|0);Ib=B;B=0;do if(Ib&1){Gb=Rb()|0;Wb=Q;Xb=Gb}else{k[Jb>>2]=27560;Gb=L+36|0;k[Gb>>2]=0;k[Gb+4>>2]=0;k[Gb+8>>2]=0;k[Gb+12>>2]=0;k[L+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Jb|0,e|0);Tb=B;B=0;if(Tb&1){Tb=Rb()|0;Sb=Q;Yua(e);Yua(Gb);Ava(Jb);Wb=Sb;Xb=Tb;break}Yua(e);B=0;Tb=Ia(40,L|0,139737,30)|0;Sb=B;B=0;h:do if(!(Sb&1)?(B=0,Xa(239,Tb|0,0)|0,H=B,B=0,!(H&1)):0){H=Ab(20)|0;B=0;eb(502,M|0,139136,75);Lb=B;B=0;do if(!(Lb&1)){B=0;eb(502,N|0,139574,9);Kb=B;B=0;if(Kb&1){Kb=Rb()|0;Ob=Q;Yua(M);Yb=Ob;Zb=Kb;break}B=0;wa(510,O|0,Jb|0);Kb=B;B=0;if(Kb&1){Kb=Rb()|0;_b=1;$b=Q;ac=Kb}else{B=0;ua(163,H|0,M|0,N|0,714,O|0);Kb=B;B=0;if(Kb&1)bc=1;else{B=0;eb(503,H|0,1240,229);B=0;bc=0}Kb=Rb()|0;Ob=Q;Yua(O);_b=bc;$b=Ob;ac=Kb}Yua(N);Yua(M);if(_b){Yb=$b;Zb=ac}else{cc=$b;dc=ac;break h}}else{Kb=Rb()|0;Yb=Q;Zb=Kb}while(0);zb(H|0);cc=Yb;dc=Zb}else oa=299;while(0);if((oa|0)==299){Tb=Rb()|0;cc=Q;dc=Tb}k[L>>2]=27468;k[Hb>>2]=27488;k[Jb>>2]=27560;Yua(Gb);Ava(Jb);vva(Hb);pa=cc;qa=dc;Qb(qa|0)}while(0);Ub=Wb;Vb=Xb;vva(Hb);Qb(Vb|0)}}while(0);break}default:{Vb=P+56|0;Xb=P+4|0;k[P>>2]=27524;k[Vb>>2]=27544;B=0;wa(508,P+56|0,Xb|0);Wb=B;B=0;if(Wb&1){Wb=Rb()|0;ec=Q;fc=Wb;vva(Vb);Qb(fc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[Vb>>2]=27488;B=0;va(448,Xb|0);Wb=B;B=0;do if(Wb&1){Ub=Rb()|0;gc=Q;hc=Ub}else{k[Xb>>2]=27560;Ub=P+36|0;k[Ub>>2]=0;k[Ub+4>>2]=0;k[Ub+8>>2]=0;k[Ub+12>>2]=0;k[P+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,Xb|0,e|0);dc=B;B=0;if(dc&1){dc=Rb()|0;cc=Q;Yua(e);Yua(Ub);Ava(Xb);gc=cc;hc=dc;break}Yua(e);B=0;dc=Ia(40,P|0,145867,15)|0;cc=B;B=0;i:do if((((!(cc&1)?(B=0,L=ya(427,b|0)|0,Zb=B,B=0,!(Zb&1)):0)?(Zb=Lta(L)|0,B=0,Yb=Ia(40,dc|0,L|0,Zb|0)|0,Zb=B,B=0,!(Zb&1)):0)?(B=0,Zb=Ia(40,Yb|0,144645,14)|0,Yb=B,B=0,!(Yb&1)):0)?(B=0,Xa(239,Zb|0,0)|0,Zb=B,B=0,!(Zb&1)):0){Zb=Ab(20)|0;B=0;eb(502,R|0,139136,75);Yb=B;B=0;do if(!(Yb&1)){B=0;eb(502,S|0,139574,9);L=B;B=0;if(L&1){L=Rb()|0;ac=Q;Yua(R);ic=ac;jc=L;break}B=0;wa(510,T|0,Xb|0);L=B;B=0;if(L&1){L=Rb()|0;kc=1;lc=Q;mc=L}else{B=0;ua(163,Zb|0,R|0,S|0,717,T|0);L=B;B=0;if(L&1)nc=1;else{B=0;eb(503,Zb|0,1240,229);B=0;nc=0}L=Rb()|0;ac=Q;Yua(T);kc=nc;lc=ac;mc=L}Yua(S);Yua(R);if(kc){ic=lc;jc=mc}else{oc=lc;pc=mc;break i}}else{L=Rb()|0;ic=Q;jc=L}while(0);zb(Zb|0);oc=ic;pc=jc}else oa=325;while(0);if((oa|0)==325){dc=Rb()|0;oc=Q;pc=dc}k[P>>2]=27468;k[Vb>>2]=27488;k[Xb>>2]=27560;Yua(Ub);Ava(Xb);vva(Vb);pa=oc;qa=pc;Qb(qa|0)}while(0);ec=gc;fc=hc;vva(Vb);Qb(fc|0)}}}function ska(a){a=a|0;return 0}function tka(a){a=a|0;return k[a+16>>2]|0}function uka(a,b){a=a|0;b=b|0;p[b+40>>3]=+p[a+40>>3];p[b+48>>3]=+p[a+48>>3];p[b+56>>3]=+p[a+56>>3];p[b+8>>3]=-9999.0;return}function vka(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=r;r=r+16|0;f=e+3|0;g=e+2|0;h=e+1|0;j=e;l=a+4|0;m=a+12|0;n=a+16|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[a+16>>2]=0;k[a+20>>2]=0;i[h>>0]=0;i[j>>0]=0;k[a+24>>2]=b;B=0;va(537,a|0);b=B;B=0;a:do if(((((((!(b&1)?(k[a+28>>2]=c,i[f>>0]=0,i[g>>0]=0,B=0,bb(1)|0,o=B,B=0,!(o&1)):0)?(B=0,eb(527,a|0,f|0,139768),o=B,B=0,!(o&1)):0)?(B=0,eb(527,a|0,g|0,139791),o=B,B=0,!(o&1)):0)?(B=0,eb(528,a|0,d|0,0),o=B,B=0,!(o&1)):0)?(B=0,va(538,a|0),o=B,B=0,!(o&1)):0)?(B=0,eb(514,a|0,h|0,139768),o=B,B=0,!(o&1)):0)?(B=0,eb(514,a|0,j|0,139791),o=B,B=0,!(o&1)):0){do if(!d)if((i[h>>0]|0)!=0&(i[j>>0]|0)==0){i[h>>0]=1;p=1;break}else{i[h>>0]=0;p=0;break}else{i[h>>0]=1;p=1}while(0);B=0;o=ya(423,12)|0;q=B;B=0;if(!(q&1)){i[o>>0]=0;B=0;q=ya(423,12)|0;s=B;B=0;do if(!(s&1)){B=0;eb(517,q|0,0,p<<24>>24!=0|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;Sqa(q);v=u;w=t;break}k[o+8>>2]=q;B=0;t=ya(422,23)|0;u=B;B=0;if(!(u&1)){k[o+4>>2]=t;u=t;t=139768;x=u+23|0;do{i[u>>0]=i[t>>0]|0;u=u+1|0;t=t+1|0}while((u|0)<(x|0));B=0;wa(522,a|0,o|0);t=B;B=0;if(t&1){y=11;break a}k[a+32>>2]=0;k[a+36>>2]=0;B=0;eb(529,a|0,a+40|0,139814);t=B;B=0;if(t&1){y=11;break a}B=0;eb(529,a|0,a+44|0,139834);t=B;B=0;if(t&1){y=11;break a}B=0;eb(529,a|0,a+48|0,139859);t=B;B=0;if(t&1){y=11;break a}B=0;eb(529,a|0,a+52|0,139879);t=B;B=0;if(t&1){y=11;break a}B=0;eb(529,a|0,a+56|0,139904);t=B;B=0;if(t&1){y=11;break a}B=0;ua(178,a|0,a+72|0,0,0,139929);t=B;B=0;if(t&1){y=11;break a}k[a+68>>2]=-1;u=a+76|0;x=u+36|0;do{k[u>>2]=0;u=u+4|0}while((u|0)<(x|0));r=e;return}else y=28}else y=28;while(0);if((y|0)==28){q=Rb()|0;v=Q;w=q}Sqa(o);z=v;A=w}else y=11}else y=11;while(0);if((y|0)==11){y=Rb()|0;z=Q;A=y}y=k[m>>2]|0;m=y;if(y){z=k[n>>2]|0;if((z|0)!=(y|0))k[n>>2]=z+(~((z+-4-m|0)>>>2)<<2);Sqa(y)}y=k[a>>2]|0;if(!y)Qb(A|0);a=k[l>>2]|0;if((a|0)!=(y|0))k[l>>2]=a+(~((a+-4-y|0)>>>2)<<2);Sqa(y);Qb(A|0)}
+-function wka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0;b=r;r=r+2224|0;c=b+2200|0;d=b+2088|0;e=b+2084|0;f=b+1936|0;g=b+2188|0;h=b+2176|0;j=b+2164|0;l=b+1800|0;m=b+2152|0;n=b+2140|0;o=b+2128|0;p=b+1648|0;q=b+2116|0;s=b+2104|0;t=b+2092|0;u=b+1512|0;v=b+2072|0;w=b+1360|0;x=b+1784|0;y=b+1224|0;z=b+1496|0;A=b+1088|0;C=b+1072|0;D=b+936|0;E=b+784|0;F=b+800|0;G=b+496|0;H=b+648|0;I=b+208|0;J=b+512|0;K=b+60|0;L=b+360|0;M=b+48|0;N=b+224|0;O=b+36|0;P=b+72|0;R=b+24|0;S=b+12|0;T=b;if(vY()|0){r=b;return}U=a+24|0;dta(k[U>>2]|0,0,0)|0;a:do if(ata(e,4,1,k[U>>2]|0)|0){while(1){a=k[e>>2]|0;if((a+-3|0)>>>0>77){V=a;W=4;break}X=Rqa(a+1|0)|0;i[X+a>>0]=0;if(!(ata(X,a,1,k[U>>2]|0)|0)){Y=X;W=29;break}if(Mta(X,140083,3)|0){Z=X;W=31;break}if(!(Mta(X,140155,6)|0)){_=X;W=56;break}if((ata(d,4,1,k[U>>2]|0)|0)!=1){W=58;break}dta(k[U>>2]|0,k[d>>2]|0,1)|0;Tqa(X);if(!(ata(e,4,1,k[U>>2]|0)|0))break a}if((W|0)==4){X=f+56|0;a=f+4|0;k[f>>2]=27524;k[X>>2]=27544;B=0;wa(508,f+56|0,a|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;ba=$;vva(X);Qb(ba|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[X>>2]=27488;B=0;va(448,a|0);$=B;B=0;do if($&1){ca=Rb()|0;da=Q;ea=ca}else{k[a>>2]=27560;ca=f+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,a|0,c|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(c);Yua(ca);Ava(a);da=ga;ea=fa;break}Yua(c);B=0;fa=Ia(40,f|0,139946,59)|0;ga=B;B=0;b:do if((!(ga&1)?(B=0,ha=Xa(242,fa|0,V|0)|0,ia=B,B=0,!(ia&1)):0)?(B=0,Xa(239,ha|0,0)|0,ha=B,B=0,!(ha&1)):0){ha=Ab(20)|0;B=0;eb(502,g|0,140006,66);ia=B;B=0;do if(!(ia&1)){B=0;eb(502,h|0,140073,9);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(g);la=ka;ma=ja;break}B=0;wa(510,j|0,a|0);ja=B;B=0;if(ja&1){ja=Rb()|0;na=Q;oa=ja;pa=1}else{B=0;ua(163,ha|0,g|0,h|0,332,j|0);ja=B;B=0;if(ja&1)qa=1;else{B=0;eb(503,ha|0,1240,229);B=0;qa=0}ja=Rb()|0;ka=Q;Yua(j);na=ka;oa=ja;pa=qa}Yua(h);Yua(g);if(pa){la=na;ma=oa}else{ra=na;sa=oa;break b}}else{ja=Rb()|0;la=Q;ma=ja}while(0);zb(ha|0);ra=la;sa=ma}else W=20;while(0);if((W|0)==20){fa=Rb()|0;ra=Q;sa=fa}k[f>>2]=27468;k[X>>2]=27488;k[a>>2]=27560;Yua(ca);Ava(a);vva(X);ta=ra;xa=sa;Qb(xa|0)}while(0);aa=da;ba=ea;vva(X);Qb(ba|0)}else if((W|0)==29){Tqa(Y);break}else if((W|0)==31){a=l+56|0;$=l+4|0;k[l>>2]=27524;k[a>>2]=27544;B=0;wa(508,l+56|0,$|0);fa=B;B=0;if(fa&1){fa=Rb()|0;za=Q;Aa=fa;vva(a);Qb(Aa|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[a>>2]=27488;B=0;va(448,$|0);fa=B;B=0;do if(fa&1){ga=Rb()|0;Ba=Q;Ca=ga}else{k[$>>2]=27560;ga=l+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,$|0,c|0);ia=B;B=0;if(ia&1){ia=Rb()|0;ja=Q;Yua(c);Yua(ga);Ava($);Ba=ja;Ca=ia;break}Yua(c);B=0;ia=Ia(40,l|0,140087,67)|0;ja=B;B=0;c:do if((!(ja&1)?(ka=Lta(Z)|0,B=0,Da=Ia(40,ia|0,Z|0,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,Xa(239,Da|0,0)|0,Da=B,B=0,!(Da&1)):0){Da=Ab(20)|0;B=0;eb(502,m|0,140006,66);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,n|0,140073,9);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(m);Ga=Fa;Ha=Ea;break}B=0;wa(510,o|0,$|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Ja=1;Ka=Q;La=Ea}else{B=0;ua(163,Da|0,m|0,n|0,348,o|0);Ea=B;B=0;if(Ea&1)Ma=1;else{B=0;eb(503,Da|0,1240,229);B=0;Ma=0}Ea=Rb()|0;Fa=Q;Yua(o);Ja=Ma;Ka=Fa;La=Ea}Yua(n);Yua(m);if(Ja){Ga=Ka;Ha=La}else{Na=Ka;Oa=La;break c}}else{Ea=Rb()|0;Ga=Q;Ha=Ea}while(0);zb(Da|0);Na=Ga;Oa=Ha}else W=47;while(0);if((W|0)==47){ia=Rb()|0;Na=Q;Oa=ia}k[l>>2]=27468;k[a>>2]=27488;k[$>>2]=27560;Yua(ga);Ava($);vva(a);ta=Na;xa=Oa;Qb(xa|0)}while(0);za=Ba;Aa=Ca;vva(a);Qb(Aa|0)}else if((W|0)==56){Tqa(_);r=b;return}else if((W|0)==58){$=p+56|0;fa=p+4|0;k[p>>2]=27524;k[$>>2]=27544;B=0;wa(508,p+56|0,fa|0);X=B;B=0;if(X&1){X=Rb()|0;Pa=Q;Qa=X;vva($);Qb(Qa|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[$>>2]=27488;B=0;va(448,fa|0);X=B;B=0;do if(X&1){ia=Rb()|0;Ra=Q;Sa=ia}else{k[fa>>2]=27560;ia=p+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,fa|0,c|0);ja=B;B=0;if(ja&1){ja=Rb()|0;ca=Q;Yua(c);Yua(ia);Ava(fa);Ra=ca;Sa=ja;break}Yua(c);B=0;ja=Ia(40,p|0,140162,28)|0;ca=B;B=0;d:do if(!(ca&1)?(B=0,Xa(239,ja|0,0)|0,ka=B,B=0,!(ka&1)):0){ka=Ab(20)|0;B=0;eb(502,q|0,140006,66);ha=B;B=0;do if(!(ha&1)){B=0;eb(502,s|0,140073,9);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(q);Ta=Fa;Ua=Ea;break}B=0;wa(510,t|0,fa|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Va=1;Wa=Q;Ya=Ea}else{B=0;ua(163,ka|0,q|0,s|0,359,t|0);Ea=B;B=0;if(Ea&1)Za=1;else{B=0;eb(503,ka|0,1240,229);B=0;Za=0}Ea=Rb()|0;Fa=Q;Yua(t);Va=Za;Wa=Fa;Ya=Ea}Yua(s);Yua(q);if(Va){Ta=Wa;Ua=Ya}else{_a=Wa;$a=Ya;break d}}else{Ea=Rb()|0;Ta=Q;Ua=Ea}while(0);zb(ka|0);_a=Ta;$a=Ua}else W=73;while(0);if((W|0)==73){ja=Rb()|0;_a=Q;$a=ja}k[p>>2]=27468;k[$>>2]=27488;k[fa>>2]=27560;Yua(ia);Ava(fa);vva($);ta=_a;xa=$a;Qb(xa|0)}while(0);Pa=Ra;Qa=Sa;vva($);Qb(Qa|0)}}while(0);Qa=u+56|0;Sa=u+4|0;k[u>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,u+56|0,Sa|0);Ra=B;B=0;if(Ra&1){Ra=Rb()|0;ab=Q;bb=Ra;vva(Qa);Qb(bb|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Sa|0);Ra=B;B=0;do if(Ra&1){Pa=Rb()|0;cb=Q;db=Pa}else{k[Sa>>2]=27560;Pa=u+36|0;k[Pa>>2]=0;k[Pa+4>>2]=0;k[Pa+8>>2]=0;k[Pa+12>>2]=0;k[u+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Sa|0,c|0);$a=B;B=0;if($a&1){$a=Rb()|0;_a=Q;Yua(c);Yua(Pa);Ava(Sa);cb=_a;db=$a;break}Yua(c);B=0;Ia(40,u|0,149177,1)|0;$a=B;B=0;do if(!($a&1)?(B=0,wa(510,v|0,Sa|0),_a=B,B=0,!(_a&1)):0){B=0;ya(425,v|0)|0;_a=B;B=0;if(_a&1){_a=Rb()|0;p=Q;Yua(v);fb=p;gb=_a;break}Yua(v);k[u>>2]=27468;k[Qa>>2]=27488;k[Sa>>2]=27560;Yua(Pa);Ava(Sa);vva(Qa);_a=w+56|0;p=w+4|0;k[w>>2]=27524;k[_a>>2]=27544;B=0;wa(508,w+56|0,p|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;hb=Q;ib=Ua;vva(_a);Qb(ib|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[_a>>2]=27488;B=0;va(448,p|0);Ua=B;B=0;do if(Ua&1){Ta=Rb()|0;jb=Q;kb=Ta}else{k[p>>2]=27560;Ta=w+36|0;k[Ta>>2]=0;k[Ta+4>>2]=0;k[Ta+8>>2]=0;k[Ta+12>>2]=0;k[w+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,p|0,c|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;Wa=Q;Yua(c);Yua(Ta);Ava(p);jb=Wa;kb=Ya;break}Yua(c);B=0;Ia(40,w|0,140191,74)|0;Ya=B;B=0;do if(!(Ya&1)?(B=0,wa(510,x|0,p|0),Wa=B,B=0,!(Wa&1)):0){B=0;ya(425,x|0)|0;Wa=B;B=0;if(Wa&1){Wa=Rb()|0;Va=Q;Yua(x);lb=Va;mb=Wa;break}Yua(x);k[w>>2]=27468;k[_a>>2]=27488;k[p>>2]=27560;Yua(Ta);Ava(p);vva(_a);Wa=y+56|0;Va=y+4|0;k[y>>2]=27524;k[Wa>>2]=27544;B=0;wa(508,y+56|0,Va|0);q=B;B=0;if(q&1){q=Rb()|0;nb=Q;ob=q;vva(Wa);Qb(ob|0)}k[y+128>>2]=0;k[y+132>>2]=-1;k[y>>2]=27468;k[Wa>>2]=27488;B=0;va(448,Va|0);q=B;B=0;do if(q&1){s=Rb()|0;pb=Q;qb=s}else{k[Va>>2]=27560;s=y+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[y+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Va|0,c|0);Za=B;B=0;if(Za&1){Za=Rb()|0;t=Q;Yua(c);Yua(s);Ava(Va);pb=t;qb=Za;break}Yua(c);B=0;Ia(40,y|0,140266,74)|0;Za=B;B=0;do if(Za&1)W=213;else{B=0;wa(510,z|0,Va|0);t=B;B=0;if(t&1){W=213;break}B=0;ya(425,z|0)|0;t=B;B=0;if(t&1){t=Rb()|0;b=Q;Yua(z);rb=b;sb=t;break}Yua(z);k[y>>2]=27468;k[Wa>>2]=27488;k[Va>>2]=27560;Yua(s);Ava(Va);vva(Wa);t=A+56|0;b=A+4|0;k[A>>2]=27524;k[t>>2]=27544;B=0;wa(508,A+56|0,b|0);_=B;B=0;if(_&1){_=Rb()|0;tb=Q;ub=_;vva(t);Qb(ub|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[t>>2]=27488;B=0;va(448,b|0);_=B;B=0;do if(_&1){Aa=Rb()|0;vb=Q;wb=Aa}else{k[b>>2]=27560;Aa=A+36|0;k[Aa>>2]=0;k[Aa+4>>2]=0;k[Aa+8>>2]=0;k[Aa+12>>2]=0;k[A+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,b|0,c|0);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ba=Q;Yua(c);Yua(Aa);Ava(b);vb=Ba;wb=Ca;break}Yua(c);B=0;Ia(40,A|0,140341,74)|0;Ca=B;B=0;do if(Ca&1)W=216;else{B=0;wa(510,C|0,b|0);Ba=B;B=0;if(Ba&1){W=216;break}B=0;ya(425,C|0)|0;Ba=B;B=0;if(Ba&1){Ba=Rb()|0;za=Q;Yua(C);xb=za;yb=Ba;break}Yua(C);k[A>>2]=27468;k[t>>2]=27488;k[b>>2]=27560;Yua(Aa);Ava(b);vva(t);Ba=D+56|0;za=D+4|0;k[D>>2]=27524;k[Ba>>2]=27544;B=0;wa(508,D+56|0,za|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Bb=Q;Cb=Oa;vva(Ba);Qb(Cb|0)}k[D+128>>2]=0;k[D+132>>2]=-1;k[D>>2]=27468;k[Ba>>2]=27488;B=0;va(448,za|0);Oa=B;B=0;do if(Oa&1){Na=Rb()|0;Db=Q;Eb=Na}else{k[za>>2]=27560;Na=D+36|0;k[Na>>2]=0;k[Na+4>>2]=0;k[Na+8>>2]=0;k[Na+12>>2]=0;k[D+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,za|0,c|0);l=B;B=0;if(l&1){l=Rb()|0;Ha=Q;Yua(c);Yua(Na);Ava(za);Db=Ha;Eb=l;break}Yua(c);B=0;Ia(40,D|0,140416,29)|0;l=B;B=0;do if(l&1)W=219;else{B=0;wa(510,E|0,za|0);Ha=B;B=0;if(Ha&1){W=219;break}B=0;ya(425,E|0)|0;Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ga=Q;Yua(E);Fb=Ga;Gb=Ha;break}Yua(E);k[D>>2]=27468;k[Ba>>2]=27488;k[za>>2]=27560;Yua(Na);Ava(za);vva(Ba);Ha=F+56|0;Ga=F+4|0;k[F>>2]=27524;k[Ha>>2]=27544;B=0;wa(508,F+56|0,Ga|0);La=B;B=0;if(La&1){La=Rb()|0;Hb=Q;Ib=La;vva(Ha);Qb(Ib|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[Ha>>2]=27488;B=0;va(448,Ga|0);La=B;B=0;do if(La&1){Ka=Rb()|0;Jb=Q;Kb=Ka}else{k[Ga>>2]=27560;Ka=F+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[F+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ga|0,c|0);Ja=B;B=0;if(Ja&1){Ja=Rb()|0;m=Q;Yua(c);Yua(Ka);Ava(Ga);Jb=m;Kb=Ja;break}Yua(c);B=0;Ia(40,F|0,140446,74)|0;Ja=B;B=0;do if(Ja&1)W=222;else{B=0;wa(510,G|0,Ga|0);m=B;B=0;if(m&1){W=222;break}B=0;ya(425,G|0)|0;m=B;B=0;if(m&1){m=Rb()|0;n=Q;Yua(G);Lb=n;Mb=m;break}Yua(G);k[F>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Ka);Ava(Ga);vva(Ha);m=H+56|0;n=H+4|0;k[H>>2]=27524;k[m>>2]=27544;B=0;wa(508,H+56|0,n|0);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Nb=Q;Ob=Ma;vva(m);Qb(Ob|0)}k[H+128>>2]=0;k[H+132>>2]=-1;k[H>>2]=27468;k[m>>2]=27488;B=0;va(448,n|0);Ma=B;B=0;do if(Ma&1){o=Rb()|0;Pb=Q;Sb=o}else{k[n>>2]=27560;o=H+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[H+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,n|0,c|0);Z=B;B=0;if(Z&1){Z=Rb()|0;Y=Q;Yua(c);Yua(o);Ava(n);Pb=Y;Sb=Z;break}Yua(c);B=0;Ia(40,H|0,140521,74)|0;Z=B;B=0;do if(Z&1)W=225;else{B=0;wa(510,I|0,n|0);Y=B;B=0;if(Y&1){W=225;break}B=0;ya(425,I|0)|0;Y=B;B=0;if(Y&1){Y=Rb()|0;ba=Q;Yua(I);Tb=ba;Ub=Y;break}Yua(I);k[H>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(o);Ava(n);vva(m);Y=J+56|0;ba=J+4|0;k[J>>2]=27524;k[Y>>2]=27544;B=0;wa(508,J+56|0,ba|0);ea=B;B=0;if(ea&1){ea=Rb()|0;Vb=Q;Wb=ea;vva(Y);Qb(Wb|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[Y>>2]=27488;B=0;va(448,ba|0);ea=B;B=0;do if(ea&1){da=Rb()|0;Xb=Q;Yb=da}else{k[ba>>2]=27560;da=J+36|0;k[da>>2]=0;k[da+4>>2]=0;k[da+8>>2]=0;k[da+12>>2]=0;k[J+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ba|0,c|0);aa=B;B=0;if(aa&1){aa=Rb()|0;sa=Q;Yua(c);Yua(da);Ava(ba);Xb=sa;Yb=aa;break}Yua(c);B=0;Ia(40,J|0,140341,74)|0;aa=B;B=0;do if(aa&1)W=228;else{B=0;wa(510,K|0,ba|0);sa=B;B=0;if(sa&1){W=228;break}B=0;ya(425,K|0)|0;sa=B;B=0;if(sa&1){sa=Rb()|0;ra=Q;Yua(K);Zb=ra;_b=sa;break}Yua(K);k[J>>2]=27468;k[Y>>2]=27488;k[ba>>2]=27560;Yua(da);Ava(ba);vva(Y);sa=L+56|0;ra=L+4|0;k[L>>2]=27524;k[sa>>2]=27544;B=0;wa(508,L+56|0,ra|0);f=B;B=0;if(f&1){f=Rb()|0;$b=Q;ac=f;vva(sa);Qb(ac|0)}k[L+128>>2]=0;k[L+132>>2]=-1;k[L>>2]=27468;k[sa>>2]=27488;B=0;va(448,ra|0);f=B;B=0;do if(f&1){ma=Rb()|0;bc=Q;cc=ma}else{k[ra>>2]=27560;ma=L+36|0;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[L+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ra|0,c|0);la=B;B=0;if(la&1){la=Rb()|0;oa=Q;Yua(c);Yua(ma);Ava(ra);bc=oa;cc=la;break}Yua(c);B=0;Ia(40,L|0,140191,74)|0;la=B;B=0;do if(la&1)W=231;else{B=0;wa(510,M|0,ra|0);oa=B;B=0;if(oa&1){W=231;break}B=0;ya(425,M|0)|0;oa=B;B=0;if(oa&1){oa=Rb()|0;na=Q;Yua(M);dc=na;ec=oa;break}Yua(M);k[L>>2]=27468;k[sa>>2]=27488;k[ra>>2]=27560;Yua(ma);Ava(ra);vva(sa);oa=N+56|0;na=N+4|0;k[N>>2]=27524;k[oa>>2]=27544;B=0;wa(508,N+56|0,na|0);pa=B;B=0;if(pa&1){pa=Rb()|0;fc=Q;gc=pa;vva(oa);Qb(gc|0)}k[N+128>>2]=0;k[N+132>>2]=-1;k[N>>2]=27468;k[oa>>2]=27488;B=0;va(448,na|0);pa=B;B=0;do if(pa&1){g=Rb()|0;hc=Q;ic=g}else{k[na>>2]=27560;g=N+36|0;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;k[g+12>>2]=0;k[N+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,na|0,c|0);h=B;B=0;if(h&1){h=Rb()|0;qa=Q;Yua(c);Yua(g);Ava(na);hc=qa;ic=h;break}Yua(c);B=0;Ia(40,N|0,149177,1)|0;h=B;B=0;do if(h&1)W=234;else{B=0;wa(510,O|0,na|0);qa=B;B=0;if(qa&1){W=234;break}B=0;ya(425,O|0)|0;qa=B;B=0;if(qa&1){qa=Rb()|0;j=Q;Yua(O);jc=j;kc=qa;break}Yua(O);k[N>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(g);Ava(na);vva(oa);qa=P+56|0;j=P+4|0;k[P>>2]=27524;k[qa>>2]=27544;B=0;wa(508,P+56|0,j|0);V=B;B=0;if(V&1){V=Rb()|0;lc=Q;mc=V;vva(qa);Qb(mc|0)}k[P+128>>2]=0;k[P+132>>2]=-1;k[P>>2]=27468;k[qa>>2]=27488;B=0;va(448,j|0);V=B;B=0;do if(V&1){U=Rb()|0;nc=Q;oc=U}else{k[j>>2]=27560;U=P+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[P+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,j|0,c|0);e=B;B=0;if(e&1){e=Rb()|0;d=Q;Yua(c);Yua(U);Ava(j);nc=d;oc=e;break}Yua(c);B=0;e=Ia(40,P|0,140596,47)|0;d=B;B=0;e:do if(d&1)W=237;else{B=0;Xa(239,e|0,0)|0;fa=B;B=0;if(fa&1){W=237;break}fa=Ab(20)|0;B=0;eb(502,R|0,140006,66);X=B;B=0;do if(!(X&1)){B=0;eb(502,S|0,140073,9);a=B;B=0;if(a&1){a=Rb()|0;ja=Q;Yua(R);pc=ja;qc=a;break}B=0;wa(510,T|0,j|0);a=B;B=0;if(a&1){a=Rb()|0;rc=1;sc=Q;tc=a}else{B=0;ua(163,fa|0,R|0,S|0,374,T|0);a=B;B=0;if(a&1)uc=1;else{B=0;eb(503,fa|0,1240,229);B=0;uc=0}a=Rb()|0;ja=Q;Yua(T);rc=uc;sc=ja;tc=a}Yua(S);Yua(R);if(rc){pc=sc;qc=tc}else{vc=sc;wc=tc;break e}}else{a=Rb()|0;pc=Q;qc=a}while(0);zb(fa|0);vc=pc;wc=qc}while(0);if((W|0)==237){e=Rb()|0;vc=Q;wc=e}k[P>>2]=27468;k[qa>>2]=27488;k[j>>2]=27560;Yua(U);Ava(j);vva(qa);ta=vc;xa=wc;Qb(xa|0)}while(0);lc=nc;mc=oc;vva(qa);Qb(mc|0)}while(0);if((W|0)==234){h=Rb()|0;jc=Q;kc=h}k[N>>2]=27468;k[oa>>2]=27488;k[na>>2]=27560;Yua(g);Ava(na);vva(oa);ta=jc;xa=kc;Qb(xa|0)}while(0);fc=hc;gc=ic;vva(oa);Qb(gc|0)}while(0);if((W|0)==231){la=Rb()|0;dc=Q;ec=la}k[L>>2]=27468;k[sa>>2]=27488;k[ra>>2]=27560;Yua(ma);Ava(ra);vva(sa);ta=dc;xa=ec;Qb(xa|0)}while(0);$b=bc;ac=cc;vva(sa);Qb(ac|0)}while(0);if((W|0)==228){aa=Rb()|0;Zb=Q;_b=aa}k[J>>2]=27468;k[Y>>2]=27488;k[ba>>2]=27560;Yua(da);Ava(ba);vva(Y);ta=Zb;xa=_b;Qb(xa|0)}while(0);Vb=Xb;Wb=Yb;vva(Y);Qb(Wb|0)}while(0);if((W|0)==225){Z=Rb()|0;Tb=Q;Ub=Z}k[H>>2]=27468;k[m>>2]=27488;k[n>>2]=27560;Yua(o);Ava(n);vva(m);ta=Tb;xa=Ub;Qb(xa|0)}while(0);Nb=Pb;Ob=Sb;vva(m);Qb(Ob|0)}while(0);if((W|0)==222){Ja=Rb()|0;Lb=Q;Mb=Ja}k[F>>2]=27468;k[Ha>>2]=27488;k[Ga>>2]=27560;Yua(Ka);Ava(Ga);vva(Ha);ta=Lb;xa=Mb;Qb(xa|0)}while(0);Hb=Jb;Ib=Kb;vva(Ha);Qb(Ib|0)}while(0);if((W|0)==219){l=Rb()|0;Fb=Q;Gb=l}k[D>>2]=27468;k[Ba>>2]=27488;k[za>>2]=27560;Yua(Na);Ava(za);vva(Ba);ta=Fb;xa=Gb;Qb(xa|0)}while(0);Bb=Db;Cb=Eb;vva(Ba);Qb(Cb|0)}while(0);if((W|0)==216){Ca=Rb()|0;xb=Q;yb=Ca}k[A>>2]=27468;k[t>>2]=27488;k[b>>2]=27560;Yua(Aa);Ava(b);vva(t);ta=xb;xa=yb;Qb(xa|0)}while(0);tb=vb;ub=wb;vva(t);Qb(ub|0)}while(0);if((W|0)==213){Za=Rb()|0;rb=Q;sb=Za}k[y>>2]=27468;k[Wa>>2]=27488;k[Va>>2]=27560;Yua(s);Ava(Va);vva(Wa);ta=rb;xa=sb;Qb(xa|0)}while(0);nb=pb;ob=qb;vva(Wa);Qb(ob|0)}else W=210;while(0);if((W|0)==210){Ya=Rb()|0;lb=Q;mb=Ya}k[w>>2]=27468;k[_a>>2]=27488;k[p>>2]=27560;Yua(Ta);Ava(p);vva(_a);ta=lb;xa=mb;Qb(xa|0)}while(0);hb=jb;ib=kb;vva(_a);Qb(ib|0)}else W=207;while(0);if((W|0)==207){$a=Rb()|0;fb=Q;gb=$a}k[u>>2]=27468;k[Qa>>2]=27488;k[Sa>>2]=27560;Yua(Pa);Ava(Sa);vva(Qa);ta=fb;xa=gb;Qb(xa|0)}while(0);ab=cb;bb=db;vva(Qa);Qb(bb|0)}function xka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;c=r;r=r+192|0;d=c+176|0;e=c+189|0;f=c+188|0;g=c+40|0;h=c+24|0;j=c+12|0;l=c;Kka(a,e,139768);Kka(a,f,139791);if(!b?!((i[e>>0]|0)!=0&(i[f>>0]|0)==0):0){r=c;return}c=g+56|0;f=g+4|0;k[g>>2]=27524;k[c>>2]=27544;B=0;wa(508,g+56|0,f|0);e=B;B=0;if(e&1){e=Rb()|0;m=Q;n=e;vva(c);Qb(n|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[c>>2]=27488;B=0;va(448,f|0);e=B;B=0;do if(e&1){b=Rb()|0;o=Q;p=b}else{k[f>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,f|0,d|0);a=B;B=0;if(a&1){a=Rb()|0;q=Q;Yua(d);Yua(b);Ava(f);o=q;p=a;break}Yua(d);B=0;a=Ia(40,g|0,140644,75)|0;q=B;B=0;if(!(q&1)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,h|0,140006,66);q=B;B=0;do if(!(q&1)){B=0;eb(502,j|0,140720,19);s=B;B=0;if(s&1){s=Rb()|0;t=Q;Yua(h);u=t;v=s;break}B=0;wa(510,l|0,f|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;x=s;y=1}else{B=0;ua(163,a|0,h|0,j|0,738,l|0);s=B;B=0;if(s&1)z=1;else{B=0;eb(503,a|0,1240,229);B=0;z=0}s=Rb()|0;t=Q;Yua(l);w=t;x=s;y=z}Yua(j);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[c>>2]=27488;k[f>>2]=27560;Yua(b);Ava(f);vva(c);Qb(C|0)}}else{s=Rb()|0;u=Q;v=s}while(0);zb(a|0);A=u;C=v;k[g>>2]=27468;k[c>>2]=27488;k[f>>2]=27560;Yua(b);Ava(f);vva(c);Qb(C|0)}q=Rb()|0;A=Q;C=q;k[g>>2]=27468;k[c>>2]=27488;k[f>>2]=27560;Yua(b);Ava(f);vva(c);Qb(C|0)}while(0);m=o;n=p;vva(c);Qb(n|0)}function yka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Pa=0,Qa=0.0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0;b=r;r=r+2656|0;c=b+2636|0;d=b+2584|0;e=b+2556|0;f=b+2552|0;g=b+2548|0;h=b+2532|0;j=b;l=b+2504|0;m=b+2488|0;n=b+2352|0;o=b+2624|0;q=b+2612|0;s=b+2600|0;t=b+2200|0;u=b+2588|0;v=b+2572|0;w=b+2560|0;x=b+2048|0;y=b+2536|0;z=b+2520|0;A=b+2508|0;C=b+1912|0;D=b+2492|0;E=b+2336|0;F=b+2184|0;G=b+1752|0;H=b+1900|0;I=b+1888|0;J=b+1736|0;K=b+1600|0;L=b+1312|0;M=b+1164|0;N=b+1152|0;O=b+1464|0;P=b+732|0;R=b+720|0;S=b+432|0;T=b+1328|0;U=b+284|0;V=b+272|0;W=b+260|0;X=b+1176|0;Y=b+248|0;Z=b+236|0;_=b+224|0;$=b+1016|0;aa=b+212|0;ba=b+200|0;ca=b+188|0;da=b+880|0;ea=b+176|0;fa=b+164|0;ga=b+152|0;ha=b+744|0;ia=b+140|0;ja=b+128|0;ka=b+116|0;la=b+584|0;ma=b+104|0;na=b+92|0;oa=b+80|0;pa=b+448|0;qa=b+68|0;ra=b+56|0;sa=b+44|0;ta=b+296|0;xa=b+32|0;za=b+20|0;Aa=b+8|0;k[g>>2]=0;k[h>>2]=0;p[j>>3]=0.0;if(vY()|0){uY()|0;if(!(k[f>>2]|0)){r=b;return}Ba=a+4|0;a:while(1){uY()|0;Ca=k[d>>2]|0;Da=Rqa(Ca+1|0)|0;i[Da+Ca>>0]=0;uY()|0;uY()|0;b:do switch(k[f>>2]|0){case 1:{uY()|0;Ca=Qqa(12)|0;Ea=k[g>>2]|0;i[Ca>>0]=0;B=0;Fa=ya(423,12)|0;Ga=B;B=0;if(Ga&1){Ha=Ca;Ja=408;break a}B=0;eb(517,Fa|0,0,(Ea|0)!=0|0);Ea=B;B=0;if(Ea&1){Ka=Ca;La=Fa;Ja=405;break a}k[Ca+8>>2]=Fa;Fa=(Lta(Da)|0)+1|0;B=0;Ea=ya(422,Fa|0)|0;Ga=B;B=0;if(Ga&1){Ha=Ca;Ja=408;break a}k[Ca+4>>2]=Ea;TEa(Ea|0,Da|0,Fa|0)|0;Aka(a,Ca);break}case 2:{uY()|0;Ca=Qqa(12)|0;Fa=k[h>>2]|0;i[Ca>>0]=0;B=0;Ea=ya(423,12)|0;Ga=B;B=0;if(Ga&1){Ma=Ca;Ja=415;break a}B=0;eb(518,Ea|0,0,Fa|0);Fa=B;B=0;if(Fa&1){Na=Ca;Pa=Ea;Ja=413;break a}k[Ca+8>>2]=Ea;Ea=(Lta(Da)|0)+1|0;B=0;Fa=ya(422,Ea|0)|0;Ga=B;B=0;if(Ga&1){Ma=Ca;Ja=415;break a}k[Ca+4>>2]=Fa;TEa(Fa|0,Da|0,Ea|0)|0;Aka(a,Ca);break}case 3:{Ca=k[a>>2]|0;Ea=k[Ba>>2]|0;if(Ca>>>0<Ea>>>0){Fa=0;Ga=Ca;do{Ca=(Ita(k[(k[Ga>>2]|0)+4>>2]|0,Da)|0)==0;Fa=Fa|Ca;Ga=Ga+4|0}while(Ga>>>0<Ea>>>0&(Ca^1));if(Fa)break b}uY()|0;Qa=+p[j>>3];Ea=Qqa(12)|0;i[Ea>>0]=0;B=0;Ga=ya(423,16)|0;Ca=B;B=0;if(Ca&1){Ra=Ea;Ja=425;break a}B=0;Oa(59,Ga|0,0,+Qa);Ca=B;B=0;if(Ca&1){Sa=Ea;Ta=Ga;Ja=423;break a}k[Ea+8>>2]=Ga;Ga=(Lta(Da)|0)+1|0;B=0;Ca=ya(422,Ga|0)|0;Ua=B;B=0;if(Ua&1){Ra=Ea;Ja=425;break a}k[Ea+4>>2]=Ca;TEa(Ca|0,Da|0,Ga|0)|0;Aka(a,Ea);break}case 4:{uY()|0;Ea=k[l>>2]|0;if(!Ea){Ga=Rqa(1)|0;i[Ga>>0]=0;Va=Ga}else{Ga=Rqa(Ea+1|0)|0;i[Ga+Ea>>0]=0;uY()|0;Va=Ga}Ga=Qqa(12)|0;i[Ga>>0]=0;B=0;Ea=ya(423,12)|0;Ca=B;B=0;if(Ca&1){Wa=Ga;Ja=435;break a}B=0;eb(530,Ea|0,0,Va|0);Ca=B;B=0;if(Ca&1){Ya=Ga;Za=Ea;Ja=433;break a}k[Ga+8>>2]=Ea;Ea=(Lta(Da)|0)+1|0;B=0;Ca=ya(422,Ea|0)|0;Ua=B;B=0;if(Ua&1){Wa=Ga;Ja=435;break a}k[Ga+4>>2]=Ca;TEa(Ca|0,Da|0,Ea|0)|0;Aka(a,Ga);Tqa(Va);break}case 8:case 7:case 6:case 5:break;case 9:{uY()|0;Ga=k[m>>2]|0;if(Ga){Ea=Rqa(Ga>>>0>1073741823?-1:Ga<<2)|0;if((Ga|0)>0){WEa(Ea|0,0,((Ga|0)>1?Ga:1)<<2|0)|0;Ca=0;do{uY()|0;Ua=k[l>>2]|0;if(!Ua){_a=Rqa(1)|0;i[_a>>0]=0;$a=_a}else{_a=Rqa(Ua+1|0)|0;i[_a+Ua>>0]=0;uY()|0;$a=_a}k[Ea+(Ca<<2)>>2]=$a;Ca=Ca+1|0;_a=k[m>>2]|0}while((Ca|0)<(_a|0));ab=_a;bb=Ea}else{ab=Ga;bb=Ea}}else{ab=0;bb=0}Ca=Qqa(12)|0;i[Ca>>0]=0;B=0;Fa=ya(423,16)|0;_a=B;B=0;if(_a&1){cb=Ca;Ja=451;break a}B=0;ib(294,Fa|0,0,bb|0,ab|0);_a=B;B=0;if(_a&1){db=Ca;fb=Fa;Ja=447;break a}k[Ca+8>>2]=Fa;Fa=(Lta(Da)|0)+1|0;B=0;_a=ya(422,Fa|0)|0;Ua=B;B=0;if(Ua&1){cb=Ca;Ja=451;break a}k[Ca+4>>2]=_a;TEa(_a|0,Da|0,Fa|0)|0;Aka(a,Ca);Ca=k[m>>2]|0;if((Ca|0)<=0){if(!bb)break b}else{Fa=Ca;Ca=0;while(1){_a=bb+(Ca<<2)|0;Ua=k[_a>>2]|0;if(!Ua)gb=Fa;else{Tqa(Ua);gb=k[m>>2]|0}k[_a>>2]=0;Ca=Ca+1|0;if((Ca|0)>=(gb|0))break;else Fa=gb}}Tqa(bb);break}default:{Ja=456;break a}}while(0);uY()|0;if(!(k[f>>2]|0)){Ja=480;break}}switch(Ja|0){case 405:{bb=Rb()|0;gb=Q;Sqa(La);hb=Ka;jb=gb;kb=bb;Ja=409;break}case 408:{bb=Rb()|0;hb=Ha;jb=Q;kb=bb;Ja=409;break}case 413:{bb=Rb()|0;Ha=Q;Sqa(Pa);lb=Na;mb=Ha;nb=bb;Ja=416;break}case 415:{bb=Rb()|0;lb=Ma;mb=Q;nb=bb;Ja=416;break}case 423:{bb=Rb()|0;Ma=Q;Sqa(Ta);ob=Sa;pb=Ma;qb=bb;Ja=426;break}case 425:{bb=Rb()|0;ob=Ra;pb=Q;qb=bb;Ja=426;break}case 433:{bb=Rb()|0;Ra=Q;Sqa(Za);rb=Ya;sb=Ra;tb=bb;Ja=436;break}case 435:{bb=Rb()|0;rb=Wa;sb=Q;tb=bb;Ja=436;break}case 447:{bb=Rb()|0;Wa=Q;Sqa(fb);ub=db;vb=Wa;wb=bb;Ja=452;break}case 451:{bb=Rb()|0;ub=cb;vb=Q;wb=bb;Ja=452;break}case 456:{bb=ta+56|0;cb=ta+4|0;k[ta>>2]=27524;k[bb>>2]=27544;B=0;wa(508,ta+56|0,cb|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;xb=Q;yb=Wa;vva(bb);Qb(yb|0)}k[ta+128>>2]=0;k[ta+132>>2]=-1;k[ta>>2]=27468;k[bb>>2]=27488;B=0;va(448,cb|0);Wa=B;B=0;do if(Wa&1){db=Rb()|0;Bb=Q;Cb=db}else{k[cb>>2]=27560;db=ta+36|0;k[db>>2]=0;k[db+4>>2]=0;k[db+8>>2]=0;k[db+12>>2]=0;k[ta+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,cb|0,c|0);fb=B;B=0;if(fb&1){fb=Rb()|0;Ra=Q;Yua(c);Yua(db);Ava(cb);Bb=Ra;Cb=fb;break}Yua(c);B=0;fb=Ia(40,ta|0,141004,20)|0;Ra=B;B=0;c:do if((!(Ra&1)?(B=0,Ya=Xa(242,fb|0,k[f>>2]|0)|0,Za=B,B=0,!(Za&1)):0)?(B=0,Xa(239,Ya|0,0)|0,Ya=B,B=0,!(Ya&1)):0){Ya=Ab(20)|0;B=0;eb(502,xa|0,140006,66);Za=B;B=0;do if(!(Za&1)){B=0;eb(502,za|0,140740,14);Ma=B;B=0;if(Ma&1){Ma=Rb()|0;Sa=Q;Yua(xa);Db=Ma;Eb=Sa;break}B=0;wa(510,Aa|0,cb|0);Sa=B;B=0;if(Sa&1){Sa=Rb()|0;Fb=1;Gb=Sa;Hb=Q}else{B=0;ua(163,Ya|0,xa|0,za|0,1090,Aa|0);Sa=B;B=0;if(Sa&1)Ib=1;else{B=0;eb(503,Ya|0,1240,229);B=0;Ib=0}Sa=Rb()|0;Ma=Q;Yua(Aa);Fb=Ib;Gb=Sa;Hb=Ma}Yua(za);Yua(xa);if(Fb){Db=Gb;Eb=Hb}else{Jb=Gb;Kb=Hb;break c}}else{Ma=Rb()|0;Db=Ma;Eb=Q}while(0);zb(Ya|0);Jb=Db;Kb=Eb}else Ja=472;while(0);if((Ja|0)==472){fb=Rb()|0;Jb=fb;Kb=Q}k[ta>>2]=27468;k[bb>>2]=27488;k[cb>>2]=27560;Yua(db);Ava(cb);vva(bb);Lb=Jb;Mb=Kb;Qb(Lb|0)}while(0);xb=Bb;yb=Cb;vva(bb);Qb(yb|0);break}case 480:{r=b;return}}if((Ja|0)==409){Sqa(hb);Lb=kb;Mb=jb;Qb(Lb|0)}else if((Ja|0)==416){Sqa(lb);Lb=nb;Mb=mb;Qb(Lb|0)}else if((Ja|0)==426){Sqa(ob);Lb=qb;Mb=pb;Qb(Lb|0)}else if((Ja|0)==436){Sqa(rb);Lb=tb;Mb=sb;Qb(Lb|0)}else if((Ja|0)==452){Sqa(ub);Lb=wb;Mb=vb;Qb(Lb|0)}}vb=a+24|0;dta(k[vb>>2]|0,0,0)|0;d:do if(ata(d,4,1,k[vb>>2]|0)|0){wb=a+4|0;e:while(1){ub=k[d>>2]|0;if((ub+-3|0)>>>0>77){Ja=8;break}sb=Rqa(ub+1|0)|0;i[sb+ub>>0]=0;if(!(ata(sb,ub,1,k[vb>>2]|0)|0)){Ja=33;break}if(Mta(sb,140083,3)|0){Nb=sb;Ja=57;break}if((ata(e,4,1,k[vb>>2]|0)|0)!=1){Ja=82;break}if((ata(f,4,1,k[vb>>2]|0)|0)!=1){Ja=106;break}uY()|0;uY()|0;uY()|0;uY()|0;f:do switch(k[f>>2]|0){case 1:{if((ata(g,4,1,k[vb>>2]|0)|0)!=1){Ja=131;break e}uY()|0;ub=Qqa(12)|0;tb=k[g>>2]|0;i[ub>>0]=0;B=0;rb=ya(423,12)|0;pb=B;B=0;if(pb&1){Ob=ub;Ja=159;break e}B=0;eb(517,rb|0,0,(tb|0)!=0|0);tb=B;B=0;if(tb&1){Pb=ub;Sb=rb;Ja=157;break e}k[ub+8>>2]=rb;rb=(Lta(sb)|0)+1|0;B=0;tb=ya(422,rb|0)|0;pb=B;B=0;if(pb&1){Ob=ub;Ja=159;break e}k[ub+4>>2]=tb;TEa(tb|0,sb|0,rb|0)|0;Aka(a,ub);break}case 2:{if((ata(h,4,1,k[vb>>2]|0)|0)!=1){Ja=162;break e}uY()|0;ub=Qqa(12)|0;rb=k[h>>2]|0;i[ub>>0]=0;B=0;tb=ya(423,12)|0;pb=B;B=0;if(pb&1){Tb=ub;Ja=190;break e}B=0;eb(518,tb|0,0,rb|0);rb=B;B=0;if(rb&1){Ub=ub;Vb=tb;Ja=188;break e}k[ub+8>>2]=tb;tb=(Lta(sb)|0)+1|0;B=0;rb=ya(422,tb|0)|0;pb=B;B=0;if(pb&1){Tb=ub;Ja=190;break e}k[ub+4>>2]=rb;TEa(rb|0,sb|0,tb|0)|0;Aka(a,ub);break}case 3:{ub=k[a>>2]|0;tb=k[wb>>2]|0;if(ub>>>0<tb>>>0){rb=0;pb=ub;do{ub=(Ita(k[(k[pb>>2]|0)+4>>2]|0,sb)|0)==0;rb=rb|ub;pb=pb+4|0}while(pb>>>0<tb>>>0&(ub^1));if(rb)break f}if((ata(j,8,1,k[vb>>2]|0)|0)!=1){Ja=196;break e}uY()|0;Qa=+p[j>>3];tb=Qqa(12)|0;i[tb>>0]=0;B=0;pb=ya(423,16)|0;ub=B;B=0;if(ub&1){Wb=tb;Ja=224;break e}B=0;Oa(59,pb|0,0,+Qa);ub=B;B=0;if(ub&1){Xb=tb;Yb=pb;Ja=222;break e}k[tb+8>>2]=pb;pb=(Lta(sb)|0)+1|0;B=0;ub=ya(422,pb|0)|0;qb=B;B=0;if(qb&1){Wb=tb;Ja=224;break e}k[tb+4>>2]=ub;TEa(ub|0,sb|0,pb|0)|0;Aka(a,tb);break}case 4:{if((ata(l,4,1,k[vb>>2]|0)|0)!=1){Ja=227;break e}uY()|0;tb=k[l>>2]|0;if(!tb){pb=Rqa(1)|0;i[pb>>0]=0;Zb=pb}else{pb=Rqa(tb+1|0)|0;i[pb+tb>>0]=0;if((ata(pb,tb,1,k[vb>>2]|0)|0)!=1){Ja=252;break e}uY()|0;Zb=pb}pb=Qqa(12)|0;i[pb>>0]=0;B=0;tb=ya(423,12)|0;ub=B;B=0;if(ub&1){_b=pb;Ja=282;break e}B=0;eb(530,tb|0,0,Zb|0);ub=B;B=0;if(ub&1){$b=pb;ac=tb;Ja=280;break e}k[pb+8>>2]=tb;tb=(Lta(sb)|0)+1|0;B=0;ub=ya(422,tb|0)|0;qb=B;B=0;if(qb&1){_b=pb;Ja=282;break e}k[pb+4>>2]=ub;TEa(ub|0,sb|0,tb|0)|0;Aka(a,pb);Tqa(Zb);break}case 8:case 7:case 6:case 5:{dta(k[vb>>2]|0,-4,1)|0;dta(k[vb>>2]|0,k[e>>2]|0,1)|0;break}case 9:{if((ata(m,4,1,k[vb>>2]|0)|0)!=1){Ja=286;break e}uY()|0;pb=k[m>>2]|0;if(pb){tb=Rqa(pb>>>0>1073741823?-1:pb<<2)|0;if((pb|0)>0){WEa(tb|0,0,((pb|0)>1?pb:1)<<2|0)|0;ub=0;while(1){if((ata(l,4,1,k[vb>>2]|0)|0)!=1){Ja=313;break e}uY()|0;qb=k[l>>2]|0;if(!qb){ob=Rqa(1)|0;i[ob>>0]=0;bc=ob}else{ob=Rqa(qb+1|0)|0;i[ob+qb>>0]=0;if((ata(ob,qb,1,k[vb>>2]|0)|0)!=1){Ja=338;break e}uY()|0;bc=ob}k[tb+(ub<<2)>>2]=bc;ub=ub+1|0;ob=k[m>>2]|0;if((ub|0)>=(ob|0)){cc=ob;dc=tb;break}}}else{cc=pb;dc=tb}}else{cc=0;dc=0}ub=Qqa(12)|0;i[ub>>0]=0;B=0;rb=ya(423,16)|0;ob=B;B=0;if(ob&1){ec=ub;Ja=371;break e}B=0;ib(294,rb|0,0,dc|0,cc|0);ob=B;B=0;if(ob&1){fc=ub;gc=rb;Ja=367;break e}k[ub+8>>2]=rb;rb=(Lta(sb)|0)+1|0;B=0;ob=ya(422,rb|0)|0;qb=B;B=0;if(qb&1){ec=ub;Ja=371;break e}k[ub+4>>2]=ob;TEa(ob|0,sb|0,rb|0)|0;Aka(a,ub);ub=k[m>>2]|0;if((ub|0)<=0){if(!dc)break f}else{rb=ub;ub=0;while(1){ob=dc+(ub<<2)|0;qb=k[ob>>2]|0;if(!qb)hc=rb;else{Tqa(qb);hc=k[m>>2]|0}k[ob>>2]=0;ub=ub+1|0;if((ub|0)>=(hc|0))break;else rb=hc}}Tqa(dc);break}default:{Ja=376;break e}}while(0);Tqa(sb);if(!(ata(d,4,1,k[vb>>2]|0)|0))break d}switch(Ja|0){case 8:{wb=n+56|0;db=n+4|0;k[n>>2]=27524;k[wb>>2]=27544;B=0;wa(508,n+56|0,db|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;ic=Q;jc=Ya;vva(wb);Qb(jc|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[wb>>2]=27488;B=0;va(448,db|0);Ya=B;B=0;do if(Ya&1){rb=Rb()|0;kc=Q;lc=rb}else{k[db>>2]=27560;rb=n+36|0;k[rb>>2]=0;k[rb+4>>2]=0;k[rb+8>>2]=0;k[rb+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);ub=B;B=0;if(ub&1){ub=Rb()|0;tb=Q;Yua(c);Yua(rb);Ava(db);kc=tb;lc=ub;break}Yua(c);B=0;ub=Ia(40,n|0,139946,59)|0;tb=B;B=0;g:do if((!(tb&1)?(B=0,pb=Xa(242,ub|0,k[d>>2]|0)|0,ob=B,B=0,!(ob&1)):0)?(B=0,Xa(239,pb|0,0)|0,pb=B,B=0,!(pb&1)):0){pb=Ab(20)|0;B=0;eb(502,o|0,140006,66);ob=B;B=0;do if(!(ob&1)){B=0;eb(502,q|0,140740,14);qb=B;B=0;if(qb&1){qb=Rb()|0;mb=Q;Yua(o);mc=mb;nc=qb;break}B=0;wa(510,s|0,db|0);qb=B;B=0;if(qb&1){qb=Rb()|0;oc=Q;pc=qb;qc=1}else{B=0;ua(163,pb|0,o|0,q|0,841,s|0);qb=B;B=0;if(qb&1)rc=1;else{B=0;eb(503,pb|0,1240,229);B=0;rc=0}qb=Rb()|0;mb=Q;Yua(s);oc=mb;pc=qb;qc=rc}Yua(q);Yua(o);if(qc){mc=oc;nc=pc}else{sc=oc;tc=pc;break g}}else{qb=Rb()|0;mc=Q;nc=qb}while(0);zb(pb|0);sc=mc;tc=nc}else Ja=24;while(0);if((Ja|0)==24){ub=Rb()|0;sc=Q;tc=ub}k[n>>2]=27468;k[wb>>2]=27488;k[db>>2]=27560;Yua(rb);Ava(db);vva(wb);Lb=tc;Mb=sc;Qb(Lb|0)}while(0);ic=kc;jc=lc;vva(wb);Qb(jc|0);break}case 33:{db=t+56|0;Ya=t+4|0;k[t>>2]=27524;k[db>>2]=27544;B=0;wa(508,t+56|0,Ya|0);ub=B;B=0;if(ub&1){ub=Rb()|0;uc=Q;vc=ub;vva(db);Qb(vc|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[db>>2]=27488;B=0;va(448,Ya|0);ub=B;B=0;do if(ub&1){tb=Rb()|0;wc=Q;xc=tb}else{k[Ya>>2]=27560;tb=t+36|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);sb=B;B=0;if(sb&1){sb=Rb()|0;ob=Q;Yua(c);Yua(tb);Ava(Ya);wc=ob;xc=sb;break}Yua(c);B=0;sb=Ia(40,t|0,140755,26)|0;ob=B;B=0;h:do if(!(ob&1)?(B=0,Xa(239,sb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,u|0,140006,66);mb=B;B=0;do if(!(mb&1)){B=0;eb(502,v|0,140740,14);nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(u);yc=lb;zc=nb;break}B=0;wa(510,w|0,Ya|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Ac=1;Bc=nb;Cc=Q}else{B=0;ua(163,qb|0,u|0,v|0,850,w|0);nb=B;B=0;if(nb&1)Dc=1;else{B=0;eb(503,qb|0,1240,229);B=0;Dc=0}nb=Rb()|0;lb=Q;Yua(w);Ac=Dc;Bc=nb;Cc=lb}Yua(v);Yua(u);if(Ac){yc=Cc;zc=Bc}else{Ec=Bc;Fc=Cc;break h}}else{lb=Rb()|0;yc=Q;zc=lb}while(0);zb(qb|0);Ec=zc;Fc=yc}else Ja=48;while(0);if((Ja|0)==48){sb=Rb()|0;Ec=sb;Fc=Q}k[t>>2]=27468;k[db>>2]=27488;k[Ya>>2]=27560;Yua(tb);Ava(Ya);vva(db);Lb=Ec;Mb=Fc;Qb(Lb|0)}while(0);uc=wc;vc=xc;vva(db);Qb(vc|0);break}case 57:{Ya=x+56|0;ub=x+4|0;k[x>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,x+56|0,ub|0);wb=B;B=0;if(wb&1){wb=Rb()|0;Gc=Q;Hc=wb;vva(Ya);Qb(Hc|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[Ya>>2]=27488;B=0;va(448,ub|0);wb=B;B=0;do if(wb&1){sb=Rb()|0;Ic=Q;Jc=sb}else{k[ub>>2]=27560;sb=x+36|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[x+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);ob=B;B=0;if(ob&1){ob=Rb()|0;rb=Q;Yua(c);Yua(sb);Ava(ub);Ic=rb;Jc=ob;break}Yua(c);B=0;ob=Ia(40,x|0,140087,67)|0;rb=B;B=0;i:do if((!(rb&1)?(mb=Lta(Nb)|0,B=0,pb=Ia(40,ob|0,Nb|0,mb|0)|0,mb=B,B=0,!(mb&1)):0)?(B=0,Xa(239,pb|0,0)|0,pb=B,B=0,!(pb&1)):0){pb=Ab(20)|0;B=0;eb(502,y|0,140006,66);mb=B;B=0;do if(!(mb&1)){B=0;eb(502,z|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(y);Kc=nb;Lc=lb;break}B=0;wa(510,A|0,ub|0);lb=B;B=0;if(lb&1){lb=Rb()|0;Mc=1;Nc=lb;Oc=Q}else{B=0;ua(163,pb|0,y|0,z|0,853,A|0);lb=B;B=0;if(lb&1)Pc=1;else{B=0;eb(503,pb|0,1240,229);B=0;Pc=0}lb=Rb()|0;nb=Q;Yua(A);Mc=Pc;Nc=lb;Oc=nb}Yua(z);Yua(y);if(Mc){Kc=Oc;Lc=Nc}else{Qc=Nc;Rc=Oc;break i}}else{nb=Rb()|0;Kc=Q;Lc=nb}while(0);zb(pb|0);Qc=Lc;Rc=Kc}else Ja=73;while(0);if((Ja|0)==73){ob=Rb()|0;Qc=ob;Rc=Q}k[x>>2]=27468;k[Ya>>2]=27488;k[ub>>2]=27560;Yua(sb);Ava(ub);vva(Ya);Lb=Qc;Mb=Rc;Qb(Lb|0)}while(0);Gc=Ic;Hc=Jc;vva(Ya);Qb(Hc|0);break}case 82:{ub=C+56|0;wb=C+4|0;k[C>>2]=27524;k[ub>>2]=27544;B=0;wa(508,C+56|0,wb|0);db=B;B=0;if(db&1){db=Rb()|0;Sc=Q;Tc=db;vva(ub);Qb(Tc|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[ub>>2]=27488;B=0;va(448,wb|0);db=B;B=0;do if(db&1){ob=Rb()|0;Uc=Q;Vc=ob}else{k[wb>>2]=27560;ob=C+36|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[C+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,wb|0,c|0);rb=B;B=0;if(rb&1){rb=Rb()|0;tb=Q;Yua(c);Yua(ob);Ava(wb);Uc=tb;Vc=rb;break}Yua(c);B=0;rb=Ia(40,C|0,140782,28)|0;tb=B;B=0;j:do if(!(tb&1)?(B=0,Xa(239,rb|0,0)|0,mb=B,B=0,!(mb&1)):0){mb=Ab(20)|0;B=0;eb(502,D|0,140006,66);qb=B;B=0;do if(!(qb&1)){B=0;eb(502,E|0,140740,14);nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(D);Wc=lb;Xc=nb;break}B=0;wa(510,F|0,wb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Yc=1;Zc=nb;_c=Q}else{B=0;ua(163,mb|0,D|0,E|0,858,F|0);nb=B;B=0;if(nb&1)$c=1;else{B=0;eb(503,mb|0,1240,229);B=0;$c=0}nb=Rb()|0;lb=Q;Yua(F);Yc=$c;Zc=nb;_c=lb}Yua(E);Yua(D);if(Yc){Wc=_c;Xc=Zc}else{ad=Zc;bd=_c;break j}}else{lb=Rb()|0;Wc=Q;Xc=lb}while(0);zb(mb|0);ad=Xc;bd=Wc}else Ja=97;while(0);if((Ja|0)==97){rb=Rb()|0;ad=rb;bd=Q}k[C>>2]=27468;k[ub>>2]=27488;k[wb>>2]=27560;Yua(ob);Ava(wb);vva(ub);Lb=ad;Mb=bd;Qb(Lb|0)}while(0);Sc=Uc;Tc=Vc;vva(ub);Qb(Tc|0);break}case 106:{wb=G+56|0;db=G+4|0;k[G>>2]=27524;k[wb>>2]=27544;B=0;wa(508,G+56|0,db|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;cd=Q;dd=Ya;vva(wb);Qb(dd|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[wb>>2]=27488;B=0;va(448,db|0);Ya=B;B=0;do if(Ya&1){rb=Rb()|0;ed=Q;fd=rb}else{k[db>>2]=27560;rb=G+36|0;k[rb>>2]=0;k[rb+4>>2]=0;k[rb+8>>2]=0;k[rb+12>>2]=0;k[G+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);tb=B;B=0;if(tb&1){tb=Rb()|0;sb=Q;Yua(c);Yua(rb);Ava(db);ed=sb;fd=tb;break}Yua(c);B=0;tb=Ia(40,G|0,140811,26)|0;sb=B;B=0;k:do if(!(sb&1)?(B=0,Xa(239,tb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,H|0,140006,66);pb=B;B=0;do if(!(pb&1)){B=0;eb(502,I|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(H);gd=nb;hd=lb;break}B=0;wa(510,J|0,db|0);lb=B;B=0;if(lb&1){lb=Rb()|0;id=1;jd=lb;kd=Q}else{B=0;ua(163,qb|0,H|0,I|0,859,J|0);lb=B;B=0;if(lb&1)ld=1;else{B=0;eb(503,qb|0,1240,229);B=0;ld=0}lb=Rb()|0;nb=Q;Yua(J);id=ld;jd=lb;kd=nb}Yua(I);Yua(H);if(id){gd=kd;hd=jd}else{md=jd;nd=kd;break k}}else{nb=Rb()|0;gd=Q;hd=nb}while(0);zb(qb|0);md=hd;nd=gd}else Ja=121;while(0);if((Ja|0)==121){tb=Rb()|0;md=tb;nd=Q}k[G>>2]=27468;k[wb>>2]=27488;k[db>>2]=27560;Yua(rb);Ava(db);vva(wb);Lb=md;Mb=nd;Qb(Lb|0)}while(0);cd=ed;dd=fd;vva(wb);Qb(dd|0);break}case 131:{db=K+56|0;Ya=K+4|0;k[K>>2]=27524;k[db>>2]=27544;B=0;wa(508,K+56|0,Ya|0);ub=B;B=0;if(ub&1){ub=Rb()|0;od=Q;pd=ub;vva(db);Qb(pd|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[db>>2]=27488;B=0;va(448,Ya|0);ub=B;B=0;do if(ub&1){tb=Rb()|0;qd=Q;rd=tb}else{k[Ya>>2]=27560;tb=K+36|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[K+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);sb=B;B=0;if(sb&1){sb=Rb()|0;ob=Q;Yua(c);Yua(tb);Ava(Ya);qd=ob;rd=sb;break}Yua(c);B=0;sb=Ia(40,K|0,140838,23)|0;ob=B;B=0;l:do if(!(ob&1)?(B=0,Xa(239,sb|0,0)|0,pb=B,B=0,!(pb&1)):0){pb=Ab(20)|0;B=0;eb(502,L|0,140006,66);mb=B;B=0;do if(!(mb&1)){B=0;eb(502,M|0,140740,14);nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(L);sd=lb;td=nb;break}B=0;wa(510,N|0,Ya|0);nb=B;B=0;if(nb&1){nb=Rb()|0;ud=1;vd=nb;wd=Q}else{B=0;ua(163,pb|0,L|0,M|0,872,N|0);nb=B;B=0;if(nb&1)xd=1;else{B=0;eb(503,pb|0,1240,229);B=0;xd=0}nb=Rb()|0;lb=Q;Yua(N);ud=xd;vd=nb;wd=lb}Yua(M);Yua(L);if(ud){sd=wd;td=vd}else{yd=vd;zd=wd;break l}}else{lb=Rb()|0;sd=Q;td=lb}while(0);zb(pb|0);yd=td;zd=sd}else Ja=146;while(0);if((Ja|0)==146){sb=Rb()|0;yd=sb;zd=Q}k[K>>2]=27468;k[db>>2]=27488;k[Ya>>2]=27560;Yua(tb);Ava(Ya);vva(db);Lb=yd;Mb=zd;Qb(Lb|0)}while(0);od=qd;pd=rd;vva(db);Qb(pd|0);break}case 157:{Ya=Rb()|0;ub=Q;Sqa(Sb);Ad=Pb;Bd=ub;Cd=Ya;Ja=160;break}case 159:{Ya=Rb()|0;Ad=Ob;Bd=Q;Cd=Ya;Ja=160;break}case 162:{Ya=O+56|0;ub=O+4|0;k[O>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,O+56|0,ub|0);wb=B;B=0;if(wb&1){wb=Rb()|0;Dd=Q;Ed=wb;vva(Ya);Qb(Ed|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[Ya>>2]=27488;B=0;va(448,ub|0);wb=B;B=0;do if(wb&1){sb=Rb()|0;Fd=Q;Gd=sb}else{k[ub>>2]=27560;sb=O+36|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[O+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);ob=B;B=0;if(ob&1){ob=Rb()|0;rb=Q;Yua(c);Yua(sb);Ava(ub);Fd=rb;Gd=ob;break}Yua(c);B=0;ob=Ia(40,O|0,140862,23)|0;rb=B;B=0;m:do if(!(rb&1)?(B=0,Xa(239,ob|0,0)|0,mb=B,B=0,!(mb&1)):0){mb=Ab(20)|0;B=0;eb(502,P|0,140006,66);qb=B;B=0;do if(!(qb&1)){B=0;eb(502,R|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(P);Hd=nb;Id=lb;break}B=0;wa(510,S|0,ub|0);lb=B;B=0;if(lb&1){lb=Rb()|0;Jd=1;Kd=lb;Ld=Q}else{B=0;ua(163,mb|0,P|0,R|0,881,S|0);lb=B;B=0;if(lb&1)Md=1;else{B=0;eb(503,mb|0,1240,229);B=0;Md=0}lb=Rb()|0;nb=Q;Yua(S);Jd=Md;Kd=lb;Ld=nb}Yua(R);Yua(P);if(Jd){Hd=Ld;Id=Kd}else{Nd=Kd;Od=Ld;break m}}else{nb=Rb()|0;Hd=Q;Id=nb}while(0);zb(mb|0);Nd=Id;Od=Hd}else Ja=177;while(0);if((Ja|0)==177){ob=Rb()|0;Nd=ob;Od=Q}k[O>>2]=27468;k[Ya>>2]=27488;k[ub>>2]=27560;Yua(sb);Ava(ub);vva(Ya);Lb=Nd;Mb=Od;Qb(Lb|0)}while(0);Dd=Fd;Ed=Gd;vva(Ya);Qb(Ed|0);break}case 188:{ub=Rb()|0;wb=Q;Sqa(Vb);Pd=Ub;Qd=wb;Rd=ub;Ja=191;break}case 190:{ub=Rb()|0;Pd=Tb;Qd=Q;Rd=ub;Ja=191;break}case 196:{ub=T+56|0;wb=T+4|0;k[T>>2]=27524;k[ub>>2]=27544;B=0;wa(508,T+56|0,wb|0);db=B;B=0;if(db&1){db=Rb()|0;Sd=Q;Td=db;vva(ub);Qb(Td|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[ub>>2]=27488;B=0;va(448,wb|0);db=B;B=0;do if(db&1){ob=Rb()|0;Ud=Q;Vd=ob}else{k[wb>>2]=27560;ob=T+36|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[T+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,wb|0,c|0);rb=B;B=0;if(rb&1){rb=Rb()|0;tb=Q;Yua(c);Yua(ob);Ava(wb);Ud=tb;Vd=rb;break}Yua(c);B=0;rb=Ia(40,T|0,140886,22)|0;tb=B;B=0;n:do if(!(tb&1)?(B=0,Xa(239,rb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,U|0,140006,66);pb=B;B=0;do if(!(pb&1)){B=0;eb(502,V|0,140740,14);nb=B;B=0;if(nb&1){nb=Rb()|0;lb=Q;Yua(U);Wd=lb;Xd=nb;break}B=0;wa(510,W|0,wb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Yd=1;Zd=nb;_d=Q}else{B=0;ua(163,qb|0,U|0,V|0,901,W|0);nb=B;B=0;if(nb&1)$d=1;else{B=0;eb(503,qb|0,1240,229);B=0;$d=0}nb=Rb()|0;lb=Q;Yua(W);Yd=$d;Zd=nb;_d=lb}Yua(V);Yua(U);if(Yd){Wd=_d;Xd=Zd}else{ae=Zd;be=_d;break n}}else{lb=Rb()|0;Wd=Q;Xd=lb}while(0);zb(qb|0);ae=Xd;be=Wd}else Ja=211;while(0);if((Ja|0)==211){rb=Rb()|0;ae=rb;be=Q}k[T>>2]=27468;k[ub>>2]=27488;k[wb>>2]=27560;Yua(ob);Ava(wb);vva(ub);Lb=ae;Mb=be;Qb(Lb|0)}while(0);Sd=Ud;Td=Vd;vva(ub);Qb(Td|0);break}case 222:{wb=Rb()|0;db=Q;Sqa(Yb);ce=Xb;de=db;ee=wb;Ja=225;break}case 224:{wb=Rb()|0;ce=Wb;de=Q;ee=wb;Ja=225;break}case 227:{wb=X+56|0;db=X+4|0;k[X>>2]=27524;k[wb>>2]=27544;B=0;wa(508,X+56|0,db|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;fe=Q;ge=Ya;vva(wb);Qb(ge|0)}k[X+128>>2]=0;k[X+132>>2]=-1;k[X>>2]=27468;k[wb>>2]=27488;B=0;va(448,db|0);Ya=B;B=0;do if(Ya&1){rb=Rb()|0;he=Q;ie=rb}else{k[db>>2]=27560;rb=X+36|0;k[rb>>2]=0;k[rb+4>>2]=0;k[rb+8>>2]=0;k[rb+12>>2]=0;k[X+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);tb=B;B=0;if(tb&1){tb=Rb()|0;sb=Q;Yua(c);Yua(rb);Ava(db);he=sb;ie=tb;break}Yua(c);B=0;tb=Ia(40,X|0,140909,32)|0;sb=B;B=0;o:do if(!(sb&1)?(B=0,Xa(239,tb|0,0)|0,pb=B,B=0,!(pb&1)):0){pb=Ab(20)|0;B=0;eb(502,Y|0,140006,66);mb=B;B=0;do if(!(mb&1)){B=0;eb(502,Z|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(Y);je=lb;ke=nb;break}B=0;wa(510,_|0,db|0);nb=B;B=0;if(nb&1){nb=Rb()|0;le=1;me=nb;ne=Q}else{B=0;ua(163,pb|0,Y|0,Z|0,912,_|0);nb=B;B=0;if(nb&1)oe=1;else{B=0;eb(503,pb|0,1240,229);B=0;oe=0}nb=Rb()|0;lb=Q;Yua(_);le=oe;me=nb;ne=lb}Yua(Z);Yua(Y);if(le){je=me;ke=ne}else{pe=me;qe=ne;break o}}else{lb=Rb()|0;je=lb;ke=Q}while(0);zb(pb|0);pe=je;qe=ke}else Ja=242;while(0);if((Ja|0)==242){tb=Rb()|0;pe=tb;qe=Q}k[X>>2]=27468;k[wb>>2]=27488;k[db>>2]=27560;Yua(rb);Ava(db);vva(wb);Lb=pe;Mb=qe;Qb(Lb|0)}while(0);fe=he;ge=ie;vva(wb);Qb(ge|0);break}case 252:{db=$+56|0;Ya=$+4|0;k[$>>2]=27524;k[db>>2]=27544;B=0;wa(508,$+56|0,Ya|0);ub=B;B=0;if(ub&1){ub=Rb()|0;re=Q;se=ub;vva(db);Qb(se|0)}k[$+128>>2]=0;k[$+132>>2]=-1;k[$>>2]=27468;k[db>>2]=27488;B=0;va(448,Ya|0);ub=B;B=0;do if(ub&1){tb=Rb()|0;te=Q;ue=tb}else{k[Ya>>2]=27560;tb=$+36|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[$+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);sb=B;B=0;if(sb&1){sb=Rb()|0;ob=Q;Yua(c);Yua(tb);Ava(Ya);te=ob;ue=sb;break}Yua(c);B=0;sb=Ia(40,$|0,140942,23)|0;ob=B;B=0;p:do if(!(ob&1)?(B=0,Xa(239,sb|0,0)|0,mb=B,B=0,!(mb&1)):0){mb=Ab(20)|0;B=0;eb(502,aa|0,140006,66);qb=B;B=0;do if(!(qb&1)){B=0;eb(502,ba|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(aa);ve=lb;we=nb;break}B=0;wa(510,ca|0,Ya|0);nb=B;B=0;if(nb&1){nb=Rb()|0;xe=1;ye=nb;ze=Q}else{B=0;ua(163,mb|0,aa|0,ba|0,920,ca|0);nb=B;B=0;if(nb&1)Ae=1;else{B=0;eb(503,mb|0,1240,229);B=0;Ae=0}nb=Rb()|0;lb=Q;Yua(ca);xe=Ae;ye=nb;ze=lb}Yua(ba);Yua(aa);if(xe){ve=ye;we=ze}else{Be=ye;Ce=ze;break p}}else{lb=Rb()|0;ve=lb;we=Q}while(0);zb(mb|0);Be=ve;Ce=we}else Ja=267;while(0);if((Ja|0)==267){sb=Rb()|0;Be=sb;Ce=Q}k[$>>2]=27468;k[db>>2]=27488;k[Ya>>2]=27560;Yua(tb);Ava(Ya);vva(db);Lb=Be;Mb=Ce;Qb(Lb|0)}while(0);re=te;se=ue;vva(db);Qb(se|0);break}case 280:{Ya=Rb()|0;ub=Q;Sqa(ac);De=$b;Ee=ub;Fe=Ya;Ja=283;break}case 282:{Ya=Rb()|0;De=_b;Ee=Q;Fe=Ya;Ja=283;break}case 286:{Ya=da+56|0;ub=da+4|0;k[da>>2]=27524;k[Ya>>2]=27544;B=0;wa(508,da+56|0,ub|0);wb=B;B=0;if(wb&1){wb=Rb()|0;Ge=Q;He=wb;vva(Ya);Qb(He|0)}k[da+128>>2]=0;k[da+132>>2]=-1;k[da>>2]=27468;k[Ya>>2]=27488;B=0;va(448,ub|0);wb=B;B=0;do if(wb&1){sb=Rb()|0;Ie=Q;Je=sb}else{k[ub>>2]=27560;sb=da+36|0;k[sb>>2]=0;k[sb+4>>2]=0;k[sb+8>>2]=0;k[sb+12>>2]=0;k[da+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ub|0,c|0);ob=B;B=0;if(ob&1){ob=Rb()|0;rb=Q;Yua(c);Yua(sb);Ava(ub);Ie=rb;Je=ob;break}Yua(c);B=0;ob=Ia(40,da|0,140966,37)|0;rb=B;B=0;q:do if(!(rb&1)?(B=0,Xa(239,ob|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,ea|0,140006,66);pb=B;B=0;do if(!(pb&1)){B=0;eb(502,fa|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(ea);Ke=lb;Le=nb;break}B=0;wa(510,ga|0,ub|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Me=1;Ne=nb;Oe=Q}else{B=0;ua(163,qb|0,ea|0,fa|0,945,ga|0);nb=B;B=0;if(nb&1)Pe=1;else{B=0;eb(503,qb|0,1240,229);B=0;Pe=0}nb=Rb()|0;lb=Q;Yua(ga);Me=Pe;Ne=nb;Oe=lb}Yua(fa);Yua(ea);if(Me){Ke=Ne;Le=Oe}else{Qe=Ne;Re=Oe;break q}}else{lb=Rb()|0;Ke=lb;Le=Q}while(0);zb(qb|0);Qe=Ke;Re=Le}else Ja=301;while(0);if((Ja|0)==301){ob=Rb()|0;Qe=ob;Re=Q}k[da>>2]=27468;k[Ya>>2]=27488;k[ub>>2]=27560;Yua(sb);Ava(ub);vva(Ya);Lb=Qe;Mb=Re;Qb(Lb|0)}while(0);Ge=Ie;He=Je;vva(Ya);Qb(He|0);break}case 313:{ub=ha+56|0;wb=ha+4|0;k[ha>>2]=27524;k[ub>>2]=27544;B=0;wa(508,ha+56|0,wb|0);db=B;B=0;if(db&1){db=Rb()|0;Se=Q;Te=db;vva(ub);Qb(Te|0)}k[ha+128>>2]=0;k[ha+132>>2]=-1;k[ha>>2]=27468;k[ub>>2]=27488;B=0;va(448,wb|0);db=B;B=0;do if(db&1){ob=Rb()|0;Ue=Q;Ve=ob}else{k[wb>>2]=27560;ob=ha+36|0;k[ob>>2]=0;k[ob+4>>2]=0;k[ob+8>>2]=0;k[ob+12>>2]=0;k[ha+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,wb|0,c|0);rb=B;B=0;if(rb&1){rb=Rb()|0;tb=Q;Yua(c);Yua(ob);Ava(wb);Ue=tb;Ve=rb;break}Yua(c);B=0;rb=Ia(40,ha|0,140909,32)|0;tb=B;B=0;r:do if(!(tb&1)?(B=0,Xa(239,rb|0,0)|0,pb=B,B=0,!(pb&1)):0){pb=Ab(20)|0;B=0;eb(502,ia|0,140006,66);mb=B;B=0;do if(!(mb&1)){B=0;eb(502,ja|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(ia);We=lb;Xe=nb;break}B=0;wa(510,ka|0,wb|0);nb=B;B=0;if(nb&1){nb=Rb()|0;Ye=1;Ze=nb;_e=Q}else{B=0;ua(163,pb|0,ia|0,ja|0,955,ka|0);nb=B;B=0;if(nb&1)$e=1;else{B=0;eb(503,pb|0,1240,229);B=0;$e=0}nb=Rb()|0;lb=Q;Yua(ka);Ye=$e;Ze=nb;_e=lb}Yua(ja);Yua(ia);if(Ye){We=Ze;Xe=_e}else{af=Ze;bf=_e;break r}}else{lb=Rb()|0;We=lb;Xe=Q}while(0);zb(pb|0);af=We;bf=Xe}else Ja=328;while(0);if((Ja|0)==328){rb=Rb()|0;af=rb;bf=Q}k[ha>>2]=27468;k[ub>>2]=27488;k[wb>>2]=27560;Yua(ob);Ava(wb);vva(ub);Lb=af;Mb=bf;Qb(Lb|0)}while(0);Se=Ue;Te=Ve;vva(ub);Qb(Te|0);break}case 338:{wb=la+56|0;db=la+4|0;k[la>>2]=27524;k[wb>>2]=27544;B=0;wa(508,la+56|0,db|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;cf=Q;df=Ya;vva(wb);Qb(df|0)}k[la+128>>2]=0;k[la+132>>2]=-1;k[la>>2]=27468;k[wb>>2]=27488;B=0;va(448,db|0);Ya=B;B=0;do if(Ya&1){rb=Rb()|0;ef=Q;ff=rb}else{k[db>>2]=27560;rb=la+36|0;k[rb>>2]=0;k[rb+4>>2]=0;k[rb+8>>2]=0;k[rb+12>>2]=0;k[la+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,db|0,c|0);tb=B;B=0;if(tb&1){tb=Rb()|0;sb=Q;Yua(c);Yua(rb);Ava(db);ef=sb;ff=tb;break}Yua(c);B=0;tb=Ia(40,la|0,140942,23)|0;sb=B;B=0;s:do if(!(sb&1)?(B=0,Xa(239,tb|0,0)|0,mb=B,B=0,!(mb&1)):0){mb=Ab(20)|0;B=0;eb(502,ma|0,140006,66);qb=B;B=0;do if(!(qb&1)){B=0;eb(502,na|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(ma);gf=lb;hf=nb;break}B=0;wa(510,oa|0,db|0);nb=B;B=0;if(nb&1){nb=Rb()|0;jf=1;kf=nb;lf=Q}else{B=0;ua(163,mb|0,ma|0,na|0,960,oa|0);nb=B;B=0;if(nb&1)mf=1;else{B=0;eb(503,mb|0,1240,229);B=0;mf=0}nb=Rb()|0;lb=Q;Yua(oa);jf=mf;kf=nb;lf=lb}Yua(na);Yua(ma);if(jf){gf=kf;hf=lf}else{nf=kf;of=lf;break s}}else{lb=Rb()|0;gf=lb;hf=Q}while(0);zb(mb|0);nf=gf;of=hf}else Ja=353;while(0);if((Ja|0)==353){tb=Rb()|0;nf=tb;of=Q}k[la>>2]=27468;k[wb>>2]=27488;k[db>>2]=27560;Yua(rb);Ava(db);vva(wb);Lb=nf;Mb=of;Qb(Lb|0)}while(0);cf=ef;df=ff;vva(wb);Qb(df|0);break}case 367:{db=Rb()|0;Ya=Q;Sqa(gc);pf=fc;qf=Ya;rf=db;Ja=372;break}case 371:{db=Rb()|0;pf=ec;qf=Q;rf=db;Ja=372;break}case 376:{db=pa+56|0;Ya=pa+4|0;k[pa>>2]=27524;k[db>>2]=27544;B=0;wa(508,pa+56|0,Ya|0);ub=B;B=0;if(ub&1){ub=Rb()|0;sf=Q;tf=ub;vva(db);Qb(tf|0)}k[pa+128>>2]=0;k[pa+132>>2]=-1;k[pa>>2]=27468;k[db>>2]=27488;B=0;va(448,Ya|0);ub=B;B=0;do if(ub&1){tb=Rb()|0;uf=Q;vf=tb}else{k[Ya>>2]=27560;tb=pa+36|0;k[tb>>2]=0;k[tb+4>>2]=0;k[tb+8>>2]=0;k[tb+12>>2]=0;k[pa+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);sb=B;B=0;if(sb&1){sb=Rb()|0;ob=Q;Yua(c);Yua(tb);Ava(Ya);uf=ob;vf=sb;break}Yua(c);B=0;sb=Ia(40,pa|0,141004,20)|0;ob=B;B=0;t:do if((!(ob&1)?(B=0,qb=Xa(242,sb|0,k[f>>2]|0)|0,pb=B,B=0,!(pb&1)):0)?(B=0,Xa(239,qb|0,0)|0,qb=B,B=0,!(qb&1)):0){qb=Ab(20)|0;B=0;eb(502,qa|0,140006,66);pb=B;B=0;do if(!(pb&1)){B=0;eb(502,ra|0,140740,14);lb=B;B=0;if(lb&1){lb=Rb()|0;nb=Q;Yua(qa);wf=lb;xf=nb;break}B=0;wa(510,sa|0,Ya|0);nb=B;B=0;if(nb&1){nb=Rb()|0;yf=1;zf=nb;Af=Q}else{B=0;ua(163,qb|0,qa|0,ra|0,979,sa|0);nb=B;B=0;if(nb&1)Bf=1;else{B=0;eb(503,qb|0,1240,229);B=0;Bf=0}nb=Rb()|0;lb=Q;Yua(sa);yf=Bf;zf=nb;Af=lb}Yua(ra);Yua(qa);if(yf){wf=zf;xf=Af}else{Cf=zf;Df=Af;break t}}else{lb=Rb()|0;wf=lb;xf=Q}while(0);zb(qb|0);Cf=wf;Df=xf}else Ja=392;while(0);if((Ja|0)==392){sb=Rb()|0;Cf=sb;Df=Q}k[pa>>2]=27468;k[db>>2]=27488;k[Ya>>2]=27560;Yua(tb);Ava(Ya);vva(db);Lb=Cf;Mb=Df;Qb(Lb|0)}while(0);sf=uf;tf=vf;vva(db);Qb(tf|0);break}}if((Ja|0)==160){Sqa(Ad);Lb=Cd;Mb=Bd;Qb(Lb|0)}else if((Ja|0)==191){Sqa(Pd);Lb=Rd;Mb=Qd;Qb(Lb|0)}else if((Ja|0)==225){Sqa(ce);Lb=ee;Mb=de;Qb(Lb|0)}else if((Ja|0)==283){Sqa(De);Lb=Fe;Mb=Ee;Qb(Lb|0)}else if((Ja|0)==372){Sqa(pf);Lb=rf;Mb=qf;Qb(Lb|0)}}while(0);k[f>>2]=0;uY()|0;r=b;return}function zka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=a+4|0;a=k[l>>2]|0;m=j>>>0<a>>>0;if(m){n=j;do{o=k[n>>2]|0;n=n+4|0;if(!(Ita(k[o+4>>2]|0,c)|0)){p=o;q=4;break}}while(n>>>0<a>>>0);if((q|0)==4){q=k[p+8>>2]|0;Fc[k[(k[q>>2]|0)+28>>2]&1023](q,b);r=d;return}if(m){m=j;do{j=k[(k[m>>2]|0)+8>>2]|0;Ec[k[(k[j>>2]|0)+8>>2]&1023](j);m=m+4|0}while(m>>>0<(k[l>>2]|0)>>>0)}}l=f+56|0;m=f+4|0;k[f>>2]=27524;k[l>>2]=27544;B=0;wa(508,f+56|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;s=Q;t=j;vva(l);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[l>>2]=27488;B=0;va(448,m|0);j=B;B=0;do if(j&1){d=Rb()|0;u=Q;v=d}else{k[m>>2]=27560;d=f+36|0;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;k[d+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);b=B;B=0;if(b&1){b=Rb()|0;q=Q;Yua(e);Yua(d);Ava(m);u=q;v=b;break}Yua(e);B=0;b=Ia(40,f|0,141025,25)|0;q=B;B=0;if(((!(q&1)?(q=Lta(c)|0,B=0,p=Ia(40,b|0,c|0,q|0)|0,q=B,B=0,!(q&1)):0)?(B=0,q=Ia(40,p|0,141051,1)|0,p=B,B=0,!(p&1)):0)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,g|0,140006,66);p=B;B=0;do if(!(p&1)){B=0;eb(502,h|0,141053,12);b=B;B=0;if(b&1){b=Rb()|0;a=Q;Yua(g);w=a;x=b;break}B=0;wa(510,i|0,m|0);b=B;B=0;if(b&1){b=Rb()|0;y=Q;z=b;A=1}else{B=0;ua(163,q|0,g|0,h|0,501,i|0);b=B;B=0;if(b&1)C=1;else{B=0;eb(503,q|0,1240,229);B=0;C=0}b=Rb()|0;a=Q;Yua(i);y=a;z=b;A=C}Yua(h);Yua(g);if(A){w=y;x=z}else{D=z;E=y;k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(d);Ava(m);vva(l);Qb(D|0)}}else{b=Rb()|0;w=Q;x=b}while(0);zb(q|0);D=x;E=w;k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(d);Ava(m);vva(l);Qb(D|0)}p=Rb()|0;D=p;E=Q;k[f>>2]=27468;k[l>>2]=27488;k[m>>2]=27560;Yua(d);Ava(m);vva(l);Qb(D|0)}while(0);s=u;t=v;vva(l);Qb(t|0)}function Aka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=k[a>>2]|0;f=a+4|0;g=k[f>>2]|0;h=b;a:do if(e>>>0<g>>>0){i=b+4|0;j=k[i>>2]|0;l=e;while(1){if(!(Ita(k[(k[l>>2]|0)+4>>2]|0,j)|0))break;l=l+4|0;if(l>>>0>=g>>>0)break a}if(!b){r=c;return}if(j)Tqa(j);k[i>>2]=0;l=k[b+8>>2]|0;if(l)Ec[k[(k[l>>2]|0)+4>>2]&1023](l);Sqa(b);r=c;return}while(0);if((g|0)==(k[a+8>>2]|0)){_ka(a,d);r=c;return}else{k[g>>2]=h;k[f>>2]=(k[f>>2]|0)+4;r=c;return}}function Bka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;d=r;r=r+384|0;e=d+360|0;f=d+356|0;g=d+352|0;h=d+216|0;i=d+200|0;j=d+48|0;l=d+36|0;m=d+64|0;n=d+24|0;o=d+12|0;p=d;q=vY()|0;s=Oka(a,g,0,c)|0;k[a+24>>2]=s;if((k[g>>2]|0)!=2){g=h+56|0;a=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,a|0);t=B;B=0;if(t&1){t=Rb()|0;u=Q;v=t;vva(g);Qb(v|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);t=B;B=0;do if(t&1){w=Rb()|0;x=Q;y=w}else{k[a>>2]=27560;w=h+36|0;k[w>>2]=0;k[w+4>>2]=0;k[w+8>>2]=0;k[w+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;Yua(e);Yua(w);Ava(a);x=A;y=z;break}Yua(e);B=0;z=Ia(40,h|0,141066,26)|0;A=B;B=0;a:do if(((!(A&1)?(C=Lta(c)|0,B=0,D=Ia(40,z|0,c|0,C|0)|0,C=B,B=0,!(C&1)):0)?(B=0,C=Ia(40,D|0,141051,1)|0,D=B,B=0,!(D&1)):0)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,i|0,140006,66);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,141093,9);E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(i);G=E;H=F;break}B=0;wa(510,l|0,a|0);F=B;B=0;if(F&1){F=Rb()|0;I=Q;J=F;K=1}else{B=0;ua(163,C|0,i|0,j|0,1137,l|0);F=B;B=0;if(F&1)L=1;else{B=0;eb(503,C|0,1240,229);B=0;L=0}F=Rb()|0;E=Q;Yua(l);I=E;J=F;K=L}Yua(j);Yua(i);if(K){G=J;H=I}else{M=J;N=I;break a}}else{F=Rb()|0;G=F;H=Q}while(0);zb(C|0);M=G;N=H}else O=19;while(0);if((O|0)==19){z=Rb()|0;M=z;N=Q}k[h>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(w);Ava(a);vva(g);P=N;R=M;Qb(R|0)}while(0);u=x;v=y;vva(g);Qb(v|0)}if(q){uY()|0;S=k[f>>2]|0;k[b>>2]=S;r=d;return}if((ata(f,4,1,s)|0)==1){uY()|0;S=k[f>>2]|0;k[b>>2]=S;r=d;return}d=m+56|0;S=m+4|0;k[m>>2]=27524;k[d>>2]=27544;B=0;wa(508,m+56|0,S|0);b=B;B=0;if(b&1){b=Rb()|0;T=Q;U=b;vva(d);Qb(U|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[d>>2]=27488;B=0;va(448,S|0);b=B;B=0;do if(b&1){f=Rb()|0;V=Q;W=f}else{k[S>>2]=27560;f=m+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,S|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;q=Q;Yua(e);Yua(f);Ava(S);V=q;W=s;break}Yua(e);B=0;s=Ia(40,m|0,140862,23)|0;q=B;B=0;b:do if(!(q&1)?(B=0,Xa(239,s|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,n|0,140006,66);g=B;B=0;do if(!(g&1)){B=0;eb(502,o|0,141093,9);y=B;B=0;if(y&1){y=Rb()|0;x=Q;Yua(n);X=y;Y=x;break}B=0;wa(510,p|0,S|0);x=B;B=0;if(x&1){x=Rb()|0;Z=1;_=Q;$=x}else{B=0;ua(163,v|0,n|0,o|0,1141,p|0);x=B;B=0;if(x&1)aa=1;else{B=0;eb(503,v|0,1240,229);B=0;aa=0}x=Rb()|0;y=Q;Yua(p);Z=aa;_=y;$=x}Yua(o);Yua(n);if(Z){X=$;Y=_}else{ba=_;ca=$;break b}}else{x=Rb()|0;X=x;Y=Q}while(0);zb(v|0);ba=Y;ca=X}else O=44;while(0);if((O|0)==44){s=Rb()|0;ba=Q;ca=s}k[m>>2]=27468;k[d>>2]=27488;k[S>>2]=27560;Yua(f);Ava(S);vva(d);P=ba;R=ca;Qb(R|0)}while(0);T=V;U=W;vva(d);Qb(U|0)}function Cka(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0;f=r;r=r+720|0;g=f+704|0;h=f+700|0;i=f+684|0;j=f+680|0;l=f+520|0;m=f+688|0;n=f+668|0;o=f+656|0;q=f+384|0;s=f+368|0;t=f+84|0;u=f+72|0;v=f+232|0;w=f+60|0;x=f+48|0;y=f+36|0;z=f+96|0;A=f+24|0;C=f+12|0;D=f;k[j>>2]=0;E=vY()|0;F=Oka(a,j,0,e)|0;G=a+24|0;k[G>>2]=F;a=k[j>>2]|0;if((a+-5|0)>>>0>=3){j=l+56|0;H=l+4|0;k[l>>2]=27524;k[j>>2]=27544;B=0;wa(508,l+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;K=I;vva(j);Qb(K|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[j>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){L=Rb()|0;M=Q;N=L}else{k[H>>2]=27560;L=l+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[l+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,H|0,g|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);Yua(L);Ava(H);M=P;N=O;break}Yua(g);B=0;O=Ia(40,l|0,141103,55)|0;P=B;B=0;a:do if((((((!(P&1)?(R=Lta(e)|0,B=0,S=Ia(40,O|0,e|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Ia(40,S|0,141051,1)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,141159,10)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Xa(242,S|0,a|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,141170,1)|0,R=B,B=0,!(R&1)):0)?(B=0,Xa(239,S|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,m|0,140006,66);R=B;B=0;do if(!(R&1)){B=0;eb(502,n|0,141093,9);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(m);V=U;W=T;break}B=0;wa(510,o|0,H|0);T=B;B=0;if(T&1){T=Rb()|0;X=Q;Y=T;Z=1}else{B=0;ua(163,S|0,m|0,n|0,1234,o|0);T=B;B=0;if(T&1)_=1;else{B=0;eb(503,S|0,1240,229);B=0;_=0}T=Rb()|0;U=Q;Yua(o);X=U;Y=T;Z=_}Yua(n);Yua(m);if(Z){V=X;W=Y}else{$=X;aa=Y;break a}}else{T=Rb()|0;V=Q;W=T}while(0);zb(S|0);$=V;aa=W}else ba=22;while(0);if((ba|0)==22){O=Rb()|0;$=Q;aa=O}k[l>>2]=27468;k[j>>2]=27488;k[H>>2]=27560;Yua(L);Ava(H);vva(j);ca=$;da=aa;Qb(da|0)}while(0);J=M;K=N;vva(j);Qb(K|0)}K=(E|0)==0;if(K){if((ata(h,4,1,F)|0)!=1){F=q+56|0;E=q+4|0;k[q>>2]=27524;k[F>>2]=27544;B=0;wa(508,q+56|0,E|0);j=B;B=0;if(j&1){j=Rb()|0;ea=Q;fa=j;vva(F);Qb(fa|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[F>>2]=27488;B=0;va(448,E|0);j=B;B=0;do if(j&1){N=Rb()|0;ga=Q;ha=N}else{k[E>>2]=27560;N=q+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[q+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,E|0,g|0);M=B;B=0;if(M&1){M=Rb()|0;J=Q;Yua(g);Yua(N);Ava(E);ga=J;ha=M;break}Yua(g);B=0;M=Ia(40,q|0,141172,41)|0;J=B;B=0;b:do if(!(J&1)?(B=0,Xa(239,M|0,0)|0,aa=B,B=0,!(aa&1)):0){aa=Ab(20)|0;B=0;eb(502,s|0,140006,66);$=B;B=0;do if(!($&1)){B=0;eb(502,t|0,141093,9);H=B;B=0;if(H&1){H=Rb()|0;l=Q;Yua(s);ia=H;ja=l;break}B=0;wa(510,u|0,E|0);l=B;B=0;if(l&1){l=Rb()|0;ka=1;la=Q;na=l}else{B=0;ua(163,aa|0,s|0,t|0,1241,u|0);l=B;B=0;if(l&1)oa=1;else{B=0;eb(503,aa|0,1240,229);B=0;oa=0}l=Rb()|0;H=Q;Yua(u);ka=oa;la=H;na=l}Yua(t);Yua(s);if(ka){ia=na;ja=la}else{pa=la;qa=na;break b}}else{l=Rb()|0;ia=l;ja=Q}while(0);zb(aa|0);pa=ja;qa=ia}else ba=47;while(0);if((ba|0)==47){M=Rb()|0;pa=Q;qa=M}k[q>>2]=27468;k[F>>2]=27488;k[E>>2]=27560;Yua(N);Ava(E);vva(F);ca=pa;da=qa;Qb(da|0)}while(0);ea=ga;fa=ha;vva(F);Qb(fa|0)}uY()|0;if((ata(i,4,1,k[G>>2]|0)|0)!=1){fa=v+56|0;F=v+4|0;k[v>>2]=27524;k[fa>>2]=27544;B=0;wa(508,v+56|0,F|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ra=Q;sa=ha;vva(fa);Qb(sa|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[fa>>2]=27488;B=0;va(448,F|0);ha=B;B=0;do if(ha&1){ga=Rb()|0;ta=Q;xa=ga}else{k[F>>2]=27560;ga=v+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[v+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,F|0,g|0);ea=B;B=0;if(ea&1){ea=Rb()|0;qa=Q;Yua(g);Yua(ga);Ava(F);ta=qa;xa=ea;break}Yua(g);B=0;ea=Ia(40,v|0,141214,44)|0;qa=B;B=0;c:do if(!(qa&1)?(B=0,Xa(239,ea|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,w|0,140006,66);E=B;B=0;do if(!(E&1)){B=0;eb(502,x|0,141093,9);q=B;B=0;if(q&1){q=Rb()|0;ia=Q;Yua(w);ya=q;za=ia;break}B=0;wa(510,y|0,F|0);ia=B;B=0;if(ia&1){ia=Rb()|0;Aa=1;Ba=Q;Ca=ia}else{B=0;ua(163,pa|0,w|0,x|0,1247,y|0);ia=B;B=0;if(ia&1)Da=1;else{B=0;eb(503,pa|0,1240,229);B=0;Da=0}ia=Rb()|0;q=Q;Yua(y);Aa=Da;Ba=q;Ca=ia}Yua(x);Yua(w);if(Aa){ya=Ca;za=Ba}else{Ea=Ba;Fa=Ca;break c}}else{ia=Rb()|0;ya=ia;za=Q}while(0);zb(pa|0);Ea=za;Fa=ya}else ba=71;while(0);if((ba|0)==71){ea=Rb()|0;Ea=Q;Fa=ea}k[v>>2]=27468;k[fa>>2]=27488;k[F>>2]=27560;Yua(ga);Ava(F);vva(fa);ca=Ea;da=Fa;Qb(da|0)}while(0);ra=ta;sa=xa;vva(fa);Qb(sa|0)}}else uY()|0;uY()|0;sa=k[h>>2]|0;fa=k[i>>2]|0;xa=ma(fa,sa)|0;if(!xa){Ga=fa;Ha=sa;Ja=0}else{ta=Rqa(xa>>>0>536870911?-1:xa<<3)|0;do if(K){xa=ma(sa<<3,fa)|0;if((ata(ta,xa,1,k[G>>2]|0)|0)==1)break;xa=z+56|0;ra=z+4|0;k[z>>2]=27524;k[xa>>2]=27544;B=0;wa(508,z+56|0,ra|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ka=Q;La=Fa;vva(xa);Qb(La|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[xa>>2]=27488;B=0;va(448,ra|0);Fa=B;B=0;do if(Fa&1){Ea=Rb()|0;Ma=Q;Na=Ea}else{k[ra>>2]=27560;Ea=z+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[z+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ra|0,g|0);F=B;B=0;if(F&1){F=Rb()|0;v=Q;Yua(g);Yua(Ea);Ava(ra);Ma=v;Na=F;break}Yua(g);B=0;F=Ia(40,z|0,141259,22)|0;v=B;B=0;d:do if(!(v&1)?(B=0,Xa(239,F|0,0)|0,ya=B,B=0,!(ya&1)):0){ya=Ab(20)|0;B=0;eb(502,A|0,140006,66);za=B;B=0;do if(!(za&1)){B=0;eb(502,C|0,141093,9);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ba=Q;Yua(A);Oa=Ca;Pa=Ba;break}B=0;wa(510,D|0,ra|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Qa=1;Ra=Q;Sa=Ba}else{B=0;ua(163,ya|0,A|0,C|0,1257,D|0);Ba=B;B=0;if(Ba&1)Ta=1;else{B=0;eb(503,ya|0,1240,229);B=0;Ta=0}Ba=Rb()|0;Ca=Q;Yua(D);Qa=Ta;Ra=Ca;Sa=Ba}Yua(C);Yua(A);if(Qa){Oa=Sa;Pa=Ra}else{Ua=Ra;Va=Sa;break d}}else{Ba=Rb()|0;Oa=Ba;Pa=Q}while(0);zb(ya|0);Ua=Pa;Va=Oa}else ba=99;while(0);if((ba|0)==99){F=Rb()|0;Ua=Q;Va=F}k[z>>2]=27468;k[xa>>2]=27488;k[ra>>2]=27560;Yua(Ea);Ava(ra);vva(xa);ca=Ua;da=Va;Qb(da|0)}while(0);Ka=Ma;La=Na;vva(xa);Qb(La|0)}while(0);uY()|0;Ga=k[i>>2]|0;Ha=k[h>>2]|0;Ja=ta}ta=ma(Ga,Ha)|0;if(ta){La=Rqa(ta>>>0>1073741823?-1:ta<<2)|0;if((Ha|0)>0&(Ga|0)>0){ta=0;do{Na=ma(Ga,ta)|0;Ma=0;do{Ka=Na+Ma|0;k[La+(Ka<<2)>>2]=~~+p[Ja+(Ka<<3)>>3];Ma=Ma+1|0}while((Ma|0)!=(Ga|0));ta=ta+1|0}while((ta|0)<(Ha|0));Wa=La;ba=114}else{Ya=La;ba=113}}else{Ya=0;ba=113}if((ba|0)==113)if(!Ja)Za=Ya;else{Wa=Ya;ba=114}if((ba|0)==114){Tqa(Ja);Za=Wa}k[b>>2]=Za;if(c)k[c>>2]=k[h>>2];if(!d){r=f;return}k[d>>2]=k[i>>2];r=f;return}function Dka(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=k[a>>2]|0;c=a+4|0;d=k[c>>2]|0;if(b>>>0<d>>>0){e=d;f=b;while(1){g=k[f>>2]|0;if(!g)h=e;else{i=g+4|0;j=k[i>>2]|0;if(j)Tqa(j);k[i>>2]=0;i=k[g+8>>2]|0;if(i)Ec[k[(k[i>>2]|0)+4>>2]&1023](i);Sqa(g);h=k[c>>2]|0}f=f+4|0;if(f>>>0>=h>>>0){l=h;break}else e=h}m=l;n=k[a>>2]|0}else{m=d;n=b}if((m|0)!=(n|0))k[c>>2]=m+(~((m+-4-n|0)>>>2)<<2);n=a+12|0;m=k[n>>2]|0;b=a+16|0;d=k[b>>2]|0;if(m>>>0<d>>>0){l=d;h=m;while(1){e=k[h>>2]|0;if(!e)o=l;else{f=e+4|0;g=k[f>>2]|0;if(g)Tqa(g);k[f>>2]=0;f=k[e+24>>2]|0;if(f)Tqa(f);Sqa(e);o=k[b>>2]|0}h=h+4|0;if(h>>>0>=o>>>0){p=o;break}else l=o}q=p;r=k[n>>2]|0}else{q=d;r=m}if((q|0)!=(r|0))k[b>>2]=q+(~((q+-4-r|0)>>>2)<<2);r=a+32|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+36|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+72|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+76|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+80|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+88|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+84|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+92|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=a+96|0;q=k[r>>2]|0;if(q)Tqa(q);k[r>>2]=0;r=k[n>>2]|0;n=r;if(r){q=k[b>>2]|0;if((q|0)!=(r|0))k[b>>2]=q+(~((q+-4-n|0)>>>2)<<2);Sqa(r)}r=k[a>>2]|0;if(!r)return;a=k[c>>2]|0;if((a|0)!=(r|0))k[c>>2]=a+(~((a+-4-r|0)>>>2)<<2);Sqa(r);return}function Eka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0;c=r;r=r+16|0;d=c;k[d>>2]=b;e=a+12|0;f=k[e>>2]|0;g=a+16|0;h=k[g>>2]|0;i=b;a:do if(f>>>0<h>>>0){j=b+4|0;l=k[j>>2]|0;m=f;while(1){if(!(Ita(k[(k[m>>2]|0)+4>>2]|0,l)|0))break;m=m+4|0;if(m>>>0>=h>>>0)break a}if(!b){r=c;return}if(l)Tqa(l);k[j>>2]=0;m=k[b+24>>2]|0;if(m)Tqa(m);Sqa(b);r=c;return}while(0);if((h|0)==(k[a+20>>2]|0)){$ka(e,d);r=c;return}else{k[h>>2]=i;k[g>>2]=(k[g>>2]|0)+4;r=c;return}}function Fka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=k[a+4>>2]|0;a:do if(j>>>0<l>>>0){a=j;while(1){m=k[a>>2]|0;a=a+4|0;if(!(Ita(k[m+4>>2]|0,c)|0)){n=m;break}if(a>>>0>=l>>>0)break a}a=k[n+8>>2]|0;Fc[k[(k[a>>2]|0)+32>>2]&1023](a,b);r=d;return}while(0);d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(d);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){l=Rb()|0;q=Q;s=l}else{k[b>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Yua(e);Yua(l);Ava(b);q=a;s=j;break}Yua(e);B=0;j=Ia(40,f|0,141025,25)|0;a=B;B=0;if(((!(a&1)?(a=Lta(c)|0,B=0,m=Ia(40,j|0,c|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,m|0,141051,1)|0,m=B,B=0,!(m&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,g|0,140006,66);m=B;B=0;do if(!(m&1)){B=0;eb(502,h|0,141053,12);j=B;B=0;if(j&1){j=Rb()|0;t=Q;Yua(g);u=t;v=j;break}B=0;wa(510,i|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;y=1}else{B=0;ua(163,a|0,g|0,h|0,518,i|0);j=B;B=0;if(j&1)z=1;else{B=0;eb(503,a|0,1240,229);B=0;z=0}j=Rb()|0;t=Q;Yua(i);w=t;x=j;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}}else{j=Rb()|0;u=Q;v=j}while(0);zb(a|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}m=Rb()|0;A=Q;C=m;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}while(0);o=q;p=s;vva(d);Qb(p|0)}function Gka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=k[a+4>>2]|0;a:do if(j>>>0<l>>>0){a=j;while(1){m=k[a>>2]|0;a=a+4|0;if(!(Ita(k[m+4>>2]|0,c)|0)){n=m;break}if(a>>>0>=l>>>0)break a}a=k[n+8>>2]|0;Fc[k[(k[a>>2]|0)+44>>2]&1023](a,b);r=d;return}while(0);d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(d);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);n=B;B=0;do if(n&1){l=Rb()|0;q=Q;s=l}else{k[b>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;a=Q;Yua(e);Yua(l);Ava(b);q=a;s=j;break}Yua(e);B=0;j=Ia(40,f|0,141025,25)|0;a=B;B=0;if(((!(a&1)?(a=Lta(c)|0,B=0,m=Ia(40,j|0,c|0,a|0)|0,a=B,B=0,!(a&1)):0)?(B=0,a=Ia(40,m|0,141051,1)|0,m=B,B=0,!(m&1)):0)?(B=0,Xa(239,a|0,0)|0,a=B,B=0,!(a&1)):0){a=Ab(20)|0;B=0;eb(502,g|0,140006,66);m=B;B=0;do if(!(m&1)){B=0;eb(502,h|0,141053,12);j=B;B=0;if(j&1){j=Rb()|0;t=Q;Yua(g);u=t;v=j;break}B=0;wa(510,i|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;y=1}else{B=0;ua(163,a|0,g|0,h|0,535,i|0);j=B;B=0;if(j&1)z=1;else{B=0;eb(503,a|0,1240,229);B=0;z=0}j=Rb()|0;t=Q;Yua(i);w=t;x=j;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}}else{j=Rb()|0;u=Q;v=j}while(0);zb(a|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}m=Rb()|0;A=Q;C=m;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(l);Ava(b);vva(d);Qb(C|0)}while(0);o=q;p=s;vva(d);Qb(p|0)}function Hka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;i=e+12|0;j=e;l=k[a>>2]|0;m=k[a+4>>2]|0;a:do if(l>>>0<m>>>0){a=l;while(1){n=k[a>>2]|0;a=a+4|0;if(!(Ita(k[n+4>>2]|0,d)|0)){o=n;break}if(a>>>0>=m>>>0)break a}a=k[o+8>>2]|0;nd[k[(k[a>>2]|0)+56>>2]&1023](a,b,c);r=e;return}while(0);e=g+56|0;c=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;p=Q;q=b;vva(e);Qb(q|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){o=Rb()|0;s=Q;t=o}else{k[c>>2]=27560;o=g+36|0;k[o>>2]=0;k[o+4>>2]=0;k[o+8>>2]=0;k[o+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,c|0,f|0);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Yua(f);Yua(o);Ava(c);s=l;t=m;break}Yua(f);B=0;m=Ia(40,g|0,141025,25)|0;l=B;B=0;if(((!(l&1)?(l=Lta(d)|0,B=0,a=Ia(40,m|0,d|0,l|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,a|0,141051,1)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,h|0,140006,66);a=B;B=0;do if(!(a&1)){B=0;eb(502,i|0,141053,12);m=B;B=0;if(m&1){m=Rb()|0;n=Q;Yua(h);u=n;v=m;break}B=0;wa(510,j|0,c|0);m=B;B=0;if(m&1){m=Rb()|0;w=Q;x=m;y=1}else{B=0;ua(163,l|0,h|0,i|0,569,j|0);m=B;B=0;if(m&1)z=1;else{B=0;eb(503,l|0,1240,229);B=0;z=0}m=Rb()|0;n=Q;Yua(j);w=n;x=m;y=z}Yua(i);Yua(h);if(y){u=w;v=x}else{A=w;C=x;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(C|0)}}else{m=Rb()|0;u=Q;v=m}while(0);zb(l|0);A=u;C=v;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(C|0)}a=Rb()|0;A=Q;C=a;k[g>>2]=27468;k[e>>2]=27488;k[c>>2]=27560;Yua(o);Ava(c);vva(e);Qb(C|0)}while(0);p=s;q=t;vva(e);Qb(q|0)}function Ika(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;d=r;r=r+192|0;e=d+176|0;f=d+40|0;g=d+24|0;h=d+12|0;i=d;j=k[a>>2]|0;l=k[a+4>>2]|0;a:do if(j>>>0<l>>>0){a=j;while(1){m=k[a>>2]|0;a=a+4|0;if(!(Ita(k[m+4>>2]|0,b)|0)){n=m;break}if(a>>>0>=l>>>0)break a}a=k[n+8>>2]|0;m=Hc[k[(k[a>>2]|0)+16>>2]&511](a)|0;Fc[k[(k[m>>2]|0)+140>>2]&1023](m,c);r=d;return m|0}while(0);d=f+56|0;c=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;o=Q;p=n;vva(d);Qb(p|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,c|0);n=B;B=0;do if(n&1){l=Rb()|0;q=Q;s=l}else{k[c>>2]=27560;l=f+36|0;k[l>>2]=0;k[l+4>>2]=0;k[l+8>>2]=0;k[l+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,c|0,e|0);j=B;B=0;if(j&1){j=Rb()|0;m=Q;Yua(e);Yua(l);Ava(c);q=m;s=j;break}Yua(e);B=0;j=Ia(40,f|0,141282,10)|0;m=B;B=0;if(((!(m&1)?(m=Lta(b)|0,B=0,a=Ia(40,j|0,b|0,m|0)|0,m=B,B=0,!(m&1)):0)?(B=0,m=Ia(40,a|0,141293,22)|0,a=B,B=0,!(a&1)):0)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,g|0,140006,66);a=B;B=0;do if(!(a&1)){B=0;eb(502,h|0,141316,18);j=B;B=0;if(j&1){j=Rb()|0;t=Q;Yua(g);u=t;v=j;break}B=0;wa(510,i|0,c|0);j=B;B=0;if(j&1){j=Rb()|0;w=Q;x=j;y=1}else{B=0;ua(163,m|0,g|0,h|0,638,i|0);j=B;B=0;if(j&1)z=1;else{B=0;eb(503,m|0,1240,229);B=0;z=0}j=Rb()|0;t=Q;Yua(i);w=t;x=j;y=z}Yua(h);Yua(g);if(y){u=w;v=x}else{A=w;C=x;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(d);Qb(C|0)}}else{j=Rb()|0;u=Q;v=j}while(0);zb(m|0);A=u;C=v;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(d);Qb(C|0)}a=Rb()|0;A=Q;C=a;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(l);Ava(c);vva(d);Qb(C|0)}while(0);o=q;p=s;vva(d);Qb(p|0);return 0}function Jka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=k[a+12>>2]|0;d=k[a+16>>2]|0;if(c>>>0<d>>>0)e=c;else{f=0;return f|0}while(1){c=k[e>>2]|0;e=e+4|0;if(!(Ita(k[c+4>>2]|0,b)|0)){g=c;break}if(e>>>0>=d>>>0){f=0;h=5;break}}if((h|0)==5)return f|0;f=k[g+24>>2]|0;return f|0}function Kka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;d=r;r=r+384|0;e=d+360|0;f=d+356|0;g=d+352|0;h=d+216|0;j=d+200|0;l=d+48|0;m=d+36|0;n=d+64|0;o=d+24|0;p=d+12|0;q=d;s=vY()|0;t=Oka(a,g,0,c)|0;k[a+24>>2]=t;if((k[g>>2]|0)!=1){g=h+56|0;a=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(g);Qb(w|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[a>>2]=27560;x=h+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(a);y=C;z=A;break}Yua(e);B=0;A=Ia(40,h|0,141335,25)|0;C=B;B=0;a:do if(((!(C&1)?(D=Lta(c)|0,B=0,E=Ia(40,A|0,c|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Ia(40,E|0,141051,1)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,j|0,140006,66);E=B;B=0;do if(!(E&1)){B=0;eb(502,l|0,141093,9);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(j);H=F;I=G;break}B=0;wa(510,m|0,a|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,D|0,j|0,l|0,1111,m|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(m);J=F;K=G;L=M}Yua(l);Yua(j);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(D|0);N=H;O=I}else P=19;while(0);if((P|0)==19){A=Rb()|0;N=A;O=Q}k[h>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(x);Ava(a);vva(g);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(g);Qb(w|0)}if(s){uY()|0;T=k[f>>2]|0;U=(T|0)!=0;V=U&1;i[b>>0]=V;r=d;return}if((ata(f,4,1,t)|0)==1){uY()|0;T=k[f>>2]|0;U=(T|0)!=0;V=U&1;i[b>>0]=V;r=d;return}d=n+56|0;V=n+4|0;k[n>>2]=27524;k[d>>2]=27544;B=0;wa(508,n+56|0,V|0);b=B;B=0;if(b&1){b=Rb()|0;W=Q;X=b;vva(d);Qb(X|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[d>>2]=27488;B=0;va(448,V|0);b=B;B=0;do if(b&1){U=Rb()|0;Y=Q;Z=U}else{k[V>>2]=27560;U=n+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[n+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,V|0,e|0);T=B;B=0;if(T&1){T=Rb()|0;f=Q;Yua(e);Yua(U);Ava(V);Y=f;Z=T;break}Yua(e);B=0;T=Ia(40,n|0,140838,23)|0;f=B;B=0;b:do if(!(f&1)?(B=0,Xa(239,T|0,0)|0,t=B,B=0,!(t&1)):0){t=Ab(20)|0;B=0;eb(502,o|0,140006,66);s=B;B=0;do if(!(s&1)){B=0;eb(502,p|0,141093,9);w=B;B=0;if(w&1){w=Rb()|0;g=Q;Yua(o);_=w;$=g;break}B=0;wa(510,q|0,V|0);g=B;B=0;if(g&1){g=Rb()|0;aa=1;ba=Q;ca=g}else{B=0;ua(163,t|0,o|0,p|0,1115,q|0);g=B;B=0;if(g&1)da=1;else{B=0;eb(503,t|0,1240,229);B=0;da=0}g=Rb()|0;w=Q;Yua(q);aa=da;ba=w;ca=g}Yua(p);Yua(o);if(aa){_=ca;$=ba}else{ea=ba;fa=ca;break b}}else{g=Rb()|0;_=g;$=Q}while(0);zb(t|0);ea=$;fa=_}else P=44;while(0);if((P|0)==44){T=Rb()|0;ea=Q;fa=T}k[n>>2]=27468;k[d>>2]=27488;k[V>>2]=27560;Yua(U);Ava(V);vva(d);R=ea;S=fa;Qb(S|0)}while(0);W=Y;X=Z;vva(d);Qb(X|0)}function Lka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;d=r;r=r+208|0;e=d+192|0;f=d+176|0;g=d+40|0;h=d+24|0;j=d+12|0;l=d;k[f>>2]=c;if((b|0)<=0){r=d;return}c=a+12|0;m=a+16|0;a=0;while(1){n=(k[f>>2]|0)+(4-1)&~(4-1);o=k[n>>2]|0;k[f>>2]=n+4;if(Mta(o,140083,3)|0){p=o;break}n=k[c>>2]|0;q=k[m>>2]|0;a:do if(n>>>0<q>>>0){s=n;while(1){t=k[s>>2]|0;u=t+4|0;v=k[u>>2]|0;if((Ita(v,o)|0)==0?(i[t>>0]|0)==0:0){w=t;x=u;y=v;z=t;A=s;break}s=s+4|0;if(s>>>0>=q>>>0)break a}if(y)Tqa(y);k[x>>2]=0;s=k[w+24>>2]|0;if(s)Tqa(s);Sqa(z);s=A+4|0;t=(k[m>>2]|0)-s|0;UEa(A|0,s|0,t|0)|0;s=A+(t>>2<<2)|0;t=k[m>>2]|0;if((t|0)!=(s|0))k[m>>2]=t+(~((t+-4-s|0)>>>2)<<2)}while(0);a=a+1|0;if((a|0)>=(b|0)){C=3;break}}if((C|0)==3){r=d;return}d=g+56|0;C=g+4|0;k[g>>2]=27524;k[d>>2]=27544;B=0;wa(508,g+56|0,C|0);b=B;B=0;if(b&1){b=Rb()|0;D=Q;E=b;vva(d);Qb(E|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[d>>2]=27488;B=0;va(448,C|0);b=B;B=0;do if(b&1){a=Rb()|0;F=Q;G=a}else{k[C>>2]=27560;a=g+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[g+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,C|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;A=Q;Yua(e);Yua(a);Ava(C);F=A;G=m;break}Yua(e);B=0;m=Ia(40,g|0,141361,43)|0;A=B;B=0;if(((!(A&1)?(A=Lta(p)|0,B=0,z=Ia(40,m|0,p|0,A|0)|0,A=B,B=0,!(A&1)):0)?(B=0,A=Ia(40,z|0,141170,1)|0,z=B,B=0,!(z&1)):0)?(B=0,Xa(239,A|0,0)|0,A=B,B=0,!(A&1)):0){A=Ab(20)|0;B=0;eb(502,h|0,140006,66);z=B;B=0;do if(!(z&1)){B=0;eb(502,j|0,141405,10);m=B;B=0;if(m&1){m=Rb()|0;w=Q;Yua(h);H=w;I=m;break}B=0;wa(510,l|0,C|0);m=B;B=0;if(m&1){m=Rb()|0;J=m;K=Q;L=1}else{B=0;ua(163,A|0,h|0,j|0,756,l|0);m=B;B=0;if(m&1)M=1;else{B=0;eb(503,A|0,1240,229);B=0;M=0}m=Rb()|0;w=Q;Yua(l);J=m;K=w;L=M}Yua(j);Yua(h);if(L){H=K;I=J}else{N=J;O=K;k[g>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(a);Ava(C);vva(d);Qb(N|0)}}else{w=Rb()|0;H=Q;I=w}while(0);zb(A|0);N=I;O=H;k[g>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(a);Ava(C);vva(d);Qb(N|0)}z=Rb()|0;N=z;O=Q;k[g>>2]=27468;k[d>>2]=27488;k[C>>2]=27560;Yua(a);Ava(C);vva(d);Qb(N|0)}while(0);D=F;E=G;vva(d);Qb(E|0)}function Mka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;if(!b)return;d=k[a+12>>2]|0;e=k[a+16>>2]|0;a:do if(d>>>0<e>>>0){a=d;while(1){f=k[a>>2]|0;if((Ita(k[f+4>>2]|0,c)|0)==0?(i[f>>0]|0)!=0:0)break;a=a+4|0;if(a>>>0>=e>>>0)break a}return}while(0);Tqa(b);return}function Nka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=k[b>>2]|0;if(c){if((c|0)>0){a=0;do{e=k[d+(a<<2)>>2]|0;if(e)Tqa(e);a=a+1|0}while((a|0)!=(c|0))}if(d)Tqa(d)}k[b>>2]=0;return}function Oka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0;e=r;r=r+1072|0;f=e+1056|0;g=e+1052|0;h=e+1036|0;j=e+1032|0;l=e+1016|0;m=e+1e3|0;n=e+864|0;o=e+1040|0;p=e+1020|0;q=e+1004|0;s=e+704|0;t=e+852|0;u=e+840|0;v=e+688|0;w=e+552|0;x=e+268|0;y=e+256|0;z=e+108|0;A=e+416|0;C=e+96|0;D=e+84|0;E=e+72|0;F=e+280|0;G=e+60|0;H=e+48|0;I=e+36|0;J=e+120|0;K=e+24|0;L=e+12|0;M=e;k[g>>2]=0;k[m>>2]=0;a:do if((vY()|0)==0?(N=a+24|0,dta(k[N>>2]|0,0,0)|0,(ata(h,4,1,k[N>>2]|0)|0)!=0):0){while(1){O=k[h>>2]|0;if((O+-3|0)>>>0>77){P=O;R=4;break}S=Rqa(O+1|0)|0;i[S+O>>0]=0;if(!(ata(S,O,1,k[N>>2]|0)|0)){T=S;R=29;break}if(Mta(S,140083,3)|0){U=S;R=31;break}O=(Ita(S,d)|0)==0;V=k[N>>2]|0;if(O){W=S;X=V;R=56;break}if((ata(j,4,1,V)|0)!=1){R=107;break}dta(k[N>>2]|0,k[j>>2]|0,1)|0;Tqa(S);if(!(ata(h,4,1,k[N>>2]|0)|0))break a}if((R|0)==4){S=n+56|0;V=n+4|0;k[n>>2]=27524;k[S>>2]=27544;B=0;wa(508,n+56|0,V|0);O=B;B=0;if(O&1){O=Rb()|0;Y=Q;Z=O;vva(S);Qb(Z|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[S>>2]=27488;B=0;va(448,V|0);O=B;B=0;do if(O&1){_=Rb()|0;$=Q;aa=_}else{k[V>>2]=27560;_=n+36|0;k[_>>2]=0;k[_+4>>2]=0;k[_+8>>2]=0;k[_+12>>2]=0;k[n+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,V|0,f|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;Yua(f);Yua(_);Ava(V);$=ca;aa=ba;break}Yua(f);B=0;ba=Ia(40,n|0,139946,59)|0;ca=B;B=0;b:do if((!(ca&1)?(B=0,da=Xa(242,ba|0,P|0)|0,ea=B,B=0,!(ea&1)):0)?(B=0,Xa(239,da|0,0)|0,da=B,B=0,!(da&1)):0){da=Ab(20)|0;B=0;eb(502,o|0,140006,66);ea=B;B=0;do if(!(ea&1)){B=0;eb(502,p|0,141416,20);fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(o);ha=ga;ia=fa;break}B=0;wa(510,q|0,V|0);fa=B;B=0;if(fa&1){fa=Rb()|0;ja=Q;ka=fa;la=1}else{B=0;ua(163,da|0,o|0,p|0,2090,q|0);fa=B;B=0;if(fa&1)ma=1;else{B=0;eb(503,da|0,1240,229);B=0;ma=0}fa=Rb()|0;ga=Q;Yua(q);ja=ga;ka=fa;la=ma}Yua(p);Yua(o);if(la){ha=ja;ia=ka}else{na=ja;oa=ka;break b}}else{fa=Rb()|0;ha=Q;ia=fa}while(0);zb(da|0);na=ha;oa=ia}else R=20;while(0);if((R|0)==20){ba=Rb()|0;na=Q;oa=ba}k[n>>2]=27468;k[S>>2]=27488;k[V>>2]=27560;Yua(_);Ava(V);vva(S);pa=na;qa=oa;Qb(qa|0)}while(0);Y=$;Z=aa;vva(S);Qb(Z|0)}else if((R|0)==29){k[g>>2]=0;Tqa(T);break}else if((R|0)==31){V=s+56|0;O=s+4|0;k[s>>2]=27524;k[V>>2]=27544;B=0;wa(508,s+56|0,O|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ra=Q;sa=ba;vva(V);Qb(sa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[V>>2]=27488;B=0;va(448,O|0);ba=B;B=0;do if(ba&1){ca=Rb()|0;ta=Q;xa=ca}else{k[O>>2]=27560;ca=s+36|0;k[ca>>2]=0;k[ca+4>>2]=0;k[ca+8>>2]=0;k[ca+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,O|0,f|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(f);Yua(ca);Ava(O);ta=fa;xa=ea;break}Yua(f);B=0;ea=Ia(40,s|0,140087,67)|0;fa=B;B=0;c:do if((!(fa&1)?(ga=Lta(U)|0,B=0,ya=Ia(40,ea|0,U|0,ga|0)|0,ga=B,B=0,!(ga&1)):0)?(B=0,Xa(239,ya|0,0)|0,ya=B,B=0,!(ya&1)):0){ya=Ab(20)|0;B=0;eb(502,t|0,140006,66);ga=B;B=0;do if(!(ga&1)){B=0;eb(502,u|0,141416,20);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(t);Ba=Aa;Ca=za;break}B=0;wa(510,v|0,O|0);za=B;B=0;if(za&1){za=Rb()|0;Da=1;Ea=Q;Fa=za}else{B=0;ua(163,ya|0,t|0,u|0,2105,v|0);za=B;B=0;if(za&1)Ga=1;else{B=0;eb(503,ya|0,1240,229);B=0;Ga=0}za=Rb()|0;Aa=Q;Yua(v);Da=Ga;Ea=Aa;Fa=za}Yua(u);Yua(t);if(Da){Ba=Ea;Ca=Fa}else{Ha=Ea;Ja=Fa;break c}}else{za=Rb()|0;Ba=Q;Ca=za}while(0);zb(ya|0);Ha=Ba;Ja=Ca}else R=47;while(0);if((R|0)==47){ea=Rb()|0;Ha=Q;Ja=ea}k[s>>2]=27468;k[V>>2]=27488;k[O>>2]=27560;Yua(ca);Ava(O);vva(V);pa=Ha;qa=Ja;Qb(qa|0)}while(0);ra=ta;sa=xa;vva(V);Qb(sa|0)}else if((R|0)==56){dta(X,4,1)|0;if((ata(l,4,1,k[N>>2]|0)|0)!=1){O=w+56|0;ba=w+4|0;k[w>>2]=27524;k[O>>2]=27544;B=0;wa(508,w+56|0,ba|0);S=B;B=0;if(S&1){S=Rb()|0;Ka=Q;La=S;vva(O);Qb(La|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[O>>2]=27488;B=0;va(448,ba|0);S=B;B=0;do if(S&1){ea=Rb()|0;Ma=Q;Na=ea}else{k[ba>>2]=27560;ea=w+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[w+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,ba|0,f|0);fa=B;B=0;if(fa&1){fa=Rb()|0;_=Q;Yua(f);Yua(ea);Ava(ba);Ma=_;Na=fa;break}Yua(f);B=0;fa=Ia(40,w|0,141437,26)|0;_=B;B=0;d:do if(!(_&1)?(B=0,Xa(239,fa|0,0)|0,ga=B,B=0,!(ga&1)):0){ga=Ab(20)|0;B=0;eb(502,x|0,140006,66);da=B;B=0;do if(!(da&1)){B=0;eb(502,y|0,141416,20);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(x);Oa=Aa;Pa=za;break}B=0;wa(510,z|0,ba|0);za=B;B=0;if(za&1){za=Rb()|0;Qa=1;Ra=Q;Sa=za}else{B=0;ua(163,ga|0,x|0,y|0,2112,z|0);za=B;B=0;if(za&1)Ta=1;else{B=0;eb(503,ga|0,1240,229);B=0;Ta=0}za=Rb()|0;Aa=Q;Yua(z);Qa=Ta;Ra=Aa;Sa=za}Yua(y);Yua(x);if(Qa){Oa=Ra;Pa=Sa}else{Ua=Ra;Va=Sa;break d}}else{za=Rb()|0;Oa=Q;Pa=za}while(0);zb(ga|0);Ua=Oa;Va=Pa}else R=72;while(0);if((R|0)==72){fa=Rb()|0;Ua=Q;Va=fa}k[w>>2]=27468;k[O>>2]=27488;k[ba>>2]=27560;Yua(ea);Ava(ba);vva(O);pa=Ua;qa=Va;Qb(qa|0)}while(0);Ka=Ma;La=Na;vva(O);Qb(La|0)}if(((k[l>>2]|0)+-5|0)>>>0<3?(ata(m,4,1,k[N>>2]|0)|0)!=1:0){ba=A+56|0;S=A+4|0;k[A>>2]=27524;k[ba>>2]=27544;B=0;wa(508,A+56|0,S|0);V=B;B=0;if(V&1){V=Rb()|0;Wa=Q;Ya=V;vva(ba);Qb(Ya|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[ba>>2]=27488;B=0;va(448,S|0);V=B;B=0;do if(V&1){fa=Rb()|0;Za=Q;_a=fa}else{k[S>>2]=27560;fa=A+36|0;k[fa>>2]=0;k[fa+4>>2]=0;k[fa+8>>2]=0;k[fa+12>>2]=0;k[A+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,S|0,f|0);_=B;B=0;if(_&1){_=Rb()|0;ca=Q;Yua(f);Yua(fa);Ava(S);Za=ca;_a=_;break}Yua(f);B=0;_=Ia(40,A|0,141464,26)|0;ca=B;B=0;e:do if(!(ca&1)?(B=0,Xa(239,_|0,0)|0,da=B,B=0,!(da&1)):0){da=Ab(20)|0;B=0;eb(502,C|0,140006,66);ya=B;B=0;do if(!(ya&1)){B=0;eb(502,D|0,141416,20);za=B;B=0;if(za&1){za=Rb()|0;Aa=Q;Yua(C);$a=Aa;ab=za;break}B=0;wa(510,E|0,S|0);za=B;B=0;if(za&1){za=Rb()|0;bb=Q;cb=za;db=1}else{B=0;ua(163,da|0,C|0,D|0,2116,E|0);za=B;B=0;if(za&1)fb=1;else{B=0;eb(503,da|0,1240,229);B=0;fb=0}za=Rb()|0;Aa=Q;Yua(E);bb=Aa;cb=za;db=fb}Yua(D);Yua(C);if(db){$a=bb;ab=cb}else{gb=bb;hb=cb;break e}}else{za=Rb()|0;$a=Q;ab=za}while(0);zb(da|0);gb=$a;hb=ab}else R=97;while(0);if((R|0)==97){_=Rb()|0;gb=Q;hb=_}k[A>>2]=27468;k[ba>>2]=27488;k[S>>2]=27560;Yua(fa);Ava(S);vva(ba);pa=gb;qa=hb;Qb(qa|0)}while(0);Wa=Za;Ya=_a;vva(ba);Qb(Ya|0)}k[g>>2]=1;Tqa(W);break}else if((R|0)==107){S=F+56|0;V=F+4|0;k[F>>2]=27524;k[S>>2]=27544;B=0;wa(508,F+56|0,V|0);N=B;B=0;if(N&1){N=Rb()|0;ib=Q;jb=N;vva(S);Qb(jb|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[S>>2]=27488;B=0;va(448,V|0);N=B;B=0;do if(N&1){O=Rb()|0;kb=Q;lb=O}else{k[V>>2]=27560;O=F+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[F+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,V|0,f|0);_=B;B=0;if(_&1){_=Rb()|0;ca=Q;Yua(f);Yua(O);Ava(V);kb=ca;lb=_;break}Yua(f);B=0;_=Ia(40,F|0,140162,28)|0;ca=B;B=0;f:do if(!(ca&1)?(B=0,Xa(239,_|0,0)|0,ea=B,B=0,!(ea&1)):0){ea=Ab(20)|0;B=0;eb(502,G|0,140006,66);ya=B;B=0;do if(!(ya&1)){B=0;eb(502,H|0,141416,20);ga=B;B=0;if(ga&1){ga=Rb()|0;za=Q;Yua(G);mb=za;nb=ga;break}B=0;wa(510,I|0,V|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ob=1;pb=Q;qb=ga}else{B=0;ua(163,ea|0,G|0,H|0,2124,I|0);ga=B;B=0;if(ga&1)rb=1;else{B=0;eb(503,ea|0,1240,229);B=0;rb=0}ga=Rb()|0;za=Q;Yua(I);ob=rb;pb=za;qb=ga}Yua(H);Yua(G);if(ob){mb=pb;nb=qb}else{sb=pb;tb=qb;break f}}else{ga=Rb()|0;mb=Q;nb=ga}while(0);zb(ea|0);sb=mb;tb=nb}else R=122;while(0);if((R|0)==122){_=Rb()|0;sb=Q;tb=_}k[F>>2]=27468;k[S>>2]=27488;k[V>>2]=27560;Yua(O);Ava(V);vva(S);pa=sb;qa=tb;Qb(qa|0)}while(0);ib=kb;jb=lb;vva(S);Qb(jb|0)}}while(0);uY()|0;if(k[g>>2]|0){uY()|0;uY()|0;k[b>>2]=k[l>>2];if(!c){ub=a+24|0;vb=k[ub>>2]|0;r=e;return vb|0}k[c>>2]=k[m>>2];ub=a+24|0;vb=k[ub>>2]|0;r=e;return vb|0}vb=J+56|0;e=J+4|0;k[J>>2]=27524;k[vb>>2]=27544;B=0;wa(508,J+56|0,e|0);ub=B;B=0;if(ub&1){ub=Rb()|0;wb=Q;xb=ub;vva(vb);Qb(xb|0)}k[J+128>>2]=0;k[J+132>>2]=-1;k[J>>2]=27468;k[vb>>2]=27488;B=0;va(448,e|0);ub=B;B=0;do if(ub&1){a=Rb()|0;yb=Q;Bb=a}else{k[e>>2]=27560;a=J+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[J+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,e|0,f|0);m=B;B=0;if(m&1){m=Rb()|0;c=Q;Yua(f);Yua(a);Ava(e);yb=c;Bb=m;break}Yua(f);B=0;m=Ia(40,J|0,141491,31)|0;c=B;B=0;g:do if(((!(c&1)?(l=Lta(d)|0,B=0,b=Ia(40,m|0,d|0,l|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,b|0,141523,16)|0,b=B,B=0,!(b&1)):0)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,K|0,140006,66);b=B;B=0;do if(!(b&1)){B=0;eb(502,L|0,141416,20);g=B;B=0;if(g&1){g=Rb()|0;jb=Q;Yua(K);Cb=jb;Db=g;break}B=0;wa(510,M|0,e|0);g=B;B=0;if(g&1){g=Rb()|0;Eb=1;Fb=Q;Gb=g}else{B=0;ua(163,l|0,K|0,L|0,2132,M|0);g=B;B=0;if(g&1)Hb=1;else{B=0;eb(503,l|0,1240,229);B=0;Hb=0}g=Rb()|0;jb=Q;Yua(M);Eb=Hb;Fb=jb;Gb=g}Yua(L);Yua(K);if(Eb){Cb=Fb;Db=Gb}else{Ib=Fb;Jb=Gb;break g}}else{g=Rb()|0;Cb=Q;Db=g}while(0);zb(l|0);Ib=Cb;Jb=Db}else R=149;while(0);if((R|0)==149){m=Rb()|0;Ib=Q;Jb=m}k[J>>2]=27468;k[vb>>2]=27488;k[e>>2]=27560;Yua(a);Ava(e);vva(vb);pa=Ib;qa=Jb;Qb(qa|0)}while(0);wb=yb;xb=Bb;vva(vb);Qb(xb|0);return 0}function Pka(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;d=r;r=r+384|0;e=d+364|0;f=d;g=d+360|0;h=d+224|0;i=d+208|0;j=d+56|0;l=d+44|0;m=d+72|0;n=d+32|0;o=d+20|0;q=d+8|0;s=vY()|0;t=Oka(a,g,0,c)|0;k[a+24>>2]=t;if((k[g>>2]|0)!=3){g=h+56|0;a=h+4|0;k[h>>2]=27524;k[g>>2]=27544;B=0;wa(508,h+56|0,a|0);u=B;B=0;if(u&1){u=Rb()|0;v=Q;w=u;vva(g);Qb(w|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[g>>2]=27488;B=0;va(448,a|0);u=B;B=0;do if(u&1){x=Rb()|0;y=Q;z=x}else{k[a>>2]=27560;x=h+36|0;k[x>>2]=0;k[x+4>>2]=0;k[x+8>>2]=0;k[x+12>>2]=0;k[h+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,a|0,e|0);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(e);Yua(x);Ava(a);y=C;z=A;break}Yua(e);B=0;A=Ia(40,h|0,141540,28)|0;C=B;B=0;a:do if(((!(C&1)?(D=Lta(c)|0,B=0,E=Ia(40,A|0,c|0,D|0)|0,D=B,B=0,!(D&1)):0)?(B=0,D=Ia(40,E|0,141051,1)|0,E=B,B=0,!(E&1)):0)?(B=0,Xa(239,D|0,0)|0,D=B,B=0,!(D&1)):0){D=Ab(20)|0;B=0;eb(502,i|0,140006,66);E=B;B=0;do if(!(E&1)){B=0;eb(502,j|0,141093,9);F=B;B=0;if(F&1){F=Rb()|0;G=Q;Yua(i);H=F;I=G;break}B=0;wa(510,l|0,a|0);G=B;B=0;if(G&1){G=Rb()|0;J=Q;K=G;L=1}else{B=0;ua(163,D|0,i|0,j|0,1162,l|0);G=B;B=0;if(G&1)M=1;else{B=0;eb(503,D|0,1240,229);B=0;M=0}G=Rb()|0;F=Q;Yua(l);J=F;K=G;L=M}Yua(j);Yua(i);if(L){H=K;I=J}else{N=K;O=J;break a}}else{G=Rb()|0;H=G;I=Q}while(0);zb(D|0);N=H;O=I}else P=19;while(0);if((P|0)==19){A=Rb()|0;N=A;O=Q}k[h>>2]=27468;k[g>>2]=27488;k[a>>2]=27560;Yua(x);Ava(a);vva(g);R=O;S=N;Qb(S|0)}while(0);v=y;w=z;vva(g);Qb(w|0)}if(s){uY()|0;T=+p[f>>3];p[b>>3]=T;r=d;return}if((ata(f,8,1,t)|0)==1){uY()|0;T=+p[f>>3];p[b>>3]=T;r=d;return}d=m+56|0;b=m+4|0;k[m>>2]=27524;k[d>>2]=27544;B=0;wa(508,m+56|0,b|0);f=B;B=0;if(f&1){f=Rb()|0;U=Q;V=f;vva(d);Qb(V|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);f=B;B=0;do if(f&1){t=Rb()|0;W=Q;X=t}else{k[b>>2]=27560;t=m+36|0;k[t>>2]=0;k[t+4>>2]=0;k[t+8>>2]=0;k[t+12>>2]=0;k[m+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);s=B;B=0;if(s&1){s=Rb()|0;w=Q;Yua(e);Yua(t);Ava(b);W=w;X=s;break}Yua(e);B=0;s=Ia(40,m|0,140886,22)|0;w=B;B=0;b:do if(!(w&1)?(B=0,Xa(239,s|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,n|0,140006,66);z=B;B=0;do if(!(z&1)){B=0;eb(502,o|0,141093,9);y=B;B=0;if(y&1){y=Rb()|0;v=Q;Yua(n);Y=y;Z=v;break}B=0;wa(510,q|0,b|0);v=B;B=0;if(v&1){v=Rb()|0;_=1;$=Q;aa=v}else{B=0;ua(163,g|0,n|0,o|0,1166,q|0);v=B;B=0;if(v&1)ba=1;else{B=0;eb(503,g|0,1240,229);B=0;ba=0}v=Rb()|0;y=Q;Yua(q);_=ba;$=y;aa=v}Yua(o);Yua(n);if(_){Y=aa;Z=$}else{ca=$;da=aa;break b}}else{v=Rb()|0;Y=v;Z=Q}while(0);zb(g|0);ca=Z;da=Y}else P=44;while(0);if((P|0)==44){s=Rb()|0;ca=Q;da=s}k[m>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(t);Ava(b);vva(d);R=ca;S=da;Qb(S|0)}while(0);U=W;V=X;vva(d);Qb(V|0)}function Qka(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;f=r;r=r+720|0;g=f+704|0;h=f+700|0;i=f+684|0;j=f+680|0;l=f+520|0;m=f+688|0;n=f+668|0;o=f+656|0;q=f+384|0;s=f+368|0;t=f+84|0;u=f+72|0;v=f+232|0;w=f+60|0;x=f+48|0;y=f+36|0;z=f+96|0;A=f+24|0;C=f+12|0;D=f;E=k[a+12>>2]|0;F=k[a+16>>2]|0;a:do if(E>>>0<F>>>0){G=E;while(1){H=k[G>>2]|0;G=G+4|0;if(!(Ita(k[H+4>>2]|0,e)|0)){I=H;break}if(G>>>0>=F>>>0)break a}k[b>>2]=k[I+24>>2];if(c)k[c>>2]=k[I+8>>2];if(!d){r=f;return}k[d>>2]=k[I+12>>2];r=f;return}while(0);k[j>>2]=0;I=vY()|0;F=Oka(a,j,0,e)|0;E=a+24|0;k[E>>2]=F;a=k[j>>2]|0;if((a+-5|0)>>>0>=3){j=l+56|0;G=l+4|0;k[l>>2]=27524;k[j>>2]=27544;B=0;wa(508,l+56|0,G|0);H=B;B=0;if(H&1){H=Rb()|0;J=Q;K=H;vva(j);Qb(K|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[j>>2]=27488;B=0;va(448,G|0);H=B;B=0;do if(H&1){L=Rb()|0;M=Q;N=L}else{k[G>>2]=27560;L=l+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[l+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,G|0,g|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(g);Yua(L);Ava(G);M=P;N=O;break}Yua(g);B=0;O=Ia(40,l|0,141103,55)|0;P=B;B=0;b:do if((((((!(P&1)?(R=Lta(e)|0,B=0,S=Ia(40,O|0,e|0,R|0)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Ia(40,S|0,141051,1)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,141159,10)|0,R=B,B=0,!(R&1)):0)?(B=0,R=Xa(242,S|0,a|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,R|0,141170,1)|0,R=B,B=0,!(R&1)):0)?(B=0,Xa(239,S|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,m|0,140006,66);R=B;B=0;do if(!(R&1)){B=0;eb(502,n|0,141093,9);T=B;B=0;if(T&1){T=Rb()|0;U=Q;Yua(m);V=U;W=T;break}B=0;wa(510,o|0,G|0);T=B;B=0;if(T&1){T=Rb()|0;X=Q;Y=T;Z=1}else{B=0;ua(163,S|0,m|0,n|0,1309,o|0);T=B;B=0;if(T&1)_=1;else{B=0;eb(503,S|0,1240,229);B=0;_=0}T=Rb()|0;U=Q;Yua(o);X=U;Y=T;Z=_}Yua(n);Yua(m);if(Z){V=X;W=Y}else{$=X;aa=Y;break b}}else{T=Rb()|0;V=Q;W=T}while(0);zb(S|0);$=V;aa=W}else ba=29;while(0);if((ba|0)==29){O=Rb()|0;$=Q;aa=O}k[l>>2]=27468;k[j>>2]=27488;k[G>>2]=27560;Yua(L);Ava(G);vva(j);ca=$;da=aa;Qb(da|0)}while(0);J=M;K=N;vva(j);Qb(K|0)}K=(I|0)==0;if(K){if((ata(h,4,1,F)|0)!=1){F=q+56|0;I=q+4|0;k[q>>2]=27524;k[F>>2]=27544;B=0;wa(508,q+56|0,I|0);j=B;B=0;if(j&1){j=Rb()|0;ea=Q;fa=j;vva(F);Qb(fa|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[F>>2]=27488;B=0;va(448,I|0);j=B;B=0;do if(j&1){N=Rb()|0;ga=Q;ha=N}else{k[I>>2]=27560;N=q+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[q+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,I|0,g|0);M=B;B=0;if(M&1){M=Rb()|0;J=Q;Yua(g);Yua(N);Ava(I);ga=J;ha=M;break}Yua(g);B=0;M=Ia(40,q|0,141172,41)|0;J=B;B=0;c:do if(!(J&1)?(B=0,Xa(239,M|0,0)|0,aa=B,B=0,!(aa&1)):0){aa=Ab(20)|0;B=0;eb(502,s|0,140006,66);$=B;B=0;do if(!($&1)){B=0;eb(502,t|0,141093,9);G=B;B=0;if(G&1){G=Rb()|0;l=Q;Yua(s);ia=G;ja=l;break}B=0;wa(510,u|0,I|0);l=B;B=0;if(l&1){l=Rb()|0;ka=1;la=Q;na=l}else{B=0;ua(163,aa|0,s|0,t|0,1316,u|0);l=B;B=0;if(l&1)oa=1;else{B=0;eb(503,aa|0,1240,229);B=0;oa=0}l=Rb()|0;G=Q;Yua(u);ka=oa;la=G;na=l}Yua(t);Yua(s);if(ka){ia=na;ja=la}else{pa=la;qa=na;break c}}else{l=Rb()|0;ia=l;ja=Q}while(0);zb(aa|0);pa=ja;qa=ia}else ba=54;while(0);if((ba|0)==54){M=Rb()|0;pa=Q;qa=M}k[q>>2]=27468;k[F>>2]=27488;k[I>>2]=27560;Yua(N);Ava(I);vva(F);ca=pa;da=qa;Qb(da|0)}while(0);ea=ga;fa=ha;vva(F);Qb(fa|0)}uY()|0;if((ata(i,4,1,k[E>>2]|0)|0)!=1){fa=v+56|0;F=v+4|0;k[v>>2]=27524;k[fa>>2]=27544;B=0;wa(508,v+56|0,F|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ra=Q;sa=ha;vva(fa);Qb(sa|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[fa>>2]=27488;B=0;va(448,F|0);ha=B;B=0;do if(ha&1){ga=Rb()|0;ta=Q;xa=ga}else{k[F>>2]=27560;ga=v+36|0;k[ga>>2]=0;k[ga+4>>2]=0;k[ga+8>>2]=0;k[ga+12>>2]=0;k[v+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,F|0,g|0);ea=B;B=0;if(ea&1){ea=Rb()|0;qa=Q;Yua(g);Yua(ga);Ava(F);ta=qa;xa=ea;break}Yua(g);B=0;ea=Ia(40,v|0,141214,44)|0;qa=B;B=0;d:do if(!(qa&1)?(B=0,Xa(239,ea|0,0)|0,pa=B,B=0,!(pa&1)):0){pa=Ab(20)|0;B=0;eb(502,w|0,140006,66);I=B;B=0;do if(!(I&1)){B=0;eb(502,x|0,141093,9);q=B;B=0;if(q&1){q=Rb()|0;ia=Q;Yua(w);ya=q;za=ia;break}B=0;wa(510,y|0,F|0);ia=B;B=0;if(ia&1){ia=Rb()|0;Aa=1;Ba=Q;Ca=ia}else{B=0;ua(163,pa|0,w|0,x|0,1321,y|0);ia=B;B=0;if(ia&1)Da=1;else{B=0;eb(503,pa|0,1240,229);B=0;Da=0}ia=Rb()|0;q=Q;Yua(y);Aa=Da;Ba=q;Ca=ia}Yua(x);Yua(w);if(Aa){ya=Ca;za=Ba}else{Ea=Ba;Fa=Ca;break d}}else{ia=Rb()|0;ya=ia;za=Q}while(0);zb(pa|0);Ea=za;Fa=ya}else ba=78;while(0);if((ba|0)==78){ea=Rb()|0;Ea=Q;Fa=ea}k[v>>2]=27468;k[fa>>2]=27488;k[F>>2]=27560;Yua(ga);Ava(F);vva(fa);ca=Ea;da=Fa;Qb(da|0)}while(0);ra=ta;sa=xa;vva(fa);Qb(sa|0)}}else uY()|0;uY()|0;sa=k[h>>2]|0;fa=k[i>>2]|0;xa=ma(fa,sa)|0;if(!xa)k[b>>2]=0;else{ta=Rqa(xa>>>0>536870911?-1:xa<<3)|0;do if(K){xa=ma(sa<<3,fa)|0;if((ata(ta,xa,1,k[E>>2]|0)|0)==1)break;xa=z+56|0;ra=z+4|0;k[z>>2]=27524;k[xa>>2]=27544;B=0;wa(508,z+56|0,ra|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Ha=Fa;vva(xa);Qb(Ha|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[xa>>2]=27488;B=0;va(448,ra|0);Fa=B;B=0;do if(Fa&1){Ea=Rb()|0;Ja=Q;Ka=Ea}else{k[ra>>2]=27560;Ea=z+36|0;k[Ea>>2]=0;k[Ea+4>>2]=0;k[Ea+8>>2]=0;k[Ea+12>>2]=0;k[z+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ra|0,g|0);F=B;B=0;if(F&1){F=Rb()|0;v=Q;Yua(g);Yua(Ea);Ava(ra);Ja=v;Ka=F;break}Yua(g);B=0;F=Ia(40,z|0,141259,22)|0;v=B;B=0;e:do if(!(v&1)?(B=0,Xa(239,F|0,0)|0,ya=B,B=0,!(ya&1)):0){ya=Ab(20)|0;B=0;eb(502,A|0,140006,66);za=B;B=0;do if(!(za&1)){B=0;eb(502,C|0,141093,9);Ca=B;B=0;if(Ca&1){Ca=Rb()|0;Ba=Q;Yua(A);La=Ca;Ma=Ba;break}B=0;wa(510,D|0,ra|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Na=1;Oa=Q;Pa=Ba}else{B=0;ua(163,ya|0,A|0,C|0,1331,D|0);Ba=B;B=0;if(Ba&1)Qa=1;else{B=0;eb(503,ya|0,1240,229);B=0;Qa=0}Ba=Rb()|0;Ca=Q;Yua(D);Na=Qa;Oa=Ca;Pa=Ba}Yua(C);Yua(A);if(Na){La=Pa;Ma=Oa}else{Ra=Oa;Sa=Pa;break e}}else{Ba=Rb()|0;La=Ba;Ma=Q}while(0);zb(ya|0);Ra=Ma;Sa=La}else ba=106;while(0);if((ba|0)==106){F=Rb()|0;Ra=Q;Sa=F}k[z>>2]=27468;k[xa>>2]=27488;k[ra>>2]=27560;Yua(Ea);Ava(ra);vva(xa);ca=Ra;da=Sa;Qb(da|0)}while(0);Ga=Ja;Ha=Ka;vva(xa);Qb(Ha|0)}while(0);uY()|0;Ha=ma(k[i>>2]|0,k[h>>2]|0)|0;Ka=Rqa(Ha>>>0>536870911?-1:Ha<<3)|0;k[b>>2]=Ka;if((Ha|0)>0){b=0;do{p[Ka+(b<<3)>>3]=+p[ta+(b<<3)>>3];b=b+1|0}while((b|0)<(Ha|0))}Tqa(ta)}if(c)k[c>>2]=k[h>>2];if(d)k[d>>2]=k[i>>2];r=f;return}function Rka(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0;g=r;r=r+912|0;h=g+892|0;i=g+888|0;j=g+872|0;l=g+868|0;m=g+852|0;n=g+704|0;o=g+876|0;q=g+856|0;s=g+840|0;t=g+552|0;u=g+688|0;v=g+536|0;w=g+248|0;x=g+400|0;y=g+96|0;z=g+84|0;A=g+72|0;C=g+264|0;D=g+60|0;E=g+48|0;F=g+36|0;G=g+112|0;H=g+24|0;I=g+12|0;J=g;k[i>>2]=0;K=vY()|0;L=Oka(a,m,0,f)|0;M=a+24|0;k[M>>2]=L;if((k[m>>2]|0)!=8){m=n+56|0;a=n+4|0;k[n>>2]=27524;k[m>>2]=27544;B=0;wa(508,n+56|0,a|0);N=B;B=0;if(N&1){N=Rb()|0;O=Q;P=N;vva(m);Qb(P|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[m>>2]=27488;B=0;va(448,a|0);N=B;B=0;do if(N&1){R=Rb()|0;S=Q;T=R}else{k[a>>2]=27560;R=n+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,a|0,h|0);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(h);Yua(R);Ava(a);S=V;T=U;break}Yua(h);B=0;U=Ia(40,n|0,141594,38)|0;V=B;B=0;a:do if(((!(V&1)?(W=Lta(f)|0,B=0,X=Ia(40,U|0,f|0,W|0)|0,W=B,B=0,!(W&1)):0)?(B=0,W=Ia(40,X|0,141051,1)|0,X=B,B=0,!(X&1)):0)?(B=0,Xa(239,W|0,0)|0,W=B,B=0,!(W&1)):0){W=Ab(20)|0;B=0;eb(502,o|0,140006,66);X=B;B=0;do if(!(X&1)){B=0;eb(502,q|0,141093,9);Y=B;B=0;if(Y&1){Y=Rb()|0;Z=Q;Yua(o);_=Z;$=Y;break}B=0;wa(510,s|0,a|0);Y=B;B=0;if(Y&1){Y=Rb()|0;aa=Q;ba=Y;ca=1}else{B=0;ua(163,W|0,o|0,q|0,1365,s|0);Y=B;B=0;if(Y&1)da=1;else{B=0;eb(503,W|0,1240,229);B=0;da=0}Y=Rb()|0;Z=Q;Yua(s);aa=Z;ba=Y;ca=da}Yua(q);Yua(o);if(ca){_=aa;$=ba}else{ea=aa;fa=ba;break a}}else{Y=Rb()|0;_=Q;$=Y}while(0);zb(W|0);ea=_;fa=$}else ga=19;while(0);if((ga|0)==19){U=Rb()|0;ea=Q;fa=U}k[n>>2]=27468;k[m>>2]=27488;k[a>>2]=27560;Yua(R);Ava(a);vva(m);ha=ea;ia=fa;Qb(ia|0)}while(0);O=S;P=T;vva(m);Qb(P|0)}P=(K|0)==0;if(P?(ata(i,4,1,L)|0)!=1:0){L=t+56|0;K=t+4|0;k[t>>2]=27524;k[L>>2]=27544;B=0;wa(508,t+56|0,K|0);m=B;B=0;if(m&1){m=Rb()|0;ja=Q;ka=m;vva(L);Qb(ka|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[L>>2]=27488;B=0;va(448,K|0);m=B;B=0;do if(m&1){T=Rb()|0;la=Q;na=T}else{k[K>>2]=27560;T=t+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[t+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,K|0,h|0);S=B;B=0;if(S&1){S=Rb()|0;O=Q;Yua(h);Yua(T);Ava(K);la=O;na=S;break}Yua(h);B=0;S=Ia(40,t|0,141633,49)|0;O=B;B=0;b:do if(!(O&1)?(B=0,Xa(239,S|0,0)|0,fa=B,B=0,!(fa&1)):0){fa=Ab(20)|0;B=0;eb(502,u|0,140006,66);ea=B;B=0;do if(!(ea&1)){B=0;eb(502,v|0,141093,9);a=B;B=0;if(a&1){a=Rb()|0;n=Q;Yua(u);oa=n;pa=a;break}B=0;wa(510,w|0,K|0);a=B;B=0;if(a&1){a=Rb()|0;qa=1;ra=Q;sa=a}else{B=0;ua(163,fa|0,u|0,v|0,1369,w|0);a=B;B=0;if(a&1)ta=1;else{B=0;eb(503,fa|0,1240,229);B=0;ta=0}a=Rb()|0;n=Q;Yua(w);qa=ta;ra=n;sa=a}Yua(v);Yua(u);if(qa){oa=ra;pa=sa}else{xa=ra;ya=sa;break b}}else{a=Rb()|0;oa=Q;pa=a}while(0);zb(fa|0);xa=oa;ya=pa}else ga=44;while(0);if((ga|0)==44){S=Rb()|0;xa=Q;ya=S}k[t>>2]=27468;k[L>>2]=27488;k[K>>2]=27560;Yua(T);Ava(K);vva(L);ha=xa;ia=ya;Qb(ia|0)}while(0);ja=la;ka=na;vva(L);Qb(ka|0)}uY()|0;ka=k[i>>2]|0;if(!ka){za=0;Aa=0;Ba=0;Ca=0;k[b>>2]=Aa;k[c>>2]=Ba;k[d>>2]=Ca;k[e>>2]=za;r=g;return}L=ka>>>0>1073741823?-1:ka<<2;na=Rqa(L)|0;la=Rqa(L)|0;ja=Rqa(L)|0;if((ka|0)<=0){za=ka;Aa=na;Ba=la;Ca=ja;k[b>>2]=Aa;k[c>>2]=Ba;k[d>>2]=Ca;k[e>>2]=za;r=g;return}L=((ka|0)>1?ka:1)<<2;WEa(na|0,0,L|0)|0;WEa(la|0,0,L|0)|0;WEa(ja|0,0,L|0)|0;L=0;while(1){if(P){if((ata(j,4,1,k[M>>2]|0)|0)!=1){Da=L;ga=57;break}uY()|0;if((ata(l,4,1,k[M>>2]|0)|0)!=1){Ea=L;ga=83;break}}else uY()|0;uY()|0;ka=k[j>>2]|0;ya=k[l>>2]|0;xa=ma(ya,ka)|0;if(!xa){k[na+(L<<2)>>2]=0;Fa=ka;Ga=ya}else{K=Rqa(xa>>>0>536870911?-1:xa<<3)|0;if(P?(xa=ma(ka<<3,ya)|0,(ata(K,xa,1,k[M>>2]|0)|0)!=1):0){ga=113;break}uY()|0;xa=ma(k[l>>2]|0,k[j>>2]|0)|0;ya=Rqa(xa>>>0>536870911?-1:xa<<3)|0;k[na+(L<<2)>>2]=ya;if((xa|0)>0){ka=0;do{p[ya+(ka<<3)>>3]=+p[K+(ka<<3)>>3];ka=ka+1|0}while((ka|0)<(xa|0))}Tqa(K);Fa=k[j>>2]|0;Ga=k[l>>2]|0}k[la+(L<<2)>>2]=Fa;k[ja+(L<<2)>>2]=Ga;L=L+1|0;xa=k[i>>2]|0;if((L|0)>=(xa|0)){za=xa;Aa=na;Ba=la;Ca=ja;ga=141;break}}if((ga|0)==57){ja=x+56|0;la=x+4|0;k[x>>2]=27524;k[ja>>2]=27544;B=0;wa(508,x+56|0,la|0);na=B;B=0;if(na&1){na=Rb()|0;Ha=Q;Ja=na;vva(ja);Qb(Ja|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ja>>2]=27488;B=0;va(448,la|0);na=B;B=0;do if(na&1){L=Rb()|0;Ka=Q;La=L}else{k[la>>2]=27560;L=x+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[x+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,la|0,h|0);i=B;B=0;if(i&1){i=Rb()|0;Ga=Q;Yua(h);Yua(L);Ava(la);Ka=Ga;La=i;break}Yua(h);B=0;i=Ia(40,x|0,141683,33)|0;Ga=B;B=0;c:do if(((!(Ga&1)?(B=0,Fa=Xa(242,i|0,Da|0)|0,l=B,B=0,!(l&1)):0)?(B=0,l=Ia(40,Fa|0,141717,25)|0,Fa=B,B=0,!(Fa&1)):0)?(B=0,Xa(239,l|0,0)|0,l=B,B=0,!(l&1)):0){l=Ab(20)|0;B=0;eb(502,y|0,140006,66);Fa=B;B=0;do if(!(Fa&1)){B=0;eb(502,z|0,141093,9);j=B;B=0;if(j&1){j=Rb()|0;M=Q;Yua(y);Ma=M;Na=j;break}B=0;wa(510,A|0,la|0);j=B;B=0;if(j&1){j=Rb()|0;Oa=1;Pa=Q;Qa=j}else{B=0;ua(163,l|0,y|0,z|0,1390,A|0);j=B;B=0;if(j&1)Ra=1;else{B=0;eb(503,l|0,1240,229);B=0;Ra=0}j=Rb()|0;M=Q;Yua(A);Oa=Ra;Pa=M;Qa=j}Yua(z);Yua(y);if(Oa){Ma=Pa;Na=Qa}else{Sa=Pa;Ta=Qa;break c}}else{j=Rb()|0;Ma=Q;Na=j}while(0);zb(l|0);Sa=Ma;Ta=Na}else ga=74;while(0);if((ga|0)==74){i=Rb()|0;Sa=Q;Ta=i}k[x>>2]=27468;k[ja>>2]=27488;k[la>>2]=27560;Yua(L);Ava(la);vva(ja);ha=Sa;ia=Ta;Qb(ia|0)}while(0);Ha=Ka;Ja=La;vva(ja);Qb(Ja|0)}else if((ga|0)==83){Ja=C+56|0;ja=C+4|0;k[C>>2]=27524;k[Ja>>2]=27544;B=0;wa(508,C+56|0,ja|0);La=B;B=0;if(La&1){La=Rb()|0;Ua=Q;Va=La;vva(Ja);Qb(Va|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[Ja>>2]=27488;B=0;va(448,ja|0);La=B;B=0;do if(La&1){Ka=Rb()|0;Wa=Q;Ya=Ka}else{k[ja>>2]=27560;Ka=C+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[C+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,ja|0,h|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ta=Q;Yua(h);Yua(Ka);Ava(ja);Wa=Ta;Ya=Ha;break}Yua(h);B=0;Ha=Ia(40,C|0,141743,36)|0;Ta=B;B=0;d:do if(((!(Ta&1)?(B=0,Sa=Xa(242,Ha|0,Ea|0)|0,la=B,B=0,!(la&1)):0)?(B=0,la=Ia(40,Sa|0,141717,25)|0,Sa=B,B=0,!(Sa&1)):0)?(B=0,Xa(239,la|0,0)|0,la=B,B=0,!(la&1)):0){la=Ab(20)|0;B=0;eb(502,D|0,140006,66);Sa=B;B=0;do if(!(Sa&1)){B=0;eb(502,E|0,141093,9);x=B;B=0;if(x&1){x=Rb()|0;Na=Q;Yua(D);Za=Na;_a=x;break}B=0;wa(510,F|0,ja|0);x=B;B=0;if(x&1){x=Rb()|0;$a=1;ab=Q;bb=x}else{B=0;ua(163,la|0,D|0,E|0,1395,F|0);x=B;B=0;if(x&1)cb=1;else{B=0;eb(503,la|0,1240,229);B=0;cb=0}x=Rb()|0;Na=Q;Yua(F);$a=cb;ab=Na;bb=x}Yua(E);Yua(D);if($a){Za=ab;_a=bb}else{db=ab;fb=bb;break d}}else{x=Rb()|0;Za=Q;_a=x}while(0);zb(la|0);db=Za;fb=_a}else ga=100;while(0);if((ga|0)==100){Ha=Rb()|0;db=Q;fb=Ha}k[C>>2]=27468;k[Ja>>2]=27488;k[ja>>2]=27560;Yua(Ka);Ava(ja);vva(Ja);ha=db;ia=fb;Qb(ia|0)}while(0);Ua=Wa;Va=Ya;vva(Ja);Qb(Va|0)}else if((ga|0)==113){Va=G+56|0;Ja=G+4|0;k[G>>2]=27524;k[Va>>2]=27544;B=0;wa(508,G+56|0,Ja|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;gb=Q;hb=Ya;vva(Va);Qb(hb|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[Va>>2]=27488;B=0;va(448,Ja|0);Ya=B;B=0;do if(Ya&1){Wa=Rb()|0;ib=Q;jb=Wa}else{k[Ja>>2]=27560;Wa=G+36|0;k[Wa>>2]=0;k[Wa+4>>2]=0;k[Wa+8>>2]=0;k[Wa+12>>2]=0;k[G+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,Ja|0,h|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;fb=Q;Yua(h);Yua(Wa);Ava(Ja);ib=fb;jb=Ua;break}Yua(h);B=0;Ua=Ia(40,G|0,141259,22)|0;fb=B;B=0;e:do if(!(fb&1)?(B=0,Xa(239,Ua|0,0)|0,db=B,B=0,!(db&1)):0){db=Ab(20)|0;B=0;eb(502,H|0,140006,66);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,I|0,141093,9);C=B;B=0;if(C&1){C=Rb()|0;_a=Q;Yua(H);kb=_a;lb=C;break}B=0;wa(510,J|0,Ja|0);C=B;B=0;if(C&1){C=Rb()|0;mb=1;nb=Q;ob=C}else{B=0;ua(163,db|0,H|0,I|0,1405,J|0);C=B;B=0;if(C&1)pb=1;else{B=0;eb(503,db|0,1240,229);B=0;pb=0}C=Rb()|0;_a=Q;Yua(J);mb=pb;nb=_a;ob=C}Yua(I);Yua(H);if(mb){kb=nb;lb=ob}else{qb=nb;rb=ob;break e}}else{C=Rb()|0;kb=Q;lb=C}while(0);zb(db|0);qb=kb;rb=lb}else ga=128;while(0);if((ga|0)==128){Ua=Rb()|0;qb=Q;rb=Ua}k[G>>2]=27468;k[Va>>2]=27488;k[Ja>>2]=27560;Yua(Wa);Ava(Ja);vva(Va);ha=qb;ia=rb;Qb(ia|0)}while(0);gb=ib;hb=jb;vva(Va);Qb(hb|0)}else if((ga|0)==141){k[b>>2]=Aa;k[c>>2]=Ba;k[d>>2]=Ca;k[e>>2]=za;r=g;return}}function Ska(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;d=r;r=r+240|0;e=d+216|0;f=d+200|0;g=d+192|0;h=d+188|0;j=d+184|0;l=d+180|0;m=d+176|0;n=d+40|0;o=d+24|0;p=d+12|0;q=d;k[j>>2]=0;k[f>>2]=c;if((b|0)<=0){r=d;return}c=a+12|0;s=a+16|0;t=0;while(1){u=(k[f>>2]|0)+(4-1)&~(4-1);v=k[u>>2]|0;k[f>>2]=u+4;if(Mta(v,140083,3)|0){w=v;x=5;break}u=k[c>>2]|0;y=k[s>>2]|0;if(u>>>0<y>>>0){z=0;A=u;do{u=(Ita(k[(k[A>>2]|0)+4>>2]|0,v)|0)==0;z=z|u;A=A+4|0}while(A>>>0<y>>>0&(u^1));if(!z)x=33}else x=33;if((x|0)==33){x=0;Oka(a,g,h,v)|0;Qka(a,j,l,m,v);y=Qqa(28)|0;A=k[j>>2]|0;u=k[g>>2]|0;C=k[h>>2]|0;D=k[l>>2]|0;E=k[m>>2]|0;i[y>>0]=0;k[y+16>>2]=u;k[y+20>>2]=C;k[y+8>>2]=D;k[y+12>>2]=E;k[y+24>>2]=A;A=(Lta(v)|0)+1|0;B=0;E=ya(422,A|0)|0;D=B;B=0;if(D&1){F=y;x=35;break}k[y+4>>2]=E;TEa(E|0,v|0,A|0)|0;Eka(a,y)}t=t+1|0;if((t|0)>=(b|0)){x=3;break}}if((x|0)==3){r=d;return}else if((x|0)==5){d=n+56|0;b=n+4|0;k[n>>2]=27524;k[d>>2]=27544;B=0;wa(508,n+56|0,b|0);t=B;B=0;if(t&1){t=Rb()|0;G=Q;H=t;vva(d);Qb(H|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);t=B;B=0;do if(t&1){a=Rb()|0;I=Q;J=a}else{k[b>>2]=27560;a=n+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[n+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;l=Q;Yua(e);Yua(a);Ava(b);I=l;J=m;break}Yua(e);B=0;m=Ia(40,n|0,141361,43)|0;l=B;B=0;a:do if(((!(l&1)?(h=Lta(w)|0,B=0,g=Ia(40,m|0,w|0,h|0)|0,h=B,B=0,!(h&1)):0)?(B=0,h=Ia(40,g|0,141170,1)|0,g=B,B=0,!(g&1)):0)?(B=0,Xa(239,h|0,0)|0,h=B,B=0,!(h&1)):0){h=Ab(20)|0;B=0;eb(502,o|0,140006,66);g=B;B=0;do if(!(g&1)){B=0;eb(502,p|0,141093,9);j=B;B=0;if(j&1){j=Rb()|0;s=Q;Yua(o);K=s;L=j;break}B=0;wa(510,q|0,b|0);j=B;B=0;if(j&1){j=Rb()|0;M=Q;N=j;O=1}else{B=0;ua(163,h|0,o|0,p|0,1493,q|0);j=B;B=0;if(j&1)P=1;else{B=0;eb(503,h|0,1240,229);B=0;P=0}j=Rb()|0;s=Q;Yua(q);M=s;N=j;O=P}Yua(p);Yua(o);if(O){K=M;L=N}else{R=N;S=M;break a}}else{j=Rb()|0;K=Q;L=j}while(0);zb(h|0);R=L;S=K}else x=22;while(0);if((x|0)==22){m=Rb()|0;R=m;S=Q}k[n>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(a);Ava(b);vva(d);T=S;U=R;Qb(U|0)}while(0);G=I;H=J;vva(d);Qb(H|0)}else if((x|0)==35){x=Rb()|0;H=Q;Sqa(F);T=H;U=x;Qb(U|0)}}function Tka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0;e=r;r=r+544|0;f=e+532|0;g=e+528|0;h=e+524|0;j=e+520|0;l=e+360|0;m=e+508|0;n=e+496|0;o=e+344|0;p=e+208|0;q=e+60|0;s=e+48|0;t=e+36|0;u=e+72|0;v=e+24|0;w=e+12|0;x=e;k[j>>2]=0;y=vY()|0;z=Uka(a,j,0,g,d)|0;A=k[g>>2]|0;a:do if(A){g=Rqa(A>>>0>1073741823?-1:A<<2)|0;if((A|0)>0){C=k[j>>2]|0;D=a+24|0;if(!y)E=0;else{F=0;while(1){uY()|0;G=k[h>>2]|0;if(!G){H=Rqa(1)|0;i[H>>0]=0;I=H}else{H=Rqa(G+1|0)|0;i[H+G>>0]=0;uY()|0;I=H}k[g+(F<<2)>>2]=I;F=F+1|0;if((F|0)>=(A|0)){J=g;break a}}}while(1){if((k[C+(E<<2)>>2]|0)!=4){K=11;break}eta(k[D>>2]|0,z+(E<<4)|0)|0;if((ata(h,4,1,k[D>>2]|0)|0)!=1){K=36;break}uY()|0;F=k[h>>2]|0;if(!F){H=Rqa(1)|0;i[H>>0]=0;L=H}else{H=Rqa(F+1|0)|0;i[H+F>>0]=0;if((ata(H,F,1,k[D>>2]|0)|0)!=1){K=61;break}uY()|0;L=H}k[g+(E<<2)>>2]=L;E=E+1|0;if((E|0)>=(A|0)){J=g;break a}}if((K|0)==11){D=l+56|0;C=l+4|0;k[l>>2]=27524;k[D>>2]=27544;B=0;wa(508,l+56|0,C|0);H=B;B=0;if(H&1){H=Rb()|0;M=Q;N=H;vva(D);Qb(N|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[D>>2]=27488;B=0;va(448,C|0);H=B;B=0;do if(H&1){F=Rb()|0;O=Q;P=F}else{k[C>>2]=27560;F=l+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[l+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,C|0,f|0);G=B;B=0;if(G&1){G=Rb()|0;R=Q;Yua(f);Yua(F);Ava(C);O=R;P=G;break}Yua(f);B=0;G=Ia(40,l|0,141569,24)|0;R=B;B=0;b:do if(((!(R&1)?(S=Lta(d)|0,B=0,T=Ia(40,G|0,d|0,S|0)|0,S=B,B=0,!(S&1)):0)?(B=0,S=Ia(40,T|0,141051,1)|0,T=B,B=0,!(T&1)):0)?(B=0,Xa(239,S|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,m|0,140006,66);T=B;B=0;do if(!(T&1)){B=0;eb(502,n|0,141780,17);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(m);W=V;X=U;break}B=0;wa(510,o|0,C|0);U=B;B=0;if(U&1){U=Rb()|0;Y=U;Z=Q;_=1}else{B=0;ua(163,S|0,m|0,n|0,1549,o|0);U=B;B=0;if(U&1)$=1;else{B=0;eb(503,S|0,1240,229);B=0;$=0}U=Rb()|0;V=Q;Yua(o);Y=U;Z=V;_=$}Yua(n);Yua(m);if(_){W=Z;X=Y}else{aa=Z;ba=Y;break b}}else{V=Rb()|0;W=Q;X=V}while(0);zb(S|0);aa=W;ba=X}else K=28;while(0);if((K|0)==28){G=Rb()|0;aa=Q;ba=G}k[l>>2]=27468;k[D>>2]=27488;k[C>>2]=27560;Yua(F);Ava(C);vva(D);ca=aa;da=ba;Qb(da|0)}while(0);M=O;N=P;vva(D);Qb(N|0)}else if((K|0)==36){C=p+56|0;H=p+4|0;k[p>>2]=27524;k[C>>2]=27544;B=0;wa(508,p+56|0,H|0);G=B;B=0;if(G&1){G=Rb()|0;ea=Q;fa=G;vva(C);Qb(fa|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[C>>2]=27488;B=0;va(448,H|0);G=B;B=0;do if(G&1){R=Rb()|0;ga=Q;ha=R}else{k[H>>2]=27560;R=p+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[p+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,H|0,f|0);T=B;B=0;if(T&1){T=Rb()|0;V=Q;Yua(f);Yua(R);Ava(H);ga=V;ha=T;break}Yua(f);B=0;T=Ia(40,p|0,140909,32)|0;V=B;B=0;c:do if(!(V&1)?(B=0,Xa(239,T|0,0)|0,U=B,B=0,!(U&1)):0){U=Ab(20)|0;B=0;eb(502,q|0,140006,66);ia=B;B=0;do if(!(ia&1)){B=0;eb(502,s|0,141780,17);ja=B;B=0;if(ja&1){ja=Rb()|0;ka=Q;Yua(q);la=ja;ma=ka;break}B=0;wa(510,t|0,H|0);ka=B;B=0;if(ka&1){ka=Rb()|0;na=1;oa=Q;pa=ka}else{B=0;ua(163,U|0,q|0,s|0,1553,t|0);ka=B;B=0;if(ka&1)qa=1;else{B=0;eb(503,U|0,1240,229);B=0;qa=0}ka=Rb()|0;ja=Q;Yua(t);na=qa;oa=ja;pa=ka}Yua(s);Yua(q);if(na){la=pa;ma=oa}else{ra=oa;sa=pa;break c}}else{ka=Rb()|0;la=ka;ma=Q}while(0);zb(U|0);ra=ma;sa=la}else K=51;while(0);if((K|0)==51){T=Rb()|0;ra=Q;sa=T}k[p>>2]=27468;k[C>>2]=27488;k[H>>2]=27560;Yua(R);Ava(H);vva(C);ca=ra;da=sa;Qb(da|0)}while(0);ea=ga;fa=ha;vva(C);Qb(fa|0)}else if((K|0)==61){H=u+56|0;G=u+4|0;k[u>>2]=27524;k[H>>2]=27544;B=0;wa(508,u+56|0,G|0);D=B;B=0;if(D&1){D=Rb()|0;ta=Q;xa=D;vva(H);Qb(xa|0)}k[u+128>>2]=0;k[u+132>>2]=-1;k[u>>2]=27468;k[H>>2]=27488;B=0;va(448,G|0);D=B;B=0;do if(D&1){T=Rb()|0;ya=Q;za=T}else{k[G>>2]=27560;T=u+36|0;k[T>>2]=0;k[T+4>>2]=0;k[T+8>>2]=0;k[T+12>>2]=0;k[u+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,G|0,f|0);V=B;B=0;if(V&1){V=Rb()|0;F=Q;Yua(f);Yua(T);Ava(G);ya=F;za=V;break}Yua(f);B=0;V=Ia(40,u|0,140942,23)|0;F=B;B=0;d:do if(!(F&1)?(B=0,Xa(239,V|0,0)|0,ia=B,B=0,!(ia&1)):0){ia=Ab(20)|0;B=0;eb(502,v|0,140006,66);S=B;B=0;do if(!(S&1)){B=0;eb(502,w|0,141780,17);ka=B;B=0;if(ka&1){ka=Rb()|0;ja=Q;Yua(v);Aa=ka;Ba=ja;break}B=0;wa(510,x|0,G|0);ja=B;B=0;if(ja&1){ja=Rb()|0;Ca=1;Da=Q;Ea=ja}else{B=0;ua(163,ia|0,v|0,w|0,1565,x|0);ja=B;B=0;if(ja&1)Fa=1;else{B=0;eb(503,ia|0,1240,229);B=0;Fa=0}ja=Rb()|0;ka=Q;Yua(x);Ca=Fa;Da=ka;Ea=ja}Yua(w);Yua(v);if(Ca){Aa=Ea;Ba=Da}else{Ga=Da;Ha=Ea;break d}}else{ja=Rb()|0;Aa=ja;Ba=Q}while(0);zb(ia|0);Ga=Ba;Ha=Aa}else K=76;while(0);if((K|0)==76){V=Rb()|0;Ga=Q;Ha=V}k[u>>2]=27468;k[H>>2]=27488;k[G>>2]=27560;Yua(T);Ava(G);vva(H);ca=Ga;da=Ha;Qb(da|0)}while(0);ta=ya;xa=za;vva(H);Qb(xa|0)}}else J=g}else J=0;while(0);xa=k[j>>2]|0;if(xa)Tqa(xa);k[j>>2]=0;if(!z){k[b>>2]=J;k[c>>2]=A;r=e;return}Tqa(z);k[b>>2]=J;k[c>>2]=A;r=e;return}function Uka(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0;f=r;r=r+1424|0;g=f+1404|0;h=f+1376|0;j=f+1360|0;l=f+1356|0;m=f+1340|0;n=f+1324|0;o=f+1176|0;p=f+1392|0;q=f+1380|0;s=f+1364|0;t=f+1040|0;u=f+1344|0;v=f+1328|0;w=f+1312|0;x=f+888|0;y=f+1024|0;z=f+740|0;A=f+728|0;C=f+752|0;D=f+308|0;E=f+296|0;F=f+144|0;G=f+592|0;H=f+132|0;I=f+120|0;J=f+108|0;K=f+456|0;L=f+96|0;M=f+84|0;N=f+72|0;O=f+320|0;P=f+60|0;R=f+48|0;S=f+36|0;T=f+160|0;U=f+24|0;V=f+12|0;W=f;k[n>>2]=0;a:do if(!(vY()|0)){X=a+24|0;dta(k[X>>2]|0,0,0)|0;b:do if(ata(h,4,1,k[X>>2]|0)|0){while(1){Y=k[h>>2]|0;if((Y+-3|0)>>>0>77){Z=Y;_=4;break}$=Rqa(Y+1|0)|0;i[$+Y>>0]=0;if(!(ata($,Y,1,k[X>>2]|0)|0))break b;if(Mta($,140083,3)|0){aa=$;_=30;break}if(!(Ita($,e)|0))k[n>>2]=(k[n>>2]|0)+1;if((ata(j,4,1,k[X>>2]|0)|0)!=1){_=57;break}dta(k[X>>2]|0,k[j>>2]|0,1)|0;Tqa($);if(!(ata(h,4,1,k[X>>2]|0)|0))break b}if((_|0)==4){$=o+56|0;Y=o+4|0;k[o>>2]=27524;k[$>>2]=27544;B=0;wa(508,o+56|0,Y|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ca=Q;da=ba;vva($);Qb(da|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[$>>2]=27488;B=0;va(448,Y|0);ba=B;B=0;do if(ba&1){ea=Rb()|0;fa=Q;ga=ea}else{k[Y>>2]=27560;ea=o+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[o+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,Y|0,g|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;Yua(g);Yua(ea);Ava(Y);fa=ia;ga=ha;break}Yua(g);B=0;ha=Ia(40,o|0,139946,59)|0;ia=B;B=0;c:do if((!(ia&1)?(B=0,ja=Xa(242,ha|0,Z|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,Xa(239,ja|0,0)|0,ja=B,B=0,!(ja&1)):0){ja=Ab(20)|0;B=0;eb(502,p|0,140006,66);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,q|0,141798,21);la=B;B=0;if(la&1){la=Rb()|0;ma=Q;Yua(p);na=ma;oa=la;break}B=0;wa(510,s|0,Y|0);la=B;B=0;if(la&1){la=Rb()|0;pa=Q;qa=la;ra=1}else{B=0;ua(163,ja|0,p|0,q|0,2180,s|0);la=B;B=0;if(la&1)sa=1;else{B=0;eb(503,ja|0,1240,229);B=0;sa=0}la=Rb()|0;ma=Q;Yua(s);pa=ma;qa=la;ra=sa}Yua(q);Yua(p);if(ra){na=pa;oa=qa}else{ta=pa;xa=qa;break c}}else{la=Rb()|0;na=Q;oa=la}while(0);zb(ja|0);ta=na;xa=oa}else _=20;while(0);if((_|0)==20){ha=Rb()|0;ta=Q;xa=ha}k[o>>2]=27468;k[$>>2]=27488;k[Y>>2]=27560;Yua(ea);Ava(Y);vva($);ya=ta;za=xa;Qb(za|0)}while(0);ca=fa;da=ga;vva($);Qb(da|0)}else if((_|0)==30){Y=t+56|0;ba=t+4|0;k[t>>2]=27524;k[Y>>2]=27544;B=0;wa(508,t+56|0,ba|0);ha=B;B=0;if(ha&1){ha=Rb()|0;Aa=Q;Ba=ha;vva(Y);Qb(Ba|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Y>>2]=27488;B=0;va(448,ba|0);ha=B;B=0;do if(ha&1){ia=Rb()|0;Ca=Q;Da=ia}else{k[ba>>2]=27560;ia=t+36|0;k[ia>>2]=0;k[ia+4>>2]=0;k[ia+8>>2]=0;k[ia+12>>2]=0;k[t+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ba|0,g|0);ka=B;B=0;if(ka&1){ka=Rb()|0;la=Q;Yua(g);Yua(ia);Ava(ba);Ca=la;Da=ka;break}Yua(g);B=0;ka=Ia(40,t|0,140087,67)|0;la=B;B=0;d:do if((!(la&1)?(ma=Lta(aa)|0,B=0,Ea=Ia(40,ka|0,aa|0,ma|0)|0,ma=B,B=0,!(ma&1)):0)?(B=0,Xa(239,Ea|0,0)|0,Ea=B,B=0,!(Ea&1)):0){Ea=Ab(20)|0;B=0;eb(502,u|0,140006,66);ma=B;B=0;do if(!(ma&1)){B=0;eb(502,v|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(u);Ha=Ga;Ja=Fa;break}B=0;wa(510,w|0,ba|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ka=1;La=Q;Ma=Fa}else{B=0;ua(163,Ea|0,u|0,v|0,2192,w|0);Fa=B;B=0;if(Fa&1)Na=1;else{B=0;eb(503,Ea|0,1240,229);B=0;Na=0}Fa=Rb()|0;Ga=Q;Yua(w);Ka=Na;La=Ga;Ma=Fa}Yua(v);Yua(u);if(Ka){Ha=La;Ja=Ma}else{Oa=La;Pa=Ma;break d}}else{Fa=Rb()|0;Ha=Q;Ja=Fa}while(0);zb(Ea|0);Oa=Ha;Pa=Ja}else _=46;while(0);if((_|0)==46){ka=Rb()|0;Oa=Q;Pa=ka}k[t>>2]=27468;k[Y>>2]=27488;k[ba>>2]=27560;Yua(ia);Ava(ba);vva(Y);ya=Oa;za=Pa;Qb(za|0)}while(0);Aa=Ca;Ba=Da;vva(Y);Qb(Ba|0)}else if((_|0)==57){ba=x+56|0;ha=x+4|0;k[x>>2]=27524;k[ba>>2]=27544;B=0;wa(508,x+56|0,ha|0);$=B;B=0;if($&1){$=Rb()|0;Qa=Q;Ra=$;vva(ba);Qb(Ra|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[ba>>2]=27488;B=0;va(448,ha|0);$=B;B=0;do if($&1){ka=Rb()|0;Sa=Q;Ta=ka}else{k[ha>>2]=27560;ka=x+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[x+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ha|0,g|0);la=B;B=0;if(la&1){la=Rb()|0;ea=Q;Yua(g);Yua(ka);Ava(ha);Sa=ea;Ta=la;break}Yua(g);B=0;la=Ia(40,x|0,140162,28)|0;ea=B;B=0;e:do if(!(ea&1)?(B=0,Xa(239,la|0,0)|0,ma=B,B=0,!(ma&1)):0){ma=Ab(20)|0;B=0;eb(502,y|0,140006,66);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,z|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(y);Ua=Ga;Va=Fa;break}B=0;wa(510,A|0,ha|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Wa=1;Ya=Q;Za=Fa}else{B=0;ua(163,ma|0,y|0,z|0,2199,A|0);Fa=B;B=0;if(Fa&1)_a=1;else{B=0;eb(503,ma|0,1240,229);B=0;_a=0}Fa=Rb()|0;Ga=Q;Yua(A);Wa=_a;Ya=Ga;Za=Fa}Yua(z);Yua(y);if(Wa){Ua=Ya;Va=Za}else{$a=Ya;ab=Za;break e}}else{Fa=Rb()|0;Ua=Q;Va=Fa}while(0);zb(ma|0);$a=Ua;ab=Va}else _=72;while(0);if((_|0)==72){la=Rb()|0;$a=Q;ab=la}k[x>>2]=27468;k[ba>>2]=27488;k[ha>>2]=27560;Yua(ka);Ava(ha);vva(ba);ya=$a;za=ab;Qb(za|0)}while(0);Qa=Sa;Ra=Ta;vva(ba);Qb(Ra|0)}}while(0);ha=k[n>>2]|0;if(!ha){bb=0;cb=0;db=0}else{$=Rqa(ha>>>0>268435455?-1:ha<<4)|0;Y=ha>>>0>1073741823?-1:ha<<2;ha=Rqa(Y)|0;bb=ha;cb=$;db=Rqa(Y)|0}dta(k[X>>2]|0,0,0)|0;if(ata(h,4,1,k[X>>2]|0)|0){Y=db;$=0;while(1){ha=k[h>>2]|0;if((ha+-3|0)>>>0>77){fb=ha;_=86;break}la=Rqa(ha+1|0)|0;i[la+ha>>0]=0;if(!(ata(la,ha,1,k[X>>2]|0)|0)){gb=la;_=111;break}if(Mta(la,140083,3)|0){hb=la;_=113;break}if(!(Ita(la,e)|0)){dta(k[X>>2]|0,4,1)|0;if((ata(l,4,1,k[X>>2]|0)|0)!=1){_=139;break}ha=k[l>>2]|0;if((ha+-5|0)>>>0<3?(ata(m,4,1,k[X>>2]|0)|0)!=1:0){_=164;break}k[bb+($<<2)>>2]=ha;k[Y+($<<2)>>2]=k[m>>2];Vsa(k[X>>2]|0,cb+($<<4)|0)|0;if(((k[l>>2]|0)+-5|0)>>>0<3)dta(k[X>>2]|0,-4,1)|0;dta(k[X>>2]|0,-4,1)|0;dta(k[X>>2]|0,-4,1)|0;ib=$+1|0}else ib=$;if((ata(j,4,1,k[X>>2]|0)|0)!=1){_=191;break}dta(k[X>>2]|0,k[j>>2]|0,1)|0;Tqa(la);if(!(ata(h,4,1,k[X>>2]|0)|0)){jb=bb;kb=cb;lb=db;break a}else $=ib}if((_|0)==86){$=C+56|0;X=C+4|0;k[C>>2]=27524;k[$>>2]=27544;B=0;wa(508,C+56|0,X|0);Y=B;B=0;if(Y&1){Y=Rb()|0;mb=Q;nb=Y;vva($);Qb(nb|0)}k[C+128>>2]=0;k[C+132>>2]=-1;k[C>>2]=27468;k[$>>2]=27488;B=0;va(448,X|0);Y=B;B=0;do if(Y&1){la=Rb()|0;ob=Q;pb=la}else{k[X>>2]=27560;la=C+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[C+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,X|0,g|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ea=Q;Yua(g);Yua(la);Ava(X);ob=ea;pb=ha;break}Yua(g);B=0;ha=Ia(40,C|0,139946,59)|0;ea=B;B=0;f:do if((!(ea&1)?(B=0,ia=Xa(242,ha|0,fb|0)|0,ja=B,B=0,!(ja&1)):0)?(B=0,Xa(239,ia|0,0)|0,ia=B,B=0,!(ia&1)):0){ia=Ab(20)|0;B=0;eb(502,D|0,140006,66);ja=B;B=0;do if(!(ja&1)){B=0;eb(502,E|0,141798,21);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;Fa=Q;Yua(D);qb=Fa;rb=Ea;break}B=0;wa(510,F|0,X|0);Ea=B;B=0;if(Ea&1){Ea=Rb()|0;sb=Q;tb=1;ub=Ea}else{B=0;ua(163,ia|0,D|0,E|0,2223,F|0);Ea=B;B=0;if(Ea&1)vb=1;else{B=0;eb(503,ia|0,1240,229);B=0;vb=0}Ea=Rb()|0;Fa=Q;Yua(F);sb=Fa;tb=vb;ub=Ea}Yua(E);Yua(D);if(tb){qb=sb;rb=ub}else{wb=sb;xb=ub;break f}}else{Ea=Rb()|0;qb=Q;rb=Ea}while(0);zb(ia|0);wb=qb;xb=rb}else _=102;while(0);if((_|0)==102){ha=Rb()|0;wb=Q;xb=ha}k[C>>2]=27468;k[$>>2]=27488;k[X>>2]=27560;Yua(la);Ava(X);vva($);ya=wb;za=xb;Qb(za|0)}while(0);mb=ob;nb=pb;vva($);Qb(nb|0)}else if((_|0)==111){Tqa(gb);jb=bb;kb=cb;lb=db;break}else if((_|0)==113){X=G+56|0;Y=G+4|0;k[G>>2]=27524;k[X>>2]=27544;B=0;wa(508,G+56|0,Y|0);ha=B;B=0;if(ha&1){ha=Rb()|0;yb=Q;Bb=ha;vva(X);Qb(Bb|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[X>>2]=27488;B=0;va(448,Y|0);ha=B;B=0;do if(ha&1){ea=Rb()|0;Cb=Q;Db=ea}else{k[Y>>2]=27560;ea=G+36|0;k[ea>>2]=0;k[ea+4>>2]=0;k[ea+8>>2]=0;k[ea+12>>2]=0;k[G+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,Y|0,g|0);ba=B;B=0;if(ba&1){ba=Rb()|0;ja=Q;Yua(g);Yua(ea);Ava(Y);Cb=ja;Db=ba;break}Yua(g);B=0;ba=Ia(40,G|0,140087,67)|0;ja=B;B=0;g:do if((!(ja&1)?(ka=Lta(hb)|0,B=0,Ea=Ia(40,ba|0,hb|0,ka|0)|0,ka=B,B=0,!(ka&1)):0)?(B=0,Xa(239,Ea|0,0)|0,Ea=B,B=0,!(Ea&1)):0){Ea=Ab(20)|0;B=0;eb(502,H|0,140006,66);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,I|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(H);Eb=Ga;Fb=Fa;break}B=0;wa(510,J|0,Y|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Gb=1;Hb=Q;Ib=Fa}else{B=0;ua(163,Ea|0,H|0,I|0,2237,J|0);Fa=B;B=0;if(Fa&1)Jb=1;else{B=0;eb(503,Ea|0,1240,229);B=0;Jb=0}Fa=Rb()|0;Ga=Q;Yua(J);Gb=Jb;Hb=Ga;Ib=Fa}Yua(I);Yua(H);if(Gb){Eb=Hb;Fb=Ib}else{Kb=Hb;Lb=Ib;break g}}else{Fa=Rb()|0;Eb=Q;Fb=Fa}while(0);zb(Ea|0);Kb=Eb;Lb=Fb}else _=129;while(0);if((_|0)==129){ba=Rb()|0;Kb=Q;Lb=ba}k[G>>2]=27468;k[X>>2]=27488;k[Y>>2]=27560;Yua(ea);Ava(Y);vva(X);ya=Kb;za=Lb;Qb(za|0)}while(0);yb=Cb;Bb=Db;vva(X);Qb(Bb|0)}else if((_|0)==139){Y=K+56|0;ha=K+4|0;k[K>>2]=27524;k[Y>>2]=27544;B=0;wa(508,K+56|0,ha|0);$=B;B=0;if($&1){$=Rb()|0;Mb=Q;Nb=$;vva(Y);Qb(Nb|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[Y>>2]=27488;B=0;va(448,ha|0);$=B;B=0;do if($&1){ba=Rb()|0;Ob=Q;Pb=ba}else{k[ha>>2]=27560;ba=K+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[K+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,ha|0,g|0);ja=B;B=0;if(ja&1){ja=Rb()|0;la=Q;Yua(g);Yua(ba);Ava(ha);Ob=la;Pb=ja;break}Yua(g);B=0;ja=Ia(40,K|0,141437,26)|0;la=B;B=0;h:do if(!(la&1)?(B=0,Xa(239,ja|0,0)|0,ka=B,B=0,!(ka&1)):0){ka=Ab(20)|0;B=0;eb(502,L|0,140006,66);ia=B;B=0;do if(!(ia&1)){B=0;eb(502,M|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(L);Sb=Ga;Tb=Fa;break}B=0;wa(510,N|0,ha|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ub=1;Vb=Q;Wb=Fa}else{B=0;ua(163,ka|0,L|0,M|0,2244,N|0);Fa=B;B=0;if(Fa&1)Xb=1;else{B=0;eb(503,ka|0,1240,229);B=0;Xb=0}Fa=Rb()|0;Ga=Q;Yua(N);Ub=Xb;Vb=Ga;Wb=Fa}Yua(M);Yua(L);if(Ub){Sb=Vb;Tb=Wb}else{Yb=Vb;Zb=Wb;break h}}else{Fa=Rb()|0;Sb=Q;Tb=Fa}while(0);zb(ka|0);Yb=Sb;Zb=Tb}else _=154;while(0);if((_|0)==154){ja=Rb()|0;Yb=Q;Zb=ja}k[K>>2]=27468;k[Y>>2]=27488;k[ha>>2]=27560;Yua(ba);Ava(ha);vva(Y);ya=Yb;za=Zb;Qb(za|0)}while(0);Mb=Ob;Nb=Pb;vva(Y);Qb(Nb|0)}else if((_|0)==164){ha=O+56|0;$=O+4|0;k[O>>2]=27524;k[ha>>2]=27544;B=0;wa(508,O+56|0,$|0);X=B;B=0;if(X&1){X=Rb()|0;_b=Q;$b=X;vva(ha);Qb($b|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[ha>>2]=27488;B=0;va(448,$|0);X=B;B=0;do if(X&1){ja=Rb()|0;ac=Q;bc=ja}else{k[$>>2]=27560;ja=O+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[O+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,$|0,g|0);la=B;B=0;if(la&1){la=Rb()|0;ea=Q;Yua(g);Yua(ja);Ava($);ac=ea;bc=la;break}Yua(g);B=0;la=Ia(40,O|0,141464,26)|0;ea=B;B=0;i:do if(!(ea&1)?(B=0,Xa(239,la|0,0)|0,ia=B,B=0,!(ia&1)):0){ia=Ab(20)|0;B=0;eb(502,P|0,140006,66);Ea=B;B=0;do if(!(Ea&1)){B=0;eb(502,R|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(P);cc=Ga;dc=Fa;break}B=0;wa(510,S|0,$|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;ec=1;fc=Q;gc=Fa}else{B=0;ua(163,ia|0,P|0,R|0,2248,S|0);Fa=B;B=0;if(Fa&1)hc=1;else{B=0;eb(503,ia|0,1240,229);B=0;hc=0}Fa=Rb()|0;Ga=Q;Yua(S);ec=hc;fc=Ga;gc=Fa}Yua(R);Yua(P);if(ec){cc=fc;dc=gc}else{ic=fc;jc=gc;break i}}else{Fa=Rb()|0;cc=Q;dc=Fa}while(0);zb(ia|0);ic=cc;jc=dc}else _=179;while(0);if((_|0)==179){la=Rb()|0;ic=Q;jc=la}k[O>>2]=27468;k[ha>>2]=27488;k[$>>2]=27560;Yua(ja);Ava($);vva(ha);ya=ic;za=jc;Qb(za|0)}while(0);_b=ac;$b=bc;vva(ha);Qb($b|0)}else if((_|0)==191){$=T+56|0;X=T+4|0;k[T>>2]=27524;k[$>>2]=27544;B=0;wa(508,T+56|0,X|0);Y=B;B=0;if(Y&1){Y=Rb()|0;kc=Q;lc=Y;vva($);Qb(lc|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[$>>2]=27488;B=0;va(448,X|0);Y=B;B=0;do if(Y&1){la=Rb()|0;mc=Q;nc=la}else{k[X>>2]=27560;la=T+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[T+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,X|0,g|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ba=Q;Yua(g);Yua(la);Ava(X);mc=ba;nc=ea;break}Yua(g);B=0;ea=Ia(40,T|0,140162,28)|0;ba=B;B=0;j:do if(!(ba&1)?(B=0,Xa(239,ea|0,0)|0,Ea=B,B=0,!(Ea&1)):0){Ea=Ab(20)|0;B=0;eb(502,U|0,140006,66);ka=B;B=0;do if(!(ka&1)){B=0;eb(502,V|0,141798,21);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;Ga=Q;Yua(U);oc=Ga;pc=Fa;break}B=0;wa(510,W|0,X|0);Fa=B;B=0;if(Fa&1){Fa=Rb()|0;qc=1;rc=Q;sc=Fa}else{B=0;ua(163,Ea|0,U|0,V|0,2264,W|0);Fa=B;B=0;if(Fa&1)tc=1;else{B=0;eb(503,Ea|0,1240,229);B=0;tc=0}Fa=Rb()|0;Ga=Q;Yua(W);qc=tc;rc=Ga;sc=Fa}Yua(V);Yua(U);if(qc){oc=rc;pc=sc}else{uc=rc;vc=sc;break j}}else{Fa=Rb()|0;oc=Q;pc=Fa}while(0);zb(Ea|0);uc=oc;vc=pc}else _=206;while(0);if((_|0)==206){ea=Rb()|0;uc=Q;vc=ea}k[T>>2]=27468;k[$>>2]=27488;k[X>>2]=27560;Yua(la);Ava(X);vva($);ya=uc;za=vc;Qb(za|0)}while(0);kc=mc;lc=nc;vva($);Qb(lc|0)}}else{jb=bb;kb=cb;lb=db}}else{jb=0;kb=0;lb=0}while(0);uY()|0;k[b>>2]=jb;k[d>>2]=k[n>>2];if(c){k[c>>2]=lb;r=f;return kb|0}if(!lb){r=f;return kb|0}Tqa(lb);r=f;return kb|0}function Vka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;e=r;r=r+384|0;f=e+360|0;g=e+356|0;h=e+352|0;i=e+348|0;j=e+200|0;l=e+336|0;m=e+48|0;n=e+36|0;o=e+64|0;p=e+24|0;q=e+12|0;s=e;k[i>>2]=0;t=vY()|0;u=Uka(a,i,0,g,d)|0;v=k[g>>2]|0;a:do if(v){g=Rqa(v>>>0>1073741823?-1:v<<2)|0;if((v|0)>0){w=k[i>>2]|0;x=a+24|0;if(!t)y=0;else{z=0;while(1){uY()|0;k[g+(z<<2)>>2]=k[h>>2];z=z+1|0;if((z|0)>=(v|0)){A=g;break a}}}while(1){if((k[w+(y<<2)>>2]|0)!=2)break;eta(k[x>>2]|0,u+(y<<4)|0)|0;if((ata(h,4,1,k[x>>2]|0)|0)!=1){C=32;break}uY()|0;k[g+(y<<2)>>2]=k[h>>2];y=y+1|0;if((y|0)>=(v|0)){A=g;break a}}if((C|0)==32){x=o+56|0;w=o+4|0;k[o>>2]=27524;k[x>>2]=27544;B=0;wa(508,o+56|0,w|0);z=B;B=0;if(z&1){z=Rb()|0;D=Q;E=z;vva(x);Qb(E|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[x>>2]=27488;B=0;va(448,w|0);z=B;B=0;do if(z&1){F=Rb()|0;G=Q;H=F}else{k[w>>2]=27560;F=o+36|0;k[F>>2]=0;k[F+4>>2]=0;k[F+8>>2]=0;k[F+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,w|0,f|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;Yua(f);Yua(F);Ava(w);G=J;H=I;break}Yua(f);B=0;I=Ia(40,o|0,140862,23)|0;J=B;B=0;b:do if(!(J&1)?(B=0,Xa(239,I|0,0)|0,K=B,B=0,!(K&1)):0){K=Ab(20)|0;B=0;eb(502,p|0,140006,66);L=B;B=0;do if(!(L&1)){B=0;eb(502,q|0,141780,17);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(p);O=M;P=N;break}B=0;wa(510,s|0,w|0);N=B;B=0;if(N&1){N=Rb()|0;R=1;S=Q;T=N}else{B=0;ua(163,K|0,p|0,q|0,1619,s|0);N=B;B=0;if(N&1)U=1;else{B=0;eb(503,K|0,1240,229);B=0;U=0}N=Rb()|0;M=Q;Yua(s);R=U;S=M;T=N}Yua(q);Yua(p);if(R){O=T;P=S}else{V=S;W=T;break b}}else{N=Rb()|0;O=N;P=Q}while(0);zb(K|0);V=P;W=O}else C=47;while(0);if((C|0)==47){I=Rb()|0;V=Q;W=I}k[o>>2]=27468;k[x>>2]=27488;k[w>>2]=27560;Yua(F);Ava(w);vva(x);X=V;Y=W;Qb(Y|0)}while(0);D=G;E=H;vva(x);Qb(E|0)}w=j+56|0;z=j+4|0;k[j>>2]=27524;k[w>>2]=27544;B=0;wa(508,j+56|0,z|0);I=B;B=0;if(I&1){I=Rb()|0;Z=Q;_=I;vva(w);Qb(_|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[w>>2]=27488;B=0;va(448,z|0);I=B;B=0;do if(I&1){J=Rb()|0;$=Q;aa=J}else{k[z>>2]=27560;J=j+36|0;k[J>>2]=0;k[J+4>>2]=0;k[J+8>>2]=0;k[J+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,z|0,f|0);L=B;B=0;if(L&1){L=Rb()|0;N=Q;Yua(f);Yua(J);Ava(z);$=N;aa=L;break}Yua(f);B=0;L=Ia(40,j|0,141066,26)|0;N=B;B=0;c:do if(((!(N&1)?(M=Lta(d)|0,B=0,ba=Ia(40,L|0,d|0,M|0)|0,M=B,B=0,!(M&1)):0)?(B=0,M=Ia(40,ba|0,141051,1)|0,ba=B,B=0,!(ba&1)):0)?(B=0,Xa(239,M|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,l|0,140006,66);ba=B;B=0;do if(!(ba&1)){B=0;eb(502,m|0,141780,17);ca=B;B=0;if(ca&1){ca=Rb()|0;da=Q;Yua(l);ea=ca;fa=da;break}B=0;wa(510,n|0,z|0);da=B;B=0;if(da&1){da=Rb()|0;ga=Q;ha=da;ia=1}else{B=0;ua(163,M|0,l|0,m|0,1614,n|0);da=B;B=0;if(da&1)ja=1;else{B=0;eb(503,M|0,1240,229);B=0;ja=0}da=Rb()|0;ca=Q;Yua(n);ga=ca;ha=da;ia=ja}Yua(m);Yua(l);if(ia){ea=ha;fa=ga}else{ka=ha;la=ga;break c}}else{da=Rb()|0;ea=da;fa=Q}while(0);zb(M|0);ka=ea;la=fa}else C=24;while(0);if((C|0)==24){L=Rb()|0;ka=L;la=Q}k[j>>2]=27468;k[w>>2]=27488;k[z>>2]=27560;Yua(J);Ava(z);vva(w);X=la;Y=ka;Qb(Y|0)}while(0);Z=$;_=aa;vva(w);Qb(_|0)}else A=g}else A=0;while(0);if(u)Tqa(u);u=k[i>>2]|0;if(!u){k[b>>2]=A;k[c>>2]=v;r=e;return}Tqa(u);k[b>>2]=A;k[c>>2]=v;r=e;return}function Wka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;e=r;r=r+384|0;f=e+368|0;g=e+364|0;h=e;i=e+360|0;j=e+224|0;l=e+208|0;m=e+56|0;n=e+44|0;o=e+72|0;q=e+32|0;s=e+20|0;t=e+8|0;k[i>>2]=0;u=vY()|0;v=Uka(a,i,0,g,d)|0;w=k[g>>2]|0;a:do if(w){g=Rqa(w>>>0>536870911?-1:w<<3)|0;if((w|0)>0){x=k[i>>2]|0;y=a+24|0;if(!u)z=0;else{A=0;while(1){uY()|0;p[g+(A<<3)>>3]=+p[h>>3];A=A+1|0;if((A|0)>=(w|0)){C=g;break a}}}while(1){if((k[x+(z<<2)>>2]|0)!=3)break;eta(k[y>>2]|0,v+(z<<4)|0)|0;if((ata(h,8,1,k[y>>2]|0)|0)!=1){D=32;break}uY()|0;p[g+(z<<3)>>3]=+p[h>>3];z=z+1|0;if((z|0)>=(w|0)){C=g;break a}}if((D|0)==32){y=o+56|0;x=o+4|0;k[o>>2]=27524;k[y>>2]=27544;B=0;wa(508,o+56|0,x|0);A=B;B=0;if(A&1){A=Rb()|0;E=Q;F=A;vva(y);Qb(F|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[y>>2]=27488;B=0;va(448,x|0);A=B;B=0;do if(A&1){G=Rb()|0;H=Q;I=G}else{k[x>>2]=27560;G=o+36|0;k[G>>2]=0;k[G+4>>2]=0;k[G+8>>2]=0;k[G+12>>2]=0;k[o+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,x|0,f|0);J=B;B=0;if(J&1){J=Rb()|0;K=Q;Yua(f);Yua(G);Ava(x);H=K;I=J;break}Yua(f);B=0;J=Ia(40,o|0,140886,22)|0;K=B;B=0;b:do if(!(K&1)?(B=0,Xa(239,J|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,q|0,140006,66);M=B;B=0;do if(!(M&1)){B=0;eb(502,s|0,141780,17);N=B;B=0;if(N&1){N=Rb()|0;O=Q;Yua(q);P=N;R=O;break}B=0;wa(510,t|0,x|0);O=B;B=0;if(O&1){O=Rb()|0;S=1;T=Q;U=O}else{B=0;ua(163,L|0,q|0,s|0,1672,t|0);O=B;B=0;if(O&1)V=1;else{B=0;eb(503,L|0,1240,229);B=0;V=0}O=Rb()|0;N=Q;Yua(t);S=V;T=N;U=O}Yua(s);Yua(q);if(S){P=U;R=T}else{W=T;X=U;break b}}else{O=Rb()|0;P=O;R=Q}while(0);zb(L|0);W=R;X=P}else D=47;while(0);if((D|0)==47){J=Rb()|0;W=Q;X=J}k[o>>2]=27468;k[y>>2]=27488;k[x>>2]=27560;Yua(G);Ava(x);vva(y);Y=W;Z=X;Qb(Z|0)}while(0);E=H;F=I;vva(y);Qb(F|0)}x=j+56|0;A=j+4|0;k[j>>2]=27524;k[x>>2]=27544;B=0;wa(508,j+56|0,A|0);J=B;B=0;if(J&1){J=Rb()|0;_=Q;$=J;vva(x);Qb($|0)}k[j+128>>2]=0;k[j+132>>2]=-1;k[j>>2]=27468;k[x>>2]=27488;B=0;va(448,A|0);J=B;B=0;do if(J&1){K=Rb()|0;aa=Q;ba=K}else{k[A>>2]=27560;K=j+36|0;k[K>>2]=0;k[K+4>>2]=0;k[K+8>>2]=0;k[K+12>>2]=0;k[j+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,A|0,f|0);M=B;B=0;if(M&1){M=Rb()|0;O=Q;Yua(f);Yua(K);Ava(A);aa=O;ba=M;break}Yua(f);B=0;M=Ia(40,j|0,141820,24)|0;O=B;B=0;c:do if(((!(O&1)?(N=Lta(d)|0,B=0,ca=Ia(40,M|0,d|0,N|0)|0,N=B,B=0,!(N&1)):0)?(B=0,N=Ia(40,ca|0,141051,1)|0,ca=B,B=0,!(ca&1)):0)?(B=0,Xa(239,N|0,0)|0,N=B,B=0,!(N&1)):0){N=Ab(20)|0;B=0;eb(502,l|0,140006,66);ca=B;B=0;do if(!(ca&1)){B=0;eb(502,m|0,141780,17);da=B;B=0;if(da&1){da=Rb()|0;ea=Q;Yua(l);fa=da;ga=ea;break}B=0;wa(510,n|0,A|0);ea=B;B=0;if(ea&1){ea=Rb()|0;ha=Q;ia=ea;ja=1}else{B=0;ua(163,N|0,l|0,m|0,1667,n|0);ea=B;B=0;if(ea&1)ka=1;else{B=0;eb(503,N|0,1240,229);B=0;ka=0}ea=Rb()|0;da=Q;Yua(n);ha=da;ia=ea;ja=ka}Yua(m);Yua(l);if(ja){fa=ia;ga=ha}else{la=ia;ma=ha;break c}}else{ea=Rb()|0;fa=ea;ga=Q}while(0);zb(N|0);la=fa;ma=ga}else D=24;while(0);if((D|0)==24){M=Rb()|0;la=M;ma=Q}k[j>>2]=27468;k[x>>2]=27488;k[A>>2]=27560;Yua(K);Ava(A);vva(x);Y=ma;Z=la;Qb(Z|0)}while(0);_=aa;$=ba;vva(x);Qb($|0)}else C=g}else C=0;while(0);if(v)Tqa(v);v=k[i>>2]|0;if(!v){k[b>>2]=C;k[c>>2]=w;r=e;return}Tqa(v);k[b>>2]=C;k[c>>2]=w;r=e;return}function Xka(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,fb=0;g=r;r=r+736|0;h=g+712|0;i=g+708|0;j=g+704|0;l=g+688|0;m=g+672|0;n=g+536|0;o=g+692|0;p=g+676|0;q=g+520|0;s=g+384|0;t=g+236|0;u=g+224|0;v=g+72|0;w=g+248|0;x=g+60|0;y=g+48|0;z=g+36|0;A=g+88|0;C=g+24|0;D=g+12|0;E=g;k[m>>2]=0;F=vY()|0;G=Uka(a,m,0,i,f)|0;H=k[i>>2]|0;a:do if(H){i=H>>>0>1073741823?-1:H<<2;I=Rqa(i)|0;J=Rqa(i)|0;K=J;L=Rqa(i)|0;i=L;if((H|0)>0){M=(F|0)==0;N=k[m>>2]|0;O=a+24|0;P=0;while(1){if(M){if(((k[N+(P<<2)>>2]|0)+-5|0)>>>0>=3){R=6;break}eta(k[O>>2]|0,G+(P<<4)|0)|0;if((ata(j,4,1,k[O>>2]|0)|0)!=1){R=32;break}uY()|0;if((ata(l,4,1,k[O>>2]|0)|0)!=1){R=56;break}}else uY()|0;uY()|0;S=k[j>>2]|0;T=k[l>>2]|0;U=ma(T,S)|0;if(!U){V=S;W=T;X=0}else{Y=Rqa(U>>>0>536870911?-1:U<<3)|0;if(M?(U=ma(S<<3,T)|0,(ata(Y,U,1,k[O>>2]|0)|0)!=1):0){R=84;break}uY()|0;U=ma(k[l>>2]|0,k[j>>2]|0)|0;T=Rqa(U>>>0>536870911?-1:U<<3)|0;if((U|0)>0)TEa(T|0,Y|0,((U|0)>1?U:1)<<3|0)|0;Tqa(Y);V=k[j>>2]|0;W=k[l>>2]|0;X=T}k[J+(P<<2)>>2]=V;k[I+(P<<2)>>2]=X;k[L+(P<<2)>>2]=W;P=P+1|0;if((P|0)>=(H|0)){Z=I;_=K;$=i;break a}}if((R|0)==6){P=n+56|0;L=n+4|0;k[n>>2]=27524;k[P>>2]=27544;B=0;wa(508,n+56|0,L|0);J=B;B=0;if(J&1){J=Rb()|0;aa=Q;ba=J;vva(P);Qb(ba|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[P>>2]=27488;B=0;va(448,L|0);J=B;B=0;do if(J&1){O=Rb()|0;ca=Q;da=O}else{k[L>>2]=27560;O=n+36|0;k[O>>2]=0;k[O+4>>2]=0;k[O+8>>2]=0;k[O+12>>2]=0;k[n+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,L|0,h|0);M=B;B=0;if(M&1){M=Rb()|0;N=Q;Yua(h);Yua(O);Ava(L);ca=N;da=M;break}Yua(h);B=0;M=Ia(40,n|0,141103,55)|0;N=B;B=0;b:do if(((!(N&1)?(T=Lta(f)|0,B=0,Y=Ia(40,M|0,f|0,T|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,Y|0,141051,1)|0,Y=B,B=0,!(Y&1)):0)?(B=0,Xa(239,T|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,o|0,140006,66);Y=B;B=0;do if(!(Y&1)){B=0;eb(502,p|0,141780,17);U=B;B=0;if(U&1){U=Rb()|0;S=Q;Yua(o);ea=S;fa=U;break}B=0;wa(510,q|0,L|0);U=B;B=0;if(U&1){U=Rb()|0;ga=Q;ha=U;ia=1}else{B=0;ua(163,T|0,o|0,p|0,1726,q|0);U=B;B=0;if(U&1)ja=1;else{B=0;eb(503,T|0,1240,229);B=0;ja=0}U=Rb()|0;S=Q;Yua(q);ga=S;ha=U;ia=ja}Yua(p);Yua(o);if(ia){ea=ga;fa=ha}else{ka=ga;la=ha;break b}}else{U=Rb()|0;ea=Q;fa=U}while(0);zb(T|0);ka=ea;la=fa}else R=23;while(0);if((R|0)==23){M=Rb()|0;ka=Q;la=M}k[n>>2]=27468;k[P>>2]=27488;k[L>>2]=27560;Yua(O);Ava(L);vva(P);na=ka;oa=la;Qb(oa|0)}while(0);aa=ca;ba=da;vva(P);Qb(ba|0)}else if((R|0)==32){L=s+56|0;J=s+4|0;k[s>>2]=27524;k[L>>2]=27544;B=0;wa(508,s+56|0,J|0);M=B;B=0;if(M&1){M=Rb()|0;pa=Q;qa=M;vva(L);Qb(qa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[L>>2]=27488;B=0;va(448,J|0);M=B;B=0;do if(M&1){N=Rb()|0;ra=Q;sa=N}else{k[J>>2]=27560;N=s+36|0;k[N>>2]=0;k[N+4>>2]=0;k[N+8>>2]=0;k[N+12>>2]=0;k[s+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,J|0,h|0);Y=B;B=0;if(Y&1){Y=Rb()|0;U=Q;Yua(h);Yua(N);Ava(J);ra=U;sa=Y;break}Yua(h);B=0;Y=Ia(40,s|0,141172,41)|0;U=B;B=0;c:do if(!(U&1)?(B=0,Xa(239,Y|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,t|0,140006,66);ta=B;B=0;do if(!(ta&1)){B=0;eb(502,u|0,141780,17);xa=B;B=0;if(xa&1){xa=Rb()|0;ya=Q;Yua(t);za=xa;Aa=ya;break}B=0;wa(510,v|0,J|0);ya=B;B=0;if(ya&1){ya=Rb()|0;Ba=1;Ca=Q;Da=ya}else{B=0;ua(163,S|0,t|0,u|0,1731,v|0);ya=B;B=0;if(ya&1)Ea=1;else{B=0;eb(503,S|0,1240,229);B=0;Ea=0}ya=Rb()|0;xa=Q;Yua(v);Ba=Ea;Ca=xa;Da=ya}Yua(u);Yua(t);if(Ba){za=Da;Aa=Ca}else{Fa=Ca;Ga=Da;break c}}else{ya=Rb()|0;za=ya;Aa=Q}while(0);zb(S|0);Fa=Aa;Ga=za}else R=47;while(0);if((R|0)==47){Y=Rb()|0;Fa=Q;Ga=Y}k[s>>2]=27468;k[L>>2]=27488;k[J>>2]=27560;Yua(N);Ava(J);vva(L);na=Fa;oa=Ga;Qb(oa|0)}while(0);pa=ra;qa=sa;vva(L);Qb(qa|0)}else if((R|0)==56){J=w+56|0;M=w+4|0;k[w>>2]=27524;k[J>>2]=27544;B=0;wa(508,w+56|0,M|0);P=B;B=0;if(P&1){P=Rb()|0;Ha=Q;Ja=P;vva(J);Qb(Ja|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[J>>2]=27488;B=0;va(448,M|0);P=B;B=0;do if(P&1){Y=Rb()|0;Ka=Q;La=Y}else{k[M>>2]=27560;Y=w+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[w+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,M|0,h|0);U=B;B=0;if(U&1){U=Rb()|0;O=Q;Yua(h);Yua(Y);Ava(M);Ka=O;La=U;break}Yua(h);B=0;U=Ia(40,w|0,141214,44)|0;O=B;B=0;d:do if(!(O&1)?(B=0,Xa(239,U|0,0)|0,ta=B,B=0,!(ta&1)):0){ta=Ab(20)|0;B=0;eb(502,x|0,140006,66);T=B;B=0;do if(!(T&1)){B=0;eb(502,y|0,141780,17);ya=B;B=0;if(ya&1){ya=Rb()|0;xa=Q;Yua(x);Ma=ya;Na=xa;break}B=0;wa(510,z|0,M|0);xa=B;B=0;if(xa&1){xa=Rb()|0;Oa=1;Pa=Q;Qa=xa}else{B=0;ua(163,ta|0,x|0,y|0,1736,z|0);xa=B;B=0;if(xa&1)Ra=1;else{B=0;eb(503,ta|0,1240,229);B=0;Ra=0}xa=Rb()|0;ya=Q;Yua(z);Oa=Ra;Pa=ya;Qa=xa}Yua(y);Yua(x);if(Oa){Ma=Qa;Na=Pa}else{Sa=Pa;Ta=Qa;break d}}else{xa=Rb()|0;Ma=xa;Na=Q}while(0);zb(ta|0);Sa=Na;Ta=Ma}else R=71;while(0);if((R|0)==71){U=Rb()|0;Sa=Q;Ta=U}k[w>>2]=27468;k[J>>2]=27488;k[M>>2]=27560;Yua(Y);Ava(M);vva(J);na=Sa;oa=Ta;Qb(oa|0)}while(0);Ha=Ka;Ja=La;vva(J);Qb(Ja|0)}else if((R|0)==84){M=A+56|0;P=A+4|0;k[A>>2]=27524;k[M>>2]=27544;B=0;wa(508,A+56|0,P|0);L=B;B=0;if(L&1){L=Rb()|0;Ua=Q;Va=L;vva(M);Qb(Va|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[M>>2]=27488;B=0;va(448,P|0);L=B;B=0;do if(L&1){U=Rb()|0;Wa=Q;Ya=U}else{k[P>>2]=27560;U=A+36|0;k[U>>2]=0;k[U+4>>2]=0;k[U+8>>2]=0;k[U+12>>2]=0;k[A+52>>2]=16;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;B=0;wa(509,P|0,h|0);O=B;B=0;if(O&1){O=Rb()|0;N=Q;Yua(h);Yua(U);Ava(P);Wa=N;Ya=O;break}Yua(h);B=0;O=Ia(40,A|0,141259,22)|0;N=B;B=0;e:do if(!(N&1)?(B=0,Xa(239,O|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,C|0,140006,66);S=B;B=0;do if(!(S&1)){B=0;eb(502,D|0,141780,17);xa=B;B=0;if(xa&1){xa=Rb()|0;ya=Q;Yua(C);Za=xa;_a=ya;break}B=0;wa(510,E|0,P|0);ya=B;B=0;if(ya&1){ya=Rb()|0;$a=1;ab=Q;bb=ya}else{B=0;ua(163,T|0,C|0,D|0,1747,E|0);ya=B;B=0;if(ya&1)cb=1;else{B=0;eb(503,T|0,1240,229);B=0;cb=0}ya=Rb()|0;xa=Q;Yua(E);$a=cb;ab=xa;bb=ya}Yua(D);Yua(C);if($a){Za=bb;_a=ab}else{db=ab;fb=bb;break e}}else{ya=Rb()|0;Za=ya;_a=Q}while(0);zb(T|0);db=_a;fb=Za}else R=99;while(0);if((R|0)==99){O=Rb()|0;db=Q;fb=O}k[A>>2]=27468;k[M>>2]=27488;k[P>>2]=27560;Yua(U);Ava(P);vva(M);na=db;oa=fb;Qb(oa|0)}while(0);Ua=Wa;Va=Ya;vva(M);Qb(Va|0)}}else{Z=I;_=K;$=i}}else{Z=0;_=0;$=0}while(0);if(G)Tqa(G);G=k[m>>2]|0;if(G)Tqa(G);k[m>>2]=0;k[b>>2]=Z;if(!c){if(_)Tqa(_)}else k[c>>2]=_;if(d){k[d>>2]=$;k[e>>2]=H;r=g;return}if(!$){k[e>>2]=H;r=g;return}Tqa($);k[e>>2]=H;r=g;return}function Yka(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;f=r;r=r+224|0;g=f+204|0;h=f;i=f+200|0;j=f+196|0;l=f+192|0;m=f+188|0;n=f+184|0;o=f+48|0;q=f+32|0;s=f+20|0;t=f+8|0;p[h>>3]=e;u=k[a+12>>2]|0;v=k[a+16>>2]|0;a:do if(u>>>0<v>>>0){w=u;while(1){x=k[w>>2]|0;w=w+4|0;if(!(Ita(k[x+4>>2]|0,c)|0)){y=x;break}if(w>>>0>=v>>>0)break a}if((th(b)|0)<=0){r=f;return}w=y+24|0;x=y+8|0;z=y+12|0;A=y+20|0;C=y+16|0;D=0;do{E=qh(b,D)|0;Qp(E,k[w>>2]|0,a,k[x>>2]|0,k[z>>2]|0,k[A>>2]|0,d,k[C>>2]|0);D=D+1|0}while((D|0)<(th(b)|0));r=f;return}while(0);k[l>>2]=0;Oka(a,i,j,c)|0;if((k[i>>2]|0)==7){Qka(a,l,m,n,c);i=(th(b)|0)>0;y=k[l>>2]|0;if(i)if(!y){i=0;do{l=qh(b,i)|0;rd[k[(k[l>>2]|0)+48>>2]&511](l,d,h,736);i=i+1|0}while((i|0)<(th(b)|0))}else{i=0;do{h=qh(b,i)|0;Qp(h,y,a,k[m>>2]|0,k[n>>2]|0,k[j>>2]|0,d,7);i=i+1|0}while((i|0)<(th(b)|0));F=35}else F=35;if((F|0)==35?(y|0)!=0:0)Tqa(y);r=f;return}f=o+56|0;y=o+4|0;k[o>>2]=27524;k[f>>2]=27544;B=0;wa(508,o+56|0,y|0);F=B;B=0;if(F&1){F=Rb()|0;G=Q;H=F;vva(f);Qb(H|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[f>>2]=27488;B=0;va(448,y|0);F=B;B=0;do if(F&1){b=Rb()|0;I=Q;J=b}else{k[y>>2]=27560;b=o+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[o+52>>2]=16;k[g>>2]=0;k[g+4>>2]=0;k[g+8>>2]=0;B=0;wa(509,y|0,g|0);i=B;B=0;if(i&1){i=Rb()|0;d=Q;Yua(g);Yua(b);Ava(y);I=d;J=i;break}Yua(g);i=Lta(c)|0;B=0;d=Ia(40,o|0,c|0,i|0)|0;i=B;B=0;if((!(i&1)?(B=0,i=Ia(40,d|0,141845,22)|0,d=B,B=0,!(d&1)):0)?(B=0,Xa(239,i|0,0)|0,i=B,B=0,!(i&1)):0){i=Ab(20)|0;B=0;eb(502,q|0,140006,66);d=B;B=0;do if(!(d&1)){B=0;eb(502,s|0,141868,16);j=B;B=0;if(j&1){j=Rb()|0;n=Q;Yua(q);K=n;L=j;break}B=0;wa(510,t|0,y|0);j=B;B=0;if(j&1){j=Rb()|0;M=Q;N=j;O=1}else{B=0;ua(163,i|0,q|0,s|0,1924,t|0);j=B;B=0;if(j&1)P=1;else{B=0;eb(503,i|0,1240,229);B=0;P=0}j=Rb()|0;n=Q;Yua(t);M=n;N=j;O=P}Yua(s);Yua(q);if(O){K=M;L=N}else{R=M;S=N;k[o>>2]=27468;k[f>>2]=27488;k[y>>2]=27560;Yua(b);Ava(y);vva(f);Qb(S|0)}}else{j=Rb()|0;K=Q;L=j}while(0);zb(i|0);R=K;S=L;k[o>>2]=27468;k[f>>2]=27488;k[y>>2]=27560;Yua(b);Ava(y);vva(f);Qb(S|0)}d=Rb()|0;R=Q;S=d;k[o>>2]=27468;k[f>>2]=27488;k[y>>2]=27560;Yua(b);Ava(y);vva(f);Qb(S|0)}while(0);G=I;H=J;vva(f);Qb(H|0)}function Zka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0;e=r;r=r+752|0;f=e+728|0;g=e+724|0;h=e+720|0;j=e+740|0;l=e+716|0;m=e;n=e+712|0;o=e+708|0;q=e+680|0;s=e+544|0;t=e+696|0;u=e+684|0;v=e+528|0;w=e+392|0;x=e+376|0;y=e+92|0;z=e+80|0;A=e+240|0;C=e+68|0;D=e+56|0;E=e+44|0;F=e+104|0;G=e+32|0;H=e+20|0;I=e+8|0;J=k[a+12>>2]|0;K=k[a+16>>2]|0;a:do if(J>>>0<K>>>0){L=J;while(1){M=k[L>>2]|0;L=L+4|0;if(!(Ita(k[M+4>>2]|0,c)|0)){N=M;break}if(L>>>0>=K>>>0)break a}if((th(b)|0)<=0){r=e;return}L=N+24|0;M=N+8|0;O=N+12|0;P=N+20|0;R=N+16|0;S=0;do{T=qh(b,S)|0;Qp(T,k[L>>2]|0,a,k[M>>2]|0,k[O>>2]|0,k[P>>2]|0,d,k[R>>2]|0);S=S+1|0}while((S|0)<(th(b)|0));r=e;return}while(0);k[n>>2]=0;Oka(a,g,h,c)|0;N=k[g>>2]|0;b:do switch(N|0){case 1:{Kka(a,j,c);if((th(b)|0)>0){g=(i[j>>0]|0)!=0;K=0;do{J=qh(b,K)|0;nd[k[(k[J>>2]|0)+40>>2]&1023](J,g,d);K=K+1|0}while((K|0)<(th(b)|0))}break}case 2:{Bka(a,l,c);if((th(b)|0)>0){K=k[l>>2]|0;g=0;do{J=qh(b,g)|0;nd[k[(k[J>>2]|0)+36>>2]&1023](J,K,d);g=g+1|0}while((g|0)<(th(b)|0))}break}case 3:{Pka(a,m,c);if((th(b)|0)>0){U=+p[m>>3];g=0;do{K=qh(b,g)|0;Nc[k[(k[K>>2]|0)+32>>2]&31](K,U,d);g=g+1|0}while((g|0)<(th(b)|0))}break}case 5:{Qka(a,n,o,q,c);g=k[n>>2]|0;if(g){if((th(b)|0)>0)V=0;else{W=g;X=129;break b}while(1){K=qh(b,V)|0;Qp(K,g,a,k[o>>2]|0,k[q>>2]|0,k[h>>2]|0,d,5);V=V+1|0;if((V|0)>=(th(b)|0)){Y=g;X=128;break b}}}g=s+56|0;K=s+4|0;k[s>>2]=27524;k[g>>2]=27544;B=0;wa(508,s+56|0,K|0);J=B;B=0;if(J&1){J=Rb()|0;Z=Q;_=J;vva(g);Qb(_|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[g>>2]=27488;B=0;va(448,K|0);J=B;B=0;do if(J&1){S=Rb()|0;$=Q;aa=S}else{k[K>>2]=27560;S=s+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[s+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,K|0,f|0);R=B;B=0;if(R&1){R=Rb()|0;P=Q;Yua(f);Yua(S);Ava(K);$=P;aa=R;break}Yua(f);B=0;R=Ia(40,s|0,141051,1)|0;P=B;B=0;c:do if(((!(P&1)?(O=Lta(c)|0,B=0,M=Ia(40,R|0,c|0,O|0)|0,O=B,B=0,!(O&1)):0)?(B=0,O=Ia(40,M|0,141885,26)|0,M=B,B=0,!(M&1)):0)?(B=0,Xa(239,O|0,0)|0,O=B,B=0,!(O&1)):0){O=Ab(20)|0;B=0;eb(502,t|0,140006,66);M=B;B=0;do if(!(M&1)){B=0;eb(502,u|0,141868,16);L=B;B=0;if(L&1){L=Rb()|0;T=Q;Yua(t);ba=T;ca=L;break}B=0;wa(510,v|0,K|0);L=B;B=0;if(L&1){L=Rb()|0;da=Q;ea=L;fa=1}else{B=0;ua(163,O|0,t|0,u|0,1992,v|0);L=B;B=0;if(L&1)ga=1;else{B=0;eb(503,O|0,1240,229);B=0;ga=0}L=Rb()|0;T=Q;Yua(v);da=T;ea=L;fa=ga}Yua(u);Yua(t);if(fa){ba=da;ca=ea}else{ha=da;ia=ea;break c}}else{L=Rb()|0;ba=Q;ca=L}while(0);zb(O|0);ha=ba;ia=ca}else X=36;while(0);if((X|0)==36){R=Rb()|0;ha=Q;ia=R}k[s>>2]=27468;k[g>>2]=27488;k[K>>2]=27560;Yua(S);Ava(K);vva(g);ja=ha;ka=ia;Qb(ka|0)}while(0);Z=$;_=aa;vva(g);Qb(_|0);break}case 6:{Qka(a,n,o,q,c);K=k[n>>2]|0;if(K){if((th(b)|0)>0)la=0;else{W=K;X=129;break b}while(1){J=qh(b,la)|0;Qp(J,K,a,k[o>>2]|0,k[q>>2]|0,k[h>>2]|0,d,6);la=la+1|0;if((la|0)>=(th(b)|0)){Y=K;X=128;break b}}}K=w+56|0;g=w+4|0;k[w>>2]=27524;k[K>>2]=27544;B=0;wa(508,w+56|0,g|0);J=B;B=0;if(J&1){J=Rb()|0;ma=Q;na=J;vva(K);Qb(na|0)}k[w+128>>2]=0;k[w+132>>2]=-1;k[w>>2]=27468;k[K>>2]=27488;B=0;va(448,g|0);J=B;B=0;do if(J&1){R=Rb()|0;oa=Q;pa=R}else{k[g>>2]=27560;R=w+36|0;k[R>>2]=0;k[R+4>>2]=0;k[R+8>>2]=0;k[R+12>>2]=0;k[w+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,g|0,f|0);P=B;B=0;if(P&1){P=Rb()|0;M=Q;Yua(f);Yua(R);Ava(g);oa=M;pa=P;break}Yua(f);B=0;P=Ia(40,w|0,141051,1)|0;M=B;B=0;d:do if(((!(M&1)?(L=Lta(c)|0,B=0,T=Ia(40,P|0,c|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,T|0,141885,26)|0,T=B,B=0,!(T&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,x|0,140006,66);T=B;B=0;do if(!(T&1)){B=0;eb(502,y|0,141868,16);qa=B;B=0;if(qa&1){qa=Rb()|0;ra=Q;Yua(x);sa=qa;ta=ra;break}B=0;wa(510,z|0,g|0);ra=B;B=0;if(ra&1){ra=Rb()|0;xa=1;ya=Q;za=ra}else{B=0;ua(163,L|0,x|0,y|0,2e3,z|0);ra=B;B=0;if(ra&1)Aa=1;else{B=0;eb(503,L|0,1240,229);B=0;Aa=0}ra=Rb()|0;qa=Q;Yua(z);xa=Aa;ya=qa;za=ra}Yua(y);Yua(x);if(xa){sa=za;ta=ya}else{Ba=ya;Ca=za;break d}}else{ra=Rb()|0;sa=ra;ta=Q}while(0);zb(L|0);Ba=ta;Ca=sa}else X=64;while(0);if((X|0)==64){P=Rb()|0;Ba=Q;Ca=P}k[w>>2]=27468;k[K>>2]=27488;k[g>>2]=27560;Yua(R);Ava(g);vva(K);ja=Ba;ka=Ca;Qb(ka|0)}while(0);ma=oa;na=pa;vva(K);Qb(na|0);break}case 7:{Qka(a,n,o,q,c);g=k[n>>2]|0;if(g){if((th(b)|0)>0)Da=0;else{W=g;X=129;break b}while(1){J=qh(b,Da)|0;Qp(J,g,a,k[o>>2]|0,k[q>>2]|0,k[h>>2]|0,d,7);Da=Da+1|0;if((Da|0)>=(th(b)|0)){Y=g;X=128;break b}}}g=A+56|0;K=A+4|0;k[A>>2]=27524;k[g>>2]=27544;B=0;wa(508,A+56|0,K|0);J=B;B=0;if(J&1){J=Rb()|0;Ea=Q;Fa=J;vva(g);Qb(Fa|0)}k[A+128>>2]=0;k[A+132>>2]=-1;k[A>>2]=27468;k[g>>2]=27488;B=0;va(448,K|0);J=B;B=0;do if(J&1){P=Rb()|0;Ga=Q;Ha=P}else{k[K>>2]=27560;P=A+36|0;k[P>>2]=0;k[P+4>>2]=0;k[P+8>>2]=0;k[P+12>>2]=0;k[A+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,K|0,f|0);M=B;B=0;if(M&1){M=Rb()|0;S=Q;Yua(f);Yua(P);Ava(K);Ga=S;Ha=M;break}Yua(f);B=0;M=Ia(40,A|0,141051,1)|0;S=B;B=0;e:do if(((!(S&1)?(T=Lta(c)|0,B=0,O=Ia(40,M|0,c|0,T|0)|0,T=B,B=0,!(T&1)):0)?(B=0,T=Ia(40,O|0,141885,26)|0,O=B,B=0,!(O&1)):0)?(B=0,Xa(239,T|0,0)|0,T=B,B=0,!(T&1)):0){T=Ab(20)|0;B=0;eb(502,C|0,140006,66);O=B;B=0;do if(!(O&1)){B=0;eb(502,D|0,141868,16);ra=B;B=0;if(ra&1){ra=Rb()|0;qa=Q;Yua(C);Ja=ra;Ka=qa;break}B=0;wa(510,E|0,K|0);qa=B;B=0;if(qa&1){qa=Rb()|0;La=1;Ma=Q;Na=qa}else{B=0;ua(163,T|0,C|0,D|0,2008,E|0);qa=B;B=0;if(qa&1)Oa=1;else{B=0;eb(503,T|0,1240,229);B=0;Oa=0}qa=Rb()|0;ra=Q;Yua(E);La=Oa;Ma=ra;Na=qa}Yua(D);Yua(C);if(La){Ja=Na;Ka=Ma}else{Pa=Ma;Qa=Na;break e}}else{qa=Rb()|0;Ja=qa;Ka=Q}while(0);zb(T|0);Pa=Ka;Qa=Ja}else X=92;while(0);if((X|0)==92){M=Rb()|0;Pa=Q;Qa=M}k[A>>2]=27468;k[g>>2]=27488;k[K>>2]=27560;Yua(P);Ava(K);vva(g);ja=Pa;ka=Qa;Qb(ka|0)}while(0);Ea=Ga;Fa=Ha;vva(g);Qb(Fa|0);break}default:{K=F+56|0;J=F+4|0;k[F>>2]=27524;k[K>>2]=27544;B=0;wa(508,F+56|0,J|0);M=B;B=0;if(M&1){M=Rb()|0;Ra=Q;Sa=M;vva(K);Qb(Sa|0)}k[F+128>>2]=0;k[F+132>>2]=-1;k[F>>2]=27468;k[K>>2]=27488;B=0;va(448,J|0);M=B;B=0;do if(M&1){S=Rb()|0;Ta=Q;Ua=S}else{k[J>>2]=27560;S=F+36|0;k[S>>2]=0;k[S+4>>2]=0;k[S+8>>2]=0;k[S+12>>2]=0;k[F+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,J|0,f|0);R=B;B=0;if(R&1){R=Rb()|0;O=Q;Yua(f);Yua(S);Ava(J);Ta=O;Ua=R;break}Yua(f);B=0;R=Ia(40,F|0,141912,10)|0;O=B;B=0;f:do if(((((!(O&1)?(B=0,L=Xa(242,R|0,N|0)|0,qa=B,B=0,!(qa&1)):0)?(B=0,qa=Ia(40,L|0,141923,47)|0,L=B,B=0,!(L&1)):0)?(L=Lta(c)|0,B=0,ra=Ia(40,qa|0,c|0,L|0)|0,L=B,B=0,!(L&1)):0)?(B=0,L=Ia(40,ra|0,141971,2)|0,ra=B,B=0,!(ra&1)):0)?(B=0,Xa(239,L|0,0)|0,L=B,B=0,!(L&1)):0){L=Ab(20)|0;B=0;eb(502,G|0,140006,66);ra=B;B=0;do if(!(ra&1)){B=0;eb(502,H|0,141868,16);qa=B;B=0;if(qa&1){qa=Rb()|0;Va=Q;Yua(G);Wa=qa;Ya=Va;break}B=0;wa(510,I|0,J|0);Va=B;B=0;if(Va&1){Va=Rb()|0;Za=1;_a=Q;$a=Va}else{B=0;ua(163,L|0,G|0,H|0,2015,I|0);Va=B;B=0;if(Va&1)ab=1;else{B=0;eb(503,L|0,1240,229);B=0;ab=0}Va=Rb()|0;qa=Q;Yua(I);Za=ab;_a=qa;$a=Va}Yua(H);Yua(G);if(Za){Wa=$a;Ya=_a}else{bb=_a;cb=$a;break f}}else{Va=Rb()|0;Wa=Va;Ya=Q}while(0);zb(L|0);bb=Ya;cb=Wa}else X=120;while(0);if((X|0)==120){R=Rb()|0;bb=Q;cb=R}k[F>>2]=27468;k[K>>2]=27488;k[J>>2]=27560;Yua(S);Ava(J);vva(K);ja=bb;ka=cb;Qb(ka|0)}while(0);Ra=Ta;Sa=Ua;vva(K);Qb(Sa|0)}}while(0);if((X|0)==128?(Y|0)!=0:0){W=Y;X=129}if((X|0)==129)Tqa(W);r=e;return}function _ka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){Oqa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0<e>>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=Qqa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;TEa(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;Sqa(f);return}function $ka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;c=a+4|0;d=k[a>>2]|0;e=((k[c>>2]|0)-d>>2)+1|0;if(e>>>0>1073741823){Oqa(a);f=k[a>>2]|0}else f=d;d=a+8|0;g=(k[d>>2]|0)-f|0;if(g>>2>>>0<536870911){h=g>>1;g=h>>>0<e>>>0?e:h;h=k[c>>2]|0;e=h-f>>2;if(!g){i=0;j=0;l=e;m=h}else{n=g;o=h;p=e;q=6}}else{e=k[c>>2]|0;n=1073741823;o=e;p=e-f>>2;q=6}if((q|0)==6){i=n;j=Qqa(n<<2)|0;l=p;m=o}o=j+(l<<2)|0;k[o>>2]=k[b>>2];b=m-f|0;m=o+(0-(b>>2)<<2)|0;TEa(m|0,f|0,b|0)|0;k[a>>2]=m;k[c>>2]=o+4;k[d>>2]=j+(i<<2);if(!f)return;Sqa(f);return}function ala(a,b,c){a=a|0;b=b|0;c=c|0;k[a+4>>2]=b;k[a+8>>2]=c;cp(b,a+12|0,111);return}function bla(a){a=a|0;return}function cla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0;d=r;r=r+208|0;e=d+152|0;f=d+16|0;g=d+8|0;h=d;i=d+188|0;j=d+176|0;l=d+164|0;switch(k[a+12>>2]|0){case 1:{dla(a,b,c);r=d;return}case 3:{ela(a,b,c);r=d;return}case 4:{dla(a,h,c);m=a+4|0;Cp(k[m>>2]|0,e,c,666);Cp(k[m>>2]|0,f,c,653);n=+uq(k[m>>2]|0,+p[f>>3]);dO(k[(k[m>>2]|0)+36>>2]|0,g,112);o=+p[h>>3]/+ja(+((+p[e>>3]-n)/+p[g>>3]));p[b>>3]=o;r=d;return}default:{d=f+56|0;b=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,b|0);g=B;B=0;if(g&1){g=Rb()|0;q=Q;s=g;vva(d);Qb(s|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,b|0);g=B;B=0;do if(g&1){h=Rb()|0;t=Q;u=h}else{k[b>>2]=27560;h=f+36|0;k[h>>2]=0;k[h+4>>2]=0;k[h+8>>2]=0;k[h+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,b|0,e|0);m=B;B=0;if(m&1){m=Rb()|0;c=Q;Yua(e);Yua(h);Ava(b);t=c;u=m;break}Yua(e);B=0;m=Ia(40,f|0,145010,13)|0;c=B;B=0;if(!(c&1)?(B=0,Xa(239,m|0,0)|0,m=B,B=0,!(m&1)):0){m=Ab(20)|0;B=0;eb(502,i|0,141974,73);c=B;B=0;do if(!(c&1)){B=0;eb(502,j|0,142048,18);a=B;B=0;if(a&1){a=Rb()|0;v=Q;Yua(i);w=v;x=a;break}B=0;wa(510,l|0,b|0);a=B;B=0;if(a&1){a=Rb()|0;y=Q;z=a;A=1}else{B=0;ua(163,m|0,i|0,j|0,55,l|0);a=B;B=0;if(a&1)C=1;else{B=0;eb(503,m|0,1240,229);B=0;C=0}a=Rb()|0;v=Q;Yua(l);y=v;z=a;A=C}Yua(j);Yua(i);if(A){w=y;x=z}else{D=y;E=z;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(h);Ava(b);vva(d);Qb(E|0)}}else{a=Rb()|0;w=Q;x=a}while(0);zb(m|0);D=w;E=x;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(h);Ava(b);vva(d);Qb(E|0)}c=Rb()|0;D=Q;E=c;k[f>>2]=27468;k[d>>2]=27488;k[b>>2]=27560;Yua(h);Ava(b);vva(d);Qb(E|0)}while(0);q=t;s=u;vva(d);Qb(s|0)}}}function dla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0;d=r;r=r+272|0;e=d+248|0;f=d+64|0;g=d+56|0;h=d+48|0;i=d+40|0;j=d+32|0;l=d+16|0;m=d+8|0;n=d;o=d+112|0;q=d+96|0;s=d+84|0;t=d+72|0;u=a+4|0;Bp(k[u>>2]|0,i,107);Bp(k[u>>2]|0,j,108);Cp(k[u>>2]|0,m,c,353);Cp(k[u>>2]|0,l,c,64);Cp(k[u>>2]|0,n,c,999);Cp(k[u>>2]|0,d+24|0,c,105);v=+Dp(k[u>>2]|0,266);w=+Dp(k[u>>2]|0,265);x=+Dp(k[u>>2]|0,65);y=+p[i>>3];z=+p[j>>3]/y;A=1.0/y;y=x*(w*+p[m>>3]+v*(+p[l>>3]-+p[n>>3]));v=y<0.0?0.0:y;switch(k[a+8>>2]|0){case 1:{Cp(k[u>>2]|0,f,c,674);y=+p[f>>3];C=+aa(+(y*y));break}case 2:{Cp(k[u>>2]|0,f,c,674);Cp(k[u>>2]|0,g,c,677);y=+p[f>>3];w=+p[g>>3];C=+aa(+(y*y+w*w));break}case 3:{Cp(k[u>>2]|0,f,c,674);Cp(k[u>>2]|0,g,c,677);Cp(k[u>>2]|0,h,c,679);w=+p[f>>3];y=+p[g>>3];x=+p[h>>3];C=+aa(+(w*w+y*y+x*x));break}default:{h=o+56|0;g=o+4|0;k[o>>2]=27524;k[h>>2]=27544;B=0;wa(508,o+56|0,g|0);f=B;B=0;if(f&1){f=Rb()|0;D=Q;E=f;vva(h);Qb(E|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[h>>2]=27488;B=0;va(448,g|0);f=B;B=0;do if(f&1){c=Rb()|0;F=Q;G=c}else{k[g>>2]=27560;c=o+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[o+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,g|0,e|0);u=B;B=0;if(u&1){u=Rb()|0;a=Q;Yua(e);Yua(c);Ava(g);F=a;G=u;break}Yua(e);B=0;u=Ia(40,o|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,u|0,0)|0,u=B,B=0,!(u&1)):0){u=Ab(20)|0;B=0;eb(502,q|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,s|0,142067,25);n=B;B=0;if(n&1){n=Rb()|0;l=Q;Yua(q);H=l;I=n;break}B=0;wa(510,t|0,g|0);n=B;B=0;if(n&1){n=Rb()|0;J=Q;K=n;L=1}else{B=0;ua(163,u|0,q|0,s|0,111,t|0);n=B;B=0;if(n&1)M=1;else{B=0;eb(503,u|0,1240,229);B=0;M=0}n=Rb()|0;l=Q;Yua(t);J=l;K=n;L=M}Yua(s);Yua(q);if(L){H=J;I=K}else{N=J;O=K;k[o>>2]=27468;k[h>>2]=27488;k[g>>2]=27560;Yua(c);Ava(g);vva(h);Qb(O|0)}}else{n=Rb()|0;H=Q;I=n}while(0);zb(u|0);N=H;O=I;k[o>>2]=27468;k[h>>2]=27488;k[g>>2]=27560;Yua(c);Ava(g);vva(h);Qb(O|0)}a=Rb()|0;N=Q;O=a;k[o>>2]=27468;k[h>>2]=27488;k[g>>2]=27560;Yua(c);Ava(g);vva(h);Qb(O|0)}while(0);D=F;E=G;vva(h);Qb(E|0)}}x=A+-1.0;if(x<0.0&C==0.0){P=0.0;p[b>>3]=P;r=d;return}P=+ba(+v,+z)*+ba(+C,+x);p[b>>3]=P;r=d;return}function ela(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0;d=r;r=r+256|0;e=d+244|0;f=d+240|0;g=d+56|0;h=d+48|0;i=d+40|0;j=d+32|0;l=d+24|0;m=d+16|0;n=d+8|0;o=d;q=d+104|0;s=d+88|0;t=d+76|0;u=d+64|0;v=a+4|0;Bp(k[v>>2]|0,g,108);Bp(k[v>>2]|0,h,110);Cp(k[v>>2]|0,i,c,104);Cp(k[v>>2]|0,l,c,217);cO(k[(k[v>>2]|0)+36>>2]|0,f,116);w=k[v>>2]|0;if((k[f>>2]|0)==1)Cp(w,j,c,126);else Cp(w,j,c,115);if(+p[j>>3]<0.0)p[j>>3]=0.0;switch(k[a+8>>2]|0){case 1:{Cp(k[v>>2]|0,m,c,674);x=+p[m>>3];y=+aa(+(x*x));break}case 2:{Cp(k[v>>2]|0,m,c,674);Cp(k[v>>2]|0,n,c,677);x=+p[m>>3];z=+p[n>>3];y=+aa(+(x*x+z*z));break}case 3:{Cp(k[v>>2]|0,m,c,674);Cp(k[v>>2]|0,n,c,677);Cp(k[v>>2]|0,o,c,679);z=+p[m>>3];x=+p[n>>3];A=+p[o>>3];y=+aa(+(z*z+x*x+A*A));break}default:{o=q+56|0;n=q+4|0;k[q>>2]=27524;k[o>>2]=27544;B=0;wa(508,q+56|0,n|0);m=B;B=0;if(m&1){m=Rb()|0;C=Q;D=m;vva(o);Qb(D|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[o>>2]=27488;B=0;va(448,n|0);m=B;B=0;do if(m&1){c=Rb()|0;E=Q;F=c}else{k[n>>2]=27560;c=q+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[q+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);v=B;B=0;if(v&1){v=Rb()|0;a=Q;Yua(e);Yua(c);Ava(n);E=a;F=v;break}Yua(e);B=0;v=Ia(40,q|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,s|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,t|0,142093,23);w=B;B=0;if(w&1){w=Rb()|0;f=Q;Yua(s);G=f;H=w;break}B=0;wa(510,u|0,n|0);w=B;B=0;if(w&1){w=Rb()|0;I=Q;J=w;K=1}else{B=0;ua(163,v|0,s|0,t|0,171,u|0);w=B;B=0;if(w&1)L=1;else{B=0;eb(503,v|0,1240,229);B=0;L=0}w=Rb()|0;f=Q;Yua(u);I=f;J=w;K=L}Yua(t);Yua(s);if(K){G=I;H=J}else{M=I;N=J;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}}else{w=Rb()|0;G=Q;H=w}while(0);zb(v|0);M=G;N=H;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}a=Rb()|0;M=Q;N=a;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}while(0);C=E;D=F;vva(o);Qb(D|0)}}A=+p[g>>3];if(A==1.0)O=1.0;else{x=A+-1.0;O=+ba(+x,+x)/+ba(+A,+A)}x=+p[h>>3];z=+p[l>>3];P=+ba(+x,+z);R=+p[j>>3];S=P*+ba(+R,+z);P=+p[i>>3];T=y/(S*P);S=T/(O*+ba(+T,+A)+1.0);if(y==0.0|R==0.0){U=0.0;p[b>>3]=U;r=d;return}U=-(x*R/(y*z)*+ba(+S,+((1.0-z)/z))*(S/P-S*(S*(O*A*+ba(+T,+(A+-1.0))))/P));p[b>>3]=U;r=d;return}function fla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0.0,q=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0;d=r;r=r+208|0;e=d+152|0;f=d+16|0;g=d+8|0;h=d;i=d+188|0;j=d+176|0;l=d+164|0;m=a+12|0;switch(k[m>>2]|0){case 1:{gla(a,b,c);r=d;return}case 2:{hla(a,b,c);r=d;return}case 3:{ila(a,b,c);r=d;return}case 4:{gla(a,h,c);n=a+4|0;Cp(k[n>>2]|0,e,c,666);Cp(k[n>>2]|0,f,c,653);o=+uq(k[n>>2]|0,+p[f>>3]);dO(k[(k[n>>2]|0)+36>>2]|0,g,112);q=+p[h>>3]/+ja(+((+p[e>>3]-o)/+p[g>>3]));p[b>>3]=q;r=d;return}case 5:{jla(a,b,c);r=d;return}case 6:{hla(a,h,c);n=a+4|0;Cp(k[n>>2]|0,e,c,666);Cp(k[n>>2]|0,f,c,653);q=+uq(k[n>>2]|0,+p[f>>3]);dO(k[(k[n>>2]|0)+36>>2]|0,g,112);o=+p[h>>3]/+ja(+((+p[e>>3]-q)/+p[g>>3]));p[b>>3]=o;r=d;return}case 7:{kla(a,b,c);r=d;return}case 8:{lla(a,b,c);r=d;return}default:{d=f+56|0;c=f+4|0;k[f>>2]=27524;k[d>>2]=27544;B=0;wa(508,f+56|0,c|0);b=B;B=0;if(b&1){b=Rb()|0;s=Q;t=b;vva(d);Qb(t|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[d>>2]=27488;B=0;va(448,c|0);b=B;B=0;do if(b&1){a=Rb()|0;u=Q;v=a}else{k[c>>2]=27560;a=f+36|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;k[f+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,c|0,e|0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Yua(e);Yua(a);Ava(c);u=h;v=g;break}Yua(e);B=0;g=Ia(40,f|0,142117,13)|0;h=B;B=0;if(((!(h&1)?(B=0,h=Xa(242,g|0,k[m>>2]|0)|0,g=B,B=0,!(g&1)):0)?(B=0,g=Ia(40,h|0,144645,14)|0,h=B,B=0,!(h&1)):0)?(B=0,Xa(239,g|0,0)|0,g=B,B=0,!(g&1)):0){g=Ab(20)|0;B=0;eb(502,i|0,141974,73);h=B;B=0;do if(!(h&1)){B=0;eb(502,j|0,142131,9);n=B;B=0;if(n&1){n=Rb()|0;w=Q;Yua(i);x=w;y=n;break}B=0;wa(510,l|0,c|0);n=B;B=0;if(n&1){n=Rb()|0;z=Q;A=n;C=1}else{B=0;ua(163,g|0,i|0,j|0,250,l|0);n=B;B=0;if(n&1)D=1;else{B=0;eb(503,g|0,1240,229);B=0;D=0}n=Rb()|0;w=Q;Yua(l);z=w;A=n;C=D}Yua(j);Yua(i);if(C){x=z;y=A}else{E=z;F=A;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(d);Qb(F|0)}}else{n=Rb()|0;x=Q;y=n}while(0);zb(g|0);E=x;F=y;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(d);Qb(F|0)}h=Rb()|0;E=Q;F=h;k[f>>2]=27468;k[d>>2]=27488;k[c>>2]=27560;Yua(a);Ava(c);vva(d);Qb(F|0)}while(0);s=u;t=v;vva(d);Qb(t|0)}}}function gla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0.0;d=r;r=r+272|0;e=d+248|0;f=d+64|0;g=d+56|0;h=d+48|0;i=d+40|0;j=d+32|0;l=d+24|0;m=d+16|0;n=d+8|0;o=d;q=d+112|0;s=d+96|0;t=d+84|0;u=d+72|0;v=a+4|0;Bp(k[v>>2]|0,f,107);Bp(k[v>>2]|0,g,108);Cp(k[v>>2]|0,h,c,353);Cp(k[v>>2]|0,i,c,64);Cp(k[v>>2]|0,j,c,999);Cp(k[v>>2]|0,o,c,105);w=+Dp(k[v>>2]|0,266);x=+Dp(k[v>>2]|0,265);y=+Dp(k[v>>2]|0,65);z=+p[f>>3];A=+p[g>>3]/z;C=1.0/z;z=y*(x*+p[h>>3]+w*(+p[i>>3]-+p[j>>3]));w=z<0.0?0.0:z;switch(k[a+8>>2]|0){case 1:{Cp(k[v>>2]|0,l,c,674);z=+p[l>>3];D=+aa(+(z*z));break}case 2:{Cp(k[v>>2]|0,l,c,674);Cp(k[v>>2]|0,m,c,677);z=+p[l>>3];x=+p[m>>3];D=+aa(+(z*z+x*x));break}case 3:{Cp(k[v>>2]|0,l,c,674);Cp(k[v>>2]|0,m,c,677);Cp(k[v>>2]|0,n,c,679);x=+p[l>>3];z=+p[m>>3];y=+p[n>>3];D=+aa(+(x*x+z*z+y*y));break}default:{n=q+56|0;m=q+4|0;k[q>>2]=27524;k[n>>2]=27544;B=0;wa(508,q+56|0,m|0);l=B;B=0;if(l&1){l=Rb()|0;E=Q;F=l;vva(n);Qb(F|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[n>>2]=27488;B=0;va(448,m|0);l=B;B=0;do if(l&1){c=Rb()|0;G=Q;H=c}else{k[m>>2]=27560;c=q+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[q+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,m|0,e|0);v=B;B=0;if(v&1){v=Rb()|0;a=Q;Yua(e);Yua(c);Ava(m);G=a;H=v;break}Yua(e);B=0;v=Ia(40,q|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,s|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,t|0,142141,16);j=B;B=0;if(j&1){j=Rb()|0;i=Q;Yua(s);I=i;J=j;break}B=0;wa(510,u|0,m|0);j=B;B=0;if(j&1){j=Rb()|0;K=Q;L=j;M=1}else{B=0;ua(163,v|0,s|0,t|0,481,u|0);j=B;B=0;if(j&1)N=1;else{B=0;eb(503,v|0,1240,229);B=0;N=0}j=Rb()|0;i=Q;Yua(u);K=i;L=j;M=N}Yua(t);Yua(s);if(M){I=K;J=L}else{O=K;P=L;k[q>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(n);Qb(P|0)}}else{j=Rb()|0;I=Q;J=j}while(0);zb(v|0);O=I;P=J;k[q>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(n);Qb(P|0)}a=Rb()|0;O=Q;P=a;k[q>>2]=27468;k[n>>2]=27488;k[m>>2]=27560;Yua(c);Ava(m);vva(n);Qb(P|0)}while(0);E=G;F=H;vva(n);Qb(F|0)}}y=C+-1.0;if(y<0.0&D==0.0){R=0.0;p[b>>3]=R;r=d;return}C=+p[o>>3];R=C*C*+ba(+w,+A)*+ba(+D,+y);p[b>>3]=R;r=d;return}function hla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0;d=r;r=r+240|0;e=d+216|0;f=d+32|0;g=d+24|0;h=d+16|0;i=d+8|0;j=d;l=d+80|0;m=d+64|0;n=d+52|0;o=d+40|0;q=a+4|0;Cp(k[q>>2]|0,f,c,110);Bp(k[q>>2]|0,g,109);switch(k[a+8>>2]|0){case 1:{Cp(k[q>>2]|0,h,c,674);s=+p[h>>3];t=+aa(+(s*s));break}case 2:{Cp(k[q>>2]|0,h,c,674);Cp(k[q>>2]|0,i,c,677);s=+p[h>>3];u=+p[i>>3];t=+aa(+(s*s+u*u));break}case 3:{Cp(k[q>>2]|0,h,c,674);Cp(k[q>>2]|0,i,c,677);Cp(k[q>>2]|0,j,c,679);u=+p[h>>3];s=+p[i>>3];v=+p[j>>3];t=+aa(+(u*u+s*s+v*v));break}default:{j=l+56|0;i=l+4|0;k[l>>2]=27524;k[j>>2]=27544;B=0;wa(508,l+56|0,i|0);h=B;B=0;if(h&1){h=Rb()|0;w=Q;x=h;vva(j);Qb(x|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[j>>2]=27488;B=0;va(448,i|0);h=B;B=0;do if(h&1){c=Rb()|0;y=Q;z=c}else{k[i>>2]=27560;c=l+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[l+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,i|0,e|0);q=B;B=0;if(q&1){q=Rb()|0;a=Q;Yua(e);Yua(c);Ava(i);y=a;z=q;break}Yua(e);B=0;q=Ia(40,l|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,q|0,0)|0,q=B,B=0,!(q&1)):0){q=Ab(20)|0;B=0;eb(502,m|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,n|0,142158,17);A=B;B=0;if(A&1){A=Rb()|0;C=Q;Yua(m);D=C;E=A;break}B=0;wa(510,o|0,i|0);A=B;B=0;if(A&1){A=Rb()|0;F=Q;G=A;H=1}else{B=0;ua(163,q|0,m|0,n|0,588,o|0);A=B;B=0;if(A&1)I=1;else{B=0;eb(503,q|0,1240,229);B=0;I=0}A=Rb()|0;C=Q;Yua(o);F=C;G=A;H=I}Yua(n);Yua(m);if(H){D=F;E=G}else{J=F;K=G;k[l>>2]=27468;k[j>>2]=27488;k[i>>2]=27560;Yua(c);Ava(i);vva(j);Qb(K|0)}}else{A=Rb()|0;D=Q;E=A}while(0);zb(q|0);J=D;K=E;k[l>>2]=27468;k[j>>2]=27488;k[i>>2]=27560;Yua(c);Ava(i);vva(j);Qb(K|0)}a=Rb()|0;J=Q;K=a;k[l>>2]=27468;k[j>>2]=27488;k[i>>2]=27560;Yua(c);Ava(i);vva(j);Qb(K|0)}while(0);w=y;x=z;vva(j);Qb(x|0)}}v=+p[g>>3];if(t==0.0?1.0/v+-1.0<0.0:0){L=0.0;p[b>>3]=L;r=d;return}L=+ba(+(+p[f>>3]),+(-1.0/v))*+ba(+t,+(1.0/v+-1.0));p[b>>3]=L;r=d;return}function ila(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0;d=r;r=r+256|0;e=d+244|0;f=d+240|0;g=d+56|0;h=d+48|0;i=d+40|0;j=d+32|0;l=d+24|0;m=d+16|0;n=d+8|0;o=d;q=d+104|0;s=d+88|0;t=d+76|0;u=d+64|0;v=a+4|0;Bp(k[v>>2]|0,g,108);Bp(k[v>>2]|0,h,110);Cp(k[v>>2]|0,i,c,104);Cp(k[v>>2]|0,l,c,217);cO(k[(k[v>>2]|0)+36>>2]|0,f,116);w=k[v>>2]|0;if((k[f>>2]|0)==1)Cp(w,j,c,126);else Cp(w,j,c,115);if(+p[j>>3]<0.0)p[j>>3]=0.0;switch(k[a+8>>2]|0){case 1:{Cp(k[v>>2]|0,m,c,674);x=+p[m>>3];y=+aa(+(x*x));break}case 2:{Cp(k[v>>2]|0,m,c,674);Cp(k[v>>2]|0,n,c,677);x=+p[m>>3];z=+p[n>>3];y=+aa(+(x*x+z*z));break}case 3:{Cp(k[v>>2]|0,m,c,674);Cp(k[v>>2]|0,n,c,677);Cp(k[v>>2]|0,o,c,679);z=+p[m>>3];x=+p[n>>3];A=+p[o>>3];y=+aa(+(z*z+x*x+A*A));break}default:{o=q+56|0;n=q+4|0;k[q>>2]=27524;k[o>>2]=27544;B=0;wa(508,q+56|0,n|0);m=B;B=0;if(m&1){m=Rb()|0;C=Q;D=m;vva(o);Qb(D|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[o>>2]=27488;B=0;va(448,n|0);m=B;B=0;do if(m&1){c=Rb()|0;E=Q;F=c}else{k[n>>2]=27560;c=q+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[q+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);v=B;B=0;if(v&1){v=Rb()|0;a=Q;Yua(e);Yua(c);Ava(n);E=a;F=v;break}Yua(e);B=0;v=Ia(40,q|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,v|0,0)|0,v=B,B=0,!(v&1)):0){v=Ab(20)|0;B=0;eb(502,s|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,t|0,142176,14);w=B;B=0;if(w&1){w=Rb()|0;f=Q;Yua(s);G=f;H=w;break}B=0;wa(510,u|0,n|0);w=B;B=0;if(w&1){w=Rb()|0;I=Q;J=w;K=1}else{B=0;ua(163,v|0,s|0,t|0,382,u|0);w=B;B=0;if(w&1)L=1;else{B=0;eb(503,v|0,1240,229);B=0;L=0}w=Rb()|0;f=Q;Yua(u);I=f;J=w;K=L}Yua(t);Yua(s);if(K){G=I;H=J}else{M=I;N=J;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}}else{w=Rb()|0;G=Q;H=w}while(0);zb(v|0);M=G;N=H;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}a=Rb()|0;M=Q;N=a;k[q>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(N|0)}while(0);C=E;D=F;vva(o);Qb(D|0)}}A=+p[g>>3];if(A==1.0)O=1.0;else{x=A+-1.0;O=+ba(+x,+x)/+ba(+A,+A)}x=+p[h>>3];z=+p[l>>3];P=+ba(+x,+z);R=+p[j>>3];S=P*+ba(+R,+z);P=y/(S*+p[i>>3]);if(y==0.0|R==0.0){T=0.0;p[b>>3]=T;r=d;return}T=x*R*+ba(+(P/(O*+ba(+P,+A)+1.0)),+(1.0/z))/y;p[b>>3]=T;r=d;return}function jla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,xa=0.0;d=r;r=r+448|0;e=d+436|0;f=d+80|0;g=d+72|0;h=d+64|0;i=d+56|0;j=d+48|0;l=d+40|0;m=d+32|0;n=d+24|0;o=d+16|0;q=d+8|0;s=d;t=d+288|0;u=d+424|0;v=d+136|0;w=d+124|0;x=d+152|0;y=d+112|0;z=d+100|0;A=d+88|0;C=a+4|0;dO(k[(k[C>>2]|0)+36>>2]|0,h,113);Bp(k[C>>2]|0,f,107);Bp(k[C>>2]|0,g,108);Cp(k[C>>2]|0,i,c,353);Cp(k[C>>2]|0,j,c,64);Cp(k[C>>2]|0,l,c,999);Cp(k[C>>2]|0,q,c,105);Cp(k[C>>2]|0,s,c,114);D=+Dp(k[C>>2]|0,266);E=+Dp(k[C>>2]|0,265);F=+Dp(k[C>>2]|0,65);G=+p[f>>3];H=+p[g>>3]/G;I=1.0/G;G=+p[j>>3];if(G>0.0){p[j>>3]=0.0;J=0.0}else J=G;G=+p[s>>3];do if(G==0.0)K=E*F*+p[i>>3]+D*F*(J-+p[l>>3]);else{if(G>0.0){K=E*F*+p[i>>3]*+p[h>>3];break}s=t+56|0;j=t+4|0;k[t>>2]=27524;k[s>>2]=27544;B=0;wa(508,t+56|0,j|0);g=B;B=0;if(g&1){g=Rb()|0;L=Q;M=g;vva(s);Qb(M|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[s>>2]=27488;B=0;va(448,j|0);g=B;B=0;do if(g&1){f=Rb()|0;N=Q;O=f}else{k[j>>2]=27560;f=t+36|0;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;k[f+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,j|0,e|0);P=B;B=0;if(P&1){P=Rb()|0;R=Q;Yua(e);Yua(f);Ava(j);N=R;O=P;break}Yua(e);B=0;P=Ia(40,t|0,142191,30)|0;R=B;B=0;a:do if(!(R&1)?(B=0,Xa(239,P|0,0)|0,S=B,B=0,!(S&1)):0){S=Ab(20)|0;B=0;eb(502,u|0,141974,73);T=B;B=0;do if(!(T&1)){B=0;eb(502,v|0,142222,19);U=B;B=0;if(U&1){U=Rb()|0;V=Q;Yua(u);W=U;X=V;break}B=0;wa(510,w|0,j|0);V=B;B=0;if(V&1){V=Rb()|0;Y=Q;Z=V;_=1}else{B=0;ua(163,S|0,u|0,v|0,527,w|0);V=B;B=0;if(V&1)$=1;else{B=0;eb(503,S|0,1240,229);B=0;$=0}V=Rb()|0;U=Q;Yua(w);Y=U;Z=V;_=$}Yua(v);Yua(u);if(_){W=Z;X=Y}else{ca=Z;da=Y;break a}}else{V=Rb()|0;W=V;X=Q}while(0);zb(S|0);ca=W;da=X}else ea=22;while(0);if((ea|0)==22){P=Rb()|0;ca=P;da=Q}k[t>>2]=27468;k[s>>2]=27488;k[j>>2]=27560;Yua(f);Ava(j);vva(s);fa=da;ga=ca;Qb(ga|0)}while(0);L=N;M=O;vva(s);Qb(M|0)}while(0);F=K<0.0?0.0:K;switch(k[a+8>>2]|0){case 1:{Cp(k[C>>2]|0,m,c,674);K=+p[m>>3];ha=+aa(+(K*K));break}case 2:{Cp(k[C>>2]|0,m,c,674);Cp(k[C>>2]|0,n,c,677);K=+p[m>>3];E=+p[n>>3];ha=+aa(+(K*K+E*E));break}case 3:{Cp(k[C>>2]|0,m,c,674);Cp(k[C>>2]|0,n,c,677);Cp(k[C>>2]|0,o,c,679);E=+p[m>>3];K=+p[n>>3];G=+p[o>>3];ha=+aa(+(E*E+K*K+G*G));break}default:{o=x+56|0;n=x+4|0;k[x>>2]=27524;k[o>>2]=27544;B=0;wa(508,x+56|0,n|0);m=B;B=0;if(m&1){m=Rb()|0;ia=Q;ja=m;vva(o);Qb(ja|0)}k[x+128>>2]=0;k[x+132>>2]=-1;k[x>>2]=27468;k[o>>2]=27488;B=0;va(448,n|0);m=B;B=0;do if(m&1){c=Rb()|0;ka=Q;la=c}else{k[n>>2]=27560;c=x+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[x+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);C=B;B=0;if(C&1){C=Rb()|0;a=Q;Yua(e);Yua(c);Ava(n);ka=a;la=C;break}Yua(e);B=0;C=Ia(40,x|0,145010,13)|0;a=B;B=0;b:do if(!(a&1)?(B=0,Xa(239,C|0,0)|0,M=B,B=0,!(M&1)):0){M=Ab(20)|0;B=0;eb(502,y|0,141974,73);O=B;B=0;do if(!(O&1)){B=0;eb(502,z|0,142222,19);N=B;B=0;if(N&1){N=Rb()|0;L=Q;Yua(y);ma=N;na=L;break}B=0;wa(510,A|0,n|0);L=B;B=0;if(L&1){L=Rb()|0;oa=1;pa=Q;qa=L}else{B=0;ua(163,M|0,y|0,z|0,547,A|0);L=B;B=0;if(L&1)ra=1;else{B=0;eb(503,M|0,1240,229);B=0;ra=0}L=Rb()|0;N=Q;Yua(A);oa=ra;pa=N;qa=L}Yua(z);Yua(y);if(oa){ma=qa;na=pa}else{sa=pa;ta=qa;break b}}else{L=Rb()|0;ma=L;na=Q}while(0);zb(M|0);sa=na;ta=ma}else ea=49;while(0);if((ea|0)==49){C=Rb()|0;sa=Q;ta=C}k[x>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);fa=sa;ga=ta;Qb(ga|0)}while(0);ia=ka;ja=la;vva(o);Qb(ja|0)}}G=I+-1.0;if(G<0.0&ha==0.0){xa=0.0;p[b>>3]=xa;r=d;return}I=+p[q>>3];xa=I*I*+ba(+F,+H)*+ba(+ha,+G);p[b>>3]=xa;r=d;return}function kla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0,_=0.0;d=r;r=r+288|0;e=d+264|0;f=d+80|0;g=d+72|0;h=d+64|0;i=d+56|0;j=d+48|0;l=d+40|0;m=d+32|0;n=d+24|0;o=d+16|0;q=d+8|0;s=d;t=d+128|0;u=d+112|0;v=d+100|0;w=d+88|0;x=a+4|0;Bp(k[x>>2]|0,f,107);Bp(k[x>>2]|0,g,108);Cp(k[x>>2]|0,h,c,353);Cp(k[x>>2]|0,i,c,64);Cp(k[x>>2]|0,l,c,999);Cp(k[x>>2]|0,j,c,63);Cp(k[x>>2]|0,q,c,105);Cp(k[x>>2]|0,s,c,106);y=+Dp(k[x>>2]|0,266);z=+Dp(k[x>>2]|0,265);A=+Dp(k[x>>2]|0,65);C=+p[f>>3];D=+p[g>>3]/C;E=1.0/C;C=A*(z*+p[h>>3]+y*(+p[i>>3]-+p[l>>3]));F=C<0.0?0.0:C;switch(k[a+8>>2]|0){case 1:{Cp(k[x>>2]|0,m,c,674);C=+p[m>>3];G=+aa(+(C*C));break}case 2:{Cp(k[x>>2]|0,m,c,674);Cp(k[x>>2]|0,n,c,677);C=+p[m>>3];H=+p[n>>3];G=+aa(+(C*C+H*H));break}case 3:{Cp(k[x>>2]|0,m,c,674);Cp(k[x>>2]|0,n,c,677);Cp(k[x>>2]|0,o,c,679);H=+p[m>>3];C=+p[n>>3];I=+p[o>>3];G=+aa(+(H*H+C*C+I*I));break}default:{o=t+56|0;n=t+4|0;k[t>>2]=27524;k[o>>2]=27544;B=0;wa(508,t+56|0,n|0);m=B;B=0;if(m&1){m=Rb()|0;J=Q;K=m;vva(o);Qb(K|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[o>>2]=27488;B=0;va(448,n|0);m=B;B=0;do if(m&1){c=Rb()|0;L=Q;M=c}else{k[n>>2]=27560;c=t+36|0;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;k[c+12>>2]=0;k[t+52>>2]=16;k[e>>2]=0;k[e+4>>2]=0;k[e+8>>2]=0;B=0;wa(509,n|0,e|0);x=B;B=0;if(x&1){x=Rb()|0;a=Q;Yua(e);Yua(c);Ava(n);L=a;M=x;break}Yua(e);B=0;x=Ia(40,t|0,145010,13)|0;a=B;B=0;if(!(a&1)?(B=0,Xa(239,x|0,0)|0,x=B,B=0,!(x&1)):0){x=Ab(20)|0;B=0;eb(502,u|0,141974,73);a=B;B=0;do if(!(a&1)){B=0;eb(502,v|0,142242,16);l=B;B=0;if(l&1){l=Rb()|0;i=Q;Yua(u);N=i;O=l;break}B=0;wa(510,w|0,n|0);l=B;B=0;if(l&1){l=Rb()|0;P=Q;R=l;S=1}else{B=0;ua(163,x|0,u|0,v|0,306,w|0);l=B;B=0;if(l&1)T=1;else{B=0;eb(503,x|0,1240,229);B=0;T=0}l=Rb()|0;i=Q;Yua(w);P=i;R=l;S=T}Yua(v);Yua(u);if(S){N=P;O=R}else{U=P;V=R;k[t>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(V|0)}}else{l=Rb()|0;N=Q;O=l}while(0);zb(x|0);U=N;V=O;k[t>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(V|0)}a=Rb()|0;U=Q;V=a;k[t>>2]=27468;k[o>>2]=27488;k[n>>2]=27560;Yua(c);Ava(n);vva(o);Qb(V|0)}while(0);J=L;K=M;vva(o);Qb(K|0)}}K=G==0.0;I=E+-1.0;if(I<0.0&K)W=0.0;else{E=+p[q>>3];W=E*E*+ba(+F,+D)*+ba(+G,+I)}I=+p[j>>3];if(I<0.0)X=-y/z*I;else X=0.0;if(K){Y=0.0;Z=Y<W;_=Z?Y:W;p[b>>3]=_;r=d;return}I=+p[s>>3];Y=(+p[h>>3]-X)*(A*(y*(I*I)))/G;Z=Y<W;_=Z?Y:W;p[b>>3]=_;r=d;return}function lla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0.0,m=0.0,n=0.0,o=0.0;d=r;r=r+48|0;e=d+32|0;f=d+24|0;g=d+16|0;h=d+8|0;i=d;j=a+4|0;Cp(k[j>>2]|0,g,c,353);Cp(k[j>>2]|0,f,c,64);Cp(k[j>>2]|0,h,c,166);Cp(k[j>>2]|0,i,c,999);Cp(k[j>>2]|0,e,c,105);l=+Dp(k[j>>2]|0,267);m=+Dp(k[j>>2]|0,265);n=+Dp(k[j>>2]|0,65);o=m*n*+p[g>>3]-l*n*(+p[h>>3]-+p[f>>3]+ +p[i>>3]);n=+p[e>>3];p[b>>3]=n*n*(o<0.0?0.0:o);r=d;return}function mla(a){a=a|0;var b=0;k[a>>2]=-9999;k[a+4>>2]=-9999;k[a+8>>2]=-9999;i[a+12>>0]=0;i[a+13>>0]=1;i[a+14>>0]=0;b=a+16|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[b+16>>2]=0;k[b+20>>2]=0;k[b+24>>2]=0;return}function nla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;k[a>>2]=b;i[a+12>>0]=0;if((b|0)<=0)return;d=Rqa(b)|0;k[a+16>>2]=d;d=Rqa(b)|0;k[a+20>>2]=d;d=Rqa(b>>>0>536870911?-1:b<<3)|0;k[a+24>>2]=d;d=b>>>0>1073741823?-1:b<<2;b=Rqa(d)|0;k[a+32>>2]=b;if(!c)k[a+28>>2]=0;else{b=Rqa(d)|0;k[a+28>>2]=b}b=k[a+16>>2]|0;d=k[a+20>>2]|0;e=k[a+24>>2]|0;f=k[a+32>>2]|0;g=k[a+28>>2]|0;if(!g){h=0;do{i[b+h>>0]=1;i[d+h>>0]=0;p[e+(h<<3)>>3]=0.0;k[f+(h<<2)>>2]=-9999;h=h+1|0}while((h|0)<(k[a>>2]|0));return}else{h=0;do{i[b+h>>0]=1;i[d+h>>0]=0;p[e+(h<<3)>>3]=0.0;k[f+(h<<2)>>2]=-9999;k[g+(h<<2)>>2]=k[c+(h<<2)>>2];h=h+1|0}while((h|0)<(k[a>>2]|0));return}}function ola(a){a=a|0;var b=0,c=0;b=a+16|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+20|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+24|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+28|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+32|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+36|0;c=k[b>>2]|0;if(c){Tqa(c);k[b>>2]=0}b=a+40|0;a=k[b>>2]|0;if(!a)return;Tqa(a);k[b>>2]=0;return}function pla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;c=k[b>>2]|0;k[a>>2]=c;d=k[b+4>>2]|0;e=a+4|0;k[e>>2]=d;f=k[b+8>>2]|0;g=a+8|0;k[g>>2]=f;h=k[b+12>>2]|0;i[a+12>>0]=h;i[a+13>>0]=(h&65535)>>>8;i[a+14>>0]=h>>>16;h=(c|0)>0;if(h){j=Rqa(c)|0;k[a+16>>2]=j;l=Rqa(c)|0;k[a+20>>2]=l;m=Rqa(c>>>0>536870911?-1:c<<3)|0;k[a+24>>2]=m;if(!(k[b+28>>2]|0)){k[a+28>>2]=0;n=c>>>0>1073741823?-1:c<<2;o=0}else{q=c>>>0>1073741823?-1:c<<2;r=Rqa(q)|0;k[a+28>>2]=r;n=q;o=r}r=Rqa(n)|0;k[a+32>>2]=r;s=j;t=l;u=m;v=o;w=r}else{r=a+16|0;k[r>>2]=0;k[r+4>>2]=0;k[r+8>>2]=0;k[r+12>>2]=0;k[r+16>>2]=0;s=0;t=0;u=0;v=0;w=0}if((d|0)>0){r=Rqa(d>>>0>1073741823?-1:d<<2)|0;k[a+36>>2]=r}else k[a+36>>2]=0;if((f|0)>0){r=Rqa(f>>>0>1073741823?-1:f<<2)|0;k[a+40>>2]=r}else k[a+40>>2]=0;if(h){TEa(s|0,k[b+16>>2]|0,c|0)|0;TEa(t|0,k[b+20>>2]|0,c|0)|0;t=k[b+24>>2]|0;if(!u)yb(142259,142264,137,142345);if(!t)yb(142353,142264,137,142345);else x=0;do{p[u+(x<<3)>>3]=+p[t+(x<<3)>>3];x=x+1|0}while((x|0)!=(c|0));if(!v){y=c;z=w}else{TEa(v|0,k[b+28>>2]|0,c<<2|0)|0;y=k[a>>2]|0;z=k[a+32>>2]|0}TEa(z|0,k[b+32>>2]|0,y<<2|0)|0;A=k[e>>2]|0}else A=d;if((A|0)>0)TEa(k[a+36>>2]|0,k[b+36>>2]|0,A<<2|0)|0;A=k[g>>2]|0;if((A|0)<=0)return;TEa(k[a+40>>2]|0,k[b+40>>2]|0,A<<2|0)|0;return}function qla(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0;c=r;r=r+192|0;d=c+176|0;e=c+40|0;f=c+24|0;g=c+12|0;h=c;switch(b|0){case 937:{i=k[a>>2]|0;if((i|0)>0){j=k[a+16>>2]|0;m=0;n=0;while(1){o=(l[j+m>>0]|0)+n|0;m=m+1|0;if((m|0)>=(i|0)){p=o;break}else n=o}}else p=0;n=a+4|0;k[n>>2]=p;i=a+36|0;m=k[i>>2]|0;if(!m)q=p;else{Tqa(m);q=k[n>>2]|0}k[i>>2]=0;if(!q){k[i>>2]=0;r=c;return}else{q=Rqa(p>>>0>1073741823?-1:p<<2)|0;k[i>>2]=q;r=c;return}break}case 966:{q=k[a>>2]|0;if((q|0)>0){i=k[a+20>>2]|0;p=0;n=0;while(1){m=(l[i+p>>0]|0)+n|0;p=p+1|0;if((p|0)>=(q|0)){s=m;break}else n=m}}else s=0;n=a+8|0;k[n>>2]=s;q=a+40|0;a=k[q>>2]|0;if(!a)t=s;else{Tqa(a);t=k[n>>2]|0}k[q>>2]=0;if(!t){k[q>>2]=0;r=c;return}else{t=Rqa(s>>>0>1073741823?-1:s<<2)|0;k[q>>2]=t;r=c;return}break}default:{c=e+56|0;t=e+4|0;k[e>>2]=27524;k[c>>2]=27544;B=0;wa(508,e+56|0,t|0);q=B;B=0;if(q&1){q=Rb()|0;u=Q;v=q;vva(c);Qb(v|0)}k[e+128>>2]=0;k[e+132>>2]=-1;k[e>>2]=27468;k[c>>2]=27488;B=0;va(448,t|0);q=B;B=0;do if(q&1){s=Rb()|0;w=Q;x=s}else{k[t>>2]=27560;s=e+36|0;k[s>>2]=0;k[s+4>>2]=0;k[s+8>>2]=0;k[s+12>>2]=0;k[e+52>>2]=16;k[d>>2]=0;k[d+4>>2]=0;k[d+8>>2]=0;B=0;wa(509,t|0,d|0);n=B;B=0;if(n&1){n=Rb()|0;a=Q;Yua(d);Yua(s);Ava(t);w=a;x=n;break}Yua(d);B=0;n=Ia(40,e|0,142357,17)|0;a=B;B=0;if((((!(a&1)?(B=0,a=ya(427,b|0)|0,p=B,B=0,!(p&1)):0)?(p=Lta(a)|0,B=0,i=Ia(40,n|0,a|0,p|0)|0,p=B,B=0,!(p&1)):0)?(B=0,p=Ia(40,i|0,146956,19)|0,i=B,B=0,!(i&1)):0)?(B=0,Xa(239,p|0,0)|0,p=B,B=0,!(p&1)):0){p=Ab(20)|0;B=0;eb(502,f|0,142375,70);i=B;B=0;do if(!(i&1)){B=0;eb(502,g|0,142446,7);a=B;B=0;if(a&1){a=Rb()|0;n=Q;Yua(f);y=n;z=a;break}B=0;wa(510,h|0,t|0);a=B;B=0;if(a&1){a=Rb()|0;A=Q;C=a;D=1}else{B=0;ua(163,p|0,f|0,g|0,211,h|0);a=B;B=0;if(a&1)E=1;else{B=0;eb(503,p|0,1240,229);B=0;E=0}a=Rb()|0;n=Q;Yua(h);A=n;C=a;D=E}Yua(g);Yua(f);if(D){y=A;z=C}else{F=A;G=C;k[e>>2]=27468;k[c>>2]=27488;k[t>>2]=27560;Yua(s);Ava(t);vva(c);Qb(G|0)}}else{a=Rb()|0;y=Q;z=a}while(0);zb(p|0);F=y;G=z;k[e>>2]=27468;k[c>>2]=27488;k[t>>2]=27560;Yua(s);Ava(t);vva(c);Qb(G|0)}i=Rb()|0;F=Q;G=i;k[e>>2]=27468;k[c>>2]=27488;k[t>>2]=27560;Yua(s);Ava(t);vva(c);Qb(G|0)}while(0);u=w;v=x;vva(c);Qb(v|0)}}}function rla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0;b=r;r=r+1072|0;c=b+1052|0;d=b+880|0;e=b+1040|0;f=b+728|0;g=b+1028|0;h=b+592|0;j=b+1016|0;l=b+440|0;m=b+864|0;n=b+304|0;o=b+576|0;p=b+168|0;q=b+152|0;s=b+16|0;t=b;u=d+56|0;v=d+4|0;k[d>>2]=27524;k[u>>2]=27544;B=0;wa(508,d+56|0,v|0);w=B;B=0;if(w&1){w=Rb()|0;x=Q;y=w;vva(u);Qb(y|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[u>>2]=27488;B=0;va(448,v|0);w=B;B=0;do if(w&1){z=Rb()|0;A=Q;C=z}else{k[v>>2]=27560;z=d+36|0;k[z>>2]=0;k[z+4>>2]=0;k[z+8>>2]=0;k[z+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,v|0,c|0);D=B;B=0;if(D&1){D=Rb()|0;E=Q;Yua(c);Yua(z);Ava(v);A=E;C=D;break}Yua(c);B=0;Ia(40,d|0,142454,13)|0;D=B;B=0;do if(!(D&1)?(B=0,wa(510,e|0,v|0),E=B,B=0,!(E&1)):0){B=0;ya(424,e|0)|0;E=B;B=0;if(E&1){E=Rb()|0;F=Q;Yua(e);G=F;H=E;break}Yua(e);k[d>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);E=f+56|0;F=f+4|0;k[f>>2]=27524;k[E>>2]=27544;B=0;wa(508,f+56|0,F|0);I=B;B=0;if(I&1){I=Rb()|0;J=Q;K=I;vva(E);Qb(K|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[E>>2]=27488;B=0;va(448,F|0);I=B;B=0;do if(I&1){L=Rb()|0;M=Q;N=L}else{k[F>>2]=27560;L=f+36|0;k[L>>2]=0;k[L+4>>2]=0;k[L+8>>2]=0;k[L+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,F|0,c|0);O=B;B=0;if(O&1){O=Rb()|0;P=Q;Yua(c);Yua(L);Ava(F);M=P;N=O;break}Yua(c);B=0;O=Ia(40,f|0,142468,11)|0;P=B;B=0;do if(((!(P&1)?(B=0,R=Xa(242,O|0,k[a>>2]|0)|0,S=B,B=0,!(S&1)):0)?(B=0,Ia(40,R|0,149177,1)|0,R=B,B=0,!(R&1)):0)?(B=0,wa(510,g|0,F|0),R=B,B=0,!(R&1)):0){B=0;ya(424,g|0)|0;R=B;B=0;if(R&1){R=Rb()|0;S=Q;Yua(g);T=S;U=R;break}Yua(g);k[f>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(L);Ava(F);vva(E);R=h+56|0;S=h+4|0;k[h>>2]=27524;k[R>>2]=27544;B=0;wa(508,h+56|0,S|0);V=B;B=0;if(V&1){V=Rb()|0;W=Q;X=V;vva(R);Qb(X|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[R>>2]=27488;B=0;va(448,S|0);V=B;B=0;do if(V&1){Y=Rb()|0;Z=Q;_=Y}else{k[S>>2]=27560;Y=h+36|0;k[Y>>2]=0;k[Y+4>>2]=0;k[Y+8>>2]=0;k[Y+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,S|0,c|0);$=B;B=0;if($&1){$=Rb()|0;aa=Q;Yua(c);Yua(Y);Ava(S);Z=aa;_=$;break}Yua(c);B=0;$=Ia(40,h|0,142480,11)|0;aa=B;B=0;do if(aa&1)ba=97;else{B=0;ca=Xa(242,$|0,k[a+4>>2]|0)|0;da=B;B=0;if(da&1){ba=97;break}B=0;Ia(40,ca|0,149177,1)|0;ca=B;B=0;if(ca&1){ba=97;break}B=0;wa(510,j|0,S|0);ca=B;B=0;if(ca&1){ba=97;break}B=0;ya(424,j|0)|0;ca=B;B=0;if(ca&1){ca=Rb()|0;da=Q;Yua(j);ea=da;fa=ca;break}Yua(j);k[h>>2]=27468;k[R>>2]=27488;k[S>>2]=27560;Yua(Y);Ava(S);vva(R);ca=l+56|0;da=l+4|0;k[l>>2]=27524;k[ca>>2]=27544;B=0;wa(508,l+56|0,da|0);ga=B;B=0;if(ga&1){ga=Rb()|0;ha=Q;ia=ga;vva(ca);Qb(ia|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[ca>>2]=27488;B=0;va(448,da|0);ga=B;B=0;do if(ga&1){ja=Rb()|0;ka=Q;la=ja}else{k[da>>2]=27560;ja=l+36|0;k[ja>>2]=0;k[ja+4>>2]=0;k[ja+8>>2]=0;k[ja+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,da|0,c|0);ma=B;B=0;if(ma&1){ma=Rb()|0;na=Q;Yua(c);Yua(ja);Ava(da);ka=na;la=ma;break}Yua(c);B=0;ma=Ia(40,l|0,142492,11)|0;na=B;B=0;do if(na&1)ba=100;else{B=0;oa=Xa(242,ma|0,k[a+8>>2]|0)|0;pa=B;B=0;if(pa&1){ba=100;break}B=0;Ia(40,oa|0,149177,1)|0;oa=B;B=0;if(oa&1){ba=100;break}B=0;wa(510,m|0,da|0);oa=B;B=0;if(oa&1){ba=100;break}B=0;ya(424,m|0)|0;oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;Yua(m);qa=pa;ra=oa;break}Yua(m);k[l>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ja);Ava(da);vva(ca);oa=n+56|0;pa=n+4|0;k[n>>2]=27524;k[oa>>2]=27544;B=0;wa(508,n+56|0,pa|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;ua=sa;vva(oa);Qb(ua|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[oa>>2]=27488;B=0;va(448,pa|0);sa=B;B=0;do if(sa&1){xa=Rb()|0;za=Q;Aa=xa}else{k[pa>>2]=27560;xa=n+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pa|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(c);Yua(xa);Ava(pa);za=Ca;Aa=Ba;break}Yua(c);B=0;Ba=Ia(40,n|0,142504,11)|0;Ca=B;B=0;do if(Ca&1)ba=103;else{B=0;Da=Xa(247,Ba|0,(i[a+12>>0]|0)!=0|0)|0;Ea=B;B=0;if(Ea&1){ba=103;break}B=0;Ia(40,Da|0,149177,1)|0;Da=B;B=0;if(Da&1){ba=103;break}B=0;wa(510,o|0,pa|0);Da=B;B=0;if(Da&1){ba=103;break}B=0;ya(424,o|0)|0;Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(o);Fa=Ea;Ga=Da;break}Yua(o);k[n>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);Da=p+56|0;Ea=p+4|0;k[p>>2]=27524;k[Da>>2]=27544;B=0;wa(508,p+56|0,Ea|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ja=Q;Ka=Ha;vva(Da);Qb(Ka|0)}k[p+128>>2]=0;k[p+132>>2]=-1;k[p>>2]=27468;k[Da>>2]=27488;B=0;va(448,Ea|0);Ha=B;B=0;do if(Ha&1){La=Rb()|0;Ma=Q;Na=La}else{k[Ea>>2]=27560;La=p+36|0;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[p+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ea|0,c|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Yua(c);Yua(La);Ava(Ea);Ma=Pa;Na=Oa;break}Yua(c);B=0;Oa=Ia(40,p|0,142516,11)|0;Pa=B;B=0;do if(Pa&1)ba=106;else{B=0;Qa=Xa(247,Oa|0,(i[a+13>>0]|0)!=0|0)|0;Ra=B;B=0;if(Ra&1){ba=106;break}B=0;Ia(40,Qa|0,149177,1)|0;Qa=B;B=0;if(Qa&1){ba=106;break}B=0;wa(510,q|0,Ea|0);Qa=B;B=0;if(Qa&1){ba=106;break}B=0;ya(424,q|0)|0;Qa=B;B=0;if(Qa&1){Qa=Rb()|0;Ra=Q;Yua(q);Sa=Ra;Ta=Qa;break}Yua(q);k[p>>2]=27468;k[Da>>2]=27488;k[Ea>>2]=27560;Yua(La);Ava(Ea);vva(Da);Qa=s+56|0;Ra=s+4|0;k[s>>2]=27524;k[Qa>>2]=27544;B=0;wa(508,s+56|0,Ra|0);Ua=B;B=0;if(Ua&1){Ua=Rb()|0;Va=Q;Wa=Ua;vva(Qa);Qb(Wa|0)}k[s+128>>2]=0;k[s+132>>2]=-1;k[s>>2]=27468;k[Qa>>2]=27488;B=0;va(448,Ra|0);Ua=B;B=0;do if(Ua&1){Ya=Rb()|0;Za=Q;_a=Ya}else{k[Ra>>2]=27560;Ya=s+36|0;k[Ya>>2]=0;k[Ya+4>>2]=0;k[Ya+8>>2]=0;k[Ya+12>>2]=0;k[s+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ra|0,c|0);$a=B;B=0;if($a&1){$a=Rb()|0;ab=Q;Yua(c);Yua(Ya);Ava(Ra);Za=ab;_a=$a;break}Yua(c);B=0;$a=Ia(40,s|0,142528,11)|0;ab=B;B=0;do if(!(ab&1)){B=0;bb=Xa(247,$a|0,(i[a+14>>0]|0)!=0|0)|0;cb=B;B=0;if(cb&1){ba=109;break}B=0;Ia(40,bb|0,149177,1)|0;bb=B;B=0;if(bb&1){ba=109;break}B=0;wa(510,t|0,Ra|0);bb=B;B=0;if(bb&1){ba=109;break}B=0;ya(424,t|0)|0;bb=B;B=0;if(bb&1){bb=Rb()|0;cb=Q;Yua(t);db=cb;eb=bb;break}else{Yua(t);k[s>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Ya);Ava(Ra);vva(Qa);r=b;return}}else ba=109;while(0);if((ba|0)==109){$a=Rb()|0;db=Q;eb=$a}k[s>>2]=27468;k[Qa>>2]=27488;k[Ra>>2]=27560;Yua(Ya);Ava(Ra);vva(Qa);fb=db;gb=eb;Qb(gb|0)}while(0);Va=Za;Wa=_a;vva(Qa);Qb(Wa|0)}while(0);if((ba|0)==106){Oa=Rb()|0;Sa=Q;Ta=Oa}k[p>>2]=27468;k[Da>>2]=27488;k[Ea>>2]=27560;Yua(La);Ava(Ea);vva(Da);fb=Sa;gb=Ta;Qb(gb|0)}while(0);Ja=Ma;Ka=Na;vva(Da);Qb(Ka|0)}while(0);if((ba|0)==103){Ba=Rb()|0;Fa=Q;Ga=Ba}k[n>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);fb=Fa;gb=Ga;Qb(gb|0)}while(0);ta=za;ua=Aa;vva(oa);Qb(ua|0)}while(0);if((ba|0)==100){ma=Rb()|0;qa=Q;ra=ma}k[l>>2]=27468;k[ca>>2]=27488;k[da>>2]=27560;Yua(ja);Ava(da);vva(ca);fb=qa;gb=ra;Qb(gb|0)}while(0);ha=ka;ia=la;vva(ca);Qb(ia|0)}while(0);if((ba|0)==97){$=Rb()|0;ea=Q;fa=$}k[h>>2]=27468;k[R>>2]=27488;k[S>>2]=27560;Yua(Y);Ava(S);vva(R);fb=ea;gb=fa;Qb(gb|0)}while(0);W=Z;X=_;vva(R);Qb(X|0)}else ba=94;while(0);if((ba|0)==94){O=Rb()|0;T=Q;U=O}k[f>>2]=27468;k[E>>2]=27488;k[F>>2]=27560;Yua(L);Ava(F);vva(E);fb=T;gb=U;Qb(gb|0)}while(0);J=M;K=N;vva(E);Qb(K|0)}else ba=91;while(0);if((ba|0)==91){D=Rb()|0;G=Q;H=D}k[d>>2]=27468;k[u>>2]=27488;k[v>>2]=27560;Yua(z);Ava(v);vva(u);fb=G;gb=H;Qb(gb|0)}while(0);x=A;y=C;vva(u);Qb(y|0)}function sla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0;b=r;r=r+3776|0;c=b+3752|0;d=b+3472|0;e=b+3740|0;f=b+3336|0;g=b+3728|0;h=b+3184|0;j=b+3716|0;l=b+3048|0;m=b+3704|0;n=b+2896|0;o=b+3692|0;q=b+2744|0;s=b+3680|0;t=b+2608|0;u=b+3668|0;v=b+2472|0;w=b+3656|0;x=b+2320|0;y=b+3644|0;z=b+2184|0;A=b+3632|0;C=b+2032|0;D=b+3620|0;E=b+1896|0;F=b+3608|0;G=b+1744|0;H=b+3320|0;I=b+1608|0;J=b+3032|0;K=b+1456|0;L=b+2880|0;M=b+1304|0;N=b+2456|0;O=b+1168|0;P=b+2168|0;R=b+1016|0;S=b+1880|0;T=b+880|0;U=b+1592|0;V=b+744|0;W=b+1440|0;X=b+592|0;Y=b+1152|0;Z=b+456|0;_=b+728|0;$=b+304|0;aa=b+440|0;ba=b+168|0;ca=b+152|0;da=b+16|0;ea=b;fa=d+56|0;ga=d+4|0;k[d>>2]=27524;k[fa>>2]=27544;B=0;wa(508,d+56|0,ga|0);ha=B;B=0;if(ha&1){ha=Rb()|0;ia=Q;ja=ha;vva(fa);Qb(ja|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[fa>>2]=27488;B=0;va(448,ga|0);ha=B;B=0;do if(ha&1){ka=Rb()|0;la=Q;ma=ka}else{k[ga>>2]=27560;ka=d+36|0;k[ka>>2]=0;k[ka+4>>2]=0;k[ka+8>>2]=0;k[ka+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ga|0,c|0);na=B;B=0;if(na&1){na=Rb()|0;oa=Q;Yua(c);Yua(ka);Ava(ga);la=oa;ma=na;break}Yua(c);B=0;Ia(40,d|0,142454,13)|0;na=B;B=0;do if(!(na&1)?(B=0,wa(510,e|0,ga|0),oa=B,B=0,!(oa&1)):0){B=0;ya(424,e|0)|0;oa=B;B=0;if(oa&1){oa=Rb()|0;pa=Q;Yua(e);qa=pa;ra=oa;break}Yua(e);k[d>>2]=27468;k[fa>>2]=27488;k[ga>>2]=27560;Yua(ka);Ava(ga);vva(fa);oa=f+56|0;pa=f+4|0;k[f>>2]=27524;k[oa>>2]=27544;B=0;wa(508,f+56|0,pa|0);sa=B;B=0;if(sa&1){sa=Rb()|0;ta=Q;ua=sa;vva(oa);Qb(ua|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[oa>>2]=27488;B=0;va(448,pa|0);sa=B;B=0;do if(sa&1){xa=Rb()|0;za=Q;Aa=xa}else{k[pa>>2]=27560;xa=f+36|0;k[xa>>2]=0;k[xa+4>>2]=0;k[xa+8>>2]=0;k[xa+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pa|0,c|0);Ba=B;B=0;if(Ba&1){Ba=Rb()|0;Ca=Q;Yua(c);Yua(xa);Ava(pa);za=Ca;Aa=Ba;break}Yua(c);B=0;Ba=Ia(40,f|0,142468,11)|0;Ca=B;B=0;do if(((!(Ca&1)?(B=0,Da=Xa(242,Ba|0,k[a>>2]|0)|0,Ea=B,B=0,!(Ea&1)):0)?(B=0,Ia(40,Da|0,149177,1)|0,Da=B,B=0,!(Da&1)):0)?(B=0,wa(510,g|0,pa|0),Da=B,B=0,!(Da&1)):0){B=0;ya(424,g|0)|0;Da=B;B=0;if(Da&1){Da=Rb()|0;Ea=Q;Yua(g);Fa=Ea;Ga=Da;break}Yua(g);k[f>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);Da=h+56|0;Ea=h+4|0;k[h>>2]=27524;k[Da>>2]=27544;B=0;wa(508,h+56|0,Ea|0);Ha=B;B=0;if(Ha&1){Ha=Rb()|0;Ja=Q;Ka=Ha;vva(Da);Qb(Ka|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[Da>>2]=27488;B=0;va(448,Ea|0);Ha=B;B=0;do if(Ha&1){La=Rb()|0;Ma=Q;Na=La}else{k[Ea>>2]=27560;La=h+36|0;k[La>>2]=0;k[La+4>>2]=0;k[La+8>>2]=0;k[La+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ea|0,c|0);Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Yua(c);Yua(La);Ava(Ea);Ma=Pa;Na=Oa;break}Yua(c);B=0;Oa=Ia(40,h|0,142480,11)|0;Pa=B;B=0;do if(Pa&1)Qa=127;else{Ra=a+4|0;B=0;Ta=Xa(242,Oa|0,k[Ra>>2]|0)|0;Ua=B;B=0;if(Ua&1){Qa=127;break}B=0;Ia(40,Ta|0,149177,1)|0;Ta=B;B=0;if(Ta&1){Qa=127;break}B=0;wa(510,j|0,Ea|0);Ta=B;B=0;if(Ta&1){Qa=127;break}B=0;ya(424,j|0)|0;Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Ua=Q;Yua(j);Va=Ua;Wa=Ta;break}Yua(j);k[h>>2]=27468;k[Da>>2]=27488;k[Ea>>2]=27560;Yua(La);Ava(Ea);vva(Da);Ta=l+56|0;Ua=l+4|0;k[l>>2]=27524;k[Ta>>2]=27544;B=0;wa(508,l+56|0,Ua|0);Ya=B;B=0;if(Ya&1){Ya=Rb()|0;Za=Q;_a=Ya;vva(Ta);Qb(_a|0)}k[l+128>>2]=0;k[l+132>>2]=-1;k[l>>2]=27468;k[Ta>>2]=27488;B=0;va(448,Ua|0);Ya=B;B=0;do if(Ya&1){$a=Rb()|0;ab=Q;bb=$a}else{k[Ua>>2]=27560;$a=l+36|0;k[$a>>2]=0;k[$a+4>>2]=0;k[$a+8>>2]=0;k[$a+12>>2]=0;k[l+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ua|0,c|0);cb=B;B=0;if(cb&1){cb=Rb()|0;db=Q;Yua(c);Yua($a);Ava(Ua);ab=db;bb=cb;break}Yua(c);B=0;cb=Ia(40,l|0,142492,11)|0;db=B;B=0;do if(db&1)Qa=130;else{eb=a+8|0;B=0;fb=Xa(242,cb|0,k[eb>>2]|0)|0;gb=B;B=0;if(gb&1){Qa=130;break}B=0;Ia(40,fb|0,149177,1)|0;fb=B;B=0;if(fb&1){Qa=130;break}B=0;wa(510,m|0,Ua|0);fb=B;B=0;if(fb&1){Qa=130;break}B=0;ya(424,m|0)|0;fb=B;B=0;if(fb&1){fb=Rb()|0;gb=Q;Yua(m);hb=gb;ib=fb;break}Yua(m);k[l>>2]=27468;k[Ta>>2]=27488;k[Ua>>2]=27560;Yua($a);Ava(Ua);vva(Ta);fb=n+56|0;gb=n+4|0;k[n>>2]=27524;k[fb>>2]=27544;B=0;wa(508,n+56|0,gb|0);jb=B;B=0;if(jb&1){jb=Rb()|0;kb=Q;lb=jb;vva(fb);Qb(lb|0)}k[n+128>>2]=0;k[n+132>>2]=-1;k[n>>2]=27468;k[fb>>2]=27488;B=0;va(448,gb|0);jb=B;B=0;do if(jb&1){mb=Rb()|0;nb=Q;ob=mb}else{k[gb>>2]=27560;mb=n+36|0;k[mb>>2]=0;k[mb+4>>2]=0;k[mb+8>>2]=0;k[mb+12>>2]=0;k[n+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,gb|0,c|0);pb=B;B=0;if(pb&1){pb=Rb()|0;qb=Q;Yua(c);Yua(mb);Ava(gb);nb=qb;ob=pb;break}Yua(c);B=0;pb=Ia(40,n|0,142504,11)|0;qb=B;B=0;do if(qb&1)Qa=133;else{B=0;rb=Xa(247,pb|0,(i[a+12>>0]|0)!=0|0)|0;sb=B;B=0;if(sb&1){Qa=133;break}B=0;Ia(40,rb|0,149177,1)|0;rb=B;B=0;if(rb&1){Qa=133;break}B=0;wa(510,o|0,gb|0);rb=B;B=0;if(rb&1){Qa=133;break}B=0;ya(424,o|0)|0;rb=B;B=0;if(rb&1){rb=Rb()|0;sb=Q;Yua(o);tb=sb;ub=rb;break}Yua(o);k[n>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);rb=q+56|0;sb=q+4|0;k[q>>2]=27524;k[rb>>2]=27544;B=0;wa(508,q+56|0,sb|0);vb=B;B=0;if(vb&1){vb=Rb()|0;wb=Q;xb=vb;vva(rb);Qb(xb|0)}k[q+128>>2]=0;k[q+132>>2]=-1;k[q>>2]=27468;k[rb>>2]=27488;B=0;va(448,sb|0);vb=B;B=0;do if(vb&1){yb=Rb()|0;zb=Q;Ab=yb}else{k[sb>>2]=27560;yb=q+36|0;k[yb>>2]=0;k[yb+4>>2]=0;k[yb+8>>2]=0;k[yb+12>>2]=0;k[q+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sb|0,c|0);Bb=B;B=0;if(Bb&1){Bb=Rb()|0;Cb=Q;Yua(c);Yua(yb);Ava(sb);zb=Cb;Ab=Bb;break}Yua(c);B=0;Bb=Ia(40,q|0,142516,11)|0;Cb=B;B=0;do if(Cb&1)Qa=136;else{B=0;Db=Xa(247,Bb|0,(i[a+13>>0]|0)!=0|0)|0;Eb=B;B=0;if(Eb&1){Qa=136;break}B=0;Ia(40,Db|0,149177,1)|0;Db=B;B=0;if(Db&1){Qa=136;break}B=0;wa(510,s|0,sb|0);Db=B;B=0;if(Db&1){Qa=136;break}B=0;ya(424,s|0)|0;Db=B;B=0;if(Db&1){Db=Rb()|0;Eb=Q;Yua(s);Fb=Eb;Gb=Db;break}Yua(s);k[q>>2]=27468;k[rb>>2]=27488;k[sb>>2]=27560;Yua(yb);Ava(sb);vva(rb);Db=t+56|0;Eb=t+4|0;k[t>>2]=27524;k[Db>>2]=27544;B=0;wa(508,t+56|0,Eb|0);Hb=B;B=0;if(Hb&1){Hb=Rb()|0;Ib=Q;Jb=Hb;vva(Db);Qb(Jb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Db>>2]=27488;B=0;va(448,Eb|0);Hb=B;B=0;do if(Hb&1){Kb=Rb()|0;Lb=Q;Mb=Kb}else{k[Eb>>2]=27560;Kb=t+36|0;k[Kb>>2]=0;k[Kb+4>>2]=0;k[Kb+8>>2]=0;k[Kb+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Eb|0,c|0);Nb=B;B=0;if(Nb&1){Nb=Rb()|0;Ob=Q;Yua(c);Yua(Kb);Ava(Eb);Lb=Ob;Mb=Nb;break}Yua(c);B=0;Nb=Ia(40,t|0,142528,11)|0;Ob=B;B=0;do if(Ob&1)Qa=139;else{B=0;Pb=Xa(247,Nb|0,(i[a+14>>0]|0)!=0|0)|0;Sb=B;B=0;if(Sb&1){Qa=139;break}B=0;Ia(40,Pb|0,149177,1)|0;Pb=B;B=0;if(Pb&1){Qa=139;break}B=0;wa(510,u|0,Eb|0);Pb=B;B=0;if(Pb&1){Qa=139;break}B=0;ya(424,u|0)|0;Pb=B;B=0;if(Pb&1){Pb=Rb()|0;Sb=Q;Yua(u);Tb=Sb;Ub=Pb;break}Yua(u);k[t>>2]=27468;k[Db>>2]=27488;k[Eb>>2]=27560;Yua(Kb);Ava(Eb);vva(Db);Pb=v+56|0;Sb=v+4|0;k[v>>2]=27524;k[Pb>>2]=27544;B=0;wa(508,v+56|0,Sb|0);Vb=B;B=0;if(Vb&1){Vb=Rb()|0;Wb=Q;Xb=Vb;vva(Pb);Qb(Xb|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[Pb>>2]=27488;B=0;va(448,Sb|0);Vb=B;B=0;do if(Vb&1){Yb=Rb()|0;Zb=Q;_b=Yb}else{k[Sb>>2]=27560;Yb=v+36|0;k[Yb>>2]=0;k[Yb+4>>2]=0;k[Yb+8>>2]=0;k[Yb+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Sb|0,c|0);$b=B;B=0;if($b&1){$b=Rb()|0;ac=Q;Yua(c);Yua(Yb);Ava(Sb);Zb=ac;_b=$b;break}Yua(c);B=0;Ia(40,v|0,142540,29)|0;$b=B;B=0;do if($b&1)Qa=142;else{B=0;wa(510,w|0,Sb|0);ac=B;B=0;if(ac&1){Qa=142;break}B=0;ya(424,w|0)|0;ac=B;B=0;if(ac&1){ac=Rb()|0;bc=Q;Yua(w);cc=bc;dc=ac;break}Yua(w);k[v>>2]=27468;k[Pb>>2]=27488;k[Sb>>2]=27560;Yua(Yb);Ava(Sb);vva(Pb);a:do if((k[a>>2]|0)>0){ac=x+56|0;bc=x+4|0;ec=x+56|0;fc=x+128|0;gc=x+132|0;hc=x+36|0;ic=x+52|0;jc=a+16|0;kc=a+20|0;lc=0;while(1){k[x>>2]=27524;k[ac>>2]=27544;B=0;wa(508,ec|0,bc|0);mc=B;B=0;if(mc&1){Qa=107;break}k[fc>>2]=0;k[gc>>2]=-1;k[x>>2]=27468;k[ac>>2]=27488;B=0;va(448,bc|0);mc=B;B=0;if(mc&1){Qa=108;break}k[bc>>2]=27560;k[hc>>2]=0;k[hc+4>>2]=0;k[hc+8>>2]=0;k[hc+12>>2]=0;k[ic>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,bc|0,c|0);mc=B;B=0;if(mc&1){Qa=106;break}Yua(c);B=0;mc=Ia(40,x|0,142570,10)|0;nc=B;B=0;if(nc&1){Qa=145;break}B=0;nc=Xa(242,mc|0,lc|0)|0;mc=B;B=0;if(mc&1){Qa=145;break}B=0;mc=Ia(40,nc|0,160061,2)|0;nc=B;B=0;if(nc&1){Qa=145;break}nc=(i[(k[jc>>2]|0)+lc>>0]|0)!=0;B=0;oc=Ia(40,mc|0,(nc?159247:159252)|0,(nc?4:5)|0)|0;nc=B;B=0;if(nc&1){Qa=145;break}B=0;nc=Ia(40,oc|0,149175,1)|0;oc=B;B=0;if(oc&1){Qa=145;break}oc=(i[(k[kc>>2]|0)+lc>>0]|0)!=0;B=0;mc=Ia(40,nc|0,(oc?159247:159252)|0,(oc?4:5)|0)|0;oc=B;B=0;if(oc&1){Qa=145;break}B=0;Ia(40,mc|0,149177,1)|0;mc=B;B=0;if(mc&1){Qa=145;break}B=0;wa(510,y|0,bc|0);mc=B;B=0;if(mc&1){Qa=145;break}B=0;ya(424,y|0)|0;mc=B;B=0;if(mc&1){Qa=146;break}Yua(y);k[x>>2]=27468;k[ac>>2]=27488;k[bc>>2]=27560;Yua(hc);Ava(bc);vva(ac);lc=lc+1|0;if((lc|0)>=(k[a>>2]|0))break a}if((Qa|0)==106){lc=Rb()|0;kc=Q;Yua(c);Yua(hc);Ava(bc);pc=kc;qc=lc;Qa=109}else if((Qa|0)==107){lc=Rb()|0;rc=Q;sc=lc;vva(ac);Qb(sc|0)}else if((Qa|0)==108){lc=Rb()|0;pc=Q;qc=lc;Qa=109}else if((Qa|0)==145){lc=Rb()|0;tc=Q;uc=lc;Qa=147}else if((Qa|0)==146){lc=Rb()|0;kc=Q;Yua(y);tc=kc;uc=lc;Qa=147}if((Qa|0)==109){rc=pc;sc=qc;vva(ac);Qb(sc|0)}else if((Qa|0)==147){k[x>>2]=27468;k[ac>>2]=27488;k[bc>>2]=27560;Yua(hc);Ava(bc);vva(ac);vc=tc;wc=uc;Qb(wc|0)}}while(0);lc=z+56|0;kc=z+4|0;k[z>>2]=27524;k[lc>>2]=27544;B=0;wa(508,z+56|0,kc|0);jc=B;B=0;if(jc&1){jc=Rb()|0;xc=Q;yc=jc;vva(lc);Qb(yc|0)}k[z+128>>2]=0;k[z+132>>2]=-1;k[z>>2]=27468;k[lc>>2]=27488;B=0;va(448,kc|0);jc=B;B=0;do if(jc&1){ic=Rb()|0;zc=Q;Ac=ic}else{k[kc>>2]=27560;ic=z+36|0;k[ic>>2]=0;k[ic+4>>2]=0;k[ic+8>>2]=0;k[ic+12>>2]=0;k[z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,kc|0,c|0);gc=B;B=0;if(gc&1){gc=Rb()|0;fc=Q;Yua(c);Yua(ic);Ava(kc);zc=fc;Ac=gc;break}Yua(c);B=0;gc=Ia(40,z|0,142581,12)|0;fc=B;B=0;do if(fc&1)Qa=178;else{B=0;ec=Xa(242,gc|0,k[eb>>2]|0)|0;mc=B;B=0;if(mc&1){Qa=178;break}B=0;Ia(40,ec|0,142594,4)|0;ec=B;B=0;if(ec&1){Qa=178;break}B=0;wa(510,A|0,kc|0);ec=B;B=0;if(ec&1){Qa=178;break}B=0;ya(424,A|0)|0;ec=B;B=0;if(ec&1){ec=Rb()|0;mc=Q;Yua(A);Bc=mc;Cc=ec;break}Yua(A);k[z>>2]=27468;k[lc>>2]=27488;k[kc>>2]=27560;Yua(ic);Ava(kc);vva(lc);ec=k[a>>2]|0;b:do if((ec|0)>0){mc=a+20|0;oc=C+56|0;nc=C+4|0;Dc=C+56|0;Ec=C+128|0;Fc=C+132|0;Gc=C+36|0;Hc=C+52|0;Ic=a+24|0;Jc=ec;Kc=0;while(1){if(!(i[(k[mc>>2]|0)+Kc>>0]|0))Lc=Jc;else{k[C>>2]=27524;k[oc>>2]=27544;B=0;wa(508,Dc|0,nc|0);Mc=B;B=0;if(Mc&1){Qa=168;break}k[Ec>>2]=0;k[Fc>>2]=-1;k[C>>2]=27468;k[oc>>2]=27488;B=0;va(448,nc|0);Mc=B;B=0;if(Mc&1){Qa=169;break}k[nc>>2]=27560;k[Gc>>2]=0;k[Gc+4>>2]=0;k[Gc+8>>2]=0;k[Gc+12>>2]=0;k[Hc>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,nc|0,c|0);Mc=B;B=0;if(Mc&1){Qa=167;break}Yua(c);B=0;Mc=Ia(40,C|0,149175,1)|0;Nc=B;B=0;if(Nc&1){Qa=181;break}B=0;Nc=Sa(1,Mc|0,+(+p[(k[Ic>>2]|0)+(Kc<<3)>>3]))|0;Mc=B;B=0;if(Mc&1){Qa=181;break}B=0;Ia(40,Nc|0,142599,2)|0;Nc=B;B=0;if(Nc&1){Qa=181;break}B=0;wa(510,D|0,nc|0);Nc=B;B=0;if(Nc&1){Qa=181;break}B=0;ya(424,D|0)|0;Nc=B;B=0;if(Nc&1){Qa=182;break}Yua(D);k[C>>2]=27468;k[oc>>2]=27488;k[nc>>2]=27560;Yua(Gc);Ava(nc);vva(oc);Lc=k[a>>2]|0}Kc=Kc+1|0;if((Kc|0)>=(Lc|0))break b;else Jc=Lc}if((Qa|0)==167){Jc=Rb()|0;Kc=Q;Yua(c);Yua(Gc);Ava(nc);Oc=Kc;Pc=Jc;Qa=170}else if((Qa|0)==168){Jc=Rb()|0;Qc=Q;Rc=Jc;vva(oc);Qb(Rc|0)}else if((Qa|0)==169){Jc=Rb()|0;Oc=Q;Pc=Jc;Qa=170}else if((Qa|0)==181){Jc=Rb()|0;Sc=Q;Tc=Jc;Qa=183}else if((Qa|0)==182){Jc=Rb()|0;Kc=Q;Yua(D);Sc=Kc;Tc=Jc;Qa=183}if((Qa|0)==170){Qc=Oc;Rc=Pc;vva(oc);Qb(Rc|0)}else if((Qa|0)==183){k[C>>2]=27468;k[oc>>2]=27488;k[nc>>2]=27560;Yua(Gc);Ava(nc);vva(oc);vc=Sc;wc=Tc;Qb(wc|0)}}while(0);ec=E+56|0;Jc=E+4|0;k[E>>2]=27524;k[ec>>2]=27544;B=0;wa(508,E+56|0,Jc|0);Kc=B;B=0;if(Kc&1){Kc=Rb()|0;Uc=Q;Vc=Kc;vva(ec);Qb(Vc|0)}k[E+128>>2]=0;k[E+132>>2]=-1;k[E>>2]=27468;k[ec>>2]=27488;B=0;va(448,Jc|0);Kc=B;B=0;do if(Kc&1){Ic=Rb()|0;Wc=Q;Xc=Ic}else{k[Jc>>2]=27560;Ic=E+36|0;k[Ic>>2]=0;k[Ic+4>>2]=0;k[Ic+8>>2]=0;k[Ic+12>>2]=0;k[E+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Jc|0,c|0);Hc=B;B=0;if(Hc&1){Hc=Rb()|0;Fc=Q;Yua(c);Yua(Ic);Ava(Jc);Wc=Fc;Xc=Hc;break}Yua(c);B=0;Ia(40,E|0,149177,1)|0;Hc=B;B=0;do if(Hc&1)Qa=224;else{B=0;wa(510,F|0,Jc|0);Fc=B;B=0;if(Fc&1){Qa=224;break}B=0;ya(424,F|0)|0;Fc=B;B=0;if(Fc&1){Fc=Rb()|0;Ec=Q;Yua(F);Yc=Ec;Zc=Fc;break}Yua(F);k[E>>2]=27468;k[ec>>2]=27488;k[Jc>>2]=27560;Yua(Ic);Ava(Jc);vva(ec);Fc=a+28|0;c:do if(!(k[Fc>>2]|0)){Ec=M+56|0;Dc=M+4|0;k[M>>2]=27524;k[Ec>>2]=27544;B=0;wa(508,M+56|0,Dc|0);mc=B;B=0;if(mc&1){mc=Rb()|0;_c=Q;$c=mc;vva(Ec);Qb($c|0)}k[M+128>>2]=0;k[M+132>>2]=-1;k[M>>2]=27468;k[Ec>>2]=27488;B=0;va(448,Dc|0);mc=B;B=0;do if(mc&1){Nc=Rb()|0;ad=Q;bd=Nc}else{k[Dc>>2]=27560;Nc=M+36|0;k[Nc>>2]=0;k[Nc+4>>2]=0;k[Nc+8>>2]=0;k[Nc+12>>2]=0;k[M+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Dc|0,c|0);Mc=B;B=0;if(Mc&1){Mc=Rb()|0;cd=Q;Yua(c);Yua(Nc);Ava(Dc);ad=cd;bd=Mc;break}Yua(c);B=0;Ia(40,M|0,142616,17)|0;Mc=B;B=0;do if(!(Mc&1)){B=0;wa(510,N|0,Dc|0);cd=B;B=0;if(cd&1){Qa=260;break}B=0;ya(424,N|0)|0;cd=B;B=0;if(cd&1){cd=Rb()|0;dd=Q;Yua(N);ed=dd;fd=cd;break}else{Yua(N);k[M>>2]=27468;k[Ec>>2]=27488;k[Dc>>2]=27560;Yua(Nc);Ava(Dc);vva(Ec);break c}}else Qa=260;while(0);if((Qa|0)==260){Mc=Rb()|0;ed=Q;fd=Mc}k[M>>2]=27468;k[Ec>>2]=27488;k[Dc>>2]=27560;Yua(Nc);Ava(Dc);vva(Ec);vc=ed;wc=fd;Qb(wc|0)}while(0);_c=ad;$c=bd;vva(Ec);Qb($c|0)}else{Dc=G+56|0;mc=G+4|0;k[G>>2]=27524;k[Dc>>2]=27544;B=0;wa(508,G+56|0,mc|0);Mc=B;B=0;if(Mc&1){Mc=Rb()|0;gd=Q;hd=Mc;vva(Dc);Qb(hd|0)}k[G+128>>2]=0;k[G+132>>2]=-1;k[G>>2]=27468;k[Dc>>2]=27488;B=0;va(448,mc|0);Mc=B;B=0;do if(Mc&1){cd=Rb()|0;id=Q;jd=cd}else{k[mc>>2]=27560;cd=G+36|0;k[cd>>2]=0;k[cd+4>>2]=0;k[cd+8>>2]=0;k[cd+12>>2]=0;k[G+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,mc|0,c|0);dd=B;B=0;if(dd&1){dd=Rb()|0;kd=Q;Yua(c);Yua(cd);Ava(mc);id=kd;jd=dd;break}Yua(c);B=0;Ia(40,G|0,142602,13)|0;dd=B;B=0;do if(dd&1)Qa=227;else{B=0;wa(510,H|0,mc|0);kd=B;B=0;if(kd&1){Qa=227;break}B=0;ya(424,H|0)|0;kd=B;B=0;if(kd&1){kd=Rb()|0;ld=Q;Yua(H);md=ld;nd=kd;break}Yua(H);k[G>>2]=27468;k[Dc>>2]=27488;k[mc>>2]=27560;Yua(cd);Ava(mc);vva(Dc);d:do if((k[a>>2]|0)>0){kd=I+56|0;ld=I+4|0;od=I+56|0;pd=I+128|0;qd=I+132|0;rd=I+36|0;sd=I+52|0;td=0;while(1){k[I>>2]=27524;k[kd>>2]=27544;B=0;wa(508,od|0,ld|0);ud=B;B=0;if(ud&1){Qa=214;break}k[pd>>2]=0;k[qd>>2]=-1;k[I>>2]=27468;k[kd>>2]=27488;B=0;va(448,ld|0);ud=B;B=0;if(ud&1){Qa=215;break}k[ld>>2]=27560;k[rd>>2]=0;k[rd+4>>2]=0;k[rd+8>>2]=0;k[rd+12>>2]=0;k[sd>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ld|0,c|0);ud=B;B=0;if(ud&1){Qa=213;break}Yua(c);B=0;ud=Ia(40,I|0,149175,1)|0;vd=B;B=0;if(vd&1){Qa=230;break}B=0;vd=Xa(242,ud|0,k[(k[Fc>>2]|0)+(td<<2)>>2]|0)|0;ud=B;B=0;if(ud&1){Qa=230;break}B=0;Ia(40,vd|0,142599,2)|0;vd=B;B=0;if(vd&1){Qa=230;break}B=0;wa(510,J|0,ld|0);vd=B;B=0;if(vd&1){Qa=230;break}B=0;ya(424,J|0)|0;vd=B;B=0;if(vd&1){Qa=231;break}Yua(J);k[I>>2]=27468;k[kd>>2]=27488;k[ld>>2]=27560;Yua(rd);Ava(ld);vva(kd);td=td+1|0;if((td|0)>=(k[a>>2]|0))break d}if((Qa|0)==213){td=Rb()|0;sd=Q;Yua(c);Yua(rd);Ava(ld);wd=sd;xd=td;Qa=216}else if((Qa|0)==214){td=Rb()|0;yd=Q;zd=td;vva(kd);Qb(zd|0)}else if((Qa|0)==215){td=Rb()|0;wd=Q;xd=td;Qa=216}else if((Qa|0)==230){td=Rb()|0;Ad=Q;Bd=td;Qa=232}else if((Qa|0)==231){td=Rb()|0;sd=Q;Yua(J);Ad=sd;Bd=td;Qa=232}if((Qa|0)==216){yd=wd;zd=xd;vva(kd);Qb(zd|0)}else if((Qa|0)==232){k[I>>2]=27468;k[kd>>2]=27488;k[ld>>2]=27560;Yua(rd);Ava(ld);vva(kd);vc=Ad;wc=Bd;Qb(wc|0)}}while(0);td=K+56|0;sd=K+4|0;k[K>>2]=27524;k[td>>2]=27544;B=0;wa(508,K+56|0,sd|0);qd=B;B=0;if(qd&1){qd=Rb()|0;Cd=Q;Dd=qd;vva(td);Qb(Dd|0)}k[K+128>>2]=0;k[K+132>>2]=-1;k[K>>2]=27468;k[td>>2]=27488;B=0;va(448,sd|0);qd=B;B=0;do if(qd&1){pd=Rb()|0;Ed=Q;Fd=pd}else{k[sd>>2]=27560;pd=K+36|0;k[pd>>2]=0;k[pd+4>>2]=0;k[pd+8>>2]=0;k[pd+12>>2]=0;k[K+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,sd|0,c|0);od=B;B=0;if(od&1){od=Rb()|0;vd=Q;Yua(c);Yua(pd);Ava(sd);Ed=vd;Fd=od;break}Yua(c);B=0;Ia(40,K|0,149177,1)|0;od=B;B=0;do if(!(od&1)){B=0;wa(510,L|0,sd|0);vd=B;B=0;if(vd&1){Qa=245;break}B=0;ya(424,L|0)|0;vd=B;B=0;if(vd&1){vd=Rb()|0;ud=Q;Yua(L);Gd=ud;Hd=vd;break}else{Yua(L);k[K>>2]=27468;k[td>>2]=27488;k[sd>>2]=27560;Yua(pd);Ava(sd);vva(td);break c}}else Qa=245;while(0);if((Qa|0)==245){od=Rb()|0;Gd=Q;Hd=od}k[K>>2]=27468;k[td>>2]=27488;k[sd>>2]=27560;Yua(pd);Ava(sd);vva(td);vc=Gd;wc=Hd;Qb(wc|0)}while(0);Cd=Ed;Dd=Fd;vva(td);Qb(Dd|0)}while(0);if((Qa|0)==227){dd=Rb()|0;md=Q;nd=dd}k[G>>2]=27468;k[Dc>>2]=27488;k[mc>>2]=27560;Yua(cd);Ava(mc);vva(Dc);vc=md;wc=nd;Qb(wc|0)}while(0);gd=id;hd=jd;vva(Dc);Qb(hd|0)}while(0);Fc=O+56|0;mc=O+4|0;k[O>>2]=27524;k[Fc>>2]=27544;B=0;wa(508,O+56|0,mc|0);Mc=B;B=0;if(Mc&1){Mc=Rb()|0;Id=Q;Jd=Mc;vva(Fc);Qb(Jd|0)}k[O+128>>2]=0;k[O+132>>2]=-1;k[O>>2]=27468;k[Fc>>2]=27488;B=0;va(448,mc|0);Mc=B;B=0;do if(Mc&1){Ec=Rb()|0;Kd=Q;Ld=Ec}else{k[mc>>2]=27560;Ec=O+36|0;k[Ec>>2]=0;k[Ec+4>>2]=0;k[Ec+8>>2]=0;k[Ec+12>>2]=0;k[O+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,mc|0,c|0);dd=B;B=0;if(dd&1){dd=Rb()|0;Nc=Q;Yua(c);Yua(Ec);Ava(mc);Kd=Nc;Ld=dd;break}Yua(c);B=0;dd=Ia(40,O|0,142634,14)|0;Nc=B;B=0;do if(Nc&1)Qa=292;else{B=0;sd=Xa(242,dd|0,k[a>>2]|0)|0;qd=B;B=0;if(qd&1){Qa=292;break}B=0;Ia(40,sd|0,142594,4)|0;sd=B;B=0;if(sd&1){Qa=292;break}B=0;wa(510,P|0,mc|0);sd=B;B=0;if(sd&1){Qa=292;break}B=0;ya(424,P|0)|0;sd=B;B=0;if(sd&1){sd=Rb()|0;qd=Q;Yua(P);Md=qd;Nd=sd;break}Yua(P);k[O>>2]=27468;k[Fc>>2]=27488;k[mc>>2]=27560;Yua(Ec);Ava(mc);vva(Fc);e:do if((k[a>>2]|0)>0){sd=R+56|0;qd=R+4|0;od=R+56|0;kd=R+128|0;ld=R+132|0;rd=R+36|0;vd=R+52|0;ud=a+32|0;Od=0;while(1){k[R>>2]=27524;k[sd>>2]=27544;B=0;wa(508,od|0,qd|0);Pd=B;B=0;if(Pd&1){Qa=282;break}k[kd>>2]=0;k[ld>>2]=-1;k[R>>2]=27468;k[sd>>2]=27488;B=0;va(448,qd|0);Pd=B;B=0;if(Pd&1){Qa=283;break}k[qd>>2]=27560;k[rd>>2]=0;k[rd+4>>2]=0;k[rd+8>>2]=0;k[rd+12>>2]=0;k[vd>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qd|0,c|0);Pd=B;B=0;if(Pd&1){Qa=281;break}Yua(c);B=0;Pd=Ia(40,R|0,149175,1)|0;Qd=B;B=0;if(Qd&1){Qa=295;break}B=0;Qd=Xa(242,Pd|0,k[(k[ud>>2]|0)+(Od<<2)>>2]|0)|0;Pd=B;B=0;if(Pd&1){Qa=295;break}B=0;Ia(40,Qd|0,142599,2)|0;Qd=B;B=0;if(Qd&1){Qa=295;break}B=0;wa(510,S|0,qd|0);Qd=B;B=0;if(Qd&1){Qa=295;break}B=0;ya(424,S|0)|0;Qd=B;B=0;if(Qd&1){Qa=296;break}Yua(S);k[R>>2]=27468;k[sd>>2]=27488;k[qd>>2]=27560;Yua(rd);Ava(qd);vva(sd);Od=Od+1|0;if((Od|0)>=(k[a>>2]|0))break e}if((Qa|0)==281){Od=Rb()|0;ud=Q;Yua(c);Yua(rd);Ava(qd);Rd=ud;Sd=Od;Qa=284}else if((Qa|0)==282){Od=Rb()|0;Td=Q;Ud=Od;vva(sd);Qb(Ud|0)}else if((Qa|0)==283){Od=Rb()|0;Rd=Q;Sd=Od;Qa=284}else if((Qa|0)==295){Od=Rb()|0;Vd=Q;Wd=Od;Qa=297}else if((Qa|0)==296){Od=Rb()|0;ud=Q;Yua(S);Vd=ud;Wd=Od;Qa=297}if((Qa|0)==284){Td=Rd;Ud=Sd;vva(sd);Qb(Ud|0)}else if((Qa|0)==297){k[R>>2]=27468;k[sd>>2]=27488;k[qd>>2]=27560;Yua(rd);Ava(qd);vva(sd);vc=Vd;wc=Wd;Qb(wc|0)}}while(0);cd=T+56|0;Od=T+4|0;k[T>>2]=27524;k[cd>>2]=27544;B=0;wa(508,T+56|0,Od|0);ud=B;B=0;if(ud&1){ud=Rb()|0;Xd=Q;Yd=ud;vva(cd);Qb(Yd|0)}k[T+128>>2]=0;k[T+132>>2]=-1;k[T>>2]=27468;k[cd>>2]=27488;B=0;va(448,Od|0);ud=B;B=0;do if(ud&1){vd=Rb()|0;Zd=Q;_d=vd}else{k[Od>>2]=27560;vd=T+36|0;k[vd>>2]=0;k[vd+4>>2]=0;k[vd+8>>2]=0;k[vd+12>>2]=0;k[T+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Od|0,c|0);ld=B;B=0;if(ld&1){ld=Rb()|0;kd=Q;Yua(c);Yua(vd);Ava(Od);Zd=kd;_d=ld;break}Yua(c);B=0;Ia(40,T|0,149177,1)|0;ld=B;B=0;do if(ld&1)Qa=338;else{B=0;wa(510,U|0,Od|0);kd=B;B=0;if(kd&1){Qa=338;break}B=0;ya(424,U|0)|0;kd=B;B=0;if(kd&1){kd=Rb()|0;od=Q;Yua(U);$d=od;ae=kd;break}Yua(U);k[T>>2]=27468;k[cd>>2]=27488;k[Od>>2]=27560;Yua(vd);Ava(Od);vva(cd);kd=V+56|0;od=V+4|0;k[V>>2]=27524;k[kd>>2]=27544;B=0;wa(508,V+56|0,od|0);td=B;B=0;if(td&1){td=Rb()|0;be=Q;ce=td;vva(kd);Qb(ce|0)}k[V+128>>2]=0;k[V+132>>2]=-1;k[V>>2]=27468;k[kd>>2]=27488;B=0;va(448,od|0);td=B;B=0;do if(td&1){Qd=Rb()|0;de=Q;ee=Qd}else{k[od>>2]=27560;Qd=V+36|0;k[Qd>>2]=0;k[Qd+4>>2]=0;k[Qd+8>>2]=0;k[Qd+12>>2]=0;k[V+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,od|0,c|0);Pd=B;B=0;if(Pd&1){Pd=Rb()|0;fe=Q;Yua(c);Yua(Qd);Ava(od);de=fe;ee=Pd;break}Yua(c);B=0;Pd=Ia(40,V|0,142649,14)|0;fe=B;B=0;do if(fe&1)Qa=341;else{B=0;ge=Xa(242,Pd|0,k[Ra>>2]|0)|0;he=B;B=0;if(he&1){Qa=341;break}B=0;Ia(40,ge|0,142594,4)|0;ge=B;B=0;if(ge&1){Qa=341;break}B=0;wa(510,W|0,od|0);ge=B;B=0;if(ge&1){Qa=341;break}B=0;ya(424,W|0)|0;ge=B;B=0;if(ge&1){ge=Rb()|0;he=Q;Yua(W);ie=he;je=ge;break}Yua(W);k[V>>2]=27468;k[kd>>2]=27488;k[od>>2]=27560;Yua(Qd);Ava(od);vva(kd);f:do if((k[Ra>>2]|0)>0){ge=X+56|0;he=X+4|0;ke=X+56|0;le=X+128|0;me=X+132|0;ne=X+36|0;oe=X+52|0;pe=a+36|0;qe=0;while(1){k[X>>2]=27524;k[ge>>2]=27544;B=0;wa(508,ke|0,he|0);re=B;B=0;if(re&1){Qa=328;break}k[le>>2]=0;k[me>>2]=-1;k[X>>2]=27468;k[ge>>2]=27488;B=0;va(448,he|0);re=B;B=0;if(re&1){Qa=329;break}k[he>>2]=27560;k[ne>>2]=0;k[ne+4>>2]=0;k[ne+8>>2]=0;k[ne+12>>2]=0;k[oe>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,he|0,c|0);re=B;B=0;if(re&1){Qa=327;break}Yua(c);B=0;re=Ia(40,X|0,149175,1)|0;se=B;B=0;if(se&1){Qa=344;break}B=0;se=Xa(242,re|0,k[(k[pe>>2]|0)+(qe<<2)>>2]|0)|0;re=B;B=0;if(re&1){Qa=344;break}B=0;Ia(40,se|0,142599,2)|0;se=B;B=0;if(se&1){Qa=344;break}B=0;wa(510,Y|0,he|0);se=B;B=0;if(se&1){Qa=344;break}B=0;ya(424,Y|0)|0;se=B;B=0;if(se&1){Qa=345;break}Yua(Y);k[X>>2]=27468;k[ge>>2]=27488;k[he>>2]=27560;Yua(ne);Ava(he);vva(ge);qe=qe+1|0;if((qe|0)>=(k[Ra>>2]|0))break f}if((Qa|0)==327){qe=Rb()|0;pe=Q;Yua(c);Yua(ne);Ava(he);te=pe;ue=qe;Qa=330}else if((Qa|0)==328){qe=Rb()|0;ve=Q;we=qe;vva(ge);Qb(we|0)}else if((Qa|0)==329){qe=Rb()|0;te=Q;ue=qe;Qa=330}else if((Qa|0)==344){qe=Rb()|0;xe=Q;ye=qe;Qa=346}else if((Qa|0)==345){qe=Rb()|0;pe=Q;Yua(Y);xe=pe;ye=qe;Qa=346}if((Qa|0)==330){ve=te;we=ue;vva(ge);Qb(we|0)}else if((Qa|0)==346){k[X>>2]=27468;k[ge>>2]=27488;k[he>>2]=27560;Yua(ne);Ava(he);vva(ge);vc=xe;wc=ye;Qb(wc|0)}}while(0);qe=Z+56|0;pe=Z+4|0;k[Z>>2]=27524;k[qe>>2]=27544;B=0;wa(508,Z+56|0,pe|0);oe=B;B=0;if(oe&1){oe=Rb()|0;ze=Q;Ae=oe;vva(qe);Qb(Ae|0)}k[Z+128>>2]=0;k[Z+132>>2]=-1;k[Z>>2]=27468;k[qe>>2]=27488;B=0;va(448,pe|0);oe=B;B=0;do if(oe&1){me=Rb()|0;Be=Q;Ce=me}else{k[pe>>2]=27560;me=Z+36|0;k[me>>2]=0;k[me+4>>2]=0;k[me+8>>2]=0;k[me+12>>2]=0;k[Z+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,pe|0,c|0);le=B;B=0;if(le&1){le=Rb()|0;ke=Q;Yua(c);Yua(me);Ava(pe);Be=ke;Ce=le;break}Yua(c);B=0;Ia(40,Z|0,149177,1)|0;le=B;B=0;do if(le&1)Qa=387;else{B=0;wa(510,_|0,pe|0);ke=B;B=0;if(ke&1){Qa=387;break}B=0;ya(424,_|0)|0;ke=B;B=0;if(ke&1){ke=Rb()|0;se=Q;Yua(_);De=se;Ee=ke;break}Yua(_);k[Z>>2]=27468;k[qe>>2]=27488;k[pe>>2]=27560;Yua(me);Ava(pe);vva(qe);ke=$+56|0;se=$+4|0;k[$>>2]=27524;k[ke>>2]=27544;B=0;wa(508,$+56|0,se|0);re=B;B=0;if(re&1){re=Rb()|0;Fe=Q;Ge=re;vva(ke);Qb(Ge|0)}k[$+128>>2]=0;k[$+132>>2]=-1;k[$>>2]=27468;k[ke>>2]=27488;B=0;va(448,se|0);re=B;B=0;do if(re&1){He=Rb()|0;Ie=Q;Je=He}else{k[se>>2]=27560;He=$+36|0;k[He>>2]=0;k[He+4>>2]=0;k[He+8>>2]=0;k[He+12>>2]=0;k[$+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,se|0,c|0);Ke=B;B=0;if(Ke&1){Ke=Rb()|0;Le=Q;Yua(c);Yua(He);Ava(se);Ie=Le;Je=Ke;break}Yua(c);B=0;Ke=Ia(40,$|0,142664,14)|0;Le=B;B=0;do if(Le&1)Qa=390;else{B=0;Me=Xa(242,Ke|0,k[eb>>2]|0)|0;Ne=B;B=0;if(Ne&1){Qa=390;break}B=0;Ia(40,Me|0,142594,4)|0;Me=B;B=0;if(Me&1){Qa=390;break}B=0;wa(510,aa|0,se|0);Me=B;B=0;if(Me&1){Qa=390;break}B=0;ya(424,aa|0)|0;Me=B;B=0;if(Me&1){Me=Rb()|0;Ne=Q;Yua(aa);Oe=Ne;Pe=Me;break}Yua(aa);k[$>>2]=27468;k[ke>>2]=27488;k[se>>2]=27560;Yua(He);Ava(se);vva(ke);g:do if((k[eb>>2]|0)>0){Me=ba+56|0;Ne=ba+4|0;Qe=ba+56|0;Re=ba+128|0;Se=ba+132|0;Te=ba+36|0;Ue=ba+52|0;Ve=a+40|0;We=0;while(1){k[ba>>2]=27524;k[Me>>2]=27544;B=0;wa(508,Qe|0,Ne|0);Xe=B;B=0;if(Xe&1){Qa=377;break}k[Re>>2]=0;k[Se>>2]=-1;k[ba>>2]=27468;k[Me>>2]=27488;B=0;va(448,Ne|0);Xe=B;B=0;if(Xe&1){Qa=378;break}k[Ne>>2]=27560;k[Te>>2]=0;k[Te+4>>2]=0;k[Te+8>>2]=0;k[Te+12>>2]=0;k[Ue>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ne|0,c|0);Xe=B;B=0;if(Xe&1){Qa=376;break}Yua(c);B=0;Xe=Ia(40,ba|0,149175,1)|0;Ye=B;B=0;if(Ye&1){Qa=393;break}B=0;Ye=Xa(242,Xe|0,k[(k[Ve>>2]|0)+(We<<2)>>2]|0)|0;Xe=B;B=0;if(Xe&1){Qa=393;break}B=0;Ia(40,Ye|0,142599,2)|0;Ye=B;B=0;if(Ye&1){Qa=393;break}B=0;wa(510,ca|0,Ne|0);Ye=B;B=0;if(Ye&1){Qa=393;break}B=0;ya(424,ca|0)|0;Ye=B;B=0;if(Ye&1){Qa=394;break}Yua(ca);k[ba>>2]=27468;k[Me>>2]=27488;k[Ne>>2]=27560;Yua(Te);Ava(Ne);vva(Me);We=We+1|0;if((We|0)>=(k[eb>>2]|0))break g}if((Qa|0)==376){We=Rb()|0;Ve=Q;Yua(c);Yua(Te);Ava(Ne);Ze=Ve;_e=We;Qa=379}else if((Qa|0)==377){We=Rb()|0;$e=Q;af=We;vva(Me);Qb(af|0)}else if((Qa|0)==378){We=Rb()|0;Ze=Q;_e=We;Qa=379}else if((Qa|0)==393){We=Rb()|0;bf=Q;cf=We;Qa=395}else if((Qa|0)==394){We=Rb()|0;Ve=Q;Yua(ca);bf=Ve;cf=We;Qa=395}if((Qa|0)==379){$e=Ze;af=_e;vva(Me);Qb(af|0)}else if((Qa|0)==395){k[ba>>2]=27468;k[Me>>2]=27488;k[Ne>>2]=27560;Yua(Te);Ava(Ne);vva(Me);vc=bf;wc=cf;Qb(wc|0)}}while(0);We=da+56|0;Ve=da+4|0;k[da>>2]=27524;k[We>>2]=27544;B=0;wa(508,da+56|0,Ve|0);Ue=B;B=0;if(Ue&1){Ue=Rb()|0;df=Q;ef=Ue;vva(We);Qb(ef|0)}k[da+128>>2]=0;k[da+132>>2]=-1;k[da>>2]=27468;k[We>>2]=27488;B=0;va(448,Ve|0);Ue=B;B=0;do if(Ue&1){Se=Rb()|0;ff=Q;gf=Se}else{k[Ve>>2]=27560;Se=da+36|0;k[Se>>2]=0;k[Se+4>>2]=0;k[Se+8>>2]=0;k[Se+12>>2]=0;k[da+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ve|0,c|0);Re=B;B=0;if(Re&1){Re=Rb()|0;Qe=Q;Yua(c);Yua(Se);Ava(Ve);ff=Qe;gf=Re;break}Yua(c);B=0;Ia(40,da|0,149177,1)|0;Re=B;B=0;do if(!(Re&1)){B=0;wa(510,ea|0,Ve|0);Qe=B;B=0;if(Qe&1){Qa=408;break}B=0;ya(424,ea|0)|0;Qe=B;B=0;if(Qe&1){Qe=Rb()|0;Ye=Q;Yua(ea);hf=Ye;jf=Qe;break}else{Yua(ea);k[da>>2]=27468;k[We>>2]=27488;k[Ve>>2]=27560;Yua(Se);Ava(Ve);vva(We);r=b;return}}else Qa=408;while(0);if((Qa|0)==408){Re=Rb()|0;hf=Q;jf=Re}k[da>>2]=27468;k[We>>2]=27488;k[Ve>>2]=27560;Yua(Se);Ava(Ve);vva(We);vc=hf;wc=jf;Qb(wc|0)}while(0);df=ff;ef=gf;vva(We);Qb(ef|0)}while(0);if((Qa|0)==390){Ke=Rb()|0;Oe=Q;Pe=Ke}k[$>>2]=27468;k[ke>>2]=27488;k[se>>2]=27560;Yua(He);Ava(se);vva(ke);vc=Oe;wc=Pe;Qb(wc|0)}while(0);Fe=Ie;Ge=Je;vva(ke);Qb(Ge|0)}while(0);if((Qa|0)==387){le=Rb()|0;De=Q;Ee=le}k[Z>>2]=27468;k[qe>>2]=27488;k[pe>>2]=27560;Yua(me);Ava(pe);vva(qe);vc=De;wc=Ee;Qb(wc|0)}while(0);ze=Be;Ae=Ce;vva(qe);Qb(Ae|0)}while(0);if((Qa|0)==341){Pd=Rb()|0;ie=Q;je=Pd}k[V>>2]=27468;k[kd>>2]=27488;k[od>>2]=27560;Yua(Qd);Ava(od);vva(kd);vc=ie;wc=je;Qb(wc|0)}while(0);be=de;ce=ee;vva(kd);Qb(ce|0)}while(0);if((Qa|0)==338){ld=Rb()|0;$d=Q;ae=ld}k[T>>2]=27468;k[cd>>2]=27488;k[Od>>2]=27560;Yua(vd);Ava(Od);vva(cd);vc=$d;wc=ae;Qb(wc|0)}while(0);Xd=Zd;Yd=_d;vva(cd);Qb(Yd|0)}while(0);if((Qa|0)==292){dd=Rb()|0;Md=Q;Nd=dd}k[O>>2]=27468;k[Fc>>2]=27488;k[mc>>2]=27560;Yua(Ec);Ava(mc);vva(Fc);vc=Md;wc=Nd;Qb(wc|0)}while(0);Id=Kd;Jd=Ld;vva(Fc);Qb(Jd|0)}while(0);if((Qa|0)==224){Hc=Rb()|0;Yc=Q;Zc=Hc}k[E>>2]=27468;k[ec>>2]=27488;k[Jc>>2]=27560;Yua(Ic);Ava(Jc);vva(ec);vc=Yc;wc=Zc;Qb(wc|0)}while(0);Uc=Wc;Vc=Xc;vva(ec);Qb(Vc|0)}while(0);if((Qa|0)==178){gc=Rb()|0;Bc=Q;Cc=gc}k[z>>2]=27468;k[lc>>2]=27488;k[kc>>2]=27560;Yua(ic);Ava(kc);vva(lc);vc=Bc;wc=Cc;Qb(wc|0)}while(0);xc=zc;yc=Ac;vva(lc);Qb(yc|0)}while(0);if((Qa|0)==142){$b=Rb()|0;cc=Q;dc=$b}k[v>>2]=27468;k[Pb>>2]=27488;k[Sb>>2]=27560;Yua(Yb);Ava(Sb);vva(Pb);vc=cc;wc=dc;Qb(wc|0)}while(0);Wb=Zb;Xb=_b;vva(Pb);Qb(Xb|0)}while(0);if((Qa|0)==139){Nb=Rb()|0;Tb=Q;Ub=Nb}k[t>>2]=27468;k[Db>>2]=27488;k[Eb>>2]=27560;Yua(Kb);Ava(Eb);vva(Db);vc=Tb;wc=Ub;Qb(wc|0)}while(0);Ib=Lb;Jb=Mb;vva(Db);Qb(Jb|0)}while(0);if((Qa|0)==136){Bb=Rb()|0;Fb=Q;Gb=Bb}k[q>>2]=27468;k[rb>>2]=27488;k[sb>>2]=27560;Yua(yb);Ava(sb);vva(rb);vc=Fb;wc=Gb;Qb(wc|0)}while(0);wb=zb;xb=Ab;vva(rb);Qb(xb|0)}while(0);if((Qa|0)==133){pb=Rb()|0;tb=Q;ub=pb}k[n>>2]=27468;k[fb>>2]=27488;k[gb>>2]=27560;Yua(mb);Ava(gb);vva(fb);vc=tb;wc=ub;Qb(wc|0)}while(0);kb=nb;lb=ob;vva(fb);Qb(lb|0)}while(0);if((Qa|0)==130){cb=Rb()|0;hb=Q;ib=cb}k[l>>2]=27468;k[Ta>>2]=27488;k[Ua>>2]=27560;Yua($a);Ava(Ua);vva(Ta);vc=hb;wc=ib;Qb(wc|0)}while(0);Za=ab;_a=bb;vva(Ta);Qb(_a|0)}while(0);if((Qa|0)==127){Oa=Rb()|0;Va=Q;Wa=Oa}k[h>>2]=27468;k[Da>>2]=27488;k[Ea>>2]=27560;Yua(La);Ava(Ea);vva(Da);vc=Va;wc=Wa;Qb(wc|0)}while(0);Ja=Ma;Ka=Na;vva(Da);Qb(Ka|0)}else Qa=124;while(0);if((Qa|0)==124){Ba=Rb()|0;Fa=Q;Ga=Ba}k[f>>2]=27468;k[oa>>2]=27488;k[pa>>2]=27560;Yua(xa);Ava(pa);vva(oa);vc=Fa;wc=Ga;Qb(wc|0)}while(0);ta=za;ua=Aa;vva(oa);Qb(ua|0)}else Qa=121;while(0);if((Qa|0)==121){na=Rb()|0;qa=Q;ra=na}k[d>>2]=27468;k[fa>>2]=27488;k[ga>>2]=27560;Yua(ka);Ava(ga);vva(fa);vc=qa;wc=ra;Qb(wc|0)}while(0);ia=la;ja=ma;vva(fa);Qb(ja|0)}function tla(a){a=a|0;var b=0,c=0,d=0,e=0;i[a+13>>0]=0;b=k[a>>2]|0;if((b|0)<=0)return;c=k[a+16>>2]|0;d=k[a+20>>2]|0;e=k[a+24>>2]|0;a=0;do{i[c+a>>0]=0;i[d+a>>0]=1;p[e+(a<<3)>>3]=0.0;a=a+1|0}while((a|0)<(b|0));return}function ula(a){a=a|0;var b=0,c=0,d=0,e=0;i[a+13>>0]=1;b=k[a>>2]|0;if((b|0)<=0)return;c=k[a+16>>2]|0;d=k[a+20>>2]|0;e=k[a+24>>2]|0;a=0;do{i[c+a>>0]=1;i[d+a>>0]=0;p[e+(a<<3)>>3]=0.0;a=a+1|0}while((a|0)<(b|0));return}function vla(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;e=r;r=r+192|0;f=e+176|0;g=e+40|0;h=e+24|0;j=e+12|0;m=e;switch(d|0){case 0:{d=k[b>>2]|0;n=l[a>>0]|l[a+1>>0]<<8|l[a+2>>0]<<16|l[a+3>>0]<<24;i[d>>0]=n;i[d+1>>0]=n>>8;i[d+2>>0]=n>>16;i[d+3>>0]=n>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;d=a+4|0;o=l[d>>0]|l[d+1>>0]<<8|l[d+2>>0]<<16|l[d+3>>0]<<24;i[n>>0]=o;i[n+1>>0]=o>>8;i[n+2>>0]=o>>16;i[n+3>>0]=o>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+8|0;p=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=p;i[o+1>>0]=p>>8;i[o+2>>0]=p>>16;i[o+3>>0]=p>>24;p=(k[b>>2]|0)+4|0;k[b>>2]=p;i[p>>0]=i[a+12>>0]|0;p=(k[b>>2]|0)+1|0;k[b>>2]=p;i[p>>0]=i[a+13>>0]|0;p=(k[b>>2]|0)+1|0;k[b>>2]=p;i[p>>0]=i[a+14>>0]|0;p=(k[b>>2]|0)+1|0;k[b>>2]=p;o=a+16|0;q=(k[o>>2]|0)==0;i[p>>0]=q&1;p=(k[b>>2]|0)+1|0;k[b>>2]=p;if(q)s=p;else{TEa(p|0,k[o>>2]|0,k[a>>2]|0)|0;o=(k[b>>2]|0)+(k[a>>2]|0)|0;k[b>>2]=o;s=o}o=a+20|0;p=(k[o>>2]|0)==0;i[s>>0]=p&1;s=(k[b>>2]|0)+1|0;k[b>>2]=s;if(p)t=s;else{TEa(s|0,k[o>>2]|0,k[a>>2]|0)|0;o=(k[b>>2]|0)+(k[a>>2]|0)|0;k[b>>2]=o;t=o}o=a+24|0;s=(k[o>>2]|0)==0;i[t>>0]=s&1;t=(k[b>>2]|0)+1|0;k[b>>2]=t;if(s)u=t;else{TEa(t|0,k[o>>2]|0,k[a>>2]<<3|0)|0;o=(k[b>>2]|0)+(k[a>>2]<<3)|0;k[b>>2]=o;u=o}o=a+28|0;t=(k[o>>2]|0)==0;i[u>>0]=t&1;u=(k[b>>2]|0)+1|0;k[b>>2]=u;if(t)v=u;else{TEa(u|0,k[o>>2]|0,k[a>>2]<<2|0)|0;o=(k[b>>2]|0)+(k[a>>2]<<2)|0;k[b>>2]=o;v=o}o=a+32|0;u=(k[o>>2]|0)==0;i[v>>0]=u&1;v=(k[b>>2]|0)+1|0;k[b>>2]=v;if(u)w=v;else{TEa(v|0,k[o>>2]|0,k[a>>2]<<2|0)|0;o=(k[b>>2]|0)+(k[a>>2]<<2)|0;k[b>>2]=o;w=o}o=a+36|0;v=(k[o>>2]|0)==0;i[w>>0]=v&1;w=(k[b>>2]|0)+1|0;k[b>>2]=w;if(v)x=w;else{TEa(w|0,k[o>>2]|0,k[d>>2]<<2|0)|0;o=(k[b>>2]|0)+(k[d>>2]<<2)|0;k[b>>2]=o;x=o}o=a+40|0;d=(k[o>>2]|0)==0;i[x>>0]=d&1;x=(k[b>>2]|0)+1|0;k[b>>2]=x;if(d){r=e;return}TEa(x|0,k[o>>2]|0,k[n>>2]<<2|0)|0;k[b>>2]=(k[b>>2]|0)+(k[n>>2]<<2);r=e;return}case 2:{n=(k[a+16>>2]|0)==0;o=(k[c>>2]|0)+16|0;k[c>>2]=o;if(n)y=o;else{n=o+(k[a>>2]|0)|0;k[c>>2]=n;y=n}n=(k[a+20>>2]|0)==0;o=y+1|0;k[c>>2]=o;if(n)z=o;else{n=o+(k[a>>2]|0)|0;k[c>>2]=n;z=n}n=(k[a+24>>2]|0)==0;o=z+1|0;k[c>>2]=o;if(n)A=o;else{n=o+(k[a>>2]<<3)|0;k[c>>2]=n;A=n}n=(k[a+28>>2]|0)==0;o=A+1|0;k[c>>2]=o;if(n)C=o;else{n=o+(k[a>>2]<<2)|0;k[c>>2]=n;C=n}n=(k[a+32>>2]|0)==0;o=C+1|0;k[c>>2]=o;if(n)D=o;else{n=o+(k[a>>2]<<2)|0;k[c>>2]=n;D=n}n=(k[a+36>>2]|0)==0;o=D+1|0;k[c>>2]=o;if(n)E=o;else{n=o+(k[a+4>>2]<<2)|0;k[c>>2]=n;E=n}n=(k[a+40>>2]|0)==0;o=E+1|0;k[c>>2]=o;if(n){r=e;return}k[c>>2]=o+(k[a+8>>2]<<2);r=e;return}case 1:{o=k[b>>2]|0;c=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[a>>0]=c;i[a+1>>0]=c>>8;i[a+2>>0]=c>>16;i[a+3>>0]=c>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;n=a+4|0;E=l[o>>0]|l[o+1>>0]<<8|l[o+2>>0]<<16|l[o+3>>0]<<24;i[n>>0]=E;i[n+1>>0]=E>>8;i[n+2>>0]=E>>16;i[n+3>>0]=E>>24;n=(k[b>>2]|0)+4|0;k[b>>2]=n;o=a+8|0;D=l[n>>0]|l[n+1>>0]<<8|l[n+2>>0]<<16|l[n+3>>0]<<24;i[o>>0]=D;i[o+1>>0]=D>>8;i[o+2>>0]=D>>16;i[o+3>>0]=D>>24;o=(k[b>>2]|0)+4|0;k[b>>2]=o;i[a+12>>0]=i[o>>0]|0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;i[a+13>>0]=i[o>>0]|0;o=(k[b>>2]|0)+1|0;k[b>>2]=o;i[a+14>>0]=i[o>>0]|0;o=k[b>>2]|0;n=o+1|0;k[b>>2]=n;C=i[n>>0]|0;n=o+2|0;k[b>>2]=n;if(!(C&1)){C=Rqa(c)|0;k[a+16>>2]=C;o=k[b>>2]|0;TEa(C|0,o|0,c|0)|0;C=o+c|0;k[b>>2]=C;F=C}else F=n;n=i[F>>0]|0;C=F+1|0;k[b>>2]=C;if(!(n&1)){n=Rqa(c)|0;k[a+20>>2]=n;F=k[b>>2]|0;TEa(n|0,F|0,c|0)|0;n=F+c|0;k[b>>2]=n;G=n}else G=C;C=i[G>>0]|0;n=G+1|0;k[b>>2]=n;if(!(C&1)){C=Rqa(c>>>0>536870911?-1:c<<3)|0;k[a+24>>2]=C;G=k[b>>2]|0;F=c<<3;TEa(C|0,G|0,F|0)|0;C=G+F|0;k[b>>2]=C;H=C}else H=n;n=i[H>>0]|0;C=H+1|0;k[b>>2]=C;if(!(n&1)){n=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[a+28>>2]=n;H=k[b>>2]|0;F=c<<2;TEa(n|0,H|0,F|0)|0;n=H+F|0;k[b>>2]=n;I=n}else I=C;C=i[I>>0]|0;n=I+1|0;k[b>>2]=n;if(!(C&1)){C=Rqa(c>>>0>1073741823?-1:c<<2)|0;k[a+32>>2]=C;I=k[b>>2]|0;F=c<<2;TEa(C|0,I|0,F|0)|0;C=I+F|0;k[b>>2]=C;J=C}else J=n;n=i[J>>0]|0;C=J+1|0;k[b>>2]=C;if(!(n&1)){n=Rqa(E>>>0>1073741823?-1:E<<2)|0;k[a+36>>2]=n;J=k[b>>2]|0;F=E<<2;TEa(n|0,J|0,F|0)|0;n=J+F|0;k[b>>2]=n;K=n}else K=C;C=i[K>>0]|0;k[b>>2]=K+1;if(C&1){r=e;return}C=Rqa(D>>>0>1073741823?-1:D<<2)|0;k[a+40>>2]=C;a=k[b>>2]|0;K=D<<2;TEa(C|0,a|0,K|0)|0;k[b>>2]=a+K;r=e;return}default:{e=g+56|0;K=g+4|0;k[g>>2]=27524;k[e>>2]=27544;B=0;wa(508,g+56|0,K|0);a=B;B=0;if(a&1){a=Rb()|0;L=Q;M=a;vva(e);Qb(M|0)}k[g+128>>2]=0;k[g+132>>2]=-1;k[g>>2]=27468;k[e>>2]=27488;B=0;va(448,K|0);a=B;B=0;do if(a&1){b=Rb()|0;N=Q;O=b}else{k[K>>2]=27560;b=g+36|0;k[b>>2]=0;k[b+4>>2]=0;k[b+8>>2]=0;k[b+12>>2]=0;k[g+52>>2]=16;k[f>>2]=0;k[f+4>>2]=0;k[f+8>>2]=0;B=0;wa(509,K|0,f|0);C=B;B=0;if(C&1){C=Rb()|0;D=Q;Yua(f);Yua(b);Ava(K);N=D;O=C;break}Yua(f);B=0;C=Ia(40,g|0,143951,43)|0;D=B;B=0;if(!(D&1)?(B=0,Xa(239,C|0,0)|0,C=B,B=0,!(C&1)):0){C=Ab(20)|0;B=0;eb(502,h|0,142375,70);D=B;B=0;do if(!(D&1)){B=0;eb(502,j|0,149525,8);n=B;B=0;if(n&1){n=Rb()|0;F=Q;Yua(h);P=F;R=n;break}B=0;wa(510,m|0,K|0);n=B;B=0;if(n&1){n=Rb()|0;S=Q;T=n;U=1}else{B=0;ua(163,C|0,h|0,j|0,305,m|0);n=B;B=0;if(n&1)V=1;else{B=0;eb(503,C|0,1240,229);B=0;V=0}n=Rb()|0;F=Q;Yua(m);S=F;T=n;U=V}Yua(j);Yua(h);if(U){P=S;R=T}else{W=S;X=T;k[g>>2]=27468;k[e>>2]=27488;k[K>>2]=27560;Yua(b);Ava(K);vva(e);Qb(X|0)}}else{n=Rb()|0;P=Q;R=n}while(0);zb(C|0);W=P;X=R;k[g>>2]=27468;k[e>>2]=27488;k[K>>2]=27560;Yua(b);Ava(K);vva(e);Qb(X|0)}D=Rb()|0;W=Q;X=D;k[g>>2]=27468;k[e>>2]=27488;k[K>>2]=27560;Yua(b);Ava(K);vva(e);Qb(X|0)}while(0);L=N;M=O;vva(e);Qb(M|0)}}}function wla(a){a=a|0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;return}function xla(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;k[a>>2]=c;if((c|0)<1){k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;k[a+12>>2]=0;return}d=c>>>0>1073741823?-1:c<<2;c=Rqa(d)|0;e=a+4|0;k[e>>2]=c;f=Rqa(d)|0;g=a+8|0;k[g>>2]=f;h=Rqa(d)|0;d=a+12|0;k[d>>2]=h;k[f>>2]=k[b>>2];k[c>>2]=0;k[h>>2]=0;if((k[a>>2]|0)>1)i=1;else return;do{h=k[e>>2]|0;k[(k[g>>2]|0)+(i<<2)>>2]=k[b+(i<<2)>>2];k[h+(i<<2)>>2]=0;k[(k[d>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)<(k[a>>2]|0));return}function yla(a){a=a|0;var b=0,c=0;b=a+4|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+8|0;c=k[b>>2]|0;if(c)Tqa(c);k[b>>2]=0;b=a+12|0;a=k[b>>2]|0;if(!a){k[b>>2]=0;return}Tqa(a);k[b>>2]=0;return}function zla(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0;b=r;r=r+1376|0;c=b+1352|0;d=b+1168|0;e=b+1340|0;f=b+1032|0;g=b+1328|0;h=b+880|0;i=b+1316|0;j=b+728|0;l=b+1304|0;m=b+592|0;n=b+1016|0;o=b+456|0;p=b+864|0;q=b+304|0;s=b+440|0;t=b+168|0;u=b+152|0;v=b+16|0;w=b;if(!(k[a>>2]|0)){x=v+56|0;y=v+4|0;k[v>>2]=27524;k[x>>2]=27544;B=0;wa(508,v+56|0,y|0);z=B;B=0;if(z&1){z=Rb()|0;A=Q;C=z;vva(x);Qb(C|0)}k[v+128>>2]=0;k[v+132>>2]=-1;k[v>>2]=27468;k[x>>2]=27488;B=0;va(448,y|0);z=B;B=0;do if(z&1){D=Rb()|0;E=Q;F=D}else{k[y>>2]=27560;D=v+36|0;k[D>>2]=0;k[D+4>>2]=0;k[D+8>>2]=0;k[D+12>>2]=0;k[v+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,y|0,c|0);G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(c);Yua(D);Ava(y);E=H;F=G;break}Yua(c);B=0;Ia(40,v|0,142729,16)|0;G=B;B=0;do if(!(G&1)?(B=0,wa(510,w|0,y|0),H=B,B=0,!(H&1)):0){B=0;ya(424,w|0)|0;H=B;B=0;if(H&1){H=Rb()|0;I=Q;Yua(w);J=I;K=H;break}Yua(w);k[v>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);r=b;return}else L=137;while(0);if((L|0)==137){G=Rb()|0;J=Q;K=G}k[v>>2]=27468;k[x>>2]=27488;k[y>>2]=27560;Yua(D);Ava(y);vva(x);M=J;N=K;Qb(N|0)}while(0);A=E;C=F;vva(x);Qb(C|0)}C=d+56|0;x=d+4|0;k[d>>2]=27524;k[C>>2]=27544;B=0;wa(508,d+56|0,x|0);F=B;B=0;if(F&1){F=Rb()|0;O=Q;P=F;vva(C);Qb(P|0)}k[d+128>>2]=0;k[d+132>>2]=-1;k[d>>2]=27468;k[C>>2]=27488;B=0;va(448,x|0);F=B;B=0;do if(F&1){E=Rb()|0;R=Q;S=E}else{k[x>>2]=27560;E=d+36|0;k[E>>2]=0;k[E+4>>2]=0;k[E+8>>2]=0;k[E+12>>2]=0;k[d+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,x|0,c|0);A=B;B=0;if(A&1){A=Rb()|0;K=Q;Yua(c);Yua(E);Ava(x);R=K;S=A;break}Yua(c);B=0;Ia(40,d|0,142679,10)|0;A=B;B=0;do if(!(A&1)?(B=0,wa(510,e|0,x|0),K=B,B=0,!(K&1)):0){B=0;ya(424,e|0)|0;K=B;B=0;if(K&1){K=Rb()|0;J=Q;Yua(e);T=J;U=K;break}Yua(e);k[d>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(C);K=f+56|0;J=f+4|0;k[f>>2]=27524;k[K>>2]=27544;B=0;wa(508,f+56|0,J|0);y=B;B=0;if(y&1){y=Rb()|0;V=Q;W=y;vva(K);Qb(W|0)}k[f+128>>2]=0;k[f+132>>2]=-1;k[f>>2]=27468;k[K>>2]=27488;B=0;va(448,J|0);y=B;B=0;do if(y&1){v=Rb()|0;X=Q;Y=v}else{k[J>>2]=27560;v=f+36|0;k[v>>2]=0;k[v+4>>2]=0;k[v+8>>2]=0;k[v+12>>2]=0;k[f+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,J|0,c|0);w=B;B=0;if(w&1){w=Rb()|0;z=Q;Yua(c);Yua(v);Ava(J);X=z;Y=w;break}Yua(c);B=0;w=Ia(40,f|0,142690,10)|0;z=B;B=0;do if(((!(z&1)?(B=0,G=Xa(242,w|0,k[a>>2]|0)|0,H=B,B=0,!(H&1)):0)?(B=0,Ia(40,G|0,149177,1)|0,G=B,B=0,!(G&1)):0)?(B=0,wa(510,g|0,J|0),G=B,B=0,!(G&1)):0){B=0;ya(424,g|0)|0;G=B;B=0;if(G&1){G=Rb()|0;H=Q;Yua(g);Z=H;_=G;break}Yua(g);k[f>>2]=27468;k[K>>2]=27488;k[J>>2]=27560;Yua(v);Ava(J);vva(K);G=h+56|0;H=h+4|0;k[h>>2]=27524;k[G>>2]=27544;B=0;wa(508,h+56|0,H|0);I=B;B=0;if(I&1){I=Rb()|0;$=Q;aa=I;vva(G);Qb(aa|0)}k[h+128>>2]=0;k[h+132>>2]=-1;k[h>>2]=27468;k[G>>2]=27488;B=0;va(448,H|0);I=B;B=0;do if(I&1){ba=Rb()|0;ca=Q;da=ba}else{k[H>>2]=27560;ba=h+36|0;k[ba>>2]=0;k[ba+4>>2]=0;k[ba+8>>2]=0;k[ba+12>>2]=0;k[h+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,H|0,c|0);ea=B;B=0;if(ea&1){ea=Rb()|0;fa=Q;Yua(c);Yua(ba);Ava(H);ca=fa;da=ea;break}Yua(c);B=0;Ia(40,h|0,142701,11)|0;ea=B;B=0;do if(ea&1)L=58;else{B=0;wa(510,i|0,H|0);fa=B;B=0;if(fa&1){L=58;break}B=0;ya(424,i|0)|0;fa=B;B=0;if(fa&1){fa=Rb()|0;ga=Q;Yua(i);ha=ga;ia=fa;break}Yua(i);k[h>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(ba);Ava(H);vva(G);a:do if((k[a>>2]|0)>0){fa=j+56|0;ga=j+4|0;ja=j+56|0;ka=j+128|0;la=j+132|0;ma=j+36|0;na=j+52|0;oa=a+8|0;pa=0;while(1){k[j>>2]=27524;k[fa>>2]=27544;B=0;wa(508,ja|0,ga|0);qa=B;B=0;if(qa&1){L=43;break}k[ka>>2]=0;k[la>>2]=-1;k[j>>2]=27468;k[fa>>2]=27488;B=0;va(448,ga|0);qa=B;B=0;if(qa&1){L=44;break}k[ga>>2]=27560;k[ma>>2]=0;k[ma+4>>2]=0;k[ma+8>>2]=0;k[ma+12>>2]=0;k[na>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,ga|0,c|0);qa=B;B=0;if(qa&1){L=42;break}Yua(c);B=0;qa=Xa(242,j|0,k[(k[oa>>2]|0)+(pa<<2)>>2]|0)|0;ra=B;B=0;if(ra&1){L=61;break}B=0;Ia(40,qa|0,149175,1)|0;qa=B;B=0;if(qa&1){L=61;break}B=0;wa(510,l|0,ga|0);qa=B;B=0;if(qa&1){L=61;break}B=0;ya(424,l|0)|0;qa=B;B=0;if(qa&1){L=62;break}Yua(l);k[j>>2]=27468;k[fa>>2]=27488;k[ga>>2]=27560;Yua(ma);Ava(ga);vva(fa);pa=pa+1|0;if((pa|0)>=(k[a>>2]|0))break a}if((L|0)==42){pa=Rb()|0;oa=Q;Yua(c);Yua(ma);Ava(ga);sa=oa;ta=pa;L=45}else if((L|0)==43){pa=Rb()|0;ua=Q;xa=pa;vva(fa);Qb(xa|0)}else if((L|0)==44){pa=Rb()|0;sa=Q;ta=pa;L=45}else if((L|0)==61){pa=Rb()|0;za=Q;Aa=pa;L=63}else if((L|0)==62){pa=Rb()|0;oa=Q;Yua(l);za=oa;Aa=pa;L=63}if((L|0)==45){ua=sa;xa=ta;vva(fa);Qb(xa|0)}else if((L|0)==63){k[j>>2]=27468;k[fa>>2]=27488;k[ga>>2]=27560;Yua(ma);Ava(ga);vva(fa);M=za;N=Aa;Qb(N|0)}}while(0);pa=m+56|0;oa=m+4|0;k[m>>2]=27524;k[pa>>2]=27544;B=0;wa(508,m+56|0,oa|0);na=B;B=0;if(na&1){na=Rb()|0;Ba=Q;Ca=na;vva(pa);Qb(Ca|0)}k[m+128>>2]=0;k[m+132>>2]=-1;k[m>>2]=27468;k[pa>>2]=27488;B=0;va(448,oa|0);na=B;B=0;do if(na&1){la=Rb()|0;Da=Q;Ea=la}else{k[oa>>2]=27560;la=m+36|0;k[la>>2]=0;k[la+4>>2]=0;k[la+8>>2]=0;k[la+12>>2]=0;k[m+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,oa|0,c|0);ka=B;B=0;if(ka&1){ka=Rb()|0;ja=Q;Yua(c);Yua(la);Ava(oa);Da=ja;Ea=ka;break}Yua(c);B=0;Ia(40,m|0,149177,1)|0;ka=B;B=0;do if(ka&1)L=101;else{B=0;wa(510,n|0,oa|0);ja=B;B=0;if(ja&1){L=101;break}B=0;ya(424,n|0)|0;ja=B;B=0;if(ja&1){ja=Rb()|0;qa=Q;Yua(n);Fa=qa;Ga=ja;break}Yua(n);k[m>>2]=27468;k[pa>>2]=27488;k[oa>>2]=27560;Yua(la);Ava(oa);vva(pa);ja=o+56|0;qa=o+4|0;k[o>>2]=27524;k[ja>>2]=27544;B=0;wa(508,o+56|0,qa|0);ra=B;B=0;if(ra&1){ra=Rb()|0;Ha=Q;Ja=ra;vva(ja);Qb(Ja|0)}k[o+128>>2]=0;k[o+132>>2]=-1;k[o>>2]=27468;k[ja>>2]=27488;B=0;va(448,qa|0);ra=B;B=0;do if(ra&1){Ka=Rb()|0;La=Q;Ma=Ka}else{k[qa>>2]=27560;Ka=o+36|0;k[Ka>>2]=0;k[Ka+4>>2]=0;k[Ka+8>>2]=0;k[Ka+12>>2]=0;k[o+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,qa|0,c|0);Na=B;B=0;if(Na&1){Na=Rb()|0;Oa=Q;Yua(c);Yua(Ka);Ava(qa);La=Oa;Ma=Na;break}Yua(c);B=0;Ia(40,o|0,142713,15)|0;Na=B;B=0;do if(Na&1)L=104;else{B=0;wa(510,p|0,qa|0);Oa=B;B=0;if(Oa&1){L=104;break}B=0;ya(424,p|0)|0;Oa=B;B=0;if(Oa&1){Oa=Rb()|0;Pa=Q;Yua(p);Qa=Pa;Ra=Oa;break}Yua(p);k[o>>2]=27468;k[ja>>2]=27488;k[qa>>2]=27560;Yua(Ka);Ava(qa);vva(ja);b:do if((k[a>>2]|0)>0){Oa=q+56|0;Pa=q+4|0;Sa=q+56|0;Ta=q+128|0;Ua=q+132|0;Va=q+36|0;Wa=q+52|0;Ya=a+12|0;Za=0;while(1){k[q>>2]=27524;k[Oa>>2]=27544;B=0;wa(508,Sa|0,Pa|0);_a=B;B=0;if(_a&1){L=92;break}k[Ta>>2]=0;k[Ua>>2]=-1;k[q>>2]=27468;k[Oa>>2]=27488;B=0;va(448,Pa|0);_a=B;B=0;if(_a&1){L=93;break}k[Pa>>2]=27560;k[Va>>2]=0;k[Va+4>>2]=0;k[Va+8>>2]=0;k[Va+12>>2]=0;k[Wa>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Pa|0,c|0);_a=B;B=0;if(_a&1){L=91;break}Yua(c);B=0;_a=Xa(242,q|0,k[(k[Ya>>2]|0)+(Za<<2)>>2]|0)|0;$a=B;B=0;if($a&1){L=107;break}B=0;Ia(40,_a|0,149175,1)|0;_a=B;B=0;if(_a&1){L=107;break}B=0;wa(510,s|0,Pa|0);_a=B;B=0;if(_a&1){L=107;break}B=0;ya(424,s|0)|0;_a=B;B=0;if(_a&1){L=108;break}Yua(s);k[q>>2]=27468;k[Oa>>2]=27488;k[Pa>>2]=27560;Yua(Va);Ava(Pa);vva(Oa);Za=Za+1|0;if((Za|0)>=(k[a>>2]|0))break b}if((L|0)==91){Za=Rb()|0;Ya=Q;Yua(c);Yua(Va);Ava(Pa);ab=Ya;bb=Za;L=94}else if((L|0)==92){Za=Rb()|0;cb=Q;db=Za;vva(Oa);Qb(db|0)}else if((L|0)==93){Za=Rb()|0;ab=Q;bb=Za;L=94}else if((L|0)==107){Za=Rb()|0;eb=Q;fb=Za;L=109}else if((L|0)==108){Za=Rb()|0;Ya=Q;Yua(s);eb=Ya;fb=Za;L=109}if((L|0)==94){cb=ab;db=bb;vva(Oa);Qb(db|0)}else if((L|0)==109){k[q>>2]=27468;k[Oa>>2]=27488;k[Pa>>2]=27560;Yua(Va);Ava(Pa);vva(Oa);M=eb;N=fb;Qb(N|0)}}while(0);Za=t+56|0;Ya=t+4|0;k[t>>2]=27524;k[Za>>2]=27544;B=0;wa(508,t+56|0,Ya|0);Wa=B;B=0;if(Wa&1){Wa=Rb()|0;gb=Q;hb=Wa;vva(Za);Qb(hb|0)}k[t+128>>2]=0;k[t+132>>2]=-1;k[t>>2]=27468;k[Za>>2]=27488;B=0;va(448,Ya|0);Wa=B;B=0;do if(Wa&1){Ua=Rb()|0;ib=Q;jb=Ua}else{k[Ya>>2]=27560;Ua=t+36|0;k[Ua>>2]=0;k[Ua+4>>2]=0;k[Ua+8>>2]=0;k[Ua+12>>2]=0;k[t+52>>2]=16;k[c>>2]=0;k[c+4>>2]=0;k[c+8>>2]=0;B=0;wa(509,Ya|0,c|0);Ta=B;B=0;if(Ta&1){Ta=Rb()|0;Sa=Q;Yua(c);Yua(Ua);Ava(Ya);ib=Sa;jb=Ta;break}Yua(c);B=0;Ia(40,t|0,149177,1)|0;Ta=B;B=0;do if(Ta&1)L=122;else{B=0;wa(510,u|0,Ya|0);Sa=B;B=0;if(Sa&1){L=122;break}B=0;ya(424,u|0)|0;Sa=B;B=0;if(Sa&1){Sa=Rb()|0;_a=Q;Yua(u);kb=_a;lb=Sa;break}Yua(u);k[t>>2]=27468;k[Za>>2]=27488;k[Ya>>2]=27560;Yua(Ua);Ava(Ya);vva(Za);r=b;return}while(0);if((L|0)==122){Ta=Rb()|0;kb=Q;lb=Ta}k[t>>2]=27468;k[Za>>2]=27488;k[Ya>>2]=27560;Yua(Ua);Ava(Ya);vva(Za);M=kb;N=lb;Qb(N|0)}while(0);gb=ib;hb=jb;vva(Za);Qb(hb|0)}while(0);if((L|0)==104){Na=Rb()|0;Qa=Q;Ra=Na}k[o>>2]=27468;k[ja>>2]=27488;k[qa>>2]=27560;Yua(Ka);Ava(qa);vva(ja);M=Qa;N=Ra;Qb(N|0)}while(0);Ha=La;Ja=Ma;vva(ja);Qb(Ja|0)}while(0);if((L|0)==101){ka=Rb()|0;Fa=Q;Ga=ka}k[m>>2]=27468;k[pa>>2]=27488;k[oa>>2]=27560;Yua(la);Ava(oa);vva(pa);M=Fa;N=Ga;Qb(N|0)}while(0);Ba=Da;Ca=Ea;vva(pa);Qb(Ca|0)}while(0);if((L|0)==58){ea=Rb()|0;ha=Q;ia=ea}k[h>>2]=27468;k[G>>2]=27488;k[H>>2]=27560;Yua(ba);Ava(H);vva(G);M=ha;N=ia;Qb(N|0)}while(0);$=ca;aa=da;vva(G);Qb(aa|0)}else L=55;while(0);if((L|0)==55){w=Rb()|0;Z=Q;_=w}k[f>>2]=27468;k[K>>2]=27488;k[J>>2]=27560;Yua(v);Ava(J);vva(K);M=Z;N=_;Qb(N|0)}while(0);V=X;W=Y;vva(K);Qb(W|0)}else L=52;while(0);if((L|0)==52){A=Rb()|0;T=Q;U=A}k[d>>2]=27468;k[C>>2]=27488;k[x>>2]=27560;Yua(E);Ava(x);vva(C);M=T;N=U;Qb(N|0)}while(0);O=R;P=S;vva(C);Qb(P|0)}
+-function WCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0;a=r;r=r+224|0;g=a+198|0;h=a+196|0;j=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Dxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=i[h>>0]|0;y=k[b>>2]|0;z=v;b:while(1){if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0)){B=0;v=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;A=B;B=0;if(A&1){C=27;break}if((v|0)==-1){k[b>>2]=0;D=0}else D=y}else D=y;else D=0;v=(D|0)==0;A=k[c>>2]|0;do if(A){if((k[A+12>>2]|0)!=(k[A+16>>2]|0))if(v){E=A;break}else{F=A;G=D;H=z;break b}B=0;I=ya(k[(k[A>>2]|0)+36>>2]|0,A|0)|0;J=B;B=0;if(J&1){C=27;break b}if((I|0)!=-1)if(v){E=A;break}else{F=A;G=D;H=z;break b}else{k[c>>2]=0;C=19;break}}else C=19;while(0);if((C|0)==19){C=0;if(v){F=0;G=D;H=z;break}else E=0}A=i[m>>0]|0;I=(A&1)==0?(A&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+I|0)){B=0;eb(501,m|0,I<<1|0,0);A=B;B=0;if(A&1){C=27;break}if(!(i[m>>0]&1))K=10;else K=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,K|0,0);A=B;B=0;if(A&1){C=27;break}A=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=A+I;L=A}else L=z;A=D+12|0;I=k[A>>2]|0;J=D+16|0;if((I|0)==(k[J>>2]|0)){B=0;M=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;N=B;B=0;if(N&1){C=27;break}else O=M}else O=l[I>>0]|0;if(nxa(O&255,s,L,n,q,x,j,o,p,g)|0){F=E;G=D;H=L;break}I=k[A>>2]|0;if((I|0)==(k[J>>2]|0)){B=0;ya(k[(k[D>>2]|0)+40>>2]|0,D|0)|0;J=B;B=0;if(J&1){C=27;break}else{y=D;z=L;continue}}else{k[A>>2]=I+1;y=D;z=L;continue}}if((C|0)==27){z=Rb()|0;P=z;R=Q;break}z=i[j>>0]|0;if((((z&1)==0?(z&255)>>>1:k[j+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(78,H|0,k[n>>2]|0,e|0,s|0)|0;z=Q;x=B;B=0;if(!(x&1)){x=f;k[x>>2]=y;k[x+4>>2]=z;lAa(j,o,k[p>>2]|0,e);if(G)if((k[G+12>>2]|0)==(k[G+16>>2]|0)){B=0;z=ya(k[(k[G>>2]|0)+36>>2]|0,G|0)|0;x=B;B=0;if(x&1){C=28;break}if((z|0)==-1){k[b>>2]=0;S=0}else S=G}else S=G;else S=0;z=(S|0)==0;do if(F){if((k[F+12>>2]|0)==(k[F+16>>2]|0)){B=0;x=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;y=B;B=0;if(y&1){C=28;break a}if((x|0)==-1){k[c>>2]=0;C=52;break}}if(!z)C=53}else C=52;while(0);if((C|0)==52?z:0)C=53;if((C|0)==53)k[e>>2]=k[e>>2]|2;x=k[b>>2]|0;Yua(m);Yua(j);r=a;return x|0}else C=28}else C=28;while(0);if((C|0)==28){C=Rb()|0;P=C;R=Q}Yua(m);Yua(j);Qb(P|0);return 0}function XCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;p=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;Exa(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,w|0,0);w=B;B=0;a:do if(!(w&1)){d=n+8|0;x=n+1|0;y=(i[n>>0]&1)==0?x:k[d>>2]|0;k[p>>2]=y;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;z=n+4|0;A=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=y;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){B=0;y=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=B;B=0;if(F&1){G=27;break}if((y|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;y=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(y){I=F;break}else{J=F;K=H;L=E;break b}B=0;M=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;N=B;B=0;if(N&1){G=27;break b}if((M|0)!=-1)if(y){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(y){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;M=(F&1)==0?(F&255)>>>1:k[z>>2]|0;if((k[p>>2]|0)==(E+M|0)){B=0;eb(501,n|0,M<<1|0,0);F=B;B=0;if(F&1){G=27;break}if(!(i[n>>0]&1))O=10;else O=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,O|0,0);F=B;B=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?x:k[d>>2]|0;k[p>>2]=F+M;P=F}else P=E;F=H+12|0;M=k[F>>2]|0;N=H+16|0;if((M|0)==(k[N>>2]|0)){B=0;R=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=B;B=0;if(S&1){G=27;break}else T=R}else T=l[M>>0]|0;if(Fxa(T&255,u,v,P,p,A,C,m,q,s,t,g)|0){J=I;K=H;L=P;break}M=k[F>>2]|0;if((M|0)==(k[N>>2]|0)){B=0;ya(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;N=B;B=0;if(N&1){G=27;break}else{D=H;E=P;continue}}else{k[F>>2]=M+1;D=H;E=P;continue}}if((G|0)==27){E=Rb()|0;U=E;V=Q;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}B=0;W=+Za(3,L|0,k[p>>2]|0,e|0);D=B;B=0;if(!(D&1)){o[f>>2]=W;lAa(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){B=0;D=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=B;B=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){B=0;E=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=B;B=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;Yua(n);Yua(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Rb()|0;U=G;V=Q}Yua(n);Yua(m);Qb(U|0);return 0}function YCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;o=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;Exa(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,w|0,0);w=B;B=0;a:do if(!(w&1)){d=n+8|0;x=n+1|0;y=(i[n>>0]&1)==0?x:k[d>>2]|0;k[o>>2]=y;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;z=n+4|0;A=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=y;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){B=0;y=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=B;B=0;if(F&1){G=27;break}if((y|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;y=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(y){I=F;break}else{J=F;K=H;L=E;break b}B=0;M=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;N=B;B=0;if(N&1){G=27;break b}if((M|0)!=-1)if(y){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(y){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;M=(F&1)==0?(F&255)>>>1:k[z>>2]|0;if((k[o>>2]|0)==(E+M|0)){B=0;eb(501,n|0,M<<1|0,0);F=B;B=0;if(F&1){G=27;break}if(!(i[n>>0]&1))O=10;else O=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,O|0,0);F=B;B=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?x:k[d>>2]|0;k[o>>2]=F+M;P=F}else P=E;F=H+12|0;M=k[F>>2]|0;N=H+16|0;if((M|0)==(k[N>>2]|0)){B=0;R=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=B;B=0;if(S&1){G=27;break}else T=R}else T=l[M>>0]|0;if(Fxa(T&255,u,v,P,o,A,C,m,q,s,t,g)|0){J=I;K=H;L=P;break}M=k[F>>2]|0;if((M|0)==(k[N>>2]|0)){B=0;ya(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;N=B;B=0;if(N&1){G=27;break}else{D=H;E=P;continue}}else{k[F>>2]=M+1;D=H;E=P;continue}}if((G|0)==27){E=Rb()|0;U=E;V=Q;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}B=0;W=+Za(4,L|0,k[o>>2]|0,e|0);D=B;B=0;if(!(D&1)){p[f>>3]=W;lAa(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){B=0;D=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=B;B=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){B=0;E=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=B;B=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;Yua(n);Yua(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Rb()|0;U=G;V=Q}Yua(n);Yua(m);Qb(U|0);return 0}function ZCa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0;a=r;r=r+240|0;g=a+200|0;h=a+199|0;j=a+198|0;m=a+184|0;n=a+172|0;o=a+168|0;q=a+8|0;s=a+4|0;t=a;u=a+197|0;v=a+196|0;Exa(m,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[n+(d<<2)>>2]=0;d=d+1|0}if(!(i[n>>0]&1))w=10;else w=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,w|0,0);w=B;B=0;a:do if(!(w&1)){d=n+8|0;x=n+1|0;y=(i[n>>0]&1)==0?x:k[d>>2]|0;k[o>>2]=y;k[s>>2]=q;k[t>>2]=0;i[u>>0]=1;i[v>>0]=69;z=n+4|0;A=i[h>>0]|0;C=i[j>>0]|0;D=k[b>>2]|0;E=y;b:while(1){if(D)if((k[D+12>>2]|0)==(k[D+16>>2]|0)){B=0;y=ya(k[(k[D>>2]|0)+36>>2]|0,D|0)|0;F=B;B=0;if(F&1){G=27;break}if((y|0)==-1){k[b>>2]=0;H=0}else H=D}else H=D;else H=0;y=(H|0)==0;F=k[c>>2]|0;do if(F){if((k[F+12>>2]|0)!=(k[F+16>>2]|0))if(y){I=F;break}else{J=F;K=H;L=E;break b}B=0;M=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;N=B;B=0;if(N&1){G=27;break b}if((M|0)!=-1)if(y){I=F;break}else{J=F;K=H;L=E;break b}else{k[c>>2]=0;G=19;break}}else G=19;while(0);if((G|0)==19){G=0;if(y){J=0;K=H;L=E;break}else I=0}F=i[n>>0]|0;M=(F&1)==0?(F&255)>>>1:k[z>>2]|0;if((k[o>>2]|0)==(E+M|0)){B=0;eb(501,n|0,M<<1|0,0);F=B;B=0;if(F&1){G=27;break}if(!(i[n>>0]&1))O=10;else O=(k[n>>2]&-2)+-1|0;B=0;eb(501,n|0,O|0,0);F=B;B=0;if(F&1){G=27;break}F=(i[n>>0]&1)==0?x:k[d>>2]|0;k[o>>2]=F+M;P=F}else P=E;F=H+12|0;M=k[F>>2]|0;N=H+16|0;if((M|0)==(k[N>>2]|0)){B=0;R=ya(k[(k[H>>2]|0)+36>>2]|0,H|0)|0;S=B;B=0;if(S&1){G=27;break}else T=R}else T=l[M>>0]|0;if(Fxa(T&255,u,v,P,o,A,C,m,q,s,t,g)|0){J=I;K=H;L=P;break}M=k[F>>2]|0;if((M|0)==(k[N>>2]|0)){B=0;ya(k[(k[H>>2]|0)+40>>2]|0,H|0)|0;N=B;B=0;if(N&1){G=27;break}else{D=H;E=P;continue}}else{k[F>>2]=M+1;D=H;E=P;continue}}if((G|0)==27){E=Rb()|0;U=E;V=Q;break}E=i[m>>0]|0;if(!((i[u>>0]|0)==0?1:(((E&1)==0?(E&255)>>>1:k[m+4>>2]|0)|0)==0)?(E=k[s>>2]|0,(E-q|0)<160):0){D=k[t>>2]|0;k[s>>2]=E+4;k[E>>2]=D}B=0;W=+Za(5,L|0,k[o>>2]|0,e|0);D=B;B=0;if(!(D&1)){p[f>>3]=W;lAa(m,q,k[s>>2]|0,e);if(K)if((k[K+12>>2]|0)==(k[K+16>>2]|0)){B=0;D=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;E=B;B=0;if(E&1){G=28;break}if((D|0)==-1){k[b>>2]=0;X=0}else X=K}else X=K;else X=0;D=(X|0)==0;do if(J){if((k[J+12>>2]|0)==(k[J+16>>2]|0)){B=0;E=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;C=B;B=0;if(C&1){G=28;break a}if((E|0)==-1){k[c>>2]=0;G=52;break}}if(!D)G=53}else G=52;while(0);if((G|0)==52?D:0)G=53;if((G|0)==53)k[e>>2]=k[e>>2]|2;E=k[b>>2]|0;Yua(n);Yua(m);r=a;return E|0}else G=28}else G=28;while(0);if((G|0)==28){G=Rb()|0;U=G;V=Q}Yua(n);Yua(m);Qb(U|0);return 0}function _Ca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=esa(b)|0;b=yta(a,c,f)|0;if((d|0)!=0?(B=0,ya(444,d|0)|0,d=B,B=0,d&1):0){d=Rb(0)|0;Dd(d)}r=e;return b|0}function $Ca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;h=r;r=r+112|0;j=h;l=(d-c|0)/12|0;do if(l>>>0>100){m=lua(l)|0;if((m|0)==0?(B=0,fb(7),n=B,B=0,n&1):0){o=0;p=6;break}q=m;s=m;p=11}else{q=0;s=j;p=11}while(0);a:do if((p|0)==11){j=c;m=0;n=l;t=s;while(1){if((j|0)==(d|0)){u=m;v=n;break}w=i[j>>0]|0;if(!(w&1))x=(w&255)>>>1;else x=k[j+4>>2]|0;if(!x){i[t>>0]=2;y=m+1|0;z=n+-1|0}else{i[t>>0]=1;y=m;z=n}j=j+12|0;m=y;n=z;t=t+1|0}t=0;n=u;m=v;b:while(1){j=k[a>>2]|0;do if(j){w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){B=0;A=ya(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=B;B=0;if(C&1){p=5;break b}else D=A}else D=k[w>>2]|0;if((D|0)==-1){k[a>>2]=0;E=1;break}else{E=(k[a>>2]|0)==0;break}}else E=1;while(0);j=k[b>>2]|0;if(j){w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){B=0;A=ya(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;C=B;B=0;if(C&1){p=5;break}else F=A}else F=k[w>>2]|0;if((F|0)==-1){k[b>>2]=0;G=0;H=1}else{G=j;H=0}}else{G=0;H=1}j=k[a>>2]|0;if(!((m|0)!=0&(E^H))){I=j;J=G;p=35;break}w=k[j+12>>2]|0;if((w|0)==(k[j+16>>2]|0)){B=0;A=ya(k[(k[j>>2]|0)+36>>2]|0,j|0)|0;j=B;B=0;if(j&1){p=5;break}else K=A}else K=k[w>>2]|0;if(!g){B=0;w=Xa(k[(k[e>>2]|0)+28>>2]|0,e|0,K|0)|0;A=B;B=0;if(A&1){p=5;break}else L=w}else L=K;w=t+1|0;A=0;j=c;C=n;M=m;N=s;while(1){if((j|0)==(d|0))break;do if((i[N>>0]|0)==1){if(!(i[j>>0]&1))O=j+4|0;else O=k[j+8>>2]|0;P=k[O+(t<<2)>>2]|0;if(!g){B=0;R=Xa(k[(k[e>>2]|0)+28>>2]|0,e|0,P|0)|0;S=B;B=0;if(S&1){p=4;break b}else T=R}else T=P;if((L|0)!=(T|0)){i[N>>0]=0;U=A;V=C;W=M+-1|0;break}P=i[j>>0]|0;if(!(P&1))X=(P&255)>>>1;else X=k[j+4>>2]|0;if((X|0)==(w|0)){i[N>>0]=2;U=1;V=C+1|0;W=M+-1|0}else{U=1;V=C;W=M}}else{U=A;V=C;W=M}while(0);A=U;j=j+12|0;C=V;M=W;N=N+1|0}if(!A){t=w;n=C;m=M;continue}N=k[a>>2]|0;j=N+12|0;P=k[j>>2]|0;if((P|0)==(k[N+16>>2]|0)){B=0;ya(k[(k[N>>2]|0)+40>>2]|0,N|0)|0;N=B;B=0;if(N&1){p=5;break}}else k[j>>2]=P+4;if((C+M|0)>>>0>1){Y=c;Z=C;_=s}else{t=w;n=C;m=M;continue}while(1){if((Y|0)==(d|0)){t=w;n=Z;m=M;continue b}if((i[_>>0]|0)==2){P=i[Y>>0]|0;if(!(P&1))$=(P&255)>>>1;else $=k[Y+4>>2]|0;if(($|0)!=(w|0)){i[_>>0]=0;aa=Z+-1|0}else aa=Z}else aa=Z;Y=Y+12|0;Z=aa;_=_+1|0}}if((p|0)==4){m=Rb()|0;ba=q;ca=m;da=Q;break}else if((p|0)==5){m=Rb()|0;ba=q;ca=m;da=Q;break}else if((p|0)==35){do if(I){m=k[I+12>>2]|0;if((m|0)==(k[I+16>>2]|0)){B=0;n=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;t=B;B=0;if(t&1){o=q;p=6;break a}else ea=n}else ea=k[m>>2]|0;if((ea|0)==-1){k[a>>2]=0;fa=1;break}else{fa=(k[a>>2]|0)==0;break}}else fa=1;while(0);do if(J){m=k[J+12>>2]|0;if((m|0)==(k[J+16>>2]|0)){B=0;n=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;t=B;B=0;if(t&1){o=q;p=6;break a}else ga=n}else ga=k[m>>2]|0;if((ga|0)!=-1)if(fa){ha=c;ia=s;break}else{p=84;break}else{k[b>>2]=0;p=82;break}}else p=82;while(0);if((p|0)==82)if(fa)p=84;else{ha=c;ia=s}if((p|0)==84){k[f>>2]=k[f>>2]|2;ha=c;ia=s}while(1){if((ha|0)==(d|0)){p=88;break}if((i[ia>>0]|0)==2){ja=ha;break}ha=ha+12|0;ia=ia+1|0}if((p|0)==88){k[f>>2]=k[f>>2]|4;ja=d}if(q)mua(q);r=h;return ja|0}}while(0);if((p|0)==6){p=Rb()|0;ba=o;ca=p;da=Q}if(ba)mua(ba);Qb(ca|0);return 0}function aDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=ACa(d)|0;Gxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,s|0,0);s=B;B=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;x=k[b>>2]|0;y=u;b:while(1){if(x){u=k[x+12>>2]|0;if((u|0)==(k[x+16>>2]|0)){B=0;z=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;A=B;B=0;if(A&1){C=28;break}else D=z}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=x;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){z=k[u+12>>2]|0;if((z|0)==(k[u+16>>2]|0)){B=0;A=ya(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=B;B=0;if(G&1){C=28;break b}else H=A}else H=k[z>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=y;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=y;break}else I=0}u=i[l>>0]|0;z=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(y+z|0)){B=0;eb(501,l|0,z<<1|0,0);u=B;B=0;if(u&1){C=28;break}if(!(i[l>>0]&1))M=10;else M=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,M|0,0);u=B;B=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+z;N=u}else N=y;u=E+12|0;z=k[u>>2]|0;A=E+16|0;if((z|0)==(k[A>>2]|0)){B=0;G=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){C=28;break}else P=G}else P=k[z>>2]|0;if(Cxa(P,q,N,m,p,w,j,n,o,g)|0){J=I;K=E;L=N;break}z=k[u>>2]|0;if((z|0)==(k[A>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;A=B;B=0;if(A&1){C=28;break}else{x=E;y=N;continue}}else{k[u>>2]=z+4;x=E;y=N;continue}}if((C|0)==28){y=Rb()|0;R=y;S=Q;break}y=i[j>>0]|0;if((((y&1)==0?(y&255)>>>1:k[j+4>>2]|0)|0)!=0?(y=k[o>>2]|0,(y-n|0)<160):0){x=k[p>>2]|0;k[o>>2]=y+4;k[y>>2]=x}B=0;x=cb(73,L|0,k[m>>2]|0,e|0,q|0)|0;y=B;B=0;if(!(y&1)){k[f>>2]=x;lAa(j,n,k[o>>2]|0,e);if(K){x=k[K+12>>2]|0;if((x|0)==(k[K+16>>2]|0)){B=0;y=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=B;B=0;if(w&1){C=29;break}else T=y}else T=k[x>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){x=k[J+12>>2]|0;if((x|0)==(k[J+16>>2]|0)){B=0;y=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=B;B=0;if(w&1){C=29;break a}else V=y}else V=k[x>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;x=k[b>>2]|0;Yua(l);Yua(j);r=a;return x|0}else C=29}else C=29;while(0);if((C|0)==29){C=Rb()|0;R=C;S=Q}Yua(l);Yua(j);Qb(R|0);return 0}function bDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=ACa(d)|0;Gxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,s|0,0);s=B;B=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;x=k[b>>2]|0;y=u;b:while(1){if(x){u=k[x+12>>2]|0;if((u|0)==(k[x+16>>2]|0)){B=0;z=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;A=B;B=0;if(A&1){C=28;break}else D=z}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=x;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){z=k[u+12>>2]|0;if((z|0)==(k[u+16>>2]|0)){B=0;A=ya(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=B;B=0;if(G&1){C=28;break b}else H=A}else H=k[z>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=y;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=y;break}else I=0}u=i[l>>0]|0;z=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(y+z|0)){B=0;eb(501,l|0,z<<1|0,0);u=B;B=0;if(u&1){C=28;break}if(!(i[l>>0]&1))M=10;else M=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,M|0,0);u=B;B=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+z;N=u}else N=y;u=E+12|0;z=k[u>>2]|0;A=E+16|0;if((z|0)==(k[A>>2]|0)){B=0;G=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){C=28;break}else P=G}else P=k[z>>2]|0;if(Cxa(P,q,N,m,p,w,j,n,o,g)|0){J=I;K=E;L=N;break}z=k[u>>2]|0;if((z|0)==(k[A>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;A=B;B=0;if(A&1){C=28;break}else{x=E;y=N;continue}}else{k[u>>2]=z+4;x=E;y=N;continue}}if((C|0)==28){y=Rb()|0;R=y;S=Q;break}y=i[j>>0]|0;if((((y&1)==0?(y&255)>>>1:k[j+4>>2]|0)|0)!=0?(y=k[o>>2]|0,(y-n|0)<160):0){x=k[p>>2]|0;k[o>>2]=y+4;k[y>>2]=x}B=0;x=cb(74,L|0,k[m>>2]|0,e|0,q|0)|0;y=Q;w=B;B=0;if(!(w&1)){w=f;k[w>>2]=x;k[w+4>>2]=y;lAa(j,n,k[o>>2]|0,e);if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){B=0;w=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;x=B;B=0;if(x&1){C=29;break}else T=w}else T=k[y>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){y=k[J+12>>2]|0;if((y|0)==(k[J+16>>2]|0)){B=0;w=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;x=B;B=0;if(x&1){C=29;break a}else V=w}else V=k[y>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;Yua(l);Yua(j);r=a;return y|0}else C=29}else C=29;while(0);if((C|0)==29){C=Rb()|0;R=C;S=Q}Yua(l);Yua(j);Qb(R|0);return 0}function cDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;p=a+4|0;q=a;s=ACa(d)|0;Gxa(l,d,g,h);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))t=10;else t=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,t|0,0);t=B;B=0;a:do if(!(t&1)){d=m+8|0;u=m+1|0;v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v;k[p>>2]=o;k[q>>2]=0;w=m+4|0;x=k[h>>2]|0;y=k[b>>2]|0;z=v;b:while(1){if(y){v=k[y+12>>2]|0;if((v|0)==(k[y+16>>2]|0)){B=0;A=ya(k[(k[y>>2]|0)+36>>2]|0,y|0)|0;C=B;B=0;if(C&1){D=28;break}else E=A}else E=k[v>>2]|0;if((E|0)==-1){k[b>>2]=0;F=0;G=1}else{F=y;G=0}}else{F=0;G=1}v=k[c>>2]|0;do if(v){A=k[v+12>>2]|0;if((A|0)==(k[v+16>>2]|0)){B=0;C=ya(k[(k[v>>2]|0)+36>>2]|0,v|0)|0;H=B;B=0;if(H&1){D=28;break b}else I=C}else I=k[A>>2]|0;if((I|0)!=-1)if(G){J=v;break}else{K=v;L=F;M=z;break b}else{k[c>>2]=0;D=20;break}}else D=20;while(0);if((D|0)==20){D=0;if(G){K=0;L=F;M=z;break}else J=0}v=i[m>>0]|0;A=(v&1)==0?(v&255)>>>1:k[w>>2]|0;if((k[n>>2]|0)==(z+A|0)){B=0;eb(501,m|0,A<<1|0,0);v=B;B=0;if(v&1){D=28;break}if(!(i[m>>0]&1))N=10;else N=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,N|0,0);v=B;B=0;if(v&1){D=28;break}v=(i[m>>0]&1)==0?u:k[d>>2]|0;k[n>>2]=v+A;O=v}else O=z;v=F+12|0;A=k[v>>2]|0;C=F+16|0;if((A|0)==(k[C>>2]|0)){B=0;H=ya(k[(k[F>>2]|0)+36>>2]|0,F|0)|0;P=B;B=0;if(P&1){D=28;break}else R=H}else R=k[A>>2]|0;if(Cxa(R,s,O,n,q,x,l,o,p,g)|0){K=J;L=F;M=O;break}A=k[v>>2]|0;if((A|0)==(k[C>>2]|0)){B=0;ya(k[(k[F>>2]|0)+40>>2]|0,F|0)|0;C=B;B=0;if(C&1){D=28;break}else{y=F;z=O;continue}}else{k[v>>2]=A+4;y=F;z=O;continue}}if((D|0)==28){z=Rb()|0;S=z;T=Q;break}z=i[l>>0]|0;if((((z&1)==0?(z&255)>>>1:k[l+4>>2]|0)|0)!=0?(z=k[p>>2]|0,(z-o|0)<160):0){y=k[q>>2]|0;k[p>>2]=z+4;k[z>>2]=y}B=0;y=cb(75,M|0,k[n>>2]|0,e|0,s|0)|0;z=B;B=0;if(!(z&1)){j[f>>1]=y;lAa(l,o,k[p>>2]|0,e);if(L){y=k[L+12>>2]|0;if((y|0)==(k[L+16>>2]|0)){B=0;z=ya(k[(k[L>>2]|0)+36>>2]|0,L|0)|0;x=B;B=0;if(x&1){D=29;break}else U=z}else U=k[y>>2]|0;if((U|0)==-1){k[b>>2]=0;V=1}else V=0}else V=1;do if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){B=0;z=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;x=B;B=0;if(x&1){D=29;break a}else W=z}else W=k[y>>2]|0;if((W|0)!=-1)if(V)break;else{D=56;break}else{k[c>>2]=0;D=54;break}}else D=54;while(0);if((D|0)==54?V:0)D=56;if((D|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;Yua(m);Yua(l);r=a;return y|0}else D=29}else D=29;while(0);if((D|0)==29){D=Rb()|0;S=D;T=Q}Yua(m);Yua(l);Qb(S|0);return 0}function dDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=ACa(d)|0;Gxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,s|0,0);s=B;B=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;x=k[b>>2]|0;y=u;b:while(1){if(x){u=k[x+12>>2]|0;if((u|0)==(k[x+16>>2]|0)){B=0;z=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;A=B;B=0;if(A&1){C=28;break}else D=z}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=x;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){z=k[u+12>>2]|0;if((z|0)==(k[u+16>>2]|0)){B=0;A=ya(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=B;B=0;if(G&1){C=28;break b}else H=A}else H=k[z>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=y;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=y;break}else I=0}u=i[l>>0]|0;z=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(y+z|0)){B=0;eb(501,l|0,z<<1|0,0);u=B;B=0;if(u&1){C=28;break}if(!(i[l>>0]&1))M=10;else M=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,M|0,0);u=B;B=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+z;N=u}else N=y;u=E+12|0;z=k[u>>2]|0;A=E+16|0;if((z|0)==(k[A>>2]|0)){B=0;G=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){C=28;break}else P=G}else P=k[z>>2]|0;if(Cxa(P,q,N,m,p,w,j,n,o,g)|0){J=I;K=E;L=N;break}z=k[u>>2]|0;if((z|0)==(k[A>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;A=B;B=0;if(A&1){C=28;break}else{x=E;y=N;continue}}else{k[u>>2]=z+4;x=E;y=N;continue}}if((C|0)==28){y=Rb()|0;R=y;S=Q;break}y=i[j>>0]|0;if((((y&1)==0?(y&255)>>>1:k[j+4>>2]|0)|0)!=0?(y=k[o>>2]|0,(y-n|0)<160):0){x=k[p>>2]|0;k[o>>2]=y+4;k[y>>2]=x}B=0;x=cb(76,L|0,k[m>>2]|0,e|0,q|0)|0;y=B;B=0;if(!(y&1)){k[f>>2]=x;lAa(j,n,k[o>>2]|0,e);if(K){x=k[K+12>>2]|0;if((x|0)==(k[K+16>>2]|0)){B=0;y=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=B;B=0;if(w&1){C=29;break}else T=y}else T=k[x>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){x=k[J+12>>2]|0;if((x|0)==(k[J+16>>2]|0)){B=0;y=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=B;B=0;if(w&1){C=29;break a}else V=y}else V=k[x>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;x=k[b>>2]|0;Yua(l);Yua(j);r=a;return x|0}else C=29}else C=29;while(0);if((C|0)==29){C=Rb()|0;R=C;S=Q}Yua(l);Yua(j);Qb(R|0);return 0}function eDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=ACa(d)|0;Gxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,s|0,0);s=B;B=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;x=k[b>>2]|0;y=u;b:while(1){if(x){u=k[x+12>>2]|0;if((u|0)==(k[x+16>>2]|0)){B=0;z=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;A=B;B=0;if(A&1){C=28;break}else D=z}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=x;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){z=k[u+12>>2]|0;if((z|0)==(k[u+16>>2]|0)){B=0;A=ya(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=B;B=0;if(G&1){C=28;break b}else H=A}else H=k[z>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=y;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=y;break}else I=0}u=i[l>>0]|0;z=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(y+z|0)){B=0;eb(501,l|0,z<<1|0,0);u=B;B=0;if(u&1){C=28;break}if(!(i[l>>0]&1))M=10;else M=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,M|0,0);u=B;B=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+z;N=u}else N=y;u=E+12|0;z=k[u>>2]|0;A=E+16|0;if((z|0)==(k[A>>2]|0)){B=0;G=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){C=28;break}else P=G}else P=k[z>>2]|0;if(Cxa(P,q,N,m,p,w,j,n,o,g)|0){J=I;K=E;L=N;break}z=k[u>>2]|0;if((z|0)==(k[A>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;A=B;B=0;if(A&1){C=28;break}else{x=E;y=N;continue}}else{k[u>>2]=z+4;x=E;y=N;continue}}if((C|0)==28){y=Rb()|0;R=y;S=Q;break}y=i[j>>0]|0;if((((y&1)==0?(y&255)>>>1:k[j+4>>2]|0)|0)!=0?(y=k[o>>2]|0,(y-n|0)<160):0){x=k[p>>2]|0;k[o>>2]=y+4;k[y>>2]=x}B=0;x=cb(77,L|0,k[m>>2]|0,e|0,q|0)|0;y=B;B=0;if(!(y&1)){k[f>>2]=x;lAa(j,n,k[o>>2]|0,e);if(K){x=k[K+12>>2]|0;if((x|0)==(k[K+16>>2]|0)){B=0;y=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;w=B;B=0;if(w&1){C=29;break}else T=y}else T=k[x>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){x=k[J+12>>2]|0;if((x|0)==(k[J+16>>2]|0)){B=0;y=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;w=B;B=0;if(w&1){C=29;break a}else V=y}else V=k[x>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;x=k[b>>2]|0;Yua(l);Yua(j);r=a;return x|0}else C=29}else C=29;while(0);if((C|0)==29){C=Rb()|0;R=C;S=Q}Yua(l);Yua(j);Qb(R|0);return 0}function fDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0;a=r;r=r+304|0;g=a+200|0;h=a+196|0;j=a+184|0;l=a+172|0;m=a+168|0;n=a+8|0;o=a+4|0;p=a;q=ACa(d)|0;Gxa(j,d,g,h);d=0;while(1){if((d|0)==3)break;k[l+(d<<2)>>2]=0;d=d+1|0}if(!(i[l>>0]&1))s=10;else s=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,s|0,0);s=B;B=0;a:do if(!(s&1)){d=l+8|0;t=l+1|0;u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u;k[o>>2]=n;k[p>>2]=0;v=l+4|0;w=k[h>>2]|0;x=k[b>>2]|0;y=u;b:while(1){if(x){u=k[x+12>>2]|0;if((u|0)==(k[x+16>>2]|0)){B=0;z=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;A=B;B=0;if(A&1){C=28;break}else D=z}else D=k[u>>2]|0;if((D|0)==-1){k[b>>2]=0;E=0;F=1}else{E=x;F=0}}else{E=0;F=1}u=k[c>>2]|0;do if(u){z=k[u+12>>2]|0;if((z|0)==(k[u+16>>2]|0)){B=0;A=ya(k[(k[u>>2]|0)+36>>2]|0,u|0)|0;G=B;B=0;if(G&1){C=28;break b}else H=A}else H=k[z>>2]|0;if((H|0)!=-1)if(F){I=u;break}else{J=u;K=E;L=y;break b}else{k[c>>2]=0;C=20;break}}else C=20;while(0);if((C|0)==20){C=0;if(F){J=0;K=E;L=y;break}else I=0}u=i[l>>0]|0;z=(u&1)==0?(u&255)>>>1:k[v>>2]|0;if((k[m>>2]|0)==(y+z|0)){B=0;eb(501,l|0,z<<1|0,0);u=B;B=0;if(u&1){C=28;break}if(!(i[l>>0]&1))M=10;else M=(k[l>>2]&-2)+-1|0;B=0;eb(501,l|0,M|0,0);u=B;B=0;if(u&1){C=28;break}u=(i[l>>0]&1)==0?t:k[d>>2]|0;k[m>>2]=u+z;N=u}else N=y;u=E+12|0;z=k[u>>2]|0;A=E+16|0;if((z|0)==(k[A>>2]|0)){B=0;G=ya(k[(k[E>>2]|0)+36>>2]|0,E|0)|0;O=B;B=0;if(O&1){C=28;break}else P=G}else P=k[z>>2]|0;if(Cxa(P,q,N,m,p,w,j,n,o,g)|0){J=I;K=E;L=N;break}z=k[u>>2]|0;if((z|0)==(k[A>>2]|0)){B=0;ya(k[(k[E>>2]|0)+40>>2]|0,E|0)|0;A=B;B=0;if(A&1){C=28;break}else{x=E;y=N;continue}}else{k[u>>2]=z+4;x=E;y=N;continue}}if((C|0)==28){y=Rb()|0;R=y;S=Q;break}y=i[j>>0]|0;if((((y&1)==0?(y&255)>>>1:k[j+4>>2]|0)|0)!=0?(y=k[o>>2]|0,(y-n|0)<160):0){x=k[p>>2]|0;k[o>>2]=y+4;k[y>>2]=x}B=0;x=cb(78,L|0,k[m>>2]|0,e|0,q|0)|0;y=Q;w=B;B=0;if(!(w&1)){w=f;k[w>>2]=x;k[w+4>>2]=y;lAa(j,n,k[o>>2]|0,e);if(K){y=k[K+12>>2]|0;if((y|0)==(k[K+16>>2]|0)){B=0;w=ya(k[(k[K>>2]|0)+36>>2]|0,K|0)|0;x=B;B=0;if(x&1){C=29;break}else T=w}else T=k[y>>2]|0;if((T|0)==-1){k[b>>2]=0;U=1}else U=0}else U=1;do if(J){y=k[J+12>>2]|0;if((y|0)==(k[J+16>>2]|0)){B=0;w=ya(k[(k[J>>2]|0)+36>>2]|0,J|0)|0;x=B;B=0;if(x&1){C=29;break a}else V=w}else V=k[y>>2]|0;if((V|0)!=-1)if(U)break;else{C=56;break}else{k[c>>2]=0;C=54;break}}else C=54;while(0);if((C|0)==54?U:0)C=56;if((C|0)==56)k[e>>2]=k[e>>2]|2;y=k[b>>2]|0;Yua(l);Yua(j);r=a;return y|0}else C=29}else C=29;while(0);if((C|0)==29){C=Rb()|0;R=C;S=Q}Yua(l);Yua(j);Qb(R|0);return 0}function gDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;p=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;Hxa(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,v|0,0);v=B;B=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x;k[q>>2]=p;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;y=m+4|0;z=k[h>>2]|0;A=k[j>>2]|0;C=k[b>>2]|0;D=x;b:while(1){if(C){x=k[C+12>>2]|0;if((x|0)==(k[C+16>>2]|0)){B=0;E=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=B;B=0;if(F&1){G=28;break}else H=E}else H=k[x>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}x=k[c>>2]|0;do if(x){E=k[x+12>>2]|0;if((E|0)==(k[x+16>>2]|0)){B=0;F=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;K=B;B=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){M=x;break}else{N=x;O=I;P=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){N=0;O=I;P=D;break}else M=0}x=i[m>>0]|0;E=(x&1)==0?(x&255)>>>1:k[y>>2]|0;if((k[n>>2]|0)==(D+E|0)){B=0;eb(501,m|0,E<<1|0,0);x=B;B=0;if(x&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,R|0,0);x=B;B=0;if(x&1){G=28;break}x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x+E;S=x}else S=D;x=I+12|0;E=k[x>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){B=0;K=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=B;B=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(Ixa(U,t,u,S,n,z,A,l,p,q,s,g)|0){N=M;O=I;P=S;break}E=k[x>>2]|0;if((E|0)==(k[F>>2]|0)){B=0;ya(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=B;B=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[x>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Rb()|0;V=D;W=Q;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-p|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}B=0;X=+Za(3,P|0,k[n>>2]|0,e|0);C=B;B=0;if(!(C&1)){o[f>>2]=X;lAa(l,p,k[q>>2]|0,e);if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){B=0;D=ya(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;A=B;B=0;if(A&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(N){C=k[N+12>>2]|0;if((C|0)==(k[N+16>>2]|0)){B=0;D=ya(k[(k[N>>2]|0)+36>>2]|0,N|0)|0;A=B;B=0;if(A&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;Yua(m);Yua(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Rb()|0;V=G;W=Q}Yua(m);Yua(l);Qb(V|0);return 0}function hDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;Hxa(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,v|0,0);v=B;B=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x;k[q>>2]=o;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;y=m+4|0;z=k[h>>2]|0;A=k[j>>2]|0;C=k[b>>2]|0;D=x;b:while(1){if(C){x=k[C+12>>2]|0;if((x|0)==(k[C+16>>2]|0)){B=0;E=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=B;B=0;if(F&1){G=28;break}else H=E}else H=k[x>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}x=k[c>>2]|0;do if(x){E=k[x+12>>2]|0;if((E|0)==(k[x+16>>2]|0)){B=0;F=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;K=B;B=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){M=x;break}else{N=x;O=I;P=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){N=0;O=I;P=D;break}else M=0}x=i[m>>0]|0;E=(x&1)==0?(x&255)>>>1:k[y>>2]|0;if((k[n>>2]|0)==(D+E|0)){B=0;eb(501,m|0,E<<1|0,0);x=B;B=0;if(x&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,R|0,0);x=B;B=0;if(x&1){G=28;break}x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x+E;S=x}else S=D;x=I+12|0;E=k[x>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){B=0;K=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=B;B=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(Ixa(U,t,u,S,n,z,A,l,o,q,s,g)|0){N=M;O=I;P=S;break}E=k[x>>2]|0;if((E|0)==(k[F>>2]|0)){B=0;ya(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=B;B=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[x>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Rb()|0;V=D;W=Q;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-o|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}B=0;X=+Za(4,P|0,k[n>>2]|0,e|0);C=B;B=0;if(!(C&1)){p[f>>3]=X;lAa(l,o,k[q>>2]|0,e);if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){B=0;D=ya(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;A=B;B=0;if(A&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(N){C=k[N+12>>2]|0;if((C|0)==(k[N+16>>2]|0)){B=0;D=ya(k[(k[N>>2]|0)+36>>2]|0,N|0)|0;A=B;B=0;if(A&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;Yua(m);Yua(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Rb()|0;V=G;W=Q}Yua(m);Yua(l);Qb(V|0);return 0}function iDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0,Z=0,_=0;a=r;r=r+352|0;g=a+208|0;h=a+200|0;j=a+196|0;l=a+184|0;m=a+172|0;n=a+168|0;o=a+8|0;q=a+4|0;s=a;t=a+337|0;u=a+336|0;Hxa(l,d,g,h,j);d=0;while(1){if((d|0)==3)break;k[m+(d<<2)>>2]=0;d=d+1|0}if(!(i[m>>0]&1))v=10;else v=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,v|0,0);v=B;B=0;a:do if(!(v&1)){d=m+8|0;w=m+1|0;x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x;k[q>>2]=o;k[s>>2]=0;i[t>>0]=1;i[u>>0]=69;y=m+4|0;z=k[h>>2]|0;A=k[j>>2]|0;C=k[b>>2]|0;D=x;b:while(1){if(C){x=k[C+12>>2]|0;if((x|0)==(k[C+16>>2]|0)){B=0;E=ya(k[(k[C>>2]|0)+36>>2]|0,C|0)|0;F=B;B=0;if(F&1){G=28;break}else H=E}else H=k[x>>2]|0;if((H|0)==-1){k[b>>2]=0;I=0;J=1}else{I=C;J=0}}else{I=0;J=1}x=k[c>>2]|0;do if(x){E=k[x+12>>2]|0;if((E|0)==(k[x+16>>2]|0)){B=0;F=ya(k[(k[x>>2]|0)+36>>2]|0,x|0)|0;K=B;B=0;if(K&1){G=28;break b}else L=F}else L=k[E>>2]|0;if((L|0)!=-1)if(J){M=x;break}else{N=x;O=I;P=D;break b}else{k[c>>2]=0;G=20;break}}else G=20;while(0);if((G|0)==20){G=0;if(J){N=0;O=I;P=D;break}else M=0}x=i[m>>0]|0;E=(x&1)==0?(x&255)>>>1:k[y>>2]|0;if((k[n>>2]|0)==(D+E|0)){B=0;eb(501,m|0,E<<1|0,0);x=B;B=0;if(x&1){G=28;break}if(!(i[m>>0]&1))R=10;else R=(k[m>>2]&-2)+-1|0;B=0;eb(501,m|0,R|0,0);x=B;B=0;if(x&1){G=28;break}x=(i[m>>0]&1)==0?w:k[d>>2]|0;k[n>>2]=x+E;S=x}else S=D;x=I+12|0;E=k[x>>2]|0;F=I+16|0;if((E|0)==(k[F>>2]|0)){B=0;K=ya(k[(k[I>>2]|0)+36>>2]|0,I|0)|0;T=B;B=0;if(T&1){G=28;break}else U=K}else U=k[E>>2]|0;if(Ixa(U,t,u,S,n,z,A,l,o,q,s,g)|0){N=M;O=I;P=S;break}E=k[x>>2]|0;if((E|0)==(k[F>>2]|0)){B=0;ya(k[(k[I>>2]|0)+40>>2]|0,I|0)|0;F=B;B=0;if(F&1){G=28;break}else{C=I;D=S;continue}}else{k[x>>2]=E+4;C=I;D=S;continue}}if((G|0)==28){D=Rb()|0;V=D;W=Q;break}D=i[l>>0]|0;if(!((i[t>>0]|0)==0?1:(((D&1)==0?(D&255)>>>1:k[l+4>>2]|0)|0)==0)?(D=k[q>>2]|0,(D-o|0)<160):0){C=k[s>>2]|0;k[q>>2]=D+4;k[D>>2]=C}B=0;X=+Za(5,P|0,k[n>>2]|0,e|0);C=B;B=0;if(!(C&1)){p[f>>3]=X;lAa(l,o,k[q>>2]|0,e);if(O){C=k[O+12>>2]|0;if((C|0)==(k[O+16>>2]|0)){B=0;D=ya(k[(k[O>>2]|0)+36>>2]|0,O|0)|0;A=B;B=0;if(A&1){G=29;break}else Y=D}else Y=k[C>>2]|0;if((Y|0)==-1){k[b>>2]=0;Z=1}else Z=0}else Z=1;do if(N){C=k[N+12>>2]|0;if((C|0)==(k[N+16>>2]|0)){B=0;D=ya(k[(k[N>>2]|0)+36>>2]|0,N|0)|0;A=B;B=0;if(A&1){G=29;break a}else _=D}else _=k[C>>2]|0;if((_|0)!=-1)if(Z)break;else{G=56;break}else{k[c>>2]=0;G=54;break}}else G=54;while(0);if((G|0)==54?Z:0)G=56;if((G|0)==56)k[e>>2]=k[e>>2]|2;C=k[b>>2]|0;Yua(m);Yua(l);r=a;return C|0}else G=29}else G=29;while(0);if((G|0)==29){G=Rb()|0;V=G;W=Q}Yua(m);Yua(l);Qb(V|0);return 0}function jDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=r;r=r+16|0;g=f;k[g>>2]=e;e=esa(c)|0;c=wta(a,b,d,g)|0;if((e|0)!=0?(B=0,ya(444,e|0)|0,e=B,B=0,e&1):0){e=Rb(0)|0;Dd(e)}r=f;return c|0}function kDa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e;k[f>>2]=d;d=esa(b)|0;B=0;b=Ia(58,a|0,c|0,f|0)|0;f=B;B=0;if(f&1){f=Rb()|0;if((d|0)!=0?(B=0,ya(444,d|0)|0,c=B,B=0,c&1):0){c=Rb(0)|0;Dd(c)}Qb(f|0)}else{if((d|0)!=0?(B=0,ya(444,d|0)|0,d=B,B=0,d&1):0){d=Rb(0)|0;Dd(d)}r=e;return b|0}return 0}function lDa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,s=0;g=r;r=r+16|0;h=g;j=k[a>>2]|0;a:do if(!j)l=0;else{m=d;n=b;o=m-n>>2;p=e+12|0;q=k[p>>2]|0;s=(q|0)>(o|0)?q-o|0:0;o=c;q=o-n|0;n=q>>2;if((q|0)>0?(Rc[k[(k[j>>2]|0)+48>>2]&63](j,b,n)|0)!=(n|0):0){k[a>>2]=0;l=0;break}do if((s|0)>0){jva(h,s,f);B=0;n=Ia(k[(k[j>>2]|0)+48>>2]|0,j|0,((i[h>>0]&1)==0?h+4|0:k[h+8>>2]|0)|0,s|0)|0;q=B;B=0;if(q&1){q=Rb()|0;kva(h);Qb(q|0)}if((n|0)==(s|0)){kva(h);break}else{k[a>>2]=0;kva(h);l=0;break a}}while(0);s=m-o|0;n=s>>2;if((s|0)>0?(Rc[k[(k[j>>2]|0)+48>>2]&63](j,c,n)|0)!=(n|0):0){k[a>>2]=0;l=0;break}k[p>>2]=0;l=j}while(0);r=g;return l|0}function mDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=k[a>>2]|0;do if(f)if((k[f+12>>2]|0)==(k[f+16>>2]|0))if((Hc[k[(k[f>>2]|0)+36>>2]&511](f)|0)==-1){k[a>>2]=0;g=0;break}else{g=k[a>>2]|0;break}else g=f;else g=0;while(0);f=(g|0)==0;g=k[b>>2]|0;do if(g){if((k[g+12>>2]|0)==(k[g+16>>2]|0)?(Hc[k[(k[g>>2]|0)+36>>2]&511](g)|0)==-1:0){k[b>>2]=0;h=11;break}if(f){i=g;h=13}else h=12}else h=11;while(0);if((h|0)==11)if(f)h=12;else{i=0;h=13}a:do if((h|0)==12){k[c>>2]=k[c>>2]|6;m=0}else if((h|0)==13){f=k[a>>2]|0;g=k[f+12>>2]|0;if((g|0)==(k[f+16>>2]|0))n=Hc[k[(k[f>>2]|0)+36>>2]&511](f)|0;else n=l[g>>0]|0;g=n&255;if(g<<24>>24>-1?(f=d+8|0,(j[(k[f>>2]|0)+(n<<24>>24<<1)>>1]&2048)!=0):0){o=(Rc[k[(k[d>>2]|0)+36>>2]&63](d,g,0)|0)<<24>>24;g=k[a>>2]|0;p=g+12|0;q=k[p>>2]|0;if((q|0)==(k[g+16>>2]|0)){Hc[k[(k[g>>2]|0)+40>>2]&511](g)|0;r=e;s=i;t=i;u=o}else{k[p>>2]=q+1;r=e;s=i;t=i;u=o}while(1){o=u+-48|0;q=r+-1|0;p=k[a>>2]|0;do if(p)if((k[p+12>>2]|0)==(k[p+16>>2]|0))if((Hc[k[(k[p>>2]|0)+36>>2]&511](p)|0)==-1){k[a>>2]=0;v=0;break}else{v=k[a>>2]|0;break}else v=p;else v=0;while(0);p=(v|0)==0;if(t)if((k[t+12>>2]|0)==(k[t+16>>2]|0))if((Hc[k[(k[t>>2]|0)+36>>2]&511](t)|0)==-1){k[b>>2]=0;w=0;x=0}else{w=s;x=s}else{w=s;x=t}else{w=s;x=0}g=k[a>>2]|0;if(!((r|0)>1&(p^(x|0)==0))){y=g;z=w;A=o;break}p=k[g+12>>2]|0;if((p|0)==(k[g+16>>2]|0))B=Hc[k[(k[g>>2]|0)+36>>2]&511](g)|0;else B=l[p>>0]|0;p=B&255;if(p<<24>>24<=-1){m=o;break a}if(!(j[(k[f>>2]|0)+(B<<24>>24<<1)>>1]&2048)){m=o;break a}g=((Rc[k[(k[d>>2]|0)+36>>2]&63](d,p,0)|0)<<24>>24)+(o*10|0)|0;p=k[a>>2]|0;C=p+12|0;D=k[C>>2]|0;if((D|0)==(k[p+16>>2]|0)){Hc[k[(k[p>>2]|0)+40>>2]&511](p)|0;r=q;s=w;t=x;u=g;continue}else{k[C>>2]=D+1;r=q;s=w;t=x;u=g;continue}}do if(y)if((k[y+12>>2]|0)==(k[y+16>>2]|0))if((Hc[k[(k[y>>2]|0)+36>>2]&511](y)|0)==-1){k[a>>2]=0;E=0;break}else{E=k[a>>2]|0;break}else E=y;else E=0;while(0);f=(E|0)==0;do if(z){if((k[z+12>>2]|0)==(k[z+16>>2]|0)?(Hc[k[(k[z>>2]|0)+36>>2]&511](z)|0)==-1:0){k[b>>2]=0;h=50;break}if(f){m=A;break a}}else h=50;while(0);if((h|0)==50?!f:0){m=A;break}k[c>>2]=k[c>>2]|2;m=A;break}k[c>>2]=k[c>>2]|4;m=0}while(0);return m|0}function nDa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=k[a>>2]|0;do if(f){g=k[f+12>>2]|0;if((g|0)==(k[f+16>>2]|0))h=Hc[k[(k[f>>2]|0)+36>>2]&511](f)|0;else h=k[g>>2]|0;if((h|0)==-1){k[a>>2]=0;i=1;break}else{i=(k[a>>2]|0)==0;break}}else i=1;while(0);h=k[b>>2]|0;do if(h){f=k[h+12>>2]|0;if((f|0)==(k[h+16>>2]|0))j=Hc[k[(k[h>>2]|0)+36>>2]&511](h)|0;else j=k[f>>2]|0;if((j|0)!=-1)if(i){l=h;m=17;break}else{m=16;break}else{k[b>>2]=0;m=14;break}}else m=14;while(0);if((m|0)==14)if(i)m=16;else{l=0;m=17}a:do if((m|0)==16){k[c>>2]=k[c>>2]|6;n=0}else if((m|0)==17){i=k[a>>2]|0;h=k[i+12>>2]|0;if((h|0)==(k[i+16>>2]|0))o=Hc[k[(k[i>>2]|0)+36>>2]&511](i)|0;else o=k[h>>2]|0;if(!(Rc[k[(k[d>>2]|0)+12>>2]&63](d,2048,o)|0)){k[c>>2]=k[c>>2]|4;n=0;break}h=(Rc[k[(k[d>>2]|0)+52>>2]&63](d,o,0)|0)<<24>>24;i=k[a>>2]|0;j=i+12|0;f=k[j>>2]|0;if((f|0)==(k[i+16>>2]|0)){Hc[k[(k[i>>2]|0)+40>>2]&511](i)|0;p=e;q=l;r=l;s=h}else{k[j>>2]=f+4;p=e;q=l;r=l;s=h}while(1){h=s+-48|0;f=p+-1|0;j=k[a>>2]|0;do if(j){i=k[j+12>>2]|0;if((i|0)==(k[j+16>>2]|0))t=Hc[k[(k[j>>2]|0)+36>>2]&511](j)|0;else t=k[i>>2]|0;if((t|0)==-1){k[a>>2]=0;u=1;break}else{u=(k[a>>2]|0)==0;break}}else u=1;while(0);do if(r){j=k[r+12>>2]|0;if((j|0)==(k[r+16>>2]|0))v=Hc[k[(k[r>>2]|0)+36>>2]&511](r)|0;else v=k[j>>2]|0;if((v|0)==-1){k[b>>2]=0;w=0;x=0;y=1;break}else{w=q;x=q;y=(q|0)==0;break}}else{w=q;x=0;y=1}while(0);j=k[a>>2]|0;if(!((p|0)>1&(u^y))){z=j;A=w;B=h;break}i=k[j+12>>2]|0;if((i|0)==(k[j+16>>2]|0))C=Hc[k[(k[j>>2]|0)+36>>2]&511](j)|0;else C=k[i>>2]|0;if(!(Rc[k[(k[d>>2]|0)+12>>2]&63](d,2048,C)|0)){n=h;break a}i=((Rc[k[(k[d>>2]|0)+52>>2]&63](d,C,0)|0)<<24>>24)+(h*10|0)|0;j=k[a>>2]|0;g=j+12|0;D=k[g>>2]|0;if((D|0)==(k[j+16>>2]|0)){Hc[k[(k[j>>2]|0)+40>>2]&511](j)|0;p=f;q=w;r=x;s=i;continue}else{k[g>>2]=D+4;p=f;q=w;r=x;s=i;continue}}do if(z){i=k[z+12>>2]|0;if((i|0)==(k[z+16>>2]|0))E=Hc[k[(k[z>>2]|0)+36>>2]&511](z)|0;else E=k[i>>2]|0;if((E|0)==-1){k[a>>2]=0;F=1;break}else{F=(k[a>>2]|0)==0;break}}else F=1;while(0);do if(A){i=k[A+12>>2]|0;if((i|0)==(k[A+16>>2]|0))G=Hc[k[(k[A>>2]|0)+36>>2]&511](A)|0;else G=k[i>>2]|0;if((G|0)!=-1)if(F){n=B;break a}else break;else{k[b>>2]=0;m=60;break}}else m=60;while(0);if((m|0)==60?!F:0){n=B;break}k[c>>2]=k[c>>2]|2;n=B}while(0);return n|0}function oDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=552;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f|0;i=oua(e?f:0,h)|0;if(!i)Gra();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){B=0;va(k[d>>2]|0,f|0);f=B;B=0;if(f&1){f=Rb(0)|0;Dd(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=564;k[b>>2]=j+g;k[c>>2]=(k[a>>2]|0)+h;return}function pDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=552;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f>>2;i=oua(e?f:0,h)|0;if(!i)Gra();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){B=0;va(k[d>>2]|0,f|0);f=B;B=0;if(f&1){f=Rb(0)|0;Dd(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=564;k[b>>2]=j+(g<<2);k[c>>2]=(k[a>>2]|0)+(h>>>2<<2);return}function qDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=b;e=i[a>>0]|0;if(!(e&1)){f=10;g=(e&255)>>>1;h=e}else{e=k[a>>2]|0;f=(e&-2)+-1|0;g=k[a+4>>2]|0;h=e&255}e=c-d|0;do if((c|0)!=(b|0)){if((f-g|0)>>>0<e>>>0){hva(a,f,g+e-f|0,g,g,0,0);j=i[a>>0]|0}else j=h;if(!(j&1))l=a+1|0;else l=k[a+8>>2]|0;m=c+(g-d)|0;n=b;o=l+g|0;while(1){if((n|0)==(c|0))break;i[o>>0]=i[n>>0]|0;n=n+1|0;o=o+1|0}i[l+m>>0]=0;o=g+e|0;if(!(i[a>>0]&1)){i[a>>0]=o<<1;break}else{k[a+4>>2]=o;break}}while(0);return a|0}function rDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+4|0;e=(k[d>>2]|0)!=552;f=k[a>>2]|0;g=(k[c>>2]|0)-f|0;h=g>>>0<2147483647?g<<1:-1;g=(k[b>>2]|0)-f>>2;i=oua(e?f:0,h)|0;if(!i)Gra();do if(!e){f=k[a>>2]|0;k[a>>2]=i;if(f){B=0;va(k[d>>2]|0,f|0);f=B;B=0;if(f&1){f=Rb(0)|0;Dd(f)}else{j=k[a>>2]|0;break}}else j=i}else{k[a>>2]=i;j=i}while(0);k[d>>2]=564;k[b>>2]=j+(g<<2);k[c>>2]=(k[a>>2]|0)+(h>>>2<<2);return}function sDa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;d=b;e=i[a>>0]|0;if(!(e&1)){f=1;g=(e&255)>>>1;h=e}else{e=k[a>>2]|0;f=(e&-2)+-1|0;g=k[a+4>>2]|0;h=e&255}e=c-d>>2;do if(e){if((f-g|0)>>>0<e>>>0){qva(a,f,g+e-f|0,g,g,0,0);j=i[a>>0]|0}else j=h;if(!(j&1))l=a+4|0;else l=k[a+8>>2]|0;m=g+((c-d|0)>>>2)|0;n=b;o=l+(g<<2)|0;while(1){if((n|0)==(c|0))break;k[o>>2]=k[n>>2];n=n+4|0;o=o+4|0}k[l+(m<<2)>>2]=0;o=g+e|0;if(!(i[a>>0]&1)){i[a>>0]=o<<1;break}else{k[a+4>>2]=o;break}}while(0);return a|0}function tDa(a,b){a=a|0;b=b|0;var c=0;k[a>>2]=0;k[a+4>>2]=0;k[a+8>>2]=0;i[a+128>>0]=0;do if(b){B=0;wa(562,a|0,b|0);c=B;B=0;if(c&1){c=Rb()|0;WDa(a);Qb(c|0)}else{lEa(a,b);break}}while(0);return}function uDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48248)|0);return}function vDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48288)|0);return}function wDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49320)|0);return}function xDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49312)|0);return}function yDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49380)|0);return}function zDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49388)|0);return}function ADa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49444)|0);return}function BDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49452)|0);return}function CDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49460)|0);return}function DDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49468)|0);return}function EDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48360)|0);return}function FDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48432)|0);return}function GDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48492)|0);return}function HDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48552)|0);return}function IDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48864)|0);return}function JDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48928)|0);return}function KDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48992)|0);return}function LDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49056)|0);return}function MDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49092)|0);return}function NDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49128)|0);return}function ODa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49164)|0);return}function PDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49200)|0);return}function QDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48644)|0);return}function RDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48736)|0);return}function SDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48768)|0);return}function TDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(48800)|0);return}function UDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49240)|0);return}function VDa(a,b){a=a|0;b=b|0;QAa(a,b,_Aa(49280)|0);return}function WDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a>>2]|0;do if(b){c=a+4|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}if((a+16|0)==(b|0)){i[a+128>>0]=0;break}else{Sqa(b);break}}while(0);return}function XDa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=a+4|0;d=k[c>>2]|0;e=k[a>>2]|0;f=d-e>>2;g=e;e=d;a:do if(f>>>0>=b>>>0){if(f>>>0>b>>>0){d=g+(b<<2)|0;h=e;while(1){if((h|0)==(d|0))break a;i=h+-4|0;k[c>>2]=i;h=i}}}else kEa(a,b-f|0);while(0);return}function YDa(a,b){a=a|0;b=b|0;var c=0,d=0;c=k[a+8>>2]|0;if((k[a+12>>2]|0)-c>>2>>>0>b>>>0)d=(k[c+(b<<2)>>2]|0)!=0;else d=0;return d|0}function ZDa(a){a=a|0;var b=0,c=0,d=0,e=0;b=a+4|0;c=k[b>>2]|0;d=k[b+4>>2]|0;b=(k[a>>2]|0)+(d>>1)|0;if(!(d&1))e=c;else e=k[(k[b>>2]|0)+c>>2]|0;Ec[e&1023](b);return}function _Da(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var l=0,n=0,o=0,p=0,q=0,r=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<3)l=1;else{k[f>>2]=d+1;i[d>>0]=-17;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-69;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-65;n=4}else n=4;a:do if((n|0)==4){d=b;h=k[c>>2]|0;while(1){if(h>>>0>=b>>>0){l=0;break a}e=j[h>>1]|0;o=e&65535;if(o>>>0>g>>>0){l=2;break a}do if((e&65535)<128){p=k[f>>2]|0;if((a-p|0)<1){l=1;break a}k[f>>2]=p+1;i[p>>0]=e}else{if((e&65535)<2048){p=k[f>>2]|0;if((a-p|0)<2){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>6|192;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((e&65535)<55296){p=k[f>>2]|0;if((a-p|0)<3){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>12|224;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o>>>6&63|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((e&65535)>=56320){if((e&65535)<57344){l=2;break a}p=k[f>>2]|0;if((a-p|0)<3){l=1;break a}k[f>>2]=p+1;i[p>>0]=o>>>12|224;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o>>>6&63|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o&63|128;break}if((d-h|0)<4){l=1;break a}p=h+2|0;q=m[p>>1]|0;if((q&64512|0)!=56320){l=2;break a}if((a-(k[f>>2]|0)|0)<4){l=1;break a}r=o&960;if(((r<<10)+65536|o<<10&64512|q&1023)>>>0>g>>>0){l=2;break a}k[c>>2]=p;p=(r>>>6)+1|0;r=k[f>>2]|0;k[f>>2]=r+1;i[r>>0]=p>>>2|240;r=k[f>>2]|0;k[f>>2]=r+1;i[r>>0]=o>>>2&15|p<<4&48|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=o<<4&48|q>>>6&15|128;p=k[f>>2]|0;k[f>>2]=p+1;i[p>>0]=q&63|128}while(0);o=(k[c>>2]|0)+2|0;k[c>>2]=o;h=o}}while(0);return l|0}function $Da(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if((((d-h|0)>2?(i[h>>0]|0)==-17:0)?(i[h+1>>0]|0)==-69:0)?(i[h+2>>0]|0)==-65:0){k[c>>2]=h+3;m=d}else m=d}else m=b;d=e;a:while(1){h=k[c>>2]|0;a=h>>>0<b>>>0;if(!a){n=a;o=41;break}p=k[f>>2]|0;if(p>>>0>=e>>>0){n=a;o=41;break}a=i[h>>0]|0;q=a&255;if(q>>>0>g>>>0){r=2;break}do if(a<<24>>24>-1){j[p>>1]=a&255;k[c>>2]=h+1}else{if((a&255)<194){r=2;break a}if((a&255)<224){if((m-h|0)<2){r=1;break a}s=l[h+1>>0]|0;if((s&192|0)!=128){r=2;break a}t=s&63|q<<6&1984;if(t>>>0>g>>>0){r=2;break a}j[p>>1]=t;k[c>>2]=h+2;break}if((a&255)<240){if((m-h|0)<3){r=1;break a}t=i[h+1>>0]|0;s=i[h+2>>0]|0;switch(q|0){case 224:{if((t&-32)<<24>>24!=-96){r=2;break a}break}case 237:{if((t&-32)<<24>>24!=-128){r=2;break a}break}default:if((t&-64)<<24>>24!=-128){r=2;break a}}u=s&255;if((u&192|0)!=128){r=2;break a}s=(t&255)<<6&4032|q<<12|u&63;if((s&65535)>>>0>g>>>0){r=2;break a}j[p>>1]=s;k[c>>2]=h+3;break}if((a&255)>=245){r=2;break a}if((m-h|0)<4){r=1;break a}s=i[h+1>>0]|0;u=i[h+2>>0]|0;t=i[h+3>>0]|0;switch(q|0){case 240:{if((s+112&255)>=48){r=2;break a}break}case 244:{if((s&-16)<<24>>24!=-128){r=2;break a}break}default:if((s&-64)<<24>>24!=-128){r=2;break a}}v=u&255;if((v&192|0)!=128){r=2;break a}u=t&255;if((u&192|0)!=128){r=2;break a}if((d-p|0)<4){r=1;break a}t=q&7;w=s&255;s=v<<6;x=u&63;if((w<<12&258048|t<<18|s&4032|x)>>>0>g>>>0){r=2;break a}j[p>>1]=w<<2&60|v>>>4&3|((w>>>4&3|t<<2)<<6)+16320|55296;t=p+2|0;k[f>>2]=t;j[t>>1]=x|s&960|56320;k[c>>2]=(k[c>>2]|0)+4}while(0);k[f>>2]=(k[f>>2]|0)+2}if((o|0)==41)r=n&1;return r|0}function aEa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=b;if((((e&4|0)!=0?(f-a|0)>2:0)?(i[a>>0]|0)==-17:0)?(i[a+1>>0]|0)==-69:0){g=(i[a+2>>0]|0)==-65?a+3|0:a;h=0}else{g=a;h=0}a:while(1){if(!(h>>>0<c>>>0&g>>>0<b>>>0)){j=g;k=40;break}e=i[g>>0]|0;m=e&255;if(m>>>0>d>>>0){j=g;k=40;break}do if(e<<24>>24>-1){n=g+1|0;o=h}else{if((e&255)<194){j=g;k=40;break a}if((e&255)<224){if((f-g|0)<2){j=g;k=40;break a}p=l[g+1>>0]|0;if((p&192|0)!=128){j=g;k=40;break a}if((p&63|m<<6&1984)>>>0>d>>>0){j=g;k=40;break a}else{n=g+2|0;o=h;break}}if((e&255)<240){p=g;if((f-p|0)<3){j=g;k=40;break a}q=i[g+1>>0]|0;r=i[g+2>>0]|0;switch(m|0){case 224:{if((q&-32)<<24>>24!=-96){s=p;t=g;k=19;break a}break}case 237:{if((q&-32)<<24>>24!=-128){u=p;v=g;k=21;break a}break}default:if((q&-64)<<24>>24!=-128){w=p;x=g;k=23;break a}}p=r&255;if((p&192|0)!=128){j=g;k=40;break a}if(((q&255)<<6&4032|m<<12&61440|p&63)>>>0>d>>>0){j=g;k=40;break a}else{n=g+3|0;o=h;break}}if((e&255)>=245){j=g;k=40;break a}p=g;if((c-h|0)>>>0<2|(f-p|0)<4){j=g;k=40;break a}q=i[g+1>>0]|0;r=i[g+2>>0]|0;y=i[g+3>>0]|0;switch(m|0){case 240:{if((q+112&255)>=48){z=p;A=g;k=30;break a}break}case 244:{if((q&-16)<<24>>24!=-128){B=p;C=g;k=32;break a}break}default:if((q&-64)<<24>>24!=-128){D=p;E=g;k=34;break a}}p=r&255;if((p&192|0)!=128){j=g;k=40;break a}r=y&255;if((r&192|0)!=128){j=g;k=40;break a}if(((q&255)<<12&258048|m<<18&1835008|p<<6&4032|r&63)>>>0>d>>>0){j=g;k=40;break a}n=g+4|0;o=h+1|0}while(0);g=n;h=o+1|0}if((k|0)==19){o=a;F=0;G=s-o|0;H=o;I=t}else if((k|0)==21){t=a;F=0;G=u-t|0;H=t;I=v}else if((k|0)==23){v=a;F=0;G=w-v|0;H=v;I=x}else if((k|0)==30){x=a;F=0;G=z-x|0;H=x;I=A}else if((k|0)==32){A=a;F=0;G=B-A|0;H=A;I=C}else if((k|0)==34){C=a;F=0;G=D-C|0;H=C;I=E}else if((k|0)==40){F=1;G=0;H=a;I=j}return (F?I-H|0:G)|0}function bEa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,l=0,m=0,n=0;k[c>>2]=a;k[f>>2]=d;a=e;if(h&2)if((a-d|0)<3)j=1;else{k[f>>2]=d+1;i[d>>0]=-17;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-69;d=k[f>>2]|0;k[f>>2]=d+1;i[d>>0]=-65;l=4}else l=4;a:do if((l|0)==4){d=k[c>>2]|0;while(1){if(d>>>0>=b>>>0){j=0;break a}h=k[d>>2]|0;if(h>>>0>g>>>0|(h&-2048|0)==55296){j=2;break a}do if(h>>>0>=128){if(h>>>0<2048){e=k[f>>2]|0;if((a-e|0)<2){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>6|192;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h&63|128;break}e=k[f>>2]|0;m=a-e|0;if(h>>>0<65536){if((m|0)<3){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>12|224;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h>>>6&63|128;n=k[f>>2]|0;k[f>>2]=n+1;i[n>>0]=h&63|128;break}else{if((m|0)<4){j=1;break a}k[f>>2]=e+1;i[e>>0]=h>>>18|240;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h>>>12&63|128;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h>>>6&63|128;e=k[f>>2]|0;k[f>>2]=e+1;i[e>>0]=h&63|128;break}}else{e=k[f>>2]|0;if((a-e|0)<1){j=1;break a}k[f>>2]=e+1;i[e>>0]=h}while(0);h=(k[c>>2]|0)+4|0;k[c>>2]=h;d=h}}while(0);return j|0}function cEa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k[c>>2]=a;k[f>>2]=d;if(h&4){h=k[c>>2]|0;d=b;if((((d-h|0)>2?(i[h>>0]|0)==-17:0)?(i[h+1>>0]|0)==-69:0)?(i[h+2>>0]|0)==-65:0){k[c>>2]=h+3;j=d}else j=d}else j=b;a:while(1){d=k[c>>2]|0;h=d>>>0<b>>>0;if(!h){m=h;n=40;break}a=k[f>>2]|0;if(a>>>0>=e>>>0){m=h;n=40;break}h=i[d>>0]|0;o=h&255;do if(h<<24>>24>-1){if(o>>>0>g>>>0){p=2;break a}k[a>>2]=o;k[c>>2]=d+1}else{if((h&255)<194){p=2;break a}if((h&255)<224){if((j-d|0)<2){p=1;break a}q=l[d+1>>0]|0;if((q&192|0)!=128){p=2;break a}r=q&63|o<<6&1984;if(r>>>0>g>>>0){p=2;break a}k[a>>2]=r;k[c>>2]=d+2;break}if((h&255)<240){if((j-d|0)<3){p=1;break a}r=i[d+1>>0]|0;q=i[d+2>>0]|0;switch(o|0){case 224:{if((r&-32)<<24>>24!=-96){p=2;break a}break}case 237:{if((r&-32)<<24>>24!=-128){p=2;break a}break}default:if((r&-64)<<24>>24!=-128){p=2;break a}}s=q&255;if((s&192|0)!=128){p=2;break a}q=(r&255)<<6&4032|o<<12&61440|s&63;if(q>>>0>g>>>0){p=2;break a}k[a>>2]=q;k[c>>2]=d+3;break}if((h&255)>=245){p=2;break a}if((j-d|0)<4){p=1;break a}q=i[d+1>>0]|0;s=i[d+2>>0]|0;r=i[d+3>>0]|0;switch(o|0){case 240:{if((q+112&255)>=48){p=2;break a}break}case 244:{if((q&-16)<<24>>24!=-128){p=2;break a}break}default:if((q&-64)<<24>>24!=-128){p=2;break a}}t=s&255;if((t&192|0)!=128){p=2;break a}s=r&255;if((s&192|0)!=128){p=2;break a}r=(q&255)<<12&258048|o<<18&1835008|t<<6&4032|s&63;if(r>>>0>g>>>0){p=2;break a}k[a>>2]=r;k[c>>2]=d+4}while(0);k[f>>2]=(k[f>>2]|0)+4}if((n|0)==40)p=m&1;return p|0}function dEa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=b;if((((e&4|0)!=0?(f-a|0)>2:0)?(i[a>>0]|0)==-17:0)?(i[a+1>>0]|0)==-69:0){g=(i[a+2>>0]|0)==-65?a+3|0:a;h=0}else{g=a;h=0}a:while(1){if(!(h>>>0<c>>>0&g>>>0<b>>>0)){j=g;k=40;break}e=i[g>>0]|0;m=e&255;do if(e<<24>>24<=-1){if((e&255)<194){j=g;k=40;break a}if((e&255)<224){if((f-g|0)<2){j=g;k=40;break a}n=l[g+1>>0]|0;if((n&192|0)!=128){j=g;k=40;break a}if((n&63|m<<6&1984)>>>0>d>>>0){j=g;k=40;break a}o=g+2|0;break}if((e&255)<240){n=g;if((f-n|0)<3){j=g;k=40;break a}p=i[g+1>>0]|0;q=i[g+2>>0]|0;switch(m|0){case 224:{if((p&-32)<<24>>24!=-96){r=n;k=20;break a}break}case 237:{if((p&-32)<<24>>24!=-128){s=n;k=22;break a}break}default:if((p&-64)<<24>>24!=-128){t=n;k=24;break a}}n=q&255;if((n&192|0)!=128){j=g;k=40;break a}if(((p&255)<<6&4032|m<<12&61440|n&63)>>>0>d>>>0){j=g;k=40;break a}else{o=g+3|0;break}}if((e&255)>=245){j=g;k=40;break a}n=g;if((f-n|0)<4){j=g;k=40;break a}p=i[g+1>>0]|0;q=i[g+2>>0]|0;u=i[g+3>>0]|0;switch(m|0){case 240:{if((p+112&255)>=48){v=n;k=31;break a}break}case 244:{if((p&-16)<<24>>24!=-128){w=n;k=33;break a}break}default:if((p&-64)<<24>>24!=-128){x=n;k=35;break a}}n=q&255;if((n&192|0)!=128){j=g;k=40;break a}q=u&255;if((q&192|0)!=128){j=g;k=40;break a}if(((p&255)<<12&258048|m<<18&1835008|n<<6&4032|q&63)>>>0>d>>>0){j=g;k=40;break a}else o=g+4|0}else{if(m>>>0>d>>>0){j=g;k=40;break a}o=g+1|0}while(0);g=o;h=h+1|0}if((k|0)==20)y=r-a|0;else if((k|0)==22)y=s-a|0;else if((k|0)==24)y=t-a|0;else if((k|0)==31)y=v-a|0;else if((k|0)==33)y=w-a|0;else if((k|0)==35)y=x-a|0;else if((k|0)==40)y=j-a|0;return y|0}function eEa(a){a=a|0;Yua(50296);Yua(50284);Yua(50272);Yua(50260);Yua(50248);Yua(50236);Yua(50224);Yua(50212);Yua(50200);Yua(50188);Yua(50176);Yua(50164);Yua(50152);Yua(50140);return}function fEa(a){a=a|0;kva(50468);kva(50456);kva(50444);kva(50432);kva(50420);kva(50408);kva(50396);kva(50384);kva(50372);kva(50360);kva(50348);kva(50336);kva(50324);kva(50312);return}function gEa(a){a=a|0;Yua(51100);Yua(51088);Yua(51076);Yua(51064);Yua(51052);Yua(51040);Yua(51028);Yua(51016);Yua(51004);Yua(50992);Yua(50980);Yua(50968);Yua(50956);Yua(50944);Yua(50932);Yua(50920);Yua(50908);Yua(50896);Yua(50884);Yua(50872);Yua(50860);Yua(50848);Yua(50836);Yua(50824);return}function hEa(a){a=a|0;kva(51392);kva(51380);kva(51368);kva(51356);kva(51344);kva(51332);kva(51320);kva(51308);kva(51296);kva(51284);kva(51272);kva(51260);kva(51248);kva(51236);kva(51224);kva(51212);kva(51200);kva(51188);kva(51176);kva(51164);kva(51152);kva(51140);kva(51128);kva(51116);return}function iEa(a){a=a|0;Yua(52204);Yua(52192);Yua(52180);Yua(52168);Yua(52156);Yua(52144);Yua(52132);Yua(52120);Yua(52108);Yua(52096);Yua(52084);Yua(52072);Yua(52060);Yua(52048);Yua(52036);Yua(52024);Yua(52012);Yua(52e3);Yua(51988);Yua(51976);Yua(51964);Yua(51952);Yua(51940);Yua(51928);return}function jEa(a){a=a|0;kva(52496);kva(52484);kva(52472);kva(52460);kva(52448);kva(52436);kva(52424);kva(52412);kva(52400);kva(52388);kva(52376);kva(52364);kva(52352);kva(52340);kva(52328);kva(52316);kva(52304);kva(52292);kva(52280);kva(52268);kva(52256);kva(52244);kva(52232);kva(52220);return}function kEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=r;r=r+32|0;d=c;e=k[a+8>>2]|0;f=k[a+4>>2]|0;if(e-f>>2>>>0<b>>>0){g=k[a>>2]|0;h=f-g>>2;f=h+b|0;if(f>>>0>1073741823)Oqa(a);i=e-g|0;if(i>>2>>>0<536870911){g=i>>1;j=g>>>0<f>>>0?f:g}else j=1073741823;mEa(d,j,h,a+16|0);h=d+8|0;j=k[h>>2]|0;WEa(j|0,0,b<<2|0)|0;k[h>>2]=j+(b<<2);nEa(a,d);oEa(d)}else lEa(a,b);r=c;return}function lEa(a,b){a=a|0;b=b|0;var c=0;c=a+4|0;a=b;b=k[c>>2]|0;do{k[b>>2]=0;b=(k[c>>2]|0)+4|0;k[c>>2]=b;a=a+-1|0}while((a|0)!=0);return}function mEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;k[a+12>>2]=0;k[a+16>>2]=d;do if(b){e=d+112|0;if(b>>>0<29&(i[e>>0]|0)==0){i[e>>0]=1;f=d;break}else{f=Qqa(b<<2)|0;break}}else f=0;while(0);k[a>>2]=f;d=f+(c<<2)|0;k[a+8>>2]=d;k[a+4>>2]=d;k[a+12>>2]=f+(b<<2);return}function nEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=k[a>>2]|0;d=a+4|0;e=b+4|0;f=(k[d>>2]|0)-c|0;g=(k[e>>2]|0)+(0-(f>>2)<<2)|0;k[e>>2]=g;TEa(g|0,c|0,f|0)|0;f=k[a>>2]|0;k[a>>2]=k[e>>2];k[e>>2]=f;f=b+8|0;c=k[d>>2]|0;k[d>>2]=k[f>>2];k[f>>2]=c;c=a+8|0;a=b+12|0;f=k[c>>2]|0;k[c>>2]=k[a>>2];k[a>>2]=f;k[b>>2]=k[e>>2];return}function oEa(a){a=a|0;var b=0,c=0,d=0,e=0;b=k[a+4>>2]|0;c=a+8|0;d=k[c>>2]|0;while(1){if((d|0)==(b|0))break;e=d+-4|0;k[c>>2]=e;d=e}d=k[a>>2]|0;do if(d){c=k[a+16>>2]|0;if((c|0)==(d|0)){i[c+112>>0]=0;break}else{Sqa(d);break}}while(0);return}function pEa(a,b){a=a|0;b=b|0;var c=0,d=0;if(b>>>0>1073741823)Oqa(a);c=a+128|0;if(b>>>0<29&(i[c>>0]|0)==0){i[c>>0]=1;d=a+16|0}else d=Qqa(b<<2)|0;k[a+4>>2]=d;k[a>>2]=d;k[a+8>>2]=d+(b<<2);return}function qEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=Sra()|0;h=k[g>>2]|0;k[g>>2]=0;i=+Ata(a,e,oxa()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;j=i}else j=i;else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function rEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=Sra()|0;h=k[g>>2]|0;k[g>>2]=0;i=+Ata(a,e,oxa()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;j=i}else j=i;else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function sEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0,h=0,i=0.0,j=0.0;d=r;r=r+16|0;e=d;if((a|0)==(b|0)){k[c>>2]=4;f=0.0}else{g=Sra()|0;h=k[g>>2]|0;k[g>>2]=0;i=+Ata(a,e,oxa()|0);a=k[g>>2]|0;if(!a)k[g>>2]=h;if((k[e>>2]|0)==(b|0)){if((a|0)==34)k[c>>2]=4;j=i}else{k[c>>2]=4;j=0.0}f=j}r=d;return +f}function tEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0;h=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;h=0;break}j=Sra()|0;l=k[j>>2]|0;k[j>>2]=0;m=Lra(a,f,d,oxa()|0)|0;n=Q;o=k[j>>2]|0;if(!o)k[j>>2]=l;if((k[f>>2]|0)==(b|0))if((o|0)==34){k[c>>2]=4;p=-1;q=-1}else{p=m;q=n}else{k[c>>2]=4;p=0;q=0}g=q;h=p}while(0);Q=g;r=e;return h|0}function uEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=Sra()|0;j=k[h>>2]|0;k[h>>2]=0;l=Lra(a,f,d,oxa()|0)|0;m=Q;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>4294967295|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function vEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=Sra()|0;j=k[h>>2]|0;k[h>>2]=0;l=Lra(a,f,d,oxa()|0)|0;m=Q;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>4294967295|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function wEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,l=0,m=0,n=0,o=0;e=r;r=r+16|0;f=e;do if((a|0)==(b|0)){k[c>>2]=4;g=0}else{if((i[a>>0]|0)==45){k[c>>2]=4;g=0;break}h=Sra()|0;j=k[h>>2]|0;k[h>>2]=0;l=Lra(a,f,d,oxa()|0)|0;m=Q;n=k[h>>2]|0;if(!n)k[h>>2]=j;do if((k[f>>2]|0)==(b|0))if(m>>>0>0|(m|0)==0&l>>>0>65535|(n|0)==34){k[c>>2]=4;o=-1;break}else{o=l&65535;break}else{k[c>>2]=4;o=0}while(0);g=o}while(0);r=e;return g|0}function xEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0;e=r;r=r+16|0;f=e;if((a|0)==(b|0)){k[c>>2]=4;g=0;h=0}else{i=Sra()|0;j=k[i>>2]|0;k[i>>2]=0;l=Mra(a,f,d,oxa()|0)|0;d=Q;a=k[i>>2]|0;if(!a)k[i>>2]=j;if((k[f>>2]|0)==(b|0))if((a|0)==34){k[c>>2]=4;a=(d|0)>0|(d|0)==0&l>>>0>0;m=a?-1:0;n=a?2147483647:-2147483648}else{m=l;n=d}else{k[c>>2]=4;m=0;n=0}g=n;h=m}Q=g;r=e;return h|0}function yEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e;if((a|0)==(b|0)){k[c>>2]=4;g=0}else{h=Sra()|0;i=k[h>>2]|0;k[h>>2]=0;j=Mra(a,f,d,oxa()|0)|0;d=Q;a=k[h>>2]|0;if(!a)k[h>>2]=i;a:do if((k[f>>2]|0)==(b|0)){do if((a|0)==34){k[c>>2]=4;if((d|0)>0|(d|0)==0&j>>>0>0){l=2147483647;break a}}else{if((d|0)<-1|(d|0)==-1&j>>>0<2147483648){k[c>>2]=4;break}if((d|0)>0|(d|0)==0&j>>>0>2147483647){k[c>>2]=4;l=2147483647;break a}else{l=j;break a}}while(0);l=-2147483648}else{k[c>>2]=4;l=0}while(0);g=l}r=e;return g|0}function zEa(a){a=a|0;return}function AEa(a){a=a|0;var b=0;b=a+4|0;k[b>>2]=(k[b>>2]|0)+1;return}function BEa(a){a=a|0;var b=0,c=0,d=0;b=a+4|0;c=k[b>>2]|0;k[b>>2]=c+-1;if(!c){Ec[k[(k[a>>2]|0)+8>>2]&1023](a);d=1}else d=0;return d|0}function CEa(a,b){a=a|0;b=b|0;k[a>>2]=42060;B=0;wa(563,a+4|0,((i[b>>0]&1)==0?b+1|0:k[b+8>>2]|0)|0);b=B;B=0;if(b&1){b=Rb()|0;Qb(b|0)}else return}function DEa(a,b){a=a|0;b=b|0;k[a>>2]=42060;B=0;wa(563,a+4|0,b|0);b=B;B=0;if(b&1){b=Rb()|0;Qb(b|0)}else return}function EEa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=Lta(b)|0;d=Qqa(c+13|0)|0;k[d>>2]=c;k[d+4>>2]=c;k[d+8>>2]=0;e=d+12|0;TEa(e|0,b|0,c+1|0)|0;k[a>>2]=e;return}function FEa(a,b,c){a=a|0;b=b|0;c=c|0;k[a>>2]=c;k[a+4>>2]=b;return}function GEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=r;r=r+16|0;e=d;nd[k[(k[a>>2]|0)+12>>2]&1023](e,a,b);if((k[e+4>>2]|0)==(k[c+4>>2]|0))f=(k[e>>2]|0)==(k[c>>2]|0);else f=0;r=d;return f|0}function HEa(a,b,c){a=a|0;b=b|0;c=c|0;return ((k[b>>2]|0)==(c|0)?(k[b+4>>2]|0)==(a|0):0)|0}function IEa(a,b,c){a=a|0;b=b|0;c=c|0;b=Tra(c)|0;Wua(a,b,Lta(b)|0);return}function JEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,l=0;d=r;r=r+16|0;e=d;f=k[b>>2]|0;do if(f){g=i[c>>0]|0;if(!(g&1))h=(g&255)>>>1;else h=k[c+4>>2]|0;if(!h)j=f;else{dva(c,160061)|0;j=k[b>>2]|0}g=k[b+4>>2]|0;nd[k[(k[g>>2]|0)+24>>2]&1023](e,g,j);g=i[e>>0]|0;l=(g&1)==0;B=0;Ia(59,c|0,(l?e+1|0:k[e+8>>2]|0)|0,(l?(g&255)>>>1:k[e+4>>2]|0)|0)|0;g=B;B=0;if(g&1){g=Rb()|0;Yua(e);Qb(g|0)}else{Yua(e);break}}while(0);k[a>>2]=k[c>>2];k[a+4>>2]=k[c+4>>2];k[a+8>>2]=k[c+8>>2];a=0;while(1){if((a|0)==3)break;k[c+(a<<2)>>2]=0;a=a+1|0}r=d;return}function KEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,l=0;d=r;r=r+32|0;e=d+12|0;f=d;Wua(f,c,Lta(c)|0);B=0;eb(536,e|0,b|0,f|0);c=B;B=0;do if(!(c&1)){B=0;wa(564,a|0,e|0);g=B;B=0;if(g&1){g=Rb()|0;h=Q;Yua(e);i=h;j=g;break}else{Yua(e);Yua(f);k[a>>2]=52844;g=b;h=k[g+4>>2]|0;l=a+8|0;k[l>>2]=k[g>>2];k[l+4>>2]=h;r=d;return}}else{h=Rb()|0;i=Q;j=h}while(0);Yua(f);Qb(j|0)}function LEa(a){a=a|0;ara(a);return}function MEa(a){a=a|0;ara(a);Sqa(a);return}function NEa(a){a=a|0;return}function OEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;qc(52856)|0;while(1){if((k[a>>2]|0)!=1)break;lb(52884,52856)|0}do if(!(k[a>>2]|0)){k[a>>2]=1;B=0;ya(446,52856)|0;d=B;B=0;if((((!(d&1)?(B=0,va(c|0,b|0),d=B,B=0,!(d&1)):0)?(B=0,ya(447,52856)|0,d=B,B=0,!(d&1)):0)?(k[a>>2]=-1,B=0,ya(446,52856)|0,d=B,B=0,!(d&1)):0)?(B=0,ya(448,52884)|0,d=B,B=0,!(d&1)):0)break;d=Rb(0)|0;Nb(d|0)|0;B=0;ya(447,52856)|0;d=B;B=0;if((!(d&1)?(k[a>>2]=0,B=0,ya(446,52856)|0,d=B,B=0,!(d&1)):0)?(B=0,ya(448,52884)|0,d=B,B=0,!(d&1)):0){B=0;fb(8);B=0}d=Rb()|0;B=0;fb(4);e=B;B=0;if(e&1){e=Rb(0)|0;Dd(e)}else Qb(d|0)}else Zb(52856)|0;while(0);return}function PEa(){}function QEa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return (Q=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0}function REa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return (Q=e,a-c>>>0|0)|0}function SEa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){Q=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}Q=0;return b>>>c-32|0}function TEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c|0)>=4096)return Ob(a|0,b|0,c|0)|0;d=a|0;if((a&3)==(b&3)){while(a&3){if(!c)return d|0;i[a>>0]=i[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}while((c|0)>=4){k[a>>2]=k[b>>2];a=a+4|0;b=b+4|0;c=c-4|0}}while((c|0)>0){i[a>>0]=i[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}return d|0}function UEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)<(a|0)&(a|0)<(b+c|0)){d=a;b=b+c|0;a=a+c|0;while((c|0)>0){a=a-1|0;b=b-1|0;c=c-1|0;i[a>>0]=i[b>>0]|0}a=d}else TEa(a,b,c)|0;return a|0}function VEa(a){a=+a;return a>=0.0?+_(a+.5):+la(a-.5)}function WEa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=a+c|0;if((c|0)>=20){b=b&255;e=a&3;f=b|b<<8|b<<16|b<<24;g=d&~3;if(e){e=a+4-e|0;while((a|0)<(e|0)){i[a>>0]=b;a=a+1|0}}while((a|0)<(g|0)){k[a>>2]=f;a=a+4|0}}while((a|0)<(d|0)){i[a>>0]=b;a=a+1|0}return a-c|0}function XEa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){Q=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}Q=a<<c-32;return 0}function YEa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){Q=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}Q=(b|0)<0?-1:0;return b>>c-32|0}function ZEa(a){a=a|0;var b=0;b=i[v+(a&255)>>0]|0;if((b|0)<8)return b|0;b=i[v+(a>>8&255)>>0]|0;if((b|0)<8)return b+8|0;b=i[v+(a>>16&255)>>0]|0;if((b|0)<8)return b+16|0;return (i[v+(a>>>24)>>0]|0)+24|0}function _Ea(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=ma(d,c)|0;f=a>>>16;a=(e>>>16)+(ma(d,f)|0)|0;d=b>>>16;b=ma(d,c)|0;return (Q=(a>>>16)+(ma(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function $Ea(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=REa(e^a,f^b,e,f)|0;b=Q;a=g^e;e=h^f;return REa((eFa(i,b,REa(g^c,h^d,g,h)|0,Q,0)|0)^a,Q^e,a,e)|0}function aFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,l=0;e=r;r=r+16|0;f=e|0;g=b>>31|((b|0)<0?-1:0)<<1;h=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;i=d>>31|((d|0)<0?-1:0)<<1;j=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;l=REa(g^a,h^b,g,h)|0;b=Q;eFa(l,b,REa(i^c,j^d,i,j)|0,Q,f)|0;j=REa(k[f>>2]^g,k[f+4>>2]^h,g,h)|0;h=Q;r=e;return (Q=h,j)|0}function bFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=_Ea(e,a)|0;f=Q;return (Q=(ma(b,a)|0)+(ma(d,e)|0)+f|f&0,c|0|0)|0}function cFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eFa(a,b,c,d,0)|0}function dFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=r;r=r+16|0;f=e|0;eFa(a,b,c,d,f)|0;r=e;return (Q=k[f+4>>2]|0,k[f>>2]|0)|0}function eFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=a;g=b;h=g;i=c;j=d;l=j;if(!h){m=(e|0)!=0;if(!l){if(m){k[e>>2]=(f>>>0)%(i>>>0);k[e+4>>2]=0}n=0;o=(f>>>0)/(i>>>0)>>>0;return (Q=n,o)|0}else{if(!m){n=0;o=0;return (Q=n,o)|0}k[e>>2]=a|0;k[e+4>>2]=b&0;n=0;o=0;return (Q=n,o)|0}}m=(l|0)==0;do if(i){if(!m){p=(oa(l|0)|0)-(oa(h|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=f>>>(q>>>0)&s|h<<r;v=h>>>(q>>>0)&s;w=0;x=f<<r;break}if(!e){n=0;o=0;return (Q=n,o)|0}k[e>>2]=a|0;k[e+4>>2]=g|b&0;n=0;o=0;return (Q=n,o)|0}r=i-1|0;if(r&i){s=(oa(i|0)|0)+33-(oa(h|0)|0)|0;q=64-s|0;p=32-s|0;y=p>>31;z=s-32|0;A=z>>31;t=s;u=p-1>>31&h>>>(z>>>0)|(h<<p|f>>>(s>>>0))&A;v=A&h>>>(s>>>0);w=f<<q&y;x=(h<<q|f>>>(z>>>0))&y|f<<p&s-33>>31;break}if(e){k[e>>2]=r&f;k[e+4>>2]=0}if((i|0)==1){n=g|b&0;o=a|0|0;return (Q=n,o)|0}else{r=ZEa(i|0)|0;n=h>>>(r>>>0)|0;o=h<<32-r|f>>>(r>>>0)|0;return (Q=n,o)|0}}else{if(m){if(e){k[e>>2]=(h>>>0)%(i>>>0);k[e+4>>2]=0}n=0;o=(h>>>0)/(i>>>0)>>>0;return (Q=n,o)|0}if(!f){if(e){k[e>>2]=0;k[e+4>>2]=(h>>>0)%(l>>>0)}n=0;o=(h>>>0)/(l>>>0)>>>0;return (Q=n,o)|0}r=l-1|0;if(!(r&l)){if(e){k[e>>2]=a|0;k[e+4>>2]=r&h|b&0}n=0;o=h>>>((ZEa(l|0)|0)>>>0);return (Q=n,o)|0}r=(oa(l|0)|0)-(oa(h|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=h<<p|f>>>(s>>>0);v=h>>>(s>>>0);w=0;x=f<<p;break}if(!e){n=0;o=0;return (Q=n,o)|0}k[e>>2]=a|0;k[e+4>>2]=g|b&0;n=0;o=0;return (Q=n,o)|0}while(0);if(!t){B=x;C=w;D=v;E=u;F=0;G=0}else{b=c|0|0;c=j|d&0;d=QEa(b|0,c|0,-1,-1)|0;j=Q;g=x;x=w;w=v;v=u;u=t;t=0;do{a=g;g=x>>>31|g<<1;x=t|x<<1;f=v<<1|a>>>31|0;a=v>>>31|w<<1|0;REa(d,j,f,a)|0;h=Q;l=h>>31|((h|0)<0?-1:0)<<1;t=l&1;v=REa(f,a,l&b,(((h|0)<0?-1:0)>>31|((h|0)<0?-1:0)<<1)&c)|0;w=Q;u=u-1|0}while((u|0)!=0);B=g;C=x;D=w;E=v;F=0;G=t}t=C;C=0;if(e){k[e>>2]=E;k[e+4>>2]=D}n=(t|0)>>>31|(B|C)<<1|(C<<1|t>>>31)&0|F;o=(t<<1|0>>>31)&-2|G;return (Q=n,o)|0}function fFa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Ac[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function gFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return Bc[a&3](b|0,c|0,d|0,e|0,f|0,+g)|0}function hFa(a,b,c){a=a|0;b=b|0;c=+c;Cc[a&63](b|0,+c)}function iFa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Dc[a&255](b|0,c|0,d|0,e|0,f|0)}function jFa(a,b){a=a|0;b=b|0;Ec[a&1023](b|0)}function kFa(a,b,c){a=a|0;b=b|0;c=c|0;Fc[a&1023](b|0,c|0)}function lFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Gc[a&63](b|0,c|0,d|0,e|0,f|0,g|0)|0}function mFa(a,b){a=a|0;b=b|0;return Hc[a&511](b|0)|0}function nFa(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=+l;Ic[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,+l)}function oFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;Jc[a&1](b|0,c|0,+d,e|0)}function pFa(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;return Kc[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0)|0}function qFa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;Lc[a&15](b|0,c|0,d|0,e|0,f|0,g|0,+h,+i)}function rFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;g=g|0;return +Mc[a&7](b|0,+c,+d,+e,+f,g|0)}function sFa(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;Nc[a&31](b|0,+c,d|0)}function tFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;Oc[a&3](b|0,c|0,+d,+e,f|0,g|0)}function uFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;g=+g;return +Pc[a&7](b|0,+c,+d,+e,+f,+g)}function vFa(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;Qc[a&15](b|0,+c,+d)}function wFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Rc[a&63](b|0,c|0,d|0)|0}function xFa(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;Sc[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0)}function yFa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;Tc[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function zFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Uc[a&63](b|0,c|0,d|0,e|0,f|0,g|0)}function AFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return +Vc[a&7](b|0,c|0,d|0,e|0)}function BFa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;Wc[a&1](b|0,c|0,d|0,e|0,f|0,+g,+h)}function CFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;Xc[a&63](b|0,c|0,+d)}function DFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Yc[a&1](b|0,c|0,d|0,e|0,+f,g|0)}function EFa(a,b){a=a|0;b=b|0;return +Zc[a&255](b|0)}function FFa(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return _c[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function GFa(a,b,c){a=a|0;b=b|0;c=+c;return $c[a&1](b|0,+c)|0}function HFa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ad[a&63](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function IFa(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return bd[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function JFa(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;cd[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function KFa(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;dd[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function LFa(a,b,c){a=a|0;b=b|0;c=c|0;return ed[a&511](b|0,c|0)|0}function MFa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return fd[a&31](b|0,c|0,d|0,e|0,f|0)|0}function NFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +gd[a&7](b|0,c|0,d|0)}function OFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return hd[a&7](b|0,c|0,+d,+e,f|0,g|0)|0}function PFa(a,b,c){a=a|0;b=b|0;c=c|0;return +id[a&63](b|0,c|0)}function QFa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;jd[a&31](b|0,c|0,d|0,e|0,+f)}function RFa(a){a=a|0;return kd[a&15]()|0}function SFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ld[a&127](b|0,c|0,d|0,e|0)|0}function TFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;md[a&31](b|0,c|0,d|0,+e)}function UFa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;nd[a&1023](b|0,c|0,d|0)}function VFa(a){a=a|0;od[a&15]()}function WFa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return pd[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function XFa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return qd[a&7](b|0,c|0,d|0,e|0,+f)|0}function YFa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;rd[a&511](b|0,c|0,d|0,e|0)}function ZFa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;pa(0);return 0}function _Fa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;pa(1);return 0}function $Fa(a,b){a=a|0;b=+b;pa(2)}function aGa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;pa(3)}function bGa(a){a=a|0;pa(4)}function cGa(a,b){a=a|0;b=b|0;pa(5)}function dGa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;pa(6);return 0}function eGa(a){a=a|0;pa(7);return 0}function fGa(a){a=a|0;return Zb(a|0)|0}function gGa(a){a=a|0;return qc(a|0)|0}function hGa(a){a=a|0;return Db(a|0)|0}function iGa(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=+k;pa(8)}function jGa(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;pa(9)}function kGa(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;pa(10);return 0}function lGa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;pa(11)}function mGa(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=f|0;pa(12);return 0.0}function nGa(a,b,c){a=a|0;b=+b;c=c|0;pa(13)}function oGa(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;pa(14)}function pGa(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;pa(15);return 0.0}function qGa(a,b,c){a=a|0;b=+b;c=+c;pa(16)}function rGa(a,b,c){a=a|0;b=b|0;c=c|0;pa(17);return 0}function sGa(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;pa(18)}function tGa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;pa(19)}function uGa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;pa(20)}function vGa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pa(21);return 0.0}function wGa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;pa(22)}function xGa(a,b,c){a=a|0;b=b|0;c=+c;pa(23)}function yGa(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;pa(24)}function zGa(a){a=a|0;pa(25);return 0.0}function AGa(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;pa(26);return 0}function BGa(a,b){a=a|0;b=+b;pa(27);return 0}function CGa(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;pa(28)}function DGa(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;pa(29);return 0}function EGa(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;pa(30)}function FGa(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;pa(31)}function GGa(a,b){a=a|0;b=b|0;pa(32);return 0}function HGa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;pa(33);return 0}function IGa(a,b,c){a=a|0;b=b|0;c=c|0;pa(34);return 0.0}function JGa(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;pa(35);return 0}function KGa(a,b){a=a|0;b=b|0;pa(36);return 0.0}function LGa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;pa(37)}function MGa(){pa(38);return 0}function NGa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pa(39);return 0}function OGa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pa(40)}function PGa(a,b,c){a=a|0;b=b|0;c=c|0;pa(41)}function QGa(a,b,c){a=a|0;b=b|0;c=c|0;jc(a|0,b|0,c|0)}function RGa(){pa(42)}function SGa(){oc()}function TGa(){Pb()}function UGa(){ac()}function VGa(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;pa(43);return 0}function WGa(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;pa(44);return 0}function XGa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pa(45)}function YGa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yb(a|0,b|0,c|0,d|0)}
+-
+-// EMSCRIPTEN_END_FUNCS
+-var Ac=[ZFa,hza,lza,fAa,jAa,oAa,qAa,cf,QCa,$Ca,ZFa,ZFa,ZFa,ZFa,ZFa,ZFa];var Bc=[_Fa,uAa,AAa,_Fa];var Cc=[$Fa,yl,Hj,Zi,Ek,Ik,Lk,ym,zm,Am,XC,aD,bD,SD,ZD,YD,RE,XE,FE,KF,QF,yF,sG,NG,rG,rH,xH,yH,lI,rI,sI,VO,GP,rQ,aR,MR,xS,jT,VT,FU,qV,bW,MW,xX,P$,U$,V$,k3,H3,q3,d4,k4,j4,sg,ng,sja,$Fa,$Fa,$Fa,$Fa,$Fa,$Fa,$Fa,$Fa];var Dc=[aGa,rl,Il,Aj,Rj,Si,hj,yk,Wm,vr,Kr,ft,mt,Nt,ju,Sv,Xv,Lx,Yx,Wy,Zy,zz,Pz,wB,DB,KK,ZK,OO,dP,zP,QP,kQ,AQ,VQ,jR,FR,WR,qS,HS,cT,sT,OT,cU,mU,nU,jV,zV,WV,kW,FW,WW,rX,HX,A5,B5,I5,U5,V5,a6,k6,l6,z6,W6,X6,g7,o7,p7,x7,D7,C7,N7,V7,W7,b8,j8,k8,r8,z8,A8,J8,Y8,Z8,x9,Naa,Oaa,Vaa,bba,cba,mba,uba,vba,Gba,Oba,Pba,jca,sca,tca,Bca,Jca,Kca,Rca,Zca,Yca,jda,sda,rda,Gda,Sda,Tda,_da,gea,hea,oea,wea,xea,Iea,Vea,Wea,bfa,jfa,kfa,rfa,zfa,Afa,Hfa,Pfa,Qfa,Xfa,dga,ega,lga,tga,uga,Bga,Jga,Kga,Wga,cha,dha,kha,sha,tha,Aha,Iha,Jha,Qha,Zha,_ha,fia,oia,pia,yia,Jia,Kia,Ria,eja,fja,mja,Ara,zra,wra,ig,Yg,OY,vka,GN,RN,Uq,Wja,ika,ro,vT,j1,l1,MK,x0,Dma,VL,Cka,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa,aGa];var Ec=[bGa,Bd,Fd,Ed,Gd,owa,qwa,pwa,rwa,Hd,Id,Lg,Mg,Ng,Og,yg,zg,Ag,Bg,Bi,bl,cl,Ok,Pk,Qk,Rk,gk,hk,ik,jk,Uj,Vj,Wj,Xj,kj,lj,Ci,Di,uk,vk,wk,xk,Ol,Pl,Ql,Rl,Lm,Mm,Pm,Om,Tm,pn,qn,rn,sn,Fn,Gn,Jn,Kn,so,to,uo,vo,Qo,Ro,mp,$o,Iq,_q,$q,wr,yr,zr,Ar,Ms,Ns,Us,Vs,Ws,ct,dt,Gt,Ht,Ot,Pt,Ut,Vt,Wt,zv,Av,Gv,Hv,kw,Pv,Qv,Fw,Gw,Mx,Px,Qx,Rx,yx,zx,Ly,My,Ny,Ty,Uy,sz,tz,Az,Cz,FB,Dz,cB,dB,kB,lB,mB,tB,uB,zC,AC,BC,CC,qD,rD,vD,wD,xD,yD,oE,pE,qE,rE,hF,iF,oF,jF,aG,bG,cG,dG,UG,VG,WG,XG,NH,OH,PH,QH,KI,LI,PI,OI,xJ,CJ,DJ,EJ,FJ,XJ,zK,AK,DK,CK,HK,NK,OK,RK,QK,VK,jL,kL,oL,nL,FL,WL,XL,$L,_L,rM,MM,NM,RM,QM,hN,wO,xO,yO,hP,iP,jP,UP,VP,WP,DQ,EQ,FQ,nR,oR,pR,_R,$R,aS,LS,MS,NS,wT,xT,yT,gU,hU,iU,SU,TU,UU,DV,EV,FV,oW,pW,qW,_W,$W,aX,KX,LX,NX,OX,PY,QY,DZ,EZ,FZ,GZ,b$,c$,d$,e$,y0,z0,D0,C0,Y0,T1,U1,V1,W1,c2,d2,n1,o1,p1,q1,y1,z1,D1,E1,F1,G1,O1,P1,h2,i2,j2,k2,s2,t2,x2,y2,z2,A2,I2,J2,S2,T2,U2,V2,L3,M3,N3,O3,O5,P5,f6,R6,j7,A7,Q7,e8,u8,S8,Iaa,Yaa,pba,Jba,nca,Eca,Wca,pda,Nda,bea,rea,Qea,efa,ufa,Kfa,_fa,oga,Ega,Zga,nha,Dha,Tha,jia,Dia,Uia,pja,tja,uja,vja,Ija,Jja,Kja,Xja,Yja,Zja,lka,mka,nka,Kla,Lla,Pla,Ola,yma,Ema,Fma,Jma,Ima,Wma,kna,lna,pna,ona,Dna,Qpa,Rpa,Spa,Vqa,Wqa,ara,bra,fra,gra,ira,lra,jra,kra,mra,nra,Pva,zua,Fua,Ava,Kua,Qua,Bva,Qva,cwa,ewa,dwa,fwa,iwa,kwa,jwa,lwa,Dwa,Fwa,Ewa,Gwa,Nwa,Owa,uva,Pwa,NEa,Qwa,Rwa,Twa,bBa,Xwa,Ywa,axa,bxa,pxa,qxa,Jxa,Kxa,Yxa,Zxa,jya,kya,Iya,Jya,eza,gza,jza,kza,nza,oza,yza,zza,Jza,Kza,Uza,Vza,dAa,eAa,mAa,nAa,sAa,tAa,yAa,zAa,EAa,FAa,JAa,KAa,RAa,SAa,tBa,uBa,PCa,MBa,mCa,nCa,oCa,pCa,Swa,aBa,dBa,DBa,UBa,aCa,iCa,jCa,LEa,MEa,hwa,Cva,zh,CZ,SY,Xm,o_,Cn,qo,II,AJ,xK,LK,Jm,Po,Sq,mE,_F,fF,$_,Ll,tD,Q2,J3,xC,w0,KM,UL,hL,JX,_K,FI,WN,gh,Lo,Zm,jn,Lq,zi,iC,mla,tla,wla,qja,Dja,Uja,fka,lR,fP,CQ,SP,uO,YW,eU,uT,QU,YR,BV,JS,mW,$$,c0,e0,f0,d0,j0,v_,A_,k0,l0,n0,m0,h0,o0,p0,u_,x_,Wia,Eia,q0,fpa,gpa,hpa,_4,cqa,J4,Bpa,Dsa,d5,To,wka,yka,on,zpa,Apa,spa,tpa,vpa,upa,tqa,Kra,Vta,Wta,sua,asa,gAa,iAa,cBa,ZDa,eEa,fEa,gEa,hEa,iEa,jEa,Yua,kva,mua,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa,bGa];var Fc=[cGa,Dva,Gg,hl,il,ll,nl,sl,tl,ul,vl,wl,xl,zl,Fl,Gl,Hl,Jl,qj,rj,uj,wj,Bj,Cj,Dj,Ej,Fj,Gj,Ij,Oj,Pj,Qj,Sj,Ii,Ji,Mi,Oi,Ti,Ui,Vi,Wi,Xi,Yi,_i,ej,fj,gj,ij,Bk,Ck,Jk,tm,um,vm,cm,bm,sm,Dm,km,An,Jq,xr,Vr,Wr,Js,Qs,Qt,Tt,wu,xu,wv,iw,Ox,Vw,Ww,Hy,Jy,Bz,$z,aA,$A,gB,NC,OC,PC,IC,VC,LC,eD,fD,fE,gE,hE,ND,MD,eE,kE,lE,zE,AE,BE,NE,DE,JE,ZE,HE,sF,tF,uF,GF,wF,CF,RF,SF,lG,mG,nG,AG,pG,FG,BG,OG,fH,gH,hH,mH,dH,eH,BH,CH,$H,aI,bI,fI,jI,ZH,vI,wI,TI,SJ,sL,uL,wL,vL,GM,eM,gM,hM,qN,ZM,aN,bN,EO,FO,IO,KO,PO,QO,RO,SO,TO,UO,WO,aP,bP,cP,eP,pP,qP,tP,vP,AP,BP,CP,DP,EP,FP,HP,NP,OP,PP,RP,bQ,cQ,eQ,gQ,lQ,mQ,nQ,oQ,pQ,qQ,sQ,xQ,yQ,zQ,BQ,MQ,NQ,PQ,RQ,WQ,XQ,YQ,ZQ,_Q,$Q,bR,gR,hR,iR,kR,vR,uR,BR,DR,GR,HR,IR,JR,KR,LR,NR,TR,UR,VR,XR,gS,hS,kS,mS,rS,sS,tS,uS,vS,wS,yS,ES,FS,GS,IS,VS,WS,ZS,$S,dT,eT,fT,gT,hT,iT,kT,pT,qT,rT,tT,GT,HT,JT,LT,PT,QT,RT,ST,TT,UT,WT,$T,aU,bU,dU,pU,qU,tU,vU,zU,AU,BU,CU,DU,EU,GU,MU,NU,OU,PU,cV,dV,fV,hV,kV,lV,mV,nV,oV,pV,rV,wV,xV,yV,AV,NV,OV,RV,KV,XV,YV,ZV,_V,$V,aW,LV,hW,iW,jW,lW,wW,xW,AW,BW,GW,HW,IW,JW,KW,LW,NW,TW,UW,VW,XW,hX,iX,lX,nX,sX,tX,uX,fX,vX,wX,yX,EX,FX,GX,IX,y$,z$,A$,x$,N$,H$,G$,n$,c1,O0,P0,Q0,A3,B3,e3,i3,h3,z3,u3,t3,s4,t4,u4,_3,Z3,r4,y4,z4,C5,N5,W5,e6,m6,Q6,Y6,i7,q7,z7,H7,P7,X7,d8,l8,t8,B8,L8,_8,G9,Paa,Xaa,dba,oba,wba,Iba,Vba,mca,uca,Dca,Lca,Tca,bda,mda,yda,Ida,Uda,aea,iea,qea,yea,Kea,Xea,dfa,lfa,tfa,Bfa,Jfa,Rfa,Zfa,fga,nga,vga,Dga,Lga,Yga,eha,mha,uha,Cha,Kha,Sha,$ha,iia,qia,Cia,Lia,Tia,gja,oja,xja,yja,Cja,Nja,Pja,Tja,$ja,aka,eka,pka,qka,uka,Tla,fna,Oma,Pma,Qma,Gna,una,wna,xna,Aua,Eua,Lua,Pua,Sva,rza,sza,tza,uza,wza,xza,Cza,Dza,Eza,Fza,Hza,Iza,Nza,Oza,Pza,Qza,Sza,Tza,Yza,Zza,_za,$za,bAa,cAa,IAa,NAa,uCa,wCa,yCa,vCa,xCa,zCa,eva,swa,tva,rg,qg,yva,Od,Rd,pg,yY,NY,Ml,rja,MH,Eja,Vja,Wq,CN,c5,Aka,Npa,Mqa,wva,Hwa,DEa,cva,ova,nva,tDa,uDa,vDa,wDa,xDa,yDa,LBa,zDa,ADa,BDa,CDa,DDa,EDa,FDa,GDa,HDa,IDa,JDa,KDa,LDa,MDa,NDa,ODa,PDa,QDa,RDa,SDa,TDa,UDa,VDa,XDa,pEa,EEa,CEa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa,cGa];var Gc=[dGa,cxa,dxa,exa,fxa,gxa,hxa,ixa,jxa,kxa,lxa,mxa,rxa,sxa,txa,uxa,vxa,wxa,xxa,yxa,zxa,Axa,Bxa,Qxa,Sxa,bya,dya,mya,nya,oya,qya,sya,Lya,Mya,Nya,Pya,Rya,xAa,DAa,Qd,lDa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa,dGa];var Hc=[eGa,Hva,Iva,Ld,Lva,Pg,Qg,Rg,Cg,Dg,Eg,Hg,Ig,Jg,Kg,dl,el,gl,Sk,Tk,Uk,Xk,Yk,_k,kk,lk,mk,pk,qk,sk,Yj,Zj,_j,bk,ck,ek,mj,nj,pj,Ei,Fi,Hi,Dk,Hk,Sl,Tl,Ul,Wl,hm,im,jm,Qm,Rm,Nm,xn,yn,Ln,Mn,Hn,wo,xo,yo,Op,sr,ar,dr,Ir,Jr,fr,gr,Tr,fs,hr,hs,is,kr,Hs,Is,Ks,Rs,Ss,Ys,ht,tv,It,cu,aw,iu,ru,tu,bw,Mu,Nu,Pu,Qu,$u,uv,vv,xv,Dv,Fv,Jv,Uv,vx,Hw,Pw,Xx,Qw,Tw,Uw,ey,py,_w,$w,ax,fx,tx,ux,wx,Bx,Dx,Ex,Hx,_A,vz,Jz,Nz,Oz,Vz,Xz,Zz,IB,pA,rA,sA,DA,YA,ZA,aB,hB,iB,NB,yB,DC,EC,FC,HC,mD,nD,oD,zD,AD,BD,DD,GD,HD,ID,sE,tE,uE,wE,bF,cF,dF,kF,lF,mF,pF,WF,XF,YF,eG,fG,gG,iG,PG,QG,RG,YG,ZG,_G,aH,JH,KH,LH,RH,SH,TH,YH,BI,CI,DI,QI,RI,MI,$I,GJ,HJ,IJ,nK,EK,FK,BK,SK,TK,PK,pL,qL,lL,xL,zL,aM,bM,YL,iM,kM,SM,TM,OM,cN,eN,AO,BO,DO,lP,mP,oP,XP,YP,aQ,GQ,HQ,LQ,rR,sR,AR,cS,dS,fS,PS,QS,US,zT,AT,FT,jU,kU,oU,VU,WU,bV,HV,IV,MV,rW,sW,vW,cX,dX,gX,PX,QX,MX,RY,HZ,IZ,JZ,MZ,NZ,PZ,f$,g$,h$,j$,o$,p$,Z$,E0,F0,A0,R0,T0,X1,Y1,Z1,$1,a2,e2,f2,r1,s1,t1,v1,w1,A1,B1,H1,I1,J1,L1,M1,Q1,R1,l2,m2,n2,p2,q2,u2,v2,B2,C2,D2,F2,G2,K2,L2,W2,X2,Y2,_2,b3,c3,I3,P3,Q3,R3,T3,U3,V3,B4,Aja,Bja,wja,Rja,Sja,Lja,cka,dka,_ja,ska,tka,oka,Qla,Rla,Mla,$la,Kma,Lma,Gma,Rma,Tma,qna,rna,mna,yna,Ana,Tpa,Upa,Vpa,Xqa,cra,hra,Ksa,Bua,Xva,Zva,_va,Wva,Gua,Hua,Mua,Kva,Rua,Sua,Jwa,lya,BCa,DCa,FCa,LCa,NCa,HCa,JCa,Kya,CCa,ECa,GCa,MCa,OCa,ICa,KCa,pza,qza,vza,Aza,Bza,Gza,Lza,Mza,Rza,Wza,Xza,aAa,QBa,RBa,TBa,qCa,sCa,rCa,tCa,HBa,IBa,KBa,YBa,ZBa,$Ba,eCa,fCa,hCa,TY,xva,Rqa,Qqa,rY,qY,Xg,xY,th,nn,n_,co,hh,gn,Qq,$pa,rpa,xpa,qpa,ypa,$ta,cua,gwa,mwa,esa,Qta,fGa,gGa,hGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa,eGa];var Ic=[iGa,Tg];var Jc=[jGa,zk];var Kc=[kGa,Ug];var Lc=[lGa,nt,ot,Yv,Zv,_y,$y,OB,PB,lGa,lGa,lGa,lGa,lGa,lGa,lGa];var Mc=[mGa,ps,Xu,vy,BA,mGa,mGa,mGa];var Nc=[nGa,Wp,Xp,$r,Eu,ky,fA,kJ,lJ,MJ,NJ,IL,JL,uM,vM,sN,yN,I0,J0,kma,lma,Zma,_ma,Ina,Ona,nGa,nGa,nGa,nGa,nGa,nGa,nGa];var Oc=[oGa,Hja,jka,oGa];var Pc=[pGa,Ts,jw,Ky,jB,pGa,pGa,pGa];var Qc=[qGa,Cm,dD,$D,YE,AF,uG,AH,uI,m$,s3,m4,qGa,qGa,qGa,qGa];var Rc=[rGa,Eva,Jva,Nva,Yl,Bn,iD,FD,yE,rF,kG,FH,WH,u$,a3,A4,ora,hua,Nsa,Msa,Lsa,Osa,Tva,Yva,Cua,awa,Nua,GEa,HEa,Wwa,$wa,GAa,LAa,wBa,yBa,BBa,eBa,lBa,oBa,rBa,Pd,VX,WX,XX,zwa,Ppa,Yta,Zta,_ta,aua,bua,eua,dsa,qDa,sDa,zsa,ysa,tsa,tta,fva,rGa,rGa,rGa,rGa];var Sc=[sGa,wAa,CAa,sGa];var Tc=[tGa,qJ,oK,HL,tM,jN,_0,qma,Yma,Fna,wi,Km,k1,Dn,tGa,tGa];var Uc=[uGa,Jd,Or,Ur,Ps,bt,ou,vu,Cv,Ov,ay,fy,Ax,Fx,HB,_z,fB,sB,Dra,Cra,Bra,Uva,Fva,HAa,MAa,vg,jg,ug,Zg,kg,e5,fU,Ft,Ew,uz,f5,LM,jna,nW,Una,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa,uGa];var Vc=[vGa,rs,Zu,xy,KB,vGa,vGa,vGa];var Wc=[wGa,m1];var Xc=[xGa,ml,vj,Ni,Fk,Gk,Bm,cs,Gu,ny,iA,cD,_D,GE,zF,tG,zH,tI,aJ,dJ,bJ,cJ,fK,gK,kK,lK,AL,EL,HM,nM,rN,gN,JO,uP,fQ,QQ,CR,lS,_S,KT,uU,gV,SV,uW,mX,k$,d1,W0,r3,l4,ama,dma,bma,cma,gna,Vma,Hna,Cna,$F,mR,xGa,xGa,xGa,xGa];var Yc=[yGa,yK];var Zc=[zGa,Zk,rk,dk,mm,om,qm,nm,pm,cr,Gr,Xr,Yr,Zr,_r,Xs,Zs,_s,$s,at,qt,rt,St,du,yu,Bu,Cu,Du,Iv,Kv,Lv,Mv,Nv,$v,fu,Nx,Vx,gy,hy,iy,jy,Oy,Py,Qy,Ry,Sy,bz,cz,EB,Kz,bA,cA,dA,eA,nB,oB,pB,qB,rB,RB,SB,YC,ZC,_C,$C,MC,TD,VD,XD,UD,WD,SE,TE,UE,VE,WE,LF,MF,NF,OF,PF,MG,wG,yG,vG,xG,sH,tH,uH,vH,wH,mI,nI,oI,pI,qI,UI,VI,WI,XI,ZI,_I,YI,_J,$J,aK,bK,cK,dK,eK,OZ,Q$,R$,S$,T$,E$,l3,n3,p3,m3,o3,e4,g4,i4,f4,h4,Ula,Vla,Wla,Xla,Zla,_la,Yla,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa,zGa];var _c=[AGa,Wg];var $c=[BGa,Awa];var ad=[CGa,zn,Br,kt,Xt,mw,Kw,Ix,Ez,BB,sJ,uJ,vJ,qK,sK,tK,rL,GL,cM,sM,UM,iN,M0,Z0,tma,vma,wma,Mma,Xma,sna,Ena,a$,noa,Pxa,Vxa,aya,fya,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa,CGa];var bd=[DGa,hAa,pAa,DGa];var cd=[EGa,N2];var dd=[FGa,kAa,rAa,vAa,BAa,FGa,FGa,FGa];var ed=[GGa,Md,Nd,Em,Fm,Gm,Vm,Pr,Qr,Rr,gs,js,lr,vs,xs,it,pu,qu,su,Ou,Ru,av,ev,fv,Vv,by,Sw,cy,qy,ry,gx,ix,jx,Xy,Tz,Uz,Wz,qA,tA,EA,HA,JA,zB,jD,kD,lD,dE,cE,bE,_E,$E,aF,TF,UF,VF,CG,EG,DG,GH,HH,IH,yI,zI,AI,NI,ZJ,JK,XK,yL,jM,dN,W$,X$,Y$,S0,v3,x3,w3,q4,p4,o4,D5,E5,F5,G5,X5,Y5,Z5,_5,n6,o6,p6,u6,Z6,_6,$6,c7,r7,t7,u7,v7,I7,J7,K7,L7,Y7,Z7,_7,$7,m8,n8,o8,p8,E8,F8,G8,H8,$8,a9,e9,m9,Qaa,Raa,Saa,Taa,eba,fba,gba,iba,xba,yba,zba,Cba,Xba,Yba,Zba,aca,vca,xca,yca,zca,Mca,Nca,Oca,Pca,cda,dda,eda,gda,zda,Ada,Bda,Dda,Vda,Wda,Xda,Yda,jea,kea,lea,mea,zea,Aea,Bea,Eea,Yea,Zea,_ea,$ea,mfa,nfa,ofa,pfa,Cfa,Dfa,Efa,Ffa,Sfa,Tfa,Ufa,Vfa,gga,hga,iga,jga,wga,xga,yga,zga,Mga,Nga,Oga,Rga,fha,gha,hha,iha,vha,wha,xha,yha,Lha,Mha,Nha,Oha,aia,bia,cia,dia,tia,uia,via,wia,Mia,Nia,Oia,Pia,hja,ija,jja,kja,Nla,Sma,zna,$va,Dua,Iua,bwa,Mva,Oua,Tua,Ova,vBa,xBa,zBa,jBa,mBa,pBa,$Aa,Cwa,zY,l_,wwa,xwa,bn,Bwa,Jka,uwa,MY,zt,qw,XB,iz,ywa,Q4,vwa,Z4,Zpa,_pa,Epa,Fpa,csa,bsa,_ua,lva,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa,GGa];var fd=[HGa,ts,dv,hx,FA,Uwa,Zwa,Lxa,Mxa,Rxa,Xxa,_xa,$xa,cya,hya,CBa,PBa,SBa,sBa,GBa,JBa,XBa,_Ba,dCa,gCa,Asa,wsa,HGa,HGa,HGa,HGa,HGa];var gd=[IGa,TX,b0,sEa,rEa,qEa,IGa,IGa];var hd=[JGa,us,cv,Ay,GA,JGa,JGa,JGa];var id=[KGa,Kk,Mk,tn,Lr,ns,os,qs,ss,pt,ku,Wu,Yu,fw,_u,_v,Zx,ty,uy,wy,yy,az,Qz,JB,zA,CA,LB,QB,b2,g2,x1,C1,N1,S1,r2,w2,H2,M2,a0,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa,KGa];var jd=[LGa,em,Nr,nu,$x,GB,UC,QD,QE,JF,LG,pH,iI,M$,G3,a4,xg,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa,LGa];var kd=[MGa,vY,Pqa,oxa,UAa,VAa,WAa,Nra,Pra,Ora,MGa,MGa,MGa,MGa,MGa,MGa];var ld=[NGa,Xl,mr,ws,Es,et,bv,gw,pv,Rv,zy,By,Gy,Vy,MB,IA,UA,vB,hD,ED,xE,qF,jG,EH,VH,t$,$2,b4,z5,T5,j6,V6,n7,B7,U7,i8,y8,X8,Maa,aba,tba,Nba,rca,Ica,Xca,qda,Rda,fea,vea,Uea,ifa,yfa,Ofa,cga,sga,Iga,bha,rha,Hha,Yha,nia,Iia,dja,ABa,gBa,hBa,iBa,qBa,_Ca,kDa,xsa,_ra,usa,yEa,xEa,wEa,vEa,uEa,tEa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa,NGa];var md=[OGa,$l,QC,iE,KE,DF,GG,jH,dI,BL,lM,fN,I$,U0,C3,v4,Uma,Bna,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa,OGa];var nd=[PGa,jl,ol,pl,Al,Bl,Dl,Wk,ok,ak,sj,xj,yj,Jj,Kj,Mj,Ki,Pi,Qi,$i,aj,cj,Ak,Nk,Zl,xm,lm,rm,Um,un,vn,wn,Up,Yp,Kq,Vp,Zp,Er,Hr,Sr,as,bs,ds,es,nr,As,pr,qr,Cs,Ds,Fs,rr,Gs,Ls,jt,st,vt,Rt,au,eu,uu,Fu,cw,dw,Ju,gv,jv,kv,mv,ov,nv,qv,rv,sv,yv,lw,Hu,Iu,Ux,Wx,dy,ly,my,oy,Zw,kx,nx,Dy,Fy,px,ox,qx,rx,sx,xx,Yy,Xw,Yw,Hz,Lz,Yz,gA,hA,mA,lA,KA,OA,PA,RA,SA,TA,VA,WA,XA,bB,AB,jA,kA,JC,SC,WC,gD,KD,OD,RD,aE,CE,OE,EE,IE,vF,HF,xF,BF,oG,JG,qG,zG,iH,nH,qH,DH,cI,gI,kI,xI,eJ,fJ,gJ,hJ,rJ,tJ,wJ,mJ,oJ,yJ,nJ,pJ,zJ,hK,iK,jK,mK,pK,rK,uK,OJ,QJ,vK,PJ,RJ,wK,IK,WK,tL,KL,ML,SL,LL,NL,TL,dM,wM,yM,IM,xM,zM,JM,VM,tN,uN,vN,zN,AN,BN,GO,LO,MO,XO,YO,_O,rP,wP,xP,IP,JP,LP,_P,hQ,iQ,tQ,uQ,$P,OQ,SQ,TQ,cR,dR,fR,wR,ER,yR,OR,PR,RR,iS,nS,oS,zS,AS,CS,XS,SS,aT,TS,lT,nT,IT,MT,NT,XT,YT,ZT,rU,wU,xU,HU,IU,KU,_U,iV,YU,sV,$U,uV,PV,TV,UV,cW,dW,fW,yW,CW,DW,OW,PW,RW,jX,oX,pX,zX,AX,CX,LZ,B$,K$,O$,v$,N0,e1,G0,f1,g1,H0,h1,f3,E3,j3,y3,X3,x4,c4,n4,w5,x5,y5,H5,M5,Q5,R5,S5,$5,d6,g6,h6,i6,y6,N6,S6,T6,U6,f7,h7,k7,l7,m7,w7,y7,F7,G7,E7,M7,O7,R7,S7,T7,a8,c8,f8,g8,h8,q8,s8,v8,w8,x8,I8,K8,U8,V8,W8,u9,y9,Jaa,Kaa,Laa,Uaa,Waa,Zaa,_aa,$aa,lba,nba,qba,rba,sba,Fba,Hba,Kba,Lba,Mba,ica,kca,oca,pca,qca,Aca,Cca,Fca,Gca,Hca,Qca,Sca,$ca,ada,_ca,ida,kda,uda,vda,tda,Fda,Hda,Oda,Pda,Qda,Zda,$da,cea,dea,eea,nea,pea,sea,tea,uea,Hea,Jea,Rea,Sea,Tea,afa,cfa,ffa,gfa,hfa,qfa,sfa,vfa,wfa,xfa,Gfa,Ifa,Lfa,Mfa,Nfa,Wfa,Yfa,$fa,aga,bga,kga,mga,pga,qga,rga,Aga,Cga,Fga,Gga,Hga,Vga,Xga,_ga,$ga,aha,jha,lha,oha,pha,qha,zha,Bha,Eha,Fha,Gha,Pha,Rha,Vha,Wha,Xha,eia,gia,kia,lia,mia,xia,zia,Fia,Gia,Hia,Qia,Sia,aja,bja,cja,lja,nja,zja,Qja,bka,rka,ema,fma,gma,hma,sma,uma,xma,mma,oma,zma,nma,pma,Ama,Nma,$ma,bna,hna,ana,cna,ina,tna,Jna,Kna,Lna,Pna,Qna,Rna,FEa,Kwa,ava,Wua,QGa,yi,Ai,nla,nE,gF,xla,Gja,gka,Fka,Gka,zka,EN,ON,vO,gP,ZR,BJ,ZW,Xpa,Mpa,ala,R8,Sna,Kka,xka,Bka,CV,Mwa,oDa,pDa,rDa,iva,JEa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa,PGa];var od=[RGa,SGa,Hra,tY,TGa,m_,Ira,Gra,UGa,RGa,RGa,RGa,RGa,RGa,RGa,RGa];var pd=[VGa,uya,Tya,NBa,OBa,EBa,FBa,VBa,WBa,bCa,cCa,VGa,VGa,VGa,VGa,VGa];var qd=[WGa,Txa,Wxa,eya,gya,WGa,WGa,WGa];var rd=[XGa,Kd,Sg,Fg,fl,kl,ql,Cl,El,Vk,nk,$j,oj,tj,zj,Lj,Nj,Gi,Li,Ri,bj,dj,Vl,wm,am,dm,Hm,Im,Sm,In,zo,br,tr,ur,Cr,Dr,Fr,er,Mr,ir,ks,ls,jr,ms,or,ys,zs,Bs,Os,gt,lt,tt,ut,Jt,Kt,Mt,Yt,Zt,bu,lu,mu,Su,Tu,ew,Uu,Vu,hv,iv,hw,lv,Bv,Tv,Wv,Ku,Lu,Iw,Kx,Jw,Sx,Tx,Lw,_x,Rw,bx,cx,sy,dx,ex,lx,mx,Cy,Ey,Iy,Gx,Jx,dz,ez,wz,xz,yz,Fz,Gz,Iz,Rz,Sz,uA,vA,wA,xA,yA,LA,MA,NA,QA,eB,xB,CB,nA,oA,GC,RC,KC,TC,pD,sD,CD,jE,LD,PD,JD,vE,LE,ME,PE,eF,nF,EF,FF,IF,ZF,hG,HG,IG,KG,SG,$G,kH,lH,oH,bH,UH,_H,eI,hI,EI,SI,iJ,jJ,JJ,KJ,LJ,GK,UK,mL,OL,PL,ZL,AM,BM,PM,wN,xN,CO,HO,NO,ZO,$O,nP,sP,yP,KP,MP,ZP,dQ,jQ,vQ,wQ,IQ,JQ,UQ,eR,KQ,tR,xR,zR,QR,SR,eS,jS,pS,BS,DS,RS,YS,bT,mT,oT,BT,DT,CT,ET,_T,lU,sU,yU,JU,LU,XU,eV,ZU,tV,vV,JV,QV,VV,eW,gW,tW,zW,EW,QW,SW,eX,kX,qX,BX,DX,RX,KZ,i$,J$,D$,L$,_$,B0,K0,L0,_1,u1,K1,o2,E2,Z2,D3,g3,F3,d3,S3,w4,Y3,$3,W3,Sla,ima,jma,Hma,dna,ena,nna,Mna,Nna,Wpa,qra,rra,tra,Vva,Gva,Vwa,_wa,wg,lg,mg,tg,YGa,uD,R2,K3,Nl,TG,Fja,kka,hka,yC,TP,KS,JI,Jla,RU,iL,FN,QN,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa,XGa];return{_IssmConfigModule:Wd,_EnumToStringModule:Xd,_bitshift64Lshr:SEa,_InterpFromMeshToMesh2dModule:Vd,_NodeConnectivityModule:Sd,_bitshift64Shl:XEa,_IssmModule:Zd,_StringToEnumModule:Yd,_memset:WEa,_ElementConnectivityModule:Ud,_memcpy:TEa,_i64Subtract:REa,_i64Add:QEa,_TriMeshModule:Cd,_fflush:Usa,___errno_location:Sra,___cxa_can_catch:Era,_ContourToMeshModule:Td,_free:mua,_round:VEa,_memmove:UEa,___cxa_is_pointer_type:Fra,_malloc:lua,__GLOBAL__I_000101:tua,__GLOBAL__sub_I_Mesh_cpp:t5,__GLOBAL__sub_I_Geometry_cpp:Hpa,__GLOBAL__sub_I_iostream_cpp:uua,runPostSets:PEa,_emscripten_replace_memory:zc,stackAlloc:sd,stackSave:td,stackRestore:ud,establishStackSpace:vd,setThrew:wd,setTempRet0:zd,getTempRet0:Ad,dynCall_iiiiiiii:fFa,dynCall_iiiiiid:gFa,dynCall_vid:hFa,dynCall_viiiii:iFa,dynCall_vi:jFa,dynCall_vii:kFa,dynCall_iiiiiii:lFa,dynCall_ii:mFa,dynCall_viiiiiiiiiid:nFa,dynCall_viidi:oFa,dynCall_iiiiiiiiiiiiii:pFa,dynCall_viiiiiidd:qFa,dynCall_diddddi:rFa,dynCall_vidi:sFa,dynCall_viiddii:tFa,dynCall_diddddd:uFa,dynCall_vidd:vFa,dynCall_iiii:wFa,dynCall_viiiiiiiiiiiiiii:xFa,dynCall_viiiiiiii:yFa,dynCall_viiiiii:zFa,dynCall_diiii:AFa,dynCall_viiiiidd:BFa,dynCall_viid:CFa,dynCall_viiiidi:DFa,dynCall_di:EFa,dynCall_iiiiiiiiiii:FFa,dynCall_iid:GFa,dynCall_viiiiiii:HFa,dynCall_iiiiiiiiiiii:IFa,dynCall_viiiiiiiii:JFa,dynCall_viiiiiiiiii:KFa,dynCall_iii:LFa,dynCall_iiiiii:MFa,dynCall_diii:NFa,dynCall_iiiddii:OFa,dynCall_dii:PFa,dynCall_viiiid:QFa,dynCall_i:RFa,dynCall_iiiii:SFa,dynCall_viiid:TFa,dynCall_viii:UFa,dynCall_v:VFa,dynCall_iiiiiiiii:WFa,dynCall_iiiiid:XFa,dynCall_viiii:YFa}})
+-
+-
+-// EMSCRIPTEN_END_ASM
+-(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _IssmConfigModule=Module["_IssmConfigModule"]=asm["_IssmConfigModule"];var _EnumToStringModule=Module["_EnumToStringModule"]=asm["_EnumToStringModule"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _InterpFromMeshToMesh2dModule=Module["_InterpFromMeshToMesh2dModule"]=asm["_InterpFromMeshToMesh2dModule"];var _NodeConnectivityModule=Module["_NodeConnectivityModule"]=asm["_NodeConnectivityModule"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _IssmModule=Module["_IssmModule"]=asm["_IssmModule"];var _StringToEnumModule=Module["_StringToEnumModule"]=asm["_StringToEnumModule"];var _memset=Module["_memset"]=asm["_memset"];var _ElementConnectivityModule=Module["_ElementConnectivityModule"]=asm["_ElementConnectivityModule"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var __GLOBAL__sub_I_Mesh_cpp=Module["__GLOBAL__sub_I_Mesh_cpp"]=asm["__GLOBAL__sub_I_Mesh_cpp"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var __GLOBAL__I_000101=Module["__GLOBAL__I_000101"]=asm["__GLOBAL__I_000101"];var __GLOBAL__sub_I_iostream_cpp=Module["__GLOBAL__sub_I_iostream_cpp"]=asm["__GLOBAL__sub_I_iostream_cpp"];var _TriMeshModule=Module["_TriMeshModule"]=asm["_TriMeshModule"];var _fflush=Module["_fflush"]=asm["_fflush"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _ContourToMeshModule=Module["_ContourToMeshModule"]=asm["_ContourToMeshModule"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _round=Module["_round"]=asm["_round"];var _memmove=Module["_memmove"]=asm["_memmove"];var __GLOBAL__sub_I_Geometry_cpp=Module["__GLOBAL__sub_I_Geometry_cpp"]=asm["__GLOBAL__sub_I_Geometry_cpp"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var _malloc=Module["_malloc"]=asm["_malloc"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiid=Module["dynCall_iiiiiid"]=asm["dynCall_iiiiiid"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_viiiiiiiiiid=Module["dynCall_viiiiiiiiiid"]=asm["dynCall_viiiiiiiiiid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_iiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiiiii"];var dynCall_viiiiiidd=Module["dynCall_viiiiiidd"]=asm["dynCall_viiiiiidd"];var dynCall_diddddi=Module["dynCall_diddddi"]=asm["dynCall_diddddi"];var dynCall_vidi=Module["dynCall_vidi"]=asm["dynCall_vidi"];var dynCall_viiddii=Module["dynCall_viiddii"]=asm["dynCall_viiddii"];var dynCall_diddddd=Module["dynCall_diddddd"]=asm["dynCall_diddddd"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiiiiii"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_diiii=Module["dynCall_diiii"]=asm["dynCall_diiii"];var dynCall_viiiiidd=Module["dynCall_viiiiidd"]=asm["dynCall_viiiiidd"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=asm["dynCall_iiiiiiiiiii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_iiiiiiiiiiii=Module["dynCall_iiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_iiiiid=Module["dynCall_iiiiid"]=asm["dynCall_iiiiid"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{if(e&&typeof e==="object"&&e.stack)Module.printErr("exception thrown: "+[e,e.stack]);throw e}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=false;if(Module["noInitialRun"]){shouldRunNow=false}run()
+-
+-
+-
+-
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcostfunctions.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcostfunctions.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/supportedcostfunctions.js	(nonexistent)
+@@ -1,10 +0,0 @@
+-function supportedcostfunctions() {
+-    function range(start, count) {
+-      return Array.apply(0, Array(count))
+-        .map(function (element, index) { 
+-          return index + start;  
+-      });
+-    }
+-    var list = range(101,5).concat(range(201,1).concat(range(501,7)).concat(range(510,1)).concat(range(601,4)));
+-    return list;
+-}
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js	(nonexistent)
+@@ -1 +0,0 @@
+-link /home/andy/Programming/Research/trunk-jpl/src/m/classes/inversion.js
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js
+___________________________________________________________________
+Deleted: svn:special
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin/matlabfunc.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin/matlabfunc.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin/matlabfunc.js	(nonexistent)
+@@ -1,62 +0,0 @@
+-function ones(...args) {
+-    var array = [];
+-    for (var i = 0; i < args[0]; ++i) {
+-        array.push(args.length === 1 ? 1 : ones(args.slice(1)));
+-    }
+-    return array;
+-}
+-
+-function zeros(...args) {
+-    var array = [];
+-    for (var i = 0; i < args[0]; ++i) {
+-        array.push(args.length === 0 ? 1 : ones(args.slice(1)));
+-    }
+-    return array;
+-}
+-
+-function numel(matrix) { // Assume all rows are the same length
+-    return matrix.length * (matrix.constructor === Array ? matrix[0].length : 1);
+-}
+-
+-function ArrayFill2D(arr, value) {
+-    for (var i = 0; i < newarr.length; ++i) {
+-        for (var j = 0; j < newarr[0].length; ++j) {
+-            arr[i][j] = value;
+-        }
+-    }
+-    return arr;
+-}
+-
+-function ArrayFindNot2D(array, value) {
+-    var indices = [];
+-
+-    for (var i = 0; i < array.length; ++i) {
+-        for (var j = 0; j < array[0].length; ++j) {
+-            if (array[i][j] !== value) {
+-                indices.push(array[i][j]);
+-            }
+-        }
+-    }
+-
+-    return indices;
+-}
+-
+-function ArrayFind2D(array, value) {
+-    var indices = [];
+-
+-    for (var i = 0; i < array.length; ++i) {
+-        for (var j = 0; j < array[0].length; ++j) {
+-            if (array[i][j] === value) {
+-                indices.push(array[i][j]);
+-            }
+-        }
+-    }
+-
+-    return indices;
+-}
+-
+-function getMatrixWidth(matrix) {
+-    return matrix.reduce(function (result, row) {
+-        return Math.max(result, row.length);
+-    }, 0);
+-}
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/bin
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/bin	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/bin	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/bin
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Data/SquareShelfConstrained.data.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Data/SquareShelfConstrained.data.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Data/SquareShelfConstrained.data.js	(nonexistent)
+@@ -1,1974 +0,0 @@
+-var x =[ 0, //{{{
+-    1000000.00,
+-    1000000.00,
+-             0,
+-     500000.00,
+-     500000.00,
+-    1000000.00,
+-     500000.00,
+-             0,
+-     750000.00,
+-     250000.00,
+-     250000.00,
+-     750000.00,
+-    1000000.00,
+-     750000.00,
+-     625000.00,
+-     875000.00,
+-     750000.00,
+-     625000.00,
+-     562500.00,
+-     625000.00,
+-     687500.00,
+-     687500.00,
+-     718750.00,
+-     875000.00,
+-     792968.75,
+-     687500.00,
+-     750651.04,
+-     812500.00,
+-     784376.26,
+-     812500.00,
+-     737044.20,
+-     711415.45,
+-     619808.98,
+-     679903.16,
+-     875000.00,
+-     816565.05,
+-     790340.66,
+-     879033.53,
+-     820390.62,
+-     759468.98,
+-    1000000.00,
+-     702320.86,
+-     894268.51,
+-     743370.58,
+-     756140.79,
+-     870143.86,
+-    1000000.00,
+-     941365.26,
+-     927759.20,
+-     835259.33,
+-    1000000.00,
+-     683743.63,
+-     843782.67,
+-     943774.60,
+-     728886.91,
+-     703008.76,
+-     617381.75,
+-     725024.94,
+-     815309.94,
+-     864434.02,
+-     923153.03,
+-     839208.76,
+-     790417.28,
+-     811985.49,
+-     904485.58,
+-    1000000.00,
+-     764145.24,
+-    1000000.00,
+-     803825.28,
+-     805004.84,
+-    1000000.00,
+-     897809.81,
+-     856709.28,
+-     849378.44,
+-     880439.03,
+-     874923.01,
+-     926298.65,
+-     850818.89,
+-     773165.13,
+-     821586.23,
+-     750000.00,
+-     838262.90,
+-     843656.20,
+-    1000000.00,
+-     923364.60,
+-    1000000.00,
+-     947000.54,
+-     951408.71,
+-    1000000.00,
+-     941348.21,
+-     955296.62,
+-     908023.58,
+-     562500.00,
+-     250000.00,
+-     631606.65,
+-     528507.30,
+-     576013.63,
+-     577293.44,
+-     535671.78,
+-     502260.83,
+-     455537.02,
+-     492730.44,
+-     375000.00,
+-     558796.01,
+-     437500.00,
+-     406250.00,
+-     523391.71,
+-     471037.47,
+-     357447.01,
+-     414577.09,
+-     371858.37,
+-     406507.82,
+-     333442.08,
+-     431668.11,
+-     282518.77,
+-     329423.36,
+-     292139.49,
+-     532046.01,
+-     612510.98,
+-     455486.33,
+-     312500.00,
+-             0,
+-     327477.57,
+-     528654.71,
+-     440987.54,
+-     576170.41,
+-     490525.44,
+-     445996.32,
+-     603292.83,
+-     638938.30,
+-     678235.71,
+-     661669.03,
+-     215117.76,
+-     332210.28,
+-     669283.27,
+-     667292.83,
+-     568893.78,
+-     608536.87,
+-     555812.71,
+-     660330.04,
+-     676819.27,
+-     727629.11,
+-     620541.50,
+-     590910.90,
+-     569641.27,
+-     551966.23,
+-     498954.02,
+-     483275.96,
+-     760325.72,
+-     700090.45,
+-     772962.54,
+-     508900.23,
+-     442063.96,
+-     645432.38,
+-     599915.31,
+-     609769.65,
+-     512359.02,
+-     672668.03,
+-     449356.47,
+-     352874.69,
+-     404046.43,
+-     385658.72,
+-     382051.86,
+-     268990.07,
+-     382316.37,
+-     322143.60,
+-     398597.44,
+-     246074.32,
+-     325043.39,
+-     272789.22,
+-     169268.75,
+-     224121.33,
+-             0,
+-     190250.64,
+-     220642.79,
+-     262363.99,
+-     727971.89,
+-     731757.70,
+-     782353.48,
+-     714788.34,
+-     793570.57,
+-     648067.15,
+-     875000.00,
+-     785216.54,
+-     886603.37,
+-     847230.22,
+-     835381.89,
+-     902841.78,
+-     812500.00,
+-     873594.69,
+-     937500.00,
+-     934993.85,
+-    1000000.00,
+-     956423.95,
+-     934982.86,
+-     431714.85,
+-     375712.88,
+-     208581.66,
+-     543451.44,
+-     625000.00,
+-     292441.32,
+-     219943.28,
+-     173276.46,
+-     255248.48,
+-             0,
+-     133383.78,
+-     322294.88,
+-     102245.78,
+-     588925.13,
+-     536316.75,
+-     608474.93,
+-     720734.45,
+-     682677.77,
+-     687500.00,
+-     326922.57,
+-     278769.51,
+-     340100.93,
+-     182890.39,
+-     302010.56,
+-     226879.14,
+-     175206.51,
+-     233160.67,
+-     166331.80,
+-     299277.36,
+-     250000.00,
+-     396132.12,
+-     348745.04,
+-     343516.37,
+-     562500.00,
+-     531250.00,
+-     375000.00,
+-     437500.00,
+-     480127.31,
+-     486755.23,
+-     437500.00,
+-     418753.58,
+-     348418.56,
+-     215190.87,
+-             0,
+-     475106.46,
+-     450403.05,
+-     462691.02,
+-     490774.65,
+-     444026.71,
+-     442305.62,
+-     106797.52,
+-     156735.92,
+-     125000.00,
+-      88484.21,
+-     175049.24,
+-    1000000.00,
+-     949486.27,
+-     910659.68,
+-     264470.56,
+-     187500.00,
+-     156250.00,
+-      70150.11,
+-     210176.80,
+-     121372.74,
+-     230344.80,
+-     446594.38,
+-     635173.42,
+-    1000000.00,
+-     191736.12,
+-     143967.18,
+-     208897.91,
+-     154003.12,
+-             0,
+-      70969.18,
+-     214394.01,
+-     280158.83,
+-     192618.72,
+-     125000.00,
+-     249231.59,
+-     140263.51,
+-     291112.70,
+-     313365.54,
+-     364113.09,
+-     295977.82,
+-      76015.00,
+-     187500.00,
+-     218750.00,
+-     156250.00,
+-     102877.29,
+-      62500.00,
+-             0,
+-      50433.46,
+-     312500.00,
+-     400218.61,
+-     401492.48,
+-     363132.76,
+-      98732.17,
+-             0,
+-      39542.29,
+-     330682.47,
+-      43070.27,
+-     106669.47,
+-      57457.06,
+-             0,
+-             0,
+-      50794.52,
+-      97418.47,
+-      62039.94,
+-     143821.44,
+-     119380.50,
+-      44732.05,
+-             0,
+-             0,
+-      66521.34,
+-      69603.39,
+-      43959.82,
+-      43762.58,
+-      93564.32,
+-      44263.93,
+-     117747.91,
+-     139478.83,
+-     124387.95,
+-             0,
+-      48631.61,
+-      53659.39,
+-      99563.52,
+-     659034.30,
+-     194316.29,
+-     213251.06,
+-     400950.40,
+-     535853.28,
+-     517149.04,
+-             0,
+-      41128.00,
+-      50958.58,
+-      72804.35,
+-      62500.00,
+-             0,
+-     857793.90,
+-     937500.00,
+-     937500.00,
+-     901657.70,
+-     937500.00,
+-    1000000.00]; //}}}
+-var y=[ 0, //{{{
+-             0,
+-    1000000.00,
+-    1000000.00,
+-     500000.00,
+-             0,
+-     500000.00,
+-    1000000.00,
+-     500000.00,
+-     750000.00,
+-     250000.00,
+-     750000.00,
+-     500000.00,
+-     750000.00,
+-    1000000.00,
+-     875000.00,
+-     875000.00,
+-     875000.00,
+-    1000000.00,
+-     937500.00,
+-     937500.00,
+-     906250.00,
+-    1000000.00,
+-     953125.00,
+-    1000000.00,
+-     937500.00,
+-     828125.00,
+-     920572.92,
+-     878051.76,
+-     812500.00,
+-    1000000.00,
+-     827170.23,
+-     783194.86,
+-     763264.44,
+-     707543.97,
+-     721951.29,
+-     754091.69,
+-     637221.80,
+-     798475.65,
+-     691856.09,
+-     689783.04,
+-     625000.00,
+-     620870.45,
+-     615640.57,
+-     644980.88,
+-     576238.43,
+-     666169.59,
+-     687500.00,
+-     718750.00,
+-     662653.98,
+-     829478.44,
+-     875000.00,
+-     543703.29,
+-     530812.60,
+-     784862.85,
+-     540067.13,
+-     500834.56,
+-     488117.17,
+-     417114.77,
+-     583137.43,
+-     575959.28,
+-     521802.97,
+-     626976.87,
+-     535111.03,
+-     469465.03,
+-     758765.61,
+-     812500.00,
+-     450532.37,
+-     250000.00,
+-     364474.06,
+-     417194.98,
+-     375000.00,
+-     431402.06,
+-     389664.51,
+-     437988.85,
+-     485024.68,
+-     283320.55,
+-     362242.64,
+-     333923.92,
+-     265892.28,
+-     288956.91,
+-             0,
+-     191587.33,
+-     242623.96,
+-     125000.00,
+-     213744.02,
+-     437500.00,
+-     466364.65,
+-     411369.19,
+-     312500.00,
+-     281250.00,
+-     325736.34,
+-     317956.14,
+-    1000000.00,
+-    1000000.00,
+-     818704.70,
+-     835140.58,
+-     801559.48,
+-     853763.55,
+-     889585.37,
+-     939760.83,
+-     872436.66,
+-     734134.40,
+-    1000000.00,
+-     737678.54,
+-    1000000.00,
+-     930524.50,
+-     780113.29,
+-     812731.80,
+-     815106.21,
+-     829938.20,
+-     877039.54,
+-     743576.31,
+-     939541.44,
+-     784783.37,
+-     865184.74,
+-     854270.44,
+-     800285.94,
+-     618790.44,
+-     695127.75,
+-     922347.37,
+-    1000000.00,
+-     750000.00,
+-     727873.35,
+-     682006.93,
+-     660032.60,
+-     652856.74,
+-     648262.24,
+-     570982.80,
+-     572117.19,
+-     635651.50,
+-     660876.82,
+-     589837.26,
+-     822030.59,
+-     775011.93,
+-     756356.32,
+-     446687.43,
+-     378923.73,
+-     426682.39,
+-     465627.29,
+-     343357.76,
+-     394146.07,
+-     349578.94,
+-     376385.08,
+-     300208.01,
+-     523291.43,
+-     571482.87,
+-     577008.32,
+-     410345.02,
+-     384657.84,
+-     280362.49,
+-     320014.02,
+-     451952.45,
+-     464419.94,
+-     289909.55,
+-     198407.22,
+-     250577.47,
+-     241961.37,
+-     211680.91,
+-     517504.82,
+-     538287.18,
+-     541502.43,
+-     612254.76,
+-     482738.10,
+-     458789.56,
+-     376142.77,
+-     486708.47,
+-     429481.16,
+-     566975.56,
+-     416629.96,
+-     516114.28,
+-     494186.76,
+-     490551.45,
+-     250000.00,
+-     395130.61,
+-     438064.38,
+-     376306.64,
+-     229415.05,
+-     122509.49,
+-     208273.89,
+-     175428.37,
+-     143850.07,
+-     140502.99,
+-             0,
+-      67856.86,
+-     101540.82,
+-     138402.56,
+-      86288.28,
+-     158344.27,
+-             0,
+-      51593.97,
+-             0,
+-      62270.01,
+-     187500.00,
+-     156250.00,
+-     111705.85,
+-     614845.27,
+-     679697.99,
+-     317812.85,
+-     102480.06,
+-             0,
+-     644558.17,
+-     361338.44,
+-     350274.35,
+-     328876.94,
+-     375000.00,
+-     271457.22,
+-     343067.08,
+-     402793.01,
+-     140294.94,
+-     180339.60,
+-      70536.35,
+-      58255.14,
+-      97856.74,
+-             0,
+-     679082.32,
+-     704028.74,
+-     631439.06,
+-     676013.97,
+-     586192.29,
+-     703542.79,
+-     758241.27,
+-     644595.87,
+-     593593.21,
+-     286334.17,
+-             0,
+-     280074.28,
+-     299300.04,
+-     218400.54,
+-             0,
+-      47201.74,
+-             0,
+-      75323.67,
+-      47102.18,
+-     103417.45,
+-             0,
+-     165415.80,
+-     584511.32,
+-     777604.49,
+-     875000.00,
+-     192009.96,
+-     249299.90,
+-     145315.40,
+-     324936.76,
+-     301296.02,
+-     362740.14,
+-     845423.29,
+-     814178.18,
+-    1000000.00,
+-     760623.21,
+-     898978.26,
+-     562500.00,
+-     593750.00,
+-     567168.26,
+-     932160.89,
+-    1000000.00,
+-     952573.37,
+-     929849.89,
+-     941394.35,
+-     910245.08,
+-     887045.13,
+-     711233.62,
+-     534282.83,
+-      62500.00,
+-     260968.98,
+-     162770.50,
+-     191902.67,
+-     218606.39,
+-     125000.00,
+-     204711.03,
+-      92726.84,
+-     185075.65,
+-     141260.30,
+-             0,
+-     137508.90,
+-      88618.69,
+-      68986.34,
+-     129647.50,
+-      76619.17,
+-     231890.83,
+-     128996.12,
+-             0,
+-      41199.93,
+-      40241.38,
+-      49434.20,
+-             0,
+-      65536.00,
+-      51062.77,
+-             0,
+-      42666.40,
+-     114827.65,
+-     156155.21,
+-     168535.63,
+-     187500.00,
+-      97803.02,
+-      43445.41,
+-     164826.19,
+-     334482.71,
+-     365594.16,
+-     437500.00,
+-     312500.00,
+-     419179.12,
+-     476605.37,
+-     281250.00,
+-     442576.08,
+-     542459.43,
+-     471741.14,
+-     625000.00,
+-     562500.00,
+-     523498.57,
+-     598067.34,
+-     322564.20,
+-     240327.37,
+-     246137.38,
+-     561766.58,
+-     591080.84,
+-     641861.77,
+-     705710.88,
+-     687500.00,
+-     718750.00,
+-     657460.18,
+-     666135.63,
+-      47644.44,
+-     544673.40,
+-     601399.14,
+-     220045.66,
+-     292367.99,
+-     370285.70,
+-     812500.00,
+-     781250.00,
+-     836877.18,
+-     880834.88,
+-    1000000.00,
+-     937500.00,
+-     937500.00,
+-     925824.50,
+-    1000000.00,
+-     959042.80,
+-     861983.44,
+-     937500.00]; //}}}
+-var vx =[ 0, //{{{
+-             0,
+-             0,
+-             0,
+-          1.06,
+-             0,
+-             0,
+-             0,
+-             0,
+-         98.52,
+-         99.38,
+-        -94.27,
+-         -4.26,
+-             0,
+-             0,
+-        106.36,
+-        210.00,
+-        192.06,
+-             0,
+-         48.30,
+-         90.18,
+-        158.39,
+-             0,
+-        122.10,
+-             0,
+-        204.38,
+-        126.53,
+-        201.33,
+-        220.43,
+-        160.49,
+-             0,
+-        151.85,
+-        107.37,
+-         54.44,
+-         51.59,
+-         97.47,
+-        118.15,
+-         45.15,
+-        158.09,
+-         74.73,
+-         61.60,
+-             0,
+-         23.73,
+-         47.66,
+-         41.24,
+-         17.36,
+-         65.43,
+-             0,
+-         80.82,
+-         58.32,
+-        186.32,
+-             0,
+-          3.32,
+-          1.41,
+-        100.86,
+-          5.30,
+-         -1.51,
+-         -1.87,
+-        -22.02,
+-         24.52,
+-         24.83,
+-         -2.09,
+-         48.43,
+-          2.90,
+-        -11.16,
+-        118.64,
+-             0,
+-        -15.04,
+-             0,
+-        -53.63,
+-        -29.86,
+-             0,
+-        -34.85,
+-        -45.14,
+-        -26.83,
+-         -9.00,
+-        -95.11,
+-        -51.45,
+-        -72.33,
+-        -95.02,
+-        -92.08,
+-             0,
+-       -141.64,
+-       -114.80,
+-             0,
+-       -108.28,
+-             0,
+-        -22.46,
+-        -23.52,
+-             0,
+-        -63.36,
+-        -45.08,
+-        -68.59,
+-             0,
+-             0,
+-         88.53,
+-         24.42,
+-         47.17,
+-         65.40,
+-         30.32,
+-          2.87,
+-        -32.11,
+-         -1.11,
+-             0,
+-         19.72,
+-             0,
+-        -74.71,
+-         13.31,
+-        -12.68,
+-        -85.39,
+-        -52.31,
+-        -98.96,
+-        -31.91,
+-       -126.23,
+-        -33.15,
+-       -168.78,
+-       -127.85,
+-       -113.05,
+-          3.73,
+-         25.88,
+-        -28.14,
+-             0,
+-             0,
+-        -54.29,
+-          6.07,
+-         -7.19,
+-         11.34,
+-         -0.16,
+-         -0.22,
+-          4.96,
+-         16.50,
+-         30.60,
+-         11.89,
+-       -167.77,
+-        -80.40,
+-         72.66,
+-         -9.43,
+-         -8.40,
+-         -7.51,
+-         -1.21,
+-        -35.04,
+-        -23.15,
+-        -46.83,
+-        -19.97,
+-        -28.94,
+-          0.88,
+-          1.90,
+-          1.58,
+-          2.34,
+-        -37.84,
+-        -70.28,
+-        -69.67,
+-          0.93,
+-          3.98,
+-        -48.82,
+-        -56.57,
+-        -51.69,
+-         -4.61,
+-        -92.92,
+-          1.22,
+-         -1.98,
+-         -0.14,
+-         -6.83,
+-          3.66,
+-         13.06,
+-         18.74,
+-          5.90,
+-          9.75,
+-        -11.42,
+-         18.20,
+-          0.40,
+-          4.48,
+-          5.15,
+-             0,
+-         42.78,
+-         23.87,
+-         38.99,
+-       -103.80,
+-       -132.41,
+-       -130.63,
+-       -126.64,
+-       -157.32,
+-        -94.57,
+-             0,
+-       -125.29,
+-       -139.68,
+-       -152.66,
+-       -151.02,
+-       -127.20,
+-             0,
+-       -104.08,
+-             0,
+-        -69.03,
+-             0,
+-        -80.34,
+-       -107.03,
+-         -3.11,
+-        -20.48,
+-         74.88,
+-        -27.50,
+-             0,
+-        -28.90,
+-         51.47,
+-         62.66,
+-         59.36,
+-             0,
+-         99.89,
+-         39.70,
+-         45.08,
+-        -58.14,
+-        -21.77,
+-        -58.26,
+-        -97.48,
+-       -107.06,
+-             0,
+-        -33.93,
+-        -56.70,
+-        -15.90,
+-        -61.45,
+-         -9.79,
+-        -68.57,
+-       -118.40,
+-        -38.45,
+-        -24.30,
+-         67.95,
+-             0,
+-         37.44,
+-         45.71,
+-         81.87,
+-             0,
+-        -11.23,
+-             0,
+-         33.96,
+-          6.22,
+-          7.93,
+-             0,
+-         55.37,
+-         -6.11,
+-       -126.14,
+-             0,
+-         16.31,
+-         20.66,
+-         28.64,
+-          0.85,
+-         20.30,
+-          8.57,
+-       -180.75,
+-       -174.45,
+-             0,
+-       -117.58,
+-       -227.43,
+-             0,
+-         22.05,
+-          6.36,
+-       -175.77,
+-             0,
+-       -177.70,
+-       -178.91,
+-       -193.64,
+-       -213.47,
+-       -208.14,
+-        -11.05,
+-          2.37,
+-             0,
+-        104.62,
+-        143.06,
+-        136.85,
+-        125.74,
+-             0,
+-         93.48,
+-        147.01,
+-        121.98,
+-        154.33,
+-             0,
+-        148.01,
+-        145.90,
+-        112.62,
+-        119.04,
+-         78.25,
+-         92.46,
+-        118.43,
+-             0,
+-         93.51,
+-        102.75,
+-        109.77,
+-             0,
+-             0,
+-         68.45,
+-             0,
+-         38.61,
+-         64.65,
+-         88.59,
+-        123.38,
+-             0,
+-         75.40,
+-         62.22,
+-         79.75,
+-         64.80,
+-         44.90,
+-             0,
+-             0,
+-         30.65,
+-         16.75,
+-         82.29,
+-         29.52,
+-         -7.98,
+-         14.13,
+-             0,
+-             0,
+-        -17.43,
+-        -19.78,
+-         39.27,
+-         70.57,
+-        103.88,
+-         -7.47,
+-        -23.11,
+-        -49.25,
+-        -87.42,
+-             0,
+-        -69.20,
+-        -50.66,
+-        -65.04,
+-        -63.82,
+-         -8.68,
+-        -23.77,
+-         53.60,
+-        -14.42,
+-         -1.64,
+-             0,
+-        -82.69,
+-       -127.73,
+-       -157.86,
+-             0,
+-             0,
+-        220.71,
+-        162.18,
+-             0,
+-        150.08,
+-        150.12,
+-             0]; //}}}
+-var vy =[ 0, //{{{
+-             0,
+-             0,
+-             0,
+-       1619.49,
+-             0,
+-             0,
+-             0,
+-             0,
+-       1392.27,
+-       1188.56,
+-       1395.65,
+-       1452.44,
+-             0,
+-             0,
+-       1298.38,
+-        766.39,
+-       1138.53,
+-             0,
+-        927.25,
+-        877.20,
+-       1081.21,
+-             0,
+-        638.61,
+-             0,
+-        705.43,
+-       1382.70,
+-        907.94,
+-        979.15,
+-       1227.77,
+-             0,
+-       1297.35,
+-       1416.22,
+-       1538.22,
+-       1525.45,
+-       1029.03,
+-       1223.08,
+-       1373.30,
+-        909.03,
+-       1262.65,
+-       1419.06,
+-             0,
+-       1531.61,
+-        995.93,
+-       1462.65,
+-       1455.20,
+-       1092.03,
+-             0,
+-        616.34,
+-        761.96,
+-       1029.65,
+-             0,
+-       1552.90,
+-       1226.70,
+-        543.19,
+-       1500.29,
+-       1529.54,
+-       1595.18,
+-       1456.50,
+-       1320.62,
+-       1139.39,
+-        816.26,
+-       1233.00,
+-       1380.17,
+-       1306.29,
+-        809.95,
+-             0,
+-       1405.50,
+-             0,
+-       1230.93,
+-       1284.81,
+-             0,
+-        899.64,
+-       1065.17,
+-       1141.21,
+-       1041.37,
+-        838.78,
+-        673.32,
+-       1023.09,
+-       1162.13,
+-       1059.53,
+-             0,
+-        798.03,
+-        892.42,
+-             0,
+-        495.54,
+-             0,
+-        580.56,
+-        503.81,
+-             0,
+-        465.65,
+-        395.83,
+-        716.40,
+-             0,
+-             0,
+-       1455.92,
+-       1470.71,
+-       1521.05,
+-       1405.51,
+-       1256.40,
+-        917.14,
+-       1352.49,
+-       1600.45,
+-             0,
+-       1589.29,
+-             0,
+-        967.30,
+-       1563.03,
+-       1519.27,
+-       1462.17,
+-       1464.61,
+-       1283.29,
+-       1576.28,
+-        852.51,
+-       1551.33,
+-       1237.14,
+-       1332.92,
+-       1407.55,
+-       1619.57,
+-       1588.68,
+-       1029.47,
+-             0,
+-             0,
+-       1524.91,
+-       1613.84,
+-       1611.70,
+-       1609.22,
+-       1619.00,
+-       1616.90,
+-       1605.97,
+-       1585.52,
+-       1547.54,
+-       1573.97,
+-       1205.85,
+-       1491.46,
+-       1506.09,
+-       1546.38,
+-       1582.85,
+-       1584.62,
+-       1611.28,
+-       1486.20,
+-       1509.30,
+-       1393.33,
+-       1547.02,
+-       1494.59,
+-       1614.65,
+-       1618.48,
+-       1621.38,
+-       1602.99,
+-       1364.42,
+-       1345.20,
+-       1256.72,
+-       1614.07,
+-       1610.59,
+-       1432.10,
+-       1265.45,
+-       1397.92,
+-       1424.33,
+-       1236.84,
+-       1616.96,
+-       1586.97,
+-       1607.97,
+-       1601.76,
+-       1597.01,
+-       1476.70,
+-       1554.73,
+-       1549.11,
+-       1591.19,
+-       1462.44,
+-       1529.48,
+-       1500.68,
+-       1250.40,
+-       1407.74,
+-             0,
+-       1244.07,
+-       1375.30,
+-       1408.15,
+-       1183.64,
+-        803.25,
+-       1006.75,
+-       1054.70,
+-        783.42,
+-        997.80,
+-             0,
+-        449.58,
+-        386.59,
+-        619.74,
+-        465.23,
+-        474.56,
+-             0,
+-        247.34,
+-             0,
+-        167.10,
+-             0,
+-        235.10,
+-        263.31,
+-       1613.80,
+-       1587.70,
+-       1203.52,
+-        837.02,
+-             0,
+-       1516.37,
+-       1295.49,
+-       1132.67,
+-       1338.28,
+-             0,
+-        871.64,
+-       1466.21,
+-        907.04,
+-       1032.52,
+-       1232.40,
+-        616.06,
+-        456.63,
+-        739.98,
+-             0,
+-       1546.05,
+-       1474.90,
+-       1573.91,
+-       1287.44,
+-       1540.92,
+-       1386.17,
+-       1191.36,
+-       1429.80,
+-       1258.43,
+-       1353.32,
+-             0,
+-       1459.16,
+-       1442.41,
+-       1274.50,
+-             0,
+-        438.29,
+-             0,
+-        659.04,
+-        435.91,
+-        850.65,
+-             0,
+-       1151.04,
+-       1584.37,
+-       1284.45,
+-             0,
+-       1276.03,
+-       1429.12,
+-       1078.90,
+-       1554.86,
+-       1512.96,
+-       1574.04,
+-        745.50,
+-       1027.16,
+-             0,
+-        780.09,
+-        862.57,
+-             0,
+-        567.30,
+-        891.65,
+-        834.83,
+-             0,
+-        490.02,
+-        361.35,
+-        687.58,
+-        615.29,
+-       1042.57,
+-       1603.74,
+-       1590.74,
+-             0,
+-       1051.03,
+-        666.22,
+-        941.56,
+-        841.37,
+-             0,
+-        453.67,
+-        588.49,
+-       1080.39,
+-        738.85,
+-             0,
+-        849.76,
+-        429.99,
+-        548.42,
+-        904.98,
+-        639.96,
+-       1232.98,
+-        337.14,
+-             0,
+-        301.78,
+-        239.88,
+-        213.59,
+-             0,
+-             0,
+-        113.54,
+-             0,
+-        393.37,
+-        898.54,
+-       1084.03,
+-        510.41,
+-             0,
+-        162.78,
+-        376.10,
+-        250.47,
+-        844.66,
+-        556.31,
+-             0,
+-             0,
+-        538.12,
+-        938.17,
+-        509.26,
+-       1117.10,
+-       1080.94,
+-        497.80,
+-             0,
+-             0,
+-        715.37,
+-        751.00,
+-        408.31,
+-        337.32,
+-        629.18,
+-        528.73,
+-       1065.63,
+-       1144.69,
+-       1037.25,
+-             0,
+-        541.72,
+-        600.74,
+-        924.29,
+-        412.98,
+-       1347.97,
+-       1393.51,
+-       1329.15,
+-       1512.89,
+-       1586.47,
+-             0,
+-        420.92,
+-        435.64,
+-        492.18,
+-             0,
+-             0,
+-        584.82,
+-        331.77,
+-             0,
+-        306.87,
+-        481.10,
+-             0]; //}}}
+-var index=[[32,33,10], //{{{
+-	[68,57,59],
+-	[148,5,147],
+-	[154,160,164],
+-	[74,75,71],
+-	[185,213,82],
+-	[23,19,21],
+-	[49,36,50],
+-	[97,108,98],
+-	[51,37,39],
+-	[233,235,243],
+-	[272,229,280],
+-	[306,324,224],
+-	[222,248,250],
+-	[137,57,58],
+-	[10,33,136],
+-	[17,29,51],
+-	[15,24,28],
+-	[96,98,34],
+-	[19,20,21],
+-	[15,26,31],
+-	[335,17,336],
+-	[29,18,30],
+-	[27,18,22],
+-	[21,22,24],
+-	[102,100,101],
+-	[8,101,94],
+-	[22,21,16],
+-	[20,16,21],
+-	[15,28,26],
+-	[27,22,16],
+-	[18,28,22],
+-	[24,15,23],
+-	[21,24,23],
+-	[29,26,28],
+-	[25,335,338],
+-	[26,29,335],
+-	[136,27,96],
+-	[32,10,30],
+-	[22,28,24],
+-	[29,28,18],
+-	[18,32,30],
+-	[335,29,17],
+-	[30,10,37],
+-	[29,30,51],
+-	[18,27,32],
+-	[335,31,26],
+-	[32,27,33],
+-	[96,27,16],
+-	[136,35,10],
+-	[96,99,98],
+-	[38,45,46],
+-	[34,98,105],
+-	[45,38,41],
+-	[36,37,40],
+-	[48,14,49],
+-	[41,40,37],
+-	[37,36,39],
+-	[38,40,41],
+-	[63,44,47],
+-	[66,49,55],
+-	[66,55,39],
+-	[41,37,10],
+-	[47,40,63],
+-	[10,35,41],
+-	[132,45,41],
+-	[120,35,136],
+-	[36,40,47],
+-	[64,56,13],
+-	[38,46,60],
+-	[62,252,253],
+-	[132,41,35],
+-	[46,45,43],
+-	[56,43,53],
+-	[56,64,46],
+-	[63,40,38],
+-	[50,48,49],
+-	[49,14,55],
+-	[47,44,50],
+-	[50,36,47],
+-	[253,50,44],
+-	[48,50,42],
+-	[37,51,30],
+-	[17,51,39],
+-	[131,132,120],
+-	[339,39,55],
+-	[13,56,57],
+-	[65,13,68],
+-	[254,61,54],
+-	[52,339,67],
+-	[339,52,336],
+-	[43,56,46],
+-	[57,56,53],
+-	[132,131,43],
+-	[53,263,57],
+-	[59,137,142],
+-	[58,139,137],
+-	[72,78,92],
+-	[75,73,76],
+-	[64,60,46],
+-	[61,60,54],
+-	[254,54,62],
+-	[63,61,44],
+-	[54,64,65],
+-	[252,42,253],
+-	[38,60,63],
+-	[63,60,61],
+-	[65,64,13],
+-	[60,64,54],
+-	[76,88,62],
+-	[75,76,65],
+-	[39,36,66],
+-	[49,66,36],
+-	[57,68,13],
+-	[55,14,67],
+-	[150,71,68],
+-	[59,57,137],
+-	[65,68,71],
+-	[151,155,159],
+-	[150,68,59],
+-	[75,74,73],
+-	[74,71,70],
+-	[72,87,89],
+-	[88,7,62],
+-	[74,70,79],
+-	[73,74,78],
+-	[88,76,73],
+-	[71,75,65],
+-	[62,54,76],
+-	[65,76,54],
+-	[77,79,81],
+-	[84,86,77],
+-	[79,78,74],
+-	[92,91,90],
+-	[70,152,81],
+-	[79,77,93],
+-	[59,142,143],
+-	[84,77,81],
+-	[70,81,79],
+-	[80,180,84],
+-	[187,83,182],
+-	[178,151,159],
+-	[69,91,86],
+-	[80,84,81],
+-	[84,83,86],
+-	[83,187,189],
+-	[188,187,182],
+-	[194,69,86],
+-	[89,73,78],
+-	[89,78,72],
+-	[7,88,87],
+-	[87,88,89],
+-	[73,89,88],
+-	[86,91,77],
+-	[93,91,92],
+-	[69,90,91],
+-	[72,92,90],
+-	[93,92,78],
+-	[79,93,78],
+-	[91,93,77],
+-	[20,19,94],
+-	[20,100,99],
+-	[102,97,100],
+-	[96,34,136],
+-	[97,99,100],
+-	[105,103,125],
+-	[99,96,16],
+-	[108,105,98],
+-	[20,99,16],
+-	[97,98,99],
+-	[101,20,94],
+-	[100,20,101],
+-	[114,116,117],
+-	[121,107,102],
+-	[104,107,106],
+-	[108,109,103],
+-	[97,109,108],
+-	[198,113,124],
+-	[128,103,262],
+-	[121,106,107],
+-	[34,105,120],
+-	[107,114,112],
+-	[101,8,106],
+-	[109,115,103],
+-	[109,97,102],
+-	[103,105,108],
+-	[111,109,102],
+-	[111,115,109],
+-	[111,102,112],
+-	[110,111,112],
+-	[112,102,107],
+-	[110,113,115],
+-	[114,107,104],
+-	[110,112,117],
+-	[135,110,118],
+-	[135,113,110],
+-	[95,255,122],
+-	[116,118,117],
+-	[110,115,111],
+-	[115,113,262],
+-	[255,114,122],
+-	[260,251,257],
+-	[114,117,112],
+-	[116,134,118],
+-	[12,124,135],
+-	[110,117,118],
+-	[146,140,58],
+-	[147,127,119],
+-	[125,120,105],
+-	[120,125,127],
+-	[102,101,121],
+-	[106,121,101],
+-	[162,164,160],
+-	[114,104,122],
+-	[239,118,134],
+-	[128,119,125],
+-	[103,115,262],
+-	[125,119,127],
+-	[238,162,163],
+-	[148,128,197],
+-	[147,5,146],
+-	[120,127,131],
+-	[103,128,125],
+-	[126,197,128],
+-	[217,221,223],
+-	[154,149,153],
+-	[263,130,146],
+-	[133,53,43],
+-	[127,130,131],
+-	[130,263,133],
+-	[45,132,43],
+-	[120,132,35],
+-	[43,131,133],
+-	[130,133,131],
+-	[114,255,116],
+-	[221,222,219],
+-	[12,135,118],
+-	[113,135,124],
+-	[136,33,27],
+-	[120,136,34],
+-	[140,138,139],
+-	[142,139,144],
+-	[140,153,138],
+-	[152,151,80],
+-	[140,139,58],
+-	[139,138,144],
+-	[58,263,146],
+-	[140,5,153],
+-	[141,144,145],
+-	[143,152,150],
+-	[139,142,137],
+-	[143,142,141],
+-	[151,143,141],
+-	[152,143,151],
+-	[145,144,138],
+-	[142,144,141],
+-	[328,138,153],
+-	[157,159,155],
+-	[147,146,130],
+-	[5,140,146],
+-	[127,147,130],
+-	[147,119,148],
+-	[128,148,119],
+-	[148,129,160],
+-	[154,5,160],
+-	[166,227,245],
+-	[71,150,70],
+-	[59,143,150],
+-	[145,155,141],
+-	[141,155,151],
+-	[81,152,80],
+-	[150,152,70],
+-	[154,153,5],
+-	[153,149,328],
+-	[160,129,162],
+-	[154,164,168],
+-	[157,158,156],
+-	[155,145,157],
+-	[179,214,213],
+-	[83,84,180],
+-	[157,145,327],
+-	[157,156,159],
+-	[328,327,138],
+-	[235,234,231],
+-	[214,181,183],
+-	[80,151,178],
+-	[148,160,5],
+-	[129,163,162],
+-	[167,171,165],
+-	[168,170,166],
+-	[163,129,197],
+-	[162,161,164],
+-	[126,198,163],
+-	[218,198,216],
+-	[167,164,161],
+-	[168,149,154],
+-	[218,220,238],
+-	[173,176,165],
+-	[170,168,164],
+-	[225,228,208],
+-	[161,220,171],
+-	[167,165,170],
+-	[170,164,167],
+-	[168,166,246],
+-	[223,202,217],
+-	[165,171,173],
+-	[165,176,177],
+-	[170,177,208],
+-	[161,171,167],
+-	[169,324,173],
+-	[223,325,169],
+-	[298,299,312],
+-	[169,173,171],
+-	[172,305,176],
+-	[206,299,302],
+-	[165,177,170],
+-	[177,203,205],
+-	[172,176,173],
+-	[175,203,176],
+-	[177,176,203],
+-	[205,208,177],
+-	[181,178,159],
+-	[80,178,180],
+-	[159,183,181],
+-	[180,182,83],
+-	[181,180,178],
+-	[180,181,182],
+-	[183,159,156],
+-	[181,179,182],
+-	[185,179,213],
+-	[193,186,191],
+-	[210,183,156],
+-	[212,210,200],
+-	[191,190,184],
+-	[179,185,182],
+-	[190,191,188],
+-	[192,193,191],
+-	[194,86,195],
+-	[188,182,185],
+-	[189,187,186],
+-	[188,185,190],
+-	[186,187,188],
+-	[186,193,196],
+-	[83,189,86],
+-	[85,196,264],
+-	[185,82,190],
+-	[186,188,191],
+-	[264,192,2],
+-	[191,184,192],
+-	[85,195,196],
+-	[189,186,196],
+-	[195,86,189],
+-	[85,194,195],
+-	[196,193,264],
+-	[189,196,195],
+-	[197,129,148],
+-	[126,163,197],
+-	[198,126,262],
+-	[216,198,124],
+-	[204,199,203],
+-	[207,199,204],
+-	[211,210,156],
+-	[272,278,292],
+-	[216,124,217],
+-	[230,201,212],
+-	[220,218,202],
+-	[204,203,175],
+-	[205,203,199],
+-	[207,204,298],
+-	[298,204,209],
+-	[199,11,205],
+-	[208,166,170],
+-	[276,281,285],
+-	[209,204,175],
+-	[11,199,265],
+-	[11,225,205],
+-	[208,205,225],
+-	[172,303,305],
+-	[209,303,302],
+-	[211,156,158],
+-	[230,212,231],
+-	[326,229,292],
+-	[200,210,211],
+-	[215,82,213],
+-	[183,210,212],
+-	[179,181,214],
+-	[212,323,214],
+-	[183,212,214],
+-	[323,201,215],
+-	[217,124,12],
+-	[323,213,214],
+-	[218,216,202],
+-	[217,12,221],
+-	[202,216,217],
+-	[223,220,202],
+-	[198,218,163],
+-	[239,221,12],
+-	[310,9,307],
+-	[171,220,169],
+-	[238,220,161],
+-	[221,239,222],
+-	[221,219,223],
+-	[222,239,248],
+-	[222,250,318],
+-	[325,219,224],
+-	[220,223,169],
+-	[321,322,320],
+-	[172,306,303],
+-	[228,229,227],
+-	[228,166,208],
+-	[11,280,225],
+-	[268,267,265],
+-	[242,245,227],
+-	[229,228,225],
+-	[166,228,227],
+-	[267,11,265],
+-	[234,6,231],
+-	[236,6,234],
+-	[231,212,200],
+-	[6,230,231],
+-	[233,234,235],
+-	[275,278,272],
+-	[275,277,278],
+-	[235,231,200],
+-	[233,290,236],
+-	[200,211,235],
+-	[211,158,241],
+-	[243,211,241],
+-	[233,236,234],
+-	[242,326,241],
+-	[162,238,161],
+-	[218,238,163],
+-	[118,239,12],
+-	[248,239,134],
+-	[242,241,158],
+-	[334,240,258],
+-	[243,241,237],
+-	[244,242,158],
+-	[227,229,326],
+-	[243,237,291],
+-	[211,243,235],
+-	[244,158,327],
+-	[246,166,245],
+-	[242,244,245],
+-	[245,244,246],
+-	[328,246,244],
+-	[168,246,149],
+-	[257,256,249],
+-	[330,329,123],
+-	[251,248,134],
+-	[250,248,247],
+-	[330,331,329],
+-	[251,247,248],
+-	[308,311,321],
+-	[134,116,261],
+-	[257,258,260],
+-	[50,253,42],
+-	[62,7,252],
+-	[44,61,254],
+-	[62,253,254],
+-	[44,254,253],
+-	[259,95,256],
+-	[261,255,259],
+-	[257,249,258],
+-	[257,259,256],
+-	[259,257,251],
+-	[334,333,4],
+-	[240,331,332],
+-	[261,259,251],
+-	[259,255,95],
+-	[332,260,258],
+-	[247,251,260],
+-	[134,261,251],
+-	[116,255,261],
+-	[198,262,113],
+-	[128,262,126],
+-	[57,263,58],
+-	[133,263,53],
+-	[199,207,265],
+-	[192,264,193],
+-	[265,207,268],
+-	[314,268,207],
+-	[226,283,282],
+-	[273,267,266],
+-	[11,267,272],
+-	[304,313,314],
+-	[267,268,266],
+-	[297,269,295],
+-	[270,293,268],
+-	[266,281,276],
+-	[274,284,285],
+-	[277,275,271],
+-	[275,267,273],
+-	[275,272,267],
+-	[276,273,266],
+-	[273,271,275],
+-	[271,283,277],
+-	[276,271,273],
+-	[279,291,292],
+-	[266,293,281],
+-	[276,285,284],
+-	[296,232,290],
+-	[296,290,279],
+-	[279,278,277],
+-	[279,292,278],
+-	[279,277,296],
+-	[279,290,291],
+-	[225,280,229],
+-	[11,272,280],
+-	[281,293,297],
+-	[1,286,288],
+-	[277,283,226],
+-	[271,284,283],
+-	[284,271,276],
+-	[274,282,284],
+-	[283,284,282],
+-	[295,287,288],
+-	[286,274,285],
+-	[285,288,286],
+-	[295,281,297],
+-	[295,285,281],
+-	[1,288,287],
+-	[236,290,232],
+-	[277,226,289],
+-	[291,290,233],
+-	[243,291,233],
+-	[291,237,292],
+-	[326,292,237],
+-	[272,292,229],
+-	[268,293,266],
+-	[297,293,270],
+-	[287,295,269],
+-	[313,294,270],
+-	[285,295,288],
+-	[277,289,296],
+-	[232,296,289],
+-	[270,294,297],
+-	[269,297,294],
+-	[209,299,298],
+-	[312,299,206],
+-	[302,299,209],
+-	[301,174,304],
+-	[305,303,209],
+-	[300,302,307],
+-	[206,301,312],
+-	[206,302,300],
+-	[172,324,306],
+-	[300,307,9],
+-	[313,304,174],
+-	[207,298,304],
+-	[209,175,305],
+-	[176,305,175],
+-	[322,317,318],
+-	[310,307,303],
+-	[302,303,307],
+-	[310,303,306],
+-	[306,311,315],
+-	[308,309,315],
+-	[9,315,309],
+-	[310,315,9],
+-	[306,224,316],
+-	[316,224,317],
+-	[301,304,312],
+-	[298,312,304],
+-	[294,313,174],
+-	[314,313,270],
+-	[268,314,270],
+-	[207,304,314],
+-	[306,315,310],
+-	[308,315,311],
+-	[317,224,219],
+-	[311,306,316],
+-	[318,317,219],
+-	[316,317,322],
+-	[222,318,219],
+-	[319,320,123],
+-	[321,320,319],
+-	[320,250,330],
+-	[318,250,320],
+-	[308,321,319],
+-	[316,322,311],
+-	[320,322,318],
+-	[311,322,321],
+-	[201,323,212],
+-	[213,323,215],
+-	[173,324,172],
+-	[325,324,169],
+-	[219,325,223],
+-	[324,325,224],
+-	[241,326,237],
+-	[227,326,242],
+-	[157,327,158],
+-	[138,327,145],
+-	[246,328,149],
+-	[327,328,244],
+-	[320,330,123],
+-	[250,331,330],
+-	[331,250,247],
+-	[332,331,247],
+-	[240,329,331],
+-	[260,332,247],
+-	[240,332,258],
+-	[339,336,17],
+-	[258,249,333],
+-	[333,334,258],
+-	[31,335,25],
+-	[3,337,340],
+-	[338,337,25],
+-	[335,336,338],
+-	[340,337,336],
+-	[337,338,336],
+-	[39,339,17],
+-	[67,339,55],
+-	[336,52,340]]; //}}}
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Data
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Data	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Data	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/Data
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Exp/Square.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Exp/Square.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Exp/Square.js	(nonexistent)
+@@ -1,9 +0,0 @@
+-// Name:domainoutline
+-// Icon:0
+-// Points Count  Value
+-var square={}
+-square[0]={};
+-square[0]["nods"]=5;
+-// X pos Y pos
+-square[0]["x"]=[0,1000000,1000000,0,0];
+-square[0]["y"]=[0, 0, 1000000,  1000000, 0];
+Index: ../trunk-jpl/jenkins/javascript/karma/lib/Exp
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib/Exp	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib/Exp	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib/Exp
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/lib
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/lib	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/lib	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/lib
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/spec/support/jasmine.json
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/spec/support/jasmine.json	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/spec/support/jasmine.json	(nonexistent)
+@@ -1,11 +0,0 @@
+-{
+-  "spec_dir": "spec",
+-  "spec_files": [
+-    "**/*[sS]pec.js"
+-  ],
+-  "helpers": [
+-    "helpers/**/*.js"
+-  ],
+-  "stopSpecOnExpectationFailure": false,
+-  "random": false
+-}
+Index: ../trunk-jpl/jenkins/javascript/karma/spec/support
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/spec/support	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/spec/support	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/spec/support
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/spec
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/spec	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/spec	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/spec
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-node_modules
+Index: ../trunk-jpl/jenkins/javascript/karma/node_modules
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/node_modules	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/node_modules	(nonexistent)
+
+Property changes on: ../trunk-jpl/jenkins/javascript/karma/node_modules
+___________________________________________________________________
+Deleted: svn:ignore
+## -1 +0,0 ##
+-*.*
+Index: ../trunk-jpl/jenkins/javascript/karma/scripts/runscript.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/scripts/runscript.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/scripts/runscript.js	(revision 21944)
+@@ -3,7 +3,7 @@
+         cache: true
+     });
+ 
+-    var PORT=8081;
++    var PORT=80;
+     var tests = []; //last test to check
+ 
+     // Adding translated tests to array. Hardcoded for now.
+@@ -29,7 +29,7 @@
+         $(this).click(function () {
+             $('#debug').empty();
+             var id = this.id.replace(/[^\d]/g, ''); 
+-            $.getScript('http://localhost:'+PORT+'/test'+id+'.js', function(src, status) {
++            $.getScript('../../../test/NightlyRun/test'+id+'.js', function(src, status) {
+                 console.log('='.repeat(30));
+                 console.log('Status: ' + status);
+                 console.log('Script executed: test' + id + '.js');
+Index: ../trunk-jpl/jenkins/javascript/karma/index.html
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/index.html	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/index.html	(revision 21944)
+@@ -6,16 +6,13 @@
+         <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
+         <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
+         <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></link>
+-        <script type="text/javascript" src="lib/bin/issm-binaries.js"> </script>
+-        <script type="text/javascript" src="lib/bin/issm-extlibraries.js"> </script>
+-        <script type="text/javascript" src="lib/Exp/Square.js"></script>
+-        <script type="text/javascript" src="lib/Par/SquareShelfConstrained.js"></script>
+-        <script type="text/javascript" src="lib/Data/SquareShelfConstrained.data.js"></script>
+-        <script type="text/javascript" src="lib/mesh2d.js"></script>
+-        <script type="text/javascript" src="lib/mesh3dprisms.js"></script>
+-        <script type="text/javascript" src="lib/bin/model.js"></script>
+-        <!--<script src="scripts/runscript.js"></script>-->
+-        <script src="scripts/runscript.js"></script>
++        <script type="text/javascript" src="../../../bin/issm-bin.js"> </script>
++        <script type="text/javascript" src="../../../bin/IssmModule.js"> </script>
++        <script type="text/javascript" src="../../../bin/issm-prebin.js"> </script>
++        <script type="text/javascript" src="../../../test/Exp/Square.js"></script>
++        <script type="text/javascript" src="../../../test/Par/SquareShelfConstrained.js"></script>
++        <script type="text/javascript" src="../../../test/Data/SquareShelfConstrained.data.js"></script>
++        <script src="./scripts/runscript.js"></script>
+ 
+         <style>
+             .btn.btn-primary {
+Index: ../trunk-jpl/jenkins/javascript/karma/karma.conf.js
+===================================================================
+--- ../trunk-jpl/jenkins/javascript/karma/karma.conf.js	(revision 21943)
++++ ../trunk-jpl/jenkins/javascript/karma/karma.conf.js	(revision 21944)
+@@ -11,8 +11,8 @@
+ 
+     // list of files / patterns to load in the browser
+     files: [
+-      'node_modules/jquery/dist/jquery.min.js',
+-      'node_modules/mathjs/dist/math.min.js',
++      './../../../externalpackages/emscripten/src/node/4.1.1_64bit/lib/node_modules/jquery/dist/jquery.min.js',
++      './../../../externalpackages/emscripten/src/node/4.1.1_64bit/lib/node_modules/mathjs/dist/math.min.js',
+       'lib/Exp/Square.js',
+       'lib/Par/SquareShelfConstrained.js',
+       'lib/Data/SquareShelfConstrained.data.js',
Index: /issm/oecreview/Archive/21724-22754/ISSM-21944-21945.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21944-21945.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21944-21945.diff	(revision 22755)
@@ -0,0 +1,182 @@
+Index: ../trunk-jpl/src/m/classes/friction.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.js	(revision 21944)
++++ ../trunk-jpl/src/m/classes/friction.js	(revision 21945)
+@@ -13,13 +13,25 @@
+ 		fielddisplay(this,'coefficient','friction coefficient [SI]');
+ 		fielddisplay(this,'p','p exponent');
+ 		fielddisplay(this,'q','q exponent');
++		fielddisplay(this,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');
+ 	} // }}}
+-    this.extrude = function(md) {//{{{
+-        this.coefficient = project3d(md, 'vector', this.coefficient, 'type', 'node', 'layer', 1);
+-        this.p = project3d(md, 'vector', this.p, 'type', 'element');
+-        this.q = project3d(md, 'vector', this.q, 'type', 'element');
+-        return this;
+-    }//}}}
++	this.extrude = function(md) {//{{{
++		this.coefficient = project3d(md, 'vector', this.coefficient, 'type', 'node', 'layer', 1);
++		this.p = project3d(md, 'vector', this.p, 'type', 'element');
++		this.q = project3d(md, 'vector', this.q, 'type', 'element');
++		switch (this.coupling) {
++			case 0:
++			case 1:
++				this.effective_pressure=project3d(md, 'vector', this.effective_pressure, 'type', 'node', 'layer', 1);
++				break;
++			case 2:
++				console.error('not implemented yet');
++				break;
++			default:	
++				console.error('not supported yet');
++		}
++		return this;
++	}//}}}
+ 	this.classname= function (){// {{{
+ 		return "friction";
+ 	} // }}}
+@@ -32,6 +44,18 @@
+ 			md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements ,1]);
+ 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements ,1]);
++			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0, 1, 2]);
++			switch (this.coupling) {
++				case 0:
++				case 1:
++					md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
++					break;
++				case 2:
++					console.error('not implemented yet');
++					break;
++				default:	
++					console.error('not supported yet');
++			}
+ 
+ 		} // }}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+@@ -42,6 +66,18 @@
+ 			//WriteData(fid,prefix,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',this,'fieldname','p','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',this,'fieldname','q','format','DoubleMat','mattype',2);
++			WriteData(fid,prefix,'class','friction','object',this,'fieldname','coupling','format','Integer');
++			switch (this.coupling) {
++				case 0:
++				case 1:
++					WriteData(fid,prefix,'class','friction','object',this,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++					break;
++				case 2:
++					console.error('not implemented yet');
++					break;
++				default:
++					console.error('not supported yet');		
++			}
+ 			
+ 
+ 		}//}}}
+@@ -52,6 +88,8 @@
+ 	this.coefficient = NaN;
+ 	this.p           = NaN;
+ 	this.q           = NaN;
++	this.coupling    = 0;
++	this.effective_pressure = NaN;
+ 	this.setdefaultparameters();
+ 	//}}}
+ }
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 21944)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 21945)
+@@ -37,6 +37,7 @@
+ 			console.log(sprintf("//19s: //-22s -- //s","levelset"        ,"[1x1 " + typeof(this.levelset) + "]","parameters for moving boundaries (level-set method)"));
+ 			console.log(sprintf("//19s: //-22s -- //s","calving"         ,"[1x1 " + typeof(this.calving) + "]","parameters for calving"));
+ 			console.log(sprintf("//19s: //-22s -- //s","gia"             ,"[1x1 " + typeof(this.gia) + "]","parameters for gia solution"));
++			console.log(sprintf("//19s: //-22s -- //s","esa"             ,"[1x1 " + typeof(this.esa) + "]","parameters for elastic adjustment solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","autodiff"        ,"[1x1 " + typeof(this.autodiff) + "]","automatic differentiation parameters"));
+ 			console.log(sprintf("//19s: //-22s -- //s","inversion"       ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods"));
+ 			console.log(sprintf("//19s: //-22s -- //s","qmu"             ,"[1x1 " + typeof(this.qmu) + "]","dakota properties"));
+@@ -76,13 +77,14 @@
+ 			this.thermal          = new thermal();
+ 			this.steadystate      = new steadystate();
+ 			this.trans            = new trans();
+-			this.levelset		  = new levelset();
++			this.levelset         = new levelset();
+ 			this.calving          = new calving();
+ 			this.gia              = new giaivins();
++			this.esa              = new esa();
+ 			this.autodiff         = new autodiff();
+ 			this.inversion        = new inversion();
+ 			this.qmu              = new qmu();
+-			this.amr					 = new amr();
++			this.amr              = new amr();
+ 			this.radaroverlay     = new radaroverlay();
+ 			this.results          = {};
+ 			this.outputdefinition = new outputdefinition();
+@@ -609,11 +611,12 @@
+ 		this.levelset         = 0;
+ 		this.calving          = 0;
+ 		this.gia              = 0;
++		this.esa              = 0;
+ 
+ 		this.autodiff         = 0;
+ 		this.inversion        = 0;
+ 		this.qmu              = 0;
+-		this.amr					 = 0;
++		this.amr              = 0;
+ 
+ 		this.results          = 0;
+ 		this.outputdefinition = 0;
+Index: ../trunk-jpl/src/m/classes/trans.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/trans.js	(revision 21944)
++++ ../trunk-jpl/src/m/classes/trans.js	(revision 21945)
+@@ -14,6 +14,7 @@
+ 		this.isthermal         = 1;
+ 		this.isgroundingline   = 0;
+ 		this.isgia             = 0;
++		this.isesa             = 0;
+ 		this.isdamageevolution = 0;
+ 		this.ismovingfront     = 0;
+ 		this.ishydrology       = 0;
+@@ -35,6 +36,7 @@
+ 		fielddisplay(this,'isthermal','indicates whether a thermal solution is used in the transient');
+ 		fielddisplay(this,'isgroundingline','indicates whether a groundingline migration is used in the transient');
+ 		fielddisplay(this,'isgia','indicates whether a postglacial rebound model is used in the transient');
++		fielddisplay(this,'isesa','indicates whether an elastic adjustment model is used in the transient');
+ 		fielddisplay(this,'isdamageevolution','indicates whether damage evolution is used in the transient');
+ 		fielddisplay(this,'ismovingfront','indicates whether a moving front capability is used in the transient');
+ 		fielddisplay(this,'ishydrology','indicates whether an hydrology model is used');
+@@ -59,6 +61,7 @@
+ 			checkfield(md,'fieldname','trans.isthermal','numel',[1],'values',[0 ,1]);
+ 			checkfield(md,'fieldname','trans.isgroundingline','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isgia','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.isesa','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isdamageevolution','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.ismovingfront','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.ishydrology','numel',[1],'values',[0 ,1]);
+@@ -76,6 +79,7 @@
+ 			WriteData(fid,prefix,'object',this,'fieldname','isthermal','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isgroundingline','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isgia','format','Boolean');
++			WriteData(fid,prefix,'object',this,'fieldname','isesa','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isdamageevolution','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','ishydrology','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','ismovingfront','format','Boolean');
+@@ -109,6 +113,7 @@
+ 	this.isthermal         = 0;
+ 	this.isgroundingline   = 0;
+ 	this.isgia             = 0;
++	this.isesa             = 0;
+ 	this.isdamageevolution = 0;
+ 	this.ismovingfront     = 0;
+ 	this.ishydrology       = 0;
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 21944)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 21945)
+@@ -82,6 +82,7 @@
+ 
+ js_scripts =  ${ISSM_DIR}/src/m/array/arrayoperations.js \
+ 				${ISSM_DIR}/src/m/boundaryconditions/SetIceShelfBC.js \
++				${ISSM_DIR}/src/m/classes/amr.js \
+ 				${ISSM_DIR}/src/m/classes/autodiff.js \
+ 				${ISSM_DIR}/src/m/classes/balancethickness.js \
+ 				${ISSM_DIR}/src/m/classes/basalforcings.js \
Index: /issm/oecreview/Archive/21724-22754/ISSM-21945-21946.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21945-21946.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21945-21946.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21945)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 21946)
+@@ -3842,7 +3842,12 @@
+ void	Tria::SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,IssmDouble eartharea){/*{{{*/
+ 
+ 	/*early return if we are not on an ice cap OR ocean:*/
+-	if(!(this->inputs->Max(MaskIceLevelsetEnum)<0) && !IsWaterInElement()) return; 
++	if(!(this->inputs->Max(MaskIceLevelsetEnum)<0) && !IsWaterInElement()){
++		dI_list[0] = 0.0; // this is important!!! 
++		dI_list[1] = 0.0; // this is important!!! 
++		dI_list[2] = 0.0; // this is important!!! 
++		return; 
++	}
+ 
+ 	/*Compute area of element:*/
+ 	IssmDouble area; 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21946-21947.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21946-21947.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21946-21947.diff	(revision 22755)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/test/NightlyRun/test2010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2010.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2010.m	(revision 21947)
+@@ -0,0 +1,93 @@
++%Test Name: MomentOfIntertia
++
++%mesh earth: 
++md=model; 
++rad_e = 6.371012*10^3; % mean radius of Earth, km
++md.mesh=gmshplanet('radius',rad_e,'resolution',1000.0);  % km resolution 
++
++%parameterize slr solution:
++%slr loading:  {{{
++late=sum(md.mesh.lat(md.mesh.elements),2)/3;
++longe=sum(md.mesh.long(md.mesh.elements),2)/3;
++
++md.slr.deltathickness=zeros(md.mesh.numberofelements,1);
++pos=find(late <-75 & longe >0);
++md.slr.deltathickness(pos(6:7))=-1;
++
++md.slr.sealevel=zeros(md.mesh.numberofvertices,1);
++md.slr.steric_rate=zeros(md.mesh.numberofvertices,1);
++md.slr.ocean_area_scaling = 1; 
++
++%elastic loading from love numbers: 
++nlov=1001;
++md.slr.love_h = love_numbers('h'); md.slr.love_h(nlov+1:end)=[];
++md.slr.love_k = love_numbers('k'); md.slr.love_k(nlov+1:end)=[];
++md.slr.love_l = love_numbers('l'); md.slr.love_l(nlov+1:end)=[];
++
++%}}}
++%mask:  {{{
++md.mask=maskpsl(); % use maskpsl class (instead of mask) to store the ocean function as a ocean_levelset 
++mask=gmtmask(md.mesh.lat,md.mesh.long); 
++
++icemask=ones(md.mesh.numberofvertices,1);
++pos=find(mask==0);  icemask(pos)=-1;
++pos=find(sum(mask(md.mesh.elements),2)<3);   icemask(md.mesh.elements(pos,:))=-1;
++md.mask.ice_levelset=icemask;
++md.mask.ocean_levelset=zeros(md.mesh.numberofvertices,1);
++pos=find(md.mask.ice_levelset==1); md.mask.ocean_levelset(pos)=1;
++
++%make sure that the ice level set is all inclusive:
++md.mask.land_levelset=zeros(md.mesh.numberofvertices,1);
++md.mask.groundedice_levelset=-ones(md.mesh.numberofvertices,1); 
++
++%make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++pos=find(md.slr.deltathickness); 
++md.mask.ice_levelset(md.mesh.elements(pos,:))=-1;
++% }}}
++%geometry {{{
++di=md.materials.rho_ice/md.materials.rho_water;
++md.geometry.thickness=ones(md.mesh.numberofvertices,1);
++md.geometry.surface=(1-di)*zeros(md.mesh.numberofvertices,1);
++md.geometry.base=md.geometry.surface-md.geometry.thickness;
++md.geometry.bed=md.geometry.base;
++% }}}
++%materials {{{
++md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_B=paterson(md.initialization.temperature);
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++% }}}
++%Miscellaneous {{{
++md.miscellaneous.name='test2010';
++% }}}
++%Solution parameters {{{
++md.slr.reltol=NaN;
++md.slr.abstol=1e-3;
++% }}}
++
++%eustatic + rigid + elastic run: 
++md.slr.rigid=1; md.slr.elastic=1; md.slr.rotation=1; 
++md.cluster=generic('name',oshostname(),'np',3);
++
++% uncomment following 2 lines for 
++md=solve(md,'Sealevelrise');
++eus=md.results.SealevelriseSolution.SealevelEustatic;
++slr=md.results.SealevelriseSolution.Sealevel;
++moixz=md.results.SealevelriseSolution.SealevelInertiaTensorXZ; 
++moiyz=md.results.SealevelriseSolution.SealevelInertiaTensorYZ; 
++moizz=md.results.SealevelriseSolution.SealevelInertiaTensorZZ; 
++
++% analytical moi => just checking FOR ICE only!!! {{{
++% ...have to mute ** slr induced MOI in Tria.cpp ** prior to the comparison 
++%rad_e = rad_e*1e3; % now in meters 
++%areas=GetAreasSphericalTria(md.mesh.elements,md.mesh.lat,md.mesh.long,rad_e);
++%lat=late*pi/180; lon=longe*pi/180; 
++%moi_xz = sum(-md.materials.rho_freshwater.*md.slr.deltathickness.*areas.*rad_e^2.*sin(lat).*cos(lat).*cos(lon));
++%moi_yz = sum(-md.materials.rho_freshwater.*md.slr.deltathickness.*areas.*rad_e^2.*sin(lat).*cos(lat).*sin(lon));
++% }}}
++
++%Fields and tolerances to track changes
++field_names     ={'eus','slr','moixz','moiyz','moizz'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={eus,slr,moixz,moiyz,moizz};
++
Index: /issm/oecreview/Archive/21724-22754/ISSM-21947-21948.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21947-21948.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21947-21948.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2010.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2010.arch	(revision 21948)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2010.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21948-21949.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21948-21949.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21948-21949.diff	(revision 22755)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/m/classes/slr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/slr.py	(revision 21948)
++++ ../trunk-jpl/src/m/classes/slr.py	(revision 21949)
+@@ -32,6 +32,7 @@
+ 		self.elastic           = 0
+ 		self.rotation          = 0
+ 		self.ocean_area_scaling = 0;
++		steric_rate					= 0; #rate of ocean expansion from steric effects.
+ 		self.degacc            = 0
+ 		self.requested_outputs = []
+ 		self.transitions       = []
+@@ -83,7 +84,7 @@
+ 		self.tide_love_h=0.6149; #degree 2
+ 		self.tide_love_k=0.3055; #degree 2
+ 		
+-                #secular fluid love number: 
++      #secular fluid love number: 
+ 		self.fluid_love=0.942; 
+ 		
+ 		#moment of inertia: 
+@@ -95,6 +96,9 @@
+ 
+ 		#numerical discretization accuracy
+ 		self.degacc=.01
++
++		#steric:
++		self.steric_rate=0;
+ 		
+ 		#output default:
+ 		self.requested_outputs=['default']
+@@ -126,6 +130,7 @@
+ 		md = checkfield(md,'fieldname','slr.reltol','size',[1,1])
+ 		md = checkfield(md,'fieldname','slr.abstol','size',[1,1])
+ 		md = checkfield(md,'fieldname','slr.maxiter','size',[1,1],'>=',1)
++		md = checkfield(md,'fieldname','slr.steric_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]);
+ 		md = checkfield(md,'fieldname','slr.degacc','size',[1,1],'>=',1e-10)
+ 		md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1)
+ 
+@@ -156,6 +161,7 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean')
+ 		WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean')
+ 		WriteData(fid,prefix,'object',self,'fieldname','ocean_area_scaling','format','Boolean')
++		WriteData(fid,prefix,'object',self,'fieldname','steric_rate','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
+ 		WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
+ 		WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray')
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-21949-21950.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21949-21950.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21949-21950.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21950-21951.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21950-21951.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21950-21951.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 21950)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 21951)
+@@ -53,7 +53,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,6e-09,9e-08,1e-09,1e-10,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,...
+ 	9e-10,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21951-21952.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21951-21952.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21951-21952.diff	(revision 22755)
@@ -0,0 +1,254 @@
+Index: ../trunk-jpl/test/NightlyRun/test462.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test462.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test462.m	(revision 21952)
+@@ -0,0 +1,38 @@
++%Test Name: SquareSheetShelfAmrBamgField
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.isstressbalance=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=0;
++md.transient.isthermal=0;
++md.transient.isgroundingline=0;
++%amr bamg settings, just field
++md.amr=amrbamg();
++md.amr.hmin=10000;
++md.amr.hmax=100000;
++md.amr.fieldname='Vel';
++md.amr.keepmetric=1;
++md.amr.gradation=1.2;
++md.amr.groundingline_resolution=2000;
++md.amr.groundingline_distance=0;
++md.amr.icefront_resolution=1000;
++md.amr.icefront_distance=0;
++md.amr.thicknesserror_resolution=1000;
++md.amr.thicknesserror_threshold=0;
++md.amr.deviatoricerror_resolution=1000;
++md.amr.deviatoricerror_threshold=0;
++md.transient.amr_frequency = 1;
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(end).Vx),...
++	(md.results.TransientSolution(end).Vy),...
++	(md.results.TransientSolution(end).Vel),...
++	(md.results.TransientSolution(end).Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test463.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test463.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test463.m	(revision 21952)
+@@ -0,0 +1,38 @@
++%Test Name: SquareSheetShelfAmrBamgGroundingline
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.isstressbalance=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=0;
++md.transient.isthermal=0;
++md.transient.isgroundingline=0;
++%amr bamg settings, just grounding line
++md.amr=amrbamg();
++md.amr.hmin=10000;
++md.amr.hmax=100000;
++md.amr.fieldname='None';
++md.amr.keepmetric=0;
++md.amr.gradation=1.2;
++md.amr.groundingline_resolution=12000;
++md.amr.groundingline_distance=100000;
++md.amr.icefront_resolution=1000;
++md.amr.icefront_distance=0;
++md.amr.thicknesserror_resolution=1000;
++md.amr.thicknesserror_threshold=0;
++md.amr.deviatoricerror_resolution=1000;
++md.amr.deviatoricerror_threshold=0;
++md.transient.amr_frequency = 1;
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(end).Vx),...
++	(md.results.TransientSolution(end).Vy),...
++	(md.results.TransientSolution(end).Vel),...
++	(md.results.TransientSolution(end).Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test464.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test464.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test464.m	(revision 21952)
+@@ -0,0 +1,38 @@
++%Test Name: SquareSheetShelfAmrBamgIceFront
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.isstressbalance=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=0;
++md.transient.isthermal=0;
++md.transient.isgroundingline=0;
++%amr bamg settings, just ice front
++md.amr=amrbamg();
++md.amr.hmin=10000;
++md.amr.hmax=100000;
++md.amr.fieldname='None';
++md.amr.keepmetric=0;
++md.amr.gradation=1.2;
++md.amr.groundingline_resolution=12000;
++md.amr.groundingline_distance=0;
++md.amr.icefront_resolution=12000;
++md.amr.icefront_distance=100000;
++md.amr.thicknesserror_resolution=1000;
++md.amr.thicknesserror_threshold=0;
++md.amr.deviatoricerror_resolution=1000;
++md.amr.deviatoricerror_threshold=0;
++md.transient.amr_frequency = 1;
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(end).Vx),...
++	(md.results.TransientSolution(end).Vy),...
++	(md.results.TransientSolution(end).Vel),...
++	(md.results.TransientSolution(end).Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test465.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test465.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test465.m	(revision 21952)
+@@ -0,0 +1,38 @@
++%Test Name: SquareSheetShelfAmrBamgAll
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.isstressbalance=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=0;
++md.transient.isthermal=0;
++md.transient.isgroundingline=0;
++%amr bamg settings, field, grounding line and ice front
++md.amr=amrbamg();
++md.amr.hmin=20000;
++md.amr.hmax=100000;
++md.amr.fieldname='Vel';
++md.amr.keepmetric=0;
++md.amr.gradation=1.2;
++md.amr.groundingline_resolution=10000;
++md.amr.groundingline_distance=100000;
++md.amr.icefront_resolution=15000;
++md.amr.icefront_distance=100000;
++md.amr.thicknesserror_resolution=1000;
++md.amr.thicknesserror_threshold=0;
++md.amr.deviatoricerror_resolution=1000;
++md.amr.deviatoricerror_threshold=0;
++md.transient.amr_frequency = 1;
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(end).Vx),...
++	(md.results.TransientSolution(end).Vy),...
++	(md.results.TransientSolution(end).Vel),...
++	(md.results.TransientSolution(end).Pressure),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive465.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive465.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive465.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive465.arch	(revision 21952)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive465.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive462.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive462.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive462.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive462.arch	(revision 21952)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive462.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive463.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive463.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive463.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive463.arch	(revision 21952)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive463.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive464.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive464.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive464.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive464.arch	(revision 21952)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive464.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21951)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21952)
+@@ -2294,6 +2294,7 @@
+ 	int* my_vertices			= NULL;
+ 	int elementswidth       = this->GetElementsWidth();//just tria elements in this version
+ 	int amrtype;
++	bool isgroundingline;
+ 
+ 	/*Branch to specific amr depending on requested method*/	
+ 	parameters->FindParam(&amrtype,AmrTypeEnum);
+@@ -2410,7 +2411,8 @@
+ 	if(false) this->BedrockFromMismipPlus();
+ 
+ 	/*Adjust base, thickness and mask grounded ice leve set*/
+-	if(true) this->AdjustBaseThicknessAndMask();
++	this->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
++	if(isgroundingline) this->AdjustBaseThicknessAndMask();
+ 
+ 	/*Reset current configuration: */
+ 	analysis_type=this->analysis_type_list[this->analysis_counter];
Index: /issm/oecreview/Archive/21724-22754/ISSM-21952-21953.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21952-21953.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21952-21953.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21952)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 21953)
+@@ -2407,7 +2407,7 @@
+ 
+ 	GetMaskOfIceVerticesLSMx(this);
+ 
+-	/*Insert MISMIP+ bed topography*/
++	/*Insert MISMIP+ bed topography FIXME it could be stay in another place*/
+ 	if(false) this->BedrockFromMismipPlus();
+ 
+ 	/*Adjust base, thickness and mask grounded ice leve set*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-21953-21954.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21953-21954.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21953-21954.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21953)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21954)
+@@ -59,8 +59,9 @@
+ 
+ 	#Process html page and get the list of files that has changed (tricky...)
+ 	#cat changes | grep '="The file was modified"' | sed -e 's/.*<\/td><td><a>\(.*\)<\/a><\/td><td>.*/\1/' > $ISSM_DIR/TEMP
+-	cat changes | grep 'document_edit' |sed -e 's/document_edit.png/document_edit.png\
+-		/g' | sed -e 's/.*<\/a><\/td><td>\(.*\)<\/td><\/tr>.*/\1/' | grep -v 'document_edit.png' > $ISSM_DIR/TEMP
++	#cat changes | grep 'document_edit' |sed -e 's/document_edit.png/document_edit.png\
++		#/g' | sed -e 's/.*<\/a><\/td><td>\(.*\)<\/td><\/tr>.*/\1/' | grep -v 'document_edit.png' > $ISSM_DIR/TEMP
++	cat changes  | tr " " "\n" | grep trunk |  sed -e 's/.*<a>\(.*\)<\/a>.*/\1/' > $ISSM_DIR/TEMP
+ 
+ 	#Print list of files
+ 	echo "   "
Index: /issm/oecreview/Archive/21724-22754/ISSM-21954-21955.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21954-21955.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21954-21955.diff	(revision 22755)
@@ -0,0 +1,126 @@
+Index: ../trunk-jpl/test/NightlyRun/test462.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test462.m	(revision 21954)
++++ ../trunk-jpl/test/NightlyRun/test462.m	(revision 21955)
+@@ -24,7 +24,10 @@
+ md.amr.thicknesserror_threshold=0;
+ md.amr.deviatoricerror_resolution=1000;
+ md.amr.deviatoricerror_threshold=0;
+-md.transient.amr_frequency = 1;
++md.transient.amr_frequency=1;
++md.timestepping.start_time=0;
++md.timestepping.final_time=3;
++md.timestepping.time_step=1;
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+@@ -31,8 +34,8 @@
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.TransientSolution(end).Vx),...
+-	(md.results.TransientSolution(end).Vy),...
+-	(md.results.TransientSolution(end).Vel),...
+-	(md.results.TransientSolution(end).Pressure),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vel),...
++	(md.results.TransientSolution(3).Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test464.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test464.m	(revision 21954)
++++ ../trunk-jpl/test/NightlyRun/test464.m	(revision 21955)
+@@ -25,6 +25,9 @@
+ md.amr.deviatoricerror_resolution=1000;
+ md.amr.deviatoricerror_threshold=0;
+ md.transient.amr_frequency = 1;
++md.timestepping.start_time=0;
++md.timestepping.final_time=3;
++md.timestepping.time_step=1;
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+@@ -31,8 +34,8 @@
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.TransientSolution(end).Vx),...
+-	(md.results.TransientSolution(end).Vy),...
+-	(md.results.TransientSolution(end).Vel),...
+-	(md.results.TransientSolution(end).Pressure),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vel),...
++	(md.results.TransientSolution(3).Pressure),...
+ 	};
+Index: ../trunk-jpl/test/Archives/Archive463.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive465.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test463.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test463.m	(revision 21954)
++++ ../trunk-jpl/test/NightlyRun/test463.m	(revision 21955)
+@@ -25,6 +25,9 @@
+ md.amr.deviatoricerror_resolution=1000;
+ md.amr.deviatoricerror_threshold=0;
+ md.transient.amr_frequency = 1;
++md.timestepping.start_time=0;
++md.timestepping.final_time=3;
++md.timestepping.time_step=1;
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+@@ -31,8 +34,8 @@
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.TransientSolution(end).Vx),...
+-	(md.results.TransientSolution(end).Vy),...
+-	(md.results.TransientSolution(end).Vel),...
+-	(md.results.TransientSolution(end).Pressure),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vel),...
++	(md.results.TransientSolution(3).Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test465.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test465.m	(revision 21954)
++++ ../trunk-jpl/test/NightlyRun/test465.m	(revision 21955)
+@@ -25,6 +25,9 @@
+ md.amr.deviatoricerror_resolution=1000;
+ md.amr.deviatoricerror_threshold=0;
+ md.transient.amr_frequency = 1;
++md.timestepping.start_time=0;
++md.timestepping.final_time=3;
++md.timestepping.time_step=1;
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+@@ -31,8 +34,8 @@
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.TransientSolution(end).Vx),...
+-	(md.results.TransientSolution(end).Vy),...
+-	(md.results.TransientSolution(end).Vel),...
+-	(md.results.TransientSolution(end).Pressure),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vel),...
++	(md.results.TransientSolution(3).Pressure),...
+ 	};
+Index: ../trunk-jpl/test/Archives/Archive464.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive462.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21955-21956.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21955-21956.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21955-21956.diff	(revision 22755)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/test/NightlyRun/test463.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test463.m	(revision 21955)
++++ ../trunk-jpl/test/NightlyRun/test463.m	(revision 21956)
+@@ -32,7 +32,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-8,1e-8,1e-8,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(3).Vx),...
+ 	(md.results.TransientSolution(3).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test465.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test465.m	(revision 21955)
++++ ../trunk-jpl/test/NightlyRun/test465.m	(revision 21956)
+@@ -32,7 +32,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-8,1e-8,1e-8,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(3).Vx),...
+ 	(md.results.TransientSolution(3).Vy),...
+Index: ../trunk-jpl/test/Archives/Archive464.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive462.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21956-21957.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21956-21957.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21956-21957.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test220.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.js	(revision 21956)
++++ ../trunk-jpl/test/NightlyRun/test220.js	(revision 21957)
+@@ -6,7 +6,7 @@
+ md.extrude(md,2,1.);
+ setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ //md.cluster=generic('name',oshostname(),'np',3);
+-md.verbose=verbose('all');
++//md.verbose=verbose('all');
+ md=solve(md,'Stressbalance');
+ 
+ //Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 21956)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 21957)
+@@ -34,6 +34,8 @@
+ %      runme('exclude',101);
+ %      runme('id',102,'procedure','update');
+ 
++%      runme('procedure','valgrind','stoponerror',1,'exclude','IdFromString('Dak'));
++
+ %Check inputs
+ % {{{
+ if nargout>1
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 21956)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 21957)
+@@ -5,7 +5,7 @@
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.verbose=verbose('all');
++%md.verbose=verbose('all');
+ md=solve(md,'Stressbalance');
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/21724-22754/ISSM-21957-21958.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21957-21958.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21957-21958.diff	(revision 22755)
@@ -0,0 +1,181 @@
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 21957)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 21958)
+@@ -26,14 +26,24 @@
+ 	return;
+ end
+ 
+-if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
+-	x=md.mesh.x;
+-	if isprop(md.mesh,'x2d'), x2d=md.mesh.x2d; end
+-	y=md.mesh.y;
+-	if isprop(md.mesh,'y2d'), y2d=md.mesh.y2d; end
++if isprop(md.mesh,'elements2d'), elements2d=md.mesh.elements2d; end
++
++if exist(options,'amr'),
++	step = getfieldvalue(options,'amr');
++	x = md.results.TransientSolution(step).MeshX;
++	y = md.results.TransientSolution(step).MeshY;
++	elements = md.results.TransientSolution(step).MeshElements;
+ else
+-	x=md.mesh.long;
+-	y=md.mesh.lat;
++	elements=md.mesh.elements;
++	if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon') ,
++		x=md.mesh.x;
++		if isprop(md.mesh,'x2d'), x2d=md.mesh.x2d; end
++		y=md.mesh.y;
++		if isprop(md.mesh,'y2d'), y2d=md.mesh.y2d; end
++	else
++		x=md.mesh.long;
++		y=md.mesh.lat;
++	end
+ end
+ 
+ if isprop(md.mesh,'z'),
+@@ -46,9 +56,6 @@
+ 	z=md.(z);
+ end
+ 
+-if isprop(md.mesh,'elements2d'), elements2d=md.mesh.elements2d; end
+-elements=md.mesh.elements;
+-
+ %is it a 2d plot?
+ if md.mesh.dimension()==2,
+ 	is2d=1;
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 21957)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 21958)
+@@ -46,6 +46,13 @@
+ 	numberofvertices2d=NaN;
+ 	numberofelements2d=NaN;
+ end
++numberofvertices = md.mesh.numberofvertices;
++numberofelements = md.mesh.numberofelements;
++if exist(options,'amr'),
++	step = getfieldvalue(options,'amr');
++	numberofvertices = numel(md.results.TransientSolution(step).MeshX);
++	numberofelements = numel(md.results.TransientSolution(step).MeshElements);
++end
+ 
+ %initialize datatype
+ datatype=0;
+@@ -66,7 +73,7 @@
+ end
+ 
+ %check length
+-if datasize(1)~=md.mesh.numberofvertices & datasize(1)~=md.mesh.numberofelements & datasize(1)~=md.mesh.numberofvertices*6 & (strcmp(md.mesh.domaintype(),'3D') & ~(datasize(1)==numberofelements2d | datasize(1)==numberofvertices2d))
++if datasize(1)~=numberofvertices & datasize(1)~=numberofelements & datasize(1)~=numberofvertices*6 & (strcmp(md.mesh.domaintype(),'3D') & ~(datasize(1)==numberofelements2d | datasize(1)==numberofvertices2d))
+ 	error('plotmodel error message: data not supported yet');
+ end
+ 
+@@ -85,12 +92,12 @@
+ end
+ 
+ %treat the case datasize(1)=6*nodes
+-if datasize(1)==6*md.mesh.numberofvertices
++if datasize(1)==6*numberofvertices
+ 	%keep the only norm of data
+-	data1=data(1:6:md.mesh.numberofvertices*6,:);
+-	data2=data(2:6:md.mesh.numberofvertices*6,:);
++	data1=data(1:6:numberofvertices*6,:);
++	data2=data(2:6:numberofvertices*6,:);
+ 	data=sqrt(data1.^2+data2.^2);
+-	datasize(1)=md.mesh.numberofvertices;
++	datasize(1)=numberofvertices;
+ 	%---> go to node data
+ end
+ 
+@@ -97,7 +104,7 @@
+ %treat the case datasize(1)=nodes2d
+ if (dimension(md.mesh)==3 & datasize(1)==numberofvertices2d),
+ 	data=project3d(md,'vector',data,'type','node');
+-	datasize(1)=md.mesh.numberofvertices;
++	datasize(1)=numberofvertices;
+ 	%---> go to node data
+ end
+ 
+@@ -104,7 +111,7 @@
+ %treat the case datasize(1)=nodes2d
+ if (dimension(md.mesh)==3 & datasize(1)==numberofelements2d),
+ 	data=project3d(md,'vector',data,'type','element');
+-	datasize(1)=md.mesh.numberofelements;
++	datasize(1)=numberofelements;
+ 	%---> go to node data
+ end
+ 
+@@ -111,12 +118,12 @@
+ %smoothing?
+ if exist(options,'smooth')
+ 	data=averaging(md,data,getfieldvalue(options,'smooth'));
+-	datasize(1)=md.mesh.numberofvertices;
++	datasize(1)=numberofvertices;
+ 	%---> go to node data
+ end
+ 
+ %element data
+-if (datasize(1)==md.mesh.numberofelements & datasize(2)==1),
++if (datasize(1)==numberofelements & datasize(2)==1),
+ 
+ 	%Initialize datatype if non patch
+ 	if datatype~=4 & datatype~=5,
+@@ -128,13 +135,13 @@
+ 		flags=getfieldvalue(options,'mask');
+ 		maskvalue=getfieldvalue(options,'maskvalue',NaN);
+ 		pos=find(~flags);
+-		if length(flags)==md.mesh.numberofvertices,
++		if length(flags)==numberofvertices,
+ 			[pos2 dummy]=find(ismember(md.mesh.elements,pos));
+ 			data(pos2,:)=maskvalue;
+-		elseif length(flags)==md.mesh.numberofelements
++		elseif length(flags)==numberofelements
+ 			data(pos,:)=maskvalue;
+ 		else
+-			disp('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements');
++			disp('plotmodel warning: mask length not supported yet (supported length are numberofvertices and numberofelements');
+ 		end
+ 	end
+ 
+@@ -151,7 +158,7 @@
+ end
+ 
+ %node data
+-if (datasize(1)==md.mesh.numberofvertices & datasize(2)==1),
++if (datasize(1)==numberofvertices & datasize(2)==1),
+ 	datatype=2;
+ 
+ 	%Mask?
+@@ -159,12 +166,12 @@
+ 		flags=getfieldvalue(options,'mask');
+ 		maskvalue=getfieldvalue(options,'maskvalue',NaN);
+ 		pos=find(~flags);
+-		if length(flags)==md.mesh.numberofvertices,
++		if length(flags)==numberofvertices,
+ 			data(pos,:)=maskvalue;
+-		elseif length(flags)==md.mesh.numberofelements
++		elseif length(flags)==numberofelements
+ 			data(md.mesh.elements(pos,:),:)=maskvalue;
+ 		else
+-			disp('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements');
++			disp('plotmodel warning: mask length not supported yet (supported length are numberofvertices and numberofelements');
+ 		end
+ 	end
+ 
+@@ -198,12 +205,12 @@
+ 	if exist(options,'mask'),
+ 		flags=getfieldvalue(options,'mask');
+ 		pos=find(~flags);
+-		if length(flags)==md.mesh.numberofvertices,
++		if length(flags)==numberofvertices,
+ 			data(pos,:)=NaN;
+-		elseif length(flags)==md.mesh.numberofelements
++		elseif length(flags)==numberofelements
+ 			data(md.mesh.elements(pos,:),:)=NaN;
+ 		else
+-			disp('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements');
++			disp('plotmodel warning: mask length not supported yet (supported length are numberofvertices and numberofelements');
+ 		end
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-21958-21959.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21958-21959.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21958-21959.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 21958)
++++ ../trunk-jpl/jenkins/windows	(revision 21959)
+@@ -59,5 +59,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243,430,441,442]"
++MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243,430,441,442,463,464,465]"
+ PYTHON_NROPTIONS=""
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 21958)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 21959)
+@@ -14,8 +14,8 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', ...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'};
+ field_tolerances={...
+-	1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
++	1e-08,5e-09,1e-09,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
++	1e-09,5e-09,1e-08,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
+ 	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test227.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.js	(revision 21958)
++++ ../trunk-jpl/test/NightlyRun/test227.js	(revision 21959)
+@@ -15,8 +15,8 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', 
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'];
+ field_tolerances=[
+-	1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
++	1e-08,5e-09,1e-09,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
++	1e-09,5e-09,1e-08,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
+ 	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05];
+ field_values=[
+ 	(md.results.TransientSolution[0](1).Vx),
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 21958)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 21959)
+@@ -23,8 +23,8 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', \
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
+ field_tolerances=[\
+-	1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	1e-08,5e-09,1e-09,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,5e-09,1e-08,5e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+ 	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-21959-21960.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21959-21960.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21959-21960.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_static
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_static	(revision 21959)
++++ ../trunk-jpl/jenkins/linux64_ross_static	(revision 21960)
+@@ -15,7 +15,7 @@
+ 	--with-matlab-dir=$MATLAB_PATH \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi" \
++	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi -lmpifort" \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/21724-22754/ISSM-21962-21963.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21962-21963.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21962-21963.diff	(revision 22755)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/externalpackages/emscripten/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21962)
++++ ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 21963)
+@@ -2,7 +2,7 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf src
++rm -rf install
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/emsdk-portable.tar.gz' 'emsdk-portable.tar.gz'
+@@ -9,9 +9,9 @@
+ 
+ #Untar and move petsc to install directory
+ tar -zxvf  emsdk-portable.tar.gz
+-mv emsdk_portable src
++mv emsdk_portable install
+ 
+-cd src 
++cd install 
+ 
+ export CXX=g++
+ export CC=gcc
+Index: ../trunk-jpl/externalpackages/gsl/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21962)
++++ ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21963)
+@@ -21,12 +21,13 @@
+ export CC=emcc
+ export CXX=em++
+ #Source emscripten to ensure emcc/em++ compiler are in env
+-source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
++source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ 
+ # Issue with variadic function signatures.
+ export CFLAGS=-DSTDC_HEADERS
+ 
+-./configure --prefix="$ISSM_DIR/externalpackages/gsl/install-javascript" 
++./configure --prefix="$ISSM_DIR/externalpackages/gsl/install-javascript" \
++	--disable-shared
+ 
+ #Compile gsl
+ if [ $# -eq 0 ]; then
+Index: ../trunk-jpl/externalpackages/triangle/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21962)
++++ ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21963)
+@@ -9,7 +9,7 @@
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/triangle.zip' 'triangle.zip'
+ 
+ #Source emscripten to ensure emcc/em++ compiler are in env
+-source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
++source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ 
+ #Untar 
+ cd install-javascript
Index: /issm/oecreview/Archive/21724-22754/ISSM-21963-21964.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21963-21964.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21963-21964.diff	(revision 22755)
@@ -0,0 +1,268 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21963)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21964)
+@@ -161,6 +161,7 @@
+ 	HydrologydcSedimentlimitFlagEnum,
+ 	HydrologydcSedimentlimitEnum,
+ 	HydrologydcTransferFlagEnum,
++	HydrologydcUnconfinedFlagEnum,
+ 	HydrologydcLeakageFactorEnum,
+ 	HydrologydcPenaltyFactorEnum,
+ 	HydrologydcPenaltyLockEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21963)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21964)
+@@ -167,6 +167,7 @@
+ 		case HydrologydcSedimentlimitFlagEnum : return "HydrologydcSedimentlimitFlag";
+ 		case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit";
+ 		case HydrologydcTransferFlagEnum : return "HydrologydcTransferFlag";
++		case HydrologydcUnconfinedFlagEnum : return "HydrologydcUnconfinedFlag";
+ 		case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor";
+ 		case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor";
+ 		case HydrologydcPenaltyLockEnum : return "HydrologydcPenaltyLock";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21963)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21964)
+@@ -170,6 +170,7 @@
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
++	      else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+-	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
++	      if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
++	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+-	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Smb")==0) return SmbEnum;
++	      if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
++	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+ 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
+ 	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
+ 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+-	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Misfit")==0) return MisfitEnum;
++	      if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
++	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+ 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+ 	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
+ 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
+ 	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+-	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
++	      if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
++	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+ 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+ 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+ 	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;
+ 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
+ 	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
+-	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
++	      if (strcmp(name,"RootPath")==0) return RootPathEnum;
++	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+ 	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+ 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+ 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+ 	      else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+-	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
++	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+-	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
++	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
++	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+ 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 21963)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 21964)
+@@ -15,6 +15,7 @@
+ 	int         hydrology_model;
+ 	int         sedimentlimit_flag;
+ 	int         transfer_flag;
++	int         unconfined_flag;
+ 	int         penalty_lock;
+ 	int         hydro_maxiter;
+ 	bool        isefficientlayer;
+@@ -31,6 +32,7 @@
+ 
+ 	iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" );
+ 	iomodel->FetchData(&transfer_flag,      "md.hydrology.transfer_flag" );
++	iomodel->FetchData(&unconfined_flag,      "md.hydrology.unconfined_flag" );
+ 	iomodel->FetchData(&penalty_factor,     "md.hydrology.penalty_factor" );
+ 	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
+ 	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
+@@ -40,6 +42,7 @@
+ 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+ 	parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag));
+ 	parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
++	parameters->AddObject(new IntParam(HydrologydcUnconfinedFlagEnum,unconfined_flag));
+ 	parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
+ 	parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
+ 	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
+@@ -78,7 +81,6 @@
+ 			counter++;
+ 		}
+ 	}
+-
+ 	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+ 	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+@@ -219,6 +221,7 @@
+ 	
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=basalelement->NewGauss(2);
++
+ 	for(int ig=gauss -> begin();ig<gauss->end();ig++){
+ 		gauss          -> GaussPoint(ig);
+ 		basalelement   -> JacobianDeterminant(&Jdet,xyz_list,gauss);
+@@ -316,6 +319,7 @@
+ 	Input* epl_head_input = basalelement->GetInput(EplHeadEnum);
+ 	Input* base_input		  = basalelement->GetInput(BaseEnum);
+ 	Input* water_input	  = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input);
++
+ 	if(dt!= 0.){
+ 		old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);                  _assert_(old_wh_input);
+ 	}
+@@ -512,6 +516,8 @@
+ }/*}}}*/
+ 
+ IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input){/*{{{*/
++	int unconf_scheme;
++	IssmDouble expfac; 
+ 	IssmDouble sediment_storing;
+ 	IssmDouble storing;
+ 	IssmDouble base_elev,prestep_head,water_sheet;
+@@ -521,34 +527,57 @@
+ 	IssmDouble sediment_thickness       = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum);
+ 	IssmDouble sediment_compressibility = element->GetMaterialParameter(HydrologydcSedimentCompressibilityEnum);
+ 	IssmDouble water_compressibility    = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum);
+-	base_input->GetInputValue(&base_elev,gauss);
+-	sed_head_input->GetInputValue(&prestep_head,gauss);
+-	water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
++	element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum);
++	switch(unconf_scheme){
++	case 0:
++		sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
++		break;
++	case 1:
++		base_input->GetInputValue(&base_elev,gauss);
++		sed_head_input->GetInputValue(&prestep_head,gauss);
++		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
+ 
+-	storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
++		storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
+ 	
+-	//Heavyside approximation (1/(1+exp(-2kx))) with k=25 centering at thickness minus 1%
+-	sediment_storing=(sediment_porosity*exp(-20.*(water_sheet-0.99*sediment_thickness))+storing)/(1+exp(-20.*(water_sheet-0.99*sediment_thickness)));
+-
++		//	using logistic function for heavyside approximation
++		expfac=10.;
++		sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
++		break;
++	default:
++		_error_("UnconfinedFlag is 0 or 1");
++	}
+ 	return sediment_storing;
+ }/*}}}*/
+ 
+ IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input){/*{{{*/
++	int unconf_scheme;
++	IssmDouble ratio,expfac;
+ 	IssmDouble sediment_transmitivity;
+ 	IssmDouble FullLayer_transmitivity;
+ 	IssmDouble base_elev,prestep_head,water_sheet;
+ 	IssmDouble sediment_thickness       = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum);
+-	base_input->GetInputValue(&base_elev,gauss);
+-	sed_head_input->GetInputValue(&prestep_head,gauss);
++
++	element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum);
+ 	SedTrans_input->GetInputValue(&FullLayer_transmitivity,gauss);
+-	water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
++	switch(unconf_scheme){
++	case 0:
++		sediment_transmitivity=FullLayer_transmitivity;
++		break;
++	case 1:
++		base_input->GetInputValue(&base_elev,gauss);
++		sed_head_input->GetInputValue(&prestep_head,gauss);
++		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
+ 
+-	if (water_sheet<=sediment_thickness){
+-		sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
++		if (water_sheet<=sediment_thickness){
++			sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
++		}
++		else{
++			sediment_transmitivity=FullLayer_transmitivity;
++		}
++		break;
++	default:
++		_error_("UnconfinedFlag is 0 or 1");
+ 	}
+-	else{
+-		sediment_transmitivity=FullLayer_transmitivity;
+-	}
+ 	return sediment_transmitivity;
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21964-21965.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21964-21965.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21964-21965.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/test/NightlyRun/test301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.py	(revision 21964)
++++ ../trunk-jpl/test/NightlyRun/test301.py	(revision 21965)
+@@ -18,9 +18,7 @@
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	]
++field_values=[md.results.StressbalanceSolution.Vx,
++							md.results.StressbalanceSolution.Vy,
++							md.results.StressbalanceSolution.Vel,
++							md.results.StressbalanceSolution.Pressure]
+Index: ../trunk-jpl/test/NightlyRun/test330.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test330.m	(revision 21964)
++++ ../trunk-jpl/test/NightlyRun/test330.m	(revision 21965)
+@@ -19,6 +19,7 @@
+ md.hydrology.penalty_lock=0;
+ md.hydrology.max_iter=200;
+ md.hydrology.transfer_flag=0;
++md.hydrology.unconfined_flag=1;
+ md.hydrology.sediment_porosity=0.1;
+ %Sediment
+ md.hydrology.sediment_thickness=10.0;
+Index: ../trunk-jpl/test/NightlyRun/test330.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test330.py	(revision 21964)
++++ ../trunk-jpl/test/NightlyRun/test330.py	(revision 21965)
+@@ -31,6 +31,7 @@
+ md.hydrology.penalty_lock=0
+ md.hydrology.max_iter=200
+ md.hydrology.transfer_flag=0
++md.hydrology.unconfined_flag=1
+ md.hydrology.sediment_porosity=0.1
+ #Sediment
+ md.hydrology.sediment_thickness=10.0
Index: /issm/oecreview/Archive/21724-22754/ISSM-21965-21966.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21965-21966.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21965-21966.diff	(revision 22755)
@@ -0,0 +1,93 @@
+Index: ../trunk-jpl/src/m/classes/hydrologydc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 21965)
++++ ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 21966)
+@@ -14,6 +14,7 @@
+ 		sedimentlimit_flag       = 0;
+ 		sedimentlimit            = 0;
+ 		transfer_flag            = 0;
++		unconfined_flag          = 0;
+ 		leakage_factor           = 0;
+ 		basal_moulin_input       = NaN;
+ 
+@@ -78,6 +79,7 @@
+ 			self.sedimentlimit_flag       = 0;
+ 			self.sedimentlimit            = 0;
+ 			self.transfer_flag            = 0;
++			self.unconfined_flag          = 0;
+ 			self.leakage_factor           = 10.0;
+ 
+ 			self.sediment_compressibility = 1.0e-08;
+@@ -112,6 +114,7 @@
+ 			md = checkfield(md,'fieldname','hydrology.max_iter','>',0,'numel',1);
+ 			md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]);
+ 			md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0 1]);
+ 			if self.sedimentlimit_flag==1,
+ 				md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1);
+ 			end
+@@ -169,6 +172,9 @@
+ 			if self.transfer_flag==1,
+ 				fielddisplay(self,'leakage_factor','user defined leakage factor [m]');
+ 			end
++			fielddisplay(self,'unconfined_flag',['Do you want unconfined scheme to be used (transitory)']);
++			disp(sprintf('%55s  0: confined only',' '));
++			disp(sprintf('%55s  1: confined unconfined'));
+ 			fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]');
+ 			disp(sprintf('   - for the sediment layer'));
+ 			fielddisplay(self,'spcsediment_head','sediment water head constraints (NaN means no constraint) [m above MSL]');
+@@ -206,6 +212,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','unconfined_flag','format','Integer');
+ 			if self.sedimentlimit_flag==1,
+ 				WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit','format','Double');
+ 			end
+Index: ../trunk-jpl/src/m/classes/hydrologydc.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 21965)
++++ ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 21966)
+@@ -22,6 +22,7 @@
+ 		self.sedimentlimit_flag       = 0
+ 		self.sedimentlimit            = 0
+ 		self.transfer_flag            = 0
++		self.unconfined_flag          = 0
+ 		self.leakage_factor           = 0
+ 		self.basal_moulin_input       = float('NaN')
+ 
+@@ -72,6 +73,10 @@
+ 		if self.transfer_flag is 1:
+ 			string="%s\n%s"%(string,fielddisplay(self,'leakage_factor','user defined leakage factor [m]'))
+ 
++		string="%s\n%s"%(string,fielddisplay(self,'unconfined_flag','using an unconfined scheme or not (transitory)'))
++		string="%s\n\t\t%s"%(string,'0: Confined only')
++		string="%s\n\t\t%s"%(string,'1: Confined-Unconfined')
++			 
+ 		string="%s\n%s"%(string,'   - for the sediment layer')
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcsediment_head','sediment water head constraints (NaN means no constraint) [m above MSL]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'sediment_compressibility','sediment compressibility [Pa^-1]'))
+@@ -114,6 +119,7 @@
+ 		self.sedimentlimit_flag       = 0
+ 		self.sedimentlimit            = 0
+ 		self.transfer_flag            = 0
++		self.unconfined_flag          = 0
+ 		self.leakage_factor           = 10.0
+ 
+ 		self.sediment_compressibility = 1.0e-08
+@@ -153,6 +159,7 @@
+ 		md = checkfield(md,'fieldname','hydrology.max_iter','>',0.,'numel',[1])
+ 		md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0,1,2,3])
+ 		md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0,1])
+ 
+ 		if self.sedimentlimit_flag==1:
+ 			md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0.,'numel',[1])
+@@ -190,6 +197,7 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','unconfined_flag','format','Integer')
+ 		if self.sedimentlimit_flag==1:
+ 			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit','format','Double')
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21966-21967.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21966-21967.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21966-21967.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 21966)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 21967)
+@@ -63,9 +63,9 @@
+ 		 %}}}
+ 		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+-			 available_queues={'long','general','debug'};
++			 available_queues={'long','allnccs','debug'};
+ 			 queue_requirements_time=[24*60*60 12*60*60 60];
+-			 queue_requirements_np=[4116 532 532];
++			 queue_requirements_np=[560 6000 532];
+ 
+ 			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21967-21968.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21967-21968.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21967-21968.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/MITgcm/code/packages.conf
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/packages.conf	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/packages.conf	(revision 21968)
+@@ -0,0 +1,8 @@
++# $Header: /u/gcmpack/MITgcm/verification/isomip/code/packages.conf,v 1.2 2010/02/11 22:24:12 dimitri Exp $
++# $Name:  $
++
++gfd
++timeave
++shelfice
++obcs
++diagnostics
Index: /issm/oecreview/Archive/21724-22754/ISSM-21968-21969.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21968-21969.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21968-21969.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test4001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4001.m	(revision 21968)
++++ ../trunk-jpl/test/NightlyRun/test4001.m	(revision 21969)
+@@ -165,7 +165,7 @@
+     fclose(fidi);
+     fclose(fido);
+ 
+-	 system(['../MITgcm/build.sh generic ' pwd]);
++	 system(['../MITgcm/build.sh generic ' pwd '/../MITgcm']);
+ end
+ % }}}
+ addpath(recursivepath([pwd '/../MITgcm']));
Index: /issm/oecreview/Archive/21724-22754/ISSM-21969-21970.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21969-21970.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21969-21970.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive4001.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21974-21975.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21974-21975.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21974-21975.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21974)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 21975)
+@@ -11,7 +11,9 @@
+     --with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install-javascript" \
+     --without-kml\
+     --without-kriging\
+-    --with-cxxoptflags="-O2"'
++    --with-cxxoptflags=""\
++    CXXFLAGS=""\
++    CFLAGS=""'
+ 
+ #PYTHON and MATLAB testing
+ MATLAB_TEST=0
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 21974)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 21975)
+@@ -196,7 +196,7 @@
+ if [ $JAVASCRIPT_TEST -eq 1 ]; then
+ 	export CXX=em++
+ 	export CC=emcc
+-	source $ISSM_DIR/externalpackages/emscripten/src/emsdk_env.sh
++	source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ fi
+ #}}}
+ #ISSM compilation yes/no                (ISSM_COMPILATION) {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-21975-21976.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21975-21976.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21975-21976.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/externalpackages/gsl/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21975)
++++ ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 21976)
+@@ -18,10 +18,10 @@
+ #Configure gsl
+ cd src-javascript
+ 
++#Source emscripten to ensure emcc/em++ compiler are in env
++source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ export CC=emcc
+ export CXX=em++
+-#Source emscripten to ensure emcc/em++ compiler are in env
+-source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ 
+ # Issue with variadic function signatures.
+ export CFLAGS=-DSTDC_HEADERS
+Index: ../trunk-jpl/externalpackages/triangle/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21975)
++++ ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 21976)
+@@ -10,6 +10,8 @@
+ 
+ #Source emscripten to ensure emcc/em++ compiler are in env
+ source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
++export CXX=em++
++export CC=emcc
+ 
+ #Untar 
+ cd install-javascript
Index: /issm/oecreview/Archive/21724-22754/ISSM-21976-21977.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21976-21977.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21976-21977.diff	(revision 22755)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21976)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21977)
+@@ -822,6 +822,24 @@
+ 	SealevelriseRequestedOutputsEnum,
+ 	SealevelriseNumRequestedOutputsEnum,
+ 	/*}}}*/
++	/*Love Numbers{{{*/
++	LoveNfreqEnum,
++	LoveFrequenciesEnum,
++	LoveShNmaxEnum,
++	LoveShNminEnum,
++	LoveG0Enum,
++	LoveR0Enum,
++	LoveMu0Enum,
++	LoveAllowLayerDeletionEnum,
++	LoveForcingTypeEnum,
++	LoveHrEnum,
++	LoveKrEnum,
++	LoveLrEnum,
++	LoveHiEnum,
++	LoveKiEnum,
++	LoveLiEnum,
++
++	/*}}}*/
+ 	/*Elastic adjustment (ESA){{{*/
+ 	EsaUmotionEnum,
+ 	EsaNmotionEnum,
+@@ -892,6 +910,7 @@
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
+ 	MaticeEnum,
++	MatlithoEnum,
+ 	MatdamageiceEnum,
+ 	MatenhancediceEnum,
+ 	MatestarEnum,
+@@ -985,6 +1004,9 @@
+ 	GiaIvinsAnalysisEnum,
+ 	EsaSolutionEnum,
+ 	EsaAnalysisEnum,
++	LoveSolutionEnum,
++	LoveAnalysisEnum,
++	MeshdeformationAnalysisEnum,
+ 	LevelsetAnalysisEnum,
+ 	ExtrapolationAnalysisEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21976)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21977)
+@@ -801,6 +801,21 @@
+ 		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
+ 		case SealevelriseRequestedOutputsEnum : return "SealevelriseRequestedOutputs";
+ 		case SealevelriseNumRequestedOutputsEnum : return "SealevelriseNumRequestedOutputs";
++		case LoveNfreqEnum : return "LoveNfreq";
++		case LoveFrequenciesEnum : return "LoveFrequencies";
++		case LoveShNmaxEnum : return "LoveShNmax";
++		case LoveShNminEnum : return "LoveShNmin";
++		case LoveG0Enum : return "LoveG0";
++		case LoveR0Enum : return "LoveR0";
++		case LoveMu0Enum : return "LoveMu0";
++		case LoveAllowLayerDeletionEnum : return "LoveAllowLayerDeletion";
++		case LoveForcingTypeEnum : return "LoveForcingType";
++		case LoveHrEnum : return "LoveHr";
++		case LoveKrEnum : return "LoveKr";
++		case LoveLrEnum : return "LoveLr";
++		case LoveHiEnum : return "LoveHi";
++		case LoveKiEnum : return "LoveKi";
++		case LoveLiEnum : return "LoveLi";
+ 		case EsaUmotionEnum : return "EsaUmotion";
+ 		case EsaNmotionEnum : return "EsaNmotion";
+ 		case EsaEmotionEnum : return "EsaEmotion";
+@@ -864,6 +879,7 @@
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
+ 		case MaticeEnum : return "Matice";
++		case MatlithoEnum : return "Matlitho";
+ 		case MatdamageiceEnum : return "Matdamageice";
+ 		case MatenhancediceEnum : return "Matenhancedice";
+ 		case MatestarEnum : return "Matestar";
+@@ -953,6 +969,9 @@
+ 		case GiaIvinsAnalysisEnum : return "GiaIvinsAnalysis";
+ 		case EsaSolutionEnum : return "EsaSolution";
+ 		case EsaAnalysisEnum : return "EsaAnalysis";
++		case LoveSolutionEnum : return "LoveSolution";
++		case LoveAnalysisEnum : return "LoveAnalysis";
++		case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
+ 		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
+ 		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+ 		case ApproximationEnum : return "Approximation";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21976)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21977)
+@@ -819,6 +819,21 @@
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
++	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
++	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
++	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
++	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
++	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
++	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
++	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
++	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
++	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
++	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
++	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
++	      else if (strcmp(name,"LoveLr")==0) return LoveLrEnum;
++	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
++	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
++	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
+ 	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+@@ -859,7 +874,10 @@
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+-	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+ 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+ 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+@@ -874,10 +892,7 @@
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+ 	      else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
++	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+@@ -885,6 +900,7 @@
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
++	      else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
+ 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+ 	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
+ 	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
+@@ -974,11 +990,17 @@
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+ 	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
++	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
++	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
++	      else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+-	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+ 	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+ 	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+ 	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+@@ -997,10 +1019,7 @@
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
++	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+ 	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+ 	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-21977-21978.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21977-21978.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21977-21978.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21977)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 21978)
+@@ -89,7 +89,7 @@
+ 		femmodel->parameters->SetParam(time,TimeEnum);
+ 		femmodel->parameters->SetParam(step,StepEnum);
+ 
+-		if(VerboseSolution()) _printf0_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << setprecision(4) << time/yts << " (time step: " << dt/yts << ")\n");
++		if(VerboseSolution()) _printf0_("iteration " << step << "/" << ceil((finaltime-time)/dt)+step << "  time [yr]: " << setprecision(4) << time/yts << " (time step: " << dt/yts << ")\n");
+ 		if(step%output_frequency==0 || (time >= finaltime - (yts*DBL_EPSILON)) || step==1)
+ 		 save_results=true;
+ 		else
Index: /issm/oecreview/Archive/21724-22754/ISSM-21978-21979.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21978-21979.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21978-21979.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 21978)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 21979)
+@@ -37,6 +37,7 @@
+ 
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			if strcmpi(solution,'LoveSolution'), return; end;
+ 
+ 			md = checkfield(md,'fieldname','mask.groundedice_levelset','forcing',1,'NaN',1);
+ 			md = checkfield(md,'fieldname','mask.ice_levelset','NaN',1,'size',[md.mesh.numberofvertices 1]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21979-21980.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21979-21980.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21979-21980.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/geometry.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/geometry.m	(revision 21979)
++++ ../trunk-jpl/src/m/classes/geometry.m	(revision 21980)
+@@ -54,6 +54,8 @@
+ 
+ 			if (strcmp(solution,'TransientSolution') & md.transient.isgia) | strcmp(solution,'GiaSolution'),
+ 				md = checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1,'>=',0);
++			elseif strcmpi(solution,'LoveSolution')
++				return; 
+ 			else
+ 				md = checkfield(md,'fieldname','geometry.surface'  ,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 				md = checkfield(md,'fieldname','geometry.base'      ,'NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21980-21981.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21980-21981.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21980-21981.diff	(revision 22755)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 21981)
+@@ -0,0 +1,164 @@
++
++%Test Name: GiaCaron. Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
++
++md=model();
++md.cluster=generic('name',oshostname(),'np',1);
++
++md.materials=materials('litho');
++md.miscellaneous.name='FourierLoveTest';
++
++md.verbose=verbose('111111111');
++cst=365.25*24*3600*1000
++
++	md.materials.numlayers=6;
++        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
++	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
++	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
++	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
++	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++	md.materials.issolid=[1 0 1 1 1 1]';
++	md.materials.isburgers=zeros(md.materials.numlayers,1);
++
++md.love.allow_layer_deletion=1;
++ T=12;%time period of the computation, kyr
++ dt=0.5;%time step in kyr
++ fmax=1/2/dt;
++ df=1/T;
++md.love.frequencies=([0]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++
++
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={'LoveHe','LoveKe','LoveLe'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	};
++
++
++md.love.frequencies=([1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={field_names{:},'LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
++
++
++
++md.love.forcing_type=9;
++md.love.sh_nmin=2
++md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md=solve(md,'lv');
++%tidal love numbers
++field_names     ={field_names{:},'LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
++
++
++
++ %Many layers PREM-based model
++%data=load('../Data/PREM_500layers');
++%md.love.sh_nmin=1;
++%md.materials.radius=data(2:end-2,1);
++%md.materials.density=data(3:end-2,2);
++%md.materials.lame_lambda=data(3:end-2,3);
++%md.materials.lame_mu=data(3:end-2,4);
++%md.materials.issolid=data(3:end-2,4)>0;
++%ind=find(md.materials.issolid==0);
++%md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3);
++%md.materials.radius(ind(2:end)+1)=[];
++%md.materials.density(ind(2:end))=[];
++%md.materials.lame_lambda(ind(2:end))=[];
++%md.materials.lame_mu(ind(2:end))=[];
++%md.materials.issolid(ind(2:end))=[];
++%md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP');
++%md.materials.viscosity=md.materials.viscosity.*md.materials.issolid;
++%md.materials.burgers_mu=md.materials.lame_mu;
++%md.materials.burgers_viscosity=md.materials.viscosity;
++%md.materials.isburgers=md.materials.issolid*0;
++%md.love.forcing_type=11;
++%md.materials.numlayers=length(md.materials.viscosity);
++%md=solve(md,'lv');
++%
++%field_names     ={field_names{:},'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi'};
++%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++%field_values={field_values{:},...
++%	(md.results.LoveSolution.LoveHr(:,1)),...
++%	(md.results.LoveSolution.LoveKr(:,1)),...
++%	(md.results.LoveSolution.LoveLr(:,1)),...
++%	(md.results.LoveSolution.LoveHr(:,2:end)),...
++%	(md.results.LoveSolution.LoveKr(:,2:end)),...
++%	(md.results.LoveSolution.LoveLr(:,2:end)),...
++%	(md.results.LoveSolution.LoveHi(:,2:end)),...
++%	(md.results.LoveSolution.LoveKi(:,2:end)),...
++%	(md.results.LoveSolution.LoveLi(:,2:end)),...
++%	};
++
++
++%Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
++md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
++md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
++md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]';
++md.materials.viscosity=[0., 0., 7.999999999999999E+21, 8.5E+21, 8.999999999999999E+21, 3.E+22, 4.E+22, 5.0000000000000004E+22, 6.E+22, 5.0000000000000004E+22, 4.5E+22, 3.E+22, 2.5000000000000002E+22, 1.7999999999999998E+22, 1.3E+22, 7.999999999999999E+21, 6.999999999999999E+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 4.4999999999999995E+21, 3.9999999999999995E+21, 2.5E+21, 1.9999999999999997E+21, 1.5E+21, 9.999999999999999E+20, 6.E+20, 5.5000000000000007E+20, 2.E+20, 1.E40]';
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++md.materials.issolid=md.materials.lame_mu>0;
++md.materials.numlayers=length(md.materials.lame_mu);
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++md.materials.isburgers=md.materials.issolid*0;
++md.love.forcing_type=11;
++md.love.sh_nmin=1;
++md.love.sh_nmax=100;
++md=solve(md,'lv');
++md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++
++
++field_names     ={field_names{:},'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-21981-21982.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21981-21982.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21981-21982.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/m4/analyses.m4
+===================================================================
+--- ../trunk-jpl/m4/analyses.m4	(revision 21981)
++++ ../trunk-jpl/m4/analyses.m4	(revision 21982)
+@@ -841,6 +841,32 @@
+ AC_MSG_RESULT($HAVE_ESA)
+ 
+ dnl }}}
++dnl with-Love{{{
++
++AC_ARG_WITH([Love],
++
++	AS_HELP_STRING([--with-Love = YES], [compile with Love capabilities (default is yes)]),
++
++	[LOVE=$withval],[LOVE=yes])
++
++AC_MSG_CHECKING(for Love capability compilation)
++
++
++HAVE_LOVE=no 
++
++if test "x$LOVE" = "xyes"; then
++
++	HAVE_LOVE=yes
++
++	AC_DEFINE([_HAVE_LOVE_],[1],[with Love capability])
++
++fi
++
++AM_CONDITIONAL([LOVE], [test x$HAVE_LOVE = xyes])
++
++AC_MSG_RESULT($HAVE_LOVE)
++
++dnl }}}
+ dnl with-Meshdeformation{{{
+ 
+ AC_ARG_WITH([Meshdeformation],
Index: /issm/oecreview/Archive/21724-22754/ISSM-21982-21983.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21982-21983.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21982-21983.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 21982)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 21983)
+@@ -226,6 +226,9 @@
+ }/*}}}*/
+ ElementMatrix* AdjointHorizAnalysis::CreateKMatrixSSA(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Intermediaries*/
+ 	int      domaintype;
+ 	Element* basalelement;
+@@ -807,6 +810,9 @@
+ 	int      domaintype;
+ 	Element* basalelement;
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Get basal element*/
+ 	element->FindParam(&domaintype,DomainTypeEnum);
+ 	switch(domaintype){
Index: /issm/oecreview/Archive/21724-22754/ISSM-21983-21984.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21983-21984.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21983-21984.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/externalpackages/cython/install-26.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/cython/install-26.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/cython/install-26.sh	(revision 21984)
+@@ -0,0 +1,13 @@
++#!/bin/bash
++set -eu
++
++#clean up
++rm -rf Cython-0.26
++
++#download numpy first
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/Cython-0.26.tar.gz' 'cython.tar.gz'
++
++#install numpy
++tar -zxvf cython.tar.gz
++cd Cython-0.26
++python setup.py install
+
+Property changes on: ../trunk-jpl/externalpackages/cython/install-26.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21984-21985.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21984-21985.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21984-21985.diff	(revision 22755)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 21984)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(nonexistent)
+@@ -1,164 +0,0 @@
+-
+-%Test Name: GiaCaron. Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
+-
+-md=model();
+-md.cluster=generic('name',oshostname(),'np',1);
+-
+-md.materials=materials('litho');
+-md.miscellaneous.name='FourierLoveTest';
+-
+-md.verbose=verbose('111111111');
+-cst=365.25*24*3600*1000
+-
+-	md.materials.numlayers=6;
+-        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
+-	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
+-	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
+-	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
+-	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
+-	md.materials.issolid=[1 0 1 1 1 1]';
+-	md.materials.isburgers=zeros(md.materials.numlayers,1);
+-
+-md.love.allow_layer_deletion=1;
+- T=12;%time period of the computation, kyr
+- dt=0.5;%time step in kyr
+- fmax=1/2/dt;
+- df=1/T;
+-md.love.frequencies=([0]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md.love.sh_nmax=256;
+-
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-
+-md=solve(md,'lv');
+-
+-
+-%Fields and tolerances to track changes
+-%loading love numbers
+-field_names     ={'LoveHe','LoveKe','LoveLe'};
+-field_tolerances={1e-13,1e-13,1e-13};
+-field_values={...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	};
+-
+-
+-md.love.frequencies=([1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md.love.sh_nmax=256;
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-
+-md=solve(md,'lv');
+-%Fields and tolerances to track changes
+-%loading love numbers
+-field_names     ={field_names{:},'LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-	};
+-
+-
+-
+-md.love.forcing_type=9;
+-md.love.sh_nmin=2
+-md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md=solve(md,'lv');
+-%tidal love numbers
+-field_names     ={field_names{:},'LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-	};
+-
+-
+-
+- %Many layers PREM-based model
+-%data=load('../Data/PREM_500layers');
+-%md.love.sh_nmin=1;
+-%md.materials.radius=data(2:end-2,1);
+-%md.materials.density=data(3:end-2,2);
+-%md.materials.lame_lambda=data(3:end-2,3);
+-%md.materials.lame_mu=data(3:end-2,4);
+-%md.materials.issolid=data(3:end-2,4)>0;
+-%ind=find(md.materials.issolid==0);
+-%md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
+-%md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
+-%md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3);
+-%md.materials.radius(ind(2:end)+1)=[];
+-%md.materials.density(ind(2:end))=[];
+-%md.materials.lame_lambda(ind(2:end))=[];
+-%md.materials.lame_mu(ind(2:end))=[];
+-%md.materials.issolid(ind(2:end))=[];
+-%md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP');
+-%md.materials.viscosity=md.materials.viscosity.*md.materials.issolid;
+-%md.materials.burgers_mu=md.materials.lame_mu;
+-%md.materials.burgers_viscosity=md.materials.viscosity;
+-%md.materials.isburgers=md.materials.issolid*0;
+-%md.love.forcing_type=11;
+-%md.materials.numlayers=length(md.materials.viscosity);
+-%md=solve(md,'lv');
+-%
+-%field_names     ={field_names{:},'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi'};
+-%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-%field_values={field_values{:},...
+-%	(md.results.LoveSolution.LoveHr(:,1)),...
+-%	(md.results.LoveSolution.LoveKr(:,1)),...
+-%	(md.results.LoveSolution.LoveLr(:,1)),...
+-%	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-%	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-%	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-%	};
+-
+-
+-%Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
+-md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
+-md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
+-md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]';
+-md.materials.viscosity=[0., 0., 7.999999999999999E+21, 8.5E+21, 8.999999999999999E+21, 3.E+22, 4.E+22, 5.0000000000000004E+22, 6.E+22, 5.0000000000000004E+22, 4.5E+22, 3.E+22, 2.5000000000000002E+22, 1.7999999999999998E+22, 1.3E+22, 7.999999999999999E+21, 6.999999999999999E+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 4.4999999999999995E+21, 3.9999999999999995E+21, 2.5E+21, 1.9999999999999997E+21, 1.5E+21, 9.999999999999999E+20, 6.E+20, 5.5000000000000007E+20, 2.E+20, 1.E40]';
+-md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
+-md.materials.issolid=md.materials.lame_mu>0;
+-md.materials.numlayers=length(md.materials.lame_mu);
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-md.materials.isburgers=md.materials.issolid*0;
+-md.love.forcing_type=11;
+-md.love.sh_nmin=1;
+-md.love.sh_nmax=100;
+-md=solve(md,'lv');
+-md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-
+-
+-field_names     ={field_names{:},'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-21985-21986.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21985-21986.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21985-21986.diff	(revision 22755)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/configs/config-linux64-stallo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-stallo.sh	(nonexistent)
++++ ../trunk-jpl/configs/config-linux64-stallo.sh	(revision 21986)
+@@ -0,0 +1,29 @@
++#!/bin/sh
++
++#Stallo configuration script
++#this uses system stuff, you need to load the following:
++# module load Automake/1.15-intel-2016a
++# module load libtool/2.4.6-intel-2016a
++# module load CMake/3.5.2-intel-2016a
++# module load intel/2016a
++# module load ParMETIS/4.0.3-intel-2016a
++# module load MUMPS/5.1.1-intel-2016a-parmetis
++# module load PETSc/3.7.2-intel-2016a-Python-2.7.11
++# module load FFTW/3.3.4-intel-2016a
++# module load OpenSSL/1.0.1s-intel-2016a
++
++
++./configure \
++    --prefix=$ISSM_DIR \
++    --without-kriging \
++    --with-wrappers=no \
++    --with-petsc-dir="/global/hds/software/cpu/eb3/PETSc/3.7.2-intel-2016a-Python-2.7.11" \
++    --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
++    --with-mpi-include="/global/hds/software/cpu/eb3/impi/5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25/include64" \
++    --with-mpi-libflags="-L/global/hds/software/cpu/eb3/impi/5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25/lib64 -lmpich -lmpichf90 -lmpichcxx -lmpl" \
++    --with-metis-dir="/global/hds/software/cpu/eb3/ParMETIS/4.0.3-intel-2016a/include" \
++    --with-mumps-dir="/global/hds/software/cpu/eb3/MUMPS/5.1.1-intel-2016a-parmetis" \
++    --with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
++    --with-hypre-dir="/global/hds/software/cpu/eb3/Hypre/2.11.1-intel-2016a" \
++    --with-mkl-libflags="-L/global/hds/software/cpu/eb3/imkl/11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25/mkl/lib/intel64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lmkl_scalapack_lp64 -L/global/hds/software/cpu/eb3/FFTW/3.3.4-intel-2016a/lib/ -lfftw3_mpi -L/global/hds/software/cpu/eb3/SuiteSparse/4.5.3-intel-2016a-ParMETIS-4.0.3/lib -lklu -lamd -lamd -lbtf -lsuitesparseconfig -lumfpack -lcholmod -L/global/hds/software/cpu/eb3/ifort/2016.1.150-GCC-4.9.3-2.25/lib/intel64 -lifcore -lifport -L/global/hds/software/cpu/eb3/OpenSSL/1.0.1s-intel-2016a/lib -lssl -L/global/hds/software/cpu/eb3/SCOTCH/6.0.4-intel-2016a/lib -lesmumps -lptesmumps  -lptscotch  -lptscotcherr  -lptscotcherrexit -lscotch -lscotcherr -lscotcherrexit -lscotch_group" \
++    --enable-development
+
+Property changes on: ../trunk-jpl/configs/config-linux64-stallo.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21986-21987.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21986-21987.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21986-21987.diff	(revision 22755)
@@ -0,0 +1,176 @@
+Index: ../trunk-jpl/src/m/classes/clusters/stallo.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/stallo.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/clusters/stallo.py	(revision 21987)
+@@ -0,0 +1,171 @@
++import subprocess
++from fielddisplay import fielddisplay
++from pairoptions import pairoptions
++from issmssh import issmssh
++from issmscpin import issmscpin
++from issmscpout import issmscpout
++from QueueRequirements import QueueRequirements
++import datetime
++try:
++	from stallo_settings import stallo_settings
++except ImportError:
++	print 'You need stallo_settings.py to proceed, check presence and sys.path'
++	
++class stallo(object):
++	"""
++	Stallo cluster class definition
++	This is a SLURM queue
++	The priorities are given to: 
++	   - Large jobs
++	   - Short jobs
++	   - small number of job per user
++
++	There are some 20cpu nodes and 16cpu nodes, with 32GB (a few with 128GB) mem per node, you can ask for part of a node if you need more memory.(1 node, 2 CPUS and 10GB per cpu for example)
++	
++
++	   Usage:
++	      cluster=stallo();
++	"""
++
++	def __init__(self,*args):
++	# {{{
++		self.name           = 'stallo'
++		self.login          = ''
++		self.numnodes       = 2
++		self.cpuspernode    = 20
++		self.mem            = 1.6
++		self.queue          = 'normal'
++		self.time           = 2*60
++		self.codepath       = ''
++		self.executionpath  = ''
++		self.interactive    = 0
++		self.port           = []
++		self.accountname    = ''
++		self.profiling      = 0
++		#use provided options to change fields
++		options=pairoptions(*args)
++
++		#initialize cluster using user settings if provided
++		self=vilje_settings(self)
++		#OK get other fields
++		self=options.AssignObjectFields(self)
++		self.np=self.numnodes*self.procspernodes		
++	# }}}
++	
++	def __repr__(self):
++	# {{{
++		#  display the object
++		s = "class vilje object:"
++		s = "%s\n%s"%(s,fielddisplay(self,'name','name of the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'login','login'))
++		s = "%s\n%s"%(s,fielddisplay(self,'numnodes','number of nodes'))
++		s = "%s\n%s"%(s,fielddisplay(self,'cpuspernode','number of nodes per CPUs'))
++		s = "%s\n%s"%(s,fielddisplay(self,'mem','memory per CPU'))
++		s = "%s\n%s"%(s,fielddisplay(self,'queue','name of the queue (normal (D), short,singlenode,multinode,devel)'))
++		s = "%s\n%s"%(s,fielddisplay(self,'time','walltime requested in minutes'))
++		s = "%s\n%s"%(s,fielddisplay(self,'codepath','code path on the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'executionpath','execution path on the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'interactive',''))
++		s = "%s\n%s"%(s,fielddisplay(self,'accountname','your cluster account'))
++		s = "%s\n%s"%(s,fielddisplay(self,'profiling','enable profiling if 1 default is 0'))
++		return s
++	# }}}
++	def checkconsistency(self,md,solution,analyses):
++	# {{{
++		#Queue dictionarry  gives queue name as key and max walltime and cpus as var
++		queuedict = {'short':[60, 2048],
++								 'normal':[2*24*60,2048],
++								 'singlenode':[28*24*60,20],
++								 'multinode':[28*24*60,2048],
++								 'devel':[4*60,2048]}
++		QueueRequirements(queuedict,self.queue,self.np,self.time)
++
++		#Miscelaneous
++		if not self.login:
++			md = md.checkmessage('login empty')
++		if not self.codepath:
++			md = md.checkmessage('codepath empty')
++		if not self.executionpath:
++			md = md.checkmessage('executionpath empty')
++		if self.interactive==1:
++			md = md.checkmessage('interactive mode not implemented')
++		return self
++		# }}}
++	def BuildQueueScript(self,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling):
++		# {{{
++
++		executable='issm.exe'
++		if isdakota:
++			version=IssmConfig('_DAKOTA_VERSION_')[0:2]
++			version=float(version)
++			if version>=6:
++				executable='issm_dakota.exe'
++		if isoceancoupling:
++			executable='issm_ocean.exe'
++		#write queuing script 
++		shortname=modelname[0:min(12,len(modelname))]
++		fid=open(modelname+'.queue','w')
++									
++		fid.write('#!/bin/bash -l\n')
++		fid.write('#SBATCH --job-name=%s \n' % shortname)
++		fid.write('#SBATCH --partition %s \n' % self.queue)
++		fid.write('#SBATCH --nodes=%i' % self.numnodes)
++		fid.write('#SBATCH --ntasks-per-nodes==%i' % self.cpuspernode)									
++		fid.write('#SBATCH --time=%s\n' % timestring) #walltime is minutes
++		fid.write('#SBATCH --mem-per-cpu=%iGB\n' % self.mem)# mem is in GB
++		if (mod(self.np,16)+mod(self.np,20))==0:
++			fid.write('#SBATCH --ntask=%i\n' % self.np)
++		fid.write('#SBATCH --account=%s\n' % self.accountname) 
++		fid.write('#SBATCH --output %s/%s/%s.outlog \n' % (self.executionpath,dirname,modelname))
++		fid.write('#SBATCH --error %s/%s/%s.errlog \n\n' % (self.executionpath,dirname,modelname))
++
++		fid.write('export ISSM_DIR="%s/../"\n' % self.codepath)
++		fid.write('module load Automake/1.15-intel-2016a\n')
++		fid.write('module load libtool/2.4.6-intel-2016a\n')
++		fid.write('module load CMake/3.5.2-intel-2016a\n')
++		fid.write('module load intel/2016a\n')
++		fid.write('module load ParMETIS/4.0.3-intel-2016a\n')
++		fid.write('module load MUMPS/5.1.1-intel-2016a-parmetis\n')
++		fid.write('module load PETSc/3.7.2-intel-2016a-Python-2.7.11\n')
++		fid.write('module load FFTW/3.3.4-intel-2016a\n')
++		fid.write('module load OpenSSL/1.0.1s-intel-2016a\n')
++
++		fid.write('cd %s/%s/\n\n' % (self.executionpath,dirname))
++		if self.profiling==1:
++			fid.write('module load perf-report\n')
++			fid.write('perf-report mpirun -np %i %s/%s %s %s/%s %s\n' % (self.np,self.codepath,executable,str(solution),self.executionpath,dirname,modelname))
++		else:
++			fid.write('mpirun -np %i %s/%s %s %s/%s %s\n' % (self.np,self.codepath,executable,str(solution),self.executionpath,dirname,modelname))
++		fid.close()
++
++		# }}}
++	def UploadQueueJob(self,modelname,dirname,filelist):
++		# {{{
++		#compress the files into one zip.
++		compressstring='tar -zcf %s.tar.gz ' % dirname
++		for file in filelist:
++			compressstring += ' %s' % file
++		subprocess.call(compressstring,shell=True)
++
++		print 'uploading input file and queueing script'
++		issmscpout(self.name,self.executionpath,self.login,self.port,[dirname+'.tar.gz'])
++
++		# }}}
++	def LaunchQueueJob(self,modelname,dirname,filelist,restart,batch):
++		# {{{
++
++		print 'launching solution sequence on remote cluster'
++		if restart:
++			launchcommand='cd %s && cd %s && sbatch %s.queue' % (self.executionpath,dirname,modelname)
++		else:
++			launchcommand='cd %s && rm -rf ./%s && mkdir %s && cd %s && mv ../%s.tar.gz ./ && tar -zxf %s.tar.gz  && sbatch %s.queue' % (self.executionpath,dirname,dirname,dirname,dirname,dirname,modelname)
++		issmssh(self.name,self.login,self.port,launchcommand)
++
++		# }}}
++	def Download(self,dirname,filelist):
++		# {{{
++
++		#copy files from cluster to current directory
++		directory='%s/%s/' % (self.executionpath,dirname)
++		issmscpin(self.name,self.login,self.port,directory,filelist)
++		# }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-21987-21988.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21987-21988.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21987-21988.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/m/solvers/jacobiasmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobiasmoptions.py	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/jacobiasmoptions.py	(revision 21988)
+@@ -9,7 +9,7 @@
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions.pairoptions(*args) 
+ 	
+-	options=[['toolkit','petsc'],['mat_type','aij'],['ksp_type','gmres'],['pc_type','asm'],['sub_pc_type','jacobi'],['pc_asm_overlap',3],['ksp_max_it',100],['ksp_rtol',1e-15]];
++	options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_type','gmres'],['pc_type','asm'],['sub_pc_type','jacobi'],['pc_asm_overlap',3],['ksp_max_it',100],['ksp_rtol',1e-15]];
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/solvers/jacobicgoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobicgoptions.py	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/jacobicgoptions.py	(revision 21988)
+@@ -9,7 +9,7 @@
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions.pairoptions(*args) 
+ 	
+-	options=[['toolkit','petsc'],['mat_type','aij'],['ksp_type','cg'],['ksp_max_it',100],['ksp_rtol',1e-15]];
++	options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_type','cg'],['ksp_max_it',100],['ksp_rtol',1e-15]];
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/solvers/asmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/asmoptions.m	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/asmoptions.m	(revision 21988)
+@@ -10,7 +10,7 @@
+ 
+ %default asm options
+ asm.toolkit='petsc';
+-asm.mat_type=getfieldvalue(options,'mat_type','aij');
++asm.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ asm.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+ asm.pc_type=getfieldvalue(options,'pc_type','asm');
+ asm.sub_pc_type=getfieldvalue(options,'sub_pc_type','lu');
+Index: ../trunk-jpl/src/m/solvers/iluasmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/iluasmoptions.py	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/iluasmoptions.py	(revision 21988)
+@@ -15,7 +15,7 @@
+ 
+ 	#default iluasm options
+ 	iluasm['toolkit']='petsc'
+-	iluasm['mat_type']=options.getfieldvalue('mat_type','aij')
++	iluasm['mat_type']=options.getfieldvalue('mat_type','mpiaij')
+ 	iluasm['ksp_type']=options.getfieldvalue('ksp_type','gmres')
+ 	iluasm['pc_type']=options.getfieldvalue('pc_type','asm')
+ 	iluasm['sub_pc_type']=options.getfieldvalue('sub_pc_type','ilu')
+Index: ../trunk-jpl/src/m/solvers/soroptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/soroptions.py	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/soroptions.py	(revision 21988)
+@@ -9,7 +9,7 @@
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions.pairoptions(*args) 
+ 	
+-	options=[['toolkit','petsc'],['mat_type','aij'],['ksp_type','cg'],['pc_type','sor'],['pc_sor_omega',1.1],['pc_sor_its',2]];
++	options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_type','cg'],['pc_type','sor'],['pc_sor_omega',1.1],['pc_sor_its',2]];
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/solvers/jacobicgoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobicgoptions.m	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/jacobicgoptions.m	(revision 21988)
+@@ -10,7 +10,7 @@
+ 
+ %default jacobiasm options
+ jacobicg.toolkit='petsc';
+-jacobicg.mat_type=getfieldvalue(options,'mat_type','aij');
++jacobicg.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ jacobicg.ksp_type=getfieldvalue(options,'ksp_type','cg');
+ jacobicg.ksp_max_it=getfieldvalue(options,'ksp_max_it',100);
+ jacobicg.ksp_rtol=getfieldvalue(options,'ksp_rtol',1e-15);
+Index: ../trunk-jpl/src/m/solvers/jacobiasmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobiasmoptions.m	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/jacobiasmoptions.m	(revision 21988)
+@@ -10,7 +10,7 @@
+ 
+ %default jacobiasm options
+ jacobiasm.toolkit='petsc';
+-jacobiasm.mat_type=getfieldvalue(options,'mat_type','aij');
++jacobiasm.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ jacobiasm.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+ jacobiasm.pc_type=getfieldvalue(options,'pc_type','asm');
+ jacobiasm.sub_pc_type=getfieldvalue(options,'sub_pc_type','jacobi');
+Index: ../trunk-jpl/src/m/solvers/asmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/asmoptions.py	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/asmoptions.py	(revision 21988)
+@@ -9,7 +9,7 @@
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions.pairoptions(*args) 
+ 	
+-	options=[['toolkit','petsc'],['mat_type','aij'],['ksp_type','gmres'],['pc_type','asm'],['sub_pc_type','lu'],['pc_asm_overlap',3],['ksp_max_it',100],['ksp_rtol',1e-30]];
++	options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_type','gmres'],['pc_type','asm'],['sub_pc_type','lu'],['pc_asm_overlap',3],['ksp_max_it',100],['ksp_rtol',1e-30]];
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/solvers/soroptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/soroptions.m	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/soroptions.m	(revision 21988)
+@@ -10,7 +10,7 @@
+ 
+ %default sor options
+ sor.toolkit='petsc';
+-sor.mat_type=getfieldvalue(options,'mat_type','aij');
++sor.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ sor.ksp_type=getfieldvalue(options,'ksp_type','cg');
+ sor.pc_type=getfieldvalue(options,'pc_type','sor');
+ sor.pc_sor_omega=getfieldvalue(options,'pc_sor_omega',1.1);
+Index: ../trunk-jpl/src/m/solvers/iluasmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 21987)
++++ ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 21988)
+@@ -8,7 +8,7 @@
+ options=pairoptions(varargin{:});
+ iluasm=struct();
+ iluasm.toolkit='petsc';
+-iluasm.mat_type=getfieldvalue(options,'mat_type','aij');
++iluasm.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ iluasm.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+ iluasm.pc_type=getfieldvalue(options,'pc_type','asm');
+ iluasm.sub_pc_type=getfieldvalue(options,'sub_pc_type','ilu');
Index: /issm/oecreview/Archive/21724-22754/ISSM-21988-21989.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21988-21989.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21988-21989.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/m/miscellaneous/fielddisplay.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/fielddisplay.m	(revision 21988)
++++ ../trunk-jpl/src/m/miscellaneous/fielddisplay.m	(revision 21989)
+@@ -12,7 +12,7 @@
+ 
+ end %function
+ 
+-function parsedisplay(offset,name,field,comment) %{{{
++function parsedisplay(offset,name,field,comment) % {{{
+ 
+ 	%string
+ 	if ischar(field),
+@@ -26,15 +26,18 @@
+ 	%numeric
+ 	elseif isnumeric(field)
+ 
+-		%get size
+-		fieldsize=size(field);
+-
+ 		%double
+-		if max(fieldsize)==1,
++		if numel(field)==1,
+ 			displayunit(offset,name,num2str(field),comment),
+ 		%matrix
+ 		else
+-			displayunit(offset,name,['(' num2str(fieldsize(1)) 'x' num2str(fieldsize(2)) ')'],comment),
++			fieldsize=size(field);
++			string = '(';
++			for i=1:numel(fieldsize)
++				string = [string num2str(fieldsize(i)) 'x' ];
++			end
++			string = [string(1:end-1) ')'];
++			displayunit(offset,name,string,comment),
+ 		end
+ 
+ 	%logical
Index: /issm/oecreview/Archive/21724-22754/ISSM-21989-21990.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21989-21990.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21989-21990.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/solvers/iluasmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 21989)
++++ ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 21990)
+@@ -8,7 +8,7 @@
+ options=pairoptions(varargin{:});
+ iluasm=struct();
+ iluasm.toolkit='petsc';
+-iluasm.mat_type=getfieldvalue(options,'mat_type','mpiaij');
++iluasm.mat_type=getfieldvalue(options,'mat_type','aij');
+ iluasm.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+ iluasm.pc_type=getfieldvalue(options,'pc_type','asm');
+ iluasm.sub_pc_type=getfieldvalue(options,'sub_pc_type','ilu');
+Index: ../trunk-jpl/src/m/solvers/iluasmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/iluasmoptions.py	(revision 21989)
++++ ../trunk-jpl/src/m/solvers/iluasmoptions.py	(revision 21990)
+@@ -15,7 +15,7 @@
+ 
+ 	#default iluasm options
+ 	iluasm['toolkit']='petsc'
+-	iluasm['mat_type']=options.getfieldvalue('mat_type','mpiaij')
++	iluasm['mat_type']=options.getfieldvalue('mat_type','aij')
+ 	iluasm['ksp_type']=options.getfieldvalue('ksp_type','gmres')
+ 	iluasm['pc_type']=options.getfieldvalue('pc_type','asm')
+ 	iluasm['sub_pc_type']=options.getfieldvalue('sub_pc_type','ilu')
Index: /issm/oecreview/Archive/21724-22754/ISSM-21990-21991.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21990-21991.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21990-21991.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/plot/googlemaps.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/googlemaps.m	(revision 21990)
++++ ../trunk-jpl/src/m/plot/googlemaps.m	(revision 21991)
+@@ -3,6 +3,7 @@
+ %
+ %   Usage:
+ %       md = googlemaps(md)
++%       md = googlemaps(md,zoom)
+ %       md = googlemaps(md,ullat,ullon,lrlat,lrlon)
+ %       md = googlemaps(md,ullat,ullon,lrlat,lrlon,options)
+ %
+@@ -22,10 +23,14 @@
+ 	end
+ end
+ 
++if nargin==2,
++	options=addfielddefault(options,'zoom',ullat);
++end
++
+ if md.mesh.epsg==0,
+ 	error('md.mesh.epsg not defined');
+ end
+-if nargin==1,
++if nargin<3,
+ 	%Get xlim and ylim (used to extract Google maps image)
+ 	xlim=getfieldvalue(options,'xlim',[min(md.mesh.x) max(md.mesh.x)]);
+ 	ylim=getfieldvalue(options,'ylim',[min(md.mesh.y) max(md.mesh.y)]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-21991-21992.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21991-21992.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21991-21992.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/calvingminthickness.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingminthickness.m	(revision 21991)
++++ ../trunk-jpl/src/m/classes/calvingminthickness.m	(revision 21992)
+@@ -43,8 +43,8 @@
+ 			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1],'>=',0);
+ 		end % }}}
+ 		function disp(self) % {{{
+-			disp(sprintf('   Calving Pi parameters:'));
+-			fielddisplay(self,'coeff','proportionality coefficient in Pi model');
++			disp(sprintf('   Calving Minimum thickness:'));
++			fielddisplay(self,'min_thickness','minimum thickness below which no ice is allowed');
+ 			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
+ 
+ 		end % }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-21992-21993.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21992-21993.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21992-21993.diff	(revision 22755)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/m/plot/manualcb.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/manualcb.m	(revision 21992)
++++ ../trunk-jpl/src/m/plot/manualcb.m	(revision 21993)
+@@ -6,6 +6,7 @@
+ %
+ %   Available options:
+ %      - 'fontsize'    : default is 12
++%      - 'fontcolor'   : default is 'k'
+ %      - 'smallbars'   : bars next to each tick (default is false)
+ %      - 'position'    : colorbar position in normalized units
+ %      - 'orientation' : 'vertical' (default) or 'horizontal'
+@@ -32,6 +33,7 @@
+ 	error('only one of tick or ticksep can be specified');
+ end
+ fontsize  = getfieldvalue(options,'fontsize',12);
++fontcolor = getfieldvalue(options,'fontcolor','k');
+ smallbars = getfieldvalue(options,'smallbars',false);
+ 
+ %Colorbar position
+@@ -96,42 +98,42 @@
+ 		end
+ 	end
+ end
+-patch([0,0,1,1],[0,1,1,0],'k','FaceColor','none','Clipping','off')
++patch([0,0,1,1],[0,1,1,0],fontcolor,'FaceColor','none','Clipping','off','Edgecolor',fontcolor)
+ 
+ %Add ticks
+ if strcmpi(getfieldvalue(options,'orientation','vertical'),'vertical'),
+ 	%Use FOR LOOP otherwise numbers are not correcly centered
+ 	if getfieldvalue(options,'inverttickposition',0)==1,
+-		for i=1:length(ytick), text(-0.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','right','VerticalAlignment','middle','FontSize',fontsize); end
++		for i=1:length(ytick), text(-0.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','right','VerticalAlignment','middle','FontSize',fontsize,'Color',fontcolor); end
+ 	else
+-		for i=1:length(ytick), text(1.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','left','VerticalAlignment','middle','FontSize',fontsize); end
++		for i=1:length(ytick), text(1.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','left','VerticalAlignment','middle','FontSize',fontsize,'Color',fontcolor); end
+ 	end
+ 	if smallbars,
+ 		for i=1:numel(ztick)
+-			patch([0.8 1.0],[ytick(i) ytick(i)],'k')
+-			patch([0.0 0.2],[ytick(i) ytick(i)],'k')
++			patch([0.8 1.0],[ytick(i) ytick(i)],fontcolor,'Edgecolor',fontcolor)
++			patch([0.0 0.2],[ytick(i) ytick(i)],fontcolor,'Edgecolor',fontcolor)
+ 		end
+ 	end
+ else
+ 	%Use FOR LOOP otherwise numbers are not correcly centered
+-	for i=1:length(ytick), text(ytick(i),-0.5,num2str(ztick(i)),'HorizontalAlignment','center','VerticalAlignment','top','FontSize',fontsize); end
++	for i=1:length(ytick), text(ytick(i),-0.5,num2str(ztick(i)),'HorizontalAlignment','center','VerticalAlignment','top','FontSize',fontsize,'Color',fontcolor); end
+ 	if smallbars,
+ 		for i=1:numel(ztick)
+-			patch([ytick(i) ytick(i)],[0.8 1.0],[ytick(i) ytick(i)],'k')
+-			patch([ytick(i) ytick(i)],[0.0 0.2],[ytick(i) ytick(i)],'k')
++			patch([ytick(i) ytick(i)],[0.8 1.0],[ytick(i) ytick(i)],fontcolor,'Edgecolor',fontcolor)
++			patch([ytick(i) ytick(i)],[0.0 0.2],[ytick(i) ytick(i)],fontcolor,'Edgecolor',fontcolor)
+ 		end
+ 	end
+ end
+ 
+ if exist(options,'title'),
+-	title(getfieldvalue(options,'title'),'FontSize',getfieldvalue(options,'titlefontsize',fontsize));
++	title(getfieldvalue(options,'title'),'FontSize',getfieldvalue(options,'titlefontsize',fontsize),'Color',fontcolor);
+ end
+ if exist(options,'ylabel'),
+ 	if strcmpi(getfieldvalue(options,'orientation','vertical'),'horizontal'),
+-		th=title(getfieldvalue(options,'title'),'FontSize',fontsize);
++		th=title(getfieldvalue(options,'title'),'FontSize',fontsize,'Color',fontcolor);
+ 		set(th,'Position',[ytick(end)+0.075,-0.3]);
+ 	else
+-		ylabel(getfieldvalue(options,'ylabel'),'FontSize',fontsize);
++		ylabel(getfieldvalue(options,'ylabel'),'FontSize',fontsize,'Color',fontcolor);
+ 	end
+ end
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-21993-21994.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21993-21994.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21993-21994.diff	(revision 22755)
@@ -0,0 +1,102 @@
+Index: ../trunk-jpl/configs/config-linux64-stallo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-stallo.sh	(revision 21993)
++++ ../trunk-jpl/configs/config-linux64-stallo.sh	(nonexistent)
+@@ -1,29 +0,0 @@
+-#!/bin/sh
+-
+-#Stallo configuration script
+-#this uses system stuff, you need to load the following:
+-# module load Automake/1.15-intel-2016a
+-# module load libtool/2.4.6-intel-2016a
+-# module load CMake/3.5.2-intel-2016a
+-# module load intel/2016a
+-# module load ParMETIS/4.0.3-intel-2016a
+-# module load MUMPS/5.1.1-intel-2016a-parmetis
+-# module load PETSc/3.7.2-intel-2016a-Python-2.7.11
+-# module load FFTW/3.3.4-intel-2016a
+-# module load OpenSSL/1.0.1s-intel-2016a
+-
+-
+-./configure \
+-    --prefix=$ISSM_DIR \
+-    --without-kriging \
+-    --with-wrappers=no \
+-    --with-petsc-dir="/global/hds/software/cpu/eb3/PETSc/3.7.2-intel-2016a-Python-2.7.11" \
+-    --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-    --with-mpi-include="/global/hds/software/cpu/eb3/impi/5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25/include64" \
+-    --with-mpi-libflags="-L/global/hds/software/cpu/eb3/impi/5.1.2.150-iccifort-2016.1.150-GCC-4.9.3-2.25/lib64 -lmpich -lmpichf90 -lmpichcxx -lmpl" \
+-    --with-metis-dir="/global/hds/software/cpu/eb3/ParMETIS/4.0.3-intel-2016a/include" \
+-    --with-mumps-dir="/global/hds/software/cpu/eb3/MUMPS/5.1.1-intel-2016a-parmetis" \
+-    --with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
+-    --with-hypre-dir="/global/hds/software/cpu/eb3/Hypre/2.11.1-intel-2016a" \
+-    --with-mkl-libflags="-L/global/hds/software/cpu/eb3/imkl/11.3.1.150-iimpi-8.1.5-GCC-4.9.3-2.25/mkl/lib/intel64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lmkl_scalapack_lp64 -L/global/hds/software/cpu/eb3/FFTW/3.3.4-intel-2016a/lib/ -lfftw3_mpi -L/global/hds/software/cpu/eb3/SuiteSparse/4.5.3-intel-2016a-ParMETIS-4.0.3/lib -lklu -lamd -lamd -lbtf -lsuitesparseconfig -lumfpack -lcholmod -L/global/hds/software/cpu/eb3/ifort/2016.1.150-GCC-4.9.3-2.25/lib/intel64 -lifcore -lifport -L/global/hds/software/cpu/eb3/OpenSSL/1.0.1s-intel-2016a/lib -lssl -L/global/hds/software/cpu/eb3/SCOTCH/6.0.4-intel-2016a/lib -lesmumps -lptesmumps  -lptscotch  -lptscotcherr  -lptscotcherrexit -lscotch -lscotcherr -lscotcherrexit -lscotch_group" \
+-    --enable-development
+
+Property changes on: ../trunk-jpl/configs/config-linux64-stallo.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-vilje.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-vilje.sh	(revision 21993)
++++ ../trunk-jpl/configs/config-linux64-vilje.sh	(nonexistent)
+@@ -1,23 +0,0 @@
+-#!/bin/sh
+-#Vilje configuration script
+-#this uses system stuff, you need to load the following:
+-#module load intelcomp/15.0.1 mpt/2.10 petsc/3.5.3d
+-#module load parmetis/4.0.3 mumps/5.0.0
+-#module load automake
+-
+-./configure \
+-    --prefix=$ISSM_DIR \
+-    --without-kriging \
+-    --with-wrappers=no \
+-    --with-petsc-dir="/sw/sdev/Modules/petsc/petsc-3.5.3" \
+-    --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-    --with-mpi-include="/sw/sgi/mpt/mpt-2.10/include/"  \
+-    --with-mpi-libflags="-L/sw/sgi/mpt/mpt-2.10/lib -lmpi -lmpi++" \
+-    --with-metis-dir="/sw/sdev/Modules/parmetis/parmetis-4.0.3/include" \
+-    --with-mumps-dir="/sw/sdev/Modules/mumps/mumps-5.0.0/lib" \
+-    --with-cxxoptflags="-O2 -xAVX" \
+-    --with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
+-    --enable-development \
+-    CC=/sw/sdev/Modules/intelcomp/psxe_2015/bin/icc \
+-    CXX=/sw/sdev/Modules/intelcomp/psxe_2015/bin/icpc \
+-    F77=/sw/sdev/Modules/intelcomp/psxe_2015/bin/ifort
+
+Property changes on: ../trunk-jpl/configs/config-linux64-vilje.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-hexagon.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-hexagon.sh	(revision 21993)
++++ ../trunk-jpl/configs/config-linux64-hexagon.sh	(nonexistent)
+@@ -1,14 +0,0 @@
+-#!/bin/sh
+-
+-#need to swap to GNU environment
+-#need to change the petsc libflag to lcraypetsc...
+-./configure \
+-		--prefix=/work/bfl022/issm_install \
+-		--with-m1qn3-dir=$ISSM_DIR/externalpackages/m1qn3/install \
+-		--with-petsc-dir=$PETSC_DIR \
+-		--with-metis-dir=$CRAY_TPSL_PREFIX_DIR \
+-		--with-mumps-dir=$CRAY_TPSL_PREFIX_DIR \
+-		--with-mpi-include="$CRAY_MPICH2_DIR/include" \
+-		--with-mpi-libflags="-L$CRAY_MPICH2_DIR/lib -lmpich -lmpl -lfmpich -lmpichcxx -lmpichf90" \
+-		--with-gsl-dir="/work/apps/gsl/1.16-gnu/" \
+-		--enable-development
+
+Property changes on: ../trunk-jpl/configs/config-linux64-hexagon.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21994-21995.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21994-21995.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21994-21995.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/m/classes/levelset.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/levelset.m	(revision 21994)
++++ ../trunk-jpl/src/m/classes/levelset.m	(revision 21995)
+@@ -35,8 +35,8 @@
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+-			%stabilization = 2 by default
+-			self.stabilization    = 2;
++			%stabilization = 1 by default
++			self.stabilization    = 1;
+ 			self.reinit_frequency = 5;
+ 			self.calving_max      = 3000.;
+ 
+Index: ../trunk-jpl/src/m/classes/levelset.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/levelset.py	(revision 21994)
++++ ../trunk-jpl/src/m/classes/levelset.py	(revision 21995)
+@@ -37,8 +37,8 @@
+ 	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 
+-		#stabilization = 2 by default
+-		self.stabilization = 2
++		#stabilization = 1 by default
++		self.stabilization = 1
+ 		self.reinit_frequency = 5
+ 		self.calving_max      = 3000
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-21995-21996.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21995-21996.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21995-21996.diff	(revision 22755)
@@ -0,0 +1,559 @@
+Index: ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh	(nonexistent)
+@@ -1,22 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-wrappers=no \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
+-	--with-adolc-dir="$ISSM_DIR/externalpackages/adolc/install"\
+-	--with-ampi-dir="$ISSM_DIR/externalpackages/adjoinablempi/install"\
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-graphics-lib="/usr/lib64/libX11.so" \
+-	--with-cxxoptflags=" -O3 -march=corei7-avx" \
+-	--with-vendor="intel-pleiades-gcc"  \
+-	CFLAGS="-O3 -march=corei7-avx" \
+-	CXXFLAGS="-O3 -march=corei7-avx" \
+-	FFLAGS="-O3 -march=corei7-avx" 
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(nonexistent)
+@@ -1,14 +0,0 @@
+-#!/bin/sh
+-
+-./configure \
+-   --prefix=$ISSM_DIR\
+-   --libdir=$ISSM_DIR/../mobile/android/ISSM_APP/libs/armeabi\
+-   --build="i386-apple-darwin10.8.0"\
+-   --host="arm-linux-androideabi"\
+-   --enable-shared\
+-   --with-android=jni\
+-   --with-android-ndk=$ISSM_DIR/externalpackages/android/android-ndk/install\
+-   --without-fortran\
+-   --without-wrappers\
+-   --without-kriging\
+-   --with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install
+
+Property changes on: ../trunk-jpl/configs/config-arm-linux.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-cloud.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-cloud.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-cloud.sh	(nonexistent)
+@@ -1,18 +0,0 @@
+-#!/bin/sh
+-
+-#External packages versions:
+-#petsc 3.1 or 3.2
+-#mpich 1.4
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --without-wrappers \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3 \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+- --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-cxxoptflags=" -O2 -fpermissive" 
+
+Property changes on: ../trunk-jpl/configs/config-linux64-cloud.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-murdo-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(nonexistent)
+@@ -1,10 +0,0 @@
+-#!/bin/sh
+-
+-./configure \
+-	 --prefix=$ISSM_DIR \
+-	 --without-kriging \
+-	 --without-kml \
+-	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+-	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install
+
+Property changes on: ../trunk-jpl/configs/config-linux64-murdo-ad.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh	(nonexistent)
+@@ -1,19 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-wrappers=no \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-mpi-include="/nasa/sgi/mpt/2.06rp16/include" \
+-	--with-mpi-libflags="-L/nasa/sgi/mpt/2.06rp16/ -lmpi -lmpi++" \
+-	--with-adolc-dir="$ISSM_DIR/externalpackages/adolc/install"\
+-	--with-ampi-dir="$ISSM_DIR/externalpackages/adjoinablempi/install"\
+-	--with-mkl-dir="/nasa/intel/Compiler/2013.1.117/composer_xe_2013.1.117/mkl/lib/intel64" \
+-	--with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install" \
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-graphics-lib="/usr/lib64/libX11.so" \
+-	--with-cxxoptflags="-O3" \
+-	--with-vendor="intel-pleiades"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-macosx64-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-ad.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-macosx64-ad.sh	(nonexistent)
+@@ -1,18 +0,0 @@
+-#!/bin/sh
+-
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-wrappers\
+-	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install\
+-	--without-thermal \
+-	--without-control \
+-	--without-hydrology \
+-	--without-stressbalance \
+-	--without-balanced \
+-	--without-responses \
+-	--without-slope \
+-	--without-rifts \
+-	--without-steadystate \
+-	--without-transient \
+-	--without-3d \
+-	--without-groundingline
+
+Property changes on: ../trunk-jpl/configs/config-macosx64-ad.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-intel2015.0.090-mpt.2.11r13.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-intel2015.0.090-mpt.2.11r13.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-intel2015.0.090-mpt.2.11r13.sh	(nonexistent)
+@@ -1,15 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-wrappers=no \
+-	--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-mpi-include="/nasa/sgi/mpt/2.11r13/include" \
+-	--with-mpi-libflags="-L/nasa/sgi/mpt/2.11r13/ -lmpi" \
+-	--with-mkl-dir="/nasa/intel/Compiler/2015.0.090/composer_xe_2015.0.090/mkl/" \
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-cxxoptflags="-O3 -axAVX" \
+-	--with-vendor="intel-pleiades"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-intel2015.0.090-mpt.2.11r13.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-discover-intel11.sh
+===================================================================
+--- ../trunk-jpl/configs/config-discover-intel11.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-discover-intel11.sh	(nonexistent)
+@@ -1,24 +0,0 @@
+-#!/bin/csh
+-
+-#PETSc 3.2
+-#MPI /usr/local/intel/mpi/4.0.3.008/lib64/
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+- --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mkl-dir="/usr/local/intel/mkl/10.1.2.024/lib/64/" \
+- --with-mpi-include="/usr/local/intel/mpi/4.0.3.008/include64/" \
+- --with-mpi-libflags="-L/usr/local/intel/mpi/4.0.3.008/lib64/ -lmpi -lmpiif" \
+- --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+- --with-scalapack-dir="/usr/local/intel/mkl/10.1.2.024/lib/64/" \
+- --with-blas-lapack-dir="/usr/local/intel/mkl/10.1.2.024/lib/64/" \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-O3 -xS -DMPICH_IGNORE_CXX_SEEK" \
+- --with-vendor=intel-discover
+-
+
+Property changes on: ../trunk-jpl/configs/config-discover-intel11.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-discover-intel13.sh
+===================================================================
+--- ../trunk-jpl/configs/config-discover-intel13.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-discover-intel13.sh	(nonexistent)
+@@ -1,23 +0,0 @@
+-#!/bin/csh
+-
+-#PETSc 3.2
+-#MPI /usr/local/other/SLES11.1/mvapich2/1.8.1/intel-13.1.2.183/lib
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mkl-dir="/usr/local/intel/Composer/composer_xe_2013.3.163/mkl/" \
+- --with-mpi-include="/usr/local/other/SLES11.1/mvapich2/1.8.1/intel-13.1.2.183/include" \
+- --with-mpi-libflags="-L/usr/local/other/SLES11.1/mvapich2/1.8.1/intel-13.1.2.183/lib -lmpich -lopa -lmpl -lfmpich -lmpichcxx -lmpichf90 -lpthread -lrdmacm -libverbs -libumad -lrt -lnuma" \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-blacs-dir="/usr/local/intel/Composer/composer_xe_2013.3.163/mkl/" \
+- --with-blas-lapack-dir="/usr/local/intel/Composer/composer_xe_2013.3.163/mkl/" \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-cxxoptflags="-O3 -xS -DMPICH_IGNORE_CXX_SEEK" \
+- --with-vendor=intel-discover
+-
+- # --with-esmf-dir=$ESMF_INSTALL_DIRECTORY \
+-
+
+Property changes on: ../trunk-jpl/configs/config-discover-intel13.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh	(nonexistent)
+@@ -1,17 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
+-	--with-mpi-libflags="-L/nasa/mvapich2/1.6.sles11/gcc/lib -lmpich -lopa -lpthread -lrdmacm -libverbs -libumad -ldl -lrt" \
+-	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-graphics-lib="/usr/lib64/libX11.so" \
+-	--with-cxxoptflags="-g -O2" \
+-	--with-vendor="intel-pleiades-gcc"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh	(nonexistent)
+@@ -1,16 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-mpi-include="/nasa/mvapich2/1.4.1/gcc.sles11/include"\
+-	--with-mpi-libflags=" -L/nasa/mvapich2/1.4.1/gcc.sles11/lib -lmpichcxx -lmpich -lpthread -lrdmacm -libverbs -libumad -lrt" \
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-graphics-lib="/usr/lib64/libX11.so" \
+-	--with-cxxoptflags="-g -O2" \
+-	--with-vendor="intel-pleiades-gcc"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-pleiades-petscdev.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petscdev.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-pleiades-petscdev.sh	(nonexistent)
+@@ -1,23 +0,0 @@
+-#!/bin/csh
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-wrappers=no \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3 \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+- --with-mpi-include=/nasa/sgi/mpt/2.04/include \
+- --with-mpi-libflags="-L/nasa/sgi/mpt/2.04/lib/ -lmpi -lpthread -lgfortran" \
+- --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+- --with-mkl-dir=/nasa/intel/mkl/10.0.011/lib/64/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-spai-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-hypre-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-superlu-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-spooles-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-pastix-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-O3" \
+- --with-vendor=intel-pleiades
+
+Property changes on: ../trunk-jpl/configs/config-pleiades-petscdev.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-cyclone.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-cyclone.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-cyclone.sh	(nonexistent)
+@@ -1,22 +0,0 @@
+-#!/bin/sh
+-
+-#Default configuration script
+-#automake 1.14
+-#petsc 3.6
+-#mpich 3.0
+-
+-./configure \
+-		--prefix=$ISSM_DIR \
+-		--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-		--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-		--with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
+-		--with-mpi-include="$ISSM_DIR/externalpackages/mpich/install/include"  \
+-		--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl" \
+-		--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-		--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-		--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+-		--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+-		--with-fortran-lib="-L/opt/intel/intelcompiler-12.04/composerxe-2011.4.191/compiler/lib/intel64 -lifport -lifcore -limf -lsvml -lintlc "\
+-		--enable-development \
+-		CC=mpicc \
+-		CXX=mpic++
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/configs/config-linux64-cyclone.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-macosx64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-macosx64.sh	(nonexistent)
+@@ -1,19 +0,0 @@
+-#!/bin/sh
+-
+-#petsc 3.4
+-#mpich 3.0.4
+-
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
+-	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-fortran-lib="/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/libgfortran.a" \
+-	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+-	--with-numthreads=8
+
+Property changes on: ../trunk-jpl/configs/config-macosx64.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-macosx64-dakota.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-dakota.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-macosx64-dakota.sh	(nonexistent)
+@@ -1,26 +0,0 @@
+-#!/bin/sh
+-
+-#petsc 3.6
+-#mpich 3.0 yosemite
+-#boost 1.55 yosemite
+-#dakota 5.3.1 yosemite
+-export F77='/usr/local/gfortran/bin/gfortran'
+-export CC=/usr/local/gfortran/bin/gcc
+-export CXX=/usr/local/gfortran/bin/g++
+-
+-./configure \
+-   --prefix=$ISSM_DIR \
+-	--with-matlab-dir=$MATLAB_DIR \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+-	--with-boost-dir=$ISSM_DIR/externalpackages/boost/install \
+-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
+-	--with-m1qn3-dir=$ISSM_DIR/externalpackages/m1qn3/install \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-numthreads=8
+-
+
+Property changes on: ../trunk-jpl/configs/config-macosx64-dakota.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-skylla.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-skylla.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-skylla.sh	(nonexistent)
+@@ -1,22 +0,0 @@
+-#!/bin/sh
+-
+-#External packages versions:
+-#petsc 3.4
+-#mpich 3.0
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-matlab-dir=$ISSM_DIR/externalpackages/matlab/install \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+- --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install/ \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-fortran-lib="-L/usr/lib/gcc/x86_64-redhat-linux/4.1.2/ -lgfortran" \
+- --with-graphics-lib="/usr/lib64/libX11.so.6" \
+- --with-cxxoptflags="-g -O2" \
+- --with-numthreads=8
+
+Property changes on: ../trunk-jpl/configs/config-linux64-skylla.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-acenet.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-acenet.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-acenet.sh	(nonexistent)
+@@ -1,17 +0,0 @@
+-#!/bin/bash
+-
+-./configure \
+- --prefix=/home/klemorza/issm/trunk-jpl \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/petsc/install
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mpi-include=$OPENMPI/include  \
+- --with-mpi-libflags="-L$OPENMPI/lib -lmpi" \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-cxxoptflags="-O2" \
+- --with-numthreads=32 \
+- --with-serial=no \
+- --with-modules=no \
+- --enable-debugging CC=mpicc CXX=mpiCC F77=mpif77
+
+Property changes on: ../trunk-jpl/configs/config-linux64-acenet.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-intel2012.0.032-mpt.2.06rp16.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-intel2012.0.032-mpt.2.06rp16.sh	(revision 21995)
++++ ../trunk-jpl/configs/config-linux64-pleiades-intel2012.0.032-mpt.2.06rp16.sh	(nonexistent)
+@@ -1,17 +0,0 @@
+-#!/bin/csh
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--without-kriging \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-mpi-include="/nasa/sgi/mpt/2.06rp16/include" \
+-	--with-mpi-libflags="-L/nasa/sgi/mpt/2.06rp16/ -lmpi" \
+-	--with-mkl-dir="/nasa/intel/Compiler/2012.0.032/composer_xe_2011_sp1/mkl/lib/intel64"\
+-	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-graphics-lib="/usr/lib64/libX11.so" \
+-	--with-cxxoptflags="-g -O2" \
+-	--with-vendor="intel-pleiades"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-intel2012.0.032-mpt.2.06rp16.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-21996-21997.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21996-21997.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21996-21997.diff	(revision 22755)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/test/MITgcm/install.sh
+===================================================================
+--- ../trunk-jpl/test/MITgcm/install.sh	(revision 21996)
++++ ../trunk-jpl/test/MITgcm/install.sh	(revision 21997)
+@@ -1,7 +1,7 @@
+ #!/bin/bash
+ 
+ #Some cleanup
+-\rm -rf install
++rm -rf install
+ 
+ #Add cvs repository
+ export CVSROOT=':pserver:cvsanon@mitgcm.org:/u/gcmpack'
+Index: ../trunk-jpl/test/NightlyRun/test801.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test801.m	(revision 21996)
++++ ../trunk-jpl/test/NightlyRun/test801.m	(revision 21997)
+@@ -3,6 +3,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/ValleyGlacierShelf.par');
+ md=setflowequation(md,'SSA','all');
++md.levelset.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %Transient;
+Index: ../trunk-jpl/test/NightlyRun/test801.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test801.py	(revision 21996)
++++ ../trunk-jpl/test/NightlyRun/test801.py	(revision 21997)
+@@ -11,6 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/ValleyGlacierShelf.py')
++md.levelset.stabilization=2
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test805.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test805.m	(revision 21996)
++++ ../trunk-jpl/test/NightlyRun/test805.m	(revision 21997)
+@@ -23,6 +23,7 @@
+ 
+ md.calving.calvingrate=1000.*ones(md.mesh.numberofvertices,1);
+ md.calving.meltingrate=zeros(md.mesh.numberofvertices,1);
++md.levelset.stabilization=2;
+ 
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test805.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test805.py	(revision 21996)
++++ ../trunk-jpl/test/NightlyRun/test805.py	(revision 21997)
+@@ -32,6 +32,7 @@
+ 
+ md.calving.calvingrate=1000.*np.ones((md.mesh.numberofvertices))
+ md.calving.meltingrate=np.zeros((md.mesh.numberofvertices))
++md.levelset.stabilization=2
+ 
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive804.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive806.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive807.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21997-21998.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21997-21998.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21997-21998.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive808.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-21998-21999.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21998-21999.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21998-21999.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test808.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test808.m	(revision 21998)
++++ ../trunk-jpl/test/NightlyRun/test808.m	(revision 21999)
+@@ -38,9 +38,9 @@
+ 	'Vx2','Vy2','Vel2','Pressure2','Thickness2','Surface2','MaskIceLevelset2'...
+ 	'Vx3','Vy3','Vel3','Pressure3','Thickness3','Surface3','MaskIceLevelset3'};
+ field_tolerances={...
+-	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,2e-9,...
+-	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,2e-9,...
+-	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,2e-9};
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9,...
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9,...
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9};
+ field_values={...
+ 	md.results.TransientSolution(1).Vx,...
+ 	md.results.TransientSolution(1).Vy,...
Index: /issm/oecreview/Archive/21724-22754/ISSM-21999-22000.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-21999-22000.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-21999-22000.diff	(revision 22755)
@@ -0,0 +1,316 @@
+Index: ../trunk-jpl/src/c/classes/Options/GenericOption.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 21999)
++++ ../trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 22000)
+@@ -101,7 +101,8 @@
+ 		};/*}}}*/
+ };
+ 
+-#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_) 
++/*We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization*/
+ template <> inline void GenericOption<IssmPDouble*>::Get(IssmPDouble** pvalue){ /*{{{*/
+ 
+ 	/*Copy vector*/
+Index: ../trunk-jpl/src/c/classes/Options/Options.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/Options.cpp	(revision 21999)
++++ ../trunk-jpl/src/c/classes/Options/Options.cpp	(revision 22000)
+@@ -78,7 +78,7 @@
+ 		if(!option){
+ 			_printf_("The dynamic_cast from Object* to Option* is failing.\n");
+ 			_printf_("\n");
+-			_printf_("A quick qorkaround consists of using a C-like cast\n");
++			_printf_("A quick workaround consists of using a C-like cast\n");
+ 			_printf_("\n");
+ 			_printf_("Open Options.cpp and change the dynamic_cast in Options::GetOption by a C-like cast\n");
+ 			//_printf_("Open Options.h and replace the dynamic_cast of all the Get functions to C-like cats\n");
+@@ -93,23 +93,7 @@
+ 				return option;
+ 			}
+ 			else{
+-				/*If the object is a Cell, recursive call to its options*/ 
+-				if(option->ObjectEnum()==OptionCellEnum){
+-					GenericOption<Options*>* celloption=(GenericOption<Options*>*)option;
+-					return celloption->value->GetOption(name);
+-				}
+-				/*If the object is a Struct loop over its size and recursive call*/
+-				else if(option->ObjectEnum()==OptionStructEnum){
+-					for(int i=0;i<option->NumEl();i++){
+-						GenericOption<Options**>* structoption=(GenericOption<Options**>*)option;
+-						_assert_(structoption->value[i]);
+-						return structoption->value[i]->GetOption(name);
+-					}
+-				}
+-				/*Else: not supported*/
+-				else{
+-					_error_("Cannot recover field \"" << name << "\" for an option of type " << EnumToStringx(option->ObjectEnum()));
+-				}
++				_error_("Cannot recover field \"" << name << "\" for an option of type " << EnumToStringx(option->ObjectEnum()));
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 21999)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22000)
+@@ -109,6 +109,9 @@
+ 		#ifdef _HAVE_ESA_
+ 		case EsaAnalysisEnum : return new EsaAnalysis();
+ 		#endif
++		#ifdef _HAVE_LOVE_
++		case LoveAnalysisEnum : return new LoveAnalysis();
++		#endif
+ 		#ifdef _HAVE_LEVELSET_
+ 		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
+ 		#endif
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 21999)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22000)
+@@ -952,8 +952,6 @@
+ 	/*Options{{{*/
+ 	OptionEnum,
+ 	GenericOptionEnum,
+-	OptionCellEnum,
+-	OptionStructEnum,
+ 	/*}}}*/
+ 	/*Solutions and Analyses{{{ */
+ 	AdjointBalancethicknessAnalysisEnum,
+@@ -1006,7 +1004,6 @@
+ 	EsaAnalysisEnum,
+ 	LoveSolutionEnum,
+ 	LoveAnalysisEnum,
+-	MeshdeformationAnalysisEnum,
+ 	LevelsetAnalysisEnum,
+ 	ExtrapolationAnalysisEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 21999)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22000)
+@@ -919,8 +919,6 @@
+ 		case VertexSIdEnum : return "VertexSId";
+ 		case OptionEnum : return "Option";
+ 		case GenericOptionEnum : return "GenericOption";
+-		case OptionCellEnum : return "OptionCell";
+-		case OptionStructEnum : return "OptionStruct";
+ 		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
+ 		case AdjointBalancethickness2AnalysisEnum : return "AdjointBalancethickness2Analysis";
+ 		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
+@@ -971,7 +969,6 @@
+ 		case EsaAnalysisEnum : return "EsaAnalysis";
+ 		case LoveSolutionEnum : return "LoveSolution";
+ 		case LoveAnalysisEnum : return "LoveAnalysis";
+-		case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
+ 		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
+ 		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+ 		case ApproximationEnum : return "Approximation";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 21999)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22000)
+@@ -940,8 +940,6 @@
+ 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+-	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+-	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+@@ -992,18 +990,17 @@
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+ 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+ 	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+-	      else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
++	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
++	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
++	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+-	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+-	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+-	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
++	      if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 21999)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22000)
+@@ -1092,98 +1092,6 @@
+ 
+ 	return(ochar);
+ }/*}}}*/
+-GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	char           namei[161];
+-	Option*                   option      = NULL;
+-	GenericOption<Options**>  *ostruct    = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *structi;
+-	mwIndex        sindex;
+-
+-	/*check and parse the name  */
+-	ostruct=new GenericOption<Options**>();
+-	ostruct->name =xNew<char>(strlen(name)+1);
+-	memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"struct")){
+-		_error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	ostruct->numel=mxGetNumberOfElements(prhs[0]);
+-	ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt           =mxGetDimensions(prhs[0]);
+-	ostruct->size =xNew<int>(ostruct->ndims);
+-	for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
+-	if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
+-
+-	/*loop through and process each element of the struct array  */
+-	for (sindex=0; sindex<ostruct->numel; sindex++) {
+-		ostruct->value[sindex]=new Options;
+-
+-		/*loop through and process each field for the element  */
+-		for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
+-			sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
+-			structi=mxGetFieldByNumber(prhs[0],sindex,i);
+-
+-			option=(Option*)OptionParse(namei,&structi);
+-			ostruct->value[sindex]->AddObject((Object*)option);
+-			option=NULL;
+-		}
+-	}
+-
+-	return(ostruct);
+-}/*}}}*/
+-GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	int           *dims;
+-	char           namei[161];
+-	char           cstr[81];
+-	GenericOption<Options*> *ocell      = NULL;
+-	Option        *option     = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *celli;
+-	mwIndex        cindex;
+-
+-	/*check and parse the name  */
+-	ocell=new GenericOption<Options*>();
+-	ocell->name =xNew<char>(strlen(name)+1);
+-	memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"cell")){
+-		_error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-
+-	ocell->numel=mxGetNumberOfElements(prhs[0]);
+-	ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt         =mxGetDimensions(prhs[0]);
+-	ocell->size =xNew<int>(ocell->ndims);
+-	for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
+-	ocell->value=new Options;
+-
+-	/*loop through and process each element of the cell array  */
+-	dims=xNew<int>(ocell->ndims);
+-	for (cindex=0; cindex<ocell->numel; cindex++) {
+-		ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
+-		StringFromDims(cstr,dims,ocell->ndims);
+-		#ifdef _INTEL_WIN_
+-			_snprintf(namei,161,"%s%s",name,cstr);
+-		#else
+-			snprintf(namei,161,"%s%s",name,cstr);
+-		#endif
+-		celli=mxGetCell(prhs[0],cindex);
+-
+-		option=(Option*)OptionParse(namei,&celli);
+-		ocell->value->AddObject((Object*)option);
+-		option=NULL;
+-	}
+-	xDelete<int>(dims);
+-
+-	return(ocell);
+-}/*}}}*/
+ Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
+ 
+ 	Option  *option = NULL;
+@@ -1198,17 +1106,8 @@
+ 	 option=(Option*)OptionLogicalParse(name,prhs);
+ 	else if(mxIsClass(prhs[0],"char"))
+ 	 option=(Option*)OptionCharParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"struct"))
+-	 option=(Option*)OptionStructParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"cell"))
+-	 option=(Option*)OptionCellParse(name,prhs);
+ 	else {
+-		_printf0_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".\n");
+-		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
+-			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
+-			mxDestroyArray(lhs[0]);
+-		}
+-		else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
++		_error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
+ 	}
+ 
+ 	return(option);
+Index: ../trunk-jpl/src/wrappers/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 21999)
++++ ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 22000)
+@@ -58,8 +58,6 @@
+ GenericOption<double*>*   OptionDoubleArrayParse( char* name, const mxArray* prhs[]);
+ GenericOption<bool*>*     OptionLogicalParse( char* name, const mxArray* prhs[]);
+ GenericOption<char*>*     OptionCharParse( char* name, const mxArray* prhs[]);
+-GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]);
+-GenericOption<Options*>*  OptionCellParse( char* name, const mxArray* prhs[]);
+ 
+ mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
+ void SetStructureField(mxArray* dataref,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
+Index: ../trunk-jpl/m4/analyses.m4
+===================================================================
+--- ../trunk-jpl/m4/analyses.m4	(revision 21999)
++++ ../trunk-jpl/m4/analyses.m4	(revision 22000)
+@@ -867,32 +867,6 @@
+ AC_MSG_RESULT($HAVE_LOVE)
+ 
+ dnl }}}
+-dnl with-Meshdeformation{{{
+-
+-AC_ARG_WITH([Meshdeformation],
+-
+-	AS_HELP_STRING([--with-Meshdeformation = YES], [compile with Meshdeformation capabilities (default is yes)]),
+-
+-	[MESHDEFORMATION=$withval],[MESHDEFORMATION=yes])
+-
+-AC_MSG_CHECKING(for Meshdeformation capability compilation)
+-
+-
+-HAVE_MESHDEFORMATION=no 
+-
+-if test "x$MESHDEFORMATION" = "xyes"; then
+-
+-	HAVE_MESHDEFORMATION=yes
+-
+-	AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with Meshdeformation capability])
+-
+-fi
+-
+-AM_CONDITIONAL([MESHDEFORMATION], [test x$HAVE_MESHDEFORMATION = xyes])
+-
+-AC_MSG_RESULT($HAVE_MESHDEFORMATION)
+-
+-dnl }}}
+ dnl with-Levelset{{{
+ 
+ AC_ARG_WITH([Levelset],
Index: /issm/oecreview/Archive/21724-22754/ISSM-22000-22001.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22000-22001.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22000-22001.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22000)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22001)
+@@ -110,7 +110,7 @@
+ 		case EsaAnalysisEnum : return new EsaAnalysis();
+ 		#endif
+ 		#ifdef _HAVE_LOVE_
+-		case LoveAnalysisEnum : return new LoveAnalysis();
++		//case LoveAnalysisEnum : return new LoveAnalysis();
+ 		#endif
+ 		#ifdef _HAVE_LEVELSET_
+ 		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22001-22002.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22001-22002.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22001-22002.diff	(revision 22755)
@@ -0,0 +1,109 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh	(revision 22001)
++++ ../trunk-jpl/externalpackages/petsc/install-3.6-discover.sh	(revision 22002)
+@@ -20,9 +20,9 @@
+ ./config/configure.py \
+ 	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
+ 	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+-	--with-blas-lapack-dir="/usr/local/intel/Composer/composer_xe_2015.0.090/mkl/" \
+-	--with-mpi-lib="/usr/local/intel/mpi/4.0.3.008/lib64/libmpi.so" \
+-	--with-mpi-include="/usr/local/intel/mpi/4.0.3.008/intel64/include/" \
++	--with-blas-lapack-dir="/usr/local/intel/2016/compilers_and_libraries_2016.2.181/linux/mkl/" \
++	--with-mpi-lib="/usr/local/intel/2016/impi/5.1.3.181/lib64/libmpi.so" \
++	--with-mpi-include="/usr/local/intel/2016/impi/5.1.3.181/include64/" \
+ 	--known-mpi-shared-libraries=1 \
+ 	--with-debugging=0 \
+ 	--with-valgrind=0 \
+@@ -48,8 +48,8 @@
+ #SBATCH -e petscinstall.errlog
+ 
+ . /usr/share/modules/init/bash
+-module load comp/intel-15.0.0.090
+-module load mpi/impi-4.0.3.008
++module load comp/intel-16.0.2.181
++module load mpi/impi-5.1.3.181
+ module load other/cmake-3.8.2
+ 
+ export PATH="$PATH:."
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.discover16.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.discover16.patch	(nonexistent)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.discover16.patch	(revision 22002)
+@@ -0,0 +1,6 @@
++156c153,155
++< # TODO: Can't this be integrated into the following logic?
++---
++> # TODO: Can't this be integrated into the following logic?
++> set(BLAS_LIBS "-L/usr/local/intel/2016/compilers_and_libraries_2016.2.181/linux/mkl/lib/intel64/ -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -L/usr/lib64/ -lpthread -lm")
++> set(LAPACK_LIBS "-L/usr/local/intel/2016/compilers_and_libraries_2016.2.181/linux/mkl/lib/intel64/ -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -L/usr/lib64/ -lpthread -lm")
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(revision 22002)
+@@ -0,0 +1,58 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf Dakota
++rm -rf src 
++rm -rf build 
++rm -rf install 
++mkdir src build install 
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/dakota-6.2-public.src.tar.gz' 'dakota-6.2-public-src.tar.gz'
++
++#Untar 
++tar -zxvf dakota-6.2-public-src.tar.gz
++
++#Move Dakota to src directory
++mv dakota-6.2.0.src/* src
++rm -rf dakota-6.2.0.src
++
++#Set up Dakota cmake variables and config
++export DAK_SRC=$ISSM_DIR/externalpackages/dakota/src
++export DAK_BUILD=$ISSM_DIR/externalpackages/dakota/build
++export MPIHOME=$ISSM_DIR/externalpackages/mpich/install
++cp $DAK_SRC/cmake/BuildDakotaTemplate.cmake $DAK_SRC/cmake/BuildDakotaCustom.cmake
++patch $DAK_SRC/cmake/BuildDakotaCustom.cmake configs/6.2/BuildDakotaCustom.cmake.discover.patch
++patch $DAK_SRC/cmake/DakotaDev.cmake configs/6.2/DakotaDev.cmake.patch
++patch $DAK_SRC/CMakeLists.txt configs/6.2/CMakeLists.txt.discover16.patch
++
++#Apply patches
++patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
++patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
++patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++
++#Configure dakota
++cd $DAK_BUILD
++
++cmake -D CMAKE_C_COMPILER=mpicc \
++	   -D CMAKE_CXX_COMPILER=mpicxx \
++	   -D CMAKE_Fortran_COMPILER=/usr/bin/gfortran \
++		-DHAVE_ACRO=off \
++		-DHAVE_JEGA=off \
++		-C $DAK_SRC/cmake/BuildDakotaCustom.cmake \
++		-C $DAK_SRC/cmake/DakotaDev.cmake \
++		$DAK_SRC
++cd ..
++
++#Compile and install dakota
++cd $DAK_BUILD
++if [ $# -eq 0 ];
++then
++	make
++	make install
++else
++	make -j $1
++	make -j $1 install
++fi
++cd ..
+
+Property changes on: ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22002-22003.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22002-22003.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22002-22003.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 22002)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 22003)
+@@ -124,9 +124,11 @@
+ 				 fprintf(fid,'#SBATCH --mail-type=end \n\n');
+ 			 end
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp/intel-15.0.0.090\n');
+-			 fprintf(fid,'module load mpi/impi-4.0.3.008\n');
++			 fprintf(fid,'module load comp/intel-16.0.2.181\n');
++			 fprintf(fid,'module load mpi/impi-5.1.3.181\n');
+ 			 fprintf(fid,'module load other/cmake-3.8.2\n');
++			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
++			 fprintf(fid,'export MPI_UNBUFFERED_STDIO=true\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+ 			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
Index: /issm/oecreview/Archive/21724-22754/ISSM-22003-22004.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22003-22004.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22003-22004.diff	(revision 22755)
@@ -0,0 +1,4322 @@
+Index: ../trunk-jpl/src/c/cores/love_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/love_core.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/cores/love_core.cpp	(revision 22004)
+@@ -0,0 +1,91 @@
++/*!\file: love_core.cpp
++ * \brief: core of the LOVE numbers solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++void love_core(FemModel* femmodel){
++
++	Vector<IssmDouble> *wg    = NULL;
++	Vector<IssmDouble> *dwdtg = NULL;
++	IssmDouble          *x    = NULL;
++	IssmDouble          *y    = NULL;
++
++	/*love parameters: */
++	IssmDouble* frequencies=NULL;
++	int nfreq,dummy; 
++	int sh_nmin,sh_nmax;
++	IssmDouble g0,r0,mu0;
++	bool allow_layer_deletion;
++	int forcing_type;
++	bool verbosemod =(int) VerboseModule();
++
++	/*parameters: */
++	bool save_results;
++	
++	if(VerboseSolution()) _printf0_("   computing LOVE numbers\n");
++
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	
++	/*recover love number parameters: */
++	femmodel->parameters->FindParam(&nfreq,LoveNfreqEnum);
++	femmodel->parameters->FindParam(&frequencies,&dummy,LoveFrequenciesEnum); _assert_(nfreq==dummy);
++	femmodel->parameters->FindParam(&sh_nmax,LoveShNmaxEnum);
++	femmodel->parameters->FindParam(&sh_nmin,LoveShNminEnum);
++	femmodel->parameters->FindParam(&g0,LoveG0Enum);
++	femmodel->parameters->FindParam(&r0,LoveR0Enum);
++	femmodel->parameters->FindParam(&mu0,LoveMu0Enum);
++	femmodel->parameters->FindParam(&allow_layer_deletion,LoveAllowLayerDeletionEnum);
++	femmodel->parameters->FindParam(&forcing_type,LoveForcingTypeEnum);
++	
++	/*recover materials parameters: there is only one Matlitho, chase it down the hard way:*/
++	Matlitho* matlitho=NULL;
++	for (int i=femmodel->materials->Size()-1;i>=0;i--){
++		Material* material=xDynamicCast<Material*>(femmodel->materials->GetObjectByOffset(i));
++		if (material->ObjectEnum()==MatlithoEnum)matlitho=xDynamicCast<Matlitho*>(material);
++	}
++	_assert_(matlitho);
++
++	/*Initialize three love matrices: geoid, vertical and horizontal displacement (real and imaginary parts) */
++	IssmDouble*  LoveKr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++	IssmDouble*  LoveHr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++	IssmDouble*  LoveLr = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++	IssmDouble*  LoveKi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++	IssmDouble*  LoveHi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++	IssmDouble*  LoveLi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
++
++
++	
++	/*call the main module: */
++	FourierLoveCorex(LoveKr,LoveKi,LoveHr,LoveHi,LoveLr,LoveLi,  //output
++			nfreq,frequencies,sh_nmax,sh_nmin,g0,r0,mu0,allow_layer_deletion,forcing_type,verbosemod, //parameter inputs
++			matlitho->numlayers, matlitho->radius, matlitho->viscosity, matlitho->lame_lambda, matlitho->lame_mu, 
++			matlitho->burgers_viscosity, matlitho->burgers_mu, matlitho->density, matlitho->isburgers, matlitho->issolid //matlitho inputs
++			); 
++
++	/*Add love matrices to results:*/
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveKrEnum,LoveKr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveHrEnum,LoveHr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveLrEnum,LoveLr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveKiEnum,LoveKi,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveHiEnum,LoveHi,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveLiEnum,LoveLi,sh_nmax+1,nfreq,0,0));
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(frequencies);
++	xDelete<IssmDouble>(LoveKr);
++	xDelete<IssmDouble>(LoveHr);
++	xDelete<IssmDouble>(LoveLr);
++	xDelete<IssmDouble>(LoveKi);
++	xDelete<IssmDouble>(LoveHi);
++	xDelete<IssmDouble>(LoveLi);
++	
++
++
++}
+Index: ../trunk-jpl/src/c/cores/cores.h
+===================================================================
+--- ../trunk-jpl/src/c/cores/cores.h	(revision 22003)
++++ ../trunk-jpl/src/c/cores/cores.h	(revision 22004)
+@@ -46,6 +46,7 @@
+ void adgradient_core(FemModel* femmodel);
+ void dummy_core(FemModel* femmodel);
+ void gia_core(FemModel* femmodel);
++void love_core(FemModel* femmodel);
+ void esa_core(FemModel* femmodel);
+ void smb_core(FemModel* femmodel);
+ void damage_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/classes/Materials/Matlitho.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matlitho.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Materials/Matlitho.cpp	(revision 22004)
+@@ -0,0 +1,197 @@
++/*!\file Matlitho.c
++ * \brief: implementation of the Matlitho object
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../classes.h"
++#include "../../shared/shared.h"
++
++/*Matlitho constructors and destructor*/
++Matlitho::Matlitho(){/*{{{*/
++	this->numlayers=0;
++	this->radius=NULL;
++	this->viscosity=NULL;
++	this->lame_lambda=NULL;
++	this->lame_mu=NULL;
++	this->burgers_viscosity=NULL;
++	this->burgers_mu=NULL;
++	this->density=NULL;
++	this->isburgers=NULL;
++	this->issolid=NULL;
++	return;
++}
++/*}}}*/
++Matlitho::Matlitho(int matlitho_mid, IoModel* iomodel){/*{{{*/
++
++	IssmDouble* isburgersd=NULL;
++	IssmDouble* issolidd=NULL;
++
++	this->mid=matlitho_mid;
++	iomodel->FindConstant(&this->numlayers,"md.materials.numlayers");
++
++	this->radius=xNew<IssmDouble>(this->numlayers+1);
++	xMemCpy<IssmDouble>(this->radius, iomodel->Data("md.materials.radius"),this->numlayers+1);
++	
++	this->viscosity=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->viscosity, iomodel->Data("md.materials.viscosity"),this->numlayers);
++	
++	this->lame_lambda=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->lame_lambda, iomodel->Data("md.materials.lame_lambda"),this->numlayers);
++	
++	this->lame_mu=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->lame_mu, iomodel->Data("md.materials.lame_mu"),this->numlayers);
++
++	this->burgers_viscosity=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->burgers_viscosity, iomodel->Data("md.materials.burgers_viscosity"),this->numlayers);
++
++	this->burgers_mu=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->burgers_mu, iomodel->Data("md.materials.burgers_mu"),this->numlayers);
++
++	this->density=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->density, iomodel->Data("md.materials.density"),this->numlayers);
++
++	this->isburgers=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->isburgers, iomodel->Data("md.materials.isburgers"),this->numlayers);
++
++	this->issolid=xNew<IssmDouble>(this->numlayers);
++	xMemCpy<IssmDouble>(this->issolid, iomodel->Data("md.materials.issolid"),this->numlayers);
++	
++	/*isburgersd= xNew<IssmDouble>(this->numlayers);
++	this->isburgers=xNew<bool>(this->numlayers);
++	xMemCpy<IssmDouble>(isburgersd, iomodel->Data("md.materials.isburgers"),this->numlayers);
++	for (int i=0;i<this->numlayers;i++)this->isburgers[i]=reCast<bool,IssmDouble>(isburgersd[i]);
++	
++	issolidd= xNew<IssmDouble>(this->numlayers);
++	this->issolid=xNew<bool>(this->numlayers);
++	xMemCpy<IssmDouble>(issolidd, iomodel->Data("md.materials.issolid"),this->numlayers);
++	for (int i=0;i<this->numlayers;i++)this->issolid[i]=reCast<bool,IssmDouble>(issolidd[i]);*/
++	
++	/*free ressources: */
++	xDelete<IssmDouble>(isburgersd);
++	xDelete<IssmDouble>(issolidd);
++}
++/*}}}*/
++Matlitho::~Matlitho(){/*{{{*/
++	
++	xDelete<IssmDouble>(radius);
++	xDelete<IssmDouble>(viscosity);
++	xDelete<IssmDouble>(lame_lambda);
++	xDelete<IssmDouble>(lame_mu);
++	xDelete<IssmDouble>(burgers_viscosity);
++	xDelete<IssmDouble>(burgers_mu);
++	xDelete<IssmDouble>(density);
++	xDelete<IssmDouble>(isburgers);
++	xDelete<IssmDouble>(issolid);
++
++	return;
++}
++/*}}}*/
++void Matlitho::SetMid(int matlitho_mid){/*{{{*/
++	this->mid=matlitho_mid;
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++Object* Matlitho::copy() {/*{{{*/
++
++	/*Output*/
++	Matlitho* matlitho;
++
++	/*Initialize output*/
++	matlitho=new Matlitho(*this);
++
++	/*copy fields: */
++	matlitho->mid=this->mid;
++	matlitho->numlayers=this->numlayers;
++	if(matlitho->numlayers){
++		matlitho->radius=xNew<IssmDouble>(this->numlayers+1); xMemCpy<IssmDouble>(matlitho->radius, this->radius,this->numlayers+1);
++		matlitho->viscosity=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->viscosity, this->viscosity,this->numlayers);
++		matlitho->lame_lambda=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->lame_lambda, this->lame_lambda,this->numlayers);
++		matlitho->lame_mu=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->lame_mu, this->lame_mu,this->numlayers);
++		matlitho->burgers_viscosity=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->burgers_viscosity, this->burgers_viscosity,this->numlayers);
++		matlitho->burgers_mu=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->burgers_mu, this->burgers_mu,this->numlayers);
++		matlitho->density=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->density, this->density,this->numlayers);
++		matlitho->isburgers=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->isburgers, this->isburgers,this->numlayers);
++		matlitho->issolid=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->issolid, this->issolid,this->numlayers);
++		/*matlitho->isburgers=xNew<bool>(this->numlayers); for(int i=0;i<this->numlayers;i++)matlitho->isburgers[i]=this->isburgers[i]; 
++		matlitho->issolid=xNew<bool>(this->numlayers); for(int i=0;i<this->numlayers;i++)matlitho->issolid[i]=this->issolid[i];*/ 
++	}
++
++	return matlitho;
++}
++/*}}}*/
++void Matlitho::DeepEcho(void){/*{{{*/
++
++	this->Echo();
++}		
++/*}}}*/
++void Matlitho::Echo(void){/*{{{*/
++
++	_printf_("Matlitho:\n");
++	_printf_("   mid: " << mid << "\n");
++	_printf_("   numlayers: " << numlayers << "\n");
++	_printf_("layer radius viscosity lame_lambda lame_mu burgers_viscosity burgers_mu density isburgers issolid\n");
++	for (int i=0;i<numlayers;i++){
++		_printf_(i << " " << radius[i] << " " << viscosity[i] << " " << lame_lambda[i] << " " << lame_mu[i] << " " << burgers_viscosity[i] << " " << burgers_mu[i] << " " << density[i] << " " << isburgers[i] << " " << issolid[i]);
++	}
++	return;
++}
++/*}}}*/
++int  Matlitho::Id(void){ return mid; }/*{{{*/
++/*}}}*/
++void Matlitho::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
++
++	MARSHALLING_ENUM(MatlithoEnum);
++
++	MARSHALLING(numlayers);
++	if(numlayers) { 
++		MARSHALLING_DYNAMIC(radius,IssmDouble,numlayers+1);
++		MARSHALLING_DYNAMIC(viscosity,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(lame_lambda,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(lame_mu,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(burgers_viscosity,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(burgers_mu,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(density,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(isburgers,IssmDouble,numlayers);
++		MARSHALLING_DYNAMIC(issolid,IssmDouble,numlayers);
++	}
++	else{
++		radius=NULL;
++		viscosity=NULL;
++		lame_lambda=NULL;
++		lame_mu=NULL;
++		burgers_viscosity=NULL;
++		burgers_mu=NULL;
++		density=NULL;
++		isburgers=NULL;
++		issolid=NULL;
++	}
++
++}
++/*}}}*/
++int  Matlitho::ObjectEnum(void){/*{{{*/
++
++	return MatlithoEnum;
++
++}
++/*}}}*/
++
++/*Update virtual functions definitions:*/
++
++/*Matlitho management: */
++void       Matlitho::Configure(Elements* elementsin){/*{{{*/
++	/*don't do anything, we don't have a hook to an element! As there is only 
++	 * one Matlitho object!*/
++}
++/*}}}*/
++void       Matlitho::ResetHooks(){/*{{{*/
++	/*don't do anything, we don't have a hook to an element! As there is only 
++	 * one Matlitho object!*/
++	return;
++}
++/*}}}*/
+
+Property changes on: ../trunk-jpl/src/c/classes/Materials/Matlitho.cpp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/classes/Materials/Matlitho.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 22004)
+@@ -0,0 +1,98 @@
++/*!\file Matlitho.h
++ * \brief: header file for matlitho object
++ */
++
++#ifndef _MATLITHO_H_
++#define _MATLITHO_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Material.h"
++class IoModel;
++/*}}}*/
++
++class Matlitho: public Material{
++
++	public: 
++		int	      mid;
++		int          numlayers;
++		IssmDouble*  radius;
++		IssmDouble*  viscosity;
++		IssmDouble*  lame_lambda;
++		IssmDouble*  lame_mu;
++		IssmDouble*  burgers_viscosity;
++		IssmDouble*  burgers_mu;
++		IssmDouble*  density;
++		IssmDouble*  isburgers;
++		IssmDouble*  issolid;
++
++		Matlitho();
++		Matlitho(int matlitho_id, IoModel* iomodel);
++		~Matlitho();
++		void SetMid(int matlitho_mid);
++
++		/*Object virtual functions definitions:{{{ */
++		Object *copy();
++		void    DeepEcho();
++		void    Echo();
++		int     Id();
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int     ObjectEnum();
++		/*}}}*/
++		/*Update virtual functions resolution: {{{*/
++		void   InputUpdateFromConstant(IssmDouble constant, int name){_error_("not implemented");};
++		void   InputUpdateFromConstant(int constant, int name){_error_("not implemented");};
++		void   InputUpdateFromConstant(bool constant, int name){_error_("not implemented");};
++		void   InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented");};
++		void   InputUpdateFromMatrixDakota(IssmDouble* matrix,int nrows,int ncols, int name, int type){_error_("not implemented");};
++		void   InputUpdateFromVector(IssmDouble* vector, int name, int type){_error_("not implemented");};
++		void   InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){_error_("not implemented");};
++		/*}}}*/
++		/*Material virtual functions resolution: {{{*/
++		Material*  copy2(Element* element){_error_("not implemented");};
++		void       Configure(Elements* elements);
++		void       GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
++		void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
++		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
++		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
++		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
++		IssmDouble GetA(){_error_("not supported");};
++		IssmDouble GetAbar(){_error_("not supported");};
++		IssmDouble GetB(){_error_("not supported");};
++		IssmDouble GetBbar(){_error_("not supported");};
++		IssmDouble GetD(){_error_("not supported");};
++		IssmDouble GetDbar(){_error_("not supported");};
++		IssmDouble GetN(){_error_("not supported");};
++		int        GetRheologyLaw(){_error_("not supported");};
++		bool       IsDamage(){_error_("not supported");};
++		bool       IsEnhanced(){_error_("not supported");};
++		void       ResetHooks();
++
++		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
++		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
++		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
++		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
++		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff){_error_("not supported");};
++		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
++		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
++
++		/*}}}*/
++		/*Numerics: {{{*/
++		void       EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure){_error_("not supported");};
++		IssmDouble GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){_error_("not supported");};
++		IssmDouble GetEnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure){_error_("not supported");};
++		IssmDouble GetMaterialParameter(int in_enum){_error_("not supported");}; 
++		IssmDouble PureIceEnthalpy(IssmDouble pressure){_error_("not supported");};
++		void       ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure){_error_("not supported");};
++		IssmDouble TMeltingPoint(IssmDouble pressure){_error_("not supported");};
++		/*}}}*/
++
++};
++
++#endif  /* _MATLITHO_H_ */
+
+Property changes on: ../trunk-jpl/src/c/classes/Materials/Matlitho.h
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 22004)
+@@ -83,6 +83,7 @@
+ #include "./Materials/Materials.h"
+ #include "./Materials/Material.h"
+ #include "./Materials/Matice.h"
++#include "./Materials/Matlitho.h"
+ #include "./Materials/Matestar.h"
+ #include "./Materials/Matpar.h"
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22004)
+@@ -677,7 +677,11 @@
+ 		case GiaSolutionEnum:
+ 			analyses_temp[numanalyses++]=GiaIvinsAnalysisEnum;
+ 			break;
+-		
++
++		case LoveSolutionEnum:
++			analyses_temp[numanalyses++]=LoveAnalysisEnum;
++			break;
++
+ 		case EsaSolutionEnum:
+ 			analyses_temp[numanalyses++]=EsaAnalysisEnum;
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 22004)
+@@ -45,7 +45,7 @@
+ 	int material_id;
+ 
+ 	/*retrieve material_id: */
+-	matpar_id = iomodel->numberofelements+1;
++	matpar_id = iomodel->matparcounter;
+ 
+ 	/*retrieve material_id*/
+ 	material_id = element_id;
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 22004)
+@@ -86,6 +86,7 @@
+ 		int constraintcounter;   //keep track of how many constraints are being created in each analysis
+ 		int loadcounter;         //keep track of how many loads are being created in each analysis
+ 		int nodecounter;         //keep track of how many nodes are being created in each analysis
++		int matparcounter;       //keep track of where we end up putting this object accessed by every element.
+ 
+ 		/*Methods*/
+ 		~IoModel();
+Index: ../trunk-jpl/src/c/classes/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertices.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Vertices.cpp	(revision 22004)
+@@ -143,6 +143,8 @@
+ 	int max_sid=0;
+ 	int vertex_max_sid;
+ 
++	if (this->Size()==0)return 0;
++
+ 	for(i=0;i<this->Size();i++){
+ 		Vertex* vertex=xDynamicCast<Vertex*>(this->GetObjectByOffset(i));
+ 		sid=vertex->Sid();
+Index: ../trunk-jpl/src/c/analyses/LoveAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LoveAnalysis.h	(nonexistent)
++++ ../trunk-jpl/src/c/analyses/LoveAnalysis.h	(revision 22004)
+@@ -0,0 +1,35 @@
++/*! \file LoveAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _LoveAnalysis_
++#define _LoveAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class LoveAnalysis: public Analysis{
++
++	public:
++		/*Model processing*/
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		int  DofsPerNode(int** doflist,int domaintype,int approximation);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++
++		/*Finite element Analysis*/
++		void           Core(FemModel* femmodel);
++		ElementVector* CreateDVector(Element* element);
++		ElementMatrix* CreateJacobianMatrix(Element* element);
++		ElementMatrix* CreateKMatrix(Element* element);
++		ElementVector* CreatePVector(Element* element);
++		void           GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss);
++		void           GetBprime(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss);
++		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
++		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
++		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
++		void           UpdateConstraints(FemModel* femmodel);
++};
++#endif
+
+Property changes on: ../trunk-jpl/src/c/analyses/LoveAnalysis.h
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 22003)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 22004)
+@@ -23,6 +23,7 @@
+ #include "./FreeSurfaceBaseAnalysis.h"
+ #include "./FreeSurfaceTopAnalysis.h"
+ #include "./GiaIvinsAnalysis.h"
++#include "./LoveAnalysis.h"
+ #include "./EsaAnalysis.h"
+ #include "./HydrologyDCEfficientAnalysis.h"
+ #include "./HydrologyDCInefficientAnalysis.h"
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22004)
+@@ -110,7 +110,7 @@
+ 		case EsaAnalysisEnum : return new EsaAnalysis();
+ 		#endif
+ 		#ifdef _HAVE_LOVE_
+-		//case LoveAnalysisEnum : return new LoveAnalysis();
++		case LoveAnalysisEnum : return new LoveAnalysis();
+ 		#endif
+ 		#ifdef _HAVE_LEVELSET_
+ 		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
+Index: ../trunk-jpl/src/c/analyses/LoveAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(revision 22004)
+@@ -0,0 +1,57 @@
++#include "./LoveAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++void LoveAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void LoveAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void LoveAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++int  LoveAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
++	_error_("not needed!");
++}/*}}}*/
++void LoveAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++}/*}}}*/
++void LoveAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void LoveAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
++	/*Default, do nothing*/
++	return;
++}/*}}}*/
++
++/*Finite Element Analysis*/
++void           LoveAnalysis::Core(FemModel* femmodel){/*{{{*/
++	_error_(" not needed!");
++}/*}}}*/
++ElementVector* LoveAnalysis::CreateDVector(Element* element){/*{{{*/
++	_error_(" not needed!");
++}/*}}}*/
++ElementMatrix* LoveAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
++	_error_(" not needed!");
++}/*}}}*/
++ElementMatrix* LoveAnalysis::CreateKMatrix(Element* element){/*{{{*/
++	_error_(" not needed!");
++}/*}}}*/
++ElementVector* LoveAnalysis::CreatePVector(Element* element){/*{{{*/
++	_error_("not supported");
++}/*}}}*/
++void           LoveAnalysis::GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
++	_error_("not supported");
++}/*}}}*/
++void           LoveAnalysis::GetBprime(IssmDouble* Bprime,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
++	_error_("not supported");
++}/*}}}*/
++void           LoveAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void           LoveAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
++	_error_("Not implemented yet");
++}/*}}}*/
++void           LoveAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
++	_error_("not supported");
++}/*}}}*/
+
+Property changes on: ../trunk-jpl/src/c/analyses/LoveAnalysis.cpp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22004)
+@@ -117,6 +117,8 @@
+ 		case 2: return MatestarEnum; 
+ 		case 3: return MaticeEnum;
+ 		case 4: return MatenhancediceEnum;
++		case 5: return MatlithoEnum;
++		case 6: return MaterialsEnum;
+ 		default: _error_("Marshalled materials code \""<<enum_in<<"\" not supported yet"); 
+ 	}
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 22003)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 22004)
+@@ -29,6 +29,7 @@
+ #include "./GetVectorFromInputsx/GetVectorFromInputsx.h"
+ #include "./GetVectorFromControlInputsx/GetVectorFromControlInputsx.h"
+ #include "./GiaDeflectionCorex/GiaDeflectionCorex.h"
++#include "./FourierLoveCorex/FourierLoveCorex.h"
+ #include "./SetControlInputsFromVectorx/SetControlInputsFromVectorx.h"
+ #include "./SetActiveNodesLSMx/SetActiveNodesLSMx.h"
+ #include "./Gradjx/Gradjx.h"
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22004)
+@@ -0,0 +1,38 @@
++/*!\file FourierLoveCorex
++ * \brief: core solution module for love analysis. Based on Caron's fortran core. 
++ */
++
++#include "./FourierLoveCorex.h"
++
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++#include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
++
++extern "C" { 
++	int lnb_setup_( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi, int* pnfreq, IssmDouble* frequencies, int* psh_nmax, int* psh_nmin, 
++		IssmDouble* pg0, IssmDouble* pr0, IssmDouble* pmu0,bool* pallow_layer_deletion, int* pforcing_type, bool* pverbosemod,
++		int* pnumlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
++		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid);
++
++}
++
++/*}}}*/
++
++void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi, int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, 
++		IssmDouble g0, IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
++		int numlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
++		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid){
++
++	/*Call fortran driver: */
++	lnb_setup_(  LoveKr,  LoveKi,  LoveHr,  LoveHi,  LoveLr, 
++		 LoveLi,  &nfreq,  frequencies,  &sh_nmax,  &sh_nmin, 
++		 &g0,  &r0,  &mu0, &allow_layer_deletion,  &forcing_type, &verbosemod,
++		 &numlayers,  radius,  viscosity,  lame_lambda,  lame_mu, 
++		 burgers_viscosity,  burgers_mu,  density,  isburgers,  issolid);
++
++	
++	
++}
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(revision 22004)
+@@ -0,0 +1,17 @@
++/*!\file:  FourierLoveCorex.h
++ * \brief header file for ...
++ */ 
++
++#ifndef _FOURIERLOVECOREX_H
++#define _FOURIERLOVECOREX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi,int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, IssmDouble r0, 
++		IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod, int numlayers, IssmDouble* radius,  
++		IssmDouble* viscosity,IssmDouble* lame_lambda, IssmDouble* lame_mu, IssmDouble* burgers_viscosity, IssmDouble* burgers_mu,  
++		IssmDouble* density,IssmDouble* isburgers, IssmDouble* issolid);
++
++#endif  /* _FOURIERLOVECOREX_H */
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(revision 22004)
+@@ -0,0 +1,35 @@
++module lnb_param
++
++ implicit none
++ 
++ public 
++
++ !Physical Constants
++ double precision, parameter :: GG = 6.67259e-11! gravitational constant
++ double precision :: ra,rb,rc ! radii of the surface, CMB and ICB
++ double precision :: pi,ro_mean,go_surf,go_icb,go_cmb !some constants
++ ! GG --> gravitational constant
++ ! ra, rb, rc --> Surface, CMB and ICB radius
++ ! ro_mean --> mean density of the planet 
++ ! go_surf --> mean surface gravity
++ ! go_icb/cmb --> gravity at the Inner Core/Core-Mantle Boundary
++ double precision   :: mu0,go0,r0 !3 normalization constants
++
++!Numerical Constants
++ double precision :: epsdb, layerrap !used in detecting underflows in the lovenb integration
++ double complex     :: valini,freq ! integration constant and angular frequency being processed
++ logical :: allow_layer_del,display, benchmark_spada !do we allow deletion of layers in case of underflow, enable some prints in terminal
++
++!GIA problem setup
++ integer :: deg,ifmin,ifmax ! deg=SH degree, ifmin/ifmax=which kind of forcing is applied (usually we want loading)
++ logical :: incompressible !choose which mode of calculation is activated
++
++!Earth Model 
++ integer :: nfreq, degmax, degmin
++ integer :: nlayer! number of layers
++ double precision, dimension(:), pointer :: roc,lac,muc,vic,vic2,muc2 ! Earth layers parameters
++ double precision, dimension(:), pointer :: radius ! Earth layers parameters
++ double precision :: vicratio,mucratio !2 Burgers long-term to short-term ratios
++ logical, dimension(:), pointer :: soliddim,radbc,burgers ! is this layer solid (if not it's liquid), does it have specific boundary conditions and does it have a Burgers rheology (if not, it uses Maxwell)
++ 
++end module lnb_param
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(revision 22004)
+@@ -0,0 +1,226 @@
++module util
++ 
++ use model
++ use lnb_param
++
++ contains
++
++!
++!_______DERIVS_________________________________________________________________
++!
++ subroutine derivs(x,y,dydx)
++ 
++ implicit none
++ double complex  :: la, mu
++ double precision :: x,ro,g
++ double complex :: flm,rlm,rm0,rg0,frh,fgr,fn
++ logical :: solid
++ integer :: iy,id,n2,ny
++ double complex, dimension(6)   :: y,dydx,f
++ double complex, dimension(6,6) :: dy
++
++ call earth_nlayers_viscoelas(x,ro,la,mu,g,solid)
++ !print*,la,mu
++!
++!_______Expressions
++!
++ flm=(la+2.d0*mu)
++ rlm=(3.d0*la+2.d0*mu)/(la+2.d0*mu)
++ rm0=mu/mu0
++ rg0=g/go0
++ frh=ro*g*ra/mu0
++ fgr=4.d0*Pi*GG*ro*ra/go0
++ fn=dble(deg*(deg+1))
++ 
++!
++!_______Systeme differentiel yi dans un solide
++!
++ if(solid) then
++ 
++ ny = 6
++
++ dy(1,1)= (-2.d0*la/flm)/x
++ dy(1,2)= mu0/flm
++ dy(1,3)= (la*fn/flm)/x
++ dy(1,4)= 0.d0
++ dy(1,5)= 0.d0
++ dy(1,6)= 0.d0
++
++ dy(2,1)=  4.d0*(-frh+rm0*rlm/x)/x + ro*freq**2*ra/mu0
++ dy(2,2)=(-4.d0*mu/flm)/x
++ dy(2,3)= fn*(frh-2.d0*rm0*rlm/x)/x
++ dy(2,4)= fn/x
++ dy(2,5)= 0.d0
++ dy(2,6)= -frh/rg0
++
++ dy(3,1)= -1.d0/x
++ dy(3,2)= 0.d0
++ dy(3,3)= 1.d0/x
++ dy(3,4)= 1.d0/rm0
++ dy(3,5)= 0.d0
++ dy(3,6)= 0.d0
++
++ dy(4,1)= (frh-2.d0*rm0*rlm/x)/x
++ dy(4,2)= ( -la/flm)/x
++ dy(4,3)= (2.d0*rm0*(la*(2.d0*fn-1.d0)+2.d0*mu*(fn-1.d0))/flm)/(x*x) + ro*freq**2*ra/mu0
++ dy(4,4)= -3.d0/x
++ dy(4,5)= -(frh/rg0)/x
++ dy(4,6)= 0.d0
++
++ dy(5,1)= fgr
++ dy(5,2)= 0.d0
++ dy(5,3)= 0.d0
++ dy(5,4)= 0.d0
++ dy(5,5)= 0.d0
++ dy(5,6)= 1.d0
++
++ dy(6,1)= 0.d0
++ dy(6,2)= 0.d0
++ dy(6,3)= -(fgr*fn)/x
++ dy(6,4)= 0.d0
++ dy(6,5)= fn/(x*x)
++ dy(6,6)= -2.d0/x
++  
++ else
++ 
++ ny = 2
++
++ dy(:,:)= 0.d0
++
++ dy(1,1)= fgr/rg0
++ dy(1,2)= 1.d0
++ dy(2,1)= (-4.d0*(fgr/rg0)+fn/x)/x
++ dy(2,2)= -2.d0/x-fgr/rg0
++ 
++ end if
++!
++!_______Derivees des yi
++! 
++ dydx(:)=0.d0 
++ do id=1,ny
++  do iy=1,ny
++     dydx(id)=dydx(id)+dy(id,iy)*y(iy)
++  end do
++ end do
++
++    end subroutine derivs
++
++
++    subroutine propagFDS(ystart,xmin,xmax,nstep)
++     implicit none
++     double precision :: xmin,xmax,dr,x
++     integer :: nstep,i
++     double complex, dimension(6)   :: ystart,dydx,y,y1
++
++     dr = (xmax -xmin)/nstep
++     y = ystart
++     x = xmin
++
++     do i = 1,nstep
++
++  call derivs(x,y,dydx)
++  y1 = y + dr*dydx
++  x = x + dr
++  y = y1
++
++     end do
++
++     ystart = y
++
++ end subroutine propagFDS
++
++!_____LUDCMP___________________________________________________________________
++!
++      SUBROUTINE ludcmp(a,n,np,indx,d)
++      IMPLICIT DOUBLE PRECISION (a-h,o-z)
++      INTEGER n,np,indx(n),NMAX
++      REAL*8 d,a(np,np),TINY
++      PARAMETER (NMAX=500,TINY=1.0D-30)
++      INTEGER i,imax,j,k
++      REAL*8 aamax,dum,sum,vv(NMAX)
++      d=1d0
++      do 12 i=1,n
++        aamax=0d0
++        do 11 j=1,n
++          if (dabs(a(i,j)).gt.aamax) aamax=dabs(a(i,j))
++11      continue
++        if (aamax.eq.0d0) stop 'singular matrix in ludcmp'
++        vv(i)=1./aamax
++12    continue
++      do 19 j=1,n
++        do 14 i=1,j-1
++          sum=a(i,j)
++          do 13 k=1,i-1
++            sum=sum-a(i,k)*a(k,j)
++13        continue
++          a(i,j)=sum
++14      continue
++        aamax=0d0
++        do 16 i=j,n
++          sum=a(i,j)
++          do 15 k=1,j-1
++            sum=sum-a(i,k)*a(k,j)
++15        continue
++          a(i,j)=sum
++          dum=vv(i)*dabs(sum)
++          if (dum.ge.aamax) then
++            imax=i
++            aamax=dum
++          endif
++16      continue
++        if (j.ne.imax)then
++          do 17 k=1,n
++            dum=a(imax,k)
++            a(imax,k)=a(j,k)
++            a(j,k)=dum
++17        continue
++          d=-d
++          vv(imax)=vv(j)
++        endif
++        indx(j)=imax
++        if(a(j,j).eq.0d0)a(j,j)=TINY
++        if(j.ne.n)then
++          dum=1d0/a(j,j)
++          do 18 i=j+1,n
++            a(i,j)=a(i,j)*dum
++18        continue
++        endif
++19    continue
++      return
++      END SUBROUTINE ludcmp
++!
++!_____LUBKSB___________________________________________________________________
++!
++      SUBROUTINE lubksb(a,n,np,indx,b)
++      IMPLICIT DOUBLE PRECISION (a-h,o-z)
++      INTEGER n,np,indx(n)
++      REAL*8 a(np,np),b(np)
++      INTEGER i,ii,j,ll
++      REAL*8 sum
++      ii=0
++      do 12 i=1,n
++        ll=indx(i)
++        sum=b(ll)
++        b(ll)=b(i)
++        if (ii.ne.0)then
++          do 11 j=ii,i-1
++            sum=sum-a(i,j)*b(j)
++11        continue
++        else if (sum.ne.0d0) then
++          ii=i
++        endif
++        b(i)=sum
++12    continue
++      do 14 i=n,1,-1
++        sum=b(i)
++        do 13 j=i+1,n
++          sum=sum-a(i,j)*b(j)
++13      continue
++        b(i)=sum/a(i,i)
++14    continue
++      return
++      END SUBROUTINE lubksb
++
++
++
++end module util
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22004)
+@@ -0,0 +1,609 @@
++module lovenb_sub
++
++ use util
++ use lnb_param
++
++ implicit none
++ 
++ contains
++ 
++ subroutine boundary_conditions_matrix(bc,indx,nbc)
++!-------------------------------------
++
++  implicit none
++  double complex :: la, mu
++  double precision :: xmin,xmax,eps,hini,hmin
++  double precision :: x,ro1,ro2,g,d,one
++  double complex, dimension (:,:), pointer :: bc
++  integer, dimension(:), pointer   :: indx
++  double complex, dimension(6)   :: ystart,dydx
++  double complex, dimension(6,6) :: ystep
++  integer :: ny,i,j,k,ii,jj,kk,nok,nbad,is,nbc,ibc,ifirst,nstep
++  logical :: solid,vali
++  
++  !-- Initialisation of boundary condition matrix
++
++  indx(:) = 0
++  
++  !-- Integration 
++
++  eps= 1.d-10
++  hini=1.d-10
++  hmin=0.d0
++
++  ! Underflows risk tests in the numerical integration
++  ! The starting ystart are chosen to be different than 1 to limit under and overflows in the Runge-Kutta
++  if (-300.d0<log10(tiny(ra))) then 
++	write(*,*) 'Warning problem in the dimensioning of the starting values in Runge-Kutta'
++	write(*,*) 'log tiny(ra) = ', log(tiny(ra))
++	stop
++  endif
++
++	
++   if ((log10(1.d0/ra**int(dble(deg)/10.d0)))<-250.d0) then
++	valini=1.d-300!*complex(1.d0,1.d0)
++   else
++	valini= 1.d0!*complex(1.d0,1.d0)
++   endif
++
++  
++  ! Which among the model interfaces is the first to display boundary conditions
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++  
++  
++  !-- Layer iteration for the solutions propagation 
++  !    and typing the matrix boundary conditions 
++  ibc = 0   ! Counter of interfaces with boundary conditions 
++
++  do i = ifirst,nlayer 
++  
++   xmin= radius(i)/ra
++   xmax= radius(i+1)/ra - epsdb
++   nstep=100
++  
++   if (soliddim(i)) then
++   		ny = 6
++   		is = 0
++   		one= 1.d0
++   else	
++   		ny = 2
++   		is = 4
++   		one= -1.d0
++   end if 	
++   
++   
++   do j = 1,ny
++		! Typing ystart
++		if (radbc(i)) then
++   			ystart(:)=0.d0
++			ystart(j)= valini
++ 			k=ibc+1
++ 		else
++ 			ystart(:)=ystep(j,:)
++ 		end if
++ 		
++		! Numerical Integration 
++		!print*,j
++		call propagFDS(ystart,xmin,xmax,nstep)
++ 		!call odeint(ystart,ny,xmin,xmax,eps,hini,hmin,nok,nbad)
++		!print*,j
++ 		
++ 		! Boundary Condition matrix - propagation part 
++		if (radbc(i+1)) then
++ 			ii = 6*k+is
++ 			jj = 6*k+j+is-3
++ 			do kk=1,ny
++				bc(ii+kk,jj) = ystart(kk)*one
++			end do
++		else
++			ystep(j,:)=ystart(:) 
++ 		end if
++   end do
++	
++	
++   if (radbc(i)) then
++   
++	! Boundary Condition matrix - solid regions
++	if (soliddim(i)) then
++		one = -1.d0
++		if (i>1)then 
++			if (.not.soliddim(i-1)) one = 1.d0
++		end if
++		do  j=1,6
++			bc(j+6*ibc,j+6*ibc+3) = one
++		end do
++		ibc = ibc+1
++		
++	! Boundary Condition matrix - liquid regions
++	else
++		x = radius(i)/ra
++		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
++		ii = 6*ibc+1
++		bc(ii,ii+3) = -1.d0
++		bc(ii,ii+4+3) = -go0/g
++		bc( ii+1,ii+3)=-ro2*g*ra/mu0
++		bc( ii+2,ii+1+3)=-1.d0
++		bc(ii+5,ii+3)= 4.d0*pi*GG*ro2*ra/go0
++		bc(ii+4,ii+4+3)=-1.d0
++		bc(ii+5,ii+5+3)=-1.d0
++		x = radius(i+1)/ra
++		call earth_nlayers_viscoelas(x-epsdb,ro1,la,mu,g,solid)
++		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
++		ii = 6*(ibc+1)+1
++		bc(ii,ii-1)=-1.d0
++		bc(ii,ii+1)=bc(ii+4,ii+1)*go0/g ! b(17,14) solution integration 1 of z5 CMB
++		bc(ii,ii+2)=bc(ii+4,ii+2)*go0/g ! b(17,15) solution integration 2 of z5 CMB
++		 					  ! b(13,..) y1 CMB
++		bc(ii+1,ii-1)=-ro1*g*ra/mu0
++		bc(ii+2,ii)=-1.d0
++		bc(ii+5,ii-1)= 4.d0*pi*GG*ro1*ra/go0
++		ibc = ibc+1
++	end if	
++	
++    end if
++	
++	
++	
++  end do
++
++
++  !-- Internal sphere
++
++  call sphere(ifirst,deg,bc)
++
++  !-- Surface conditions
++	bc(nbc-5,nbc-2)=-1.d0
++	bc(nbc-3,nbc-1)=-1.d0
++	bc(nbc-1,nbc)=-1.d0
++	bc(nbc,nbc)=dble(deg+1)
++
++  !-- Degree 1 special case
++	if(deg==1) then
++		  bc(nbc,:)=0.d0
++		  bc(nbc,nbc)=1.d0
++	end if
++	
++
++	!print*, bc, imag_eval
++ end subroutine boundary_conditions_matrix
++ 
++ subroutine sphere(i,n,bc)
++!------------------------
++
++	implicit none
++	double complex :: la,mu
++	integer :: n,i
++	double precision :: x,e,r,ro,g,cst,xsen,eps
++	double complex, dimension(:,:),pointer :: bc
++
++	logical :: solid
++	
++
++	eps= 1.d-10
++	x = radius(i)/ra
++	e = x
++	call earth_nlayers_viscoelas(x-eps,ro,la,mu,g,solid)
++	
++	xsen=(x/e)**n
++	r=x*ra
++	cst = 4.d0*pi*GG*ro
++
++	!write(89,*),xsen,r,ra,cst,mu0,mu,n	
++
++
++	bc(1,1)=xsen*r/ra
++	bc(1,2)=xsen/(r*ra)
++	bc(1,3)=0.d0
++
++	bc(2,1)=(2.d0*mu*dble(n*n-n-3)/dble(n) + cst/3.d0*ro*r**2)*xsen/mu0
++	bc(2,2)=(2.d0*mu*dble(n-1)/r**2 + cst/3.d0*ro)*xsen/mu0
++	bc(2,3)=-ro*xsen/mu0
++
++	bc(3,1)=dble(n+3)/dble(n*(n+1))*xsen*r/ra
++	bc(3,2)=1.d0/dble(n)*xsen/(r*ra)
++	bc(3,3)=0.d0
++
++	bc(4,1)=2.d0*mu*dble(n+2)/dble(n+1)*xsen/mu0
++	bc(4,2)=2.d0*mu*dble(n-1)/dble(n)*xsen/(r**2*mu0)
++	bc(4,3)=0.d0
++
++	bc(5,1)=0.d0
++	bc(5,2)=0.d0
++	bc(5,3)=xsen/(go0*ra)
++
++	bc(6,1)=-cst*xsen*r/go0
++	bc(6,2)=-cst*xsen/(r*go0)
++	bc(6,3)=dble(n)*xsen/(r*go0)
++
++
++ end subroutine sphere
++ 
++ subroutine external_forcing(n,source,sourcs,nfext,nbc)
++!-----------------------------------
++
++   implicit none
++   integer :: n
++   integer :: nfext,nbc
++   character*40,     dimension(:),   pointer :: sourcs
++   double complex, dimension(:,:), pointer :: source
++   
++   source(:,:)=0.d0
++   sourcs(:)=' '
++	  
++   ! In Case of a Inner Core - Outer Core - Mantle planet and Boundary conditions on these 3 interfaces
++   if (nbc == 24) then 
++   
++	!-- Sources at the ICB
++   
++	sourcs(1)='ICB --Volumetric Potential'
++	source(1,12)=dble(n)/(rc*go0)
++	source(1,11)=1.d0/(ra*go0)
++	
++	sourcs(2)='ICB --Pressure'
++	source(2, 8)=-ro_mean/mu0
++
++	sourcs(3)='ICB --Loading'
++	source(3, 8)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rc
++	source(3,12)= dble(2*n+1)/(rc*go0)
++
++	sourcs(4)='ICB --Tangential Traction'
++	source(4,10)= ro_mean/mu0
++
++	!--Sources at the CMB
++
++	sourcs(5)='CMB --Volumetric Potential'
++	source(5,14)=-ro_mean/mu0*ra/rb
++	source(5,18)= dble(2*n+1)/(rb*go0)
++
++	sourcs(6)='CMB --Pressure'
++	source(6,14)=-ro_mean/mu0
++
++	sourcs(7)='CMB --Loading'
++	source(7,14)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rb
++	source(7,18)= dble(2*n+1)/(rb*go0)
++
++	sourcs(8)='CMB --Tangential Traction'
++	source(8,16)=-ro_mean/mu0
++	
++    endif
++
++    !--Sources at the surface
++
++	sourcs(9)='SURF--Volumetric Potential'
++	source(9,nbc)=dble(2*n+1)/(ra*go0)
++
++	sourcs(10)='SURF--Pressure'
++	source(10,nbc-4)=-ro_mean/mu0
++
++	sourcs(11)='SURF--Loading'
++	source(11,nbc-4)=-ro_mean*dble(2*n+1)/(3.d0*mu0)
++	source(11,nbc)= dble(2*n+1)/(ra*go0)
++
++	sourcs(12)='SURF--Tangential Traction'
++	source(12,nbc-2)= ro_mean/mu0
++
++	!--Special case n=1
++
++	if (n.eq.1) then
++	  source(11,nbc)=0.d0
++	  source(9,nbc)=0.d0
++	end if
++	
++ 
++ end subroutine external_forcing
++ 
++ subroutine solution(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++!-------------------------------------------------
++
++  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst,info,lda,ldb
++  double complex, dimension(:,:), pointer :: bc,f
++  integer,      dimension(:), pointer :: indx
++  character*40, dimension(:), pointer :: sourcs	
++  double complex, dimension(nbc,1) :: sc
++  double complex :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
++  double complex :: sumh,suml,sumk,d,val,sumy2,sumy4,sumy6,rads
++  double precision :: delta
++  double complex, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
++  double complex, dimension(nbc,nbc) :: bcsav
++  integer :: ipiv(nbc)
++  logical :: ok
++
++
++  bcsav(:,:) = bc(:,:)
++  rads=0.d0
++  lda=nbc
++  ldb=nbc
++
++
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++! do i = 1,nbc 
++!	do j = 1,nbc
++!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
++!	enddo
++! enddo
++! write(*,*)
++  
++  !-- LU decomposition and determinant
++    ok = .true.
++   
++  !call ludcmp(bc,nbc,nbc,indx,d)
++  !do i=1,nbc
++  !   d=d*bc(i,i)
++  !end do
++  !if (display) write(*,*)
++  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
++  !if (display) write(*,*),dlog10(freq*365.25d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d
++  !write(ifile5,*) freq,d
++
++!-- Resolution
++
++  if (ok) then
++  do i = ifmin,ifmax
++  	
++	do j=1,nbc
++	  sc(j,1)=f(i,j)
++	end do
++
++	!if (display) write(*,*) 'Source: ',sourcs(i)
++	!call lubksb(bc,nbc,nbc,indx,sc)
++	call ZGESV(nbc,1,bc,lda,ipiv,sc,ldb,info)
++
++	if (info.ne.0) then 
++		print*, 'Error in ZGESV : LAPACK linear equation solver couldn''t resolve the system'
++	end if
++	loveh = sc(nbc-2,1)*ra*go_surf
++	lovel = sc(nbc-1,1)*ra*go_surf
++	lovek = sc(nbc,1)*ra*go0
++	delta = (1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh)
++	
++	sumy2=0.d0
++	sumy4=0.d0
++	sumy6=0.d0
++
++	do ic=1,6
++	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9,1)
++	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9,1)
++	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9,1)
++	end do
++
++
++	ibc = 0
++	do  j = nlayer,1,-1
++		if (radbc(j)) then 
++			ibc=ibc+1
++			if (soliddim(j)) then
++
++				loveh1 = sc(nbc - ibc*6 -3 +1,1)*ra*go_surf*valini
++				lovel1 = sc(nbc -ibc*6 -3 +3,1)*ra*go_surf*valini
++				lovek1 = sc(nbc -ibc*6 -3 +5,1)*ra*go0*valini
++			else 
++
++				sumh=0.d0
++				suml=0.d0
++				sumk=0.d0
++				ii = nbc - (ibc+1)*6
++				jj = nbc - (ibc+1)*6 -3
++				if (j==ifirst) then 
++					icmin = 4
++				else
++					icmin = 1
++				end if
++				do ic=icmin,6
++					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic,1)
++					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic,1)
++					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic,1)
++				end do
++				loveh1 = sumh*ra*go_surf*valini
++				lovel1 = suml*ra*go_surf*valini
++				lovek1 = sumk*ra*go0*valini
++
++			end if			
++			if (j==ifirst) then
++
++				layerrap = zabs(loveh1s/loveh)
++				if (layerrap > zabs(lovel1s/lovel)) layerrap = zabs(lovel1s/lovel)
++				if (layerrap > zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
++				layerrap = zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
++			endif
++
++			loveh1s = loveh1
++			lovel1s = lovel1
++			lovek1s = lovek1
++			rads = radius(j)
++			!if (radius(j)==rb) then 
++			!	 write(*,*) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
++			!else if (radius(j)==rc) then
++			!	 write(*,*) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
++			!else
++			!	if (j<10) then
++			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	else
++			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	end if
++			!endif
++		end if
++	end do
++
++  end do
++  end if
++  
++
++ !301 format(a4,5x,'n=',i3,5x,'h=',f14.10,5x,'l=',f14.10,5x,'k=',f14.10)
++ 301 format(a4,5x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 305 format(a4,i1,4x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 306 format(a4,i2,3x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 302 format(i5,5x,f14.10,5x,f14.10,5x,f14.10)
++ 303 format(i5,5x,f14.10,5x,f14.10,5x,f14.10,5x,f14.10)
++ 304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
++
++ end subroutine solution 
++ 
++ 
++  subroutine solution_nbloutput(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++!-------------------------------------------------
++
++  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst
++  double precision, dimension(:,:), pointer :: bc,f
++  integer,      dimension(:), pointer :: indx
++  character*40, dimension(:), pointer :: sourcs	
++  double precision, dimension(nbc) :: sc
++  double precision :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
++  double precision :: sumh,suml,sumk,d,val,delta,sumy2,sumy4,sumy6,rads
++  double precision, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
++  double precision, dimension(nbc,nbc) :: bcsav
++  logical :: ok
++
++  
++  !do ic=1,6
++!	if (nbc==18) then 
++!		icbh(ic) = bc(1,ic)
++!		icbl(ic) = bc(3,ic)
++!		icbk(ic) = bc(5,ic)
++!!	elseif (nbc==24) then 
++!		icbh(ic) = bc(7,ic+3)
++!		icbl(ic) = bc(9,ic+3)
++!		icbk(ic) = bc(11,ic+3)
++!	end if
++!	y2srf(ic) = bc(nbc-4,ic+nbc-9)
++!	y4srf(ic) = bc(nbc-2,ic+nbc-9)
++!	y6srf(ic) = bc(nbc,ic+nbc-9)
++ ! end do
++  
++  bcsav(:,:) = bc(:,:)
++  rads=0
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++ !do i = 1,nbc 
++!	do j = 1,nbc
++!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
++!	enddo
++ !enddo
++ !write(*,*)
++  
++  !-- LU decomposition and determinant
++    ok = .true.
++   
++  call ludcmp(bc,nbc,nbc,indx,d)
++  do i=1,nbc
++     d=d*bc(i,i)
++  end do
++  write(*,*)
++  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
++ 
++!-- Resolution
++ 
++  if (ok) then
++  do i = ifmin,ifmax
++  	
++	do j=1,nbc
++	  sc(j)=f(i,j)
++	end do
++
++	write(*,*) 'Source: ',sourcs(i)
++	call lubksb(bc,nbc,nbc,indx,sc)
++
++	loveh = sc(nbc-2)*ra*go_surf
++	lovel = sc(nbc-1)*ra*go_surf
++	lovek = sc(nbc)*ra*go0
++	delta = 1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh
++	
++	sumy2=0.d0
++	sumy4=0.d0
++	sumy6=0.d0
++
++	do ic=1,6
++	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9)
++	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9)
++	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9)
++	end do
++	
++	!write(*,*) 'SURF',n,loveh,lovel,lovek-1.d0
++	
++	ibc = 0
++	do  j = nlayer,1,-1
++		if (radbc(j)) then 
++			ibc=ibc+1
++			if (soliddim(j)) then
++				loveh1 = sc(nbc - ibc*6 -3 +1)*ra*go_surf*valini
++				lovel1 = sc(nbc -ibc*6 -3 +3)*ra*go_surf*valini
++				lovek1 = sc(nbc -ibc*6 -3 +5)*ra*go0*valini
++			else 
++				sumh=0.d0
++				suml=0.d0
++				sumk=0.d0
++				ii = nbc - (ibc+1)*6
++				jj = nbc - (ibc+1)*6 -3
++				if (j==ifirst) then 
++					icmin = 4
++				else
++					icmin = 1
++				end if
++				do ic=icmin,6
++					!print*, ii+1,jj+ic
++					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic)
++					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic)
++					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic)
++				end do
++				loveh1 = sumh*ra*go_surf*valini
++				lovel1 = suml*ra*go_surf*valini
++				lovek1 = sumk*ra*go0*valini
++			end if			
++			if (j==ifirst) then
++				layerrap = dabs(loveh1s/loveh)
++				if (layerrap > dabs(lovel1s/lovel)) layerrap = dabs(lovel1s/lovel)
++				if (layerrap > dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
++				layerrap = dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
++			endif
++
++			loveh1s = loveh1
++			lovel1s = lovel1
++			lovek1s = lovek1
++			rads = radius(j)
++			!if (radius(j)==rb) then 
++			!	write(*,301) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
++			!else if (radius(j)==rc) then
++			!	write(*,301) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
++			!else
++			!	if (j<10) then
++			!		write(*,305) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	else
++			!		write(*,306) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	end if
++			!endif
++		end if
++	end do
++			
++  end do
++  end if
++  
++   !write(*,*),dlog10(aimag(freq)*365.d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d, lovek
++  
++  
++  
++ !301 format(a4,5x,'n=',i3,5x,'h=',f14.10,5x,'l=',f14.10,5x,'k=',f14.10)
++ 301 format(a4,5x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 305 format(a4,i1,4x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 306 format(a4,i2,3x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 302 format(i5,5x,f14.10,5x,f14.10,5x,f14.10)
++ 303 format(i5,5x,e14.10,5x,e14.10,5x,e14.10,5x,e14.10)
++ 304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
++
++ end subroutine solution_nbloutput 
++
++
++
++end module lovenb_sub
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22004)
+@@ -0,0 +1,362 @@
++ subroutine lnb_setup(  ksr, ksi, hsr, hsi, lsr, lsi,  dnfreq,  frequencies,  ddegmax, ddegmin, &
++          dgo0,  dr0,  dmu0, dallow_layer_del,  source_type, ddisplay, dnlayer,  dradius,    &
++          dvic,  dlac,  dmuc, dvic2,  dmuc2,  droc, dburgers,  dsoliddim)
++ use lnb_param
++ use util
++ implicit none
++ 
++ integer :: source_type, fr, i, IERR
++ double precision :: T,cst, fluid_tscale,g
++ double precision, dimension(dnfreq,ddegmax+1) :: hsr,hsi,lsr,lsi,ksr,ksi
++ double complex, dimension(dnfreq,ddegmax+1) :: hs,ls,ks
++ double precision, dimension(dnfreq) :: frequencies
++
++ double precision   :: dmu0,dgo0,dr0
++ logical :: dallow_layer_del, ddisplay
++ integer :: dnfreq, ddegmax, ddegmin
++ integer :: dnlayer
++ double precision, dimension(dnlayer) :: droc,dlac,dmuc,dvic,dvic2,dmuc2 
++ double precision, dimension(dnlayer+1) :: dradius 
++ double precision, dimension(dnlayer) :: dsoliddim,dburgers 
++
++ !assign local variables to public variables
++ mu0=dmu0; go0=dgo0; r0=dr0; allow_layer_del=dallow_layer_del; 
++ nfreq=dnfreq;degmax=ddegmax;degmin=ddegmin;nlayer=dnlayer; 
++ allocate(roc(nlayer),lac(nlayer),muc(nlayer),vic(nlayer),vic2(nlayer),muc2(nlayer))
++ roc=droc; lac=dlac; muc=dmuc; vic=dvic; vic2=dvic2; muc2=dmuc2; 
++ allocate(radius(nlayer+1),soliddim(nlayer),burgers(nlayer),radbc(nlayer+1))
++ radius=dradius; 
++
++	display=ddisplay
++
++	do i=1,nlayer
++	if (NINT(dsoliddim(i))==1) then
++		soliddim(i)=.true.
++	else
++		soliddim(i)=.false.
++	endif 
++	if (NINT(dburgers(i))==1) then
++		burgers(i)=.true.
++	else
++		burgers(i)=.false.
++	endif 
++	enddo
++
++ pi=dacos(-1.d0)
++
++ ra=radius(nlayer+1)
++ rb = 3480.d3
++ rc = 1221.5d3
++ r0=ra
++ cst = 365.25d0*24.d0*3600.d0*1000.d0 
++
++ benchmark_spada=.false.
++ !frequencies=1E-5/cst*2*pi
++
++	hs(:,:)=complex(0.d0,0.d0)
++	ks=hs
++	ls=hs
++ 
++ call love_numbers(frequencies,source_type,hs,ls,ks)
++
++ hsr=dble(hs)
++ hsi=dimag(hs)
++ ksr=dble(ks)
++ ksi=dimag(ks)
++ lsr=dble(ls)
++ lsi=dimag(ls)
++
++end subroutine
++
++!==================== 
++ subroutine love_numbers(frequencies,source_type,hs,ls,ks)
++!====================
++
++ use model
++ use lovenb_sub
++
++ double complex, dimension(:,:), pointer :: bc
++ double complex, dimension(:,:), pointer :: f
++ character*40,     dimension(:),   pointer :: sourcs
++ integer,          dimension(:),   pointer :: indx,indx2
++ integer :: nbc,nfext,ifreq,ntheta2,nphi2
++ double precision :: cst,prec, delta!,h1,h2,k1,k2,l1,l2,dh1,dh2,dk1,dk2,dl1,dl2
++ double precision :: he,ke,le
++ double precision :: frequencies(nfreq), fluid_tscale
++ double complex :: loveh,lovel,lovek
++ logical :: logi
++ integer :: i,j,k,n, fr,m,l, source_type
++ double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
++
++
++ double precision :: cpu_time1(100)
++ integer :: cpu_count
++
++ pi=acos(-1.d0)
++
++
++  open(unit=101, file='lastrun_log')
++ cpu_count=0
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Done !', cpu_time1(cpu_count), 's'
++ !write(101,*),''
++
++
++ !double precision, dimension(:), pointer :: vech,vecl,veck,vecd,vec
++
++ radbc(:)=.false.
++ radbc(1)=.true.
++ radbc(nlayer+1)=.true.
++ do i=2,nlayer
++  if ((.not.soliddim(i)).or.(.not.soliddim(i-1))) then
++   radbc(i)=.true.
++  end if
++ end do
++ 
++
++ ! Test number of interfaces and of boundary conditions
++  nbc = 0
++  do i=1,nlayer+1 
++ if (radbc(i)) nbc=nbc+6
++  enddo
++
++
++ ifmin=source_type
++ ifmax=source_type
++ 
++
++  if (display) then
++	 print*,'model init'
++ endif
++
++
++ call model_init2(nbc)  
++
++
++  if (display) then
++	 print*, 'done'
++ endif
++
++ nfext = 13 ! Number of potential excitation sources
++ allocate( bc(nbc,nbc), indx(nbc) )
++ allocate( f(nfext,nbc), sourcs(nfext) )
++
++ sourcs(1)='ICB --Volumetric Potential' 
++ sourcs(2)='ICB --Pressure'
++ sourcs(3)='ICB --Loading'
++ sourcs(4)='ICB --Tangential Traction'
++ sourcs(5)='CMB --Volumetric Potential'
++ sourcs(6)='CMB --Pressure'
++ sourcs(7)='CMB --Loading'
++ sourcs(8)='CMB --Tangential Traction'
++ sourcs(9)='SURF--Volumetric Potential'
++ sourcs(10)='SURF--Pressure'
++ sourcs(11)='SURF--Loading'
++ sourcs(12)='SURF--Tangential Traction'
++
++ 
++ if (display)  print*, 'source_type =', source_type, ', ', sourcs(source_type)
++ if (source_type<9) then
++  print*,'Error: Internal loading not supported yet, please input source_type between 9 and 12'
++  print*,'Reference:'
++  do i=1,12
++   print*,i,sourcs(i)
++  enddo
++ return
++ endif
++
++
++! Print/write control
++ !display=.false. ! Printing on the terminal
++ 
++ ! Calculation optimization (avoids underflows at high degree)
++ !allow_layer_del = .true.     ! Do we allow deletion of the central layers in the calculation if necessary?
++ layerrap = 1.d0  ! Max absolute ratio between love numbers at the top and bottom of the last layer
++ 
++ ! Mode search parameters
++ freq0 = -1.d10
++ logi = .true.
++ cst = 365.25d0*24.d0*3600.d0*1000.d0 
++ prec = 1.d-8
++ firstmode = 0.d0
++
++ 
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ !write(101,*),''
++ if (display) then
++ write(*,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ write(*,*),''
++ endif
++
++! Spherical Harmonics initialization
++
++
++
++! -- SH degree loop
++
++
++ bc(:,:)=0.d0
++ 
++ 
++  !write(101,*), 'Calculating impulse response'
++ if (display) then
++ write(*,*), 'Calculating impulse response'
++ endif
++ 	if (maxval(frequencies).ne.0 .and. display) then
++		print*, 'Frequency ranging from ', minval(dabs(frequencies)), &
++		' to ', maxval(frequencies),' s^-1'
++	endif 
++
++	if (frequencies(1)==0 .and. display) then
++		print*,'Elastic calculation'
++	endif
++ deg=degmin-1
++
++
++
++
++ do l = degmin,degmax 
++ deg=deg+1
++ !write(*,*)
++  !write(*,*)
++  !write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
++  if (display) then
++  write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
++  endif
++
++  !write(*,*)
++  !!write(101,*), fr, T
++
++
++
++
++ do fr=1,nfreq
++
++  !!write(101,*),fr
++
++
++  !the way Fourier Transform algorithms works : they calculate for fmin=0 to fmax=1/dt
++  !by aliasing for this algo, f=1/(2*dt) to f=1/dt is the same as f=-1/(2*dt) to f=0
++  !but physics-wise, the Earth response at high frequency is not what we are looking for
++  !the [0 ; 1/(2*dt)] interval and its negative counterpart are what we are looking for
++  !therefore in our love number calculation the frenquency set must be [0 ; 1/(2*dt) ] U [-1/(2*dt) 0[
++
++  !if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
++  ! fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
++   !print*,fluid_tscale
++  ! freq=complex(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
++! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
++  !elseif (fr <= nfreq/2+1) then
++  ! freq=complex(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
++  !else 
++  ! freq=complex(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
++  !end if
++  
++  freq=complex(0.d0,frequencies(fr))
++  !print*,fr,freq
++
++  !if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
++  !freq=dble(fr)/T
++  !--  Elastic Love number calculation
++  !freq=2.d0*pi/(1e4*cst)*complex(0.d0,1.d0)
++
++   !if (deg==2) then ! for rotationnal feedback
++   !ifmin=9;ifmax=9 ! Sets tidal calculation
++   !bc(:,:)=0.d0
++   !call boundary_conditions_matrix(bc,indx,nbc)
++   !call external_forcing(deg,f,sourcs,nfext,nbc) 
++   !call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++   !k2tidal(fr)=lovek-1.d0
++   !h2tidal(fr)=loveh
++   !l2tidal(fr)=lovel
++   !ifmin=11;ifmax=11 ! Sets back loading calculation
++   !endif
++   !print*,(deg)
++   bc(:,:)=0.d0
++   call boundary_conditions_matrix(bc,indx,nbc)
++	!print*,'bc ok', layerrap
++   call external_forcing(deg,f,sourcs,nfext,nbc) 
++	!print*,'forcing ok', layerrap
++   call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++	!print*,'first_sol', layerrap, epsdb
++
++   ! Automatic reduction of the number of layers when the attenuation with depth becomes too strong
++   if (allow_layer_del.eqv..true.) then
++
++     do while ((layerrap<=epsdb).and.(nbc>12).or.(isnan(layerrap)) )
++ !		print*,'trying to delete layer', layerrap, epsdb, nbc
++     !write(101,*)
++     !write(101,*) 'Rapport Nombre de Love surface/profondeur faible : ', layerrap 
++     !write(101,*) ' Changement d''interface de debut d''integration' 
++
++     if (display) then
++     write(*,*)
++     write(*,*) 'Surface/Depth Love number ratio small: ', layerrap 
++     write(*,*) ' Changing the interface where the integration starts'
++     endif
++
++     nbc = nbc-6
++     n = 1
++     do while (.not.radbc(n))
++      n = n+1
++     end do
++     radbc(n) =.false.
++     !write(101,*) ' New start interface: ', radius(n+1)/1.d3,' km'
++     if (display) then
++     write(*,*) ' New start interface: ', radius(n+1)/1.d3,' km'
++     endif
++        
++     deallocate( bc, indx, f, sourcs )
++     allocate( bc(nbc,nbc), indx(nbc) )
++     allocate( f(nfext,nbc), sourcs(nfext) )
++  
++
++     bc(:,:)=0.d0
++     call boundary_conditions_matrix(bc,indx,nbc)
++     call external_forcing(deg,f,sourcs,nfext,nbc) 
++     call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++    end do
++   end if
++
++   !-- Saving Love numbers
++
++
++    hs(fr,deg+1) = loveh
++    ks(fr,deg+1) = lovek - 1.d0
++    ls(fr,deg+1) = lovel
++
++	!print*,dble(hs(fr,deg+1)), dimag(hs(fr,deg+1)),dble(ks(fr,deg+1)), dimag(ks(fr,deg+1))
++
++    !if (fr==1) then ! if this is supposed to be fluid response
++    !  ! then cut off the imaginary part, which is inherited from approximating t=infinity to a few million years (see above the setting of freq)
++    ! hs(fr,deg+1)=real(hs(fr,deg+1))
++    ! ks(fr,deg+1)=real(ks(fr,deg+1))
++    ! ls(fr,deg+1)=real(ls(fr,deg+1))
++    !endif
++!~~~~~~~~~~~~~~TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ if (benchmark_spada) then
++ write(17,*), deg,fr,real(hs(fr,deg+1)), aimag(hs(fr,deg+1)),real(ks(fr,deg+1)), aimag(ks(fr,deg+1))
++ endif
++!~~~~~~~~~~~~~~END TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++
++  !write(*,*) 'Elastic Love Numbers:  ',ke,he,le 
++  !write(ifile1,*) deg,ke,he,le
++ end do
++ 
++ end do
++
++
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ !write(101,*),''
++ if (display) then
++ write(*,*), 'Love number calc done :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ write(*,*),''
++ endif
++
++ deallocate( bc, indx, f, sourcs )
++end subroutine
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22004)
+@@ -0,0 +1,422 @@
++module model
++ 
++ implicit none
++
++ contains
++
++  subroutine model_init2(nbc)
++!--------------------- 
++ use lnb_param
++
++  double precision :: ro,g,drad,la,mu,ro1,ro2,x
++  logical :: solid,test
++  integer :: nbc,i,n,j
++
++
++
++  !- Calculus parameters    
++  pi=dacos(-1.d0)
++  epsdb=epsilon(1.d0)
++  
++  !write(101,*), 'Epsilon machine = ',epsdb
++  !write(101,*), 'Constants:'
++  !write(101,*), ' pi = ',pi
++  !write(101,*), ' G  = ',GG 
++  !write(101,*), 'Dimensioned scales:'
++  !write(101,*), ' rigidity mu0 = ',mu0
++  !write(101,*), ' gravity  go0 = ',go0
++  !write(101,*), ' distance r0  = ',r0
++  
++ 
++
++ 
++ !call earth_homogeneous_layers_prembased(radius,nlayer,roc,lac,muc,g,solid) !yields the Earth layers radii, density, lamé parameters, gravity and solid/liquid state boolean identifier
++ 
++ !if (benchmark_spada) then
++ ! muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.28340d11 
++ ! muc(4) = 1.05490d11; muc(5) = 0.70363d11; muc(6) = 0.50605d11
++ ! roc(1) = 10751.d0; roc(2) = 10750.d0; roc(3) = 4978.d0 
++ ! roc(6)=3300.d0
++ !else
++  !muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.20425d11 
++  !muc(4) = 0.870257d11; muc(5) = 0.870257d11; muc(6) = 0.510268d11
++  !roc(1) = 10987.9d0; roc(2) = 10986.9d0; roc(3) = 4903.58d0 
++  !roc(4) = 3628.29d0; roc(5) = 3628.29d0; roc(6) = 3113.94d0
++ !endif
++
++ !vic2=vic/vicratio
++ !muc2=muc/mucratio
++
++ if (display) then
++	print*, '  Layer top boundary        rho                       la                        mu                        eta' 
++ do i = 1,nlayer
++  ! print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
++  if (burgers(i)) then
++  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i),muc2(i),vic2(i), 'B'
++  else
++  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
++  endif
++ end do
++
++ endif
++ !write(101,*),
++
++
++ call earth_nlayers(1.d0,ro,la,mu,g,solid)
++   go_surf = g
++   ro_mean = 3.d0/4.d0*go_surf/(pi*GG*ra)
++	if (display) then
++		print*, 'Surface Gravity: ', go_surf, ' m.s^-2, mean density: ', ro_mean, ' kg.m^-3'
++		print*, 'Center of the Earth approximated at r=', radius(1)/1e3, ' km'
++	endif 
++  
++  ! Test number of interfaces and of boundary conditions
++  n = 0
++  do i=1,nlayer+1 
++ if (radbc(i)) n=n+1
++  enddo
++  if (nbc/=(6*n)) then
++ !write(101,*),
++ print*, 'Error nbc should be ',6*n,' instead of ',nbc
++ stop
++  endif
++  
++  ! Test solid-liquid boundaries
++ test = .false.
++  do i = 1,nlayer
++ if (radbc(i)) test = .true.
++ if (test) then
++ if ((.not.soliddim(i)).and.((.not.radbc(i)).or.(.not.radbc(i+1)))) then
++  print*, 'Error in model definition: one fluid layer is not set with correct boundary conditions'
++  stop
++ endif
++ endif
++  enddo
++  
++  !-- Display a few quantities
++  !write(101,*), ' surface radius = ',ra
++  !write(101,*), ' CMB radius = ',rb
++  !write(101,*), ' ICB radius = ',rc
++  !write(101,*), ' go surface = ',go_surf
++  !write(101,*), ' mean density = ',ro_mean 
++  
++  !-- Diplsay ICB conditions
++  !x=rc/ra
++  !write(101,*), 
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'ICB, g = ',g
++  !write(101,*), 'ICB, ro(Inner Core) = ', ro1
++  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'ICB, g = ',g
++  !write(101,*), 'ICB, ro(Outer Core) = ', ro2
++  !go_icb = g
++  
++  !-- Display CMB conditions
++  !x=rb/ra
++  !write(101,*),
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'CMB, g = ',g
++  !write(101,*), 'CMB, ro(Outer Core) = ', ro1
++  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'CMB, g = ',g
++  !write(101,*), 'CMB, ro(Mantle) = ', ro2
++  !go_cmb = g
++ 
++ end subroutine model_init2
++
++
++ subroutine earth_homogeneous_layers_prembased(radin,nl,rot,lat,mut,GR,solid)
++ use lnb_param
++   
++   double precision :: x0,GR
++   logical :: solid
++   integer                 :: i,j,nl
++   doubleprecision      :: la,mu,ro,vp,vs,RT
++   doubleprecision      :: t1,t2,t3,t4,r1,r2
++   doubleprecision, dimension(14) :: r
++   doubleprecision, dimension(13,4) :: d,p,s
++   doubleprecision, dimension(:), pointer :: radin
++   doubleprecision, dimension(:), pointer :: rot,lat,mut
++    doubleprecision, dimension(nl+1) :: rad
++   
++   
++   RT = ra
++   r(1) = 0.d0;     r(2) = 1221.5d0; r(3) = 3480.d0; r(4) = 3630.d0
++   r(5) = 5600.d0;  r(6) = 5701.d0;  r(7) = 5771.d0; r(8) = 5971.d0
++   r(9) = 6151.d0; r(10) = 6291.d0; r(11) = 6346.6d0
++   r(12) = 6356.d0; r(13) = 6368.d0; r(14) = ra
++  
++!   if ((r(14)*1.d3) /= ra) stop'Problem in prem: Earth radius /= ra !' 
++!
++  d(:,:) = 0.d0
++  d(1,1) = 13.0885d0;               d(1,3) = -8.8381d0 
++  d(2,1) = 12.5815d0; d(2,2) = -1.2638d0; d(2,3) = -3.6426d0; d(2,4) = -5.5281d0
++  d(3,1) = 7.9565d0 ; d(3,2) = -6.4761;   d(3,3) = 5.5283d0;  d(3,4) = -3.0807d0
++  d(4,1) = 7.9565d0 ; d(4,2) = -6.4761;   d(4,3) = 5.5283d0;  d(4,4) = -3.0807d0
++  d(5,1) = 7.9565d0 ; d(5,2) = -6.4761;   d(5,3) = 5.5283d0;  d(5,4) = -3.0807d0
++  d(6,1) = 5.3197d0 ; d(6,2) = -1.4836d0
++  d(7,1) = 11.2494d0; d(7,2) = -8.0298d0
++  d(8,1) = 7.1089d0 ; d(8,2) = -3.8045d0
++  d(9,1) = 2.6910d0 ; d(9,2) = 0.6924d0
++  d(10,1) = 2.6910d0; d(10,2) = 0.6924d0
++  d(11,1) = 2.9d0  
++  d(12,1) = 2.6d0  
++
++! ocean
++  if (soliddim(13).eqv..false.) then
++   d(13,1) = 1.02d0 
++
++! continental
++  else
++  d(13,1) = d(12,1)
++  end if
++
++  p(:,:) = 0.d0
++  p(1,1) = 11.2622d0 ; p(1,3) = -6.3640d0
++  p(2,1) = 11.0487d0 ; p(2,2) = -4.0362d0; p(2,3)  = 4.8023d0; p(2,4) = -13.5732d0
++  p(3,1) = 15.3891d0 ; p(3,2) = -5.3181d0; p(3,3)  = 5.5242d0; p(3,4) = -2.5514d0
++  p(4,1) = 24.952d0 ; p(4,2)  = -40.4673d0; p(4,3) = 51.4832d0; p(4,4) = -26.6419d0
++  p(5,1) = 29.2766d0 ; p(5,2) = -23.6027d0; p(5,3) = 5.5242d0; p(5,4) = -2.5514d0
++  p(6,1) = 19.0957d0 ; p(6,2)  = -9.8672d0
++  p(7,1) = 39.7027d0 ; p(7,2)  = -32.6166d0
++  p(8,1) = 20.3926d0 ; p(8,2)  = -12.2569d0
++  p(9,1) = 4.1875d0 ; p(9,2)  = 3.9382d0
++  p(10,1) = 4.1875d0 ; p(10,2) = 3.9382d0
++  p(11,1) = 6.8d0 
++  p(12,1) = 5.8d0
++!
++! ocean
++  if (soliddim(13).eqv..false.) then
++  p(13,1) = 1.45d0 
++!
++! continental
++  else
++  p(13,1) = p(12,1)
++  end if
++!----
++!
++  s(:,:) = 0.d0
++!
++  s(1,1) = 3.6678d0; s(1,3) = -4.4475d0
++
++  s(3,1) = 6.9254d0; s(3,2) = 1.4672d0; s(3,3) = -2.0834d0; s(3,4) = 0.9783d0
++  s(4,1) = 11.1671d0; s(4,2) = -13.7818d0; s(4,3) = 17.4575d0; s(4,4) = -9.2777d0
++  s(5,1) = 22.3459d0; s(5,2) = -17.2473d0; s(5,3) = -2.0834d0; s(5,4) = 0.9783d0
++  s(6,1) = 9.9839d0; s(6,2) = -4.9324
++  s(7,1) = 22.3512d0; s(7,2) = -18.5856d0 
++  s(8,1) = 8.9496d0; s(8,2) = -4.4597
++  s(9,1) = 2.1519d0; s(9,2) = 2.3481d0
++  s(10,1) = 2.1519d0; s(10,2) = 2.3481d0
++  s(11,1) = 3.9d0 
++  s(12,1) = 3.2d0 
++!
++! ocean (please don't modify)
++  if (soliddim(13).eqv..false.) then
++!
++! continental
++  else
++  s(13,1) = s(12,1)
++  end if
++!
++!
++  r(:) = r(:)*1.d3
++  
++  !- handling the first layer : central sphere
++  rad = radin
++  rad(1) = 0.d0
++  
++  do j = 1,nl
++  
++ ro = 0.d0
++ vp = 0.d0
++ vs = 0.d0
++
++ do i = 1,13
++
++  r1 = 0.d0
++  r2 = 0.d0
++  if ((rad(j) > r(i)).and.(rad(j) <= r(i+1))) then
++   if (rad(j+1) <= r(i+1)) then
++    r2 = rad(j+1)
++    r1 = rad(j)
++   else
++    r2 = r(i+1)
++    r1 = rad(j)
++   end if
++  else if (rad(j) <= r(i)) then
++   if ((rad(j+1) > r(i)).and.(rad(j+1) <= r(i+1))) then
++    r2 = rad(j+1)
++    r1 = r(i)
++   else if (rad(j+1) > r(i+1)) then
++    r2 = r(i+1)
++    r1 = r(i)
++   end if
++  end if
++
++  t1 = d(i,1)/3.d0
++  t2 = d(i,2)/(Rt*4.d0)
++  t3 = d(i,3)/((Rt**2)*5.d0)
++  t4 = d(i,4)/((Rt**3)*6.d0)
++  ro =  ro + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++     
++  t1 = p(i,1)/3.d0
++  t2 = p(i,2)/(Rt*4.d0)
++  t3 = p(i,3)/((Rt**2)*5.d0)
++  t4 = p(i,4)/((Rt**3)*6.d0)
++  vp =  vp + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++     
++  t1 = s(i,1)/3.d0
++  t2 = s(i,2)/(Rt*4.d0)
++  t3 = s(i,3)/((Rt**2)*5.d0)
++  t4 = s(i,4)/((Rt**3)*6.d0)
++  vs =  vs + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++
++ end do
++ ro = ro*3 / (rad(j+1)**3-rad(j)**3)
++ vp = vp*3 /(rad(j+1)**3-rad(j)**3)
++ vs = vs*3 / (rad(j+1)**3-rad(j)**3)
++ mu = ro*vs**2
++ la = ro*vp**2 - 2.d0*mu
++ ro = ro*1.d3
++ la = la*1.d9
++ mu = mu*1.d9
++
++ !print*, rad(j+1), ro, la , mu
++ rot(j) = ro
++ lat(j) = la
++ mut(j) = mu
++  end do
++   
++   
++ end subroutine earth_homogeneous_layers_prembased
++
++
++ subroutine earth_nlayers(x0,ro,la,mu,GR,solid)
++ use lnb_param
++!---------------------------------------
++! Gets planet properties at non-dimentionalized radius x0:
++!ro: density
++!la: Lame lambda constant
++!mu: Lame mu constant (shear modulus)
++!GR: gravity
++!solid: boolean, true if solid, otherwise liquid
++    integer                 :: i,j
++    doubleprecision      :: la,mu,CST,GR
++    doubleprecision      :: x,x0,xx0,ro
++    doubleprecision      ::r1,r2
++    logical       :: solid
++    double precision, dimension(nlayer+1) :: r
++    
++
++
++    solid = .true.
++
++    r(:) = radius(:)
++    r(1) = 0.d0
++    x    = x0   * ra
++    CST = 4.d0*pi*GG/3.d0
++    if ( x > r(nlayer+1) ) x = r(nlayer+1)
++    
++    GR = 0.d0
++    
++    do i = 1,nlayer
++
++ if (x > r(i)) then 
++
++  r2 = r(i+1)
++  r1 = r(i)
++  ro = roc(i)
++
++  if (x <= r(i+1)) then
++
++   GR = GR + ro*(x**3-r1**3)
++   if (x > epsdb) GR = GR*CST/(x**2)
++
++  else
++   GR = GR + ro*(r2**3-r1**3)
++  end if
++ end if
++
++ if ((x >= r(i)).and.(x < r(i+1))) then    
++  la = lac(i)
++  mu = muc(i)
++  ro = roc(i)
++  if ( soliddim(i).eqv..false. ) solid = .false.
++
++ end if
++
++    end do
++
++    if (x>=r(nlayer+1)) then
++ la = lac(nlayer)
++ mu = muc(nlayer)
++ ro = roc(nlayer)
++  if ( soliddim(nlayer).eqv..false. ) solid = .false.
++
++     end if
++
++ end subroutine earth_nlayers
++ 
++ subroutine earth_nlayers_viscoelas(x0,ro,la,mu,GR,solid)
++ use lnb_param
++!---------------------------------------
++! Defines the earth rheology at non-dimensionalized radius x0 and angular frequency freq (global/public variable)
++
++    integer                 :: i
++    double complex   :: la, mu, cst
++    double precision      :: GR,la0,mu00,ka,mu1,mu2,vi2
++    double precision      :: x,x0,xx0,ro,vi
++    logical       :: notfound,solid,burg
++
++
++
++  call earth_nlayers(x0,ro,la0,mu00,GR,solid)
++  
++  x    = x0 * ra
++ do i = 1,nlayer
++ if ((x >= radius(i)).and.(x < radius(i+1))) then
++ vi = vic(i) 
++ vi2 = vic2(i)
++ mu2=muc2(i)
++ burg=burgers(i)
++ end if
++ end do
++
++  if (burg.eqv..true.) then
++ mu1=mu00
++
++ if ((vi*freq) /= 0.d0) then
++  ka=la0 + 2.d0/3.d0*mu00
++  !print*,mu1,mu2,vi,vi2
++   mu=mu1*freq*(freq+mu2/vi2)/((freq+mu2/vi2)*(freq+mu1/vi)+mu1/vi2*freq)
++  !la=4*la0*mu**2/(2*mu*(3*la0+2*mu)-3*la0*mu)
++  la=ka-2.d0/3.d0*mu
++  !print*,freq,mu,la
++ else
++  mu = mu00
++  la = la0
++ endif
++  else
++   ka = la0 + 2.d0/3.d0*mu00
++   cst = vi*freq
++   if (cst /= 0.d0) then
++  mu = mu00/(1.d0+mu00/cst)
++  la = (la0 + mu00*ka/cst)/(1.d0 + mu00/cst)
++   else
++  mu = mu00
++  la = la0
++   endif
++  endif
++   
++  !
++  !!write(101,*), freq,cst,la0,la,mu00,mu,vi
++
++ end subroutine earth_nlayers_viscoelas
++ 
++ 
++
++
++end module model
+Index: ../trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 22004)
+@@ -69,7 +69,7 @@
+ 	int i;
+ 
+ 	/*Initialize vector with number of vertices*/
+-	int numvertices=femmodel->vertices->NumberOfVertices();
++	int numvertices=femmodel->vertices->NumberOfVertices(); if (numvertices==0)return;
+ 	Vector<IssmDouble>* vec_mask_ice=new Vector<IssmDouble>(numvertices); //vertices that have ice at next time step
+ 	/*Fill vector with values: */
+ 	for(i=0;i<femmodel->elements->Size();i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22004)
+@@ -22,6 +22,11 @@
+ 	char**      requestedoutputs = NULL;
+ 	char*       fieldname = NULL;
+ 	IssmDouble  time;
++	
++	/*love numbers: */
++	IssmDouble* frequencies = NULL;
++	int         nfreq=0;
++	int         dummy;
+ 
+ 	/*parameters for mass flux:*/
+ 	int          mass_flux_num_profiles     = 0;
+@@ -60,6 +65,26 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.iscontrol",InversionIscontrolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.type",InversionTypeEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.calving.law",CalvingLawEnum));
++	
++	/*gia: */
++	parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
++	
++	/*love numbers: */
++	iomodel->FetchData(&nfreq,"md.love.nfreq");
++	parameters->AddObject(new IntParam(LoveNfreqEnum,nfreq));
++
++	iomodel->FetchData(&frequencies,&dummy,&dummy,"md.love.frequencies");
++	parameters->AddObject(new DoubleVecParam(LoveFrequenciesEnum,frequencies,nfreq));
++	xDelete<IssmDouble>(frequencies);
++	
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.sh_nmax",LoveShNmaxEnum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.sh_nmin",LoveShNminEnum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.g0",LoveG0Enum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.r0",LoveR0Enum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.mu0",LoveMu0Enum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.allow_layer_deletion",LoveAllowLayerDeletionEnum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.forcing_type",LoveForcingTypeEnum));
++
+ 	  {/*This is specific to ice...*/
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.mesh.elementtype",MeshElementtypeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.reltol",SteadystateReltolEnum));
+@@ -79,7 +104,6 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslr",TransientIsslrEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
+ 
+ 		/*For stress balance only*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 22004)
+@@ -35,7 +35,7 @@
+ 	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+ 
+ 	/*Create elements, vertices and materials, independent of analysis_enum: */
+-	CreateElementsVerticesAndMaterials(elements,vertices,materials,iomodel,nummodels);
++	CreateElementsVerticesAndMaterials(elements,vertices,materials,iomodel,nummodels,solution_enum);
+ 
+ 	/*Create Parameters*/
+ 	CreateParameters(parameters,iomodel,rootpath,toolkitfile,solution_enum);
+@@ -67,8 +67,10 @@
+ 	}
+ 
+ 	/*Solution specific updates*/
++	if(VerboseMProcessor()) _printf0_("   updating elements and materials for control parameters" << "\n");
+ 	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
+ 	#ifdef _HAVE_DAKOTA_
++	if(VerboseMProcessor()) _printf0_("   updating elements and materials for uncertainty quantification" << "\n");
+ 	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
+ 	#endif
+ 	if(solution_enum==TransientSolutionEnum){
+@@ -76,6 +78,7 @@
+ 	}
+ 
+ 	/*Output definitions dataset: */
++	if(VerboseMProcessor()) _printf0_("   creating output definitions" << "\n");
+ 	CreateOutputDefinitions(elements,parameters,iomodel);
+ 
+ 	/* Sort datasets:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22004)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials,IoModel* iomodel,const int nummodels){
++void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials,IoModel* iomodel,const int nummodels,int solution_type){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -14,6 +14,8 @@
+ 	int materials_type;
+ 	bool control_analysis;
+ 	bool dakota_analysis;
++	int nnat,dummy;
++	int* nature=NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+@@ -23,6 +25,9 @@
+ 	/*Did we already create the elements? : */
+ 	_assert_(elements->Size()==0);
+ 
++	/*Setup matpar counter in iomodel before we call on element constructors: */
++	iomodel->matparcounter=iomodel->numberofelements+1;
++
+ 	/*Create elements*/
+ 	if(control_analysis)iomodel->FetchData(2,"md.inversion.min_parameters","md.inversion.max_parameters");
+ 	switch(iomodel->meshelementtype){
+@@ -111,6 +116,102 @@
+ 					_error_("Mesh not supported yet");
+ 			}
+ 			break;
++		case MaterialsEnum: 
++	
++			//we have several types of materials. Retrieve this info first: 
++			iomodel->FetchData(&nature,&nnat,&dummy,"md.materials.nature");
++
++			//make sure materials that are not tied to elements come last:  for now, only Matlitho qualifies.
++			for(int i=0;i<nnat;i++){ 
++				if (IoCodeToEnumMaterials(nature[i])==MatlithoEnum){
++					int temp=nature[nnat-1];
++					nature[nnat-1]=nature[i];
++					nature[i]=temp;
++				}
++			}
++
++			//go through list of materials, and create them: 
++			for(int i=0;i<nnat;i++){ 
++				switch(IoCodeToEnumMaterials(nature[i])){ //{{{
++					case MaticeEnum:
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
++						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
++						switch(iomodel->domaindim){
++							case 2:
++								elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++								break;
++							case 3:
++								break;
++							default:
++								_error_("Mesh not supported yet");
++						}
++						break;
++					case MatlithoEnum:
++						iomodel->FetchData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
++						materials->AddObject(new Matlitho(materials->Size()+1,iomodel));
++						iomodel->DeleteData(9,"md.materials.radius","md.materials.viscosity","md.materials.lame_lambda","md.materials.lame_mu","md.materials.burgers_viscosity","md.materials.burgers_mu","md.materials.isburgers","md.materials.issolid","md.materials.density");
++						break;
++
++					case MatenhancediceEnum:
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
++						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
++						switch(iomodel->domaindim){
++							case 2:
++								elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++								elements->InputDuplicate(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
++								break;
++							case 3:
++								break;
++							default:
++								_error_("Mesh not supported yet");
++						}
++						break;
++					case MatdamageiceEnum:
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
++						iomodel->FetchDataToInput(elements,"md.damage.D",DamageDEnum);
++						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
++						switch(iomodel->domaindim){
++							case 2:
++								elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++								elements->InputDuplicate(DamageDEnum,DamageDbarEnum);
++								break;
++							case 3:
++								break;
++							default:
++								_error_("Mesh not supported yet");
++						}
++						break;
++					case MatestarEnum:
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
++						iomodel->FetchDataToInput(elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
++						for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
++						switch(iomodel->domaindim){
++							case 2:
++								elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++								elements->InputDuplicate(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
++								elements->InputDuplicate(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
++								break;
++							case 3:
++								break;
++							default:
++								_error_("Mesh not supported yet");
++						}
++						break;
++
++					default:
++						_error_("Materials "<<EnumToStringx(IoCodeToEnumMaterials(nature[i]))<<" not supported");
++
++				} //}}}
++			}
++			//Free ressources:
++			xDelete<int>(nature);
++			break;
++
+ 		default:
+ 			_error_("Materials "<<EnumToStringx(materials_type)<<" not supported");
+ 	}
+@@ -120,7 +221,7 @@
+ 				"md.material.rheology_n","md.damage.D","md.inversion.min_parameters","md.inversion.max_parameters");
+ 
+ 	/*Add new constant material property to materials, at the end: */
+-	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
++	materials->AddObject(new Matpar(iomodel));//put it at the end of the materials
+ 
+ 	/*Create vertices: */
+ 
+@@ -128,7 +229,7 @@
+ 	iomodel->FetchData(6,"md.mesh.x","md.mesh.y","md.mesh.z","md.geometry.base","md.geometry.thickness","md.mask.ice_levelset");
+ 	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->FetchData(3,"md.mesh.lat","md.mesh.long","md.mesh.r");
+ 	
+-	CreateNumberNodeToElementConnectivity(iomodel);
++	CreateNumberNodeToElementConnectivity(iomodel,solution_type);
+ 
+ 	for(i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]) vertices->AddObject(new Vertex(i+1,i,i,iomodel));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 22003)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 22004)
+@@ -11,7 +11,7 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+ /*Creation of fem datasets: general drivers*/
+-void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials, IoModel* iomodel,const int nummodels);
++void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials, IoModel* iomodel,const int nummodels,int solution_type);
+ void CreateParameters(Parameters*parameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type);
+ void CreateParametersAutodiff(Parameters* parameters,IoModel* iomodel);
+ void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type);
+@@ -36,5 +36,5 @@
+ 
+ /*Connectivity*/
+ void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
+-void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
++void CreateNumberNodeToElementConnectivity(IoModel* iomodel,int solution_type);
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 22004)
+@@ -13,7 +13,7 @@
+ #include "../../shared/io/io.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateNumberNodeToElementConnectivity(IoModel* iomodel){
++void CreateNumberNodeToElementConnectivity(IoModel* iomodel,int solution_type){
+ 
+ 	/*Intermediary*/
+ 	int i,j;
+@@ -27,28 +27,35 @@
+ 	if(iomodel->numbernodetoelementconnectivity) return;
+ 
+ 	/*Some checks if debugging*/
+-	_assert_(iomodel->numberofvertices);
+-	_assert_(iomodel->numberofelements);
+-	_assert_(iomodel->elements);
++	if (solution_type==LoveSolutionEnum){
++		/*do nothing, we don't have a mesh. Just initialize to NULL*/
++	}
++	else{
+ 
+-	/*Allocate ouput*/
+-	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
++		/*Some checks if debugging*/
++		_assert_(iomodel->numberofvertices);
++		_assert_(iomodel->numberofelements);
++		_assert_(iomodel->elements);
+ 
+-	/*Get element width*/
+-	switch(iomodel->meshelementtype){
+-		case TriaEnum:  elementswidth=3; break;
+-		case TetraEnum: elementswidth=4; break;
+-		case PentaEnum: elementswidth=6; break;
+-		default:                   _error_("mesh not supported yet");
+-	}
++		/*Allocate ouput*/
++		connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+-	/*Create connectivity table*/
+-	for (i=0;i<iomodel->numberofelements;i++){
+-		for (j=0;j<elementswidth;j++){
+-			vertexid=iomodel->elements[elementswidth*i+j];
+-			_assert_(vertexid>0 && vertexid-1<iomodel->numberofvertices);
+-			connectivity[vertexid-1]+=1;
++		/*Get element width*/
++		switch(iomodel->meshelementtype){
++			case TriaEnum:  elementswidth=3; break;
++			case TetraEnum: elementswidth=4; break;
++			case PentaEnum: elementswidth=6; break;
++			default:                   _error_("mesh not supported yet");
+ 		}
++
++		/*Create connectivity table*/
++		for (i=0;i<iomodel->numberofelements;i++){
++			for (j=0;j<elementswidth;j++){
++				vertexid=iomodel->elements[elementswidth*i+j];
++				_assert_(vertexid>0 && vertexid-1<iomodel->numberofvertices);
++				connectivity[vertexid-1]+=1;
++			}
++		}
+ 	}
+ 
+ 	/*Assign to iomodel*/
+Index: ../trunk-jpl/src/m/solve/solve.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.py	(revision 22003)
++++ ../trunk-jpl/src/m/solve/solve.py	(revision 22004)
+@@ -29,6 +29,7 @@
+ 		 - 'DamageEvolution'  or 'da'
+ 		 - 'Gia'              or 'gia'
+ 		 - 'Sealevelrise'     or 'slr'
++		 - 'Love'             or 'lv'
+ 
+ 	   extra options:
+         - loadonly : does not solve. only load results
+@@ -65,6 +66,8 @@
+ 		solutionstring = 'DamageEvolutionSolution';
+ 	elif solutionstring.lower() == 'gia' or solutionstring.lower() == 'gia':
+ 		solutionstring = 'GiaSolution';
++        elif solutionstring.lower() == 'lv' or solutionstring.lower() == 'love':
++                solutionstring = 'LoveSolution';
+ 	elif solutionstring.lower() == 'slr' or solutionstring.lower() == 'sealevelrise':
+ 		solutionstring = 'SealevelriseSolution';
+ 	else: 	
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 22003)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 22004)
+@@ -20,6 +20,7 @@
+ %		 - 'Gia'                or 'gia'
+ %		 - 'Esa'                or 'esa'
+ %		 - 'Sealevelrise'       or 'slr'
++%		 - 'Love'               or 'lv'
+ %
+ %  extra options:
+ %      - loadonly    : does not solve. only load results
+@@ -63,6 +64,8 @@
+ 	solutionstring = 'DamageEvolutionSolution';
+ elseif strcmpi(solutionstring,'gia') || strcmpi(solutionstring,'Gia')
+ 	solutionstring = 'GiaSolution';
++elseif strcmpi(solutionstring,'lv') || strcmpi(solutionstring,'Love')
++	solutionstring = 'LoveSolution';
+ elseif strcmpi(solutionstring,'esa') || strcmpi(solutionstring,'Esa')
+ 	solutionstring = 'EsaSolution';
+ elseif strcmpi(solutionstring,'slr') || strcmpi(solutionstring,'Sealevelrise')
+Index: ../trunk-jpl/src/m/solve/marshall.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.py	(revision 22003)
++++ ../trunk-jpl/src/m/solve/marshall.py	(revision 22004)
+@@ -19,10 +19,6 @@
+ 	except IOError as e:
+ 		raise IOError("marshall error message: could not open '%s.bin' file for binary writing." % md.miscellaneous.name)
+ 
+-	#Go through all model fields: check that it is a class and call checkconsistency
+-	fields=vars(md)
+-
+-#	for field in fields.iterkeys():
+ 	for field in md.properties():
+ 
+ 		#Some properties do not need to be marshalled
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 22003)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 22004)
+@@ -33,6 +33,9 @@
+ 	elif solutiontype == 'GiaSolution':
+ 		analyses=['GiaIvinsAnalysis']
+ 
++        elif solutiontype == 'LoveSolution':
++                analyses=['LoveAnalysis']
++
+ 	elif solutiontype == 'TransientSolution':
+ 		analyses=['StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis']
+ 
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 22003)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 22004)
+@@ -65,6 +65,8 @@
+ 		analyses={'L2ProjectionBaseAnalysis'};
+ 	elseif strcmp(solutiontype,'GiaSolution')
+ 		analyses={'GiaIvinsAnalysis'};
++	elseif strcmp(solutiontype,'LoveSolution')
++		analyses={'LoveAnalysis'};
+ 	elseif strcmp(solutiontype,'EsaSolution')
+ 		analyses={'EsaAnalysis'};
+ 	elseif strcmp(solutiontype,'TransientSolution')
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22004)
+@@ -89,6 +89,8 @@
+ 			self.average_vertex_connectivity=25;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			
++			if strcmpi(solution,'LoveSolution'), return; end
+ 
+ 			md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 22004)
+@@ -78,6 +78,8 @@
+ 			self.average_vertex_connectivity=25;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			
++			if strcmpi(solution,'LoveSolution'), return; end
+ 
+ 			md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22003)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22004)
+@@ -17,6 +17,7 @@
+ from matice import matice
+ from levelset import levelset 
+ from calving import calving
++from fourierlove import fourierlove
+ from calvinglevermann import calvinglevermann
+ #from calvingpi import calvingpi
+ from damage import damage
+@@ -108,6 +109,7 @@
+ 		self.transient        = transient()
+ 		self.levelset         = levelset()
+ 		self.calving          = calving()
++		self.love             = fourierlove()
+ 		self.gia              = giaivins()
+ 
+ 		self.autodiff         = autodiff()
+@@ -152,7 +154,8 @@
+ 		        'transient',\
+ 		        'levelset',\
+ 		        'calving',\
+-					'gia',\
++                        'gia',\
++                        'love',\
+ 		        'autodiff',\
+ 		        'inversion',\
+ 		        'qmu',\
+@@ -194,6 +197,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("levelset","[%s,%s]" % ("1x1",obj.levelset.__class__.__name__),"parameters for moving boundaries (level-set method)"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("calving","[%s,%s]" % ("1x1",obj.calving.__class__.__name__),"parameters for calving"))
++                string="%s\n%s" % (string,'%19s: %-22s -- %s' % ("love","[%s,%s]" % ("1x1",obj.love.__class__.__name__),"parameters for love solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 22004)
+@@ -39,7 +39,8 @@
+ 		transient        = 0;
+ 		levelset			  = 0;
+ 		calving          = 0;
+-		gia				  = 0;
++		love			 = 0;
++		gia				 = 0;
+ 		esa              = 0;
+ 
+ 		autodiff         = 0;
+@@ -1149,7 +1150,8 @@
+ 			md.transient        = transient();
+ 			md.levelset			  = levelset();
+ 			md.calving          = calving();
+-			md.gia				  = giaivins();
++			md.gia				= giaivins();
++			md.love				= fourierlove();
+ 			md.esa              = esa();
+ 			md.autodiff         = autodiff();
+ 			md.inversion        = inversion();
+@@ -1323,6 +1325,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','levelset'        ,['[1x1 ' class(self.levelset) ']'],'parameters for moving boundaries (level-set method)'));
+ 			disp(sprintf('%19s: %-22s -- %s','calving'         ,['[1x1 ' class(self.calving) ']'],'parameters for calving'));
+ 			disp(sprintf('%19s: %-22s -- %s','gia'        ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution'));
++			disp(sprintf('%19s: %-22s -- %s','love'        ,['[1x1 ' class(self.love) ']'],'parameters for love solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','esa'             ,['[1x1 ' class(self.esa) ']'],'parameters for elastic adjustment solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(self.autodiff) ']'],'automatic differentiation parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(self.inversion) ']'],'parameters for inverse methods'));
+Index: ../trunk-jpl/src/m/classes/maskpsl.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/maskpsl.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/maskpsl.m	(revision 22004)
+@@ -41,6 +41,8 @@
+ 
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			
++			if strcmpi(solution,'LoveSolution'), return; end;
+ 
+ 			md = checkfield(md,'fieldname','mask.groundedice_levelset','size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mask.ice_levelset'        ,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/fourierlove.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/fourierlove.py	(revision 22004)
+@@ -0,0 +1,104 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++class fourierlove(object):
++	"""
++	Fourier Love Number class definition
++
++	   Usage:
++	      fourierlove=fourierlove();
++	"""
++
++	def __init__(self): # {{{
++                self.nfreq                =  float('NaN');
++		self.frequencies          =  float('NaN');
++		self.sh_nmax              =  float('NaN');
++		self.sh_nmin              =  float('NaN');
++		self.g0                   =  float('NaN'); 
++		self.r0                   =  float('NaN'); 
++		self.mu0                  =  float('NaN');
++                self.allow_layer_deletion = float('NaN');
++		self.forcing_type         =  float('NaN');
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		
++		string='   Fourier Love class:' 
++		
++                string="%s\n%s"%(string,fielddisplay(self,'nfreq','number of frequencies sampled (default 1, elastic) [Hz]'))
++                string="%s\n%s"%(string,fielddisplay(self,'frequencies','frequencies sampled (convention defaults to 0 for the elastic case) [Hz]'))
++                string="%s\n%s"%(string,fielddisplay(self,'sh_nmax','maximum spherical harmonic degree (default 256, .35 deg, or 40 km at equator)'))
++                string="%s\n%s"%(string,fielddisplay(self,'sh_nmin','minimum spherical harmonic degree (default 1)'))
++                string="%s\n%s"%(string,fielddisplay(self,'g0','adimensioning constant for gravity (default 10) [m/s^2]'))
++                string="%s\n%s"%(string,fielddisplay(self,'r0','adimensioning constant for radius (default 6378*10^3) [m]'))
++                string="%s\n%s"%(string,fielddisplay(self,'mu0','adimensioning constant for stress (default 10^11) [Pa]'))
++                string="%s\n%s"%(string,fielddisplay(self,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)'))
++                string="%s\n%s"%(string,fielddisplay(self,'forcing_type','integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :'))
++                string="%s\n%s"%(string,'                                                     1:  Inner core boundary -- Volumic Potential')
++                string="%s\n%s"%(string,'                                                     2:  Inner core boundary -- Pressure')
++                string="%s\n%s"%(string,'                                                     3:  Inner core boundary -- Loading')
++                string="%s\n%s"%(string,'                                                     4:  Inner core boundary -- Tangential traction')
++                string="%s\n%s"%(string,'                                                     5:  Core mantle boundary -- Volumic Potential')
++                string="%s\n%s"%(string,'                                                     6:  Core mantle boundary -- Pressure')
++                string="%s\n%s"%(string,'                                                     7:  Core mantle boundary -- Loading')
++                string="%s\n%s"%(string,'                                                     8:  Core mantle boundary -- Tangential traction')
++                string="%s\n%s"%(string,'                                                     9:  Surface -- Volumic Potential')
++                string="%s\n%s"%(string,'                                                     10: Surface -- Pressure')
++                string="%s\n%s"%(string,'                                                     11: Surface -- Loading')
++                string="%s\n%s"%(string,'                                                     12: Surface -- Tangential traction ')
++
++                return string;
++
++
++		#}}}
++	def extrude(self,md): # {{{
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++
++            #we setup an elastic love number computation by default.
++            self.nfreq=1
++            self.frequencies=[0]; #Hz
++            self.sh_nmax=256 # .35 degree, 40 km at the equator.
++            self.sh_nmin=1
++            self.g0=10 # m/s^2
++            self.r0=6378*1e3 #m
++            self.mu0=10^11 # Pa
++            self.allow_layer_deletion=1
++            self.forcing_type = 11
++
++            return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++            md = checkfield(md,'fieldname','love.nfreq','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.frequencies','NaN',1,'Inf',1,'numel',[md.love.nfreq]);
++            md = checkfield(md,'fieldname','love.sh_nmax','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.sh_nmin','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.g0','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',[1],'>',0);
++            md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0,1]);
++            md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',[1],'>',0, '<=', 12);
++            if md.love.sh_nmin<=1 and md.love.forcing_type==9:
++                raise RuntimeError("Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.")
++
++            return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++            
++            WriteData(fid,prefix,'object',self,'fieldname','nfreq','format','Integer');
++            WriteData(fid,prefix,'object',self,'fieldname','frequencies','format','DoubleMat','mattype',3);
++            WriteData(fid,prefix,'object',self,'fieldname','sh_nmax','format','Integer');
++            WriteData(fid,prefix,'object',self,'fieldname','sh_nmin','format','Integer');
++            WriteData(fid,prefix,'object',self,'fieldname','g0','format','Double');
++            WriteData(fid,prefix,'object',self,'fieldname','r0','format','Double');
++            WriteData(fid,prefix,'object',self,'fieldname','mu0','format','Double');
++            WriteData(fid,prefix,'object',self,'fieldname','allow_layer_deletion','format','Boolean');
++            WriteData(fid,prefix,'object',self,'fieldname','forcing_type','format','Integer');
++
++	# }}}
+Index: ../trunk-jpl/src/m/classes/fourierlove.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/fourierlove.m	(revision 22004)
+@@ -0,0 +1,91 @@
++%FOURIERLOVE class definition
++%
++%   Usage:
++%      md.love=fourierlove();
++
++classdef fourierlove
++	properties (SetAccess=public) 
++		nfreq            =  NaN;
++		frequencies      =  NaN;
++		sh_nmax          =  NaN;
++		sh_nmin          =  NaN;
++		g0               =  NaN; 
++		r0               =  NaN; 
++		mu0              =  NaN;
++        allow_layer_deletion = NaN;
++		forcing_type     =  NaN;
++	end
++	methods (Static)
++		function self = loadobj(self) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. Update old properties here
++		end% }}}
++	end
++	methods
++		function self = extrude(self,md) % {{{
++		end % }}}
++		function self = fourierlove(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++			%we setup an elastic love number computation by default.
++			self.nfreq=1; 
++			self.frequencies=[0]; %Hz
++			self.sh_nmax=256; % .35 degree, 40 km at the equator.
++			self.sh_nmin=1; 
++			self.g0=10; % m/s^2; 
++			self.r0=6378*1e3; %m;
++			self.mu0=10^11; % Pa
++			self.allow_layer_deletion=1; 
++			self.forcing_type = 11; 
++		end % }}}
++		function disp(self) % {{{
++			fielddisplay(self,'nfreq','number of frequencies sampled (default 1, elastic) [Hz]');
++			fielddisplay(self,'frequencies','frequencies sampled (convention defaults to 0 for the elastic case) [Hz]');
++			fielddisplay(self,'sh_nmax','maximum spherical harmonic degree (default 256, .35 deg, or 40 km at equator)');
++			fielddisplay(self,'sh_nmin','minimum spherical harmonic degree (default 1)');
++			fielddisplay(self,'g0','adimensioning constant for gravity (default 10) [m/s^2]');
++			fielddisplay(self,'r0','adimensioning constant for radius (default 6378*10^3) [m]');
++			fielddisplay(self,'mu0','adimensioning constant for stress (default 10^11) [Pa]');
++			fielddisplay(self,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)');
++			fielddisplay(self,'forcing_type',{'integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :','1:  Inner core boundary -- Volumic Potential','2:  Inner core boundary -- Pressure','3:  Inner core boundary -- Loading','4:  Inner core boundary -- Tangential traction','5:  Core mantle boundary -- Volumic Potential','6:  Core mantle boundary -- Pressure','7:  Core mantle boundary -- Loading','8:  Core mantle boundary -- Tangential traction','9:  Surface -- Volumic Potential','10: Surface -- Pressure','11: Surface -- Loading','12: Surface -- Tangential traction '}); 
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','love.nfreq','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.frequencies','NaN',1,'Inf',1,'numel',md.love.nfreq);
++			md = checkfield(md,'fieldname','love.sh_nmax','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.sh_nmin','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.g0','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',1,'>',0);
++			md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0 1]);
++			md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',1,'>',0, '<=', 12);
++			if md.love.sh_nmin<=1 & md.love.forcing_type==9
++				error('Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.')
++			end
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++		
++			WriteData(fid,prefix,'object',self,'fieldname','nfreq','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','frequencies','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',self,'fieldname','sh_nmax','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','sh_nmin','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','g0','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','r0','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','mu0','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','allow_layer_deletion','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','forcing_type','format','Integer');
++
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++			error('not implemented yet!');
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/mesh3dsurface.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dsurface.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/mesh3dsurface.m	(revision 22004)
+@@ -80,6 +80,8 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
++			if strcmpi(solution,'LoveSolution'), return; end
++
+ 			md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.z','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/mesh3dtetras.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 22004)
+@@ -89,6 +89,8 @@
+ 			self.average_vertex_connectivity=25;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			
++			if strcmpi(solution,'LoveSolution'), return; end
+ 
+ 			md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/materials.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/materials.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/materials.py	(revision 22004)
+@@ -0,0 +1,280 @@
++import numpy as np
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++		
++def naturetointeger(strnat): #{{{
++    
++    intnat=np.array(len(strnat))
++    for i in range(len(intnat)):
++        if strnat[i]=='damageice':
++            intnat[i]=1
++        elif strnat[i]=='estar':
++            intnat[i]=2 
++        elif strnat[i]=='ice':
++            intnat[i]=3 
++        elif strnat[i]=='enhancedice':
++            intnat[i]=4 
++        elif strnat[i]=='litho':
++            intnat[i]=5
++        else: 
++            raise RuntimeError("materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')");
++    
++    return intnat
++# }}}
++class materials(object):
++	"""
++	MATERIALS class definition
++
++	   Usage:
++	      materials=materials();
++	"""
++
++	def __init__(self,*args): # {{{
++		
++                self.nature                    = []
++
++                if not len(args):
++                    self.nature=['ice']
++                else:
++                    self.nature=args
++
++                for i in range(len(self.nature)):
++                    if not(self.nature[i] == 'litho' or self.nature[i]=='ice'):
++                        raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho')")
++                    
++                #start filling in the dynamic fields: 
++                for i in range(len(self.nature)):
++                    nat=self.nature[i]; 
++                    if nat=='ice':
++                        setattr(self,'rho_ice',0)
++                        setattr(self,'rho_ice',0);
++                        setattr(self,'rho_water',0);
++                        setattr(self,'rho_freshwater',0);
++                        setattr(self,'mu_water',0);
++                        setattr(self,'heatcapacity',0);
++                        setattr(self,'latentheat',0);
++                        setattr(self,'thermalconductivity',0);
++                        setattr(self,'temperateiceconductivity',0);
++                        setattr(self,'meltingpoint',0);
++                        setattr(self,'beta',0);
++                        setattr(self,'mixed_layer_capacity',0);
++                        setattr(self,'thermal_exchange_velocity',0);
++                        setattr(self,'rheology_B',0);
++                        setattr(self,'rheology_n',0);
++                        setattr(self,'rheology_law',0);
++                    elif nat=='litho':
++                        setattr(self,'numlayers',0);
++                        setattr(self,'radius',0);
++                        setattr(self,'viscosity',0);
++                        setattr(self,'lame_lambda',0);
++                        setattr(self,'lame_mu',0);
++                        setattr(self,'burgers_viscosity',0);
++                        setattr(self,'burgers_mu',0);
++                        setattr(self,'isburgers',0);
++                        setattr(self,'density',0);
++                        setattr(self,'issolid',0);
++                    else:
++                        raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho')");
++                #set default parameters:
++		self.setdefaultparameters()
++		#}}}
++	def __repr__(self): # {{{
++		string="   Materials:"
++                for i in range(len(self.nature)):
++                    nat=self.nature[i]; 
++                    if nat=='ice':
++                        string="%s\n%s"%(string,'Ice:');
++                        string="%s\n%s"%(string,fielddisplay(self,"rho_ice","ice density [kg/m^3]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"rho_water","water density [kg/m^3]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"rho_freshwater","fresh water density [kg/m^3]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"mu_water","water viscosity [N s/m^2]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"heatcapacity","heat capacity [J/kg/K]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"thermalconductivity","ice thermal conductivity [W/m/K]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"temperateiceconductivity","temperate ice thermal conductivity [W/m/K]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"meltingpoint","melting point of ice at 1atm in K"))
++                        string="%s\n%s"%(string,fielddisplay(self,"latentheat","latent heat of fusion [J/m^3]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"beta","rate of change of melting point with pressure [K/Pa]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"mixed_layer_capacity","mixed layer capacity [W/kg/K]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]"))
++                        string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen's flow law exponent"))
++                        string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'"))
++                    elif nat=='litho':
++                        string="%s\n%s"%(string,'Litho:');
++                        string="%s\n%s"%(string,fielddisplay(self,'numlayers','number of layers (default 2)'))
++                        string="%s\n%s"%(string,fielddisplay(self,'radius','array describing the radius for each interface (numlayers+1) [m]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'viscosity','array describing each layer''s viscosity (numlayers) [Pa.s]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'lame_lambda','array describing the lame lambda parameter (numlayers) [Pa]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'lame_mu','array describing the shear modulus for each layers (numlayers) [Pa]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'burgers_viscosity','array describing each layer''s transient viscosity, only for Burgers rheologies  (numlayers) [Pa.s]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'burgers_mu','array describing each layer''s transient shear modulus, only for Burgers rheologies  (numlayers) [Pa]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'isburgers','array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)'))
++                        string="%s\n%s"%(string,fielddisplay(self,'density','array describing each layer''s density (numlayers) [kg/m^3]'))
++                        string="%s\n%s"%(string,fielddisplay(self,'issolid','array describing whether the layer is solid or liquid (default 1) (numlayers)'))
++
++                    else:
++                        raise RuntimeError("materials constructor error message: nature of the material not supported yet! ('ice' or 'litho')");
++
++		return string
++		#}}}
++	def extrude(self,md): # {{{
++            for i in range(len(self.nature)):
++                nat=self.nature[i]; 
++                if nat=='ice':
++                    self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node')
++                    self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element')
++            return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++            for i in range(len(self.nature)):
++                nat=self.nature[i]; 
++                if nat=='ice':
++                    #ice density (kg/m^3)
++                    self.rho_ice=917.
++
++                    #ocean water density (kg/m^3)
++                    self.rho_water=1023.
++
++                    #fresh water density (kg/m^3)
++                    self.rho_freshwater=1000.
++
++                    #water viscosity (N.s/m^2)
++                    self.mu_water=0.001787  
++
++                    #ice heat capacity cp (J/kg/K)
++                    self.heatcapacity=2093.
++
++                    #ice latent heat of fusion L (J/kg)
++                    self.latentheat=3.34*10^5
++
++                    #ice thermal conductivity (W/m/K)
++                    self.thermalconductivity=2.4
++                    
++                    #wet ice thermal conductivity (W/m/K)
++                    self.temperateiceconductivity=.24
++
++                    #the melting point of ice at 1 atmosphere of pressure in K
++                    self.meltingpoint=273.15
++
++                    #rate of change of melting point with pressure (K/Pa)
++                    self.beta=9.8*10^-8
++
++                    #mixed layer (ice-water interface) heat capacity (J/kg/K)
++                    self.mixed_layer_capacity=3974.
++
++                    #thermal exchange velocity (ice-water interface) (m/s)
++                    self.thermal_exchange_velocity=1.00*10^-4
++
++                    #Rheology law: what is the temperature dependence of B with T
++                    #available: none, paterson and arrhenius
++                    self.rheology_law='Paterson'
++
++                elif nat=='litho':
++                    #we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 
++                    self.numlayers=2
++
++                    #center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
++                    #(with 1d3 to avoid numerical singularities) 
++                    self.radius=[1e3,6278*1e3,6378*1e3]
++
++                    self.viscosity=[1e21,1e40] #mantle and lithosphere viscosity (respectively) [Pa.s]
++                    self.lame_mu=[1.45*1e11,6.7*10^10]  # (Pa) #lithosphere and mantle shear modulus (respectively) [Pa]
++                    self.lame_lambda=self.lame_mu  # (Pa) #mantle and lithosphere lamba parameter (respectively) [Pa]
++                    self.burgers_viscosity=[NaN,NaN]
++                    self.burgers_mu=[NaN,NaN]
++                    self.isburgers=[0,0]
++                    self.density=[5.51*1e3,5.50*1e3]  # (Pa) #mantle and lithosphere density [kg/m^3]
++                    self.issolid=[1,1] # is layer solid or liquid.
++
++                else:
++                    raise RuntimeError("materials setdefaultparameters error message: nature of the material not supported yet! ('ice' or 'litho')");
++
++		return self
++		#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++            for i in range(len(self.nature)):
++                nat=self.nature[i]; 
++                if nat=='ice':
++                    md = checkfield(md,'fieldname','materials.rho_ice','>',0)
++                    md = checkfield(md,'fieldname','materials.rho_water','>',0)
++                    md = checkfield(md,'fieldname','materials.rho_freshwater','>',0)
++                    md = checkfield(md,'fieldname','materials.mu_water','>',0)
++                    md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1)
++                    md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
++                    md = checkfield(md,'fieldname','materials.rheology_law','values',['None','BuddJacka','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval'])
++                elif nat=='litho':
++                    if 'LoveAnalysis' not in analyses: 
++                        return md
++
++                    md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',[1])
++                    md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1,1],'>',0)
++                    md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>=',0)
++                    md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>=',0)
++                    md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>=',0,'<',2)
++                    md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>',0)
++                    md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>=',0)
++                    md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers,1],'>=',0,'<=',1)
++                    md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers,1],'>=',0)
++                    md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers,1],'>=',0)
++
++                    for i in range(md.materials.numlayers):
++                        if md.materials.isburgers[i] and (np.isnan(md.materials.burgers_viscosity[i] or np.isnan(md.materials.burgers_mu[i]))):
++                            raise RuntimeError("materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice")
++                        
++                    if md.materials.issolid[0]==0 or md.materials.lame_mu[0]==0:
++                        raise RuntimeError('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.')
++                    
++                    for i in range(md.materials.numlayers-1):
++                        if md.materials.issolid[i] and md.materials.issolid[i+1]: #if there are at least two consecutive indices that contain issolid = 0
++                            raise RuntimeError("%s%i%s"%('2 or more adjacent fluid layers detected starting at layer',i,'This is not supported yet. Consider merging them.'))
++
++                else:
++                    raise RuntimeError("materials checkconsistency error message: nature of the material not supported yet! ('ice' or 'litho')");
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++            
++            #1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 
++            WriteData(fid,prefix,'name','md.materials.type','data',6,'format','Integer')
++            WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3)
++
++            for i in range(len(self.nature)):
++                nat=self.nature[i]; 
++                if nat=='ice':
++
++                    WriteData(fid,prefix,'name','md.materials.type','data',3,'format','Integer')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
++                    WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String')
++
++                elif nat=='litho':
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer') 
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3)
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3)
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3)
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3)
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3) 
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3) 
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3) 
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3) 
++                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3)
++
++                else:
++                    raise RuntimeError("materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')")
++
++	# }}}
+Index: ../trunk-jpl/src/m/classes/materials.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/materials.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/materials.m	(revision 22004)
+@@ -112,18 +112,18 @@
+ 					%we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 
+ 					self.numlayers=2;
+ 
+-					%surface, then the lab (lithosphere/asthenosphere boundary) then the center of the earth 
++					%center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
+ 					%(with 1d3 to avoid numerical singularities) 
+-					self.radius=[6378*1e3;6278*1e3;1e3]; 
++					self.radius=[1e3;6278*1e3;6378*1e3];
+ 
+-					self.viscosity=[1e40;1e21]; %lithosphere and mantle viscosity (respectively) [Pa.s]
+-					self.lame_mu=[6.7*10^10;1.45*1e11];  % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa]
+-					self.lame_lambda=[6.7*10^10;1.45*1e11];  % (Pa) %lithosphere and mantle lamba parameter (respectively) [Pa]
++					self.viscosity=[1e21;1e40]; %mantle and lithosphere viscosity (respectively) [Pa.s]
++					self.lame_mu=[1.45*1e11;6.7*10^10];  % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa]
++					self.lame_lambda=self.lame_mu;  % (Pa) %mantle and lithosphere lamba parameter (respectively) [Pa]
+ 					self.burgers_viscosity=[NaN;NaN];
+ 					self.burgers_mu=[NaN;NaN];
+-					self.isburgers=[false;false];
+-					self.density=[3.32*1e3;3.34*1e3];  % (Pa) %lithosphere and mantle density [kg/m^3]
+-					self.issolid=[true;true]; % is layer solid or liquid.
++					self.isburgers=[0;0];
++					self.density=[5.51*1e3;5.50*1e3];  % (Pa) %mantle and lithosphere density [kg/m^3]
++					self.issolid=[1;1]; % is layer solid or liquid.
+ 
+ 				otherwise
+ 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+@@ -187,15 +187,27 @@
+ 					if ~ismember('LoveAnalysis',analyses), return; end
+ 					md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1);
+ 					md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0,'<',2);
++					md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<',2);
+ 					md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0,'<',2);
+-					md = checkfield(md,'fieldname','materials.burgers_viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.burgers_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
++					md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<=',1);
++					md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+ 
++					for i=1:md.materials.numlayers,
++						if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 
++							error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice');
++						end
++					end
++					if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 
++							error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.');
++					end
++					ind=find(md.materials.issolid==0);
++					if sum(ismember(diff(ind),1)>=1) %if there are at least two consecutive indices that contain issolid = 0
++							error(['Fluid layers detected at layers #', num2str(ind'), ', but having 2 or more adjacent fluid layers is not supported yet. Consider merging them.'])
++					end
+ 				otherwise
+ 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+@@ -202,30 +214,11 @@
+ 			end
+ 
+ 		end % }}}
+-		function intnat = naturetointeger(strnat) % {{{
+-			intnat=zeros(length(strnat),1);
+-			for i=1:length(strnat),
+-				switch strnat{i},
+-				case 'damageice'
+-					intnat(i)=1; 
+-				case 'estar'
+-					intnat(i)=2; 
+-				case 'ice'
+-					intnat(i)=3; 
+-				case 'enhancedice'
+-					intnat(i)=4; 
+-				case 'litho'
+-					intnat(i)=5;
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+-				end
+-			end
+-		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+ 			%1: MatdamageiceEnum 2: MatestarEnum 3: MaticeEnum 4: MatenhancediceEnum 5: MaterialsEnum 
+ 			WriteData(fid,prefix,'name','md.materials.type','data',6,'format','Integer');
+-			WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',1);
++			WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3);
+ 
+ 			for i=1:length(self.nature),
+ 				nat=self.nature{i}; 
+@@ -247,16 +240,16 @@
+ 					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+ 					WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
+ 				case 'litho'
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',1);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',1);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda ','format','DoubleMat','mattype',1);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','BooleanMat','mattype',1);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',1); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',1); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','BooleanMat','mattype',1); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',1); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',1); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); 
+ 				otherwise
+ 					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+@@ -315,5 +308,22 @@
+ 		end % }}}
+ 	end
+ end
+-
+-
++		function intnat = naturetointeger(strnat) % {{{
++			intnat=zeros(length(strnat),1);
++			for i=1:length(strnat),
++				switch strnat{i},
++				case 'damageice'
++					intnat(i)=1; 
++				case 'estar'
++					intnat(i)=2; 
++				case 'ice'
++					intnat(i)=3; 
++				case 'enhancedice'
++					intnat(i)=4; 
++				case 'litho'
++					intnat(i)=5;
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				end
++			end
++		end % }}}
+Index: ../trunk-jpl/src/m/classes/mesh2d.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22003)
++++ ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22004)
+@@ -79,6 +79,8 @@
+ 			self.average_vertex_connectivity=25;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
++			
++			if strcmpi(solution,'LoveSolution'), return; end
+ 
+ 			md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22003)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22004)
+@@ -98,6 +98,7 @@
+ 					./classes/Inputs/DatasetInput.cpp\
+ 					./classes/Materials/Materials.cpp\
+ 					./classes/Materials/Matice.cpp\
++					./classes/Materials/Matlitho.cpp\
+ 					./classes/Materials/Matestar.cpp\
+ 					./classes/Materials/Matpar.cpp\
+ 					./classes/Constraints/Constraints.cpp\
+@@ -470,6 +471,18 @@
+ endif
+ endif
+ #}}}
++#Love sources  {{{
++if LOVE
++issm_sources +=  ./cores/love_core.cpp\
++				 ./analyses/LoveAnalysis.cpp\
++				./modules/FourierLoveCorex/FourierLoveCorex.cpp\
++				./modules/FourierLoveCorex/lnb_param.f90\
++				./modules/FourierLoveCorex/model.f90\
++				./modules/FourierLoveCorex/util.f90\
++				./modules/FourierLoveCorex/lovenb_sub.f90\
++				./modules/FourierLoveCorex/love_numbers.f90
++endif
++#}}}
+ #Esa sources  {{{
+ if ESA 
+ issm_sources +=  ./cores/esa_core.cpp\
+Index: ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 22004)
+@@ -74,6 +74,10 @@
+ 		case DamageEvolutionSolutionEnum:
+ 			solutioncore=&damage_core;
+ 			break;
++		case LoveSolutionEnum:
++			solutioncore=&love_core;
++			break;
++
+ 		default:
+ 			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22004)
+@@ -40,6 +40,9 @@
+ 	/*Initialize id*/
+ 	this->mid=matestar_mid;
+ 
++	/*rheology law:*/
++	iomodel->FetchData(&this->rheology_law,"md.materials.rheology_law");
++
+ 	/*Hooks: */
+ 	matestar_eid=index+1;
+ 	this->helement=new Hook(&matestar_eid,1);
+@@ -368,6 +371,10 @@
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
++int Matestar::GetRheologyLaw(){/*{{{*/
++	return this->rheology_law;
++}
++/*}}}*/
+ void  Matestar::InputUpdateFromConstant(IssmDouble constant, int name){/*{{{*/
+ 	/*Nothing updated yet*/
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22004)
+@@ -39,6 +39,7 @@
+ 	 /*Get material type and initialize object*/
+    int materialtype;
+    iomodel->FindConstant(&materialtype,"md.materials.type");
++   iomodel->FindConstant(&this->rheology_law,"md.materials.rheology_law");
+ 	this->Init(matice_mid,index,materialtype);
+ 
+ }
+@@ -638,6 +639,10 @@
+ 	*pmu_prime=mu_prime;
+ }
+ /*}}}*/
++int   Matice::GetRheologyLaw(){/*{{{*/
++	return this->rheology_law;
++}
++/*}}}*/
+ void  Matice::InputUpdateFromConstant(IssmDouble constant, int name){/*{{{*/
+ 	/*Nothing updated yet*/
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22004)
+@@ -41,6 +41,7 @@
+ 		virtual void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble epseff)=0;
+ 		virtual void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble epseff)=0;
+ 		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
++		virtual int        GetRheologyLaw()=0;
+ 		virtual bool       IsDamage()=0;
+ 		virtual bool       IsEnhanced()=0;
+ 		virtual void       ResetHooks()=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22004)
+@@ -16,7 +16,7 @@
+ 	return;
+ }
+ /*}}}*/
+-Matpar::Matpar(int matpar_mid, IoModel* iomodel){/*{{{*/
++Matpar::Matpar(IoModel* iomodel){/*{{{*/
+ 
+ 	rho_ice                   = 0;
+ 	rho_water                 = 0;
+@@ -70,6 +70,10 @@
+ 	time_relaxation_stress    = 0;
+ 	time_relaxation_damage    = 0;
+ 
++	
++	int nnat,dummy;
++	int* nature=NULL;
++
+ 	bool isefficientlayer;
+ 	int  hydrology_model,smb_model,materials_type;
+ 	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+@@ -76,7 +80,7 @@
+ 	iomodel->FindConstant(&smb_model,"md.smb.model");
+ 	iomodel->FindConstant(&materials_type,"md.materials.type");
+ 
+-	this->mid = matpar_mid;
++	this->mid = iomodel->matparcounter;
+ 
+ 	switch(materials_type){
+ 		case MaticeEnum:
+@@ -170,6 +174,116 @@
+ 			iomodel->FindConstant(&this->earth_density,"md.materials.earth_density");
+ 
+ 			break;
++		case MaterialsEnum:
++			//we have several types of materials. Retrieve this info first: 
++			iomodel->FetchData(&nature,&nnat,&dummy,"md.materials.nature");
++
++			//go through list of materials, and create constant parameters accordingly: 
++			for(int i=0;i<nnat;i++){ 
++				switch(IoCodeToEnumMaterials(nature[i])){ //{{{
++					case MatlithoEnum:
++						break;
++					case MaticeEnum:
++					case MatdamageiceEnum:
++					case MatenhancediceEnum:
++					case MatestarEnum:
++						iomodel->FindConstant(&this->rho_ice,"md.materials.rho_ice");
++						iomodel->FindConstant(&this->rho_water,"md.materials.rho_water");
++						iomodel->FindConstant(&this->rho_freshwater,"md.materials.rho_freshwater");
++						iomodel->FindConstant(&this->mu_water,"md.materials.mu_water");
++						iomodel->FindConstant(&this->heatcapacity,"md.materials.heatcapacity");
++						iomodel->FindConstant(&this->thermalconductivity,"md.materials.thermalconductivity");
++						iomodel->FindConstant(&this->temperateiceconductivity,"md.materials.temperateiceconductivity");
++						iomodel->FindConstant(&this->latentheat,"md.materials.latentheat");
++						iomodel->FindConstant(&this->beta,"md.materials.beta");
++						iomodel->FindConstant(&this->meltingpoint,"md.materials.meltingpoint");
++						iomodel->FindConstant(&this->referencetemperature,"md.constants.referencetemperature");
++						iomodel->FindConstant(&this->mixed_layer_capacity,"md.materials.mixed_layer_capacity");
++						iomodel->FindConstant(&this->thermal_exchange_velocity,"md.materials.thermal_exchange_velocity");
++						iomodel->FindConstant(&this->g,"md.constants.g");
++
++						switch(smb_model){ //{{{
++							case SMBforcingEnum:
++								/*Nothing to add*/
++								break;
++							case SMBgembEnum:
++								iomodel->FindConstant(&this->albedo_ice,"md.smb.aIce");
++								iomodel->FindConstant(&this->albedo_snow,"md.smb.aSnow");
++								break;
++							case SMBpddEnum:
++								iomodel->FindConstant(&this->desfac,"md.smb.desfac");
++								iomodel->FindConstant(&this->rlaps,"md.smb.rlaps");
++								iomodel->FindConstant(&this->rlapslgm,"md.smb.rlapslgm");
++								break;
++							case SMBd18opddEnum:
++								iomodel->FindConstant(&this->desfac,"md.smb.desfac");
++								iomodel->FindConstant(&this->rlaps,"md.smb.rlaps");
++								iomodel->FindConstant(&this->rlapslgm,"md.smb.rlapslgm");
++								iomodel->FindConstant(&this->dpermil,"md.smb.dpermil");					
++							case SMBgradientsEnum:
++								/*Nothing to add*/
++								break;
++							case SMBgradientselaEnum:
++								/*Nothing to add*/
++								break;
++							case SMBhenningEnum:
++								/*Nothing to add*/
++								break;
++							case SMBcomponentsEnum:
++								/*Nothing to add*/
++								break;
++							case SMBmeltcomponentsEnum:
++								/*Nothing to add*/
++								break;
++							default:
++								_error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet");
++						} 
++						if(hydrology_model==HydrologydcEnum){
++							iomodel->FindConstant(&this->sediment_compressibility,"md.hydrology.sediment_compressibility");
++							iomodel->FindConstant(&this->sediment_porosity,"md.hydrology.sediment_porosity");
++							iomodel->FindConstant(&this->sediment_thickness,"md.hydrology.sediment_thickness");
++							iomodel->FindConstant(&this->water_compressibility,"md.hydrology.water_compressibility");
++							iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
++
++							if(isefficientlayer){
++								iomodel->FindConstant(&this->epl_compressibility,"md.hydrology.epl_compressibility");
++								iomodel->FindConstant(&this->epl_porosity,"md.hydrology.epl_porosity");
++								iomodel->FindConstant(&this->epl_init_thickness,"md.hydrology.epl_initial_thickness");
++								iomodel->FindConstant(&this->epl_colapse_thickness,"md.hydrology.epl_colapse_thickness");
++								iomodel->FindConstant(&this->epl_max_thickness,"md.hydrology.epl_max_thickness");
++								iomodel->FindConstant(&this->epl_conductivity,"md.hydrology.epl_conductivity");
++							}
++						}
++						else if(hydrology_model==HydrologyshreveEnum){
++							/*Nothing to add*/
++						}
++						else if(hydrology_model==HydrologysommersEnum){
++							/*Nothing to add*/
++						}
++						else{
++							_error_("Hydrology model "<<EnumToStringx(hydrology_model)<<" not supported yet");
++						}
++
++						/*gia: */
++						iomodel->FindConstant(&this->lithosphere_shear_modulus,"md.materials.lithosphere_shear_modulus");
++						iomodel->FindConstant(&this->lithosphere_density,"md.materials.lithosphere_density");
++						iomodel->FindConstant(&this->mantle_shear_modulus,"md.materials.mantle_shear_modulus");
++						iomodel->FindConstant(&this->mantle_density,"md.materials.mantle_density");
++
++						/*slr:*/
++						iomodel->FindConstant(&this->earth_density,"md.materials.earth_density");
++						//}}}
++						break;
++					default:
++						_error_("Materials "<<EnumToStringx(IoCodeToEnumMaterials(nature[i]))<<" not supported");
++
++				} //}}}
++			}
++			//Free ressources:
++			xDelete<int>(nature);
++			break;
++
++			break;
+ 		default:
+ 			_error_("Material "<< EnumToStringx(materials_type) <<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22004)
+@@ -27,6 +27,7 @@
+ 		int      mid;
+ 		Hook    *helement;
+ 		Element *element;
++		int      rheology_law;
+ 
+ 	public:
+ 		/*Matestar constructors, destructors: {{{*/
+@@ -62,6 +63,7 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
++		int        GetRheologyLaw();
+ 		IssmDouble GetA();
+ 		IssmDouble GetAbar();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22004)
+@@ -27,6 +27,7 @@
+ 		int      mid;
+ 		bool     isdamaged;
+ 		bool     isenhanced;
++		int      rheology_law;
+ 		Hook    *helement;
+ 		Element *element;
+ 
+@@ -66,6 +67,7 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
++		int        GetRheologyLaw();
+ 		IssmDouble GetA();
+ 		IssmDouble GetAbar();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22003)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22004)
+@@ -74,7 +74,7 @@
+ 
+ 	public:
+ 		Matpar();
+-		Matpar(int matpar_id, IoModel* iomodel);
++		Matpar(IoModel* iomodel);
+ 		~Matpar();
+ 		void SetMid(int matpar_mid);
+ 
+@@ -106,6 +106,7 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+ 		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
++		int        GetRheologyLaw(){_error_("not supported");};
+ 		IssmDouble GetA(){_error_("not supported");};
+ 		IssmDouble GetAbar(){_error_("not supported");};
+ 		IssmDouble GetB(){_error_("not supported");};
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22004)
+@@ -808,7 +808,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		element->FindParam(&rheology_law,MaterialsRheologyLawEnum);
++		rheology_law=element->material->GetRheologyLaw();
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22003)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22004)
+@@ -1524,7 +1524,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		element->FindParam(&rheology_law,MaterialsRheologyLawEnum);
++		rheology_law=element->material->GetRheologyLaw();
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak	(revision 22004)
+@@ -0,0 +1,362 @@
++ program lnb_setup
++
++	use lnb_param
++	use util
++
++	integer :: source_type, fr, i
++	double precision :: T,cst, fluid_tscale,g
++	double complex, allocatable :: hs(:,:), ls(:,:), ks(:,:)
++	double precision, allocatable :: frequencies(:)
++
++	degmax=180
++	degmin=1
++	nfreq=500
++	nlayer=6
++	allocate( radbc(nlayer+1), soliddim(nlayer) ) 
++	allocate( roc(nlayer), lac(nlayer), muc(nlayer), muc2(nlayer), vic(nlayer), vic2(nlayer)) 
++  	allocate(radius(nlayer+1), burgers(nlayer), frequencies(nfreq))
++	allocate( hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1) ) 
++
++	pi=dacos(-1.d0)
++
++		allow_layer_del=.true.
++
++
++                radius(1) = 100.d3;   radius(2) = 1221.5d3; radius(3) = 3480.d3; 
++                radius(4) = 5701.d3; radius(5) = 5951.d3; radius(6) = 6271.d3; radius(7) = 6371.d3
++                vic(1) = 0.d0; vic(2) = 0.d0; vic(3) = 2.d22; vic(4) = 5.d20; vic(5) = 5.d20; vic(6) = 1.d40
++                incompressible=.false.           
++	!ra=6378.137d0
++		muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.20425d11 
++		muc(4) = 0.870257d11; muc(5) = 0.870257d11; muc(6) = 0.510268d11
++		roc(1) = 10987.9d0; roc(2) = 10986.9d0; roc(3) = 4903.58d0 
++		roc(4) = 3628.29d0; roc(5) = 3628.29d0; roc(6) = 3113.94d0
++	roc(6)=3300.d0
++		
++		
++                !roc(6)=3300.d0
++	muc2=muc;vic2=vic;lac=1e11
++	!burgers(:)=.false.
++  	soliddim(:) = .true.
++	soliddim(2) = .false.
++	ra=radius(nlayer+1)
++  	!ra = 6378.137d3
++  	rb = 3480.d3
++  	rc = 1221.5d3
++  
++	go0=10
++	mu0=1e11
++	r0=ra
++
++	radbc(:)=.false.
++	radbc(1)=.true.
++	radbc(nlayer+1)=.true.
++	do i=2,nlayer
++		if ((.not.soliddim(i)).or.(.not.soliddim(i-1))) then
++			radbc(i)=.true.
++		end if
++	end do
++
++	source_type=11
++ 	cst = 365.25d0*24.d0*3600.d0*1000.d0 
++	T=8*cst
++		burgers(1:6)=.false.
++	print*,'ok',T, burgers(1:6), ' ', soliddim(1:nlayer), radbc(1:nlayer),ra, rb, rc
++	
++
++	do i=1,nlayer
++	print*, radius(i+1), roc(i), muc(i), lac(i), vic(i)
++	print*, ''
++	enddo
++	benchmark_spada=.false.
++ 	!frequencies=1E-5/cst*2*pi
++
++	do fr=1,nfreq
++		if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
++			fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
++			!print*,fluid_tscale
++			frequencies(fr)=2.d0*pi*(10.d0**(fluid_tscale)/cst) 
++! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
++		elseif (fr <= nfreq/2+1) then
++			frequencies(fr)=(dble(fr-1)/T)*2.d0*pi
++		else	
++			frequencies(fr)=(-dble(nfreq+1-fr)/T)*2.d0*pi
++		end if
++	enddo
++
++	display=.true.
++	call love_numbers(frequencies,source_type,hs,ls,ks)
++	!print*, hs
++	do i=1,degmax
++	do fr=1,nfreq 	
++	write(17,*), real(hs(fr,i+1)),aimag(hs(fr,i+1)), real(ls(fr,i+1)),aimag(ls(fr,i+1)), real(ks(fr,i+1)),aimag(ks(fr,i+1))
++	enddo
++	enddo
++	
++
++end program
++
++!==================== 
++ subroutine love_numbers(frequencies,source_type,hs,ls,ks)
++!====================
++
++ use lnb_param
++ use model
++ use lovenb_sub
++
++ double complex, dimension(:,:), pointer :: bc
++ double complex, dimension(:,:), pointer :: f
++ character*40,     dimension(:),   pointer :: sourcs
++ integer,          dimension(:),   pointer :: indx,indx2
++ integer :: nbc,nfext,ifreq,ntheta2,nphi2
++ double precision :: cst,prec, delta!,h1,h2,k1,k2,l1,l2,dh1,dh2,dk1,dk2,dl1,dl2
++ double precision :: he,ke,le
++ double precision :: frequencies(nfreq), fluid_tscale
++ double complex :: loveh,lovel,lovek
++ logical :: logi
++ integer :: i,j,k,n, fr,m,l, source_type
++ double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
++
++
++ double precision :: cpu_time1(100)
++ integer :: cpu_count
++
++
++ pi=acos(-1.d0)
++
++
++ 	open(unit=101, file='lastrun_log')
++	cpu_count=0
++	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++	!write(101,*), 'Done !', cpu_time1(cpu_count), 's'
++	!write(101,*),''
++
++
++ !double precision, dimension(:), pointer :: vech,vecl,veck,vecd,vec
++ 
++ 
++
++ ! Test number of interfaces and of boundary conditions
++  nbc = 0
++  do i=1,nlayer+1 
++	if (radbc(i)) nbc=nbc+6
++  enddo
++
++
++ ifmin=source_type
++ ifmax=source_type
++ 
++
++ print*,'model init'
++ call model_init2(nbc,nlayer)  
++	print*, 'done'
++
++ nfext = 13 ! Number of potential excitation sources
++ allocate( bc(nbc,nbc), indx(nbc) )
++ allocate( f(nfext,nbc), sourcs(nfext) )
++
++	sourcs(1)='ICB --Volumetric Potential'	
++	sourcs(2)='ICB --Pressure'
++	sourcs(3)='ICB --Loading'
++	sourcs(4)='ICB --Tangential Traction'
++	sourcs(5)='CMB --Volumetric Potential'
++	sourcs(6)='CMB --Pressure'
++	sourcs(7)='CMB --Loading'
++	sourcs(8)='CMB --Tangential Traction'
++	sourcs(9)='SURF--Volumetric Potential'
++	sourcs(10)='SURF--Pressure'
++	sourcs(11)='SURF--Loading'
++	sourcs(12)='SURF--Tangential Traction'
++
++ 
++ 		print*, 'source_type =', source_type, ', ', sourcs(source_type)
++	if (source_type<9) then
++	 print*,'Error: Internal loading not supported yet, please input source_type between 9 and 12'
++	 print*,'Reference:'
++		do i=1,12
++			print*,i,sourcs(i)
++		enddo
++	return
++	endif
++
++! Print/write control
++ !display=.false.	! Printing on the terminal
++ 
++ ! Calculation optimization (avoids underflows at high degree)
++ !allow_layer_del = .true.     ! Do we allow deletion of the central layers in the calculation if necessary?
++ layerrap = 1.d0  ! Max absolute ratio between love numbers at the top and bottom of the last layer
++ 
++ ! Mode search parameters
++ freq0 = -1.d10
++ logi = .true.
++ cst = 365.25d0*24.d0*3600.d0*1000.d0 
++ prec = 1.d-8
++ firstmode = 0.d0
++
++	
++	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++	!write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++	!write(101,*),''
++	if (display) then
++	write(*,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++	write(*,*),''
++	endif
++
++! Spherical Harmonics initialization
++
++
++
++! -- SH degree loop
++
++
++ bc(:,:)=0.d0
++ 
++ 
++ 	!write(101,*), 'Calculating impulse response'
++	if (display) then
++	write(*,*), 'Calculating impulse response'
++	endif
++	
++	deg=degmin-1
++ do l = degmin,degmax 
++	deg=deg+1
++	!write(*,*)
++		!write(*,*)
++		!write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
++		if (display) then
++		write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
++		endif
++
++		!write(*,*)
++		!!write(101,*), fr, T
++
++
++
++		
++
++
++	do fr=1,nfreq
++
++		!!write(101,*),fr
++
++
++		!the way Fourier Transform algorithms works : they calculate for fmin=0 to fmax=1/dt
++		!by aliasing for this algo, f=1/(2*dt) to f=1/dt is the same as f=-1/(2*dt) to f=0
++		!but physics-wise, the Earth response at high frequency is not what we are looking for
++		!the [0 ; 1/(2*dt)] interval and its negative counterpart are what we are looking for
++		!therefore in our love number calculation the frenquency set must be [0 ; 1/(2*dt) ] U [-1/(2*dt) 0[
++
++		!if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
++		!	fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
++			!print*,fluid_tscale
++		!	freq=complex(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
++! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
++		!elseif (fr <= nfreq/2+1) then
++		!	freq=complex(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
++		!else	
++		!	freq=complex(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
++		!end if
++		
++		freq=complex(0.d0,frequencies(fr))
++	!print*,freq
++
++		!if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
++		!freq=dble(fr)/T
++		!--  Elastic Love number calculation
++		!freq=2.d0*pi/(1e4*cst)*complex(0.d0,1.d0)
++
++			!if (deg==2) then ! for rotationnal feedback
++			!ifmin=9;ifmax=9 ! Sets tidal calculation
++			!bc(:,:)=0.d0
++			!call boundary_conditions_matrix(bc,indx,nbc)
++			!call external_forcing(deg,f,sourcs,nfext,nbc) 
++			!call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++			!k2tidal(fr)=lovek-1.d0
++			!h2tidal(fr)=loveh
++			!l2tidal(fr)=lovel
++			!ifmin=11;ifmax=11 ! Sets back loading calculation
++			!endif
++			!print*,(deg)
++			bc(:,:)=0.d0
++			call boundary_conditions_matrix(bc,indx,nbc)
++			call external_forcing(deg,f,sourcs,nfext,nbc) 
++			call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++			! Automatic reduction of the number of layers when the attenuation with depth becomes too strong
++			if (allow_layer_del.eqv..true.) then
++
++				 do while ((layerrap<=epsdb).and.(nbc>12).or.(isnan(layerrap)) )
++	
++					!write(101,*)
++					!write(101,*) 'Rapport Nombre de Love surface/profondeur faible : ', layerrap 
++					!write(101,*) '	Changement d''interface de debut d''integration' 
++
++					if (display) then
++					write(*,*)
++					write(*,*) 'Surface/Depth Love number ratio small: ', layerrap 
++					write(*,*) '	Changing the interface where the integration starts'
++					endif
++
++					nbc = nbc-6
++					n = 1
++					do while (.not.radbc(n))
++						n = n+1
++					end do
++					radbc(n) =.false.
++					!write(101,*) '	New start interface: ', radius(n+1)/1.d3,' km'
++					if (display) then
++					write(*,*) '	New start interface: ', radius(n+1)/1.d3,' km'
++					endif
++							 
++					deallocate( bc, indx, f, sourcs )
++					allocate( bc(nbc,nbc), indx(nbc) )
++					allocate( f(nfext,nbc), sourcs(nfext) )
++		
++
++					bc(:,:)=0.d0
++					call boundary_conditions_matrix(bc,indx,nbc)
++					call external_forcing(deg,f,sourcs,nfext,nbc) 
++					call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++				end do
++			end if
++
++			!-- Saving Love numbers
++
++
++				hs(fr,deg+1) = loveh
++				ks(fr,deg+1) = lovek - 1.d0
++				ls(fr,deg+1) = lovel
++
++				!if (fr==1) then ! if this is supposed to be fluid response
++				!		! then cut off the imaginary part, which is inherited from approximating t=infinity to a few million years (see above the setting of freq)
++				!	hs(fr,deg+1)=real(hs(fr,deg+1))
++				!	ks(fr,deg+1)=real(ks(fr,deg+1))
++				!	ls(fr,deg+1)=real(ls(fr,deg+1))
++				!endif
++!~~~~~~~~~~~~~~TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ if (benchmark_spada) then
++ write(17,*), deg,fr,real(hs(fr,deg+1)), aimag(hs(fr,deg+1)),real(ks(fr,deg+1)), aimag(ks(fr,deg+1))
++ endif
++!~~~~~~~~~~~~~~END TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++
++		!write(*,*) 'Elastic Love Numbers:  ',ke,he,le	
++		!write(ifile1,*) deg,ke,he,le
++	end do
++	
++
++
++	
++	
++ end do
++
++	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++	!write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++	!write(101,*),''
++	if (display) then
++	write(*,*), 'Love number calc done :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++	write(*,*),''
++	endif
++
++end subroutine
Index: /issm/oecreview/Archive/21724-22754/ISSM-22004-22005.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22004-22005.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22004-22005.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22004)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22005)
+@@ -471,8 +471,9 @@
+ endif
+ endif
+ #}}}
+-#Love sources  {{{
++#Love sources  (only if have fortran){{{
+ if LOVE
++if FORTRAN
+ issm_sources +=  ./cores/love_core.cpp\
+ 				 ./analyses/LoveAnalysis.cpp\
+ 				./modules/FourierLoveCorex/FourierLoveCorex.cpp\
+@@ -482,6 +483,7 @@
+ 				./modules/FourierLoveCorex/lovenb_sub.f90\
+ 				./modules/FourierLoveCorex/love_numbers.f90
+ endif
++endif
+ #}}}
+ #Esa sources  {{{
+ if ESA 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22005-22006.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22005-22006.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22005-22006.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 22005)
++++ ../trunk-jpl/jenkins/windows	(revision 22006)
+@@ -14,6 +14,7 @@
+ 	--enable-standalone-libraries \
+ 	--with-fortran=no  \
+ 	--without-GiaIvins \
++	--without-Love \
+ 	--without-kriging \
+ 	--without-kml \
+ 	--with-matlab-dir=$MATLAB_PATH \
Index: /issm/oecreview/Archive/21724-22754/ISSM-22006-22007.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22006-22007.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22006-22007.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22006)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22007)
+@@ -2063,6 +2063,11 @@
+ 		 if test "$HAVE_GIAIVINS" = "yes" &&  test "$HAVE_FORTRAN" = "no" ; then
+ 			  AC_MSG_ERROR([need fortran compiler to compile GiaIvins (or use --without-GiaIvins )]);
+ 		 fi
++			
++       dnl check that fortran is provided if Love is on
++		 if test "$HAVE_LOVE" = "yes" &&  test "$HAVE_FORTRAN" = "no" ; then
++			  AC_MSG_ERROR([need fortran compiler to compile Love (or use --without-Love)]);
++		 fi
+ 
+ 		  dnl check that if we have MPI, we have metis
+ 		  if test "$HAVE_METIS" = "yes"  && test "$HAVE_MPI" = "no" ; then
Index: /issm/oecreview/Archive/21724-22754/ISSM-22007-22008.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22007-22008.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22007-22008.diff	(revision 22755)
@@ -0,0 +1,367 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak	(revision 22007)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90.bak	(nonexistent)
+@@ -1,362 +0,0 @@
+- program lnb_setup
+-
+-	use lnb_param
+-	use util
+-
+-	integer :: source_type, fr, i
+-	double precision :: T,cst, fluid_tscale,g
+-	double complex, allocatable :: hs(:,:), ls(:,:), ks(:,:)
+-	double precision, allocatable :: frequencies(:)
+-
+-	degmax=180
+-	degmin=1
+-	nfreq=500
+-	nlayer=6
+-	allocate( radbc(nlayer+1), soliddim(nlayer) ) 
+-	allocate( roc(nlayer), lac(nlayer), muc(nlayer), muc2(nlayer), vic(nlayer), vic2(nlayer)) 
+-  	allocate(radius(nlayer+1), burgers(nlayer), frequencies(nfreq))
+-	allocate( hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1) ) 
+-
+-	pi=dacos(-1.d0)
+-
+-		allow_layer_del=.true.
+-
+-
+-                radius(1) = 100.d3;   radius(2) = 1221.5d3; radius(3) = 3480.d3; 
+-                radius(4) = 5701.d3; radius(5) = 5951.d3; radius(6) = 6271.d3; radius(7) = 6371.d3
+-                vic(1) = 0.d0; vic(2) = 0.d0; vic(3) = 2.d22; vic(4) = 5.d20; vic(5) = 5.d20; vic(6) = 1.d40
+-                incompressible=.false.           
+-	!ra=6378.137d0
+-		muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.20425d11 
+-		muc(4) = 0.870257d11; muc(5) = 0.870257d11; muc(6) = 0.510268d11
+-		roc(1) = 10987.9d0; roc(2) = 10986.9d0; roc(3) = 4903.58d0 
+-		roc(4) = 3628.29d0; roc(5) = 3628.29d0; roc(6) = 3113.94d0
+-	roc(6)=3300.d0
+-		
+-		
+-                !roc(6)=3300.d0
+-	muc2=muc;vic2=vic;lac=1e11
+-	!burgers(:)=.false.
+-  	soliddim(:) = .true.
+-	soliddim(2) = .false.
+-	ra=radius(nlayer+1)
+-  	!ra = 6378.137d3
+-  	rb = 3480.d3
+-  	rc = 1221.5d3
+-  
+-	go0=10
+-	mu0=1e11
+-	r0=ra
+-
+-	radbc(:)=.false.
+-	radbc(1)=.true.
+-	radbc(nlayer+1)=.true.
+-	do i=2,nlayer
+-		if ((.not.soliddim(i)).or.(.not.soliddim(i-1))) then
+-			radbc(i)=.true.
+-		end if
+-	end do
+-
+-	source_type=11
+- 	cst = 365.25d0*24.d0*3600.d0*1000.d0 
+-	T=8*cst
+-		burgers(1:6)=.false.
+-	print*,'ok',T, burgers(1:6), ' ', soliddim(1:nlayer), radbc(1:nlayer),ra, rb, rc
+-	
+-
+-	do i=1,nlayer
+-	print*, radius(i+1), roc(i), muc(i), lac(i), vic(i)
+-	print*, ''
+-	enddo
+-	benchmark_spada=.false.
+- 	!frequencies=1E-5/cst*2*pi
+-
+-	do fr=1,nfreq
+-		if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
+-			fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
+-			!print*,fluid_tscale
+-			frequencies(fr)=2.d0*pi*(10.d0**(fluid_tscale)/cst) 
+-! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
+-		elseif (fr <= nfreq/2+1) then
+-			frequencies(fr)=(dble(fr-1)/T)*2.d0*pi
+-		else	
+-			frequencies(fr)=(-dble(nfreq+1-fr)/T)*2.d0*pi
+-		end if
+-	enddo
+-
+-	display=.true.
+-	call love_numbers(frequencies,source_type,hs,ls,ks)
+-	!print*, hs
+-	do i=1,degmax
+-	do fr=1,nfreq 	
+-	write(17,*), real(hs(fr,i+1)),aimag(hs(fr,i+1)), real(ls(fr,i+1)),aimag(ls(fr,i+1)), real(ks(fr,i+1)),aimag(ks(fr,i+1))
+-	enddo
+-	enddo
+-	
+-
+-end program
+-
+-!==================== 
+- subroutine love_numbers(frequencies,source_type,hs,ls,ks)
+-!====================
+-
+- use lnb_param
+- use model
+- use lovenb_sub
+-
+- double complex, dimension(:,:), pointer :: bc
+- double complex, dimension(:,:), pointer :: f
+- character*40,     dimension(:),   pointer :: sourcs
+- integer,          dimension(:),   pointer :: indx,indx2
+- integer :: nbc,nfext,ifreq,ntheta2,nphi2
+- double precision :: cst,prec, delta!,h1,h2,k1,k2,l1,l2,dh1,dh2,dk1,dk2,dl1,dl2
+- double precision :: he,ke,le
+- double precision :: frequencies(nfreq), fluid_tscale
+- double complex :: loveh,lovel,lovek
+- logical :: logi
+- integer :: i,j,k,n, fr,m,l, source_type
+- double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
+-
+-
+- double precision :: cpu_time1(100)
+- integer :: cpu_count
+-
+-
+- pi=acos(-1.d0)
+-
+-
+- 	open(unit=101, file='lastrun_log')
+-	cpu_count=0
+-	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+-	!write(101,*), 'Done !', cpu_time1(cpu_count), 's'
+-	!write(101,*),''
+-
+-
+- !double precision, dimension(:), pointer :: vech,vecl,veck,vecd,vec
+- 
+- 
+-
+- ! Test number of interfaces and of boundary conditions
+-  nbc = 0
+-  do i=1,nlayer+1 
+-	if (radbc(i)) nbc=nbc+6
+-  enddo
+-
+-
+- ifmin=source_type
+- ifmax=source_type
+- 
+-
+- print*,'model init'
+- call model_init2(nbc,nlayer)  
+-	print*, 'done'
+-
+- nfext = 13 ! Number of potential excitation sources
+- allocate( bc(nbc,nbc), indx(nbc) )
+- allocate( f(nfext,nbc), sourcs(nfext) )
+-
+-	sourcs(1)='ICB --Volumetric Potential'	
+-	sourcs(2)='ICB --Pressure'
+-	sourcs(3)='ICB --Loading'
+-	sourcs(4)='ICB --Tangential Traction'
+-	sourcs(5)='CMB --Volumetric Potential'
+-	sourcs(6)='CMB --Pressure'
+-	sourcs(7)='CMB --Loading'
+-	sourcs(8)='CMB --Tangential Traction'
+-	sourcs(9)='SURF--Volumetric Potential'
+-	sourcs(10)='SURF--Pressure'
+-	sourcs(11)='SURF--Loading'
+-	sourcs(12)='SURF--Tangential Traction'
+-
+- 
+- 		print*, 'source_type =', source_type, ', ', sourcs(source_type)
+-	if (source_type<9) then
+-	 print*,'Error: Internal loading not supported yet, please input source_type between 9 and 12'
+-	 print*,'Reference:'
+-		do i=1,12
+-			print*,i,sourcs(i)
+-		enddo
+-	return
+-	endif
+-
+-! Print/write control
+- !display=.false.	! Printing on the terminal
+- 
+- ! Calculation optimization (avoids underflows at high degree)
+- !allow_layer_del = .true.     ! Do we allow deletion of the central layers in the calculation if necessary?
+- layerrap = 1.d0  ! Max absolute ratio between love numbers at the top and bottom of the last layer
+- 
+- ! Mode search parameters
+- freq0 = -1.d10
+- logi = .true.
+- cst = 365.25d0*24.d0*3600.d0*1000.d0 
+- prec = 1.d-8
+- firstmode = 0.d0
+-
+-	
+-	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+-	!write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+-	!write(101,*),''
+-	if (display) then
+-	write(*,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+-	write(*,*),''
+-	endif
+-
+-! Spherical Harmonics initialization
+-
+-
+-
+-! -- SH degree loop
+-
+-
+- bc(:,:)=0.d0
+- 
+- 
+- 	!write(101,*), 'Calculating impulse response'
+-	if (display) then
+-	write(*,*), 'Calculating impulse response'
+-	endif
+-	
+-	deg=degmin-1
+- do l = degmin,degmax 
+-	deg=deg+1
+-	!write(*,*)
+-		!write(*,*)
+-		!write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
+-		if (display) then
+-		write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
+-		endif
+-
+-		!write(*,*)
+-		!!write(101,*), fr, T
+-
+-
+-
+-		
+-
+-
+-	do fr=1,nfreq
+-
+-		!!write(101,*),fr
+-
+-
+-		!the way Fourier Transform algorithms works : they calculate for fmin=0 to fmax=1/dt
+-		!by aliasing for this algo, f=1/(2*dt) to f=1/dt is the same as f=-1/(2*dt) to f=0
+-		!but physics-wise, the Earth response at high frequency is not what we are looking for
+-		!the [0 ; 1/(2*dt)] interval and its negative counterpart are what we are looking for
+-		!therefore in our love number calculation the frenquency set must be [0 ; 1/(2*dt) ] U [-1/(2*dt) 0[
+-
+-		!if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
+-		!	fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
+-			!print*,fluid_tscale
+-		!	freq=complex(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
+-! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
+-		!elseif (fr <= nfreq/2+1) then
+-		!	freq=complex(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
+-		!else	
+-		!	freq=complex(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
+-		!end if
+-		
+-		freq=complex(0.d0,frequencies(fr))
+-	!print*,freq
+-
+-		!if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
+-		!freq=dble(fr)/T
+-		!--  Elastic Love number calculation
+-		!freq=2.d0*pi/(1e4*cst)*complex(0.d0,1.d0)
+-
+-			!if (deg==2) then ! for rotationnal feedback
+-			!ifmin=9;ifmax=9 ! Sets tidal calculation
+-			!bc(:,:)=0.d0
+-			!call boundary_conditions_matrix(bc,indx,nbc)
+-			!call external_forcing(deg,f,sourcs,nfext,nbc) 
+-			!call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-			!k2tidal(fr)=lovek-1.d0
+-			!h2tidal(fr)=loveh
+-			!l2tidal(fr)=lovel
+-			!ifmin=11;ifmax=11 ! Sets back loading calculation
+-			!endif
+-			!print*,(deg)
+-			bc(:,:)=0.d0
+-			call boundary_conditions_matrix(bc,indx,nbc)
+-			call external_forcing(deg,f,sourcs,nfext,nbc) 
+-			call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-
+-			! Automatic reduction of the number of layers when the attenuation with depth becomes too strong
+-			if (allow_layer_del.eqv..true.) then
+-
+-				 do while ((layerrap<=epsdb).and.(nbc>12).or.(isnan(layerrap)) )
+-	
+-					!write(101,*)
+-					!write(101,*) 'Rapport Nombre de Love surface/profondeur faible : ', layerrap 
+-					!write(101,*) '	Changement d''interface de debut d''integration' 
+-
+-					if (display) then
+-					write(*,*)
+-					write(*,*) 'Surface/Depth Love number ratio small: ', layerrap 
+-					write(*,*) '	Changing the interface where the integration starts'
+-					endif
+-
+-					nbc = nbc-6
+-					n = 1
+-					do while (.not.radbc(n))
+-						n = n+1
+-					end do
+-					radbc(n) =.false.
+-					!write(101,*) '	New start interface: ', radius(n+1)/1.d3,' km'
+-					if (display) then
+-					write(*,*) '	New start interface: ', radius(n+1)/1.d3,' km'
+-					endif
+-							 
+-					deallocate( bc, indx, f, sourcs )
+-					allocate( bc(nbc,nbc), indx(nbc) )
+-					allocate( f(nfext,nbc), sourcs(nfext) )
+-		
+-
+-					bc(:,:)=0.d0
+-					call boundary_conditions_matrix(bc,indx,nbc)
+-					call external_forcing(deg,f,sourcs,nfext,nbc) 
+-					call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-
+-				end do
+-			end if
+-
+-			!-- Saving Love numbers
+-
+-
+-				hs(fr,deg+1) = loveh
+-				ks(fr,deg+1) = lovek - 1.d0
+-				ls(fr,deg+1) = lovel
+-
+-				!if (fr==1) then ! if this is supposed to be fluid response
+-				!		! then cut off the imaginary part, which is inherited from approximating t=infinity to a few million years (see above the setting of freq)
+-				!	hs(fr,deg+1)=real(hs(fr,deg+1))
+-				!	ks(fr,deg+1)=real(ks(fr,deg+1))
+-				!	ls(fr,deg+1)=real(ls(fr,deg+1))
+-				!endif
+-!~~~~~~~~~~~~~~TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+- if (benchmark_spada) then
+- write(17,*), deg,fr,real(hs(fr,deg+1)), aimag(hs(fr,deg+1)),real(ks(fr,deg+1)), aimag(ks(fr,deg+1))
+- endif
+-!~~~~~~~~~~~~~~END TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-
+-
+-		!write(*,*) 'Elastic Love Numbers:  ',ke,he,le	
+-		!write(ifile1,*) deg,ke,he,le
+-	end do
+-	
+-
+-
+-	
+-	
+- end do
+-
+-	cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+-	!write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+-	!write(101,*),''
+-	if (display) then
+-	write(*,*), 'Love number calc done :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+-	write(*,*),''
+-	endif
+-
+-end subroutine
Index: /issm/oecreview/Archive/21724-22754/ISSM-22008-22009.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22008-22009.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22008-22009.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22008)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22009)
+@@ -18,8 +18,6 @@
+ 
+ }
+ 
+-/*}}}*/
+-
+ void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+ 		IssmDouble* LoveLi, int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, 
+ 		IssmDouble g0, IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
+@@ -32,7 +30,4 @@
+ 		 &g0,  &r0,  &mu0, &allow_layer_deletion,  &forcing_type, &verbosemod,
+ 		 &numlayers,  radius,  viscosity,  lame_lambda,  lame_mu, 
+ 		 burgers_viscosity,  burgers_mu,  density,  isburgers,  issolid);
+-
+-	
+-	
+ }
+Index: ../trunk-jpl/src/c/cores/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/gia_core.cpp	(revision 22008)
++++ ../trunk-jpl/src/c/cores/gia_core.cpp	(revision 22009)
+@@ -55,6 +55,4 @@
+ 	
+ 	xDelete<IssmDouble>(x);
+ 	xDelete<IssmDouble>(y);
+-
+-
+ }
+Index: ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 22008)
++++ ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 22009)
+@@ -75,7 +75,11 @@
+ 			solutioncore=&damage_core;
+ 			break;
+ 		case LoveSolutionEnum:
++			#if _HAVE_LOVE_
+ 			solutioncore=&love_core;
++			#else
++			_error_("ISSM not compiled with Love capability");
++			#endif
+ 			break;
+ 
+ 		default:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22009-22010.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22009-22010.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22009-22010.diff	(revision 22755)
@@ -0,0 +1,269 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22010)
+@@ -67,7 +67,6 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		int        GetRheologyLaw();
+ 		IssmDouble GetA();
+ 		IssmDouble GetAbar();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22010)
+@@ -40,9 +40,6 @@
+ 	/*Initialize id*/
+ 	this->mid=matestar_mid;
+ 
+-	/*rheology law:*/
+-	iomodel->FetchData(&this->rheology_law,"md.materials.rheology_law");
+-
+ 	/*Hooks: */
+ 	matestar_eid=index+1;
+ 	this->helement=new Hook(&matestar_eid,1);
+@@ -371,10 +368,6 @@
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-int Matestar::GetRheologyLaw(){/*{{{*/
+-	return this->rheology_law;
+-}
+-/*}}}*/
+ void  Matestar::InputUpdateFromConstant(IssmDouble constant, int name){/*{{{*/
+ 	/*Nothing updated yet*/
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22010)
+@@ -39,7 +39,6 @@
+ 	 /*Get material type and initialize object*/
+    int materialtype;
+    iomodel->FindConstant(&materialtype,"md.materials.type");
+-   iomodel->FindConstant(&this->rheology_law,"md.materials.rheology_law");
+ 	this->Init(matice_mid,index,materialtype);
+ 
+ }
+@@ -639,10 +638,6 @@
+ 	*pmu_prime=mu_prime;
+ }
+ /*}}}*/
+-int   Matice::GetRheologyLaw(){/*{{{*/
+-	return this->rheology_law;
+-}
+-/*}}}*/
+ void  Matice::InputUpdateFromConstant(IssmDouble constant, int name){/*{{{*/
+ 	/*Nothing updated yet*/
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22010)
+@@ -41,7 +41,6 @@
+ 		virtual void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble epseff)=0;
+ 		virtual void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble epseff)=0;
+ 		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+-		virtual int        GetRheologyLaw()=0;
+ 		virtual bool       IsDamage()=0;
+ 		virtual bool       IsEnhanced()=0;
+ 		virtual void       ResetHooks()=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22010)
+@@ -63,7 +63,6 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		int        GetRheologyLaw();
+ 		IssmDouble GetA();
+ 		IssmDouble GetAbar();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22010)
+@@ -34,6 +34,7 @@
+ 		IssmDouble  rlaps;
+ 		IssmDouble  rlapslgm;
+ 		IssmDouble  dpermil;
++		int         rheology_law;
+ 
+ 		/*albedo: */
+ 		IssmDouble albedo_ice;
+@@ -61,17 +62,6 @@
+ 		/*slr:*/
+ 		IssmDouble earth_density;
+ 
+-		/*Sea ice*/
+-		IssmDouble poisson;
+-		IssmDouble young_modulus;
+-		IssmDouble ridging_exponent;
+-		IssmDouble cohesion;
+-		IssmDouble internal_friction_coef;
+-		IssmDouble compression_coef;
+-		IssmDouble traction_coef;
+-		IssmDouble time_relaxation_stress;
+-		IssmDouble time_relaxation_damage;
+-
+ 	public:
+ 		Matpar();
+ 		Matpar(IoModel* iomodel);
+@@ -106,7 +96,6 @@
+ 		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+ 		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+-		int        GetRheologyLaw(){_error_("not supported");};
+ 		IssmDouble GetA(){_error_("not supported");};
+ 		IssmDouble GetAbar(){_error_("not supported");};
+ 		IssmDouble GetB(){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22009)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22010)
+@@ -37,6 +37,7 @@
+ 	rlaps                     = 0;
+ 	rlapslgm                  = 0;
+ 	dpermil                   = 0;
++	rheology_law              = 0;
+ 
+ 	albedo_snow               = 0;
+ 	albedo_ice                = 0;
+@@ -60,17 +61,6 @@
+ 	
+ 	earth_density             = 0;
+ 
+-	poisson                   = 0;
+-	young_modulus             = 0;
+-	ridging_exponent          = 0;
+-	cohesion                  = 0;
+-	internal_friction_coef    = 0;
+-	compression_coef          = 0;
+-	traction_coef             = 0;
+-	time_relaxation_stress    = 0;
+-	time_relaxation_damage    = 0;
+-
+-	
+ 	int nnat,dummy;
+ 	int* nature=NULL;
+ 
+@@ -101,6 +91,7 @@
+ 			iomodel->FindConstant(&this->mixed_layer_capacity,"md.materials.mixed_layer_capacity");
+ 			iomodel->FindConstant(&this->thermal_exchange_velocity,"md.materials.thermal_exchange_velocity");
+ 			iomodel->FindConstant(&this->g,"md.constants.g");
++			iomodel->FindConstant(&this->rheology_law,"md.materials.rheology_law");
+ 
+ 			switch(smb_model){
+ 				case SMBforcingEnum:
+@@ -201,6 +192,7 @@
+ 						iomodel->FindConstant(&this->mixed_layer_capacity,"md.materials.mixed_layer_capacity");
+ 						iomodel->FindConstant(&this->thermal_exchange_velocity,"md.materials.thermal_exchange_velocity");
+ 						iomodel->FindConstant(&this->g,"md.constants.g");
++						iomodel->FindConstant(&this->rheology_law,"md.materials.rheology_law");
+ 
+ 						switch(smb_model){ //{{{
+ 							case SMBforcingEnum:
+@@ -327,6 +319,7 @@
+ 	matpar->rlaps=this->rlaps;
+ 	matpar->rlapslgm=this->rlapslgm;
+ 	matpar->dpermil=this->dpermil;
++	matpar->rheology_law=this->rheology_law;
+ 
+ 	matpar->sediment_compressibility=this->sediment_compressibility;
+ 	matpar->sediment_porosity=this->sediment_porosity;
+@@ -378,6 +371,7 @@
+ 	_printf_("   rlaps: " << rlaps << "\n");
+ 	_printf_("   rlapslgm: " << rlapslgm << "\n");
+ 	_printf_("   dpermil: " << dpermil << "\n");
++	_printf_("   rheology_law: " << rheology_law << "\n");
+ 	_printf_("   albedo_ice: " << albedo_ice << "\n");
+ 	_printf_("   albedo_snow: " << albedo_snow << "\n");
+ 	_printf_("   sediment_compressibility: " << sediment_compressibility << "\n");
+@@ -395,15 +389,6 @@
+ 	_printf_("   mantle_shear_modulus: " << mantle_shear_modulus << "\n");	
+ 	_printf_("   mantle_density: " << mantle_density << "\n");	
+ 	_printf_("   earth_density: " << earth_density << "\n");	
+-	_printf_("   poisson: " << poisson << "\n");	
+-	_printf_("   young_modulus: " << young_modulus << "\n");	
+-	_printf_("   ridging_exponent: " << ridging_exponent << "\n");	
+-	_printf_("   cohesion: " << cohesion << "\n");	
+-	_printf_("   internal_friction_coef: " << internal_friction_coef << "\n");	
+-	_printf_("   compression_coef: " << compression_coef << "\n");	
+-	_printf_("   traction_coef: " << traction_coef << "\n");	
+-	_printf_("   time_relaxation_stress: " << time_relaxation_stress << "\n");	
+-	_printf_("   time_relaxation_damage: " << time_relaxation_damage << "\n");	
+ 	return;
+ }
+ /*}}}*/
+@@ -433,6 +418,7 @@
+ 	MARSHALLING(rlaps);
+ 	MARSHALLING(rlapslgm);
+ 	MARSHALLING(dpermil);
++	MARSHALLING(rheology_law);
+ 
+ 	//hydrology Dual Porous Continuum:
+ 	MARSHALLING(sediment_compressibility);
+@@ -455,18 +441,6 @@
+ 	
+ 	//slr:
+ 	MARSHALLING(earth_density);
+-
+-	//Sea ice:
+-	MARSHALLING(poisson);
+-	MARSHALLING(young_modulus);
+-	MARSHALLING(ridging_exponent);
+-	MARSHALLING(cohesion);
+-	MARSHALLING(internal_friction_coef);
+-	MARSHALLING(compression_coef);
+-	MARSHALLING(traction_coef);
+-	MARSHALLING(time_relaxation_stress);
+-	MARSHALLING(time_relaxation_damage);
+-
+ }
+ /*}}}*/
+ int  Matpar::ObjectEnum(void){/*{{{*/
+@@ -667,10 +641,11 @@
+ 		case HydrologydcEplMaxThicknessEnum:         return this->epl_max_thickness;
+ 		case HydrologydcWaterCompressibilityEnum:    return this->water_compressibility;
+ 		case ConstantsGEnum:                         return this->g;
+-		case SmbDesfacEnum:              return this->desfac;
+-		case SmbRlapsEnum:               return this->rlaps;
+-		case SmbRlapslgmEnum:            return this->rlapslgm;
+-		case SmbDpermilEnum:             return this->dpermil;
++		case SmbDesfacEnum:                          return this->desfac;
++		case SmbRlapsEnum:                           return this->rlaps;
++		case SmbRlapslgmEnum:                        return this->rlapslgm;
++		case SmbDpermilEnum:                         return this->dpermil;
++		case MaterialsRheologyLawEnum:               return this->rheology_law;
+ 		case MaterialsLithosphereShearModulusEnum:   return this->lithosphere_shear_modulus;
+ 		case MaterialsLithosphereDensityEnum:        return this->lithosphere_density;
+ 		case MaterialsMantleDensityEnum:             return this->mantle_density;
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22009)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22010)
+@@ -1524,7 +1524,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		rheology_law=element->material->GetRheologyLaw();
++		rheology_law=element->GetMaterialParameter(MaterialsRheologyLawEnum);
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22009)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22010)
+@@ -808,7 +808,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		rheology_law=element->material->GetRheologyLaw();
++		rheology_law=element->GetMaterialParameter(MaterialsRheologyLawEnum);
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22010-22011.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22010-22011.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22010-22011.diff	(revision 22755)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22010)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22011)
+@@ -645,7 +645,6 @@
+ 		case SmbRlapsEnum:                           return this->rlaps;
+ 		case SmbRlapslgmEnum:                        return this->rlapslgm;
+ 		case SmbDpermilEnum:                         return this->dpermil;
+-		case MaterialsRheologyLawEnum:               return this->rheology_law;
+ 		case MaterialsLithosphereShearModulusEnum:   return this->lithosphere_shear_modulus;
+ 		case MaterialsLithosphereDensityEnum:        return this->lithosphere_density;
+ 		case MaterialsMantleDensityEnum:             return this->mantle_density;
+@@ -656,6 +655,15 @@
+ 
+ }
+ /*}}}*/
++IssmDouble Matpar::GetIntegerMaterialParameter(int enum_in){/*{{{*/
++
++	switch(enum_in){
++		case MaterialsRheologyLawEnum:               return this->rheology_law;
++		default: _error_("Enum "<<EnumToStringx(enum_in)<<" not supported yet");
++	}
++
++}
++/*}}}*/
+ IssmDouble Matpar::PureIceEnthalpy(IssmDouble pressure){/*{{{*/
+ 	return heatcapacity*(TMeltingPoint(pressure)-referencetemperature);
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22010)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22011)
+@@ -123,6 +123,7 @@
+ 		IssmDouble GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure);
+ 		IssmDouble GetEnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure);
+ 		IssmDouble GetMaterialParameter(int in_enum); 
++		IssmDouble GetIntegerMaterialParameter(int in_enum); 
+ 		IssmDouble PureIceEnthalpy(IssmDouble pressure);
+ 		void       ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
+ 		IssmDouble TMeltingPoint(IssmDouble pressure);
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22010)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22011)
+@@ -1524,7 +1524,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		rheology_law=element->GetMaterialParameter(MaterialsRheologyLawEnum);
++		rheology_law=element->GetIntegerMaterialParameter(MaterialsRheologyLawEnum);
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22010)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22011)
+@@ -808,7 +808,7 @@
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+-		rheology_law=element->GetMaterialParameter(MaterialsRheologyLawEnum);
++		rheology_law=element->GetIntegerMaterialParameter(MaterialsRheologyLawEnum);
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 		switch(rheology_law){
+ 			case NoneEnum:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22011-22012.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22011-22012.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22011-22012.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22011)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22012)
+@@ -1143,6 +1143,10 @@
+ 			return this->matpar->GetMaterialParameter(enum_in);
+ 	}
+ }/*}}}*/
++int         Element::GetIntegerMaterialParameter(int enum_in){/*{{{*/
++
++	return this->matpar->GetMaterialParameter(enum_in);
++}/*}}}*/
+ void       Element::GetNodesLidList(int* lidlist){/*{{{*/
+ 
+ 	_assert_(lidlist);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22011)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22012)
+@@ -97,6 +97,7 @@
+ 		void               GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type);
+ 		void               GetInputsInterpolations(Vector<IssmDouble>* interps);
+ 		IssmDouble         GetMaterialParameter(int enum_in);
++		int                GetIntegerMaterialParameter(int enum_in);
+ 		void               GetNodesLidList(int* lidlist);
+ 		void               GetNodesSidList(int* sidlist);
+ 		void               GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22012-22013.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22012-22013.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22012-22013.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matlitho.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 22012)
++++ ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 22013)
+@@ -66,7 +66,6 @@
+ 		IssmDouble GetD(){_error_("not supported");};
+ 		IssmDouble GetDbar(){_error_("not supported");};
+ 		IssmDouble GetN(){_error_("not supported");};
+-		int        GetRheologyLaw(){_error_("not supported");};
+ 		bool       IsDamage(){_error_("not supported");};
+ 		bool       IsEnhanced(){_error_("not supported");};
+ 		void       ResetHooks();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22013-22014.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22013-22014.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22013-22014.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22013)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22014)
+@@ -1145,7 +1145,7 @@
+ }/*}}}*/
+ int         Element::GetIntegerMaterialParameter(int enum_in){/*{{{*/
+ 
+-	return this->matpar->GetMaterialParameter(enum_in);
++	return this->matpar->GetIntegerMaterialParameter(enum_in);
+ }/*}}}*/
+ void       Element::GetNodesLidList(int* lidlist){/*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22014-22015.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22014-22015.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22014-22015.diff	(revision 22755)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/src/c/cores/love_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/love_core.cpp	(revision 22014)
++++ ../trunk-jpl/src/c/cores/love_core.cpp	(revision 22015)
+@@ -16,13 +16,13 @@
+ 	IssmDouble          *y    = NULL;
+ 
+ 	/*love parameters: */
+-	IssmDouble* frequencies=NULL;
+-	int nfreq,dummy; 
+-	int sh_nmin,sh_nmax;
+-	IssmDouble g0,r0,mu0;
+-	bool allow_layer_deletion;
+-	int forcing_type;
+-	bool verbosemod =(int) VerboseModule();
++	IssmDouble *frequencies = NULL;
++	int         nfreq,dummy;
++	int         sh_nmin,sh_nmax;
++	IssmDouble  g0,r0,mu0;
++	bool        allow_layer_deletion;
++	int         forcing_type;
++	bool        verbosemod = (int)VerboseModule();
+ 
+ 	/*parameters: */
+ 	bool save_results;
+@@ -29,7 +29,6 @@
+ 	
+ 	if(VerboseSolution()) _printf0_("   computing LOVE numbers\n");
+ 
+-
+ 	/*Recover some parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	
+@@ -59,8 +58,6 @@
+ 	IssmDouble*  LoveKi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+ 	IssmDouble*  LoveHi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+ 	IssmDouble*  LoveLi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+-
+-
+ 	
+ 	/*call the main module: */
+ 	FourierLoveCorex(LoveKr,LoveKi,LoveHr,LoveHi,LoveLr,LoveLi,  //output
+@@ -70,12 +67,12 @@
+ 			); 
+ 
+ 	/*Add love matrices to results:*/
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveKrEnum,LoveKr,sh_nmax+1,nfreq,0,0));
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveHrEnum,LoveHr,sh_nmax+1,nfreq,0,0));
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveLrEnum,LoveLr,sh_nmax+1,nfreq,0,0));
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveKiEnum,LoveKi,sh_nmax+1,nfreq,0,0));
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveHiEnum,LoveHi,sh_nmax+1,nfreq,0,0));
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,LoveLiEnum,LoveLi,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKrEnum,LoveKr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveHrEnum,LoveHr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveLrEnum,LoveLr,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKiEnum,LoveKi,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveHiEnum,LoveHi,sh_nmax+1,nfreq,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveLiEnum,LoveLi,sh_nmax+1,nfreq,0,0));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(frequencies);
+@@ -85,7 +82,4 @@
+ 	xDelete<IssmDouble>(LoveKi);
+ 	xDelete<IssmDouble>(LoveHi);
+ 	xDelete<IssmDouble>(LoveLi);
+-	
+-
+-
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22015-22016.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22015-22016.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22015-22016.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22015)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 22016)
+@@ -655,7 +655,7 @@
+ 
+ }
+ /*}}}*/
+-IssmDouble Matpar::GetIntegerMaterialParameter(int enum_in){/*{{{*/
++int        Matpar::GetIntegerMaterialParameter(int enum_in){/*{{{*/
+ 
+ 	switch(enum_in){
+ 		case MaterialsRheologyLawEnum:               return this->rheology_law;
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22015)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22016)
+@@ -123,7 +123,7 @@
+ 		IssmDouble GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure);
+ 		IssmDouble GetEnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure);
+ 		IssmDouble GetMaterialParameter(int in_enum); 
+-		IssmDouble GetIntegerMaterialParameter(int in_enum); 
++		int        GetIntegerMaterialParameter(int in_enum); 
+ 		IssmDouble PureIceEnthalpy(IssmDouble pressure);
+ 		void       ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
+ 		IssmDouble TMeltingPoint(IssmDouble pressure);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22016-22017.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22016-22017.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22016-22017.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_ad
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_ad	(revision 22016)
++++ ../trunk-jpl/jenkins/linux64_ross_ad	(revision 22017)
+@@ -13,6 +13,7 @@
+ 				--without-kriging \
+ 				--without-kml \
+ 				--without-GiaIvins \
++				--without-Love \
+ 				--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 				--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
+ 				--with-matlab-dir=$MATLAB_PATH \
+@@ -19,6 +20,7 @@
+ 				--with-python-dir=/usr\
+ 				--with-python-numpy-dir=/usr/lib/python2.7/dist-packages/numpy\
+ 				--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++				--with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.9/ -lgfortran" \
+ 				--enable-development \
+ 				--enable-debugging '
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22021-22022.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22021-22022.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22021-22022.diff	(revision 22755)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/externalpackages/boost/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/boost/install.sh	(revision 22021)
++++ ../trunk-jpl/externalpackages/boost/install.sh	(nonexistent)
+@@ -1,35 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Note of caution:  stop after boostrap phase, and run 
+-#bjam --debug-configuration, to figure out which paths boost is using to include 
+-#python. make sure everyone of these paths is covered by python. If not, just make 
+-#symlinks in externalpackages/python to what boost is expecting. Ther is NO WAY 
+-#to get the boost library to include python support without doing that. 
+-
+-#Some cleanup
+-rm -rf install boost_1_49_0 src
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/boost_1_49_0.tar.gz' 'boost_1_49_0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  boost_1_49_0.tar.gz
+-
+-#Move boost into install directory
+-mv boost_1_49_0/* src
+-rm -rf boost_1_49_0
+-#Configure and compile
+-cd src 
+-./bootstrap.sh \
+-	--prefix="$ISSM_DIR/externalpackages/boost/install" \
+-	--with-python=python3.2 \
+-	--with-python-root="$ISSM_DIR/externalpackages/python/install" 
+-
+-#Compile boost
+-./bjam install
+-
+-#put bjam into install also: 
+-mkdir ../install/bin
+-cp bjam ../install/bin
+
+Property changes on: ../trunk-jpl/externalpackages/boost/install.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/boost/install-1.55-linux.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/boost/install-1.55-linux.sh	(revision 22021)
++++ ../trunk-jpl/externalpackages/boost/install-1.55-linux.sh	(revision 22022)
+@@ -1,5 +1,6 @@
+ #!/bin/bash
+-set -eu
++#set -eu
++#unhook set -eu because some target do fail and it is not a big deal
+ 
+ #Note of caution:  stop after boostrap phase, and run 
+ #bjam --debug-configuration, to figure out which paths boost is using to include 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22024-22025.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22024-22025.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22024-22025.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22024)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22025)
+@@ -148,7 +148,7 @@
+ 		echo "======================================================";
+ 
+ 		./$PACKAGEINST &> compil.log
+-		if [ $? -ne 0 ]; then
++		if [ $? -ne 0 ] && [ "$PACKAGENAME" != "boost" ]; then
+ 			echo "======================================================";
+ 			echo "    ERROR: installation of $PACKAGENAME failed        ";
+ 			echo "======================================================";
Index: /issm/oecreview/Archive/21724-22754/ISSM-22025-22026.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22025-22026.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22025-22026.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/externalpackages/autotools/install-win.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22025)
++++ ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22026)
+@@ -19,16 +19,16 @@
+ cd ..
+ 
+ #install autoconf
+-echo " === INSTALLING AUTOCONF =="
+-rm -rf src
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/autoconf-2.69.tar.gz' 'autoconf-2.69.tar.gz'
+-tar -zxvf autoconf-2.69.tar.gz
+-mv autoconf-2.69 src
+-cd src 
+-./configure --prefix="$ISSM_DIR/externalpackages/autotools/install" 
+-make  
+-make install
+-cd ..
++#echo " === INSTALLING AUTOCONF =="
++#rm -rf src
++#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/autoconf-2.69.tar.gz' 'autoconf-2.69.tar.gz'
++#tar -zxvf autoconf-2.69.tar.gz
++#mv autoconf-2.69 src
++#cd src 
++#./configure --prefix="$ISSM_DIR/externalpackages/autotools/install" 
++#make  
++#make install
++#cd ..
+ 
+ #install automake
+ echo " === INSTALLING AUTOMAKE =="
Index: /issm/oecreview/Archive/21724-22754/ISSM-22026-22027.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22026-22027.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22026-22027.diff	(revision 22755)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/externalpackages/autotools/install-win.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22026)
++++ ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22027)
+@@ -7,29 +7,29 @@
+ export PATH="$ISSM_DIR/externalpackages/autotools/install/bin:$PATH"
+ 
+ #install m4
+-echo " === INSTALLING M4 =="
++#echo " === INSTALLING M4 =="
++#rm -rf src
++#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/m4-1.4.17.tar.gz' 'm4-1.4.17.tar.gz'
++#tar -zxvf m4-1.4.17.tar.gz
++#mv m4-1.4.17 src
++#cd src
++#./configure --prefix="$ISSM_DIR/externalpackages/autotools/install"
++#make
++#make install
++#cd ..
++
++#install autoconf
++echo " === INSTALLING AUTOCONF =="
+ rm -rf src
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/m4-1.4.17.tar.gz' 'm4-1.4.17.tar.gz'
+-tar -zxvf m4-1.4.17.tar.gz
+-mv m4-1.4.17 src
+-cd src
+-./configure --prefix="$ISSM_DIR/externalpackages/autotools/install"
+-make
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/autoconf-2.69.tar.gz' 'autoconf-2.69.tar.gz'
++tar -zxvf autoconf-2.69.tar.gz
++mv autoconf-2.69 src
++cd src 
++./configure --prefix="$ISSM_DIR/externalpackages/autotools/install" 
++make  
+ make install
+ cd ..
+ 
+-#install autoconf
+-#echo " === INSTALLING AUTOCONF =="
+-#rm -rf src
+-#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/autoconf-2.69.tar.gz' 'autoconf-2.69.tar.gz'
+-#tar -zxvf autoconf-2.69.tar.gz
+-#mv autoconf-2.69 src
+-#cd src 
+-#./configure --prefix="$ISSM_DIR/externalpackages/autotools/install" 
+-#make  
+-#make install
+-#cd ..
+-
+ #install automake
+ echo " === INSTALLING AUTOMAKE =="
+ rm -rf src
Index: /issm/oecreview/Archive/21724-22754/ISSM-22027-22028.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22027-22028.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22027-22028.diff	(revision 22755)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/externalpackages/autotools/patches/ar-lib.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/autotools/patches/ar-lib.patch	(nonexistent)
++++ ../trunk-jpl/externalpackages/autotools/patches/ar-lib.patch	(revision 22028)
+@@ -0,0 +1,11 @@
++--- ar-lib	2017-08-30 21:58:06.863512300 -0700
+++++ /home/Daniel/issm/trunk/aux-config/ar-lib	2017-08-30 21:58:01.291710300 -0700
++@@ -226,7 +226,7 @@
++   else
++     $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
++     do
++-      $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+++      $AR -NOLOGO -EXTRACT:"$(echo $member | tr -d '\r')" "$archive" || exit $?
++     done
++   fi
++ 
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22027)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22028)
+@@ -126,10 +126,14 @@
+ mkdir -p $ISSM_DIR/nightlylog/results
+ echo "<testsuite tests=\"$NUMPACKAGES\">" > $EXTERNAL_TEST_FILE
+ 
+-# Need a source here for when builds start midway through installation of 
+-# externalpackages.
++# Need a source here for when builds start midway through installation of externalpackages.
+ source $ISSM_DIR/etc/environment.sh
+ 
++if [ "$OS" == "win" ]; then
++	echo " == WINDOWS ENVIRONMENT DETECTED =="
++	source $ISSM_DIR/externalpackages/windows/windows_environment.sh
++fi
++
+ EXTERNALPACKAGES_FAILED=0;
+ 
+ for ((i=1;i<=$NUMPACKAGES;i++))
+@@ -182,7 +186,7 @@
+ 	exit 1;
+ fi
+ 
+-
++# Source here to include any newly installed externalpackages on the path. 
+ source $ISSM_DIR/etc/environment.sh
+ 
+ if [ "$OS" == "win" ]; then
+@@ -198,6 +202,7 @@
+ 	export CC=emcc
+ 	source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+ fi
++
+ #}}}
+ #ISSM compilation yes/no                (ISSM_COMPILATION) {{{
+ if [ "$ISSM_COMPILATION" == "yes" ]
+Index: ../trunk-jpl/externalpackages/autotools/install-win.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22027)
++++ ../trunk-jpl/externalpackages/autotools/install-win.sh	(revision 22028)
+@@ -7,16 +7,16 @@
+ export PATH="$ISSM_DIR/externalpackages/autotools/install/bin:$PATH"
+ 
+ #install m4
+-#echo " === INSTALLING M4 =="
+-#rm -rf src
+-#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/m4-1.4.17.tar.gz' 'm4-1.4.17.tar.gz'
+-#tar -zxvf m4-1.4.17.tar.gz
+-#mv m4-1.4.17 src
+-#cd src
+-#./configure --prefix="$ISSM_DIR/externalpackages/autotools/install"
+-#make
+-#make install
+-#cd ..
++echo " === INSTALLING M4 =="
++rm -rf src
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/m4-1.4.17.tar.gz' 'm4-1.4.17.tar.gz'
++tar -zxvf m4-1.4.17.tar.gz
++mv m4-1.4.17 src
++cd src
++./configure --prefix="$ISSM_DIR/externalpackages/autotools/install"
++make
++make install
++cd ..
+ 
+ #install autoconf
+ echo " === INSTALLING AUTOCONF =="
+@@ -63,3 +63,8 @@
+ # Small change to Automake in order to get the right flags for Microsoft's
+ # compiler.
+ patch ./install/bin/automake < ./patches/automake.patch
++
++# This patch is for ar-lib, and removes carriage return characters that cause
++# commands to overwrite themselves and be misinterpreted during linking on 
++# Cygwin Windows.
++patch ./install/share/automake-1.14/ar-lib < ./patches/ar-lib.patch
Index: /issm/oecreview/Archive/21724-22754/ISSM-22035-22036.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22035-22036.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22035-22036.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22035)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22036)
+@@ -247,21 +247,21 @@
+   !if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
+   ! fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
+    !print*,fluid_tscale
+-  ! freq=complex(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
++  ! freq=cmplx(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
+ ! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
+   !elseif (fr <= nfreq/2+1) then
+-  ! freq=complex(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
++  ! freq=cmplx(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
+   !else 
+-  ! freq=complex(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
++  ! freq=cmplx(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
+   !end if
+   
+-  freq=complex(0.d0,frequencies(fr))
++  freq=cmplx(0.d0,frequencies(fr))
+   !print*,fr,freq
+ 
+   !if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
+   !freq=dble(fr)/T
+   !--  Elastic Love number calculation
+-  !freq=2.d0*pi/(1e4*cst)*complex(0.d0,1.d0)
++  !freq=2.d0*pi/(1e4*cst)*cmplx(0.d0,1.d0)
+ 
+    !if (deg==2) then ! for rotationnal feedback
+    !ifmin=9;ifmax=9 ! Sets tidal calculation
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22035)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22036)
+@@ -103,10 +103,10 @@
+   !-- Diplsay ICB conditions
+   !x=rc/ra
+   !write(101,*), 
+-  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+   !write(101,*), 'ICB, g = ',g
+   !write(101,*), 'ICB, ro(Inner Core) = ', ro1
+-  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !call earth_nlayers_viscoelas(x,ro2,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+   !write(101,*), 'ICB, g = ',g
+   !write(101,*), 'ICB, ro(Outer Core) = ', ro2
+   !go_icb = g
+@@ -114,10 +114,10 @@
+   !-- Display CMB conditions
+   !x=rb/ra
+   !write(101,*),
+-  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+   !write(101,*), 'CMB, g = ',g
+   !write(101,*), 'CMB, ro(Outer Core) = ', ro1
+-  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !call earth_nlayers_viscoelas(x,ro2,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+   !write(101,*), 'CMB, g = ',g
+   !write(101,*), 'CMB, ro(Mantle) = ', ro2
+   !go_cmb = g
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22035)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22036)
+@@ -41,9 +41,9 @@
+ 
+ 	
+    if ((log10(1.d0/ra**int(dble(deg)/10.d0)))<-250.d0) then
+-	valini=1.d-300!*complex(1.d0,1.d0)
++	valini=1.d-300!*cmplx(1.d0,1.d0)
+    else
+-	valini= 1.d0!*complex(1.d0,1.d0)
++	valini= 1.d0!*cmplx(1.d0,1.d0)
+    endif
+ 
+   
Index: /issm/oecreview/Archive/21724-22754/ISSM-22036-22037.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22036-22037.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22036-22037.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22036)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22037)
+@@ -700,12 +700,12 @@
+ 		if hasattr(md.friction,'p'): md.friction.p=project2d(md,md.friction.p,1)
+ 		if hasattr(md.friction,'q'): md.friction.q=project2d(md,md.friction.q,1)
+ 		
+-		if hasattr(md.friction,'coefficientcoulomb'): md.friction.q=project2d(md,md.friction.coefficientcoulomb,1)
+-		if hasattr(md.friction,'C'): md.friction.q=project2d(md,md.friction.C,1)
+-		if hasattr(md.friction,'As'): md.friction.q=project2d(md,md.friction.As,1)
+-		if hasattr(md.friction,'effective_pressure'): md.friction.q=project2d(md,md.friction.effective_pressure,1)
+-		if hasattr(md.friction,'water_layer'): md.friction.q=project2d(md,md.friction.water_layer,1)
+-		if hasattr(md.friction,'m'): md.friction.q=project2d(md,md.friction.m,1)
++		if hasattr(md.friction,'coefficientcoulomb'): md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1)
++		if hasattr(md.friction,'C'): md.friction.C=project2d(md,md.friction.C,1)
++		if hasattr(md.friction,'As'): md.friction.As=project2d(md,md.friction.As,1)
++		if hasattr(md.friction,'effective_pressure'): md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1)
++		if hasattr(md.friction,'water_layer'): md.friction.water_layer=project2d(md,md.friction.water_layer,1)
++		if hasattr(md.friction,'m'): md.friction.m=project2d(md,md.friction.m,1)
+ 
+ 		#observations
+ 		if not np.isnan(md.inversion.vx_obs).all(): md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22039-22040.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22039-22040.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22039-22040.diff	(revision 22755)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 22039)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 22040)
+@@ -136,7 +136,7 @@
+ 			%2017 May 4th
+ 			if isa(md.amr,'double'); md.amr=amr(); end
+ 			%2017 Aug 29th
+-			if isa(md.love,'double'); md.love=love(); end
++			if isa(md.love,'double'); md.love=fourierlove(); end
+ 
+ 		end% }}}
+ 	end
+@@ -1150,15 +1150,15 @@
+ 			md.thermal          = thermal();
+ 			md.steadystate      = steadystate();
+ 			md.transient        = transient();
+-			md.levelset			  = levelset();
++			md.levelset         = levelset();
+ 			md.calving          = calving();
+-			md.gia				= giaivins();
+-			md.love				= fourierlove();
++			md.gia              = giaivins();
++			md.love             = fourierlove();
+ 			md.esa              = esa();
+ 			md.autodiff         = autodiff();
+ 			md.inversion        = inversion();
+ 			md.qmu              = qmu();
+-			md.amr				  = amr();
++			md.amr              = amr();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
+ 			md.outputdefinition = outputdefinition();
+Index: ../trunk-jpl/src/m/classes/timestepping.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.m	(revision 22039)
++++ ../trunk-jpl/src/m/classes/timestepping.m	(revision 22040)
+@@ -41,6 +41,9 @@
+ 			if self.final_time-self.start_time<0,
+ 				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
+ 			end 
++			if strcmp(solution,'TransientSolution'),
++				md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>',0,'NaN',1,'Inf',1);
++			end
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   timestepping parameters:'));
Index: /issm/oecreview/Archive/21724-22754/ISSM-22040-22041.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22040-22041.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22040-22041.diff	(revision 22755)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive408.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22041-22042.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22041-22042.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22041-22042.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/test/NightlyRun/test540.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test540.m	(revision 22042)
+@@ -0,0 +1,57 @@
++%Test Name: PigTranCalvingDevSSA2d
++md=triangle(model(),'../Exp/Pig.exp',10000.);
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
++md=parameterize(md,'../Par/Pig.par');
++md=setflowequation(md,'SSA','all');
++md.timestepping.time_step=5;
++md.timestepping.final_time=50;
++
++%calving parameters
++md.mask.ice_levelset = 1e4*(md.mask.ice_levelset + 0.5);
++md.calving=calvingdev();
++md.calving.meltingrate = zeros(md.mesh.numberofvertices,1);
++md.transient.ismovingfront = 1;
++md.levelset.spclevelset = NaN(md.mesh.numberofvertices,1);
++pos = find(md.mesh.vertexonboundary);
++md.levelset.spclevelset(pos) = md.mask.ice_levelset(pos);
++
++md.cluster=generic('name',oshostname(),'np',2);
++md=solve(md,'Transient');
++
++%Fields and tolerances to track changes
++field_names ={...
++	'Vx1' ,'Vy1' ,'Vel1' ,'Pressure1' ,'Bed1' ,'Surface1' ,'Thickness1' ,'MaskIceLevelset1' ,...
++	'Vx2' ,'Vy2' ,'Vel2' ,'Pressure2' ,'Bed2' ,'Surface2' ,'Thickness2' ,'MaskIceLevelset2' ,...
++	'Vx10','Vy10','Vel10','Pressure10','Bed10','Surface10','Thickness10','MaskIceLevelset10',...
++	};
++field_tolerances={...
++	1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-12,...
++	1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,...
++	};
++field_values={...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Base),...
++	(md.results.TransientSolution(1).Surface),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).MaskIceLevelset),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Vel),...
++	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).Base),...
++	(md.results.TransientSolution(2).Surface),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).MaskIceLevelset),...
++	(md.results.TransientSolution(10).Vx),...
++	(md.results.TransientSolution(10).Vy),...
++	(md.results.TransientSolution(10).Vel),...
++	(md.results.TransientSolution(10).Pressure),...
++	(md.results.TransientSolution(10).Base),...
++	(md.results.TransientSolution(10).Surface),...
++	(md.results.TransientSolution(10).Thickness),...
++	(md.results.TransientSolution(10).MaskIceLevelset),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive540.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive540.arch	(revision 22042)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive540.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22042-22043.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22042-22043.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22042-22043.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22042)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22043)
+@@ -1508,7 +1508,11 @@
+         }
+         
+         /*Are we in transient or static? */
+-        if(M==iomodel->numberofvertices){
++		  if(M==1){
++			  values[0]=vector[0];
++			  this->AddInput(vector_enum,values,P0Enum);
++		  }
++		  else if(M==iomodel->numberofvertices){
+             for(i=0;i<numvertices;i++) values[i]=vector[vertexids[i]-1];
+             this->AddInput(vector_enum,values,P1Enum);
+         }
+@@ -1537,6 +1541,7 @@
+ 			  for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j];
+ 
+ 			  if     (N==this->GetNumberOfNodes(P1Enum)   ) this->AddInput(vector_enum,values,P1Enum);
++			  else if(N==this->GetNumberOfNodes(P1xP2Enum)) this->AddInput(vector_enum,values,P1xP2Enum);
+ 			  else if(N==this->GetNumberOfNodes(P1xP3Enum)) this->AddInput(vector_enum,values,P1xP3Enum);
+ 			  else _error_("Patch interpolation not supported yet");
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22043-22044.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22043-22044.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22043-22044.diff	(revision 22755)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22043)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22044)
+@@ -225,10 +225,10 @@
+ 	Input* vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
++	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+ 	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+ 	IssmDouble  n   = this->GetMaterialParameter(MaterialsRheologyNEnum);
+-	this->parameters->FindParam(&sigma_max_floating,CalvingStressThresholdFloatingiceEnum);
+-	this->parameters->FindParam(&sigma_max_grounded,CalvingStressThresholdGroundediceEnum);
+ 
+ 	/* Start looping on the number of vertices: */
+ 	GaussTria* gauss=new GaussTria();
+@@ -239,6 +239,8 @@
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
++		smax_fl_input->GetInputValue(&sigma_max_floating,gauss);
++		smax_gr_input->GetInputValue(&sigma_max_grounded,gauss);
+ 		vel=sqrt(vx*vx+vy*vy)+1.e-14;
+ 
+ 		/*Compute strain rate and viscosity: */
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22043)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22044)
+@@ -206,10 +206,10 @@
+ 	Input* vx_input = inputs->GetInput(VxAverageEnum); _assert_(vx_input);
+ 	Input* vy_input = inputs->GetInput(VyAverageEnum); _assert_(vy_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
++	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+ 	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+ 	IssmDouble  n   = this->GetMaterialParameter(MaterialsRheologyNEnum);
+-	this->parameters->FindParam(&sigma_max_floating,CalvingStressThresholdFloatingiceEnum);
+-	this->parameters->FindParam(&sigma_max_grounded,CalvingStressThresholdGroundediceEnum);
+ 
+ 	/* Start looping on the number of vertices: */
+ 	GaussPenta* gauss=new GaussPenta();
+@@ -220,6 +220,8 @@
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
++		smax_fl_input->GetInputValue(&sigma_max_floating,gauss);
++		smax_gr_input->GetInputValue(&sigma_max_grounded,gauss);
+ 		vel=sqrt(vx*vx+vy*vy)+1.e-14;
+ 
+ 		/*Compute strain rate and viscosity: */
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22043)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22044)
+@@ -60,6 +60,8 @@
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvinglevermannMeltingrateEnum);
+ 			break;
+ 		case CalvingDevEnum:
++			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
++			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
+ 			break;
+ 		case CalvingMinthicknessEnum:
+@@ -79,10 +81,7 @@
+ 	switch(calvinglaw){
+ 		case DefaultCalvingEnum:
+ 		case CalvingLevermannEnum:
+-			break;
+ 		case CalvingDevEnum:
+-			parameters->AddObject(iomodel->CopyConstantObject("md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum));
+ 			break;
+ 		case CalvingMinthicknessEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
Index: /issm/oecreview/Archive/21724-22754/ISSM-22044-22045.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22044-22045.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22044-22045.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/calvingdev.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingdev.m	(revision 22044)
++++ ../trunk-jpl/src/m/classes/calvingdev.m	(revision 22045)
+@@ -41,8 +41,8 @@
+ 			%Early return
+ 			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
+ 
+-			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'numel',1,'nan',1,'Inf',1);
+-			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'numel',1,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
+ 		end % }}}
+ 		function disp(self) % {{{
+@@ -55,8 +55,8 @@
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			yts=md.constants.yts;
+ 			WriteData(fid,prefix,'name','md.calving.law','data',2,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','Double');
+-			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22045-22046.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22045-22046.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22045-22046.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test540.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.m	(revision 22045)
++++ ../trunk-jpl/test/NightlyRun/test540.m	(revision 22046)
+@@ -27,7 +27,7 @@
+ field_tolerances={...
+ 	1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-12,...
+-	1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,...
++	1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-9,...
+ 	};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22046-22047.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22046-22047.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22046-22047.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Friction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 22046)
++++ ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 22047)
+@@ -288,6 +288,7 @@
+ 	  alpha2= drag^2 * Neff ^r * | vel | ^(s-1), with Neff=rho_ice*g*thickness+rho_ice*g*base, r=q/p and s=1/p**/
+ 
+ 	/*diverse: */
++	int         CoupledFlag;
+ 	IssmDouble  r,s;
+ 	IssmDouble  drag_p, drag_q;
+ 	IssmDouble  Neff;
+@@ -307,6 +308,7 @@
+ 	IssmDouble rho_water        = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	IssmDouble rho_ice          = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble gravity          = element->GetMaterialParameter(ConstantsGEnum);
++	element->parameters->FindParam(&CoupledFlag,FrictionCouplingEnum);
+ 
+ 	//compute r and q coefficients: */
+ 	r=drag_q/drag_p;
+@@ -313,7 +315,20 @@
+ 	s=1./drag_p;
+ 
+ 	//From base and thickness, compute effective pressure when drag is viscous:
+-	Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++	switch(CoupledFlag){
++		case 0:
++			Neff=gravity*(rho_ice*thickness+rho_water*(base-sealevel));
++			break;	
++		case 1:
++			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
++			break;
++		case 2:
++			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
++			break;
++		default:
++			_error_("not supported");
++	}
++
+ 	if(Neff<0)Neff=0;
+ 
+ 	switch(dim){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22047-22048.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22047-22048.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22047-22048.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22047)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22048)
+@@ -213,6 +213,16 @@
+ 			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+ 			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+ 			break;
++		case 7:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
++			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if (FrictionCoupling==1){
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
++			break;
+ 		case 9:
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
+@@ -250,7 +260,7 @@
+ 	if(frictionlaw==4 || frictionlaw==6){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+ 	}
+-	if(frictionlaw==3 || frictionlaw==1){
++	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 	}
+ 	if(frictionlaw==9){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22048-22049.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22048-22049.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22048-22049.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22048)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22049)
+@@ -161,7 +161,7 @@
+ 			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+ 			if (FrictionCoupling==1){
+-			  iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
+ 			}
+ 			break;
+ 		case 2:
+@@ -174,7 +174,7 @@
+ 			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+ 			if (FrictionCoupling==1){
+-			  iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
+ 			}
+ 			break;
+ 		case 4:
+@@ -196,6 +196,16 @@
+ 			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+ 			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+ 			break;
++		case 7:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
++			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
++			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if (FrictionCoupling==1){
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
++			break;
+ 		case 9:
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
+@@ -231,7 +241,7 @@
+ 	if(frictionlaw==4 || frictionlaw==6){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+ 	}
+-	if(frictionlaw==3 || frictionlaw==1){
++	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 	}
+ 	if(frictionlaw==9){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22049-22050.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22049-22050.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22049-22050.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22049)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22050)
+@@ -821,10 +821,14 @@
+ 			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+ 			break;
+ 		case 7:
++			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+ 			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
++			if(FrictionCoupling==1){
++				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
++			}
+ 			break;
+ 		case 9:
+ 			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+@@ -896,7 +900,7 @@
+ 	int frictionlaw;
+ 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+ 	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+-	if(frictionlaw==3 || frictionlaw==1) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
++	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+ 	if(frictionlaw==5) parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum));
+ 	if(frictionlaw==9) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22050-22051.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22050-22051.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22050-22051.diff	(revision 22755)
@@ -0,0 +1,72 @@
+Index: ../trunk-jpl/src/m/classes/frictioncoulomb.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 22050)
++++ ../trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 22051)
+@@ -9,6 +9,8 @@
+ 		p                  = NaN;
+ 		q                  = NaN;
+ 		coefficientcoulomb = NaN;
++		coupling	= 0;
++		effective_pressure = NaN;
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+@@ -16,6 +18,15 @@
+ 			self.coefficientcoulomb=project3d(md,'vector',self.coefficientcoulomb,'type','node','layer',1);
+ 			self.p=project3d(md,'vector',self.p,'type','element');
+ 			self.q=project3d(md,'vector',self.q,'type','element');
++			switch self.coupling
++				case 0
++				case 1
++					self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 		end % }}}
+ 		function self = frictioncoulomb(varargin) % {{{
+ 			switch nargin
+@@ -36,6 +47,16 @@
+ 			md = checkfield(md,'fieldname','friction.coefficientcoulomb','timeseries',1,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
++			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);
++			switch self.coupling
++				case 0
++				case 1
++					md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('Basal shear stress parameters: Sigma_b = min( coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b\n, coefficientcoulomb^2 * rho_i * g * (h-h_f)) (effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p, floatation thickness h_f=max(0,-rho_sw / rho_i * bed))'));
+@@ -43,6 +64,8 @@
+ 			fielddisplay(self,'coefficientcoulomb','Coulomb friction coefficient [SI]');
+ 			fielddisplay(self,'p','p exponent');
+ 			fielddisplay(self,'q','q exponent');
++			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
++			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+@@ -51,6 +74,16 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
++			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
++			switch self.coupling
++				case 0
++				case 1
++					WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++				case 2
++					error('not implemented yet');
++				otherwise
++					error('not supported yet');		
++			end
+ 
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22051-22052.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22051-22052.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22051-22052.diff	(revision 22755)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/m/classes/frictioncoulomb.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictioncoulomb.py	(revision 22051)
++++ ../trunk-jpl/src/m/classes/frictioncoulomb.py	(revision 22052)
+@@ -16,7 +16,8 @@
+         self.coefficientcoulomb = float('NaN')
+         self.p = float('NaN')
+ 	self.q = float('NaN')
+-
++	self.coupling  	 = 0
++	self.effective_pressure	= float('NaN')
+ 	#set defaults
+ 	self.setdefaultparameters()
+ 
+@@ -28,6 +29,8 @@
+ 	string="%s\n%s"%(string,fielddisplay(self,"coefficientcoulomb","Coulomb friction coefficient [SI]"))
+ 	string="%s\n%s"%(string,fielddisplay(self,"p","p exponent"))
+ 	string="%s\n%s"%(string,fielddisplay(self,"q","q exponent"))
++	string="%s\n%s"%(string,fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)'))
++	string="%s\n%s"%(string,fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]'))
+ 	return string
+     #}}}
+     def extrude(self,md): # {{{
+@@ -35,6 +38,12 @@
+ 	self.coefficientcoulomb=project3d(md,'vector',self.coefficientcoulomb,'type','node','layer',1)
+ 	self.p=project3d(md,'vector',self.p,'type','element')
+ 	self.q=project3d(md,'vector',self.q,'type','element')
++	if self.coupling==1:
++		self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1)
++	elif self.coupling==2:
++		raise ValueError('coupling not supported yet')
++	elif self.coupling > 2:
++		raise ValueError('md.friction.coupling larger than 2, not supported yet')	
+ 	return self
+     #}}}
+     def setdefaultparameters(self): # {{{
+@@ -50,8 +59,14 @@
+ 	md = checkfield(md,'fieldname','friction.coefficientcoulomb','timeseries',1,'NaN',1,'Inf',1)
+ 	md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
+ 	md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
++	if self.coupling==1:
++		md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1)
++	elif self.coupling==2:
++		raise ValueError('coupling not supported yet')
++	elif self.coupling > 2:
++		raise ValueError('md.friction.coupling larger than 2, not supported yet')
++	return md
+ 
+-	return md
+     # }}}
+     def marshall(self,prefix,md,fid):    # {{{
+ 	WriteData(fid,prefix,'name','md.friction.law','data',7,'format','Integer')
+@@ -59,4 +74,11 @@
+ 	WriteData(fid,prefix,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1)
+ 	WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
+ 	WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
++	WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer')
++	if self.coupling==1:
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++	elif self.coupling==2:
++		raise ValueError('coupling not supported yet')
++	elif self.coupling > 2:
++		raise ValueError('md.friction.coupling larger than 2, not supported yet')	
+     # }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22052-22053.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22052-22053.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22052-22053.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22052)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22053)
+@@ -703,7 +703,8 @@
+ 		if hasattr(md.friction,'coefficientcoulomb'): md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1)
+ 		if hasattr(md.friction,'C'): md.friction.C=project2d(md,md.friction.C,1)
+ 		if hasattr(md.friction,'As'): md.friction.As=project2d(md,md.friction.As,1)
+-		if hasattr(md.friction,'effective_pressure'): md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1)
++		if hasattr(md.friction,'effective_pressure') and not np.isnan(md.friction.effective_pressure).all():
++                    md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1)
+ 		if hasattr(md.friction,'water_layer'): md.friction.water_layer=project2d(md,md.friction.water_layer,1)
+ 		if hasattr(md.friction,'m'): md.friction.m=project2d(md,md.friction.m,1)
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22053-22054.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22053-22054.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22053-22054.diff	(revision 22755)
@@ -0,0 +1,350 @@
+Index: ../trunk-jpl/src/m/classes/clusters/vilje.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22053)
++++ ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22054)
+@@ -1,4 +1,4 @@
+-%PFE class definition
++%vilje class definition
+ %
+ %   Usage:
+ %      cluster=greenplanet();
+@@ -6,184 +6,180 @@
+ %      cluster=greenplanet('np',3,'login','username');
+ 
+ classdef vilje
+-    properties (SetAccess=public)  
+-		 % {{{
+-     name           = 'vilje';
+-		 login          = '';
+-		 numnodes       = 2;
+-		 cpuspernode    = 32;
+-     procspernodes  = 16;
+-     mem            = 28;
+-		 queue          = 'workq';
+-		 time           = 2*60;
+-		 codepath       = '';
+-		 executionpath  = '';
+-		 interactive    = 0;
+-     port           = [];
+-     accountname    = '';
++	properties (SetAccess=public)  
++		% {{{
++		name           = 'vilje';
++		login          = '';
++		numnodes       = 2;
++		cpuspernode    = 32;
++		procspernodes  = 16;
++		mem            = 28;
++		queue          = 'workq';
++		time           = 2*60;
++		codepath       = '';
++		executionpath  = '';
++		interactive    = 0;
++		port           = [];
++		accountname    = '';
++		% }}}
++	end
++	methods
++		function cluster=vilje(varargin) % {{{
+ 
+-	 end
+-	 properties (SetAccess=private) 
+-		 np=numnodes*procspernodes;
+-		 % }}}
+-	 end
+-	 methods
+-		 function cluster=vilje(varargin) % {{{
++			%initialize cluster using default settings if provided
++			if (exist('vilje_settings')==2), vilje_settings; end
+ 
+-			 %initialize cluster using default settings if provided
+-			 if (exist('vilje_settings')==2), vilje_settings; end
++			%use provided options to change fields
++			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
++		end
++		%}}}
++		function disp(cluster) % {{{
++			%  display the object
++			disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
++			disp(sprintf('    name: %s',cluster.name));
++			disp(sprintf('    login: %s',cluster.login));
++			disp(sprintf('    accountname: %s',cluster.accountname));
++			disp(sprintf('    numnodes: %i',cluster.numnodes));
++			disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
++			disp(sprintf('    np: %i', cluster.cpuspernode*cluster.numnodes));
++			disp(sprintf('    procspernodes: %i',cluster.procspernodes));
++			disp(sprintf('    queue: %s',cluster.queue));
++			disp(sprintf('    codepath: %s',cluster.codepath));
++			disp(sprintf('    executionpath: %s',cluster.executionpath));
++			disp(sprintf('    interactive: %i',cluster.interactive));
++			disp(sprintf('    time: %i',cluster.time));
++			disp(sprintf('    memory: %i',cluster.mem));
++		end
++		%}}}
++		function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+-			 %use provided options to change fields
+-			 cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+-		 end
+-		 %}}}
+-		 function disp(cluster) % {{{
+-			 %  display the object
+-			 disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
+-			 disp(sprintf('    name: %s',cluster.name));
+-			 disp(sprintf('    login: %s',cluster.login));
+-       disp(sprintf('    accountname: %s',cluster.accountname));
+-			 disp(sprintf('    numnodes: %i',cluster.numnodes));
+-			 disp(sprintf('    cpuspernode: %i',cluster.cpuspernode));
+-			 disp(sprintf('    np: %i', cluster.cpuspernode*cluster.numnodes));
+-			 disp(sprintf('    procspernodes: %i',cluster.procspernodes));
+-			 disp(sprintf('    queue: %s',cluster.queue));
+-			 disp(sprintf('    codepath: %s',cluster.codepath));
+-			 disp(sprintf('    executionpath: %s',cluster.executionpath));
+-			 disp(sprintf('    interactive: %i',cluster.interactive));
+-			 disp(sprintf('    time: %i',cluster.time));
+-			 disp(sprintf('    memory: %i',cluster.mem));
+-		 end
+-		 %}}}
+-		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
++			available_queues={'workq'};
++			queue_requirements_time=[5*24*60];
++			queue_requirements_np=[30];
+ 
+-			 available_queues={'workq'};
+-			 queue_requirements_time=[5*24*60];
+-			 queue_requirements_np=[30];
++			QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
+ 
+-			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,1)
++			%Miscelaneous
++			if isempty(cluster.login), md = checkmessage(md,'login empty'); end
++			if isempty(cluster.accountname), md = checkmessage(md,'accountname empty'); end
++			if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
++			if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
+ 
+-			 %Miscelaneous
+-			 if isempty(cluster.login), md = checkmessage(md,'login empty'); end
+-       if isempty(cluster.accountname), md = checkmessage(md,'accountname empty'); end
+-			 if isempty(cluster.codepath), md = checkmessage(md,'codepath empty'); end
+-			 if isempty(cluster.executionpath), md = checkmessage(md,'executionpath empty'); end
++		end
++		%}}}
++		function numprocs=np(self) % {{{
++			%compute number of processors
++			numprocs=self.numnodes*self.cpuspernode;
++		end
++		%}}}
++		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+ 
+-		 end
+-		 %}}}
+-		 function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
++			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
++			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+ 
+-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
++			%compute number of processors
++			cluster.np=cluster.numnodes*cluster.cpuspernode;
+ 
+-			 %compute number of processors
+-			 cluster.np=cluster.numnodes*cluster.cpuspernode;
++			%write queuing script 
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#PBS -S /bin/bash\n');
++			fprintf(fid,'#PBS -N %s\n',modelname);
++			fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,16);
++			fprintf(fid,'#PBS -l walltime=%s\n',cluster.time); %walltime is in seconds.
++			fprintf(fid,'#PBS -A %s\n',cluster.accountname);
++			fprintf(fid,'#PBS -o %s.outlog \n',modelname);
++			fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
++			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
++			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
++			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
++			fprintf(fid,'mpiexec_mpt -n %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
++			if ~io_gather, %concatenate the output files:
++				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
++			end
++			fclose(fid);
++		end
++		%}}}
++		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
+ 
+-			 %write queuing script 
+-			 fid=fopen([modelname '.queue'],'w');
+-			 fprintf(fid,'#PBS -S /bin/bash\n');
+-			 fprintf(fid,'#PBS -N %s\n',modelname);
+-       fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,16);
+-       fprintf(fid,'#PBS -l walltime=%s\n',cluster.time); %walltime is in seconds.
+-       fprintf(fid,'#PBS -A %s\n',cluster.accountname);
+-			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+-			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
+-			 fprintf(fid,'mpiexec_mpt -n %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+-			 if ~io_gather, %concatenate the output files:
+-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+-			 end
+-			 fclose(fid);
+-		 end
+-		 %}}}
+-		 function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling) % {{{
++			if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
++			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+ 
+-			 if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
+-			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
++			executable='issm.exe';
++			if isdakota,
++				version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
++				if (version>=6),
++					executable='issm_dakota.exe';
++				end
++			end
++			if isoceancoupling,
++				executable='issm_ocean.exe';
++			end
+ 
+-			 executable='issm.exe';
+-			 if isdakota,
+-				 version=IssmConfig('_DAKOTA_VERSION_'); version=str2num(version(1:3));
+-				 if (version>=6),
+-					 executable='issm_dakota.exe';
+-				 end
+-			 end
+-			 if isoceancoupling,
+-				 executable='issm_ocean.exe';
+-			 end
++			%compute number of processors
++			cluster.np=cluster.numnodes*cluster.cpuspernode;                     
++			shortname = substring(modelname,1,min(12,length(modelname)));
+ 
+-			 %compute number of processors
+-			 cluster.np=cluster.numnodes*cluster.cpuspernode;                     
+-       shortname = substring(modelname,1,min(12,length(modelname)));
++			%write queuing script 
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#PBS -S /bin/bash\n');
++			fprintf(fid,'#PBS -N %s\n',shortname);
++			fprintf(fid,'#PBS -q %s \n',cluster.queue);
++			fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,cluster.procspernodes);
++			fprintf(fid,'#PBS -l walltime=%s\n',duration(0,cluster.time,0)); %walltime is in minutes.
++			fprintf(fid,'#PBS -A %s\n',cluster.accountname);
++			fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
++			fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
++			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
++			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
++			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
++			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+ 
+-			 %write queuing script 
+-			 fid=fopen([modelname '.queue'],'w');
+-			 fprintf(fid,'#PBS -S /bin/bash\n');
+-			 fprintf(fid,'#PBS -N %s\n',shortname);
+-			 fprintf(fid,'#PBS -q %s \n',cluster.queue);
+-       fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,cluster.procspernodes);
+-			 fprintf(fid,'#PBS -l walltime=%s\n',duration(0,cluster.time,0)); %walltime is in minutes.
+-       fprintf(fid,'#PBS -A %s\n',cluster.accountname);
+-			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+-			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+-			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+-			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+-			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+-       fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
++			if ~io_gather, %concatenate the output files:
++				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
++			end
++			fclose(fid);
+ 
+-			 if ~io_gather, %concatenate the output files:
+-				 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+-			 end
+-			 fclose(fid);
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.run'],'w');
++				fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
++				if ~io_gather, %concatenate the output files:
++					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
++				end
++				fclose(fid);
++				fid=fopen([modelname '.errlog'],'w');
++				fclose(fid);
++				fid=fopen([modelname '.outlog'],'w');
++				fclose(fid);
++			end
++		end %}}}
++		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+ 
+-			 %in interactive mode, create a run file, and errlog and outlog file
+-			 if cluster.interactive,
+-				 fid=fopen([modelname '.run'],'w');
+-				 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+-				 if ~io_gather, %concatenate the output files:
+-					 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+-				 end
+-				 fclose(fid);
+-				 fid=fopen([modelname '.errlog'],'w');
+-				 fclose(fid);
+-				 fid=fopen([modelname '.outlog'],'w');
+-				 fclose(fid);
+-			 end
+-		 end %}}}
++			%compress the files into one zip.
++			compressstring=['tar -zcf ' dirname '.tar.gz '];
++			for i=1:numel(filelist),
++				compressstring = [compressstring ' ' filelist{i}];
++			end
++			system(compressstring);
++			disp('uploading input file and queueing script');
++			directory=cluster.executionpath;
++			issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
+ 
++		end
++		%}}}
++		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+ 
+-		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
++			disp('launching solution sequence on remote cluster');
++			launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++				' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
++			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
++		end %}}}
++		function Download(cluster,dirname,filelist)% {{{
+ 
+-			 %compress the files into one zip.
+-			 compressstring=['tar -zcf ' dirname '.tar.gz '];
+-			 for i=1:numel(filelist),
+-				 compressstring = [compressstring ' ' filelist{i}];
+-			 end
+-			 system(compressstring);
+-			 disp('uploading input file and queueing script');
+-			 directory=cluster.executionpath;
+-			 issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
++			%copy files from cluster to current directory
++			directory=[cluster.executionpath '/' dirname '/'];
++			issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+ 
+-		 end
+-		 %}}}
+-
+-
+-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+-
+-			 disp('launching solution sequence on remote cluster');
+-			  launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+-											 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
+-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+-		 end %}}}
+-
+-		 function Download(cluster,dirname,filelist)% {{{
+-
+-			 %copy files from cluster to current directory
+-			 directory=[cluster.executionpath '/' dirname '/'];
+-			 issmscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
+-
+-		 end %}}}
++		end %}}}
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22054-22055.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22054-22055.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22054-22055.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/os/oshostname.m
+===================================================================
+--- ../trunk-jpl/src/m/os/oshostname.m	(revision 22054)
++++ ../trunk-jpl/src/m/os/oshostname.m	(revision 22055)
+@@ -17,6 +17,11 @@
+ 	end
+ end
+ 
++% one more try using java....
++if isempty(hostname) & usejava('jvm'),
++	hostname = char(getHostName(java.net.InetAddress.getLocalHost));
++end
++
+ % Take out minus signs
+ hostname = strrep(hostname,'-','');
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22055-22056.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22055-22056.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22055-22056.diff	(revision 22755)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/m/os/oshostname.m
+===================================================================
+--- ../trunk-jpl/src/m/os/oshostname.m	(revision 22055)
++++ ../trunk-jpl/src/m/os/oshostname.m	(revision 22056)
+@@ -4,12 +4,23 @@
+ %   Usage:
+ %      hostname=oshostname();
+ 
+-%See http://www.mathworks.com/help/matlab/ref/system.html "tips" section
+-%We need to add < /dev/null otherwise what is in the clipboard is added
+-[status,hostname]=system('hostname < /dev/null');
++%Initialize output
++hostname = '';
+ 
+-% If that command did not work, we have an alternative
+-if status~=0,
++%First try using java (most stable way)
++if usejava('jvm'),
++	hostname = char(getHostName(java.net.InetAddress.getLocalHost));
++end
++
++%Method 2: use system command (MATLAB bug includes what's in the clipboard)
++if isempty(hostname),
++	%See http://www.mathworks.com/help/matlab/ref/system.html "tips" section
++	%We need to add < /dev/null otherwise what is in the clipboard is added
++	[status,hostname]=system('hostname < /dev/null');
++end
++
++%Method 3, last chance
++if isempty(hostname),
+ 	if ispc
+ 		hostname = getenv('COMPUTERNAME');
+ 	else
+@@ -17,11 +28,6 @@
+ 	end
+ end
+ 
+-% one more try using java....
+-if isempty(hostname) & usejava('jvm'),
+-	hostname = char(getHostName(java.net.InetAddress.getLocalHost));
+-end
+-
+ % Take out minus signs
+ hostname = strrep(hostname,'-','');
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22056-22057.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22056-22057.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22056-22057.diff	(revision 22755)
@@ -0,0 +1,294 @@
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22056)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22057)
+@@ -64,7 +64,6 @@
+ from NodeConnectivity import NodeConnectivity
+ from ElementConnectivity import ElementConnectivity
+ from contourenvelope import contourenvelope
+-import MatlabFuncs as m
+ from DepthAverage import DepthAverage
+ #}}}
+ 
+@@ -125,45 +124,45 @@
+ 		#}}}
+ 	def properties(self):    # {{{
+ 		# ordered list of properties since vars(self) is random
+-		return ['mesh',\
+-		        'mask',\
+-		        'geometry',\
+-		        'constants',\
+-		        'smb',\
+-		        'basalforcings',\
+-		        'materials',\
+-		        'damage',\
+-		        'friction',\
+-		        'flowequation',\
+-		        'timestepping',\
+-		        'initialization',\
+-		        'rifts',\
+-		        'slr',\
+-		        'debug',\
+-		        'verbose',\
+-		        'settings',\
+-		        'toolkits',\
+-		        'cluster',\
+-		        'balancethickness',\
+-		        'stressbalance',\
+-		        'groundingline',\
+-		        'hydrology',\
+-		        'masstransport',\
+-		        'thermal',\
+-		        'steadystate',\
+-		        'transient',\
+-		        'levelset',\
+-		        'calving',\
+-                        'gia',\
+-                        'love',\
+-		        'autodiff',\
+-		        'inversion',\
+-		        'qmu',\
+-		        'amr',\
+-		        'outputdefinition',\
+-		        'results',\
+-		        'radaroverlay',\
+-		        'miscellaneous',\
++		return ['mesh',
++		        'mask',
++		        'geometry',
++		        'constants',
++		        'smb',
++		        'basalforcings',
++		        'materials',
++		        'damage',
++		        'friction',
++		        'flowequation',
++		        'timestepping',
++		        'initialization',
++		        'rifts',
++		        'slr',
++		        'debug',
++		        'verbose',
++		        'settings',
++		        'toolkits',
++		        'cluster',
++		        'balancethickness',
++		        'stressbalance',
++		        'groundingline',
++		        'hydrology',
++		        'masstransport',
++		        'thermal',
++		        'steadystate',
++		        'transient',
++		        'levelset',
++		        'calving',
++						'gia',
++						'love',
++		        'autodiff',
++		        'inversion',
++		        'qmu',
++		        'amr',
++		        'outputdefinition',
++		        'results',
++		        'radaroverlay',
++		        'miscellaneous',
+ 		        'private']
+ 	# }}}
+ 	def __repr__(obj): #{{{
+@@ -197,7 +196,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("levelset","[%s,%s]" % ("1x1",obj.levelset.__class__.__name__),"parameters for moving boundaries (level-set method)"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("calving","[%s,%s]" % ("1x1",obj.calving.__class__.__name__),"parameters for calving"))
+-                string="%s\n%s" % (string,'%19s: %-22s -- %s' % ("love","[%s,%s]" % ("1x1",obj.love.__class__.__name__),"parameters for love solution"))
++		string="%s\n%s" % (string,'%19s: %-22s -- %s' % ("love","[%s,%s]" % ("1x1",obj.love.__class__.__name__),"parameters for love solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
+@@ -292,7 +291,7 @@
+ 			#get field
+ 			field=getattr(md1,fieldi)
+ 			fieldsize=np.shape(field)
+-			if hasattr(field,'__dict__') and not m.ismember(fieldi,['results'])[0]:    #recursive call
++			if hasattr(field,'__dict__') and not fieldi in ['results']:    #recursive call
+ 				object_fields=vars(field)
+ 				for fieldj in object_fields:
+ 					#get field
+@@ -300,7 +299,7 @@
+ 					fieldsize=np.shape(field)
+ 					if len(fieldsize):
+ 						#size = number of nodes * n
+-						if   fieldsize[0]==numberofvertices1:
++						if fieldsize[0]==numberofvertices1:
+ 							setattr(getattr(md2,fieldi),fieldj,field[pos_node])
+ 						elif fieldsize[0]==numberofvertices1+1:
+ 							setattr(getattr(md2,fieldi),fieldj,np.vstack((field[pos_node],field[-1,:])))
+@@ -310,7 +309,7 @@
+ 			else:
+ 				if len(fieldsize):
+ 					#size = number of nodes * n
+-					if   fieldsize[0]==numberofvertices1:
++					if fieldsize[0]==numberofvertices1:
+ 						setattr(md2,fieldi,field[pos_node])
+ 					elif fieldsize[0]==numberofvertices1+1:
+ 						setattr(md2,fieldi,np.hstack((field[pos_node],field[-1,:])))
+@@ -361,13 +360,13 @@
+ 			md2.mesh.y2d=md1.mesh.y[pos_node_2d]
+ 
+ 		#Edges
+-		if m.strcmp(md.mesh.domaintype(),'2Dhorizontal'):
++		if md.mesh.domaintype()=='2Dhorizontal':
+ 			if np.ndim(md2.mesh.edges)>1 and np.size(md2.mesh.edges,axis=1)>1:    #do not use ~isnan because there are some np.nans...
+ 				#renumber first two columns
+ 				pos=np.nonzero(md2.mesh.edges[:,3]!=-1)[0]
+-				md2.mesh.edges[:  ,0]=Pnode[md2.mesh.edges[:,0]-1]
+-				md2.mesh.edges[:  ,1]=Pnode[md2.mesh.edges[:,1]-1]
+-				md2.mesh.edges[:  ,2]=Pelem[md2.mesh.edges[:,2]-1]
++				md2.mesh.edges[:,0]=Pnode[md2.mesh.edges[:,0]-1]
++				md2.mesh.edges[:,1]=Pnode[md2.mesh.edges[:,1]-1]
++				md2.mesh.edges[:,2]=Pelem[md2.mesh.edges[:,2]-1]
+ 				md2.mesh.edges[pos,3]=Pelem[md2.mesh.edges[pos,3]-1]
+ 				#remove edges when the 2 vertices are not in the domain.
+ 				md2.mesh.edges=md2.mesh.edges[np.nonzero(np.logical_and(md2.mesh.edges[:,0],md2.mesh.edges[:,1]))[0],:]
+@@ -694,46 +693,71 @@
+ 		
+ 		#dealing with the friction law
+ 		#drag is limited to nodes that are on the bedrock.
+-		if hasattr(md.friction,'coefficient'): md.friction.coefficient=project2d(md,md.friction.coefficient,1)
++		if hasattr(md.friction,'coefficient'): 
++			md.friction.coefficient=project2d(md,md.friction.coefficient,1)
+ 
+ 		#p and q (same deal, except for element that are on the bedrock: )
+-		if hasattr(md.friction,'p'): md.friction.p=project2d(md,md.friction.p,1)
+-		if hasattr(md.friction,'q'): md.friction.q=project2d(md,md.friction.q,1)
++		if hasattr(md.friction,'p'): 
++			md.friction.p=project2d(md,md.friction.p,1)
++		if hasattr(md.friction,'q'): 
++			md.friction.q=project2d(md,md.friction.q,1)
+ 		
+-		if hasattr(md.friction,'coefficientcoulomb'): md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1)
+-		if hasattr(md.friction,'C'): md.friction.C=project2d(md,md.friction.C,1)
+-		if hasattr(md.friction,'As'): md.friction.As=project2d(md,md.friction.As,1)
++		if hasattr(md.friction,'coefficientcoulomb'): 
++			md.friction.coefficientcoulomb=project2d(md,md.friction.coefficientcoulomb,1)
++		if hasattr(md.friction,'C'): 
++			md.friction.C=project2d(md,md.friction.C,1)
++		if hasattr(md.friction,'As'): 
++			md.friction.As=project2d(md,md.friction.As,1)
+ 		if hasattr(md.friction,'effective_pressure') and not np.isnan(md.friction.effective_pressure).all():
+-                    md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1)
+-		if hasattr(md.friction,'water_layer'): md.friction.water_layer=project2d(md,md.friction.water_layer,1)
+-		if hasattr(md.friction,'m'): md.friction.m=project2d(md,md.friction.m,1)
++			md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1)
++		if hasattr(md.friction,'water_layer'): 
++			md.friction.water_layer=project2d(md,md.friction.water_layer,1)
++		if hasattr(md.friction,'m'): 
++			md.friction.m=project2d(md,md.friction.m,1)
+ 
+ 		#observations
+-		if not np.isnan(md.inversion.vx_obs).all(): md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 
+-		if not np.isnan(md.inversion.vy_obs).all(): md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers) 
+-		if not np.isnan(md.inversion.vel_obs).all(): md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers) 
+-		if not np.isnan(md.inversion.cost_functions_coefficients).all(): md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers) 
+-                if isinstance(md.inversion.min_parameters,np.ndarray):
+-                    if md.inversion.min_parameters.size>1: md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers) 
+-                if isinstance(md.inversion.max_parameters,np.ndarray):
+-		    if md.inversion.max_parameters.size>1: md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers) 
++		if not np.isnan(md.inversion.vx_obs).all(): 
++			md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers) 
++		if not np.isnan(md.inversion.vy_obs).all(): 
++			md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers) 
++		if not np.isnan(md.inversion.vel_obs).all(): 
++			md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers) 
++		if not np.isnan(md.inversion.cost_functions_coefficients).all(): 
++			md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers) 
++		if isinstance(md.inversion.min_parameters,np.ndarray):
++			if md.inversion.min_parameters.size>1: 
++				md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers) 
++		if isinstance(md.inversion.max_parameters,np.ndarray):
++			if md.inversion.max_parameters.size>1: 
++				md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers) 
+ 		if not np.isnan(md.smb.mass_balance).all():
+ 			md.smb.mass_balance=project2d(md,md.smb.mass_balance,md.mesh.numberoflayers) 
+ 		
+ 		#results
+-		if not np.isnan(md.initialization.vx).all(): md.initialization.vx=DepthAverage(md,md.initialization.vx)
+-		if not np.isnan(md.initialization.vy).all(): md.initialization.vy=DepthAverage(md,md.initialization.vy)
+-		if not np.isnan(md.initialization.vz).all(): md.initialization.vz=DepthAverage(md,md.initialization.vz)
+-		if not np.isnan(md.initialization.vel).all(): md.initialization.vel=DepthAverage(md,md.initialization.vel)
+-		if not np.isnan(md.initialization.temperature).all(): md.initialization.temperature=DepthAverage(md,md.initialization.temperature)
+-                if not np.isnan(md.initialization.pressure).all(): md.initialization.pressure=project2d(md,md.initialization.pressure,1)
+-                if not np.isnan(md.initialization.sediment_head).all(): md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1)
+-                if not np.isnan(md.initialization.epl_head).all(): md.initialization.epl_head=project2d(md,md.initialization.epl_head,1)
+-                if not np.isnan(md.initialization.epl_thickness).all(): md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1)
++		if not np.isnan(md.initialization.vx).all(): 
++			md.initialization.vx=DepthAverage(md,md.initialization.vx)
++		if not np.isnan(md.initialization.vy).all(): 
++			md.initialization.vy=DepthAverage(md,md.initialization.vy)
++		if not np.isnan(md.initialization.vz).all(): 
++			md.initialization.vz=DepthAverage(md,md.initialization.vz)
++		if not np.isnan(md.initialization.vel).all(): 
++			md.initialization.vel=DepthAverage(md,md.initialization.vel)
++		if not np.isnan(md.initialization.temperature).all(): 
++			md.initialization.temperature=DepthAverage(md,md.initialization.temperature)
++		if not np.isnan(md.initialization.pressure).all(): 
++			md.initialization.pressure=project2d(md,md.initialization.pressure,1)
++		if not np.isnan(md.initialization.sediment_head).all(): 
++			md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1)
++		if not np.isnan(md.initialization.epl_head).all(): 
++			md.initialization.epl_head=project2d(md,md.initialization.epl_head,1)
++		if not np.isnan(md.initialization.epl_thickness).all(): 
++			md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1)
+ 
+ 		#giaivins
+-		if not np.isnan(md.gia.mantle_viscosity).all(): md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1) 
+-		if not np.isnan(md.gia.lithosphere_thickness).all(): md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1) 
++		if not np.isnan(md.gia.mantle_viscosity).all(): 
++			md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1) 
++		if not np.isnan(md.gia.lithosphere_thickness).all(): 
++			md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1) 
+ 
+ 		#elementstype
+ 		if not np.isnan(md.flowequation.element_equation).all():
+@@ -759,8 +783,9 @@
+ 		md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers)
+ 		md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers)
+ 		md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers)
+-		if not np.isnan(md.damage.spcdamage).all(): md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers-1)
+ 		md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers-1)
++		if not np.isnan(md.damage.spcdamage).all(): 
++			md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers-1)
+ 
+ 		#materials
+ 		md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B)
+@@ -786,8 +811,8 @@
+ 		md.geometry.surface=project2d(md,md.geometry.surface,1)
+ 		md.geometry.thickness=project2d(md,md.geometry.thickness,1)
+ 		md.geometry.base=project2d(md,md.geometry.base,1)
+-                if isinstance(md.geometry.bed,np.ndarray):
+-                    md.geometry.bed=project2d(md,md.geometry.bed,1)
++		if isinstance(md.geometry.bed,np.ndarray):
++			md.geometry.bed=project2d(md,md.geometry.bed,1)
+ 		md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1)
+ 		md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1)
+ 
+@@ -814,12 +839,16 @@
+ 		mesh.numberofvertices=md.mesh.numberofvertices2d
+ 		mesh.numberofelements=md.mesh.numberofelements2d
+ 		mesh.elements=md.mesh.elements2d
+-		if not np.isnan(md.mesh.vertexonboundary).all(): mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1)
+-		if not np.isnan(md.mesh.elementconnectivity).all(): mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1)
++		if not np.isnan(md.mesh.vertexonboundary).all(): 
++			mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1)
++		if not np.isnan(md.mesh.elementconnectivity).all(): 
++			mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1)
+ 		if isinstance(md.mesh.lat,np.ndarray):
+-			if md.mesh.lat.size==md.mesh.numberofvertices:  mesh.lat=project2d(md,md.mesh.lat,1) 
++			if md.mesh.lat.size==md.mesh.numberofvertices:  
++				mesh.lat=project2d(md,md.mesh.lat,1) 
+ 		if isinstance(md.mesh.long,np.ndarray):
+-			if md.mesh.long.size==md.mesh.numberofvertices: mesh.long=project2d(md,md.mesh.long,1) 
++			if md.mesh.long.size==md.mesh.numberofvertices: 
++				md.mesh.long=project2d(md,md.mesh.long,1) 
+ 		mesh.epsg=md.mesh.epsg
+ 		md.mesh=mesh
+ 		md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)[0]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22057-22058.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22057-22058.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22057-22058.diff	(revision 22755)
@@ -0,0 +1,1741 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(nonexistent)
+@@ -1,609 +0,0 @@
+-module lovenb_sub
+-
+- use util
+- use lnb_param
+-
+- implicit none
+- 
+- contains
+- 
+- subroutine boundary_conditions_matrix(bc,indx,nbc)
+-!-------------------------------------
+-
+-  implicit none
+-  double complex :: la, mu
+-  double precision :: xmin,xmax,eps,hini,hmin
+-  double precision :: x,ro1,ro2,g,d,one
+-  double complex, dimension (:,:), pointer :: bc
+-  integer, dimension(:), pointer   :: indx
+-  double complex, dimension(6)   :: ystart,dydx
+-  double complex, dimension(6,6) :: ystep
+-  integer :: ny,i,j,k,ii,jj,kk,nok,nbad,is,nbc,ibc,ifirst,nstep
+-  logical :: solid,vali
+-  
+-  !-- Initialisation of boundary condition matrix
+-
+-  indx(:) = 0
+-  
+-  !-- Integration 
+-
+-  eps= 1.d-10
+-  hini=1.d-10
+-  hmin=0.d0
+-
+-  ! Underflows risk tests in the numerical integration
+-  ! The starting ystart are chosen to be different than 1 to limit under and overflows in the Runge-Kutta
+-  if (-300.d0<log10(tiny(ra))) then 
+-	write(*,*) 'Warning problem in the dimensioning of the starting values in Runge-Kutta'
+-	write(*,*) 'log tiny(ra) = ', log(tiny(ra))
+-	stop
+-  endif
+-
+-	
+-   if ((log10(1.d0/ra**int(dble(deg)/10.d0)))<-250.d0) then
+-	valini=1.d-300!*cmplx(1.d0,1.d0)
+-   else
+-	valini= 1.d0!*cmplx(1.d0,1.d0)
+-   endif
+-
+-  
+-  ! Which among the model interfaces is the first to display boundary conditions
+-  ifirst = 0
+-  i = 0
+-  do while (ifirst==0)
+-	i = i+1
+-	if (radbc(i)) ifirst = i
+-  end do
+-  
+-  
+-  !-- Layer iteration for the solutions propagation 
+-  !    and typing the matrix boundary conditions 
+-  ibc = 0   ! Counter of interfaces with boundary conditions 
+-
+-  do i = ifirst,nlayer 
+-  
+-   xmin= radius(i)/ra
+-   xmax= radius(i+1)/ra - epsdb
+-   nstep=100
+-  
+-   if (soliddim(i)) then
+-   		ny = 6
+-   		is = 0
+-   		one= 1.d0
+-   else	
+-   		ny = 2
+-   		is = 4
+-   		one= -1.d0
+-   end if 	
+-   
+-   
+-   do j = 1,ny
+-		! Typing ystart
+-		if (radbc(i)) then
+-   			ystart(:)=0.d0
+-			ystart(j)= valini
+- 			k=ibc+1
+- 		else
+- 			ystart(:)=ystep(j,:)
+- 		end if
+- 		
+-		! Numerical Integration 
+-		!print*,j
+-		call propagFDS(ystart,xmin,xmax,nstep)
+- 		!call odeint(ystart,ny,xmin,xmax,eps,hini,hmin,nok,nbad)
+-		!print*,j
+- 		
+- 		! Boundary Condition matrix - propagation part 
+-		if (radbc(i+1)) then
+- 			ii = 6*k+is
+- 			jj = 6*k+j+is-3
+- 			do kk=1,ny
+-				bc(ii+kk,jj) = ystart(kk)*one
+-			end do
+-		else
+-			ystep(j,:)=ystart(:) 
+- 		end if
+-   end do
+-	
+-	
+-   if (radbc(i)) then
+-   
+-	! Boundary Condition matrix - solid regions
+-	if (soliddim(i)) then
+-		one = -1.d0
+-		if (i>1)then 
+-			if (.not.soliddim(i-1)) one = 1.d0
+-		end if
+-		do  j=1,6
+-			bc(j+6*ibc,j+6*ibc+3) = one
+-		end do
+-		ibc = ibc+1
+-		
+-	! Boundary Condition matrix - liquid regions
+-	else
+-		x = radius(i)/ra
+-		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
+-		ii = 6*ibc+1
+-		bc(ii,ii+3) = -1.d0
+-		bc(ii,ii+4+3) = -go0/g
+-		bc( ii+1,ii+3)=-ro2*g*ra/mu0
+-		bc( ii+2,ii+1+3)=-1.d0
+-		bc(ii+5,ii+3)= 4.d0*pi*GG*ro2*ra/go0
+-		bc(ii+4,ii+4+3)=-1.d0
+-		bc(ii+5,ii+5+3)=-1.d0
+-		x = radius(i+1)/ra
+-		call earth_nlayers_viscoelas(x-epsdb,ro1,la,mu,g,solid)
+-		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
+-		ii = 6*(ibc+1)+1
+-		bc(ii,ii-1)=-1.d0
+-		bc(ii,ii+1)=bc(ii+4,ii+1)*go0/g ! b(17,14) solution integration 1 of z5 CMB
+-		bc(ii,ii+2)=bc(ii+4,ii+2)*go0/g ! b(17,15) solution integration 2 of z5 CMB
+-		 					  ! b(13,..) y1 CMB
+-		bc(ii+1,ii-1)=-ro1*g*ra/mu0
+-		bc(ii+2,ii)=-1.d0
+-		bc(ii+5,ii-1)= 4.d0*pi*GG*ro1*ra/go0
+-		ibc = ibc+1
+-	end if	
+-	
+-    end if
+-	
+-	
+-	
+-  end do
+-
+-
+-  !-- Internal sphere
+-
+-  call sphere(ifirst,deg,bc)
+-
+-  !-- Surface conditions
+-	bc(nbc-5,nbc-2)=-1.d0
+-	bc(nbc-3,nbc-1)=-1.d0
+-	bc(nbc-1,nbc)=-1.d0
+-	bc(nbc,nbc)=dble(deg+1)
+-
+-  !-- Degree 1 special case
+-	if(deg==1) then
+-		  bc(nbc,:)=0.d0
+-		  bc(nbc,nbc)=1.d0
+-	end if
+-	
+-
+-	!print*, bc, imag_eval
+- end subroutine boundary_conditions_matrix
+- 
+- subroutine sphere(i,n,bc)
+-!------------------------
+-
+-	implicit none
+-	double complex :: la,mu
+-	integer :: n,i
+-	double precision :: x,e,r,ro,g,cst,xsen,eps
+-	double complex, dimension(:,:),pointer :: bc
+-
+-	logical :: solid
+-	
+-
+-	eps= 1.d-10
+-	x = radius(i)/ra
+-	e = x
+-	call earth_nlayers_viscoelas(x-eps,ro,la,mu,g,solid)
+-	
+-	xsen=(x/e)**n
+-	r=x*ra
+-	cst = 4.d0*pi*GG*ro
+-
+-	!write(89,*),xsen,r,ra,cst,mu0,mu,n	
+-
+-
+-	bc(1,1)=xsen*r/ra
+-	bc(1,2)=xsen/(r*ra)
+-	bc(1,3)=0.d0
+-
+-	bc(2,1)=(2.d0*mu*dble(n*n-n-3)/dble(n) + cst/3.d0*ro*r**2)*xsen/mu0
+-	bc(2,2)=(2.d0*mu*dble(n-1)/r**2 + cst/3.d0*ro)*xsen/mu0
+-	bc(2,3)=-ro*xsen/mu0
+-
+-	bc(3,1)=dble(n+3)/dble(n*(n+1))*xsen*r/ra
+-	bc(3,2)=1.d0/dble(n)*xsen/(r*ra)
+-	bc(3,3)=0.d0
+-
+-	bc(4,1)=2.d0*mu*dble(n+2)/dble(n+1)*xsen/mu0
+-	bc(4,2)=2.d0*mu*dble(n-1)/dble(n)*xsen/(r**2*mu0)
+-	bc(4,3)=0.d0
+-
+-	bc(5,1)=0.d0
+-	bc(5,2)=0.d0
+-	bc(5,3)=xsen/(go0*ra)
+-
+-	bc(6,1)=-cst*xsen*r/go0
+-	bc(6,2)=-cst*xsen/(r*go0)
+-	bc(6,3)=dble(n)*xsen/(r*go0)
+-
+-
+- end subroutine sphere
+- 
+- subroutine external_forcing(n,source,sourcs,nfext,nbc)
+-!-----------------------------------
+-
+-   implicit none
+-   integer :: n
+-   integer :: nfext,nbc
+-   character*40,     dimension(:),   pointer :: sourcs
+-   double complex, dimension(:,:), pointer :: source
+-   
+-   source(:,:)=0.d0
+-   sourcs(:)=' '
+-	  
+-   ! In Case of a Inner Core - Outer Core - Mantle planet and Boundary conditions on these 3 interfaces
+-   if (nbc == 24) then 
+-   
+-	!-- Sources at the ICB
+-   
+-	sourcs(1)='ICB --Volumetric Potential'
+-	source(1,12)=dble(n)/(rc*go0)
+-	source(1,11)=1.d0/(ra*go0)
+-	
+-	sourcs(2)='ICB --Pressure'
+-	source(2, 8)=-ro_mean/mu0
+-
+-	sourcs(3)='ICB --Loading'
+-	source(3, 8)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rc
+-	source(3,12)= dble(2*n+1)/(rc*go0)
+-
+-	sourcs(4)='ICB --Tangential Traction'
+-	source(4,10)= ro_mean/mu0
+-
+-	!--Sources at the CMB
+-
+-	sourcs(5)='CMB --Volumetric Potential'
+-	source(5,14)=-ro_mean/mu0*ra/rb
+-	source(5,18)= dble(2*n+1)/(rb*go0)
+-
+-	sourcs(6)='CMB --Pressure'
+-	source(6,14)=-ro_mean/mu0
+-
+-	sourcs(7)='CMB --Loading'
+-	source(7,14)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rb
+-	source(7,18)= dble(2*n+1)/(rb*go0)
+-
+-	sourcs(8)='CMB --Tangential Traction'
+-	source(8,16)=-ro_mean/mu0
+-	
+-    endif
+-
+-    !--Sources at the surface
+-
+-	sourcs(9)='SURF--Volumetric Potential'
+-	source(9,nbc)=dble(2*n+1)/(ra*go0)
+-
+-	sourcs(10)='SURF--Pressure'
+-	source(10,nbc-4)=-ro_mean/mu0
+-
+-	sourcs(11)='SURF--Loading'
+-	source(11,nbc-4)=-ro_mean*dble(2*n+1)/(3.d0*mu0)
+-	source(11,nbc)= dble(2*n+1)/(ra*go0)
+-
+-	sourcs(12)='SURF--Tangential Traction'
+-	source(12,nbc-2)= ro_mean/mu0
+-
+-	!--Special case n=1
+-
+-	if (n.eq.1) then
+-	  source(11,nbc)=0.d0
+-	  source(9,nbc)=0.d0
+-	end if
+-	
+- 
+- end subroutine external_forcing
+- 
+- subroutine solution(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-!-------------------------------------------------
+-
+-  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst,info,lda,ldb
+-  double complex, dimension(:,:), pointer :: bc,f
+-  integer,      dimension(:), pointer :: indx
+-  character*40, dimension(:), pointer :: sourcs	
+-  double complex, dimension(nbc,1) :: sc
+-  double complex :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
+-  double complex :: sumh,suml,sumk,d,val,sumy2,sumy4,sumy6,rads
+-  double precision :: delta
+-  double complex, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
+-  double complex, dimension(nbc,nbc) :: bcsav
+-  integer :: ipiv(nbc)
+-  logical :: ok
+-
+-
+-  bcsav(:,:) = bc(:,:)
+-  rads=0.d0
+-  lda=nbc
+-  ldb=nbc
+-
+-
+-  ifirst = 0
+-  i = 0
+-  do while (ifirst==0)
+-	i = i+1
+-	if (radbc(i)) ifirst = i
+-  end do
+-! do i = 1,nbc 
+-!	do j = 1,nbc
+-!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
+-!	enddo
+-! enddo
+-! write(*,*)
+-  
+-  !-- LU decomposition and determinant
+-    ok = .true.
+-   
+-  !call ludcmp(bc,nbc,nbc,indx,d)
+-  !do i=1,nbc
+-  !   d=d*bc(i,i)
+-  !end do
+-  !if (display) write(*,*)
+-  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
+-  !if (display) write(*,*),dlog10(freq*365.25d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d
+-  !write(ifile5,*) freq,d
+-
+-!-- Resolution
+-
+-  if (ok) then
+-  do i = ifmin,ifmax
+-  	
+-	do j=1,nbc
+-	  sc(j,1)=f(i,j)
+-	end do
+-
+-	!if (display) write(*,*) 'Source: ',sourcs(i)
+-	!call lubksb(bc,nbc,nbc,indx,sc)
+-	call ZGESV(nbc,1,bc,lda,ipiv,sc,ldb,info)
+-
+-	if (info.ne.0) then 
+-		print*, 'Error in ZGESV : LAPACK linear equation solver couldn''t resolve the system'
+-	end if
+-	loveh = sc(nbc-2,1)*ra*go_surf
+-	lovel = sc(nbc-1,1)*ra*go_surf
+-	lovek = sc(nbc,1)*ra*go0
+-	delta = (1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh)
+-	
+-	sumy2=0.d0
+-	sumy4=0.d0
+-	sumy6=0.d0
+-
+-	do ic=1,6
+-	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9,1)
+-	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9,1)
+-	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9,1)
+-	end do
+-
+-
+-	ibc = 0
+-	do  j = nlayer,1,-1
+-		if (radbc(j)) then 
+-			ibc=ibc+1
+-			if (soliddim(j)) then
+-
+-				loveh1 = sc(nbc - ibc*6 -3 +1,1)*ra*go_surf*valini
+-				lovel1 = sc(nbc -ibc*6 -3 +3,1)*ra*go_surf*valini
+-				lovek1 = sc(nbc -ibc*6 -3 +5,1)*ra*go0*valini
+-			else 
+-
+-				sumh=0.d0
+-				suml=0.d0
+-				sumk=0.d0
+-				ii = nbc - (ibc+1)*6
+-				jj = nbc - (ibc+1)*6 -3
+-				if (j==ifirst) then 
+-					icmin = 4
+-				else
+-					icmin = 1
+-				end if
+-				do ic=icmin,6
+-					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic,1)
+-					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic,1)
+-					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic,1)
+-				end do
+-				loveh1 = sumh*ra*go_surf*valini
+-				lovel1 = suml*ra*go_surf*valini
+-				lovek1 = sumk*ra*go0*valini
+-
+-			end if			
+-			if (j==ifirst) then
+-
+-				layerrap = zabs(loveh1s/loveh)
+-				if (layerrap > zabs(lovel1s/lovel)) layerrap = zabs(lovel1s/lovel)
+-				if (layerrap > zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
+-				layerrap = zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
+-			endif
+-
+-			loveh1s = loveh1
+-			lovel1s = lovel1
+-			lovek1s = lovek1
+-			rads = radius(j)
+-			!if (radius(j)==rb) then 
+-			!	 write(*,*) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
+-			!else if (radius(j)==rc) then
+-			!	 write(*,*) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
+-			!else
+-			!	if (j<10) then
+-			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
+-			!	else
+-			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
+-			!	end if
+-			!endif
+-		end if
+-	end do
+-
+-  end do
+-  end if
+-  
+-
+- !301 format(a4,5x,'n=',i3,5x,'h=',f14.10,5x,'l=',f14.10,5x,'k=',f14.10)
+- 301 format(a4,5x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 305 format(a4,i1,4x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 306 format(a4,i2,3x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 302 format(i5,5x,f14.10,5x,f14.10,5x,f14.10)
+- 303 format(i5,5x,f14.10,5x,f14.10,5x,f14.10,5x,f14.10)
+- 304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
+-
+- end subroutine solution 
+- 
+- 
+-  subroutine solution_nbloutput(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-!-------------------------------------------------
+-
+-  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst
+-  double precision, dimension(:,:), pointer :: bc,f
+-  integer,      dimension(:), pointer :: indx
+-  character*40, dimension(:), pointer :: sourcs	
+-  double precision, dimension(nbc) :: sc
+-  double precision :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
+-  double precision :: sumh,suml,sumk,d,val,delta,sumy2,sumy4,sumy6,rads
+-  double precision, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
+-  double precision, dimension(nbc,nbc) :: bcsav
+-  logical :: ok
+-
+-  
+-  !do ic=1,6
+-!	if (nbc==18) then 
+-!		icbh(ic) = bc(1,ic)
+-!		icbl(ic) = bc(3,ic)
+-!		icbk(ic) = bc(5,ic)
+-!!	elseif (nbc==24) then 
+-!		icbh(ic) = bc(7,ic+3)
+-!		icbl(ic) = bc(9,ic+3)
+-!		icbk(ic) = bc(11,ic+3)
+-!	end if
+-!	y2srf(ic) = bc(nbc-4,ic+nbc-9)
+-!	y4srf(ic) = bc(nbc-2,ic+nbc-9)
+-!	y6srf(ic) = bc(nbc,ic+nbc-9)
+- ! end do
+-  
+-  bcsav(:,:) = bc(:,:)
+-  rads=0
+-  ifirst = 0
+-  i = 0
+-  do while (ifirst==0)
+-	i = i+1
+-	if (radbc(i)) ifirst = i
+-  end do
+- !do i = 1,nbc 
+-!	do j = 1,nbc
+-!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
+-!	enddo
+- !enddo
+- !write(*,*)
+-  
+-  !-- LU decomposition and determinant
+-    ok = .true.
+-   
+-  call ludcmp(bc,nbc,nbc,indx,d)
+-  do i=1,nbc
+-     d=d*bc(i,i)
+-  end do
+-  write(*,*)
+-  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
+- 
+-!-- Resolution
+- 
+-  if (ok) then
+-  do i = ifmin,ifmax
+-  	
+-	do j=1,nbc
+-	  sc(j)=f(i,j)
+-	end do
+-
+-	write(*,*) 'Source: ',sourcs(i)
+-	call lubksb(bc,nbc,nbc,indx,sc)
+-
+-	loveh = sc(nbc-2)*ra*go_surf
+-	lovel = sc(nbc-1)*ra*go_surf
+-	lovek = sc(nbc)*ra*go0
+-	delta = 1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh
+-	
+-	sumy2=0.d0
+-	sumy4=0.d0
+-	sumy6=0.d0
+-
+-	do ic=1,6
+-	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9)
+-	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9)
+-	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9)
+-	end do
+-	
+-	!write(*,*) 'SURF',n,loveh,lovel,lovek-1.d0
+-	
+-	ibc = 0
+-	do  j = nlayer,1,-1
+-		if (radbc(j)) then 
+-			ibc=ibc+1
+-			if (soliddim(j)) then
+-				loveh1 = sc(nbc - ibc*6 -3 +1)*ra*go_surf*valini
+-				lovel1 = sc(nbc -ibc*6 -3 +3)*ra*go_surf*valini
+-				lovek1 = sc(nbc -ibc*6 -3 +5)*ra*go0*valini
+-			else 
+-				sumh=0.d0
+-				suml=0.d0
+-				sumk=0.d0
+-				ii = nbc - (ibc+1)*6
+-				jj = nbc - (ibc+1)*6 -3
+-				if (j==ifirst) then 
+-					icmin = 4
+-				else
+-					icmin = 1
+-				end if
+-				do ic=icmin,6
+-					!print*, ii+1,jj+ic
+-					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic)
+-					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic)
+-					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic)
+-				end do
+-				loveh1 = sumh*ra*go_surf*valini
+-				lovel1 = suml*ra*go_surf*valini
+-				lovek1 = sumk*ra*go0*valini
+-			end if			
+-			if (j==ifirst) then
+-				layerrap = dabs(loveh1s/loveh)
+-				if (layerrap > dabs(lovel1s/lovel)) layerrap = dabs(lovel1s/lovel)
+-				if (layerrap > dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
+-				layerrap = dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
+-			endif
+-
+-			loveh1s = loveh1
+-			lovel1s = lovel1
+-			lovek1s = lovek1
+-			rads = radius(j)
+-			!if (radius(j)==rb) then 
+-			!	write(*,301) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
+-			!else if (radius(j)==rc) then
+-			!	write(*,301) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
+-			!else
+-			!	if (j<10) then
+-			!		write(*,305) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
+-			!	else
+-			!		write(*,306) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
+-			!	end if
+-			!endif
+-		end if
+-	end do
+-			
+-  end do
+-  end if
+-  
+-   !write(*,*),dlog10(aimag(freq)*365.d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d, lovek
+-  
+-  
+-  
+- !301 format(a4,5x,'n=',i3,5x,'h=',f14.10,5x,'l=',f14.10,5x,'k=',f14.10)
+- 301 format(a4,5x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 305 format(a4,i1,4x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 306 format(a4,i2,3x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
+- 302 format(i5,5x,f14.10,5x,f14.10,5x,f14.10)
+- 303 format(i5,5x,f14.10,5x,f14.10,5x,f14.10,5x,f14.10)
+- 304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
+-
+- end subroutine solution_nbloutput 
+-
+-
+-
+-end module lovenb_sub
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(nonexistent)
+@@ -1,364 +0,0 @@
+- subroutine lnb_setup(  ksr, ksi, hsr, hsi, lsr, lsi,  dnfreq,  frequencies,  ddegmax, ddegmin, &
+-          dgo0,  dr0,  dmu0, dallow_layer_del,  source_type, ddisplay, dnlayer,  dradius,    &
+-          dvic,  dlac,  dmuc, dvic2,  dmuc2,  droc, dburgers,  dsoliddim)
+- use lnb_param
+- use util
+- implicit none
+- 
+- integer :: source_type, fr, i, IERR
+- integer :: dnfreq, ddegmax, ddegmin
+- integer :: dnlayer
+-
+- double precision :: T,cst, fluid_tscale,g
+- double precision, dimension(dnfreq,ddegmax+1) :: hsr,hsi,lsr,lsi,ksr,ksi
+- double complex, dimension(dnfreq,ddegmax+1) :: hs,ls,ks
+- double precision, dimension(dnfreq) :: frequencies
+-
+- double precision   :: dmu0,dgo0,dr0
+- logical :: dallow_layer_del, ddisplay
+- double precision, dimension(dnlayer) :: droc,dlac,dmuc,dvic,dvic2,dmuc2 
+- double precision, dimension(dnlayer+1) :: dradius 
+- double precision, dimension(dnlayer) :: dsoliddim,dburgers 
+-
+- !assign local variables to public variables
+- mu0=dmu0; go0=dgo0; r0=dr0; allow_layer_del=dallow_layer_del; 
+- nfreq=dnfreq;degmax=ddegmax;degmin=ddegmin;nlayer=dnlayer; 
+- allocate(roc(nlayer),lac(nlayer),muc(nlayer),vic(nlayer),vic2(nlayer),muc2(nlayer))
+- roc=droc; lac=dlac; muc=dmuc; vic=dvic; vic2=dvic2; muc2=dmuc2; 
+- allocate(radius(nlayer+1),soliddim(nlayer),burgers(nlayer),radbc(nlayer+1))
+- radius=dradius; 
+-
+-	display=ddisplay
+-
+-	do i=1,nlayer
+-	if (NINT(dsoliddim(i))==1) then
+-		soliddim(i)=.true.
+-	else
+-		soliddim(i)=.false.
+-	endif 
+-	if (NINT(dburgers(i))==1) then
+-		burgers(i)=.true.
+-	else
+-		burgers(i)=.false.
+-	endif 
+-	enddo
+-
+- pi=dacos(-1.d0)
+-
+- ra=radius(nlayer+1)
+- rb = 3480.d3
+- rc = 1221.5d3
+- r0=ra
+- cst = 365.25d0*24.d0*3600.d0*1000.d0 
+-
+- benchmark_spada=.false.
+- !frequencies=1E-5/cst*2*pi
+-
+-!	hs(:,:)=complex(0.d0,0.d0)
+-	hs(:,:)=cmplx(0.d0,0.d0)
+-	ks=hs
+-	ls=hs
+- 
+- call love_numbers(frequencies,source_type,hs,ls,ks)
+-
+- hsr=dble(hs)
+- hsi=dimag(hs)
+- ksr=dble(ks)
+- ksi=dimag(ks)
+- lsr=dble(ls)
+- lsi=dimag(ls)
+-
+-end subroutine
+-
+-!==================== 
+- subroutine love_numbers(frequencies,source_type,hs,ls,ks)
+-!====================
+-
+- use model
+- use lovenb_sub
+-
+- double complex, dimension(:,:), pointer :: bc
+- double complex, dimension(:,:), pointer :: f
+- character*40,     dimension(:),   pointer :: sourcs
+- integer,          dimension(:),   pointer :: indx,indx2
+- integer :: nbc,nfext,ifreq,ntheta2,nphi2
+- double precision :: cst,prec, delta!,h1,h2,k1,k2,l1,l2,dh1,dh2,dk1,dk2,dl1,dl2
+- double precision :: he,ke,le
+- double precision :: frequencies(nfreq), fluid_tscale
+- double complex :: loveh,lovel,lovek
+- logical :: logi
+- integer :: i,j,k,n, fr,m,l, source_type
+- double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
+-
+-
+- double precision :: cpu_time1(100)
+- integer :: cpu_count
+-
+- pi=acos(-1.d0)
+-
+-
+-  open(unit=101, file='lastrun_log')
+- cpu_count=0
+- cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+- !write(101,*), 'Done !', cpu_time1(cpu_count), 's'
+- !write(101,*),''
+-
+-
+- !double precision, dimension(:), pointer :: vech,vecl,veck,vecd,vec
+-
+- radbc(:)=.false.
+- radbc(1)=.true.
+- radbc(nlayer+1)=.true.
+- do i=2,nlayer
+-  if ((.not.soliddim(i)).or.(.not.soliddim(i-1))) then
+-   radbc(i)=.true.
+-  end if
+- end do
+- 
+-
+- ! Test number of interfaces and of boundary conditions
+-  nbc = 0
+-  do i=1,nlayer+1 
+- if (radbc(i)) nbc=nbc+6
+-  enddo
+-
+-
+- ifmin=source_type
+- ifmax=source_type
+- 
+-
+-  if (display) then
+-	 print*,'model init'
+- endif
+-
+-
+- call model_init2(nbc)  
+-
+-
+-  if (display) then
+-	 print*, 'done'
+- endif
+-
+- nfext = 13 ! Number of potential excitation sources
+- allocate( bc(nbc,nbc), indx(nbc) )
+- allocate( f(nfext,nbc), sourcs(nfext) )
+-
+- sourcs(1)='ICB --Volumetric Potential' 
+- sourcs(2)='ICB --Pressure'
+- sourcs(3)='ICB --Loading'
+- sourcs(4)='ICB --Tangential Traction'
+- sourcs(5)='CMB --Volumetric Potential'
+- sourcs(6)='CMB --Pressure'
+- sourcs(7)='CMB --Loading'
+- sourcs(8)='CMB --Tangential Traction'
+- sourcs(9)='SURF--Volumetric Potential'
+- sourcs(10)='SURF--Pressure'
+- sourcs(11)='SURF--Loading'
+- sourcs(12)='SURF--Tangential Traction'
+-
+- 
+- if (display)  print*, 'source_type =', source_type, ', ', sourcs(source_type)
+- if (source_type<9) then
+-  print*,'Error: Internal loading not supported yet, please input source_type between 9 and 12'
+-  print*,'Reference:'
+-  do i=1,12
+-   print*,i,sourcs(i)
+-  enddo
+- return
+- endif
+-
+-
+-! Print/write control
+- !display=.false. ! Printing on the terminal
+- 
+- ! Calculation optimization (avoids underflows at high degree)
+- !allow_layer_del = .true.     ! Do we allow deletion of the central layers in the calculation if necessary?
+- layerrap = 1.d0  ! Max absolute ratio between love numbers at the top and bottom of the last layer
+- 
+- ! Mode search parameters
+- freq0 = -1.d10
+- logi = .true.
+- cst = 365.25d0*24.d0*3600.d0*1000.d0 
+- prec = 1.d-8
+- firstmode = 0.d0
+-
+- 
+- cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+- !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+- !write(101,*),''
+- if (display) then
+- write(*,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+- write(*,*),''
+- endif
+-
+-! Spherical Harmonics initialization
+-
+-
+-
+-! -- SH degree loop
+-
+-
+- bc(:,:)=0.d0
+- 
+- 
+-  !write(101,*), 'Calculating impulse response'
+- if (display) then
+- write(*,*), 'Calculating impulse response'
+- endif
+- 	if (maxval(frequencies).ne.0 .and. display) then
+-		print*, 'Frequency ranging from ', minval(dabs(frequencies)), &
+-		' to ', maxval(frequencies),' s^-1'
+-	endif 
+-
+-	if (frequencies(1)==0 .and. display) then
+-		print*,'Elastic calculation'
+-	endif
+- deg=degmin-1
+-
+-
+-
+-
+- do l = degmin,degmax 
+- deg=deg+1
+- !write(*,*)
+-  !write(*,*)
+-  !write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
+-  if (display) then
+-  write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
+-  endif
+-
+-  !write(*,*)
+-  !!write(101,*), fr, T
+-
+-
+-
+-
+- do fr=1,nfreq
+-
+-  !!write(101,*),fr
+-
+-
+-  !the way Fourier Transform algorithms works : they calculate for fmin=0 to fmax=1/dt
+-  !by aliasing for this algo, f=1/(2*dt) to f=1/dt is the same as f=-1/(2*dt) to f=0
+-  !but physics-wise, the Earth response at high frequency is not what we are looking for
+-  !the [0 ; 1/(2*dt)] interval and its negative counterpart are what we are looking for
+-  !therefore in our love number calculation the frenquency set must be [0 ; 1/(2*dt) ] U [-1/(2*dt) 0[
+-
+-  !if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
+-  ! fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
+-   !print*,fluid_tscale
+-  ! freq=cmplx(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
+-! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
+-  !elseif (fr <= nfreq/2+1) then
+-  ! freq=cmplx(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
+-  !else 
+-  ! freq=cmplx(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
+-  !end if
+-  
+-  freq=cmplx(0.d0,frequencies(fr))
+-  !print*,fr,freq
+-
+-  !if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
+-  !freq=dble(fr)/T
+-  !--  Elastic Love number calculation
+-  !freq=2.d0*pi/(1e4*cst)*cmplx(0.d0,1.d0)
+-
+-   !if (deg==2) then ! for rotationnal feedback
+-   !ifmin=9;ifmax=9 ! Sets tidal calculation
+-   !bc(:,:)=0.d0
+-   !call boundary_conditions_matrix(bc,indx,nbc)
+-   !call external_forcing(deg,f,sourcs,nfext,nbc) 
+-   !call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-   !k2tidal(fr)=lovek-1.d0
+-   !h2tidal(fr)=loveh
+-   !l2tidal(fr)=lovel
+-   !ifmin=11;ifmax=11 ! Sets back loading calculation
+-   !endif
+-   !print*,(deg)
+-   bc(:,:)=0.d0
+-   call boundary_conditions_matrix(bc,indx,nbc)
+-	!print*,'bc ok', layerrap
+-   call external_forcing(deg,f,sourcs,nfext,nbc) 
+-	!print*,'forcing ok', layerrap
+-   call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-
+-	!print*,'first_sol', layerrap, epsdb
+-
+-   ! Automatic reduction of the number of layers when the attenuation with depth becomes too strong
+-   if (allow_layer_del.eqv..true.) then
+-
+-     do while ((layerrap<=epsdb).and.(nbc>12).or.(isnan(layerrap)) )
+- !		print*,'trying to delete layer', layerrap, epsdb, nbc
+-     !write(101,*)
+-     !write(101,*) 'Rapport Nombre de Love surface/profondeur faible : ', layerrap 
+-     !write(101,*) ' Changement d''interface de debut d''integration' 
+-
+-     if (display) then
+-     write(*,*)
+-     write(*,*) 'Surface/Depth Love number ratio small: ', layerrap 
+-     write(*,*) ' Changing the interface where the integration starts'
+-     endif
+-
+-     nbc = nbc-6
+-     n = 1
+-     do while (.not.radbc(n))
+-      n = n+1
+-     end do
+-     radbc(n) =.false.
+-     !write(101,*) ' New start interface: ', radius(n+1)/1.d3,' km'
+-     if (display) then
+-     write(*,*) ' New start interface: ', radius(n+1)/1.d3,' km'
+-     endif
+-        
+-     deallocate( bc, indx, f, sourcs )
+-     allocate( bc(nbc,nbc), indx(nbc) )
+-     allocate( f(nfext,nbc), sourcs(nfext) )
+-  
+-
+-     bc(:,:)=0.d0
+-     call boundary_conditions_matrix(bc,indx,nbc)
+-     call external_forcing(deg,f,sourcs,nfext,nbc) 
+-     call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+-
+-    end do
+-   end if
+-
+-   !-- Saving Love numbers
+-
+-
+-    hs(fr,deg+1) = loveh
+-    ks(fr,deg+1) = lovek - 1.d0
+-    ls(fr,deg+1) = lovel
+-
+-	!print*,dble(hs(fr,deg+1)), dimag(hs(fr,deg+1)),dble(ks(fr,deg+1)), dimag(ks(fr,deg+1))
+-
+-    !if (fr==1) then ! if this is supposed to be fluid response
+-    !  ! then cut off the imaginary part, which is inherited from approximating t=infinity to a few million years (see above the setting of freq)
+-    ! hs(fr,deg+1)=real(hs(fr,deg+1))
+-    ! ks(fr,deg+1)=real(ks(fr,deg+1))
+-    ! ls(fr,deg+1)=real(ls(fr,deg+1))
+-    !endif
+-!~~~~~~~~~~~~~~TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+- if (benchmark_spada) then
+- write(17,*), deg,fr,real(hs(fr,deg+1)), aimag(hs(fr,deg+1)),real(ks(fr,deg+1)), aimag(ks(fr,deg+1))
+- endif
+-!~~~~~~~~~~~~~~END TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-
+-
+-  !write(*,*) 'Elastic Love Numbers:  ',ke,he,le 
+-  !write(ifile1,*) deg,ke,he,le
+- end do
+- 
+- end do
+-
+-
+- cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
+- !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+- !write(101,*),''
+- if (display) then
+- write(*,*), 'Love number calc done :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
+- write(*,*),''
+- endif
+-
+- deallocate( bc, indx, f, sourcs )
+-end subroutine
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(nonexistent)
+@@ -1,422 +0,0 @@
+-module model
+- 
+- implicit none
+-
+- contains
+-
+-  subroutine model_init2(nbc)
+-!--------------------- 
+- use lnb_param
+-
+-  double precision :: ro,g,drad,la,mu,ro1,ro2,x
+-  logical :: solid,test
+-  integer :: nbc,i,n,j
+-
+-
+-
+-  !- Calculus parameters    
+-  pi=dacos(-1.d0)
+-  epsdb=epsilon(1.d0)
+-  
+-  !write(101,*), 'Epsilon machine = ',epsdb
+-  !write(101,*), 'Constants:'
+-  !write(101,*), ' pi = ',pi
+-  !write(101,*), ' G  = ',GG 
+-  !write(101,*), 'Dimensioned scales:'
+-  !write(101,*), ' rigidity mu0 = ',mu0
+-  !write(101,*), ' gravity  go0 = ',go0
+-  !write(101,*), ' distance r0  = ',r0
+-  
+- 
+-
+- 
+- !call earth_homogeneous_layers_prembased(radius,nlayer,roc,lac,muc,g,solid) !yields the Earth layers radii, density, lamé parameters, gravity and solid/liquid state boolean identifier
+- 
+- !if (benchmark_spada) then
+- ! muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.28340d11 
+- ! muc(4) = 1.05490d11; muc(5) = 0.70363d11; muc(6) = 0.50605d11
+- ! roc(1) = 10751.d0; roc(2) = 10750.d0; roc(3) = 4978.d0 
+- ! roc(6)=3300.d0
+- !else
+-  !muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.20425d11 
+-  !muc(4) = 0.870257d11; muc(5) = 0.870257d11; muc(6) = 0.510268d11
+-  !roc(1) = 10987.9d0; roc(2) = 10986.9d0; roc(3) = 4903.58d0 
+-  !roc(4) = 3628.29d0; roc(5) = 3628.29d0; roc(6) = 3113.94d0
+- !endif
+-
+- !vic2=vic/vicratio
+- !muc2=muc/mucratio
+-
+- if (display) then
+-	print*, '  Layer top boundary        rho                       la                        mu                        eta' 
+- do i = 1,nlayer
+-  ! print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
+-  if (burgers(i)) then
+-  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i),muc2(i),vic2(i), 'B'
+-  else
+-  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
+-  endif
+- end do
+-
+- endif
+- !write(101,*),
+-
+-
+- call earth_nlayers(1.d0,ro,la,mu,g,solid)
+-   go_surf = g
+-   ro_mean = 3.d0/4.d0*go_surf/(pi*GG*ra)
+-	if (display) then
+-		print*, 'Surface Gravity: ', go_surf, ' m.s^-2, mean density: ', ro_mean, ' kg.m^-3'
+-		print*, 'Center of the Earth approximated at r=', radius(1)/1e3, ' km'
+-	endif 
+-  
+-  ! Test number of interfaces and of boundary conditions
+-  n = 0
+-  do i=1,nlayer+1 
+- if (radbc(i)) n=n+1
+-  enddo
+-  if (nbc/=(6*n)) then
+- !write(101,*),
+- print*, 'Error nbc should be ',6*n,' instead of ',nbc
+- stop
+-  endif
+-  
+-  ! Test solid-liquid boundaries
+- test = .false.
+-  do i = 1,nlayer
+- if (radbc(i)) test = .true.
+- if (test) then
+- if ((.not.soliddim(i)).and.((.not.radbc(i)).or.(.not.radbc(i+1)))) then
+-  print*, 'Error in model definition: one fluid layer is not set with correct boundary conditions'
+-  stop
+- endif
+- endif
+-  enddo
+-  
+-  !-- Display a few quantities
+-  !write(101,*), ' surface radius = ',ra
+-  !write(101,*), ' CMB radius = ',rb
+-  !write(101,*), ' ICB radius = ',rc
+-  !write(101,*), ' go surface = ',go_surf
+-  !write(101,*), ' mean density = ',ro_mean 
+-  
+-  !-- Diplsay ICB conditions
+-  !x=rc/ra
+-  !write(101,*), 
+-  !call earth_nlayers_viscoelas(x-epsdb,ro1,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+-  !write(101,*), 'ICB, g = ',g
+-  !write(101,*), 'ICB, ro(Inner Core) = ', ro1
+-  !call earth_nlayers_viscoelas(x,ro2,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+-  !write(101,*), 'ICB, g = ',g
+-  !write(101,*), 'ICB, ro(Outer Core) = ', ro2
+-  !go_icb = g
+-  
+-  !-- Display CMB conditions
+-  !x=rb/ra
+-  !write(101,*),
+-  !call earth_nlayers_viscoelas(x-epsdb,ro1,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+-  !write(101,*), 'CMB, g = ',g
+-  !write(101,*), 'CMB, ro(Outer Core) = ', ro1
+-  !call earth_nlayers_viscoelas(x,ro2,cmplx(la,0.d0),cmplx(mu,0d0),g,solid)
+-  !write(101,*), 'CMB, g = ',g
+-  !write(101,*), 'CMB, ro(Mantle) = ', ro2
+-  !go_cmb = g
+- 
+- end subroutine model_init2
+-
+-
+- subroutine earth_homogeneous_layers_prembased(radin,nl,rot,lat,mut,GR,solid)
+- use lnb_param
+-   
+-   double precision :: x0,GR
+-   logical :: solid
+-   integer                 :: i,j,nl
+-   doubleprecision      :: la,mu,ro,vp,vs,RT
+-   doubleprecision      :: t1,t2,t3,t4,r1,r2
+-   doubleprecision, dimension(14) :: r
+-   doubleprecision, dimension(13,4) :: d,p,s
+-   doubleprecision, dimension(:), pointer :: radin
+-   doubleprecision, dimension(:), pointer :: rot,lat,mut
+-    doubleprecision, dimension(nl+1) :: rad
+-   
+-   
+-   RT = ra
+-   r(1) = 0.d0;     r(2) = 1221.5d0; r(3) = 3480.d0; r(4) = 3630.d0
+-   r(5) = 5600.d0;  r(6) = 5701.d0;  r(7) = 5771.d0; r(8) = 5971.d0
+-   r(9) = 6151.d0; r(10) = 6291.d0; r(11) = 6346.6d0
+-   r(12) = 6356.d0; r(13) = 6368.d0; r(14) = ra
+-  
+-!   if ((r(14)*1.d3) /= ra) stop'Problem in prem: Earth radius /= ra !' 
+-!
+-  d(:,:) = 0.d0
+-  d(1,1) = 13.0885d0;               d(1,3) = -8.8381d0 
+-  d(2,1) = 12.5815d0; d(2,2) = -1.2638d0; d(2,3) = -3.6426d0; d(2,4) = -5.5281d0
+-  d(3,1) = 7.9565d0 ; d(3,2) = -6.4761;   d(3,3) = 5.5283d0;  d(3,4) = -3.0807d0
+-  d(4,1) = 7.9565d0 ; d(4,2) = -6.4761;   d(4,3) = 5.5283d0;  d(4,4) = -3.0807d0
+-  d(5,1) = 7.9565d0 ; d(5,2) = -6.4761;   d(5,3) = 5.5283d0;  d(5,4) = -3.0807d0
+-  d(6,1) = 5.3197d0 ; d(6,2) = -1.4836d0
+-  d(7,1) = 11.2494d0; d(7,2) = -8.0298d0
+-  d(8,1) = 7.1089d0 ; d(8,2) = -3.8045d0
+-  d(9,1) = 2.6910d0 ; d(9,2) = 0.6924d0
+-  d(10,1) = 2.6910d0; d(10,2) = 0.6924d0
+-  d(11,1) = 2.9d0  
+-  d(12,1) = 2.6d0  
+-
+-! ocean
+-  if (soliddim(13).eqv..false.) then
+-   d(13,1) = 1.02d0 
+-
+-! continental
+-  else
+-  d(13,1) = d(12,1)
+-  end if
+-
+-  p(:,:) = 0.d0
+-  p(1,1) = 11.2622d0 ; p(1,3) = -6.3640d0
+-  p(2,1) = 11.0487d0 ; p(2,2) = -4.0362d0; p(2,3)  = 4.8023d0; p(2,4) = -13.5732d0
+-  p(3,1) = 15.3891d0 ; p(3,2) = -5.3181d0; p(3,3)  = 5.5242d0; p(3,4) = -2.5514d0
+-  p(4,1) = 24.952d0 ; p(4,2)  = -40.4673d0; p(4,3) = 51.4832d0; p(4,4) = -26.6419d0
+-  p(5,1) = 29.2766d0 ; p(5,2) = -23.6027d0; p(5,3) = 5.5242d0; p(5,4) = -2.5514d0
+-  p(6,1) = 19.0957d0 ; p(6,2)  = -9.8672d0
+-  p(7,1) = 39.7027d0 ; p(7,2)  = -32.6166d0
+-  p(8,1) = 20.3926d0 ; p(8,2)  = -12.2569d0
+-  p(9,1) = 4.1875d0 ; p(9,2)  = 3.9382d0
+-  p(10,1) = 4.1875d0 ; p(10,2) = 3.9382d0
+-  p(11,1) = 6.8d0 
+-  p(12,1) = 5.8d0
+-!
+-! ocean
+-  if (soliddim(13).eqv..false.) then
+-  p(13,1) = 1.45d0 
+-!
+-! continental
+-  else
+-  p(13,1) = p(12,1)
+-  end if
+-!----
+-!
+-  s(:,:) = 0.d0
+-!
+-  s(1,1) = 3.6678d0; s(1,3) = -4.4475d0
+-
+-  s(3,1) = 6.9254d0; s(3,2) = 1.4672d0; s(3,3) = -2.0834d0; s(3,4) = 0.9783d0
+-  s(4,1) = 11.1671d0; s(4,2) = -13.7818d0; s(4,3) = 17.4575d0; s(4,4) = -9.2777d0
+-  s(5,1) = 22.3459d0; s(5,2) = -17.2473d0; s(5,3) = -2.0834d0; s(5,4) = 0.9783d0
+-  s(6,1) = 9.9839d0; s(6,2) = -4.9324
+-  s(7,1) = 22.3512d0; s(7,2) = -18.5856d0 
+-  s(8,1) = 8.9496d0; s(8,2) = -4.4597
+-  s(9,1) = 2.1519d0; s(9,2) = 2.3481d0
+-  s(10,1) = 2.1519d0; s(10,2) = 2.3481d0
+-  s(11,1) = 3.9d0 
+-  s(12,1) = 3.2d0 
+-!
+-! ocean (please don't modify)
+-  if (soliddim(13).eqv..false.) then
+-!
+-! continental
+-  else
+-  s(13,1) = s(12,1)
+-  end if
+-!
+-!
+-  r(:) = r(:)*1.d3
+-  
+-  !- handling the first layer : central sphere
+-  rad = radin
+-  rad(1) = 0.d0
+-  
+-  do j = 1,nl
+-  
+- ro = 0.d0
+- vp = 0.d0
+- vs = 0.d0
+-
+- do i = 1,13
+-
+-  r1 = 0.d0
+-  r2 = 0.d0
+-  if ((rad(j) > r(i)).and.(rad(j) <= r(i+1))) then
+-   if (rad(j+1) <= r(i+1)) then
+-    r2 = rad(j+1)
+-    r1 = rad(j)
+-   else
+-    r2 = r(i+1)
+-    r1 = rad(j)
+-   end if
+-  else if (rad(j) <= r(i)) then
+-   if ((rad(j+1) > r(i)).and.(rad(j+1) <= r(i+1))) then
+-    r2 = rad(j+1)
+-    r1 = r(i)
+-   else if (rad(j+1) > r(i+1)) then
+-    r2 = r(i+1)
+-    r1 = r(i)
+-   end if
+-  end if
+-
+-  t1 = d(i,1)/3.d0
+-  t2 = d(i,2)/(Rt*4.d0)
+-  t3 = d(i,3)/((Rt**2)*5.d0)
+-  t4 = d(i,4)/((Rt**3)*6.d0)
+-  ro =  ro + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
+-   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
+-     
+-  t1 = p(i,1)/3.d0
+-  t2 = p(i,2)/(Rt*4.d0)
+-  t3 = p(i,3)/((Rt**2)*5.d0)
+-  t4 = p(i,4)/((Rt**3)*6.d0)
+-  vp =  vp + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
+-   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
+-     
+-  t1 = s(i,1)/3.d0
+-  t2 = s(i,2)/(Rt*4.d0)
+-  t3 = s(i,3)/((Rt**2)*5.d0)
+-  t4 = s(i,4)/((Rt**3)*6.d0)
+-  vs =  vs + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
+-   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
+-
+- end do
+- ro = ro*3 / (rad(j+1)**3-rad(j)**3)
+- vp = vp*3 /(rad(j+1)**3-rad(j)**3)
+- vs = vs*3 / (rad(j+1)**3-rad(j)**3)
+- mu = ro*vs**2
+- la = ro*vp**2 - 2.d0*mu
+- ro = ro*1.d3
+- la = la*1.d9
+- mu = mu*1.d9
+-
+- !print*, rad(j+1), ro, la , mu
+- rot(j) = ro
+- lat(j) = la
+- mut(j) = mu
+-  end do
+-   
+-   
+- end subroutine earth_homogeneous_layers_prembased
+-
+-
+- subroutine earth_nlayers(x0,ro,la,mu,GR,solid)
+- use lnb_param
+-!---------------------------------------
+-! Gets planet properties at non-dimentionalized radius x0:
+-!ro: density
+-!la: Lame lambda constant
+-!mu: Lame mu constant (shear modulus)
+-!GR: gravity
+-!solid: boolean, true if solid, otherwise liquid
+-    integer                 :: i,j
+-    doubleprecision      :: la,mu,CST,GR
+-    doubleprecision      :: x,x0,xx0,ro
+-    doubleprecision      ::r1,r2
+-    logical       :: solid
+-    double precision, dimension(nlayer+1) :: r
+-    
+-
+-
+-    solid = .true.
+-
+-    r(:) = radius(:)
+-    r(1) = 0.d0
+-    x    = x0   * ra
+-    CST = 4.d0*pi*GG/3.d0
+-    if ( x > r(nlayer+1) ) x = r(nlayer+1)
+-    
+-    GR = 0.d0
+-    
+-    do i = 1,nlayer
+-
+- if (x > r(i)) then 
+-
+-  r2 = r(i+1)
+-  r1 = r(i)
+-  ro = roc(i)
+-
+-  if (x <= r(i+1)) then
+-
+-   GR = GR + ro*(x**3-r1**3)
+-   if (x > epsdb) GR = GR*CST/(x**2)
+-
+-  else
+-   GR = GR + ro*(r2**3-r1**3)
+-  end if
+- end if
+-
+- if ((x >= r(i)).and.(x < r(i+1))) then    
+-  la = lac(i)
+-  mu = muc(i)
+-  ro = roc(i)
+-  if ( soliddim(i).eqv..false. ) solid = .false.
+-
+- end if
+-
+-    end do
+-
+-    if (x>=r(nlayer+1)) then
+- la = lac(nlayer)
+- mu = muc(nlayer)
+- ro = roc(nlayer)
+-  if ( soliddim(nlayer).eqv..false. ) solid = .false.
+-
+-     end if
+-
+- end subroutine earth_nlayers
+- 
+- subroutine earth_nlayers_viscoelas(x0,ro,la,mu,GR,solid)
+- use lnb_param
+-!---------------------------------------
+-! Defines the earth rheology at non-dimensionalized radius x0 and angular frequency freq (global/public variable)
+-
+-    integer                 :: i
+-    double complex   :: la, mu, cst
+-    double precision      :: GR,la0,mu00,ka,mu1,mu2,vi2
+-    double precision      :: x,x0,xx0,ro,vi
+-    logical       :: notfound,solid,burg
+-
+-
+-
+-  call earth_nlayers(x0,ro,la0,mu00,GR,solid)
+-  
+-  x    = x0 * ra
+- do i = 1,nlayer
+- if ((x >= radius(i)).and.(x < radius(i+1))) then
+- vi = vic(i) 
+- vi2 = vic2(i)
+- mu2=muc2(i)
+- burg=burgers(i)
+- end if
+- end do
+-
+-  if (burg.eqv..true.) then
+- mu1=mu00
+-
+- if ((vi*freq) /= 0.d0) then
+-  ka=la0 + 2.d0/3.d0*mu00
+-  !print*,mu1,mu2,vi,vi2
+-   mu=mu1*freq*(freq+mu2/vi2)/((freq+mu2/vi2)*(freq+mu1/vi)+mu1/vi2*freq)
+-  !la=4*la0*mu**2/(2*mu*(3*la0+2*mu)-3*la0*mu)
+-  la=ka-2.d0/3.d0*mu
+-  !print*,freq,mu,la
+- else
+-  mu = mu00
+-  la = la0
+- endif
+-  else
+-   ka = la0 + 2.d0/3.d0*mu00
+-   cst = vi*freq
+-   if (cst /= 0.d0) then
+-  mu = mu00/(1.d0+mu00/cst)
+-  la = (la0 + mu00*ka/cst)/(1.d0 + mu00/cst)
+-   else
+-  mu = mu00
+-  la = la0
+-   endif
+-  endif
+-   
+-  !
+-  !!write(101,*), freq,cst,la0,la,mu00,mu,vi
+-
+- end subroutine earth_nlayers_viscoelas
+- 
+- 
+-
+-
+-end module model
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(nonexistent)
+@@ -1,33 +0,0 @@
+-/*!\file FourierLoveCorex
+- * \brief: core solution module for love analysis. Based on Caron's fortran core. 
+- */
+-
+-#include "./FourierLoveCorex.h"
+-
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+-
+-extern "C" { 
+-	int lnb_setup_( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi, int* pnfreq, IssmDouble* frequencies, int* psh_nmax, int* psh_nmin, 
+-		IssmDouble* pg0, IssmDouble* pr0, IssmDouble* pmu0,bool* pallow_layer_deletion, int* pforcing_type, bool* pverbosemod,
+-		int* pnumlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
+-		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid);
+-
+-}
+-
+-void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi, int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, 
+-		IssmDouble g0, IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
+-		int numlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
+-		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid){
+-
+-	/*Call fortran driver: */
+-	lnb_setup_(  LoveKr,  LoveKi,  LoveHr,  LoveHi,  LoveLr, 
+-		 LoveLi,  &nfreq,  frequencies,  &sh_nmax,  &sh_nmin, 
+-		 &g0,  &r0,  &mu0, &allow_layer_deletion,  &forcing_type, &verbosemod,
+-		 &numlayers,  radius,  viscosity,  lame_lambda,  lame_mu, 
+-		 burgers_viscosity,  burgers_mu,  density,  isburgers,  issolid);
+-}
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(nonexistent)
+@@ -1,17 +0,0 @@
+-/*!\file:  FourierLoveCorex.h
+- * \brief header file for ...
+- */ 
+-
+-#ifndef _FOURIERLOVECOREX_H
+-#define _FOURIERLOVECOREX_H
+-
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi,int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, IssmDouble r0, 
+-		IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod, int numlayers, IssmDouble* radius,  
+-		IssmDouble* viscosity,IssmDouble* lame_lambda, IssmDouble* lame_mu, IssmDouble* burgers_viscosity, IssmDouble* burgers_mu,  
+-		IssmDouble* density,IssmDouble* isburgers, IssmDouble* issolid);
+-
+-#endif  /* _FOURIERLOVECOREX_H */
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(nonexistent)
+@@ -1,35 +0,0 @@
+-module lnb_param
+-
+- implicit none
+- 
+- public 
+-
+- !Physical Constants
+- double precision, parameter :: GG = 6.67259e-11! gravitational constant
+- double precision :: ra,rb,rc ! radii of the surface, CMB and ICB
+- double precision :: pi,ro_mean,go_surf,go_icb,go_cmb !some constants
+- ! GG --> gravitational constant
+- ! ra, rb, rc --> Surface, CMB and ICB radius
+- ! ro_mean --> mean density of the planet 
+- ! go_surf --> mean surface gravity
+- ! go_icb/cmb --> gravity at the Inner Core/Core-Mantle Boundary
+- double precision   :: mu0,go0,r0 !3 normalization constants
+-
+-!Numerical Constants
+- double precision :: epsdb, layerrap !used in detecting underflows in the lovenb integration
+- double complex     :: valini,freq ! integration constant and angular frequency being processed
+- logical :: allow_layer_del,display, benchmark_spada !do we allow deletion of layers in case of underflow, enable some prints in terminal
+-
+-!GIA problem setup
+- integer :: deg,ifmin,ifmax ! deg=SH degree, ifmin/ifmax=which kind of forcing is applied (usually we want loading)
+- logical :: incompressible !choose which mode of calculation is activated
+-
+-!Earth Model 
+- integer :: nfreq, degmax, degmin
+- integer :: nlayer! number of layers
+- double precision, dimension(:), pointer :: roc,lac,muc,vic,vic2,muc2 ! Earth layers parameters
+- double precision, dimension(:), pointer :: radius ! Earth layers parameters
+- double precision :: vicratio,mucratio !2 Burgers long-term to short-term ratios
+- logical, dimension(:), pointer :: soliddim,radbc,burgers ! is this layer solid (if not it's liquid), does it have specific boundary conditions and does it have a Burgers rheology (if not, it uses Maxwell)
+- 
+-end module lnb_param
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(revision 22057)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(nonexistent)
+@@ -1,226 +0,0 @@
+-module util
+- 
+- use model
+- use lnb_param
+-
+- contains
+-
+-!
+-!_______DERIVS_________________________________________________________________
+-!
+- subroutine derivs(x,y,dydx)
+- 
+- implicit none
+- double complex  :: la, mu
+- double precision :: x,ro,g
+- double complex :: flm,rlm,rm0,rg0,frh,fgr,fn
+- logical :: solid
+- integer :: iy,id,n2,ny
+- double complex, dimension(6)   :: y,dydx,f
+- double complex, dimension(6,6) :: dy
+-
+- call earth_nlayers_viscoelas(x,ro,la,mu,g,solid)
+- !print*,la,mu
+-!
+-!_______Expressions
+-!
+- flm=(la+2.d0*mu)
+- rlm=(3.d0*la+2.d0*mu)/(la+2.d0*mu)
+- rm0=mu/mu0
+- rg0=g/go0
+- frh=ro*g*ra/mu0
+- fgr=4.d0*Pi*GG*ro*ra/go0
+- fn=dble(deg*(deg+1))
+- 
+-!
+-!_______Systeme differentiel yi dans un solide
+-!
+- if(solid) then
+- 
+- ny = 6
+-
+- dy(1,1)= (-2.d0*la/flm)/x
+- dy(1,2)= mu0/flm
+- dy(1,3)= (la*fn/flm)/x
+- dy(1,4)= 0.d0
+- dy(1,5)= 0.d0
+- dy(1,6)= 0.d0
+-
+- dy(2,1)=  4.d0*(-frh+rm0*rlm/x)/x + ro*freq**2*ra/mu0
+- dy(2,2)=(-4.d0*mu/flm)/x
+- dy(2,3)= fn*(frh-2.d0*rm0*rlm/x)/x
+- dy(2,4)= fn/x
+- dy(2,5)= 0.d0
+- dy(2,6)= -frh/rg0
+-
+- dy(3,1)= -1.d0/x
+- dy(3,2)= 0.d0
+- dy(3,3)= 1.d0/x
+- dy(3,4)= 1.d0/rm0
+- dy(3,5)= 0.d0
+- dy(3,6)= 0.d0
+-
+- dy(4,1)= (frh-2.d0*rm0*rlm/x)/x
+- dy(4,2)= ( -la/flm)/x
+- dy(4,3)= (2.d0*rm0*(la*(2.d0*fn-1.d0)+2.d0*mu*(fn-1.d0))/flm)/(x*x) + ro*freq**2*ra/mu0
+- dy(4,4)= -3.d0/x
+- dy(4,5)= -(frh/rg0)/x
+- dy(4,6)= 0.d0
+-
+- dy(5,1)= fgr
+- dy(5,2)= 0.d0
+- dy(5,3)= 0.d0
+- dy(5,4)= 0.d0
+- dy(5,5)= 0.d0
+- dy(5,6)= 1.d0
+-
+- dy(6,1)= 0.d0
+- dy(6,2)= 0.d0
+- dy(6,3)= -(fgr*fn)/x
+- dy(6,4)= 0.d0
+- dy(6,5)= fn/(x*x)
+- dy(6,6)= -2.d0/x
+-  
+- else
+- 
+- ny = 2
+-
+- dy(:,:)= 0.d0
+-
+- dy(1,1)= fgr/rg0
+- dy(1,2)= 1.d0
+- dy(2,1)= (-4.d0*(fgr/rg0)+fn/x)/x
+- dy(2,2)= -2.d0/x-fgr/rg0
+- 
+- end if
+-!
+-!_______Derivees des yi
+-! 
+- dydx(:)=0.d0 
+- do id=1,ny
+-  do iy=1,ny
+-     dydx(id)=dydx(id)+dy(id,iy)*y(iy)
+-  end do
+- end do
+-
+-    end subroutine derivs
+-
+-
+-    subroutine propagFDS(ystart,xmin,xmax,nstep)
+-     implicit none
+-     double precision :: xmin,xmax,dr,x
+-     integer :: nstep,i
+-     double complex, dimension(6)   :: ystart,dydx,y,y1
+-
+-     dr = (xmax -xmin)/nstep
+-     y = ystart
+-     x = xmin
+-
+-     do i = 1,nstep
+-
+-  call derivs(x,y,dydx)
+-  y1 = y + dr*dydx
+-  x = x + dr
+-  y = y1
+-
+-     end do
+-
+-     ystart = y
+-
+- end subroutine propagFDS
+-
+-!_____LUDCMP___________________________________________________________________
+-!
+-      SUBROUTINE ludcmp(a,n,np,indx,d)
+-      IMPLICIT DOUBLE PRECISION (a-h,o-z)
+-      INTEGER n,np,indx(n),NMAX
+-      REAL*8 d,a(np,np),TINY
+-      PARAMETER (NMAX=500,TINY=1.0D-30)
+-      INTEGER i,imax,j,k
+-      REAL*8 aamax,dum,sum,vv(NMAX)
+-      d=1d0
+-      do 12 i=1,n
+-        aamax=0d0
+-        do 11 j=1,n
+-          if (dabs(a(i,j)).gt.aamax) aamax=dabs(a(i,j))
+-11      continue
+-        if (aamax.eq.0d0) stop 'singular matrix in ludcmp'
+-        vv(i)=1./aamax
+-12    continue
+-      do 19 j=1,n
+-        do 14 i=1,j-1
+-          sum=a(i,j)
+-          do 13 k=1,i-1
+-            sum=sum-a(i,k)*a(k,j)
+-13        continue
+-          a(i,j)=sum
+-14      continue
+-        aamax=0d0
+-        do 16 i=j,n
+-          sum=a(i,j)
+-          do 15 k=1,j-1
+-            sum=sum-a(i,k)*a(k,j)
+-15        continue
+-          a(i,j)=sum
+-          dum=vv(i)*dabs(sum)
+-          if (dum.ge.aamax) then
+-            imax=i
+-            aamax=dum
+-          endif
+-16      continue
+-        if (j.ne.imax)then
+-          do 17 k=1,n
+-            dum=a(imax,k)
+-            a(imax,k)=a(j,k)
+-            a(j,k)=dum
+-17        continue
+-          d=-d
+-          vv(imax)=vv(j)
+-        endif
+-        indx(j)=imax
+-        if(a(j,j).eq.0d0)a(j,j)=TINY
+-        if(j.ne.n)then
+-          dum=1d0/a(j,j)
+-          do 18 i=j+1,n
+-            a(i,j)=a(i,j)*dum
+-18        continue
+-        endif
+-19    continue
+-      return
+-      END SUBROUTINE ludcmp
+-!
+-!_____LUBKSB___________________________________________________________________
+-!
+-      SUBROUTINE lubksb(a,n,np,indx,b)
+-      IMPLICIT DOUBLE PRECISION (a-h,o-z)
+-      INTEGER n,np,indx(n)
+-      REAL*8 a(np,np),b(np)
+-      INTEGER i,ii,j,ll
+-      REAL*8 sum
+-      ii=0
+-      do 12 i=1,n
+-        ll=indx(i)
+-        sum=b(ll)
+-        b(ll)=b(i)
+-        if (ii.ne.0)then
+-          do 11 j=ii,i-1
+-            sum=sum-a(i,j)*b(j)
+-11        continue
+-        else if (sum.ne.0d0) then
+-          ii=i
+-        endif
+-        b(i)=sum
+-12    continue
+-      do 14 i=n,1,-1
+-        sum=b(i)
+-        do 13 j=i+1,n
+-          sum=sum-a(i,j)*b(j)
+-13      continue
+-        b(i)=sum/a(i,i)
+-14    continue
+-      return
+-      END SUBROUTINE lubksb
+-
+-
+-
+-end module util
Index: /issm/oecreview/Archive/21724-22754/ISSM-22058-22059.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22058-22059.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22058-22059.diff	(revision 22755)
@@ -0,0 +1,2672 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22059)
+@@ -0,0 +1,38 @@
++/*!\file FourierLoveCorex
++ * \brief: core solution module for love analysis. Based on Caron's fortran core. 
++ */
++
++#include "./FourierLoveCorex.h"
++
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++#include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
++
++extern "C" { 
++	int lnb_setup_( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi, int* pnfreq, IssmDouble* frequencies, int* psh_nmax, int* psh_nmin, 
++		IssmDouble* pg0, IssmDouble* pr0, IssmDouble* pmu0,bool* pallow_layer_deletion, int* pforcing_type, bool* pverbosemod,
++		int* pnumlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
++		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid);
++
++}
++
++/*}}}*/
++
++void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi, int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, 
++		IssmDouble g0, IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
++		int numlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
++		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid){
++
++	/*Call fortran driver: */
++	lnb_setup_(  LoveKr,  LoveKi,  LoveHr,  LoveHi,  LoveLr, 
++		 LoveLi,  &nfreq,  frequencies,  &sh_nmax,  &sh_nmin, 
++		 &g0,  &r0,  &mu0, &allow_layer_deletion,  &forcing_type, &verbosemod,
++		 &numlayers,  radius,  viscosity,  lame_lambda,  lame_mu, 
++		 burgers_viscosity,  burgers_mu,  density,  isburgers,  issolid);
++
++	
++	
++}
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(revision 22059)
+@@ -0,0 +1,17 @@
++/*!\file:  FourierLoveCorex.h
++ * \brief header file for ...
++ */ 
++
++#ifndef _FOURIERLOVECOREX_H
++#define _FOURIERLOVECOREX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
++		IssmDouble* LoveLi,int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, IssmDouble r0, 
++		IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod, int numlayers, IssmDouble* radius,  
++		IssmDouble* viscosity,IssmDouble* lame_lambda, IssmDouble* lame_mu, IssmDouble* burgers_viscosity, IssmDouble* burgers_mu,  
++		IssmDouble* density,IssmDouble* isburgers, IssmDouble* issolid);
++
++#endif  /* _FOURIERLOVECOREX_H */
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.f90	(revision 22059)
+@@ -0,0 +1,35 @@
++module lnb_param
++
++ implicit none
++ 
++ public 
++
++ !Physical Constants
++ double precision, parameter :: GG = 6.67259e-11! gravitational constant
++ double precision :: ra,rb,rc ! radii of the surface, CMB and ICB
++ double precision :: pi,ro_mean,go_surf,go_icb,go_cmb !some constants
++ ! GG --> gravitational constant
++ ! ra, rb, rc --> Surface, CMB and ICB radius
++ ! ro_mean --> mean density of the planet 
++ ! go_surf --> mean surface gravity
++ ! go_icb/cmb --> gravity at the Inner Core/Core-Mantle Boundary
++ double precision   :: mu0,go0,r0 !3 normalization constants
++
++!Numerical Constants
++ double precision :: epsdb, layerrap !used in detecting underflows in the lovenb integration
++ double complex     :: valini,freq ! integration constant and angular frequency being processed
++ logical :: allow_layer_del,display, benchmark_spada !do we allow deletion of layers in case of underflow, enable some prints in terminal
++
++!GIA problem setup
++ integer :: deg,ifmin,ifmax ! deg=SH degree, ifmin/ifmax=which kind of forcing is applied (usually we want loading)
++ logical :: incompressible !choose which mode of calculation is activated
++
++!Earth Model 
++ integer :: nfreq, degmax, degmin
++ integer :: nlayer! number of layers
++ double precision, dimension(:), pointer :: roc,lac,muc,vic,vic2,muc2 ! Earth layers parameters
++ double precision, dimension(:), pointer :: radius ! Earth layers parameters
++ double precision :: vicratio,mucratio !2 Burgers long-term to short-term ratios
++ logical, dimension(:), pointer :: soliddim,radbc,burgers ! is this layer solid (if not it's liquid), does it have specific boundary conditions and does it have a Burgers rheology (if not, it uses Maxwell)
++ 
++end module lnb_param
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.mod
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.mod	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lnb_param.mod	(revision 22059)
+@@ -0,0 +1,141 @@
++GFORTRAN module version '10' created from lnb_param.f90
++MD5:07349d97d2b98213e660e1a97b540f41 -- If you edit this, you'll get what you deserve.
++
++(() () () () () () () () () () () () () () () () () () () () () () () ()
++() () ())
++
++()
++
++()
++
++()
++
++()
++
++()
++
++(2 '__convert_r4_r8' '(intrinsic)' '' 1 ((PROCEDURE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 FUNCTION ELEMENTAL PURE) (REAL 8 0 0 0
++REAL ()) 0 0 () () 2 () () () 0 0)
++3 'allow_layer_del' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++4 'benchmark_spada' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++5 'burgers' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++6 'deg' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++7 'degmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++8 'degmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++9 'display' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () ()
++() 0 0)
++10 'epsdb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++11 'freq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++12 'gg' 'lnb_param' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () (CONSTANT (REAL 8 0 0 0
++REAL ()) 0 '0.495dac00000000@-8') () 0 () () () 0 0)
++13 'go0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++14 'go_cmb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++15 'go_icb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++16 'go_surf' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++17 'ifmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++18 'ifmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++19 'incompressible' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++20 'lac' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++21 'layerrap' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++22 'lnb_param' 'lnb_param' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0
++0)
++23 'mu0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++24 'muc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++25 'muc2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++26 'mucratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++27 'nfreq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++28 'nlayer' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++29 'pi' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++30 'r0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++31 'ra' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++32 'radbc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++33 'radius' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++34 'rb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++35 'rc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++36 'ro_mean' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++37 'roc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++38 'soliddim' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++39 'valini' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++40 'vic' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++41 'vic2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++42 'vicratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++)
++
++('__convert_r4_r8' 0 2 'allow_layer_del' 0 3 'benchmark_spada' 0 4
++'burgers' 0 5 'deg' 0 6 'degmax' 0 7 'degmin' 0 8 'display' 0 9 'epsdb'
++0 10 'freq' 0 11 'gg' 0 12 'go0' 0 13 'go_cmb' 0 14 'go_icb' 0 15
++'go_surf' 0 16 'ifmax' 0 17 'ifmin' 0 18 'incompressible' 0 19 'lac' 0
++20 'layerrap' 0 21 'lnb_param' 0 22 'mu0' 0 23 'muc' 0 24 'muc2' 0 25
++'mucratio' 0 26 'nfreq' 0 27 'nlayer' 0 28 'pi' 0 29 'r0' 0 30 'ra' 0 31
++'radbc' 0 32 'radius' 0 33 'rb' 0 34 'rc' 0 35 'ro_mean' 0 36 'roc' 0 37
++'soliddim' 0 38 'valini' 0 39 'vic' 0 40 'vic2' 0 41 'vicratio' 0 42)
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/util.f90	(revision 22059)
+@@ -0,0 +1,226 @@
++module util
++ 
++ use model
++ use lnb_param
++
++ contains
++
++!
++!_______DERIVS_________________________________________________________________
++!
++ subroutine derivs(x,y,dydx)
++ 
++ implicit none
++ double complex  :: la, mu
++ double precision :: x,ro,g
++ double complex :: flm,rlm,rm0,rg0,frh,fgr,fn
++ logical :: solid
++ integer :: iy,id,n2,ny
++ double complex, dimension(6)   :: y,dydx,f
++ double complex, dimension(6,6) :: dy
++
++ call earth_nlayers_viscoelas(x,ro,la,mu,g,solid)
++ !print*,la,mu
++!
++!_______Expressions
++!
++ flm=(la+2.d0*mu)
++ rlm=(3.d0*la+2.d0*mu)/(la+2.d0*mu)
++ rm0=mu/mu0
++ rg0=g/go0
++ frh=ro*g*ra/mu0
++ fgr=4.d0*Pi*GG*ro*ra/go0
++ fn=dble(deg*(deg+1))
++ 
++!
++!_______Systeme differentiel yi dans un solide
++!
++ if(solid) then
++ 
++ ny = 6
++
++ dy(1,1)= (-2.d0*la/flm)/x
++ dy(1,2)= mu0/flm
++ dy(1,3)= (la*fn/flm)/x
++ dy(1,4)= 0.d0
++ dy(1,5)= 0.d0
++ dy(1,6)= 0.d0
++
++ dy(2,1)=  4.d0*(-frh+rm0*rlm/x)/x + ro*freq**2*ra/mu0
++ dy(2,2)=(-4.d0*mu/flm)/x
++ dy(2,3)= fn*(frh-2.d0*rm0*rlm/x)/x
++ dy(2,4)= fn/x
++ dy(2,5)= 0.d0
++ dy(2,6)= -frh/rg0
++
++ dy(3,1)= -1.d0/x
++ dy(3,2)= 0.d0
++ dy(3,3)= 1.d0/x
++ dy(3,4)= 1.d0/rm0
++ dy(3,5)= 0.d0
++ dy(3,6)= 0.d0
++
++ dy(4,1)= (frh-2.d0*rm0*rlm/x)/x
++ dy(4,2)= ( -la/flm)/x
++ dy(4,3)= (2.d0*rm0*(la*(2.d0*fn-1.d0)+2.d0*mu*(fn-1.d0))/flm)/(x*x) + ro*freq**2*ra/mu0
++ dy(4,4)= -3.d0/x
++ dy(4,5)= -(frh/rg0)/x
++ dy(4,6)= 0.d0
++
++ dy(5,1)= fgr
++ dy(5,2)= 0.d0
++ dy(5,3)= 0.d0
++ dy(5,4)= 0.d0
++ dy(5,5)= 0.d0
++ dy(5,6)= 1.d0
++
++ dy(6,1)= 0.d0
++ dy(6,2)= 0.d0
++ dy(6,3)= -(fgr*fn)/x
++ dy(6,4)= 0.d0
++ dy(6,5)= fn/(x*x)
++ dy(6,6)= -2.d0/x
++  
++ else
++ 
++ ny = 2
++
++ dy(:,:)= 0.d0
++
++ dy(1,1)= fgr/rg0
++ dy(1,2)= 1.d0
++ dy(2,1)= (-4.d0*(fgr/rg0)+fn/x)/x
++ dy(2,2)= -2.d0/x-fgr/rg0
++ 
++ end if
++!
++!_______Derivees des yi
++! 
++ dydx(:)=0.d0 
++ do id=1,ny
++  do iy=1,ny
++     dydx(id)=dydx(id)+dy(id,iy)*y(iy)
++  end do
++ end do
++
++    end subroutine derivs
++
++
++    subroutine propagFDS(ystart,xmin,xmax,nstep)
++     implicit none
++     double precision :: xmin,xmax,dr,x
++     integer :: nstep,i
++     double complex, dimension(6)   :: ystart,dydx,y,y1
++
++     dr = (xmax -xmin)/nstep
++     y = ystart
++     x = xmin
++
++     do i = 1,nstep
++
++  call derivs(x,y,dydx)
++  y1 = y + dr*dydx
++  x = x + dr
++  y = y1
++
++     end do
++
++     ystart = y
++
++ end subroutine propagFDS
++
++!_____LUDCMP___________________________________________________________________
++!
++      SUBROUTINE ludcmp(a,n,np,indx,d)
++      IMPLICIT DOUBLE PRECISION (a-h,o-z)
++      INTEGER n,np,indx(n),NMAX
++      REAL*8 d,a(np,np),TINY
++      PARAMETER (NMAX=500,TINY=1.0D-30)
++      INTEGER i,imax,j,k
++      REAL*8 aamax,dum,sum,vv(NMAX)
++      d=1d0
++      do 12 i=1,n
++        aamax=0d0
++        do 11 j=1,n
++          if (dabs(a(i,j)).gt.aamax) aamax=dabs(a(i,j))
++11      continue
++        if (aamax.eq.0d0) stop 'singular matrix in ludcmp'
++        vv(i)=1./aamax
++12    continue
++      do 19 j=1,n
++        do 14 i=1,j-1
++          sum=a(i,j)
++          do 13 k=1,i-1
++            sum=sum-a(i,k)*a(k,j)
++13        continue
++          a(i,j)=sum
++14      continue
++        aamax=0d0
++        do 16 i=j,n
++          sum=a(i,j)
++          do 15 k=1,j-1
++            sum=sum-a(i,k)*a(k,j)
++15        continue
++          a(i,j)=sum
++          dum=vv(i)*dabs(sum)
++          if (dum.ge.aamax) then
++            imax=i
++            aamax=dum
++          endif
++16      continue
++        if (j.ne.imax)then
++          do 17 k=1,n
++            dum=a(imax,k)
++            a(imax,k)=a(j,k)
++            a(j,k)=dum
++17        continue
++          d=-d
++          vv(imax)=vv(j)
++        endif
++        indx(j)=imax
++        if(a(j,j).eq.0d0)a(j,j)=TINY
++        if(j.ne.n)then
++          dum=1d0/a(j,j)
++          do 18 i=j+1,n
++            a(i,j)=a(i,j)*dum
++18        continue
++        endif
++19    continue
++      return
++      END SUBROUTINE ludcmp
++!
++!_____LUBKSB___________________________________________________________________
++!
++      SUBROUTINE lubksb(a,n,np,indx,b)
++      IMPLICIT DOUBLE PRECISION (a-h,o-z)
++      INTEGER n,np,indx(n)
++      REAL*8 a(np,np),b(np)
++      INTEGER i,ii,j,ll
++      REAL*8 sum
++      ii=0
++      do 12 i=1,n
++        ll=indx(i)
++        sum=b(ll)
++        b(ll)=b(i)
++        if (ii.ne.0)then
++          do 11 j=ii,i-1
++            sum=sum-a(i,j)*b(j)
++11        continue
++        else if (sum.ne.0d0) then
++          ii=i
++        endif
++        b(i)=sum
++12    continue
++      do 14 i=n,1,-1
++        sum=b(i)
++        do 13 j=i+1,n
++          sum=sum-a(i,j)*b(j)
++13      continue
++        b(i)=sum/a(i,i)
++14    continue
++      return
++      END SUBROUTINE lubksb
++
++
++
++end module util
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22059)
+@@ -0,0 +1,600 @@
++module lovenb_sub
++
++ use util
++ use lnb_param
++
++ implicit none
++ 
++ contains
++ 
++ subroutine boundary_conditions_matrix(bc,indx,nbc)
++!-------------------------------------
++
++  implicit none
++  double complex :: la, mu
++  double precision :: xmin,xmax,eps,hini,hmin
++  double precision :: x,ro1,ro2,g,d,one
++  double complex, dimension (:,:), pointer :: bc
++  integer, dimension(:), pointer   :: indx
++  double complex, dimension(6)   :: ystart,dydx
++  double complex, dimension(6,6) :: ystep
++  integer :: ny,i,j,k,ii,jj,kk,nok,nbad,is,nbc,ibc,ifirst,nstep
++  logical :: solid,vali
++  
++  !-- Initialisation of boundary condition matrix
++
++  indx(:) = 0
++  
++  !-- Integration 
++
++  eps= 1.d-10
++  hini=1.d-10
++  hmin=0.d0
++
++  ! Underflows risk tests in the numerical integration
++  ! The starting ystart are chosen to be different than 1 to limit under and overflows in the Runge-Kutta
++  if (-300.d0<dlog10(tiny(ra))) then 
++	write(*,*) 'Warning problem in the dimensioning of the starting values in Runge-Kutta'
++	write(*,*) 'log tiny(ra) = ', dlog(tiny(ra))
++	stop
++  endif
++
++	
++   if ((dlog10(1.d0/ra**dint(dble(deg)/10.d0)))<-250.d0) then
++	valini=1.d-300!*complex(1.d0,1.d0)
++   else
++	valini= 1.d0!*complex(1.d0,1.d0)
++   endif
++
++  
++  ! Which among the model interfaces is the first to display boundary conditions
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++  
++  
++  !-- Layer iteration for the solutions propagation 
++  !    and typing the matrix boundary conditions 
++  ibc = 0   ! Counter of interfaces with boundary conditions 
++
++  do i = ifirst,nlayer 
++  
++   xmin= radius(i)/ra
++   xmax= radius(i+1)/ra - epsdb
++   nstep=100
++  
++   if (soliddim(i)) then
++   		ny = 6
++   		is = 0
++   		one= 1.d0
++   else	
++   		ny = 2
++   		is = 4
++   		one= -1.d0
++   end if 	
++   
++   
++   do j = 1,ny
++		! Typing ystart
++		if (radbc(i)) then
++   			ystart(:)=0.d0
++			ystart(j)= valini
++ 			k=ibc+1
++ 		else
++ 			ystart(:)=ystep(j,:)
++ 		end if
++ 		
++		! Numerical Integration 
++		!print*,j
++		call propagFDS(ystart,xmin,xmax,nstep)
++ 		!call odeint(ystart,ny,xmin,xmax,eps,hini,hmin,nok,nbad)
++		!print*,j
++ 		
++ 		! Boundary Condition matrix - propagation part 
++		if (radbc(i+1)) then
++ 			ii = 6*k+is
++ 			jj = 6*k+j+is-3
++ 			do kk=1,ny
++				bc(ii+kk,jj) = ystart(kk)*one
++			end do
++		else
++			ystep(j,:)=ystart(:) 
++ 		end if
++   end do
++	
++	
++   if (radbc(i)) then
++   
++	! Boundary Condition matrix - solid regions
++	if (soliddim(i)) then
++		one = -1.d0
++		if (i>1)then 
++			if (.not.soliddim(i-1)) one = 1.d0
++		end if
++		do  j=1,6
++			bc(j+6*ibc,j+6*ibc+3) = one
++		end do
++		ibc = ibc+1
++		
++	! Boundary Condition matrix - liquid regions
++	else
++		x = radius(i)/ra
++		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
++		ii = 6*ibc+1
++		bc(ii,ii+3) = -1.d0
++		bc(ii,ii+4+3) = -go0/g
++		bc( ii+1,ii+3)=-ro2*g*ra/mu0
++		bc( ii+2,ii+1+3)=-1.d0
++		bc(ii+5,ii+3)= 4.d0*pi*GG*ro2*ra/go0
++		bc(ii+4,ii+4+3)=-1.d0
++		bc(ii+5,ii+5+3)=-1.d0
++		x = radius(i+1)/ra
++		call earth_nlayers_viscoelas(x-epsdb,ro1,la,mu,g,solid)
++		call earth_nlayers_viscoelas(x,ro2,la,mu,g,solid)
++		ii = 6*(ibc+1)+1
++		bc(ii,ii-1)=-1.d0
++		bc(ii,ii+1)=bc(ii+4,ii+1)*go0/g ! b(17,14) solution integration 1 of z5 CMB
++		bc(ii,ii+2)=bc(ii+4,ii+2)*go0/g ! b(17,15) solution integration 2 of z5 CMB
++		 					  ! b(13,..) y1 CMB
++		bc(ii+1,ii-1)=-ro1*g*ra/mu0
++		bc(ii+2,ii)=-1.d0
++		bc(ii+5,ii-1)= 4.d0*pi*GG*ro1*ra/go0
++		ibc = ibc+1
++	end if	
++	
++    end if
++	
++	
++	
++  end do
++
++
++  !-- Internal sphere
++
++  call sphere(ifirst,deg,bc)
++
++  !-- Surface conditions
++	bc(nbc-5,nbc-2)=-1.d0
++	bc(nbc-3,nbc-1)=-1.d0
++	bc(nbc-1,nbc)=-1.d0
++	bc(nbc,nbc)=dble(deg+1)
++
++  !-- Degree 1 special case
++	if(deg==1) then
++		  bc(nbc,:)=0.d0
++		  bc(nbc,nbc)=1.d0
++	end if
++	
++
++	!print*, bc, imag_eval
++ end subroutine boundary_conditions_matrix
++ 
++ subroutine sphere(i,n,bc)
++!------------------------
++
++	implicit none
++	double complex :: la,mu
++	integer :: n,i
++	double precision :: x,e,r,ro,g,cst,xsen,eps
++	double complex, dimension(:,:),pointer :: bc
++
++	logical :: solid
++	
++
++	eps= 1.d-10
++	x = radius(i)/ra
++	e = x
++	call earth_nlayers_viscoelas(x-eps,ro,la,mu,g,solid)
++	
++	xsen=(x/e)**n
++	r=x*ra
++	cst = 4.d0*pi*GG*ro
++
++	!write(89,*),xsen,r,ra,cst,mu0,mu,n	
++
++
++	bc(1,1)=xsen*r/ra
++	bc(1,2)=xsen/(r*ra)
++	bc(1,3)=0.d0
++
++	bc(2,1)=(2.d0*mu*dble(n*n-n-3)/dble(n) + cst/3.d0*ro*r**2)*xsen/mu0
++	bc(2,2)=(2.d0*mu*dble(n-1)/r**2 + cst/3.d0*ro)*xsen/mu0
++	bc(2,3)=-ro*xsen/mu0
++
++	bc(3,1)=dble(n+3)/dble(n*(n+1))*xsen*r/ra
++	bc(3,2)=1.d0/dble(n)*xsen/(r*ra)
++	bc(3,3)=0.d0
++
++	bc(4,1)=2.d0*mu*dble(n+2)/dble(n+1)*xsen/mu0
++	bc(4,2)=2.d0*mu*dble(n-1)/dble(n)*xsen/(r**2*mu0)
++	bc(4,3)=0.d0
++
++	bc(5,1)=0.d0
++	bc(5,2)=0.d0
++	bc(5,3)=xsen/(go0*ra)
++
++	bc(6,1)=-cst*xsen*r/go0
++	bc(6,2)=-cst*xsen/(r*go0)
++	bc(6,3)=dble(n)*xsen/(r*go0)
++
++
++ end subroutine sphere
++ 
++ subroutine external_forcing(n,source,sourcs,nfext,nbc)
++!-----------------------------------
++
++   implicit none
++   integer :: n
++   integer :: nfext,nbc
++   character*40,     dimension(:),   pointer :: sourcs
++   double complex, dimension(:,:), pointer :: source
++   
++   source(:,:)=0.d0
++   sourcs(:)=' '
++	  
++   ! In Case of a Inner Core - Outer Core - Mantle planet and Boundary conditions on these 3 interfaces
++   if (nbc == 24) then 
++   
++	!-- Sources at the ICB
++   
++	sourcs(1)='ICB --Volumetric Potential'
++	source(1,12)=dble(n)/(rc*go0)
++	source(1,11)=1.d0/(ra*go0)
++	
++	sourcs(2)='ICB --Pressure'
++	source(2, 8)=-ro_mean/mu0
++
++	sourcs(3)='ICB --Loading'
++	source(3, 8)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rc
++	source(3,12)= dble(2*n+1)/(rc*go0)
++
++	sourcs(4)='ICB --Tangential Traction'
++	source(4,10)= ro_mean/mu0
++
++	!--Sources at the CMB
++
++	sourcs(5)='CMB --Volumetric Potential'
++	source(5,14)=-ro_mean/mu0*ra/rb
++	source(5,18)= dble(2*n+1)/(rb*go0)
++
++	sourcs(6)='CMB --Pressure'
++	source(6,14)=-ro_mean/mu0
++
++	sourcs(7)='CMB --Loading'
++	source(7,14)=-ro_mean*dble(2*n+1)/(3.d0*mu0)*ra/rb
++	source(7,18)= dble(2*n+1)/(rb*go0)
++
++	sourcs(8)='CMB --Tangential Traction'
++	source(8,16)=-ro_mean/mu0
++	
++    endif
++
++    !--Sources at the surface
++
++	sourcs(9)='SURF--Volumetric Potential'
++	source(9,nbc)=dble(2*n+1)/(ra*go0)
++
++	sourcs(10)='SURF--Pressure'
++	source(10,nbc-4)=-ro_mean/mu0
++
++	sourcs(11)='SURF--Loading'
++	source(11,nbc-4)=-ro_mean*dble(2*n+1)/(3.d0*mu0)
++	source(11,nbc)= dble(2*n+1)/(ra*go0)
++
++	sourcs(12)='SURF--Tangential Traction'
++	source(12,nbc-2)= ro_mean/mu0
++
++	!--Special case n=1
++
++	if (n.eq.1) then
++	  source(11,nbc)=0.d0
++	  source(9,nbc)=0.d0
++	end if
++	
++ 
++ end subroutine external_forcing
++ 
++ subroutine solution(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++!-------------------------------------------------
++
++  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst,info,lda,ldb
++  double complex, dimension(:,:), pointer :: bc,f
++  integer,      dimension(:), pointer :: indx
++  character*40, dimension(:), pointer :: sourcs	
++  double complex, dimension(nbc,1) :: sc
++  double complex :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
++  double complex :: sumh,suml,sumk,d,val,sumy2,sumy4,sumy6,rads
++  double precision :: delta
++  double complex, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
++  double complex, dimension(nbc,nbc) :: bcsav
++  integer :: ipiv(nbc)
++  logical :: ok
++
++
++  bcsav(:,:) = bc(:,:)
++  rads=0.d0
++  lda=nbc
++  ldb=nbc
++
++
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++! do i = 1,nbc 
++!	do j = 1,nbc
++!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
++!	enddo
++! enddo
++! write(*,*)
++  
++  !-- LU decomposition and determinant
++    ok = .true.
++   
++  !call ludcmp(bc,nbc,nbc,indx,d)
++  !do i=1,nbc
++  !   d=d*bc(i,i)
++  !end do
++  !if (display) write(*,*)
++  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
++  !if (display) write(*,*),dlog10(freq*365.25d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d
++  !write(ifile5,*) freq,d
++
++!-- Resolution
++
++  if (ok) then
++  do i = ifmin,ifmax
++  	
++	do j=1,nbc
++	  sc(j,1)=f(i,j)
++	end do
++
++	!if (display) write(*,*) 'Source: ',sourcs(i)
++	!call lubksb(bc,nbc,nbc,indx,sc)
++	call ZGESV(nbc,1,bc,lda,ipiv,sc,ldb,info)
++
++	if (info.ne.0) then 
++		print*, 'Error in ZGESV : LAPACK linear equation solver couldn''t resolve the system'
++	end if
++	loveh = sc(nbc-2,1)*ra*go_surf
++	lovel = sc(nbc-1,1)*ra*go_surf
++	lovek = sc(nbc,1)*ra*go0
++	delta = (1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh)
++	
++	sumy2=0.d0
++	sumy4=0.d0
++	sumy6=0.d0
++
++	do ic=1,6
++	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9,1)
++	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9,1)
++	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9,1)
++	end do
++
++
++	ibc = 0
++	do  j = nlayer,1,-1
++		if (radbc(j)) then 
++			ibc=ibc+1
++			if (soliddim(j)) then
++
++				loveh1 = sc(nbc - ibc*6 -3 +1,1)*ra*go_surf*valini
++				lovel1 = sc(nbc -ibc*6 -3 +3,1)*ra*go_surf*valini
++				lovek1 = sc(nbc -ibc*6 -3 +5,1)*ra*go0*valini
++			else 
++
++				sumh=0.d0
++				suml=0.d0
++				sumk=0.d0
++				ii = nbc - (ibc+1)*6
++				jj = nbc - (ibc+1)*6 -3
++				if (j==ifirst) then 
++					icmin = 4
++				else
++					icmin = 1
++				end if
++				do ic=icmin,6
++					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic,1)
++					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic,1)
++					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic,1)
++				end do
++				loveh1 = sumh*ra*go_surf*valini
++				lovel1 = suml*ra*go_surf*valini
++				lovek1 = sumk*ra*go0*valini
++
++			end if			
++			if (j==ifirst) then
++
++				layerrap = zabs(loveh1s/loveh)
++				if (layerrap > zabs(lovel1s/lovel)) layerrap = zabs(lovel1s/lovel)
++				if (layerrap > zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
++				layerrap = zabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
++			endif
++
++			loveh1s = loveh1
++			lovel1s = lovel1
++			lovek1s = lovek1
++			rads = radius(j)
++			!if (radius(j)==rb) then 
++			!	 write(*,*) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
++			!else if (radius(j)==rc) then
++			!	 write(*,*) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
++			!else
++			!	if (j<10) then
++			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	else
++			!		 write(*,*) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	end if
++			!endif
++		end if
++	end do
++
++  end do
++  end if
++  
++
++ !301 format(a4,5x,'n=',i3,5x,'h=',f14.10,5x,'l=',f14.10,5x,'k=',f14.10)
++ 301 format(a4,5x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 305 format(a4,i1,4x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 306 format(a4,i2,3x,'n=',i5,5x,'h=',d14.7,5x,'l=',d14.7,5x,'k=',d14.7)
++ 302 format(i5,5x,f14.10,5x,f14.10,5x,f14.10)
++ 303 format(i5,5x,f14.10,5x,f14.10,5x,f14.10,5x,f14.10)
++ 304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
++
++ end subroutine solution 
++ 
++ 
++  subroutine solution_nbloutput(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++!-------------------------------------------------
++
++  integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst
++  double precision, dimension(:,:), pointer :: bc,f
++  integer,      dimension(:), pointer :: indx
++  character*40, dimension(:), pointer :: sourcs	
++  double precision, dimension(nbc) :: sc
++  double precision :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
++  double precision :: sumh,suml,sumk,d,val,delta,sumy2,sumy4,sumy6,rads
++  double precision, dimension(6) :: icbh,icbl,icbk,y2srf,y4srf,y6srf
++  double precision, dimension(nbc,nbc) :: bcsav
++  logical :: ok
++
++  
++  !do ic=1,6
++!	if (nbc==18) then 
++!		icbh(ic) = bc(1,ic)
++!		icbl(ic) = bc(3,ic)
++!		icbk(ic) = bc(5,ic)
++!!	elseif (nbc==24) then 
++!		icbh(ic) = bc(7,ic+3)
++!		icbl(ic) = bc(9,ic+3)
++!		icbk(ic) = bc(11,ic+3)
++!	end if
++!	y2srf(ic) = bc(nbc-4,ic+nbc-9)
++!	y4srf(ic) = bc(nbc-2,ic+nbc-9)
++!	y6srf(ic) = bc(nbc,ic+nbc-9)
++ ! end do
++  
++  bcsav(:,:) = bc(:,:)
++  rads=0
++  ifirst = 0
++  i = 0
++  do while (ifirst==0)
++	i = i+1
++	if (radbc(i)) ifirst = i
++  end do
++ !do i = 1,nbc 
++!	do j = 1,nbc
++!	if (bc(i,j)/=0.d0) print*, i,j,bc(i,j)
++!	enddo
++ !enddo
++ !write(*,*)
++  
++  !-- LU decomposition and determinant
++    ok = .true.
++   
++  call ludcmp(bc,nbc,nbc,indx,d)
++  do i=1,nbc
++     d=d*bc(i,i)
++  end do
++  write(*,*)
++  !write(*,*),dlog(freq),'   Matrix det = ',d/dabs(d)*dlog(dabs(d))
++ 
++!-- Resolution
++ 
++  if (ok) then
++  do i = ifmin,ifmax
++  	
++	do j=1,nbc
++	  sc(j)=f(i,j)
++	end do
++
++	write(*,*) 'Source: ',sourcs(i)
++	call lubksb(bc,nbc,nbc,indx,sc)
++
++	loveh = sc(nbc-2)*ra*go_surf
++	lovel = sc(nbc-1)*ra*go_surf
++	lovek = sc(nbc)*ra*go0
++	delta = 1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh
++	
++	sumy2=0.d0
++	sumy4=0.d0
++	sumy6=0.d0
++
++	do ic=1,6
++	  sumy2 = sumy2+bcsav(nbc-4,ic+nbc-9)*sc(ic+nbc-9)
++	  sumy4 = sumy4+bcsav(nbc-2,ic+nbc-9)*sc(ic+nbc-9)
++	  sumy6 = sumy6+bcsav(nbc,ic+nbc-9)*sc(ic+nbc-9)
++	end do
++	
++	!write(*,*) 'SURF',n,loveh,lovel,lovek-1.d0
++	
++	ibc = 0
++	do  j = nlayer,1,-1
++		if (radbc(j)) then 
++			ibc=ibc+1
++			if (soliddim(j)) then
++				loveh1 = sc(nbc - ibc*6 -3 +1)*ra*go_surf*valini
++				lovel1 = sc(nbc -ibc*6 -3 +3)*ra*go_surf*valini
++				lovek1 = sc(nbc -ibc*6 -3 +5)*ra*go0*valini
++			else 
++				sumh=0.d0
++				suml=0.d0
++				sumk=0.d0
++				ii = nbc - (ibc+1)*6
++				jj = nbc - (ibc+1)*6 -3
++				if (j==ifirst) then 
++					icmin = 4
++				else
++					icmin = 1
++				end if
++				do ic=icmin,6
++					!print*, ii+1,jj+ic
++					sumh = sumh+bcsav(ii+1,jj+ic)*sc(jj+ic)
++					suml = suml+bcsav(ii+3,jj+ic)*sc(jj+ic)
++					sumk = sumk+bcsav(ii+5,jj+ic)*sc(jj+ic)
++				end do
++				loveh1 = sumh*ra*go_surf*valini
++				lovel1 = suml*ra*go_surf*valini
++				lovek1 = sumk*ra*go0*valini
++			end if			
++			if (j==ifirst) then
++				layerrap = dabs(loveh1s/loveh)
++				if (layerrap > dabs(lovel1s/lovel)) layerrap = dabs(lovel1s/lovel)
++				if (layerrap > dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0))) &
++				layerrap = dabs((lovek1s-(rads/ra)**deg)/(lovek-1.d0)) 
++			endif
++
++			loveh1s = loveh1
++			lovel1s = lovel1
++			lovek1s = lovek1
++			rads = radius(j)
++			!if (radius(j)==rb) then 
++			!	write(*,301) 'CMB ',n,loveh1,lovel1,lovek1-(rb/ra)**deg
++			!else if (radius(j)==rc) then
++			!	write(*,301) 'ICB ',n,loveh1,lovel1,lovek1-(rc/ra)**deg
++			!else
++			!	if (j<10) then
++			!		write(*,305) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	else
++			!		write(*,306) 'ITF-',j,n,loveh1,lovel1,lovek1-(radius(j)/ra)**deg
++			!	end if
++			!endif
++		end if
++	end do
++			
++  end do
++  end if
++  
++   !write(*,*),dlog10(aimag(freq)*365.d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d, lovek
++  
++
++ end subroutine solution_nbloutput 
++
++
++
++end module lovenb_sub
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/util.mod
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/util.mod	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/util.mod	(revision 22059)
+@@ -0,0 +1,269 @@
++GFORTRAN module version '10' created from util.f90
++MD5:6b427639b8981256d3e19f33c3e9956b -- If you edit this, you'll get what you deserve.
++
++(() () () () () () () () () () () () () () () () () () () () () () ()
++() () () ())
++
++()
++
++()
++
++()
++
++()
++
++()
++
++(2 '__convert_r4_r8' '(intrinsic)' '' 1 ((PROCEDURE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 FUNCTION ELEMENTAL PURE) (REAL 8 0 0 0
++REAL ()) 0 0 () () 2 () () () 0 0)
++3 'allow_layer_del' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++4 'benchmark_spada' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++5 'burgers' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++6 'deg' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++7 'degmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++8 'degmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++9 'derivs' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 10 0 (11 12 13) ()
++0 () () () 0 0)
++14 'display' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () ()
++() 0 0)
++15 'earth_homogeneous_layers_prembased' 'model' '' 1 ((PROCEDURE
++UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT)
++(UNKNOWN 0 0 0 0 UNKNOWN ()) 16 0 (17 18 19 20 21 22 23) () 0 () () () 0
++0)
++24 'earth_nlayers' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 25 0 (26 27 28
++29 30 31) () 0 () () () 0 0)
++32 'earth_nlayers_viscoelas' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT
++MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 33
++0 (34 35 36 37 38 39) () 0 () () () 0 0)
++40 'epsdb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++41 'freq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++42 'gg' 'lnb_param' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () (CONSTANT (REAL 8 0 0 0
++REAL ()) 0 '0.495dac00000000@-8') () 0 () () () 0 0)
++43 'go0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++44 'go_cmb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++45 'go_icb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++46 'go_surf' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++47 'ifmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++48 'ifmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++49 'incompressible' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++50 'lac' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++51 'layerrap' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++52 'lnb_param' 'lnb_param' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0
++0)
++53 'lubksb' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 54 0 (55 56 57 58
++59) () 0 () () () 0 0)
++60 'ludcmp' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 61 0 (62 63 64 65
++66) () 0 () () () 0 0)
++67 'model' 'model' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
++68 'model_init2' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 69 0 (70) () 0
++() () () 0 0)
++71 'mu0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++72 'muc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++73 'muc2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++74 'mucratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++75 'nfreq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++76 'nlayer' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++77 'pi' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++78 'propagfds' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 79 0 (80 81 82 83)
++() 0 () () () 0 0)
++84 'r0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++85 'ra' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++86 'radbc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++87 'radius' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++88 'rb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++89 'rc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++90 'ro_mean' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++91 'roc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++92 'soliddim' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++93 'util' 'util' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
++94 'valini' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++95 'vic' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++96 'vic2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++97 'vicratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++11 'x' '' '' 10 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++12 'y' '' '' 10 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
++INTEGER ()) 0 '6')) 0 () () () 0 0)
++13 'dydx' '' '' 10 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
++INTEGER 4 0 0 0 INTEGER ()) 0 '6')) 0 () () () 0 0)
++17 'radin' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++18 'nl' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++19 'rot' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++20 'lat' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++21 'mut' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++22 'gr' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++23 'solid' '' '' 16 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++26 'x0' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++27 'ro' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++28 'la' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++29 'mu' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++30 'gr' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++31 'solid' '' '' 25 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++34 'x0' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++35 'ro' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++36 'la' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++37 'mu' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++38 'gr' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++39 'solid' '' '' 33 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++55 'a' '' '' 54 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 57 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
++VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 57 ())) 0 () () () 0 0)
++56 'n' '' '' 54 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++57 'np' '' '' 54 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++58 'indx' '' '' 54 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
++INTEGER 4 0 0 0 INTEGER ()) 0 56 ())) 0 () () () 0 0)
++59 'b' '' '' 54 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 57 ())) 0 () () () 0 0)
++62 'a' '' '' 61 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 64 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
++VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 64 ())) 0 () () () 0 0)
++63 'n' '' '' 61 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++64 'np' '' '' 61 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++65 'indx' '' '' 61 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
++INTEGER 4 0 0 0 INTEGER ()) 0 63 ())) 0 () () () 0 0)
++66 'd' '' '' 61 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++70 'nbc' '' '' 69 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++80 'ystart' '' '' 79 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
++INTEGER 4 0 0 0 INTEGER ()) 0 '6')) 0 () () () 0 0)
++81 'xmin' '' '' 79 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++82 'xmax' '' '' 79 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++83 'nstep' '' '' 79 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++)
++
++('__convert_r4_r8' 0 2 'allow_layer_del' 0 3 'benchmark_spada' 0 4
++'burgers' 0 5 'deg' 0 6 'degmax' 0 7 'degmin' 0 8 'derivs' 0 9 'display'
++0 14 'earth_homogeneous_layers_prembased' 0 15 'earth_nlayers' 0 24
++'earth_nlayers_viscoelas' 0 32 'epsdb' 0 40 'freq' 0 41 'gg' 0 42 'go0'
++0 43 'go_cmb' 0 44 'go_icb' 0 45 'go_surf' 0 46 'ifmax' 0 47 'ifmin' 0
++48 'incompressible' 0 49 'lac' 0 50 'layerrap' 0 51 'lnb_param' 0 52
++'lubksb' 0 53 'ludcmp' 0 60 'model' 0 67 'model_init2' 0 68 'mu0' 0 71
++'muc' 0 72 'muc2' 0 73 'mucratio' 0 74 'nfreq' 0 75 'nlayer' 0 76 'pi' 0
++77 'propagfds' 0 78 'r0' 0 84 'ra' 0 85 'radbc' 0 86 'radius' 0 87 'rb'
++0 88 'rc' 0 89 'ro_mean' 0 90 'roc' 0 91 'soliddim' 0 92 'util' 0 93
++'valini' 0 94 'vic' 0 95 'vic2' 0 96 'vicratio' 0 97)
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.mod
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.mod	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.mod	(revision 22059)
+@@ -0,0 +1,373 @@
++GFORTRAN module version '10' created from lovenb_sub.f90
++MD5:abd34956a6ed4ca3faf89b83c227ea8d -- If you edit this, you'll get what you deserve.
++
++(() () () () () () () () () () () () () () () () () () () () () () ()
++() () () ())
++
++()
++
++()
++
++()
++
++()
++
++()
++
++(2 '__convert_r4_r8' '(intrinsic)' '' 1 ((PROCEDURE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 FUNCTION ELEMENTAL PURE) (REAL 8 0 0 0
++REAL ()) 0 0 () () 2 () () () 0 0)
++3 'allow_layer_del' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++4 'benchmark_spada' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++5 'boundary_conditions_matrix' 'lovenb_sub' '' 1 ((PROCEDURE
++UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT)
++(UNKNOWN 0 0 0 0 UNKNOWN ()) 6 0 (7 8 9) () 0 () () () 0 0)
++10 'burgers' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++11 'deg' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++12 'degmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++13 'degmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++14 'derivs' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 15 0 (16 17 18) ()
++0 () () () 0 0)
++19 'display' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () ()
++() 0 0)
++20 'earth_homogeneous_layers_prembased' 'model' '' 1 ((PROCEDURE
++UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT)
++(UNKNOWN 0 0 0 0 UNKNOWN ()) 21 0 (22 23 24 25 26 27 28) () 0 () () () 0
++0)
++29 'earth_nlayers' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 30 0 (31 32 33
++34 35 36) () 0 () () () 0 0)
++37 'earth_nlayers_viscoelas' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT
++MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 38
++0 (39 40 41 42 43 44) () 0 () () () 0 0)
++45 'epsdb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++46 'external_forcing' 'lovenb_sub' '' 1 ((PROCEDURE UNKNOWN-INTENT
++MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0
++0 UNKNOWN ()) 47 0 (48 49 50 51 52) () 0 () () () 0 0)
++53 'freq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++54 'gg' 'lnb_param' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () (CONSTANT (REAL 8 0 0 0
++REAL ()) 0 '0.495dac00000000@-8') () 0 () () () 0 0)
++55 'go0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++56 'go_cmb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++57 'go_icb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++58 'go_surf' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++59 'ifmax' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++60 'ifmin' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++61 'incompressible' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT
++UNKNOWN-PROC UNKNOWN IMPLICIT-SAVE 0 0) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0
++() () 0 () () () 0 0)
++62 'lac' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++63 'layerrap' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++64 'lnb_param' 'lnb_param' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0
++0)
++65 'lovenb_sub' 'lovenb_sub' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0
++0)
++66 'lubksb' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 67 0 (68 69 70 71
++72) () 0 () () () 0 0)
++73 'ludcmp' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 74 0 (75 76 77 78
++79) () 0 () () () 0 0)
++80 'model' 'model' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
++81 'model_init2' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 82 0 (83) () 0
++() () () 0 0)
++84 'mu0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++85 'muc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++86 'muc2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++87 'mucratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++88 'nfreq' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++89 'nlayer' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () ()
++() 0 0)
++90 'pi' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++91 'propagfds' 'util' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
++UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 92 0 (93 94 95 96)
++() 0 () () () 0 0)
++97 'r0' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++98 'ra' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++99 'radbc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++100 'radius' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++101 'rb' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++102 'rc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++103 'ro_mean' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++104 'roc' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++105 'soliddim' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (LOGICAL 4 0 0 0 LOGICAL ())
++0 0 () (1 0 DEFERRED () ()) 0 () () () 0 0)
++106 'solution' 'lovenb_sub' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0 0 UNKNOWN ())
++107 0 (108 109 110 111 112 113 114 115 116 117 118) () 0 () () () 0 0)
++119 'solution_nbloutput' 'lovenb_sub' '' 1 ((PROCEDURE UNKNOWN-INTENT
++MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0
++0 UNKNOWN ()) 120 0 (121 122 123 124 125 126 127 128 129 130 131) () 0 ()
++() () 0 0)
++132 'sphere' 'lovenb_sub' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0 0 UNKNOWN ())
++133 0 (134 135 136) () 0 () () () 0 0)
++137 'util' 'util' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
++138 'valini' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () ()
++() 0 0)
++139 'vic' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++140 'vic2' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0 DIMENSION POINTER) (REAL 8 0 0 0 REAL ()) 0 0
++() (1 0 DEFERRED () ()) 0 () () () 0 0)
++141 'vicratio' 'lnb_param' '' 1 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC
++UNKNOWN IMPLICIT-SAVE 0 0) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0
++0)
++7 'bc' '' '' 6 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION POINTER DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (2 0
++DEFERRED () () () ()) 0 () () () 0 0)
++8 'indx' '' '' 6 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++9 'nbc' '' '' 6 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++16 'x' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++17 'y' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
++INTEGER ()) 0 '6')) 0 () () () 0 0)
++18 'dydx' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
++INTEGER 4 0 0 0 INTEGER ()) 0 '6')) 0 () () () 0 0)
++22 'radin' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0
++DEFERRED () ()) 0 () () () 0 0)
++23 'nl' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++24 'rot' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++25 'lat' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++26 'mut' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++27 'gr' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++28 'solid' '' '' 21 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++31 'x0' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++32 'ro' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++33 'la' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++34 'mu' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++35 'gr' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++36 'solid' '' '' 30 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++39 'x0' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++40 'ro' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++41 'la' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++42 'mu' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++43 'gr' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++44 'solid' '' '' 38 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++48 'n' '' '' 47 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++49 'source' '' '' 47 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 ()
++(2 0 DEFERRED () () () ()) 0 () () () 0 0)
++50 'sourcs' '' '' 47 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (CHARACTER 1 0 0 0 CHARACTER ((
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '40'))) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++51 'nfext' '' '' 47 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++52 'nbc' '' '' 47 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++68 'a' '' '' 67 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 70 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
++VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 70 ())) 0 () () () 0 0)
++69 'n' '' '' 67 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++70 'np' '' '' 67 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++71 'indx' '' '' 67 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
++INTEGER 4 0 0 0 INTEGER ()) 0 69 ())) 0 () () () 0 0)
++72 'b' '' '' 67 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 70 ())) 0 () () () 0 0)
++75 'a' '' '' 74 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
++INTEGER ()) 0 77 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
++VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 77 ())) 0 () () () 0 0)
++76 'n' '' '' 74 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++77 'np' '' '' 74 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++78 'indx' '' '' 74 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
++INTEGER 4 0 0 0 INTEGER ()) 0 76 ())) 0 () () () 0 0)
++79 'd' '' '' 74 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++83 'nbc' '' '' 82 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++93 'ystart' '' '' 92 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (1 0
++EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
++INTEGER 4 0 0 0 INTEGER ()) 0 '6')) 0 () () () 0 0)
++94 'xmin' '' '' 92 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++95 'xmax' '' '' 92 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++96 'nstep' '' '' 92 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++108 'n' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++109 'bc' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 ()
++(2 0 DEFERRED () () () ()) 0 () () () 0 0)
++110 'indx' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 ()
++(1 0 DEFERRED () ()) 0 () () () 0 0)
++111 'f' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () (2 0
++DEFERRED () () () ()) 0 () () () 0 0)
++112 'sourcs' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (CHARACTER 1 0 0 0 CHARACTER ((
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '40'))) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++113 'nfext' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++114 'nbc' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++115 'loveh' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++116 'lovel' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++117 'lovek' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++118 'delta' '' '' 107 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++121 'n' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++122 'bc' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0
++DEFERRED () () () ()) 0 () () () 0 0)
++123 'indx' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 ()
++(1 0 DEFERRED () ()) 0 () () () 0 0)
++124 'f' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 DEFERRED
++() () () ()) 0 () () () 0 0)
++125 'sourcs' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (CHARACTER 1 0 0 0 CHARACTER ((
++CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '40'))) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++126 'nfext' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++127 'nbc' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++128 'loveh' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++129 'lovel' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++130 'lovek' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++131 'delta' '' '' 120 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++134 'i' '' '' 133 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++135 'n' '' '' 133 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++136 'bc' '' '' 133 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DIMENSION POINTER DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 ()
++(2 0 DEFERRED () () () ()) 0 () () () 0 0)
++)
++
++('__convert_r4_r8' 0 2 'allow_layer_del' 0 3 'benchmark_spada' 0 4
++'boundary_conditions_matrix' 0 5 'burgers' 0 10 'deg' 0 11 'degmax' 0 12
++'degmin' 0 13 'derivs' 0 14 'display' 0 19
++'earth_homogeneous_layers_prembased' 0 20 'earth_nlayers' 0 29
++'earth_nlayers_viscoelas' 0 37 'epsdb' 0 45 'external_forcing' 0 46 'freq'
++0 53 'gg' 0 54 'go0' 0 55 'go_cmb' 0 56 'go_icb' 0 57 'go_surf' 0 58
++'ifmax' 0 59 'ifmin' 0 60 'incompressible' 0 61 'lac' 0 62 'layerrap' 0
++63 'lnb_param' 0 64 'lovenb_sub' 0 65 'lubksb' 0 66 'ludcmp' 0 73 'model'
++0 80 'model_init2' 0 81 'mu0' 0 84 'muc' 0 85 'muc2' 0 86 'mucratio' 0
++87 'nfreq' 0 88 'nlayer' 0 89 'pi' 0 90 'propagfds' 0 91 'r0' 0 97 'ra'
++0 98 'radbc' 0 99 'radius' 0 100 'rb' 0 101 'rc' 0 102 'ro_mean' 0 103
++'roc' 0 104 'soliddim' 0 105 'solution' 0 106 'solution_nbloutput' 0 119
++'sphere' 0 132 'util' 0 137 'valini' 0 138 'vic' 0 139 'vic2' 0 140
++'vicratio' 0 141)
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/Makefile
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/Makefile	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/Makefile	(revision 22059)
+@@ -0,0 +1,50 @@
++PROG =	lnb_calc.exe
++
++### Modules du programme 
++SRCS =  lnb_param.f90 lovenb_sub.f90 love_numbers.f90 model.f90 util.f90
++
++OBJS =  lnb_param.o model.o util.o lovenb_sub.o love_numbers.o
++
++MOD = lnb_param.mod model.mod util.mod lovenb_sub.mod
++
++SHTOOLSPATH = /home/caronlam/Codes/SHTOOLS-3.4
++
++LIBS =  -m64 -fPIC -O2 -ffast-math -L/usr/lib64 -lfftw3 -lm -llapack -lblas  
++#	LIBS =  -L$(SHTOOLSPATH)/lib -lSHTOOLS2.8 -llapack -lfftw3  -lm
++
++INCLUDE = -mcmodel=medium -I/usr/include 
++
++CC = cc
++CFLAGS = -O
++
++#F90 = gfortran -mcmodel=medium -O2
++F90= gfortran -O2
++#F90 = gfortran
++#F90 = g95
++#F90 = ifort
++
++F90FLAGS = 
++LDFLAGS =
++
++all: 	$(PROG)
++
++$(PROG): $(OBJS)
++	$(F90) $(LDFLAGS)  -o $@ $(OBJS) $(LIBS)
++
++clean:
++	rm -f $(PROG) $(OBJS) *.M *.mod *.T *.lst 
++
++.SUFFIXES: $(SUFFIXES) .f90
++
++.f90.o:
++	$(F90) $(F90FLAGS)  -c $< $(INCLUDE)
++
++#------------------------
++#Dependances
++#------------------------
++
++#invGIA.o: nblove.o, parameters.o
++love_numbers.o: lnb_param.o model.o lovenb_sub.o 
++model.o: lnb_param.o
++util.o: lnb_param.o model.o
++lovenb_sub.o: lnb_param.o model.o util.o
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22059)
+@@ -0,0 +1,363 @@
++ subroutine lnb_setup(  ksr, ksi, hsr, hsi, lsr, lsi,  dnfreq,  frequencies,  ddegmax, ddegmin, &
++          dgo0,  dr0,  dmu0, dallow_layer_del,  source_type, ddisplay, dnlayer,  dradius,    &
++          dvic,  dlac,  dmuc, dvic2,  dmuc2,  droc, dburgers,  dsoliddim)
++ use lnb_param
++ use util
++ implicit none
++
++ integer :: dnfreq, ddegmax, ddegmin
++ integer :: dnlayer
++ integer :: source_type, fr, i, IERR
++ double precision :: T,cst, fluid_tscale,g
++ double precision, dimension(dnfreq,ddegmax+1) :: hsr,hsi,lsr,lsi,ksr,ksi
++ double complex, dimension(dnfreq,ddegmax+1) :: hs,ls,ks
++ double precision, dimension(dnfreq) :: frequencies
++
++ double precision   :: dmu0,dgo0,dr0
++ logical :: dallow_layer_del, ddisplay
++
++ double precision, dimension(dnlayer) :: droc,dlac,dmuc,dvic,dvic2,dmuc2 
++ double precision, dimension(dnlayer+1) :: dradius 
++ double precision, dimension(dnlayer) :: dsoliddim,dburgers 
++
++ !assign local variables to public variables
++ mu0=dmu0; go0=dgo0; r0=dr0; allow_layer_del=dallow_layer_del; 
++ nfreq=dnfreq;degmax=ddegmax;degmin=ddegmin;nlayer=dnlayer; 
++ allocate(roc(nlayer),lac(nlayer),muc(nlayer),vic(nlayer),vic2(nlayer),muc2(nlayer))
++ roc=droc; lac=dlac; muc=dmuc; vic=dvic; vic2=dvic2; muc2=dmuc2; 
++ allocate(radius(nlayer+1),soliddim(nlayer),burgers(nlayer),radbc(nlayer+1))
++ radius=dradius; 
++
++	display=ddisplay
++	!print*,display
++	do i=1,nlayer
++	if (NINT(dsoliddim(i))==1) then
++		soliddim(i)=.true.
++	else
++		soliddim(i)=.false.
++	endif 
++	if (NINT(dburgers(i))==1) then
++		burgers(i)=.true.
++	else
++		burgers(i)=.false.
++	endif 
++	enddo
++
++ pi=dacos(-1.d0)
++
++ ra=radius(nlayer+1)
++ rb = 3480.d3
++ rc = 1221.5d3
++ r0=ra
++ cst = 365.25d0*24.d0*3600.d0*1000.d0 
++
++ benchmark_spada=.false.
++ !frequencies=1E-5/cst*2*pi
++
++	hs(:,:)=(0.d0,0.d0)
++	ks=hs
++	ls=hs
++ 
++ call love_numbers(frequencies,source_type,hs,ls,ks)
++
++ hsr=dble(hs)
++ hsi=dimag(hs)
++ ksr=dble(ks)
++ ksi=dimag(ks)
++ lsr=dble(ls)
++ lsi=dimag(ls)
++
++end subroutine
++
++!==================== 
++ subroutine love_numbers(frequencies,source_type,hs,ls,ks)
++!====================
++
++ use model
++ use lovenb_sub
++
++ double complex, dimension(:,:), pointer :: bc
++ double complex, dimension(:,:), pointer :: f
++ character*40,     dimension(:),   pointer :: sourcs
++ integer,          dimension(:),   pointer :: indx,indx2
++ integer :: nbc,nfext,ifreq,ntheta2,nphi2
++ double precision :: cst,prec, delta!,h1,h2,k1,k2,l1,l2,dh1,dh2,dk1,dk2,dl1,dl2
++ double precision :: he,ke,le
++ double precision :: frequencies(nfreq), fluid_tscale
++ double complex :: loveh,lovel,lovek
++ logical :: logi
++ integer :: i,j,k,n, fr,m,l, source_type
++ double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
++
++
++ double precision :: cpu_time1(100)
++ integer :: cpu_count
++
++ pi=dacos(-1.d0)
++
++
++  open(unit=101, file='lastrun_log')
++ cpu_count=0
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Done !', cpu_time1(cpu_count), 's'
++ !write(101,*),''
++
++
++ !double precision, dimension(:), pointer :: vech,vecl,veck,vecd,vec
++
++ radbc(:)=.false.
++ radbc(1)=.true.
++ radbc(nlayer+1)=.true.
++ do i=2,nlayer
++  if ((.not.soliddim(i)).or.(.not.soliddim(i-1))) then
++   radbc(i)=.true.
++  end if
++ end do
++ 
++
++ ! Test number of interfaces and of boundary conditions
++  nbc = 0
++  do i=1,nlayer+1 
++ if (radbc(i)) nbc=nbc+6
++  enddo
++
++
++ ifmin=source_type
++ ifmax=source_type
++ 
++
++  if (display) then
++	 print*,'model init'
++ endif
++
++
++ call model_init2(nbc)  
++
++
++  if (display) then
++	 print*, 'done'
++ endif
++
++ nfext = 13 ! Number of potential excitation sources
++ allocate( bc(nbc,nbc), indx(nbc) )
++ allocate( f(nfext,nbc), sourcs(nfext) )
++
++ sourcs(1)='ICB --Volumetric Potential' 
++ sourcs(2)='ICB --Pressure'
++ sourcs(3)='ICB --Loading'
++ sourcs(4)='ICB --Tangential Traction'
++ sourcs(5)='CMB --Volumetric Potential'
++ sourcs(6)='CMB --Pressure'
++ sourcs(7)='CMB --Loading'
++ sourcs(8)='CMB --Tangential Traction'
++ sourcs(9)='SURF--Volumetric Potential'
++ sourcs(10)='SURF--Pressure'
++ sourcs(11)='SURF--Loading'
++ sourcs(12)='SURF--Tangential Traction'
++
++ 
++ if (display)  print*, 'source_type =', source_type, ', ', sourcs(source_type)
++ if (source_type<9) then
++  print*,'Error: Internal loading not supported yet, please input source_type between 9 and 12'
++  print*,'Reference:'
++  do i=1,12
++   print*,i,sourcs(i)
++  enddo
++ return
++ endif
++
++
++! Print/write control
++ !display=.false. ! Printing on the terminal
++ 
++ ! Calculation optimization (avoids underflows at high degree)
++ !allow_layer_del = .true.     ! Do we allow deletion of the central layers in the calculation if necessary?
++ layerrap = 1.d0  ! Max absolute ratio between love numbers at the top and bottom of the last layer
++ 
++ ! Mode search parameters
++ freq0 = -1.d10
++ logi = .true.
++ cst = 365.25d0*24.d0*3600.d0*1000.d0 
++ prec = 1.d-8
++ firstmode = 0.d0
++
++ 
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ !write(101,*),''
++ if (display) then
++ write(*,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ write(*,*),''
++ endif
++
++! Spherical Harmonics initialization
++
++
++
++! -- SH degree loop
++
++
++ bc(:,:)=0.d0
++ 
++ 
++  !write(101,*), 'Calculating impulse response'
++ if (display) then
++ write(*,*), 'Calculating impulse response'
++ endif
++ 	if (maxval(frequencies).ne.0 .and. display) then
++		print*, 'Frequency ranging from ', minval(dabs(frequencies)), &
++		' to ', maxval(frequencies),' s^-1'
++	endif 
++
++	if (frequencies(1)==0 .and. display) then
++		print*,'Elastic calculation'
++	endif
++ deg=degmin-1
++
++
++
++
++ do l = degmin,degmax 
++ deg=deg+1
++ !write(*,*)
++  !write(*,*)
++  !write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
++  if (display) then
++  write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
++  endif
++
++  !write(*,*)
++  !!write(101,*), fr, T
++
++
++
++
++ do fr=1,nfreq
++
++  !!write(101,*),fr
++
++
++  !the way Fourier Transform algorithms works : they calculate for fmin=0 to fmax=1/dt
++  !by aliasing for this algo, f=1/(2*dt) to f=1/dt is the same as f=-1/(2*dt) to f=0
++  !but physics-wise, the Earth response at high frequency is not what we are looking for
++  !the [0 ; 1/(2*dt)] interval and its negative counterpart are what we are looking for
++  !therefore in our love number calculation the frenquency set must be [0 ; 1/(2*dt) ] U [-1/(2*dt) 0[
++
++  !if (fr==1) then ! the variable freq is, in fact, the pulsation = 2*pi*frequency
++  ! fluid_tscale=-575.502 / (deg+91.1765) -0.176471 ! this formula sets fluid time scale = 1e6 kyr at degree 2, 1e5 kyr at degree 20 and 1e3 kyr at degree 90, which allows no error growth and still the fluid number as the benchmark at all degree (tested up to degmax=147)
++   !print*,fluid_tscale
++  ! freq=complex(0.d0,1.d0)*2.d0*pi*(10.d0**(fluid_tscale)/cst) ! empiric time period that changes according to harmonic degree to ensure getting fluid response without crazy error growing for high degree
++! it is meant to approximate the theoretical freq=0.d0 that should be assessed for fft
++  !elseif (fr <= nfreq/2+1) then
++  ! freq=complex(0.d0,1.d0)*(dble(fr-1)/T)*2.d0*pi
++  !else 
++  ! freq=complex(0.d0,1.d0)*(-dble(nfreq+1-fr)/T)*2.d0*pi
++  !end if
++  
++  freq=dcmplx(0.d0,frequencies(fr))
++  !print*,fr,freq
++
++  !if (deg==degmin) write(31,*),fr,real(freq)*cst,aimag(freq)*cst,time(fr)
++  !freq=dble(fr)/T
++  !--  Elastic Love number calculation
++  !freq=2.d0*pi/(1e4*cst)*complex(0.d0,1.d0)
++
++   !if (deg==2) then ! for rotationnal feedback
++   !ifmin=9;ifmax=9 ! Sets tidal calculation
++   !bc(:,:)=0.d0
++   !call boundary_conditions_matrix(bc,indx,nbc)
++   !call external_forcing(deg,f,sourcs,nfext,nbc) 
++   !call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++   !k2tidal(fr)=lovek-1.d0
++   !h2tidal(fr)=loveh
++   !l2tidal(fr)=lovel
++   !ifmin=11;ifmax=11 ! Sets back loading calculation
++   !endif
++   !print*,(deg)
++   bc(:,:)=0.d0
++   call boundary_conditions_matrix(bc,indx,nbc)
++	!print*,'bc ok', layerrap
++   call external_forcing(deg,f,sourcs,nfext,nbc) 
++	!print*,'forcing ok', layerrap
++   call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++	!print*,'first_sol', layerrap, epsdb
++
++   ! Automatic reduction of the number of layers when the attenuation with depth becomes too strong
++   if (allow_layer_del.eqv..true.) then
++
++     do while ((layerrap<=epsdb).and.(nbc>12).or.(isnan(layerrap)) )
++ !		print*,'trying to delete layer', layerrap, epsdb, nbc
++     !write(101,*)
++     !write(101,*) 'Rapport Nombre de Love surface/profondeur faible : ', layerrap 
++     !write(101,*) ' Changement d''interface de debut d''integration' 
++
++     if (display) then
++     write(*,*)
++     write(*,*) 'Surface/Depth Love number ratio small: ', layerrap 
++     write(*,*) ' Changing the interface where the integration starts'
++     endif
++
++     nbc = nbc-6
++     n = 1
++     do while (.not.radbc(n))
++      n = n+1
++     end do
++     radbc(n) =.false.
++     !write(101,*) ' New start interface: ', radius(n+1)/1.d3,' km'
++     if (display) then
++     write(*,*) ' New start interface: ', radius(n+1)/1.d3,' km'
++     endif
++        
++     deallocate( bc, indx, f, sourcs )
++     allocate( bc(nbc,nbc), indx(nbc) )
++     allocate( f(nfext,nbc), sourcs(nfext) )
++  
++
++     bc(:,:)=0.d0
++     call boundary_conditions_matrix(bc,indx,nbc)
++     call external_forcing(deg,f,sourcs,nfext,nbc) 
++     call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++
++    end do
++   end if
++
++   !-- Saving Love numbers
++
++
++    hs(fr,deg+1) = loveh
++    ks(fr,deg+1) = lovek - 1.d0
++    ls(fr,deg+1) = lovel
++
++	!print*,dble(hs(fr,deg+1)), dimag(hs(fr,deg+1)),dble(ks(fr,deg+1)), dimag(ks(fr,deg+1))
++
++    !if (fr==1) then ! if this is supposed to be fluid response
++    !  ! then cut off the imaginary part, which is inherited from approximating t=infinity to a few million years (see above the setting of freq)
++    ! hs(fr,deg+1)=real(hs(fr,deg+1))
++    ! ks(fr,deg+1)=real(ks(fr,deg+1))
++    ! ls(fr,deg+1)=real(ls(fr,deg+1))
++    !endif
++!~~~~~~~~~~~~~~TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ if (benchmark_spada) then
++ write(17,*), deg,fr,dble(hs(fr,deg+1)), dimag(hs(fr,deg+1)),dble(ks(fr,deg+1)), dimag(ks(fr,deg+1))
++ endif
++!~~~~~~~~~~~~~~END TEST ZONE~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++
++  !write(*,*) 'Elastic Love Numbers:  ',ke,he,le 
++  !write(ifile1,*) deg,ke,he,le
++ end do
++ 
++ end do
++
++
++ cpu_count=cpu_count+1;call cpu_time(cpu_time1(cpu_count))
++ !write(101,*), 'Earth model initialization :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ !write(101,*),''
++ if (display) then
++ write(*,*), 'Love number calc done :', cpu_time1(cpu_count) -cpu_time1(cpu_count-1), 's'
++ write(*,*),''
++ endif
++
++ deallocate( bc, indx, f, sourcs )
++end subroutine
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22059)
+@@ -0,0 +1,422 @@
++module model
++ 
++ implicit none
++
++ contains
++
++  subroutine model_init2(nbc)
++!--------------------- 
++ use lnb_param
++
++  double precision :: ro,g,drad,la,mu,ro1,ro2,x
++  logical :: solid,test
++  integer :: nbc,i,n,j
++
++
++
++  !- Calculus parameters    
++  pi=dacos(-1.d0)
++  epsdb=epsilon(1.d0)
++  
++  !write(101,*), 'Epsilon machine = ',epsdb
++  !write(101,*), 'Constants:'
++  !write(101,*), ' pi = ',pi
++  !write(101,*), ' G  = ',GG 
++  !write(101,*), 'Dimensioned scales:'
++  !write(101,*), ' rigidity mu0 = ',mu0
++  !write(101,*), ' gravity  go0 = ',go0
++  !write(101,*), ' distance r0  = ',r0
++  
++ 
++
++ 
++ !call earth_homogeneous_layers_prembased(radius,nlayer,roc,lac,muc,g,solid) !yields the Earth layers radii, density, lamé parameters, gravity and solid/liquid state boolean identifier
++ 
++ !if (benchmark_spada) then
++ ! muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.28340d11 
++ ! muc(4) = 1.05490d11; muc(5) = 0.70363d11; muc(6) = 0.50605d11
++ ! roc(1) = 10751.d0; roc(2) = 10750.d0; roc(3) = 4978.d0 
++ ! roc(6)=3300.d0
++ !else
++  !muc(1) = 1.d6; muc(2) = 0.d0; muc(3) = 2.20425d11 
++  !muc(4) = 0.870257d11; muc(5) = 0.870257d11; muc(6) = 0.510268d11
++  !roc(1) = 10987.9d0; roc(2) = 10986.9d0; roc(3) = 4903.58d0 
++  !roc(4) = 3628.29d0; roc(5) = 3628.29d0; roc(6) = 3113.94d0
++ !endif
++
++ !vic2=vic/vicratio
++ !muc2=muc/mucratio
++
++ if (display) then
++	print*, '  Layer top boundary        rho                       la                        mu                        eta' 
++ do i = 1,nlayer
++  ! print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
++  if (burgers(i)) then
++  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i),muc2(i),vic2(i), 'B'
++  else
++  print*, radius(i+1),roc(i),lac(i),muc(i),vic(i)
++  endif
++ end do
++
++ endif
++ !write(101,*),
++
++
++ call earth_nlayers(1.d0,ro,la,mu,g,solid)
++   go_surf = g
++   ro_mean = 3.d0/4.d0*go_surf/(pi*GG*ra)
++	if (display) then
++		print*, 'Surface Gravity: ', go_surf, ' m.s^-2, mean density: ', ro_mean, ' kg.m^-3'
++		print*, 'Center of the Earth approximated at r=', radius(1)/1e3, ' km'
++	endif 
++  
++  ! Test number of interfaces and of boundary conditions
++  n = 0
++  do i=1,nlayer+1 
++ if (radbc(i)) n=n+1
++  enddo
++  if (nbc/=(6*n)) then
++ !write(101,*),
++ print*, 'Error nbc should be ',6*n,' instead of ',nbc
++ stop
++  endif
++  
++  ! Test solid-liquid boundaries
++ test = .false.
++  do i = 1,nlayer
++ if (radbc(i)) test = .true.
++ if (test) then
++ if ((.not.soliddim(i)).and.((.not.radbc(i)).or.(.not.radbc(i+1)))) then
++  print*, 'Error in model definition: one fluid layer is not set with correct boundary conditions'
++  stop
++ endif
++ endif
++  enddo
++  
++  !-- Display a few quantities
++  !write(101,*), ' surface radius = ',ra
++  !write(101,*), ' CMB radius = ',rb
++  !write(101,*), ' ICB radius = ',rc
++  !write(101,*), ' go surface = ',go_surf
++  !write(101,*), ' mean density = ',ro_mean 
++  
++  !-- Diplsay ICB conditions
++  !x=rc/ra
++  !write(101,*), 
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'ICB, g = ',g
++  !write(101,*), 'ICB, ro(Inner Core) = ', ro1
++  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'ICB, g = ',g
++  !write(101,*), 'ICB, ro(Outer Core) = ', ro2
++  !go_icb = g
++  
++  !-- Display CMB conditions
++  !x=rb/ra
++  !write(101,*),
++  !call earth_nlayers_viscoelas(x-epsdb,ro1,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'CMB, g = ',g
++  !write(101,*), 'CMB, ro(Outer Core) = ', ro1
++  !call earth_nlayers_viscoelas(x,ro2,complex(la,0.d0),complex(mu,0d0),g,solid)
++  !write(101,*), 'CMB, g = ',g
++  !write(101,*), 'CMB, ro(Mantle) = ', ro2
++  !go_cmb = g
++ 
++ end subroutine model_init2
++
++
++ subroutine earth_homogeneous_layers_prembased(radin,nl,rot,lat,mut,GR,solid)
++ use lnb_param
++   
++   double precision :: x0,GR
++   logical :: solid
++   integer                 :: i,j,nl
++   doubleprecision      :: la,mu,ro,vp,vs,RT
++   doubleprecision      :: t1,t2,t3,t4,r1,r2
++   doubleprecision, dimension(14) :: r
++   doubleprecision, dimension(13,4) :: d,p,s
++   doubleprecision, dimension(:), pointer :: radin
++   doubleprecision, dimension(:), pointer :: rot,lat,mut
++    doubleprecision, dimension(nl+1) :: rad
++   
++   
++   RT = ra
++   r(1) = 0.d0;     r(2) = 1221.5d0; r(3) = 3480.d0; r(4) = 3630.d0
++   r(5) = 5600.d0;  r(6) = 5701.d0;  r(7) = 5771.d0; r(8) = 5971.d0
++   r(9) = 6151.d0; r(10) = 6291.d0; r(11) = 6346.6d0
++   r(12) = 6356.d0; r(13) = 6368.d0; r(14) = ra
++  
++!   if ((r(14)*1.d3) /= ra) stop'Problem in prem: Earth radius /= ra !' 
++!
++  d(:,:) = 0.d0
++  d(1,1) = 13.0885d0;               d(1,3) = -8.8381d0 
++  d(2,1) = 12.5815d0; d(2,2) = -1.2638d0; d(2,3) = -3.6426d0; d(2,4) = -5.5281d0
++  d(3,1) = 7.9565d0 ; d(3,2) = -6.4761;   d(3,3) = 5.5283d0;  d(3,4) = -3.0807d0
++  d(4,1) = 7.9565d0 ; d(4,2) = -6.4761;   d(4,3) = 5.5283d0;  d(4,4) = -3.0807d0
++  d(5,1) = 7.9565d0 ; d(5,2) = -6.4761;   d(5,3) = 5.5283d0;  d(5,4) = -3.0807d0
++  d(6,1) = 5.3197d0 ; d(6,2) = -1.4836d0
++  d(7,1) = 11.2494d0; d(7,2) = -8.0298d0
++  d(8,1) = 7.1089d0 ; d(8,2) = -3.8045d0
++  d(9,1) = 2.6910d0 ; d(9,2) = 0.6924d0
++  d(10,1) = 2.6910d0; d(10,2) = 0.6924d0
++  d(11,1) = 2.9d0  
++  d(12,1) = 2.6d0  
++
++! ocean
++  if (soliddim(13).eqv..false.) then
++   d(13,1) = 1.02d0 
++
++! continental
++  else
++  d(13,1) = d(12,1)
++  end if
++
++  p(:,:) = 0.d0
++  p(1,1) = 11.2622d0 ; p(1,3) = -6.3640d0
++  p(2,1) = 11.0487d0 ; p(2,2) = -4.0362d0; p(2,3)  = 4.8023d0; p(2,4) = -13.5732d0
++  p(3,1) = 15.3891d0 ; p(3,2) = -5.3181d0; p(3,3)  = 5.5242d0; p(3,4) = -2.5514d0
++  p(4,1) = 24.952d0 ; p(4,2)  = -40.4673d0; p(4,3) = 51.4832d0; p(4,4) = -26.6419d0
++  p(5,1) = 29.2766d0 ; p(5,2) = -23.6027d0; p(5,3) = 5.5242d0; p(5,4) = -2.5514d0
++  p(6,1) = 19.0957d0 ; p(6,2)  = -9.8672d0
++  p(7,1) = 39.7027d0 ; p(7,2)  = -32.6166d0
++  p(8,1) = 20.3926d0 ; p(8,2)  = -12.2569d0
++  p(9,1) = 4.1875d0 ; p(9,2)  = 3.9382d0
++  p(10,1) = 4.1875d0 ; p(10,2) = 3.9382d0
++  p(11,1) = 6.8d0 
++  p(12,1) = 5.8d0
++!
++! ocean
++  if (soliddim(13).eqv..false.) then
++  p(13,1) = 1.45d0 
++!
++! continental
++  else
++  p(13,1) = p(12,1)
++  end if
++!----
++!
++  s(:,:) = 0.d0
++!
++  s(1,1) = 3.6678d0; s(1,3) = -4.4475d0
++
++  s(3,1) = 6.9254d0; s(3,2) = 1.4672d0; s(3,3) = -2.0834d0; s(3,4) = 0.9783d0
++  s(4,1) = 11.1671d0; s(4,2) = -13.7818d0; s(4,3) = 17.4575d0; s(4,4) = -9.2777d0
++  s(5,1) = 22.3459d0; s(5,2) = -17.2473d0; s(5,3) = -2.0834d0; s(5,4) = 0.9783d0
++  s(6,1) = 9.9839d0; s(6,2) = -4.9324
++  s(7,1) = 22.3512d0; s(7,2) = -18.5856d0 
++  s(8,1) = 8.9496d0; s(8,2) = -4.4597
++  s(9,1) = 2.1519d0; s(9,2) = 2.3481d0
++  s(10,1) = 2.1519d0; s(10,2) = 2.3481d0
++  s(11,1) = 3.9d0 
++  s(12,1) = 3.2d0 
++!
++! ocean (please don't modify)
++  if (soliddim(13).eqv..false.) then
++!
++! continental
++  else
++  s(13,1) = s(12,1)
++  end if
++!
++!
++  r(:) = r(:)*1.d3
++  
++  !- handling the first layer : central sphere
++  rad = radin
++  rad(1) = 0.d0
++  
++  do j = 1,nl
++  
++ ro = 0.d0
++ vp = 0.d0
++ vs = 0.d0
++
++ do i = 1,13
++
++  r1 = 0.d0
++  r2 = 0.d0
++  if ((rad(j) > r(i)).and.(rad(j) <= r(i+1))) then
++   if (rad(j+1) <= r(i+1)) then
++    r2 = rad(j+1)
++    r1 = rad(j)
++   else
++    r2 = r(i+1)
++    r1 = rad(j)
++   end if
++  else if (rad(j) <= r(i)) then
++   if ((rad(j+1) > r(i)).and.(rad(j+1) <= r(i+1))) then
++    r2 = rad(j+1)
++    r1 = r(i)
++   else if (rad(j+1) > r(i+1)) then
++    r2 = r(i+1)
++    r1 = r(i)
++   end if
++  end if
++
++  t1 = d(i,1)/3.d0
++  t2 = d(i,2)/(Rt*4.d0)
++  t3 = d(i,3)/((Rt**2)*5.d0)
++  t4 = d(i,4)/((Rt**3)*6.d0)
++  ro =  ro + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++     
++  t1 = p(i,1)/3.d0
++  t2 = p(i,2)/(Rt*4.d0)
++  t3 = p(i,3)/((Rt**2)*5.d0)
++  t4 = p(i,4)/((Rt**3)*6.d0)
++  vp =  vp + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++     
++  t1 = s(i,1)/3.d0
++  t2 = s(i,2)/(Rt*4.d0)
++  t3 = s(i,3)/((Rt**2)*5.d0)
++  t4 = s(i,4)/((Rt**3)*6.d0)
++  vs =  vs + t1*(r2**3) + t2*(r2**4) + t3*(r2**5) + t4*(r2**6) - &
++   ( t1*(r1**3) + t2*(r1**4) + t3*(r1**5) + t4*(r1**6) )
++
++ end do
++ ro = ro*3 / (rad(j+1)**3-rad(j)**3)
++ vp = vp*3 /(rad(j+1)**3-rad(j)**3)
++ vs = vs*3 / (rad(j+1)**3-rad(j)**3)
++ mu = ro*vs**2
++ la = ro*vp**2 - 2.d0*mu
++ ro = ro*1.d3
++ la = la*1.d9
++ mu = mu*1.d9
++
++ !print*, rad(j+1), ro, la , mu
++ rot(j) = ro
++ lat(j) = la
++ mut(j) = mu
++  end do
++   
++   
++ end subroutine earth_homogeneous_layers_prembased
++
++
++ subroutine earth_nlayers(x0,ro,la,mu,GR,solid)
++ use lnb_param
++!---------------------------------------
++! Gets planet properties at non-dimentionalized radius x0:
++!ro: density
++!la: Lame lambda constant
++!mu: Lame mu constant (shear modulus)
++!GR: gravity
++!solid: boolean, true if solid, otherwise liquid
++    integer                 :: i,j
++    doubleprecision      :: la,mu,CST,GR
++    doubleprecision      :: x,x0,xx0,ro
++    doubleprecision      ::r1,r2
++    logical       :: solid
++    double precision, dimension(nlayer+1) :: r
++    
++
++
++    solid = .true.
++
++    r(:) = radius(:)
++    r(1) = 0.d0
++    x    = x0   * ra
++    CST = 4.d0*pi*GG/3.d0
++    if ( x > r(nlayer+1) ) x = r(nlayer+1)
++    
++    GR = 0.d0
++    
++    do i = 1,nlayer
++
++ if (x > r(i)) then 
++
++  r2 = r(i+1)
++  r1 = r(i)
++  ro = roc(i)
++
++  if (x <= r(i+1)) then
++
++   GR = GR + ro*(x**3-r1**3)
++   if (x > epsdb) GR = GR*CST/(x**2)
++
++  else
++   GR = GR + ro*(r2**3-r1**3)
++  end if
++ end if
++
++ if ((x >= r(i)).and.(x < r(i+1))) then    
++  la = lac(i)
++  mu = muc(i)
++  ro = roc(i)
++  if ( soliddim(i).eqv..false. ) solid = .false.
++
++ end if
++
++    end do
++
++    if (x>=r(nlayer+1)) then
++ la = lac(nlayer)
++ mu = muc(nlayer)
++ ro = roc(nlayer)
++  if ( soliddim(nlayer).eqv..false. ) solid = .false.
++
++     end if
++
++ end subroutine earth_nlayers
++ 
++ subroutine earth_nlayers_viscoelas(x0,ro,la,mu,GR,solid)
++ use lnb_param
++!---------------------------------------
++! Defines the earth rheology at non-dimensionalized radius x0 and angular frequency freq (global/public variable)
++
++    integer                 :: i
++    double complex   :: la, mu, cst
++    double precision      :: GR,la0,mu00,ka,mu1,mu2,vi2
++    double precision      :: x,x0,xx0,ro,vi
++    logical       :: notfound,solid,burg
++
++
++
++  call earth_nlayers(x0,ro,la0,mu00,GR,solid)
++  
++  x    = x0 * ra
++ do i = 1,nlayer
++ if ((x >= radius(i)).and.(x < radius(i+1))) then
++ vi = vic(i) 
++ vi2 = vic2(i)
++ mu2=muc2(i)
++ burg=burgers(i)
++ end if
++ end do
++
++  if (burg.eqv..true.) then
++ mu1=mu00
++
++ if ((vi*freq) /= 0.d0) then
++  ka=la0 + 2.d0/3.d0*mu00
++  !print*,mu1,mu2,vi,vi2
++   mu=mu1*freq*(freq+mu2/vi2)/((freq+mu2/vi2)*(freq+mu1/vi)+mu1/vi2*freq)
++  !la=4*la0*mu**2/(2*mu*(3*la0+2*mu)-3*la0*mu)
++  la=ka-2.d0/3.d0*mu
++  !print*,freq,mu,la
++ else
++  mu = mu00
++  la = la0
++ endif
++  else
++   ka = la0 + 2.d0/3.d0*mu00
++   cst = vi*freq
++   if (cst /= 0.d0) then
++  mu = mu00/(1.d0+mu00/cst)
++  la = (la0 + mu00*ka/cst)/(1.d0 + mu00/cst)
++   else
++  mu = mu00
++  la = la0
++   endif
++  endif
++   
++  !
++  !!write(101,*), freq,cst,la0,la,mu00,mu,vi
++
++ end subroutine earth_nlayers_viscoelas
++ 
++ 
++
++
++end module model
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.mod
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.mod	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.mod	(revision 22059)
+@@ -0,0 +1,78 @@
++GFORTRAN module version '10' created from model.f90
++MD5:a258024f3edabbd9d8f912615daabf3f -- If you edit this, you'll get what you deserve.
++
++(() () () () () () () () () () () () () () () () () () () () () () ()
++() () () ())
++
++()
++
++()
++
++()
++
++()
++
++()
++
++(2 'earth_homogeneous_layers_prembased' 'model' '' 1 ((PROCEDURE
++UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT)
++(UNKNOWN 0 0 0 0 UNKNOWN ()) 3 0 (4 5 6 7 8 9 10) () 0 () () () 0 0)
++11 'earth_nlayers' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 12 0 (13 14 15
++16 17 18) () 0 () () () 0 0)
++19 'earth_nlayers_viscoelas' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT
++MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 20
++0 (21 22 23 24 25 26) () 0 () () () 0 0)
++27 'model' 'model' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
++28 'model_init2' 'model' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
++DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 29 0 (30) () 0
++() () () 0 0)
++4 'radin' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED
++() ()) 0 () () () 0 0)
++5 'nl' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++6 'rot' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++7 'lat' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++8 'mut' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DIMENSION POINTER DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 DEFERRED ()
++()) 0 () () () 0 0)
++9 'gr' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
++0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++10 'solid' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++13 'x0' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++14 'ro' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++15 'la' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++16 'mu' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++17 'gr' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++18 'solid' '' '' 12 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++21 'x0' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++22 'ro' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++23 'la' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++24 'mu' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (COMPLEX 8 0 0 0 COMPLEX ()) 0 0 () () 0 () () () 0 0)
++25 'gr' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
++26 'solid' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
++UNKNOWN 0 0 DUMMY) (LOGICAL 4 0 0 0 LOGICAL ()) 0 0 () () 0 () () () 0 0)
++30 'nbc' '' '' 29 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
++0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
++)
++
++('earth_homogeneous_layers_prembased' 0 2 'earth_nlayers' 0 11
++'earth_nlayers_viscoelas' 0 19 'model' 0 27 'model_init2' 0 28)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22059-22060.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22059-22060.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22059-22060.diff	(revision 22755)
@@ -0,0 +1,324 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22060)
+@@ -0,0 +1,162 @@
++
++%Test Name: GiaCaron. 
++%Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
++
++md=model();
++md.cluster=generic('name',oshostname(),'np',1);
++
++md.materials=materials('litho');
++md.miscellaneous.name='FourierLoveTest';
++
++md.verbose=verbose('111111101');
++cst=365.25*24*3600*1000;
++
++	md.materials.numlayers=6;
++        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
++	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
++	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
++	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
++	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++	md.materials.issolid=[1 0 1 1 1 1]';
++	md.materials.isburgers=zeros(md.materials.numlayers,1);
++
++md.love.allow_layer_deletion=1;
++md.love.frequencies=([0]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++
++
++
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	};
++
++
++md.love.frequencies=([1e-3 1e-2 1e-1 1 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,:)),...
++	(md.results.LoveSolution.LoveKr(:,:)),...
++	(md.results.LoveSolution.LoveLr(:,:)),...
++	(md.results.LoveSolution.LoveHi(:,:)),...
++	(md.results.LoveSolution.LoveKi(:,:)),...
++	(md.results.LoveSolution.LoveLi(:,:)),...
++	};
++
++
++return
++md.love.forcing_type=9;
++md.love.sh_nmin=2
++md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md=solve(md,'lv');
++%tidal love numbers
++field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
++
++
++
++ %Many layers PREM-based model
++%data=load('../Data/PREM_500layers');
++%md.love.sh_nmin=1;
++%md.materials.radius=data(2:end-2,1);
++%md.materials.density=data(3:end-2,2);
++%md.materials.lame_lambda=data(3:end-2,3);
++%md.materials.lame_mu=data(3:end-2,4);
++%md.materials.issolid=data(3:end-2,4)>0;
++%ind=find(md.materials.issolid==0);
++%md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3);
++%md.materials.radius(ind(2:end)+1)=[];
++%md.materials.density(ind(2:end))=[];
++%md.materials.lame_lambda(ind(2:end))=[];
++%md.materials.lame_mu(ind(2:end))=[];
++%md.materials.issolid(ind(2:end))=[];
++%md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP');
++%md.materials.viscosity=md.materials.viscosity.*md.materials.issolid;
++%md.materials.burgers_mu=md.materials.lame_mu;
++%md.materials.burgers_viscosity=md.materials.viscosity;
++%md.materials.isburgers=md.materials.issolid*0;
++%md.love.forcing_type=11;
++%md.materials.numlayers=length(md.materials.viscosity);
++%md=solve(md,'lv');
++%
++%field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
++%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++%field_values={field_values{:},...
++%	(md.results.LoveSolution.LoveHr(:,1)),...
++%	(md.results.LoveSolution.LoveKr(:,1)),...
++%	(md.results.LoveSolution.LoveLr(:,1)),...
++%	(md.results.LoveSolution.LoveHr(:,2:end)),...
++%	(md.results.LoveSolution.LoveKr(:,2:end)),...
++%	(md.results.LoveSolution.LoveLr(:,2:end)),...
++%	(md.results.LoveSolution.LoveHi(:,2:end)),...
++%	(md.results.LoveSolution.LoveKi(:,2:end)),...
++%	(md.results.LoveSolution.LoveLi(:,2:end)),...
++%	};
++
++
++%Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
++md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
++md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
++md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]';
++md.materials.viscosity=[0., 0., 8E+21, 8.5E+21, 9E+21, 3.E+22, 4.E+22, 5.E+22, 6.E+22, 5.E+22, 4.5E+22, 3.E+22, 2.5E+22, 1.8E+22, 1.3E+22, 8E+21, 7+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 4.5E+21, 4E+21, 2.5E+21, 2.E+21, 1.5E+21, 10.E+20, 6.E+20, 5.5E+20, 2.E+20, 1.E40]';
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++md.materials.issolid=md.materials.lame_mu>0;
++md.materials.numlayers=length(md.materials.lame_mu);
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++md.materials.isburgers=md.materials.issolid*0;
++md.love.forcing_type=11;
++md.love.sh_nmin=1;
++md.love.sh_nmax=100;
++md=solve(md,'lv');
++md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++
++
++field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test2084.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22060)
+@@ -0,0 +1,152 @@
++
++#Test Name: GiaCaron. Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
++from model import *
++from socket import gethostname
++from solve import *
++from numpy import * 
++md=model()
++md.cluster=generic('name',oshostname(),'np',1)
++md.materials=materials('litho')
++md.miscellaneous.name='FourierLoveTest'
++md.verbose=verbose('111111101')
++cst=365.25*24*3600*1000
++md.materials.numlayers=6
++md.materials.radius =[10, 1222.5, 3.4800e+03,5.7010e+03,5.9510e+03,6.3010e+03,6.3710e+03]*1e3
++md.materials.density=[1.0750e4, 1.0750e+04,4.9780e+03,3.8710e+03,3.4380e+03,3.0370e+03]
++md.materials.lame_mu=[1e-5,0,2.2834e+00,1.0549e+00,7.0363e-01,5.0605e-01]*1e11
++md.materials.viscosity=[0,0,2.0000e+00,1.0000e+00,1.0000e+00,1.0000e+25]*1e21
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14
++md.materials.issolid=[1, 0, 1, 1, 1, 1]
++md.materials.isburgers=zeros(md.materials.numlayers,1)
++md.love.allow_layer_deletion=1
++
++md.love.frequencies=([0]*2*pi)/cst
++md.love.nfreq=len(md.love.frequencies)
++md.love.sh_nmax=256
++md.materials.burgers_mu=md.materials.lame_mu
++md.materials.burgers_viscosity=md.materials.viscosity
++md=solve(md,'lv')
++#Fields and tolerances to track changes
++#loading love numbers
++field_names=['LoveHe','LoveKe','LoveLe']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[\
++(md.results.LoveSolution.LoveHr[:][0]),\
++(md.results.LoveSolution.LoveKr[:][0]),\
++(md.results.LoveSolution.LoveLr[:][0]),\
++]
++
++
++md.love.frequencies=([1e-3, 1e-2, 1e-1, 1, -1e-3, -1e-2, -1e-1, -1]*2*pi)/cst
++md.love.nfreq=len(md.love.frequencies)
++md.love.sh_nmax=256
++md.materials.burgers_mu=md.materials.lame_mu
++md.materials.burgers_viscosity=md.materials.viscosity
++md=solve(md,'lv')
++#Fields and tolerances to track changes
++#loading love numbers
++field_names=concatenate([field_names,['LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli']])
++field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
++field_values=concatenate([field_values,[\
++(md.results.LoveSolution.LoveHr[:][:]),\
++(md.results.LoveSolution.LoveKr[:][:]),\
++(md.results.LoveSolution.LoveLr[:][:])),\
++(md.results.LoveSolution.LoveHi[:][:]),\
++(md.results.LoveSolution.LoveKi[:][:]),\
++(md.results.LoveSolution.LoveLi[:][:]),\
++]])
++
++
++
++md.love.forcing_type=9
++md.love.sh_nmin=2
++md.love.frequencies=([0, 1e-4, 1e-3, 1e-2, 1e-1, 1, -1e-4, -1e-3, -1e-2, -1e-1, -1]*2*pi)/cst
++md.love.nfreq=len(md.love.frequencies)
++md=solve(md,'lv')
++#tidal love numbers
++field_names=concatenate([field_names,['LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti']])
++field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
++field_values=concatenate([field_values,[\
++(md.results.LoveSolution.LoveHr[:][0]),\
++(md.results.LoveSolution.LoveKr[:][0]),\
++(md.results.LoveSolution.LoveLr[:][0]),\
++(md.results.LoveSolution.LoveHr[:][1:]),\
++(md.results.LoveSolution.LoveKr[:][1:]),\
++(md.results.LoveSolution.LoveLr[:][1:]),\
++(md.results.LoveSolution.LoveHi[:][1:]),\
++(md.results.LoveSolution.LoveKi[:][1:]),\
++(md.results.LoveSolution.LoveLi[:][1:]),\
++]])
++
++
++
++#Many layers PREM-based model
++#data=load('../Data/PREM_500layers')
++#md.love.sh_nmin=1
++#md.materials.radius=data(2:end-2,1)
++#md.materials.density=data(3:end-2,2)
++#md.materials.lame_lambda=data(3:end-2,3)
++#md.materials.lame_mu=data(3:end-2,4)
++#md.materials.issolid=data(3:end-2,4)>0
++#ind=find(md.materials.issolid==0)
++#md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3)
++#md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3)
++#md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3)
++#md.materials.radius(ind(2:end)+1)=[]
++#md.materials.density(ind(2:end))=[]
++#md.materials.lame_lambda(ind(2:end))=[]
++#md.materials.lame_mu(ind(2:end))=[]
++#md.materials.issolid(ind(2:end))=[]
++#md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP')
++#md.materials.viscosity=md.materials.viscosity.*md.materials.issolid
++#md.materials.burgers_mu=md.materials.lame_mu
++#md.materials.burgers_viscosity=md.materials.viscosity
++#md.materials.isburgers=md.materials.issolid*0
++#md.love.forcing_type=11
++#md.materials.numlayers=len(md.materials.viscosity)
++#md=solve(md,'lv')
++#
++#field_names=[field_names,'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi']
++#field_tolerances=[field_tolerances,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++#field_values=[field_values,\
++#	(md.results.LoveSolution.LoveHr[:][0]),\
++#	(md.results.LoveSolution.LoveKr[:][0]),\
++#	(md.results.LoveSolution.LoveLr[:][0]),\
++#	(md.results.LoveSolution.LoveHr[:][1:]),\
++#	(md.results.LoveSolution.LoveKr[:][1:]),\
++#	(md.results.LoveSolution.LoveLr[:][1:]),\
++#	(md.results.LoveSolution.LoveHi[:][1:]),\
++#	(md.results.LoveSolution.LoveKi[:][1:]),\
++#	(md.results.LoveSolution.LoveLi[:][1:]),\
++#	]
++#Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
++md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]*1e3
++md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]*1e11
++md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]
++md.materials.viscosity=[0., 0., 8E+21, 8.5E+21, 9E+21, 3.E+22, 4.E+22, 5E+22, 6.E+22, 5E+22, 4.5E+22, 3.E+22, 2.5E+22, 1.8E+22, 1.3E+22, 8E+21, 7E+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 55E+21, 45E+21, 2.5E+21, 27E+21, 1.5E+21, 10E+20, 6.E+20, 5.5E+20, 2.E+20, 1.E40]
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14
++md.materials.issolid=ones(len(md.materials.mu))
++md.materials.issolid[1]=0
++md.materials.numlayers=len(md.materials.lame_mu)
++md.materials.burgers_mu=md.materials.lame_mu
++md.materials.burgers_viscosity=md.materials.viscosity
++md.materials.isburgers=md.materials.issolid*0
++md.love.forcing_type=11
++md.love.sh_nmin=1
++md.love.sh_nmax=100
++md=solve(md,'lv')
++md.love.frequencies=([0, 1e-4, 1e-2, 1, -1e-4, -1e-2, -1]*2*pi)/cst
++md.love.nfreq=len(md.love.frequencies)
++field_names=concatenate([field_names,['LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi']])
++field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
++field_values=concatenate([field_values,[\
++(md.results.LoveSolution.LoveHr[:][0]),\
++(md.results.LoveSolution.LoveKr[:][0]),\
++(md.results.LoveSolution.LoveLr[:][0]),\
++(md.results.LoveSolution.LoveHr[:][1:]),\
++(md.results.LoveSolution.LoveKr[:][1:]),\
++(md.results.LoveSolution.LoveLr[:][1:]),\
++(md.results.LoveSolution.LoveHi[:][1:]),\
++(md.results.LoveSolution.LoveKi[:][1:]),\
++(md.results.LoveSolution.LoveLi[:][1:]),\
++]])
Index: /issm/oecreview/Archive/21724-22754/ISSM-22060-22061.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22060-22061.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22060-22061.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22060)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22061)
+@@ -64,7 +64,6 @@
+ 	};
+ 
+ 
+-return
+ md.love.forcing_type=9;
+ md.love.sh_nmin=2
+ md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22061-22062.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22061-22062.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22061-22062.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22061)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22062)
+@@ -63,7 +63,7 @@
+ 	(md.results.LoveSolution.LoveLi(:,:)),...
+ 	};
+ 
+-
++return
+ md.love.forcing_type=9;
+ md.love.sh_nmin=2
+ md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22062-22063.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22062-22063.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22062-22063.diff	(revision 22755)
@@ -0,0 +1,323 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22062)
++++ ../trunk-jpl/test/NightlyRun/test2084.py	(nonexistent)
+@@ -1,152 +0,0 @@
+-
+-#Test Name: GiaCaron. Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
+-from model import *
+-from socket import gethostname
+-from solve import *
+-from numpy import * 
+-md=model()
+-md.cluster=generic('name',oshostname(),'np',1)
+-md.materials=materials('litho')
+-md.miscellaneous.name='FourierLoveTest'
+-md.verbose=verbose('111111101')
+-cst=365.25*24*3600*1000
+-md.materials.numlayers=6
+-md.materials.radius =[10, 1222.5, 3.4800e+03,5.7010e+03,5.9510e+03,6.3010e+03,6.3710e+03]*1e3
+-md.materials.density=[1.0750e4, 1.0750e+04,4.9780e+03,3.8710e+03,3.4380e+03,3.0370e+03]
+-md.materials.lame_mu=[1e-5,0,2.2834e+00,1.0549e+00,7.0363e-01,5.0605e-01]*1e11
+-md.materials.viscosity=[0,0,2.0000e+00,1.0000e+00,1.0000e+00,1.0000e+25]*1e21
+-md.materials.lame_lambda=md.materials.lame_mu*0+5e14
+-md.materials.issolid=[1, 0, 1, 1, 1, 1]
+-md.materials.isburgers=zeros(md.materials.numlayers,1)
+-md.love.allow_layer_deletion=1
+-
+-md.love.frequencies=([0]*2*pi)/cst
+-md.love.nfreq=len(md.love.frequencies)
+-md.love.sh_nmax=256
+-md.materials.burgers_mu=md.materials.lame_mu
+-md.materials.burgers_viscosity=md.materials.viscosity
+-md=solve(md,'lv')
+-#Fields and tolerances to track changes
+-#loading love numbers
+-field_names=['LoveHe','LoveKe','LoveLe']
+-field_tolerances=[1e-13,1e-13,1e-13]
+-field_values=[\
+-(md.results.LoveSolution.LoveHr[:][0]),\
+-(md.results.LoveSolution.LoveKr[:][0]),\
+-(md.results.LoveSolution.LoveLr[:][0]),\
+-]
+-
+-
+-md.love.frequencies=([1e-3, 1e-2, 1e-1, 1, -1e-3, -1e-2, -1e-1, -1]*2*pi)/cst
+-md.love.nfreq=len(md.love.frequencies)
+-md.love.sh_nmax=256
+-md.materials.burgers_mu=md.materials.lame_mu
+-md.materials.burgers_viscosity=md.materials.viscosity
+-md=solve(md,'lv')
+-#Fields and tolerances to track changes
+-#loading love numbers
+-field_names=concatenate([field_names,['LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli']])
+-field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
+-field_values=concatenate([field_values,[\
+-(md.results.LoveSolution.LoveHr[:][:]),\
+-(md.results.LoveSolution.LoveKr[:][:]),\
+-(md.results.LoveSolution.LoveLr[:][:])),\
+-(md.results.LoveSolution.LoveHi[:][:]),\
+-(md.results.LoveSolution.LoveKi[:][:]),\
+-(md.results.LoveSolution.LoveLi[:][:]),\
+-]])
+-
+-
+-
+-md.love.forcing_type=9
+-md.love.sh_nmin=2
+-md.love.frequencies=([0, 1e-4, 1e-3, 1e-2, 1e-1, 1, -1e-4, -1e-3, -1e-2, -1e-1, -1]*2*pi)/cst
+-md.love.nfreq=len(md.love.frequencies)
+-md=solve(md,'lv')
+-#tidal love numbers
+-field_names=concatenate([field_names,['LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti']])
+-field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
+-field_values=concatenate([field_values,[\
+-(md.results.LoveSolution.LoveHr[:][0]),\
+-(md.results.LoveSolution.LoveKr[:][0]),\
+-(md.results.LoveSolution.LoveLr[:][0]),\
+-(md.results.LoveSolution.LoveHr[:][1:]),\
+-(md.results.LoveSolution.LoveKr[:][1:]),\
+-(md.results.LoveSolution.LoveLr[:][1:]),\
+-(md.results.LoveSolution.LoveHi[:][1:]),\
+-(md.results.LoveSolution.LoveKi[:][1:]),\
+-(md.results.LoveSolution.LoveLi[:][1:]),\
+-]])
+-
+-
+-
+-#Many layers PREM-based model
+-#data=load('../Data/PREM_500layers')
+-#md.love.sh_nmin=1
+-#md.materials.radius=data(2:end-2,1)
+-#md.materials.density=data(3:end-2,2)
+-#md.materials.lame_lambda=data(3:end-2,3)
+-#md.materials.lame_mu=data(3:end-2,4)
+-#md.materials.issolid=data(3:end-2,4)>0
+-#ind=find(md.materials.issolid==0)
+-#md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3)
+-#md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3)
+-#md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3)
+-#md.materials.radius(ind(2:end)+1)=[]
+-#md.materials.density(ind(2:end))=[]
+-#md.materials.lame_lambda(ind(2:end))=[]
+-#md.materials.lame_mu(ind(2:end))=[]
+-#md.materials.issolid(ind(2:end))=[]
+-#md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP')
+-#md.materials.viscosity=md.materials.viscosity.*md.materials.issolid
+-#md.materials.burgers_mu=md.materials.lame_mu
+-#md.materials.burgers_viscosity=md.materials.viscosity
+-#md.materials.isburgers=md.materials.issolid*0
+-#md.love.forcing_type=11
+-#md.materials.numlayers=len(md.materials.viscosity)
+-#md=solve(md,'lv')
+-#
+-#field_names=[field_names,'LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi']
+-#field_tolerances=[field_tolerances,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+-#field_values=[field_values,\
+-#	(md.results.LoveSolution.LoveHr[:][0]),\
+-#	(md.results.LoveSolution.LoveKr[:][0]),\
+-#	(md.results.LoveSolution.LoveLr[:][0]),\
+-#	(md.results.LoveSolution.LoveHr[:][1:]),\
+-#	(md.results.LoveSolution.LoveKr[:][1:]),\
+-#	(md.results.LoveSolution.LoveLr[:][1:]),\
+-#	(md.results.LoveSolution.LoveHi[:][1:]),\
+-#	(md.results.LoveSolution.LoveKi[:][1:]),\
+-#	(md.results.LoveSolution.LoveLi[:][1:]),\
+-#	]
+-#Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
+-md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]*1e3
+-md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]*1e11
+-md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]
+-md.materials.viscosity=[0., 0., 8E+21, 8.5E+21, 9E+21, 3.E+22, 4.E+22, 5E+22, 6.E+22, 5E+22, 4.5E+22, 3.E+22, 2.5E+22, 1.8E+22, 1.3E+22, 8E+21, 7E+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 55E+21, 45E+21, 2.5E+21, 27E+21, 1.5E+21, 10E+20, 6.E+20, 5.5E+20, 2.E+20, 1.E40]
+-md.materials.lame_lambda=md.materials.lame_mu*0+5e14
+-md.materials.issolid=ones(len(md.materials.mu))
+-md.materials.issolid[1]=0
+-md.materials.numlayers=len(md.materials.lame_mu)
+-md.materials.burgers_mu=md.materials.lame_mu
+-md.materials.burgers_viscosity=md.materials.viscosity
+-md.materials.isburgers=md.materials.issolid*0
+-md.love.forcing_type=11
+-md.love.sh_nmin=1
+-md.love.sh_nmax=100
+-md=solve(md,'lv')
+-md.love.frequencies=([0, 1e-4, 1e-2, 1, -1e-4, -1e-2, -1]*2*pi)/cst
+-md.love.nfreq=len(md.love.frequencies)
+-field_names=concatenate([field_names,['LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi']])
+-field_tolerances=concatenate([field_tolerances,[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]])
+-field_values=concatenate([field_values,[\
+-(md.results.LoveSolution.LoveHr[:][0]),\
+-(md.results.LoveSolution.LoveKr[:][0]),\
+-(md.results.LoveSolution.LoveLr[:][0]),\
+-(md.results.LoveSolution.LoveHr[:][1:]),\
+-(md.results.LoveSolution.LoveKr[:][1:]),\
+-(md.results.LoveSolution.LoveLr[:][1:]),\
+-(md.results.LoveSolution.LoveHi[:][1:]),\
+-(md.results.LoveSolution.LoveKi[:][1:]),\
+-(md.results.LoveSolution.LoveLi[:][1:]),\
+-]])
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22062)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(nonexistent)
+@@ -1,161 +0,0 @@
+-
+-%Test Name: GiaCaron. 
+-%Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
+-
+-md=model();
+-md.cluster=generic('name',oshostname(),'np',1);
+-
+-md.materials=materials('litho');
+-md.miscellaneous.name='FourierLoveTest';
+-
+-md.verbose=verbose('111111101');
+-cst=365.25*24*3600*1000;
+-
+-	md.materials.numlayers=6;
+-        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
+-	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
+-	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
+-	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
+-	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
+-	md.materials.issolid=[1 0 1 1 1 1]';
+-	md.materials.isburgers=zeros(md.materials.numlayers,1);
+-
+-md.love.allow_layer_deletion=1;
+-md.love.frequencies=([0]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md.love.sh_nmax=256;
+-
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-
+-md=solve(md,'lv');
+-
+-
+-
+-%Fields and tolerances to track changes
+-%loading love numbers
+-field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
+-field_tolerances={1e-13,1e-13,1e-13};
+-field_values={...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	};
+-
+-
+-md.love.frequencies=([1e-3 1e-2 1e-1 1 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md.love.sh_nmax=256;
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-
+-md=solve(md,'lv');
+-%Fields and tolerances to track changes
+-%loading love numbers
+-field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,:)),...
+-	(md.results.LoveSolution.LoveKr(:,:)),...
+-	(md.results.LoveSolution.LoveLr(:,:)),...
+-	(md.results.LoveSolution.LoveHi(:,:)),...
+-	(md.results.LoveSolution.LoveKi(:,:)),...
+-	(md.results.LoveSolution.LoveLi(:,:)),...
+-	};
+-
+-return
+-md.love.forcing_type=9;
+-md.love.sh_nmin=2
+-md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-md=solve(md,'lv');
+-%tidal love numbers
+-field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-	};
+-
+-
+-
+- %Many layers PREM-based model
+-%data=load('../Data/PREM_500layers');
+-%md.love.sh_nmin=1;
+-%md.materials.radius=data(2:end-2,1);
+-%md.materials.density=data(3:end-2,2);
+-%md.materials.lame_lambda=data(3:end-2,3);
+-%md.materials.lame_mu=data(3:end-2,4);
+-%md.materials.issolid=data(3:end-2,4)>0;
+-%ind=find(md.materials.issolid==0);
+-%md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
+-%md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
+-%md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3);
+-%md.materials.radius(ind(2:end)+1)=[];
+-%md.materials.density(ind(2:end))=[];
+-%md.materials.lame_lambda(ind(2:end))=[];
+-%md.materials.lame_mu(ind(2:end))=[];
+-%md.materials.issolid(ind(2:end))=[];
+-%md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP');
+-%md.materials.viscosity=md.materials.viscosity.*md.materials.issolid;
+-%md.materials.burgers_mu=md.materials.lame_mu;
+-%md.materials.burgers_viscosity=md.materials.viscosity;
+-%md.materials.isburgers=md.materials.issolid*0;
+-%md.love.forcing_type=11;
+-%md.materials.numlayers=length(md.materials.viscosity);
+-%md=solve(md,'lv');
+-%
+-%field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-%field_values={field_values{:},...
+-%	(md.results.LoveSolution.LoveHr(:,1)),...
+-%	(md.results.LoveSolution.LoveKr(:,1)),...
+-%	(md.results.LoveSolution.LoveLr(:,1)),...
+-%	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-%	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-%	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-%	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-%	};
+-
+-
+-%Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
+-md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
+-md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
+-md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]';
+-md.materials.viscosity=[0., 0., 8E+21, 8.5E+21, 9E+21, 3.E+22, 4.E+22, 5.E+22, 6.E+22, 5.E+22, 4.5E+22, 3.E+22, 2.5E+22, 1.8E+22, 1.3E+22, 8E+21, 7+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 4.5E+21, 4E+21, 2.5E+21, 2.E+21, 1.5E+21, 10.E+20, 6.E+20, 5.5E+20, 2.E+20, 1.E40]';
+-md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
+-md.materials.issolid=md.materials.lame_mu>0;
+-md.materials.numlayers=length(md.materials.lame_mu);
+-md.materials.burgers_mu=md.materials.lame_mu;
+-md.materials.burgers_viscosity=md.materials.viscosity;
+-md.materials.isburgers=md.materials.issolid*0;
+-md.love.forcing_type=11;
+-md.love.sh_nmin=1;
+-md.love.sh_nmax=100;
+-md=solve(md,'lv');
+-md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
+-md.love.nfreq=length(md.love.frequencies);
+-
+-
+-field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={field_values{:},...
+-	(md.results.LoveSolution.LoveHr(:,1)),...
+-	(md.results.LoveSolution.LoveKr(:,1)),...
+-	(md.results.LoveSolution.LoveLr(:,1)),...
+-	(md.results.LoveSolution.LoveHr(:,2:end)),...
+-	(md.results.LoveSolution.LoveKr(:,2:end)),...
+-	(md.results.LoveSolution.LoveLr(:,2:end)),...
+-	(md.results.LoveSolution.LoveHi(:,2:end)),...
+-	(md.results.LoveSolution.LoveKi(:,2:end)),...
+-	(md.results.LoveSolution.LoveLi(:,2:end)),...
+-	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22063-22064.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22063-22064.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22063-22064.diff	(revision 22755)
@@ -0,0 +1,110 @@
+Index: ../trunk-jpl/src/m/classes/clusters/vilje.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22063)
++++ ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22064)
+@@ -14,6 +14,7 @@
+ 		cpuspernode    = 32;
+ 		procspernodes  = 16;
+ 		mem            = 28;
++		numstreams		= 8; %Henning added
+ 		queue          = 'workq';
+ 		time           = 2*60;
+ 		codepath       = '';
+@@ -78,7 +79,8 @@
+ 			if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+ 
+ 			%compute number of processors
+-			cluster.np=cluster.numnodes*cluster.cpuspernode;
++% 			cluster.np=cluster.numnodes*cluster.cpuspernode;
++			np(cluster);%=cluster.numnodes*cluster.cpuspernode;
+ 
+ 			%write queuing script 
+ 			fid=fopen([modelname '.queue'],'w');
+@@ -85,12 +87,20 @@
+ 			fprintf(fid,'#PBS -S /bin/bash\n');
+ 			fprintf(fid,'#PBS -N %s\n',modelname);
+ 			fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,16);
+-			fprintf(fid,'#PBS -l walltime=%s\n',cluster.time); %walltime is in seconds.
++			
++			%calculate walltime in hh:mm:ss format
++			walltime=datestr(cluster.time/(60*24),'HH:MM:SS');
++			fprintf(fid,'#PBS -l walltime=%s\n',walltime); %walltime should be in hh:mm:ss
+ 			fprintf(fid,'#PBS -A %s\n',cluster.accountname);
+ 			fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+ 			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
++			fprintf(fid,'module load intelcomp/17.0.0\n') 
++			fprintf(fid,'module load mpt/2.14\n')
++			fprintf(fid,'module load petsc/3.7.4d\n')
++			fprintf(fid,'module load parmetis/4.0.3\n') 
++			fprintf(fid,'module load mumps/5.0.2\n')
+ 			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,modelname);
+ 			fprintf(fid,'mpiexec_mpt -n %i %s/kriging.exe %s %s\n',cluster.np,cluster.codepath,[cluster.executionpath '/' modelname],modelname);
+ 			if ~io_gather, %concatenate the output files:
+@@ -116,23 +126,36 @@
+ 			end
+ 
+ 			%compute number of processors
+-			cluster.np=cluster.numnodes*cluster.cpuspernode;                     
+-			shortname = substring(modelname,1,min(12,length(modelname)));
++% 			cluster.np=cluster.numnodes*cluster.cpuspernode;
++			np(cluster);%=cluster.numnodes*cluster.cpuspernode;                     
++% 			shortname = substring(modelname,1,min(12,length(modelname)));
+ 
+ 			%write queuing script 
+ 			fid=fopen([modelname '.queue'],'w');
+ 			fprintf(fid,'#PBS -S /bin/bash\n');
+-			fprintf(fid,'#PBS -N %s\n',shortname);
++% 			fprintf(fid,'#PBS -N %s\n',shortname);
++			fprintf(fid,'#PBS -N %s\n',modelname);
+ 			fprintf(fid,'#PBS -q %s \n',cluster.queue);
+ 			fprintf(fid,'#PBS -l select=%i:ncpus=%i:mpiprocs=%i\n',cluster.numnodes,cluster.cpuspernode,cluster.procspernodes);
+-			fprintf(fid,'#PBS -l walltime=%s\n',duration(0,cluster.time,0)); %walltime is in minutes.
++
++			%calculate walltime in hh:mm:ss format
++			walltime=datestr(cluster.time/(60*24),'HH:MM:SS');
++% 			fprintf(fid,'#PBS -l walltime=%s\n',duration(0,cluster.time,0)); %walltime is in minutes.
++% 			fprintf(fid,'#PBS -l walltime=%s\n',10); %walltime is in minutes.
++			fprintf(fid,'#PBS -l walltime=%s\n',walltime); %walltime should be in hh:mm:ss
++% 			fprintf(fid,'#PBS -l walltime=%i\n',walltime); %walltime is in hh:mm:ss
+ 			fprintf(fid,'#PBS -A %s\n',cluster.accountname);
+ 			fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+ 			fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
++			fprintf(fid,'module load intelcomp/17.0.0\n') 
++			fprintf(fid,'module load mpt/2.14\n')
++			fprintf(fid,'module load petsc/3.7.4d\n')
++			fprintf(fid,'module load parmetis/4.0.3\n') 
++			fprintf(fid,'module load mumps/5.0.2\n')
+ 			fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+-			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
++			fprintf(fid,'mpiexec_mpt -np %i %s/%s %s %s %s\n',cluster.np,cluster.codepath,executable,solution,[cluster.executionpath '/' dirname],modelname);
+ 
+ 			if ~io_gather, %concatenate the output files:
+ 				fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+@@ -142,7 +165,7 @@
+ 			%in interactive mode, create a run file, and errlog and outlog file
+ 			if cluster.interactive,
+ 				fid=fopen([modelname '.run'],'w');
+-				fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
++				fprintf(fid,'mpiexec_mpt -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,solution,[cluster.executionpath '/' dirname],modelname);
+ 				if ~io_gather, %concatenate the output files:
+ 					fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
+ 				end
+@@ -163,11 +186,12 @@
+ 			system(compressstring);
+ 			disp('uploading input file and queueing script');
+ 			directory=cluster.executionpath;
+-			issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
++% 			issmbbftpout(cluster.name,directory,cluster.login,cluster.port,cluster.numstreams,{[dirname '.tar.gz']});
++			issmscpout(cluster.name,directory,cluster.login,cluster.port,{[dirname '.tar.gz']});
+ 
+ 		end
+ 		%}}}
+-		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
++		function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+ 
+ 			disp('launching solution sequence on remote cluster');
+ 			launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22064-22065.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22064-22065.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22064-22065.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/vilje.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22064)
++++ ../trunk-jpl/src/m/classes/clusters/vilje.m	(revision 22065)
+@@ -70,7 +70,7 @@
+ 		%}}}
+ 		function numprocs=np(self) % {{{
+ 			%compute number of processors
+-			numprocs=self.numnodes*self.cpuspernode;
++			numprocs=self.numnodes*self.procspernodes;
+ 		end
+ 		%}}}
+ 		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22065-22066.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22065-22066.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22065-22066.diff	(revision 22755)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22065)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22066)
+@@ -1687,6 +1687,17 @@
+ 				name==SmbMeltEnum ||
+ 				name==SmbRefreezeEnum ||
+ 				name==SmbEvaporationEnum ||
++				name==SmbCEnum ||
++				name==SmbTaEnum ||
++				name==SmbVEnum ||
++				name==SmbDswrfEnum ||
++				name==SmbDlwrfEnum ||
++				name==SmbPEnum ||
++				name==SmbEAirEnum ||
++				name==SmbPAirEnum ||
++				name==SmbVzEnum ||
++				name==SmbTzEnum ||
++				name==SmbTmeanEnum ||
+ 				name==SmbIsInitializedEnum ||
+ 				name==BasalforcingsGroundediceMeltingRateEnum ||
+ 				name==BasalforcingsFloatingiceMeltingRateEnum ||
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22065)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22066)
+@@ -52,6 +52,56 @@
+ 		param_enum        = SmbEvaporationEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
++	else if(strcmp(string_in,"SmbTa")==0){
++		const char* field = "md.smb.Ta";
++		param_enum        = SmbTaEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbV")==0){
++		const char* field = "md.smb.V";
++		param_enum        = SmbVEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbDswrf")==0){
++		const char* field = "md.smb.dswrf";
++		param_enum        = SmbDswrfEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbDlwrf")==0){
++		const char* field = "md.smb.dlwrf";
++		param_enum        = SmbDlwrfEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbP")==0){
++		const char* field = "md.smb.P";
++		param_enum        = SmbPEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbEAir")==0){
++		const char* field = "md.smb.eAir";
++		param_enum        = SmbEAirEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbPAir")==0){
++		const char* field = "md.smb.pAir";
++		param_enum        = SmbPAirEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbVz")==0){
++		const char* field = "md.smb.Vz";
++		param_enum        = SmbVzEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbTz")==0){
++		const char* field = "md.smb.Tz";
++		param_enum        = SmbTzEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"SmbC")==0){
++		const char* field = "md.smb.C";
++		param_enum        = SmbCEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
+ 	else if(strcmp(string_in,"BasalforcingsFloatingiceMeltingRate")==0){
+ 		const char* field = "md.basalforcings.floatingice_melting_rate";
+ 		param_enum        = BasalforcingsFloatingiceMeltingRateEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22066-22067.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22066-22067.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22066-22067.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22066)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22067)
+@@ -9,6 +9,7 @@
+     --disable-shared \
+     --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install-javascript" \
+     --with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install-javascript" \
++	--without-Love \
+     --without-kml\
+     --without-kriging\
+     --with-cxxoptflags=""\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22067-22068.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22067-22068.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22067-22068.diff	(revision 22755)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22068)
+@@ -0,0 +1,160 @@
++
++%Test Name: GiaCaron. 
++%Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
++
++md=model();
++md.cluster=generic('name',oshostname(),'np',1);
++
++md.materials=materials('litho');
++md.miscellaneous.name='FourierLoveTest';
++
++md.verbose=verbose('111111101');
++cst=365.25*24*3600*1000;
++
++	md.materials.numlayers=6;
++        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
++	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
++	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
++	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
++	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++	md.materials.issolid=[1 0 1 1 1 1]';
++	md.materials.isburgers=zeros(md.materials.numlayers,1);
++
++md.love.allow_layer_deletion=1;
++md.love.frequencies=([0]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++
++
++
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	};
++
++
++md.love.frequencies=([1e-3 1e-2 1e-1 1 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=256;
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++%Fields and tolerances to track changes
++%loading love numbers
++field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,:)),...
++	(md.results.LoveSolution.LoveKr(:,:)),...
++	(md.results.LoveSolution.LoveLr(:,:)),...
++	(md.results.LoveSolution.LoveHi(:,:)),...
++	(md.results.LoveSolution.LoveKi(:,:)),...
++	(md.results.LoveSolution.LoveLi(:,:)),...
++	};
++
++md.love.forcing_type=9;
++md.love.sh_nmin=2
++md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md=solve(md,'lv');
++%tidal love numbers
++field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
++
++
++
++ %Many layers PREM-based model
++%data=load('../Data/PREM_500layers');
++%md.love.sh_nmin=1;
++%md.materials.radius=data(2:end-2,1);
++%md.materials.density=data(3:end-2,2);
++%md.materials.lame_lambda=data(3:end-2,3);
++%md.materials.lame_mu=data(3:end-2,4);
++%md.materials.issolid=data(3:end-2,4)>0;
++%ind=find(md.materials.issolid==0);
++%md.materials.density(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.density(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_lambda(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_lambda(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)+1).^3);
++%md.materials.lame_mu(ind(1))=sum((md.materials.radius(ind+1).^3-md.materials.radius(ind).^3).*md.materials.lame_mu(ind))/(md.materials.radius(ind(end)+1).^3-md.materials.radius(ind(1)).^3);
++%md.materials.radius(ind(2:end)+1)=[];
++%md.materials.density(ind(2:end))=[];
++%md.materials.lame_lambda(ind(2:end))=[];
++%md.materials.lame_mu(ind(2:end))=[];
++%md.materials.issolid(ind(2:end))=[];
++%md.materials.viscosity=10.^interp1([0 3479e3 3480e3 3680e3 5720e3 5800e3 6270e3 6371e3], log10([1e8 1e8 5e21 1e23 1e22 1e20 1e21 1e40]), md.materials.radius(2:end),'PCHIP');
++%md.materials.viscosity=md.materials.viscosity.*md.materials.issolid;
++%md.materials.burgers_mu=md.materials.lame_mu;
++%md.materials.burgers_viscosity=md.materials.viscosity;
++%md.materials.isburgers=md.materials.issolid*0;
++%md.love.forcing_type=11;
++%md.materials.numlayers=length(md.materials.viscosity);
++%md=solve(md,'lv');
++%
++%field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
++%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++%field_values={field_values{:},...
++%	(md.results.LoveSolution.LoveHr(:,1)),...
++%	(md.results.LoveSolution.LoveKr(:,1)),...
++%	(md.results.LoveSolution.LoveLr(:,1)),...
++%	(md.results.LoveSolution.LoveHr(:,2:end)),...
++%	(md.results.LoveSolution.LoveKr(:,2:end)),...
++%	(md.results.LoveSolution.LoveLr(:,2:end)),...
++%	(md.results.LoveSolution.LoveHi(:,2:end)),...
++%	(md.results.LoveSolution.LoveKi(:,2:end)),...
++%	(md.results.LoveSolution.LoveLi(:,2:end)),...
++%	};
++
++
++%Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
++md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
++md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
++md.materials.density=[10925., 10925., 5506.42, 5491.45, 5456.57, 5357.06, 5307.24, 5207.13, 5156.69, 5054.69, 5002.99, 4897.83, 4844.22, 4734.6, 4678.44, 4563.07, 4503.72, 4443.16, 4412.41, 3992.14, 3983.99, 3975.84, 3912.82, 3786.78, 3723.78, 3516.39, 3489.51, 3435.78, 3359.5, 3367.1, 3184.3]';
++md.materials.viscosity=[0., 0., 7.999999999999999E+21, 8.5E+21, 8.999999999999999E+21, 3.E+22, 4.E+22, 5.0000000000000004E+22, 6.E+22, 5.0000000000000004E+22, 4.5E+22, 3.E+22, 2.5000000000000002E+22, 1.7999999999999998E+22, 1.3E+22, 7.999999999999999E+21, 6.999999999999999E+21, 6.5E+21, 6.E+21, 5.5E+21, 5.E+21, 4.4999999999999995E+21, 3.9999999999999995E+21, 2.5E+21, 1.9999999999999997E+21, 1.5E+21, 9.999999999999999E+20, 6.E+20, 5.5000000000000007E+20, 2.E+20, 1.E40]';
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++md.materials.issolid=md.materials.lame_mu>0;
++md.materials.numlayers=length(md.materials.lame_mu);
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++md.materials.isburgers=md.materials.issolid*0;
++md.love.forcing_type=11;
++md.love.sh_nmin=1;
++md.love.sh_nmax=100;
++md=solve(md,'lv');
++md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++
++
++field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
++field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={field_values{:},...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	(md.results.LoveSolution.LoveHr(:,2:end)),...
++	(md.results.LoveSolution.LoveKr(:,2:end)),...
++	(md.results.LoveSolution.LoveLr(:,2:end)),...
++	(md.results.LoveSolution.LoveHi(:,2:end)),...
++	(md.results.LoveSolution.LoveKi(:,2:end)),...
++	(md.results.LoveSolution.LoveLi(:,2:end)),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2084.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2084.arch	(revision 22068)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2084.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22068-22069.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22068-22069.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22068-22069.diff	(revision 22755)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 22068)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 22069)
+@@ -55,7 +55,7 @@
+ 		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MESH,0,"elements2d"));
+ 		FetchData(&numberoflayers,mxGetAssignedField(MESH,0,"numberoflayers"));
+ 	}
+-	else if(strcmp(mxGetClassName(MESH),"mesh2dhorizontal")==0){
++	else if(strcmp(mxGetClassName(MESH),"mesh2d")==0){
+ 		meshelementtype = TriaEnum;
+ 		numberoflayers=1;
+ 	}
+Index: ../trunk-jpl/src/m/modules/MeshPartition.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/MeshPartition.m	(revision 22068)
++++ ../trunk-jpl/src/m/modules/MeshPartition.m	(revision 22069)
+@@ -1,4 +1,4 @@
+-function [element_partitioning, node_partitioning] = MeshPartition(md.mesh,numpartitions);
++function [element_partitioning, node_partitioning] = MeshPartition(md,numpartitions)
+ %MESHPARTITION - Partition mesh according to the number of areas, using Metis library.
+ %
+ %	   Usage:
+Index: ../trunk-jpl/src/m/partition/partitioner.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/partitioner.m	(revision 22068)
++++ ../trunk-jpl/src/m/partition/partitioner.m	(revision 22069)
+@@ -89,11 +89,16 @@
+ 
+ elseif strcmpi(package,'linear'),
+ 
+-	part=1:1:md.mesh.numberofvertices;
++	if npart==md.mesh.numberofelements | md.qmu.numberofpartitions==md.mesh.numberofelements
++		part=1:1:md.mesh.numberofelements;
++		disp('Linear partitioner requesting partitions on elements');
++	else
++		part=1:1:md.mesh.numberofvertices;
++	end
+ 
+ elseif strcmpi(package,'metis'),
+ 
+-	[element_partitioning,part]=MeshPartition(md.mesh,md.qmu.numberofpartitions);
++	[element_partitioning,part]=MeshPartition(md,md.qmu.numberofpartitions);
+ 
+ else
+ 
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 22068)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 22069)
+@@ -64,8 +64,8 @@
+ 				end
+ 			end
+ 			if ~isempty(md.qmu.partition),
+-				if numel(md.qmu.partition)~=md.mesh.numberofvertices,
+-					md = checkmessage(md,['user supplied partition for qmu analysis should have size md.mesh.numberofvertices x 1 ']);
++				if numel(md.qmu.partition)~=md.mesh.numberofvertices & numel(md.qmu.partition)~=md.mesh.numberofelements,
++					md = checkmessage(md,['user supplied partition for qmu analysis should have size md.mesh.numberofvertices x 1 or md.mesh.numberofelements x 1']);
+ 				end
+ 				if min(md.qmu.partition)~=0,
+ 					md = checkmessage(md,['partition vector not indexed from 0 on']);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22069-22070.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22069-22070.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22069-22070.diff	(revision 22755)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/test/NightlyRun/test244.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test244.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test244.m	(revision 22070)
+@@ -0,0 +1,117 @@
++%Test Name: SquareShelfSMBGembDakota
++md=triangle(model(),'../Exp/Square.exp',200000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelf.par');
++md=setflowequation(md,'SSA','all');
++md.materials.rho_ice=910;
++md.cluster=generic('name',oshostname(),'np',3);
++md.geometry.bed=md.geometry.base;
++
++% Use of Gemb method for SMB computation
++md.smb = SMBgemb(md.mesh,md.geometry);
++
++%load hourly surface forcing date from 1979 to 2009:
++inputs=load('../Data/gemb_input.mat');
++
++%setup the inputs: 
++md.smb.Ta=[repmat(inputs.Ta0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.V=[repmat(inputs.V0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.dswrf=[repmat(inputs.dsw0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.dlwrf=[repmat(inputs.dlw0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.P=[repmat(inputs.P0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.eAir=[repmat(inputs.eAir0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.pAir=[repmat(inputs.pAir0',md.mesh.numberofelements,1);inputs.dateN'];
++md.smb.Vz=repmat(inputs.LP.Vz,md.mesh.numberofelements,1);
++md.smb.Tz=repmat(inputs.LP.Tz,md.mesh.numberofelements,1);
++md.smb.Tmean=repmat(inputs.LP.Tmean,md.mesh.numberofelements,1);
++md.smb.C=repmat(inputs.LP.C,md.mesh.numberofelements,1);
++
++%smb settings
++md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance'};
++
++%only run smb core: 
++md.transient.isstressbalance=0;
++md.transient.ismasstransport=1;
++md.transient.isthermal=0;
++
++%time stepping: 
++md.timestepping.start_time=1965;
++md.timestepping.final_time=1965.75;
++md.timestepping.time_step=1/365.0;
++md.timestepping.interp_forcings=0;
++
++%dakota version
++version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version);
++
++%partitioning
++md.qmu.numberofpartitions=md.mesh.numberofelements;
++md=partitioner(md,'package','linear');
++md.qmu.partition=md.qmu.partition-1;
++
++%variables
++md.qmu.variables.surface_mass_balanceC=normal_uncertain('scaled_SmbC',1,0.5);
++Tmin=273;
++telms=min(md.smb.Ta(1:end-1,:),[],2);
++mint_on_partition=telms;
++for pa=1:length(mint_on_partition)
++	vi=find(md.qmu.partition+1 == pa);
++	mint=telms(vi).*1.05;
++	pos=find(mint < Tmin);
++	mint(pos)=Tmin;
++	mint_on_partition(pa)=max(mint./telms(vi));
++end
++mint_on_partition(isnan(mint_on_partition)) = 10^-10;
++md.qmu.variables.surface_mass_balanceTa=uniform_uncertain('scaled_SmbTa',1,0.05); 
++md.qmu.variables.surface_mass_balanceTa.lower=0.95;
++md.qmu.variables.surface_mass_balanceTa.upper=max(min(max(1.05,mint_on_partition),0.9999),0.0001);
++
++%responses
++md.qmu.responses.IceVolume=response_function('IceVolume',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.IceMass=response_function('IceMass',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.TotalSmb=response_function('TotalSmb',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++
++%  nond_sampling study
++md.qmu.method=dakota_method('nond_samp');
++md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',4,'sample_type','lhs');
++dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
++if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
++	md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'rng','rnum2');
++end
++
++%parameters
++md.qmu.params.direct=true;
++md.qmu.params.analysis_components='';
++md.qmu.params.interval_type='forward';
++md.qmu.params.tabular_graphics_data=true;
++md.qmu.isdakota=1;
++
++if version>=6,
++	md.qmu.params.analysis_driver='matlab';
++	md.qmu.params.evaluation_scheduling='master';
++	md.qmu.params.processors_per_evaluation=2;
++else
++	md.qmu.params.analysis_driver='stressbalance';
++	md.qmu.params.evaluation_concurrency=1;
++end
++
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
++md.transient.requested_outputs={'IceVolume','TotalSmb','IceMass'};
++
++%solve
++md=solve(md,'Transient','overwrite','y');
++md.qmu.results=md.results.dakota;
++
++%Fields and tolerances to track changes
++md.results.dakota.moments=[];
++for i=1:3,
++	md.results.dakota.moments=[md.results.dakota.moments md.results.dakota.dresp_out(i).mean];
++end
++for i=1:3,
++	md.results.dakota.moments=[md.results.dakota.moments md.results.dakota.dresp_out(i).stddev];
++end
++field_names     ={'moments'};
++field_tolerances={1e-11};
++field_values={...
++	md.results.dakota.moments,...
++	};
++
+Index: ../trunk-jpl/test/Archives/Archive244.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive244.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive244.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive244.arch	(revision 22070)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive244.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22070-22071.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22070-22071.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22070-22071.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test244.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test244.m	(revision 22070)
++++ ../trunk-jpl/test/NightlyRun/test244.m	(revision 22071)
+@@ -110,7 +110,7 @@
+ 	md.results.dakota.moments=[md.results.dakota.moments md.results.dakota.dresp_out(i).stddev];
+ end
+ field_names     ={'moments'};
+-field_tolerances={1e-11};
++field_tolerances={1e-6};
+ field_values={...
+ 	md.results.dakota.moments,...
+ 	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22071-22072.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22071-22072.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22071-22072.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/windows_test
+===================================================================
+--- ../trunk-jpl/jenkins/windows_test	(revision 22071)
++++ ../trunk-jpl/jenkins/windows_test	(revision 22072)
+@@ -30,5 +30,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104, 124, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 412, 413, 414, 417, 418, 420, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341]"
++MATLAB_NROPTIONS="'exclude',[104, 124, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 412, 413, 414, 417, 418, 420, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280, 801, 802, 803, 804, 805, 291, 340, 341, 244]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22072-22073.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22072-22073.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22072-22073.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/jenkins/windows_test
+===================================================================
+--- ../trunk-jpl/jenkins/windows_test	(revision 22072)
++++ ../trunk-jpl/jenkins/windows_test	(revision 22073)
+@@ -30,5 +30,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104, 124, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 412, 413, 414, 417, 418, 420, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280, 801, 802, 803, 804, 805, 291, 340, 341, 244]"
++MATLAB_NROPTIONS="'exclude',[104, 124, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 412, 413, 414, 417, 418, 420, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280, 801, 802, 803, 804, 805, 291, 340, 341]"
+ PYTHON_NROPTIONS=""
+Index: ../trunk-jpl/jenkins/windows
+===================================================================
+--- ../trunk-jpl/jenkins/windows	(revision 22072)
++++ ../trunk-jpl/jenkins/windows	(revision 22073)
+@@ -60,5 +60,5 @@
+ #ex: "'id',[101 102 103]"
+ 
+ #In Windows, we don't yet have MUMPS, can't do full stokes, so exclude all FS runs. Also exclude all runs with Dakota. And exclude higher order runs that have penalties. And 800+ tests because we don't want to have --with-development since we do the binaries with this version
+-MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280,801,802,803,804,805,291,340,341,460,243,430,441,442,463,464,465]"
++MATLAB_NROPTIONS="'exclude',[104,119, 124,125,126, 204, 211, 215, 220, 221, 285, 290, 308, 322, 404, 421, 422, 503, 507, 510, 511, 513, 701, 702, 703, 218, 234, 235, 250, 251, 412, 413, 414, 417, 418, 420, 440,444, 205, 274, 331, 405, 409, 455, 612, 514, 435, 280, 801, 802, 803, 804, 805, 291, 340, 341, 460, 243, 430, 441, 442, 463, 464, 465, 244]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22073-22074.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22073-22074.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22073-22074.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22073)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22074)
+@@ -229,6 +229,18 @@
+ 				for(int i=0;i<3;i++) this->values[i]  =this->values[3+i];
+ 			}
+ 			break;
++		case P1xP2Enum:
++			if(start==-1){
++				for(int i=0+3;i<9;i+=3) this->values[i]=this->values[0];
++				for(int i=1+3;i<9;i+=3) this->values[i]=this->values[1];
++				for(int i=2+3;i<9;i+=3) this->values[i]=this->values[2];
++			}
++			else{
++				for(int i=0;i<6;i+=3) this->values[i]=this->values[6];
++				for(int i=1;i<6;i+=3) this->values[i]=this->values[7];
++				for(int i=2;i<6;i+=3) this->values[i]=this->values[8];
++			}
++			break;
+ 		case P1xP3Enum:
+ 			if(start==-1){
+ 				for(int i=0+3;i<12;i+=3) this->values[i]=this->values[0];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22074-22075.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22074-22075.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22074-22075.diff	(revision 22755)
@@ -0,0 +1,257 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22074)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22075)
+@@ -1066,6 +1066,7 @@
+ 	P2xP1Enum,
+ 	P1xP2Enum,
+ 	P1xP3Enum,
++	P1xP4Enum,
+ 	P2xP4Enum,
+ 	P1P1Enum,
+ 	P1P1GLSEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22074)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22075)
+@@ -1021,6 +1021,7 @@
+ 		case P2xP1Enum : return "P2xP1";
+ 		case P1xP2Enum : return "P1xP2";
+ 		case P1xP3Enum : return "P1xP3";
++		case P1xP4Enum : return "P1xP4";
+ 		case P2xP4Enum : return "P2xP4";
+ 		case P1P1Enum : return "P1P1";
+ 		case P1P1GLSEnum : return "P1P1GLS";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22074)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22075)
+@@ -1045,6 +1045,7 @@
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
++	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 22074)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 22075)
+@@ -21,6 +21,7 @@
+ #define NUMNODESP1b   7
+ #define NUMNODESP1xP2 9
+ #define NUMNODESP1xP3 12
++#define NUMNODESP1xP4 15
+ #define NUMNODESP2xP1 12
+ #define NUMNODESP2    18
+ #define NUMNODESP2b   19
+@@ -81,6 +82,13 @@
+ 			indices[1] = 1;
+ 			indices[2] = 2;
+ 			break;
++		case P1xP4Enum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			break;
+ 		case P2Enum:
+ 			numindices = 6;
+ 			indices    = xNew<int>(numindices);
+@@ -422,7 +430,7 @@
+ 			basis[ 3]=(9.)/(16.)*gauss->coord1*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
+ 			basis[ 4]=(9.)/(16.)*gauss->coord2*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
+ 			basis[ 5]=(9.)/(16.)*gauss->coord3*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
+-			/*quarter-sides of quads*/
++			/*third-sides of quads*/
+ 			basis[ 6]=(27.)/(16.)*gauss->coord1*(zeta-1)*(zeta-1./3.)*(zeta+1.);
+ 			basis[ 7]=(27.)/(16.)*gauss->coord2*(zeta-1)*(zeta-1./3.)*(zeta+1.);
+ 			basis[ 8]=(27.)/(16.)*gauss->coord3*(zeta-1)*(zeta-1./3.)*(zeta+1.);
+@@ -430,6 +438,26 @@
+ 			basis[10]=-(27.)/(16.)*gauss->coord2*(zeta-1)*(zeta+1./3.)*(zeta+1.);
+ 			basis[11]=-(27.)/(16.)*gauss->coord3*(zeta-1)*(zeta+1./3.)*(zeta+1.);
+ 			return;
++		case P1xP4Enum :
++			/*Corner nodes*/
++			basis[ 0]=gauss->coord1*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
++			basis[ 1]=gauss->coord2*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
++			basis[ 2]=gauss->coord3*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
++			basis[ 3]=gauss->coord1*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
++			basis[ 4]=gauss->coord2*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
++			basis[ 5]=gauss->coord3*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
++			/*mid-sides of quads (center of vertical edges)*/
++			basis[ 6]=gauss->coord1*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
++			basis[ 7]=gauss->coord2*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
++			basis[ 8]=gauss->coord3*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
++			/*quarter-sides of quads (-0.5 and +0.5 of vertical edges)*/
++			basis[ 9]=gauss->coord1*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
++			basis[10]=gauss->coord2*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
++			basis[11]=gauss->coord3*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
++			basis[12]=gauss->coord1*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
++			basis[13]=gauss->coord2*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
++			basis[14]=gauss->coord3*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
+ 	}
+@@ -963,6 +991,71 @@
+ 			dbasis[NUMNODESP1xP3*1+11] = -((9.*SQRT3)/16.) *(zeta-1.)*(zeta+1./3.)*(zeta+1);
+ 			dbasis[NUMNODESP1xP3*2+11] = -gauss->coord3 *(27./16.)*( 2.* zeta *( zeta + (1./3.)) + ( zeta - 1. )*( zeta + 1. ));
+ 			return;
++		case P1xP4Enum :
++			/*Nodal function 1*/
++			dbasis[NUMNODESP1xP4*0+0 ] = -0.5*(2./3.)     *(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
++			dbasis[NUMNODESP1xP4*1+0 ] = -SQRT3/6.*(2./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5); 
++			dbasis[NUMNODESP1xP4*2+0 ] =  gauss->coord1 * 2./3.*( (2.*zeta-1)*(zeta -0.5)*(zeta +0.5) + 2.* zeta *zeta *(zeta -1.)); 
++			/*Nodal function 2*/
++			dbasis[NUMNODESP1xP4*0+1 ] = +0.5*(2./3.)     *(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
++			dbasis[NUMNODESP1xP4*1+1 ] = -SQRT3/6.*(2./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
++			dbasis[NUMNODESP1xP4*2+1 ] = gauss->coord2* 2./3.* ((2.*zeta-1.)*(zeta -0.5)*(zeta +0.5) + 2. * zeta *zeta*(zeta -1.)); 
++			/*Nodal function 3*/
++			dbasis[NUMNODESP1xP4*0+2 ] = 0. ; 
++			dbasis[NUMNODESP1xP4*1+2 ] = SQRT3/3.*(2./3.)*(zeta -1.)*(zeta-0.5)*(zeta)*(zeta+0.5); 
++			dbasis[NUMNODESP1xP4*2+2 ] = gauss->coord3* 2./3.*( (2.*zeta-1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta -1.)); 
++			/*Nodal function 4*/
++			dbasis[NUMNODESP1xP4*0+3 ] = -0.5 *(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. ); 
++			dbasis[NUMNODESP1xP4*1+3 ] = -SQRT3/6.*(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. ); 
++			dbasis[NUMNODESP1xP4*2+3 ] = gauss->coord1* 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1.)); 
++			/*Nodal function 5*/
++			dbasis[NUMNODESP1xP4*0+4 ] = +0.5 *    (2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. ); 
++			dbasis[NUMNODESP1xP4*1+4 ] = -SQRT3/6.*(2./3.)*(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
++			dbasis[NUMNODESP1xP4*2+4 ] = gauss->coord2 * 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1.)); 
++			/*Nodal function 6*/
++			dbasis[NUMNODESP1xP4*0+5 ] = 0. ; 
++			dbasis[NUMNODESP1xP4*1+5 ] = SQRT3/3.*(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. ); 
++			dbasis[NUMNODESP1xP4*2+5 ] = gauss->coord3 * 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1)); 
++			/*Nodal function 7*/
++			dbasis[NUMNODESP1xP4*0+6 ] = -0.5 * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+6 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1.)  ; 
++			dbasis[NUMNODESP1xP4*2+6 ] = gauss->coord1* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta ); 
++			/*Nodal function 8*/
++			dbasis[NUMNODESP1xP4*0+7 ] = +0.5* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+7 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. )  ; 
++			dbasis[NUMNODESP1xP4*2+7 ] = gauss->coord2* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta ); 
++
++			/*Nodal function 9*/
++			dbasis[NUMNODESP1xP4*0+8 ] = 0. ; 
++			dbasis[NUMNODESP1xP4*1+8 ] = SQRT3/3. * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. )  ; 
++			dbasis[NUMNODESP1xP4*2+8 ] = gauss->coord3* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta ); 
++
++			/*Nodal function 10*/
++			dbasis[NUMNODESP1xP4*0+9 ] = -0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+9 ] = -SQRT3/3.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+9 ] = gauss->coord1* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta*(zeta -1.)*( 2.*zeta + 0.5)); 
++			/*Nodal function 11*/
++			dbasis[NUMNODESP1xP4*0+10] = +0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+10] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+10] = gauss->coord2* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5)); 
++			/*Nodal function 12*/
++			dbasis[NUMNODESP1xP4*0+11] = 0. ; 
++			dbasis[NUMNODESP1xP4*1+11] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+11] = gauss->coord3* (-8./3.)*((2.*zeta-1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5));
++			/*Nodal function 13*/
++			dbasis[NUMNODESP1xP4*0+12] = -0.5* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+12] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+12] = gauss->coord1* (-8./3.)*((2.*zeta -1. ) *(zeta+0.5)* (zeta +1.) +  zeta* (zeta -1.)*( 2.*zeta + 3./2.));
++			/*Nodal function 14*/
++			dbasis[NUMNODESP1xP4*0+13] = +0.5* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+13] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+13] = gauss->coord2* (-8./3.)*((2.*zeta -1. )*(zeta+0.5)*(zeta +1.) +  zeta*(zeta -1.)*( 2.*zeta + 3./2.)); 
++			/*Nodal function 15*/
++			dbasis[NUMNODESP1xP4*0+14] = 0 ; 
++			dbasis[NUMNODESP1xP4*1+14] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta + 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*2+14] = gauss->coord3* (-8./3.)*((2. *zeta -1. )*(zeta+0.5)*(zeta +1.) +  zeta*(zeta -1.)*( 2.*zeta + 3./2.));
++
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
+ 	}
+@@ -1074,6 +1167,13 @@
+ 			indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
+ 			indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
+ 			break;
++		case P1xP4Enum:
++			numseg = 3;
++			indices = xNew<int>(numseg*2);
++			indices[0*2 + 0] = 0; indices[0*2 + 1] = 6;
++			indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
++			indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
++			break;
+ 		case P2Enum:
+ 			numseg = 6;
+ 			indices = xNew<int>(numseg*2);
+@@ -1129,6 +1229,7 @@
+ 		case P1xP2Enum:             return NUMNODESP1xP2;
+ 		case P2xP4Enum:             return NUMNODESP2xP4;
+ 		case P1xP3Enum:             return NUMNODESP1xP3;
++		case P1xP4Enum:             return NUMNODESP1xP4;
+ 		case P1P1Enum:              return NUMNODESP1*2;
+ 		case P1P1GLSEnum:           return NUMNODESP1*2;
+ 		case MINIcondensedEnum:     return NUMNODESP1b+NUMNODESP1;
+@@ -1195,6 +1296,7 @@
+ 			break;
+ 		case P1xP2Enum:
+ 		case P1xP3Enum:
++		case P1xP4Enum:
+ 			numindices = 3;
+ 			indices    = xNew<int>(numindices);
+ 			indices[0] = 3;
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 22074)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 22075)
+@@ -600,6 +600,29 @@
+ 				default: _error_("node index should be in [0 11]");
+ 			}
+ 			break;
++		case P1xP4Enum: 
++			switch(iv){
++				case 0 : coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1 : coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2 : coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3 : coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4 : coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5 : coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++
++				case 6 : coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
++				case 7 : coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
++				case 8 : coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
++
++				case 9 : coord1=1.; coord2=0.; coord3=0.; coord4=-0.5; break;
++				case 10: coord1=0.; coord2=1.; coord3=0.; coord4=-0.5; break;
++				case 11: coord1=0.; coord2=0.; coord3=1.; coord4=-0.5; break;
++
++				case 12: coord1=1.; coord2=0.; coord3=0.; coord4=+0.5; break;
++				case 13: coord1=0.; coord2=1.; coord3=0.; coord4=+0.5; break;
++				case 14: coord1=0.; coord2=0.; coord3=1.; coord4=+0.5; break;
++				default: _error_("node index should be in [0 14]");
++			}
++			break;
+ 		case P2xP1Enum: 
+ 			switch(iv){
+ 				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22074)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22075)
+@@ -253,6 +253,18 @@
+ 				for(int i=2;i<9;i+=3) this->values[i]=this->values[11];
+ 			}
+ 			break;
++		case P1xP4Enum:
++			if(start==-1){
++				for(int i=0+3;i<15;i+=3) this->values[i]=this->values[0];
++				for(int i=1+3;i<15;i+=3) this->values[i]=this->values[1];
++				for(int i=2+3;i<15;i+=3) this->values[i]=this->values[2];
++			}
++			else{
++				for(int i=0;i<12;i+=3) this->values[i]=this->values[12];
++				for(int i=1;i<12;i+=3) this->values[i]=this->values[13];
++				for(int i=2;i<12;i+=3) this->values[i]=this->values[14];
++			}
++			break;
+ 		default:
+ 			_error_("not supported yet for type "<<EnumToStringx(this->interpolation_type));
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22075-22076.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22075-22076.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22075-22076.diff	(revision 22755)
@@ -0,0 +1,478 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 22075)
++++ ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 22076)
+@@ -70,9 +70,6 @@
+ 
+ /*Matlab to double* routines: */
+ int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+ 
+ /*Print*/
+ void ApiPrintf(const char* string);
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22075)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22076)
+@@ -87,7 +87,8 @@
+ 				_printf_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'\n");
+ 			}
+ 			/*Convert matlab n-dim array to double* matrix: */
+-			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++			_error_("not supported");
++			//MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+ 		}
+ 	}
+ 	else{
+@@ -222,7 +223,8 @@
+ 		else{
+ 
+ 			/*Convert matlab n-dim array to bool* matrix: */
+-			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++			_error_("not supported");
++			//MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+ 		}
+ 	}
+ 	else if (mxIsClass(dataref,"double") ){
+@@ -237,7 +239,8 @@
+ 		else{
+ 
+ 			/*Convert matlab n-dim array to double* matrix: */
+-			MatlabNArrayToNArray(&doublematrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++			_error_("not supported");
++			//MatlabNArrayToNArray(&doublematrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+ 
+ 			/*Convert double matrix into bool matrix: */
+ 			outmatrix=xNew<bool>(outmatrix_numel);
+@@ -415,7 +418,8 @@
+ 	else if (mxIsClass(dataref,"char") ){
+ 
+ 		/*Convert matlab n-dim array to char* matrix: */
+-		MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++		_error_("not supported");
++		//MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+ 	}
+ 	else{
+ 		/*This is an error: we don't have the correct input!: */
+@@ -756,242 +760,6 @@
+ 
+ 	return 1;
+ }/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	double* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	double* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	double  *pr    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel=mxGetNumberOfElements(mxmatrix);
+-	ndims=mxGetNumberOfDimensions(mxmatrix);
+-	ipt  =mxGetDimensions(mxmatrix);
+-	size =xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-
+-		matrix=xNewZeroInit<double>(rows*cols);
+-
+-		/*Now, get ir,jc and pr: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pr = mxGetPr(mxmatrix);
+-
+-		/*Now, start inserting data into double* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				*(matrix+rows*ir[count]+i)=pr[count];
+-				count++;
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNewZeroInit<double>(numel);
+-
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j = IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(double)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	bool* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	bool* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	bool    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-		matrix=xNewZeroInit<bool>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir=mxGetIr(mxmatrix);
+-		jc=mxGetJc(mxmatrix);
+-		pm=(bool*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into bool* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<bool>(numel);
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j=IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(bool)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int           i,j,rows,cols;
+-	int           numel,ndims;
+-	int          *size , *dims;
+-	mxChar       *mxmatrix_ptr = NULL;
+-	const mwSize *ipt          = NULL;
+-
+-	/*output: */
+-	char* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	char    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-		matrix=xNew<char>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pm = (char*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into char* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=(char)pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=mxGetChars(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<char>(numel+1);
+-		matrix[numel]='\0';
+-
+-		/*looping code adapted from Matlab example explore.c: */
+-		int elements_per_page = size[0] * size[1];
+-		/* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */
+-		int total_number_of_pages = 1;
+-		for (i=2; i<ndims; i++) {
+-			total_number_of_pages *= size[i];
+-		}
+-
+-		i=0;
+-		for (int page=0; page < total_number_of_pages; page++) {
+-			int row;
+-			/* On each page, walk through each row. */
+-			for (row=0; row<size[0]; row++)  {
+-				int column;
+-				j = (page * elements_per_page) + row;
+-
+-				/* Walk along each column in the current row. */
+-				for (column=0; column<size[1]; column++) {
+-					*(matrix+i++)=(char)*(mxmatrix_ptr+j);
+-					j += size[0];
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+ /*FUNCTION mxGetAssignedField{{{*/
+ mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
+ 
+Index: ../trunk-jpl/src/c/classes/Options/OptionUtilities.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/OptionUtilities.cpp	(revision 22075)
++++ ../trunk-jpl/src/c/classes/Options/OptionUtilities.cpp	(revision 22076)
+@@ -14,86 +14,6 @@
+ #include "../../shared/shared.h"
+ /*}}}*/
+ 
+-int ColumnWiseDimsFromIndex(int* dims,int index,int* size,int ndims){/*{{{*/
+-
+-	int   i;
+-	int   aprod=1;
+-
+-	/*check for index too large  */
+-	for (i=0;i<ndims;i++) aprod*=size[i];
+-	if (index >= aprod) _error_("Index " << index << " exceeds number of elements " << aprod << ".");
+-
+-	/*calculate the dimensions (being careful of integer division)  */
+-	for (i=ndims-1; i>=0; i--) {
+-		aprod=reCast<int>(((IssmPDouble)aprod+0.5)/(IssmPDouble)size[i]);
+-		dims[i]=(int)floor(((IssmPDouble)index+0.5)/(IssmPDouble)aprod);
+-		index-=dims[i]*aprod;
+-	}
+-
+-	return(0);
+-}/*}}}*/
+-int IndexFromColumnWiseDims(int* dims, int* size, int ndims) {/*{{{*/
+-
+-	int   i;
+-	int   index=0;
+-
+-	/*check for any dimension too large  */
+-	for (i=0;i<ndims;i++){
+-		if (dims[i] >= size[i]) _error_("Dimension " << i << " of " << dims[i] << " exceeds size of " << size[i] << ".");
+-	}
+-
+-	/*calculate the index  */
+-	for (i=ndims-1; i>=0; i--){
+-		index*=size[i];
+-		index+=dims[i];
+-	}
+-
+-	return(index);
+-}/*}}}*/
+-int IndexFromRowWiseDims(int* dims, int* size, int ndims) {/*{{{*/
+-
+-	int   i;
+-	int   index=0;
+-
+-	/*check for any dimension too large  */
+-	for (i=0; i<ndims; i++){
+-		if (dims[i] >= size[i]) _error_("Dimension " << i << " of " << dims[i] << " exceeds size of " << size[i] << ".");
+-	}
+-
+-	/*calculate the index  */
+-	for (i=0; i<ndims; i++) {
+-		index*=size[i];
+-		index+=dims[i];
+-	}
+-
+-	return(index);
+-}/*}}}*/
+-int RowWiseDimsFromIndex(int* dims, int index, int* size, int ndims) {/*{{{*/
+-
+-	int   i;
+-	int   aprod=1;
+-
+-	/*check for index too large  */
+-	for (i=0; i<ndims; i++) aprod*=size[i];
+-	if (index >= aprod) _error_("Index " << index << " exceeds number of elements " << aprod << ".");
+-
+-	/*calculate the dimensions (being careful of integer division)  */
+-	for (i=0; i<ndims; i++) {
+-		aprod=(int)(((IssmPDouble)aprod+0.5)/(IssmPDouble)size[i]);
+-		dims[i]=(int)floor(((IssmPDouble)index+0.5)/(IssmPDouble)aprod);
+-		index-=dims[i]*aprod;
+-	}
+-
+-	return(0);
+-}/*}}}*/
+-int StringFromDims(char* cstr, int* dims, int ndims) {/*{{{*/
+-
+-	sprintf(&cstr[0],"[");
+-	for(int i=0; i<ndims-1; i++) sprintf(&cstr[strlen(cstr)],"%d,",dims[i]);
+-	sprintf(&cstr[strlen(cstr)],"%d]",dims[ndims-1]);
+-
+-	return(0);
+-}/*}}}*/
+ int StringFromSize(char* cstr, int* size, int ndims) {/*{{{*/
+ 
+ 	sprintf(&cstr[0],"[");
+Index: ../trunk-jpl/src/c/classes/Options/OptionUtilities.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/OptionUtilities.h	(revision 22075)
++++ ../trunk-jpl/src/c/classes/Options/OptionUtilities.h	(revision 22076)
+@@ -12,11 +12,6 @@
+ #include "./Option.h"
+ /*}}}*/
+ 
+-int ColumnWiseDimsFromIndex(int* dims, int index, int* size, int ndims);
+-int IndexFromColumnWiseDims(int* dims, int* size, int ndims);
+-int IndexFromRowWiseDims(int* dims, int* size, int ndims);
+-int RowWiseDimsFromIndex(int* dims, int index, int* size, int ndims);
+-int StringFromDims(char* cstr, int* dims, int ndims);
+ int StringFromSize(char* cstr, int* size, int ndims);
+ 
+ #endif  /* _OPTIONUTILITIES_H */
+Index: ../trunk-jpl/src/c/classes/Options/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/Options.h	(revision 22075)
++++ ../trunk-jpl/src/c/classes/Options/Options.h	(revision 22076)
+@@ -6,10 +6,6 @@
+ #include "../../datastructures/datastructures.h"
+ #include "./GenericOption.h"
+ 
+-/*!\brief Declaration of Options class. 
+- * 
+- * Declaration of Options class.  Options are vector lists (Containers) of Option objects.
+- */ 
+ class Options: public DataSet{
+ 
+ 	public:
+@@ -19,7 +15,7 @@
+ 		~Options();
+ 
+ 		/*numerics*/
+-		int  AddOption(Option* in_oobject);
++		int     AddOption(Option* in_oobject);
+ 		Option* GetOption(const char* name);
+ 
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+@@ -37,22 +33,6 @@
+ 			}
+ 		}
+ 		/*}}}*/
+-		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name){ /*{{{*/
+-
+-			/*Get option*/
+-			GenericOption<OptionType>* genericoption=xDynamicCast<GenericOption<OptionType>*>(GetOption(name));
+-
+-			/*If the pointer is not NULL, the option has been found*/
+-			if(genericoption){
+-				genericoption->Get(pvalue);
+-				*pnumel=genericoption->NumEl();
+-			}
+-			/*Else, the Option does not exist, no default provided*/
+-			else{
+-				_error_("option of name \"" << name << "\" not found, and no default value has been provided");
+-			}
+-		}
+-		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name,OptionType default_value){ /*{{{*/
+ 
+ 			/*Get option*/
+@@ -68,22 +48,7 @@
+ 			}
+ 		}
+ 		/*}}}*/
+-		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name,OptionType default_value){ /*{{{*/
+ 
+-			/*Get option*/
+-			GenericOption<OptionType>* genericoption=xDynamicCast<GenericOption<OptionType>*>(GetOption(name));
+-
+-			/*If the pointer is not NULL, the option has been found*/
+-			if(genericoption){
+-				genericoption->Get(pvalue);
+-				*pnumel=genericoption->NumEl();
+-			}
+-			else{
+-				*pvalue=default_value;
+-			}
+-		}
+-		/*}}}*/
+-
+ };
+ 
+ #endif //ifndef _INPUTS_H_
Index: /issm/oecreview/Archive/21724-22754/ISSM-22076-22077.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22076-22077.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22076-22077.diff	(revision 22755)
@@ -0,0 +1,125 @@
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 22076)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 22077)
+@@ -81,9 +81,8 @@
+ 			/*Nothing else to do*/
+ 			break;
+ 		case P1xP2Enum:
+-			EdgesPartitioning(&my_edges,iomodel);
+-			break;
+ 		case P1xP3Enum:
++		case P1xP4Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			break;
+ 		case P2xP1Enum:
+@@ -369,6 +368,33 @@
+ 					}
+ 				}
+ 				break;
++			case P1xP4Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
++				}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
++						if(my_edges[i]){
++							v1 = iomodel->edges[3*i+0]-1;
++							v2 = iomodel->edges[3*i+1]-1;
++							if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
++								constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+3*i+1,
++												dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
++								constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+2,iomodel->nodecounter+iomodel->numberofvertices+3*i+2,
++												dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
++								constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+3,iomodel->nodecounter+iomodel->numberofvertices+3*i+3,
++												dof,1./2.*spcdata[v1]+1./2.*spcdata[v2],analysis_type));
++								count=count+3;
++							}
++						}
++					}
++				}
++				break;
+ 			case P2xP1Enum:
+ 				for(i=0;i<iomodel->numberofvertices;i++){
+ 					if((iomodel->my_vertices[i])){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 22076)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 22077)
+@@ -109,6 +109,28 @@
+ 				}
+ 			}
+ 			break;
++		case P1xP4Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
++				}
++			}
++			counter = iomodel->numberofvertices;
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
++					if(my_edges[i]){
++						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
++						nodes->AddObject(node);
++						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
++						nodes->AddObject(node);
++						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
++						nodes->AddObject(node);
++					}
++					counter=counter+3;
++				}
++			}
++			break;
+ 
+ 		case P2xP1Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22076)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22077)
+@@ -2818,6 +2818,25 @@
+ 			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
+ 			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
+ 			break;
++		case P1xP4Enum:
++			numnodes         = 15;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0]; /*Vertex 1*/
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1]; /*Vertex 2*/
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2]; /*Vertex 3*/
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3]; /*Vertex 4*/
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4]; /*Vertex 5*/
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5]; /*Vertex 6*/
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+1; /*mid vertical edge 1*/
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+1; /*mid vertical edge 2*/
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+1; /*mid vertical edge 3*/
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
++			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
++			penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
++			penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
++			break;
+ 		case P2xP4Enum:
+ 			numnodes         = 30;
+ 			penta_node_ids   = xNew<int>(numnodes);
+@@ -2839,9 +2858,9 @@
+ 			penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+2; /* 1/4 vertical edge 1*/
+ 			penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+2; /* 1/4 vertical edge 2*/
+ 			penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+2; /* 1/4 vertical edge 3*/
+-			penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 2/4 vertical edge 1*/
+-			penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 2/4 vertical edge 2*/
+-			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 2/4 vertical edge 3*/
++			penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+0]+3; /* 3/4 vertical edge 1*/
++			penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+1]+3; /* 3/4 vertical edge 2*/
++			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->elementtoedgeconnectivity[9*index+2]+3; /* 3/4 vertical edge 3*/
+ 			penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+2]+1; /* 1/4 vertical face 1*/
+ 			penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+3]+1; /* 1/4 vertical face 2*/
+ 			penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+3*iomodel->numberofedges+3*iomodel->elementtofaceconnectivity[5*index+4]+1; /* 1/4 vertical face 3*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22077-22078.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22077-22078.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22077-22078.diff	(revision 22755)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 22077)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 22078)
+@@ -1016,6 +1016,7 @@
+ 			dbasis[NUMNODESP1xP4*0+5 ] = 0. ; 
+ 			dbasis[NUMNODESP1xP4*1+5 ] = SQRT3/3.*(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. ); 
+ 			dbasis[NUMNODESP1xP4*2+5 ] = gauss->coord3 * 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1)); 
++
+ 			/*Nodal function 7*/
+ 			dbasis[NUMNODESP1xP4*0+6 ] = -0.5 * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ; 
+ 			dbasis[NUMNODESP1xP4*1+6 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1.)  ; 
+@@ -1024,7 +1025,6 @@
+ 			dbasis[NUMNODESP1xP4*0+7 ] = +0.5* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ; 
+ 			dbasis[NUMNODESP1xP4*1+7 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. )  ; 
+ 			dbasis[NUMNODESP1xP4*2+7 ] = gauss->coord2* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta ); 
+-
+ 			/*Nodal function 9*/
+ 			dbasis[NUMNODESP1xP4*0+8 ] = 0. ; 
+ 			dbasis[NUMNODESP1xP4*1+8 ] = SQRT3/3. * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. )  ; 
+@@ -1032,7 +1032,7 @@
+ 
+ 			/*Nodal function 10*/
+ 			dbasis[NUMNODESP1xP4*0+9 ] = -0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
+-			dbasis[NUMNODESP1xP4*1+9 ] = -SQRT3/3.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+9 ] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
+ 			dbasis[NUMNODESP1xP4*2+9 ] = gauss->coord1* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta*(zeta -1.)*( 2.*zeta + 0.5)); 
+ 			/*Nodal function 11*/
+ 			dbasis[NUMNODESP1xP4*0+10] = +0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
+@@ -1040,7 +1040,7 @@
+ 			dbasis[NUMNODESP1xP4*2+10] = gauss->coord2* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5)); 
+ 			/*Nodal function 12*/
+ 			dbasis[NUMNODESP1xP4*0+11] = 0. ; 
+-			dbasis[NUMNODESP1xP4*1+11] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+11] = SQRT3/3.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ; 
+ 			dbasis[NUMNODESP1xP4*2+11] = gauss->coord3* (-8./3.)*((2.*zeta-1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5));
+ 			/*Nodal function 13*/
+ 			dbasis[NUMNODESP1xP4*0+12] = -0.5* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ; 
+@@ -1052,7 +1052,7 @@
+ 			dbasis[NUMNODESP1xP4*2+13] = gauss->coord2* (-8./3.)*((2.*zeta -1. )*(zeta+0.5)*(zeta +1.) +  zeta*(zeta -1.)*( 2.*zeta + 3./2.)); 
+ 			/*Nodal function 15*/
+ 			dbasis[NUMNODESP1xP4*0+14] = 0 ; 
+-			dbasis[NUMNODESP1xP4*1+14] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta + 0.5)*(zeta)*(zeta +1. ) ; 
++			dbasis[NUMNODESP1xP4*1+14] = SQRT3/3.* (-8./3.)*(zeta - 1.)*(zeta + 0.5)*(zeta)*(zeta +1. ) ; 
+ 			dbasis[NUMNODESP1xP4*2+14] = gauss->coord3* (-8./3.)*((2. *zeta -1. )*(zeta+0.5)*(zeta +1.) +  zeta*(zeta -1.)*( 2.*zeta + 3./2.));
+ 
+ 			return;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22078-22079.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22078-22079.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22078-22079.diff	(revision 22755)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22078)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22079)
+@@ -35,7 +35,7 @@
+ %Fields and tolerances to track changes
+ %loading love numbers
+ field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
+-field_tolerances={1e-13,1e-13,1e-13};
++field_tolerances={1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -53,7 +53,7 @@
+ %Fields and tolerances to track changes
+ %loading love numbers
+ field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,:)),...
+ 	(md.results.LoveSolution.LoveKr(:,:)),...
+@@ -65,12 +65,12 @@
+ 
+ md.love.forcing_type=9;
+ md.love.sh_nmin=2
+-md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 -1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+ md.love.nfreq=length(md.love.frequencies);
+ md=solve(md,'lv');
+ %tidal love numbers
+ field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -112,7 +112,7 @@
+ %md=solve(md,'lv');
+ %
+ %field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-%field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++%field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ %field_values={field_values{:},...
+ %	(md.results.LoveSolution.LoveHr(:,1)),...
+ %	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -146,7 +146,7 @@
+ 
+ 
+ field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-field_tolerances={field_tolerances{:},1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22079-22080.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22079-22080.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22079-22080.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 22079)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 22080)
+@@ -21,6 +21,7 @@
+ %   - Hessiantype :       0 -> use double L2 projection (default)
+ %                         1 -> use Green formula
+ %   - KeepVertices :      try to keep initial vertices when adaptation is done on an existing mesh (default 1)
++%   - NoBoundaryRefinment: do not refine boundary, only follow contour provided (default 0)
+ %   - maxnbv :            maximum number of vertices used to allocate memory (default is 10^6)
+ %   - maxsubdiv :         maximum subdivision of exisiting elements (default is 10)
+ %   - metric :            matrix (numberofnodes x 3) used as a metric
+@@ -287,6 +288,11 @@
+ 
+ 	end
+ 
++	%Deal with RequiredEdges
++	if getfieldvalue(options,'NoBoundaryRefinment',0)==1,
++		bamg_geometry.RequiredEdges=[1:size(bamg_geometry.Edges,1)]';
++	end
++
+ 	%process geom
+ 	%bamg_geometry=processgeometry(bamg_geometry,getfieldvalue(options,'tol',NaN),domain(1));
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22080-22081.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22080-22081.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22080-22081.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22080)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22081)
+@@ -65,7 +65,7 @@
+ 
+ md.love.forcing_type=9;
+ md.love.sh_nmin=2
+-md.love.frequencies=([0 1e-4 1e-3 1e-2 1e-1 1 1e-4 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
++md.love.frequencies=([0 1e-3 1e-2 1e-1 1 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+ md.love.nfreq=length(md.love.frequencies);
+ md=solve(md,'lv');
+ %tidal love numbers
+@@ -141,7 +141,7 @@
+ md.love.sh_nmin=1;
+ md.love.sh_nmax=100;
+ md=solve(md,'lv');
+-md.love.frequencies=([0 1e-4 1e-2 1 -1e-4 -1e-2 -1]*2*pi)'/cst;
++md.love.frequencies=([0 1e-3 1e-2 1 -1e-3 -1e-2 -1]*2*pi)'/cst;
+ md.love.nfreq=length(md.love.frequencies);
+ 
+ 
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22096-22097.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22096-22097.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22096-22097.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22096)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22097)
+@@ -223,7 +223,7 @@
+   !write(*,*)
+   !write(101,fmt='(A19, 10X,A2,I3,A1,I3)',ADVANCE='NO'), repeat(char(8),19),'l=',deg,'/',degmax
+   if (display) then
+-  write(*,fmt='(A23, 10X,A2,I5,A1,I5)',ADVANCE='NO'), repeat(char(8),23),'l=',deg,'/',degmax
++  write(*,fmt='(A10,A2,I5,A1,I5)',ADVANCE='NO'),repeat(char(32),10),'l=',deg,'/',degmax
+   endif
+ 
+   !write(*,*)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22097-22098.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22097-22098.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22097-22098.diff	(revision 22755)
@@ -0,0 +1,1519 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 22097)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 22098)
+@@ -96,6 +96,7 @@
+ 				${ISSM_DIR}/src/m/classes/friction.js \
+ 				${ISSM_DIR}/src/m/classes/geometry.js \
+ 				${ISSM_DIR}/src/m/classes/giaivins.js \
++				${ISSM_DIR}/src/m/classes/fourierlove.js \
+ 				${ISSM_DIR}/src/m/classes/esa.js \
+ 				${ISSM_DIR}/src/m/classes/groundingline.js \
+ 				${ISSM_DIR}/src/m/classes/hydrologyshreve.js \
+@@ -106,6 +107,7 @@
+ 				${ISSM_DIR}/src/m/classes/masstransport.js \
+ 				${ISSM_DIR}/src/m/classes/matice.js \
+ 				${ISSM_DIR}/src/m/classes/mesh2d.js \
++				${ISSM_DIR}/src/m/classes/mesh3dprisms.js \
+ 				${ISSM_DIR}/src/m/classes/mesh3dsurface.js \
+ 				${ISSM_DIR}/src/m/classes/miscellaneous.js \
+ 				${ISSM_DIR}/src/m/classes/model.js \
+@@ -130,13 +132,10 @@
+ 				${ISSM_DIR}/src/m/classes/verbose.js \
+ 				${ISSM_DIR}/src/m/consistency/checkfield.js \
+ 				${ISSM_DIR}/src/m/consistency/ismodelselfconsistent.js \
++				${ISSM_DIR}/src/m/extrusion/*.js \
+ 				${ISSM_DIR}/src/m/geometry/FlagElements.js \
+ 				${ISSM_DIR}/src/m/inversions/marshallcostfunctions.js \
+-				${ISSM_DIR}/src/m/io/fileptr.js \
+-				${ISSM_DIR}/src/m/io/savemodel.js \
+-				${ISSM_DIR}/src/m/io/loadmodel.js \
+-				${ISSM_DIR}/src/m/io/writetofile.js \
+-				${ISSM_DIR}/src/m/io/writetofile.js \
++				${ISSM_DIR}/src/m/io/*.js \
+ 				${ISSM_DIR}/src/m/materials/paterson.js \
+ 				${ISSM_DIR}/src/m/mesh/triangle.js \
+ 				${ISSM_DIR}/src/m/miscellaneous/colorbars.js \
+@@ -144,20 +143,7 @@
+ 				${ISSM_DIR}/src/m/miscellaneous/rgbcolor.js \
+ 				${ISSM_DIR}/src/m/parameterization/setflowequation.js \
+ 				${ISSM_DIR}/src/m/parameterization/setmask.js \
+-				${ISSM_DIR}/src/m/plot/slider.js \
+-				${ISSM_DIR}/src/m/plot/applyoptions.js \
+-				${ISSM_DIR}/src/m/plot/checkplotoptions.js \
+-				${ISSM_DIR}/src/m/plot/plot_manager.js \
+-				${ISSM_DIR}/src/m/plot/plot_mesh.js \
+-				${ISSM_DIR}/src/m/plot/plot_overlay.js \
+-				${ISSM_DIR}/src/m/plot/plot_unit.js \
+-				${ISSM_DIR}/src/m/plot/plot_quiver.js \
+-				${ISSM_DIR}/src/m/plot/plotdoc.js \
+-				${ISSM_DIR}/src/m/plot/plotmodel.js \
+-				${ISSM_DIR}/src/m/plot/processdata.js \
+-				${ISSM_DIR}/src/m/plot/processmesh.js \
+-				${ISSM_DIR}/src/m/plot/gauge.js \
+-				${ISSM_DIR}/src/m/plot/webgl.js \
++				${ISSM_DIR}/src/m/plot/*.js \
+ 				${ISSM_DIR}/src/m/print/sprintf.js \
+ 				${ISSM_DIR}/src/m/solve/loadresultsfrombuffer.js \
+ 				${ISSM_DIR}/src/m/solve/marshall.js \
+Index: ../trunk-jpl/src/m/array/arrayoperations.js
+===================================================================
+--- ../trunk-jpl/src/m/array/arrayoperations.js	(revision 22097)
++++ ../trunk-jpl/src/m/array/arrayoperations.js	(revision 22098)
+@@ -93,6 +93,29 @@
+ 	return or;
+ 
+ } //}}}
++function ArrayTranspose(array) { //{{{
++	return Object.keys(array[0]).map(function(column) {
++		return array.map(function(row) { 
++			return row[column]; 
++		});
++	});
++} //}}}
++function ArrayConcat(a, b) { //{{{
++	// Make sure that both typed arrays are of the same type
++	if(Object.prototype.toString.call(a) !== Object.prototype.toString.call(b)) {
++		throw 'The types of the two arguments passed for parameters a and b do not match.';
++	}
++	var c;
++	if(a instanceof Float64Array) {
++		c = new a.constructor(a.length + b.length);
++		c.set(a);
++		c.set(b, a.length);
++	}
++	else {
++		c = clone(a).concat(clone(b));
++	}	
++	return c;
++} //}}}
+ function ListToMatrix(list, elementsPerSubArray) { //{{{
+ 	var matrix = [], i, k;
+ 
+@@ -180,13 +203,13 @@
+     if(IsArray(array[0])){
+         for(var i=0;i<array.length;i++){
+             for(var j=0;j<array[0].length;j++){
+-                if (isNaN(array[i][j])) return 1;
++                if (Number.isNaN(array[i][j])) return 1;
+             }
+         }
+     }
+     else{
+         for(var i=0;i<array.length;i++){
+-            if (isNaN(array[i])) return 1;
++            if (Number.isNaN(array[i])) return 1;
+         }
+     }
+     return 0;
+@@ -206,7 +229,7 @@
+ } //}}}
+ function ArrayAnyEqual(array,value) { //{{{
+ 	
+-	if(!isNaN(value)){
++	if(!Number.isNaN(value)){
+ 		for(var i=0;i<array.length;i++){
+ 			if (array[i]==value)return 1;
+ 		}
+@@ -213,7 +236,7 @@
+ 	}
+ 	else{
+ 		for(var i=0;i<array.length;i++){
+-			if (isNaN(array[i]))return 1;
++			if (Number.isNaN(array[i]))return 1;
+ 		}
+ 	}
+ 	return 0;
+@@ -266,7 +289,6 @@
+ 	return array;
+ } //}}}
+ function NewArrayFill(size,value) { //{{{
+-	
+ 	var array = new Array(size);
+ 	
+ 	for (var i = 0; i < size; i++) {
+@@ -275,8 +297,16 @@
+ 	
+ 	return array;
+ } //}}}
++function NewArrayFill2D(rows,cols,value) { //{{{
++	var arr=new Array(rows); 
++
++	for (var i=0;i<rows;i++) {
++		arr[i] = NewArrayFill(cols,value);
++	}
++
++	return arr;
++} //}}}
+ function NewArrayFillIncrement(size,start,increment) { //{{{
+-
+ 	var array=new Array(size); 
+ 
+ 	for(var i=0;i<size;i++){
+@@ -286,19 +316,26 @@
+ 	return array;
+ } //}}}
+ function ArrayFind(array,value) { //{{{
+-	
+-	//find number of indices
+ 	var count=0;
+-	for (var i=0;i<array.length;i++)if(array[i]==value)count++;
++	var indices=[];
+ 
+-	//allocate:
+-	var indices= NewArrayFill(count,0);
++	for (var i=0;i<array.length;i++){
++		if(array[i]===value){
++			indices.push(count);
++		}
++		count++;
++	}
++	return indices;
++} //}}}
++function ArrayFind2D(array,value) { //{{{
++	var count=0;
++	var indices=[];
+ 
+-	//fill in:
+-	count=0;
+ 	for (var i=0;i<array.length;i++){
+-		if(array[i]==value){
+-			indices[count]=i;
++		for (var j=0;j<array[i].length;j++){
++			if(array[i][j]===value){
++				indices.push(count);
++			}
+ 			count++;
+ 		}
+ 	}
+@@ -305,19 +342,26 @@
+ 	return indices;
+ } //}}}
+ function ArrayFindNot(array,value) { //{{{
+-	
+-	//find number of indices
+ 	var count=0;
+-	for (var i=0;i<array.length;i++)if(array[i]!=value)count++;
++	var indices=[];
+ 
+-	//allocate:
+-	var indices= NewArrayFill(count,0);
++	for (var i=0;i<array.length;i++){
++		if(array[i]!==value){
++			indices.push(count);
++		}
++		count++;
++	}
++	return indices;
++} //}}}
++function ArrayFindNot2D(array,value) { //{{{
++	var count=0;
++	var indices=[];
+ 
+-	//fill in:
+-	count=0;
+ 	for (var i=0;i<array.length;i++){
+-		if(array[i]!=value){
+-			indices[count]=i;
++		for (var j=0;j<array[i].length;j++){
++			if(array[i][j]!==value){
++				indices.push(count);
++			}
+ 			count++;
+ 		}
+ 	}
+@@ -324,7 +368,7 @@
+ 	return indices;
+ } //}}}
+ function Create2DArray(rows,cols) { //{{{
+-	var arr = [];
++	var arr=new Array(rows); 
+ 
+ 	for (var i=0;i<rows;i++) {
+ 		arr[i] = new Array(cols);
+Index: ../trunk-jpl/src/m/classes/thermal.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.js	(revision 22097)
++++ ../trunk-jpl/src/m/classes/thermal.js	(revision 22098)
+@@ -54,11 +54,28 @@
+     this.extrude = function(md) {//{{{
+         this.spctemperature=project3d(md,'vector',this.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+         if (md.initialization.temperature.length===md.mesh.numberofvertices) {
+-            this.spctemperature = ArrayFill2D(Create2DArray(md.mesh.numberofvertices, 1), NaN);
+-            var pos=ArrayFindNot2D(md.mesh.vertexonsurface, 0);
+-            pos.forEach(function(x) { // impose observed temperature on surface
+-                this.spctemperature[x] = md.initialization.temperature[x];
+-            });
++            this.spctemperature = NewArrayFill(md.mesh.numberofvertices, NaN);
++            var pos=ArrayFindNot(md.mesh.vertexonsurface, 0);
++			// impose observed temperature on surface
++			for (var i=0,posIndex=0,count=0;i<md.initialization.temperature.length;i++){
++				if(count===pos[posIndex]){
++					this.spctemperature[i] = md.initialization.temperature[i][0];
++					posIndex++;
++				}
++				count++;
++			}
++//            this.spctemperature = NewArrayFill2D(md.mesh.numberofvertices, 1, NaN);
++//            var pos=ArrayFindNot2D(md.mesh.vertexonsurface, 0);
++//			// impose observed temperature on surface
++//			for (var i=0,posIndex=0,count=0;i<md.initialization.temperature.length;i++){
++//				for (var j=0;j<md.initialization.temperature[i].length;j++){
++//					if(count===pos[posIndex]){
++//						this.spctemperature[i][j] = md.initialization.temperature[i][j];
++//						posIndex++;
++//					}
++//					count++;
++//				}
++//			}
+         }
+ 
+         return this;
+Index: ../trunk-jpl/src/m/classes/fourierlove.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.js	(nonexistent)
++++ ../trunk-jpl/src/m/classes/fourierlove.js	(revision 22098)
+@@ -0,0 +1,79 @@
++//FOURIERLOVE class definition
++//
++//   Usage:
++//      md.love=fourierlove();
++
++function fourierlove (){
++	//methods
++	this.extrude = function(md) { // {{{
++		return this;
++	} // }}}
++	this.setdefaultparameters = function() { // {{{
++		//we setup an elastic love number computation by default.
++		this.nfreq=1; 
++		this.frequencies=[0]; //Hz
++		this.sh_nmax=256; // .35 degree, 40 km at the equator.
++		this.sh_nmin=1; 
++		this.g0=10; // m/s^2; 
++		this.r0=6378*1e3; //m;
++		this.mu0=10**11; // Pa
++		this.allow_layer_deletion=1; 
++		this.forcing_type = 11; 
++	} // }}}
++	this.disp = function() { // {{{
++		fielddisplay(this,'nfreq','number of frequencies sampled (default 1, elastic) [Hz]');
++		fielddisplay(this,'frequencies','frequencies sampled (convention defaults to 0 for the elastic case) [Hz]');
++		fielddisplay(this,'sh_nmax','maximum spherical harmonic degree (default 256, .35 deg, or 40 km at equator)');
++		fielddisplay(this,'sh_nmin','minimum spherical harmonic degree (default 1)');
++		fielddisplay(this,'g0','adimensioning constant for gravity (default 10) [m/s^2]');
++		fielddisplay(this,'r0','adimensioning constant for radius (default 6378*10^3) [m]');
++		fielddisplay(this,'mu0','adimensioning constant for stress (default 10^11) [Pa]');
++		fielddisplay(this,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)');
++		fielddisplay(this,'forcing_type',['integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :','1:  Inner core boundary -- Volumic Potential','2:  Inner core boundary -- Pressure','3:  Inner core boundary -- Loading','4:  Inner core boundary -- Tangential traction','5:  Core mantle boundary -- Volumic Potential','6:  Core mantle boundary -- Pressure','7:  Core mantle boundary -- Loading','8:  Core mantle boundary -- Tangential traction','9:  Surface -- Volumic Potential','10: Surface -- Pressure','11: Surface -- Loading','12: Surface -- Tangential traction ']); 
++
++	} // }}}
++	this.checkconsistency = function(md,solution,analyses) { // {{{
++
++		md = checkfield(md,'fieldname','love.nfreq','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.frequencies','NaN',1,'Inf',1,'numel',md.love.nfreq);
++		md = checkfield(md,'fieldname','love.sh_nmax','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.sh_nmin','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.g0','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',1,'>',0);
++		md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0, 1]);
++		md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',1,'>',0, '<=', 12);
++		if (md.love.sh_nmin<=1 && md.love.forcing_type==9) {
++			throw 'Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.';
++		}
++	} // }}}
++	this.marshall = function(md,prefix,fid) { // {{{
++	
++		WriteData(fid,prefix,'object',this,'fieldname','nfreq','format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','frequencies','format','DoubleMat','mattype',3);
++		WriteData(fid,prefix,'object',this,'fieldname','sh_nmax','format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','sh_nmin','format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','g0','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','r0','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','mu0','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','allow_layer_deletion','format','Boolean');
++		WriteData(fid,prefix,'object',this,'fieldname','forcing_type','format','Integer');
++
++	} // }}}
++	//properties 
++	// {{{
++		
++	this.nfreq                =  NaN;
++	this.frequencies          =  NaN;
++	this.sh_nmax              =  NaN;
++	this.sh_nmin              =  NaN;
++	this.g0                   =  NaN; 
++	this.r0                   =  NaN; 
++	this.mu0                  =  NaN;
++	this.allow_layer_deletion =  NaN;
++	this.forcing_type         =  NaN;
++	
++	//set defaults
++	this.setdefaultparameters();
++	// }}}
++}
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22097)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22098)
+@@ -33,10 +33,11 @@
+ 			console.log(sprintf("//19s: //-22s -- //s","masstransport"   ,"[1x1 " + typeof(this.masstransport) + "]","parameters for masstransport solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","thermal"         ,"[1x1 " + typeof(this.thermal) + "]","parameters for thermal solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","steadystate"     ,"[1x1 " + typeof(this.steadystate) + "]","parameters for steadystate solution"));
+-			console.log(sprintf("//19s: //-22s -- //s","trans"       ,"[1x1 " + typeof(this.trans) + "]","parameters for trans solution"));
++			console.log(sprintf("//19s: //-22s -- //s","trans"           ,"[1x1 " + typeof(this.trans) + "]","parameters for trans solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","levelset"        ,"[1x1 " + typeof(this.levelset) + "]","parameters for moving boundaries (level-set method)"));
+ 			console.log(sprintf("//19s: //-22s -- //s","calving"         ,"[1x1 " + typeof(this.calving) + "]","parameters for calving"));
+ 			console.log(sprintf("//19s: //-22s -- //s","gia"             ,"[1x1 " + typeof(this.gia) + "]","parameters for gia solution"));
++			console.log(sprintf("//19s: //-22s -- //s","love"            ,"[1x1 " + typeof(this.love) + "]","parameters for love solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","esa"             ,"[1x1 " + typeof(this.esa) + "]","parameters for elastic adjustment solution"));
+ 			console.log(sprintf("//19s: //-22s -- //s","autodiff"        ,"[1x1 " + typeof(this.autodiff) + "]","automatic differentiation parameters"));
+ 			console.log(sprintf("//19s: //-22s -- //s","inversion"       ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods"));
+@@ -54,24 +55,26 @@
+ 			this.mask             = new mask();
+ 			this.constants        = new constants();
+ 			this.geometry         = new geometry();
+-			this.initialization   = new initialization();
+ 			this.smb              = new SMBforcing();
+ 			this.basalforcings    = new basalforcings();
++			this.materials        = new matice();
++			this.damage           = new damage();
+ 			this.friction         = new friction();
++			this.flowequation     = new flowequation();
++			this.timestepping     = new timestepping();
++			this.initialization   = new initialization();
+ 			this.rifts            = new rifts();
+ 			this.slr              = new slr();
+-			this.timestepping     = new timestepping();
+-			this.groundingline    = new groundingline();
+-			this.materials        = new matice();
+-			this.damage           = new damage();
+-			this.flowequation     = new flowequation();
++
+ 			this.debug            = new debug();
+ 			this.verbose          = new verbose();
+ 			this.settings         = new settings();
+ 			this.toolkits         = new toolkits();
+ 			this.cluster          = new local();
++
+ 			this.balancethickness = new balancethickness();
+ 			this.stressbalance    = new stressbalance();
++			this.groundingline    = new groundingline();
+ 			this.hydrology        = new hydrologyshreve();
+ 			this.masstransport    = new masstransport();
+ 			this.thermal          = new thermal();
+@@ -79,15 +82,18 @@
+ 			this.trans            = new trans();
+ 			this.levelset         = new levelset();
+ 			this.calving          = new calving();
++			this.love             = new fourierlove();
+ 			this.gia              = new giaivins();
++
+ 			this.esa              = new esa();
+ 			this.autodiff         = new autodiff();
+ 			this.inversion        = new inversion();
+ 			this.qmu              = new qmu();
+ 			this.amr              = new amr();
+-			this.radaroverlay     = new radaroverlay();
++
+ 			this.results          = {};
+ 			this.outputdefinition = new outputdefinition();
++			this.radaroverlay     = new radaroverlay();
+ 			this.miscellaneous    = new miscellaneous();
+ 			this.priv             = new priv();
+ 		} //}}}
+@@ -112,469 +118,437 @@
+ 			}
+ 
+ 		} //}}}
+-        this.extrude = function(md) { //{{{
+-        //EXTRUDE - vertically extrude a 2d mesh
+-        //
+-        //   vertically extrude a 2d mesh and create corresponding 3d mesh.
+-        //   The vertical distribution can:
+-        //    - follow a polynomial law
+-        //    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
+-        //    - be discribed by a list of coefficients (between 0 and 1)
+-        //   
+-        //
+-        //   Usage:
+-        //      md=extrude(md,numlayers,extrusionexponent);
+-        //      md=extrude(md,numlayers,lowerexponent,upperexponent);
+-        //      md=extrude(md,listofcoefficients);
+-        //
+-        //   Example:
+-        //      md=extrude(md,15,1.3);
+-        //      md=extrude(md,15,1.3,1.2);
+-        //      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
+-        //
+-        //   See also: MODELEXTRACT, COLLAPSE
++		this.extrude = function(md) { //{{{
++			//EXTRUDE - vertically extrude a 2d mesh
++			//
++			//   vertically extrude a 2d mesh and create corresponding 3d mesh.
++			//   The vertical distribution can:
++			//    - follow a polynomial law
++			//    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
++			//    - be described by a list of coefficients (between 0 and 1)
++			//   
++			//
++			//   Usage:
++			//      md=extrude(md,numlayers,extrusionexponent);
++			//      md=extrude(md,numlayers,lowerexponent,upperexponent);
++			//      md=extrude(md,listofcoefficients);
++			//
++			//   Example:
++			//      md=extrude(md,15,1.3);
++			//      md=extrude(md,15,1.3,1.2);
++			//      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
++			//
++			//   See also: MODELEXTRACT, COLLAPSE
+ 
+-        //some checks on list of arguments
+-            var argc = arguments.length;
++			//some checks on list of arguments
++			var argc = arguments.length;
++			var extrusionlist;
++			var numlayers;
++			
++			if ((argc > 4) | (argc < 2)) {
++				throw "extrude error message";
++			}
+ 
+-            if ((argc > 4) | (argc < 2)) {
+-                throw "extrude error message";
+-            }
++			//Extrude the mesh
++			if (argc==2) { //list of coefficients
++				clist=arguments[0];
++				if (ArrayAnyBelowStrict(clist,0) || ArrayAnyAboveStrict(clist,1)) {
++					throw 'extrusioncoefficients must be between 0 and 1';
++				}
++				extrusionlist=ArraySort(ArrayUnique(clist.push(0,1)));
++				numlayers=extrusionlist.length;
++			} else if (argc==3) { //one polynomial law
++				if (arguments[1]<=0) {
++					throw 'extrusionexponent must be >=0';
++				}
++				numlayers=arguments[1];
++				extrusionlist = [];
++				for (var i = 0; i < numlayers; i++) {
++					extrusionlist.push(Math.pow(i/(numlayers-1), arguments[2]));
++				}
++			} else if (argc==4) { //two polynomial laws
++				numlayers=arguments[1];
++				var lowerexp=arguments[2];
++				var upperexp=arguments[3];
+ 
+-            //Extrude the mesh
+-            if (argc==2) { //list of coefficients
+-                clist=arguments[0];
++				if (arguments[2]<=0 || arguments[3]<=0) {
++					throw 'lower and upper extrusionexponents must be >=0';
++				}
+ 
+-                if (clist.some(function(x) { return x < 0; }) | clist.some(function(x) { return x > 1; }))
+-                    throw 'extrusioncoefficients must be between 0 and 1';
+-                clistcopy.push.apply(clistcopy, [0, 1]);
++				var lowerextrusionlist = [];
++				for (var i = 0; i <= 1; i += (2/(numlayers-1))) {
++					lowerextrusionlist.push(Math.pow(i, lowerexp)/2)
++				}
++				var upperextrusionlist = [];
++				for (var i = 0; i <= 1; i += (2/(numlayers-1))) {
++					upperextrusionlist.push(1-Math.pow(i, upperexp)/2)
++				}
++				extrusionlist=ArrayConcat(lowerextrusionlist,upperextrusionlist);
++				extrusionlist=ArraySort(ArrayUnique(extrusionlist.push(1)));
++			}
+ 
+-                extrusionlist=clistcopy.reverse().filter(function(e, i, arr) { //only keep unique elements
+-                    return arr.indexOf(e, i+1) === -1;
+-                }).sort();
++			if (numlayers<2) {
++				console.error('number of layers should be at least 2');
++			}
++			if (md.mesh.domaintype() === '3D') {
++				console.error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
++			}
+ 
+-                numlayers=extrusionlist.length;
+-            } else if (argc==3) { //one polynomial law
+-                if (arguments[1]<=0) {
+-                    //help extrude;
+-                    throw 'extrusionexponent must be >=0';
+-                }
+-                numlayers=arguments[0];
++			//Initialize with the 2d mesh
++			var mesh2d = md.mesh;
++			md.mesh=new mesh3dprisms();
++			md.mesh.x                           = mesh2d.x;
++			md.mesh.y                           = mesh2d.y;
++			md.mesh.elements                    = mesh2d.elements;
++			md.mesh.numberofelements            = mesh2d.numberofelements;
++			md.mesh.numberofvertices            = mesh2d.numberofvertices;
+ 
+-                extrusionlist = [];
++			md.mesh.lat                         = mesh2d.lat;
++			md.mesh.long                        = mesh2d.long;
++			md.mesh.epsg                        = mesh2d.epsg;
+ 
+-                for (var i = 0; i < numlayers; i++) {
+-                    extrusionlist.push(Math.pow(i/(numlayers-1), arguments[1]));
+-                };
++			md.mesh.vertexonboundary            = mesh2d.vertexonboundary;
++			md.mesh.vertexconnectivity          = mesh2d.vertexconnectivity;
++			md.mesh.elementconnectivity         = mesh2d.elementconnectivity;
++			md.mesh.average_vertex_connectivity = mesh2d.average_vertex_connectivity;
+ 
+-            } else if (argc==4) { //two polynomial laws
+-                numlayers=arguments[0];
+-                lowerexp=arguments[1];
+-                upperexp=arguments[2];
++			md.mesh.extractedvertices           = mesh2d.extractedvertices;
++			md.mesh.extractedelements           = mesh2d.extractedelements;
+ 
+-                if (arguments[1]<=0 | args[2]<=0) {
+-                    throw 'lower and upper extrusionexponents must be >=0';
+-                }
++			var x3d=new Float64Array(); 
++			var y3d=new Float64Array();
++			var z3d=new Float64Array();  //the lower node is on the bed
++			var thickness3d=md.geometry.thickness; //thickness and bed for these nodes
++			var bed3d=md.geometry.base;
+ 
+-                lowerextrusionlist = [];
+-                for (var i = 0; i <= 1; i += (2/(numlayers-1))) {
+-                    lowerextrusionlist.push(Math.pow(i, lowerexp)/2)
+-                };
++			//Create the new layers
++			//Dimensions of x/y/z3d: md.mesh.numberofvertices * numlayers, 1
++			for (var i = 1; i <= numlayers; i++) {
++				x3d=ArrayConcat(x3d, md.mesh.x); 
++				y3d=ArrayConcat(y3d, md.mesh.y); 
++				//nodes are distributed between bed and surface accordingly to the given exponent
++				z3d=ArrayConcat(z3d, FloatFix(thickness3d.map(function(value,index) { return bed3d[index] + value * extrusionlist[i-1]; }), thickness3d.length)); 
++			}
++			var number_nodes3d=x3d.length; //number of 3d nodes for the non extruded part of the mesh
+ 
+-                upperextrusionlist = [];
+-                for (var i = 0; i <= 1; i += (2/(numlayers-1))) {
+-                    upperextrusionlist.push(Math.pow(i, upperexp)/2)
+-                };
++			//Extrude elements 
++			//Create the elements of the 3d mesh for the non extruded part
++			//Dimensions of elements3d: md.mesh.numberofelements * (numlayers - 1), 6
++			var elements3d=[];
++			var elements_prisms=[];
++			for (var i = 1; i < numlayers; i++) {
++				for (var j = 0; j < md.mesh.numberofelements; j++) {
++					elements_prisms = [];
++					for (var k = 0, offset = (i - 1) * md.mesh.numberofvertices; k < 3; k++) {
++						elements_prisms.push(md.mesh.elements[j][k]+offset);
++					}
++					for (var k = 0, offset = i * md.mesh.numberofvertices; k < 3; k++) {
++						elements_prisms.push(md.mesh.elements[j][k]+offset);
++					}
++					elements3d.push(elements_prisms);
++				}				
++			}
++			number_el3d=elements3d.length; //number of 3d nodes for the non extruded part of the mesh
+ 
+-                //lowerextrusionlist=[(0:2/(numlayers-1):1).^lowerexp]/2;
+-                //upperextrusionlist=[(0:2/(numlayers-1):1).^upperexp]/2;
++			//Keep a trace of lower and upper nodes
++			var lowervertex = NewArrayFill(number_nodes3d, NaN);
++			var uppervertex = NewArrayFill(number_nodes3d, NaN);
++			//Set first layer to NaN and start count from 1 at next layer (i = md.mesh.numberofvertices+1)
++			for (var i = md.mesh.numberofvertices, k = 1; i < lowervertex.length; i++, k++) {
++				lowervertex[i] = k;
++			};
++			//Set last layer to NaN and start count from md.mesh.numberofvertices+1 at first layer (i = 1)
++			for (var i = 0, k = md.mesh.numberofvertices+1; i < (numlayers-1)*md.mesh.numberofvertices; i++, k++) {
++				uppervertex[i] = k;
++			};
++			md.mesh.lowervertex=lowervertex;
++			md.mesh.uppervertex=uppervertex;
+ 
+-                var temp = lowerextrusionlist;
+-                temp.push.apply(temp, [1]);
++			//same for lower and upper elements
++			var lowerelements = NewArrayFill(number_el3d, NaN);
++			var upperelements = NewArrayFill(number_el3d, NaN);
++			//Set first layer to NaN and start count from 1 at next layer (i = md.mesh.numberofelements+1)
++			for (var i = md.mesh.numberofelements, k = 1; i < lowerelements.length; i++, k++) {
++				lowerelements[i] = k;
++			};
++			//Set last 2 layers to NaN and start count from md.mesh.numberofvertices+1 at first layer (i = 1)
++			for (var i = 0, k = md.mesh.numberofelements + 1; i < (numlayers-2)*md.mesh.numberofelements; i++, k++) {
++				upperelements[i] = k;
++			};
++			md.mesh.lowerelements=lowerelements;
++			md.mesh.upperelements=upperelements;
+ 
+-                var temp2 = upperextrusionlist.map(function(x) { return -x; });
+-                temp.push.apply(temp, temp2);
++			//Save old mesh 
++			md.mesh.x2d=md.mesh.x;
++			md.mesh.y2d=md.mesh.y;
++			md.mesh.elements2d=md.mesh.elements;
++			md.mesh.numberofelements2d=md.mesh.numberofelements;
++			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
+ 
+-                clistcopy.push.apply(clistcopy, [0, 1]);
+-                //extrusionlist=sort(unique([lowerextrusionlist 1-upperextrusionlist]));
+-                extrusionlist=temp.sort();
+-            }
++			//Build global 3d mesh 
++			md.mesh.elements=elements3d;
++			md.mesh.x=x3d;
++			md.mesh.y=y3d;
++			md.mesh.z=z3d;
++			md.mesh.numberofelements=number_el3d;
++			md.mesh.numberofvertices=number_nodes3d;
++			md.mesh.numberoflayers=numlayers;
+ 
+-            if (numlayers<2) {
+-                console.error('number of layers should be at least 2');
+-            }
++			//Ok, now deal with the other fields from the 2d mesh:
+ 
+-            if (md.mesh.domaintype() === '3D') {
+-                console.error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
+-            }
++			//bedinfo and surface info
++			md.mesh.vertexonbase=project3d(md,'vector',NewArrayFill(md.mesh.numberofvertices2d,1),'type','node','layer',1);
++			md.mesh.vertexonsurface=project3d(md,'vector',NewArrayFill(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
++			md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
+ 
+-            //Initialize with the 2d mesh
+-            var mesh2d = md.mesh;
+-            md.mesh=new mesh3dprisms();
++			//lat long
++			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
++			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
+ 
+-            md.mesh.x                           = mesh2d.x;
+-            md.mesh.y                           = mesh2d.y;
+-            md.mesh.elements                    = mesh2d.elements;
+-            md.mesh.numberofelements            = mesh2d.numberofelements;
+-            md.mesh.numberofvertices            = mesh2d.numberofvertices;
++			md.geometry=md.geometry.extrude(md);
++			md.friction=md.friction.extrude(md);
++			md.inversion=md.inversion.extrude(md);
++			md.smb=md.smb.extrude(md);
++			md.initialization=md.initialization.extrude(md);
+ 
+-            md.mesh.lat                         = mesh2d.lat;
+-            md.mesh.long                        = mesh2d.long;
+-            md.mesh.epsg                        = mesh2d.epsg;
++			md.flowequation=md.flowequation.extrude(md);
++			md.stressbalance=md.stressbalance.extrude(md);
++			md.thermal=md.thermal.extrude(md);
++			md.masstransport=md.masstransport.extrude(md);
++			md.levelset=md.levelset.extrude(md);
++			md.calving=md.calving.extrude(md);
++			md.hydrology = md.hydrology.extrude(md);
+ 
+-            md.mesh.vertexonboundary            = mesh2d.vertexonboundary;
+-            md.mesh.vertexconnectivity          = mesh2d.vertexconnectivity;
+-            md.mesh.elementconnectivity         = mesh2d.elementconnectivity;
+-            md.mesh.average_vertex_connectivity = mesh2d.average_vertex_connectivity;
++			//connectivity
++			if (!ArrayAnyNaN(md.mesh.elementconnectivity)) {
++				//md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1); //Replicate the matrix across numlayers-1 
++				var temparr = [];
++				for (var i = 0; i < numlayers - 1; i++) {
++					temparr = ArrayConcat(temparr, md.mesh.elementconnectivity);
++				}
++				md.mesh.elementconnectivity = temparr;
++		
++				//md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
++				var indices = ArrayFind(md.mesh.elementconnectivity, 0);
++				for (var i = 0; i < indices.length; i++) {
++					md.mesh.elementconnectivity[i] = NaN;
++				};
++		
++				for (var i = 2; i < numlayers; i++) {
++					//md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
++					//=md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
++					for (var j = (i-1)*md.mesh.numberofelements2d; j <= (i)*md.mesh.numberofelements2d-1; j++) {
++						for (var k = 0; k < 3; k++) {
++							md.mesh.elementconnectivity[j][k] += md.mesh.numberofelements2d;
++						}
++					}
++				}
++				md.mesh.elementconnectivity = md.mesh.elementconnectivity.map(function(value) { return (Number.isNaN(value)) ? 0 : value; });
++			}
+ 
+-            md.mesh.extractedvertices           = mesh2d.extractedvertices;
+-            md.mesh.extractedelements           = mesh2d.extractedelements;
++			md.materials=md.materials.extrude(md);
++			md.damage=md.damage.extrude(md);
++			md.mask=md.mask.extrude(md);
++			md.qmu=md.qmu.extrude(md);
++			md.basalforcings=md.basalforcings.extrude(md);
+ 
+-            x3d=[]; 
+-            y3d=[];
+-            z3d=[];  //the lower node is on the bed
+-            thickness3d=md.geometry.thickness; //thickness and bed for these nodes
+-                bed3d=md.geometry.base;
++			//increase connectivity if less than 25:
++			if (md.mesh.average_vertex_connectivity<=25) {
++				md.mesh.average_vertex_connectivity=100;
++			}
++		} //}}}
++		this.collapse = function(md) { //{{{
++			/*
++			 *COLLAPSE - collapses a 3d mesh into a 2d mesh
++			 *
++			 *   This routine collapses a 3d model into a 2d model
++			 *   and collapses all the fileds of the 3d model by
++			 *   taking their depth-averaged values
++			 *
++			 *   Usage:
++			 *	 md=collapse(md)
++			 *
++			 *   See also: EXTRUDE, MODELEXTRACT
++			 */
+ 
+-            //Create the new layers
+-            for (var i = 1; i <= numlayers; i++) {
+-                x3d=[x3d, md.mesh.x]; 
+-                y3d=[y3d, md.mesh.y];
+-                //nodes are distributed between bed and surface accordingly to the given exponent
+-                z3d=[z3d, bed3d+thickness3d*extrusionlist(i)]; 
+-            };
++			// Check that the model is really a 3d model
++			if (md.mesh.elementtype() !== 'Penta') {
++				console.error('collapse error message: only 3d mesh can be collapsed')
++			}
+ 
+-            number_nodes3d=x3d.length; //number of 3d nodes for the non extruded part of the mesh
++			// Start with changing all the fields from the 3d mesh 
+ 
+-            //Extrude elements 
+-            elements3d=[];
+-            for (var i = 0; i < numlayers; i++) {
+-                elements3d.push(md.mesh.elements+(i-1)*md.mesh.numberofvertices, md.mesh.elements+i*md.mesh.numberofvertices); //Create the elements of the 3d mesh for the non extruded part
+-            };
++			// dealing with the friction law
++			// drag is limited to nodes that are on the bedrock.
++			if (md.friction.classname() === 'friction') {
++				md.friction.coefficient=project2d(md,md.friction.coefficient,1);
++				md.friction.p=project2d(md,md.friction.p,1);
++				md.friction.q=project2d(md,md.friction.q,1);
++			} else if (md.friction.classname() === 'frictionhydro') {
++				md.friction.q=project2d(md,md.friction.q,1);
++				md.friction.C=project2d(md,md.friction.C,1);
++				md.friction.As=project2d(md,md.friction.As,1);
++				md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1);
++			} else if (md.friction.classname() === 'frictionwaterlayer') {
++				md.friction.coefficient=project2d(md,md.friction.coefficient,1);
++				md.friction.p=project2d(md,md.friction.p,1);
++				md.friction.q=project2d(md,md.friction.q,1);
++				md.friction.water_layer=project2d(md,md.friction.water_layer,1);
++			} else if (md.friction.classname() === 'frictionweertman') {
++				md.friction.C=project2d(md,md.friction.C,1);
++				md.friction.m=project2d(md,md.friction.m,1);
++			} else if (md.friction.classname() === 'frictionweertmantemp') {
++				md.friction.C=project2d(md,md.friction.C,1);
++				md.friction.m=project2d(md,md.friction.m,1);
++			} else {
++				disp('friction type not supported');
++			}
+ 
+-            number_el3d=elements3d.length; //number of 3d nodes for the non extruded part of the mesh
++			// observations
++			if (!Number.isNaN(md.inversion.vx_obs))
++				md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers);
+ 
+-            function fillArray(value, len) {
+-                if (len == 0) return [];
+-                var a = [value];
+-                while (a.length * 2 <= len) a = a.concat(a);
+-                if (a.length < len) a = a.concat(a.slice(0, len - a.length));
+-                return a;
+-            }
++			if (!Number.isNaN(md.inversion.vy_obs))
++				md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers);
+ 
+-            //Keep a trace of lower and upper nodes
+-            //lowervertex=NaN*ones(number_nodes3d,1);
+-            //uppervertex=NaN*ones(number_nodes3d,1);
++			if (!Number.isNaN(md.inversion.vel_obs))
++				md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers);
+ 
+-            lowervertex = fillArray(NaN, number_nodes3d);
+-            uppervertex = fillArray(NaN, number_nodes3d);
++			if (!Number.isNaN(md.inversion.cost_functions_coefficients))
++				md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers);
+ 
+-            //lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;
+-            //uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;
++			if (numel(md.inversion.min_parameters)>1)
++				md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers);
+ 
+-            for (var i = md.mesh.numberofvertices+1, k = 1; i < lowervertex.length && k <= (numlayers-1)*md.mesh.numberofvertices; i++, k++) {
+-                lowervertex[i] = k;
+-            };
++			if (numel(md.inversion.max_parameters)>1) 
++				md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers);
+ 
+-            for (var i = 1, k = md.mesh.numberofvertices+1; i <= (numlayers-1)*md.mesh.numberofvertices && k <= number_nodes3d; i++, k++) {
+-                uppervertex[i] = k;
+-            };
++			if (md.smb.classname() === 'SMBforcing' && !Number.isNaN(md.smb.mass_balance)) {
++				md.smb.mass_balance=project2d(md,md.smb.mass_balance,md.mesh.numberoflayers);
++			} else if (md.smb.classname() === 'SMBhenning' && !Number.isNaN(md.smb.smbref)) {
++				md.smb.smbref=project2d(md,md.smb.smbref,md.mesh.numberoflayers);
++			}
+ 
+-            md.mesh.lowervertex=lowervertex;
+-            md.mesh.uppervertex=uppervertex;
++			// results
++			if (!Number.isNaN(md.initialization.vx))
++				md.initialization.vx=DepthAverage(md,md.initialization.vx);
++			if (!Number.isNaN(md.initialization.vy))
++				md.initialization.vy=DepthAverage(md,md.initialization.vy);
++			if (!Number.isNaN(md.initialization.vz))
++				md.initialization.vz=DepthAverage(md,md.initialization.vz);
++			if (!Number.isNaN(md.initialization.vel))
++				md.initialization.vel=DepthAverage(md,md.initialization.vel);
++			if (!Number.isNaN(md.initialization.temperature))
++				md.initialization.temperature=DepthAverage(md,md.initialization.temperature);
++			if (!Number.isNaN(md.initialization.pressure))
++				md.initialization.pressure=project2d(md,md.initialization.pressure,1);
++			if (!Number.isNaN(md.initialization.sediment_head))
++				md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1);
++			if (!Number.isNaN(md.initialization.epl_head))
++				md.initialization.epl_head=project2d(md,md.initialization.epl_head,1);
++			if (!Number.isNaN(md.initialization.epl_thickness))
++				md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1);
+ 
+-            //same for lower and upper elements
+-            lowerelements = fillArray(NaN, number_el3d);
+-            upperelements = fillArray(NaN, number_el3d);
+-            //lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;
+-            //upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;
++			// giaivins
++			if (!Number.isNaN(md.gia.mantle_viscosity))
++				md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1);
++			if (!Number.isNaN(md.gia.lithosphere_thickness))
++				md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1);
+ 
+-            for (var i = md.mesh.numberofvertices+1, k = 1; i < lowerelements.length && k <= (numlayers-2)*md.mesh.numberofelements; i++, k++) {
+-                lowerelements[i] = k;
+-            };
++			// elementstype
++			if (!Number.isNaN(md.flowequation.element_equation)) {
++				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
++				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
++				md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
++				md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
++				md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
++			}
+ 
+-            for (var i = 1, k = md.mesh.numberofelements + 1; i <= (numlayers-2)*md.mesh.numberofelements && k <= (numlayers-1)*md.mesh.numberofelements; i++, k++) {
+-                upperelements[i] = k;
+-            };
++			// boundary conditions
++			md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers);
++			md.stressbalance.spcvy=project2d(md,md.stressbalance.spcvy,md.mesh.numberoflayers);
++			md.stressbalance.spcvz=project2d(md,md.stressbalance.spcvz,md.mesh.numberoflayers);
++			md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
++			md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
++			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
++			if (!Number.isNaN(md.damage.spcdamage))
++				md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers);
++			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+-            md.mesh.lowerelements=lowerelements;
+-            md.mesh.upperelements=upperelements;
++			// Hydrologydc variables
++			if (md.hydrology.classname() === 'hydrologydc') {
++				md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1);
++				md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1);
++				md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1);
++				md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1);
+ 
+-            //Save old mesh 
+-            md.mesh.x2d=md.mesh.x;
+-            md.mesh.y2d=md.mesh.y;
+-            md.mesh.elements2d=md.mesh.elements;
+-            md.mesh.numberofelements2d=md.mesh.numberofelements;
+-            md.mesh.numberofvertices2d=md.mesh.numberofvertices;
++				if(md.hydrology.isefficientlayer==1)
++					md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1);
++			}
++			
++			// materials
++			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
++			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
++			
++			// damage: 
++			if (md.damage.isdamage)
++				md.damage.D=DepthAverage(md,md.damage.D);
+ 
+-            //Build global 3d mesh 
+-            md.mesh.elements=elements3d;
+-            md.mesh.x=x3d;
+-            md.mesh.y=y3d;
+-            md.mesh.z=z3d;
+-            md.mesh.numberofelements=number_el3d;
+-            md.mesh.numberofvertices=number_nodes3d;
+-            md.mesh.numberoflayers=numlayers;
++			// special for thermal modeling:
++			if (!Number.isNaN(md.basalforcings.groundedice_melting_rate))
++				md.basalforcings.groundedice_melting_rate=project2d(md,md.basalforcings.groundedice_melting_rate,1); 
+ 
+-            //Ok, now deal with the other fields from the 2d mesh:
++			if (!Number.isNaN(md.basalforcings.floatingice_melting_rate))
++				md.basalforcings.floatingice_melting_rate=project2d(md,md.basalforcings.floatingice_melting_rate,1); 
+ 
+-            //bedinfo and surface info
+-            md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
+-            md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
+-            md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
++			md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); // bedrock only gets geothermal flux
+ 
+-            //lat long
+-            md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
+-            md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
++			// update of connectivity matrix
++			md.mesh.average_vertex_connectivity=25;
+ 
+-                //md.geometry=md.geometry.extrude(md);
+-                //md.friction=md.friction.extrude(md);
+-                //md.inversion=md.inversion.extrude(md);
+-                //md.smb=md.smb.extrude(md);
+-                //md.initialization=md.initialization.extrude(md);
++			// Collapse the mesh
++			var nodes2d=md.mesh.numberofvertices2d;
++			var elements2d=md.mesh.numberofelements2d;
+ 
+-                //md.flowequation=md.flowequation.extrude(md);
+-                //md.stressbalance=md.stressbalance.extrude(md);
+-                //md.thermal=md.thermal.extrude(md);
+-                //md.masstransport=md.masstransport.extrude(md);
+-                //md.levelset=md.levelset.extrude(md);
+-                //md.calving=md.calving.extrude(md);
+-                //md.hydrology = md.hydrology.extrude(md);
++			// parameters
++			md.geometry.surface=project2d(md,md.geometry.surface,1);
++			md.geometry.thickness=project2d(md,md.geometry.thickness,1);
++			md.geometry.base=project2d(md,md.geometry.base,1);
++			if (!Number.isNaN(md.geometry.bed))
++				md.geometry.bed=project2d(md,md.geometry.bed,1);
+ 
+-                ////connectivity
+-                ////if ~isnan(md.mesh.elementconnectivity)
++			if (!Number.isNaN(md.mask.groundedice_levelset))
++				md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
+ 
+-                //if (md.mesh.elementconnectivity.every(function(e, i, arr) { return e !== null && typeof e !== 'undefined'; })) {
+-                    //var temparr = [];
+-                    //for (var i = 0; i < numlayers; i++) {
+-                        //temparr.push(md.mesh.elementconnectivity);
+-                    //};
++			if (!Number.isNaN(md.mask.ice_levelset))
++				md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+ 
+-                    ////md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
++			// lat long
++			if (numel(md.mesh.lat) === md.mesh.numberofvertices)
++				md.mesh.lat=project2d(md,md.mesh.lat,1);
++			if (numel(md.mesh.long) === md.mesh.numberofvertices)
++				md.mesh.long=project2d(md,md.mesh.long,1);
+ 
+-                    //md.mesh.elementconnectivity = temparr;
++			// Initialize with the 2d mesh
++			var mesh = new mesh2d();
++			mesh.x=md.mesh.x2d;
++			mesh.y=md.mesh.y2d;
++			mesh.numberofvertices=md.mesh.numberofvertices2d;
++			mesh.numberofelements=md.mesh.numberofelements2d;
++			mesh.elements=md.mesh.elements2d;
+ 
+-                    ////md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
++			if (!Number.isNaN(md.mesh.vertexonboundary))
++				mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
++			if (!Number.isNaN(md.mesh.elementconnectivity))
++				mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
+ 
+-                    //for (var i = 0; i < md.mesh.elementconnectivity.length; i++) {
+-                        //if (md.mesh.elementconnectivity[i] == 0) {
+-                            //md.mesh.elementconnectivity[i] = NaN;
+-                        //}
+-                    //};
++			md.mesh=mesh;
++			md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
++			md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
++			md.mesh.segments=contourenvelope(md.mesh);
+ 
+-                    //for (var i = 2; i < numlayers; i++) {
+-                        //for (var j = (i-1)*md.mesh.nuberofelements2d+1; i <= (i)*md.mesh.numberofelements2d; i++) {
+-                            //md.mesh.elementconnectivity[i] += md.mesh.numberofelements2d;
+-                        //};
+-                        ////md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
+-                            ////=md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
+-                    //};
+-
+-                    //md.mesh.elementconnectivity.map(function(x) { return (isNaN(x)) ? 0 : x; });
+-                //}
+-
+-                //md.materials=md.materials.extrude(md);
+-                //md.damage=md.damage.extrude(md);
+-                //md.mask=md.mask.extrude(md);
+-                //md.qmu=md.qmu.extrude(md);
+-                //md.basalforcings=md.basalforcings.extrude(md);
+-
+-                ////increase connectivity if less than 25:
+-                //if (md.mesh.average_vertex_connectivity<=25)
+-                    //md.mesh.average_vertex_connectivity=100;
+-        } //}}}
+-        this.collapse = function(md) { //{{{
+-            /*
+-             *COLLAPSE - collapses a 3d mesh into a 2d mesh
+-             *
+-             *   This routine collapses a 3d model into a 2d model
+-             *   and collapses all the fileds of the 3d model by
+-             *   taking their depth-averaged values
+-             *
+-             *   Usage:
+-             *     md=collapse(md)
+-             *
+-             *   See also: EXTRUDE, MODELEXTRACT
+-             */
+-
+-            // Check that the model is really a 3d model
+-            if (md.mesh.elementtype() !== 'Penta') {
+-                console.error('collapse error message: only 3d mesh can be collapsed')
+-            }
+-
+-            // Start with changing all the fields from the 3d mesh 
+-
+-            // dealing with the friction law
+-            // drag is limited to nodes that are on the bedrock.
+-            if (md.friction.classname() === 'friction') {
+-                md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+-                md.friction.p=project2d(md,md.friction.p,1);
+-                md.friction.q=project2d(md,md.friction.q,1);
+-            } else if (md.friction.classname() === 'frictionhydro') {
+-                md.friction.q=project2d(md,md.friction.q,1);
+-                md.friction.C=project2d(md,md.friction.C,1);
+-                md.friction.As=project2d(md,md.friction.As,1);
+-                md.friction.effective_pressure=project2d(md,md.friction.effective_pressure,1);
+-            } else if (md.friction.classname() === 'frictionwaterlayer') {
+-                md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+-                md.friction.p=project2d(md,md.friction.p,1);
+-                md.friction.q=project2d(md,md.friction.q,1);
+-                md.friction.water_layer=project2d(md,md.friction.water_layer,1);
+-            } else if (md.friction.classname() === 'frictionweertman') {
+-                md.friction.C=project2d(md,md.friction.C,1);
+-                md.friction.m=project2d(md,md.friction.m,1);
+-            } else if (md.friction.classname() === 'frictionweertmantemp') {
+-                md.friction.C=project2d(md,md.friction.C,1);
+-                md.friction.m=project2d(md,md.friction.m,1);
+-            } else {
+-                disp('friction type not supported');
+-            }
+-
+-            // observations
+-            if (!isNaN(md.inversion.vx_obs))
+-                md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers);
+-
+-            if (!isNaN(md.inversion.vy_obs))
+-                md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers);
+-
+-            if (!isNaN(md.inversion.vel_obs))
+-                md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers);
+-
+-            if (!isNaN(md.inversion.cost_functions_coefficients))
+-                md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers);
+-
+-            if (numel(md.inversion.min_parameters)>1)
+-                md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers);
+-
+-            if (numel(md.inversion.max_parameters)>1) 
+-                md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers);
+-
+-            if (md.smb.classname() === 'SMBforcing' && !isNaN(md.smb.mass_balance)) {
+-                md.smb.mass_balance=project2d(md,md.smb.mass_balance,md.mesh.numberoflayers);
+-            } else if (md.smb.classname() === 'SMBhenning' && !isNaN(md.smb.smbref)) {
+-                md.smb.smbref=project2d(md,md.smb.smbref,md.mesh.numberoflayers);
+-            }
+-
+-            // results
+-            if (!isNaN(md.initialization.vx))
+-                md.initialization.vx=DepthAverage(md,md.initialization.vx);
+-            if (!isNaN(md.initialization.vy))
+-                md.initialization.vy=DepthAverage(md,md.initialization.vy);
+-            if (!isNaN(md.initialization.vz))
+-                md.initialization.vz=DepthAverage(md,md.initialization.vz);
+-            if (!isNaN(md.initialization.vel))
+-                md.initialization.vel=DepthAverage(md,md.initialization.vel);
+-            if (!isNaN(md.initialization.temperature))
+-                md.initialization.temperature=DepthAverage(md,md.initialization.temperature);
+-            if (!isNaN(md.initialization.pressure))
+-                md.initialization.pressure=project2d(md,md.initialization.pressure,1);
+-            if (!isNaN(md.initialization.sediment_head))
+-                md.initialization.sediment_head=project2d(md,md.initialization.sediment_head,1);
+-            if (!isNaN(md.initialization.epl_head))
+-                md.initialization.epl_head=project2d(md,md.initialization.epl_head,1);
+-            if (!isNaN(md.initialization.epl_thickness))
+-                md.initialization.epl_thickness=project2d(md,md.initialization.epl_thickness,1);
+-
+-            // giaivins
+-            if (!isNaN(md.gia.mantle_viscosity))
+-                md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1);
+-            if (!isNaN(md.gia.lithosphere_thickness))
+-                md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1);
+-
+-            // elementstype
+-            if (!isNaN(md.flowequation.element_equation)) {
+-                md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
+-                md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
+-                md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
+-                md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
+-                md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
+-            }
+-
+-            // boundary conditions
+-            md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers);
+-            md.stressbalance.spcvy=project2d(md,md.stressbalance.spcvy,md.mesh.numberoflayers);
+-            md.stressbalance.spcvz=project2d(md,md.stressbalance.spcvz,md.mesh.numberoflayers);
+-            md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
+-            md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
+-            md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
+-            if (!isNaN(md.damage.spcdamage))
+-                md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers);
+-            md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+-
+-            // Hydrologydc variables
+-            if (md.hydrology.classname() === 'hydrologydc') {
+-                md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1);
+-                md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1);
+-                md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1);
+-                md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1);
+-
+-                if(md.hydrology.isefficientlayer==1)
+-                    md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1);
+-            }
+-            
+-            // materials
+-            md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+-            md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
+-            
+-            // damage: 
+-            if (md.damage.isdamage)
+-                md.damage.D=DepthAverage(md,md.damage.D);
+-
+-            // special for thermal modeling:
+-            if (!isNaN(md.basalforcings.groundedice_melting_rate))
+-                md.basalforcings.groundedice_melting_rate=project2d(md,md.basalforcings.groundedice_melting_rate,1); 
+-
+-            if (!isNaN(md.basalforcings.floatingice_melting_rate))
+-                md.basalforcings.floatingice_melting_rate=project2d(md,md.basalforcings.floatingice_melting_rate,1); 
+-
+-            md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); // bedrock only gets geothermal flux
+-
+-            // update of connectivity matrix
+-            md.mesh.average_vertex_connectivity=25;
+-
+-            // Collapse the mesh
+-            var nodes2d=md.mesh.numberofvertices2d;
+-            var elements2d=md.mesh.numberofelements2d;
+-
+-            // parameters
+-            md.geometry.surface=project2d(md,md.geometry.surface,1);
+-            md.geometry.thickness=project2d(md,md.geometry.thickness,1);
+-            md.geometry.base=project2d(md,md.geometry.base,1);
+-            if (!isNaN(md.geometry.bed))
+-                md.geometry.bed=project2d(md,md.geometry.bed,1);
+-
+-            if (!isNaN(md.mask.groundedice_levelset))
+-                md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
+-
+-            if (!isNaN(md.mask.ice_levelset))
+-                md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+-
+-            // lat long
+-            if (numel(md.mesh.lat) === md.mesh.numberofvertices)
+-                md.mesh.lat=project2d(md,md.mesh.lat,1);
+-            if (numel(md.mesh.long) === md.mesh.numberofvertices)
+-                md.mesh.long=project2d(md,md.mesh.long,1);
+-
+-            // Initialize with the 2d mesh
+-            var mesh = new mesh2d();
+-            mesh.x=md.mesh.x2d;
+-            mesh.y=md.mesh.y2d;
+-            mesh.numberofvertices=md.mesh.numberofvertices2d;
+-            mesh.numberofelements=md.mesh.numberofelements2d;
+-            mesh.elements=md.mesh.elements2d;
+-
+-            if (!isNaN(md.mesh.vertexonboundary))
+-                mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
+-            if (!isNaN(md.mesh.elementconnectivity))
+-                mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
+-
+-            md.mesh=mesh;
+-            md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
+-            md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
+-            md.mesh.segments=contourenvelope(md.mesh);
+-
+-            return md;
+-        } /*}}}*/
++			return md;
++		} /*}}}*/
+ 	//properties
+ 	// {{{
+ 		//Careful here: no other class should be used as default value this is a bug of matlab
+@@ -610,6 +584,7 @@
+ 		this.trans            = 0;
+ 		this.levelset         = 0;
+ 		this.calving          = 0;
++		this.love             = 0;
+ 		this.gia              = 0;
+ 		this.esa              = 0;
+ 
+Index: ../trunk-jpl/src/m/classes/qmu.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.js	(revision 22097)
++++ ../trunk-jpl/src/m/classes/qmu.js	(revision 22098)
+@@ -90,7 +90,7 @@
+ 
+ 	}// }}}
+     this.extrude = function(md) {//{{{
+-        this.partition=project3d(md,'vector',math.transpose(this.partition),'type','node');
++	if (!isNaN(this.partition)) this.partition=project3d(md,'vector',ArrayTranspose(this.partition),'type','node');
+         return this;
+     }//}}}
+ 	this.classname= function(){// {{{
+Index: ../trunk-jpl/src/m/classes/inversion.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.js	(revision 22097)
++++ ../trunk-jpl/src/m/classes/inversion.js	(revision 22098)
+@@ -80,13 +80,13 @@
+         this.vel_obs=project3d(md,'vector',this.vel_obs,'type','node');
+         this.thickness_obs=project3d(md,'vector',this.thickness_obs,'type','node');
+ 
+-        if (numel(this.cost_functions_coefficients)>1) {
++        if (this.cost_functions_coefficients.length>1) {
+             this.cost_functions_coefficients=project3d(md,'vector',this.cost_functions_coefficients,'type','node');
+         }			
+-        if (numel(this.min_parameters)>1) {
++        if (this.min_parameters.length>1) {
+             this.min_parameters=project3d(md,'vector',this.min_parameters,'type','node');
+         }
+-        if (numel(this.max_parameters)>1) {
++        if (this.max_parameters.length>1) {
+             this.max_parameters=project3d(md,'vector',this.max_parameters,'type','node');
+         }
+         return this;
+Index: ../trunk-jpl/src/m/extrusion/project3d.js
+===================================================================
+--- ../trunk-jpl/src/m/extrusion/project3d.js	(revision 22097)
++++ ../trunk-jpl/src/m/extrusion/project3d.js	(revision 22098)
+@@ -1,115 +1,91 @@
+-project3d = function() {
+-    //PROJECT3D - vertically project a vector from 2d mesh
+-    //
+-    //   vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh.
+-    //   This vector can be a node vector of size (md.mesh.numberofvertices2d,N/A) or an 
+-    //   element vector of size (md.mesh.numberofelements2d,N/A). 
+-    //   arguments: 
+-    //      'vector': 2d vector
+-    //      'type': 'element' or 'node'. 
+-    //   options: 
+-    //      'layer' a layer number where vector should keep its values. If not specified, all layers adopt the 
+-    //             value of the 2d vector.
+-    //      'padding': default to 0 (value adopted by other 3d layers not being projected0
+-    //
+-    //   Egs:
+-    // md.extruded_vector=project3d(md,'vector',vector2d,'type','node','layer',1,'padding',null);
+-    // md.extruded_vector=project3d(md,'vector',vector2d,'type','element','padding',0);
+-    // md.extruded_vector=project3d(md,'vector',vector2d,'type','node');
++function project3d() {
++	//PROJECT3D - vertically project a vector from 2d mesh
++	//
++	//   vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh.
++	//   This vector can be a node vector of size (md.mesh.numberofvertices2d,N/A) or an 
++	//   element vector of size (md.mesh.numberofelements2d,N/A). 
++	//   arguments: 
++	//      'vector': 2d vector
++	//      'type': 'element' or 'node'. 
++	//   options: 
++	//      'layer' a layer number where vector should keep its values. If not specified, all layers adopt the 
++	//             value of the 2d vector.
++	//      'padding': default to 0 (value adopted by other 3d layers not being projected0
++	//
++	//   Egs:
++	// md.extruded_vector=project3d(md,'vector',vector2d,'type','node','layer',1,'padding',null);
++	// md.extruded_vector=project3d(md,'vector',vector2d,'type','element','padding',0);
++	// md.extruded_vector=project3d(md,'vector',vector2d,'type','node');
+ 
+-    //some regular checks
+-    
+-    function remove_first_n(start, arglist) { // Using slice() on arguments is discouraged because it prevents optimizations in engines such as V8
+-        var args = [];
++	//some regular checks
++	if (arguments.length===1 || arguments.length===0) {
++		console.error('project3d bad usage');
++	}
++	if (md.mesh.elementtype() !== 'Penta') {
++		console.error('input model is not 3d');
++	}
+ 
+-        for (var i = start; i < arglist.length; i++) {
+-            args.push(arglist[i]);
+-        }
++	//retrieve parameters from options.
++	var options      = new pairoptions(Array.prototype.slice.call(arguments, 1)); // slice to remove md
++	var vector2d     = options.getfieldvalue('vector');     //mandatory
++	var type         = options.getfieldvalue('type');       //mandatory
++	var layer        = options.getfieldvalue('layer',0);    //optional (do all layers default:)
++	var paddingvalue = options.getfieldvalue('padding',0);  //0 by default
+ 
+-        return args;
+-    }
++	if (Number.isNaN(vector2d) || vector2d === 0 || vector2d.length === 1) { // NaN treated as length 1 in MATLAB
++		projected_vector=vector2d;
++	} else if (type.toLowerCase() === 'node') {
++		//Initialize 3d vector
++		if (vector2d.length===md.mesh.numberofvertices2d) {
++			projected_vector=NewArrayFill(md.mesh.numberofvertices,paddingvalue);
++		} else if (vector2d.length===md.mesh.numberofvertices2d+1) {
++			projected_vector=NewArrayFill(md.mesh.numberofvertices+1,paddingvalue);
++			projected_vector[projected_vector.length-1] = vector2d[vector2d.length-1];
++			vector2d.pop();
++		} else {
++			console.error('vector length not supported')
++		}
+ 
+-    if (arguments.length===1 || arguments.length===0) {
+-        //help project3d
+-        console.error('project3d bad usage');
+-    }
++		//Fill in
++		if (layer===0) {
++			for (var i = 1; i <= md.mesh.numberoflayers; ++i) {
++				for (var j = (i-1)*md.mesh.numberofvertices2d, k = 0; j < i*md.mesh.numberofvertices2d; j++, k++) {
++					projected_vector[j] = vector2d[k];
++				}
++			}
++		} else {
++			for (var j = (layer-1)*md.mesh.numberofvertices2d, k = 0; j < layer*md.mesh.numberofvertices2d; j++, k++) {
++				projected_vector[j] = vector2d[k];
++			}
++		}
++	} else if (type.toLowerCase() === 'element') {
++		//Initialize 3d vector
++		//var vector2d_size2 = Array.isArray(vector2d[0]) ? vector2d[0].length : 1; //get size of vector2d's 2nd axis
++		if (vector2d.length===md.mesh.numberofelements2d) {
++			projected_vector=NewArrayFill(md.mesh.numberofelements,paddingvalue);
++		} else if (vector2d.length===md.mesh.numberofelements2d+1) {
++			projected_vector=NewArrayFill(md.mesh.numberofelements+1,paddingvalue);
++			projected_vector[projected_vector.length-1] = vector2d[vector2d.length-1];
++			vector2d.pop();
++		} else {
++			console.error('vector length not supported')
++		}
+ 
+-    var md = arguments[0];
++		//Fill in
++		if (layer===0) {
++			for (var i = 1; i <= md.mesh.numberoflayers-1; ++i) {
++				for (var j = (i-1)*md.mesh.numberofelements2d, k = 0; j < i*md.mesh.numberofelements2d; j++, k++) {
++					projected_vector[j] = vector2d[k];
++				}
++			}
++		} else {
++			for (var j = (layer-1)*md.mesh.numberofelements2d, k = 0; j < layer*md.mesh.numberofelements2d; j++, k++) {
++				projected_vector[j] = vector2d[k];
++			}
++		}
++	} else {
++		console.error('project3d error message: unknown projection type');
++	}
+ 
+-    if (md.mesh.elementtype() !== 'Penta') {
+-        console.error('input model is not 3d');
+-    }
+-
+-    //retrieve parameters from options.
+-    options      = new pairoptions(remove_first_n(1, arguments)); // slice to remove md
+-    vector2d     = options.getfieldvalue('vector');     //mandatory
+-    type         = options.getfieldvalue('type');       //mandatory
+-    layer        = options.getfieldvalue('layer',0);    //optional (do all layers default:)
+-    paddingvalue = options.getfieldvalue('padding',0);  //0 by default
+-
+-    if (isNaN(vector2d) || vector2d === 0 || vector2d.length === 1) { // NaN treated as length 1 in MATLAB
+-        projected_vector=vector2d;
+-    } else if (type.toLowerCase() === 'node') {
+-
+-        //Initialize 3d vector
+-        if (vector2d.length===md.mesh.numberofvertices2d) {
+-                projected_vector=ones(md.mesh.numberofvertices,  vector2d[0].length).map(function(arr) { return arr.fill(paddingvalue); });
+-        } else if (vector2d.length===md.mesh.numberofvertices2d+1) {
+-            projected_vector=ones(md.mesh.numberofvertices+1,vector2d[0].length).map(function(arr) { return arr.fill(paddingvalue); });
+-            projected_vector[projected_vector.length-1] = projected_vector[projected_vector.length-1].map(function(element, index) { return vector2d[vector2d.length-1][index]; });
+-            vector2d.pop(); // Remove last array
+-        } else {
+-            console.error('vector length not supported')
+-        }
+-
+-            //Fill in
+-        if (layer===0) {
+-            for (var i = 1; i < md.mesh.numberoflayers; ++i) {
+-                var vec_idx = 0;
+-
+-                for (var j = (i-1)*md.mesh.numberofvertices2d+1, vec_idx = 0; j <= i * md.mesh.numberofvertices2d && vec_idx < vector2d.length; ++j, ++vec_idx) {
+-                    projected_vector[j].map(function(element, index) { return vector2d[vec_idx][index]; });
+-                }
+-
+-            }
+-        } else {
+-            var vec_idx = 0;
+-
+-            for (var i = (layer-1)*md.mesh.numberofvertices2d+1, vec_idx = 0; i <= layer * md.mesh.numberofvertices2d && vec_idx < vector2d.length; ++i, ++vec_idx) {
+-                projected_vector[i] = vector2d[vec_idx];
+-            }
+-        }
+-    } else if (type.toLowerCase() === 'element') {
+-            //Initialize 3d vector
+-        if (vector2d.length===md.mesh.numberofelements2d) {
+-                projected_vector = ones(md.mesh.numberofelements,  vector2d[0].length).map(function(arr) { return arr.fill(paddingvalue); });
+-        } else if (vector2d.length===md.mesh.numberofelements2d+1) {
+-            projected_vector = ones(md.mesh.numberofelements+1,  vector2d[0].length).map(function(arr) { return arr.fill(paddingvalue); });
+-
+-            projected_vector[projected_vector.length-1].map(function(element, index) { return vector2d[vector2d.length-1][index]; });
+-
+-            vector2d.pop();
+-        } else {
+-            console.error('vector length not supported')
+-        }
+-
+-            //Fill in
+-        if (layer===0) {
+-            for (var i = 1; i < md.mesh.numberoflayers-1; ++i) {
+-                var vec_idx=0;
+-                for (var j = (i-1)*md.mesh.numberofelements2d+1, vec_idx = 0; j <= i * md.mesh.numberofelements2d && vec_idx < vector2d.length; ++j, ++vec_idx) {
+-                    projected_vector[j].map(function(element, index) { return vector2d[vec_idx][index]; });
+-                }
+-            }
+-        } else {
+-            var vec_idx=0;
+-            for (var i = (layer-1)*md.mesh.numberofelements2d+1, vec_idx = 0; i <= layer * md.mesh.numberofelements2d && vec_idx < vector2d.length; ++i, ++vec_idx) {
+-                projected_vector[i].map(function(element, index) { return vector2d[vec_idx][index]; });
+-            }
+-        }
+-    } else {
+-        console.error('project3d error message: unknown projection type');
+-    }
+-
+-    return projected_vector;
++	return projected_vector;
+ };
Index: /issm/oecreview/Archive/21724-22754/ISSM-22098-22099.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22098-22099.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22098-22099.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/settings.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.js	(revision 22098)
++++ ../trunk-jpl/src/m/classes/settings.js	(revision 22099)
+@@ -28,7 +28,7 @@
+ 		upload_port         = 0;
+ 		
+ 		//throw an error if solver residue exceeds this value
+-		self.solver_residue_threshold=1e-6;
++		this.solver_residue_threshold=1e-6;
+ 
+ 	}// }}}
+ 	this.disp= function(){// {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22099-22100.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22099-22100.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22099-22100.diff	(revision 22755)
@@ -0,0 +1,2249 @@
+Index: ../trunk-jpl/test/NightlyRun/test462.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test462.m	(revision 22099)
++++ ../trunk-jpl/test/NightlyRun/test462.m	(revision 22100)
+@@ -10,7 +10,6 @@
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=0;
+ %amr bamg settings, just field
+-md.amr=amrbamg();
+ md.amr.hmin=10000;
+ md.amr.hmax=100000;
+ md.amr.fieldname='Vel';
+Index: ../trunk-jpl/test/NightlyRun/test463.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test463.m	(revision 22099)
++++ ../trunk-jpl/test/NightlyRun/test463.m	(revision 22100)
+@@ -10,7 +10,6 @@
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=0;
+ %amr bamg settings, just grounding line
+-md.amr=amrbamg();
+ md.amr.hmin=10000;
+ md.amr.hmax=100000;
+ md.amr.fieldname='None';
+Index: ../trunk-jpl/test/NightlyRun/test464.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test464.m	(revision 22099)
++++ ../trunk-jpl/test/NightlyRun/test464.m	(revision 22100)
+@@ -10,7 +10,6 @@
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=0;
+ %amr bamg settings, just ice front
+-md.amr=amrbamg();
+ md.amr.hmin=10000;
+ md.amr.hmax=100000;
+ md.amr.fieldname='None';
+Index: ../trunk-jpl/test/NightlyRun/test465.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test465.m	(revision 22099)
++++ ../trunk-jpl/test/NightlyRun/test465.m	(revision 22100)
+@@ -10,7 +10,6 @@
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=0;
+ %amr bamg settings, field, grounding line and ice front
+-md.amr=amrbamg();
+ md.amr.hmin=20000;
+ md.amr.hmax=100000;
+ md.amr.fieldname='Vel';
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22099)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22100)
+@@ -36,6 +36,7 @@
+ #include <pzreftriangle.h>
+ #include <pzgeotriangle.h>
+ #include <tpzgeoelrefpattern.h>
++#include <pzgraphmesh.h>
+ #include <TPZVTKGeoMesh.h>
+ 
+ #include "../shared/shared.h"
+@@ -45,49 +46,58 @@
+ class AdaptiveMeshRefinement{
+ 
+ public:
+-
+-	/*Public methods*/
++	/*Public attributes{{{*/
++	/* Filter (distance to the points)
++	 * to refine:
++	 * radius_h = initial_radius * gradation ^ (level_max-h)
++	 * to unirefine
++	 * radius_h = lag * initial_radius * gradation ^ (level_max-h)
++	 */
++	int level_max;								//max level of refinement
++	double radius_level_max;				//initial radius which in the elements will be refined with level max
++	double gradation;							//geometric progression ratio to calculate radius of level h
++	double lag;									//lag used in the unrefine process
++	/*Target and estimators*/
++	double groundingline_distance;		//if groundingline_distance>initial_radius, groundingline_distance will be used instead initial_radius		
++	double icefront_distance;				//if icefront_distance>initial_radius, icefront_distance will be used instead initial_radius
++	double thicknesserror_threshold;		//if ==0, it will not be used
++	double deviatoricerror_threshold;	//if ==0, it will not be used
++	/*}}}*/
++	/*Public methods{{{*/
+ 	/* Constructor, destructor etc*/
+ 	AdaptiveMeshRefinement();															
+ 	AdaptiveMeshRefinement(const AdaptiveMeshRefinement &cp); 					
+ 	AdaptiveMeshRefinement & operator= (const AdaptiveMeshRefinement &cp);	
+ 	virtual ~AdaptiveMeshRefinement();												
+-    
+ 	/*General methods*/
+ 	void CleanUp();
+ 	void Initialize();
+-	void SetLevelMax(int &h);
+-   void SetRegions(double &D1,double Dhmax);
+-	void SetElementWidth(int &width);
+-	void Execute(bool &amr_verbose,int &numberofelements,
+-						double* partiallyfloatedelements,double *masklevelset,double* deviatorictensorerror,double* thicknesserror,
+-						int &newnumberofvertices,int &newnumberofelements,double** x,double** y,int** elementslist);
+-	void CreateInitialMesh(int &nvertices,int &nelements,int &width,double* x,double* y,int* elements);
+-	TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
+-	void CheckMesh(int &nvertices,int &nelements,int &width,double** px,double** py,int** pelements);
+-
++	void ExecuteRefinement(int numberofpoints,double* xylist,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
++	void ExecuteRefinement(double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
++	void CreateInitialMesh(int &nvertices,int &nelements,double* x,double* y,int* elements);
++	void CheckMesh(int* nvertices,int* nelements,double** px,double** py,int** pelements);
++	/*}}}*/
+ private:
+-	/*Private attributes*/
+-	int elementswidth;                                    // Geometric nodes for element: 3 == Tria, 4 == Tetra, 6 == Penta
+-   int levelmax;                                         // Max level of refinement
+-	double regionlevel1;												// Region which will be refined with level 1
+-	double regionlevelmax;											// Region which will be refined with level max
+-	int step;	//itapopo testando
+-	int smooth_frequency; //itapopo testando
++	/*Private attributes{{{*/
+ 	std::vector<int> sid2index;									// Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid) 
+ 	std::vector<int> index2sid;									// Vector that keeps sid of issm mesh elements used in the neopz mesh (index) 
+ 	std::vector<int> specialelementsindex;						// Vector that keeps index of the special elements (created to avoid haning nodes) 
+ 	TPZGeoMesh *fathermesh;											// Father Mesh is the entire mesh without refinement
+-	TPZGeoMesh *currentmesh;										// Current Mesh is the refined mesh
+-
+-	/*Private methods*/
+-   void RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror);
++	TPZGeoMesh *previousmesh;										// Previous Mesh is the refined mesh
++	/*}}}*/
++	/*Private methods{{{*/
++   void RefinementProcess(bool &verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror);
++	void RefineMesh(bool &verbose,TPZGeoMesh* gmesh,int numberofpoints,double* xylist);
+ 	void RefineMesh(TPZGeoMesh *gmesh,std::vector<int> &elements); 
+-   void RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh);
+-	void GetMesh(int &nvertices,int &nelements,double** px,double** py,int** pelements);
+-	void FindElements(int &numberofpoints,double* xp,double* yp,TPZGeoMesh *gmesh,int &hlevel,std::vector<int> &elements);
+-   void AllElements(TPZGeoMesh *gmesh,std::vector<int> &elements);
+-   inline int GetElemMaterialID(){return 1;}          
++   void RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh);
++	void DeleteSpecialElements(bool &verbose,TPZGeoMesh* gmesh);
++	void GetMesh(TPZGeoMesh* gmesh,int* nvertices,int* nelements,double** px,double** py,int** pelements);
++	TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
++   inline int GetElemMaterialID(){return 1;} 
++	inline int GetNumberOfNodes(){return 3;}
++	void PrintGMeshVTK(TPZGeoMesh *gmesh,std::ofstream &file,bool matColor=true);
++	int GetVTK_ElType(TPZGeoEl* gel);
++	/*}}}*/
+ };
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22099)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22100)
+@@ -177,6 +177,7 @@
+ 		void ThicknessZZErrorEstimator(IssmDouble** pelementerror);
+ 		void MeanGroundedIceLevelSet(IssmDouble** pmasklevelset);
+ 		void GetElementCenterCoordinates(IssmDouble** pxc,IssmDouble** pyc);
++		void GetZeroLevelSetPoints(IssmDouble** pzerolevelset_points,int &numberofpoints,int levelset_type);
+ 		#endif
+ 
+ 		#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+@@ -190,6 +191,10 @@
+ 		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementNeopz(void);
++		void GetPointsFromElementLabel(IssmDouble* element_label,int* numberofpoints,IssmDouble** xylist);
++		void GetElementLabelFromZeroLevelSet(IssmDouble* element_label,int levelset_type);
++		void GetElementLabelFromEstimators(IssmDouble* element_label,int estimator_type);	
++		void GetElementDistanceToZeroLevelSet(IssmDouble** pelementdistance,int levelset_type);
+ 		void SetRefPatterns(void);
+ 		#endif
+ };
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22100)
+@@ -27,12 +27,16 @@
+ 	/*Clean all attributes*/
+ 	this->CleanUp();
+ 	/*Copy all data*/
+-	this->fathermesh			= new TPZGeoMesh(*cp.fathermesh);
+-	this->currentmesh			= new TPZGeoMesh(*cp.currentmesh);
+-	this->levelmax				= cp.levelmax;
+-	this->elementswidth		= cp.elementswidth;
+-	this->regionlevel1		= cp.regionlevel1;
+-	this->regionlevelmax		= cp.regionlevelmax;
++	this->fathermesh						= new TPZGeoMesh(*cp.fathermesh);
++	this->previousmesh					= new TPZGeoMesh(*cp.previousmesh);
++	this->level_max						= cp.level_max;
++	this->radius_level_max				= cp.radius_level_max;
++	this->gradation						= cp.gradation;
++	this->lag								= cp.lag;
++   this->groundingline_distance		= cp.groundingline_distance;
++	this->icefront_distance				= cp.icefront_distance;
++	this->thicknesserror_threshold	= cp.thicknesserror_threshold;
++	this->deviatoricerror_threshold	= cp.deviatoricerror_threshold;
+ 	this->sid2index.clear();
+ 	this->sid2index.resize(cp.sid2index.size());
+ 	for(int i=0;i<cp.sid2index.size();i++) this->sid2index[i]=cp.sid2index[i];
+@@ -55,11 +59,15 @@
+ 
+ 	/*Verify and delete all data*/
+ 	if(this->fathermesh)    delete this->fathermesh;
+-	if(this->currentmesh)   delete this->currentmesh;
+-	this->levelmax				= -1;
+-	this->elementswidth		= -1;
+-	this->regionlevel1		= -1;
+-	this->regionlevelmax		= -1;
++	if(this->previousmesh)  delete this->previousmesh;
++	this->level_max						= -1;
++	this->radius_level_max				= -1;
++	this->gradation						= -1;
++	this->lag								= -1;
++   this->groundingline_distance		= -1;
++	this->icefront_distance				= -1;
++	this->thicknesserror_threshold	= -1;
++	this->deviatoricerror_threshold	= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -68,14 +76,16 @@
+ void AdaptiveMeshRefinement::Initialize(){/*{{{*/
+ 
+ 	/*Set pointers to NULL*/
+-	this->fathermesh			= NULL;
+-	this->currentmesh			= NULL;
+-	this->levelmax				= -1;
+-	this->elementswidth		= -1;
+-	this->regionlevel1		= -1;
+-	this->regionlevelmax		= -1;
+-	this->step					= 0;
+-	this->smooth_frequency	= 1;
++	this->fathermesh						= NULL;
++	this->previousmesh					= NULL;
++	this->level_max						= -1;
++	this->radius_level_max				= -1;
++	this->gradation						= -1;
++	this->lag								= -1;
++   this->groundingline_distance		= -1;
++	this->icefront_distance				= -1;
++	this->thicknesserror_threshold	= -1;
++	this->deviatoricerror_threshold	= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -83,75 +93,53 @@
+ /*}}}*/
+ 
+ /*Mesh refinement methods*/
+-void AdaptiveMeshRefinement::Execute(bool &amr_verbose,
+-												int &numberofelements,
+-												double* partiallyfloatedelements,
+-												double *masklevelset,
+-												double* deviatorictensorerror,
+-												double* thicknesserror,
+-												int &newnumberofvertices,int &newnumberofelements,double** x,double** y,int** elementslist){/*{{{*/
++void AdaptiveMeshRefinement::ExecuteRefinement(int numberofpoints,double* xylist,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
+ 
+-	/*IMPORTANT! newelements are in Matlab indexing*/
++	/*IMPORTANT! pelementslist are in Matlab indexing*/
+ 	/*NEOPZ works only in C indexing*/
+-	if(!this->fathermesh || !this->currentmesh) _error_("Impossible to execute refinement: fathermesh or currentmesh is NULL!\n");
+-	if(numberofelements!=this->sid2index.size()) _error_("Impossible to execute refinement: sid2index.size is not equal to numberofelements!\n");
++	if(!this->fathermesh || !this->previousmesh) _error_("Impossible to execute refinement: fathermesh or previousmesh is NULL!\n");
+ 
+-	/*Combine the fields*/
+-	double mean_mask		= 0;
+-	double mean_tauerror = 0;
+-	double mean_Herror	= 0;
+-	int* fmask				= xNew<int>(numberofelements);
+-	int* ftauerror			= xNew<int>(numberofelements);
+-	int* fHerror			= xNew<int>(numberofelements);
+-	int* phi					= xNew<int>(numberofelements);
+-	/*Calculate mean values*/
+-	for(int i=0;i<this->sid2index.size();i++){
+-		mean_mask		+= masklevelset[i]; 
+-		mean_tauerror	+= deviatorictensorerror[i]; 
+-		mean_Herror		+= thicknesserror[i];
+-	}
+-	mean_mask		/= this->sid2index.size();
+-	mean_tauerror	/= this->sid2index.size();
+-	mean_Herror		/= this->sid2index.size();
+-	/*Filter to thickness*/
+-	for(int i=0;i<this->sid2index.size();i++){
+-		fmask[i]=0;
+-		if(thicknesserror[i]>mean_Herror) fmask[i]=1;
+-	}
+-	/*Filter to tau*/
+-	for(int i=0;i<this->sid2index.size();i++){
+-		ftauerror[i]=0;
+-		if(deviatorictensorerror[i]>mean_tauerror) ftauerror[i]=1;
+-	}
+-	/*Sum*/
+-	for(int i=0;i<this->sid2index.size();i++){
+-		phi[i]=ftauerror[i]+fmask[i];
+-	}
++	/*Intermediaries*/
++	bool verbose=VerboseSolution();
+ 
+-	/*Execute the refinement.*/
+-	this->RefinementProcess(amr_verbose,partiallyfloatedelements,masklevelset,deviatorictensorerror,thicknesserror);
++	/*Refine the mesh using level max*/
++	this->RefineMesh(verbose,this->previousmesh,numberofpoints,xylist);
++	
++	/*Get new geometric mesh in ISSM data structure*/
++	this->GetMesh(this->previousmesh,pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
++
++	/*Verify the new geometry*/
++	this->CheckMesh(pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
++	
++	if(verbose) _printf_("\trefinement process done!\n");
++}
++/*}}}*/
++void AdaptiveMeshRefinement::ExecuteRefinement(double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
++
++	/*IMPORTANT! pelementslist are in Matlab indexing*/
++	/*NEOPZ works only in C indexing*/
++	if(!this->fathermesh || !this->previousmesh) _error_("Impossible to execute refinement: fathermesh or previousmesh is NULL!\n");
++
++	/*Intermediaries*/
++	bool verbose=true;
++	
++	/*Execute refinement*/
++	this->RefinementProcess(verbose,gl_elementdistance,if_elementdistance,deviatoricerror,thicknesserror);
+    
+ 	/*Get new geometric mesh in ISSM data structure*/
+-	this->GetMesh(newnumberofvertices,newnumberofelements,x,y,elementslist);
++	this->GetMesh(this->previousmesh,pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+ 
+-	std::ofstream file("/home/santos/mesh.vtk");
+-	TPZVTKGeoMesh::PrintGMeshVTK(this->currentmesh,file);
+-
+ 	/*Verify the new geometry*/
+-	this->CheckMesh(newnumberofvertices,newnumberofelements,this->elementswidth,x,y,elementslist);
+-
++	this->CheckMesh(pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefinementProcess(bool &amr_verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror){/*{{{*/
++void AdaptiveMeshRefinement::RefinementProcess(bool &verbose,double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror){/*{{{*/
+    
+-	if(amr_verbose) _printf_("\n\trefinement process started (level max = " << this->levelmax << ")\n");
++	if(verbose) _printf_("\n\trefinement process started (level max = " << this->level_max << ")\n");
+ 	
+ 	/*Intermediaries*/
+ 	TPZGeoMesh* nohangingnodesmesh=NULL;
+ 
+-	//itapopo
+-	this->step++;
+-
+ 	double mean_mask		= 0;
+ 	double mean_tauerror = 0;
+ 	double mean_Herror	= 0;
+@@ -160,6 +148,7 @@
+ 	std::vector<int> specialfatherindex; specialfatherindex.clear();
+ 
+ 	/*Calculate mean values*/
++	/*
+ 	for(int i=0;i<this->sid2index.size();i++){
+ 		mean_mask		+= masklevelset[i]; 
+ 		mean_tauerror	+= deviatorictensorerror[i]; 
+@@ -168,13 +157,13 @@
+ 	mean_mask		/= this->sid2index.size();
+ 	mean_tauerror	/= this->sid2index.size();
+ 	mean_Herror		/= this->sid2index.size();
+-
+-	if(amr_verbose) _printf_("\t\tdeal with special elements...\n");
++	*/
++	if(verbose) _printf_("\t\tdeal with special elements...\n");
+ 	/*Deal with special elements*/
+ 	for(int i=0;i<this->specialelementsindex.size();i++){
+ 		if(this->specialelementsindex[i]==-1) continue;
+ 		/*Get special element and verify*/
+-		TPZGeoEl* geoel=this->currentmesh->Element(this->specialelementsindex[i]);
++		TPZGeoEl* geoel=this->previousmesh->Element(this->specialelementsindex[i]);
+ 		if(!geoel)_error_("special element (sid) "<<i<<" is null!\n");
+ 		if(geoel->HasSubElement())_error_("special element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
+ 		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
+@@ -212,30 +201,28 @@
+ 			if(siblings.size()<4){
+ 				/*Ok, the special element can be deleted*/
+ 				siblings[j]->ResetSubElements();
+-				this->currentmesh->DeleteElement(siblings[j],siblings[j]->Index());
++				this->previousmesh->DeleteElement(siblings[j],siblings[j]->Index());
+ 			}
+ 		}
+ 		
+ 		/*Now, verify if the father should be refined with uniform pattern (smoother)*/
+-		this->smooth_frequency=10000000;
+-		if(siblings.size()==3 || this->step%this->smooth_frequency==0){//it keeps the mesh with uniform elements
++		if(siblings.size()==3){//it keeps the mesh with uniform elements
+ 			/*Father has uniform subelements now*/
+ 			TPZVec<TPZGeoEl *> sons;
+ 			father->Divide(sons);
+-			this->smooth_frequency=this->step;
+ 		}else{
+ 			specialfatherindex.push_back(father->Index());
+ 		}
+ 		if(this->specialelementsindex[i]!=-1) _error_("special element "<<i<<" was not deleted!\n");	
+ 	}
+-	this->currentmesh->BuildConnectivity();
++	this->previousmesh->BuildConnectivity();
+ 	
+-	if(amr_verbose) _printf_("\t\tuniform refinement...\n");
++	if(verbose) _printf_("\t\tuniform refinement...\n");
+ 	/*Deal with uniform elemnts*/
+ 	for(int i=0;i<this->sid2index.size();i++){
+ 		if(this->sid2index[i]==-1) continue;
+ 		/*Get element and verify*/
+-		TPZGeoEl* geoel=this->currentmesh->Element(this->sid2index[i]);
++		TPZGeoEl* geoel=this->previousmesh->Element(this->sid2index[i]);
+ 		if(geoel->HasSubElement()) _error_("element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
+ 		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
+ 
+@@ -251,7 +238,7 @@
+ 				}
+ 			}
+ 			TPZVec<TPZGeoEl *> sons;
+-			if(geoel->Level()<this->levelmax && count==0) geoel->Divide(sons);
++			if(geoel->Level()<this->level_max && count==0) geoel->Divide(sons);
+ 		} 
+ 		else if(geoel->Level()>0)
+ 		{/*Unrefine process*/
+@@ -273,7 +260,7 @@
+ 			/*Verify if this group should be unrefined*/
+ 			if(group_Herror>0 && group_Herror<0*mean_Herror){ //itapopo
+ 				/*Reset subelements in the father*/
+-				this->currentmesh->Element(geoel->Father()->Index())->ResetSubElements();
++				this->previousmesh->Element(geoel->Father()->Index())->ResetSubElements();
+ 				/*Delete the elements and set their indexes in the index2sid and sid2index*/
+ 				for (int j=0;j<siblings.size();j++){
+ 					index	= siblings[j]->Index();
+@@ -280,23 +267,127 @@
+ 					sid	= this->index2sid[index];
+ 					this->index2sid[index]=-1;
+ 					if(sid!=-1) this->sid2index[sid]=-1;
+-					this->currentmesh->DeleteElement(siblings[j],siblings[j]->Index());
++					this->previousmesh->DeleteElement(siblings[j],siblings[j]->Index());
+ 				}//for j
+ 			}//if
+ 		}/*Unrefine process*/
+ 	}//for i
+-	this->currentmesh->BuildConnectivity();
++	this->previousmesh->BuildConnectivity();
+ 	
+-	if(amr_verbose) _printf_("\t\trefine to avoid hanging nodes...\n");
+-	this->RefineMeshToAvoidHangingNodes(this->currentmesh);
++	if(verbose) _printf_("\t\trefine to avoid hanging nodes...\n");
++	this->RefineMeshToAvoidHangingNodes(verbose,this->previousmesh);
+ 	
+ 		//nohangingnodesmesh = this->CreateRefPatternMesh(newmesh); itapopo tentar otimizar
+ 
+-	if(amr_verbose) _printf_("\trefinement process done!\n");
++	if(verbose) _printf_("\trefinement process done!\n");
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefineMesh(TPZGeoMesh *gmesh,std::vector<int> &elements){/*{{{*/
++void AdaptiveMeshRefinement::RefineMesh(bool &verbose,TPZGeoMesh* gmesh,int numberofpoints,double* xylist){/*{{{*/
++	
++	/*Verify if there are points*/
++	if(numberofpoints==0) return;	
+ 
++	/*Intermediaries*/
++	int nelem			=-1;
++	int side2D			= 6;
++	double radius_h	=-1;
++	double radius_hmax=std::max(this->radius_level_max,std::max(this->groundingline_distance,this->icefront_distance));
++	int count			=-1;
++	double mindistance=0.;
++	double distance	=0.;;
++	TPZVec<REAL> qsi(2,0.),cp(3,0.);
++	TPZVec<TPZGeoEl*> sons;
++ 
++	/*First, delete the special elements*/
++	this->DeleteSpecialElements(verbose,gmesh);
++	
++	/*Refinement process: loop over level of refinements{{{*/
++	if(verbose) _printf_("\trefinement process (level max = "<<this->level_max<<")\n");
++	for(int h=1;h<=this->level_max;h++){
++		if(verbose) _printf_("\tlevel "<<h<<" (total: ");
++		count=0;
++
++		/*Filter: set the region/radius for level h*/
++		radius_h=radius_hmax*std::pow(this->gradation,this->level_max-h);
++
++		/*Find the minimal distance of the elements (center point) to the points */ 
++		nelem=gmesh->NElements();//must keep here
++		for(int i=0;i<nelem;i++){//itapopo pode-se reduzir o espaço de busca aqui
++			if(!gmesh->Element(i)) continue;
++			if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
++			if(gmesh->Element(i)->HasSubElement()) continue;
++			if(gmesh->Element(i)->Level()>=h) continue;
++			gmesh->Element(i)->CenterPoint(side2D,qsi);
++			gmesh->Element(i)->X(qsi,cp);
++			mindistance=radius_h;
++			for (int j=0;j<numberofpoints;j++){
++				distance		= std::sqrt( (xylist[2*j]-cp[0])*(xylist[2*j]-cp[0])+(xylist[2*j+1]-cp[1] )*(xylist[2*j+1]-cp[1]) );
++				mindistance = std::min(mindistance,distance);//min distance to the point
++			}
++			/*If the element is inside the region, refine it*/
++			if(mindistance<radius_h){ 
++				gmesh->Element(i)->Divide(sons);
++				count++;
++			}
++		}
++		if(verbose) _printf_(""<<count<<")\n");
++	}
++	/*Adjust the connectivities before continue*/
++	gmesh->BuildConnectivity();
++	/*}}}*/
++	
++	/*Unrefinement process: loop over level of refinements{{{*/
++	if(verbose) _printf_("\tunrefinement process...\n");
++	for(int h=this->level_max;h>=1;h--){
++		if(verbose) _printf_("\tlevel "<<h<<" (total: ");
++		count=0;
++		
++		/*Filter with lag: set the region/radius for level h*/
++		radius_h=this->lag*radius_hmax*std::pow(this->gradation,this->level_max-h);
++		
++		/*Find the minimal distance of the elements (center point) to the points */ 
++		nelem=gmesh->NElements();//must keep here
++		for(int i=0;i<nelem;i++){//itapopo pode-se reduzir o espaço de busca aqui
++			if(!gmesh->Element(i)) continue;
++			if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
++			if(gmesh->Element(i)->HasSubElement()) continue;
++			if(gmesh->Element(i)->Level()!=h) continue;
++			if(!gmesh->Element(i)->Father()) _error_("father is NULL!\n");
++			/*Get the sons of the father (sibilings)*/	
++			sons.clear();
++			gmesh->Element(i)->Father()->GetHigherSubElements(sons);
++			if(sons.size()!=4) continue;//delete just group of 4 elements. This avoids big holes in the mesh
++			/*Find the minimal distance of the group*/	
++			mindistance=INFINITY;
++			for(int s=0;s<sons.size();s++){
++				sons[s]->CenterPoint(side2D,qsi);
++				sons[s]->X(qsi,cp);
++				for (int j=0;j<numberofpoints;j++){
++					distance		= std::sqrt( (xylist[2*j]-cp[0])*(xylist[2*j]-cp[0])+(xylist[2*j+1]-cp[1] )*(xylist[2*j+1]-cp[1]) );
++					mindistance = std::min(mindistance,distance);//min distance to the point
++				}
++			}
++			/*If the group is outside the region, unrefine the group*/
++			if(mindistance>radius_h){ 
++				gmesh->Element(i)->Father()->ResetSubElements();
++				count++;
++				for(int s=0;s<sons.size();s++){
++					gmesh->DeleteElement(sons[s],sons[s]->Index());
++				}
++			}
++		}
++		if(verbose) _printf_(""<<count<<")\n");
++	}
++	/*Adjust the connectivities before continue*/
++	gmesh->BuildConnectivity();
++	/*}}}*/
++	
++	/*Now, insert special elements to avoid hanging nodes*/
++	this->RefineMeshToAvoidHangingNodes(verbose,gmesh);
++}
++/*}}}*/
++void AdaptiveMeshRefinement::RefineMesh(TPZGeoMesh* gmesh,std::vector<int> &elements){/*{{{*/
++
+ 	/*Refine elements: uniform pattern refinement*/
+ 	for(int i=0;i<elements.size();i++){
+ 		/*Get geometric element and verify if it has already been refined*/
+@@ -311,32 +402,65 @@
+ 	gmesh->BuildConnectivity();
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes(TPZGeoMesh *gmesh){/*{{{*/
++void AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh){/*{{{*/
+    
+ 	/*Now, insert special elements to avoid hanging nodes*/
+-	this->specialelementsindex.clear();
+-	const int NElem = gmesh->NElements();
+-	for(int i=0;i<NElem;i++){
+-		/*Get geometric element and verify if it has already been refined. Geoel may not have been previously refined*/
+-		TPZGeoEl * geoel=gmesh->Element(i);
+-		if(!geoel) continue;
+-		if(geoel->HasSubElement()) continue;
+-		if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
+-		/*Get the refinement pattern for this element and refine it*/
+-		TPZAutoPointer<TPZRefPattern> refp=TPZRefPatternTools::PerfectMatchRefPattern(geoel);
+-		if(refp){
+-			/*Non-uniform refinement*/
+-			TPZVec<TPZGeoEl *> Sons;
+-			geoel->SetRefPattern(refp);
+-			geoel->Divide(Sons);
+-			/*Keep the index of the special elements*/
+-			for(int j=0;j<Sons.size();j++) this->specialelementsindex.push_back(Sons[j]->Index());
++	if(verbose) _printf_("\trefining to avoid hanging nodes (total: ");
++	
++	/*Intermediaries*/
++	int nelem=-1;
++	int count= 1;
++	
++	while(count>0){
++		nelem=gmesh->NElements();//must keep here
++		count=0;
++		for(int i=0;i<nelem;i++){
++			/*Get geometric element and verify if it has already been refined. Geoel may not have been previously refined*/
++			TPZGeoEl * geoel=gmesh->Element(i);
++			if(!geoel) continue;
++			if(geoel->HasSubElement()) continue;
++			if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
++			/*Get the refinement pattern for this element and refine it*/
++			TPZAutoPointer<TPZRefPattern> refp=TPZRefPatternTools::PerfectMatchRefPattern(geoel);
++			if(refp){
++				/*Non-uniform refinement*/
++				TPZVec<TPZGeoEl *> sons;
++				geoel->SetRefPattern(refp);
++				geoel->Divide(sons);
++				count++;
++				/*Keep the index of the special elements*/
++				for(int j=0;j<sons.size();j++) this->specialelementsindex.push_back(sons[j]->Index());
++			}
+ 		}
++		if(verbose){
++			if(count==0) _printf_(""<<count<<")\n");
++			else _printf_(""<<count<<", ");
++		}
++		gmesh->BuildConnectivity();
+ 	}
++}
++/*}}}*/
++void AdaptiveMeshRefinement::DeleteSpecialElements(bool &verbose,TPZGeoMesh* gmesh){/*{{{*/
++
++	/*Intermediaries*/
++	int count=0;
++
++	if(verbose) _printf_("\tdelete "<<this->specialelementsindex.size()<<" special elements (total: ");
++	for(int i=0;i<this->specialelementsindex.size();i++){
++		if(this->specialelementsindex[i]==-1) continue;
++		if(!gmesh->Element(this->specialelementsindex[i])) continue;
++		if(gmesh->Element(this->specialelementsindex[i])->Father()) gmesh->Element(this->specialelementsindex[i])->Father()->ResetSubElements();
++		gmesh->DeleteElement(gmesh->Element(this->specialelementsindex[i]),this->specialelementsindex[i]);
++		count++;
++	}
++	if(verbose) _printf_(""<<count<<")\n");
++	/*Cleanup*/
++	this->specialelementsindex.clear();
++	/*Adjust connectivities*/
+ 	gmesh->BuildConnectivity();
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::GetMesh(int &nvertices,int &nelements,double** px,double** py, int** pelements){/*{{{*/
++void AdaptiveMeshRefinement::GetMesh(TPZGeoMesh* gmesh,int* nvertices,int* nelements,double** px,double** py, int** pelements){/*{{{*/
+ 
+ 	/* IMPORTANT! pelements are in Matlab indexing
+ 	   NEOPZ works only in C indexing.
+@@ -345,26 +469,17 @@
+ 		Avoid to call this method before Refinement Process.*/
+ 
+ 	/*Intermediaries */
+-	TPZGeoMesh* gmesh = this->currentmesh;//itapopo confirmar
+-	
+ 	long sid,nodeindex;
+-	int nconformelements,nconformvertices;	
++	int nconformelements,nconformvertices;
++	int ntotalvertices		= gmesh->NNodes();
+ 	int* newelements			= NULL;
+-	double* newmeshX			= NULL;//xNew<double>(ntotalvertices);
+-	double* newmeshY			= NULL;//xNew<double>(ntotalvertices);
++	double* newmeshX			= NULL;
++	double* newmeshY			= NULL;
+ 	TPZGeoEl* geoel			= NULL;
+-	long* vertex_index2sid 	= xNew<long>(gmesh->NNodes());
++	long* vertex_index2sid 	= xNew<long>(ntotalvertices);
+ 	this->index2sid.clear(); this->index2sid.resize(gmesh->NElements());
+ 	this->sid2index.clear();
+ 	
+-	/*Get mesh coords */
+-	//for(int i=0;i<ntotalvertices;i++ ){
+-	//	TPZVec<REAL> coords(3,0.);
+-	//	gmesh->NodeVec()[i].GetCoordinates(coords);
+-	//	newmeshX[i] = coords[0];
+-	//	newmeshY[i] = coords[1];
+-	//}
+-
+ 	/*Fill in the vertex_index2sid vector with non usual index value*/
+ 	for(int i=0;i<gmesh->NNodes();i++) vertex_index2sid[i]=-1;
+ 	
+@@ -378,11 +493,12 @@
+ 		if(!geoel) continue;
+ 		if(geoel->HasSubElement()) continue;
+ 		if(geoel->MaterialId() != this->GetElemMaterialID()) continue;
+-		this->sid2index.push_back(i);//keep the element index
+-		this->index2sid[i]=this->sid2index.size()-1;//keep the element sid
+-		for(int j=0;j<this->elementswidth;j++){
++		this->sid2index.push_back(geoel->Index());//keep the element index
++		this->index2sid[geoel->Index()]=this->sid2index.size()-1;//keep the element sid
++		for(int j=0;j<this->GetNumberOfNodes();j++){
+       	nodeindex=geoel->NodeIndex(j);
+-      	if(vertex_index2sid[nodeindex]==-1){
++      	if(nodeindex<0) _error_("nodeindex is <0\n");
++			if(vertex_index2sid[nodeindex]==-1){
+       		vertex_index2sid[nodeindex]=sid; 
+ 				sid++;
+ 			}
+@@ -391,25 +507,24 @@
+ 
+ 	nconformelements	= (int)this->sid2index.size();
+ 	nconformvertices	= (int)sid;
+-	newelements			= xNew<int>(nconformelements*this->elementswidth);
++	newelements			= xNew<int>(nconformelements*this->GetNumberOfNodes());
+ 	newmeshX				= xNew<double>(nconformvertices);
+    newmeshY				= xNew<double>(nconformvertices);
+ 
+-	for(int i=0;i<nconformvertices;i++){//over the TPZNode index (fill in the ISSM vertices coords)
+-		sid = vertex_index2sid[i];
+-		if(sid!=-1){
+-			TPZVec<REAL> coords(3,0.);
+-			gmesh->NodeVec()[i].GetCoordinates(coords);
+-			newmeshX[sid] = coords[0];
+-			newmeshY[sid] = coords[1];
+-		}
++	for(int i=0;i<ntotalvertices;i++){//over the TPZNode index (fill in the ISSM vertices coords)
++		sid=vertex_index2sid[i];
++		if(sid==-1) continue;//skip this index (node no used)
++		TPZVec<REAL> coords(3,0.);
++		gmesh->NodeVec()[i].GetCoordinates(coords);
++		newmeshX[sid] = coords[0];
++		newmeshY[sid] = coords[1];
+ 	}
+ 		
+ 	for(int i=0;i<this->sid2index.size();i++){//over the sid (fill the ISSM elements)
+-		for(int j=0;j<this->elementswidth;j++) {
++		for(int j=0;j<this->GetNumberOfNodes();j++) {
+ 			geoel	= gmesh->ElementVec()[this->sid2index[i]];
+ 			sid	= vertex_index2sid[geoel->NodeIndex(j)];
+-			newelements[i*this->elementswidth+j]=(int)sid+1;//C to Matlab indexing
++			newelements[i*this->GetNumberOfNodes()+j]=(int)sid+1;//C to Matlab indexing
+ 		}
+ 		/*Verify the Jacobian determinant. If detJ<0, swap the 2 first postions:
+ 		  a -> b
+@@ -417,9 +532,9 @@
+ 		double detJ,xa,xb,xc,ya,yb,yc;
+ 		int a,b,c;
+ 
+-		a=newelements[i*this->elementswidth+0]-1;
+-		b=newelements[i*this->elementswidth+1]-1;
+-		c=newelements[i*this->elementswidth+2]-1;
++		a=newelements[i*this->GetNumberOfNodes()+0]-1;
++		b=newelements[i*this->GetNumberOfNodes()+1]-1;
++		c=newelements[i*this->GetNumberOfNodes()+2]-1;
+ 
+ 		xa=newmeshX[a]; ya=newmeshY[a];
+ 		xb=newmeshX[b]; yb=newmeshY[b];
+@@ -429,14 +544,14 @@
+ 	
+ 		/*verify and swap, if necessary*/
+ 		if(detJ<0) {
+-			newelements[i*this->elementswidth+0]=b+1;//a->b
+-			newelements[i*this->elementswidth+1]=a+1;//b->a
++			newelements[i*this->GetNumberOfNodes()+0]=b+1;//a->b
++			newelements[i*this->GetNumberOfNodes()+1]=a+1;//b->a
+ 		}
+ 	}
+ 
+ 	/*Setting outputs*/
+-	nvertices	= nconformvertices;
+-	nelements	= nconformelements;
++	*nvertices	= nconformvertices;
++	*nelements	= nconformelements;
+ 	*px			= newmeshX;
+ 	*py		   = newmeshY;
+ 	*pelements	= newelements;
+@@ -445,66 +560,16 @@
+ 	xDelete<long>(vertex_index2sid);
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::FindElements(int &numberofpoints,double* xp,double* yp,TPZGeoMesh *gmesh,int &hlevel,std::vector<int> &elements){/*{{{*/
++void AdaptiveMeshRefinement::CreateInitialMesh(int &nvertices,int &nelements,double* x,double* y,int* elements){/*{{{*/
+ 
+-	if(!gmesh) _error_("Impossible to set elements: gmesh is NULL!\n");
+-
+-	if(false){
+-		this->AllElements(gmesh,elements); //uniform, refine all elements!
+-		return;
+-	}
+-
+-	/*Intermediaries*/
+-	elements.clear();
+-	double D1		= this->regionlevel1;
+-	double Dhmax	= this->regionlevelmax;
+-	int hmax			= this->levelmax;
+-	double alpha	= (hmax==1) ? 0. : log(D1/Dhmax)/(hmax-1.);
+-	double Di		= D1/exp(alpha*(hlevel-1));
+-	int side2D		= 6;
+-	double distance,value;
+-    
+-	/*Find elements near the points */ 
+-	for(int i=0;i<gmesh->NElements();i++){
+-		if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+-		if(gmesh->Element(i)->HasSubElement()) continue;
+-		if(gmesh->Element(i)->Level()>=hlevel) continue;
+-		TPZVec<REAL> qsi(2,0.);
+-		TPZVec<REAL> centerPoint(3,0.);
+-		gmesh->Element(i)->CenterPoint(side2D, qsi);
+-		gmesh->Element(i)->X(qsi, centerPoint);
+-		distance = Di;
+-		for (int j=0;j<numberofpoints;j++){
+-			value = std::sqrt( (xp[j]-centerPoint[0])*(xp[j]-centerPoint[0])+(yp[j]-centerPoint[1] )*(yp[j]-centerPoint[1]) );//sqrt( (x2-x1)^2 + (y2-y1)^2 )
+-			if(value<distance) distance=value; //min distance to the point
+-		}  
+-		if(distance<Di) elements.push_back(i);
+-	}
+-
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::AllElements(TPZGeoMesh *gmesh,std::vector<int> &elements){/*{{{*/
+-    /* Uniform refinement. This refines the entire mesh */
+-    int nelements = gmesh->NElements();
+-	 elements.clear();
+-    for(int i=0;i<nelements;i++){
+-        if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+-        if(gmesh->Element(i)->HasSubElement()) continue;
+-        elements.push_back(i);
+-    }
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::CreateInitialMesh(int &nvertices,int &nelements,int &width,double* x,double* y,int* elements){/*{{{*/
+-
+ 	/* IMPORTANT! elements come in Matlab indexing
+ 		NEOPZ works only in C indexing*/
+ 	
+ 	if(nvertices<=0) _error_("Impossible to create initial mesh: nvertices is <= 0!\n");
+    if(nelements<=0) _error_("Impossible to create initial mesh: nelements is <= 0!\n");
+-	this->SetElementWidth(width);
+ 
+     /*Verify and creating initial mesh*/
+-   if(this->fathermesh || this->currentmesh) _error_("Initial mesh already exists!");
++   if(this->fathermesh || this->previousmesh) _error_("Initial mesh already exists!");
+     
+    this->fathermesh = new TPZGeoMesh();
+ 	this->fathermesh->NodeVec().Resize(nvertices);
+@@ -524,14 +589,14 @@
+ 	/*Generate the elements*/
+ 	long index;
+    const int mat = this->GetElemMaterialID();
+-   TPZManVector<long> elem(this->elementswidth,0);
++   TPZManVector<long> elem(this->GetNumberOfNodes(),0);
+    this->sid2index.clear();
+ 
+ 	for(int i=0;i<nelements;i++){
+-		for(int j=0;j<this->elementswidth;j++) elem[j]=elements[i*this->elementswidth+j]-1;//Convert Matlab to C indexing
++		for(int j=0;j<this->GetNumberOfNodes();j++) elem[j]=elements[i*this->GetNumberOfNodes()+j]-1;//Convert Matlab to C indexing
+       /*reftype = 0: uniform, fast / reftype = 1: uniform and non-uniform (avoid hanging nodes), it is not too fast */
+       const int reftype = 1;
+-      switch(this->elementswidth){
++      switch(this->GetNumberOfNodes()){
+ 			case 3: this->fathermesh->CreateGeoElement(ETriangle,elem,mat,index,reftype);	break;
+          default:	_error_("mesh not supported yet");
+ 		}
+@@ -542,8 +607,8 @@
+ 	}
+    /*Build element and node connectivities*/
+    this->fathermesh->BuildConnectivity();
+-	/*Set current mesh*/
+-	this->currentmesh=new TPZGeoMesh(*this->fathermesh);
++	/*Set previous mesh*/
++	this->previousmesh=new TPZGeoMesh(*this->fathermesh);
+ }
+ /*}}}*/
+ TPZGeoMesh* AdaptiveMeshRefinement::CreateRefPatternMesh(TPZGeoMesh* gmesh){/*{{{*/
+@@ -628,26 +693,11 @@
+ 	return newgmesh;
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::SetLevelMax(int &h){/*{{{*/
+-    this->levelmax = h;
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::SetRegions(double &D1,double Dhmax){/*{{{*/
+-    this->regionlevel1	 = D1;
+-    this->regionlevelmax = Dhmax;
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::SetElementWidth(int &width){/*{{{*/
+-	if(width!=3) _error_("elementswidth not supported yet!");
+-   this->elementswidth = width;
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::CheckMesh(int &nvertices,int &nelements,int &width,double** px,double** py,int** pelements){/*{{{*/
++void AdaptiveMeshRefinement::CheckMesh(int* nvertices,int* nelements,double** px,double** py,int** pelements){/*{{{*/
+ 
+ 	/*Basic verification*/
+ 	if(nvertices<=0) _error_("Impossible to continue: nvertices <=0!\n");
+ 	if(nelements<=0) _error_("Impossible to continue: nelements <=0!\n");
+-	if(width!=3) _error_("Impossible to continue: width !=3!\n"); 
+ 	if(!px) _error_("Impossible to continue: px is NULL!\n");
+ 	if(!py) _error_("Impossible to continue: py is NULL!\n");
+ 	if(!pelements) _error_("Impossible to continue: pelements is NULL!\n");
+@@ -655,23 +705,174 @@
+ 	/*Verify if there are orphan nodes*/
+ 	std::set<int> elemvertices;
+ 	elemvertices.clear(); 
+-	for(int i=0;i<nelements;i++){
+-		for(int j=0;j<width;j++) {
+-			elemvertices.insert((*pelements)[i*width+j]);
++	for(int i=0;i<*nelements;i++){
++		for(int j=0;j<this->GetNumberOfNodes();j++) {
++			elemvertices.insert((*pelements)[i*this->GetNumberOfNodes()+j]);
+ 		}
+ 	}
+-	if(elemvertices.size()!=nvertices) _error_("Impossible to continue: elemvertices.size() != nvertices!\n");
++	if(elemvertices.size()!=*nvertices) _error_("Impossible to continue: elemvertices.size() != nvertices!\n");
+ 	
+ 	//Verify if there are inf or NaN in coords
+-	for(int i=0;i<nvertices;i++){
++	for(int i=0;i<*nvertices;i++){
+ 		if(isnan((*px)[i]) || isinf((*px)[i])) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n"); 
+ 		if(isnan((*py)[i]) || isinf((*py)[i])) _error_("Impossible to continue: py i=" << i <<" is NaN or Inf!\n");
+ 	}
+-	for(int i=0;i<nelements;i++){
+-		for(int j=0;j<width;j++){
+-			if(isnan((*pelements)[i*width+j]) || isinf((*pelements)[i*width+j]) ) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n");
++	for(int i=0;i<*nelements;i++){
++		for(int j=0;j<this->GetNumberOfNodes();j++){
++			if(isnan((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is NaN!\n");
++			if(isinf((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is Inf!\n");
+ 		}
+ 	}
+     
+ }
+ /*}}}*/
++void AdaptiveMeshRefinement::PrintGMeshVTK(TPZGeoMesh* gmesh,std::ofstream &file,bool matColor){/*{{{*/
++    
++	file.clear();
++	long nelements = gmesh->NElements();
++	TPZGeoEl *gel;
++	std::stringstream node, connectivity, type, material;
++
++	//Header
++	file << "# vtk DataFile Version 3.0" << std::endl;
++	file << "TPZGeoMesh VTK Visualization" << std::endl;
++	file << "ASCII" << std::endl << std::endl;
++	file << "DATASET UNSTRUCTURED_GRID" << std::endl;
++	file << "POINTS ";
++
++	long actualNode = -1, size = 0, nVALIDelements = 0;
++	for(long el = 0; el < nelements; el++){
++	  gel = gmesh->ElementVec()[el];
++	  if(!gel )//|| (gel->Type() == EOned && !gel->IsLinearMapping()))//Exclude Arc3D and Ellipse3D
++	  {
++			continue;
++	  }
++	  if(gel->HasSubElement())
++	  {
++			continue;
++	  }
++	  MElementType elt = gel->Type();
++	  int elNnodes = MElementType_NNodes(elt);
++	  
++	  size += (1+elNnodes);
++	  connectivity << elNnodes;
++	  
++	  for(int t = 0; t < elNnodes; t++)
++	  {
++			for(int c = 0; c < 3; c++)
++			{
++				 double coord = gmesh->NodeVec()[gel->NodeIndex(t)].Coord(c);
++				 node << coord << " ";
++			}
++			node << std::endl;
++			
++			actualNode++;
++			connectivity << " " << actualNode;
++	  }
++	  connectivity << std::endl;
++	  
++	  int elType = this->GetVTK_ElType(gel);
++	  type << elType << std::endl;
++	  
++	  if(matColor == true)
++	  {
++			material << gel->MaterialId() << std::endl;
++	  }
++	  else
++	  {
++			material << gel->Index() << std::endl;
++	  }
++	  
++	  nVALIDelements++;
++	}
++	node << std::endl;
++	actualNode++;
++	file << actualNode << " float" << std::endl << node.str();
++
++	file << "CELLS " << nVALIDelements << " ";
++
++	file << size << std::endl;
++	file << connectivity.str() << std::endl;
++
++	file << "CELL_TYPES " << nVALIDelements << std::endl;
++	file << type.str() << std::endl;
++
++	file << "CELL_DATA" << " " << nVALIDelements << std::endl;
++	file << "FIELD FieldData 1" << std::endl;
++	if(matColor == true)
++	{
++	  file << "material 1 " << nVALIDelements << " int" << std::endl;
++	}
++	else
++	{
++	  file << "ElementIndex 1 " << nVALIDelements << " int" << std::endl;
++	}
++	file << material.str();
++	file.close();
++}
++/*}}}*/
++int AdaptiveMeshRefinement::GetVTK_ElType(TPZGeoEl * gel){/*{{{*/
++    
++	MElementType pzElType = gel->Type();
++    
++    int elType = -1;
++    switch (pzElType)
++    {
++        case(EPoint):
++        {
++            elType = 1;
++            break;
++        }
++        case(EOned):
++        {
++            elType = 3;    
++            break;
++        }
++        case (ETriangle):
++        {
++            elType = 5;
++            break;                
++        }
++        case (EQuadrilateral):
++        {
++            elType = 9;
++            break;                
++        }
++        case (ETetraedro):
++        {
++            elType = 10;
++            break;                
++        }
++        case (EPiramide):
++        {
++            elType = 14;
++            break;                
++        }
++        case (EPrisma):
++        {
++            elType = 13;
++            break;                
++        }
++        case (ECube):
++        {
++            elType = 12;
++            break;                
++        }
++        default:
++        {
++            std::cout << "Element type not found on " << __PRETTY_FUNCTION__ << std::endl;
++            DebugStop();
++            break;    
++        }
++    }
++    if(elType == -1)
++    {
++        std::cout << "Element type not found on " << __PRETTY_FUNCTION__ << std::endl;
++        std::cout << "MIGHT BE CURVED ELEMENT (quadratic or quarter point)" << std::endl;
++        DebugStop();
++    }
++    
++    return elType;
++}
++/*}}}*/
++
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22100)
+@@ -3589,7 +3589,6 @@
+    /*Cleanup*/
+    xDelete<IssmDouble>(elementlevelset);
+    delete vmasklevelset;
+-
+ }
+ /*}}}*/
+ void FemModel::GetElementCenterCoordinates(IssmDouble** pxc,IssmDouble** pyc){/*{{{*/
+@@ -3633,6 +3632,92 @@
+    delete vyc;
+ }
+ /*}}}*/
++void FemModel::GetZeroLevelSetPoints(IssmDouble** pzerolevelset_points,int &numberofpoints,int levelset_type){/*{{{*/
++
++	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
++	/*pzerolevelset_points are the element center points with zero level set. X and Y coords*/
++	if(levelset_type!=MaskGroundediceLevelsetEnum && levelset_type!=MaskIceLevelsetEnum){
++		_error_("level set type not implemented yet!");
++	}
++	
++	/*Outputs*/
++	IssmDouble* zerolevelset_points			= NULL;
++	int npoints										= 0;
++	
++	/*Intermediaries*/
++ 	int elementswidth                   	= this->GetElementsWidth();
++   int numberofelements                	= this->elements->NumberOfElements();
++	int* elem_vertices         				= xNew<int>(elementswidth);
++   IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
++   IssmDouble* x									= NULL;
++   IssmDouble* y									= NULL;
++   IssmDouble* z									= NULL;
++	Vector<IssmDouble>* vx_zerolevelset		= new Vector<IssmDouble>(numberofelements);
++	Vector<IssmDouble>* vy_zerolevelset		= new Vector<IssmDouble>(numberofelements);
++	IssmDouble* x_zerolevelset					= NULL;
++	IssmDouble* y_zerolevelset					= NULL;
++	int count,sid;
++	IssmDouble xcenter,ycenter;
++	
++	/*Get vertices coordinates*/
++	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
++	
++	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(levelset,levelset_type);
++		element->GetVerticesSidList(elem_vertices);
++		sid 			= element->Sid();
++		xcenter		= NAN;
++		ycenter	 	= NAN;	
++     	Tria* tria 	= xDynamicCast<Tria*>(element);
++		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
++			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
++				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
++				xcenter=(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.;
++				ycenter=(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.;
++			}
++		}
++		vx_zerolevelset->SetValue(sid,xcenter,INS_VAL);
++		vy_zerolevelset->SetValue(sid,ycenter,INS_VAL);
++	}
++   /*Assemble and serialize*/
++   vx_zerolevelset->Assemble();
++   vy_zerolevelset->Assemble();
++   x_zerolevelset=vx_zerolevelset->ToMPISerial();
++   y_zerolevelset=vy_zerolevelset->ToMPISerial();
++
++	/*Find the number of points*/
++	npoints=0;
++	for(int i=0;i<numberofelements;i++) if(!xIsNan<IssmDouble>(x_zerolevelset[i])) npoints++;
++
++	/*Keep just the element center coordinates with zero level set (compact the structure)*/
++	zerolevelset_points=xNew<IssmDouble>(2*npoints);//x and y
++	count=0;
++	for(int i=0;i<numberofelements;i++){
++		if(!xIsNan<IssmDouble>(x_zerolevelset[i])){
++			zerolevelset_points[2*count]	 = x_zerolevelset[i];
++			zerolevelset_points[2*count+1] = y_zerolevelset[i];
++			count++;
++		}
++	}
++	
++	/*Assign outputs*/
++	numberofpoints				= npoints;
++	(*pzerolevelset_points) = zerolevelset_points;
++
++	/*Cleanup*/
++   xDelete<int>(elem_vertices);
++   xDelete<IssmDouble>(levelset);
++	xDelete<IssmDouble>(x_zerolevelset);
++	xDelete<IssmDouble>(y_zerolevelset);
++   xDelete<IssmDouble>(x);
++   xDelete<IssmDouble>(y);
++   xDelete<IssmDouble>(z);
++	delete vx_zerolevelset;
++	delete vy_zerolevelset;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef  _HAVE_DAKOTA_
+@@ -4585,70 +4670,26 @@
+ 	IssmDouble* verticedistance;
+ 	
+ 	/*Intermediaries*/
+- 	int elementswidth                   	= this->GetElementsWidth();
+-   int numberofvertices                	= this->vertices->NumberOfVertices();
+-   int numberofelements                	= this->elements->NumberOfElements();
+-	int* elem_vertices         				= xNew<int>(elementswidth);
+-   IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
+-   IssmDouble* xp									= NULL;
+-   IssmDouble* yp									= NULL;
+-   IssmDouble* x									= NULL;
+-   IssmDouble* y									= NULL;
+-   IssmDouble* z									= NULL;
+-	Vector<IssmDouble>* vx_zerolevelset		= new Vector<IssmDouble>(numberofelements);
+-	Vector<IssmDouble>* vy_zerolevelset		= new Vector<IssmDouble>(numberofelements);
+-	IssmDouble* x_zerolevelset					= NULL;
+-	IssmDouble* y_zerolevelset					= NULL;
+-	int count,sid,npoints;
+-	IssmDouble xcenter,ycenter,distance;
++   int numberofvertices       = this->vertices->NumberOfVertices();
++   IssmDouble* levelset_points= NULL;
++   IssmDouble* x					= NULL;
++   IssmDouble* y					= NULL;
++   IssmDouble* z					= NULL;
++	int numberofpoints;
++	IssmDouble distance;
+ 
+ 	/*Get vertices coordinates*/
+ 	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
+ 	
+-	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
+-   for(int i=0;i<this->elements->Size();i++){
+-      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-      element->GetInputListOnVertices(levelset,levelset_type);
+-		element->GetVerticesSidList(elem_vertices);
+-		sid 			= element->Sid();
+-		xcenter		= NAN;
+-		ycenter	 	= NAN;	
+-     	Tria* tria 	= xDynamicCast<Tria*>(element);
+-		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
+-			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
+-				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
+-				xcenter=(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.;
+-				ycenter=(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.;
+-			}
+-		}
+-		vx_zerolevelset->SetValue(sid,xcenter,INS_VAL);
+-		vy_zerolevelset->SetValue(sid,ycenter,INS_VAL);
+-	}
+-   /*Assemble and serialize*/
+-   vx_zerolevelset->Assemble();
+-   vy_zerolevelset->Assemble();
+-   x_zerolevelset=vx_zerolevelset->ToMPISerial();
+-   y_zerolevelset=vy_zerolevelset->ToMPISerial();
++	/*Get points which level set is zero (center of elements with zero level set)*/	
++	this->GetZeroLevelSetPoints(&levelset_points,numberofpoints,levelset_type);
+ 
+-	/*keep just the element center coordinates with zero level set (compact the structure to save time in the next step)*/
+-	count = 0;
+-	xp 	= xNewZeroInit<IssmDouble>(numberofelements);
+-	yp 	= xNewZeroInit<IssmDouble>(numberofelements);
+-	for(int i=0;i<numberofelements;i++){
+-		if(!xIsNan<IssmDouble>(x_zerolevelset[i])){
+-			xp[count]=x_zerolevelset[i];
+-			yp[count]=y_zerolevelset[i];
+-			count++;
+-		}
+-	}
+-	npoints=count;
+-
+ 	/*Find the minimal vertice distance to the zero levelset (grounding line or ice front)*/
+ 	verticedistance=xNew<IssmDouble>(numberofvertices);
+ 	for(int i=0;i<numberofvertices;i++){
+ 		verticedistance[i]=INFINITY;
+-		for(int j=0;j<npoints;j++){
+-			distance=sqrt((x[i]-xp[j])*(x[i]-xp[j])+(y[i]-yp[j])*(y[i]-yp[j]));
++		for(int j=0;j<numberofpoints;j++){
++			distance=sqrt((x[i]-levelset_points[2*j])*(x[i]-levelset_points[2*j])+(y[i]-levelset_points[2*j+1])*(y[i]-levelset_points[2*j+1]));
+ 			verticedistance[i]=min(distance,verticedistance[i]);		
+ 		}
+ 	}	
+@@ -4657,17 +4698,10 @@
+ 	(*pverticedistance)=verticedistance;
+ 
+ 	/*Cleanup*/
+-   xDelete<int>(elem_vertices);
+-   xDelete<IssmDouble>(levelset);
+-	xDelete<IssmDouble>(x_zerolevelset);
+-	xDelete<IssmDouble>(y_zerolevelset);
+-   xDelete<IssmDouble>(xp);
+-   xDelete<IssmDouble>(yp);
++   xDelete<IssmDouble>(levelset_points);
+    xDelete<IssmDouble>(x);
+    xDelete<IssmDouble>(y);
+    xDelete<IssmDouble>(z);
+-	delete vx_zerolevelset;
+-	delete vy_zerolevelset;
+ }
+ /*}}}*/
+ #endif
+@@ -4676,79 +4710,77 @@
+ void FemModel::ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist){/*{{{*/
+ 
+ 	/*pnewelementslist keep vertices in Matlab indexing*/
+-   int my_rank                         = IssmComm::GetRank();
+-   bool amr_verbose                    = true; //itapopo
+-   IssmDouble* x                       = NULL;
+-   IssmDouble* y                       = NULL;
+-   IssmDouble* z                       = NULL;
+-   int* elementslist                   = NULL;
+-   int oldnumberofelements             = this->elements->NumberOfElements();
+-   int newnumberofvertices 				= -1;
+-	int newnumberofelements 				= -1;
+-	IssmDouble* partiallyfloatedelements= NULL;//itapopo verify if it will be used
+-   IssmDouble* masklevelset            = NULL;
+-   IssmDouble* deviatorictensorerror   = NULL;
+-   IssmDouble* thicknesserror          = NULL;	
++   int my_rank						= IssmComm::GetRank();
++   int numberofelements			= this->elements->NumberOfElements();
++	IssmDouble* element_label	= xNewZeroInit<IssmDouble>(numberofelements);
++	int numberofpoints			= -1;
++	IssmDouble* xylist			= NULL;
++	IssmDouble* newx				= NULL;
++   IssmDouble* newy				= NULL;
++   IssmDouble* newz				= NULL;
++   int* newelementslist			= NULL;
++   int newnumberofvertices		= -1;
++	int newnumberofelements		= -1;
+ 
+-	/*Get the elements in which grounding line goes through*/
+-   //itapopo verificar se irá usar esse this->GetPartiallyFloatedElements(&partiallyfloatedelements);
+-   /*Get mean mask level set over each element*/
+-   this->MeanGroundedIceLevelSet(&masklevelset);
+-   /*Get the deviatoric error estimator*/
+-   this->ZZErrorEstimator(&deviatorictensorerror);
+-   /*Get the thickness error estimator*/
+-   this->ThicknessZZErrorEstimator(&thicknesserror);
++	/*Get element_label, if requested*/
++	if(this->amr->groundingline_distance>0)		this->GetElementLabelFromZeroLevelSet(element_label,MaskGroundediceLevelsetEnum);
++   if(this->amr->icefront_distance>0)				this->GetElementLabelFromZeroLevelSet(element_label,MaskIceLevelsetEnum);
++   if(this->amr->thicknesserror_threshold>0)		this->GetElementLabelFromEstimators(element_label,ThicknessErrorEstimatorEnum);
++   if(this->amr->deviatoricerror_threshold>0)	this->GetElementLabelFromEstimators(element_label,DeviatoricStressErrorEstimatorEnum);
++	this->GetPointsFromElementLabel(element_label,&numberofpoints,&xylist);
+ 
+ 	if(my_rank==0){
+-		this->amr->Execute(amr_verbose,oldnumberofelements,partiallyfloatedelements,masklevelset,deviatorictensorerror,thicknesserror,
+-                           newnumberofvertices,newnumberofelements,&x,&y,&elementslist);
+-      z=xNewZeroInit<IssmDouble>(newnumberofvertices);
++		this->amr->ExecuteRefinement(numberofpoints,xylist,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newelementslist);
++      newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the ReMeshNeopz.");
+ 	}
+ 	else{
+-		x=xNew<IssmDouble>(newnumberofvertices);
+-		y=xNew<IssmDouble>(newnumberofvertices);
+-		z=xNew<IssmDouble>(newnumberofvertices);
+-		elementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
++		newx=xNew<IssmDouble>(newnumberofvertices);
++		newy=xNew<IssmDouble>(newnumberofvertices);
++		newz=xNew<IssmDouble>(newnumberofvertices);
++		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
+ 	}
+ 
+ 	/*Send new mesh to others CPU*/
+ 	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(x,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(y,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(z,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+-	ISSM_MPI_Bcast(elementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
++	ISSM_MPI_Bcast(newelementslist,newnumberofelements*this->GetElementsWidth(),ISSM_MPI_INT,0,IssmComm::GetComm());	
+ 
+ 	/*Assign the pointers*/	
+-	(*pnewelementslist) 	= elementslist; //Matlab indexing
+-	(*pnewx)				  	= x;
+-	(*pnewy)				  	= y;
+-	(*pnewz)				  	= z;
++	(*pnewelementslist) 	= newelementslist; //Matlab indexing
++	(*pnewx)				  	= newx;
++	(*pnewy)				  	= newy;
++	(*pnewz)				  	= newz;
+ 	*pnewnumberofvertices= newnumberofvertices;
+ 	*pnewnumberofelements= newnumberofelements;
+ 
+ 	/*Cleanup*/
+-	xDelete<IssmDouble>(masklevelset);
+-	xDelete<IssmDouble>(deviatorictensorerror);
+-   xDelete<IssmDouble>(thicknesserror);
++	xDelete<IssmDouble>(element_label);
++	xDelete<IssmDouble>(xylist);
+ }
+ /*}}}*/
+ void FemModel::InitializeAdaptiveRefinementNeopz(void){/*{{{*/
+ 	
+ 	/*Define variables*/
+-	int my_rank						= IssmComm::GetRank();
+-	int numberofvertices			= this->vertices->NumberOfVertices();
+-	int numberofelements			= this->elements->NumberOfElements();
+-	IssmDouble* x					= NULL;
+-	IssmDouble* y					= NULL;
+-	IssmDouble* z					= NULL;
+-	int* elements					= NULL;
+-	int elementswidth				= this->GetElementsWidth(); //just tria elements in this version. Itapopo:
+-	int levelmax					= 0;
+-	IssmDouble regionlevel1		= 0.;
+-	IssmDouble regionlevelmax	= 0.;
+-
++	int my_rank										= IssmComm::GetRank();
++	int numberofvertices							= this->vertices->NumberOfVertices();
++	int numberofelements							= this->elements->NumberOfElements();
++	IssmDouble* x									= NULL;
++	IssmDouble* y									= NULL;
++	IssmDouble* z									= NULL;
++	int* elements									= NULL;
++	int level_max									= -1;
++	IssmDouble radius_level_max				= -1;
++	IssmDouble gradation							= -1;
++	IssmDouble lag									= -1;
++	IssmDouble groundingline_distance		= -1;
++	IssmDouble icefront_distance				= -1;
++   IssmDouble thicknesserror_threshold		= -1;
++	IssmDouble deviatoricerror_threshold	= -1;
++	
+ 	/*Initialize field as NULL for now*/
+ 	this->amr = NULL;
+ 
+@@ -4757,19 +4789,30 @@
+ 	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
+ 	
+ 	/*Get amr parameters*/
+-	this->parameters->FindParam(&levelmax,AmrLevelMaxEnum);
+-	this->parameters->FindParam(&regionlevel1,AmrRegionLevel1Enum);
+-	this->parameters->FindParam(&regionlevelmax,AmrRegionLevelMaxEnum);
++	this->parameters->FindParam(&level_max,AmrLevelMaxEnum);
++	this->parameters->FindParam(&radius_level_max,AmrRadiusLevelMaxEnum);
++	this->parameters->FindParam(&gradation,AmrGradationEnum);
++	this->parameters->FindParam(&lag,AmrLagEnum);
++	this->parameters->FindParam(&groundingline_distance,AmrGroundingLineDistanceEnum);
++	this->parameters->FindParam(&icefront_distance,AmrIceFrontDistanceEnum);
++	this->parameters->FindParam(&thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
+ 
+ 	/*Create initial mesh (coarse mesh) in neopz data structure*/ 
+ 	/*Just CPU #0 should keep AMR object*/
+    /*Initialize refinement pattern*/
+ 	this->SetRefPatterns();
++	this->amr = new AdaptiveMeshRefinement();
++	this->amr->level_max							= level_max;
++	this->amr->radius_level_max				= radius_level_max;
++	this->amr->gradation							= gradation;
++	this->amr->lag									= lag;
++	this->amr->groundingline_distance		= groundingline_distance;
++	this->amr->icefront_distance				= icefront_distance;
++	this->amr->thicknesserror_threshold		= thicknesserror_threshold;
++	this->amr->deviatoricerror_threshold	= deviatoricerror_threshold;
+ 	if(my_rank==0){ 
+-		this->amr = new AdaptiveMeshRefinement();
+-		this->amr->CreateInitialMesh(numberofvertices,numberofelements,elementswidth,x,y,elements);
+-		this->amr->SetLevelMax(levelmax); //Set max level of refinement
+-		this->amr->SetRegions(regionlevel1,regionlevelmax);
++		this->amr->CreateInitialMesh(numberofvertices,numberofelements,x,y,elements);
+ 	}
+ 
+ 	/*Free the vectors*/
+@@ -4779,6 +4822,184 @@
+ 	xDelete<int>(elements);
+ }
+ /*}}}*/
++void FemModel::GetPointsFromElementLabel(IssmDouble* element_label,int* pnumberofpoints,IssmDouble** pxylist){/*{{{*/
++
++	if(!element_label) _error_("element_label is NULL!\n");
++
++	/*Outputs*/
++	int numberofpoints	= -1;
++	IssmDouble* xylist	= NULL;
++
++	/*Intermediaries*/
++   int numberofelements	= this->elements->NumberOfElements();
++	int count				= -1;
++   IssmDouble* xc			= NULL;
++   IssmDouble* yc			= NULL;
++
++	/*First, find the number of labeled elements (points)*/
++	count=0;
++	for(int i=0;i<numberofelements;i++){ 
++		if(element_label[i]>DBL_EPSILON) count++;
++	}
++	 
++	/*Set number of points*/
++	numberofpoints=count;
++	if(count>0) xylist=xNew<IssmDouble>(2*numberofpoints);
++	
++	/*Get element center coordinates*/
++	this->GetElementCenterCoordinates(&xc,&yc);
++
++	/*Now, fill xylist data*/
++	count=0;
++	for(int i=0;i<numberofelements;i++){
++		if(element_label[i]>DBL_EPSILON){
++			xylist[2*count]	= xc[i];			
++			xylist[2*count+1]	= yc[i];
++			count++;
++		}
++	}
++
++	/*Assign pointers*/
++	(*pxylist)=xylist;
++	*pnumberofpoints=numberofpoints;
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(xc);
++	xDelete<IssmDouble>(yc);
++}
++/*}}}*/
++void FemModel::GetElementLabelFromZeroLevelSet(IssmDouble* element_label,int levelset_type){/*{{{*/
++
++	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
++	/*element_label is 1 if the element zero level set, NAN otherwise*/
++	if(levelset_type!=MaskGroundediceLevelsetEnum && levelset_type!=MaskIceLevelsetEnum) _error_("level set type not implemented yet!");
++	if(!element_label) _error_("element_label is NULL!\n");
++	
++	/*Intermediaries*/
++ 	int elementswidth                   	= this->GetElementsWidth();
++   int numberofelements                	= this->elements->NumberOfElements();
++	int* elem_vertices         				= xNew<int>(elementswidth);
++   IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
++	Vector<IssmDouble>* velement_label		= new Vector<IssmDouble>(numberofelements);
++	IssmDouble* element_label_serial			= NULL;
++	int sid											= -1;
++	IssmDouble label								= -1.;
++
++	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
++   for(int i=0;i<this->elements->Size();i++){
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      element->GetInputListOnVertices(levelset,levelset_type);
++		element->GetVerticesSidList(elem_vertices);
++		sid	= element->Sid();
++		label = NAN;	
++     	Tria* tria 	= xDynamicCast<Tria*>(element);
++		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
++			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
++				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
++				label=1.;
++			}
++		}
++		velement_label->SetValue(sid,label,INS_VAL);
++	}
++   
++	/*Assemble and serialize*/
++   velement_label->Assemble();
++   element_label_serial=velement_label->ToMPISerial();
++
++	/*Merge with the output*/
++   for(int i=0;i<numberofelements;i++){
++		if(!xIsNan<IssmDouble>(element_label_serial[i])) element_label[i]=element_label_serial[i];
++		else; //do nothing
++	}
++
++	/*Cleanup*/
++	xDelete<int>(elem_vertices);
++   xDelete<IssmDouble>(levelset);
++   xDelete<IssmDouble>(element_label_serial);
++	delete velement_label;
++}
++/*}}}*/
++void FemModel::GetElementLabelFromEstimators(IssmDouble* element_label,int estimator_type){/*{{{*/
++
++	/*element_label is 1 if the element zero level set, NAN otherwise*/
++	if(!element_label) _error_("element_label is NULL!\n");
++	
++	/*Intermediaries*/
++   int numberofelements			= this->elements->NumberOfElements();
++   IssmDouble* elementerror	= NULL;
++	IssmDouble threshold			= -1.;
++	IssmDouble maxerror			= -1.;
++
++	switch(estimator_type){
++		case ThicknessErrorEstimatorEnum: 
++			threshold=this->amr->thicknesserror_threshold;
++			this->ThicknessZZErrorEstimator(&elementerror);
++			break;
++		case DeviatoricStressErrorEstimatorEnum:
++			threshold=this->amr->deviatoricerror_threshold;
++			this->ZZErrorEstimator(&elementerror);
++			break;
++		default: _error_("not implemented yet");
++	}
++
++	/*Find the max of the estimators*/
++	maxerror=elementerror[0];
++	for(int i=0;i<numberofelements;i++) maxerror=max(maxerror,elementerror[i]);
++	
++	/*Merge with the output*/
++   for(int i=0;i<numberofelements;i++){
++		if(elementerror[i]>threshold*maxerror) element_label[i]=1.;
++		else; //do nothing
++	}
++
++	/*Cleanup*/
++	xDelete<IssmDouble>(elementerror);
++}
++/*}}}*/
++void FemModel::GetElementDistanceToZeroLevelSet(IssmDouble** pelementdistance,int levelset_type){/*{{{*/
++
++	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
++	/*pverticedistance is the minimal vertice distance to the grounding line or ice front*/
++	if(levelset_type!=MaskGroundediceLevelsetEnum && levelset_type!=MaskIceLevelsetEnum){
++		_error_("level set type not implemented yet!");
++	}
++
++	/*Output*/
++	IssmDouble* elementdistance;
++	
++	/*Intermediaries*/
++   int numberofelements       = this->elements->NumberOfElements();
++   IssmDouble* levelset_points= NULL;
++   IssmDouble* xc					= NULL;
++   IssmDouble* yc					= NULL;
++	int numberofpoints;
++	IssmDouble distance;
++
++	/*Get element center coordinates*/
++	this->GetElementCenterCoordinates(&xc,&yc);
++	
++	/*Get points which level set is zero (center of elements with zero level set)*/	
++	this->GetZeroLevelSetPoints(&levelset_points,numberofpoints,levelset_type);
++
++	/*Find the minimal element distance to the zero levelset (grounding line or ice front)*/
++	elementdistance=xNew<IssmDouble>(numberofelements);
++	for(int i=0;i<numberofelements;i++){
++		elementdistance[i]=INFINITY;
++		for(int j=0;j<numberofpoints;j++){
++			distance=sqrt((xc[i]-levelset_points[2*j])*(xc[i]-levelset_points[2*j])+(yc[i]-levelset_points[2*j+1])*(yc[i]-levelset_points[2*j+1]));
++			elementdistance[i]=min(distance,elementdistance[i]);		
++		}
++	}	
++
++	/*Assign the pointer*/
++	(*pelementdistance)=elementdistance;
++
++	/*Cleanup*/
++   xDelete<IssmDouble>(levelset_points);
++   xDelete<IssmDouble>(xc);
++   xDelete<IssmDouble>(yc);
++}
++/*}}}*/
+ void FemModel::SetRefPatterns(){/*{{{*/
+ 
+    /*Initialize the global variable of refinement patterns*/
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22100)
+@@ -136,7 +136,7 @@
+ 	this->options->hmaxVerticesSize[1] = 0;
+ 	
+ 	/*verify if the metric will be reseted or not*/
+-	if(!this->keepmetric){
++	if(this->keepmetric==0){
+ 		if(this->options->metric) xDelete<IssmDouble>(this->options->metric);
+ 		this->options->metricSize[0] = 0;
+ 		this->options->metricSize[1] = 0;
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22099)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22100)
+@@ -860,8 +860,8 @@
+ 	AmrTypeEnum,
+ 	AmrNeopzEnum,
+ 	AmrLevelMaxEnum,
+-	AmrRegionLevel1Enum,
+-	AmrRegionLevelMaxEnum,
++	AmrLagEnum,
++	AmrRadiusLevelMaxEnum,
+ 	AmrBamgEnum,
+ 	AmrHminEnum,
+ 	AmrHmaxEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22100)
+@@ -833,8 +833,8 @@
+ 		case AmrTypeEnum : return "AmrType";
+ 		case AmrNeopzEnum : return "AmrNeopz";
+ 		case AmrLevelMaxEnum : return "AmrLevelMax";
+-		case AmrRegionLevel1Enum : return "AmrRegionLevel1";
+-		case AmrRegionLevelMaxEnum : return "AmrRegionLevelMax";
++		case AmrLagEnum : return "AmrLag";
++		case AmrRadiusLevelMaxEnum : return "AmrRadiusLevelMax";
+ 		case AmrBamgEnum : return "AmrBamg";
+ 		case AmrHminEnum : return "AmrHmin";
+ 		case AmrHmaxEnum : return "AmrHmax";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22100)
+@@ -851,8 +851,8 @@
+ 	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+-	      else if (strcmp(name,"AmrRegionLevel1")==0) return AmrRegionLevel1Enum;
+-	      else if (strcmp(name,"AmrRegionLevelMax")==0) return AmrRegionLevelMaxEnum;
++	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
++	      else if (strcmp(name,"AmrRadiusLevelMax")==0) return AmrRadiusLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22099)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22100)
+@@ -127,8 +127,13 @@
+ 			#ifdef _HAVE_NEOPZ_
+ 			case AmrNeopzEnum:
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_1",AmrRegionLevel1Enum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_max",AmrRegionLevelMaxEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.radius_level_max",AmrRadiusLevelMaxEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.gradation",AmrGradationEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.lag",AmrLagEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
+ 				break;
+ 			#endif
+ 
+Index: ../trunk-jpl/src/m/classes/amrbamg.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrbamg.m	(revision 22099)
++++ ../trunk-jpl/src/m/classes/amrbamg.m	(nonexistent)
+@@ -1,113 +0,0 @@
+-%AMRBAMG Class definition
+-%
+-%   Usage:
+-%      amrbamg=amrbamg();
+-
+-classdef amrbamg
+-	properties (SetAccess=public) 
+-		hmin = 0.; 
+-		hmax = 0.;
+-		fieldname = '';
+-		err = 0.;
+-		keepmetric = 0;
+-		gradation = 0.;
+-		groundingline_resolution = 0.;
+-		groundingline_distance = 0.;
+-		icefront_resolution = 0.;
+-		icefront_distance = 0.;
+-		thicknesserror_resolution = 0.;
+-		thicknesserror_threshold = 0.;
+-		deviatoricerror_resolution = 0.;
+-		deviatoricerror_threshold = 0.;
+-	end
+-	methods
+-		function self = amrbamg(varargin) % {{{
+-			switch nargin
+-				case 0
+-					self=setdefaultparameters(self);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			%hmin and hmax
+-			self.hmin=100.;
+-			self.hmax=100.e3;
+-
+-			%fields
+-			self.fieldname ='Vel';
+-			self.err=3.;
+-
+-			%keep metric?
+-			self.keepmetric=1;
+-
+-			%control of element lengths
+-			self.gradation=1.5;
+-
+-			%other criterias
+-			self.groundingline_resolution=500.;
+-			self.groundingline_distance=0.;
+-			self.icefront_resolution=500.;
+-			self.icefront_distance=0.;
+-			self.thicknesserror_resolution=500.;
+-			self.thicknesserror_threshold=0.;
+-			self.deviatoricerror_resolution=500.;
+-			self.deviatoricerror_threshold=0.;
+-
+-		end % }}}
+-		function md = checkconsistency(self,md,solution,analyses) % {{{
+-
+-			md = checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+-			%md = checkfield(md,'fieldname','amr.fieldname','string',[1]);
+-			md = checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+-			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-		end % }}}
+-		function disp(self) % {{{
+-			disp(sprintf('   amrbamg parameters:'));
+-
+-			fielddisplay(self,'hmin',['minimum element length']);
+-			fielddisplay(self,'hmax',['maximum element length']);
+-			fielddisplay(self,'fieldname',['name of input that will be used to compute the metric (should be an input of FemModel)']);
+-			fielddisplay(self,'keepmetric',['indicates whether the metric should be kept every remeshing time']);
+-			fielddisplay(self,'gradation',['maximum ratio between two adjacent edges']);
+-			fielddisplay(self,'groundingline_resolution',['element length near the grounding line']);
+-			fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
+-			fielddisplay(self,'icefront_resolution',['element length near the ice front']);
+-			fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
+-			fielddisplay(self,'thicknesserror_resolution',['element length when thickness error estimator is used']);
+-			fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
+-			fielddisplay(self,'deviatoricerror_resolution',['element length when deviatoric stress error estimator is used']);
+-			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
+-
+-		end % }}}
+-		function marshall(self,prefix,md,fid) % {{{
+-
+-			WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmin','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmax','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','fieldname','format','String');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','err','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','keepmetric','format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','gradation','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_resolution','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_resolution','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_resolution','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_resolution','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
+-
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/amr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.m	(revision 22099)
++++ ../trunk-jpl/src/m/classes/amr.m	(revision 22100)
+@@ -1,14 +1,58 @@
+ %AMR Class definition
+ %
+ %   Usage:
+-%      amr=amr();
++%      md.amr=amr();
+ 
+ classdef amr
+ 	properties (SetAccess=public) 
+-		level_max			= 0; 
+-		region_level_1		= 0;
+-		region_level_max	= 0;
++		hmin = 0.; 
++		hmax = 0.;
++		fieldname = '';
++		err = 0.;
++		keepmetric = 0;
++		gradation = 0.;
++		groundingline_resolution = 0.;
++		groundingline_distance = 0.;
++		icefront_resolution = 0.;
++		icefront_distance = 0.;
++		thicknesserror_resolution = 0.;
++		thicknesserror_threshold = 0.;
++		deviatoricerror_resolution = 0.;
++		deviatoricerror_threshold = 0.;
+ 	end
++	methods (Static)
++ 		function self = loadobj(self) % {{{
++         % This function is directly called by matlab when a model object is
++         % loaded. Update old properties here
++
++         if verLessThan('matlab','7.9'),
++            disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++            disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++            % This is a Matlab bug: all the fields of md have their default value
++            % Example of error message:
++            % Warning: Error loading an object of class 'model':
++            % Undefined function or method 'exist' for input arguments of type 'cell'
++            %
++            % This has been fixed in MATLAB 7.9 (R2009b) and later versions
++         end
++
++         %2017 September 15th
++         if isstruct(self),
++            disp('WARNING: updating amr. Now the default is amr with bamg');
++            disp('         some old fields were not converted');
++            disp('         see the new fields typing md.amr and modify them properly');
++            obj2 = self;
++            self = amr();
++            %Converting region_level_max to groundingline_distance
++            if(obj2.region_level_max>0 && obj2.region_level_1>obj2.region_level_max)
++               self.groundingline_distance	= obj2.region_level_max;
++					self.keepmetric					= 0;
++					self.fieldname						= 'None';
++            end
++         end
++      end% }}}
++	end
+ 	methods
+ 		function self = amr(varargin) % {{{
+ 			switch nargin
+@@ -20,45 +64,82 @@
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+-			%level_max: 2 to 4
+-			self.level_max=2;
++			%hmin and hmax
++			self.hmin=100.;
++			self.hmax=100.e3;
+ 
+-			%region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+-			self.region_level_1=20000.;
+-			
+-			%region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max). 
+-			self.region_level_max=15000.;
++			%fields
++			self.fieldname ='Vel';
++			self.err=3.;
+ 
++			%keep metric?
++			self.keepmetric=1;
++
++			%control of element lengths
++			self.gradation=1.5;
++
++			%other criterias
++			self.groundingline_resolution=500.;
++			self.groundingline_distance=0.;
++			self.icefront_resolution=500.;
++			self.icefront_distance=0.;
++			self.thicknesserror_resolution=500.;
++			self.thicknesserror_threshold=0.;
++			self.deviatoricerror_resolution=500.;
++			self.deviatoricerror_threshold=0.;
++
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+-			md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4);
+-			md = checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
+-			if self.region_level_1-self.region_level_max<0.2*self.region_level_1, %it was adopted 20% of the region_level_1
+-				md = checkmessage(md,'region_level_max should be lower than 80% of region_level_1');
+-			end 
++			md = checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
++			md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			%md = checkfield(md,'fieldname','amr.fieldname','string',[1]);
++			md = checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
++			md = checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   amr parameters:'));
+ 
+-			fielddisplay(self,'level_max',['maximum refinement level (1, 2, 3 or 4)']);
+-			fielddisplay(self,'region_level_1',['region which will be refined once (level 1) [ m ]']);
+-			fielddisplay(self,'region_level_max',['region which will be refined with level_max [ m ]']);
++			fielddisplay(self,'hmin',['minimum element length']);
++			fielddisplay(self,'hmax',['maximum element length']);
++			fielddisplay(self,'fieldname',['name of input that will be used to compute the metric (should be an input of FemModel)']);
++			fielddisplay(self,'keepmetric',['indicates whether the metric should be kept every remeshing time']);
++			fielddisplay(self,'gradation',['maximum ratio between two adjacent edges']);
++			fielddisplay(self,'groundingline_resolution',['element length near the grounding line']);
++			fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
++			fielddisplay(self,'icefront_resolution',['element length near the ice front']);
++			fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
++			fielddisplay(self,'thicknesserror_resolution',['element length when thickness error estimator is used']);
++			fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++			fielddisplay(self,'deviatoricerror_resolution',['element length when deviatoric stress error estimator is used']);
++			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+-			WriteData(fid,prefix,'name','md.amr.type','data',2,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double');
+-			WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double');
+-		end % }}}
+-		function savemodeljs(self,fid,modelname) % {{{
+-		
+-			writejsdouble(fid,[modelname '.amr.level_max'],self.level_max);
+-			writejsdouble(fid,[modelname '.amr.region_level_1'],self.region_level_1);
+-			writejsdouble(fid,[modelname '.amr.region_level_max'],self.region_level_max);
++			WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmin','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','hmax','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','fieldname','format','String');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','err','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','keepmetric','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','gradation','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_resolution','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/amr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.py	(revision 22099)
++++ ../trunk-jpl/src/m/classes/amr.py	(revision 22100)
+@@ -11,45 +11,86 @@
+     """
+ 
+     def __init__(self): # {{{
+-        self.level_max        = 0.
+-        self.region_level_1   = 0.
+-        self.region_level_max = 0.
+-
++        self.hmin								= 0.
++        self.hmax								= 0.
++        self.fieldname						=''
++        self.err 								= 0.
++        self.keepmetric						= 0.
++        self.gradation 						= 0.
++        self.groundingline_resolution 	= 0.
++        self.groundingline_distance 	= 0.
++        self.icefront_resolution 		= 0.
++        self.icefront_distance 			= 0.
++        self.thicknesserror_resolution = 0.
++        self.thicknesserror_threshold 	= 0.
++        self.deviatoricerror_resolution= 0.
++        self.deviatoricerror_threshold = 0.
+         #set defaults
+         self.setdefaultparameters()
+     #}}}
+     def __repr__(self): # {{{
+         string="   amr parameters:"
+-        string="%s\n%s"%(string,fielddisplay(self,"level_max","maximum refinement level (1, 2, 3 or 4)"))
+-        string="%s\n%s"%(string,fielddisplay(self,"region_level_1","region which will be refined once (level 1) [ m ]"))
+-        string="%s\n%s"%(string,fielddisplay(self,"region_level_max","region which will be refined with level_max [ m ]"))
++        string="%s\n%s"%(string,fielddisplay(self,"hmin","minimum element length"))
++        string="%s\n%s"%(string,fielddisplay(self,"hmax","maximum element length"))
++        string="%s\n%s"%(string,fielddisplay(self,"fieldname","name of input that will be used to compute the metric (should be an input of FemModel)"))
++        string="%s\n%s"%(string,fielddisplay(self,"keepmetric","indicates whether the metric should be kept every remeshing time"))
++        string="%s\n%s"%(string,fielddisplay(self,"gradation","maximum ratio between two adjacent edges"))
++        string="%s\n%s"%(string,fielddisplay(self,"groundingline_resolution","element length near the grounding line"))
++        string="%s\n%s"%(string,fielddisplay(self,"groundingline_distance","distance around the grounding line which elements will be refined"))
++        string="%s\n%s"%(string,fielddisplay(self,"icefront_resolution","element length near the ice front"))
++        string="%s\n%s"%(string,fielddisplay(self,"icefront_distance","distance around the ice front which elements will be refined"))
++        string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_resolution","element length when thickness error estimator is used"))
++        string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_threshold","maximum threshold thickness error permitted"))
++        string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_resolution","element length when deviatoric stress error estimator is used"))
++        string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_threshold","maximum threshold deviatoricstress error permitted"))
+         return string
+     #}}}
+     def setdefaultparameters(self): # {{{
+-
+-        #level_max: 2 to 4
+-        self.level_max=2
+-
+-        #region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+-        self.region_level_1=20000.
+-
+-        #region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max).
+-        self.region_level_max=15000.
+-
++        self.hmin								= 100.
++        self.hmax								= 100.e3
++        self.fieldname						= 'Vel'
++        self.err 								= 3.
++        self.keepmetric						= 1
++        self.gradation 						= 1.5
++        self.groundingline_resolution 	= 500.
++        self.groundingline_distance 	= 0
++        self.icefront_resolution 		= 500.
++        self.icefront_distance 			= 0
++        self.thicknesserror_resolution = 500.
++        self.thicknesserror_threshold 	= 0
++        self.deviatoricerror_resolution= 500.
++        self.deviatoricerror_threshold = 0
+         return self
+-        #}}}
++    #}}}
+     def checkconsistency(self,md,solution,analyses):    # {{{
+-        md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4)
+-        md = checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1)
+-        md = checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1)
+-                #it was adopted 20% of the region_level_1
+-        if self.region_level_1-self.region_level_max<0.2*self.region_level_1:
+-            md.checkmessage("region_level_max should be lower than 80% of region_level_1")
+-
++        md = checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1)
++        md = checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',self.hmax,'NaN',1)
++        md = checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++        md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
++        md = checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++        md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++        md = checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++        md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++        md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++        md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++        md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
++        md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);        
+         return md
+     # }}}
+     def marshall(self,prefix,md,fid):    # {{{
+-        WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer')
+-        WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double')
+-        WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double')
++        WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer')
++        WriteData(fid,prefix,'object',self,'fieldname','hmin','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','hmax','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','fieldname','format','String');
++        WriteData(fid,prefix,'object',self,'fieldname','err','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','keepmetric','format','Integer');
++        WriteData(fid,prefix,'object',self,'fieldname','gradation','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','groundingline_resolution','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','groundingline_distance','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','icefront_resolution','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','icefront_distance','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_resolution','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_threshold','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_resolution','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_threshold','format','Double'); 
+     # }}}
+Index: ../trunk-jpl/src/m/classes/amr.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.js	(revision 22099)
++++ ../trunk-jpl/src/m/classes/amr.js	(revision 22100)
+@@ -6,22 +6,36 @@
+ function amr (){
+ 	//methods
+ 	this.setdefaultparameters = function(){// {{{
+-		//level_max: 2 to 4
+-		this.level_max=2;
+-
+-		//region_level_1: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined once (h=1).
+-		this.region_level_1=20000.;
+-
+-		//region_level_max: region around (m) the discontinuity (grounding line or ice front) where the mesh will be refined with max level of refinement (h=level_max).
+-		this.region_level_max=15000.;
++   	this.hmin       						= 100.;
++      this.hmax		 						= 100.e3;
++		this.fieldname 						= "Vel";
++		this.err 								= 3.;
++   	this.keepmetric             		= 1;
++   	this.gradation       				= 1.5;
++		this.groundingline_resolution	 	= 500.;
++   	this.groundingline_distance   	= 0;
++   	this.icefront_resolution     		= 500;
++   	this.icefront_distance        	= 0;
++      this.thicknesserror_resolution	= 500;
++      this.thicknesserror_threshold 	= 0;
++      this.deviatoricerror_resolution	= 500;	
++      this.deviatoricerror_threshold	= 0;	
+ 	}// }}}
+ 	this.disp= function(){// {{{
+-
+ 		console.log(sprintf('   amr parameters:'));
+-		fielddisplay(this,'level_max','maximum refinement level (1, 2, 3 or 4)');
+-		fielddisplay(this,'region_level_1','region which will be refined once (level 1) [ m ]');
+-		fielddisplay(this,'region_level_max','region which will be refined with level_max [ m ]');
+-
++		fielddisplay(this,'hmin','minimum element length');
++      fielddisplay(this,'hmax','maximum element length');
++      fielddisplay(this,'fieldname','name of input that will be used to compute the metric (should be an input of FemModel)');
++		fielddisplay(this,'keepmetric','indicates whether the metric should be kept every remeshing time');
++		fielddisplay(this,'gradation','maximum ratio between two adjacent edges');
++		fielddisplay(this,'groundingline_resolution','element length near the grounding line');
++		fielddisplay(this,'groundingline_distance','distance around the grounding line which elements will be refined');
++		fielddisplay(this,'icefront_resolution','element length near the ice front');
++		fielddisplay(this,'icefront_distance','distance around the ice front which elements will be refined');
++		fielddisplay(this,'thicknesserror_resolution','element length when thickness error estimator is used');
++		fielddisplay(this,'thicknesserror_threshold','maximum threshold thickness error permitted');
++		fielddisplay(this,'deviatoricerror_resolution','element length when deviatoric stress error estimator is used');
++		fielddisplay(this,'deviatoricerror_threshold','maximum threshold deviatoricstress error permitted');
+ 	}// }}}
+ 	this.classname= function(){// {{{
+ 		return "amr";
+@@ -28,28 +42,54 @@
+ 
+ 	}// }}}
+ 		this.checkconsistency = function(md,solution,analyses) { //{{{
+-			
+-			checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',4);
+-			checkfield(md,'fieldname','amr.region_level_1','numel',[1],'>',0,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','amr.region_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
+-			if (this.region_level_1-this.region_level_max<0.2*this.region_level_1){
+-				md.checkmessage('region_level_max should be lower than 80% of region_level_1');
+-			}
++         checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
++         checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++         checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
++         checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++         checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++         checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++         checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++         checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++         checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++         checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		} // }}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+-
+-			WriteData(fid,prefix,'object',this,'fieldname','level_max','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','region_level_1','format','Double');
+-			WriteData(fid,prefix,'object',this,'fieldname','region_level_max','format','Double');
+-
++         WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
++         WriteData(fid,prefix,'object',this,'fieldname','hmin','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','hmax','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','fieldname','format','String');
++         WriteData(fid,prefix,'object',this,'fieldname','err','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','keepmetric','format','Integer');
++         WriteData(fid,prefix,'object',this,'fieldname','gradation','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','groundingline_resolution','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','groundingline_distance','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','icefront_resolution','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','icefront_distance','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_resolution','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_threshold','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_resolution','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','Double');
+ 		}//}}}
+ 		this.fix=function() { //{{{
+ 		}//}}}
+ 	//properties 
+ 	// {{{
+-	this.level_max				= 0;
+-	this.region_level_1     = 0.;
+-	this.region_level_max   = 0.;
++	this.hmin								= 0.;
++	this.hmax								= 0.;
++	this.fieldname							= "";
++	this.err									= 0.;
++	this.keepmetric						= 0;
++	this.gradation							= 0.;
++	this.groundingline_resolution		= 0.;
++	this.groundingline_distance		= 0.;
++	this.icefront_resolution			= 0.;
++	this.icefront_distance				= 0.;
++	this.thicknesserror_resolution	= 0.;
++	this.thicknesserror_threshold		= 0.;
++	this.deviatoricerror_resolution	= 0.;
++	this.deviatoricerror_threshold	= 0.;
+ 
+ 	this.setdefaultparameters();
+ 	//}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22100-22101.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22100-22101.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22100-22101.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 22100)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 22101)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+-field_tolerances={5e-05,1e-08,7e-08,5e-09,5e-08,5e-08,5e-08};
++field_tolerances={5e-05,1e-08,8e-08,5e-09,5e-08,5e-08,5e-08};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 22100)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 22101)
+@@ -35,7 +35,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+-field_tolerances=[5e-05,1e-08,7e-08,5e-09,5e-08,5e-08,5e-08]
++field_tolerances=[5e-05,1e-08,8e-08,5e-09,5e-08,5e-08,5e-08]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22101-22102.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22101-22102.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22101-22102.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(nonexistent)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(revision 22102)
+@@ -0,0 +1,6 @@
++156c153,155
++< # TODO: Can't this be integrated into the following logic?
++---
++> # TODO: Can't this be integrated into the following logic?
++> set(BLAS_LIBS "-L/u/astrid-r1b/schlegel/issm/trunk/externalpackages/petsc/install/lib/ -lfblas -L/usr/lib/gcc/x86_64-linux-gnu/4.8/ -lgfortran")
++> set(LAPACK_LIBS "-L/u/astrid-r1b/schlegel/issm/trunk/externalpackages/petsc/install/lib/ -lflapack -L/usr/lib/gcc/x86_64-linux-gnu/4.8/ -lgfortran")
Index: /issm/oecreview/Archive/21724-22754/ISSM-22102-22103.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22102-22103.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22102-22103.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/shared/FSanalyticals/fsanalyticals.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/FSanalyticals/fsanalyticals.cpp	(revision 22102)
++++ ../trunk-jpl/src/c/shared/FSanalyticals/fsanalyticals.cpp	(revision 22103)
+@@ -8,6 +8,8 @@
+  * case 5: 3d test with sinusoidal functions, no variations with z, non homogeneous Dirichlet conditions
+  * case 6: 3d test with sinusoidal functions, non homogeneous Dirichlet conditions
+  *
++ * case 103: 3d test sin(z) HO
++ *
+  * case 201: 3d test quadratic functions FS, ESTAR flow law
+  * case 202: 3d test quadratic functions HO, ESTAR flow law
+  */
+@@ -73,6 +75,8 @@
+ 
+ 		case 101: 
+ 			return 4*pow(x, 2)*y*z*pow(x - 1, 2)*(z - 1) + 8*pow(x, 2)*y*z*(y - 1)*(2*y - 1)*(z - 1) + 2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1) + 4*pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(z - 1) + 2*pow(x, 2)*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) - 12*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) - 6*x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) - 12*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) + 32*x*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) - 6*x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - 6*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + 8*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 6*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1);
++		case 103:
++			return 50*pow(M_PI, 2)*x*y*(x - 1)*(y - 1)*pow(sin(5*M_PI*z), 2) - 50*pow(M_PI, 2)*x*y*(x - 1)*(y - 1)*pow(cos(5*M_PI*z), 2) - 3*x*y*pow(sin(4*M_PI*z), 2) - 2*x*(x - 1)*pow(sin(5*M_PI*z), 2) - 3*x*(y - 1)*pow(sin(4*M_PI*z), 2) - 3*y*(x - 1)*pow(sin(4*M_PI*z), 2) - 8*y*(y - 1)*pow(sin(5*M_PI*z), 2) - 3*(x - 1)*(y - 1)*pow(sin(4*M_PI*z), 2);
+ 		case 201:
+ 			return pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L) + y - 1.0L/18.0L*(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1) + x*pow(y, 2)*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*y*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1) + pow(x, 2)*y*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + x*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + (2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1) + 2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2) - 2*x*pow(y, 2)*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) - pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) - 2.0L/9.0L*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*((x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2) + x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2) + 2*x*pow(y, 2)*(x - 1)*pow(y - 1, 2)*(z - 1) + x*pow(y, 2)*(2*x - 1)*pow(y - 1, 2)*(z - 1) + pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 2*(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1) + pow(x, 2)*y*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + x*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) + x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) + 2*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) + x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) + pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(y - 1)*(2*y - 1)*(z - 1) + 4*x*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*pow(y - 1, 2)*(z - 1) + 2*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1)))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) + 2*(pow(x, 2)*y*z*(y - 1)*(2*y - 1)*(z - 1) + 4*x*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L) - 1.0L/18.0L*(2*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1) + x*pow(y, 2)*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*y*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + (pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1) + 2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(z - 1) + 4*x*y*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(2*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + 2*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(z - 1) + 2*pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) - 2*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) - y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) - 1.0L/2.0L + (2*pow(x, 2)*y*z*pow(x - 1, 2)*(z - 1) + 2*pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) - 2*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) - y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L);
+ 		case 202:
+@@ -143,6 +147,8 @@
+ 
+ 		case 101: 
+ 			return 12*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + 6*pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + 6*pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) - 8*x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(z - 1) - 4*x*pow(y, 2)*z*pow(y - 1, 2)*(z - 1) - 2*x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2) + 12*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + 6*x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) - 32*x*y*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + 6*x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 8*x*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1) - 4*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - 2*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1);
++		case 103:
++			return 32*pow(PI, 2)*x*y*(x - 1)*(y - 1)*pow(sin(4*PI*z), 2) - 32*pow(PI, 2)*x*y*(x - 1)*(y - 1)*pow(cos(4*PI*z), 2) - 3*x*y*pow(sin(5*PI*z), 2) - 8*x*(x - 1)*pow(sin(4*PI*z), 2) - 3*x*(y - 1)*pow(sin(5*PI*z), 2) - 3*y*(x - 1)*pow(sin(5*PI*z), 2) - 2*y*(y - 1)*pow(sin(4*PI*z), 2) - 3*(x - 1)*(y - 1)*pow(sin(5*PI*z), 2);
+ 		case 201:
+ 			return -x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L) + x + (1.0L/18.0L)*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1) + x*pow(y, 2)*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*y*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1) + pow(x, 2)*y*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + x*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + (2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1) + 2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2) - 2*x*pow(y, 2)*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) - pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) + (2.0L/9.0L)*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1) + x*pow(y, 2)*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*y*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + (pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1) + 2*pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(z - 1) + 4*x*y*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(2*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + 2*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(z - 1) + 2*pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) - 2*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) - y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) - 2*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(z - 1) + 4*x*y*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L) - 1.0L/18.0L*((x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2) + x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2) + 2*x*pow(y, 2)*(x - 1)*pow(y - 1, 2)*(z - 1) + x*pow(y, 2)*(2*x - 1)*pow(y - 1, 2)*(z - 1) + pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 2*(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1) + pow(x, 2)*y*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + x*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 8*(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*x*pow(y, 2)*z*(x - 1)*(y - 1)*(z - 1) + x*pow(y, 2)*z*(2*x - 1)*(y - 1)*(z - 1) + 2*x*y*z*(x - 1)*pow(y - 1, 2)*(z - 1) + x*y*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) + pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1)) + 8*(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1))*(pow(x, 2)*y*z*(y - 1)*(2*y - 1)*(z - 1) + 4*x*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1)) + 2*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))*(2*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*pow(y - 1, 2)*(z - 1) + 2*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1)))*(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 4.0L/3.0L) - 1.0L/2.0L + (2*pow(x, 2)*y*z*(x - 1)*(y - 1)*(z - 1) + pow(x, 2)*y*z*(x - 1)*(2*y - 1)*(z - 1) + pow(x, 2)*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*pow(y - 1, 2)*(z - 1) + 2*x*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + x*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1))/pow((1.0L/6.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2) + x*pow(y, 2)*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (1.0L/6.0L)*pow(pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1) + pow(x, 2)*y*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (4.0L/3.0L)*pow(x*pow(y, 2)*z*(x - 1)*(2*x - 1)*(y - 1)*(z - 1) + x*y*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2) + (4.0L/3.0L)*pow(pow(x, 2)*y*z*(x - 1)*(y - 1)*(2*y - 1)*(z - 1) + x*y*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1), 2) + (1.0L/6.0L)*pow(2*pow(x, 2)*y*z*pow(x - 1, 2)*(y - 1)*(z - 1) + pow(x, 2)*y*z*pow(x - 1, 2)*(2*y - 1)*(z - 1) + pow(x, 2)*z*pow(x - 1, 2)*(y - 1)*(2*y - 1)*(z - 1) - 2*x*pow(y, 2)*z*(x - 1)*pow(y - 1, 2)*(z - 1) - x*pow(y, 2)*z*(2*x - 1)*pow(y - 1, 2)*(z - 1) - pow(y, 2)*z*(x - 1)*(2*x - 1)*pow(y - 1, 2)*(z - 1), 2), 1.0L/3.0L);
+ 		case 202:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22103-22104.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22103-22104.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22103-22104.diff	(revision 22755)
@@ -0,0 +1,237 @@
+Index: ../trunk-jpl/src/m/classes/misfit.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/misfit.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/misfit.py	(revision 22104)
+@@ -0,0 +1,109 @@
++import numpy as np
++from project3d import project3d
++from pairoptions import *
++from collections import OrderedDict
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++
++class misfit(object):
++	"""
++	MISFIT class definition
++
++	Usage:
++		misfit=misfit()
++		misfit=misfit(name='SurfaceAltimetry',
++                	definitionstring='Outputdefinition1',
++			model_string='Surface',
++	                observation_string='SurfaceObservations',
++ 	            	observation=md.geometry.surface,
++                    	timeinterpolation='nearestneighbor',
++                    	local=1,
++                    	weights=np.ones((md.mesh.numberofvertices,1)),
++                    	weights_string='WeightsSurfaceObservations')
++	"""
++
++	def __init__(self, name = None, definitionstring = None, model_string = None, observation = None, observation_string = None, timeinterpolation = None, local = None, weights = None, weights_string = None, cumulated = None):
++		# {{{
++		self.name = name if name is not None else ''
++
++		#string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
++		self.definitionstring = definitionstring if definitionstring is not None else ''
++
++		#string for field that is modeled
++		self.model_string = model_string if model_string is not None else ''
++
++		#observed field that we compare the model against
++		self.observation = observation if observation is not None else float('NaN')
++
++		#string for observed field.
++		self.observation_string = observation_string if observation_string is not None else ''
++
++		self.timeinterpolation = timeinterpolation if timeinterpolation is not None else 'nearestneighbor'
++
++		self.local = local if local is not None else 1
++
++		#weight coefficients for every vertex
++		self.weights = weights if weights is not None else float('NaN')
++
++		#string to identify this particular set of weights
++		self.weights_string = weights_string if weights_string is not None else ''
++
++		#do we cumulate misfit through time?
++		self.cumulated = cumulated if cumulated is not None else float('NaN')		
++		#}}}
++
++	def __repr__(self): # {{{
++		string='   Misfit:'
++
++		string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this misfit response'))
++		string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from "Outputdefinition[1-10]"'))
++		string="%s\n%s"%(string,fielddisplay(self,'model_string','string for field that is modeled'))
++		string="%s\n%s"%(string,fielddisplay(self,'observation','observed field that we compare the model against'))
++		string="%s\n%s"%(string,fielddisplay(self,'observation_string','observation string'))
++		string="%s\n%s"%(string,fielddisplay(self,'local','is the response local to the elements, or global? (default is 1)'))
++		string="%s\n%s"%(string,fielddisplay(self,'timeinterpolation','interpolation routine used to interpolate misfit between two time steps (default is "nearestneighbor"'))
++		string="%s\n%s"%(string,fielddisplay(self,'weights','weights (at vertices) to apply to the misfit'))
++		string="%s\n%s"%(string,fielddisplay(self,'weights_string','string for weights for identification purposes'))
++		return string
++		#}}}
++
++	def extrude(self,md): # {{{
++		if not np.any(np.isnan(self.weights)):
++			self.weights = project3d(md,'vector',self.weights,'type','node')
++		if not np.any(np.isnan(self.observation)):
++			self.observation = project3d(md,'vector',self.observation,'type','node')
++		return self
++	#}}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		if type(self.name) != str:
++			raise TypeError('misfit error message: "name" field should be a string!')
++
++		OutputdefinitionStringArray = []
++		for i in range(100):
++			OutputdefinitionStringArray.append('Outputdefinition' + str(i))
++
++		md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray)
++		if type(self.timeinterpolation) != str:
++			raise TypeError('misfit error message: "timeinterpolation" field should be a string!')
++
++		md = checkfield(md,'fieldname','self.observation','field',self.observation,'timeseries',1,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','self.timeinterpolation','field',self.timeinterpolation,'values',['nearestneighbor'])
++		md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1,'Inf',1)
++
++		return md
++	# }}}
++
++	def marshall(self,prefix,md,fid):    #  {{{
++		WriteData(fid,prefix,'data',self.name,'name','md.misfit.name','format','String')
++		WriteData(fid,prefix,'data',self.definitionstring,'name','md.misfit.definitionstring','format','String')
++		WriteData(fid,prefix,'data',self.model_string,'name','md.misfit.model_string','format','String')
++		WriteData(fid,prefix,'data',self.observation,'name','md.misfit.observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'data',self.observation_string,'name','md.misfit.observation_string','format','String')
++		WriteData(fid,prefix,'data',self.local,'name','md.misfit.local','format','Integer')
++		WriteData(fid,prefix,'data',self.timeinterpolation,'name','md.misfit.timeinterpolation','format','String')
++		WriteData(fid,prefix,'data',self.weights,'name','md.misfit.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'data',self.weights_string,'name','md.misfit.weights_string','format','String')
++	# }}}
+Index: ../trunk-jpl/test/NightlyRun/test123.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test123.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test123.py	(revision 22104)
+@@ -0,0 +1,43 @@
++#Test Name: SquareShelfConstrainedTranMisfitSurface
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from misfit import *
++
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',gethostname(),'np',3)
++
++fake_surface = np.vstack((np.append(np.array(md.geometry.surface)+100,1.1),
++		np.append(np.array(md.geometry.surface)+200,2.1),
++		np.append(np.array(md.geometry.surface)+300,2.5))).T
++
++md.transient.requested_outputs = ['default','SurfaceMisfit']
++md.outputdefinition.definitions = [misfit(
++		name='SurfaceMisfit',
++		definitionstring='Outputdefinition1',
++		model_string='Surface',
++		observation=fake_surface,
++		observation_string='SurfaceObservation',
++		timeinterpolation='nearestneighbor',
++		weights=np.ones((md.mesh.numberofvertices,1)),
++		weights_string='WeightsSurfaceObservation'
++		)]
++
++md=solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = ['SurfaceMisfitFirstStep','SurfaceMisfitSecondStep','SurfaceMisfitThirdStep']
++field_tolerances = [1e-13,1e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[0].SurfaceMisfit,
++	md.results.TransientSolution[1].SurfaceMisfit,
++	md.results.TransientSolution[2].SurfaceMisfit
++	]
+Index: ../trunk-jpl/test/NightlyRun/test124.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test124.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test124.py	(revision 22104)
+@@ -0,0 +1,56 @@
++#Test Name: SquareShelfConstrainedTranFSFreeSurface
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'FS','all')
++
++#Free surface
++md.masstransport.isfreesurface = 1
++md.timestepping.time_step = 0.00001
++md.timestepping.final_time = 0.00005
++
++#Go solve
++md.cluster=generic('name',gethostname(),'np',3)
++md=solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names      = [
++	'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances = [
++	2e-09,3e-9,3e-9,3e-9,1e-13,1e-12,1e-12,
++	2e-09,3e-9,3e-9,3e-9,1e-10,1e-10,1e-10,
++	2e-09,3e-9,3e-9,3e-9,1e-10,1e-10,1e-10]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	]
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 22103)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 22104)
+@@ -179,7 +179,8 @@
+ 						#compare to archive
+ 						# Matlab uses base 1, so use base 1 in labels
+ 						archive=np.array(archread(archive_file,archive_name+'_field'+str(k+1)))
+-						if archive == None:
++						#Because np.array is weird (str(np.array(None)) becomes 'None' but np.array(None) is never equal to None, it basically becomes a type of string in an array):
++						if str(archive) == 'None':
+ 							raise NameError("Field name '"+archive_name+'_field'+str(k+1)+"' does not exist in archive file.")
+ 						error_diff=np.amax(np.abs(archive-field),axis=0)/(np.amax(np.abs(archive),axis=0)+float_info.epsilon)
+                                                 if not np.isscalar(error_diff): error_diff=error_diff[0]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22104-22105.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22104-22105.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22104-22105.diff	(revision 22755)
@@ -0,0 +1,1019 @@
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 22105)
+@@ -104,7 +104,7 @@
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+ 		element->StrainRateHO(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscosityFSDerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		element->material->ViscosityFSDerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
+ 		eps1[1]=epsilon[2];   eps2[1]=epsilon[1];   eps3[1]=epsilon[4];
+ 		eps1[2]=epsilon[3];   eps2[2]=epsilon[4];   eps3[2]= -epsilon[0] -epsilon[1];
+@@ -178,7 +178,7 @@
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+ 		element->StrainRateHO(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscosityHODerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		element->material->ViscosityHODerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 		eps1[0]=2.*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                 eps2[1]=epsilon[0]+2.*epsilon[1];
+ 		eps1[2]=epsilon[3];                 eps2[2]=epsilon[4];
+@@ -285,7 +285,7 @@
+ 
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		basalelement->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+-		basalelement->material->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		basalelement->material->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 		eps1[0]=2.*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];               eps2[1]=epsilon[0]+2*epsilon[1];
+ 
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22105)
+@@ -1206,7 +1206,7 @@
+ 
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		basalelement->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+-		basalelement->material->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		basalelement->material->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
+ 
+@@ -2267,7 +2267,7 @@
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+ 		element->StrainRateHO(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscosityHODerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		element->material->ViscosityHODerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
+ 		eps1[2]=epsilon[3];                eps2[2]=epsilon[4];
+@@ -2957,7 +2957,7 @@
+ 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
+ 		eps1[1]=epsilon[2];   eps2[1]=epsilon[1];   eps3[1]=epsilon[4];
+ 		eps1[2]=epsilon[3];   eps2[2]=epsilon[4];   eps3[2]= -epsilon[0] -epsilon[1];
+-		element->material->ViscosityFSDerivativeEpsSquare(&mu_prime,&epsilon[0]);
++		element->material->ViscosityFSDerivativeEpsSquare(&mu_prime,&epsilon[0],gauss);
+ 
+ 		for(i=0;i<vnumnodes;i++){
+ 			for(j=0;j<vnumnodes;j++){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22105)
+@@ -733,7 +733,7 @@
+ 
+ 	switch(response_enum){
+ 		case MaterialsRheologyBbarEnum:
+-			*presponse=this->material->GetBbar();
++			*presponse=this->material->GetBbar(NULL);
+ 			break;
+ 
+ 		case VelEnum:{
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22105)
+@@ -621,10 +621,10 @@
+ 
+ 	switch(response_enum){
+ 		case MaterialsRheologyBbarEnum:
+-			*presponse=this->material->GetBbar();
++			*presponse=this->material->GetBbar(NULL);
+ 			break;
+ 		case DamageDbarEnum:
+-			*presponse=this->material->GetDbar();
++			*presponse=this->material->GetDbar(NULL);
+ 			break;
+ 		case VelEnum:
+ 			{
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22105)
+@@ -692,7 +692,7 @@
+ 	materialstype=this->material->ObjectEnum();
+ 	switch(materialstype){
+ 		case MaticeEnum:
+-			material->GetViscosity_B(&dmudB,eps_eff);
++			material->GetViscosity_B(&dmudB,eps_eff,gauss);
+ 			break;
+ 		case MatestarEnum:
+ 			material->ViscosityBFS(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,vz_input,eps_eff);
+@@ -729,7 +729,7 @@
+ 	materialstype=this->material->ObjectEnum();
+ 	switch(materialstype){
+ 		case MaticeEnum:
+-			material->GetViscosity_B(&dmudB,eps_eff);
++			material->GetViscosity_B(&dmudB,eps_eff,gauss);
+ 			break;
+ 		case MatestarEnum:
+ 			material->ViscosityBHO(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
+@@ -766,7 +766,7 @@
+ 	materialstype=this->material->ObjectEnum();
+ 	switch(materialstype){
+ 		case MaticeEnum:
+-			material->GetViscosity_B(&dmudB,eps_eff);
++			material->GetViscosity_B(&dmudB,eps_eff,gauss);
+ 			break;
+ 		case MatestarEnum:
+ 			material->ViscosityBSSA(&dmudB,dim,xyz_list,gauss,vx_input,vy_input,eps_eff);
+@@ -799,7 +799,7 @@
+ 	}
+ 
+ 	/*Get viscosity*/
+-	material->GetViscosity_D(&dmudB,eps_eff);
++	material->GetViscosity_D(&dmudB,eps_eff,gauss);
+ 
+ 	/*Assign output pointer*/
+ 	*pdmudB=dmudB;
+@@ -1132,13 +1132,13 @@
+ IssmDouble Element::GetMaterialParameter(int enum_in){/*{{{*/
+ 
+ 	_assert_(this->matpar);
+-	switch(enum_in){ // FIXME: change this to material
++	switch(enum_in){ // FIXME: change this to material and replace NULL by gauss
+ 		case MaterialsRheologyNEnum:
+ 			return this->material->GetN();
+ 		case MaterialsRheologyBEnum:
+-			return this->material->GetB();
++			return this->material->GetB(NULL);
+ 		case MaterialsRheologyBbarEnum:
+-			return this->material->GetBbar();
++			return this->material->GetBbar(NULL);
+ 		default:
+ 			return this->matpar->GetMaterialParameter(enum_in);
+ 	}
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22105)
+@@ -192,7 +192,7 @@
+ 	this->element  = (Element*)helement->delivers();
+ }
+ /*}}}*/
+-IssmDouble Matice::GetA(){/*{{{*/
++IssmDouble Matice::GetA(Gauss* gauss){/*{{{*/
+ 	/*
+ 	 * A = 1/B^n
+ 	 */
+@@ -205,7 +205,7 @@
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+-IssmDouble Matice::GetAbar(){/*{{{*/
++IssmDouble Matice::GetAbar(Gauss* gauss){/*{{{*/
+ 	/*
+ 	 * A = 1/B^n
+ 	 */
+@@ -218,7 +218,7 @@
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+-IssmDouble Matice::GetB(){/*{{{*/
++IssmDouble Matice::GetB(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble B;
+@@ -227,7 +227,7 @@
+ 	return B;
+ }
+ /*}}}*/
+-IssmDouble Matice::GetBbar(){/*{{{*/
++IssmDouble Matice::GetBbar(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Bbar;
+@@ -236,7 +236,7 @@
+ 	return Bbar;
+ }
+ /*}}}*/
+-IssmDouble Matice::GetD(){/*{{{*/
++IssmDouble Matice::GetD(Gauss* gauss){/*{{{*/
+ 
+ 	_assert_(this->isdamaged);
+ 	/*Output*/
+@@ -245,7 +245,7 @@
+ 	return D;
+ }
+ /*}}}*/
+-IssmDouble Matice::GetDbar(){/*{{{*/
++IssmDouble Matice::GetDbar(Gauss* gauss){/*{{{*/
+ 
+ 	_assert_(this->isdamaged);
+ 	/*Output*/
+@@ -254,7 +254,7 @@
+ 	return Dbar;
+ }
+ /*}}}*/
+-IssmDouble Matice::GetE(){/*{{{*/
++IssmDouble Matice::GetE(Gauss* gauss){/*{{{*/
+ 
+ 	_assert_(this->isenhanced);
+ 	/*Output*/
+@@ -263,7 +263,7 @@
+ 	return E;
+ }
+ /*}}}*/
+-IssmDouble Matice::GetEbar(){/*{{{*/
++IssmDouble Matice::GetEbar(Gauss* gauss){/*{{{*/
+ 
+ 	_assert_(this->isenhanced);
+ 	/*Output*/
+@@ -291,7 +291,7 @@
+ 	return this->isenhanced;
+ }
+ /*}}}*/
+-void  Matice::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/
++void  Matice::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
+ 								(1-D) B
+ 	  viscosity= -------------------------
+@@ -311,14 +311,14 @@
+ 	IssmDouble B,D=0.,E=1.,n;
+ 
+ 	/*Get B and n*/
+-	B=GetB(); _assert_(B>0.);
++	B=GetB(gauss); _assert_(B>0.);
+ 	n=GetN(); _assert_(n>0.);
+ 	if(this->isdamaged){
+-		D=GetD();
++		D=GetD(gauss);
+ 		_assert_(D>=0. && D<1.);
+ 	}
+ 	if(this->isenhanced){
+-		E=GetE();
++		E=GetE(gauss);
+ 		_assert_(E>0.);
+ 	}
+ 
+@@ -347,7 +347,7 @@
+ 	*pviscosity=viscosity;
+ }
+ /*}}}*/
+-void  Matice::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/
++void  Matice::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
+ 								(1-D) B
+ 	  viscosity= -------------------------
+@@ -367,14 +367,14 @@
+ 	IssmDouble B,D=0.,E=1.,n;
+ 
+ 	/*Get B and n*/
+-	B=GetBbar(); _assert_(B>0.);
++	B=GetBbar(gauss); _assert_(B>0.);
+ 	n=GetN();    _assert_(n>0.);
+ 	if(this->isdamaged){
+-		D=GetDbar();
++		D=GetDbar(gauss);
+ 		_assert_(D>=0. && D<1.);
+ 	}
+ 	if(this->isenhanced){
+-		E=GetEbar();
++		E=GetEbar(gauss);
+ 		_assert_(E>0.);
+ 	}
+ 
+@@ -402,7 +402,7 @@
+ 	*pviscosity=viscosity;
+ }
+ /*}}}*/
+-void  Matice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){/*{{{*/
++void  Matice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *  										                (1-D)
+@@ -425,7 +425,7 @@
+ 
+ 	/*Get D and n*/
+ 	if(this->isdamaged){
+-		D=GetDbar(); /* GetD()? */
++		D=GetDbar(gauss); /* GetD()? */
+ 		_assert_(D>=0. && D<1.);
+ 	}
+ 	n=GetN();
+@@ -460,7 +460,7 @@
+ 	*pviscosity_complement=viscosity_complement;
+ }
+ /*}}}*/
+-void  Matice::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){/*{{{*/
++void  Matice::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	/*Return viscosity derivative for control method d(mu)/dD: 
+ 	 *
+ 	 *  										               B 
+@@ -482,7 +482,7 @@
+ 	IssmDouble B,n;
+ 
+ 	/*Get B and n*/
+-	B=GetBbar();
++	B=GetBbar(gauss);
+ 	n=GetN();
+ 
+ 	if(epsilon){
+@@ -515,7 +515,7 @@
+ 	*pviscosity_complement=viscosity_complement;
+ }
+ /*}}}*/
+-void  Matice::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){/*{{{*/
++void  Matice::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble mu_prime;
+@@ -531,7 +531,7 @@
+ 	}
+ 	else{
+ 
+-		/*Retrive strain rate components: */
++		/*Retrieve strain rate components: */
+ 		exx=epsilon[0];
+ 		eyy=epsilon[1];
+ 		exy=epsilon[2];
+@@ -539,7 +539,7 @@
+ 		eyz=epsilon[4];
+ 		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
+ 
+-		GetViscosity(&mu,sqrt(eff2));
++		GetViscosity(&mu,sqrt(eff2),gauss);
+ 		n=GetN();
+ 		mu_prime=(1.-n)/(2.*n) * mu/eff2;
+ 	}
+@@ -548,7 +548,7 @@
+ 	*pmu_prime=mu_prime;
+ }
+ /*}}}*/
+-void  Matice::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff){/*{{{*/
++void  Matice::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble dmudB;
+@@ -559,11 +559,11 @@
+ 	/*Get B and n*/
+ 	n=GetN(); _assert_(n>0.);
+ 	if(this->isdamaged){
+-		D=GetD();
++		D=GetD(gauss);
+ 		_assert_(D>=0. && D<1.);
+ 	}
+ 	if(this->isenhanced){
+-		E=GetE();
++		E=GetE(gauss);
+ 		_assert_(E>0.);
+ 	}
+ 
+@@ -580,7 +580,7 @@
+ 	*pdmudB=dmudB;
+ }
+ /*}}}*/
+-void  Matice::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff){/*{{{*/
++void  Matice::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble dmudD;
+@@ -590,10 +590,10 @@
+ 
+ 	/*Get B and n*/
+ 	n=GetN(); _assert_(n>0.);
+-	B=GetBbar();
++	B=GetBbar(gauss);
+ 	_assert_(this->isdamaged);
+ 	if(this->isenhanced){
+-		E=GetE();
++		E=GetE(gauss);
+ 		_assert_(E>0.);
+ 	}
+ 
+@@ -610,7 +610,7 @@
+ 	*pdmudD=dmudD;
+ }
+ /*}}}*/
+-void  Matice::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){/*{{{*/
++void  Matice::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble mu_prime;
+@@ -629,7 +629,7 @@
+ 		exy=epsilon[2];
+ 		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy ;
+ 
+-		GetViscosityBar(&mu,sqrt(eff2));
++		GetViscosityBar(&mu,sqrt(eff2),gauss);
+ 		n=GetN();
+ 		mu_prime=(1.-n)/(2.*n)*mu/eff2;
+ 	}
+@@ -708,14 +708,14 @@
+ 	}
+ 
+ 	/*Get viscosity*/
+-	this->GetViscosity(&viscosity,eps_eff);
++	this->GetViscosity(&viscosity,eps_eff,gauss);
+ 
+ 	/*Assign output pointer*/
+ 	*pviscosity=viscosity;
+ }
+ /*}}}*/
+-void  Matice::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+-	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon);
++void  Matice::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
++	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon,gauss);
+ }/*}}}*/
+ void  Matice::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
+ 
+@@ -737,14 +737,14 @@
+ 	}
+ 
+ 	/*Get viscosity*/
+-	this->GetViscosity(&viscosity,eps_eff);
++	this->GetViscosity(&viscosity,eps_eff,gauss);
+ 	_assert_(!xIsNan<IssmDouble>(viscosity));
+ 
+ 	/*Assign output pointer*/
+ 	*pviscosity=viscosity;
+ }/*}}}*/
+-void  Matice::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+-	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon);
++void  Matice::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
++	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon,gauss);
+ }/*}}}*/
+ void  Matice::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surface_input){/*{{{*/
+ 	/*Compute the L1L2 viscosity
+@@ -788,7 +788,7 @@
+ 
+ 	/*Get A*/
+ 	_assert_(this->GetN()==3.0);
+-	A=this->GetA();
++	A=this->GetA(gauss);
+ 
+ 	/*Solve for tau_perp (http://fr.wikipedia.org/wiki/Méthode_de_Cardan)*/
+ 	p     = tau_perp *tau_perp;
+@@ -825,11 +825,11 @@
+ 	}
+ 
+ 	/*Get viscosity*/
+-	this->GetViscosityBar(&viscosity,eps_eff);
++	this->GetViscosityBar(&viscosity,eps_eff,gauss);
+ 
+ 	/*Assign output pointer*/
+ 	*pviscosity=viscosity;
+ }/*}}}*/
+-void  Matice::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+-	this->GetViscosity2dDerivativeEpsSquare(pmu_prime,epsilon);
++void  Matice::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
++	this->GetViscosity2dDerivativeEpsSquare(pmu_prime,epsilon,gauss);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 22105)
+@@ -26,32 +26,32 @@
+ 		/*Numerics*/
+ 		virtual void       Configure(Elements* elements)=0;
+ 		virtual Material*  copy2(Element* element)=0;
+-		virtual IssmDouble GetA()=0;
+-		virtual IssmDouble GetAbar()=0;
+-		virtual IssmDouble GetB()=0;
+-		virtual IssmDouble GetBbar()=0;
+-		virtual IssmDouble GetD()=0;
+-		virtual IssmDouble GetDbar()=0;
++		virtual IssmDouble GetA(Gauss* gauss)=0;
++		virtual IssmDouble GetAbar(Gauss* gauss)=0;
++		virtual IssmDouble GetB(Gauss* gauss)=0;
++		virtual IssmDouble GetBbar(Gauss* gauss)=0;
++		virtual IssmDouble GetD(Gauss* gauss)=0;
++		virtual IssmDouble GetDbar(Gauss* gauss)=0;
+ 		virtual IssmDouble GetN()=0;
+-		virtual void       GetViscosity(IssmDouble* pviscosity,IssmDouble epseff)=0;
+-		virtual void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble epseff)=0;
+-		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+-		virtual void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+-		virtual void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+-		virtual void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble epseff)=0;
+-		virtual void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble epseff)=0;
+-		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
++		virtual void       GetViscosity(IssmDouble* pviscosity,IssmDouble epseff,Gauss* gauss)=0;
++		virtual void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble epseff,Gauss* gauss)=0;
++		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss)=0;
++		virtual void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss)=0;
++		virtual void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss)=0;
++		virtual void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble epseff,Gauss* gauss)=0;
++		virtual void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble epseff,Gauss* gauss)=0;
++		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss)=0;
+ 		virtual bool       IsDamage()=0;
+ 		virtual bool       IsEnhanced()=0;
+ 		virtual void       ResetHooks()=0;
+ 
+ 		virtual void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
+-		virtual void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
++		virtual void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss)=0;
+ 		virtual void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+-		virtual void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
++		virtual void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss)=0;
+ 		virtual void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0;
+ 		virtual void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+-		virtual void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0;
++		virtual void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss)=0;
+ 		virtual void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff)=0;
+ 		virtual void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
+ 		virtual void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 22105)
+@@ -55,24 +55,24 @@
+ 		/*Material virtual functions resolution: {{{*/
+ 		void   Configure(Elements* elements);
+ 		Material*  copy2(Element* element);
+-		void       GetViscosity(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosityBar(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void       GetViscosityDComplement(IssmDouble*, IssmDouble*);
+-		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		IssmDouble GetA();
+-		IssmDouble GetAbar();
+-		IssmDouble GetB();
+-		IssmDouble GetBbar();
+-		IssmDouble GetD();
+-		IssmDouble GetDbar();
+-		IssmDouble GetEc();
+-		IssmDouble GetEcbar();
+-		IssmDouble GetEs();
+-		IssmDouble GetEsbar();
++		void       GetViscosity(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosityBar(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss);
++		void       GetViscosityDComplement(IssmDouble*, IssmDouble*,Gauss* gauss);
++		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss);
++		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss);
++		IssmDouble GetA(Gauss* gauss);
++		IssmDouble GetAbar(Gauss* gauss);
++		IssmDouble GetB(Gauss* gauss);
++		IssmDouble GetBbar(Gauss* gauss);
++		IssmDouble GetD(Gauss* gauss);
++		IssmDouble GetDbar(Gauss* gauss);
++		IssmDouble GetEc(Gauss* gauss);
++		IssmDouble GetEcbar(Gauss* gauss);
++		IssmDouble GetEs(Gauss* gauss);
++		IssmDouble GetEsbar(Gauss* gauss);
+ 		IssmDouble GetN();
+ 		bool       IsDamage();
+ 		bool       IsEnhanced(){_error_("not supported");};
+@@ -80,18 +80,18 @@
+ 		void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 
+ 		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+-		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+-		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+-		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff);
+ 		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
+ 		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
+ 		/*}}}*/
+-		IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
+-		IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged);
++		IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss);
++		IssmDouble GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss);
+ };
+ 
+ #endif  /* _MATESTAR_H_ */
+Index: ../trunk-jpl/src/c/classes/Materials/Matlitho.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 22105)
+@@ -51,20 +51,20 @@
+ 		/*Material virtual functions resolution: {{{*/
+ 		Material*  copy2(Element* element){_error_("not implemented");};
+ 		void       Configure(Elements* elements);
+-		void       GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+-		IssmDouble GetA(){_error_("not supported");};
+-		IssmDouble GetAbar(){_error_("not supported");};
+-		IssmDouble GetB(){_error_("not supported");};
+-		IssmDouble GetBbar(){_error_("not supported");};
+-		IssmDouble GetD(){_error_("not supported");};
+-		IssmDouble GetDbar(){_error_("not supported");};
++		void       GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		IssmDouble GetA(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetAbar(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetB(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetBbar(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetD(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetDbar(Gauss* gauss){_error_("not supported");};
+ 		IssmDouble GetN(){_error_("not supported");};
+ 		bool       IsDamage(){_error_("not supported");};
+ 		bool       IsEnhanced(){_error_("not supported");};
+@@ -71,12 +71,12 @@
+ 		void       ResetHooks();
+ 
+ 		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
+-		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff){_error_("not supported");};
+ 		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
+ 		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 22105)
+@@ -59,22 +59,22 @@
+ 		/*Material virtual functions resolution: {{{*/
+ 		void   Configure(Elements* elements);
+ 		Material*  copy2(Element* element);
+-		void       GetViscosity(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosityBar(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void       GetViscosityDComplement(IssmDouble*, IssmDouble*);
+-		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff);
+-		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		IssmDouble GetA();
+-		IssmDouble GetAbar();
+-		IssmDouble GetB();
+-		IssmDouble GetBbar();
+-		IssmDouble GetD();
+-		IssmDouble GetDbar();
+-		IssmDouble GetE();
+-		IssmDouble GetEbar();
++		void       GetViscosity(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosityBar(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss);
++		void       GetViscosityDComplement(IssmDouble*, IssmDouble*,Gauss* gauss);
++		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss);
++		void       GetViscosity_B(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosity_D(IssmDouble* pviscosity, IssmDouble eps_eff,Gauss* gauss);
++		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss);
++		IssmDouble GetA(Gauss* gauss);
++		IssmDouble GetAbar(Gauss* gauss);
++		IssmDouble GetB(Gauss* gauss);
++		IssmDouble GetBbar(Gauss* gauss);
++		IssmDouble GetD(Gauss* gauss);
++		IssmDouble GetDbar(Gauss* gauss);
++		IssmDouble GetE(Gauss* gauss);
++		IssmDouble GetEbar(Gauss* gauss);
+ 		IssmDouble GetN();
+ 		bool       IsDamage();
+ 		bool       IsEnhanced();
+@@ -82,12 +82,12 @@
+ 		void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 
+ 		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+-		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+-		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+-		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
++		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
+ 		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
+ 		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+ 		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 22105)
+@@ -88,20 +88,20 @@
+ 		/*Material virtual functions resolution: {{{*/
+ 		Material*  copy2(Element* element){_error_("not implemented");};
+ 		void       Configure(Elements* elements);
+-		void       GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff){_error_("not supported");};
+-		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+-		IssmDouble GetA(){_error_("not supported");};
+-		IssmDouble GetAbar(){_error_("not supported");};
+-		IssmDouble GetB(){_error_("not supported");};
+-		IssmDouble GetBbar(){_error_("not supported");};
+-		IssmDouble GetD(){_error_("not supported");};
+-		IssmDouble GetDbar(){_error_("not supported");};
++		void       GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity_B(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity_D(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){_error_("not supported");};
++		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon,Gauss* gauss){_error_("not supported");};
++		IssmDouble GetA(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetAbar(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetB(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetBbar(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetD(Gauss* gauss){_error_("not supported");};
++		IssmDouble GetDbar(Gauss* gauss){_error_("not supported");};
+ 		IssmDouble GetN(){_error_("not supported");};
+ 		bool       IsDamage(){_error_("not supported");};
+ 		bool       IsEnhanced(){_error_("not supported");};
+@@ -108,12 +108,12 @@
+ 		void       ResetHooks();
+ 
+ 		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
+-		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
+ 		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+-		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not supported");};
++		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
+ 		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
+ 		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+ 		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22104)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22105)
+@@ -132,7 +132,7 @@
+ 	this->element  = (Element*)helement->delivers();
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetA(){/*{{{*/
++IssmDouble Matestar::GetA(Gauss* gauss){/*{{{*/
+ 	/*
+ 	 * A = 1/B^n
+     */
+@@ -145,7 +145,7 @@
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetAbar(){/*{{{*/
++IssmDouble Matestar::GetAbar(Gauss* gauss){/*{{{*/
+ 	/*
+ 	 * A = 1/B^n
+ 	 */
+@@ -158,7 +158,7 @@
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetB(){/*{{{*/
++IssmDouble Matestar::GetB(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble B;
+@@ -167,7 +167,7 @@
+ 	return B;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetBbar(){/*{{{*/
++IssmDouble Matestar::GetBbar(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Bbar;
+@@ -176,16 +176,16 @@
+ 	return Bbar;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetD(){/*{{{*/
++IssmDouble Matestar::GetD(Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetDbar(){/*{{{*/
++IssmDouble Matestar::GetDbar(Gauss* gauss){/*{{{*/
+ 
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetEc(){/*{{{*/
++IssmDouble Matestar::GetEc(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Ec;
+@@ -194,7 +194,7 @@
+ 	return Ec;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetEcbar(){/*{{{*/
++IssmDouble Matestar::GetEcbar(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Ecbar;
+@@ -203,7 +203,7 @@
+ 	return Ecbar;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetEs(){/*{{{*/
++IssmDouble Matestar::GetEs(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Es;
+@@ -212,7 +212,7 @@
+ 	return Es;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetEsbar(){/*{{{*/
++IssmDouble Matestar::GetEsbar(Gauss* gauss){/*{{{*/
+ 
+ 	/*Output*/
+ 	IssmDouble Esbar;
+@@ -228,27 +228,27 @@
+ 	return n;
+ }
+ /*}}}*/
+-void  Matestar::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/
++void  Matestar::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff){/*{{{*/
++void  Matestar::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){/*{{{*/
++void  Matestar::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){/*{{{*/
++void  Matestar::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){/*{{{*/
++void  Matestar::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
++IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss){/*{{{*/
+ 
+ 	/*output: */
+ 	IssmDouble viscosity;
+@@ -278,14 +278,13 @@
+ 	/*Get B and enhancement*/
+ 	n=GetN(); _assert_(n>0.);
+ 	if (isdepthaveraged==0.){
+-		B=GetB(); _assert_(B>0.);
+-		Ec=GetEc(); _assert_(Ec>=0.);
+-		Es=GetEs(); _assert_(Es>=0.);
++		B=GetB(gauss);   _assert_(B>0.);
++		Ec=GetEc(gauss); _assert_(Ec>=0.); Es=GetEs(gauss); _assert_(Es>=0.);
+ 	}
+ 	else{
+-		B=GetBbar(); _assert_(B>0.);
+-		Ec=GetEcbar(); _assert_(Ec>=0.);
+-		Es=GetEsbar(); _assert_(Es>=0.);
++		B=GetBbar(gauss);   _assert_(B>0.);
++		Ec=GetEcbar(gauss); _assert_(Ec>=0.);
++		Es=GetEsbar(gauss); _assert_(Es>=0.);
+ 	}
+ 
+ 	/*Get total enhancement factor E(lambdas)*/
+@@ -309,7 +308,7 @@
+ 	return viscosity;
+ }
+ /*}}}*/
+-IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged){/*{{{*/
++IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble dmudB;
+@@ -336,12 +335,12 @@
+ 
+ 	/*Get enhancement*/
+ 	if (isdepthaveraged==0.){
+-		Ec=GetEc(); _assert_(Ec>=0.);
+-		Es=GetEs(); _assert_(Es>=0.);
++		Ec=GetEc(gauss); _assert_(Ec>=0.);
++		Es=GetEs(gauss); _assert_(Es>=0.);
+ 	}
+ 	else{
+-		Ec=GetEcbar(); _assert_(Ec>=0.);
+-		Es=GetEsbar(); _assert_(Es>=0.);
++		Ec=GetEcbar(gauss); _assert_(Ec>=0.);
++		Es=GetEsbar(gauss); _assert_(Es>=0.);
+ 	}
+ 
+ 	/*Get total enhancement factor E(lambdas)*/
+@@ -349,7 +348,7 @@
+ 
+ 	/*Compute dmudB*/
+ 	if(eps_eff==0.) dmudB = 0.;
+-	else           dmudB = 1./(2.*pow(E,1./3.)*pow(eps_eff,2./3.));
++	else            dmudB = 1./(2.*pow(E,1./3.)*pow(eps_eff,2./3.));
+ 
+ 	/*Assign output*/
+ 	return dmudB;
+@@ -356,15 +355,15 @@
+ 
+ }
+ /*}}}*/
+-void  Matestar::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff){/*{{{*/
++void  Matestar::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	 _error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff){/*{{{*/
++void  Matestar::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
+ 	 _error_("not implemented yet");
+ }
+ /*}}}*/
+-void  Matestar::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){/*{{{*/
++void  Matestar::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
+@@ -436,7 +435,7 @@
+ 	}
+ 
+ 	/*Compute dmudB*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }
+ /*}}}*/
+ void  Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
+@@ -465,7 +464,7 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }/*}}}*/
+ void  Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
+ 	/*Intermediaries*/
+@@ -495,7 +494,7 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }/*}}}*/
+ void  Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
+ 
+@@ -537,11 +536,11 @@
+ 	}
+ 
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }
+ /*}}}*/
+-void  Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
+-	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon);
++void  Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
++	this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon,gauss);
+ }/*}}}*/
+ void  Matestar::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
+ 
+@@ -583,9 +582,9 @@
+ 	dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
+ 
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }/*}}}*/
+-void  Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
++void  Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+ void  Matestar::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surface_input){/*{{{*/
+@@ -634,8 +633,8 @@
+ 	}
+ 
+ 	/*Compute viscosity*/
+-	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged);
++	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
+ }/*}}}*/
+-void  Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){/*{{{*/
++void  Matestar::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22109-22110.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22109-22110.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22109-22110.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/NightlyRun/test2002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2002.py	(revision 22109)
++++ ../trunk-jpl/test/NightlyRun/test2002.py	(revision 22110)
+@@ -78,6 +78,9 @@
+ md.slr.reltol=np.nan
+ md.slr.abstol=1e-3
+ 
++#max number of iteration reverted back to 10 (i.e., the original default value)
++md.slr.maxiter=10 
++
+ #eustatic run: 
+ md.slr.rigid=0
+ md.slr.elastic=0
Index: /issm/oecreview/Archive/21724-22754/ISSM-22116-22117.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22116-22117.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22116-22117.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/BuildDakotaCustom.cmake.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/BuildDakotaCustom.cmake.patch	(revision 22116)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/BuildDakotaCustom.cmake.patch	(revision 22117)
+@@ -1,4 +1,4 @@
+-67a68,75
++67a68,78
+ > set( DAKOTA_HAVE_MPI ON
+ >  CACHE BOOL "Always build with MPI enabled" FORCE)
+ > set( MPI_INCLUDE_PATH
+@@ -7,6 +7,9 @@
+ > set( MPI_LIBRARY
+ >  "$ENV{ISSM_DIR}/externalpackages/mpich/install/lib/libmpich.so"
+ >  CACHE FILEPATH "Use installed MPI library" FORCE)
++> set( MPI_EXTRA_LIBRARY
++>  "$ENV{ISSM_DIR}/externalpackages/mpich/install/lib/libmpich.so"
++>	CACHE FILEPATH "Use MPI extra libraries" FORCE)
+ 73,77c73,77
+ < #set(BOOST_ROOT
+ < #    "path/to/custom/Boost/install/directory"
Index: /issm/oecreview/Archive/21724-22754/ISSM-22122-22123.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22122-22123.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22122-22123.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22122)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22123)
+@@ -216,7 +216,7 @@
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
+ 	IssmDouble  sigma_vm,sigma_max,sigma_max_floating,sigma_max_grounded;
+-	IssmDouble  epse_2,groundedice;
++	IssmDouble  epse_2,groundedice,bed;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -225,6 +225,7 @@
+ 	Input* vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++	Input* bs_input = inputs->GetInput(BaseEnum);                    _assert_(bs_input);
+ 	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+ 	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+ 	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+@@ -239,6 +240,7 @@
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
++		bs_input->GetInputValue(&bed,gauss);
+ 		smax_fl_input->GetInputValue(&sigma_max_floating,gauss);
+ 		smax_gr_input->GetInputValue(&sigma_max_grounded,gauss);
+ 		vel=sqrt(vx*vx+vy*vy)+1.e-14;
+@@ -271,9 +273,15 @@
+ 		 sigma_max = sigma_max_grounded;
+ 
+ 		/*Assign values*/
+-		calvingratex[iv]=vx*sigma_vm/sigma_max;
+-		calvingratey[iv]=vy*sigma_vm/sigma_max;
+-		calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
++		if(bed>0.){
++			calvingratex[iv]=0.;
++			calvingratey[iv]=0.;
++		}
++		else{
++			calvingratex[iv]=vx*sigma_vm/sigma_max;
++			calvingratey[iv]=vy*sigma_vm/sigma_max;
++		}
++		calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
+ 	}
+ 
+ 	/*Add input*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22123-22124.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22123-22124.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22123-22124.diff	(revision 22755)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22123)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22124)
+@@ -296,10 +296,9 @@
+ void       Tria::CalvingRateLevermann(){/*{{{*/
+ 
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	GaussTria* gauss=NULL;
+ 	IssmDouble  vx,vy,vel;
+ 	IssmDouble  strainparallel;
+-	IssmDouble  propcoeff;
++	IssmDouble  propcoeff,bed;
+ 	IssmDouble  strainperpendicular;
+ 	IssmDouble  calvingratex[NUMVERTICES];
+ 	IssmDouble  calvingratey[NUMVERTICES];
+@@ -309,14 +308,15 @@
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Retrieve all inputs and parameters we will need*/
+-	Input* vx_input=inputs->GetInput(VxEnum);																		_assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);																		_assert_(vy_input);
+-	Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum);								_assert_(strainparallel_input);
+-	Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum);					_assert_(strainperpendicular_input);
+-	Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum);                     _assert_(levermanncoeff_input);
++	Input* vx_input=inputs->GetInput(VxEnum);													_assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);													_assert_(vy_input);
++	Input* bs_input = inputs->GetInput(BaseEnum);                                 _assert_(bs_input);
++	Input* strainparallel_input=inputs->GetInput(StrainRateparallelEnum);			_assert_(strainparallel_input);
++	Input* strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum);_assert_(strainperpendicular_input);
++	Input* levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum);      _assert_(levermanncoeff_input);
+ 
+ 	/* Start looping on the number of vertices: */
+-	gauss=new GaussTria();
++	GaussTria* gauss=new GaussTria();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 
+@@ -327,11 +327,12 @@
+ 		strainparallel_input->GetInputValue(&strainparallel,gauss);
+ 		strainperpendicular_input->GetInputValue(&strainperpendicular,gauss);
+ 		levermanncoeff_input->GetInputValue(&propcoeff,gauss);
++		bs_input->GetInputValue(&bed,gauss);
+ 
+ 		/*Calving rate proportionnal to the positive product of the strain rate along the ice flow direction and the strain rate perpendicular to the ice flow */
+ 		calvingrate[iv]=propcoeff*strainparallel*strainperpendicular;
+-		if(calvingrate[iv]<0){
+-			calvingrate[iv]=0;
++		if(calvingrate[iv]<0. || bed>0.){
++			calvingrate[iv]=0.;
+ 		}
+ 		calvingratex[iv]=calvingrate[iv]*vx/(sqrt(vel)+1.e-14);
+ 		calvingratey[iv]=calvingrate[iv]*vy/(sqrt(vel)+1.e-14);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22123)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22124)
+@@ -192,7 +192,7 @@
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
+ 	IssmDouble  sigma_vm,sigma_max,sigma_max_floating,sigma_max_grounded;
+-	IssmDouble  epse_2,groundedice;
++	IssmDouble  epse_2,groundedice,bed;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -206,6 +206,7 @@
+ 	Input* vx_input = inputs->GetInput(VxAverageEnum); _assert_(vx_input);
+ 	Input* vy_input = inputs->GetInput(VyAverageEnum); _assert_(vy_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++	Input* bs_input = inputs->GetInput(BaseEnum);                    _assert_(bs_input);
+ 	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+ 	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+ 	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+@@ -220,6 +221,7 @@
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
++		bs_input->GetInputValue(&bed,gauss);
+ 		smax_fl_input->GetInputValue(&sigma_max_floating,gauss);
+ 		smax_gr_input->GetInputValue(&sigma_max_grounded,gauss);
+ 		vel=sqrt(vx*vx+vy*vy)+1.e-14;
+@@ -247,9 +249,15 @@
+ 		 sigma_max = sigma_max_grounded;
+ 
+ 		/*Assign values*/
+-		calvingratex[iv]=vx*sigma_vm/sigma_max;
+-		calvingratey[iv]=vy*sigma_vm/sigma_max;
+-		calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
++		if(bed>0.){
++			calvingratex[iv]=0.;
++			calvingratey[iv]=0.;
++		}
++		else{
++			calvingratex[iv]=vx*sigma_vm/sigma_max;
++			calvingratey[iv]=vy*sigma_vm/sigma_max;
++		}
++		calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
+ 	}
+ 
+ 	/*Add input*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22124-22125.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22124-22125.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22124-22125.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/examples/UncertaintyQuantification/runme.m
+===================================================================
+--- ../trunk-jpl/examples/UncertaintyQuantification/runme.m	(revision 22124)
++++ ../trunk-jpl/examples/UncertaintyQuantification/runme.m	(revision 22125)
+@@ -13,8 +13,8 @@
+ 		contour=expread(['./MassFluxes/MassFlux' num2str(i) '.exp']);
+ 		textpositions{i}=[contour.x(end) contour.y(end)];
+ 	end
+-
+-	plotmodel(md,'data',md.results.StressbalanceSolution.Vel,'log',10,'expdisp',...
++	vel=md.results.StressbalanceSolution.Vel; vel(vel==0)=nan;
++	plotmodel(md,'data',vel,'log',10,'expdisp',...
+ 		{'MassFluxes/MassFlux1.exp','MassFluxes/MassFlux2.exp',...
+ 		'MassFluxes/MassFlux3.exp','MassFluxes/MassFlux4.exp',...
+ 		'MassFluxes/MassFlux5.exp','MassFluxes/MassFlux6.exp',...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22125-22126.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22125-22126.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22125-22126.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22126-22127.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22126-22127.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22126-22127.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/examples/Data/Download.sh
+===================================================================
+--- ../trunk-jpl/examples/Data/Download.sh	(revision 22126)
++++ ../trunk-jpl/examples/Data/Download.sh	(revision 22127)
+@@ -7,7 +7,7 @@
+ $ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://websrv.cs.umt.edu/isis/images/c/cc/Antarctica_5km_withshelves_v0.75.nc' 'Antarctica_5km_withshelves_v0.75.nc'
+ 
+ echo "Downloading InSAR Antarctic velocities"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'ftp://n5eil01u.ecs.nsidc.org/SAN/MEASURES/NSIDC-0484.001/1996.01.01/antarctica_ice_velocity_900m.nc' 'Antarctica_ice_velocity.nc' 
++$ISSM_DIR/scripts/DownloadExternalPackage2.py 'https://issm.ess.uci.edu/files/tutorials/Antarctica_ice_velocity.nc' 'Antarctica_ice_velocity.nc' 
+ 
+ echo "Downloading PIG errors"
+ $ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://issm.jpl.nasa.gov/files/workshop2014/CrossOvers2009.mat' 'CrossOvers2009.mat'
Index: /issm/oecreview/Archive/21724-22754/ISSM-22127-22128.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22127-22128.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22127-22128.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/examples/Data/Download.sh
+===================================================================
+--- ../trunk-jpl/examples/Data/Download.sh	(revision 22127)
++++ ../trunk-jpl/examples/Data/Download.sh	(nonexistent)
+@@ -1,25 +0,0 @@
+-#!/bin/bash
+-
+-echo "Downloading Square shelf dataset"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://issm.jpl.nasa.gov/files/workshop2014/SquareShelf.nc' 'SquareShelf.nc'
+-
+-echo "Downloading SeaRISE dataset - Antarctica"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://websrv.cs.umt.edu/isis/images/c/cc/Antarctica_5km_withshelves_v0.75.nc' 'Antarctica_5km_withshelves_v0.75.nc'
+-
+-echo "Downloading InSAR Antarctic velocities"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'https://issm.ess.uci.edu/files/tutorials/Antarctica_ice_velocity.nc' 'Antarctica_ice_velocity.nc' 
+-
+-echo "Downloading PIG errors"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://issm.jpl.nasa.gov/files/workshop2014/CrossOvers2009.mat' 'CrossOvers2009.mat'
+-
+-echo "Downloading SeaRISE dataset - Greenland"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://websrv.cs.umt.edu/isis/images/e/e9/Greenland_5km_dev1.2.nc' 'Greenland_5km_dev1.2.nc'
+-
+-echo "Downloading Jason Box's SMB"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'http://issm.jpl.nasa.gov/files/examples/Box_Greenland_SMB_monthly_1840-2012_5km_cal_ver20141007.nc' 'Box_Greenland_SMB_monthly_1840-2012_5km_cal_ver20141007.nc'
+-
+-echo "Downloading IceBridge Jakobshavn bedrock"
+-$ISSM_DIR/scripts/DownloadExternalPackage2.py 'https://data.cresis.ku.edu/data/grids/old_versions/Jakobshavn_2008_2011_Composite.zip' 'Jakobshavn_2008_2011_Composite.zip'
+-unzip Jakobshavn_2008_2011_Composite.zip
+-mv Jakobshavn_2008_2011_Composite/grids/Jakobshavn_2008_2011_Composite_XYZGrid.txt .
+-rm -rf Jakobshavn_2008_2011_Composite Jakobshavn_2008_2011_Composite.zip
+
+Property changes on: ../trunk-jpl/examples/Data/Download.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22128-22129.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22128-22129.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22128-22129.diff	(revision 22755)
@@ -0,0 +1,1045 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 22128)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 22129)
+@@ -409,6 +409,8 @@
+ syn keyword	cType		IssmDouble IssmPDouble
+ 
+ "ISSM's objects begin
++syn keyword cType AdaptiveMeshRefinement
++syn keyword cType AmrBamg
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
+ syn keyword cType classes
+@@ -471,6 +473,7 @@
+ syn keyword cType Materials
+ syn keyword cType Matestar
+ syn keyword cType Matice
++syn keyword cType Matlitho
+ syn keyword cType Matpar
+ syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+@@ -496,6 +499,7 @@
+ syn keyword cType PowerVariogram
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
++syn keyword cType Regionaloutput
+ syn keyword cType Results
+ syn keyword cType Riftfront
+ syn keyword cType RiftStruct
+@@ -534,12 +538,13 @@
+ syn keyword cType DepthAverageAnalysis
+ syn keyword cType EnthalpyAnalysis
+ syn keyword cType EnumToAnalysis
++syn keyword cType EsaAnalysis
+ syn keyword cType ExtrapolationAnalysis
+ syn keyword cType ExtrudeFromBaseAnalysis
+ syn keyword cType ExtrudeFromTopAnalysis
+ syn keyword cType FreeSurfaceBaseAnalysis
+ syn keyword cType FreeSurfaceTopAnalysis
+-syn keyword cType GiaAnalysis
++syn keyword cType GiaIvinsAnalysis
+ syn keyword cType HydrologyDCEfficientAnalysis
+ syn keyword cType HydrologyDCInefficientAnalysis
+ syn keyword cType HydrologyShreveAnalysis
+@@ -547,10 +552,9 @@
+ syn keyword cType L2ProjectionBaseAnalysis
+ syn keyword cType L2ProjectionEPLAnalysis
+ syn keyword cType LevelsetAnalysis
+-syn keyword cType LsfReinitializationAnalysis
++syn keyword cType LoveAnalysis
+ syn keyword cType MasstransportAnalysis
+ syn keyword cType MeltingAnalysis
+-syn keyword cType MeshdeformationAnalysis
+ syn keyword cType SealevelriseAnalysis
+ syn keyword cType SmbAnalysis
+ syn keyword cType SmoothAnalysis
+@@ -561,26 +565,37 @@
+ syn keyword cType UzawaPressureAnalysis
+ "ISSM's objects end
+ "ISSM's Enums begin
++syn keyword cConstant FemModelEnum
+ syn keyword cConstant ParametersSTARTEnum
+-syn keyword cConstant FemModelEnum
++syn keyword cConstant AdolcParamEnum
++syn keyword cConstant FSSolverEnum
+ syn keyword cConstant FemModelCommEnum
+ syn keyword cConstant WorldCommEnum
+ syn keyword cConstant IcecapToEarthCommEnum
++syn keyword cConstant ToMITgcmCommEnum
+ syn keyword cConstant NumModelsEnum
+ syn keyword cConstant ModelIdEnum
+ syn keyword cConstant EarthIdEnum
++syn keyword cConstant SolutionTypeEnum
++syn keyword cConstant AnalysisTypeEnum
++syn keyword cConstant AnalysisCounterEnum
++syn keyword cConstant ConfigurationTypeEnum
++syn keyword cConstant InputToExtrudeEnum
++syn keyword cConstant InputToL2ProjectEnum
++syn keyword cConstant InputToDepthaverageInEnum
++syn keyword cConstant InputToDepthaverageOutEnum
++syn keyword cConstant InputToSmoothEnum
++syn keyword cConstant SmoothThicknessMultiplierEnum
++syn keyword cConstant LevelsetStabilizationEnum
++syn keyword cConstant TimesteppingTypeEnum
++syn keyword cConstant FixedTimesteppingEnum
++syn keyword cConstant AdaptiveTimesteppingEnum
++syn keyword cConstant TimesteppingTimeStepMinEnum
++syn keyword cConstant TimesteppingTimeStepMaxEnum
+ syn keyword cConstant AutodiffIsautodiffEnum
+ syn keyword cConstant AutodiffNumDependentsEnum
+-syn keyword cConstant AutodiffNumDependentObjectsEnum
+-syn keyword cConstant AutodiffDependentObjectNamesEnum
+-syn keyword cConstant AutodiffDependentObjectTypesEnum
+-syn keyword cConstant AutodiffDependentObjectIndicesEnum
+ syn keyword cConstant AutodiffDependentObjectsEnum
+ syn keyword cConstant AutodiffNumIndependentsEnum
+-syn keyword cConstant AutodiffNumIndependentObjectsEnum
+-syn keyword cConstant AutodiffIndependentObjectNamesEnum
+-syn keyword cConstant AutodiffIndependentObjectTypesEnum
+-syn keyword cConstant AutodiffIndependentObjectsEnum
+ syn keyword cConstant AutodiffJacobianEnum
+ syn keyword cConstant AutodiffXpEnum
+ syn keyword cConstant AutodiffDriverEnum
+@@ -587,7 +602,6 @@
+ syn keyword cConstant AutodiffFosForwardIndexEnum
+ syn keyword cConstant AutodiffFovForwardIndicesEnum
+ syn keyword cConstant AutodiffFosReverseIndexEnum
+-syn keyword cConstant AutodiffMassFluxSegmentsPresentEnum
+ syn keyword cConstant AutodiffKeepEnum
+ syn keyword cConstant AutodiffObufsizeEnum
+ syn keyword cConstant AutodiffLbufsizeEnum
+@@ -595,7 +609,6 @@
+ syn keyword cConstant AutodiffTbufsizeEnum
+ syn keyword cConstant AutodiffGcTriggerRatioEnum
+ syn keyword cConstant AutodiffGcTriggerMaxSizeEnum
+-syn keyword cConstant BalancethicknessSpcthicknessEnum
+ syn keyword cConstant BalancethicknessStabilizationEnum
+ syn keyword cConstant BalancethicknessThickeningRateEnum
+ syn keyword cConstant BasalforcingsEnum
+@@ -635,39 +648,28 @@
+ syn keyword cConstant StressbalanceIsnewtonEnum
+ syn keyword cConstant StressbalanceMaxiterEnum
+ syn keyword cConstant StressbalancePenaltyFactorEnum
+-syn keyword cConstant StressbalanceReferentialEnum
+ syn keyword cConstant StressbalanceReltolEnum
+ syn keyword cConstant StressbalanceNumRequestedOutputsEnum
+ syn keyword cConstant StressbalanceRequestedOutputsEnum
+ syn keyword cConstant StressbalanceRestolEnum
+-syn keyword cConstant StressbalanceRiftPenaltyLockEnum
+ syn keyword cConstant StressbalanceRiftPenaltyThresholdEnum
+ syn keyword cConstant StressbalanceShelfDampeningEnum
+-syn keyword cConstant StressbalanceSpcvxEnum
+-syn keyword cConstant StressbalanceSpcvyEnum
+-syn keyword cConstant StressbalanceSpcvzEnum
+ syn keyword cConstant StressbalanceFSreconditioningEnum
+-syn keyword cConstant StressbalanceVertexPairingEnum
+ syn keyword cConstant StressbalanceViscosityOvershootEnum
+ syn keyword cConstant LoadingforceXEnum
+ syn keyword cConstant LoadingforceYEnum
+ syn keyword cConstant LoadingforceZEnum
+-syn keyword cConstant FlowequationBorderSSAEnum
+-syn keyword cConstant FlowequationBorderHOEnum
+-syn keyword cConstant FlowequationBorderFSEnum
+-syn keyword cConstant FlowequationElementEquationEnum
+ syn keyword cConstant FlowequationIsSIAEnum
+ syn keyword cConstant FlowequationIsSSAEnum
+ syn keyword cConstant FlowequationIsL1L2Enum
+ syn keyword cConstant FlowequationIsHOEnum
+ syn keyword cConstant FlowequationIsFSEnum
+-syn keyword cConstant FlowequationFeSSAEnum
+-syn keyword cConstant FlowequationFeHOEnum
+ syn keyword cConstant FlowequationFeFSEnum
+-syn keyword cConstant FlowequationVertexEquationEnum
++syn keyword cConstant FlowequationBorderFSEnum
+ syn keyword cConstant FrictionAsEnum
+ syn keyword cConstant FrictionCoefficientEnum
+ syn keyword cConstant FrictionCoefficientcoulombEnum
++syn keyword cConstant FrictionPressureAdjustedTemperatureEnum
+ syn keyword cConstant FrictionPEnum
+ syn keyword cConstant FrictionQEnum
+ syn keyword cConstant FrictionMEnum
+@@ -681,7 +683,6 @@
+ syn keyword cConstant GeometryHydrostaticRatioEnum
+ syn keyword cConstant HydrologyModelEnum
+ syn keyword cConstant HydrologyshreveEnum
+-syn keyword cConstant HydrologyshreveSpcwatercolumnEnum
+ syn keyword cConstant HydrologyshreveStabilizationEnum
+ syn keyword cConstant HydrologydcEnum
+ syn keyword cConstant SedimentHeadEnum
+@@ -695,13 +696,11 @@
+ syn keyword cConstant EplZigZagCounterEnum
+ syn keyword cConstant HydrologydcMaxIterEnum
+ syn keyword cConstant HydrologydcRelTolEnum
+-syn keyword cConstant HydrologydcSpcsedimentHeadEnum
+ syn keyword cConstant HydrologydcSedimentCompressibilityEnum
+ syn keyword cConstant HydrologydcSedimentPorosityEnum
+ syn keyword cConstant HydrologydcSedimentThicknessEnum
+ syn keyword cConstant HydrologydcSedimentTransmitivityEnum
+ syn keyword cConstant HydrologydcWaterCompressibilityEnum
+-syn keyword cConstant HydrologydcSpceplHeadEnum
+ syn keyword cConstant HydrologydcMaskEplactiveNodeEnum
+ syn keyword cConstant HydrologydcMaskEplactiveEltEnum
+ syn keyword cConstant HydrologydcEplCompressibilityEnum
+@@ -717,6 +716,7 @@
+ syn keyword cConstant HydrologydcSedimentlimitFlagEnum
+ syn keyword cConstant HydrologydcSedimentlimitEnum
+ syn keyword cConstant HydrologydcTransferFlagEnum
++syn keyword cConstant HydrologydcUnconfinedFlagEnum
+ syn keyword cConstant HydrologydcLeakageFactorEnum
+ syn keyword cConstant HydrologydcPenaltyFactorEnum
+ syn keyword cConstant HydrologydcPenaltyLockEnum
+@@ -728,6 +728,7 @@
+ syn keyword cConstant HydrologySedimentKmaxEnum
+ syn keyword cConstant HydrologysommersEnum
+ syn keyword cConstant HydrologyHeadEnum
++syn keyword cConstant HydrologyHeadOldEnum
+ syn keyword cConstant HydrologyGapHeightEnum
+ syn keyword cConstant HydrologyBumpSpacingEnum
+ syn keyword cConstant HydrologyBumpHeightEnum
+@@ -735,8 +736,9 @@
+ syn keyword cConstant HydrologyMoulinInputEnum
+ syn keyword cConstant HydrologyReynoldsEnum
+ syn keyword cConstant HydrologyNeumannfluxEnum
+-syn keyword cConstant HydrologySpcheadEnum
+-syn keyword cConstant HydrologyConductivityEnum
++syn keyword cConstant HydrologyRelaxationEnum
++syn keyword cConstant HydrologyBasalFluxEnum
++syn keyword cConstant HydrologyStorageEnum
+ syn keyword cConstant InversionControlParametersEnum
+ syn keyword cConstant InversionControlScalingFactorsEnum
+ syn keyword cConstant InversionCostFunctionThresholdEnum
+@@ -746,7 +748,6 @@
+ syn keyword cConstant InversionIscontrolEnum
+ syn keyword cConstant InversionTypeEnum
+ syn keyword cConstant InversionIncompleteAdjointEnum
+-syn keyword cConstant InversionMaxParametersEnum
+ syn keyword cConstant InversionMaxiterPerStepEnum
+ syn keyword cConstant InversionMaxiterEnum
+ syn keyword cConstant InversionMaxstepsEnum
+@@ -756,7 +757,6 @@
+ syn keyword cConstant InversionGrtolEnum
+ syn keyword cConstant InversionGttolEnum
+ syn keyword cConstant InversionAlgorithmEnum
+-syn keyword cConstant InversionMinParametersEnum
+ syn keyword cConstant InversionNstepsEnum
+ syn keyword cConstant InversionDxminEnum
+ syn keyword cConstant InversionNumControlParametersEnum
+@@ -779,13 +779,12 @@
+ syn keyword cConstant MaterialsRheologyBbarEnum
+ syn keyword cConstant MaterialsRheologyLawEnum
+ syn keyword cConstant MaterialsRheologyNEnum
+-syn keyword cConstant MaterialsRheologyKoEnum
+-syn keyword cConstant MaterialsRheologyKobarEnum
++syn keyword cConstant MaterialsRheologyEEnum
++syn keyword cConstant MaterialsRheologyEbarEnum
+ syn keyword cConstant MaterialsRheologyEcEnum
+ syn keyword cConstant MaterialsRheologyEcbarEnum
+ syn keyword cConstant MaterialsRheologyEsEnum
+ syn keyword cConstant MaterialsRheologyEsbarEnum
+-syn keyword cConstant DamageIsdamageEnum
+ syn keyword cConstant DamageDEnum
+ syn keyword cConstant DamageFEnum
+ syn keyword cConstant DamageDbarEnum
+@@ -800,7 +799,6 @@
+ syn keyword cConstant DamageKappaEnum
+ syn keyword cConstant DamageStabilizationEnum
+ syn keyword cConstant DamageMaxiterEnum
+-syn keyword cConstant DamageSpcdamageEnum
+ syn keyword cConstant DamageMaxDamageEnum
+ syn keyword cConstant DamageEquivStressEnum
+ syn keyword cConstant DamageEvolutionNumRequestedOutputsEnum
+@@ -815,7 +813,6 @@
+ syn keyword cConstant CalvingDevEnum
+ syn keyword cConstant CalvingMinthicknessEnum
+ syn keyword cConstant DefaultCalvingEnum
+-syn keyword cConstant CalvingRequestedOutputsEnum
+ syn keyword cConstant CalvinglevermannCoeffEnum
+ syn keyword cConstant CalvinglevermannMeltingrateEnum
+ syn keyword cConstant CalvingdevCoeffEnum
+@@ -823,6 +820,9 @@
+ syn keyword cConstant CalvingrateyEnum
+ syn keyword cConstant CalvingratexAverageEnum
+ syn keyword cConstant CalvingrateyAverageEnum
++syn keyword cConstant CalvingStressThresholdGroundediceEnum
++syn keyword cConstant CalvingStressThresholdFloatingiceEnum
++syn keyword cConstant CalvingMaxEnum
+ syn keyword cConstant StrainRateparallelEnum
+ syn keyword cConstant StrainRateperpendicularEnum
+ syn keyword cConstant StrainRateeffectiveEnum
+@@ -839,26 +839,17 @@
+ syn keyword cConstant MaterialsMantleDensityEnum
+ syn keyword cConstant MaterialsEarthDensityEnum
+ syn keyword cConstant MeshAverageVertexConnectivityEnum
+-syn keyword cConstant MeshElements2dEnum
++syn keyword cConstant MeshXEnum
++syn keyword cConstant MeshYEnum
++syn keyword cConstant MeshZEnum
+ syn keyword cConstant MeshElementsEnum
+-syn keyword cConstant MeshLowerelementsEnum
+-syn keyword cConstant MeshNumberofelements2dEnum
+ syn keyword cConstant MeshNumberofelementsEnum
+ syn keyword cConstant MeshNumberoflayersEnum
+-syn keyword cConstant MeshNumberofvertices2dEnum
+ syn keyword cConstant MeshNumberofverticesEnum
+-syn keyword cConstant MeshUpperelementsEnum
+ syn keyword cConstant MeshVertexonbaseEnum
+ syn keyword cConstant MeshVertexonsurfaceEnum
+ syn keyword cConstant MeshVertexonboundaryEnum
+-syn keyword cConstant MeshXEnum
+-syn keyword cConstant MeshYEnum
+-syn keyword cConstant MeshZEnum
+-syn keyword cConstant MeshLatEnum
+-syn keyword cConstant MeshLongEnum
+-syn keyword cConstant MeshREnum
+ syn keyword cConstant MeshElementtypeEnum
+-syn keyword cConstant MeshSegmentsEnum
+ syn keyword cConstant DomainTypeEnum
+ syn keyword cConstant DomainDimensionEnum
+ syn keyword cConstant Domain2DhorizontalEnum
+@@ -865,7 +856,6 @@
+ syn keyword cConstant Domain2DverticalEnum
+ syn keyword cConstant Domain3DEnum
+ syn keyword cConstant Domain3DsurfaceEnum
+-syn keyword cConstant MiscellaneousNameEnum
+ syn keyword cConstant MasstransportHydrostaticAdjustmentEnum
+ syn keyword cConstant MasstransportIsfreesurfaceEnum
+ syn keyword cConstant MasstransportMinThicknessEnum
+@@ -872,20 +862,16 @@
+ syn keyword cConstant MasstransportPenaltyFactorEnum
+ syn keyword cConstant MasstransportSpcthicknessEnum
+ syn keyword cConstant MasstransportStabilizationEnum
+-syn keyword cConstant MasstransportVertexPairingEnum
+ syn keyword cConstant MasstransportNumRequestedOutputsEnum
+ syn keyword cConstant MasstransportRequestedOutputsEnum
+ syn keyword cConstant QmuIsdakotaEnum
+ syn keyword cConstant MassFluxSegmentsEnum
+ syn keyword cConstant MassFluxSegmentsPresentEnum
+-syn keyword cConstant QmuMassFluxSegmentsPresentEnum
+ syn keyword cConstant QmuNumberofpartitionsEnum
+ syn keyword cConstant QmuNumberofresponsesEnum
+ syn keyword cConstant QmuPartitionEnum
+ syn keyword cConstant QmuResponsedescriptorsEnum
+ syn keyword cConstant QmuVariabledescriptorsEnum
+-syn keyword cConstant RiftsNumriftsEnum
+-syn keyword cConstant RiftsRiftstructEnum
+ syn keyword cConstant SettingsResultsOnNodesEnum
+ syn keyword cConstant SettingsIoGatherEnum
+ syn keyword cConstant SettingsLowmemEnum
+@@ -892,6 +878,7 @@
+ syn keyword cConstant SettingsOutputFrequencyEnum
+ syn keyword cConstant SettingsRecordingFrequencyEnum
+ syn keyword cConstant SettingsWaitonlockEnum
++syn keyword cConstant SettingsSolverResidueThresholdEnum
+ syn keyword cConstant DebugProfilingEnum
+ syn keyword cConstant ProfilingCurrentMemEnum
+ syn keyword cConstant ProfilingCurrentFlopsEnum
+@@ -928,6 +915,7 @@
+ syn keyword cConstant TransientIsmasstransportEnum
+ syn keyword cConstant TransientIsthermalEnum
+ syn keyword cConstant TransientIsgiaEnum
++syn keyword cConstant TransientIsesaEnum
+ syn keyword cConstant TransientIsdamageevolutionEnum
+ syn keyword cConstant TransientIshydrologyEnum
+ syn keyword cConstant TransientIsmovingfrontEnum
+@@ -934,12 +922,8 @@
+ syn keyword cConstant TransientIsslrEnum
+ syn keyword cConstant TransientNumRequestedOutputsEnum
+ syn keyword cConstant TransientRequestedOutputsEnum
+-syn keyword cConstant PotentialEnum
+-syn keyword cConstant BalancethicknessSpcpotentialEnum
+ syn keyword cConstant BalancethicknessApparentMassbalanceEnum
+-syn keyword cConstant Balancethickness2MisfitEnum
+ syn keyword cConstant BalancethicknessDiffusionCoefficientEnum
+-syn keyword cConstant BalancethicknessCmuEnum
+ syn keyword cConstant BalancethicknessOmegaEnum
+ syn keyword cConstant BalancethicknessD0Enum
+ syn keyword cConstant SmbEnum
+@@ -948,6 +932,16 @@
+ syn keyword cConstant SmbNumRequestedOutputsEnum
+ syn keyword cConstant SmbRequestedOutputsEnum
+ syn keyword cConstant SmbIsInitializedEnum
++syn keyword cConstant SmbDziniEnum
++syn keyword cConstant SmbDiniEnum
++syn keyword cConstant SmbReiniEnum
++syn keyword cConstant SmbGdniniEnum
++syn keyword cConstant SmbGspiniEnum
++syn keyword cConstant SmbECiniEnum
++syn keyword cConstant SmbWiniEnum
++syn keyword cConstant SmbAiniEnum
++syn keyword cConstant SmbTiniEnum
++syn keyword cConstant SmbSizeiniEnum
+ syn keyword cConstant SMBforcingEnum
+ syn keyword cConstant SmbMassBalanceEnum
+ syn keyword cConstant SMBgembEnum
+@@ -957,7 +951,6 @@
+ syn keyword cConstant SmbDswrfEnum
+ syn keyword cConstant SmbDlwrfEnum
+ syn keyword cConstant SmbPEnum
+-syn keyword cConstant SmbSwfEnum
+ syn keyword cConstant SmbEAirEnum
+ syn keyword cConstant SmbPAirEnum
+ syn keyword cConstant SmbTmeanEnum
+@@ -987,7 +980,6 @@
+ syn keyword cConstant SmbGdnEnum
+ syn keyword cConstant SmbGspEnum
+ syn keyword cConstant SmbECEnum
+-syn keyword cConstant SmbCondensationEnum
+ syn keyword cConstant SmbWEnum
+ syn keyword cConstant SmbAEnum
+ syn keyword cConstant SmbTEnum
+@@ -999,6 +991,8 @@
+ syn keyword cConstant SmbIsmeltEnum
+ syn keyword cConstant SmbIsdensificationEnum
+ syn keyword cConstant SmbIsturbulentfluxEnum
++syn keyword cConstant SmbDz_addEnum
++syn keyword cConstant SmbM_addEnum
+ syn keyword cConstant SMBpddEnum
+ syn keyword cConstant SmbDelta18oEnum
+ syn keyword cConstant SmbDelta18oSurfaceEnum
+@@ -1020,6 +1014,7 @@
+ syn keyword cConstant SmbSealevEnum
+ syn keyword cConstant SMBd18opddEnum
+ syn keyword cConstant SmbDpermilEnum
++syn keyword cConstant SmbFEnum
+ syn keyword cConstant SMBgradientsEnum
+ syn keyword cConstant SmbMonthlytemperaturesEnum
+ syn keyword cConstant SmbHrefEnum
+@@ -1035,169 +1030,10 @@
+ syn keyword cConstant SmbMeltEnum
+ syn keyword cConstant SmbRefreezeEnum
+ syn keyword cConstant SMBgcmEnum
+-syn keyword cConstant SmbIspddEnum
+-syn keyword cConstant SmbIssmbgradientsEnum
+-syn keyword cConstant SolutionTypeEnum
+-syn keyword cConstant AnalysisTypeEnum
+-syn keyword cConstant ConfigurationTypeEnum
+-syn keyword cConstant AdjointBalancethicknessAnalysisEnum
+-syn keyword cConstant AdjointBalancethickness2AnalysisEnum
+-syn keyword cConstant AdjointHorizAnalysisEnum
+-syn keyword cConstant AnalysisCounterEnum
+-syn keyword cConstant DefaultAnalysisEnum
+-syn keyword cConstant BalancethicknessAnalysisEnum
+-syn keyword cConstant BalancethicknessSolutionEnum
+-syn keyword cConstant Balancethickness2AnalysisEnum
+-syn keyword cConstant Balancethickness2SolutionEnum
+-syn keyword cConstant BalancethicknessSoftAnalysisEnum
+-syn keyword cConstant BalancethicknessSoftSolutionEnum
+-syn keyword cConstant BalancevelocityAnalysisEnum
+-syn keyword cConstant BalancevelocitySolutionEnum
+-syn keyword cConstant L2ProjectionEPLAnalysisEnum
+-syn keyword cConstant L2ProjectionBaseAnalysisEnum
+-syn keyword cConstant BedSlopeSolutionEnum
+-syn keyword cConstant DamageEvolutionSolutionEnum
+-syn keyword cConstant DamageEvolutionAnalysisEnum
+-syn keyword cConstant StressbalanceAnalysisEnum
+-syn keyword cConstant StressbalanceSIAAnalysisEnum
+-syn keyword cConstant StressbalanceSolutionEnum
+-syn keyword cConstant StressbalanceVerticalAnalysisEnum
+-syn keyword cConstant EnthalpyAnalysisEnum
+-syn keyword cConstant FlaimAnalysisEnum
+-syn keyword cConstant FlaimSolutionEnum
+-syn keyword cConstant HydrologyShreveAnalysisEnum
+-syn keyword cConstant HydrologyDCInefficientAnalysisEnum
+-syn keyword cConstant HydrologyDCEfficientAnalysisEnum
+-syn keyword cConstant HydrologySommersAnalysisEnum
+-syn keyword cConstant HydrologySolutionEnum
+-syn keyword cConstant MeltingAnalysisEnum
+-syn keyword cConstant MasstransportAnalysisEnum
+-syn keyword cConstant MasstransportSolutionEnum
+-syn keyword cConstant FreeSurfaceBaseAnalysisEnum
+-syn keyword cConstant FreeSurfaceTopAnalysisEnum
+-syn keyword cConstant SurfaceNormalVelocityEnum
+-syn keyword cConstant ExtrudeFromBaseAnalysisEnum
+-syn keyword cConstant ExtrudeFromTopAnalysisEnum
+-syn keyword cConstant DepthAverageAnalysisEnum
+-syn keyword cConstant SteadystateSolutionEnum
+-syn keyword cConstant SurfaceSlopeSolutionEnum
+-syn keyword cConstant SmoothAnalysisEnum
+-syn keyword cConstant ThermalAnalysisEnum
+-syn keyword cConstant ThermalSolutionEnum
+-syn keyword cConstant TransientSolutionEnum
+-syn keyword cConstant UzawaPressureAnalysisEnum
+-syn keyword cConstant GiaSolutionEnum
+-syn keyword cConstant GiaAnalysisEnum
+-syn keyword cConstant MeshdeformationSolutionEnum
+-syn keyword cConstant MeshdeformationAnalysisEnum
+-syn keyword cConstant LevelsetAnalysisEnum
+-syn keyword cConstant LevelsetStabilizationEnum
+-syn keyword cConstant ExtrapolationAnalysisEnum
+-syn keyword cConstant LsfReinitializationAnalysisEnum
+-syn keyword cConstant ApproximationEnum
+-syn keyword cConstant NoneApproximationEnum
+-syn keyword cConstant SIAApproximationEnum
+-syn keyword cConstant SSAApproximationEnum
+-syn keyword cConstant SSAHOApproximationEnum
+-syn keyword cConstant SSAFSApproximationEnum
+-syn keyword cConstant L1L2ApproximationEnum
+-syn keyword cConstant HOApproximationEnum
+-syn keyword cConstant HOFSApproximationEnum
+-syn keyword cConstant FSApproximationEnum
+-syn keyword cConstant FSvelocityEnum
+-syn keyword cConstant FSpressureEnum
+-syn keyword cConstant DataSetEnum
+-syn keyword cConstant ConstraintsEnum
+-syn keyword cConstant LoadsEnum
+-syn keyword cConstant MaterialsEnum
+-syn keyword cConstant NodesEnum
+-syn keyword cConstant ContoursEnum
+-syn keyword cConstant ParametersEnum
+-syn keyword cConstant VerticesEnum
+-syn keyword cConstant ResultsEnum
+-syn keyword cConstant GenericParamEnum
+-syn keyword cConstant AdolcParamEnum
+-syn keyword cConstant BoolInputEnum
+-syn keyword cConstant BoolParamEnum
+-syn keyword cConstant ContourEnum
+-syn keyword cConstant ControlInputEnum
+-syn keyword cConstant DatasetInputEnum
+-syn keyword cConstant DoubleInputEnum
+-syn keyword cConstant DoubleArrayInputEnum
+-syn keyword cConstant DataSetParamEnum
+-syn keyword cConstant DoubleMatArrayParamEnum
+-syn keyword cConstant DoubleMatParamEnum
+-syn keyword cConstant DoubleParamEnum
+-syn keyword cConstant DoubleVecParamEnum
+-syn keyword cConstant ElementEnum
+-syn keyword cConstant ElementHookEnum
+-syn keyword cConstant HookEnum
+-syn keyword cConstant ExternalResultEnum
+-syn keyword cConstant FileParamEnum
+-syn keyword cConstant InputEnum
+-syn keyword cConstant IntInputEnum
+-syn keyword cConstant InputToExtrudeEnum
+-syn keyword cConstant InputToL2ProjectEnum
+-syn keyword cConstant InputToDepthaverageEnum
+-syn keyword cConstant InputToSmoothEnum
+-syn keyword cConstant SmoothThicknessMultiplierEnum
+-syn keyword cConstant IntParamEnum
+-syn keyword cConstant IntVecParamEnum
+-syn keyword cConstant TransientParamEnum
+-syn keyword cConstant MaticeEnum
+-syn keyword cConstant MatdamageiceEnum
+-syn keyword cConstant MatestarEnum
+-syn keyword cConstant MatparEnum
+-syn keyword cConstant NodeEnum
+-syn keyword cConstant NumericalfluxEnum
+-syn keyword cConstant NumericalfluxTypeEnum
+-syn keyword cConstant NeumannfluxEnum
+-syn keyword cConstant ParamEnum
+-syn keyword cConstant MoulinEnum
+-syn keyword cConstant PengridEnum
+-syn keyword cConstant PenpairEnum
+-syn keyword cConstant ProfilerEnum
+-syn keyword cConstant MatrixParamEnum
+-syn keyword cConstant MassconEnum
+-syn keyword cConstant MassconNameEnum
+-syn keyword cConstant MassconDefinitionenumEnum
+-syn keyword cConstant MassconLevelsetEnum
+-syn keyword cConstant MassconaxpbyEnum
+-syn keyword cConstant MassconaxpbyNameEnum
+-syn keyword cConstant MassconaxpbyDefinitionenumEnum
+-syn keyword cConstant MassconaxpbyNamexEnum
+-syn keyword cConstant MassconaxpbyNameyEnum
+-syn keyword cConstant MassconaxpbyAlphaEnum
+-syn keyword cConstant MassconaxpbyBetaEnum
+-syn keyword cConstant NodeSIdEnum
+-syn keyword cConstant VectorParamEnum
+-syn keyword cConstant RiftfrontEnum
+-syn keyword cConstant RiftfrontTypeEnum
+-syn keyword cConstant SegmentEnum
+-syn keyword cConstant SegmentRiftfrontEnum
+-syn keyword cConstant SpcDynamicEnum
+-syn keyword cConstant SpcStaticEnum
+-syn keyword cConstant SpcTransientEnum
+-syn keyword cConstant StringArrayParamEnum
+-syn keyword cConstant StringParamEnum
+-syn keyword cConstant SegEnum
+-syn keyword cConstant SegInputEnum
+-syn keyword cConstant TriaEnum
+-syn keyword cConstant TriaInputEnum
+-syn keyword cConstant TetraEnum
+-syn keyword cConstant TetraInputEnum
+-syn keyword cConstant PentaEnum
+-syn keyword cConstant PentaInputEnum
+-syn keyword cConstant VertexEnum
+-syn keyword cConstant VertexPIdEnum
+-syn keyword cConstant VertexSIdEnum
+-syn keyword cConstant AirEnum
+-syn keyword cConstant IceEnum
+-syn keyword cConstant MelangeEnum
+-syn keyword cConstant WaterEnum
+-syn keyword cConstant ClosedEnum
+-syn keyword cConstant FreeEnum
+-syn keyword cConstant OpenEnum
++syn keyword cConstant SMBgradientselaEnum
++syn keyword cConstant SmbElaEnum
++syn keyword cConstant SmbBMaxEnum
++syn keyword cConstant SmbBMinEnum
+ syn keyword cConstant AdjointpEnum
+ syn keyword cConstant AdjointxEnum
+ syn keyword cConstant AdjointyEnum
+@@ -1207,9 +1043,6 @@
+ syn keyword cConstant BedSlopeYEnum
+ syn keyword cConstant BoundaryEnum
+ syn keyword cConstant ConvergedEnum
+-syn keyword cConstant FillEnum
+-syn keyword cConstant FractionIncrementEnum
+-syn keyword cConstant FrictionEnum
+ syn keyword cConstant InternalEnum
+ syn keyword cConstant MassFluxEnum
+ syn keyword cConstant MeltingOffsetEnum
+@@ -1218,7 +1051,6 @@
+ syn keyword cConstant PressurePicardEnum
+ syn keyword cConstant AndroidFrictionCoefficientEnum
+ syn keyword cConstant ResetPenaltiesEnum
+-syn keyword cConstant SegmentOnIceShelfEnum
+ syn keyword cConstant SurfaceAbsVelMisfitEnum
+ syn keyword cConstant SurfaceAreaEnum
+ syn keyword cConstant SurfaceAverageVelMisfitEnum
+@@ -1260,8 +1092,9 @@
+ syn keyword cConstant DragCoefficientAbsGradientEnum
+ syn keyword cConstant TransientInputEnum
+ syn keyword cConstant WaterfractionEnum
++syn keyword cConstant WaterfractionDrainageEnum
++syn keyword cConstant WaterfractionDrainageIntegratedEnum
+ syn keyword cConstant WatercolumnEnum
+-syn keyword cConstant BasalFrictionEnum
+ syn keyword cConstant ViscousHeatingEnum
+ syn keyword cConstant HydrologyWaterVxEnum
+ syn keyword cConstant HydrologyWaterVyEnum
+@@ -1297,39 +1130,19 @@
+ syn keyword cConstant GiaCrossSectionShapeEnum
+ syn keyword cConstant GiadWdtEnum
+ syn keyword cConstant GiaWEnum
+-syn keyword cConstant P0Enum
+-syn keyword cConstant P0ArrayEnum
+-syn keyword cConstant P1Enum
+-syn keyword cConstant P1DGEnum
+-syn keyword cConstant P1bubbleEnum
+-syn keyword cConstant P1bubblecondensedEnum
+-syn keyword cConstant P2Enum
+-syn keyword cConstant P2bubbleEnum
+-syn keyword cConstant P2bubblecondensedEnum
+-syn keyword cConstant P2xP1Enum
+-syn keyword cConstant P1xP2Enum
+-syn keyword cConstant P1xP3Enum
+-syn keyword cConstant P2xP4Enum
+-syn keyword cConstant P1P1Enum
+-syn keyword cConstant P1P1GLSEnum
+-syn keyword cConstant MINIEnum
+-syn keyword cConstant MINIcondensedEnum
+-syn keyword cConstant TaylorHoodEnum
+-syn keyword cConstant LATaylorHoodEnum
+-syn keyword cConstant XTaylorHoodEnum
+-syn keyword cConstant OneLayerP4zEnum
+-syn keyword cConstant CrouzeixRaviartEnum
+-syn keyword cConstant LACrouzeixRaviartEnum
+ syn keyword cConstant SaveResultsEnum
+ syn keyword cConstant BoolExternalResultEnum
+ syn keyword cConstant DoubleExternalResultEnum
+ syn keyword cConstant DoubleMatExternalResultEnum
+ syn keyword cConstant IntExternalResultEnum
++syn keyword cConstant IntMatExternalResultEnum
+ syn keyword cConstant JEnum
+ syn keyword cConstant StringExternalResultEnum
+ syn keyword cConstant StepEnum
+ syn keyword cConstant TimeEnum
+ syn keyword cConstant WaterColumnOldEnum
++syn keyword cConstant SurfaceObservationEnum
++syn keyword cConstant WeightsSurfaceObservationEnum
+ syn keyword cConstant OutputdefinitionEnum
+ syn keyword cConstant Outputdefinition1Enum
+ syn keyword cConstant Outputdefinition2Enum
+@@ -1433,48 +1246,10 @@
+ syn keyword cConstant Outputdefinition100Enum
+ syn keyword cConstant OutputdefinitionListEnum
+ syn keyword cConstant MassfluxatgateEnum
+-syn keyword cConstant MassfluxatgateNameEnum
+-syn keyword cConstant MassfluxatgateDefinitionenumEnum
+-syn keyword cConstant MassfluxatgateSegmentsEnum
+ syn keyword cConstant NodalvalueEnum
+-syn keyword cConstant NodalvalueNameEnum
+-syn keyword cConstant NodalvalueDefinitionenumEnum
+-syn keyword cConstant NodalvalueModelEnumEnum
+-syn keyword cConstant NodalvalueNodeEnum
+-syn keyword cConstant MisfitNameEnum
+-syn keyword cConstant MisfitDefinitionenumEnum
+-syn keyword cConstant MisfitModelEnumEnum
+-syn keyword cConstant MisfitObservationEnum
+-syn keyword cConstant MisfitObservationEnumEnum
+-syn keyword cConstant MisfitLocalEnum
+-syn keyword cConstant MisfitTimeinterpolationEnum
+-syn keyword cConstant MisfitWeightsEnum
+-syn keyword cConstant MisfitWeightsEnumEnum
+-syn keyword cConstant SurfaceObservationEnum
+-syn keyword cConstant WeightsSurfaceObservationEnum
++syn keyword cConstant RegionaloutputEnum
+ syn keyword cConstant VxObsEnum
+-syn keyword cConstant WeightsVxObsEnum
+ syn keyword cConstant VyObsEnum
+-syn keyword cConstant WeightsVyObsEnum
+-syn keyword cConstant MinVelEnum
+-syn keyword cConstant MaxVelEnum
+-syn keyword cConstant MinVxEnum
+-syn keyword cConstant MaxVxEnum
+-syn keyword cConstant MaxAbsVxEnum
+-syn keyword cConstant MinVyEnum
+-syn keyword cConstant MaxVyEnum
+-syn keyword cConstant MaxAbsVyEnum
+-syn keyword cConstant MinVzEnum
+-syn keyword cConstant MaxVzEnum
+-syn keyword cConstant MaxAbsVzEnum
+-syn keyword cConstant FloatingAreaEnum
+-syn keyword cConstant GroundedAreaEnum
+-syn keyword cConstant IceMassEnum
+-syn keyword cConstant IceVolumeEnum
+-syn keyword cConstant IceVolumeAboveFloatationEnum
+-syn keyword cConstant TotalFloatingBmbEnum
+-syn keyword cConstant TotalGroundedBmbEnum
+-syn keyword cConstant TotalSmbEnum
+ syn keyword cConstant AbsoluteEnum
+ syn keyword cConstant IncrementalEnum
+ syn keyword cConstant AugmentedLagrangianREnum
+@@ -1487,14 +1262,10 @@
+ syn keyword cConstant SoftMigrationEnum
+ syn keyword cConstant SubelementMigrationEnum
+ syn keyword cConstant SubelementMigration2Enum
++syn keyword cConstant SubelementMigration3Enum
+ syn keyword cConstant ContactEnum
+ syn keyword cConstant GroundingOnlyEnum
+ syn keyword cConstant MaskGroundediceLevelsetEnum
+-syn keyword cConstant GaussSegEnum
+-syn keyword cConstant GaussTriaEnum
+-syn keyword cConstant GaussTetraEnum
+-syn keyword cConstant GaussPentaEnum
+-syn keyword cConstant FSSolverEnum
+ syn keyword cConstant AdjointEnum
+ syn keyword cConstant ColinearEnum
+ syn keyword cConstant ControlSteadyEnum
+@@ -1528,12 +1299,6 @@
+ syn keyword cConstant ScaledEnum
+ syn keyword cConstant SeparateEnum
+ syn keyword cConstant SsetEnum
+-syn keyword cConstant VerboseEnum
+-syn keyword cConstant TriangleInterpEnum
+-syn keyword cConstant BilinearInterpEnum
+-syn keyword cConstant NearestInterpEnum
+-syn keyword cConstant XYEnum
+-syn keyword cConstant XYZEnum
+ syn keyword cConstant DenseEnum
+ syn keyword cConstant MpiDenseEnum
+ syn keyword cConstant MpiSparseEnum
+@@ -1541,10 +1306,6 @@
+ syn keyword cConstant MpiEnum
+ syn keyword cConstant MumpsEnum
+ syn keyword cConstant GslEnum
+-syn keyword cConstant OptionEnum
+-syn keyword cConstant GenericOptionEnum
+-syn keyword cConstant OptionCellEnum
+-syn keyword cConstant OptionStructEnum
+ syn keyword cConstant CuffeyEnum
+ syn keyword cConstant BuddJackaEnum
+ syn keyword cConstant CuffeyTemperateEnum
+@@ -1551,7 +1312,6 @@
+ syn keyword cConstant PatersonEnum
+ syn keyword cConstant ArrheniusEnum
+ syn keyword cConstant LliboutryDuvalEnum
+-syn keyword cConstant SpclevelsetEnum
+ syn keyword cConstant ExtrapolationVariableEnum
+ syn keyword cConstant IceMaskNodeActivationEnum
+ syn keyword cConstant LevelsetfunctionSlopeXEnum
+@@ -1558,27 +1318,286 @@
+ syn keyword cConstant LevelsetfunctionSlopeYEnum
+ syn keyword cConstant LevelsetfunctionPicardEnum
+ syn keyword cConstant LevelsetReinitFrequencyEnum
+-syn keyword cConstant SealevelriseSolutionEnum
+-syn keyword cConstant SealevelriseAnalysisEnum
+ syn keyword cConstant SealevelEnum
++syn keyword cConstant SealevelUmotionEnum
++syn keyword cConstant SealevelNmotionEnum
++syn keyword cConstant SealevelEmotionEnum
++syn keyword cConstant SealevelAbsoluteEnum
+ syn keyword cConstant SealevelEustaticEnum
++syn keyword cConstant SealevelInertiaTensorXZEnum
++syn keyword cConstant SealevelInertiaTensorYZEnum
++syn keyword cConstant SealevelInertiaTensorZZEnum
++syn keyword cConstant SealevelObsEnum
++syn keyword cConstant SealevelWeightsEnum
+ syn keyword cConstant SealevelriseDeltathicknessEnum
+ syn keyword cConstant SealevelriseMaxiterEnum
+ syn keyword cConstant SealevelriseReltolEnum
+ syn keyword cConstant SealevelriseAbstolEnum
+-syn keyword cConstant SealevelriseLoveHEnum
+-syn keyword cConstant SealevelriseLoveKEnum
+-syn keyword cConstant SealevelriseTideLoveHEnum
+-syn keyword cConstant SealevelriseTideLoveKEnum
+ syn keyword cConstant SealevelriseRigidEnum
+ syn keyword cConstant SealevelriseElasticEnum
+ syn keyword cConstant SealevelriseRotationEnum
++syn keyword cConstant SealevelriseTidalLoveHEnum
++syn keyword cConstant SealevelriseTidalLoveKEnum
++syn keyword cConstant SealevelriseFluidLoveEnum
++syn keyword cConstant SealevelriseEquatorialMoiEnum
++syn keyword cConstant SealevelrisePolarMoiEnum
++syn keyword cConstant SealevelriseAngularVelocityEnum
++syn keyword cConstant SealevelriseOceanAreaScalingEnum
++syn keyword cConstant SealevelriseStericRateEnum
+ syn keyword cConstant SealevelriseGElasticEnum
+-syn keyword cConstant SealevelriseDegaccEnum
++syn keyword cConstant SealevelriseUElasticEnum
++syn keyword cConstant SealevelriseHElasticEnum
+ syn keyword cConstant SealevelriseTransitionsEnum
+ syn keyword cConstant SealevelriseRequestedOutputsEnum
+ syn keyword cConstant SealevelriseNumRequestedOutputsEnum
++syn keyword cConstant LoveNfreqEnum
++syn keyword cConstant LoveFrequenciesEnum
++syn keyword cConstant LoveShNmaxEnum
++syn keyword cConstant LoveShNminEnum
++syn keyword cConstant LoveG0Enum
++syn keyword cConstant LoveR0Enum
++syn keyword cConstant LoveMu0Enum
++syn keyword cConstant LoveAllowLayerDeletionEnum
++syn keyword cConstant LoveForcingTypeEnum
++syn keyword cConstant LoveHrEnum
++syn keyword cConstant LoveKrEnum
++syn keyword cConstant LoveLrEnum
++syn keyword cConstant LoveHiEnum
++syn keyword cConstant LoveKiEnum
++syn keyword cConstant LoveLiEnum
++syn keyword cConstant EsaUmotionEnum
++syn keyword cConstant EsaNmotionEnum
++syn keyword cConstant EsaEmotionEnum
++syn keyword cConstant EsaStrainratexxEnum
++syn keyword cConstant EsaStrainratexyEnum
++syn keyword cConstant EsaStrainrateyyEnum
++syn keyword cConstant EsaRotationrateEnum
++syn keyword cConstant EsaDeltathicknessEnum
++syn keyword cConstant EsaUElasticEnum
++syn keyword cConstant EsaHElasticEnum
++syn keyword cConstant EsaTransitionsEnum
++syn keyword cConstant EsaRequestedOutputsEnum
++syn keyword cConstant EsaNumRequestedOutputsEnum
++syn keyword cConstant TransientAmrFrequencyEnum
++syn keyword cConstant AmrTypeEnum
++syn keyword cConstant AmrNeopzEnum
++syn keyword cConstant AmrLevelMaxEnum
++syn keyword cConstant AmrLagEnum
++syn keyword cConstant AmrRadiusLevelMaxEnum
++syn keyword cConstant AmrBamgEnum
++syn keyword cConstant AmrHminEnum
++syn keyword cConstant AmrHmaxEnum
++syn keyword cConstant AmrFieldEnum
++syn keyword cConstant AmrErrEnum
++syn keyword cConstant AmrKeepMetricEnum
++syn keyword cConstant AmrGradationEnum
++syn keyword cConstant AmrGroundingLineResolutionEnum
++syn keyword cConstant AmrGroundingLineDistanceEnum
++syn keyword cConstant AmrIceFrontResolutionEnum
++syn keyword cConstant AmrIceFrontDistanceEnum
++syn keyword cConstant AmrThicknessErrorResolutionEnum
++syn keyword cConstant AmrThicknessErrorThresholdEnum
++syn keyword cConstant AmrDeviatoricErrorResolutionEnum
++syn keyword cConstant AmrDeviatoricErrorThresholdEnum
++syn keyword cConstant DeviatoricStressErrorEstimatorEnum
++syn keyword cConstant ThicknessErrorEstimatorEnum
+ syn keyword cConstant ParametersENDEnum
++syn keyword cConstant XYEnum
++syn keyword cConstant XYZEnum
++syn keyword cConstant GenericParamEnum
++syn keyword cConstant BoolInputEnum
++syn keyword cConstant BoolParamEnum
++syn keyword cConstant ContourEnum
++syn keyword cConstant ControlInputEnum
++syn keyword cConstant DatasetInputEnum
++syn keyword cConstant DoubleInputEnum
++syn keyword cConstant DoubleArrayInputEnum
++syn keyword cConstant DataSetParamEnum
++syn keyword cConstant DoubleMatArrayParamEnum
++syn keyword cConstant DoubleMatParamEnum
++syn keyword cConstant DoubleParamEnum
++syn keyword cConstant DoubleVecParamEnum
++syn keyword cConstant ElementEnum
++syn keyword cConstant ElementHookEnum
++syn keyword cConstant HookEnum
++syn keyword cConstant ExternalResultEnum
++syn keyword cConstant FileParamEnum
++syn keyword cConstant InputEnum
++syn keyword cConstant IntInputEnum
++syn keyword cConstant IntParamEnum
++syn keyword cConstant IntVecParamEnum
++syn keyword cConstant TransientParamEnum
++syn keyword cConstant MaticeEnum
++syn keyword cConstant MatlithoEnum
++syn keyword cConstant MatdamageiceEnum
++syn keyword cConstant MatenhancediceEnum
++syn keyword cConstant MatestarEnum
++syn keyword cConstant MatparEnum
++syn keyword cConstant NodeEnum
++syn keyword cConstant NumericalfluxEnum
++syn keyword cConstant NeumannfluxEnum
++syn keyword cConstant ParamEnum
++syn keyword cConstant MoulinEnum
++syn keyword cConstant PengridEnum
++syn keyword cConstant PenpairEnum
++syn keyword cConstant ProfilerEnum
++syn keyword cConstant MatrixParamEnum
++syn keyword cConstant MassconEnum
++syn keyword cConstant MassconaxpbyEnum
++syn keyword cConstant NodeSIdEnum
++syn keyword cConstant ElementSIdEnum
++syn keyword cConstant VectorParamEnum
++syn keyword cConstant RiftfrontEnum
++syn keyword cConstant SegmentEnum
++syn keyword cConstant SegmentRiftfrontEnum
++syn keyword cConstant SpcDynamicEnum
++syn keyword cConstant SpcStaticEnum
++syn keyword cConstant SpcTransientEnum
++syn keyword cConstant StringArrayParamEnum
++syn keyword cConstant StringParamEnum
++syn keyword cConstant SegEnum
++syn keyword cConstant SegInputEnum
++syn keyword cConstant TriaEnum
++syn keyword cConstant TriaInputEnum
++syn keyword cConstant TetraEnum
++syn keyword cConstant TetraInputEnum
++syn keyword cConstant PentaEnum
++syn keyword cConstant PentaInputEnum
++syn keyword cConstant VertexEnum
++syn keyword cConstant VertexPIdEnum
++syn keyword cConstant VertexSIdEnum
++syn keyword cConstant OptionEnum
++syn keyword cConstant GenericOptionEnum
++syn keyword cConstant AdjointBalancethicknessAnalysisEnum
++syn keyword cConstant AdjointBalancethickness2AnalysisEnum
++syn keyword cConstant AdjointHorizAnalysisEnum
++syn keyword cConstant DefaultAnalysisEnum
++syn keyword cConstant BalancethicknessAnalysisEnum
++syn keyword cConstant BalancethicknessSolutionEnum
++syn keyword cConstant Balancethickness2AnalysisEnum
++syn keyword cConstant Balancethickness2SolutionEnum
++syn keyword cConstant BalancethicknessSoftAnalysisEnum
++syn keyword cConstant BalancethicknessSoftSolutionEnum
++syn keyword cConstant BalancevelocityAnalysisEnum
++syn keyword cConstant BalancevelocitySolutionEnum
++syn keyword cConstant L2ProjectionEPLAnalysisEnum
++syn keyword cConstant L2ProjectionBaseAnalysisEnum
++syn keyword cConstant BedSlopeSolutionEnum
++syn keyword cConstant DamageEvolutionSolutionEnum
++syn keyword cConstant DamageEvolutionAnalysisEnum
++syn keyword cConstant StressbalanceAnalysisEnum
++syn keyword cConstant StressbalanceSIAAnalysisEnum
++syn keyword cConstant StressbalanceSolutionEnum
++syn keyword cConstant StressbalanceVerticalAnalysisEnum
++syn keyword cConstant EnthalpyAnalysisEnum
++syn keyword cConstant HydrologyShreveAnalysisEnum
++syn keyword cConstant HydrologyDCInefficientAnalysisEnum
++syn keyword cConstant HydrologyDCEfficientAnalysisEnum
++syn keyword cConstant HydrologySommersAnalysisEnum
++syn keyword cConstant HydrologySolutionEnum
++syn keyword cConstant MeltingAnalysisEnum
++syn keyword cConstant MasstransportAnalysisEnum
++syn keyword cConstant MasstransportSolutionEnum
++syn keyword cConstant FreeSurfaceBaseAnalysisEnum
++syn keyword cConstant FreeSurfaceTopAnalysisEnum
++syn keyword cConstant ExtrudeFromBaseAnalysisEnum
++syn keyword cConstant ExtrudeFromTopAnalysisEnum
++syn keyword cConstant DepthAverageAnalysisEnum
++syn keyword cConstant SealevelriseSolutionEnum
++syn keyword cConstant SealevelriseAnalysisEnum
++syn keyword cConstant SteadystateSolutionEnum
++syn keyword cConstant SurfaceSlopeSolutionEnum
++syn keyword cConstant SmoothAnalysisEnum
++syn keyword cConstant ThermalAnalysisEnum
++syn keyword cConstant ThermalSolutionEnum
++syn keyword cConstant TransientSolutionEnum
++syn keyword cConstant UzawaPressureAnalysisEnum
++syn keyword cConstant GiaSolutionEnum
++syn keyword cConstant GiaIvinsAnalysisEnum
++syn keyword cConstant EsaSolutionEnum
++syn keyword cConstant EsaAnalysisEnum
++syn keyword cConstant LoveSolutionEnum
++syn keyword cConstant LoveAnalysisEnum
++syn keyword cConstant LevelsetAnalysisEnum
++syn keyword cConstant ExtrapolationAnalysisEnum
++syn keyword cConstant ApproximationEnum
++syn keyword cConstant NoneApproximationEnum
++syn keyword cConstant SIAApproximationEnum
++syn keyword cConstant SSAApproximationEnum
++syn keyword cConstant SSAHOApproximationEnum
++syn keyword cConstant SSAFSApproximationEnum
++syn keyword cConstant L1L2ApproximationEnum
++syn keyword cConstant HOApproximationEnum
++syn keyword cConstant HOFSApproximationEnum
++syn keyword cConstant FSApproximationEnum
++syn keyword cConstant FSvelocityEnum
++syn keyword cConstant FSpressureEnum
++syn keyword cConstant GaussSegEnum
++syn keyword cConstant GaussTriaEnum
++syn keyword cConstant GaussTetraEnum
++syn keyword cConstant GaussPentaEnum
++syn keyword cConstant TriangleInterpEnum
++syn keyword cConstant BilinearInterpEnum
++syn keyword cConstant NearestInterpEnum
++syn keyword cConstant MinVelEnum
++syn keyword cConstant MaxVelEnum
++syn keyword cConstant MinVxEnum
++syn keyword cConstant MaxVxEnum
++syn keyword cConstant MaxAbsVxEnum
++syn keyword cConstant MinVyEnum
++syn keyword cConstant MaxVyEnum
++syn keyword cConstant MaxAbsVyEnum
++syn keyword cConstant MinVzEnum
++syn keyword cConstant MaxVzEnum
++syn keyword cConstant MaxAbsVzEnum
++syn keyword cConstant FloatingAreaEnum
++syn keyword cConstant GroundedAreaEnum
++syn keyword cConstant IceMassEnum
++syn keyword cConstant IceVolumeEnum
++syn keyword cConstant IceVolumeAboveFloatationEnum
++syn keyword cConstant TotalFloatingBmbEnum
++syn keyword cConstant TotalGroundedBmbEnum
++syn keyword cConstant TotalSmbEnum
++syn keyword cConstant P0Enum
++syn keyword cConstant P0ArrayEnum
++syn keyword cConstant P1Enum
++syn keyword cConstant P1DGEnum
++syn keyword cConstant P1bubbleEnum
++syn keyword cConstant P1bubblecondensedEnum
++syn keyword cConstant P2Enum
++syn keyword cConstant P2bubbleEnum
++syn keyword cConstant P2bubblecondensedEnum
++syn keyword cConstant P2xP1Enum
++syn keyword cConstant P1xP2Enum
++syn keyword cConstant P1xP3Enum
++syn keyword cConstant P1xP4Enum
++syn keyword cConstant P2xP4Enum
++syn keyword cConstant P1P1Enum
++syn keyword cConstant P1P1GLSEnum
++syn keyword cConstant MINIEnum
++syn keyword cConstant MINIcondensedEnum
++syn keyword cConstant TaylorHoodEnum
++syn keyword cConstant LATaylorHoodEnum
++syn keyword cConstant XTaylorHoodEnum
++syn keyword cConstant OneLayerP4zEnum
++syn keyword cConstant CrouzeixRaviartEnum
++syn keyword cConstant LACrouzeixRaviartEnum
++syn keyword cConstant ClosedEnum
++syn keyword cConstant FreeEnum
++syn keyword cConstant OpenEnum
++syn keyword cConstant AirEnum
++syn keyword cConstant IceEnum
++syn keyword cConstant MelangeEnum
++syn keyword cConstant WaterEnum
++syn keyword cConstant DataSetEnum
++syn keyword cConstant ConstraintsEnum
++syn keyword cConstant LoadsEnum
++syn keyword cConstant MaterialsEnum
++syn keyword cConstant NodesEnum
++syn keyword cConstant ContoursEnum
++syn keyword cConstant ParametersEnum
++syn keyword cConstant VerticesEnum
++syn keyword cConstant ResultsEnum
+ "ISSM's Enums end
+ """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22129-22130.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22129-22130.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22129-22130.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/gmsh/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22129)
++++ ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22130)
+@@ -6,7 +6,8 @@
+ mkdir install
+ 
+ #Download latest version
+-svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
++#svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
++git clone http://gitlab.onelab.info/gmsh/gmsh.git
+ 
+ #Configure
+ cd install
Index: /issm/oecreview/Archive/21724-22754/ISSM-22130-22131.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22130-22131.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22130-22131.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/gmsh/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22130)
++++ ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22131)
+@@ -7,7 +7,7 @@
+ 
+ #Download latest version
+ #svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
+-git clone http://gitlab.onelab.info/gmsh/gmsh.git
++git clone http://gitlab.onelab.info/gmsh/gmsh.git src
+ 
+ #Configure
+ cd install
Index: /issm/oecreview/Archive/21724-22754/ISSM-22131-22132.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22131-22132.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22131-22132.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 22131)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 22132)
+@@ -54,7 +54,7 @@
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,...
+-	9e-10,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
++	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22132-22133.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22132-22133.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22132-22133.diff	(revision 22755)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/m/coordsystems/gmtmask.py
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/gmtmask.py	(revision 22132)
++++ ../trunk-jpl/src/m/coordsystems/gmtmask.py	(revision 22133)
+@@ -20,14 +20,14 @@
+ 		recursive=0
+ 
+ 	if recursive:
+-		string='             recursing: num vertices #i'+str(lenlat)
++		print '             recursing: num vertices #'+str(lenlat)
+ 	else:
+-		string='gmtmask: num vertices #i'+str(lenlat)
++		print 'gmtmask: num vertices #'+str(lenlat)
+ 	
+ 	#Check lat and long size is not more than 50,000 If so, recursively call gmtmask: 
+ 
+ 	if lenlat>50000:
+-		for i in range(ceil(lenlat/50000)):
++		for i in range(int(ceil(lenlat/50000))):
+ 			j=(i+1)*50000-1
+ 			if j>lenlat:
+ 				j=lenlat
+@@ -71,10 +71,10 @@
+ 		line=fid.readline()
+ 	fid.close()
+ 
+-	mask=np.zeros([nv,1])
++	mask=np.zeros(nv)
+ 	mask[oce_vertices]=1
+ 	
+ 	subprocess.call('rm -rf ./all_vertices.txt ./oce_vertices.txt ./gmt.history',shell=True)
+ 	if not recursive:
+-		string='gmtmask: done'
++		print 'gmtmask: done'
+ 	return mask
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 22132)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 22133)
+@@ -22,7 +22,6 @@
+ 	      md=setmask(md,'Iceshelves.exp','Islands.exp');
+ 	"""
+ 	#some checks on list of arguments
+-	print type(md)
+ 	if not isinstance(md,model):
+ 		raise TypeError("setmask error message")
+ 
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 22132)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 22133)
+@@ -41,10 +41,10 @@
+ 
+ 	#Scale data if necesarry
+ 	if options.exist('scale'):
++		data=np.array(data)
+ 		scale = options.getfieldvalue('scale')
+ 		if np.size(data) > 1 :
+ 			if np.size(data,0)==timeserieslength:
+-				data=np.array(data)
+ 				data[0:-1,:] = scale*data[0:-1,:]
+ 			else:
+ 				data  = scale*data
+Index: ../trunk-jpl/src/m/solve/solve.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.py	(revision 22132)
++++ ../trunk-jpl/src/m/solve/solve.py	(revision 22133)
+@@ -28,6 +28,7 @@
+ 		 - 'Hydrology'        or 'hy'
+ 		 - 'DamageEvolution'  or 'da'
+ 		 - 'Gia'              or 'gia'
++		 - 'Esa'	      or 'esa'
+ 		 - 'Sealevelrise'     or 'slr'
+ 		 - 'Love'             or 'lv'
+ 
+@@ -68,6 +69,8 @@
+ 		solutionstring = 'GiaSolution';
+         elif solutionstring.lower() == 'lv' or solutionstring.lower() == 'love':
+                 solutionstring = 'LoveSolution';
++	elif solutionstring.lower() == 'esa':
++		solutionstring = 'EsaSolution';
+ 	elif solutionstring.lower() == 'slr' or solutionstring.lower() == 'sealevelrise':
+ 		solutionstring = 'SealevelriseSolution';
+ 	else: 	
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 22132)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 22133)
+@@ -14,9 +14,9 @@
+ 
+ 	#node on Dirichlet
+ 	pos=np.nonzero(md.mesh.vertexonboundary)
+-	md.stressbalance.spcvx=float('nan')*np.ones(md.mesh.numberofvertices)
+-	md.stressbalance.spcvy=float('nan')*np.ones(md.mesh.numberofvertices)
+-	md.stressbalance.spcvz=float('nan')*np.ones(md.mesh.numberofvertices)
++	md.stressbalance.spcvx=float('nan')*np.ones((md.mesh.numberofvertices))
++	md.stressbalance.spcvy=float('nan')*np.ones((md.mesh.numberofvertices))
++	md.stressbalance.spcvz=float('nan')*np.ones((md.mesh.numberofvertices))
+ 	md.stressbalance.spcvx[pos]=0
+ 	md.stressbalance.spcvy[pos]=0
+ 	md.stressbalance.spcvz[pos]=0
Index: /issm/oecreview/Archive/21724-22754/ISSM-22133-22134.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22133-22134.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22133-22134.diff	(revision 22755)
@@ -0,0 +1,960 @@
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py	(nonexistent)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py	(revision 22134)
+@@ -0,0 +1,84 @@
++#Geometry specific to Experiments A and B
++
++import os.path
++import inspect
++import numpy as np
++from arch import *
++from InterpFromMeshToMesh2d import *
++from paterson import *
++from verbose import *
++from SetIceSheetBC import *
++
++rad = 600000.
++nv = md.mesh.numberofvertices
++if (np.isnan(md.geometry.thickness)):
++	md.geometry.thickness = np.zeros((md.mesh.numberofvertices,))
++for i in range(nv):
++	dist = np.sqrt(md.mesh.x[i]**2 + md.mesh.y[i]**2)
++	if (dist <= rad):
++		md.geometry.thickness[i] = 2000.0
++	else:
++		md.geometry.thickness[i] = 1.0 # non-zero thickness
++
++md.geometry.thickness = md.geometry.thickness.reshape(-1,1)
++md.geometry.base = np.zeros((md.mesh.numberofvertices,))
++md.geometry.surface = md.geometry.thickness + md.geometry.base.reshape(-1,1) #would otherwise create a 91x91 matrix
++
++#Ice density used for benchmarking, not 917 kg/m^3
++md.materials.rho_ice = 1000 #kg m^3
++
++#GIA parameters specific to Experiments A  and B
++md.gia.mantle_viscosity = 1e21 * np.ones((md.mesh.numberofvertices,))		#in Pa.s
++md.gia.lithosphere_thickness = 100 * np.ones((md.mesh.numberofvertices,))	#in km
++md.materials.lithosphere_shear_modulus = 6.7*1e10				#in Pa
++md.materials.lithosphere_density = 3.36						#in g/cm^3
++md.materials.mantle_shear_modulus = 1.45*1e11					#in Pa
++md.materials.mantle_density = 3.38						#in g/cm^3
++
++#Initial velocity 
++x     = archread('../Data/SquareSheetConstrained.arch','x')
++y     = archread('../Data/SquareSheetConstrained.arch','y')
++vx    = archread('../Data/SquareSheetConstrained.arch','vx')
++vy    = archread('../Data/SquareSheetConstrained.arch','vy')
++index = archread('../Data/SquareSheetConstrained.arch','index').astype(int)
++
++md.initialization.vx = np.array(InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)).reshape(-1,1)
++md.initialization.vy = np.array(InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)).reshape(-1,1)
++vx    = None
++vy    = None
++x     = None
++y     = None
++index = None
++md.initialization.vz = np.zeros((md.mesh.numberofvertices,))
++md.initialization.pressure = np.zeros((md.mesh.numberofvertices,))
++
++#Materials
++md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3. * np.ones((md.mesh.numberofelements,))
++
++#Friction
++md.friction.coefficient = 20. * np.ones((md.mesh.numberofvertices,))
++md.friction.coefficient[np.where(md.mask.groundedice_levelset < 0.)] = 0.
++md.friction.p = np.ones((md.mesh.numberofelements,))
++md.friction.q = np.ones((md.mesh.numberofelements,))
++
++#Numerical parameters
++md.stressbalance.viscosity_overshoot = 0.0
++md.masstransport.stabilization = 1
++md.thermal.stabilization = 1.
++md.verbose = verbose(0)
++md.settings.waitonlock = 30.
++md.stressbalance.restol = 0.05
++md.steadystate.reltol = 0.05
++md.stressbalance.reltol = 0.05
++md.stressbalance.abstol = float('NaN')
++md.timestepping.time_step = 1.
++md.timestepping.final_time = 3.
++
++#Boundary conditions:
++md = SetIceSheetBC(md)
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py	(nonexistent)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py	(revision 22134)
+@@ -0,0 +1,84 @@
++#Geometry specific to Experiments C and D
++
++import os.path
++import inspect
++import numpy as np
++from arch import *
++from InterpFromMeshToMesh2d import *
++from paterson import *
++from verbose import *
++from SetIceSheetBC import *
++
++rad = 800000
++nv = md.mesh.numberofvertices
++if (np.isnan(md.geometry.thickness)):
++	md.geometry.thickness = np.zeros((md.mesh.numberofvertices,))
++for i in range(nv):
++	dist = np.sqrt(md.mesh.x[i]**2 + md.mesh.y[i]**2)
++	if (dist <= rad):
++		md.geometry.thickness[i] = 3000.0
++	else:
++		md.geometry.thickness[i] = 1.0 # non-zero thickness
++
++md.geometry.thickness = md.geometry.thickness.reshape(-1,1)
++md.geometry.base = np.zeros((md.mesh.numberofvertices,))
++md.geometry.surface = md.geometry.thickness + md.geometry.base.reshape(-1,1) #would otherwise create a 91x91 matrix
++
++#Ice density used for benchmarking, not 917 kg/m^3
++md.materials.rho_ice = 1000 #kg m^3
++
++#GIA parameters specific to Experiments A  and B
++md.gia.mantle_viscosity = 1e21 * np.ones((md.mesh.numberofvertices,))		#in Pa.s
++md.gia.lithosphere_thickness = 100 * np.ones((md.mesh.numberofvertices,))	#in km
++md.materials.lithosphere_shear_modulus = 6.7*1e10				#in Pa
++md.materials.lithosphere_density = 3.32						#in g/cm^3
++md.materials.mantle_shear_modulus = 1.45*1e11					#in Pa
++md.materials.mantle_density = 3.34						#in g/cm^3
++
++#Initial velocity 
++x     = archread('../Data/SquareSheetConstrained.arch','x')
++y     = archread('../Data/SquareSheetConstrained.arch','y')
++vx    = archread('../Data/SquareSheetConstrained.arch','vx')
++vy    = archread('../Data/SquareSheetConstrained.arch','vy')
++index = archread('../Data/SquareSheetConstrained.arch','index').astype(int)
++
++md.initialization.vx = np.array(InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)).reshape(-1,1)
++md.initialization.vy = np.array(InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)).reshape(-1,1)
++vx    = None
++vy    = None
++x     = None
++y     = None
++index = None
++md.initialization.vz = np.zeros((md.mesh.numberofvertices,))
++md.initialization.pressure = np.zeros((md.mesh.numberofvertices,))
++
++#Materials
++md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3. * np.ones((md.mesh.numberofelements,))
++
++#Friction
++md.friction.coefficient = 20. * np.ones((md.mesh.numberofvertices,))
++md.friction.coefficient[np.where(md.mask.groundedice_levelset < 0.)] = 0.
++md.friction.p = np.ones((md.mesh.numberofelements,))
++md.friction.q = np.ones((md.mesh.numberofelements,))
++
++#Numerical parameters
++md.stressbalance.viscosity_overshoot = 0.0
++md.masstransport.stabilization = 1.
++md.thermal.stabilization = 1.
++md.verbose = verbose(0)
++md.settings.waitonlock = 30.
++md.stressbalance.restol = 0.05
++md.steadystate.reltol = 0.05
++md.stressbalance.reltol = 0.05
++md.stressbalance.abstol = float('NaN')
++md.timestepping.time_step = 1.
++md.timestepping.final_time = 3.
++
++#Boundary conditions:
++md = SetIceSheetBC(md)
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/NightlyRun/test2101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2101.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2101.py	(revision 22134)
+@@ -0,0 +1,82 @@
++#Test Name: EarthEsa
++#Elastostatic adjustment for an elemental ice unloading
++
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from gmshplanet import *
++from love_numbers import *
++from paterson import *
++from maskpsl import *
++from gmtmask import *
++
++#mesh earth: 
++md = model()
++md.mesh = gmshplanet('radius',6.371012*1e3,'resolution',1000)
++
++#define load 
++md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
++pos = 450
++md.esa.deltathickness[pos] = -100   # this is the only "icy" element
++
++#love numbers:
++nlov = 10000
++md.esa.love_h = np.array(love_numbers('h'))	#Originally had CM arg
++md.esa.love_h = np.resize(md.esa.love_h, nlov + 1)
++md.esa.love_l = np.array(love_numbers('l'))	#Originally had CM arg
++md.esa.love_l = np.resize(md.esa.love_l, nlov + 1)
++
++#mask:  {{{
++md.mask = maskpsl() # use maskpsl class (instead of mask) to store the ocean function as a ocean_levelset 
++md.mask.ocean_levelset = gmtmask(md.mesh.lat,md.mesh.long) 
++
++#make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.esa.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++
++#is ice grounded? 
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset <= 0)
++md.mask.groundedice_levelset[pos] = 1
++
++#make sure ice domain is on the continent: 
++#pos = np.where(md.mask.ice_levelset <= 0)
++#md.mask.ocean_levelset[pos] = 0
++
++#land mask 
++md.mask.land_levelset = 1 - md.mask.ocean_levelset
++
++# }}}
++#geometry:  {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials:  {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#Miscellaneous: {{{
++md.miscellaneous.name = 'test2101'
++# }}}
++
++#solve esa 
++md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion']
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('111111111')
++md = solve(md,'Esa')
++
++#Fields and tolerances to track changes
++field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion']
++field_tolerances= [1e-13,1e-13,1e-13]
++field_values = [
++	md.results.EsaSolution.EsaUmotion,
++	md.results.EsaSolution.EsaNmotion,
++	md.results.EsaSolution.EsaEmotion,
++	]
++
+Index: ../trunk-jpl/test/NightlyRun/test2110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2110.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22134)
+@@ -0,0 +1,85 @@
++#Test Name: Esa2Dsurface
++#Elastostatic adjustment for an elemental ice unloading
++
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from roundmesh import *
++#from gmshplanet import *
++from love_numbers import *
++from paterson import *
++#from maskpsl import *
++#from gmtmask import *
++
++#mesh earth: 
++md = model()
++md = roundmesh(md,50000,2000)     # radius and element size (meters)
++
++#define load 
++md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
++disc_radius = 20 # km
++index = md.mesh.elements
++x_element = np.mean(md.mesh.x[index - 1], 1)
++y_element = np.mean(md.mesh.y[index - 1], 1)
++rad_dist = np.sqrt(x_element**2 + y_element**2) / 1000  # radial distance in km
++md.esa.deltathickness[np.where(rad_dist <= disc_radius)] = -1   # 1 m water withdrawl
++
++#love numbers:
++nlov = 10000	# horizontal displacements do not work for low degree truncation, e.g., 101
++md.esa.love_h = np.array(love_numbers('h'))
++md.esa.love_h = np.resize(md.esa.love_h, nlov + 1)
++md.esa.love_l = np.array(love_numbers('l'))
++md.esa.love_l = np.resize(md.esa.love_l, nlov + 1)
++
++#mask:  {{{
++#make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.esa.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++
++#is ice grounded? 
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset <= 0)
++md.mask.groundedice_levelset[pos] = 1
++
++# }}}
++#geometry:  {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials:  {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#Miscellaneous: {{{
++md.miscellaneous.name = 'test2110'
++# }}}
++
++md.esa.degacc = 0.01
++
++#solve esa 
++md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion',
++	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate']
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('111111111')
++md = solve(md,'Esa')
++
++#Fields and tolerances to track changes
++field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion',
++	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.EsaSolution.EsaUmotion,
++	md.results.EsaSolution.EsaNmotion,
++	md.results.EsaSolution.EsaEmotion,
++	md.results.EsaSolution.EsaStrainratexx,
++	md.results.EsaSolution.EsaStrainratexy,
++	md.results.EsaSolution.EsaStrainrateyy,
++	md.results.EsaSolution.EsaRotationrate,
++	]
++
+Index: ../trunk-jpl/test/NightlyRun/test2003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2003.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2003.py	(revision 22134)
+@@ -0,0 +1,113 @@
++#Test Name: EarthSlr_rotationalFeedback
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from gmshplanet import *
++from love_numbers import *
++from paterson import *
++from maskpsl import *
++from gmtmask import *
++
++#mesh earth:
++md = model()
++md.mesh = gmshplanet('radius',6.371012*1e3,'resolution',1000) #500 km resolution mesh
++
++#parameterize slr solution:
++#slr loading:  {{{
++md.slr.deltathickness = np.zeros((md.mesh.numberofelements,))
++md.slr.sealevel = np.zeros((md.mesh.numberofvertices,))
++md.slr.steric_rate = np.zeros((md.mesh.numberofvertices,))
++
++#antarctica
++#Access every element in lat using the indices in elements
++#-1 to convert to base 0 indexing, 1 (not 2, in matlab) to sum over rows
++late = sum(md.mesh.lat[md.mesh.elements - 1],1) / 3
++longe = sum(md.mesh.long[md.mesh.elements - 1],1) / 3
++pos = np.intersect1d(np.where(late < -75), np.where(longe < 0))
++md.slr.deltathickness[pos] = -1
++
++#elastic loading from love numbers: 
++nlov = 1000
++md.slr.love_h = np.array(love_numbers('h'))
++md.slr.love_h = np.resize(md.slr.love_h, nlov + 1)
++md.slr.love_k = np.array(love_numbers('k'))
++md.slr.love_k = np.resize(md.slr.love_k, nlov + 1)
++md.slr.love_l = np.array(love_numbers('l'))
++md.slr.love_l = np.resize(md.slr.love_l, nlov + 1)
++#}}}
++
++#mask:  {{{
++md.mask = maskpsl() # use maskpsl class (instead of mask) to store the ocean function as a ocean_levelset 
++mask = gmtmask(md.mesh.lat,md.mesh.long) 
++
++icemask = np.ones((md.mesh.numberofvertices,))
++pos = np.where(mask == 0)
++#pos[0] because np.where(mask==0) returns a 2d array, the latter parts of which are all array/s of 0s
++icemask[pos[0]] = -1
++pos = np.where(sum(mask[md.mesh.elements - 1],1) < 3)
++icemask[md.mesh.elements[pos,:] - 1] = -1
++md.mask.ice_levelset = icemask
++md.mask.ocean_levelset = np.zeros((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset == 1)
++md.mask.ocean_levelset[pos] = 1
++
++#make sure that the ice level set is all inclusive:
++md.mask.land_levelset = np.zeros((md.mesh.numberofvertices,))
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++
++#make sure wherever there is an ice load, that the mask is set to ice: 
++pos = np.where(md.slr.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++# }}}
++
++# use model representation of ocea area (not the ture area) 
++md.slr.ocean_area_scaling = 0
++
++#geometry
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++
++#materials
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++
++#Miscellaneous
++md.miscellaneous.name = 'test2003'
++
++#Solution parameters
++md.slr.reltol = float('NaN')
++md.slr.abstol = 1e-3
++
++#eustatic + rigid + elastic run: 
++md.slr.rigid = 1
++md.slr.elastic = 1
++md.slr.rotation = 0
++md.cluster = generic('name',gethostname(),'np',3)
++#md.verbose = verbose('111111111')
++#print md.calving
++#print md.gia
++#print md.love
++#print md.esa
++#print md.autodiff
++md = solve(md,'Sealevelrise')
++SnoRotation = md.results.SealevelriseSolution.Sealevel
++
++#eustatic + rigid + elastic + rotation run: 
++md.slr.rigid = 1
++md.slr.elastic = 1
++md.slr.rotation = 1
++md.cluster = generic('name',gethostname(),'np',3)
++#md.verbose = verbose('111111111')
++md = solve(md,'Sealevelrise')
++SRotation = md.results.SealevelriseSolution.Sealevel
++
++#Fields and tolerances to track changes
++field_names = ['noRotation', 'Rotation']
++field_tolerances = [1e-13, 1e-13]
++field_values = [SnoRotation, SRotation]
++
+Index: ../trunk-jpl/test/NightlyRun/test2083.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2083.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2083.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dD3
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 2 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 2400000 # for t \approx \infty  
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2051.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2051.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2051.py	(revision 22134)
+@@ -0,0 +1,37 @@
++#Test Name: GiaIvinsBenchmarksAB2dA1
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++# Benchmark experiments (Figure A2a Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksAB.py')
++
++# indicate what you want to compute 
++md.gia.cross_section_shape = 1 # for square-edged x-section 
++
++# define loading history 
++md.timestepping.start_time = 2002100 # after 2 kyr of deglaciation 
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0 ,0.0),
++	np.append(md.geometry.thickness, 1000),
++	np.append(md.geometry.thickness, 2000000),
++	np.append(md.geometry.thickness * 0.0, 2000100),
++	np.append(md.geometry.thickness * 0.0, md.timestepping.start_time)
++	]).T
++
++# solve for GIA deflection 
++md.cluster=generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2052.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2052.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2052.py	(revision 22134)
+@@ -0,0 +1,37 @@
++#Test Name: GiaIvinsBenchmarksAB2dA2
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2a Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksAB.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 1    # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 2005100 # after 5 kyr of deglaciation 
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0 ,0.0),
++	np.append(md.geometry.thickness, 1000),
++	np.append(md.geometry.thickness, 2000000),
++	np.append(md.geometry.thickness * 0.0, 2000100),
++	np.append(md.geometry.thickness * 0.0, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW,md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2053.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2053.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2053.py	(revision 22134)
+@@ -0,0 +1,37 @@
++#Test Name: GiaIvinsBenchmarksAB2dA3
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2a Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksAB.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 1    # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 2010100 # after 10 kyr of deglaciation 
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0 ,0.0),
++	np.append(md.geometry.thickness, 1000),
++	np.append(md.geometry.thickness, 2000000),
++	np.append(md.geometry.thickness * 0.0, 2000100),
++	np.append(md.geometry.thickness * 0.0, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW,md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2071.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2071.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2071.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dC1
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 1 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 0.3 # for t \approx 0 kyr : to get eleastic response!   
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2072.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2072.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2072.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dC2
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 1 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 1000.3 # for t \approx 1 kyr   
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2081.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2081.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2081.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dD1
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 2 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 0.3 # for t \approx 0 kyr : to get eleastic response!  
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2010.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2010.py	(revision 22134)
+@@ -0,0 +1,110 @@
++#Test Name: MomentOfIntertia
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from gmshplanet import *
++from love_numbers import *
++from paterson import *
++from maskpsl import *
++from gmtmask import *
++
++#mesh earth: 
++md = model()
++rad_e = 6.371012*1e3 # mean radius of Earth, km
++md.mesh = gmshplanet('radius',rad_e,'resolution',1000.0)  # km resolution 
++
++#parameterize slr solution:
++#slr loading:  {{{
++late = sum(md.mesh.lat[md.mesh.elements - 1],1) / 3
++longe = sum(md.mesh.long[md.mesh.elements - 1],1) / 3
++
++md.slr.deltathickness = np.zeros((md.mesh.numberofelements,))
++pos = np.intersect1d(np.where(late < -75), np.where(longe > 0))
++#python does not include last element in array slices, (6:7) -> [5:7]
++md.slr.deltathickness[pos[5:7]] = -1
++
++md.slr.sealevel = np.zeros((md.mesh.numberofvertices,))
++md.slr.steric_rate = np.zeros((md.mesh.numberofvertices,))
++md.slr.ocean_area_scaling = 1
++
++#elastic loading from love numbers: 
++nlov = 1000
++md.slr.love_h = np.array(love_numbers('h'))
++md.slr.love_h = np.resize(md.slr.love_h, nlov + 1)
++md.slr.love_k = np.array(love_numbers('k'))
++md.slr.love_k = np.resize(md.slr.love_k, nlov + 1)
++md.slr.love_l = np.array(love_numbers('l'))
++md.slr.love_l = np.resize(md.slr.love_l, nlov + 1)
++
++#}}}
++#mask:  {{{
++md.mask = maskpsl() # use maskpsl class (instead of mask) to store the ocean function as a ocean_levelset 
++mask = gmtmask(md.mesh.lat,md.mesh.long)
++
++icemask = np.ones((md.mesh.numberofvertices,))
++pos = np.where(mask == 0)
++icemask[pos[0]] = -1
++pos = np.where(sum(mask[md.mesh.elements - 1],1) < 3)
++icemask[md.mesh.elements[pos,:] - 1] = -1
++md.mask.ice_levelset = icemask
++md.mask.ocean_levelset = np.zeros((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset == 1)
++md.mask.ocean_levelset[pos] = 1
++
++#make sure that the ice level set is all inclusive:
++md.mask.land_levelset = np.zeros((md.mesh.numberofvertices,))
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++
++#make sure wherever there is an ice load, that the mask is set to ice: 
++#md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.slr.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++# }}}
++#geometry {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#Miscellaneous {{{
++md.miscellaneous.name = 'test2010'
++# }}}
++#Solution parameters {{{
++md.slr.reltol = float('NaN')
++md.slr.abstol = 1e-3
++# }}}
++
++#eustatic + rigid + elastic run: 
++md.slr.rigid = 1
++md.slr.elastic = 1
++md.slr.rotation = 1
++md.cluster = generic('name',gethostname(),'np',3)
++
++# uncomment following 2 lines for 
++md = solve(md,'Sealevelrise')
++eus = md.results.SealevelriseSolution.SealevelEustatic
++slr = md.results.SealevelriseSolution.Sealevel
++moixz = md.results.SealevelriseSolution.SealevelInertiaTensorXZ
++moiyz = md.results.SealevelriseSolution.SealevelInertiaTensorYZ
++moizz = md.results.SealevelriseSolution.SealevelInertiaTensorZZ 
++
++# analytical moi => just checking FOR ICE only!!! {{{
++# ...have to mute ** slr induced MOI in Tria.cpp ** prior to the comparison 
++#rad_e = rad_e*1e3 # now in meters 
++#areas=GetAreasSphericalTria(md.mesh.elements,md.mesh.lat,md.mesh.long,rad_e)
++#lat=late*pi/180 lon=longe*pi/180
++#moi_xz = sum(-md.materials.rho_freshwater.*md.slr.deltathickness.*areas.*rad_e^2.*sin(lat).*cos(lat).*cos(lon))
++#moi_yz = sum(-md.materials.rho_freshwater.*md.slr.deltathickness.*areas.*rad_e^2.*sin(lat).*cos(lat).*sin(lon))
++# }}}
++
++#Fields and tolerances to track changes
++field_names     = ['eus','slr','moixz','moiyz','moizz']
++field_tolerances= [1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [eus,slr,moixz,moiyz,moizz]
+Index: ../trunk-jpl/test/NightlyRun/test2073.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2073.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2073.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dC3
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 1 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 2400000 # for t \approx \infty  
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
+Index: ../trunk-jpl/test/NightlyRun/test2082.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2082.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2082.py	(revision 22134)
+@@ -0,0 +1,36 @@
++#Test Name: GiaIvinsBenchmarksAB2dD2
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from triangle import *
++from setmask import *
++from parameterize import *
++
++#Benchmark experiments (Figure A2c Ivins and James, 1999, Geophys. J. Int.) 
++md = triangle(model(),'../Exp/RoundFrontEISMINT.exp',200000)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/GiaIvinsBenchmarksCD.py')
++
++#indicate what you want to compute 
++md.gia.cross_section_shape = 2 # for square-edged x-section 
++
++#define loading history 
++md.timestepping.start_time = 1000.3 # for t \approx 1 kyr  
++md.timestepping.final_time = 2500000 # 2,500 kyr
++md.geometry.thickness = np.array([
++	np.append(md.geometry.thickness * 0.0, 0.0),
++	np.append(md.geometry.thickness / 2.0, 0.1),
++	np.append(md.geometry.thickness, 0.2),
++	np.append(md.geometry.thickness, md.timestepping.start_time)
++	]).T
++
++#solve for GIA deflection 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('1111111')
++md = solve(md,'Gia')
++
++#Fields and tolerances to track changes
++field_names      = ['GiaW','GiadWdt']
++field_tolerances = [1e-13,1e-13]
++field_values = [md.results.GiaSolution.GiaW, md.results.GiaSolution.GiadWdt]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22134-22135.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22134-22135.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22134-22135.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22134)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22135)
+@@ -165,8 +165,10 @@
+ 				 /*Do we lock? i.e. are we at final_time? :*/
+ 				 if(time==finaltime)this->lock=1;
+ 
+-				 /*What we return is the value of misfit / time: */
+-				 return misfit/(time-starttime);
++				 /*What we return is the value of misfit / time if transient*/
++				 if(time!=0) misfit = misfit/(time-starttime);
++
++				 return misfit;
+ 			 } /*}}}*/
+ 			 else if (this->local==2){ /*vertex by vertex computation: {{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22135-22136.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22135-22136.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22135-22136.diff	(revision 22755)
@@ -0,0 +1,170 @@
+Index: ../trunk-jpl/src/m/classes/linearbasalforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 22135)
++++ ../trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 22136)
+@@ -46,21 +46,21 @@
+ 
+ 			if ismember('MasstransportAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.ismasstransport==0),
+ 				md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<',0,'numel',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1);
+ 			end
+ 			if ismember('BalancethicknessAnalysis',analyses),
+ 				md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'numel',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1);
+ 			end
+ 			if ismember('ThermalAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.isthermal==0),
+ 				md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','numel',1);
+-				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<',0,'numel',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1);
+ 				md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'timeseries',1,'>=',0);
+ 			end
+ 		end % }}}
+@@ -79,16 +79,16 @@
+ 			yts=md.constants.yts;
+ 
+ 			floatingice_melting_rate=zeros(md.mesh.numberofvertices,1);
+-			floatingice_melting_rate(find(md.geometry.base<=md.basalforcings.deepwater_elevation))=md.basalforcings.deepwater_melting_rate;
+-			pos=find(md.geometry.base>md.basalforcings.deepwater_elevation & md.geometry.base<md.basalforcings.upperwater_elevation);
+-			floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate*(md.geometry.base(pos)-md.basalforcings.upperwater_elevation)/(md.basalforcings.deepwater_elevation-md.basalforcings.upperwater_elevation);
++			floatingice_melting_rate(find(md.geometry.base<=md.basalforcings.deepwater_elevation(1,1)))=md.basalforcings.deepwater_melting_rate(1,1);
++			pos=find(md.geometry.base>md.basalforcings.deepwater_elevation(1,1) & md.geometry.base<md.basalforcings.upperwater_elevation(1,1));
++			floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate(1,1)*(md.geometry.base(pos)-md.basalforcings.upperwater_elevation(1,1))/(md.basalforcings.deepwater_elevation(1,1)-md.basalforcings.upperwater_elevation(1,1));
+ 			WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer');
+ 			WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+-			WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','Double','name','md.basalforcings.deepwater_melting_rate','scale',1./yts)
+-			WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','Double','name','md.basalforcings.deepwater_elevation')
+-			WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','format','Double','name','md.basalforcings.upperwater_elevation')
++			WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'name','md.basalforcings.deepwater_melting_rate','scale',1./yts,'yts',md.constants.yts)
++			WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','DoubleMat','mattype',3,'name','md.basalforcings.deepwater_elevation','yts',md.constants.yts)
++			WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','format','DoubleMat','mattype',3,'name','md.basalforcings.upperwater_elevation','yts',md.constants.yts)
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22135)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22136)
+@@ -33,6 +33,7 @@
+ 	bool         qmu_mass_flux_present      = false;
+ 	bool         autodiff_mass_flux_present = false;
+ 	bool         mass_flux_present          = false;
++	bool         interp;
+ 	IssmDouble **array                      = NULL;
+ 	int         *mdims_array                = NULL;
+ 	int         *ndims_array                = NULL;
+@@ -42,6 +43,7 @@
+ 	int          count;
+ 
+ 	IssmDouble *temp = NULL;
++	IssmDouble *transparam = NULL;
+ 	IssmDouble  yts;
+ 	int         N,M;
+ 
+@@ -172,9 +174,13 @@
+ 			/*Nothing to add to parameters*/
+ 			break;
+ 		case LinearFloatingMeltRateEnum:
+-			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum));
++			iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
++			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.deepwater_melting_rate"); 
++			parameters->AddObject(new TransientParam(BasalforcingsDeepwaterMeltingRateEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
++			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.deepwater_elevation"); 
++			parameters->AddObject(new TransientParam(BasalforcingsDeepwaterElevationEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
++			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.upperwater_elevation"); 
++			parameters->AddObject(new TransientParam(BasalforcingsUpperwaterElevationEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
+ 			break;
+ 		case MismipFloatingMeltRateEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum));
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22135)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22136)
+@@ -1814,10 +1814,12 @@
+ 	IssmDouble  deepwaterel,upperwaterel,deepwatermelt;
+ 	IssmDouble* base     = xNew<IssmDouble>(numvertices);
+ 	IssmDouble* values   = xNew<IssmDouble>(numvertices);
++	IssmDouble time;
+ 
+-	parameters->FindParam(&deepwaterel,BasalforcingsDeepwaterElevationEnum);
+-	parameters->FindParam(&upperwaterel,BasalforcingsUpperwaterElevationEnum);
+-	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum);
++	parameters->FindParam(&time,TimeEnum);
++	parameters->FindParam(&deepwaterel,BasalforcingsDeepwaterElevationEnum,time);
++	parameters->FindParam(&upperwaterel,BasalforcingsUpperwaterElevationEnum,time);
++	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum,time);
+ 
+ 	this->GetInputListOnVertices(base,BaseEnum);
+ 	for(int i=0;i<numvertices;i++){
+Index: ../trunk-jpl/src/m/consistency/checkfield.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.m	(revision 22135)
++++ ../trunk-jpl/src/m/consistency/checkfield.m	(revision 22136)
+@@ -148,7 +148,7 @@
+ if exist(options,'>=')
+ 	lowerbound=getfieldvalue(options,'>=');
+ 	field2=reshape(field,prod(size(field)),1);
+-	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
++	if (getfieldvalue(options,'timeseries',0) | getfieldvalue(options,'singletimeseries',0)), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
+ 	if any(field2<lowerbound),
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+ 			['field ''' fieldname ''' should have values above ' num2str(lowerbound(1,1))]));
+@@ -157,7 +157,7 @@
+ if exist(options,'>')
+ 	lowerbound=getfieldvalue(options,'>');
+ 	field2=reshape(field,prod(size(field)),1);
+-	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
++	if (getfieldvalue(options,'timeseries',0) | getfieldvalue(options,'singletimeseries',0)), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
+ 	if any(field2<=lowerbound),
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+ 			['field ''' fieldname ''' should have values above ' num2str(lowerbound(1,1))]));
+@@ -168,7 +168,7 @@
+ if exist(options,'<=')
+ 	upperbound=getfieldvalue(options,'<=');
+ 	field2=reshape(field,prod(size(field)),1);
+-	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
++	if (getfieldvalue(options,'timeseries',0) | getfieldvalue(options,'singletimeseries',0)), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
+ 	if any(field2>upperbound),
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+ 			['field ''' fieldname ''' should have values below ' num2str(upperbound(1,1))]));
+@@ -177,7 +177,7 @@
+ if exist(options,'<')
+ 	upperbound=getfieldvalue(options,'<');
+ 	field2=reshape(field,prod(size(field)),1);
+-	if getfieldvalue(options,'timeseries',0), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
++	if (getfieldvalue(options,'timeseries',0) | getfieldvalue(options,'singletimeseries',0)), field2=reshape(field(1:end-1,:),prod(size(field(1:end-1,:))),1); end
+ 	if any(field2>=upperbound),
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+ 			['field ''' fieldname ''' should have values below ' num2str(upperbound(1,1))]));
+@@ -243,8 +243,13 @@
+ 			md = checkmessage(md,getfieldvalue(options,'message',...
+ 				['field ''' fieldname ''' columns must not contain duplicate timesteps']));
+ 		end
++	elseif size(field,1)==1,
++		if size(field,2)~=1, 
++			md = checkmessage(md,getfieldvalue(options,'message',...
++				['field ''' fieldname ''' should be either a scalar or have 2 lines']));
++		end
+ 	else
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+-			['field ''' fieldname ''' should have 2 lines']));
++			['field ''' fieldname ''' should have 2 lines or be a scalar']));
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22136-22137.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22136-22137.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22136-22137.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22136)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22137)
+@@ -166,8 +166,7 @@
+ 				 if(time==finaltime)this->lock=1;
+ 
+ 				 /*What we return is the value of misfit / time if transient*/
+-				 if(time!=0) misfit = misfit/(time-starttime);
+-
++				 if(time!=0.) return misfit/(time-starttime); 
+ 				 return misfit;
+ 			 } /*}}}*/
+ 			 else if (this->local==2){ /*vertex by vertex computation: {{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22137-22138.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22137-22138.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22137-22138.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/linearbasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22137)
++++ ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22138)
+@@ -101,7 +101,7 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','name','md.basalforcings.groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'data',floatingice_melting_rate,'name','md.basalforcings.floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+-		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','name','md.basalforcings.deepwater_melting_rate','format','Double','scale',1./yts)
+-		WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','name','md.basalforcings.deepwater_elevation','format','Double')
+-		WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','name','md.basalforcings.upperwater_elevation','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','name','md.basalforcings.deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts,'scale',1./yts,)
++		WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','name','md.basalforcings.deepwater_elevation','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','name','md.basalforcings.upperwater_elevation','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts)
+ 	# }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22141-22142.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22141-22142.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22141-22142.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test292.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test292.m	(revision 22141)
++++ ../trunk-jpl/test/NightlyRun/test292.m	(revision 22142)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.basalforcings=linearbasalforcings(md.basalforcings);
++md.basalforcings.deepwater_melting_rate=[50 50;0 6];
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/21724-22754/ISSM-22145-22146.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22145-22146.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22145-22146.diff	(revision 22755)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22145)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22146)
+@@ -5365,6 +5365,9 @@
+ /*Coupling (Tiling)*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingHOFS(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Constants*/
+ 	int numnodes       = 3*6+1;
+ 	int numdofp        = 2*6;
+@@ -5443,6 +5446,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAFSFriction(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Constants*/
+ 	const int numdofs   = (6+1)*3 + 6*1;
+ 	const int numdofm   = 6 *2;
+@@ -5565,6 +5571,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAFSViscous(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Constants*/
+ 	const int numdofm     = 2 *3;
+ 	const int numdofs     = 4 *6+ 3;
+@@ -5683,6 +5692,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAHOFriction(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	if(element->IsFloating() || !element->IsOnBase()) return NULL;
+ 
+ 	/*Constants*/
+@@ -5760,6 +5772,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAHOViscous(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Constants*/
+ 	int numnodes    = element->GetNumberOfNodes();
+ 	int numdofm     = 1 *numnodes; //*2/2
+@@ -5913,6 +5928,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSA3dFriction(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(element->IsFloating() || !element->IsOnBase()) return NULL;
+ 
+@@ -5928,6 +5946,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSA3dViscous(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Constants*/
+ 	const int    numdof2d=2*3;
+ 
+@@ -6020,6 +6041,9 @@
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorCouplingHOFSFriction(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Intermediaries*/
+ 	int         i,approximation;
+ 	int         dim=3;
+@@ -6103,6 +6127,9 @@
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorCouplingHOFSViscous(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Intermediaries */
+ 	int         i,approximation;
+ 	int         dim=3;
+@@ -6184,6 +6211,9 @@
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorCouplingSSAFSFriction(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Intermediaries*/
+ 	int         i,j,approximation;
+ 	int         dim=3;
+@@ -6264,6 +6294,9 @@
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorCouplingSSAFSViscous(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	/*Intermediaries */
+ 	int         i,approximation;
+ 	IssmDouble  viscosity,Jdet,FSreconditioning;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22146-22147.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22146-22147.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22146-22147.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/mech/calcbackstress.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/calcbackstress.m	(revision 22146)
++++ ../trunk-jpl/src/m/mech/calcbackstress.m	(revision 22147)
+@@ -55,7 +55,8 @@
+ if md.damage.isdamage,
+ 	D=md.damage.D
+ else
+-	D=0.
++	D=0;
++end
+ 
+ [a0,b0,theta0,ex0]=thomasparams(md,'eq','Thomas','smoothing',smoothing,'coordsys',coordsys);
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22147-22148.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22147-22148.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22147-22148.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test2101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2101.py	(revision 22147)
++++ ../trunk-jpl/test/NightlyRun/test2101.py	(revision 22148)
+@@ -17,7 +17,7 @@
+ 
+ #define load 
+ md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
+-pos = 450
++pos = 449
+ md.esa.deltathickness[pos] = -100   # this is the only "icy" element
+ 
+ #love numbers:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22148-22149.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22148-22149.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22148-22149.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/test/NightlyRun/test2010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2010.py	(revision 22148)
++++ ../trunk-jpl/test/NightlyRun/test2010.py	(revision 22149)
+@@ -20,7 +20,7 @@
+ longe = sum(md.mesh.long[md.mesh.elements - 1],1) / 3
+ 
+ md.slr.deltathickness = np.zeros((md.mesh.numberofelements,))
+-pos = np.intersect1d(np.where(late < -75), np.where(longe > 0))
++pos = np.intersect1d(np.array(np.where(late < -75)), np.array(np.where(longe > 0)))
+ #python does not include last element in array slices, (6:7) -> [5:7]
+ md.slr.deltathickness[pos[5:7]] = -1
+ 
+Index: ../trunk-jpl/test/NightlyRun/test2110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22148)
++++ ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22149)
+@@ -6,11 +6,8 @@
+ from socket import gethostname
+ from solve import *
+ from roundmesh import *
+-#from gmshplanet import *
+ from love_numbers import *
+ from paterson import *
+-#from maskpsl import *
+-#from gmtmask import *
+ 
+ #mesh earth: 
+ md = model()
+Index: ../trunk-jpl/test/NightlyRun/test2003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2003.py	(revision 22148)
++++ ../trunk-jpl/test/NightlyRun/test2003.py	(revision 22149)
+@@ -24,7 +24,7 @@
+ #-1 to convert to base 0 indexing, 1 (not 2, in matlab) to sum over rows
+ late = sum(md.mesh.lat[md.mesh.elements - 1],1) / 3
+ longe = sum(md.mesh.long[md.mesh.elements - 1],1) / 3
+-pos = np.intersect1d(np.where(late < -75), np.where(longe < 0))
++pos = np.intersect1d(np.array(np.where(late < -75)), np.array(np.where(longe < 0)))
+ md.slr.deltathickness[pos] = -1
+ 
+ #elastic loading from love numbers: 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22149-22150.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22149-22150.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22149-22150.diff	(revision 22755)
@@ -0,0 +1,142 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 22149)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 22150)
+@@ -187,9 +187,13 @@
+ 			if any(field[-1,0:-1]==field[-1,1:]):
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+ 						"field '%s' columns must not contain duplicate timesteps" % fieldname))
++		elif np.size(field,0) == 1:
++			if np.ndim(field) > 1 and not np.size(field,1) == 1:
++				md = md.checkmessage(options.getfieldvalue('message',\
++				"field '%s' should be either a scalar or have 2 lines" % fieldname))
+ 		else:
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+-				"field '%s' should have 2 lines" % fieldname))
++				"field '%s' should have 2 lines or be a scalar" % fieldname))
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/classes/settings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.py	(revision 22149)
++++ ../trunk-jpl/src/m/classes/settings.py	(revision 22150)
+@@ -78,9 +78,10 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean')
+ 		WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer')
+-		WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double')
++		
+ 		if self.waitonlock>0:
+-			WriteData(fid,prefix,'name','md.settings.waitonlock','data',True,'format','Boolean');
++			WriteData(fid,prefix,'name','md.settings.waitonlock','data',True,'format','Boolean')
+ 		else:
+-			WriteData(fid,prefix,'name','md.settings.waitonlock','data',False,'format','Boolean');
++			WriteData(fid,prefix,'name','md.settings.waitonlock','data',False,'format','Boolean')
++		WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22149)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22150)
+@@ -155,9 +155,9 @@
+ 		        'transient',
+ 		        'levelset',
+ 		        'calving',
+-						'gia',
+-						'esa',
+-						'love',
++			'love',
++			'gia',
++			'esa',
+ 		        'autodiff',
+ 		        'inversion',
+ 		        'qmu',
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22149)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22150)
+@@ -119,5 +119,6 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
+-		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/linearbasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22149)
++++ ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22150)
+@@ -68,21 +68,21 @@
+ 
+ 		if 'MasstransportAnalysis' in analyses and not (solution=='TransientSolution' and not md.transient.ismasstransport):
+ 			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1)
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0);
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<',md.basalforcings.upperwater_elevation);
+-			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<',0);
++			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1)
+ 
+ 		if 'BalancethicknessAnalysis' in analyses:
+ 			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0);
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<',md.basalforcings.upperwater_elevation);
+-			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<',0);
++			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1)
+ 
+ 		if 'ThermalAnalysis' in analyses and not (solution=='TransientSolution' and not md.transient.isthermal):
+ 			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1)
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0);
+-			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<',md.basalforcings.upperwater_elevation);
+-			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0);
++			md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','singletimeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'singletimeseries',1)
+ 			md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'timeseries',1,'>=',0)
+ 
+ 		return md
+@@ -92,16 +92,19 @@
+ 		yts=md.constants.yts
+ 
+ 		floatingice_melting_rate = np.zeros((md.mesh.numberofvertices))
+-		pos=np.nonzero(md.geometry.base<=md.basalforcings.deepwater_elevation)
+-		floatingice_melting_rate[pos]=md.basalforcings.deepwater_melting_rate
+-		pos=np.nonzero(np.logical_and(md.geometry.base>md.basalforcings.deepwater_elevation,md.geometry.base<md.basalforcings.upperwater_elevation))
+-		floatingice_melting_rate[pos]=md.basalforcings.deepwater_melting_rate*(md.geometry.base[pos]-md.basalforcings.upperwater_elevation)/(md.basalforcings.deepwater_elevation-md.basalforcings.upperwater_elevation)
+ 
+-		WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer');
++		pos = np.nonzero(md.geometry.base <= md.basalforcings.deepwater_elevation)
++		floatingice_melting_rate[pos] = md.basalforcings.deepwater_melting_rate[0][0]
++
++		pos = np.nonzero(np.logical_and(md.geometry.base > md.basalforcings.deepwater_elevation, md.geometry.base < md.basalforcings.upperwater_elevation))
++
++		floatingice_melting_rate[pos] =	md.basalforcings.deepwater_melting_rate[0][0] * (md.geometry.base[pos] - md.basalforcings.upperwater_elevation) / (md.basalforcings.deepwater_elevation - md.basalforcings.upperwater_elevation)
++
++		WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer')
++		WriteData(fid,prefix,'data',floatingice_melting_rate,'name','md.basalforcings.floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','name','md.basalforcings.groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+-		WriteData(fid,prefix,'data',floatingice_melting_rate,'name','md.basalforcings.floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+-		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','name','md.basalforcings.deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts,'scale',1./yts,)
+-		WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','name','md.basalforcings.deepwater_elevation','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts)
+-		WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','name','md.basalforcings.upperwater_elevation','format','DoubleMat','mattype',3,'timeserieslength',2,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'name','md.basalforcings.deepwater_melting_rate','scale',1./yts,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','DoubleMat','mattype',3,'name','md.basalforcings.deepwater_elevation','yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','format','DoubleMat','mattype',3,'name','md.basalforcings.upperwater_elevation','yts',md.constants.yts)
+ 	# }}}
+Index: ../trunk-jpl/test/NightlyRun/test292.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test292.py	(revision 22149)
++++ ../trunk-jpl/test/NightlyRun/test292.py	(revision 22150)
+@@ -17,6 +17,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',gethostname(),'np',3)
+ md.basalforcings=linearbasalforcings(md.basalforcings)
++md.basalforcings.deepwater_melting_rate = np.array([[50.,50.],[0.,6.]])
+ md=solve(md,'Transient')
+ 
+ # Fields and tolerances to track changes
Index: /issm/oecreview/Archive/21724-22754/ISSM-22150-22151.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22150-22151.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22150-22151.diff	(revision 22755)
@@ -0,0 +1,82 @@
+Index: ../trunk-jpl/src/m/geometry/ThicknessCorrection.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/ThicknessCorrection.m	(revision 22150)
++++ ../trunk-jpl/src/m/geometry/ThicknessCorrection.m	(nonexistent)
+@@ -1,77 +0,0 @@
+-function md=ThicknessCorrection(md,varargin)
+-%THICKNESSCORRECTION - correct the thickness of the ice shelf near the grounding line
+-%
+-%   This routine corrects the thickness and the bed on the transition zone
+-%   by forcing the hydrostatic equilibrium.
+-%   the thickness is modified as follows:
+-%      thickness = (1-coeff) * thickness_observation + coeff * thickness_hydrostatic
+-%   where:
+-%      coeff=(d/distance)^2;
+-%      distance=10km by default but can be specified
+-%
+-%   Usage:
+-%      md=ThicknessCorrection(md,varargin);
+-%
+-%   Example:
+-%      md=ThicknessCorrection(md);
+-%      md=ThicknessCorrection(md,15000);
+-
+-%initialize thickness with the observations, and get hydrostatic thickness from the dem
+-thickness=md.geometry.thickness;
+-thickness_hydro=md.geometry.surface/(1-md.materials.rho_ice/md.materials.rho_water);
+-hydrostatic_ratio=zeros(size(md.geometry.thickness));
+-
+-%get nodes on ice sheet and on ice shelf
+-pos_shelf=find(md.mask.groundedice_levelset<0.);
+-pos_GL=intersect(unique(md.mesh.elements(find(md.mask.elementongroundedice),:)),unique(md.mesh.elements(find(md.mask.elementonfloatingice),:)));
+-debug=(length(pos_shelf)>50000);
+-
+-%check that there is a GL
+-if isempty(pos_GL)
+-	error('ThicknessCorrection error message: no grounding line has been detected. Check the model mask');
+-end
+-
+-%get distance
+-if nargin==2,
+-	distance=varargin{1};
+-else
+-	distance=10000;
+-end
+-
+-%modify thickness
+-if (debug), fprintf('%s','      correction progress:   0.00 %'); end
+-for i=1:length(pos_shelf)
+-
+-	if (debug & mod(i,100)==0),
+-		fprintf('\b\b\b\b\b\b\b%5.2f%s',i/length(pos_shelf)*100,' %');
+-	end
+-
+-	%search the node on ice sheet the closest to i
+-	[d posd]=min(sqrt((md.mesh.x(pos_shelf(i))-md.mesh.x(pos_GL)).^2+(md.mesh.y(pos_shelf(i))-md.mesh.y(pos_GL)).^2));
+-
+-	if d>distance,
+-
+-		%if d > 15km, hydrostatic equilibrium
+-		hydrostatic_ratio(pos_shelf(i))=1;
+-		thickness(pos_shelf(i))=thickness_hydro(pos_shelf(i));
+-
+-	else
+-
+-		%else: quadratic combination of hydrostatic equilibrium and observations
+-		hydrostatic_ratio(pos_shelf(i))=(d/distance)^2;
+-		thickness(pos_shelf(i))=(1-hydrostatic_ratio(pos_shelf(i)))*thickness(pos_shelf(i))+hydrostatic_ratio(pos_shelf(i))*thickness_hydro(pos_shelf(i));
+-
+-	end
+-end
+-if (debug), fprintf('\b\b\b\b\b\b\b%5.2f%s\n',100,' %'); end
+-
+-%check the computed thickness
+-minth=1/(1-md.materials.rho_ice/md.materials.rho_water);
+-pos=find(isnan(thickness) | (thickness<=0));
+-thickness(pos)=minth;
+-hydrostatic_ratio(pos)=-1;
+-
+-%change bed to take into account the changes in thickness
+-md.geometry.thickness=thickness;
+-md.geometry.hydrostatic_ratio=hydrostatic_ratio;
+-md.geometry.base=md.geometry.surface-md.geometry.thickness;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22151-22152.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22151-22152.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22151-22152.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/miscellaneous/transientrestart.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/transientrestart.m	(revision 22151)
++++ ../trunk-jpl/src/m/miscellaneous/transientrestart.m	(revision 22152)
+@@ -9,7 +9,7 @@
+ 
+ %Get result and save it again
+ if nargin==1,
+-	step = numel(md.results.TransientSolution(end));
++	step = numel(md.results.TransientSolution);
+ end
+ if step<1,
+ 	error('step needs to be >0');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22152-22153.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22152-22153.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22152-22153.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/geometry/VolumeAboveFloatation.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/VolumeAboveFloatation.m	(nonexistent)
++++ ../trunk-jpl/src/m/geometry/VolumeAboveFloatation.m	(revision 22153)
+@@ -0,0 +1,39 @@
++function V = VolumeAboveFloatation(md)
++%VOLUMEABOVEFLOATATION - returns volume above floatation
++%
++%   Usage:
++%      V = VolumeAboveFloatation(md)
++
++%Special case if 3d
++if isa(md.mesh,'mesh3dprisms')
++	index = md.mesh.elements2d;
++	x = md.mesh.x2d;
++	y = md.mesh.y2d;
++elseif isa(md.mesh,'mesh2d'),
++	index = md.mesh.elements;
++	x = md.mesh.x;
++	y = md.mesh.y;
++else
++	error('not supported yet');
++end
++%1. get some parameters
++rho_ice   = md.materials.rho_ice;
++rho_water = md.materials.rho_water;
++
++%2. compute averages
++base        = mean(md.geometry.base(index),2);
++surface     = mean(md.geometry.surface(index),2);
++bathymetry  = mean(md.geometry.bed(index),2);
++
++%3. get areas of all triangles
++areas = GetAreas(index,x,y);
++
++%4. Compute volume above floatation
++V = areas.*(surface-base+min(rho_water/rho_ice*bathymetry,0.));
++
++%5. take out the ones that are outside of levelset or floating
++pos = find(min(md.mask.ice_levelset(index),[],2)>0 | min(md.mask.groundedice_levelset(index),[],2)<0);
++V(pos) = 0;
++
++%sum individual contributions
++V = sum(V);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22153-22154.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22153-22154.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22153-22154.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh	(revision 22154)
+@@ -0,0 +1,36 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install petsc-3.8.0 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.0.tar.gz' 'petsc-3.8.0.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.8.0.tar.gz
++mv petsc-3.8.0/* src/
++rm -rf petsc-3.8.0
++
++#configure
++cd src
++./config/configure.py \
++	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mpi-dir="$ISSM_DIR/externalpackages/mpich/install" \
++	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++	--with-debugging=1 \
++	--with-valgrind=0 \
++	--with-x=0 \
++	--with-ssl=0 \
++	--with-shared-libraries=1 \
++	--download-metis=1 \
++	--download-parmetis=1 \
++	--download-mumps=1 \
++	--download-scalapack=1 \
++	--download-fblaslapack=1 \
++	--with-pic=1
++
++#Compile and intall
++make
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22173-22174.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22173-22174.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22173-22174.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 22173)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 22174)
+@@ -105,6 +105,7 @@
+                             'list_parameter_study',...
+                             'centered_parameter_study',...
+                             'multidim_parameter_study',...
++									 'bayes_calibration',...
+                             };
+ 
+                         mlist2={};
+@@ -822,7 +823,29 @@
+                                 dm.ghspec   ={};
+                                 dm.params.output=false;
+                                 dm.params.partitions=[];
++                            case {'bayes_calibration'}
++                                dm.type     ='bayes';
++                                dm.variables={'continuous_design',...
++                                              'normal_uncertain',...
++                                              'uniform_uncertain',...
++                                              'continuous_state'};
++                                dm.lcspec   ={};
++                                dm.responses={'objective_function',...
++                                              'response_function',...
++															'calibration_function'};
++                                dm.ghspec   ={};
++                                dm.params.queso=false;
++										  dm.params.dream=false;
++										  dm.params.gpmsa=false;
++                                dm.params.samples=0;
++										  dm.params.seed=false;
++										  dm.params.output=false;
++										  dm.params.metropolis_hastings=false;
++										  dm.params.proposal_covariance=false;
++										  dm.params.diagonal=false;
++										  dm.params.values=[];
+ 
++
+                             otherwise
+                                 error('Unimplemented method: ''%s''.',dm.method);
+                         end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22174-22175.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22174-22175.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22174-22175.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 22174)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 22175)
+@@ -520,6 +520,27 @@
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+ 
++	case {'bayes'}
++		switch dm.method
++				case {'bayes_calibration'}
++               % if (dm.params.queso + ...
++                %    dm.params.dream + ...
++					%	 dm.params.gpmsa ~= 1)
++                %    error('''%s'' method must have one and only one bayes type. YOU SUCK',...
++                 %       dm.method);
++               % end
++                param_write(fid,sbeg,'queso','','\n',dm.params);
++                param_write(fid,sbeg,'dream','','\n',dm.params);
++                param_write(fid,sbeg,'gpmsa','','\n',dm.params);
++                param_write(fid,sbeg,'samples','        = ','\n',dm.params);
++                param_write(fid,sbeg,'seed','      = ','\n',dm.params);
++					 param_write(fid,sbeg,'output','    =','\n',dm.params);
++					 param_write(fid,sbeg,'metropolis_hastings','','\n',dm.params);
++					 param_write(fid,sbeg,'proposal_covariance','','\n',dm.params);
++					 param_write(fid,sbeg,'diagonal','','\n',dm.params);
++					 param_write(fid,sbeg,'values','     = ','\n',dm.params);
++		end
++
+     otherwise
+         error('Unrecognized method type: ''%s''.',dm.type);
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22175-22176.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22175-22176.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22175-22176.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/m/qmu/rlist_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/rlist_write.m	(revision 22175)
++++ ../trunk-jpl/src/m/qmu/rlist_write.m	(revision 22176)
+@@ -34,11 +34,18 @@
+ 
+ disp(sprintf('  Writing %d %s responses.',nresp,cstring));
+ 
+-fprintf(fidi,'\tnum_%s = %d\n',cstring,nresp);
++if strcmp(cstring,'calibration_terms')==1
++	fprintf(fidi,'\t%s = %d\n',cstring,nresp);
++	
++else
++	fprintf(fidi,'\tnum_%s = %d\n',cstring,nresp);
++end
++
+ if ~isempty(pstype)
+-    fprintf(fidi,'\t  %s_scale_types =\n',cstring2);
+-    vector_write(fidi,sprintf('\t    '),pstype ,6,76);
++fprintf(fidi,'\t  %s_scale_types =\n',cstring2);
++vector_write(fidi,sprintf('\t    '),pstype ,6,76);
+ end
++
+ if ~isempty(pscale)
+     fprintf(fidi,'\t  %s_scales =\n',cstring2);
+     vector_write(fidi,sprintf('\t    '),pscale ,6,76);
+Index: ../trunk-jpl/src/m/qmu/dakota_in_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_in_write.m	(revision 22175)
++++ ../trunk-jpl/src/m/qmu/dakota_in_write.m	(revision 22176)
+@@ -108,6 +108,7 @@
+ 
+ responses_write(fidi,dmeth,dresp,params);
+ 
++
+ fclose(fidi);
+ display('End of file successfully written.');
+ 
+@@ -286,7 +287,9 @@
+ display('Writing responses section of Dakota input file.');
+ 
+ fprintf(fidi,'responses,\n');
++%fprintf(fidi,'calibration_terms = 1 \n');
+ 
++
+ %  functions, gradients, and hessians vary by method
+ 
+ rdesc={};
+@@ -295,7 +298,6 @@
+     fhresp=str2func([dmeth.responses{i} '.dakota_write']);
+     [rdesc]=fhresp(fidi,dresp,rdesc);
+ end
+-
+ %  write accumulated response descriptors for all response classes
+ 
+ if ~isempty(rdesc)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22176-22177.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22176-22177.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22176-22177.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/m/classes/qmu/calibration_function.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/calibration_function.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/qmu/calibration_function.m	(revision 22177)
+@@ -0,0 +1,125 @@
++%
++%  definition for the calibration_function class.
++%
++%  [cf]=calibration_function(varargin)
++%
++%  where the required varargin are:
++%    descriptor    (char, description, '')
++%  and the optional varargin and defaults are:
++%    scale_type    (char, scaling type, 'none')
++%    scale         (double, scaling factor, 1.)
++%    weight        (double, weighting factor, 1.)
++%
++%  note that zero arguments constructs a default instance; one
++%  argument of the class copies the instance; and one or more
++%  arguments constructs a new instance from the arguments.
++%
++classdef calibration_function
++    properties
++        descriptor='';
++    end
++
++    methods
++        function [cf]=calibration_function(varargin)
++
++            switch nargin
++
++%  create a default object
++
++                case 0
++
++%  copy the object or create the object from the input
++
++                otherwise
++                    if  (nargin == 1) && isa(varargin{1},'calibration_function')
++                        cf=varargin{1};
++							else
++								asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
++								cf(asizec{:})=calibration_function;
++								clear asizec
++
++								if ischar(varargin{1})
++									varargin{1}=cellstr(varargin{1});
++								end
++								for i=1:numel(cf)
++									if (numel(varargin{1}) > 1)
++										cf(i).descriptor=varargin{1}{i};
++									else
++										cf(i).descriptor=[char(varargin{1}) string_dim(cf,i,'vector')];
++									end
++								end
++                    end
++            end
++
++        end
++
++        function []=disp(cf)
++
++%  display the object
++
++            disp(sprintf('\n'));
++            for i=1:numel(cf)
++                disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
++                    class(cf),inputname(1),string_dim(cf,i)));
++                disp(sprintf('    descriptor: ''%s'''  ,cf(i).descriptor));
++            end
++
++        end
++
++        function [desc]  =prop_desc(cf,dstr)
++            desc=cell(1,numel(cf));
++            for i=1:numel(cf)
++                if ~isempty(cf(i).descriptor)
++                    desc(i)=cellstr(cf(i).descriptor);
++                elseif ~isempty(inputname(1))
++                    desc(i)=cellstr([inputname(1) string_dim(cf,i,'vector')]);
++                elseif exist('dstr','var')
++                    desc(i)=cellstr([dstr         string_dim(cf,i,'vector')]);
++                else
++                    desc(i)=cellstr(['cf'         string_dim(cf,i,'vector')]);
++                end
++            end
++            desc=allempty(desc);
++			end
++			function [stype] =prop_stype(cf)
++				stype={};
++			end
++			function [weight] =prop_weight(cf)
++				weight=[];
++			end
++			function [lower] =prop_lower(cf)
++				lower=[];
++			end
++			function [upper] =prop_upper(cf)
++				upper=[];
++			end
++			function [target] =prop_target(cf)
++				target=[];
++			end
++			function [scale] =prop_scale(cf)
++				scale=[];
++			end
++
++
++
++
++
++
++
++    end
++    methods (Static)
++        function [rdesc]=dakota_write(fidi,dresp,rdesc)
++
++%  collect only the responses of the appropriate class
++
++            cf=struc_class(dresp,'calibration_function');
++
++%  write responses
++
++            [rdesc]=rlist_write(fidi,'calibration_terms','calibration_function',cf,rdesc);
++        end
++
++        function []=dakota_rlev_write(fidi,dresp,params)
++        end
++    end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22177-22178.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22177-22178.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22177-22178.diff	(revision 22755)
@@ -0,0 +1,275 @@
+Index: ../trunk-jpl/src/c/cores/balancethickness2_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 22178)
+@@ -12,13 +12,13 @@
+ void balancethickness2_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	bool        save_results;
+-	IssmDouble  l = 3.;
++	bool save_results;
++	//IssmDouble  l = 3.;
+ 
+ 	/*recover parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+-	if(VerboseSolution()) _printf0_("computing smooth surface slopes:\n");
++	//if(VerboseSolution()) _printf0_("computing smooth surface slopes:\n");
+ 	//femmodel->parameters->SetParam(l,SmoothThicknessMultiplierEnum);
+ 	//femmodel->SetCurrentConfiguration(SmoothAnalysisEnum);
+ 	//femmodel->parameters->SetParam(SurfaceSlopeXEnum,InputToSmoothEnum);
+@@ -25,7 +25,7 @@
+ 	//solutionsequence_linear(femmodel);
+ 	//femmodel->parameters->SetParam(SurfaceSlopeYEnum,InputToSmoothEnum);
+ 	//solutionsequence_linear(femmodel);
+-	surfaceslope_core(femmodel);
++	//surfaceslope_core(femmodel);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+ 	femmodel->SetCurrentConfiguration(Balancethickness2AnalysisEnum);
+@@ -34,10 +34,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const int numoutputs = 6;
+-		int outputs[numoutputs] = {SurfaceEnum,SurfaceSlopeXEnum,SurfaceSlopeYEnum,VxEnum,VyEnum,VelEnum};
+-		//const int numoutputs = 4;
+-		//int outputs[numoutputs] = {SurfaceEnum,VxEnum,VyEnum,VelEnum};
++		const int numoutputs = 1;
++		int outputs[numoutputs] = {SurfaceEnum};
+ 		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/cores/adjointbalancethickness2_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/adjointbalancethickness2_core.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/cores/adjointbalancethickness2_core.cpp	(revision 22178)
+@@ -23,7 +23,7 @@
+ 	solutionsequence_linear(femmodel);
+ 
+ 	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel);
++	//SurfaceAreax(NULL,femmodel);
+ 
+ 	/*compute adjoint*/
+ 	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+Index: ../trunk-jpl/src/c/cores/controlvalidation_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlvalidation_core.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/cores/controlvalidation_core.cpp	(revision 22178)
+@@ -103,4 +103,5 @@
+ 	xDelete<IssmDouble>(G);
+ 	xDelete<IssmDouble>(X);
+ 	xDelete<IssmDouble>(X0);
++	xDelete<IssmDouble>(scaling_factors);
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22178)
+@@ -1760,6 +1760,14 @@
+ 						this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
++				case BalancethicknessOmegaEnum:
++					if(iomodel->Data("md.balancethickness.omega")){
++						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.omega")[tria_vertex_ids[j]-1];
++						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
++						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
++						this->inputs->AddInput(new ControlInput(BalancethicknessOmegaEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++					}
++					break;
+ 				case FrictionCoefficientEnum:
+ 					if (iomodel->Data("md.friction.coefficient")){
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tria_vertex_ids[j]-1];
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 22178)
+@@ -191,7 +191,8 @@
+ void           AdjointBalancethickness2Analysis::GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
+ 
+ 	/*Intermediaries*/
+-	IssmDouble dlambda[2],ds[2],D0,omega,Jdet; 
++	int         n=3;
++	IssmDouble  dlambda[2],ds[2],slopex,slopey,slope,omega,Jdet; 
+ 	IssmDouble *xyz_list= NULL;
+ 
+ 	/*Fetch number of vertices for this finite element*/
+@@ -206,9 +207,11 @@
+ 	element->GetVerticesCoordinates(&xyz_list);
+ 	element->GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* adjoint_input = element->GetInput(AdjointEnum);            _assert_(adjoint_input);
+-	Input* s_input       = element->GetInput(SurfaceEnum);            _assert_(s_input);
+-	Input* D0_input      = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input);
+ 	Input* omega_input   = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
++	Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 
++	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
++	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
++	IssmDouble rhog    = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
+ 
+ 	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -217,14 +220,17 @@
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		element->NodalFunctionsP1(basis,gauss);
+ 
+-		D0_input->GetInputValue(&D0,gauss);
+ 		omega_input->GetInputValue(&omega,gauss);
+ 		adjoint_input->GetInputDerivativeValue(&dlambda[0],xyz_list,gauss);
+-		s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
++		surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
++		surfaceslopex_input->GetInputValue(&slopex,gauss);
++		surfaceslopey_input->GetInputValue(&slopey,gauss);
+ 
++		slope = sqrt(slopex*slopex + slopey*slopey);
++
+ 		/*Build gradient vector (actually -dJ/da): */
+ 		for(int i=0;i<numvertices;i++){
+-			ge[i]+= -Jdet*gauss->weight*basis[i]*exp(omega)*D0*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
++			ge[i]+= -Jdet*gauss->weight*basis[i]*pow(rhog,n)*exp(omega)*pow(slope,n-1)*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
+ 			_assert_(!xIsNan<IssmDouble>(ge[i]));
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22177)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22178)
+@@ -38,6 +38,8 @@
+ 	iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+ 	iomodel->FetchDataToInput(elements,"md.balancethickness.omega",BalancethicknessOmegaEnum);
++	iomodel->FetchDataToInput(elements,"md.balancethickness.slopex",SurfaceSlopeXEnum);
++	iomodel->FetchDataToInput(elements,"md.balancethickness.slopey",SurfaceSlopeYEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -62,70 +64,6 @@
+ 	/*Default, return NULL*/
+ 	return NULL;
+ }/*}}}*/
+-void           Balancethickness2Analysis::CreateD0(Element* element){/*{{{*/
+-
+-	/*Intermediaries */
+-	IssmDouble       Gamma,h,mu0,ds[2],Cmu,B,k,s,b,normds;
+-	const int        n = 3;
+-	const IssmDouble Hstar = 500.;
+-	const IssmDouble Lstar = 500.e+3;
+-	IssmDouble *xyz_list  = NULL;
+-
+-	/*Fetch number of vertices and allocate output*/
+-	int  numnodes = element->GetNumberOfNodes();
+-	IssmDouble* D0     = xNew<IssmDouble>(numnodes);
+-
+-	/*retrieve what we need: */
+-	element->GetVerticesCoordinates(&xyz_list);
+-	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum);
+-	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum);
+-	Input* surface_input       = element->GetInput(SurfaceEnum);            _assert_(surface_input);
+-	Input* B_input             = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
+-	IssmDouble rhog            = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
+-
+-	/*Calculate damage evolution source term: */
+-	Gauss* gauss=element->NewGauss();
+-	for (int i=0;i<numnodes;i++){
+-		gauss->GaussNode(element->GetElementType(),i);
+-		
+-		B_input->GetInputValue(&B,gauss);
+-		if(surfaceslopex_input && surfaceslopey_input){
+-			surfaceslopex_input->GetInputValue(&ds[0],gauss);
+-			surfaceslopey_input->GetInputValue(&ds[1],gauss);
+-		}
+-		else{
+-			surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
+-		}
+-
+-		/*check slopes*/
+-		normds = sqrt(ds[0]*ds[0]+ds[1]*ds[1]);
+-		if (normds==0.){
+-			_error_("surface slope is zero");
+-		}
+-		if(normds<1.e-5){
+-			ds[0] = ds[0]/normds*1.e+5;
+-			ds[1] = ds[1]/normds*1.e+5;
+-			normds = 1.e-5;
+-		}
+-
+-		mu0   = pow(2.,(1-3*n)/(2.*n)) * B;
+-		Gamma = pow(rhog,n) * pow(Hstar,2*(n+1)) * pow(Hstar/Lstar,2*(n+1)) * 1./pow(mu0,n);
+-
+-		D0[i] = Gamma*pow(ds[0]*ds[0]+ds[1]*ds[1],(n-1)/2)/(n+2);
+-	}
+-
+-	/*Add input*/
+-	element->AddInput(BalancethicknessD0Enum,D0,element->GetElementType());
+-	//if(surfaceslopex_input && surfaceslopey_input){
+-	//	element->DeleteInput(SurfaceSlopeXEnum);
+-	//	element->DeleteInput(SurfaceSlopeYEnum);
+-	//}
+-	
+-	/*Clean up and return*/
+-	xDelete<IssmDouble>(D0);
+-	xDelete<IssmDouble>(xyz_list);
+-	delete gauss;
+-}/*}}}*/
+ ElementMatrix* Balancethickness2Analysis::CreateJacobianMatrix(Element* element){/*{{{*/
+ _error_("Not implemented");
+ }/*}}}*/
+@@ -132,7 +70,8 @@
+ ElementMatrix* Balancethickness2Analysis::CreateKMatrix(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  Jdet,D0,omega;
++	int         n=3;
++	IssmDouble  Jdet,omega,ds[2],slope;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -144,12 +83,10 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
+-	Input* D0_input    = element->GetInput(BalancethicknessD0Enum);
+-	if(!D0_input){
+-		this->CreateD0(element);
+-		D0_input = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input);
+-	}
++	Input* omega_input         = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
++	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
++	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
++	IssmDouble rhog    = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=element->NewGauss(2);
+@@ -157,12 +94,15 @@
+ 		gauss->GaussPoint(ig);
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		D0_input->GetInputValue(&D0,gauss);
+ 		omega_input->GetInputValue(&omega,gauss);
++		surfaceslopex_input->GetInputValue(&ds[0],gauss);
++		surfaceslopey_input->GetInputValue(&ds[1],gauss);
+ 
++		slope = sqrt(ds[0]*ds[0] + ds[1]*ds[1]);
++
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] += D0*exp(omega)*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
++				Ke->values[i*numnodes+j] += pow(rhog,n)*exp(omega)*pow(slope,n-1)*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 22177)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 22178)
+@@ -22,7 +22,6 @@
+ 		/*Finite element Analysis*/
+ 		void           Core(FemModel* femmodel);
+ 		ElementVector* CreateDVector(Element* element);
+-		void           CreateD0(Element* element);
+ 		ElementMatrix* CreateJacobianMatrix(Element* element);
+ 		ElementMatrix* CreateKMatrix(Element* element);
+ 		ElementVector* CreatePVector(Element* element);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22183-22184.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22183-22184.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22183-22184.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive806.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22184-22185.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22184-22185.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22184-22185.diff	(revision 22755)
@@ -0,0 +1,328 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22184)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22185)
+@@ -184,6 +184,7 @@
+    HydrologyRelaxationEnum,
+ 	HydrologyBasalFluxEnum,
+ 	HydrologyStorageEnum,
++	DegreeOfChannelizationEnum,
+ 	InversionControlParametersEnum,
+ 	InversionControlScalingFactorsEnum,
+ 	InversionCostFunctionThresholdEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22184)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22185)
+@@ -190,6 +190,7 @@
+ 		case HydrologyRelaxationEnum : return "HydrologyRelaxation";
+ 		case HydrologyBasalFluxEnum : return "HydrologyBasalFlux";
+ 		case HydrologyStorageEnum : return "HydrologyStorage";
++		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
+ 		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22184)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22185)
+@@ -193,6 +193,7 @@
+ 	      else if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyStorage")==0) return HydrologyStorageEnum;
++	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
++	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+ 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+@@ -269,10 +270,7 @@
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+ 	      else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
++	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+ 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
+ 	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
+ 	      else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
+@@ -384,7 +382,10 @@
+ 	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+ 	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
+ 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+-	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+ 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
+ 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+@@ -392,10 +393,7 @@
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
++	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+ 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
+@@ -507,7 +505,10 @@
+ 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+ 	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+-	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+ 	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+@@ -515,10 +516,7 @@
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
+ 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
++	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+ 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+ 	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+@@ -630,7 +628,10 @@
+ 	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+ 	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+ 	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
+-	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+ 	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
+ 	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
+ 	      else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum;
+@@ -638,10 +639,7 @@
+ 	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
+ 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
+ 	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
++	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+ 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+ 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+ 	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+@@ -753,7 +751,10 @@
+ 	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+ 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Index")==0) return IndexEnum;
+-	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"Indexed")==0) return IndexedEnum;
+ 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
+@@ -761,15 +762,9 @@
+ 	      else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;
+ 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
+ 	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"RootPath")==0) return RootPathEnum;
++	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+ 	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
++	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+ 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+ 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+@@ -879,7 +874,10 @@
+ 	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
+-	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+@@ -887,10 +885,7 @@
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
++	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+ 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+ 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+@@ -931,10 +926,7 @@
+ 	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+@@ -1005,7 +997,10 @@
+ 	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+ 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+-	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+@@ -1013,10 +1008,7 @@
+ 	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+ 	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+ 	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
++	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+@@ -1056,10 +1048,7 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
++	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+ 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22184)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22185)
+@@ -88,8 +88,8 @@
+ 		
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+-			int outputs[4] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
++			int outputs[5] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum,DegreeOfChannelizationEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],5);
+ 			
+ 			/*unload results*/
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+Index: ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22184)
++++ ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22185)
+@@ -312,7 +312,8 @@
+ 		dpressure_water[1] = rho_water*g*(dh[1] - dbed[1]);
+ 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
+ 
+-		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
++		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); //Taking out geothermal and frictional heat for SHMIP
++   //	meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+ 		_assert_(meltrate>0.);
+ 	
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*
+@@ -379,9 +380,9 @@
+ 		}
+ 
+ 		/*Make sure that negative pressure is not allowed*/
+-      if(values[i]<bed[i]){
+-			values[i] = bed[i];
+-		}
++  //    if(values[i]<bed[i]){
++	//		values[i] = bed[i];
++	//	}
+ 
+ 		/*Under-relaxation*/
+ 	   values[i] = head_old[i] - relaxation*(head_old[i]-values[i]);
+@@ -465,6 +466,7 @@
+ 	IssmDouble* xyz_list = NULL;
+    IssmDouble  dpressure_water[2],dbed[2],PMPheat;
+ 	IssmDouble q = 0.;
++   IssmDouble channelization = 0.;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -541,8 +543,9 @@
+ 	   dpressure_water[0] = rho_water*g*(dh[0] - dbed[0]);
+ 		dpressure_water[1] = rho_water*g*(dh[1] - dbed[1]);
+ 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
+-	
+-		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
++
++		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); // Taking out geothermal and frictional heat for SHMIP
++//		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+ 		_assert_(meltrate>0.);
+ 
+ 		newgap += gauss->weight*Jdet*(gap+dt*(
+@@ -554,6 +557,9 @@
+ 
+ 		/* Compute basal water flux */
+       q += gauss->weight*Jdet*(conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1]));
++
++		/* Compute "degree of channelization" (ratio of melt opening to opening by sliding) */
++		channelization += gauss->weight*Jdet*(meltrate/rho_ice/(beta*sqrt(vx*vx+vy*vy)));
+ 	}
+ 
+ 	/*Divide by connectivity*/
+@@ -564,7 +570,7 @@
+ 	/*Limit gap height to grow to surface*/
+ 	if(newgap>thickness)
+ 	 newgap = thickness;
+-	 
++
+ 	/*Add new gap as an input*/
+ 	element->AddInput(HydrologyGapHeightEnum,&newgap,P0Enum);
+  
+@@ -572,6 +578,10 @@
+ 	q = q/totalweights;
+ 	element->AddInput(HydrologyBasalFluxEnum,&q,P0Enum);
+ 
++	/* Divide by connectivity, add degree of channelization as an input */
++	channelization = channelization/totalweights;
++	element->AddInput(DegreeOfChannelizationEnum,&channelization,P0Enum);
++
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
+ 	delete friction;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22185-22186.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22185-22186.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22185-22186.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22185)
++++ ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22186)
+@@ -312,8 +312,7 @@
+ 		dpressure_water[1] = rho_water*g*(dh[1] - dbed[1]);
+ 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
+ 
+-		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); //Taking out geothermal and frictional heat for SHMIP
+-   //	meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
++   	meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+ 		_assert_(meltrate>0.);
+ 	
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*
+@@ -544,8 +543,7 @@
+ 		dpressure_water[1] = rho_water*g*(dh[1] - dbed[1]);
+ 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
+ 
+-		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); // Taking out geothermal and frictional heat for SHMIP
+-//		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
++		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+ 		_assert_(meltrate>0.);
+ 
+ 		newgap += gauss->weight*Jdet*(gap+dt*(
Index: /issm/oecreview/Archive/21724-22754/ISSM-22186-22187.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22186-22187.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22186-22187.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive350.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22187-22188.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22187-22188.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22187-22188.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive350.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22188-22189.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22188-22189.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22188-22189.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 22188)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 22189)
+@@ -391,8 +391,12 @@
+ end
+ 
+ %flag edges of a partition
+-if exist(options,'partitionedges')
+-	[xsegments ysegments]=flagedges(md.mesh.elements,md.mesh.x,md.mesh.y,md.qmu.partition);
++if exist(options,'partitionedges') & ~strcmp(getfieldvalue(options,'partitionedges','off'),'off')
++	mdp=getfieldvalue(options,'partitionedges','off');
++	if ischar(mdp)
++		mdp=md;
++	end
++	[xsegments ysegments]=flagedges(mdp.mesh.elements,mdp.mesh.x,mdp.mesh.y,mdp.qmu.partition);
+ 	xsegments=xsegments*getfieldvalue(options,'unit',1);
+ 	ysegments=ysegments*getfieldvalue(options,'unit',1);
+ 	color=getfieldvalue(options,'partitionedgescolor','r-');
+@@ -399,7 +403,11 @@
+ 	linewidth=getfieldvalue(options,'linewidth',1);
+ 	hold on;
+ 	for i=1:length(xsegments),
+-		plot(xsegments(i,:),ysegments(i,:),color,'LineWidth',linewidth);
++		if (isnumeric(color))
++			h=plot(xsegments(i,:),ysegments(i,:),'Color',color,'LineWidth',linewidth);
++		else
++			plot(xsegments(i,:),ysegments(i,:),color,'LineWidth',linewidth);
++		end
+ 	end
+ end
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22189-22190.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22189-22190.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22189-22190.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22189)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22190)
+@@ -3,6 +3,7 @@
+  */ 
+ 
+ #include "./issm.h"
++#include <stdlib.h>
+ 
+ int main(int argc,char **argv){
+ 
+Index: ../trunk-jpl/src/c/main/issm_slr.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_slr.cpp	(revision 22189)
++++ ../trunk-jpl/src/c/main/issm_slr.cpp	(revision 22190)
+@@ -3,6 +3,7 @@
+  */ 
+ 
+ #include "./issm.h"
++#include <stdlib.h>
+ 
+ int main(int argc,char **argv){
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22190-22191.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22190-22191.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22190-22191.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.html
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.html	(revision 22190)
++++ ../trunk-jpl/test/NightlyRun/test101.html	(revision 22191)
+@@ -3,9 +3,9 @@
+ <head><title>ISSM Web APP &mdash; Beta</title>
+ <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+ <!-- Includes {{{-->
+-<script type="text/javascript" src="../../build-js/bin/issm-bin.js"> </script>
+-<script type="text/javascript" src="../../build-js/bin/issm-prebin.js"> </script>
+-<script type="text/javascript" src="../../build-js/bin/IssmModule.js"></script>
++<script type="text/javascript" src="../../bin/issm-bin.js"> </script>
++<script type="text/javascript" src="../../bin/issm-prebin.js"> </script>
++<script type="text/javascript" src="../../bin/IssmModule.js"></script>
+ <script type="text/javascript" src="../Exp/Square.js"></script>
+ <script type="text/javascript" src="../Par/SquareShelfConstrained.js"></script>
+ <script type="text/javascript" src="../Data/SquareShelfConstrained.data.js"></script>
+@@ -31,6 +31,11 @@
+ 	md=solve(md,'Stressbalance','checkconsistency','no');
+ 	
+ 	console.log(md.results['StressbalanceSolution'][0]['Vel']);
++	
++	plotmodel(md,
++		'colorbar','on',
++		'data',md.results['StressbalanceSolution'][0]['Vel'],
++		'data','mesh');
+ 
+ </script>
+ </body> 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22191-22192.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22191-22192.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22191-22192.diff	(revision 22755)
@@ -0,0 +1,326 @@
+Index: ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22192)
+@@ -30,9 +30,9 @@
+ 			femmodel->StrainRateperpendicularx();
+ 			femmodel->CalvingRateLevermannx();
+ 			break;
+-		case CalvingDevEnum:
+-			femmodel->CalvingRateDevx();
+-			femmodel->ElementOperationx(&Element::CalvingRateDev);
++		case CalvingVonmisesEnum:
++			femmodel->CalvingRateVonmisesx();
++			femmodel->ElementOperationx(&Element::CalvingRateVonmises);
+ 			break;
+ 		default:
+ 			_error_("Caving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22192)
+@@ -919,11 +919,11 @@
+ 	*presponse=J;
+ 
+ }/*}}}*/
+-void FemModel::CalvingRateDevx(){/*{{{*/
++void FemModel::CalvingRateVonmisesx(){/*{{{*/
+ 
+ 	for(int i=0;i<elements->Size();i++){
+ 		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-		element->CalvingRateDev();
++		element->CalvingRateVonmises();
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22192)
+@@ -51,7 +51,7 @@
+ 		/*}}}*/
+ 		/*Element virtual functions definitions: {{{*/
+ 		void        AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+-		void			CalvingRateDev();
++		void			CalvingRateVonmises();
+ 		void        CalvingCrevasseDepth();
+ 		void			CalvingRateLevermann();
+ 		IssmDouble  CharacteristicLength(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22192)
+@@ -181,7 +181,7 @@
+ 	_error_("Not supported yet!");
+ }
+ /*}}}*/
+-void       Penta::CalvingRateDev(){/*{{{*/
++void       Penta::CalvingRateVonmises(){/*{{{*/
+ 
+ 	if(!this->IsOnBase()) return;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22192)
+@@ -48,7 +48,7 @@
+ 		void           AddInput(int input_enum, IssmDouble* values, int interpolation_enum);
+ 		void           AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+ 		void           BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
+-		void           CalvingRateDev();
++		void           CalvingRateVonmises();
+ 		void           CalvingRateLevermann();
+ 		IssmDouble     CharacteristicLength(void){_error_("not implemented yet");};
+ 		void           ComputeBasalStress(Vector<IssmDouble>* sigma_b);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22192)
+@@ -2352,8 +2352,8 @@
+ 				case CalvingLevermannEnum:
+ 					this->CalvingRateLevermann();
+ 					break;
+-				case CalvingDevEnum:
+-					this->CalvingRateDev();
++				case CalvingVonmisesEnum:
++					this->CalvingRateVonmises();
+ 					break;
+ 				case CalvingCrevasseDepthEnum:
+ 					this->CalvingCrevasseDepth();
+@@ -2365,7 +2365,7 @@
+ 		case StrainRateparallelEnum: this->StrainRateparallel(); break;
+ 		case StrainRateperpendicularEnum: this->StrainRateperpendicular(); break;
+ 		case SurfaceCrevasseEnum: this->CalvingCrevasseDepth(); break;
+-		case SigmaVMEnum: this->CalvingRateDev(); break;
++		case SigmaVMEnum: this->CalvingRateVonmises(); break;
+ 	}
+ 
+ 	/*Find input*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22192)
+@@ -187,7 +187,7 @@
+ 		virtual void       AddInput(int input_enum, IssmDouble* values, int interpolation_enum)=0;
+ 		virtual void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
+ 		virtual void		 BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
+-		virtual void       CalvingRateDev(void){_error_("not implemented yet");};
++		virtual void       CalvingRateVonmises(void){_error_("not implemented yet");};
+ 		virtual void       CalvingCrevasseDepth(void){_error_("not implemented yet");};
+ 		virtual void	    CalvingRateLevermann(void)=0;
+ 		virtual IssmDouble CharacteristicLength(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22192)
+@@ -207,7 +207,7 @@
+ 	}
+ }
+ /*}}}*/
+-void       Tria::CalvingRateDev(){/*{{{*/
++void       Tria::CalvingRateVonmises(){/*{{{*/
+ 
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22191)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22192)
+@@ -81,7 +81,7 @@
+ 
+ 		/*Modules*/ 
+ 		void BalancethicknessMisfitx(IssmDouble* pV);
+-		void CalvingRateDevx();
++		void CalvingRateVonmisesx();
+ 		void CalvingRateLevermannx();
+ 		void DeviatoricStressx();
+ 		void Divergencex(IssmDouble* pdiv);
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22191)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22192)
+@@ -59,7 +59,7 @@
+ 			iomodel->FetchDataToInput(elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvinglevermannMeltingrateEnum);
+ 			break;
+-		case CalvingDevEnum:
++		case CalvingVonmisesEnum:
+ 			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
+@@ -88,7 +88,7 @@
+ 	switch(calvinglaw){
+ 		case DefaultCalvingEnum:
+ 		case CalvingLevermannEnum:
+-		case CalvingDevEnum:
++		case CalvingVonmisesEnum:
+ 			break;
+ 		case CalvingMinthicknessEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
+@@ -219,7 +219,7 @@
+ 	/*Load calving inputs*/
+ 	switch(calvinglaw){
+ 		case DefaultCalvingEnum:
+-		case CalvingDevEnum:
++		case CalvingVonmisesEnum:
+ 			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+ 			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+ 			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+@@ -290,7 +290,7 @@
+ 		/*Get calving speed*/
+ 		switch(calvinglaw){
+ 			case DefaultCalvingEnum:
+-			case CalvingDevEnum:
++			case CalvingVonmisesEnum:
+ 				lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
+ 				if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
+ 				calvingrate_input->GetInputValue(&calvingrate,gauss);
+Index: ../trunk-jpl/src/m/classes/calvingdev.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingdev.m	(revision 22191)
++++ ../trunk-jpl/src/m/classes/calvingdev.m	(nonexistent)
+@@ -1,63 +0,0 @@
+-%CALVINGDEV class definition
+-%
+-%   Usage:
+-%      calvingdev=calvingdev();
+-
+-classdef calvingdev
+-	properties (SetAccess=public) 
+-		stress_threshold_groundedice = 0.;
+-		stress_threshold_floatingice = 0.;
+-		meltingrate   = NaN;
+-	end
+-	methods
+-		function self = calvingdev(varargin) % {{{
+-			switch nargin
+-				case 0
+-					self=setdefaultparameters(self);
+-				case 1
+-					inputstruct=varargin{1};
+-					list1 = properties('calvingdev');
+-					list2 = fieldnames(inputstruct);
+-					for i=1:length(list1)
+-						fieldname = list1{i};
+-						if ismember(fieldname,list2),
+-							self.(fieldname) = inputstruct.(fieldname);
+-						end
+-					end
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function self = extrude(self,md) % {{{
+-			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
+-		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			%Default sigma max
+-			self.stress_threshold_groundedice = 1e6;
+-			self.stress_threshold_floatingice = 150e3;
+-		end % }}}
+-		function md = checkconsistency(self,md,solution,analyses) % {{{
+-			%Early return
+-			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
+-
+-			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1);
+-			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1);
+-			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
+-		end % }}}
+-		function disp(self) % {{{
+-			disp(sprintf('   Calving Pi parameters:'));
+-			fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]');
+-			fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]');
+-			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
+-
+-		end % }}}
+-		function marshall(self,prefix,md,fid) % {{{
+-			yts=md.constants.yts;
+-			WriteData(fid,prefix,'name','md.calving.law','data',2,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/calvingvonmises.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingvonmises.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingvonmises.m	(revision 22192)
+@@ -0,0 +1,63 @@
++%CALVINGVONMISES class definition
++%
++%   Usage:
++%      calvingvonmises=calvingvonmises();
++
++classdef calvingvonmises
++	properties (SetAccess=public) 
++		stress_threshold_groundedice = 0.;
++		stress_threshold_floatingice = 0.;
++		meltingrate   = NaN;
++	end
++	methods
++		function self = calvingvonmises(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('calvingvonmises');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							self.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%Default sigma max
++			self.stress_threshold_groundedice = 1e6;
++			self.stress_threshold_floatingice = 150e3;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++			%Early return
++			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
++
++			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   Calving VonMises parameters:'));
++			fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]');
++			fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]');
++			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++			yts=md.constants.yts;
++			WriteData(fid,prefix,'name','md.calving.law','data',2,'format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/test/NightlyRun/test540.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.m	(revision 22191)
++++ ../trunk-jpl/test/NightlyRun/test540.m	(revision 22192)
+@@ -8,7 +8,7 @@
+ 
+ %calving parameters
+ md.mask.ice_levelset = 1e4*(md.mask.ice_levelset + 0.5);
+-md.calving=calvingdev();
++md.calving=calvingvonmises();
+ md.calving.meltingrate = zeros(md.mesh.numberofvertices,1);
+ md.transient.ismovingfront = 1;
+ md.levelset.spclevelset = NaN(md.mesh.numberofvertices,1);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22192-22193.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22192-22193.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22192-22193.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22192)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22193)
+@@ -256,7 +256,7 @@
+ 	CalvingCalvingrateEnum,
+ 	CalvingMeltingrateEnum,
+ 	CalvingLevermannEnum,
+-	CalvingDevEnum,
++	CalvingVonmisesEnum,
+ 	CalvingMinthicknessEnum,
+ 	CalvingHabEnum,
+ 	CalvingCrevasseDepthEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22192)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22193)
+@@ -262,7 +262,7 @@
+ 		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
+ 		case CalvingMeltingrateEnum : return "CalvingMeltingrate";
+ 		case CalvingLevermannEnum : return "CalvingLevermann";
+-		case CalvingDevEnum : return "CalvingDev";
++		case CalvingVonmisesEnum : return "CalvingVonmises";
+ 		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+ 		case CalvingHabEnum : return "CalvingHab";
+ 		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22192)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22193)
+@@ -268,7 +268,7 @@
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+-	      else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum;
++	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+ 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+ 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22193-22194.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22193-22194.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22193-22194.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 22193)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 22194)
+@@ -137,6 +137,11 @@
+ 			if isa(md.amr,'double'); md.amr=amr(); end
+ 			%2017 Aug 29th
+ 			if isa(md.love,'double'); md.love=fourierlove(); end
++			%2017 Oct 26th
++			if isa(md.calving,'calvingdev')
++				disp('Warning: calvingdev is now calvingvonmises');
++				md.calving=calvingvonmises(md.calving); 
++			end
+ 
+ 		end% }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22194-22195.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22194-22195.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22194-22195.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/oldclasses/calvingdev.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/calvingdev.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/oldclasses/calvingdev.m	(revision 22195)
+@@ -0,0 +1,12 @@
++%CALVINGDEV class definition
++%
++%   Usage:
++%      calvingdev=calvingdev();
++
++classdef calvingdev
++	properties (SetAccess=public) 
++		stress_threshold_groundedice = 0.;
++		stress_threshold_floatingice = 0.;
++		meltingrate   = NaN;
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22195-22196.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22195-22196.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22195-22196.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22195)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22196)
+@@ -147,7 +147,7 @@
+ int IoCodeToEnumCalving(int enum_in){/*{{{*/
+ 	switch(enum_in){
+ 		case 1: return DefaultCalvingEnum;
+-		case 2: return CalvingDevEnum;
++		case 2: return CalvingVonmisesEnum;
+ 		case 3: return CalvingLevermannEnum;
+ 		case 4: return CalvingMinthicknessEnum;
+ 		case 5: return CalvingHabEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22196-22197.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22196-22197.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22196-22197.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22196)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22197)
+@@ -25,7 +25,6 @@
+ 	this->vertices   = NULL;
+ 	this->material   = NULL;
+ 	this->matpar     = NULL;
+-	this->inputs     = NULL;
+ 	this->parameters = NULL;
+ 	this->element_type_list=NULL;
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22197-22198.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22197-22198.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22197-22198.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test540.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.m	(revision 22197)
++++ ../trunk-jpl/test/NightlyRun/test540.m	(revision 22198)
+@@ -3,7 +3,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'SSA','all');
+-md.timestepping.time_step=5;
++md.timestepping.time_step=2;
+ md.timestepping.final_time=50;
+ 
+ %calving parameters
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22198-22199.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22198-22199.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22198-22199.diff	(revision 22755)
@@ -0,0 +1,359 @@
+Index: ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22199)
+@@ -31,6 +31,7 @@
+ 			femmodel->CalvingRateLevermannx();
+ 			break;
+ 		case CalvingVonmisesEnum:
++		case CalvingDev2Enum:
+ 			femmodel->CalvingRateVonmisesx();
+ 			femmodel->ElementOperationx(&Element::CalvingRateVonmises);
+ 			break;
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22199)
+@@ -74,6 +74,10 @@
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.water_height",WaterheightEnum);
+ 			break;
++		case CalvingDev2Enum:
++			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
++			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
++			break;
+ 		default:
+ 			_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+ 	}
+@@ -99,6 +103,9 @@
+ 		case CalvingCrevasseDepthEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.critical_fraction",CalvingCrevasseDepthEnum));
+ 			break;
++		case CalvingDev2Enum:
++			parameters->AddObject(iomodel->CopyConstantObject("md.calving.height_above_floatation",CalvingHeightAboveFloatationEnum));
++			break;
+ 		default:
+ 			_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+ 	}
+@@ -153,7 +160,7 @@
+ 	IssmDouble h,hx,hy,hz;
+ 	IssmDouble vel;
+ 	IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice;
+-	IssmDouble calvingmax;
++	IssmDouble calvingmax, calvinghaf, heaviside, haf_eps;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Get problem dimension and whether there is moving front or not*/
+@@ -258,6 +265,13 @@
+ 			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+ 			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+ 			break;
++		case CalvingDev2Enum:
++			basalelement->FindParam(&calvinghaf,CalvingHeightAboveFloatationEnum);
++			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
++			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
++			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
++			gr_input=basalelement->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++			break;
+ 		default:
+ 			_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+ 	}
+@@ -314,7 +328,7 @@
+ 					 c[i]=0.; m[i]=0.;
+ 				 }
+ 				break;
+-
++				
+ 			case CalvingLevermannEnum:
+ 				calvingratex_input->GetInputValue(&c[0],gauss);
+ 				if(dim==2) calvingratey_input->GetInputValue(&c[1],gauss);
+@@ -394,6 +408,45 @@
+ 				 }
+ 				break;
+ 
++			case CalvingDev2Enum:
++				{
++				lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
++				if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
++				calvingrate_input->GetInputValue(&calvingrate,gauss);
++				gr_input->GetInputValue(&groundedice,gauss);
++
++				//idea: no retreat on ice above critical calving height "calvinghaf" . Limit using regularized Heaviside function.
++				vel=sqrt(v[0]*v[0] + v[1]*v[1]);
++				haf_eps=10.;
++				if(groundedice-calvinghaf<=-haf_eps){
++					// ice floats freely below calvinghaf: calve freely
++				}
++				else if(groundedice-calvinghaf>=haf_eps){ 
++					// ice is well above calvinghaf -> no calving back, i.e. limit calving rate to ice velocity
++					calvingrate=min(calvingrate,vel);
++				}
++				else{ // ice is close to calvinghaf: smooth transition between limitation and free calving.
++					heaviside=(groundedice-calvinghaf+haf_eps)/(2.*haf_eps) + sin(PI*(groundedice-calvinghaf)/haf_eps)/(2.*PI);
++					calvingrate=heaviside*(min(calvingrate,vel)-calvingrate)+calvingrate;
++				}
++
++				norm_dlsf=0.;
++				for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2);
++				norm_dlsf=sqrt(norm_dlsf);
++
++				if(norm_dlsf>1.e-10)
++				 for(i=0;i<dim;i++){ 
++					 c[i]=calvingrate*dlsf[i]/norm_dlsf; 
++					 m[i]=0.;
++				 }
++				else
++				 for(i=0;i<dim;i++){
++					 c[i]=0.; 
++					 m[i]=0.;
++				 }
++				break;
++				}
++
+ 			default:
+ 				_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+ 		}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22198)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22199)
+@@ -255,11 +255,13 @@
+ 	CalvingLawEnum,
+ 	CalvingCalvingrateEnum,
+ 	CalvingMeltingrateEnum,
++	CalvingHeightAboveFloatationEnum,
+ 	CalvingLevermannEnum,
+ 	CalvingVonmisesEnum,
+ 	CalvingMinthicknessEnum,
+ 	CalvingHabEnum,
+ 	CalvingCrevasseDepthEnum,
++	CalvingDev2Enum,
+ 	SurfaceCrevasseEnum,
+ 	BasalCrevasseEnum,
+ 	CrevasseDepthEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22199)
+@@ -261,11 +261,13 @@
+ 		case CalvingLawEnum : return "CalvingLaw";
+ 		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
+ 		case CalvingMeltingrateEnum : return "CalvingMeltingrate";
++		case CalvingHeightAboveFloatationEnum : return "CalvingHeightAboveFloatation";
+ 		case CalvingLevermannEnum : return "CalvingLevermann";
+ 		case CalvingVonmisesEnum : return "CalvingVonmises";
+ 		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+ 		case CalvingHabEnum : return "CalvingHab";
+ 		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
++		case CalvingDev2Enum : return "CalvingDev2";
+ 		case SurfaceCrevasseEnum : return "SurfaceCrevasse";
+ 		case BasalCrevasseEnum : return "BasalCrevasse";
+ 		case CrevasseDepthEnum : return "CrevasseDepth";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22199)
+@@ -267,11 +267,13 @@
+ 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
++	      else if (strcmp(name,"CalvingHeightAboveFloatation")==0) return CalvingHeightAboveFloatationEnum;
+ 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+ 	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+ 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+ 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
++	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
+ 	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
+ 	      else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+ 	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+-	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
+-	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
++	      if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
++	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
++	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+ 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
+ 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+-	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+-	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
++	      if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
++	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
++	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+ 	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+@@ -626,12 +628,12 @@
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
+ 	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+-	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+-	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
++	      if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
++	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
++	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+ 	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
+ 	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
+ 	      else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum;
+@@ -749,12 +751,12 @@
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
+ 	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+-	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+-	      else if (strcmp(name,"Index")==0) return IndexEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Indexed")==0) return IndexedEnum;
++	      if (strcmp(name,"Gset")==0) return GsetEnum;
++	      else if (strcmp(name,"Index")==0) return IndexEnum;
++	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
+ 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+ 	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
+ 	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
++	      if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
++	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+ 	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+-	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+-	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
++	      if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
++	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
++	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22199)
+@@ -152,6 +152,7 @@
+ 		case 4: return CalvingMinthicknessEnum;
+ 		case 5: return CalvingHabEnum;
+ 		case 6: return CalvingCrevasseDepthEnum;
++		case 7: return CalvingDev2Enum;
+ 		default: _error_("Marshalled Calving law code \""<<enum_in<<"\" not supported yet");
+ 	}
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22198)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22199)
+@@ -2352,6 +2352,7 @@
+ 					this->CalvingRateLevermann();
+ 					break;
+ 				case CalvingVonmisesEnum:
++				case CalvingDev2Enum:
+ 					this->CalvingRateVonmises();
+ 					break;
+ 				case CalvingCrevasseDepthEnum:
+Index: ../trunk-jpl/src/m/classes/calvingdev2.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingdev2.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingdev2.m	(revision 22199)
+@@ -0,0 +1,65 @@
++%CALVINGDEV2 class definition
++%
++%   Usage:
++%      calvingdev2=calvingdev2();
++
++classdef calvingdev2
++	properties (SetAccess=public) 
++		stress_threshold_groundedice = 0.;
++		stress_threshold_floatingice = 0.;
++		height_above_floatation = 0.;
++	end
++	methods
++		function self = calvingdev2(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('calvingdev2');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							self.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			%extrude here
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%Default sigma max
++			self.stress_threshold_groundedice = 1e6;
++			self.stress_threshold_floatingice = 150e3;
++			self.height_above_floatation= 0;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++			%Early return
++			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
++
++			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.height_above_floatation','<=',0,'singletimeseries',1);
++
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   Calving VonMises parameters:'));
++			fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]');
++			fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]');
++			fielddisplay(self,'height_above_floatation','height above floatation that the ice tongue must reach before it can calve [m]');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++			yts=md.constants.yts;
++			WriteData(fid,prefix,'name','md.calving.law','data',7,'format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','height_above_floatation', 'format','Double');
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22199-22200.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22199-22200.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22199-22200.diff	(revision 22755)
@@ -0,0 +1,242 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22199)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22200)
+@@ -377,6 +377,7 @@
+ 	TransientIsslrEnum,
+ 	TransientNumRequestedOutputsEnum,
+ 	TransientRequestedOutputsEnum,
++	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessApparentMassbalanceEnum,
+ 	BalancethicknessDiffusionCoefficientEnum,
+ 	BalancethicknessOmegaEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22199)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22200)
+@@ -383,6 +383,7 @@
+ 		case TransientIsslrEnum : return "TransientIsslr";
+ 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+ 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
++		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance";
+ 		case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient";
+ 		case BalancethicknessOmegaEnum : return "BalancethicknessOmega";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22199)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22200)
+@@ -392,6 +392,7 @@
+ 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
++	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
+ 	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+-	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
++	      if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
++	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+ 	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+ 	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+ 	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
+-	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
++	      if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
++	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+ 	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
+ 	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+ 	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
+-	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Gset")==0) return GsetEnum;
++	      if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
++	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Index")==0) return IndexEnum;
+ 	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
+ 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+ 	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
+-	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
++	      if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
++	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+-	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
++	      if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
++	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+ 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+ 	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 22199)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 22200)
+@@ -17,19 +17,21 @@
+ 
+ void InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name, int type){
+ 
+-	int i;
+-
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<femmodel->elements->Size();i++){
++	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<femmodel->loads->Size();i++){
++	for(int i=0;i<femmodel->loads->Size();i++){
+ 		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<femmodel->materials->Size();i++){
++	for(int i=0;i<femmodel->materials->Size();i++){
+ 		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
++	for(int i=0;i<femmodel->constraints->Size();i++){
++		Constraint* constraint=(Constraint*)femmodel->constraints->GetObjectByOffset(i);
++		constraint->InputUpdateFromVectorDakota(vector,femmodel->nodes,name,type);
++	}
+ }
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 22200)
+@@ -37,9 +37,10 @@
+ 		/*}}}*/
+ 		/*Constraint virtual functions definitions: {{{*/
+ 		void ActivatePenaltyMethod(void);
+-		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
+-		bool   InAnalysis(int analysis_type);
+-		void   PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters){_error_("not implemented yet");};
++		void ConstrainNode(Nodes* nodes,Parameters* parameters);
++		bool InAnalysis(int analysis_type);
++		void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters){_error_("not implemented yet");};
++		void InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type);
+ 		/*}}}*/
+ 		/*SpcStatic management:{{{ */
+ 		int    GetDof();
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 22200)
+@@ -42,6 +42,7 @@
+ 		void   ConstrainNode(Nodes* nodes,Parameters* parameters);
+ 		bool   InAnalysis(int analysis_type);
+ 		void   PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters);
++		void InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type){_error_("not implemented yet");};
+ 		/*}}}*/
+ 		/*SpcTransient management:{{{ */
+ 		int        GetDof();
+Index: ../trunk-jpl/src/c/classes/Constraints/Constraint.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 22200)
+@@ -23,6 +23,7 @@
+ 		virtual void ConstrainNode(Nodes* nodes,Parameters* parameters)=0;
+ 		virtual bool InAnalysis(int analysis_type)=0;
+ 		virtual void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters)=0;
++		virtual void InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type) = 0;
+ 
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 22200)
+@@ -41,6 +41,7 @@
+ 		void ConstrainNode(Nodes* nodes,Parameters* parameters);
+ 		bool InAnalysis(int analysis_type);
+ 		void PenaltyDofAndValue(int* dof,IssmDouble* value,Nodes* nodes,Parameters* parameters){_error_("not implemented yet");};
++		void InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type){_error_("not implemented yet");};
+ 
+ 		/*SpcDynamic management*/
+ 		int        GetDof();
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22200)
+@@ -99,10 +99,8 @@
+ /*}}}*/
+ void SpcStatic::ConstrainNode(Nodes* nodes,Parameters* parameters){/*{{{*/
+ 
+-	Node* node=NULL;
+-
+ 	/*Chase through nodes and find the node to which this SpcStatic applys: */
+-	node=(Node*)nodes->GetObjectById(NULL,nodeid);
++	Node* node=(Node*)nodes->GetObjectById(NULL,nodeid);
+ 
+ 	/*Apply constraint: */
+ 	if(node){ //in case the spc is dealing with a node on another cpu
+@@ -115,7 +113,20 @@
+ 	else return false;
+ }
+ /*}}}*/
++void SpcStatic::InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type){/*{{{*/
+ 
++	/*Chase through nodes and find the node to which this SpcStatic applys: */
++	Node* node=(Node*)nodes->GetObjectById(NULL,nodeid);
++
++	/*Apply constraint: */
++	if(node){ //in case the spc is dealing with a node on another cpu
++		int sid = node->Sid();
++		this->value = vector[sid];
++		_assert_(!xIsNan<IssmDouble>(this->value)); 
++	}
++}
++/*}}}*/
++
+ /*SpcStatic functions*/
+ int        SpcStatic::GetDof(){/*{{{*/
+ 	return dof;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22199)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22200)
+@@ -1791,7 +1791,8 @@
+ 				name==DeviatoricStresszzEnum ||
+ 				name==DeviatoricStresseffectiveEnum ||
+ 				name==VxAverageEnum ||
+-				name==VyAverageEnum
++				name==VyAverageEnum ||
++				name==BalancethicknessSpcthicknessEnum
+ 
+ 				) {
+ 					return true;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22200-22201.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22200-22201.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22200-22201.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22200)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22201)
+@@ -112,6 +112,26 @@
+ 		param_enum        = FrictionCoefficientEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
++	else if(strcmp(string_in,"Vx")==0){
++		 const char* field = "md.initialization.vx";
++		 param_enum        = VxEnum;
++		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	 }
++	else if(strcmp(string_in,"Vy")==0){
++		 const char* field = "md.initialization.vy";
++		 param_enum        = VyEnum;
++		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	 }
++	else if(strcmp(string_in,"BalancethicknessThickeningRate")==0){
++		 const char* field = "md.balancethickness.thickening_rate";
++		 param_enum        = BalancethicknessThickeningRateEnum;
++		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"BalancethicknessSpcthickness")==0){
++		 const char* field = "md.balancethickness.spcthickness";
++		 param_enum        = BalancethicknessSpcthicknessEnum;
++		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
+ 	else{
+ 		_error_("Field \""<<string_in<<"\" not supported yet");
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22201-22202.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22201-22202.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22201-22202.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22201)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22202)
+@@ -1791,9 +1791,7 @@
+ 				name==DeviatoricStresszzEnum ||
+ 				name==DeviatoricStresseffectiveEnum ||
+ 				name==VxAverageEnum ||
+-				name==VyAverageEnum ||
+-				name==BalancethicknessSpcthicknessEnum
+-
++				name==VyAverageEnum
+ 				) {
+ 					return true;
+ 				}
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22201)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22202)
+@@ -115,6 +115,9 @@
+ /*}}}*/
+ void SpcStatic::InputUpdateFromVectorDakota(IssmDouble* vector,Nodes* nodes,int name,int type){/*{{{*/
+ 
++	/*Only update if this is a constraint parameter*/
++	if(name != BalancethicknessSpcthicknessEnum) return;
++
+ 	/*Chase through nodes and find the node to which this SpcStatic applys: */
+ 	Node* node=(Node*)nodes->GetObjectById(NULL,nodeid);
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22202-22203.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22202-22203.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22202-22203.diff	(revision 22755)
@@ -0,0 +1,212 @@
+Index: ../trunk-jpl/src/m/classes/clusters/stallo.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/stallo.py	(revision 22202)
++++ ../trunk-jpl/src/m/classes/clusters/stallo.py	(revision 22203)
+@@ -111,7 +111,7 @@
+ 		fid.write('#SBATCH --job-name=%s \n' % shortname)
+ 		fid.write('#SBATCH --partition %s \n' % self.queue)
+ 		fid.write('#SBATCH --nodes=%i' % self.numnodes)
+-		fid.write('#SBATCH --ntasks-per-nodes==%i' % self.cpuspernode)									
++		fid.write('#SBATCH --ntasks-per-nodes==%i \n' % self.cpuspernode)									
+ 		fid.write('#SBATCH --time=%s\n' % self.time) #walltime is minutes
+ 		fid.write('#SBATCH --mem-per-cpu=%iGB\n' % self.mem)# mem is in GB
+ 		if (np.mod(self.np,16)+np.mod(self.np,20))==0:
+@@ -121,16 +121,25 @@
+ 		fid.write('#SBATCH --error %s/%s/%s.errlog \n\n' % (self.executionpath,dirname,modelname))
+ 
+ 		fid.write('export ISSM_DIR="%s/../"\n' % self.codepath)
++		fid.write('module purge\n')
+ 		fid.write('module load Automake/1.15-intel-2016a\n')
+ 		fid.write('module load libtool/2.4.6-intel-2016a\n')
+ 		fid.write('module load CMake/3.5.2-intel-2016a\n')
+-		fid.write('module load intel/2016a\n')
+-		fid.write('module load ParMETIS/4.0.3-intel-2016a\n')
+ 		fid.write('module load MUMPS/5.1.1-intel-2016a-parmetis\n')
+ 		fid.write('module load PETSc/3.7.2-intel-2016a-Python-2.7.11\n')
+ 		fid.write('module load FFTW/3.3.4-intel-2016a\n')
+ 		fid.write('module load OpenSSL/1.0.1s-intel-2016a\n')
+ 
++		# fid.write('module load Automake/1.15-intel-2016a\n')
++		# fid.write('module load libtool/2.4.6-intel-2016a\n')
++		# fid.write('module load CMake/3.5.2-intel-2016a\n')
++		# fid.write('module load intel/2016a\n')
++		# fid.write('module load ParMETIS/4.0.3-intel-2016a\n')
++		# fid.write('module load MUMPS/5.1.1-intel-2016a-parmetis\n')
++		# fid.write('module load PETSc/3.7.2-intel-2016a-Python-2.7.11\n')
++		# fid.write('module load FFTW/3.3.4-intel-2016a\n')
++		# fid.write('module load OpenSSL/1.0.1s-intel-2016a\n')
++
+ 		fid.write('cd %s/%s/\n\n' % (self.executionpath,dirname))
+ 		if self.profiling==1:
+ 			fid.write('module load perf-report\n')
+Index: ../trunk-jpl/src/m/classes/clusters/fram.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/fram.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/clusters/fram.py	(revision 22203)
+@@ -0,0 +1,166 @@
++import subprocess
++import numpy as np
++from fielddisplay import fielddisplay
++from pairoptions import pairoptions
++from issmssh import issmssh
++from issmscpin import issmscpin
++from issmscpout import issmscpout
++from QueueRequirements import QueueRequirements
++import datetime
++try:
++	from fram_settings import fram_settings
++except ImportError:
++	print 'You need fram_settings.py to proceed, check presence and sys.path'
++	
++class fram(object):
++	"""
++	Fram cluster class definition
++	This is a SLURM queue
++	The priorities are based on a point system, reservation when reaching 20000 and earning 1 point per min.
++	  -Devel queue starts at 19990
++	  -Normal starts at 19940
++	  -Normal unpri atarts at 19400
++
++	Jobs can be:
++	  -normal (4 to 30 nodes, more if asked, 48h max walltime, 60Gb per nodes)
++	  -bigmem for big memory nodes (8 512Gb nodes and 2 6Tb nodes, shared nodes, 14days max walltime
++
++	   Usage:
++	      cluster=stallo();
++	"""
++
++	def __init__(self,*args):
++	# {{{
++		self.name           = 'fram'
++		self.login          = ''
++		self.numnodes       = 2
++		self.cpuspernode    = 20
++		self.mem            = 1.6
++		self.queue          = 'normal'
++		self.time           = 2*60
++		self.codepath       = ''
++		self.executionpath  = ''
++		self.interactive    = 0
++		self.port           = []
++		self.accountname    = ''
++		self.profiling      = 0
++		#use provided options to change fields
++		options=pairoptions(*args)
++
++		#initialize cluster using user settings if provided
++		self=stallo_settings(self)
++		#OK get other fields
++		self=options.AssignObjectFields(self)
++		self.np=self.numnodes*self.cpuspernode		
++	# }}}
++	
++	def __repr__(self):
++	# {{{
++		#  display the object
++		s = "class vilje object:"
++		s = "%s\n%s"%(s,fielddisplay(self,'name','name of the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'login','login'))
++		s = "%s\n%s"%(s,fielddisplay(self,'numnodes','number of nodes'))
++		s = "%s\n%s"%(s,fielddisplay(self,'cpuspernode','number of nodes per CPUs'))
++		s = "%s\n%s"%(s,fielddisplay(self,'mem','memory per CPU'))
++		s = "%s\n%s"%(s,fielddisplay(self,'queue','name of the queue (normal (D), short,singlenode,multinode,devel)'))
++		s = "%s\n%s"%(s,fielddisplay(self,'time','walltime requested in minutes'))
++		s = "%s\n%s"%(s,fielddisplay(self,'codepath','code path on the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'executionpath','execution path on the cluster'))
++		s = "%s\n%s"%(s,fielddisplay(self,'interactive',''))
++		s = "%s\n%s"%(s,fielddisplay(self,'accountname','your cluster account'))
++		s = "%s\n%s"%(s,fielddisplay(self,'profiling','enable profiling if 1 default is 0'))
++		return s
++	# }}}
++	def checkconsistency(self,md,solution,analyses):
++	# {{{
++		#Queue dictionarry  gives queue name as key and max walltime and cpus as var
++		queuedict = {'normal':[2*24*60,2048],
++								 'devel':[4*60,2048]}
++		QueueRequirements(queuedict,self.queue,self.np,self.time)
++
++		#Miscelaneous
++		if not self.login:
++			md = md.checkmessage('login empty')
++		if not self.codepath:
++			md = md.checkmessage('codepath empty')
++		if not self.executionpath:
++			md = md.checkmessage('executionpath empty')
++		if self.interactive==1:
++			md = md.checkmessage('interactive mode not implemented')
++		return self
++		# }}}
++	def BuildQueueScript(self,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota,isoceancoupling):
++		# {{{
++
++		executable='issm.exe'
++		if isdakota:
++			version=IssmConfig('_DAKOTA_VERSION_')[0:2]
++			version=float(version)
++			if version>=6:
++				executable='issm_dakota.exe'
++		if isoceancoupling:
++			executable='issm_ocean.exe'
++		#write queuing script 
++		shortname=modelname[0:min(12,len(modelname))]
++		fid=open(modelname+'.queue','w')
++									
++		fid.write('#!/bin/bash -l\n')
++		fid.write('#SBATCH --job-name=%s \n' % shortname)
++		fid.write('#SBATCH --partition %s \n' % self.queue)
++		fid.write('#SBATCH --nodes=%i' % self.numnodes)
++		fid.write('#SBATCH --ntasks-per-nodes==%i \n' % self.cpuspernode)									
++		fid.write('#SBATCH --time=%s\n' % self.time) #walltime is minutes
++		fid.write('#SBATCH --mem-per-cpu=%iGB\n' % self.mem)# mem is in GB
++		if (np.mod(self.np,16)+np.mod(self.np,20))==0:
++			fid.write('#SBATCH --ntask=%i\n' % self.np)
++		fid.write('#SBATCH --account=%s\n' % self.accountname) 
++		fid.write('#SBATCH --output %s/%s/%s.outlog \n' % (self.executionpath,dirname,modelname))
++		fid.write('#SBATCH --error %s/%s/%s.errlog \n\n' % (self.executionpath,dirname,modelname))
++
++		fid.write('export ISSM_DIR="%s/../"\n' % self.codepath)
++		fid.write('module restore system\n')
++		fid.write('module load load Automake/1.15.1-GCCcore-6.3.0\n')
++		fid.write('module load libtool/2.4.6-GCCcore-6.3.0\n')
++		fid.write('module load CMake/3.9.1\n')
++		fid.write('module load PETSc/3.8.0-intel-2017a-Python-2.7.13\n')
++		fid.write('module load ParMETIS/4.0.3-intel-2017a\n')
++		fid.write('cd %s/%s/\n\n' % (self.executionpath,dirname))
++		if self.profiling==1:
++			fid.write('module load perf-report\n')
++			fid.write('perf-report mpirun -np %i %s/%s %s %s/%s %s\n' % (self.np,self.codepath,executable,str(solution),self.executionpath,dirname,modelname))
++		else:
++			fid.write('mpirun -np %i %s/%s %s %s/%s %s\n' % (self.np,self.codepath,executable,str(solution),self.executionpath,dirname,modelname))
++		fid.close()
++
++		# }}}
++	def UploadQueueJob(self,modelname,dirname,filelist):
++		# {{{
++		#compress the files into one zip.
++		compressstring='tar -zcf %s.tar.gz ' % dirname
++		for file in filelist:
++			compressstring += ' %s' % file
++		subprocess.call(compressstring,shell=True)
++
++		print 'uploading input file and queueing script'
++		issmscpout(self.name,self.executionpath,self.login,self.port,[dirname+'.tar.gz'])
++
++		# }}}
++	def LaunchQueueJob(self,modelname,dirname,filelist,restart,batch):
++		# {{{
++
++		print 'launching solution sequence on remote cluster'
++		if restart:
++			launchcommand='cd %s && cd %s && sbatch %s.queue' % (self.executionpath,dirname,modelname)
++		else:
++			launchcommand='cd %s && rm -rf ./%s && mkdir %s && cd %s && mv ../%s.tar.gz ./ && tar -zxf %s.tar.gz  && sbatch %s.queue' % (self.executionpath,dirname,dirname,dirname,dirname,dirname,modelname)
++		issmssh(self.name,self.login,self.port,launchcommand)
++
++		# }}}
++	def Download(self,dirname,filelist):
++		# {{{
++
++		#copy files from cluster to current directory
++		directory='%s/%s/' % (self.executionpath,dirname)
++		issmscpin(self.name,self.login,self.port,directory,filelist)
++		# }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22203-22204.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22203-22204.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22203-22204.diff	(revision 22755)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 22203)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 22204)
+@@ -43,17 +43,16 @@
+ 	if options.exist('scale'):
+ 		data=np.array(data)
+ 		scale = options.getfieldvalue('scale')
+-		if np.size(data) > 1 :
+-			if np.size(data,0)==timeserieslength:
+-				data[0:-1,:] = scale*data[0:-1,:]
+-			else:
+-				data  = scale*data
++		if np.size(data) > 1 and np.ndim(data) > 1 and np.size(data,0)==timeserieslength:
++			data[0:-1,:] = scale*data[0:-1,:]
+ 		else:
+ 			data  = scale*data
+-	if np.size(data) > 1 :
+-		if np.size(data,0)==timeserieslength:
+-			yts = options.getfieldvalue('yts')
+-			data[-1,:] = yts*data[-1,:]
++	if np.size(data) > 1 and np.size(data,0)==timeserieslength:
++		yts = options.getfieldvalue('yts')
++		if np.ndim(data) > 1:
++			data[-1,:] = data[-1,:]*yts
++		else:
++			data[-1] = data[-1]*yts
+ 
+ 	#Step 1: write the enum to identify this record uniquely
+ 	fid.write(struct.pack('i',len(name)))
+Index: ../trunk-jpl/src/m/classes/frictionwaterlayer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictionwaterlayer.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/frictionwaterlayer.py	(revision 22204)
+@@ -0,0 +1,67 @@
++import numpy as np
++from project3d import project3d
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++
++class frictionwaterlayer(object):
++	"""
++	frictionwaterlayer class definition
++
++	Usage:
++		friction=frictionwaterlayer(md);
++	"""
++	def __init__(self,md): # {{{
++		self.coefficient  		  	= md.friction.coefficient
++		self.f    				= float('NaN')
++		self.p    				= md.friction.p
++		self.q    				= md.friction.q
++		self.water_layer    			= float('NaN')
++	#}}}
++		
++	def checkconsistency(self,md,solution,analyses): #{{{ 
++		#Early return
++		if ('StressbalanceAnalysis' not in analyses) and ('ThermalAnalysis' not in analyses):
++			return
++
++		md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','friction.f','size',[1,1],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
++		md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
++		md = checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1,'>=',0.)
++	# }}}
++
++	def extrude(self,md): # {{{
++		self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1)
++		self.p=project3d(md,'vector',self.p,'type','element')
++		self.q=project3d(md,'vector',self.q,'type','element')
++		self.water_layer=project3d(md,'vector',self.water_layer,'type','node','layer',1)
++		return self	
++	 # }}} 
++
++
++	def __repr__(self): # {{{
++		string='Basal shear stress parameters: tau_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b * 1/f(T)\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*(bed+water_layer), r=q/p and s=1/p)'
++		string="%s\n%s"%(string,fielddisplay(self,'coefficient','frictiontemp coefficient [SI]'))
++		string="%s\n%s"%(string,fielddisplay(self,'f','f variable for effective pressure'))
++		string="%s\n%s"%(string,fielddisplay(self,'p','p exponent'))
++		string="%s\n%s"%(string,fielddisplay(self,'q','q exponent'))
++		string="%s\n%s"%(string,fielddisplay(self,'water_layer','water thickness at the base of the ice (m)'))
++
++		return string
++	#}}}
++
++
++	def marshall(self,prefix,md,fid): #{{{
++		yts=md.constants.yts
++		
++		WriteData(fid,prefix,'name','md.friction.law','data',5,'format','Integer')
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','f','format','Double')
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'class','friction','object',self,'fieldname','water_layer','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++	#}}}
++
++
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 22203)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 22204)
+@@ -64,6 +64,7 @@
+ 					${ISSM_DIR}/src/m/mech/*.py \
+ 					${ISSM_DIR}/src/m/mesh/*.py \
+ 					${ISSM_DIR}/src/m/mesh/rifts/*.py \
++					${ISSM_DIR}/src/m/mesh/planet/gmsh/*.py \
+ 					${ISSM_DIR}/src/m/miscellaneous/*.py \
+ 					${ISSM_DIR}/src/m/modules/*.py \
+ 					${ISSM_DIR}/src/m/os/*.py \
Index: /issm/oecreview/Archive/21724-22754/ISSM-22210-22211.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22210-22211.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22210-22211.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22210)
++++ ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22211)
+@@ -557,7 +557,7 @@
+       q += gauss->weight*Jdet*(conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1]));
+ 
+ 		/* Compute "degree of channelization" (ratio of melt opening to opening by sliding) */
+-		channelization += gauss->weight*Jdet*(meltrate/rho_ice/(beta*sqrt(vx*vx+vy*vy)));
++		channelization += gauss->weight*Jdet*(meltrate/rho_ice/(meltrate/rho_ice+beta*sqrt(vx*vx+vy*vy)));
+ 	}
+ 
+ 	/*Divide by connectivity*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22211-22212.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22211-22212.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22211-22212.diff	(revision 22755)
@@ -0,0 +1,156 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 22211)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 22212)
+@@ -4,6 +4,10 @@
+ %   Available options (for more details see ISSM website http://issm.jpl.nasa.gov/):
+ %
+ %   - domain :            followed by an ARGUS file that prescribes the domain outline
++%   - holes :             followed by an ARGUS file that prescribes the holes
++%   - subdomains :        followed by an ARGUS file that prescribes the list of
++%                         subdomains (that need to be inside domain)
++%
+ %   - hmin :              minimum edge length (default is 10^-100)
+ %   - hmax :              maximum edge length (default is 10^100)
+ %   - hVertices :         imposed edge length for each vertex (geometry or mesh)
+@@ -58,6 +62,7 @@
+ bamg_mesh=bamgmesh();
+ 
+ subdomain_ref = 1;
++hole_ref = 1;
+ % Bamg Geometry parameters {{{
+ if exist(options,'domain'),
+ 
+@@ -81,6 +86,49 @@
+ 		error('''domain'' type not supported yet');
+ 	end
+ 
++	holes = [];
++	if exist(options,'holes'),
++		holesfile=getfieldvalue(options,'holes');
++		if ischar(holesfile),
++			if ~exist(holesfile,'file') error(['bamg error message: file ' holesfile ' not found']); end
++
++			%read holes according to its extension: 
++			[path,name,ext]=fileparts(holesfile);
++			if strcmp(ext,'.exp'),
++				holes=expread(holesfile);
++			elseif strcmp(ext,'.shp'),
++				holes=shpread(holesfile);
++			else
++				error(['bamg error message: file ' holesfile ' format not supported (.shp or .exp)']);
++			end
++		elseif isstruct(holesfile),
++			holes = holesfile;
++		else
++			error('''holes'' type not supported yet');
++		end
++	end
++	subdomains = [];
++	if exist(options,'subdomains'),
++		subdomainsfile=getfieldvalue(options,'subdomains');
++		if ischar(subdomainsfile),
++			if ~exist(subdomainsfile,'file') error(['bamg error message: file ' subdomainsfile ' not found']); end
++
++			%read subdomains according to its extension: 
++			[path,name,ext]=fileparts(subdomainsfile);
++			if strcmp(ext,'.exp'),
++				subdomains=expread(subdomainsfile);
++			elseif strcmp(ext,'.shp'),
++				subdomains=shpread(subdomainsfile);
++			else
++				error(['bamg error message: file ' subdomainsfile ' format not supported (.shp or .exp)']);
++			end
++		elseif isstruct(subdomainsfile),
++			subdomains = subdomainsfile;
++		else
++			error('''subdomains'' type not supported yet');
++		end
++	end
++
+ 	%Build geometry 
+ 	count=0;
+ 	for i=1:length(domain),
+@@ -98,15 +146,80 @@
+ 			end
+ 		end
+ 
++		%Check orientation
++		nods=domain(i).nods-1; %the domain are closed 1=end;
++		test = sum([(domain(i).x(2:nods+1) - domain(i).x(1:nods)).*(domain(i).y(2:nods+1) + domain(i).y(1:nods))]);
++		if (i==1 && test>0) || (i>1 && test<0),
++			disp('At least one contour was not correctly oriented and has been re-oriented');
++			domain(i).x = flipud(domain(i).x); domain(i).y = flipud(domain(i).y);
++		end
++
+ 		%Add all points to bamg_geometry
+-		nods=domain(i).nods-1; %the domain are closed 1=end;
+ 		bamg_geometry.Vertices=[bamg_geometry.Vertices; [domain(i).x(1:nods) domain(i).y(1:nods) ones(nods,1)]];
++		bamg_geometry.Edges   =[bamg_geometry.Edges;    [transpose(count+1:count+nods) transpose([count+2:count+nods count+1])  1*ones(nods,1)]];
++		if i>1,
++			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 -subdomain_ref]; subdomain_ref = subdomain_ref+1;
++		else
++			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 0];
++		end
++
++		%update counter
++		count=count+nods;
++	end
++	for i=1:length(holes),
++
++		%Check that the subdomains is closed
++		if (holes(i).x(1)~=holes(i).x(end) | holes(i).y(1)~=holes(i).y(end)),
++			error('bamg error message: all contours provided in ''holes'' should be closed');
++		end
++
++		%Checks that all holes are INSIDE the principle domain outline
++		flags=ContourToNodes(holes(i).x,holes(i).y,domain(1),0);
++		if any(~flags), error('bamg error message: All holes should be strictly inside the principal domain'); end
++
++		%Check that hole is correctly oriented
++		nods=holes(i).nods-1; %the holes are closed 1=end;
++		if(sum([(holes(i).x(2:nods+1) - holes(i).x(1:nods)).*(holes(i).y(2:nods+1) + holes(i).y(1:nods))]))<0
++			disp('At least one hole was not correctly oriented and has been re-oriented');
++			holes(i).x = flipud(holes(i).x); holes(i).y = flipud(holes(i).y);
++		end
++
++		%Add all points to bamg_geometry
++		bamg_geometry.Vertices=[bamg_geometry.Vertices; [holes(i).x(1:nods) holes(i).y(1:nods) ones(nods,1)]];
+ 		bamg_geometry.Edges   =[bamg_geometry.Edges;    [transpose(count+1:count+nods) transpose([count+2:count+nods count+1])  1.*ones(nods,1)]];
+-		if i>1, bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 subdomain_ref]; subdomain_ref = subdomain_ref+1; end
++		bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 -hole_ref]; hole_ref = hole_ref+1;
+ 
+ 		%update counter
+ 		count=count+nods;
+ 	end
++	for i=1:length(subdomains),
++
++		%Check that the subdomains is closed
++		if (subdomains(i).x(1)~=subdomains(i).x(end) | subdomains(i).y(1)~=subdomains(i).y(end)),
++			error('bamg error message: all contours provided in ''subdomains'' should be closed');
++		end
++
++		%Checks that all holes are INSIDE the principle domain outline
++		flags=ContourToNodes(subdomains(i).x,subdomains(i).y,domain(1),0);
++		if any(~flags),
++			error('bamg error message: All holes should be strictly inside the principal domain');
++		end
++
++		%Check that hole is correctly oriented
++		nods=subdomains(i).nods-1; %the subdomains are closed 1=end;
++		if(sum([(subdomains(i).x(2:nods+1) - subdomains(i).x(1:nods)).*(subdomains(i).y(2:nods+1) + subdomains(i).y(1:nods))]))>0
++			disp('At least one subdomain was not correctly oriented and has been re-oriented');
++			subdomains(i).x = flipud(subdomains(i).x); subdomains(i).y = flipud(subdomains(i).y);
++		end
++
++		%Add all points to bamg_geometry
++		bamg_geometry.Vertices=[bamg_geometry.Vertices; [subdomains(i).x(1:nods) subdomains(i).y(1:nods) ones(nods,1)]];
++		bamg_geometry.Edges   =[bamg_geometry.Edges;    [transpose(count+1:count+nods) transpose([count+2:count+nods count+1])  1.*ones(nods,1)]];
++		bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 subdomain_ref]; subdomain_ref = subdomain_ref+1;
++
++		%update counter
++		count=count+nods;
++	end
+ 	if getfieldvalue(options,'vertical',0),
+ 		if numel(getfieldvalue(options,'Markers',[]))~=size(bamg_geometry.Edges,1),
+ 			error(['for 2d vertical mesh, ''Markers'' option is required, and should be of size ' num2str(size(bamg_geometry.Edges,1))]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22212-22213.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22212-22213.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22212-22213.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22212)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22213)
+@@ -1133,7 +1133,7 @@
+ 		}
+ 
+ 	}/*}}}*/
+-	void  Mesh::BoundAnisotropy(double anisomax,double hminaniso) {/*{{{*/
++	void Mesh::BoundAnisotropy(double anisomax,double hminaniso) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/BoundAnisotropy)*/
+ 
+ 		long int verbose=0;
+@@ -2334,23 +2334,23 @@
+ 	void Mesh::FindSubDomain(int OutSide) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindSubDomain)*/
+ 
+-		long int verbose=0;
++		int verbose=0;
+ 
+ 		if (verbose >2){
+ 			if (OutSide) _printf_("   Find all external sub-domain\n"); 
+ 			else _printf_("   Find all internal sub-domain\n");
+-		  }
++		}
+ 		short * HeapArete = new short[nbt];
+ 		Triangle  **  HeapTriangle = new Triangle*  [nbt];
+ 		Triangle *t,*t1;
+ 		long k,it;
+ 
+-		for (int itt=0;itt<nbt;itt++) 
+-		 triangles[itt].link=0; // par defaut pas de couleur
++		/*No color by default*/
++		for(int itt=0;itt<nbt;itt++) triangles[itt].link=0;
+ 
+ 		long  NbSubDomTot =0;
+-		for ( it=0;it<nbt;it++)  { 
+-			if ( ! triangles[it].link  ) {
++		for(it=0;it<nbt;it++)  { 
++			if( !triangles[it].link ){
+ 				t = triangles + it;
+ 				NbSubDomTot++;; // new composante connexe
+ 				long i = 0; // niveau de la pile 
+@@ -2359,8 +2359,8 @@
+ 				HeapTriangle[i] =t ; 
+ 				HeapArete[i] = 3;
+ 
+-				while (i >= 0) // boucle sur la pile
+-				  { while ( HeapArete[i]--) // boucle sur les 3 aretes 
++				while(i >= 0) // boucle sur la pile
++				  { while (HeapArete[i]--) // boucle sur les 3 aretes 
+ 					  { 
+ 						int na =  HeapArete[i];
+ 						Triangle * tc =  HeapTriangle[i]; // triangle courant
+@@ -2444,11 +2444,10 @@
+ 							delete [] mark;
+ 							_error_("k!=nbsubdomains");
+ 						}
+-						if(OutSide) 
+-						  {
++						if(OutSide){
+ 							//  to remove all the sub domain by parity adjacents
+ 							//  because in this case we have only the true boundary edge
+-							// so teh boundary is manifold
++							//  so the boundary is manifold
+ 							long nbk = nbsubdomains;
+ 							while (nbk)
+ 							 for (it=0;it<nbt && nbk ;it++)
+@@ -3083,7 +3082,7 @@
+ 					AdjacentTriangle tadjj = t->Adj(j);	  
+ 					Triangle* ta=tadjj;
+ 
+-					//if the adjacent triangle is a boundary triangle, continur
++					//if the adjacent triangle is a boundary triangle, continue
+ 					if (ta->det<0) continue;	  
+ 
+ 					R2 A=vA;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22213-22214.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22213-22214.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22213-22214.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 22213)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 22214)
+@@ -160,7 +160,7 @@
+ 		if i>1,
+ 			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 -subdomain_ref]; subdomain_ref = subdomain_ref+1;
+ 		else
+-			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 0];
++			%bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 0];
+ 		end
+ 
+ 		%update counter
Index: /issm/oecreview/Archive/21724-22754/ISSM-22214-22215.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22214-22215.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22214-22215.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 22214)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 22215)
+@@ -46,4 +46,4 @@
+ %Fields and tolerances to track changes
+ field_names      = {'x1' ,'y1' ,'x2' ,'y2' ,'x3' ,'y3' ,'x4' ,'y4' ,'x5' ,'y5' ,'x6' ,'y6' ,'x7' ,'y7' };
+ field_tolerances = {2e-10,7e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values     = { x1  ,y1   ,y2   ,y2   ,y3   ,y3   ,y4   ,y4   ,y5   ,y5   ,y6   ,y6   ,y7   ,y7   };
++field_values     = { x1  ,y1   ,x2   ,y2   ,x3   ,y3   ,x4   ,y4   ,x5   ,y5   ,x6   ,y6   ,x7   ,y7   };
+Index: ../trunk-jpl/test/Archives/Archive514.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 22214)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 22215)
+@@ -160,7 +160,7 @@
+ 		if i>1,
+ 			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 -subdomain_ref]; subdomain_ref = subdomain_ref+1;
+ 		else
+-			%bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 0];
++			bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 0];
+ 		end
+ 
+ 		%update counter
Index: /issm/oecreview/Archive/21724-22754/ISSM-22215-22216.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22215-22216.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22215-22216.diff	(revision 22755)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/test/NightlyRun/test514.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.py	(revision 22215)
++++ ../trunk-jpl/test/NightlyRun/test514.py	(revision 22216)
+@@ -57,4 +57,4 @@
+ #Fields and tolerances to track changes
+ field_names     =['x1','y1','x2','y2','x3','y3','x4','y4','x5','y5','x6','y6','x7','y7']
+ field_tolerances = [2e-10,7e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+-field_values=[x1, y1,	y2, y2,	y3, y3,	y4, y4,	y5, y5,	y6, y6,	y7, y7]
++field_values=[x1, y1,x2, y2,	x3, y3,	x4, y4,	x5, y5,	x6, y6,	x7, y7]
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 22215)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 22216)
+@@ -71,6 +71,9 @@
+ 	bamg_geometry=bamggeom()
+ 	bamg_mesh=bamgmesh()
+ 
++        subdomain_ref = 1
++        hole_ref = 1
++
+ 	# Bamg Geometry parameters {{{
+ 	if options.exist('domain'):
+ 
+@@ -98,8 +101,11 @@
+ 			nods=domaini['nods']-1    #the domain are closed 0=end
+ 			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods],domaini['y'][0:nods],np.ones((nods)))).T))
+ 			bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
+-			if i:
+-				bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,1]))
++                        if i:
++                            bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,-subdomain_ref]))
++                            subdomain_ref = subdomain_ref+1;
++                        else:
++                            bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,0]))
+ 
+ 			# bamg_geometry.Vertices=np.hstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods].reshape(-1),domaini['y'][0:nods].reshape(-1),np.ones((nods))))))
+ 			# bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.hstack((np.arange(count+1,count+nods+1).reshape(-1,),np.hstack((np.arange(count+2,count+nods+1),count+1)).reshape(-1,),1.*np.ones((nods,))))))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22236-22237.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22236-22237.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22236-22237.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22236)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22237)
+@@ -1540,6 +1540,7 @@
+ 			  for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j];
+ 
+ 			  if     (N==this->GetNumberOfNodes(P1Enum)   ) this->AddInput(vector_enum,values,P1Enum);
++			  else if(N==this->GetNumberOfNodes(P0Enum)   ) this->AddInput(vector_enum,values,P0Enum);
+ 			  else if(N==this->GetNumberOfNodes(P1xP2Enum)) this->AddInput(vector_enum,values,P1xP2Enum);
+ 			  else if(N==this->GetNumberOfNodes(P1xP3Enum)) this->AddInput(vector_enum,values,P1xP3Enum);
+ 			  else _error_("Patch interpolation not supported yet");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22237-22238.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22237-22238.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22237-22238.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22237)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22238)
+@@ -1227,6 +1227,8 @@
+ 	IssmDouble re_bot;
+ 	IssmDouble gdn_bot;
+ 	IssmDouble gsp_bot;
++	IssmDouble EI_bot;
++	IssmDouble EW_bot;
+ 	bool        top=false;
+     
+ 	IssmDouble* Zcum=NULL;
+@@ -1650,6 +1652,8 @@
+ 		re_bot=re[n-1];
+ 		gdn_bot=gdn[n-1];
+ 		gsp_bot=gsp[n-1];
++		EI_bot=EI[n-1];
++		EW_bot=EW[n-1];
+         
+ 		dz_add=dz_bot;
+         
+@@ -1662,6 +1666,8 @@
+ 		newcell(&re,re_bot,top,n);
+ 		newcell(&gdn,gdn_bot,top,n);
+ 		newcell(&gsp,gsp_bot,top,n);
++		newcell(&EI,EI_bot,top,n);
++		newcell(&EW,EW_bot,top,n);
+ 		n=n+1;
+ 	}
+ 	else if (Ztot > zMax){
+@@ -1685,6 +1691,8 @@
+ 		celldelete(&re,n,D,D_size);
+ 		celldelete(&gdn,n,D,D_size);
+ 		celldelete(&gsp,n,D,D_size);
++		celldelete(&EI,n,D,D_size);
++		celldelete(&EW,n,D,D_size);
+ 		n=D_size;
+ 		xDelete<int>(D);
+         
Index: /issm/oecreview/Archive/21724-22754/ISSM-22238-22239.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22238-22239.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22238-22239.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22238)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22239)
+@@ -1592,8 +1592,6 @@
+     }
+     else if(vector_type==3){ //element vector
+         
+-        IssmDouble value;
+-        
+         /*For right now we are static */
+         if(M==iomodel->numberofelements){
+             /*create transient input: */
+@@ -2870,22 +2868,22 @@
+ 	this->AddInput(new DoubleInput(SmbM_addEnum,sumMassAdd/yts));
+ 
+ 	/*Free allocations:{{{*/
+-	xDelete<IssmDouble>(dz);
+-	xDelete<IssmDouble>(d);
+-	xDelete<IssmDouble>(re);
+-	xDelete<IssmDouble>(gdn);
+-	xDelete<IssmDouble>(gsp);
+-	xDelete<IssmDouble>(W);
+-	xDelete<IssmDouble>(a);
+-	xDelete<IssmDouble>(T);
+-	xDelete<IssmDouble>(dzini);
+-	xDelete<IssmDouble>(dini);
+-	xDelete<IssmDouble>(reini);
+-	xDelete<IssmDouble>(gdnini);
+-	xDelete<IssmDouble>(gspini);
+-	xDelete<IssmDouble>(Wini);
+-	xDelete<IssmDouble>(aini);
+-	xDelete<IssmDouble>(Tini);
++	if(dz) xDelete<IssmDouble>(dz);
++	if(d) xDelete<IssmDouble>(d);
++	if(re) xDelete<IssmDouble>(re);
++	if(gdn) xDelete<IssmDouble>(gdn);
++	if(gsp) xDelete<IssmDouble>(gsp);
++	if(W) xDelete<IssmDouble>(W);
++	if(a) xDelete<IssmDouble>(a);
++	if(T) xDelete<IssmDouble>(T);
++	if(dzini) xDelete<IssmDouble>(dzini);
++	if(dini) xDelete<IssmDouble>(dini);
++	if(reini) xDelete<IssmDouble>(reini);
++	if(gdnini) xDelete<IssmDouble>(gdnini);
++	if(gspini) xDelete<IssmDouble>(gspini);
++	if(Wini) xDelete<IssmDouble>(Wini);
++	if(aini) xDelete<IssmDouble>(aini);
++	if(Tini) xDelete<IssmDouble>(Tini);
+ 
+ 	delete gauss;
+ 	/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22239-22240.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22239-22240.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22239-22240.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 22239)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 22240)
+@@ -64,7 +64,7 @@
+ 		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+ 			 available_queues={'long','allnccs','debug'};
+-			 queue_requirements_time=[24*60*60 12*60*60 60];
++			 queue_requirements_time=[24*60*60 12*60*60 1*60*60];
+ 			 queue_requirements_np=[560 6000 532];
+ 
+ 			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22240-22241.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22240-22241.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22240-22241.diff	(revision 22755)
@@ -0,0 +1,1958 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22240)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22241)
+@@ -869,6 +869,7 @@
+ 	/*Adaptive mesh refinement (AMR){{{*/
+ 	TransientAmrFrequencyEnum,
+ 	AmrTypeEnum,
++	AmrRestartEnum,
+ 	AmrNeopzEnum,
+ 	AmrLevelMaxEnum,
+ 	AmrLagEnum,
+@@ -886,8 +887,10 @@
+ 	AmrIceFrontDistanceEnum,
+ 	AmrThicknessErrorResolutionEnum,
+ 	AmrThicknessErrorThresholdEnum,
++	AmrThicknessErrorMaximumEnum,
+ 	AmrDeviatoricErrorResolutionEnum,
+ 	AmrDeviatoricErrorThresholdEnum,
++	AmrDeviatoricErrorMaximumEnum,
+ 	DeviatoricStressErrorEstimatorEnum,
+ 	ThicknessErrorEstimatorEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22241)
+@@ -842,6 +842,7 @@
+ 		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
+ 		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
+ 		case AmrTypeEnum : return "AmrType";
++		case AmrRestartEnum : return "AmrRestart";
+ 		case AmrNeopzEnum : return "AmrNeopz";
+ 		case AmrLevelMaxEnum : return "AmrLevelMax";
+ 		case AmrLagEnum : return "AmrLag";
+@@ -859,8 +860,10 @@
+ 		case AmrIceFrontDistanceEnum : return "AmrIceFrontDistance";
+ 		case AmrThicknessErrorResolutionEnum : return "AmrThicknessErrorResolution";
+ 		case AmrThicknessErrorThresholdEnum : return "AmrThicknessErrorThreshold";
++		case AmrThicknessErrorMaximumEnum : return "AmrThicknessErrorMaximum";
+ 		case AmrDeviatoricErrorResolutionEnum : return "AmrDeviatoricErrorResolution";
+ 		case AmrDeviatoricErrorThresholdEnum : return "AmrDeviatoricErrorThreshold";
++		case AmrDeviatoricErrorMaximumEnum : return "AmrDeviatoricErrorMaximum";
+ 		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+ 		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+ 		case ParametersENDEnum : return "ParametersEND";
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22241)
+@@ -135,7 +135,10 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_maximum",AmrThicknessErrorMaximumEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_maximum",AmrDeviatoricErrorMaximumEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.restart",AmrRestartEnum));
+ 				break;
+ 			#endif
+ 
+@@ -152,8 +155,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_resolution",AmrThicknessErrorResolutionEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_maximum",AmrThicknessErrorMaximumEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_resolution",AmrDeviatoricErrorResolutionEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_maximum",AmrDeviatoricErrorMaximumEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.amr.restart",AmrRestartEnum));
+ 				/*Convert fieldname to enum and put it in params*/
+ 				iomodel->FindConstant(&fieldname,"md.amr.fieldname");
+ 				parameters->AddObject(new IntParam(AmrFieldEnum,StringToEnumx(fieldname)));
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 22240)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 22241)
+@@ -20,20 +20,20 @@
+ 		IssmDouble icefront_distance;
+ 		IssmDouble thicknesserror_resolution;
+ 		IssmDouble thicknesserror_threshold;
++		IssmDouble thicknesserror_maximum;
+ 		IssmDouble deviatoricerror_resolution;
+ 		IssmDouble deviatoricerror_threshold;
++		IssmDouble deviatoricerror_maximum;
+ 
+ 		/* Constructor, destructor etc*/
+-		AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,IssmDouble gradation_in,
+-            		IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
+-                  IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
+-                  IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
+-                  IssmDouble deviatoricerror_resolution_in,IssmDouble deviatoricerror_threshold_in);
++		AmrBamg();
++		
+ 		~AmrBamg();
+ 
+ 		/*General methods*/
+ 		void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
+ 		void ExecuteRefinementBamg(IssmDouble* field,IssmDouble* hmaxVertices,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
++		void SetBamgOpts(IssmDouble hmin_in,IssmDouble hmax_in,IssmDouble err_in,IssmDouble gradation_in);
+ 
+ 	private:
+ 		BamgGeom* geometry;
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22241)
+@@ -29,6 +29,7 @@
+ 	/*Copy all data*/
+ 	this->fathermesh						= new TPZGeoMesh(*cp.fathermesh);
+ 	this->previousmesh					= new TPZGeoMesh(*cp.previousmesh);
++	this->refinement_type				= cp.refinement_type;
+ 	this->level_max						= cp.level_max;
+ 	this->radius_level_max				= cp.radius_level_max;
+ 	this->gradation						= cp.gradation;
+@@ -37,6 +38,8 @@
+ 	this->icefront_distance				= cp.icefront_distance;
+ 	this->thicknesserror_threshold	= cp.thicknesserror_threshold;
+ 	this->deviatoricerror_threshold	= cp.deviatoricerror_threshold;
++	this->max_deviatoricerror			= cp.max_deviatoricerror;
++	this->max_thicknesserror			= cp.max_thicknesserror;
+ 	this->sid2index.clear();
+ 	this->sid2index.resize(cp.sid2index.size());
+ 	for(int i=0;i<cp.sid2index.size();i++) this->sid2index[i]=cp.sid2index[i];
+@@ -60,6 +63,7 @@
+ 	/*Verify and delete all data*/
+ 	if(this->fathermesh)    delete this->fathermesh;
+ 	if(this->previousmesh)  delete this->previousmesh;
++	this->refinement_type				= -1;
+ 	this->level_max						= -1;
+ 	this->radius_level_max				= -1;
+ 	this->gradation						= -1;
+@@ -68,6 +72,8 @@
+ 	this->icefront_distance				= -1;
+ 	this->thicknesserror_threshold	= -1;
+ 	this->deviatoricerror_threshold	= -1;
++	this->max_deviatoricerror			= -1;
++	this->max_thicknesserror			= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -78,6 +84,7 @@
+ 	/*Set pointers to NULL*/
+ 	this->fathermesh						= NULL;
+ 	this->previousmesh					= NULL;
++	this->refinement_type				= -1;
+ 	this->level_max						= -1;
+ 	this->radius_level_max				= -1;
+ 	this->gradation						= -1;
+@@ -86,6 +93,8 @@
+ 	this->icefront_distance				= -1;
+ 	this->thicknesserror_threshold	= -1;
+ 	this->deviatoricerror_threshold	= -1;
++	this->max_deviatoricerror			= -1;
++	this->max_thicknesserror			= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -93,38 +102,24 @@
+ /*}}}*/
+ 
+ /*Mesh refinement methods*/
+-void AdaptiveMeshRefinement::ExecuteRefinement(int numberofpoints,double* xylist,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
+-
++void AdaptiveMeshRefinement::ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
++	
+ 	/*IMPORTANT! pelementslist are in Matlab indexing*/
+ 	/*NEOPZ works only in C indexing*/
+ 	if(!this->fathermesh || !this->previousmesh) _error_("Impossible to execute refinement: fathermesh or previousmesh is NULL!\n");
++	if(this->refinement_type!=0 && this->refinement_type!=1) _error_("Impossible to execute refinement: refinement type is not defined!\n");
+ 
++	/*Input verifications*/
++	if(this->deviatoricerror_threshold>0	&& !deviatoricerror) _error_("deviatoricerror is NULL!\n");
++	if(this->thicknesserror_threshold>0		&& !thicknesserror)	_error_("thicknesserror is NULL!\n");
++	if(this->groundingline_distance>0		&& !gl_distance)		_error_("gl_distance is NULL!\n");
++	if(this->icefront_distance>0				&& !if_distance)		_error_("if_distance is NULL!\n");
++
+ 	/*Intermediaries*/
+ 	bool verbose=VerboseSolution();
+-
+-	/*Refine the mesh using level max*/
+-	this->RefineMesh(verbose,this->previousmesh,numberofpoints,xylist);
+ 	
+-	/*Get new geometric mesh in ISSM data structure*/
+-	this->GetMesh(this->previousmesh,pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+-
+-	/*Verify the new geometry*/
+-	this->CheckMesh(pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+-	
+-	if(verbose) _printf_("\trefinement process done!\n");
+-}
+-/*}}}*/
+-void AdaptiveMeshRefinement::ExecuteRefinement(double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist){/*{{{*/
+-
+-	/*IMPORTANT! pelementslist are in Matlab indexing*/
+-	/*NEOPZ works only in C indexing*/
+-	if(!this->fathermesh || !this->previousmesh) _error_("Impossible to execute refinement: fathermesh or previousmesh is NULL!\n");
+-
+-	/*Intermediaries*/
+-	bool verbose=true;
+-	
+ 	/*Execute refinement*/
+-	this->RefinementProcess(verbose,gl_elementdistance,if_elementdistance,deviatoricerror,thicknesserror);
++	this->RefineMeshOneLevel(verbose,gl_distance,if_distance,deviatoricerror,thicknesserror);
+    
+ 	/*Get new geometric mesh in ISSM data structure*/
+ 	this->GetMesh(this->previousmesh,pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+@@ -133,275 +128,267 @@
+ 	this->CheckMesh(pnewnumberofvertices,pnewnumberofelements,px,py,pelementslist);
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefinementProcess(bool &verbose,double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror){/*{{{*/
+-   
+-	if(verbose) _printf_("\n\trefinement process started (level max = " << this->level_max << ")\n");
++void AdaptiveMeshRefinement::RefineMeshOneLevel(bool &verbose,double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror){/*{{{*/
+ 	
+ 	/*Intermediaries*/
+-	TPZGeoMesh* nohangingnodesmesh=NULL;
++	int nelem							=-1;
++	int side2D							= 6;
++	int sid								=-1;
++	int count							=-1;
++	int criteria						=-1;
++	int numberofcriteria				=-1;
++	int nconformelements				= this->sid2index.size();
++	double gl_radius_h				=-1;
++	double gl_radius_hmax			= std::max(this->radius_level_max,this->groundingline_distance);
++	double if_radius_h				=-1;
++	double if_radius_hmax			= std::max(this->radius_level_max,this->icefront_distance);
++	double gl_groupdistance			=-1;
++	double if_groupdistance			=-1;
++	double d_maxerror					=-1;
++	double t_maxerror					=-1;
++	double deviatoric_grouperror	=-1;
++	double thickness_grouperror	=-1;
++	TPZGeoMesh* gmesh					= NULL; 
++	TPZVec<REAL> qsi(2,0.),cp(3,0.);
++	TPZVec<TPZGeoEl*> sons;
++	std::vector<int> index;
+ 
+-	double mean_mask		= 0;
+-	double mean_tauerror = 0;
+-	double mean_Herror	= 0;
+-	double group_Herror	= 0;
+-	int index,sid;
+-	std::vector<int> specialfatherindex; specialfatherindex.clear();
++	/*Calculate the number of criteria{{{*/
++	numberofcriteria=0;
++	if(this->deviatoricerror_threshold>0)	numberofcriteria++;
++	if(this->thicknesserror_threshold>0)	numberofcriteria++;
++	if(this->groundingline_distance>0)		numberofcriteria++;
++	if(this->icefront_distance>0)				numberofcriteria++;
++	/*}}}*/
+ 
+-	/*Calculate mean values*/
+-	/*
+-	for(int i=0;i<this->sid2index.size();i++){
+-		mean_mask		+= masklevelset[i]; 
+-		mean_tauerror	+= deviatorictensorerror[i]; 
+-		mean_Herror		+= thicknesserror[i];
++	/*Calculate the maximum of the estimators, if requested{{{*/
++	if(this->deviatoricerror_threshold>0 && this->max_deviatoricerror<0){ 
++		for(int i=0;i<nconformelements;i++) this->max_deviatoricerror=max(this->max_deviatoricerror,deviatoricerror[i]);
+ 	}
+-	mean_mask		/= this->sid2index.size();
+-	mean_tauerror	/= this->sid2index.size();
+-	mean_Herror		/= this->sid2index.size();
+-	*/
+-	if(verbose) _printf_("\t\tdeal with special elements...\n");
+-	/*Deal with special elements*/
++	if(this->thicknesserror_threshold>0 && this->max_thicknesserror<0){
++		for(int i=0;i<nconformelements;i++) this->max_thicknesserror=max(this->max_thicknesserror,thicknesserror[i]);
++	}
++	/*}}}*/
++
++	/*First, verify if special elements have min distance or high errors{{{*/
++	gmesh=this->previousmesh;
+ 	for(int i=0;i<this->specialelementsindex.size();i++){
+-		if(this->specialelementsindex[i]==-1) continue;
+-		/*Get special element and verify*/
+-		TPZGeoEl* geoel=this->previousmesh->Element(this->specialelementsindex[i]);
+-		if(!geoel)_error_("special element (sid) "<<i<<" is null!\n");
+-		if(geoel->HasSubElement())_error_("special element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
+-		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
+-		if(!geoel->Father())_error_("father of special element (sid) "<<i<<" is null!\n");
+-		
+-		/*Get element's siblings and verify*/
+-		TPZGeoEl* father=geoel->Father();
+-		TPZVec<TPZGeoEl *> siblings;
+-		father->GetHigherSubElements(siblings);
+-		std::vector<int> sidvec; sidvec.resize(siblings.size());
+-		for (int j=0;j<siblings.size();j++){
+-			if(!siblings[j]) _error_("special element (sid) "<<i<<" has a null siblings null!\n"); 
+-			sidvec[j]=this->index2sid[siblings[j]->Index()];
+-		}
+-		
+-		/*Now, reset the data strucure and verify if the siblings should be deleted*/	
+-		if(siblings.size()<4){
+-			/*Reset subelements in the father*/
+-			father->ResetSubElements();
+-		}else{
+-			if(siblings.size()!=4) _error_("element (index) "<<father->Index()<<" has "<<father->NSubElements()<<" subelements!\n");
+-		}
+-		for (int j=0;j<siblings.size();j++){
+-			for(int k=0;k<this->specialelementsindex.size();k++){
+-				if(this->specialelementsindex[k]==siblings[j]->Index()){ 
+-					index									= siblings[j]->Index();
+-					if(index<0) _error_("index is null!\n");
+-					sid									= this->index2sid[index];
+-					if(sid<0) _error_("sid is null!\n");
+-					this->specialelementsindex[k]	= -1;
+-					this->index2sid[index]			= -1;
+-					this->sid2index[sid]				= -1;
+-				}
+-			}
+-			if(siblings.size()<4){
+-				/*Ok, the special element can be deleted*/
+-				siblings[j]->ResetSubElements();
+-				this->previousmesh->DeleteElement(siblings[j],siblings[j]->Index());
+-			}
+-		}
+-		
+-		/*Now, verify if the father should be refined with uniform pattern (smoother)*/
+-		if(siblings.size()==3){//it keeps the mesh with uniform elements
+-			/*Father has uniform subelements now*/
+-			TPZVec<TPZGeoEl *> sons;
+-			father->Divide(sons);
+-		}else{
+-			specialfatherindex.push_back(father->Index());
+-		}
+-		if(this->specialelementsindex[i]!=-1) _error_("special element "<<i<<" was not deleted!\n");	
++		if(this->specialelementsindex[i]==-1) _error_("index is -1!\n");
++		if(!gmesh->Element(this->specialelementsindex[i])) _error_("element is null!\n");
++		if(!gmesh->Element(this->specialelementsindex[i])->Father()) _error_("father is null!\n");
++		if(gmesh->Element(this->specialelementsindex[i])->HasSubElement()) _error_("special element has sub elements!\n");
++		sons.clear();
++		gmesh->Element(this->specialelementsindex[i])->Father()->GetHigherSubElements(sons);
++		/*Limits*/
++		gl_radius_h = gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
++		if_radius_h = if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
++		d_maxerror	= this->deviatoricerror_threshold*this->max_deviatoricerror;
++		t_maxerror	= this->thicknesserror_threshold*this->max_thicknesserror;
++		/*Calculate the distance and error of the group (sons)*/
++		gl_groupdistance=INFINITY;if_groupdistance=INFINITY;deviatoric_grouperror=0;thickness_grouperror=0;
++		for(int s=0;s<sons.size();s++){
++			sid=this->index2sid[sons[s]->Index()];
++			if(sid<0) continue;
++			if(this->groundingline_distance>0)		gl_groupdistance=std::min(gl_groupdistance,gl_distance[sid]); 
++			if(this->icefront_distance>0)				if_groupdistance=std::min(if_groupdistance,if_distance[sid]); 
++			if(this->deviatoricerror_threshold>0)	deviatoric_grouperror+=deviatoricerror[sid];
++			if(this->thicknesserror_threshold>0)	thickness_grouperror+=thicknesserror[sid];
++		}	
++		criteria=0;
++		if(this->groundingline_distance>0		&& gl_groupdistance<gl_radius_h)			criteria++;
++		if(this->icefront_distance>0				&& if_groupdistance<if_radius_h)			criteria++;
++		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror>d_maxerror)	criteria++;
++		if(this->thicknesserror_threshold>0		&& thickness_grouperror>t_maxerror)		criteria++;
++		/*Finally, it keeps the father index if it must be refine*/
++		if(criteria) index.push_back(gmesh->Element(this->specialelementsindex[i])->FatherIndex());
+ 	}
+-	this->previousmesh->BuildConnectivity();
++	/*}}}*/
+ 	
+-	if(verbose) _printf_("\t\tuniform refinement...\n");
+-	/*Deal with uniform elemnts*/
+-	for(int i=0;i<this->sid2index.size();i++){
+-		if(this->sid2index[i]==-1) continue;
+-		/*Get element and verify*/
+-		TPZGeoEl* geoel=this->previousmesh->Element(this->sid2index[i]);
+-		if(geoel->HasSubElement()) _error_("element (sid) "<<i<<" has "<<geoel->NSubElements()<<" subelements!\n");
+-		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("geoel->MaterialId is not GetElemMaterialID!\n");
++	/*Now, detele the special elements{{{*/
++	if(this->refinement_type==1) this->DeleteSpecialElements(verbose,gmesh);
++	else this->specialelementsindex.clear();
++	/*}}}*/
+ 
+-		/*Refine process*/
+-		if(thicknesserror[i]>mean_Herror)
+-		{	
+-			int count=0;
+-			TPZGeoEl* father=geoel->Father();
+-			if(father){
+-				for(int j=3;j<6;j++){
+-					index=father->Neighbour(j).Element()->Index();
+-					for(int k=0;k<specialfatherindex.size();k++) if(specialfatherindex[k]==index) count++;
+-				}
+-			}
+-			TPZVec<TPZGeoEl *> sons;
+-			if(geoel->Level()<this->level_max && count==0) geoel->Divide(sons);
+-		} 
+-		else if(geoel->Level()>0)
+-		{/*Unrefine process*/
+-			
+-			/*Get siblings and verify*/
+-			TPZVec<TPZGeoEl *> siblings;
+-			geoel->Father()->GetHigherSubElements(siblings);
+-			//if(siblings.size()<4) _error_("Impossible to refine: geoel (index) "<<this->sid2index[i]<<" has less than 3 siblings!\n");	
+-			if(siblings.size()>4) continue;//Father has more then 4 sons, this group should not be unrefined.
+-			
+-			/*Compute the error of the group*/
+-			group_Herror=0;
+-			for(int j=0;j<siblings.size();j++){
+-				index		= siblings[j]->Index();
+-				sid		= this->index2sid[index];
+-				if(sid==-1) continue;
+-				group_Herror+=thicknesserror[sid];
+-			}
+-			/*Verify if this group should be unrefined*/
+-			if(group_Herror>0 && group_Herror<0*mean_Herror){ //itapopo
+-				/*Reset subelements in the father*/
+-				this->previousmesh->Element(geoel->Father()->Index())->ResetSubElements();
+-				/*Delete the elements and set their indexes in the index2sid and sid2index*/
+-				for (int j=0;j<siblings.size();j++){
+-					index	= siblings[j]->Index();
+-					sid	= this->index2sid[index];
+-					this->index2sid[index]=-1;
+-					if(sid!=-1) this->sid2index[sid]=-1;
+-					this->previousmesh->DeleteElement(siblings[j],siblings[j]->Index());
+-				}//for j
+-			}//if
+-		}/*Unrefine process*/
+-	}//for i
+-	this->previousmesh->BuildConnectivity();
++	/*Set the mesh and delete previousmesh if refinement type is 0{{{*/
++	if(this->refinement_type==0){
++		delete this->previousmesh;	
++		gmesh=this->fathermesh;
++	}
++	/*}}}*/
+ 	
+-	if(verbose) _printf_("\t\trefine to avoid hanging nodes...\n");
+-	this->RefineMeshToAvoidHangingNodes(verbose,this->previousmesh);
++	/*Unrefinement process: loop over level of refinements{{{*/
++	if(verbose) _printf_("\tunrefinement process...\n");
++	if(verbose) _printf_("\ttotal: ");
++	count=0;
++	 
++	nelem=gmesh->NElements();//must keep here
++	for(int i=0;i<nelem;i++){
++		if(!gmesh->Element(i)) continue;
++		if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
++		if(gmesh->Element(i)->HasSubElement()) continue;
++		if(gmesh->Element(i)->Level()==0) continue;
++		if(!gmesh->Element(i)->Father()) _error_("father is NULL!\n");
++		/*Limits with lag*/
++		gl_radius_h = this->lag*gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
++		if_radius_h = this->lag*if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
++		d_maxerror	= 0.05*this->max_deviatoricerror;//itapopo definir melhor
++		t_maxerror	= 0.05*this->max_thicknesserror;//itapopo definir melhor
++		/*Get the sons of the father (sibilings)*/	
++		sons.clear();
++		gmesh->Element(i)->Father()->GetHigherSubElements(sons);
++		if(sons.size()!=4) continue;//delete just group of 4 elements. This avoids big holes in the mesh
++		/*Find the minimal distance and the error of the group*/	
++		gl_groupdistance=INFINITY;if_groupdistance=INFINITY;deviatoric_grouperror=0;thickness_grouperror=0;
++		for(int s=0;s<sons.size();s++){
++			sid=this->index2sid[sons[s]->Index()];
++			/*Verify if this group have solutions*/
++			if(sid<0){gl_groupdistance=INFINITY;if_groupdistance=INFINITY;deviatoric_grouperror=INFINITY;thickness_grouperror=INFINITY;continue;} 
++			/*Distance and error of the group*/
++			if(this->groundingline_distance>0)		gl_groupdistance=std::min(gl_groupdistance,gl_distance[sid]); 
++			if(this->icefront_distance>0)				if_groupdistance=std::min(if_groupdistance,if_distance[sid]); 
++			if(this->deviatoricerror_threshold>0)	deviatoric_grouperror+=deviatoricerror[sid]; 
++			if(this->thicknesserror_threshold>0)	thickness_grouperror+=thicknesserror[sid]; 
++		}
++		/*Verify the criteria*/
++		criteria=0;
++		if(this->groundingline_distance>0		&& gl_groupdistance>gl_radius_h)			criteria++;
++		if(this->icefront_distance>0				&& if_groupdistance>if_radius_h)			criteria++;
++		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror<d_maxerror)	criteria++;
++		if(this->thicknesserror_threshold>0		&& thickness_grouperror<t_maxerror)		criteria++;
++		/*Now, if the group attends the criteria, unrefine it*/
++		if(criteria==numberofcriteria){ 
++			gmesh->Element(i)->Father()->ResetSubElements(); count++;
++			for(int s=0;s<sons.size();s++){this->index2sid[sons[s]->Index()]=-1;gmesh->DeleteElement(sons[s],sons[s]->Index());}
++		}
++	}
++	if(verbose) _printf_(""<<count<<"\n");
++	/*Adjust the connectivities before continue*/
++	gmesh->BuildConnectivity();
++	/*}}}*/
+ 	
+-		//nohangingnodesmesh = this->CreateRefPatternMesh(newmesh); itapopo tentar otimizar
++	/*Refinement process: loop over level of refinements{{{*/
++	if(verbose) _printf_("\trefinement process (level max = "<<this->level_max<<")\n");
++	if(verbose) _printf_("\ttotal: ");
++	count=0;
++	nelem=gmesh->NElements();//must keep here
++	for(int i=0;i<nelem;i++){
++		if(!gmesh->Element(i)) continue;
++		if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
++		if(gmesh->Element(i)->HasSubElement()) continue;
++		if(gmesh->Element(i)->Level()==this->level_max) continue;
++		/*Verify if this element has solutions*/
++		sid=this->index2sid[gmesh->Element(i)->Index()];
++		if(sid<0) continue;
++		/*Filter: set the region/radius for level h*/
++		gl_radius_h	= gl_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1, current element level is <level_max
++		if_radius_h	= if_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1, current element level is <level_max
++		d_maxerror	= this->deviatoricerror_threshold*this->max_deviatoricerror;
++		t_maxerror	= this->thicknesserror_threshold*this->max_thicknesserror;
++		/*Verify distance and error of the element, if requested*/
++		criteria=0;
++		if(this->groundingline_distance>0		&& gl_distance[sid]<gl_radius_h)		criteria++; 
++		if(this->icefront_distance>0				&& if_distance[sid]<if_radius_h)		criteria++; 
++		if(this->deviatoricerror_threshold>0	&& deviatoricerror[sid]>d_maxerror)	criteria++; 
++		if(this->thicknesserror_threshold>0		&& thicknesserror[sid]>t_maxerror)	criteria++; 
++		/*Now, if it attends any criterion, keep the element index to refine in next step*/
++		if(criteria)index.push_back(i);
++	}
++	/*Now, refine the elements*/
++	for(int i=0;i<index.size();i++){ 
++		if(!gmesh->Element(index[i])) DebugStop();
++		if(!gmesh->Element(index[i])->HasSubElement()){gmesh->Element(index[i])->Divide(sons);count++;}
++	}
++	if(verbose) _printf_(""<<count<<"\n");
++	/*Adjust the connectivities before continue*/
++	gmesh->BuildConnectivity();
++	/*}}}*/
+ 
+-	if(verbose) _printf_("\trefinement process done!\n");
++	/*Now, apply smoothing and insert special elements to avoid hanging nodes{{{*/
++	this->RefineMeshWithSmoothing(verbose,gmesh);
++	if(this->refinement_type==0) this->previousmesh=this->CreateRefPatternMesh(gmesh);//in this case, gmesh==this->fathermesh
++	gmesh=this->previousmesh;//previous mesh is always refined to avoid hanging nodes
++	this->RefineMeshToAvoidHangingNodes(verbose,gmesh);
++	/*}}}*/
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefineMesh(bool &verbose,TPZGeoMesh* gmesh,int numberofpoints,double* xylist){/*{{{*/
++int AdaptiveMeshRefinement::VerifyRefinementType(TPZGeoEl* geoel){/*{{{*/
++
++	/*
++	 * 0 : no refinement
++	 * 1 : special refinement (to avoid hanging nodes)
++	 * 2 : uniform refinment
++	 * */
++	if(!geoel) _error_("geoel is NULL!\n");
+ 	
+-	/*Verify if there are points*/
+-	if(numberofpoints==0) return;	
+-
++	/*Output*/
++	int type=0;
++	int count=0;
++	
+ 	/*Intermediaries*/
+-	int nelem			=-1;
+-	int side2D			= 6;
+-	double radius_h	=-1;
+-	double radius_hmax=std::max(this->radius_level_max,std::max(this->groundingline_distance,this->icefront_distance));
+-	int count			=-1;
+-	double mindistance=0.;
+-	double distance	=0.;;
+-	TPZVec<REAL> qsi(2,0.),cp(3,0.);
+ 	TPZVec<TPZGeoEl*> sons;
+- 
+-	/*First, delete the special elements*/
+-	this->DeleteSpecialElements(verbose,gmesh);
+ 	
+-	/*Refinement process: loop over level of refinements{{{*/
+-	if(verbose) _printf_("\trefinement process (level max = "<<this->level_max<<")\n");
+-	for(int h=1;h<=this->level_max;h++){
+-		if(verbose) _printf_("\tlevel "<<h<<" (total: ");
+-		count=0;
++	/*Loop over neighboors (sides 3, 4 and 5)*/
++	for(int j=3;j<6;j++){
++		sons.clear();
++		geoel->Neighbour(j).Element()->GetHigherSubElements(sons);
++		if(sons.size()) count++; //if neighbour was refined
++		if(sons.size()>4) count++; //if neighbour's level is > element level+1
++	}
++	
++	/*Verify and return*/
++	if(count>1) type=2;
++	else type=count;
++	
++	return type;
++}
++/*}}}*/
++void AdaptiveMeshRefinement::RefineMeshWithSmoothing(bool &verbose,TPZGeoMesh* gmesh){/*{{{*/
+ 
+-		/*Filter: set the region/radius for level h*/
+-		radius_h=radius_hmax*std::pow(this->gradation,this->level_max-h);
++	/*Intermediaries*/
++	int nelem		=-1;
++	int count		=-1;
++	int type			=-1;
++	int typecount	=-1;
+ 
+-		/*Find the minimal distance of the elements (center point) to the points */ 
+-		nelem=gmesh->NElements();//must keep here
+-		for(int i=0;i<nelem;i++){//itapopo pode-se reduzir o espaço de busca aqui
+-			if(!gmesh->Element(i)) continue;
+-			if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+-			if(gmesh->Element(i)->HasSubElement()) continue;
+-			if(gmesh->Element(i)->Level()>=h) continue;
+-			gmesh->Element(i)->CenterPoint(side2D,qsi);
+-			gmesh->Element(i)->X(qsi,cp);
+-			mindistance=radius_h;
+-			for (int j=0;j<numberofpoints;j++){
+-				distance		= std::sqrt( (xylist[2*j]-cp[0])*(xylist[2*j]-cp[0])+(xylist[2*j+1]-cp[1] )*(xylist[2*j+1]-cp[1]) );
+-				mindistance = std::min(mindistance,distance);//min distance to the point
+-			}
+-			/*If the element is inside the region, refine it*/
+-			if(mindistance<radius_h){ 
+-				gmesh->Element(i)->Divide(sons);
+-				count++;
+-			}
+-		}
+-		if(verbose) _printf_(""<<count<<")\n");
+-	}
+-	/*Adjust the connectivities before continue*/
+-	gmesh->BuildConnectivity();
+-	/*}}}*/
+-	
+-	/*Unrefinement process: loop over level of refinements{{{*/
+-	if(verbose) _printf_("\tunrefinement process...\n");
+-	for(int h=this->level_max;h>=1;h--){
+-		if(verbose) _printf_("\tlevel "<<h<<" (total: ");
++	TPZVec<TPZGeoEl*> sons;
++
++	/*Refinement process: loop over level of refinements*/
++	if(verbose) _printf_("\tsmoothing process (level max = "<<this->level_max<<")\n");
++	if(verbose) _printf_("\ttotal: ");
++
++	count=1;
++	while(count>0){
+ 		count=0;
+-		
+-		/*Filter with lag: set the region/radius for level h*/
+-		radius_h=this->lag*radius_hmax*std::pow(this->gradation,this->level_max-h);
+-		
+-		/*Find the minimal distance of the elements (center point) to the points */ 
+ 		nelem=gmesh->NElements();//must keep here
+-		for(int i=0;i<nelem;i++){//itapopo pode-se reduzir o espaço de busca aqui
++		for(int i=0;i<nelem;i++){
+ 			if(!gmesh->Element(i)) continue;
+ 			if(gmesh->Element(i)->MaterialId()!=this->GetElemMaterialID()) continue;
+ 			if(gmesh->Element(i)->HasSubElement()) continue;
+-			if(gmesh->Element(i)->Level()!=h) continue;
+-			if(!gmesh->Element(i)->Father()) _error_("father is NULL!\n");
+-			/*Get the sons of the father (sibilings)*/	
+-			sons.clear();
+-			gmesh->Element(i)->Father()->GetHigherSubElements(sons);
+-			if(sons.size()!=4) continue;//delete just group of 4 elements. This avoids big holes in the mesh
+-			/*Find the minimal distance of the group*/	
+-			mindistance=INFINITY;
+-			for(int s=0;s<sons.size();s++){
+-				sons[s]->CenterPoint(side2D,qsi);
+-				sons[s]->X(qsi,cp);
+-				for (int j=0;j<numberofpoints;j++){
+-					distance		= std::sqrt( (xylist[2*j]-cp[0])*(xylist[2*j]-cp[0])+(xylist[2*j+1]-cp[1] )*(xylist[2*j+1]-cp[1]) );
+-					mindistance = std::min(mindistance,distance);//min distance to the point
++			if(gmesh->Element(i)->Level()==this->level_max) continue;
++			/*loop over neighboors (sides 3, 4 and 5). Important: neighbours has the same dimension of the element*/
++			type=this->VerifyRefinementType(gmesh->Element(i));
++			if(type<2){
++				typecount=0;
++				for(int j=3;j<6;j++){
++					if(gmesh->Element(i)->Neighbour(j).Element()->HasSubElement()) continue;
++					if(gmesh->Element(i)->Neighbour(j).Element()->Index()==i) typecount++;//neighbour==this element, element at the border
++					if(this->VerifyRefinementType(gmesh->Element(i)->Neighbour(j).Element())==1) typecount++;
+ 				}
++				if(typecount>1 && type==1) type=2;
++				else if(typecount>2 && type==0) type=2;
+ 			}
+-			/*If the group is outside the region, unrefine the group*/
+-			if(mindistance>radius_h){ 
+-				gmesh->Element(i)->Father()->ResetSubElements();
+-				count++;
+-				for(int s=0;s<sons.size();s++){
+-					gmesh->DeleteElement(sons[s],sons[s]->Index());
+-				}
+-			}
++			/*refine the element if requested*/
++			if(type==2){gmesh->Element(i)->Divide(sons);	count++;}
+ 		}
+-		if(verbose) _printf_(""<<count<<")\n");
++		if(verbose){
++			if(count==0) _printf_(""<<count<<"\n");
++			else _printf_(""<<count<<", ");
++		}
++		/*Adjust the connectivities before continue*/
++		gmesh->BuildConnectivity();
+ 	}
+-	/*Adjust the connectivities before continue*/
+-	gmesh->BuildConnectivity();
+-	/*}}}*/
+-	
+-	/*Now, insert special elements to avoid hanging nodes*/
+-	this->RefineMeshToAvoidHangingNodes(verbose,gmesh);
+ }
+ /*}}}*/
+-void AdaptiveMeshRefinement::RefineMesh(TPZGeoMesh* gmesh,std::vector<int> &elements){/*{{{*/
+-
+-	/*Refine elements: uniform pattern refinement*/
+-	for(int i=0;i<elements.size();i++){
+-		/*Get geometric element and verify if it has already been refined*/
+-		int index = elements[i];
+-		TPZGeoEl * geoel = gmesh->Element(index);
+-		if(geoel->HasSubElement()) _error_("Impossible to refine: geoel (index) " << index << " has subelements!\n");
+-		if(geoel->MaterialId()!=this->GetElemMaterialID()) _error_("Impossible to refine: geoel->MaterialId is not GetElemMaterialID!\n");
+-		/*Divide geoel*/
+-		TPZVec<TPZGeoEl *> Sons;
+-		geoel->Divide(Sons);
+-	}
+-	gmesh->BuildConnectivity();
+-}
+-/*}}}*/
+ void AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh){/*{{{*/
+    
+ 	/*Now, insert special elements to avoid hanging nodes*/
+@@ -451,6 +438,7 @@
+ 		if(!gmesh->Element(this->specialelementsindex[i])) continue;
+ 		if(gmesh->Element(this->specialelementsindex[i])->Father()) gmesh->Element(this->specialelementsindex[i])->Father()->ResetSubElements();
+ 		gmesh->DeleteElement(gmesh->Element(this->specialelementsindex[i]),this->specialelementsindex[i]);
++      this->index2sid[this->specialelementsindex[i]]=-1;
+ 		count++;
+ 	}
+ 	if(verbose) _printf_(""<<count<<")\n");
+@@ -567,6 +555,7 @@
+ 	
+ 	if(nvertices<=0) _error_("Impossible to create initial mesh: nvertices is <= 0!\n");
+    if(nelements<=0) _error_("Impossible to create initial mesh: nelements is <= 0!\n");
++	if(this->refinement_type!=0 && this->refinement_type!=1) _error_("Impossible to create initial mesh: refinement type is not defined!\n");
+ 
+     /*Verify and creating initial mesh*/
+    if(this->fathermesh || this->previousmesh) _error_("Initial mesh already exists!");
+@@ -590,25 +579,26 @@
+ 	long index;
+    const int mat = this->GetElemMaterialID();
+    TPZManVector<long> elem(this->GetNumberOfNodes(),0);
++	this->index2sid.clear(); this->index2sid.resize(nelements);
+    this->sid2index.clear();
+ 
+ 	for(int i=0;i<nelements;i++){
+ 		for(int j=0;j<this->GetNumberOfNodes();j++) elem[j]=elements[i*this->GetNumberOfNodes()+j]-1;//Convert Matlab to C indexing
+-      /*reftype = 0: uniform, fast / reftype = 1: uniform and non-uniform (avoid hanging nodes), it is not too fast */
+-      const int reftype = 1;
+       switch(this->GetNumberOfNodes()){
+-			case 3: this->fathermesh->CreateGeoElement(ETriangle,elem,mat,index,reftype);	break;
++			case 3: this->fathermesh->CreateGeoElement(ETriangle,elem,mat,index,this->refinement_type);	break;
+          default:	_error_("mesh not supported yet");
+ 		}
+       /*Define the element ID*/        
+       this->fathermesh->ElementVec()[index]->SetId(i);
+-		/*Initialize sid2index*/
++		/*Initialize sid2index and index2sid*/
+ 		this->sid2index.push_back((int)index);
++		this->index2sid[(int)index]=this->sid2index.size()-1;//keep the element sid
+ 	}
+    /*Build element and node connectivities*/
+    this->fathermesh->BuildConnectivity();
+ 	/*Set previous mesh*/
+-	this->previousmesh=new TPZGeoMesh(*this->fathermesh);
++	if(this->refinement_type==1) this->previousmesh=new TPZGeoMesh(*this->fathermesh);
++	else this->previousmesh=this->CreateRefPatternMesh(this->fathermesh); 
+ }
+ /*}}}*/
+ TPZGeoMesh* AdaptiveMeshRefinement::CreateRefPatternMesh(TPZGeoMesh* gmesh){/*{{{*/
+@@ -621,7 +611,7 @@
+    int mat     = this->GetElemMaterialID();;
+    int reftype = 1;
+    long index; 
+-   
++
+ 	//nodes
+ 	newgmesh->NodeVec().Resize(nnodes);
+    for(int i=0;i<nnodes;i++) newgmesh->NodeVec()[i] = gmesh->NodeVec()[i];
+@@ -629,11 +619,18 @@
+    //elements
+    for(int i=0;i<nelem;i++){
+    	TPZGeoEl * geoel = gmesh->Element(i);
+-      TPZManVector<long> elem(3,0);
++		
++		if(!geoel){
++			index=newgmesh->ElementVec().AllocateNewElement();
++			newgmesh->ElementVec()[index] = NULL;
++			continue;
++		}
++      
++		TPZManVector<long> elem(3,0);
+       for(int j=0;j<3;j++) elem[j] = geoel->NodeIndex(j);
+      
+       newgmesh->CreateGeoElement(ETriangle,elem,mat,index,reftype);
+-      newgmesh->ElementVec()[index]->SetId(geoel->Id());
++		newgmesh->ElementVec()[index]->SetId(geoel->Id());
+         
+       TPZGeoElRefPattern<TPZGeoTriangle>* newgeoel = dynamic_cast<TPZGeoElRefPattern<TPZGeoTriangle>*>(newgmesh->ElementVec()[index]);
+         
+@@ -688,6 +685,8 @@
+          newgeoel->SetSubElement(j,son);
+       }
+    }
++
++	/*Now, build connectivities*/
+ 	newgmesh->BuildConnectivity();
+     
+ 	return newgmesh;
+@@ -714,13 +713,13 @@
+ 	
+ 	//Verify if there are inf or NaN in coords
+ 	for(int i=0;i<*nvertices;i++){
+-		if(isnan((*px)[i]) || isinf((*px)[i])) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n"); 
+-		if(isnan((*py)[i]) || isinf((*py)[i])) _error_("Impossible to continue: py i=" << i <<" is NaN or Inf!\n");
++		if(std::isnan((*px)[i]) || std::isinf((*px)[i])) _error_("Impossible to continue: px i=" << i <<" is NaN or Inf!\n"); 
++		if(std::isnan((*py)[i]) || std::isinf((*py)[i])) _error_("Impossible to continue: py i=" << i <<" is NaN or Inf!\n");
+ 	}
+ 	for(int i=0;i<*nelements;i++){
+ 		for(int j=0;j<this->GetNumberOfNodes();j++){
+-			if(isnan((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is NaN!\n");
+-			if(isinf((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is Inf!\n");
++			if(std::isnan((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is NaN!\n");
++			if(std::isinf((*pelements)[i*GetNumberOfNodes()+j])) _error_("Impossible to continue: px i=" << i <<" is Inf!\n");
+ 		}
+ 	}
+     
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22241)
+@@ -2647,8 +2647,8 @@
+ 			XC_new[i]+=Xnew[vid];
+ 			YC_new[i]+=Ynew[vid];
+ 		}
+-		XC_new[i]=XC_new[i]/3;
+-		YC_new[i]=YC_new[i]/3;
++		XC_new[i]=XC_new[i]/3.;
++		YC_new[i]=YC_new[i]/3.;
+ 	}
+ 
+ 	/*Interplate P0 inputs in the new mesh*/
+@@ -3028,7 +3028,7 @@
+ 	for(int i=0;i<numberofelements;i++){
+ 		elementslist[elementswidth*i+0] = reCast<int>(id1[i])+1; //InterpMesh wants Matlab indexing
+ 		elementslist[elementswidth*i+1] = reCast<int>(id2[i])+1; //InterpMesh wants Matlab indexing
+-		elementslist[elementswidth*i+2] = reCast<int>(id3[i])+1; //InterpMesh wants Matlab indexinf
++		elementslist[elementswidth*i+2] = reCast<int>(id3[i])+1; //InterpMesh wants Matlab indexing
+ 	}
+ 	
+ 	/*Assign pointers*/
+@@ -3607,20 +3607,23 @@
+    int* elem_vertices			= xNew<int>(elementswidth);
+    Vector<IssmDouble>* vxc		= new Vector<IssmDouble>(numberofelements);
+    Vector<IssmDouble>* vyc		= new Vector<IssmDouble>(numberofelements);
+-	IssmDouble *x					= NULL;
+-	IssmDouble *y					= NULL;
+-	IssmDouble *z					= NULL;	
++	IssmDouble* x					= NULL;
++	IssmDouble* y					= NULL;
++	IssmDouble* z					= NULL;	
++	IssmDouble* xyz_list			= NULL;
++	IssmDouble x1,y1,x2,y2,x3,y3;
+ 
+-	/*Get vertices coordinates*/
+-	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
+-
+ 	/*Insert the element center coordinates*/
+    for(int i=0;i<this->elements->Size();i++){
+       Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-      element->GetVerticesSidList(elem_vertices);
++      //element->GetVerticesSidList(elem_vertices);
+       int sid = element->Sid();
+-      vxc->SetValue(sid,(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.,INS_VAL);
+-      vyc->SetValue(sid,(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.,INS_VAL);
++		element->GetVerticesCoordinates(&xyz_list); 
++		x1 = xyz_list[3*0+0];y1 = xyz_list[3*0+1];
++		x2 = xyz_list[3*1+0];y2 = xyz_list[3*1+1];
++		x3 = xyz_list[3*2+0];y3 = xyz_list[3*2+1];
++		vxc->SetValue(sid,(x1+x2+x3)/3.,INS_VAL);
++      vyc->SetValue(sid,(y1+y2+y3)/3.,INS_VAL);
+    }
+ 
+    /*Assemble*/
+@@ -3635,6 +3638,7 @@
+ 	xDelete<IssmDouble>(x);
+ 	xDelete<IssmDouble>(y);
+ 	xDelete<IssmDouble>(z);
++	xDelete<IssmDouble>(xyz_list);
+    xDelete<int>(elem_vertices);
+    delete vxc;
+    delete vyc;
+@@ -3657,37 +3661,37 @@
+    int numberofelements                	= this->elements->NumberOfElements();
+ 	int* elem_vertices         				= xNew<int>(elementswidth);
+    IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
+-   IssmDouble* x									= NULL;
+-   IssmDouble* y									= NULL;
+-   IssmDouble* z									= NULL;
++   IssmDouble* xyz_list							= NULL;
+ 	Vector<IssmDouble>* vx_zerolevelset		= new Vector<IssmDouble>(numberofelements);
+ 	Vector<IssmDouble>* vy_zerolevelset		= new Vector<IssmDouble>(numberofelements);
+ 	IssmDouble* x_zerolevelset					= NULL;
+ 	IssmDouble* y_zerolevelset					= NULL;
+ 	int count,sid;
+-	IssmDouble xcenter,ycenter;
++	IssmDouble xc,yc,x1,y1,x2,y2,x3,y3;
+ 	
+-	/*Get vertices coordinates*/
+-	VertexCoordinatesx(&x,&y,&z,this->vertices,false) ;
+-	
+ 	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
+    for(int i=0;i<this->elements->Size();i++){
+       Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+       element->GetInputListOnVertices(levelset,levelset_type);
+ 		element->GetVerticesSidList(elem_vertices);
+-		sid 			= element->Sid();
+-		xcenter		= NAN;
+-		ycenter	 	= NAN;	
++		sid= element->Sid();
++		element->GetVerticesCoordinates(&xyz_list); 
++		x1 = xyz_list[3*0+0];y1 = xyz_list[3*0+1];
++		x2 = xyz_list[3*1+0];y2 = xyz_list[3*1+1];
++		x3 = xyz_list[3*2+0];y3 = xyz_list[3*2+1];
++		xc	= NAN;
++		yc	= NAN;	
+      	Tria* tria 	= xDynamicCast<Tria*>(element);
+ 		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
+ 			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
+ 				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
+-				xcenter=(x[elem_vertices[0]]+x[elem_vertices[1]]+x[elem_vertices[2]])/3.;
+-				ycenter=(y[elem_vertices[0]]+y[elem_vertices[1]]+y[elem_vertices[2]])/3.;
++				xc=(x1+x2+x3)/3.;
++				yc=(y1+y2+y3)/3.;
+ 			}
+ 		}
+-		vx_zerolevelset->SetValue(sid,xcenter,INS_VAL);
+-		vy_zerolevelset->SetValue(sid,ycenter,INS_VAL);
++		vx_zerolevelset->SetValue(sid,xc,INS_VAL);
++		vy_zerolevelset->SetValue(sid,yc,INS_VAL);
++		xDelete<IssmDouble>(xyz_list);
+ 	}
+    /*Assemble and serialize*/
+    vx_zerolevelset->Assemble();
+@@ -3719,9 +3723,7 @@
+    xDelete<IssmDouble>(levelset);
+ 	xDelete<IssmDouble>(x_zerolevelset);
+ 	xDelete<IssmDouble>(y_zerolevelset);
+-   xDelete<IssmDouble>(x);
+-   xDelete<IssmDouble>(y);
+-   xDelete<IssmDouble>(z);
++   xDelete<IssmDouble>(xyz_list);
+ 	delete vx_zerolevelset;
+ 	delete vy_zerolevelset;
+ }
+@@ -4473,7 +4475,7 @@
+ 		if(this->amrbamg->thicknesserror_threshold>0)	this->GethmaxVerticesFromEstimators(hmaxvertices_serial,ThicknessErrorEstimatorEnum);
+ 		if(this->amrbamg->deviatoricerror_threshold>0)	this->GethmaxVerticesFromEstimators(hmaxvertices_serial,DeviatoricStressErrorEstimatorEnum);
+ 	}
+-
++	
+ 	if(my_rank==0){
+ 		this->amrbamg->ExecuteRefinementBamg(vector_serial,hmaxvertices_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
+@@ -4517,9 +4519,6 @@
+ 	IssmDouble* z             = NULL;
+ 	int* elements             = NULL;
+ 	IssmDouble hmin,hmax,err,gradation;
+-	IssmDouble groundingline_resolution,groundingline_distance,icefront_resolution,icefront_distance;
+-	IssmDouble thicknesserror_resolution,thicknesserror_threshold,deviatoricerror_resolution,deviatoricerror_threshold;
+-	int        fieldenum,keepmetric;
+ 
+    /*Get rank*/
+ 	int my_rank = IssmComm::GetRank();
+@@ -4530,29 +4529,29 @@
+ 	/*Get vertices coordinates of the coarse mesh (father mesh)*/
+ 	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
+ 
++	/*Create bamg data structures for bamg*/
++	this->amrbamg = new AmrBamg();
++	
+ 	/*Get amr parameters*/
+ 	this->parameters->FindParam(&hmin,AmrHminEnum);
+ 	this->parameters->FindParam(&hmax,AmrHmaxEnum);
+-	this->parameters->FindParam(&fieldenum,AmrFieldEnum);
+ 	this->parameters->FindParam(&err,AmrErrEnum);
+-	this->parameters->FindParam(&keepmetric,AmrKeepMetricEnum);
+ 	this->parameters->FindParam(&gradation,AmrGradationEnum);
+-	this->parameters->FindParam(&groundingline_resolution,AmrGroundingLineResolutionEnum);
+-	this->parameters->FindParam(&groundingline_distance,AmrGroundingLineDistanceEnum);
+-	this->parameters->FindParam(&icefront_resolution,AmrIceFrontResolutionEnum);
+-	this->parameters->FindParam(&icefront_distance,AmrIceFrontDistanceEnum);
+-	this->parameters->FindParam(&thicknesserror_resolution,AmrThicknessErrorResolutionEnum);
+-	this->parameters->FindParam(&thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
+-	this->parameters->FindParam(&deviatoricerror_resolution,AmrDeviatoricErrorResolutionEnum);
+-	this->parameters->FindParam(&deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
++	this->parameters->FindParam(&this->amrbamg->fieldenum,AmrFieldEnum);
++	this->parameters->FindParam(&this->amrbamg->keepmetric,AmrKeepMetricEnum);
++	this->parameters->FindParam(&this->amrbamg->groundingline_resolution,AmrGroundingLineResolutionEnum);
++	this->parameters->FindParam(&this->amrbamg->groundingline_distance,AmrGroundingLineDistanceEnum);
++	this->parameters->FindParam(&this->amrbamg->icefront_resolution,AmrIceFrontResolutionEnum);
++	this->parameters->FindParam(&this->amrbamg->icefront_distance,AmrIceFrontDistanceEnum);
++	this->parameters->FindParam(&this->amrbamg->thicknesserror_resolution,AmrThicknessErrorResolutionEnum);
++	this->parameters->FindParam(&this->amrbamg->thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&this->amrbamg->thicknesserror_maximum,AmrThicknessErrorMaximumEnum);
++	this->parameters->FindParam(&this->amrbamg->deviatoricerror_resolution,AmrDeviatoricErrorResolutionEnum);
++	this->parameters->FindParam(&this->amrbamg->deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
++	this->parameters->FindParam(&this->amrbamg->deviatoricerror_maximum,AmrDeviatoricErrorMaximumEnum);
++	/*Set BamgOpts*/
++	this->amrbamg->SetBamgOpts(hmin,hmax,err,gradation);
+ 
+-	/*Create bamg data structures for bamg*/
+-	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err,keepmetric,gradation,
+-										 groundingline_resolution,groundingline_distance,
+-										 icefront_resolution,icefront_distance,
+-										 thicknesserror_resolution,thicknesserror_threshold,
+-										 deviatoricerror_resolution,deviatoricerror_threshold);
+-
+ 	/*Re-create original mesh and put it in bamg structure (only cpu 0)*/
+ 	if(my_rank==0){ 
+ 		this->amrbamg->Initialize(elements,x,y,numberofvertices,numberofelements);
+@@ -4607,44 +4606,82 @@
+ 	if(!hmaxvertices) _error_("hmaxvertices is NULL!\n");
+ 
+ 	/*Intermediaries*/
+-	int numberofelements				= this->elements->NumberOfElements();
+-	IssmDouble* error_elements		= NULL;
+-	IssmDouble *x						= NULL;
+-	IssmDouble *y						= NULL;
+-	IssmDouble *z						= NULL;
+-	int *index							= NULL;
+-	IssmDouble maxerror,threshold,resolution;
+-	int vid;
+-	
++	int elementswidth							= this->GetElementsWidth();
++	int numberofelements						= this->elements->NumberOfElements();
++	int numberofvertices						= this->vertices->NumberOfVertices();
++	IssmDouble* maxlength					= xNew<IssmDouble>(numberofelements);
++	IssmDouble* error_vertices				= xNewZeroInit<IssmDouble>(numberofvertices);	
++	IssmDouble* error_elements				= NULL;
++	IssmDouble* x								= NULL;
++	IssmDouble* y								= NULL;
++	IssmDouble* z								= NULL;
++	int* index									= NULL;
++	IssmDouble maxerror,threshold,resolution,length;
++	IssmDouble L1,L2,L3;
++	int vid,v1,v2,v3;
++	bool refine;
++
++	/*Fill variables*/
+ 	switch(errorestimator_type){
+ 		case ThicknessErrorEstimatorEnum: 
+ 			threshold	= this->amrbamg->thicknesserror_threshold;
+ 			resolution	= this->amrbamg->thicknesserror_resolution;
+-			this->ThicknessZZErrorEstimator(&error_elements);
++			maxerror		= this->amrbamg->thicknesserror_maximum;
++			this->ThicknessZZErrorEstimator(&error_elements);//error is serial, but the calculation is parallel
+ 			break;
+ 		case DeviatoricStressErrorEstimatorEnum:
+ 			threshold	= this->amrbamg->deviatoricerror_threshold;
+ 			resolution	= this->amrbamg->deviatoricerror_resolution;
+-			this->ZZErrorEstimator(&error_elements);
++			maxerror		= this->amrbamg->deviatoricerror_maximum;
++			this->ZZErrorEstimator(&error_elements);//error is serial, but the calculation is parallel
+ 			break;
+ 		default: _error_("not implemented yet");
+ 	}
+-
+ 	if(!error_elements) _error_("error_elements is NULL!\n");
+ 
++	/*Find the max of the estimators if it was not provided*/
++	if(maxerror<DBL_EPSILON){
++		for(int i=0;i<numberofelements;i++) maxerror=max(maxerror,error_elements[i]);
++		switch(errorestimator_type){
++      	case ThicknessErrorEstimatorEnum:			this->amrbamg->thicknesserror_maximum 	= maxerror;break;
++      	case DeviatoricStressErrorEstimatorEnum: 	this->amrbamg->deviatoricerror_maximum = maxerror;break;
++   	}	
++	}
++
+ 	/*Get mesh*/
+ 	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&index);
+-
+-	/*Find the max of the estimators (use error_elements)*/
+-	maxerror=error_elements[0];
+-	for(int i=0;i<numberofelements;i++) maxerror=max(maxerror,error_elements[i]);
+ 	
+-	/*Fill hmaxvertices*/
++	/*Fill error_vertices (this is the sum of all elements connected to the vertex)*/
+ 	for(int i=0;i<numberofelements;i++){
+-		if(error_elements[i]>threshold*maxerror){
+-			/*ok, fill the hmaxvertices using the element vertices*/
+-			for(int j=0;j<this->GetElementsWidth();j++){
+-				vid=index[i*this->GetElementsWidth()+j]-1;//Matlab to C indexing
++		v1=index[i*elementswidth+0]-1;//Matlab to C indexing
++		v2=index[i*elementswidth+1]-1;//Matlab to C indexing
++		v3=index[i*elementswidth+2]-1;//Matlab to C indexing
++		L1=sqrt(pow(x[v2]-x[v1],2)+pow(y[v2]-y[v1],2));
++		L2=sqrt(pow(x[v3]-x[v2],2)+pow(y[v3]-y[v2],2));
++		L3=sqrt(pow(x[v1]-x[v3],2)+pow(y[v1]-y[v3],2));
++		/*Fill the vectors*/
++		maxlength[i]		=max(L1,max(L2,L3));
++		error_vertices[v1]+=error_elements[i];
++		error_vertices[v2]+=error_elements[i];
++		error_vertices[v3]+=error_elements[i];
++	}	
++
++	/*Fill hmaxvertices with the criteria*/
++	for(int i=0;i<numberofelements;i++){
++		refine=false;
++		/*Refine any element if its error > phi*maxerror*/
++		if(error_elements[i]>threshold*maxerror) refine=true;
++		/*If the element size is closer to the resolution, verify the sum of error in the vertices*/
++		if(resolution/maxlength[i]>0.85){
++			for(int j=0;j<elementswidth;j++){
++				vid=index[i*elementswidth+j]-1;//Matlab to C indexing
++				if(error_vertices[vid]>0.005*maxerror) refine=true;//itapopo must be better defined
++			}
++		}
++		/*Now, fill the hmaxvertices if requested*/	  
++		if(refine){
++			for(int j=0;j<elementswidth;j++){
++				vid=index[i*elementswidth+j]-1;//Matlab to C indexing
+ 				if(xIsNan<IssmDouble>(hmaxvertices[vid])) hmaxvertices[vid]=resolution;
+ 				else hmaxvertices[vid]=min(resolution,hmaxvertices[vid]);
+ 			}
+@@ -4657,6 +4694,8 @@
+ 	xDelete<IssmDouble>(z);
+ 	xDelete<int>(index);
+    xDelete<IssmDouble>(error_elements);
++   xDelete<IssmDouble>(error_vertices);
++   xDelete<IssmDouble>(maxlength);
+ }
+ /*}}}*/
+ void FemModel::GetVerticeDistanceToZeroLevelSet(IssmDouble** pverticedistance,int levelset_type){/*{{{*/
+@@ -4713,9 +4752,10 @@
+ 	/*pnewelementslist keep vertices in Matlab indexing*/
+    int my_rank						= IssmComm::GetRank();
+    int numberofelements			= this->elements->NumberOfElements();
+-	IssmDouble* element_label	= xNewZeroInit<IssmDouble>(numberofelements);
+-	int numberofpoints			= -1;
+-	IssmDouble* xylist			= NULL;
++	IssmDouble* gl_distance		= NULL;
++	IssmDouble* if_distance		= NULL;
++	IssmDouble* deviatoricerror= NULL;
++	IssmDouble* thicknesserror	= NULL;
+ 	IssmDouble* newx				= NULL;
+    IssmDouble* newy				= NULL;
+    IssmDouble* newz				= NULL;
+@@ -4723,16 +4763,16 @@
+    int newnumberofvertices		= -1;
+ 	int newnumberofelements		= -1;
+ 
+-	/*Get element_label, if requested*/
+-	if(this->amr->groundingline_distance>0)		this->GetElementLabelFromZeroLevelSet(element_label,MaskGroundediceLevelsetEnum);
+-   if(this->amr->icefront_distance>0)				this->GetElementLabelFromZeroLevelSet(element_label,MaskIceLevelsetEnum);
+-   if(this->amr->thicknesserror_threshold>0)		this->GetElementLabelFromEstimators(element_label,ThicknessErrorEstimatorEnum);
+-   if(this->amr->deviatoricerror_threshold>0)	this->GetElementLabelFromEstimators(element_label,DeviatoricStressErrorEstimatorEnum);
+-	this->GetPointsFromElementLabel(element_label,&numberofpoints,&xylist);
+-
++	/*Get fields, if requested*/
++	if(this->amr->groundingline_distance>0)		this->GetElementDistanceToZeroLevelSet(&gl_distance,MaskGroundediceLevelsetEnum);
++   if(this->amr->icefront_distance>0)				this->GetElementDistanceToZeroLevelSet(&if_distance,MaskIceLevelsetEnum);
++   if(this->amr->thicknesserror_threshold>0)		this->ThicknessZZErrorEstimator(&thicknesserror);	
++	if(this->amr->deviatoricerror_threshold>0)	this->ZZErrorEstimator(&deviatoricerror);	
++	
+ 	if(my_rank==0){
+-		this->amr->ExecuteRefinement(numberofpoints,xylist,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newelementslist);
+-      newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
++		this->amr->ExecuteRefinement(gl_distance,if_distance,deviatoricerror,thicknesserror,
++												&newnumberofvertices,&newnumberofelements,&newx,&newy,&newelementslist); 
++		newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the ReMeshNeopz.");
+ 	}
+ 	else{
+@@ -4759,8 +4799,10 @@
+ 	*pnewnumberofelements= newnumberofelements;
+ 
+ 	/*Cleanup*/
+-	xDelete<IssmDouble>(element_label);
+-	xDelete<IssmDouble>(xylist);
++	xDelete<IssmDouble>(deviatoricerror);
++	xDelete<IssmDouble>(thicknesserror);
++	xDelete<IssmDouble>(gl_distance);
++	xDelete<IssmDouble>(if_distance);
+ }
+ /*}}}*/
+ void FemModel::InitializeAdaptiveRefinementNeopz(void){/*{{{*/
+@@ -4804,6 +4846,7 @@
+    /*Initialize refinement pattern*/
+ 	this->SetRefPatterns();
+ 	this->amr = new AdaptiveMeshRefinement();
++	this->amr->refinement_type					= 1;//1 is refpattern; 0 is uniform (faster) 
+ 	this->amr->level_max							= level_max;
+ 	this->amr->radius_level_max				= radius_level_max;
+ 	this->amr->gradation							= gradation;
+@@ -4823,140 +4866,6 @@
+ 	xDelete<int>(elements);
+ }
+ /*}}}*/
+-void FemModel::GetPointsFromElementLabel(IssmDouble* element_label,int* pnumberofpoints,IssmDouble** pxylist){/*{{{*/
+-
+-	if(!element_label) _error_("element_label is NULL!\n");
+-
+-	/*Outputs*/
+-	int numberofpoints	= -1;
+-	IssmDouble* xylist	= NULL;
+-
+-	/*Intermediaries*/
+-   int numberofelements	= this->elements->NumberOfElements();
+-	int count				= -1;
+-   IssmDouble* xc			= NULL;
+-   IssmDouble* yc			= NULL;
+-
+-	/*First, find the number of labeled elements (points)*/
+-	count=0;
+-	for(int i=0;i<numberofelements;i++){ 
+-		if(element_label[i]>DBL_EPSILON) count++;
+-	}
+-	 
+-	/*Set number of points*/
+-	numberofpoints=count;
+-	if(count>0) xylist=xNew<IssmDouble>(2*numberofpoints);
+-	
+-	/*Get element center coordinates*/
+-	this->GetElementCenterCoordinates(&xc,&yc);
+-
+-	/*Now, fill xylist data*/
+-	count=0;
+-	for(int i=0;i<numberofelements;i++){
+-		if(element_label[i]>DBL_EPSILON){
+-			xylist[2*count]	= xc[i];			
+-			xylist[2*count+1]	= yc[i];
+-			count++;
+-		}
+-	}
+-
+-	/*Assign pointers*/
+-	(*pxylist)=xylist;
+-	*pnumberofpoints=numberofpoints;
+-
+-	/*Cleanup*/
+-	xDelete<IssmDouble>(xc);
+-	xDelete<IssmDouble>(yc);
+-}
+-/*}}}*/
+-void FemModel::GetElementLabelFromZeroLevelSet(IssmDouble* element_label,int levelset_type){/*{{{*/
+-
+-	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
+-	/*element_label is 1 if the element zero level set, NAN otherwise*/
+-	if(levelset_type!=MaskGroundediceLevelsetEnum && levelset_type!=MaskIceLevelsetEnum) _error_("level set type not implemented yet!");
+-	if(!element_label) _error_("element_label is NULL!\n");
+-	
+-	/*Intermediaries*/
+- 	int elementswidth                   	= this->GetElementsWidth();
+-   int numberofelements                	= this->elements->NumberOfElements();
+-	int* elem_vertices         				= xNew<int>(elementswidth);
+-   IssmDouble* levelset      					= xNew<IssmDouble>(elementswidth);
+-	Vector<IssmDouble>* velement_label		= new Vector<IssmDouble>(numberofelements);
+-	IssmDouble* element_label_serial			= NULL;
+-	int sid											= -1;
+-	IssmDouble label								= -1.;
+-
+-	/*Use the element center coordinate if level set is zero (grounding line or ice front), otherwise set NAN*/
+-   for(int i=0;i<this->elements->Size();i++){
+-      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-      element->GetInputListOnVertices(levelset,levelset_type);
+-		element->GetVerticesSidList(elem_vertices);
+-		sid	= element->Sid();
+-		label = NAN;	
+-     	Tria* tria 	= xDynamicCast<Tria*>(element);
+-		if(tria->IsIceInElement()){/*verify if there is ice in the element*/
+-			if(levelset[0]*levelset[1]<0. || levelset[0]*levelset[2]<0. ||	
+-				abs(levelset[0]*levelset[1])<DBL_EPSILON || abs(levelset[0]*levelset[2])<DBL_EPSILON) {
+-				label=1.;
+-			}
+-		}
+-		velement_label->SetValue(sid,label,INS_VAL);
+-	}
+-   
+-	/*Assemble and serialize*/
+-   velement_label->Assemble();
+-   element_label_serial=velement_label->ToMPISerial();
+-
+-	/*Merge with the output*/
+-   for(int i=0;i<numberofelements;i++){
+-		if(!xIsNan<IssmDouble>(element_label_serial[i])) element_label[i]=element_label_serial[i];
+-		else; //do nothing
+-	}
+-
+-	/*Cleanup*/
+-	xDelete<int>(elem_vertices);
+-   xDelete<IssmDouble>(levelset);
+-   xDelete<IssmDouble>(element_label_serial);
+-	delete velement_label;
+-}
+-/*}}}*/
+-void FemModel::GetElementLabelFromEstimators(IssmDouble* element_label,int estimator_type){/*{{{*/
+-
+-	/*element_label is 1 if the element zero level set, NAN otherwise*/
+-	if(!element_label) _error_("element_label is NULL!\n");
+-	
+-	/*Intermediaries*/
+-   int numberofelements			= this->elements->NumberOfElements();
+-   IssmDouble* elementerror	= NULL;
+-	IssmDouble threshold			= -1.;
+-	IssmDouble maxerror			= -1.;
+-
+-	switch(estimator_type){
+-		case ThicknessErrorEstimatorEnum: 
+-			threshold=this->amr->thicknesserror_threshold;
+-			this->ThicknessZZErrorEstimator(&elementerror);
+-			break;
+-		case DeviatoricStressErrorEstimatorEnum:
+-			threshold=this->amr->deviatoricerror_threshold;
+-			this->ZZErrorEstimator(&elementerror);
+-			break;
+-		default: _error_("not implemented yet");
+-	}
+-
+-	/*Find the max of the estimators*/
+-	maxerror=elementerror[0];
+-	for(int i=0;i<numberofelements;i++) maxerror=max(maxerror,elementerror[i]);
+-	
+-	/*Merge with the output*/
+-   for(int i=0;i<numberofelements;i++){
+-		if(elementerror[i]>threshold*maxerror) element_label[i]=1.;
+-		else; //do nothing
+-	}
+-
+-	/*Cleanup*/
+-	xDelete<IssmDouble>(elementerror);
+-}
+-/*}}}*/
+ void FemModel::GetElementDistanceToZeroLevelSet(IssmDouble** pelementdistance,int levelset_type){/*{{{*/
+ 
+ 	/*Here, "zero level set" means grounding line or ice front, depending on the level set type*/
+@@ -4969,36 +4878,46 @@
+ 	IssmDouble* elementdistance;
+ 	
+ 	/*Intermediaries*/
+-   int numberofelements       = this->elements->NumberOfElements();
+-   IssmDouble* levelset_points= NULL;
+-   IssmDouble* xc					= NULL;
+-   IssmDouble* yc					= NULL;
++   int numberofelements							= this->elements->NumberOfElements();
++   Vector<IssmDouble>* velementdistance	= new Vector<IssmDouble>(numberofelements);
++   IssmDouble* levelset_points				= NULL;
++	IssmDouble* xyz_list							= NULL;
++	IssmDouble mindistance,distance;
++	IssmDouble xc,yc,x1,y1,x2,y2,x3,y3;
+ 	int numberofpoints;
+-	IssmDouble distance;
+-
+-	/*Get element center coordinates*/
+-	this->GetElementCenterCoordinates(&xc,&yc);
+ 	
+-	/*Get points which level set is zero (center of elements with zero level set)*/	
++	/*Get points which level set is zero (center of elements with zero level set, levelset_points is serial)*/	
+ 	this->GetZeroLevelSetPoints(&levelset_points,numberofpoints,levelset_type);
+ 
+-	/*Find the minimal element distance to the zero levelset (grounding line or ice front)*/
+-	elementdistance=xNew<IssmDouble>(numberofelements);
+-	for(int i=0;i<numberofelements;i++){
+-		elementdistance[i]=INFINITY;
++	for(int i=0;i<this->elements->Size();i++){//parallel
++      Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++      int sid = element->Sid();
++		element->GetVerticesCoordinates(&xyz_list); 
++		x1 = xyz_list[3*0+0];y1 = xyz_list[3*0+1];
++		x2 = xyz_list[3*1+0];y2 = xyz_list[3*1+1];
++		x3 = xyz_list[3*2+0];y3 = xyz_list[3*2+1];
++		xc = (x1+x2+x3)/3.;
++		yc = (y1+y2+y3)/3.;
++		mindistance=INFINITY;
++		/*Loop over each point (where level set is zero)*/
+ 		for(int j=0;j<numberofpoints;j++){
+-			distance=sqrt((xc[i]-levelset_points[2*j])*(xc[i]-levelset_points[2*j])+(yc[i]-levelset_points[2*j+1])*(yc[i]-levelset_points[2*j+1]));
+-			elementdistance[i]=min(distance,elementdistance[i]);		
++			distance =sqrt((xc-levelset_points[2*j])*(xc-levelset_points[2*j])+(yc-levelset_points[2*j+1])*(yc-levelset_points[2*j+1]));
++			mindistance=min(distance,mindistance);		
+ 		}
++		velementdistance->SetValue(sid,mindistance,INS_VAL);
++		xDelete<IssmDouble>(xyz_list);
+ 	}	
+ 
++   /*Assemble*/
++   velementdistance->Assemble();
++
+ 	/*Assign the pointer*/
+-	(*pelementdistance)=elementdistance;
++	(*pelementdistance)=velementdistance->ToMPISerial();
+ 
+ 	/*Cleanup*/
+    xDelete<IssmDouble>(levelset_points);
+-   xDelete<IssmDouble>(xc);
+-   xDelete<IssmDouble>(yc);
++   xDelete<IssmDouble>(xyz_list);
++	delete velementdistance;
+ }
+ /*}}}*/
+ void FemModel::SetRefPatterns(){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22240)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22241)
+@@ -53,6 +53,7 @@
+ 	 * to unirefine
+ 	 * radius_h = lag * initial_radius * gradation ^ (level_max-h)
+ 	 */
++	int refinement_type;						//0 uniform (faster); 1 refpattern  
+ 	int level_max;								//max level of refinement
+ 	double radius_level_max;				//initial radius which in the elements will be refined with level max
+ 	double gradation;							//geometric progression ratio to calculate radius of level h
+@@ -62,6 +63,8 @@
+ 	double icefront_distance;				//if icefront_distance>initial_radius, icefront_distance will be used instead initial_radius
+ 	double thicknesserror_threshold;		//if ==0, it will not be used
+ 	double deviatoricerror_threshold;	//if ==0, it will not be used
++	double max_deviatoricerror;			// Max value of the error estimator; in general, it is defined in the first time step. Attention with restart
++	double max_thicknesserror;				// Max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+ 	/*}}}*/
+ 	/*Public methods{{{*/
+ 	/* Constructor, destructor etc*/
+@@ -73,23 +76,23 @@
+ 	void CleanUp();
+ 	void Initialize();
+ 	void ExecuteRefinement(int numberofpoints,double* xylist,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
+-	void ExecuteRefinement(double* gl_elementdistance,double* if_elementdistance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
++	void ExecuteRefinement(int numberofpoints,double* xylist,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
++   void ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int* pnewnumberofvertices,int* pnewnumberofelements,double** px,double** py,int** pelementslist);
+ 	void CreateInitialMesh(int &nvertices,int &nelements,double* x,double* y,int* elements);
+ 	void CheckMesh(int* nvertices,int* nelements,double** px,double** py,int** pelements);
+ 	/*}}}*/
+ private:
+ 	/*Private attributes{{{*/
+-	std::vector<int> sid2index;									// Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid) 
+-	std::vector<int> index2sid;									// Vector that keeps sid of issm mesh elements used in the neopz mesh (index) 
+-	std::vector<int> specialelementsindex;						// Vector that keeps index of the special elements (created to avoid haning nodes) 
+-	TPZGeoMesh *fathermesh;											// Father Mesh is the entire mesh without refinement
+-	TPZGeoMesh *previousmesh;										// Previous Mesh is the refined mesh
++	std::vector<int> sid2index;					// Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid) 
++	std::vector<int> index2sid;					// Vector that keeps sid of issm mesh elements used in the neopz mesh (index) 
++	std::vector<int> specialelementsindex;		// Vector that keeps index of the special elements (created to avoid haning nodes) 
++	TPZGeoMesh *fathermesh;							// Entire mesh without refinement if refinement_type==1; refined with hanging nodes if efinement_type==0
++	TPZGeoMesh *previousmesh;						// Refined mesh without hanging nodes (it is always refpattern type), used to generate ISSM mesh
+ 	/*}}}*/
+ 	/*Private methods{{{*/
+-   void RefinementProcess(bool &verbose,double* partiallyfloatedelements,double* masklevelset,double* deviatorictensorerror,double* thicknesserror);
+-	void RefineMesh(bool &verbose,TPZGeoMesh* gmesh,int numberofpoints,double* xylist);
+-	void RefineMesh(TPZGeoMesh *gmesh,std::vector<int> &elements); 
+-   void RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh);
++   void RefineMeshOneLevel(bool &verbose,double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror);
++	void RefineMeshWithSmoothing(bool &verbose,TPZGeoMesh* gmesh);
++	void RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh);
+ 	void DeleteSpecialElements(bool &verbose,TPZGeoMesh* gmesh);
+ 	void GetMesh(TPZGeoMesh* gmesh,int* nvertices,int* nelements,double** px,double** py,int** pelements);
+ 	TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
+@@ -97,6 +100,7 @@
+ 	inline int GetNumberOfNodes(){return 3;}
+ 	void PrintGMeshVTK(TPZGeoMesh *gmesh,std::ofstream &file,bool matColor=true);
+ 	int GetVTK_ElType(TPZGeoEl* gel);
++	int VerifyRefinementType(TPZGeoEl* geoel);
+ 	/*}}}*/
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22240)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22241)
+@@ -192,9 +192,6 @@
+ 		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		void ReMeshNeopz(int* pnewnumberofvertices,int* pnewnumberofelements,IssmDouble** pnewx,IssmDouble** pnewy,IssmDouble** pnewz,int** pnewelementslist);
+ 		void InitializeAdaptiveRefinementNeopz(void);
+-		void GetPointsFromElementLabel(IssmDouble* element_label,int* numberofpoints,IssmDouble** xylist);
+-		void GetElementLabelFromZeroLevelSet(IssmDouble* element_label,int levelset_type);
+-		void GetElementLabelFromEstimators(IssmDouble* element_label,int estimator_type);	
+ 		void GetElementDistanceToZeroLevelSet(IssmDouble** pelementdistance,int levelset_type);
+ 		void SetRefPatterns(void);
+ 		#endif
+Index: ../trunk-jpl/src/m/classes/amr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.m	(revision 22240)
++++ ../trunk-jpl/src/m/classes/amr.m	(revision 22241)
+@@ -17,8 +17,11 @@
+ 		icefront_distance = 0.;
+ 		thicknesserror_resolution = 0.;
+ 		thicknesserror_threshold = 0.;
++		thicknesserror_maximum = 0.;
+ 		deviatoricerror_resolution = 0.;
+ 		deviatoricerror_threshold = 0.;
++		deviatoricerror_maximum = 0.;
++		restart=0.;
+ 	end
+ 	methods (Static)
+  		function self = loadobj(self) % {{{
+@@ -85,8 +88,13 @@
+ 			self.icefront_distance=0.;
+ 			self.thicknesserror_resolution=500.;
+ 			self.thicknesserror_threshold=0.;
++			self.thicknesserror_maximum=0.;
+ 			self.deviatoricerror_resolution=500.;
+ 			self.deviatoricerror_threshold=0.;
++			self.deviatoricerror_maximum=0.;
++			
++			%is restart? This calls femmodel->ReMesh() before first time step. 
++			self.restart=0;
+ 
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+@@ -102,8 +110,11 @@
+ 			md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   amr parameters:'));
+@@ -119,9 +130,11 @@
+ 			fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
+ 			fielddisplay(self,'thicknesserror_resolution',['element length when thickness error estimator is used']);
+ 			fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++			fielddisplay(self,'thicknesserror_maximum',['maximum thickness error permitted']);
+ 			fielddisplay(self,'deviatoricerror_resolution',['element length when deviatoric stress error estimator is used']);
+ 			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
+-
++			fielddisplay(self,'deviatoricerror_maximum',['maximum deviatoricstress error permitted']);
++			fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']);
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+@@ -138,8 +151,11 @@
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_resolution','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_maximum','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_resolution','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_maximum','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer');
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/amr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.py	(revision 22240)
++++ ../trunk-jpl/src/m/classes/amr.py	(revision 22241)
+@@ -23,8 +23,10 @@
+         self.icefront_distance 			= 0.
+         self.thicknesserror_resolution = 0.
+         self.thicknesserror_threshold 	= 0.
++        self.thicknesserror_maximum 	= 0.
+         self.deviatoricerror_resolution= 0.
+         self.deviatoricerror_threshold = 0.
++        self.deviatoricerror_maximum	= 0.
+         #set defaults
+         self.setdefaultparameters()
+     #}}}
+@@ -41,8 +43,10 @@
+         string="%s\n%s"%(string,fielddisplay(self,"icefront_distance","distance around the ice front which elements will be refined"))
+         string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_resolution","element length when thickness error estimator is used"))
+         string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_threshold","maximum threshold thickness error permitted"))
++        string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_maximum","maximum thickness error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_resolution","element length when deviatoric stress error estimator is used"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_threshold","maximum threshold deviatoricstress error permitted"))
++        string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_maximum","maximum deviatoricstress error permitted"))
+         return string
+     #}}}
+     def setdefaultparameters(self): # {{{
+@@ -58,8 +62,10 @@
+         self.icefront_distance 			= 0
+         self.thicknesserror_resolution = 500.
+         self.thicknesserror_threshold 	= 0
++        self.thicknesserror_maximum 	= 0
+         self.deviatoricerror_resolution= 500.
+         self.deviatoricerror_threshold = 0
++        self.deviatoricerror_maximum	= 0
+         return self
+     #}}}
+     def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -73,8 +79,10 @@
+         md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+         md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+         md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++        md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+         md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+         md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);        
++        md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+         return md
+     # }}}
+     def marshall(self,prefix,md,fid):    # {{{
+@@ -91,6 +99,8 @@
+         WriteData(fid,prefix,'object',self,'fieldname','icefront_distance','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_resolution','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_threshold','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_maximum','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_resolution','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_threshold','format','Double'); 
++        WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_maximum','format','Double'); 
+     # }}}
+Index: ../trunk-jpl/src/m/classes/amr.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.js	(revision 22240)
++++ ../trunk-jpl/src/m/classes/amr.js	(revision 22241)
+@@ -18,8 +18,10 @@
+    	this.icefront_distance        	= 0;
+       this.thicknesserror_resolution	= 500;
+       this.thicknesserror_threshold 	= 0;
++      this.thicknesserror_maximum		= 0;
+       this.deviatoricerror_resolution	= 500;	
+       this.deviatoricerror_threshold	= 0;	
++      this.deviatoricerror_maximum		= 0;	
+ 	}// }}}
+ 	this.disp= function(){// {{{
+ 		console.log(sprintf('   amr parameters:'));
+@@ -34,8 +36,10 @@
+ 		fielddisplay(this,'icefront_distance','distance around the ice front which elements will be refined');
+ 		fielddisplay(this,'thicknesserror_resolution','element length when thickness error estimator is used');
+ 		fielddisplay(this,'thicknesserror_threshold','maximum threshold thickness error permitted');
++		fielddisplay(this,'thicknesserror_maximum','maximum thickness error permitted');
+ 		fielddisplay(this,'deviatoricerror_resolution','element length when deviatoric stress error estimator is used');
+ 		fielddisplay(this,'deviatoricerror_threshold','maximum threshold deviatoricstress error permitted');
++		fielddisplay(this,'deviatoricerror_maximum','maximum deviatoricstress error permitted');
+ 	}// }}}
+ 	this.classname= function(){// {{{
+ 		return "amr";
+@@ -52,8 +56,10 @@
+          checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+          checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+          checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 		} // }}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+          WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
+@@ -69,8 +75,10 @@
+          WriteData(fid,prefix,'object',this,'fieldname','icefront_distance','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_resolution','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_threshold','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_maximum','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_resolution','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_maximum','format','Double');
+ 		}//}}}
+ 		this.fix=function() { //{{{
+ 		}//}}}
+@@ -88,8 +96,10 @@
+ 	this.icefront_distance				= 0.;
+ 	this.thicknesserror_resolution	= 0.;
+ 	this.thicknesserror_threshold		= 0.;
++	this.thicknesserror_maximum		= 0.;
+ 	this.deviatoricerror_resolution	= 0.;
+ 	this.deviatoricerror_threshold	= 0.;
++	this.deviatoricerror_maximum		= 0.;
+ 
+ 	this.setdefaultparameters();
+ 	//}}}
+Index: ../trunk-jpl/src/m/contrib/tsantos/mismip/gl_position.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/mismip/gl_position.m	(revision 22240)
++++ ../trunk-jpl/src/m/contrib/tsantos/mismip/gl_position.m	(revision 22241)
+@@ -2,9 +2,15 @@
+ 
+ 		%initialization of some variables
+ 		data					= md.results.TransientSolution(step).MaskGroundediceLevelset;
+-		index					= md.results.TransientSolution(step).MeshElements;
+-		x						= md.results.TransientSolution(step).MeshX;
+-		y						= md.results.TransientSolution(step).MeshY;
++		if(isfield(md.results.TransientSolution,'MeshElements'))
++			index					= md.results.TransientSolution(step).MeshElements;
++			x						= md.results.TransientSolution(step).MeshX;
++			y						= md.results.TransientSolution(step).MeshY;
++		else
++			index					= md.mesh.elements;
++			x						= md.mesh.x;
++			y						= md.mesh.y;
++		end
+ 		numberofelements	= size(index,1);
+ 		elementslist		= 1:numberofelements;
+ 		c						= [];
+Index: ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m	(revision 22240)
++++ ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m	(revision 22241)
+@@ -1,34 +1,92 @@
+ %ga: grounded area
+ %iv: ice volume
+ %ivaf: ice volume above floatation
+-%GLy40 : grounding line position @ y=40km
++%GL_y : grounding line position @ y (y comes in m)
+ %nelem : number of elements
++% usage:
++%
++% Default: y=40km, i0=1
++% [ga iv ivaf GL_y nelem t] = ice_evolution(md);
++%
++% Default: y=40km
++% [ga iv ivaf GL_y nelem t] = ice_evolution(md,i0);
++%
++% Use this for y the borders (y=0 or y=ymax)
++% [ga iv ivaf GL_y nelem t] = ice_evolution(md,i0,y);
++%
++%
+ 
+-function [ga iv ivaf GLy40 nelem t] = ice_evolution(md),
++function [ga iv ivaf GL_y nelem t] = ice_evolution(varargin),
+ 
+ 	ga			= [];
+ 	iv			= [];
+ 	ivaf		= [];
+-	GLy40		= [];
++	GL_y		= [];
+ 	nelem		= [];
+ 	t			= [];
++
++	if(nargin==0)
++		error('it is necessary the model!')
++	elseif(nargin==1)
++		% Defoult is y=40km
++		i0	= 1;
++		y0	= 35000;
++		y1 = 45000;
++		dy = 100;
++		y  = 40000;
++	elseif(nargin==2)
++		i0=varargin{2};
++		% Defoult is y=40km
++		y0	= 35000;
++		y1 = 45000;
++		dy = 100;
++		y  = 40000;
++	elseif(nargin==3)
++		i0 = varargin{2};
++		y  = varargin{3};
++		dy = 10;
++		y0	= y-dy;
++		y1 = y+dy;
++	else
++		error('number of inputs is more than 3');
++	end
++	%set the model
++	md			=varargin{1};
+ 	nsteps	= length(md.results.TransientSolution);
+ 
+-	for i=1:nsteps,
++
++	for i=i0:nsteps,
+ 		ga(i)			= md.results.TransientSolution(i).GroundedArea;
+ 		iv(i)			= md.results.TransientSolution(i).IceVolume;
+ 		ivaf(i)		= md.results.TransientSolution(i).IceVolumeAboveFloatation;
+-		nelem(i)		= size(md.results.TransientSolution(i).MeshElements,1);
++		if(isfield(md.results.TransientSolution,'MeshElements'))
++			nelem(i)		= size(md.results.TransientSolution(i).MeshElements,1);
++		else
++			nelem(i)		= md.mesh.numberofelements;
++		end
+ 		t(i)			= md.results.TransientSolution(i).time;	
+-		%find GL position at y=40km
++		%find GL position between y0 and y1 
+ 		[glx gly]	= gl_position(md,i,0);
+-		pos=find(gly<45000 & gly > 35000);
+-		x=gly(pos);
+-		v=glx(pos);
+-		xq=[38000:100:42000];
+-		vq = interp1(x,v,xq,'linear');
+-		pos=find(xq==40000);
+-		GLy40(i)=vq(pos);
++		pos			= find(gly<y1 & gly>y0);
++		x				= gly(pos);
++		v				= glx(pos);
++		if(length(pos)==0)
++			error('pos is null')
++		elseif(length(pos)==1)
++			%this should be used for y=0 or y=ymax
++			GL_y(i)	= v;
++		else
++			%this should be used when y is inside the domain; so, use linear interpolation
++			xq			= [y0:dy:y1];
++			vq			= interp1(x,v,xq,'linear');
++			pos		= find(xq==y);
++			if(pos)
++				GL_y(i)	= vq(pos);
++			else
++				error('pos is null')
++			end
++		end
++
+ 	end
+ 
+ end
+Index: ../trunk-jpl/src/m/contrib/tsantos/remesh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/remesh.m	(revision 22240)
++++ ../trunk-jpl/src/m/contrib/tsantos/remesh.m	(revision 22241)
+@@ -57,7 +57,7 @@
+ NewModel.initialization.pressure    = md.results.TransientSolution(end).Pressure;
+ NewModel.geometry.surface				= md.results.TransientSolution(end).Surface;
+ NewModel.geometry.base					= md.results.TransientSolution(end).Base;
+-%NewModel.geometry.bed					= md.geometry.bed; %use from parameterize
++NewModel.geometry.bed					= md.results.TransientSolution(end).Bed;%md.geometry.bed; %use from parameterize
+ NewModel.geometry.thickness			= md.results.TransientSolution(end).Thickness;
+ NewModel.mask.groundedice_levelset  = md.results.TransientSolution(end).MaskGroundediceLevelset;
+     
+@@ -71,6 +71,7 @@
+ NewModel.verbose                = md.verbose;
+ NewModel.cluster                = md.cluster;
+ NewModel.transient              = md.transient;
++NewModel.amr                    = md.amr;
+ 
+ mdOut = NewModel;
+ 
+Index: ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m	(revision 22240)
++++ ../trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m	(revision 22241)
+@@ -59,10 +59,19 @@
+ for step=1:num_of_timesteps;
+ 	
+ 	timestep=step;
+-
+-	points=[model.results.TransientSolution(step).MeshX model.results.TransientSolution(step).MeshY zeros(size(model.results.TransientSolution(step).MeshX))];
++ 	if(isfield(model.results.TransientSolution,'MeshElements'))
++   	index = model.results.TransientSolution(step).MeshElements;
++   	x     = model.results.TransientSolution(step).MeshX;
++   	y     = model.results.TransientSolution(step).MeshY;
++   else
++   	index = model.mesh.elements;
++   	x     = model.mesh.x;
++   	y     = model.mesh.y;
++   end
++	
++	points=[x y zeros(size(x))];
+ 	[num_of_points,dim]=size(points);
+-	[num_of_elt]=size(model.results.TransientSolution(step).MeshElements,1);
++	[num_of_elt]=size(index,1);
+ 
+ 	fid = fopen(strcat(path,filesep,name,filesep,'timestep.vtk',int2str(timestep),'.vtk'),'w+');
+ 	fprintf(fid,'# vtk DataFile Version 2.0 \n');
+@@ -85,7 +94,7 @@
+ 		s=horzcat(s,{' %d'});
+   end
+ 	s=cell2mat(horzcat(s,{'\n'}));
+-		fprintf(fid,s,[(point_per_elt)*ones(num_of_elt,1)	model.results.TransientSolution(step).MeshElements-1]');
++		fprintf(fid,s,[(point_per_elt)*ones(num_of_elt,1) index-1]');
+ 	
+ 	fprintf(fid,'CELL_TYPES %d\n',num_of_elt);
+ 	s='%d\n';
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22241)
+@@ -25,7 +25,7 @@
+ 	int        timestepping;
+ 	int        output_frequency;
+ 	int        recording_frequency;
+-	int        domaintype,groundingline_migration,smb_model,amr_frequency;
++	int        domaintype,groundingline_migration,smb_model,amr_frequency,amr_restart;
+ 	int        numoutputs;
+ 	Analysis  *analysis          = NULL;
+ 	char     **requested_outputs = NULL;
+@@ -64,9 +64,11 @@
+ 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+ 
+-	#ifdef _HAVE_NEOPZ_
+-	bool ismismip = false;//itapopo testing restart 
+-	if(ismismip) femmodel->ReMesh();
++	#ifdef _HAVE_BAMG_ //#ifdef _HAVE_NEOPZ_ itapopo
++	if(amr_frequency){
++		femmodel->parameters->FindParam(&amr_restart,AmrRestartEnum);
++		if(amr_restart) femmodel->ReMesh();
++	}
+ 	#endif
+ 
+ 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22240)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22241)
+@@ -16,22 +16,23 @@
+ using namespace std;
+ 
+ /*Constructor, copy, clean up and destructor*/
+-AmrBamg::AmrBamg(IssmDouble hmin,IssmDouble hmax,int fieldenum_in,IssmDouble err_in,int keepmetric_in,IssmDouble gradation_in,
+-						IssmDouble groundingline_resolution_in,IssmDouble groundingline_distance_in,
+-						IssmDouble icefront_resolution_in,IssmDouble icefront_distance_in,
+-						IssmDouble thicknesserror_resolution_in,IssmDouble thicknesserror_threshold_in,
+-						IssmDouble deviatoricerror_resolution_in,IssmDouble deviatoricerror_threshold_in){/*{{{*/
++AmrBamg::AmrBamg(){/*{{{*/
+ 
+-	this->fieldenum    					= fieldenum_in;
+-	this->keepmetric   					= keepmetric_in;
+-	this->groundingline_resolution	= groundingline_resolution_in;
+-	this->groundingline_distance 		= groundingline_distance_in;
+-	this->icefront_resolution 			= icefront_resolution_in;
+-	this->icefront_distance 			= icefront_distance_in;
+-	this->thicknesserror_resolution 	= thicknesserror_resolution_in;
+-	this->thicknesserror_threshold 	= thicknesserror_threshold_in;
+-	this->deviatoricerror_resolution = deviatoricerror_resolution_in;
+-	this->deviatoricerror_threshold  = deviatoricerror_threshold_in;
++	/*These attributes MUST be setup by FemModel*/
++	this->fieldenum    					= -1;//fieldenum_in;
++	this->keepmetric   					= -1;//keepmetric_in;
++	this->groundingline_resolution	= -1;//groundingline_resolution_in;
++	this->groundingline_distance 		= -1;//groundingline_distance_in;
++	this->icefront_resolution 			= -1;//icefront_resolution_in;
++	this->icefront_distance 			= -1;//icefront_distance_in;
++	this->thicknesserror_resolution 	= -1;//thicknesserror_resolution_in;
++	this->thicknesserror_threshold 	= -1;//thicknesserror_threshold_in;
++	this->thicknesserror_maximum		= -1;
++	this->deviatoricerror_resolution = -1;//deviatoricerror_resolution_in;
++	this->deviatoricerror_threshold  = -1;//deviatoricerror_threshold_in;
++	this->deviatoricerror_maximum		= -1;
++	
++	/*Geometry and mesh as NULL*/
+ 	this->geometry     					= NULL;
+ 	this->fathermesh   					= NULL;
+ 	this->previousmesh 					= NULL;
+@@ -42,7 +43,7 @@
+ 	this->options->cutoff            = 10.e-5;
+ 	this->options->coeff             = 1;
+ 	this->options->errg              = 0.1;
+-	this->options->gradation         = gradation_in;
++	this->options->gradation         = -1; //MUST be setup by the FemModel 
+ 	this->options->Hessiantype       = 0;
+ 	this->options->maxnbv            = 1e6;
+ 	this->options->maxsubdiv         = 10;
+@@ -53,15 +54,14 @@
+ 	this->options->power             = 1;
+ 	this->options->verbose           = 0;
+ 	this->options->Crack             = 0;
+-	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!!*/
++	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!! This avoid numerical errors when remeshing*/
+ 	this->options->splitcorners      = 1;
+-	this->options->hmin              = hmin;
+-	this->options->hmax              = hmax;
+-
+-	this->options->err=xNew<IssmDouble>(1);
+-	this->options->errSize[0]=1;
+-	this->options->errSize[1]=1;
+-	this->options->err[0] = err_in;
++	this->options->hmin              = -1;/*MUST be setup by the FemModel*/
++	this->options->hmax              = -1;/*MUST be setup by the FemModel*/
++	this->options->err					= xNew<IssmDouble>(1);
++	this->options->err[0]				= -1;/*MUST be setup by the FemModel*/
++	this->options->errSize[0]			= 1;
++	this->options->errSize[1]			= 1;
+ }
+ /*}}}*/
+ AmrBamg::~AmrBamg(){/*{{{*/
+@@ -173,3 +173,12 @@
+ 	*pz = z;
+ 	*pelementslist = elementslist;
+ }/*}}}*/
++void AmrBamg::SetBamgOpts(IssmDouble hmin_in,IssmDouble hmax_in,IssmDouble err_in,IssmDouble gradation_in){/*{{{*/
++
++	if(!this->options) _error_("AmrBamg->options is NULL!");
++	
++	this->options->hmin     = hmin_in; 
++	this->options->hmax     = hmax_in; 
++	this->options->err[0]	= err_in; 
++	this->options->gradation= gradation_in; 
++}/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22241-22242.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22241-22242.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22241-22242.diff	(revision 22755)
@@ -0,0 +1,152 @@
+Index: ../trunk-jpl/src/m/classes/amrneopz.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrneopz.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/amrneopz.m	(revision 22242)
+@@ -0,0 +1,147 @@
++%AMRNEOPZ Class definition
++%
++%   Usage:
++%      md.amr=amrneopz();
++
++classdef amrneopz
++	properties (SetAccess=public) 
++		level_max						= 0; 
++		radius_level_max				= 0;
++		gradation						= 0;
++      lag 								= 0;
++		groundingline_distance 		= 0;
++      icefront_distance 			= 0;
++      thicknesserror_threshold 	= 0;
++      thicknesserror_maximum		= 0;
++		deviatoricerror_threshold 	= 0;
++		deviatoricerror_maximum		= 0;
++		restart							= 0;
++	end
++   methods (Static)
++      %function self = loadobj(self) % {{{
++         % This function is directly called by matlab when a model object is
++         % loaded. Update old properties here
++
++			%if verLessThan('matlab','7.9'),
++         %   disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++         %   disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++            % This is a Matlab bug: all the fields of md have their default value
++            % Example of error message:
++            % Warning: Error loading an object of class 'model':
++            % Undefined function or method 'exist' for input arguments of type 'cell'
++            %
++            % This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			%end
++
++         %2017 September 15th
++         %if isstruct(self),
++         %   disp('WARNING: updating amr');
++         %   disp('         md.amr.region_level_max is now md.amr.radius_level_max');
++         %   disp('         md.amr.region_level_1 is not being used; now gradation is used instead');
++         %   obj2 						= self;
++         %   self 						= amr();
++         %   %Converting region_level_1 to gradation
++			%	if(obj2.region_level_max>0 && obj2.region_level_1>obj2.region_level_max) 
++			%		alpha=0;
++			%		if(obj2.level_max>1) alpha=log(obj2.region_level_1/obj2.region_level_max)/(obj2.level_max-1);end
++			%		self.radius_level_max			= obj2.region_level_max;
++			%		self.level_max						= obj2.level_max;
++			%		self.gradation						= exp(alpha);
++         %   	self.lag								= 1.0;
++			%		self.groundingline_distance 	= 0;
++			%		self.icefront_distance 			= 0;
++			%		self.thicknesserror_threshold = 0;
++			%		self.deviatoricerror_threshold= 0;
++			%	end
++         %end
++
++      %end% }}}
++   end
++	methods
++		function self = amrneopz(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%filter parameters:
++			self.level_max			= 2;
++			self.radius_level_max= 10000;
++			self.gradation			= 1.5;
++			self.lag					= 1.1;
++		
++ 			%other criterias
++         self.groundingline_distance	= 10000;
++         self.icefront_distance			= 0;
++         self.thicknesserror_threshold = 0;
++			self.thicknesserror_maximum	= 0; 
++			self.deviatoricerror_threshold= 0;
++			self.deviatoricerror_maximum	= 0;
++			self.restart						= 0;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',5);
++			md = checkfield(md,'fieldname','amr.radius_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
++   		md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5.0,'NaN',1);
++   		md = checkfield(md,'fieldname','amr.lag','numel',[1],'>=',1.0,'<=',3.0,'NaN',1);
++         md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++         md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++         md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);			
++         md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);		
++		   md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1);
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   amrneopz parameters:'));
++
++			fielddisplay(self,'level_max',['maximum refinement level (1, 2, 3, 4 or 5)']);
++			fielddisplay(self,'radius_level_max',['region which will be refined with level_max [ m ]']);
++			fielddisplay(self,'gradation',['maximum ratio between two adjacent edges']);
++			fielddisplay(self,'lag',['lag used to unrefine the elements']);
++         fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
++         fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
++         fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++         fielddisplay(self,'thicknesserror_maximum',['maximum thickness error permitted']);
++			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
++			fielddisplay(self,'deviatoricerror_maximum',['maximum deviatoricstress error permitted']);
++         fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']);
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			WriteData(fid,prefix,'name','md.amr.type','data',2,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','level_max','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','radius_level_max','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','gradation','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','lag','format','Double');
++         WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
++         WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
++         WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++         WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_maximum','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_maximum','format','Double');
++		   WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejsdouble(fid,[modelname '.amr.level_max'],self.level_max);
++			writejsdouble(fid,[modelname '.amr.radius_level_max'],self.radius_level_max);
++			writejsdouble(fid,[modelname '.amr.gradation'],self.gradation);
++			writejsdouble(fid,[modelname '.amr.lag'],self.lag);
++			writejsdouble(fid,[modelname '.amr.groundingline_distance'],self.groundingline_distance);
++			writejsdouble(fid,[modelname '.amr.icefront_distance'],self.icefront_distance);
++			writejsdouble(fid,[modelname '.amr.thicknesserror_threshold'],self.thicknesserror_threshold);
++			writejsdouble(fid,[modelname '.amr.thicknesserror_maximum'],self.thicknesserror_maximum);
++			writejsdouble(fid,[modelname '.amr.deviatoricerror_threshold'],self.deviatoricerror_threshold);
++			writejsdouble(fid,[modelname '.amr.deviatoricerror_maximum'],self.deviatoricerror_maximum);
++			writejsdouble(fid,[modelname '.amr.restart'],self.restart);
++
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22242-22243.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22242-22243.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22242-22243.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22242)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22243)
+@@ -64,7 +64,7 @@
+ 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+ 
+-	#ifdef _HAVE_BAMG_ //#ifdef _HAVE_NEOPZ_ itapopo
++	#if defined(_HAVE_BAMG_) && !defined(_HAVE_ADOLC_)
+ 	if(amr_frequency){
+ 		femmodel->parameters->FindParam(&amr_restart,AmrRestartEnum);
+ 		if(amr_restart) femmodel->ReMesh();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22249-22250.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22249-22250.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22249-22250.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test244.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test244.m	(revision 22249)
++++ ../trunk-jpl/test/NightlyRun/test244.m	(revision 22250)
+@@ -110,7 +110,7 @@
+ 	md.results.dakota.moments=[md.results.dakota.moments md.results.dakota.dresp_out(i).stddev];
+ end
+ field_names     ={'moments'};
+-field_tolerances={1e-6};
++field_tolerances={1e-11};
+ field_values={...
+ 	md.results.dakota.moments,...
+ 	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22250-22251.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22250-22251.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22250-22251.diff	(revision 22755)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 22250)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 22251)
+@@ -39,7 +39,7 @@
+ 			R2                            pmin,pmax;             // extrema
+ 			double                        coefIcoor;             // coef to integer
+ 			ListofIntersectionTriangles   lIntTria;
+-			int                           randomseed;            //used for random number generation
++			long									randomseed;            //used for random number generation
+ 
+ 			long                          NbVerticesOnGeomVertex;
+ 			VertexOnGeom                 *VerticesOnGeomVertex;
+@@ -114,7 +114,7 @@
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
+-			int  RandomNumber(int max);
++			long  RandomNumber(long max);
+ 			void ReconstructExistingMesh();
+ 
+ 			//Inline methods
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22250)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22251)
+@@ -2691,7 +2691,7 @@
+ 
+ 		//Get Prime number
+ 		const long PrimeNumber= BigPrimeNumber(nbv);
+-		int  k0=this->RandomNumber(nbv);
++		long k0=this->RandomNumber(nbv);
+ 
+ 		//Build orderedvertices
+ 		for (i=0; i<nbv; i++){
+@@ -2795,7 +2795,7 @@
+ 
+ 		/*construction of a random order*/
+ 		const long PrimeNumber= BigPrimeNumber(nbv)  ;
+-		long k3 = long(this->RandomNumber(nbvnew));
++		long k3 = this->RandomNumber(nbvnew);
+ 		//loop over the new points
+ 		for (int is3=0; is3<nbvnew; is3++){
+ 			long j=nbvold +(k3 = (k3+PrimeNumber)%nbvnew);
+@@ -4689,7 +4689,7 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 	}
+ 	/*}}}*/
+-	int  Mesh::RandomNumber(int max){/*{{{*/
++	long  Mesh::RandomNumber(long max){/*{{{*/
+ 		/*  Generate a random number from 0 to max-1 using linear congruential
+ 		 *  random number generator*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22251-22252.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22251-22252.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22251-22252.diff	(revision 22755)
@@ -0,0 +1,687 @@
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22252)
+@@ -82,7 +82,7 @@
+ 	this->options->Check();
+ 
+ 	/*Read father mesh and create geometry*/
+-	Mesh* Th=new Mesh(elements,x,y,numberofvertices,numberofelements);
++	Mesh* Th=new Mesh(elements,x,y,numberofvertices,numberofelements,this->options);
+ 
+ 	/*Write geometry*/
+ 	this->geometry = new BamgGeom();
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 22251)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 22252)
+@@ -56,8 +56,8 @@
+ 
+ 			//Constructors/Destructors
+ 			Mesh(BamgGeom* bamggeom,BamgMesh* bamgmesh,BamgOpts* bamgopts);
+-			Mesh(int* index,double* x,double* y,int nods,int nels);/*MeshConvert*/
+-			Mesh(double* x,double* y,int nods); /*BamgTriangulate*/
++			Mesh(int* index,double* x,double* y,int nods,int nels,BamgOpts* bamgopts);/*MeshConvert*/
++			Mesh(double* x,double* y,int nods,BamgOpts* bamgopts); /*BamgTriangulate*/
+ 			Mesh(Mesh &,Geometry * pGh=0,Mesh* pBTh=0,long maxnbv_in=0 ); //copy operator
+ 			Mesh(const Mesh &,const int *flag,const int *bb,BamgOpts* bamgopts); // truncature
+ 			Mesh(long maxnbv,Mesh & BT,BamgOpts* bamgopts,int keepBackVertices=1);
+@@ -77,23 +77,23 @@
+ 			I2 R2ToI2(const R2 & P) const;
+ 			R2 I2ToR2(const I2 & P) const;
+ 			void AddVertex(BamgVertex & s,Triangle * t,long long *  =0) ;
+-			void Insert();
++			void Insert(BamgOpts* bamgopts);
+ 			void Echo(void);
+-			void ForceBoundary();
+-			void FindSubDomain(int OutSide=0);
++			void ForceBoundary(BamgOpts* bamgopts);
++			void FindSubDomain(BamgOpts* bamgopts,int OutSide=0);
+ 			long TriangleReferenceList(long*) const;
+ 			void TriangleIntNumbering(long* renumbering);
+ 			void CrackMesh(BamgOpts* bamgopts);
+-			void SmoothMetric(double raisonmax) ;
+-			void BoundAnisotropy(double anisomax,double hminaniso= 1e-100) ;
++			void SmoothMetric(BamgOpts* bamgopts,double raisonmax) ;
++			void BoundAnisotropy(BamgOpts* bamgopts,double anisomax,double hminaniso= 1e-100) ;
+ 			Edge** MakeGeomEdgeToEdge();
+ 			long SplitInternalEdgeWithBorderVertices();
+ 			void MakeBamgQuadtree();
+-			void MaxSubDivision(double maxsubdiv);
++			void MaxSubDivision(BamgOpts* bamgopts,double maxsubdiv);
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+-			long InsertNewPoints(long nbvold,long & NbTSwap); 
++			long InsertNewPoints(long nbvold,long & NbTSwap,BamgOpts* bamgopts); 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+-			void SmoothingVertex(int =3,double=0.3);
++			void SmoothingVertex(BamgOpts* bamgopts,int =3,double=0.3);
+ 			Metric MetricAt (const R2 &);
+ 			GeomEdge* ProjectOnCurve( Edge & AB, BamgVertex &  A, BamgVertex & B,double theta, BamgVertex & R,VertexOnEdge & BR,VertexOnGeom & GR);
+ 			long GetId(const Triangle & t) const;
+@@ -104,7 +104,7 @@
+ 			long GetId(const Edge * t) const;
+ 			BamgVertex* NearestVertex(int i,int j) ;
+ 			Triangle* TriangleFindFromCoord(const I2 & ,long long [3],Triangle *tstart=0);
+-			void ReadMesh(int* index,double* x,double* y,int nods,int nels);
++			void ReadMesh(int* index,double* x,double* y,int nods,int nels,BamgOpts* bamgopts);
+ 			void ReadMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts);
+ 			void WriteMesh(BamgMesh* bamgmesh,BamgOpts* bamgopts);
+ 			void ReadMetric(const BamgOpts* bamgopts);
+@@ -114,8 +114,8 @@
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
+-			long  RandomNumber(long max);
+-			void ReconstructExistingMesh();
++			long RandomNumber(long max);
++			void ReconstructExistingMesh(BamgOpts* bamgopts);
+ 
+ 			//Inline methods
+ 			inline  void CreateSingleVertexToTriangleConnectivity(){
+@@ -141,7 +141,7 @@
+ 		private:
+ 			void TriangulateFromGeom1(BamgOpts* bamgopts,int KeepVertices=1);// the real constructor mesh adaption
+ 			void TriangulateFromGeom0(BamgOpts* bamgopts);// the real constructor mesh generator
+-			void Triangulate(double* x,double* y,int nods);
++			void Triangulate(double* x,double* y,int nods,BamgOpts* bamgopts);
+ 			void Init(long);
+ 			int ForceEdge(BamgVertex &a, BamgVertex & b,AdjacentTriangle & taret) ;
+ 			int SwapForForcingEdge(BamgVertex   *  & pva ,BamgVertex  * &   pvb ,
+Index: ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 22252)
+@@ -149,13 +149,13 @@
+ 		}
+ 
+ 		//Smoothe metric
+-		BTh.SmoothMetric(bamgopts->gradation);
++		BTh.SmoothMetric(bamgopts,bamgopts->gradation);
+ 
+ 		//Control element subdivision
+-		BTh.MaxSubDivision(bamgopts->maxsubdiv);
++		BTh.MaxSubDivision(bamgopts,bamgopts->maxsubdiv);
+ 
+ 		//Bound anisotropy
+-		BTh.BoundAnisotropy(bamgopts->anisomax,hminaniso);
++		BTh.BoundAnisotropy(bamgopts,bamgopts->anisomax,hminaniso);
+ 
+ 		//Build new mesh
+ 		if (verbosity>1) _printf_("   Generating Mesh...\n");
+@@ -170,7 +170,7 @@
+ 		Th.TrianglesRenumberBySubDomain();
+ 
+ 		//Smooth vertices
+-		if(nbsmooth>0) Th.SmoothingVertex(nbsmooth,bamgopts->omega);
++		if(nbsmooth>0) Th.SmoothingVertex(bamgopts,nbsmooth,bamgopts->omega);
+ 
+ 		//display info
+ 		if(verbosity>0) {
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 22252)
+@@ -29,6 +29,7 @@
+ 	double areacoord[3];
+ 	double aa,bb;
+ 	long long dete[3];
++	BamgOpts* bamgopts=new BamgOpts();//if necessary debug bamg::Mesh, set bamgopts->verbose>5
+ 
+ 	/*Checks*/
+ 	if (M_data!=nods_data && M_data!=nels_data){
+@@ -48,7 +49,8 @@
+ 	data_interp=xNew<double>(N_interp*N_data);
+ 
+ 	/*read background mesh*/
+-	Mesh* Th=new Mesh(index_data,x_data,y_data,nods_data,nels_data); 
++	bamgopts->verbose=0;
++	Mesh* Th=new Mesh(index_data,x_data,y_data,nods_data,nels_data,bamgopts); 
+ 
+ 	/*Get reference number (for subdomains)*/
+ 	long* reft = xNew<long>(Th->nbt);
+@@ -165,6 +167,7 @@
+ 
+ 	/*clean-up and return*/
+ 	delete Th;
++	delete bamgopts;
+ 	xDelete<long>(reft);
+ 	xDelete<int>(connectivity);
+ 	*pdata_interp=data_interp;
+Index: ../trunk-jpl/src/c/modules/BamgConvertMeshx/BamgConvertMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgConvertMeshx/BamgConvertMeshx.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/modules/BamgConvertMeshx/BamgConvertMeshx.cpp	(revision 22252)
+@@ -16,7 +16,7 @@
+ 	BamgOpts* bamgopts=new BamgOpts();
+ 
+ 	/*read mesh*/
+-	Mesh Th(index,x,y,nods,nels); 
++	Mesh Th(index,x,y,nods,nels,bamgopts); 
+ 
+ 	/*write mesh and geometry*/
+ 	Th.Gh.WriteGeometry(bamggeom,bamgopts);
+Index: ../trunk-jpl/src/c/modules/BamgTriangulatex/BamgTriangulatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgTriangulatex/BamgTriangulatex.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/modules/BamgTriangulatex/BamgTriangulatex.cpp	(revision 22252)
+@@ -13,9 +13,10 @@
+ 
+ int BamgTriangulatex(int** pindex,int* pnels,double* x,double* y,int nods){
+ 
+-	Mesh Th(x,y,nods);
++	BamgOpts* bamgopts=new BamgOpts();//use bamgopts->verbose>5 to debug bamg::Mesh()
++	Mesh Th(x,y,nods,bamgopts);
+ 	Th.WriteIndex(pindex,pnels);
++	delete bamgopts;
+ 	//delete &Th;
+ 	return 0;
+-
+ }
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22251)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22252)
+@@ -36,19 +36,19 @@
+ 		SetIntCoor();
+ 
+ 		/*Fill holes and generate mesh properties*/
+-		ReconstructExistingMesh();
++		ReconstructExistingMesh(bamgopts);
+ 	}
+ 	/*}}}*/
+-	Mesh::Mesh(int* index,double* x,double* y,int nods,int nels):Gh(*(new Geometry())),BTh(*this){/*{{{*/
++	Mesh::Mesh(int* index,double* x,double* y,int nods,int nels,BamgOpts* bamgopts):Gh(*(new Geometry())),BTh(*this){/*{{{*/
+ 
+ 		Init(0);
+-		ReadMesh(index,x,y,nods,nels);
++		ReadMesh(index,x,y,nods,nels,bamgopts);
+ 		SetIntCoor();
+-		ReconstructExistingMesh();
++		ReconstructExistingMesh(bamgopts);
+ 	}
+ 	/*}}}*/
+-	Mesh::Mesh(double* x,double* y,int nods):Gh(*(new Geometry())),BTh(*this){/*{{{*/
+-		Triangulate(x,y,nods);
++	Mesh::Mesh(double* x,double* y,int nods,BamgOpts* bamgopts):Gh(*(new Geometry())),BTh(*this){/*{{{*/
++		Triangulate(x,y,nods,bamgopts);
+ 	}
+ 	/*}}}*/
+ 	Mesh::Mesh(const Mesh & Tho,const int *flag ,const int *bb,BamgOpts* bamgopts) : Gh(*(new Geometry())), BTh(*this) {/*{{{*/
+@@ -142,7 +142,7 @@
+ 		  BuildGeometryFromMesh(bamgopts);
+ 		  Gh.PostRead(); 
+ 		  SetIntCoor();
+-		  ReconstructExistingMesh();
++		  ReconstructExistingMesh(bamgopts);
+ 
+ 		  /*Final checks*/
+ 		  _assert_(kt==nbt);
+@@ -246,7 +246,7 @@
+ 	/*}}}*/
+ 
+ 	/*IO*/
+-	void Mesh::ReadMesh(int* index,double* x,double* y,int nods,int nels){/*{{{*/
++	void Mesh::ReadMesh(int* index,double* x,double* y,int nods,int nels,BamgOpts* bamgopts){/*{{{*/
+ 
+ 		long i1,i2,i3;
+ 		long i;
+@@ -257,6 +257,7 @@
+ 		nbv=nods;
+ 		maxnbv=nbv;
+ 		nbt=nels;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		//Vertices
+ 		if (verbose) _printf_("Reading vertices (" << nbv << ")\n");
+@@ -309,14 +310,17 @@
+ 	/*}}}*/
+ 	void Mesh::ReadMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts){/*{{{*/
+ 
+-		int    verbose;
++		int    verbose=0;
+ 		double Hmin = HUGE_VAL;    // the infinie value
+ 		long   i1,i2,i3;
+ 		long   i,j;
+ 		Metric M1(1);
+ 
+-		verbose=bamgopts->verbose;
++		/*Check needed pointer*/
++		_assert_(bamgmesh);
+ 
++		if(bamgopts) verbose=bamgopts->verbose;
++
+ 		nbv=bamgmesh->VerticesSize[0];
+ 		maxnbv=nbv;
+ 		nbt=bamgmesh->TrianglesSize[0];
+@@ -495,9 +499,13 @@
+ 		int* next_1=NULL;
+ 		int* connectivitysize_1=NULL;
+ 		int  connectivitymax_1=0;
++		int verbose=0;
++	
++		/*Check needed pointer*/
++		_assert_(bamgmesh);
+ 
+ 		/*Get options*/
+-		int verbose=bamgopts->verbose;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		/*Build reft that holds the number the subdomain number of each triangle, and the real numbering of the elements*/
+ 		long* reft = new long[nbt];
+@@ -897,8 +905,15 @@
+ 
+ 		/*Intermediary*/
+ 		int  i,j;
++		int verbose=0;
+ 
+-		if(bamgopts->verbose>3) _printf_("      processing metric\n");
++		/*Check pointer*/
++		_assert_(bamgopts);
++
++		/*Get options*/
++		verbose=bamgopts->verbose;
++
++		if(verbose>3) _printf_("      processing metric\n");
+ 		double hmin = Max(bamgopts->hmin,MinimalHmin());
+ 		double hmax = Min(bamgopts->hmax,MaximalHmax());
+ 		double coef = bamgopts->coeff;
+@@ -932,6 +947,7 @@
+ 	/*}}}*/
+ 	void Mesh::WriteMetric(BamgOpts* bamgopts) {/*{{{*/
+ 		int i;
++		_assert_(bamgopts);
+ 		xDelete<double>(bamgopts->metric);
+ 		bamgopts->metric=xNew<double>(3*nbv);
+ 		for (i=0;i<nbv;i++){
+@@ -984,6 +1000,9 @@
+ 		//  Hessiantype = 0 =>  H is computed using double L2 projection
+ 		//  Hessiantype = 1 =>  H is computed with green formula
+ 
++		/*Check pointer*/
++		_assert_(bamgopts);
++
+ 		/*Options*/
+ 		int Hessiantype=bamgopts->Hessiantype;
+ 
+@@ -1133,12 +1152,15 @@
+ 		}
+ 
+ 	}/*}}}*/
+-	void Mesh::BoundAnisotropy(double anisomax,double hminaniso) {/*{{{*/
++	void Mesh::BoundAnisotropy(BamgOpts* bamgopts,double anisomax,double hminaniso) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/BoundAnisotropy)*/
+ 
+-		long int verbose=0;
+-		double lminaniso = 1/ (Max(hminaniso*hminaniso,1e-100));
+-
++		int verbose=0;
++		double lminaniso = 1./ (Max(hminaniso*hminaniso,1e-100));
++	
++		//Get options
++		if(bamgopts) verbose=bamgopts->verbose;
++			
+ 		//display info
+ 		if (verbose > 1)  _printf_("   BoundAnisotropy by " << anisomax << "\n");
+ 
+@@ -1182,9 +1204,7 @@
+ 		int    verbose=0;
+ 
+ 		/*Recover options*/
+-		if(bamgopts){
+-			verbose=bamgopts->verbose;
+-		}
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		//display info
+ 		if (verbose>1) _printf_("   construction of the geometry from the 2d mesh\n");
+@@ -1515,7 +1535,7 @@
+ 		Gh.pmax +=  DD05;
+ 
+ 		//Build Gh.coefIcoor
+-		int MaxICoord = 1073741823; //2^30 - 1 = =111...111 (29 times one)
++		long MaxICoord = 1073741823; //2^30 - 1 = =111...111 (29 times one)
+ 		Gh.coefIcoor= (MaxICoord)/(Max(Gh.pmax.x-Gh.pmin.x,Gh.pmax.y-Gh.pmin.y));
+ 		if (Gh.coefIcoor<=0){
+ 			delete [] colorV;
+@@ -1621,11 +1641,14 @@
+ 		/*Options*/
+ 		double* s=NULL;
+ 		long    nbsol;
+-		int     verbose;
++		int     verbose=0;
+ 
+ 		int   i,j,k,iA,iB,iC;
+ 		int   iv;
+ 
++		/*Check pointer*/
++		_assert_(bamgopts);
++
+ 		/*Recover options*/
+ 		verbose=bamgopts->verbose;
+ 
+@@ -1829,6 +1852,9 @@
+ 		int NbJacobi;
+ 		int verbose;
+ 
++		/*Check pointer*/
++		_assert_(bamgopts);
++		
+ 		/*Recover options*/
+ 		verbose=bamgopts->verbose;
+ 		NbJacobi=bamgopts->nbjacobi;
+@@ -2127,9 +2153,10 @@
+ 		int i,j,k,num,count;
+ 		int i1,i2;
+ 		int j1,j2;
++		int verbose=0;
+ 
+ 		/*Options*/
+-		int verbose=bamgopts->verbose;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		//  computed the number of cracked edge
+ 		for (k=i=0;i<nbe;i++){
+@@ -2289,13 +2316,16 @@
+ 
+ 	}
+ 	/*}}}*/
+-	void Mesh::ForceBoundary() {/*{{{*/
++	void Mesh::ForceBoundary(BamgOpts* bamgopts) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ForceBoundary)*/
+ 
+-		long int verbose=2;
++		int verbose=0;
+ 		int k=0;
+ 		int nbfe=0,nbswp=0,Nbswap=0;
+ 
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
++
+ 		//display
+ 		if (verbose > 2) _printf_("   ForceBoundary  nb of edge: " << nbe << "\n");
+ 
+@@ -2331,11 +2361,14 @@
+ 		if (verbose > 3) _printf_("      number of inforced edge = " << nbfe << ", number of swap= " << Nbswap << "\n"); 
+ 	}
+ 	/*}}}*/
+-	void Mesh::FindSubDomain(int OutSide) {/*{{{*/
++	void Mesh::FindSubDomain(BamgOpts* bamgopts,int OutSide) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindSubDomain)*/
+ 
+ 		int verbose=0;
+ 
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
++
+ 		if (verbose >2){
+ 			if (OutSide) _printf_("   Find all external sub-domain\n"); 
+ 			else _printf_("   Find all internal sub-domain\n");
+@@ -2644,7 +2677,7 @@
+ 		} 
+ 	}
+ 	/*}}}*/
+-	void Mesh::Insert(){/*{{{*/
++	void Mesh::Insert(BamgOpts* bamgopts){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/Insert)*/
+ 
+ 		/*Insert points in the existing Geometry*/
+@@ -2651,9 +2684,10 @@
+ 
+ 		//Intermediary
+ 		int i;
++		int verbose=0;
+ 
+ 		/*Get options*/
+-		long int verbose=2;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		//Display info
+ 		if (verbose>2) _printf_("   Insert initial " << nbv << " vertices\n");
+@@ -2775,15 +2809,18 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap) {/*{{{*/
++	long Mesh::InsertNewPoints(long nbvold,long & NbTSwap,BamgOpts* bamgopts) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/InsertNewPoints)*/
+ 
+-		long int verbose=0;
+-		double seuil= 1.414/2 ;// for two close point 
++		int verbose=0;
++		double seuil= 1.414/2.;// for two close point 
+ 		long i;
+ 		long NbSwap=0;
+ 		long long det3[3];
+ 
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
++
+ 		//number of new points
+ 		const long nbvnew=nbv-nbvold;
+ 
+@@ -2910,10 +2947,14 @@
+ 		return Max(pmax.x-pmin.x,pmax.y-pmin.y);
+ 	}
+ 	/*}}}*/
+-	void  Mesh::MaxSubDivision(double maxsubdiv) {/*{{{*/
++	void  Mesh::MaxSubDivision(BamgOpts* bamgopts,double maxsubdiv) {/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/MaxSubDivision)*/
++		
++		/*Intermediaries*/
++		int verbose=0;
+ 
+-		long int verbose=0;
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		const  double maxsubdiv2 = maxsubdiv*maxsubdiv;
+ 		if(verbose>1) _printf_("   Limit the subdivision of a edges in the new mesh by " << maxsubdiv << "\n");
+@@ -2997,6 +3038,7 @@
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/NewPoints)*/
+ 
+ 		int i,j,k;
++		int verbose=0;
+ 		long NbTSwap=0;
+ 		long nbtold=nbt;
+ 		long nbvold=nbv;
+@@ -3006,7 +3048,7 @@
+ 		Triangle* t=NULL;
+ 
+ 		/*Recover options*/
+-		int verbose=bamgopts->verbose;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		/*First, insert old points if requested*/
+ 		if(KeepVertices && (&Bh != this) && (nbv+Bh.nbv< maxnbv)){
+@@ -3039,7 +3081,7 @@
+ 			}
+ 			//if(pointsoutside) _printf_("WARNING: One or more points of the initial mesh fall outside of the geometric boundary\n");
+ 			Bh.CreateSingleVertexToTriangleConnectivity();     
+-			InsertNewPoints(nbvold,NbTSwap);
++			InsertNewPoints(nbvold,NbTSwap,bamgopts);
+ 		}
+ 		else Bh.CreateSingleVertexToTriangleConnectivity();     
+ 
+@@ -3097,7 +3139,7 @@
+ 				} // end loop for each edge 
+ 			}// for triangle   
+ 
+-			if (!InsertNewPoints(nbvold,NbTSwap)) break;
++			if (!InsertNewPoints(nbvold,NbTSwap,bamgopts)) break;
+ 			for (i=nbtold;i<nbt;i++) first_np_or_next_t[i]=iter;
+ 			Headt = nbt; // empty list 
+ 
+@@ -3254,7 +3296,7 @@
+ 		return 0; // just for the compiler 
+ 	}                  
+ 	/*}}}*/
+-	void Mesh::ReconstructExistingMesh(){/*{{{*/
++	void Mesh::ReconstructExistingMesh(BamgOpts* bamgopts){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FillHoleInMesh)*/
+ 
+ 		/*This routine reconstruct an existing mesh to make it CONVEX:
+@@ -3268,6 +3310,9 @@
+ 		/*Intermediary*/
+ 		int verbose=0;
+ 
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
++
+ 		// generation of the integer coordinate
+ 
+ 		// find extrema coordinates of vertices pmin,pmax
+@@ -3450,7 +3495,7 @@
+ 			_error_("we lost " << nbloss << " existing edges other " << knbe);
+ 		}
+ 
+-		FindSubDomain(1);
++		FindSubDomain(bamgopts,1);
+ 		// remove all the hole 
+ 		// remove all the good sub domain
+ 		long krm =0;
+@@ -3524,7 +3569,7 @@
+ 		if (k) {
+ 			_error_("number of triangles edges alone = " << k);
+ 		}
+-		FindSubDomain();
++		FindSubDomain(bamgopts);
+ 
+ 		delete edge4;
+ 		delete [] st;
+@@ -3647,7 +3692,7 @@
+ 		pmax = pmax+DD; 
+ 
+ 		//Compute coefIcoor
+-		int MaxICoord = 1073741823; //2^30 - 1 = =111...111 (29 times one)
++		long MaxICoord = 1073741823; //2^30 - 1 = =111...111 (29 times one)
+ 		coefIcoor= (MaxICoord)/(Max(pmax.x-pmin.x,pmax.y-pmin.y));
+ 		if (coefIcoor<=0){
+ 			_error_("coefIcoor should be positive, a problem in the geometry is likely");
+@@ -3689,10 +3734,15 @@
+ 		if (number_of_errors) _error_("Fatal error: some triangles have negative areas, see above");
+ 	}
+ 	/*}}}*/
+-	void Mesh::SmoothingVertex(int nbiter,double omega ) { /*{{{*/
++	void Mesh::SmoothingVertex(BamgOpts* bamgopts,int nbiter,double omega ) { /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SmoothingVertex)*/
++		
++		/*Intermediaries*/
++		int verbose=0;
++	
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+-		long int verbose=0;
+ 		//  if quatree exist remove it end reconstruct
+ 		if (quadtree) delete quadtree;
+ 		quadtree=0;
+@@ -3729,10 +3779,14 @@
+ 		if (quadtree) quadtree= new BamgQuadtree(this);
+ 	}
+ 	/*}}}*/
+-	void Mesh::SmoothMetric(double raisonmax) { /*{{{*/
++	void Mesh::SmoothMetric(BamgOpts* bamgopts,double raisonmax) { /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/SmoothMetric)*/
++		
++		/*Intermediaries*/
++		int verbose=0;
+ 
+-		long int verbose=0;
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		if(raisonmax<1.1) return;
+ 		if(verbose > 1) _printf_("   Mesh::SmoothMetric raisonmax = " << raisonmax << "\n");
+@@ -4024,11 +4078,14 @@
+ 		return k;   
+ 	}
+ 	/*}}}*/
+-	void Mesh::Triangulate(double* x,double* y,int nods){/*{{{*/
++	void Mesh::Triangulate(double* x,double* y,int nods,BamgOpts* bamgopts){/*{{{*/
+ 
+ 		int verbose=0;
+ 		int i;
+ 		Metric M1(1);
++	
++		/*Get options*/
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		/*Initialize mesh*/
+ 		Init(nods);//this resets nbv to 0
+@@ -4046,7 +4103,7 @@
+ 		maxnbt=2*maxnbv-2; // for filling The Holes and quadrilaterals 
+ 
+ 		/*Insert Vertices*/
+-		Insert();
++		Insert(bamgopts);
+ 	}
+ 	/*}}}*/
+ 	void Mesh::TriangulateFromGeom0(BamgOpts* bamgopts){/*{{{*/
+@@ -4055,6 +4112,7 @@
+ 
+ 		/*Intermediaries*/
+ 		int                i,k;
++		int					 verbose=0;
+ 		int                nbcurves    = 0;
+ 		int                NbNewPoints,NbEdgeCurve;
+ 		double             lcurve,lstep,s;
+@@ -4069,7 +4127,7 @@
+ 		Gh.NbRef++;
+ 
+ 		/*Get options*/
+-		int verbose=bamgopts->verbose;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		//build background mesh flag (1 if background, else 0)
+ 		bool background=(&BTh != this);
+@@ -4347,15 +4405,15 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert();
++		Insert(bamgopts);
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+-		ForceBoundary();
++		ForceBoundary(bamgopts);
+ 
+ 		//Extract SubDomains
+ 		if (verbose>3) _printf_("         Extracting subdomains\n");
+-		FindSubDomain();
++		FindSubDomain(bamgopts);
+ 
+ 		if (verbose>3) _printf_("      Inserting internal points\n");
+ 		NewPoints(*this,bamgopts,0) ;
+@@ -4365,8 +4423,11 @@
+ 	void Mesh::TriangulateFromGeom1(BamgOpts* bamgopts,int KeepVertices){ /*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/GeomToTriangles1)*/
+ 
++		/*Intermediaries*/
++		int verbose=0;
++
+ 		/*Get options*/
+-		int verbose=bamgopts->verbose;
++		if(bamgopts) verbose=bamgopts->verbose;
+ 
+ 		Gh.NbRef++;// add a ref to Gh
+ 
+@@ -4674,15 +4735,15 @@
+ 		if (verbose>4) _printf_("      -- current number of vertices = " << nbv << "\n");
+ 		if (verbose>3) _printf_("      Creating initial Constrained Delaunay Triangulation...\n");
+ 		if (verbose>3) _printf_("         Inserting boundary points\n");
+-		Insert();
++		Insert(bamgopts);
+ 
+ 		//Force the boundary
+ 		if (verbose>3) _printf_("         Forcing boundaries\n");
+-		ForceBoundary();
++		ForceBoundary(bamgopts);
+ 
+ 		//Extract SubDomains
+ 		if (verbose>3) _printf_("         Extracting subdomains\n");
+-		FindSubDomain();
++		FindSubDomain(bamgopts);
+ 
+ 		if (verbose>3) _printf_("      Inserting internal points\n");
+ 		NewPoints(BTh,bamgopts,KeepVertices) ;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22252-22253.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22252-22253.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22252-22253.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/bamg/BamgVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 22252)
++++ ../trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 22253)
+@@ -113,7 +113,7 @@
+ 		long ret=0;
+ 		if ( t && (IndexInTriangle >= 0 ) && (IndexInTriangle <3) ){
+ 			ret = t->Optim(IndexInTriangle,koption);
+-			if(!i){
++			if(i==0){
+ 				t =0; // for no future optim
+ 				IndexInTriangle= 0;
+ 			}
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22252)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22253)
+@@ -2683,7 +2683,7 @@
+ 		/*Insert points in the existing Geometry*/
+ 
+ 		//Intermediary
+-		int i;
++		long i;
+ 		int verbose=0;
+ 
+ 		/*Get options*/
+@@ -2726,7 +2726,9 @@
+ 		//Get Prime number
+ 		const long PrimeNumber= BigPrimeNumber(nbv);
+ 		long k0=this->RandomNumber(nbv);
+-
++		if (verbose>4) _printf_("      Prime Number = "<<PrimeNumber<<"\n");
++		if (verbose>4) _printf_("      k0 = "<<k0<<"\n");
++		
+ 		//Build orderedvertices
+ 		for (i=0; i<nbv; i++){
+ 			orderedvertices[i]=&vertices[k0=(k0+PrimeNumber)%nbv];
+@@ -2740,6 +2742,7 @@
+ 			//all vertices are aligned!
+ 			if  (++i>=nbv) _error_("all the vertices are aligned");
+ 		}
++		if (verbose>4) _printf_("      i = "<<i<<"\n");
+ 		// exchange i et 2 in "orderedvertices" so that
+ 		// the first 3 vertices are not aligned (real triangle)
+ 		Exchange(orderedvertices[2], orderedvertices[i]);
+@@ -2782,8 +2785,9 @@
+ 		/*Now, add the vertices One by One*/
+ 		long NbSwap=0;
+ 		if (verbose>3) _printf_("   Begining of insertion process...\n");
++		if (verbose>4) _printf_("      nbv = "<<nbv<<"\n");
+ 
+-		for (int icount=2; icount<nbv; icount++) {
++		for (long icount=2; icount<nbv; icount++) {
+ 
+ 			//Get new vertex
+ 			BamgVertex *newvertex=orderedvertices[icount];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22253-22254.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22253-22254.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22253-22254.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test3103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.m	(revision 22253)
++++ ../trunk-jpl/test/NightlyRun/test3103.m	(revision 22254)
+@@ -15,7 +15,7 @@
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+ 	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-10};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22254-22255.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22254-22255.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22254-22255.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test3103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.m	(revision 22254)
++++ ../trunk-jpl/test/NightlyRun/test3103.m	(revision 22255)
+@@ -15,7 +15,7 @@
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+ 	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-10};
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-8};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22255-22256.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22255-22256.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22255-22256.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/test/NightlyRun/test4001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4001.m	(revision 22255)
++++ ../trunk-jpl/test/NightlyRun/test4001.m	(revision 22256)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=1:15;
++steps=1:11;
+ final_time=1;
+ 
+ %Organizer
+@@ -570,11 +570,8 @@
+             !\mv run run.old
+         end
+         !\mkdir run
+-		  disp('-------------- file: test4001.m line: 578'); 
+         !\cp ../MITgcm/build/mitgcmuv run
+-		  disp('-------------- file: test4001.m line: 580'); 
+         !\cp ../MITgcm/input/* run
+-		  disp('-------------- file: test4001.m line: 582'); 
+ 
+         %load data: 
+         loaddata(org,'Parameters');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22256-22257.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22256-22257.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22256-22257.diff	(revision 22755)
@@ -0,0 +1,901 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22257)
+@@ -0,0 +1,896 @@
++%Test Name: IceOceanDirectCoupling
++%ISSM/MITgcm coupled set-up
++%
++%Script control parameters
++steps=1:12;
++final_time=1;
++
++%Organizer
++mkdir Models
++org=organizer('repository','Models/','prefix','IceOcean.','steps',steps);
++
++presentdirectory=pwd; 
++
++% {{{ Parameters: 
++if perform(org,'Parameters'),
++	Nx=20; %number of longitude cells
++	Ny=40; %number of latitude cells
++	Nz=30; %number of MITgcm vertical cells
++	nPx=2; %number of MITgcm processes to use in x direction
++	nPy=4; %number of MITgcm processes to use in y direction
++	xgOrigin=0; %origin of longitude
++	ygOrigin=-80; %origin of latitude
++	dLong=.25; %longitude grid spacing
++	dLat=.05; %latitude grid spacing
++	delZ=30; %thickness of vertical levels
++	icefront_position_ratio=.75; 
++	ice_thickness=100;
++	rho_ice=917;
++	rho_water=1028.14;
++	di=rho_ice/rho_water;
++
++	% MITgcm initial and lateral boundary conditions
++	iniSalt  = 34.4; % initial salinity (PSU)
++	iniTheta = -1.9; % initial potential temperature (deg C)
++	obcSalt  = 34.4; % open boundary salinity (PSU)
++	obcTheta =  1.0; % open boundary potential temperature (deg C)
++	mlDepth  = 120.; % mixed layer depth (m)
++	mlSalt   = 33.4; % open boundary salinity (PSU)
++	mlTheta  = -1.9; % open boundary potential temperature (deg C)
++	obcUvel  = -0.1; % open boundary velocity (m/s)        
++
++	MITgcmDeltaT=600; % MITgcm time step in seconds
++	y2s=31536000; % year to seconds conversion, i.e., seconds per year
++
++	% start_time, final_time, and time_step
++	start_time=0; % in decimal years
++	time_step=1/12; % coupling interval in decimal years
++	async_step_MITgcm_multiplier=1/30; % used to reduce run time for MItgcm
++
++	% bedrock/bathymetry
++	hmax=1000;
++	trough_depth=200;
++	deltah=300;
++	sea_level=1095;
++
++	% issm settings:
++	numlayers=10;
++
++	savedata(org, Nx, Ny, nPx, nPy, Nz, dLong, dLat, delZ, xgOrigin, ...
++		ygOrigin, icefront_position_ratio, ice_thickness, rho_ice, ...
++		rho_water, di, hmax, trough_depth, deltah, sea_level, ...
++		iniSalt, iniTheta, obcSalt, obcTheta, mlDepth, mlSalt, ...
++		mlTheta, obcUvel, start_time, time_step, MITgcmDeltaT, y2s,...
++		numlayers,async_step_MITgcm_multiplier);
++end
++% }}}
++% {{{ Bathymetry: 
++if perform(org,'Bathymetry'),
++
++    loaddata(org,'Parameters');
++    %create lat,long
++    lat=(ygOrigin+dLat/2):dLat:(ygOrigin+Ny*dLat);
++    long=(xgOrigin+dLong/2):dLong:(xgOrigin+Nx*dLong);
++    [lat long]=meshgrid(lat,long);
++
++    longmin=min(long(:));
++    longmax=max(long(:));
++    latmin=min(lat(:));
++    latmax=max(lat(:));
++
++    %create bedrock/bathymetry:
++    bedrock=zeros(Nx,Ny);
++    bedrock=hmax-deltah*tanh(pi*(2*(lat-latmin)./(latmax-latmin)-1))+ ...
++            trough_depth*cos(2*pi*long./(longmax-longmin));
++
++    %save bathymetry file for MITgcm
++    bathymetry=bedrock-sea_level;
++    savedata(org,lat,long,bathymetry);
++
++end
++% }}}
++% {{{ IceSheetGeometry: 
++if perform(org,'IceSheetGeometry'),
++	
++	loaddata(org,'Parameters');
++	loaddata(org,'Bathymetry');
++	latmin=min(lat(:));
++	latmax=max(lat(:));
++
++	%put ice_thickness constant layer of ice over the bathymetry, unless it floats: 
++	s=size(bathymetry);
++	thickness=ice_thickness*ones(s);
++
++	%figure out ice shelf: 
++	pos=find(-di*thickness>bathymetry);
++	iceshelf_mask=zeros(s);
++	iceshelf_mask(pos)=1;
++
++	ice_mask=ones(s);
++	pos=find((lat-latmin)/(latmax-latmin)>(icefront_position_ratio));
++	ice_mask(pos)=0;
++	iceshelf_mask(pos)=0;
++
++	%compute draft of ice shelf: 
++	draft=bathymetry;
++	pos=find(iceshelf_mask);
++	draft(pos)=-di*thickness(pos);
++	pos=find(~ice_mask); 
++	draft(pos)=0;
++
++	savedata(org,ice_mask,iceshelf_mask,draft,thickness);
++end
++% }}}
++
++%Configure MITgcm
++% {{{ GetMITgcm: 
++if perform(org,'GetMITgcm'),
++  system([pwd '/../MITgcm/get_mitgcm.sh']);
++end
++% }}}
++% {{{ BuildMITgcm: 
++if perform(org,'BuildMITgcm'),
++
++    %load data: 
++    loaddata(org,'Parameters');
++
++    %specify computational grid in SIZE.h
++    fidi=fopen('../MITgcm/code/SIZE.h.bak','r');
++    fido=fopen('../MITgcm/code/SIZE.h','w');
++    tline = fgetl(fidi);
++    fprintf(fido,'%s\n',tline);
++    while 1
++        tline = fgetl(fidi);
++        if ~ischar(tline), break, end
++        %do the change here: 
++        if strcmpi(tline,'     &           sNx =  20,'),
++            fprintf(fido,'%s%i%s\n','     &           sNx =  ',round(Nx/nPx),',');
++            continue;
++        end
++        if strcmpi(tline,'     &           sNy =  20,'),
++            fprintf(fido,'%s%i%s\n','     &           sNy =  ',round(Ny/nPy),',');
++            continue;
++        end
++        if strcmpi(tline,'     &           nPx =   1,'),
++            fprintf(fido,'%s%i%s\n','     &           nPx = ',nPx,',');
++            continue;
++        end
++        if strcmpi(tline,'     &           nPy =   2,'),
++            fprintf(fido,'%s%i%s\n','     &           nPy = ',nPy,',');
++            continue;
++        end
++        fprintf(fido,'%s\n',tline);
++    end
++    %close  files
++    fclose(fidi);
++    fclose(fido);
++
++	 system(['../MITgcm/build.sh generic ' pwd '/../MITgcm']);
++end
++% }}}
++addpath(recursivepath([pwd '/../MITgcm']));
++% {{{ RunUncoupledMITgcm: 
++if perform(org,'RunUncoupledMITgcm'),
++
++    %load data: 
++    loaddata(org,'Parameters');
++    loaddata(org,'Bathymetry');
++    loaddata(org,'IceSheetGeometry');
++	 endtime = round(MITgcmDeltaT * ...
++		 floor(time_step*y2s*async_step_MITgcm_multiplier/MITgcmDeltaT));
++
++    % {{{ prepare MITgcm 
++    % rename previous run directory and create new one
++    if exist ('run.old')
++        !\rm -rf run.old
++    end
++    if exist ('run')
++        !\mv run run.old
++    end
++    !\mkdir run
++    !\cp ../MITgcm/build/mitgcmuv run
++    !\cp ../MITgcm/input/* run
++    
++    %load data: 
++    loaddata(org,'Parameters');
++
++    % initial salinity
++    S=iniSalt*ones(Nx,Ny,Nz);
++    writebin('run/Salt.bin',S);
++    
++    % initial temperature
++    T=iniTheta*ones(Nx,Ny,Nz);
++    writebin('run/Theta.bin',T);
++    
++    % initial velocity
++    Z=zeros(Nx,Ny,Nz);
++    writebin('run/Uvel.bin',Z);
++    writebin('run/Vvel.bin',Z);
++    
++    % initial sea surface height
++    Z=zeros(Nx,Ny);
++    writebin('run/Etan.bin',Z);
++
++    % salinity boundary conditions
++    S=obcSalt*ones(Ny,Nz);
++    thk=delZ*ones(Nz,1);
++    bot=cumsum(thk);
++    ik=find(bot<=mlDepth);
++    S(:,ik)=mlSalt;
++    writebin('run/OBs.bin',S);
++
++    % temperature boundary conditions
++    T=obcTheta*ones(Ny,Nz);
++    T(:,ik)=mlTheta;
++    writebin('run/OBt.bin',T);
++
++    % zonal velocity boundary conditions
++    U=obcUvel*ones(Ny,Nz);
++    writebin('run/OBu.bin',U);
++    
++    % zero boundary conditions
++    Z=zeros(Ny,Nz);
++    writebin('run/zeros.bin',Z);
++
++    % build parameter file data.obcs
++    fidi=fopen('../MITgcm/input/data.obcs','r');
++    fido=fopen('run/data.obcs','w');
++    tline = fgetl(fidi);
++    fprintf(fido,'%s\n',tline);
++    while 1
++        tline = fgetl(fidi);
++        if ~ischar(tline), break, end
++        %do the change here: 
++        if strcmpi(tline,' OB_Iwest = 40*1,'),
++            fprintf(fido,'%s%i%s\n',' OB_Iwest = ',Ny,'*1,');
++            continue;
++        end
++        if strcmpi(tline,' OB_Ieast = 40*-1,'),
++            fprintf(fido,'%s%i%s\n',' OB_Ieast = ',Ny,'*-1,');
++            continue;
++        end
++        fprintf(fido,'%s\n',tline);
++    end
++    %close  files
++    fclose(fidi);
++    fclose(fido);
++
++    %save bathymetry and bedrock in run directory
++    writebin('run/bathymetry.bin',bathymetry);
++    writebin('run/icetopo.bin',draft);
++    % }}}
++
++    %start looping:  
++    for t=start_time:time_step:final_time,
++        disp(['Year: ' num2str(t)])
++        % {{{ generate MITgcm parameter file data 
++        fidi=fopen('../MITgcm/input/data','r');
++        fido=fopen('run/data','w');
++        tline = fgetl(fidi);
++        fprintf(fido,'%s\n',tline);
++        while 1
++            tline = fgetl(fidi);
++            if ~ischar(tline), break, end
++            %do the change here: 
++            if strcmpi(tline,' xgOrigin = 0.0,'),
++                fprintf(fido,'%s%i%s\n',' xgOrigin = ',xgOrigin,',');
++                continue;
++            end
++            if strcmpi(tline,' ygOrigin = -80.0,'),
++                fprintf(fido,'%s%i%s\n',' ygOrigin = ',ygOrigin,',');
++                continue;
++            end
++            if strcmpi(tline,' delX = 20*0.25,'),
++                fprintf(fido,'%s%i*%g%s\n',' delX = ',Nx,dLong,',');
++                continue;
++            end
++            if strcmpi(tline,' delY = 20*0.25,'),
++                fprintf(fido,'%s%i*%g%s\n',' delY = ',Ny,dLat,',');
++                continue;
++            end
++            if strcmpi(tline,' delZ = 30*30.0,'),
++                fprintf(fido,'%s%i*%g%s\n',' delZ = ',Nz,delZ,',');
++                continue;
++            end
++            if strcmpi(tline,' endTime=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' endTime= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' deltaT=1200.0,'),
++                fprintf(fido,'%s%i%s\n',' deltaT= ',MITgcmDeltaT,',');
++                continue;
++            end
++            if strcmpi(tline,' pChkptFreq=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' pChkptFreq= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' taveFreq=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' taveFreq= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' rhoConst=1030.,'),
++                fprintf(fido,'%s%i%s\n',' rhoConst= ',rho_water,',');
++                continue;
++            end
++            if strcmpi(tline,' rhoNil=1030.,'),
++                fprintf(fido,'%s%i%s\n',' rhoNil= ',rho_water,',');
++                continue;
++            end
++            fprintf(fido,'%s\n',tline);
++        end
++        %close  files
++        fclose(fidi);
++        fclose(fido);
++        % }}}
++        % {{{ generate initial MITgcm conditions
++
++        ds=round(endtime/MITgcmDeltaT);
++        if t>start_time
++            % Read pickup file
++            fnm=['run/pickup.' myint2str(ds,10) '.data'];
++            U=readbin(fnm,[Nx Ny Nz],1,'real*8',0);
++            V=readbin(fnm,[Nx Ny Nz],1,'real*8',1);
++            T=readbin(fnm,[Nx Ny Nz],1,'real*8',2);
++            S=readbin(fnm,[Nx Ny Nz],1,'real*8',3);
++            E=readbin(fnm,[Nx Ny],1,'real*8',8*Nz);
++            writebin('run/Salt.bin' ,S);
++            writebin('run/Theta.bin',T);
++            writebin('run/Uvel.bin' ,U);
++            writebin('run/Vvel.bin' ,V);
++            writebin('run/Etan.bin' ,E);
++        end
++
++        % }}}
++        % {{{ system call to run MITgcm
++        cd run
++        eval(['!mpirun -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
++        ts=round((t+time_step)*y2s/MITgcmDeltaT);
++        eval(['!\mv STDERR.0000 STDERR_' myint2str(ts,10) '.data'])
++        eval(['!\mv STDOUT.0000 STDOUT_' myint2str(ts,10) '.data'])
++        eval(['!\cp hFacC.data hFacC_' myint2str(ts,10) '.data'])
++        eval(['!\cp icetopo.bin icetopo_' myint2str(ts,10) '.data'])
++        for fld={'S','T','U','V','Eta', ...
++                 'SHICE_heatFluxtave','SHICE_fwFluxtave'}
++            eval(['!\mv ' fld{1} '.' myint2str(ds,10) '.data ' ...
++                  fld{1} '_' myint2str(ts,10) '.data'])
++        end
++        cd ..
++        % }}}
++    end
++end
++% }}}
++
++%Configure ISSM
++% {{{ CreateMesh: 
++if perform(org,'CreateMesh'),
++	
++	loaddata(org,'Parameters');
++	loaddata(org,'Bathymetry');
++	loaddata(org,'IceSheetGeometry');
++
++	%create model: 
++	md=model();
++	
++	%Grab lat,long from MITgcm: 
++	lat=lat(:);
++	long=long(:);
++
++	%project lat,long: 
++	[x,y]=ll2xy(lat,long,-1);
++
++	index=[];
++	%  C  D
++	%  A  B 
++	for j=1:Ny-1,
++		for i=1:Nx-1, 
++			A=(j-1)*Nx+i;
++			B=(j-1)*Nx+i+1;
++			C=j*Nx+i;
++			D=j*Nx+i+1;
++			index(end+1,:)=[A B C];
++			index(end+1,:)=[C B D];
++		end
++	end
++
++	%fill mesh and model: 
++	md=meshconvert(md,index,x,y);
++	md.mesh.lat=lat;
++	md.mesh.long=long;
++
++	savemodel(org,md);
++
++end
++% }}}
++% {{{ MeshGeometry: 
++if perform(org,'MeshGeometry'),
++	
++	loaddata(org,'Parameters');
++	loaddata(org,'CreateMesh');
++	loaddata(org,'Bathymetry');
++	loaddata(org,'IceSheetGeometry');
++
++	%transfer to vertices: 
++	bathymetry=bathymetry(:);
++	iceshelf_mask=iceshelf_mask(:);
++	ice_mask=ice_mask(:);
++	thickness=thickness(:);
++	draft=draft(:);
++
++	%start filling some of the fields 
++	md.geometry.bed=bathymetry;
++	md.geometry.thickness=thickness;
++	md.geometry.base=md.geometry.bed; 
++	pos=find(iceshelf_mask); md.geometry.base(pos)=draft(pos);
++	md.geometry.surface=md.geometry.base+md.geometry.thickness;
++
++	%nothing passes icefront: 
++	pos=find(~ice_mask);
++	md.geometry.thickness(pos)=1;
++	md.geometry.surface(pos)=(1-di)*md.geometry.thickness(pos);
++	md.geometry.base(pos)=-di*md.geometry.thickness(pos);
++
++	%level sets: 
++	md.mask.groundedice_levelset=-ones(md.mesh.numberofvertices,1);
++	md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++
++	pos=find(ice_mask); md.mask.ice_levelset(pos)=-1; 
++	pos=find(~iceshelf_mask & ice_mask); md.mask.groundedice_levelset(pos)=1;
++
++	%identify edges of grounded ice: 
++	groundedice_levelset=md.mask.groundedice_levelset;
++	for i=1:md.mesh.numberofelements,
++		m=groundedice_levelset(md.mesh.elements(i,:));
++		if abs(sum(m))~=3,
++			pos=find(m==1); md.mask.groundedice_levelset(md.mesh.elements(i,pos))=0;
++		end
++	end
++
++	%identify edges of ice: 
++	ice_levelset=md.mask.ice_levelset;
++	for i=1:md.mesh.numberofelements,
++		m=ice_levelset(md.mesh.elements(i,:));
++		if abs(sum(m))~=3,
++			pos=find(m==-1); md.mask.ice_levelset(md.mesh.elements(i,pos))=0;
++		end
++	end
++
++	savemodel(org,md);
++end
++% }}}
++% {{{ ParameterizeIce: 
++if perform(org,'ParameterizeIce'),
++	
++	loaddata(org,'Parameters');
++	loaddata(org,'CreateMesh');
++	loaddata(org,'MeshGeometry');
++
++	%miscellaneous
++	md.miscellaneous.name='test4002';
++
++	%initial velocity: 
++	md.initialization.vx=zeros(md.mesh.numberofvertices,1);
++	md.initialization.vy=zeros(md.mesh.numberofvertices,1);
++	md.initialization.vz=zeros(md.mesh.numberofvertices,1);
++
++	%friction: 
++	md.friction.coefficient=30*ones(md.mesh.numberofvertices,1);
++	pos=find(md.mask.groundedice_levelset<=0);
++	md.friction.coefficient(pos)=0;
++	md.friction.p=ones(md.mesh.numberofelements,1);
++	md.friction.q=ones(md.mesh.numberofelements,1);
++
++	%temperatures and surface mass balance:
++	md.initialization.temperature=(273.15-20)*ones(md.mesh.numberofvertices,1);
++	md.initialization.pressure=md.materials.rho_ice*md.constants.g*(md.geometry.surface-md.geometry.base);
++	md.smb.mass_balance = [1*ones(md.mesh.numberofvertices,1); 1];
++
++	%Flow law 
++	md.materials.rheology_B=paterson(md.initialization.temperature);
++	md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++	md.damage.D=zeros(md.mesh.numberofvertices,1);
++	md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
++	
++	%the spcs going
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++	md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
++	md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1); 
++
++	%deal with water: 
++	pos=find(md.mask.ice_levelset>0); 
++	md.stressbalance.spcvx(pos)=0;
++	md.stressbalance.spcvy(pos)=0;
++	md.stressbalance.spcvz(pos)=0;
++	md.masstransport.spcthickness(pos)=0;
++
++	%get some flux at the ice divide: 
++	pos=find(md.mesh.lat==min(md.mesh.lat));
++	md.stressbalance.spcvy(pos)=200;
++
++	%deal with boundaries, excluding icefront: 
++	vertex_on_boundary=zeros(md.mesh.numberofvertices,1);
++	vertex_on_boundary(md.mesh.segments(:,1:2))=1;
++	pos=find(vertex_on_boundary & md.mask.groundedice_levelset<=0);
++	md.stressbalance.spcvx(pos)=md.initialization.vx(pos);
++	md.stressbalance.spcvy(pos)=md.initialization.vy(pos);
++	md.stressbalance.spcvz(pos)=md.initialization.vz(pos);
++	md.masstransport.spcthickness(pos)=md.geometry.thickness(pos);
++
++	md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++	md.basalforcings.floatingice_melting_rate=zeros(md.mesh.numberofvertices,1);
++	md.thermal.spctemperature=[md.initialization.temperature; 1]; %impose observed temperature on surface
++	md.basalforcings.geothermalflux=.064*ones(md.mesh.numberofvertices,1);
++
++	%flow equations: 
++	md=setflowequation(md,'SSA','all');
++
++	savemodel(org,md);
++end
++% }}}
++% {{{ RunUncoupledISSM: 
++if perform(org,'RunUncoupledISSM'),
++	
++	loaddata(org,'Parameters');
++	loaddata(org,'ParameterizeIce');
++
++	%timestepping: 
++	md.timestepping.final_time=final_time;
++	md.timestepping.time_step=time_step;
++	md.transient.isgroundingline=1;
++	md.transient.isthermal=0;
++	md.groundingline.migration='SubelementMigration2';
++
++	md.cluster=generic('name',oshostname(),'np',2);
++	md=solve(md,'Transient');
++
++	savemodel(org,md);
++end
++% }}}
++
++%Run MITgcm/ISSM
++% {{{ RunCoupledMITgcmISSM: 
++if perform(org,'RunCoupledMITgcmISSM'),
++
++	%load data: 
++	loaddata(org,'Parameters');
++	loaddata(org,'ParameterizeIce');
++	loaddata(org,'Bathymetry');
++	loaddata(org,'IceSheetGeometry');
++        endtime = round(MITgcmDeltaT * ...
++         floor(time_step*y2s*async_step_MITgcm_multiplier/MITgcmDeltaT));
++
++        % {{{ prepare MITgcm 
++        % rename previous run directory and create new one
++        if exist ('run.old')
++            !\rm -rf run.old
++        end
++        if exist ('run')
++            !\mv run run.old
++        end
++        !\mkdir run
++        !\cp ../MITgcm/build/mitgcmuv run
++        !\cp ../MITgcm/input/* run
++
++        %load data: 
++        loaddata(org,'Parameters');
++
++        % initial salinity
++        S=iniSalt*ones(Nx,Ny,Nz);
++        writebin('run/Salt.bin',S);
++
++        % initial temperature
++        T=iniTheta*ones(Nx,Ny,Nz);
++        writebin('run/Theta.bin',T);
++
++        % initial velocity
++        Z=zeros(Nx,Ny,Nz);
++        writebin('run/Uvel.bin',Z);
++        writebin('run/Vvel.bin',Z);
++
++        % initial sea surface height
++        Z=zeros(Nx,Ny);
++        writebin('run/Etan.bin',Z);
++
++        % salinity boundary conditions
++        S=obcSalt*ones(Ny,Nz);
++        thk=delZ*ones(Nz,1);
++        bot=cumsum(thk);
++        ik=find(bot<=mlDepth);
++        S(:,ik)=mlSalt;
++        writebin('run/OBs.bin',S);
++
++        % temperature boundary conditions
++        T=obcTheta*ones(Ny,Nz);
++        T(:,ik)=mlTheta;
++        writebin('run/OBt.bin',T);
++
++        % zonal velocity boundary conditions
++        U=obcUvel*ones(Ny,Nz);
++        writebin('run/OBu.bin',U);
++
++        % zero boundary conditions
++        Z=zeros(Ny,Nz);
++        writebin('run/zeros.bin',Z);
++
++        % build parameter file data.obcs
++        fidi=fopen('../MITgcm/input/data.obcs','r');
++        fido=fopen('run/data.obcs','w');
++        tline = fgetl(fidi);
++        fprintf(fido,'%s\n',tline);
++        while 1
++            tline = fgetl(fidi);
++            if ~ischar(tline), break, end
++            %do the change here: 
++            if strcmpi(tline,' OB_Iwest = 40*1,'),
++                fprintf(fido,'%s%i%s\n',' OB_Iwest = ',Ny,'*1,');
++                continue;
++            end
++            if strcmpi(tline,' OB_Ieast = 40*-1,'),
++                fprintf(fido,'%s%i%s\n',' OB_Ieast = ',Ny,'*-1,');
++                continue;
++            end
++            fprintf(fido,'%s\n',tline);
++        end
++        %close  files
++        fclose(fidi);
++        fclose(fido);
++
++        %save bathymetry in MITgcm run directory
++        writebin('run/bathymetry.bin',bathymetry);
++        % }}}
++            
++	% {{{ ISSM settings:
++
++	setenv('DYLD_LIBRARY_PATH', '/usr/local/gfortran/lib') 
++	%timestepping: 
++	md.timestepping.start_time=start_time;
++	md.timestepping.final_time=final_time;
++	md.timestepping.time_step=time_step;
++	md.cluster=generic('name',oshostname(),'np',2);
++	md.results.TransientSolution.Base=md.geometry.base;
++	md.transient.isgroundingline=1;
++	md.transient.isthermal=0;
++	md.groundingline.migration='SubelementMigration2';
++
++	% }}}
++
++	%start looping:
++	results=md.results;
++
++	for t=start_time:time_step:final_time
++            disp(['Year: ' num2str(t)])
++
++	    %send draft from ISSM to MITgcm:
++	    draft=md.results.TransientSolution(end).Base;
++	    pos=find(md.mask.ice_levelset>0); draft(pos)=0;
++            if t>start_time
++                old_draft=readbin('run/icetopo.bin',[Nx,Ny]);
++            end
++            writebin('run/icetopo.bin',draft);
++
++	    % {{{ generate MITgcm parameter file data 
++	    fidi=fopen('../MITgcm/input/data','r');
++	    fido=fopen('run/data','w');
++	    tline = fgetl(fidi);
++	    fprintf(fido,'%s\n',tline);
++            while 1
++                tline = fgetl(fidi);
++                if ~ischar(tline), break, end
++		%do the change here: 
++		if strcmpi(tline,' xgOrigin = 0.0,'),
++		    fprintf(fido,'%s%i%s\n',' xgOrigin = ',xgOrigin,',');
++		    continue;
++		end
++		if strcmpi(tline,' ygOrigin = -80.0,'),
++		    fprintf(fido,'%s%i%s\n',' ygOrigin = ',ygOrigin,',');
++		    continue;
++		end
++		if strcmpi(tline,' delX = 20*0.25,'),
++		    fprintf(fido,'%s%i*%g%s\n',' delX = ',Nx,dLong,',');
++		    continue;
++		end
++		if strcmpi(tline,' delY = 20*0.25,'),
++		    fprintf(fido,'%s%i*%g%s\n',' delY = ',Ny,dLat,',');
++		    continue;
++		end
++                if strcmpi(tline,' delZ = 30*30.0,'),
++                    fprintf(fido,'%s%i*%g%s\n',' delZ = ',Nz,delZ,',');
++                    continue;
++                end
++		if strcmpi(tline,' endTime=2592000.,'),
++		    fprintf(fido,'%s%i%s\n',' endTime= ',endtime,',');
++		    continue;
++		end
++		if strcmpi(tline,' deltaT=1200.0,'),
++		    fprintf(fido,'%s%i%s\n',' deltaT= ',MITgcmDeltaT,',');
++		    continue;
++		end
++		if strcmpi(tline,' pChkptFreq=2592000.,'),
++		    fprintf(fido,'%s%i%s\n',' pChkptFreq= ',endtime,',');
++		    continue;
++		end
++		if strcmpi(tline,' taveFreq=2592000.,'),
++		    fprintf(fido,'%s%i%s\n',' taveFreq= ',endtime,',');
++		    continue;
++		end
++                if strcmpi(tline,' rhoConst=1030.,'),
++                    fprintf(fido,'%s%i%s\n',' rhoConst= ',rho_water,',');
++                    continue;
++                end
++                if strcmpi(tline,' rhoNil=1030.,'),
++                    fprintf(fido,'%s%i%s\n',' rhoNil= ',rho_water,',');
++                    continue;
++                end
++		fprintf(fido,'%s\n',tline);
++	    end
++	    %close  files
++	    fclose(fidi);
++	    fclose(fido);
++	    % }}}
++
++	    % {{{ generate initial MITgcm conditions
++            ds=round(endtime/MITgcmDeltaT);
++            if t>start_time
++                % Read pickup file
++                fnm=['run/pickup.' myint2str(ds,10) '.data'];
++                U=readbin(fnm,[Nx Ny Nz],1,'real*8',0);
++                V=readbin(fnm,[Nx Ny Nz],1,'real*8',1);
++                T=readbin(fnm,[Nx Ny Nz],1,'real*8',2);
++                S=readbin(fnm,[Nx Ny Nz],1,'real*8',3);
++                E=readbin(fnm,[Nx Ny],1,'real*8',8*Nz);
++
++                % find indices of locations where ice shelf retreated
++                h=readbin('run/hFacC.data',[Nx Ny Nz]);
++                msk=sum(h,3);
++                msk(find(msk))=1;
++                [iw jw]=find(msk); % horizontal indices where there is water
++                tmp=reshape(draft,[Nx,Ny])-old_draft;
++                tmp(find(tmp<0))=0;
++                [im jm]=find(tmp); % horizontal indices where there is melt
++                
++                % Extrapolate T/S to locations where ice shelf retreated
++                for i=1:length(im)
++
++                    % first try vertical extrapolation
++                    in=find(h(im(i),jm(i),:));
++                    if length(in)>0;
++                        S(im(i),jm(i),1:min(in)  ) = S(im(i),jm(i),min(in));
++                        T(im(i),jm(i),1:min(in)  ) = T(im(i),jm(i),min(in));
++                        continue
++                    end
++
++                    % if not succesful, use closest neighbor horizontal extrapolation
++                    [y c]=min((iw-im(i)).^2+(jw-jm(i)).^2);
++                    salt=squeeze(S(iw(c),jw(c),:)); % salinity profile of closest neighbor
++                    temp=squeeze(T(iw(c),jw(c),:)); % salinity profile of closest neighbor
++                    in=find(h(iw(c),jw(c),:));
++                    salt(1:min(in))=salt(min(in));
++                    temp(1:min(in))=temp(min(in));
++                    salt(max(in):end)=salt(max(in));
++                    temp(max(in):end)=temp(max(in));
++                    S(im(i),jm(i),:)=salt;
++                    T(im(i),jm(i),:)=temp;
++                end
++
++                % Write initial conditions
++                writebin('run/Salt.bin' ,S);
++                writebin('run/Theta.bin',T);
++                writebin('run/Uvel.bin' ,U);
++                writebin('run/Vvel.bin' ,V);
++                writebin('run/Etan.bin' ,E);
++            end
++            % }}}
++
++            % {{{ system call to run MITgcm 
++            cd run
++            eval(['!mpiexec -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
++            ts=round((t+time_step)*y2s/MITgcmDeltaT);
++            eval(['!\mv STDERR.0000 STDERR_' myint2str(ts,10) '.data'])
++            eval(['!\mv STDOUT.0000 STDOUT_' myint2str(ts,10) '.data'])
++            eval(['!\cp hFacC.data hFacC_' myint2str(ts,10) '.data'])
++            eval(['!\cp icetopo.bin icetopo_' myint2str(ts,10) '.data'])
++            for fld={'S','T','U','V','Eta', ...
++                     'SHICE_heatFluxtave','SHICE_fwFluxtave'}
++                eval(['!\mv ' fld{1} '.' myint2str(ds,10) '.data ' ...
++                      fld{1} '_' myint2str(ts,10) '.data'])
++            end
++            cd ..
++            % }}}
++
++	    %get melting rates from MITgcm
++	    %upward fresh water flux (kg/m^2/s):
++	    fnm=['run/SHICE_fwFluxtave_' myint2str(ts,10) '.data'];
++	    melting_rate=readbin(fnm,[Nx Ny]);
++
++	    %send averaged melting rate to ISSM
++	    %downward fresh water flux (m/y):
++	    melting_rate=-melting_rate(:)*y2s/rho_ice;
++		 md.basalforcings.floatingice_melting_rate=melting_rate;
++
++	    % {{{ run ISSM and recover results 
++
++	    md.timestepping.start_time=t;
++	    md.timestepping.final_time=t+time_step;;
++		md=solve(md,'Transient');
++
++		base=md.results.TransientSolution(end).Base;
++		thickness=md.results.TransientSolution(end).Thickness;
++		md.geometry.base=base;
++		md.geometry.thickness=thickness;
++		md.geometry.surface=md.geometry.base+md.geometry.thickness;
++		md.initialization.vx=md.results.TransientSolution(end).Vx;
++		md.initialization.vy=md.results.TransientSolution(end).Vy;
++		md.initialization.vel=md.results.TransientSolution(end).Vel;
++		md.initialization.pressure=md.results.TransientSolution(end).Pressure;
++		md.mask.groundedice_levelset=md.results.TransientSolution(end).MaskGroundediceLevelset;
++		md.results.TransientSolution(end).FloatingiceMeltingRate=md.basalforcings.floatingice_melting_rate;
++		
++		%save these results in the model, otherwise, they'll be wiped out
++		results(end+1)=md.results;
++
++		% }}}
++
++
++	end
++
++	md.results=results;
++	savemodel(org,md);
++end
++% }}}
++% {{{ RunCoupledMITgcmISSM2: 
++if perform(org,'RunCoupledMITgcmISSM2'),
++	
++	md.miscellaneous.name='test4002';
++	md=solve(md,'Transient','runtimename',false);
++
++	eval(['!cp ' md.cluster.executionpath '/' md.miscellaneous.name '/* run/ ']);
++	cd run
++	eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' : -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
++
++end
++% }}}
++
++
++
++%Fields and tolerances to track changes
++fnm=['run/SHICE_fwFluxtave_0000004380.data'];
++melting_rate_1=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave_0000008760.data'];
++melting_rate_2=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave_0000013140.data'];
++melting_rate_3=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave_0000017520.data'];
++melting_rate_4=readbin(fnm,[Nx Ny]);
++field_names     ={'Base1','Melting1','Vx2','Vy2','Thickness2','Base2','MaskGroundediceLevelset2','FloatingiceMeltingRate2',...
++	'Melting2','Vx3','Vy3','Thickness3','Base3','MaskGroundediceLevelset3','FloatingiceMeltingRate3',...
++	'Melting3','Vx4','Vy4','Thickness4','Base4','MaskGroundediceLevelset4','FloatingiceMeltingRate4','Melting4'};
++field_tolerances={2e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13,...
++	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 };
++field_values={...
++	(md.results(1).TransientSolution(end).Base),...
++	(melting_rate_1(:)),...
++	(md.results(2).TransientSolution(end).Vx),...
++	(md.results(2).TransientSolution(end).Vy),...
++	(md.results(2).TransientSolution(end).Thickness),...
++	(md.results(2).TransientSolution(end).Base),...
++	(md.results(2).TransientSolution(end).MaskGroundediceLevelset),...
++	(md.results(2).TransientSolution(end).FloatingiceMeltingRate),...
++	(melting_rate_2(:)),...
++	(md.results(3).TransientSolution(end).Vx),...
++	(md.results(3).TransientSolution(end).Vy),...
++	(md.results(3).TransientSolution(end).Thickness),...
++	(md.results(3).TransientSolution(end).Base),...
++	(md.results(3).TransientSolution(end).MaskGroundediceLevelset),...
++	(md.results(3).TransientSolution(end).FloatingiceMeltingRate),...
++	(melting_rate_3(:)),...
++	(md.results(4).TransientSolution(end).Vx),...
++	(md.results(4).TransientSolution(end).Vy),...
++	(md.results(4).TransientSolution(end).Thickness),...
++	(md.results(4).TransientSolution(end).Base),...
++	(md.results(4).TransientSolution(end).MaskGroundediceLevelset),...
++	(md.results(4).TransientSolution(end).FloatingiceMeltingRate),...
++	(melting_rate_4(:)),...
++	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22257-22258.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22257-22258.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22257-22258.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22257)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22258)
+@@ -843,6 +843,8 @@
+ if perform(org,'RunCoupledMITgcmISSM2'),
+ 	
+ 	md.miscellaneous.name='test4002';
++	md.results=[];
++	md.results.TransientSolution=[];
+ 	md=solve(md,'Transient','runtimename',false);
+ 
+ 	eval(['!cp ' md.cluster.executionpath '/' md.miscellaneous.name '/* run/ ']);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22258-22259.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22258-22259.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22258-22259.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/plot/googlemaps.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/googlemaps.m	(revision 22258)
++++ ../trunk-jpl/src/m/plot/googlemaps.m	(revision 22259)
+@@ -23,6 +23,14 @@
+ 	end
+ end
+ 
++%Check that no temp.* exists
++if exist('temp.tiff','file'),
++	error('File temp.tiff already exists, remove first');
++end
++if exist('temp.png','file'),
++	error('File temp.png already exists, remove first');
++end
++
+ if nargin==2,
+ 	options=addfielddefault(options,'zoom',ullat);
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22259-22260.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22259-22260.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22259-22260.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/exp/functionSignatures.json
+===================================================================
+--- ../trunk-jpl/src/m/exp/functionSignatures.json	(nonexistent)
++++ ../trunk-jpl/src/m/exp/functionSignatures.json	(revision 22260)
+@@ -0,0 +1,18 @@
++{
++	"expdisp":
++	  {
++		"inputs":
++		  [
++			 {"name":"filename1", "kind":"required",   "type":"filepath"},
++			 {"name":"varargin", "kind":"optional", "multiplicity":"append"}
++		]
++	  },
++	"exptool":
++	  {
++		"inputs":
++		  [
++			 {"name":"filename1", "kind":"required",   "type":"filepath"},
++			 {"name":"varargin", "kind":"optional", "multiplicity":"append"}
++		]
++	  }
++}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22260-22261.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22260-22261.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22260-22261.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22260)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22261)
+@@ -138,6 +138,9 @@
+ }/*}}}*/
+ ElementMatrix* StressbalanceVerticalAnalysis::CreateKMatrix(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	bool hack = false;
+ 
+ 	/*compute all stiffness matrices for this element*/
+@@ -278,6 +281,9 @@
+ }/*}}}*/
+ ElementVector* StressbalanceVerticalAnalysis::CreatePVector(Element* element){/*{{{*/
+ 
++	/* Check if ice in element */
++	if(!element->IsIceInElement()) return NULL;
++
+ 	bool hack = false;
+ 
+ 	/*compute all load vectors for this element*/
+@@ -616,5 +622,6 @@
+ }/*}}}*/
+ void           StressbalanceVerticalAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+ 	/*Default, do nothing*/
++	SetActiveNodesLSMx(femmodel);
+ 	return;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/cores/movingfront_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 22260)
++++ ../trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 22261)
+@@ -39,7 +39,7 @@
+ 
+ 	/* determine variables for extrapolation */
+ 	num_extrapol_vars=0;
+-	if(isstressbalance) num_extrapol_vars+=2;
++	if(isstressbalance) num_extrapol_vars+=3;
+ 	if(ismasstransport) num_extrapol_vars+=1;
+ 	if(isthermal && domaintype==Domain3DEnum) num_extrapol_vars+=1;
+ 	extrapol_vars=xNew<int>(num_extrapol_vars);
+@@ -47,6 +47,7 @@
+ 	if(isstressbalance){
+ 		extrapol_vars[index]=VxEnum; index++;
+ 		extrapol_vars[index]=VyEnum; index++;
++		extrapol_vars[index]=VzEnum; index++;
+ 	}
+ 	if(ismasstransport){extrapol_vars[index]=ThicknessEnum; index++;}
+ 	if(isthermal && domaintype==Domain3DEnum){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22261-22262.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22261-22262.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22261-22262.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/c/cores/movingfront_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 22261)
++++ ../trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 22262)
+@@ -39,7 +39,12 @@
+ 
+ 	/* determine variables for extrapolation */
+ 	num_extrapol_vars=0;
+-	if(isstressbalance) num_extrapol_vars+=3;
++	if(isstressbalance){
++		if(domaintype==Domain3DEnum)
++		 num_extrapol_vars+=3;
++		else
++		 num_extrapol_vars+=2;
++	}
+ 	if(ismasstransport) num_extrapol_vars+=1;
+ 	if(isthermal && domaintype==Domain3DEnum) num_extrapol_vars+=1;
+ 	extrapol_vars=xNew<int>(num_extrapol_vars);
+@@ -47,12 +52,20 @@
+ 	if(isstressbalance){
+ 		extrapol_vars[index]=VxEnum; index++;
+ 		extrapol_vars[index]=VyEnum; index++;
+-		extrapol_vars[index]=VzEnum; index++;
++		if(domaintype==Domain3DEnum){
++			extrapol_vars[index]=VzEnum; index++;
++		}
+ 	}
+-	if(ismasstransport){extrapol_vars[index]=ThicknessEnum; index++;}
++	if(ismasstransport){
++		extrapol_vars[index]=ThicknessEnum; index++;
++	}
+ 	if(isthermal && domaintype==Domain3DEnum){
+-		if(isenthalpy){extrapol_vars[index]=EnthalpyEnum;}
+-		else{extrapol_vars[index]=TemperatureEnum;}
++		if(isenthalpy){
++			extrapol_vars[index]=EnthalpyEnum;
++		}
++		else{
++			extrapol_vars[index]=TemperatureEnum;
++		}
+ 		index++;
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22262-22263.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22262-22263.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22262-22263.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive805.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22263-22264.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22263-22264.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22263-22264.diff	(revision 22755)
@@ -0,0 +1,156 @@
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22263)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22264)
+@@ -70,8 +70,8 @@
+ ElementMatrix* Balancethickness2Analysis::CreateKMatrix(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	int         n=3;
+-	IssmDouble  Jdet,omega,ds[2],slope;
++	IssmDouble  yts = 365*24*3600.;
++	IssmDouble  Jdet,vx,vy,vel;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -83,11 +83,21 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	Input* omega_input         = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
+-	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
+-	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
+-	IssmDouble rhog    = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
++	Input* vx_input = element->GetInput(SurfaceSlopeXEnum); _assert_(vx_input); 
++	Input* vy_input = element->GetInput(SurfaceSlopeYEnum); _assert_(vy_input);
+ 
++	/*make sure are diffusivisty is large enough*/
++	vel = sqrt(vx*vx+vy*vy);
++	if(sqrt(vx*vx+vy*vy)==0.){
++		vx = 0.1/yts;
++		vy = 0.1/yts;
++	}
++	else if(vel<0.1/yts){
++		vx = vx/vel*0.1;
++		vy = vy/vel*0.1;
++
++	}
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -94,15 +104,12 @@
+ 		gauss->GaussPoint(ig);
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		omega_input->GetInputValue(&omega,gauss);
+-		surfaceslopex_input->GetInputValue(&ds[0],gauss);
+-		surfaceslopey_input->GetInputValue(&ds[1],gauss);
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
+ 
+-		slope = sqrt(ds[0]*ds[0] + ds[1]*ds[1]);
+-
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] += pow(rhog,n)*exp(omega)*pow(slope,n-1)*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
++				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(vx*dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + vy*dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
+ 			}
+ 		}
+ 	}
+@@ -116,7 +123,7 @@
+ ElementVector* Balancethickness2Analysis::CreatePVector(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  dhdt,mb,ms,Jdet;
++	IssmDouble  dhdt[2],mb[2],ms[2],Jdet;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -140,12 +147,14 @@
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		element->NodalFunctions(basis,gauss);
+ 
+-		ms_input->GetInputValue(&ms,gauss);
+-		mb_input->GetInputValue(&mb,gauss);
+-		dhdt_input->GetInputValue(&dhdt,gauss);
++		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
+ 
++		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
++		mb_input->GetInputDerivativeValue(&mb[0],xyz_list,gauss);
++		dhdt_input->GetInputDerivativeValue(&dhdt[0],xyz_list,gauss);
++
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(
+-					(ms-mb-dhdt)*basis[i]
++					(ms[0]+ms[1]-mb[0]-mb[1]-dhdt[0]-dhdt[1])*basis[i]
+ 					);
+ 	}
+ 
+@@ -156,7 +165,7 @@
+ 	return pe;
+ }/*}}}*/
+ void           Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+-		element->GetSolutionFromInputsOneDof(solution,SurfaceEnum);
++		element->GetSolutionFromInputsOneDof(solution,ThicknessEnum);
+ }/*}}}*/
+ void           Balancethickness2Analysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
+ 	_error_("Not implemented yet");
+@@ -163,57 +172,8 @@
+ }/*}}}*/
+ void           Balancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+ 
+-	/*Intermediaries*/
+-	IssmDouble  ds[2],s,b,D;
+-	IssmDouble* xyz_list = NULL;
++			element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+ 
+-	//element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+-	element->InputUpdateFromSolutionOneDof(solution,SurfaceEnum);
+-
+-	/*Fetch number of vertices and allocate velocity vectors*/
+-	int numvertices = element->GetNumberOfVertices();
+-	IssmDouble* vel_list = xNew<IssmDouble>(numvertices);
+-	IssmDouble* vx_list  = xNew<IssmDouble>(numvertices);
+-	IssmDouble* vy_list  = xNew<IssmDouble>(numvertices);
+-
+-	/*Retrieve all inputs and parameters*/
+-	element->GetVerticesCoordinates(&xyz_list);
+-	Input* D_input   = element->GetInput(BalancethicknessDiffusionCoefficientEnum);
+-	Input* H_input   = element->GetInput(ThicknessEnum);                            _assert_(H_input);
+-	Input* s_input   = element->GetInput(SurfaceEnum);                              _assert_(s_input);
+-	Input* b_input   = element->GetInput(BaseEnum);                                 _assert_(b_input);
+-
+-	/*Calculate velocities*/
+-	Gauss* gauss=element->NewGauss();
+-	for(int iv=0;iv<numvertices;iv++){
+-		gauss->GaussVertex(iv);
+-
+-		if(D_input){
+-			D_input->GetInputValue(&D,gauss);
+-		}
+-		else{
+-			D = 0.;
+-		}
+-		b_input->GetInputValue(&b,gauss);
+-		s_input->GetInputValue(&s,gauss);
+-		s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
+-
+-		vx_list[iv] = -1./(s-b)*D*ds[0];
+-		vy_list[iv] = -1./(s-b)*D*ds[1];
+-		vel_list[iv] = sqrt(pow(vx_list[iv],2) + pow(vy_list[iv],2));
+-	}
+-
+-	/*Add vx and vy as inputs to the tria element: */
+-	element->AddInput(VxEnum,vx_list,P1Enum);
+-	element->AddInput(VyEnum,vy_list,P1Enum);
+-	element->AddInput(VelEnum,vel_list,P1Enum);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<IssmDouble>(vy_list);
+-	xDelete<IssmDouble>(vx_list);
+-	xDelete<IssmDouble>(vel_list);
+-	xDelete<IssmDouble>(xyz_list);
+ }/*}}}*/
+ void           Balancethickness2Analysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+ 	/*Default, do nothing*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22264-22265.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22264-22265.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22264-22265.diff	(revision 22755)
@@ -0,0 +1,428 @@
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 22264)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 22265)
+@@ -175,6 +175,7 @@
+ 	/*Check that control_type is supported*/
+ 	if(control_type!=VxEnum && 
+ 		control_type!=VyEnum && 
++		control_type!=BalancethicknessSpcthicknessEnum && 
+ 		control_type!=BalancethicknessThickeningRateEnum){
+ 		_error_("Control "<<EnumToStringx(control_type)<<" not supported");
+ 	}
+@@ -191,6 +192,7 @@
+ 
+ 	/*Deal with second term*/
+ 	switch(control_type){
++		case BalancethicknessSpcthicknessEnum:   GradientJDirichlet(element,gradient,control_index); break;
+ 		case BalancethicknessThickeningRateEnum: GradientJDhDt(element,gradient,control_index); break;
+ 		case VxEnum:                             GradientJVx(  element,gradient,control_index); break;
+ 		case VyEnum:                             GradientJVy(  element,gradient,control_index); break;
+@@ -201,6 +203,43 @@
+ 	xDelete<int>(responses);
+ 
+ }/*}}}*/
++void           AdjointBalancethicknessAnalysis::GradientJDirichlet(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
++
++	/*Fetch number of vertices for this finite element*/
++	int numvertices = element->GetNumberOfVertices();
++
++	/*Initialize some vectors*/
++	IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
++	IssmDouble* lambda        = xNew<IssmDouble>(numvertices);
++	int*        vertexpidlist = xNew<int>(numvertices);
++
++	/*Retrieve all inputs we will be needing: */
++	element->GradientIndexing(&vertexpidlist[0],control_index);
++	element->GetInputListOnVertices(lambda,AdjointEnum);
++
++	BalancethicknessAnalysis* analysis = new BalancethicknessAnalysis();
++	ElementMatrix* Ke = analysis->CreateKMatrix(element);
++	delete analysis;
++
++	/*Transpose and return Ke*/
++	Ke->Transpose();
++	_assert_(Ke->nrows == numvertices && Ke->ncols == numvertices);
++
++	for(int i=0;i<numvertices;i++){
++		for(int j=0;j<numvertices;j++){
++			ge[i] += Ke->values[i*Ke->ncols + j] * lambda[j];
++		}
++		//ge[i]=-lambda[i];
++		_assert_(!xIsNan<IssmDouble>(ge[i]));
++	}
++	gradient->SetValues(numvertices,vertexpidlist,ge,INS_VAL);
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(ge);
++	xDelete<IssmDouble>(lambda);
++	xDelete<int>(vertexpidlist);
++	delete Ke;
++}/*}}}*/
+ void           AdjointBalancethicknessAnalysis::GradientJDhDt(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
+ 
+ 	/*Fetch number of vertices for this finite element*/
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22264)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22265)
+@@ -34,12 +34,11 @@
+ 	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+ 	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+ 	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
++	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+ 	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+-	iomodel->FetchDataToInput(elements,"md.balancethickness.omega",BalancethicknessOmegaEnum);
+-	iomodel->FetchDataToInput(elements,"md.balancethickness.slopex",SurfaceSlopeXEnum);
+-	iomodel->FetchDataToInput(elements,"md.balancethickness.slopey",SurfaceSlopeYEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -70,8 +69,7 @@
+ ElementMatrix* Balancethickness2Analysis::CreateKMatrix(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  yts = 365*24*3600.;
+-	IssmDouble  Jdet,vx,vy,vel;
++	IssmDouble  Jdet,ds[2],slope,velobs,omega;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -83,21 +81,11 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	Input* vx_input = element->GetInput(SurfaceSlopeXEnum); _assert_(vx_input); 
+-	Input* vy_input = element->GetInput(SurfaceSlopeYEnum); _assert_(vy_input);
++	Input* omega_input         = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
++	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
++	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
++	Input* velobs_input        = element->GetInput(InversionVelObsEnum); _assert_(velobs_input); 
+ 
+-	/*make sure are diffusivisty is large enough*/
+-	vel = sqrt(vx*vx+vy*vy);
+-	if(sqrt(vx*vx+vy*vy)==0.){
+-		vx = 0.1/yts;
+-		vy = 0.1/yts;
+-	}
+-	else if(vel<0.1/yts){
+-		vx = vx/vel*0.1;
+-		vy = vy/vel*0.1;
+-
+-	}
+-
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -104,12 +92,17 @@
+ 		gauss->GaussPoint(ig);
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		vx_input->GetInputValue(&vx,gauss);
+-		vy_input->GetInputValue(&vy,gauss);
++		surfaceslopex_input->GetInputValue(&ds[0],gauss);
++		surfaceslopey_input->GetInputValue(&ds[1],gauss);
++		velobs_input->GetInputValue(&velobs,gauss);
++		omega_input->GetInputValue(&omega,gauss);
+ 
++		slope = sqrt(ds[0]*ds[0] + ds[1]*ds[1]);
++		//if(slope<1.e-5) slope = 1.e-5;
++
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(vx*dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + vy*dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
++				Ke->values[i*numnodes+j] += velobs/slope*omega*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
+ 			}
+ 		}
+ 	}
+@@ -123,7 +116,7 @@
+ ElementVector* Balancethickness2Analysis::CreatePVector(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  dhdt[2],mb[2],ms[2],Jdet;
++	IssmDouble  dhdt,mb,ms,Jdet;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -147,14 +140,12 @@
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		element->NodalFunctions(basis,gauss);
+ 
+-		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
++		ms_input->GetInputValue(&ms,gauss);
++		mb_input->GetInputValue(&mb,gauss);
++		dhdt_input->GetInputValue(&dhdt,gauss);
+ 
+-		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
+-		mb_input->GetInputDerivativeValue(&mb[0],xyz_list,gauss);
+-		dhdt_input->GetInputDerivativeValue(&dhdt[0],xyz_list,gauss);
+-
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(
+-					(ms[0]+ms[1]-mb[0]-mb[1]-dhdt[0]-dhdt[1])*basis[i]
++					(ms-mb-dhdt)*basis[i]
+ 					);
+ 	}
+ 
+@@ -165,7 +156,7 @@
+ 	return pe;
+ }/*}}}*/
+ void           Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+-		element->GetSolutionFromInputsOneDof(solution,ThicknessEnum);
++		element->GetSolutionFromInputsOneDof(solution,SurfaceEnum);
+ }/*}}}*/
+ void           Balancethickness2Analysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
+ 	_error_("Not implemented yet");
+@@ -172,8 +163,57 @@
+ }/*}}}*/
+ void           Balancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+ 
+-			element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
++	/*Intermediaries*/
++	IssmDouble  ds[2],s,b,D;
++	IssmDouble* xyz_list = NULL;
+ 
++	//element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
++	element->InputUpdateFromSolutionOneDof(solution,SurfaceEnum);
++
++	/*Fetch number of vertices and allocate velocity vectors*/
++	int numvertices = element->GetNumberOfVertices();
++	IssmDouble* vel_list = xNew<IssmDouble>(numvertices);
++	IssmDouble* vx_list  = xNew<IssmDouble>(numvertices);
++	IssmDouble* vy_list  = xNew<IssmDouble>(numvertices);
++
++	/*Retrieve all inputs and parameters*/
++	element->GetVerticesCoordinates(&xyz_list);
++	Input* D_input   = element->GetInput(BalancethicknessDiffusionCoefficientEnum);
++	Input* H_input   = element->GetInput(ThicknessEnum);                            _assert_(H_input);
++	Input* s_input   = element->GetInput(SurfaceEnum);                              _assert_(s_input);
++	Input* b_input   = element->GetInput(BaseEnum);                                 _assert_(b_input);
++
++	/*Calculate velocities*/
++	Gauss* gauss=element->NewGauss();
++	for(int iv=0;iv<numvertices;iv++){
++		gauss->GaussVertex(iv);
++
++		if(D_input){
++			D_input->GetInputValue(&D,gauss);
++		}
++		else{
++			D = 0.;
++		}
++		b_input->GetInputValue(&b,gauss);
++		s_input->GetInputValue(&s,gauss);
++		s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
++
++		vx_list[iv] = -1./(s-b)*D*ds[0];
++		vy_list[iv] = -1./(s-b)*D*ds[1];
++		vel_list[iv] = sqrt(pow(vx_list[iv],2) + pow(vy_list[iv],2));
++	}
++
++	/*Add vx and vy as inputs to the tria element: */
++	element->AddInput(VxEnum,vx_list,P1Enum);
++	element->AddInput(VyEnum,vy_list,P1Enum);
++	element->AddInput(VelEnum,vel_list,P1Enum);
++
++	/*Free ressources:*/
++	delete gauss;
++	xDelete<IssmDouble>(vy_list);
++	xDelete<IssmDouble>(vx_list);
++	xDelete<IssmDouble>(vel_list);
++	xDelete<IssmDouble>(xyz_list);
+ }/*}}}*/
+ void           Balancethickness2Analysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+ 	/*Default, do nothing*/
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 22264)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 22265)
+@@ -29,6 +29,8 @@
+ 		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
+ 		void           GradientJdHdt(Element* element,Vector<IssmDouble>* gradient,int control_index);
+ 		void           GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index);
++		void           GradientJOmegaGradient(Element* element,Vector<IssmDouble>* gradient,int control_index);
++		void           GradientJEtaDiff(Element* element,Vector<IssmDouble>* gradient,int control_index);
+ 		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
+ 		void           UpdateConstraints(FemModel* femmodel);
+ };
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 22264)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 22265)
+@@ -90,6 +90,12 @@
+ 				case SurfaceAbsMisfitEnum:
+ 					for(i=0;i<numnodes;i++) pe->values[i]+=(surfaceobs-surface)*weight*Jdet*gauss->weight*basis[i];
+ 					break;
++				case OmegaAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case EtaDiffEnum:
++					/*Nothing in P vector*/
++					break;
+ 				default:
+ 					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
+ 			}
+@@ -131,6 +137,8 @@
+ 		case SurfaceAbsMisfitEnum:
+ 			/*Nothing, \partial J/\partial k = 0*/
+ 			break;
++		case OmegaAbsGradientEnum: GradientJOmegaGradient(element,gradient,control_index); break;
++		case EtaDiffEnum: GradientJEtaDiff(element,gradient,control_index); break;
+ 		default: _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
+ 	}
+ 
+@@ -192,7 +200,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         n=3;
+-	IssmDouble  dlambda[2],ds[2],slopex,slopey,slope,omega,Jdet; 
++	IssmDouble  dlambda[2],ds[2],slopex,slopey,slope,omega,Jdet,velobs;
+ 	IssmDouble *xyz_list= NULL;
+ 
+ 	/*Fetch number of vertices for this finite element*/
+@@ -211,7 +219,7 @@
+ 	Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 
+ 	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
+ 	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
+-	IssmDouble rhog    = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
++	Input* velobs_input        = element->GetInput(InversionVelObsEnum); _assert_(velobs_input); 
+ 
+ 	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -225,12 +233,14 @@
+ 		surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
+ 		surfaceslopex_input->GetInputValue(&slopex,gauss);
+ 		surfaceslopey_input->GetInputValue(&slopey,gauss);
++		velobs_input->GetInputValue(&velobs,gauss);
+ 
+ 		slope = sqrt(slopex*slopex + slopey*slopey);
++		//if(slope<1.e-5) slope = 1.e-5;
+ 
+ 		/*Build gradient vector (actually -dJ/da): */
+ 		for(int i=0;i<numvertices;i++){
+-			ge[i]+= -Jdet*gauss->weight*basis[i]*pow(rhog,n)*exp(omega)*pow(slope,n-1)*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
++			ge[i]+= - Jdet*gauss->weight*basis[i]*velobs/slope*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
+ 			_assert_(!xIsNan<IssmDouble>(ge[i]));
+ 		}
+ 	}
+@@ -243,6 +253,106 @@
+ 	xDelete<int>(vertexpidlist);
+ 	delete gauss;
+ }/*}}}*/
++void           AdjointBalancethickness2Analysis::GradientJOmegaGradient(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
++
++	/*Intermediaries*/
++	IssmDouble Jdet,weight;
++	IssmDouble dk[3]; 
++	IssmDouble *xyz_list= NULL;
++
++	/*Fetch number of vertices for this finite element*/
++	int numvertices = element->GetNumberOfVertices();
++
++	/*Initialize some vectors*/
++	IssmDouble* dbasis        = xNew<IssmDouble>(2*numvertices);
++	IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
++	int*        vertexpidlist = xNew<int>(numvertices);
++
++	/*Retrieve all inputs we will be needing: */
++	element->GetVerticesCoordinates(&xyz_list);
++	element->GradientIndexing(&vertexpidlist[0],control_index);
++	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
++	Input* weights_input         = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++
++	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=element->NewGauss(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++		gauss->GaussPoint(ig);
++
++		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++		element->NodalFunctionsP1Derivatives(dbasis,xyz_list,gauss);
++		weights_input->GetInputValue(&weight,gauss,OmegaAbsGradientEnum);
++
++		/*Build alpha_complement_list: */
++		omega_input->GetInputDerivativeValue(&dk[0],xyz_list,gauss);
++
++		/*Build gradient vector (actually -dJ/ddrag): */
++		for(int i=0;i<numvertices;i++){
++			ge[i]+=-weight*Jdet*gauss->weight*2*(dk[0]*dk[0] + dk[1]*dk[1])*(dbasis[0*numvertices+i]*dk[0]+dbasis[1*numvertices+i]*dk[1]);
++			_assert_(!xIsNan<IssmDouble>(ge[i]));
++		}
++	}
++	gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(xyz_list);
++	xDelete<IssmDouble>(dbasis);
++	xDelete<IssmDouble>(ge);
++	xDelete<int>(vertexpidlist);
++	delete gauss;
++
++}/*}}}*/
++void           AdjointBalancethickness2Analysis::GradientJEtaDiff(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
++
++	/*Intermediaries*/
++	IssmDouble Jdet,weight;
++	IssmDouble omega,omega0; 
++	IssmDouble *xyz_list= NULL;
++
++	/*Fetch number of vertices for this finite element*/
++	int numvertices = element->GetNumberOfVertices();
++
++	/*Initialize some vectors*/
++	IssmDouble* basis         = xNew<IssmDouble>(numvertices);
++	IssmDouble* ge            = xNewZeroInit<IssmDouble>(numvertices);
++	int*        vertexpidlist = xNew<int>(numvertices);
++
++	/*Retrieve all inputs we will be needing: */
++	element->GetVerticesCoordinates(&xyz_list);
++	element->GradientIndexing(&vertexpidlist[0],control_index);
++	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum);   _assert_(omega_input);
++	Input* omega0_input = element->GetInput(BalancethicknessOmega0Enum); _assert_(omega0_input);
++	Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++
++	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=element->NewGauss(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++		gauss->GaussPoint(ig);
++
++		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++		element->NodalFunctionsP1(basis,gauss);
++		weights_input->GetInputValue(&weight,gauss,EtaDiffEnum);
++
++		/*Build alpha_complement_list: */
++		omega_input->GetInputValue(&omega,gauss);
++		omega0_input->GetInputValue(&omega0,gauss);
++
++		/*Build gradient vector (actually -dJ/ddrag): */
++		for(int i=0;i<numvertices;i++){
++			ge[i]+=-weight*Jdet*gauss->weight*(omega - omega0)*basis[i];
++			_assert_(!xIsNan<IssmDouble>(ge[i]));
++		}
++	}
++	gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(xyz_list);
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(ge);
++	xDelete<int>(vertexpidlist);
++	delete gauss;
++
++}/*}}}*/
+ void           AdjointBalancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+ 	element->InputUpdateFromSolutionOneDof(solution,AdjointEnum);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 22264)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 22265)
+@@ -27,6 +27,7 @@
+ 		ElementVector* CreatePVector(Element* element);
+ 		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+ 		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
++		void           GradientJDirichlet(Element* element,Vector<IssmDouble>* gradient,int control_index);
+ 		void           GradientJDhDt(Element* element,Vector<IssmDouble>* gradient,int control_index);
+ 		void           GradientJVx(Element* element,Vector<IssmDouble>* gradient,int control_index);
+ 		void           GradientJVy(Element* element,Vector<IssmDouble>* gradient,int control_index);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22265-22266.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22265-22266.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22265-22266.diff	(revision 22755)
@@ -0,0 +1,635 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 22266)
+@@ -166,7 +166,7 @@
+ 
+ 	/*Get requested input within dataset*/
+ 	for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
+-	if(offset<0) _error_("Could not find input of id "<<id );
++	if(offset<0) _error_("Could not find input of id "<<id<<" (Enum: "<<EnumToStringx(id)<<")" );
+ 
+ 	Input* input=xDynamicCast<Input*>(this->inputs->GetObjectByOffset(offset));
+ 	input->GetInputValue(pvalue,gauss);
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22265)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22266)
+@@ -125,6 +125,8 @@
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor);
+ 		void SurfaceAbsMisfitx( IssmDouble* pJ);
++		void OmegaAbsGradientx( IssmDouble* pJ);
++		void EtaDiffx( IssmDouble* pJ);
+ 		void ThicknessAbsGradientx( IssmDouble* pJ);
+ 		void ThicknessPositivex(IssmDouble* pJ);
+ 		#ifdef _HAVE_GIAIVINS_
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22266)
+@@ -1495,6 +1495,122 @@
+ 	*pminvz=minvz;
+ 
+ }/*}}}*/
++void FemModel::OmegaAbsGradientx( IssmDouble* pJ){/*{{{*/
++
++	/*output: */
++	IssmDouble J=0.;
++	IssmDouble J_sum;
++
++	IssmDouble  omega,weight;
++	IssmDouble  Jdet;
++	IssmDouble* xyz_list = NULL;
++	IssmDouble  dp[3];
++
++	/*Compute Misfit: */
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++
++		/*If on water, return 0: */
++		if(!element->IsIceInElement()) continue;
++
++		/* Get node coordinates*/
++		element->GetVerticesCoordinates(&xyz_list);
++
++		/*Retrieve all inputs we will be needing: */
++		Input* weights_input   =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++		Input* omega_input =element->GetInput(BalancethicknessOmegaEnum);                   _assert_(omega_input);
++
++		/* Start  looping on the number of gaussian points: */
++		Gauss* gauss=element->NewGauss(2);
++		for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++			gauss->GaussPoint(ig);
++
++			/* Get Jacobian determinant: */
++			element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++
++			/*Get all parameters at gaussian point*/
++			weights_input->GetInputValue(&weight,gauss,OmegaAbsGradientEnum);
++			omega_input->GetInputDerivativeValue(&dp[0],xyz_list,gauss);
++
++			/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
++			//J+=weight*1/2*(dp[0]*dp[0]+dp[1]*dp[1])*Jdet*gauss->weight;
++			J+=weight*1/2*pow(dp[0]*dp[0]+dp[1]*dp[1],2)*Jdet*gauss->weight;
++		}
++
++		/*clean up and Return: */
++		xDelete<IssmDouble>(xyz_list);
++		delete gauss;
++	}
++
++	/*Sum all J from all cpus of the cluster:*/
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	J=J_sum;
++
++	/*Assign output pointers: */
++	*pJ=J;
++}
++/*}}}*/
++void FemModel::EtaDiffx( IssmDouble* pJ){/*{{{*/
++
++	/*output: */
++	IssmDouble J=0.;
++	IssmDouble J_sum;
++
++	IssmDouble  omega,weight;
++	IssmDouble  Jdet;
++	IssmDouble* xyz_list = NULL;
++	IssmDouble  p,p0;
++
++	/*Compute Misfit: */
++	for(int i=0;i<elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
++
++		/*If on water, return 0: */
++		if(!element->IsIceInElement()) continue;
++
++		/* Get node coordinates*/
++		element->GetVerticesCoordinates(&xyz_list);
++
++		/*Retrieve all inputs we will be needing: */
++		Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++		Input* omega_input   =element->GetInput(BalancethicknessOmegaEnum);              _assert_(omega_input);
++		Input* omega0_input  =element->GetInput(BalancethicknessOmega0Enum);             _assert_(omega0_input);
++
++		/* Start  looping on the number of gaussian points: */
++		Gauss* gauss=element->NewGauss(2);
++		for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++			gauss->GaussPoint(ig);
++
++			/* Get Jacobian determinant: */
++			element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++
++			/*Get all parameters at gaussian point*/
++			weights_input->GetInputValue(&weight,gauss,EtaDiffEnum);
++			omega_input->GetInputValue(&p,gauss);
++			omega0_input->GetInputValue(&p0,gauss);
++
++			/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
++			//J+=weight*1/2*(dp[0]*dp[0]+dp[1]*dp[1])*Jdet*gauss->weight;
++			J+=weight*1/2*pow(p - p0,2)*Jdet*gauss->weight;
++		}
++
++		/*clean up and Return: */
++		xDelete<IssmDouble>(xyz_list);
++		delete gauss;
++	}
++
++	/*Sum all J from all cpus of the cluster:*/
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	J=J_sum;
++
++	/*Assign output pointers: */
++	*pJ=J;
++}
++/*}}}*/
+ void FemModel::OutputControlsx(Results **presults){/*{{{*/
+ 
+ 	/*parameters: */
+@@ -1666,6 +1782,8 @@
+ 				case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters); break;
+ 				case BalancethicknessMisfitEnum:    BalancethicknessMisfitx(&double_result);                                                        break;
+ 				case SurfaceAbsMisfitEnum:          SurfaceAbsMisfitx(&double_result); break;
++				case OmegaAbsGradientEnum:          OmegaAbsGradientx(&double_result); break;
++				case EtaDiffEnum:                   EtaDiffx(&double_result); break;
+ 
+ 				   /*Vector */
+ 					default:
+@@ -2017,7 +2135,7 @@
+ 	IssmDouble J=0.;
+ 	IssmDouble J_sum;
+ 
+-	IssmDouble  thickness,thicknessobs,weight;
++	IssmDouble  thickness,weight;
+ 	IssmDouble  Jdet;
+ 	IssmDouble* xyz_list = NULL;
+ 	IssmDouble  dp[3];
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22266)
+@@ -1857,6 +1857,14 @@
+ 						this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
++				case BalancethicknessSpcthicknessEnum:
++					if(iomodel->Data("md.balancethickness.spcthickness")){
++						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.spcthickness")[tria_vertex_ids[j]-1];
++						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
++						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
++						this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++					}
++					break;
+ 				case BalancethicknessOmegaEnum:
+ 					if(iomodel->Data("md.balancethickness.omega")){
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.omega")[tria_vertex_ids[j]-1];
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22266)
+@@ -1700,6 +1700,7 @@
+ 				name==BasalforcingsGroundediceMeltingRateEnum ||
+ 				name==BasalforcingsFloatingiceMeltingRateEnum ||
+ 				name==BasalforcingsGeothermalfluxEnum ||
++				name==BalancethicknessSpcthicknessEnum ||
+ 				name==SurfaceAreaEnum||
+ 				name==DamageDEnum ||
+ 				name==DamageDbarEnum ||
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22266)
+@@ -69,7 +69,8 @@
+ ElementMatrix* Balancethickness2Analysis::CreateKMatrix(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  Jdet,ds[2],slope,velobs,omega;
++	IssmDouble  yts = 365*24*3600.;
++	IssmDouble  Jdet,vx,vy,vel;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -81,11 +82,12 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	Input* omega_input         = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
+-	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
+-	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
+-	Input* velobs_input        = element->GetInput(InversionVelObsEnum); _assert_(velobs_input); 
++	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 
++	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
+ 
++	/*Get element characteristic length*/
++	IssmDouble h = element->CharacteristicLength();
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=element->NewGauss(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -92,17 +94,27 @@
+ 		gauss->GaussPoint(ig);
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		surfaceslopex_input->GetInputValue(&ds[0],gauss);
+-		surfaceslopey_input->GetInputValue(&ds[1],gauss);
+-		velobs_input->GetInputValue(&velobs,gauss);
+-		omega_input->GetInputValue(&omega,gauss);
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
+ 
+-		slope = sqrt(ds[0]*ds[0] + ds[1]*ds[1]);
+-		//if(slope<1.e-5) slope = 1.e-5;
++		/*make sure are diffusivisty is large enough*/
++		vel = sqrt(vx*vx+vy*vy);
++		if(sqrt(vx*vx+vy*vy)==0.){
++			vx = 0.1/yts;
++			vy = 0.1/yts;
++			vel = sqrt(vx*vx+vy*vy);
++		}
++		else if(vel<0.1/yts){
++			vx = vx/vel*0.1;
++			vy = vy/vel*0.1;
++			vel = sqrt(vx*vx+vy*vy);
++		}
+ 
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] += velobs/slope*omega*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
++				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
++							(vx*dbasis[0*numnodes+i] + vy*dbasis[1*numnodes+i])*(vx*dbasis[0*numnodes+j] + vy*dbasis[1*numnodes+j])
++				+ vel/500000.*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]));
+ 			}
+ 		}
+ 	}
+@@ -116,7 +128,7 @@
+ ElementVector* Balancethickness2Analysis::CreatePVector(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries */
+-	IssmDouble  dhdt,mb,ms,Jdet;
++	IssmDouble  dhdt[2],mb[2],ms[2],Jdet;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -140,12 +152,14 @@
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		element->NodalFunctions(basis,gauss);
+ 
+-		ms_input->GetInputValue(&ms,gauss);
+-		mb_input->GetInputValue(&mb,gauss);
+-		dhdt_input->GetInputValue(&dhdt,gauss);
++		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(
+-					(ms-mb-dhdt)*basis[i]
++		ms_input->GetInputDerivativeValue(&ms[0],xyz_list,gauss);
++		mb_input->GetInputDerivativeValue(&mb[0],xyz_list,gauss);
++		dhdt_input->GetInputDerivativeValue(&dhdt[0],xyz_list,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=0*Jdet*gauss->weight*(
++					(ms[0]+ms[1]-mb[0]-mb[1]-dhdt[0]-dhdt[1])*basis[i]
+ 					);
+ 	}
+ 
+@@ -156,7 +170,7 @@
+ 	return pe;
+ }/*}}}*/
+ void           Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+-		element->GetSolutionFromInputsOneDof(solution,SurfaceEnum);
++		element->GetSolutionFromInputsOneDof(solution,ThicknessEnum);
+ }/*}}}*/
+ void           Balancethickness2Analysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
+ 	_error_("Not implemented yet");
+@@ -163,57 +177,8 @@
+ }/*}}}*/
+ void           Balancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
+ 
+-	/*Intermediaries*/
+-	IssmDouble  ds[2],s,b,D;
+-	IssmDouble* xyz_list = NULL;
++			element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+ 
+-	//element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+-	element->InputUpdateFromSolutionOneDof(solution,SurfaceEnum);
+-
+-	/*Fetch number of vertices and allocate velocity vectors*/
+-	int numvertices = element->GetNumberOfVertices();
+-	IssmDouble* vel_list = xNew<IssmDouble>(numvertices);
+-	IssmDouble* vx_list  = xNew<IssmDouble>(numvertices);
+-	IssmDouble* vy_list  = xNew<IssmDouble>(numvertices);
+-
+-	/*Retrieve all inputs and parameters*/
+-	element->GetVerticesCoordinates(&xyz_list);
+-	Input* D_input   = element->GetInput(BalancethicknessDiffusionCoefficientEnum);
+-	Input* H_input   = element->GetInput(ThicknessEnum);                            _assert_(H_input);
+-	Input* s_input   = element->GetInput(SurfaceEnum);                              _assert_(s_input);
+-	Input* b_input   = element->GetInput(BaseEnum);                                 _assert_(b_input);
+-
+-	/*Calculate velocities*/
+-	Gauss* gauss=element->NewGauss();
+-	for(int iv=0;iv<numvertices;iv++){
+-		gauss->GaussVertex(iv);
+-
+-		if(D_input){
+-			D_input->GetInputValue(&D,gauss);
+-		}
+-		else{
+-			D = 0.;
+-		}
+-		b_input->GetInputValue(&b,gauss);
+-		s_input->GetInputValue(&s,gauss);
+-		s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
+-
+-		vx_list[iv] = -1./(s-b)*D*ds[0];
+-		vy_list[iv] = -1./(s-b)*D*ds[1];
+-		vel_list[iv] = sqrt(pow(vx_list[iv],2) + pow(vy_list[iv],2));
+-	}
+-
+-	/*Add vx and vy as inputs to the tria element: */
+-	element->AddInput(VxEnum,vx_list,P1Enum);
+-	element->AddInput(VyEnum,vy_list,P1Enum);
+-	element->AddInput(VelEnum,vel_list,P1Enum);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<IssmDouble>(vy_list);
+-	xDelete<IssmDouble>(vx_list);
+-	xDelete<IssmDouble>(vel_list);
+-	xDelete<IssmDouble>(xyz_list);
+ }/*}}}*/
+ void           Balancethickness2Analysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+ 	/*Default, do nothing*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22265)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22266)
+@@ -213,6 +213,7 @@
+ 	InversionVxObsEnum,
+ 	InversionVyObsEnum,
+ 	InversionVzObsEnum,
++	InversionVelObsEnum,
+ 	MaskIceLevelsetEnum,
+ 	MaskOceanLevelsetEnum,
+ 	MaskLandLevelsetEnum,
+@@ -381,6 +382,7 @@
+ 	BalancethicknessApparentMassbalanceEnum,
+ 	BalancethicknessDiffusionCoefficientEnum,
+ 	BalancethicknessOmegaEnum,
++	BalancethicknessOmega0Enum,
+ 	BalancethicknessD0Enum,
+ 	/*}}}*/
+ 	/*Smb{{{*/
+@@ -528,6 +530,9 @@
+ 	TemperaturePDDEnum,
+ 	ThicknessAbsMisfitEnum,
+ 	SurfaceAbsMisfitEnum,
++	OmegaAbsGradientEnum,
++	EtaDiffEnum,
++	EtaAbsGradientEnum,
+ 	VelEnum,
+ 	VelocityEnum,
+ 	VxAverageEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22266)
+@@ -219,6 +219,7 @@
+ 		case InversionVxObsEnum : return "InversionVxObs";
+ 		case InversionVyObsEnum : return "InversionVyObs";
+ 		case InversionVzObsEnum : return "InversionVzObs";
++		case InversionVelObsEnum : return "InversionVelObs";
+ 		case MaskIceLevelsetEnum : return "MaskIceLevelset";
+ 		case MaskOceanLevelsetEnum : return "MaskOceanLevelset";
+ 		case MaskLandLevelsetEnum : return "MaskLandLevelset";
+@@ -387,6 +388,7 @@
+ 		case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance";
+ 		case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient";
+ 		case BalancethicknessOmegaEnum : return "BalancethicknessOmega";
++		case BalancethicknessOmega0Enum : return "BalancethicknessOmega0";
+ 		case BalancethicknessD0Enum : return "BalancethicknessD0";
+ 		case SmbEnum : return "Smb";
+ 		case SmbAnalysisEnum : return "SmbAnalysis";
+@@ -526,6 +528,9 @@
+ 		case TemperaturePDDEnum : return "TemperaturePDD";
+ 		case ThicknessAbsMisfitEnum : return "ThicknessAbsMisfit";
+ 		case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit";
++		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
++		case EtaDiffEnum : return "EtaDiff";
++		case EtaAbsGradientEnum : return "EtaAbsGradient";
+ 		case VelEnum : return "Vel";
+ 		case VelocityEnum : return "Velocity";
+ 		case VxAverageEnum : return "VxAverage";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22266)
+@@ -222,6 +222,7 @@
+ 	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+ 	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
++	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
+ 	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
+ 	      else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
+ 	      else if (strcmp(name,"MaskLandLevelset")==0) return MaskLandLevelsetEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum;
+ 	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+-	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      if (strcmp(name,"Damage")==0) return DamageEnum;
++	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+ 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+-	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
++	      if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
++	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
+ 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+ 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+ 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
+@@ -396,6 +397,7 @@
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
++	      else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum;
+ 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
+ 	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
+ 	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
+-	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+-	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
++	      if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
++	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
++	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+ 	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+ 	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+@@ -538,6 +540,9 @@
+ 	      else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
++	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
++	      else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
++	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+ 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
+ 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+@@ -623,15 +628,15 @@
+ 	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+ 	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+ 	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+-	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+ 	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
++	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+ 	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+ 	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
+ 	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+@@ -746,15 +751,15 @@
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+-	      else if (strcmp(name,"Fset")==0) return FsetEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"Fset")==0) return FsetEnum;
+ 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
+ 	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
++	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+ 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Index")==0) return IndexEnum;
+ 	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
+@@ -869,15 +874,15 @@
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+ 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+ 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
+-	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
+ 	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+ 	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
++	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+@@ -992,15 +997,15 @@
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+ 	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+-	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
++	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+ 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+ 	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22266)
+@@ -67,6 +67,7 @@
+ 		switch(control){
+ 			/*List of supported controls*/
+ 			case BalancethicknessThickeningRateEnum:      iomodel->FetchData(1,"md.balancethickness.thickening_rate"); break;
++			case BalancethicknessSpcthicknessEnum:        iomodel->FetchData(1,"md.balancethickness.spcthickness"); break;
+ 			case VxEnum:                                  iomodel->FetchData(1,"md.initialization.vx"); break;
+ 			case VyEnum:                                  iomodel->FetchData(1,"md.initialization.vy"); break;
+ 			case ThicknessEnum:                           iomodel->FetchData(1,"md.geometry.thickness"); break;
+@@ -98,6 +99,7 @@
+ 		switch(control_enums[i]){
+ 			/*List of supported controls*/
+ 			case BalancethicknessThickeningRateEnum:      iomodel->DeleteData(1,"md.balancethickness.thickening_rate"); break;
++			case BalancethicknessSpcthicknessEnum:        iomodel->DeleteData(1,"md.balancethickness.spcthickness"); break;
+ 			case VxEnum:                                  iomodel->DeleteData(1,"md.initialization.vx"); break;
+ 			case VyEnum:                                  iomodel->DeleteData(1,"md.initialization.vy"); break;
+ 			case ThicknessEnum:                           iomodel->DeleteData(1,"md.geometry.thickness"); break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22266)
+@@ -7,7 +7,7 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type){/*{{{*/
++void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type){
+ 
+ 	bool        control_analysis;
+ 	int         inversiontype;
+@@ -119,4 +119,4 @@
+ 		iomodel->DeleteData(cm_jump,"md.inversion.step_threshold");
+ 		iomodel->DeleteData(optscal,"md.inversion.gradient_scaling");
+ 	}
+-}/*}}}*/
++}
+Index: ../trunk-jpl/src/c/cores/balancethickness2_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 22265)
++++ ../trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 22266)
+@@ -35,7 +35,7 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		const int numoutputs = 1;
+-		int outputs[numoutputs] = {SurfaceEnum};
++		int outputs[numoutputs] = {ThicknessEnum};
+ 		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],numoutputs);
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22266-22267.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22266-22267.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22266-22267.diff	(revision 22755)
@@ -0,0 +1,4496 @@
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 22266)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 22267)
+@@ -25,6 +25,9 @@
+ 
+ print "      creating temperatures"
+ md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,))
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,))
+ 
+ print "      creating flow law parameter"
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+@@ -32,7 +35,9 @@
+ 
+ print "      creating surface mass balance"
+ md.smb.mass_balance=numpy.ones((md.mesh.numberofvertices))/md.constants.yts    #1m/a
+-md.basalforcings.melting_rate=0.*numpy.ones((md.mesh.numberofvertices))/md.constants.yts    #1m/a
++#md.basalforcings.melting_rate=0.*numpy.ones((md.mesh.numberofvertices))/md.constants.yts    #1m/a
++md.basalforcings.groundedice_melting_rate=0.*numpy.ones((md.mesh.numberofvertices))/md.constants.yts    #1m/a
++md.basalforcings.floatingice_melting_rate=0.*numpy.ones((md.mesh.numberofvertices))/md.constants.yts    #1m/a
+ 
+ #Deal with boundary conditions:
+ 
+@@ -40,6 +45,6 @@
+ md=SetMarineIceSheetBC(md,'../Exp/SquareFront.exp')
+ 
+ print "      boundary conditions for thermal model"
+-md.thermal.spctemperature=md.initialization.temperature
++md.thermal.spctemperature[:]=md.initialization.temperature
+ md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices)) 
+ md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)[0]]=1.*10**-3    #1 mW/m^2
+Index: ../trunk-jpl/test/Par/ISMIPE.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.par	(revision 22266)
++++ ../trunk-jpl/test/Par/ISMIPE.par	(revision 22267)
+@@ -13,6 +13,7 @@
+ 	md.geometry.base(i)=(1.-coeff)*data(point1,2)+coeff*data(point2,2);
+ 	md.geometry.surface(i)=(1.-coeff)*data(point1,3)+coeff*data(point2,3);
+ end
++
+ md.geometry.thickness=md.geometry.surface-md.geometry.base;
+ md.geometry.thickness(find(~md.geometry.thickness))=0.01;
+ md.geometry.base=md.geometry.surface-md.geometry.thickness;
+Index: ../trunk-jpl/test/Par/ISMIPE.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.py	(revision 22266)
++++ ../trunk-jpl/test/Par/ISMIPE.py	(revision 22267)
+@@ -12,9 +12,10 @@
+ 	y=md.mesh.y[i]
+ 	point1=numpy.floor(y/100.)
+ 	point2=numpy.minimum(point1+1,50)
+-	coeff=(y-(point1-1.)*100.)/100.
++	coeff=(y-(point1)*100.)/100.
+ 	md.geometry.base[i]=(1.-coeff)*data[point1,1]+coeff*data[point2,1]
+ 	md.geometry.surface[i]=(1.-coeff)*data[point1,2]+coeff*data[point2,2]
++
+ md.geometry.thickness=md.geometry.surface-md.geometry.base
+ md.geometry.thickness[numpy.nonzero(numpy.logical_not(md.geometry.thickness))]=0.01
+ md.geometry.base=md.geometry.surface-md.geometry.thickness
+Index: ../trunk-jpl/test/NightlyRun/test2425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2425.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2425.py	(revision 22267)
+@@ -0,0 +1,50 @@
++#Test Name: SquareSheetShelfGroundingLine2dSoft
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.initialization.vx[:] = 0.
++md.initialization.vy[:] = 0.
++md.geometry.base = -700. - (md.mesh.y - 500000.) / 1000.
++md.geometry.bed = -700. - (md.mesh.y - 500000.) / 1000.
++md.geometry.thickness[:] = 1300.
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++md.transient.isstressbalance = 1
++md.transient.isgroundingline = 1
++md.groundingline.migration = 'AggressiveMigration'
++
++md.timestepping.time_step = .1
++md.timestepping.final_time = 1
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++vel1 = md.results.TransientSolution[-1].Vel
++
++#get same results with offset in bed and sea level: 
++md.geometry.base = -700. - (md.mesh.y - 500000.) / 1000.
++md.geometry.bed  = -700. - (md.mesh.y - 500000.) / 1000.
++md.geometry.thickness[:] = 1300.
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++
++md.geometry.base = md.geometry.base + 1000
++md.geometry.bed = md.geometry.bed + 1000
++md.geometry.surface = md.geometry.surface + 1000
++md.slr.sealevel = 1000 * np.ones((md.mesh.numberofvertices,))
++
++md = solve(md,'Transient','checkconsistency','no')
++vel2 = md.results.TransientSolution[-1].Vel
++
++#Fields and tolerances to track changes
++field_names = ['Vel','Veloffset']
++field_tolerances = [1e-13,1e-13]
++field_values = [vel1,vel2]
++
+Index: ../trunk-jpl/test/NightlyRun/test342.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test342.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test342.py	(revision 22267)
+@@ -0,0 +1,35 @@
++#Test Name: SquareSheetTherSteaPlume
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from plumebasalforcings import *
++
++md = triangle(model(),'../Exp/Square.exp',180000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareSheetConstrained.py')
++md.basalforcings = plumebasalforcings()
++md.basalforcings = md.basalforcings.setdefaultparameters()
++md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.plumex = 500000
++md.basalforcings.plumey = 500000
++md.extrude(3,1.)
++md = setflowequation(md,'SSA','all')
++md.timestepping.time_step = 0.
++md.thermal.requested_outputs = ['default','BasalforcingsGeothermalflux']
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Thermal')
++
++#Fields and tolerances to track changes
++field_names      = ['Temperature','BasalforcingsGroundediceMeltingRate','BasalforcingsGeothermalflux']
++field_tolerances = [1e-13,1e-8,1e-13]
++field_values = [
++	md.results.ThermalSolution.Temperature,
++	md.results.ThermalSolution.BasalforcingsGroundediceMeltingRate,
++	md.results.ThermalSolution.BasalforcingsGeothermalflux,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test261.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test261.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test261.py	(revision 22267)
+@@ -0,0 +1,38 @@
++#Test Name: SquareShelfConstrainedTranEnhanced
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from matenhancedice import *
++
++md = triangle(model(),'../Exp/Square.exp',180000.)
++md = setmask(md,'all','')
++md = parameterize(md,'../Par/SquareShelfConstrained.py')
++md = md.extrude(3,1.)
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.materials = matenhancedice()
++md.materials.rheology_B = 3.15e8 * np.ones(md.mesh.numberofvertices,)
++md.materials.rheology_n = 3 * np.ones(md.mesh.numberofelements,)
++md.materials.rheology_E = np.ones(md.mesh.numberofvertices,)
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 0
++md.transient.issmb = 1
++md.transient.isthermal = 1
++md.transient.isgroundingline = 0
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names      = ['Vx','Vy','Vel','Temperature','BasalforcingsGroundediceMeltingRate']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Temperature,
++	md.results.TransientSolution[0].BasalforcingsGroundediceMeltingRate,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test441.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test441.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test441.py	(revision 22267)
+@@ -0,0 +1,93 @@
++#Test Name: MISMIP3D
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',100000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:] = 1.
++md.initialization.vy[:] = 1.
++md.geometry.thickness[:] = 500. - md.mesh.x / 10000.
++md.geometry.bed = -100. - md.mesh.x / 1000.
++md.geometry.base = -md.geometry.thickness * md.materials.rho_ice / md.materials.rho_water
++md.mask.groundedice_levelset = md.geometry.thickness + md.materials.rho_water / md.materials.rho_ice * md.geometry.bed
++pos = np.array(np.where(md.mask.groundedice_levelset >= 0.))
++md.geometry.base[pos] = md.geometry.bed[pos]
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++md = setflowequation(md,'SSA','all')
++
++#Boundary conditions:
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.x == max(md.mesh.x))] = 0.
++md.stressbalance.spcvx[:] = float('Nan')
++md.stressbalance.spcvy[:] = float('Nan')
++md.stressbalance.spcvz[:] = float('Nan')
++posA = np.intersect1d(np.array(np.where(md.mesh.y < 1000000.1)),np.array(np.where(md.mesh.y > 999999.9)))
++posB = np.intersect1d(np.array(np.where(md.mesh.y < 0.1)),np.array(np.where(md.mesh.y > -0.1)))
++pos = np.unique(np.concatenate((posA,posB)))
++md.stressbalance.spcvy[pos] = 0.
++pos2 = np.intersect1d(np.array(np.where(md.mesh.x < 0.1)), np.array(np.where(md.mesh.x > -0.1)))
++md.stressbalance.spcvx[pos2] = 0.
++md.stressbalance.spcvy[pos2] = 0.
++
++md.materials.rheology_B = 1. / ((10**-25)**(1./3.)) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_law = 'None'
++md.friction.coefficient[:] = np.sqrt(1e7) * np.ones((md.mesh.numberofvertices,))
++md.friction.p = 3. * np.ones((md.mesh.numberofelements,))
++md.smb.mass_balance[:] = 1.
++md.basalforcings.groundedice_melting_rate[:] = 0.
++md.basalforcings.floatingice_melting_rate[:] = 30.
++md.transient.isthermal = 0
++md.transient.isstressbalance = 1
++md.transient.isgroundingline = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 1
++md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
++md.groundingline.migration = 'SubelementMigration2'
++md.timestepping.final_time = 30.
++md.timestepping.time_step = 10.
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = [
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3']
++field_tolerances = [
++	2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].MaskGroundediceLevelset,
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].MaskGroundediceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].MaskGroundediceLevelset,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test343.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test343.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test343.py	(revision 22267)
+@@ -0,0 +1,66 @@
++#Test Name: SquareSheetConstrainedSmbGradientsEla2d
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from SMBgradientsela import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareSheetConstrained.py')
++md = setflowequation(md,'SSA','all')
++md.smb = SMBgradientsela()
++md.smb.ela = 1500. * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_pos = 0.002 * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_neg = 0.005 * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_max = 4. * (md.materials.rho_freshwater / md.materials.rho_ice) * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_min = -4. * (md.materials.rho_freshwater / md.materials.rho_ice) * np.ones((md.mesh.numberofvertices+1,))
++
++#Change geometry
++md.geometry.thickness = md.geometry.surface * 30.
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++
++#Transient options
++md.transient.requested_outputs = ['default','TotalSmb']
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = [
++	'Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1',
++	'Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2',
++	'Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3']
++field_tolerances = [
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1.5e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].SmbMassBalance,
++	md.results.TransientSolution[0].TotalSmb,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].TotalSmb,
++	md.results.TransientSolution[1].SmbMassBalance,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].SmbMassBalance,
++	md.results.TransientSolution[2].TotalSmb
++	]
+Index: ../trunk-jpl/test/NightlyRun/test540.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test540.py	(revision 22267)
+@@ -0,0 +1,66 @@
++#Test Name: PigTranCalvingDevSSA2d
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from calvingvonmises import *
++
++md = triangle(model(),'../Exp/Pig.exp',10000.)
++md = setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md = parameterize(md,'../Par/Pig.py')
++md = setflowequation(md,'SSA','all')
++md.timestepping.time_step = 2
++md.timestepping.final_time = 50
++
++#calving parameters
++md.mask.ice_levelset = 1e4 * (md.mask.ice_levelset + 0.5)
++md.calving = calvingvonmises()
++md.calving.meltingrate = np.zeros((md.mesh.numberofvertices,))
++md.transient.ismovingfront = 1
++md.levelset.spclevelset = float('NaN') * np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mesh.vertexonboundary)
++md.levelset.spclevelset[pos] = md.mask.ice_levelset[pos]
++
++md.cluster = generic('name',gethostname(),'np',2)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = [
++	'Vx1' ,'Vy1' ,'Vel1' ,'Pressure1' ,'Bed1' ,'Surface1' ,'Thickness1' ,'MaskIceLevelset1' ,
++	'Vx2' ,'Vy2' ,'Vel2' ,'Pressure2' ,'Bed2' ,'Surface2' ,'Thickness2' ,'MaskIceLevelset2' ,
++	'Vx10','Vy10','Vel10','Pressure10','Bed10','Surface10','Thickness10','MaskIceLevelset10',
++	]
++field_tolerances = [
++	1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,
++	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-12,
++	1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-9,
++	]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].MaskIceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].MaskIceLevelset,
++	md.results.TransientSolution[9].Vx,
++	md.results.TransientSolution[9].Vy,
++	md.results.TransientSolution[9].Vel,
++	md.results.TransientSolution[9].Pressure,
++	md.results.TransientSolution[9].Base,
++	md.results.TransientSolution[9].Surface,
++	md.results.TransientSolution[9].Thickness,
++	md.results.TransientSolution[9].MaskIceLevelset,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test442.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test442.py	(revision 22267)
+@@ -0,0 +1,97 @@
++#Test Name: MISMIP3DHO
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',100000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:] = 1.
++md.initialization.vy[:] = 1.
++md.geometry.thickness[:] = 500. - md.mesh.x / 10000.
++md.geometry.bed = -100. - md.mesh.x / 1000.
++md.geometry.base = -md.geometry.thickness * md.materials.rho_ice / md.materials.rho_water
++md.mask.groundedice_levelset = md.geometry.thickness + md.materials.rho_water / md.materials.rho_ice * md.geometry.bed
++pos = np.where(md.mask.groundedice_levelset >= 0.)
++md.geometry.base[pos] = md.geometry.bed[pos]
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++md = md.extrude(4,1.)
++md = setflowequation(md,'HO','all')
++
++#Boundary conditions:
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.x == max(md.mesh.x))] = 0.
++md.stressbalance.spcvx[:] = float('Nan')
++md.stressbalance.spcvy[:] = float('Nan')
++md.stressbalance.spcvz[:] = float('Nan')
++posA = np.intersect1d(np.array(np.where(md.mesh.y < 1000000.1)),np.array(np.where(md.mesh.y > 999999.9)))
++posB = np.intersect1d(np.array(np.where(md.mesh.y < 0.1)),np.array(np.where(md.mesh.y > -0.1)))
++pos = np.unique(np.concatenate((posA,posB)))
++md.stressbalance.spcvy[pos] = 0.
++pos2 = np.intersect1d(np.array(np.where(md.mesh.x < 0.1)), np.array(np.where(md.mesh.x > -0.1)))
++md.stressbalance.spcvx[pos2] = 0.
++md.stressbalance.spcvy[pos2] = 0.
++
++md.materials.rheology_B = 1. / ((10**-25)**(1./3.)) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_law = 'None'
++md.friction.coefficient[:] = np.sqrt(1e7) * np.ones((md.mesh.numberofvertices,))
++md.friction.p = 3. * np.ones((md.mesh.numberofelements,))
++md.smb.mass_balance[:] = 1.
++md.basalforcings.groundedice_melting_rate[:] = 0.
++md.basalforcings.floatingice_melting_rate[:] = 30.
++md.transient.isthermal = 0
++md.transient.isstressbalance = 1
++md.transient.isgroundingline = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 1
++md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
++md.groundingline.migration = 'SubelementMigration2'
++md.timestepping.final_time = 30
++md.timestepping.time_step = 10
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = [
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
++field_tolerances = [
++	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
++	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,
++	1e-8,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].MaskGroundediceLevelset,
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vz,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].MaskGroundediceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vz,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].MaskGroundediceLevelset,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vz,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test344.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test344.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test344.py	(revision 22267)
+@@ -0,0 +1,73 @@
++#Test Name: SquareSheetConstrainedSmbGradientsEla3d
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from SMBgradientsela import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareSheetConstrained.py')
++
++#Change geometry
++md.geometry.thickness = md.geometry.surface * 30.
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++
++md = md.extrude(3,1.)
++md = setflowequation(md,'HO','all')
++md.smb = SMBgradientsela()
++md.smb.ela = 1500. * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_pos = 0.002 * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_neg = 0.005 * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_max = 4. * (md.materials.rho_freshwater / md.materials.rho_ice) * np.ones((md.mesh.numberofvertices+1,))
++md.smb.b_min = -4. * (md.materials.rho_freshwater / md.materials.rho_ice) * np.ones((md.mesh.numberofvertices+1,))
++
++
++#Transient options
++md.transient.requested_outputs = ['default','TotalSmb']
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = ['Vx1','Vy1','Vz1','Vel1','Bed1','Surface1','Thickness1','Temperature1','SMB1','TotalSmb1',
++ 'Vx2','Vy2','Vz2','Vel2','Bed2','Surface2','Thickness2','Temperature2','SMB2','TotalSmb2',
++ 'Vx3','Vy3','Vz3','Vel3','Bed3','Surface3','Thickness3','Temperature3','SMB3','TotalSmb3']
++field_tolerances = [1e-09,1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,
++	1e-09,5e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vz,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].Temperature,
++	md.results.TransientSolution[0].SmbMassBalance,
++	md.results.TransientSolution[0].TotalSmb,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vz,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].Temperature,
++	md.results.TransientSolution[1].SmbMassBalance,
++	md.results.TransientSolution[1].TotalSmb,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vz,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].Temperature,
++	md.results.TransientSolution[2].SmbMassBalance,
++	md.results.TransientSolution[2].TotalSmb,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test460.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test460.py	(revision 22267)
+@@ -0,0 +1,38 @@
++#Test Name: SquareSheetShelfStressFSEstar
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from matestar import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md = md.extrude(3,1.)
++md.materials = matestar()
++md.materials.rheology_B = 3.15e8 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_Ec = np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_Es = 3 * np.ones((md.mesh.numberofvertices,))
++md.cluster = generic('name',gethostname(),'np',3)
++
++#Go solve
++field_names=[]
++field_tolerances=[]
++field_values=[]
++#md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.y);
++for i in ['SSA','HO','FS']:
++	md = setflowequation(md,i,'all')
++	md = solve(md,'Stressbalance')
++	field_names     = field_names + ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
++	field_tolerances = field_tolerances + [6e-07,6e-07,2e-06,1e-06,5e-07]
++	field_values = field_values + [
++			md.results.StressbalanceSolution.Vx,
++			md.results.StressbalanceSolution.Vy,
++			md.results.StressbalanceSolution.Vz,
++			md.results.StressbalanceSolution.Vel,
++			md.results.StressbalanceSolution.Pressure,
++			]
+Index: ../trunk-jpl/test/NightlyRun/test461.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test461.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test461.py	(revision 22267)
+@@ -0,0 +1,53 @@
++#Test Name: SquareSheetShelfThermalFSEstar
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from matestar import *
++
++md = triangle(model(),'../Exp/Square.exp',180000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = md.extrude(3,1.)
++md.materials = matestar()
++md.materials.rheology_B = 3.15e8 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_Ec = np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_Es = 3. * np.ones((md.mesh.numberofvertices,))
++
++md = setflowequation(md,'FS','all')
++md.initialization.waterfraction = np.zeros((md.mesh.numberofvertices,))
++md.initialization.watercolumn = np.zeros((md.mesh.numberofvertices,))
++md.transient.isstressbalance = 0
++md.transient.ismasstransport = 0
++md.transient.issmb = 1
++md.transient.isthermal = 1
++md.transient.isgroundingline = 0
++md.thermal.isenthalpy = 1
++md.thermal.isdynamicbasalspc = 1
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = [
++	'Enthalpy1','Waterfraction1','Temperature1',
++	'Enthalpy2','Waterfraction2','Temperature2',
++	'Enthalpy3','Waterfraction3','Temperature3']
++field_tolerances = [
++	1e-12,1e-11,1e-12,
++	1e-12,1e-10,1e-12,
++	1e-12,1e-9,1e-12]
++field_values = [
++	   md.results.TransientSolution[0].Enthalpy,
++	   md.results.TransientSolution[0].Waterfraction,
++	   md.results.TransientSolution[0].Temperature,
++	   md.results.TransientSolution[1].Enthalpy,
++	   md.results.TransientSolution[1].Waterfraction,
++	   md.results.TransientSolution[1].Temperature,
++	   md.results.TransientSolution[2].Enthalpy,
++	   md.results.TransientSolution[2].Waterfraction,
++	   md.results.TransientSolution[2].Temperature,
++	   ]
+Index: ../trunk-jpl/test/NightlyRun/test435.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test435.py	(revision 22267)
+@@ -0,0 +1,97 @@
++#Test Name: MISMIP3DHO
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',100000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:] = 1.
++md.initialization.vy[:] = 1.
++md.geometry.thickness[:] = 500. - md.mesh.x / 10000.
++md.geometry.bed = -100. - md.mesh.x / 1000.
++md.geometry.base = -md.geometry.thickness * md.materials.rho_ice / md.materials.rho_water
++md.mask.groundedice_levelset = md.geometry.thickness + md.materials.rho_water / md.materials.rho_ice * md.geometry.bed
++pos = np.where(md.mask.groundedice_levelset >= 0)
++md.geometry.base[pos] = md.geometry.bed[pos]
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++md = md.extrude(4,1.)
++md = setflowequation(md,'HO','all')
++
++#Boundary conditions:
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.x == max(md.mesh.x))] = 0.
++md.stressbalance.spcvx[:] = float('Nan')
++md.stressbalance.spcvy[:] = float('Nan')
++md.stressbalance.spcvz[:] = float('Nan')
++posA = np.intersect1d(np.array(np.where(md.mesh.y < 1000000.1)),np.array(np.where(md.mesh.y > 999999.9)))
++posB = np.intersect1d(np.array(np.where(md.mesh.y < 0.1)),np.array(np.where(md.mesh.y > -0.1)))
++pos = np.unique(np.concatenate((posA,posB)))
++md.stressbalance.spcvy[pos] = 0.
++pos2 = np.intersect1d(np.array(np.where(md.mesh.x < 0.1)), np.array(np.where(md.mesh.x > -0.1)))
++md.stressbalance.spcvx[pos2] = 0.
++md.stressbalance.spcvy[pos2] = 0.
++
++md.materials.rheology_B = 1. / ((10**-25)**(1./3.)) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_law = 'None'
++md.friction.coefficient[:] = np.sqrt(1e7) * np.ones((md.mesh.numberofvertices,))
++md.friction.p = 3. * np.ones((md.mesh.numberofelements,))
++md.smb.mass_balance[:] = 1.
++md.basalforcings.groundedice_melting_rate[:] = 0.
++md.basalforcings.floatingice_melting_rate[:] = 30.
++md.transient.isthermal = 0
++md.transient.isstressbalance = 1
++md.transient.isgroundingline = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 1
++md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
++md.groundingline.migration = 'SubelementMigration'
++md.timestepping.final_time = 30
++md.timestepping.time_step = 10
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = [
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Vz1','Pressure1','FloatingiceMeltingrate1',
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
++field_tolerances = [
++	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
++	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,
++	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].MaskGroundediceLevelset,
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vz,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].MaskGroundediceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vz,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].MaskGroundediceLevelset,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vz,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test462.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test462.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test462.py	(revision 22267)
+@@ -0,0 +1,49 @@
++#Test Name: SquareSheetShelfAmrBamgField
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 0
++md.transient.isthermal = 0
++md.transient.isgroundingline = 0
++#amr bamg settings, just field
++md.amr.hmin = 10000
++md.amr.hmax = 100000
++md.amr.fieldname = 'Vel'
++md.amr.keepmetric = 1
++md.amr.gradation = 1.2
++md.amr.groundingline_resolution = 2000
++md.amr.groundingline_distance = 0
++md.amr.icefront_resolution = 1000
++md.amr.icefront_distance = 0
++md.amr.thicknesserror_resolution = 1000
++md.amr.thicknesserror_threshold = 0
++md.amr.deviatoricerror_resolution = 1000
++md.amr.deviatoricerror_threshold = 0
++md.transient.amr_frequency = 1
++md.timestepping.start_time = 0
++md.timestepping.final_time = 3
++md.timestepping.time_step = 1
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = ['Vx','Vy','Vel','Pressure']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test436.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test436.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test436.py	(revision 22267)
+@@ -0,0 +1,45 @@
++#Test Name: SquareSheetShelfSteaEnthalpyRheologiesHO
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = md.extrude(3,2.)
++md = setflowequation(md,'HO','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.timestepping.time_step = 0.
++md.thermal.isenthalpy = 1
++md.initialization.waterfraction = np.zeros((md.mesh.numberofvertices,))
++md.initialization.watercolumn = np.zeros((md.mesh.numberofvertices,))
++
++#Go solve
++field_names = []
++field_tolerances = []
++field_values = []
++for i in ['LliboutryDuval', 'CuffeyTemperate']:
++	print ' '
++	print '====== Testing rheology law: ' + i + ' ====='
++
++	md.materials.rheology_law = i
++	md = solve(md,'Steadystate')
++	field_names += ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i,
++		'Temperature'+i,'Waterfraction'+i,'Enthalpy'+i]
++	field_tolerances += [2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,5e-10]
++	field_values += [
++		md.results.SteadystateSolution.Vx,
++		md.results.SteadystateSolution.Vy,
++		md.results.SteadystateSolution.Vz,
++		md.results.SteadystateSolution.Vel,
++		md.results.SteadystateSolution.Pressure,
++		md.results.SteadystateSolution.Temperature,
++		md.results.SteadystateSolution.Waterfraction,
++		md.results.SteadystateSolution.Enthalpy,
++		]
++
+Index: ../trunk-jpl/test/NightlyRun/test463.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test463.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test463.py	(revision 22267)
+@@ -0,0 +1,49 @@
++#Test Name: SquareSheetShelfAmrBamgGroundingline
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 0
++md.transient.isthermal = 0
++md.transient.isgroundingline = 0
++#amr bamg settings, just grounding line
++md.amr.hmin = 10000
++md.amr.hmax = 100000
++md.amr.fieldname = 'None'
++md.amr.keepmetric = 0
++md.amr.gradation = 1.2
++md.amr.groundingline_resolution = 12000
++md.amr.groundingline_distance = 100000
++md.amr.icefront_resolution = 1000
++md.amr.icefront_distance = 0
++md.amr.thicknesserror_resolution = 1000
++md.amr.thicknesserror_threshold = 0
++md.amr.deviatoricerror_resolution = 1000
++md.amr.deviatoricerror_threshold = 0
++md.transient.amr_frequency = 1
++md.timestepping.start_time = 0
++md.timestepping.final_time = 3
++md.timestepping.time_step = 1
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = ['Vx','Vy','Vel','Pressure']
++field_tolerances = [1e-8,1e-8,1e-8,1e-8]
++field_values = [
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test437.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test437.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test437.py	(revision 22267)
+@@ -0,0 +1,96 @@
++#Test Name: ThermalEnthBasalcondsTrans
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',300000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareThermal.py')
++
++h = 100.
++md.geometry.thickness = h * np.ones((md.mesh.numberofvertices,))
++md.geometry.base = -h * np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++
++md.extrude(41,2.)
++md = setflowequation(md,'HO','all')
++md.thermal.isenthalpy = True
++md.thermal.isdynamicbasalspc = True
++
++#Basal forcing
++Ts = 273.15-3.
++Tb = 273.15-1.
++Tsw = Tb
++qgeo = md.materials.thermalconductivity / max(md.geometry.thickness) * (Tb - Ts) #qgeo=kappa*(Tb-Ts)/H
++md.basalforcings.geothermalflux[np.where(md.mesh.vertexonbase)] = qgeo
++md.initialization.temperature = qgeo / md.materials.thermalconductivity * (md.geometry.surface - md.mesh.z) + Ts
++
++#Surface forcing
++pos = np.where(md.mesh.vertexonsurface)
++SPC_cold = float('NaN') * np.ones((md.mesh.numberofvertices,))
++SPC_warm = float('NaN') * np.ones((md.mesh.numberofvertices,))
++SPC_cold[pos] = Ts
++SPC_warm[pos] = Tsw
++md.thermal.spctemperature = SPC_cold
++md.timestepping.time_step = 5.
++t0 = 0.
++t1 = 10.
++t2 = 100.
++md.timestepping.final_time = 400.
++md.thermal.spctemperature = np.array([SPC_cold,SPC_cold,SPC_warm,SPC_warm,SPC_cold]).T
++md.thermal.spctemperature = np.vstack((md.thermal.spctemperature,[t0, t1-1, t1, t2-1, t2]))
++#print np.shape(md.thermal.spctemperature)
++#print md.thermal.spctemperature
++
++#Additional settings
++md.transient.ismasstransport = False
++md.transient.isstressbalance = False
++md.transient.issmb = True
++md.transient.isthermal = True
++md.thermal.stabilization = False
++
++#Go solve
++md.verbose = verbose(0)
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = ['Enthalpy1','Temperature1','Waterfraction1','BasalMeltingRate1','Watercolumn1',
++		   'Enthalpy2','Temperature2','Waterfraction2','BasalMeltingRate2','Watercolumn2',
++		   'Enthalpy3','Temperature3','Waterfraction3','BasalMeltingRate3','Watercolumn3',
++		   'Enthalpy4','Temperature4','Waterfraction4','BasalMeltingRate4','Watercolumn4']
++field_tolerances = [1.e-10,1.e-10,1.e-10,1.e-9,1.e-10,
++		    1.e-10,1.e-10,1.e-10,2.e-9,2.e-10,
++		    1.e-10,1.e-10,1.e-10,2.e-9,1.e-10,
++		    1.e-10,1.e-10,1.e-10,2.e-9,1.e-10]
++i1 = 0
++i2 = int(np.ceil(t2 / md.timestepping.time_step) + 2)-1
++i3 = int(np.ceil(md.timestepping.final_time / (2. * md.timestepping.time_step)))-1
++i4 = np.shape(md.results.TransientSolution)[0]-1
++field_values = [
++	md.results.TransientSolution[i1].Enthalpy,
++	md.results.TransientSolution[i1].Temperature,
++	md.results.TransientSolution[i1].Waterfraction,
++	md.results.TransientSolution[i1].BasalforcingsGroundediceMeltingRate,
++	md.results.TransientSolution[i1].Watercolumn,
++	md.results.TransientSolution[i2].Enthalpy,
++	md.results.TransientSolution[i2].Temperature,
++	md.results.TransientSolution[i2].Waterfraction,
++	md.results.TransientSolution[i2].BasalforcingsGroundediceMeltingRate,
++	md.results.TransientSolution[i2].Watercolumn,
++	md.results.TransientSolution[i3].Enthalpy,
++	md.results.TransientSolution[i3].Temperature,
++	md.results.TransientSolution[i3].Waterfraction,
++	md.results.TransientSolution[i3].BasalforcingsGroundediceMeltingRate,
++	md.results.TransientSolution[i3].Watercolumn,
++	md.results.TransientSolution[i4].Enthalpy,
++	md.results.TransientSolution[i4].Temperature,
++	md.results.TransientSolution[i4].Waterfraction,
++	md.results.TransientSolution[i4].BasalforcingsGroundediceMeltingRate,
++	md.results.TransientSolution[i4].Watercolumn,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test464.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test464.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test464.py	(revision 22267)
+@@ -0,0 +1,49 @@
++#Test Name: SquareSheetShelfAmrBamgIceFront
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 0
++md.transient.isthermal = 0
++md.transient.isgroundingline = 0
++#amr bamg settings, just ice front
++md.amr.hmin = 10000
++md.amr.hmax = 100000
++md.amr.fieldname = 'None'
++md.amr.keepmetric = 0
++md.amr.gradation = 1.2
++md.amr.groundingline_resolution = 12000
++md.amr.groundingline_distance = 0
++md.amr.icefront_resolution = 12000
++md.amr.icefront_distance = 100000
++md.amr.thicknesserror_resolution = 1000
++md.amr.thicknesserror_threshold = 0
++md.amr.deviatoricerror_resolution = 1000
++md.amr.deviatoricerror_threshold = 0
++md.transient.amr_frequency = 1
++md.timestepping.start_time = 0
++md.timestepping.final_time = 3
++md.timestepping.time_step = 1
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = ['Vx','Vy','Vel','Pressure']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test438.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test438.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test438.py	(revision 22267)
+@@ -0,0 +1,53 @@
++#Test Name: TransientFrictionWaterlayer2D
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from frictionwaterlayer import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.friction = frictionwaterlayer(md)
++md.friction.water_layer = np.zeros((md.mesh.numberofvertices+1,2))
++md.friction.water_layer[:,1] = 1.
++md.friction.water_layer[md.mesh.numberofvertices,:] = [1.,2.]
++md.friction.f = 0.8
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
++	      'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
++	      'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++		  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++		  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness
++	]
+Index: ../trunk-jpl/test/NightlyRun/test465.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test465.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test465.py	(revision 22267)
+@@ -0,0 +1,49 @@
++#Test Name: SquareSheetShelfAmrBamgAll
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 0
++md.transient.isthermal = 0
++md.transient.isgroundingline = 0
++#amr bamg settings, field, grounding line and ice front
++md.amr.hmin = 20000
++md.amr.hmax = 100000
++md.amr.fieldname = 'Vel'
++md.amr.keepmetric = 0
++md.amr.gradation = 1.2
++md.amr.groundingline_resolution = 10000
++md.amr.groundingline_distance = 100000
++md.amr.icefront_resolution = 15000
++md.amr.icefront_distance = 100000
++md.amr.thicknesserror_resolution = 1000
++md.amr.thicknesserror_threshold = 0
++md.amr.deviatoricerror_resolution = 1000
++md.amr.deviatoricerror_threshold = 0
++md.transient.amr_frequency = 1
++md.timestepping.start_time = 0
++md.timestepping.final_time = 3
++md.timestepping.time_step = 1
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     = ['Vx','Vy','Vel','Pressure']
++field_tolerances = [1e-8,1e-8,1e-8,1e-8]
++field_values = [
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test439.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test439.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test439.py	(revision 22267)
+@@ -0,0 +1,54 @@
++#Test Name: TransientFrictionWaterlayer3D
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from frictionwaterlayer import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = md.extrude(4,1.)
++md = setflowequation(md,'HO','all')
++md.friction = frictionwaterlayer(md)
++md.friction.water_layer = np.zeros((md.mesh.numberofvertices+1,2))
++md.friction.water_layer[:,1] = 1.
++md.friction.water_layer[md.mesh.numberofvertices,:] = [1.,2.]
++md.friction.f = 0.8
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
++	      'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
++	      'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances = [1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
++		    1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
++		    1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness
++	]
+Index: ../trunk-jpl/test/NightlyRun/test340.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test340.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test340.py	(revision 22267)
+@@ -0,0 +1,46 @@
++#Test Name: SquareSheetConstrainedSmbGradientsEla3d
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from taoinversion import *
++
++md = triangle(model(),'../Exp/Square.exp',200000.)
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1.)
++md = setflowequation(md,'HO','all')
++
++#control parameters
++md.inversion = taoinversion()
++md.inversion.iscontrol = 1
++md.inversion.control_parameters = ['FrictionCoefficient']
++md.inversion.min_parameters = 1. * np.ones((md.mesh.numberofvertices,))
++md.inversion.max_parameters = 200. * np.ones((md.mesh.numberofvertices,))
++md.inversion.maxsteps = 2
++md.inversion.maxiter = 6
++md.inversion.cost_functions = [102,501]
++md.inversion.cost_functions_coefficients = np.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1] = 2. * 1e-7
++md.inversion.vx_obs = md.initialization.vx
++md.inversion.vy_obs = md.initialization.vy
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Stressbalance')
++
++#Fields and tolerances to track changes
++field_names      = ['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances = [3e-08,1e-07,5e-10,1e-10,1e-09,1e-09,1e-09]
++field_values = [
++	md.results.StressbalanceSolution.Gradient1,
++	md.results.StressbalanceSolution.J,
++	md.results.StressbalanceSolution.FrictionCoefficient,
++	md.results.StressbalanceSolution.Pressure,
++	md.results.StressbalanceSolution.Vel,
++	md.results.StressbalanceSolution.Vx,
++	md.results.StressbalanceSolution.Vy
++]
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 22267)
+@@ -0,0 +1,95 @@
++#Test Name: MISMIP3D
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md = triangle(model(),'../Exp/Square.exp',100000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:] = 1.
++md.initialization.vy[:] = 1.
++md.geometry.thickness[:] = 500. - md.mesh.x / 10000.
++md.geometry.bed = -100. - md.mesh.x / 1000.
++md.geometry.base = -md.geometry.thickness * md.materials.rho_ice / md.materials.rho_water
++md.mask.groundedice_levelset = md.geometry.thickness + md.materials.rho_water / md.materials.rho_ice * md.geometry.bed
++pos = np.where(md.mask.groundedice_levelset >= 0.)
++md.geometry.base[pos] = md.geometry.bed[pos]
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++md = setflowequation(md,'SSA','all')
++
++#Boundary conditions:
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.x == max(md.mesh.x))] = 0.
++md.stressbalance.spcvx[:] = float('NaN')
++md.stressbalance.spcvy[:] = float('NaN')
++md.stressbalance.spcvz[:] = float('NaN')
++posA = np.intersect1d(np.array(np.where(md.mesh.y < 1000000.1)),np.array(np.where(md.mesh.y > 999999.9)))
++posB = np.intersect1d(np.array(np.where(md.mesh.y < 0.1)),np.array(np.where(md.mesh.y > -0.1)))
++pos = np.unique(np.concatenate((posA,posB)))
++md.stressbalance.spcvy[pos] = 0.
++pos2 = np.intersect1d(np.array(np.where(md.mesh.x < 0.1)), np.array(np.where(md.mesh.x > -0.1)))
++md.stressbalance.spcvx[pos2] = 0.
++md.stressbalance.spcvy[pos2] = 0.
++
++md.materials.rheology_B = 1. / ((10**-25)**(1. / 3.)) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_law = 'None'
++md.friction.coefficient[:] = np.sqrt(10**7) * np.ones((md.mesh.numberofvertices,))
++md.friction.p = 3. * np.ones((md.mesh.numberofelements,))
++md.smb.mass_balance[:] = 1.
++md.basalforcings.groundedice_melting_rate[:] = 0.
++md.basalforcings.floatingice_melting_rate[:] = 30.
++md.transient.isthermal = 0
++md.transient.isstressbalance = 1
++md.transient.isgroundingline = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 1
++md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
++md.groundingline.migration = 'SubelementMigration'
++md.timestepping.final_time = 30
++md.timestepping.time_step = 10
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++#print md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate
++#print md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate
++#print md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate
++
++#Fields and tolerances to track changes
++field_names     = [
++	'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',
++	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',
++	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3']
++field_tolerances = [2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,
++	3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,
++	1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13]
++field_values = [
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].MaskGroundediceLevelset,
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].MaskGroundediceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].MaskGroundediceLevelset,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test808.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test808.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test808.py	(revision 22267)
+@@ -0,0 +1,76 @@
++#Test Name: SquareShelfLevelsetCalvingSSA2dMinThickness
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++import numpy as np
++from calvingminthickness import *
++
++md = triangle(model(),'../Exp/Square.exp',30000.)
++md = setmask(md,'all','')
++md = parameterize(md,'../Par/SquareShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++
++x = md.mesh.x
++xmin = min(x)
++xmax = max(x)
++Lx = (xmax - xmin)
++alpha = 2. / 3.
++md.mask.ice_levelset = -1 + 2 * (md.mesh.y > 9e5)
++
++md.timestepping.time_step = 1
++md.timestepping.final_time = 30
++
++#Transient
++md.transient.isstressbalance = 1
++md.transient.ismasstransport = 1
++md.transient.issmb = 1
++md.transient.isthermal = 0
++md.transient.isgroundingline = 0
++md.transient.isgia = 0
++md.transient.ismovingfront = 1
++
++md.calving = calvingminthickness()
++md.calving.min_thickness = 400
++md.calving.meltingrate = np.zeros((md.mesh.numberofvertices,))
++md.levelset.spclevelset = float('NaN')* np.ones((md.mesh.numberofvertices,))
++md.levelset.reinit_frequency = 1
++
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = [
++	'Vx1','Vy1','Vel1','Pressure1','Thickness1','Surface1','MaskIceLevelset1'
++	'Vx2','Vy2','Vel2','Pressure2','Thickness2','Surface2','MaskIceLevelset2'
++	'Vx3','Vy3','Vel3','Pressure3','Thickness3','Surface3','MaskIceLevelset3']
++field_tolerances = [
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9,
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9,
++	1e-8,1e-8,1e-8,1e-9,1e-9,1e-9,3e-9]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].MaskIceLevelset,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].MaskIceLevelset,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].MaskIceLevelset
++	]
+Index: ../trunk-jpl/test/NightlyRun/test2424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2424.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2424.py	(revision 22267)
+@@ -0,0 +1,51 @@
++#Test Name: SquareSheetShelfGroundingLine2dAggressive. From test424, with sea level increasing.
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from newforcing import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'../Exp/SquareShelf.exp','')
++md = parameterize(md,'../Par/SquareSheetShelf.py')
++md = setflowequation(md,'SSA','all')
++md.initialization.vx[:] = 0.
++md.initialization.vy[:] = 0.
++md.smb.mass_balance[:] = 0.
++
++md.geometry.base = -700. - np.abs(md.mesh.y-500000.) / 1000.
++md.geometry.bed = -700. - np.abs(md.mesh.y-500000.) / 1000.
++md.geometry.thickness[:] = 1000.
++md.geometry.surface = md.geometry.base + md.geometry.thickness
++
++md.transient.isstressbalance = 0
++md.transient.isgroundingline = 1
++md.transient.isthermal = 0
++md.groundingline.migration = 'AggressiveMigration'
++md.transient.requested_outputs = ['IceVolume','IceVolumeAboveFloatation','Sealevel']
++
++md.timestepping.time_step = .1
++md.slr.sealevel = newforcing(md.timestepping.start_time, md.timestepping.final_time,
++			     md.timestepping.time_step, -200., 200., md.mesh.numberofvertices)
++
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Transient')
++
++#we are checking that the grounding line position is near the theorical one, which is the 0 contour level 
++#of surface - sealevel - (1-di)* thickness 
++
++nsteps = len(md.results.TransientSolution)
++field_names = []
++field_tolerances = []
++field_values = []
++#time is off by the year constant
++for i in range(nsteps):
++	field_names.append('Time-' + str(md.results.TransientSolution[i].time) + 
++		'-yr-ice_levelset-S-sl-(1-di)*H')
++	field_tolerances.append(1e-12)
++	field_values.append(md.results.TransientSolution[i].MaskGroundediceLevelset.reshape(-1,) - (md.geometry.surface - md.results.TransientSolution[i].Sealevel.reshape(-1,) - (1 - md.materials.rho_ice / md.materials.rho_water) * md.geometry.thickness))
++
+Index: ../trunk-jpl/test/NightlyRun/test260.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test260.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test260.py	(revision 22267)
+@@ -0,0 +1,31 @@
++#Test Name: SquareShelfStressSSA2dEnhanced
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from matenhancedice import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'all','')
++md.materials = matenhancedice()
++md.materials.rheology_B = 3.15e8 * np.ones(md.mesh.numberofvertices,)
++md.materials.rheology_n = 3 * np.ones(md.mesh.numberofelements,)
++md.materials.rheology_E = np.ones(md.mesh.numberofvertices,)
++md = parameterize(md,'../Par/SquareShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md = solve(md,'Stressbalance')
++
++#Fields and tolerances to track changes
++field_names      = ['Vx','Vy','Vel','Pressure']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.StressbalanceSolution.Vx,
++	md.results.StressbalanceSolution.Vy,
++	md.results.StressbalanceSolution.Vel,
++	md.results.StressbalanceSolution.Pressure,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test350.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test350.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test350.py	(revision 22267)
+@@ -0,0 +1,94 @@
++#Test Name: SquareSheetHydrologySommers
++from operator import itemgetter
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from frictionsommers import *
++from hydrologysommers import *
++from transient import *
++
++md = triangle(model(),'../Exp/Square.exp',50000.)
++md.mesh.x = md.mesh.x / 1000
++md.mesh.y = md.mesh.y / 1000
++md = setmask(md,'','')
++md = parameterize(md,'../Par/SquareSheetConstrained.py')
++md.transient = transient().deactivateall()
++md.transient.ishydrology = 1
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',2)
++
++#Use hydroogy coupled friciton law
++md.friction = frictionsommers(md)
++
++#Change hydrology class to Sommers' model
++md.hydrology = hydrologysommers()
++
++#Change geometry
++md.geometry.base = -.02 * md.mesh.x + 20.
++md.geometry.thickness = 300. * np.ones((md.mesh.numberofvertices,))
++md.geometry.bed = md.geometry.base
++md.geometry.surface = md.geometry.bed + md.geometry.thickness
++
++#define the initial water head as being such that the water pressure is 50% of the ice overburden pressure
++md.hydrology.head = 0.5 * md.materials.rho_ice / md.materials.rho_freshwater * md.geometry.thickness + md.geometry.base
++md.hydrology.gap_height = 0.01 * np.ones((md.mesh.numberofelements,))
++md.hydrology.bump_spacing = 2 * np.ones((md.mesh.numberofelements,))
++md.hydrology.bump_height = 0.05 * np.ones((md.mesh.numberofelements,))
++md.hydrology.englacial_input = 0.5 * np.ones((md.mesh.numberofvertices,))
++md.hydrology.reynolds= 1000. * np.ones((md.mesh.numberofelements,))
++md.hydrology.spchead = float('NaN') * np.ones((md.mesh.numberofvertices,))
++pos = np.intersect1d(np.array(np.where(md.mesh.vertexonboundary)), np.array(np.where(md.mesh.x == 1000)))
++md.hydrology.spchead[pos] = md.geometry.base[pos]
++
++#Define velocity
++md.initialization.vx = 1e-6 * md.constants.yts * np.ones((md.mesh.numberofvertices,))
++md.initialization.vy = np.zeros((md.mesh.numberofvertices,))
++
++md.timestepping.time_step = 3. * 3600. / md.constants.yts
++md.timestepping.final_time = .5 / 365.
++md.materials.rheology_B = (5e-25)**(-1. / 3.) * np.ones((md.mesh.numberofvertices,))
++
++#Add one moulin and Neumann BC, varying in time
++a = np.sqrt((md.mesh.x - 500.)**2 + (md.mesh.y - 500.)**2)
++pos = min(enumerate(a), key=itemgetter(1))[0]
++time = np.arange(0,md.timestepping.final_time+1,md.timestepping.time_step)
++md.hydrology.moulin_input = np.zeros((md.mesh.numberofvertices+1,np.size(time)))
++md.hydrology.moulin_input[-1,:] = time
++md.hydrology.moulin_input[pos,:] = 5. * (1. - np.sin(2. * np.pi / (1. / 365.) * time))
++md.hydrology.neumannflux = np.zeros((md.mesh.numberofelements+1,np.size(time)))
++md.hydrology.neumannflux[-1,:] = time
++segx = md.mesh.x[md.mesh.segments[:,0]-1]
++segy = md.mesh.y[md.mesh.segments[:,0]-1]
++posA = np.intersect1d(np.intersect1d(np.array(np.where(segx < 1.)),np.array(np.where(segy > 400.))), np.array(np.where(segy < 600.)))
++pos = (md.mesh.segments[posA]-1)[:,2]
++md.hydrology.neumannflux[pos,:] = np.tile(0.05*(1.-np.sin(2.*np.pi/(1./365.)*time)),(len(pos),1))
++
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names = [
++	'HydrologyHead1','HydrologyGapHeight1',
++	'HydrologyHead2','HydrologyGapHeight2',
++	'HydrologyHead3','HydrologyGapHeight3',
++	'HydrologyHead4','HydrologyGapHeight4']
++field_tolerances = [
++	1e-13, 1e-13,
++	1e-13, 1e-13,
++	1e-13, 1e-13,
++	1e-13, 1e-12]
++field_values = [
++	md.results.TransientSolution[0].HydrologyHead,
++	md.results.TransientSolution[0].HydrologyGapHeight,
++	md.results.TransientSolution[1].HydrologyHead,
++	md.results.TransientSolution[1].HydrologyGapHeight,
++	md.results.TransientSolution[2].HydrologyHead,
++	md.results.TransientSolution[2].HydrologyGapHeight,
++	md.results.TransientSolution[3].HydrologyHead,
++	md.results.TransientSolution[3].HydrologyGapHeight
++	]
++
+Index: ../trunk-jpl/test/NightlyRun/test243.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test243.py	(revision 22267)
+@@ -0,0 +1,72 @@
++#Test Name: SquareShelfSMBGemb
++import numpy as np
++import scipy.io as spio
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from SMBgemb import *
++
++md = triangle(model(),'../Exp/Square.exp',200000.)
++md = setmask(md,'all','')
++md = parameterize(md,'../Par/SquareShelf.py')
++md = setflowequation(md,'SSA','all')
++md.materials.rho_ice = 910
++md.cluster = generic('name',gethostname(),'np',3)
++
++#Use of Gemb method for SMB computation
++md.smb = SMBgemb()
++md.smb.setdefaultparameters(md.mesh,md.geometry)
++
++#load hourly surface forcing date from 1979 to 2009:
++inputs = spio.loadmat('../Data/gemb_input.mat',squeeze_me=True)
++
++#setup the inputs: 
++md.smb.Ta = np.append(np.tile(np.conjugate(inputs['Ta0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.V = np.append(np.tile(np.conjugate(inputs['V0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.dswrf = np.append(np.tile(np.conjugate(inputs['dsw0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.dlwrf = np.append(np.tile(np.conjugate(inputs['dlw0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.P = np.append(np.tile(np.conjugate(inputs['P0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.eAir = np.append(np.tile(np.conjugate(inputs['eAir0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.pAir = np.append(np.tile(np.conjugate(inputs['pAir0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.pAir = np.append(np.tile(np.conjugate(inputs['pAir0']),(md.mesh.numberofelements,1)),np.conjugate([inputs['dateN']]),axis=0)
++md.smb.Vz = np.tile(np.conjugate(inputs['LP']['Vz']),(md.mesh.numberofelements,1)).flatten()
++md.smb.Tz = np.tile(np.conjugate(inputs['LP']['Tz']),(md.mesh.numberofelements,1)).flatten()
++md.smb.Tmean = np.tile(np.conjugate(inputs['LP']['Tmean']),(md.mesh.numberofelements,1)).flatten()
++md.smb.C = np.tile(np.conjugate(inputs['LP']['C']),(md.mesh.numberofelements,1)).flatten()
++
++#smb settings
++md.smb.requested_outputs = ['SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance']
++
++#only run smb core: 
++md.transient.isstressbalance = 0
++md.transient.ismasstransport = 0
++md.transient.isthermal = 0
++
++#time stepping: 
++md.timestepping.start_time = 1965.
++md.timestepping.final_time = 1966.
++md.timestepping.time_step = 1. / 365.0
++md.timestepping.interp_forcings = 0.
++
++#Run transient
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance']
++field_tolerances = [5e-4,5e-5,0.0006,0.0002,1e-5,0.0003,2e-5,2e-7,1e-7]
++#shape is different in python solution (fixed using reshape) which can cause test failure:
++field_values = [
++	md.results.TransientSolution[-1].SmbDz[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbT[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbD[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbRe[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbGdn[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbGsp[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbA[0,0:240].reshape(1,-1),
++	md.results.TransientSolution[-1].SmbEC[0],
++	md.results.TransientSolution[-1].SmbMassBalance[0],
++	]
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 22266)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 22267)
+@@ -50,9 +50,9 @@
+ 	if np.size(data) > 1 and np.size(data,0)==timeserieslength:
+ 		yts = options.getfieldvalue('yts')
+ 		if np.ndim(data) > 1:
+-			data[-1,:] = data[-1,:]*yts
++			data[-1,:] = yts*data[-1,:]
+ 		else:
+-			data[-1] = data[-1]*yts
++			data[-1] = yts*data[-1]
+ 
+ 	#Step 1: write the enum to identify this record uniquely
+ 	fid.write(struct.pack('i',len(name)))
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22266)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22267)
+@@ -174,8 +174,6 @@
+ 		yts=md.constants.yts
+ 		if fieldname=='BalancethicknessThickeningRate':
+ 			field = field*yts
+-		elif fieldname=='Time':
+-			field = field/yts
+ 		elif fieldname=='HydrologyWaterVx':
+ 			field = field*yts
+ 		elif fieldname=='HydrologyWaterVy':
+@@ -190,17 +188,36 @@
+ 			field = field*yts
+ 		elif fieldname=='BasalforcingsGroundediceMeltingRate':
+ 			field = field*yts
++		elif fieldname=='BasalforcingsFloatingiceMeltingRate':
++			field = field*yts
+ 		elif fieldname=='TotalFloatingBmb':
+-			field = field/10.**12.*yts #(GigaTon/year)
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='TotalGroundedBmb':
+-			field = field/10.**12.*yts #(GigaTon/year)
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='TotalSmb':
+-			field = field/10.**12.*yts #(GigaTon/year)
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='SmbMassBalance':
+ 			field = field*yts
++		elif fieldname=='SmbPrecipitation':
++			field = field*yts
++		elif fieldname=='SmbRunoff':
++			field = field*yts
++		elif fieldname=='SmbEC':
++			field = field*yts
++		elif fieldname=='SmbAccumulation':
++			field = field*yts
++		elif fieldname=='SmbMelt':
++			field = field*yts
++    		elif fieldname=='SmbDz_add':
++        		field = field*yts
++    		elif fieldname=='SmbM_add':
++        		field = field*yts
+ 		elif fieldname=='CalvingCalvingrate':
+ 			field = field*yts
+ 
++		if time !=-9999:
++			time = time/yts
++
+ 		saveres=OrderedDict()
+ 		saveres['fieldname']=fieldname
+ 		saveres['time']=time
+Index: ../trunk-jpl/src/m/geometry/NowickiProfile.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/NowickiProfile.py	(nonexistent)
++++ ../trunk-jpl/src/m/geometry/NowickiProfile.py	(revision 22267)
+@@ -0,0 +1,44 @@
++import numpy as np
++
++def NowickiProfile(x):
++	"""
++	NOWICKIPROFILE - Create profile at the transition zone based on Sophie Nowicki's thesis
++
++	Usage:
++		[b h] = NowickiProfile(x)
++
++		- h = ice thickness
++		- b = ice base
++		- x = along flow coordinate
++	"""
++	#Constant for theoretical profile
++	delta = 0.1		#ratio of water density and ice density -1
++	hg    = 1.		#ice thickness at grounding line
++	sea   = hg / (1+delta)	#sea level
++	lamda = 0.1		#ration of deviatoric stress and water pressure
++	beta  = 5.		#friction coefficient
++	ms    = 0.005		#surface accumulation rat
++	mu    = 5.		#viscosity
++	q     = 0.801		#ice mass flux
++
++	#mesh parameters
++	b = np.zeros((np.size(x),))
++	h = np.zeros((np.size(x),))
++	s = np.zeros((np.size(x),))
++
++	#upstream of the GL
++	for i in range(np.size(x) / 2):
++		ss = np.roots([1, 4 * lamda * beta, 0, 0, 6 * lamda * ms * x[i]**2 +
++				12 * lamda * q * x[i] - hg**4 - 4 * lamda * beta * hg**3])
++		for j in range(4):
++			if (np.isreal(ss[j]) > 0) and (np.imag(ss[j]) == 0):
++				s[i] = ss[j]
++		h[i] = s[i]
++		b[i] = 0.
++
++	#downstream of the GL
++	for i in range(np.size(x) / 2, np.size(x)):
++		h[i] = (x[i] / (4. * (delta+1) * q) + hg**(-2))**(-0.5) # ice thickness for ice shelf from (3.1)
++		b[i] = sea - h[i] * (1. / (1+delta))
++
++	return [b, h, sea]
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 22266)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 22267)
+@@ -83,7 +83,7 @@
+ 	#Check numel
+ 	if options.exist('numel'):
+ 		fieldnumel=options.getfieldvalue('numel')
+-		if np.size(field) not in fieldnumel:
++		if (type(fieldnumel) == int and np.size(field) != fieldnumel) or (type(fieldnumel) == list and np.size(field) not in fieldnumel):
+ 			if   len(fieldnumel)==1:
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+ 					"field '%s' size should be %d" % (fieldname,fieldnumel)))
+@@ -100,6 +100,7 @@
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"NaN values found in field '%s'" % fieldname))
+ 
++
+ 	#check Inf
+ 	if options.getfieldvalue('Inf',0):
+ 		if np.any(np.isinf(field)):
+@@ -106,6 +107,7 @@
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"Inf values found in field '%s'" % fieldname))
+ 
++
+ 	#check cell
+ 	if options.getfieldvalue('cell',0):
+ 		if not isinstance(field,(tuple,list,dict)):
+@@ -128,13 +130,28 @@
+ 
+ 	#check greater
+ 	if options.exist('>='):
+-		lowerbound=options.getfieldvalue('>=')
+-		if np.any(field<lowerbound):
++		lowerbound = options.getfieldvalue('>=')
++		field2 = np.reshape(field,(np.prod(np.shape(field)),1),order='F').copy()
++		if options.getfieldvalue('timeseries',0):
++			field2 = np.reshape(field[:-1],np.prod(np.shape(field[:-1])),1)
++
++		if options.getfieldvalue('singletimeseries',0):
++			field2 = np.reshape(field[0],np.prod(np.shape(field[0])),1)
++
++		if np.any(field2<lowerbound):
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"field '%s' should have values above %d" % (fieldname,lowerbound)))
++
+ 	if options.exist('>'):
+ 		lowerbound=options.getfieldvalue('>')
+-		if np.any(field<=lowerbound):
++		field2 = np.reshape(field,(np.prod(np.shape(field)),1),order='F').copy()
++		if options.getfieldvalue('timeseries',0):
++			field2 = np.reshape(field[:-1],np.prod(np.shape(field[:-1])),1)
++
++		if options.getfieldvalue('singletimeseries',0):
++			field2 = np.reshape(field[0],np.prod(np.shape(field[0])),1)
++
++		if np.any(field2<=lowerbound):
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"field '%s' should have values above %d" % (fieldname,lowerbound)))
+ 
+@@ -141,12 +158,26 @@
+ 	#check smaller
+ 	if options.exist('<='):
+ 		upperbound=options.getfieldvalue('<=')
+-		if np.any(field>upperbound):
++		field2 = np.reshape(field,(np.prod(np.shape(field)),1),order='F').copy()
++		if options.getfieldvalue('timeseries',0):
++			field2 = np.reshape(field[:-1],np.prod(np.shape(field[:-1])),1)
++
++		if options.getfieldvalue('singletimeseries',0):
++			field2 = np.reshape(field[0],np.prod(np.shape(field[0])),1)
++
++		if np.any(field2>upperbound):
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"field '%s' should have values below %d" % (fieldname,upperbound)))
+ 	if options.exist('<'):
+ 		upperbound=options.getfieldvalue('<')
+-		if np.any(field>=upperbound):
++		field2 = np.reshape(field,(np.prod(np.shape(field)),1),order='F').copy()
++		if options.getfieldvalue('timeseries',0):
++			field2 = np.reshape(field[:-1],np.prod(np.shape(field[:-1])),1)
++
++		if options.getfieldvalue('singletimeseries',0):
++			field2 = np.reshape(field[0],np.prod(np.shape(field[0])),1)
++
++		if np.any(field2>=upperbound):
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 				"field '%s' should have values below %d" % (fieldname,upperbound)))
+ 
+@@ -163,15 +194,15 @@
+ 
+ 	#Check forcings (size and times)
+ 	if options.getfieldvalue('timeseries',0):
+-		if   np.size(field,0)==md.mesh.numberofvertices:
++		if np.size(field,0)==md.mesh.numberofvertices or np.size(field,0)==md.mesh.numberofelements:
+ 			if np.ndim(field)>1 and not np.size(field,1)==1:
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+ 					"field '%s' should have only one column as there are md.mesh.numberofvertices lines" % fieldname))
+-		elif np.size(field,0)==md.mesh.numberofvertices+1 or np.size(field,0)==2:
+-			if not all(field[-1,:]==np.sort(field[-1,:])):
++		elif np.size(field,0)==md.mesh.numberofvertices+1 or np.size(field,0)==md.mesh.numberofelements+1:
++			if np.ndim(field) > 1 and not all(field[-1,:]==np.sort(field[-1,:])):
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+ 					"field '%s' columns should be sorted chronologically" % fieldname))
+-			if any(field[-1,0:-1]==field[-1,1:]):
++			if np.ndim(field) > 1 and any(field[-1,0:-1]==field[-1,1:]):
+ 				md = md.checkmessage(options.getfieldvalue('message',\
+ 					"field '%s' columns must not contain duplicate timesteps" % fieldname))
+ 		else:
+@@ -197,3 +228,4 @@
+ 
+ 	return md
+ 
++
+Index: ../trunk-jpl/src/m/mech/newforcing.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/newforcing.py	(nonexistent)
++++ ../trunk-jpl/src/m/mech/newforcing.py	(revision 22267)
+@@ -0,0 +1,34 @@
++import numpy as np
++
++def newforcing(t0,t1,deltaT,f0,f1,nodes):
++	'''
++FUNCTION NEWFORCING Build forcing that extends temporally from t0 to t1, and in magnitude from f0 to f1. Equal time 
++                    and magnitude spacing. 
++
++       Usage: forcing=newforcing(t0,t1,deltaT,f0,f1,nodes);  
++       Where: 
++          t0:t1: time interval. 
++          deltaT: time step
++          f0:f1: magnitude interval.
++          nodes: number of vertices where we have a temporal forcing
++
++       Example: 
++           md.smb.mass_balance=newforcing(md.timestepping.start_time,md.timestepping.final_time,
++                                          md.timestepping.time_step,-1,+2,md.mesh.numberofvertices)
++	'''
++	#Number of time steps: 
++	nsteps = (t1 - t0) / deltaT + 1
++
++	#delta forcing:
++	deltaf = (f1 - f0) / (nsteps - 1)
++
++	#creates times:
++	times = np.arange(t0,t1+deltaT,deltaT)	#Add deltaT to fix python/matlab discrepency
++
++	#create forcing:
++	forcing = np.arange(f0,f1+deltaf,deltaf)#Add deltaf to fix python/matlab discrepency
++
++	#replicate for all nodes
++	forcing = np.tile(forcing, (nodes+1,1))
++	forcing[-1,:] = times
++	return forcing
+Index: ../trunk-jpl/src/m/dev/devpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/devpath.py	(revision 22266)
++++ ../trunk-jpl/src/m/dev/devpath.py	(revision 22267)
+@@ -30,6 +30,7 @@
+ 
+ #Manual imports for commonly used functions
+ from plotmodel import plotmodel
++from runme import runme
+ 
+ #c = get_ipython().config
+ #c.InteractiveShellApp.exec_lines = []
+Index: ../trunk-jpl/src/m/print/printmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/print/printmodel.py	(nonexistent)
++++ ../trunk-jpl/src/m/print/printmodel.py	(revision 22267)
+@@ -0,0 +1,109 @@
++
++import numpy as np
++#from model import *
++#from socket import gethostname
++#from bamg import *
++#from setmask import *
++#from parameterize import *
++#from setflowequation import *
++#from solve import *
++from pairoptions import *
++
++def printmodel(filename,format,*args):
++'''	PRINTMODEL - save an image of current figure
++
++	filename: output name of image file (no extension)
++	format: image format (ex: 'tiff','jpg','pdf') 
++
++	List of options to printfmodel: 
++
++	figure: number of figure to print (default: current figure)
++	resolution: use higher resolution to anti-alias (default 2)
++	margin: add margin around final image  
++	marginsize: size of margin around final image (default 5)
++	frame: add frame around final image
++	framesize: size of frame around final image (default 5)
++	framecolor: color of frame around final image (default 'black')
++	trim: trim empty space around image (default 'off')
++	hardcopy: 'off' to impose MATLAB to use the same colors (default 'off')
++   
++	Usage:
++		printmodel(filename,format,varargin);
++
++	Examples:
++		printmodel('image','tiff')
++		printmodel('image','eps','margin','on','frame','on','hardcopy','on')
++'''
++
++#get options: 
++options = pairoptions(*args)
++
++#set defaults
++options = addfielddefault(options,'figure','gcf')
++options = addfielddefault(options,'format','tiff')
++options = addfielddefault(options,'resolution',1)
++options = addfielddefault(options,'margin','on')
++options = addfielddefault(options,'marginsize',25)
++options = addfielddefault(options,'frame','on')
++options = addfielddefault(options,'framesize',3)
++options = addfielddefault(options,'framecolor','black')
++options = addfielddefault(options,'trim','on')
++options = addfielddefault(options,'hardcopy','off')
++
++#get fig: 
++fig = getfieldvalue(options,'figure')
++if len(fig) == 1:
++	fig=gcf
++else:
++	figure(fig)
++	fig=gcf
++
++#In auto mode, MATLAB prints the figure the same size as it appears on the computer screen, centered on the page
++set(fig, 'PaperPositionMode', 'auto');
++
++#InvertHardcopy off imposes MATLAB to use the same colors
++set(fig, 'InvertHardcopy', getfieldvalue(options,'hardcopy'));
++
++#we could have several formats, as a cell array of strings.
++formats=format;
++if ~iscell(formats),
++	formats={formats};
++end
++
++#loop on formats:
++for i=1:length(formats),
++	format=formats{i};
++
++	#Use higher resolution to anti-alias and use zbuffer to have smooth colors
++	print(fig, '-zbuffer','-dtiff',['-r' num2str(get(0,'ScreenPixelsPerInch')*getfieldvalue(options,'resolution'))],filename);
++
++	#some trimming involved? 
++	if ~strcmpi(format,'pdf'),
++		if strcmpi(getfieldvalue(options,'trim'),'on'),
++			system(['convert -trim ' filename '.tif ' filename '.tif']);
++		end
++	end
++
++	#margin?
++	if ~strcmpi(format,'pdf'),
++		if strcmpi(getfieldvalue(options,'margin'),'on'),
++			marginsize=getfieldvalue(options,'marginsize');
++			system(['convert -border ' num2str(marginsize) 'x' num2str(marginsize) ' -bordercolor "white" ' filename '.tif ' filename '.tif']);
++		end
++	end
++
++	#frame?
++	if ~strcmpi(format,'pdf'),
++		if strcmpi(getfieldvalue(options,'frame'),'on'),
++			framesize=getfieldvalue(options,'framesize');
++			framecolor=getfieldvalue(options,'framecolor');
++			system(['convert -border ' num2str(framesize) 'x' num2str(framesize) ' -bordercolor "' framecolor '" ' filename '.tif ' filename '.tif']);
++		end
++	end
++
++	#convert image to correct format
++	if ~strcmpi(format,'tiff') & ~strcmpi(format,'tif'),
++		system(['convert ' filename '.tif ' filename '.' format]);
++		delete([ filename '.tif']);
++	end
++end
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 22267)
+@@ -100,14 +100,18 @@
+ 		md = checkfield(md,'fieldname','thermal.requested_outputs','stringrow',1)
+ 
+ 		if 'EnthalpyAnalysis' in analyses and md.thermal.isenthalpy and md.mesh.dimension()==3:
+-			pos=np.where(~np.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices]))
++			TEMP = md.thermal.spctemperature[:-1].flatten(-1)
++			pos=np.where(~np.isnan(TEMP))
+ 			try:
+ 				spccol=np.size(md.thermal.spctemperature,1)
+ 			except IndexError:
+ 				spccol=1
+-			replicate=np.tile(md.geometry.surface-md.mesh.z,(spccol))
+-			control=md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate
+-			md = checkfield(md,'fieldname','thermal.spctemperature','field',md.thermal.spctemperature[pos],'<=',control[pos],'message',"spctemperature should be below the adjusted melting point")
++
++			replicate=np.tile(md.geometry.surface-md.mesh.z,(spccol)).flatten(-1)
++
++			control=md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate+10**-5
++
++			md = checkfield(md,'fieldname','thermal.spctemperature','field',md.thermal.spctemperature.flatten(-1)[pos],'<=',control[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'fieldname','thermal.isenthalpy','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel',[1],'values',[0,1]);
+ 			if(md.thermal.isenthalpy):
+Index: ../trunk-jpl/src/m/classes/calvingminthickness.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingminthickness.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingminthickness.py	(revision 22267)
+@@ -0,0 +1,52 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++class calvingminthickness(object):
++	"""
++	CALVINGMINTHICKNESS class definition
++
++	   Usage:
++	      calvingminthickness=calvingminthickness()
++	"""
++
++	def __init__(self): # {{{
++
++		self.min_thickness = 0.
++		self.meltingrate   = float('NaN')
++
++		#set defaults
++		self.setdefaultparameters()
++
++	#}}}
++	def __repr__(self): # {{{
++		string='   Calving Minimum thickness:'
++		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum thickness below which no ice is allowed'))
++		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
++		return string
++	#}}}
++	def extrude(self,md): # {{{
++		self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++
++		#minimum thickness is 100 m by default
++		self.min_thickness = 100.
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		#Early return
++		if solution == 'TransientSolution' or md.transient.ismovingfront == 0:
++			return
++
++		md = checkfield(md,'fieldname','calving.min_thickness','>',0,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>=',0)
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		yts=md.constants.yts
++		WriteData(fid,prefix,'name','md.calving.law','data',4,'format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','min_thickness','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
++	# }}}
+Index: ../trunk-jpl/src/m/classes/calvingdev.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingdev.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingdev.py	(revision 22267)
+@@ -0,0 +1,60 @@
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++
++class calvingdev(object):
++	"""
++	CALVINGDEV class definition
++
++	   Usage:
++	      calvingdev=calvingdev();
++	"""
++
++	def __init__(self): # {{{
++
++		self.stress_threshold_groundedice = 0.
++		self.stress_threshold_floatingice = 0.
++		self.meltingrate   = float('NaN')
++
++		#set defaults
++		self.setdefaultparameters()
++
++	#}}}
++	def __repr__(self): # {{{
++		string='   Calving Pi parameters:'
++		string="%s\n%s"%(string,fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]'))
++		string="%s\n%s"%(string,fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]'))
++
++		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
++		return string
++	#}}}
++	def extrude(self,md): # {{{
++		self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++		#Default sigma max
++		self.stress_threshold_groundedice = 1e6
++		self.stress_threshold_floatingice = 150e3
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		#Early return
++		if solution == 'TransientSolution' or md.transient.ismovingfront == 0:
++			return
++
++		md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1)
++		md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1)
++		md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0)
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		yts=md.constants.yts
++
++		WriteData(fid,prefix,'name','md.calving.law','data',2,'format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts)
++	# }}}
+Index: ../trunk-jpl/src/m/classes/mismipbasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 22267)
+@@ -39,8 +39,11 @@
+     #}}}
+     def initialize(self,md): # {{{
+         if np.all(np.isnan(self.groundedice_melting_rate)):
+-            self.groundedice_melting_rate=np.zeros(md.mesh.numberofvertices)
++            self.groundedice_melting_rate=np.zeros((md.mesh.numberofvertices))
+             print ' no basalforcings.groundedice_melting_rate specified: values set as zero'
++	if np.all(np.isnan(self.geothermalflux)):
++			self.geothermalflux=np.zeros((md.mesh.numberofvertices))
++			print "      no basalforcings.geothermalflux specified: values set as zero"
+         return self
+     #}}}
+     def setdefaultparameters(self): # {{{
+@@ -83,7 +86,7 @@
+             print 'WARNING: value of yts for MISMIP+ runs different from ISSM default!'
+ 
+         floatingice_melting_rate = np.zeros((md.mesh.numberofvertices))
+-        floatingice_melting_rate = md.basalforcings.meltrate_factor*np.tanh((md.geometry.base-md.geometry.bed)/md.basalforcings.threshold_thickness)*np.amax(md.basalforcings.upperdepth_melt-md.geometry.base,0)
++        floatingice_melting_rate = md.basalforcings.meltrate_factor*np.tanh((md.geometry.base-md.geometry.bed)/md.basalforcings.threshold_thickness)*(md.basalforcings.upperdepth_melt-md.geometry.base)
+ 
+ 	WriteData(fid,prefix,'name','md.basalforcings.model','data',3,'format','Integer')
+ 	WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+Index: ../trunk-jpl/src/m/classes/SMBgradientsela.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgradientsela.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/SMBgradientsela.py	(revision 22267)
+@@ -8,7 +8,7 @@
+ 	SMBgradientsela Class definition
+ 
+ 	   Usage:
+-	      SMBgradientsela=SMBgradientsela();
++	      SMBgradientsela=SMBgradientsela()
+ 	"""
+ 
+ 	def __init__(self): # {{{
+@@ -18,11 +18,12 @@
+ 		self.b_max   = float('NaN')
+ 		self.b_min   = float('NaN')
+ 		self.requested_outputs      = []
++		self.setdefaultparameters()
+ 		#}}}
+ 	def __repr__(self): # {{{
+-		string="   surface forcings parameters:"
++		string = "   surface forcings parameters:"
++		string+= '\n   SMB gradients ela parameters:'
+ 
+-		string="%s\n%s"%(string,fielddisplay(self,'issmbgradientsela','is smb gradients ela method activated (0 or 1, default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'ela',' equilibrium line altitude from which deviation is used to calculate smb using the smb gradients ela method [m a.s.l.]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'b_pos',' vertical smb gradient (dB/dz) above ela'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'b_neg',' vertical smb gradient (dB/dz) below ela'))
+@@ -46,6 +47,11 @@
+ 
+ 		return self
+ 	#}}}
++	def setdefaultparameters(self): # {{{
++		self.b_max=9999.
++		self.b_min=-9999.
++		return self
++	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		if 'MasstransportAnalysis' in analyses:
+@@ -55,7 +61,7 @@
+ 			md = checkfield(md,'fieldname','smb.b_max','timeseries',1,'NaN',1,'Inf',1)
+ 			md = checkfield(md,'fieldname','smb.b_min','timeseries',1,'NaN',1,'Inf',1)
+ 
+-		md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1)
++		md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1)
+ 		return md
+ 	# }}}
+ 	def marshall(self,prefix,md,fid):    # {{{
+Index: ../trunk-jpl/src/m/classes/constants.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/constants.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/constants.py	(revision 22267)
+@@ -11,10 +11,10 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.g                    = 0
+-		self.omega                = 0
+-		self.yts                  = 0
+-		self.referencetemperature = 0
++		self.g                    = 0.
++		self.omega                = 0.
++		self.yts                  = 0.
++		self.referencetemperature = 0.
+ 		
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -48,10 +48,10 @@
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		md = checkfield(md,'fieldname','constants.g','>',0,'size',[1])
+-		md = checkfield(md,'fieldname','constants.omega','>=',0,'size',[1])
+-		md = checkfield(md,'fieldname','constants.yts','>',0,'size',[1])
+-		md = checkfield(md,'fieldname','constants.referencetemperature','size',[1])
++		md = checkfield(md,'fieldname','constants.g','>=',0,'size',[1,1])
++		md = checkfield(md,'fieldname','constants.omega','>=',0,'size',[1,1])
++		md = checkfield(md,'fieldname','constants.yts','>',0,'size',[1,1])
++		md = checkfield(md,'fieldname','constants.referencetemperature','size',[1,1])
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/hydrologysommers.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologysommers.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/hydrologysommers.py	(revision 22267)
+@@ -0,0 +1,90 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++class hydrologysommers(object):
++	"""
++	HYDROLOGYSOMMERS class definition
++
++	   Usage:
++	      hydrologysommers=hydrologysommers()
++	"""
++
++	def __init__(self): # {{{
++		self.head            = float('NaN')
++		self.gap_height      = float('NaN')
++		self.bump_spacing    = float('NaN')
++		self.bump_height     = float('NaN')
++		self.englacial_input = float('NaN')
++		self.moulin_input    = float('NaN')
++		self.reynolds        = float('NaN')
++		self.spchead         = float('NaN')
++		self.neumannflux     = float('NaN')
++		self.relaxation      = 0
++		self.storage         = 0
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		
++		string='   hydrologysommers solution parameters:'
++		string="%s\n%s"%(string,fielddisplay(self,'head','subglacial hydrology water head (m)'))
++		string="%s\n%s"%(string,fielddisplay(self,'gap_height','height of gap separating ice to bed (m)'))
++		string="%s\n%s"%(string,fielddisplay(self,'bump_spacing','characteristic bedrock bump spacing (m)'))
++		string="%s\n%s"%(string,fielddisplay(self,'bump_height','characteristic bedrock bump height (m)'))
++		string="%s\n%s"%(string,fielddisplay(self,'englacial_input','liquid water input from englacial to subglacial system (m/yr)'))
++		string="%s\n%s"%(string,fielddisplay(self,'moulin_input','liquid water input from moulins (at the vertices) to subglacial system (m^3/s)'))
++		string="%s\n%s"%(string,fielddisplay(self,'reynolds','Reynolds'' number'))
++		string="%s\n%s"%(string,fielddisplay(self,'neumannflux','water flux applied along the model boundary (m^2/s)'))
++		string="%s\n%s"%(string,fielddisplay(self,'spchead','water head constraints (NaN means no constraint) (m)'))
++		string="%s\n%s"%(string,fielddisplay(self,'relaxation','under-relaxation coefficient for nonlinear iteration'))
++		string="%s\n%s"%(string,fielddisplay(self,'storage','englacial storage coefficient (void ratio)'))
++		return string
++		#}}}
++	def extrude(self,md): # {{{
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++		# Set under-relaxation parameter to be 1 (no under-relaxation of nonlinear iteration)	
++		self.relaxation=1
++		self.storage=0
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		
++		#Early return
++		if 'HydrologySommersAnalysis' not in analyses:
++			return md
++
++		md = checkfield(md,'fieldname','hydrology.head','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.gap_height','>=',0,'size',[md.mesh.numberofelements],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.bump_spacing','>',0,'size',[md.mesh.numberofelements],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.bump_height','>=',0,'size',[md.mesh.numberofelements],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.englacial_input','>=',0,'NaN',1,'Inf',1,'timeseries',1)
++		md = checkfield(md,'fieldname','hydrology.moulin_input','>=',0,'NaN',1,'Inf',1,'timeseries',1)
++		md = checkfield(md,'fieldname','hydrology.reynolds','>',0,'size',[md.mesh.numberofelements],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.neumannflux','timeseries',1,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','hydrology.spchead','size',[md.mesh.numberofvertices])
++         	md = checkfield(md,'fieldname','hydrology.relaxation','>=',0)	
++		md = checkfield(md,'fieldname','hydrology.storage','>=',0)
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		yts=md.constants.yts
++
++		WriteData(fid,prefix,'name','md.hydrology.model','data',3,'format','Integer')
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','head','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','gap_height','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','bump_spacing','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','bump_height','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','englacial_input','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','neumannflux','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1)
++         	WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','relaxation','format','Double')
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','storage','format','Double')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 22267)
+@@ -91,7 +91,7 @@
+ 		md = checkfield(md,'fieldname','flowequation.isFS','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'fieldname','flowequation.fe_SSA','values',['P1','P1bubble','P1bubblecondensed','P2','P2bubble'])
+ 		md = checkfield(md,'fieldname','flowequation.fe_HO' ,'values',['P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2','P2bubble','P1xP3','P2xP4'])
+-		md = checkfield(md,'fieldname','flowequation.fe_FS' ,'values',['P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood','XTaylorHood','OneLayerP4z','CrouzeixRaviart'])
++		md = checkfield(md,'fieldname','flowequation.fe_FS' ,'values',['P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood','LATaylorHood','XTaylorHood','OneLayerP4z','CrouzeixRaviart','LACrouzeixRaviart'])
+ 		md = checkfield(md,'fieldname','flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+@@ -103,6 +103,9 @@
+ 		if m.strcmp(md.mesh.domaintype(),'2Dhorizontal'):
+ 			md = checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 			md = checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
++		elif m.strcmp(md.mesh.domaintype(),'2Dvertical'):
++			md = checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[2,4,5])
++			md = checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements],'values',[2,4,5])
+ 		elif m.strcmp(md.mesh.domaintype(),'3D'):
+ 			md = checkfield(md,'fieldname','flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',np.arange(0,8+1))
+ 			md = checkfield(md,'fieldname','flowequation.element_equation','size',[md.mesh.numberofelements],'values',np.arange(0,8+1))
+Index: ../trunk-jpl/src/m/classes/basalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcings.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/basalforcings.py	(revision 22267)
+@@ -44,6 +44,9 @@
+ 		if np.all(np.isnan(self.floatingice_melting_rate)):
+ 			self.floatingice_melting_rate=np.zeros((md.mesh.numberofvertices))
+ 			print "      no basalforcings.floatingice_melting_rate specified: values set as zero"
++		#if np.all(np.isnan(self.geothermalflux)):
++			#self.geothermalflux=np.zeros((md.mesh.numberofvertices))
++			#print "      no basalforcings.geothermalflux specified: values set as zero"
+ 
+ 		return self
+ 	#}}}
+Index: ../trunk-jpl/src/m/classes/calvingvonmises.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingvonmises.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingvonmises.py	(revision 22267)
+@@ -0,0 +1,60 @@
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++
++class calvingvonmises(object):
++	"""
++	CALVINGVONMISES class definition
++
++	   Usage:
++	      calvingvonmises=calvingvonmises()
++	"""
++
++	def __init__(self): # {{{
++
++		self.stress_threshold_groundedice = 0.
++		self.stress_threshold_floatingice = 0.
++		self.meltingrate   = float('NaN')
++
++		#set defaults
++		self.setdefaultparameters()
++
++	#}}}
++	def __repr__(self): # {{{
++		string='   Calving VonMises parameters:'
++		string="%s\n%s"%(string,fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]'))
++		string="%s\n%s"%(string,fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]'))
++
++		string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
++		return string
++	#}}}
++	def extrude(self,md): # {{{
++		self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++		#Default sigma max
++		self.stress_threshold_groundedice = 1e6
++		self.stress_threshold_floatingice = 150e3
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		#Early return
++		if solution == 'TransientSolution' or md.transient.ismovingfront == 0:
++			return
++
++		md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1)
++		md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1)
++		md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0)
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		yts=md.constants.yts
++
++		WriteData(fid,prefix,'name','md.calving.law','data',2,'format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts)
++	# }}}
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 22267)
+@@ -11,7 +11,7 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.issmb   = False
++		self.issmb   	       = False
+ 		self.ismasstransport   = False
+ 		self.isstressbalance   = False
+ 		self.isthermal         = False
+@@ -22,9 +22,9 @@
+ 		self.ismovingfront     = False
+ 		self.ishydrology       = False
+ 		self.isslr             = False
++		self.iscoupler         = False
++		self.amr_frequency     = 0
+ 		self.isoceancoupling   = False
+-		self.iscoupler         = False
+-		amr_frequency			  = 0
+ 		self.requested_outputs = []
+ 
+ 		#set defaults
+@@ -80,6 +80,26 @@
+ 		self.requested_outputs=[]
+ 		return self
+ 	#}}}
++	def deactivateall(self):#{{{
++		self.issmb             = False
++		self.ismasstransport   = False
++		self.isstressbalance   = False
++		self.isthermal         = False
++		self.isgroundingline   = False
++		self.isgia             = False
++		self.isesa             = False
++		self.isdamageevolution = False
++		self.ismovingfront     = False
++		self.ishydrology       = False
++		self.isslr             = False
++		self.isoceancoupling   = False
++		self.iscoupler         = False
++		self.amr_frequency     = 0
++
++		#default output
++		self.requested_outputs=[]
++		return self
++	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.py	(revision 22267)
+@@ -0,0 +1,130 @@
++import numpy as np
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++import MatlabFuncs as m
++from WriteData import WriteData
++
++class mesh2dvertical(object):
++	"""
++	MESH2DVERTICAL class definition
++
++	   Usage:
++	      mesh2dvertical=mesh2dvertical();
++	"""
++
++	def __init__(self): # {{{
++		self.x                           = float('NaN')
++		self.y                           = float('NaN')
++		self.elements                    = float('NaN')
++		self.numberofelements            = 0
++		self.numberofvertices            = 0
++		self.numberofedges               = 0
++		
++		self.lat                         = float('NaN')
++		self.long                        = float('NaN')
++		self.epsg                        = float('NaN')
++
++		self.vertexonboundary            = float('NaN')
++		self.vertexonbase            	 = float('NaN')
++		self.vertexonsurface             = float('NaN')
++
++		self.edges                       = float('NaN')
++		self.segments                    = float('NaN')
++		self.segmentmarkers              = float('NaN')
++		self.vertexconnectivity          = float('NaN')
++		self.elementconnectivity         = float('NaN')
++		self.average_vertex_connectivity = 0
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		string="   2D tria Mesh (vertical):" 
++
++		string="%s\n%s"%(string,"\n      Elements and vertices:")
++		string="%s\n%s"%(string,fielddisplay(self,"numberofelements","number of elements"))
++		string="%s\n%s"%(string,fielddisplay(self,"numberofvertices","number of vertices"))
++		string="%s\n%s"%(string,fielddisplay(self,"elements","vertex indices of the mesh elements"))
++		string="%s\n%s"%(string,fielddisplay(self,"x","vertices x coordinate [m]"))
++		string="%s\n%s"%(string,fielddisplay(self,"y","vertices y coordinate [m]"))
++		string="%s\n%s"%(string,fielddisplay(self,"edges","edges of the 2d mesh (vertex1 vertex2 element1 element2)"))
++		string="%s\n%s"%(string,fielddisplay(self,"numberofedges","number of edges of the 2d mesh"))
++
++		string="%s%s"%(string,"\n\n      Properties:")
++		string="%s\n%s"%(string,fielddisplay(self,"vertexonboundary","vertices on the boundary of the domain flag list"))
++		string="%s\n%s"%(string,fielddisplay(self,'vertexonbase','vertices on the bed of the domain flag list'))
++		string="%s\n%s"%(string,fielddisplay(self,'vertexonsurface','vertices on the surface of the domain flag list'))
++		string="%s\n%s"%(string,fielddisplay(self,"segments","edges on domain boundary (vertex1 vertex2 element)"))
++		string="%s\n%s"%(string,fielddisplay(self,"segmentmarkers","number associated to each segment"))
++		string="%s\n%s"%(string,fielddisplay(self,"vertexconnectivity","list of vertices connected to vertex_i"))
++		string="%s\n%s"%(string,fielddisplay(self,"elementconnectivity","list of vertices connected to element_i"))
++		string="%s\n%s"%(string,fielddisplay(self,"average_vertex_connectivity","average number of vertices connected to one vertex"))
++
++		string="%s%s"%(string,"\n\n      Projection:")
++		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude [degrees]"))
++		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude [degrees]"))
++		string="%s\n%s"%(string,fielddisplay(self,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)"))
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		
++		#the connectivity is the averaged number of nodes linked to a
++		#given node through an edge. This connectivity is used to initially
++		#allocate memory to the stiffness matrix. A value of 16 seems to
++		#give a good memory/time ration. This value can be checked in
++		#trunk/test/Miscellaneous/runme.m
++		self.average_vertex_connectivity=25.
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		if(solution=='LoveSolution'):
++			return
++
++		md = checkfield(md,'fieldname','mesh.x','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'fieldname','mesh.y','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'fieldname','mesh.elements','NaN',1,'Inf',1,'>',0,'values',np.arange(1,md.mesh.numberofvertices+1))
++		md = checkfield(md,'fieldname','mesh.elements','size',[md.mesh.numberofelements,3])
++		if np.any(np.logical_not(m.ismember(np.arange(1,md.mesh.numberofvertices+1),md.mesh.elements))):
++			md.checkmessage("orphan nodes have been found. Check the mesh outline")
++		md = checkfield(md,'fieldname','mesh.numberofelements','>',0)
++		md = checkfield(md,'fieldname','mesh.numberofvertices','>',0)
++		md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices],'values',[0,1])
++		md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices],'values',[0,1])
++		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
++
++		if solution=='ThermalSolution':
++			md.checkmessage("thermal not supported for 2d mesh")
++
++		return md
++	# }}}
++	def domaintype(self): # {{{
++		return "2Dvertical"
++	#}}}
++	def dimension(self): # {{{
++		return 2
++	#}}}
++	def elementtype(self): # {{{
++		return "Tria"
++	#}}}
++	def vertexflags(self,value): # {{{
++		flags = np.zeros((self.numberofvertices,))
++		pos   = self.segments[np.where(self.segmentmarkers==value),0:2]-1
++		flags[pos] = 1
++		return flags
++	#}}}
++	def marshall(self,prefix,md,fid):    # {{{
++		WriteData(fid,prefix,'name','md.mesh.domain_type','data',"Domain"+self.domaintype(),'format','String');
++		WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',self.dimension(),'format','Integer');
++		WriteData(fid,prefix,'name','md.mesh.elementtype','data',self.elementtype(),'format','String');
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'name','md.mesh.z','data',np.zeros(self.numberofvertices),'format','DoubleMat','mattype',1);
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/matenhancedice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matenhancedice.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/matenhancedice.py	(revision 22267)
+@@ -0,0 +1,171 @@
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++
++class matenhancedice(object):
++	"""
++	MATICE class definition
++
++	   Usage:
++	      matenhancedice=matenhancedice();
++	"""
++
++	def __init__(self): # {{{
++		self.rho_ice                   = 0.
++		self.rho_water                 = 0.
++		self.rho_freshwater            = 0.
++		self.mu_water                  = 0.
++		self.heatcapacity              = 0.
++		self.latentheat                = 0.
++		self.thermalconductivity       = 0.
++		self.temperateiceconductivity  = 0.
++		self.meltingpoint              = 0.
++		self.beta                      = 0.
++		self.mixed_layer_capacity      = 0.
++		self.thermal_exchange_velocity = 0.
++		self.rheology_E		       = float('NaN')
++		self.rheology_B                = float('NaN')
++		self.rheology_n                = float('NaN')
++		self.rheology_law              = ''
++
++		#giaivins: 
++		self.lithosphere_shear_modulus  = 0.
++		self.lithosphere_density        = 0.
++		self.mantle_shear_modulus       = 0.
++		self.mantle_density             = 0.
++		
++		#SLR
++		self.earth_density= 0  # average density of the Earth, (kg/m^3)
++
++		self.setdefaultparameters()
++		#}}}
++	def __repr__(self): # {{{
++		string="   Materials:"
++
++		string="%s\n%s"%(string,fielddisplay(self,"rho_ice","ice density [kg/m^3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"rho_water","water density [kg/m^3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"rho_freshwater","fresh water density [kg/m^3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"mu_water","water viscosity [N s/m^2]"))
++		string="%s\n%s"%(string,fielddisplay(self,"heatcapacity","heat capacity [J/kg/K]"))
++		string="%s\n%s"%(string,fielddisplay(self,"thermalconductivity","ice thermal conductivity [W/m/K]"))
++		string="%s\n%s"%(string,fielddisplay(self,"temperateiceconductivity","temperate ice thermal conductivity [W/m/K]"))
++		string="%s\n%s"%(string,fielddisplay(self,"meltingpoint","melting point of ice at 1atm in K"))
++		string="%s\n%s"%(string,fielddisplay(self,"latentheat","latent heat of fusion [J/m^3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"beta","rate of change of melting point with pressure [K/Pa]"))
++		string="%s\n%s"%(string,fielddisplay(self,"mixed_layer_capacity","mixed layer capacity [W/kg/K]"))
++		string="%s\n%s"%(string,fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]"))
++		string="%s\n%s"%(string,fielddisplay(self,"rheology_E","enhancement factor"))
++		string="%s\n%s"%(string,fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]"))
++		string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen's flow law exponent"))
++		string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'"))
++		string="%s\n%s"%(string,fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]"))
++		string="%s\n%s"%(string,fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"mantle_shear_modulus","Mantle shear modulus [Pa]"))
++		string="%s\n%s"%(string,fielddisplay(self,"mantle_density","Mantle density [g/cm^-3]"))
++		string="%s\n%s"%(string,fielddisplay(self,"earth_density","Mantle density [kg/m^-3]"))
++
++		return string
++		#}}}
++	def extrude(self,md): # {{{
++		self.rheology_E=project3d(md,'vector',self.rheology_E,'type','node')
++		self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node')
++		self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element')
++		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++		#ice density (kg/m^3)
++		self.rho_ice=917.
++
++		#ocean water density (kg/m^3)
++		self.rho_water=1023.
++
++		#fresh water density (kg/m^3)
++		self.rho_freshwater=1000.
++
++		#water viscosity (N.s/m^2)
++		self.mu_water=0.001787  
++
++		#ice heat capacity cp (J/kg/K)
++		self.heatcapacity=2093.
++
++		#ice latent heat of fusion L (J/kg)
++		self.latentheat=3.34*10**5
++
++		#ice thermal conductivity (W/m/K)
++		self.thermalconductivity=2.4
++
++		#temperate ice thermal conductivity (W/m/K)
++		self.temperateiceconductivity=0.24
++
++		#the melting point of ice at 1 atmosphere of pressure in K
++		self.meltingpoint=273.15
++
++		#rate of change of melting point with pressure (K/Pa)
++		self.beta=9.8*10**-8
++
++		#mixed layer (ice-water interface) heat capacity (J/kg/K)
++		self.mixed_layer_capacity=3974.
++
++		#thermal exchange velocity (ice-water interface) (m/s)
++		self.thermal_exchange_velocity=1.00*10**-4
++
++		#Rheology law: what is the temperature dependence of B with T
++		#available: none, paterson and arrhenius
++		self.rheology_law='Paterson'
++
++		# GIA:
++		self.lithosphere_shear_modulus  = 6.7*10**10  # (Pa)
++		self.lithosphere_density        = 3.32        # (g/cm^-3)
++		self.mantle_shear_modulus       = 1.45*10**11 # (Pa)
++		self.mantle_density             = 3.34        # (g/cm^-3)
++		
++		#SLR
++		self.earth_density= 5512  #average density of the Earth, (kg/m^3)
++
++		return self
++		#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		md = checkfield(md,'fieldname','materials.rho_ice','>',0)
++		md = checkfield(md,'fieldname','materials.rho_water','>',0)
++		md = checkfield(md,'fieldname','materials.rho_freshwater','>',0)
++		md = checkfield(md,'fieldname','materials.mu_water','>',0)
++		md = checkfield(md,'fieldname','materials.rheology_E','>',0,'timeseries',1,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
++		md = checkfield(md,'fieldname','materials.rheology_law','values',['None','BuddJacka','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval'])
++
++		if 'GiaAnalysis' in analyses:
++			md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1)
++		if 'SealevelriseAnalysis' in analyses:
++			md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1)
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		WriteData(fid,prefix,'name','md.materials.type','data',4,'format','Integer')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_E','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String')
++
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/amr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/amr.py	(revision 22267)
+@@ -27,6 +27,7 @@
+         self.deviatoricerror_resolution= 0.
+         self.deviatoricerror_threshold = 0.
+         self.deviatoricerror_maximum	= 0.
++	self.restart=0.
+         #set defaults
+         self.setdefaultparameters()
+     #}}}
+@@ -47,6 +48,7 @@
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_resolution","element length when deviatoric stress error estimator is used"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_threshold","maximum threshold deviatoricstress error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_maximum","maximum deviatoricstress error permitted"))
++	string="%s\n%s"%(string,fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']))
+         return string
+     #}}}
+     def setdefaultparameters(self): # {{{
+@@ -66,6 +68,7 @@
+         self.deviatoricerror_resolution= 500.
+         self.deviatoricerror_threshold = 0
+         self.deviatoricerror_maximum	= 0
++	self.restart = 0.
+         return self
+     #}}}
+     def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -83,6 +86,7 @@
+         md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+         md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);        
+         md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
++	md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1)
+         return md
+     # }}}
+     def marshall(self,prefix,md,fid):    # {{{
+@@ -103,4 +107,5 @@
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_resolution','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_threshold','format','Double'); 
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_maximum','format','Double'); 
++	WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer')
+     # }}}
+Index: ../trunk-jpl/src/m/classes/matestar.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matestar.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/matestar.py	(revision 22267)
+@@ -0,0 +1,175 @@
++import numpy as np
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++
++class matestar(object):
++	"""
++	matestar class definition
++
++	   Usage:
++	      matestar=matestar()
++	"""
++
++	def __init__(self): # {{{
++		
++		rho_ice                    = 0.
++		rho_water                  = 0.
++		rho_freshwater             = 0.
++		mu_water                   = 0.
++		heatcapacity               = 0.
++		latentheat                 = 0.
++		thermalconductivity        = 0.
++		temperateiceconductivity   = 0.
++		meltingpoint               = 0.
++		beta                       = 0.
++		mixed_layer_capacity       = 0.
++		thermal_exchange_velocity  = 0.
++		rheology_B    = float('NaN')
++		rheology_Ec   = float('NaN')
++		rheology_Es   = float('NaN')
++		rheology_law = ''
++
++		#giaivins: 
++		lithosphere_shear_modulus  = 0.
++		lithosphere_density        = 0.
++		mantle_shear_modulus       = 0.
++		mantle_density             = 0.
++
++		#slr
++		earth_density              = 0
++
++                #set default parameters:
++		self.setdefaultparameters()
++	#}}}
++	def __repr__(self): # {{{
++		string="   Materials:"
++
++		string="%s\n%s"%(string,fielddisplay(self,'rho_ice','ice density [kg/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'rho_water','ocean water density [kg/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'mu_water','water viscosity [N s/m^2]'))
++		string="%s\n%s"%(string,fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]'))
++		string="%s\n%s"%(string,fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']))
++		string="%s\n%s"%(string,fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]'))
++		string="%s\n%s"%(string,fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K'))
++		string="%s\n%s"%(string,fielddisplay(self,'latentheat','latent heat of fusion [J/kg]'))
++		string="%s\n%s"%(string,fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]'))
++		string="%s\n%s"%(string,fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]'))
++		string="%s\n%s"%(string,fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]'))
++		string="%s\n%s"%(string,fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/3)]'))
++		string="%s\n%s"%(string,fielddisplay(self,'rheology_Ec','compressive enhancement factor'))
++		string="%s\n%s"%(string,fielddisplay(self,'rheology_Es','shear enhancement factor'))
++		string="%s\n%s"%(string,fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', ''Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']))
++		string="%s\n%s"%(string,fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]'))
++		string="%s\n%s"%(string,fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]'))
++		string="%s\n%s"%(string,fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'earth_density','Mantle density [kg/m^-3]'))
++
++		return string
++	#}}}
++	def extrude(self,md): # {{{
++		self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node')
++		self.rheology_Ec=project3d(md,'vector',self.rheology_Ec,'type','node')
++		self.rheology_Es=project3d(md,'vector',self.rheology_Es,'type','node')
++       		return self
++	#}}}
++	def setdefaultparameters(self): # {{{
++		#ice density (kg/m^3)
++		self.rho_ice=917.
++
++		#ocean water density (kg/m^3)
++		self.rho_water=1023.
++
++		#fresh water density (kg/m^3)
++		self.rho_freshwater=1000.
++
++		#water viscosity (N.s/m^2)
++		self.mu_water=0.001787 
++
++		#ice heat capacity cp (J/kg/K)
++		self.heatcapacity=2093.
++
++		#ice latent heat of fusion L (J/kg)
++		self.latentheat=3.34*10**5
++
++		#ice thermal conductivity (W/m/K)
++		self.thermalconductivity=2.4
++			
++		#wet ice thermal conductivity (W/m/K)
++		self.temperateiceconductivity=.24
++
++		#the melting point of ice at 1 atmosphere of pressure in K
++		self.meltingpoint=273.15
++
++		#rate of change of melting point with pressure (K/Pa)
++		self.beta=9.8*10**-8
++
++		#mixed layer (ice-water interface) heat capacity (J/kg/K)
++		self.mixed_layer_capacity=3974.
++
++		#thermal exchange velocity (ice-water interface) (m/s)
++		self.thermal_exchange_velocity=1.00*10**-4
++
++		#Rheology law: what is the temperature dependence of B with T
++		#available: none, paterson and arrhenius
++		self.rheology_law='Paterson'
++
++		# GIA:
++		self.lithosphere_shear_modulus  = 6.7*10**10  # (Pa)
++		self.lithosphere_density        = 3.32      # (g/cm^-3)
++		self.mantle_shear_modulus       = 1.45*10**11 # (Pa)
++		self.mantle_density             = 3.34      # (g/cm^-3)
++
++		#SLR
++		self.earth_density= 5512  # average density of the Earth, (kg/m^3)
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		md = checkfield(md,'fieldname','materials.rho_ice','>',0)
++		md = checkfield(md,'fieldname','materials.rho_water','>',0)
++		md = checkfield(md,'fieldname','materials.rho_freshwater','>',0)
++		md = checkfield(md,'fieldname','materials.mu_water','>',0)
++		md = checkfield(md,'fieldname','materials.rheology_B','>',0,'size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','materials.rheology_Ec','>',0,'size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','materials.rheology_Es','>',0,'size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','materials.rheology_law','values',['None','BuddJacka', 'Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval'])
++
++		if 'GiaAnalysis' in analyses:
++			md = checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1)
++			md = checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1)
++		if 'SealevelriseAnalysis' in analyses:
++			md = checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1)
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		WriteData(fid,prefix,'name','md.materials.type','data',2,'format','Integer')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String')
++
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double')
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10**3)
++		WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/frictionsommers.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/frictionsommers.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/frictionsommers.py	(revision 22267)
+@@ -0,0 +1,47 @@
++from fielddisplay import fielddisplay
++from project3d import project3d
++from checkfield import checkfield
++from WriteData import WriteData
++
++class frictionsommers(object):
++    """
++    FRICTIONSOMMERS class definition
++
++    Usage:
++        friction=frictionsommers()
++    """
++
++    def __init__(self,md): # {{{
++        self.coefficient = md.friction.coefficient
++	#set defaults
++	self.setdefaultparameters()
++
++    #}}}
++    def __repr__(self): # {{{
++	string="Basal shear stress parameters: Sigma_b = coefficient^2 * Neff * u_b\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*(head-b))"
++
++	string="%s\n%s"%(string,fielddisplay(self,"coefficient","friction coefficient [SI]"))
++	return string
++    #}}}
++    def extrude(self,md): # {{{
++	self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1)	
++	return self
++    #}}}
++    def setdefaultparameters(self): # {{{
++	return self
++    #}}}
++    def checkconsistency(self,md,solution,analyses):    # {{{
++
++	#Early return
++	if 'StressbalanceAnalysis' not in analyses and 'ThermalAnalysis' not in analyses:
++	    return md
++
++	md = checkfield(md,'fieldname','friction.coefficient','timeseries',1,'NaN',1,'Inf',1)
++	return md
++
++    # }}}
++    def marshall(self,prefix,md,fid):    # {{{
++	yts=md.constants.yts
++	WriteData(fid,prefix,'name','md.friction.law','data',8,'format','Integer')
++	WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)	
++    # }}}
+Index: ../trunk-jpl/src/m/classes/SMBgemb.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/SMBgemb.py	(revision 22267)
+@@ -0,0 +1,368 @@
++import numpy as np
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++from project3d import project3d
++
++class SMBgemb(object):
++	"""
++	SMBgemb Class definition
++
++	   Usage:
++	      SMB = SMBgemb()
++	"""
++
++	def __init__(self): # {{{
++		#each one of these properties is a transient forcing to the GEMB model, loaded from meteorological data derived 
++		#from an automatic weather stations (AWS). Each property is therefore a matrix, of size (numberofvertices x number 
++		#of time steps. )
++
++		#solution choices
++		#check these:
++		#isgraingrowth
++		#isalbedo
++		#isshortwave
++		#isthermal
++		#isaccumulation
++		#ismelt
++		#isdensification
++		#isturbulentflux    
++
++		#inputs: 
++		Ta    = float('NaN')	#2 m air temperature, in Kelvin
++		V     = float('NaN')	#wind speed (m/s-1)
++		dswrf = float('NaN')	#downward shortwave radiation flux [W/m^2]
++		dlwrf = float('NaN')	#downward longwave radiation flux [W/m^2]
++		P     = float('NaN')	#precipitation [mm w.e. / m^2]
++		eAir  = float('NaN')	#screen level vapor pressure [Pa]
++		pAir  = float('NaN')	#surface pressure [Pa]
++		
++		Tmean = float('NaN')	#mean annual temperature [K]
++		C     = float('NaN')	#mean annual snow accumulation [kg m-2 yr-1]
++		Tz    = float('NaN')	#height above ground at which temperature (T) was sampled [m]
++		Vz    = float('NaN')	#height above ground at which wind (V) eas sampled [m]
++        
++		# Initialization of snow properties
++		Dzini = float('NaN')	#cell depth (m)
++		Dini = float('NaN')	#snow density (kg m-3)
++		Reini = float('NaN')	#effective grain size (mm)
++		Gdnini = float('NaN')	#grain dricity (0-1)
++		Gspini = float('NaN')	#grain sphericity (0-1)
++		ECini = float('NaN')	#evaporation/condensation (kg m-2)
++		Wini = float('NaN')	#Water content (kg m-2)
++		Aini = float('NaN')	#albedo (0-1)
++		Tini = float('NaN')	#snow temperature (K)
++		Sizeini = float('NaN')	#Number of layers
++
++		#settings: 
++		aIdx   = float('NaN')	#method for calculating albedo and subsurface absorption (default is 1)
++					# 1: effective grain radius [Gardner & Sharp, 2009]
++					  # 2: effective grain radius [Brun et al., 2009]
++					  # 3: density and cloud amount [Greuell & Konzelmann, 1994]
++					  # 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
++		swIdx  = float('NaN')	# apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
++
++		denIdx = float('NaN')	#densification model to use (default is 2):
++					# 1 = emperical model of Herron and Langway (1980)
++					# 2 = semi-emerical model of Anthern et al. (2010)
++					# 3 = DO NOT USE: physical model from Appix B of Anthern et al. (2010)
++					# 4 = DO NOT USE: emperical model of Li and Zwally (2004)
++					# 5 = DO NOT USE: modified emperical model (4) by Helsen et al. (2008)
++
++		zTop  = float('NaN')	# depth over which grid length is constant at the top of the snopack (default 10) [m]
++		dzTop = float('NaN')	# initial top vertical grid spacing (default .05) [m] 
++		dzMin = float('NaN')	# initial min vertical allowable grid spacing (default dzMin/2) [m] 
++		zY    = float('NaN')	# strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]
++		zMax = float('NaN')	#initial max model depth (default is min(thickness,500)) [m]
++		zMin = float('NaN')	#initial min model depth (default is min(thickness,30)) [m]
++		outputFreq = float('NaN')	#output frequency in days (default is monthly, 30)
++
++		#specific albedo parameters: 
++		#Method 1 and 2: 
++		aSnow = float('NaN')	# new snow albedo (0.64 - 0.89)
++		aIce  = float('NaN')	# range 0.27-0.58 for old snow
++			#Method 3: Radiation Correction Factors -> only used for met station data and Greuell & Konzelmann, 1994 albedo
++		cldFrac = float('NaN')	# average cloud amount
++			#Method 4: additonal tuning parameters albedo as a funtion of age and water content (Bougamont et al., 2005)
++		t0wet = float('NaN')	# time scale for wet snow (15-21.9) 
++		t0dry = float('NaN')	# warm snow timescale (30) 
++		K     = float('NaN')	# time scale temperature coef. (7) 
++
++		#densities:
++		InitDensityScaling =  float('NaN')	#initial scaling factor multiplying the density of ice, which describes the density of the snowpack.
++		
++		requested_outputs      = []
++
++		#Several fields are missing from the standard GEMB model, which are capture intrinsically by ISSM. 
++		#dateN: that's the last row of the above fields. 
++		#dt:    included in dateN. Not an input.  
++		#elev:  this is taken from the ISSM surface itself.
++
++		#}}}
++	def __repr__(self): # {{{
++		#string = "   surface forcings parameters:"
++		#string = "#s\n#s"%(string,fielddisplay(self,'mass_balance','surface mass balance [m/yr ice eq]'))
++		#string = "#s\n#s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
++		string = '   surface forcings for SMB GEMB model :'
++			
++		string="%s\n%s"%(string,fielddisplay(self,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isgraingrowth','run grain growth module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isalbedo','run albedo module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isshortwave','run short wave module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isthermal','run thermal module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isaccumulation','run accumulation module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'ismelt','run melting  module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isdensification','run densification module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'isturbulentflux','run turbulant heat fluxes module (default true)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Ta','2 m air temperature, in Kelvin'))
++		string = "%s\n%s"%(string,fielddisplay(self,'V','wind speed (m/s-1)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'dlwrf','downward shortwave radiation flux [W/m^2]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'dswrf','downward longwave radiation flux [W/m^2]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'P','precipitation [mm w.e. / m^2]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'eAir','screen level vapor pressure [Pa]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'pAir','surface pressure [Pa]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Tmean','mean annual temperature [K]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'C','mean annual snow accumulation [kg m-2 yr-1]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Tz','height above ground at which temperature (T) was sampled [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Vz','height above ground at which wind (V) eas sampled [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'zTop','depth over which grid length is constant at the top of the snopack (default 10) [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'dzTop','initial top vertical grid spacing (default .05) [m] '))
++		string = "%s\n%s"%(string,fielddisplay(self,'dzMin','initial min vertical allowable grid spacing (default dzMin/2) [m] '))
++		string = "%s\n%s"%(string,fielddisplay(self,'zMax','initial max model depth (default is min(thickness,500)) [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'zMin','initial min model depth (default is min(thickness,30)) [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'InitDensityScaling',['initial scaling factor multiplying the density of ice','which describes the density of the snowpack.']))
++		string = "%s\n%s"%(string,fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'))
++		string = "%s\n%s"%(string,fielddisplay(self,'aIdx',['method for calculating albedo and subsurface absorption (default is 1)',
++						'1: effective grain radius [Gardner & Sharp, 2009]',
++						'2: effective grain radius [Brun et al., 2009]',
++						'3: density and cloud amount [Greuell & Konzelmann, 1994]',
++						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]']))
++                               
++		#snow properties init
++		string = "%s\n%s"%(string,fielddisplay(self,'Dzini','Initial cel depth when restart [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Dini','Initial snow density when restart [kg m-3]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Reini','Initial grain size when restart [mm]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Gdnini','Initial grain dricity when restart [-]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Gspini','Initial grain sphericity when restart [-]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'ECini','Initial evaporation/condensation when restart [kg m-2]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Wini','Initial snow water content when restart [kg m-2]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Aini','Initial albedo when restart [-]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Tini','Initial snow temperature when restart [K]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Sizeini','Initial number of layers when restart [K]'))
++                        
++		#additional albedo parameters: 
++		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
++			string = "%s\n%s"%(string,fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)'))
++			string = "%s\n%s"%(string,fielddisplay(self,'aIce','albedo of ice (0.27-0.58)'))
++		elif self.aIdx == 3:
++			string = "%s\n%s"%(string,fielddisplay(self,'cldFrac','average cloud amount'))
++		elif self.aIdx == 4:
++			string = "%s\n%s"%(string,fielddisplay(self,'t0wet','time scale for wet snow (15-21.9) [d]'))
++			string = "%s\n%s"%(string,fielddisplay(self,'t0dry','warm snow timescale (30) [d]'))
++			string = "%s\n%s"%(string,fielddisplay(self,'K','time scale temperature coef. (7) [d]'))
++		
++		string = "%s\n%s"%(string,fielddisplay(self,'swIdx','apply all SW to top grid cell (0) or allow SW to penetrate surface (1) [default 1]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'denIdx',['densification model to use (default is 2):',
++						'1 = emperical model of Herron and Langway (1980)',
++						'2 = semi-emerical model of Anthern et al. (2010)',
++						'3 = DO NOT USE: physical model from Appix B of Anthern et al. (2010)',
++						'4 = DO NOT USE: emperical model of Li and Zwally (2004)',
++						'5 = DO NOT USE: modified emperical model (4) by Helsen et al. (2008)']))
++		string = "%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
++		return string
++	#}}}
++
++	def extrude(self,md): # {{{
++
++		self.Ta = project3d(md,'vector',self.Ta,'type','node')
++		self.V = project3d(md,'vector',self.V,'type','node')
++		self.dswrf = project3d(md,'vector',self.dswrf,'type','node')
++		self.dswrf = project3d(md,'vector',self.dswrf,'type','node')
++		self.P = project3d(md,'vector',self.P,'type','node')
++		self.eAir = project3d(md,'vector',self.eAir,'type','node')
++		self.pAir = project3d(md,'vector',self.pAir,'type','node')
++		return self
++	#}}}
++	def defaultoutputs(self,md): # {{{
++		return ['SmbMassBalance']
++	#}}}
++
++	def setdefaultparameters(self,mesh,geometry): # {{{
++		self.isgraingrowth = 1
++		self.isalbedo = 1
++		self.isshortwave = 1
++		self.isthermal = 1
++		self.isaccumulation = 1
++		self.ismelt = 1
++		self.isdensification = 1
++		self.isturbulentflux = 1
++	
++		self.aIdx = 1
++		self.swIdx = 1
++		self.denIdx = 2
++		self.zTop = 10*np.ones((mesh.numberofelements,))
++		self.dzTop = .05* np.ones((mesh.numberofelements,))
++		self.dzMin = self.dzTop/2
++		self.InitDensityScaling = 1.0
++		
++		self.zMax = 250*np.ones((mesh.numberofelements,))
++		self.zMin = 130*np.ones((mesh.numberofelements,))
++		self.zY = 1.10*np.ones((mesh.numberofelements,))
++		self.outputFreq = 30
++		
++		#additional albedo parameters
++		self.aSnow = 0.85
++		self.aIce = 0.48
++		self.cldFrac = 0.1 
++		self.t0wet = 15
++		self.t0dry = 30
++		self.K = 7
++        
++		self.Dzini = 0.05*np.ones((mesh.numberofelements,2))
++		self.Dini = 910.0*np.ones((mesh.numberofelements,2)) 
++		self.Reini = 2.5*np.ones((mesh.numberofelements,2))
++		self.Gdnini = 0.0*np.ones((mesh.numberofelements,2))
++		self.Gspini = 0.0*np.ones((mesh.numberofelements,2))
++		self.ECini = 0.0*np.ones((mesh.numberofelements,))
++		self.Wini = 0.0*np.ones((mesh.numberofelements,2))
++		self.Aini = self.aSnow*np.ones((mesh.numberofelements,2))
++		self.Tini = 273.15*np.ones((mesh.numberofelements,2))
++# 		/!\ Default value of Tini must be equal to Tmean but don't know Tmean yet (computed when atmospheric forcings are interpolated on mesh). 
++# 		If initialization without restart, this value will be overwritten when snow parameters are retrieved in Element.cpp 
++		self.Sizeini = 2*np.ones((mesh.numberofelements,))
++	#}}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		md = checkfield(md,'fieldname','smb.isgraingrowth','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isalbedo','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isshortwave','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isthermal','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isaccumulation','values',[0,1])
++		md = checkfield(md,'fieldname','smb.ismelt','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isdensification','values',[0,1])
++		md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0,1])
++
++		md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'Inf',1,'>',273-100,'<',273+100) #-100/100 celsius min/max value
++		md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1,'Inf',1,'> = ',0,'<',45) #max 500 km/h
++		md = checkfield(md,'fieldname','smb.dswrf','timeseries',1,'NaN',1,'Inf',1,'> = ',0,'< = ',1400)
++		md = checkfield(md,'fieldname','smb.dlwrf','timeseries',1,'NaN',1,'Inf',1,'> = ',0)
++		md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1,'Inf',1,'> = ',0,'< = ',100)
++		md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1,'Inf',1)
++
++		md = checkfield(md,'fieldname','smb.Tmean','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'>',273-100,'<',273+100) #-100/100 celsius min/max value
++		md = checkfield(md,'fieldname','smb.C','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'> = ',0) 
++		md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'> = ',0,'< = ',5000) 
++		md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'> = ',0,'< = ',5000) 
++
++		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[1,2,3,4])
++		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1])
++		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5])
++
++		md = checkfield(md,'fieldname','smb.zTop','NaN',1,'Inf',1,'> = ',0)
++		md = checkfield(md,'fieldname','smb.dzTop','NaN',1,'Inf',1,'>',0)
++		md = checkfield(md,'fieldname','smb.dzMin','NaN',1,'Inf',1,'>',0)
++		md = checkfield(md,'fieldname','smb.zY','NaN',1,'Inf',1,'> = ',1)
++		md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365) #10 years max 
++		md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
++
++		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
++			md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'> = ',.64,'< = ',.89)
++			md = checkfield(md,'fieldname','smb.aIce','NaN',1,'Inf',1,'> = ',.27,'< = ',.58)
++		elif self.aIdx == 3:
++			md = checkfield(md,'fieldname','smb.cldFrac','NaN',1,'Inf',1,'> = ',0,'< = ',1)
++		elif self.aIdx == 4:
++			md = checkfield(md,'fieldname','smb.t0wet','NaN',1,'Inf',1,'> = ',15,'< = ',21.9)
++			md = checkfield(md,'fieldname','smb.t0dry','NaN',1,'Inf',1,'> = ',30,'< = ',30)
++			md = checkfield(md,'fieldname','smb.K','NaN',1,'Inf',1,'> = ',7,'< = ',7)
++			
++
++		#check zTop is < local thickness:
++		he = np.sum(md.geometry.thickness[md.mesh.elements-1],axis=1)/np.size(md.mesh.elements,1)
++		if np.any(he<self.zTop):
++			error('SMBgemb consistency check error: zTop should be smaller than local ice thickness')
++		
++		md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1)
++		return md
++	# }}}
++
++	def marshall(self,prefix,md,fid):    # {{{
++
++		yts = md.constants.yts
++
++		WriteData(fid,prefix,'name','md.smb.model','data',8,'format','Integer')
++			
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isalbedo','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isshortwave','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isthermal','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isaccumulation','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismelt','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdensification','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean')
++            
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)         
++
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2)
++		
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIdx','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','swIdx','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIce','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','cldFrac','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0wet','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double')
++            
++		#snow properties init
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Dzini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Dini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Reini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Gdnini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Gspini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ECini','format','DoubleMat','mattype',2)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Wini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Aini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tini','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Sizeini','format','IntMat','mattype',2)
++
++		#figure out dt from forcings: 
++		time = self.Ta[-1] #assume all forcings are on the same time step
++		dtime = np.diff(time,n=1,axis=0)
++		dt = min(dtime) / yts
++            
++		WriteData(fid,prefix,'data',dt,'name','md.smb.dt','format','Double','scale',yts)
++
++		# Check if smb_dt goes evenly into transient core time step
++		if (md.timestepping.time_step % dt >=  1e-10):
++	                error('smb_dt/dt = #f. The number of SMB time steps in one transient core time step has to be an an integer',md.timestepping.time_step/dt)
++			
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		
++		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
++	# }}}
++
+Index: ../trunk-jpl/src/m/classes/taoinversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/taoinversion.py	(revision 22266)
++++ ../trunk-jpl/src/m/classes/taoinversion.py	(revision 22267)
+@@ -5,31 +5,33 @@
+ from fielddisplay import fielddisplay
+ from IssmConfig import IssmConfig
+ from marshallcostfunctions import marshallcostfunctions
++from supportedcontrols import *
++from supportedcostfunctions import *
+ 
+-
+-class taoinversion:
++class taoinversion(object):
+ 	def __init__(self):
+-		iscontrol                   = 0
+-		incomplete_adjoint          = 0
+-		control_parameters          = float('NaN')
+-		maxsteps                    = 0
+-		maxiter                     = 0
+-		fatol                       = 0
+-		frtol                       = 0
+-		gatol                       = 0
+-		grtol                       = 0
+-		gttol                       = 0
+-		algorithm                   = ''
+-		cost_functions              = float('NaN')
+-		cost_functions_coefficients = float('NaN')
+-		min_parameters              = float('NaN')
+-		max_parameters              = float('NaN')
+-		vx_obs                      = float('NaN')
+-		vy_obs                      = float('NaN')
+-		vz_obs                      = float('NaN')
+-		vel_obs                     = float('NaN')
+-		thickness_obs               = float('NaN')
+-		surface_obs                 = float('NaN')
++		self.iscontrol                   = 0
++		self.incomplete_adjoint          = 0
++		self.control_parameters          = float('NaN')
++		self.maxsteps                    = 0
++		self.maxiter                     = 0
++		self.fatol                       = 0
++		self.frtol                       = 0
++		self.gatol                       = 0
++		self.grtol                       = 0
++		self.gttol                       = 0
++		self.algorithm                   = ''
++		self.cost_functions              = float('NaN')
++		self.cost_functions_coefficients = float('NaN')
++		self.min_parameters              = float('NaN')
++		self.max_parameters              = float('NaN')
++		self.vx_obs                      = float('NaN')
++		self.vy_obs                      = float('NaN')
++		self.vz_obs                      = float('NaN')
++		self.vel_obs                     = float('NaN')
++		self.thickness_obs               = float('NaN')
++		self.surface_obs                 = float('NaN')
++		self.setdefaultparameters()
+ 
+ 	def __repr__(self):
+ 		string = '   taoinversion parameters:'
+@@ -97,7 +99,6 @@
+ 		
+ 		#several responses can be used:
+ 		self.cost_functions=101;
+-
+ 		return self
+ 
+ 	def extrude(self,md):
+@@ -118,17 +119,17 @@
+ 		return self
+ 
+ 	def checkconsistency(self,md,solution,analyses):
+-		if not self.control:
++		if not self.iscontrol:
+ 			return md
+ 		if not IssmConfig('_HAVE_TAO_')[0]:
+ 			md = checkmessage(md,['TAO has not been installed, ISSM needs to be reconfigured and recompiled with TAO'])
+ 
+ 
+-		num_controls= np.numel(md.inversion.control_parameters)
+-		num_costfunc= np.size(md.inversion.cost_functions,2)
++		num_controls= np.size(md.inversion.control_parameters)
++		num_costfunc= np.size(md.inversion.cost_functions)
+ 
+ 		md = checkfield(md,'fieldname','inversion.iscontrol','values',[0, 1])
+-		md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0, 1])
++		md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
+ 		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
+ 		md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0)
+ 		md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0)
+@@ -142,12 +143,12 @@
+ 		PETSCMAJOR = IssmConfig('_PETSC_MAJOR_')[0]
+ 		PETSCMINOR = IssmConfig('_PETSC_MINOR_')[0]
+ 		if(PETSCMAJOR>3 or (PETSCMAJOR==3 and PETSCMINOR>=5)):
+-			md = checkfield(md,'fieldname','inversion.algorithm','values',{'blmvm','cg','lmvm'})
++			md = checkfield(md,'fieldname','inversion.algorithm','values',['blmvm','cg','lmvm'])
+ 		else:
+-			md = checkfield(md,'fieldname','inversion.algorithm','values',{'tao_blmvm','tao_cg','tao_lmvm'})
++			md = checkfield(md,'fieldname','inversion.algorithm','values',['tao_blmvm','tao_cg','tao_lmvm'])
+ 
+ 
+-		md = checkfield(md,'fieldname','inversion.cost_functions','size',[1, num_costfunc],'values',supportedcostfunctions())
++		md = checkfield(md,'fieldname','inversion.cost_functions','size', [num_costfunc],'values',supportedcostfunctions())
+ 		md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices, num_costfunc],'>=',0)
+ 		md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices, num_controls])
+ 		md = checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices, num_controls])
+@@ -161,38 +162,38 @@
+ 			md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
+ 			md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1)
+ 
+-		def marshall(self, md, fid):
++	def marshall(self,prefix,md,fid):
+ 
+-			yts=md.constants.yts;
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
+-			WriteData(fid,prefix,'name','md.inversion.type','data',1,'format','Integer')
+-			if not self.iscontrol:
+-				return
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','fatol','format','Double')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','frtol','format','Double')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gatol','format','Double')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','grtol','format','Double')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','algorithm','format','String')
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1)
++		yts=md.constants.yts;
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
++		WriteData(fid,prefix,'name','md.inversion.type','data',1,'format','Integer')
++		if not self.iscontrol:
++			return
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','fatol','format','Double')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','frtol','format','Double')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gatol','format','Double')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','grtol','format','Double')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','algorithm','format','String')
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1)
+ 
+-			#process control parameters
+-			num_control_parameters = np.numel(self.control_parameters)
+-			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray')
+-			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer')
++		#process control parameters
++		num_control_parameters = np.size(self.control_parameters)
++		WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray')
++		WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer')
+ 
+-			#process cost functions
+-			num_cost_functions = np.size(self.cost_functions,2)
+-			data= marshallcostfunctions(self.cost_functions)
+-			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray')
+-			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer')
++		#process cost functions
++		num_cost_functions = np.size(self.cost_functions)
++		data= marshallcostfunctions(self.cost_functions)
++		WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray')
++		WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer')
+Index: ../trunk-jpl/src/m/classes/SMBgemb.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22266)
++++ ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22267)
+@@ -357,7 +357,7 @@
+ 			dt=min(dtime);
+             
+ 			WriteData(fid,prefix,'data',dt,'name','md.smb.dt','format','Double','scale',yts);
+-            
++
+ 			% Check if smb_dt goes evenly into transient core time step
+ 			if (mod(md.timestepping.time_step,dt) >= 1e-10)
+                 error('smb_dt/dt = %f. The number of SMB time steps in one transient core time step has to be an an integer',md.timestepping.time_step/dt);
+Index: ../trunk-jpl/src/m/classes/plumebasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/plumebasalforcings.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/plumebasalforcings.py	(revision 22267)
+@@ -0,0 +1,126 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++from project3d import project3d
++
++class plumebasalforcings(object):
++	'''
++	PLUME BASAL FORCINGS class definition
++
++		Usage:
++			plumebasalforcings=plumebasalforcings()
++	'''
++
++	def __init__(self): # {{{
++		floatingice_melting_rate  = float('NaN')
++		groundedice_melting_rate  = float('NaN')
++		mantleconductivity        = float('NaN')
++		nusselt                   = float('NaN')
++		dtbg                      = float('NaN')
++		plumeradius               = float('NaN')
++		topplumedepth             = float('NaN')
++		bottomplumedepth          = float('NaN')
++		plumex                    = float('NaN')
++		plumey                    = float('NaN')
++		crustthickness            = float('NaN')
++		uppercrustthickness       = float('NaN')
++		uppercrustheat            = float('NaN')
++		lowercrustheat            = float('NaN')
++
++		self.setdefaultparameters()
++	#}}}
++
++	def __repr__(self): # {{{
++		print '   mantle plume basal melt parameterization:'
++
++		string="%s\n%s"%(string,fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]'))
++		string="%s\n%s"%(string,fielddisplay(self,'floatingice_melting_rate','basal melting rate (positive if melting) [m/yr]'))
++		string="%s\n%s"%(string,fielddisplay(self,'mantleconductivity','mantle heat conductivity [W/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'nusselt','nusselt number, ratio of mantle to plume [1]'))
++		string="%s\n%s"%(string,fielddisplay(self,'dtbg','background temperature gradient [degree/m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'plumeradius','radius of the mantle plume [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'topplumedepth','depth of the mantle plume top below the crust [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'bottomplumedepth','depth of the mantle plume base below the crust [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'plumex','x coordinate of the center of the plume [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'plumey','y coordinate of the center of the plume [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'crustthickness','thickness of the crust [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'uppercrustthickness','thickness of the upper crust [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'uppercrustheat','volumic heat of the upper crust [w/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'lowercrustheat','volumic heat of the lowercrust [w/m^3]'))
++
++		return string
++	#}}}
++
++	def initialize(self,md): #{{{
++		if np.all(np.isnan(self.groundedice_melting_rate)):
++			self.groundedice_melting_rate=np.zeros((md.mesh.numberofvertices,))
++			print '      no basalforcings.groundedice_melting_rate specified: values set as zero'
++		if np.all(np.isnan(self.floatingice_melting_rate)):
++			self.floatingice_melting_rate=np.zeros((md.mesh.numberofvertices,))
++			print '      no basalforcings.floatingice_melting_rate specified: values set as zero'
++		return
++	#}}}
++
++	def extrude(self,md): # {{{
++		self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
++		self.floatingice_melting_rate=project3d(md,'vector',self.floatingice_melting_rate,'type','node','layer',1);
++		return self
++	#}}}
++
++	def setdefaultparameters(self): # {{{
++		#default values for melting parameterization
++		self.mantleconductivity     = 2.2
++		self.nusselt                = 300
++		self.dtbg                   = 11/1000.
++		self.plumeradius            = 100000
++		self.topplumedepth          = 10000
++		self.bottomplumedepth       = 1050000
++		self.crustthickness         = 30000
++		self.uppercrustthickness    = 14000
++		self.uppercrustheat         = 1.7*10**-6
++		self.lowercrustheat         = 0.4*10**-6
++		return self
++	#}}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		if 'MasstransportAnalysis' in analyses and not (solution == 'TransientSolution' and md.transient.ismasstransport==0):
++			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'timeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'timeseries',1)
++		if 'BalancethicknessAnalysis' in analyses:
++			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'size',[md.mesh.numberofvertices])
++			md = checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'size',[md.mesh.numberofvertices])
++		if 'ThermalAnalysis' in analyses and not (solution == 'TransientSolution' and md.transient.isthermal==0):
++			md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'timeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'timeseries',1)
++			md = checkfield(md,'fieldname','basalforcings.mantleconductivity','>=',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.nusselt','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.dtbg','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.topplumedepth','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.bottomplumedepth','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.plumex','numel',1)
++			md = checkfield(md,'fieldname','basalforcings.plumey','numel',1)
++			md = checkfield(md,'fieldname','basalforcings.crustthickness','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.uppercrustthickness','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.uppercrustheat','>',0,'numel',1)
++			md = checkfield(md,'fieldname','basalforcings.lowercrustheat','>',0,'numel',1)
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		yts=md.constants.yts
++
++		WriteData(fid,prefix,'name','md.basalforcings.model','data',4,'format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++		WriteData(fid,prefix,'object',self,'fieldname','mantleconductivity','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','nusselt','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','dtbg','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','plumeradius','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','topplumedepth','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','bottomplumedepth','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','plumex','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','plumey','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','crustthickness','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','uppercrustthickness','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','uppercrustheat','format','Double')
++		WriteData(fid,prefix,'object',self,'fieldname','lowercrustheat','format','Double')
++	# }}}
+Index: ../trunk-jpl/test/NightlyRun/test701.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test701.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test701.py	(revision 22267)
+@@ -0,0 +1,75 @@
++#Test Name: FlowbandFSshelf
++import numpy as np
++from scipy.interpolate import interp1d
++from model import *
++from solve import *
++from setflowequation import *
++from bamgflowband import *
++from paterson import *
++
++x = np.arange(1,3001,100).T
++h = np.linspace(1000,300,np.size(x)).T
++b = -917./1023.*h
++
++md = bamgflowband(model(),x,b+h,b,'hmax',80.)
++print md.mesh.numberofvertices
++
++#Geometry	    #interp1d returns a function to be called on md.mesh.x
++md.geometry.surface = interp1d(x,b+h)(md.mesh.x)
++md.geometry.base = interp1d(x,b)(md.mesh.x)
++md.geometry.thickness = md.geometry.surface-md.geometry.base
++
++#mask
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0.
++md.mask.groundedice_levelset = np.zeros((md.mesh.numberofvertices,)) - 0.5
++
++#materials
++md.initialization.temperature = (273.-20.)*np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3.*np.ones((md.mesh.numberofelements,))
++
++#friction
++md.friction.coefficient = np.zeros((md.mesh.numberofvertices,))
++md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20.
++md.friction.p = np.ones((md.mesh.numberofelements,))
++md.friction.q = np.ones((md.mesh.numberofelements,))
++
++#Boundary conditions
++md.stressbalance.referential = float('NaN')*np.ones((md.mesh.numberofvertices,6))
++md.stressbalance.loadingforce = 0. * np.ones((md.mesh.numberofvertices,3))
++md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 0.
++md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
++
++#Misc
++md = setflowequation(md,'FS','all')
++md.stressbalance.abstol = float('NaN')
++#md.stressbalance.reltol = 10**-16
++md.stressbalance.FSreconditioning = 1.
++md.stressbalance.maxiter = 20
++md.flowequation.augmented_lagrangian_r = 10000.
++md.miscellaneous.name  =  'test701'
++md.verbose = verbose('convergence',True)
++md.cluster = generic('np',2)
++
++#Go solve
++field_names = []
++field_tolerances = []
++field_values = []
++#md.initialization.pressure = md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.y)
++for i in ['MINI','MINIcondensed','TaylorHood','LATaylorHood','CrouzeixRaviart','LACrouzeixRaviart']:
++	print ' '
++	print '======Testing ' +i+ ' Full-Stokes Finite element====='
++	md.flowequation.fe_FS = i
++	md = solve(md,'Stressbalance')
++	field_names = field_names + [['Vx'+i],['Vy'+i],['Vel'+i],['Pressure'+i]]
++	field_tolerances = field_tolerances + [9e-5,9e-5,9e-5,1e-10]
++	field_values = field_values + [
++		md.results.StressbalanceSolution.Vx,
++		md.results.StressbalanceSolution.Vy,
++		md.results.StressbalanceSolution.Vel,
++		md.results.StressbalanceSolution.Pressure
++		]
+Index: ../trunk-jpl/test/NightlyRun/test703.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test703.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test703.py	(revision 22267)
+@@ -0,0 +1,160 @@
++#Test Name: FlowbandFSsheetshelfTrans
++import numpy as np
++from scipy.interpolate import interp1d
++import copy
++from model import  * 
++from socket import gethostname
++from triangle import  * 
++from meshconvert import  * 
++from setmask import  * 
++from parameterize import  * 
++from setflowequation import  * 
++from solve import  *
++from NowickiProfile import *
++from bamgflowband import *
++from paterson import *
++
++#mesh parameters
++x  = np.arange(-5,5.5,.5).T
++[b,h,sea] = NowickiProfile(x)
++x = x * 10**3
++h = h * 10**3
++b = (b-sea) * 10**3
++
++#mesh domain
++md = bamgflowband(model(),x,b+h,b,'hmax',150)
++print md.mesh.numberofvertices
++
++#geometry
++md.geometry.surface = interp1d(x,b+h)(md.mesh.x)
++md.geometry.base = interp1d(x,b)(md.mesh.x)
++md.geometry.thickness = md.geometry.surface - md.geometry.base
++
++#mask
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0
++md.mask.groundedice_levelset = np.zeros((md.mesh.numberofvertices,)) - 0.5
++
++#materials
++md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++
++#friction
++md.friction.coefficient = np.zeros((md.mesh.numberofvertices,))
++md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20
++md.friction.p = np.ones((md.mesh.numberofelements,))
++md.friction.q = np.ones((md.mesh.numberofelements,))
++
++#boundary conditions
++md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.referential = float('NaN') * np.ones((md.mesh.numberofvertices,6))
++md.stressbalance.loadingforce = 0 * np.ones((md.mesh.numberofvertices,3))
++md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 800.
++md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
++
++#print md.stressbalance.referential
++#print md.stressbalance.loadingforce
++#print md.stressbalance.spcvx
++#print md.stressbalance.spcvy
++#print md.stressbalance.spcvz
++#print np.shape(md.stressbalance.referential)
++#print np.shape(md.stressbalance.loadingforce)
++#print np.shape(md.stressbalance.spcvx)
++#print np.shape(md.stressbalance.spcvy)
++#print np.shape(md.stressbalance.spcvz)
++
++#Misc
++md = setflowequation(md,'FS','all')
++md.flowequation.fe_FS = 'TaylorHood'
++md.stressbalance.abstol = float('NaN')
++md.miscellaneous.name = 'test703'
++
++#Transient settings
++md.timestepping.time_step = 0.000001
++md.timestepping.final_time = 0.000005
++md.stressbalance.shelf_dampening = 1.
++md.smb.mass_balance = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.geothermalflux = np.zeros((md.mesh.numberofvertices,))
++posb = np.intersect1d(np.where(md.mesh.x > 0.), np.where(md.mesh.vertexonbase))
++md.basalforcings.groundedice_melting_rate[posb] = 18.
++md.basalforcings.floatingice_melting_rate[posb] = 18.
++md.initialization.vx = np.zeros((md.mesh.numberofvertices,))
++md.initialization.vy = np.zeros((md.mesh.numberofvertices,))
++md.initialization.pressure = np.zeros((md.mesh.numberofvertices,))
++md.masstransport.spcthickness = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.thermal.spctemperature = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.transient.isthermal = 0
++md.masstransport.isfreesurface = 1
++
++#Go solve
++md.cluster = generic('np',3)
++md.stressbalance.shelf_dampening = 1
++md1 = solve(md,'Transient')
++
++md.stressbalance.shelf_dampening = 0
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names      = [
++	'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3',
++	'Vx1_damp','Vy1_damp','Vel1_damp','Pressure1_damp','Bed1_damp','Surface1_damp','Thickness1_damp',
++	'Vx2_damp','Vy2_damp','Vel2_damp','Pressure2_damp','Bed2_damp','Surface2_damp','Thickness2_damp',
++	'Vx3_damp','Vy3_damp','Vel3_damp','Pressure3_damp','Bed3_damp','Surface3_damp','Thickness3_damp']
++field_tolerances = [
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md1.results.TransientSolution[0].Vx,
++	md1.results.TransientSolution[0].Vy,
++	md1.results.TransientSolution[0].Vel,
++	md1.results.TransientSolution[0].Pressure,
++	md1.results.TransientSolution[0].Base,
++	md1.results.TransientSolution[0].Surface,
++	md1.results.TransientSolution[0].Thickness,
++	md1.results.TransientSolution[1].Vx,
++	md1.results.TransientSolution[1].Vy,
++	md1.results.TransientSolution[1].Vel,
++	md1.results.TransientSolution[1].Pressure,
++	md1.results.TransientSolution[1].Base,
++	md1.results.TransientSolution[1].Surface,
++	md1.results.TransientSolution[1].Thickness,
++	md1.results.TransientSolution[2].Vx,
++	md1.results.TransientSolution[2].Vy,
++	md1.results.TransientSolution[2].Vel,
++	md1.results.TransientSolution[2].Pressure,
++	md1.results.TransientSolution[2].Base,
++	md1.results.TransientSolution[2].Surface,
++	md1.results.TransientSolution[2].Thickness,
++	]
+Index: ../trunk-jpl/test/NightlyRun/test293.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test293.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test293.py	(revision 22267)
+@@ -0,0 +1,60 @@
++#Test Name: SquareShelfTranSSA2dMismipFloatingMeltParam
++import numpy as np
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from mismipbasalforcings import *
++
++md = triangle(model(),'../Exp/Square.exp',150000.)
++md = setmask(md,'all','')
++md = parameterize(md,'../Par/SquareShelf.py')
++md = setflowequation(md,'SSA','all')
++md.cluster = generic('name',gethostname(),'np',3)
++md.constants.yts = 365.2422 * 24. * 3600.
++md.basalforcings = mismipbasalforcings()
++md.basalforcings = md.basalforcings.initialize(md)
++md.transient.isgroundingline = 1
++md.geometry.bed = min(md.geometry.base) * np.ones(md.mesh.numberofvertices,)
++md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
++print md.constants.yts
++
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','BasalforcingsFloatingiceMeltingRate1',
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','BasalforcingsFloatingiceMeltingRate2',
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','BasalforcingsFloatingiceMeltingRate3']
++field_tolerances = [
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13,
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13,
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,2e-13]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[0].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[1].BasalforcingsFloatingiceMeltingRate,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md.results.TransientSolution[2].BasalforcingsFloatingiceMeltingRate,
++	]
+Index: ../trunk-jpl/src/m/mesh/bamgflowband.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamgflowband.py	(nonexistent)
++++ ../trunk-jpl/src/m/mesh/bamgflowband.py	(revision 22267)
+@@ -0,0 +1,47 @@
++import numpy as  np
++from model import *
++from collections import OrderedDict
++from bamg import *
++from mesh2dvertical import *
++
++def bamgflowband(md,x,surf,base,*args):
++	"""
++	BAMGFLOWBAND - create flowband mesh with bamg
++
++	Usage:
++		md=bamgflowband(md,x,surf,base,OPTIONS)
++
++		surf and bed are the surface elevation and base for each x provided
++		x must be increasing
++		OPTIONS are bamg options
++
++	Example:
++		x =np.arrange(1,3001,100)
++		h=linspace(1000,300,numel(x))
++		b=-917/1023*h
++		md=bamgflowband(model,b+h,b,'hmax',80,'vertical',1,'Markers',m)
++	"""
++
++	#Write expfile with domain outline
++	A = OrderedDict()
++	A.x = np.concatenate((x,np.flipud(x),[x[0]]))
++	A.y = np.concatenate((base,np.flipud(surf),[base[0]]))
++	A.nods = np.size(A.x)
++
++	#markers:
++	m                          	= np.ones((np.size(A.x)-1,))	# base        = 1
++	m[np.size(x) - 1]                	= 2			# right side  = 2
++	m[np.size(x):2 * np.size(x) - 1] 	= 3			# top surface = 3
++	m[2 * np.size(x) - 1]              	= 4			# left side   = 4
++
++	#mesh domain
++	md = bamg(model(),'domain',[A],'vertical',1,'Markers',m,*args)
++	#print md.mesh.numberofvertices
++
++	#Deal with vertices on bed
++	md.mesh.vertexonbase = np.zeros((md.mesh.numberofvertices,))
++	md.mesh.vertexonbase[np.where(md.mesh.vertexflags(1))] = 1
++	md.mesh.vertexonsurface = np.zeros((md.mesh.numberofvertices,))
++	md.mesh.vertexonsurface[np.where(md.mesh.vertexflags(3))] = 1
++
++	return md
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 22266)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 22267)
+@@ -1,6 +1,6 @@
+ import os.path
+ import numpy as  np
+-from mesh2d import mesh2d
++from mesh2dvertical import *
+ from collections import OrderedDict
+ from pairoptions import pairoptions
+ from bamggeom import bamggeom
+@@ -79,9 +79,12 @@
+ 
+ 		#Check that file exists
+ 		domainfile=options.getfieldvalue('domain')
+-		if not os.path.exists(domainfile):
+-			raise IOError("bamg error message: file '%s' not found" % domainfile)
+-		domain=expread(domainfile)
++		if type(domainfile) == str:
++			if not os.path.exists(domainfile):
++				raise IOError("bamg error message: file '%s' not found" % domainfile)
++			domain=expread(domainfile)
++		else:
++			domain=domainfile
+ 
+ 		#Build geometry 
+ 		count=0
+@@ -88,18 +91,18 @@
+ 		for i,domaini in enumerate(domain):
+ 
+ 			#Check that the domain is closed
+-			if (domaini['x'][0]!=domaini['x'][-1] or domaini['y'][0]!=domaini['y'][-1]):
++			if (domaini.x[0]!=domaini.x[-1] or domaini.y[0]!=domaini.y[-1]):
+ 				raise RuntimeError("bamg error message: all contours provided in ''domain'' should be closed")
+ 
+ 			#Checks that all holes are INSIDE the principle domain outline
+ 			if i:
+-				flags=ContourToNodes(domaini['x'],domaini['y'],domainfile,0)[0]
++				flags=ContourToNodes(domaini.x,domaini.y,domainfile,0)[0]
+ 				if np.any(np.logical_not(flags)):
+ 					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
+ 
+ 			#Add all points to bamg_geometry
+-			nods=domaini['nods']-1    #the domain are closed 0=end
+-			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods],domaini['y'][0:nods],np.ones((nods)))).T))
++			nods=domaini.nods-1    #the domain are closed 0=end
++			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini.x[0:nods],domaini.y[0:nods],np.ones((nods)))).T))
+ 			bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
+                         if i:
+                             bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,-subdomain_ref]))
+@@ -115,6 +118,12 @@
+ 			#update counter
+ 			count+=nods
+ 
++		if options.getfieldvalue('vertical',0):
++			if np.size(options.getfieldvalue('Markers',[]))!=np.size(bamg_geometry.Edges,0):
++				raise RuntimeError('for 2d vertical mesh, ''Markers'' option is required, and should be of size ' + str(np.size(bamg_geometry.Edges,0)))
++			if np.size(options.getfieldvalue('Markers',[]))==np.size(bamg_geometry.Edges,0):
++				bamg_geometry.Edges[:,2]=options.getfieldvalue('Markers')
++
+ 		#take care of rifts
+ 		if options.exist('rifts'):
+ 
+@@ -322,23 +331,64 @@
+ 	bamgmesh_out,bamggeom_out=BamgMesher(bamg_mesh.__dict__,bamg_geometry.__dict__,bamg_options)
+ 
+ 	# plug results onto model
++	if options.getfieldvalue('vertical',0):
++		md.mesh=mesh2dvertical()
++		md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
++		md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
++		md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].astype(int)
++		md.mesh.edges=bamgmesh_out['IssmEdges'].astype(int)
++		md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].astype(int)
++		md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].astype(int)
++
++		#Fill in rest of fields:
++		md.mesh.numberofelements=np.size(md.mesh.elements,axis=0)
++		md.mesh.numberofvertices=np.size(md.mesh.x)
++		md.mesh.numberofedges=np.size(md.mesh.edges,axis=0)
++		md.mesh.vertexonboundary=np.zeros(md.mesh.numberofvertices,bool)
++		md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=True
++
++		#Now, build the connectivity tables for this mesh. Doubled in matlab for some reason
++		md.mesh.vertexonboundary=np.zeros(md.mesh.numberofvertices,)
++		md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=1
++
++	elif options.getfieldvalue('3dsurface',0):
++		md.mesh=mesh3dsurface()
++		md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
++		md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
++		md.mesh.z=md.mesh.x
++		md.mesh.z[:]=0
++		md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].astype(int)
++		md.mesh.edges=bamgmesh_out['IssmEdges'].astype(int)
++		md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].astype(int)
++		md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].astype(int)
++
++		#Fill in rest of fields:
++		md.mesh.numberofelements=np.size(md.mesh.elements,axis=0)
++		md.mesh.numberofvertices=np.size(md.mesh.x)
++		md.mesh.numberofedges=np.size(md.mesh.edges,axis=0)
++		md.mesh.vertexonboundary=np.zeros(md.mesh.numberofvertices,bool)
++		md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=True
++
++	else:
++		md.mesh=mesh2d()
++		md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
++		md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
++		md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].astype(int)
++		md.mesh.edges=bamgmesh_out['IssmEdges'].astype(int)
++		md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].astype(int)
++		md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].astype(int)
++
++		#Fill in rest of fields:
++		md.mesh.numberofelements=np.size(md.mesh.elements,axis=0)
++		md.mesh.numberofvertices=np.size(md.mesh.x)
++		md.mesh.numberofedges=np.size(md.mesh.edges,axis=0)
++		md.mesh.vertexonboundary=np.zeros(md.mesh.numberofvertices,bool)
++		md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=True
++
++	#Bamg private fields
+ 	md.private.bamg=OrderedDict()
+ 	md.private.bamg['mesh']=bamgmesh(bamgmesh_out)
+ 	md.private.bamg['geometry']=bamggeom(bamggeom_out)
+-	md.mesh = mesh2d()
+-	md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
+-	md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
+-	md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].astype(int)
+-	md.mesh.edges=bamgmesh_out['IssmEdges'].astype(int)
+-	md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].astype(int)
+-	md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].astype(int)
+-
+-	#Fill in rest of fields:
+-	md.mesh.numberofelements=np.size(md.mesh.elements,axis=0)
+-	md.mesh.numberofvertices=np.size(md.mesh.x)
+-	md.mesh.numberofedges=np.size(md.mesh.edges,axis=0)
+-	md.mesh.vertexonboundary=np.zeros(md.mesh.numberofvertices,bool)
+-	md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=True
+ 	md.mesh.elementconnectivity=md.private.bamg['mesh'].ElementConnectivity
+ 	md.mesh.elementconnectivity[np.nonzero(np.isnan(md.mesh.elementconnectivity))]=0
+ 	md.mesh.elementconnectivity=md.mesh.elementconnectivity.astype(int)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22267-22268.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22267-22268.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22267-22268.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/test701.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test701.py	(revision 22267)
++++ ../trunk-jpl/test/NightlyRun/test701.py	(revision 22268)
+@@ -12,7 +12,6 @@
+ b = -917./1023.*h
+ 
+ md = bamgflowband(model(),x,b+h,b,'hmax',80.)
+-print md.mesh.numberofvertices
+ 
+ #Geometry	    #interp1d returns a function to be called on md.mesh.x
+ md.geometry.surface = interp1d(x,b+h)(md.mesh.x)
+Index: ../trunk-jpl/test/NightlyRun/test293.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test293.py	(revision 22267)
++++ ../trunk-jpl/test/NightlyRun/test293.py	(revision 22268)
+@@ -20,7 +20,6 @@
+ md.transient.isgroundingline = 1
+ md.geometry.bed = min(md.geometry.base) * np.ones(md.mesh.numberofvertices,)
+ md.transient.requested_outputs = ['default','BasalforcingsFloatingiceMeltingRate']
+-print md.constants.yts
+ 
+ md = solve(md,'Transient')
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22268-22269.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22268-22269.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22268-22269.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 22268)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 22269)
+@@ -472,7 +472,7 @@
+ 				delete [] next_p;
+ 				delete [] head_v;
+ 				delete [] eangle;
+-				_error_("two points of the geometry are very closed to each other (see reference numbers above)");
++				_error_("two points of the geometry are very close to each other (see reference numbers above)");
+ 			}
+ 
+ 			/*Add vertices[i] to the quadtree*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22269-22270.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22269-22270.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22269-22270.diff	(revision 22755)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/m/classes/clusters/stallo.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/stallo.py	(revision 22269)
++++ ../trunk-jpl/src/m/classes/clusters/stallo.py	(revision 22270)
+@@ -122,24 +122,12 @@
+ 
+ 		fid.write('export ISSM_DIR="%s/../"\n' % self.codepath)
+ 		fid.write('module purge\n')
+-		fid.write('module load Automake/1.15-intel-2016a\n')
+-		fid.write('module load libtool/2.4.6-intel-2016a\n')
+-		fid.write('module load CMake/3.5.2-intel-2016a\n')
+-		fid.write('module load MUMPS/5.1.1-intel-2016a-parmetis\n')
+-		fid.write('module load PETSc/3.7.2-intel-2016a-Python-2.7.11\n')
+-		fid.write('module load FFTW/3.3.4-intel-2016a\n')
+-		fid.write('module load OpenSSL/1.0.1s-intel-2016a\n')
++		fid.write('module load CMake/3.8.0-GCCcore-6.3.0\n')
++		fid.write('module load Automake/1.15.1-GCCcore-6.3.0\n')
++		fid.write('module load libtool/2.4.6\n')
++		fid.write('module load OpenSSL/1.1.0e-intel-2017a\n')
++		fid.write('module load PETSc/3.7.5-intel-2017a-downloaded-deps\n')
+ 
+-		# fid.write('module load Automake/1.15-intel-2016a\n')
+-		# fid.write('module load libtool/2.4.6-intel-2016a\n')
+-		# fid.write('module load CMake/3.5.2-intel-2016a\n')
+-		# fid.write('module load intel/2016a\n')
+-		# fid.write('module load ParMETIS/4.0.3-intel-2016a\n')
+-		# fid.write('module load MUMPS/5.1.1-intel-2016a-parmetis\n')
+-		# fid.write('module load PETSc/3.7.2-intel-2016a-Python-2.7.11\n')
+-		# fid.write('module load FFTW/3.3.4-intel-2016a\n')
+-		# fid.write('module load OpenSSL/1.0.1s-intel-2016a\n')
+-
+ 		fid.write('cd %s/%s/\n\n' % (self.executionpath,dirname))
+ 		if self.profiling==1:
+ 			fid.write('module load perf-report\n')
+Index: ../trunk-jpl/src/m/classes/hydrologydc.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22269)
++++ ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22270)
+@@ -90,7 +90,7 @@
+ 			string="%s\n%s"%(string,fielddisplay(self,'mask_eplactive_node','active (1) or not (0) EPL'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'epl_compressibility','epl compressibility [Pa^-1]'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'epl_porosity','epl [dimensionless]'))
+-			string="%s\n%s"%(string,fielddisplay(self,'epl_max_thickness','epl initial thickness [m]'))
++			string="%s\n%s"%(string,fielddisplay(self,'epl_max_thickness','epl maximal thickness [m]'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'epl_initial_thickness','epl initial thickness [m]'))			
+ 			string="%s\n%s"%(string,fielddisplay(self,'epl_colapse_thickness','epl colapsing thickness [m]'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'epl_thick_comp','epl thickness computation flag'))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22270-22271.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22270-22271.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22270-22271.diff	(revision 22755)
@@ -0,0 +1,201 @@
+Index: ../trunk-jpl/test/NightlyRun/test703.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test703.py	(revision 22270)
++++ ../trunk-jpl/test/NightlyRun/test703.py	(nonexistent)
+@@ -1,160 +0,0 @@
+-#Test Name: FlowbandFSsheetshelfTrans
+-import numpy as np
+-from scipy.interpolate import interp1d
+-import copy
+-from model import  * 
+-from socket import gethostname
+-from triangle import  * 
+-from meshconvert import  * 
+-from setmask import  * 
+-from parameterize import  * 
+-from setflowequation import  * 
+-from solve import  *
+-from NowickiProfile import *
+-from bamgflowband import *
+-from paterson import *
+-
+-#mesh parameters
+-x  = np.arange(-5,5.5,.5).T
+-[b,h,sea] = NowickiProfile(x)
+-x = x * 10**3
+-h = h * 10**3
+-b = (b-sea) * 10**3
+-
+-#mesh domain
+-md = bamgflowband(model(),x,b+h,b,'hmax',150)
+-print md.mesh.numberofvertices
+-
+-#geometry
+-md.geometry.surface = interp1d(x,b+h)(md.mesh.x)
+-md.geometry.base = interp1d(x,b)(md.mesh.x)
+-md.geometry.thickness = md.geometry.surface - md.geometry.base
+-
+-#mask
+-md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
+-md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0
+-md.mask.groundedice_levelset = np.zeros((md.mesh.numberofvertices,)) - 0.5
+-
+-#materials
+-md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices,))
+-md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
+-
+-#friction
+-md.friction.coefficient = np.zeros((md.mesh.numberofvertices,))
+-md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20
+-md.friction.p = np.ones((md.mesh.numberofelements,))
+-md.friction.q = np.ones((md.mesh.numberofelements,))
+-
+-#boundary conditions
+-md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
+-md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
+-md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
+-md.stressbalance.referential = float('NaN') * np.ones((md.mesh.numberofvertices,6))
+-md.stressbalance.loadingforce = 0 * np.ones((md.mesh.numberofvertices,3))
+-md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 800.
+-md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
+-
+-#print md.stressbalance.referential
+-#print md.stressbalance.loadingforce
+-#print md.stressbalance.spcvx
+-#print md.stressbalance.spcvy
+-#print md.stressbalance.spcvz
+-#print np.shape(md.stressbalance.referential)
+-#print np.shape(md.stressbalance.loadingforce)
+-#print np.shape(md.stressbalance.spcvx)
+-#print np.shape(md.stressbalance.spcvy)
+-#print np.shape(md.stressbalance.spcvz)
+-
+-#Misc
+-md = setflowequation(md,'FS','all')
+-md.flowequation.fe_FS = 'TaylorHood'
+-md.stressbalance.abstol = float('NaN')
+-md.miscellaneous.name = 'test703'
+-
+-#Transient settings
+-md.timestepping.time_step = 0.000001
+-md.timestepping.final_time = 0.000005
+-md.stressbalance.shelf_dampening = 1.
+-md.smb.mass_balance = np.zeros((md.mesh.numberofvertices,))
+-md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,))
+-md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices,))
+-md.basalforcings.geothermalflux = np.zeros((md.mesh.numberofvertices,))
+-posb = np.intersect1d(np.where(md.mesh.x > 0.), np.where(md.mesh.vertexonbase))
+-md.basalforcings.groundedice_melting_rate[posb] = 18.
+-md.basalforcings.floatingice_melting_rate[posb] = 18.
+-md.initialization.vx = np.zeros((md.mesh.numberofvertices,))
+-md.initialization.vy = np.zeros((md.mesh.numberofvertices,))
+-md.initialization.pressure = np.zeros((md.mesh.numberofvertices,))
+-md.masstransport.spcthickness = float('NaN') * np.ones((md.mesh.numberofvertices,))
+-md.thermal.spctemperature = float('NaN') * np.ones((md.mesh.numberofvertices,))
+-md.transient.isthermal = 0
+-md.masstransport.isfreesurface = 1
+-
+-#Go solve
+-md.cluster = generic('np',3)
+-md.stressbalance.shelf_dampening = 1
+-md1 = solve(md,'Transient')
+-
+-md.stressbalance.shelf_dampening = 0
+-md = solve(md,'Transient')
+-
+-#Fields and tolerances to track changes
+-field_names      = [
+-	'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
+-	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
+-	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3',
+-	'Vx1_damp','Vy1_damp','Vel1_damp','Pressure1_damp','Bed1_damp','Surface1_damp','Thickness1_damp',
+-	'Vx2_damp','Vy2_damp','Vel2_damp','Pressure2_damp','Bed2_damp','Surface2_damp','Thickness2_damp',
+-	'Vx3_damp','Vy3_damp','Vel3_damp','Pressure3_damp','Bed3_damp','Surface3_damp','Thickness3_damp']
+-field_tolerances = [
+-	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
+-	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
+-	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
+-	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
+-	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
+-	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10]
+-field_values = [
+-	md.results.TransientSolution[0].Vx,
+-	md.results.TransientSolution[0].Vy,
+-	md.results.TransientSolution[0].Vel,
+-	md.results.TransientSolution[0].Pressure,
+-	md.results.TransientSolution[0].Base,
+-	md.results.TransientSolution[0].Surface,
+-	md.results.TransientSolution[0].Thickness,
+-	md.results.TransientSolution[1].Vx,
+-	md.results.TransientSolution[1].Vy,
+-	md.results.TransientSolution[1].Vel,
+-	md.results.TransientSolution[1].Pressure,
+-	md.results.TransientSolution[1].Base,
+-	md.results.TransientSolution[1].Surface,
+-	md.results.TransientSolution[1].Thickness,
+-	md.results.TransientSolution[2].Vx,
+-	md.results.TransientSolution[2].Vy,
+-	md.results.TransientSolution[2].Vel,
+-	md.results.TransientSolution[2].Pressure,
+-	md.results.TransientSolution[2].Base,
+-	md.results.TransientSolution[2].Surface,
+-	md.results.TransientSolution[2].Thickness,
+-	md1.results.TransientSolution[0].Vx,
+-	md1.results.TransientSolution[0].Vy,
+-	md1.results.TransientSolution[0].Vel,
+-	md1.results.TransientSolution[0].Pressure,
+-	md1.results.TransientSolution[0].Base,
+-	md1.results.TransientSolution[0].Surface,
+-	md1.results.TransientSolution[0].Thickness,
+-	md1.results.TransientSolution[1].Vx,
+-	md1.results.TransientSolution[1].Vy,
+-	md1.results.TransientSolution[1].Vel,
+-	md1.results.TransientSolution[1].Pressure,
+-	md1.results.TransientSolution[1].Base,
+-	md1.results.TransientSolution[1].Surface,
+-	md1.results.TransientSolution[1].Thickness,
+-	md1.results.TransientSolution[2].Vx,
+-	md1.results.TransientSolution[2].Vy,
+-	md1.results.TransientSolution[2].Vel,
+-	md1.results.TransientSolution[2].Pressure,
+-	md1.results.TransientSolution[2].Base,
+-	md1.results.TransientSolution[2].Surface,
+-	md1.results.TransientSolution[2].Thickness,
+-	]
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 22270)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 22271)
+@@ -1,6 +1,8 @@
+ import os.path
+ import numpy as  np
++from mesh2d import *
+ from mesh2dvertical import *
++from mesh3dsurface import *
+ from collections import OrderedDict
+ from pairoptions import pairoptions
+ from bamggeom import bamggeom
+@@ -91,18 +93,18 @@
+ 		for i,domaini in enumerate(domain):
+ 
+ 			#Check that the domain is closed
+-			if (domaini.x[0]!=domaini.x[-1] or domaini.y[0]!=domaini.y[-1]):
++			if (domaini['x'][0]!=domaini['x'][-1] or domaini['y'][0]!=domaini['y'][-1]):
+ 				raise RuntimeError("bamg error message: all contours provided in ''domain'' should be closed")
+ 
+ 			#Checks that all holes are INSIDE the principle domain outline
+ 			if i:
+-				flags=ContourToNodes(domaini.x,domaini.y,domainfile,0)[0]
++				flags=ContourToNodes(domaini['x'],domaini['y'],domainfile,0)[0]
+ 				if np.any(np.logical_not(flags)):
+ 					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
+ 
+ 			#Add all points to bamg_geometry
+-			nods=domaini.nods-1    #the domain are closed 0=end
+-			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini.x[0:nods],domaini.y[0:nods],np.ones((nods)))).T))
++			nods=domaini['nods']-1    #the domain are closed 0=end
++			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods],domaini['y'][0:nods],np.ones((nods)))).T))
+ 			bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
+                         if i:
+                             bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,-subdomain_ref]))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22271-22272.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22271-22272.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22271-22272.diff	(revision 22755)
@@ -0,0 +1,296 @@
+Index: ../trunk-jpl/test/NightlyRun/test1108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.py	(revision 22271)
++++ ../trunk-jpl/test/NightlyRun/test1108.py	(revision 22272)
+@@ -7,6 +7,7 @@
+ from parameterize import *
+ from setflowequation import *
+ from solve import *
++from squaremesh import *
+ 
+ from PythonFuncs import *
+ 
+@@ -15,6 +16,7 @@
+ Pattyn and Payne 2006
+ """
+ 
++#L_list=[5000.,10000.,20000.,40000.,80000.,160000.]
+ L_list=[80000.]
+ results=[]
+ 
+@@ -34,7 +36,13 @@
+ 	md.stressbalance.spcvy=np.nan*np.ones((md.mesh.numberofvertices))
+ 	md.stressbalance.spcvz=np.nan*np.ones((md.mesh.numberofvertices))
+ 	
+-	pos=np.nonzero(logical_and.reduce_n(md.mesh.vertexonbase,np.logical_or.reduce(md.mesh.x==0.,md.mesh.x==np.max(md.mesh.x)),np.logical_or.reduce(md.mesh.y==0.,md.mesh.y==np.max(md.mesh.y))))
++	maxx = max(md.mesh.x)
++	maxy = max(md.mesh.y)
++	posA = np.where(md.mesh.vertexonbase)
++	posB = np.unique(np.concatenate((np.where(md.mesh.x==0.), np.where(md.mesh.x==maxx))))
++	posC = np.unique(np.concatenate((np.where(md.mesh.y==0.), np.where(md.mesh.y==maxy))))
++	pos = np.intersect1d(np.intersect1d(posA,posB),posC)
++
+ 	md.stressbalance.spcvx[pos]=0.
+ 	md.stressbalance.spcvy[pos]=0.
+ 	md.stressbalance.spcvz[pos]=0.
+@@ -43,8 +51,8 @@
+ 	posx=np.nonzero(md.mesh.x==0.)[0]
+ 	posx2=np.nonzero(md.mesh.x==np.max(md.mesh.x))[0]
+ 
+-	posy=np.nonzero(logical_and.reduce_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=np.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+-	posy2=np.nonzero(logical_and.reduce_n(md.mesh.y==np.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=np.max(md.mesh.x)))[0]
++	posy=np.intersect1d(np.intersect1d(np.where(md.mesh.y==0.),np.where(md.mesh.x!=0.)),np.where(md.mesh.x!=np.max(md.mesh.x)))[0]    #Don't take the same nodes two times
++	posy2=np.intersect1d(np.intersect1d(np.where(md.mesh.y==np.max(md.mesh.y)),np.where(md.mesh.x!=0.)),np.where(md.mesh.x!=np.max(md.mesh.x)))[0]
+ 
+ 	md.stressbalance.vertex_pairing=np.vstack((np.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),np.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1109.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test1109.py	(revision 22272)
+@@ -0,0 +1,86 @@
++#Test Name: ISMIPE
++import numpy as np
++import sys
++from model import *
++from socket import gethostname
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from squaremesh import *
++
++#This test is a test from the ISMP-HOM Intercomparison project.
++#TestE 
++#Four tests to run: - Pattyn frozen
++#                   - Stokes frozen
++#                   - Pattyn with some sliding
++#                   - Stokes with some sliding
++printingflag = False
++results = []
++
++for i in range(4):
++	Lx=10. #in m
++	Ly=5000. #in m
++	nx=3 #number of nodes in x direction
++	ny=51
++	md = model()
++	md = squaremesh(md,Lx,Ly,nx,ny)
++	md = setmask(md,'','') #ice sheet test
++	md = parameterize(md,'../Par/ISMIPE.py')
++	md = md.extrude(10,1.)
++
++	if i==0 or i==2:
++		md = setflowequation(md,'HO','all')
++	elif i==1 or i==3:
++		md = setflowequation(md,'FS','all')
++
++	#Create MPCs to have periodic boundary conditions
++	posx = np.where(md.mesh.x == 0.)[0]
++	posx2 = np.where(md.mesh.x == max(md.mesh.x))[0]
++	md.stressbalance.vertex_pairing = np.column_stack((posx,posx2))
++
++	#Create spcs on the bed 
++	pos = np.where(md.mesh.vertexonbase)[0]
++	md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	md.stressbalance.spcvx[pos] = 0.
++	md.stressbalance.spcvy[pos] = 0.
++	md.stressbalance.spcvz[pos] = 0.
++
++	#Remove the spc where there is some sliding (case 3 and 4):
++	if i==2 or i==3:
++		pos = np.intersect1d(np.where((md.mesh.y / max(md.mesh.y)) >= 0.44), np.where((md.mesh.y / max(md.mesh.y)) <= 0.5))[0]
++		md.stressbalance.spcvx[pos] = float('NaN')
++		md.stressbalance.spcvy[pos] = float('NaN')
++		md.stressbalance.spcvz[pos] = float('NaN')
++
++	#Compute the stressbalance
++	md.cluster = generic('name',gethostname(),'np',8)
++	md = solve(md,'Stressbalance')
++
++	vx = md.results.StressbalanceSolution.Vx
++	vy = md.results.StressbalanceSolution.Vy
++	vz = md.results.StressbalanceSolution.Vz
++	results[i] = md.results.StressbalanceSolution
++
++
++#Fields and tolerances to track changes
++field_names = [
++	'VyPattynSliding','VzPattynSliding',
++	'VxStokesSliding','VyStokesSliding','VzStokesSliding',
++	'VyPattynFrozen','VzPattynFrozen',
++	'VxStokesFrozen','VyStokesFrozen','VzStokesFrozen'
++	]
++field_tolerances = [
++	1e-05,1e-05,
++	1e-05,1e-06,1e-06,
++	1e-05,1e-04,
++	1e-05,1e-05,1e-06
++	]
++
++field_values = []
++for i in range(4):
++	result = results[i]
++	field_values += [result.Vx,result.Vy,result.Vz]
+Index: ../trunk-jpl/test/NightlyRun/test1110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test1110.py	(revision 22272)
+@@ -0,0 +1,141 @@
++#Test Name: ISMIPF
++import numpy as np
++from model import *
++from socket import gethostname
++from bamg import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++from squaremesh import *
++
++#This test is a test from the ISMP-HOM Intercomparison project.
++#TestF 
++printingflag = False
++results = []
++
++for i in range(4):
++	L = 100000. #in m
++	nx = 30 #numberof nodes in x direction
++	ny = 30
++	md = model()
++	md = squaremesh(md,L,L,nx,ny)
++#	md = triangle(md,'../Exp/SquareISMIP.exp',5500.)
++	md = setmask(md,'','') #ice sheet test
++	md = parameterize(md,'../Par/ISMIPF.py')
++	md = md.extrude(4,1.)
++
++	if (i == 0 or i == 1):
++		md = setflowequation(md,'HO','all')
++	else:
++		md = setflowequation(md,'FS','all')
++
++	md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
++	if (i == 0 or i == 2):
++		#Create dirichlet on the bed if no slip
++		pos = np.where(md.mesh.vertexonbase)
++		md.stressbalance.spcvx[pos] = 0.
++		md.stressbalance.spcvy[pos] = 0.
++		md.stressbalance.spcvz[pos] = 0.
++	else:
++		posA = np.where(md.mesh.vertexonbase)
++		posB = np.unique(np.concatenate(np.where(md.mesh.x == 0.),np.where(md.mesh.x == max(md.mesh.x))))
++		posC = np.unique(np.concatenate(np.where(md.mesh.y == 0.),np.where(md.mesh.y == max(md.mesh.y))))
++		pos = np.intersect1d(np.intersect1d(posA,posB),posC)
++		md.stressbalance.spcvx[pos] = 100. #because we need a dirichlet somewhere
++		md.stressbalance.spcvy[pos] = 0.
++		md.stressbalance.spcvz[pos] = 0.
++	
++	pos = np.where(np.logical_not(md.mesh.vertexonbase))
++	md.thermal.spctemperature[pos] = 255.
++
++	#Create MPCs to have periodic boundary conditions
++	posx = np.where(md.mesh.x == 0.)
++	posx2 = np.where(md.mesh.x == max(md.mesh.x))
++
++	posy = np.where(md.mesh.y == 0.)
++	posy2 = np.where(md.mesh.y == max(md.mesh.y))
++
++	md.stressbalance.vertex_pairing = np.column_stack((posx,posx2,posy,posy2))
++	md.masstransport.vertex_pairing = np.column_stack((posx,posx2,posy,posy2))
++
++	md.timestepping.time_step = 3.
++	md.timestepping.final_time = 300.
++	md.settings.output_frequency = 50
++	md.masstransport.stabilization = 1
++	md.stressbalance.maxiter = 1
++	
++	#Compute the stressbalance
++	md.cluster = generic('name',gethostname(),'np',8)
++	md.verbose = verbose('convergence',True,'solution',True)
++	md = solve(md,'Transient')
++
++	#save the results
++	results[i] = md.results.TransientSolution()
++	
++	#Now plot vx and delta surface 
++	if (i == 0 or i == 2):
++		plotmodel(md,'data',(md.results.TransientSolution().Vx),'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIP100000.exp','title','','xlabel','','ylabel','Velocity (m/yr)','linewidth',3,'grid','on','unit','km','ylim',[91,100])
++	elif (i == 1 or i == 3):
++		plotmodel(md,'data',(md.results.TransientSolution().Vx),'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIP100000.exp','title','','xlabel','','ylabel','Velocity (m/yr)','linewidth',3,'grid','on','unit','km','ylim',[185,200])
++	
++	if printingflag:
++		#set(gcf,'Color','w')
++		if i == 0:
++			printmodel('ismipfHOvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfHOvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 1:
++			printmodel('ismipfHOvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfHOvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 2:
++			printmodel('ismipfFSvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfFSvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 3:
++			printmodel('ismipfFSvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfFSvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		
++	
++
++	plotmodel(md,'data',(md.results.TransientSolution().Surface)-md.geometry.surface,'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIP100000.exp','title','','xlabel','','ylabel','Surface (m)','linewidth',3,'grid','on','unit','km','ylim',[-30,50])
++	if printingflag:
++		#set(gcf,'Color','w')
++		if i == 0:
++			printmodel('ismipfHOdeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfHOdeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 1:
++			printmodel('ismipfHOdeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfHOdeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 2:
++			printmodel('ismipfFSdeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfFSdeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		elif i == 3:
++			printmodel('ismipfFSdeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off')
++			#system(['mv ismipfFSdeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF'])
++		
++	
++
++
++#Fields and tolerances to track changes
++field_names = [
++	'VxPattynFrozen','VyPattynFrozen','VzPattynFrozen','SurfacePattynFrozen',
++	'VxPattynSliding','VyPattynSliding','VzPattynSliding','SurfacePattynSliding',
++	'VxStokesFrozen','VyStokesFrozen','VzStokesFrozen','SurfaceStokesFrozen',
++	'VxStokesSliding','VyStokesSliding','VzStokesSliding','SurfaceStokesSliding'
++]
++field_tolerances = [
++	1e-10,1e-09,1e-09,1e-10,
++	1e-10,1e-09,1e-09,1e-10,
++	1e-08,1e-09,1e-08,1e-09,
++	1e-08,2e-09,1e-08,1e-09
++]
++field_values = []
++for i in range(4):
++	result = results[i]
++	field_values += ([
++		result.Vx,
++		result.Vy,
++		result.Vz,
++		result.Surface] - md.geometry.surface)
++
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 22271)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 22272)
+@@ -44,7 +44,7 @@
+ 		data=np.array(data)
+ 		scale = options.getfieldvalue('scale')
+ 		if np.size(data) > 1 and np.ndim(data) > 1 and np.size(data,0)==timeserieslength:
+-			data[0:-1,:] = scale*data[0:-1,:]
++			data[0:-2,:] = scale*data[0:-2,:]
+ 		else:
+ 			data  = scale*data
+ 	if np.size(data) > 1 and np.size(data,0)==timeserieslength:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22272-22273.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22272-22273.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22272-22273.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 22272)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 22273)
+@@ -44,7 +44,7 @@
+ 		data=np.array(data)
+ 		scale = options.getfieldvalue('scale')
+ 		if np.size(data) > 1 and np.ndim(data) > 1 and np.size(data,0)==timeserieslength:
+-			data[0:-2,:] = scale*data[0:-2,:]
++			data[0:-1,:] = scale*data[0:-1,:]
+ 		else:
+ 			data  = scale*data
+ 	if np.size(data) > 1 and np.size(data,0)==timeserieslength:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22273-22274.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22273-22274.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22273-22274.diff	(revision 22755)
@@ -0,0 +1,260 @@
+Index: ../trunk-jpl/test/NightlyRun/test703.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test703.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test703.py	(revision 22274)
+@@ -0,0 +1,168 @@
++#Test Name: FlowbandFSsheetshelfTrans
++import numpy as np
++from scipy.interpolate import interp1d
++from model import  * 
++from setflowequation import  * 
++from solve import  *
++from NowickiProfile import *
++from bamgflowband import *
++from paterson import *
++
++#mesh parameters
++x = np.arange(-5,5.5,.5).T
++[b,h,sea] = NowickiProfile(x)
++x = x * 10**3
++h = h * 10**3
++b = (b-sea) * 10**3
++
++#for i in x:
++	#print i
++
++#for i in b:
++	#print '%.12f' % i
++#for i in h:
++	#print '%.11f' % i
++#print '%.12f' % sea
++
++#print x
++#print h
++#print b
++#print sea
++
++#mesh domain
++md = bamgflowband(model(),x,b+h,b,'hmax',150.)
++print md.mesh.numberofvertices
++
++#geometry
++md.geometry.surface = interp1d(x,b+h)(md.mesh.x)
++md.geometry.base = interp1d(x,b)(md.mesh.x)
++md.geometry.thickness = md.geometry.surface - md.geometry.base
++
++#mask
++md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices,))
++md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0
++md.mask.groundedice_levelset = np.zeros((md.mesh.numberofvertices,)) - 0.5
++
++#materials
++md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++
++#friction
++md.friction.coefficient = np.zeros((md.mesh.numberofvertices,))
++md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20
++md.friction.p = np.ones((md.mesh.numberofelements,))
++md.friction.q = np.ones((md.mesh.numberofelements,))
++
++#boundary conditions
++md.stressbalance.spcvx = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvy = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.spcvz = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.stressbalance.referential = float('NaN') * np.ones((md.mesh.numberofvertices,6))
++md.stressbalance.loadingforce = 0 * np.ones((md.mesh.numberofvertices,3))
++md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 800.
++md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
++
++#print md.stressbalance.referential
++#print md.stressbalance.loadingforce
++#print md.stressbalance.spcvx
++#print md.stressbalance.spcvy
++#print md.stressbalance.spcvz
++#print np.shape(md.stressbalance.referential)
++#print np.shape(md.stressbalance.loadingforce)
++#print np.shape(md.stressbalance.spcvx)
++#print np.shape(md.stressbalance.spcvy)
++#print np.shape(md.stressbalance.spcvz)
++
++#Misc
++md = setflowequation(md,'FS','all')
++md.flowequation.fe_FS = 'TaylorHood'
++md.stressbalance.abstol = float('NaN')
++md.miscellaneous.name = 'test703'
++
++#Transient settings
++md.timestepping.time_step = 0.000001
++md.timestepping.final_time = 0.000005
++md.stressbalance.shelf_dampening = 1.
++md.smb.mass_balance = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.groundedice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices,))
++md.basalforcings.geothermalflux = np.zeros((md.mesh.numberofvertices,))
++posb = np.intersect1d(np.where(md.mesh.x > 0.), np.where(md.mesh.vertexonbase))
++md.basalforcings.groundedice_melting_rate[posb] = 18.
++md.basalforcings.floatingice_melting_rate[posb] = 18.
++md.initialization.vx = np.zeros((md.mesh.numberofvertices,))
++md.initialization.vy = np.zeros((md.mesh.numberofvertices,))
++md.initialization.pressure = np.zeros((md.mesh.numberofvertices,))
++md.masstransport.spcthickness = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.thermal.spctemperature = float('NaN') * np.ones((md.mesh.numberofvertices,))
++md.transient.isthermal = 0
++md.masstransport.isfreesurface = 1
++
++#Go solve
++md.cluster = generic('np',3)
++md.stressbalance.shelf_dampening = 1
++md1 = solve(md,'Transient')
++
++md.stressbalance.shelf_dampening = 0
++md = solve(md,'Transient')
++
++#Fields and tolerances to track changes
++field_names      = [
++	'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3',
++	'Vx1_damp','Vy1_damp','Vel1_damp','Pressure1_damp','Bed1_damp','Surface1_damp','Thickness1_damp',
++	'Vx2_damp','Vy2_damp','Vel2_damp','Pressure2_damp','Bed2_damp','Surface2_damp','Thickness2_damp',
++	'Vx3_damp','Vy3_damp','Vel3_damp','Pressure3_damp','Bed3_damp','Surface3_damp','Thickness3_damp']
++field_tolerances = [
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	2e-08,2e-08,2e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10,
++	5e-08,5e-08,5e-08,1e-08,1e-10,1e-10,1e-10]
++field_values = [
++	md.results.TransientSolution[0].Vx,
++	md.results.TransientSolution[0].Vy,
++	md.results.TransientSolution[0].Vel,
++	md.results.TransientSolution[0].Pressure,
++	md.results.TransientSolution[0].Base,
++	md.results.TransientSolution[0].Surface,
++	md.results.TransientSolution[0].Thickness,
++	md.results.TransientSolution[1].Vx,
++	md.results.TransientSolution[1].Vy,
++	md.results.TransientSolution[1].Vel,
++	md.results.TransientSolution[1].Pressure,
++	md.results.TransientSolution[1].Base,
++	md.results.TransientSolution[1].Surface,
++	md.results.TransientSolution[1].Thickness,
++	md.results.TransientSolution[2].Vx,
++	md.results.TransientSolution[2].Vy,
++	md.results.TransientSolution[2].Vel,
++	md.results.TransientSolution[2].Pressure,
++	md.results.TransientSolution[2].Base,
++	md.results.TransientSolution[2].Surface,
++	md.results.TransientSolution[2].Thickness,
++	md1.results.TransientSolution[0].Vx,
++	md1.results.TransientSolution[0].Vy,
++	md1.results.TransientSolution[0].Vel,
++	md1.results.TransientSolution[0].Pressure,
++	md1.results.TransientSolution[0].Base,
++	md1.results.TransientSolution[0].Surface,
++	md1.results.TransientSolution[0].Thickness,
++	md1.results.TransientSolution[1].Vx,
++	md1.results.TransientSolution[1].Vy,
++	md1.results.TransientSolution[1].Vel,
++	md1.results.TransientSolution[1].Pressure,
++	md1.results.TransientSolution[1].Base,
++	md1.results.TransientSolution[1].Surface,
++	md1.results.TransientSolution[1].Thickness,
++	md1.results.TransientSolution[2].Vx,
++	md1.results.TransientSolution[2].Vy,
++	md1.results.TransientSolution[2].Vel,
++	md1.results.TransientSolution[2].Pressure,
++	md1.results.TransientSolution[2].Base,
++	md1.results.TransientSolution[2].Surface,
++	md1.results.TransientSolution[2].Thickness,
++	]
+Index: ../trunk-jpl/src/m/mesh/bamgflowband.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamgflowband.py	(revision 22273)
++++ ../trunk-jpl/src/m/mesh/bamgflowband.py	(revision 22274)
+@@ -24,12 +24,12 @@
+ 
+ 	#Write expfile with domain outline
+ 	A = OrderedDict()
+-	A.x = np.concatenate((x,np.flipud(x),[x[0]]))
+-	A.y = np.concatenate((base,np.flipud(surf),[base[0]]))
+-	A.nods = np.size(A.x)
++	A['x'] = np.concatenate((x,np.flipud(x),[x[0]]))
++	A['y'] = np.concatenate((base,np.flipud(surf),[base[0]]))
++	A['nods'] = np.size(A['x'])
+ 
+ 	#markers:
+-	m                          	= np.ones((np.size(A.x)-1,))	# base        = 1
++	m                          	= np.ones((np.size(A['x'])-1,))	# base        = 1
+ 	m[np.size(x) - 1]                	= 2			# right side  = 2
+ 	m[np.size(x):2 * np.size(x) - 1] 	= 3			# top surface = 3
+ 	m[2 * np.size(x) - 1]              	= 4			# left side   = 4
+Index: ../trunk-jpl/jenkins/linux64_ross_test
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_test	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_ross_test	(revision 22274)
+@@ -63,5 +63,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 243 701 702 435"
++PYTHON_NROPTIONS="--exclude 243 701 702 703 435"
+ MATLAB_NROPTIONS="'exclude',[243,701,702,435]"
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22274)
+@@ -48,5 +48,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-#PYTHON_NROPTIONS="--exclude 119 243 514 701 702 435"
++#PYTHON_NROPTIONS="--exclude 119 243 514 701 702 703 435"
+ #MATLAB_NROPTIONS="'exclude',[119,243,514,701,702,435,IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_caladan
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_caladan	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_caladan	(revision 22274)
+@@ -63,5 +63,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 701 702 435"
++PYTHON_NROPTIONS="--exclude 701 702 435 703"
+ MATLAB_NROPTIONS="'exclude',[701,702,435]"
+Index: ../trunk-jpl/jenkins/linux64_ross
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_ross	(revision 22274)
+@@ -66,5 +66,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 243 701 702 435"
++PYTHON_NROPTIONS="--exclude 702 703"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_python
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_python	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_ross_python	(revision 22274)
+@@ -57,5 +57,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 243 701 702 435"
++PYTHON_NROPTIONS="--exclude 702 703"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22273)
++++ ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22274)
+@@ -61,5 +61,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS=""
++PYTHON_NROPTIONS="--exclude 702 703"
+ MATLAB_NROPTIONS="'exclude',[243,701,702,435]"
Index: /issm/oecreview/Archive/21724-22754/ISSM-22274-22275.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22274-22275.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22274-22275.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22274)
++++ ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22275)
+@@ -61,5 +61,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 702 703"
++PYTHON_NROPTIONS="--exclude 243 701 702 703"
+ MATLAB_NROPTIONS="'exclude',[243,701,702,435]"
+Index: ../trunk-jpl/jenkins/linux64_ross
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross	(revision 22274)
++++ ../trunk-jpl/jenkins/linux64_ross	(revision 22275)
+@@ -66,5 +66,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 702 703"
++PYTHON_NROPTIONS="--exclude 243 701 702 703"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
+Index: ../trunk-jpl/jenkins/linux64_ross_python
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_python	(revision 22274)
++++ ../trunk-jpl/jenkins/linux64_ross_python	(revision 22275)
+@@ -57,5 +57,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-PYTHON_NROPTIONS="--exclude 702 703"
++PYTHON_NROPTIONS="--exclude 243 701 702 703"
+ MATLAB_NROPTIONS="'exclude',[IdFromString('Dakota')]"
Index: /issm/oecreview/Archive/21724-22754/ISSM-22275-22276.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22275-22276.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22275-22276.diff	(revision 22755)
@@ -0,0 +1,438 @@
+Index: ../trunk-jpl/src/m/classes/amrneopz.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrneopz.m	(revision 22275)
++++ ../trunk-jpl/src/m/classes/amrneopz.m	(revision 22276)
+@@ -6,7 +6,6 @@
+ classdef amrneopz
+ 	properties (SetAccess=public) 
+ 		level_max						= 0; 
+-		radius_level_max				= 0;
+ 		gradation						= 0;
+       lag 								= 0;
+ 		groundingline_distance 		= 0;
+@@ -56,6 +55,9 @@
+ 			%	end
+          %end
+ 
++			%2017 November 24th
++			%radius_level_max was deleted!
++
+       %end% }}}
+    end
+ 	methods
+@@ -71,7 +73,6 @@
+ 
+ 			%filter parameters:
+ 			self.level_max			= 2;
+-			self.radius_level_max= 10000;
+ 			self.gradation			= 1.5;
+ 			self.lag					= 1.1;
+ 		
+@@ -87,7 +88,6 @@
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+ 			md = checkfield(md,'fieldname','amr.level_max','numel',[1],'>=',0,'<=',5);
+-			md = checkfield(md,'fieldname','amr.radius_level_max','numel',[1],'>',0,'NaN',1,'Inf',1);
+    		md = checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5.0,'NaN',1);
+    		md = checkfield(md,'fieldname','amr.lag','numel',[1],'>=',1.0,'<=',3.0,'NaN',1);
+          md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+@@ -102,7 +102,6 @@
+ 			disp(sprintf('   amrneopz parameters:'));
+ 
+ 			fielddisplay(self,'level_max',['maximum refinement level (1, 2, 3, 4 or 5)']);
+-			fielddisplay(self,'radius_level_max',['region which will be refined with level_max [ m ]']);
+ 			fielddisplay(self,'gradation',['maximum ratio between two adjacent edges']);
+ 			fielddisplay(self,'lag',['lag used to unrefine the elements']);
+          fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
+@@ -117,7 +116,6 @@
+ 
+ 			WriteData(fid,prefix,'name','md.amr.type','data',2,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','level_max','format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','amr','fieldname','radius_level_max','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','gradation','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','lag','format','Double');
+          WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
+@@ -131,7 +129,6 @@
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+ 			writejsdouble(fid,[modelname '.amr.level_max'],self.level_max);
+-			writejsdouble(fid,[modelname '.amr.radius_level_max'],self.radius_level_max);
+ 			writejsdouble(fid,[modelname '.amr.gradation'],self.gradation);
+ 			writejsdouble(fid,[modelname '.amr.lag'],self.lag);
+ 			writejsdouble(fid,[modelname '.amr.groundingline_distance'],self.groundingline_distance);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22275)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22276)
+@@ -129,7 +129,6 @@
+ 			#ifdef _HAVE_NEOPZ_
+ 			case AmrNeopzEnum:
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.radius_level_max",AmrRadiusLevelMaxEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.gradation",AmrGradationEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.lag",AmrLagEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22275)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22276)
+@@ -7,6 +7,8 @@
+ #include <iostream>
+ #include <fstream>
+ #include <string>
++#include <climits>
++#include <cfloat>
+ 
+ /*NeoPZ includes*/
+ /*REAL and STATE definitions, NeoPZ variables itapopo should be read by NeoPZ's config.h*/
+@@ -47,24 +49,23 @@
+ 
+ public:
+ 	/*Public attributes{{{*/
+-	/* Filter (distance to the points)
++	/* 
+ 	 * to refine:
+-	 * radius_h = initial_radius * gradation ^ (level_max-h)
+-	 * to unirefine
+-	 * radius_h = lag * initial_radius * gradation ^ (level_max-h)
++	 * distance_h = initial_distance * gradation ^ (level_max-h)
++	 * to unrefine:
++	 * distance_h = lag * initial_distance * gradation ^ (level_max-h)
+ 	 */
+ 	int refinement_type;						//0 uniform (faster); 1 refpattern  
+ 	int level_max;								//max level of refinement
+-	double radius_level_max;				//initial radius which in the elements will be refined with level max
+ 	double gradation;							//geometric progression ratio to calculate radius of level h
+ 	double lag;									//lag used in the unrefine process
+ 	/*Target and estimators*/
+-	double groundingline_distance;		//if groundingline_distance>initial_radius, groundingline_distance will be used instead initial_radius		
+-	double icefront_distance;				//if icefront_distance>initial_radius, icefront_distance will be used instead initial_radius
++	double groundingline_distance;		//all elements with distance from grounding line <= groundingline_distance will be refined
++	double icefront_distance;				//all elements with distance from ice front <= icefront_distance will be refined
+ 	double thicknesserror_threshold;		//if ==0, it will not be used
++	double thicknesserror_maximum;		//max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+ 	double deviatoricerror_threshold;	//if ==0, it will not be used
+-	double max_deviatoricerror;			// Max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+-	double max_thicknesserror;				// Max value of the error estimator; in general, it is defined in the first time step. Attention with restart
++	double deviatoricerror_maximum;		//max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+ 	/*}}}*/
+ 	/*Public methods{{{*/
+ 	/* Constructor, destructor etc*/
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22275)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22276)
+@@ -31,7 +31,6 @@
+ 	this->previousmesh					= new TPZGeoMesh(*cp.previousmesh);
+ 	this->refinement_type				= cp.refinement_type;
+ 	this->level_max						= cp.level_max;
+-	this->radius_level_max				= cp.radius_level_max;
+ 	this->gradation						= cp.gradation;
+ 	this->lag								= cp.lag;
+    this->groundingline_distance		= cp.groundingline_distance;
+@@ -38,8 +37,8 @@
+ 	this->icefront_distance				= cp.icefront_distance;
+ 	this->thicknesserror_threshold	= cp.thicknesserror_threshold;
+ 	this->deviatoricerror_threshold	= cp.deviatoricerror_threshold;
+-	this->max_deviatoricerror			= cp.max_deviatoricerror;
+-	this->max_thicknesserror			= cp.max_thicknesserror;
++	this->deviatoricerror_maximum		= cp.deviatoricerror_maximum;
++	this->thicknesserror_maximum		= cp.thicknesserror_maximum;
+ 	this->sid2index.clear();
+ 	this->sid2index.resize(cp.sid2index.size());
+ 	for(int i=0;i<cp.sid2index.size();i++) this->sid2index[i]=cp.sid2index[i];
+@@ -65,7 +64,6 @@
+ 	if(this->previousmesh)  delete this->previousmesh;
+ 	this->refinement_type				= -1;
+ 	this->level_max						= -1;
+-	this->radius_level_max				= -1;
+ 	this->gradation						= -1;
+ 	this->lag								= -1;
+    this->groundingline_distance		= -1;
+@@ -72,8 +70,8 @@
+ 	this->icefront_distance				= -1;
+ 	this->thicknesserror_threshold	= -1;
+ 	this->deviatoricerror_threshold	= -1;
+-	this->max_deviatoricerror			= -1;
+-	this->max_thicknesserror			= -1;
++	this->deviatoricerror_maximum		= -1;
++	this->thicknesserror_maximum		= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -86,7 +84,6 @@
+ 	this->previousmesh					= NULL;
+ 	this->refinement_type				= -1;
+ 	this->level_max						= -1;
+-	this->radius_level_max				= -1;
+ 	this->gradation						= -1;
+ 	this->lag								= -1;
+    this->groundingline_distance		= -1;
+@@ -93,8 +90,8 @@
+ 	this->icefront_distance				= -1;
+ 	this->thicknesserror_threshold	= -1;
+ 	this->deviatoricerror_threshold	= -1;
+-	this->max_deviatoricerror			= -1;
+-	this->max_thicknesserror			= -1;
++	this->deviatoricerror_maximum		= -1;
++	this->thicknesserror_maximum		= -1;
+ 	this->sid2index.clear();
+ 	this->index2sid.clear();
+ 	this->specialelementsindex.clear();
+@@ -138,10 +135,10 @@
+ 	int criteria						=-1;
+ 	int numberofcriteria				=-1;
+ 	int nconformelements				= this->sid2index.size();
+-	double gl_radius_h				=-1;
+-	double gl_radius_hmax			= std::max(this->radius_level_max,this->groundingline_distance);
+-	double if_radius_h				=-1;
+-	double if_radius_hmax			= std::max(this->radius_level_max,this->icefront_distance);
++	double gl_distance_h				=-1;
++	double gl_distance_hmax			= this->groundingline_distance;
++	double if_distance_h				=-1;
++	double if_distance_hmax			= this->icefront_distance;
+ 	double gl_groupdistance			=-1;
+ 	double if_groupdistance			=-1;
+ 	double d_maxerror					=-1;
+@@ -162,11 +159,11 @@
+ 	/*}}}*/
+ 
+ 	/*Calculate the maximum of the estimators, if requested{{{*/
+-	if(this->deviatoricerror_threshold>0 && this->max_deviatoricerror<0){ 
+-		for(int i=0;i<nconformelements;i++) this->max_deviatoricerror=max(this->max_deviatoricerror,deviatoricerror[i]);
++	if(this->deviatoricerror_threshold>0 && this->deviatoricerror_maximum<DBL_EPSILON){ 
++		for(int i=0;i<nconformelements;i++) this->deviatoricerror_maximum=max(this->deviatoricerror_maximum,deviatoricerror[i]);
+ 	}
+-	if(this->thicknesserror_threshold>0 && this->max_thicknesserror<0){
+-		for(int i=0;i<nconformelements;i++) this->max_thicknesserror=max(this->max_thicknesserror,thicknesserror[i]);
++	if(this->thicknesserror_threshold>0 && this->thicknesserror_maximum<DBL_EPSILON){
++		for(int i=0;i<nconformelements;i++) this->thicknesserror_maximum=max(this->thicknesserror_maximum,thicknesserror[i]);
+ 	}
+ 	/*}}}*/
+ 
+@@ -180,10 +177,10 @@
+ 		sons.clear();
+ 		gmesh->Element(this->specialelementsindex[i])->Father()->GetHigherSubElements(sons);
+ 		/*Limits*/
+-		gl_radius_h = gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
+-		if_radius_h = if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
+-		d_maxerror	= this->deviatoricerror_threshold*this->max_deviatoricerror;
+-		t_maxerror	= this->thicknesserror_threshold*this->max_thicknesserror;
++		gl_distance_h	= gl_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
++		if_distance_h	= if_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(this->specialelementsindex[i])->Level());
++		d_maxerror		= this->deviatoricerror_threshold*this->deviatoricerror_maximum;
++		t_maxerror		= this->thicknesserror_threshold*this->thicknesserror_maximum;
+ 		/*Calculate the distance and error of the group (sons)*/
+ 		gl_groupdistance=INFINITY;if_groupdistance=INFINITY;deviatoric_grouperror=0;thickness_grouperror=0;
+ 		for(int s=0;s<sons.size();s++){
+@@ -195,10 +192,10 @@
+ 			if(this->thicknesserror_threshold>0)	thickness_grouperror+=thicknesserror[sid];
+ 		}	
+ 		criteria=0;
+-		if(this->groundingline_distance>0		&& gl_groupdistance<gl_radius_h)			criteria++;
+-		if(this->icefront_distance>0				&& if_groupdistance<if_radius_h)			criteria++;
+-		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror>d_maxerror)	criteria++;
+-		if(this->thicknesserror_threshold>0		&& thickness_grouperror>t_maxerror)		criteria++;
++		if(this->groundingline_distance>0		&& gl_groupdistance<gl_distance_h+DBL_EPSILON)		criteria++;
++		if(this->icefront_distance>0				&& if_groupdistance<if_distance_h+DBL_EPSILON)		criteria++;
++		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror>d_maxerror-DBL_EPSILON)	criteria++;
++		if(this->thicknesserror_threshold>0		&& thickness_grouperror>t_maxerror-DBL_EPSILON)		criteria++;
+ 		/*Finally, it keeps the father index if it must be refine*/
+ 		if(criteria) index.push_back(gmesh->Element(this->specialelementsindex[i])->FatherIndex());
+ 	}
+@@ -229,10 +226,10 @@
+ 		if(gmesh->Element(i)->Level()==0) continue;
+ 		if(!gmesh->Element(i)->Father()) _error_("father is NULL!\n");
+ 		/*Limits with lag*/
+-		gl_radius_h = this->lag*gl_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
+-		if_radius_h = this->lag*if_radius_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
+-		d_maxerror	= 0.05*this->max_deviatoricerror;//itapopo definir melhor
+-		t_maxerror	= 0.05*this->max_thicknesserror;//itapopo definir melhor
++		gl_distance_h = this->lag*gl_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
++		if_distance_h = this->lag*if_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
++		d_maxerror	  = 0.01*this->deviatoricerror_maximum;//itapopo definir melhor 0.05
++		t_maxerror	  = 0.01*this->thicknesserror_maximum;//itapopo definir melhor 0.05
+ 		/*Get the sons of the father (sibilings)*/	
+ 		sons.clear();
+ 		gmesh->Element(i)->Father()->GetHigherSubElements(sons);
+@@ -251,10 +248,10 @@
+ 		}
+ 		/*Verify the criteria*/
+ 		criteria=0;
+-		if(this->groundingline_distance>0		&& gl_groupdistance>gl_radius_h)			criteria++;
+-		if(this->icefront_distance>0				&& if_groupdistance>if_radius_h)			criteria++;
+-		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror<d_maxerror)	criteria++;
+-		if(this->thicknesserror_threshold>0		&& thickness_grouperror<t_maxerror)		criteria++;
++		if(this->groundingline_distance>0		&& gl_groupdistance>gl_distance_h-DBL_EPSILON)		criteria++;
++		if(this->icefront_distance>0				&& if_groupdistance>if_distance_h-DBL_EPSILON)		criteria++;
++		if(this->deviatoricerror_threshold>0	&& deviatoric_grouperror<d_maxerror+DBL_EPSILON)	criteria++;
++		if(this->thicknesserror_threshold>0		&& thickness_grouperror<t_maxerror+DBL_EPSILON)		criteria++;
+ 		/*Now, if the group attends the criteria, unrefine it*/
+ 		if(criteria==numberofcriteria){ 
+ 			gmesh->Element(i)->Father()->ResetSubElements(); count++;
+@@ -279,17 +276,17 @@
+ 		/*Verify if this element has solutions*/
+ 		sid=this->index2sid[gmesh->Element(i)->Index()];
+ 		if(sid<0) continue;
+-		/*Filter: set the region/radius for level h*/
+-		gl_radius_h	= gl_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1, current element level is <level_max
+-		if_radius_h	= if_radius_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1, current element level is <level_max
+-		d_maxerror	= this->deviatoricerror_threshold*this->max_deviatoricerror;
+-		t_maxerror	= this->thicknesserror_threshold*this->max_thicknesserror;
++		/*Set the distance for level h*/
++		gl_distance_h	= gl_distance_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1: current element level is <level_max
++		if_distance_h	= if_distance_hmax*std::pow(this->gradation,this->level_max-(gmesh->Element(i)->Level()+1));//+1: current element level is <level_max
++		d_maxerror		= this->deviatoricerror_threshold*this->deviatoricerror_maximum;
++		t_maxerror		= this->thicknesserror_threshold*this->thicknesserror_maximum;
+ 		/*Verify distance and error of the element, if requested*/
+ 		criteria=0;
+-		if(this->groundingline_distance>0		&& gl_distance[sid]<gl_radius_h)		criteria++; 
+-		if(this->icefront_distance>0				&& if_distance[sid]<if_radius_h)		criteria++; 
+-		if(this->deviatoricerror_threshold>0	&& deviatoricerror[sid]>d_maxerror)	criteria++; 
+-		if(this->thicknesserror_threshold>0		&& thicknesserror[sid]>t_maxerror)	criteria++; 
++		if(this->groundingline_distance>0		&& gl_distance[sid]<gl_distance_h+DBL_EPSILON)	criteria++; 
++		if(this->icefront_distance>0				&& if_distance[sid]<if_distance_h+DBL_EPSILON)	criteria++; 
++		if(this->deviatoricerror_threshold>0	&& deviatoricerror[sid]>d_maxerror-DBL_EPSILON)	criteria++; 
++		if(this->thicknesserror_threshold>0		&& thicknesserror[sid]>t_maxerror-DBL_EPSILON)	criteria++; 
+ 		/*Now, if it attends any criterion, keep the element index to refine in next step*/
+ 		if(criteria)index.push_back(i);
+ 	}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22275)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22276)
+@@ -878,7 +878,6 @@
+ 	AmrNeopzEnum,
+ 	AmrLevelMaxEnum,
+ 	AmrLagEnum,
+-	AmrRadiusLevelMaxEnum,
+ 	AmrBamgEnum,
+ 	AmrHminEnum,
+ 	AmrHmaxEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22275)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22276)
+@@ -851,7 +851,6 @@
+ 		case AmrNeopzEnum : return "AmrNeopz";
+ 		case AmrLevelMaxEnum : return "AmrLevelMax";
+ 		case AmrLagEnum : return "AmrLag";
+-		case AmrRadiusLevelMaxEnum : return "AmrRadiusLevelMax";
+ 		case AmrBamgEnum : return "AmrBamg";
+ 		case AmrHminEnum : return "AmrHmin";
+ 		case AmrHmaxEnum : return "AmrHmax";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22275)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22276)
+@@ -865,10 +865,10 @@
+ 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+ 	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
++	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+-	      else if (strcmp(name,"AmrRadiusLevelMax")==0) return AmrRadiusLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+@@ -885,8 +885,10 @@
+ 	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
++	      else if (strcmp(name,"AmrThicknessErrorMaximum")==0) return AmrThicknessErrorMaximumEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorMaximum")==0) return AmrDeviatoricErrorMaximumEnum;
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+-	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
+-	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++	      if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
++	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
++	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22275)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22276)
+@@ -4793,7 +4793,7 @@
+ 		if(resolution/maxlength[i]>0.85){
+ 			for(int j=0;j<elementswidth;j++){
+ 				vid=index[i*elementswidth+j]-1;//Matlab to C indexing
+-				if(error_vertices[vid]>0.005*maxerror) refine=true;//itapopo must be better defined
++				if(error_vertices[vid]>0.01*maxerror) refine=true;//itapopo must be better defined
+ 			}
+ 		}
+ 		/*Now, fill the hmaxvertices if requested*/	  
+@@ -4933,14 +4933,6 @@
+ 	IssmDouble* y									= NULL;
+ 	IssmDouble* z									= NULL;
+ 	int* elements									= NULL;
+-	int level_max									= -1;
+-	IssmDouble radius_level_max				= -1;
+-	IssmDouble gradation							= -1;
+-	IssmDouble lag									= -1;
+-	IssmDouble groundingline_distance		= -1;
+-	IssmDouble icefront_distance				= -1;
+-   IssmDouble thicknesserror_threshold		= -1;
+-	IssmDouble deviatoricerror_threshold	= -1;
+ 	
+ 	/*Initialize field as NULL for now*/
+ 	this->amr = NULL;
+@@ -4948,16 +4940,6 @@
+ 	/*Get vertices coordinates of the coarse mesh (father mesh)*/
+ 	/*elements comes in Matlab indexing*/
+ 	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elements);
+-	
+-	/*Get amr parameters*/
+-	this->parameters->FindParam(&level_max,AmrLevelMaxEnum);
+-	this->parameters->FindParam(&radius_level_max,AmrRadiusLevelMaxEnum);
+-	this->parameters->FindParam(&gradation,AmrGradationEnum);
+-	this->parameters->FindParam(&lag,AmrLagEnum);
+-	this->parameters->FindParam(&groundingline_distance,AmrGroundingLineDistanceEnum);
+-	this->parameters->FindParam(&icefront_distance,AmrIceFrontDistanceEnum);
+-	this->parameters->FindParam(&thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
+-	this->parameters->FindParam(&deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
+ 
+ 	/*Create initial mesh (coarse mesh) in neopz data structure*/ 
+ 	/*Just CPU #0 should keep AMR object*/
+@@ -4964,15 +4946,17 @@
+    /*Initialize refinement pattern*/
+ 	this->SetRefPatterns();
+ 	this->amr = new AdaptiveMeshRefinement();
+-	this->amr->refinement_type					= 1;//1 is refpattern; 0 is uniform (faster) 
+-	this->amr->level_max							= level_max;
+-	this->amr->radius_level_max				= radius_level_max;
+-	this->amr->gradation							= gradation;
+-	this->amr->lag									= lag;
+-	this->amr->groundingline_distance		= groundingline_distance;
+-	this->amr->icefront_distance				= icefront_distance;
+-	this->amr->thicknesserror_threshold		= thicknesserror_threshold;
+-	this->amr->deviatoricerror_threshold	= deviatoricerror_threshold;
++	this->amr->refinement_type=1;//1 is refpattern; 0 is uniform (faster) 
++	/*Get amr parameters*/
++	this->parameters->FindParam(&this->amr->level_max,AmrLevelMaxEnum);
++	this->parameters->FindParam(&this->amr->gradation,AmrGradationEnum);
++	this->parameters->FindParam(&this->amr->lag,AmrLagEnum);
++	this->parameters->FindParam(&this->amr->groundingline_distance,AmrGroundingLineDistanceEnum);
++	this->parameters->FindParam(&this->amr->icefront_distance,AmrIceFrontDistanceEnum);
++	this->parameters->FindParam(&this->amr->thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&this->amr->thicknesserror_maximum,AmrThicknessErrorMaximumEnum);
++	this->parameters->FindParam(&this->amr->deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
++	this->parameters->FindParam(&this->amr->deviatoricerror_maximum,AmrDeviatoricErrorMaximumEnum);
+ 	if(my_rank==0){ 
+ 		this->amr->CreateInitialMesh(numberofvertices,numberofelements,x,y,elements);
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22276-22277.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22276-22277.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22276-22277.diff	(revision 22755)
@@ -0,0 +1,939 @@
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22277)
+@@ -13,6 +13,7 @@
+ 
+ 	/*intermediary*/
+ 	int  hydrology_model;
++	int  solution_type;
+ 	bool save_results;
+ 	bool modify_loads=true;
+ 	bool isefficientlayer;
+@@ -20,7 +21,8 @@
+ 	/*first recover parameters common to all solutions*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
+-	
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);	
++
+ 	if(VerboseSolution()) _printf0_("   computing water heads\n");
+ 			
+ 	/*first compute slopes: */
+@@ -51,31 +53,76 @@
+ 
+ 	/*Using the double continuum model*/
+ 	else if (hydrology_model==HydrologydcEnum){
+-		InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+-		femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-		if (isefficientlayer){
+-			InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+-			InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
+-		}
+-		
+-		/*Proceed now to heads computations*/
+-		solutionsequence_hydro_nonlinear(femmodel);
++		/*intermediary: */
++		int        step,hydroslices;
++		int        numoutputs;
++		char       **requested_outputs = NULL;
++		IssmDouble time,init_time,hydrotime,yts;
++		IssmDouble dt,hydrodt;
+ 
+-		if(save_results){
+-			if(VerboseSolution()) _printf0_("   saving results \n");
+-			if(isefficientlayer){
+-				int outputs[9] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum,EffectivePressureEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],9);
++		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++		femmodel->parameters->FindParam(&step,StepEnum);
++		femmodel->parameters->FindParam(&time,TimeEnum);
++		femmodel->parameters->FindParam(&hydroslices,HydrologydcStepsPerStepEnum);
++		femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
++		init_time = time-dt; //getting the time back to the start of the timestep
++		hydrotime=init_time;
++		hydrodt=dt/hydroslices; //computing hydro dt from dt and a divider
++		femmodel->parameters->AddObject(new DoubleParam(HydrologydcHydrodtEnum,hydrodt));
++		femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum);
++		if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum);
++
++		if(dt>0){
++			if(hydroslices>1){
++				int trans_input[1]={HydrologydcStackedNEnum};
++				femmodel->InitTransientOutputx(&trans_input[0],1);
+ 			}
+-			else{
+-				int outputs[3] = {SedimentHeadEnum,SedimentHeadResidualEnum,EffectivePressureEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
++			while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
++				hydrotime+=hydrodt;
++				InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
++				femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++				if (isefficientlayer){
++					InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
++					InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
++				}
++				/*Proceed now to heads computations*/
++				solutionsequence_hydro_nonlinear(femmodel);
++				if (hydroslices>1){
++					int output[1]={EffectivePressureEnum};
++					femmodel->StackTransientOutputx(&output[0],hydrotime,1);
++				}
+ 			}
+-			/*unload results*/
+-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-			OutputResultsx(femmodel);
++			if(hydroslices>1){
++				int output[1]={HydrologydcStackedNEnum};
++				femmodel->AverageTransientOutputx(&output[0],init_time,1);
++			}		
+ 		}
++		else{
++			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
++			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++			if (isefficientlayer){
++				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
++				InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
++			}
++			/*Proceed now to heads computations*/
++			solutionsequence_hydro_nonlinear(femmodel);
++		}
++		if(save_results){
++			if(VerboseSolution()) _printf0_("   saving results \n");
++			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++			/*unload results removed 23/11 needs checking*/
++			/* if(VerboseSolution()) _printf0_("   saving temporary results\n"); */
++			/* OutputResultsx(femmodel); */
++		}
++		/*Free ressources:*/	
++		if(numoutputs){
++			for(int i=0;i<numoutputs;i++){
++				xDelete<char>(requested_outputs[i]);
++			} 
++			xDelete<char*>(requested_outputs);
++		}
+ 	}
++	
+ 
+ 	else if (hydrology_model==HydrologysommersEnum){	
+ 		femmodel->SetCurrentConfiguration(HydrologySommersAnalysisEnum);	
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22277)
+@@ -4457,6 +4457,84 @@
+ 	if(VerboseSolution()) _printf0_("   Number of active nodes L2 Projection: "<< counter <<"\n");
+ }
+ /*}}}*/
++void FemModel::InitTransientOutputx(int* input_enum,int numoutputs){ /*{{{*/
++
++  for(int i=0;i<numoutputs;i++){
++		if(input_enum[i]<0){
++			_error_("Can't deal with non enum fields for result Stack");
++		}
++		else{
++			for(int j=0;j<elements->Size();j++){
++				TransientInput* transient_input = new TransientInput(input_enum[i]);
++				/*Intermediaries*/
++				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
++				transient_input->Configure(element->parameters);
++				element->inputs->AddInput(transient_input);
++			}
++		}
++	}
++}
++/*}}}*/
++void FemModel::StackTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs){ /*{{{*/
++
++  for(int i=0;i<numoutputs;i++){
++		if(input_enum[i]<0){
++			_error_("Can't deal with non enum fields for result Stack");
++		}
++		else{
++			for(int j=0;j<elements->Size();j++){
++				/*Intermediaries*/
++				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
++				TransientInput* stacking_input=NULL;
++				Input* input=element->inputs->GetInput(HydrologydcStackedNEnum); _assert_(input);
++				Input* input_to_stack=element->GetInput(input_enum[i]); _assert_(input_to_stack);
++				stacking_input=dynamic_cast<TransientInput*>(input);
++
++				int  numvertices = element->GetNumberOfVertices();
++				IssmDouble* N=xNew<IssmDouble>(numvertices);
++				element->GetInputListOnVertices(&N[0],input_enum[i]);
++				switch(element->ObjectEnum()){
++				case TriaEnum:
++					stacking_input->AddTimeInput(new TriaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					break;
++				case PentaEnum:
++					stacking_input->AddTimeInput(new PentaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					break;
++				case TetraEnum:
++					stacking_input->AddTimeInput(new TetraInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					break;
++				default: _error_("Not implemented yet");
++				}
++				xDelete<IssmDouble>(N);
++			}
++		}
++	}
++}
++/*}}}*/
++void FemModel::AverageTransientOutputx(int* input_enum,IssmDouble init_time,int numoutputs){ /*{{{*/
++	IssmDouble* time_averaged=NULL;
++  for(int i=0;i<numoutputs;i++){
++		if(input_enum[i]<0){
++			_error_("Can't deal with non enum fields for result Stack");
++		}
++		else{
++			for(int j=0;j<elements->Size();j++){
++				/*Intermediaries*/
++				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
++				int  numvertices = element->GetNumberOfVertices();
++				//xNew<IssmDouble>(numvertices);
++
++				Input* input=element->inputs->GetInput(input_enum[i]); _assert_(input);
++				TransientInput* stacking_input=NULL;
++				stacking_input=dynamic_cast<TransientInput*>(input);
++				stacking_input->GetInputAverageOnTimes(&time_averaged, init_time);
++
++				element->AddInput(TimeAverageEffectivePressureEnum,time_averaged,P1Enum);
++			}
++		}
++	}
++}
++/*}}}*/
+ #ifdef _HAVE_JAVASCRIPT_ 
+ FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
+ 	/*configuration: */
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22277)
+@@ -1772,7 +1772,7 @@
+ 				name==HydrologydcEplThicknessEnum ||
+ 				name==HydrologydcMaskEplactiveNodeEnum ||
+ 				name==HydrologyHeadEnum ||
+-	         name==HydrologyHeadOldEnum ||		
++				name==HydrologyHeadOldEnum ||		
+ 				name==StressbalanceConvergenceNumStepsEnum || 
+ 				name==MeshVertexonbaseEnum || 
+ 				name==FrictionPEnum ||
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22277)
+@@ -271,8 +271,8 @@
+ void TransientInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){/*{{{*/
+ 
+ 	int         i;
+-	IssmDouble *times  = NULL;
+-	IssmDouble *values = NULL;
++	IssmDouble* times  = NULL;
++	IssmDouble* values = NULL;
+ 	int         numsteps;
+ 	bool        iscurrenttime_included = false;
+ 
+@@ -290,9 +290,7 @@
+ 	values=xNew<IssmDouble>(numsteps);
+ 
+ 	for(i=0;i<numsteps;i++){
+-
+ 		if((iscurrenttime_included==false) && (i==(numsteps-1))){
+-
+ 			/*Retrieve interpolated values for current time step: */
+ 			Input* input=GetTimeInput(currenttime);
+ 			input->GetInputAverage(values+i);
+@@ -310,7 +308,34 @@
+ 	*pnumtimes=numtimesteps;
+ }
+ /*}}}*/
++void TransientInput::GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time){/*{{{*/
+ 
++	IssmDouble  time;
++	IssmDouble  preceding_time;
++	IssmDouble  values[3] = {0.0,0.0,0.0};
++
++	for(int i=0;i<this->numtimesteps;i++){
++		time						 = this->timesteps[i];
++		if(i==0){
++			preceding_time = init_time;
++		}
++		else{
++			preceding_time = this->timesteps[i-1];
++		}
++		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
++		int					numnodes = input->NumberofNodes(input->interpolation_type);
++		for(int j=0;j<numnodes;j++){
++			values[j]+=(input->values[j]*(time-preceding_time));
++		}
++	}
++	for(int j	=	0;j<3;j++){
++		values[j]/=(this->timesteps[this->numtimesteps-1]-init_time);
++		//printf("final value is %e\n",values[j]);
++	}
++	*pvalues=values;
++}
++/*}}}*/
++
+ /*Intermediary*/
+ void TransientInput::AddTimeInput(Input* input,IssmDouble time){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22276)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22277)
+@@ -63,6 +63,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,IssmDouble time);
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
++		void GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time);
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		IssmDouble  GetTimeByOffset(int offset);
+ 		Input* GetTimeInput(IssmDouble time);
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22277)
+@@ -222,6 +222,7 @@
+ 	TriaRef::GetInputDerivativeValue(p,&values[0],xyz_list,(GaussTria*)gauss,this->interpolation_type);
+ }
+ /*}}}*/
++
+ void TriaInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){/*{{{*/
+ 
+ 	IssmDouble* outvalues=NULL;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22276)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22277)
+@@ -148,6 +148,9 @@
+ 		void UpdateConstraintsExtrudeFromBasex();
+ 		void UpdateConstraintsExtrudeFromTopx();
+ 		void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count);
++		void InitTransientOutputx(int* input_enum, int numoutputs);
++		void StackTransientOutputx(int* input_enum, IssmDouble hydrotime, int numoutputs);
++		void AverageTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
+ 
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22277)
+@@ -18,11 +18,14 @@
+ 	int         unconfined_flag;
+ 	int         penalty_lock;
+ 	int         hydro_maxiter;
++	int         hydroslices;
++	int         numoutputs;
+ 	bool        isefficientlayer;
+ 	IssmDouble  penalty_factor;
+ 	IssmDouble  rel_tol;
+ 	IssmDouble  leakagefactor;
+ 	IssmDouble  sedimentlimit;
++	char**      requestedoutputs = NULL;
+ 
+ 	/*retrieve some parameters: */
+ 	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+@@ -32,11 +35,12 @@
+ 
+ 	iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" );
+ 	iomodel->FetchData(&transfer_flag,      "md.hydrology.transfer_flag" );
+-	iomodel->FetchData(&unconfined_flag,      "md.hydrology.unconfined_flag" );
++	iomodel->FetchData(&unconfined_flag,    "md.hydrology.unconfined_flag" );
++	iomodel->FetchData(&penalty_lock,       "md.hydrology.penalty_lock" );
++	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
++	iomodel->FetchData(&hydroslices,        "md.hydrology.steps_per_step");
++	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
+ 	iomodel->FetchData(&penalty_factor,     "md.hydrology.penalty_factor" );
+-	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
+-	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
+-	iomodel->FetchData(&penalty_lock,       "md.hydrology.penalty_lock" );
+ 	iomodel->FetchData(&rel_tol,            "md.hydrology.rel_tol" );
+ 
+ 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+@@ -45,6 +49,8 @@
+ 	parameters->AddObject(new IntParam(HydrologydcUnconfinedFlagEnum,unconfined_flag));
+ 	parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
+ 	parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
++	parameters->AddObject(new IntParam(HydrologydcStepsPerStepEnum,hydroslices));
++
+ 	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
+ 	parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor));
+ 	parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol));
+@@ -56,6 +62,11 @@
+ 		iomodel->FetchData(&sedimentlimit,"md.hydrology.sedimentlimit");
+ 		parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit));
+ 	}
++  /*Requested outputs*/
++  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
++  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
++  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
++  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
+ }/*}}}*/
+ 
+ void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+@@ -95,6 +106,7 @@
+ 
+ 	if(isefficientlayer){
+ 		iomodel->FetchDataToInput(elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);
++		iomodel->FetchDataToInput(elements,"md.initialization.epl_head",EplHeadEnum);
+ 	}
+ }/*}}}*/
+ 
+@@ -208,11 +220,13 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement ->GetVerticesCoordinates(&xyz_list);
+-	basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
++	//basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
++	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
+ 	basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+ 	Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum);
+ 	Input* base_input     = basalelement->GetInput(BaseEnum);
++	Input* old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);                  _assert_(old_wh_input);
+ 
+ 	/*Transfer related Inputs*/
+ 	if(isefficientlayer){
+@@ -231,6 +245,7 @@
+ 
+ 		/*Diffusivity*/
+ 		D_scalar=sediment_transmitivity*gauss->weight*Jdet;
++		//D_scalar=gauss->weight*Jdet;
+ 		if(dt!=0.) D_scalar=D_scalar*dt;
+ 		D[0][0]=D_scalar;
+ 		D[1][1]=D_scalar;
+@@ -244,6 +259,7 @@
+ 		if(dt!=0.){
+ 			basalelement->NodalFunctions(&basis[0],gauss);
+ 			D_scalar=sediment_storing*gauss->weight*Jdet;
++			//D_scalar=(sediment_storing/sediment_transmitivity)*gauss->weight*Jdet;
+ 			TripleMultiply(basis,numnodes,1,0,
+ 										 &D_scalar,1,1,0,
+ 										 basis,1,numnodes,0,
+@@ -256,6 +272,7 @@
+ 					transfer=GetHydrologyKMatrixTransfer(basalelement);
+ 					basalelement->NodalFunctions(&basis[0],gauss);
+ 					D_scalar=dt*transfer*gauss->weight*Jdet;
++					//D_scalar=dt*(transfer/sediment_transmitivity)*gauss->weight*Jdet;
+ 					TripleMultiply(basis,numnodes,1,0,
+ 												 &D_scalar,1,1,0,
+ 												 basis,1,numnodes,0,
+@@ -269,7 +286,10 @@
+ 	xDelete<IssmDouble>(B);
+ 	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	if(domaintype!=Domain2DhorizontalEnum){
++		basalelement->DeleteMaterials(); 
++		delete basalelement;
++	}
+ 	return Ke;
+ }/*}}}*/
+ 
+@@ -295,7 +315,7 @@
+ 	/*Intermediaries */
+ 	bool       active_element,isefficientlayer;
+ 	IssmDouble dt,scalar,sediment_storing;
+-	IssmDouble water_head;
++	IssmDouble water_head,sediment_transmitivity;
+ 	IssmDouble water_load,transfer;
+ 	IssmDouble Jdet;
+ 
+@@ -312,7 +332,8 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
++	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
++	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
+ 	basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 
+ 	Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum);
+@@ -319,6 +340,7 @@
+ 	Input* epl_head_input = basalelement->GetInput(EplHeadEnum);
+ 	Input* base_input		  = basalelement->GetInput(BaseEnum);
+ 	Input* water_input	  = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input);
++	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+ 
+ 	if(dt!= 0.){
+ 		old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);                  _assert_(old_wh_input);
+@@ -334,11 +356,13 @@
+ 		gauss->GaussPoint(ig);
+ 		basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		basalelement->NodalFunctions(basis,gauss);
++		sediment_transmitivity = SedimentTransmitivity(basalelement,gauss,sed_head_input,base_input,SedTrans_input);
+ 
+ 		/*Loading term*/
+ 		if(!isefficientlayer){
+ 			water_input->GetInputValue(&water_load,gauss);
+ 			scalar = Jdet*gauss->weight*(water_load);
++			//scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
+ 			if(dt!=0.) scalar = scalar*dt;
+ 			for(int i=0;i<numnodes;i++){
+ 				pe->values[i]+=scalar*basis[i];
+@@ -350,6 +374,7 @@
+ 			if(!active_element){
+ 				water_input->GetInputValue(&water_load,gauss);
+ 				scalar = Jdet*gauss->weight*(water_load);
++				//scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
+ 				if(dt!=0.) scalar = scalar*dt;
+ 				for(int i=0;i<numnodes;i++){
+ 					pe->values[i]+=scalar*basis[i];
+@@ -371,10 +396,12 @@
+ 					transfer=0.0;
+ 				}
+ 				scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer));
++				//scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer))/sediment_transmitivity;
+ 				for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
+ 			}
+ 			else{
+ 				scalar = Jdet*gauss->weight*(water_head*sediment_storing);
++				//scalar = Jdet*gauss->weight*(water_head*sediment_storing)/sediment_transmitivity;
+ 				for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
+ 			}
+ 		}
+@@ -383,7 +410,10 @@
+ 	xDelete<IssmDouble>(xyz_list);
+ 	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	if(domaintype!=Domain2DhorizontalEnum){
++		basalelement->DeleteMaterials(); 
++		delete basalelement;
++	}
+ 	return pe;
+ }/*}}}*/
+ 
+@@ -469,6 +499,7 @@
+ 		IssmDouble  penalty_factor,kmax,kappa,h_max;
+ 		IssmDouble* thickness = xNew<IssmDouble>(numnodes);
+ 		IssmDouble* base      = xNew<IssmDouble>(numnodes);
++		IssmDouble* transmitivity = xNew<IssmDouble>(numnodes);
+ 
+ 		basalelement->FindParam(&kmax,HydrologySedimentKmaxEnum);
+ 		basalelement->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
+@@ -478,7 +509,7 @@
+ 		
+ 		basalelement->GetInputListOnVertices(thickness,ThicknessEnum);
+ 		basalelement->GetInputListOnVertices(base,BaseEnum);
+-
++		basalelement->GetInputListOnVertices(transmitivity,HydrologydcSedimentTransmitivityEnum);
+ 		kappa=kmax*pow(10.,penalty_factor);
+ 
+ 		for(int i=0;i<numnodes;i++){
+@@ -485,6 +516,7 @@
+ 			GetHydrologyDCInefficientHmax(&h_max,basalelement,basalelement->GetNode(i));
+ 			if(values[i]>h_max) {
+ 				residual[i] = kappa*(values[i]-h_max);
++				//residual[i] = kappa*(values[i]-h_max)*transmitivity[i];
+ 			}
+ 			else{
+ 				residual[i] = 0.;
+@@ -494,13 +526,14 @@
+ 			pressure[i]=(rho_ice*g*thickness[i])-(rho_freshwater*g*(values[i]-base[i]));
+ 		}
+ 		xDelete<IssmDouble>(thickness);
++		xDelete<IssmDouble>(transmitivity);
+ 		xDelete<IssmDouble>(base);
+ 	}
+ 
+ 	/*Add input to the element: */
+ 	element->AddBasalInput(SedimentHeadEnum,values,P1Enum);
++	element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);
+ 	element->AddBasalInput(SedimentHeadResidualEnum,residual,P1Enum);
+-	element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);
+ 
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(values);
+@@ -507,7 +540,10 @@
+ 	xDelete<IssmDouble>(residual);
+ 	xDelete<IssmDouble>(pressure);
+ 	xDelete<int>(doflist);
+-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	if(domaintype!=Domain2DhorizontalEnum){
++		basalelement->DeleteMaterials(); 
++		delete basalelement;
++	}
+ }/*}}}*/
+ 
+ void HydrologyDCInefficientAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
+@@ -519,7 +555,7 @@
+ 	int unconf_scheme;
+ 	IssmDouble expfac; 
+ 	IssmDouble sediment_storing;
+-	IssmDouble storing;
++	IssmDouble storing,yield;
+ 	IssmDouble base_elev,prestep_head,water_sheet;
+ 	IssmDouble rho_freshwater           = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
+ 	IssmDouble g                        = element->GetMaterialParameter(ConstantsGEnum);
+@@ -537,11 +573,17 @@
+ 		sed_head_input->GetInputValue(&prestep_head,gauss);
+ 		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
+ 
++		/* if (water_sheet<sediment_thickness){ */
++		/* 	sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); */
++		/* } */
++		/* else{ */
++		/* 	sediment_storing=sediment_porosity; */
++		/* } */
+ 		storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
+-	
+-		//	using logistic function for heavyside approximation
++		//using logistic function for heavyside approximation
+ 		expfac=10.;
+-		sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
++		yield=sediment_porosity;
++		sediment_storing=yield+(storing-yield)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
+ 		break;
+ 	default:
+ 		_error_("UnconfinedFlag is 0 or 1");
+@@ -567,13 +609,13 @@
+ 		base_input->GetInputValue(&base_elev,gauss);
+ 		sed_head_input->GetInputValue(&prestep_head,gauss);
+ 		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
++		
++		//min definition of the if test
++		sediment_transmitivity=FullLayer_transmitivity*min(water_sheet/sediment_thickness,1.);
++		if (sediment_transmitivity==0){
++			sediment_transmitivity=1.0e-20;
++		}
+ 
+-		if (water_sheet<=sediment_thickness){
+-			sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
+-		}
+-		else{
+-			sediment_transmitivity=FullLayer_transmitivity;
+-		}
+ 		break;
+ 	default:
+ 		_error_("UnconfinedFlag is 0 or 1");
+@@ -631,7 +673,7 @@
+ 		break;
+ 	case 1:
+ 		element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
+-		transfer=leakage; 
++		transfer=+leakage; 
+ 		break;
+ 	default:
+ 		_error_("no case higher than 1 for the Transfer method");
+@@ -655,8 +697,11 @@
+ 	case 1:
+ 		_assert_(epl_head_input);
+ 		epl_head_input->GetInputValue(&epl_head,gauss);
++		if (element->Id()==42){
++			printf("epl head in sed Pvec transfer is %f\n",epl_head);
++		}
+ 		element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
+-		transfer=epl_head*leakage;
++		transfer=+epl_head*leakage;
+ 		break;
+ 	default:
+ 		_error_("no case higher than 1 for the Transfer method");
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22277)
+@@ -222,7 +222,8 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
++	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
++	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
+ 
+ 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
+ 	Input* epl_head_input	= basalelement->GetInput(EplHeadEnum);  _assert_(epl_head_input);
+@@ -331,7 +332,8 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);	
++	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);	
++	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
+ 
+ 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
+ 	Input* sed_head_input  = basalelement->GetInput(SedimentHeadEnum); _assert_(sed_head_input);
+@@ -554,7 +556,8 @@
+ 
+ 		Input* 	active_element_input=element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);		
+ 		active_element_input->GetInputValue(&active_element);
+-		element->FindParam(&dt,TimesteppingTimeStepEnum);
++		//element->FindParam(&dt,TimesteppingTimeStepEnum);
++		element ->FindParam(&dt,HydrologydcHydrodtEnum);
+ 	
+ 		/*For now, assuming just one way to compute EPL thickness*/
+ 		IssmDouble gravity          = element->GetMaterialParameter(ConstantsGEnum);
+@@ -724,7 +727,10 @@
+ 	}
+ 	basalelement->AddInput(HydrologydcEplThicknessEnum,epl_thickness,basalelement->GetElementType());
+ 
+-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	if(domaintype!=Domain2DhorizontalEnum){
++		basalelement->DeleteMaterials(); 
++		delete basalelement;
++	}
+ 	xDelete<IssmDouble>(epl_thickness);
+ 	xDelete<IssmDouble>(old_active);
+ 	xDelete<IssmDouble>(sedhead);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22277)
+@@ -136,15 +136,22 @@
+ 		case HydrologyshreveEnum : return "Hydrologyshreve";
+ 		case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization";
+ 		case HydrologydcEnum : return "Hydrologydc";
++		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
++		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
++		case HydrologydcHydrodtEnum : return "HydrologydcHydrodt";
++		case HydrologydcStepsPerStepEnum : return "HydrologydcStepsPerStep";
+ 		case SedimentHeadEnum : return "SedimentHead";
+ 		case SedimentHeadOldEnum : return "SedimentHeadOld";
+ 		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
+ 		case EffectivePressureEnum : return "EffectivePressure";
++		case TimeAverageEffectivePressureEnum : return "TimeAverageEffectivePressure";
+ 		case EplHeadEnum : return "EplHead";
+ 		case EplHeadOldEnum : return "EplHeadOld";
+ 		case EplHeadSlopeXEnum : return "EplHeadSlopeX";
+ 		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
+ 		case EplZigZagCounterEnum : return "EplZigZagCounter";
++		case MeanEffectivePressureEnum : return "MeanEffectivePressure";
++		case HydrologydcStackedNEnum : return "HydrologydcStackedN";
+ 		case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
+ 		case HydrologydcRelTolEnum : return "HydrologydcRelTol";
+ 		case HydrologydcSedimentCompressibilityEnum : return "HydrologydcSedimentCompressibility";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22276)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22277)
+@@ -139,15 +139,22 @@
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
++	      if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
++	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
++	      else if (strcmp(name,"HydrologydcHydrodt")==0) return HydrologydcHydrodtEnum;
++	      else if (strcmp(name,"HydrologydcStepsPerStep")==0) return HydrologydcStepsPerStepEnum;
++	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+ 	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+ 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+ 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
++	      else if (strcmp(name,"TimeAverageEffectivePressure")==0) return TimeAverageEffectivePressureEnum;
+ 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
+ 	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+ 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
++	      else if (strcmp(name,"MeanEffectivePressure")==0) return MeanEffectivePressureEnum;
++	      else if (strcmp(name,"HydrologydcStackedN")==0) return HydrologydcStackedNEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentCompressibility")==0) return HydrologydcSedimentCompressibilityEnum;
+@@ -252,7 +259,10 @@
+ 	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+ 	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+-	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+ 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
+ 	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
+ 	      else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
+@@ -259,10 +269,7 @@
+ 	      else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum;
+ 	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"Damage")==0) return DamageEnum;
++	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+ 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+@@ -375,7 +382,10 @@
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+-	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+ 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+@@ -382,10 +392,7 @@
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
++	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+ 	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
+ 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+ 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+@@ -498,7 +505,10 @@
+ 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+-	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+ 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+ 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
+ 	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
+@@ -505,10 +515,7 @@
+ 	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
+ 	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
+ 	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
++	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+@@ -621,7 +628,10 @@
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+-	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+ 	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
+ 	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
+@@ -628,10 +638,7 @@
+ 	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+ 	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+ 	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
++	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+ 	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+@@ -744,7 +751,10 @@
+ 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+-	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+@@ -751,10 +761,7 @@
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"Fset")==0) return FsetEnum;
++	      else if (strcmp(name,"Fset")==0) return FsetEnum;
+ 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
+ 	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+@@ -867,7 +874,10 @@
+ 	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+ 	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+-	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
+@@ -874,10 +884,7 @@
+ 	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+ 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+ 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
++	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
+ 	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
+ 	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+@@ -990,7 +997,10 @@
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+ 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+-	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+ 	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
+ 	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
+@@ -997,10 +1007,7 @@
+ 	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
++	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22276)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22277)
+@@ -130,15 +130,22 @@
+ 	HydrologyshreveEnum,
+ 	HydrologyshreveStabilizationEnum,
+ 	HydrologydcEnum,
++	HydrologyNumRequestedOutputsEnum,
++	HydrologyRequestedOutputsEnum,
++	HydrologydcHydrodtEnum,
++	HydrologydcStepsPerStepEnum,
+ 	SedimentHeadEnum,
+ 	SedimentHeadOldEnum,
+ 	SedimentHeadResidualEnum,
+ 	EffectivePressureEnum,
++	TimeAverageEffectivePressureEnum,
+ 	EplHeadEnum,
+ 	EplHeadOldEnum,
+ 	EplHeadSlopeXEnum,
+ 	EplHeadSlopeYEnum,
+ 	EplZigZagCounterEnum,
++	MeanEffectivePressureEnum,
++	HydrologydcStackedNEnum,
+ 	HydrologydcMaxIterEnum,
+ 	HydrologydcRelTolEnum,
+ 	HydrologydcSedimentCompressibilityEnum,
+@@ -181,7 +188,7 @@
+ 	HydrologyMoulinInputEnum,
+ 	HydrologyReynoldsEnum,
+ 	HydrologyNeumannfluxEnum,
+-   HydrologyRelaxationEnum,
++	HydrologyRelaxationEnum,
+ 	HydrologyBasalFluxEnum,
+ 	HydrologyStorageEnum,
+ 	DegreeOfChannelizationEnum,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22277-22278.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22277-22278.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22277-22278.diff	(revision 22755)
@@ -0,0 +1,216 @@
+Index: ../trunk-jpl/src/m/classes/hydrologydc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22277)
++++ ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22278)
+@@ -11,6 +11,7 @@
+ 		penalty_lock             = 0;
+ 		rel_tol                  = 0;
+ 		max_iter                 = 0;
++    steps_per_step           = 0;
+ 		sedimentlimit_flag       = 0;
+ 		sedimentlimit            = 0;
+ 		transfer_flag            = 0;
+@@ -17,6 +18,7 @@
+ 		unconfined_flag          = 0;
+ 		leakage_factor           = 0;
+ 		basal_moulin_input       = NaN;
++    requested_outputs        = {};
+ 
+ 		spcsediment_head         = NaN;
+ 		sediment_transmitivity   = NaN;
+@@ -58,6 +60,17 @@
+ 			end
+ 		end 
+ 		% }}}
++    function list = defaultoutputs(self,md) % {{{
++        list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
++        if self.isefficientlayer,
++            list=[list,{'EplHead','HydrologydcMaskEplactiveNode', ...
++                        'HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
++        end
++        if self.steps_per_step>1,
++            list = [list,'TimeAverageEffectivePressure'];
++        end
++    end % }}}    
++
+ 		function self = initialize(self,md) % {{{
+ 			if isnan(self.basal_moulin_input),
+ 				self.basal_moulin_input=zeros(md.mesh.numberofvertices,1);
+@@ -76,12 +89,15 @@
+ 			self.penalty_lock             = 0;
+ 			self.rel_tol                  = 1.0e-06;
+ 			self.max_iter                 = 100;
++			self.steps_per_step           = 1;
+ 			self.sedimentlimit_flag       = 0;
+ 			self.sedimentlimit            = 0;
+ 			self.transfer_flag            = 0;
+ 			self.unconfined_flag          = 0;
+ 			self.leakage_factor           = 10.0;
++      self.requested_outputs        = {'default'};
+ 
++
+ 			self.sediment_compressibility = 1.0e-08;
+ 			self.sediment_porosity        = 0.4;
+ 			self.sediment_thickness       = 20.0;
+@@ -112,9 +128,11 @@
+ 			md = checkfield(md,'fieldname','hydrology.penalty_lock','>=',0,'numel',1);
+ 			md = checkfield(md,'fieldname','hydrology.rel_tol','>',0,'numel',1);
+ 			md = checkfield(md,'fieldname','hydrology.max_iter','>',0,'numel',1);
++			md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0,'numel',1);
+ 			md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]);
+ 			md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0 1]);
++      md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
+ 			if self.sedimentlimit_flag==1,
+ 				md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1);
+ 			end
+@@ -158,6 +176,7 @@
+ 			fielddisplay(self,'penalty_lock','stabilize unstable constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
+ 			fielddisplay(self,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]');
+ 			fielddisplay(self,'max_iter','maximum number of nonlinear iteration');
++			fielddisplay(self,'steps_per_step','number of hydrology steps per timestep');
+ 			fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer');
+ 			disp(sprintf('%55s  0: no limit',' '));
+ 			disp(sprintf('%55s  1: user defined: %s',' ','sedimentlimit'));
+@@ -175,6 +194,7 @@
+ 			fielddisplay(self,'unconfined_flag',['Do you want unconfined scheme to be used (transitory)']);
+ 			disp(sprintf('%55s  0: confined only',' '));
+ 			disp(sprintf('%55s  1: confined unconfined'));
++      fielddisplay(self,'requested_outputs','additional outputs requested');
+ 			fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]');
+ 			disp(sprintf('   - for the sediment layer'));
+ 			fielddisplay(self,'spcsediment_head','sediment water head constraints (NaN means no constraint) [m above MSL]');
+@@ -210,6 +230,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','unconfined_flag','format','Integer');
+@@ -239,6 +260,13 @@
+ 				WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double');
+ 				WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer');
+ 			end
++      outputs = self.requested_outputs;
++      pos  = find(ismember(outputs,'default'));
++      if ~isempty(pos),
++        outputs(pos) = [];  %remove 'default' from outputs
++        outputs      = [outputs defaultoutputs(self,md)]; %add defaults
++      end
++      WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
+ 		end 
+ 
+ 		% }}}
+Index: ../trunk-jpl/src/m/classes/hydrologydc.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22277)
++++ ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22278)
+@@ -19,6 +19,7 @@
+ 		self.penalty_lock             = 0
+ 		self.rel_tol                  = 0
+ 		self.max_iter                 = 0
++		self.steps_per_step           = 0
+ 		self.sedimentlimit_flag       = 0
+ 		self.sedimentlimit            = 0
+ 		self.transfer_flag            = 0
+@@ -25,6 +26,7 @@
+ 		self.unconfined_flag          = 0
+ 		self.leakage_factor           = 0
+ 		self.basal_moulin_input       = float('NaN')
++		self.requested_outputs        = []
+ 
+ 		self.spcsediment_head         = float('NaN')
+ 		self.sediment_transmitivity   = float('NaN')
+@@ -32,7 +34,6 @@
+ 		self.sediment_porosity        = 0
+ 		self.sediment_thickness       = 0
+ 
+-
+ 		self.spcepl_head              = float('NaN')
+ 		self.mask_eplactive_node      = float('NaN')
+ 		self.epl_compressibility      = 0
+@@ -56,7 +57,9 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'penalty_lock','stabilize unstable constraints that keep zigzagging after n iteration (default is 0, no stabilization)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'max_iter','maximum number of nonlinear iteration'))
++		string="%s\n%s"%(string,fielddisplay(self,'steps_per_step','number of hydrology steps per time step')) 
+ 		string="%s\n%s"%(string,fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer'))
+ 		string="%s\n\t\t%s"%(string,'0: no limit')
+ 		string="%s\n\t\t%s"%(string,'1: user defined sedimentlimit')
+@@ -108,7 +111,6 @@
+ 		return self
+ 	#}}}
+ 	def setdefaultparameters(self): #{{{ 
+-
+ 		#Parameters from de Fleurian 2014
+ 		self.water_compressibility    = 5.04e-10
+ 		self.isefficientlayer         = 1
+@@ -116,11 +118,13 @@
+ 		self.penalty_lock             = 0
+ 		self.rel_tol                  = 1.0e-06
+ 		self.max_iter                 = 100
++		self.steps_per_step           = 1
+ 		self.sedimentlimit_flag       = 0
+ 		self.sedimentlimit            = 0
+ 		self.transfer_flag            = 0
+ 		self.unconfined_flag          = 0
+ 		self.leakage_factor           = 10.0
++		self.requested_outputs        = ['default']
+ 
+ 		self.sediment_compressibility = 1.0e-08
+ 		self.sediment_porosity        = 0.4
+@@ -138,6 +142,18 @@
+ 		
+ 		return self
+ 	# }}}
++
++	def defaultoutputs(self,md): # {{{
++		list = ['SedimentHead','SedimentHeadResidual','EffectivePressure']
++		if self.isefficientlayer==1:
++			list.extend(['EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'])
++		if self.steps_per_step>1:
++			list.extend(['TimeAverageEffectivePressure'])
++
++		return list
++
++	#}}}
++
+ 	def initialize(self,md): # {{{
+ 		if np.all(np.isnan(self.basal_moulin_input)):
+ 			self.basal_moulin_input=np.zeros((md.mesh.numberofvertices))
+@@ -157,9 +173,11 @@
+ 		md = checkfield(md,'fieldname','hydrology.penalty_lock','>=',0.,'numel',[1])
+ 		md = checkfield(md,'fieldname','hydrology.rel_tol','>',0.,'numel',[1])
+ 		md = checkfield(md,'fieldname','hydrology.max_iter','>',0.,'numel',[1])
++		md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0.,'numel',[1])
+ 		md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0,1,2,3])
+ 		md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
+ 
+ 		if self.sedimentlimit_flag==1:
+ 			md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0.,'numel',[1])
+@@ -195,6 +213,7 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double')
+ 		WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer')
++		WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','unconfined_flag','format','Integer')
+@@ -222,4 +241,12 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','epl_thick_comp','format','Integer')			
+ 			WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double')
+ 			WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer')
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray')
+ 	# }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22278-22279.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22278-22279.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22278-22279.diff	(revision 22755)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22278)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22279)
+@@ -4468,7 +4468,7 @@
+ 				TransientInput* transient_input = new TransientInput(input_enum[i]);
+ 				/*Intermediaries*/
+ 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+-				transient_input->Configure(element->parameters);
++				//transient_input->Configure(element->parameters);
+ 				element->inputs->AddInput(transient_input);
+ 			}
+ 		}
+@@ -4512,7 +4512,7 @@
+ }
+ /*}}}*/
+ void FemModel::AverageTransientOutputx(int* input_enum,IssmDouble init_time,int numoutputs){ /*{{{*/
+-	IssmDouble* time_averaged=NULL;
++
+   for(int i=0;i<numoutputs;i++){
+ 		if(input_enum[i]<0){
+ 			_error_("Can't deal with non enum fields for result Stack");
+@@ -4522,14 +4522,15 @@
+ 				/*Intermediaries*/
+ 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+ 				int  numvertices = element->GetNumberOfVertices();
+-				//xNew<IssmDouble>(numvertices);
++				IssmDouble* time_averaged=NULL;
+ 
+ 				Input* input=element->inputs->GetInput(input_enum[i]); _assert_(input);
+ 				TransientInput* stacking_input=NULL;
+ 				stacking_input=dynamic_cast<TransientInput*>(input);
+-				stacking_input->GetInputAverageOnTimes(&time_averaged, init_time);
++				stacking_input->GetInputAverageOnTimes(&time_averaged,init_time);
+ 
+-				element->AddInput(TimeAverageEffectivePressureEnum,time_averaged,P1Enum);
++				element->AddInput(TimeAverageEffectivePressureEnum,&time_averaged[0],P1Enum);
++				xDelete<IssmDouble>(time_averaged);
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22278)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22279)
+@@ -312,26 +312,30 @@
+ 
+ 	IssmDouble  time;
+ 	IssmDouble  preceding_time;
+-	IssmDouble  values[3] = {0.0,0.0,0.0};
++	IssmDouble* values= NULL;
+ 
++	values=xNew<IssmDouble>(3);
++
+ 	for(int i=0;i<this->numtimesteps;i++){
+ 		time						 = this->timesteps[i];
++		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
++		int					numnodes = input->NumberofNodes(input->interpolation_type);
+ 		if(i==0){
+ 			preceding_time = init_time;
++			for(int j=0;j<numnodes;j++){
++				values[j]=(input->values[j]*(time-preceding_time));
++			}
+ 		}
+ 		else{
+ 			preceding_time = this->timesteps[i-1];
++			for(int j=0;j<numnodes;j++){
++				values[j]+=(input->values[j]*(time-preceding_time));
++				if(i==this->numtimesteps-1){
++					values[j]=values[j]/(this->timesteps[this->numtimesteps-1]-init_time);
++				}
++			}
+ 		}
+-		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
+-		int					numnodes = input->NumberofNodes(input->interpolation_type);
+-		for(int j=0;j<numnodes;j++){
+-			values[j]+=(input->values[j]*(time-preceding_time));
+-		}
+ 	}
+-	for(int j	=	0;j<3;j++){
+-		values[j]/=(this->timesteps[this->numtimesteps-1]-init_time);
+-		//printf("final value is %e\n",values[j]);
+-	}
+ 	*pvalues=values;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22279-22280.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22279-22280.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22279-22280.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22279)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22280)
+@@ -132,9 +132,11 @@
+ 	outinput=new TransientInput();
+ 	outinput->enum_type=this->enum_type;
+ 	outinput->numtimesteps=this->numtimesteps;
+-	outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
+-	xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
+-	outinput->inputs=(Inputs*)this->inputs->SpawnSegInputs(index1,index2);
++	if(this->numtimesteps>0){
++		outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
++		xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
++		outinput->inputs=(Inputs*)this->inputs->SpawnSegInputs(index1,index2);
++	}
+ 	outinput->parameters=this->parameters;
+ 
+ 	/*Assign output*/
+@@ -151,9 +153,11 @@
+ 	outinput=new TransientInput();
+ 	outinput->enum_type=this->enum_type;
+ 	outinput->numtimesteps=this->numtimesteps;
+-	outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
+-	xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
+-	outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3);
++	if(this->numtimesteps>0){
++		outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
++		xMemCpy<IssmDouble>(outinput->timesteps,this->timesteps,this->numtimesteps);
++		outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3);
++	}
+ 	outinput->parameters=this->parameters;
+ 
+ 	/*Assign output*/
+@@ -315,7 +319,7 @@
+ 	IssmDouble* values= NULL;
+ 
+ 	values=xNew<IssmDouble>(3);
+-
++	
+ 	for(int i=0;i<this->numtimesteps;i++){
+ 		time						 = this->timesteps[i];
+ 		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22280-22281.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22280-22281.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22280-22281.diff	(revision 22755)
@@ -0,0 +1,153 @@
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22280)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22281)
+@@ -23,16 +23,13 @@
+ 	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);	
+ 
+-	if(VerboseSolution()) _printf0_("   computing water heads\n");
+-			
+-	/*first compute slopes: */
++	/*Using the Shreve based Model*/
+ 	if (hydrology_model==HydrologyshreveEnum){
++		if(VerboseSolution()) _printf0_("   computing water heads\n");
++		/*first compute slopes: */
+ 		surfaceslope_core(femmodel);
+ 		bedslope_core(femmodel);
+-	}
+-
+-	/*Using the Shreve based Model*/
+-	if (hydrology_model==HydrologyshreveEnum){
++		/*and then go to water column*/
+ 		if(VerboseSolution()) _printf0_("   computing water column\n");
+ 		femmodel->SetCurrentConfiguration(HydrologyShreveAnalysisEnum);
+ 		solutionsequence_nonlinear(femmodel,modify_loads);
+@@ -44,10 +41,6 @@
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+ 			int outputs[3] = {WatercolumnEnum,HydrologyWaterVxEnum,HydrologyWaterVyEnum};
+ 			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+-			
+-			/*unload results*/
+-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-			OutputResultsx(femmodel);
+ 		}
+ 	}
+ 
+@@ -55,7 +48,7 @@
+ 	else if (hydrology_model==HydrologydcEnum){
+ 		/*intermediary: */
+ 		int        step,hydroslices;
+-		int        numoutputs;
++		int        numoutputs=0;
+ 		char       **requested_outputs = NULL;
+ 		IssmDouble time,init_time,hydrotime,yts;
+ 		IssmDouble dt,hydrodt;
+@@ -110,15 +103,12 @@
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+ 			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-			/*unload results removed 23/11 needs checking*/
+-			/* if(VerboseSolution()) _printf0_("   saving temporary results\n"); */
+-			/* OutputResultsx(femmodel); */
+ 		}
+ 		/*Free ressources:*/	
+ 		if(numoutputs){
+ 			for(int i=0;i<numoutputs;i++){
+ 				xDelete<char>(requested_outputs[i]);
+-			} 
++			}
+ 			xDelete<char*>(requested_outputs);
+ 		}
+ 	}
+@@ -137,10 +127,6 @@
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+ 			int outputs[5] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum,DegreeOfChannelizationEnum};
+ 			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],5);
+-			
+-			/*unload results*/
+-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-			OutputResultsx(femmodel);
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22280)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22281)
+@@ -314,32 +314,60 @@
+ /*}}}*/
+ void TransientInput::GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time){/*{{{*/
+ 
+-	IssmDouble  time;
+-	IssmDouble  preceding_time;
++	int					numnodes;
++	IssmDouble  subtimestep;
+ 	IssmDouble* values= NULL;
++	Input* input=NULL;
+ 
+-	values=xNew<IssmDouble>(3);
+-	
++	/*Initialize numnode from transientinput out of time loop*/
+ 	for(int i=0;i<this->numtimesteps;i++){
+-		time						 = this->timesteps[i];
+-		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
+-		int					numnodes = input->NumberofNodes(input->interpolation_type);
++		/*First compute the lengt of the sub-timestep*/
+ 		if(i==0){
+-			preceding_time = init_time;
++			subtimestep = this->timesteps[i]-init_time;
++		}
++		else{
++			subtimestep = this->timesteps[i]-this->timesteps[i-1];
++		}	
++		/*Figure out type of input and get it*/
++		input = xDynamicCast<Input*>(this->inputs->GetObjectByOffset(i)); _assert_(input);
++		switch(input->ObjectEnum()){
++		case TriaInputEnum:{
++			TriaInput* triainput = xDynamicCast<TriaInput*>(this->inputs->GetObjectByOffset(i)); _assert_(triainput);
++			numnodes= triainput->NumberofNodes(triainput->interpolation_type);
++			values=xNewZeroInit<IssmDouble>(numnodes);
++			/*Sum the values weighted by their respective sub-timestep*/
+ 			for(int j=0;j<numnodes;j++){
+-				values[j]=(input->values[j]*(time-preceding_time));
++				values[j]+=(triainput->values[j]*subtimestep);
+ 			}
++			break;
+ 		}
+-		else{
+-			preceding_time = this->timesteps[i-1];
++		case PentaInputEnum:{
++			PentaInput*	pentainput = xDynamicCast<PentaInput*>(this->inputs->GetObjectByOffset(i)); _assert_(pentainput);
++			numnodes= pentainput->NumberofNodes(pentainput->interpolation_type);
++			values=xNewZeroInit<IssmDouble>(numnodes);
++			/*Sum the values weighted by their respective sub-timestep*/
+ 			for(int j=0;j<numnodes;j++){
+-				values[j]+=(input->values[j]*(time-preceding_time));
+-				if(i==this->numtimesteps-1){
+-					values[j]=values[j]/(this->timesteps[this->numtimesteps-1]-init_time);
+-				}
++				values[j]+=(pentainput->values[j]*subtimestep);
+ 			}
++			break;
+ 		}
++		case TetraInputEnum:{
++			TetraInput*	tetrainput = xDynamicCast<TetraInput*>(this->inputs->GetObjectByOffset(i)); _assert_(tetrainput);
++			numnodes= tetrainput->NumberofNodes(tetrainput->interpolation_type);
++			values=xNewZeroInit<IssmDouble>(numnodes);
++			/*Sum the values weighted by their respective sub-timestep*/
++			for(int j=0;j<numnodes;j++){
++				values[j]+=(tetrainput->values[j]*subtimestep);
++			}
++			break;
++		}
++		default: _error_("not implemented yet");
++		}
+ 	}
++	/*Compute the average based on the length of the full timestep*/
++	for(int j=0;j<numnodes;j++){
++		values[j]=values[j]/(this->timesteps[this->numtimesteps-1]-init_time);
++	}
+ 	*pvalues=values;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22281-22282.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22281-22282.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22281-22282.diff	(revision 22755)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22281)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22282)
+@@ -332,9 +332,11 @@
+ 		input = xDynamicCast<Input*>(this->inputs->GetObjectByOffset(i)); _assert_(input);
+ 		switch(input->ObjectEnum()){
+ 		case TriaInputEnum:{
+-			TriaInput* triainput = xDynamicCast<TriaInput*>(this->inputs->GetObjectByOffset(i)); _assert_(triainput);
+-			numnodes= triainput->NumberofNodes(triainput->interpolation_type);
+-			values=xNewZeroInit<IssmDouble>(numnodes);
++			TriaInput* triainput = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(triainput);
++			if(i==0){
++				numnodes= triainput->NumberofNodes(triainput->interpolation_type);
++				values=xNewZeroInit<IssmDouble>(numnodes);
++			}
+ 			/*Sum the values weighted by their respective sub-timestep*/
+ 			for(int j=0;j<numnodes;j++){
+ 				values[j]+=(triainput->values[j]*subtimestep);
+@@ -342,9 +344,11 @@
+ 			break;
+ 		}
+ 		case PentaInputEnum:{
+-			PentaInput*	pentainput = xDynamicCast<PentaInput*>(this->inputs->GetObjectByOffset(i)); _assert_(pentainput);
+-			numnodes= pentainput->NumberofNodes(pentainput->interpolation_type);
+-			values=xNewZeroInit<IssmDouble>(numnodes);
++			PentaInput*	pentainput = (PentaInput*)this->inputs->GetObjectByOffset(i); _assert_(pentainput);
++			if(i==0){
++				numnodes= pentainput->NumberofNodes(pentainput->interpolation_type);
++				values=xNewZeroInit<IssmDouble>(numnodes);
++			}
+ 			/*Sum the values weighted by their respective sub-timestep*/
+ 			for(int j=0;j<numnodes;j++){
+ 				values[j]+=(pentainput->values[j]*subtimestep);
+@@ -352,9 +356,11 @@
+ 			break;
+ 		}
+ 		case TetraInputEnum:{
+-			TetraInput*	tetrainput = xDynamicCast<TetraInput*>(this->inputs->GetObjectByOffset(i)); _assert_(tetrainput);
+-			numnodes= tetrainput->NumberofNodes(tetrainput->interpolation_type);
+-			values=xNewZeroInit<IssmDouble>(numnodes);
++			TetraInput*	tetrainput = (TetraInput*)this->inputs->GetObjectByOffset(i); _assert_(tetrainput);
++			if(i==0){
++				numnodes= tetrainput->NumberofNodes(tetrainput->interpolation_type);
++				values=xNewZeroInit<IssmDouble>(numnodes);
++			}
+ 			/*Sum the values weighted by their respective sub-timestep*/
+ 			for(int j=0;j<numnodes;j++){
+ 				values[j]+=(tetrainput->values[j]*subtimestep);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22282-22283.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22282-22283.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22282-22283.diff	(revision 22755)
@@ -0,0 +1,334 @@
+Index: ../trunk-jpl/src/m/classes/hydrologyshreve.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 22283)
+@@ -5,8 +5,9 @@
+ 
+ classdef hydrologyshreve
+ 	properties (SetAccess=public) 
+-		spcwatercolumn = NaN;
+-		stabilization  = 0;
++		spcwatercolumn     = NaN;
++		stabilization      = 0;
++    requested_outputs  = {};
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+@@ -21,10 +22,15 @@
+ 					error('constructor not supported');
+ 			end
+ 		end % }}}
++    function list = defaultoutputs(self,md) % {{{
++        list = {'Watercolumn','HydrologyWaterVx','HydrologyWaterVy'};
++    end % }}}    
++
+ 		function self = setdefaultparameters(self) % {{{
+ 
+ 			%Type of stabilization to use 0:nothing 1:artificial_diffusivity
+-			self.stabilization=1;
++			self.stabilization     = 1;
++      self.requested_outputs = {'default'};
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+@@ -40,6 +46,7 @@
+ 			disp(sprintf('   hydrologyshreve solution parameters:'));
+ 			fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]');
+ 			fielddisplay(self,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.');
++      fielddisplay(self,'requested_outputs','additional outputs requested');
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -46,6 +53,13 @@
+ 			WriteData(fid,prefix,'name','md.hydrology.model','data',2,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Double');
++      outputs = self.requested_outputs;
++      pos  = find(ismember(outputs,'default'));
++      if ~isempty(pos),
++        outputs(pos) = [];  %remove 'default' from outputs
++        outputs      = [outputs defaultoutputs(self,md)]; %add defaults
++      end
++      WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+Index: ../trunk-jpl/src/m/classes/hydrologysommers.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologysommers.py	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologysommers.py	(revision 22283)
+@@ -22,6 +22,7 @@
+ 		self.neumannflux     = float('NaN')
+ 		self.relaxation      = 0
+ 		self.storage         = 0
++		self.requested_outputs = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -41,6 +42,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'spchead','water head constraints (NaN means no constraint) (m)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'relaxation','under-relaxation coefficient for nonlinear iteration'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'storage','englacial storage coefficient (void ratio)'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 		return string
+ 		#}}}
+ 	def extrude(self,md): # {{{
+@@ -50,8 +52,14 @@
+ 		# Set under-relaxation parameter to be 1 (no under-relaxation of nonlinear iteration)	
+ 		self.relaxation=1
+ 		self.storage=0
++		self.requested_outputs=['default']
+ 		return self
+ 	#}}}
++	def defaultoutputs(self,md): # {{{
++		list = ['HydrologyHead','HydrologyGapHeight','EffectivePressure','HydrologyBasalFlux','DegreeOfChannelization']
++		return list
++	#}}}
++
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 		
+ 		#Early return
+@@ -69,6 +77,7 @@
+ 		md = checkfield(md,'fieldname','hydrology.spchead','size',[md.mesh.numberofvertices])
+          	md = checkfield(md,'fieldname','hydrology.relaxation','>=',0)	
+ 		md = checkfield(md,'fieldname','hydrology.storage','>=',0)
++		md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1)
+ 
+ 		return md
+ 	# }}}
+@@ -85,6 +94,13 @@
+ 		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2)
+ 		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','neumannflux','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1)
+-         	WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','relaxation','format','Double')
++		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','relaxation','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','storage','format','Double')
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/hydrologyshreve.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologyshreve.py	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologyshreve.py	(revision 22283)
+@@ -13,7 +13,7 @@
+ 	def __init__(self): # {{{
+ 		self.spcwatercolumn = float('NaN')
+ 		self.stabilization  = 0
+-
++		self.requested_outputs = []
+ 		#set defaults
+ 		self.setdefaultparameters()
+ 
+@@ -23,6 +23,7 @@
+ 		string='   hydrologyshreve solution parameters:'
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 		return string
+ 		#}}}
+ 	def extrude(self,md): # {{{
+@@ -32,9 +33,14 @@
+ 		
+ 		#Type of stabilization to use 0:nothing 1:artificial_diffusivity
+ 		self.stabilization=1
+-
++		self.requested_outputs= ['default']
+ 		return self
+ 	#}}}
++	def defaultoutputs(self,md): # {{{
++		list = ['Watercolumn','HydrologyWaterVx','HydrologyWaterVy']
++		return list
++	#}}}
++
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 		
+ 		#Early return
+@@ -43,7 +49,7 @@
+ 
+ 		md = checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1)
+ 		md = checkfield(md,'fieldname','hydrology.stabilization','>=',0)
+-
++		md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1)
+ 		return md
+ 	# }}}
+ 	def marshall(self,prefix,md,fid):    # {{{
+@@ -50,4 +56,12 @@
+ 		WriteData(fid,prefix,'name','md.hydrology.model','data',2,'format','Integer');
+ 		WriteData(fid,prefix,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Double')
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray')
++
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/hydrologyshreve.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 22283)
+@@ -10,6 +10,9 @@
+ 		//Type of stabilization to use 0:nothing 1:artificial_diffusivity
+ 		this.stabilization=1;
+ 
++		//default output
++		this.requested_outputs=['default'];
++
+ 	}// }}}
+ 		this.disp= function(){// {{{
+ 
+@@ -16,6 +19,7 @@
+ 		console.log(sprintf('   hydrologyshreve solution parameters:'));
+ 		fielddisplay(this,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]');
+ 		fielddisplay(this,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.');
++		fielddisplay(this,'requested_outputs','additional outputs requested');
+ 
+ 	}// }}}
+     this.extrude = function(md) {//{{{
+@@ -36,6 +40,7 @@
+ 
+ 			checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1);
+ 			checkfield(md,'fieldname','hydrology.stabilization','>=',0);
++			checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
+ 
+ 		} // }}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+@@ -42,7 +47,19 @@
+ 			WriteData(fid,prefix,'name','md.hydrology.model','data',2,'format','Integer');
+ 			WriteData(fid,prefix,'object',this,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Double');
++			var outputs = this.requested_outputs;
++			for (var i=0;i<outputs.length;i++){
++				if (outputs[i] == 'default') {
++					outputs.splice(i,1);
++					var newoutputs=this.defaultoutputs(md);
++					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
++				}
++			}
++			WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
+ 		}//}}}
++		this.defaultoutputs = function(md) { //{{{
++				return ['Watercolumn','HydrologyWaterVx','HydrologyWaterVy'];
++		}//}}}
+ 		this.fix=function() { //{{{
+ 			this.spcwatercolumn=NullFix(this.spcwatercolumn,NaN);
+ 		}//}}}
+@@ -50,6 +67,7 @@
+ 	// {{{
+ 	this.spcwatercolumn = NaN;
+ 	this.stabilization  = 0;
++	this.requested_outputs = [];
+ 	this.setdefaultparameters();
+ 	//}}}
+ }
+Index: ../trunk-jpl/src/m/classes/hydrologysommers.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologysommers.m	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologysommers.m	(revision 22283)
+@@ -16,6 +16,7 @@
+ 		neumannflux     = NaN;
+ 		relaxation      = 0;
+ 		storage         = 0;
++    requested_outputs = {};
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+@@ -30,10 +31,15 @@
+ 					error('constructor not supported');
+ 			end
+ 		end % }}}
++    function list = defaultoutputs(self,md) % {{{
++        list = {'HydrologyHead','HydrologyGapHeight','EffectivePressure','HydrologyBasalFlux','DegreeOfChannelization'};
++    end % }}}    
++
+ 		function self = setdefaultparameters(self) % {{{
+ 	      % Set under-relaxation parameter to be 1 (no under-relaxation of nonlinear iteration)	
+ 			self.relaxation=1;
+ 			self.storage=0;
++      self.requested_outputs={'default'};
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+@@ -53,6 +59,7 @@
+ 			md = checkfield(md,'fieldname','hydrology.spchead','size',[md.mesh.numberofvertices 1]);	
+          md = checkfield(md,'fieldname','hydrology.relaxation','>=',0);	
+ 			md = checkfield(md,'fieldname','hydrology.storage','>=',0);
++      md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   hydrologysommers solution parameters:'));
+@@ -67,6 +74,7 @@
+ 			fielddisplay(self,'spchead','water head constraints (NaN means no constraint) (m)');
+ 			fielddisplay(self,'relaxation','under-relaxation coefficient for nonlinear iteration');
+ 			fielddisplay(self,'storage','englacial storage coefficient (void ratio)');
++      fielddisplay(self,'requested_outputs','additional outputs requested');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+@@ -82,8 +90,15 @@
+ 			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','neumannflux','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1);
+-         WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','relaxation','format','Double');
++      WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','relaxation','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','storage','format','Double');
++      outputs = self.requested_outputs;
++      pos  = find(ismember(outputs,'default'));
++      if ~isempty(pos),
++        outputs(pos) = [];  %remove 'default' from outputs
++        outputs      = [outputs defaultoutputs(self,md)]; %add defaults
++      end
++      WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/hydrologydc.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22283)
+@@ -148,10 +148,9 @@
+ 		if self.isefficientlayer==1:
+ 			list.extend(['EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'])
+ 		if self.steps_per_step>1:
+-			list.extend(['TimeAverageEffectivePressure'])
++			list.extend(['EffectivePressureTimeAverage'])
+ 
+ 		return list
+-
+ 	#}}}
+ 
+ 	def initialize(self,md): # {{{
+@@ -177,7 +176,7 @@
+ 		md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0,1,2,3])
+ 		md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0,1])
+-		md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
++		md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1)
+ 
+ 		if self.sedimentlimit_flag==1:
+ 			md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0.,'numel',[1])
+Index: ../trunk-jpl/src/m/classes/hydrologydc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22282)
++++ ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22283)
+@@ -63,11 +63,10 @@
+     function list = defaultoutputs(self,md) % {{{
+         list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
+         if self.isefficientlayer,
+-            list=[list,{'EplHead','HydrologydcMaskEplactiveNode', ...
+-                        'HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
++            list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
+         end
+         if self.steps_per_step>1,
+-            list = [list,'TimeAverageEffectivePressure'];
++            list = [list,'EffectivePressureTimeAverage'];
+         end
+     end % }}}    
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22283-22284.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22283-22284.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22283-22284.diff	(revision 22755)
@@ -0,0 +1,571 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22284)
+@@ -223,7 +223,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+ 	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+-	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
++	basalelement ->FindParam(&dt,HydrologydtEnum);
+ 
+ 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
+ 	Input* epl_head_input	= basalelement->GetInput(EplHeadEnum);  _assert_(epl_head_input);
+@@ -333,7 +333,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+ 	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);	
+-	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
++	basalelement ->FindParam(&dt,HydrologydtEnum);
+ 
+ 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
+ 	Input* sed_head_input  = basalelement->GetInput(SedimentHeadEnum); _assert_(sed_head_input);
+@@ -557,7 +557,7 @@
+ 		Input* 	active_element_input=element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);		
+ 		active_element_input->GetInputValue(&active_element);
+ 		//element->FindParam(&dt,TimesteppingTimeStepEnum);
+-		element ->FindParam(&dt,HydrologydcHydrodtEnum);
++		element ->FindParam(&dt,HydrologydtEnum);
+ 	
+ 		/*For now, assuming just one way to compute EPL thickness*/
+ 		IssmDouble gravity          = element->GetMaterialParameter(ConstantsGEnum);
+Index: ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22284)
+@@ -138,7 +138,9 @@
+ void HydrologySommersAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+ 	/*retrieve some parameters: */
+-	int  hydrology_model;
++	int    hydrology_model;
++	int    numoutputs;
++	char** requestedoutputs = NULL;
+ 	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+ 
+ 	/*Now, do we really want Sommers?*/
+@@ -148,6 +150,12 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
+    parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.relaxation",HydrologyRelaxationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.storage",HydrologyStorageEnum));
++
++  /*Requested outputs*/
++  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
++  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
++  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
++  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
+ }/*}}}*/
+ 
+ /*Finite Element Analysis*/
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 22284)
+@@ -72,7 +72,9 @@
+ void HydrologyShreveAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+ 	/*retrieve some parameters: */
+-	int  hydrology_model;
++	int    hydrology_model;
++	int    numoutputs;
++	char** requestedoutputs = NULL;
+ 	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+ 
+ 	/*Now, do we really want Shreve?*/
+@@ -80,6 +82,11 @@
+ 
+ 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.stabilization",HydrologyshreveStabilizationEnum));
++  /*Requested outputs*/
++  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
++  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
++  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
++  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
+ 
+ }/*}}}*/
+ 
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22284)
+@@ -49,7 +49,7 @@
+ 	parameters->AddObject(new IntParam(HydrologydcUnconfinedFlagEnum,unconfined_flag));
+ 	parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
+ 	parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
+-	parameters->AddObject(new IntParam(HydrologydcStepsPerStepEnum,hydroslices));
++	parameters->AddObject(new IntParam(HydrologyStepsPerStepEnum,hydroslices));
+ 
+ 	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
+ 	parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor));
+@@ -221,7 +221,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement ->GetVerticesCoordinates(&xyz_list);
+ 	//basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
+-	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
++	basalelement ->FindParam(&dt,HydrologydtEnum);
+ 	basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+ 	Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum);
+@@ -333,7 +333,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+ 	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+-	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
++	basalelement ->FindParam(&dt,HydrologydtEnum);
+ 	basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 
+ 	Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22283)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22284)
+@@ -132,20 +132,24 @@
+ 	HydrologydcEnum,
+ 	HydrologyNumRequestedOutputsEnum,
+ 	HydrologyRequestedOutputsEnum,
+-	HydrologydcHydrodtEnum,
+-	HydrologydcStepsPerStepEnum,
++	HydrologydtEnum,
++	HydrologyStepsPerStepEnum,
+ 	SedimentHeadEnum,
+ 	SedimentHeadOldEnum,
++	SedimentHeadStackedEnum,
++	SedimentHeadTimeAverageEnum,
+ 	SedimentHeadResidualEnum,
+ 	EffectivePressureEnum,
+-	TimeAverageEffectivePressureEnum,
++	EffectivePressureStackedEnum,
++	EffectivePressureTimeAverageEnum,
+ 	EplHeadEnum,
+ 	EplHeadOldEnum,
++	EplHeadStackedEnum,
++	EplHeadTimeAverageEnum,
+ 	EplHeadSlopeXEnum,
+ 	EplHeadSlopeYEnum,
+ 	EplZigZagCounterEnum,
+ 	MeanEffectivePressureEnum,
+-	HydrologydcStackedNEnum,
+ 	HydrologydcMaxIterEnum,
+ 	HydrologydcRelTolEnum,
+ 	HydrologydcSedimentCompressibilityEnum,
+@@ -162,6 +166,8 @@
+ 	HydrologydcEplMaxThicknessEnum,
+ 	HydrologydcEplThicknessEnum,
+ 	HydrologydcEplThicknessOldEnum,
++	HydrologydcEplThicknessStackedEnum,
++	HydrologydcEplThicknessTimeAverageEnum,
+ 	HydrologydcEplThickCompEnum,
+ 	HydrologydcEplConductivityEnum,
+ 	HydrologydcIsefficientlayerEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22284)
+@@ -138,20 +138,24 @@
+ 		case HydrologydcEnum : return "Hydrologydc";
+ 		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
+ 		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+-		case HydrologydcHydrodtEnum : return "HydrologydcHydrodt";
+-		case HydrologydcStepsPerStepEnum : return "HydrologydcStepsPerStep";
++		case HydrologydtEnum : return "Hydrologydt";
++		case HydrologyStepsPerStepEnum : return "HydrologyStepsPerStep";
+ 		case SedimentHeadEnum : return "SedimentHead";
+ 		case SedimentHeadOldEnum : return "SedimentHeadOld";
++		case SedimentHeadStackedEnum : return "SedimentHeadStacked";
++		case SedimentHeadTimeAverageEnum : return "SedimentHeadTimeAverage";
+ 		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
+ 		case EffectivePressureEnum : return "EffectivePressure";
+-		case TimeAverageEffectivePressureEnum : return "TimeAverageEffectivePressure";
++		case EffectivePressureStackedEnum : return "EffectivePressureStacked";
++		case EffectivePressureTimeAverageEnum : return "EffectivePressureTimeAverage";
+ 		case EplHeadEnum : return "EplHead";
+ 		case EplHeadOldEnum : return "EplHeadOld";
++		case EplHeadStackedEnum : return "EplHeadStacked";
++		case EplHeadTimeAverageEnum : return "EplHeadTimeAverage";
+ 		case EplHeadSlopeXEnum : return "EplHeadSlopeX";
+ 		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
+ 		case EplZigZagCounterEnum : return "EplZigZagCounter";
+ 		case MeanEffectivePressureEnum : return "MeanEffectivePressure";
+-		case HydrologydcStackedNEnum : return "HydrologydcStackedN";
+ 		case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
+ 		case HydrologydcRelTolEnum : return "HydrologydcRelTol";
+ 		case HydrologydcSedimentCompressibilityEnum : return "HydrologydcSedimentCompressibility";
+@@ -168,6 +172,8 @@
+ 		case HydrologydcEplMaxThicknessEnum : return "HydrologydcEplMaxThickness";
+ 		case HydrologydcEplThicknessEnum : return "HydrologydcEplThickness";
+ 		case HydrologydcEplThicknessOldEnum : return "HydrologydcEplThicknessOld";
++		case HydrologydcEplThicknessStackedEnum : return "HydrologydcEplThicknessStacked";
++		case HydrologydcEplThicknessTimeAverageEnum : return "HydrologydcEplThicknessTimeAverage";
+ 		case HydrologydcEplThickCompEnum : return "HydrologydcEplThickComp";
+ 		case HydrologydcEplConductivityEnum : return "HydrologydcEplConductivity";
+ 		case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22284)
+@@ -141,20 +141,24 @@
+    if(stage==2){
+ 	      if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+-	      else if (strcmp(name,"HydrologydcHydrodt")==0) return HydrologydcHydrodtEnum;
+-	      else if (strcmp(name,"HydrologydcStepsPerStep")==0) return HydrologydcStepsPerStepEnum;
++	      else if (strcmp(name,"Hydrologydt")==0) return HydrologydtEnum;
++	      else if (strcmp(name,"HydrologyStepsPerStep")==0) return HydrologyStepsPerStepEnum;
+ 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+ 	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
++	      else if (strcmp(name,"SedimentHeadStacked")==0) return SedimentHeadStackedEnum;
++	      else if (strcmp(name,"SedimentHeadTimeAverage")==0) return SedimentHeadTimeAverageEnum;
+ 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+ 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
+-	      else if (strcmp(name,"TimeAverageEffectivePressure")==0) return TimeAverageEffectivePressureEnum;
++	      else if (strcmp(name,"EffectivePressureStacked")==0) return EffectivePressureStackedEnum;
++	      else if (strcmp(name,"EffectivePressureTimeAverage")==0) return EffectivePressureTimeAverageEnum;
+ 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
+ 	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
++	      else if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
++	      else if (strcmp(name,"EplHeadTimeAverage")==0) return EplHeadTimeAverageEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+ 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
+ 	      else if (strcmp(name,"MeanEffectivePressure")==0) return MeanEffectivePressureEnum;
+-	      else if (strcmp(name,"HydrologydcStackedN")==0) return HydrologydcStackedNEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentCompressibility")==0) return HydrologydcSedimentCompressibilityEnum;
+@@ -171,6 +175,8 @@
+ 	      else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
++	      else if (strcmp(name,"HydrologydcEplThicknessStacked")==0) return HydrologydcEplThicknessStackedEnum;
++	      else if (strcmp(name,"HydrologydcEplThicknessTimeAverage")==0) return HydrologydcEplThicknessTimeAverageEnum;
+ 	      else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+ 	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
+@@ -253,16 +259,16 @@
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+-	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+ 	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+ 	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+ 	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+ 	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
++	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+ 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
+ 	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
+ 	      else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
+@@ -376,16 +382,16 @@
+ 	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
++	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+ 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+@@ -499,16 +505,16 @@
+ 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+ 	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+-	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+ 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
++	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+ 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+ 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
+ 	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
+@@ -622,16 +628,16 @@
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
+-	      else if (strcmp(name,"J")==0) return JEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+ 	      else if (strcmp(name,"Step")==0) return StepEnum;
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
++	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+ 	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
+ 	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
+@@ -745,16 +751,16 @@
+ 	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
++	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+@@ -868,16 +874,16 @@
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+ 	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+-	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+ 	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+ 	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
++	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
+@@ -991,16 +997,16 @@
+ 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+-	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+ 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+ 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
++	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+ 	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
+ 	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22284)
+@@ -89,7 +89,7 @@
+ 		InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+ 		InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+ 		femmodel->UpdateConstraintsx();
+-		femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
++		//femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
+ 		
+ 		/*Reset constraint on the ZigZag Lock*/
+ 		ResetConstraintsx(femmodel);
+@@ -162,7 +162,7 @@
+ 			inefanalysis->ElementizeEplMask(femmodel);
+ 			InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+ 			InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+-			femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
++			//femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
+ 
+ 			for(;;){
+ 				eplconverged=false;
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22284)
+@@ -14,14 +14,18 @@
+ 	/*intermediary*/
+ 	int  hydrology_model;
+ 	int  solution_type;
++	int  numoutputs=0;
+ 	bool save_results;
+ 	bool modify_loads=true;
+ 	bool isefficientlayer;
++	char **requested_outputs = NULL;
+ 
+ 	/*first recover parameters common to all solutions*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);	
++	femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum);
+ 
+ 	/*Using the Shreve based Model*/
+ 	if (hydrology_model==HydrologyshreveEnum){
+@@ -39,8 +43,7 @@
+ 		
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+-			int outputs[3] = {WatercolumnEnum,HydrologyWaterVxEnum,HydrologyWaterVyEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
++			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 		}
+ 	}
+ 
+@@ -48,8 +51,6 @@
+ 	else if (hydrology_model==HydrologydcEnum){
+ 		/*intermediary: */
+ 		int        step,hydroslices;
+-		int        numoutputs=0;
+-		char       **requested_outputs = NULL;
+ 		IssmDouble time,init_time,hydrotime,yts;
+ 		IssmDouble dt,hydrodt;
+ 
+@@ -56,18 +57,16 @@
+ 		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		femmodel->parameters->FindParam(&step,StepEnum);
+ 		femmodel->parameters->FindParam(&time,TimeEnum);
+-		femmodel->parameters->FindParam(&hydroslices,HydrologydcStepsPerStepEnum);
++		femmodel->parameters->FindParam(&hydroslices,HydrologyStepsPerStepEnum);
+ 		femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 		init_time = time-dt; //getting the time back to the start of the timestep
+ 		hydrotime=init_time;
+ 		hydrodt=dt/hydroslices; //computing hydro dt from dt and a divider
+-		femmodel->parameters->AddObject(new DoubleParam(HydrologydcHydrodtEnum,hydrodt));
+-		femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum);
+-		if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum);
++		femmodel->parameters->AddObject(new DoubleParam(HydrologydtEnum,hydrodt));
+ 
+ 		if(dt>0){
+ 			if(hydroslices>1){
+-				int trans_input[1]={HydrologydcStackedNEnum};
++				int trans_input[1]={EffectivePressureStackedEnum};
+ 				femmodel->InitTransientOutputx(&trans_input[0],1);
+ 			}
+ 			while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
+@@ -86,7 +85,7 @@
+ 				}
+ 			}
+ 			if(hydroslices>1){
+-				int output[1]={HydrologydcStackedNEnum};
++				int output[1]={EffectivePressureStackedEnum};
+ 				femmodel->AverageTransientOutputx(&output[0],init_time,1);
+ 			}		
+ 		}
+@@ -104,16 +103,8 @@
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+ 			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 		}
+-		/*Free ressources:*/	
+-		if(numoutputs){
+-			for(int i=0;i<numoutputs;i++){
+-				xDelete<char>(requested_outputs[i]);
+-			}
+-			xDelete<char*>(requested_outputs);
+-		}
+ 	}
+ 	
+-
+ 	else if (hydrology_model==HydrologysommersEnum){	
+ 		femmodel->SetCurrentConfiguration(HydrologySommersAnalysisEnum);	
+       InputDuplicatex(femmodel,HydrologyHeadEnum,HydrologyHeadOldEnum);	
+@@ -125,8 +116,7 @@
+ 		
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving results \n");
+-			int outputs[5] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum,DegreeOfChannelizationEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],5);
++			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 		}
+ 	}
+ 
+@@ -133,5 +123,12 @@
+ 	else{
+ 		_error_("Hydrology model "<< EnumToStringx(hydrology_model) <<" not supported yet");
+ 	}
++	/*Free ressources:*/	
++	if(numoutputs){
++		for(int i=0;i<numoutputs;i++){
++			xDelete<char>(requested_outputs[i]);
++		}
++		xDelete<char*>(requested_outputs);
++	}
+ }
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22283)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22284)
+@@ -4486,7 +4486,7 @@
+ 				/*Intermediaries*/
+ 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+ 				TransientInput* stacking_input=NULL;
+-				Input* input=element->inputs->GetInput(HydrologydcStackedNEnum); _assert_(input);
++				Input* input=element->inputs->GetInput(EffectivePressureStackedEnum); _assert_(input);
+ 				Input* input_to_stack=element->GetInput(input_enum[i]); _assert_(input_to_stack);
+ 				stacking_input=dynamic_cast<TransientInput*>(input);
+ 
+@@ -4495,13 +4495,13 @@
+ 				element->GetInputListOnVertices(&N[0],input_enum[i]);
+ 				switch(element->ObjectEnum()){
+ 				case TriaEnum:
+-					stacking_input->AddTimeInput(new TriaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new TriaInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
+ 					break;
+ 				case PentaEnum:
+-					stacking_input->AddTimeInput(new PentaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new PentaInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
+ 					break;
+ 				case TetraEnum:
+-					stacking_input->AddTimeInput(new TetraInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new TetraInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
+ 					break;
+ 				default: _error_("Not implemented yet");
+ 				}
+@@ -4529,7 +4529,7 @@
+ 				stacking_input=dynamic_cast<TransientInput*>(input);
+ 				stacking_input->GetInputAverageOnTimes(&time_averaged,init_time);
+ 
+-				element->AddInput(TimeAverageEffectivePressureEnum,&time_averaged[0],P1Enum);
++				element->AddInput(EffectivePressureTimeAverageEnum,&time_averaged[0],P1Enum);
+ 				xDelete<IssmDouble>(time_averaged);
+ 			}
+ 		}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22284-22285.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22284-22285.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22284-22285.diff	(revision 22755)
@@ -0,0 +1,532 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22284)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22285)
+@@ -127,11 +127,11 @@
+ 	FrictionCouplingEnum,
+ 	GeometryHydrostaticRatioEnum,
+ 	HydrologyModelEnum,
++	HydrologyNumRequestedOutputsEnum,
++	HydrologyRequestedOutputsEnum,
+ 	HydrologyshreveEnum,
+ 	HydrologyshreveStabilizationEnum,
+ 	HydrologydcEnum,
+-	HydrologyNumRequestedOutputsEnum,
+-	HydrologyRequestedOutputsEnum,
+ 	HydrologydtEnum,
+ 	HydrologyStepsPerStepEnum,
+ 	SedimentHeadEnum,
+@@ -149,7 +149,6 @@
+ 	EplHeadSlopeXEnum,
+ 	EplHeadSlopeYEnum,
+ 	EplZigZagCounterEnum,
+-	MeanEffectivePressureEnum,
+ 	HydrologydcMaxIterEnum,
+ 	HydrologydcRelTolEnum,
+ 	HydrologydcSedimentCompressibilityEnum,
+@@ -180,9 +179,6 @@
+ 	HydrologydcPenaltyLockEnum,
+ 	HydrologydcEplflipLockEnum,
+ 	HydrologydcBasalMoulinInputEnum,
+-	HydrologyLayerEnum,
+-	HydrologySedimentEnum,
+-	HydrologyEfficientEnum,
+ 	HydrologySedimentKmaxEnum,
+ 	HydrologysommersEnum,
+ 	HydrologyHeadEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22285)
+@@ -133,11 +133,11 @@
+ 		case FrictionCouplingEnum : return "FrictionCoupling";
+ 		case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
+ 		case HydrologyModelEnum : return "HydrologyModel";
++		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
++		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+ 		case HydrologyshreveEnum : return "Hydrologyshreve";
+ 		case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization";
+ 		case HydrologydcEnum : return "Hydrologydc";
+-		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
+-		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+ 		case HydrologydtEnum : return "Hydrologydt";
+ 		case HydrologyStepsPerStepEnum : return "HydrologyStepsPerStep";
+ 		case SedimentHeadEnum : return "SedimentHead";
+@@ -155,7 +155,6 @@
+ 		case EplHeadSlopeXEnum : return "EplHeadSlopeX";
+ 		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
+ 		case EplZigZagCounterEnum : return "EplZigZagCounter";
+-		case MeanEffectivePressureEnum : return "MeanEffectivePressure";
+ 		case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
+ 		case HydrologydcRelTolEnum : return "HydrologydcRelTol";
+ 		case HydrologydcSedimentCompressibilityEnum : return "HydrologydcSedimentCompressibility";
+@@ -186,9 +185,6 @@
+ 		case HydrologydcPenaltyLockEnum : return "HydrologydcPenaltyLock";
+ 		case HydrologydcEplflipLockEnum : return "HydrologydcEplflipLock";
+ 		case HydrologydcBasalMoulinInputEnum : return "HydrologydcBasalMoulinInput";
+-		case HydrologyLayerEnum : return "HydrologyLayer";
+-		case HydrologySedimentEnum : return "HydrologySediment";
+-		case HydrologyEfficientEnum : return "HydrologyEfficient";
+ 		case HydrologySedimentKmaxEnum : return "HydrologySedimentKmax";
+ 		case HydrologysommersEnum : return "Hydrologysommers";
+ 		case HydrologyHeadEnum : return "HydrologyHead";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22285)
+@@ -133,14 +133,14 @@
+ 	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
+ 	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
+ 	      else if (strcmp(name,"HydrologyModel")==0) return HydrologyModelEnum;
++	      else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
++	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
+-	      else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
+-	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
++	      if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
++	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"Hydrologydt")==0) return HydrologydtEnum;
+ 	      else if (strcmp(name,"HydrologyStepsPerStep")==0) return HydrologyStepsPerStepEnum;
+ 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+@@ -158,7 +158,6 @@
+ 	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+ 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+ 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
+-	      else if (strcmp(name,"MeanEffectivePressure")==0) return MeanEffectivePressureEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentCompressibility")==0) return HydrologydcSedimentCompressibilityEnum;
+@@ -189,9 +188,6 @@
+ 	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+ 	      else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum;
+ 	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
+-	      else if (strcmp(name,"HydrologyLayer")==0) return HydrologyLayerEnum;
+-	      else if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
+-	      else if (strcmp(name,"HydrologyEfficient")==0) return HydrologyEfficientEnum;
+ 	      else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
+ 	      else if (strcmp(name,"Hydrologysommers")==0) return HydrologysommersEnum;
+ 	      else if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum;
+@@ -259,14 +255,14 @@
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
++	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
++	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
++	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
++	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+-	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+-	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+-	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+-	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
++	      if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+ 	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+ 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
+@@ -382,14 +378,14 @@
+ 	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+-	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+-	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
++	      if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+@@ -505,14 +501,14 @@
+ 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+ 	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
++	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
++	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
++	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
++	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+-	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+-	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+-	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+-	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
++	      if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+ 	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+ 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+@@ -628,14 +624,14 @@
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
++	      else if (strcmp(name,"J")==0) return JEnum;
++	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
++	      else if (strcmp(name,"Step")==0) return StepEnum;
++	      else if (strcmp(name,"Time")==0) return TimeEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"J")==0) return JEnum;
+-	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+-	      else if (strcmp(name,"Step")==0) return StepEnum;
+-	      else if (strcmp(name,"Time")==0) return TimeEnum;
+-	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
++	      if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+ 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+@@ -751,14 +747,14 @@
+ 	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
++	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
++	      else if (strcmp(name,"None")==0) return NoneEnum;
++	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
++	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+-	      else if (strcmp(name,"None")==0) return NoneEnum;
+-	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+-	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+-	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
++	      if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+ 	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+@@ -874,14 +870,14 @@
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+ 	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
++	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
++	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
++	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
++	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+-	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+-	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+-	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
++	      if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+@@ -997,14 +993,14 @@
+ 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
++	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
++	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
++	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
++	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+-	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+-	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
++	      if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22285)
+@@ -46,13 +46,11 @@
+ 	IssmDouble ndu_sed,nu_sed;
+ 	IssmDouble ndu_epl,nu_epl;
+ 	IssmDouble ThickCount,L2Count;
+-	
+ 	/*Recover parameters: */
+ 	femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	femmodel->parameters->FindParam(&hydro_maxiter,HydrologydcMaxIterEnum);
+ 	femmodel->parameters->FindParam(&eps_hyd,HydrologydcRelTolEnum);
+-
+ 	hydrocount=1;
+ 	hydroconverged=false;
+ 	/*We don't need the outer loop if only one layer is used*/
+@@ -61,7 +59,6 @@
+ 	/*Retrieve inputs as the initial state for the non linear iteration*/
+ 	GetSolutionFromInputsx(&ug_sed,femmodel);	
+ 	Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
+-
+ 	if(isefficientlayer) {
+ 		inefanalysis = new HydrologyDCInefficientAnalysis();
+ 		effanalysis = new HydrologyDCEfficientAnalysis();
+@@ -89,7 +86,6 @@
+ 		InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+ 		InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+ 		femmodel->UpdateConstraintsx();
+-		//femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
+ 		
+ 		/*Reset constraint on the ZigZag Lock*/
+ 		ResetConstraintsx(femmodel);
+@@ -162,7 +158,6 @@
+ 			inefanalysis->ElementizeEplMask(femmodel);
+ 			InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+ 			InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+-			//femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
+ 
+ 			for(;;){
+ 				eplconverged=false;
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22285)
+@@ -17,7 +17,6 @@
+ 	int  numoutputs=0;
+ 	bool save_results;
+ 	bool modify_loads=true;
+-	bool isefficientlayer;
+ 	char **requested_outputs = NULL;
+ 
+ 	/*first recover parameters common to all solutions*/
+@@ -26,7 +25,6 @@
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);	
+ 	femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum);
+-
+ 	/*Using the Shreve based Model*/
+ 	if (hydrology_model==HydrologyshreveEnum){
+ 		if(VerboseSolution()) _printf0_("   computing water heads\n");
+@@ -41,57 +39,68 @@
+ 		/*transfer water column thickness to old water column thickness: */
+ 		InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
+ 		
+-		if(save_results){
+-			if(VerboseSolution()) _printf0_("   saving results \n");
+-			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-		}
+ 	}
+ 
+ 	/*Using the double continuum model*/
+ 	else if (hydrology_model==HydrologydcEnum){
+ 		/*intermediary: */
++		bool       isefficientlayer;
+ 		int        step,hydroslices;
+ 		IssmDouble time,init_time,hydrotime,yts;
+ 		IssmDouble dt,hydrodt;
+ 
++		femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		femmodel->parameters->FindParam(&step,StepEnum);
+ 		femmodel->parameters->FindParam(&time,TimeEnum);
+ 		femmodel->parameters->FindParam(&hydroslices,HydrologyStepsPerStepEnum);
+ 		femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
++
+ 		init_time = time-dt; //getting the time back to the start of the timestep
+ 		hydrotime=init_time;
+ 		hydrodt=dt/hydroslices; //computing hydro dt from dt and a divider
+ 		femmodel->parameters->AddObject(new DoubleParam(HydrologydtEnum,hydrodt));
+-
+-		if(dt>0){
+-			if(hydroslices>1){
+-				int trans_input[1]={EffectivePressureStackedEnum};
+-				femmodel->InitTransientOutputx(&trans_input[0],1);
++		if(hydroslices>1){
++			/*define which variable needs to be averaged on the sub-timestep and initialize as needed*/
++			if (isefficientlayer){
++				int inputtostack[4]={EffectivePressureEnum,SedimentHeadEnum,EplHeadEnum,HydrologydcEplThicknessEnum};
++				int stackedinput[4]={EffectivePressureStackedEnum,SedimentHeadStackedEnum,EplHeadStackedEnum,HydrologydcEplThicknessStackedEnum};
++				int averagedinput[4]={EffectivePressureTimeAverageEnum,SedimentHeadTimeAverageEnum,EplHeadTimeAverageEnum,HydrologydcEplThicknessTimeAverageEnum};
++				femmodel->InitTransientOutputx(&stackedinput[0],4);
++				while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
++					hydrotime+=hydrodt;
++					/*save preceding timestep*/
++					InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
++					InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
++					InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
++					/*Proceed now to heads computations*/
++					solutionsequence_hydro_nonlinear(femmodel);
++					/*If we have a sub-timestep we stack the variables here*/
++					femmodel->StackTransientOutputx(&inputtostack[0],&stackedinput[0],hydrotime,4);
++				}
++				femmodel->AverageTransientOutputx(&stackedinput[0],&averagedinput[0],init_time,4);
+ 			}
+-			while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
+-				hydrotime+=hydrodt;
+-				InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+-				femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-				if (isefficientlayer){
++			else{
++				int inputtostack[2]={EffectivePressureEnum,SedimentHeadEnum};
++				int stackedinput[2]={EffectivePressureStackedEnum,SedimentHeadStackedEnum};
++				int averagedinput[2]={EffectivePressureTimeAverageEnum,SedimentHeadTimeAverageEnum};
++				femmodel->InitTransientOutputx(&stackedinput[0],2);
++				while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
++					hydrotime+=hydrodt;
++					/*save preceding timestep*/
++					InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+ 					InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+ 					InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
++					/*Proceed now to heads computations*/
++					solutionsequence_hydro_nonlinear(femmodel);
++					/*If we have a sub-timestep we stack the variables here*/
++					femmodel->StackTransientOutputx(&inputtostack[0],&stackedinput[0],hydrotime,2);
+ 				}
+-				/*Proceed now to heads computations*/
+-				solutionsequence_hydro_nonlinear(femmodel);
+-				if (hydroslices>1){
+-					int output[1]={EffectivePressureEnum};
+-					femmodel->StackTransientOutputx(&output[0],hydrotime,1);
+-				}
++				femmodel->AverageTransientOutputx(&stackedinput[0],&averagedinput[0],init_time,2);
+ 			}
+-			if(hydroslices>1){
+-				int output[1]={EffectivePressureStackedEnum};
+-				femmodel->AverageTransientOutputx(&output[0],init_time,1);
+-			}		
+ 		}
+ 		else{
+ 			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+-			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 			if (isefficientlayer){
+ 				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+ 				InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
+@@ -99,12 +108,7 @@
+ 			/*Proceed now to heads computations*/
+ 			solutionsequence_hydro_nonlinear(femmodel);
+ 		}
+-		if(save_results){
+-			if(VerboseSolution()) _printf0_("   saving results \n");
+-			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-		}
+ 	}
+-	
+ 	else if (hydrology_model==HydrologysommersEnum){	
+ 		femmodel->SetCurrentConfiguration(HydrologySommersAnalysisEnum);	
+       InputDuplicatex(femmodel,HydrologyHeadEnum,HydrologyHeadOldEnum);	
+@@ -113,16 +117,14 @@
+ 		HydrologySommersAnalysis* analysis = new HydrologySommersAnalysis();
+ 		analysis->UpdateGapHeight(femmodel);
+ 		delete analysis;
+-		
+-		if(save_results){
+-			if(VerboseSolution()) _printf0_("   saving results \n");
+-			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-		}
+ 	}
+-
+ 	else{
+ 		_error_("Hydrology model "<< EnumToStringx(hydrology_model) <<" not supported yet");
+ 	}
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results \n");
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++	}
+ 	/*Free ressources:*/	
+ 	if(numoutputs){
+ 		for(int i=0;i<numoutputs;i++){
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22284)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22285)
+@@ -149,8 +149,8 @@
+ 		void UpdateConstraintsExtrudeFromTopx();
+ 		void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count);
+ 		void InitTransientOutputx(int* input_enum, int numoutputs);
+-		void StackTransientOutputx(int* input_enum, IssmDouble hydrotime, int numoutputs);
+-		void AverageTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs);
++		void StackTransientOutputx(int* input_enum,int* stackedinput_enum, IssmDouble hydrotime, int numoutputs);
++		void AverageTransientOutputx(int* input_enum,int* averagedinput_enum,IssmDouble hydrotime,int numoutputs);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22285)
+@@ -4475,7 +4475,7 @@
+ 	}
+ }
+ /*}}}*/
+-void FemModel::StackTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs){ /*{{{*/
++void FemModel::StackTransientOutputx(int* input_enum,int* stackedinput_enum,IssmDouble hydrotime,int numoutputs){ /*{{{*/
+ 
+   for(int i=0;i<numoutputs;i++){
+ 		if(input_enum[i]<0){
+@@ -4486,7 +4486,7 @@
+ 				/*Intermediaries*/
+ 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+ 				TransientInput* stacking_input=NULL;
+-				Input* input=element->inputs->GetInput(EffectivePressureStackedEnum); _assert_(input);
++				Input* input=element->inputs->GetInput(stackedinput_enum[i]); _assert_(input);
+ 				Input* input_to_stack=element->GetInput(input_enum[i]); _assert_(input_to_stack);
+ 				stacking_input=dynamic_cast<TransientInput*>(input);
+ 
+@@ -4495,13 +4495,13 @@
+ 				element->GetInputListOnVertices(&N[0],input_enum[i]);
+ 				switch(element->ObjectEnum()){
+ 				case TriaEnum:
+-					stacking_input->AddTimeInput(new TriaInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new TriaInput(stackedinput_enum[i],&N[0],P1Enum),hydrotime);
+ 					break;
+ 				case PentaEnum:
+-					stacking_input->AddTimeInput(new PentaInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new PentaInput(stackedinput_enum[i],&N[0],P1Enum),hydrotime);
+ 					break;
+ 				case TetraEnum:
+-					stacking_input->AddTimeInput(new TetraInput(EffectivePressureStackedEnum,&N[0],P1Enum),hydrotime);
++					stacking_input->AddTimeInput(new TetraInput(stackedinput_enum[i],&N[0],P1Enum),hydrotime);
+ 					break;
+ 				default: _error_("Not implemented yet");
+ 				}
+@@ -4511,7 +4511,7 @@
+ 	}
+ }
+ /*}}}*/
+-void FemModel::AverageTransientOutputx(int* input_enum,IssmDouble init_time,int numoutputs){ /*{{{*/
++void FemModel::AverageTransientOutputx(int* input_enum,int* averagedinput_enum,IssmDouble init_time,int numoutputs){ /*{{{*/
+ 
+   for(int i=0;i<numoutputs;i++){
+ 		if(input_enum[i]<0){
+@@ -4529,7 +4529,7 @@
+ 				stacking_input=dynamic_cast<TransientInput*>(input);
+ 				stacking_input->GetInputAverageOnTimes(&time_averaged,init_time);
+ 
+-				element->AddInput(EffectivePressureTimeAverageEnum,&time_averaged[0],P1Enum);
++				element->AddInput(averagedinput_enum[i],&time_averaged[0],P1Enum);
+ 				xDelete<IssmDouble>(time_averaged);
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22284)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22285)
+@@ -69,8 +69,10 @@
+ 	output->enum_type=this->enum_type;
+ 	output->numtimesteps=this->numtimesteps;
+ 	output->timesteps=xNew<IssmDouble>(this->numtimesteps);
+-	xMemCpy(output->timesteps,this->timesteps,this->numtimesteps);
+-	output->inputs=static_cast<Inputs*>(this->inputs->Copy());
++	if(this->numtimesteps>0){
++		xMemCpy(output->timesteps,this->timesteps,this->numtimesteps);
++		output->inputs=static_cast<Inputs*>(this->inputs->Copy());
++	}
+ 	output->parameters=this->parameters;
+ 
+ 	return (Object*)output;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22285-22286.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22285-22286.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22285-22286.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/classes/hydrologydc.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22285)
++++ ../trunk-jpl/src/m/classes/hydrologydc.py	(revision 22286)
+@@ -148,8 +148,9 @@
+ 		if self.isefficientlayer==1:
+ 			list.extend(['EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'])
+ 		if self.steps_per_step>1:
+-			list.extend(['EffectivePressureTimeAverage'])
+-
++			list.extend(['EffectivePressureTimeAverage','SedimentHeadTimeAverage'])
++			if self.isefficientlayer==1:
++				list.extend(['EplHeadTimeAverage','HydrologydcEplThicknessTimeAverage'])
+ 		return list
+ 	#}}}
+ 
+Index: ../trunk-jpl/src/m/classes/hydrologydc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22285)
++++ ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 22286)
+@@ -66,7 +66,10 @@
+             list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
+         end
+         if self.steps_per_step>1,
+-            list = [list,'EffectivePressureTimeAverage'];
++            list = [list,'EffectivePressureTimeAverage','SedimentHeadTimeAverage'];
++            if self.isefficientlayer,
++                list = [list,'EplHeadTimeAverage','HydrologydcEplThicknessTimeAverage'];
++            end
+         end
+     end % }}}    
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22286-22287.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22286-22287.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22286-22287.diff	(revision 22755)
@@ -0,0 +1,129 @@
+Index: ../trunk-jpl/test/NightlyRun/test333.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test333.py	(revision 22286)
++++ ../trunk-jpl/test/NightlyRun/test333.py	(revision 22287)
+@@ -41,11 +41,20 @@
+ md.hydrology.epl_colapse_thickness=1.0e-3
+ md.hydrology.epl_thick_comp=1
+ md.hydrology.epl_max_thickness=1
+-md.timestepping.time_step=0.2
++md.hydrology.steps_per_step=10
++md.timestepping.time_step=2.0
+ md.timestepping.final_time=2.0
+ 
+ md=solve(md,'Transient')
+ 
++#re-run with no substeps
++mdfine=md
++mdfine.result=[]
++mdfine.hydrology.steps_per_step=1
++mdfine.timestepping.time_step=0.2
++mdfine=solve(md,'Transient')
++
++
+ # sedvol=np.zeros(10)
+ # eplvol=np.zeros(10)
+ # time=np.arange(0.2,2.1,0.2)
+@@ -58,20 +67,24 @@
+ field_names=['SedimentWaterHead1','EplWaterHead1','SedimentHeadResidual1',
+ 						 'SedimentWaterHead4','EplWaterHead4','SedimentHeadResidual4',
+ 						 'SedimentWaterHead5','EplWaterHead5','SedimentHeadResidual5',
+-						 'SedimentWaterHead9','EplWaterHead9','SedimentHeadResidual9']
++						 'SedimentWaterHead9','EplWaterHead9','SedimentHeadResidual9', 
++						 'EplWaterHead9']
+ field_tolerances=[1e-13, 1e-13, 1e-13,
+ 									1e-13, 1e-13, 1e-13,
+ 									1e-13, 5e-12, 1e-11,
+-									1e-13, 5e-12, 1e-11]
+-field_values=[md.results.TransientSolution[0].SedimentHead,
+-							md.results.TransientSolution[0].EplHead,
+-							md.results.TransientSolution[0].SedimentHeadResidual,
+-							md.results.TransientSolution[3].SedimentHead,
+-							md.results.TransientSolution[3].EplHead,
+-							md.results.TransientSolution[3].SedimentHeadResidual,
+-							md.results.TransientSolution[4].SedimentHead,
+-							md.results.TransientSolution[4].EplHead,
+-							md.results.TransientSolution[4].SedimentHeadResidual,
+-							md.results.TransientSolution[8].SedimentHead,
+-							md.results.TransientSolution[8].EplHead,
+-							md.results.TransientSolution[8].SedimentHeadResidual]
++									1e-13, 5e-12, 1e-11,
++									1e-13]
++field_values=[mdfine.results.TransientSolution[0].SedimentHead,
++							mdfine.results.TransientSolution[0].EplHead,
++							mdfine.results.TransientSolution[0].SedimentHeadResidual,
++							mdfine.results.TransientSolution[3].SedimentHead,
++							mdfine.results.TransientSolution[3].EplHead,
++							mdfine.results.TransientSolution[3].SedimentHeadResidual,
++							mdfine.results.TransientSolution[4].SedimentHead,
++							mdfine.results.TransientSolution[4].EplHead,
++							mdfine.results.TransientSolution[4].SedimentHeadResidual,
++							mdfine.results.TransientSolution[8].SedimentHead,
++							mdfine.results.TransientSolution[8].EplHead,
++							mdfine.results.TransientSolution[8].SedimentHeadResidual,
++							md.results.TransientSolution[0].EplHead]
++
+Index: ../trunk-jpl/test/Archives/Archive333.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test333.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test333.m	(revision 22286)
++++ ../trunk-jpl/test/NightlyRun/test333.m	(revision 22287)
+@@ -33,6 +33,12 @@
+ %md.verbose.solution=1;
+ 
+ md=solve(md,'Transient');
++%re-run with no substeps
++mdfine=md;
++mdfine.result=struct();
++mdfine.hydrology.steps_per_step=1;
++mdfine.timestepping.time_step=0.2;
++mdfine=solve(md,'Transient');
+ 
+ %store=md.constants.g*md.hydrology.sediment_porosity*md.materials.rho_freshwater*((md.hydrology.sediment_compressibility/md.hydrology.sediment_porosity)+md.hydrology.water_compressibility);
+ %sedstore=20.0*store;
+@@ -42,23 +48,26 @@
+ %end
+ %Fields and tolerances to track changes
+ field_names     ={'SedimentWaterHead1','EplWaterHead1','SedimentHeadResidual1',...
+-						'SedimentWaterHead4','EplWaterHead4','SedimentHeadResidual4',...
+-						'SedimentWaterHead5','EplWaterHead5','SedimentHeadResidual5',...
+-						'SedimentWaterHead9','EplWaterHead9','SedimentHeadResidual9'};
++                  'SedimentWaterHead4','EplWaterHead4','SedimentHeadResidual4',...
++                  'SedimentWaterHead5','EplWaterHead5','SedimentHeadResidual5',...
++                  'SedimentWaterHead9','EplWaterHead9','SedimentHeadResidual9',...
++                  'EplWaterHead9'};
+ field_tolerances={...
+ 	1e-13, 1e-13, 1e-13,...
+ 	1e-13, 1e-13, 1e-13,...
+ 	1e-13, 5e-12, 1e-11,...
+-	1e-13, 5e-12, 1e-11};
+-field_values={md.results.TransientSolution(1).SedimentHead, ...
+-							md.results.TransientSolution(1).EplHead,...
+-							md.results.TransientSolution(1).SedimentHeadResidual,...
+-							md.results.TransientSolution(4).SedimentHead,...
+-							md.results.TransientSolution(4).EplHead,...
+-							md.results.TransientSolution(4).SedimentHeadResidual, ...
+-							md.results.TransientSolution(5).SedimentHead,...
+-							md.results.TransientSolution(5).EplHead,...
+-							md.results.TransientSolution(5).SedimentHeadResidual, ...
+-							md.results.TransientSolution(9).SedimentHead,...
+-							md.results.TransientSolution(9).EplHead,...
+-							md.results.TransientSolution(9).SedimentHeadResidual};
++	1e-13, 5e-12, 1e-11,...
++  1e-13};
++field_values={mdfine.results.TransientSolution(1).SedimentHead, ...
++							mdfine.results.TransientSolution(1).EplHead,...
++							mdfine.results.TransientSolution(1).SedimentHeadResidual,...
++							mdfine.results.TransientSolution(4).SedimentHead,...
++							mdfine.results.TransientSolution(4).EplHead,...
++							mdfine.results.TransientSolution(4).SedimentHeadResidual, ...
++							mdfine.results.TransientSolution(5).SedimentHead,...
++							mdfine.results.TransientSolution(5).EplHead,...
++							mdfine.results.TransientSolution(5).SedimentHeadResidual, ...
++							mdfine.results.TransientSolution(9).SedimentHead,...
++							mdfine.results.TransientSolution(9).EplHead,...
++							mdfine.results.TransientSolution(9).SedimentHeadResidual,...
++              md.results.TransientSolution(0).EplHead};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22287-22288.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22287-22288.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22287-22288.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test333.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test333.m	(revision 22287)
++++ ../trunk-jpl/test/NightlyRun/test333.m	(revision 22288)
+@@ -35,7 +35,7 @@
+ md=solve(md,'Transient');
+ %re-run with no substeps
+ mdfine=md;
+-mdfine.result=struct();
++mdfine.results=struct();
+ mdfine.hydrology.steps_per_step=1;
+ mdfine.timestepping.time_step=0.2;
+ mdfine=solve(md,'Transient');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22288-22289.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22288-22289.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22288-22289.diff	(revision 22755)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/test/NightlyRun/test333.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test333.m	(revision 22288)
++++ ../trunk-jpl/test/NightlyRun/test333.m	(revision 22289)
+@@ -70,4 +70,4 @@
+ 							mdfine.results.TransientSolution(9).SedimentHead,...
+ 							mdfine.results.TransientSolution(9).EplHead,...
+ 							mdfine.results.TransientSolution(9).SedimentHeadResidual,...
+-              md.results.TransientSolution(0).EplHead};
++              md.results.TransientSolution(1).EplHead};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22289-22290.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22289-22290.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22289-22290.diff	(revision 22755)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/src/m/classes/calvingdev2.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingdev2.m	(revision 22289)
++++ ../trunk-jpl/src/m/classes/calvingdev2.m	(revision 22290)
+@@ -8,6 +8,7 @@
+ 		stress_threshold_groundedice = 0.;
+ 		stress_threshold_floatingice = 0.;
+ 		height_above_floatation = 0.;
++		meltingrate   = NaN;
+ 	end
+ 	methods
+ 		function self = calvingdev2(varargin) % {{{
+@@ -29,14 +30,15 @@
+ 			end
+ 		end % }}}
+ 		function self = extrude(self,md) % {{{
+-			%extrude here
++			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+ 			%Default sigma max
+-			self.stress_threshold_groundedice = 1e6;
+-			self.stress_threshold_floatingice = 150e3;
+-			self.height_above_floatation= 0;
++			self.stress_threshold_groundedice = 1.e6;
++			self.stress_threshold_floatingice = 150.e3;
++			self.height_above_floatation= 0.;
++			self.meltingrate= 0.;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 			%Early return
+@@ -45,7 +47,7 @@
+ 			md = checkfield(md,'fieldname','calving.stress_threshold_groundedice','>',0,'nan',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','calving.stress_threshold_floatingice','>',0,'nan',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','calving.height_above_floatation','<=',0);
+-
++			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   Calving Dev2 parameters:'));
+@@ -52,7 +54,7 @@
+ 			fielddisplay(self,'stress_threshold_groundedice','sigma_max applied to grounded ice only [Pa]');
+ 			fielddisplay(self,'stress_threshold_floatingice','sigma_max applied to floating ice only [Pa]');
+ 			fielddisplay(self,'height_above_floatation','height above floatation that the ice tongue must reach before it can calve [m]');
+-
++			fielddisplay(self,'meltingrate','frontal undercutting melting rate at given location [m/a]');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			yts=md.constants.yts;
+@@ -60,6 +62,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_groundedice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold_floatingice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1, 'yts', md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','height_above_floatation', 'format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22289)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22290)
+@@ -77,6 +77,7 @@
+ 		case CalvingDev2Enum:
+ 			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
+ 			iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
++			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
+ 			break;
+ 		default:
+ 			_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+@@ -270,7 +271,7 @@
+ 			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+ 			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+ 			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+-			gr_input=basalelement->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
++			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+ 			break;
+ 		default:
+ 			_error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
+@@ -413,6 +414,7 @@
+ 				lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
+ 				if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
+ 				calvingrate_input->GetInputValue(&calvingrate,gauss);
++				meltingrate_input->GetInputValue(&meltingrate,gauss);
+ 				gr_input->GetInputValue(&groundedice,gauss);
+ 
+ 				//idea: no retreat on ice above critical calving height "calvinghaf" . Limit using regularized Heaviside function.
+@@ -437,7 +439,7 @@
+ 				if(norm_dlsf>1.e-10)
+ 				 for(i=0;i<dim;i++){ 
+ 					 c[i]=calvingrate*dlsf[i]/norm_dlsf; 
+-					 m[i]=0.;
++					 m[i]=meltingrate*dlsf[i]/norm_dlsf;
+ 				 }
+ 				else
+ 				 for(i=0;i<dim;i++){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22290-22291.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22290-22291.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22290-22291.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/plot/plot_googlemaps.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_googlemaps.m	(revision 22290)
++++ ../trunk-jpl/src/m/plot/plot_googlemaps.m	(revision 22291)
+@@ -84,6 +84,28 @@
+ colorm = getcolormap(options);
+ image_rgb = ind2rgb(uint16((data_grid - data_min)*(length(colorm)/(data_max-data_min))),colorm);
+ 
++if exist(options,'shaded'),
++	a    = -45;
++	scut = 0.2;
++	c    = 1;
++	% computes lighting from elevation gradient
++	[fx,fy] = gradient(data_grid,x_m,y_m);
++	fxy = -fx*sind(a) - fy*cosd(a);
++	clear fx fy % free some memory...
++	fxy(isnan(fxy)) = 0;
++
++	% computes maximum absolute gradient (median-style), normalizes, saturates and duplicates in 3-D matrix
++	r = repmat(max(min(fxy/nmedian(abs(fxy),1 - scut/100),1),-1),[1,1,3]);
++
++	% applies contrast using exponent
++	rp = (1 - abs(r)).^c;
++	image_rgb = image_rgb.*rp;
++
++	% lighter for positive gradient
++	k = find(r > 0);
++	image_rgb(k) = image_rgb(k) + (1 - rp(k));
++end
++
+ alpha=ones(size(data_grid));
+ alpha(find(~data_nan))=transparency;
+ alpha=repmat(alpha,[1 1 3]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22291-22292.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22291-22292.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22291-22292.diff	(revision 22755)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/src/m/classes/calvinghab.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvinghab.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvinghab.m	(revision 22292)
+@@ -0,0 +1,58 @@
++%CALVINGHAB class definition
++%
++%   Usage:
++%      calvinghab=calvinghab();
++
++classdef calvinghab
++	properties (SetAccess=public) 
++		flotation_fraction = 0.;
++		meltingrate   = NaN;
++	end
++	methods
++		function self = calvinghab(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('calvinghab');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							self.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%fraction q = .15 of the flotation thickness at the terminus by default
++			self.flotation_fraction = 0.15;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++			%Early return
++			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
++
++			md = checkfield(md,'fieldname','calving.flotation_fraction','>=',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   Calving Pi parameters:'));
++			fielddisplay(self,'flotation_fraction','fraction of flotation thickness at the terminus');
++			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++			yts=md.constants.yts;
++			WriteData(fid,prefix,'name','md.calving.law','data',5,'format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','flotation_fraction','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/calvingcrevassedepth.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingcrevassedepth.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/calvingcrevassedepth.m	(revision 22292)
+@@ -0,0 +1,63 @@
++%CALVINCREVASSEDEPTH class definition
++%
++%   Usage:
++%      calvingcrevassedepth=calvingcrevassedepth();
++
++classdef calvingcrevassedepth
++	properties (SetAccess=public) 
++		critical_fraction = 0.;
++		water_height = 0.;
++		meltingrate   = NaN;
++	end
++	methods
++		function self = calvingcrevassedepth(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('calvingcrevassedepth');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							self.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			% crticial fraction of thickness that surface and basal crevasses penetrate for calving onset
++			self.critical_fraction = 1.;
++			self.water_height = 0.;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++			%Early return
++			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
++
++			md = checkfield(md,'fieldname','calving.critical_fraction','>',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','calving.water_height','NaN',1,'Inf',1,'timeseries',1,'>=',0);
++			md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'timeseries',1,'>=',0);
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   Calving Pi parameters:'));
++			fielddisplay(self,'critical_fraction','critical fraction of thickness that surface and basal crevasses penetrate for calving onset');
++			fielddisplay(self,'water_height','water height in the crevasse [m]');
++			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++			yts=md.constants.yts;
++			WriteData(fid,prefix,'name','md.calving.law','data',6,'format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','critical_fraction','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','water_height','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
++			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/calvinglevermann.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvinglevermann.m	(revision 22291)
++++ ../trunk-jpl/src/m/classes/calvinglevermann.m	(revision 22292)
+@@ -53,7 +53,7 @@
+ 			yts=md.constants.yts;
+ 			WriteData(fid,prefix,'name','md.calving.law','data',3,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','coeff','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+ 		end % }}}
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22292-22293.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22292-22293.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22292-22293.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/dev/devpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/devpath.py	(revision 22292)
++++ ../trunk-jpl/src/m/dev/devpath.py	(revision 22293)
+@@ -18,6 +18,9 @@
+ 			if file.find(".pyc") == -1:
+ 				if root not in sys.path:
+ 					sys.path.append(root)
++
++#Also add the Nightly run directory
++sys.path.append(ISSM_DIR + '/test/NightlyRun')
+ 				
+ sys.path.append(ISSM_DIR + '/lib')
+ sys.path.append(ISSM_DIR + '/src/wrappers/python/.libs')
Index: /issm/oecreview/Archive/21724-22754/ISSM-22293-22294.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22293-22294.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22293-22294.diff	(revision 22755)
@@ -0,0 +1,927 @@
+Index: ../trunk-jpl/src/c/classes/AmrBamg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 22293)
++++ ../trunk-jpl/src/c/classes/AmrBamg.h	(revision 22294)
+@@ -20,9 +20,11 @@
+ 		IssmDouble icefront_distance;
+ 		IssmDouble thicknesserror_resolution;
+ 		IssmDouble thicknesserror_threshold;
++		IssmDouble thicknesserror_groupthreshold;
+ 		IssmDouble thicknesserror_maximum;
+ 		IssmDouble deviatoricerror_resolution;
+ 		IssmDouble deviatoricerror_threshold;
++		IssmDouble deviatoricerror_groupthreshold;
+ 		IssmDouble deviatoricerror_maximum;
+ 
+ 		/* Constructor, destructor etc*/
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp	(revision 22294)
+@@ -111,6 +111,9 @@
+ 	if(this->thicknesserror_threshold>0		&& !thicknesserror)	_error_("thicknesserror is NULL!\n");
+ 	if(this->groundingline_distance>0		&& !gl_distance)		_error_("gl_distance is NULL!\n");
+ 	if(this->icefront_distance>0				&& !if_distance)		_error_("if_distance is NULL!\n");
++	/*Attributes verifications*/
++	if(this->deviatoricerror_threshold>0	&& this->deviatoricerror_groupthreshold<DBL_EPSILON)	_error_("group threshold is too small!");
++	if(this->thicknesserror_threshold>0		&& this->thicknesserror_groupthreshold<DBL_EPSILON)	_error_("group threshold is too small!");
+ 
+ 	/*Intermediaries*/
+ 	bool verbose=VerboseSolution();
+@@ -228,8 +231,8 @@
+ 		/*Limits with lag*/
+ 		gl_distance_h = this->lag*gl_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
+ 		if_distance_h = this->lag*if_distance_hmax*std::pow(this->gradation,this->level_max-gmesh->Element(i)->Level());
+-		d_maxerror	  = 0.01*this->deviatoricerror_maximum;//itapopo definir melhor 0.05
+-		t_maxerror	  = 0.01*this->thicknesserror_maximum;//itapopo definir melhor 0.05
++		d_maxerror	  = this->deviatoricerror_groupthreshold*this->deviatoricerror_maximum;
++		t_maxerror	  = this->thicknesserror_groupthreshold*this->thicknesserror_maximum;
+ 		/*Get the sons of the father (sibilings)*/	
+ 		sons.clear();
+ 		gmesh->Element(i)->Father()->GetHigherSubElements(sons);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22294)
+@@ -2423,11 +2423,11 @@
+ 	bool* my_elements			= NULL; 
+ 	int* my_vertices			= NULL;
+ 	int elementswidth       = this->GetElementsWidth();//just tria elements in this version
+-	int amrtype;
++	int amrtype,basalforcing_model;
+ 	bool isgroundingline;
+ 
+ 	/*Branch to specific amr depending on requested method*/	
+-	parameters->FindParam(&amrtype,AmrTypeEnum);
++	this->parameters->FindParam(&amrtype,AmrTypeEnum);
+ 	switch(amrtype){
+ 		#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 		case AmrNeopzEnum: this->ReMeshNeopz(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist); break;
+@@ -2538,7 +2538,8 @@
+ 	GetMaskOfIceVerticesLSMx(this);
+ 
+ 	/*Insert MISMIP+ bed topography FIXME it could be stay in another place*/
+-	if(false) this->BedrockFromMismipPlus();
++	this->parameters->FindParam(&basalforcing_model,BasalforcingsEnum);
++	if(basalforcing_model==MismipFloatingMeltRateEnum) this->BedrockFromMismipPlus();
+ 
+ 	/*Adjust base, thickness and mask grounded ice leve set*/
+ 	this->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+@@ -2562,6 +2563,8 @@
+ 	/*Insert bedrock from mismip+ setup*/
+ 	/*This was used to Misomip project/simulations*/
+ 	
++	if(VerboseSolution())_printf0_("	call Mismip bedrock adjust module\n");
++
+ 	IssmDouble x,y,bx,by;
+ 	int numvertices 		= this->GetElementsWidth();
+ 	IssmDouble* xyz_list = NULL;
+@@ -2569,26 +2572,19 @@
+ 
+ 	for(int el=0;el<this->elements->Size();el++){
+       Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(el));
+- 		
+ 		element->GetVerticesCoordinates(&xyz_list);
+ 		for(int i=0;i<numvertices;i++){
+-			x = xyz_list[3*i+0];
+-			y = xyz_list[3*i+1];
+-			
+-			bx=-150.-728.8*pow(x/300000.,2)+343.91*pow(x/300000.,4)-50.57*pow(x/300000.,6);
+-			by=500./(1.+exp((-2./4000.)*(y-80000./2.-24000.)))+500./(1.+exp((2./4000.)*(y-80000./2.+24000.)));
+-			
+-			r[i] = -720.;
+-			if(bx+by>-720.) r[i] = bx+by;
++			x		= xyz_list[3*i+0];
++			y		= xyz_list[3*i+1];
++			bx		= -150.-728.8*pow(x/300000.,2)+343.91*pow(x/300000.,4)-50.57*pow(x/300000.,6);
++			by		= 500./(1.+exp((-2./4000.)*(y-80000./2.-24000.)))+500./(1.+exp((2./4000.)*(y-80000./2.+24000.)));
++			r[i]	= max(bx+by,-720.);
+ 		}	
+-
+ 		/*insert new bedrock*/
+ 		element->AddInput(BedEnum,&r[0],P1Enum);
+-		
+ 		/*Cleanup*/
+ 		xDelete<IssmDouble>(xyz_list);
+ 	}
+-
+    /*Delete*/
+    xDelete<IssmDouble>(r);
+ }
+@@ -2595,6 +2591,8 @@
+ /*}}}*/
+ void FemModel::AdjustBaseThicknessAndMask(void){/*{{{*/
+ 
++	if(VerboseSolution())_printf0_("	call adjust base and thickness module\n");
++	
+ 	int     numvertices = this->GetElementsWidth();
+    IssmDouble rho_water,rho_ice,density,base_float;
+    IssmDouble* phi     = xNew<IssmDouble>(numvertices);
+@@ -4742,9 +4740,11 @@
+ 	this->parameters->FindParam(&this->amrbamg->icefront_distance,AmrIceFrontDistanceEnum);
+ 	this->parameters->FindParam(&this->amrbamg->thicknesserror_resolution,AmrThicknessErrorResolutionEnum);
+ 	this->parameters->FindParam(&this->amrbamg->thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&this->amrbamg->thicknesserror_groupthreshold,AmrThicknessErrorGroupThresholdEnum);
+ 	this->parameters->FindParam(&this->amrbamg->thicknesserror_maximum,AmrThicknessErrorMaximumEnum);
+ 	this->parameters->FindParam(&this->amrbamg->deviatoricerror_resolution,AmrDeviatoricErrorResolutionEnum);
+ 	this->parameters->FindParam(&this->amrbamg->deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
++	this->parameters->FindParam(&this->amrbamg->deviatoricerror_groupthreshold,AmrDeviatoricErrorGroupThresholdEnum);
+ 	this->parameters->FindParam(&this->amrbamg->deviatoricerror_maximum,AmrDeviatoricErrorMaximumEnum);
+ 	/*Set BamgOpts*/
+ 	this->amrbamg->SetBamgOpts(hmin,hmax,err,gradation);
+@@ -4813,7 +4813,7 @@
+ 	IssmDouble* y								= NULL;
+ 	IssmDouble* z								= NULL;
+ 	int* index									= NULL;
+-	IssmDouble maxerror,threshold,resolution,length;
++	IssmDouble maxerror,threshold,groupthreshold,resolution,length;
+ 	IssmDouble L1,L2,L3;
+ 	int vid,v1,v2,v3;
+ 	bool refine;
+@@ -4821,20 +4821,23 @@
+ 	/*Fill variables*/
+ 	switch(errorestimator_type){
+ 		case ThicknessErrorEstimatorEnum: 
+-			threshold	= this->amrbamg->thicknesserror_threshold;
+-			resolution	= this->amrbamg->thicknesserror_resolution;
+-			maxerror		= this->amrbamg->thicknesserror_maximum;
++			threshold		= this->amrbamg->thicknesserror_threshold;
++			groupthreshold	= this->amrbamg->thicknesserror_groupthreshold;
++			resolution		= this->amrbamg->thicknesserror_resolution;
++			maxerror			= this->amrbamg->thicknesserror_maximum;
+ 			this->ThicknessZZErrorEstimator(&error_elements);//error is serial, but the calculation is parallel
+ 			break;
+ 		case DeviatoricStressErrorEstimatorEnum:
+-			threshold	= this->amrbamg->deviatoricerror_threshold;
+-			resolution	= this->amrbamg->deviatoricerror_resolution;
+-			maxerror		= this->amrbamg->deviatoricerror_maximum;
++			threshold		= this->amrbamg->deviatoricerror_threshold;
++			groupthreshold	= this->amrbamg->deviatoricerror_groupthreshold;
++			resolution		= this->amrbamg->deviatoricerror_resolution;
++			maxerror			= this->amrbamg->deviatoricerror_maximum;
+ 			this->ZZErrorEstimator(&error_elements);//error is serial, but the calculation is parallel
+ 			break;
+ 		default: _error_("not implemented yet");
+ 	}
+ 	if(!error_elements) _error_("error_elements is NULL!\n");
++	if(groupthreshold<DBL_EPSILON) _error_("group threshold is too small!");
+ 
+ 	/*Find the max of the estimators if it was not provided*/
+ 	if(maxerror<DBL_EPSILON){
+@@ -4872,7 +4875,7 @@
+ 		if(resolution/maxlength[i]>0.85){
+ 			for(int j=0;j<elementswidth;j++){
+ 				vid=index[i*elementswidth+j]-1;//Matlab to C indexing
+-				if(error_vertices[vid]>0.01*maxerror) refine=true;//itapopo must be better defined
++				if(error_vertices[vid]>groupthreshold*maxerror) refine=true;
+ 			}
+ 		}
+ 		/*Now, fill the hmaxvertices if requested*/	  
+@@ -5033,8 +5036,10 @@
+ 	this->parameters->FindParam(&this->amr->groundingline_distance,AmrGroundingLineDistanceEnum);
+ 	this->parameters->FindParam(&this->amr->icefront_distance,AmrIceFrontDistanceEnum);
+ 	this->parameters->FindParam(&this->amr->thicknesserror_threshold,AmrThicknessErrorThresholdEnum);
++	this->parameters->FindParam(&this->amr->thicknesserror_groupthreshold,AmrThicknessErrorGroupThresholdEnum);
+ 	this->parameters->FindParam(&this->amr->thicknesserror_maximum,AmrThicknessErrorMaximumEnum);
+ 	this->parameters->FindParam(&this->amr->deviatoricerror_threshold,AmrDeviatoricErrorThresholdEnum);
++	this->parameters->FindParam(&this->amr->deviatoricerror_groupthreshold,AmrDeviatoricErrorGroupThresholdEnum);
+ 	this->parameters->FindParam(&this->amr->deviatoricerror_maximum,AmrDeviatoricErrorMaximumEnum);
+ 	if(my_rank==0){ 
+ 		this->amr->CreateInitialMesh(numberofvertices,numberofelements,x,y,elements);
+Index: ../trunk-jpl/src/c/classes/AmrBamg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 22294)
+@@ -19,49 +19,51 @@
+ AmrBamg::AmrBamg(){/*{{{*/
+ 
+ 	/*These attributes MUST be setup by FemModel*/
+-	this->fieldenum    					= -1;//fieldenum_in;
+-	this->keepmetric   					= -1;//keepmetric_in;
+-	this->groundingline_resolution	= -1;//groundingline_resolution_in;
+-	this->groundingline_distance 		= -1;//groundingline_distance_in;
+-	this->icefront_resolution 			= -1;//icefront_resolution_in;
+-	this->icefront_distance 			= -1;//icefront_distance_in;
+-	this->thicknesserror_resolution 	= -1;//thicknesserror_resolution_in;
+-	this->thicknesserror_threshold 	= -1;//thicknesserror_threshold_in;
+-	this->thicknesserror_maximum		= -1;
+-	this->deviatoricerror_resolution = -1;//deviatoricerror_resolution_in;
+-	this->deviatoricerror_threshold  = -1;//deviatoricerror_threshold_in;
+-	this->deviatoricerror_maximum		= -1;
++	this->fieldenum								= -1;
++	this->keepmetric								= -1;
++	this->groundingline_resolution			= -1;
++	this->groundingline_distance				= -1;
++	this->icefront_resolution					= -1;
++	this->icefront_distance						= -1;
++	this->thicknesserror_resolution			= -1;
++	this->thicknesserror_threshold			= -1;
++	this->thicknesserror_groupthreshold 	= -1;
++	this->thicknesserror_maximum				= -1;
++	this->deviatoricerror_resolution			= -1;
++	this->deviatoricerror_threshold			= -1;
++	this->deviatoricerror_groupthreshold	= -1;
++	this->deviatoricerror_maximum				= -1;
+ 	
+ 	/*Geometry and mesh as NULL*/
+-	this->geometry     					= NULL;
+-	this->fathermesh   					= NULL;
+-	this->previousmesh 					= NULL;
++	this->geometry									= NULL;
++	this->fathermesh								= NULL;
++	this->previousmesh							= NULL;
+ 
+ 	/*Only initialize options for now (same as bamg.m)*/
+-	this->options = new BamgOpts();
+-	this->options->anisomax          = 10.e30;
+-	this->options->cutoff            = 10.e-5;
+-	this->options->coeff             = 1;
+-	this->options->errg              = 0.1;
+-	this->options->gradation         = -1; //MUST be setup by the FemModel 
+-	this->options->Hessiantype       = 0;
+-	this->options->maxnbv            = 1e6;
+-	this->options->maxsubdiv         = 10;
+-	this->options->Metrictype        = 0;
+-	this->options->nbjacobi          = 1;
+-	this->options->nbsmooth          = 3;
+-	this->options->omega             = 1.8;
+-	this->options->power             = 1;
+-	this->options->verbose           = 0;
+-	this->options->Crack             = 0;
+-	this->options->KeepVertices      = 1; /*!!!!! VERY IMPORTANT !!!!! This avoid numerical errors when remeshing*/
+-	this->options->splitcorners      = 1;
+-	this->options->hmin              = -1;/*MUST be setup by the FemModel*/
+-	this->options->hmax              = -1;/*MUST be setup by the FemModel*/
+-	this->options->err					= xNew<IssmDouble>(1);
+-	this->options->err[0]				= -1;/*MUST be setup by the FemModel*/
+-	this->options->errSize[0]			= 1;
+-	this->options->errSize[1]			= 1;
++	this->options									= new BamgOpts();
++	this->options->anisomax						= 10.e30;
++	this->options->cutoff						= 10.e-5;
++	this->options->coeff							= 1;
++	this->options->errg							= 0.1;
++	this->options->gradation					= -1; //MUST be setup by the FemModel 
++	this->options->Hessiantype					= 0;
++	this->options->maxnbv						= 1e6;
++	this->options->maxsubdiv					= 10;
++	this->options->Metrictype					= 0;
++	this->options->nbjacobi						= 1;
++	this->options->nbsmooth						= 3;
++	this->options->omega							= 1.8;
++	this->options->power							= 1;
++	this->options->verbose						= 0;
++	this->options->Crack							= 0;
++	this->options->KeepVertices				= 1; /*!!!!! VERY IMPORTANT !!!!! This avoid numerical errors when remeshing*/
++	this->options->splitcorners				= 1;
++	this->options->hmin							= -1;/*MUST be setup by the FemModel*/
++	this->options->hmax							= -1;/*MUST be setup by the FemModel*/
++	this->options->err							= xNew<IssmDouble>(1);
++	this->options->err[0]						= -1;/*MUST be setup by the FemModel*/
++	this->options->errSize[0]					= 1;
++	this->options->errSize[1]					= 1;
+ }
+ /*}}}*/
+ AmrBamg::~AmrBamg(){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22293)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22294)
+@@ -63,8 +63,10 @@
+ 	double groundingline_distance;		//all elements with distance from grounding line <= groundingline_distance will be refined
+ 	double icefront_distance;				//all elements with distance from ice front <= icefront_distance will be refined
+ 	double thicknesserror_threshold;		//if ==0, it will not be used
++	double thicknesserror_groupthreshold;//group threshold
+ 	double thicknesserror_maximum;		//max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+ 	double deviatoricerror_threshold;	//if ==0, it will not be used
++	double deviatoricerror_groupthreshold;//group threshold
+ 	double deviatoricerror_maximum;		//max value of the error estimator; in general, it is defined in the first time step. Attention with restart
+ 	/*}}}*/
+ 	/*Public methods{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22293)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22294)
+@@ -900,9 +900,11 @@
+ 	AmrIceFrontDistanceEnum,
+ 	AmrThicknessErrorResolutionEnum,
+ 	AmrThicknessErrorThresholdEnum,
++	AmrThicknessErrorGroupThresholdEnum,
+ 	AmrThicknessErrorMaximumEnum,
+ 	AmrDeviatoricErrorResolutionEnum,
+ 	AmrDeviatoricErrorThresholdEnum,
++	AmrDeviatoricErrorGroupThresholdEnum,
+ 	AmrDeviatoricErrorMaximumEnum,
+ 	DeviatoricStressErrorEstimatorEnum,
+ 	ThicknessErrorEstimatorEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22294)
+@@ -873,9 +873,11 @@
+ 		case AmrIceFrontDistanceEnum : return "AmrIceFrontDistance";
+ 		case AmrThicknessErrorResolutionEnum : return "AmrThicknessErrorResolution";
+ 		case AmrThicknessErrorThresholdEnum : return "AmrThicknessErrorThreshold";
++		case AmrThicknessErrorGroupThresholdEnum : return "AmrThicknessErrorGroupThreshold";
+ 		case AmrThicknessErrorMaximumEnum : return "AmrThicknessErrorMaximum";
+ 		case AmrDeviatoricErrorResolutionEnum : return "AmrDeviatoricErrorResolution";
+ 		case AmrDeviatoricErrorThresholdEnum : return "AmrDeviatoricErrorThreshold";
++		case AmrDeviatoricErrorGroupThresholdEnum : return "AmrDeviatoricErrorGroupThreshold";
+ 		case AmrDeviatoricErrorMaximumEnum : return "AmrDeviatoricErrorMaximum";
+ 		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+ 		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22294)
+@@ -894,9 +894,11 @@
+ 	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
++	      else if (strcmp(name,"AmrThicknessErrorGroupThreshold")==0) return AmrThicknessErrorGroupThresholdEnum;
+ 	      else if (strcmp(name,"AmrThicknessErrorMaximum")==0) return AmrThicknessErrorMaximumEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorGroupThreshold")==0) return AmrDeviatoricErrorGroupThresholdEnum;
+ 	      else if (strcmp(name,"AmrDeviatoricErrorMaximum")==0) return AmrDeviatoricErrorMaximumEnum;
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+ 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
++	      if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
++	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
++	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+Index: ../trunk-jpl/src/m/classes/amrneopz.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amrneopz.m	(revision 22293)
++++ ../trunk-jpl/src/m/classes/amrneopz.m	(revision 22294)
+@@ -5,16 +5,18 @@
+ 
+ classdef amrneopz
+ 	properties (SetAccess=public) 
+-		level_max						= 0; 
+-		gradation						= 0;
+-      lag 								= 0;
+-		groundingline_distance 		= 0;
+-      icefront_distance 			= 0;
+-      thicknesserror_threshold 	= 0;
+-      thicknesserror_maximum		= 0;
+-		deviatoricerror_threshold 	= 0;
+-		deviatoricerror_maximum		= 0;
+-		restart							= 0;
++		level_max								= 0; 
++		gradation								= 0;
++      lag										= 0;
++		groundingline_distance				= 0;
++      icefront_distance						= 0;
++      thicknesserror_threshold			= 0;
++      thicknesserror_groupthreshold 	= 0;
++      thicknesserror_maximum				= 0;
++		deviatoricerror_threshold			= 0;
++		deviatoricerror_groupthreshold	= 0;
++		deviatoricerror_maximum				= 0;
++		restart									= 0;
+ 	end
+    methods (Static)
+       %function self = loadobj(self) % {{{
+@@ -58,6 +60,9 @@
+ 			%2017 November 24th
+ 			%radius_level_max was deleted!
+ 
++			%2017 December 18th
++			%group threshold was inserted
++
+       %end% }}}
+    end
+ 	methods
+@@ -72,18 +77,20 @@
+ 		function self = setdefaultparameters(self) % {{{
+ 
+ 			%filter parameters:
+-			self.level_max			= 2;
+-			self.gradation			= 1.5;
+-			self.lag					= 1.1;
++			self.level_max								= 2;
++			self.gradation								= 1.5;
++			self.lag										= 1.1;
+ 		
+  			%other criterias
+-         self.groundingline_distance	= 10000;
+-         self.icefront_distance			= 0;
+-         self.thicknesserror_threshold = 0;
+-			self.thicknesserror_maximum	= 0; 
+-			self.deviatoricerror_threshold= 0;
+-			self.deviatoricerror_maximum	= 0;
+-			self.restart						= 0;
++         self.groundingline_distance			= 10000;
++         self.icefront_distance					= 0;
++         self.thicknesserror_threshold			= 0;
++         self.thicknesserror_groupthreshold	= 0;
++			self.thicknesserror_maximum			= 0; 
++			self.deviatoricerror_threshold		= 0;
++			self.deviatoricerror_groupthreshold = 0;
++			self.deviatoricerror_maximum			= 0;
++			self.restart								= 0;
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+@@ -93,8 +100,10 @@
+          md = checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         md = checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+          md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);			
++			md = checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);			
+          md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);		
+ 		   md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		end % }}}
+@@ -107,8 +116,10 @@
+          fielddisplay(self,'groundingline_distance',['distance around the grounding line which elements will be refined']);
+          fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
+          fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++         fielddisplay(self,'thicknesserror_groupthreshold',['maximum group threshold thickness error permitted']);
+          fielddisplay(self,'thicknesserror_maximum',['maximum thickness error permitted']);
+ 			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
++			fielddisplay(self,'deviatoricerror_groupthreshold',['maximum group threshold deviatoricstress error permitted']);
+ 			fielddisplay(self,'deviatoricerror_maximum',['maximum deviatoricstress error permitted']);
+          fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']);
+ 		end % }}}
+@@ -121,8 +132,10 @@
+          WriteData(fid,prefix,'object',self,'class','amr','fieldname','groundingline_distance','format','Double');
+          WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
+          WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++         WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_groupthreshold','format','Double');
+          WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_maximum','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_groupthreshold','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_maximum','format','Double');
+ 		   WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer');
+ 		end % }}}
+@@ -134,8 +147,10 @@
+ 			writejsdouble(fid,[modelname '.amr.groundingline_distance'],self.groundingline_distance);
+ 			writejsdouble(fid,[modelname '.amr.icefront_distance'],self.icefront_distance);
+ 			writejsdouble(fid,[modelname '.amr.thicknesserror_threshold'],self.thicknesserror_threshold);
++			writejsdouble(fid,[modelname '.amr.thicknesserror_groupthreshold'],self.thicknesserror_threshold);
+ 			writejsdouble(fid,[modelname '.amr.thicknesserror_maximum'],self.thicknesserror_maximum);
+ 			writejsdouble(fid,[modelname '.amr.deviatoricerror_threshold'],self.deviatoricerror_threshold);
++			writejsdouble(fid,[modelname '.amr.deviatoricerror_groupthreshold'],self.deviatoricerror_threshold);
+ 			writejsdouble(fid,[modelname '.amr.deviatoricerror_maximum'],self.deviatoricerror_maximum);
+ 			writejsdouble(fid,[modelname '.amr.restart'],self.restart);
+ 
+Index: ../trunk-jpl/src/m/classes/amr.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.js	(revision 22293)
++++ ../trunk-jpl/src/m/classes/amr.js	(revision 22294)
+@@ -6,22 +6,24 @@
+ function amr (){
+ 	//methods
+ 	this.setdefaultparameters = function(){// {{{
+-   	this.hmin       						= 100.;
+-      this.hmax		 						= 100.e3;
+-		this.fieldname 						= "Vel";
+-		this.err 								= 3.;
+-   	this.keepmetric             		= 1;
+-   	this.gradation       				= 1.5;
+-		this.groundingline_resolution	 	= 500.;
+-   	this.groundingline_distance   	= 0;
+-   	this.icefront_resolution     		= 500;
+-   	this.icefront_distance        	= 0;
+-      this.thicknesserror_resolution	= 500;
+-      this.thicknesserror_threshold 	= 0;
+-      this.thicknesserror_maximum		= 0;
+-      this.deviatoricerror_resolution	= 500;	
+-      this.deviatoricerror_threshold	= 0;	
+-      this.deviatoricerror_maximum		= 0;	
++   	this.hmin									= 100.;
++      this.hmax									= 100.e3;
++		this.fieldname								= "Vel";
++		this.err										= 3.;
++   	this.keepmetric							= 1;
++   	this.gradation								= 1.5;
++		this.groundingline_resolution			= 500.;
++   	this.groundingline_distance			= 0;
++   	this.icefront_resolution				= 500;
++   	this.icefront_distance					= 0;
++      this.thicknesserror_resolution		= 500;
++      this.thicknesserror_threshold			= 0;
++      this.thicknesserror_groupthreshold 	= 0;
++      this.thicknesserror_maximum			= 0;
++      this.deviatoricerror_resolution		= 500;	
++      this.deviatoricerror_threshold		= 0;	
++      this.deviatoricerror_groupthreshold	= 0;	
++      this.deviatoricerror_maximum			= 0;	
+ 	}// }}}
+ 	this.disp= function(){// {{{
+ 		console.log(sprintf('   amr parameters:'));
+@@ -36,9 +38,11 @@
+ 		fielddisplay(this,'icefront_distance','distance around the ice front which elements will be refined');
+ 		fielddisplay(this,'thicknesserror_resolution','element length when thickness error estimator is used');
+ 		fielddisplay(this,'thicknesserror_threshold','maximum threshold thickness error permitted');
++		fielddisplay(this,'thicknesserror_groupthreshold','maximum group threshold thickness error permitted');
+ 		fielddisplay(this,'thicknesserror_maximum','maximum thickness error permitted');
+ 		fielddisplay(this,'deviatoricerror_resolution','element length when deviatoric stress error estimator is used');
+ 		fielddisplay(this,'deviatoricerror_threshold','maximum threshold deviatoricstress error permitted');
++		fielddisplay(this,'deviatoricerror_groupthreshold','maximum group threshold deviatoricstress error permitted');
+ 		fielddisplay(this,'deviatoricerror_maximum','maximum deviatoricstress error permitted');
+ 	}// }}}
+ 	this.classname= function(){// {{{
+@@ -56,9 +60,11 @@
+          checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+          checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+          checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+          checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+          checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++         checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+          checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 		} // }}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+@@ -75,9 +81,11 @@
+          WriteData(fid,prefix,'object',this,'fieldname','icefront_distance','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_resolution','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_threshold','format','Double');
++         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_groupthreshold','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_maximum','format','Double');
+          WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_resolution','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','Double');
++         writedata(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','double');
++         writedata(fid,prefix,'object',this,'fieldname','deviatoricerror_groupthreshold','format','double');
+          WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_maximum','format','Double');
+ 		}//}}}
+ 		this.fix=function() { //{{{
+@@ -84,22 +92,24 @@
+ 		}//}}}
+ 	//properties 
+ 	// {{{
+-	this.hmin								= 0.;
+-	this.hmax								= 0.;
+-	this.fieldname							= "";
+-	this.err									= 0.;
+-	this.keepmetric						= 0;
+-	this.gradation							= 0.;
+-	this.groundingline_resolution		= 0.;
+-	this.groundingline_distance		= 0.;
+-	this.icefront_resolution			= 0.;
+-	this.icefront_distance				= 0.;
+-	this.thicknesserror_resolution	= 0.;
+-	this.thicknesserror_threshold		= 0.;
+-	this.thicknesserror_maximum		= 0.;
+-	this.deviatoricerror_resolution	= 0.;
+-	this.deviatoricerror_threshold	= 0.;
+-	this.deviatoricerror_maximum		= 0.;
++	this.hmin									= 0.;
++	this.hmax									= 0.;
++	this.fieldname								= "";
++	this.err										= 0.;
++	this.keepmetric							= 0;
++	this.gradation								= 0.;
++	this.groundingline_resolution			= 0.;
++	this.groundingline_distance			= 0.;
++	this.icefront_resolution				= 0.;
++	this.icefront_distance					= 0.;
++	this.thicknesserror_resolution		= 0.;
++	this.thicknesserror_threshold			= 0.;
++	this.thicknesserror_groupthreshold	= 0.;
++	this.thicknesserror_maximum			= 0.;
++	this.deviatoricerror_resolution		= 0.;
++	this.deviatoricerror_threshold		= 0.;
++	this.deviatoricerror_groupthreshold	= 0.;
++	this.deviatoricerror_maximum			= 0.;
+ 
+ 	this.setdefaultparameters();
+ 	//}}}
+Index: ../trunk-jpl/src/m/classes/amr.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.m	(revision 22293)
++++ ../trunk-jpl/src/m/classes/amr.m	(revision 22294)
+@@ -17,9 +17,11 @@
+ 		icefront_distance = 0.;
+ 		thicknesserror_resolution = 0.;
+ 		thicknesserror_threshold = 0.;
++		thicknesserror_groupthreshold = 0.;
+ 		thicknesserror_maximum = 0.;
+ 		deviatoricerror_resolution = 0.;
+ 		deviatoricerror_threshold = 0.;
++		deviatoricerror_groupthreshold = 0.;
+ 		deviatoricerror_maximum = 0.;
+ 		restart=0.;
+ 	end
+@@ -88,9 +90,11 @@
+ 			self.icefront_distance=0.;
+ 			self.thicknesserror_resolution=500.;
+ 			self.thicknesserror_threshold=0.;
++			self.thicknesserror_groupthreshold=0.;
+ 			self.thicknesserror_maximum=0.;
+ 			self.deviatoricerror_resolution=500.;
+ 			self.deviatoricerror_threshold=0.;
++			self.deviatoricerror_groupthreshold=0.;
+ 			self.deviatoricerror_maximum=0.;
+ 			
+ 			%is restart? This calls femmodel->ReMesh() before first time step. 
+@@ -110,9 +114,11 @@
+ 			md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++			md = checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 			md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1);
+ 		end % }}}
+@@ -130,9 +136,11 @@
+ 			fielddisplay(self,'icefront_distance',['distance around the ice front which elements will be refined']);
+ 			fielddisplay(self,'thicknesserror_resolution',['element length when thickness error estimator is used']);
+ 			fielddisplay(self,'thicknesserror_threshold',['maximum threshold thickness error permitted']);
++			fielddisplay(self,'thicknesserror_groupthreshold',['maximum group threshold thickness error permitted']);
+ 			fielddisplay(self,'thicknesserror_maximum',['maximum thickness error permitted']);
+ 			fielddisplay(self,'deviatoricerror_resolution',['element length when deviatoric stress error estimator is used']);
+ 			fielddisplay(self,'deviatoricerror_threshold',['maximum threshold deviatoricstress error permitted']);
++			fielddisplay(self,'deviatoricerror_groupthreshold',['maximum group threshold deviatoricstress error permitted']);
+ 			fielddisplay(self,'deviatoricerror_maximum',['maximum deviatoricstress error permitted']);
+ 			fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']);
+ 		end % }}}
+@@ -151,9 +159,11 @@
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','icefront_distance','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_resolution','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_groupthreshold','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','thicknesserror_maximum','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_resolution','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_groupthreshold','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','deviatoricerror_maximum','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer');
+ 
+Index: ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m	(revision 22293)
++++ ../trunk-jpl/src/m/contrib/tsantos/mismip/ice_evolution.m	(revision 22294)
+@@ -6,22 +6,23 @@
+ % usage:
+ %
+ % Default: y=40km, i0=1
+-% [ga iv ivaf GL_y nelem t] = ice_evolution(md);
++% [ga iv ivaf GL_y IF_y nelem t] = ice_evolution(md);
+ %
+ % Default: y=40km
+-% [ga iv ivaf GL_y nelem t] = ice_evolution(md,i0);
++% [ga iv ivaf GL_y IF_y nelem t] = ice_evolution(md,i0);
+ %
+ % Use this for y the borders (y=0 or y=ymax)
+-% [ga iv ivaf GL_y nelem t] = ice_evolution(md,i0,y);
++% [ga iv ivaf GL_y IF_y nelem t] = ice_evolution(md,i0,y);
+ %
+ %
+ 
+-function [ga iv ivaf GL_y nelem t] = ice_evolution(varargin),
++function [ga iv ivaf GL_y IF_y nelem t] = ice_evolution(varargin),
+ 
+ 	ga			= [];
+ 	iv			= [];
+ 	ivaf		= [];
+ 	GL_y		= [];
++	IF_y		= [];
+ 	nelem		= [];
+ 	t			= [];
+ 
+@@ -65,7 +66,7 @@
+ 			nelem(i)		= md.mesh.numberofelements;
+ 		end
+ 		t(i)			= md.results.TransientSolution(i).time;	
+-		%find GL position between y0 and y1 
++		%find GL position between y0 and y1 {{{
+ 		[glx gly]	= gl_position(md,i,0);
+ 		pos			= find(gly<y1 & gly>y0);
+ 		x				= gly(pos);
+@@ -86,7 +87,32 @@
+ 				error('pos is null')
+ 			end
+ 		end
+-
++		%}}}	
++		%find IF position between y0 and y1 {{{
++		[ifx ify]	= if_position(md,i,0);
++		if(length(ifx)==0)
++			continue
++		end
++		pos			= find(ify<y1 & ify>y0);
++		x				= ify(pos);
++		v				= ifx(pos);
++		if(length(pos)==0)
++			error('pos is null')
++		elseif(length(pos)==1)
++			%this should be used for y=0 or y=ymax
++			IF_y(i)	= v;
++		else
++			%this should be used when y is inside the domain; so, use linear interpolation
++			xq			= [y0:dy:y1];
++			vq			= interp1(x,v,xq,'linear');
++			pos		= find(xq==y);
++			if(pos)
++				IF_y(i)	= vq(pos);
++			else
++				error('pos is null')
++			end
++		end
++		%}}}
+ 	end
+ 
+ end
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22293)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22294)
+@@ -123,7 +123,18 @@
+ 	int amrtype,amr_frequency;
+ 	iomodel->FindConstant(&amr_frequency,"md.transient.amr_frequency");
+ 	if(solution_type==TransientSolutionEnum && amr_frequency){
++		/*Load common amr parameters*/
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.amr.type",AmrTypeEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_groupthreshold",AmrThicknessErrorGroupThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_maximum",AmrThicknessErrorMaximumEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_groupthreshold",AmrDeviatoricErrorGroupThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_maximum",AmrDeviatoricErrorMaximumEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.amr.restart",AmrRestartEnum));
++		/*Load specific amr parameters*/
+ 		iomodel->FindConstant(&amrtype,"md.amr.type");
+ 		switch(amrtype){
+ 			#ifdef _HAVE_NEOPZ_
+@@ -131,13 +142,6 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.gradation",AmrGradationEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.lag",AmrLagEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_maximum",AmrThicknessErrorMaximumEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_maximum",AmrDeviatoricErrorMaximumEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.restart",AmrRestartEnum));
+ 				break;
+ 			#endif
+ 
+@@ -149,16 +153,9 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.keepmetric",AmrKeepMetricEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.gradation",AmrGradationEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_resolution",AmrGroundingLineResolutionEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.groundingline_distance",AmrGroundingLineDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_resolution",AmrIceFrontResolutionEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.icefront_distance",AmrIceFrontDistanceEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_resolution",AmrThicknessErrorResolutionEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_threshold",AmrThicknessErrorThresholdEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.thicknesserror_maximum",AmrThicknessErrorMaximumEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_resolution",AmrDeviatoricErrorResolutionEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_threshold",AmrDeviatoricErrorThresholdEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.deviatoricerror_maximum",AmrDeviatoricErrorMaximumEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.amr.restart",AmrRestartEnum));
+ 				/*Convert fieldname to enum and put it in params*/
+ 				iomodel->FindConstant(&fieldname,"md.amr.fieldname");
+ 				parameters->AddObject(new IntParam(AmrFieldEnum,StringToEnumx(fieldname)));
+Index: ../trunk-jpl/src/m/classes/amr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.py	(revision 22293)
++++ ../trunk-jpl/src/m/classes/amr.py	(revision 22294)
+@@ -11,23 +11,25 @@
+     """
+ 
+     def __init__(self): # {{{
+-        self.hmin								= 0.
+-        self.hmax								= 0.
+-        self.fieldname						=''
+-        self.err 								= 0.
+-        self.keepmetric						= 0.
+-        self.gradation 						= 0.
+-        self.groundingline_resolution 	= 0.
+-        self.groundingline_distance 	= 0.
+-        self.icefront_resolution 		= 0.
+-        self.icefront_distance 			= 0.
+-        self.thicknesserror_resolution = 0.
+-        self.thicknesserror_threshold 	= 0.
+-        self.thicknesserror_maximum 	= 0.
+-        self.deviatoricerror_resolution= 0.
+-        self.deviatoricerror_threshold = 0.
+-        self.deviatoricerror_maximum	= 0.
+-	self.restart=0.
++        self.hmin										= 0.
++        self.hmax										= 0.
++        self.fieldname								=''
++        self.err 										= 0.
++        self.keepmetric								= 0.
++        self.gradation 								= 0.
++        self.groundingline_resolution 			= 0.
++        self.groundingline_distance 			= 0.
++        self.icefront_resolution 				= 0.
++        self.icefront_distance 					= 0.
++        self.thicknesserror_resolution 		= 0.
++        self.thicknesserror_threshold 			= 0.
++        self.thicknesserror_groupthreshold	= 0.
++        self.thicknesserror_maximum				= 0.
++        self.deviatoricerror_resolution		= 0.
++        self.deviatoricerror_threshold			= 0.
++        self.deviatoricerror_groupthreshold	= 0.
++        self.deviatoricerror_maximum			= 0.
++        self.restart                         = 0.
+         #set defaults
+         self.setdefaultparameters()
+     #}}}
+@@ -44,31 +46,35 @@
+         string="%s\n%s"%(string,fielddisplay(self,"icefront_distance","distance around the ice front which elements will be refined"))
+         string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_resolution","element length when thickness error estimator is used"))
+         string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_threshold","maximum threshold thickness error permitted"))
++        string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_groupthreshold","maximum group threshold thickness error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"thicknesserror_maximum","maximum thickness error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_resolution","element length when deviatoric stress error estimator is used"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_threshold","maximum threshold deviatoricstress error permitted"))
++        string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_groupthreshold","maximum group threshold deviatoric stress error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_maximum","maximum deviatoricstress error permitted"))
+-	string="%s\n%s"%(string,fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']))
++	     string="%s\n%s"%(string,fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']))
+         return string
+     #}}}
+     def setdefaultparameters(self): # {{{
+-        self.hmin								= 100.
+-        self.hmax								= 100.e3
+-        self.fieldname						= 'Vel'
+-        self.err 								= 3.
+-        self.keepmetric						= 1
+-        self.gradation 						= 1.5
+-        self.groundingline_resolution 	= 500.
+-        self.groundingline_distance 	= 0
+-        self.icefront_resolution 		= 500.
+-        self.icefront_distance 			= 0
+-        self.thicknesserror_resolution = 500.
+-        self.thicknesserror_threshold 	= 0
+-        self.thicknesserror_maximum 	= 0
+-        self.deviatoricerror_resolution= 500.
+-        self.deviatoricerror_threshold = 0
+-        self.deviatoricerror_maximum	= 0
+-	self.restart = 0.
++        self.hmin										= 100.
++        self.hmax										= 100.e3
++        self.fieldname								= 'Vel'
++        self.err 										= 3.
++        self.keepmetric								= 1
++        self.gradation 								= 1.5
++        self.groundingline_resolution 			= 500.
++        self.groundingline_distance 			= 0
++        self.icefront_resolution 				= 500.
++        self.icefront_distance 					= 0
++        self.thicknesserror_resolution 		= 500.
++        self.thicknesserror_threshold 			= 0
++        self.thicknesserror_groupthreshold 	= 0
++        self.thicknesserror_maximum				= 0
++        self.deviatoricerror_resolution		= 500.
++        self.deviatoricerror_threshold			= 0
++        self.deviatoricerror_groupthreshold	= 0
++        self.deviatoricerror_maximum			= 0
++        self.restart									= 0.
+         return self
+     #}}}
+     def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -82,11 +88,13 @@
+         md = checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+         md = checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+         md = checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++        md = checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+         md = checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+         md = checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',self.hmax,'NaN',1);
+         md = checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);        
++        md = checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);        
+         md = checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-	md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1)
++        md = checkfield(md,'fieldname','amr.restart','numel',[1],'>=',0,'<=',1,'NaN',1)
+         return md
+     # }}}
+     def marshall(self,prefix,md,fid):    # {{{
+@@ -103,9 +111,11 @@
+         WriteData(fid,prefix,'object',self,'fieldname','icefront_distance','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_resolution','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_threshold','format','Double');
++        WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_groupthreshold','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','thicknesserror_maximum','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_resolution','format','Double');
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_threshold','format','Double'); 
++        WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_groupthreshold','format','Double'); 
+         WriteData(fid,prefix,'object',self,'fieldname','deviatoricerror_maximum','format','Double'); 
+-	WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer')
++        WriteData(fid,prefix,'object',self,'class','amr','fieldname','restart','format','Integer')
+     # }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22294-22295.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22294-22295.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22294-22295.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/amr.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.py	(revision 22294)
++++ ../trunk-jpl/src/m/classes/amr.py	(revision 22295)
+@@ -52,7 +52,7 @@
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_threshold","maximum threshold deviatoricstress error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_groupthreshold","maximum group threshold deviatoric stress error permitted"))
+         string="%s\n%s"%(string,fielddisplay(self,"deviatoricerror_maximum","maximum deviatoricstress error permitted"))
+-	     string="%s\n%s"%(string,fielddisplay(self,'restart',['indicates if ReMesh() will call before first time step']))
++        string="%s\n%s"%(string,fielddisplay(self,"restart","indicates if ReMesh() will call before first time step"))
+         return string
+     #}}}
+     def setdefaultparameters(self): # {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22295-22296.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22295-22296.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22295-22296.diff	(revision 22755)
@@ -0,0 +1,631 @@
+Index: ../trunk-jpl/src/m/classes/settings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.m	(revision 22295)
++++ ../trunk-jpl/src/m/classes/settings.m	(nonexistent)
+@@ -1,110 +0,0 @@
+-%SETTINGS class definition
+-%
+-%   Usage:
+-%      settings=settings();
+-
+-classdef settings
+-	properties (SetAccess=public) 
+-		results_on_nodes    = 0;
+-		io_gather           = 0;
+-		lowmem              = 0;
+-		output_frequency    = 0;
+-		recording_frequency   = 0;
+-		waitonlock          = 0;
+-		upload_server       = '';
+-		upload_path         = '';
+-		upload_login        = '';
+-		upload_port         = 0;
+-		upload_filename     = '';
+-		solver_residue_threshold = 0;
+-	end
+-	methods
+-		function self = settings(varargin) % {{{
+-			switch nargin
+-				case 0
+-					self=setdefaultparameters(self);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			%are we short in memory ? (0 faster but requires more memory)
+-			self.lowmem=0;
+-
+-			%i/o:
+-			self.io_gather=1;
+-
+-			%results frequency by default every step
+-			self.output_frequency=1;
+-
+-			%checkpoints frequency, by default never: 
+-			self.recording_frequency=0;
+-
+-			%this option can be activated to load automatically the results
+-			%onto the model after a parallel run by waiting for the lock file
+-			%N minutes that is generated once the solution has converged
+-			%0 to deactivate
+-			self.waitonlock=Inf;
+-
+-			%upload options: 
+-			self.upload_port         = 0;
+-
+-			%throw an error if solver residue exceeds this value
+-			self.solver_residue_threshold = 1e-6;
+-
+-		end % }}}
+-		function md = checkconsistency(self,md,solution,analyses) % {{{
+-
+-			md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
+-			md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
+-			md = checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
+-			md = checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0);
+-
+-		end % }}}
+-		function disp(self) % {{{
+-			disp(sprintf('   general settings parameters:'));
+-
+-			fielddisplay(self,'results_on_nodes','results are output for all the nodes of each element');
+-			fielddisplay(self,'io_gather','I/O gathering strategy for result outputs (default 1)');
+-			fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)');
+-			fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+-			fielddisplay(self,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
+-			fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
+-			fielddisplay(self,'upload_server','server hostname where model should be uploaded');
+-			fielddisplay(self,'upload_path','path on server where model should be uploaded');
+-			fielddisplay(self,'upload_login','server login');
+-			fielddisplay(self,'upload_port','port login (default is 0)');
+-			fielddisplay(self,'upload_filename','unique id generated when uploading the file to server');
+-			fielddisplay(self,'solver_residue_threshold','throw an error if solver residue exceeds this value (NaN to deactivate)');
+-
+-		end % }}}
+-		function marshall(self,prefix,md,fid) % {{{
+-			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double');
+-		end % }}}
+-		function savemodeljs(self,fid,modelname) % {{{
+-		
+-			writejsdouble(fid,[modelname '.settings.results_on_nodes'],self.results_on_nodes);
+-			writejsdouble(fid,[modelname '.settings.io_gather'],self.io_gather);
+-			writejsdouble(fid,[modelname '.settings.lowmem'],self.lowmem);
+-			writejsdouble(fid,[modelname '.settings.output_frequency'],self.output_frequency);
+-			writejsdouble(fid,[modelname '.settings.recording_frequency'],self.recording_frequency);
+-			writejsdouble(fid,[modelname '.settings.waitonlock'],self.waitonlock);
+-			writejsstring(fid,[modelname '.settings.upload_server'],self.upload_server);
+-			writejsstring(fid,[modelname '.settings.upload_path'],self.upload_path);
+-			writejsstring(fid,[modelname '.settings.upload_login'],self.upload_login);
+-			writejsdouble(fid,[modelname '.settings.upload_port'],self.upload_port);
+-			writejsstring(fid,[modelname '.settings.upload_filename'],self.upload_filename);
+-			writejsstring(fid,[modelname '.settings.solver_residue_threshold'],self.solver_residue_threshold);
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/qmu/continuous_design.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 22295)
++++ ../trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 22296)
+@@ -30,198 +30,198 @@
+ %  to foreign countries or providing access to foreign persons."
+ %
+ classdef continuous_design
+-    properties
+-        descriptor='';
+-        initpt    = 0.;
+-        lower     =-Inf;
+-        upper     = Inf;
+-        scale_type='none';
+-        scale     = 1.;
+-    end
++	properties
++		descriptor='';
++		initpt    = 0.;
++		lower     =-Inf;
++		upper     = Inf;
++		scale_type='none';
++		scale     = 1.;
++	end
+ 
+-    methods
+-        function [cdv]=continuous_design(varargin)
++	methods
++		function [cdv]=continuous_design(varargin)
+ 
+-            switch nargin
++			switch nargin
+ 
+-%  create a default object
++				%  create a default object
+ 
+-                case 0
++				case 0
+ 
+-%  copy the object
++					%  copy the object
+ 
+-                case 1
+-                    if isa(varargin{1},'continuous_design')
+-                        cdv=varargin{1};
+-                    else
+-                        error('Object ''%s'' is a ''%s'' class object, not ''%s''.',...
+-                            inputname(1),class(varargin{1}),'continuous_design');
+-                    end
++				case 1
++					if isa(varargin{1},'continuous_design')
++						cdv=varargin{1};
++					else
++						error('Object ''%s'' is a ''%s'' class object, not ''%s''.',...
++							inputname(1),class(varargin{1}),'continuous_design');
++					end
+ 
+-%  create the object from the input
++					%  create the object from the input
+ 
+-                otherwise
+-                    asizec=num2cell(array_size(varargin{1:min(nargin,6)}));
+-                    cdv(asizec{:})=continuous_design;
+-                    clear asizec
++				otherwise
++					asizec=num2cell(array_size(varargin{1:min(nargin,6)}));
++					cdv(asizec{:})=continuous_design;
++					clear asizec
+ 
+-                    if ischar(varargin{1})
+-                        varargin{1}=cellstr(varargin{1});
+-                    end
+-                    for i=1:numel(cdv)
+-                        if (numel(varargin{1}) > 1)
+-                            cdv(i).descriptor=varargin{1}{i};
+-                        else
+-                            cdv(i).descriptor=[char(varargin{1}) string_dim(cdv,i,'vector')];
+-                        end
+-                    end
++					if ischar(varargin{1})
++						varargin{1}=cellstr(varargin{1});
++					end
++					for i=1:numel(cdv)
++						if (numel(varargin{1}) > 1)
++							cdv(i).descriptor=varargin{1}{i};
++						else
++							cdv(i).descriptor=[char(varargin{1}) string_dim(cdv,i,'vector')];
++						end
++					end
+ 
+-                    if (nargin >= 2)
+-                        for i=1:numel(cdv)
+-                            if (numel(varargin{2}) > 1)
+-                                cdv(i).initpt    =varargin{2}(i);
+-                            else
+-                                cdv(i).initpt    =varargin{2};
+-                            end
+-                        end
+-                        if (nargin >= 3)
+-                            for i=1:numel(cdv)
+-                                if (numel(varargin{3}) > 1)
+-                                    cdv(i).lower     =varargin{3}(i);
+-                                else
+-                                    cdv(i).lower     =varargin{3};
+-                                end
+-                            end
+-                            if (nargin >= 4)
+-                                for i=1:numel(cdv)
+-                                    if (numel(varargin{4}) > 1)
+-                                        cdv(i).upper     =varargin{4}(i);
+-                                    else
+-                                        cdv(i).upper     =varargin{4};
+-                                    end
+-                                end
+-                                if (nargin >= 5)
+-                                    if ischar(varargin{5})
+-                                        varargin{5}=cellstr(varargin{5});
+-                                    end
+-                                    for i=1:numel(cdv)
+-                                        if (numel(varargin{5}) > 1)
+-                                            cdv(i).scale_type=varargin{5}{i};
+-                                        else
+-                                            cdv(i).scale_type=char(varargin{5});
+-                                        end
+-                                    end
+-                                    if (nargin >= 6)
+-                                        for i=1:numel(cdv)
+-                                            if (numel(varargin{6}) > 1)
+-                                                cdv(i).scale     =varargin{6}(i);
+-                                            else
+-                                                cdv(i).scale     =varargin{6};
+-                                            end
+-                                        end
+-                                        if (nargin > 6)
+-                                            warning('continuous_design:extra_arg',...
+-                                                'Extra arguments for object of class ''%s''.',...
+-                                                class(cdv));
+-                                        end
+-                                    end
+-                                end
+-                            end
+-                        end
+-                    end
+-            end
++					if (nargin >= 2)
++						for i=1:numel(cdv)
++							if (numel(varargin{2}) > 1)
++								cdv(i).initpt    =varargin{2}(i);
++							else
++								cdv(i).initpt    =varargin{2};
++							end
++						end
++						if (nargin >= 3)
++							for i=1:numel(cdv)
++								if (numel(varargin{3}) > 1)
++									cdv(i).lower     =varargin{3}(i);
++								else
++									cdv(i).lower     =varargin{3};
++								end
++							end
++							if (nargin >= 4)
++								for i=1:numel(cdv)
++									if (numel(varargin{4}) > 1)
++										cdv(i).upper     =varargin{4}(i);
++									else
++										cdv(i).upper     =varargin{4};
++									end
++								end
++								if (nargin >= 5)
++									if ischar(varargin{5})
++										varargin{5}=cellstr(varargin{5});
++									end
++									for i=1:numel(cdv)
++										if (numel(varargin{5}) > 1)
++											cdv(i).scale_type=varargin{5}{i};
++										else
++											cdv(i).scale_type=char(varargin{5});
++										end
++									end
++									if (nargin >= 6)
++										for i=1:numel(cdv)
++											if (numel(varargin{6}) > 1)
++												cdv(i).scale     =varargin{6}(i);
++											else
++												cdv(i).scale     =varargin{6};
++											end
++										end
++										if (nargin > 6)
++											warning('continuous_design:extra_arg',...
++												'Extra arguments for object of class ''%s''.',...
++												class(cdv));
++										end
++									end
++								end
++							end
++						end
++					end
++			end
+ 
+-        end
++		end
+ 
+-        function []=disp(cdv)
++		function []=disp(cdv)
+ 
+-%  display the object
++			%  display the object
+ 
+-            disp(sprintf('\n'));
+-            for i=1:numel(cdv)
+-                disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
+-                    class(cdv),inputname(1),string_dim(cdv,i)));
+-                disp(sprintf('    descriptor: ''%s'''  ,cdv(i).descriptor));
+-                disp(sprintf('        initpt: %g'      ,cdv(i).initpt));
+-                disp(sprintf('         lower: %g'      ,cdv(i).lower));
+-                disp(sprintf('         upper: %g'      ,cdv(i).upper));
+-                disp(sprintf('    scale_type: ''%s'''  ,cdv(i).scale_type));
+-                disp(sprintf('         scale: %g\n'    ,cdv(i).scale));
+-            end
++			disp(sprintf('\n'));
++			for i=1:numel(cdv)
++				disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
++					class(cdv),inputname(1),string_dim(cdv,i)));
++				disp(sprintf('    descriptor: ''%s'''  ,cdv(i).descriptor));
++				disp(sprintf('        initpt: %g'      ,cdv(i).initpt));
++				disp(sprintf('         lower: %g'      ,cdv(i).lower));
++				disp(sprintf('         upper: %g'      ,cdv(i).upper));
++				disp(sprintf('    scale_type: ''%s'''  ,cdv(i).scale_type));
++				disp(sprintf('         scale: %g\n'    ,cdv(i).scale));
++			end
+ 
+-        end
++		end
+ 
+-        function [desc]  =prop_desc(cdv,dstr)
+-            desc=cell(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                if ~isempty(cdv(i).descriptor)
+-                    desc(i)=cellstr(cdv(i).descriptor);
+-                elseif ~isempty(inputname(1))
+-                    desc(i)=cellstr([inputname(1) string_dim(cdv,i,'vector')]);
+-                elseif exist('dstr','var')
+-                    desc(i)=cellstr([dstr         string_dim(cdv,i,'vector')]);
+-                else
+-                    desc(i)=cellstr(['cdv'        string_dim(cdv,i,'vector')]);
+-                end
+-            end
+-            desc=allempty(desc);
+-        end
+-        function [initpt]=prop_initpt(cdv)
+-            initpt=zeros(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                initpt(i)=cdv(i).initpt;
+-            end
+-            initpt=allequal(initpt,0.);
+-        end
+-        function [lower] =prop_lower(cdv)
+-            lower=zeros(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                lower(i)=cdv(i).lower;
+-            end
+-            lower=allequal(lower,-Inf);
+-        end
+-        function [upper] =prop_upper(cdv)
+-            upper=zeros(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                upper(i)=cdv(i).upper;
+-            end
+-            upper=allequal(upper, Inf);
+-        end
+-        function [mean]  =prop_mean(cdv)
+-            mean=[];
+-        end
+-        function [stddev]=prop_stddev(cdv)
+-            stddev=[];
+-        end
+-        function [initst]=prop_initst(cdv)
+-            initst=[];
+-        end
+-        function [stype] =prop_stype(cdv)
+-            stype=cell(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                stype(i)=cellstr(cdv(i).scale_type);
+-            end
+-            stype=allequal(stype,'none');
+-        end
+-        function [scale] =prop_scale(cdv)
+-            scale=zeros(1,numel(cdv));
+-            for i=1:numel(cdv)
+-                scale(i)=cdv(i).scale;
+-            end
+-            scale=allequal(scale,1.);
+-        end
+-    end
++		function [desc]  =prop_desc(cdv,dstr)
++			desc=cell(1,numel(cdv));
++			for i=1:numel(cdv)
++				if ~isempty(cdv(i).descriptor)
++					desc(i)=cellstr(cdv(i).descriptor);
++				elseif ~isempty(inputname(1))
++					desc(i)=cellstr([inputname(1) string_dim(cdv,i,'vector')]);
++				elseif exist('dstr','var')
++					desc(i)=cellstr([dstr         string_dim(cdv,i,'vector')]);
++				else
++					desc(i)=cellstr(['cdv'        string_dim(cdv,i,'vector')]);
++				end
++			end
++			desc=allempty(desc);
++		end
++		function [initpt]=prop_initpt(cdv)
++			initpt=zeros(1,numel(cdv));
++			for i=1:numel(cdv)
++				initpt(i)=cdv(i).initpt;
++			end
++			initpt=allequal(initpt,0.);
++		end
++		function [lower] =prop_lower(cdv)
++			lower=zeros(1,numel(cdv));
++			for i=1:numel(cdv)
++				lower(i)=cdv(i).lower;
++			end
++			lower=allequal(lower,-Inf);
++		end
++		function [upper] =prop_upper(cdv)
++			upper=zeros(1,numel(cdv));
++			for i=1:numel(cdv)
++				upper(i)=cdv(i).upper;
++			end
++			upper=allequal(upper, Inf);
++		end
++		function [mean]  =prop_mean(cdv)
++			mean=[];
++		end
++		function [stddev]=prop_stddev(cdv)
++			stddev=[];
++		end
++		function [initst]=prop_initst(cdv)
++			initst=[];
++		end
++		function [stype] =prop_stype(cdv)
++			stype=cell(1,numel(cdv));
++			for i=1:numel(cdv)
++				stype(i)=cellstr(cdv(i).scale_type);
++			end
++			stype=allequal(stype,'none');
++		end
++		function [scale] =prop_scale(cdv)
++			scale=zeros(1,numel(cdv));
++			for i=1:numel(cdv)
++				scale(i)=cdv(i).scale;
++			end
++			scale=allequal(scale,1.);
++		end
++	end
+ 
+-    methods (Static)
+-        function []=dakota_write(fidi,dvar)
++	methods (Static)
++		function []=dakota_write(fidi,dvar)
+ 
+-%  collect only the variables of the appropriate class
++			%  collect only the variables of the appropriate class
+ 
+-            cdv=struc_class(dvar,'continuous_design');
++			cdv=struc_class(dvar,'continuous_design');
+ 
+-%  write variables
++			%  write variables
+ 
+-            vlist_write(fidi,'continuous_design','cdv',cdv);
+-        end
+-    end
++			vlist_write(fidi,'continuous_design','cdv',cdv);
++		end
++	end
+ end
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 22295)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 22296)
+@@ -127,6 +127,11 @@
+ 			if isa(md.slr,'double'); md.slr=slr(); end
+ 			%2016 October 11
+ 			if isa(md.esa,'double'); md.esa=esa(); end
++			%2017 Dec 21st (needs to be here)
++			if isempty(md.settings)
++				disp('Warning: md.settings had to be reset, make sure to adjust md.settings.output_frequency and other fields');
++				md.settings = issmsettings();
++			end
+ 			%2017 February 10th
+ 			if md.settings.solver_residue_threshold==0,
+ 				md.settings.solver_residue_threshold = 1e-6;
+@@ -1145,7 +1150,7 @@
+ 			md.flowequation     = flowequation();
+ 			md.debug            = debug();
+ 			md.verbose          = verbose();
+-			md.settings         = settings();
++			md.settings         = issmsettings();
+ 			md.toolkits         = toolkits();
+ 			md.cluster          = generic();
+ 			md.balancethickness = balancethickness();
+Index: ../trunk-jpl/src/m/classes/issmsettings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/issmsettings.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/issmsettings.m	(revision 22296)
+@@ -0,0 +1,110 @@
++%ISSMSETTINGS class definition
++%
++%   Usage:
++%      issmsettings=issmsettings();
++
++classdef issmsettings
++	properties (SetAccess=public) 
++		results_on_nodes    = 0;
++		io_gather           = 0;
++		lowmem              = 0;
++		output_frequency    = 0;
++		recording_frequency   = 0;
++		waitonlock          = 0;
++		upload_server       = '';
++		upload_path         = '';
++		upload_login        = '';
++		upload_port         = 0;
++		upload_filename     = '';
++		solver_residue_threshold = 0;
++	end
++	methods
++		function self = issmsettings(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%are we short in memory ? (0 faster but requires more memory)
++			self.lowmem=0;
++
++			%i/o:
++			self.io_gather=1;
++
++			%results frequency by default every step
++			self.output_frequency=1;
++
++			%checkpoints frequency, by default never: 
++			self.recording_frequency=0;
++
++			%this option can be activated to load automatically the results
++			%onto the model after a parallel run by waiting for the lock file
++			%N minutes that is generated once the solution has converged
++			%0 to deactivate
++			self.waitonlock=Inf;
++
++			%upload options: 
++			self.upload_port         = 0;
++
++			%throw an error if solver residue exceeds this value
++			self.solver_residue_threshold = 1e-6;
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			md = checkfield(md,'fieldname','issmsettings.results_on_nodes','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','issmsettings.io_gather','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','issmsettings.lowmem','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','issmsettings.output_frequency','numel',[1],'>=',1);
++			md = checkfield(md,'fieldname','issmsettings.recording_frequency','numel',[1],'>=',0);
++			md = checkfield(md,'fieldname','issmsettings.waitonlock','numel',[1]);
++			md = checkfield(md,'fieldname','issmsettings.solver_residue_threshold','numel',[1],'>',0);
++
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   general issmsettings parameters:'));
++
++			fielddisplay(self,'results_on_nodes','results are output for all the nodes of each element');
++			fielddisplay(self,'io_gather','I/O gathering strategy for result outputs (default 1)');
++			fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)');
++			fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
++			fielddisplay(self,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
++			fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
++			fielddisplay(self,'upload_server','server hostname where model should be uploaded');
++			fielddisplay(self,'upload_path','path on server where model should be uploaded');
++			fielddisplay(self,'upload_login','server login');
++			fielddisplay(self,'upload_port','port login (default is 0)');
++			fielddisplay(self,'upload_filename','unique id generated when uploading the file to server');
++			fielddisplay(self,'solver_residue_threshold','throw an error if solver residue exceeds this value (NaN to deactivate)');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejsdouble(fid,[modelname '.issmsettings.results_on_nodes'],self.results_on_nodes);
++			writejsdouble(fid,[modelname '.issmsettings.io_gather'],self.io_gather);
++			writejsdouble(fid,[modelname '.issmsettings.lowmem'],self.lowmem);
++			writejsdouble(fid,[modelname '.issmsettings.output_frequency'],self.output_frequency);
++			writejsdouble(fid,[modelname '.issmsettings.recording_frequency'],self.recording_frequency);
++			writejsdouble(fid,[modelname '.issmsettings.waitonlock'],self.waitonlock);
++			writejsstring(fid,[modelname '.issmsettings.upload_server'],self.upload_server);
++			writejsstring(fid,[modelname '.issmsettings.upload_path'],self.upload_path);
++			writejsstring(fid,[modelname '.issmsettings.upload_login'],self.upload_login);
++			writejsdouble(fid,[modelname '.issmsettings.upload_port'],self.upload_port);
++			writejsstring(fid,[modelname '.issmsettings.upload_filename'],self.upload_filename);
++			writejsstring(fid,[modelname '.issmsettings.solver_residue_threshold'],self.solver_residue_threshold);
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22296-22297.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22296-22297.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22296-22297.diff	(revision 22755)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/m/classes/issmsettings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/issmsettings.m	(revision 22296)
++++ ../trunk-jpl/src/m/classes/issmsettings.m	(revision 22297)
+@@ -56,13 +56,13 @@
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+-			md = checkfield(md,'fieldname','issmsettings.results_on_nodes','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','issmsettings.io_gather','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','issmsettings.lowmem','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'fieldname','issmsettings.output_frequency','numel',[1],'>=',1);
+-			md = checkfield(md,'fieldname','issmsettings.recording_frequency','numel',[1],'>=',0);
+-			md = checkfield(md,'fieldname','issmsettings.waitonlock','numel',[1]);
+-			md = checkfield(md,'fieldname','issmsettings.solver_residue_threshold','numel',[1],'>',0);
++			md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
++			md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
++			md = checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
++			md = checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0);
+ 
+ 		end % }}}
+ 		function disp(self) % {{{
+@@ -83,28 +83,28 @@
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+-			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
+-			WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','results_on_nodes','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','io_gather','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','lowmem','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','output_frequency','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','recording_frequency','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','settings','fieldname','solver_residue_threshold','format','Double');
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+-			writejsdouble(fid,[modelname '.issmsettings.results_on_nodes'],self.results_on_nodes);
+-			writejsdouble(fid,[modelname '.issmsettings.io_gather'],self.io_gather);
+-			writejsdouble(fid,[modelname '.issmsettings.lowmem'],self.lowmem);
+-			writejsdouble(fid,[modelname '.issmsettings.output_frequency'],self.output_frequency);
+-			writejsdouble(fid,[modelname '.issmsettings.recording_frequency'],self.recording_frequency);
+-			writejsdouble(fid,[modelname '.issmsettings.waitonlock'],self.waitonlock);
+-			writejsstring(fid,[modelname '.issmsettings.upload_server'],self.upload_server);
+-			writejsstring(fid,[modelname '.issmsettings.upload_path'],self.upload_path);
+-			writejsstring(fid,[modelname '.issmsettings.upload_login'],self.upload_login);
+-			writejsdouble(fid,[modelname '.issmsettings.upload_port'],self.upload_port);
+-			writejsstring(fid,[modelname '.issmsettings.upload_filename'],self.upload_filename);
+-			writejsstring(fid,[modelname '.issmsettings.solver_residue_threshold'],self.solver_residue_threshold);
++			writejsdouble(fid,[modelname '.settings.results_on_nodes'],self.results_on_nodes);
++			writejsdouble(fid,[modelname '.settings.io_gather'],self.io_gather);
++			writejsdouble(fid,[modelname '.settings.lowmem'],self.lowmem);
++			writejsdouble(fid,[modelname '.settings.output_frequency'],self.output_frequency);
++			writejsdouble(fid,[modelname '.settings.recording_frequency'],self.recording_frequency);
++			writejsdouble(fid,[modelname '.settings.waitonlock'],self.waitonlock);
++			writejsstring(fid,[modelname '.settings.upload_server'],self.upload_server);
++			writejsstring(fid,[modelname '.settings.upload_path'],self.upload_path);
++			writejsstring(fid,[modelname '.settings.upload_login'],self.upload_login);
++			writejsdouble(fid,[modelname '.settings.upload_port'],self.upload_port);
++			writejsstring(fid,[modelname '.settings.upload_filename'],self.upload_filename);
++			writejsstring(fid,[modelname '.settings.solver_residue_threshold'],self.solver_residue_threshold);
+ 		end % }}}
+ 	end
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22297-22298.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22297-22298.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22297-22298.diff	(revision 22755)
@@ -0,0 +1,673 @@
+Index: ../trunk-jpl/src/m/classes/settings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.py	(revision 22297)
++++ ../trunk-jpl/src/m/classes/settings.py	(nonexistent)
+@@ -1,87 +0,0 @@
+-from fielddisplay import fielddisplay
+-from checkfield import checkfield
+-from WriteData import WriteData
+-
+-class settings(object):
+-	"""
+-	SETTINGS class definition
+-
+-	   Usage:
+-	      settings=settings();
+-	"""
+-
+-	def __init__(self): # {{{
+-		self.results_on_nodes    = 0
+-		self.io_gather           = 0
+-		self.lowmem              = 0
+-		self.output_frequency    = 0
+-		self.recording_frequency = 0
+-		self.waitonlock          = 0
+-		self.solver_residue_threshold = 0
+-
+-		#set defaults
+-		self.setdefaultparameters()
+-
+-		#}}}
+-	def __repr__(self): # {{{
+-		string="   general settings parameters:"
+-
+-		string="%s\n%s"%(string,fielddisplay(self,"results_on_nodes","results are output for all the nodes of each element"))
+-		string="%s\n%s"%(string,fielddisplay(self,"io_gather","I/O gathering strategy for result outputs (default 1)"))
+-		string="%s\n%s"%(string,fielddisplay(self,"lowmem","is the memory limited ? (0 or 1)"))
+-		string="%s\n%s"%(string,fielddisplay(self,"output_frequency","frequency at which results are saved in all solutions with multiple time_steps"))
+-		string="%s\n%s"%(string,fielddisplay(self,"recording_frequency","frequency at which the runs are being recorded, allowing for a restart"))
+-		string="%s\n%s"%(string,fielddisplay(self,"waitonlock","maximum number of minutes to wait for batch results, or return 0"))
+-		string="%s\n%s"%(string,fielddisplay(self,"solver_residue_threshold","throw an error if solver residue exceeds this value (NaN to deactivate)"))
+-		return string
+-		#}}}
+-	def setdefaultparameters(self): # {{{
+-		
+-		#are we short in memory ? (0 faster but requires more memory)
+-		self.lowmem=0
+-
+-		#i/o:
+-		self.io_gather=1
+-
+-		#results frequency by default every step
+-		self.output_frequency=1
+-
+-		#checkpoints frequency, by default never: 
+-		self.recording_frequency=0
+-
+-
+-		#this option can be activated to load automatically the results
+-		#onto the model after a parallel run by waiting for the lock file
+-		#N minutes that is generated once the solution has converged
+-		#0 to deactivate
+-		self.waitonlock=2**31-1
+-
+-      #throw an error if solver residue exceeds this value
+-		self.solver_residue_threshold=1e-6;
+-
+-		return self
+-	#}}}
+-	def checkconsistency(self,md,solution,analyses):    # {{{
+-		md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0,1])
+-		md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0,1])
+-		md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0,1])
+-		md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1)
+-		md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0)
+-		md = checkfield(md,'fieldname','settings.waitonlock','numel',[1])
+-		md = checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0)
+-
+-		return md
+-	# }}}
+-	def marshall(self,prefix,md,fid):    # {{{
+-		WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean')
+-		WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean')
+-		WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean')
+-		WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer')
+-		WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer')
+-		
+-		if self.waitonlock>0:
+-			WriteData(fid,prefix,'name','md.settings.waitonlock','data',True,'format','Boolean')
+-		else:
+-			WriteData(fid,prefix,'name','md.settings.waitonlock','data',False,'format','Boolean')
+-		WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double')
+-	# }}}
+Index: ../trunk-jpl/src/m/classes/settings.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.js	(revision 22297)
++++ ../trunk-jpl/src/m/classes/settings.js	(nonexistent)
+@@ -1,94 +0,0 @@
+-//SETTINGS class definition
+-//
+-//   Usage:
+-//      settings=new settings();
+-
+-function settings (){
+-	//methods
+-	this.setdefaultparameters = function(){// {{{
+-		//are we short in memory ? (0 faster but requires more memory)
+-		this.lowmem=0;
+-
+-		//i/o:
+-		this.io_gather=1;
+-
+-		//results frequency by default every step
+-		this.output_frequency=1;
+-
+-		//checkpoints frequency, by default never: 
+-		this.recording_frequency=0;
+-
+-		//this option can be activated to load automatically the results
+-		//onto the model after a parallel run by waiting for the lock file
+-		//N minutes that is generated once the solution has converged
+-		//0 to deactivate
+-		this.waitonlock=Infinity;
+-
+-		//upload options: 
+-		upload_port         = 0;
+-		
+-		//throw an error if solver residue exceeds this value
+-		this.solver_residue_threshold=1e-6;
+-
+-	}// }}}
+-	this.disp= function(){// {{{
+-		console.log(sprintf('   settings class echo:'));
+-		
+-		fielddisplay(this,'results_on_nodes','results are output for all the nodes of each element');
+-		fielddisplay(this,'io_gather','I/O gathering strategy for result outputs (default 1)');
+-		fielddisplay(this,'lowmem','is the memory limited ? (0 or 1)');
+-		fielddisplay(this,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+-		fielddisplay(this,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
+-		fielddisplay(this,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
+-		fielddisplay(this,'upload_server','server hostname where model should be uploaded');
+-		fielddisplay(this,'upload_path','path on server where model should be uploaded');
+-		fielddisplay(this,'upload_login','server login');
+-		fielddisplay(this,'upload_port','port login (default is 0)');
+-		fielddisplay(this,'upload_filename','unique id generated when uploading the file to server');
+-		fielddisplay(this,'solver_residue_threshold','throw an error if solver residue exceeds this value');
+-
+-
+-	}// }}}
+-	this.classname= function(){// {{{
+-		return "settings";
+-
+-	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { // {{{
+-
+-			checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
+-			checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
+-			checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
+-			checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0);
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'object',this,'fieldname','results_on_nodes','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','io_gather','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','lowmem','format','Boolean');
+-			WriteData(fid,prefix,'object',this,'fieldname','output_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','recording_frequency','format','Integer');
+-			WriteData(fid,prefix,'object',this,'fieldname','solver_residue_threshold','format','Double');
+-			if (this.waitonlock>0) WriteData(fid,prefix,'name','md.settings.waitonlock','data',true,'format','Boolean');
+-			else WriteData(fid,prefix,'name','md.settings.waitonlock','data',false,'format','Boolean');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
+-	//properties 
+-	// {{{
+-	this.results_on_nodes    = 0;
+-	this.io_gather           = 0;
+-	this.lowmem              = 0;
+-	this.output_frequency    = 0;
+-	this.recording_frequency   = 0;
+-	this.waitonlock          = 0;
+-	this.upload_server       = '';
+-	this.upload_path         = '';
+-	this.upload_login        = '';
+-	this.upload_port         = 0;
+-	this.upload_filename     = '';
+-	this.solver_residue_threshold = 0;
+-	this.setdefaultparameters();
+-	//}}}
+-}
+Index: ../trunk-jpl/src/m/classes/issmsettings.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/issmsettings.js	(nonexistent)
++++ ../trunk-jpl/src/m/classes/issmsettings.js	(revision 22298)
+@@ -0,0 +1,94 @@
++//ISSMSETTINGS class definition
++//
++//   Usage:
++//      issmsettings=new issmsettings();
++
++function issmsettings (){
++	//methods
++	this.setdefaultparameters = function(){// {{{
++		//are we short in memory ? (0 faster but requires more memory)
++		this.lowmem=0;
++
++		//i/o:
++		this.io_gather=1;
++
++		//results frequency by default every step
++		this.output_frequency=1;
++
++		//checkpoints frequency, by default never: 
++		this.recording_frequency=0;
++
++		//this option can be activated to load automatically the results
++		//onto the model after a parallel run by waiting for the lock file
++		//N minutes that is generated once the solution has converged
++		//0 to deactivate
++		this.waitonlock=Infinity;
++
++		//upload options: 
++		upload_port         = 0;
++		
++		//throw an error if solver residue exceeds this value
++		this.solver_residue_threshold=1e-6;
++
++	}// }}}
++	this.disp= function(){// {{{
++		console.log(sprintf('   issmsettings class echo:'));
++		
++		fielddisplay(this,'results_on_nodes','results are output for all the nodes of each element');
++		fielddisplay(this,'io_gather','I/O gathering strategy for result outputs (default 1)');
++		fielddisplay(this,'lowmem','is the memory limited ? (0 or 1)');
++		fielddisplay(this,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
++		fielddisplay(this,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
++		fielddisplay(this,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
++		fielddisplay(this,'upload_server','server hostname where model should be uploaded');
++		fielddisplay(this,'upload_path','path on server where model should be uploaded');
++		fielddisplay(this,'upload_login','server login');
++		fielddisplay(this,'upload_port','port login (default is 0)');
++		fielddisplay(this,'upload_filename','unique id generated when uploading the file to server');
++		fielddisplay(this,'solver_residue_threshold','throw an error if solver residue exceeds this value');
++
++
++	}// }}}
++	this.classname= function(){// {{{
++		return "issmsettings";
++
++	}// }}}
++		this.checkconsistency = function(md,solution,analyses) { // {{{
++
++			checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
++			checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
++			checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
++			checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0);
++		} // }}}
++		this.marshall=function(md,prefix,fid) { //{{{
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','results_on_nodes','format','Boolean');
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','io_gather','format','Boolean');
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','lowmem','format','Boolean');
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','output_frequency','format','Integer');
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','recording_frequency','format','Integer');
++			WriteData(fid,prefix,'object',this,'class','settings','fieldname','solver_residue_threshold','format','Double');
++			if (this.waitonlock>0) WriteData(fid,prefix,'name','md.settings.waitonlock','data',true,'format','Boolean');
++			else WriteData(fid,prefix,'name','md.settings.waitonlock','data',false,'format','Boolean');
++		}//}}}
++		this.fix=function() { //{{{
++		}//}}}
++	//properties 
++	// {{{
++	this.results_on_nodes    = 0;
++	this.io_gather           = 0;
++	this.lowmem              = 0;
++	this.output_frequency    = 0;
++	this.recording_frequency   = 0;
++	this.waitonlock          = 0;
++	this.upload_server       = '';
++	this.upload_path         = '';
++	this.upload_login        = '';
++	this.upload_port         = 0;
++	this.upload_filename     = '';
++	this.solver_residue_threshold = 0;
++	this.setdefaultparameters();
++	//}}}
++}
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22297)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22298)
+@@ -30,7 +30,7 @@
+ from slr import slr
+ from debug import debug
+ from verbose import verbose
+-from settings import settings
++from issmsettings import issmsettings
+ from toolkits import toolkits
+ from generic import generic
+ from pfe import pfe
+@@ -96,7 +96,7 @@
+ 
+ 		self.debug            = debug()
+ 		self.verbose          = verbose()
+-		self.settings         = settings()
++		self.settings         = issmsettings()
+ 		self.toolkits         = toolkits()
+ 		self.cluster          = generic()
+ 
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22297)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22298)
+@@ -68,7 +68,7 @@
+ 
+ 			this.debug            = new debug();
+ 			this.verbose          = new verbose();
+-			this.settings         = new settings();
++			this.settings         = new issmsettings();
+ 			this.toolkits         = new toolkits();
+ 			this.cluster          = new local();
+ 
+Index: ../trunk-jpl/src/m/classes/issmsettings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/issmsettings.py	(nonexistent)
++++ ../trunk-jpl/src/m/classes/issmsettings.py	(revision 22298)
+@@ -0,0 +1,87 @@
++from fielddisplay import fielddisplay
++from checkfield import checkfield
++from WriteData import WriteData
++
++class issmsettings(object):
++	"""
++	ISSMSETTINGS class definition
++
++	   Usage:
++	      issmsettings=issmsettings();
++	"""
++
++	def __init__(self): # {{{
++		self.results_on_nodes    = 0
++		self.io_gather           = 0
++		self.lowmem              = 0
++		self.output_frequency    = 0
++		self.recording_frequency = 0
++		self.waitonlock          = 0
++		self.solver_residue_threshold = 0
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		string="   general issmsettings parameters:"
++
++		string="%s\n%s"%(string,fielddisplay(self,"results_on_nodes","results are output for all the nodes of each element"))
++		string="%s\n%s"%(string,fielddisplay(self,"io_gather","I/O gathering strategy for result outputs (default 1)"))
++		string="%s\n%s"%(string,fielddisplay(self,"lowmem","is the memory limited ? (0 or 1)"))
++		string="%s\n%s"%(string,fielddisplay(self,"output_frequency","frequency at which results are saved in all solutions with multiple time_steps"))
++		string="%s\n%s"%(string,fielddisplay(self,"recording_frequency","frequency at which the runs are being recorded, allowing for a restart"))
++		string="%s\n%s"%(string,fielddisplay(self,"waitonlock","maximum number of minutes to wait for batch results, or return 0"))
++		string="%s\n%s"%(string,fielddisplay(self,"solver_residue_threshold","throw an error if solver residue exceeds this value (NaN to deactivate)"))
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		
++		#are we short in memory ? (0 faster but requires more memory)
++		self.lowmem=0
++
++		#i/o:
++		self.io_gather=1
++
++		#results frequency by default every step
++		self.output_frequency=1
++
++		#checkpoints frequency, by default never: 
++		self.recording_frequency=0
++
++
++		#this option can be activated to load automatically the results
++		#onto the model after a parallel run by waiting for the lock file
++		#N minutes that is generated once the solution has converged
++		#0 to deactivate
++		self.waitonlock=2**31-1
++
++      #throw an error if solver residue exceeds this value
++		self.solver_residue_threshold=1e-6;
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1)
++		md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0)
++		md = checkfield(md,'fieldname','settings.waitonlock','numel',[1])
++		md = checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0)
++
++		return md
++	# }}}
++	def marshall(self,prefix,md,fid):    # {{{
++		WriteData(fid,prefix,'object',self,'class','settings','fieldname','results_on_nodes','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','settings','fieldname','io_gather','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','settings','fieldname','lowmem','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','settings','fieldname','output_frequency','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','settings','fieldname','recording_frequency','format','Integer')
++		
++		if self.waitonlock>0:
++			WriteData(fid,prefix,'name','md.settings.waitonlock','data',True,'format','Boolean')
++		else:
++			WriteData(fid,prefix,'name','md.settings.waitonlock','data',False,'format','Boolean')
++		WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/matice.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/matice.js	(revision 22297)
++++ ../trunk-jpl/src/m/classes/matice.js	(revision 22298)
+@@ -5,139 +5,139 @@
+ 
+ function matice(){
+ 	//methods
+-		this.setdefaultparameters = function(){ // {{{
++	this.setdefaultparameters = function(){ // {{{
+ 
+-			//ice density (kg/m^3)
+-			this.rho_ice=917.;
++		//ice density (kg/m^3)
++		this.rho_ice=917.;
+ 
+-			//ocean water density (kg/m^3)
+-			this.rho_water=1023.;
++		//ocean water density (kg/m^3)
++		this.rho_water=1023.;
+ 
+-			//fresh water density (kg/m^3)
+-			this.rho_freshwater=1000.;
++		//fresh water density (kg/m^3)
++		this.rho_freshwater=1000.;
+ 
+-			//water viscosity (N.s/m^2)
+-			this.mu_water=0.001787;  
++		//water viscosity (N.s/m^2)
++		this.mu_water=0.001787;  
+ 
+-			//ice heat capacity cp (J/kg/K)
+-			this.heatcapacity=2093.;
++		//ice heat capacity cp (J/kg/K)
++		this.heatcapacity=2093.;
+ 
+-			//ice latent heat of fusion L (J/kg)
+-			this.latentheat=3.34*Math.pow(10,5);
++		//ice latent heat of fusion L (J/kg)
++		this.latentheat=3.34*Math.pow(10,5);
+ 
+-			//ice thermal conductivity (W/m/K)
+-			this.thermalconductivity=2.4;
+-			
+-			//wet ice thermal conductivity (W/m/K)
+-			this.temperateiceconductivity=.24;
++		//ice thermal conductivity (W/m/K)
++		this.thermalconductivity=2.4;
+ 
+-			//the melting point of ice at 1 atmosphere of pressure in K
+-			this.meltingpoint=273.15;
++		//wet ice thermal conductivity (W/m/K)
++		this.temperateiceconductivity=.24;
+ 
+-			//rate of change of melting point with pressure (K/Pa)
+-			this.beta=9.8*Math.pow(10,-8);
++		//the melting point of ice at 1 atmosphere of pressure in K
++		this.meltingpoint=273.15;
+ 
+-			//mixed layer (ice-water interface) heat capacity (J/kg/K)
+-			this.mixed_layer_capacity=3974.;
++		//rate of change of melting point with pressure (K/Pa)
++		this.beta=9.8*Math.pow(10,-8);
+ 
+-			//thermal exchange velocity (ice-water interface) (m/s)
+-			this.thermal_exchange_velocity=1.00*Math.pow(10,-4);
++		//mixed layer (ice-water interface) heat capacity (J/kg/K)
++		this.mixed_layer_capacity=3974.;
+ 
+-			//Rheology law: what is the temperature dependence of B with T
+-			//available: none, paterson and arrhenius
+-			this.rheology_law='Paterson';
++		//thermal exchange velocity (ice-water interface) (m/s)
++		this.thermal_exchange_velocity=1.00*Math.pow(10,-4);
+ 
+-			// GIA:
+-			this.lithosphere_shear_modulus  = 6.7*Math.pow(10,10);  // (Pa)
+-			this.lithosphere_density        = 3.32;       // (g/cm^-3)
+-			this.mantle_shear_modulus       = 1.45*Math.pow(10,11); // (Pa)
+-			this.mantle_density             = 3.34;       // (g/cm^-3)
+-			
+-			//SLR
+-			this.earth_density= 5512;  // average density of the Earth, (kg/m^3)
++		//Rheology law: what is the temperature dependence of B with T
++		//available: none, paterson and arrhenius
++		this.rheology_law='Paterson';
+ 
++		// GIA:
++		this.lithosphere_shear_modulus  = 6.7*Math.pow(10,10);  // (Pa)
++		this.lithosphere_density        = 3.32;       // (g/cm^-3)
++		this.mantle_shear_modulus       = 1.45*Math.pow(10,11); // (Pa)
++		this.mantle_density             = 3.34;       // (g/cm^-3)
+ 
+-		} //}}}
+-		this.disp = function() {// {{{
+-			console.log(sprintf('   Materials:'));
++		//SLR
++		this.earth_density= 5512;  // average density of the Earth, (kg/m^3)
+ 
+-			fielddisplay(this,'rho_ice','ice density [kg/m^3]');
+-			fielddisplay(this,'rho_water','ocean water density [kg/m^3]');
+-			fielddisplay(this,'rho_freshwater','fresh water density [kg/m^3]');
+-			fielddisplay(this,'mu_water','water viscosity [N s/m^2]');
+-			fielddisplay(this,'heatcapacity','heat capacity [J/kg/K]');
+-			fielddisplay(this,'thermalconductivity','ice thermal conductivity [W/m/K]');
+-			fielddisplay(this,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
+-			fielddisplay(this,'meltingpoint','melting point of ice at 1atm in K');
+-			fielddisplay(this,'latentheat','latent heat of fusion [J/kg]');
+-			fielddisplay(this,'beta','rate of change of melting point with pressure [K/Pa]');
+-			fielddisplay(this,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
+-			fielddisplay(this,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+-			fielddisplay(this,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+-			fielddisplay(this,'rheology_n',"Glen's flow law exponent");
+-			fielddisplay(this,'rheology_law',"law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'");
+-			fielddisplay(this,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+-			fielddisplay(this,'lithosphere_density','Lithosphere density [g/cm^-3]');
+-			fielddisplay(this,'mantle_shear_modulus','Mantle shear modulus [Pa]');
+-			fielddisplay(this,'mantle_density','Mantle density [g/cm^-3]');
+-			fielddisplay(this,'earth_density','Mantle density [kg/m^-3]');
+ 
+-		} // }}}
+-        this.extrude = function(md) {//{{{
+-            this.rheology_B=project3d(md,'vector',this.rheology_B,'type','node');
+-            this.rheology_n=project3d(md,'vector',this.rheology_n,'type','element');
+-            return this;
+-        }//}}}
+-		this.classname = function() {// {{{
+-			return "matice";
+-		} // }}}
+-		this.checkconsistency = function(md,solution,analyses) { // {{{
+-			checkfield(md,'fieldname','materials.rho_ice','>',0);
+-			checkfield(md,'fieldname','materials.rho_water','>',0);
+-			checkfield(md,'fieldname','materials.rho_freshwater','>',0);
+-			checkfield(md,'fieldname','materials.mu_water','>',0);
+-			checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1);
+-			checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1]);
+-			checkfield(md,'fieldname','materials.rheology_law','values',['None','BuddJacka','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval']);
++	} //}}}
++	this.disp = function() {// {{{
++		console.log(sprintf('   Materials:'));
+ 
+-			if(ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1)){
+-				checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
+-				checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
+-			}
+-			if (ArrayAnyEqual(ArrayIsMember('SealevelriseAnalysis',analyses),1)){
+-				checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
+-			}
++		fielddisplay(this,'rho_ice','ice density [kg/m^3]');
++		fielddisplay(this,'rho_water','ocean water density [kg/m^3]');
++		fielddisplay(this,'rho_freshwater','fresh water density [kg/m^3]');
++		fielddisplay(this,'mu_water','water viscosity [N s/m^2]');
++		fielddisplay(this,'heatcapacity','heat capacity [J/kg/K]');
++		fielddisplay(this,'thermalconductivity','ice thermal conductivity [W/m/K]');
++		fielddisplay(this,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
++		fielddisplay(this,'meltingpoint','melting point of ice at 1atm in K');
++		fielddisplay(this,'latentheat','latent heat of fusion [J/kg]');
++		fielddisplay(this,'beta','rate of change of melting point with pressure [K/Pa]');
++		fielddisplay(this,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
++		fielddisplay(this,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
++		fielddisplay(this,'rheology_B','flow law parameter [Pa/s^(1/n)]');
++		fielddisplay(this,'rheology_n',"Glen's flow law exponent");
++		fielddisplay(this,'rheology_law',"law for the temperature dependance of the rheology: 'None', 'BuddJacka', 'Cuffey', 'CuffeyTemperate', 'Paterson', 'Arrhenius' or 'LliboutryDuval'");
++		fielddisplay(this,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
++		fielddisplay(this,'lithosphere_density','Lithosphere density [g/cm^-3]');
++		fielddisplay(this,'mantle_shear_modulus','Mantle shear modulus [Pa]');
++		fielddisplay(this,'mantle_density','Mantle density [g/cm^-3]');
++		fielddisplay(this,'earth_density','Mantle density [kg/m^-3]');
+ 
++	} // }}}
++	this.extrude = function(md) {//{{{
++		this.rheology_B=project3d(md,'vector',this.rheology_B,'type','node');
++		this.rheology_n=project3d(md,'vector',this.rheology_n,'type','element');
++		return this;
++	}//}}}
++	this.classname = function() {// {{{
++		return "matice";
++	} // }}}
++	this.checkconsistency = function(md,solution,analyses) { // {{{
++		checkfield(md,'fieldname','materials.rho_ice','>',0);
++		checkfield(md,'fieldname','materials.rho_water','>',0);
++		checkfield(md,'fieldname','materials.rho_freshwater','>',0);
++		checkfield(md,'fieldname','materials.mu_water','>',0);
++		checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1]);
++		checkfield(md,'fieldname','materials.rheology_law','values',['None','BuddJacka','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval']);
+ 
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-			WriteData(fid,prefix,'name','md.materials.type','data',3,'format','Integer');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_ice','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_water','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_freshwater','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mu_water','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','heatcapacity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','latentheat','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermalconductivity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','temperateiceconductivity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','meltingpoint','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','beta','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,prefix,'data',this.rheology_law,'name','md.materials.rheology_law','format','String');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_density','format','Double','scale',Math.pow(10,3));
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_density','format','Double','scale',Math.pow(10,3));
+-			WriteData(fid,prefix,'object',this,'class','materials','fieldname','earth_density','format','Double');
++		if(ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1)){
++			checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
++			checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
++			checkfield(md,'fieldname','materials.mantle_shear_modulus','>',0,'numel',1);
++			checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
++		}
++		if (ArrayAnyEqual(ArrayIsMember('SealevelriseAnalysis',analyses),1)){
++			checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
++		}
+ 
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
++
++	} // }}}
++	this.marshall=function(md,prefix,fid) { //{{{
++		WriteData(fid,prefix,'name','md.materials.type','data',3,'format','Integer');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_ice','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_water','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_freshwater','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','mu_water','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','heatcapacity','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','latentheat','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermalconductivity','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','temperateiceconductivity','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','meltingpoint','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','beta','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','mixed_layer_capacity','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
++		WriteData(fid,prefix,'data',this.rheology_law,'name','md.materials.rheology_law','format','String');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_density','format','Double','scale',Math.pow(10,3));
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_shear_modulus','format','Double');
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_density','format','Double','scale',Math.pow(10,3));
++		WriteData(fid,prefix,'object',this,'class','materials','fieldname','earth_density','format','Double');
++
++	}//}}}
++	this.fix=function() { //{{{
++	}//}}}
+ 	//properties 
+ 	// {{{
+ 		this.rho_ice                    = 0.;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22298-22299.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22298-22299.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22298-22299.diff	(revision 22755)
@@ -0,0 +1,157 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 22298)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 22299)
+@@ -21,6 +21,10 @@
+ 	   Available options (for more details see ISSM website http://issm.jpl.nasa.gov/):
+ 
+ 	   - domain :            followed by an ARGUS file that prescribes the domain outline
++	   - holes :             followed by an ARGUS file that prescribes the holes
++     - subdomains :        followed by an ARGUS file that prescribes the list of
++	                         subdomains (that need to be inside domain)
++
+ 	   - hmin :              minimum edge length (default is 10^-100)
+ 	   - hmax :              maximum edge length (default is 10^100)
+ 	   - hVertices :         imposed edge length for each vertex (geometry or mesh)
+@@ -73,12 +77,11 @@
+ 	bamg_geometry=bamggeom()
+ 	bamg_mesh=bamgmesh()
+ 
+-        subdomain_ref = 1
+-        hole_ref = 1
++	subdomain_ref = 1
++	hole_ref = 1
+ 
+ 	# Bamg Geometry parameters {{{
+ 	if options.exist('domain'):
+-
+ 		#Check that file exists
+ 		domainfile=options.getfieldvalue('domain')
+ 		if type(domainfile) == str:
+@@ -91,35 +94,113 @@
+ 		#Build geometry 
+ 		count=0
+ 		for i,domaini in enumerate(domain):
+-
+ 			#Check that the domain is closed
+ 			if (domaini['x'][0]!=domaini['x'][-1] or domaini['y'][0]!=domaini['y'][-1]):
+ 				raise RuntimeError("bamg error message: all contours provided in ''domain'' should be closed")
+ 
+-			#Checks that all holes are INSIDE the principle domain outline
++			#Checks that all holes are INSIDE the principle domain outline princial domain should be index 0
+ 			if i:
+ 				flags=ContourToNodes(domaini['x'],domaini['y'],domainfile,0)[0]
+ 				if np.any(np.logical_not(flags)):
+ 					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
+ 
++			#Check orientation
++			nods=domaini['nods']-1#the domain are closed 1=end;
++
++			test = np.sum((domaini['x'][1:nods+1] - domaini['x'][0:nods])*(domaini['y'][1:nods+1] + domaini['y'][0:nods]))
++			if (i==0 and test>0) or (i>0 and test<0):
++				print('At least one contour was not correctly oriented and has been re-oriented')
++				domaini['x'] = np.flipud(domaini['x'])
++				domaini['y'] = np.flipud(domaini['y'])
++
++
+ 			#Add all points to bamg_geometry
+ 			nods=domaini['nods']-1    #the domain are closed 0=end
+ 			bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods],domaini['y'][0:nods],np.ones((nods)))).T))
+ 			bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
+-                        if i:
+-                            bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,-subdomain_ref]))
+-                            subdomain_ref = subdomain_ref+1;
+-                        else:
+-                            bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,0]))
+-
+-			# bamg_geometry.Vertices=np.hstack((bamg_geometry.Vertices,np.vstack((domaini['x'][0:nods].reshape(-1),domaini['y'][0:nods].reshape(-1),np.ones((nods))))))
+-			# bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.hstack((np.arange(count+1,count+nods+1).reshape(-1,),np.hstack((np.arange(count+2,count+nods+1),count+1)).reshape(-1,),1.*np.ones((nods,))))))
+-			# if i:
+-			# 	bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,1]))
+-
++			if i:
++				bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,-subdomain_ref]))
++				subdomain_ref = subdomain_ref+1;
++			else:
++				bamg_geometry.SubDomains=np.vstack((bamg_geometry.SubDomains,[2,count+1,1,0]))
++			
+ 			#update counter
+ 			count+=nods
+ 
++		#Deal with domain holes
++		if options.exist('holes'):
++			holesfile=options.getfieldvalue('holes')
++			if type(holesfile) == str:
++				if not os.path.exists(holesfile):
++					raise IOError("bamg error message: file '%s' not found" % holesfile)
++				holes=expread(holesfile)
++			else:
++				holes=holesfile
++
++			#Build geometry 
++			for i,holei in enumerate(holes):
++				#Check that the hole is closed
++				if (holei['x'][0]!=holei['x'][-1] or holei['y'][0]!=holei['y'][-1]):
++					raise RuntimeError("bamg error message: all contours provided in ''hole'' should be closed")
++
++				#Checks that all holes are INSIDE the principle domain outline princial domain should be index 0
++				flags=ContourToNodes(holei['x'],holei['y'],domainfile,0)[0]
++				if np.any(np.logical_not(flags)):
++					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
++
++				#Check orientation
++				nods=holei['nods']-1#the hole are closed 1=end;
++				test = np.sum((holei['x'][1:nods+1] - holei['x'][0:nods])*(holei['y'][1:nods+1] + holei['y'][0:nods]))
++				if test<0:
++					print('At least one hole was not correctly oriented and has been re-oriented')
++					holei['x'] = np.flipud(holei['x'])
++					holei['y'] = np.flipud(holei['y'])
++
++				#Add all points to bamg_geometry
++				nods=holei['nods']-1    #the hole are closed 0=end
++				bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((holei['x'][0:nods],holei['y'][0:nods],np.ones((nods)))).T))
++				bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
++				#update counter
++				count+=nods
++
++		#And subdomains
++		if options.exist('subdomains'):
++			subdomainfile=options.getfieldvalue('subdomains')
++			if type(subdomainfile) == str:
++				if not os.path.exists(subdomainfile):
++					raise IOError("bamg error message: file '%s' not found" % subdomainfile)
++				subdomains=expread(subdomainfile)
++			else:
++				subdomains=subdomainfile
++
++			#Build geometry 
++			for i,subdomaini in enumerate(subdomains):
++				#Check that the subdomain is closed
++				if (subdomaini['x'][0]!=subdomaini['x'][-1] or subdomaini['y'][0]!=subdomaini['y'][-1]):
++					raise RuntimeError("bamg error message: all contours provided in ''subdomain'' should be closed")
++
++				#Checks that all subdomains are INSIDE the principle subdomain outline princial domain should be index 0
++				if i:
++					flags=ContourToNodes(subdomaini['x'],subdomaini['y'],domainfile,0)[0]
++					if np.any(np.logical_not(flags)):
++						raise RuntimeError("bamg error message: All subdomains should be strictly inside the principal subdomain")
++
++				#Check orientation
++				nods=subdomaini['nods']-1#the subdomain are closed 1=end;
++
++				test = np.sum((subdomaini['x'][1:nods+1] - subdomaini['x'][0:nods])*(subdomaini['y'][1:nods+1] + subdomaini['y'][0:nods]))
++				if test>0:
++					print('At least one subcontour was not correctly oriented and has been re-oriented')
++					subdomaini['x'] = np.flipud(subdomaini['x'])
++					subdomaini['y'] = np.flipud(subdomaini['y'])
++
++				#Add all points to bamg_geometry
++				nods=subdomaini['nods']-1    #the subdomain are closed 0=end
++				bamg_geometry.Vertices=np.vstack((bamg_geometry.Vertices,np.vstack((subdomaini['x'][0:nods],subdomaini['y'][0:nods],np.ones((nods)))).T))
++				bamg_geometry.Edges   =np.vstack((bamg_geometry.Edges,np.vstack((np.arange(count+1,count+nods+1),np.hstack((np.arange(count+2,count+nods+1),count+1)),1.*np.ones((nods)))).T))
++				#update counter
++				count+=nods
++			
+ 		if options.getfieldvalue('vertical',0):
+ 			if np.size(options.getfieldvalue('Markers',[]))!=np.size(bamg_geometry.Edges,0):
+ 				raise RuntimeError('for 2d vertical mesh, ''Markers'' option is required, and should be of size ' + str(np.size(bamg_geometry.Edges,0)))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22299-22300.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22299-22300.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22299-22300.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 22299)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 22300)
+@@ -522,7 +522,7 @@
+ 
+ %Check for orphan
+ if any(~ismember(1:md.mesh.numberofvertices,sort(unique(reshape(md.mesh.elements,3*md.mesh.numberofelements,1)))))
+-	error('Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)');
++	error('Output mesh has orphans. Check your Domain and/or RequiredVertices');
+ end
+ end 
+ 
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 22299)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 22300)
+@@ -478,7 +478,7 @@
+ 
+ 	#Check for orphan
+ 	if np.any(np.logical_not(np.in1d(np.arange(1,md.mesh.numberofvertices+1),md.mesh.elements.flat))):
+-		raise RuntimeError("Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)")
++		raise RuntimeError("Output mesh has orphans. Check your Domain and/or RequiredVertices")
+ 
+ 	return md
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22300-22301.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22300-22301.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22300-22301.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 22300)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 22301)
+@@ -120,7 +120,7 @@
+ 				${ISSM_DIR}/src/m/classes/radaroverlay.js \
+ 				${ISSM_DIR}/src/m/classes/rifts.js \
+ 				${ISSM_DIR}/src/m/classes/slr.js \
+-				${ISSM_DIR}/src/m/classes/settings.js \
++				${ISSM_DIR}/src/m/classes/issmsettings.js \
+ 				${ISSM_DIR}/src/m/classes/SMBforcing.js \
+ 				${ISSM_DIR}/src/m/classes/steadystate.js \
+ 				${ISSM_DIR}/src/m/classes/stressbalance.js \
Index: /issm/oecreview/Archive/21724-22754/ISSM-22301-22302.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22301-22302.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22301-22302.diff	(revision 22755)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/m/os/issmscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpin.m	(revision 22301)
++++ ../trunk-jpl/src/m/os/issmscpin.m	(revision 22302)
+@@ -9,15 +9,11 @@
+ hostname=oshostname();
+ 
+ %first be sure packages are not in the current directory, this could conflict with pscp on windows. 
+-%get initial warning mode
+-state=warning('query', 'all');
+-%remove warnings in case the files do not exist
+-warning off
+ for i=1:numel(packages),
+-	delete(packages{i});
++	if exist(packages{i},'file'),
++		delete(packages{i});
++	end
+ end
+-%back to initial warning state
+-warning(state);
+ 
+ %if hostname and host are the same, do a simple copy
+ if strcmpi(hostname,host),
+@@ -49,8 +45,7 @@
+ 		end
+ 
+ 	else
+-		%just use standard unix scp
+-		%string to copy multiple files using scp: 
++		%just use standard unix scp string to copy multiple files using scp: 
+ 		if numel(packages)==1,
+ 			string=packages{1};
+ 		else
+Index: ../trunk-jpl/src/m/os/issmbbftpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmbbftpin.m	(revision 22301)
++++ ../trunk-jpl/src/m/os/issmbbftpin.m	(revision 22302)
+@@ -9,15 +9,11 @@
+ hostname=oshostname();
+ 
+ %first be sure packages are not in the current directory, this could conflict with pscp on windows. 
+-%get initial warning mode
+-state=warning('query', 'all');
+-%remove warnings in case the files do not exist
+-warning off
+ for i=1:numel(packages),
+-	delete(packages{i});
++	if exist(packages{i},'file'),
++		delete(packages{i});
++	end
+ end
+-%back to initial warning state
+-warning(state);
+ 
+ %if hostname and host are the same, do a simple copy
+ if strcmpi(hostname,host),
+@@ -30,7 +26,7 @@
+ 
+ 	%build a string of the type: bbftp -s -u elarour -e 'setnbstream 8; cd /nobackupp10/elarour/Testing/Interactive3/; get Antarctica.outbin' pfe1.nas.nasa.gov
+ 	command=['!bbftp -s -V -u ' login ' -e ''setnbstream 8; cd ' path '; '];
+-	for i=1:length(packages),
++	for i=1:numel(packages),
+ 		command=[command 'get ' packages{i} ';'];
+ 	end
+ 	command=[command '''  pfe22.nas.nasa.gov'];
+@@ -39,9 +35,8 @@
+ 
+ 	%check bbftp worked
+ 	for i=1:numel(packages),
+-		if ~exist(['./' packages{i}]),
++		if ~exist(['./' packages{i}],'file'),
+ 			error('scpin error message: could not call scp on *nix system');
+ 		end
+ 	end
+-
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22302-22303.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22302-22303.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22302-22303.diff	(revision 22755)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 22302)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 22303)
+@@ -154,6 +154,7 @@
+ 			WriteData(fid,prefix,'name','md.inversion.type','data',0,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','iscontrol','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'fieldname','incomplete_adjoint','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			if ~self.iscontrol, return; end
+ 			WriteData(fid,prefix,'object',self,'fieldname','nsteps','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
+Index: ../trunk-jpl/src/m/classes/inversionvalidation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversionvalidation.m	(revision 22302)
++++ ../trunk-jpl/src/m/classes/inversionvalidation.m	(revision 22303)
+@@ -124,6 +124,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
+ 				mattype=2; 
+ 			else
+Index: ../trunk-jpl/src/m/classes/m1qn3inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 22302)
++++ ../trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 22303)
+@@ -154,6 +154,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
+ 				mattype=2;
+ 			else
Index: /issm/oecreview/Archive/21724-22754/ISSM-22303-22304.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22303-22304.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22303-22304.diff	(revision 22755)
@@ -0,0 +1,493 @@
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 22303)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 22304)
+@@ -98,7 +98,7 @@
+ 			md = checkfield(md,'fieldname','flowequation.isHO','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'fieldname','flowequation.isFS','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'fieldname','flowequation.fe_SSA','values',{'P1','P1bubble','P1bubblecondensed','P2','P2bubble'});
+-			md = checkfield(md,'fieldname','flowequation.fe_HO' ,'values',{'P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2','P2bubble','P1xP3','P2xP4'});
++			md = checkfield(md,'fieldname','flowequation.fe_HO' ,'values',{'P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2','P2bubble','P1xP3','P1xP4','P2xP4'});
+ 			md = checkfield(md,'fieldname','flowequation.fe_FS' ,'values',{'P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood','LATaylorHood','XTaylorHood','OneLayerP4z','CrouzeixRaviart','LACrouzeixRaviart'});
+ 			md = checkfield(md,'fieldname','flowequation.augmented_lagrangian_r','numel',[1],'>=',0.);
+ 			md = checkfield(md,'fieldname','flowequation.augmented_lagrangian_rlambda','numel',[1],'>=',0.);
+Index: ../trunk-jpl/src/m/classes/balancethickness.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/balancethickness.m	(revision 22303)
++++ ../trunk-jpl/src/m/classes/balancethickness.m	(revision 22304)
+@@ -10,6 +10,8 @@
+ 		stabilization     = 0;
+ 
+ 		omega             = NaN;
++		slopex            = NaN;
++		slopey            = NaN;
+ 	end
+ 	methods
+ 		function self = balancethickness(varargin) % {{{
+@@ -52,6 +54,8 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+ 
++			WriteData(fid,prefix,'object',self,'fieldname','slopex','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','slopey','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','omega','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+Index: ../trunk-jpl/src/m/classes/materials.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/materials.m	(revision 22303)
++++ ../trunk-jpl/src/m/classes/materials.m	(revision 22304)
+@@ -15,203 +15,63 @@
+ 			else 
+ 				self.nature=varargin;
+ 			end
+-			
+-			%check this is acceptable: 
+-			for i=1:length(self.nature),
+-				if ~(strcmpi(self.nature{i},'litho') | strcmpi(self.nature{i},'ice')), 
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+-				end
+-			end
+-			
++
+ 			%start filling in the dynamic fields: 
+ 			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					self.addprop('rho_ice');
+-					self.addprop('rho_water');
+-					self.addprop('rho_freshwater');
+-					self.addprop('mu_water');
+-					self.addprop('heatcapacity');
+-					self.addprop('latentheat');
+-					self.addprop('thermalconductivity');
+-					self.addprop('temperateiceconductivity');
+-				    self.addprop('meltingpoint');
+-					self.addprop('beta');
+-					self.addprop('mixed_layer_capacity');
+-					self.addprop('thermal_exchange_velocity');
+-					self.addprop('rheology_B');
+-					self.addprop('rheology_n');
+-					self.addprop('rheology_law');
+-				case 'litho'
+-					self.addprop('numlayers');
+-				    self.addprop('radius');
+-					self.addprop('viscosity');
+-					self.addprop('lame_lambda');
+-					self.addprop('lame_mu');
+-					self.addprop('burgers_viscosity');
+-					self.addprop('burgers_mu');
+-					self.addprop('isburgers');
+-					self.addprop('density');
+-					self.addprop('issolid');
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++            list = listoffields(self,self.nature{i});
++            for j=1:size(list,1),
++					%Add property to materials
++               self.addprop(list{j,1});
++					%Set default value according to table
++					self.(list{j,1}) = list{j,2};
+ 				end
+ 			end
+-			%set default parameters:
+-			self.setdefaultparameters();
+ 
+ 		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					%ice density (kg/m^3)
+-					self.rho_ice=917.;
+-
+-					%ocean water density (kg/m^3)
+-					self.rho_water=1023.;
+-
+-					%fresh water density (kg/m^3)
+-					self.rho_freshwater=1000.;
+-
+-					%water viscosity (N.s/m^2)
+-					self.mu_water=0.001787;  
+-
+-					%ice heat capacity cp (J/kg/K)
+-					self.heatcapacity=2093.;
+-
+-					%ice latent heat of fusion L (J/kg)
+-					self.latentheat=3.34*10^5;
+-
+-					%ice thermal conductivity (W/m/K)
+-					self.thermalconductivity=2.4;
+-					
+-					%wet ice thermal conductivity (W/m/K)
+-					self.temperateiceconductivity=.24;
+-
+-					%the melting point of ice at 1 atmosphere of pressure in K
+-					self.meltingpoint=273.15;
+-
+-					%rate of change of melting point with pressure (K/Pa)
+-					self.beta=9.8*10^-8;
+-
+-					%mixed layer (ice-water interface) heat capacity (J/kg/K)
+-					self.mixed_layer_capacity=3974.;
+-
+-					%thermal exchange velocity (ice-water interface) (m/s)
+-					self.thermal_exchange_velocity=1.00*10^-4;
+-
+-					%Rheology law: what is the temperature dependence of B with T
+-					%available: none, paterson and arrhenius
+-					self.rheology_law='Paterson';
+-
+-				case 'litho'
+-					%we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 
+-					self.numlayers=2;
+-
+-					%center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
+-					%(with 1d3 to avoid numerical singularities) 
+-					self.radius=[1e3;6278*1e3;6378*1e3];
+-
+-					self.viscosity=[1e21;1e40]; %mantle and lithosphere viscosity (respectively) [Pa.s]
+-					self.lame_mu=[1.45*1e11;6.7*10^10];  % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa]
+-					self.lame_lambda=self.lame_mu;  % (Pa) %mantle and lithosphere lamba parameter (respectively) [Pa]
+-					self.burgers_viscosity=[NaN;NaN];
+-					self.burgers_mu=[NaN;NaN];
+-					self.isburgers=[0;0];
+-					self.density=[5.51*1e3;5.50*1e3];  % (Pa) %mantle and lithosphere density [kg/m^3]
+-					self.issolid=[1;1]; % is layer solid or liquid.
+-
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+-				end
+-			end
+-		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   Materials:'));
+ 
+ 			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					disp(sprintf('   \nIce:'));
+-					fielddisplay(self,'rho_ice','ice density [kg/m^3]');
+-					fielddisplay(self,'rho_water','ocean water density [kg/m^3]');
+-					fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]');
+-					fielddisplay(self,'mu_water','water viscosity [N s/m^2]');
+-					fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]');
+-					fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']);
+-					fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
+-					fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K');
+-					fielddisplay(self,'latentheat','latent heat of fusion [J/kg]');
+-					fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]');
+-					fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
+-					fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+-					fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+-					fielddisplay(self,'rheology_n','Glen''s flow law exponent');
+-					fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+-				case 'litho'
+-					disp(sprintf('   \nLitho:'));
+-					fielddisplay(self,'numlayers','number of layers (default 2)');
+-					fielddisplay(self,'radius','array describing the radius for each interface (numlayers+1) [m]');
+-					fielddisplay(self,'viscosity','array describing each layer''s viscosity (numlayers) [Pa.s]');
+-					fielddisplay(self,'lame_lambda','array describing the lame lambda parameter (numlayers) [Pa]');
+-					fielddisplay(self,'lame_mu','array describing the shear modulus for each layers (numlayers) [Pa]');
+-					fielddisplay(self,'burgers_viscosity','array describing each layer''s transient viscosity, only for Burgers rheologies  (numlayers) [Pa.s]');
+-					fielddisplay(self,'burgers_mu','array describing each layer''s transient shear modulus, only for Burgers rheologies  (numlayers) [Pa]');
+-					fielddisplay(self,'isburgers','array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)');
+-					fielddisplay(self,'density','array describing each layer''s density (numlayers) [kg/m^3]');
+-					fielddisplay(self,'issolid','array describing whether the layer is solid or liquid (default 1) (numlayers)');
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				list = listoffields(self,self.nature{i});
++				disp(sprintf('\n      %s:',upper(self.nature{i})));
++				for j=1:size(list,1),
++					fielddisplay(self,list{j,1},list{j,3});
+ 				end
+ 			end
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+-			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					md = checkfield(md,'fieldname','materials.rho_ice','>',0);
+-					md = checkfield(md,'fieldname','materials.rho_water','>',0);
+-					md = checkfield(md,'fieldname','materials.rho_freshwater','>',0);
+-					md = checkfield(md,'fieldname','materials.mu_water','>',0);
+-					md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1);
+-					md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+-					md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+-				case 'litho'
+-					if ~ismember('LoveAnalysis',analyses), return; end
+-					md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1);
+-					md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+-					md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+-					md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<',2);
+-					md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
+-					md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+-					md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<=',1);
+-					md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+-					md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++			if isprop(self,'rho_ice'), md = checkfield(md,'fieldname','materials.rho_ice','>',0); end
++			if isprop(self,'rho_water'), md = checkfield(md,'fieldname','materials.rho_water','>',0); end
++			if isprop(self,'rho_freshwater'), md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); end
++			if isprop(self,'mu_water'), md = checkfield(md,'fieldname','materials.mu_water','>',0); end
++			if isprop(self,'rheology_B'), md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1); end
++			if isprop(self,'rheology_n'), md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); end
++			if isprop(self,'rheology_law'), md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'}); end
++			if ~ismember('LoveAnalysis',analyses), return; end
++			if isprop(self,'numlayers'), md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1); end
++			if isprop(self,'radius'), md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0); end
++			if isprop(self,'lame_mu'), md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
++			if isprop(self,'lame_lambda'), md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
++			if isprop(self,'issolid'), md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<',2); end
++			if isprop(self,'density'), md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); end
++			if isprop(self,'viscosity'), md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
++			if isprop(self,'isburgers'), md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<=',1); end
++			if isprop(self,'burgers_viscosity'), md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
++			if isprop(self,'burgers_mu'), md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
+ 
+-					for i=1:md.materials.numlayers,
+-						if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 
+-							error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice');
+-						end
+-					end
+-					if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 
+-							error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.');
+-					end
+-					ind=find(md.materials.issolid==0);
+-					if sum(ismember(diff(ind),1)>=1) %if there are at least two consecutive indices that contain issolid = 0
+-							error(['Fluid layers detected at layers #', num2str(ind'), ', but having 2 or more adjacent fluid layers is not supported yet. Consider merging them.'])
+-					end
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++			for i=1:md.materials.numlayers,
++				if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 
++					error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice');
+ 				end
+ 			end
++			if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 
++				error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.');
++			end
++			ind=find(md.materials.issolid==0);
++			if sum(ismember(diff(ind),1)>=1) %if there are at least two consecutive indices that contain issolid = 0
++				error(['Fluid layers detected at layers #', num2str(ind'), ', but having 2 or more adjacent fluid layers is not supported yet. Consider merging them.'])
++			end
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -220,110 +80,119 @@
+ 			WriteData(fid,prefix,'name','md.materials.type','data',6,'format','Integer');
+ 			WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3);
+ 
+-			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-					WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
+-				case 'litho'
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer');
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3);
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); 
+-					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); 
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+-				end
+-			end
++			if isprop(self,'rho_ice'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); end
++			if isprop(self,'rho_water'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double'); end
++			if isprop(self,'rho_freshwater'),            WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); end
++			if isprop(self,'mu_water'),                  WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double'); end
++			if isprop(self,'heatcapacity'),              WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); end
++			if isprop(self,'latentheat'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double'); end
++			if isprop(self,'thermalconductivity'),       WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); end
++			if isprop(self,'temperateiceconductivity'),  WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); end
++			if isprop(self,'meltingpoint'),              WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); end
++			if isprop(self,'beta'),                      WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double'); end
++			if isprop(self,'mixed_layer_capacity'),      WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); end
++			if isprop(self,'thermal_exchange_velocity'), WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); end
++			if isprop(self,'rheology_B'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); end
++			if isprop(self,'rheology_n'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); end
++			if isprop(self,'rheology_law'),              Write Data(fid,prefix,'data',self.rheology_law,'nae','md.materials.rheology_law','format','String'); end
++			if isprop(self,'numlayers'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer'); end
++			if isprop(self,'radius'),                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3); end
++			if isprop(self,'lame_mu'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3); end
++			if isprop(self,'lame_lambda'),               WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3); end
++			if isprop(self,'issolid'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3); end
++			if isprop(self,'density'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); end
++			if isprop(self,'viscosity'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); end
++			if isprop(self,'isburgers'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); end
++			if isprop(self,'burgers_viscosity'),         WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); end
++			if isprop(self,'burgers_mu'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); end
++	end % }}}
++		function self = extrude(self,md) % {{{
++			if isprop(self,'rheology_B'), self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); end
++			if isprop(self,'rheology_n'), self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element'); end
+ 		end % }}}
+-		function self = extrude(self,md) % {{{
+-			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
+-				case 'ice'
+-					self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node');
+-					self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element');
++		function savemodeljs(self,fid,modelname) % {{{
++
++			proplist = properties(self);
++
++			for i=1:numel(proplist),
++				if numel(self.(proplist{i}))==1,
++					writejsdouble(fid,[modelname '.materials.' proplist{i}],self.(proplist{i}));
++				elseif size(self.(proplist{i}),2)==1,
++					writejs1Darray(fid,[modelname '.materials.' proplist{i}],self.(proplist{i}));
++				else
++					error('not supported yet');
+ 				end
+ 			end
+ 		end % }}}
+-		function savemodeljs(self,fid,modelname) % {{{
+-	
+-			for i=1:length(self.nature),
+-				nat=self.nature{i}; 
+-				switch nat
++		function list = listoffields(self,nat) % {{{
++
++			switch nat
+ 				case 'ice'
+-					writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice);
+-					writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water);
+-					writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater);
+-					writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water);
+-					writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity);
+-					writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat);
+-					writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity);
+-					writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity);
+-					writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint);
+-					writejsdouble(fid,[modelname '.materials.beta'],self.beta);
+-					writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
+-					writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity);
+-					writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
+-					writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B);
+-					writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n);
+-					writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
++					list={...
++						'rho_ice'                   , 917., 'ice density [kg/m^3]'; ...
++						'rho_water'                 ,1023., 'ocean water density [kg/m^3]'; ...
++						'rho_freshwater'            ,1000., 'fresh water density [kg/m^3]';...
++						'mu_water'                  ,0.001787, 'water viscosity [N s/m^2]';...
++						'heatcapacity'              ,2093., 'heat capacity [J/kg/K]';...
++						'latentheat'                ,3.34e5, 'latent heat of fusion [J/kg]';...
++						'thermalconductivity'       ,2.4, 'ice thermal conductivity [W/m/K]';...
++						'temperateiceconductivity'  ,.24, 'temperate ice thermal conductivity [W/m/K]';...
++						'meltingpoint'              ,273.15, 'melting point of ice at 1 atm in K';...
++						'beta'                      ,9.8e-8 'rate of change of melting point with pressure [K/Pa]';...
++						'mixed_layer_capacity'      ,3974., 'mixed layer capacity [W/kg/K]'; ...
++						'thermal_exchange_velocity' ,1e-4 'thermal exchange velocity [m/s]'; ...
++						'rheology_B'                ,NaN, 'flow law parameter [Pa/s^(1/n)]'; ...
++						'rheology_n'                ,NaN, 'Glen''s flow law exponent'; ...
++						'rheology_law'              ,'Paterson','law for the temperature dependance of the rheology: ''None'' , ''BuddJacka'' , Cuffey'' , ''CuffeyTemperate'' , ''Paterson'' , ''Arrhenius'' or ''LliboutryDuval'''};
++				case 'damageice'
++					list = listoffields(self,'ice'),
++				case 'enhancedice'
++					list = listoffields(self,'ice');
++					list(end+1,:) = {'rheology_E',NaN,'enhancement factor'};
++				case 'estarice'
++					list = listoffields(self,'ice');
++					list(end+1,:) = {'rheology_Ec',NaN,'compressive enhancement factor'};
++					list(end+1,:) = {'rheology_Es',NaN,'shear enhancement factor'};
++					list(find(strcmp(list(:,1),'rheology_n')),:) = [];
+ 				case 'litho'
+-					writejsdouble(fid,[modelname '.materials.numlayers'],self.numlayers);
+-					writejsdouble(fid,[modelname '.materials.radius'],self.radius);
+-					writejsdouble(fid,[modelname '.materials.lame_mu'],self.lame_mu);
+-					writejsdouble(fid,[modelname '.materials.lame_lambda'],self.lame_lambda);
+-					writejsdouble(fid,[modelname '.materials.issolid'],self.issolid);
+-					writejsdouble(fid,[modelname '.materials.density'],self.density); 
+-					writejsdouble(fid,[modelname '.materials.viscosity'],self.viscosity); 
+-					writejsdouble(fid,[modelname '.materials.isburgers'],self.isburgers); 
+-					writejsdouble(fid,[modelname '.materials.burgers_viscosity'],self.burgers_viscosity); 
+-					writejsdouble(fid,[modelname '.materials.burgers_mu'],self.burgers_mu); 
++					%Note for the radius:
++					%   center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
++					%   (with 1d3 to avoid numerical singularities) 
++					%Note: here we consider by default two layers: mantle and lithosphere
++					list={...
++						'numlayers'         ,2, 'number of layers (default 2)'; ...
++						'radius'            ,[1e3;6278*1e3;6378*1e3] 'array describing the radius for each interface (numlayers+1) [m]'; ...
++						'viscosity'         ,[1e21;1e40], 'array describing each layer''s viscosity (numlayers) [Pa.s]'; ...
++						'lame_lambda'       ,[1.45e11;6.7e10], 'array describing the lame lambda parameter (numlayers) [Pa]'; ...
++						'lame_mu'           ,[1.45e11;6.7e10], 'array describing the shear modulus for each layers (numlayers) [Pa]'; ...
++						'burgers_viscosity' ,[NaN;NaN], 'array describing each layer''s transient viscosity, only for Burgers rheologies  (numlayers) [Pa.s]',...
++						'burgers_mu'        ,[0;0], 'array describing each layer''s transient shear modulus, only for Burgers rheologies  (numlayers) [Pa]'; ...
++						'isburgers'         ,0, 'array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)'; ...
++						'density'           ,[5.51*1e3;5.50*1e3], 'array describing each layer''s density (numlayers) [kg/m^3]'; ...
++						'issolid'           ,[1;1], 'array describing whether the layer is solid or liquid (default 1) (numlayers)'
++					}
+ 				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+-				end
++					error('nature of the material not supported yet!');
+ 			end
+-
+-
+-
+ 		end % }}}
+-	end
+-end
+ 		function intnat = naturetointeger(strnat) % {{{
+ 			intnat=zeros(length(strnat),1);
+ 			for i=1:length(strnat),
+ 				switch strnat{i},
+-				case 'damageice'
+-					intnat(i)=1; 
+-				case 'estar'
+-					intnat(i)=2; 
+-				case 'ice'
+-					intnat(i)=3; 
+-				case 'enhancedice'
+-					intnat(i)=4; 
+-				case 'litho'
+-					intnat(i)=5;
+-				otherwise
+-					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++					case 'damageice'
++						intnat(i)=1; 
++					case 'estar'
++						intnat(i)=2; 
++					case 'ice'
++						intnat(i)=3; 
++					case 'enhancedice'
++						intnat(i)=4; 
++					case 'litho'
++						intnat(i)=5;
++					otherwise
++						error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+ 			end
+ 		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22304-22305.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22304-22305.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22304-22305.diff	(revision 22755)
@@ -0,0 +1,458 @@
+Index: ../trunk-jpl/src/m/classes/materials.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/materials.m	(revision 22304)
++++ ../trunk-jpl/src/m/classes/materials.m	(revision 22305)
+@@ -15,63 +15,203 @@
+ 			else 
+ 				self.nature=varargin;
+ 			end
+-
++			
++			%check this is acceptable: 
++			for i=1:length(self.nature),
++				if ~(strcmpi(self.nature{i},'litho') | strcmpi(self.nature{i},'ice')), 
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				end
++			end
++			
+ 			%start filling in the dynamic fields: 
+ 			for i=1:length(self.nature),
+-            list = listoffields(self,self.nature{i});
+-            for j=1:size(list,1),
+-					%Add property to materials
+-               self.addprop(list{j,1});
+-					%Set default value according to table
+-					self.(list{j,1}) = list{j,2};
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					self.addprop('rho_ice');
++					self.addprop('rho_water');
++					self.addprop('rho_freshwater');
++					self.addprop('mu_water');
++					self.addprop('heatcapacity');
++					self.addprop('latentheat');
++					self.addprop('thermalconductivity');
++					self.addprop('temperateiceconductivity');
++				    self.addprop('meltingpoint');
++					self.addprop('beta');
++					self.addprop('mixed_layer_capacity');
++					self.addprop('thermal_exchange_velocity');
++					self.addprop('rheology_B');
++					self.addprop('rheology_n');
++					self.addprop('rheology_law');
++				case 'litho'
++					self.addprop('numlayers');
++				    self.addprop('radius');
++					self.addprop('viscosity');
++					self.addprop('lame_lambda');
++					self.addprop('lame_mu');
++					self.addprop('burgers_viscosity');
++					self.addprop('burgers_mu');
++					self.addprop('isburgers');
++					self.addprop('density');
++					self.addprop('issolid');
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+ 			end
++			%set default parameters:
++			self.setdefaultparameters();
+ 
+ 		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			for i=1:length(self.nature),
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					%ice density (kg/m^3)
++					self.rho_ice=917.;
++
++					%ocean water density (kg/m^3)
++					self.rho_water=1023.;
++
++					%fresh water density (kg/m^3)
++					self.rho_freshwater=1000.;
++
++					%water viscosity (N.s/m^2)
++					self.mu_water=0.001787;  
++
++					%ice heat capacity cp (J/kg/K)
++					self.heatcapacity=2093.;
++
++					%ice latent heat of fusion L (J/kg)
++					self.latentheat=3.34*10^5;
++
++					%ice thermal conductivity (W/m/K)
++					self.thermalconductivity=2.4;
++					
++					%wet ice thermal conductivity (W/m/K)
++					self.temperateiceconductivity=.24;
++
++					%the melting point of ice at 1 atmosphere of pressure in K
++					self.meltingpoint=273.15;
++
++					%rate of change of melting point with pressure (K/Pa)
++					self.beta=9.8*10^-8;
++
++					%mixed layer (ice-water interface) heat capacity (J/kg/K)
++					self.mixed_layer_capacity=3974.;
++
++					%thermal exchange velocity (ice-water interface) (m/s)
++					self.thermal_exchange_velocity=1.00*10^-4;
++
++					%Rheology law: what is the temperature dependence of B with T
++					%available: none, paterson and arrhenius
++					self.rheology_law='Paterson';
++
++				case 'litho'
++					%we default to a configuration that enables running GIA solutions using giacaron and/or giaivins. 
++					self.numlayers=2;
++
++					%center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
++					%(with 1d3 to avoid numerical singularities) 
++					self.radius=[1e3;6278*1e3;6378*1e3];
++
++					self.viscosity=[1e21;1e40]; %mantle and lithosphere viscosity (respectively) [Pa.s]
++					self.lame_mu=[1.45*1e11;6.7*10^10];  % (Pa) %lithosphere and mantle shear modulus (respectively) [Pa]
++					self.lame_lambda=self.lame_mu;  % (Pa) %mantle and lithosphere lamba parameter (respectively) [Pa]
++					self.burgers_viscosity=[NaN;NaN];
++					self.burgers_mu=[NaN;NaN];
++					self.isburgers=[0;0];
++					self.density=[5.51*1e3;5.50*1e3];  % (Pa) %mantle and lithosphere density [kg/m^3]
++					self.issolid=[1;1]; % is layer solid or liquid.
++
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				end
++			end
++		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   Materials:'));
+ 
+ 			for i=1:length(self.nature),
+-				list = listoffields(self,self.nature{i});
+-				disp(sprintf('\n      %s:',upper(self.nature{i})));
+-				for j=1:size(list,1),
+-					fielddisplay(self,list{j,1},list{j,3});
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					disp(sprintf('   \nIce:'));
++					fielddisplay(self,'rho_ice','ice density [kg/m^3]');
++					fielddisplay(self,'rho_water','ocean water density [kg/m^3]');
++					fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]');
++					fielddisplay(self,'mu_water','water viscosity [N s/m^2]');
++					fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]');
++					fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']);
++					fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');
++					fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K');
++					fielddisplay(self,'latentheat','latent heat of fusion [J/kg]');
++					fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]');
++					fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
++					fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
++					fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/n)]');
++					fielddisplay(self,'rheology_n','Glen''s flow law exponent');
++					fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''BuddJacka'', Cuffey'', ''CuffeyTemperate'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
++				case 'litho'
++					disp(sprintf('   \nLitho:'));
++					fielddisplay(self,'numlayers','number of layers (default 2)');
++					fielddisplay(self,'radius','array describing the radius for each interface (numlayers+1) [m]');
++					fielddisplay(self,'viscosity','array describing each layer''s viscosity (numlayers) [Pa.s]');
++					fielddisplay(self,'lame_lambda','array describing the lame lambda parameter (numlayers) [Pa]');
++					fielddisplay(self,'lame_mu','array describing the shear modulus for each layers (numlayers) [Pa]');
++					fielddisplay(self,'burgers_viscosity','array describing each layer''s transient viscosity, only for Burgers rheologies  (numlayers) [Pa.s]');
++					fielddisplay(self,'burgers_mu','array describing each layer''s transient shear modulus, only for Burgers rheologies  (numlayers) [Pa]');
++					fielddisplay(self,'isburgers','array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)');
++					fielddisplay(self,'density','array describing each layer''s density (numlayers) [kg/m^3]');
++					fielddisplay(self,'issolid','array describing whether the layer is solid or liquid (default 1) (numlayers)');
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+ 			end
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+-			if isprop(self,'rho_ice'), md = checkfield(md,'fieldname','materials.rho_ice','>',0); end
+-			if isprop(self,'rho_water'), md = checkfield(md,'fieldname','materials.rho_water','>',0); end
+-			if isprop(self,'rho_freshwater'), md = checkfield(md,'fieldname','materials.rho_freshwater','>',0); end
+-			if isprop(self,'mu_water'), md = checkfield(md,'fieldname','materials.mu_water','>',0); end
+-			if isprop(self,'rheology_B'), md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1); end
+-			if isprop(self,'rheology_n'), md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); end
+-			if isprop(self,'rheology_law'), md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'}); end
+-			if ~ismember('LoveAnalysis',analyses), return; end
+-			if isprop(self,'numlayers'), md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1); end
+-			if isprop(self,'radius'), md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0); end
+-			if isprop(self,'lame_mu'), md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
+-			if isprop(self,'lame_lambda'), md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
+-			if isprop(self,'issolid'), md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<',2); end
+-			if isprop(self,'density'), md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0); end
+-			if isprop(self,'viscosity'), md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
+-			if isprop(self,'isburgers'), md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<=',1); end
+-			if isprop(self,'burgers_viscosity'), md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
+-			if isprop(self,'burgers_mu'), md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0); end
++			for i=1:length(self.nature),
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					md = checkfield(md,'fieldname','materials.rho_ice','>',0);
++					md = checkfield(md,'fieldname','materials.rho_water','>',0);
++					md = checkfield(md,'fieldname','materials.rho_freshwater','>',0);
++					md = checkfield(md,'fieldname','materials.mu_water','>',0);
++					md = checkfield(md,'fieldname','materials.rheology_B','>',0,'timeseries',1,'NaN',1,'Inf',1);
++					md = checkfield(md,'fieldname','materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
++					md = checkfield(md,'fieldname','materials.rheology_law','values',{'None' 'BuddJacka' 'Cuffey' 'CuffeyTemperate' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
++				case 'litho'
++					if ~ismember('LoveAnalysis',analyses), return; end
++					md = checkfield(md,'fieldname','materials.numlayers','NaN',1,'Inf',1,'>',0,'numel',1);
++					md = checkfield(md,'fieldname','materials.radius','NaN',1,'Inf',1,'size',[md.materials.numlayers+1 1],'>',0);
++					md = checkfield(md,'fieldname','materials.lame_mu','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.lame_lambda','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.issolid','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<',2);
++					md = checkfield(md,'fieldname','materials.density','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>',0);
++					md = checkfield(md,'fieldname','materials.viscosity','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.isburgers','NaN',1,'Inf',1,'size',[md.materials.numlayers 1],'>=',0,'<=',1);
++					md = checkfield(md,'fieldname','materials.burgers_viscosity','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
++					md = checkfield(md,'fieldname','materials.burgers_mu','Inf',1,'size',[md.materials.numlayers 1],'>=',0);
+ 
+-			for i=1:md.materials.numlayers,
+-				if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 
+-					error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice');
++					for i=1:md.materials.numlayers,
++						if md.materials.isburgers(i) & (isnan(md.materials.burgers_viscosity(i) | isnan(md.materials.burgers_mu(i)))), 
++							error('materials checkconsistency error message: Litho burgers_viscosity or burgers_mu has NaN values, inconsistent with isburgers choice');
++						end
++					end
++					if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 
++							error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.');
++					end
++					ind=find(md.materials.issolid==0);
++					if sum(ismember(diff(ind),1)>=1) %if there are at least two consecutive indices that contain issolid = 0
++							error(['Fluid layers detected at layers #', num2str(ind'), ', but having 2 or more adjacent fluid layers is not supported yet. Consider merging them.'])
++					end
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+ 			end
+-			if md.materials.issolid(1)==0 | md.materials.lame_mu(1)==0 
+-				error('First layer must be solid (issolid(1) > 0 AND lame_mu(1) > 0). Add a weak inner core if necessary.');
+-			end
+-			ind=find(md.materials.issolid==0);
+-			if sum(ismember(diff(ind),1)>=1) %if there are at least two consecutive indices that contain issolid = 0
+-				error(['Fluid layers detected at layers #', num2str(ind'), ', but having 2 or more adjacent fluid layers is not supported yet. Consider merging them.'])
+-			end
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -80,119 +220,110 @@
+ 			WriteData(fid,prefix,'name','md.materials.type','data',6,'format','Integer');
+ 			WriteData(fid,prefix,'name','md.materials.nature','data',naturetointeger(self.nature),'format','IntMat','mattype',3);
+ 
+-			if isprop(self,'rho_ice'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double'); end
+-			if isprop(self,'rho_water'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double'); end
+-			if isprop(self,'rho_freshwater'),            WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); end
+-			if isprop(self,'mu_water'),                  WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double'); end
+-			if isprop(self,'heatcapacity'),              WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); end
+-			if isprop(self,'latentheat'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double'); end
+-			if isprop(self,'thermalconductivity'),       WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); end
+-			if isprop(self,'temperateiceconductivity'),  WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); end
+-			if isprop(self,'meltingpoint'),              WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); end
+-			if isprop(self,'beta'),                      WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double'); end
+-			if isprop(self,'mixed_layer_capacity'),      WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); end
+-			if isprop(self,'thermal_exchange_velocity'), WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); end
+-			if isprop(self,'rheology_B'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); end
+-			if isprop(self,'rheology_n'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); end
+-			if isprop(self,'rheology_law'),              Write Data(fid,prefix,'data',self.rheology_law,'nae','md.materials.rheology_law','format','String'); end
+-			if isprop(self,'numlayers'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer'); end
+-			if isprop(self,'radius'),                    WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3); end
+-			if isprop(self,'lame_mu'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3); end
+-			if isprop(self,'lame_lambda'),               WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3); end
+-			if isprop(self,'issolid'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3); end
+-			if isprop(self,'density'),                   WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); end
+-			if isprop(self,'viscosity'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); end
+-			if isprop(self,'isburgers'),                 WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); end
+-			if isprop(self,'burgers_viscosity'),         WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); end
+-			if isprop(self,'burgers_mu'),                WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); end
+-	end % }}}
++			for i=1:length(self.nature),
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
++					WriteData(fid,prefix,'data',self.rheology_law,'name','md.materials.rheology_law','format','String');
++				case 'litho'
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','numlayers','format','Integer');
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','radius','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_mu','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','lame_lambda','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','issolid','format','DoubleMat','mattype',3);
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','density','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','viscosity','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','isburgers','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_viscosity','format','DoubleMat','mattype',3); 
++					WriteData(fid,prefix,'object',self,'class','materials','fieldname','burgers_mu','format','DoubleMat','mattype',3); 
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				end
++			end
++		end % }}}
+ 		function self = extrude(self,md) % {{{
+-			if isprop(self,'rheology_B'), self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node'); end
+-			if isprop(self,'rheology_n'), self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element'); end
+-		end % }}}
+-		function savemodeljs(self,fid,modelname) % {{{
+-
+-			proplist = properties(self);
+-
+-			for i=1:numel(proplist),
+-				if numel(self.(proplist{i}))==1,
+-					writejsdouble(fid,[modelname '.materials.' proplist{i}],self.(proplist{i}));
+-				elseif size(self.(proplist{i}),2)==1,
+-					writejs1Darray(fid,[modelname '.materials.' proplist{i}],self.(proplist{i}));
+-				else
+-					error('not supported yet');
++			for i=1:length(self.nature),
++				nat=self.nature{i}; 
++				switch nat
++				case 'ice'
++					self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node');
++					self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element');
+ 				end
+ 			end
+ 		end % }}}
+-		function list = listoffields(self,nat) % {{{
+-
+-			switch nat
++		function savemodeljs(self,fid,modelname) % {{{
++	
++			for i=1:length(self.nature),
++				nat=self.nature{i}; 
++				switch nat
+ 				case 'ice'
+-					list={...
+-						'rho_ice'                   , 917., 'ice density [kg/m^3]'; ...
+-						'rho_water'                 ,1023., 'ocean water density [kg/m^3]'; ...
+-						'rho_freshwater'            ,1000., 'fresh water density [kg/m^3]';...
+-						'mu_water'                  ,0.001787, 'water viscosity [N s/m^2]';...
+-						'heatcapacity'              ,2093., 'heat capacity [J/kg/K]';...
+-						'latentheat'                ,3.34e5, 'latent heat of fusion [J/kg]';...
+-						'thermalconductivity'       ,2.4, 'ice thermal conductivity [W/m/K]';...
+-						'temperateiceconductivity'  ,.24, 'temperate ice thermal conductivity [W/m/K]';...
+-						'meltingpoint'              ,273.15, 'melting point of ice at 1 atm in K';...
+-						'beta'                      ,9.8e-8 'rate of change of melting point with pressure [K/Pa]';...
+-						'mixed_layer_capacity'      ,3974., 'mixed layer capacity [W/kg/K]'; ...
+-						'thermal_exchange_velocity' ,1e-4 'thermal exchange velocity [m/s]'; ...
+-						'rheology_B'                ,NaN, 'flow law parameter [Pa/s^(1/n)]'; ...
+-						'rheology_n'                ,NaN, 'Glen''s flow law exponent'; ...
+-						'rheology_law'              ,'Paterson','law for the temperature dependance of the rheology: ''None'' , ''BuddJacka'' , Cuffey'' , ''CuffeyTemperate'' , ''Paterson'' , ''Arrhenius'' or ''LliboutryDuval'''};
+-				case 'damageice'
+-					list = listoffields(self,'ice'),
+-				case 'enhancedice'
+-					list = listoffields(self,'ice');
+-					list(end+1,:) = {'rheology_E',NaN,'enhancement factor'};
+-				case 'estarice'
+-					list = listoffields(self,'ice');
+-					list(end+1,:) = {'rheology_Ec',NaN,'compressive enhancement factor'};
+-					list(end+1,:) = {'rheology_Es',NaN,'shear enhancement factor'};
+-					list(find(strcmp(list(:,1),'rheology_n')),:) = [];
++					writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice);
++					writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water);
++					writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater);
++					writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water);
++					writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity);
++					writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat);
++					writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity);
++					writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity);
++					writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint);
++					writejsdouble(fid,[modelname '.materials.beta'],self.beta);
++					writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
++					writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity);
++					writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
++					writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B);
++					writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n);
++					writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
+ 				case 'litho'
+-					%Note for the radius:
+-					%   center of the earth (approximation, must not be 0), then the lab (lithosphere/asthenosphere boundary) then the surface
+-					%   (with 1d3 to avoid numerical singularities) 
+-					%Note: here we consider by default two layers: mantle and lithosphere
+-					list={...
+-						'numlayers'         ,2, 'number of layers (default 2)'; ...
+-						'radius'            ,[1e3;6278*1e3;6378*1e3] 'array describing the radius for each interface (numlayers+1) [m]'; ...
+-						'viscosity'         ,[1e21;1e40], 'array describing each layer''s viscosity (numlayers) [Pa.s]'; ...
+-						'lame_lambda'       ,[1.45e11;6.7e10], 'array describing the lame lambda parameter (numlayers) [Pa]'; ...
+-						'lame_mu'           ,[1.45e11;6.7e10], 'array describing the shear modulus for each layers (numlayers) [Pa]'; ...
+-						'burgers_viscosity' ,[NaN;NaN], 'array describing each layer''s transient viscosity, only for Burgers rheologies  (numlayers) [Pa.s]',...
+-						'burgers_mu'        ,[0;0], 'array describing each layer''s transient shear modulus, only for Burgers rheologies  (numlayers) [Pa]'; ...
+-						'isburgers'         ,0, 'array describing whether we adopt a MaxWell (0) or Burgers (1) rheology (default 0)'; ...
+-						'density'           ,[5.51*1e3;5.50*1e3], 'array describing each layer''s density (numlayers) [kg/m^3]'; ...
+-						'issolid'           ,[1;1], 'array describing whether the layer is solid or liquid (default 1) (numlayers)'
+-					}
++					writejsdouble(fid,[modelname '.materials.numlayers'],self.numlayers);
++					writejsdouble(fid,[modelname '.materials.radius'],self.radius);
++					writejsdouble(fid,[modelname '.materials.lame_mu'],self.lame_mu);
++					writejsdouble(fid,[modelname '.materials.lame_lambda'],self.lame_lambda);
++					writejsdouble(fid,[modelname '.materials.issolid'],self.issolid);
++					writejsdouble(fid,[modelname '.materials.density'],self.density); 
++					writejsdouble(fid,[modelname '.materials.viscosity'],self.viscosity); 
++					writejsdouble(fid,[modelname '.materials.isburgers'],self.isburgers); 
++					writejsdouble(fid,[modelname '.materials.burgers_viscosity'],self.burgers_viscosity); 
++					writejsdouble(fid,[modelname '.materials.burgers_mu'],self.burgers_mu); 
+ 				otherwise
+-					error('nature of the material not supported yet!');
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				end
+ 			end
++
++
++
+ 		end % }}}
++	end
++end
+ 		function intnat = naturetointeger(strnat) % {{{
+ 			intnat=zeros(length(strnat),1);
+ 			for i=1:length(strnat),
+ 				switch strnat{i},
+-					case 'damageice'
+-						intnat(i)=1; 
+-					case 'estar'
+-						intnat(i)=2; 
+-					case 'ice'
+-						intnat(i)=3; 
+-					case 'enhancedice'
+-						intnat(i)=4; 
+-					case 'litho'
+-						intnat(i)=5;
+-					otherwise
+-						error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
++				case 'damageice'
++					intnat(i)=1; 
++				case 'estar'
++					intnat(i)=2; 
++				case 'ice'
++					intnat(i)=3; 
++				case 'enhancedice'
++					intnat(i)=4; 
++				case 'litho'
++					intnat(i)=5;
++				otherwise
++					error('materials constructor error message: nature of the material not supported yet! (''ice'' or ''litho'')');
+ 				end
+ 			end
+ 		end % }}}
+-	end
+-end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22305-22306.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22305-22306.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22305-22306.diff	(revision 22755)
@@ -0,0 +1,197 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matestar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22305)
++++ ../trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 22306)
+@@ -135,13 +135,11 @@
+ IssmDouble Matestar::GetA(Gauss* gauss){/*{{{*/
+ 	/*
+ 	 * A = 1/B^n
+-    */
++	 */
+ 
+-	IssmDouble B,n;
++	IssmDouble B=this->GetB(gauss);
++	IssmDouble n=this->GetN();
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
+-	n=this->GetN();
+-
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+@@ -150,11 +148,9 @@
+ 	 * A = 1/B^n
+ 	 */
+ 
+-	IssmDouble B,n;
++	IssmDouble B=this->GetBbar(gauss);
++	IssmDouble n=this->GetN();
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBbarEnum);
+-	n=this->GetN();
+-
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+@@ -163,7 +159,8 @@
+ 	/*Output*/
+ 	IssmDouble B;
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
++	Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
++	B_input->GetInputValue(&B,gauss);
+ 	return B;
+ }
+ /*}}}*/
+@@ -172,7 +169,8 @@
+ 	/*Output*/
+ 	IssmDouble Bbar;
+ 
+-	element->inputs->GetInputAverage(&Bbar,MaterialsRheologyBbarEnum);
++	Input* B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
++	B_input->GetInputValue(&Bbar,gauss);
+ 	return Bbar;
+ }
+ /*}}}*/
+@@ -190,7 +188,8 @@
+ 	/*Output*/
+ 	IssmDouble Ec;
+ 
+-	element->inputs->GetInputAverage(&Ec,MaterialsRheologyEcEnum);
++	Input* Ec_input = element->GetInput(MaterialsRheologyEcEnum); _assert_(Ec_input);
++	Ec_input->GetInputValue(&Ec,gauss);
+ 	return Ec;
+ }
+ /*}}}*/
+@@ -199,7 +198,8 @@
+ 	/*Output*/
+ 	IssmDouble Ecbar;
+ 
+-	element->inputs->GetInputAverage(&Ecbar,MaterialsRheologyEcbarEnum);
++	Input* Ecbar_input = element->GetInput(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input);
++	Ecbar_input->GetInputValue(&Ecbar,gauss);
+ 	return Ecbar;
+ }
+ /*}}}*/
+@@ -208,7 +208,8 @@
+ 	/*Output*/
+ 	IssmDouble Es;
+ 
+-	element->inputs->GetInputAverage(&Es,MaterialsRheologyEsEnum);
++	Input* Es_input = element->GetInput(MaterialsRheologyEsEnum); _assert_(Es_input);
++	Es_input->GetInputValue(&Es,gauss);
+ 	return Es;
+ }
+ /*}}}*/
+@@ -217,7 +218,8 @@
+ 	/*Output*/
+ 	IssmDouble Esbar;
+ 
+-	element->inputs->GetInputAverage(&Esbar,MaterialsRheologyEsbarEnum);
++	Input* Esbar_input = element->GetInput(MaterialsRheologyEsbarEnum); _assert_(Esbar_input);
++	Esbar_input->GetInputValue(&Esbar,gauss);
+ 	return Esbar;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22305)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22306)
+@@ -197,11 +197,9 @@
+ 	 * A = 1/B^n
+ 	 */
+ 
+-	IssmDouble B,n;
++	IssmDouble B=this->GetB(gauss);
++	IssmDouble n=this->GetN();
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
+-	n=this->GetN();
+-
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+@@ -210,11 +208,9 @@
+ 	 * A = 1/B^n
+ 	 */
+ 
+-	IssmDouble B,n;
++	IssmDouble B=this->GetBbar(gauss);
++	IssmDouble n=this->GetN();
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBbarEnum);
+-	n=this->GetN();
+-
+ 	return pow(B,-n);
+ }
+ /*}}}*/
+@@ -223,7 +219,8 @@
+ 	/*Output*/
+ 	IssmDouble B;
+ 
+-	element->inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
++	Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
++	B_input->GetInputValue(&B,gauss);
+ 	return B;
+ }
+ /*}}}*/
+@@ -232,7 +229,8 @@
+ 	/*Output*/
+ 	IssmDouble Bbar;
+ 
+-	element->inputs->GetInputAverage(&Bbar,MaterialsRheologyBbarEnum);
++	Input* B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
++	B_input->GetInputValue(&Bbar,gauss);
+ 	return Bbar;
+ }
+ /*}}}*/
+@@ -241,7 +239,13 @@
+ 	_assert_(this->isdamaged);
+ 	/*Output*/
+ 	IssmDouble D;
+-	if(this->isdamaged)element->inputs->GetInputAverage(&D,DamageDEnum);
++	if(this->isdamaged){
++		Input* D_input = element->GetInput(DamageDEnum); _assert_(D_input);
++		D_input->GetInputValue(&D,gauss);
++	}
++	else{
++		_error_("Cannot get DamageD for non damaged ice");
++	}
+ 	return D;
+ }
+ /*}}}*/
+@@ -250,7 +254,13 @@
+ 	_assert_(this->isdamaged);
+ 	/*Output*/
+ 	IssmDouble Dbar;
+-	if(this->isdamaged)element->inputs->GetInputAverage(&Dbar,DamageDbarEnum);
++	if(this->isdamaged){
++		Input* D_input = element->GetInput(DamageDbarEnum); _assert_(D_input);
++		D_input->GetInputValue(&Dbar,gauss);
++	}
++	else{
++		_error_("Cannot get DamageD for non damaged ice");
++	}
+ 	return Dbar;
+ }
+ /*}}}*/
+@@ -259,7 +269,8 @@
+ 	_assert_(this->isenhanced);
+ 	/*Output*/
+ 	IssmDouble E;
+-	if(this->isenhanced)element->inputs->GetInputAverage(&E,MaterialsRheologyEEnum);
++	Input* E_input = element->GetInput(MaterialsRheologyEEnum); _assert_(E_input);
++	E_input->GetInputValue(&E,gauss);
+ 	return E;
+ }
+ /*}}}*/
+@@ -268,7 +279,8 @@
+ 	_assert_(this->isenhanced);
+ 	/*Output*/
+ 	IssmDouble Ebar;
+-	if(this->isenhanced)element->inputs->GetInputAverage(&Ebar,MaterialsRheologyEbarEnum);
++	Input* E_input = element->GetInput(MaterialsRheologyEbarEnum); _assert_(E_input);
++	E_input->GetInputValue(&Ebar,gauss);
+ 	return Ebar;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22306-22307.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22306-22307.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22306-22307.diff	(revision 22755)
@@ -0,0 +1,62 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 22306)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 22307)
+@@ -330,7 +330,8 @@
+ 	IssmDouble  rho_ice    = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble  gravity    = element->GetMaterialParameter(ConstantsGEnum);
+ 	IssmDouble  n          = element->GetMaterialParameter(MaterialsRheologyNEnum);
+-	IssmDouble  B          = element->GetMaterialParameter(MaterialsRheologyBbarEnum);
++	IssmDouble B;
++	Input* B_input         = element->GetInput(MaterialsRheologyBbarEnum);_assert_(B_input);
+ 	Input* slopex_input    = element->GetInput(SurfaceSlopeXEnum);        _assert_(slopex_input);
+ 	Input* slopey_input    = element->GetInput(SurfaceSlopeYEnum);        _assert_(slopey_input);
+ 	Input* thickness_input = element->GetInput(ThicknessEnum);            _assert_(thickness_input);
+@@ -346,6 +347,7 @@
+ 
+ 		connectivity=(IssmDouble)element->VertexConnectivity(iv);
+ 
++		B_input->GetInputValue(&B,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		surface_input->GetInputValue(&surface,gauss);
+ 		slopex_input->GetInputValue(&slope[0],gauss);
+@@ -417,7 +419,8 @@
+ 	IssmDouble  rho_ice    = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble  gravity    = element->GetMaterialParameter(ConstantsGEnum);
+ 	IssmDouble  n          = element->GetMaterialParameter(MaterialsRheologyNEnum);
+-	IssmDouble  B          = element->GetMaterialParameter(MaterialsRheologyBEnum);
++	IssmDouble B;
++	Input* B_input         = element->GetInput(MaterialsRheologyBEnum);   _assert_(B_input);
+ 	Input* surface_input   = element->GetInput(SurfaceEnum);              _assert_(surface_input);
+ 	Input* slopex_input    = element->GetInput(SurfaceSlopeXEnum);        _assert_(slopex_input);
+ 	Input* slopey_input    = element->GetInput(SurfaceSlopeYEnum);        _assert_(slopey_input);
+@@ -447,6 +450,7 @@
+ 		for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 			gauss->GaussPoint(ig);
+ 
++			B_input->GetInputValue(&B,gauss);
+ 			slopex_input->GetInputValue(&slope[0],gauss);
+ 			slopey_input->GetInputValue(&slope[1],gauss);
+ 			surface_input->GetInputValue(&surface,gauss);
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22306)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 22307)
+@@ -216,6 +216,8 @@
+ /*}}}*/
+ IssmDouble Matice::GetB(Gauss* gauss){/*{{{*/
+ 
++	_assert_(gauss); 
++
+ 	/*Output*/
+ 	IssmDouble B;
+ 
+@@ -226,6 +228,8 @@
+ /*}}}*/
+ IssmDouble Matice::GetBbar(Gauss* gauss){/*{{{*/
+ 
++	_assert_(gauss); 
++
+ 	/*Output*/
+ 	IssmDouble Bbar;
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22307-22308.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22307-22308.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22307-22308.diff	(revision 22755)
@@ -0,0 +1,175 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22307)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22308)
+@@ -1131,13 +1131,9 @@
+ IssmDouble Element::GetMaterialParameter(int enum_in){/*{{{*/
+ 
+ 	_assert_(this->matpar);
+-	switch(enum_in){ // FIXME: change this to material and replace NULL by gauss
++	switch(enum_in){ // FIXME: change this to material
+ 		case MaterialsRheologyNEnum:
+ 			return this->material->GetN();
+-		case MaterialsRheologyBEnum:
+-			return this->material->GetB(NULL);
+-		case MaterialsRheologyBbarEnum:
+-			return this->material->GetBbar(NULL);
+ 		default:
+ 			return this->matpar->GetMaterialParameter(enum_in);
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22307)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22308)
+@@ -216,7 +216,7 @@
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
+ 	IssmDouble  sigma_vm[NUMVERTICES];
+-	IssmDouble  sigma_max,sigma_max_floating,sigma_max_grounded;
++	IssmDouble  B,sigma_max,sigma_max_floating,sigma_max_grounded;
+ 	IssmDouble  epse_2,groundedice,bed;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -225,11 +225,11 @@
+ 	/*Retrieve all inputs and parameters we will need*/
+ 	Input* vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* B_input  = inputs->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
+ 	Input* bs_input = inputs->GetInput(BaseEnum);                    _assert_(bs_input);
+ 	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+ 	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+-	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+ 	IssmDouble  n   = this->GetMaterialParameter(MaterialsRheologyNEnum);
+ 
+ 	/* Start looping on the number of vertices: */
+@@ -238,6 +238,7 @@
+ 		gauss->GaussVertex(iv);
+ 
+ 		/*Get velocity components and thickness*/
++		B_input->GetInputValue(&B,gauss);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
+@@ -300,7 +301,7 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  vx,vy,vel;
+-	IssmDouble  critical_fraction,water_height;
++	IssmDouble  rheology_B,critical_fraction,water_height;
+ 	IssmDouble  bathymetry,Ho,thickness,float_depth,groundedice;
+ 	IssmDouble  surface_crevasse[NUMVERTICES], basal_crevasse[NUMVERTICES], crevasse_depth[NUMVERTICES], H_surf, H_surfbasal;
+ 	IssmDouble  strainparallel, straineffective;
+@@ -317,9 +318,9 @@
+ 	IssmDouble rho_seawater   = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	IssmDouble rho_freshwater = this->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
+ 	IssmDouble constant_g     = this->GetMaterialParameter(ConstantsGEnum);
+-	IssmDouble rheology_B     = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+ 	IssmDouble rheology_n     = this->GetMaterialParameter(MaterialsRheologyNEnum);
+-	
++
++	Input*   B_input       = inputs->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+ 	Input*   H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
+ 	Input*   bed           = inputs->GetInput(BedEnum); _assert_(bed);
+ 	Input*   surface       = inputs->GetInput(SurfaceEnum); _assert_(surface);
+@@ -335,6 +336,7 @@
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 	
++		B_input->GetInputValue(&rheology_B,gauss);
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		bed->GetInputValue(&bathymetry,gauss);
+ 		surface->GetInputValue(&float_depth,gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22307)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22308)
+@@ -191,7 +191,7 @@
+ 	IssmDouble  calvingratey[NUMVERTICES];
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
+-	IssmDouble  sigma_vm,sigma_max,sigma_max_floating,sigma_max_grounded;
++	IssmDouble  B,sigma_vm,sigma_max,sigma_max_floating,sigma_max_grounded;
+ 	IssmDouble  epse_2,groundedice,bed;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -207,9 +207,9 @@
+ 	Input* vy_input = inputs->GetInput(VyAverageEnum); _assert_(vy_input);
+ 	Input* gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
+ 	Input* bs_input = inputs->GetInput(BaseEnum);                    _assert_(bs_input);
++	Input* B_input  = inputs->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+ 	Input* smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+ 	Input* smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+-	IssmDouble  B   = this->GetMaterialParameter(MaterialsRheologyBbarEnum);
+ 	IssmDouble  n   = this->GetMaterialParameter(MaterialsRheologyNEnum);
+ 
+ 	/* Start looping on the number of vertices: */
+@@ -218,6 +218,7 @@
+ 		gauss->GaussVertex(iv);
+ 
+ 		/*Get velocity components and thickness*/
++		B_input->GetInputValue(&B,gauss);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		gr_input->GetInputValue(&groundedice,gauss);
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22307)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22308)
+@@ -521,7 +521,7 @@
+ 	bool        active_element;
+ 	int         iseplthickcomp;
+ 	int         domaintype;
+-	IssmDouble  dt,A,B;
++	IssmDouble  dt,A;
+ 	IssmDouble  EPLgrad2;
+ 	IssmDouble  EPL_N;
+ 	
+@@ -533,20 +533,12 @@
+ 		
+ 		Element* element=(Element*)femmodel->elements->GetObjectByOffset(j);
+ 		
+-		switch(domaintype){
+-		case Domain2DhorizontalEnum:
+-			if(!element->IsOnBase()) return;	
+-			B = element->GetMaterialParameter(MaterialsRheologyBbarEnum);
+-			break;
+-		case Domain3DEnum:
+-			B = element->GetMaterialParameter(MaterialsRheologyBEnum);
+-			break;
+-		default:
+-		_error_("not Implemented Yet");
+-		}
++		/*skip element if 3d and not on base*/
++		if(domaintype==Domain3DEnum && !element->IsOnBase()) continue;
+ 		
+ 		int         numnodes      = element->GetNumberOfNodes();
+ 		IssmDouble* thickness     = xNew<IssmDouble>(numnodes);
++		IssmDouble* B             = xNew<IssmDouble>(numnodes);
+ 		IssmDouble* eplhead       = xNew<IssmDouble>(numnodes);
+ 		IssmDouble* epl_slopeX    = xNew<IssmDouble>(numnodes);
+ 		IssmDouble* epl_slopeY    = xNew<IssmDouble>(numnodes);
+@@ -568,9 +560,13 @@
+ 		IssmDouble epl_conductivity = element->GetMaterialParameter(HydrologydcEplConductivityEnum);
+ 		IssmDouble init_thick       =	element->GetMaterialParameter(HydrologydcEplInitialThicknessEnum);
+ 		IssmDouble max_thick        =	element->GetMaterialParameter(HydrologydcEplMaxThicknessEnum);
++
++		switch(domaintype){
++			case Domain2DhorizontalEnum: element->GetInputListOnVertices(&B[0],MaterialsRheologyBbarEnum); break;
++			case Domain3DEnum:           element->GetInputListOnVertices(&B[0],MaterialsRheologyBEnum); break;
++			default: _error_("not Implemented Yet");
++		}
+ 		
+-		A=pow(B,-n);
+-		
+ 		element->GetInputListOnVertices(&eplhead[0],EplHeadEnum);
+ 		element->GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); 
+ 		element->GetInputListOnVertices(&epl_slopeY[0],EplHeadSlopeYEnum);
+@@ -586,6 +582,7 @@
+ 		}
+ 		else{
+ 			for(int i=0;i<numnodes;i++){
++				A=pow(B[i],-n);
+ 				/*Compute first the effective pressure in the EPL*/
+ 				EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i])));
+ 				if(EPL_N<0.0)EPL_N=0.0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22308-22309.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22308-22309.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22308-22309.diff	(revision 22755)
@@ -0,0 +1,212 @@
+Index: ../trunk-jpl/test/Archives/Archive213.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive318.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive237.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive327.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive461.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive124.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive214.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive232.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive436.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive511.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive224.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive329.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive233.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive207.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive805.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive111.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive225.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive210.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive315.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive324.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive333.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive261.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive121.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive211.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive209.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive439.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive227.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive212.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive317.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive326.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive335.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive344.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive515.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive272.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22309-22310.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22309-22310.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22309-22310.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22309)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22310)
+@@ -319,7 +319,9 @@
+ ls -la
+ echo '-----------------------------'
+ 
+-rm matlab_log.log
++if [ -f matlab_log.log ]; then
++	rm matlab_log.log
++fi
+ 
+ for job in `jobs -p`
+ do
+@@ -341,7 +343,6 @@
+ # {{{
+ if [ $PYTHON_TEST -eq 1 ]; then
+ #Launch all tests on different cpus
+-PYTHON_START_TIME=$(timer);
+ export PYTHONSTARTUP=$ISSM_DIR/src/m/dev/devpath.py
+ export PYTHONUNBUFFERED=1 #we don't want python to buffer otherwise issm.exe output is not captured
+ for (( i=1;i<=$NUMCPUS_RUN;i++ ))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22310-22311.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22310-22311.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22310-22311.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 22310)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 22311)
+@@ -19,7 +19,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsGroundediceMeltingRate']
+-field_tolerances=[5e-08,1.6e-08,5e-08,1.6e-08,1e-09,6e-08,5e-07]
++field_tolerances=[5e-08,1.6e-08,5e-08,5e-08,1e-09,6e-08,5e-07]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 22310)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 22311)
+@@ -10,7 +10,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsGroundediceMeltingRate'};
+-field_tolerances={5e-08,3e-08,5e-08,3e-08,1e-09,2e-07,8e-07};
++field_tolerances={5e-08,3e-08,5e-08,5e-08,1e-09,2e-07,8e-07};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22311-22312.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22311-22312.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22311-22312.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 22311)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 22312)
+@@ -22,7 +22,7 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure',\
+ 	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++	1e-09,1e-09,1e-09,1e-09,1e-09,2e-09]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 22311)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 22312)
+@@ -15,7 +15,7 @@
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+ 	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
++	1e-09,1e-09,1e-09,1e-09,1e-09,2e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22312-22313.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22312-22313.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22312-22313.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test436.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test436.py	(revision 22312)
++++ ../trunk-jpl/test/NightlyRun/test436.py	(revision 22313)
+@@ -31,7 +31,7 @@
+ 	md = solve(md,'Steadystate')
+ 	field_names += ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i,
+ 		'Temperature'+i,'Waterfraction'+i,'Enthalpy'+i]
+-	field_tolerances += [2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,5e-10]
++	field_tolerances += [2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,1e-9]
+ 	field_values += [
+ 		md.results.SteadystateSolution.Vx,
+ 		md.results.SteadystateSolution.Vy,
+Index: ../trunk-jpl/test/NightlyRun/test436.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test436.m	(revision 22312)
++++ ../trunk-jpl/test/NightlyRun/test436.m	(revision 22313)
+@@ -22,7 +22,7 @@
+ 	md=solve(md,'Steadystate');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}],...
+ 		['Temperature' i{1}],['Waterfraction' i{1}],['Enthalpy' i{1}]};
+-	field_tolerances={field_tolerances{:},2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,5e-10};
++	field_tolerances={field_tolerances{:},2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,6e-10,1e-9};
+ 	field_values={field_values{:},...
+ 		(md.results.SteadystateSolution.Vx),...
+ 		(md.results.SteadystateSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22313-22314.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22313-22314.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22313-22314.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22313)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22314)
+@@ -355,7 +355,9 @@
+ 
+ # concatenate reports
+ cd $ISSM_DIR/nightlylog/
+-rm python_log.log
++if [ -f python_log.log ]; then
++	rm python_log.log
++fi
+ 
+ for job in `jobs -p`
+ do
Index: /issm/oecreview/Archive/21724-22754/ISSM-22314-22315.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22314-22315.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22314-22315.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 22314)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 22315)
+@@ -21,8 +21,8 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+ 	'DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+-field_tolerances={2e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,...
++field_tolerances={2.1e-13,1e-13,1e-13,1e-13,...
++	1.1e-13,1e-13,1e-13,...
+ 	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 };
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22315-22316.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22315-22316.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22315-22316.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 22315)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 22316)
+@@ -21,8 +21,8 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+ 	'DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+-field_tolerances={2.1e-13,1e-13,1e-13,1e-13,...
+-	1.1e-13,1e-13,1e-13,...
++field_tolerances={3e-13,1e-13,1e-13,1e-13,...
++	2e-13,1e-13,1e-13,...
+ 	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 };
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22316-22317.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22316-22317.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22316-22317.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 22316)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 22317)
+@@ -30,8 +30,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure',
+ 									'DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy',
+ 									'MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
+-field_tolerances=[1e-13, 1e-13, 1e-13, 1e-13,
+-									1e-13, 1e-13, 1e-13,
++field_tolerances=[3e-13, 1e-13, 1e-13, 1e-13,
++									2e-13, 1e-13, 1e-13,
+ 									1e-13, 1e-13, 1e-13, 
+ 									1e-13, 1e-13, 1e-13 ]
+ field_values=[md.results.StressbalanceSolution.Vx,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22317-22318.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22317-22318.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22317-22318.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/test/NightlyRun/test210.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.js	(revision 22317)
++++ ../trunk-jpl/test/NightlyRun/test210.js	(revision 22318)
+@@ -14,9 +14,9 @@
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', 
+ 					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'];
+ field_tolerances=[
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
+-	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05];
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05];
+ field_values=[
+ 	(md.results.TransientSolution[0](1).Vx),
+ 	(md.results.TransientSolution[0](1).Vy),
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 22317)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 22318)
+@@ -22,12 +22,12 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1', \
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', \
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
++        'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', \
++        'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3']
+ field_tolerances=[\
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+-	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++	1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test210.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.m	(revision 22317)
++++ ../trunk-jpl/test/NightlyRun/test210.m	(revision 22318)
+@@ -13,9 +13,9 @@
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2', ...
+ 					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3'};
+ field_tolerances={...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
+-	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
++	1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
++	1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22318-22319.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22318-22319.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22318-22319.diff	(revision 22755)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/test/Archives/Archive1205.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive423.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive433.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/m/mesh/roundmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 22318)
++++ ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 22319)
+@@ -9,20 +9,20 @@
+ %      md=roundmesh(md,radius,resolution)
+ 
+ %First we have to create the domain outline 
++expname = [tempname() '.exp'];
+ 
+ %Get number of points on the circle
+-pointsonedge=floor((2.*pi*radius) / resolution);
++pointsonedge=floor((2.*pi*radius) / resolution)+1; %+1 to close the outline
+ 
+ %Calculate the cartesians coordinates of the points
+-x_list=ones(pointsonedge,1); y_list=ones(pointsonedge,1);
+-theta=(0.:2.*pi/pointsonedge:2.*pi*(1.-1./pointsonedge))';
+-x_list=roundsigfig(radius*x_list.*cos(theta),12);
+-y_list=roundsigfig(radius*y_list.*sin(theta),12);
++theta=linspace(0,2*pi,pointsonedge)';
++x_list=roundsigfig(radius*cos(theta),12);
++y_list=roundsigfig(radius*sin(theta),12);
+ A=struct('x',x_list,'y',y_list,'density',1.);
+-expwrite(A,'RoundDomainOutline.exp');
++expwrite(A,expname);
+ 
+ %Call Bamg
+-md=triangle(md,'RoundDomainOutline.exp',resolution);
++md=triangle(md,expname,resolution);
+ %md=bamg(md,'domain','RoundDomainOutline.exp','hmin',resolution);
+ 
+ %move the closest node to the center
+@@ -31,7 +31,7 @@
+ md.mesh.y(pos)=0.;
+ 
+ %delete domain
+-delete('RoundDomainOutline.exp')
++delete(expname);
+ end
+ 
+ function x=roundsigfig(x,n)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22319-22320.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22319-22320.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22319-22320.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/mesh/roundmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 22319)
++++ ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 22320)
+@@ -19,14 +19,12 @@
+ 	#First we have to create the domain outline 
+ 
+ 	#Get number of points on the circle
+-	pointsonedge=np.floor((2.*np.pi*radius) / resolution)
++	pointsonedge=np.floor((2.*np.pi*radius) / resolution)+1 #+1 to close the outline
+ 
+ 	#Calculate the cartesians coordinates of the points
+-	x_list=np.ones(pointsonedge)
+-	y_list=np.ones(pointsonedge)
+-	theta=np.linspace(0.,2.*np.pi,num=pointsonedge,endpoint=False)
+-	x_list=roundsigfig(radius*x_list*np.cos(theta),12)
+-	y_list=roundsigfig(radius*y_list*np.sin(theta),12)
++	theta=np.linspace(0.,2.*np.pi,pointsonedge)
++	x_list=roundsigfig(radius*np.cos(theta),12)
++	y_list=roundsigfig(radius*np.sin(theta),12)
+ 	A=OrderedDict()
+ 	A['x']=[x_list]
+ 	A['y']=[y_list]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22320-22321.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22320-22321.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22320-22321.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive1205.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1206.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1207.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2110.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22321-22322.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22321-22322.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22321-22322.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 22321)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 22322)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsGroundediceMeltingRate']
+-field_tolerances=[1e-13,1e-13,1.6e-10,1e-10,1e-13,1e-11,1e-6]
++field_tolerances=[1e-13,1e-13,2.3e-10,1e-10,1e-13,1e-11,1e-6]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22322-22323.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22322-22323.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22322-22323.diff	(revision 22755)
@@ -0,0 +1,510 @@
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.js	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.js	(revision 22323)
+@@ -33,6 +33,7 @@
+ 			checkfield(md,'fieldname','mesh.z','>=',md.geometry.base-Math.pow(10, -10),'message','\'mesh.z\' lower than bedrock');
+ 			checkfield(md,'fieldname','mesh.z','<=',md.geometry.surface+Math.pow(10, -10),'message','\'mesh.z\' higher than surface elevation');
+ 			checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message','\'mesh.average_vertex_connectivity\' should be at least 24 in 3d');
++			if(this.scale_factor.length>1) checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+ 		} // }}}
+ 		this.disp = function()  { // {{{
+ 			console.log(sprintf('   3D prism Mesh:')); 
+@@ -74,6 +75,7 @@
+ 			fielddisplay(this,'lat','vertices latitude [degrees]');
+ 			fielddisplay(this,'long','vertices longitude [degrees]');
+ 			fielddisplay(this,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
++			fielddisplay(self,"scale_factor","Projection correction for volume, area, etc. computation)");
+ 		} // }}}
+ 		this.marshall = function(md,prefix,fid) { // {{{
+ 			WriteData(fid,prefix,'name','md.mesh.domain_type','data','Domain' + this.domaintype(),'format','String');
+@@ -94,6 +96,7 @@
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofelements2d','format','Integer');
++			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 		} // }}}
+         this.fix=function() { //{{{
+             //Transform objects into Float64Arrays:
+@@ -108,6 +111,7 @@
+             this.extractedelements=NaNFix(this.extractedelements,NaN);
+             this.lat=NaNFix(this.lat,NaN);
+             this.long=NaNFix(this.long,NaN);
++				this.scale_factor=NullFix(this.scale_factor,NaN);
+         }//}}}
+ 		this.domaintype = function() { // {{{)
+ 			return '3D';
+@@ -134,6 +138,7 @@
+         this.lat                         = NaN;
+         this.long                        = NaN;
+         this.epsg                        = 0;
++		  this.scale_factor                = NaN;
+ 
+         this.vertexonbase                = NaN;
+         this.vertexonsurface             = NaN;
+Index: ../trunk-jpl/src/m/classes/mesh3dtetras.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 22323)
+@@ -16,6 +16,7 @@
+ 		lat                         = NaN;
+ 		long                        = NaN;
+ 		epsg                        = 0;
++		scale_factor                = NaN;
+ 
+ 		vertexonbase                = NaN;
+ 		vertexonsurface             = NaN;
+@@ -108,6 +109,10 @@
+ 			md = checkfield(md,'fieldname','mesh.z','>=',md.geometry.base-10^-10,'message','''mesh.z'' lower than bedrock');
+ 			md = checkfield(md,'fieldname','mesh.z','<=',md.geometry.surface+10^-10,'message','''mesh.z'' higher than surface elevation');
+ 			md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message','''mesh.average_vertex_connectivity'' should be at least 24 in 3d');
++			if numel(md.mesh.scale_factor)>1,
++				md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
++			end
++
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   3D tetra Mesh:')); 
+@@ -149,6 +154,7 @@
+ 			fielddisplay(self,'lat','vertices latitude [degrees]');
+ 			fielddisplay(self,'long','vertices longitude [degrees]');
+ 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
++			fielddisplay(self,'scale_factor','Projection correction for volume, area, etc. computation)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			WriteData(fid,prefix,'name','md.mesh.domain_type','data',['Domain' domaintype(self)],'format','String');
+@@ -165,6 +171,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+Index: ../trunk-jpl/src/m/classes/mesh2d.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22323)
+@@ -15,6 +15,7 @@
+ 		lat                         = NaN;
+ 		long                        = NaN;
+ 		epsg                        = 0;
++		scale_factor                = NaN;
+ 
+ 		vertexonboundary            = NaN;
+ 
+@@ -93,6 +94,9 @@
+ 			md = checkfield(md,'fieldname','mesh.numberofvertices','>',0);
+ 			md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
+ 			md = checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[NaN 3]);
++			if numel(md.mesh.scale_factor)>1,
++				md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
++			end
+ 
+ 			if strcmp(solution,'ThermalSolution')
+ 					md = checkmessage(md,'thermal not supported for 2d mesh');
+@@ -126,6 +130,7 @@
+ 			fielddisplay(self,'lat','vertices latitude [degrees]');
+ 			fielddisplay(self,'long','vertices longitude [degrees]');
+ 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
++			fielddisplay(self,'scale_factor','Projection correction for volume, area, etc. computation)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			WriteData(fid,prefix,'name','md.mesh.domain_type','data',['Domain' domaintype(self)],'format','String');
+@@ -140,6 +145,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 		function t = domaintype(self) % {{{
+ 			t = '2Dhorizontal';
+@@ -161,6 +167,7 @@
+ 			writejs1Darray(fid,[modelname '.mesh.lat'],self.lat);
+ 			writejs1Darray(fid,[modelname '.mesh.long'],self.long);
+ 			writejsdouble(fid,[modelname '.mesh.epsg'],self.epsg);
++			writejsdouble(fid,[modelname '.mesh.scale_factor'],self.scale_factor);
+ 			writejs1Darray(fid,[modelname '.mesh.vertexonboundary'],self.vertexonboundary);
+ 			writejs2Darray(fid,[modelname '.mesh.edges'],self.edges);
+ 			writejs2Darray(fid,[modelname '.mesh.segments'],self.segments);
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22323)
+@@ -16,6 +16,7 @@
+ 		lat                         = NaN;
+ 		long                        = NaN;
+ 		epsg                        = 0;
++		scale_factor                = NaN;
+ 
+ 		vertexonbase                = NaN;
+ 		vertexonsurface             = NaN;
+@@ -119,6 +120,9 @@
+ 			if any(max(abs(project2d(md,md.mesh.z,md.mesh.numberoflayers)-project2d(md,md.mesh.z,1) - project2d(md,md.geometry.thickness,1)))>1e-10),
+ 				md = checkmessage(md,'md.mesh.z is not consistent with md.geometry.thickness, you changed the geometry after extrusion !!');
+ 			end
++			if numel(md.mesh.scale_factor)>1,
++				md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
++			end
+ 		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   3D prism Mesh:')); 
+@@ -160,6 +164,7 @@
+ 			fielddisplay(self,'lat','vertices latitude [degrees]');
+ 			fielddisplay(self,'long','vertices longitude [degrees]');
+ 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
++			fielddisplay(self,'scale_factor','Projection correction for volume, area, etc. computation)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			WriteData(fid,prefix,'name','md.mesh.domain_type','data',['Domain' domaintype(self)],'format','String');
+@@ -180,6 +185,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 		function type = domaintype(self) % {{{
+ 			type = '3D';
+Index: ../trunk-jpl/src/m/classes/mesh2d.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.js	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh2d.js	(revision 22323)
+@@ -43,6 +43,7 @@
+ 			fielddisplay(this,"lat","vertices latitude [degrees]");
+ 			fielddisplay(this,"long","vertices longitude [degrees]");
+ 			fielddisplay(this,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)");
++			fielddisplay(self,"scale_factor","Projection correction for volume, area, etc. computation)");
+ 		} //}}}
+ 		this.classname = function () { //{{{
+ 			return "mesh2d";
+@@ -69,6 +70,7 @@
+ 			checkfield(md,'fieldname','mesh.numberofvertices','>',0);
+ 			checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d");
+ 			checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[NaN, 3]);
++			if(this.scale_factor.length>1) checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+ 
+ 			switch(solution){
+ 			case 'ThermalSolution':
+@@ -91,6 +93,7 @@
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 		}//}}}
+ 		this.fix=function() { //{{{
+ 			//Transform objects into Float64Arrays:
+@@ -103,6 +106,7 @@
+ 			this.extractedelements=NullFix(this.extractedelements,NaN);
+ 			this.lat=NullFix(this.lat,NaN);
+ 			this.long=NullFix(this.long,NaN);
++			this.scale_factor=NullFix(this.scale_factor,NaN);
+ 		}//}}}
+ 
+ 	//properties 
+@@ -117,6 +121,7 @@
+ 		this.lat                         = NaN;
+ 		this.long                        = NaN;
+ 		this.epsg                        = 0;
++		this.scale_factor                = NaN;
+ 
+ 		this.vertexonboundary            = NaN;
+ 
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 22323)
+@@ -15,6 +15,7 @@
+ 		lat                         = NaN;
+ 		long                        = NaN;
+ 		epsg                        = NaN;
++		scale_factor                = NaN;
+ 
+ 		vertexonboundary            = NaN;
+ 		vertexonbase                = NaN;
+@@ -93,6 +94,9 @@
+ 			md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
++			if numel(md.mesh.scale_factor)>1,
++				md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]);
++			end
+ 
+ 			if strcmp(solution,'ThermalSolution')
+ 				md = checkmessage(md,'thermal not supported for 2d mesh');
+@@ -124,6 +128,7 @@
+ 			fielddisplay(self,'lat','vertices latitude [degrees]');
+ 			fielddisplay(self,'long','vertices longitude [degrees]');
+ 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
++			fielddisplay(self,'scale_factor','Projection correction for volume, area, etc. computation)');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			WriteData(fid,prefix,'name','md.mesh.domain_type','data',['Domain' domaintype(self)],'format','String');
+@@ -138,6 +143,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 		function t = domaintype(self) % {{{
+ 			t = '2Dvertical';
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22322)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22323)
+@@ -228,6 +228,7 @@
+ 	/*Fetch data:*/
+ 	iomodel->FetchData(6,"md.mesh.x","md.mesh.y","md.mesh.z","md.geometry.base","md.geometry.thickness","md.mask.ice_levelset");
+ 	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->FetchData(3,"md.mesh.lat","md.mesh.long","md.mesh.r");
++	else iomodel->FetchDataToInput(elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.);
+ 	
+ 	CreateNumberNodeToElementConnectivity(iomodel,solution_type);
+ 
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.py	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.py	(revision 22323)
+@@ -23,6 +23,7 @@
+ 		self.lat                         = float('NaN')
+ 		self.long                        = float('NaN')
+ 		self.epsg                        = float('NaN')
++		self.scale_factor                = float('NaN');
+ 
+ 		self.vertexonboundary            = float('NaN')
+ 		self.vertexonbase            	 = float('NaN')
+@@ -65,6 +66,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)"))
++		string="%s\n%s"%(string,fielddisplay(self,"scale_factor","Projection correction for volume, area, etc. computation"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -93,6 +95,8 @@
+ 		md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
++		if(numel(self.scale_factor)>1):
++                        md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+ 
+ 		if solution=='ThermalSolution':
+ 			md.checkmessage("thermal not supported for 2d mesh")
+@@ -127,4 +131,5 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22323)
+@@ -23,6 +23,7 @@
+ 		self.lat                         = float('NaN');
+ 		self.long                        = float('NaN');
+ 		self.epsg                        = 0;
++		self.scale_factor                = float('NaN');
+ 
+ 		self.vertexonboundary            = float('NaN');
+ 		self.edges                       = float('NaN');
+@@ -67,6 +68,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)"))
++		string="%s\n%s"%(string,fielddisplay(self,"scale_factor","Projection correction for volume, area, etc. computation"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -94,6 +96,9 @@
+ 		md = checkfield(md,'fieldname','mesh.numberofvertices','>',0)
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+ 		md = checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[np.nan,3]);
++		if(numel(self.scale_factor)>1):
++                        md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
++                
+ 		if solution=='ThermalSolution':
+ 			md.checkmessage("thermal not supported for 2d mesh")
+ 
+@@ -121,4 +126,5 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3)
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22322)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22323)
+@@ -24,6 +24,7 @@
+ 		self.lat                         = float('NaN');
+ 		self.long                        = float('NaN');
+ 		self.epsg                        = 0;
++		self.scale_factor                = float('NaN');
+ 
+ 		self.vertexonbase                = float('NaN');
+ 		self.vertexonsurface             = float('NaN');
+@@ -89,6 +90,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude [degrees]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"epsg","EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)"))
++		string="%s\n%s"%(string,fielddisplay(self,"scale_factor","Projection correction for volume, area, etc. computation"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -117,6 +119,8 @@
+ 		md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message',"'mesh.average_vertex_connectivity' should be at least 24 in 3d")
++		if(numel(self.scale_factor)>1):
++                        md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+ 
+ 		return md
+ 	# }}}
+@@ -148,4 +152,5 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer')
++		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22322)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22323)
+@@ -307,6 +307,7 @@
+ 	MeshXEnum,
+ 	MeshYEnum,
+ 	MeshZEnum,
++	MeshScaleFactorEnum,
+ 	MeshElementsEnum,
+ 	MeshNumberofelementsEnum,
+ 	MeshNumberoflayersEnum,
+@@ -749,6 +750,7 @@
+ 	SubelementMigrationEnum,
+ 	SubelementMigration2Enum,
+ 	SubelementMigration3Enum,
++	SubelementMigration4Enum,
+ 	ContactEnum,
+ 	GroundingOnlyEnum,
+ 	MaskGroundediceLevelsetEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22322)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22323)
+@@ -313,6 +313,7 @@
+ 		case MeshXEnum : return "MeshX";
+ 		case MeshYEnum : return "MeshY";
+ 		case MeshZEnum : return "MeshZ";
++		case MeshScaleFactorEnum : return "MeshScaleFactor";
+ 		case MeshElementsEnum : return "MeshElements";
+ 		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+ 		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
+@@ -739,6 +740,7 @@
+ 		case SubelementMigrationEnum : return "SubelementMigration";
+ 		case SubelementMigration2Enum : return "SubelementMigration2";
+ 		case SubelementMigration3Enum : return "SubelementMigration3";
++		case SubelementMigration4Enum : return "SubelementMigration4";
+ 		case ContactEnum : return "Contact";
+ 		case GroundingOnlyEnum : return "GroundingOnly";
+ 		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22322)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22323)
+@@ -319,6 +319,7 @@
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
++	      else if (strcmp(name,"MeshScaleFactor")==0) return MeshScaleFactorEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+-	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
++	      if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
++	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+-	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
++	      if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
++	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+ 	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+ 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+ 	      else if (strcmp(name,"Step")==0) return StepEnum;
+-	      else if (strcmp(name,"Time")==0) return TimeEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
++	      if (strcmp(name,"Time")==0) return TimeEnum;
++	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+ 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+@@ -750,13 +751,14 @@
+ 	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+-	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
++	      if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
++	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+ 	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
++	      else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+ 	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+-	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
++	      if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
++	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
++	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+ 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+-	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+-	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
++	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
++	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
++	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+ 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22323-22324.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22323-22324.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22323-22324.diff	(revision 22755)
@@ -0,0 +1,95 @@
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 22323)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 22324)
+@@ -571,6 +571,7 @@
+ 		md.mesh.lat                         = mesh2d.lat
+ 		md.mesh.long                        = mesh2d.long
+ 		md.mesh.epsg                        = mesh2d.epsg
++		md.mesh.scale_factor                = mesh2d.scale_factor
+ 
+ 		md.mesh.vertexonboundary            = mesh2d.vertexonboundary
+ 		md.mesh.vertexconnectivity          = mesh2d.vertexconnectivity
+@@ -642,6 +643,7 @@
+ 		#lat long
+ 		md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node')
+ 		md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node')
++		md.mesh.scale_factor=project3d(md,'vector',md.mesh.scale_factor,'type','node')
+ 
+ 		md.geometry.extrude(md)
+ 		md.friction.extrude(md)
+@@ -856,6 +858,9 @@
+ 			if md.mesh.long.size==md.mesh.numberofvertices: 
+ 				md.mesh.long=project2d(md,md.mesh.long,1) 
+ 		mesh.epsg=md.mesh.epsg
++		if isinstance(md.mesh.scale_factor,np.ndarray):
++			if md.mesh.scale_factor.size==md.mesh.numberofvertices: 
++				md.mesh.scale_factor=project2d(md,md.mesh.scale_factor,1) 
+ 		md.mesh=mesh
+ 		md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)[0]
+ 		md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity)[0]
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22323)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22324)
+@@ -206,6 +206,7 @@
+ 			md.mesh.lat                         = mesh2d.lat;
+ 			md.mesh.long                        = mesh2d.long;
+ 			md.mesh.epsg                        = mesh2d.epsg;
++			md.mesh.scale_factor                = mesh2d.scale_factor;
+ 
+ 			md.mesh.vertexonboundary            = mesh2d.vertexonboundary;
+ 			md.mesh.vertexconnectivity          = mesh2d.vertexconnectivity;
+@@ -304,6 +305,7 @@
+ 			//lat long
+ 			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
+ 			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
++			md.mesh.scale_factor=project3d(md,'vector',md.mesh.scale_factor,'type','node');
+ 
+ 			md.geometry=md.geometry.extrude(md);
+ 			md.friction=md.friction.extrude(md);
+@@ -528,6 +530,8 @@
+ 				md.mesh.lat=project2d(md,md.mesh.lat,1);
+ 			if (numel(md.mesh.long) === md.mesh.numberofvertices)
+ 				md.mesh.long=project2d(md,md.mesh.long,1);
++			if (numel(md.mesh.scale_factor) === md.mesh.numberofvertices)
++				md.mesh.scale_factor=project2d(md,md.mesh.scale_factor,1);
+ 
+ 			// Initialize with the 2d mesh
+ 			var mesh = new mesh2d();
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 22323)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 22324)
+@@ -351,6 +351,7 @@
+ 			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  mesh.lat=project2d(md,md.mesh.lat,1); end
+ 			if numel(md.mesh.long)==md.mesh.numberofvertices,	mesh.long=project2d(md,md.mesh.long,1); end
+ 			mesh.epsg=md.mesh.epsg;
++			if numel(md.mesh.scale_factor)==md.mesh.numberofvertices,	mesh.scale_factor=project2d(md,md.mesh.scale_factor,1); end
+ 			if ~isnan(md.mesh.vertexonboundary), mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1); end
+ 			if ~isnan(md.mesh.elementconnectivity), mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1); end
+ 			md.mesh=mesh;
+@@ -736,6 +737,7 @@
+ 			md.mesh.lat                         = mesh2d.lat;
+ 			md.mesh.long                        = mesh2d.long;
+ 			md.mesh.epsg                        = mesh2d.epsg;
++			md.mesh.scale_factor                = mesh2d.scale_factor;
+ 
+ 			md.mesh.vertexonboundary            = mesh2d.vertexonboundary;
+ 			md.mesh.vertexconnectivity          = mesh2d.vertexconnectivity;
+@@ -809,6 +811,7 @@
+ 			%lat long
+ 			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
+ 			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
++			md.mesh.scale_factor=project3d(md,'vector',md.mesh.scale_factor,'type','node');
+ 
+ 			md.geometry=extrude(md.geometry,md);
+ 			md.friction  = extrude(md.friction,md);
+@@ -963,6 +966,7 @@
+ 			if isfield(structmd,'nodeonboundary'), md.mesh.vertexonboundary=structmd.nodeonboundary; end
+ 			if isfield(structmd,'lat'), md.mesh.lat=structmd.lat; end
+ 			if isfield(structmd,'long'), md.mesh.long=structmd.long; end
++			if isfield(structmd,'scale_factor'), md.mesh.scale_factor=structmd.scale_factor; end
+ 			if isfield(structmd,'segments'), md.mesh.segments=structmd.segments; end
+ 			if isfield(structmd,'segmentmarkers'), md.mesh.segmentmarkers=structmd.segmentmarkers; end
+ 			if isfield(structmd,'numlayers'), md.mesh.numberoflayers=structmd.numlayers; end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22324-22325.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22324-22325.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22324-22325.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22324)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22325)
+@@ -96,7 +96,7 @@
+ 		md = checkfield(md,'fieldname','mesh.numberofvertices','>',0)
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+ 		md = checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[np.nan,3]);
+-		if(numel(self.scale_factor)>1):
++		if(len(self.scale_factor)>1):
+                         md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+                 
+ 		if solution=='ThermalSolution':
Index: /issm/oecreview/Archive/21724-22754/ISSM-22325-22326.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22325-22326.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22325-22326.diff	(revision 22755)
@@ -0,0 +1,924 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22326)
+@@ -1041,7 +1041,7 @@
+ 	*presponse=response;
+ 
+ }/*}}}*/
+-void FemModel::FloatingAreax(IssmDouble* pV){/*{{{*/
++void FemModel::FloatingAreax(IssmDouble* pV, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_floating_area= 0;
+ 	IssmDouble total_floating_area;
+@@ -1048,7 +1048,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_floating_area+=element->FloatingArea();
++		local_floating_area+=element->FloatingArea(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_floating_area,&total_floating_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_floating_area,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1090,7 +1090,7 @@
+ 	*pmax=uLmax;
+ 
+ }/*}}}*/
+-void FemModel::GroundedAreax(IssmDouble* pV){/*{{{*/
++void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_grounded_area= 0;
+ 	IssmDouble total_grounded_area;
+@@ -1097,7 +1097,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_grounded_area+=element->GroundedArea();
++		local_grounded_area+=element->GroundedArea(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_grounded_area,&total_grounded_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_grounded_area,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1106,7 +1106,7 @@
+ 	*pV=total_grounded_area;
+ 
+ }/*}}}*/
+-void FemModel::IceMassx(IssmDouble* pM){/*{{{*/
++void FemModel::IceMassx(IssmDouble* pM, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_ice_mass = 0;
+ 	IssmDouble total_ice_mass;
+@@ -1113,7 +1113,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_ice_mass+=element->IceMass();
++		local_ice_mass+=element->IceMass(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_ice_mass,&total_ice_mass,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_ice_mass,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1122,7 +1122,7 @@
+ 	*pM=total_ice_mass;
+ 
+ }/*}}}*/
+-void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV){/*{{{*/
++void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_ice_volume_af = 0;
+ 	IssmDouble total_ice_volume_af;
+@@ -1129,7 +1129,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_ice_volume_af+=element->IceVolumeAboveFloatation();
++		local_ice_volume_af+=element->IceVolumeAboveFloatation(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_ice_volume_af,&total_ice_volume_af,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_ice_volume_af,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1138,7 +1138,7 @@
+ 	*pV=total_ice_volume_af;
+ 
+ }/*}}}*/
+-void FemModel::IceVolumex(IssmDouble* pV){/*{{{*/
++void FemModel::IceVolumex(IssmDouble* pV, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_ice_volume = 0;
+ 	IssmDouble total_ice_volume;
+@@ -1145,7 +1145,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_ice_volume+=element->IceVolume();
++		local_ice_volume+=element->IceVolume(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_ice_volume,&total_ice_volume,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_ice_volume,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1743,28 +1743,36 @@
+ 				switch(output_enum){
+ 
+ 					/*Scalar output*/
+-					case DivergenceEnum:               this->Divergencex(&double_result);               break;
+-					case MaxDivergenceEnum:            this->MaxDivergencex(&double_result);            break;
+-					case IceMassEnum:                  this->IceMassx(&double_result);                  break;
+-					case IceVolumeEnum:                this->IceVolumex(&double_result);                break;
+-					case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(&double_result); break;
+-					case GroundedAreaEnum:             this->GroundedAreax(&double_result);             break;
+-					case FloatingAreaEnum:             this->FloatingAreax(&double_result);             break;
+-					case MinVelEnum:                   this->MinVelx(&double_result);                   break;
+-					case MaxVelEnum:                   this->MaxVelx(&double_result);                   break;
+-					case MinVxEnum:                    this->MinVxx(&double_result);                    break;
+-					case MaxVxEnum:                    this->MaxVxx(&double_result);                    break;
+-					case MaxAbsVxEnum:                 this->MaxAbsVxx(&double_result);                 break;
+-					case MinVyEnum:                    this->MinVyx(&double_result);                    break;
+-					case MaxVyEnum:                    this->MaxVyx(&double_result);                    break;
+-					case MaxAbsVyEnum:                 this->MaxAbsVyx(&double_result);                 break;
+-					case MinVzEnum:                    this->MinVzx(&double_result);                    break;
+-					case MaxVzEnum:                    this->MaxVzx(&double_result);                    break;
+-					case MaxAbsVzEnum:                 this->MaxAbsVzx(&double_result);                 break;
+-					case MassFluxEnum:                 this->MassFluxx(&double_result);                 break;
+-					case TotalFloatingBmbEnum:         this->TotalFloatingBmbx(&double_result);         break;
+-					case TotalGroundedBmbEnum:         this->TotalGroundedBmbx(&double_result);         break;
+-					case TotalSmbEnum:                 this->TotalSmbx(&double_result);                 break;
++					case DivergenceEnum:                     this->Divergencex(&double_result);                     break;
++					case MaxDivergenceEnum:                  this->MaxDivergencex(&double_result);                  break;
++					case IceMassEnum:                        this->IceMassx(&double_result,false);                  break;
++					case IceMassScaledEnum:                  this->IceMassx(&double_result,true);                   break;
++					case IceVolumeEnum:                      this->IceVolumex(&double_result,false);                break;
++					case IceVolumeScaledEnum:                this->IceVolumex(&double_result,true);                 break;
++					case IceVolumeAboveFloatationEnum:       this->IceVolumeAboveFloatationx(&double_result,false); break;
++					case IceVolumeAboveFloatationScaledEnum: this->IceVolumeAboveFloatationx(&double_result,true);  break;
++					case GroundedAreaEnum:                   this->GroundedAreax(&double_result,false);             break;
++					case GroundedAreaScaledEnum:             this->GroundedAreax(&double_result,true);              break;
++					case FloatingAreaEnum:                   this->FloatingAreax(&double_result,false);             break;
++					case FloatingAreaScaledEnum:             this->FloatingAreax(&double_result,true);              break;
++					case MinVelEnum:                         this->MinVelx(&double_result);                         break;
++					case MaxVelEnum:                         this->MaxVelx(&double_result);                         break;
++					case MinVxEnum:                          this->MinVxx(&double_result);                          break;
++					case MaxVxEnum:                          this->MaxVxx(&double_result);                          break;
++					case MaxAbsVxEnum:                       this->MaxAbsVxx(&double_result);                       break;
++					case MinVyEnum:                          this->MinVyx(&double_result);                          break;
++					case MaxVyEnum:                          this->MaxVyx(&double_result);                          break;
++					case MaxAbsVyEnum:                       this->MaxAbsVyx(&double_result);                       break;
++					case MinVzEnum:                          this->MinVzx(&double_result);                          break;
++					case MaxVzEnum:                          this->MaxVzx(&double_result);                          break;
++					case MaxAbsVzEnum:                       this->MaxAbsVzx(&double_result);                       break;
++					case MassFluxEnum:                       this->MassFluxx(&double_result);                       break;
++					case TotalFloatingBmbEnum:               this->TotalFloatingBmbx(&double_result,false);         break;
++					case TotalFloatingBmbScaledEnum:         this->TotalFloatingBmbx(&double_result,true);          break;
++					case TotalGroundedBmbEnum:               this->TotalGroundedBmbx(&double_result,false);         break;
++					case TotalGroundedBmbScaledEnum:         this->TotalGroundedBmbx(&double_result,true);          break;
++					case TotalSmbEnum:                       this->TotalSmbx(&double_result,false);                 break;
++					case TotalSmbScaledEnum:                 this->TotalSmbx(&double_result,true);                  break;
+ 
+ 			   /*Scalar control output*/
+ 				case SurfaceAbsVelMisfitEnum:       SurfaceAbsVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
+@@ -1993,43 +2001,51 @@
+ 
+ 	switch (response_descriptor_enum){
+ 
+-		case DivergenceEnum:               this->Divergencex(responses); break;
+-		case MaxDivergenceEnum:            this->MaxDivergencex(responses); break;
+-		case IceMassEnum:                  this->IceMassx(responses); break;
+-		case IceVolumeEnum:                this->IceVolumex(responses); break;
+-		case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(responses); break;
+-		case GroundedAreaEnum:             this->GroundedAreax(responses); break;
+-		case FloatingAreaEnum:             this->FloatingAreax(responses); break;
+-		case MinVelEnum:                   this->MinVelx(responses); break;
+-		case MaxVelEnum:                   this->MaxVelx(responses); break;
+-		case MinVxEnum:                    this->MinVxx(responses); break;
+-		case MaxVxEnum:                    this->MaxVxx(responses); break;
+-		case MaxAbsVxEnum:                 this->MaxAbsVxx(responses); break;
+-		case MinVyEnum:                    this->MinVyx(responses); break;
+-		case MaxVyEnum:                    this->MaxVyx(responses); break;
+-		case MaxAbsVyEnum:                 this->MaxAbsVyx(responses); break;
+-		case MinVzEnum:                    this->MinVzx(responses); break;
+-		case MaxVzEnum:                    this->MaxVzx(responses); break;
+-		case MaxAbsVzEnum:                 this->MaxAbsVzx(responses); break;
+-		case MassFluxEnum:                 this->MassFluxx(responses); break;
+-		case SurfaceAbsVelMisfitEnum:      SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
+-		case SurfaceRelVelMisfitEnum:      SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
+-		case SurfaceLogVelMisfitEnum:      SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
+-		case SurfaceLogVxVyMisfitEnum:     SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
+-		case SurfaceAverageVelMisfitEnum:  SurfaceAverageVelMisfitx(responses,this); break;
+-		case ThicknessAbsMisfitEnum:       ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters); break;
+-		case ThicknessAbsGradientEnum:     this->ThicknessAbsGradientx(responses); break;
+-		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
+-		case ThicknessAcrossGradientEnum:  ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
+-		case RheologyBbarAbsGradientEnum:  RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
+-		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
+-		case BalancethicknessMisfitEnum:   BalancethicknessMisfitx(responses); break;
+-		case TotalFloatingBmbEnum:			  this->TotalFloatingBmbx(responses); break;
+-		case TotalGroundedBmbEnum:			  this->TotalGroundedBmbx(responses); break;
+-		case TotalSmbEnum:					  this->TotalSmbx(responses); break;
+-		case MaterialsRheologyBbarEnum:    this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
+-		case VelEnum:                      this->ElementResponsex(responses,VelEnum); break;
+-		case FrictionCoefficientEnum:      NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
++		case DivergenceEnum:                     this->Divergencex(responses); break;
++		case MaxDivergenceEnum:                  this->MaxDivergencex(responses); break;
++		case IceMassEnum:                        this->IceMassx(responses, false); break;
++		case IceMassScaledEnum:                  this->IceMassx(responses, true); break;
++		case IceVolumeEnum:                      this->IceVolumex(responses, false); break;
++		case IceVolumeScaledEnum:                this->IceVolumex(responses, true); break;
++		case IceVolumeAboveFloatationEnum:       this->IceVolumeAboveFloatationx(responses, false); break;
++		case IceVolumeAboveFloatationScaledEnum: this->IceVolumeAboveFloatationx(responses, true); break;
++		case GroundedAreaEnum:                   this->GroundedAreax(responses, false); break;
++		case GroundedAreaScaledEnum:             this->GroundedAreax(responses, true); break;
++		case FloatingAreaEnum:                   this->FloatingAreax(responses, false); break;
++		case FloatingAreaScaledEnum:             this->FloatingAreax(responses, true); break;
++		case MinVelEnum:                         this->MinVelx(responses); break;
++		case MaxVelEnum:                         this->MaxVelx(responses); break;
++		case MinVxEnum:                          this->MinVxx(responses); break;
++		case MaxVxEnum:                          this->MaxVxx(responses); break;
++		case MaxAbsVxEnum:                       this->MaxAbsVxx(responses); break;
++		case MinVyEnum:                          this->MinVyx(responses); break;
++		case MaxVyEnum:                          this->MaxVyx(responses); break;
++		case MaxAbsVyEnum:                       this->MaxAbsVyx(responses); break;
++		case MinVzEnum:                          this->MinVzx(responses); break;
++		case MaxVzEnum:                          this->MaxVzx(responses); break;
++		case MaxAbsVzEnum:                       this->MaxAbsVzx(responses); break;
++		case MassFluxEnum:                       this->MassFluxx(responses); break;
++		case SurfaceAbsVelMisfitEnum:            SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceRelVelMisfitEnum:            SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceLogVelMisfitEnum:            SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceLogVxVyMisfitEnum:           SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceAverageVelMisfitEnum:        SurfaceAverageVelMisfitx(responses,this); break;
++		case ThicknessAbsMisfitEnum:             ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case ThicknessAbsGradientEnum:           this->ThicknessAbsGradientx(responses); break;
++		case ThicknessAlongGradientEnum:         ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case ThicknessAcrossGradientEnum:        ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case RheologyBbarAbsGradientEnum:        RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case DragCoefficientAbsGradientEnum:     DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case BalancethicknessMisfitEnum:         BalancethicknessMisfitx(responses); break;
++		case TotalFloatingBmbEnum:			        this->TotalFloatingBmbx(responses, false); break;
++		case TotalFloatingBmbScaledEnum:			  this->TotalFloatingBmbx(responses, true); break;
++		case TotalGroundedBmbEnum:			        this->TotalGroundedBmbx(responses, false); break;
++		case TotalGroundedBmbScaledEnum:			  this->TotalGroundedBmbx(responses, true); break;
++		case TotalSmbEnum:					        this->TotalSmbx(responses, false); break;
++		case TotalSmbScaledEnum:					  this->TotalSmbx(responses, true); break;
++		case MaterialsRheologyBbarEnum:          this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
++		case VelEnum:                            this->ElementResponsex(responses,VelEnum); break;
++		case FrictionCoefficientEnum:            NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
+ 		default: 
+ 			if(response_descriptor_enum>=Outputdefinition1Enum && response_descriptor_enum <=Outputdefinition100Enum){
+ 				IssmDouble double_result = OutputDefinitionsResponsex(this,response_descriptor_enum);
+@@ -2277,7 +2293,7 @@
+ 	*pdt=min_dt;
+ }
+ /*}}}*/
+-void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb){/*{{{*/
++void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_fbmb = 0;
+ 	IssmDouble total_fbmb;
+@@ -2284,7 +2300,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_fbmb+=element->TotalFloatingBmb();
++		local_fbmb+=element->TotalFloatingBmb(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_fbmb,&total_fbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_fbmb,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -2293,7 +2309,7 @@
+ 	*pFbmb=total_fbmb;
+ 
+ }/*}}}*/
+-void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb){/*{{{*/
++void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_gbmb = 0;
+ 	IssmDouble total_gbmb;
+@@ -2300,7 +2316,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_gbmb+=element->TotalGroundedBmb();
++		local_gbmb+=element->TotalGroundedBmb(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_gbmb,&total_gbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_gbmb,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -2309,7 +2325,7 @@
+ 	*pGbmb=total_gbmb;
+ 
+ }/*}}}*/
+-void FemModel::TotalSmbx(IssmDouble* pSmb){/*{{{*/
++void FemModel::TotalSmbx(IssmDouble* pSmb, bool scaled){/*{{{*/
+ 
+ 	IssmDouble local_smb = 0;
+ 	IssmDouble total_smb;
+@@ -2316,7 +2332,7 @@
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+-		local_smb+=element->TotalSmb();
++		local_smb+=element->TotalSmb(scaled);
+ 	}
+ 	ISSM_MPI_Reduce(&local_smb,&total_smb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&total_smb,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22326)
+@@ -860,7 +860,7 @@
+ void       Element::FindParam(int** pvalues,int* psize,int paramenum){/*{{{*/
+ 	this->parameters->FindParam(pvalues,psize,paramenum);
+ }/*}}}*/
+-IssmDouble Element::FloatingArea(IssmDouble* mask){/*{{{*/
++IssmDouble Element::FloatingArea(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -870,7 +870,7 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->FloatingArea();
++	return this->FloatingArea(scaled);
+ }
+ /*}}}*/
+ void       Element::GetDofList(int** pdoflist,int approximation_enum,int setenum){/*{{{*/
+@@ -1403,7 +1403,7 @@
+ 
+ }
+ /*}}}*/
+-IssmDouble Element::GroundedArea(IssmDouble* mask){/*{{{*/
++IssmDouble Element::GroundedArea(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -1413,7 +1413,7 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->GroundedArea();
++	return this->GroundedArea(scaled);
+ }
+ /*}}}*/
+ bool       Element::HasNodeOnBase(){/*{{{*/
+@@ -1422,7 +1422,7 @@
+ bool       Element::HasNodeOnSurface(){/*{{{*/
+ 	return (this->inputs->Max(MeshVertexonsurfaceEnum)>0.);
+ }/*}}}*/
+-IssmDouble Element::IceMass(void){/*{{{*/
++IssmDouble Element::IceMass(bool scaled){/*{{{*/
+ 
+ 	IssmDouble rho_ice;
+ 
+@@ -1431,10 +1431,10 @@
+ 	/*recover ice density: */
+ 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+ 
+-	return rho_ice*this->IceVolume();
++	return rho_ice*this->IceVolume(scaled);
+ }
+ /*}}}*/
+-IssmDouble Element::IceMass(IssmDouble* mask){/*{{{*/
++IssmDouble Element::IceMass(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -1444,10 +1444,10 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->IceMass();
++	return this->IceMass(scaled);
+ }
+ /*}}}*/
+-IssmDouble Element::IceVolume(IssmDouble* mask){/*{{{*/
++IssmDouble Element::IceVolume(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -1457,10 +1457,10 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->IceVolume();
++	return this->IceVolume(scaled);
+ }
+ /*}}}*/
+-IssmDouble Element::IceVolumeAboveFloatation(IssmDouble* mask){/*{{{*/
++IssmDouble Element::IceVolumeAboveFloatation(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -1470,7 +1470,7 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->IceVolumeAboveFloatation();
++	return this->IceVolumeAboveFloatation(scaled);
+ }
+ /*}}}*/
+ int        Element::Id(){/*{{{*/
+@@ -3136,7 +3136,7 @@
+ 	_assert_(matpar);
+ 	return this->matpar->TMeltingPoint(pressure);
+ }/*}}}*/
+-IssmDouble Element::TotalFloatingBmb(IssmDouble* mask){/*{{{*/
++IssmDouble Element::TotalFloatingBmb(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -3146,10 +3146,10 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->TotalFloatingBmb();
++	return this->TotalFloatingBmb(scaled);
+ }
+ /*}}}*/
+-IssmDouble Element::TotalGroundedBmb(IssmDouble* mask){/*{{{*/
++IssmDouble Element::TotalGroundedBmb(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -3159,10 +3159,10 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->TotalGroundedBmb();
++	return this->TotalGroundedBmb(scaled);
+ }
+ /*}}}*/
+-IssmDouble Element::TotalSmb(IssmDouble* mask){/*{{{*/
++IssmDouble Element::TotalSmb(IssmDouble* mask, bool scaled){/*{{{*/
+ 
+ 	/*Retrieve values of the mask defining the element: */
+ 	for(int i=0;i<this->GetNumberOfVertices();i++){
+@@ -3172,7 +3172,7 @@
+ 	}
+ 
+ 	/*Return: */
+-	return this->TotalSmb();
++	return this->TotalSmb(scaled);
+ }
+ /*}}}*/
+ void       Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22326)
+@@ -80,7 +80,7 @@
+ 		void               FindParam(int* pvalue,int paramenum);
+ 		void               FindParam(IssmDouble* pvalue,int paramenum);
+ 		void               FindParam(int** pvalues,int* psize,int paramenum);
+-		IssmDouble         FloatingArea(IssmDouble* mask);
++		IssmDouble         FloatingArea(IssmDouble* mask, bool scaled);
+ 		void	             GetDofList(int** pdoflist,int approximation_enum,int setenum);
+ 		void	             GetDofListPressure(int** pdoflist,int setenum);
+ 		void	             GetDofListVelocity(int** pdoflist,int setenum);
+@@ -111,13 +111,13 @@
+ 		IssmDouble         GetYcoord(IssmDouble* xyz_list,Gauss* gauss);
+ 		IssmDouble         GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
+ 		void               GradientIndexing(int* indexing,int control_index,bool onsid=false);
+-		IssmDouble         GroundedArea(IssmDouble* mask);
++		IssmDouble         GroundedArea(IssmDouble* mask, bool scaled);
+ 		bool               HasNodeOnBase();
+ 		bool               HasNodeOnSurface();
+-		IssmDouble         IceMass();
+-		IssmDouble         IceMass(IssmDouble* mask);
+-		IssmDouble         IceVolume(IssmDouble* mask);
+-		IssmDouble         IceVolumeAboveFloatation(IssmDouble* mask);
++		IssmDouble         IceMass(bool scaled);
++		IssmDouble         IceMass(IssmDouble* mask, bool scaled);
++		IssmDouble         IceVolume(IssmDouble* mask, bool scaled);
++		IssmDouble         IceVolumeAboveFloatation(IssmDouble* mask, bool scaled);
+ 		int                Id();
+ 		void               InputChangeName(int enum_type,int enum_type_old);
+ 		void               InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+@@ -157,9 +157,9 @@
+ 		void               StressMaxPrincipalCreateInput(void);
+ 		void               ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
+ 		IssmDouble         TMeltingPoint(IssmDouble pressure);
+-		IssmDouble         TotalFloatingBmb(IssmDouble* mask);
+-		IssmDouble         TotalGroundedBmb(IssmDouble* mask);
+-		IssmDouble         TotalSmb(IssmDouble* mask);
++		IssmDouble         TotalFloatingBmb(IssmDouble* mask, bool scaled);
++		IssmDouble         TotalGroundedBmb(IssmDouble* mask, bool scaled);
++		IssmDouble         TotalSmb(IssmDouble* mask, bool scaled);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
+ 		void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
+@@ -202,7 +202,7 @@
+ 		virtual void       ElementResponse(IssmDouble* presponse,int response_enum)=0;
+ 		virtual void       ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
+ 		virtual int        FiniteElement(void)=0;
+-		virtual IssmDouble FloatingArea(void)=0;
++		virtual IssmDouble FloatingArea(bool scaled)=0;
+ 		virtual void       FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating)=0;
+ 		virtual Element*   GetBasalElement(void)=0;
+ 		virtual int        GetElementType(void)=0;
+@@ -220,9 +220,9 @@
+ 		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
+ 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
+ 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+-		virtual IssmDouble GroundedArea(void)=0;
+-		virtual IssmDouble IceVolume(void)=0;
+-		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
++		virtual IssmDouble GroundedArea(bool scaled)=0;
++		virtual IssmDouble IceVolume(bool scaled)=0;
++		virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0;
+ 		virtual void       InputDepthAverageAtBase(int enum_type,int average_enum_type)=0;
+ 		virtual void       InputExtrude(int input_enum,int start)=0;
+ 		virtual void       InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0;
+@@ -288,9 +288,9 @@
+ 		virtual IssmDouble SurfaceArea(void)=0;
+ 		virtual int        TensorInterpolation()=0;
+ 		virtual IssmDouble TimeAdapt()=0;
+-		virtual IssmDouble TotalFloatingBmb(void)=0;
+-		virtual IssmDouble TotalGroundedBmb(void)=0;
+-		virtual IssmDouble TotalSmb(void)=0;
++		virtual IssmDouble TotalFloatingBmb(bool scaled)=0;
++		virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
++		virtual IssmDouble TotalSmb(bool scaled)=0;
+ 		virtual void       Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void       UpdateConstraintsExtrudeFromBase(void)=0;
+ 		virtual void       UpdateConstraintsExtrudeFromTop(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22326)
+@@ -71,7 +71,7 @@
+ 		void        ElementResponse(IssmDouble* presponse,int response_enum);
+ 		void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
+ 		int         FiniteElement(void);
+-		IssmDouble  FloatingArea(void);
++		IssmDouble  FloatingArea(bool scaled);
+ 		void        FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating);
+ 		Element*    GetBasalElement(void){_error_("not implemented yet");};
+ 		void        GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues);
+@@ -86,11 +86,11 @@
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+-		IssmDouble  GroundedArea(void);
++		IssmDouble  GroundedArea(bool scaled);
+ 		bool        HasEdgeOnBase();
+ 		bool        HasEdgeOnSurface();
+-		IssmDouble  IceVolume(void);
+-		IssmDouble  IceVolumeAboveFloatation(void);
++		IssmDouble  IceVolume(bool scaled);
++		IssmDouble  IceVolumeAboveFloatation(bool scaled);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type);
+ 		void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
+ 		bool	   	IsFaceOnBoundary(void);
+@@ -124,9 +124,9 @@
+ 		IssmDouble  SurfaceArea(void);
+ 		int         TensorInterpolation();
+ 		IssmDouble  TimeAdapt();
+-		IssmDouble  TotalFloatingBmb(void);
+-		IssmDouble  TotalGroundedBmb(void);
+-		IssmDouble  TotalSmb(void);
++		IssmDouble  TotalFloatingBmb(bool scaled);
++		IssmDouble  TotalGroundedBmb(bool scaled);
++		IssmDouble  TotalSmb(bool scaled);
+ 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+ 		int         UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf);
+ 		void        ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22326)
+@@ -63,7 +63,7 @@
+ 		void           ElementResponse(IssmDouble* presponse,int response_enum);
+ 		void           ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
+ 		int            FiniteElement(void);
+-		IssmDouble     FloatingArea(void);
++		IssmDouble     FloatingArea(bool scaled);
+ 		void           FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating);
+ 		IssmDouble     GetArea3D(void){_error_("not implemented yet!");};
+ 		IssmDouble     GetAreaSpherical(void){_error_("not implemented yet!");};
+@@ -87,9 +87,9 @@
+ 		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+-		IssmDouble     GroundedArea(void);
+-		IssmDouble     IceVolume(void);
+-		IssmDouble     IceVolumeAboveFloatation(void);
++		IssmDouble     GroundedArea(bool scaled);
++		IssmDouble     IceVolume(bool scaled);
++		IssmDouble     IceVolumeAboveFloatation(bool scaled);
+ 		void           InputDepthAverageAtBase(int enum_type,int average_enum_type);
+ 		void	         InputExtrude(int enum_type,int start);
+ 		void           InputUpdateFromIoModel(int index, IoModel* iomodel);
+@@ -158,9 +158,9 @@
+ 		IssmDouble     SurfaceArea(void);
+ 		int            TensorInterpolation(){_error_("not implemented yet");};
+ 		IssmDouble     TimeAdapt();
+-		IssmDouble     TotalFloatingBmb(void);
+-		IssmDouble     TotalGroundedBmb(void);
+-		IssmDouble     TotalSmb(void);
++		IssmDouble     TotalFloatingBmb(bool scaled);
++		IssmDouble     TotalGroundedBmb(bool scaled);
++		IssmDouble     TotalSmb(bool scaled);
+ 		void           Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+ 		void           UpdateConstraintsExtrudeFromBase(void);
+ 		void           UpdateConstraintsExtrudeFromTop(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22326)
+@@ -56,7 +56,7 @@
+ 		void        ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
+ 		void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){_error_("not implemented yet");};
+ 		int         FiniteElement(void);
+-		IssmDouble  FloatingArea(void){_error_("not implemented yet");};
++		IssmDouble  FloatingArea(bool scaled){_error_("not implemented yet");};
+ 		void        FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating){_error_("not implemented yet");};
+ 		Element*    GetBasalElement(void){_error_("not implemented yet");};
+ 		int         GetElementType(void){_error_("not implemented yet");};
+@@ -75,9 +75,9 @@
+ 		void        GetVerticesCoordinates(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");};
+-		IssmDouble  GroundedArea(void){_error_("not implemented yet");};
+-		IssmDouble  IceVolume(void){_error_("not implemented yet");};
+-		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
++		IssmDouble  GroundedArea(bool scaled){_error_("not implemented yet");};
++		IssmDouble  IceVolume(bool scaled){_error_("not implemented yet");};
++		IssmDouble  IceVolumeAboveFloatation(bool scaled){_error_("not implemented yet");};
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
+ 		void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
+ 		void        InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
+@@ -144,9 +144,9 @@
+ 		IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
+ 		int         TensorInterpolation(void){_error_("not implemented yet");};
+ 		IssmDouble  TimeAdapt(){_error_("not implemented yet");};
+-		IssmDouble  TotalFloatingBmb(void){_error_("not implemented yet");};
+-		IssmDouble  TotalGroundedBmb(void){_error_("not implemented yet");};
+-		IssmDouble  TotalSmb(void){_error_("not implemented yet");};
++		IssmDouble  TotalFloatingBmb(bool scaled){_error_("not implemented yet");};
++		IssmDouble  TotalGroundedBmb(bool scaled){_error_("not implemented yet");};
++		IssmDouble  TotalSmb(bool scaled){_error_("not implemented yet");};
+ 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
+ 		void        UpdateConstraintsExtrudeFromBase(){_error_("not implemented");};
+ 		void        UpdateConstraintsExtrudeFromTop(){_error_("not implemented");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22326)
+@@ -60,7 +60,7 @@
+ 		void        FaceOnFrontIndices(int* pindex1,int* pindex2,int* pindex3);
+ 		void        FaceOnSurfaceIndices(int* pindex1,int* pindex2,int* pindex3);
+ 		int         FiniteElement(void);
+-		IssmDouble  FloatingArea(void){_error_("not implemented yet");};
++		IssmDouble  FloatingArea(bool scaled){_error_("not implemented yet");};
+ 		void        FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating){_error_("not implemented yet");};
+ 		IssmDouble     GetArea3D(void){_error_("not implemented yet!");};
+ 		IssmDouble     GetAreaSpherical(void){_error_("not implemented yet!");};
+@@ -81,11 +81,11 @@
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+ 		void        GradientIndexing(int* indexing,int control_index){_error_("not implemented yet");};
+-		IssmDouble  GroundedArea(void){_error_("not implemented yet");};
++		IssmDouble  GroundedArea(bool scaled){_error_("not implemented yet");};
+ 		bool        HasFaceOnBase();
+ 		bool        HasFaceOnSurface();
+-		IssmDouble  IceVolume(void){_error_("not implemented yet");};
+-		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
++		IssmDouble  IceVolume(bool scaled){_error_("not implemented yet");};
++		IssmDouble  IceVolumeAboveFloatation(bool scaled){_error_("not implemented yet");};
+ 		bool        IsFaceOnBoundary(void){_error_("not implemented yet");};
+ 		bool		   IsIcefront(void);
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");};
+@@ -153,9 +153,9 @@
+ 		IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
+ 		int         TensorInterpolation(void);
+ 		IssmDouble  TimeAdapt(){_error_("not implemented yet");};
+-		IssmDouble  TotalFloatingBmb(void){_error_("not implemented yet");};
+-		IssmDouble  TotalGroundedBmb(void){_error_("not implemented yet");};
+-		IssmDouble  TotalSmb(void){_error_("not implemented yet");};
++		IssmDouble  TotalFloatingBmb(bool scaled){_error_("not implemented yet");};
++		IssmDouble  TotalGroundedBmb(bool scaled){_error_("not implemented yet");};
++		IssmDouble  TotalSmb(bool scaled){_error_("not implemented yet");};
+ 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+ 		void        UpdateConstraintsExtrudeFromBase(){_error_("not implemented");};
+ 		void        UpdateConstraintsExtrudeFromTop(){_error_("not implemented");};
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22325)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22326)
+@@ -87,12 +87,12 @@
+ 		void Divergencex(IssmDouble* pdiv);
+ 		void ElementOperationx(void (Element::*function)(void));
+ 		void ElementResponsex(IssmDouble* presponse,int response_enum);
+-		void FloatingAreax(IssmDouble* pV);
++		void FloatingAreax(IssmDouble* pV, bool scaled);
+ 		void GetInputLocalMinMaxOnNodesx(IssmDouble** pmin,IssmDouble** pmax,IssmDouble* ug);
+-		void GroundedAreax(IssmDouble* pV);
+-		void IceMassx(IssmDouble* pV);
+-		void IceVolumex(IssmDouble* pV);
+-		void IceVolumeAboveFloatationx(IssmDouble* pV);
++		void GroundedAreax(IssmDouble* pV, bool scaled);
++		void IceMassx(IssmDouble* pV, bool scaled);
++		void IceVolumex(IssmDouble* pV, bool scaled);
++		void IceVolumeAboveFloatationx(IssmDouble* pV, bool scaled);
+ 		void MassFluxx(IssmDouble* presponse);
+ 		void MaxAbsVxx(IssmDouble* presponse);
+ 		void MaxAbsVyx(IssmDouble* presponse);
+@@ -111,9 +111,9 @@
+ 		void StrainRateperpendicularx();
+ 		void StrainRateeffectivex();
+ 		void StressIntensityFactorx();
+-		void TotalFloatingBmbx(IssmDouble* pFbmb);
+-		void TotalGroundedBmbx(IssmDouble* pGbmb);
+-		void TotalSmbx(IssmDouble* pSmb);
++		void TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled);
++		void TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled);
++		void TotalSmbx(IssmDouble* pSmb, bool scaled);
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22325)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22326)
+@@ -1076,13 +1076,21 @@
+ 	MaxVzEnum,
+ 	MaxAbsVzEnum,
+ 	FloatingAreaEnum,
++	FloatingAreaScaledEnum,
+ 	GroundedAreaEnum,
++	GroundedAreaScaledEnum,
+ 	IceMassEnum,
++	IceMassScaledEnum,
+ 	IceVolumeEnum,
++	IceVolumeScaledEnum,
+ 	IceVolumeAboveFloatationEnum,
++	IceVolumeAboveFloatationScaledEnum,
+ 	TotalFloatingBmbEnum,
++	TotalFloatingBmbScaledEnum,
+ 	TotalGroundedBmbEnum,
++	TotalGroundedBmbScaledEnum,
+ 	TotalSmbEnum,
++	TotalSmbScaledEnum,
+ 	/*}}}*/
+ 	/*Element Interpolations{{{*/
+ 	P0Enum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22326)
+@@ -1033,13 +1033,21 @@
+ 		case MaxVzEnum : return "MaxVz";
+ 		case MaxAbsVzEnum : return "MaxAbsVz";
+ 		case FloatingAreaEnum : return "FloatingArea";
++		case FloatingAreaScaledEnum : return "FloatingAreaScaled";
+ 		case GroundedAreaEnum : return "GroundedArea";
++		case GroundedAreaScaledEnum : return "GroundedAreaScaled";
+ 		case IceMassEnum : return "IceMass";
++		case IceMassScaledEnum : return "IceMassScaled";
+ 		case IceVolumeEnum : return "IceVolume";
++		case IceVolumeScaledEnum : return "IceVolumeScaled";
+ 		case IceVolumeAboveFloatationEnum : return "IceVolumeAboveFloatation";
++		case IceVolumeAboveFloatationScaledEnum : return "IceVolumeAboveFloatationScaled";
+ 		case TotalFloatingBmbEnum : return "TotalFloatingBmb";
++		case TotalFloatingBmbScaledEnum : return "TotalFloatingBmbScaled";
+ 		case TotalGroundedBmbEnum : return "TotalGroundedBmb";
++		case TotalGroundedBmbScaledEnum : return "TotalGroundedBmbScaled";
+ 		case TotalSmbEnum : return "TotalSmb";
++		case TotalSmbScaledEnum : return "TotalSmbScaled";
+ 		case P0Enum : return "P0";
+ 		case P0ArrayEnum : return "P0Array";
+ 		case P1Enum : return "P1";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22326)
+@@ -1057,13 +1057,21 @@
+ 	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+ 	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+ 	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
++	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
++	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+ 	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
++	      else if (strcmp(name,"IceMassScaled")==0) return IceMassScaledEnum;
+ 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
++	      else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum;
+ 	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
++	      else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
++	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
++	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
++	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22326)
+@@ -889,7 +889,7 @@
+ 	return this->element_type;
+ }
+ /*}}}*/
+-IssmDouble Tria::FloatingArea(void){/*{{{*/
++IssmDouble Tria::FloatingArea(bool scaled){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+@@ -1609,7 +1609,7 @@
+ 	*pxyz_list = xyz_list_edge;
+ 
+ }/*}}}*/
+-IssmDouble Tria::GroundedArea(void){/*{{{*/
++IssmDouble Tria::GroundedArea(bool scaled){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+@@ -1672,7 +1672,7 @@
+ 	}
+ }
+ /*}}}*/
+-IssmDouble Tria::IceVolume(void){/*{{{*/
++IssmDouble Tria::IceVolume(bool scaled){/*{{{*/
+ 
+ 	/*The volume of a truncated prism is area_base * 1/numedges sum(length of edges)*/
+ 
+@@ -1743,7 +1743,7 @@
+ 	}
+ }
+ /*}}}*/
+-IssmDouble Tria::IceVolumeAboveFloatation(void){/*{{{*/
++IssmDouble Tria::IceVolumeAboveFloatation(bool scaled){/*{{{*/
+ 
+ 	/*The volume above floatation: H + rho_water/rho_ice * bathymetry */
+ 	IssmDouble rho_ice,rho_water;
+@@ -3114,7 +3114,7 @@
+ 	return dt;
+ }
+ /*}}}*/
+-IssmDouble Tria::TotalFloatingBmb(void){/*{{{*/
++IssmDouble Tria::TotalFloatingBmb(bool scaled){/*{{{*/
+ 
+ 	/*The fbmb[kg yr-1] of one element is area[m2] * melting_rate [kg m^-2 yr^-1]*/
+ 	int        point1;
+@@ -3151,7 +3151,7 @@
+ 	return Total_Fbmb;
+ }
+ /*}}}*/
+-IssmDouble Tria::TotalGroundedBmb(void){/*{{{*/
++IssmDouble Tria::TotalGroundedBmb(bool scaled){/*{{{*/
+ 
+ 	/*The gbmb[kg yr-1] of one element is area[m2] * gounded melting rate [kg m^-2 yr^-1]*/
+ 	int        point1;
+@@ -3188,7 +3188,7 @@
+ 	return Total_Gbmb;
+ }
+ /*}}}*/
+-IssmDouble Tria::TotalSmb(void){/*{{{*/
++IssmDouble Tria::TotalSmb(bool scaled){/*{{{*/
+ 
+ 	/*The smb[kg yr-1] of one element is area[m2] * smb [kg m^-2 yr^-1]*/
+ 	IssmDouble base,smb,rho_ice;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22325)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22326)
+@@ -685,7 +685,7 @@
+ 	return this->element_type;
+ }
+ /*}}}*/
+-IssmDouble Penta::FloatingArea(void){/*{{{*/
++IssmDouble Penta::FloatingArea(bool scaled){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+@@ -1159,7 +1159,7 @@
+ 	*pxyz_list = xyz_list;
+ 
+ }/*}}}*/
+-IssmDouble Penta::GroundedArea(void){/*{{{*/
++IssmDouble Penta::GroundedArea(bool scaled){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+@@ -1180,7 +1180,7 @@
+ 	return phi*base_area;
+ }
+ /*}}}*/
+-IssmDouble Penta::IceVolume(void){/*{{{*/
++IssmDouble Penta::IceVolume(bool scaled){/*{{{*/
+ 
+ 	/*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
+ 	IssmDouble base,height;
+@@ -1202,7 +1202,7 @@
+ 	return base*height;
+ }
+ /*}}}*/
+-IssmDouble Penta::IceVolumeAboveFloatation(void){/*{{{*/
++IssmDouble Penta::IceVolumeAboveFloatation(bool scaled){/*{{{*/
+ 
+ 	/*Volume above floatation: H + rho_water/rho_ice*bathymetry for nodes on the bed*/
+ 	IssmDouble rho_ice,rho_water;
+@@ -2632,7 +2632,7 @@
+ 
+ 	return dt;
+ }/*}}}*/
+-IssmDouble Penta::TotalFloatingBmb(void){/*{{{*/
++IssmDouble Penta::TotalFloatingBmb(bool scaled){/*{{{*/
+ 
+ 	/*The fbmb[kg yr-1] of one element is area[m2] * melting_rate [kg m^-2 yr^-1]*/
+ 	int        point1;
+@@ -2669,7 +2669,7 @@
+ 	return Total_Fbmb;
+ }
+ /*}}}*/
+-IssmDouble Penta::TotalGroundedBmb(void){/*{{{*/
++IssmDouble Penta::TotalGroundedBmb(bool scaled){/*{{{*/
+ 
+ 	/*The gbmb[kg yr-1] of one element is area[m2] * gounded melting rate [kg m^-2 yr^-1]*/
+ 	int        point1;
+@@ -2706,7 +2706,7 @@
+ 	return Total_Gbmb;
+ }
+ /*}}}*/
+-IssmDouble Penta::TotalSmb(void){/*{{{*/
++IssmDouble Penta::TotalSmb(bool scaled){/*{{{*/
+ 
+ 	/*The smb[Gt yr-1] of one element is area[m2] * smb [ m ice yr^-1] * rho_ice [kg m-3] / 1e+10^12 */
+ 	IssmDouble base,smb,rho_ice;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22326-22327.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22326-22327.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22326-22327.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22326)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22327)
+@@ -96,7 +96,7 @@
+ 		md = checkfield(md,'fieldname','mesh.numberofvertices','>',0)
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+ 		md = checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[np.nan,3]);
+-		if(len(self.scale_factor)>1):
++		if(np.size(self.scale_factor,axis=0)>1):
+                         md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+                 
+ 		if solution=='ThermalSolution':
Index: /issm/oecreview/Archive/21724-22754/ISSM-22327-22328.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22327-22328.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22327-22328.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22327)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22328)
+@@ -96,7 +96,7 @@
+ 		md = checkfield(md,'fieldname','mesh.numberofvertices','>',0)
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+ 		md = checkfield(md,'fieldname','mesh.segments','NaN',1,'Inf',1,'>',0,'size',[np.nan,3]);
+-		if(np.size(self.scale_factor,axis=0)>1):
++		if(np.size(self.scale_factor)>1):
+                         md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+                 
+ 		if solution=='ThermalSolution':
Index: /issm/oecreview/Archive/21724-22754/ISSM-22328-22329.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22328-22329.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22328-22329.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22328)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22329)
+@@ -119,7 +119,7 @@
+ 		md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message',"'mesh.average_vertex_connectivity' should be at least 24 in 3d")
+-		if(numel(self.scale_factor)>1):
++		if(np.size(self.scale_factor)>1):
+                         md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.py	(revision 22328)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.py	(revision 22329)
+@@ -95,7 +95,7 @@
+ 		md = checkfield(md,'fieldname','mesh.vertexonbase','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.vertexonsurface','size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+-		if(numel(self.scale_factor)>1):
++		if(np.size(self.scale_factor)>1):
+                         md = checkfield(md,'fieldname','mesh.scale_factor','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
+ 
+ 		if solution=='ThermalSolution':
Index: /issm/oecreview/Archive/21724-22754/ISSM-22329-22330.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22329-22330.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22329-22330.diff	(revision 22755)
@@ -0,0 +1,494 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22329)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22330)
+@@ -893,7 +893,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+-	IssmDouble  phi;
++	IssmDouble  phi,scalefactor,floatingarea;
+ 	IssmDouble *xyz_list  = NULL;
+ 
+ 	if(!IsIceInElement())return 0.;
+@@ -904,10 +904,16 @@
+ 
+ 	this->GetVerticesCoordinates(&xyz_list);
+ 	phi=this->GetGroundedPortion(xyz_list);
++	floatingarea=(1-phi)*this->GetArea();
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		floatingarea=floatingarea*scalefactor;
++	}
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
+-	return (1-phi)*this->GetArea();
++	return floatingarea;
+ }
+ /*}}}*/
+ void       Tria::FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating){/*{{{*/
+@@ -1613,7 +1619,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+-	IssmDouble  phi;
++	IssmDouble  phi,scalefactor,groundedarea;
+ 	IssmDouble *xyz_list  = NULL;
+ 
+ 	if(!IsIceInElement())return 0.;
+@@ -1624,10 +1630,16 @@
+ 
+ 	this->GetVerticesCoordinates(&xyz_list);
+ 	phi=this->GetGroundedPortion(xyz_list);
++	groundedarea=phi*this->GetArea();
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		groundedarea=groundedarea*scalefactor;
++	}
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
+-	return phi*this->GetArea();
++	return groundedarea;
+ }
+ /*}}}*/
+ bool       Tria::HasEdgeOnBase(){/*{{{*/
+@@ -1678,11 +1690,13 @@
+ 
+ 	/*Intermediaries*/
+ 	int i, numiceverts;
+-	IssmDouble area_base,surface,base,Haverage;
++	IssmDouble area_base,surface,base,Haverage,scalefactor;
+ 	IssmDouble Haux[NUMVERTICES], surfaces[NUMVERTICES], bases[NUMVERTICES];
++	IssmDouble SFaux[NUMVERTICES], scalefactors[NUMVERTICES];
+ 	IssmDouble s[2]; // s:fraction of intersected triangle edges, that lies inside ice
+ 	int* indices=NULL;
+ 	IssmDouble* H=NULL;
++	IssmDouble* SF=NULL;
+ 
+ 	if(!IsIceInElement())return 0.;
+ 
+@@ -1690,15 +1704,40 @@
+ 	parameters->FindParam(&domaintype,DomainTypeEnum);
+ 
+ 	if(false && IsIcefront()){
+-		area_base=this->GetAreaIce();
+ 		//Assumption: linear ice thickness profile on element. 
+ 		//Hence ice thickness at intersection of levelset function with triangle edge is linear interpolation of ice thickness at vertices.
+ 		this->GetLevelsetIntersection(&indices, &numiceverts, s, MaskIceLevelsetEnum, 0.);
++		int numthk=numiceverts+2;
++		H=xNew<IssmDouble>(numthk);
++		//Correct area distortion caused by projection if requestion
++		area_base=this->GetAreaIce();
++		if(scaled==true){
++			GetInputListOnVertices(&scalefactors[0],MeshScaleFactorEnum);
++			for(i=0;i<NUMVERTICES;i++) SFaux[i]= scalefactors[indices[i]]; //sort thicknesses in ice/noice
++			switch(numiceverts){
++				case 1: // average over triangle 
++					SF[0]=SFaux[0];
++					SF[1]=SFaux[0]+s[0]*(SFaux[1]-SFaux[0]);
++					SF[2]=SFaux[0]+s[1]*(SFaux[2]-SFaux[0]);
++					break;
++				case 2: // average over quadrangle
++					SF[0]=SFaux[0];
++					SF[1]=SFaux[1];
++					SF[2]=SFaux[0]+s[0]*(SFaux[2]-SFaux[0]);
++					SF[3]=SFaux[1]+s[1]*(SFaux[2]-SFaux[1]);
++					break;
++				default:
++					_error_("Number of ice covered vertices wrong in Tria::IceVolume()");
++					break;
++			}
++			scalefactor=0.;
++			for(i=0;i<numthk;i++)	scalefactor+=SF[i];
++			scalefactor/=IssmDouble(numthk);
++			area_base=area_base*scalefactor;
++		}
+ 		GetInputListOnVertices(&surfaces[0],SurfaceEnum);
+ 		GetInputListOnVertices(&bases[0],BaseEnum);
+ 		for(i=0;i<NUMVERTICES;i++) Haux[i]= surfaces[indices[i]]-bases[indices[i]]; //sort thicknesses in ice/noice
+-		int numthk=numiceverts+2;
+-		H=xNew<IssmDouble>(numthk);
+ 		switch(numiceverts){
+ 			case 1: // average over triangle 
+ 				H[0]=Haux[0];
+@@ -1722,6 +1761,11 @@
+ 	else{
+ 		/*First get back the area of the base*/
+ 		area_base=this->GetArea();
++		if(scaled==true){
++			Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++			scalefactor_input->GetInputAverage(&scalefactor);
++			area_base=area_base*scalefactor;
++		}
+ 
+ 		/*Now get the average height*/
+ 		Input* surface_input = inputs->GetInput(SurfaceEnum); _assert_(surface_input);
+@@ -1734,6 +1778,7 @@
+ 	/*Cleanup & return: */
+ 	xDelete<int>(indices);
+ 	xDelete<IssmDouble>(H);
++	xDelete<IssmDouble>(SF);
+ 
+ 	if(domaintype==Domain2DverticalEnum){
+ 	  return area_base;
+@@ -1747,7 +1792,7 @@
+ 
+ 	/*The volume above floatation: H + rho_water/rho_ice * bathymetry */
+ 	IssmDouble rho_ice,rho_water;
+-	IssmDouble base,surface,bed,bathymetry;
++	IssmDouble base,surface,bed,bathymetry,scalefactor;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	if(!IsIceInElement() || IsFloating())return 0;
+@@ -1760,6 +1805,11 @@
+ 	 * http://en.wikipedia.org/wiki/Triangle
+ 	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
+ 	base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		base=base*scalefactor;
++	}
+ 
+ 	/*Now get the average height and bathymetry*/
+ 	Input* surface_input    = inputs->GetInput(SurfaceEnum);    _assert_(surface_input);
+@@ -3120,7 +3170,7 @@
+ 	int        point1;
+ 	bool       mainlyfloating;
+ 	IssmDouble fbmb=0;
+-	IssmDouble rho_ice,fraction1,fraction2,floatingmelt,Jdet;
++	IssmDouble rho_ice,fraction1,fraction2,floatingmelt,Jdet,scalefactor;
+ 	IssmDouble Total_Fbmb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	Gauss*     gauss     = NULL;
+@@ -3131,6 +3181,10 @@
+ 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	Input* floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input); 
+ 	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++	Input* scalefactor_input = NULL;
++	if(scaled==true){
++		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input); 
++	}
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+@@ -3141,7 +3195,11 @@
+ 		gauss->GaussPoint(ig);
+ 		this->JacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+ 		floatingmelt_input->GetInputValue(&floatingmelt,gauss);
+-		fbmb+=floatingmelt*Jdet*gauss->weight;
++		if(scaled==true){
++			scalefactor_input->GetInputValue(&scalefactor,gauss);
++		}
++		else scalefactor=1;
++		fbmb+=floatingmelt*Jdet*gauss->weight*scalefactor;
+ 	}
+ 
+    Total_Fbmb=rho_ice*fbmb;	        // from volume to mass
+@@ -3157,7 +3215,7 @@
+ 	int        point1;
+ 	bool       mainlyfloating;
+ 	IssmDouble gbmb=0;
+-	IssmDouble rho_ice,fraction1,fraction2,groundedmelt,Jdet;
++	IssmDouble rho_ice,fraction1,fraction2,groundedmelt,Jdet,scalefactor;
+ 	IssmDouble Total_Gbmb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	Gauss*     gauss     = NULL;
+@@ -3168,6 +3226,10 @@
+ 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	Input* groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input); 
+ 	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++	Input* scalefactor_input = NULL;
++	if(scaled==true){
++		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input); 
++	}
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+@@ -3178,7 +3240,11 @@
+ 		gauss->GaussPoint(ig);
+ 		this->JacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+ 		groundedmelt_input->GetInputValue(&groundedmelt,gauss);
+-		gbmb+=groundedmelt*Jdet*gauss->weight;
++		if(scaled==true){
++			scalefactor_input->GetInputValue(&scalefactor,gauss);
++		}
++		else scalefactor=1;
++		gbmb+=groundedmelt*Jdet*gauss->weight*scalefactor;
+ 	}
+ 
+    Total_Gbmb=rho_ice*gbmb;	        // from volume to mass
+@@ -3191,7 +3257,7 @@
+ IssmDouble Tria::TotalSmb(bool scaled){/*{{{*/
+ 
+ 	/*The smb[kg yr-1] of one element is area[m2] * smb [kg m^-2 yr^-1]*/
+-	IssmDouble base,smb,rho_ice;
++	IssmDouble base,smb,rho_ice,scalefactor;
+ 	IssmDouble Total_Smb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -3209,8 +3275,15 @@
+ 
+ 	/*Now get the average SMB over the element*/
+ 	Input* smb_input = inputs->GetInput(SmbMassBalanceEnum); _assert_(smb_input);
+-	smb_input->GetInputAverage(&smb);																								// average smb on element in m ice s-1
+-   Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
++	smb_input->GetInputAverage(&smb);	// average smb on element in m ice s-1
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element 
++	}
++	else{
++		scalefactor=1.;
++	}
++   Total_Smb=rho_ice*base*smb*scalefactor;	// smb on element in kg s-1
+ 
+ 	/*Return: */
+ 	return Total_Smb;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22329)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22330)
+@@ -689,7 +689,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+-	IssmDouble  phi,base_area;
++	IssmDouble  phi,base_area,scalefactor,floatingarea;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 
+ 	if(!IsIceInElement() || !IsOnBase())return 0.;
+@@ -702,8 +702,16 @@
+ 	phi=this->GetGroundedPortion(&xyz_list[0][0]);
+ 	base_area= 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
+ 
++	floatingarea=(1-phi)*base_area;
++
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		floatingarea=floatingarea*scalefactor;
++	}
++
+ 	/*Clean up and return*/
+-	return (1-phi)*base_area;
++	return floatingarea;
+ }
+ /*}}}*/
+ void       Penta::FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating){/*{{{*/
+@@ -1163,7 +1171,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         domaintype;
+-	IssmDouble  phi,base_area;
++	IssmDouble  phi,base_area,scalefactor,groundedarea;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 
+ 	if(!IsIceInElement() || !IsOnBase())return 0.;
+@@ -1176,14 +1184,21 @@
+ 	phi=this->GetGroundedPortion(&xyz_list[0][0]);
+ 	base_area= 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
+ 
++	groundedarea=phi*base_area;
++
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		groundedarea=groundedarea*scalefactor;
++	}
+ 	/*Clean up and return*/
+-	return phi*base_area;
++	return groundedarea;
+ }
+ /*}}}*/
+ IssmDouble Penta::IceVolume(bool scaled){/*{{{*/
+ 
+ 	/*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
+-	IssmDouble base,height;
++	IssmDouble base,height,scalefactor;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	if(!IsIceInElement())return 0;
+@@ -1195,6 +1210,12 @@
+ 	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
+ 	base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
+ 
++	if(scaled==true){ //scale for area projection correction
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		base=base*scalefactor;
++	}
++
+ 	/*Now get the average height*/
+ 	height = 1./3.*((xyz_list[3][2]-xyz_list[0][2])+(xyz_list[4][2]-xyz_list[1][2])+(xyz_list[5][2]-xyz_list[2][2]));
+ 
+@@ -1206,7 +1227,7 @@
+ 
+ 	/*Volume above floatation: H + rho_water/rho_ice*bathymetry for nodes on the bed*/
+ 	IssmDouble rho_ice,rho_water;
+-	IssmDouble base,bed,surface,bathymetry;
++	IssmDouble base,bed,surface,bathymetry,scalefactor;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	if(!IsIceInElement() || IsFloating() || !IsOnBase())return 0;
+@@ -1219,6 +1240,11 @@
+ 	 * http://en.wikipedia.org/wiki/Pentangle
+ 	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
+ 	base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);
++		base=base*scalefactor;
++	}
+ 
+ 	/*Now get the average height above floatation*/
+ 	Input* surface_input    = inputs->GetInput(SurfaceEnum);    _assert_(surface_input);
+@@ -2638,7 +2664,7 @@
+ 	int        point1;
+ 	bool       mainlyfloating;
+ 	IssmDouble fbmb=0;
+-	IssmDouble rho_ice,fraction1,fraction2,floatingmelt,Jdet;
++	IssmDouble rho_ice,fraction1,fraction2,floatingmelt,Jdet,scalefactor;
+ 	IssmDouble Total_Fbmb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	Gauss*     gauss     = NULL;
+@@ -2649,6 +2675,10 @@
+ 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	Input* floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input); 
+ 	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++	Input* scalefactor_input = NULL;
++	if(scaled==true){
++		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input); 
++	}
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+@@ -2659,7 +2689,11 @@
+ 		gauss->GaussPoint(ig);
+ 		this->JacobianDeterminantBase(&Jdet,&xyz_list[0][0],gauss);
+ 		floatingmelt_input->GetInputValue(&floatingmelt,gauss);
+-		fbmb+=floatingmelt*Jdet*gauss->weight;
++		if(scaled==true){
++			scalefactor_input->GetInputValue(&scalefactor,gauss);
++		}
++		else scalefactor=1;
++		fbmb+=floatingmelt*Jdet*gauss->weight*scalefactor;
+ 	}
+ 
+    Total_Fbmb=rho_ice*fbmb;	        // from volume to mass
+@@ -2675,7 +2709,7 @@
+ 	int        point1;
+ 	bool       mainlyfloating;
+ 	IssmDouble gbmb=0;
+-	IssmDouble rho_ice,fraction1,fraction2,groundedmelt,Jdet;
++	IssmDouble rho_ice,fraction1,fraction2,groundedmelt,Jdet,scalefactor;
+ 	IssmDouble Total_Gbmb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	Gauss*     gauss     = NULL;
+@@ -2686,6 +2720,10 @@
+ 	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	Input* groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input); 
+ 	Input* gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++	Input* scalefactor_input = NULL;
++	if(scaled==true){
++		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input); 
++	}
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+@@ -2696,7 +2734,11 @@
+ 		gauss->GaussPoint(ig);
+ 		this->JacobianDeterminantBase(&Jdet,&xyz_list[0][0],gauss);
+ 		groundedmelt_input->GetInputValue(&groundedmelt,gauss);
+-		gbmb+=groundedmelt*Jdet*gauss->weight;
++		if(scaled==true){
++			scalefactor_input->GetInputValue(&scalefactor,gauss);
++		}
++		else scalefactor=1;
++		gbmb+=groundedmelt*Jdet*gauss->weight*scalefactor;
+ 	}
+ 
+    Total_Gbmb=rho_ice*gbmb;	        // from volume to mass
+@@ -2709,7 +2751,7 @@
+ IssmDouble Penta::TotalSmb(bool scaled){/*{{{*/
+ 
+ 	/*The smb[Gt yr-1] of one element is area[m2] * smb [ m ice yr^-1] * rho_ice [kg m-3] / 1e+10^12 */
+-	IssmDouble base,smb,rho_ice;
++	IssmDouble base,smb,rho_ice,scalefactor;
+ 	IssmDouble Total_Smb=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -2729,7 +2771,14 @@
+ 	Input* smb_input = inputs->GetInput(SmbMassBalanceEnum); _assert_(smb_input);
+ 
+ 	smb_input->GetInputAverage(&smb);
+-	Total_Smb=rho_ice*base*smb;// smb on element in kg s-1
++	if(scaled==true){
++		Input* scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
++		scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element 
++	}
++	else{
++		scalefactor=1.;
++	}
++	Total_Smb=rho_ice*base*smb*scalefactor;// smb on element in kg s-1
+ 
+ 	/*Return: */
+ 	return Total_Smb;
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22329)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22330)
+@@ -192,10 +192,16 @@
+ 			field = field*yts
+ 		elif fieldname=='TotalFloatingBmb':
+ 			field = field/10.**12*yts #(GigaTon/year)
++		elif fieldname=='TotalFloatingBmbScaled':
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='TotalGroundedBmb':
+ 			field = field/10.**12*yts #(GigaTon/year)
++		elif fieldname=='TotalGroundedBmbScaled':
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='TotalSmb':
+ 			field = field/10.**12*yts #(GigaTon/year)
++		elif fieldname=='TotalSmbScaled':
++			field = field/10.**12*yts #(GigaTon/year)
+ 		elif fieldname=='SmbMassBalance':
+ 			field = field*yts
+ 		elif fieldname=='SmbPrecipitation':
+Index: ../trunk-jpl/src/m/solve/parseresultsfrombuffer.js
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfrombuffer.js	(revision 22329)
++++ ../trunk-jpl/src/m/solve/parseresultsfrombuffer.js	(revision 22330)
+@@ -98,6 +98,7 @@
+ 		else if (fieldname == 'BasalforcingsGroundediceMeltingRate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+ 		else if (fieldname == 'BasalforcingsFloatingiceMeltingRate') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+ 		else if (fieldname == 'TotalSmb') for (var i=0;i<field.length;i++)field[i]= field[i]/Math.pow(10,12)*yts; //(GigaTon/year)
++		else if (fieldname == 'TotalSmbScaled') for (var i=0;i<field.length;i++)field[i]= field[i]/Math.pow(10,12)*yts; //(GigaTon/year)
+ 		else if (fieldname == 'SmbMassBalance') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+ 		else if (fieldname == 'SmbPrecipitation') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+ 		else if (fieldname == 'SmbRunoff') for (var i=0;i<field.length;i++)field[i]= field[i]*yts;
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22329)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22330)
+@@ -182,10 +182,16 @@
+ 		field = field*yts;
+ 	elseif strcmp(fieldname,'TotalFloatingBmb'),
+ 		field = field/10.^12*yts; %(GigaTon/year)
++	elseif strcmp(fieldname,'TotalFloatingBmbScaled'),
++		field = field/10.^12*yts; %(GigaTon/year)
+ 	elseif strcmp(fieldname,'TotalGroundedBmb'),
+ 		field = field/10.^12*yts; %(GigaTon/year)
++	elseif strcmp(fieldname,'TotalGroundedBmbScaled'),
++		field = field/10.^12*yts; %(GigaTon/year)
+ 	elseif strcmp(fieldname,'TotalSmb'),
+ 		field = field/10.^12*yts; %(GigaTon/year)
++	elseif strcmp(fieldname,'TotalSmbScaled'),
++		field = field/10.^12*yts; %(GigaTon/year)
+ 	elseif strcmp(fieldname,'SmbMassBalance'),
+ 		field = field*yts;
+ 	elseif strcmp(fieldname,'SmbPrecipitation'),
Index: /issm/oecreview/Archive/21724-22754/ISSM-22330-22331.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22330-22331.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22330-22331.diff	(revision 22755)
@@ -0,0 +1,235 @@
+Index: ../trunk-jpl/test/NightlyRun/test504.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.m	(revision 22330)
++++ ../trunk-jpl/test/NightlyRun/test504.m	(revision 22331)
+@@ -4,11 +4,17 @@
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
++md.geometry.bed=md.geometry.base;
++[md.mesh.lat,md.mesh.long] = xy2ll(md.mesh.x,md.mesh.y,-1);
++md.mesh.scale_factor=0.9*ones(md.mesh.numberofvertices,1);
++md.transient.requested_outputs={'default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloatingBmb','TotalFloatingBmbScaled'};
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2'};
+-field_tolerances={1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13};
++field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','IceVolume1','IceVolumeScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1','TotalSmb1','TotalSmbScaled1','TotalFloatingBmb1','TotalFloatingBmbScaled1',...
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','IceVolume2','IceVolumeScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2','TotalSmb2','TotalSmbScaled2','TotalFloatingBmb2','TotalFloatingBmbScaled2'};
++field_tolerances={1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+@@ -17,6 +23,16 @@
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).IceVolume),...
++	(md.results.TransientSolution(1).IceVolumeScaled),...
++	(md.results.TransientSolution(1).GroundedArea),...
++	(md.results.TransientSolution(1).GroundedAreaScaled),...
++	(md.results.TransientSolution(1).FloatingArea),...
++	(md.results.TransientSolution(1).FloatingAreaScaled),...
++	(md.results.TransientSolution(1).TotalSmb),...
++	(md.results.TransientSolution(1).TotalSmbScaled),...
++	(md.results.TransientSolution(1).TotalFloatingBmb),...
++	(md.results.TransientSolution(1).TotalFloatingBmbScaled),...
+ 	(md.results.TransientSolution(2).Vx),...
+ 	(md.results.TransientSolution(2).Vy),...
+ 	(md.results.TransientSolution(2).Vel),...
+@@ -24,4 +40,14 @@
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).IceVolume),...
++	(md.results.TransientSolution(2).IceVolumeScaled),...
++	(md.results.TransientSolution(2).GroundedArea),...
++	(md.results.TransientSolution(2).GroundedAreaScaled),...
++	(md.results.TransientSolution(2).FloatingArea),...
++	(md.results.TransientSolution(2).FloatingAreaScaled),...
++	(md.results.TransientSolution(2).TotalSmb),...
++	(md.results.TransientSolution(2).TotalSmbScaled),...
++	(md.results.TransientSolution(2).TotalFloatingBmb),...
++	(md.results.TransientSolution(2).TotalFloatingBmbScaled),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 22330)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 22331)
+@@ -2,16 +2,18 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
++md.mesh.scale_factor=0.9*ones(md.mesh.numberofvertices,1);
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
++md.transient.requested_outputs={'default','IceVolume','IceVolumeScaled','TotalSmb','TotalSmbScaled','TotalFloatingBmb','TotalFloatingBmbScaled','FloatingArea','FloatingAreaScaled','GroundedArea','GroundedAreaScaled'};
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2'};
+-field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,...
+-						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08};
++field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1','IceVolume1','IceVolumeScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1','TotalSmb1','TotalSmbScaled1','TotalFloatingBmb1','TotalFloatingBmbScaled1', ...
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2','IceVolume2','IceVolumeScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2','TotalSmb2','TotalSmbScaled2','TotalFloatingBmb2','TotalFloatingBmbScaled2'};
++field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+@@ -23,6 +25,16 @@
+ 	(md.results.TransientSolution(1).Thickness),...
+ 	(md.results.TransientSolution(1).Temperature),...
+ 	(md.results.TransientSolution(1).BasalforcingsGroundediceMeltingRate),...
++	(md.results.TransientSolution(1).IceVolume),...
++	(md.results.TransientSolution(1).IceVolumeScaled),...
++	(md.results.TransientSolution(1).GroundedArea),...
++	(md.results.TransientSolution(1).GroundedAreaScaled),...
++	(md.results.TransientSolution(1).FloatingArea),...
++	(md.results.TransientSolution(1).FloatingAreaScaled),...
++	(md.results.TransientSolution(1).TotalSmb),...
++	(md.results.TransientSolution(1).TotalSmbScaled),...
++	(md.results.TransientSolution(1).TotalFloatingBmb),...
++	(md.results.TransientSolution(1).TotalFloatingBmbScaled),...
+ 	(md.results.TransientSolution(2).Vx),...
+ 	(md.results.TransientSolution(2).Vy),...
+ 	(md.results.TransientSolution(2).Vz),...
+@@ -33,4 +45,14 @@
+ 	(md.results.TransientSolution(2).Thickness),...
+ 	(md.results.TransientSolution(2).Temperature),...
+ 	(md.results.TransientSolution(2).BasalforcingsGroundediceMeltingRate),...
++	(md.results.TransientSolution(2).IceVolume),...
++	(md.results.TransientSolution(2).IceVolumeScaled),...
++	(md.results.TransientSolution(2).GroundedArea),...
++	(md.results.TransientSolution(2).GroundedAreaScaled),...
++	(md.results.TransientSolution(2).FloatingArea),...
++	(md.results.TransientSolution(2).FloatingAreaScaled),...
++	(md.results.TransientSolution(2).TotalSmb),...
++	(md.results.TransientSolution(2).TotalSmbScaled),...
++	(md.results.TransientSolution(2).TotalFloatingBmb),...
++	(md.results.TransientSolution(2).TotalFloatingBmbScaled),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 22330)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 22331)
+@@ -12,12 +12,14 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md=setflowequation(md,'SSA','all')
++md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
++md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloaringBmb','TotalFloatingBmbScaled']
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+ 
+ # Fields and tolerances to track changes
+-field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2']
+-field_tolerances=[1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13]
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','IceVolume1','IceVolumeScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1','TotalSmb1','TotalSmbScaled1','TotalFloatingBmb1','TotalFloatingBmbScaled1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','IceVolume2','IceVolumeScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2','TotalSmb2','TotalSmbScaled2','TotalFloatingBmb2','TotalFloatingBmbScaled2']
++field_tolerances=[1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13],
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+@@ -26,6 +28,16 @@
+ 	md.results.TransientSolution[0].Base,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[0].IceVolumeScaled,\
++	md.results.TransientSolution[0].GroundedArea,\
++	md.results.TransientSolution[0].GroundedAreaScaled,\
++	md.results.TransientSolution[0].FloatingArea,\
++	md.results.TransientSolution[0].FloatingAreaScaled,\
++	md.results.TransientSolution[0].TotalSmb,\
++	md.results.TransientSolution[0].TotalSmbScaled,\
++	md.results.TransientSolution[0].TotalFloatingBmb,\
++	md.results.TransientSolution[0].TotalFloatingBmbScaled,\
+ 	md.results.TransientSolution[1].Vx,\
+ 	md.results.TransientSolution[1].Vy,\
+ 	md.results.TransientSolution[1].Vel,\
+@@ -33,4 +45,14 @@
+ 	md.results.TransientSolution[1].Base,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[1].IceVolumeScaled,\
++	md.results.TransientSolution[1].GroundedArea,\
++	md.results.TransientSolution[1].GroundedAreaScaled,\
++	md.results.TransientSolution[1].FloatingArea,\
++	md.results.TransientSolution[1].FloatingAreaScaled,\
++	md.results.TransientSolution[1].TotalSmb,\
++	md.results.TransientSolution[1].TotalSmbScaled,\
++	md.results.TransientSolution[1].TotalFloatingBmb,\
++	md.results.TransientSolution[1].TotalFloatingBmbScaled,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 22330)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 22331)
+@@ -11,16 +11,18 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
++md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
+ md.extrude(2,1.)
+ md=setflowequation(md,'HO','all')
++md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloaringBmb','TotalFloatingBmbScaled']
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+ 
+ # Fields and tolerances to track changes
+-field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1', \
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2']
+-field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,\
+-						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08]
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1','IceVolume1','IceVolumeScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1','TotalSmb1','TotalSmbScaled1','TotalFloatingBmb1','TotalFloatingBmbScaled1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2','IceVolume2','IceVolumeScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2','TotalSmb2','TotalSmbScaled2','TotalFloatingBmb2','TotalFloatingBmbScaled2']
++field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+@@ -32,6 +34,16 @@
+ 	md.results.TransientSolution[0].Thickness,\
+ 	md.results.TransientSolution[0].Temperature,\
+ 	md.results.TransientSolution[0].BasalforcingsGroundediceMeltingRate,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[0].IceVolumeScaled,\
++	md.results.TransientSolution[0].GroundedArea,\
++	md.results.TransientSolution[0].GroundedAreaScaled,\
++	md.results.TransientSolution[0].FloatingArea,\
++	md.results.TransientSolution[0].FloatingAreaScaled,\
++	md.results.TransientSolution[0].TotalSmb,\
++	md.results.TransientSolution[0].TotalSmbScaled,\
++	md.results.TransientSolution[0].TotalFloatingBmb,\
++	md.results.TransientSolution[0].TotalFloatingBmbScaled,\
+ 	md.results.TransientSolution[1].Vx,\
+ 	md.results.TransientSolution[1].Vy,\
+ 	md.results.TransientSolution[1].Vz,\
+@@ -42,4 +54,14 @@
+ 	md.results.TransientSolution[1].Thickness,\
+ 	md.results.TransientSolution[1].Temperature,\
+ 	md.results.TransientSolution[1].BasalforcingsGroundediceMeltingRate,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[1].IceVolumeScaled,\
++	md.results.TransientSolution[1].GroundedArea,\
++	md.results.TransientSolution[1].GroundedAreaScaled,\
++	md.results.TransientSolution[1].FloatingArea,\
++	md.results.TransientSolution[1].FloatingAreaScaled,\
++	md.results.TransientSolution[1].TotalSmb,\
++	md.results.TransientSolution[1].TotalSmbScaled,\
++	md.results.TransientSolution[1].TotalFloatingBmb,\
++	md.results.TransientSolution[1].TotalFloatingBmbScaled,\
+ 	]
+Index: ../trunk-jpl/test/Archives/Archive504.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22331-22332.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22331-22332.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22331-22332.diff	(revision 22755)
@@ -0,0 +1,285 @@
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 22331)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 22332)
+@@ -1,5 +1,5 @@
+ %Test Name: SquareSheetShelfGroundingLine2dAggressive
+-md=triangle(model(),'../Exp/Square.exp',150000.);
++md=triangle(model(),'../Exp/Square.exp',150000.); %was 150000.
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'SSA','all');
+@@ -13,18 +13,19 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
+-md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation'};
++md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
++md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled'};
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatationScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+@@ -32,6 +33,11 @@
+ 	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(1).IceVolume),...
+ 	(md.results.TransientSolution(1).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(1).GroundedArea),...
++	(md.results.TransientSolution(1).GroundedAreaScaled),...
++	(md.results.TransientSolution(1).FloatingArea),...
++	(md.results.TransientSolution(1).FloatingAreaScaled),...
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+@@ -38,6 +44,11 @@
+ 	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).IceVolume),...
+ 	(md.results.TransientSolution(2).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(2).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(2).GroundedArea),...
++	(md.results.TransientSolution(2).GroundedAreaScaled),...
++	(md.results.TransientSolution(2).FloatingArea),...
++	(md.results.TransientSolution(2).FloatingAreaScaled),...
+ 	(md.results.TransientSolution(3).Base),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+@@ -44,4 +55,9 @@
+ 	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).IceVolume),...
+ 	(md.results.TransientSolution(3).IceVolumeAboveFloatation),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(3).GroundedArea),...
++	(md.results.TransientSolution(3).GroundedAreaScaled),...
++	(md.results.TransientSolution(3).FloatingArea),...
++	(md.results.TransientSolution(3).FloatingAreaScaled),...
+ 	};
+Index: ../trunk-jpl/test/Archives/Archive424.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive426.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 22331)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 22332)
+@@ -21,18 +21,19 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+-md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation']
++md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
++md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
+ 
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',
+-									'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',
+-									'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-									1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-									1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatationScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1',
++									'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceVolumeAboveFloatationScaled2','GroundedAred2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',
++									'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++									1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++									1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[md.results.TransientSolution[0].Base,
+ 							md.results.TransientSolution[0].Surface,
+ 							md.results.TransientSolution[0].Thickness,
+@@ -39,6 +40,11 @@
+ 							md.results.TransientSolution[0].MaskGroundediceLevelset,
+ 							md.results.TransientSolution[0].IceVolume,
+ 							md.results.TransientSolution[0].IceVolumeAboveFloatation,
++							md.results.TransientSolution[0].IceVolumeAboveFloatationScaled,
++							md.results.TransientSolution[0].GroundedArea,
++							md.results.TransientSolution[0].GroundedAreaScaled,
++							md.results.TransientSolution[0].FloatingArea,
++							md.results.TransientSolution[0].FloatingAreaScaled,
+ 							md.results.TransientSolution[1].Base,
+ 							md.results.TransientSolution[1].Surface,
+ 							md.results.TransientSolution[1].Thickness,
+@@ -45,9 +51,19 @@
+ 							md.results.TransientSolution[1].MaskGroundediceLevelset,
+ 							md.results.TransientSolution[1].IceVolume,
+ 							md.results.TransientSolution[1].IceVolumeAboveFloatation,
++							md.results.TransientSolution[1].IceVolumeAboveFloatationScaled,
++							md.results.TransientSolution[1].GroundedArea,
++							md.results.TransientSolution[1].GroundedAreaScaled,
++							md.results.TransientSolution[1].FloatingArea,
++							md.results.TransientSolution[1].FloatingAreaScaled,
+ 							md.results.TransientSolution[2].Base,
+ 							md.results.TransientSolution[2].Surface,
+ 							md.results.TransientSolution[2].Thickness,
+ 							md.results.TransientSolution[2].MaskGroundediceLevelset,
+ 							md.results.TransientSolution[2].IceVolume,
+-							md.results.TransientSolution[2].IceVolumeAboveFloatation]
++							md.results.TransientSolution[2].IceVolumeAboveFloatation,
++							md.results.TransientSolution[2].IceVolumeAboveFloatationScaled,
++							md.results.TransientSolution[2].GroundedArea,
++							md.results.TransientSolution[2].GroundedAreaScaled,
++							md.results.TransientSolution[2].FloatingArea,
++							md.results.TransientSolution[2].FloatingAreaScaled]
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22331)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22332)
+@@ -21,7 +21,8 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+-md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceMass']
++md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceMass','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
++md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
+ md.extrude(3,1.)
+ md.cluster=generic('name',gethostname(),'np',3)
+ 
+@@ -28,13 +29,13 @@
+ md=solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1',
+-        'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2',
+-        'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3']
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1','IceVolumeAboveFloatationScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1',
++        'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedAred2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',
++        'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
++        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
+@@ -42,7 +43,12 @@
+         md.results.TransientSolution[0].MaskGroundediceLevelset,
+         md.results.TransientSolution[0].IceVolume,
+         md.results.TransientSolution[0].IceVolumeAboveFloatation,
+-		  md.results.TransientSolution[0].IceMass,
++	md.results.TransientSolution[0].IceMass,
++	md.results.TransientSolution[0].IceVolumeAboveFloatationScaled,
++	md.results.TransientSolution[0].GroundedArea,
++	md.results.TransientSolution[0].GroundedAreaScaled,
++	md.results.TransientSolution[0].FloatingArea,
++	md.results.TransientSolution[0].FloatingAreaScaled,
+         md.results.TransientSolution[1].Base,
+         md.results.TransientSolution[1].Surface,
+         md.results.TransientSolution[1].Thickness,
+@@ -49,7 +55,12 @@
+         md.results.TransientSolution[1].MaskGroundediceLevelset,
+         md.results.TransientSolution[1].IceVolume,
+         md.results.TransientSolution[1].IceVolumeAboveFloatation,
+-		  md.results.TransientSolution[1].IceMass,
++	md.results.TransientSolution[1].IceMass,
++	md.results.TransientSolution[1].IceVolumeAboveFloatationScaled,
++	md.results.TransientSolution[1].GroundedArea,
++	md.results.TransientSolution[1].GroundedAreaScaled,
++	md.results.TransientSolution[1].FloatingArea,
++	md.results.TransientSolution[1].FloatingAreaScaled,
+         md.results.TransientSolution[2].Base,
+         md.results.TransientSolution[2].Surface,
+         md.results.TransientSolution[2].Thickness,
+@@ -56,4 +67,9 @@
+         md.results.TransientSolution[2].MaskGroundediceLevelset,
+         md.results.TransientSolution[2].IceVolume,
+         md.results.TransientSolution[2].IceVolumeAboveFloatation,
+-		  md.results.TransientSolution[2].IceMass]
++	md.results.TransientSolution[2].IceMass,
++	md.results.TransientSolution[2].IceVolumeAboveFloatationScaled,
++	md.results.TransientSolution[2].GroundedArea,
++	md.results.TransientSolution[2].GroundedAreaScaled,
++	md.results.TransientSolution[2].FloatingArea,
++	md.results.TransientSolution[2].FloatingAreaScaled]
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 22331)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 22332)
+@@ -13,7 +13,9 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
+-md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceMass'};
++md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
++md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled','IceMass'};
++md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
+ md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+@@ -20,12 +22,12 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,...
+-	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1','IceVolumeAboveFloatationScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+@@ -34,6 +36,11 @@
+ 	(md.results.TransientSolution(1).IceVolume),...
+ 	(md.results.TransientSolution(1).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(1).IceMass),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(1).GroundedArea),...
++	(md.results.TransientSolution(1).GroundedAreaScaled),...
++	(md.results.TransientSolution(1).FloatingArea),...
++	(md.results.TransientSolution(1).FloatingAreaScaled),...
+ 	(md.results.TransientSolution(2).Base),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+@@ -41,6 +48,11 @@
+ 	(md.results.TransientSolution(2).IceVolume),...
+ 	(md.results.TransientSolution(2).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(2).IceMass),...
++	(md.results.TransientSolution(2).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(2).GroundedArea),...
++	(md.results.TransientSolution(2).GroundedAreaScaled),...
++	(md.results.TransientSolution(2).FloatingArea),...
++	(md.results.TransientSolution(2).FloatingAreaScaled),...
+ 	(md.results.TransientSolution(3).Base),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+@@ -48,4 +60,9 @@
+ 	(md.results.TransientSolution(3).IceVolume),...
+ 	(md.results.TransientSolution(3).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(3).IceMass),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatationScaled),...
++	(md.results.TransientSolution(3).GroundedArea),...
++	(md.results.TransientSolution(3).GroundedAreaScaled),...
++	(md.results.TransientSolution(3).FloatingArea),...
++	(md.results.TransientSolution(3).FloatingAreaScaled),...
+ 	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22332-22333.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22332-22333.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22332-22333.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 22332)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 22333)
+@@ -26,8 +26,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13};
++	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,5e-12,2e-12,2e-12,5e-12,5e-12,...
++	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,5e-12,5e-11,5e-11};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22333-22334.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22333-22334.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22333-22334.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 22333)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 22334)
+@@ -22,7 +22,7 @@
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+ md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
+-md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
++md.mesh.scale_factor=1*np.ones((md.mesh.numberofvertices))
+ 
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22333)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22334)
+@@ -22,7 +22,7 @@
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+ md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceMass','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
+-md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
++md.mesh.scale_factor=1*np.ones((md.mesh.numberofvertices))
+ md.extrude(3,1.)
+ md.cluster=generic('name',gethostname(),'np',3)
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22334-22335.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22334-22335.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22334-22335.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 22334)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 22335)
+@@ -14,7 +14,7 @@
+ md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
+ md.extrude(2,1.)
+ md=setflowequation(md,'HO','all')
+-md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloaringBmb','TotalFloatingBmbScaled']
++md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloatingBmb','TotalFloatingBmbScaled']
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 22334)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 22335)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/Pig.py')
+ md=setflowequation(md,'SSA','all')
+ md.mesh.scale_factor=0.9*np.ones((md.mesh.numberofvertices))
+-md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloaringBmb','TotalFloatingBmbScaled']
++md.transient.requested_outputs=['default','IceVolume','IceVolumeScaled','GroundedArea','GroundedAreaScaled','FloatingArea','FloatingAreaScaled','TotalSmb','TotalSmbScaled','TotalFloatingBmb','TotalFloatingBmbScaled']
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22335-22336.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22335-22336.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22335-22336.diff	(revision 22755)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22335)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22336)
+@@ -112,29 +112,53 @@
+ 				Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+ 				switch(outputenum){
+ 					case GroundedAreaEnum:
+-						val_t+=element->GroundedArea(this->mask);
++						val_t+=element->GroundedArea(this->mask,false);
+ 						break;
++					case GroundedAreaScaledEnum:
++						val_t+=element->GroundedArea(this->mask,true);
++						break;
+ 					case FloatingAreaEnum:
+-						val_t+=element->FloatingArea(this->mask);
++						val_t+=element->FloatingArea(this->mask,false);
+ 						break;
++					case FloatingAreaScaledEnum:
++						val_t+=element->FloatingArea(this->mask,true);
++						break;
+ 					case IceMassEnum:
+-						val_t+=element->IceMass(this->mask);
++						val_t+=element->IceMass(this->mask,false);
+ 						break;
++					case IceMassScaledEnum:
++						val_t+=element->IceMass(this->mask,true);
++						break;
+ 					case IceVolumeEnum:
+-						val_t+=element->IceVolume(this->mask);
++						val_t+=element->IceVolume(this->mask,false);
+ 						break;
++					case IceVolumeScaledEnum:
++						val_t+=element->IceVolume(this->mask,true);
++						break;
+ 					case IceVolumeAboveFloatationEnum:
+-						val_t+=element->IceVolumeAboveFloatation(this->mask);
++						val_t+=element->IceVolumeAboveFloatation(this->mask,false);
+ 						break;
++					case IceVolumeAboveFloatationScaledEnum:
++						val_t+=element->IceVolumeAboveFloatation(this->mask,true);
++						break;
+ 					case TotalFloatingBmbEnum:
+-						val_t+=element->TotalFloatingBmb(this->mask);
++						val_t+=element->TotalFloatingBmb(this->mask,false);
+ 						break;
++					case TotalFloatingBmbScaledEnum:
++						val_t+=element->TotalFloatingBmb(this->mask,true);
++						break;
+ 					case TotalGroundedBmbEnum:
+-						val_t+=element->TotalGroundedBmb(this->mask);
++						val_t+=element->TotalGroundedBmb(this->mask,false);
+ 						break;
++					case TotalGroundedBmbScaledEnum:
++						val_t+=element->TotalGroundedBmb(this->mask,true);
++						break;
+ 					case TotalSmbEnum:
+-						val_t+=element->TotalSmb(this->mask);
++						val_t+=element->TotalSmb(this->mask,false);
+ 						break;
++					case TotalSmbScaledEnum:
++						val_t+=element->TotalSmb(this->mask,true);
++						break;
+ 					default:
+ 						_error_("Regional output type " << this->outputname << " not supported yet!");
+ 				}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22336-22337.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22336-22337.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22336-22337.diff	(revision 22755)
@@ -0,0 +1,62 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 22336)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 22337)
+@@ -13,9 +13,8 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
+-md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
++md.mesh.scale_factor=1.1*ones(md.mesh.numberofvertices,1);
+ md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled','IceMass'};
+-md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
+ md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 22336)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 22337)
+@@ -22,7 +22,7 @@
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+ md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
+-md.mesh.scale_factor=1*np.ones((md.mesh.numberofvertices))
++md.mesh.scale_factor=1.1*np.ones((md.mesh.numberofvertices))
+ 
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Transient')
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 22336)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 22337)
+@@ -13,7 +13,7 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
+-md.mesh.scale_factor=ones(md.mesh.numberofvertices,1);
++md.mesh.scale_factor=1.1*ones(md.mesh.numberofvertices,1);
+ md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled'};
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/Archives/Archive426.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive424.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22336)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22337)
+@@ -22,7 +22,7 @@
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration'
+ md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation','IceMass','IceVolumeAboveFloatationScaled','GroundedArea','FloatingArea','GroundedAreaScaled','FloatingAreaScaled']
+-md.mesh.scale_factor=1*np.ones((md.mesh.numberofvertices))
++md.mesh.scale_factor=1.1*np.ones((md.mesh.numberofvertices))
+ md.extrude(3,1.)
+ md.cluster=generic('name',gethostname(),'np',3)
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22337-22338.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22337-22338.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22337-22338.diff	(revision 22755)
@@ -0,0 +1,146 @@
+Index: ../trunk-jpl/test/NightlyRun/test443.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test443.m	(revision 22337)
++++ ../trunk-jpl/test/NightlyRun/test443.m	(revision 22338)
+@@ -13,6 +13,7 @@
+ md.transient.isthermal=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AggressiveMigration';
++md.mesh.scale_factor=1.1*ones(md.mesh.numberofvertices,1);
+ 
+ md.settings.output_frequency=2;
+ md=setflowequation(md,'SSA','all');
+@@ -22,7 +23,8 @@
+ in=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1);
+ regionalmask(find(in))=1;
+ md.transient.requested_outputs={'default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
+-	'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation'};
++	'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation',...
++	'IceMassScaled1','IceVolumeScaled1','IceVolumeAboveFloatationScaled1','IceVolumeAboveFloatationScaled2'};
+ md.outputdefinition.definitions{1}=regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,...
+ 	'definitionstring','Outputdefinition1');
+ md.outputdefinition.definitions{2}=regionaloutput('name','FloatingArea1','outputnamestring','FloatingArea','mask',regionalmask,...
+@@ -41,6 +43,14 @@
+ 	'definitionstring','Outputdefinition8');
+ md.outputdefinition.definitions{9}=regionaloutput('name','IceVolumeAboveFloatation2','outputnamestring','IceVolumeAboveFloatation',...
+ 	'maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md);
++md.outputdefinition.definitions{10}=regionaloutput('name','IceMassScaled1','outputnamestring','IceMassScaled','mask',regionalmask,...
++	'definitionstring','Outputdefinition10');
++md.outputdefinition.definitions{11}=regionaloutput('name','IceVolumeScaled1','outputnamestring','IceVolumeScaled','mask',regionalmask,...
++	'definitionstring','Outputdefinition11');
++md.outputdefinition.definitions{12}=regionaloutput('name','IceVolumeAboveFloatationScaled1','outputnamestring','IceVolumeAboveFloatationScaled','mask',regionalmask,...
++	'definitionstring','Outputdefinition12');
++md.outputdefinition.definitions{13}=regionaloutput('name','IceVolumeAboveFloatationScaled2','outputnamestring','IceVolumeAboveFloatationScaled',...
++	'maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition13','model',md);
+ 
+ md=extrude(md,3,1);
+ md2=collapse(md);
+@@ -49,11 +59,13 @@
+ %Fields and tolerances to track changes
+ field_names     ={'IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21',...
+ 	'Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1',...
++   'IceMassScaled1','IceVolumeScaled1','IceVolumeAboveFloatationScaled1','IceVolumeAboveFloatationScaled21',...
+ 	'IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23',...
+ 	'Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3',...
++	'IceMassScaled3','IceVolumeScaled3','IceVolumeAboveFloatationScaled3','IceVolumeAboveFloatationScaled23',...
+ 	'ExtrudedMask','CollapsedMask'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).IceMass1),...
+ 	(md.results.TransientSolution(1).IceVolume1),...
+@@ -65,6 +77,10 @@
+ 	(md.results.TransientSolution(1).TotalFloatingBmb1),...
+ 	(md.results.TransientSolution(1).TotalGroundedBmb1),...
+ 	(md.results.TransientSolution(1).TotalSmb1),...
++	(md.results.TransientSolution(1).IceMassScaled1),...
++	(md.results.TransientSolution(1).IceVolumeScaled1),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatationScaled1),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatationScaled2),...
+ 	(md.results.TransientSolution(3).IceMass1),...
+ 	(md.results.TransientSolution(3).IceVolume1),...
+ 	(md.results.TransientSolution(3).IceVolumeAboveFloatation1),...
+@@ -75,6 +91,10 @@
+ 	(md.results.TransientSolution(3).TotalFloatingBmb1),...
+ 	(md.results.TransientSolution(3).TotalGroundedBmb1),...
+ 	(md.results.TransientSolution(3).TotalSmb1),...
++	(md.results.TransientSolution(3).IceMassScaled1),...
++	(md.results.TransientSolution(3).IceVolumeScaled1),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatationScaled1),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatationScaled2),...
+ 	length(md.outputdefinition.definitions{1}.mask),...
+ 	length(md2.outputdefinition.definitions{1}.mask),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test443.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test443.py	(revision 22337)
++++ ../trunk-jpl/test/NightlyRun/test443.py	(revision 22338)
+@@ -26,6 +26,7 @@
+ md.transient.isthermal=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AggressiveMigration';
++md.mesh.scale_factor=1.1*np.ones((md.mesh.numberofvertices))
+ 
+ md.settings.output_frequency=2
+ md=setflowequation(md,'SSA','all')
+@@ -34,7 +35,7 @@
+ regionalmask=np.zeros((md.mesh.numberofvertices))
+ inflag=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,'../Exp/SquareHalfRight.exp','node',1)
+ regionalmask[np.nonzero(inflag)[0]] = 1.
+-md.transient.requested_outputs=['default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation']
++md.transient.requested_outputs=['default','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation2','IceVolumeAboveFloatation','IceMassScaled1','IceVolumeScaled1','IceVolumeAboveFloatationScaled1','IceVolumeAboveFloatationScaled2']
+ 
+ md.outputdefinition.definitions=[regionaloutput('name','GroundedArea1','outputnamestring','GroundedArea','mask',regionalmask,'definitionstring','Outputdefinition1'),
+ 		regionaloutput('name','FloatingArea1','outputnamestring','FloatingArea','mask',regionalmask,'definitionstring','Outputdefinition2'),
+@@ -44,7 +45,11 @@
+ 		regionaloutput('name','IceVolume1','outputnamestring','IceVolume','mask',regionalmask,'definitionstring','Outputdefinition6'),
+ 		regionaloutput('name','IceVolumeAboveFloatation1','outputnamestring','IceVolumeAboveFloatation','mask',regionalmask,'definitionstring','Outputdefinition7'),
+ 		regionaloutput('name','TotalSmb1','outputnamestring','TotalSmb','mask',regionalmask,'definitionstring','Outputdefinition8'),
+-		regionaloutput('name','IceVolumeAboveFloatation2','outputnamestring','IceVolumeAboveFloatation','maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md)]
++		regionaloutput('name','IceVolumeAboveFloatation2','outputnamestring','IceVolumeAboveFloatation','maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition9','model',md),
++		regionaloutput('name','IceMassScaled1','outputnamestring','IceMassScaled','mask',regionalmask,'definitionstring','Outputdefinition10'),
++		regionaloutput('name','IceVolumeScaled1','outputnamestring','IceVolumeScaled','mask',regionalmask,'definitionstring','Outputdefinition11'),
++		regionaloutput('name','IceVolumeAboveFloatationScaled1','outputnamestring','IceVolumeAboveFloatationScaled','mask',regionalmask,'definitionstring','Outputdefinition12'),
++		regionaloutput('name','IceVolumeAboveFloatationScaled2','outputnamestring','IceVolumeAboveFloatationScaled','maskexpstring','../Exp/SquareHalfRight.exp','definitionstring','Outputdefinition13','model',md)]
+ 
+ md.extrude(3,1.)
+ md2=copy.deepcopy(md)
+@@ -52,8 +57,8 @@
+ md=solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+-field_names     =['IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21','Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23','Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3','ExtrudedMask','CollapsedMask']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_names     =['IceMass1','IceVolume1','IceVolumeAboveFloatation1','IceVolumeAboveFloatation21','Thickness1','GroundedArea1','FloatingArea1','TotalFloatingBmb1','TotalGroundedBmb1','TotalSmb1','IceMassScaled1','IceVolumeScaled1','IceVolumeAboveFloatationScaled1','IceVolumeAboveFloatationScaled21','IceMass3','IceVolume3','IceVolumeAboveFloatation3','IceVolumeAboveFloatation23','Thickness3','GroundedArea3','FloatingArea3','TotalFloatingBmb3','TotalGroundedBmb3','TotalSmb3','IceMassScaled3','IceVolumeScaled3','IceVolumeAboveFloatationScaled3','IceVolumeAboveFloatationScaled23','ExtrudedMask','CollapsedMask']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].IceMass1,\
+ 	md.results.TransientSolution[0].IceVolume1,\
+@@ -65,6 +70,10 @@
+ 	md.results.TransientSolution[0].TotalFloatingBmb1,\
+ 	md.results.TransientSolution[0].TotalGroundedBmb1,\
+ 	md.results.TransientSolution[0].TotalSmb1,\
++	md.results.TransientSolution[0].IceMassScaled1,\
++	md.results.TransientSolution[0].IceVolumeScaled1,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatationScaled1,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatationScaled2,\
+ 	md.results.TransientSolution[2].IceMass1,\
+ 	md.results.TransientSolution[2].IceVolume1,\
+ 	md.results.TransientSolution[2].IceVolumeAboveFloatation1,\
+@@ -75,6 +84,10 @@
+ 	md.results.TransientSolution[2].TotalFloatingBmb1,\
+ 	md.results.TransientSolution[2].TotalGroundedBmb1,\
+ 	md.results.TransientSolution[2].TotalSmb1,\
++	md.results.TransientSolution[2].IceMassScaled1,\
++	md.results.TransientSolution[2].IceVolumeScaled1,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatationScaled1,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatationScaled2,\
+ 	len(md.outputdefinition.definitions[0].mask),\
+ 	len(md2.outputdefinition.definitions[0].mask),\
+ 	]
+Index: ../trunk-jpl/test/Archives/Archive443.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22338-22339.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22338-22339.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22338-22339.diff	(revision 22755)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/m/coordsystems/ll2xy.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/ll2xy.m	(revision 22338)
++++ ../trunk-jpl/src/m/coordsystems/ll2xy.m	(revision 22339)
+@@ -1,12 +1,15 @@
+-function [x,y] = ll2xy(lat,lon,sgn,central_meridian,standard_parallel)  
++function [x,y,scale_factor] = ll2xy(lat,lon,sgn,central_meridian,standard_parallel)  
+ %LL2XY - converts lat long to polar stereographic
+ %
+ %   Converts from geodetic latitude and longitude to Polar 
+ %   Stereographic (X,Y) coordinates for the polar regions.
++%   Optional scale factor provides the scaling factor needed to correct projection error
++%   in areas and volumes
+ %   Author: Michael P. Schodlok, December 2003 (map2ll)
+ %
+ %   Usage:
+ %      [x,y] = ll2xy(lat,lon,sgn)
++%      [x,y,scale_factor] = ll2xy(lat,lon,sgn)
+ %      [x,y] = ll2xy(lat,lon,sgn,central_meridian,standard_parallel)
+ %
+ %      - sgn = Sign of latitude +1 : north latitude (default is mer=45 lat=70)
+@@ -31,6 +34,11 @@
+ 	error('bad usage');
+ end
+ 
++if nargout~=3 & nargout~=2,
++	help xy2ll
++	error('bad usage');
++end
++
+ % Conversion constant from degrees to radians
+ cde  = 57.29577951;
+ % Radius of the earth in meters
+@@ -64,3 +72,8 @@
+ 	x(cnt1) = 0.0;
+ 	y(cnt1) = 0.0;
+ end
++
++if nargout==3,
++	m=((1+sin(abs(slat)*pi/180))*ones(length(lat),1)./(1+sin(abs(lat)*pi/180)));
++	scale_factor=(1./m).^2;
++end
+Index: ../trunk-jpl/src/m/coordsystems/xy2ll.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/xy2ll.m	(revision 22338)
++++ ../trunk-jpl/src/m/coordsystems/xy2ll.m	(revision 22339)
+@@ -1,13 +1,16 @@
+-function [lat,lon] = xy2ll(x,y,sgn,central_meridian,standard_parallel)
++function [lat,lon,scale_factor] = xy2ll(x,y,sgn,central_meridian,standard_parallel)
+ %XY2LL - converts xy to lat long
+ %
+ %   Converts Polar  Stereographic (X,Y) coordinates for the polar regions to
+ %   latitude and longitude Stereographic (X,Y) coordinates for the polar
+ %   regions.
++%   Optional scale factor provides the scaling factor needed to correct projection error
++%   in areas and volumes
+ %   Author: Michael P. Schodlok, December 2003 (map2xy.m)
+ %
+ %   Usage:
+ %      [lat,lon] = xy2ll(x,y,sgn);
++%      [lat,lon,scale_factor] = xy2ll(x,y,sgn);
+ %      [lat,lon] = xy2ll(x,y,sgn,central_meridian,standard_parallel);
+ %
+ %      - sgn = Sign of latitude +1 : north latitude (default is mer=45 lat=70)
+@@ -32,6 +35,11 @@
+ 	error('bad usage');
+ end
+ 
++if nargout~=3 & nargout~=2,
++	help xy2ll
++	error('bad usage');
++end
++
+ % Conversion constant from degrees to radians
+ cde  = 57.29577951;
+ % Radius of the earth in meters
+@@ -70,3 +78,7 @@
+ lon = lon * 180. / pi;
+ lat = lat * 180. / pi;
+ lon = lon - delta; 
++if nargout==3,
++	m=((1+sin(abs(slat)*pi/180))*ones(length(lat),1)./(1+sin(abs(lat)*pi/180)));
++	scale_factor=(1./m).^2;
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22339-22340.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22339-22340.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22339-22340.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/classes/Params/TransientParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 22339)
++++ ../trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 22340)
+@@ -103,7 +103,7 @@
+ 		output=this->values[0];
+ 		found=true;
+ 	}
+-	else if(time>this->timesteps[this->N-1] || !interpolation){
++	else if(time>this->timesteps[this->N-1]){
+ 		/*get values for the last time: */
+ 		output=this->values[this->N-1];
+ 		found=true;
+@@ -122,7 +122,8 @@
+ 					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
+ 					IssmDouble deltat=this->timesteps[i+1]-this->timesteps[i];
+ 					IssmDouble alpha=(time-this->timesteps[i])/deltat;
+-					output=(1.0-alpha)*this->values[i] + alpha*this->values[i+1];
++					if(interpolation==true) output=(1.0-alpha)*this->values[i] + alpha*this->values[i+1];
++					else output=this->values[i];
+ 					found=true;
+ 					break;
+ 				}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22340-22341.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22340-22341.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22340-22341.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/NightlyRun/test292.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test292.m	(revision 22340)
++++ ../trunk-jpl/test/NightlyRun/test292.m	(revision 22341)
+@@ -6,6 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.basalforcings=linearbasalforcings(md.basalforcings);
+ md.basalforcings.deepwater_melting_rate=[50 100;0 5];
++md.timestepping.interp_forcings=0;
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test292.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test292.py	(revision 22340)
++++ ../trunk-jpl/test/NightlyRun/test292.py	(revision 22341)
+@@ -18,6 +18,7 @@
+ md.cluster=generic('name',gethostname(),'np',3)
+ md.basalforcings=linearbasalforcings(md.basalforcings)
+ md.basalforcings.deepwater_melting_rate = np.array([[50.,100.],[0.,5.]])
++md.timestepping.interp_forcings=0
+ md=solve(md,'Transient')
+ 
+ # Fields and tolerances to track changes
+Index: ../trunk-jpl/test/Archives/Archive292.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22341-22342.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22341-22342.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22341-22342.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22341)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22342)
+@@ -30,12 +30,12 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1','IceMass1','IceVolumeAboveFloatationScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1',
+-        'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedAred2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',
++        'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',
+         'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13]
++        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,2e-12,2e-12,2e-12,5e-12,5e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,1e-13,2e-12,2e-12,5e-12,5e-12]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22342-22343.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22342-22343.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22342-22343.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 22342)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 22343)
+@@ -19,7 +19,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','IceVolume1','IceVolumeScaled1','GroundedArea1','GroundedAreaScaled1','FloatingArea1','FloatingAreaScaled1','TotalSmb1','TotalSmbScaled1','TotalFloatingBmb1','TotalFloatingBmbScaled1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','IceVolume2','IceVolumeScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2','TotalSmb2','TotalSmbScaled2','TotalFloatingBmb2','TotalFloatingBmbScaled2']
+-field_tolerances=[1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13],
++field_tolerances=[1e-12,2e-12,2e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22343-22344.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22343-22344.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22343-22344.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22343)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22344)
+@@ -34,8 +34,8 @@
+         'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,2e-12,2e-12,2e-12,5e-12,5e-12,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,1e-13,2e-12,2e-12,5e-12,5e-12]
++        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,3e-12,2e-12,2e-12,5e-12,5e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,1e-12,5e-11,5e-11,5e-11,5e-11]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22344-22345.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22344-22345.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22344-22345.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/m/plot/plot_unit.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.py	(revision 22344)
++++ ../trunk-jpl/src/m/plot/plot_unit.py	(revision 22345)
+@@ -149,8 +149,11 @@
+ 				triangles=mpl.tri.Triangulation(x,y,elements,EltMask)
+ 			else:
+ 				triangles=mpl.tri.Triangulation(x,y,elements)
+-			#tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha)
+-			tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha,extend='both')
++				#tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha)
++			if options.exist('log'):
++				tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha)
++			else:
++				tri=ax.tricontourf(triangles,data,colorlevels,cmap=cmap,norm=norm,alpha=alpha,extend='both')
+ 			if edgecolor != 'None':
+ 				ax.triplot(x,y,elements,color=edgecolor)
+ 		else:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22345-22346.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22345-22346.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22345-22346.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive240.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22346-22347.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22346-22347.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22346-22347.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22346)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22347)
+@@ -34,8 +34,8 @@
+         'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,3e-12,2e-12,2e-12,5e-12,5e-12,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,1e-12,5e-11,5e-11,5e-11,5e-11]
++        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,4e-12,2e-12,2e-12,5e-12,5e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,2e-12,5e-11,5e-11,5e-11,5e-11]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22347-22348.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22347-22348.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22347-22348.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.py	(revision 22347)
++++ ../trunk-jpl/test/NightlyRun/test435.py	(revision 22348)
+@@ -64,7 +64,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
+ field_tolerances = [
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
+-	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,
++	3e-11,3e-11,9e-10,7e-11,9e-09,1e-07,1e-09,1e-10,1e-13,
+ 	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
+ field_values = [
+ 	md.results.TransientSolution[0].Base,
+Index: ../trunk-jpl/test/NightlyRun/test442.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test442.py	(revision 22347)
++++ ../trunk-jpl/test/NightlyRun/test442.py	(revision 22348)
+@@ -64,7 +64,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
+ field_tolerances = [
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
+-	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,
++	3e-11,3e-11,9e-10,7e-11,7e-09,1e-07,1e-09,1e-10,1e-13,
+ 	1e-8,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
+ field_values = [
+ 	md.results.TransientSolution[0].Base,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22348-22349.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22348-22349.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22348-22349.diff	(revision 22755)
@@ -0,0 +1,443 @@
+Index: ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 22349)
+@@ -56,6 +56,9 @@
+ 	int         *transitions_N    = NULL;
+ 	int          ntransitions;
+ 
++	/*some constant parameters: */
++	parameters->AddObject(iomodel->CopyConstantObject("md.esa.hemisphere",EsaHemisphereEnum));
++
+ 	/*love numbers: */
+ 	iomodel->FetchData(&love_h,&nl,NULL,"md.esa.love_h");
+ 	iomodel->FetchData(&love_l,&nl,NULL,"md.esa.love_l");
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22348)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22349)
+@@ -871,6 +871,9 @@
+ 	EsaUmotionEnum,
+ 	EsaNmotionEnum,
+ 	EsaEmotionEnum,
++	EsaXmotionEnum,
++	EsaYmotionEnum,
++	EsaHemisphereEnum, 
+ 	EsaStrainratexxEnum,
+    EsaStrainratexyEnum,
+    EsaStrainrateyyEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22349)
+@@ -846,6 +846,9 @@
+ 		case EsaUmotionEnum : return "EsaUmotion";
+ 		case EsaNmotionEnum : return "EsaNmotion";
+ 		case EsaEmotionEnum : return "EsaEmotion";
++		case EsaXmotionEnum : return "EsaXmotion";
++		case EsaYmotionEnum : return "EsaYmotion";
++		case EsaHemisphereEnum : return "EsaHemisphere";
+ 		case EsaStrainratexxEnum : return "EsaStrainratexx";
+ 		case EsaStrainratexyEnum : return "EsaStrainratexy";
+ 		case EsaStrainrateyyEnum : return "EsaStrainrateyy";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22349)
+@@ -864,6 +864,9 @@
+ 	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
++	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
++	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
++	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+ 	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+ 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+ 	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+@@ -871,13 +874,13 @@
+ 	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+-	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+-	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+-	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
++	      if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
++	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
++	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
++	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+ 	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+ 	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+@@ -994,13 +997,13 @@
+ 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+-	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
++	      if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
++	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
++	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
++	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+ 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+Index: ../trunk-jpl/src/c/cores/esa_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/esa_core.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/cores/esa_core.cpp	(revision 22349)
+@@ -14,6 +14,8 @@
+ 	Vector<IssmDouble> *U_radial  = NULL; 
+ 	Vector<IssmDouble> *U_north   = NULL; 
+ 	Vector<IssmDouble> *U_east    = NULL; 
++	Vector<IssmDouble> *U_x   = NULL; 
++	Vector<IssmDouble> *U_y    = NULL; 
+ 	bool save_results,isesa,iscoupler;
+ 	int configuration_type;
+ 	int domaintype;
+@@ -75,6 +77,8 @@
+ 		U_radial = new Vector<IssmDouble>(gsize);
+ 		U_north = new Vector<IssmDouble>(gsize);
+ 		U_east = new Vector<IssmDouble>(gsize);
++		U_x = new Vector<IssmDouble>(gsize);
++		U_y = new Vector<IssmDouble>(gsize);
+ 		
+ 		/*call the geodetic main modlule:*/ 
+ 		if(domaintype==Domain3DsurfaceEnum){
+@@ -81,7 +85,9 @@
+ 			femmodel->EsaGeodetic3D(U_radial,U_north,U_east,latitude,longitude,radius,xx,yy,zz); 
+ 		}
+ 		if(domaintype==Domain2DhorizontalEnum){
+-			femmodel->EsaGeodetic2D(U_radial,U_north,U_east,xx,yy); 
++			femmodel->EsaGeodetic2D(U_radial,U_north,U_east,U_x,U_y,xx,yy); 
++			InputUpdateFromVectorx(femmodel,U_x,EsaXmotionEnum,VertexSIdEnum);
++			InputUpdateFromVectorx(femmodel,U_y,EsaYmotionEnum,VertexSIdEnum);
+ 		}
+ 
+ 		/*get results into elements:*/
+@@ -101,6 +107,8 @@
+ 		delete U_radial;
+ 		delete U_north;
+ 		delete U_east;
++		delete U_x; 
++		delete U_y; 
+ 		if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22349)
+@@ -183,7 +183,7 @@
+ 		void           GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
+ 		#endif
+ 		#ifdef _HAVE_ESA_
+-		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
++		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
+ 		void    EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+ 		#endif
+ 		#ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22349)
+@@ -166,7 +166,7 @@
+ 		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
+ #endif
+ #ifdef _HAVE_ESA_
+-		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
++		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
+ 		void    EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+ #endif
+ #ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22349)
+@@ -173,7 +173,7 @@
+ 		void        GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
+ #endif
+ #ifdef _HAVE_ESA_
+-		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
++		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");};
+ 		void    EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+ #endif
+ #ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22349)
+@@ -1749,6 +1749,8 @@
+ 				name==EsaUmotionEnum || 
+ 				name==EsaNmotionEnum || 
+ 				name==EsaEmotionEnum || 
++				name==EsaXmotionEnum || 
++				name==EsaYmotionEnum || 
+ 				name==EsaStrainratexxEnum ||
+ 				name==EsaStrainratexyEnum || 
+ 				name==EsaStrainrateyyEnum ||
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22349)
+@@ -309,7 +309,7 @@
+ 		virtual void       GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
+ 		#endif
+ 		#ifdef _HAVE_ESA_
+-		virtual void          EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy)=0;
++		virtual void          EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy)=0;
+ 		virtual void          EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea)=0;
+ 		#endif
+ 		#ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22349)
+@@ -538,8 +538,8 @@
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-	Input* vx_input=this->GetInput(EsaEmotionEnum); _assert_(vx_input);
+-	Input* vy_input=this->GetInput(EsaNmotionEnum); _assert_(vy_input);
++	Input* vx_input=this->GetInput(EsaXmotionEnum); _assert_(vx_input);
++	Input* vy_input=this->GetInput(EsaYmotionEnum); _assert_(vy_input);
+ 	
+ 	/* Start looping on the number of vertices: */
+ 	gauss=new GaussTria();
+@@ -3749,7 +3749,7 @@
+ /*}}}*/
+ #endif
+ #ifdef _HAVE_ESA_
+-void    Tria::EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy){ /*{{{*/
++void    Tria::EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){ /*{{{*/
+ 
+ 	/*diverse:*/
+ 	int gsize;
+@@ -3762,12 +3762,14 @@
+ 	/*precomputed elastic green functions:*/
+ 	IssmDouble* U_elastic_precomputed = NULL;
+ 	IssmDouble* H_elastic_precomputed = NULL;
+-	int         M;
++	int         M, hemi; 
+ 	
+ 	/*computation of Green functions:*/
+ 	IssmDouble* U_elastic= NULL;
+ 	IssmDouble* N_elastic= NULL;
+ 	IssmDouble* E_elastic= NULL;
++	IssmDouble* X_elastic= NULL;
++	IssmDouble* Y_elastic= NULL;
+ 	
+ 	/*optimization:*/
+ 	bool store_green_functions=false;
+@@ -3787,6 +3789,9 @@
+ 	/*how many dofs are we working with here? */
+ 	this->parameters->FindParam(&gsize,MeshNumberofverticesEnum);
+ 
++	/*which hemisphere? for north-south, east-west components*/
++	this->parameters->FindParam(&hemi,EsaHemisphereEnum); 
++	
+ 	/*compute area of element:*/
+ 	area=GetArea();
+ 
+@@ -3806,18 +3811,22 @@
+ 	U_elastic=xNewZeroInit<IssmDouble>(gsize);
+ 	N_elastic=xNewZeroInit<IssmDouble>(gsize);
+ 	E_elastic=xNewZeroInit<IssmDouble>(gsize);
++	X_elastic=xNewZeroInit<IssmDouble>(gsize);
++	Y_elastic=xNewZeroInit<IssmDouble>(gsize);
+ 
+ 	int* indices=xNew<int>(gsize);
+ 	IssmDouble* U_values=xNewZeroInit<IssmDouble>(gsize);
+ 	IssmDouble* N_values=xNewZeroInit<IssmDouble>(gsize);
+ 	IssmDouble* E_values=xNewZeroInit<IssmDouble>(gsize);
+-	IssmDouble dx, dy; 
+-	IssmDouble dist, alpha, ang;
+-	IssmDouble N_azim, E_azim;
++	IssmDouble* X_values=xNewZeroInit<IssmDouble>(gsize);
++	IssmDouble* Y_values=xNewZeroInit<IssmDouble>(gsize);
++	IssmDouble dx, dy, dist, alpha, ang, ang2;
++	IssmDouble N_azim, E_azim, X_azim, Y_azim; 
+ 
+ 	for(int i=0;i<gsize;i++){
+ 
+ 		indices[i]=i; 
++
+ 		IssmDouble N_azim=0; 
+ 		IssmDouble E_azim=0;
+ 
+@@ -3828,29 +3837,49 @@
+ 
+ 		/*Compute azimuths, both north and east components: */
+ 		ang = PI/2 - atan2(dy,dx);		// this is bearing angle! 
+-		N_azim = cos(ang); 
+-		E_azim = sin(ang); 
++		Y_azim = cos(ang); 
++		X_azim = sin(ang); 
+ 
+ 		/*Elastic component  (from Eq 17 in Adhikari et al, GMD 2015): */
+ 		int index=reCast<int,IssmDouble>(alpha/PI*(M-1));
+ 		U_elastic[i] += U_elastic_precomputed[index];
+-		N_elastic[i] += H_elastic_precomputed[index]*N_azim;
+-		E_elastic[i] += H_elastic_precomputed[index]*E_azim;
++		Y_elastic[i] += H_elastic_precomputed[index]*Y_azim;
++		X_elastic[i] += H_elastic_precomputed[index]*X_azim;
+ 
+ 		/*Add all components to the pUp solution vectors:*/
+ 		U_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*U_elastic[i];
+-		N_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*N_elastic[i];
+-		E_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*E_elastic[i];
++		Y_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*Y_elastic[i];
++		X_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*X_elastic[i];
++		
++		/*North-south, East-west components */ 
++		if (hemi == -1) {
++			ang2 = PI/2 - atan2(yy[i],xx[i]); 
++		} 
++		else if (hemi == 1) {
++			ang2 = PI/2 - atan2(-yy[i],-xx[i]); 
++		}
++		if (hemi != 0){
++			N_azim = Y_azim*cos(ang2) + X_azim*sin(ang2);
++			E_azim = X_azim*cos(ang2) - Y_azim*sin(ang2);
++			N_elastic[i] += H_elastic_precomputed[index]*N_azim;
++			E_elastic[i] += H_elastic_precomputed[index]*E_azim;
++			N_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*N_elastic[i];
++			E_values[i]+=3*rho_ice/rho_earth*area/(4*PI*pow(earth_radius,2))*I*E_elastic[i];
++		}
+ 	}
+ 
+ 	pUp->SetValues(gsize,indices,U_values,ADD_VAL);
+ 	pNorth->SetValues(gsize,indices,N_values,ADD_VAL);
+ 	pEast->SetValues(gsize,indices,E_values,ADD_VAL);
++	pX->SetValues(gsize,indices,X_values,ADD_VAL);
++	pY->SetValues(gsize,indices,Y_values,ADD_VAL);
+ 	
+ 	/*free ressources:*/
+ 	xDelete<int>(indices); 
+ 	xDelete<IssmDouble>(U_values); xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);
+ 	xDelete<IssmDouble>(U_elastic); xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);
++	xDelete<IssmDouble>(X_values); xDelete<IssmDouble>(Y_values);
++	xDelete<IssmDouble>(X_elastic); xDelete<IssmDouble>(Y_elastic);
+ 
+ 	return;
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22349)
+@@ -142,7 +142,7 @@
+ 		void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
+ 		#endif
+ 		#ifdef _HAVE_ESA_
+-		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* xx,IssmDouble* yy);
++		void    EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,  Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy);
+ 		void    EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea);
+ 		#endif
+ 		#ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22348)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22349)
+@@ -3975,7 +3975,7 @@
+ /*}}}*/
+ #endif
+ #ifdef _HAVE_ESA_
+-void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy){/*{{{*/
++void FemModel::EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY, IssmDouble* xx, IssmDouble* yy){/*{{{*/
+ 
+ 	int         ns,nsmax;
+ 	
+@@ -3990,12 +3990,14 @@
+ 	for(int i=0;i<nsmax;i++){
+ 		if(i<ns){
+ 			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+-			element->EsaGeodetic2D(pUp,pNorth,pEast,xx,yy);
++			element->EsaGeodetic2D(pUp,pNorth,pEast,pX,pY,xx,yy);
+ 		}
+ 		if(i%100==0){
+ 			pUp->Assemble();
+ 			pNorth->Assemble();
+ 			pEast->Assemble();
++			pX->Assemble();
++			pY->Assemble();
+ 		}
+ 	}
+ 	
+@@ -4003,6 +4005,8 @@
+ 	pUp->Assemble();
+ 	pNorth->Assemble();
+ 	pEast->Assemble();
++	pX->Assemble();
++	pY->Assemble();
+ 
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(xx);
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22348)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22349)
+@@ -133,7 +133,7 @@
+ 		void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
+ 		#endif
+ 		#ifdef _HAVE_ESA_
+-		void EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* xx, IssmDouble* yy); 
++		void EsaGeodetic2D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY, IssmDouble* xx, IssmDouble* yy); 
+ 		void EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 
+ 		#endif
+ 		#ifdef _HAVE_SEALEVELRISE_
+Index: ../trunk-jpl/src/m/classes/esa.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/esa.m	(revision 22348)
++++ ../trunk-jpl/src/m/classes/esa.m	(revision 22349)
+@@ -9,6 +9,7 @@
+ 		love_h         = 0; %provided by PREM model
+ 		love_l         = 0; %ideam
+ 		degacc         = 0;
++		hemisphere		= 0;
+ 		requested_outputs      = {};
+ 		transitions    = {};
+ 	end
+@@ -25,7 +26,10 @@
+ 		
+ 		%numerical discretization accuracy
+ 		self.degacc=.01;
+-		
++	
++		%computational flags:
++		self.hemisphere=0;
++
+ 		%output default:
+ 		self.requested_outputs={'default'};
+ 
+@@ -65,6 +69,7 @@
+ 			fielddisplay(self,'deltathickness','thickness change: ice height equivalent [m]');
+ 			fielddisplay(self,'love_h','load Love number for radial displacement');
+ 			fielddisplay(self,'love_l','load Love number for horizontal displacements');
++			fielddisplay(self,'hemisphere','North-south, East-west components of 2-D horiz displacement vector: -1 south, 1 north'); 
+ 			fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions');
+ 			fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps');
+ 			fielddisplay(self,'requested_outputs','additional outputs requested (e.g., EsaUmotion, EsaStrainratexx, EsaRotationrate)');
+@@ -74,6 +79,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','love_l','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'fieldname','hemisphere','format','Integer'); 
+ 			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
+ 			
+@@ -92,6 +98,7 @@
+ 			writejs1Darray(fid,[modelname '.esa.deltathickness'],self.deltathickness);
+ 			writejs1Darray(fid,[modelname '.esa.love_h'],self.love_h);
+ 			writejs1Darray(fid,[modelname '.esa.love_l'],self.love_l);
++			writejsdouble(fid,[modelname '.esa.hemisphere'],self.hemisphere); 
+ 			writejsdouble(fid,[modelname '.esa.degacc'],self.degacc);
+ 			writejscellstring(fid,[modelname '.esa.requested_outputs'],self.requested_outputs);
+ 			writejscellarray(fid,[modelname '.esa.transitions'],self.transitions);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22349-22350.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22349-22350.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22349-22350.diff	(revision 22755)
@@ -0,0 +1,903 @@
+Index: ../trunk-jpl/test/Exp/Ais.exp
+===================================================================
+--- ../trunk-jpl/test/Exp/Ais.exp	(nonexistent)
++++ ../trunk-jpl/test/Exp/Ais.exp	(revision 22350)
+@@ -0,0 +1,371 @@
++## Name:Antarctica
++## Icon:0
++# Points Count	Value
++366	25000.
++# X pos	Y pos
++-1016913.83085	878162.517102
++-1065362.784298	896183.164421
++-1121788.089839	882889.244268
++-1175850.031797	870777.005905
++-1240842.530326	864573.1765
++-1289586.904222	847734.210973
++-1347784.73245	830008.984101
++-1399778.731273	805193.666481
++-1457976.559501	786877.598714
++-1493427.013244	838280.756641
++-1542171.387141	859255.608439
++-1581757.727154	899728.209796
++-1624002.851198	937542.027121
++-1670088.441063	968856.594594
++-1722082.439886	981855.0943
++-1774962.700053	1003420.786994
++-1825479.596637	1024691.059239
++-1868906.402472	1054233.104025
++-1927399.651148	1063686.558357
++-1989437.945198	1079343.842093
++-2010412.796996	1125724.852407
++-2055612.125518	1149063.067788
++-2098448.090457	1183627.260187
++-2147192.464354	1195444.078101
++-2170826.100183	1240938.827071
++-2211889.542435	1275207.599023
++-2263016.65255	1280909.637672
++-2317350.604004	1293306.895593
++-2375534.184324	1279993.703486
++-2419418.410159	1314016.305538
++-2383423.483351	1367269.073967
++-2433224.683456	1375158.372994
++-2440620.901293	1426931.897855
++-2444072.469617	1482156.991041
++-2468233.447886	1532944.353524
++-2464781.879562	1584224.797197
++-2498804.481614	1541819.814929
++-2499790.643992	1483143.153419
++-2502256.049938	1428411.141423
++-2485984.370696	1381075.347263
++-2471191.935021	1325357.172889
++-2458864.905292	1273090.566838
++-2470205.772643	1221317.041976
++-2429773.115132	1188280.602303
++-2407625.063831	1139607.242244
++-2396364.68495	1083693.636763
++-2338897.923762	1058066.567585
++-2325307.811319	1007200.718155
++-2311717.698876	954005.135163
++-2260463.560519	964488.936191
++-2206879.6886	938861.867013
++-2152242.420374	914986.967648
++-2109443.190091	885575.174326
++-2108023.310413	827157.267588
++-2053256.522847	813972.670581
++-2101735.271841	786792.116752
++-2157921.939085	785372.237074
++-2199504.129645	750483.764995
++-2178611.614388	702410.695909
++-2125873.226361	700787.976277
++-2093621.673683	654743.30673
++-2078408.677136	605453.19792
++-2130944.225209	589631.681512
++-2134798.184334	539530.212887
++-2089767.714558	579489.683815
++-2040883.285656	566710.766716
++-2038652.046162	506061.620485
++-2008428.893024	553120.489801
++-2004980.613806	603424.798381
++-1959138.784214	567319.286578
++-1948996.786516	510118.419564
++-1893824.319042	516406.458136
++-1877191.442818	567522.126532
++-1824250.214837	562045.447775
++-1774757.266073	571376.085657
++-1776582.825659	516609.29809
++-1817962.176264	480909.466195
++-1858935.846962	446426.674024
++-1873540.323647	392674.086227
++-1841638.366983	347862.375138
++-1819355.95276	393260.191031
++-1781038.530172	360148.939989
++-1825811.605479	333909.835391
++-1805819.906737	274767.726613
++-1752925.203816	250611.090633
++-1780622.036448	206462.755911
++-1804986.91929	151069.090648
++-1851842.463216	130660.898182
++-1870376.433924	76933.207813
++-1900572.228899	28619.935854
++-1887244.429738	-22192.298448
++-1898281.513418	-81126.160364
++-1908902.103375	-139643.528557
++-1949926.735168	-186915.566207
++-1974262.594748	-234407.84861
++-1973612.520371	-288364.021891
++-1952810.140311	-336469.52578
++-1944359.173411	-393025.996568
++-1894953.520768	-425529.715412
++-1844897.793749	-420329.120397
++-1793541.917975	-423579.492281
++-1784440.876699	-368323.170247
++-1738935.670317	-400826.889091
++-1703831.653966	-346870.71581
++-1653125.852569	-364422.723985
++-1608270.720565	-329968.782011
++-1575952.847614	-401284.225807
++-1596047.631389	-452525.924435
++-1563561.064285	-502762.883873
++-1551839.107083	-553669.669438
++-1594038.153012	-582807.105913
++-1609818.336911	-637074.794991
++-1598286.506136	-694548.066946
++-1574241.707797	-738434.62511
++-1563195.194103	-792114.084796
++-1540274.279307	-848097.912086
++-1518570.404234	-916860.656475
++-1496258.0093	-974264.363443
++-1462586.576944	-1028625.471102
++-1472728.574641	-1086840.537885
++-1407819.789377	-1071424.701385
++-1355689.921212	-1064528.142951
++-1310659.451435	-1090694.49701
++-1279016.418619	-1134710.767018
++-1228306.430131	-1167976.519465
++-1175568.042104	-1200836.592005
++-1125170.672365	-1198245.774992
++-1078002.024254	-1216252.428506
++-1027089.195813	-1229234.185558
++-980030.326496	-1250938.060631
++-942099.255108	-1288666.292066
++-898082.985101	-1317875.245435
++-843316.197534	-1308341.767599
++-783478.411119	-1288057.772204
++-733985.462355	-1278321.454414
++-694228.831381	-1240593.22298
++-641287.6034	-1226800.106111
++-611470.130169	-1271627.735934
++-557311.862464	-1289274.811928
++-504979.154345	-1267165.256947
++-457311.765167	-1221729.107262
++-408427.336265	-1207935.990394
++-349198.069712	-1191505.954124
++-298285.24127	-1209153.030117
++-243721.293658	-1227002.946065
++-189157.346045	-1245461.381874
++-122828.681103	-1260268.698513
++-69481.773214	-1287043.572434
++-29522.302286	-1318483.765296
++28287.08459	-1324568.963915
++80619.792709	-1333291.081935
++133763.860644	-1348504.078481
++200701.045447	-1351546.67779
++264189.951034	-1347084.198803
++313682.899797	-1360471.635764
++308003.381087	-1310370.167138
++335792.454778	-1264528.337546
++381025.764509	-1297388.410086
++406786.43866	-1345461.479172
++436198.231983	-1395765.787751
++462364.586043	-1448301.335825
++462161.746089	-1508747.642102
++402932.479535	-1523352.118786
++451411.228529	-1541607.714642
++456685.067332	-1603879.580504
++439849.351154	-1653981.04913
++416522.75645	-1700228.558631
++408206.318338	-1750330.027256
++357902.009758	-1759863.505092
++341877.653396	-1807328.054316
++323216.377633	-1864123.241422
++345123.09266	-1917875.829219
++316725.499107	-1967774.457891
++344717.412752	-2020512.845918
++397658.640733	-2013007.767622
++441674.91074	-2041202.521221
++487313.900379	-2062095.036478
++545123.287254	-2055401.317997
++597861.675281	-2054792.798135
++654454.022434	-2061283.676662
++714900.328711	-2056212.677813
++755468.319501	-2094143.749202
++808815.22739	-2120310.103261
++861350.775463	-2112196.505103
++915103.363259	-2114427.744597
++972101.390319	-2106314.146439
++1013683.580879	-2137145.819439
++1064596.409321	-2123758.382478
++1114292.198038	-2099011.908096
++1160742.547493	-2077713.712932
++1212263.895796	-2050330.319148
++1262771.04433	-2018687.286332
++1317537.831896	-2030046.323753
++1381229.577437	-2045665.000208
++1441675.883714	-2064123.436017
++1490357.472662	-2041405.361175
++1531331.14336	-2012196.407806
++1590966.089821	-1998403.290937
++1637822.119184	-1970817.0572
++1689951.987349	-1951141.581667
++1739242.096159	-1925178.067561
++1785286.765705	-1898403.19364
++1838633.673594	-1873859.559212
++1883055.623509	-1848301.725014
++1918552.615451	-1807125.214362
++1946950.209004	-1751547.06698
++1989343.759379	-1715847.235085
++1996240.317814	-1658240.688163
++1968248.404168	-1606110.819998
++1994820.438136	-1554995.151602
++2045124.746716	-1561891.710037
++2105571.052993	-1552561.072155
++2117741.45023	-1503473.803299
++2137214.085809	-1452763.814811
++2146139.043783	-1394345.908074
++2193400.753053	-1363717.075027
++2187924.074296	-1307327.567829
++2205368.310336	-1251140.900585
++2231940.344304	-1201242.271913
++2272508.335094	-1158443.04163
++2318147.324732	-1134102.247156
++2351210.237226	-1084000.77853
++2404759.985069	-1078929.779681
++2448167.735214	-1052560.585668
++2462163.692037	-985014.881002
++2453644.413971	-927814.013989
++2413482.103089	-889071.582784
++2404557.145115	-835116.155033
++2452224.534293	-799010.64323
++2483664.727156	-746880.775065
++2516524.799696	-705501.424459
++2544719.553295	-660470.954682
++2597863.62123	-651140.316801
++2649384.969533	-620105.803846
++2599486.340861	-601241.688129
++2613482.297684	-548097.620194
++2664597.966079	-515846.067516
++2634171.972987	-469801.397969
++2652630.408796	-420916.969067
++2652021.888934	-367367.221224
++2709425.595902	-351951.384724
++2742894.188304	-309354.994395
++2714496.594751	-262904.64494
++2655064.488244	-255805.246552
++2608005.618927	-233898.531525
++2569871.707584	-199821.419262
++2574896.697294	-146121.254432
++2586855.25443	-86328.468753
++2567450.803229	-29694.547224
++2550302.683562	17688.415012
++2572189.099452	68004.608244
++2590465.384886	115161.937327
++2603326.474636	173149.657778
++2578958.094057	219404.454246
++2547369.452567	268141.215403
++2496376.359874	290027.631293
++2476746.27552	348240.984898
++2425527.549674	370804.300248
++2387846.813039	414802.765182
++2357611.970469	456319.265427
++2305039.445702	469180.355176
++2256528.317698	484072.143308
++2210724.787537	524234.844632
++2168305.754678	565074.445416
++2140101.61049	607267.845122
++2188161.472186	621257.100639
++2223585.877287	657809.671507
++2239831.464339	714669.22619
++2218170.681603	765887.952036
++2240282.730646	822973.139872
++2259010.282387	899011.512604
++2254948.885624	949102.072682
++2236898.233344	998515.733299
++2222908.977826	1063046.815202
++2203955.792932	1119003.837271
++2174849.11613	1169545.663656
++2167854.488371	1220087.490042
++2144388.640406	1268372.984892
++2139199.077876	1323653.1075
++2119343.360367	1377353.798035
++2169208.287292	1392922.485627
++2168531.387831	1451587.105538
++2179136.146046	1515215.654826
++2153413.966547	1559665.386067
++2116861.395679	1596443.590088
++2060540.583216	1638517.083388
++2005773.795649	1661843.678093
++1972305.203247	1616610.368362
++1923826.454253	1651093.160533
++1872710.785858	1633243.244586
++1825246.236634	1670971.47602
++1811655.959719	1723912.704001
++1754252.252751	1708496.867501
++1705570.663803	1733243.341883
++1651818.076006	1760221.055758
++1596848.448486	1759206.855989
++1549383.899261	1775028.372397
++1496036.991373	1783547.650463
++1458917.2798	1748659.178383
++1409627.17099	1725738.263587
++1365408.061029	1754338.697094
++1343298.506048	1778679.491568
++1346746.785265	1834257.63895
++1325854.270008	1880302.308497
++1320783.27116	1934460.576202
++1270884.642488	1962249.649893
++1215712.175014	1941357.134636
++1175347.024177	1976854.126577
++1123217.156012	1975839.926807
++1074941.246972	1947442.333254
++1017740.379958	1947036.653346
++961148.032806	1957178.651044
++916117.563029	1984967.724735
++862567.815186	1997340.961926
++806786.82785	2020667.55663
++785082.952777	2073000.264749
++731938.884842	2077259.903782
++682648.776033	2116610.854849
++630518.907867	2135880.650474
++576969.160025	2169349.242876
++522810.89232	2162047.004534
++480011.662036	2133649.410981
++431532.913042	2152919.206606
++380620.084601	2167118.003382
++327273.176712	2183142.359744
++283662.586613	2155961.805915
++228084.43923	2183142.359744
++170477.892309	2164481.083981
++114696.904972	2176854.321172
++63175.556669	2197746.836429
++13276.927997	2183750.879606
++3743.450162	2239734.706896
++-45343.818694	2226144.429982
++-76175.491695	2172797.522093
++-124654.240689	2147848.207757
++-182666.467519	2145414.12831
++-237027.575177	2127361.372408
++-282058.044954	2100383.658533
++-333376.553304	2102614.898026
++-365628.105982	2058801.467973
++-409441.536035	2019856.196815
++-426885.772075	1971377.44782
++-449401.006963	1915799.300438
++-505181.994299	1889835.786333
++-538650.586701	1852513.234806
++-577393.017906	1815596.363187
++-623640.527406	1789835.689035
++-632565.48538	1739328.540502
++-632971.165288	1679896.433994
++-648792.681696	1619855.807625
++-696865.750782	1599774.652184
++-745953.019638	1579693.496743
++-721206.545256	1528983.508255
++-696865.750782	1481924.638939
++-703762.309216	1423303.892247
++-682058.434144	1365494.505371
++-705587.868802	1319449.835825
++-726277.544105	1270768.246877
++-741287.700697	1221680.978021
++-760557.496322	1169956.789764
++-768468.254527	1118638.281414
++-757312.057059	1062654.454124
++-782261.371395	1017015.464485
++-841490.637949	989226.390794
++-880435.909107	947644.200234
++-1016913.83085	878162.517102
+
+Property changes on: ../trunk-jpl/test/Exp/Ais.exp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/test/NightlyRun/test2110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2110.m	(revision 22349)
++++ ../trunk-jpl/test/NightlyRun/test2110.m	(revision 22350)
+@@ -48,7 +48,7 @@
+ md.esa.degacc=0.01;
+ 
+ % solve esa 
+-md.esa.requested_outputs = {'EsaUmotion','EsaNmotion','EsaEmotion',...
++md.esa.requested_outputs = {'EsaUmotion','EsaXmotion','EsaYmotion',...
+ 	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate'};
+ md.cluster=generic('name',oshostname(),'np',3); 
+ md.verbose=verbose('111111111');
+@@ -55,13 +55,13 @@
+ md=solve(md,'Esa');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'EsaUmotion','EsaNmotion','EsaEmotion',...
++field_names     ={'EsaUmotion','EsaXmotion','EsaYmotion',...
+ 	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.EsaSolution.EsaUmotion),...
+-	(md.results.EsaSolution.EsaNmotion),...
+-	(md.results.EsaSolution.EsaEmotion),...
++	(md.results.EsaSolution.EsaXmotion),...
++	(md.results.EsaSolution.EsaYmotion),...
+ 	(md.results.EsaSolution.EsaStrainratexx),...
+ 	(md.results.EsaSolution.EsaStrainratexy),...
+ 	(md.results.EsaSolution.EsaStrainrateyy),...
+Index: ../trunk-jpl/test/NightlyRun/test2111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2111.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2111.m	(revision 22350)
+@@ -0,0 +1,66 @@
++%Test Name: Esa2Dsurface
++%AIS -- southern hemisphere example for north-south, east-west components of horiz motion 
++
++%mesh ais: {{{
++	md=model();
++	md=triangle(md,'../Exp/Ais.exp',200000); % max element size
++% }}}
++%define load: {{{
++	md.esa.deltathickness=zeros(md.mesh.numberofelements,1);
++	disc_radius=500; % km
++	index=md.mesh.elements;
++	x_element=mean(md.mesh.x(index),2)-1.0e6;
++	y_element=mean(md.mesh.y(index),2)-1.0e6;
++	rad_dist=sqrt(x_element.^2+y_element.^2)/1000;  % radial distance in km
++	md.esa.deltathickness(rad_dist<=disc_radius)=-1;   % 1 m water withdrawl
++% }}}
++%read in love numbers:{{{
++	nlov=10001;	% horizontal displacements do not work for low degree truncation, e.g., 101
++	md.esa.love_h = love_numbers('h','CF'); md.esa.love_h(nlov+1:end)=[];
++	md.esa.love_l = love_numbers('l','CF'); md.esa.love_l(nlov+1:end)=[];
++% }}}
++%mask:  {{{
++	%make sure wherever there is an ice load, that the mask is set to ice: 
++	md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++	pos=find(md.esa.deltathickness); md.mask.ice_levelset(md.mesh.elements(pos,:))=-1;
++
++	%is ice grounded? 
++	md.mask.groundedice_levelset=-ones(md.mesh.numberofvertices,1);
++	pos=find(md.mask.ice_levelset<=0); md.mask.groundedice_levelset(pos)=1; 
++% }}}
++%geometry:  {{{
++	di=md.materials.rho_ice/md.materials.rho_water;
++	md.geometry.thickness=ones(md.mesh.numberofvertices,1);
++	md.geometry.surface=(1-di)*zeros(md.mesh.numberofvertices,1);
++	md.geometry.base=md.geometry.surface-md.geometry.thickness;
++	md.geometry.bed=md.geometry.base;
++% }}}
++%materials:  {{{
++	md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
++	md.materials.rheology_B=paterson(md.initialization.temperature);
++	md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++% }}}
++%additional parameters, miscellaneous: {{{
++	md.miscellaneous.name='test2111';
++	md.esa.degacc=0.01;
++	md.esa.hemisphere = -1; 
++% }}}
++
++%solve esa: {{{
++md.esa.requested_outputs = {'EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'}; 
++md.cluster=generic('name',oshostname(),'np',3); 
++md.verbose=verbose('111111111');
++md=solve(md,'Esa');
++% }}}
++%fields and tolerances to track changes {{{
++field_names     ={'EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'}; 
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.EsaSolution.EsaUmotion),...
++	(md.results.EsaSolution.EsaNmotion),...
++	(md.results.EsaSolution.EsaEmotion),...
++	(md.results.EsaSolution.EsaXmotion),...
++	(md.results.EsaSolution.EsaYmotion),...
++	};
++% }}} 
++
+Index: ../trunk-jpl/test/NightlyRun/test2112.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2112.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2112.m	(revision 22350)
+@@ -0,0 +1,66 @@
++%Test Name: Esa2Dsurface
++%AIS 2 -- load centered at the south pole! 
++
++%mesh ais: {{{
++	md=model();
++	md=triangle(md,'../Exp/Ais.exp',100000); % max element size
++% }}}
++%define load: {{{
++	md.esa.deltathickness=zeros(md.mesh.numberofelements,1);
++	disc_radius=500; % km
++	index=md.mesh.elements;
++	x_element=mean(md.mesh.x(index),2); 
++	y_element=mean(md.mesh.y(index),2); 
++	rad_dist=sqrt(x_element.^2+y_element.^2)/1000;  % radial distance in km
++	md.esa.deltathickness(rad_dist<=disc_radius)=-1;   % 1 m water withdrawl
++% }}}
++%read in love numbers:{{{
++	nlov=10001;	% horizontal displacements do not work for low degree truncation, e.g., 101
++	md.esa.love_h = love_numbers('h','CF'); md.esa.love_h(nlov+1:end)=[];
++	md.esa.love_l = love_numbers('l','CF'); md.esa.love_l(nlov+1:end)=[];
++% }}}
++%mask:  {{{
++	%make sure wherever there is an ice load, that the mask is set to ice: 
++	md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++	pos=find(md.esa.deltathickness); md.mask.ice_levelset(md.mesh.elements(pos,:))=-1;
++
++	%is ice grounded? 
++	md.mask.groundedice_levelset=-ones(md.mesh.numberofvertices,1);
++	pos=find(md.mask.ice_levelset<=0); md.mask.groundedice_levelset(pos)=1; 
++% }}}
++%geometry:  {{{
++	di=md.materials.rho_ice/md.materials.rho_water;
++	md.geometry.thickness=ones(md.mesh.numberofvertices,1);
++	md.geometry.surface=(1-di)*zeros(md.mesh.numberofvertices,1);
++	md.geometry.base=md.geometry.surface-md.geometry.thickness;
++	md.geometry.bed=md.geometry.base;
++% }}}
++%materials:  {{{
++	md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
++	md.materials.rheology_B=paterson(md.initialization.temperature);
++	md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++% }}}
++%additional parameters, miscellaneous: {{{
++	md.miscellaneous.name='test2112';
++	md.esa.degacc=0.01;
++	md.esa.hemisphere = -1; 
++% }}}
++
++%solve esa: {{{
++md.esa.requested_outputs = {'EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'}; 
++md.cluster=generic('name',oshostname(),'np',3); 
++md.verbose=verbose('111111111');
++md=solve(md,'Esa');
++% }}}
++%fields and tolerances to track changes {{{
++field_names     ={'EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'}; 
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.EsaSolution.EsaUmotion),...
++	(md.results.EsaSolution.EsaNmotion),...
++	(md.results.EsaSolution.EsaEmotion),...
++	(md.results.EsaSolution.EsaXmotion),...
++	(md.results.EsaSolution.EsaYmotion),...
++	};
++% }}} 
++
+Index: ../trunk-jpl/test/NightlyRun/test2113.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2113.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2113.m	(revision 22350)
+@@ -0,0 +1,65 @@
++%Test Name: Esa2Dsurface
++%Northern hemisphere example for north-south, east-west components of horiz motion 
++%Same as test2111.m except that AIS is assumed to have located in Northern Hemisphere 
++
++%mesh ais: {{{
++	md=model();
++	md=triangle(md,'../Exp/Ais.exp',200000); % max element size
++% }}}
++%define load: {{{
++	md.esa.deltathickness=zeros(md.mesh.numberofelements,1);
++	disc_radius=500; % km
++	index=md.mesh.elements;
++	x_element=mean(md.mesh.x(index),2)-1.0e6;
++	y_element=mean(md.mesh.y(index),2)+1.0e6;
++	rad_dist=sqrt(x_element.^2+y_element.^2)/1000;  % radial distance in km
++	md.esa.deltathickness(rad_dist<=disc_radius)=-1;   % 1 m water withdrawl
++% }}}
++%read in love numbers:{{{
++	nlov=10001;	% horizontal displacements do not work for low degree truncation, e.g., 101
++	md.esa.love_h = love_numbers('h','CF'); md.esa.love_h(nlov+1:end)=[];
++	md.esa.love_l = love_numbers('l','CF'); md.esa.love_l(nlov+1:end)=[];
++% }}}
++%mask:  {{{
++	%make sure wherever there is an ice load, that the mask is set to ice: 
++	md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++	pos=find(md.esa.deltathickness); md.mask.ice_levelset(md.mesh.elements(pos,:))=-1;
++
++	%is ice grounded? 
++	md.mask.groundedice_levelset=-ones(md.mesh.numberofvertices,1);
++	pos=find(md.mask.ice_levelset<=0); md.mask.groundedice_levelset(pos)=1; 
++% }}}
++%geometry:  {{{
++	di=md.materials.rho_ice/md.materials.rho_water;
++	md.geometry.thickness=ones(md.mesh.numberofvertices,1);
++	md.geometry.surface=(1-di)*zeros(md.mesh.numberofvertices,1);
++	md.geometry.base=md.geometry.surface-md.geometry.thickness;
++	md.geometry.bed=md.geometry.base;
++% }}}
++%materials:  {{{
++	md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
++	md.materials.rheology_B=paterson(md.initialization.temperature);
++	md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++% }}}
++%additional parameters, miscellaneous: {{{
++	md.miscellaneous.name='test2113';
++	md.esa.degacc=0.01;
++	md.esa.hemisphere = 1; % AIS is placed in Northern Hemisphere 
++% }}}
++
++%solve esa: {{{
++md.esa.requested_outputs = {'EsaUmotion','EsaNmotion','EsaEmotion'}; 
++md.cluster=generic('name',oshostname(),'np',3); 
++md.verbose=verbose('111111111');
++md=solve(md,'Esa');
++% }}}
++%fields and tolerances to track changes {{{
++field_names     ={'EsaUmotion','EsaNmotion','EsaEmotion'}; 
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.EsaSolution.EsaUmotion),...
++	(md.results.EsaSolution.EsaNmotion),...
++	(md.results.EsaSolution.EsaEmotion),...
++	};
++% }}} 
++
+Index: ../trunk-jpl/test/NightlyRun/test2111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2111.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2111.py	(revision 22350)
+@@ -0,0 +1,78 @@
++#Test Name: Esa2Dsurface
++#AIS -- southern hemisphere example for north-south, east-west components of horiz motion 
++
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from roundmesh import *
++from love_numbers import *
++from paterson import *
++
++#mesh ais: {{{
++md = model()
++md = triangle(md,'../Exp/Ais.exp',200000); # max element size
++# }}}
++#define load: {{{
++md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
++disc_radius = 500 # km
++index = md.mesh.elements
++x_element = np.mean(md.mesh.x[index - 1], 1) - 1.0e6
++y_element = np.mean(md.mesh.y[index - 1], 1) - 1.0e6
++rad_dist = np.sqrt(x_element**2 + y_element**2) / 1000  # radial distance in km
++md.esa.deltathickness[np.where(rad_dist <= disc_radius)] = -1   # 1 m water withdrawl
++# }}}
++#love numbers: {{{
++nlov = 10000	# horizontal displacements do not work for low degree truncation, e.g., 101
++md.esa.love_h = np.array(love_numbers('h','CF'))
++md.esa.love_h = np.resize(md.esa.love_h, nlov + 1)
++md.esa.love_l = np.array(love_numbers('l','CF'))
++md.esa.love_l = np.resize(md.esa.love_l, nlov + 1)
++# }}}
++#mask:  {{{
++#make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.esa.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++
++#is ice grounded? 
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset <= 0)
++md.mask.groundedice_levelset[pos] = 1
++# }}}
++#geometry:  {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials:  {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#additional parameters, miscellaneous: {{{
++md.miscellaneous.name='test2111';
++md.esa.degacc=0.01;
++md.esa.hemisphere = -1; 
++# }}}
++
++#solve esa: {{{
++md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'] 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('111111111')
++md = solve(md,'Esa')
++# }}}
++#Fields and tolerances to track changes: {{{
++field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.EsaSolution.EsaUmotion,
++	md.results.EsaSolution.EsaNmotion,
++	md.results.EsaSolution.EsaEmotion,
++	md.results.EsaSolution.EsaXmotion,
++	md.results.EsaSolution.EsaYmotion,
++	]
++# }}}
++
+Index: ../trunk-jpl/test/NightlyRun/test2112.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2112.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2112.py	(revision 22350)
+@@ -0,0 +1,78 @@
++#Test Name: Esa2Dsurface
++#AIS 2 -- load centered at the south pole! 
++
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from roundmesh import *
++from love_numbers import *
++from paterson import *
++
++#mesh ais: {{{
++md = model()
++md = triangle(md,'../Exp/Ais.exp',100000); # max element size
++# }}}
++#define load: {{{
++md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
++disc_radius = 500 # km
++index = md.mesh.elements
++x_element = np.mean(md.mesh.x[index - 1], 1)
++y_element = np.mean(md.mesh.y[index - 1], 1)
++rad_dist = np.sqrt(x_element**2 + y_element**2) / 1000  # radial distance in km
++md.esa.deltathickness[np.where(rad_dist <= disc_radius)] = -1   # 1 m water withdrawl
++# }}}
++#love numbers: {{{
++nlov = 10000	# horizontal displacements do not work for low degree truncation, e.g., 101
++md.esa.love_h = np.array(love_numbers('h','CF'))
++md.esa.love_h = np.resize(md.esa.love_h, nlov + 1)
++md.esa.love_l = np.array(love_numbers('l','CF'))
++md.esa.love_l = np.resize(md.esa.love_l, nlov + 1)
++# }}}
++#mask:  {{{
++#make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.esa.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++
++#is ice grounded? 
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset <= 0)
++md.mask.groundedice_levelset[pos] = 1
++# }}}
++#geometry:  {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials:  {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#additional parameters, miscellaneous: {{{
++md.miscellaneous.name='test2112';
++md.esa.degacc=0.01;
++md.esa.hemisphere = -1; 
++# }}}
++
++#solve esa: {{{
++md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion'] 
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('111111111')
++md = solve(md,'Esa')
++# }}}
++#Fields and tolerances to track changes: {{{
++field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion','EsaXmotion','EsaYmotion']
++field_tolerances = [1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values = [
++	md.results.EsaSolution.EsaUmotion,
++	md.results.EsaSolution.EsaNmotion,
++	md.results.EsaSolution.EsaEmotion,
++	md.results.EsaSolution.EsaXmotion,
++	md.results.EsaSolution.EsaYmotion,
++	]
++# }}}
++
+Index: ../trunk-jpl/test/NightlyRun/test2110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22349)
++++ ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22350)
+@@ -60,7 +60,7 @@
+ md.esa.degacc = 0.01
+ 
+ #solve esa 
+-md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion',
++md.esa.requested_outputs = ['EsaUmotion','EsaXmotion','EsaYmotion',
+ 	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate']
+ md.cluster = generic('name',gethostname(),'np',3)
+ md.verbose = verbose('111111111')
+@@ -67,13 +67,13 @@
+ md = solve(md,'Esa')
+ 
+ #Fields and tolerances to track changes
+-field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion',
++field_names     = ['EsaUmotion','EsaXmotion','EsaYmotion',
+ 	'EsaStrainratexx','EsaStrainratexy','EsaStrainrateyy','EsaRotationrate']
+ field_tolerances = [1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values = [
+ 	md.results.EsaSolution.EsaUmotion,
+-	md.results.EsaSolution.EsaNmotion,
+-	md.results.EsaSolution.EsaEmotion,
++	md.results.EsaSolution.EsaXmotion,
++	md.results.EsaSolution.EsaYmotion,
+ 	md.results.EsaSolution.EsaStrainratexx,
+ 	md.results.EsaSolution.EsaStrainratexy,
+ 	md.results.EsaSolution.EsaStrainrateyy,
+Index: ../trunk-jpl/test/NightlyRun/test2113.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2113.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2113.py	(revision 22350)
+@@ -0,0 +1,77 @@
++#Test Name: Esa2Dsurface
++#Northern hemisphere example for north-south, east-west components of horiz motion 
++#Same as test2111.m except that AIS is assumed to have located in Northern Hemisphere 
++
++import numpy as np
++from model import *
++from socket import gethostname
++from solve import *
++from roundmesh import *
++from love_numbers import *
++from paterson import *
++
++#mesh ais: {{{
++md = model()
++md = triangle(md,'../Exp/Ais.exp',200000); # max element size
++# }}}
++#define load: {{{
++md.esa.deltathickness = np.zeros((md.mesh.numberofelements,))
++disc_radius = 500 # km
++index = md.mesh.elements
++x_element = np.mean(md.mesh.x[index - 1], 1) - 1.0e6
++y_element = np.mean(md.mesh.y[index - 1], 1) - 1.0e6
++rad_dist = np.sqrt(x_element**2 + y_element**2) / 1000  # radial distance in km
++md.esa.deltathickness[np.where(rad_dist <= disc_radius)] = -1   # 1 m water withdrawl
++# }}}
++#love numbers: {{{
++nlov = 10000	# horizontal displacements do not work for low degree truncation, e.g., 101
++md.esa.love_h = np.array(love_numbers('h','CF'))
++md.esa.love_h = np.resize(md.esa.love_h, nlov + 1)
++md.esa.love_l = np.array(love_numbers('l','CF'))
++md.esa.love_l = np.resize(md.esa.love_l, nlov + 1)
++# }}}
++#mask:  {{{
++#make sure wherever there is an ice load, that the mask is set to ice: 
++md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.esa.deltathickness)
++md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++
++#is ice grounded? 
++md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
++pos = np.where(md.mask.ice_levelset <= 0)
++md.mask.groundedice_levelset[pos] = 1
++# }}}
++#geometry:  {{{
++di = md.materials.rho_ice / md.materials.rho_water
++md.geometry.thickness = np.ones((md.mesh.numberofvertices,))
++md.geometry.surface = (1 - di) * np.zeros((md.mesh.numberofvertices,))
++md.geometry.base = md.geometry.surface - md.geometry.thickness
++md.geometry.bed = md.geometry.base
++# }}}
++#materials:  {{{
++md.initialization.temperature = 273.25 * np.ones((md.mesh.numberofvertices,))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
++# }}}
++#additional parameters, miscellaneous: {{{
++md.miscellaneous.name='test2113';
++md.esa.degacc=0.01;
++md.esa.hemisphere = 1; # AIS is placed in Northern Hemisphere 
++# }}}
++
++#solve esa: {{{
++md.esa.requested_outputs = ['EsaUmotion','EsaNmotion','EsaEmotion']
++md.cluster = generic('name',gethostname(),'np',3)
++md.verbose = verbose('111111111')
++md = solve(md,'Esa')
++# }}}
++#Fields and tolerances to track changes: {{{
++field_names     = ['EsaUmotion','EsaNmotion','EsaEmotion']
++field_tolerances = [1e-13,1e-13,1e-13]
++field_values = [
++	md.results.EsaSolution.EsaUmotion,
++	md.results.EsaSolution.EsaNmotion,
++	md.results.EsaSolution.EsaEmotion,
++	]
++# }}}
++
Index: /issm/oecreview/Archive/21724-22754/ISSM-22350-22351.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22350-22351.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22350-22351.diff	(revision 22755)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/test/Archives/Archive2112.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2112.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2112.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2112.arch	(revision 22351)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2112.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive2113.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2113.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2113.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2113.arch	(revision 22351)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2113.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive2110.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2111.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2111.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2111.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2111.arch	(revision 22351)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2111.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22351-22352.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22351-22352.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22351-22352.diff	(revision 22755)
@@ -0,0 +1,116 @@
+Index: ../trunk-jpl/src/m/classes/esa.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/esa.m	(revision 22351)
++++ ../trunk-jpl/src/m/classes/esa.m	(revision 22352)
+@@ -43,6 +43,7 @@
+ 			md = checkfield(md,'fieldname','esa.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'fieldname','esa.love_h','NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','esa.love_l','NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','esa.hemisphere','NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','esa.degacc','size',[1 1],'>=',1e-10);
+ 			md = checkfield(md,'fieldname','esa.requested_outputs','stringrow',1);
+ 
+Index: ../trunk-jpl/src/m/classes/esa.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/esa.py	(revision 22351)
++++ ../trunk-jpl/src/m/classes/esa.py	(revision 22352)
+@@ -17,6 +17,7 @@
+ 		self.deltathickness    = float('NaN')
+ 		self.love_h            = 0 #provided by PREM model()
+ 		self.love_l            = 0 #ideam
++		self.hemisphere        = 0
+ 		self.degacc            = 0
+ 		self.requested_outputs = []
+ 		self.transitions       = []
+@@ -29,6 +30,7 @@
+ 			string="%s\n%s"%(string,fielddisplay(self,'deltathickness','thickness change: ice height equivalent [m]'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'love_h','load Love number for radial displacement'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'love_l','load Love number for horizontal displaements'))
++                        string="%s\n%s"%(string,fielddisplay(self,'hemisphere','North-south, East-west components of 2-D horiz displacement vector: -1 south, 1 north'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'degacc','accuracy (default .01 deg) for numerical discretization of the Green''s functions'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'transitions','indices into parts of the mesh that will be icecaps'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested (default: EsaUmotion)'))
+@@ -39,7 +41,10 @@
+ 		
+ 		#numerical discretization accuracy
+ 		self.degacc=.01
+-		
++	
++                #computational flags:
++                self.hemisphere=0;
++
+ 		#output default:
+ 		self.requested_outputs=['default']
+ 
+@@ -59,6 +64,7 @@
+ 		md = checkfield(md,'fieldname','esa.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements,1])
+ 		md = checkfield(md,'fieldname','esa.love_h','NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','esa.love_l','NaN',1,'Inf',1)
++		md = checkfield(md,'fieldname','esa.hemisphere','NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','esa.degacc','size',[1,1],'>=',1e-10)
+ 		md = checkfield(md,'fieldname','esa.requested_outputs','stringrow',1)
+ 
+@@ -74,6 +80,7 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2)
+ 		WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'fieldname','love_l','format','DoubleMat','mattype',1)
++		WriteData(fid,prefix,'object',self,'fieldname','hemisphere','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
+ 		WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray')
+ 	
+Index: ../trunk-jpl/src/m/classes/esa.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/esa.js	(revision 22351)
++++ ../trunk-jpl/src/m/classes/esa.js	(revision 22352)
+@@ -9,7 +9,10 @@
+ 		
+ 		//numerical discretization accuracy
+ 		this.degacc=.01;
+-		
++	
++		//computational flags:
++		this.hemisphere=0;
++
+ 		//output default:
+ 		this.requested_outputs=['default'];
+ 
+@@ -25,6 +28,7 @@
+ 			md = checkfield(md,'fieldname','esa.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements, 1]);
+ 			md = checkfield(md,'fieldname','esa.love_h','NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','esa.love_l','NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','esa.hemisphere','NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','esa.degacc','size',[1, 1],'>=',1e-10);
+ 			md = checkfield(md,'fieldname','esa.requested_outputs','stringrow',1);
+ 			
+@@ -47,6 +51,7 @@
+ 		fielddisplay(this,'deltathickness','thickness change: ice height equivalent [m]');
+ 		fielddisplay(this,'love_h','load Love number for radial displacement');
+ 		fielddisplay(this,'love_l','load Love number for horizontal displacements'); 
++		fielddisplay(this,'hemisphere','North-south, East-west components of 2-D horiz displacement vector: -1 south, 1 north'); 
+ 		fielddisplay(this,'degacc',"accuracy (default .01 deg) for numerical discretization of the Green's functions");
+ 		fielddisplay(this,'transitions','indices into parts of the mesh that will be icecaps');
+ 		fielddisplay(this,'requested_outputs','additional outputs requested (default: EsaUmotion)');
+@@ -56,6 +61,7 @@
+ 			WriteData(fid,prefix,'object',this,'fieldname','deltathickness','format','DoubleMat','mattype',2);
+ 			WriteData(fid,prefix,'object',this,'fieldname','love_h','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',this,'fieldname','love_l','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',this,'fieldname','hemisphere','format','Integer');
+ 			WriteData(fid,prefix,'object',this,'fieldname','degacc','format','Double');
+ 			WriteData(fid,prefix,'object',this,'fieldname','transitions','format','MatArray');
+ 
+@@ -74,6 +80,7 @@
+ 			this.deltathickness=NullFix(this.deltathickness,NaN);
+ 			this.love_h=NullFix(this.love_h,NaN);
+ 			this.love_l=NullFix(this.love_l,NaN);
++			this.hemisphere=NullFix(this.hemisphere,NaN);
+ 			this.degacc=NullFix(this.degacc,NaN);
+ 		}//}}}
+ 	//properties
+@@ -81,6 +88,7 @@
+ 	this.deltathickness = NaN;
+ 	this.love_h         = 0; //provided by PREM model
+ 	this.love_l         = 0; //idam
++	this.hemisphere     = 0;
+ 	this.degacc         = 0;
+ 	this.requested_outputs = [];
+ 	this.transitions    = [];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22352-22353.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22352-22353.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22352-22353.diff	(revision 22755)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/love_numbers.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22352)
++++ ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22353)
+@@ -6,20 +6,28 @@
+ #LOVE_NUMBERS: provide love numbers (value 'h','k','l','gamma' and 'lambda'
+ #			   retrieved from: http://www.srosat.com/iag-jsg/loveNb.php
+ #    Usage:   series=love_numbers(value) 
++#             series=love_numbers(value,reference_frame) 
++# 
+ #             where value is one of 'h','k','l','gamma' and 'lambda'. 
++#	      reference_frame = one of 'CM' (default) and 'CF'.
+ #
+ #    Example:  
+ #          love_k=love_numbers('k');
++#          love_k=love_numbers('k','CF');
+ # 
+ 
+-	#some checks:
+-	if len(varargin)>0:
+-		raise RuntimeError('love_numbers error message: wrong usage')
+-
+-	if value not in ['h','k','l','gamma','lambda']:
+-		raise RuntimeError('value should be one of ''h'',''k'',''l'',''gamma'' and ''lambda''')
+-
+-	love_numbers=np.array([[    0         , 0          ,0          ,0          ,0          ,0          ,0          ],
++        # some checks:
++        if varargin==1:
++            frame='CM'; 
++        elif varargin==2: 
++            frame=reference_frame;
++        else:
++            raise RuntimeError('love_numbers error message: bad usage') 
++        
++        if value not in ['h','k','l','gamma','lambda']:
++            raise RuntimeError('value should be one of ''h'',''k'',''l'',''gamma'' and ''lambda''') 
++        
++        love_numbers=np.array([[    0         , 0          ,0          ,0          ,0          ,0          ,0          ],
+ 												 [	-1.28740059,-1.00000000,-0.89858519,1.28740059, 0.42519882  ,0.89858519 ,0.00000000 ],
+ 												 [	-1.00025365, -0.30922675, 0.02060926, 1.69102690, 0.46358648, 0.67016399, 0.61829668],
+ 												 [	-1.06243501, -0.19927948, 0.06801636, 1.86315553, 0.55741597, 0.73270416, 0.56270589],
+@@ -10020,9 +10028,8 @@
+ 												 [	-6.27342763, -0.00030951, 0.00018959, 7.27311812, 0.99905461, 0.99950089, 0.49327208],
+ 												 [	-6.27342771, -0.00030948, 0.00018957, 7.27311822, 0.99905470, 0.99950094, 0.49327205],
+ 												 [	-6.27342778, -0.00030945, 0.00018956, 7.27311833, 0.99905480, 0.99950099, 0.49327194]]);
+-
+-
+-	if value=='h':
++                                                                                                 
++        if value=='h':
+ 		series=love_numbers[:,0];
+ 	elif value=='k':
+ 		series=love_numbers[:,1];
+@@ -10034,5 +10041,15 @@
+ 		series=love_numbers[:,4];
+ 	else:
+ 		raise RuntimeError(['love_numbers error message: unknow value:', value])
+-		
+-	return series
++	
++	% choose degree 1 term for CF reference system 
++        if frame=='CF': # from Blewitt, 2003, JGR 
++            if value=='h':
++                    series[2,1] = -0.269; 
++            elif value=='k':
++                    series[2,1] = 0.021;  
++            elif value=='l':
++                    series[2,1] = 0.134; 
++	
++        return series
++
Index: /issm/oecreview/Archive/21724-22754/ISSM-22353-22354.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22353-22354.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22353-22354.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/love_numbers.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22353)
++++ ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22354)
+@@ -10042,7 +10042,7 @@
+ 	else:
+ 		raise RuntimeError(['love_numbers error message: unknow value:', value])
+ 	
+-	% choose degree 1 term for CF reference system 
++	# choose degree 1 term for CF reference system 
+         if frame=='CF': # from Blewitt, 2003, JGR 
+             if value=='h':
+                     series[2,1] = -0.269; 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22354-22355.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22354-22355.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22354-22355.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test2110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22354)
++++ ../trunk-jpl/test/NightlyRun/test2110.py	(revision 22355)
+@@ -33,7 +33,7 @@
+ #make sure wherever there is an ice load, that the mask is set to ice: 
+ md.mask.ice_levelset = np.ones((md.mesh.numberofvertices,))
+ pos = np.where(md.esa.deltathickness)
+-md.mask.ice_levelset[md.mesh.elements[pos,:]] = -1
++md.mask.ice_levelset[md.mesh.elements[pos,:]-1] = -1
+ 
+ #is ice grounded? 
+ md.mask.groundedice_levelset = -np.ones((md.mesh.numberofvertices,))
Index: /issm/oecreview/Archive/21724-22754/ISSM-22355-22356.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22355-22356.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22355-22356.diff	(revision 22755)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/love_numbers.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22355)
++++ ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22356)
+@@ -16,17 +16,12 @@
+ #          love_k=love_numbers('k','CF');
+ # 
+ 
+-        # some checks:
+-        if varargin==1:
+-            frame='CM'; 
+-        elif varargin==2: 
+-            frame=reference_frame;
+-        else:
+-            raise RuntimeError('love_numbers error message: bad usage') 
+-        
+         if value not in ['h','k','l','gamma','lambda']:
+             raise RuntimeError('value should be one of ''h'',''k'',''l'',''gamma'' and ''lambda''') 
+         
++        if len(varargin)>1: 
++            raise RuntimeError('love_numbers error message: wrong usage') 
++        
+         love_numbers=np.array([[    0         , 0          ,0          ,0          ,0          ,0          ,0          ],
+ 												 [	-1.28740059,-1.00000000,-0.89858519,1.28740059, 0.42519882  ,0.89858519 ,0.00000000 ],
+ 												 [	-1.00025365, -0.30922675, 0.02060926, 1.69102690, 0.46358648, 0.67016399, 0.61829668],
+@@ -10043,13 +10038,14 @@
+ 		raise RuntimeError(['love_numbers error message: unknow value:', value])
+ 	
+ 	# choose degree 1 term for CF reference system 
+-        if frame=='CF': # from Blewitt, 2003, JGR 
+-            if value=='h':
++        for frame in varargin:
++            if frame=='CF': # from Blewitt, 2003, JGR 
++                if value=='h':
+                     series[2,1] = -0.269; 
+-            elif value=='k':
++                elif value=='k':
+                     series[2,1] = 0.021;  
+-            elif value=='l':
++                elif value=='l':
+                     series[2,1] = 0.134; 
+-	
++
+         return series
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22356-22357.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22356-22357.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22356-22357.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/love_numbers.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22356)
++++ ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22357)
+@@ -10041,11 +10041,11 @@
+         for frame in varargin:
+             if frame=='CF': # from Blewitt, 2003, JGR 
+                 if value=='h':
+-                    series[2,1] = -0.269; 
++                    series[1] = -0.269; 
+                 elif value=='k':
+-                    series[2,1] = 0.021;  
++                    series[1] = 0.021;  
+                 elif value=='l':
+-                    series[2,1] = 0.134; 
++                    series[1] = 0.134; 
+ 
+         return series
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22357-22358.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22357-22358.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22357-22358.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test2113.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2113.py	(revision 22357)
++++ ../trunk-jpl/test/NightlyRun/test2113.py	(revision 22358)
+@@ -19,7 +19,7 @@
+ disc_radius = 500 # km
+ index = md.mesh.elements
+ x_element = np.mean(md.mesh.x[index - 1], 1) - 1.0e6
+-y_element = np.mean(md.mesh.y[index - 1], 1) - 1.0e6
++y_element = np.mean(md.mesh.y[index - 1], 1) + 1.0e6
+ rad_dist = np.sqrt(x_element**2 + y_element**2) / 1000  # radial distance in km
+ md.esa.deltathickness[np.where(rad_dist <= disc_radius)] = -1   # 1 m water withdrawl
+ # }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22358-22359.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22358-22359.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22358-22359.diff	(revision 22755)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/love_numbers.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22358)
++++ ../trunk-jpl/src/m/boundaryconditions/love_numbers.py	(revision 22359)
+@@ -16,8 +16,21 @@
+ #          love_k=love_numbers('k','CF');
+ # 
+ 
++        # some checks:
++        if len(varargin)==0:
++        	frame='CM';
++		print 'Info: computation is done in Center of Mass (CM) reference frame by default'
++        elif len(varargin)==1: 
++		reference_frame = varargin[0]
++		if (reference_frame in ['CF','CM']):
++	            	frame=reference_frame;
++		else:
++			raise RuntimeError('reference_frame should be one of ''CM'' or ''CF''')
++        else:
++            	raise RuntimeError('love_numbers error message: bad usage') 
++        
+         if value not in ['h','k','l','gamma','lambda']:
+-            raise RuntimeError('value should be one of ''h'',''k'',''l'',''gamma'' and ''lambda''') 
++        	raise RuntimeError('value should be one of ''h'',''k'',''l'',''gamma'' and ''lambda''') 
+         
+         if len(varargin)>1: 
+             raise RuntimeError('love_numbers error message: wrong usage') 
+@@ -10038,13 +10051,12 @@
+ 		raise RuntimeError(['love_numbers error message: unknow value:', value])
+ 	
+ 	# choose degree 1 term for CF reference system 
+-        for frame in varargin:
+-            if frame=='CF': # from Blewitt, 2003, JGR 
+-                if value=='h':
++        if frame=='CF': # from Blewitt, 2003, JGR 
++            if value=='h':
+                     series[1] = -0.269; 
+-                elif value=='k':
++            elif value=='k':
+                     series[1] = 0.021;  
+-                elif value=='l':
++            elif value=='l':
+                     series[1] = 0.134; 
+ 
+         return series
Index: /issm/oecreview/Archive/21724-22754/ISSM-22359-22360.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22359-22360.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22359-22360.diff	(revision 22755)
@@ -0,0 +1,734 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22359)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22360)
+@@ -166,12 +166,14 @@
+ 		void BedrockFromMismipPlus(void);
+ 		void AdjustBaseThicknessAndMask(void);
+ 		void GetMesh(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist);
++		void GetMeshOnPartition(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist,int** psidtoindex);
+ 		void GetGroundediceLevelSet(IssmDouble** pmasklevelset);
+ 		void CreateVertices(int newnumberofvertices,int newnumberofelements,int elementswidth,int* newelementslist,int* my_vertices,IssmDouble* newx,IssmDouble* newy,IssmDouble* newz,Vertices* vertices);
+ 		void CreateElements(int newnumberofelements,int elementswidth,int* newelementslist,bool* my_elements,Elements* elements);
+ 		void CreateMaterials(int newnumberofelements,bool* my_elements,Materials* materials);
+ 		void CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes);
+-		void CreateConstraints(int newnumberofvertices,int newnumberofelements,int nodecounter,int constraintcounter,IssmDouble* newx,IssmDouble* newy,int* my_vertices,Constraints* constraints);
++		void CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints);
++		void GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp);
+ 		void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements);
+ 		void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements);
+ 		void ElementsAndVerticesPartitioning(int& newnumberofvertices,int& newnumberofelements,int& elementswidth,int* newelementslist,bool** pmy_elements,int** pmy_vertices);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22359)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22360)
+@@ -90,6 +90,21 @@
+ 	#endif
+ 	#if !defined(_HAVE_ADOLC_)
+ 	if(amr_frequency){
++		/*Verifications. AMR supports SSA, P1 and horizontal 2D domain*/
++		bool isSSA;
++		int domaintype,element_type,analysis_counter=-1;
++		this->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
++		this->parameters->FindParam(&domaintype,DomainTypeEnum);
++		for(int i=0;i<this->nummodels;i++) if(this->analysis_type_list[i]==StressbalanceAnalysisEnum){analysis_counter=i;break;}
++		if(analysis_counter==-1) _error_("Could not find alias for analysis_type StressbalanceAnalysisEnum in list of FemModel analyses\n");
++		for(int i=0;i<this->elements->Size();i++){
++			Element* element	= xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++			element_type		= element->element_type_list[analysis_counter];
++			if(element_type!=P1Enum) _error_("Element type "<<EnumToStringx(element_type)<<" not supported with AMR yet!\n");
++		}
++		if(!isSSA) _error_("Flow equation not supported with AMR yet!\n ");
++		if(domaintype!=Domain2DhorizontalEnum) _error_("Domain "<<EnumToStringx(domaintype)<<" not supported with AMR yet!\n");
++
+ 		this->parameters->FindParam(&amrtype,AmrTypeEnum);
+ 		switch(amrtype){
+ 
+@@ -2455,7 +2470,7 @@
+ 
+ 		default: _error_("not implemented yet");
+ 	}
+-
++	
+ 	/*Partitioning the new mesh. Maybe ElementsAndVerticesPartitioning.cpp could be modified to set this without iomodel.*/
+ 	this->ElementsAndVerticesPartitioning(newnumberofvertices,newnumberofelements,elementswidth,newelementslist,&my_elements,&my_vertices);
+ 
+@@ -2476,10 +2491,10 @@
+ 
+ 	/*Creating nodes and constraints*/
+ 	/*Just SSA (2D) and P1 in this version*/
+-	Nodes* new_nodes=new Nodes();
+-	Constraints* new_constraints=new Constraints();
++	Nodes* new_nodes					= new Nodes();
++	Constraints* new_constraints	= new Constraints();
+ 
+-	int nodecounter=0;
++	int nodecounter		=0;
+ 	int constraintcounter=0;
+ 	for(int i=0;i<this->nummodels;i++){//create nodes for each analysis in analysis_type_list
+ 
+@@ -2486,11 +2501,10 @@
+ 		int analysis_enum = this->analysis_type_list[i];
+ 
+ 		/*As the domain is 2D, it is not necessary to create nodes for this analysis*/
+-		/*itapopo must verify if domain is not 3D. Only 2D in this version!*/
+-		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;	    
++		if(analysis_enum==StressbalanceVerticalAnalysisEnum) continue;    
+ 
+ 		this->CreateNodes(newnumberofvertices,my_vertices,nodecounter,analysis_enum,new_nodes);
+-		if(analysis_enum==StressbalanceAnalysisEnum) this->CreateConstraints(newnumberofvertices,newnumberofelements,nodecounter,constraintcounter,newx,newy,my_vertices,new_constraints);
++		this->CreateConstraints(new_vertices,nodecounter,constraintcounter,analysis_enum,new_constraints);
+ 		this->UpdateElements(newnumberofelements,newelementslist,my_elements,nodecounter,i,new_elements);
+ 
+ 		if(new_nodes->Size()) nodecounter=new_nodes->MaximumId();
+@@ -2659,34 +2673,44 @@
+    xDelete<IssmDouble>(sl);
+ }
+ /*}}}*/
+-void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements){/*{{{*/
++void FemModel::GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp){/*{{{*/
+ 
+-	int maxinputs = MaximumNumberOfDefinitionsEnum;
++	int maxinputs										= MaximumNumberOfDefinitionsEnum;
++	int numberofvertices								= this->vertices->NumberOfVertices();
++	int numberofelements								= this->elements->NumberOfElements();
++	int elementswidth									= this->GetElementsWidth();
++	int numP0inputs									= -1;
++	IssmDouble* P0inputs								= NULL;
++	Vector<IssmDouble>* vP0inputs					= NULL;
++	int* P0input_enums								= NULL;
++	int* P0input_interp 								= NULL;
++	int numP1inputs									= -1;
++	IssmDouble* P1inputs								= NULL;
++	Vector<IssmDouble>* vP1inputs					= NULL;
++	int* P1input_enums  								= NULL;
++	int* P1input_interp 								= NULL;
++	Vector<IssmDouble>* input_interpolations	= NULL;
++	IssmDouble* input_interpolations_serial	= NULL;
++   int* pos												= NULL; 
++	IssmDouble value									= 0;
+ 
+ 	/*Figure out how many inputs we have and their respective interpolation*/
+-	Vector<IssmDouble>* input_interpolations=new Vector<IssmDouble>(maxinputs);
++	input_interpolations=new Vector<IssmDouble>(maxinputs);
+ 	if(this->elements->Size()){
+ 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(0));
+ 		element->GetInputsInterpolations(input_interpolations);
+ 	}
++
++	/*Assemble and serialize*/
+ 	input_interpolations->Assemble();
++	input_interpolations_serial = input_interpolations->ToMPISerial();
+ 
+-	/*Serialize and set output*/
+-	IssmDouble* input_interpolations_serial = input_interpolations->ToMPISerial();
+-	delete input_interpolations;
+-
+ 	/*Count and get enums of all inputs in old mesh*/
+-	int  numP0inputs;
+-	int  numP1inputs;
+-	int *P0input_enums  = NULL;
+-	int *P1input_enums  = NULL;
+-	int *P0input_interp = NULL;
+-	int *P1input_interp = NULL;
+ 	for(int step=0;step<2;step++){
+ 		if(step){
+ 			P0input_enums  = xNew<int>(numP0inputs);
++			P0input_interp = xNew<int>(numP0inputs);
+ 			P1input_enums  = xNew<int>(numP1inputs);
+-			P0input_interp = xNew<int>(numP0inputs);
+ 			P1input_interp = xNew<int>(numP1inputs);	
+ 		}
+ 		numP0inputs = 0;
+@@ -2719,148 +2743,170 @@
+ 			}
+ 		}
+ 	}
+-
+-	/*========== Deal with P0 inputs ==========*/
+-	int numelementsold = this->elements->NumberOfElements();
+-	int numelementsnew = newfemmodel_elements->NumberOfElements();
+-	int numverticesold = this->vertices->NumberOfVertices();
+-	int numverticesnew = newfemmodel_vertices->NumberOfVertices();
+-	IssmDouble* P0inputsold = xNew<IssmDouble>(numelementsold*numP0inputs);
+-	IssmDouble* P0inputsnew = NULL;
+-	IssmDouble* vector      = NULL;
+-
+-	for(int i=0;i<numP0inputs;i++){
+-		GetVectorFromInputsx(&vector,this,P0input_enums[i],ElementSIdEnum);
+-
+-		/*Copy vector in matrix*/
+-		for(int j=0;j<numelementsold;j++) P0inputsold[j*numP0inputs+i] = vector[j];
+-		xDelete<IssmDouble>(vector);
++	
++	/*Get P0 and P1 inputs over the elements*/	
++	pos		= xNew<int>(elementswidth);
++	vP0inputs= new Vector<IssmDouble>(numberofelements*numP0inputs);
++	vP1inputs= new Vector<IssmDouble>(numberofvertices*numP1inputs);
++	for(int i=0;i<this->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
++		
++		/*Get P0 inputs*/
++		for(int j=0;j<numP0inputs;j++){
++			TriaInput* input=xDynamicCast<TriaInput*>(element->GetInput(P0input_enums[j]));		
++			input->GetInputAverage(&value);
++			pos[0]=element->Sid()*numP0inputs+j;
++			/*Insert input in the vector*/	
++			vP0inputs->SetValues(1,pos,&value,INS_VAL);
++		}
++		
++		/*Get P1 inputs*/
++		for(int j=0;j<numP1inputs;j++){
++			TriaInput* input=xDynamicCast<TriaInput*>(element->GetInput(P1input_enums[j]));
++			pos[0]=element->vertices[0]->Sid()*numP1inputs+j;
++			pos[1]=element->vertices[1]->Sid()*numP1inputs+j;
++			pos[2]=element->vertices[2]->Sid()*numP1inputs+j;
++			/*Insert input in the vector*/	
++			vP1inputs->SetValues(elementswidth,pos,input->values,INS_VAL);	
++		}
+ 	}
+ 
+-	/*========== Deal with P1 inputs ==========*/
+-	IssmDouble* P1inputsold = xNew<IssmDouble>(numverticesold*numP1inputs);
+-	IssmDouble* P1inputsnew = NULL;
+-	vector      = NULL;
++	/*Assemble and serialize*/
++	vP0inputs->Assemble();
++	vP1inputs->Assemble();
++	P0inputs=vP0inputs->ToMPISerial();
++	P1inputs=vP1inputs->ToMPISerial();
++	
++	/*Assign pointers*/
++	*pnumP0inputs		= numP0inputs; 
++	*pP0inputs			= P0inputs; 
++	*pP0input_enums	= P0input_enums;
++	*pP0input_interp	= P0input_interp;
++	*pnumP1inputs		= numP1inputs; 
++	*pP1inputs			= P1inputs; 
++	*pP1input_enums	= P1input_enums;
++	*pP1input_interp	= P1input_interp;	
+ 
+-	for(int i=0;i<numP1inputs;i++){
+-		GetVectorFromInputsx(&vector,this,P1input_enums[i],VertexSIdEnum);
++	/*Cleanup*/
++	delete input_interpolations;
++	delete vP0inputs;
++	delete vP1inputs;
++	xDelete<IssmDouble>(input_interpolations_serial);
++	xDelete<int>(pos);
++}
++/*}}}*/
++void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements){/*{{{*/
++	
++	int numberofelements			= this->elements->NumberOfElements();	//global, entire old mesh
++	int newnumberofelements		= newfemmodel_elements->Size();			//just on the new partition
++	int numberofvertices			= this->vertices->NumberOfVertices();	//global, entire old mesh
++	int newnumberofvertices 	= newfemmodel_vertices->Size();			//just on the new partition
++	int elementswidth				= this->GetElementsWidth(); //just tria in this version
++	int numP0inputs				= -1;
++	IssmDouble* P0inputs			= NULL; //global, entire old mesh
++	IssmDouble* newP0inputs		= NULL; //just on the new partition
++	int* P0input_enums			= NULL;
++	int* P0input_interp 			= NULL;
++	int numP1inputs				= -1;
++	IssmDouble* P1inputs			= NULL; //global, entire old mesh
++	IssmDouble* newP1inputs 	= NULL; //just on the new partition
++	int* P1input_enums  			= NULL;
++	int* P1input_interp 			= NULL;
++	IssmDouble* values			= NULL;	
++   IssmDouble* vector      	= NULL;
++	IssmDouble* x					= NULL;//global, entire old mesh
++	IssmDouble* y					= NULL;//global, entire old mesh
++	IssmDouble* z					= NULL;//global, entire old mesh
++	int* elementslist				= NULL;//global, entire old mesh
++	IssmDouble* newx				= NULL;//just on the new partition
++	IssmDouble* newy				= NULL;//just on the new partition
++	IssmDouble* newz				= NULL;//just on the new partition
++	IssmDouble* newxc				= NULL;//just on the new partition
++	IssmDouble* newyc				= NULL;//just on the new partition
++	int* newelementslist			= NULL;//just on the new partition
++	int* sidtoindex				= NULL;//global vertices sid to partition index 
+ 
+-		/*Copy vector in matrix*/
+-		for(int j=0;j<numverticesold;j++) P1inputsold[j*numP1inputs+i] = vector[j];
+-		xDelete<IssmDouble>(vector);
+-	}
++	/*Get old P0 and P1  inputs (entire mesh)*/
++	this->GetInputs(&numP0inputs,&P0inputs,&P0input_enums,&P0input_interp,&numP1inputs,&P1inputs,&P1input_enums,&P1input_interp);
+ 
+-	/*Old mesh coordinates*/
+-	IssmDouble *Xold     = NULL;
+-	IssmDouble *Yold     = NULL;
+-	IssmDouble *Zold		= NULL;
+-	int        *Indexold = NULL;
+-	IssmDouble *Xnew     = NULL;
+-	IssmDouble *Ynew     = NULL;
+-	IssmDouble *Znew		= NULL;
+-	IssmDouble* XC_new   = NULL;
+-	IssmDouble* YC_new   = NULL;
+-	int        *Indexnew = NULL;
++	/*Get the old mesh (global, entire mesh)*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
+ 
+-	/*Get the old mesh*/
+-	this->GetMesh(this->vertices,this->elements,&Xold,&Yold,&Zold,&Indexold);
++	/*Get the new mesh (just on the new partition)*/
++	this->GetMeshOnPartition(newfemmodel_vertices,newfemmodel_elements,&newx,&newy,&newz,&newelementslist,&sidtoindex);
+ 
+-	/*Get the new mesh*/
+-	this->GetMesh(newfemmodel_vertices,newfemmodel_elements,&Xnew,&Ynew,&Znew,&Indexnew);
+-
+-	/*Calculate the center points xc and xy*/
+-	int elementswidth = this->GetElementsWidth(); //just tria in this version
+-	/*new mesh*/
+-	XC_new=xNewZeroInit<IssmDouble>(numelementsnew);
+-	YC_new=xNewZeroInit<IssmDouble>(numelementsnew);
+-	for(int i=0;i<numelementsnew;i++){
++	/*Calculate the center points xc and xy (new mesh, new partition)*/
++	newxc=xNewZeroInit<IssmDouble>(newnumberofelements);
++	newyc=xNewZeroInit<IssmDouble>(newnumberofelements);
++	for(int i=0;i<newnumberofelements;i++){
+ 		for(int j=0;j<elementswidth;j++){
+-			int vid = Indexnew[i*elementswidth+j]-1;//Transform to C indexing
+-			XC_new[i]+=Xnew[vid];
+-			YC_new[i]+=Ynew[vid];
++			int vid = newelementslist[i*elementswidth+j]-1;//Transform to C indexing
++			newxc[i]+=newx[vid]/elementswidth;
++			newyc[i]+=newy[vid]/elementswidth;
+ 		}
+-		XC_new[i]=XC_new[i]/3.;
+-		YC_new[i]=YC_new[i]/3.;
+ 	}
+ 
+-	/*Interplate P0 inputs in the new mesh*/
+-	InterpFromMeshToMesh2dx(&P0inputsnew,Indexold,Xold,Yold,numverticesold,numelementsold,
+-				P0inputsold,numelementsold,numP0inputs,
+-				XC_new,YC_new,numelementsnew,NULL);
++	/*Interplate P0 inputs in the new mesh (just on the new partition)*/
++	InterpFromMeshToMesh2dx(&newP0inputs,elementslist,x,y,numberofvertices,numberofelements,
++				P0inputs,numberofelements,numP0inputs,
++				newxc,newyc,newnumberofelements,NULL);
+ 
+-	/*Interpolate P1 inputs in the new mesh*/
+-	InterpFromMeshToMesh2dx(&P1inputsnew,Indexold,Xold,Yold,numverticesold,numelementsold,
+-				P1inputsold,numverticesold,numP1inputs,
+-				Xnew,Ynew,numverticesnew,NULL);
++	/*Interpolate P1 inputs in the new mesh (just on the new partition)*/
++	InterpFromMeshToMesh2dx(&newP1inputs,elementslist,x,y,numberofvertices,numberofelements,
++				P1inputs,numberofvertices,numP1inputs,
++				newx,newy,newnumberofvertices,NULL);
+ 
+-	/*Insert P0 inputs into the new elements.*/
+-	vector=NULL;
+-	for(int i=0;i<numP0inputs;i++){
+-
+-		/*Get P0 input vector from the interpolated matrix*/
+-		vector=xNew<IssmDouble>(numelementsnew);
+-		for(int j=0;j<numelementsnew;j++) vector[j]=P0inputsnew[j*numP0inputs+i];//vector has values for all elements (serial)
+-
+-		/*Update elements from inputs: */
+-		for(int j=0;j<newfemmodel_elements->Size();j++){
+-			Element* element=xDynamicCast<Element*>(newfemmodel_elements->GetObjectByOffset(j));
+-			switch(P0input_interp[i]){	
++	/*Insert P0 and P1 inputs into the new elements (just on the new partition)*/
++	values=xNew<IssmDouble>(elementswidth);	
++	for(int i=0;i<newfemmodel_elements->Size();i++){//just on the new partition
++		Element* element=xDynamicCast<Element*>(newfemmodel_elements->GetObjectByOffset(i));
++		/*newP0inputs is just on the new partition*/
++		for(int j=0;j<numP0inputs;j++){
++			switch(P0input_interp[j]){	
+ 				case P0Enum:
+ 				case DoubleInputEnum:
+-					element->AddInput(new DoubleInput(P0input_enums[i],vector[element->sid]));//sid because newfemmodel has just a partitioning 
++					element->AddInput(new DoubleInput(P0input_enums[j],newP0inputs[i*numP0inputs+j]));
+ 					break;
+ 				case IntInputEnum: 
+-					element->AddInput(new IntInput(P0input_enums[i],reCast<int>(vector[element->sid])));//sid because newfemmodel has just a partitioning
++					element->AddInput(new IntInput(P0input_enums[j],reCast<int>(newP0inputs[i*numP0inputs+j])));
+ 					break;
+ 				case BoolInputEnum:
+-					element->AddInput(new BoolInput(P0input_enums[i],reCast<bool>(vector[element->sid])));//sid because newfemmodel has just a partitioning
++					element->AddInput(new BoolInput(P0input_enums[j],reCast<bool>(newP0inputs[i*numP0inputs+j])));
+ 					break;
+ 				default:
+-					_error_(EnumToStringx(P0input_enums[i])<<" Not supported yet");
++					_error_(EnumToStringx(P0input_enums[j])<<" Not supported yet");
+ 			}
+ 		}
+-
+-		xDelete<IssmDouble>(vector);
+-	}
+-
+-	/*Insert P1 inputs into the new elements.*/
+-	vector=NULL;
+-	for(int i=0;i<numP1inputs;i++){
+-
+-		/*Get P1 input vector from the interpolated matrix*/
+-		vector=xNew<IssmDouble>(numverticesnew);
+-		for(int j=0;j<numverticesnew;j++) vector[j]=P1inputsnew[j*numP1inputs+i];//vector has all vertices	(serial)
+-
+-		/*Update elements from inputs: */
+-		//InputUpdateFromVectorx(newfemmodel,vector,P1input_enums[i],VertexSIdEnum);//VertexSId because vector is serial in SId indexing
+-		for(int j=0;j<newfemmodel_elements->Size();j++){
+-			Element* element=xDynamicCast<Element*>(newfemmodel_elements->GetObjectByOffset(j));
+-			element->InputUpdateFromVector(vector,P1input_enums[i],VertexSIdEnum);
++		/*newP1inputs is just on the new partition*/
++		for(int j=0;j<numP1inputs;j++){
++			values[0]=newP1inputs[sidtoindex[element->vertices[0]->Sid()]*numP1inputs+j];
++			values[1]=newP1inputs[sidtoindex[element->vertices[1]->Sid()]*numP1inputs+j];
++			values[2]=newP1inputs[sidtoindex[element->vertices[2]->Sid()]*numP1inputs+j];
++			element->inputs->AddInput(new TriaInput(P1input_enums[j],values,P1Enum));
+ 		}
+-
+-		xDelete<IssmDouble>(vector);
+ 	}
+-
++	
+ 	/*Cleanup*/
+-	xDelete<IssmDouble>(input_interpolations_serial);
+-	xDelete<IssmDouble>(P0inputsold);
+-	xDelete<IssmDouble>(P0inputsnew);
++	xDelete<IssmDouble>(P0inputs);
++	xDelete<IssmDouble>(newP0inputs);
+ 	xDelete<int>(P0input_enums);
+ 	xDelete<int>(P0input_interp);
+-	xDelete<IssmDouble>(P1inputsold);
+-	xDelete<IssmDouble>(P1inputsnew);
++	xDelete<IssmDouble>(P1inputs);
++	xDelete<IssmDouble>(newP1inputs);
+ 	xDelete<int>(P1input_enums);
+ 	xDelete<int>(P1input_interp);
+-	xDelete<IssmDouble>(Xold);
+-	xDelete<IssmDouble>(Yold);
+-	xDelete<IssmDouble>(Zold);
+-	xDelete<int>(Indexold);
+-	xDelete<IssmDouble>(Xnew);
+-	xDelete<IssmDouble>(Ynew);
+-	xDelete<IssmDouble>(Znew);
+-	xDelete<IssmDouble>(XC_new);
+-	xDelete<IssmDouble>(YC_new);
+-	xDelete<int>(Indexnew);
++	xDelete<IssmDouble>(x);
++	xDelete<IssmDouble>(y);
++	xDelete<IssmDouble>(z);
++	xDelete<int>(elementslist);
++	xDelete<IssmDouble>(newx);
++	xDelete<IssmDouble>(newy);
++	xDelete<IssmDouble>(newz);
++	xDelete<IssmDouble>(newxc);
++	xDelete<IssmDouble>(newyc);
++	xDelete<int>(newelementslist);
++	xDelete<int>(sidtoindex);
++	xDelete<IssmDouble>(values);
+ }
+ /*}}}*/
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+@@ -3108,7 +3154,6 @@
+ 			nodes->AddObject(newnode);
+ 		}
+ 	}
+-	return;
+ }
+ /*}}}*/
+ void FemModel::GetMesh(Vertices* femmodel_vertices, Elements* femmodel_elements,IssmDouble** px, IssmDouble** py, IssmDouble** pz, int** pelementslist){/*{{{*/
+@@ -3116,21 +3161,23 @@
+ 	if(!femmodel_vertices) _error_("GetMesh: vertices are NULL.");
+ 	if(!femmodel_elements) _error_("GetMesh: elements are NULL.");
+ 	
+-	int numberofvertices, numberofelements;
+-	int elementswidth = this->GetElementsWidth(); // just 2D mesh in this version (just tria elements)
+-	IssmDouble *x		= NULL;
+-	IssmDouble *y		= NULL;
+-	IssmDouble *z		= NULL;	
+-	int* elementslist = NULL;
+-	
++	int numberofvertices = femmodel_vertices->NumberOfVertices();
++	int numberofelements = femmodel_elements->NumberOfElements();
++	int elementswidth		= this->GetElementsWidth(); // just 2D mesh in this version (just tria elements)
++	IssmDouble* x			= NULL;
++	IssmDouble* y			= NULL;
++	IssmDouble* z			= NULL;	
++	int* elementslist 	= NULL;
++	int* elem_vertices	= NULL;
++	IssmDouble *id1		= NULL;
++   IssmDouble *id2 		= NULL;
++	IssmDouble *id3 		= NULL;
++
+ 	/*Get vertices coordinates*/
+-	VertexCoordinatesx(&x, &y, &z, femmodel_vertices,false) ;
+-
+-	numberofvertices = femmodel_vertices->NumberOfVertices();
+-	numberofelements = femmodel_elements->NumberOfElements();
++	VertexCoordinatesx(&x,&y,&z,femmodel_vertices,false) ;
+ 	
+ 	/*Get element vertices*/
+-	int* elem_vertices=xNew<int>(elementswidth);
++	elem_vertices				= xNew<int>(elementswidth);
+ 	Vector<IssmDouble>* vid1= new Vector<IssmDouble>(numberofelements);
+ 	Vector<IssmDouble>* vid2= new Vector<IssmDouble>(numberofelements);
+ 	Vector<IssmDouble>* vid3= new Vector<IssmDouble>(numberofelements);
+@@ -3150,9 +3197,9 @@
+    vid3->Assemble();
+ 
+    /*Serialize*/
+-	IssmDouble *id1 = vid1->ToMPISerial();
+-   IssmDouble *id2 = vid2->ToMPISerial();
+-	IssmDouble *id3 = vid3->ToMPISerial();
++	id1 = vid1->ToMPISerial();
++   id2 = vid2->ToMPISerial();
++	id3 = vid3->ToMPISerial();
+ 	
+ 	/*Construct elements list*/
+ 	elementslist=xNew<int>(numberofelements*elementswidth);
+@@ -3179,101 +3226,152 @@
+ 	delete vid3;
+ }
+ /*}}}*/
+-void FemModel::CreateConstraints(int newnumberofvertices,int newnumberofelements,int nodecounter,int constraintcounter,IssmDouble* newx,IssmDouble* newy,int* my_vertices,Constraints* constraints){/*{{{*/
++void FemModel::GetMeshOnPartition(Vertices* femmodel_vertices,Elements* femmodel_elements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist,int** psidtoindex){/*{{{*/
+ 
+-	/*itapopo ATTENTION: JUST SPCVX AND SPCVY TO TEST!!!*/
+-	/*OTHERS CONSTRAINTS MUST BE IMPLEMENTED!!!*/
++	if(!femmodel_vertices) _error_("GetMesh: vertices are NULL.");
++	if(!femmodel_elements) _error_("GetMesh: elements are NULL.");
+ 	
+-	/*Get x and y of the mesh i-1*/
+-	int numberofvertices			= this->vertices->NumberOfVertices();
+-	int numberofelements			= this->elements->NumberOfElements();
+-	IssmDouble *x					= NULL;
+-	IssmDouble *y					= NULL;
+-	IssmDouble *z					= NULL;
+-	int        *elementslist	= NULL;
++	int numberofvertices			= femmodel_vertices->Size();	//number of vertices of this partition
++	int numbertotalofvertices	= femmodel_vertices->NumberOfVertices();	//number total of vertices (entire mesh)
++	int numberofelements			= femmodel_elements->Size();  //number of elements of this partition
++	int elementswidth				= this->GetElementsWidth();	//just 2D mesh in this version (just tria elements)
++	IssmDouble* x					= NULL;
++	IssmDouble* y					= NULL;
++	IssmDouble* z					= NULL;	
++	int* elementslist				= NULL;
++	int* sidtoindex				= NULL;
++	int* elem_vertices			= NULL;
++	
++	/*Get vertices coordinates of this partition*/
++	sidtoindex	= xNewZeroInit<int>(numbertotalofvertices);//entire mesh, all vertices
++	x				= xNew<IssmDouble>(numberofvertices);//just this partition
++	y				= xNew<IssmDouble>(numberofvertices);//just this partitio;
++	z				= xNew<IssmDouble>(numberofvertices);//just this partitio;
++	
++	/*Go through in this partition (vertices)*/
++	for(int i=0;i<numberofvertices;i++){//just this partition
++		Vertex* vertex=(Vertex*)femmodel_vertices->GetObjectByOffset(i);	
++		/*Attention: no spherical coordinates*/
++		x[i]=vertex->GetX();
++		y[i]=vertex->GetY();
++		z[i]=vertex->GetZ();
++		/*Keep the index and sid pair*/
++		sidtoindex[vertex->Sid()]=i;
++	}
+ 
+-	/*elementslist is in Matlab indexing*/
+-	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
++	/*Go through in this partition (elements) and build the element list*/
++	elem_vertices= xNew<int>(elementswidth);
++	elementslist = xNew<int>(numberofelements*elementswidth);
++	if(numberofelements*elementswidth<0) _error_("numberofelements negative.");
+ 	
+-	/*Get spcvx and spcvy for mesh i-1*/
+-	IssmDouble *spcvx						= NULL;
+-	IssmDouble *spcvy						= NULL;
+-	IssmDouble *spcvxflag				= NULL;
+-	IssmDouble *spcvyflag				= NULL;
+-	int numberofnodes_analysistype	= this->nodes->NumberOfNodes(StressbalanceAnalysisEnum);
+-	Vector<IssmDouble>* vspcvx			= new Vector<IssmDouble>(numberofnodes_analysistype);
+-	Vector<IssmDouble>* vspcvy			= new Vector<IssmDouble>(numberofnodes_analysistype);
+-	Vector<IssmDouble>* vspcvxflag	= new Vector<IssmDouble>(numberofnodes_analysistype);
+-	Vector<IssmDouble>* vspcvyflag	= new Vector<IssmDouble>(numberofnodes_analysistype);
++	for(int i=0;i<numberofelements;i++){//just this partition
++    	Element* element=xDynamicCast<Element*>(femmodel_elements->GetObjectByOffset(i));
++    	element->GetVerticesSidList(elem_vertices);
++		elementslist[elementswidth*i+0] = sidtoindex[elem_vertices[0]]+1; //InterpMesh wants Matlab indexing
++		elementslist[elementswidth*i+1] = sidtoindex[elem_vertices[1]]+1; //InterpMesh wants Matlab indexing
++		elementslist[elementswidth*i+2] = sidtoindex[elem_vertices[2]]+1; //InterpMesh wants Matlab indexing
++	}	
++		
++	/*Assign pointers*/
++	*px				= x;
++	*py				= y;
++	*pz				= z;
++	*pelementslist = elementslist; //Matlab indexing. InterMesh uses this type.
++	*psidtoindex	= sidtoindex;  //it is ncessary to insert inputs 
++
++	/*Cleanup*/
++	xDelete<int>(elem_vertices);
++}
++/*}}}*/
++void FemModel::CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints){/*{{{*/
++
++	/*ATTENTION: JUST SPCVX AND SPCVY*/
++	/*OTHERS CONSTRAINTS MUST BE IMPLEMENTED*/
++	if(analysis_enum!=StressbalanceAnalysisEnum) return;
+ 	
++	int numberofnodes_analysistype= this->nodes->NumberOfNodes(analysis_enum);
++	int dofpernode						= 2;														//vx and vy 
++	int numberofcols					= dofpernode*2;										//to keep dofs and flags in the vspc vector
++	int numberofvertices				= this->vertices->NumberOfVertices();			//global, entire old mesh
++	int numberofelements				= this->elements->NumberOfElements();			//global, entire old mesh
++	int newnumberofvertices			= newfemmodel_vertices->Size();					//local, just the new partition
++	int count							= 0;
++	IssmDouble* x						= NULL;													//global, entire old mesh
++	IssmDouble* y						= NULL;													//global, entire old mesh
++	IssmDouble* z						= NULL;													//global, entire old mesh
++	int*			elementslist		= NULL;													//global, entire old mesh
++	IssmDouble* spc					= NULL;													//global, entire old mesh
++	IssmDouble* newx					= NULL;													//local, just new partition
++	IssmDouble* newy					= NULL;													//local, just new partition
++	IssmDouble* newspc				= NULL;													//local, just new partition
++	IssmDouble eps						= 1.e-8;
++	Vector<IssmDouble>* vspc		= new Vector<IssmDouble>(numberofnodes_analysistype*numberofcols);
++
++	/*Get old mesh (global, entire mesh). Elementslist comes in Matlab indexing*/
++	this->GetMesh(this->vertices,this->elements,&x,&y,&z,&elementslist);
++
++	/*Get vertices coordinates of the new partition*/
++	newx=xNew<IssmDouble>(newnumberofvertices);//just the new partition
++	newy=xNew<IssmDouble>(newnumberofvertices);//just the new partition
++	for(int i=0;i<newnumberofvertices;i++){//just the new partition
++		Vertex* vertex=(Vertex*)newfemmodel_vertices->GetObjectByOffset(i);	
++		/*Attention: no spherical coordinates*/
++		newx[i]=vertex->GetX();
++		newy[i]=vertex->GetY();
++	}
++
++	/*Get spcvx and spcvy of old mesh*/
+ 	for(int i=0;i<this->constraints->Size();i++){
+-		SpcStatic* spc			= xDynamicCast<SpcStatic*>(this->constraints->GetObjectByOffset(i));
+-		int dof					= spc->GetDof();
+-		int node					= spc->GetNodeId();
+-		IssmDouble spcvalue	= spc->GetValue(); 
++		
++		Constraint* constraint=(Constraint*)constraints->GetObjectByOffset(i);
++		if(!constraint->InAnalysis(analysis_enum)) _error_("AMR create constraints for "<<EnumToStringx(analysis_enum)<<" not supported yet!\n");
++
++		SpcStatic* spcstatic = xDynamicCast<SpcStatic*>(constraint);
++		int dof					= spcstatic->GetDof();
++		int node					= spcstatic->GetNodeId();
++		IssmDouble spcvalue	= spcstatic->GetValue(); 
+ 		int nodeindex			= node-1;
+ 		
++		/*vx and vx flag insertion*/
+ 		if(dof==0) {//vx
+-			vspcvx->SetValue(nodeindex,spcvalue,INS_VAL);
+-			vspcvxflag->SetValue(nodeindex,1,INS_VAL);
++			vspc->SetValue(nodeindex*numberofcols,spcvalue,INS_VAL);    //vx
++			vspc->SetValue(nodeindex*numberofcols+dofpernode,1,INS_VAL);//vxflag
+ 		} 
++		/*vy and vy flag insertion*/
+ 		if(dof==1){//vy
+-			vspcvy->SetValue(nodeindex,spcvalue,INS_VAL);
+-			vspcvyflag->SetValue(nodeindex,1,INS_VAL);
++			vspc->SetValue(nodeindex*numberofcols+1,spcvalue,INS_VAL);	//vy
++			vspc->SetValue(nodeindex*numberofcols+dofpernode+1,1,INS_VAL);//vyflag
+ 		}
+ 	}
+ 
+-	/*Assemble*/
+-	vspcvx->Assemble();
+-	vspcvy->Assemble();
+-	vspcvxflag->Assemble();
+-	vspcvyflag->Assemble();
++	/*Assemble and serialize*/
++	vspc->Assemble();
++	spc=vspc->ToMPISerial();
+ 
+-	/*Serialize*/
+-	spcvx		 = vspcvx->ToMPISerial();
+-	spcvy		 = vspcvy->ToMPISerial();
+-	spcvxflag = vspcvxflag->ToMPISerial();
+-	spcvyflag = vspcvyflag->ToMPISerial();
++	/*Interpolate spc values and flags in the new partition*/
++	InterpFromMeshToMesh2dx(&newspc,elementslist,x,y,numberofvertices,numberofelements,
++								spc,numberofvertices,numberofcols,
++								newx,newy,newnumberofvertices,NULL);
+ 	
+-	IssmDouble *newspcvx		 = NULL;
+-	IssmDouble *newspcvy		 = NULL;
+-	IssmDouble *newspcvxflag = NULL;
+-	IssmDouble *newspcvyflag = NULL;
+-	int nods_data				 = numberofvertices;
+-	int nels_data				 = numberofelements;
+-	int M_data					 = numberofvertices;
+-	int N_data					 = 1;
+-	int N_interp				 = newnumberofvertices;
+-
+-  /*Interpolate spcvx and spcvy in the new mesh*/
+-	InterpFromMeshToMesh2dx(&newspcvx,elementslist,x,y,nods_data,nels_data,spcvx,M_data,N_data,newx,newy,N_interp,NULL);
+-	InterpFromMeshToMesh2dx(&newspcvy,elementslist,x,y,nods_data,nels_data,spcvy,M_data,N_data,newx,newy,N_interp,NULL);
+-	InterpFromMeshToMesh2dx(&newspcvxflag,elementslist,x,y,nods_data,nels_data,spcvxflag,M_data,N_data,newx,newy,N_interp,NULL);
+-	InterpFromMeshToMesh2dx(&newspcvyflag,elementslist,x,y,nods_data,nels_data,spcvyflag,M_data,N_data,newx,newy,N_interp,NULL);
+-
+-	int count					= 0;
+-	IssmDouble eps				= 1.e-8;
+-
+ 	/*Now, insert the interpolated constraints in the data set (constraints)*/
+-	for(int i=0;i<newnumberofvertices;i++){
+-		if(my_vertices[i]){ 
+-			/*spcvx*/
+-			if(!xIsNan<IssmDouble>(newspcvx[i]) && newspcvxflag[i]>(1-eps)){
+-				constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+i+1,0,newspcvx[i],StressbalanceAnalysisEnum));
+-				//add count'th spc, on node i+1, setting dof 1 to vx.
+-				count++;
+-			}
++	count=0;
++	for(int i=0;i<newnumberofvertices;i++){//just in the new partition
++		Vertex* vertex=(Vertex*)newfemmodel_vertices->GetObjectByOffset(i);
++		/*spcvx*/
++		if(!xIsNan<IssmDouble>(newspc[i*numberofcols]) && newspc[i*numberofcols+dofpernode]>(1-eps)){
++			newfemmodel_constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+vertex->Sid()+1,0,newspc[i*numberofcols],analysis_enum));
++			//add count'th spc, on node i+1, setting dof 1 to vx.
++			count++;
+ 		}
+ 	}
+ 	count=0;
+-	for(int i=0;i<newnumberofvertices;i++){
+-		if(my_vertices[i]){
+-			/*spcvy*/
+-			if(!xIsNan<IssmDouble>(newspcvy[i]) && newspcvyflag[i]>(1-eps) ){
+-				constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+i+1,1,newspcvy[i],StressbalanceAnalysisEnum)); 
+-				//add count'th spc, on node i+1, setting dof 1 to vx.
+-				count++;
+-			}
++	for(int i=0;i<newnumberofvertices;i++){//just in the new partition
++		Vertex* vertex=(Vertex*)newfemmodel_vertices->GetObjectByOffset(i);
++		/*spcvy*/
++		if(!xIsNan<IssmDouble>(newspc[i*numberofcols+1]) && newspc[i*numberofcols+dofpernode+1]>(1-eps) ){
++			newfemmodel_constraints->AddObject(new SpcStatic(constraintcounter+count+1,nodecounter+vertex->Sid()+1,1,newspc[i*numberofcols+1],analysis_enum)); 
++			//add count'th spc, on node i+1, setting dof 1 to vx.
++			count++;
+ 		}
+ 	}
+ 
+@@ -3282,18 +3380,11 @@
+ 	xDelete<IssmDouble>(y);
+ 	xDelete<IssmDouble>(z);
+ 	xDelete<int>(elementslist);
+-	xDelete<IssmDouble>(spcvx);
+-	xDelete<IssmDouble>(spcvy);
+-	xDelete<IssmDouble>(spcvxflag);
+-	xDelete<IssmDouble>(spcvyflag);
+-	xDelete<IssmDouble>(newspcvx);
+-	xDelete<IssmDouble>(newspcvy);
+-	xDelete<IssmDouble>(newspcvxflag);
+-	xDelete<IssmDouble>(newspcvyflag);
+-	delete vspcvx;
+-	delete vspcvy;	
+-	delete vspcvxflag;
+-	delete vspcvyflag;
++	xDelete<IssmDouble>(spc);
++	xDelete<IssmDouble>(newspc);
++	xDelete<IssmDouble>(newx);
++	xDelete<IssmDouble>(newy);
++	delete vspc;
+ }
+ /*}}}*/
+ void FemModel::UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22360-22361.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22360-22361.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22360-22361.diff	(revision 22755)
@@ -0,0 +1,237 @@
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 22361)
+@@ -17,9 +17,9 @@
+ 	return;
+ }
+ /*}}}*/
+-SpcDynamic::SpcDynamic(int spc_sid,int spc_nodeid, int spc_dof,int spc_analysis_type){/*{{{*/
++SpcDynamic::SpcDynamic(int spc_id,int spc_nodeid, int spc_dof,int spc_analysis_type){/*{{{*/
+ 
+-	sid           = spc_sid;
++	id           = spc_id;
+ 	nodeid        = spc_nodeid;
+ 	dof           = spc_dof;
+ 	value         = 0;
+@@ -40,7 +40,7 @@
+ 
+ 	SpcDynamic* spcdyn = new SpcDynamic(*this); 
+ 
+-	spcdyn->sid=this->sid;
++	spcdyn->id=this->id;
+ 	spcdyn->nodeid=this->nodeid;
+ 	spcdyn->dof=this->dof;
+ 	spcdyn->value=this->value;
+@@ -59,7 +59,7 @@
+ void    SpcDynamic::Echo(void){/*{{{*/
+ 
+ 	_printf_("SpcDynamic:\n");
+-	_printf_("   sid: " << sid << "\n");
++	_printf_("   id: " << id << "\n");
+ 	_printf_("   nodeid: " << nodeid << "\n");
+ 	_printf_("   dof: " << dof << "\n");
+ 	_printf_("   value: " << value << "\n");
+@@ -68,13 +68,13 @@
+ 	return;
+ }
+ /*}}}*/
+-int     SpcDynamic::Id(void){ return sid; }/*{{{*/
++int     SpcDynamic::Id(void){ return id; }/*{{{*/
+ /*}}}*/
+ void    SpcDynamic::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+ 
+ 	MARSHALLING_ENUM(SpcDynamicEnum);
+ 
+-	MARSHALLING(sid);
++	MARSHALLING(id);
+ 	MARSHALLING(nodeid);
+ 	MARSHALLING(dof);
+ 	MARSHALLING(value);
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 22361)
+@@ -17,9 +17,9 @@
+ 	return;
+ }
+ /*}}}*/
+-SpcStatic::SpcStatic(int spc_sid,int spc_nodeid, int spc_dof,IssmDouble spc_value,int spc_analysis_type){/*{{{*/
++SpcStatic::SpcStatic(int spc_id,int spc_nodeid, int spc_dof,IssmDouble spc_value,int spc_analysis_type){/*{{{*/
+ 
+-	sid           = spc_sid;
++	id           = spc_id;
+ 	nodeid        = spc_nodeid;
+ 	dof           = spc_dof;
+ 	value         = spc_value;
+@@ -39,7 +39,7 @@
+ 	
+ 	SpcStatic* spcstat = new SpcStatic(*this); 
+ 
+-	spcstat->sid=this->sid;
++	spcstat->id=this->id;
+ 	spcstat->nodeid=this->nodeid;
+ 	spcstat->dof=this->dof;
+ 	spcstat->value=this->value;
+@@ -51,7 +51,7 @@
+ void    SpcStatic::DeepEcho(void){/*{{{*/
+ 
+ 	_printf_("SpcStatic:\n");
+-	_printf_("   sid: " << sid << "\n");
++	_printf_("   id: " << id << "\n");
+ 	_printf_("   nodeid: " << nodeid << "\n");
+ 	_printf_("   dof: " << dof << "\n");
+ 	_printf_("   value: " << value << "\n");
+@@ -62,7 +62,7 @@
+ void    SpcStatic::Echo(void){/*{{{*/
+ 
+ 	_printf_("SpcStatic:\n");
+-	_printf_("   sid: " << sid << "\n");
++	_printf_("   id: " << id << "\n");
+ 	_printf_("   nodeid: " << nodeid << "\n");
+ 	_printf_("   dof: " << dof << "\n");
+ 	_printf_("   value: " << value << "\n");
+@@ -70,13 +70,13 @@
+ 	return;
+ }
+ /*}}}*/
+-int     SpcStatic::Id(void){ return sid; }/*{{{*/
++int     SpcStatic::Id(void){ return id; }/*{{{*/
+ /*}}}*/
+ void    SpcStatic::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+ 
+ 	MARSHALLING_ENUM(SpcStaticEnum);
+ 
+-	MARSHALLING(sid);
++	MARSHALLING(id);
+ 	MARSHALLING(nodeid);
+ 	MARSHALLING(dof);
+ 	MARSHALLING(value);
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 22361)
+@@ -15,7 +15,7 @@
+ /*SpcTransient constructors and destructor*/
+ SpcTransient::SpcTransient(){/*{{{*/
+ 	penalty       = false;
+-	sid           = -1;
++	id            = -1;
+ 	nodeid        = -1;
+ 	dof           = -1;
+ 	values        = NULL;
+@@ -25,10 +25,10 @@
+ 	return;
+ }
+ /*}}}*/
+-SpcTransient::SpcTransient(int spc_sid,int spc_nodeid, int spc_dof,int spc_nsteps, IssmDouble* spc_times, IssmDouble* spc_values,int spc_analysis_type){/*{{{*/
++SpcTransient::SpcTransient(int spc_id,int spc_nodeid, int spc_dof,int spc_nsteps, IssmDouble* spc_times, IssmDouble* spc_values,int spc_analysis_type){/*{{{*/
+ 
+ 	penalty = false;
+-	sid     = spc_sid;
++	id     = spc_id;
+ 	nodeid  = spc_nodeid;
+ 	dof     = spc_dof;
+ 	nsteps  = spc_nsteps;
+@@ -51,7 +51,7 @@
+ 
+ /*Object virtual functions definitions:*/
+ Object* SpcTransient::copy() {/*{{{*/
+-	return new SpcTransient(sid,nodeid,dof,nsteps,times,values,analysis_type);
++	return new SpcTransient(id,nodeid,dof,nsteps,times,values,analysis_type);
+ }
+ /*}}}*/
+ void    SpcTransient::DeepEcho(void){/*{{{*/
+@@ -62,7 +62,7 @@
+ 
+ 	int i;
+ 	_printf_("SpcTransient:\n");
+-	_printf_("   sid: " << sid << "\n");
++	_printf_("   id: " << id << "\n");
+ 	_printf_("   nodeid: " << nodeid << "\n");
+ 	_printf_("   dof: " << dof << "\n");
+ 	_printf_("   nsteps: " << nsteps << "\n");
+@@ -75,7 +75,7 @@
+ }
+ /*}}}*/
+ int     SpcTransient::Id(void){/*{{{*/
+-	return sid;
++	return id;
+ }
+ /*}}}*/
+ void    SpcTransient::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+@@ -82,7 +82,7 @@
+ 
+ 	MARSHALLING_ENUM(SpcTransientEnum);
+ 
+-	MARSHALLING(sid);
++	MARSHALLING(id);
+ 	MARSHALLING(nodeid);
+ 	MARSHALLING(dof);
+ 	MARSHALLING(analysis_type);
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 22361)
+@@ -13,7 +13,7 @@
+ class SpcDynamic: public Constraint{
+ 
+ 	private: 
+-		int        sid;             /*! id, to track it */
++		int        id;              /*! id, to track it */
+ 		int        nodeid;          /*!node id          */
+ 		int        dof;             /*!component        */
+ 		IssmDouble value;           /*value             */
+@@ -25,7 +25,7 @@
+ 
+ 		/*SpcDynamic constructors, destructors*/
+ 		SpcDynamic();
+-		SpcDynamic(int sid,int nodeid, int dof,int analysis_type);
++		SpcDynamic(int id_in,int nodeid, int dof,int analysis_type);
+ 		~SpcDynamic();
+ 
+ 		/*Object virtual functions definitions*/
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 22361)
+@@ -13,7 +13,7 @@
+ class SpcStatic: public Constraint{
+ 
+ 	private: 
+-		int        sid;             /*! id, to track it */
++		int        id;             /*! id, to track it */
+ 		int        nodeid;          /*!node id          */
+ 		int        dof;             /*!component        */
+ 		IssmDouble value;           /*value             */
+@@ -24,7 +24,7 @@
+ 
+ 		/*SpcStatic constructors, destructors:{{{*/
+ 		SpcStatic();
+-		SpcStatic(int sid,int nodeid, int dof,IssmDouble value,int analysis_type);
++		SpcStatic(int id,int nodeid, int dof,IssmDouble value,int analysis_type);
+ 		~SpcStatic();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 22360)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 22361)
+@@ -13,7 +13,7 @@
+ class SpcTransient: public Constraint{
+ 
+ 	private: 
+-		int         sid;             /* id, to track it             */
++		int         id;              /* id, to track it             */
+ 		int         nodeid;          /*node id                      */
+ 		int         dof;             /*component                    */
+ 		IssmDouble *values;          /*different values in time     */
+@@ -26,7 +26,7 @@
+ 
+ 		/*SpcTransient constructors, destructors:{{{*/
+ 		SpcTransient();
+-		SpcTransient(int sid,int nodeid, int dof,int nsteps, IssmDouble* times, IssmDouble* values,int analysis_type);
++		SpcTransient(int id_in,int nodeid, int dof,int nsteps, IssmDouble* times, IssmDouble* values,int analysis_type);
+ 		~SpcTransient();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22361-22362.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22361-22362.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22361-22362.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 22361)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 22362)
+@@ -627,6 +627,9 @@
+ 		_error_("Size of spc field not supported");
+ 	}
+ 
++	/*Update counter now since we have added some constraints*/
++	iomodel->constraintcounter = constraints->NumberOfConstraints();
++
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
+@@ -770,6 +773,9 @@
+ 		_error_("Size of spc field not supported");
+ 	}
+ 
++	/*Update counter now since we have added some constraints*/
++	iomodel->constraintcounter = constraints->NumberOfConstraints();
++
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22362-22363.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22362-22363.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22362-22363.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 22362)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 22363)
+@@ -14,6 +14,8 @@
+ tar -zxf  ADOL-C.tar.gz
+ 
+ #Compile ADOL-C
++export CFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi"
++export CXXFLAGS="-O2 -std=c++11 -L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi"
+ cd src
+ ./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
+ 	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
Index: /issm/oecreview/Archive/21724-22754/ISSM-22363-22364.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22363-22364.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22363-22364.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22363)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22364)
+@@ -698,7 +698,7 @@
+ 		_assert_(epl_head_input);
+ 		epl_head_input->GetInputValue(&epl_head,gauss);
+ 		if (element->Id()==42){
+-			printf("epl head in sed Pvec transfer is %f\n",epl_head);
++			_printf_("epl head in sed Pvec transfer is "<<  epl_head <<"\n");
+ 		}
+ 		element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
+ 		transfer=+epl_head*leakage;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22364-22365.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22364-22365.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22364-22365.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/externalpackages/gmsh/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22364)
++++ ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22365)
+@@ -8,10 +8,13 @@
+ #Download latest version
+ #svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
+ git clone http://gitlab.onelab.info/gmsh/gmsh.git src
++cd src
++git pull
++cd ..
+ 
+ #Configure
+ cd install
+-cmake ../src -DCMAKE_INSTALL_PREFIX="$ISSM_DIR/externalpackages/gmsh/install"
++cmake ../src -DCMAKE_INSTALL_PREFIX="$ISSM_DIR/externalpackages/gmsh/install" -DENABLE_MPI=1
+ 
+ #Compile and install
+ if [ $# -eq 0 ]; then
Index: /issm/oecreview/Archive/21724-22754/ISSM-22365-22366.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22365-22366.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22365-22366.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/gmsh/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22365)
++++ ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22366)
+@@ -8,9 +8,6 @@
+ #Download latest version
+ #svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
+ git clone http://gitlab.onelab.info/gmsh/gmsh.git src
+-cd src
+-git pull
+-cd ..
+ 
+ #Configure
+ cd install
Index: /issm/oecreview/Archive/21724-22754/ISSM-22366-22367.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22366-22367.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22366-22367.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22366)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22367)
+@@ -845,10 +845,8 @@
+ }/*}}}*/
+ GenericOption<char*>* OptionCharParse( char* name, const mxArray* prhs[]){ /*{{{*/
+ 
+-	GenericOption<char*>  *ochar = NULL;
+-
+ 	/*check and parse the name  */
+-	ochar=new GenericOption<char*>();
++	GenericOption<char*>* ochar=new GenericOption<char*>();
+ 	ochar->name =xNew<char>(strlen(name)+1);
+ 	memcpy(ochar->name,name,(strlen(name)+1)*sizeof(char));
+ 
+@@ -856,7 +854,13 @@
+ 	if (!mxIsClass(prhs[0],"char")){
+ 		_error_("Value of option \"" << ochar->name  << "\" must be class \"char\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+ 	}
+-	FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
++	//FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
++	FetchData(&ochar->value,prhs[0]);
++	ochar->numel = strlen(name);
++	ochar->ndims = 2;
++	ochar->size = xNew<int>(2);
++	ochar->size[0] = ochar->numel;
++	ochar->size[1] = 1;
+ 
+ 	return(ochar);
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22367-22368.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22367-22368.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22367-22368.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/externalpackages/gmsh/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22367)
++++ ../trunk-jpl/externalpackages/gmsh/install.sh	(revision 22368)
+@@ -7,8 +7,23 @@
+ 
+ #Download latest version
+ #svn co --username gmsh --password gmsh https://geuz.org/svn/gmsh/trunk src
+-git clone http://gitlab.onelab.info/gmsh/gmsh.git src
++#git clone http://gitlab.onelab.info/gmsh/gmsh.git src
+ 
++#Set gmsh version
++GMSH_VER="3.0.5"
++
++#Remove tarball if it exists
++rm -f gmsh-$GMSH_VER-source.tgz
++
++#Download last stable version that we know works
++wget http://gmsh.info/src/gmsh-$GMSH_VER-source.tgz
++
++#Untar gmsh
++tar -xvzf gmsh-$GMSH_VER-source.tgz
++
++#Rename gmsh source directory
++mv gmsh-$GMSH_VER-source src
++
+ #Configure
+ cd install
+ cmake ../src -DCMAKE_INSTALL_PREFIX="$ISSM_DIR/externalpackages/gmsh/install" -DENABLE_MPI=1
Index: /issm/oecreview/Archive/21724-22754/ISSM-22368-22369.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22368-22369.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22368-22369.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22368)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22369)
+@@ -6,7 +6,7 @@
+ #include "../solutionsequences/solutionsequences.h"
+ #include "../cores/cores.h"
+ 
+-//#define FSANALYTICAL 12
++#define FSANALYTICAL 10
+ //#define LATERALFRICTION 1
+ 
+ /*Model processing*/
+@@ -3501,6 +3501,8 @@
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorFSStress(Element* element){/*{{{*/
+ 
++	/*Skipping for now*/
++	return NULL;
+ 	if(!element->IsOnBase()) return NULL;
+ 
+ 	/*Intermediaries*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22369-22370.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22369-22370.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22369-22370.diff	(revision 22755)
@@ -0,0 +1,164 @@
+Index: ../trunk-jpl/examples/shakti/moulin.par
+===================================================================
+--- ../trunk-jpl/examples/shakti/moulin.par	(nonexistent)
++++ ../trunk-jpl/examples/shakti/moulin.par	(revision 22370)
+@@ -0,0 +1,58 @@
++%Start defining model parameters here
++
++% Set up bed topography and ice geometry for a tilted 500m thick slab
++    md.geometry.base = .02*md.mesh.x;
++    md.geometry.bed = md.geometry.base;
++    md.geometry.surface = .02*md.mesh.x + 500;
++    md.geometry.thickness = md.geometry.surface - md.geometry.bed;
++
++% Define ice sliding velocity (m/yr) 
++    md.initialization.vx = 10^-6*md.constants.yts*ones(md.mesh.numberofvertices,1);
++    md.initialization.vy = zeros(md.mesh.numberofvertices,1);
++    md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
++
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
++
++% Materials
++    % Ice flow law parameter (note that the standard parameter A=B^(-3))
++    md.materials.rheology_B= (5e-25)^(-1/3)*ones(md.mesh.numberofvertices,1);
++    md.initialization.temperature=(273)*ones(md.mesh.numberofvertices,1);
++    md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
++
++%Calving
++md.calving.calvingrate=zeros(md.mesh.numberofvertices,1);
++%md.calving.spclevelset=NaN(md.mesh.numberofvertices,1);
++
++% Friction law and coefficient
++    md.friction=frictionsommers(md.friction);
++    md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
++
++
++%Numerical parameters
++md.stressbalance.viscosity_overshoot=0.0;
++md.masstransport.stabilization=1.;
++md.thermal.stabilization=1.;
++md.verbose=verbose(0);
++md.settings.waitonlock=30;
++md.stressbalance.restol=0.05;
++md.steadystate.reltol=0.05;
++md.stressbalance.reltol=0.05;
++md.stressbalance.abstol=NaN;
++md.timestepping.time_step=1.;
++md.timestepping.final_time=3.;
++
++%GIA: 
++md.gia.lithosphere_thickness=100.*ones(md.mesh.numberofvertices,1); % in km
++md.gia.mantle_viscosity=1.0*10^21*ones(md.mesh.numberofvertices,1); % in Pa.s
++md.materials.lithosphere_shear_modulus=6.7*10^10;                   % in Pa
++md.materials.lithosphere_density=3.32;                              % in g/cm^-3
++md.materials.mantle_shear_modulus=1.45*10^11;                       % in Pa
++md.materials.mantle_density=3.34;                                   % in g/cm^-3
++
++%Boundary conditions:
++md=SetIceSheetBC(md);
++
++%Change name so that no test have the same name
++A=dbstack;
++if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
+Index: ../trunk-jpl/examples/shakti/outline.exp
+===================================================================
+--- ../trunk-jpl/examples/shakti/outline.exp	(nonexistent)
++++ ../trunk-jpl/examples/shakti/outline.exp	(revision 22370)
+@@ -0,0 +1,10 @@
++## Name:DomainOutline
++## Icon:0
++# Points Count  Value
++5 1.000000
++# X pos Y pos
++0 0
++1000 0
++1000 1000
++0 1000
++0 0
+Index: ../trunk-jpl/examples/shakti/runme.m
+===================================================================
+--- ../trunk-jpl/examples/shakti/runme.m	(nonexistent)
++++ ../trunk-jpl/examples/shakti/runme.m	(revision 22370)
+@@ -0,0 +1,81 @@
++steps=[1:3];
++
++if any(steps==1)
++	disp('	Step 1: Mesh');
++    
++    %Generate unstructured mesh on 1,000 m square with typical element edge length of 20 m
++    md=triangle(model,'./outline.exp',20);
++	 
++	 save MoulinMesh md
++end
++if any(steps==2)
++	disp('	Step 2: Parameterization');
++    md=loadmodel('MoulinMesh');
++    
++    md=setmask(md,'','');
++    
++    % Run parameterization script to set up geometry, velocity, material properties, etc.
++    md=parameterize(md,'moulin.par');
++    
++    % HYDROLOGY SPECIFIC PARAMETERIZATION:
++    % Change hydrology class to Sommers' SHaKTI model
++    md.hydrology=hydrologysommers();
++    
++    % Define initial water head such that water pressure is 50% of ice overburden pressure
++    md.hydrology.head = 0.5*md.materials.rho_ice/md.materials.rho_freshwater*md.geometry.thickness + md.geometry.base;
++    
++    % Initial subglacial gap height of 0.01m everywhere
++    md.hydrology.gap_height = 0.01*ones(md.mesh.numberofelements,1);
++    
++    % Typical bed bump bump spacing (2m)
++    md.hydrology.bump_spacing = 2*ones(md.mesh.numberofelements,1);
++    
++    % Typical bed bump height (0.1m)
++    md.hydrology.bump_height = 0.1*ones(md.mesh.numberofelements,1);
++    
++    % Define distributed englacial input to the subglacial system (m/yr)
++    % Change the value 0.0 to add distributed input
++    md.hydrology.englacial_input = 0.0*ones(md.mesh.numberofvertices,1);
++    
++    % Initial Reynolds number (start at Re=1000 everywhere)
++    md.hydrology.reynolds= 1000*ones(md.mesh.numberofelements,1);
++    
++    % Set up atmospheric pressure Type I boundary condition at left edge of
++    % domain (outflow, i.e. h=zb at x=xmin)
++    md.hydrology.spchead = NaN(md.mesh.numberofvertices,1);
++    pos=find(md.mesh.vertexonboundary & md.mesh.x==max(md.mesh.x));
++    md.hydrology.spchead(pos)=md.geometry.base(pos);
++    
++    save MoulinParam md;
++end
++if any(steps==3);
++	disp('	Step 3: Solve!');
++	md=loadmodel('MoulinParam');
++    
++    md.transient=deactivateall(md.transient);
++    md.transient.ishydrology=1;
++    
++    % Specify that you want to run the model on your current computer
++    % Change the number of processors according to your machine (here np=4)
++    md.cluster=generic('np',2);
++    
++    % Define the time stepping scheme: run for 90 days with a time step of 1 hr
++    md.timestepping.time_step=3600/md.constants.yts; % Time step (in years)
++    md.timestepping.final_time=30/365;
++    
++    %Add one moulin with steady input at x=500, y=500
++    [a,pos] = min(sqrt((md.mesh.x-500).^2+(md.mesh.y-500).^2));
++    time=0:md.timestepping.time_step:md.timestepping.final_time;
++    md.hydrology.moulin_input = zeros(md.mesh.numberofvertices+1,numel(time));
++    md.hydrology.moulin_input(end,:)=time;
++    md.hydrology.moulin_input(pos,:)=4;
++    
++    % Specify no-flux Type 2 boundary conditions on all edges (except
++    % the Type 1 condition set at the outflow above)
++    md.hydrology.neumannflux=zeros(md.mesh.numberofelements+1,numel(time));
++    md.hydrology.neumannflux(end,:)=time;
++    
++    md=solve(md,'Transient');
++
++	 save MoulinTransient md
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22370-22371.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22370-22371.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22370-22371.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22370)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22371)
+@@ -6,7 +6,7 @@
+ #include "../solutionsequences/solutionsequences.h"
+ #include "../cores/cores.h"
+ 
+-#define FSANALYTICAL 10
++//#define FSANALYTICAL 10
+ //#define LATERALFRICTION 1
+ 
+ /*Model processing*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22371-22372.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22371-22372.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22371-22372.diff	(revision 22755)
@@ -0,0 +1,272 @@
+Index: ../trunk-jpl/examples/shakti/runme.m
+===================================================================
+--- ../trunk-jpl/examples/shakti/runme.m	(revision 22371)
++++ ../trunk-jpl/examples/shakti/runme.m	(revision 22372)
+@@ -2,80 +2,81 @@
+ 
+ if any(steps==1)
+ 	disp('	Step 1: Mesh');
+-    
+-    %Generate unstructured mesh on 1,000 m square with typical element edge length of 20 m
+-    md=triangle(model,'./outline.exp',20);
+-	 
+-	 save MoulinMesh md
++
++	%Generate unstructured mesh on 1,000 m square with typical element edge length of 20 m
++	md=triangle(model,'./outline.exp',20);
++
++	save MoulinMesh md
+ end
+ if any(steps==2)
+ 	disp('	Step 2: Parameterization');
+-    md=loadmodel('MoulinMesh');
+-    
+-    md=setmask(md,'','');
+-    
+-    % Run parameterization script to set up geometry, velocity, material properties, etc.
+-    md=parameterize(md,'moulin.par');
+-    
+-    % HYDROLOGY SPECIFIC PARAMETERIZATION:
+-    % Change hydrology class to Sommers' SHaKTI model
+-    md.hydrology=hydrologysommers();
+-    
+-    % Define initial water head such that water pressure is 50% of ice overburden pressure
+-    md.hydrology.head = 0.5*md.materials.rho_ice/md.materials.rho_freshwater*md.geometry.thickness + md.geometry.base;
+-    
+-    % Initial subglacial gap height of 0.01m everywhere
+-    md.hydrology.gap_height = 0.01*ones(md.mesh.numberofelements,1);
+-    
+-    % Typical bed bump bump spacing (2m)
+-    md.hydrology.bump_spacing = 2*ones(md.mesh.numberofelements,1);
+-    
+-    % Typical bed bump height (0.1m)
+-    md.hydrology.bump_height = 0.1*ones(md.mesh.numberofelements,1);
+-    
+-    % Define distributed englacial input to the subglacial system (m/yr)
+-    % Change the value 0.0 to add distributed input
+-    md.hydrology.englacial_input = 0.0*ones(md.mesh.numberofvertices,1);
+-    
+-    % Initial Reynolds number (start at Re=1000 everywhere)
+-    md.hydrology.reynolds= 1000*ones(md.mesh.numberofelements,1);
+-    
+-    % Set up atmospheric pressure Type I boundary condition at left edge of
+-    % domain (outflow, i.e. h=zb at x=xmin)
+-    md.hydrology.spchead = NaN(md.mesh.numberofvertices,1);
+-    pos=find(md.mesh.vertexonboundary & md.mesh.x==max(md.mesh.x));
+-    md.hydrology.spchead(pos)=md.geometry.base(pos);
+-    
+-    save MoulinParam md;
++	md=loadmodel('MoulinMesh');
++
++	md=setmask(md,'','');
++
++	% Run parameterization script to set up geometry, velocity, material properties, etc.
++	md=parameterize(md,'moulin.par');
++
++	% HYDROLOGY SPECIFIC PARAMETERIZATION:
++	% Change hydrology class to Sommers' SHaKTI model
++	md.hydrology=hydrologysommers();
++
++	% Define initial water head such that water pressure is 50% of ice overburden pressure
++	md.hydrology.head = 0.5*md.materials.rho_ice/md.materials.rho_freshwater*md.geometry.thickness + md.geometry.base;
++
++	% Initial subglacial gap height of 0.01m everywhere
++	md.hydrology.gap_height = 0.01*ones(md.mesh.numberofelements,1);
++
++	% Typical bed bump bump spacing (2m)
++	md.hydrology.bump_spacing = 2*ones(md.mesh.numberofelements,1);
++
++	% Typical bed bump height (0.1m)
++	md.hydrology.bump_height = 0.1*ones(md.mesh.numberofelements,1);
++
++	% Define distributed englacial input to the subglacial system (m/yr)
++	% Change the value 0.0 to add distributed input
++	md.hydrology.englacial_input = 0.0*ones(md.mesh.numberofvertices,1);
++
++	% Initial Reynolds number (start at Re=1000 everywhere)
++	md.hydrology.reynolds= 1000*ones(md.mesh.numberofelements,1);
++
++	% Set up atmospheric pressure Type I boundary condition at left edge of
++	% domain (outflow, i.e. h=zb at x=xmin)
++	md.hydrology.spchead = NaN(md.mesh.numberofvertices,1);
++	pos=find(md.mesh.vertexonboundary & md.mesh.x==min(md.mesh.x));
++	md.hydrology.spchead(pos)=md.geometry.base(pos);
++
++	save MoulinParam md;
+ end
+ if any(steps==3);
+ 	disp('	Step 3: Solve!');
+ 	md=loadmodel('MoulinParam');
+-    
+-    md.transient=deactivateall(md.transient);
+-    md.transient.ishydrology=1;
+-    
+-    % Specify that you want to run the model on your current computer
+-    % Change the number of processors according to your machine (here np=4)
+-    md.cluster=generic('np',2);
+-    
+-    % Define the time stepping scheme: run for 90 days with a time step of 1 hr
+-    md.timestepping.time_step=3600/md.constants.yts; % Time step (in years)
+-    md.timestepping.final_time=30/365;
+-    
+-    %Add one moulin with steady input at x=500, y=500
+-    [a,pos] = min(sqrt((md.mesh.x-500).^2+(md.mesh.y-500).^2));
+-    time=0:md.timestepping.time_step:md.timestepping.final_time;
+-    md.hydrology.moulin_input = zeros(md.mesh.numberofvertices+1,numel(time));
+-    md.hydrology.moulin_input(end,:)=time;
+-    md.hydrology.moulin_input(pos,:)=4;
+-    
+-    % Specify no-flux Type 2 boundary conditions on all edges (except
+-    % the Type 1 condition set at the outflow above)
+-    md.hydrology.neumannflux=zeros(md.mesh.numberofelements+1,numel(time));
+-    md.hydrology.neumannflux(end,:)=time;
+-    
+-    md=solve(md,'Transient');
+ 
+-	 save MoulinTransient md
++	md.transient=deactivateall(md.transient);
++	md.transient.ishydrology=1;
++
++	% Specify that you want to run the model on your current computer
++	% Change the number of processors according to your machine (here np=4)
++	md.cluster=generic('np',2);
++
++	% Define the time stepping scheme: run for 90 days with a time step of 1 hr
++	md.timestepping.time_step=3600/md.constants.yts; % Time step (in years)
++	md.timestepping.final_time=30/365;
++
++	%Add one moulin with steady input at x=500, y=500
++	[a,pos] = min(sqrt((md.mesh.x-500).^2+(md.mesh.y-500).^2));
++	time=0:md.timestepping.time_step:md.timestepping.final_time;
++	md.hydrology.moulin_input = zeros(md.mesh.numberofvertices+1,numel(time));
++	md.hydrology.moulin_input(end,:)=time;
++	md.hydrology.moulin_input(pos,:)=4;
++
++	% Specify no-flux Type 2 boundary conditions on all edges (except
++	% the Type 1 condition set at the outflow above)
++	md.hydrology.neumannflux=zeros(md.mesh.numberofelements+1,numel(time));
++	md.hydrology.neumannflux(end,:)=time;
++
++	md.verbose.solution=1;
++	md=solve(md,'Transient');
++
++	save MoulinTransient md
+ end
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp	(revision 22372)
+@@ -0,0 +1,76 @@
++/*!\file: solutionsequence_nonlinear.cpp
++ * \brief: core of a non-linear solution, using fixed-point method 
++ */ 
++
++#include "./solutionsequences.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++void solutionsequence_shakti_nonlinear(FemModel* femmodel){
++
++	/*intermediary: */
++	Matrix<IssmDouble>* Kff = NULL;
++	Matrix<IssmDouble>* Kfs = NULL;
++	Vector<IssmDouble>* ug  = NULL;
++	Vector<IssmDouble>* uf  = NULL;
++	Vector<IssmDouble>* old_uf = NULL;
++	Vector<IssmDouble>* pf  = NULL;
++	Vector<IssmDouble>* df  = NULL;
++	Vector<IssmDouble>* ys  = NULL;
++
++	/*parameters:*/
++	int max_nonlinear_iterations;
++	int configuration_type;
++	IssmDouble eps_res,eps_rel,eps_abs;
++
++	/*Recover parameters: */
++	femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum);
++	femmodel->parameters->FindParam(&eps_res,StressbalanceRestolEnum);
++	femmodel->parameters->FindParam(&eps_rel,StressbalanceReltolEnum);
++	femmodel->parameters->FindParam(&eps_abs,StressbalanceAbstolEnum);
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	femmodel->UpdateConstraintsx();
++
++	int  count=0;
++	bool converged=false;
++
++	/*Start non-linear iteration using input velocity: */
++	GetSolutionFromInputsx(&ug,femmodel);
++	Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters);
++
++	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
++	InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++
++	for(;;){
++		/*save pointer to old solution*/
++		delete old_uf;old_uf=uf;
++		delete ug;
++
++		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
++		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
++		Reduceloadx(pf, Kfs, ys); delete Kfs;
++		Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);
++		Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
++
++		convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); delete Kff; delete pf; delete df;
++		InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++		InputUpdateFromSolutionx(femmodel,ug);
++
++		/*Increase count: */
++		count++;
++		if(count>=max_nonlinear_iterations){
++			_printf0_("   maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded\n"); 
++			converged = true;
++		}
++		if(converged) break;
++	}
++
++	if(VerboseConvergence()) _printf0_("\n   total number of iterations: " << count << "\n");
++
++	/*clean-up*/
++	delete uf;
++	delete ug;
++	delete old_uf;
++}
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequences.h
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 22371)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 22372)
+@@ -13,6 +13,7 @@
+ 
+ void solutionsequence_thermal_nonlinear(FemModel* femmodel);
+ void solutionsequence_hydro_nonlinear(FemModel* femmodel);
++void solutionsequence_shakti_nonlinear(FemModel* femmodel);
+ void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads);
+ void solutionsequence_newton(FemModel* femmodel);
+ void solutionsequence_fct(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22371)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22372)
+@@ -286,6 +286,7 @@
+ 					./solutionsequences/solutionsequence_adjoint_linear.cpp\
+ 					./cores/hydrology_core.cpp\
+ 					./solutionsequences/solutionsequence_hydro_nonlinear.cpp\
++					./solutionsequences/solutionsequence_shakti_nonlinear.cpp\
+ 					./cores/stressbalance_core.cpp\
+ 					./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp\
+ 					./cores/balancethickness_core.cpp \
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22371)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22372)
+@@ -112,7 +112,7 @@
+ 	else if (hydrology_model==HydrologysommersEnum){	
+ 		femmodel->SetCurrentConfiguration(HydrologySommersAnalysisEnum);	
+       InputDuplicatex(femmodel,HydrologyHeadEnum,HydrologyHeadOldEnum);	
+-		solutionsequence_nonlinear(femmodel,modify_loads); 
++		solutionsequence_shakti_nonlinear(femmodel); 
+ 		if(VerboseSolution()) _printf0_("   updating gap height\n");
+ 		HydrologySommersAnalysis* analysis = new HydrologySommersAnalysis();
+ 		analysis->UpdateGapHeight(femmodel);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22372-22373.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22372-22373.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22372-22373.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive2002.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2101.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2003.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22373-22374.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22373-22374.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22373-22374.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive350.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22374-22375.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22374-22375.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22374-22375.diff	(revision 22755)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/solvers/cgnoneoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/cgnoneoptions.m	(revision 22374)
++++ ../trunk-jpl/src/m/solvers/cgnoneoptions.m	(revision 22375)
+@@ -1,4 +1,4 @@
+-function solverOptions=cgmgoptions(varargin)
++function solverOptions=cgnoneoptions(varargin)
+ 
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
Index: /issm/oecreview/Archive/21724-22754/ISSM-22375-22376.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22375-22376.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22375-22376.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22375)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22376)
+@@ -10,11 +10,8 @@
+ 	/*diverse:*/
+ 	int    icecommsize;
+ 	int    rankzeros[2];
+-	int    my_rank;
++	int    my_rank,my_local_rank,my_size,my_local_size;
+ 	ISSM_MPI_Comm worldcomm;
+-
+-//	int    modelid;
+-//	int    count=0;
+ 	ISSM_MPI_Comm modelcomm;
+ 	ISSM_MPI_Comm frommitgcm;
+ 	ISSM_MPI_Comm tomitgcmcomm;
+@@ -27,6 +24,7 @@
+ 	
+ 	/*What is my rank?:*/
+ 	ISSM_MPI_Comm_rank(worldcomm,&my_rank);
++	ISSM_MPI_Comm_size(worldcomm,&my_size);
+ 
+ 	/*First model is ice, second is ocean*/
+ 	/*ice comm size: */
+@@ -36,9 +34,16 @@
+ 	rankzeros[0]=0; 
+ 	rankzeros[1]=icecommsize; 
+ 
++	printf("Ice: My global rank: %i My world size: %i \n",my_rank,my_size);
++
+ 	/*Split world into sub-communicators for each and every model:*/
+ 	ISSM_MPI_Comm_split(worldcomm,0, my_rank, &modelcomm);
+ 
++	ISSM_MPI_Comm_rank(modelcomm,&my_local_rank);
++	ISSM_MPI_Comm_size(modelcomm,&my_local_size);
++
++	printf("Ice: My global rank: %i My local rank: %i My world size: %i My local size: %i\n",my_rank,my_local_rank,my_size,my_local_size);
++
+ 	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, rankzeros[1], 0, &tomitgcmcomm); 
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22376-22377.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22376-22377.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22376-22377.diff	(revision 22755)
@@ -0,0 +1,392 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22377)
+@@ -0,0 +1,387 @@
++C $Header: /u/gcmpack/MITgcm/eesupp/src/eeboot_minimal.F,v 1.31 2017/07/26 21:23:07 jmc Exp $
++C $Name:  $
++
++#include "PACKAGES_CONFIG.h"
++#include "CPP_EEOPTIONS.h"
++
++#define ALLOW_CPL_ISSM
++
++CBOP
++C     !ROUTINE: EEBOOT_MINIMAL
++
++C     !INTERFACE:
++      SUBROUTINE EEBOOT_MINIMAL( myComm )
++
++C     !DESCRIPTION:
++C     *==========================================================*
++C     | SUBROUTINE EEBOOT\_MINIMAL
++C     | o Set an initial environment that is predictable i.e.
++C     | behaves in a similar way on all machines and stable.
++C     *==========================================================*
++C     | Under MPI this routine calls MPI\_INIT to setup the
++C     | mpi environment ( on some systems the code is running as
++C     | a single process prior to MPI\_INIT, on others the mpirun
++C     | script has already created multiple processes). Until
++C     | MPI\_Init is called it is unclear what state the
++C     | application is in. Once this routine has been run it is
++C     | "safe" to do things like I/O to report erros and to get
++C     | run parameters.
++C     | Note: This routine can also be compiled with CPP
++C     | directives set so that no multi-processing is initialise.
++C     | This is OK and will work fine.
++C     *==========================================================*
++
++C     !USES:
++      IMPLICIT NONE
++C     == Global data ==
++#include "SIZE.h"
++#include "EEPARAMS.h"
++#include "EESUPPORT.h"
++
++C     !ROUTINE ARGUMENTS
++C     == Routine arguments ==
++C     myComm     :: Communicator that is passed down from
++C                   upper level driver (if there is one).
++      INTEGER myComm
++
++C     !LOCAL VARIABLES:
++C     == Local variables ==
++C     myThid     :: Temp. dummy thread number.
++C     fNam       :: Used to build file name for standard and error output.
++C     msgBuf     :: Used to build messages for printing.
++      INTEGER myThid
++#ifdef USE_PDAF
++      CHARACTER*18 fNam
++#else
++      CHARACTER*13 fNam
++#endif /* USE_PDAF */
++      CHARACTER*(MAX_LEN_MBUF) msgBuf
++#ifdef ALLOW_USE_MPI
++C     mpiRC      :: Error code reporting variable used with MPI.
++      INTEGER mpiRC
++      INTEGER mpiIsInitialized
++      LOGICAL doReport
++#if defined(ALLOW_OASIS) || defined(COMPONENT_MODULE)
++      INTEGER mpiMyWid
++#endif
++#ifdef ALLOW_CPL_ISSM
++      COMMON /CPL_MPI_ID/
++     &     mpiMyWid, local_ocean_leader, local_ice_leader
++      integer :: n, myid, numprocs, i, mpiMyWid, numprocsworld
++      integer :: mycomponent
++      integer :: icesize, oceansize
++      integer :: local_ocean_leader, local_ice_leader
++      integer, dimension(:), allocatable :: components
++      integer, dimension(:), allocatable :: icegroup, oceangroup
++
++      integer oceancommsize,icecommsize,rankzeros(2)
++      integer my_local_rank,my_size,my_local_size
++      integer modelcomm,toissmcomm
++      integer dummy1(1),dummy2(1)
++
++#endif /* ALLOW_CPL_ISSM */
++#if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
++      INTEGER mpiMyWid, color
++#endif
++#ifdef USE_PDAF
++      INTEGER mpi_task_id
++#endif /* USE_PDAF */
++#endif /* ALLOW_USE_MPI */
++CEOP
++
++C--   Default values set to single processor case
++      numberOfProcs = 1
++      myProcId      = 0
++      pidIO         = myProcId
++      myProcessStr  = '------'
++C     Set a dummy value for myThid because we are not multi-threading yet.
++      myThid        = 1
++
++C     Annoyingly there is no universal way to have the usingMPI
++C     parameter work as one might expect. This is because, on some
++C     systems I/O does not work until MPI_Init has been called.
++C     The solution for now is that the parameter below may need to
++C     be changed manually!
++#ifdef ALLOW_USE_MPI
++      usingMPI = .TRUE.
++#else
++      usingMPI = .FALSE.
++#endif
++
++      IF ( .NOT.usingMPI ) THEN
++
++        WRITE(myProcessStr,'(I4.4)') myProcId
++        WRITE(fNam,'(A,A)') 'STDERR.', myProcessStr(1:4)
++        OPEN(errorMessageUnit,FILE=fNam,STATUS='unknown')
++c       WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:4)
++c       OPEN(standardMessageUnit,FILE=fNam,STATUS='unknown')
++
++#ifdef ALLOW_USE_MPI
++      ELSE
++C--   MPI style multiple-process initialisation
++C--   =========================================
++
++       CALL MPI_Initialized( mpiIsInitialized, mpiRC )
++
++       IF ( mpiIsInitialized .EQ. 0 ) THEN
++C--     Initialise MPI multi-process parallel environment.
++C       On some systems program forks at this point. Others have already
++C       forked within mpirun - now thats an open standard!
++        CALL MPI_INIT( mpiRC )
++        IF ( mpiRC .NE. MPI_SUCCESS ) THEN
++         eeBootError = .TRUE.
++         WRITE(msgBuf,'(A,I5)')
++     &        'EEBOOT_MINIMAL: MPI_INIT return code', mpiRC
++         CALL PRINT_ERROR( msgBuf, myThid )
++         GOTO 999
++        ENDIF
++
++C--     MPI has now been initialized ; now we need to either
++C       ask for a communicator or pretend that we have:
++C       Pretend that we have asked for a communicator
++        MPI_COMM_MODEL = MPI_COMM_WORLD
++
++       ELSE
++C--     MPI was already initialized and communicator has been passed
++C       down from upper level driver
++        MPI_COMM_MODEL = myComm
++
++       ENDIF
++
++       doReport = .FALSE.
++#ifdef USE_PDAF
++C     initialize PDAF
++C     for more output increase second parameter from 1 to 2
++       CALL INIT_PARALLEL_PDAF(0, 1, MPI_COMM_MODEL, MPI_COMM_MODEL,
++     &      mpi_task_id)
++#endif /* USE_PDAF */
++
++#ifdef ALLOW_OASIS
++C      add a 1rst preliminary call EESET_PARAMS to set useOASIS
++C      (needed to decide either to call OASIS_INIT or not)
++       CALL MPI_COMM_RANK( MPI_COMM_WORLD, mpiMyWId, mpiRC )
++       CALL EESET_PARMS ( mpiMyWId, doReport )
++       IF ( useOASIS ) CALL OASIS_INIT(MPI_COMM_MODEL)
++#endif /* ALLOW_OASIS */
++
++#ifdef COMPONENT_MODULE
++C--    Set the running directory
++       CALL MPI_COMM_RANK( MPI_COMM_WORLD, mpiMyWId, mpiRC )
++       CALL SETDIR( mpiMyWId )
++
++C- jmc: test:
++C      add a 1rst preliminary call EESET_PARAMS to set useCoupler
++C      (needed to decide either to call CPL_INIT or not)
++       CALL EESET_PARMS ( mpiMyWId, doReport )
++C- jmc: test end ; otherwise, uncomment next line:
++c      useCoupler = .TRUE.
++
++C--    Ask coupler interface for a communicator
++       IF ( useCoupler) CALL CPL_INIT
++#endif /* COMPONENT_MODULE */
++
++C--    Case with Nest(ing)
++#if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
++C--    Set the running directory
++       CALL MPI_COMM_RANK( MPI_COMM_WORLD, mpiMyWId, mpiRC )
++       CALL SETDIR( mpiMyWId )
++
++C--    Setup Nesting Execution Environment
++       CALL NEST_EEINIT( mpiMyWId, color )
++#endif /* ALLOW_NEST_PARENT | ALLOW_NEST_CHILD */
++
++#ifdef ALLOW_CPL_ISSM
++cdm    CALL SETDIR_OCEAN( )
++       call MPI_COMM_RANK(MPI_COMM_WORLD, mpiMyWid, mpiRC)
++       call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocsworld, mpiRC)
++       print*,'choubi 2'       
++
++
++c     ocean  comm size: 4 (normally should be recovered from list of
++c     arguments after mpirun:) */
++      icecommsize=2
++      oceancommsize=8
++
++c     Build array of who is rank 0 of their own group:*/
++      rankzeros(1)=0 
++      rankzeros(2)=icecommsize 
++
++c     Split world into sub-communicators for each and every model:*/
++      call MPI_COMM_SPLIT(MPI_COMM_WORLD,1, MPIMYWID, modelcomm,mpiRC)
++       print*,'choubi 3'
++
++      call MPI_INTERCOMM_CREATE(modelcomm,0,MPI_COMM_WORLD,rankzeros(1),
++     &                          0,toissmcomm,mpiRC)
++       print*,'choubi 4a'
++      
++      call MPI_COMM_RANK(modelcomm, my_local_rank, mpiRC)
++       print*,'choubi 4b'
++      call MPI_COMM_SIZE(modelcomm, my_local_size, mpiRC)
++
++      print*,'Oc My global rank',mpiMyWid,'MyLocal rank: ',my_local_rank
++      print*,'Oc My world size:',my_size,'My local size: ',my_local_size
++
++       
++cdmC     allocate array components based on the number of processors
++cdm       allocate(components(numprocsworld))
++cdm
++cdmC     assign a component to the ocean code to organize processors into a group
++cdm       mycomponent=0
++cdm
++cdmC     gather components to all processors,
++cdmC     so each knows who is ice and who is ocean
++cdm       call MPI_allgather(mycomponent,1,MPI_INTEGER,components,1,
++cdm     &      MPI_INTEGER,MPI_COMM_WORLD,mpiRC)
++cdm       print*,'choubi 3'       
++cdmC     form ice and ocean groups
++cdmC     count the processors in each groups
++cdm       icesize=0
++cdm       oceansize=0
++cdm       do i=1,numprocsworld
++cdm          if(components(i).eq.0) then
++cdm             oceansize=oceansize+1
++cdm          elseif(components(i).eq.1) then
++cdm             icesize=icesize+1
++cdm          else
++cdm             write(6,*) 'error: processor', i,
++cdm     &            'not associated with ice or ocean'
++cdm             stop
++cdm          endif
++cdm       enddo
++cdm
++cdmC     allocate group arrays
++cdm       allocate(icegroup(icesize))
++cdm       allocate(oceangroup(oceansize))
++cdmC     form the groups
++cdm       icesize=0
++cdm       oceansize=0
++cdm       do i=1,numprocsworld
++cdm          if(components(i).eq.0) then
++cdm             oceansize=oceansize+1
++cdm             oceangroup(oceansize)=i-1 ! ranks are from 0 to numprocsworld-1
++cdm          elseif(components(i).eq.1) then
++cdm             icesize=icesize+1
++cdm             icegroup(icesize)=i-1 ! ranks are from 0 to numprocsworld-1
++cdm          else
++cdm             write(6,*) 'error: processor', i,
++cdm     &            'not associated with ice or ocean'
++cdm          endif
++cdm       enddo
++cdm
++cdmC     pick the lowest rank in the group as the local group leader
++cdm       local_ocean_leader=oceangroup(1)
++cdm       local_ice_leader=icegroup(1)
++cdm       print*,'choubi 3'
++cdmC     form ocean communicator
++cdm       call MPI_comm_split(MPI_COMM_WORLD,mycomponent,mpiMyWid,
++cdm     &      MPI_COMM_MODEL,mpiRC)
++cdm       call MPI_comm_rank(MPI_COMM_MODEL,myid,mpiRC)
++cdm       call MPI_comm_size(MPI_COMM_MODEL,numprocs,mpiRC)
++       print*,'choubi 4'
++#endif /* ALLOW_CPL_ISSM */
++
++C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
++C--    Get my process number
++       CALL MPI_COMM_RANK( MPI_COMM_MODEL, mpiMyId, mpiRC )
++       IF ( mpiRC .NE. MPI_SUCCESS ) THEN
++        eeBootError = .TRUE.
++        WRITE(msgBuf,'(A,I5)')
++     &        'EEBOOT_MINIMAL: MPI_COMM_RANK return code', mpiRC
++        CALL PRINT_ERROR( msgBuf, myThid )
++        GOTO 999
++      ENDIF
++       myProcId = mpiMyId
++#ifdef USE_PDAF
++       WRITE(myProcessStr,'(I4.4,A1,I4.4)') mpi_task_id,'.',myProcId
++#else
++       WRITE(myProcessStr,'(I4.4)') myProcId
++#endif /* USE_PDAF */
++       mpiPidIo = myProcId
++       pidIO    = mpiPidIo
++       IF ( mpiPidIo .EQ. myProcId ) THEN
++#ifdef SINGLE_DISK_IO
++        IF( myProcId .EQ. 0 ) THEN
++#endif
++         WRITE(fNam,'(A,A)') 'STDERR.', myProcessStr(1:4)
++#ifdef USE_PDAF
++         WRITE(fNam,'(A,A)') 'STDERR.', myProcessStr(1:9)
++#endif
++         OPEN(errorMessageUnit,FILE=fNam,STATUS='unknown')
++         WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:4)
++#ifdef USE_PDAF
++         WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:9)
++#endif
++      print*,'choubi 5'
++         OPEN(standardMessageUnit,FILE=fNam,STATUS='unknown')
++      print*,'choubi 5a'
++#ifdef SINGLE_DISK_IO
++        ELSE
++         OPEN(errorMessageUnit,FILE='/dev/null',STATUS='unknown')
++         standardMessageUnit=errorMessageUnit
++        ENDIF
++      print*,'choubi 6'
++        IF( myProcId .EQ. 0 ) THEN
++          WRITE(msgBuf,'(2A)') '** WARNING ** EEBOOT_MINIMAL: ',
++     &     'defined SINGLE_DISK_IO will result in losing'
++          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
++     &                        SQUEEZE_RIGHT, myThid )
++          WRITE(msgBuf,'(2A)') '** WARNING ** EEBOOT_MINIMAL: ',
++     &     'any message (error/warning) from any proc <> 0'
++          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
++     &                        SQUEEZE_RIGHT, myThid )
++        ENDIF
++      print*,'choubi 7'
++#endif
++      print*,'choubi 8'
++       ENDIF
++      print*,'choubi 10'
++#if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
++       WRITE(standardMessageUnit,'(2(A,I6))')
++     &           ' mpiMyWId =', mpiMyWId, ' , color =',color
++#endif /* ALLOW_NEST_PARENT | ALLOW_NEST_CHILD */
++
++C--    Synchronise all processes
++C      Strictly this is superfluous, but by using it we can guarantee to
++C      find out about processes that did not start up.
++       CALL MPI_BARRIER( MPI_COMM_MODEL, mpiRC )
++       IF ( mpiRC .NE. MPI_SUCCESS ) THEN
++        eeBootError = .TRUE.
++        WRITE(msgBuf,'(A,I6)')
++     &        'EEBOOT_MINIMAL: MPI_BARRIER return code', mpiRC
++        CALL PRINT_ERROR( msgBuf, myThid )
++        GOTO 999
++       ENDIF
++
++C--    Get number of MPI processes
++       CALL MPI_COMM_SIZE ( MPI_COMM_MODEL, mpiNProcs, mpiRC )
++       IF ( mpiRC .NE. MPI_SUCCESS ) THEN
++        eeBootError = .TRUE.
++        WRITE(msgBuf,'(A,I6)')
++     &        'EEBOOT_MINIMAL: MPI_COMM_SIZE return code', mpiRC
++        CALL PRINT_ERROR( msgBuf, myThid )
++        GOTO 999
++       ENDIF
++       numberOfProcs = mpiNProcs
++
++#endif /* ALLOW_USE_MPI */
++      ENDIF
++      print*,'choubi 11'
++C--    Under MPI only allow same number of processes as proc grid size.
++C      Strictly we are allowed more procs but knowing there
++C      is an exact match makes things easier.
++       IF ( numberOfProcs .NE. nPx*nPy ) THEN
++        eeBootError = .TRUE.
++        WRITE(msgBuf,'(2(A,I6))')
++     &  'EEBOOT_MINIMAL: No. of procs=', numberOfProcs,
++     &  ' not equal to nPx*nPy=', nPx*nPy
++        CALL PRINT_ERROR( msgBuf, myThid )
++        GOTO 999
++       ENDIF
++
++#ifdef USE_LIBHPM
++       CALL F_HPMINIT(myProcId, "mitgcmuv")
++#endif
++      print*,'choubi 12'
++ 999  CONTINUE
++      RETURN
++      END
Index: /issm/oecreview/Archive/21724-22754/ISSM-22377-22378.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22377-22378.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22377-22378.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22377)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22378)
+@@ -849,7 +849,8 @@
+ 
+ 	eval(['!cp ' md.cluster.executionpath '/' md.miscellaneous.name '/* run/ ']);
+ 	cd run
+-	eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' : -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
++	%eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' ']);
++	eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' : -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
+ 
+ end
+ % }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22378-22379.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22378-22379.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22378-22379.diff	(revision 22755)
@@ -0,0 +1,314 @@
+Index: ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryx.cpp	(revision 22378)
++++ ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryx.cpp	(revision 22379)
+@@ -19,11 +19,11 @@
+ 
+ 	/*initialize thread parameters: */
+ 	DistanceToMaskBoundaryxThreadStruct gate;
+-	gate.distance    = distance;
+-	gate.x         = x;
+-	gate.y         = y;
+-	gate.mask         = mask;
+-	gate.nods      = nods;
++	gate.distance = distance;
++	gate.x        = x;
++	gate.y        = y;
++	gate.mask     = mask;
++	gate.nods     = nods;
+ 
+ 	/*launch the thread manager with DistanceToMaskBoundaryxt as a core: */
+ 	LaunchThread(DistanceToMaskBoundaryxt,(void*)&gate,_NUMTHREADS_);
+Index: ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryxt.cpp	(revision 22378)
++++ ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryxt.cpp	(revision 22379)
+@@ -36,8 +36,7 @@
+ 	/*Loop through vertices: */
+ 	for(i=i0;i<i1;i++){
+ 
+-		IssmDouble d0=pow(10.,10);
+-
++		IssmDouble d0=1.e+10;
+ 		IssmDouble xi,yi;
+ 		
+ 		//recover vertex position: 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22378)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22379)
+@@ -991,6 +991,77 @@
+ 	}
+ }
+ /*}}}*/
++void FemModel::DistanceToFieldValue(int fieldenum,IssmDouble fieldvalue,int distanceenum){/*{{{*/
++
++	/*recover my_rank:*/
++	int my_rank   = IssmComm::GetRank();
++	int num_procs = IssmComm::GetSize();
++
++	/*Get domain type (2d or 3d)*/
++	int domaintype;
++	this->parameters->FindParam(&domaintype,DomainTypeEnum);
++
++	/*1: go throug all elements of this partition and figure out how many
++	 * segments we have (corresopnding to field = value)*/
++	DataSet* segments=new DataSet();
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		if(!element->IsOnBase()) continue;
++		Element* basalelement = element->SpawnBasalElement();
++		basalelement->WriteFieldIsovalueSegment(segments,fieldenum,fieldvalue);
++		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	}
++
++	/*2: now get the segments from all partitions*/
++	int  segcount=segments->Size();
++	int* allsegcount=xNew<int>(num_procs);
++	ISSM_MPI_Gather(&segcount,1,ISSM_MPI_INT,allsegcount,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(allsegcount,num_procs,ISSM_MPI_INT,0,IssmComm::GetComm());
++
++	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
++	int numseg_offset=0;
++	int numseg=0;
++	for(int i=0;i<my_rank;  i++) numseg_offset+=allsegcount[i];
++	for(int i=0;i<num_procs;i++) numseg+=allsegcount[i];
++	IssmDouble* segmentlist    = xNewZeroInit<IssmDouble>(4*numseg);
++	IssmDouble* allsegmentlist = xNewZeroInit<IssmDouble>(4*numseg);
++	for(int i=0;i<segments->Size();i++){
++		Contour<IssmDouble>* segment=(Contour<IssmDouble>*)segments->GetObjectByOffset(i);
++		_assert_(segment->nods == 2);
++		segmentlist[(numseg_offset+i)*4 + 0] = segment->x[0];
++		segmentlist[(numseg_offset+i)*4 + 1] = segment->y[0];
++		segmentlist[(numseg_offset+i)*4 + 2] = segment->x[1];
++		segmentlist[(numseg_offset+i)*4 + 3] = segment->y[1];
++	}
++	ISSM_MPI_Allreduce((void*)segmentlist,(void*)allsegmentlist,4*numseg,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++	delete segments;
++	xDelete<IssmDouble>(segmentlist);
++	xDelete<int>(allsegcount);
++
++	/*3: Add distance input to all elements*/
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		if(!element->IsOnBase()) continue;
++		element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
++	}
++
++
++	/*Extrude if necessary*/
++	int elementtype;
++	this->parameters->FindParam(&elementtype,MeshElementtypeEnum);
++	if(elementtype==PentaEnum){
++		InputExtrudex(this,distanceenum,-1);
++	}
++	else if(elementtype==TriaEnum){
++		/*no need to extrude*/
++	}
++	else{
++		_error_("not implemented yet");
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(allsegmentlist);
++}/*}}}*/
+ void FemModel::Divergencex(IssmDouble* pdiv){/*{{{*/
+ 
+ 	IssmDouble local_divergence=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22378)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22379)
+@@ -199,6 +199,7 @@
+ 		virtual void       Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
+ 		virtual void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
++		virtual void       CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum){_error_("not implemented yet");};
+ 		virtual void       ElementResponse(IssmDouble* presponse,int response_enum)=0;
+ 		virtual void       ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
+ 		virtual int        FiniteElement(void)=0;
+@@ -302,6 +303,7 @@
+ 		virtual void       VerticalSegmentIndices(int** pindices,int* pnumseg)=0;
+ 		virtual void       VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0;
+ 		virtual void       ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
++		virtual void       WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");};
+ 		virtual void       WriteLevelsetSegment(DataSet* segments){_error_("not implemented yet");};
+ 		virtual void       ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum)=0;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22378)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22379)
+@@ -524,7 +524,7 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-void			Tria::ComputeEsaStrainAndVorticity(){ /*{{{*/
++void			    Tria::ComputeEsaStrainAndVorticity(){ /*{{{*/
+ 
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  epsilon[4]; /* epsilon=[exx,eyy,exy+ (shear),exy- (rotation)];*/
+@@ -761,6 +761,69 @@
+ 	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],ADD_VAL);
+ 
+ }/*}}}*/
++void       Tria::CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum){/*{{{*/
++
++	/*Intermediaries*/
++	IssmDouble d,xn,yn;
++
++	/*Get current field and vertex coordinates*/
++	IssmDouble ls[NUMVERTICES];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	GetInputListOnVertices(&ls[0],distanceenum);
++
++	/*Get distance from list of segments and reset ls*/
++	for(int j=0;j<NUMVERTICES;j++){
++		IssmDouble dmin = 1.e+50;
++		for(int i=0;i<numsegments;i++){
++			IssmDouble x = xyz_list[j][0];
++			IssmDouble y = xyz_list[j][1];
++			IssmDouble l2 = (segments[4*i+2]-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (segments[4*i+3]-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]);
++
++			/*Segment has a length of 0*/
++			if(l2==0.){
++				d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
++				if(d<dmin) dmin = d;
++				continue;
++			}
++
++			/*Consider the line extending the segment, parameterized as v + t (w - v).
++			 *We find projection of point p onto the line.
++			 *It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
++			IssmDouble t = ((x-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (y-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]))/l2;
++			if(t < 0.0){
++				// Beyond the 'v' end of the segment
++				d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
++			}
++			else if (t > 1.0){
++				// Beyond the 'w' end of the segment
++				d = (x-segments[4*i+2])*(x-segments[4*i+2])+(y-segments[4*i+3])*(y-segments[4*i+3]);
++			}
++			else{
++				// Projection falls on the segment
++				xn = segments[4*i+0] + t * (segments[4*i+2] - segments[4*i+0]);
++				yn = segments[4*i+1] + t * (segments[4*i+3] - segments[4*i+1]);
++				d = (x-xn)*(x-xn)+(y-yn)*(y-yn);
++			}
++
++			if(d<dmin) dmin = d;
++		}
++
++		/*Update signed distance*/
++		dmin = sqrt(dmin);
++		if(dmin>10000) dmin=10000;
++		if(ls[j]>0){
++			ls[j] = dmin;
++		}
++		else{
++			ls[j] = - dmin;
++		}
++	}
++
++	/*Update Levelset*/
++	this->inputs->AddInput(new TriaInput(distanceenum,&ls[0],P1Enum));
++}
++/*}}}*/
+ int        Tria::EdgeOnBaseIndex(void){/*{{{*/
+ 
+ 	IssmDouble values[NUMVERTICES];
+@@ -1401,7 +1464,7 @@
+ 	*pxyz_front=xyz_front;
+ 
+ }/*}}}*/
+-void			Tria::GetLevelsetIntersection(int** pindices, int* pnumiceverts, IssmDouble* fraction, int levelset_enum, IssmDouble level){/*{{{*/
++void       Tria::GetLevelsetIntersection(int** pindices, int* pnumiceverts, IssmDouble* fraction, int levelset_enum, IssmDouble level){/*{{{*/
+ 	
+ 	/* GetLevelsetIntersection computes: 
+ 	 * 1. indices of element, sorted in [iceverts, noiceverts] in counterclockwise fashion,
+@@ -2820,7 +2883,6 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+-	InputDuplicate(MaskIceLevelsetEnum,PressureEnum);
+ 
+ 	/*Get distance from list of segments and reset ls*/
+ 	for(int j=0;j<NUMVERTICES;j++){
+@@ -3514,6 +3576,32 @@
+ 	return this->vertices[vertexindex]->Connectivity();
+ }
+ /*}}}*/
++void       Tria::WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){/*{{{*/
++
++	_assert_(fieldvalue==0.); //field value != 0 not implemented yet
++
++	/*1. check that we do cross fieldvalue in this element*/
++	Input* input = inputs->GetInput(fieldenum);
++	if(!input) _error_("Cannot calculate distance to "<<EnumToStringx(fieldenum)<<", input not found");
++	IssmDouble minvalue = input->Min();
++	IssmDouble maxvalue = input->Max();
++	if(minvalue>fieldvalue || maxvalue<fieldvalue) return;
++
++
++	/*2. Write segments*/
++	IssmDouble* xyz_list_zero = NULL;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	::GetVerticesCoordinates(&xyz_list[0][0],this->vertices,NUMVERTICES);
++	this->ZeroLevelsetCoordinates(&xyz_list_zero,&xyz_list[0][0],fieldenum);
++	if(xyz_list_zero){
++		IssmDouble x[2],y[2];
++		x[0] = xyz_list_zero[0*3 + 0]; x[1] = xyz_list_zero[1*3 + 0];
++		y[0] = xyz_list_zero[0*3 + 1]; y[1] = xyz_list_zero[1*3 + 1];
++		segments->AddObject(new Contour<IssmDouble>(segments->Size()+1,2,&x[0],&y[0],false));
++	}
++	xDelete<IssmDouble>(xyz_list_zero);
++}
++/*}}}*/
+ void       Tria::WriteLevelsetSegment(DataSet* segments){/*{{{*/
+ 
+ 	if(!this->IsZeroLevelset(MaskIceLevelsetEnum)) return;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22378)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22379)
+@@ -64,6 +64,7 @@
+ 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
+ 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+ 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
++		void        CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum);
+ 		int         EdgeOnBaseIndex();
+ 		void        EdgeOnBaseIndices(int* pindex1,int* pindex);
+ 		int         EdgeOnSurfaceIndex();
+@@ -135,6 +136,7 @@
+ 		int         VertexConnectivity(int vertexindex);
+ 		void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
+ 		void        VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");};
++		void			WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue);
+ 		void			WriteLevelsetSegment(DataSet* segments);
+ 		void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22378)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22379)
+@@ -2193,7 +2193,6 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+-	InputDuplicate(MaskIceLevelsetEnum,PressureEnum);
+ 
+ 	/*Get distance from list of segments and reset ls*/
+ 	for(int j=0;j<NUMVERTICES;j++){
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22378)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22379)
+@@ -106,6 +106,7 @@
+ 		void MinVxx(IssmDouble* presponse);
+ 		void MinVyx(IssmDouble* presponse);
+ 		void MinVzx(IssmDouble* presponse);
++		void DistanceToFieldValue(int fieldenum,IssmDouble fieldvalue,int distanceenum);
+ 		void ResetLevelset();
+ 		void StrainRateparallelx();
+ 		void StrainRateperpendicularx();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22379-22380.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22379-22380.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22379-22380.diff	(revision 22755)
@@ -0,0 +1,170 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22379)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 22380)
+@@ -29,7 +29,7 @@
+ 			/*Recreate geometry if needed*/
+ 			_printf_("WARNING: mesh present but no geometry found. Reconstructing...\n");
+ 			BuildGeometryFromMesh(bamgopts);
+-			Gh.PostRead();
++			Gh.PostRead(true);
+ 		}
+ 
+ 		/*Set integer coordinates*/
+@@ -1214,18 +1214,18 @@
+ 
+ 		/*Construction of the edges*/
+ 
+-		//initialize st and edge4
++		/*initialize st and edge4*/
+ 		SetOfEdges4* edge4= new SetOfEdges4(nbt*3,nbv);
+ 		long*        st   = new long[nbt*3];
+ 
+-		//initialize st as -1 (chaining algorithm)
++		/*initialize st as -1 (chaining algorithm)*/
+ 		for (i=0;i<nbt*3;i++) st[i]=-1;
+ 
+-		//build edge4 (chain)
++		/*build edge4 (chain)*/
+ 		for (i=0;i<nbe;i++){
+ 			edge4->SortAndAdd(GetId(edges[i][0]),GetId(edges[i][1]));
+ 		}
+-		//check that there is no double edge
++		/*check that there is no double edge*/
+ 		if (nbe !=  edge4->nb()){ 
+ 			delete [] st;
+ 			_error_("Some Double edge in the mesh, the number is " << nbe << ", nbe4=" << edge4->nb()); 
+@@ -1233,7 +1233,7 @@
+ 		//keep nbe in nbeold
+ 		long nbeold = nbe;
+ 
+-		//Go through the triangles and ass the edges in edge4 if they are not there yet
++		//Go through the triangles and add the edges in edge4 if they are not there yet
+ 		for (i=0;i<nbt;i++){
+ 			//3 edges per triangle
+ 			for  (j=0;j<3;j++) {
+@@ -1250,18 +1250,18 @@
+ 					if (triangles[i].TriangleAdj(j) || triangles[st[k]/3].TriangleAdj((int) (st[k]%3))){
+ 						_error_("problem in Geometry reconstruction: an edge on boundary is duplicated (double element?)");
+ 					}
+-					//OK, the element is not on boundary, is belongs to 2 triangles -> build Adjacent triangles list
++					/*OK, the element is not on boundary, is belongs to 2 triangles -> build Adjacent triangles list*/
+ 					triangles[i].SetAdj2(j,triangles + st[k] / 3,(int) (st[k]%3));
+ 					if (invisible)  triangles[i].SetHidden(j);
+-					// if k < nbe mark the edge as on Boundary (Locked)
++					/* if k < nbe mark the edge as on Boundary (Locked)*/
+ 					if (k<nbe) {
+ 						triangles[i].SetLocked(j);
+ 					}
+-					//set st[k] as negative so that the edge should not be called again
++					/*set st[k] as negative so that the edge should not be called again*/
+ 					st[k]=-2-st[k]; 
+ 				}
+-				//else (see 3 lines above), the edge has been called more than twice: return error
+ 				else {
++					/*else (see 3 lines above), the edge has been called more than twice: return error*/
+ 					_printf_("The edge (" << GetId(triangles[i][VerticesOfTriangularEdge[j][0]]) << "," << GetId(triangles[i][VerticesOfTriangularEdge[j][1]]) << ") belongs to more than 2 triangles (" << k << ")\n");
+ 					_printf_("Edge " << j << " of triangle " << i << "\n");
+ 					_printf_("Edge " << (-st[k]+2)%3 << " of triangle " << (-st[k]+2)/3 << "\n");
+@@ -1285,7 +1285,7 @@
+ 			_printf_("            - Euler number 1 - nb of holes = " << nbt-nbedges+nbv << "\n"); 
+ 		}
+ 
+-		// check consistency of edge[].adj and geometrical required  vertices
++		/*check consistency of edge[].adj and geometrical required  vertices*/
+ 		k=0; kk=0;
+ 		for (i=0;i<nbedges;i++){
+ 			//internal edge
+@@ -1303,7 +1303,6 @@
+ 		}
+ 
+ 		/*Constructions of edges*/
+-
+ 		k += kk;
+ 		kk=0;
+ 		if (k) {
+Index: ../trunk-jpl/src/c/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.h	(revision 22379)
++++ ../trunk-jpl/src/c/bamg/Geometry.h	(revision 22380)
+@@ -51,7 +51,7 @@
+ 			double           MaximalHmax();
+ 			void             ReadGeometry(BamgGeom *bamggeom, BamgOpts*bamgopts);
+ 			void             Init(void);
+-			void             PostRead();
++			void             PostRead(bool checkcurve=false);
+ 			long             GetId(const GeomVertex &t) const;
+ 			long             GetId(const GeomVertex *t) const;
+ 			long             GetId(const GeomEdge &t) const;
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 22379)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 22380)
+@@ -437,7 +437,7 @@
+ 	long Geometry::GetId(const Curve * c) const  {/*{{{*/
+ 		return c - curves;
+ 	}/*}}}*/
+-	void Geometry::PostRead(){/*{{{*/
++	void Geometry::PostRead(bool checkcurve){/*{{{*/
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/AfterRead)*/
+ 
+ 		long          i          ,j,k;
+@@ -605,19 +605,46 @@
+ 				}
+ 			}
+ 
+-			//all vertices provided in geometry are corners (ord = number of edges holding i)
+-			vertices[i].SetCorner() ; 
+-			if(ord==2){ 
+-				long  n1 = head_v[i];
+-				long  n2 = next_p[n1];
+-				long  i1 = n1/2, i2 = n2/2; // edge number
+-				long  j1 = n1%2, j2 = n2%2; // vertex in the edge
+-				/* if the edge type/referencenumber a changing then is SetRequired();*/
+-				if (edges[i1].type != edges[i2].type || edges[i1].Required()){
+-					vertices[i].SetRequired();
++			/*Do we want to check for curve? Default is no, but if we are reconstructing, it's better to turn it on with a small threshold*/
++			if(checkcurve){
++				/*angular test on current vertex to guess whether it is a corner (ord = number of edges holding i) */
++				if(ord==2){
++					IssmDouble MaxCornerAngle = 1*Pi/180; /*default is 1 degree*/
++					long  n1 = head_v[i];
++					long  n2 = next_p[n1];
++					long  i1 = n1/2, i2 = n2/2; // edge number
++					long  j1 = n1%2, j2 = n2%2; // vertex in the edge
++					float angle1=  j1 ? OppositeAngle(eangle[i1]) : eangle[i1];
++					float angle2= !j2 ? OppositeAngle(eangle[i2]) : eangle[i2];
++					float da12 = Abs(angle2-angle1);
++					if (( da12 >= MaxCornerAngle ) && (da12 <= 2*Pi -MaxCornerAngle)) {
++						vertices[i].SetCorner() ;
++					}
++					/* if the edge type/referencenumber a changing then is SetRequired();*/
++					if(edges[i1].type != edges[i2].type || edges[i1].Required()){
++						vertices[i].SetRequired();
++					}
++					if(edges[i1].ReferenceNumber != edges[i2].ReferenceNumber) {
++						vertices[i].SetRequired();
++					}
+ 				}
+-				if (edges[i1].ReferenceNumber != edges[i2].ReferenceNumber) {
+-					vertices[i].SetRequired();
++				if(ord!=2) vertices[i].SetCorner();
++			}
++			else{
++				/*all vertices provided in geometry are corners (ord = number of edges holding i)*/
++				vertices[i].SetCorner() ; 
++				if(ord==2){ 
++					long  n1 = head_v[i];
++					long  n2 = next_p[n1];
++					long  i1 = n1/2, i2 = n2/2; // edge number
++					long  j1 = n1%2, j2 = n2%2; // vertex in the edge
++					/* if the edge type/referencenumber a changing then is SetRequired();*/
++					if (edges[i1].type != edges[i2].type || edges[i1].Required()){
++						vertices[i].SetRequired();
++					}
++					if (edges[i1].ReferenceNumber != edges[i2].ReferenceNumber) {
++						vertices[i].SetRequired();
++					}
+ 				}
+ 			}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22380-22381.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22380-22381.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22380-22381.diff	(revision 22755)
@@ -0,0 +1,195 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22380)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22381)
+@@ -66,19 +66,11 @@
+ #endif
+ #ifdef ALLOW_CPL_ISSM
+       COMMON /CPL_MPI_ID/
+-     &     mpiMyWid, local_ocean_leader, local_ice_leader
+-      integer :: n, myid, numprocs, i, mpiMyWid, numprocsworld
+-      integer :: mycomponent
+-      integer :: icesize, oceansize
+-      integer :: local_ocean_leader, local_ice_leader
+-      integer, dimension(:), allocatable :: components
+-      integer, dimension(:), allocatable :: icegroup, oceangroup
+-
+-      integer oceancommsize,icecommsize,rankzeros(2)
+-      integer my_local_rank,my_size,my_local_size
+-      integer modelcomm,toissmcomm
+-      integer dummy1(1),dummy2(1)
+-
++     &     mpiMyWid
++      integer :: mpiMyWid, numprocsworld
++      integer icecommsize,rankzeros(2)
++      integer my_local_rank,my_local_size
++      integer toissmcomm
+ #endif /* ALLOW_CPL_ISSM */
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+       INTEGER mpiMyWid, color
+@@ -191,16 +183,12 @@
+ #endif /* ALLOW_NEST_PARENT | ALLOW_NEST_CHILD */
+ 
+ #ifdef ALLOW_CPL_ISSM
+-cdm    CALL SETDIR_OCEAN( )
+        call MPI_COMM_RANK(MPI_COMM_WORLD, mpiMyWid, mpiRC)
+        call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocsworld, mpiRC)
+-       print*,'choubi 2'       
+ 
+-
+ c     ocean  comm size: 4 (normally should be recovered from list of
+ c     arguments after mpirun:) */
+       icecommsize=2
+-      oceancommsize=8
+ 
+ c     Build array of who is rank 0 of their own group:*/
+       rankzeros(1)=0 
+@@ -207,80 +195,26 @@
+       rankzeros(2)=icecommsize 
+ 
+ c     Split world into sub-communicators for each and every model:*/
+-      call MPI_COMM_SPLIT(MPI_COMM_WORLD,1, MPIMYWID, modelcomm,mpiRC)
+-       print*,'choubi 3'
++      call MPI_COMM_SPLIT(MPI_COMM_WORLD,1,MPIMYWID,
++     &                    MPI_COMM_MODEL,mpiRC)
+ 
+-      call MPI_INTERCOMM_CREATE(modelcomm,0,MPI_COMM_WORLD,rankzeros(1),
+-     &                          0,toissmcomm,mpiRC)
+-       print*,'choubi 4a'
++      print*,'Oc My global rank',mpiMyWid
++      print*,'Oc My world size:',numprocsworld
++
++cdm      call MPI_INTERCOMM_CREATE(MPI_COMM_MODEL,0,MPI_COMM_WORLD,
++cdm     &                          rankzeros(1),0,toissmcomm,mpiRC)
+       
+-      call MPI_COMM_RANK(modelcomm, my_local_rank, mpiRC)
+-       print*,'choubi 4b'
+-      call MPI_COMM_SIZE(modelcomm, my_local_size, mpiRC)
++      call MPI_COMM_RANK(MPI_COMM_MODEL, my_local_rank, mpiRC)
++      call MPI_COMM_SIZE(MPI_COMM_MODEL, my_local_size, mpiRC)
+ 
+       print*,'Oc My global rank',mpiMyWid,'MyLocal rank: ',my_local_rank
+-      print*,'Oc My world size:',my_size,'My local size: ',my_local_size
++      print*,'Oc My world size:',numprocsworld,'My local size: ',
++     & my_local_size
+ 
+-       
+-cdmC     allocate array components based on the number of processors
+-cdm       allocate(components(numprocsworld))
+-cdm
+-cdmC     assign a component to the ocean code to organize processors into a group
+-cdm       mycomponent=0
+-cdm
+-cdmC     gather components to all processors,
+-cdmC     so each knows who is ice and who is ocean
+-cdm       call MPI_allgather(mycomponent,1,MPI_INTEGER,components,1,
+-cdm     &      MPI_INTEGER,MPI_COMM_WORLD,mpiRC)
+-cdm       print*,'choubi 3'       
+-cdmC     form ice and ocean groups
+-cdmC     count the processors in each groups
+-cdm       icesize=0
+-cdm       oceansize=0
+-cdm       do i=1,numprocsworld
+-cdm          if(components(i).eq.0) then
+-cdm             oceansize=oceansize+1
+-cdm          elseif(components(i).eq.1) then
+-cdm             icesize=icesize+1
+-cdm          else
+-cdm             write(6,*) 'error: processor', i,
+-cdm     &            'not associated with ice or ocean'
+-cdm             stop
+-cdm          endif
+-cdm       enddo
+-cdm
+-cdmC     allocate group arrays
+-cdm       allocate(icegroup(icesize))
+-cdm       allocate(oceangroup(oceansize))
+-cdmC     form the groups
+-cdm       icesize=0
+-cdm       oceansize=0
+-cdm       do i=1,numprocsworld
+-cdm          if(components(i).eq.0) then
+-cdm             oceansize=oceansize+1
+-cdm             oceangroup(oceansize)=i-1 ! ranks are from 0 to numprocsworld-1
+-cdm          elseif(components(i).eq.1) then
+-cdm             icesize=icesize+1
+-cdm             icegroup(icesize)=i-1 ! ranks are from 0 to numprocsworld-1
+-cdm          else
+-cdm             write(6,*) 'error: processor', i,
+-cdm     &            'not associated with ice or ocean'
+-cdm          endif
+-cdm       enddo
+-cdm
+-cdmC     pick the lowest rank in the group as the local group leader
+-cdm       local_ocean_leader=oceangroup(1)
+-cdm       local_ice_leader=icegroup(1)
+-cdm       print*,'choubi 3'
+-cdmC     form ocean communicator
+-cdm       call MPI_comm_split(MPI_COMM_WORLD,mycomponent,mpiMyWid,
+-cdm     &      MPI_COMM_MODEL,mpiRC)
+-cdm       call MPI_comm_rank(MPI_COMM_MODEL,myid,mpiRC)
+-cdm       call MPI_comm_size(MPI_COMM_MODEL,numprocs,mpiRC)
+-       print*,'choubi 4'
+ #endif /* ALLOW_CPL_ISSM */
+ 
+ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
++
+ C--    Get my process number
+        CALL MPI_COMM_RANK( MPI_COMM_MODEL, mpiMyId, mpiRC )
+        IF ( mpiRC .NE. MPI_SUCCESS ) THEN
+@@ -289,7 +223,7 @@
+      &        'EEBOOT_MINIMAL: MPI_COMM_RANK return code', mpiRC
+         CALL PRINT_ERROR( msgBuf, myThid )
+         GOTO 999
+-      ENDIF
++       ENDIF
+        myProcId = mpiMyId
+ #ifdef USE_PDAF
+        WRITE(myProcessStr,'(I4.4,A1,I4.4)') mpi_task_id,'.',myProcId
+@@ -311,15 +245,12 @@
+ #ifdef USE_PDAF
+          WRITE(fNam,'(A,A)') 'STDOUT.', myProcessStr(1:9)
+ #endif
+-      print*,'choubi 5'
+          OPEN(standardMessageUnit,FILE=fNam,STATUS='unknown')
+-      print*,'choubi 5a'
+ #ifdef SINGLE_DISK_IO
+         ELSE
+          OPEN(errorMessageUnit,FILE='/dev/null',STATUS='unknown')
+          standardMessageUnit=errorMessageUnit
+         ENDIF
+-      print*,'choubi 6'
+         IF( myProcId .EQ. 0 ) THEN
+           WRITE(msgBuf,'(2A)') '** WARNING ** EEBOOT_MINIMAL: ',
+      &     'defined SINGLE_DISK_IO will result in losing'
+@@ -330,11 +261,9 @@
+           CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
+      &                        SQUEEZE_RIGHT, myThid )
+         ENDIF
+-      print*,'choubi 7'
+ #endif
+-      print*,'choubi 8'
+        ENDIF
+-      print*,'choubi 10'
++
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+        WRITE(standardMessageUnit,'(2(A,I6))')
+      &           ' mpiMyWId =', mpiMyWId, ' , color =',color
+@@ -365,7 +294,7 @@
+ 
+ #endif /* ALLOW_USE_MPI */
+       ENDIF
+-      print*,'choubi 11'
++
+ C--    Under MPI only allow same number of processes as proc grid size.
+ C      Strictly we are allowed more procs but knowing there
+ C      is an exact match makes things easier.
+@@ -381,7 +310,7 @@
+ #ifdef USE_LIBHPM
+        CALL F_HPMINIT(myProcId, "mitgcmuv")
+ #endif
+-      print*,'choubi 12'
++
+  999  CONTINUE
+       RETURN
+       END
Index: /issm/oecreview/Archive/21724-22754/ISSM-22381-22382.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22381-22382.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22381-22382.diff	(revision 22755)
@@ -0,0 +1,548 @@
+Index: ../trunk-jpl/src/c/cores/love_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/love_core.cpp	(revision 22381)
++++ ../trunk-jpl/src/c/cores/love_core.cpp	(revision 22382)
+@@ -21,6 +21,7 @@
+ 	int         sh_nmin,sh_nmax;
+ 	IssmDouble  g0,r0,mu0;
+ 	bool        allow_layer_deletion;
++	bool        love_kernels;
+ 	int         forcing_type;
+ 	bool        verbosemod = (int)VerboseModule();
+ 
+@@ -41,6 +42,7 @@
+ 	femmodel->parameters->FindParam(&r0,LoveR0Enum);
+ 	femmodel->parameters->FindParam(&mu0,LoveMu0Enum);
+ 	femmodel->parameters->FindParam(&allow_layer_deletion,LoveAllowLayerDeletionEnum);
++	femmodel->parameters->FindParam(&love_kernels,LoveKernelsEnum);
+ 	femmodel->parameters->FindParam(&forcing_type,LoveForcingTypeEnum);
+ 	
+ 	/*recover materials parameters: there is only one Matlitho, chase it down the hard way:*/
+@@ -58,9 +60,13 @@
+ 	IssmDouble*  LoveKi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+ 	IssmDouble*  LoveHi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+ 	IssmDouble*  LoveLi = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1));
+-	
++
++	/*Initialize love kernels (real and imaginary parts): */
++	IssmDouble*  LoveKernelsReal = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1)*(matlitho->numlayers+1)*6);
++	IssmDouble*  LoveKernelsImag = xNewZeroInit<IssmDouble>(nfreq*(sh_nmax+1)*(matlitho->numlayers+1)*6);
++
+ 	/*call the main module: */
+-	FourierLoveCorex(LoveKr,LoveKi,LoveHr,LoveHi,LoveLr,LoveLi,  //output
++	FourierLoveCorex(LoveKr,LoveKi,LoveHr,LoveHi,LoveLr,LoveLi,LoveKernelsReal,LoveKernelsImag,  //output
+ 			nfreq,frequencies,sh_nmax,sh_nmin,g0,r0,mu0,allow_layer_deletion,forcing_type,verbosemod, //parameter inputs
+ 			matlitho->numlayers, matlitho->radius, matlitho->viscosity, matlitho->lame_lambda, matlitho->lame_mu, 
+ 			matlitho->burgers_viscosity, matlitho->burgers_mu, matlitho->density, matlitho->isburgers, matlitho->issolid //matlitho inputs
+@@ -73,6 +79,11 @@
+ 	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKiEnum,LoveKi,sh_nmax+1,nfreq,0,0));
+ 	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveHiEnum,LoveHi,sh_nmax+1,nfreq,0,0));
+ 	femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveLiEnum,LoveLi,sh_nmax+1,nfreq,0,0));
++	/*Only when love_kernels is set unity*/
++	if (love_kernels==1) {
++		femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKernelsRealEnum,LoveKernelsReal,(sh_nmax+1)*(matlitho->numlayers+1)*6,nfreq,0,0));
++		femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,LoveKernelsImagEnum,LoveKernelsImag,(sh_nmax+1)*(matlitho->numlayers+1)*6,nfreq,0,0));
++	}
+ 
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(frequencies);
+@@ -82,4 +93,6 @@
+ 	xDelete<IssmDouble>(LoveKi);
+ 	xDelete<IssmDouble>(LoveHi);
+ 	xDelete<IssmDouble>(LoveLi);
++	xDelete<IssmDouble>(LoveKernelsReal);
++	xDelete<IssmDouble>(LoveKernelsImag);
+ }
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22381)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22382)
+@@ -865,6 +865,9 @@
+ 	LoveHiEnum,
+ 	LoveKiEnum,
+ 	LoveLiEnum,
++	LoveKernelsEnum,
++	LoveKernelsRealEnum,
++	LoveKernelsImagEnum,
+ 
+ 	/*}}}*/
+ 	/*Elastic adjustment (ESA){{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22381)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22382)
+@@ -843,6 +843,9 @@
+ 		case LoveHiEnum : return "LoveHi";
+ 		case LoveKiEnum : return "LoveKi";
+ 		case LoveLiEnum : return "LoveLi";
++		case LoveKernelsEnum : return "LoveKernels";
++		case LoveKernelsRealEnum : return "LoveKernelsReal";
++		case LoveKernelsImagEnum : return "LoveKernelsImag";
+ 		case EsaUmotionEnum : return "EsaUmotion";
+ 		case EsaNmotionEnum : return "EsaNmotion";
+ 		case EsaEmotionEnum : return "EsaEmotion";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22381)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22382)
+@@ -861,6 +861,9 @@
+ 	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
+ 	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
+ 	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
++	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
++	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
++	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+ 	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+@@ -871,13 +874,13 @@
+ 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+ 	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+ 	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+-	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
+-	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+-	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
++	      if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
++	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
++	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
++	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+ 	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+@@ -994,13 +997,13 @@
+ 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+-	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+-	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
++	      if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
++	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
++	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
++	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22381)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/love_numbers.f90	(revision 22382)
+@@ -1,6 +1,9 @@
+- subroutine lnb_setup(  ksr, ksi, hsr, hsi, lsr, lsi,  dnfreq,  frequencies,  ddegmax, ddegmin, &
+-          dgo0,  dr0,  dmu0, dallow_layer_del,  source_type, ddisplay, dnlayer,  dradius,    &
++ 
++ !subroutine lnb_setup {{{
++ subroutine lnb_setup(  ksr, ksi, hsr, hsi, lsr, lsi, lksr, lksi, dnfreq,  frequencies,  ddegmax, ddegmin, &
++          dgo0,  dr0,  dmu0, dallow_layer_del, source_type, ddisplay, dnlayer,  dradius,    &
+           dvic,  dlac,  dmuc, dvic2,  dmuc2,  droc, dburgers,  dsoliddim)
++
+  use lnb_param
+  use util
+  implicit none
+@@ -13,6 +16,9 @@
+  double complex, dimension(dnfreq,ddegmax+1) :: hs,ls,ks
+  double precision, dimension(dnfreq) :: frequencies
+ 
++ double complex :: lks(dnfreq,(ddegmax+1)*(dnlayer+1)*6) 
++ double precision, dimension(dnfreq,(ddegmax+1)*(dnlayer+1)*6) :: lksr, lksi 
++ 
+  double precision   :: dmu0,dgo0,dr0
+  logical :: dallow_layer_del, ddisplay
+ 
+@@ -58,7 +64,7 @@
+ 	ks=hs
+ 	ls=hs
+  
+- call love_numbers(frequencies,source_type,hs,ls,ks)
++ call love_numbers(frequencies,source_type,hs,ls,ks,lks)
+ 
+  hsr=dble(hs)
+  hsi=dimag(hs)
+@@ -66,12 +72,15 @@
+  ksi=dimag(ks)
+  lsr=dble(ls)
+  lsi=dimag(ls)
++ !!! love kernels 
++ lksr=dble(lks)
++ lksi=dimag(lks)
+ 
+ end subroutine
++! }}}
+ 
+-!==================== 
+- subroutine love_numbers(frequencies,source_type,hs,ls,ks)
+-!====================
++!subroutine love_numbers {{{
++ subroutine love_numbers(frequencies,source_type,hs,ls,ks,lks)
+ 
+  use model
+  use lovenb_sub
+@@ -88,8 +97,10 @@
+  logical :: logi
+  integer :: i,j,k,n, fr,m,l, source_type
+  double complex :: hs(nfreq,degmax+1), ls(nfreq,degmax+1), ks(nfreq,degmax+1)
++ 
++ double complex, dimension((nlayer+1)*6,1) :: lovekernels
++ double complex :: lks(nfreq,(degmax+1)*(nlayer+1)*6) 
+ 
+-
+  double precision :: cpu_time1(100)
+  integer :: cpu_count
+ 
+@@ -117,11 +128,13 @@
+ 
+  ! Test number of interfaces and of boundary conditions
+   nbc = 0
+-  do i=1,nlayer+1 
+- if (radbc(i)) nbc=nbc+6
+-  enddo
++  !!! >>> SA: 01/27/2018 => following changes are made to retrieve love numbers at depth 
++  !do i=1,nlayer+1 
++ !if (radbc(i)) nbc=nbc+6
++  !enddo
++  nbc = (nlayer+1)*6
++  !!! >>> SA 
+ 
+-
+  ifmin=source_type
+  ifmax=source_type
+  
+@@ -279,7 +292,7 @@
+ 	!print*,'bc ok', layerrap
+    call external_forcing(deg,f,sourcs,nfext,nbc) 
+ 	!print*,'forcing ok', layerrap
+-   call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++   call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta,lovekernels)
+ 
+ 	!print*,'first_sol', layerrap, epsdb
+ 
+@@ -317,17 +330,24 @@
+      bc(:,:)=0.d0
+      call boundary_conditions_matrix(bc,indx,nbc)
+      call external_forcing(deg,f,sourcs,nfext,nbc) 
+-     call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++     call solution(deg,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta,lovekernels)
+ 
+     end do
+    end if
+ 
+    !-- Saving Love numbers
+-
+-
+     hs(fr,deg+1) = loveh
+     ks(fr,deg+1) = lovek - 1.d0
+     ls(fr,deg+1) = lovel
++    
++    !!! and love kernels 
++    do i=1,nbc
++      lks(fr,deg*nbc+i) = lovekernels(i,1)
++    end do
++    !!! for ks... 6th variable is y5 => love_k
++    do i = 1,nbc/6
++      lks(fr,deg*nbc+6*i) = lks(fr,deg*nbc+6*i) - (radius(i)/ra)**deg
++    end do 
+ 
+ 	!print*,dble(hs(fr,deg+1)), dimag(hs(fr,deg+1)),dble(ks(fr,deg+1)), dimag(ks(fr,deg+1))
+ 
+@@ -361,3 +381,5 @@
+ 
+  deallocate( bc, indx, f, sourcs )
+ end subroutine
++! }}} 
++
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22381)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/model.f90	(revision 22382)
+@@ -72,9 +72,12 @@
+   
+   ! Test number of interfaces and of boundary conditions
+   n = 0
+-  do i=1,nlayer+1 
+- if (radbc(i)) n=n+1
+-  enddo
++  !!! >>> SA: 01/27/2018 => following changes made to retrieve love numbers at depth 
++  !do i=1,nlayer+1 
++ !if (radbc(i)) n=n+1
++  !enddo
++  n = nlayer+1 
++  !!! >>> SA 
+   if (nbc/=(6*n)) then
+  !write(101,*),
+  print*, 'Error nbc should be ',6*n,' instead of ',nbc
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22381)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp	(revision 22382)
+@@ -11,28 +11,25 @@
+ 
+ extern "C" { 
+ 	int lnb_setup_( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi, int* pnfreq, IssmDouble* frequencies, int* psh_nmax, int* psh_nmin, 
+-		IssmDouble* pg0, IssmDouble* pr0, IssmDouble* pmu0,bool* pallow_layer_deletion, int* pforcing_type, bool* pverbosemod,
++		IssmDouble* LoveLi, IssmDouble* LoveKernelsReal, IssmDouble* LoveKernelsImag, 
++		int* pnfreq, IssmDouble* frequencies, int* psh_nmax, int* psh_nmin, IssmDouble* pg0, 
++		IssmDouble* pr0, IssmDouble* pmu0,bool* pallow_layer_deletion, int* pforcing_type, bool* pverbosemod,
+ 		int* pnumlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
+ 		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid);
+-
+ }
+ 
+-/*}}}*/
+-
+ void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi, int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, 
+-		IssmDouble g0, IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
++		IssmDouble* LoveLi, IssmDouble* LoveKernelsReal, IssmDouble* LoveKernelsImag, 
++		int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, 
++		IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod,
+ 		int numlayers, IssmDouble* radius, IssmDouble* viscosity, IssmDouble* lame_lambda, IssmDouble* lame_mu, 
+ 		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density, IssmDouble* isburgers, IssmDouble* issolid){
+ 
+ 	/*Call fortran driver: */
+ 	lnb_setup_(  LoveKr,  LoveKi,  LoveHr,  LoveHi,  LoveLr, 
+-		 LoveLi,  &nfreq,  frequencies,  &sh_nmax,  &sh_nmin, 
+-		 &g0,  &r0,  &mu0, &allow_layer_deletion,  &forcing_type, &verbosemod,
++		 LoveLi, LoveKernelsReal, LoveKernelsImag, 
++		 &nfreq,  frequencies,  &sh_nmax,  &sh_nmin, &g0,  
++		 &r0,  &mu0, &allow_layer_deletion, &forcing_type, &verbosemod,
+ 		 &numlayers,  radius,  viscosity,  lame_lambda,  lame_mu, 
+ 		 burgers_viscosity,  burgers_mu,  density,  isburgers,  issolid);
+-
+-	
+-	
+ }
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(revision 22381)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h	(revision 22382)
+@@ -9,9 +9,10 @@
+ 
+ /* local prototypes: */
+ void FourierLoveCorex( IssmDouble* LoveKr, IssmDouble* LoveKi, IssmDouble* LoveHr, IssmDouble* LoveHi, IssmDouble* LoveLr, 
+-		IssmDouble* LoveLi,int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, IssmDouble r0, 
+-		IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod, int numlayers, IssmDouble* radius,  
+-		IssmDouble* viscosity,IssmDouble* lame_lambda, IssmDouble* lame_mu, IssmDouble* burgers_viscosity, IssmDouble* burgers_mu,  
+-		IssmDouble* density,IssmDouble* isburgers, IssmDouble* issolid);
++		IssmDouble* LoveLi, IssmDouble* LoveKernelsReal, IssmDouble* LoveKernelsImag, 
++		int nfreq, IssmDouble* frequencies, int sh_nmax, int sh_nmin, IssmDouble g0, 
++		IssmDouble r0, IssmDouble mu0,bool allow_layer_deletion, int forcing_type, bool verbosemod, 
++		int numlayers, IssmDouble* radius, IssmDouble* viscosity,IssmDouble* lame_lambda, IssmDouble* lame_mu, 
++		IssmDouble* burgers_viscosity, IssmDouble* burgers_mu, IssmDouble* density,IssmDouble* isburgers, IssmDouble* issolid);
+ 
+ #endif  /* _FOURIERLOVECOREX_H */
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22381)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22382)
+@@ -7,8 +7,8 @@
+  
+  contains
+  
++ ! subroutine boundary_conditions_matrix {{{ 
+  subroutine boundary_conditions_matrix(bc,indx,nbc)
+-!-------------------------------------
+ 
+   implicit none
+   double complex :: la, mu
+@@ -76,16 +76,16 @@
+    		one= -1.d0
+    end if 	
+    
+-   
+    do j = 1,ny
+-		! Typing ystart
+-		if (radbc(i)) then
+-   			ystart(:)=0.d0
++		! Typing ystart 
++      !!! >>> SA: 01/27/2018 => changes made to retrieve love numbers at depth 
++		!!!if (radbc(i)) then
++   		ystart(:)=0.d0
+ 			ystart(j)= valini
+  			k=ibc+1
+- 		else
+- 			ystart(:)=ystep(j,:)
+- 		end if
++ 		!!!else
++ 		!!!	ystart(:)=ystep(j,:)
++ 		!!!end if
+  		
+ 		! Numerical Integration 
+ 		!print*,j
+@@ -94,19 +94,19 @@
+ 		!print*,j
+  		
+  		! Boundary Condition matrix - propagation part 
+-		if (radbc(i+1)) then
++		!!!if (radbc(i+1)) then
+  			ii = 6*k+is
+  			jj = 6*k+j+is-3
+  			do kk=1,ny
+ 				bc(ii+kk,jj) = ystart(kk)*one
+ 			end do
+-		else
+-			ystep(j,:)=ystart(:) 
+- 		end if
++		!!!else
++		!!!	ystep(j,:)=ystart(:) 
++ 		!!!end if
+    end do
+ 	
+ 	
+-   if (radbc(i)) then
++   !!!if (radbc(i)) then
+    
+ 	! Boundary Condition matrix - solid regions
+ 	if (soliddim(i)) then
+@@ -117,7 +117,6 @@
+ 		do  j=1,6
+ 			bc(j+6*ibc,j+6*ibc+3) = one
+ 		end do
+-		ibc = ibc+1
+ 		
+ 	! Boundary Condition matrix - liquid regions
+ 	else
+@@ -142,13 +141,11 @@
+ 		bc(ii+1,ii-1)=-ro1*g*ra/mu0
+ 		bc(ii+2,ii)=-1.d0
+ 		bc(ii+5,ii-1)= 4.d0*pi*GG*ro1*ra/go0
+-		ibc = ibc+1
+ 	end if	
++	ibc = ibc+1
+ 	
+-    end if
++   !! end if
+ 	
+-	
+-	
+   end do
+ 
+ 
+@@ -171,7 +168,9 @@
+ 
+ 	!print*, bc, imag_eval
+  end subroutine boundary_conditions_matrix
++  ! }}} 
+  
++ ! subroutine sphere {{{
+  subroutine sphere(i,n,bc)
+ !------------------------
+ 
+@@ -222,7 +221,9 @@
+ 
+ 
+  end subroutine sphere
++ ! }}} 
+  
++ ! subroutine external_forcing {{{
+  subroutine external_forcing(n,source,sourcs,nfext,nbc)
+ !-----------------------------------
+ 
+@@ -296,8 +297,10 @@
+ 	
+  
+  end subroutine external_forcing
++ ! }}} 
+  
+- subroutine solution(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
++ ! subroutine solution {{{ 
++ subroutine solution(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta,love_kernels)
+ !-------------------------------------------------
+ 
+   integer :: n,nfext,nbc,i,j,ic,ibc,ii,jj,icmin,ifirst,info,lda,ldb
+@@ -304,7 +307,7 @@
+   double complex, dimension(:,:), pointer :: bc,f
+   integer,      dimension(:), pointer :: indx
+   character*40, dimension(:), pointer :: sourcs	
+-  double complex, dimension(nbc,1) :: sc
++  double complex, dimension(nbc,1) :: sc, love_kernels
+   double complex :: loveh,lovel,lovek,loveh1,lovel1,lovek1,loveh1s,lovel1s,lovek1s
+   double complex :: sumh,suml,sumk,d,val,sumy2,sumy4,sumy6,rads
+   double precision :: delta
+@@ -361,11 +364,43 @@
+ 	if (info.ne.0) then 
+ 		print*, 'Error in ZGESV : LAPACK linear equation solver couldn''t resolve the system'
+ 	end if
++   !!! >>> y1, y3, y5 at surface (by default) 
+ 	loveh = sc(nbc-2,1)*ra*go_surf
+ 	lovel = sc(nbc-1,1)*ra*go_surf
+ 	lovek = sc(nbc,1)*ra*go0
+ 	delta = (1.d0-dble(n+1)/dble(n)*(lovek-1.d0)+2.d0/dble(n)*loveh)
+-	
++
++   !!! >>> at depth [by SA on 1/31/2018] 
++   !!! sc outputs as follows (so scale it accordingly) 
++   !!!      y4 y2 y6 y1 y3 y5 
++   !!!      at center of mass of the earth (top row) => at surface (bottom row) 
++   !print *, nbc 
++   do j = 1,nbc/6
++      !!! y4, y2, y6 are not scaled yet =>>> ask lambert ==>>> 
++      love_kernels((j-1)*6+1,1) = sc((j-1)*6+1,1)               ! y4 NOT SCALED YET 
++      love_kernels((j-1)*6+2,1) = sc((j-1)*6+2,1)               ! y2 NOT SCALED YET 
++      love_kernels((j-1)*6+3,1) = sc((j-1)*6+3,1)               ! y6 NOT SCALED YET 
++      love_kernels((j-1)*6+4,1) = sc((j-1)*6+4,1)*ra*go_surf    ! y1 => love_h 
++      love_kernels((j-1)*6+5,1) = sc((j-1)*6+5,1)*ra*go_surf    ! y3 => love_l 
++      love_kernels((j-1)*6+6,1) = sc((j-1)*6+6,1)*ra*go0        ! y5 => love_k
++      !if (deg==2) then 
++      !   print *, real(love_kernels((j-1)*6+1,1)), real(love_kernels((j-1)*6+4,1))
++      !end if 
++   end do
++
++   !if (deg==2) then
++   !  do ibc=1,nbc/6
++   !      print *, real(sc( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
++   !   end do 
++   !   print *, ' ************* ' 
++   !   do ibc=1,nbc/6
++   !      print *, real(love_kernels( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
++   !   end do 
++   !   print *, ' ************* ' 
++   !   print*, ra*go_surf, ra*go0, mu0
++   !end if 
++   !!! >>> SA 
++
+ 	sumy2=0.d0
+ 	sumy4=0.d0
+ 	sumy6=0.d0
+@@ -447,8 +482,9 @@
+  304 format(i5,5x,d20.10,5x,d20.10,5x,d20.10)
+ 
+  end subroutine solution 
++ ! }}}
+  
+- 
++  ! subroutine solution_nbloutput {{{ 
+   subroutine solution_nbloutput(n,bc,indx,f,sourcs,nfext,nbc,loveh,lovel,lovek,delta)
+ !-------------------------------------------------
+ 
+@@ -592,9 +628,7 @@
+   
+    !write(*,*),dlog10(aimag(freq)*365.d0*24.d0*3600.d0*1000.d0),'   Matrix det = ',d, lovek
+   
+-
+  end subroutine solution_nbloutput 
++ ! }}}
+ 
+-
+-
+ end module lovenb_sub
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22381)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22382)
+@@ -85,6 +85,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.love.r0",LoveR0Enum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.love.mu0",LoveMu0Enum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.love.allow_layer_deletion",LoveAllowLayerDeletionEnum));
++	parameters->AddObject(iomodel->CopyConstantObject("md.love.love_kernels",LoveKernelsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.love.forcing_type",LoveForcingTypeEnum));
+ 
+ 	  {/*This is specific to ice...*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22382-22383.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22382-22383.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22382-22383.diff	(revision 22755)
@@ -0,0 +1,161 @@
+Index: ../trunk-jpl/src/m/classes/fourierlove.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.py	(revision 22382)
++++ ../trunk-jpl/src/m/classes/fourierlove.py	(revision 22383)
+@@ -19,6 +19,7 @@
+ 		self.r0                   =  float('NaN'); 
+ 		self.mu0                  =  float('NaN');
+                 self.allow_layer_deletion = float('NaN');
++                self.love_kernels = float('NaN');
+ 		self.forcing_type         =  float('NaN');
+ 
+ 		#set defaults
+@@ -37,6 +38,7 @@
+                 string="%s\n%s"%(string,fielddisplay(self,'r0','adimensioning constant for radius (default 6378*10^3) [m]'))
+                 string="%s\n%s"%(string,fielddisplay(self,'mu0','adimensioning constant for stress (default 10^11) [Pa]'))
+                 string="%s\n%s"%(string,fielddisplay(self,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)'))
++                string="%s\n%s"%(string,fielddisplay(self,'love_kernels','compute love numbers at depth? (default 0)'))
+                 string="%s\n%s"%(string,fielddisplay(self,'forcing_type','integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :'))
+                 string="%s\n%s"%(string,'                                                     1:  Inner core boundary -- Volumic Potential')
+                 string="%s\n%s"%(string,'                                                     2:  Inner core boundary -- Pressure')
+@@ -69,6 +71,7 @@
+             self.r0=6378*1e3 #m
+             self.mu0=1e11 # Pa
+             self.allow_layer_deletion=1
++            self.love_kernels=0 
+             self.forcing_type = 11
+ 
+             return self
+@@ -83,6 +86,7 @@
+             md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',[1],'>',0);
+             md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',[1],'>',0);
+             md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0,1]);
++            md = checkfield(md,'fieldname','love.love_kernels','values',[0,1]);
+             md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',[1],'>',0, '<=', 12);
+             if md.love.sh_nmin<=1 and md.love.forcing_type==9:
+                 raise RuntimeError("Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.")
+@@ -99,6 +103,7 @@
+             WriteData(fid,prefix,'object',self,'fieldname','r0','format','Double');
+             WriteData(fid,prefix,'object',self,'fieldname','mu0','format','Double');
+             WriteData(fid,prefix,'object',self,'fieldname','allow_layer_deletion','format','Boolean');
++            WriteData(fid,prefix,'object',self,'fieldname','love_kernels','format','Boolean');
+             WriteData(fid,prefix,'object',self,'fieldname','forcing_type','format','Integer');
+ 
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/fourierlove.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.js	(revision 22382)
++++ ../trunk-jpl/src/m/classes/fourierlove.js	(revision 22383)
+@@ -18,6 +18,7 @@
+ 		this.r0=6378*1e3; //m;
+ 		this.mu0=10**11; // Pa
+ 		this.allow_layer_deletion=1; 
++		this.love_kernels=0; 
+ 		this.forcing_type = 11; 
+ 	} // }}}
+ 	this.disp = function() { // {{{
+@@ -29,6 +30,7 @@
+ 		fielddisplay(this,'r0','adimensioning constant for radius (default 6378*10^3) [m]');
+ 		fielddisplay(this,'mu0','adimensioning constant for stress (default 10^11) [Pa]');
+ 		fielddisplay(this,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)');
++		fielddisplay(this,'love_kernels','compute love numbers at depth? (default 0)');
+ 		fielddisplay(this,'forcing_type',['integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :','1:  Inner core boundary -- Volumic Potential','2:  Inner core boundary -- Pressure','3:  Inner core boundary -- Loading','4:  Inner core boundary -- Tangential traction','5:  Core mantle boundary -- Volumic Potential','6:  Core mantle boundary -- Pressure','7:  Core mantle boundary -- Loading','8:  Core mantle boundary -- Tangential traction','9:  Surface -- Volumic Potential','10: Surface -- Pressure','11: Surface -- Loading','12: Surface -- Tangential traction ']); 
+ 
+ 	} // }}}
+@@ -42,6 +44,7 @@
+ 		md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',1,'>',0);
+ 		md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',1,'>',0);
+ 		md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0, 1]);
++		md = checkfield(md,'fieldname','love.love_kernels','values',[0, 1]);
+ 		md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',1,'>',0, '<=', 12);
+ 		if (md.love.sh_nmin<=1 && md.love.forcing_type==9) {
+ 			throw 'Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.';
+@@ -57,6 +60,7 @@
+ 		WriteData(fid,prefix,'object',this,'fieldname','r0','format','Double');
+ 		WriteData(fid,prefix,'object',this,'fieldname','mu0','format','Double');
+ 		WriteData(fid,prefix,'object',this,'fieldname','allow_layer_deletion','format','Boolean');
++		WriteData(fid,prefix,'object',this,'fieldname','love_kernels','format','Boolean');
+ 		WriteData(fid,prefix,'object',this,'fieldname','forcing_type','format','Integer');
+ 
+ 	} // }}}
+@@ -71,6 +75,7 @@
+ 	this.r0                   =  NaN; 
+ 	this.mu0                  =  NaN;
+ 	this.allow_layer_deletion =  NaN;
++	this.love_kernels =  NaN;
+ 	this.forcing_type         =  NaN;
+ 	
+ 	//set defaults
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22382)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22383)
+@@ -210,6 +210,22 @@
+         field = field*yts;
+ 	elseif strcmp(fieldname,'CalvingCalvingrate'),
+ 		field = field*yts;
++	elseif (strcmp(fieldname,'LoveKernelsReal') | strcmp(fieldname,'LoveKernelsImag')),
++		nlayer = md.materials.numlayers; 
++		degmax = md.love.sh_nmax; 
++		nfreq  = md.love.nfreq; 
++		temp_field = cell(degmax+1,nfreq,nlayer+1,6); 
++		for ii=1:degmax+1
++			for jj=1:nfreq
++				for kk=1:nlayer+1
++					ll = (ii-1)*(nlayer+1)*6 + ((kk-1)*6+1); 
++					for mm=1:6
++						temp_field{ii,jj,kk,mm} = field(ll+(mm-1),jj);  
++					end
++				end
++			end
++		end
++		field=temp_field; 
+ 	end
+ 
+ 	result.fieldname=fieldname;
+Index: ../trunk-jpl/src/m/classes/fourierlove.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.m	(revision 22382)
++++ ../trunk-jpl/src/m/classes/fourierlove.m	(revision 22383)
+@@ -12,7 +12,8 @@
+ 		g0               =  NaN; 
+ 		r0               =  NaN; 
+ 		mu0              =  NaN;
+-        allow_layer_deletion = NaN;
++      allow_layer_deletion = NaN;
++      love_kernels = NaN;
+ 		forcing_type     =  NaN;
+ 	end
+ 	methods (Static)
+@@ -42,6 +43,7 @@
+ 			self.r0=6378*1e3; %m;
+ 			self.mu0=10^11; % Pa
+ 			self.allow_layer_deletion=1; 
++			self.love_kernels=0; 
+ 			self.forcing_type = 11; 
+ 		end % }}}
+ 		function disp(self) % {{{
+@@ -53,6 +55,7 @@
+ 			fielddisplay(self,'r0','adimensioning constant for radius (default 6378*10^3) [m]');
+ 			fielddisplay(self,'mu0','adimensioning constant for stress (default 10^11) [Pa]');
+ 			fielddisplay(self,'allow_layer_deletion','allow for migration of the integration boundary with increasing spherical harmonics degree (default 1)');
++			fielddisplay(self,'love_kernels','compute love numbers at depth? (default 0)');
+ 			fielddisplay(self,'forcing_type',{'integer indicating the nature and depth of the forcing for the Love number calculation (default 11) :','1:  Inner core boundary -- Volumic Potential','2:  Inner core boundary -- Pressure','3:  Inner core boundary -- Loading','4:  Inner core boundary -- Tangential traction','5:  Core mantle boundary -- Volumic Potential','6:  Core mantle boundary -- Pressure','7:  Core mantle boundary -- Loading','8:  Core mantle boundary -- Tangential traction','9:  Surface -- Volumic Potential','10: Surface -- Pressure','11: Surface -- Loading','12: Surface -- Tangential traction '}); 
+ 
+ 		end % }}}
+@@ -66,6 +69,7 @@
+ 			md = checkfield(md,'fieldname','love.r0','NaN',1,'Inf',1,'numel',1,'>',0);
+ 			md = checkfield(md,'fieldname','love.mu0','NaN',1,'Inf',1,'numel',1,'>',0);
+ 			md = checkfield(md,'fieldname','love.allow_layer_deletion','values',[0 1]);
++			md = checkfield(md,'fieldname','love.love_kernels','values',[0 1]);
+ 			md = checkfield(md,'fieldname','love.forcing_type','NaN',1,'Inf',1,'numel',1,'>',0, '<=', 12);
+ 			if md.love.sh_nmin<=1 & md.love.forcing_type==9
+ 				error('Degree 1 not supported for Volumetric Potential forcing. Use sh_min>=2 for this kind of calculation.')
+@@ -81,6 +85,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','r0','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','mu0','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','allow_layer_deletion','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','love_kernels','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'fieldname','forcing_type','format','Integer');
+ 
+ 		end % }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22383-22384.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22383-22384.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22383-22384.diff	(revision 22755)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/test/NightlyRun/test2085.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2085.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2085.m	(revision 22384)
+@@ -0,0 +1,44 @@
++
++%Test Name: LovenumberstAtDepth. 
++%Same as test #1 of test2084.m 
++
++md=model();
++md.cluster=generic('name',oshostname(),'np',1);
++
++md.materials=materials('litho');
++md.miscellaneous.name='FourierLoveTest';
++
++md.verbose=verbose('111111101');
++cst=365.25*24*3600*1000;
++
++	md.materials.numlayers=6;
++        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
++	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
++	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
++	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
++	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++	md.materials.issolid=[1 0 1 1 1 1]';
++	md.materials.isburgers=zeros(md.materials.numlayers,1);
++
++md.love.love_kernels=1; 
++md.love.allow_layer_deletion=1;
++md.love.frequencies=([0]*2*pi)'/cst;
++md.love.nfreq=length(md.love.frequencies);
++md.love.sh_nmax=2;
++
++md.materials.burgers_mu=md.materials.lame_mu;
++md.materials.burgers_viscosity=md.materials.viscosity;
++
++md=solve(md,'lv');
++
++%Fields and tolerances to track changes
++%loading love numbers
++field_names = {'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic','LoveKernels_degree1','LoveKernels_degree2'};
++field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-10}; 
++field_values={...
++	(md.results.LoveSolution.LoveHr(:,1)),...
++	(md.results.LoveSolution.LoveKr(:,1)),...
++	(md.results.LoveSolution.LoveLr(:,1)),...
++	squeeze(cell2mat(md.results.LoveSolution.LoveKernelsReal(2,1,:,:))),...
++	squeeze(cell2mat(md.results.LoveSolution.LoveKernelsReal(3,1,:,:))),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive2085.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2085.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive2085.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive2085.arch	(revision 22384)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive2085.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22384-22385.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22384-22385.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22384-22385.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22384)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22385)
+@@ -95,11 +95,24 @@
+ 				for(j=0;j<nummisfits;j++){
+ 
+ 					int obs_vector_type=0;
+-					if ((misfit_observation_M_s[j]==iomodel->numberofvertices) || (misfit_observation_M_s[j]==iomodel->numberofvertices+1))obs_vector_type=1;
+-					if ((misfit_observation_M_s[j]==iomodel->numberofelements) || (misfit_observation_M_s[j]==iomodel->numberofelements+1))obs_vector_type=2;
++					if ((misfit_observation_M_s[j]==iomodel->numberofvertices) || (misfit_observation_M_s[j]==iomodel->numberofvertices+1)){
++						obs_vector_type=1;
++					}
++					else if ((misfit_observation_M_s[j]==iomodel->numberofelements) || (misfit_observation_M_s[j]==iomodel->numberofelements+1)){
++						obs_vector_type=2;
++					}
++					else
++					 _error_("misfit observation size not supported yet");
++
+ 					int weight_vector_type=0;
+-					if ((misfit_weights_M_s[j]==iomodel->numberofvertices) || (misfit_weights_M_s[j]==iomodel->numberofvertices+1))weight_vector_type=1;
+-					if ((misfit_weights_M_s[j]==iomodel->numberofelements) || (misfit_weights_M_s[j]==iomodel->numberofelements+1))weight_vector_type=2;
++					if ((misfit_weights_M_s[j]==iomodel->numberofvertices) || (misfit_weights_M_s[j]==iomodel->numberofvertices+1)){
++						weight_vector_type=1;
++					}
++					else if ((misfit_weights_M_s[j]==iomodel->numberofelements) || (misfit_weights_M_s[j]==iomodel->numberofelements+1)){
++						weight_vector_type=2;
++					}
++					else
++					 _error_("misfit weight size not supported yet");
+ 
+ 
+ 					/*First create a misfit object for that specific string (misfit_model_string_s[j]):*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22385-22386.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22385-22386.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22385-22386.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 22385)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 22386)
+@@ -59,6 +59,8 @@
+ 	}
+ 	
+ 	/*If we are here, did not find the definition for this response, not good!: */
+-	_error_("Could not find the response for output definition " << output_enum << " because could not find the definition itself!");
++	_error_("Could not find the response for output definition " << EnumToStringx(output_enum) 
++				<<" ("<<output_enum<<")"
++				<< " because could not find the definition itself!");
+ 
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22386-22387.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22386-22387.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22386-22387.diff	(revision 22755)
@@ -0,0 +1,124 @@
+Index: ../trunk-jpl/src/m/classes/numberedcostfunction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/numberedcostfunction.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/numberedcostfunction.m	(revision 22387)
+@@ -0,0 +1,119 @@
++%M1QN3INVERSION class definition
++%
++%   Usage:
++%      numberedcostfunction=numberedcostfunction();
++
++classdef numberedcostfunction
++	properties (SetAccess=public) 
++		cost_functions              = NaN
++		cost_functions_coefficients = NaN
++		vx_obs                      = NaN
++		vy_obs                      = NaN
++		vz_obs                      = NaN
++		vel_obs                     = NaN
++		thickness_obs               = NaN
++		surface_obs                 = NaN
++	end
++	methods
++		function self = numberedcostfunction(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(numberedcostfunction(),varargin{1});
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
++			self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
++			self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
++			self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
++			if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
++			if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
++			if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			%several responses can be used:
++			self.cost_functions=101;
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			num_costfunc=size(md.inversion.cost_functions,2);
++
++			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
++			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
++
++			if strcmp(solution,'BalancethicknessSolution')
++				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++			elseif strcmp(solution,'BalancethicknessSoftSolution')
++				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++			else
++				md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				if ~strcmp(domaintype(md.mesh),'2Dvertical'),
++					md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				end
++			end
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   numberedcostfunction parameters:'));
++			fielddisplay(self,'cost_functions','indicate the type of response for each optimization step');
++			fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
++			fielddisplay(self,'vx_obs','observed velocity x component [m/yr]');
++			fielddisplay(self,'vy_obs','observed velocity y component [m/yr]');
++			fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]');
++			fielddisplay(self,'thickness_obs','observed thickness [m]');
++			fielddisplay(self,'surface_obs','observed surface elevation [m]');
++			disp('Available cost functions:');
++			disp('   101: SurfaceAbsVelMisfit');
++			disp('   102: SurfaceRelVelMisfit');
++			disp('   103: SurfaceLogVelMisfit');
++			disp('   104: SurfaceLogVxVyMisfit');
++			disp('   105: SurfaceAverageVelMisfit');
++			disp('   201: ThicknessAbsMisfit');
++			disp('   501: DragCoefficientAbsGradient');
++			disp('   502: RheologyBbarAbsGradient');
++			disp('   503: ThicknessAbsGradient');
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			yts=md.constants.yts;
++
++			WriteData(fid,prefix,'name','md.inversion.type','data',2,'format','Integer');
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			if(numel(self.thickness_obs)==md.mesh.numberofelements),
++				mattype=2;
++			else
++				mattype=1;
++			end
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
++
++			%process cost functions
++			num_cost_functions=size(self.cost_functions,2);
++			data=marshallcostfunctions(self.cost_functions);
++			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
++			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejs2Darray(fid,[modelname '.inversion.cost_functions'],self.cost_functions);
++			writejs2Darray(fid,[modelname '.inversion.cost_functions_coefficients'],self.cost_functions_coefficients);
++			writejs1Darray(fid,[modelname '.inversion.vx_obs'],self.vx_obs);
++			writejs1Darray(fid,[modelname '.inversion.vy_obs'],self.vy_obs);
++			writejs1Darray(fid,[modelname '.inversion.vz_obs'],self.vz_obs);
++			writejs1Darray(fid,[modelname '.inversion.vel_obs'],self.vel_obs);
++			writejs1Darray(fid,[modelname '.inversion.thickness_obs'],self.thickness_obs);
++			writejs1Darray(fid,[modelname '.inversion.surface_obs'],self.surface_obs);
++
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22387-22388.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22387-22388.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22387-22388.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/m/classes/fourierlove.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/fourierlove.m	(revision 22387)
++++ ../trunk-jpl/src/m/classes/fourierlove.m	(revision 22388)
+@@ -5,16 +5,16 @@
+ 
+ classdef fourierlove
+ 	properties (SetAccess=public) 
+-		nfreq            =  NaN;
+-		frequencies      =  NaN;
+-		sh_nmax          =  NaN;
+-		sh_nmin          =  NaN;
+-		g0               =  NaN; 
+-		r0               =  NaN; 
+-		mu0              =  NaN;
+-      allow_layer_deletion = NaN;
+-      love_kernels = NaN;
+-		forcing_type     =  NaN;
++		nfreq                = 0;
++		frequencies          = 0;
++		sh_nmax              = 0;
++		sh_nmin              = 0;
++		g0                   = 0;
++		r0                   = 0;
++		mu0                  = 0;
++		allow_layer_deletion = 0;
++		love_kernels         = 0;
++		forcing_type         = 0;
+ 	end
+ 	methods (Static)
+ 		function self = loadobj(self) % {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22388-22389.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22388-22389.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22388-22389.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22388)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22389)
+@@ -9,7 +9,6 @@
+ 
+ 	/*diverse:*/
+ 	int    icecommsize;
+-	int    rankzeros[2];
+ 	int    my_rank,my_local_rank,my_size,my_local_size;
+ 	ISSM_MPI_Comm worldcomm;
+ 	ISSM_MPI_Comm modelcomm;
+@@ -30,10 +29,6 @@
+ 	/*ice comm size: */
+ 	icecommsize=(int) strtol(argv[2], (char **)NULL, 10);
+ 
+-	/*Buil array of who is rank 0 of their own group:*/
+-	rankzeros[0]=0; 
+-	rankzeros[1]=icecommsize; 
+-
+ 	printf("Ice: My global rank: %i My world size: %i \n",my_rank,my_size);
+ 
+ 	/*Split world into sub-communicators for each and every model:*/
+@@ -44,7 +39,7 @@
+ 
+ 	printf("Ice: My global rank: %i My local rank: %i My world size: %i My local size: %i\n",my_rank,my_local_rank,my_size,my_local_size);
+ 
+-	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, rankzeros[1], 0, &tomitgcmcomm); 
++	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, my_local_size, 0, &tomitgcmcomm); 
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,modelcomm);
+@@ -65,9 +60,11 @@
+ 	/*Delete Model: */
+ 	delete femmodel;
+ 
++	printf("-------------- file: issm_ocean.cpp line: %i\n",__LINE__); 
+ 	/*Finalize environment:*/
+ 	EnvironmentFinalize();
+ 
++	printf("-------------- file: issm_ocean.cpp line: %i\n",__LINE__); 
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22389-22390.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22389-22390.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22389-22390.diff	(revision 22755)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22389)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22390)
+@@ -68,7 +68,6 @@
+       COMMON /CPL_MPI_ID/
+      &     mpiMyWid
+       integer :: mpiMyWid, numprocsworld
+-      integer icecommsize,rankzeros(2)
+       integer my_local_rank,my_local_size
+       integer toissmcomm
+ #endif /* ALLOW_CPL_ISSM */
+@@ -186,14 +185,6 @@
+        call MPI_COMM_RANK(MPI_COMM_WORLD, mpiMyWid, mpiRC)
+        call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocsworld, mpiRC)
+ 
+-c     ocean  comm size: 4 (normally should be recovered from list of
+-c     arguments after mpirun:) */
+-      icecommsize=2
+-
+-c     Build array of who is rank 0 of their own group:*/
+-      rankzeros(1)=0 
+-      rankzeros(2)=icecommsize 
+-
+ c     Split world into sub-communicators for each and every model:*/
+       call MPI_COMM_SPLIT(MPI_COMM_WORLD,1,MPIMYWID,
+      &                    MPI_COMM_MODEL,mpiRC)
+@@ -201,8 +192,8 @@
+       print*,'Oc My global rank',mpiMyWid
+       print*,'Oc My world size:',numprocsworld
+ 
+-cdm      call MPI_INTERCOMM_CREATE(MPI_COMM_MODEL,0,MPI_COMM_WORLD,
+-cdm     &                          rankzeros(1),0,toissmcomm,mpiRC)
++      call MPI_INTERCOMM_CREATE(MPI_COMM_MODEL,0,MPI_COMM_WORLD,
++     &                          0,0,toissmcomm,mpiRC)
+       
+       call MPI_COMM_RANK(MPI_COMM_MODEL, my_local_rank, mpiRC)
+       call MPI_COMM_SIZE(MPI_COMM_MODEL, my_local_size, mpiRC)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22390-22391.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22390-22391.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22390-22391.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22390)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22391)
+@@ -14,6 +14,7 @@
+ 	ISSM_MPI_Comm modelcomm;
+ 	ISSM_MPI_Comm frommitgcm;
+ 	ISSM_MPI_Comm tomitgcmcomm;
++	ISSM_MPI_Status status
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+@@ -41,6 +42,16 @@
+ 
+ 	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, my_local_size, 0, &tomitgcmcomm); 
+ 
++	/*send an integer:*/
++	int dummy1,dummy2;
++	dummy1=3; dummy2=0;
++	if(my_local_rank==0){
++		MPI_Send(&dummy1,1,MPI_INT,0,1,tomitgcmcomm);
++		MPI_Recv(&dummy2,1,MPI_INT,0,1,tomitgcmcomm,&status);
++	}
++	MPI_Bcast(&dummy2,1,MPI_INT,0,modelcomm);
++	printf("Ice: dummy received: %i\n",dummy2);
++
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,modelcomm);
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22391-22392.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22391-22392.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22391-22392.diff	(revision 22755)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22391)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22392)
+@@ -70,6 +70,8 @@
+       integer :: mpiMyWid, numprocsworld
+       integer my_local_rank,my_local_size
+       integer toissmcomm
++      integer  dummy1(1),dummy2(1)
++      integer, dimension(mpi_status_size) :: status
+ #endif /* ALLOW_CPL_ISSM */
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+       INTEGER mpiMyWid, color
+@@ -200,8 +202,21 @@
+ 
+       print*,'Oc My global rank',mpiMyWid,'MyLocal rank: ',my_local_rank
+       print*,'Oc My world size:',numprocsworld,'My local size: ',
+-     & my_local_size
++     &     my_local_size
+ 
++
++c     receive and send an integer:
++      dummy1(1)=4; dummy2(1)=2;
++         
++      if (my_local_rank .eq. 0) then
++          call MPI_Send(dummy2,1,MPI_INT,0,1,toissmcomm,mpiRC)
++          call MPI_Recv(dummy1,1,MPI_INT,0,1,toissmcomm,status,mpiRC)
++      end if
++      
++      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
++      print*, 'Ocean : dummy received:',dummy1
++
++
+ #endif /* ALLOW_CPL_ISSM */
+ 
+ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
Index: /issm/oecreview/Archive/21724-22754/ISSM-22392-22393.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22392-22393.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22392-22393.diff	(revision 22755)
@@ -0,0 +1,116 @@
+Index: ../trunk-jpl/test/MITgcm/code/eedie.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eedie.F	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/eedie.F	(revision 22393)
+@@ -0,0 +1,111 @@
++C $Header: /u/gcmpack/MITgcm/eesupp/src/eedie.F,v 1.13 2012/10/11 19:15:18 jmc Exp $
++C $Name:  $
++
++#include "CPP_EEOPTIONS.h"
++#ifdef USE_LIBHPM
++# include "f_hpm.h"
++#endif
++
++CBOP
++      SUBROUTINE EEDIE
++C     *==========================================================*
++C     | SUBROUTINE EEDIE                                         |
++C     | o Close execution "environment", particularly perform    |
++C     |   steps to terminate parallel processing.                |
++C     *==========================================================*
++C     | Note: This routine can also be compiled with CPP         |
++C     | directives set so that no multi-processing is initialised|
++C     | This is OK and should work fine.                         |
++C     *==========================================================*
++      IMPLICIT NONE
++
++C     == Global variables ==
++#include "SIZE.h"
++#include "EEPARAMS.h"
++#include "EESUPPORT.h"
++CEOP
++
++C     == Local variables ==
++C     msgBuf       :: I/O Buffer
++C     nThreadsDone :: Used to count number of completed threads.
++C     I            :: Loop counter.
++      CHARACTER*(MAX_LEN_MBUF) msgBuf
++      INTEGER nThreadsDone
++      INTEGER I
++#ifdef ALLOW_USE_MPI
++C     mpiRC        :: Error code reporting variable used with MPI.
++      INTEGER mpiRC
++#endif /* ALLOW_USE_MPI */
++
++      IF ( eeBootError ) THEN
++C--   Skip ended threads counting if earlier error was found
++        WRITE(msgBuf,'(2A)')
++     &   'EEDIE: earlier error in multi-proc/thread setting'
++        CALL PRINT_ERROR( msgBuf, 1 )
++        fatalError = .TRUE.
++
++      ELSE
++C--   Check that all the threads have ended
++C     No thread should reach this loop before all threads have set
++C     threadIsComplete to TRUE. If they do then either there is a bug
++C     in the code or the behaviour of the parallel compiler directives
++C     are not right for this code. In the latter case different
++C     directives may be available or the compiler itself may have a
++C     bug or you may need a different parallel compiler for main.F
++        nThreadsDone = 0
++        DO I = 1, nThreads
++         IF ( threadIsComplete(I) ) nThreadsDone = nThreadsDone+1
++        ENDDO
++        IF ( nThreadsDone .LT. nThreads ) THEN
++         WRITE(msgBuf,'(A,I5,A)')
++     &    'S/R EEDIE: Only',nThreadsDone,' threads have completed,'
++         CALL PRINT_ERROR( msgBuf, 1 )
++         WRITE(msgBuf,'(A,I5,A)')
++     &    'S/R EEDIE:',nThreads,' are expected for this config !'
++         CALL PRINT_ERROR( msgBuf, 1 )
++         eeEndError = .TRUE.
++         fatalError = .TRUE.
++        ENDIF
++
++C--   end if/else eebootError
++      ENDIF
++
++#ifdef USE_LIBHPM
++      CALL F_HPMTERMINATE(myProcId)
++#endif
++
++C--   Flush IO-unit before MPI termination
++      CALL MDS_FLUSH( errorMessageUnit, 1 )
++c#ifdef ALLOW_USE_MPI
++      CALL MDS_FLUSH( standardMessageUnit, 1 )
++c#endif /* ALLOW_USE_MPI */
++
++#ifdef ALLOW_USE_MPI
++C- Note: since MPI_INIT is always called, better to also always terminate MPI
++C        (even if usingMPI=F) --> comment out test on usingMPI
++c     IF ( usingMPI ) THEN
++
++C--   MPI style multiple-process termination
++C--   ======================================
++#ifdef COMPONENT_MODULE
++       IF ( useCoupler) CALL MPI_BARRIER( MPI_COMM_WORLD, mpiRC )
++#endif
++#ifdef ALLOW_OASIS
++       IF ( useOASIS ) CALL OASIS_FINALIZE
++#endif
++       CALL MPI_BARRIER( MPI_COMM_WORLD, mpiRC )
++       CALL MPI_FINALIZE  ( mpiRC )
++       IF ( mpiRC .NE. MPI_SUCCESS ) THEN
++        eeEndError = .TRUE.
++        fatalError = .TRUE.
++        WRITE(msgBuf,'(A,I5)')
++     &       'S/R FIN_PROCS: MPI_FINALIZE return code',
++     &       mpiRC
++        CALL PRINT_ERROR( msgBuf, 1 )
++       ENDIF
++
++c     ENDIF
++#endif /* ALLOW_USE_MPI */
++
++      RETURN
++      END
Index: /issm/oecreview/Archive/21724-22754/ISSM-22393-22394.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22393-22394.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22393-22394.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22393)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22394)
+@@ -71,16 +71,13 @@
+ 	/*Delete Model: */
+ 	delete femmodel;
+ 
+-	printf("-------------- file: issm_ocean.cpp line: %i\n",__LINE__); 
+ 	/*Finalize environment:*/
+ 	EnvironmentFinalize();
+ 
+-	printf("-------------- file: issm_ocean.cpp line: %i\n",__LINE__); 
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
+ 
+ 	/*Free ressources:*/
+-//	xDelete<int>(commsizes);
+ 
+ 	/*Return unix success: */
+ 	return 0; 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22394-22395.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22394-22395.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22394-22395.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/Archives/Archive2085.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2002.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2101.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2003.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22395-22396.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22395-22396.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22395-22396.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive2010.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2002.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2101.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive2003.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22396-22397.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22396-22397.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22396-22397.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22397-22398.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22397-22398.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22397-22398.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/test/NightlyRun/test2085.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2085.py	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test2085.py	(revision 22398)
+@@ -0,0 +1,49 @@
++#Test Name: LovenumberstAtDepth.
++#Same as test #1 of test2084.m 
++
++from model import *
++from socket import gethostname
++from solve import *
++from numpy import *
++from generic import generic
++from materials import *
++
++md = model()
++md.cluster = generic('name',gethostname(),'np',1)
++
++md.materials = materials('litho')
++md.miscellaneous.name = 'FourierLoveTest'
++
++md.verbose = verbose('111111101')
++cst = 365.25*24*3600*1000
++
++md.materials.numlayers = 6
++md.materials.radius = np.array([10,1222.5,3.4800e+03,5.7010e+03,5.9510e+03,6.3010e+03,6.3710e+03]).reshape(-1,1)*1e3
++md.materials.density = np.array([1.0750e4,1.0750e+04,4.9780e+03,3.8710e+03,3.4380e+03,3.0370e+03]).reshape(-1,1)
++md.materials.lame_mu = np.array([1e-5,0,2.2834e+00,1.0549e+00,7.0363e-01,5.0605e-01]).reshape(-1,1)*1e11
++md.materials.viscosity = np.array([0,0,2.0000e+00,1.0000e+00,1.0000e+00,1.0000e+25]).reshape(-1,1)*1e21
++md.materials.lame_lambda = np.array(md.materials.lame_mu)*0+5e14
++md.materials.issolid = np.array([1,0,1,1,1,1]).reshape(-1,1)
++md.materials.isburgers = np.zeros((md.materials.numlayers,))
++
++md.love.love_kernels = 1 
++md.love.allow_layer_deletion = 1
++md.love.frequencies = (np.array([0])*2*pi).reshape(-1,1) / cst
++md.love.nfreq = len(md.love.frequencies)
++md.love.sh_nmax = 2
++
++md.materials.burgers_mu = md.materials.lame_mu
++md.materials.burgers_viscosity = md.materials.viscosity
++
++md = solve(md,'lv')
++
++#Fields and tolerances to track changes
++#loading love numbers
++field_names =  ['LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic','LoveKernels_degree1','LoveKernels_degree2']
++field_tolerances = [1e-10,1e-10,1e-10,1e-10,1e-10] 
++field_values = [
++	md.results.LoveSolution.LoveHr[:,0],
++	md.results.LoveSolution.LoveKr[:,0],
++	md.results.LoveSolution.LoveLr[:,0],
++	md.results.LoveSolution.LoveKernelsReal[1,0,:,:],
++	md.results.LoveSolution.LoveKernelsReal[2,0,:,:]]
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22397)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22398)
+@@ -220,6 +220,18 @@
+         		field = field*yts
+ 		elif fieldname=='CalvingCalvingrate':
+ 			field = field*yts
++		elif fieldname=='LoveKernelsReal' or fieldname=='LoveKernelsImag':
++			nlayer = md.materials.numlayers
++			degmax = md.love.sh_nmax
++			nfreq  = md.love.nfreq
++			temp_field = np.full((degmax+1,nfreq,nlayer+1,6),0.0)
++			for ii in range(degmax+1):
++				for jj in range(nfreq):
++					for kk in range(nlayer+1):
++						ll = ii*(nlayer+1)*6 + (kk*6+1)
++						for mm in range(6):
++							temp_field[ii,jj,kk,mm] = field[ll+mm-1,jj]
++			field=temp_field
+ 
+ 		if time !=-9999:
+ 			time = time/yts
Index: /issm/oecreview/Archive/21724-22754/ISSM-22398-22399.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22398-22399.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22398-22399.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22398)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22399)
+@@ -224,7 +224,10 @@
+ 			nlayer = md.materials.numlayers
+ 			degmax = md.love.sh_nmax
+ 			nfreq  = md.love.nfreq
+-			temp_field = np.full((degmax+1,nfreq,nlayer+1,6),0.0)
++			#for numpy 1.8+ only
++			#temp_field = np.full((degmax+1,nfreq,nlayer+1,6),0.0)
++			temp_field = np.empty((degmax+1,nfreq,nlayer+1,6))
++			temp_field.fill(0.0)
+ 			for ii in range(degmax+1):
+ 				for jj in range(nfreq):
+ 					for kk in range(nlayer+1):
Index: /issm/oecreview/Archive/21724-22754/ISSM-22399-22400.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22399-22400.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22399-22400.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22400-22401.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22400-22401.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22400-22401.diff	(revision 22755)
@@ -0,0 +1,160 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22400)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22401)
+@@ -1,6 +1,10 @@
+ 
+ %Test Name: GiaCaron. 
+-%Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z., Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A. (2011), A benchmark study for glacial isostatic adjustment codes. Geophysical Journal International, 185: 106–132. doi:10.1111/j.1365-246X.2011.04952.x
++%Forward Love number solution for a viscoelastic earth, model M3-L70-V01 from
++%Spada, G., Barletta, V. R., Klemann, V., Riva, R. E. M., Martinec, Z.,
++%Gasperini, P., Lund, B., Wolf, D., Vermeersen, L. L. A. and King, M. A.
++%(2011), A benchmark study for glacial isostatic adjustment codes. Geophysical
++%Journal International, 185: 106--132. doi:10.1111/j.1365-246X.2011.04952.x
+ 
+ md=model();
+ md.cluster=generic('name',oshostname(),'np',1);
+@@ -8,17 +12,17 @@
+ md.materials=materials('litho');
+ md.miscellaneous.name='FourierLoveTest';
+ 
+-md.verbose=verbose('111111101');
++md.verbose=verbose('all');
+ cst=365.25*24*3600*1000;
+ 
+-	md.materials.numlayers=6;
+-        md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
+-	md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
+-	md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
+-	md.materials.viscosity=[0             0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
+-	md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
+-	md.materials.issolid=[1 0 1 1 1 1]';
+-	md.materials.isburgers=zeros(md.materials.numlayers,1);
++md.materials.numlayers=6;
++md.materials.radius =  [10 1222.5 3.4800e+03   5.7010e+03   5.9510e+03   6.3010e+03   6.3710e+03]'*1e3;
++md.materials.density=  [1.0750e4 1.0750e+04   4.9780e+03   3.8710e+03   3.4380e+03   3.0370e+03]';
++md.materials.lame_mu=  [1e-5         0   2.2834e+00   1.0549e+00   7.0363e-01   5.0605e-01]'*1e11;
++md.materials.viscosity=[0            0   2.0000e+00   1.0000e+00   1.0000e+00   1.0000e+25]'*1e21;
++md.materials.lame_lambda=md.materials.lame_mu*0+5e14;
++md.materials.issolid=[1 0 1 1 1 1]';
++md.materials.isburgers=zeros(md.materials.numlayers,1);
+ 
+ md.love.allow_layer_deletion=1;
+ md.love.frequencies=([0]*2*pi)'/cst;
+@@ -30,8 +34,6 @@
+ 
+ md=solve(md,'lv');
+ 
+-
+-
+ %Fields and tolerances to track changes
+ %loading love numbers
+ field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
+@@ -50,8 +52,8 @@
+ md.materials.burgers_viscosity=md.materials.viscosity;
+ 
+ md=solve(md,'lv');
++
+ %Fields and tolerances to track changes
+-%loading love numbers
+ field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
+ field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={field_values{:},...
+@@ -64,10 +66,11 @@
+ 	};
+ 
+ md.love.forcing_type=9;
+-md.love.sh_nmin=2
++md.love.sh_nmin=2;
+ md.love.frequencies=([0 1e-3 1e-2 1e-1 1 -1e-3 -1e-2 -1e-1 -1]*2*pi)'/cst;
+ md.love.nfreq=length(md.love.frequencies);
+ md=solve(md,'lv');
++
+ %tidal love numbers
+ field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
+ field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+@@ -83,9 +86,7 @@
+ 	(md.results.LoveSolution.LoveLi(:,2:end)),...
+ 	};
+ 
+-
+-
+- %Many layers PREM-based model
++%Many layers PREM-based model
+ %data=load('../Data/PREM_500layers');
+ %md.love.sh_nmin=1;
+ %md.materials.radius=data(2:end-2,1);
+@@ -125,7 +126,6 @@
+ %	(md.results.LoveSolution.LoveLi(:,2:end)),...
+ %	};
+ 
+-
+ %Model VSS96 from Vermeersen, L.L.A., Sabadini, R. & Spada, G., 1996a. Analytical visco-elastic relaxation models, Geophys. Res. Lett., 23, 697–700.
+ md.materials.radius=[10, 1222.5, 3480., 3600., 3630.5, 3700., 3900., 4000., 4200., 4300., 4500., 4600., 4800., 4900., 5100., 5200., 5400., 5500., 5600.5, 5650., 5701., 5736., 5771.5, 5821., 5951., 5970.5, 6016., 6061., 6150.5, 6151.5, 6251., 6371.]'*1e3;
+ md.materials.lame_mu=[1e-5, 0., 2.933, 2.8990002, 2.8550003, 2.7340002, 2.675, 2.559, 2.502, 2.388, 2.331, 2.215, 2.157, 2.039, 1.979, 1.8560001, 1.794, 1.73, 1.639, 1.2390001, 1.224, 1.21, 1.128, 0.97700006, 0.906, 0.79, 0.773, 0.741, 0.656, 0.665, 0.602]'*1e11;
+@@ -144,7 +144,6 @@
+ md.love.frequencies=([0 1e-3 1e-2 1 -1e-3 -1e-2 -1]*2*pi)'/cst;
+ md.love.nfreq=length(md.love.frequencies);
+ 
+-
+ field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+ field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={field_values{:},...
+Index: ../trunk-jpl/test/NightlyRun/test2084.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22400)
++++ ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22401)
+@@ -18,7 +18,7 @@
+ md.materials=materials('litho')
+ md.miscellaneous.name='FourierLoveTest'
+ 
+-md.verbose=verbose('111111101')
++md.verbose=verbose('all')
+ cst=365.25*24*3600*1000
+ 
+ md.materials.numlayers=6
+@@ -44,8 +44,6 @@
+ 
+ md=solve(md,'lv')
+ 
+-
+-
+ #Fields and tolerances to track changes
+ #loading love numbers
+ field_names=['LoveHe','LoveKe','LoveLe']
+@@ -65,8 +63,6 @@
+ 
+ md=solve(md,'lv')
+ 
+-
+-
+ #Fields and tolerances to track changes
+ #loading love numbers
+ field_names+=['LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli']
+@@ -88,8 +84,6 @@
+ 
+ md=solve(md,'lv')
+ 
+-
+-
+ #tidal love numbers, check
+ field_names+=['LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti']
+ field_tolerances+=[3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9]
+@@ -105,8 +99,6 @@
+ np.array(md.results.LoveSolution.LoveLi)[:,1:]
+ ]
+ 
+-
+-
+ #Many layers PREM-based model
+ #data=load('../Data/PREM_500layers')
+ #md.love.sh_nmin=1
+@@ -188,8 +180,6 @@
+ 
+ md=solve(md,'lv')
+ 
+-
+-
+ md.love.frequencies=(np.array([0,1e-3,1e-2,1,-1e-3,-1e-2,
+ 				-1])*2*pi).reshape(-1,1)/cst
+ md.love.nfreq=len(md.love.frequencies)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22401-22402.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22401-22402.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22401-22402.diff	(revision 22755)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/src/m/classes/numberedcostfunction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/numberedcostfunction.m	(revision 22401)
++++ ../trunk-jpl/src/m/classes/numberedcostfunction.m	(revision 22402)
+@@ -5,6 +5,8 @@
+ 
+ classdef numberedcostfunction
+ 	properties (SetAccess=public) 
++		name								 = '';
++		definitionstring				 = '';
+ 		cost_functions              = NaN
+ 		cost_functions_coefficients = NaN
+ 		vx_obs                      = NaN
+@@ -22,7 +24,7 @@
+ 				case 1
+ 					self=structtoobj(numberedcostfunction(),varargin{1});
+ 				otherwise
+-					error('constructor not supported');
++					error('construtor not supported yet');
+ 			end
+ 		end % }}}
+ 		function self = extrude(self,md) % {{{
+@@ -31,13 +33,12 @@
+ 			self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
+ 			self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
+ 			if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
+-			if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
+-			if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+ 			%several responses can be used:
+ 			self.cost_functions=101;
++			
+ 
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+@@ -83,25 +84,27 @@
+ 
+ 			yts=md.constants.yts;
+ 
+-			WriteData(fid,prefix,'name','md.inversion.type','data',2,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'data',self.name,'name','md.numberedcostfunction.name','format','String');
++			WriteData(fid,prefix,'data',self.definitionstring,'name','md.numberedcostfunction.definitionstring','format','String');
++
++			WriteData(fid,prefix,'data',self.cost_functions_coefficients,'name','md.numberedcostfunction.cost_functions_coefficients','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'data',self.vx_obs,'name','md.numberedcostfunction.vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'data',self.vy_obs,'name','md.numberedcostfunction.vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'data',self.vz_obs,'name','md.numberedcostfunction.vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'data',self.vel_obs,'name','md.numberedcostfunction.vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
+ 				mattype=2;
+ 			else
+ 				mattype=1;
+ 			end
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
++			WriteData(fid,prefix,'data',self.thickness_obs,'name','md.numberedcostfunction.thickness_obs','format','DoubleMat','mattype',mattype);
++			WriteData(fid,prefix,'data',self.surface_obs,'name','md.numberedcostfunction.surface_obs','format','DoubleMat','mattype',mattype);
+ 
+ 			%process cost functions
+ 			num_cost_functions=size(self.cost_functions,2);
+ 			data=marshallcostfunctions(self.cost_functions);
+-			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
+-			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
++			WriteData(fid,prefix,'data',data,'name','md.numberedcostfunction.cost_functions','format','StringArray');
++			WriteData(fid,prefix,'data',num_cost_functions,'name','md.numberedcostfunction.num_cost_functions','format','Integer');
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
Index: /issm/oecreview/Archive/21724-22754/ISSM-22402-22403.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22402-22403.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22402-22403.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/m/classes/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/misfit.m	(revision 22402)
++++ ../trunk-jpl/src/m/classes/misfit.m	(revision 22403)
+@@ -17,16 +17,16 @@
+ classdef misfit
+ 	properties (SetAccess=public)
+ 		%misfit
+-		name					= '';
+-		definitionstring		= ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
+-		model_string			= ''; %string for field that is modeled
+-		observation				= NaN; %observed field that we compare the model against
+-		observation_string	= ''; %string for observed field.
+-		timeinterpolation		= '';
+-		local					= 1;
+-		weights					= NaN; %weight coefficients for every vertex
+-		weights_string			= ''; %string to identify this particular set of weights
+-		cumulated				= NaN; %do we cumulate misfit through time?
++		name               = '';
++		definitionstring   = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
++		model_string       = ''; %string for field that is modeled
++		observation        = NaN; %observed field that we compare the model against
++		observation_string = ''; %string for observed field.
++		timeinterpolation  = '';
++		local              = 1;
++		weights            = NaN; %weight coefficients for every vertex
++		weights_string     = ''; %string to identify this particular set of weights
++		cumulated          = NaN; %do we cumulate misfit through time?
+ 	end
+ 	
+ 	methods
Index: /issm/oecreview/Archive/21724-22754/ISSM-22403-22404.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22403-22404.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22403-22404.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22403)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22404)
+@@ -733,6 +733,7 @@
+ 	RegionaloutputEnum,
+ 	VxObsEnum,
+ 	VyObsEnum,
++	NumberedcostfunctionEnum,
+ 	/*}}}*/
+ 	/*Relaxation{{{*/
+ 	AbsoluteEnum,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22404-22405.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22404-22405.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22404-22405.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22404)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22405)
+@@ -727,6 +727,7 @@
+ 		case RegionaloutputEnum : return "Regionaloutput";
+ 		case VxObsEnum : return "VxObs";
+ 		case VyObsEnum : return "VyObs";
++		case NumberedcostfunctionEnum : return "Numberedcostfunction";
+ 		case AbsoluteEnum : return "Absolute";
+ 		case IncrementalEnum : return "Incremental";
+ 		case AugmentedLagrangianREnum : return "AugmentedLagrangianR";
Index: /issm/oecreview/Archive/21724-22754/ISSM-22405-22406.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22405-22406.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22405-22406.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22405)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22406)
+@@ -742,6 +742,7 @@
+ 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+ 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
++	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+-	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
++	      if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
++	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+ 	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+ 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+ 	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+-	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
++	      if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
++	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+ 	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
++	      if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
++	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22406-22407.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22406-22407.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22406-22407.diff	(revision 22755)
@@ -0,0 +1,153 @@
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22407)
+@@ -0,0 +1,148 @@
++/*!\file Numberedcostfunction.h
++ * \brief: header file for Numberedcostfunction object
++ */
++
++#ifndef _NUMBEREDCOSTFUNCTION_H_
++#define _NUMBEREDCOSTFUNCTION_H_
++
++/*Headers:*/
++#include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++
++
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
++
++class Numberedcostfunction: public Object, public Definition{
++
++	public: 
++
++		int   definitionenum;
++		char* name;
++		int   number_cost_functions;
++		int*  cost_functions_list;
++		
++		/*Numberedcostfunction constructors, destructors :*/
++		Numberedcostfunction(){/*{{{*/
++
++			this->definitionenum = -1;
++			this->name = NULL;
++			this->number_cost_functions = -1;
++			this->cost_functions_list = NULL;
++
++		}
++		/*}}}*/
++		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/
++
++			_assert_(number_cost_functions_in>0); 
++			_assert_(cost_functions_list_in); 
++
++			this->definitionenum=in_definitionenum;
++			this->name   = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->number_cost_functions = number_cost_functions_in;
++			this->cost_functions_list = xNew<int>(number_cost_functions_in);
++
++			for(int i=0;i<number_cost_functions_in;i++){
++				this->cost_functions_list[i] = cost_functions_list_in[i];
++			}
++		}
++		/*}}}*/
++		~Numberedcostfunction(){/*{{{*/
++			xDelete<int>(this->cost_functions_list);
++			if(this->name)xDelete(this->name);
++		}
++		/*}}}*/
++
++		/*Object virtual function resolutoin: */
++		Object* copy() {/*{{{*/
++			Numberedcostfunction* out = new Numberedcostfunction(this->name,this->definitionenum,this->number_cost_functions,this->cost_functions_list);
++			return (Object*)out;
++		}
++		/*}}}*/
++		void DeepEcho(void){/*{{{*/
++			this->Echo();
++		}
++		/*}}}*/
++		void Echo(void){/*{{{*/
++			_printf_(" Numberedcostfunction: " << this->name << " " << this->definitionenum << "\n");
++			_printf_("    number_cost_functions: "<<this->number_cost_functions<<"\n");
++			_printf_("    ");
++			for(int i=0;i<this->number_cost_functions;i++){
++				_printf_(this->cost_functions_list[i]<< "  ");
++			}
++			_printf_("\n");
++		}
++		/*}}}*/
++		int Id(void){/*{{{*/
++			return -1;
++		}
++		/*}}}*/
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++			_error_("not implemented yet!"); 
++		} 
++		/*}}}*/
++		int ObjectEnum(void){/*{{{*/
++			return NumberedcostfunctionEnum;
++		}
++		/*}}}*/
++
++		/*Definition virtual function resolutoin: */
++		int DefinitionEnum(){/*{{{*/
++			return this->definitionenum;
++		}
++		/*}}}*/
++		char* Name(){/*{{{*/
++
++			char* name2=xNew<char>(strlen(this->name)+1);
++			xMemCpy(name2,this->name,strlen(this->name)+1);
++
++			return name2;
++		}
++		/*}}}*/
++		 IssmDouble Response(FemModel* femmodel){/*{{{*/
++			
++			 /*output:*/
++			 IssmDouble value;
++
++			 /*Intermediary*/
++			 int      num_responses;
++			 int     *responses      = NULL;
++			 Results *cost_functions = NULL;
++
++
++			 /*Recover parameters*/
++			 femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++			 femmodel->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
++
++			 /*Get the value of all cost functions*/
++			 femmodel->RequestedOutputsx(&cost_functions,responses,num_responses);
++
++			 /*Get and add all contributions one by one*/
++			 IssmDouble  J=0;
++			 IssmDouble* Jlist = xNew<IssmDouble>(num_responses);
++			 for(int i=0;i<num_responses;i++){
++				 ExternalResult* result=(ExternalResult*)cost_functions->GetObjectByOffset(i);
++				 Jlist[i] = reCast<IssmDouble>(result->GetValue());
++				 J       += Jlist[i];
++			 }
++			 _assert_(cost_functions->Size()==num_responses);
++			 
++			 
++			value = J;		
++			_printf_("J: "<<J<<"\n");
++			 
++			// _error_("STOP!");
++
++			 /*done:*/
++			 return value;
++		 }
++		 /*}}}*/
++};
++
++#endif  /* _NODALVALUE_H_ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22407-22408.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22407-22408.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22407-22408.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 22407)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 22408)
+@@ -18,6 +18,7 @@
+ #include "./Massfluxatgate.h"
+ #include "./Misfit.h"
+ #include "./Nodalvalue.h"
++#include "./Numberedcostfunction.h"
+ #include "./Masscon.h"
+ #include "./Massconaxpby.h"
+ #include "./Regionaloutput.h"
Index: /issm/oecreview/Archive/21724-22754/ISSM-22408-22409.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22408-22409.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22408-22409.diff	(revision 22755)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22408)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22409)
+@@ -275,7 +275,7 @@
+ 			else if (output_definition_enums[i]==RegionaloutputEnum){
+ 				/*Deal with regional output: {{{*/
+ 
+-				/*masscon variables: */
++				/*regional output variables: */
+ 				int          numout;
+ 				char**       reg_name_s               = NULL;
+ 				char**       reg_definitionstring_s   = NULL;
+@@ -291,7 +291,7 @@
+ 				iomodel->FetchMultipleData(&reg_mask_s,&reg_mask_M_s,&reg_mask_N_s,&numout,                    "md.regionaloutput.mask");
+ 				for(j=0;j<numout;j++){
+ 
+-					/*Create a masscon object: */
++					/*Create a regional output object: */
+ 					output_definitions->AddObject(new Regionaloutput(reg_name_s[j],StringToEnumx(reg_definitionstring_s[j]),reg_outputnamestring_s[j],reg_mask_s[j],reg_mask_M_s[j]));
+ 
+ 				}
+@@ -312,9 +312,81 @@
+ 				xDelete<int>(reg_mask_N_s);
+ 				xDelete<char*>(reg_outputnamestring_s);
+ 				xDelete<char*>(reg_definitionstring_s);
++			/*}}}*/
+ 			}
++			else if (output_definition_enums[i]==NumberedcostfunctionEnum){
++				/*Deal with numbered cost function: {{{*/
++
++				/*Intermediary*/
++				int    numout;
++				char **ncf_name_s             = NULL;
++				char **ncf_definitionstring_s = NULL;
++				int    cost_function ,domaintype;
++				int    num_cost_functions;
++				char **cost_functions         = NULL;
++				int    num_costfunc;
++				char **cm_responses           = NULL;
++
++				/*Process cost functions and convert from string to enums*/
++				iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions");
++				iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.numberedcostfunction.cost_functions");
++				if(num_cost_functions<1) _error_("No cost functions found");
++				int* cost_function_enums=xNew<int>(num_cost_functions);
++				for(int i=0;i<num_cost_functions;++i){
++					cost_function_enums[i]=StringToEnumx(cost_functions[i]);
++				}
++
++				iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients");
++
++				iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name");
++				iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring");
++				if(numout>1) _error_("not implemented yet, check code here");
++
++				/*Fetch Observations */
++				iomodel->FindConstant(&domaintype,"md.mesh.domain_type");
++				for(int i=0;i<num_cost_functions;i++){
++					cost_function=cost_function_enums[i];
++					if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum);
++					else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum);
++					else if(cost_function==SurfaceAbsVelMisfitEnum
++							|| cost_function==SurfaceRelVelMisfitEnum
++							|| cost_function==SurfaceLogVelMisfitEnum
++							|| cost_function==SurfaceLogVxVyMisfitEnum
++							|| cost_function==SurfaceAverageVelMisfitEnum){
++						iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);
++						if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);
++					}
++
++				}
++
++				for(j=0;j<numout;j++){
++
++					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_costfunc,cost_function_enums));
++
++				}
++
++				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
++				
++				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions");
++				//if(num_costfunc<1) error ("no cost functions found");
++				int* costfunc_enums=xNew<int>(num_costfunc);
++				for(int i=0;i<num_costfunc;i++){
++						costfunc_enums[i]=StringToEnumx(cm_responses[i]);
++						xDelete<char>(cm_responses[i]);
++					}
++				xDelete<char*>(cm_responses);
++				
++				parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
++				xDelete<int>(costfunc_enums);
++
++				/*Free data: */
++				iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients");
++				xDelete<int>(cost_function_enums);
++				for(int i=0;i<num_cost_functions;i++) xDelete<char>(cost_functions[i]);
++				xDelete<char*>(cost_functions);
++			}
+ 			/*}}}*/
+-			else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!");
++		else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!");
+ 		}
+ 	}
+ 	parameters->AddObject(new DataSetParam(OutputdefinitionEnum,output_definitions));
+@@ -322,4 +394,5 @@
+ 	/*Free ressources:*/
+ 	delete output_definitions;
+ 	xDelete<int>(output_definition_enums);
++
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22409-22410.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22409-22410.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22409-22410.diff	(revision 22755)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22409)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22410)
+@@ -181,7 +181,6 @@
+ 				/*Free ressources:*/
+ 				for(j=0;j<numnodalvalues;j++){
+ 					char* string=NULL;
+-					IssmDouble* matrix = NULL;
+ 					string = nodalvalue_name_s[j];    xDelete<char>(string);
+ 				}
+ 				xDelete<char*>(nodalvalue_name_s);
+@@ -321,11 +320,9 @@
+ 				int    numout;
+ 				char **ncf_name_s             = NULL;
+ 				char **ncf_definitionstring_s = NULL;
++				char **cost_functions         = NULL;
+ 				int    cost_function ,domaintype;
+ 				int    num_cost_functions;
+-				char **cost_functions         = NULL;
+-				int    num_costfunc;
+-				char **cm_responses           = NULL;
+ 
+ 				/*Process cost functions and convert from string to enums*/
+ 				iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions");
+@@ -336,7 +333,7 @@
+ 					cost_function_enums[i]=StringToEnumx(cost_functions[i]);
+ 				}
+ 
+-				iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients");
++				//iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients");
+ 
+ 				iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name");
+ 				iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring");
+@@ -361,29 +358,25 @@
+ 
+ 				for(j=0;j<numout;j++){
+ 
+-					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_costfunc,cost_function_enums));
++					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums));
+ 
+ 				}
+ 
+-				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
+ 				
+-				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions");
+-				//if(num_costfunc<1) error ("no cost functions found");
+-				int* costfunc_enums=xNew<int>(num_costfunc);
+-				for(int i=0;i<num_costfunc;i++){
+-						costfunc_enums[i]=StringToEnumx(cm_responses[i]);
+-						xDelete<char>(cm_responses[i]);
+-					}
+-				xDelete<char*>(cm_responses);
+-				
+-				parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
+-				xDelete<int>(costfunc_enums);
+-
+ 				/*Free data: */
+-				iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients");
++				//iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients");
++				iomodel->DeleteData(2,"md.numberedcostfunction.name","md.numberedcostfunction.definitionstring");
+ 				xDelete<int>(cost_function_enums);
+ 				for(int i=0;i<num_cost_functions;i++) xDelete<char>(cost_functions[i]);
+ 				xDelete<char*>(cost_functions);
++
++				/*Free ressources:*/
++				for(j=0;j<numout;j++){
++					xDelete<char>(ncf_name_s[j]);
++					xDelete<char>(ncf_definitionstring_s[j]);
++				}
++				xDelete<char*>(ncf_name_s);
++				xDelete<char*>(ncf_definitionstring_s);
+ 			}
+ 			/*}}}*/
+ 		else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!");
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22409)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22410)
+@@ -37,7 +37,6 @@
+ 		}
+ 		/*}}}*/
+ 		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/
+-
+ 			_assert_(number_cost_functions_in>0); 
+ 			_assert_(cost_functions_list_in); 
+ 
+@@ -107,40 +106,34 @@
+ 		/*}}}*/
+ 		 IssmDouble Response(FemModel* femmodel){/*{{{*/
+ 			
++			 _assert_(number_cost_functions>0 && number_cost_functions<1e3); 
+ 			 /*output:*/
+ 			 IssmDouble value;
+ 
+ 			 /*Intermediary*/
+-			 int      num_responses;
+-			 int     *responses      = NULL;
+ 			 Results *cost_functions = NULL;
+ 
+-
+-			 /*Recover parameters*/
+-			 femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-			 femmodel->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+-
+ 			 /*Get the value of all cost functions*/
+-			 femmodel->RequestedOutputsx(&cost_functions,responses,num_responses);
++			 femmodel->RequestedOutputsx(&cost_functions,cost_functions_list,number_cost_functions);
+ 
+ 			 /*Get and add all contributions one by one*/
+-			 IssmDouble  J=0;
+-			 IssmDouble* Jlist = xNew<IssmDouble>(num_responses);
+-			 for(int i=0;i<num_responses;i++){
++			 IssmDouble  J=0.;
++			 IssmDouble* Jlist = xNew<IssmDouble>(number_cost_functions);
++			 for(int i=0;i<number_cost_functions;i++){
+ 				 ExternalResult* result=(ExternalResult*)cost_functions->GetObjectByOffset(i);
+ 				 Jlist[i] = reCast<IssmDouble>(result->GetValue());
+ 				 J       += Jlist[i];
+ 			 }
+-			 _assert_(cost_functions->Size()==num_responses);
++			 _assert_(cost_functions->Size()==number_cost_functions);
+ 			 
+ 			 
+ 			value = J;		
+ 			_printf_("J: "<<J<<"\n");
+-			 
+-			// _error_("STOP!");
+ 
+ 			 /*done:*/
+-			 return value;
++			delete  cost_functions;
++			xDelete<IssmDouble>(Jlist);
++			return value;
+ 		 }
+ 		 /*}}}*/
+ };
Index: /issm/oecreview/Archive/21724-22754/ISSM-22410-22411.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22410-22411.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22410-22411.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive2084.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22411-22412.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22411-22412.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22411-22412.diff	(revision 22755)
@@ -0,0 +1,89 @@
+Index: ../trunk-jpl/test/NightlyRun/test2084.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22411)
++++ ../trunk-jpl/test/NightlyRun/test2084.m	(revision 22412)
+@@ -37,7 +37,7 @@
+ %Fields and tolerances to track changes
+ %loading love numbers
+ field_names     ={'LoveH_loading_elastic','LoveK_loading_elastic','LoveL_loading_elastic'};
+-field_tolerances={1e-10,1e-10,1e-10};
++field_tolerances={7.0e-10,7.0e-10,7.0e-10};
+ field_values={...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -55,7 +55,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={field_names{:},'LoveH_loading_realpart','LoveK_loading_realpart','LoveL_loading_realpart','LoveH_loading_imagpart','LoveK_loading_imagpart','LoveL_loading_imagpart'};
+-field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++field_tolerances={field_tolerances{:},7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,:)),...
+ 	(md.results.LoveSolution.LoveKr(:,:)),...
+@@ -73,7 +73,7 @@
+ 
+ %tidal love numbers
+ field_names     ={field_names{:},'LoveH_tidal_elastic','LoveK_tidal_elastic','LoveL_tidal_elastic','LoveH_tidal_realpart','LoveK_tidal_realpart','LoveL_tidal_realpart','LoveH_tidal_imagpart','LoveK_tidal_imagpart','LoveL_tidal_imagpart'};
+-field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++field_tolerances={field_tolerances{:},7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -113,7 +113,7 @@
+ %md=solve(md,'lv');
+ %
+ %field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-%field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++%field_tolerances={field_tolerances{:},7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10};
+ %field_values={field_values{:},...
+ %	(md.results.LoveSolution.LoveHr(:,1)),...
+ %	(md.results.LoveSolution.LoveKr(:,1)),...
+@@ -145,7 +145,7 @@
+ md.love.nfreq=length(md.love.frequencies);
+ 
+ field_names     ={field_names{:},'LoveH_loadingVSS96_elastic','LoveK_loadingVSS96_elastic','LoveL_loadingVSS96_elastic','LoveH_loadingVSS96_realpart','LoveK_loadingVSS96_realpart','LoveL_loadingVSS96_realpart','LoveH_loadingVSS96_imagpart','LoveK_loadingVSS96_imagpart','LoveL_loadingVSS96_imagpart'};
+-field_tolerances={field_tolerances{:},1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++field_tolerances={field_tolerances{:},7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10,7.0e-10};
+ field_values={field_values{:},...
+ 	(md.results.LoveSolution.LoveHr(:,1)),...
+ 	(md.results.LoveSolution.LoveKr(:,1)),...
+Index: ../trunk-jpl/test/NightlyRun/test2084.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22411)
++++ ../trunk-jpl/test/NightlyRun/test2084.py	(revision 22412)
+@@ -47,7 +47,7 @@
+ #Fields and tolerances to track changes
+ #loading love numbers
+ field_names=['LoveHe','LoveKe','LoveLe']
+-field_tolerances=[3.2e-9,3.2e-9,3.2e-9]
++field_tolerances=[3.7e-9,3.7e-9,3.7e-9]
+ field_values=[
+ np.array(md.results.LoveSolution.LoveHr)[:,0],
+ np.array(md.results.LoveSolution.LoveKr)[:,0],
+@@ -66,7 +66,7 @@
+ #Fields and tolerances to track changes
+ #loading love numbers
+ field_names+=['LoveHlr','LoveKlr','LoveLlr','LoveHli','LoveKli','LoveLli']
+-field_tolerances+=[3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9]
++field_tolerances+=[3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9]
+ field_values+=[
+ np.array(md.results.LoveSolution.LoveHr),
+ np.array(md.results.LoveSolution.LoveKr),
+@@ -86,7 +86,7 @@
+ 
+ #tidal love numbers, check
+ field_names+=['LoveHtr','LoveKtr','LoveLtr','LoveHti','LoveKti','LoveLti']
+-field_tolerances+=[3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9]
++field_tolerances+=[3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9]
+ field_values+=[
+ np.array(md.results.LoveSolution.LoveHr)[:,0],
+ np.array(md.results.LoveSolution.LoveKr)[:,0],
+@@ -185,7 +185,7 @@
+ md.love.nfreq=len(md.love.frequencies)
+ 
+ field_names+=['LoveHmr','LoveKmr','LoveLmr','LoveHmi','LoveKmi','LoveLmi']
+-field_tolerances+=[3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9,3.2e-9]
++field_tolerances+=[3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9,3.7e-9]
+ field_values+=[
+ np.array(md.results.LoveSolution.LoveHr)[:,0],
+ np.array(md.results.LoveSolution.LoveKr)[:,0],
Index: /issm/oecreview/Archive/21724-22754/ISSM-22412-22413.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22412-22413.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22412-22413.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22412)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 22413)
+@@ -186,6 +186,10 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
++			if md.transient.isoceancoupling,
++				WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lat','format','DoubleMat','mattype',1);
++				WriteData(fid,prefix,'object',self,'class','mesh','fieldname','long','format','DoubleMat','mattype',1);
++			end
+ 		end % }}}
+ 		function type = domaintype(self) % {{{
+ 			type = '3D';
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22412)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 22413)
+@@ -127,4 +127,7 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3)
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1)
++		if md.transient.isoceancoupling:
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lat','format','DoubleMat','mattype',1)
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','long','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/mesh3dprisms.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22412)
++++ ../trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 22413)
+@@ -153,4 +153,7 @@
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1)
++		if md.transient.isoceancoupling:
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lat','format','DoubleMat','mattype',1)
++			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','long','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/mesh2d.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22412)
++++ ../trunk-jpl/src/m/classes/mesh2d.m	(revision 22413)
+@@ -146,6 +146,10 @@
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
+ 			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','scale_factor','format','DoubleMat','mattype',1);
++			if md.transient.isoceancoupling, %Need to add lat/long coordinates to couple with ocean as they rely on lat/long coordinate system
++				WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lat','format','DoubleMat','mattype',1);
++				WriteData(fid,prefix,'object',self,'class','mesh','fieldname','long','format','DoubleMat','mattype',1);
++			end
+ 		end % }}}
+ 		function t = domaintype(self) % {{{
+ 			t = '2Dhorizontal';
Index: /issm/oecreview/Archive/21724-22754/ISSM-22413-22414.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22413-22414.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22413-22414.diff	(revision 22755)
@@ -0,0 +1,391 @@
+Index: ../trunk-jpl/src/m/classes/adinversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/adinversion.m	(revision 22413)
++++ ../trunk-jpl/src/m/classes/adinversion.m	(nonexistent)
+@@ -1,188 +0,0 @@
+-%ADINVERSION class definition
+-%
+-%   Usage:
+-%      adinversion=adinversion();
+-
+-classdef adinversion
+-	properties (SetAccess=public) 
+-		iscontrol                   = 0
+-		control_parameters          = NaN
+-		control_scaling_factors     = NaN
+-		maxsteps                    = 0
+-		maxiter                     = 0
+-		dxmin                       = 0
+-		gttol                       = 0
+-		cost_functions              = NaN
+-		cost_functions_coefficients = NaN
+-		min_parameters              = NaN
+-		max_parameters              = NaN
+-		vx_obs                      = NaN
+-		vy_obs                      = NaN
+-		vz_obs                      = NaN
+-		vel_obs                     = NaN
+-		thickness_obs               = NaN
+-		surface_obs                 = NaN
+-
+-	end
+-	methods
+-		function self = adinversion(varargin) % {{{
+-			switch nargin
+-				case 0
+-					self=setdefaultparameters(self);
+-				case 1
+-					self=structtoobj(adinversion(),varargin{1});
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function self = setdefaultparameters(self) % {{{
+-
+-			%parameter to be inferred by control methods (only
+-			%drag and B are supported yet)
+-			self.control_parameters={'FrictionCoefficient'};
+-
+-			%Scaling factor for each control
+-			self.control_scaling_factors=1;
+-
+-			%number of iterations
+-			self.maxsteps=20;
+-			self.maxiter=40;
+-
+-			%several responses can be used:
+-			self.cost_functions={'FrictionCoefficient'};
+-
+-			%m1qn3 parameters
+-			self.dxmin  = 0.1;
+-			self.gttol = 1e-4;
+-
+-		end % }}}
+-		function md = checkconsistency(self,md,solution,analyses) % {{{
+-
+-			%Early return
+-			if ~self.iscontrol, return; end
+-
+-			if ~IssmConfig('_HAVE_M1QN3_'),
+-				md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with AD']);
+-			end
+-
+-			num_controls=numel(md.inversion.control_parameters);
+-			num_costfunc=size(md.inversion.cost_functions,2);
+-
+-			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
+-			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
+-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar',...
+-				'Vx' 'Vy' 'Thickness' 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance'});
+-			md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
+-			md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
+-			md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
+-			md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
+-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506 601:604 1001:1010]);
+-			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+-			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+-			md = checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
+-
+-			if strcmp(solution,'BalancethicknessSolution')
+-				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-			elseif strcmp(solution,'BalancethicknessSoftSolution')
+-				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-			else
+-				md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				if ~strcmp(domaintype(md.mesh),'2Dvertical'),
+-					md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				end
+-			end
+-		end % }}}
+-		function disp(self) % {{{
+-			disp(sprintf('   adinversion parameters:'));
+-			fielddisplay(self,'iscontrol','is inversion activated?');
+-			fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');
+-			fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');
+-			fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)');
+-			fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)');
+-			fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
+-			fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');
+-			fielddisplay(self,'cost_functions','indicate the type of response for each optimization step');
+-			fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
+-			fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
+-			fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
+-			fielddisplay(self,'vx_obs','observed velocity x component [m/yr]');
+-			fielddisplay(self,'vy_obs','observed velocity y component [m/yr]');
+-			fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]');
+-			fielddisplay(self,'thickness_obs','observed thickness [m]');
+-			fielddisplay(self,'surface_obs','observed surface elevation [m]');
+-			
+-			disp('Available cost functions:');
+-			disp('   101: SurfaceAbsVelMisfit');
+-			disp('   102: SurfaceRelVelMisfit');
+-			disp('   103: SurfaceLogVelMisfit');
+-			disp('   104: SurfaceLogVxVyMisfit');
+-			disp('   105: SurfaceAverageVelMisfit');
+-			disp('   201: ThicknessAbsMisfit');
+-			disp('   501: DragCoefficientAbsGradient');
+-			disp('   502: RheologyBbarAbsGradient');
+-			disp('   503: ThicknessAbsGradient');
+-		end % }}}
+-		function marshall(self,prefix,md,fid) % {{{
+-
+-			yts=md.constants.yts;
+-
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+-			WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
+-			if ~self.iscontrol, return; end
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			if(numel(self.thickness_obs)==md.mesh.numberofelements),
+-				mattype=2;
+-			else
+-				mattype=1;
+-			end
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+-
+-			%process control parameters
+-			num_control_parameters=numel(self.control_parameters);
+-			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+-			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
+-
+-			%process cost functions
+-			num_cost_functions=size(self.cost_functions,2);
+-			data=self.cost_functions;
+-			pos=find(self.cost_functions==101); data(pos)={'SurfaceAbsVelMisfit'};
+-			pos=find(self.cost_functions==102); data(pos)={'SurfaceRelVelMisfit'};
+-			pos=find(self.cost_functions==103); data(pos)={'SurfaceLogVelMisfit'};
+-			pos=find(self.cost_functions==104); data(pos)={'SurfaceLogVxVyMisfit'};
+-			pos=find(self.cost_functions==105); data(pos)={'SurfaceAverageVelMisfit'};
+-			pos=find(self.cost_functions==201); data(pos)={'ThicknessAbsMisfit'};
+-			pos=find(self.cost_functions==501); data(pos)={'DragCoefficientAbsGradient'};
+-			pos=find(self.cost_functions==502); data(pos)={'RheologyBbarAbsGradient'};
+-			pos=find(self.cost_functions==503); data(pos)={'ThicknessAbsGradient'};
+-			pos=find(self.cost_functions==504); data(pos)={'ThicknessAlongGradient'};
+-			pos=find(self.cost_functions==505); data(pos)={'ThicknessAcrossGradient'};
+-			pos=find(self.cost_functions==506); data(pos)={'BalancethicknessMisfit'};
+-			pos=find(self.cost_functions==601); data(pos)={'SurfaceAbsMisfit'};
+-			pos=find(self.cost_functions==1001); data(pos)={'Outputdefinition1'};
+-			pos=find(self.cost_functions==1002); data(pos)={'Outputdefinition2'};
+-			pos=find(self.cost_functions==1003); data(pos)={'Outputdefinition3'};
+-			pos=find(self.cost_functions==1004); data(pos)={'Outputdefinition4'};
+-			pos=find(self.cost_functions==1005); data(pos)={'Outputdefinition5'};
+-			pos=find(self.cost_functions==1006); data(pos)={'Outputdefinition6'};
+-			pos=find(self.cost_functions==1007); data(pos)={'Outputdefinition7'};
+-			pos=find(self.cost_functions==1008); data(pos)={'Outputdefinition8'};
+-			pos=find(self.cost_functions==1009); data(pos)={'Outputdefinition8'};
+-			pos=find(self.cost_functions==1010); data(pos)={'Outputdefinition10'};
+-			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
+-			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/adinversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/adinversion.py	(revision 22413)
++++ ../trunk-jpl/src/m/classes/adinversion.py	(nonexistent)
+@@ -1,193 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   /home/andrei/issm/trunk-jpl/src/m/classes/adinversion.m
+-Created on 2015-05-15 via translateToPy.py Ver 1.0 by andrei
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from np.import *
+-
+-# ADINVERSION class definition
+-# 
+-#    Usage:
+-#       adinversion=adinversion();
+-
+-class adinversion:
+-	def __init__(self): 
+-		iscontrol                   = 0
+-		control_parameters          = float('Nan')
+-		control_scaling_factors     = float('Nan')
+-		maxsteps                    = 0
+-		maxiter                     = 0
+-		dxmin                       = 0
+-		gttol                       = 0
+-		cost_functions              = float('Nan')
+-		cost_functions_coefficients = float('Nan')
+-		min_parameters              = float('Nan')
+-		max_parameters              = float('Nan')
+-		vx_obs                      = float('Nan')
+-		vy_obs                      = float('Nan')
+-		vz_obs                      = float('Nan')
+-		vel_obs                     = float('Nan')
+-		thickness_obs               = float('Nan')
+-		surface_obs                 = float('Nan')
+-
+-	def setdefaultparameters(self):
+-
+-		self.control_parameters=['FrictionCoefficient']
+-
+-
+-# 		Scaling factor for each control
+-		self.control_scaling_factors=1
+-
+-# 		number of iterations
+-		self.maxsteps=20
+-		self.maxiter=40
+-
+-#		several responses can be used:
+-		self.cost_functions=['FrictionCoefficient']
+-
+-# 		m1qn3 parameters
+-		self.dxmin  = 0.1
+-		self.gttol = 1e-4
+-
+-		return self
+-	
+-	def checkconsistency(self, md, solution, analyses): 
+-
+-# 			Early return
+-		if not self.iscontrol:
+-			return
+-
+-		if not IssmConfig('_HAVE_M1QN3_')[0]:
+-			md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with AD'])
+-
+-
+-		num_controls=np.numel(md.inversion.control_parameters)
+-		num_costfunc=np.size(md.inversion.cost_functions,2)
+-
+-
+-		md = checkfield(md,'fieldname','inversion.iscontrol','values',[0, 1])
+-		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',\
+-			['BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar',\
+-			'Vx' 'Vy' 'Thickness' 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance'])
+-		md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1, num_controls],'>',0,float('Nan'),1)
+-		md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0)
+-		md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0)
+-		md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0)
+-		md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0)
+-		md = checkfield(md,'fieldname','inversion.cost_functions','size',[1, num_costfunc],'values', [i for i in range(101,106)]+[201]+[i for i in range(501,507)]+[i for i in range(601,605)]+[i for i in range(1001, 1011)])
+-		md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices, num_costfunc],'>=',0)
+-		md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices, num_controls])
+-		md = checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices, num_controls])
+-
+-
+-		if solution=='BalancethicknessSolution':
+-			md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices],float('Nan'),1)
+-			md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices], float('Nan'),1)
+-		elif solution=='BalancethicknessSoftSolution':
+-			md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices],float('Nan'),1)
+-		else:
+-			md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices],float('Nan'),1)
+-			if not np.strcmp(domaintype(md.mesh),'2Dvertical'):
+-				md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices],float('Nan'),1)
+-		return md
+-
+-	def __repr__(self):
+-		string = '   adinversion parameters:'
+-		string ="%s\n\%s"%(string, fielddisplay(self,'iscontrol','is inversion activated?'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'control_parameters','ex: [''FrictionCoefficient''], or [''MaterialsRheologyBbar'']'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'thickness_obs','observed thickness [m]'))
+-		string ="%s\n\%s"%(string, fielddisplay(self,'surface_obs','observed surface elevation [m]'))
+-		string ="%s\n%s"%(string,'Available cost functions:');
+-		string ="%s\n%s"%(string,'   101: SurfaceAbsVelMisfit');
+-		string ="%s\n%s"%(string,'   102: SurfaceRelVelMisfit');
+-		string ="%s\n%s"%(string,'   103: SurfaceLogVelMisfit');
+-		string ="%s\n%s"%(string,'   104: SurfaceLogVxVyMisfit');
+-		string ="%s\n%s"%(string,'   105: SurfaceAverageVelMisfit');
+-		string ="%s\n%s"%(string,'   201: ThicknessAbsMisfit');
+-		string ="%s\n%s"%(string,'   501: DragCoefficientAbsGradient');
+-		string ="%s\n%s"%(string,'   502: RheologyBbarAbsGradient');
+-		string ="%s\n%s"%(string,'   503: ThicknessAbsGradient');
+-		
+-		return string
+-
+-	def marshall(self):
+-
+-		yts=md.constants.yts;
+-
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+-		WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
+-		if not self.iscontrol:
+-			return
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-		if(numel(self.thickness_obs)==md.mesh.numberofelements):
+-			mattype=2;
+-		else:
+-			mattype=1;
+-		
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+-		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+-
+-		#process control parameters
+-		num_control_parameters = np.numel(self.control_parameters);
+-		WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+-		WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
+-
+-		#process cost functions
+-		num_cost_functions=np.size(self.cost_functions,2);
+-		data=copy.deepcopy(self.cost_functions)
+-		data[np.nonzero(self.cost_functions==101)] =['SurfaceAbsVelMisfit'];
+-		data[np.nonzero(self.cost_functions==102)]=['SurfaceRelVelMisfit'];
+-		data[np.nonzero(self.cost_functions==103)]=['SurfaceLogVelMisfit'];
+-		data[np.nonzero(self.cost_functions==104)]=['SurfaceLogVxVyMisfit'];
+-		data[np.nonzero(self.cost_functions==105)]=['SurfaceAverageVelMisfit'];
+-		data[np.nonzero(self.cost_functions==201)]=['ThicknessAbsMisfit'];
+-		data[np.nonzero(self.cost_functions==501)]=['DragCoefficientAbsGradient'];
+-		data[np.nonzero(self.cost_functions==502)]=['RheologyBbarAbsGradient'];
+-		data[np.nonzero(self.cost_functions==503)]=['ThicknessAbsGradient'];
+-		data[np.nonzero(self.cost_functions==504)]=['ThicknessAlongGradient'];
+-		data[np.nonzero(self.cost_functions==505)]=['ThicknessAcrossGradient'];
+-		data[np.nonzero(self.cost_functions==506)]=['BalancethicknessMisfit'];
+-		data[np.nonzero(self.cost_functions==601)]=['SurfaceAbsMisfit'];
+-		data[np.nonzero(self.cost_functions==1001)]=['Outputdefinition1'];
+-		data[np.nonzero(self.cost_functions==1002)]=['Outputdefinition2'];
+-		data[np.nonzero(self.cost_functions==1003)]=['Outputdefinition3'];
+-		data[np.nonzero(self.cost_functions==1004)]=['Outputdefinition4'];
+-		data[np.nonzero(self.cost_functions==1005)]=['Outputdefinition5'];
+-		data[np.nonzero(self.cost_functions==1006)]=['Outputdefinition6'];
+-		data[np.nonzero(self.cost_functions==1007)]=['Outputdefinition7'];
+-		data[np.nonzero(self.cost_functions==1008)]=['Outputdefinition8'];
+-		data[np.nonzero(self.cost_functions==1009)]=['Outputdefinition8'];
+-		data[np.nonzero(self.cost_functions==1010)]=['Outputdefinition10'];
+-		WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
+-		WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
+-		
Index: /issm/oecreview/Archive/21724-22754/ISSM-22414-22415.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22414-22415.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22414-22415.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/coordsystems/gdaltransform.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/gdaltransform.m	(revision 22414)
++++ ../trunk-jpl/src/m/coordsystems/gdaltransform.m	(revision 22415)
+@@ -21,17 +21,22 @@
+ %
+ %      To get proj.4 string from EPSG, use gdalsrsinfo. Example:    gdalsrsinfo "EPSG:4326" | grep "PROJ.4"
+ 
+-	%give ourselves a unique temporary directory: 
+-	temproot=tempname; mkdir(temproot);
++	%give ourselves unique file names
++	filename_in  = tempname();
++	filename_out = tempname();
+ 
+-	fid=fopen([temproot '/.rand1234.txt'],'w');
++	fid=fopen(filename_in,'w');
+ 	fprintf(fid,'%8g %8g\n',[x(:) y(:)]');
+ 	fclose(fid);
+ 
+-	[s,r]=system(['gdaltransform -s_srs ',proj_in,' -t_srs ',proj_out,'  < ' temproot '/.rand1234.txt > ' temproot '/.rand1235.txt']);
++	[s,r]=system(['gdaltransform -s_srs ',proj_in,' -t_srs ',proj_out,'  < ' filename_in ' > ' filename_out]);
+ 	if s~=0 | ~isempty(deblank(r)),
+ 		error(r);
+ 	end
+-	A=load([temproot '/.rand1235.txt']);
++	A=load(filename_out);
+ 	xout=A(:,1); xout=reshape(xout,size(x));
+ 	yout=A(:,2); yout=reshape(yout,size(y));
++
++	%clean up
++	delete(filename_in);
++	delete(filename_out);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22415-22416.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22415-22416.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22415-22416.diff	(revision 22755)
@@ -0,0 +1,226 @@
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22415)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22416)
+@@ -121,6 +121,7 @@
+ 	bool   dakota_analysis;
+ 	bool   isgroundingline;
+ 	bool   ismovingfront;
++	bool   isoceancoupling;
+ 	bool   issmb;
+ 
+ 	/*Fetch data needed: */
+@@ -128,6 +129,7 @@
+ 	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+ 	iomodel->FindConstant(&isgroundingline,"md.transient.isgroundingline");
+ 	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
++	iomodel->FindConstant(&isoceancoupling,"md.transient.isoceancoupling");
+ 	iomodel->FindConstant(&issmb,"md.transient.issmb");
+ 
+ 	/*Finite element type*/
+@@ -157,6 +159,10 @@
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+ 
++	if(isoceancoupling){
++		iomodel->FetchDataToInput(elements,"md.mesh.lat",MeshLatEnum);
++		iomodel->FetchDataToInput(elements,"md.mesh.long",MeshLongEnum);
++	}
+ 	if(!issmb){
+ 		iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22415)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22416)
+@@ -304,6 +304,8 @@
+ 	MaterialsMantleDensityEnum,
+ 	MaterialsEarthDensityEnum,
+ 	MeshAverageVertexConnectivityEnum,
++	MeshLatEnum,
++	MeshLongEnum,
+ 	MeshXEnum,
+ 	MeshYEnum,
+ 	MeshZEnum,
+@@ -376,6 +378,7 @@
+ 	TimesteppingInterpForcingsEnum,
+ 	TransientIssmbEnum,
+ 	TransientIscouplerEnum,
++	TransientIsoceancouplingEnum,
+ 	TransientIsstressbalanceEnum,
+ 	TransientIsgroundinglineEnum,
+ 	TransientIsmasstransportEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22415)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22416)
+@@ -310,6 +310,8 @@
+ 		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
+ 		case MaterialsEarthDensityEnum : return "MaterialsEarthDensity";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
++		case MeshLatEnum : return "MeshLat";
++		case MeshLongEnum : return "MeshLong";
+ 		case MeshXEnum : return "MeshX";
+ 		case MeshYEnum : return "MeshY";
+ 		case MeshZEnum : return "MeshZ";
+@@ -382,6 +384,7 @@
+ 		case TimesteppingInterpForcingsEnum : return "TimesteppingInterpForcings";
+ 		case TransientIssmbEnum : return "TransientIssmb";
+ 		case TransientIscouplerEnum : return "TransientIscoupler";
++		case TransientIsoceancouplingEnum : return "TransientIsoceancoupling";
+ 		case TransientIsstressbalanceEnum : return "TransientIsstressbalance";
+ 		case TransientIsgroundinglineEnum : return "TransientIsgroundingline";
+ 		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22415)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22416)
+@@ -316,6 +316,8 @@
+ 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+ 	      else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
++	      else if (strcmp(name,"MeshLat")==0) return MeshLatEnum;
++	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+@@ -380,17 +382,18 @@
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
++	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+ 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
++	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+@@ -502,13 +505,13 @@
+ 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+ 	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+-	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+-	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+-	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
++	      if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
++	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
++	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
++	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+ 	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+@@ -625,13 +628,13 @@
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
+-	      else if (strcmp(name,"J")==0) return JEnum;
+-	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+-	      else if (strcmp(name,"Step")==0) return StepEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Time")==0) return TimeEnum;
++	      if (strcmp(name,"J")==0) return JEnum;
++	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
++	      else if (strcmp(name,"Step")==0) return StepEnum;
++	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+ 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+@@ -748,13 +751,13 @@
+ 	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+-	      else if (strcmp(name,"None")==0) return NoneEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
++	      if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
++	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
++	      else if (strcmp(name,"None")==0) return NoneEnum;
++	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+@@ -871,13 +874,13 @@
+ 	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+ 	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+ 	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+-	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+-	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+-	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
++	      if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
++	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
++	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
++	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+ 	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+@@ -994,13 +997,13 @@
+ 	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+-	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
++	      if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+ 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+@@ -1117,10 +1120,13 @@
+ 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+ 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+ 	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+-	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+ 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
+-         else stage=10;
++         else stage=11;
+    }
+ 	/*If we reach this point, the string provided has not been found*/
+ 	if(notfounderror)
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22415)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22416)
+@@ -106,6 +106,7 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismovingfront",TransientIsmovingfrontEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslr",TransientIsslrEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
++		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isoceancoupling",TransientIsoceancouplingEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22416-22417.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22416-22417.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22416-22417.diff	(revision 22755)
@@ -0,0 +1,146 @@
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 22416)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 22417)
+@@ -5,12 +5,16 @@
+ #ifndef _ISSM_MODULES_H_
+ #define _ISSM_MODULES_H_
+ 
++#ifdef _HAVE_BAMG_
++#include "./Bamgx/Bamgx.h"
++#include "./BamgConvertMeshx/BamgConvertMeshx.h"
++#include "./BamgTriangulatex/BamgTriangulatex.h"
++#include "./InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h"
++#endif
++
+ /*Modules: */
+ #include "./AllocateSystemMatricesx/AllocateSystemMatricesx.h"
+ #include "./AverageOntoPartitionx/AverageOntoPartitionx.h"
+-#include "./Bamgx/Bamgx.h"
+-#include "./BamgConvertMeshx/BamgConvertMeshx.h"
+-#include "./BamgTriangulatex/BamgTriangulatex.h"
+ #include "./Calvingx/Calvingx.h"
+ #include "./Chacox/Chacox.h"
+ #include "./ConfigureObjectsx/ConfigureObjectsx.h"
+@@ -39,7 +43,6 @@
+ #include "./InputExtrudex/InputExtrudex.h"
+ #include "./InterpFromMesh2dx/InterpFromMesh2dx.h"
+ #include "./InterpFromGridToMeshx/InterpFromGridToMeshx.h"
+-#include "./InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h"
+ #include "./InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.h"
+ #include "./InterpFromMeshToGridx/InterpFromMeshToGridx.h"
+ #include "./InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+Index: ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 22416)
++++ ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 22417)
+@@ -70,6 +70,8 @@
+ 		xDelete<int>(gate.numdone);
+ 	}
+ 	else if(strcmp(output,"delaunay")==0){
++
++		#ifdef _HAVE_BAMG_
+ 		int nobs,nel;
+ 		double *x     = NULL;
+ 		double *y     = NULL;
+@@ -88,6 +90,9 @@
+ 		xDelete<double>(y);
+ 		xDelete<double>(data);
+ 		xDelete<int>(index);
++		#else
++		_error_("you did not compile ISSM with bamg");
++		#endif
+ 	}
+ 	else if(strcmp(output,"nearestneighbor")==0){
+ 		/*initialize thread parameters: */
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22416)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22417)
+@@ -48,7 +48,8 @@
+ 					 ./shared/Bamg/BigPrimeNumber.cpp\
+ 					 ./modules/Bamgx/Bamgx.cpp\
+ 					 ./modules/BamgConvertMeshx/BamgConvertMeshx.cpp\
+-					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp
++					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp\
++					 ./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+ 
+ #do not include AmrBamg with ADOLC
+ if ADOLC
+@@ -303,7 +304,6 @@
+ 					./modules/ConstraintsStatex/RiftConstraintsState.cpp\
+ 					./modules/ModelProcessorx/CreateOutputDefinitions.cpp\
+ 					./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp\
+-					./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\
+ 					./classes/Inputs/PentaInput.cpp\
+ 					./classes/Inputs/TetraInput.cpp
+ #}}}
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22416)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22417)
+@@ -175,7 +175,9 @@
+ 		void CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes);
+ 		void CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints);
+ 		void GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp);
++		#ifdef _HAVE_BAMG_
+ 		void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements);
++		#endif
+ 		void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements);
+ 		void ElementsAndVerticesPartitioning(int& newnumberofvertices,int& newnumberofelements,int& elementswidth,int* newelementslist,bool** pmy_elements,int** pmy_vertices);
+ 		void WriteMeshInResults(void);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22416)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22417)
+@@ -2512,7 +2512,7 @@
+ /*}}}*/
+ 
+ /*AMR*/
+-#if !defined(_HAVE_ADOLC_)
++#if !defined(_HAVE_ADOLC_) 
+ void FemModel::ReMesh(void){/*{{{*/
+ 
+ 	/*Intermediaries*/
+@@ -2627,7 +2627,11 @@
+ 	}
+ 
+ 	/*Finally: interpolate all inputs and insert them into the new elements.*/
++	#ifdef _HAVE_BAMG_
+ 	this->InterpolateInputs(new_vertices,new_elements);
++	#else
++	_error_("Cannot interpolate inputs without bamg");
++	#endif
+ 
+ 	/*Delete old structure and set new pointers*/
+ 	delete this->vertices;		this->vertices		= new_vertices;
+@@ -2866,6 +2870,7 @@
+ 	xDelete<int>(pos);
+ }
+ /*}}}*/
++#ifdef _HAVE_BAMG_
+ void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements){/*{{{*/
+ 	
+ 	int numberofelements			= this->elements->NumberOfElements();	//global, entire old mesh
+@@ -2980,6 +2985,7 @@
+ 	xDelete<IssmDouble>(values);
+ }
+ /*}}}*/
++#endif
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+ 	/*Write the erros estimators*/
+@@ -3420,9 +3426,13 @@
+ 	spc=vspc->ToMPISerial();
+ 
+ 	/*Interpolate spc values and flags in the new partition*/
++	#ifdef _HAVE_BAMG_
+ 	InterpFromMeshToMesh2dx(&newspc,elementslist,x,y,numberofvertices,numberofelements,
+ 								spc,numberofvertices,numberofcols,
+ 								newx,newy,newnumberofvertices,NULL);
++	#else
++	_error_("cannot interpolate without bamg");
++	#endif
+ 	
+ 	/*Now, insert the interpolated constraints in the data set (constraints)*/
+ 	count=0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22417-22418.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22417-22418.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22417-22418.diff	(revision 22755)
@@ -0,0 +1,136 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 22417)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 22418)
+@@ -6,14 +6,18 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ #include "../../classes/classes.h"
++
++#ifdef _HAVE_BAMG_
+ #include "../../bamg/bamgobjects.h"
+-
+ using namespace bamg;
+ using namespace std;
++#endif
+ 
+ int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
+ 			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options){
+ 
++	#ifdef _HAVE_BAMG_
++
+ 	/*Output*/
+ 	double* data_interp=NULL;
+ 
+@@ -171,5 +175,9 @@
+ 	xDelete<long>(reft);
+ 	xDelete<int>(connectivity);
+ 	*pdata_interp=data_interp;
++
++	#else
++	_error_("Cannot interpolate without bamg support");
++	#endif
+ 	return 1;
+ }
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 22417)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 22418)
+@@ -9,7 +9,6 @@
+ #include "./Bamgx/Bamgx.h"
+ #include "./BamgConvertMeshx/BamgConvertMeshx.h"
+ #include "./BamgTriangulatex/BamgTriangulatex.h"
+-#include "./InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h"
+ #endif
+ 
+ /*Modules: */
+@@ -43,6 +42,7 @@
+ #include "./InputExtrudex/InputExtrudex.h"
+ #include "./InterpFromMesh2dx/InterpFromMesh2dx.h"
+ #include "./InterpFromGridToMeshx/InterpFromGridToMeshx.h"
++#include "./InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h"
+ #include "./InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.h"
+ #include "./InterpFromMeshToGridx/InterpFromMeshToGridx.h"
+ #include "./InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22417)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22418)
+@@ -48,8 +48,7 @@
+ 					 ./shared/Bamg/BigPrimeNumber.cpp\
+ 					 ./modules/Bamgx/Bamgx.cpp\
+ 					 ./modules/BamgConvertMeshx/BamgConvertMeshx.cpp\
+-					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp\
+-					 ./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
++					 ./modules/BamgTriangulatex/BamgTriangulatex.cpp
+ 
+ #do not include AmrBamg with ADOLC
+ if ADOLC
+@@ -566,6 +565,7 @@
+ 			./modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp\
+ 			./modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp\
+ 			./modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp\
++			./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\
+ 			./modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp\
+ 			./modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp\
+ 			./modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 22417)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 22418)
+@@ -175,9 +175,7 @@
+ 		void CreateNodes(int newnumberofvertices,int* my_vertices,int nodecounter,int analysis_enum,Nodes* nodes);
+ 		void CreateConstraints(Vertices* newfemmodel_vertices,int nodecounter,int constraintcounter,int analysis_enum,Constraints* newfemmodel_constraints);
+ 		void GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp);
+-		#ifdef _HAVE_BAMG_
+ 		void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements);
+-		#endif
+ 		void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int nodecounter,int analysis_counter,Elements* newelements);
+ 		void ElementsAndVerticesPartitioning(int& newnumberofvertices,int& newnumberofelements,int& elementswidth,int* newelementslist,bool** pmy_elements,int** pmy_vertices);
+ 		void WriteMeshInResults(void);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22417)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22418)
+@@ -2627,11 +2627,7 @@
+ 	}
+ 
+ 	/*Finally: interpolate all inputs and insert them into the new elements.*/
+-	#ifdef _HAVE_BAMG_
+ 	this->InterpolateInputs(new_vertices,new_elements);
+-	#else
+-	_error_("Cannot interpolate inputs without bamg");
+-	#endif
+ 
+ 	/*Delete old structure and set new pointers*/
+ 	delete this->vertices;		this->vertices		= new_vertices;
+@@ -2870,7 +2866,6 @@
+ 	xDelete<int>(pos);
+ }
+ /*}}}*/
+-#ifdef _HAVE_BAMG_
+ void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements){/*{{{*/
+ 	
+ 	int numberofelements			= this->elements->NumberOfElements();	//global, entire old mesh
+@@ -2985,7 +2980,6 @@
+ 	xDelete<IssmDouble>(values);
+ }
+ /*}}}*/
+-#endif
+ void FemModel::WriteMeshInResults(void){/*{{{*/
+ 
+ 	/*Write the erros estimators*/
+@@ -3426,13 +3420,9 @@
+ 	spc=vspc->ToMPISerial();
+ 
+ 	/*Interpolate spc values and flags in the new partition*/
+-	#ifdef _HAVE_BAMG_
+ 	InterpFromMeshToMesh2dx(&newspc,elementslist,x,y,numberofvertices,numberofelements,
+ 								spc,numberofvertices,numberofcols,
+ 								newx,newy,newnumberofvertices,NULL);
+-	#else
+-	_error_("cannot interpolate without bamg");
+-	#endif
+ 	
+ 	/*Now, insert the interpolated constraints in the data set (constraints)*/
+ 	count=0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22418-22419.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22418-22419.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22418-22419.diff	(revision 22755)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/m/classes/basalforcingspico.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcingspico.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/basalforcingspico.m	(revision 22419)
+@@ -0,0 +1,96 @@
++%PICO BASAL FORCINGS class definition
++%
++%   Usage:
++%      basalforcingspico=basalforcingspico();
++
++classdef basalforcingspico
++	properties (SetAccess=public) 
++		num_basins                = 0;
++		basin_id                  = NaN;
++		maxboxcount               = 0;
++		overturning_coeff         = 0.;
++		gamma_T                   = 0.;
++		box0temperature           = NaN;
++		box0salinity              = NaN;
++		geothermalflux            = NaN;
++	end
++	methods
++		function self = extrude(self,md) % {{{
++			self.basin_id=project3d(md,'vector',self.basin_id,'type','element','layer',1);
++			self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','element','layer',1); %bedrock only gets geothermal flux
++		end % }}}
++		function self = basalforcingspico(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					self=setdefaultparameters(self);
++					self=structtoobj(self,varargin{1});
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = initialize(self,md) % {{{
++			if isnan(self.maxboxcount),
++	            self.maxboxcount = 5;
++		   			disp('      no maximum number of boxes set, setting value to 5');
++		   end
++
++			if isnan(self.overturning_coeff)
++				self.overturning_coeff = 1e6; %m^3/s
++				disp('      no overturning strength set, setting value to 1e6');
++			end
++
++			if isnan(self.gamma_T)
++				self.gamma_T = 2e-5; %m/s
++				disp('      no turbulent temperature exchange velocity set, setting value to 2e-5');
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++			self.maxboxcount = 5;
++			self.overturning_coeff = 1e6; %m^3/s
++			self.gamma_T = 2e-5; %m/s
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++				md = checkfield(md,'fieldname','basalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.basin_id','Inf',1,'>',0,'<=',md.basalforcings.num_basins,'size',[md.mesh.numberofelements 1]);
++				md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.box0temperature','NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.box0salinity','NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
++
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   PICO basal melt rate parameterization:'));
++			fielddisplay(self,'num_basins','number of basins the model domain is partitioned into [unitless]');
++			fielddisplay(self,'basin_id','basin number assigned to each node [unitless]');
++			fielddisplay(self,'maxboxcount','maximum number of boxes initialized under all ice shelves');
++			fielddisplay(self,'overturning_coeff','Overturning strength [m^3/s]');
++			fielddisplay(self,'gamma_T','Turbulent temperature exchange velocity [m/s]');
++			fielddisplay(self,'box0temperature','depth averaged ocean temperature in front of the ice shelf for basin i [K]');
++			fielddisplay(self,'box0salinity','depth averaged ocean salinity in front of the ice shelf for basin i [psu]');
++			fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]');
++
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			yts=md.constants.yts;
++
++			WriteData(fid,prefix,'name','md.basalforcings.model','data',5,'format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','num_basins','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','maxboxcount','format','Integer');
++			WriteData(fid,prefix,'object',self,'fieldname','overturning_coeff','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','gamma_T','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','box0temperature','format','DoubleMat','name','md.basalforcings.box0temperature','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'fieldname','box0salinity','format','DoubleMat','name','md.basalforcings.box0salinity','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'fieldname','basin_id','format','DoubleMat','name','md.basalforcings.basin_id','mattype',2);
++			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','name','md.basalforcings.geothermalflux','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
++
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22419-22420.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22419-22420.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22419-22420.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22419)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22420)
+@@ -303,6 +303,7 @@
+ 					./modules/ConstraintsStatex/RiftConstraintsState.cpp\
+ 					./modules/ModelProcessorx/CreateOutputDefinitions.cpp\
+ 					./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp\
++					./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\
+ 					./classes/Inputs/PentaInput.cpp\
+ 					./classes/Inputs/TetraInput.cpp
+ #}}}
+@@ -565,7 +566,6 @@
+ 			./modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp\
+ 			./modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp\
+ 			./modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp\
+-			./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\
+ 			./modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp\
+ 			./modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp\
+ 			./modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22420-22421.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22420-22421.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22420-22421.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22420)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22421)
+@@ -422,14 +422,19 @@
+ 				haf_eps=10.;
+ 				if(groundedice-calvinghaf<=-haf_eps){
+ 					// ice floats freely below calvinghaf: calve freely
++					// undercutting has no effect:
++					meltingrate=0.;
+ 				}
+ 				else if(groundedice-calvinghaf>=haf_eps){ 
+ 					// ice is well above calvinghaf -> no calving back, i.e. limit calving rate to ice velocity
+ 					calvingrate=min(calvingrate,vel);
++					// ice is almost grounded: frontal undercutting has maximum effect (do nothing).
+ 				}
+ 				else{ // ice is close to calvinghaf: smooth transition between limitation and free calving.
+-					heaviside=(groundedice-calvinghaf+haf_eps)/(2.*haf_eps) + sin(PI*(groundedice-calvinghaf)/haf_eps)/(2.*PI);
++					//heaviside: 0 for floating, 1 for grounded
++					heaviside=(groundedice-calvinghaf+haf_eps)/(2.*haf_eps) + sin(PI*(groundedice-calvinghaf)/haf_eps)/(2.*PI); 
+ 					calvingrate=heaviside*(min(calvingrate,vel)-calvingrate)+calvingrate;
++					meltingrate=heaviside*meltingrate+0.;
+ 				}
+ 
+ 				norm_dlsf=0.;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22421-22422.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22421-22422.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22421-22422.diff	(revision 22755)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22421)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22422)
+@@ -13,6 +13,15 @@
+ #include "./FemModel.h"
+ #include "./ExternalResults/ExternalResult.h"
+ #include "./ExternalResults/Results.h"
++#include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
++#include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
++#include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
++#include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h"
++#include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
++#include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h"
++#include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
++#include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
++#include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ 
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+@@ -27,115 +36,22 @@
+ 		int*  cost_functions_list;
+ 		
+ 		/*Numberedcostfunction constructors, destructors :*/
+-		Numberedcostfunction(){/*{{{*/
++		Numberedcostfunction();
++		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
++		~Numberedcostfunction();
+ 
+-			this->definitionenum = -1;
+-			this->name = NULL;
+-			this->number_cost_functions = -1;
+-			this->cost_functions_list = NULL;
+-
+-		}
+-		/*}}}*/
+-		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/
+-			_assert_(number_cost_functions_in>0); 
+-			_assert_(cost_functions_list_in); 
+-
+-			this->definitionenum=in_definitionenum;
+-			this->name   = xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->number_cost_functions = number_cost_functions_in;
+-			this->cost_functions_list = xNew<int>(number_cost_functions_in);
+-
+-			for(int i=0;i<number_cost_functions_in;i++){
+-				this->cost_functions_list[i] = cost_functions_list_in[i];
+-			}
+-		}
+-		/*}}}*/
+-		~Numberedcostfunction(){/*{{{*/
+-			xDelete<int>(this->cost_functions_list);
+-			if(this->name)xDelete(this->name);
+-		}
+-		/*}}}*/
+-
+ 		/*Object virtual function resolutoin: */
+-		Object* copy() {/*{{{*/
+-			Numberedcostfunction* out = new Numberedcostfunction(this->name,this->definitionenum,this->number_cost_functions,this->cost_functions_list);
+-			return (Object*)out;
+-		}
+-		/*}}}*/
+-		void DeepEcho(void){/*{{{*/
+-			this->Echo();
+-		}
+-		/*}}}*/
+-		void Echo(void){/*{{{*/
+-			_printf_(" Numberedcostfunction: " << this->name << " " << this->definitionenum << "\n");
+-			_printf_("    number_cost_functions: "<<this->number_cost_functions<<"\n");
+-			_printf_("    ");
+-			for(int i=0;i<this->number_cost_functions;i++){
+-				_printf_(this->cost_functions_list[i]<< "  ");
+-			}
+-			_printf_("\n");
+-		}
+-		/*}}}*/
+-		int Id(void){/*{{{*/
+-			return -1;
+-		}
+-		/*}}}*/
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+-			_error_("not implemented yet!"); 
+-		} 
+-		/*}}}*/
+-		int ObjectEnum(void){/*{{{*/
+-			return NumberedcostfunctionEnum;
+-		}
+-		/*}}}*/
++		Object*	copy();
++		void		DeepEcho(void);
++		void		Echo(void);
++		int		Id(void);
++		void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int		ObjectEnum(void);
+ 
+ 		/*Definition virtual function resolutoin: */
+-		int DefinitionEnum(){/*{{{*/
+-			return this->definitionenum;
+-		}
+-		/*}}}*/
+-		char* Name(){/*{{{*/
+-
+-			char* name2=xNew<char>(strlen(this->name)+1);
+-			xMemCpy(name2,this->name,strlen(this->name)+1);
+-
+-			return name2;
+-		}
+-		/*}}}*/
+-		 IssmDouble Response(FemModel* femmodel){/*{{{*/
+-			
+-			 _assert_(number_cost_functions>0 && number_cost_functions<1e3); 
+-			 /*output:*/
+-			 IssmDouble value;
+-
+-			 /*Intermediary*/
+-			 Results *cost_functions = NULL;
+-
+-			 /*Get the value of all cost functions*/
+-			 femmodel->RequestedOutputsx(&cost_functions,cost_functions_list,number_cost_functions);
+-
+-			 /*Get and add all contributions one by one*/
+-			 IssmDouble  J=0.;
+-			 IssmDouble* Jlist = xNew<IssmDouble>(number_cost_functions);
+-			 for(int i=0;i<number_cost_functions;i++){
+-				 ExternalResult* result=(ExternalResult*)cost_functions->GetObjectByOffset(i);
+-				 Jlist[i] = reCast<IssmDouble>(result->GetValue());
+-				 J       += Jlist[i];
+-			 }
+-			 _assert_(cost_functions->Size()==number_cost_functions);
+-			 
+-			 
+-			value = J;		
+-			_printf_("J: "<<J<<"\n");
+-
+-			 /*done:*/
+-			delete  cost_functions;
+-			xDelete<IssmDouble>(Jlist);
+-			return value;
+-		 }
+-		 /*}}}*/
++		int		DefinitionEnum();
++		char*		Name();
++		IssmDouble Response(FemModel* femmodel);
+ };
+ 
+-#endif  /* _NODALVALUE_H_ */
++#endif  /* _NUMBEREDCOSTFUNCTION_H_ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22422-22423.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22422-22423.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22422-22423.diff	(revision 22755)
@@ -0,0 +1,164 @@
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.cpp	(revision 22423)
+@@ -0,0 +1,159 @@
++/*!\file Numberedcostfunction.cpp
++ * \brief: implementation for the Numberedcostfunction object
++ */
++/*Include files: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++
++/*Headers:*/
++//#include "./Definition.h"
++//#include "../datastructures/datastructures.h"
++#include "./classes.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
++#include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
++#include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
++#include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h"
++#include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
++#include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h"
++#include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
++#include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
++#include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
++
++/*}}}*/
++		
++/*Numberedcostfunction constructors, destructors :*/
++Numberedcostfunction::Numberedcostfunction(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->number_cost_functions = -1;
++	this->cost_functions_list = NULL;
++
++}
++/*}}}*/
++Numberedcostfunction::Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/
++	_assert_(number_cost_functions_in>0); 
++	_assert_(cost_functions_list_in); 
++
++	this->definitionenum=in_definitionenum;
++	this->name   = xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->number_cost_functions = number_cost_functions_in;
++	this->cost_functions_list = xNew<int>(number_cost_functions_in);
++
++	for(int i=0;i<number_cost_functions_in;i++){
++		this->cost_functions_list[i] = cost_functions_list_in[i];
++	}
++}
++/*}}}*/
++Numberedcostfunction::~Numberedcostfunction(){/*{{{*/
++	xDelete<int>(this->cost_functions_list);
++	if(this->name)xDelete(this->name);
++}
++/*}}}*/
++
++/*Object virtual function resolutoin: */
++Object* Numberedcostfunction::copy() {/*{{{*/
++	Numberedcostfunction* out = new Numberedcostfunction(this->name,this->definitionenum,this->number_cost_functions,this->cost_functions_list);
++	return (Object*)out;
++}
++/*}}}*/
++void Numberedcostfunction::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Numberedcostfunction::Echo(void){/*{{{*/
++	_printf_(" Numberedcostfunction: " << this->name << " " << this->definitionenum << "\n");
++	_printf_("    number_cost_functions: "<<this->number_cost_functions<<"\n");
++	_printf_("    ");
++	for(int i=0;i<this->number_cost_functions;i++){
++		_printf_(this->cost_functions_list[i]<< "  ");
++	}
++	_printf_("\n");
++}
++/*}}}*/
++int Numberedcostfunction::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Numberedcostfunction::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Numberedcostfunction::ObjectEnum(void){/*{{{*/
++	return NumberedcostfunctionEnum;
++}
++/*}}}*/
++
++/*Definition virtual function resolutoin: */
++int Numberedcostfunction::DefinitionEnum(){/*{{{*/
++	return this->definitionenum;
++}
++/*}}}*/
++char* Numberedcostfunction::Name(){/*{{{*/
++
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Numberedcostfunction::Response(FemModel* femmodel){/*{{{*/
++	
++	 _assert_(number_cost_functions>0 && number_cost_functions<1e3); 
++
++	 /*output:*/
++	 IssmDouble value;
++	 IssmDouble value_sum = 0.;
++
++		/*Scalar control output*/
++	 for(int i=0;i<this->number_cost_functions;i++){
++		 switch(this->cost_functions_list[i]){
++			 case SurfaceAbsVelMisfitEnum:
++				 SurfaceAbsVelMisfitx(&value,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);        
++				 break;
++			 case SurfaceRelVelMisfitEnum:            
++				 SurfaceRelVelMisfitx(&value, femmodel->elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 
++				 break;
++			 case SurfaceLogVelMisfitEnum:            
++				 SurfaceLogVelMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 
++				 break;
++			 case SurfaceLogVxVyMisfitEnum:           
++				 SurfaceLogVxVyMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 
++				 break;
++			 case ThicknessAbsMisfitEnum:             
++				 ThicknessAbsMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 
++				 break;
++			 case ThicknessAlongGradientEnum:         
++				 ThicknessAlongGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 
++				 break;
++			 case ThicknessAcrossGradientEnum:        
++				 ThicknessAcrossGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 
++				 break;
++			 case RheologyBbarAbsGradientEnum:        
++				 RheologyBbarAbsGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 
++				 break;
++			 case DragCoefficientAbsGradientEnum:     
++				 DragCoefficientAbsGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 
++				 break;
++			 default:
++				 _error_("not supported");
++		 }
++		 value_sum += value;
++ }
++
++	 /*done:*/
++	return value_sum;
++ }
++ /*}}}*/
++
Index: /issm/oecreview/Archive/21724-22754/ISSM-22423-22424.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22423-22424.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22423-22424.diff	(revision 22755)
@@ -0,0 +1,166 @@
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 22423)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 22424)
+@@ -6,7 +6,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){
++void GetVectorFromInputsx(Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){/*{{{*/
+ 
+ 	int i;
+ 	Vector<IssmDouble>* vector=NULL;
+@@ -34,10 +34,9 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*pvector=vector;
+-}
++}/*}}}*/
++void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){/*{{{*/
+ 
+-void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){
+-
+ 	/*output: */
+ 	IssmDouble* vector=NULL;
+ 
+@@ -52,10 +51,9 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*pvector=vector;
+-}
++}/*}}}*/
++void GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name){/*{{{*/
+ 
+-void GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name){
+-
+ 	int interpolation_type;
+ 	/*this one is special: we don't specify the type, but let the nature of the inputs dictace. 
+ 	 * P0 -> ElementSIdEnum, P1 ->VertexSIdEnum: */
+@@ -75,4 +73,4 @@
+ 		GetVectorFromInputsx(pvector,femmodel,name, VertexSIdEnum);
+ 	}
+ 	else _error_("interpolation type : " << interpolation_type << " not supported yet!");
+-}
++}/*}}}*/
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 22423)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 22424)
+@@ -9,6 +9,6 @@
+ /* local prototypes: */
+ void	GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type);
+ void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
+-void    GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name);
++void  GetVectorFromInputsx(IssmDouble** pvector,int* pvector_size, FemModel* femmodel,int name);
+ 
+ #endif  /* _GETVECTORFROMINPUTSXX_H */
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 22423)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 22424)
+@@ -6,7 +6,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){
++void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
+ 
+ 	int  num_controls;
+ 	int *control_type = NULL;
+@@ -31,10 +31,9 @@
+ 	/*Assign output pointers:*/
+ 	xDelete<int>(control_type);
+ 	*pvector=vector;
+-}
++}/*}}}*/
++void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
+ 
+-void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){
+-
+ 	/*output: */
+ 	IssmDouble* vector=NULL;
+ 
+@@ -49,4 +48,69 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*pvector=vector;
+-}
++}/*}}}*/
++
++/*For autodiff, we sometimes need to cast our vectors to passive*/
++#ifdef _HAVE_ADOLC_
++void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
++
++	/*Get active vector first*/
++	Vector<IssmDouble>*   activevector=NULL;
++	Vector<IssmPDouble>*  vector=NULL;
++	int                   size;
++
++	/*Retrieve some parameters*/
++	GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
++
++	/*Serialize vector*/
++	activevector->GetSize(&size);
++	IssmDouble* dactivevector=activevector->ToMPISerial();
++
++	/*Cast to passive*/
++	vector=new Vector<IssmPDouble>(size);
++	for(int i=0;i<size;i++){
++		vector->SetValue(i,reCast<IssmPDouble>(dactivevector[i]),INS_VAL);
++	}
++	vector->Assemble();
++
++	/*Assign output pointers:*/
++	delete activevector;
++	xDelete<IssmDouble>(dactivevector);
++	*pvector=vector;
++
++}/*}}}*/
++void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
++
++	/*Get active vector first*/
++	Vector<IssmDouble>*   activevector=NULL;
++	IssmPDouble*          vector=NULL;
++	int                   size;
++
++	/*Retrieve some parameters*/
++	GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
++
++	/*Serialize vector*/
++	activevector->GetSize(&size);
++	IssmDouble* dactivevector=activevector->ToMPISerial();
++
++	/*Cast to passive*/
++	vector=xNew<IssmPDouble>(size);
++	for(int i=0;i<size;i++) vector[i] = reCast<IssmPDouble>(dactivevector[i]);
++
++	/*Assign output pointers:*/
++	delete activevector;
++	xDelete<IssmDouble>(dactivevector);
++	*pvector=vector;
++
++}/*}}}*/
++#else
++void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
++
++	GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
++
++}/*}}}*/
++void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
++
++	GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
++}/*}}}*/
++#endif
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 22423)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 22424)
+@@ -10,4 +10,7 @@
+ void	GetVectorFromControlInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
+ void	GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
+ 
++void	GetPassiveVectorFromControlInputsx(Vector<double>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
++void	GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value",bool onsid=false);
++
+ #endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22424-22425.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22424-22425.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22424-22425.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22424)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22425)
+@@ -67,6 +67,11 @@
+ 
+ 		Param* FindParamObject(int enum_type);
+ 
++		/*Specific instantiations for IssmDouble*: */
++		#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_) 
++		void  FindParamAndMakePassive(double* pscalar, int enum_type);
++		#endif
++
+ };
+ 
+ /*Methods relating to parameters: */
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22424)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22425)
+@@ -274,7 +274,6 @@
+ }
+ /*}}}*/
+ void Parameters::FindParam(IssmDouble* pscalar,int param_enum){ _assert_(this);/*{{{*/
+-
+ 	_assert_(param_enum>ParametersSTARTEnum);
+ 	_assert_(param_enum<ParametersENDEnum);
+ 
+@@ -667,3 +666,21 @@
+ 	xDelete<char>(options);
+ }
+ /*}}}*/
++
++/*Specific case with ADOL-C, we might need to get double params for m1qn3*/
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_) 
++void Parameters::FindParamAndMakePassive(double* pscalar,int param_enum){ _assert_(this);/*{{{*/
++	_assert_(param_enum>ParametersSTARTEnum);
++	_assert_(param_enum<ParametersENDEnum);
++
++	/*Get "active" parameter*/
++	IssmDouble intermediary;
++	int index = param_enum - ParametersSTARTEnum -1;
++	if(!this->params[index]) _error_("Parameter " << EnumToStringx(param_enum) <<" not set");
++	this->params[index]->GetParameterValue(&intermediary);
++
++	/*cast to "passive"*/
++	*pscalar=reCast<double>(intermediary);
++}
++/*}}}*/
++#endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-22425-22426.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22425-22426.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22425-22426.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22425)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22426)
+@@ -71,8 +71,9 @@
+ 					./classes/DependentObject.cpp\
+ 					./classes/DofIndexing.cpp\
+ 					./classes/Contours.cpp\
++					./classes/Vertices.cpp\
+ 					./classes/Nodes.cpp\
+-					./classes/Vertices.cpp\
++					./classes/Numberedcostfunction.cpp\
+ 					./classes/Node.cpp\
+ 					./classes/Vertex.cpp\
+ 					./classes/Hook.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22426-22427.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22426-22427.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22426-22427.diff	(revision 22755)
@@ -0,0 +1,1091 @@
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(revision 22427)
+@@ -0,0 +1,157 @@
++/*!\file Regionaloutput.cpp
++ * \brief: implementation for the Regionaloutput object
++ */
++
++/*Include files: {{{*/
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*Headers:*/
++#include "./classes.h"
++#include "./Definition.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../classes/Params/Parameters.h"
++
++/*}}}*/
++
++Regionaloutput::Regionaloutput(char* in_name, int in_definitionenum, char* in_outputname, IssmDouble* maskin, int Min){ /*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	this->outputname = xNew<char>(strlen(in_outputname)+1);
++	xMemCpy<char>(this->outputname,in_outputname,strlen(in_outputname)+1);
++	this->name = xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->mask   = xNew<IssmDouble>(Min);
++	xMemCpy<IssmDouble>(this->mask, maskin, Min);
++
++	this->M=Min;
++
++}
++/*}}}*/
++Regionaloutput::~Regionaloutput(){/*{{{*/
++	if(this->name)xDelete(this->name); 
++	if(this->outputname)xDelete(this->outputname);
++	if(this->mask)xDelete(this->mask);
++}
++/*}}}*/
++
++/*Object virtual function resolutoin: */
++Object* Regionaloutput::copy() {/*{{{*/
++	Regionaloutput* mf = new Regionaloutput(this->name,this->definitionenum,this->outputname,this->mask,this->M);
++	return (Object*) mf;
++}
++/*}}}*/
++void Regionaloutput::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Regionaloutput::Echo(void){/*{{{*/
++	_printf_(" Regionaloutput: " << this->name << " " << this->definitionenum << "\n");
++	_printf_("    outputname enum: " << this->outputname << "Enum\n");
++	_printf_("    mask: " << this->mask << "\n");
++	_printf_("    M: " << this->M << "\n");
++}
++/*}}}*/
++int Regionaloutput::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Regionaloutput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Regionaloutput::ObjectEnum(void){/*{{{*/
++	return RegionaloutputEnum;
++}
++/*}}}*/
++
++/*Definition virtual function resolutoin: */
++int Regionaloutput::DefinitionEnum(){/*{{{*/
++
++	return this->definitionenum;
++}
++/*}}}*/
++char* Regionaloutput::Name(){/*{{{*/
++
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Regionaloutput::Response(FemModel* femmodel){/*{{{*/
++
++	int i;
++	IssmDouble val_t=0.;
++	IssmDouble all_val_t=0.;
++	int outputenum = StringToEnumx(this->outputname);
++
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++		switch(outputenum){
++			case GroundedAreaEnum:
++				val_t+=element->GroundedArea(this->mask,false);
++				break;
++			case GroundedAreaScaledEnum:
++				val_t+=element->GroundedArea(this->mask,true);
++				break;
++			case FloatingAreaEnum:
++				val_t+=element->FloatingArea(this->mask,false);
++				break;
++			case FloatingAreaScaledEnum:
++				val_t+=element->FloatingArea(this->mask,true);
++				break;
++			case IceMassEnum:
++				val_t+=element->IceMass(this->mask,false);
++				break;
++			case IceMassScaledEnum:
++				val_t+=element->IceMass(this->mask,true);
++				break;
++			case IceVolumeEnum:
++				val_t+=element->IceVolume(this->mask,false);
++				break;
++			case IceVolumeScaledEnum:
++				val_t+=element->IceVolume(this->mask,true);
++				break;
++			case IceVolumeAboveFloatationEnum:
++				val_t+=element->IceVolumeAboveFloatation(this->mask,false);
++				break;
++			case IceVolumeAboveFloatationScaledEnum:
++				val_t+=element->IceVolumeAboveFloatation(this->mask,true);
++				break;
++			case TotalFloatingBmbEnum:
++				val_t+=element->TotalFloatingBmb(this->mask,false);
++				break;
++			case TotalFloatingBmbScaledEnum:
++				val_t+=element->TotalFloatingBmb(this->mask,true);
++				break;
++			case TotalGroundedBmbEnum:
++				val_t+=element->TotalGroundedBmb(this->mask,false);
++				break;
++			case TotalGroundedBmbScaledEnum:
++				val_t+=element->TotalGroundedBmb(this->mask,true);
++				break;
++			case TotalSmbEnum:
++				val_t+=element->TotalSmb(this->mask,false);
++				break;
++			case TotalSmbScaledEnum:
++				val_t+=element->TotalSmb(this->mask,true);
++				break;
++			default:
++				_error_("Regional output type " << this->outputname << " not supported yet!");
++		}
++	}
++
++	ISSM_MPI_Allreduce ( (void*)&val_t,(void*)&all_val_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++	val_t=all_val_t;
++
++	return val_t;
++}
++/*}}}*/
++
+Index: ../trunk-jpl/src/c/classes/Nodalvalue.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodalvalue.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Nodalvalue.cpp	(revision 22427)
+@@ -0,0 +1,103 @@
++/*!\file Nodalvalue.h
++ * \brief: header file for Nodalvalue object
++ */
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*Headers:*/
++/*{{{*/
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
++#include "./classes.h"
++/*}}}*/
++
++		/*Nodalvalue constructors, destructors :*/
++Nodalvalue::Nodalvalue(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->model_enum = UNDEF;
++	this->node = -1;
++
++}
++/*}}}*/
++Nodalvalue::Nodalvalue(char* in_name, int in_definitionenum, int in_model_enum, int in_node){/*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	this->name   = xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->model_enum=in_model_enum;
++	this->node=in_node;
++}
++/*}}}*/
++Nodalvalue::~Nodalvalue(){/*{{{*/
++	if(this->name)xDelete(this->name);
++}
++/*}}}*/
++/*Object virtual function resolutoin: */
++Object* Nodalvalue::copy() {/*{{{*/
++	Nodalvalue* mf = new Nodalvalue(this->name,this->definitionenum, this->model_enum,this->node);
++	return (Object*) mf;
++}
++/*}}}*/
++void Nodalvalue::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Nodalvalue::Echo(void){/*{{{*/
++	_printf_(" Nodalvalue: " << name << " " << this->definitionenum << "\n");
++	_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
++	_printf_("    node: " << node << "\n");
++}
++/*}}}*/
++int Nodalvalue::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Nodalvalue::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Nodalvalue::ObjectEnum(void){/*{{{*/
++	return NodalvalueEnum;
++}
++/*}}}*/
++/*Definition virtual function resolutoin: */
++int Nodalvalue::DefinitionEnum(){/*{{{*/
++
++	return this->definitionenum;
++}
++/*}}}*/
++char* Nodalvalue::Name(){/*{{{*/
++
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Nodalvalue::Response(FemModel* femmodel){/*{{{*/
++	
++	 /*output:*/
++	 IssmDouble value;
++
++	 /*set index, which will be used by the NodalValue module: */
++	 femmodel->parameters->SetParam(node,IndexEnum);
++
++	 /*call Nodalvalue:*/
++	 NodalValuex(&value, model_enum, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, 
++			 femmodel->materials, femmodel->parameters);
++
++	 /*done:*/
++	 return value;
++ }
++ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Misfit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Misfit.cpp	(revision 22427)
+@@ -0,0 +1,253 @@
++/*!\file Misfit.cpp
++ * \brief: Misfit object
++ */
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./classes.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
++/*}}}*/
++		
++/*Misfit constructors, destructors :*/
++Misfit::Misfit(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->model_enum = UNDEF;
++	this->observation_enum = UNDEF;
++	this->weights_enum = UNDEF;
++	this->timeinterpolation=NULL;
++	this->local=1;
++	this->misfit=0;
++	this->lock=0;
++
++}
++/*}}}*/
++Misfit::Misfit(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, char* in_timeinterpolation, int in_local, int in_weights_enum){/*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	
++	this->name		= xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->timeinterpolation = xNew<char>(strlen(in_timeinterpolation)+1);
++	xMemCpy<char>(this->timeinterpolation,in_timeinterpolation,strlen(in_timeinterpolation)+1);
++				
++	this->model_enum=in_model_enum;
++	this->observation_enum=in_observation_enum;
++	this->weights_enum=in_weights_enum;
++	this->local=in_local;
++	
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++Misfit::~Misfit(){/*{{{*/
++	if(this->name)xDelete(this->name);
++	if(this->timeinterpolation)xDelete(this->timeinterpolation);
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++/*Object virtual function resolutoin: */
++Object* Misfit::copy() {/*{{{*/
++	Misfit* mf = new Misfit(this->name,this->definitionenum, this->model_enum,this->observation_enum,this->timeinterpolation,this->local,this->weights_enum);
++	mf->misfit=this->misfit;
++	mf->lock=this->lock;
++	return (Object*) mf;
++}
++/*}}}*/
++void Misfit::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Misfit::Echo(void){/*{{{*/
++	_printf_(" Misfit: " << name << " " << this->definitionenum << "\n");
++	_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
++	_printf_("    observation_enum: " << observation_enum << " " << EnumToStringx(observation_enum) << "\n");
++	_printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
++	_printf_("    timeinterpolation: " << timeinterpolation << "\n");
++	_printf_("    local: " << local << "\n");
++}
++/*}}}*/
++int Misfit::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Misfit::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Misfit::ObjectEnum(void){/*{{{*/
++	return MisfitEnum;
++}
++/*}}}*/
++/*Definition virtual function resolutoin: */
++int Misfit::DefinitionEnum(){/*{{{*/
++	return this->definitionenum;
++}
++/*}}}*/
++char* Misfit::Name(){/*{{{*/
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Misfit::Response(FemModel* femmodel){/*{{{*/
++		 
++	 /*diverse: */
++	 IssmDouble time,starttime,finaltime;
++	 IssmDouble dt;
++	 
++	 /*recover time parameters: */
++	 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
++	 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
++	 femmodel->parameters->FindParam(&time,TimeEnum);
++	 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++
++	 if (this->local==1){ /*area integration using elements: {{{*/
++
++		 int i;
++		 IssmDouble misfit_t=0.;
++		 IssmDouble all_misfit_t=0.;
++		 IssmDouble area_t=0.;
++		 IssmDouble all_area_t;
++
++	
++		 /*If we are locked, return time average: */
++		 if(this->lock)return misfit/(time-starttime);
++
++		 for(i=0;i<femmodel->elements->Size();i++){
++			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++			 misfit_t+=element->Misfit(model_enum,observation_enum,weights_enum);
++			 area_t+=element->MisfitArea(weights_enum);
++		 }
++
++		 ISSM_MPI_Allreduce ( (void*)&misfit_t,(void*)&all_misfit_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		 ISSM_MPI_Allreduce ( (void*)&area_t,(void*)&all_area_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		 area_t=all_area_t;
++		 misfit_t=all_misfit_t;
++		 
++		 /*Divide by surface area if not nill!: */
++		 if (area_t!=0) misfit_t=misfit_t/area_t;
++
++		 /*Add this time's contribution to curent misfit: */
++		 misfit+=dt*misfit_t;
++
++		 /*Do we lock? i.e. are we at final_time? :*/
++		 if(time==finaltime)this->lock=1;
++
++		 /*What we return is the value of misfit / time if transient*/
++		 if(time!=0.) return misfit/(time-starttime); 
++		 return misfit;
++	 } /*}}}*/
++	 else if (this->local==2){ /*vertex by vertex computation: {{{*/
++
++		 IssmDouble* model = NULL;
++		 IssmDouble* observation= NULL;
++		 IssmDouble* weights= NULL;
++		 int msize,osize,wsize;
++		 
++		 /*Are we transient?:*/
++		 if (time==0){
++			 IssmDouble misfit_t=0.;
++			 
++			 /*get global vectors: */
++			 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
++			 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
++			 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
++
++			 int count=0;
++			 for (int i=0;i<msize;i++){
++				 misfit_t += pow(model[i]-observation[i],2)*weights[i];
++				 if (weights[i]!=0)count++;
++			 }
++			 misfit=sqrt(misfit_t/count);
++
++			 /*Free ressources:*/
++			 xDelete<IssmDouble>(model);
++			 xDelete<IssmDouble>(observation);
++			 xDelete<IssmDouble>(weights);
++
++			 /*return value: */
++			 return misfit;
++		 }
++		 else{
++			 
++			 IssmDouble misfit_t=0.;
++			 IssmDouble all_misfit_t=0.;
++
++			 /*If we are locked, return time average: */
++			 if(this->lock)return misfit/(time-starttime);
++
++			 /*get global vectors: */
++			 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
++			 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
++			 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
++			 
++			 int count=0;
++			 for (int i=0;i<msize;i++){
++				 misfit_t += pow(model[i]-observation[i],2)*weights[i];
++				 if (weights[i]!=0)count++;
++			 }
++			 misfit=sqrt(misfit_t/count);
++
++			 /*Add this time's contribution to curent misfit: */
++			 misfit=sqrt(misfit_t)/count;
++			 misfit+=dt*misfit_t;
++
++			 /*Do we lock? i.e. are we at final_time? :*/
++			 if(time==finaltime)this->lock=1;
++			 
++			 /*Free ressources:*/
++			 xDelete<IssmDouble>(model);
++			 xDelete<IssmDouble>(observation);
++			 xDelete<IssmDouble>(weights);
++
++			 /*What we return is the value of misfit / time: */
++			 return misfit/(time-starttime);
++		 }
++
++	 } /*}}}*/
++	 else{ /*global computation: {{{ */
++		 
++		 IssmDouble model, observation;
++		 
++		 /*If we are locked, return time average: */
++		 if(this->lock)return misfit/(time-starttime);
++
++		 /*First, the global  model response: */
++		 model=OutputDefinitionsResponsex(femmodel,this->model_enum);
++		 /*Now, the observation is buried inside the elements, go fish it in the first element (cludgy, needs fixing): */
++		 Element* element=(Element*)femmodel->elements->GetObjectByOffset(0); _assert_(element);
++		 Input* input = element->GetInput(observation_enum); _assert_(input);
++		 input->GetInputAverage(&observation);
++		 
++		 /*Add this time's contribution to curent misfit: */
++		 misfit+=dt*(model-observation);
++		 
++		 /*Do we lock? i.e. are we at final_time? :*/
++		 if(time==finaltime)this->lock=1;
++		 
++		 /*What we return is the value of misfit / time: */
++		 return misfit/(time-starttime);
++	 } /*}}}*/
++
++ }
++	/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22426)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22427)
+@@ -18,158 +18,30 @@
+ 
+ class Regionaloutput: public Object, public Definition{
+ 
+-	public: 
++public: 
+ 
+-		int         definitionenum;
+-		char*       outputname;
+-		char*       name;
+-		IssmDouble* mask;
+-		int         M;
+-		
+-		/*Regionalicevolume: constructors, destructors :*/
+-		Regionaloutput(){/*{{{*/
++	int         definitionenum;
++	char*       outputname;
++	char*       name;
++	IssmDouble* mask;
++	int         M;
++	
++/*Regionalicevolume: constructors, destructors :*/
++Regionaloutput();
++Regionaloutput(char* in_name, int in_definitionenum, char* in_outputname, IssmDouble* maskin, int Min);
++~Regionaloutput();
+ 
+-			this->definitionenum = -1;
+-			this->outputname = NULL;
+-			this->name = NULL;
+-			this->mask=NULL;
+-			this->M=0;
++/*Object virtual function resolutoin: */
++Object* copy();
++void DeepEcho(void);
++void Echo(void);
++int Id(void);
++void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++int ObjectEnum(void);
+ 
+-		}
+-		/*}}}*/
+-		Regionaloutput(char* in_name, int in_definitionenum, char* in_outputname, IssmDouble* maskin, int Min){ /*{{{*/
+-
+-			this->definitionenum=in_definitionenum;
+-			this->outputname = xNew<char>(strlen(in_outputname)+1);
+-			xMemCpy<char>(this->outputname,in_outputname,strlen(in_outputname)+1);
+-			this->name = xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->mask   = xNew<IssmDouble>(Min);
+-			xMemCpy<IssmDouble>(this->mask, maskin, Min);
+-
+-			this->M=Min;
+-
+-		}
+-		/*}}}*/
+-		~Regionaloutput(){/*{{{*/
+-			if(this->name)xDelete(this->name); 
+-			if(this->outputname)xDelete(this->outputname);
+-			if(this->mask)xDelete(this->mask);
+-		}
+-		/*}}}*/
+-		/*Object virtual function resolutoin: */
+-		Object* copy() {/*{{{*/
+-			Regionaloutput* mf = new Regionaloutput(this->name,this->definitionenum,this->outputname,this->mask,this->M);
+-			return (Object*) mf;
+-		}
+-		/*}}}*/
+-		void DeepEcho(void){/*{{{*/
+-			this->Echo();
+-		}
+-		/*}}}*/
+-		void Echo(void){/*{{{*/
+-			_printf_(" Regionaloutput: " << this->name << " " << this->definitionenum << "\n");
+-			_printf_("    outputname enum: " << this->outputname << "Enum\n");
+-			_printf_("    mask: " << this->mask << "\n");
+-			_printf_("    M: " << this->M << "\n");
+-		}
+-		/*}}}*/
+-		int Id(void){/*{{{*/
+-			return -1;
+-		}
+-		/*}}}*/
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+-			_error_("not implemented yet!"); 
+-		} 
+-		/*}}}*/
+-		int ObjectEnum(void){/*{{{*/
+-			return RegionaloutputEnum;
+-		}
+-		/*}}}*/
+-		/*Definition virtual function resolutoin: */
+-		int DefinitionEnum(){/*{{{*/
+-
+-			return this->definitionenum;
+-		}
+-		/*}}}*/
+-		char* Name(){/*{{{*/
+-
+-			char* name2=xNew<char>(strlen(this->name)+1);
+-			xMemCpy(name2,this->name,strlen(this->name)+1);
+-
+-			return name2;
+-		}
+-		/*}}}*/
+-		IssmDouble Response(FemModel* femmodel){/*{{{*/
+-
+-			int i;
+-			IssmDouble val_t=0.;
+-			IssmDouble all_val_t=0.;
+-			int outputenum = StringToEnumx(this->outputname);
+-
+-			for(i=0;i<femmodel->elements->Size();i++){
+-				Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+-				switch(outputenum){
+-					case GroundedAreaEnum:
+-						val_t+=element->GroundedArea(this->mask,false);
+-						break;
+-					case GroundedAreaScaledEnum:
+-						val_t+=element->GroundedArea(this->mask,true);
+-						break;
+-					case FloatingAreaEnum:
+-						val_t+=element->FloatingArea(this->mask,false);
+-						break;
+-					case FloatingAreaScaledEnum:
+-						val_t+=element->FloatingArea(this->mask,true);
+-						break;
+-					case IceMassEnum:
+-						val_t+=element->IceMass(this->mask,false);
+-						break;
+-					case IceMassScaledEnum:
+-						val_t+=element->IceMass(this->mask,true);
+-						break;
+-					case IceVolumeEnum:
+-						val_t+=element->IceVolume(this->mask,false);
+-						break;
+-					case IceVolumeScaledEnum:
+-						val_t+=element->IceVolume(this->mask,true);
+-						break;
+-					case IceVolumeAboveFloatationEnum:
+-						val_t+=element->IceVolumeAboveFloatation(this->mask,false);
+-						break;
+-					case IceVolumeAboveFloatationScaledEnum:
+-						val_t+=element->IceVolumeAboveFloatation(this->mask,true);
+-						break;
+-					case TotalFloatingBmbEnum:
+-						val_t+=element->TotalFloatingBmb(this->mask,false);
+-						break;
+-					case TotalFloatingBmbScaledEnum:
+-						val_t+=element->TotalFloatingBmb(this->mask,true);
+-						break;
+-					case TotalGroundedBmbEnum:
+-						val_t+=element->TotalGroundedBmb(this->mask,false);
+-						break;
+-					case TotalGroundedBmbScaledEnum:
+-						val_t+=element->TotalGroundedBmb(this->mask,true);
+-						break;
+-					case TotalSmbEnum:
+-						val_t+=element->TotalSmb(this->mask,false);
+-						break;
+-					case TotalSmbScaledEnum:
+-						val_t+=element->TotalSmb(this->mask,true);
+-						break;
+-					default:
+-						_error_("Regional output type " << this->outputname << " not supported yet!");
+-				}
+-			}
+-
+-			ISSM_MPI_Allreduce ( (void*)&val_t,(void*)&all_val_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+-			val_t=all_val_t;
+-
+-			return val_t;
+-		}
+-		/*}}}*/
++/*Definition virtual function resolutoin: */
++int DefinitionEnum();
++char* Name();
++IssmDouble Response(FemModel* femmodel);
+ };
+-
+ #endif  /* _REGIONALOUTPUT_H_ */
+Index: ../trunk-jpl/src/c/classes/Nodalvalue.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22426)
++++ ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22427)
+@@ -31,87 +31,22 @@
+ 		int         node;
+ 		
+ 		/*Nodalvalue constructors, destructors :*/
+-		Nodalvalue(){/*{{{*/
++Nodalvalue();
++Nodalvalue(char* in_name, int in_definitionenum, int in_model_enum, int in_node);
++~Nodalvalue();
+ 
+-			this->definitionenum = -1;
+-			this->name = NULL;
+-			this->model_enum = UNDEF;
+-			this->node = -1;
++/*Object virtual function resolutoin: */
++Object* copy();
++void DeepEcho(void);
++void Echo(void);
++int Id(void);
++void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++int ObjectEnum(void);
+ 
+-		}
+-		/*}}}*/
+-		Nodalvalue(char* in_name, int in_definitionenum, int in_model_enum, int in_node){/*{{{*/
+-
+-			this->definitionenum=in_definitionenum;
+-			this->name   = xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->model_enum=in_model_enum;
+-			this->node=in_node;
+-		}
+-		/*}}}*/
+-		~Nodalvalue(){/*{{{*/
+-			if(this->name)xDelete(this->name);
+-		}
+-		/*}}}*/
+-		/*Object virtual function resolutoin: */
+-		Object* copy() {/*{{{*/
+-			Nodalvalue* mf = new Nodalvalue(this->name,this->definitionenum, this->model_enum,this->node);
+-			return (Object*) mf;
+-		}
+-		/*}}}*/
+-		void DeepEcho(void){/*{{{*/
+-			this->Echo();
+-		}
+-		/*}}}*/
+-		void Echo(void){/*{{{*/
+-			_printf_(" Nodalvalue: " << name << " " << this->definitionenum << "\n");
+-			_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
+-			_printf_("    node: " << node << "\n");
+-		}
+-		/*}}}*/
+-		int Id(void){/*{{{*/
+-			return -1;
+-		}
+-		/*}}}*/
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+-			_error_("not implemented yet!"); 
+-		} 
+-		/*}}}*/
+-		int ObjectEnum(void){/*{{{*/
+-			return NodalvalueEnum;
+-		}
+-		/*}}}*/
+-		/*Definition virtual function resolutoin: */
+-		int DefinitionEnum(){/*{{{*/
+-
+-			return this->definitionenum;
+-		}
+-		/*}}}*/
+-		char* Name(){/*{{{*/
+-
+-			char* name2=xNew<char>(strlen(this->name)+1);
+-			xMemCpy(name2,this->name,strlen(this->name)+1);
+-
+-			return name2;
+-		}
+-		/*}}}*/
+-		 IssmDouble Response(FemModel* femmodel){/*{{{*/
+-			
+-			 /*output:*/
+-			 IssmDouble value;
+-
+-			 /*set index, which will be used by the NodalValue module: */
+-			 femmodel->parameters->SetParam(node,IndexEnum);
+-
+-			 /*call Nodalvalue:*/
+-			 NodalValuex(&value, model_enum, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, 
+-					 femmodel->materials, femmodel->parameters);
+-
+-			 /*done:*/
+-			 return value;
+-		 }
+-		 /*}}}*/
++/*Definition virtual function resolutoin: */
++int DefinitionEnum();
++char* Name();
++IssmDouble Response(FemModel* femmodel);
+ };
+ 
+ #endif  /* _NODALVALUE_H_ */
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22426)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22427)
+@@ -6,7 +6,6 @@
+ #define _MISFIT_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+ #include "./Definition.h"
+ #include "../datastructures/datastructures.h"
+ #include "./Elements/Element.h"
+@@ -16,9 +15,9 @@
+ #include "../classes/Params/Parameters.h"
+ #include "../classes/Inputs/Input.h"
+ #include "../classes/gauss/Gauss.h"
+-/*}}}*/
++
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+-void	GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
++void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+ 
+ class Misfit: public Object, public Definition{
+ 
+@@ -36,233 +35,21 @@
+ 		IssmDouble  misfit; //value carried over in time.
+ 		
+ 		/*Misfit constructors, destructors :*/
+-		Misfit(){/*{{{*/
+-
+-			this->definitionenum = -1;
+-			this->name = NULL;
+-			this->model_enum = UNDEF;
+-			this->observation_enum = UNDEF;
+-			this->weights_enum = UNDEF;
+-			this->timeinterpolation=NULL;
+-			this->local=1;
+-			this->misfit=0;
+-			this->lock=0;
+-
+-		}
+-		/*}}}*/
+-		Misfit(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, char* in_timeinterpolation, int in_local, int in_weights_enum){/*{{{*/
+-
+-			this->definitionenum=in_definitionenum;
+-			
+-			this->name		= xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->timeinterpolation = xNew<char>(strlen(in_timeinterpolation)+1);
+-			xMemCpy<char>(this->timeinterpolation,in_timeinterpolation,strlen(in_timeinterpolation)+1);
+-						
+-			this->model_enum=in_model_enum;
+-			this->observation_enum=in_observation_enum;
+-			this->weights_enum=in_weights_enum;
+-			this->local=in_local;
+-			
+-			this->misfit=0;
+-			this->lock=0;
+-		}
+-		/*}}}*/
+-		~Misfit(){/*{{{*/
+-			if(this->name)xDelete(this->name);
+-			if(this->timeinterpolation)xDelete(this->timeinterpolation);
+-			this->misfit=0;
+-			this->lock=0;
+-		}
+-		/*}}}*/
++		Misfit();
++		Misfit(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, char* in_timeinterpolation, int in_local, int in_weights_enum);
++		~Misfit();
++		
+ 		/*Object virtual function resolutoin: */
+-		Object* copy() {/*{{{*/
+-			Misfit* mf = new Misfit(this->name,this->definitionenum, this->model_enum,this->observation_enum,this->timeinterpolation,this->local,this->weights_enum);
+-			mf->misfit=this->misfit;
+-			mf->lock=this->lock;
+-			return (Object*) mf;
+-		}
+-		/*}}}*/
+-		void DeepEcho(void){/*{{{*/
+-			this->Echo();
+-		}
+-		/*}}}*/
+-		void Echo(void){/*{{{*/
+-			_printf_(" Misfit: " << name << " " << this->definitionenum << "\n");
+-			_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
+-			_printf_("    observation_enum: " << observation_enum << " " << EnumToStringx(observation_enum) << "\n");
+-			_printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
+-			_printf_("    timeinterpolation: " << timeinterpolation << "\n");
+-			_printf_("    local: " << local << "\n");
+-		}
+-		/*}}}*/
+-		int Id(void){/*{{{*/
+-			return -1;
+-		}
+-		/*}}}*/
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+-			_error_("not implemented yet!"); 
+-		} 
+-		/*}}}*/
+-		int ObjectEnum(void){/*{{{*/
+-			return MisfitEnum;
+-		}
+-		/*}}}*/
++		Object* copy();
++		void DeepEcho(void);
++		void Echo(void);
++		int Id(void);
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int ObjectEnum(void);
++		
+ 		/*Definition virtual function resolutoin: */
+-		int DefinitionEnum(){/*{{{*/
+-			return this->definitionenum;
+-		}
+-		/*}}}*/
+-		char* Name(){/*{{{*/
+-			char* name2=xNew<char>(strlen(this->name)+1);
+-			xMemCpy(name2,this->name,strlen(this->name)+1);
+-
+-			return name2;
+-		}
+-		/*}}}*/
+-		 IssmDouble Response(FemModel* femmodel){/*{{{*/
+-				 
+-			 /*diverse: */
+-			 IssmDouble time,starttime,finaltime;
+-			 IssmDouble dt;
+-			 
+-			 /*recover time parameters: */
+-			 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
+-			 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
+-			 femmodel->parameters->FindParam(&time,TimeEnum);
+-			 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-
+-			 if (this->local==1){ /*area integration using elements: {{{*/
+-
+-				 int i;
+-				 IssmDouble misfit_t=0.;
+-				 IssmDouble all_misfit_t=0.;
+-				 IssmDouble area_t=0.;
+-				 IssmDouble all_area_t;
+-
+-			
+-				 /*If we are locked, return time average: */
+-				 if(this->lock)return misfit/(time-starttime);
+-
+-				 for(i=0;i<femmodel->elements->Size();i++){
+-					 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+-					 misfit_t+=element->Misfit(model_enum,observation_enum,weights_enum);
+-					 area_t+=element->MisfitArea(weights_enum);
+-				 }
+-
+-				 ISSM_MPI_Allreduce ( (void*)&misfit_t,(void*)&all_misfit_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+-				 ISSM_MPI_Allreduce ( (void*)&area_t,(void*)&all_area_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+-				 area_t=all_area_t;
+-				 misfit_t=all_misfit_t;
+-				 
+-				 /*Divide by surface area if not nill!: */
+-				 if (area_t!=0) misfit_t=misfit_t/area_t;
+-
+-				 /*Add this time's contribution to curent misfit: */
+-				 misfit+=dt*misfit_t;
+-
+-				 /*Do we lock? i.e. are we at final_time? :*/
+-				 if(time==finaltime)this->lock=1;
+-
+-				 /*What we return is the value of misfit / time if transient*/
+-				 if(time!=0.) return misfit/(time-starttime); 
+-				 return misfit;
+-			 } /*}}}*/
+-			 else if (this->local==2){ /*vertex by vertex computation: {{{*/
+-
+-				 IssmDouble* model = NULL;
+-				 IssmDouble* observation= NULL;
+-				 IssmDouble* weights= NULL;
+-				 int msize,osize,wsize;
+-				 
+-				 /*Are we transient?:*/
+-				 if (time==0){
+-					 IssmDouble misfit_t=0.;
+-					 
+-					 /*get global vectors: */
+-					 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
+-					 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
+-					 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
+-
+-					 int count=0;
+-					 for (int i=0;i<msize;i++){
+-						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
+-						 if (weights[i]!=0)count++;
+-					 }
+-					 misfit=sqrt(misfit_t/count);
+-
+-					 /*Free ressources:*/
+-					 xDelete<IssmDouble>(model);
+-					 xDelete<IssmDouble>(observation);
+-					 xDelete<IssmDouble>(weights);
+-
+-					 /*return value: */
+-					 return misfit;
+-				 }
+-				 else{
+-					 
+-					 IssmDouble misfit_t=0.;
+-					 IssmDouble all_misfit_t=0.;
+-
+-					 /*If we are locked, return time average: */
+-					 if(this->lock)return misfit/(time-starttime);
+-
+-					 /*get global vectors: */
+-					 GetVectorFromInputsx(&model,&msize,femmodel,model_enum);
+-					 GetVectorFromInputsx(&observation,&osize,femmodel,observation_enum);_assert_(msize==osize);
+-					 GetVectorFromInputsx(&weights,&wsize,femmodel,weights_enum); _assert_(wsize==msize);
+-					 
+-					 int count=0;
+-					 for (int i=0;i<msize;i++){
+-						 misfit_t += pow(model[i]-observation[i],2)*weights[i];
+-						 if (weights[i]!=0)count++;
+-					 }
+-					 misfit=sqrt(misfit_t/count);
+-
+-					 /*Add this time's contribution to curent misfit: */
+-					 misfit=sqrt(misfit_t)/count;
+-					 misfit+=dt*misfit_t;
+-
+-					 /*Do we lock? i.e. are we at final_time? :*/
+-					 if(time==finaltime)this->lock=1;
+-					 
+-					 /*Free ressources:*/
+-					 xDelete<IssmDouble>(model);
+-					 xDelete<IssmDouble>(observation);
+-					 xDelete<IssmDouble>(weights);
+-
+-					 /*What we return is the value of misfit / time: */
+-					 return misfit/(time-starttime);
+-				 }
+-
+-			 } /*}}}*/
+-			 else{ /*global computation: {{{ */
+-				 
+-				 IssmDouble model, observation;
+-				 
+-				 /*If we are locked, return time average: */
+-				 if(this->lock)return misfit/(time-starttime);
+-
+-				 /*First, the global  model response: */
+-				 model=OutputDefinitionsResponsex(femmodel,this->model_enum);
+-				 /*Now, the observation is buried inside the elements, go fish it in the first element (cludgy, needs fixing): */
+-				 Element* element=(Element*)femmodel->elements->GetObjectByOffset(0); _assert_(element);
+-				 Input* input = element->GetInput(observation_enum); _assert_(input);
+-				 input->GetInputAverage(&observation);
+-				 
+-				 /*Add this time's contribution to curent misfit: */
+-				 misfit+=dt*(model-observation);
+-				 
+-				 /*Do we lock? i.e. are we at final_time? :*/
+-				 if(time==finaltime)this->lock=1;
+-				 
+-				 /*What we return is the value of misfit / time: */
+-				 return misfit/(time-starttime);
+-			 } /*}}}*/
+-
+-		 }
+-			/*}}}*/
++		int DefinitionEnum();
++		char* Name();
++		IssmDouble Response(FemModel* femmodel);
+ };
+-
+ #endif  /* _MISFIT_H_ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22427-22428.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22427-22428.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22427-22428.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22427)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22428)
+@@ -74,6 +74,9 @@
+ 					./classes/Vertices.cpp\
+ 					./classes/Nodes.cpp\
+ 					./classes/Numberedcostfunction.cpp\
++					./classes/Misfit.cpp\
++					./classes/Regionaloutput.cpp\
++					./classes/Nodalvalue.cpp\
+ 					./classes/Node.cpp\
+ 					./classes/Vertex.cpp\
+ 					./classes/Hook.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22428-22429.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22428-22429.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22428-22429.diff	(revision 22755)
@@ -0,0 +1,222 @@
+Index: ../trunk-jpl/test/NightlyRun/test244.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test244.m	(revision 22428)
++++ ../trunk-jpl/test/NightlyRun/test244.m	(revision 22429)
+@@ -72,7 +72,7 @@
+ 
+ %  nond_sampling study
+ md.qmu.method=dakota_method('nond_samp');
+-md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',4,'sample_type','lhs');
++md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',3,'sample_type','lhs');
+ dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
+ if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+ 	md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'rng','rnum2');
+Index: ../trunk-jpl/test/Archives/Archive244.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive243.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22428)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22429)
+@@ -2785,10 +2785,10 @@
+ 		/*}}}*/
+ 
+ 		/*Snow grain metamorphism:*/
+-		if(isgraingrowth)grainGrowth(re, gdn, gsp, T, dz, d, W, smb_dt, m, aIdx,this->Sid());
++		if(isgraingrowth)grainGrowth(&re, &gdn, &gsp, T, dz, d, W, smb_dt, m, aIdx,this->Sid());
+ 
+ 		/*Snow, firn and ice albedo:*/
+-		if(isalbedo)albedo(a,aIdx,re,d,cldFrac,aIce, aSnow,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
++		if(isalbedo)albedo(&a,aIdx,re,d,cldFrac,aIce, aSnow,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
+ 
+ 
+ 		/*Distribution of absorbed short wave radation with depth:*/
+@@ -2798,7 +2798,7 @@
+ 		netSW = cellsum(swf,m);
+ 
+ 		/*Thermal profile computation:*/
+-		if(isthermal)thermo(&EC, T, dz, d, swf, dlw, Ta, V, eAir, pAir, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
++		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
+ 
+ 		/*Change in thickness of top cell due to evaporation/condensation  assuming same density as top cell. 
+ 		 * need to fix this in case all or more of cell evaporates */
+@@ -2812,7 +2812,7 @@
+ 		if(ismelt)melt(&M, &R, &mAdd, &dz_add, &T, &d, &dz, &W, &a, &re, &gdn, &gsp, &m, dzMin, zMax, zMin, zTop,rho_ice,this->Sid());
+ 
+ 		/*Allow non-melt densification and determine compaction [m]*/
+-		if(isdensification)densification(d,dz, T, re, denIdx, C, smb_dt, Tmean,rho_ice,m,this->Sid());
++		if(isdensification)densification(&d,&dz, T, re, denIdx, C, smb_dt, Tmean,rho_ice,m,this->Sid());
+ 
+ 		/*Calculate upward longwave radiation flux [W m-2] not used in energy balance. Calculated for every 
+ 		 * sub-time step in thermo equations*/
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22428)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22429)
+@@ -23,12 +23,12 @@
+ void       Gembx(FemModel* femmodel);
+ void       GembgridInitialize(IssmDouble** pdz, int* psize, IssmDouble zTop, IssmDouble dzTop, IssmDouble zMax, IssmDouble zY); 
+ IssmDouble Marbouty(IssmDouble T, IssmDouble d, IssmDouble dT);
+-void grainGrowth(IssmDouble* pre, IssmDouble* pgdn, IssmDouble* pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid);
+-void albedo(IssmDouble* a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
++void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid);
++void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
+ void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
+-void thermo(IssmDouble* pEC, IssmDouble* T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
++void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
+ void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid); 
+ void melt(IssmDouble* pM, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble dIce, int sid);
+-void densification(IssmDouble* d,IssmDouble* dz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid);
++void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid);
+ void turbulentFlux(IssmDouble* pshf, IssmDouble* plhf, IssmDouble* pEC, IssmDouble Ta, IssmDouble Ts, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble ds, IssmDouble Ws, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
+ #endif  /* _SurfaceMassBalancex_H*/
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22428)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22429)
+@@ -146,7 +146,7 @@
+ 	return F*H*G*E;
+ 
+ } /*}}}*/
+-void grainGrowth(IssmDouble* re, IssmDouble* gdn, IssmDouble* gsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx,int sid){ /*{{{*/
++void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx,int sid){ /*{{{*/
+ 
+ 	/*Created by: Alex S. Gardner, University of Alberta
+ 
+@@ -190,7 +190,17 @@
+ 	IssmDouble* lwc=NULL;
+ 	IssmDouble  Q=0.0;
+ 
++	/*output: */
++	IssmDouble* re=NULL;
++	IssmDouble* gdn=NULL;
++	IssmDouble* gsp=NULL;
++
+ 	if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0)_printf0_("   grain growth module\n");
++
++	/*Recover pointers: */
++	re=*pre;
++	gdn=*pgdn;
++	gsp=*pgsp;
+ 	
+ 	/*only when aIdx = 1 or 2 do we run grainGrowth: */
+ 	if(aIdx!=1 & aIdx!=2){
+@@ -320,8 +330,13 @@
+ 	xDelete<IssmDouble>(zGPC);
+ 	xDelete<IssmDouble>(lwc);
+ 
++	/*Assign output pointers:*/
++	*pre=re;
++	*pgdn=gdn;
++	*pgsp=gsp;
++
+ }  /*}}}*/
+-void albedo(IssmDouble* a, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
++void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
+ 
+ 	//// Calculates Snow, firn and ice albedo as a function of:
+ 	//   1 : effective grain radius (Gardner & Sharp, 2009)
+@@ -365,7 +380,13 @@
+ 	// a = albedo(4, [], [], [], 0.48, 0.85, [0.8 0.5 ... 0.48], ...
+ 	//   [273 272.5 ... 265], [0 0.001 ... 0], 0, 0.01, 15, 15, 7, 3600)
+ 
++	/*output: */
++	IssmDouble* a=NULL;
++
+ 	if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0)_printf0_("   albedo module\n");
++
++	/*Recover pointers: */
++	a=*pa;
+         
+ 	//some constants:
+ 	const IssmDouble dSnow = 300;   // density of fresh snow [kg m-3]       
+@@ -470,8 +491,12 @@
+ 	if (a[0] > 1) _printf_("albedo > 1.0\n");
+ 	else if (a[0] < 0) _printf_("albedo is negative\n");
+ 	else if (xIsNan(a[0])) _error_("albedo == NAN\n");
++
++	/*Assign output pointers:*/
++	*pa=a;
++
+ }  /*}}}*/
+-void thermo(IssmDouble* pEC, IssmDouble* T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
++void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
+ 
+ 	/* ENGLACIAL THERMODYNAMICS*/
+ 	 
+@@ -543,9 +568,13 @@
+ 	
+ 	/*outputs:*/
+ 	IssmDouble EC=0.0;
++	IssmDouble* T=NULL;
+ 
+ 	if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0)_printf0_("   thermal module\n");
+ 
++	/*Recover pointers: */
++	T=*pT;
++
+ 	ds = d[0];      // density of top grid cell
+ 
+ 	// calculated air density [kg/m3]
+@@ -625,8 +654,9 @@
+ 	for(int i=0;i<m-1;i++) dzD[i] = dz[i+1];
+ 
+ 	// determine minimum acceptable delta t (diffusion number > 1/2) [s]
++	// NS: 2.16.18 divided dt by 9 for stability (changed 3 to 27)
+ 	dt=1e12; 
+-	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (3 * K[i]));
++	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (27 * K[i]));
+ 
+ 	// smallest possible even integer of 60 min where diffusion number > 1/2
+ 	// must go evenly into one hour or the data frequency if it is smaller
+@@ -832,6 +862,7 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*pEC=EC;
++	*pT=T;
+ 
+ }  /*}}}*/
+ void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid){ /*{{{*/
+@@ -1753,7 +1784,7 @@
+ 	*pn=n;
+ 
+ } /*}}}*/ 
+-void densification(IssmDouble* d,IssmDouble* dz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid){ /*{{{*/
++void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid){ /*{{{*/
+ 
+ 	//// THIS NEEDS TO BE DOUBLE CHECKED AS THERE SEAMS TO BE LITTLE DENSIFICATION IN THE MODEL OUTOUT [MAYBE COMPATION IS COMPNSATED FOR BY TRACES OF SNOW???]
+ 
+@@ -1805,9 +1836,17 @@
+ 	IssmDouble c0=0.0;
+ 	IssmDouble c1=0.0;
+ 	IssmDouble H=0.0;
++
++	/*output: */
++	IssmDouble* dz=NULL;
++	IssmDouble* d=NULL;
+ 	
+ 	if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0)_printf0_("   densification module\n");
+ 
++	/*Recover pointers: */
++	dz=*pdz;
++	d=*pd;
++
+ 	// initial mass
+ 	IssmDouble* mass_init = xNew<IssmDouble>(m);for(int i=0;i<m;i++) mass_init[i]=d[i] * dz[i];
+ 	
+@@ -1877,6 +1916,10 @@
+ 	xDelete<IssmDouble>(cumdz);
+ 	xDelete<IssmDouble>(obp);
+ 
++	/*Assign output pointers:*/
++	*pdz=dz;
++	*pd=d;
++
+ } /*}}}*/
+ void turbulentFlux(IssmDouble* pshf, IssmDouble* plhf, IssmDouble* pEC, IssmDouble Ta, IssmDouble Ts, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble ds, IssmDouble Ws, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid){ /*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22429-22430.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22429-22430.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22429-22430.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive243.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22430-22431.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22430-22431.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22430-22431.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test243.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.m	(revision 22430)
++++ ../trunk-jpl/test/NightlyRun/test243.m	(revision 22431)
+@@ -44,7 +44,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance'};
+-field_tolerances ={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
++field_tolerances ={1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-12};
+ 
+ field_values={...
+ 	(md.results.TransientSolution(end).SmbDz(1,1:240)),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22431-22432.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22431-22432.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22431-22432.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/test/NightlyRun/test243.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.m	(revision 22431)
++++ ../trunk-jpl/test/NightlyRun/test243.m	(revision 22432)
+@@ -44,7 +44,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance'};
+-field_tolerances ={1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-12};
++field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12};
+ 
+ field_values={...
+ 	(md.results.TransientSolution(end).SmbDz(1,1:240)),...
+Index: ../trunk-jpl/test/NightlyRun/test243.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.py	(revision 22431)
++++ ../trunk-jpl/test/NightlyRun/test243.py	(revision 22432)
+@@ -57,7 +57,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance']
+-field_tolerances = [5e-4,5e-5,0.0006,0.0002,1e-5,0.0003,2e-5,2e-7,1e-7]
++field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12]
+ #shape is different in python solution (fixed using reshape) which can cause test failure:
+ field_values = [
+ 	md.results.TransientSolution[-1].SmbDz[0,0:240].reshape(1,-1),
+Index: ../trunk-jpl/test/Archives/Archive243.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive244.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22431)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22432)
+@@ -654,9 +654,9 @@
+ 	for(int i=0;i<m-1;i++) dzD[i] = dz[i+1];
+ 
+ 	// determine minimum acceptable delta t (diffusion number > 1/2) [s]
+-	// NS: 2.16.18 divided dt by 9 for stability (changed 3 to 27)
++	// NS: 2.16.18 divided dt by 11 for stability (changed 3 to 33)
+ 	dt=1e12; 
+-	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (27 * K[i]));
++	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (33 * K[i]));
+ 
+ 	// smallest possible even integer of 60 min where diffusion number > 1/2
+ 	// must go evenly into one hour or the data frequency if it is smaller
Index: /issm/oecreview/Archive/21724-22754/ISSM-22432-22433.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22432-22433.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22432-22433.diff	(revision 22755)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/m/miscellaneous/colorbars.js
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/colorbars.js	(revision 22432)
++++ ../trunk-jpl/src/m/miscellaneous/colorbars.js	(revision 22433)
+@@ -47,21 +47,21 @@
+ [1.000000,1.000000,0.500000],
+ [1.000000,1.000000,0.750000],
+ [1.000000,1.000000,1.000000]];
+-colorbars["gray"]=[[0.000000,0.000000,0.000000],
+-[0.066667,0.066667,0.066667],
+-[0.133333,0.133333,0.133333],
+-[0.200000,0.200000,0.200000],
+-[0.266667,0.266667,0.266667],
+-[0.333333,0.333333,0.333333],
+-[0.400000,0.400000,0.400000],
++colorbars["gray"]=[[0.200000,0.200000,0.200000],
++[0.253333,0.253333,0.253333],
++[0.306667,0.306667,0.306667],
++[0.360000,0.360000,0.360000],
++[0.413333,0.413333,0.413333],
+ [0.466667,0.466667,0.466667],
+-[0.533333,0.533333,0.533333],
+-[0.600000,0.600000,0.600000],
+-[0.666667,0.666667,0.666667],
++[0.520000,0.520000,0.520000],
++[0.573333,0.573333,0.573333],
++[0.626667,0.626667,0.626667],
++[0.680000,0.680000,0.680000],
+ [0.733333,0.733333,0.733333],
+-[0.800000,0.800000,0.800000],
+-[0.866667,0.866667,0.866667],
+-[0.933333,0.933333,0.933333],
++[0.786667,0.786667,0.786667],
++[0.840000,0.840000,0.840000],
++[0.893333,0.893333,0.893333],
++[0.946667,0.946667,0.946667],
+ [1.000000,1.000000,1.000000]];
+ colorbars["bone"]=[[0.000000,0.000000,0.020833],
+ [0.058333,0.058333,0.100000],
+@@ -287,3 +287,36 @@
+ [0.866667,0.933333,0.400000],
+ [0.933333,0.966667,0.400000],
+ [1.000000,1.000000,0.400000]];
++colorbars["land"]=[[0.000000,0.000000,0.500000],
++[0.160000,0.266700,0.766700],
++[0.326700,0.513400,1.000000],
++[0.540500,0.620200,1.000000],
++[0.521000,0.934200,0.521000],
++[0.200400,0.667000,0.200400],
++[0.120000,0.540000,0.040000],
++[0.440000,0.646700,0.146700],
++[0.573300,0.660000,0.186700],
++[0.520000,0.580000,0.160000],
++[0.466700,0.500000,0.133300],
++[0.413300,0.420000,0.106700],
++[0.360000,0.340000,0.080000],
++[0.306700,0.260000,0.053300],
++[0.253300,0.180000,0.026700],
++[0.200000,0.100000,0.000000]];
++colorbars["sea"]=[[0.000000,0.000000,0.2000],
++[0.000000,0.000000,0.2930],
++[0.000000,0.000000,0.3859],
++[0.000000,0.000000,0.4789],
++[0.000000,0.000000,0.5718],
++[0.000000,0.000000,0.6648],
++[0.000000,0.000000,0.7577],
++[0.000000,0.000000,0.8507],
++[0.000000,0.000000,0.9436],
++[0.000000,0.102400,1.0000],
++[0.000000,0.362700,1.0000],
++[0.000000,0.622900,1.0000],
++[0.093600,0.810400,1.0000],
++[0.386600,0.843000,1.0000],
++[0.679500,0.875500,1.0000],
++[0.800000,0.400000,0.4000]];
++
Index: /issm/oecreview/Archive/21724-22754/ISSM-22433-22434.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22433-22434.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22433-22434.diff	(revision 22755)
@@ -0,0 +1,1220 @@
+Index: ../trunk-jpl/src/m/plot/plot_transient_movie.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_transient_movie.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plot_transient_movie.js	(revision 22434)
+@@ -20,8 +20,8 @@
+ 		var	dataresults;
+ 		for (var i in steps) {
+ 			dataresults = processdata(md, data[i], options);
+-			range[1] = Math.min(range[0], ArrayMin(dataresults[0]));
+-			range[2] = Math.max(range[1], ArrayMax(dataresults[0]));
++			range[0] = Math.min(range[0], ArrayMin(dataresults[1]));
++			range[1] = Math.max(range[1], ArrayMax(dataresults[1]));
+ 		}
+ 		datatype = dataresults[1];
+ 		options.addfielddefault('caxis', range);
+@@ -30,7 +30,7 @@
+ 	
+ 	//Create unit node if it does not already exist
+ 	if (!('unit' in canvas.nodes)) {
+-		var	dataresults = processdata(md, data[i],options);
++		var	dataresults = processdata(md, data[0],options);
+ 		var	data2 = dataresults[0]; 
+ 		var	datatype = dataresults[1];
+ 	
+@@ -38,7 +38,7 @@
+ 		plot_unit(md,data2,datatype,options,canvas);
+ 	}
+ 	
+-	//display movie
++	//Setup rendering node
+ 	var node = canvas.nodes.unit;
+ 	node.options = options;
+ 	node.alpha = options.getfieldvalue('alpha', 1.0);
+@@ -45,7 +45,17 @@
+ 	node.caxis = options.getfieldvalue('caxis');
+ 	node.enabled = options.getfieldvalue('nodata', 'off') == 'off';
+ 	node.log = options.getfieldvalue('log', false);
+-	canvas.unitMovieData = data;
++	
++	//process data
++	var	dataresults;
++	var processedData = [];
++	for (var i in steps) {
++		dataresults = processdata(md, data[i].slice(), options);
++		processedData[i] = dataresults[0];
++	}
++	
++	//display movie
++	canvas.unitMovieData = processedData;
+ 	canvas.animation.frame = 0;
+ 	canvas.animation.handler = setInterval(function () {
+ 		//Update current animation frame
+@@ -52,8 +62,8 @@
+ 		var frame = canvas.animation.frame;
+ 		if (canvas.animation.play) {
+ 			if (canvas.animation.increment) {
+-				if (frame > steps.length - 1) {
+-					if (node.movieLoop) {
++				if (frame >= steps.length - 1) {
++					if (canvas.animation.loop) {
+ 						frame = 0;
+ 					}
+ 					else {
+@@ -68,18 +78,18 @@
+ 		
+ 		//If frame has changed, update unit node and data marker display.
+ 		if (frame !== canvas.animation.lastFrame) {
+-			node.updateBuffer('Coords', data[frame]);
+-			canvas.unitData = data[frame];
++			node.updateBuffer('Coords', processedData[frame]);
++			canvas.unitData = processedData[frame];
+ 			if (canvas.dataMarkers.enabled) {
+ 				updateMarker(canvas, false);
+ 			}
+-			if (canvas.progressBar) {
+-				canvas.progressBar.val(frame).slider('refresh');
++			if (canvas.playbackSlider) {
++				canvas.playbackSlider.val(frame).slider('refresh');
+ 			}
+-			if (canvas.timeLabel) {
+-				canvas.timeLabel.html(steps[frame].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
++			if (canvas.playbackTextProgress) {
++				canvas.playbackTextProgress.html(steps[frame].toFixed(0) + " " + options.getfieldvalue("movietimeunit","yr"));
+ 			}
+-			if (!isEmptyOrUndefined(canvas.nodes.quiver)) {
++			if (!VESL.Helpers.isEmptyOrUndefined(canvas.nodes.quiver)) {
+ 				plot_quiver(md,options,canvas,false);
+ 			}
+ 		}
+@@ -90,10 +100,10 @@
+ 	}, canvas.animation.interval);
+ 	
+ 	//Update progress bar with new frame info.
+-	if (canvas.progressBar) {
+-		canvas.progressBar.val(canvas.animation.frame);
+-		canvas.progressBar.attr('max', steps.length - 1);
+-		canvas.progressBar.slider('refresh');
++	if (canvas.playbackSlider) {
++		canvas.playbackSlider.val(canvas.animation.frame);
++		canvas.playbackSlider.attr('max', steps.length - 1);
++		canvas.playbackSlider.slider('refresh');
+ 	}
+ 				
+ 	applyoptions(md, [], options, canvas);
+Index: ../trunk-jpl/src/m/plot/plotdoc.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotdoc.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plotdoc.js	(revision 22434)
+@@ -38,7 +38,7 @@
+ 	console.log('       "controlsensitivity": sensitivty of view/zoom changes as a percentage of default (default 1, ex: 0.5, 2.75)');
+ 	console.log('       "datamarkers": object cotaining data marker parameters. See webgl.js for defaults. (ex: {"enabled":true,"format":["<div id="sim-plot"></div>"],"labels":["thickness","velocity","value"],"animated":true})');
+ 	console.log('       	"enabled": toggle data marker displays (default true, ex: false)');
+-	console.log('       	"image": image used for marking the clicked point (ex: "/textures/data_marker.svg")');
++	console.log('       	"image": image used for marking the clicked point (ex: "/canvas/data-markers/data_marker.svg")');
+ 	console.log('       	"labels": when displaying a sim-plot graph, display these model fields. (ex: ["thickness","velocity","value"])');
+ 	console.log('       	"font": font to be used for display (ex: "24px "Comic Sans MS", cursive")');
+ 	console.log('       	"format": an array compatible with sprintf that will be displayed as html (ex: ["X: %.2e<br>Y: %.2e<br>Z: %.2e]<br>Value: %0.1f","x","y","z","value"])');
+Index: ../trunk-jpl/src/m/plot/plot_quiver.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plot_quiver.js	(revision 22434)
+@@ -6,6 +6,9 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
++	//Disabling for now, since quivers are "sticky" - once turned on, they won't turn off. This is due to cachenodes, but should find better way to handle it.
++	return;
++	
+ 	if ('quiver' in  canvas.nodes && noCacheNodesOverride && options.getfieldvalue('cachenodes','on') === 'on') return;
+ 	
+ 	//{{{ declare variables:
+@@ -25,9 +28,9 @@
+ 	var zlim = options.getfieldvalue('zlim', [ArrayMin(z), ArrayMax(z)]);
+ 
+ 	//Only displaying velocity fields for now
+-	var v = isEmptyOrUndefined(md.results) ?  md.initialization.vel : md.results[canvas.animation.frame].Vel;
+-	var vx = isEmptyOrUndefined(md.results) ? md.initialization.vx : md.results[canvas.animation.frame].Vx;
+-	var vy = isEmptyOrUndefined(md.results) ? md.initialization.vy : md.results[canvas.animation.frame].Vy;
++	var v = VESL.Helpers.isEmptyOrUndefined(md.results) ?  md.initialization.vel : md.results[canvas.animation.frame].Vel;
++	var vx = VESL.Helpers.isEmptyOrUndefined(md.results) ? md.initialization.vx : md.results[canvas.animation.frame].Vx;
++	var vy = VESL.Helpers.isEmptyOrUndefined(md.results) ? md.initialization.vy : md.results[canvas.animation.frame].Vy;
+ 
+ 	//Handle heightscale
+ 	var vertices, scale;
+@@ -36,7 +39,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskregion',{'enabled':false}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+Index: ../trunk-jpl/src/m/plot/plot_mesh.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 22434)
+@@ -30,7 +30,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskregion',{'enabled':false}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+Index: ../trunk-jpl/src/m/plot/webgl.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/webgl.js	(revision 22434)
+@@ -5,8 +5,8 @@
+ 	canvas = document.getElementById(options.getfieldvalue('canvasid'));
+ 	//var canvas = document.getElementById(options.getfieldvalue('canvasid'));
+ 	if (!canvas.initialized) {
+-		if (!isEmptyOrUndefined(canvas.draw) && canvas.draw.handler !== 0)	{ window.cancelAnimationFrame(canvas.draw.handler); }
+-		if (!isEmptyOrUndefined(canvas.animation) && canvas.animation.handler !== 0) { clearInterval(canvas.animation.handler); }
++		if (!VESL.Helpers.isEmptyOrUndefined(canvas.draw) && canvas.draw.handler !== 0)	{ window.cancelAnimationFrame(canvas.draw.handler); }
++		if (!VESL.Helpers.isEmptyOrUndefined(canvas.animation) && canvas.animation.handler !== 0) { clearInterval(canvas.animation.handler); }
+ 		initWebGL(canvas, options);
+ 		draw(canvas);
+ 		canvas.initialized = true;
+@@ -19,7 +19,7 @@
+ function initWebGL(canvas, options) { //{{{
+ 	//Initialize canvas.gl on page load, reusing gl context on additional runs
+ 	var gl = canvas.gl;
+-	if (isEmptyOrUndefined(gl)) {
++	if (VESL.Helpers.isEmptyOrUndefined(gl)) {
+ 		gl = GL.create({canvas: canvas});
+ 		gl.enable(gl.DEPTH_TEST); // Enable depth testing
+ 		gl.depthFunc(gl.LEQUAL); // Near things obscure far things
+@@ -26,7 +26,7 @@
+ 		gl.enable(gl.BLEND); // Enable color blending/overlay
+ 		gl.enable(gl.CULL_FACE); // Enable face culling
+ 		gl.cullFace(gl.FRONT);
+-		gl.shaders = loadShaders(gl, options.getfieldvalue('rootpath', '../../../js/')); // Load shaders and store them in gl object
++		gl.shaders = loadShaders(gl, options.getfieldvalue('rootpath', '/canvas')); // Load shaders and store them in gl object.
+ 		gl.textures = {};
+ 		
+ 		// Add event listeners for canvas
+@@ -49,158 +49,132 @@
+ 		canvas.unitMovieData = {};
+ 		
+ 		canvas.gl = gl;
+-		canvas.rootPath = options.getfieldvalue('rootpath', '../../../js/');
++		canvas.assetsPath = options.getfieldvalue('rootpath', '/canvas');
+ 		canvas.id = options.getfieldvalue('canvasid', '.sim-canvas');
+ 		canvas.selector = $('#' + canvas.id);
+ 		canvas.textcanvas = null;
+ 		canvas.overlaycanvas = null;
++		canvas.permalinkUsed = false;
+ 		
+ 		typedArraySliceSupport();
+ 	}
+ 	
+-	//Add context state variables
+-	canvas.render = options.getfieldvalue('render', {});
+-	canvas.controlSensitivity = options.getfieldvalue('controlsensitivity', 1);
+-	canvas.overlayHandlers = {};
+-	var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor', 'lightcyan'));
+-	if (backgroundcolor.ok) { canvas.backgroundcolor = [backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0]; }
+-	else { throw Error(sprintf('s%s%s\n','initWebGL error message: cound not find out background color for curent canvas ', canvas)); }
+-	
+-	//Property intiialization, using values from options first, then from default values.
+-	var atmosphere = options.getfieldvalue('atmosphere', {});
+-	canvas.atmosphere = { 												//Default Values
+-		wavelength_r: defaultFor(atmosphere.wavelength_r, 			0.65), 		//0.65		Red wavelength (micrometers)
+-		wavelength_g: defaultFor(atmosphere.wavelength_g, 			0.57),		//0.57		Green wavelength (micrometers)
+-		wavelength_b: defaultFor(atmosphere.wavelength_b, 			0.475),		//0.475		Green wavelength (micrometers)
+-		eSun: 	defaultFor(atmosphere.eSun, 						100.0),		//20.0		Sun intensity	
+-		kRayleigh: defaultFor(atmosphere.kRayleigh, 				0.0025),	//0.0025	Rayleigh scattering amount
+-		kMie: defaultFor(atmosphere.kMie, 							0.000), 	//0.01		Mie scattering amount
+-		g: defaultFor(atmosphere.g, 								-0.99),		//-0.99		Mie phase asymmetry/direction factor
+-		hdr_exposure: defaultFor(atmosphere.hdr_exposure, 			0.8),		//0.8		High Dynamic Range Exposure
+-		scaleHeight: defaultFor(atmosphere.scaleHeight, 			1.25), 		//1.025		Scale of height of atmosphere to earth radius.
+-		scaleDepth: defaultFor(atmosphere.scaleDepth, 				0.25), 		//0.25		Percentage altitude at which the atmosphere's average density is found
+-		a: defaultFor(atmosphere.a, 								-0.00287),	//-0.00287	Scaling constant a
+-		b: defaultFor(atmosphere.b, 								0.459),		//0.459		Scaling constant b
+-		c: defaultFor(atmosphere.c, 								3.83),		//3.83		Scaling constant c
+-		d: defaultFor(atmosphere.d, 								-6.80),		//-6.80		Scaling constant d
+-		e: defaultFor(atmosphere.e, 								3.6),		//5.25		Scaling constant e. Lower when increasing atmosphere scale.
+-		attenuation: defaultFor(atmosphere.attenuation, 			0.5)		//0.5		Strength of atmospheric scattering on ground shading.
+-	};
+-	updateAtmosphereParameters(canvas);
+-	var animation = options.getfieldvalue('movies', {});
+-	canvas.animation = {
+-		frame: defaultFor(animation.frame, 							0),
+-		play: defaultFor(animation.play, 							true),
+-		increment: defaultFor(animation.increment, 					true),
+-		fps: defaultFor(animation.fps, 								4),
+-		interval: defaultFor(animation.interval, 					1000 / defaultFor(animation.fps, 4)),
+-		loop: defaultFor(animation.loop, 							true),
+-		handler: defaultFor(animation.handler, 						0)
+-	}
+-	var brush = options.getfieldvalue('brush', {});
+-	canvas.brush = {
+-		enabled: defaultFor(brush.enabled, 							false),
+-		strength: defaultFor(brush.strength, 						0.075),
+-		falloff: defaultFor(brush.falloff, 							0.5),
+-		hit: defaultFor(brush.hit, 									{})
+-	};
+-	var camera = options.getfieldvalue('camera', {});
+-	canvas.camera = {
+-		position: defaultFor(camera.position, 						vec3.create()),
+-		rotation: defaultFor(camera.rotation, 						quat.create()),
+-		relativePosition: defaultFor(camera.relativePosition, 		vec3.create()),
+-		direction: defaultFor(camera.direction, 					vec3.create()),
+-		near: defaultFor(camera.near, 								1e3),
+-		far: defaultFor(camera.far, 								1e10),
+-		fov: defaultFor(camera.fov, 								45),
+-		vMatrix: defaultFor(camera.vMatrix, 						mat4.create()),
+-		pMatrix: defaultFor(camera.pMatrix, 						mat4.create()),
+-		vpMatrix: defaultFor(camera.vpMatrix, 						mat4.create()),
+-		vInverseMatrix: defaultFor(camera.vInverseMatrix, 			mat4.create()),
+-		pInverseMatrix: defaultFor(camera.pInverseMatrix, 			mat4.create()),
+-		vpInverseMatrix: defaultFor(camera.vpInverseMatrix, 		mat4.create()),
+-		ready: defaultFor(camera.ready, 							false)
+-	};
+-	var dataMarkers = options.getfieldvalue('datamarkers', {});
+-	canvas.dataMarkers = {
+-		enabled: defaultFor(dataMarkers.enabled, 					true),
+-		values: defaultFor(dataMarkers.values, 						[]),
+-		image: defaultFor(dataMarkers.image, 						canvas.rootPath + 'textures/data_marker.svg'),
+-		size: defaultFor(dataMarkers.size, 							[32, 32]),
+-		format: defaultFor(dataMarkers.format, 						['X: %.2e<br>Y: %.2e<br>Z: %.2e<br>Value: %0.1f', 'x', 'y', 'z', 'value']),
+-		animated: defaultFor(dataMarkers.animated, 					false),
+-		labels: defaultFor(dataMarkers.labels, 						[]),
+-		font: defaultFor(dataMarkers.font, 							''),
+-		marker: defaultFor(dataMarkers.marker, 						document.getElementById('sim-data-marker-' + canvas.id)),
+-		reposition: defaultFor(dataMarkers.reposition, 				true)
+-	};
+-	var draw = options.getfieldvalue('draw', {});
+-	canvas.draw = {
+-		ready: defaultFor(draw.ready, 								false),
+-		handler: defaultFor(draw.handler, 							null)
+-	};
+-	var view = options.getfieldvalue('view', {});
+-	canvas.view = {
+-		position: defaultFor(view.position, 						[0.0, 0.0, 0.0]),
+-		rotation: defaultFor(view.rotation, 						[0, 90]),
+-		zoom: defaultFor(view.zoom, 								1.0),
+-		zoomLimits: defaultFor(view.zoomLimits, 					[0.001, 100.0]),
+-		lastZoom: defaultFor(view.lastZoom, 						1.0),
+-		azimuthLimits: defaultFor(view.azimuthLimits, 				[0, 360]),
+-		elevationLimits: defaultFor(view.elevationLimits, 			[-180, 180]),
+-		panningEnabled: defaultFor(view.panningEnabled, 			false),
+-		preventDefaultOnPan: defaultFor(view.preventDefaultOnPan, 	false),
+-		twod: defaultFor(view.twod, 								false)
+-	};
++	if (options.getfieldvalue('clf','on')=='on') {
++		//Add context state variables
++		canvas.render = options.getfieldvalue('render', {});
++		canvas.controlSensitivity = options.getfieldvalue('controlsensitivity', 1);
++		if (options.getfieldvalue('clf','on')=='on') canvas.overlayHandlers = {};
++		var backgroundcolor = new RGBColor(options.getfieldvalue('backgroundcolor', 'lightcyan'));
++		if (backgroundcolor.ok) { canvas.backgroundcolor = [backgroundcolor.r/255.0, backgroundcolor.g/255.0, backgroundcolor.b/255.0, 1.0]; }
++		else { throw Error(sprintf('s%s%s\n','initWebGL error message: cound not find out background color for current canvas ', canvas)); }
++		
++		//Property intiialization, using values from options first, then from default values.
++		var atmosphere = options.getfieldvalue('atmosphere', {});
++		canvas.atmosphere = { 														//Default Values
++			wavelength_r: defaultFor(atmosphere.wavelength_r, 			0.65), 		//0.65		Red wavelength (micrometers)
++			wavelength_g: defaultFor(atmosphere.wavelength_g, 			0.57),		//0.57		Green wavelength (micrometers)
++			wavelength_b: defaultFor(atmosphere.wavelength_b, 			0.475),		//0.475		Green wavelength (micrometers)
++			eSun: 	defaultFor(atmosphere.eSun, 						100.0),		//20.0		Sun intensity	
++			kRayleigh: defaultFor(atmosphere.kRayleigh, 				0.0025),	//0.0025	Rayleigh scattering amount
++			kMie: defaultFor(atmosphere.kMie, 							0.000), 	//0.01		Mie scattering amount
++			g: defaultFor(atmosphere.g, 								-0.99),		//-0.99		Mie phase asymmetry/direction factor
++			hdr_exposure: defaultFor(atmosphere.hdr_exposure, 			0.8),		//0.8		High Dynamic Range Exposure
++			scaleHeight: defaultFor(atmosphere.scaleHeight, 			1.25), 		//1.025		Scale of height of atmosphere to earth radius.
++			scaleDepth: defaultFor(atmosphere.scaleDepth, 				0.25), 		//0.25		Percentage altitude at which the atmosphere's average density is found
++			a: defaultFor(atmosphere.a, 								-0.00287),	//-0.00287	Scaling constant a
++			b: defaultFor(atmosphere.b, 								0.459),		//0.459		Scaling constant b
++			c: defaultFor(atmosphere.c, 								3.83),		//3.83		Scaling constant c
++			d: defaultFor(atmosphere.d, 								-6.80),		//-6.80		Scaling constant d
++			e: defaultFor(atmosphere.e, 								3.6),		//5.25		Scaling constant e. Lower when increasing atmosphere scale.
++			attenuation: defaultFor(atmosphere.attenuation, 			0.5)		//0.5		Strength of atmospheric scattering on ground shading.
++		};
++		updateAtmosphereParameters(canvas);
++			
++		var animation = options.getfieldvalue('movies', {});
++		canvas.animation = {
++			frame: defaultFor(animation.frame, 							0),
++			play: defaultFor(animation.play, 							true),
++			increment: defaultFor(animation.increment, 					true),
++			fps: defaultFor(animation.fps, 								4),
++			interval: defaultFor(animation.interval, 					1000 / defaultFor(animation.fps, 4)),
++			loop: defaultFor(animation.loop, 							true),
++			handler: defaultFor(animation.handler, 						0)
++		}
++		var brush = options.getfieldvalue('brush', {});
++		canvas.brush = {
++			enabled: defaultFor(brush.enabled, 							false),
++			strength: defaultFor(brush.strength, 						0.075),
++			falloff: defaultFor(brush.falloff, 							0.5),
++			hit: defaultFor(brush.hit, 									{})
++		};
++		var camera = options.getfieldvalue('camera', {});
++		canvas.camera = {
++			position: defaultFor(camera.position, 						vec3.create()),
++			rotation: defaultFor(camera.rotation, 						quat.create()),
++			relativePosition: defaultFor(camera.relativePosition, 		vec3.create()),
++			direction: defaultFor(camera.direction, 					vec3.create()),
++			near: defaultFor(camera.near, 								1e3),
++			far: defaultFor(camera.far, 								1e10),
++			fov: defaultFor(camera.fov, 								45),
++			vMatrix: defaultFor(camera.vMatrix, 						mat4.create()),
++			pMatrix: defaultFor(camera.pMatrix, 						mat4.create()),
++			vpMatrix: defaultFor(camera.vpMatrix, 						mat4.create()),
++			vInverseMatrix: defaultFor(camera.vInverseMatrix, 			mat4.create()),
++			pInverseMatrix: defaultFor(camera.pInverseMatrix, 			mat4.create()),
++			vpInverseMatrix: defaultFor(camera.vpInverseMatrix, 		mat4.create()),
++			ready: defaultFor(camera.ready, 							false)
++		};
++		var dataMarkers = options.getfieldvalue('datamarkers', {});
++		canvas.dataMarkers = {
++			enabled: defaultFor(dataMarkers.enabled, 					true),
++			values: defaultFor(dataMarkers.values, 						[]),
++			image: defaultFor(dataMarkers.image, 						canvas.assetsPath + '/data-markers/data_marker.svg'),
++			size: defaultFor(dataMarkers.size, 							[32, 32]),
++			format: defaultFor(dataMarkers.format, 						['X: %.2em<br>Y: %.2em<br>Z: %.2em<br>Value: %0.1f']),
++			animated: defaultFor(dataMarkers.animated, 					false),
++			labels: defaultFor(dataMarkers.labels, 						['x', 'y', 'z', 'value']),
++			font: defaultFor(dataMarkers.font, 							''),
++			marker: defaultFor(dataMarkers.marker, 						document.getElementById('sim-data-marker-' + canvas.id)),
++			reposition: defaultFor(dataMarkers.reposition, 				true)
++		};
++		var draw = options.getfieldvalue('draw', {});
++		canvas.draw = {
++			ready: defaultFor(draw.ready, 								false),
++			handler: defaultFor(draw.handler, 							null)
++		};
++		var view = options.getfieldvalue('view', {});
++		canvas.view = {
++			position: defaultFor(view.position, 						[0.0, 0.0, 0.0]),
++			rotation: defaultFor(view.rotation, 						[0, 90]),
++			zoom: defaultFor(view.zoom, 								1.0),
++			zoomLimits: defaultFor(view.zoomLimits, 					[0.001, 100.0]),
++			lastZoom: defaultFor(view.lastZoom, 						1.0),
++			lightingBias: defaultFor(view.lightingBias, 				0.75),
++			azimuthLimits: defaultFor(view.azimuthLimits, 				[0, 360]),
++			elevationLimits: defaultFor(view.elevationLimits, 			[-180, 180]),
++			panningEnabled: defaultFor(view.panningEnabled, 			false),
++			preventDefaultOnPan: defaultFor(view.preventDefaultOnPan, 	false),
++			twod: defaultFor(view.twod, 								false)
++		};
+ 
+-	//Override with parameters from URL, if any
+-	//TODO: Make permalinks more robust and less interdependent on UI
+-	if (!canvas.usedparemters) {
+-		var parameters = {};
+-		location.search.substr(1).split('&').forEach(function(part) {
+-			var item = part.split('=');
+-			parameters[item[0]] = decodeURIComponent(item[1]);
+-		});
+-
+-		if (parameters['pos']) { canvas.view.position = JSON.parse(parameters['pos']); }
+-		if (parameters['rot']) { canvas.view.rotation = JSON.parse(parameters['rot']); }
+-		if (parameters['zoom']) { canvas.view.zoom = JSON.parse(parameters['zoom']); }
+-		if (parameters['twod']) { canvas.view.twod = JSON.parse(parameters['twod']); }
+-		if (parameters['initial']) {
+-			initial = JSON.parse(parameters['initial']);
+-			if (!initial) {
+-				if (typeof SolveGlacier === 'function') {
+-					SolveGlacier();
+-				}
+-				if (typeof SolveSlr === 'function') {
+-					SolveSlr();
+-				}
+-			}
+-		}
+-		canvas.usedparemters = true;
++		// Override with parameters from URL, if any
++		VESL.UI.parsePermalinkCanvas(canvas);
+ 	}
+ } //}}}
+-function generatePermalink() { //{{{
+-	var permalink = window.location.origin + window.location.pathname + '?'
+-	+ '&pos=' + encodeURIComponent(JSON.stringify(canvas.view.position))
+-	+ '&rot=' + encodeURIComponent(JSON.stringify(canvas.view.rotation)) 
+-	+ '&zoom=' + encodeURIComponent(JSON.stringify(canvas.view.zoom))
+-	+ '&twod=' + encodeURIComponent(JSON.stringify(canvas.view.twod));
+-	window.prompt('Share this simulation: ', permalink);
+-} //}}}
+-function loadShaders(gl, rootPath) { //{{{
++function loadShaders(gl, assetsPath) { //{{{
+ 	var shaders = {};
+-	shaders.Colored = new GL.Shader.fromURL(rootPath+'shaders/Colored.vsh', rootPath+'shaders/Colored.fsh', null, gl);
+-	shaders.ColoredDiffuse = new GL.Shader.fromURL(rootPath+'shaders/ColoredDiffuse.vsh', rootPath+'shaders/ColoredDiffuse.fsh', null, gl);
+-	shaders.Textured = new GL.Shader.fromURL(rootPath+'shaders/Textured.vsh', rootPath+'shaders/Textured.fsh', null, gl);
+-	shaders.TexturedDiffuse = new GL.Shader.fromURL(rootPath+'shaders/TexturedDiffuse.vsh', rootPath+'shaders/TexturedDiffuse.fsh', null, gl);
+-	shaders.SkyFromSpace = new GL.Shader.fromURL(rootPath+'shaders/SkyFromSpace.vert', rootPath+'shaders/SkyFromSpace.frag', null, gl);
+-	shaders.GroundFromSpace = new GL.Shader.fromURL(rootPath+'shaders/GroundFromSpace.vert', rootPath+'shaders/GroundFromSpace.frag', null, gl);
++	// NOTE: Consider changing fromURL() to XMLHttpRequest with responseType = 'text' to avoid XML Parsing Error (shader files are not encoded as XML).
++	shaders.Colored = new GL.Shader.fromURL(assetsPath + '/shaders/Colored.vsh', assetsPath + '/shaders/Colored.fsh', null, gl);
++	shaders.ColoredDiffuse = new GL.Shader.fromURL(assetsPath + '/shaders/ColoredDiffuse.vsh', assetsPath + '/shaders/ColoredDiffuse.fsh', null, gl);
++	shaders.Textured = new GL.Shader.fromURL(assetsPath + '/shaders/Textured.vsh', assetsPath + '/shaders/Textured.fsh', null, gl);
++	shaders.TexturedDiffuse = new GL.Shader.fromURL(assetsPath + '/shaders/TexturedDiffuse.vsh', assetsPath + '/shaders/TexturedDiffuse.fsh', null, gl);
++	shaders.SkyFromSpace = new GL.Shader.fromURL(assetsPath + '/shaders/SkyFromSpace.vert', assetsPath + '/shaders/SkyFromSpace.frag', null, gl);
++	shaders.GroundFromSpace = new GL.Shader.fromURL(assetsPath + '/shaders/GroundFromSpace.vert', assetsPath + '/shaders/GroundFromSpace.frag', null, gl);
+ 	return shaders;
+ } //}}}
+ function initTexture(gl, imageSource) { //{{{
+ 	//Initialize textures, or load from memory if they already exist.
+-	if (isEmptyOrUndefined(gl.textures[imageSource])) {
++	if (VESL.Helpers.isEmptyOrUndefined(gl.textures[imageSource])) {
+ 		gl.textures[imageSource] = GL.Texture.fromURL(imageSource, {minFilter: gl.LINEAR_MIPMAP_LINEAR, magFilter: gl.LINEAR}, null, gl);
+ 	}
+ 	return gl.textures[imageSource];
+@@ -229,15 +203,6 @@
+ function defaultFor(name, value) { //{{{
+ 	return typeof name !== 'undefined' ? name : value;
+ } //}}}
+-function isEmptyOrUndefined(object) { //{{{
+-	return object === undefined || isEmpty(object);
+-} //}}}
+-function isEmpty(object) { //{{{
+-	for (var key in object) {
+-		return false;
+-	}
+-	return true;
+-} //}}}
+ function recover(canvasid, name, value) { //{{{
+ 	//Traverse canvas object tree for property defined by dot delimited string, returning it, or a default value if it is not found.
+ 	var object = document.getElementById(canvasid);
+@@ -244,53 +209,10 @@
+ 	var properties = name.split('.');
+ 	for (var i = 0; i < properties.length; i++) {
+ 		object = object[properties[i]];
+-		if (isEmptyOrUndefined(object)) { break; }
++		if (VESL.Helpers.isEmptyOrUndefined(object)) { break; }
+     }
+ 	return defaultFor(object, value);
+ } //}}}
+-function typedArraySliceSupport() { //{{{
+-	//TypedArray compatibility for Safari/IE
+-	if (typeof Int8Array !== 'undefined') {
+-		if (!Int8Array.prototype.fill) { Int8Array.prototype.fill = Array.prototype.fill; }
+-		if (!Int8Array.prototype.slice) { Int8Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Uint8Array !== 'undefined') {
+-		if (!Uint8Array.prototype.fill) { Uint8Array.prototype.fill = Array.prototype.fill; }
+-		if (!Uint8Array.prototype.slice) { Uint8Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Uint8ClampedArray !== 'undefined') {
+-		if (!Uint8ClampedArray.prototype.fill) { Uint8ClampedArray.prototype.fill = Array.prototype.fill; }
+-		if (!Uint8ClampedArray.prototype.slice) { Uint8ClampedArray.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Int16Array !== 'undefined') {
+-		if (!Int16Array.prototype.fill) { Int16Array.prototype.fill = Array.prototype.fill; }
+-		if (!Int16Array.prototype.slice) { Int16Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Uint16Array !== 'undefined') {
+-		if (!Uint16Array.prototype.fill) { Uint16Array.prototype.fill = Array.prototype.fill; }
+-		if (!Uint16Array.prototype.slice) { Uint16Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Int32Array !== 'undefined') {
+-		if (!Int32Array.prototype.fill) { Int32Array.prototype.fill = Array.prototype.fill; }
+-		if (!Int32Array.prototype.slice) { Int32Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Uint32Array !== 'undefined') {
+-		if (!Uint32Array.prototype.fill) { Uint32Array.prototype.fill = Array.prototype.fill; }
+-		if (!Uint32Array.prototype.slice) { Uint32Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Float32Array !== 'undefined') {
+-		if (!Float32Array.prototype.fill) { Float32Array.prototype.fill = Array.prototype.fill; }
+-		if (!Float32Array.prototype.slice) { Float32Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof Float64Array !== 'undefined') {
+-		if (!Float64Array.prototype.fill) { Float64Array.prototype.fill = Array.prototype.fill; }
+-		if (!Float64Array.prototype.slice) { Float64Array.prototype.slice = Array.prototype.slice; }
+-	}
+-	if (typeof TypedArray !== 'undefined') {
+-		if (!TypedArray.prototype.fill) { TypedArray.prototype.fill = Array.prototype.fill; }
+-		if (!TypedArray.prototype.slice) { TypedArray.prototype.slice = Array.prototype.slice; }
+-	}
+-} //}}}
+ //}}}
+ //{{{ Interaction Functions
+ function onTap(ev, canvas) { //{{{
+@@ -355,7 +277,10 @@
+ function onPinch(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+ 	if (ev.type === 'pinchstart') { canvas.view.lastZoom = canvas.view.zoom; }
+-	else { modifyZoom(ev.scale * canvas.view.lastZoom, canvas, displaylog, ev, 0); }
++	else { 
++		canvas.view.zoom = ev.scale * canvas.view.lastZoom;
++		if (displaylog) { console.log(canvas.view.zoom); }
++	}
+ } //}}}
+ function onZoom(ev, canvas, displaylog) { //{{{
+ 	ev.preventDefault();
+@@ -363,7 +288,7 @@
+ 	modifyZoom(canvas.view.zoom + delta, canvas, displaylog, ev, 0);
+ } //}}}
+ function modifyZoom(value, canvas, displaylog, ev, duration) { //{{{
+-	if (isEmptyOrUndefined(duration)) duration = 200;
++	if (VESL.Helpers.isEmptyOrUndefined(duration)) duration = 200;
+ 	var targetZoom = clamp(value, canvas.view.zoomLimits[0], canvas.view.zoomLimits[1]);
+ 	var currentZoom = canvas.view.zoom;
+ 	animateValue(
+@@ -370,6 +295,7 @@
+ 		0,
+ 		1.0,
+ 		duration,
++		'swing',
+ 		function(value, info) {
+ 			canvas.view.zoom = currentZoom * (1 - value) + targetZoom * value;
+ 			if (displaylog) { console.log(canvas.view.zoom); }
+@@ -381,14 +307,6 @@
+ } //}}}
+ function toggleMoviePlay(canvas) { //{{{
+ 	canvas.animation.play = !canvas.animation.play;
+-	if (canvas.animation.play){
+-		canvas.playButton.find('span').removeClass('fa-play');
+-		canvas.playButton.find('span').addClass('fa-pause');
+-	}
+-	else{
+-		canvas.playButton.find('span').removeClass('fa-pause');
+-		canvas.playButton.find('span').addClass('fa-play');
+-	}
+ } //}}}
+ function screenToWorldPoint(canvas, x, y) { //{{{
+ 	var viewportX = (x - canvas.width / 2) / (canvas.width / 2);
+@@ -402,7 +320,7 @@
+ 	var viewportY = (canvas.height / 2 - y) / (canvas.height / 2);
+ 	var origin = vec3.transformMat4(vec3.create(), [viewportX, viewportY, 0], inverseMVPMatrix);
+ 	var far = vec3.transformMat4(vec3.create(), [viewportX, viewportY, 1.0], inverseMVPMatrix);
+-	var direction = vec3.subtract(vec3.create(), far, origin);
++	var direction = vec3.normalize(vec3.create(), vec3.subtract(vec3.create(), far, origin));
+ 	return {'origin':origin, 'direction':direction};
+ } //}}}
+ function raycast(canvas, origin, direction, node) { //{{{
+@@ -419,7 +337,7 @@
+ 	
+ 	return hit;
+ } //}}}
+-function raycastXY(canvas, x, y, node) { //{{{
++function raycastXY(canvas, x, y, node, faceWinding) { //{{{
+ 	//Performs raycast on given node using x and y screenspace coordinates.
+ 	//Returns hit objects with hit position, normals, barycentric coordinates, element number, and indices of ray-triangle intersection.
+ 	//TODO: Diagnose marker issues with orthographic views and slr-eustatic updates when switching between basins.
+@@ -426,11 +344,11 @@
+ 	var ray = screenToModelRay(canvas, x, y, node);
+ 	return raycast(canvas, ray.origin, ray.direction, node);
+ } //}}}
+-function animateValue(current, target, duration, stepCallback, doneCallback) { //{{{
+-	//Animates scalar value for length duration, calling callback each step.
+-	//TODO: Specify lerp easing as option (cubic, linear, cosine).
++function animateValue(current, target, duration, easing, stepCallback, doneCallback) { //{{{
++	//Animates scalar value for length duration, calling callback each step. Specify smooth easing as a string ('swing', 'linear').
+ 	$({'value':current}).animate({'value':target}, {
+ 		duration: duration,
++		easing: easing,
+ 		step: stepCallback,
+ 		done: doneCallback
+ 	});
+@@ -580,7 +498,7 @@
+ 	canvas.height = rect.height;
+ 	canvas.gl.viewport(0, 0, canvas.width, canvas.height);
+ 	
+-	if (!isEmptyOrUndefined(canvas.overlaycanvas)) {
++	if (!VESL.Helpers.isEmptyOrUndefined(canvas.overlaycanvas)) {
+ 		rect = canvas.overlaycanvas.getBoundingClientRect();
+ 		canvas.overlaycanvas.width  = rect.width;
+ 		canvas.overlaycanvas.height = rect.height;
+Index: ../trunk-jpl/src/m/plot/applyoptions.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/applyoptions.js	(revision 22434)
+@@ -60,10 +60,14 @@
+ 			cgradient = ccontext.createLinearGradient(0, 0, 0, cheight);
+ 			//}}}
+ 			//{{{ Draw colorbar gradient
++			var position;
++			var offset = 1 / (colorbar.length - 1) / 2;
++			var scaling = 1 - 2 * offset;
+ 			for (var i=0; i < colorbar.length; i++) {
+ 				color = colorbar[colorbar.length-i-1];
+ 				color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];
+-				cgradient.addColorStop(i/colorbar.length*(cdivisions/(cdivisions+1.0))+(1.0/(cdivisions+1.0)),'rgba('+color.toString()+', 1.0)');
++				position = (i / (colorbar.length - 1) * scaling) + offset;
++				cgradient.addColorStop(position, 'rgba(' + color.toString() + ', 1.0)');
+ 			}
+ 			ccontext.fillStyle=cgradient;
+ 			ccontext.fillRect(0, 0, cwidth, cheight);
+@@ -118,24 +122,43 @@
+ 	}
+ 	tcontext = tcanvas.getContext('2d');
+ 	tgradient = tcontext.createLinearGradient(0, 0, 0, 256);
+-
++	
+ 	var cmap = options.getfieldvalue('colormap','jet');
+ 	var colorbar = colorbars[cmap];
+-	for (var i=0; i < colorbar.length; i++) {
+-		color = colorbar[colorbar.length-i-1];
+-		color = [Math.round(color[0]*255), Math.round(color[1]*255), Math.round(color[2]*255)];
+-		tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+', 1.0)');
++	for (var i = 0; i < colorbar.length; i++) {
++		color = colorbar[colorbar.length - i - 1];
++		color = [Math.round(color[0] * 255), Math.round(color[1] * 255), Math.round(color[2] * 255)];
++		tgradient.addColorStop(i / (colorbar.length - 1), 'rgba(' + color.toString() + ', 1.0)');
+ 	}
+-
+ 	tcontext.fillStyle = tgradient;
+ 	tcontext.fillRect(0, 0, 256, 256);
++	
++	//Allow for special texture colors, drawing each color in equal width vertical rectangles. The last rectanglar section is reserved for the colormap.
++	if (options.exist('maskregion')) {
++		var maskObject = options.getfieldvalue('maskregion',{'enabled':false});
++		if (maskObject.enabled && !VESL.Helpers.isEmptyOrUndefined(maskObject.colors)) {
++			var x = 0;
++			var sections = Object.keys(maskObject.colors).length + 1;
++			var size = 256;
++			var width = Math.floor(1 / sections * size);
++			for (var color in maskObject.colors) {
++				tcontext.fillStyle = maskObject.colors[color];
++				tcontext.fillRect(x++ * width, 0, width, size);
++			}
++		}
++	}
++	
+ 	tURL = tcanvas.toDataURL();
+-	canvas.unitNode.texture = initTexture(canvas.gl, tURL);
++	if (options.getfieldvalue('clf','on')=='off') {
++		canvas.nodes['unit' + (Object.keys(canvas.nodes).length - 1)].texture = initTexture(canvas.gl, tURL);
++	} else {
++		canvas.nodes.unit.texture = initTexture(canvas.gl, tURL);
++	}
+ 	//}}}
+ 	//{{{ text display
+ 	var overlaycanvasid = options.getfieldvalue('overlayid', options.getfieldvalue('canvasid')+'-overlay');
+ 	var overlaycanvas = $('#'+overlaycanvasid)[0];
+-	if (!isEmptyOrUndefined(overlaycanvas)) {
++	if (!VESL.Helpers.isEmptyOrUndefined(overlaycanvas)) {
+ 		//Get drawing context and save reference on main WebGL canvas
+ 		var ctx = overlaycanvas.getContext('2d');
+ 		canvas.overlaycanvas = overlaycanvas;
+@@ -215,7 +238,7 @@
+ 				
+ 				// function declared in slr-gfm sim-front-end-controller.js
+ 				// if labels are behind the globe sphere then skip iteartion and do not display them
+-				if (isLabelVisible(textLabel)) {
++				if (VESL.UI.isLabelVisible(textLabel)) {
+ 					//Transform from world space to viewport space
+ 					var screenPoint = vec3.transformMat4(vec3.create(), textLabel.position, canvas.camera.vpMatrix);
+ 					var x = (screenPoint[0] + 1.0) * (canvas.width / 2) + canvas.selector.offset().left;
+@@ -271,7 +294,7 @@
+ 			if (!object.enabled) { continue; }
+ 			if ('sky' === renderObject && !('sky' in canvas.nodes)) {
+ 				var mesh = GL.Mesh.icosahedron({size: 6371000 * canvas.atmosphere.scaleHeight, subdivisions: 5});
+-				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
++				var texture = initTexture(gl, canvas.assetsPath + '/textures/TychoSkymapII_t4_2k.jpg');
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
+@@ -286,7 +309,7 @@
+ 			}
+ 			if ('space' === renderObject && !('space' in canvas.nodes)) {
+ 				var mesh = GL.Mesh.sphere({size: 6371000 * 20});
+-				var texture = initTexture(gl, canvas.rootPath + 'textures/TychoSkymapII_t4_2k.jpg');
++				var texture = initTexture(gl, canvas.assetsPath + '/textures/TychoSkymapII_t4_2k.jpg');
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
+@@ -300,7 +323,7 @@
+ 					'translation',translation
+ 				);
+ 			}
+-			if ('coastlines' === renderObject && !('coastlines' in canvas.nodes)) {
++			if ('coastlines' === renderObject) {
+ 				node = new Node(
+ 					'canvas', canvas,
+ 					'options', options,
+@@ -351,6 +374,7 @@
+ 					'name', 'axis',
+ 					'shaderName', 'Colored',
+ 					'drawMode', gl.LINES,
++					'diffuseColor', [1.0, 0.0, 0.0, 1.0],
+ 					'lineWidth', options.getfieldvalue('linewidth', 1),
+ 					'scale', [object.scale, object.scale, object.scale],
+ 					'rotation', [0, 0, 0]
+@@ -389,12 +413,14 @@
+ 			}
+ 			if ('clouds' === renderObject && !('clouds0' in canvas.nodes)) {
+ 				//clouds				
+-				var mesh = GL.Mesh.fromURL(canvas.rootPath+'obj/cloud.obj');
++				var mesh = GL.Mesh.fromURL(canvas.assetsPath + '/obj/cloud.obj');
+ 				for (var i = 0; i < object.quantity; i++) {
+ 					//TODO: More options, less magic numbers. Add animation. Better shading.
+-					var offset = [	translation[0] + (Math.random() - 0.5) * 2 * object.range, 
+-									translation[1] + object.height + (Math.random() - 0.5) * 0.2 * object.range, 
+-									translation[2] + (Math.random() - 0.5) * 2 * object.range];
++					var offset = [randomizeAxis(translation[0], object.range), 
++												randomizeCloudHeight(translation[1], object), 
++												randomizeAxis(translation[2], object.range)];
++					var randomSize = randomizeCloudSize(object.scale);
++					var randomColor = randomizeCloudColor();
+ 					node = new Node(
+ 						'canvas', canvas,
+ 						'options', options,
+@@ -401,11 +427,10 @@
+ 						'renderObject', object,
+ 						'name', 'clouds' + i,
+ 						'shaderName', 'ColoredDiffuse',
+-						'animation', {'time': Date.now(),'target': translation,'current': translation},
+-						'diffuseColor', [0.7,0.7,0.7,1.0],
+-						'specularColor', [0.0,0.0,0.0,1.0],
++						'diffuseColor', [randomColor, randomColor, randomColor, 1.0],
++						'specularColor', [0.1, 0.1, 0.1, 1.0],
+ 						'mesh', mesh,
+-						'scale', [object.scale, object.scale, object.scale],
++						'scale', [randomSize, randomSize, randomSize],
+ 						'translation', offset
+ 					);
+ 				}
+@@ -413,3 +438,31 @@
+ 		}
+ 	} //}}}
+ } //}}}
++
++function randomizeCloudHeight(canvasGroundHeight, object) {
++		// -+7000 seems a reasonable range
++		var maxHeight = object.height + 7000;
++		var minHeigth = object.height - 7000;
++		var randomHeight = (Math.random() * (maxHeight - minHeigth)) + minHeigth;
++		
++		return canvasGroundHeight + randomHeight;
++}
++
++// assumes that originAxisValue is the mid-value between min and max.
++function randomizeAxis(originAxisValue, range) {
++		return originAxisValue + (Math.random() - 0.5) * (range * 2); 
++}
++
++function randomizeCloudSize(scale) {
++	var maxResize = 1.3;
++	var minResize = 0.5;
++	var randomizationFactor = Math.random() * (maxResize - minResize) + minResize; 
++	return scale * randomizationFactor;
++}
++
++function randomizeCloudColor() {
++	var lighestColor = 1;
++	var darkestColor = 0.9;
++	var randomColor = Math.random() * (lighestColor - darkestColor) + darkestColor;
++	return randomColor;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/m/plot/plotmodel.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plotmodel.js	(revision 22434)
+@@ -35,7 +35,7 @@
+ 	if (numberofplots){
+ 		//Reinitialize all canvases
+ 		for (var i=0;i<numberofplots;i++){
+-			document.getElementById(options.list[i].getfieldvalue('canvasid')).initialized = false;
++			if (options.list[i].getfieldvalue('clf','on')!='off') document.getElementById(options.list[i].getfieldvalue('canvasid')).initialized = false;
+ 		}
+ 		//Go through all data plottable and close window if an error occurs
+ 		for (var i=0;i<numberofplots;i++){
+Index: ../trunk-jpl/src/m/plot/webgl_node.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/webgl_node.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/webgl_node.js	(revision 22434)
+@@ -32,9 +32,12 @@
+ 	this.lineWidth = options.getfieldvalue('lineWidth', 						1.0);									//Controls width of gl lines. No reliable support across windows platforms.
+ 	this.lightingBias = options.getfieldvalue('lightingBias', 					0.0);									//Controls width of gl lines. No reliable support across windows platforms.
+ 	this.log = options.getfieldvalue('log', 									false);									//Controls logarithmic color axis scaling for texturing.
++	this.maskAll = options.getfieldvalue('maskAll', 							[]);									//Masking array used for marking all region elements.
++	this.maskBoundary = options.getfieldvalue('maskBoundary', 					[]);									//Masking array used for marking region boundary edges.
+ 	this.maskColor = options.getfieldvalue('maskColor', 						vec4.fromValues(0.0, 0.0, 1.0, 1.0));	//ISSM shader uniform controlling ocean masking color.
+ 	this.maskEnabled = options.getfieldvalue('maskEnabled', 					false);									//ISSM shader uniform toggling ocean masking.
+ 	this.maskHeight = options.getfieldvalue('maskHeight', 						150.0);									//ISSM shader uniform controlling height at which ocean masking is cut off.
++	this.maskObject = options.getfieldvalue('maskObject', 						{'enabled':false});						//Masking array options object.
+ 	this.maskZerosColor = options.getfieldvalue('maskZerosColor', 				[1.0, 1.0, 1.0, 1.0]);					//ISSM shader uniform controlling value masking color.
+ 	this.maskZerosEnabled = options.getfieldvalue('maskZerosEnabled', 			false);									//ISSM shader uniform toggling value masking.
+ 	this.maskZerosTolerance = options.getfieldvalue('maskZerosTolerance', 		1e-6);									//ISSM shader uniform controlling tolerance of value to zero value when masking.
+@@ -167,9 +170,9 @@
+ 	var rotation = options.getfieldvalue('rotation', undefined);
+ 	var scale = options.getfieldvalue('scale', undefined);
+ 	
+-	if (!isEmptyOrUndefined(translation)) this.translation = translation;
+-	if (!isEmptyOrUndefined(rotation)) this.rotation = rotation;
+-	if (!isEmptyOrUndefined(scale)) this.scale = scale;
++	if (!VESL.Helpers.isEmptyOrUndefined(translation)) this.translation = translation;
++	if (!VESL.Helpers.isEmptyOrUndefined(rotation)) this.rotation = rotation;
++	if (!VESL.Helpers.isEmptyOrUndefined(scale)) this.scale = scale;
+ 	this.updateModelMatrix();
+ } //}}}
+ Node.prototype.patch = function() { //{{{
+@@ -193,6 +196,7 @@
+ 	this.vertices = vertices;
+ 	this.diffuseColor = edgeColor;
+ 	this.updateDiffuseColor();
++	this.computeMasks();
+ 	
+ 	this.patchVertices(faceVertexCData, faces, vertices);
+ 	this.patchCoords(faceVertexCData, faces, vertices);
+@@ -207,7 +211,7 @@
+ 	var vertexArray;
+ 	var face;
+ 	
+-	if (isEmptyOrUndefined(faceVertexCData)) {
++	if (VESL.Helpers.isEmptyOrUndefined(faceVertexCData)) {
+ 		vertexArray = new Float32Array(vertices[0].length * 3);
+ 		for(var i = 0, v = 0; i < vertices[0].length; i++) {	
+ 			vertexArray[v++] = vertices[0][i];
+@@ -284,7 +288,7 @@
+ 	var caxis = this.caxis;
+ 	var face;
+ 	
+-	if (isEmptyOrUndefined(faceVertexCData)) { return; }
++	if (VESL.Helpers.isEmptyOrUndefined(faceVertexCData)) { return; }
+ 	
+ 	//Use logarithmic scaling if it is valid
+ 	if (this.log !== false && this.log !== 'off') {	
+@@ -307,7 +311,7 @@
+ 						coordArray[t++] = 0.0;
+ 					}
+ 					else {
+-						coordArray[t++] = 0.5;
++						coordArray[t++] = this.queryCoordMask(i); //Account for special texturing
+ 						coordArray[t++] = clamp((faceVertexCData[i] - caxis[0]) / crange, 0.0, 1.0);
+ 					}
+ 				}
+@@ -324,7 +328,7 @@
+ 					coordArray[t++] = 0.0;
+ 				}
+ 				else {
+-					coordArray[t++] = 0.5;
++					coordArray[t++] = this.queryCoordMask(i); //Account for special texturing
+ 					coordArray[t++] = clamp((faceVertexCData[i] - caxis[0]) / crange, 0.0, 1.0);
+ 				}
+ 			}
+@@ -363,8 +367,8 @@
+ 		}
+ 	}
+ 	
+-	if (this.computeIndices === true && !isEmptyOrUndefined(faces)) {
+-		if (!isEmptyOrUndefined(faces[0])) { //Check for 2D format and process if needed
++	if (this.computeIndices === true && !VESL.Helpers.isEmptyOrUndefined(faces)) {
++		if (!VESL.Helpers.isEmptyOrUndefined(faces[0])) { //Check for 2D format and process if needed
+ 			if (faceColor !== 'none') { //Check for triangle rendering
+ 				indexArray = new Uint16Array(faces.length * 3);
+ 				for(var i = 0, f = 0; i < faces.length; i++) {
+@@ -398,11 +402,9 @@
+ 	//NOTE: Only support coord buffers currently.
+ 	var args = Array.prototype.slice.call(arguments);
+ 	var options = new pairoptions(args.slice(0,args.length));
+-
++	
+ 	var coords = options.getfieldvalue('Coords', undefined);
+-	var cacheIndex = options.getfieldvalue('CacheIndex', false);
+-	
+-	if (!isEmptyOrUndefined(coords)) {
++	if (!VESL.Helpers.isEmptyOrUndefined(coords)) {
+ 		this.patchCoords(coords, this.faces, this.vertices);
+ 		var buffer = this.mesh.getBuffer("coords");
+ 		buffer.data = this.arrays.coords;
+@@ -412,7 +414,7 @@
+ Node.prototype.computeOctree = function() { //{{{
+ 	//Computes and caches octrees for a node.
+ 	var octree = this.canvas.octrees[this.name];
+-	if (isEmptyOrUndefined(octree)) {
++	if (VESL.Helpers.isEmptyOrUndefined(octree)) {
+ 		octree = new GL.Octree(this.mesh);
+ 	}
+ 	this.canvas.octrees[this.name] = octree;
+@@ -438,7 +440,7 @@
+ 			var array = [];
+ 			var coordinateObject = vertices[i];
+ 			var j = 0;
+-			if (isEmptyOrUndefined(indices)) {
++			if (VESL.Helpers.isEmptyOrUndefined(indices)) {
+ 				for (var key in coordinateObject) {
+ 					console.log(key);
+ 					array[j++] = coordinateObject[key];
+@@ -482,31 +484,28 @@
+ } //}}}
+ Node.prototype.scaleVertices = function(md, x, y, z, elements, scale, maskObject) { //{{{
+ 	//Scales and returns vertices x, y, and z by factor scale. Uses md.geometry.scale for heightscaling in 3d meshes.
++	var region = maskObject.region;
++	var mask = maskObject.enabled ? maskObject.heightmask[region] : [];
++	var maskScale = maskObject.enabled ? maskObject.scale : 1;
++	
++	//The maskScaleField is the height scaling array. Use one if provided by maskObject.field, otherwise use md.geometry.surface
++	var maskScaleField = !VESL.Helpers.isEmptyOrUndefined(maskObject.scaleField) ? maskObject.scaleField : md.geometry.surface;
++	//If md.geometry.surface was empty and was used as maskScaleField, assign an empty array to both.
++	if (!maskScaleField) {
++		md.geometry.surface = NewArrayFill(md.mesh.x.length,0);
++		maskScaleField = md.geometry.surface;
++	}
++	
++	//Scale in 3D if using globe model, or in 2D otherwise.
+ 	if (md.mesh.classname() === 'mesh3dsurface') {
+-		if (!maskObject.enabled) {
+-			var xyz, magnitude;
+-			x = x.slice();
+-			y = y.slice();
+-			z = z.slice();
+-			for(var i = 0; i < x.length; i++) {
+-				xyz = vec3.fromValues(x[i], y[i], z[i]);
+-				magnitude = 1 + md.geometry.surface[i] * scale / vec3.length(xyz);
+-				vec3.scale(xyz, xyz, magnitude);
+-				x[i] = xyz[0];
+-				y[i] = xyz[1];
+-				z[i] = xyz[2];
+-			}
+-		}
+-		else {
+-			var mask = maskObject.mask;
+-			var maskScale = maskObject.scale;
+-			var element;
+-			for (var i = 0; i < mask.length; i++) {
+-				if (mask[i] === 1) {
++		var element;
++		if (x.length === md.mesh.numberofelements) { //element plot
++			for (var i = 0; i < x.length; i++) {
++				if (maskObject.enabled) { //Scale the element if mask is not enabled, or if it is, only if it is also in the mask
+ 					element = elements[i];
+ 					for (var j = 0; j < 3; j++) {
+ 						xyz = vec3.fromValues(x[element[j] - 1], y[element[j] - 1], z[element[j] - 1]);
+-						magnitude = 1 + md.geometry.surface[element[j] - 1] * scale * maskScale / vec3.length(xyz);
++						magnitude = 1 + maskScaleField[element[j] - 1] * mask[i] * scale * maskScale / vec3.length(xyz);
+ 						vec3.scale(xyz, xyz, magnitude);
+ 						x[element[j] - 1] = xyz[0];
+ 						y[element[j] - 1] = xyz[1];
+@@ -516,16 +515,128 @@
+ 				}
+ 			}
+ 		}
+-	}
+-	else {
++		else if (x.length === md.mesh.numberofvertices) { //node plot
++			for (var i = 0; i < x.length; i++) {
++				if (!maskObject.enabled || mask[i] === 1) { //Scale the node if mask is not enabled, or if it is, only if it is also in the mask
++					xyz = vec3.fromValues(x[i], y[i], z[i]);
++					magnitude = 1 + maskScaleField[i] * scale * maskScale / vec3.length(xyz);
++					vec3.scale(xyz, xyz, magnitude);
++					x[i] = xyz[0];
++					y[i] = xyz[1];
++					z[i] = xyz[2];
++				}
++			}
++		}
++	} else {
+ 		z = z.slice();
+-		var zMin = ArrayMin(md.geometry.surface);
++		var zMin = ArrayMin(maskScaleField);
+ 		for(var i = 0; i < z.length; i++) {
+-			z[i] = (z[i] - zMin) * scale + zMin;
++			if (!maskObject.enabled || mask[i] === 1) { //Scale the element if mask is not enabled, or if it is, only if it is also in the mask
++				z[i] = (z[i] - zMin) * scale + zMin;
++			}
+ 		}
+ 	}
+ 	return [x, y, z];
+ } //}}}
++Node.prototype.computeMasks = function() { //{{{
++	//NOTE: Since sets are not yet widely supported, use array with binary values to represent if object is in set.
++	//NOTE: Only support element wise masks for now.
++	var maskObject = this.maskObject;
++	if (!maskObject.enabled) { return; }
++	var region = maskObject.region;
++	var mask = maskObject.mask[region];
++	var maskRegion = []; //new Set()
++	var maskAdjacency = []; //new Set()
++	var adjacentElements;
++	var adjacentElements2;
++	var adjacentNodes;
++	var adjacentNodes2;
++	var adjacencyLength; //length of connectivity array - 3 for elements, many for nodes
++	var index;
++	//For each element in the mask elements array,
++	if (mask.length === md.mesh.numberofelements) { //element plot
++		if (md.mesh.elementconnectivity) {
++			var adjacencyLength = 3;
++			for (var i = 0; i < mask.length; i++) {
++				//Determine if element is in the mask
++				if (mask[i] === 1) {
++					//Then add each element to the adjacency set and mask region set
++					adjacentElements = md.mesh.elementconnectivity[i];
++					for (var j = 0; j < adjacencyLength; j++) {
++						index = adjacentElements[j] - 1;
++						maskAdjacency[index] = true;
++						
++						//Get second level of adjacent elemnents to form solid boundary (first layer look like this: /\/\/\/\/\; second layer looks like this \/\/\/\/\/; combined = |       |
++						adjacentElements2 = md.mesh.elementconnectivity[index];
++						for (var k = 0; k < adjacencyLength; k++) {
++							index = adjacentElements2[k] - 1;
++							maskAdjacency[index] = true;
++						}
++					}
++					maskRegion[i] = true;
++				}
++			}
++		}
++	}
++	else if (mask.length === md.mesh.numberofvertices) { //node plot
++		if (md.mesh.nodeconnectivity) {
++			var adjacencyLength = md.mesh.nodeconnectivity[0].length;
++			for (var i = 0; i < mask.length; i++) {
++				//Determine if node is in the mask
++				if (mask[i] === 1) {
++					//Then add each node to the adjacency set and mask region set
++					adjacentNodes = md.mesh.nodeconnectivity[i];
++					for (var j = 0; j < adjacencyLength; j++) {
++						index = adjacentNode[j];
++						maskAdjacency[index] = true;
++						
++						//Get second level of adjacent elemnents to form solid boundary (first layer look like this: /\/\/\/\/\; second layer looks like this \/\/\/\/\/; combined = |       |
++						adjacentNodes2 = md.mesh.nodeconnectivity[index];
++						for (var k = 0; k < adjacencyLength; k++) {
++							index = adjacentNodes2[k];
++							maskAdjacency[index] = true;
++						}
++					}
++					maskRegion[i] = true;
++				}
++			}
++		}
++	}
++	
++	//Then subtract the mask elements array from the mask adjacency array.
++	var maskBoundary = [];
++	for (var i in maskAdjacency) {
++		if (!(i in maskRegion)) {
++			maskBoundary[i] = true;
++		}
++	}
++	this.maskBoundary = maskBoundary;
++	
++	//For each element not in any mask region (default to mask[0] in slr-gfm), change color to mask color.
++	var maskAll = maskObject.mask[0];
++	this.maskAll = maskAll;
++} //}}}
++Node.prototype.queryCoordMask = function(index) { //{{{
++	//Calculate UV coordinate offsets for special color texture lookup.
++	if (!this.maskObject.enabled) {
++		return 1.0 
++	}
++	else {
++		//var sections = 3; //Object.keys(maskObject.colors).length + 1
++		//var boundaryCoord = 0.5 / sections;
++		//var maskCoord = 1.5 / sections;
++		//var textureCoord = 2.5 / sections;
++		if (index in this.maskBoundary) {
++			return 0.166666667; //boundaryCoord - edge color
++		}
++		else if (this.maskAll[index] === 0) {
++			return 0.5; //maskCoord - masked color
++		}
++		else {
++			return 0.833333333; //textureCoord - default colormap
++		}
++	}
++} //}}}
+ Node.prototype.mergeVertices = function(x1, y1, z1, elements1, x2, y2, z2, elements2) { //{{{
+ 	//Merges and returns two sets of indexed xyz vertices.
+ 	elements2 = elements2.slice();
+Index: ../trunk-jpl/src/m/plot/plot_unit.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plot_unit.js	(revision 22434)
+@@ -6,12 +6,20 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
+-	//if ('unit' in canvas.nodes) {
+-	//	if (
+-	//	canvas.nodes.unit.updateBuffer('Coords', data);
+-	//	return;
+-	//}
+-	//else {
++	var name = 'unit';
++	if ('unit' in canvas.nodes) {
++		if (options.getfieldvalue('clf','on')=='on') {
++			for (var node in canvas.nodes) {
++				if (node.startsWith('unit')) {
++					delete canvas.octrees[node];
++					delete canvas.nodes[node];
++				}
++			}
++		}
++		else {
++			name = 'unit' + Object.keys(canvas.nodes).length;
++		}
++	}
+ 
+ 	//{{{ declare variables:
+ 	//Process data and model
+@@ -36,7 +44,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskregion',{'enabled':false}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
+@@ -43,33 +51,38 @@
+ 	//Compute gl variables:
+ 	var edgecolor = options.getfieldvalue('edgecolor', [1.0, 1.0, 1.0 ,1.0]);
+ 	var maskzeros = options.getfieldvalue('maskzeros', {});
++	var render = options.getfieldvalue('render', {});
++	var cullFace = ("unit" in render) ? canvas.gl[render.unit.cullFace] : canvas.gl.BACK;
+ 	var node = new Node(
+ 		'canvas', canvas,
+ 		'options', options,
+-		'name', 'unit',
++		'name', name,
+ 		'shaderName', 'TexturedDiffuse',
+ 		'alpha', options.getfieldvalue('alpha', 1.0),
+ 		'caxis', options.getfieldvalue('caxis',[ArrayMin(data), ArrayMax(data)]),
+-		//'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, md.mesh.classname() === 'mesh3dsurface' ? (zlim[0] + zlim[1]) / 2 : zlim[0]],
+ 		'center', [(xlim[0] + xlim[1]) / 2, (ylim[0] + ylim[1]) / 2, (zlim[0] + zlim[1]) / 2],
+-		'lightingBias', 0.8,
++		'cullFace', cullFace,
++		'lightingBias', canvas.view.lightingBias,
+ 		'diffuseColor', edgecolor,
+ 		'specularStrength', 0.0,
+-		'enabled', options.getfieldvalue('nodata','off') == 'off',
++		'enabled', options.getfieldvalue('nodata','off') == 'off' || (("unit" in render) && render.unit.enabled),
+ 		'log', options.getfieldvalue('log',false),
+ 		'maskEnabled', options.getfieldvalue('innermask','off') == 'on',
+ 		'maskHeight', options.getfieldvalue('innermaskheight', 150.0) / options.getfieldvalue('heightscale', 1),
+ 		'maskColor', options.getfieldvalue('innermaskcolor',[0.0, 0.0, 1.0, 1.0]),
++		'maskObject', options.getfieldvalue('maskregion',{'enabled':false}),
+ 		'maskZerosColor', defaultFor(maskzeros.color,[1.0, 1.0, 1.0, 1.0]),
+ 		'maskZerosEnabled', defaultFor(maskzeros.enabled,false),
+ 		'maskZerosTolerance', defaultFor(maskzeros.tolerance,1e-3),
+ 		'maskZerosZeroValue', defaultFor(maskzeros.zeroValue,0.5),
+ 		'rotation', [-90, 0, 0],
+-		'scale', scale
++		'scale', ("unit" in render) ? [render.unit.scale, render.unit.scale, render.unit.scale] : scale
+ 	);
+ 	//}
+-	canvas.unitNode = node;
+-	canvas.unitData = data;
++	if (options.getfieldvalue('clf','on')=='on') {
++		canvas.unitNode = node;
++		canvas.unitData = data;
++	}
+ 	//}}}
+ 	switch(datatype){
+ 		//{{{ element plot
+Index: ../trunk-jpl/src/m/plot/plot_overlay.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 22433)
++++ ../trunk-jpl/src/m/plot/plot_overlay.js	(revision 22434)
+@@ -40,7 +40,7 @@
+ 		scale = [1, 1, options.getfieldvalue('heightscale', 1)];
+ 	}
+ 	else {
+-		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskscale',{}));
++		vertices = Node.prototype.scaleVertices(md, x, y, z, elements, options.getfieldvalue('heightscale', 1), options.getfieldvalue('maskregion',{'enabled':false}));
+ 		scale = [1, 1, 1];
+ 	}
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22434-22435.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22434-22435.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22434-22435.diff	(revision 22755)
@@ -0,0 +1,174 @@
+Index: ../trunk-jpl/src/m/classes/amr.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/amr.js	(revision 22434)
++++ ../trunk-jpl/src/m/classes/amr.js	(revision 22435)
+@@ -6,30 +6,30 @@
+ function amr (){
+ 	//methods
+ 	this.setdefaultparameters = function(){// {{{
+-   	this.hmin									= 100.;
+-      this.hmax									= 100.e3;
+-		this.fieldname								= "Vel";
+-		this.err										= 3.;
+-   	this.keepmetric							= 1;
+-   	this.gradation								= 1.5;
++		this.hmin								= 100.;
++		this.hmax								= 100.e3;
++		this.fieldname							= "Vel";
++		this.err								= 3.;
++		this.keepmetric							= 1;
++		this.gradation							= 1.5;
+ 		this.groundingline_resolution			= 500.;
+-   	this.groundingline_distance			= 0;
+-   	this.icefront_resolution				= 500;
+-   	this.icefront_distance					= 0;
+-      this.thicknesserror_resolution		= 500;
+-      this.thicknesserror_threshold			= 0;
+-      this.thicknesserror_groupthreshold 	= 0;
+-      this.thicknesserror_maximum			= 0;
+-      this.deviatoricerror_resolution		= 500;	
+-      this.deviatoricerror_threshold		= 0;	
+-      this.deviatoricerror_groupthreshold	= 0;	
+-      this.deviatoricerror_maximum			= 0;	
++		this.groundingline_distance				= 0;
++		this.icefront_resolution				= 500;
++		this.icefront_distance					= 0;
++		this.thicknesserror_resolution			= 500;
++		this.thicknesserror_threshold			= 0;
++		this.thicknesserror_groupthreshold 		= 0;
++		this.thicknesserror_maximum				= 0;
++		this.deviatoricerror_resolution			= 500;	
++		this.deviatoricerror_threshold			= 0;	
++		this.deviatoricerror_groupthreshold		= 0;	
++		this.deviatoricerror_maximum			= 0;	
+ 	}// }}}
+ 	this.disp= function(){// {{{
+ 		console.log(sprintf('   amr parameters:'));
+ 		fielddisplay(this,'hmin','minimum element length');
+-      fielddisplay(this,'hmax','maximum element length');
+-      fielddisplay(this,'fieldname','name of input that will be used to compute the metric (should be an input of FemModel)');
++		fielddisplay(this,'hmax','maximum element length');
++		fielddisplay(this,'fieldname','name of input that will be used to compute the metric (should be an input of FemModel)');
+ 		fielddisplay(this,'keepmetric','indicates whether the metric should be kept every remeshing time');
+ 		fielddisplay(this,'gradation','maximum ratio between two adjacent edges');
+ 		fielddisplay(this,'groundingline_resolution','element length near the grounding line');
+@@ -49,66 +49,66 @@
+ 		return "amr";
+ 
+ 	}// }}}
+-		this.checkconsistency = function(md,solution,analyses) { //{{{
+-         checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
+-         checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+-         checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
+-         checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
+-         checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+-         checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-         checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+-         checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-         checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+-         checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-         checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-         checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-         checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
+-         checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-         checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
+-         checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
+-		} // }}}
+-		this.marshall=function(md,prefix,fid) { //{{{
+-         WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
+-         WriteData(fid,prefix,'object',this,'fieldname','hmin','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','hmax','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','fieldname','format','String');
+-         WriteData(fid,prefix,'object',this,'fieldname','err','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','keepmetric','format','Integer');
+-         WriteData(fid,prefix,'object',this,'fieldname','gradation','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','groundingline_resolution','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','groundingline_distance','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','icefront_resolution','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','icefront_distance','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_resolution','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_threshold','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_groupthreshold','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_maximum','format','Double');
+-         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_resolution','format','Double');
+-         writedata(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','double');
+-         writedata(fid,prefix,'object',this,'fieldname','deviatoricerror_groupthreshold','format','double');
+-         WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_maximum','format','Double');
+-		}//}}}
+-		this.fix=function() { //{{{
+-		}//}}}
++	this.checkconsistency = function(md,solution,analyses) { //{{{
++		checkfield(md,'fieldname','amr.hmax','numel',[1],'>',0,'NaN',1);
++		checkfield(md,'fieldname','amr.hmin','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++		checkfield(md,'fieldname','amr.keepmetric','numel',[1],'>=',0,'<=',1,'NaN',1);
++		checkfield(md,'fieldname','amr.gradation','numel',[1],'>=',1.1,'<=',5,'NaN',1);
++		checkfield(md,'fieldname','amr.groundingline_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++		checkfield(md,'fieldname','amr.groundingline_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','amr.icefront_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++		checkfield(md,'fieldname','amr.icefront_distance','numel',[1],'>=',0,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','amr.thicknesserror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++		checkfield(md,'fieldname','amr.thicknesserror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++		checkfield(md,'fieldname','amr.thicknesserror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++		checkfield(md,'fieldname','amr.thicknesserror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
++		checkfield(md,'fieldname','amr.deviatoricerror_resolution','numel',[1],'>',0,'<',this.hmax,'NaN',1);
++		checkfield(md,'fieldname','amr.deviatoricerror_threshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++		checkfield(md,'fieldname','amr.deviatoricerror_groupthreshold','numel',[1],'>=',0,'<=',1,'NaN',1);
++		checkfield(md,'fieldname','amr.deviatoricerror_maximum','numel',[1],'>=',0,'NaN',1,'Inf',1);
++	} // }}}
++	this.marshall=function(md,prefix,fid) { //{{{
++		WriteData(fid,prefix,'name','md.amr.type','data',1,'format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','hmin','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','hmax','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','fieldname','format','String');
++		WriteData(fid,prefix,'object',this,'fieldname','err','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','keepmetric','format','Integer');
++		WriteData(fid,prefix,'object',this,'fieldname','gradation','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','groundingline_resolution','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','groundingline_distance','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','icefront_resolution','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','icefront_distance','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_resolution','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_threshold','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_groupthreshold','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','thicknesserror_maximum','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_resolution','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_threshold','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_groupthreshold','format','Double');
++		WriteData(fid,prefix,'object',this,'fieldname','deviatoricerror_maximum','format','Double');
++	}//}}}
++	this.fix=function() { //{{{
++	}//}}}
+ 	//properties 
+ 	// {{{
+-	this.hmin									= 0.;
+-	this.hmax									= 0.;
+-	this.fieldname								= "";
+-	this.err										= 0.;
++	this.hmin								= 0.;
++	this.hmax								= 0.;
++	this.fieldname							= "";
++	this.err								= 0.;
+ 	this.keepmetric							= 0;
+-	this.gradation								= 0.;
++	this.gradation							= 0.;
+ 	this.groundingline_resolution			= 0.;
+-	this.groundingline_distance			= 0.;
++	this.groundingline_distance				= 0.;
+ 	this.icefront_resolution				= 0.;
+ 	this.icefront_distance					= 0.;
+-	this.thicknesserror_resolution		= 0.;
++	this.thicknesserror_resolution			= 0.;
+ 	this.thicknesserror_threshold			= 0.;
+-	this.thicknesserror_groupthreshold	= 0.;
+-	this.thicknesserror_maximum			= 0.;
+-	this.deviatoricerror_resolution		= 0.;
+-	this.deviatoricerror_threshold		= 0.;
+-	this.deviatoricerror_groupthreshold	= 0.;
++	this.thicknesserror_groupthreshold		= 0.;
++	this.thicknesserror_maximum				= 0.;
++	this.deviatoricerror_resolution			= 0.;
++	this.deviatoricerror_threshold			= 0.;
++	this.deviatoricerror_groupthreshold		= 0.;
+ 	this.deviatoricerror_maximum			= 0.;
+ 
+ 	this.setdefaultparameters();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22435-22436.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22435-22436.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22435-22436.diff	(revision 22755)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22436)
+@@ -0,0 +1,3 @@
++Rules for coupling ISSM and MITgcm:
++
++* 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22436-22437.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22436-22437.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22436-22437.diff	(revision 22755)
@@ -0,0 +1,1359 @@
+Index: ../trunk-jpl/src/c/cores/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22437)
+@@ -25,7 +25,7 @@
+ 	int     dummy;
+ 	int     num_dependents=0;
+ 	int     num_independents=0;
+-	bool    isautodiff       = false;
++	bool    isautodiff,iscontrol;
+ 	char   *driver           = NULL;
+ 	size_t  tape_stats[15];
+ 
+@@ -36,8 +36,9 @@
+ 
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++	femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum);
+ 
+-	if(isautodiff){
++	if(isautodiff && !iscontrol){
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
+Index: ../trunk-jpl/src/c/classes/Nodalvalue.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22437)
+@@ -8,14 +8,7 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../modules/SurfaceAreax/SurfaceAreax.h"
+-#include "../classes/Params/Parameters.h"
+-#include "../classes/Inputs/Input.h"
+-#include "../classes/gauss/Gauss.h"
+ /*}}}*/
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22437)
+@@ -7,14 +7,7 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../modules/SurfaceAreax/SurfaceAreax.h"
+-#include "../classes/Params/Parameters.h"
+-#include "../classes/Inputs/Input.h"
+-#include "../classes/gauss/Gauss.h"
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+ void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22437)
+@@ -7,21 +7,7 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "./ExternalResults/ExternalResult.h"
+-#include "./ExternalResults/Results.h"
+-#include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
+-#include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
+-#include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
+-#include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h"
+-#include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
+-#include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+-#include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+-#include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
+-#include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ 
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+@@ -28,30 +14,30 @@
+ 
+ class Numberedcostfunction: public Object, public Definition{
+ 
+-	public: 
++public: 
+ 
+-		int   definitionenum;
+-		char* name;
+-		int   number_cost_functions;
+-		int*  cost_functions_list;
+-		
+-		/*Numberedcostfunction constructors, destructors :*/
+-		Numberedcostfunction();
+-		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
+-		~Numberedcostfunction();
++int   definitionenum;
++char* name;
++int   number_cost_functions;
++int*  cost_functions_list;
+ 
+-		/*Object virtual function resolutoin: */
+-		Object*	copy();
+-		void		DeepEcho(void);
+-		void		Echo(void);
+-		int		Id(void);
+-		void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+-		int		ObjectEnum(void);
++/*Numberedcostfunction constructors, destructors :*/
++Numberedcostfunction();
++Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
++~Numberedcostfunction();
+ 
+-		/*Definition virtual function resolutoin: */
+-		int		DefinitionEnum();
+-		char*		Name();
+-		IssmDouble Response(FemModel* femmodel);
++/*Object virtual function resolutoin: */
++Object*	copy();
++void		DeepEcho(void);
++void		Echo(void);
++int		Id(void);
++void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++int		ObjectEnum(void);
++
++/*Definition virtual function resolutoin: */
++int		DefinitionEnum();
++char*		Name();
++IssmDouble Response(FemModel* femmodel);
+ };
+ 
+ #endif  /* _NUMBEREDCOSTFUNCTION_H_ */
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22437)
+@@ -8,11 +8,7 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../classes/Params/Parameters.h"
+ 
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 22437)
+@@ -58,7 +58,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -78,7 +78,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
++		//weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -97,7 +97,9 @@
+ 		if(numcomponents==2) misfit+=0.5*(vy-vyobs)*(vy-vyobs);
+ 
+ 		/*Add to cost function*/
+-		Jelem+=misfit*weight*Jdet*gauss->weight;
++		//Jelem+=misfit*weight*Jdet*gauss->weight;
++		Jelem+=misfit*Jdet*gauss->weight;
++
+ 	}
+ 
+ 	/*clean up and Return: */
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 22437)
+@@ -61,7 +61,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -81,7 +81,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
++		//weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -105,7 +105,7 @@
+ 		}
+ 
+ 		misfit=4*pow(meanvel,2)*pow(log(velocity_mag/obs_velocity_mag),2);
+-
++		weight = 1.;
+ 		/*Add to cost function*/
+ 		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 22437)
+@@ -60,7 +60,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -80,7 +80,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
++		//weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -105,7 +105,7 @@
+ 			scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
+ 			misfit=0.5*(scalex*pow((vx-vxobs),2));
+ 		}
+-
++		weight = 1.;
+ 		/*Add to cost function*/
+ 		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+Index: ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp	(revision 22437)
+@@ -0,0 +1,470 @@
++/*!\file: controlm1qn3_core.cpp
++ * \brief: core of the control solution 
++ */ 
++
++#include <config.h>
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++#if defined (_HAVE_M1QN3_) 
++//& !defined(_HAVE_ADOLC_)
++/*m1qn3 prototypes*/
++extern "C" void *ctonbe_; // DIS mode : Conversion
++extern "C" void *ctcabe_; // DIS mode : Conversion
++extern "C" void *euclid_; // Scalar product
++typedef void (*SimulFunc) (long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs);
++extern "C" void m1qn3_ (void f(long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs),
++			void **, void **, void **,
++			long *, double [],double *, double[], double*, double *,
++			double *, char [], long *, long *, long *, long *, long *, long *, long [],double [], long *,
++			long *, long *, long [], float [],void* );
++
++/*Use struct to provide arguments*/
++typedef struct{
++	FemModel   * femmodel;
++	IssmPDouble* Jlist;
++	int          M;
++	int          N;
++	int*         i;
++} m1qn3_struct;
++
++/*m1qm3 functions*/
++void simul_starttrace(FemModel* femmodel){/*{{{*/
++
++	/*Retrive ADOLC parameters*/
++	IssmDouble gcTriggerRatio;
++	IssmDouble gcTriggerMaxSize;
++	IssmDouble obufsize;
++	IssmDouble lbufsize;
++	IssmDouble cbufsize;
++	IssmDouble tbufsize;
++	femmodel->parameters->FindParam(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
++	femmodel->parameters->FindParam(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
++	femmodel->parameters->FindParam(&obufsize,AutodiffObufsizeEnum);
++	femmodel->parameters->FindParam(&lbufsize,AutodiffLbufsizeEnum);
++	femmodel->parameters->FindParam(&cbufsize,AutodiffCbufsizeEnum);
++	femmodel->parameters->FindParam(&tbufsize,AutodiffTbufsizeEnum);
++
++	/*Set garbage collection parameters: */
++	setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
++
++	/*Start trace: */
++	int skipFileDeletion=1;
++	int keepTaylors=1;
++	int my_rank=IssmComm::GetRank();
++	trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
++}/*}}}*/
++void simul_ad(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){/*{{{*/
++
++	/*Get rank*/
++	int my_rank=IssmComm::GetRank();
++
++	/*Recover Arguments*/
++	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
++	FemModel     *femmodel     = input_struct->femmodel;
++	IssmPDouble  *Jlist        = input_struct->Jlist;
++	int           JlistM       = input_struct->M;
++	int           JlistN       = input_struct->N;
++	int          *Jlisti       = input_struct->i;
++	int           intn         = (int)*n;
++
++	/*Recover some parameters*/
++	int num_responses,num_controls,numberofvertices,solution_type;
++	IssmDouble* scaling_factors = NULL;
++	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Constrain input vector and update controls*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++
++	/*Start Tracing*/
++	simul_starttrace(femmodel);
++
++	/*Set X as our new control input abd as INDEPENDENT!!*/
++#ifdef _HAVE_AD_
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
++#else
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
++#endif
++	if(my_rank==0){
++		for(int i=0;i<intn;i++){
++			aX[i]<<=X[i];
++		}
++	}
++	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete<IssmDouble>(aX);
++
++	/*Compute solution (forward)*/
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++	/*Get Dependents*/
++	IssmDouble  output_value;
++	int         num_dependents;
++	IssmPDouble *dependents;
++	DataSet*    dependent_objects=NULL;
++
++	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
++
++	/*Go through our dependent variables, and compute the response:*/
++	dependents=xNew<IssmPDouble>(num_dependents);
++	for(int i=0;i<dependent_objects->Size();i++){
++		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++		dep->Responsex(&output_value,femmodel);
++		if (my_rank==0) {
++			output_value>>=dependents[i];
++		}
++	}
++
++	/*Turning off trace tape*/
++	trace_off();
++
++	/*Print tape statistics so that user can kill this run if something is off already:*/
++	if(VerboseAutodiff()){ /*{{{*/
++		size_t  tape_stats[15];
++		tapestats(my_rank,tape_stats); //reading of tape statistics
++		int commSize=IssmComm::GetSize();
++		int *sstats=new int[7];
++		sstats[0]=tape_stats[NUM_OPERATIONS];
++		sstats[1]=tape_stats[OP_FILE_ACCESS];
++		sstats[2]=tape_stats[NUM_LOCATIONS];
++		sstats[3]=tape_stats[LOC_FILE_ACCESS];
++		sstats[4]=tape_stats[NUM_VALUES];
++		sstats[5]=tape_stats[VAL_FILE_ACCESS];
++		sstats[6]=tape_stats[TAY_STACK_SIZE];
++		int *rstats=NULL;
++		if (my_rank==0) rstats=new int[commSize*7];
++		ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
++		if (my_rank==0) {
++			int offset=50;
++			int rOffset=(commSize/10)+1;
++			_printf_("   ADOLC statistics: \n");
++			_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
++			_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++			_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++			_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
++			_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
++			delete []rstats;
++		}
++		delete [] sstats;
++	} /*}}}*/
++
++	/*diverse: */
++	int  dummy;
++	int  num_independents=0;
++
++	/*intermediary: */
++	IssmPDouble *aWeightVector=NULL;
++	IssmPDouble *weightVectorTimesJac=NULL;
++
++	/*output: */
++	IssmPDouble *totalgradient=NULL;
++
++	/*retrieve parameters: */
++	num_independents = intn;
++
++	/*if no dependents, no point in running a driver: */
++	if(!(num_dependents*num_independents)) _error_("this is not allowed");
++
++	/*for adolc to run in parallel, we 0 out on rank~=0. But we still keep track of num_dependents:*/
++	int num_dependents_old   = num_dependents;
++	int num_independents_old = num_independents;
++	if(my_rank!=0){
++		num_dependents   = 0;
++		num_independents = 0;
++	}
++
++	/*get the EDF pointer:*/
++	ext_diff_fct *anEDF_for_solverx_p=xDynamicCast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
++
++	/* these are always needed regardless of the interpreter */
++	anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++	anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
++	 * as to generate num_dependents gradients: */
++	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
++
++	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
++
++		/*initialize direction index in the weights vector: */
++		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
++		if (my_rank==0) aWeightVector[aDepIndex]=1.;
++
++		/*initialize output gradient: */
++		weightVectorTimesJac=xNew<IssmPDouble>(num_independents);
++
++		/*set the forward method function pointer: */
++		#ifdef _HAVE_GSL_
++		anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++		#endif
++		#ifdef _HAVE_MUMPS_
++		anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
++		#endif
++
++		anEDF_for_solverx_p->dp_U=xNew<IssmPDouble>(anEDF_for_solverx_p->max_m);
++		anEDF_for_solverx_p->dp_Z=xNew<IssmPDouble>(anEDF_for_solverx_p->max_n);
++
++		/*call driver: */
++		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++
++		/*Add to totalgradient: */
++		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
++
++		/*free resources :*/
++		xDelete(weightVectorTimesJac);
++		xDelete(aWeightVector);
++	}
++
++	/*Broadcast gradient to other ranks*/
++	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++
++	/*Check size of Jlist to avoid crashes*/
++	_assert_((*Jlisti)<JlistM);
++	_assert_(JlistN==num_responses+1);
++
++	/*Compute objective function*/
++	IssmDouble* Jtemp = NULL;
++	IssmDouble J;
++	femmodel->CostFunctionx(&J,&Jtemp,NULL);
++	*pf = reCast<double>(J);
++	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
++
++	/*Record cost function values and delete Jtemp*/
++	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
++	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
++	xDelete<IssmDouble>(Jtemp);
++
++	if(*indic==0){
++		/*dry run, no gradient required*/
++
++		/*Retrieve objective functions independently*/
++		_printf0_("            N/A |\n");
++		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++		_printf0_("\n");
++
++		*Jlisti = (*Jlisti) +1;
++		xDelete<double>(XU);
++		xDelete<double>(XL);
++		return;
++	}
++
++	/*Compute gradient*/
++	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
++
++	/*Constrain Gradient*/
++	IssmDouble  Gnorm = 0.;
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			if(X[index]>=XU[index]) G[index]=0.;
++			if(X[index]<=XL[index]) G[index]=0.;
++			G[index] = G[index]*reCast<double>(scaling_factors[c]);
++			X[index] = X[index]/reCast<double>(scaling_factors[c]);
++			Gnorm += G[index]*G[index];
++		}
++	}
++	Gnorm = sqrt(Gnorm);
++
++	/*Print info*/
++	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
++	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++	_printf0_("\n");
++
++	/*Clean-up and return*/
++	*Jlisti = (*Jlisti) +1;
++	xDelete<double>(XU);
++	xDelete<double>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(totalgradient);
++
++}/*}}}*/
++void controlm1qn3_core(FemModel* femmodel){/*{{{*/
++
++	/*Intermediaries*/
++	long         omode;
++	double		 f;
++	double		 dxmin,gttol; 
++	int          maxsteps,maxiter;
++	int          intn,numberofvertices,num_controls,num_cost_functions,solution_type;
++	IssmDouble	*scaling_factors = NULL;
++	double      *X  = NULL;
++	double      *G  = NULL;
++
++	/*Recover some parameters*/
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
++	femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
++	femmodel->parameters->FindParamAndMakePassive(&dxmin,InversionDxminEnum);
++	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Initialize M1QN3 parameters*/
++	if(VerboseControl())_printf0_("   Initialize M1QN3 parameters\n");
++	SimulFunc simul_ptr    = &simul_ad; /*Cost function address*/
++	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
++	char      normtype[]   = "dfn";     /*Norm type: dfn = scalar product defined by prosca*/
++	long      izs[5];                   /*Arrays used by m1qn3 subroutines*/
++	long      iz[5];                    /*Integer m1qn3 working array of size 5*/
++	float     rzs[1];                   /*Arrays used by m1qn3 subroutines*/
++	long      impres       = 0;         /*verbosity level*/
++	long      imode[3]     = {0};       /*scaling and starting mode, 0 by default*/
++	long      indic        = 4;         /*compute f and g*/
++	long      reverse      = 0;         /*reverse or direct mode*/
++	long      io           = 6;         /*Channel number for the output*/
++
++	/*Optimization criterions*/
++	long niter = long(maxsteps); /*Maximum number of iterations*/
++	long nsim  = long(maxiter);/*Maximum number of function calls*/
++
++	/*Get initial guess*/
++	Vector<double> *Xpetsc = NULL;
++	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
++	X = Xpetsc->ToMPISerial();
++	Xpetsc->GetSize(&intn);
++	delete Xpetsc;
++	_assert_(intn==numberofvertices*num_controls);
++
++	/*Get problem dimension and initialize gradient and initial guess*/
++	long n = long(intn);
++	G = xNew<double>(n);
++
++	/*Scale control for M1QN3*/
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
++		}
++	}
++
++	/*Allocate m1qn3 working arrays (see documentation)*/
++	long      m   = 100;
++	long      ndz = 4*n+m*(2*n+1);
++	double*   dz  = xNew<double>(ndz);
++
++	if(VerboseControl())_printf0_("   Computing initial solution\n");
++	_printf0_("\n");
++	_printf0_("Cost function f(x)   | Gradient norm |g(x)| |  List of contributions\n");
++	_printf0_("____________________________________________________________________\n");
++
++	/*Prepare structure for m1qn3*/
++	m1qn3_struct mystruct;
++	mystruct.femmodel = femmodel;
++	mystruct.M        = maxiter;
++	mystruct.N        = num_cost_functions+1;
++	mystruct.Jlist    = xNewZeroInit<IssmPDouble>(mystruct.M*mystruct.N);
++	mystruct.i        = xNewZeroInit<int>(1);
++	/*Initialize Gradient and cost function of M1QN3*/
++	indic = 4; /*gradient required*/
++	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
++	/*Estimation of the expected decrease in f during the first iteration*/
++	double df1=f;
++
++	/*Call M1QN3 solver*/
++	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
++				&n,X,&f,G,&dxmin,&df1,
++				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
++				&reverse,&indic,izs,rzs,(void*)&mystruct);
++	switch(int(omode)){
++		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
++		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
++		case 2:  _printf0_("   Bad initialization\n"); break;
++		case 3:  _printf0_("   Line search failure\n"); break;
++		case 4:  _printf0_("   Maximum number of iterations exceeded\n");break;
++		case 5:  _printf0_("   Maximum number of function calls exceeded\n"); break;
++		case 6:  _printf0_("   stopped on dxmin during line search\n"); break;
++		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
++		default: _printf0_("   Unknown end condition\n");
++	}
++	/*Constrain solution vector*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++		
++	/*Set X as our new control*/
++	IssmDouble* aX=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete(aX);
++
++	/*Set final gradient in inputs*/
++	IssmDouble* aG=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
++	xDelete(aG);
++
++	/*Add last cost function to results*/
++	femmodel->OutputControlsx(&femmodel->results);
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
++
++	/*Finalize*/
++	if(VerboseControl()) _printf0_("   preparing final solution\n");
++	femmodel->parameters->SetParam(true,SaveResultsEnum);
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++
++	/*Clean-up and return*/
++	xDelete<double>(G);
++	xDelete<double>(X);
++	xDelete<double>(dz);
++	xDelete<double>(XU);
++	xDelete<double>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(mystruct.Jlist);
++	xDelete<int>(mystruct.i);
++}/*}}}*/
++
++#else
++void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
++#endif //_HAVE_M1QN3_
+Index: ../trunk-jpl/src/c/cores/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22437)
+@@ -78,9 +78,9 @@
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
++	
++//	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+ 
+-	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+-
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
+ }
+Index: ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22437)
+@@ -10,40 +10,321 @@
+ #include "../modules/modules.h"
+ #include "../solutionsequences/solutionsequences.h"
+ 
+-#if defined (_HAVE_M1QN3_) & !defined(_HAVE_ADOLC_)
++#if defined (_HAVE_M1QN3_) 
++//& !defined(_HAVE_ADOLC_)
+ /*m1qn3 prototypes*/
+ extern "C" void *ctonbe_; // DIS mode : Conversion
+ extern "C" void *ctcabe_; // DIS mode : Conversion
+ extern "C" void *euclid_; // Scalar product
+-typedef void (*SimulFunc) (long* indic,long* n, double* x, double* pf,double* g,long [],float [],void* dzs);
+-extern "C" void m1qn3_ (void f(long* indic,long* n, double* x, double* pf,double* g,long [],float [],void* dzs),
++typedef void (*SimulFunc) (long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs);
++extern "C" void m1qn3_ (void f(long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs),
+ 			void **, void **, void **,
+-			long *, double [], double *, double [], double*, double *,
+-			double *, char [], long *, long *, long *, long *, long *, long *, long [], double [], long *,
++			long *, double [],double *, double[], double*, double *,
++			double *, char [], long *, long *, long *, long *, long *, long *, long [],double [], long *,
+ 			long *, long *, long [], float [],void* );
+ 
+-/*Cost function prototype*/
+-void simul(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs);
+-
+ /*Use struct to provide arguments*/
+ typedef struct{
+-	FemModel  * femmodel;
+-	IssmDouble* Jlist;
+-	int         M;
+-	int         N;
+-	int*        i;
++	FemModel   * femmodel;
++	IssmPDouble* Jlist;
++	int          M;
++	int          N;
++	int*         i;
+ } m1qn3_struct;
+ 
+-void controlm1qn3_core(FemModel* femmodel){
++/*m1qm3 functions*/
++void simul_starttrace(FemModel* femmodel){/*{{{*/
+ 
++	/*Retrive ADOLC parameters*/
++	IssmDouble gcTriggerRatio;
++	IssmDouble gcTriggerMaxSize;
++	IssmDouble obufsize;
++	IssmDouble lbufsize;
++	IssmDouble cbufsize;
++	IssmDouble tbufsize;
++	femmodel->parameters->FindParam(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
++	femmodel->parameters->FindParam(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
++	femmodel->parameters->FindParam(&obufsize,AutodiffObufsizeEnum);
++	femmodel->parameters->FindParam(&lbufsize,AutodiffLbufsizeEnum);
++	femmodel->parameters->FindParam(&cbufsize,AutodiffCbufsizeEnum);
++	femmodel->parameters->FindParam(&tbufsize,AutodiffTbufsizeEnum);
++
++	/*Set garbage collection parameters: */
++	setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
++
++	/*Start trace: */
++	int skipFileDeletion=1;
++	int keepTaylors=1;
++	int my_rank=IssmComm::GetRank();
++	trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
++}/*}}}*/
++void simul_ad(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){/*{{{*/
++
++	/*Get rank*/
++	int my_rank=IssmComm::GetRank();
++
++	/*Recover Arguments*/
++	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
++	FemModel     *femmodel     = input_struct->femmodel;
++	IssmPDouble  *Jlist        = input_struct->Jlist;
++	int           JlistM       = input_struct->M;
++	int           JlistN       = input_struct->N;
++	int          *Jlisti       = input_struct->i;
++	int           intn         = (int)*n;
++
++	/*Recover some parameters*/
++	int num_responses,num_controls,numberofvertices,solution_type;
++	IssmDouble* scaling_factors = NULL;
++	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Constrain input vector and update controls*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++
++	/*Start Tracing*/
++	simul_starttrace(femmodel);
++
++	/*Set X as our new control input abd as INDEPENDENT!!*/
++#ifdef _HAVE_AD_
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
++#else
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
++#endif
++	if(my_rank==0){
++		for(int i=0;i<intn;i++){
++			aX[i]<<=X[i];
++		}
++	}
++	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete<IssmDouble>(aX);
++
++	/*Compute solution (forward)*/
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++	/*Get Dependents*/
++	IssmDouble  output_value;
++	int         num_dependents;
++	IssmPDouble *dependents;
++	DataSet*    dependent_objects=NULL;
++
++	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
++
++	/*Go through our dependent variables, and compute the response:*/
++	dependents=xNew<IssmPDouble>(num_dependents);
++	for(int i=0;i<dependent_objects->Size();i++){
++		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++		dep->Responsex(&output_value,femmodel);
++		if (my_rank==0) {
++			output_value>>=dependents[i];
++		}
++	}
++
++	/*Turning off trace tape*/
++	trace_off();
++
++	/*Print tape statistics so that user can kill this run if something is off already:*/
++	if(VerboseAutodiff()){ /*{{{*/
++		size_t  tape_stats[15];
++		tapestats(my_rank,tape_stats); //reading of tape statistics
++		int commSize=IssmComm::GetSize();
++		int *sstats=new int[7];
++		sstats[0]=tape_stats[NUM_OPERATIONS];
++		sstats[1]=tape_stats[OP_FILE_ACCESS];
++		sstats[2]=tape_stats[NUM_LOCATIONS];
++		sstats[3]=tape_stats[LOC_FILE_ACCESS];
++		sstats[4]=tape_stats[NUM_VALUES];
++		sstats[5]=tape_stats[VAL_FILE_ACCESS];
++		sstats[6]=tape_stats[TAY_STACK_SIZE];
++		int *rstats=NULL;
++		if (my_rank==0) rstats=new int[commSize*7];
++		ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
++		if (my_rank==0) {
++			int offset=50;
++			int rOffset=(commSize/10)+1;
++			_printf_("   ADOLC statistics: \n");
++			_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
++			_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++			_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++			_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
++			_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
++			delete []rstats;
++		}
++		delete [] sstats;
++	} /*}}}*/
++
++	/*diverse: */
++	int  dummy;
++	int  num_independents=0;
++
++	/*intermediary: */
++	IssmPDouble *aWeightVector=NULL;
++	IssmPDouble *weightVectorTimesJac=NULL;
++
++	/*output: */
++	IssmPDouble *totalgradient=NULL;
++
++	/*retrieve parameters: */
++	num_independents = intn;
++
++	/*if no dependents, no point in running a driver: */
++	if(!(num_dependents*num_independents)) _error_("this is not allowed");
++
++	/*for adolc to run in parallel, we 0 out on rank~=0. But we still keep track of num_dependents:*/
++	int num_dependents_old   = num_dependents;
++	int num_independents_old = num_independents;
++	if(my_rank!=0){
++		num_dependents   = 0;
++		num_independents = 0;
++	}
++
++	/*get the EDF pointer:*/
++	ext_diff_fct *anEDF_for_solverx_p=xDynamicCast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
++
++	/* these are always needed regardless of the interpreter */
++	anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++	anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
++	 * as to generate num_dependents gradients: */
++	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
++
++	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
++
++		/*initialize direction index in the weights vector: */
++		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
++		if (my_rank==0) aWeightVector[aDepIndex]=1.;
++
++		/*initialize output gradient: */
++		weightVectorTimesJac=xNew<IssmPDouble>(num_independents);
++
++		/*set the forward method function pointer: */
++		#ifdef _HAVE_GSL_
++		anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++		#endif
++		#ifdef _HAVE_MUMPS_
++		anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
++		#endif
++
++		anEDF_for_solverx_p->dp_U=xNew<IssmPDouble>(anEDF_for_solverx_p->max_m);
++		anEDF_for_solverx_p->dp_Z=xNew<IssmPDouble>(anEDF_for_solverx_p->max_n);
++
++		/*call driver: */
++		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++
++		/*Add to totalgradient: */
++		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
++
++		/*free resources :*/
++		xDelete(weightVectorTimesJac);
++		xDelete(aWeightVector);
++	}
++
++	/*Broadcast gradient to other ranks*/
++	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++
++	/*Check size of Jlist to avoid crashes*/
++	_assert_((*Jlisti)<JlistM);
++	_assert_(JlistN==num_responses+1);
++
++	/*Compute objective function*/
++	IssmDouble* Jtemp = NULL;
++	IssmDouble J;
++	femmodel->CostFunctionx(&J,&Jtemp,NULL);
++	*pf = reCast<double>(J);
++	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
++
++	/*Record cost function values and delete Jtemp*/
++	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
++	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
++	xDelete<IssmDouble>(Jtemp);
++
++	if(*indic==0){
++		/*dry run, no gradient required*/
++
++		/*Retrieve objective functions independently*/
++		_printf0_("            N/A |\n");
++		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++		_printf0_("\n");
++
++		*Jlisti = (*Jlisti) +1;
++		xDelete<double>(XU);
++		xDelete<double>(XL);
++		return;
++	}
++
++	/*Compute gradient*/
++	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
++
++	/*Constrain Gradient*/
++	IssmDouble  Gnorm = 0.;
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			if(X[index]>=XU[index]) G[index]=0.;
++			if(X[index]<=XL[index]) G[index]=0.;
++			G[index] = G[index]*reCast<double>(scaling_factors[c]);
++			X[index] = X[index]/reCast<double>(scaling_factors[c]);
++			Gnorm += G[index]*G[index];
++		}
++	}
++	Gnorm = sqrt(Gnorm);
++
++	/*Print info*/
++	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
++	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++	_printf0_("\n");
++
++	/*Clean-up and return*/
++	*Jlisti = (*Jlisti) +1;
++	xDelete<double>(XU);
++	xDelete<double>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(totalgradient);
++
++}/*}}}*/
++void controlm1qn3_core(FemModel* femmodel){/*{{{*/
++
+ 	/*Intermediaries*/
+ 	long         omode;
+-	double       f,dxmin,gttol; 
++	double		 f;
++	double		 dxmin,gttol; 
+ 	int          maxsteps,maxiter;
+ 	int          intn,numberofvertices,num_controls,num_cost_functions,solution_type;
+-	IssmDouble  *scaling_factors = NULL;
+-	IssmDouble  *X  = NULL;
+-	IssmDouble  *G  = NULL;
++	IssmDouble	*scaling_factors = NULL;
++	double      *X  = NULL;
++	double      *G  = NULL;
+ 
+ 	/*Recover some parameters*/
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+@@ -51,8 +332,8 @@
+ 	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
+ 	femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
+-	femmodel->parameters->FindParam(&dxmin,InversionDxminEnum);
+-	femmodel->parameters->FindParam(&gttol,InversionGttolEnum);
++	femmodel->parameters->FindParamAndMakePassive(&dxmin,InversionDxminEnum);
++	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
+ 	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
+ 	numberofvertices=femmodel->vertices->NumberOfVertices();
+@@ -59,7 +340,7 @@
+ 
+ 	/*Initialize M1QN3 parameters*/
+ 	if(VerboseControl())_printf0_("   Initialize M1QN3 parameters\n");
+-	SimulFunc costfuncion  = &simul;    /*Cost function address*/
++	SimulFunc simul_ptr    = &simul_ad; /*Cost function address*/
+ 	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
+ 	char      normtype[]   = "dfn";     /*Norm type: dfn = scalar product defined by prosca*/
+ 	long      izs[5];                   /*Arrays used by m1qn3 subroutines*/
+@@ -76,8 +357,8 @@
+ 	long nsim  = long(maxiter);/*Maximum number of function calls*/
+ 
+ 	/*Get initial guess*/
+-	Vector<IssmDouble> *Xpetsc = NULL;
+-	GetVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
++	Vector<double> *Xpetsc = NULL;
++	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+ 	X = Xpetsc->ToMPISerial();
+ 	Xpetsc->GetSize(&intn);
+ 	delete Xpetsc;
+@@ -91,7 +372,7 @@
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+-			X[index] = X[index]/scaling_factors[c];
++			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
+ 		}
+ 	}
+ 
+@@ -110,22 +391,19 @@
+ 	mystruct.femmodel = femmodel;
+ 	mystruct.M        = maxiter;
+ 	mystruct.N        = num_cost_functions+1;
+-	mystruct.Jlist    = xNewZeroInit<IssmDouble>(mystruct.M*mystruct.N);
++	mystruct.Jlist    = xNewZeroInit<IssmPDouble>(mystruct.M*mystruct.N);
+ 	mystruct.i        = xNewZeroInit<int>(1);
+-
+ 	/*Initialize Gradient and cost function of M1QN3*/
+ 	indic = 4; /*gradient required*/
+-	simul(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
+-
++	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
+ 	/*Estimation of the expected decrease in f during the first iteration*/
+ 	double df1=f;
+ 
+ 	/*Call M1QN3 solver*/
+-	m1qn3_(costfuncion,prosca,&ctonbe_,&ctcabe_,
++	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
+ 				&n,X,&f,G,&dxmin,&df1,
+ 				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
+ 				&reverse,&indic,izs,rzs,(void*)&mystruct);
+-
+ 	switch(int(omode)){
+ 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+@@ -137,24 +415,36 @@
+ 		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
+ 		default: _printf0_("   Unknown end condition\n");
+ 	}
++	/*Constrain solution vector*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 
+-	/*Constrain solution vector*/
+-	IssmDouble  *XL = NULL;
+-	IssmDouble  *XU = NULL;
+-	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+-			X[index] = X[index]*scaling_factors[c];
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+ 			if(X[index]>XU[index]) X[index]=XU[index];
+ 			if(X[index]<XL[index]) X[index]=XL[index];
+ 		}
+ 	}
+-	SetControlInputsFromVectorx(femmodel,X);
+-	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
++		
++	/*Set X as our new control*/
++	IssmDouble* aX=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete(aX);
++
++	/*Set final gradient in inputs*/
++	IssmDouble* aG=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
++	xDelete(aG);
++
++	/*Add last cost function to results*/
+ 	femmodel->OutputControlsx(&femmodel->results);
+-	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+ 
+ 	/*Finalize*/
+ 	if(VerboseControl()) _printf0_("   preparing final solution\n");
+@@ -163,6 +453,7 @@
+ 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
++
+ 	/*Clean-up and return*/
+ 	xDelete<double>(G);
+ 	xDelete<double>(X);
+@@ -169,118 +460,11 @@
+ 	xDelete<double>(dz);
+ 	xDelete<double>(XU);
+ 	xDelete<double>(XL);
+-	xDelete<double>(scaling_factors);
+-	xDelete<double>(mystruct.Jlist);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(mystruct.Jlist);
+ 	xDelete<int>(mystruct.i);
+-}
++}/*}}}*/
+ 
+-/*Cost function definition*/
+-void simul(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){
+-
+-	/*Recover Arguments*/
+-	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
+-	FemModel     *femmodel     = input_struct->femmodel;
+-	IssmDouble   *Jlist        = input_struct->Jlist;
+-	int           JlistM       = input_struct->M;
+-	int           JlistN       = input_struct->N;
+-	int          *Jlisti       = input_struct->i;
+-
+-	/*Recover some parameters*/
+-	int num_responses,num_controls,numberofvertices,solution_type;
+-	IssmDouble* scaling_factors = NULL;
+-	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	numberofvertices=femmodel->vertices->NumberOfVertices();
+-
+-	/*Constrain input vector and update controls*/
+-	IssmDouble  *XL = NULL;
+-	IssmDouble  *XU = NULL;
+-	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			X[index] = X[index]*scaling_factors[c];
+-			if(X[index]>XU[index]) X[index]=XU[index];
+-			if(X[index]<XL[index]) X[index]=XL[index];
+-		}
+-	}
+-	SetControlInputsFromVectorx(femmodel,X);
+-
+-	/*Compute solution and adjoint*/
+-	void (*solutioncore)(FemModel*)=NULL;
+-	void (*adjointcore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	solutioncore(femmodel);
+-
+-	/*Check size of Jlist to avoid crashes*/
+-	_assert_((*Jlisti)<JlistM);
+-	_assert_(JlistN==num_responses+1);
+-
+-	/*Compute objective function*/
+-	IssmDouble* Jtemp = NULL;
+-	femmodel->CostFunctionx(pf,&Jtemp,NULL);
+-	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
+-
+-	/*Record cost function values and delete Jtemp*/
+-	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = Jtemp[i];
+-	Jlist[(*Jlisti)*JlistN+num_responses] = *pf;
+-	xDelete<IssmDouble>(Jtemp);
+-
+-	if(*indic==0){
+-		/*dry run, no gradient required*/
+-
+-		/*Retrieve objective functions independently*/
+-		_printf0_("            N/A |\n");
+-		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-		_printf0_("\n");
+-
+-		*Jlisti = (*Jlisti) +1;
+-		xDelete<IssmDouble>(XU);
+-		xDelete<IssmDouble>(XL);
+-		return;
+-	}
+-
+-	/*Compute Adjoint*/
+-	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+-	adjointcore(femmodel);
+-
+-	/*Compute gradient*/
+-	IssmDouble* G2 = NULL;
+-	Gradjx(&G2,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	for(long i=0;i<*n;i++) G[i] = -G2[i];
+-	xDelete<IssmDouble>(G2);
+-
+-	/*Constrain Gradient*/
+-	IssmDouble  Gnorm = 0.;
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			if(X[index]>=XU[index]) G[index]=0.;
+-			if(X[index]<=XL[index]) G[index]=0.;
+-			G[index] = G[index]*scaling_factors[c];
+-			X[index] = X[index]/scaling_factors[c];
+-			Gnorm += G[index]*G[index];
+-		}
+-	}
+-	Gnorm = sqrt(Gnorm);
+-
+-	/*Print info*/
+-	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
+-	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-	_printf0_("\n");
+-
+-	/*Clean-up and return*/
+-	*Jlisti = (*Jlisti) +1;
+-	xDelete<IssmDouble>(XU);
+-	xDelete<IssmDouble>(XL);
+-	xDelete<IssmDouble>(scaling_factors);
+-}
+-
+ #else
+-void controlm1qn3_core(FemModel* femmodel){
+-	_error_("M1QN3 not installed");
+-}
++void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
+ #endif //_HAVE_M1QN3_
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(revision 22437)
+@@ -14,7 +14,6 @@
+ #include "./Definition.h"
+ #include "./Elements/Element.h"
+ #include "./Elements/Elements.h"
+-#include "./FemModel.h"
+ #include "../classes/Params/Parameters.h"
+ 
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Misfit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.cpp	(revision 22436)
++++ ../trunk-jpl/src/c/classes/Misfit.cpp	(revision 22437)
+@@ -11,12 +11,12 @@
+ #endif
+ 
+ #include "./classes.h"
++#include "./FemModel.h"
+ #include "./ExternalResults/ExternalResult.h"
+ #include "./ExternalResults/Results.h"
+ #include "../datastructures/datastructures.h"
+ #include "./Elements/Element.h"
+ #include "./Elements/Elements.h"
+-#include "./FemModel.h"
+ #include "../modules/SurfaceAreax/SurfaceAreax.h"
+ #include "../classes/Params/Parameters.h"
+ #include "../classes/Inputs/Input.h"
Index: /issm/oecreview/Archive/21724-22754/ISSM-22437-22438.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22437-22438.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22437-22438.diff	(revision 22755)
@@ -0,0 +1,1359 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 22438)
+@@ -58,7 +58,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -78,7 +78,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		//weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
++		weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -97,9 +97,7 @@
+ 		if(numcomponents==2) misfit+=0.5*(vy-vyobs)*(vy-vyobs);
+ 
+ 		/*Add to cost function*/
+-		//Jelem+=misfit*weight*Jdet*gauss->weight;
+-		Jelem+=misfit*Jdet*gauss->weight;
+-
++		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+ 
+ 	/*clean up and Return: */
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 22438)
+@@ -61,7 +61,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -81,7 +81,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		//weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
++		weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -105,7 +105,7 @@
+ 		}
+ 
+ 		misfit=4*pow(meanvel,2)*pow(log(velocity_mag/obs_velocity_mag),2);
+-		weight = 1.;
++
+ 		/*Add to cost function*/
+ 		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 22438)
+@@ -60,7 +60,7 @@
+ 	topelement->GetVerticesCoordinates(&xyz_list);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+-//	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++	Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+ 	Input* vy_input     = NULL;
+@@ -80,7 +80,7 @@
+ 		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		//weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
++		weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+ 		if(numcomponents==2){
+@@ -105,7 +105,7 @@
+ 			scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
+ 			misfit=0.5*(scalex*pow((vx-vxobs),2));
+ 		}
+-		weight = 1.;
++
+ 		/*Add to cost function*/
+ 		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+Index: ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/cores/controlADm1qn3_core.cpp	(nonexistent)
+@@ -1,470 +0,0 @@
+-/*!\file: controlm1qn3_core.cpp
+- * \brief: core of the control solution 
+- */ 
+-
+-#include <config.h>
+-#include "./cores.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-#if defined (_HAVE_M1QN3_) 
+-//& !defined(_HAVE_ADOLC_)
+-/*m1qn3 prototypes*/
+-extern "C" void *ctonbe_; // DIS mode : Conversion
+-extern "C" void *ctcabe_; // DIS mode : Conversion
+-extern "C" void *euclid_; // Scalar product
+-typedef void (*SimulFunc) (long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs);
+-extern "C" void m1qn3_ (void f(long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs),
+-			void **, void **, void **,
+-			long *, double [],double *, double[], double*, double *,
+-			double *, char [], long *, long *, long *, long *, long *, long *, long [],double [], long *,
+-			long *, long *, long [], float [],void* );
+-
+-/*Use struct to provide arguments*/
+-typedef struct{
+-	FemModel   * femmodel;
+-	IssmPDouble* Jlist;
+-	int          M;
+-	int          N;
+-	int*         i;
+-} m1qn3_struct;
+-
+-/*m1qm3 functions*/
+-void simul_starttrace(FemModel* femmodel){/*{{{*/
+-
+-	/*Retrive ADOLC parameters*/
+-	IssmDouble gcTriggerRatio;
+-	IssmDouble gcTriggerMaxSize;
+-	IssmDouble obufsize;
+-	IssmDouble lbufsize;
+-	IssmDouble cbufsize;
+-	IssmDouble tbufsize;
+-	femmodel->parameters->FindParam(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
+-	femmodel->parameters->FindParam(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
+-	femmodel->parameters->FindParam(&obufsize,AutodiffObufsizeEnum);
+-	femmodel->parameters->FindParam(&lbufsize,AutodiffLbufsizeEnum);
+-	femmodel->parameters->FindParam(&cbufsize,AutodiffCbufsizeEnum);
+-	femmodel->parameters->FindParam(&tbufsize,AutodiffTbufsizeEnum);
+-
+-	/*Set garbage collection parameters: */
+-	setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
+-
+-	/*Start trace: */
+-	int skipFileDeletion=1;
+-	int keepTaylors=1;
+-	int my_rank=IssmComm::GetRank();
+-	trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
+-}/*}}}*/
+-void simul_ad(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){/*{{{*/
+-
+-	/*Get rank*/
+-	int my_rank=IssmComm::GetRank();
+-
+-	/*Recover Arguments*/
+-	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
+-	FemModel     *femmodel     = input_struct->femmodel;
+-	IssmPDouble  *Jlist        = input_struct->Jlist;
+-	int           JlistM       = input_struct->M;
+-	int           JlistN       = input_struct->N;
+-	int          *Jlisti       = input_struct->i;
+-	int           intn         = (int)*n;
+-
+-	/*Recover some parameters*/
+-	int num_responses,num_controls,numberofvertices,solution_type;
+-	IssmDouble* scaling_factors = NULL;
+-	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	numberofvertices=femmodel->vertices->NumberOfVertices();
+-
+-	/*Constrain input vector and update controls*/
+-	double  *XL = NULL;
+-	double  *XU = NULL;
+-	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+-			if(X[index]>XU[index]) X[index]=XU[index];
+-			if(X[index]<XL[index]) X[index]=XL[index];
+-		}
+-	}
+-
+-	/*Start Tracing*/
+-	simul_starttrace(femmodel);
+-
+-	/*Set X as our new control input abd as INDEPENDENT!!*/
+-#ifdef _HAVE_AD_
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
+-#else
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
+-#endif
+-	if(my_rank==0){
+-		for(int i=0;i<intn;i++){
+-			aX[i]<<=X[i];
+-		}
+-	}
+-	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	SetControlInputsFromVectorx(femmodel,aX);
+-	xDelete<IssmDouble>(aX);
+-
+-	/*Compute solution (forward)*/
+-	void (*solutioncore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	solutioncore(femmodel);
+-
+-	/*Get Dependents*/
+-	IssmDouble  output_value;
+-	int         num_dependents;
+-	IssmPDouble *dependents;
+-	DataSet*    dependent_objects=NULL;
+-
+-	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+-
+-	/*Go through our dependent variables, and compute the response:*/
+-	dependents=xNew<IssmPDouble>(num_dependents);
+-	for(int i=0;i<dependent_objects->Size();i++){
+-		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-		dep->Responsex(&output_value,femmodel);
+-		if (my_rank==0) {
+-			output_value>>=dependents[i];
+-		}
+-	}
+-
+-	/*Turning off trace tape*/
+-	trace_off();
+-
+-	/*Print tape statistics so that user can kill this run if something is off already:*/
+-	if(VerboseAutodiff()){ /*{{{*/
+-		size_t  tape_stats[15];
+-		tapestats(my_rank,tape_stats); //reading of tape statistics
+-		int commSize=IssmComm::GetSize();
+-		int *sstats=new int[7];
+-		sstats[0]=tape_stats[NUM_OPERATIONS];
+-		sstats[1]=tape_stats[OP_FILE_ACCESS];
+-		sstats[2]=tape_stats[NUM_LOCATIONS];
+-		sstats[3]=tape_stats[LOC_FILE_ACCESS];
+-		sstats[4]=tape_stats[NUM_VALUES];
+-		sstats[5]=tape_stats[VAL_FILE_ACCESS];
+-		sstats[6]=tape_stats[TAY_STACK_SIZE];
+-		int *rstats=NULL;
+-		if (my_rank==0) rstats=new int[commSize*7];
+-		ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
+-		if (my_rank==0) {
+-			int offset=50;
+-			int rOffset=(commSize/10)+1;
+-			_printf_("   ADOLC statistics: \n");
+-			_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
+-			_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
+-			_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
+-			_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
+-			_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
+-			_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
+-			_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
+-			delete []rstats;
+-		}
+-		delete [] sstats;
+-	} /*}}}*/
+-
+-	/*diverse: */
+-	int  dummy;
+-	int  num_independents=0;
+-
+-	/*intermediary: */
+-	IssmPDouble *aWeightVector=NULL;
+-	IssmPDouble *weightVectorTimesJac=NULL;
+-
+-	/*output: */
+-	IssmPDouble *totalgradient=NULL;
+-
+-	/*retrieve parameters: */
+-	num_independents = intn;
+-
+-	/*if no dependents, no point in running a driver: */
+-	if(!(num_dependents*num_independents)) _error_("this is not allowed");
+-
+-	/*for adolc to run in parallel, we 0 out on rank~=0. But we still keep track of num_dependents:*/
+-	int num_dependents_old   = num_dependents;
+-	int num_independents_old = num_independents;
+-	if(my_rank!=0){
+-		num_dependents   = 0;
+-		num_independents = 0;
+-	}
+-
+-	/*get the EDF pointer:*/
+-	ext_diff_fct *anEDF_for_solverx_p=xDynamicCast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+-
+-	/* these are always needed regardless of the interpreter */
+-	anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-	anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
+-	 * as to generate num_dependents gradients: */
+-	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
+-
+-	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
+-
+-		/*initialize direction index in the weights vector: */
+-		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
+-		if (my_rank==0) aWeightVector[aDepIndex]=1.;
+-
+-		/*initialize output gradient: */
+-		weightVectorTimesJac=xNew<IssmPDouble>(num_independents);
+-
+-		/*set the forward method function pointer: */
+-		#ifdef _HAVE_GSL_
+-		anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+-		#endif
+-		#ifdef _HAVE_MUMPS_
+-		anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
+-		#endif
+-
+-		anEDF_for_solverx_p->dp_U=xNew<IssmPDouble>(anEDF_for_solverx_p->max_m);
+-		anEDF_for_solverx_p->dp_Z=xNew<IssmPDouble>(anEDF_for_solverx_p->max_n);
+-
+-		/*call driver: */
+-		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+-
+-		/*Add to totalgradient: */
+-		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
+-
+-		/*free resources :*/
+-		xDelete(weightVectorTimesJac);
+-		xDelete(aWeightVector);
+-	}
+-
+-	/*Broadcast gradient to other ranks*/
+-	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
+-
+-	/*Check size of Jlist to avoid crashes*/
+-	_assert_((*Jlisti)<JlistM);
+-	_assert_(JlistN==num_responses+1);
+-
+-	/*Compute objective function*/
+-	IssmDouble* Jtemp = NULL;
+-	IssmDouble J;
+-	femmodel->CostFunctionx(&J,&Jtemp,NULL);
+-	*pf = reCast<double>(J);
+-	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
+-
+-	/*Record cost function values and delete Jtemp*/
+-	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
+-	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
+-	xDelete<IssmDouble>(Jtemp);
+-
+-	if(*indic==0){
+-		/*dry run, no gradient required*/
+-
+-		/*Retrieve objective functions independently*/
+-		_printf0_("            N/A |\n");
+-		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-		_printf0_("\n");
+-
+-		*Jlisti = (*Jlisti) +1;
+-		xDelete<double>(XU);
+-		xDelete<double>(XL);
+-		return;
+-	}
+-
+-	/*Compute gradient*/
+-	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
+-
+-	/*Constrain Gradient*/
+-	IssmDouble  Gnorm = 0.;
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			if(X[index]>=XU[index]) G[index]=0.;
+-			if(X[index]<=XL[index]) G[index]=0.;
+-			G[index] = G[index]*reCast<double>(scaling_factors[c]);
+-			X[index] = X[index]/reCast<double>(scaling_factors[c]);
+-			Gnorm += G[index]*G[index];
+-		}
+-	}
+-	Gnorm = sqrt(Gnorm);
+-
+-	/*Print info*/
+-	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
+-	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-	_printf0_("\n");
+-
+-	/*Clean-up and return*/
+-	*Jlisti = (*Jlisti) +1;
+-	xDelete<double>(XU);
+-	xDelete<double>(XL);
+-	xDelete<IssmDouble>(scaling_factors);
+-	xDelete<IssmPDouble>(totalgradient);
+-
+-}/*}}}*/
+-void controlm1qn3_core(FemModel* femmodel){/*{{{*/
+-
+-	/*Intermediaries*/
+-	long         omode;
+-	double		 f;
+-	double		 dxmin,gttol; 
+-	int          maxsteps,maxiter;
+-	int          intn,numberofvertices,num_controls,num_cost_functions,solution_type;
+-	IssmDouble	*scaling_factors = NULL;
+-	double      *X  = NULL;
+-	double      *G  = NULL;
+-
+-	/*Recover some parameters*/
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
+-	femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
+-	femmodel->parameters->FindParamAndMakePassive(&dxmin,InversionDxminEnum);
+-	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
+-	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+-	femmodel->parameters->SetParam(false,SaveResultsEnum);
+-	numberofvertices=femmodel->vertices->NumberOfVertices();
+-
+-	/*Initialize M1QN3 parameters*/
+-	if(VerboseControl())_printf0_("   Initialize M1QN3 parameters\n");
+-	SimulFunc simul_ptr    = &simul_ad; /*Cost function address*/
+-	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
+-	char      normtype[]   = "dfn";     /*Norm type: dfn = scalar product defined by prosca*/
+-	long      izs[5];                   /*Arrays used by m1qn3 subroutines*/
+-	long      iz[5];                    /*Integer m1qn3 working array of size 5*/
+-	float     rzs[1];                   /*Arrays used by m1qn3 subroutines*/
+-	long      impres       = 0;         /*verbosity level*/
+-	long      imode[3]     = {0};       /*scaling and starting mode, 0 by default*/
+-	long      indic        = 4;         /*compute f and g*/
+-	long      reverse      = 0;         /*reverse or direct mode*/
+-	long      io           = 6;         /*Channel number for the output*/
+-
+-	/*Optimization criterions*/
+-	long niter = long(maxsteps); /*Maximum number of iterations*/
+-	long nsim  = long(maxiter);/*Maximum number of function calls*/
+-
+-	/*Get initial guess*/
+-	Vector<double> *Xpetsc = NULL;
+-	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+-	X = Xpetsc->ToMPISerial();
+-	Xpetsc->GetSize(&intn);
+-	delete Xpetsc;
+-	_assert_(intn==numberofvertices*num_controls);
+-
+-	/*Get problem dimension and initialize gradient and initial guess*/
+-	long n = long(intn);
+-	G = xNew<double>(n);
+-
+-	/*Scale control for M1QN3*/
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
+-		}
+-	}
+-
+-	/*Allocate m1qn3 working arrays (see documentation)*/
+-	long      m   = 100;
+-	long      ndz = 4*n+m*(2*n+1);
+-	double*   dz  = xNew<double>(ndz);
+-
+-	if(VerboseControl())_printf0_("   Computing initial solution\n");
+-	_printf0_("\n");
+-	_printf0_("Cost function f(x)   | Gradient norm |g(x)| |  List of contributions\n");
+-	_printf0_("____________________________________________________________________\n");
+-
+-	/*Prepare structure for m1qn3*/
+-	m1qn3_struct mystruct;
+-	mystruct.femmodel = femmodel;
+-	mystruct.M        = maxiter;
+-	mystruct.N        = num_cost_functions+1;
+-	mystruct.Jlist    = xNewZeroInit<IssmPDouble>(mystruct.M*mystruct.N);
+-	mystruct.i        = xNewZeroInit<int>(1);
+-	/*Initialize Gradient and cost function of M1QN3*/
+-	indic = 4; /*gradient required*/
+-	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
+-	/*Estimation of the expected decrease in f during the first iteration*/
+-	double df1=f;
+-
+-	/*Call M1QN3 solver*/
+-	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
+-				&n,X,&f,G,&dxmin,&df1,
+-				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
+-				&reverse,&indic,izs,rzs,(void*)&mystruct);
+-	switch(int(omode)){
+-		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
+-		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+-		case 2:  _printf0_("   Bad initialization\n"); break;
+-		case 3:  _printf0_("   Line search failure\n"); break;
+-		case 4:  _printf0_("   Maximum number of iterations exceeded\n");break;
+-		case 5:  _printf0_("   Maximum number of function calls exceeded\n"); break;
+-		case 6:  _printf0_("   stopped on dxmin during line search\n"); break;
+-		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
+-		default: _printf0_("   Unknown end condition\n");
+-	}
+-	/*Constrain solution vector*/
+-	double  *XL = NULL;
+-	double  *XU = NULL;
+-	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+-			if(X[index]>XU[index]) X[index]=XU[index];
+-			if(X[index]<XL[index]) X[index]=XL[index];
+-		}
+-	}
+-		
+-	/*Set X as our new control*/
+-	IssmDouble* aX=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
+-	SetControlInputsFromVectorx(femmodel,aX);
+-	xDelete(aX);
+-
+-	/*Set final gradient in inputs*/
+-	IssmDouble* aG=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
+-	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
+-	xDelete(aG);
+-
+-	/*Add last cost function to results*/
+-	femmodel->OutputControlsx(&femmodel->results);
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+-
+-	/*Finalize*/
+-	if(VerboseControl()) _printf0_("   preparing final solution\n");
+-	femmodel->parameters->SetParam(true,SaveResultsEnum);
+-	void (*solutioncore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	solutioncore(femmodel);
+-
+-
+-	/*Clean-up and return*/
+-	xDelete<double>(G);
+-	xDelete<double>(X);
+-	xDelete<double>(dz);
+-	xDelete<double>(XU);
+-	xDelete<double>(XL);
+-	xDelete<IssmDouble>(scaling_factors);
+-	xDelete<IssmPDouble>(mystruct.Jlist);
+-	xDelete<int>(mystruct.i);
+-}/*}}}*/
+-
+-#else
+-void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
+-#endif //_HAVE_M1QN3_
+Index: ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22438)
+@@ -10,321 +10,40 @@
+ #include "../modules/modules.h"
+ #include "../solutionsequences/solutionsequences.h"
+ 
+-#if defined (_HAVE_M1QN3_) 
+-//& !defined(_HAVE_ADOLC_)
++#if defined (_HAVE_M1QN3_) & !defined(_HAVE_ADOLC_)
+ /*m1qn3 prototypes*/
+ extern "C" void *ctonbe_; // DIS mode : Conversion
+ extern "C" void *ctcabe_; // DIS mode : Conversion
+ extern "C" void *euclid_; // Scalar product
+-typedef void (*SimulFunc) (long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs);
+-extern "C" void m1qn3_ (void f(long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs),
++typedef void (*SimulFunc) (long* indic,long* n, double* x, double* pf,double* g,long [],float [],void* dzs);
++extern "C" void m1qn3_ (void f(long* indic,long* n, double* x, double* pf,double* g,long [],float [],void* dzs),
+ 			void **, void **, void **,
+-			long *, double [],double *, double[], double*, double *,
+-			double *, char [], long *, long *, long *, long *, long *, long *, long [],double [], long *,
++			long *, double [], double *, double [], double*, double *,
++			double *, char [], long *, long *, long *, long *, long *, long *, long [], double [], long *,
+ 			long *, long *, long [], float [],void* );
+ 
++/*Cost function prototype*/
++void simul(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs);
++
+ /*Use struct to provide arguments*/
+ typedef struct{
+-	FemModel   * femmodel;
+-	IssmPDouble* Jlist;
+-	int          M;
+-	int          N;
+-	int*         i;
++	FemModel  * femmodel;
++	IssmDouble* Jlist;
++	int         M;
++	int         N;
++	int*        i;
+ } m1qn3_struct;
+ 
+-/*m1qm3 functions*/
+-void simul_starttrace(FemModel* femmodel){/*{{{*/
++void controlm1qn3_core(FemModel* femmodel){
+ 
+-	/*Retrive ADOLC parameters*/
+-	IssmDouble gcTriggerRatio;
+-	IssmDouble gcTriggerMaxSize;
+-	IssmDouble obufsize;
+-	IssmDouble lbufsize;
+-	IssmDouble cbufsize;
+-	IssmDouble tbufsize;
+-	femmodel->parameters->FindParam(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
+-	femmodel->parameters->FindParam(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
+-	femmodel->parameters->FindParam(&obufsize,AutodiffObufsizeEnum);
+-	femmodel->parameters->FindParam(&lbufsize,AutodiffLbufsizeEnum);
+-	femmodel->parameters->FindParam(&cbufsize,AutodiffCbufsizeEnum);
+-	femmodel->parameters->FindParam(&tbufsize,AutodiffTbufsizeEnum);
+-
+-	/*Set garbage collection parameters: */
+-	setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
+-
+-	/*Start trace: */
+-	int skipFileDeletion=1;
+-	int keepTaylors=1;
+-	int my_rank=IssmComm::GetRank();
+-	trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
+-}/*}}}*/
+-void simul_ad(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){/*{{{*/
+-
+-	/*Get rank*/
+-	int my_rank=IssmComm::GetRank();
+-
+-	/*Recover Arguments*/
+-	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
+-	FemModel     *femmodel     = input_struct->femmodel;
+-	IssmPDouble  *Jlist        = input_struct->Jlist;
+-	int           JlistM       = input_struct->M;
+-	int           JlistN       = input_struct->N;
+-	int          *Jlisti       = input_struct->i;
+-	int           intn         = (int)*n;
+-
+-	/*Recover some parameters*/
+-	int num_responses,num_controls,numberofvertices,solution_type;
+-	IssmDouble* scaling_factors = NULL;
+-	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	numberofvertices=femmodel->vertices->NumberOfVertices();
+-
+-	/*Constrain input vector and update controls*/
+-	double  *XL = NULL;
+-	double  *XU = NULL;
+-	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+-			if(X[index]>XU[index]) X[index]=XU[index];
+-			if(X[index]<XL[index]) X[index]=XL[index];
+-		}
+-	}
+-
+-	/*Start Tracing*/
+-	simul_starttrace(femmodel);
+-
+-	/*Set X as our new control input abd as INDEPENDENT!!*/
+-#ifdef _HAVE_AD_
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
+-#else
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
+-#endif
+-	if(my_rank==0){
+-		for(int i=0;i<intn;i++){
+-			aX[i]<<=X[i];
+-		}
+-	}
+-	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+-	SetControlInputsFromVectorx(femmodel,aX);
+-	xDelete<IssmDouble>(aX);
+-
+-	/*Compute solution (forward)*/
+-	void (*solutioncore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	solutioncore(femmodel);
+-
+-	/*Get Dependents*/
+-	IssmDouble  output_value;
+-	int         num_dependents;
+-	IssmPDouble *dependents;
+-	DataSet*    dependent_objects=NULL;
+-
+-	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+-
+-	/*Go through our dependent variables, and compute the response:*/
+-	dependents=xNew<IssmPDouble>(num_dependents);
+-	for(int i=0;i<dependent_objects->Size();i++){
+-		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-		dep->Responsex(&output_value,femmodel);
+-		if (my_rank==0) {
+-			output_value>>=dependents[i];
+-		}
+-	}
+-
+-	/*Turning off trace tape*/
+-	trace_off();
+-
+-	/*Print tape statistics so that user can kill this run if something is off already:*/
+-	if(VerboseAutodiff()){ /*{{{*/
+-		size_t  tape_stats[15];
+-		tapestats(my_rank,tape_stats); //reading of tape statistics
+-		int commSize=IssmComm::GetSize();
+-		int *sstats=new int[7];
+-		sstats[0]=tape_stats[NUM_OPERATIONS];
+-		sstats[1]=tape_stats[OP_FILE_ACCESS];
+-		sstats[2]=tape_stats[NUM_LOCATIONS];
+-		sstats[3]=tape_stats[LOC_FILE_ACCESS];
+-		sstats[4]=tape_stats[NUM_VALUES];
+-		sstats[5]=tape_stats[VAL_FILE_ACCESS];
+-		sstats[6]=tape_stats[TAY_STACK_SIZE];
+-		int *rstats=NULL;
+-		if (my_rank==0) rstats=new int[commSize*7];
+-		ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
+-		if (my_rank==0) {
+-			int offset=50;
+-			int rOffset=(commSize/10)+1;
+-			_printf_("   ADOLC statistics: \n");
+-			_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
+-			_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
+-			_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
+-			_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
+-			_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
+-			_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
+-			_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
+-			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-			for (int r=0;r<commSize;++r)
+-			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
+-			delete []rstats;
+-		}
+-		delete [] sstats;
+-	} /*}}}*/
+-
+-	/*diverse: */
+-	int  dummy;
+-	int  num_independents=0;
+-
+-	/*intermediary: */
+-	IssmPDouble *aWeightVector=NULL;
+-	IssmPDouble *weightVectorTimesJac=NULL;
+-
+-	/*output: */
+-	IssmPDouble *totalgradient=NULL;
+-
+-	/*retrieve parameters: */
+-	num_independents = intn;
+-
+-	/*if no dependents, no point in running a driver: */
+-	if(!(num_dependents*num_independents)) _error_("this is not allowed");
+-
+-	/*for adolc to run in parallel, we 0 out on rank~=0. But we still keep track of num_dependents:*/
+-	int num_dependents_old   = num_dependents;
+-	int num_independents_old = num_independents;
+-	if(my_rank!=0){
+-		num_dependents   = 0;
+-		num_independents = 0;
+-	}
+-
+-	/*get the EDF pointer:*/
+-	ext_diff_fct *anEDF_for_solverx_p=xDynamicCast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+-
+-	/* these are always needed regardless of the interpreter */
+-	anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-	anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
+-	 * as to generate num_dependents gradients: */
+-	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
+-
+-	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
+-
+-		/*initialize direction index in the weights vector: */
+-		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
+-		if (my_rank==0) aWeightVector[aDepIndex]=1.;
+-
+-		/*initialize output gradient: */
+-		weightVectorTimesJac=xNew<IssmPDouble>(num_independents);
+-
+-		/*set the forward method function pointer: */
+-		#ifdef _HAVE_GSL_
+-		anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+-		#endif
+-		#ifdef _HAVE_MUMPS_
+-		anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
+-		#endif
+-
+-		anEDF_for_solverx_p->dp_U=xNew<IssmPDouble>(anEDF_for_solverx_p->max_m);
+-		anEDF_for_solverx_p->dp_Z=xNew<IssmPDouble>(anEDF_for_solverx_p->max_n);
+-
+-		/*call driver: */
+-		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+-
+-		/*Add to totalgradient: */
+-		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
+-
+-		/*free resources :*/
+-		xDelete(weightVectorTimesJac);
+-		xDelete(aWeightVector);
+-	}
+-
+-	/*Broadcast gradient to other ranks*/
+-	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
+-
+-	/*Check size of Jlist to avoid crashes*/
+-	_assert_((*Jlisti)<JlistM);
+-	_assert_(JlistN==num_responses+1);
+-
+-	/*Compute objective function*/
+-	IssmDouble* Jtemp = NULL;
+-	IssmDouble J;
+-	femmodel->CostFunctionx(&J,&Jtemp,NULL);
+-	*pf = reCast<double>(J);
+-	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
+-
+-	/*Record cost function values and delete Jtemp*/
+-	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
+-	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
+-	xDelete<IssmDouble>(Jtemp);
+-
+-	if(*indic==0){
+-		/*dry run, no gradient required*/
+-
+-		/*Retrieve objective functions independently*/
+-		_printf0_("            N/A |\n");
+-		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-		_printf0_("\n");
+-
+-		*Jlisti = (*Jlisti) +1;
+-		xDelete<double>(XU);
+-		xDelete<double>(XL);
+-		return;
+-	}
+-
+-	/*Compute gradient*/
+-	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
+-
+-	/*Constrain Gradient*/
+-	IssmDouble  Gnorm = 0.;
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
+-			if(X[index]>=XU[index]) G[index]=0.;
+-			if(X[index]<=XL[index]) G[index]=0.;
+-			G[index] = G[index]*reCast<double>(scaling_factors[c]);
+-			X[index] = X[index]/reCast<double>(scaling_factors[c]);
+-			Gnorm += G[index]*G[index];
+-		}
+-	}
+-	Gnorm = sqrt(Gnorm);
+-
+-	/*Print info*/
+-	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
+-	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
+-	_printf0_("\n");
+-
+-	/*Clean-up and return*/
+-	*Jlisti = (*Jlisti) +1;
+-	xDelete<double>(XU);
+-	xDelete<double>(XL);
+-	xDelete<IssmDouble>(scaling_factors);
+-	xDelete<IssmPDouble>(totalgradient);
+-
+-}/*}}}*/
+-void controlm1qn3_core(FemModel* femmodel){/*{{{*/
+-
+ 	/*Intermediaries*/
+ 	long         omode;
+-	double		 f;
+-	double		 dxmin,gttol; 
++	double       f,dxmin,gttol; 
+ 	int          maxsteps,maxiter;
+ 	int          intn,numberofvertices,num_controls,num_cost_functions,solution_type;
+-	IssmDouble	*scaling_factors = NULL;
+-	double      *X  = NULL;
+-	double      *G  = NULL;
++	IssmDouble  *scaling_factors = NULL;
++	IssmDouble  *X  = NULL;
++	IssmDouble  *G  = NULL;
+ 
+ 	/*Recover some parameters*/
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+@@ -332,8 +51,8 @@
+ 	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
+ 	femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
+-	femmodel->parameters->FindParamAndMakePassive(&dxmin,InversionDxminEnum);
+-	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
++	femmodel->parameters->FindParam(&dxmin,InversionDxminEnum);
++	femmodel->parameters->FindParam(&gttol,InversionGttolEnum);
+ 	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
+ 	numberofvertices=femmodel->vertices->NumberOfVertices();
+@@ -340,7 +59,7 @@
+ 
+ 	/*Initialize M1QN3 parameters*/
+ 	if(VerboseControl())_printf0_("   Initialize M1QN3 parameters\n");
+-	SimulFunc simul_ptr    = &simul_ad; /*Cost function address*/
++	SimulFunc costfuncion  = &simul;    /*Cost function address*/
+ 	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
+ 	char      normtype[]   = "dfn";     /*Norm type: dfn = scalar product defined by prosca*/
+ 	long      izs[5];                   /*Arrays used by m1qn3 subroutines*/
+@@ -357,8 +76,8 @@
+ 	long nsim  = long(maxiter);/*Maximum number of function calls*/
+ 
+ 	/*Get initial guess*/
+-	Vector<double> *Xpetsc = NULL;
+-	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
++	Vector<IssmDouble> *Xpetsc = NULL;
++	GetVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+ 	X = Xpetsc->ToMPISerial();
+ 	Xpetsc->GetSize(&intn);
+ 	delete Xpetsc;
+@@ -372,7 +91,7 @@
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+-			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
++			X[index] = X[index]/scaling_factors[c];
+ 		}
+ 	}
+ 
+@@ -391,19 +110,22 @@
+ 	mystruct.femmodel = femmodel;
+ 	mystruct.M        = maxiter;
+ 	mystruct.N        = num_cost_functions+1;
+-	mystruct.Jlist    = xNewZeroInit<IssmPDouble>(mystruct.M*mystruct.N);
++	mystruct.Jlist    = xNewZeroInit<IssmDouble>(mystruct.M*mystruct.N);
+ 	mystruct.i        = xNewZeroInit<int>(1);
++
+ 	/*Initialize Gradient and cost function of M1QN3*/
+ 	indic = 4; /*gradient required*/
+-	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
++	simul(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
++
+ 	/*Estimation of the expected decrease in f during the first iteration*/
+ 	double df1=f;
+ 
+ 	/*Call M1QN3 solver*/
+-	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
++	m1qn3_(costfuncion,prosca,&ctonbe_,&ctcabe_,
+ 				&n,X,&f,G,&dxmin,&df1,
+ 				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
+ 				&reverse,&indic,izs,rzs,(void*)&mystruct);
++
+ 	switch(int(omode)){
+ 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+@@ -415,36 +137,24 @@
+ 		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
+ 		default: _printf0_("   Unknown end condition\n");
+ 	}
++
+ 	/*Constrain solution vector*/
+-	double  *XL = NULL;
+-	double  *XU = NULL;
+-	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-
++	IssmDouble  *XL = NULL;
++	IssmDouble  *XU = NULL;
++	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+-			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			X[index] = X[index]*scaling_factors[c];
+ 			if(X[index]>XU[index]) X[index]=XU[index];
+ 			if(X[index]<XL[index]) X[index]=XL[index];
+ 		}
+ 	}
+-		
+-	/*Set X as our new control*/
+-	IssmDouble* aX=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
+-	SetControlInputsFromVectorx(femmodel,aX);
+-	xDelete(aX);
+-
+-	/*Set final gradient in inputs*/
+-	IssmDouble* aG=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
+-	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
+-	xDelete(aG);
+-
+-	/*Add last cost function to results*/
++	SetControlInputsFromVectorx(femmodel,X);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
+ 	femmodel->OutputControlsx(&femmodel->results);
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
++	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+ 
+ 	/*Finalize*/
+ 	if(VerboseControl()) _printf0_("   preparing final solution\n");
+@@ -453,7 +163,6 @@
+ 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
+-
+ 	/*Clean-up and return*/
+ 	xDelete<double>(G);
+ 	xDelete<double>(X);
+@@ -460,11 +169,118 @@
+ 	xDelete<double>(dz);
+ 	xDelete<double>(XU);
+ 	xDelete<double>(XL);
+-	xDelete<IssmDouble>(scaling_factors);
+-	xDelete<IssmPDouble>(mystruct.Jlist);
++	xDelete<double>(scaling_factors);
++	xDelete<double>(mystruct.Jlist);
+ 	xDelete<int>(mystruct.i);
+-}/*}}}*/
++}
+ 
++/*Cost function definition*/
++void simul(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){
++
++	/*Recover Arguments*/
++	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
++	FemModel     *femmodel     = input_struct->femmodel;
++	IssmDouble   *Jlist        = input_struct->Jlist;
++	int           JlistM       = input_struct->M;
++	int           JlistN       = input_struct->N;
++	int          *Jlisti       = input_struct->i;
++
++	/*Recover some parameters*/
++	int num_responses,num_controls,numberofvertices,solution_type;
++	IssmDouble* scaling_factors = NULL;
++	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Constrain input vector and update controls*/
++	IssmDouble  *XL = NULL;
++	IssmDouble  *XU = NULL;
++	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*scaling_factors[c];
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++	SetControlInputsFromVectorx(femmodel,X);
++
++	/*Compute solution and adjoint*/
++	void (*solutioncore)(FemModel*)=NULL;
++	void (*adjointcore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++	/*Check size of Jlist to avoid crashes*/
++	_assert_((*Jlisti)<JlistM);
++	_assert_(JlistN==num_responses+1);
++
++	/*Compute objective function*/
++	IssmDouble* Jtemp = NULL;
++	femmodel->CostFunctionx(pf,&Jtemp,NULL);
++	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
++
++	/*Record cost function values and delete Jtemp*/
++	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = Jtemp[i];
++	Jlist[(*Jlisti)*JlistN+num_responses] = *pf;
++	xDelete<IssmDouble>(Jtemp);
++
++	if(*indic==0){
++		/*dry run, no gradient required*/
++
++		/*Retrieve objective functions independently*/
++		_printf0_("            N/A |\n");
++		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++		_printf0_("\n");
++
++		*Jlisti = (*Jlisti) +1;
++		xDelete<IssmDouble>(XU);
++		xDelete<IssmDouble>(XL);
++		return;
++	}
++
++	/*Compute Adjoint*/
++	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
++	adjointcore(femmodel);
++
++	/*Compute gradient*/
++	IssmDouble* G2 = NULL;
++	Gradjx(&G2,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	for(long i=0;i<*n;i++) G[i] = -G2[i];
++	xDelete<IssmDouble>(G2);
++
++	/*Constrain Gradient*/
++	IssmDouble  Gnorm = 0.;
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			if(X[index]>=XU[index]) G[index]=0.;
++			if(X[index]<=XL[index]) G[index]=0.;
++			G[index] = G[index]*scaling_factors[c];
++			X[index] = X[index]/scaling_factors[c];
++			Gnorm += G[index]*G[index];
++		}
++	}
++	Gnorm = sqrt(Gnorm);
++
++	/*Print info*/
++	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
++	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++	_printf0_("\n");
++
++	/*Clean-up and return*/
++	*Jlisti = (*Jlisti) +1;
++	xDelete<IssmDouble>(XU);
++	xDelete<IssmDouble>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++}
++
+ #else
+-void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
++void controlm1qn3_core(FemModel* femmodel){
++	_error_("M1QN3 not installed");
++}
+ #endif //_HAVE_M1QN3_
+Index: ../trunk-jpl/src/c/cores/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22438)
+@@ -78,9 +78,9 @@
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
+-	
+-//	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+ 
++	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
++
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
+ }
+Index: ../trunk-jpl/src/c/cores/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22438)
+@@ -25,7 +25,7 @@
+ 	int     dummy;
+ 	int     num_dependents=0;
+ 	int     num_independents=0;
+-	bool    isautodiff,iscontrol;
++	bool    isautodiff       = false;
+ 	char   *driver           = NULL;
+ 	size_t  tape_stats[15];
+ 
+@@ -36,9 +36,8 @@
+ 
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+-	femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum);
+ 
+-	if(isautodiff && !iscontrol){
++	if(isautodiff){
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22438)
+@@ -7,7 +7,21 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
+ #include "./FemModel.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
++#include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
++#include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
++#include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h"
++#include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
++#include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h"
++#include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
++#include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
++#include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ 
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+@@ -14,30 +28,30 @@
+ 
+ class Numberedcostfunction: public Object, public Definition{
+ 
+-public: 
++	public: 
+ 
+-int   definitionenum;
+-char* name;
+-int   number_cost_functions;
+-int*  cost_functions_list;
++		int   definitionenum;
++		char* name;
++		int   number_cost_functions;
++		int*  cost_functions_list;
++		
++		/*Numberedcostfunction constructors, destructors :*/
++		Numberedcostfunction();
++		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
++		~Numberedcostfunction();
+ 
+-/*Numberedcostfunction constructors, destructors :*/
+-Numberedcostfunction();
+-Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
+-~Numberedcostfunction();
++		/*Object virtual function resolutoin: */
++		Object*	copy();
++		void		DeepEcho(void);
++		void		Echo(void);
++		int		Id(void);
++		void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int		ObjectEnum(void);
+ 
+-/*Object virtual function resolutoin: */
+-Object*	copy();
+-void		DeepEcho(void);
+-void		Echo(void);
+-int		Id(void);
+-void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+-int		ObjectEnum(void);
+-
+-/*Definition virtual function resolutoin: */
+-int		DefinitionEnum();
+-char*		Name();
+-IssmDouble Response(FemModel* femmodel);
++		/*Definition virtual function resolutoin: */
++		int		DefinitionEnum();
++		char*		Name();
++		IssmDouble Response(FemModel* femmodel);
+ };
+ 
+ #endif  /* _NUMBEREDCOSTFUNCTION_H_ */
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.cpp	(revision 22438)
+@@ -14,6 +14,7 @@
+ #include "./Definition.h"
+ #include "./Elements/Element.h"
+ #include "./Elements/Elements.h"
++#include "./FemModel.h"
+ #include "../classes/Params/Parameters.h"
+ 
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Misfit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.cpp	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Misfit.cpp	(revision 22438)
+@@ -11,12 +11,12 @@
+ #endif
+ 
+ #include "./classes.h"
+-#include "./FemModel.h"
+ #include "./ExternalResults/ExternalResult.h"
+ #include "./ExternalResults/Results.h"
+ #include "../datastructures/datastructures.h"
+ #include "./Elements/Element.h"
+ #include "./Elements/Elements.h"
++#include "./FemModel.h"
+ #include "../modules/SurfaceAreax/SurfaceAreax.h"
+ #include "../classes/Params/Parameters.h"
+ #include "../classes/Inputs/Input.h"
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22438)
+@@ -8,7 +8,11 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
+ #include "./FemModel.h"
++#include "../classes/Params/Parameters.h"
+ 
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/classes/Nodalvalue.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22438)
+@@ -8,7 +8,14 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
+ #include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
+ /*}}}*/
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22437)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22438)
+@@ -7,7 +7,14 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
+ #include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+ void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22438-22439.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22438-22439.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22438-22439.diff	(revision 22755)
@@ -0,0 +1,475 @@
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22439)
+@@ -0,0 +1,470 @@
++/*!\file: controlm1qn3_core.cpp
++ * \brief: core of the control solution 
++ */ 
++
++#include <config.h>
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++#if defined (_HAVE_M1QN3_) 
++//& !defined(_HAVE_ADOLC_)
++/*m1qn3 prototypes*/
++extern "C" void *ctonbe_; // DIS mode : Conversion
++extern "C" void *ctcabe_; // DIS mode : Conversion
++extern "C" void *euclid_; // Scalar product
++typedef void (*SimulFunc) (long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs);
++extern "C" void m1qn3_ (void f(long* indic,long* n, double* x,double* pf,double* g,long [],float [],void* dzs),
++			void **, void **, void **,
++			long *, double [],double *, double[], double*, double *,
++			double *, char [], long *, long *, long *, long *, long *, long *, long [],double [], long *,
++			long *, long *, long [], float [],void* );
++
++/*Use struct to provide arguments*/
++typedef struct{
++	FemModel   * femmodel;
++	IssmPDouble* Jlist;
++	int          M;
++	int          N;
++	int*         i;
++} m1qn3_struct;
++
++/*m1qm3 functions*/
++void simul_starttrace(FemModel* femmodel){/*{{{*/
++
++	/*Retrive ADOLC parameters*/
++	IssmDouble gcTriggerRatio;
++	IssmDouble gcTriggerMaxSize;
++	IssmDouble obufsize;
++	IssmDouble lbufsize;
++	IssmDouble cbufsize;
++	IssmDouble tbufsize;
++	femmodel->parameters->FindParam(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
++	femmodel->parameters->FindParam(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
++	femmodel->parameters->FindParam(&obufsize,AutodiffObufsizeEnum);
++	femmodel->parameters->FindParam(&lbufsize,AutodiffLbufsizeEnum);
++	femmodel->parameters->FindParam(&cbufsize,AutodiffCbufsizeEnum);
++	femmodel->parameters->FindParam(&tbufsize,AutodiffTbufsizeEnum);
++
++	/*Set garbage collection parameters: */
++	setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
++
++	/*Start trace: */
++	int skipFileDeletion=1;
++	int keepTaylors=1;
++	int my_rank=IssmComm::GetRank();
++	trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
++}/*}}}*/
++void simul_ad(long* indic,long* n,double* X,double* pf,double* G,long izs[1],float rzs[1],void* dzs){/*{{{*/
++
++	/*Get rank*/
++	int my_rank=IssmComm::GetRank();
++
++	/*Recover Arguments*/
++	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
++	FemModel     *femmodel     = input_struct->femmodel;
++	IssmPDouble  *Jlist        = input_struct->Jlist;
++	int           JlistM       = input_struct->M;
++	int           JlistN       = input_struct->N;
++	int          *Jlisti       = input_struct->i;
++	int           intn         = (int)*n;
++
++	/*Recover some parameters*/
++	int num_responses,num_controls,numberofvertices,solution_type;
++	IssmDouble* scaling_factors = NULL;
++	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Constrain input vector and update controls*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++
++	/*Start Tracing*/
++	simul_starttrace(femmodel);
++
++	/*Set X as our new control input abd as INDEPENDENT!!*/
++#ifdef _HAVE_AD_
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
++#else
++	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
++#endif
++	if(my_rank==0){
++		for(int i=0;i<intn;i++){
++			aX[i]<<=X[i];
++		}
++	}
++	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete<IssmDouble>(aX);
++
++	/*Compute solution (forward)*/
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++	/*Get Dependents*/
++	IssmDouble  output_value;
++	int         num_dependents;
++	IssmPDouble *dependents;
++	DataSet*    dependent_objects=NULL;
++
++	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
++
++	/*Go through our dependent variables, and compute the response:*/
++	dependents=xNew<IssmPDouble>(num_dependents);
++	for(int i=0;i<dependent_objects->Size();i++){
++		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++		dep->Responsex(&output_value,femmodel);
++		if (my_rank==0) {
++			output_value>>=dependents[i];
++		}
++	}
++
++	/*Turning off trace tape*/
++	trace_off();
++
++	/*Print tape statistics so that user can kill this run if something is off already:*/
++	if(VerboseAutodiff()){ /*{{{*/
++		size_t  tape_stats[15];
++		tapestats(my_rank,tape_stats); //reading of tape statistics
++		int commSize=IssmComm::GetSize();
++		int *sstats=new int[7];
++		sstats[0]=tape_stats[NUM_OPERATIONS];
++		sstats[1]=tape_stats[OP_FILE_ACCESS];
++		sstats[2]=tape_stats[NUM_LOCATIONS];
++		sstats[3]=tape_stats[LOC_FILE_ACCESS];
++		sstats[4]=tape_stats[NUM_VALUES];
++		sstats[5]=tape_stats[VAL_FILE_ACCESS];
++		sstats[6]=tape_stats[TAY_STACK_SIZE];
++		int *rstats=NULL;
++		if (my_rank==0) rstats=new int[commSize*7];
++		ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
++		if (my_rank==0) {
++			int offset=50;
++			int rOffset=(commSize/10)+1;
++			_printf_("   ADOLC statistics: \n");
++			_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
++			_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
++			_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++			_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++			_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
++			_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
++			_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
++			for (int r=0;r<commSize;++r)
++			 _printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
++			delete []rstats;
++		}
++		delete [] sstats;
++	} /*}}}*/
++
++	/*diverse: */
++	int  dummy;
++	int  num_independents=0;
++
++	/*intermediary: */
++	IssmPDouble *aWeightVector=NULL;
++	IssmPDouble *weightVectorTimesJac=NULL;
++
++	/*output: */
++	IssmPDouble *totalgradient=NULL;
++
++	/*retrieve parameters: */
++	num_independents = intn;
++
++	/*if no dependents, no point in running a driver: */
++	if(!(num_dependents*num_independents)) _error_("this is not allowed");
++
++	/*for adolc to run in parallel, we 0 out on rank~=0. But we still keep track of num_dependents:*/
++	int num_dependents_old   = num_dependents;
++	int num_independents_old = num_independents;
++	if(my_rank!=0){
++		num_dependents   = 0;
++		num_independents = 0;
++	}
++
++	/*get the EDF pointer:*/
++	ext_diff_fct *anEDF_for_solverx_p=xDynamicCast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
++
++	/* these are always needed regardless of the interpreter */
++	anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++	anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
++	 * as to generate num_dependents gradients: */
++	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
++
++	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
++
++		/*initialize direction index in the weights vector: */
++		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
++		if (my_rank==0) aWeightVector[aDepIndex]=1.;
++
++		/*initialize output gradient: */
++		weightVectorTimesJac=xNew<IssmPDouble>(num_independents);
++
++		/*set the forward method function pointer: */
++		#ifdef _HAVE_GSL_
++		anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++		#endif
++		#ifdef _HAVE_MUMPS_
++		anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
++		#endif
++
++		anEDF_for_solverx_p->dp_U=xNew<IssmPDouble>(anEDF_for_solverx_p->max_m);
++		anEDF_for_solverx_p->dp_Z=xNew<IssmPDouble>(anEDF_for_solverx_p->max_n);
++
++		/*call driver: */
++		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++
++		/*Add to totalgradient: */
++		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
++
++		/*free resources :*/
++		xDelete(weightVectorTimesJac);
++		xDelete(aWeightVector);
++	}
++
++	/*Broadcast gradient to other ranks*/
++	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++
++	/*Check size of Jlist to avoid crashes*/
++	_assert_((*Jlisti)<JlistM);
++	_assert_(JlistN==num_responses+1);
++
++	/*Compute objective function*/
++	IssmDouble* Jtemp = NULL;
++	IssmDouble J;
++	femmodel->CostFunctionx(&J,&Jtemp,NULL);
++	*pf = reCast<double>(J);
++	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
++
++	/*Record cost function values and delete Jtemp*/
++	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
++	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
++	xDelete<IssmDouble>(Jtemp);
++
++	if(*indic==0){
++		/*dry run, no gradient required*/
++
++		/*Retrieve objective functions independently*/
++		_printf0_("            N/A |\n");
++		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++		_printf0_("\n");
++
++		*Jlisti = (*Jlisti) +1;
++		xDelete<double>(XU);
++		xDelete<double>(XL);
++		return;
++	}
++
++	/*Compute gradient*/
++	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
++
++	/*Constrain Gradient*/
++	IssmDouble  Gnorm = 0.;
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			if(X[index]>=XU[index]) G[index]=0.;
++			if(X[index]<=XL[index]) G[index]=0.;
++			G[index] = G[index]*reCast<double>(scaling_factors[c]);
++			X[index] = X[index]/reCast<double>(scaling_factors[c]);
++			Gnorm += G[index]*G[index];
++		}
++	}
++	Gnorm = sqrt(Gnorm);
++
++	/*Print info*/
++	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
++	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
++	_printf0_("\n");
++
++	/*Clean-up and return*/
++	*Jlisti = (*Jlisti) +1;
++	xDelete<double>(XU);
++	xDelete<double>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(totalgradient);
++
++}/*}}}*/
++void controlm1qn3_core(FemModel* femmodel){/*{{{*/
++
++	/*Intermediaries*/
++	long         omode;
++	double		 f;
++	double		 dxmin,gttol; 
++	int          maxsteps,maxiter;
++	int          intn,numberofvertices,num_controls,num_cost_functions,solution_type;
++	IssmDouble	*scaling_factors = NULL;
++	double      *X  = NULL;
++	double      *G  = NULL;
++
++	/*Recover some parameters*/
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
++	femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
++	femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
++	femmodel->parameters->FindParamAndMakePassive(&dxmin,InversionDxminEnum);
++	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
++	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
++
++	/*Initialize M1QN3 parameters*/
++	if(VerboseControl())_printf0_("   Initialize M1QN3 parameters\n");
++	SimulFunc simul_ptr    = &simul_ad; /*Cost function address*/
++	void**    prosca       = &euclid_;  /*Dot product function (euclid is the default)*/
++	char      normtype[]   = "dfn";     /*Norm type: dfn = scalar product defined by prosca*/
++	long      izs[5];                   /*Arrays used by m1qn3 subroutines*/
++	long      iz[5];                    /*Integer m1qn3 working array of size 5*/
++	float     rzs[1];                   /*Arrays used by m1qn3 subroutines*/
++	long      impres       = 0;         /*verbosity level*/
++	long      imode[3]     = {0};       /*scaling and starting mode, 0 by default*/
++	long      indic        = 4;         /*compute f and g*/
++	long      reverse      = 0;         /*reverse or direct mode*/
++	long      io           = 6;         /*Channel number for the output*/
++
++	/*Optimization criterions*/
++	long niter = long(maxsteps); /*Maximum number of iterations*/
++	long nsim  = long(maxiter);/*Maximum number of function calls*/
++
++	/*Get initial guess*/
++	Vector<double> *Xpetsc = NULL;
++	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
++	X = Xpetsc->ToMPISerial();
++	Xpetsc->GetSize(&intn);
++	delete Xpetsc;
++	_assert_(intn==numberofvertices*num_controls);
++
++	/*Get problem dimension and initialize gradient and initial guess*/
++	long n = long(intn);
++	G = xNew<double>(n);
++
++	/*Scale control for M1QN3*/
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
++		}
++	}
++
++	/*Allocate m1qn3 working arrays (see documentation)*/
++	long      m   = 100;
++	long      ndz = 4*n+m*(2*n+1);
++	double*   dz  = xNew<double>(ndz);
++
++	if(VerboseControl())_printf0_("   Computing initial solution\n");
++	_printf0_("\n");
++	_printf0_("Cost function f(x)   | Gradient norm |g(x)| |  List of contributions\n");
++	_printf0_("____________________________________________________________________\n");
++
++	/*Prepare structure for m1qn3*/
++	m1qn3_struct mystruct;
++	mystruct.femmodel = femmodel;
++	mystruct.M        = maxiter;
++	mystruct.N        = num_cost_functions+1;
++	mystruct.Jlist    = xNewZeroInit<IssmPDouble>(mystruct.M*mystruct.N);
++	mystruct.i        = xNewZeroInit<int>(1);
++	/*Initialize Gradient and cost function of M1QN3*/
++	indic = 4; /*gradient required*/
++	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
++	/*Estimation of the expected decrease in f during the first iteration*/
++	double df1=f;
++
++	/*Call M1QN3 solver*/
++	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
++				&n,X,&f,G,&dxmin,&df1,
++				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
++				&reverse,&indic,izs,rzs,(void*)&mystruct);
++	switch(int(omode)){
++		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
++		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
++		case 2:  _printf0_("   Bad initialization\n"); break;
++		case 3:  _printf0_("   Line search failure\n"); break;
++		case 4:  _printf0_("   Maximum number of iterations exceeded\n");break;
++		case 5:  _printf0_("   Maximum number of function calls exceeded\n"); break;
++		case 6:  _printf0_("   stopped on dxmin during line search\n"); break;
++		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
++		default: _printf0_("   Unknown end condition\n");
++	}
++	/*Constrain solution vector*/
++	double  *XL = NULL;
++	double  *XU = NULL;
++	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++
++	for(int i=0;i<numberofvertices;i++){
++		for(int c=0;c<num_controls;c++){
++			int index = num_controls*i+c;
++			X[index] = X[index]*reCast<double>(scaling_factors[c]);
++			if(X[index]>XU[index]) X[index]=XU[index];
++			if(X[index]<XL[index]) X[index]=XL[index];
++		}
++	}
++		
++	/*Set X as our new control*/
++	IssmDouble* aX=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
++	SetControlInputsFromVectorx(femmodel,aX);
++	xDelete(aX);
++
++	/*Set final gradient in inputs*/
++	IssmDouble* aG=xNew<IssmDouble>(intn);
++	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
++	xDelete(aG);
++
++	/*Add last cost function to results*/
++	femmodel->OutputControlsx(&femmodel->results);
++	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
++
++	/*Finalize*/
++	if(VerboseControl()) _printf0_("   preparing final solution\n");
++	femmodel->parameters->SetParam(true,SaveResultsEnum);
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++
++	/*Clean-up and return*/
++	xDelete<double>(G);
++	xDelete<double>(X);
++	xDelete<double>(dz);
++	xDelete<double>(XU);
++	xDelete<double>(XL);
++	xDelete<IssmDouble>(scaling_factors);
++	xDelete<IssmPDouble>(mystruct.Jlist);
++	xDelete<int>(mystruct.i);
++}/*}}}*/
++
++#else
++void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
++#endif //_HAVE_M1QN3_
Index: /issm/oecreview/Archive/21724-22754/ISSM-22439-22440.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22439-22440.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22439-22440.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/test/MITgcm/build/mitgcmuv
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/MITgcm/build/mitgcmuv
+===================================================================
+--- ../trunk-jpl/test/MITgcm/build/mitgcmuv	(revision 22439)
++++ ../trunk-jpl/test/MITgcm/build/mitgcmuv	(nonexistent)
+
+Property changes on: ../trunk-jpl/test/MITgcm/build/mitgcmuv
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Deleted: svn:mime-type
+## -1 +0,0 ##
+-application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22440-22441.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22440-22441.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22440-22441.diff	(revision 22755)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/src/c/classes/Regionaloutput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22440)
++++ ../trunk-jpl/src/c/classes/Regionaloutput.h	(revision 22441)
+@@ -8,11 +8,7 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../classes/Params/Parameters.h"
+ 
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/classes/Nodalvalue.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22440)
++++ ../trunk-jpl/src/c/classes/Nodalvalue.h	(revision 22441)
+@@ -8,14 +8,7 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../modules/SurfaceAreax/SurfaceAreax.h"
+-#include "../classes/Params/Parameters.h"
+-#include "../classes/Inputs/Input.h"
+-#include "../classes/gauss/Gauss.h"
+ /*}}}*/
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Misfit.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Misfit.h	(revision 22440)
++++ ../trunk-jpl/src/c/classes/Misfit.h	(revision 22441)
+@@ -7,14 +7,7 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "../modules/SurfaceAreax/SurfaceAreax.h"
+-#include "../classes/Params/Parameters.h"
+-#include "../classes/Inputs/Input.h"
+-#include "../classes/gauss/Gauss.h"
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+ void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22440)
++++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h	(revision 22441)
+@@ -7,21 +7,7 @@
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+-#include "../datastructures/datastructures.h"
+-#include "./Elements/Element.h"
+-#include "./Elements/Elements.h"
+ #include "./FemModel.h"
+-#include "./ExternalResults/ExternalResult.h"
+-#include "./ExternalResults/Results.h"
+-#include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
+-#include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
+-#include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
+-#include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h"
+-#include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
+-#include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+-#include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+-#include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
+-#include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ 
+ 
+ IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+@@ -28,30 +14,30 @@
+ 
+ class Numberedcostfunction: public Object, public Definition{
+ 
+-	public: 
++public: 
+ 
+-		int   definitionenum;
+-		char* name;
+-		int   number_cost_functions;
+-		int*  cost_functions_list;
+-		
+-		/*Numberedcostfunction constructors, destructors :*/
+-		Numberedcostfunction();
+-		Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
+-		~Numberedcostfunction();
++int   definitionenum;
++char* name;
++int   number_cost_functions;
++int*  cost_functions_list;
+ 
+-		/*Object virtual function resolutoin: */
+-		Object*	copy();
+-		void		DeepEcho(void);
+-		void		Echo(void);
+-		int		Id(void);
+-		void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+-		int		ObjectEnum(void);
++/*Numberedcostfunction constructors, destructors :*/
++Numberedcostfunction();
++Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in);
++~Numberedcostfunction();
+ 
+-		/*Definition virtual function resolutoin: */
+-		int		DefinitionEnum();
+-		char*		Name();
+-		IssmDouble Response(FemModel* femmodel);
++/*Object virtual function resolutoin: */
++Object*	copy();
++void		DeepEcho(void);
++void		Echo(void);
++int		Id(void);
++void		Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++int		ObjectEnum(void);
++
++/*Definition virtual function resolutoin: */
++int		DefinitionEnum();
++char*		Name();
++IssmDouble Response(FemModel* femmodel);
+ };
+ 
+ #endif  /* _NUMBEREDCOSTFUNCTION_H_ */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22441-22442.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22441-22442.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22441-22442.diff	(revision 22755)
@@ -0,0 +1,300 @@
+Index: ../trunk-jpl/lib
+===================================================================
+--- ../trunk-jpl/lib	(revision 22441)
++++ ../trunk-jpl/lib	(revision 22442)
+
+Property changes on: ../trunk-jpl/lib
+___________________________________________________________________
+Modified: svn:ignore
+## -3,3 +3,4 ##
+ *.mexa64
+ *.mexmaci64
+ *.so
++*.dylib
+Index: ../trunk-jpl/test/MITgcm/build
+===================================================================
+--- ../trunk-jpl/test/MITgcm/build	(revision 22441)
++++ ../trunk-jpl/test/MITgcm/build	(revision 22442)
+
+Property changes on: ../trunk-jpl/test/MITgcm/build
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,8 ##
++mitgcmuv
++*.c
++*.F
++*.for
++*.h
++f90mkdepend.log
++genmake.log
++Makefile*
+Index: ../trunk-jpl/test/NightlyRun
+===================================================================
+--- ../trunk-jpl/test/NightlyRun	(revision 22441)
++++ ../trunk-jpl/test/NightlyRun	(revision 22442)
+
+Property changes on: ../trunk-jpl/test/NightlyRun
+___________________________________________________________________
+Modified: svn:ignore
+## -13,3 +13,7 ##
+ *.outbin
+ qmu*
+ *.bin
++Models
++run
++run.old
++run_matlab
+Index: ../trunk-jpl/externalpackages
+===================================================================
+--- ../trunk-jpl/externalpackages	(revision 22441)
++++ ../trunk-jpl/externalpackages	(revision 22442)
+
+Property changes on: ../trunk-jpl/externalpackages
+___________________________________________________________________
+Modified: svn:ignore
+## -17,3 +17,5 ##
+ CMakeCache.txt
+ Makefile
+ CMakeFiles
++matlab
++svn-commit.tmp
+Index: ../trunk-jpl/src/c/classes/Dakota
+===================================================================
+--- ../trunk-jpl/src/c/classes/Dakota	(revision 22441)
++++ ../trunk-jpl/src/c/classes/Dakota	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/classes/Dakota
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
+Index: ../trunk-jpl/src/c/shared/io/Marshalling
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling	(revision 22441)
++++ ../trunk-jpl/src/c/shared/io/Marshalling	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/shared/io/Marshalling
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GeothermalFluxx
+===================================================================
+--- ../trunk-jpl/src/c/modules/GeothermalFluxx	(revision 22441)
++++ ../trunk-jpl/src/c/modules/GeothermalFluxx	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/modules/GeothermalFluxx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GiaDeflectionCorex
+===================================================================
+--- ../trunk-jpl/src/c/modules/GiaDeflectionCorex	(revision 22441)
++++ ../trunk-jpl/src/c/modules/GiaDeflectionCorex	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/modules/GiaDeflectionCorex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex	(revision 22441)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/modules/FourierLoveCorex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx
+===================================================================
+--- ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx	(revision 22441)
++++ ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/modules/DistanceToMaskBoundaryx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules
+===================================================================
+--- ../trunk-jpl/src/c/modules	(revision 22441)
++++ ../trunk-jpl/src/c/modules	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/modules
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,4 ##
+ .deps
++InputControlUpdatex
++InputScalex
++TriaSearchx
+Index: ../trunk-jpl/src/wrappers/javascript/io
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/io	(revision 22441)
++++ ../trunk-jpl/src/wrappers/javascript/io	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/wrappers/javascript/io
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
+Index: ../trunk-jpl/src/wrappers/Issm
+===================================================================
+--- ../trunk-jpl/src/wrappers/Issm	(revision 22441)
++++ ../trunk-jpl/src/wrappers/Issm	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/wrappers/Issm
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
+Index: ../trunk-jpl/src/wrappers/DistanceToMaskBoundary
+===================================================================
+--- ../trunk-jpl/src/wrappers/DistanceToMaskBoundary	(revision 22441)
++++ ../trunk-jpl/src/wrappers/DistanceToMaskBoundary	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/wrappers/DistanceToMaskBoundary
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/wrappers
+===================================================================
+--- ../trunk-jpl/src/wrappers	(revision 22441)
++++ ../trunk-jpl/src/wrappers	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/wrappers
+___________________________________________________________________
+Modified: svn:ignore
+## -16,3 +16,15 ##
+ *.mexw32.map
+ *.exe.manifest
+ .dirstamp
++EnumToString
++Exp2Kml
++Issm/.deps
++KMLFileRead
++KMLMeshWrite
++KMLOverlay
++Kml2Exp
++Ll2xy
++Shp2Kml
++StringToEnum
++TriaSearch
++Xy2ll
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22441)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22442)
+@@ -1,3 +1,50 @@
+ Rules for coupling ISSM and MITgcm:
+ 
+ * 
++
++>>>> INITIALIZATION FROM SCRATCH
++
++CouplingTime=0
++1. ISSM sends CouplingTime=0 bed to MITgcm
++2. MITgcm integrates for CouplingTime=0:1
++
++CouplingTime=1
++1. MITgcm sends time-mean melt rate for CouplingTime=0:1 to ISSM
++2. ISSM sends CouplingTime=0 bed to MITgcm (it's duplicate of above)
++3. ISSM integrates for CouplingTime=0:1
++4. MITgcm integrates for CouplingTime=1:2
++
++CouplingTime=2
++1. MITgcm sends time-mean melt rate for CouplingTime=1:2 to ISSM
++2. ISSM sends CouplingTime=1 bed to MITgcm
++3. ISSM integrates for CouplingTime=1:2
++4. MITgcm integrates for CouplingTime=2:3
++
++...
++
++CouplingTime=N-1
++1. MITgcm sends time-mean melt rate for CouplingTime=(N-2):(N-1) to ISSM
++2. ISSM sends CouplingTime=N-2 bed to MITgcm
++3. ISSM integrates for CouplingTime=(N-2):(N-1)
++4. MITgcm integrates for CouplingTime=(N-1):N
++
++CouplingTime=N (restart files are saved here)
++1. MITgcm sends time-mean melt rate for CouplingTime=(N-1):N to ISSM
++2. MITgcm saves CouplingTime=N MITgcm state
++3. ISSM saves CouplingTime=N-1 ISSM state and CouplingTime=(N-1):N melt rate
++
++
++>>>> RESTART FROM SAVED STATE
++
++CouplingTime=N
++1. ISSM sends CouplingTime=N-1 bed to MITgcm
++2. ISSM integrates for CouplingTime=(N-1):N
++3. MITgcm integrates for CouplingTime=N:(N+1)
++
++CouplingTime=N+1
++1. MITgcm sends time-mean melt rate for CouplingTime=N:(N+1) to ISSM
++2. ISSM sends CouplingTime=N bed to MITgcm
++3. ISSM integrates for CouplingTime=N:(N+1)
++4. MITgcm integrates for CouplingTime=(N+1):(N+2)
++
++...
+Index: ../trunk-jpl/test/MITgcm
+===================================================================
+--- ../trunk-jpl/test/MITgcm	(revision 22441)
++++ ../trunk-jpl/test/MITgcm	(revision 22442)
+
+Property changes on: ../trunk-jpl/test/MITgcm
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++install
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22441)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22442)
+@@ -34,7 +34,6 @@
+ 
+ 	/*Split world into sub-communicators for each and every model:*/
+ 	ISSM_MPI_Comm_split(worldcomm,0, my_rank, &modelcomm);
+-
+ 	ISSM_MPI_Comm_rank(modelcomm,&my_local_rank);
+ 	ISSM_MPI_Comm_size(modelcomm,&my_local_size);
+ 
+Index: ../trunk-jpl/src/c/main
+===================================================================
+--- ../trunk-jpl/src/c/main	(revision 22441)
++++ ../trunk-jpl/src/c/main	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c/main
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,4 ##
+ .deps
+ .dirstamp
++issm_ocean.cpp_orig
++model.mod
+Index: ../trunk-jpl/src/c
+===================================================================
+--- ../trunk-jpl/src/c	(revision 22441)
++++ ../trunk-jpl/src/c	(revision 22442)
+
+Property changes on: ../trunk-jpl/src/c
+___________________________________________________________________
+Modified: svn:ignore
+## -19,3 +19,8 ##
+ issm
+ kriging
+ issm_slr
++issm_ocean
++lnb_param.mod
++lovenb_sub.mod
++model.mod
++util.mod
Index: /issm/oecreview/Archive/21724-22754/ISSM-22442-22443.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22442-22443.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22442-22443.diff	(revision 22755)
@@ -0,0 +1,274 @@
+Index: ../trunk-jpl/src/m/classes/adm1qn3inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/adm1qn3inversion.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/adm1qn3inversion.m	(revision 22443)
+@@ -0,0 +1,193 @@
++%ADM1QN3INVERSION class definition
++%
++%   Usage:
++%      adm1qn3inversion=adm1qn3inversion();
++
++classdef adm1qn3inversion
++	properties (SetAccess=public) 
++		iscontrol                   = 0
++		control_parameters          = NaN
++		control_scaling_factors     = NaN
++		maxsteps                    = 0
++		maxiter                     = 0
++		dxmin                       = 0
++		gttol                       = 0
++		cost_functions              = NaN
++		cost_functions_coefficients = NaN
++		min_parameters              = NaN
++		max_parameters              = NaN
++		vx_obs                      = NaN
++		vy_obs                      = NaN
++		vz_obs                      = NaN
++		vel_obs                     = NaN
++		thickness_obs               = NaN
++		surface_obs                 = NaN
++
++	end
++	methods
++		function self = adm1qn3inversion(varargin) % {{{
++			switch nargin
++				case 0
++					self=setdefaultparameters(self);
++				case 1
++					self=structtoobj(adm1qn3inversion(),varargin{1});
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function self = extrude(self,md) % {{{
++			self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
++			self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
++			self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
++			self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
++			if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
++			if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
++			if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++
++
++			%parameter to be inferred by control methods (only
++			%drag and B are supported yet)
++			self.control_parameters={'FrictionCoefficient'};
++
++			%Scaling factor for each control
++			self.control_scaling_factors=1;
++
++			%number of iterations
++			self.maxsteps=20;
++			self.maxiter=40;
++
++			%several responses can be used:
++			self.cost_functions=101;
++
++			%m1qn3 parameters
++			self.dxmin  = 0.1;
++			self.gttol = 1e-4;
++
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			%Early return
++			if ~self.iscontrol, return; end
++
++			if ~IssmConfig('_HAVE_M1QN3_'),
++				md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with M1QN3']);
++			end
++			num_controls=numel(md.inversion.control_parameters);
++			num_costfunc=size(md.inversion.cost_functions,2);
++
++			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
++			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
++			md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
++			md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
++			md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
++			md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
++			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
++			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
++			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
++			md = checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
++
++			if strcmp(solution,'BalancethicknessSolution')
++				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++			elseif strcmp(solution,'BalancethicknessSoftSolution')
++				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++			else
++				md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				if ~strcmp(domaintype(md.mesh),'2Dvertical'),
++					md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
++				end
++			end
++		end % }}}
++		function disp(self) % {{{
++			disp(sprintf('   adm1qn3inversion parameters:'));
++			fielddisplay(self,'iscontrol','is inversion activated?');
++			fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');
++			fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');
++			fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)');
++			fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)');
++			fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
++			fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');
++			fielddisplay(self,'cost_functions','indicate the type of response for each optimization step');
++			fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
++			fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
++			fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
++			fielddisplay(self,'vx_obs','observed velocity x component [m/yr]');
++			fielddisplay(self,'vy_obs','observed velocity y component [m/yr]');
++			fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]');
++			fielddisplay(self,'thickness_obs','observed thickness [m]');
++			fielddisplay(self,'surface_obs','observed surface elevation [m]');
++			disp('Available cost functions:');
++			disp('   101: SurfaceAbsVelMisfit');
++			disp('   102: SurfaceRelVelMisfit');
++			disp('   103: SurfaceLogVelMisfit');
++			disp('   104: SurfaceLogVxVyMisfit');
++			disp('   105: SurfaceAverageVelMisfit');
++			disp('   201: ThicknessAbsMisfit');
++			disp('   501: DragCoefficientAbsGradient');
++			disp('   502: RheologyBbarAbsGradient');
++			disp('   503: ThicknessAbsGradient');
++		end % }}}
++		function marshall(self,prefix,md,fid) % {{{
++
++			yts=md.constants.yts;
++
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
++			WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
++			if ~self.iscontrol, return; end
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			if(numel(self.thickness_obs)==md.mesh.numberofelements),
++				mattype=2;
++			else
++				mattype=1;
++			end
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
++			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
++
++			%process control parameters
++			num_control_parameters=numel(self.control_parameters);
++			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
++			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
++
++			%process cost functions
++			num_cost_functions=size(self.cost_functions,2);
++			data=marshallcostfunctions(self.cost_functions);
++			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
++			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
++		end % }}}
++		function savemodeljs(self,fid,modelname) % {{{
++		
++			writejsdouble(fid,[modelname '.inversion.iscontrol'],self.iscontrol);
++			writejscellstring(fid,[modelname '.inversion.control_parameters'],self.control_parameters);
++			writejsdouble(fid,[modelname '.inversion.control_scaling_factors'],self.control_scaling_factors);
++			writejsdouble(fid,[modelname '.inversion.maxsteps'],self.maxsteps);
++			writejsdouble(fid,[modelname '.inversion.maxiter'],self.maxiter);
++			writejsdouble(fid,[modelname '.inversion.dxmin'],self.dxmin);
++			writejsdouble(fid,[modelname '.inversion.gttol'],self.gttol);
++			writejs2Darray(fid,[modelname '.inversion.cost_functions'],self.cost_functions);
++			writejs2Darray(fid,[modelname '.inversion.cost_functions_coefficients'],self.cost_functions_coefficients);
++			writejs1Darray(fid,[modelname '.inversion.min_parameters'],self.min_parameters);
++			writejs1Darray(fid,[modelname '.inversion.max_parameters'],self.max_parameters);
++			writejs1Darray(fid,[modelname '.inversion.vx_obs'],self.vx_obs);
++			writejs1Darray(fid,[modelname '.inversion.vy_obs'],self.vy_obs);
++			writejs1Darray(fid,[modelname '.inversion.vz_obs'],self.vz_obs);
++			writejs1Darray(fid,[modelname '.inversion.vel_obs'],self.vel_obs);
++			writejs1Darray(fid,[modelname '.inversion.thickness_obs'],self.thickness_obs);
++			writejs1Darray(fid,[modelname '.inversion.surface_obs'],self.surface_obs);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp	(revision 22442)
++++ ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp	(revision 22443)
+@@ -46,7 +46,7 @@
+ 			case 1: solutioncore=controltao_core; break;
+ 			case 2: solutioncore=controlm1qn3_core; break;
+ 			case 3: solutioncore=controlvalidation_core; break;
+-			case 4: solutioncore=controlad_core; break;
++			case 4: solutioncore=controladm1qn3_core; break;
+ 			default: _error_("control type not supported");
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/cores/cores.h
+===================================================================
+--- ../trunk-jpl/src/c/cores/cores.h	(revision 22442)
++++ ../trunk-jpl/src/c/cores/cores.h	(revision 22443)
+@@ -29,6 +29,7 @@
+ void control_core(FemModel* femmodel);
+ void controltao_core(FemModel* femmodel);
+ void controlm1qn3_core(FemModel* femmodel);
++void controladm1qn3_core(FemModel* femmodel);
+ void controlad_core(FemModel* femmodel);
+ void controlvalidation_core(FemModel* femmodel);
+ void masstransport_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22442)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22443)
+@@ -101,7 +101,7 @@
+ 				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.inversion.control_scaling_factors");
+ 				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls));
+ 				break;
+-			case 4:/*M1QN3 AD*/
++			case 4:/*AD M1QN3*/
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.dxmin",InversionDxminEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxsteps",InversionMaxstepsEnum));
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22442)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22443)
+@@ -282,6 +282,7 @@
+ 					./cores/controltao_core.cpp\
+ 					./cores/controlad_core.cpp\
+ 					./cores/controlm1qn3_core.cpp\
++					./cores/controladm1qn3_core.cpp\
+ 					./cores/controlvalidation_core.cpp\
+ 					./cores/adjointstressbalance_core.cpp\
+ 					./cores/adjointbalancethickness_core.cpp\
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22442)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22443)
+@@ -1,4 +1,4 @@
+-/*!\file: controlm1qn3_core.cpp
++/*!\file: controladm1qn3_core.cpp
+  * \brief: core of the control solution 
+  */ 
+ 
+@@ -314,7 +314,7 @@
+ 	xDelete<IssmPDouble>(totalgradient);
+ 
+ }/*}}}*/
+-void controlm1qn3_core(FemModel* femmodel){/*{{{*/
++void controladm1qn3_core(FemModel* femmodel){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	long         omode;
+@@ -466,5 +466,5 @@
+ }/*}}}*/
+ 
+ #else
+-void controlm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
++void controladm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
+ #endif //_HAVE_M1QN3_
Index: /issm/oecreview/Archive/21724-22754/ISSM-22443-22444.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22443-22444.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22443-22444.diff	(revision 22755)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22443)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22444)
+@@ -4,47 +4,40 @@
+ 
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+-CouplingTime=0
++Initialization (CouplingTime=0)
+ 1. ISSM sends CouplingTime=0 bed to MITgcm
+ 2. MITgcm integrates for CouplingTime=0:1
++3. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
+ 
+ CouplingTime=1
+-1. MITgcm sends time-mean melt rate for CouplingTime=0:1 to ISSM
+-2. ISSM sends CouplingTime=0 bed to MITgcm (it's duplicate of above)
+-3. ISSM integrates for CouplingTime=0:1
+-4. MITgcm integrates for CouplingTime=1:2
++1. ISSM sends CouplingTime=0 bed to MITgcm (this is duplicate of Initialization)
++2. ISSM integrates for CouplingTime=0:1
++3. MITgcm integrates for CouplingTime=1:2
++4. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
+ 
+-CouplingTime=2
+-1. MITgcm sends time-mean melt rate for CouplingTime=1:2 to ISSM
+-2. ISSM sends CouplingTime=1 bed to MITgcm
+-3. ISSM integrates for CouplingTime=1:2
+-4. MITgcm integrates for CouplingTime=2:3
+-
+ ...
+ 
+-CouplingTime=N-1
+-1. MITgcm sends time-mean melt rate for CouplingTime=(N-2):(N-1) to ISSM
+-2. ISSM sends CouplingTime=N-2 bed to MITgcm
+-3. ISSM integrates for CouplingTime=(N-2):(N-1)
+-4. MITgcm integrates for CouplingTime=(N-1):N
++CouplingTime=N
++1. ISSM sends CouplingTime=N-1 bed to MITgcm
++2. ISSM integrates for CouplingTime=(N-1):N
++3. MITgcm integrates for CouplingTime=N:(N+1)
++4. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
+ 
+-CouplingTime=N (restart files are saved here)
+-1. MITgcm sends time-mean melt rate for CouplingTime=(N-1):N to ISSM
+-2. MITgcm saves CouplingTime=N MITgcm state
+-3. ISSM saves CouplingTime=N-1 ISSM state and CouplingTime=(N-1):N melt rate
++Termination (CouplingTime=N+1)
++1. ISSM saves CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
++2. MITgcm saves CouplingTime=N+1 MITgcm state
+ 
+ 
+ >>>> RESTART FROM SAVED STATE
+ 
+-CouplingTime=N
+-1. ISSM sends CouplingTime=N-1 bed to MITgcm
+-2. ISSM integrates for CouplingTime=(N-1):N
+-3. MITgcm integrates for CouplingTime=N:(N+1)
++Initialization (CouplingTime=N+1)
++1. ISSM reads CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
++2. MITgcm reads CouplingTime=N+1 MITgcm state
+ 
+ CouplingTime=N+1
+-1. MITgcm sends time-mean melt rate for CouplingTime=N:(N+1) to ISSM
+-2. ISSM sends CouplingTime=N bed to MITgcm
+-3. ISSM integrates for CouplingTime=N:(N+1)
+-4. MITgcm integrates for CouplingTime=(N+1):(N+2)
++1. ISSM sends CouplingTime=N bed to MITgcm
++2. ISSM integrates for CouplingTime=N:(N+1)
++3. MITgcm integrates for CouplingTime=(N+1):(N+2)
++4. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
+ 
+ ...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22444-22445.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22444-22445.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22444-22445.diff	(revision 22755)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22444)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22445)
+@@ -10,8 +10,7 @@
+ #include "../modules/modules.h"
+ #include "../solutionsequences/solutionsequences.h"
+ 
+-#if defined (_HAVE_M1QN3_) 
+-//& !defined(_HAVE_ADOLC_)
++#if defined (_HAVE_M1QN3_) && defined(_HAVE_ADOLC_)
+ /*m1qn3 prototypes*/
+ extern "C" void *ctonbe_; // DIS mode : Conversion
+ extern "C" void *ctcabe_; // DIS mode : Conversion
+@@ -466,5 +465,5 @@
+ }/*}}}*/
+ 
+ #else
+-void controladm1qn3_core(FemModel* femmodel){_error_("M1QN3 not installed");}
++void controladm1qn3_core(FemModel* femmodel){_error_("M1QN3 or ADOLC not installed");}
+ #endif //_HAVE_M1QN3_
+Index: ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22444)
++++ ../trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 22445)
+@@ -10,7 +10,7 @@
+ #include "../modules/modules.h"
+ #include "../solutionsequences/solutionsequences.h"
+ 
+-#if defined (_HAVE_M1QN3_) & !defined(_HAVE_ADOLC_)
++#if defined (_HAVE_M1QN3_) && !defined(_HAVE_ADOLC_)
+ /*m1qn3 prototypes*/
+ extern "C" void *ctonbe_; // DIS mode : Conversion
+ extern "C" void *ctcabe_; // DIS mode : Conversion
Index: /issm/oecreview/Archive/21724-22754/ISSM-22445-22446.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22445-22446.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22445-22446.diff	(revision 22755)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22445)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22446)
+@@ -553,6 +553,59 @@
+ 
+ 			return md;
+ 		} /*}}}*/
++		this.deepCopy = function(md) { //{{{
++			/*
++			 *DEEPCOPY - returns a deep copy of the model.
++			 *
++			 *   This routine creates a new model with new objects 
++			 *   for each corresponding object in the original model,
++			 *   so that changes in one do not affect the other.
++			 *
++			 *   Usage:
++			 *	 md1=deepCopy(md)
++			 *
++			 */
++			var md1;
++
++			switch (typeof obj) {
++				case "object":
++					if (obj === null) {
++						// null => null
++						md1 = null;
++					} else {
++						switch (toString.call(obj)) {
++							case "[object Array]":
++								// It's an array, create a new array with
++								// deep copies of the entries
++								md1 = obj.map(deepCopy);
++								break;
++							case "[object Date]":
++								// Clone the date
++								md1 = new Date(obj);
++								break;
++							case "[object RegExp]":
++								// Clone the RegExp
++								md1 = new RegExp(obj);
++								break;
++							// ...probably a few others
++							default:
++								// Some other kind of object, deep-copy its
++								// properties into a new object
++								md1 = Object.keys(obj).reduce(function(prev, key) {
++									prev[key] = deepCopy(obj[key]);
++									return prev;
++								}, {});
++								break;
++						}
++					}
++					break;
++				default:
++					// It's a primitive, copy via assignment
++					md1 = obj;
++					break;
++			}
++			return md1;
++		} /*}}}*/
+ 	//properties
+ 	// {{{
+ 		//Careful here: no other class should be used as default value this is a bug of matlab
Index: /issm/oecreview/Archive/21724-22754/ISSM-22446-22447.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22446-22447.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22446-22447.diff	(revision 22755)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22446)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22447)
+@@ -565,46 +565,39 @@
+ 			 *	 md1=deepCopy(md)
+ 			 *
+ 			 */
+-			var md1;
++			function recursiveDeepCopy(obj) {
++				var returnValue;
+ 
+-			switch (typeof obj) {
+-				case "object":
+-					if (obj === null) {
+-						// null => null
+-						md1 = null;
+-					} else {
+-						switch (toString.call(obj)) {
+-							case "[object Array]":
+-								// It's an array, create a new array with
+-								// deep copies of the entries
+-								md1 = obj.map(deepCopy);
+-								break;
+-							case "[object Date]":
+-								// Clone the date
+-								md1 = new Date(obj);
+-								break;
+-							case "[object RegExp]":
+-								// Clone the RegExp
+-								md1 = new RegExp(obj);
+-								break;
+-							// ...probably a few others
+-							default:
+-								// Some other kind of object, deep-copy its
+-								// properties into a new object
+-								md1 = Object.keys(obj).reduce(function(prev, key) {
+-									prev[key] = deepCopy(obj[key]);
+-									return prev;
+-								}, {});
+-								break;
++				switch (typeof obj) {
++					case "object":
++						if (obj === null) {
++							// null => null
++							returnValue = null;
++						} else {
++							switch (toString.call(obj)) {
++								case "[object Array]":
++									// It's an array, create a new array with deep copies of the entries
++									returnValue = obj.map(recursiveDeepCopy);
++									break;
++								default:
++									// Some other kind of object, deep-copy its properties into a new object
++									returnValue = Object.keys(obj).reduce(function(prev, key) {
++										prev[key] = recursiveDeepCopy(obj[key]);
++										return prev;
++									}, {});
++									break;
++							}
+ 						}
+-					}
+-					break;
+-				default:
+-					// It's a primitive, copy via assignment
+-					md1 = obj;
+-					break;
++						break;
++					default:
++						// It's a primitive, copy via assignment
++						returnValue = obj;
++						break;
++				}
++				return returnValue;
+ 			}
+-			return md1;
++			
++			return recursiveDeepCopy(md);
+ 		} /*}}}*/
+ 	//properties
+ 	// {{{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22447-22448.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22447-22448.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22447-22448.diff	(revision 22755)
@@ -0,0 +1,635 @@
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 22447)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 22448)
+@@ -21,7 +21,7 @@
+ 				 IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, IssmDouble signorm, 
+ 				 IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,IssmDouble s0t,
+ 				 IssmDouble s0p, IssmDouble rlaps, IssmDouble rlapslgm,
+-				 IssmDouble TdiffTime,IssmDouble sealevTime,
++				 IssmDouble TdiffTime,IssmDouble sealevTime,IssmDouble pddsnowfac,IssmDouble pddicefac,
+ 				 IssmDouble rho_water, IssmDouble rho_ice);
+ void ComputeDelta18oTemperaturePrecipitation(IssmDouble Delta18oSurfacePresent, IssmDouble Delta18oSurfaceLgm, IssmDouble Delta18oSurfaceTime,
+ 					     IssmDouble Delta18oPresent, IssmDouble Delta18oLgm, IssmDouble Delta18oTime,
+Index: ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 22448)
+@@ -3,6 +3,7 @@
+    Updating the precipitation and temperature to the new elevation
+  */
+ 
++#include "../io/io.h"
+ #include "./elements.h"
+ #include "../Numerics/numerics.h"
+ 
+@@ -10,7 +11,7 @@
+ 				 IssmDouble* pdds, IssmDouble* pds, IssmDouble* melt, IssmDouble* accu, 
+ 				 IssmDouble signorm, IssmDouble yts, IssmDouble h, IssmDouble s, IssmDouble desfac,
+ 				 IssmDouble s0t,IssmDouble s0p, IssmDouble rlaps,IssmDouble rlapslgm,
+-				 IssmDouble TdiffTime,IssmDouble sealevTime,
++				 IssmDouble TdiffTime,IssmDouble sealevTime, IssmDouble pddsnowfac,IssmDouble pddicefac,
+ 				 IssmDouble rho_water,IssmDouble rho_ice){
+ 
+   // output:
+@@ -66,6 +67,8 @@
+   IssmDouble supice,supcap,diffndd;
+   IssmDouble fsupT=0.5,  fsupndd=0.5;  // Tsurf mode factors for supice
+   IssmDouble pddtj, hmx2;
++  IssmDouble pddsnowfac0=4.3, pddicefac0=8.3;
++  IssmDouble snowfac, icefac;
+ 
+   sconv=(rho_water/rho_ice)/12.; //rhow_rain/rhoi / 12 months
+ 
+@@ -127,19 +130,38 @@
+   saccu = qm;
+   prect = qmp;     // total precipitation during 1 year taking into account des. ef.
+   Tsum=Tsum/3;
++
++  snowfac=pddsnowfac0;
++  icefac=pddicefac0;
++  if (pddsnowfac>=0) {
++	  if (pddsnowfac<1.65) {
++		  _printf0_("WARNING: Pdd snow factor input, " << pddsnowfac << ", results in a negative value. It will be ignored. \n");
++	  }
++	  else{
++		snowfac=pddsnowfac;
++	  }
++  }
++  if (pddicefac>=0) {
++	  if (pddicefac>17.22) {
++		  _printf0_("WARNING: Pdd ice factor input, " << pddsnowfac << ", results in a negative value. It will be ignored. \n");
++	  }
++	  else{
++	    icefac=pddicefac;
++	  }
++  }
+   
+   /***** determine PDD factors *****/
+   if(Tsum< -1.) {
+-    snwmf=2.65*0.001;   //  ablation factor for snow per positive degree day.*0.001 to go from mm to m/ppd
++    snwmf=(2.65+snowfac-pddsnowfac0)*0.001;   //  ablation factor for snow per positive degree day.*0.001 to go from mm to m/ppd
+     smf=17.22*0.001;    //  ablation factor for ice per pdd (Braithwaite 1995 from tarasov 2002)
+   } 
+   else if(Tsum< 10){
+-    snwmf = (0.15*Tsum + 2.8)*0.001;
+-    smf = (0.0067*pow((10.-Tsum),3) + 8.3)*0.001;
++    snwmf = (0.15*(Tsum+1) + (2.65+snowfac-pddsnowfac0))*0.001;
++    smf = (((icefac-pddicefac0)/(Tsum+1))*pow((10.-Tsum),3) + pddicefac0)*0.001;
+   }
+   else{
+-    snwmf=4.3*0.001;
+-    smf=8.3*0.001;
++    snwmf=snowfac*0.001;
++    smf=icefac*0.001;
+   }
+   snwmf=0.95*snwmf;
+   smf=0.95*smf;
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 22448)
+@@ -187,6 +187,7 @@
+ 	IssmDouble tstar; // monthly mean surface temp
+ 
+ 	bool ismungsm;
++	bool issetpddfac;
+ 
+ 	IssmDouble *pdds    = NULL;
+ 	IssmDouble *pds     = NULL;
+@@ -198,6 +199,9 @@
+ 	// Get ismungsm parameter
+ 	femmodel->parameters->FindParam(&ismungsm,SmbIsmungsmEnum);
+ 
++	// Get issetpddfac parameter
++	femmodel->parameters->FindParam(&issetpddfac,SmbIssetpddfacEnum);
++
+ 	/* initialize PDD (creation of a lookup table)*/
+ 	tstep    = 0.1;
+ 	tsint    = tstep*0.5;
+@@ -252,7 +256,7 @@
+ 
+ 	for(i=0;i<femmodel->elements->Size();i++){
+ 		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->PositiveDegreeDay(pdds,pds,signorm,ismungsm);
++		element->PositiveDegreeDay(pdds,pds,signorm,ismungsm,issetpddfac);
+ 	}
+ 	/*free ressouces: */
+ 	xDelete<IssmDouble>(pdds);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22447)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22448)
+@@ -139,7 +139,7 @@
+ 		ElementMatrix*     NewElementMatrix(int approximation_enum=NoneApproximationEnum);
+ 		ElementMatrix*     NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
+ 		ElementVector*     NewElementVector(int approximation_enum=NoneApproximationEnum);
+-		void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm);
++		void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
+ 		IssmDouble         PureIceEnthalpy(IssmDouble pressure);
+ 		void               ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
+ 		void               ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum);
+Index: ../trunk-jpl/src/m/classes/SMBd18opdd.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 22447)
++++ ../trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 22448)
+@@ -16,10 +16,13 @@
+ 		sealev                    = NaN;
+ 		ismungsm                  = 0;
+ 		isd18opd                  = 0;
++		issetpddfac               = 0;
+ 		delta18o                  = NaN;
+ 		delta18o_surface          = NaN;
+ 		temperatures_presentday   = NaN;
+ 		precipitations_presentday = NaN;
++		pddfac_snow               = NaN;
++		pddfac_ice                = NaN;
+ 		requested_outputs      = {};
+ 	end
+ 	methods
+@@ -34,11 +37,13 @@
+ 		function self = extrude(self,md) % {{{
+ 			if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
+ 			if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
++			if(self.issetpddfac), self.pddfac_snow=project3d(md,'vector',self.pddfac_snow,'type','node');end
++			if(self.issetpddfac), self.pddfac_ice=project3d(md,'vector',self.pddfac_ice,'type','node');end
+ 			self.s0p=project3d(md,'vector',self.s0p,'type','node');
+ 			self.s0t=project3d(md,'vector',self.s0t,'type','node');
+ 
+ 		end % }}}
+-			function list = defaultoutputs(self,md) % {{{
++	 function list = defaultoutputs(self,md) % {{{
+ 
+ 			list = {''};
+ 
+@@ -64,6 +69,7 @@
+ 		  self.rlapslgm   = 6.5;
+ 		  self.dpermil    = 2.4;
+ 		  self.f          = 0.169;
++		  self.issetpddfac = 0;
+                   
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+@@ -85,6 +91,10 @@
+ 					md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',1);
+ 				   md = checkfield(md,'fieldname','smb.f','>=',0,'numel',1);
+ 				end
++				if(self.issetpddfac==1)
++					md = checkfield(md,'fieldname','smb.pddfac_snow','>=',0,'NaN',1,'Inf',1);
++					md = checkfield(md,'fieldname','smb.pddfac_ice','>=',0,'NaN',1,'Inf',1);
++				end
+ 			end
+ 			md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);
+ 		end % }}}
+@@ -93,6 +103,7 @@
+ 
+ 			disp(sprintf('\n   PDD and deltaO18 parameters:'));
+ 			fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)');
++			fielddisplay(self,'issetpddfac','is user passing in defined pdd factors at each vertex (0 or 1, default is 0)');
+ 			fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
+ 			fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
+ 			fielddisplay(self,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]');
+@@ -104,6 +115,10 @@
+ 				fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated');                            
+ 			   fielddisplay(self,'f','precip/temperature scaling factor, required if d18opd is activated');
+ 			end
++			if(self.issetpddfac==1)
++				fielddisplay(self,'pddfac_snow','Pdd factor for snow, at each vertex [mm ice equiv/day/degree C]');
++				fielddisplay(self,'pddfac_ice','Pdd factor for ice, at each vertex [mm ice equiv/day/degree C]');
++			end
+ 			fielddisplay(self,'requested_outputs','additional outputs requested');
+ 			% No need to display rlapslgm, Tdiff, ismungsm
+ 			% as they are not used in this case but are still needed as default values in
+@@ -117,6 +132,7 @@
+ 
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+@@ -132,6 +148,10 @@
+ 				WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double');
+ 			   WriteData(fid,prefix,'object',self,'class','smb','fieldname','f','format','Double');
+ 			end
++			if self.issetpddfac==1
++				WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_snow','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++				WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_ice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++			end
+ 			
+ 			%process requested outputs
+ 			outputs = self.requested_outputs;
+Index: ../trunk-jpl/src/m/classes/SMBd18opdd.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 22447)
++++ ../trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 22448)
+@@ -24,10 +24,13 @@
+ 		self.sealev                    = float('NaN')
+ 		self.ismungsm                  = 0
+ 		self.isd18opd                  = 0
++		self.setpddfac                 = 0
+ 		self.delta18o                  = float('NaN')
+ 		self.delta18o_surface          = float('NaN')
+ 		self.temperatures_presentday   = float('NaN')
+ 		self.precipitations_presentday = float('NaN')
++		self.pddfac_snow               = float('NaN')
++		self.pddfac_ice                = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -37,6 +40,7 @@
+ 		string="   surface forcings parameters:"
+ 
+ 		string="%s\n%s"%(string,fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)'))
++		string="%s\n%s"%(string,fielddisplay(self,'issetpddfac','is user passing in defined pdd factors at each vertex (0 or 1, default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]'))
+@@ -46,6 +50,10 @@
+ 			string="%s\n%s"%(string,fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'delta18o','delta18o [per mil], required if pdd is activated and delta18o activated'))
+ 			string="%s\n%s"%(string,fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated'))
++
++		if self.issetpddfac==1:
++			string="%s\n%s"%(string,fielddisplay(self,'pddfac_snow','Pdd factor for snow, at each vertex [mm ice equiv/day/degree C]'))
++			string="%s\n%s"%(string,fielddisplay(self,'pddfac_ice','Pdd factor for ice, at each vertex [mm ice equiv/day/degree C]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 
+ 		return string
+@@ -54,6 +62,8 @@
+ 
+ 		if self.isd18opd: self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node')
+ 		if self.isd18opd: self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node')
++		if self.issetpddfac: self.pddfac_snow=project3d(md,'vector',self.pddfac_snow,'type','node')
++		if self.issetpddfac: self.pddfac_ice=project3d(md,'vector',self.pddfac_ice,'type','node')
+ 		self.s0p=project3d(md,'vector',self.s0p,'type','node')
+ 		self.s0t=project3d(md,'vector',self.s0t,'type','node')
+ 
+@@ -84,6 +94,7 @@
+ 		self.rlapslgm   = 6.5
+ 		self.dpermil    = 2.4
+ 		self.f          = 0.169
++		self.issetpddfac = 0
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -106,6 +117,10 @@
+ 				md = checkfield(md,'fieldname','smb.dpermil','>=',0,'numel',[1])
+ 				md = checkfield(md,'fieldname','smb.f','>=',0,'numel',[1])
+ 
++			if self.issetpddfac:
++				md = checkfield(md,'fieldname','smb.pddfac_snow','>=',0,'NaN',1,'Inf',1)
++				md = checkfield(md,'fieldname','smb.pddfac_ice','>=',0,'NaN',1,'Inf',1)
++
+ 		md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1)
+ 
+ 		return md
+@@ -118,6 +133,7 @@
+ 
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+@@ -132,6 +148,11 @@
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double')
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','f','format','Double')
++
++		if self.issetpddfac:
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_snow','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','pddfac_ice','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
++
+ 		#process requested outputs
+ 		outputs = self.requested_outputs
+ 		indices = [i for i, x in enumerate(outputs) if x == 'default']
+Index: ../trunk-jpl/src/m/classes/SMBpdd.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBpdd.py	(revision 22447)
++++ ../trunk-jpl/src/m/classes/SMBpdd.py	(revision 22448)
+@@ -25,6 +25,7 @@
+ 		self.sealev                    = float('NaN')
+ 		self.isdelta18o                = 0
+ 		self.ismungsm                  = 0
++		self.issetpddfac               = 0
+ 		self.delta18o                  = float('NaN')
+ 		self.delta18o_surface          = float('NaN')
+ 		self.temperatures_presentday   = float('NaN')
+@@ -155,6 +156,7 @@
+ 
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+Index: ../trunk-jpl/src/m/classes/SMBpdd.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBpdd.m	(revision 22447)
++++ ../trunk-jpl/src/m/classes/SMBpdd.m	(revision 22448)
+@@ -17,6 +17,7 @@
+ 		sealev                    = NaN;
+ 		isdelta18o                = 0;
+ 		ismungsm                  = 0;
++		issetpddfac               = 0;
+ 		delta18o                  = NaN;
+ 		delta18o_surface          = NaN;
+ 		temperatures_presentday   = NaN;
+@@ -147,6 +148,7 @@
+ 			WriteData(fid,prefix,'name','md.smb.model','data',4,'format','Integer');
+ 
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','issetpddfac','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22447)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22448)
+@@ -473,6 +473,7 @@
+ 	SmbDelta18oEnum,
+ 	SmbDelta18oSurfaceEnum,
+ 	SmbIsdelta18oEnum,
++	SmbIssetpddfacEnum,
+ 	SmbIsmungsmEnum,
+ 	SmbIsd18opdEnum,
+ 	SmbPrecipitationsPresentdayEnum,
+@@ -480,6 +481,8 @@
+ 	SmbTemperaturesPresentdayEnum,
+ 	SmbTemperaturesLgmEnum,
+ 	SmbPrecipitationEnum,
++	SmbPddfacSnowEnum,
++	SmbPddfacIceEnum,
+ 	SmbDesfacEnum,
+ 	SmbS0pEnum,
+ 	SmbS0tEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22448)
+@@ -474,6 +474,7 @@
+ 		case SmbDelta18oEnum : return "SmbDelta18o";
+ 		case SmbDelta18oSurfaceEnum : return "SmbDelta18oSurface";
+ 		case SmbIsdelta18oEnum : return "SmbIsdelta18o";
++		case SmbIssetpddfacEnum : return "SmbIssetpddfac";
+ 		case SmbIsmungsmEnum : return "SmbIsmungsm";
+ 		case SmbIsd18opdEnum : return "SmbIsd18opd";
+ 		case SmbPrecipitationsPresentdayEnum : return "SmbPrecipitationsPresentday";
+@@ -481,6 +482,8 @@
+ 		case SmbTemperaturesPresentdayEnum : return "SmbTemperaturesPresentday";
+ 		case SmbTemperaturesLgmEnum : return "SmbTemperaturesLgm";
+ 		case SmbPrecipitationEnum : return "SmbPrecipitation";
++		case SmbPddfacSnowEnum : return "SmbPddfacSnow";
++		case SmbPddfacIceEnum : return "SmbPddfacIce";
+ 		case SmbDesfacEnum : return "SmbDesfac";
+ 		case SmbS0pEnum : return "SmbS0p";
+ 		case SmbS0tEnum : return "SmbS0t";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22448)
+@@ -483,6 +483,7 @@
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+ 	      else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum;
++	      else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
+ 	      else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
+ 	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
+ 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
+@@ -490,6 +491,8 @@
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+ 	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
++	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
++	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+ 	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
+ 	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
+ 	      else if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum;
+@@ -502,13 +505,13 @@
+ 	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+ 	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
+-	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+-	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+-	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
++	      if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
++	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
++	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
++	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+ 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+@@ -625,13 +628,13 @@
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+-	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+-	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"J")==0) return JEnum;
++	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
++	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
++	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+ 	      else if (strcmp(name,"Step")==0) return StepEnum;
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+@@ -748,13 +751,13 @@
+ 	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
++	      if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
++	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
++	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
++	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+@@ -871,13 +874,13 @@
+ 	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+-	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+-	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+-	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
++	      if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
++	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
++	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
++	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+ 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+ 	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+ 	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+@@ -994,13 +997,13 @@
+ 	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+ 	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+ 	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
+-	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+-	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+-	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
++	      if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
++	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
++	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
++	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+@@ -1117,13 +1120,13 @@
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+-	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+-	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+-	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Vertices")==0) return VerticesEnum;
++	      if (strcmp(name,"Nodes")==0) return NodesEnum;
++	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
++	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
++	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+ 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
+          else stage=11;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22448)
+@@ -2127,7 +2127,7 @@
+ 	return new ElementVector(nodes,this->GetNumberOfNodes(),this->parameters,approximation_enum);
+ }
+ /*}}}*/
+-void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm){/*{{{*/
++void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac){/*{{{*/
+ 
+ 	int  numvertices = this->GetNumberOfVertices();
+ 
+@@ -2143,6 +2143,8 @@
+ 	IssmDouble* s=xNew<IssmDouble>(numvertices);
+ 	IssmDouble* s0p=xNew<IssmDouble>(numvertices);
+ 	IssmDouble* s0t=xNew<IssmDouble>(numvertices);
++	IssmDouble pddsnowfac = -1.;
++	IssmDouble pddicefac = -1.;
+ 	IssmDouble rho_water,rho_ice,desfac,rlaps,rlapslgm;
+ 	IssmDouble PfacTime,TdiffTime,sealevTime;
+ 	IssmDouble mavg=1./12.; //factor for monthly average
+@@ -2189,6 +2191,14 @@
+ 		sealevTime=0;
+ 	}
+ 
++	/*Recover pdd factors at time t. 
++	 *     This parameter is set, if the user wants to define the 
++	 *     pdd factors regionally, if issetpddfac==1 in the d18opdd method */
++	if (issetpddfac==1){
++		input=this->GetInput(SmbPddfacSnowEnum); _assert_(input);
++		input2=this->GetInput(SmbPddfacIceEnum); _assert_(input2);
++	}
++
+ 	/*Recover info at the vertices: */
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+@@ -2197,10 +2207,15 @@
+ 
+ 	/*measure the surface mass balance*/
+ 	for (int iv = 0; iv<numvertices; iv++){
++		gauss->GaussVertex(iv);
++		pddsnowfac=-1.;
++		pddicefac=-1.;
++		input->GetInputValue(&pddsnowfac,gauss);
++		input2->GetInputValue(&pddicefac,gauss);
+ 		agd[iv]=PddSurfaceMassBalance(&monthlytemperatures[iv*12], &monthlyprec[iv*12],
+ 					pdds, pds, &melt[iv], &accu[iv], signorm, yts, h[iv], s[iv],
+ 					desfac, s0t[iv], s0p[iv],rlaps,rlapslgm,TdiffTime,sealevTime,
+-					rho_water,rho_ice);
++					pddsnowfac,pddicefac,rho_water,rho_ice);
+ 		/*Get yearlytemperatures */
+ 		for(int month=0;month<12;month++) {
+ 			yearlytemperatures[iv]=yearlytemperatures[iv]+(monthlytemperatures[iv*12+month]+273.15)*mavg; // Has to be in Kelvin
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22447)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22448)
+@@ -20,7 +20,7 @@
+ void SmbAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 	
+ 	int    smb_model;
+-	bool   isdelta18o,ismungsm,isd18opd;
++	bool   isdelta18o,ismungsm,isd18opd,issetpddfac;
+ 	
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -89,6 +89,7 @@
+ 		case SMBd18opddEnum:
+ 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+ 			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
++			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
+ 			iomodel->FetchDataToInput(elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+ 			iomodel->FetchDataToInput(elements,"md.smb.s0p",SmbS0pEnum);
+ 			iomodel->FetchDataToInput(elements,"md.smb.s0t",SmbS0tEnum);
+@@ -96,7 +97,10 @@
+ 				iomodel->FetchDataToInput(elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
+ 				iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
+ 			}
+-
++			if(issetpddfac){
++				iomodel->FetchDataToInput(elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
++				iomodel->FetchDataToInput(elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
++			}
+ 			break;
+ 		case SMBgradientsEnum:
+ 			iomodel->FetchDataToInput(elements,"md.smb.href",SmbHrefEnum);
+@@ -136,7 +140,7 @@
+ 
+ 	int     numoutputs;
+ 	char**  requestedoutputs = NULL;
+-	bool    isdelta18o,ismungsm,isd18opd,interp;
++	bool    isdelta18o,ismungsm,isd18opd,issetpddfac,interp;
+ 	int     smb_model;
+ 	IssmDouble *temp = NULL;
+ 	int         N,M;
+@@ -175,6 +179,7 @@
+ 		case SMBpddEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+@@ -207,11 +212,13 @@
+ 		case SMBd18opddEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isd18opd",SmbIsd18opdEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+ 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+ 			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
++			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
+ 			if(isd18opd){
+ 				iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2);
+ 				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
Index: /issm/oecreview/Archive/21724-22754/ISSM-22448-22449.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22448-22449.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22448-22449.diff	(revision 22755)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 22448)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 22449)
+@@ -10,8 +10,14 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_names     ={...
++	'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1',...
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2',...
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
++field_tolerances={...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 22448)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 22449)
+@@ -21,7 +21,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22449-22450.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22449-22450.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22449-22450.diff	(revision 22755)
@@ -0,0 +1,623 @@
+Index: ../trunk-jpl/src/m/classes/SMBgemb.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22449)
++++ ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22450)
+@@ -35,6 +35,10 @@
+ 		C     = NaN; %mean annual snow accumulation [kg m-2 yr-1]
+ 		Tz    = NaN; %height above ground at which temperature (T) was sampled [m]
+ 		Vz    = NaN; %height above ground at which wind (V) eas sampled [m]
++
++		%optional inputs:
++		aValue = NaN; %Albedo forcing at every element.  Used only if aIdx == 0.
++		teValue = NaN; %Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)
+         
+ 		% Initialization of snow properties
+ 		Dzini = NaN; %cell depth (m)
+@@ -50,7 +54,8 @@
+ 
+ 		%settings: 
+ 		aIdx   = NaN; %method for calculating albedo and subsurface absorption (default is 1)
+-		              % 1: effective grain radius [Gardner & Sharp, 2009]
++		           % 0: direct input from aValue parameter
++		           % 1: effective grain radius [Gardner & Sharp, 2009]
+ 					  % 2: effective grain radius [Brun et al., 2009]
+ 					  % 3: density and cloud amount [Greuell & Konzelmann, 1994]
+ 					  % 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
+@@ -114,6 +119,14 @@
+ 			self.eAir=project3d(md,'vector',self.eAir,'type','node');
+ 			self.pAir=project3d(md,'vector',self.pAir,'type','node');
+ 
++			if aIdx == 0 & ~isnan(self.aValue)
++				self.aValue=project3d(md,'vector',self.aValue,'type','node');
++			end
++			if ~isnan(self.teValue)
++				self.teValue=project3d(md,'vector',self.teValue,'type','node');
++			end
++
++
+ 		end % }}}
+ 		function list = defaultoutputs(self,md) % {{{
+ 			list = {'SmbMassBalance'};
+@@ -149,6 +162,9 @@
+ 		self.t0wet = 15;
+ 		self.t0dry = 30;
+ 		self.K = 7;
++
++		self.teValue = ones(mesh.numberofelements,1);
++		self.aValue = self.aSnow*ones(mesh.numberofelements,1);
+         
+ 		self.Dzini=0.05*ones(mesh.numberofelements,2);
+ 		self.Dini=910.0*ones(mesh.numberofelements,2); 
+@@ -166,7 +182,6 @@
+ 		end % }}}
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+-
+ 			md = checkfield(md,'fieldname','smb.isgraingrowth','values',[0 1]);
+ 			md = checkfield(md,'fieldname','smb.isalbedo','values',[0 1]);
+ 			md = checkfield(md,'fieldname','smb.isshortwave','values',[0 1]);
+@@ -188,7 +203,9 @@
+ 			md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000); 
+ 			md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000); 
+ 
+-			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[1,2,3,4]);
++			md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
++
++			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4]);
+ 			md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]);
+ 			md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]);
+ 
+@@ -200,6 +217,8 @@
+ 			md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
+ 
+ 			switch self.aIdx,
++				case 0
++					md = checkfield(md,'fieldname','smb.aValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
+ 				case {1 2}
+ 					md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'>=',.64,'<=',.89);
+ 					md = checkfield(md,'fieldname','smb.aIce','NaN',1,'Inf',1,'>=',.27,'<=',.58);
+@@ -251,13 +270,16 @@
+ 			fielddisplay(self,'InitDensityScaling',{'initial scaling factor multiplying the density of ice','which describes the density of the snowpack.'});
+ 			fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)');
+ 			fielddisplay(self,'aIdx',{'method for calculating albedo and subsurface absorption (default is 1)',...
++				               '0: direct input from aValue parameter',...
+ 									'1: effective grain radius [Gardner & Sharp, 2009]',...
+ 									'2: effective grain radius [Brun et al., 2009]',...
+ 									'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
+ 									'4: exponential time decay & wetness [Bougamont & Bamber, 2005]'});
++
++			fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)');
+                                 
+ 			%snow properties init
+-			fielddisplay(self,'Dzini','Initial cel depth when restart [m]');
++			fielddisplay(self,'Dzini','Initial cell depth when restart [m]');
+ 			fielddisplay(self,'Dini','Initial snow density when restart [kg m-3]');
+ 			fielddisplay(self,'Reini','Initial grain size when restart [mm]');
+ 			fielddisplay(self,'Gdnini','Initial grain dendricity when restart [-]');
+@@ -271,6 +293,8 @@
+             
+ 			%additional albedo parameters: 
+ 			switch self.aIdx
++			case 0
++				fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.');
+ 			case {1 2}
+ 				fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)');
+ 				fielddisplay(self,'aIce','albedo of ice (0.27-0.58)');
+@@ -338,6 +362,9 @@
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0wet','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double');
++
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','teValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+             
+ 			%snow properties init
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Dzini','format','DoubleMat','mattype',3);
+Index: ../trunk-jpl/src/m/classes/SMBgemb.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.py	(revision 22449)
++++ ../trunk-jpl/src/m/classes/SMBgemb.py	(revision 22450)
+@@ -41,6 +41,10 @@
+ 		C     = float('NaN')	#mean annual snow accumulation [kg m-2 yr-1]
+ 		Tz    = float('NaN')	#height above ground at which temperature (T) was sampled [m]
+ 		Vz    = float('NaN')	#height above ground at which wind (V) eas sampled [m]
++
++		#optional inputs:
++		aValue  = float('NaN') #Albedo forcing at every element.  Used only if aIdx == 0.
++		teValue = float('NaN') #Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)
+         
+ 		# Initialization of snow properties
+ 		Dzini = float('NaN')	#cell depth (m)
+@@ -56,7 +60,8 @@
+ 
+ 		#settings: 
+ 		aIdx   = float('NaN')	#method for calculating albedo and subsurface absorption (default is 1)
+-					# 1: effective grain radius [Gardner & Sharp, 2009]
++		           # 0: direct input from aValue parameter
++					  # 1: effective grain radius [Gardner & Sharp, 2009]
+ 					  # 2: effective grain radius [Brun et al., 2009]
+ 					  # 3: density and cloud amount [Greuell & Konzelmann, 1994]
+ 					  # 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
+@@ -134,13 +139,16 @@
+ 		string = "%s\n%s"%(string,fielddisplay(self,'InitDensityScaling',['initial scaling factor multiplying the density of ice','which describes the density of the snowpack.']))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'aIdx',['method for calculating albedo and subsurface absorption (default is 1)',
++			         '0: direct input from aValue parameter',
+ 						'1: effective grain radius [Gardner & Sharp, 2009]',
+ 						'2: effective grain radius [Brun et al., 2009]',
+ 						'3: density and cloud amount [Greuell & Konzelmann, 1994]',
+ 						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]']))
++
++		string = "%s\n%s"%(string,fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)'))
+                                
+ 		#snow properties init
+-		string = "%s\n%s"%(string,fielddisplay(self,'Dzini','Initial cel depth when restart [m]'))
++		string = "%s\n%s"%(string,fielddisplay(self,'Dzini','Initial cell depth when restart [m]'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'Dini','Initial snow density when restart [kg m-3]'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'Reini','Initial grain size when restart [mm]'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'Gdnini','Initial grain dricity when restart [-]'))
+@@ -155,6 +163,8 @@
+ 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
+ 			string = "%s\n%s"%(string,fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)'))
+ 			string = "%s\n%s"%(string,fielddisplay(self,'aIce','albedo of ice (0.27-0.58)'))
++		elif self.aIdx == 0:
++			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.'))
+ 		elif self.aIdx == 3:
+ 			string = "%s\n%s"%(string,fielddisplay(self,'cldFrac','average cloud amount'))
+ 		elif self.aIdx == 4:
+@@ -182,6 +192,12 @@
+ 		self.P = project3d(md,'vector',self.P,'type','node')
+ 		self.eAir = project3d(md,'vector',self.eAir,'type','node')
+ 		self.pAir = project3d(md,'vector',self.pAir,'type','node')
++
++		if aIdx == 0 and np.isnan(self.aValue):
++			self.aValue=project3d(md,'vector',self.aValue,'type','node');
++		if np.isnan(self.teValue):
++			self.teValue=project3d(md,'vector',self.teValue,'type','node');
++
+ 		return self
+ 	#}}}
+ 	def defaultoutputs(self,md): # {{{
+@@ -210,7 +226,7 @@
+ 		self.zMin = 130*np.ones((mesh.numberofelements,))
+ 		self.zY = 1.10*np.ones((mesh.numberofelements,))
+ 		self.outputFreq = 30
+-		
++
+ 		#additional albedo parameters
+ 		self.aSnow = 0.85
+ 		self.aIce = 0.48
+@@ -218,6 +234,9 @@
+ 		self.t0wet = 15
+ 		self.t0dry = 30
+ 		self.K = 7
++
++		self.teValue = np.ones((mesh.numberofelements,));
++		self.aValue = self.aSnow*np.ones(mesh.numberofelements,);
+         
+ 		self.Dzini = 0.05*np.ones((mesh.numberofelements,2))
+ 		self.Dini = 910.0*np.ones((mesh.numberofelements,2)) 
+@@ -256,7 +275,9 @@
+ 		md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'> = ',0,'< = ',5000) 
+ 		md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements],'NaN',1,'Inf',1,'> = ',0,'< = ',5000) 
+ 
+-		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[1,2,3,4])
++		md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
++
++		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4])
+ 		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1])
+ 		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5])
+ 
+@@ -270,6 +291,8 @@
+ 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
+ 			md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'> = ',.64,'< = ',.89)
+ 			md = checkfield(md,'fieldname','smb.aIce','NaN',1,'Inf',1,'> = ',.27,'< = ',.58)
++		elif self.aIdx == 0:
++			md = checkfield(md,'fieldname','smb.aValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
+ 		elif self.aIdx == 3:
+ 			md = checkfield(md,'fieldname','smb.cldFrac','NaN',1,'Inf',1,'> = ',0,'< = ',1)
+ 		elif self.aIdx == 4:
+@@ -332,6 +355,9 @@
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0wet','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double')
++
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','teValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+             
+ 		#snow properties init
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Dzini','format','DoubleMat','mattype',3)
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22449)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22450)
+@@ -68,6 +68,8 @@
+ 			iomodel->FetchDataToInput(elements,"md.smb.Aini",SmbAiniEnum);
+ 			iomodel->FetchDataToInput(elements,"md.smb.Tini",SmbTiniEnum);
+ 			iomodel->FetchDataToInput(elements,"md.smb.Sizeini",SmbSizeiniEnum);
++			iomodel->FetchDataToInput(elements,"md.smb.aValue",SmbAValueEnum);
++			iomodel->FetchDataToInput(elements,"md.smb.teValue",SmbTeValueEnum);
+ 			break;
+ 		case SMBpddEnum:
+ 			iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o");
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22449)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22450)
+@@ -24,10 +24,10 @@
+ void       GembgridInitialize(IssmDouble** pdz, int* psize, IssmDouble zTop, IssmDouble dzTop, IssmDouble zMax, IssmDouble zY); 
+ IssmDouble Marbouty(IssmDouble T, IssmDouble d, IssmDouble dT);
+ void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid);
+-void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
++void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
+ void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
+-void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
+-void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid); 
++void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
++void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx,IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid); 
+ void melt(IssmDouble* pM, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble dIce, int sid);
+ void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid);
+ void turbulentFlux(IssmDouble* pshf, IssmDouble* plhf, IssmDouble* pEC, IssmDouble Ta, IssmDouble Ts, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble ds, IssmDouble Ws, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22449)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22450)
+@@ -336,9 +336,10 @@
+ 	*pgsp=gsp;
+ 
+ }  /*}}}*/
+-void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
++void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
+ 
+ 	//// Calculates Snow, firn and ice albedo as a function of:
++	//   0 : direct input from aValue parameter
+ 	//   1 : effective grain radius (Gardner & Sharp, 2009)
+ 	//   2 : effective grain radius (Brun et al., 2009)
+ 	//   3 : density and cloud amount (Greuell & Konzelmann, 1994)
+@@ -347,6 +348,9 @@
+ 	//// Inputs
+ 	// aIdx      = albedo method to use
+ 
++	// Method 0
++	//  aValue   = direct input value for albedo
++
+ 	// Methods 1 & 2
+ 	//   re      = surface effective grain radius [mm]
+ 
+@@ -391,7 +395,10 @@
+ 	//some constants:
+ 	const IssmDouble dSnow = 300;   // density of fresh snow [kg m-3]       
+ 
+-	if(aIdx==1){ 
++	if (aIdx==0){
++		  for(int i=0;i<m;i++)a[i] = aValue;
++	}
++	else if(aIdx==1){ 
+         //function of effective grain radius
+         
+         //convert effective radius to specific surface area [cm2 g-1]
+@@ -399,6 +406,7 @@
+         
+         //determine broadband albedo
+         a[0]= 1.48 - pow(S,-0.07);
++		  for(int i=1;i<m;i++)a[i]=a[0];
+ 	}
+ 	else if(aIdx==2){
+ 		
+@@ -420,7 +428,7 @@
+         
+         // broadband surface albedo
+         a[0] = sF[0]*a0 + sF[1]*a1 + sF[2]*a2;
+-
++		  for(int i=1;i<m;i++)a[i]=a[0];
+ 	}
+ 	else if(aIdx==3){
+ 		
+@@ -428,6 +436,7 @@
+         
+         // calculate albedo
+         a[0] = aIce + (d[0] - dIce)*(aSnow - aIce) / (dSnow - dIce) + (0.05 * (cldFrac - 0.5));
++		  for(int i=1;i<m;i++)a[i]=a[0];
+ 	}
+ 	else if(aIdx==4){
+ 		
+@@ -485,7 +494,7 @@
+         xDelete<IssmDouble>(d_a);
+ 
+ 	}
+-	else _error_("albedo method switch should range from 1 to 4!");
++	else _error_("albedo method switch should range from 0 to 4!");
+ 	
+ 	// Check for erroneous values
+ 	if (a[0] > 1) _printf_("albedo > 1.0\n");
+@@ -496,7 +505,7 @@
+ 	*pa=a;
+ 
+ }  /*}}}*/
+-void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
++void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
+ 
+ 	/* ENGLACIAL THERMODYNAMICS*/
+ 	 
+@@ -807,7 +816,7 @@
+ 		dT_turb = turb  / TCs;
+ 
+ 		// upward longwave contribution
+-		ulw = - SB * pow(Ts,4.0) * dt;
++		ulw = - SB * pow(Ts,4.0)* teValue * dt;
+ 		dT_ulw = ulw / TCs;
+ 		
+ 		// new grid point temperature
+@@ -1068,7 +1077,7 @@
+ 	*pswf=swf;
+ 
+ } /*}}}*/ 
+-void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, IssmDouble T_air, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid){ /*{{{*/
++void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx, IssmDouble T_air, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid){ /*{{{*/
+ 
+ 	// Adds precipitation and deposition to the model grid
+ 
+@@ -1161,7 +1170,7 @@
+ 				T[0] = (T_air * P + T[0] * mInit[0])/mass;
+ 
+ 				// adjust a, re, gdn & gsp
+-				a[0] = (aSnow * P + a[0] * mInit[0])/mass;
++				if(aIdx>0)a[0] = (aSnow * P + a[0] * mInit[0])/mass;
+ 				re[0] = (reNew * P + re[0] * mInit[0])/mass;
+ 				gdn[0] = (gdnNew * P + gdn[0] * mInit[0])/mass;
+ 				gsp[0] = (gspNew * P + gsp[0] * mInit[0])/mass;
+@@ -1786,7 +1795,7 @@
+ } /*}}}*/ 
+ void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid){ /*{{{*/
+ 
+-	//// THIS NEEDS TO BE DOUBLE CHECKED AS THERE SEAMS TO BE LITTLE DENSIFICATION IN THE MODEL OUTOUT [MAYBE COMPATION IS COMPNSATED FOR BY TRACES OF SNOW???]
++	//// THIS NEEDS TO BE DOUBLE CHECKED AS THERE SEAMS TO BE LITTLE DENSIFICATION IN THE MODEL OUTOUT [MAYBE COMPACTION IS COMPENSATED FOR BY TRACES OF SNOW???]
+ 
+ 	//// FUNCTION INFO
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22449)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22450)
+@@ -2555,6 +2555,8 @@
+ 	IssmDouble P=0.0;
+ 	IssmDouble eAir=0.0;
+ 	IssmDouble pAir=0.0;
++	IssmDouble teValue=1.0;
++	IssmDouble aValue=0.0;
+ 	int        aIdx=0;
+ 	int        denIdx=0;
+ 	int        swIdx=0;
+@@ -2658,10 +2660,14 @@
+ 	Input* P_input=this->GetInput(SmbPEnum); _assert_(P_input);
+ 	Input* eAir_input=this->GetInput(SmbEAirEnum); _assert_(eAir_input);
+ 	Input* pAir_input=this->GetInput(SmbPAirEnum); _assert_(pAir_input);
++	Input* teValue_input=this->GetInput(SmbTeValueEnum); _assert_(teValue_input);
++	Input* aValue_input=this->GetInput(SmbAValueEnum); _assert_(aValue_input);
+ 	Input* isinitialized_input=this->GetInput(SmbIsInitializedEnum); _assert_(isinitialized_input);
+ 	/*Retrieve input values:*/
+ 	Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0);
+ 
++	if (aIdx == 0) aValue_input->GetInputValue(&aValue,gauss);
++
+ 	zTop_input->GetInputValue(&zTop,gauss);
+ 	dzTop_input->GetInputValue(&dzTop,gauss);
+ 	dzMin_input->GetInputValue(&dzMin,gauss);
+@@ -2672,6 +2678,7 @@
+ 	C_input->GetInputValue(&C,gauss);
+ 	Tz_input->GetInputValue(&Tz,gauss);
+ 	Vz_input->GetInputValue(&Vz,gauss);
++	teValue_input->GetInputValue(&teValue,gauss);
+ 	isinitialized_input->GetInputValue(&isinitialized);
+ 	/*}}}*/
+ 
+@@ -2718,8 +2725,9 @@
+ 			W = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)W[i]=Wini[0];             //set water content to zero [kg m-2]
+ 			a = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)a[i]=aini[0];         //set albedo equal to fresh snow [fraction]
+ 			T = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)T[i]=Tmean;         //set initial grid cell temperature to the annual mean temperature [K]
+-			/*            /!\ Default value of T can not be retrived from SMBgemb.m (like other snow properties) because don't know Tmean yet when set default values.
+-							  Default value of 0C given in SMBgemb.m is overwritten here with value of Tmean*/
++			/*/!\ Default value of T can not be retrived from SMBgemb.m (like other snow properties) 
++			 *    because don't know Tmean yet when set default values.
++			 *    Default value of 0C given in SMBgemb.m is overwritten here with value of Tmean*/
+ 
+ 			//fixed lower temperature bounday condition - T is fixed
+ 			T_bottom=T[m-1];
+@@ -2796,6 +2804,8 @@
+ 		P_input->GetInputValue(&P,gauss,t);        //precipitation [kg m-2]
+ 		eAir_input->GetInputValue(&eAir,gauss,t);  //screen level vapor pressure [Pa]
+ 		pAir_input->GetInputValue(&pAir,gauss,t);  // screen level air pressure [Pa]
++		teValue_input->GetInputValue(&teValue,gauss);  // screen level air pressure [Pa]
++		if(aIdx == 0) aValue_input->GetInputValue(&aValue,gauss);  // screen level air pressure [Pa]
+ 		//_printf_("Time: " << t << " Ta: " << Ta << " V: " << V << " dlw: " << dlw << " dsw: " << dsw << " P: " << P << " eAir: " << eAir << " pAir: " << pAir << "\n");
+ 		/*}}}*/
+ 
+@@ -2803,7 +2813,7 @@
+ 		if(isgraingrowth)grainGrowth(&re, &gdn, &gsp, T, dz, d, W, smb_dt, m, aIdx,this->Sid());
+ 
+ 		/*Snow, firn and ice albedo:*/
+-		if(isalbedo)albedo(&a,aIdx,re,d,cldFrac,aIce, aSnow,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
++		if(isalbedo)albedo(&a,aIdx,re,d,cldFrac,aIce, aSnow,aValue,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
+ 
+ 
+ 		/*Distribution of absorbed short wave radation with depth:*/
+@@ -2813,7 +2823,7 @@
+ 		netSW = cellsum(swf,m);
+ 
+ 		/*Thermal profile computation:*/
+-		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
++		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, teValue, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
+ 
+ 		/*Change in thickness of top cell due to evaporation/condensation  assuming same density as top cell. 
+ 		 * need to fix this in case all or more of cell evaporates */
+@@ -2820,7 +2830,7 @@
+ 		dz[0] = dz[0] + EC / d[0];
+ 
+ 		/*Add snow/rain to top grid cell adjusting cell depth, temperature and density*/
+-		if(isaccumulation)accumulation(&T, &dz, &d, &W, &a, &re, &gdn, &gsp, &m, Ta, P, dzMin, aSnow,rho_ice,this->Sid());
++		if(isaccumulation)accumulation(&T, &dz, &d, &W, &a, &re, &gdn, &gsp, &m, aIdx, Ta, P, dzMin, aSnow,rho_ice,this->Sid());
+ 
+ 		/*Calculate water production, M [kg m-2] resulting from snow/ice temperature exceeding 273.15 deg K
+ 		 * (> 0 deg C), runoff R [kg m-2] and resulting changes in density and determine wet compaction [m]*/
+@@ -2831,7 +2841,7 @@
+ 
+ 		/*Calculate upward longwave radiation flux [W m-2] not used in energy balance. Calculated for every 
+ 		 * sub-time step in thermo equations*/
+-		ulw = 5.67E-8 * pow(T[0],4.0);
++		ulw = 5.67E-8 * pow(T[0],4.0) * teValue;
+ 
+ 		/*Calculate net longwave [W m-2]*/
+ 		netLW = dlw - ulw;
+@@ -2839,7 +2849,7 @@
+ 		/*Calculate turbulent heat fluxes [W m-2]*/
+ 		if(isturbulentflux)turbulentFlux(&shf, &lhf, &dayEC, Ta, T[0], V, eAir, pAir, d[0], W[0], Vz, Tz,rho_ice,this->Sid());
+ 
+-		/*Verbose some resuls in debug mode: {{{*/
++		/*Verbose some results in debug mode: {{{*/
+ 		if(VerboseSmb() && 0){ 
+ 			_printf_("smb log: count[" << count << "] m[" << m << "] " 
+ 						<< setprecision(16)   << "T[" << cellsum(T,m)  << "] " 
+@@ -2851,6 +2861,8 @@
+ 						<< "gdn[" << cellsum(gdn,m)  << "] "
+ 						<< "gsp[" << cellsum(gsp,m)  << "] "
+ 						<< "swf[" << netSW << "] "
++						<< "a[" << a << "] "
++						<< "te[" << teValue << "] "
+ 						<< "\n");
+ 		} /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22449)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22450)
+@@ -458,6 +458,8 @@
+ 	SmbWEnum,
+ 	SmbAEnum,
+ 	SmbTEnum,
++	SmbAValueEnum,
++	SmbTeValueEnum,
+ 	SmbIsgraingrowthEnum,
+ 	SmbIsalbedoEnum,
+ 	SmbIsshortwaveEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22449)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22450)
+@@ -460,6 +460,8 @@
+ 		case SmbWEnum : return "SmbW";
+ 		case SmbAEnum : return "SmbA";
+ 		case SmbTEnum : return "SmbT";
++		case SmbAValueEnum : return "SmbAValue";
++		case SmbTeValueEnum : return "SmbTeValue";
+ 		case SmbIsgraingrowthEnum : return "SmbIsgraingrowth";
+ 		case SmbIsalbedoEnum : return "SmbIsalbedo";
+ 		case SmbIsshortwaveEnum : return "SmbIsshortwave";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22449)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22450)
+@@ -469,6 +469,8 @@
+ 	      else if (strcmp(name,"SmbW")==0) return SmbWEnum;
+ 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+ 	      else if (strcmp(name,"SmbT")==0) return SmbTEnum;
++	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
++	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
+ 	      else if (strcmp(name,"SmbIsgraingrowth")==0) return SmbIsgraingrowthEnum;
+ 	      else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum;
+ 	      else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+ 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+ 	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
+-	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+-	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
++	      if (strcmp(name,"SmbF")==0) return SmbFEnum;
++	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
++	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+ 	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+@@ -626,12 +628,12 @@
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+-	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+-	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+@@ -749,12 +751,12 @@
+ 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+ 	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+-	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+-	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
++	      if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
++	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
++	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
+ 	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+ 	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+-	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+-	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
++	      if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
++	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
++	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+ 	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+ 	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+ 	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+ 	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+-	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+-	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
++	      if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
++	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
++	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+ 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+@@ -1118,12 +1120,12 @@
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+-	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+-	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Nodes")==0) return NodesEnum;
++	      if (strcmp(name,"Loads")==0) return LoadsEnum;
++	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
++	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+ 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+ 	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+ 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22450-22451.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22450-22451.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22450-22451.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive243.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22451-22452.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22451-22452.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22451-22452.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/parameterization/reinitializelevelset.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/reinitializelevelset.m	(nonexistent)
++++ ../trunk-jpl/src/m/parameterization/reinitializelevelset.m	(revision 22452)
+@@ -0,0 +1,16 @@
++function levelsetnew = reinitializelevelset(md,levelset)
++%REINITIALIZELEVELSET - reinitialize levelset as a signed distance function
++%
++%   Usage:
++%      levelsetnew = reinitializelevelset(md,levelset)
++
++
++%First: extract segments
++contours=contourlevelzero(md,levelset,0);
++
++%Now, make this a distance field (might not be closed)
++levelsetnew=abs(ExpToLevelSet(md.mesh.x,md.mesh.y,contours));
++
++%Finally, change sign
++pos = find(levelset<0);
++levelsetnew(pos) = -levelsetnew(pos);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22452-22453.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22452-22453.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22452-22453.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22452)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22453)
+@@ -5,12 +5,12 @@
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+ Initialization (CouplingTime=0)
+-1. ISSM sends CouplingTime=0 bed to MITgcm
++1. ISSM sends CouplingTime=0 base to MITgcm
+ 2. MITgcm integrates for CouplingTime=0:1
+ 3. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
+ 
+ CouplingTime=1
+-1. ISSM sends CouplingTime=0 bed to MITgcm (this is duplicate of Initialization)
++1. ISSM sends CouplingTime=0 base to MITgcm (this is duplicate of Initialization)
+ 2. ISSM integrates for CouplingTime=0:1
+ 3. MITgcm integrates for CouplingTime=1:2
+ 4. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
+@@ -18,7 +18,7 @@
+ ...
+ 
+ CouplingTime=N
+-1. ISSM sends CouplingTime=N-1 bed to MITgcm
++1. ISSM sends CouplingTime=N-1 base to MITgcm
+ 2. ISSM integrates for CouplingTime=(N-1):N
+ 3. MITgcm integrates for CouplingTime=N:(N+1)
+ 4. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
+@@ -35,7 +35,7 @@
+ 2. MITgcm reads CouplingTime=N+1 MITgcm state
+ 
+ CouplingTime=N+1
+-1. ISSM sends CouplingTime=N bed to MITgcm
++1. ISSM sends CouplingTime=N base to MITgcm
+ 2. ISSM integrates for CouplingTime=N:(N+1)
+ 3. MITgcm integrates for CouplingTime=(N+1):(N+2)
+ 4. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
Index: /issm/oecreview/Archive/21724-22754/ISSM-22453-22454.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22453-22454.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22453-22454.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22453)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22454)
+@@ -5,6 +5,7 @@
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+ Initialization (CouplingTime=0)
++0. MITgcm send grid size (nx and ny) and grid coordinates (lat/long)
+ 1. ISSM sends CouplingTime=0 base to MITgcm
+ 2. MITgcm integrates for CouplingTime=0:1
+ 3. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
Index: /issm/oecreview/Archive/21724-22754/ISSM-22454-22455.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22454-22455.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22454-22455.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22454)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22455)
+@@ -5,7 +5,8 @@
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+ Initialization (CouplingTime=0)
+-0. MITgcm send grid size (nx and ny) and grid coordinates (lat/long)
++0. MITgcm send grid size (NX and NY) and grid coordinates of
++   center of cells (longitude -180 <= XC < 180 and latitude YC)
+ 1. ISSM sends CouplingTime=0 base to MITgcm
+ 2. MITgcm integrates for CouplingTime=0:1
+ 3. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
Index: /issm/oecreview/Archive/21724-22754/ISSM-22455-22456.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22455-22456.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22455-22456.diff	(revision 22755)
@@ -0,0 +1,118 @@
+Index: ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 22455)
++++ ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 22456)
+@@ -8,11 +8,10 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-/*Include files: {{{*/
++/*Include files*/
+ #include "./ExpToLevelSetx.h"
+ double minimum_distance(double x1, double y1, double x2, double y2, double x0, double y0);
+-void ContourToLevelSet(double* distance,double* contourx, double* contoury, int contournods, double* x, double* y, int i0, int i10);
+-/*}}}*/
++void   ContourToLevelSet(double* distance,double* contourx, double* contoury, int contournods, double* x, double* y, int i0, int i10);
+ 
+ void* ExpToLevelSetxt(void* vpthread_handle){
+ 
+@@ -28,17 +27,17 @@
+ 	int num_threads = handle->num;
+ 
+ 	/*recover parameters :*/
+-	Contours* contours  = gate->contours;
+-	int       nods      = gate->nods;
+-	double   *distance    = gate->distance;
+-	double   *x         = gate->x;
+-	double   *y         = gate->y;
++	Contours* contours = gate->contours;
++	int       nods     = gate->nods;
++	double   *distance = gate->distance;
++	double   *x        = gate->x;
++	double   *y        = gate->y;
+ 
+ 	/*distribute indices across threads :*/
+ 	PartitionRange(&i0,&i1,nods,num_threads,my_thread);
+ 
+ 	/*Loop through all contours: */
+-	for (i=0;i<contours->Size();i++){
++	for(i=0;i<contours->Size();i++){
+ 		Contour<double>* contour=(Contour<double>*)contours->GetObjectByOffset(i);
+ 		ContourToLevelSet(distance,contour->x,contour->y,contour->nods,x,y,i0,i1);
+ 	}
+@@ -47,48 +46,54 @@
+ }
+ 
+ void ContourToLevelSet(double* dist,double* contourx, double* contoury, int contournods, double* x, double* y, int i0, int i1){/*{{{*/
+-	int i,j;
+ 	double x0,y0;
+ 	double x1,y1;
+ 	double x2,y2;
+ 	double mind;
+ 	
+-	for(i=i0;i<i1;i++){
++	for(int i=i0;i<i1;i++){
++
++      /*Get current point*/
+ 		x0=x[i]; y0=y[i];
+ 
+ 		/*Figure out distance from (x0,y0) to contour: */
+ 		mind=1e+50;
+-		for (j=0;j<contournods-1;j++){
+-			x1=contourx[j]; y1=contoury[j];
++		for(int j=0;j<contournods-1;j++){
++         /*Get distance from current segment*/
++			x1=contourx[j];   y1=contoury[j];
+ 			x2=contourx[j+1]; y2=contoury[j+1];
+ 			mind=min(mind,minimum_distance(x1,y1,x2,y2,x0,y0));
+ 		}
+ 		dist[i]=min(dist[i],mind);
+ 	}
+-
+ }
+ double ddistance(double x1,double y1,double x2,double y2){ return sqrt(pow(x2-x1,2)+pow(y2-y1,2)); }
+ double ddot(double x1, double y1, double x2, double y2){ return x1*x2+y1*y2; }
+ double minimum_distance(double x1, double y1, double x2, double y2, double x0, double y0){
+-	
+-	// Return minimum distance between line segment [(x1,y1) (x2,y2)] and point (x0,y0) (v=(x1,y1), w=(x2,y2) and p=(x0,y0)
+-	double projectionx; 
+-	double projectiony; 
+-	double l2;
+-	double t;
++	/* Return minimum distance between line segment [(x1,y1) (x2,y2)] and point (x0,y0) (v=(x1,y1), w=(x2,y2) and p=(x0,y0)*/
+ 
+-	l2 = pow(x2-x1,2)+pow(y2-y1,2); // i.e. |w-v|^2 -  avoid a sqrt
++   /*Get segment length square (avoid sqrt) |w-v|^2*/
++	double l2 = pow(x2-x1,2)+pow(y2-y1,2); 
+ 
+-	if (l2 == 0.0) return ddistance(x0,y0, x1,y1); // v == w case
+-	// Consider the line extending the segment, parameterized as v + t (w - v).
+-	//         // We find projection of point p onto the line. 
+-	//           // It falls where t = [(p-v) . (w-v)] / |w-v|^2
+-	t = ddot(x0-x1,y0-y1, x2-x1, y2-y1) / l2;
+-	if (t < 0.0) return ddistance(x0,y0, x1, y1);       // Beyond the 'v' end of the segment
+-	else if (t > 1.0) return ddistance(x0,y0, x2,y2);  // Beyond the 'w' end of the segment
++   /*segment is single point: v == w*/
++	if(l2 == 0.) return ddistance(x0,y0,x1,y1);
++
++	/*Consider the line extending the segment, parameterized as v + t (w - v).
++	We find projection of point p onto the line. 
++	It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
++	double t = ddot(x0-x1,y0-y1, x2-x1, y2-y1) / l2;
++	if(t < 0.){
++      /*Beyond the 'v' end of the segment*/
++      return ddistance(x0,y0, x1, y1);
++   }
++	else if(t > 1.){
++      /*Beyond the 'w' end of the segment*/
++      return ddistance(x0,y0, x2,y2);
++   }
+ 	
+-	projectionx= x1 + t* (x2-x1);  // Projection falls on the segment
+-	projectiony= y1 + t* (y2-y1);
++   /*Projection falls on segment!*/
++	double projectionx= x1 + t* (x2-x1);
++	double projectiony= y1 + t* (y2-y1);
+ 	return ddistance(x0, y0, projectionx, projectiony);
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22456-22457.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22456-22457.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22456-22457.diff	(revision 22755)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22456)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22457)
+@@ -1,29 +1,44 @@
+ Rules for coupling ISSM and MITgcm:
+ 
+ * 
++>>>> CREATE A FILE WITH ALL THE NAMES AND TAGS FOR THE INFORMATION EXCHANGE INCLUDING:
++CouplingTime           1           Real*8  10001000
++IceModelTime           1           Real*8  IceTimeTag
++OceanModelTime         1           Real*8  OceanTimeTag
++Nx                     1           Integer 10001001
++Ny                     1           Integer 10001002
++xC                     Nx*Ny       Real*8  10001003
++yC                     Nx*Ny       Real*8  10001004
+ 
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+ Initialization (CouplingTime=0)
+-0. MITgcm send grid size (NX and NY) and grid coordinates of
++1. MITgcm sends grid size (NX and NY) and grid coordinates of
+    center of cells (longitude -180 <= XC < 180 and latitude YC)
+-1. ISSM sends CouplingTime=0 base to MITgcm
+-2. MITgcm integrates for CouplingTime=0:1
+-3. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
++2. ISSM sends CouplingTime for the interval at which we couple
++3. ISSM sends ice model time IceTimeTag
++4. MITgcm sends ocean model time OceanTimeTag
++3. ISSM sends CouplingTime=0 base to MITgcm
++4. MITgcm integrates for CouplingTime=0:1
++5. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
+ 
+ CouplingTime=1
+-1. ISSM sends CouplingTime=0 base to MITgcm (this is duplicate of Initialization)
+-2. ISSM integrates for CouplingTime=0:1
+-3. MITgcm integrates for CouplingTime=1:2
+-4. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
++1. ISSM sends ice model time IceTimeTag
++2. MITgcm sends ocean model time OceanTimeTag
++3. ISSM sends CouplingTime=0 base to MITgcm (this is duplicate of Initialization)
++4. ISSM integrates for CouplingTime=0:1
++5. MITgcm integrates for CouplingTime=1:2
++6. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
+ 
+ ...
+ 
+ CouplingTime=N
+-1. ISSM sends CouplingTime=N-1 base to MITgcm
+-2. ISSM integrates for CouplingTime=(N-1):N
+-3. MITgcm integrates for CouplingTime=N:(N+1)
+-4. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
++1. ISSM sends ice model time IceTimeTag
++2. MITgcm sends ocean model time OceanTimeTag
++3. ISSM sends CouplingTime=N-1 base to MITgcm
++4. ISSM integrates for CouplingTime=(N-1):N
++5. MITgcm integrates for CouplingTime=N:(N+1)
++6. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
+ 
+ Termination (CouplingTime=N+1)
+ 1. ISSM saves CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
+@@ -33,13 +48,17 @@
+ >>>> RESTART FROM SAVED STATE
+ 
+ Initialization (CouplingTime=N+1)
+-1. ISSM reads CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
+-2. MITgcm reads CouplingTime=N+1 MITgcm state
++1. ISSM sends ice model time IceTimeTag
++2. MITgcm sends ocean model time OceanTimeTag
++3. ISSM reads CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
++4. MITgcm reads CouplingTime=N+1 MITgcm state
+ 
+ CouplingTime=N+1
+-1. ISSM sends CouplingTime=N base to MITgcm
+-2. ISSM integrates for CouplingTime=N:(N+1)
+-3. MITgcm integrates for CouplingTime=(N+1):(N+2)
+-4. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
++1. ISSM sends ice model time IceTimeTag
++2. MITgcm sends ocean model time OceanTimeTag
++3. ISSM sends CouplingTime=N base to MITgcm
++4. ISSM integrates for CouplingTime=N:(N+1)
++5. MITgcm integrates for CouplingTime=(N+1):(N+2)
++6. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
+ 
+ ...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22457-22458.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22457-22458.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22457-22458.diff	(revision 22755)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 22457)
++++ ../trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp	(revision 22458)
+@@ -46,6 +46,7 @@
+ }
+ 
+ void ContourToLevelSet(double* dist,double* contourx, double* contoury, int contournods, double* x, double* y, int i0, int i1){/*{{{*/
++
+ 	double x0,y0;
+ 	double x1,y1;
+ 	double x2,y2;
+@@ -67,33 +68,34 @@
+ 		dist[i]=min(dist[i],mind);
+ 	}
+ }
+-double ddistance(double x1,double y1,double x2,double y2){ return sqrt(pow(x2-x1,2)+pow(y2-y1,2)); }
+-double ddot(double x1, double y1, double x2, double y2){ return x1*x2+y1*y2; }
+ double minimum_distance(double x1, double y1, double x2, double y2, double x0, double y0){
+-	/* Return minimum distance between line segment [(x1,y1) (x2,y2)] and point (x0,y0) (v=(x1,y1), w=(x2,y2) and p=(x0,y0)*/
++	/* Return minimum distance between line segment [(x1,y1) (x2,y2)] and point (x0,y0)
++	 * We use the following notations:
++	 * segment: v=(x1,y1), w=(x2,y2)
++	 * point:   p=(x0,y0) 
++	 */
+ 
+    /*Get segment length square (avoid sqrt) |w-v|^2*/
+ 	double l2 = pow(x2-x1,2)+pow(y2-y1,2); 
+ 
+    /*segment is single point: v == w*/
+-	if(l2 == 0.) return ddistance(x0,y0,x1,y1);
++	if(l2 == 0.) return sqrt(pow(x1-x0,2)+pow(y1-y0,2));
+ 
+ 	/*Consider the line extending the segment, parameterized as v + t (w - v).
+-	We find projection of point p onto the line. 
+-	It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
+-	double t = ddot(x0-x1,y0-y1, x2-x1, y2-y1) / l2;
++	We find projection of point p onto the line.  It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
++	double t = ((x0-x1)*(x2-x1) + (y0-y1)*(y2-y1)) / l2;
+ 	if(t < 0.){
+       /*Beyond the 'v' end of the segment*/
+-      return ddistance(x0,y0, x1, y1);
++      return sqrt(pow(x1-x0,2)+pow(y1-y0,2));
+    }
+ 	else if(t > 1.){
+       /*Beyond the 'w' end of the segment*/
+-      return ddistance(x0,y0, x2,y2);
++      return sqrt(pow(x2-x0,2)+pow(y2-y0,2));
+    }
+ 	
+-   /*Projection falls on segment!*/
+-	double projectionx= x1 + t* (x2-x1);
+-	double projectiony= y1 + t* (y2-y1);
+-	return ddistance(x0, y0, projectionx, projectiony);
++   /*Projection falls on segment*/
++	double projx= x1 + t* (x2-x1);
++	double projy= y1 + t* (y2-y1);
++	return sqrt(pow(projx-x0,2)+pow(projy-y0,2));
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22458-22459.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22458-22459.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22458-22459.diff	(revision 22755)
@@ -0,0 +1,220 @@
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.js	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.js	(revision 22459)
+@@ -30,6 +30,7 @@
+ 		fielddisplay(this,'time_step_max','maximum length of time steps [' +unit+ ']');
+ 		fielddisplay(this,'cfl_coefficient','coefficient applied to cfl condition');
+ 		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++		fielddisplay(this,'coupling_time','coupling time steps with ocean model [' +unit+ ']');
+ 
+ 	}// }}}
+ 	this.classname= function(){// {{{
+@@ -47,6 +48,7 @@
+ 		if (this.final_time-this.start_time<0){
+ 			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+ 		}
++		checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 	} // }}}
+ 	this.marshall=function(md,prefix,fid) { //{{{
+ 
+@@ -60,6 +62,7 @@
+ 		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
+ 		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','cfl_coefficient','format','Double');
+ 		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','interp_forcings','format','Boolean');
++		WriteData(fid,prefix,'object',this,'class','timestepping','fieldname','coupling_time','format','Double','scale',scale);
+ 
+ 	}//}}}
+ 	this.fix=function() { //{{{
+@@ -72,6 +75,7 @@
+ 	this.time_step_max   = 0.;
+ 	this.cfl_coefficient = 0.;
+ 	this.interp_forcings = 1;
++	this.coupling_time   = 0.;
+ 
+ 	this.setdefaultparameters();
+ 	//}}}
+Index: ../trunk-jpl/src/m/classes/timestepping.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.m	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timestepping.m	(revision 22459)
+@@ -9,6 +9,7 @@
+ 		final_time      = 0.;
+ 		time_step       = 0.;
+ 		interp_forcings = 1;
++		coupling_time   = 0.;
+ 	end
+ 	methods
+ 		function self = timestepping(varargin) % {{{
+@@ -43,6 +44,7 @@
+ 			end 
+ 			if strcmp(solution,'TransientSolution'),
+ 				md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>',0,'NaN',1,'Inf',1);
++				md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			end
+ 		end % }}}
+ 		function disp(self) % {{{
+@@ -53,6 +55,7 @@
+ 			fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']);
+ 			fielddisplay(self,'time_step',['length of time steps [' unit ']']);
+ 			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++			fielddisplay(self,'coupling_time',['length of coupling time step with ocean model  [' unit ']']);
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -63,6 +66,7 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean');
++			WriteData(fid,prefix,'object',self,'fieldname','coupling_time','format','Double','scale',scale);
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+Index: ../trunk-jpl/src/m/classes/timestepping.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.py	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timestepping.py	(revision 22459)
+@@ -15,6 +15,7 @@
+ 		self.final_time      = 0.
+ 		self.time_step       = 0.
+ 		self.interp_forcings = 1
++		self.coupling_time   = 0.
+ 		
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -26,6 +27,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"time_step","length of time steps [yr]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
++		string="%s\n%s"%(string,fielddisplay(self,"coupling_time","length of coupling time steps with ocean model [yr]"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -48,6 +50,7 @@
+ 		md = checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1)
+ 		if self.final_time-self.start_time<0:
+ 			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
++			md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',0,'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
+ 
+ 		return md
+@@ -60,4 +63,5 @@
+ 		WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean')
++		WriteData(fid,prefix,'object',self,'fieldname','coupling_time','format','Double','scale',yts)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/timestepping.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/timestepping.js	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timestepping.js	(revision 22459)
+@@ -24,6 +24,7 @@
+ 		fielddisplay(this,'final_time','final time to stop the simulation ['+ unit + ']');
+ 		fielddisplay(this,'time_step','length of time steps [' +unit+ ']');
+ 		fielddisplay(this,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++		fielddisplay(this,'coupling_time','length of coupling time steps with ocean model [' +unit+ ']');
+ 
+ 	}// }}}
+ 	this.classname= function(){// {{{
+@@ -36,6 +37,7 @@
+ 		checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1);
+ 		checkfield(md,'fieldname','timestepping.time_step','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 		checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1]);
++		checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 		if (this.final_time-this.start_time<0){
+ 			md.checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+ 		}
+@@ -50,6 +52,7 @@
+ 		WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+ 		WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+ 		WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
++		WriteData(fid,prefix,'object',this,'fieldname','coupling_time','format','Double','scale',scale);
+ 
+ 	}//}}}
+ 	this.fix=function() { //{{{
+@@ -60,6 +63,7 @@
+ 	this.final_time      = 0.;
+ 	this.time_step       = 0.;
+ 	this.interp_forcings = 1;
++	this.coupling_time   = 0.;
+ 
+ 	this.setdefaultparameters();
+ 	//}}}
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.m	(revision 22459)
+@@ -11,6 +11,7 @@
+ 		time_step_max   = 0.;
+ 		cfl_coefficient = 0.;
+ 		interp_forcings = 1;
++		coupling_time   = 0.;
+ 	end
+ 	methods
+ 		function self = timesteppingadaptive(varargin) % {{{
+@@ -46,6 +47,7 @@
+ 			md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1);
+ 			md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]);
++			md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',md.timestepping.coupling_time,'NaN',1,'Inf',1);
+ 			if self.final_time-self.start_time<0,
+ 				md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time');
+ 			end 
+@@ -60,6 +62,7 @@
+ 			fielddisplay(self,'time_step_max',['maximum length of time step [' unit ']']);
+ 			fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition');
+ 			fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');
++			fielddisplay(self,'coupling_time',['coupling time step with ocean model [' unit ']']);
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -72,6 +75,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',scale);
+ 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean');
++			WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','coupling_time','format','Double','scale',scale);
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+@@ -81,6 +85,7 @@
+ 			writejsdouble(fid,[modelname '.timesteppingadaptive.time_step_max'],self.time_step_max);
+ 			writejsdouble(fid,[modelname '.timesteppingadaptive.cfl_coefficient'],self.cfl_coefficient);
+ 			writejsdouble(fid,[modelname '.timesteppingadaptive.interp_forcings'],self.interp_forcings);
++			writejsdouble(fid,[modelname '.timesteppingadaptive.coupling_time'],self.time_step_max);
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 22458)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 22459)
+@@ -18,6 +18,7 @@
+ 			self.time_step_max   = 0.
+ 			self.cfl_coefficient = 0.
+ 			self.interp_forcings = 1
++			self.coupling_time   = 0.
+ 			
+ 			#set defaults
+ 			self.setdefaultparameters()
+@@ -41,6 +42,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"time_step_max","maximum length of time steps [yr]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
++		string="%s\n%s"%(string,fielddisplay(self,"coupling_time","coupling time steps with ocean model [yr]"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -70,6 +72,7 @@
+ 		if self.final_time-self.start_time<0:
+ 			md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
+ 		md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
++		md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',0,'NaN',1,'Inf',1)
+ 
+ 		return md
+ 	# }}}
+@@ -83,4 +86,5 @@
+ 		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',yts)
+ 		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean')
++		WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','coupling_time','format','Double','scale',yts)
+ 	# }}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22459-22460.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22459-22460.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22459-22460.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/timesteppingadaptive.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 22459)
++++ ../trunk-jpl/src/m/classes/timesteppingadaptive.py	(revision 22460)
+@@ -30,6 +30,7 @@
+ 			self.start_time      = old.start_time      
+ 			self.final_time      = old.final_time      
+ 			self.interp_forcings = old.interp_forcings 
++                        self.coupling_time   = old.coupling_time
+ 
+ 		else:
+ 			raise Exception('constructor not supported')
Index: /issm/oecreview/Archive/21724-22754/ISSM-22460-22461.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22460-22461.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22460-22461.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 22460)
++++ ../trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 22461)
+@@ -331,13 +331,13 @@
+ 
+ 	/* Intermediaries */
+ 	int extvar_enum;
+-	IssmDouble phi,value;
++	IssmDouble active,value;
+ 	Node* node = NULL;
+ 
+ 	/* Get parameters */
+ 	element->FindParam(&extvar_enum, ExtrapolationVariableEnum);
+ 	
+-	Input* levelset_input=element->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);
++	Input* active_input=element->GetInput(IceMaskNodeActivationEnum); _assert_(active_input);
+ 	Input* extvar_input=element->GetInput(extvar_enum); _assert_(extvar_input);
+ 
+ 	Gauss* gauss=element->NewGauss();
+@@ -344,9 +344,9 @@
+ 	for(int in=0;in<numnodes;in++){
+ 		gauss->GaussNode(element->GetElementType(),in);
+ 		node=element->GetNode(in);
+-		levelset_input->GetInputValue(&phi,gauss);
++		active_input->GetInputValue(&active,gauss);
+ 		if(node->IsActive()){
+-			if(phi<=0.){
++			if(active>0.5){
+ 				/* if ice, set dirichlet BC */
+ 				extvar_input->GetInputValue(&value,gauss);
+ 				node->ApplyConstraint(0,value);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22461-22462.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22461-22462.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22461-22462.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22461)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22462)
+@@ -3,24 +3,25 @@
+ * 
+ >>>> CREATE A FILE WITH ALL THE NAMES AND TAGS FOR THE INFORMATION EXCHANGE INCLUDING:
+ CouplingTime           1           Real*8  10001000
+-IceModelTime           1           Real*8  IceTimeTag
+-OceanModelTime         1           Real*8  OceanTimeTag
+-Nx                     1           Integer 10001001
+-Ny                     1           Integer 10001002
+-xC                     Nx*Ny       Real*8  10001003
+-yC                     Nx*Ny       Real*8  10001004
++IceModelTime           1           Real*8  10001001
++OceanModelTime         1           Real*8  10001002
++Nx                     1           Integer 10001003
++Ny                     1           Integer 10001004
++xC                     Nx*Ny       Real*8  10001005
++yC                     Nx*Ny       Real*8  10001006
++IceBase                Nx*Ny       Real*8  10001007
++OceanMelt              Nx*Ny       Real*8  10001008
+ 
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+ Initialization (CouplingTime=0)
+-1. MITgcm sends grid size (NX and NY) and grid coordinates of
++1. ISSM sends CouplingTime for the interval at which we couple
++2. ISSM sends ice model time IceTimeTag
++3. MITgcm sends ocean model time OceanTimeTag
++4. MITgcm sends grid size (NX and NY) and grid coordinates of
+    center of cells (longitude -180 <= XC < 180 and latitude YC)
+-2. ISSM sends CouplingTime for the interval at which we couple
+-3. ISSM sends ice model time IceTimeTag
+-4. MITgcm sends ocean model time OceanTimeTag
+-3. ISSM sends CouplingTime=0 base to MITgcm
+-4. MITgcm integrates for CouplingTime=0:1
+-5. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
++5. MITgcm integrates for CouplingTime=0:1
++6. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
+ 
+ CouplingTime=1
+ 1. ISSM sends ice model time IceTimeTag
Index: /issm/oecreview/Archive/21724-22754/ISSM-22462-22463.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22462-22463.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22462-22463.diff	(revision 22755)
@@ -0,0 +1,120 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22462)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22463)
+@@ -376,6 +376,7 @@
+ 	TimesteppingTimeAdaptEnum,
+ 	TimesteppingTimeStepEnum,
+ 	TimesteppingInterpForcingsEnum,
++	TimesteppingCouplingTimeEnum,
+ 	TransientIssmbEnum,
+ 	TransientIscouplerEnum,
+ 	TransientIsoceancouplingEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22462)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22463)
+@@ -382,6 +382,7 @@
+ 		case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
+ 		case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
+ 		case TimesteppingInterpForcingsEnum : return "TimesteppingInterpForcings";
++		case TimesteppingCouplingTimeEnum : return "TimesteppingCouplingTime";
+ 		case TransientIssmbEnum : return "TransientIssmb";
+ 		case TransientIscouplerEnum : return "TransientIscoupler";
+ 		case TransientIsoceancouplingEnum : return "TransientIsoceancoupling";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22462)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22463)
+@@ -391,6 +391,7 @@
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
++	      else if (strcmp(name,"TimesteppingCouplingTime")==0) return TimesteppingCouplingTimeEnum;
+ 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
+ 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
+ 	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
+ 	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+ 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+-	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbF")==0) return SmbFEnum;
++	      if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
++	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+ 	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
+ 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+-	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
++	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+ 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+-	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
++	      if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
++	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
+ 	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
+ 	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+-	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
++	      if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
++	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+ 	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+ 	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+-	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
++	      if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
++	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+ 	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
+ 	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+-	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Loads")==0) return LoadsEnum;
++	      if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
++	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+ 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+ 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22463-22464.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22463-22464.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22463-22464.diff	(revision 22755)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/test/Archives/Archive803.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive804.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive805.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive806.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive807.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive801.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive808.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive802.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22464-22465.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22464-22465.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22464-22465.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22465)
+@@ -221,6 +221,7 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.coupling_time",TimesteppingCouplingTimeEnum));
+ 			break;
+ 		case AdaptiveTimesteppingEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
+@@ -229,6 +230,7 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step_max",TimesteppingTimeStepMaxEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.coupling_time",TimesteppingCouplingTimeEnum));
+ 			break;
+ 		default:
+ 			_error_("Time stepping \""<<EnumToStringx(timestepping_type)<<"\" not supported yet");
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22464)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22465)
+@@ -14,7 +14,7 @@
+ 	ISSM_MPI_Comm modelcomm;
+ 	ISSM_MPI_Comm frommitgcm;
+ 	ISSM_MPI_Comm tomitgcmcomm;
+-	ISSM_MPI_Status status
++	ISSM_MPI_Status status;
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22465-22466.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22465-22466.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22465-22466.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22465)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22466)
+@@ -82,6 +82,17 @@
+ 	LinearFloatingMeltRateEnum,
+ 	MismipFloatingMeltRateEnum,
+ 	MantlePlumeGeothermalFluxEnum,
++	BasalforcingsPicoEnum,
++	BasalforcingsPicoNumBasinsEnum,
++	BasalforcingsPicoBasinIdEnum,
++	BasalforcingsPicoMaxboxcountEnum,
++	BasalforcingsPicoBoxIdEnum,
++	BasalforcingsPicoOverturningCoeffEnum,
++	BasalforcingsPicoGammaTEnum,
++	BasalforcingsPicoFarOceantemperatureEnum,
++	BasalforcingsPicoFarOceansalinityEnum,
++	DistanceToGroundinglineEnum,
++	DistanceToCalvingfrontEnum,
+ 	BedEnum,
+ 	BaseEnum,
+ 	ConstantsGEnum,
+@@ -956,6 +967,7 @@
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
++	TransientArrayParamEnum,
+ 	MaticeEnum,
+ 	MatlithoEnum,
+ 	MatdamageiceEnum,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22466-22467.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22466-22467.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22466-22467.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22466)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22467)
+@@ -88,6 +88,14 @@
+ 		case LinearFloatingMeltRateEnum : return "LinearFloatingMeltRate";
+ 		case MismipFloatingMeltRateEnum : return "MismipFloatingMeltRate";
+ 		case MantlePlumeGeothermalFluxEnum : return "MantlePlumeGeothermalFlux";
++		case BasalforcingsPicoEnum : return "BasalforcingsPico";
++		case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins";
++		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
++		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
++		case BasalforcingsPicoOverturningCoeffEnum : return "BasalforcingsPicoOverturningCoeff";
++		case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT";
++		case BasalforcingsPicoBox0temperatureEnum : return "BasalforcingsPicoBox0temperature";
++		case BasalforcingsPicoBox0salinityEnum : return "BasalforcingsPicoBox0salinity";
+ 		case BedEnum : return "Bed";
+ 		case BaseEnum : return "Base";
+ 		case ConstantsGEnum : return "ConstantsG";
+@@ -925,6 +933,7 @@
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
++		case TransientArrayParamEnum : return "TransientArrayParam";
+ 		case MaticeEnum : return "Matice";
+ 		case MatlithoEnum : return "Matlitho";
+ 		case MatdamageiceEnum : return "Matdamageice";
Index: /issm/oecreview/Archive/21724-22754/ISSM-22467-22468.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22467-22468.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22467-22468.diff	(revision 22755)
@@ -0,0 +1,171 @@
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22467)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22468)
+@@ -88,6 +88,14 @@
+ 	      else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"MantlePlumeGeothermalFlux")==0) return MantlePlumeGeothermalFluxEnum;
++	      else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum;
++	      else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
++	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
++	      else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum;
++	      else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBox0temperature")==0) return BasalforcingsPicoBox0temperatureEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBox0salinity")==0) return BasalforcingsPicoBox0salinityEnum;
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"Base")==0) return BaseEnum;
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+@@ -128,7 +136,10 @@
+ 	      else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
+ 	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
+ 	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
+-	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
++         else stage=2;
++   }
++   if(stage==2){
++	      if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
+ 	      else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
+ 	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
+ 	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
+@@ -136,10 +147,7 @@
+ 	      else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
+-         else stage=2;
+-   }
+-   if(stage==2){
+-	      if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
++	      else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"Hydrologydt")==0) return HydrologydtEnum;
+ 	      else if (strcmp(name,"HydrologyStepsPerStep")==0) return HydrologyStepsPerStepEnum;
+@@ -251,7 +259,10 @@
+ 	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
+ 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+-	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"DamageF")==0) return DamageFEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+@@ -259,10 +270,7 @@
+ 	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+ 	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+ 	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
++	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+ 	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+ 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
+@@ -374,7 +382,10 @@
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+-	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum;
+@@ -382,10 +393,7 @@
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -503,7 +511,10 @@
+ 	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
+ 	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
+ 	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
+-	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+ 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+          else stage=5;
+    }
+@@ -626,7 +637,10 @@
+ 	      else if (strcmp(name,"Divergence")==0) return DivergenceEnum;
+ 	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+          else stage=6;
+    }
+@@ -749,7 +763,10 @@
+ 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+-	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+          else stage=7;
+    }
+@@ -872,7 +889,10 @@
+ 	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
+ 	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
+ 	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
+-	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
+ 	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+          else stage=8;
+    }
+@@ -946,6 +966,7 @@
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+ 	      else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
+ 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+@@ -994,7 +1015,10 @@
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+          else stage=9;
+@@ -1117,7 +1141,10 @@
+ 	      else if (strcmp(name,"Open")==0) return OpenEnum;
+ 	      else if (strcmp(name,"Air")==0) return AirEnum;
+ 	      else if (strcmp(name,"Ice")==0) return IceEnum;
+-	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"Melange")==0) return MelangeEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+          else stage=10;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22468-22469.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22468-22469.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22468-22469.diff	(revision 22755)
@@ -0,0 +1,106 @@
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22468)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22469)
+@@ -28,6 +28,10 @@
+ 			if(VerboseSolution())_printf0_("	call Mismip Floating melting rate module\n");
+ 			MismipFloatingiceMeltingRatex(femmodel);
+ 			break;
++		case BasalforcingsPicoEnum:
++			if(VerboseSolution())_printf0_(" call Pico Floating melting rate module\n");
++			PicoFloatingiceMeltingRatex(femmodel);
++			break;
+ 		default:
+ 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+ 	}
+@@ -48,5 +52,90 @@
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->MismipFloatingiceMeltingRate();
+ 	}
++}
++/*}}}*/
+ 
++void PicoFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/
++
++	int i,k,p,numvertices;
++	int num_basins,maxbox,basinid,boxid;
++	IssmDouble dist_max,area,earth_grav,rhoi,rhow,rho_star,nu,latentheat;
++	IssmDouble c_p_ocean,lambda,a,b,c,alpha,Beta,gamma_T,overturning_coeff;
++	IssmDouble g1,g2,s1,p_coeff,tavg,savg,overturning_avg;
++	IssmDouble mean_toc,mean_soc,mean_overturning,pressure,T_star;
++	IssmDouble q_coeff,potential_pressure_melting_point,T_pressure_melting,overturning;
++	IssmDouble thickness,toc_farocean,soc_farocean,area_box1,Toc,Soc,basalmeltrate_shelf;
++	int* nd=NULL;
++	IssmDouble* dmax_basin=NULL;
++	IssmDouble* t_farocean=NULL;
++	IssmDouble* s_farocean=NULL;
++	IssmDouble* distances=NULL;
++	IssmDouble* boxareas=NULL;
++	Element* element=NULL;
++
++	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
++	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	dmax_basin=xNew<IssmDouble>(num_basins);
++	femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
++	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
++	// find maximum distance to grounding line
++	dist_max=-1.;
++	for(i=0;i<num_basins;i++){
++		dmax_basin[i]=-1;
++	}
++	for(i=0;i<femmodel->elements->Size();i++){
++		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		if(!element->IsFloating()) continue;
++		numvertices = element->GetNumberOfVertices();
++		distances=xNew<IssmDouble>(numvertices);
++		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
++		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++		for(k=0; k<numvertices; k++){
++			if(abs(distances[k])>dist_max){dist_max=abs(distances[k]);}
++			if(abs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=abs(distances[k]);}
++		}
++	}
++	//1 Define pico boxes
++	nd=xNew<int>(num_basins);
++	for(i=0; i<num_basins;i++){
++		nd[i] = round(sqrt(dmax_basin[i]/dist_max)*(maxbox-1)); //0-based
++	}
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->PicoUpdateBoxid(nd);
++	}
++
++	//2 Get area of the boxes
++	boxareas=new Vector<IssmDouble>(num_basins*maxbox);
++	for(i=0;i<num_basins*maxbox;i++){boxareas[i]=0.;}
++	for(i=0;i<femmodel->elements->Size();i++){
++		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		if(!element->IsFloating()) continue;
++		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++		element->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
++		boxareas[basinid*maxbox+boxid]+=element->GetArea();
++	}
++
++	//3 Compute variables in first box
++	for(int p=0;p<femmodel->elements->Size();p++){
++		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(p));
++		element->PicoUpdateFirstBox();
++		//Need to save the box1 average of temp, sal, and overt for input into next box.
++	}
++
++
++	//4 Compute variables of all other boxes
++
++// 	for(int i=0;i<femmodel->elements->Size();i++){
++// 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++// 		element->PicoFloatingiceMeltingRate();
++// 	}
++	/*Cleanup and return */
++	xDelete<int>(nd);
++	xDelete<IssmDouble>(dmax_basin);
++	xDelete<IssmDouble>(distances);
++	xDelete<IssmDouble>(boxareas);
++	xDelete<IssmDouble>(t_farocean);
++   xDelete<IssmDouble>(s_farocean);
++	xDelete<IssmDouble>(element);
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22469-22470.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22469-22470.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22469-22470.diff	(revision 22755)
@@ -0,0 +1,122 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22469)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22470)
+@@ -811,7 +811,7 @@
+ 
+ 		/*Update signed distance*/
+ 		dmin = sqrt(dmin);
+-		if(dmin>10000) dmin=10000;
++		// if(dmin>10000) dmin=10000;
+ 		if(ls[j]>0){
+ 			ls[j] = dmin;
+ 		}
+@@ -2736,6 +2736,99 @@
+ 	return TriaRef::NumberofNodes(this->VelocityInterpolation());
+ }
+ /*}}}*/
++void       Tria::PicoUpdateBoxid(int* pmax_boxid_basin){/*{{{*/
++
++	if(!this->IsIceInElement() || !this->IsFloating()) return;
++
++	//Load inputs and params
++	int i, boxid;
++	int basin_id, boxid_max;
++	IssmDouble dist_gl;
++	IssmDouble dist_cf;
++	IssmDouble rel_dist_gl;
++
++	inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
++	boxid_max=pmax_boxid_basin[basin_id]; //0-based
++
++	Input* dist_gl_input=NULL;
++	Input* dist_cf_input=NULL;
++	dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
++	dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
++
++	Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0);
++	dist_gl_input->GetInputValue(&dist_gl,gauss);
++	dist_cf_input->GetInputValue(&dist_cf,gauss);
++
++	rel_dist_gl=dist_gl/(dist_gl+dist_cf);
++
++	boxid=-1;
++	for(i=0;i<boxid_max;i++){
++		if(rel_dist_gl>=(1-sqrt((boxid_max-i)/boxid_max)) && rel_dist_gl<=(1-sqrt((boxid_max-i-1)/boxid_max))){
++			boxid=i; break;
++		}
++	}
++	if(boxid==-1){_error_("no boxid found for element" << this->Sid());}
++
++	this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));	
++
++	/*Cleanup & return: */
++	delete gauss;
++}
++/*}}}*/
++void       Tria::PicoUpdateFirstBox(){/*{{{*/
++
++	IssmDouble rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
++	IssmDouble alpha, Beta, gamma_T, overturning_coeff, t_farocean, s_farocean;
++	IssmDouble basinid, boxid, thickness, toc_farocean, soc_farocean, area_box1;
++	IssmDouble pressure, T_star, g1, s1, p_coeff, q_coeff, Toc, Soc, potential_pressure_melting_point;
++	IssmDouble basalmeltrate_shelf, overturning, maxbox;
++
++	//Get variables
++	rhoi			= this->GetMaterialParameter(MaterialsRhoIceEnum);
++	rhow			= this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
++	rho_star		= 1033;             //kg/m^3
++	nu				= rhoi/rhow;
++	latentheat	= this->GetMaterialParameter(MaterialsLatentheatEnum);
++	c_p_ocean	= this->GetMaterialParameter(MaterialsThermalExchangeVelocityEnum);
++	lambda		= latentheat/c_p_ocean;
++	a				= -0.0572;          //K/psu
++	b				= 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
++	c				= this->GetMaterialParameter(MaterialsBetaEnum);
++	alpha			= 0.000075;         //1/K
++	Beta			= 0.00077;          //K
++
++	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
++	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
++	this->parameters->FindParam(&t_farocean,BasalforcingsPicoFarOceanTemperatureEnum);
++	this->parameters->FindParam(&s_farocean,BasalforcingsPicoFarOceanSalinityEnum);
++
++	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
++	this->inputs->GetInputValue(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	this->inputs->GetInputValue(&thickness,ThicknessEnum);
++
++	toc_farocean = t_farocean[basinid];
++	soc_farocean = s_farocean[basinid];
++	area_box1 = areas[basinid*maxbox+boxid];
++	pressure = (rhoi*earth_grav)*thickness;
++	T_star = a*soc_farocean+b-c*pressure-toc_farocean;
++	g1 = area_box1*gamma_T;
++	s1 = soc_farocean/(nu*lambda);
++	p_coeff = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
++	q_coeff = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
++	if ((0.25*(p_coeff)^(2) - q_coeff) < 0)
++	  {q_coeff = (0.25*(p_coeff)^(2))}
++	Toc = toc_farocean-(-0.5*p_coeff+sqrt(0.25*p_coeff^(2)-q_coeff));
++	Soc = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Toc);
++	potential_pressure_melting_point = a*Soc+b-c*pressure;
++	basalmeltrate_shelf = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point-Toc);
++	overturning = overturning_coeff*rho_star*(Beta*(soc_farocean-Soc)-alpha*(toc_farocean-Toc));
++
++	this->AddInput(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,this->GetElementType());
++
++}
++/*}}}*/
+ void       Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){/*{{{*/
+ 
+ 	IssmDouble  h[NUMVERTICES],r[NUMVERTICES],gl[NUMVERTICES];
+@@ -2967,7 +3060,7 @@
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(control_enum)) return;
+ 
+-	/*Prepare index list*/
++	/*hrepare index list*/
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get values on vertices*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22470-22471.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22470-22471.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22470-22471.diff	(revision 22755)
@@ -0,0 +1,761 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22471)
+@@ -205,6 +205,17 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.uppercrustheat",BasalforcingsUppercrustheatEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.lowercrustheat",BasalforcingsLowercrustheatEnum));
+ 			break;
++		case BasalforcingsPicoEnum:
++				iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
++				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_basins",BasalforcingsPicoNumBasinsEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.maxboxcount",BasalforcingsPicoMaxboxcountEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
++				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_temperature");
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceanTemperatureEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_salinity");
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceanSalinityEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++			break;
+ 		default:
+ 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h	(revision 22470)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h	(revision 22471)
+@@ -11,5 +11,6 @@
+ void FloatingiceMeltingRatex(FemModel* femmodel);
+ void LinearFloatingiceMeltingRatex(FemModel* femmodel);
+ void MismipFloatingiceMeltingRatex(FemModel* femmodel);
++void PicoFloatingiceMeltingRatex(FemModel* femmodel);
+ 
+ #endif  /* _FloatingiceMeltingRatex_H*/
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22470)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22471)
+@@ -132,6 +132,7 @@
+ 					./classes/Params/MatrixParam.cpp\
+ 					./classes/Params/VectorParam.cpp\
+ 					./classes/Params/TransientParam.cpp\
++					./classes/Params/TransientArrayParam.cpp\
+ 					./classes/Params/DataSetParam.cpp\
+ 					./classes/Profiler.cpp\
+ 					./shared/MemOps/MemOps.cpp\
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22471)
+@@ -147,10 +147,11 @@
+ 				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 			}
+ 		}
++		if(ismasstransport){
++			/*Calculate new basal melting on floating ice*/
++			FloatingiceMeltingRatex(femmodel);
++		}
+ 
+-		/*Calculate new basal melting on floating ice*/
+-		FloatingiceMeltingRatex(femmodel);
+-		
+ 		if(isgia){
+ 			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
+ 			#ifdef _HAVE_GIAIVINS_
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 22471)
+@@ -107,6 +107,7 @@
+ #include "./Params/StringArrayParam.h"
+ #include "./Params/StringParam.h"
+ #include "./Params/TransientParam.h"
++#include "./Params/TransientArrayParam.h"
+ #include "./Params/DataSetParam.h"
+ 
+ /*matrix: */
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(revision 22471)
+@@ -0,0 +1,79 @@
++/*! \file TransientArrayParam.h 
++ *  \brief: header file for triavertexinput object
++ */
++
++#ifndef _TRANSIENTARRAYPARAM_H_
++#define _TRANSIENTARRAYPARAM_H_
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./Param.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++class TransientArrayParam: public Param{
++
++	protected: 
++		int         enum_type;
++		int         N;
++		int         M;
++		bool        interpolation;
++		IssmDouble *values;
++		IssmDouble *timesteps;
++
++	public:
++		/*TransientArrayParam constructors, destructors: {{{*/
++		TransientArrayParam();
++		TransientArrayParam(int in_enum_type,IssmDouble* in_values,IssmDouble* in_time,bool interpolation_on,int in_N,int in_M);
++		~TransientArrayParam();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		Param* copy();
++		void  DeepEcho();
++		void  Echo();
++		int   Id(); 
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int   ObjectEnum();
++		/*}}}*/
++		/*Param vritual function definitions: {{{*/
++		void  GetParameterValue(bool* pbool){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a bool");}
++		void  GetParameterValue(int* pinteger){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return an integer");}
++		void  GetParameterValue(int** pintarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return an array of integers");}
++		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a array of integers");}
++		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble");}
++		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time,int row);
++		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Parameter " <<EnumToStringx(enum_type) << " needs row to be specified");}
++		void  GetParameterValue(char** pstring){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string");}
++		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string array");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
++		void  GetParameterValue(IssmDouble*** parray, int* pM,int** pmdims, int** pndims){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a matrix array");}
++		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a Vec");}
++		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a Mat");}
++		void  GetParameterValue(FILE** pfid){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
++		int   InstanceEnum(){return enum_type;}
++
++		void  SetEnum(int enum_in){this->enum_type = enum_in;};
++		void  SetValue(bool boolean){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a boolean");}
++		void  SetValue(int integer){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold an integer");}
++		void  SetValue(IssmDouble scalar){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a scalar");}
++		void  SetValue(char* string){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a string");}
++		void  SetValue(char** stringarray,int M){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a string array");}
++		void  SetValue(IssmDouble* IssmDoublearray,int M){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a IssmDouble vec array");}
++		void  SetValue(IssmDouble* IssmDoublearray,int M,int N){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a IssmDouble array");}
++		void  SetValue(int* intarray,int M){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a int vec array");}
++		void  SetValue(int* intarray,int M,int N){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a int mat array");};
++		void  SetValue(Vector<IssmDouble>* vec){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a Vec");}
++		void  SetValue(Matrix<IssmDouble>* mat){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a Mat");}
++		void  SetValue(FILE* fid){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a FILE");}
++		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold an array of matrices");}
++		/*}}}*/
++};
++#endif  /* _TRANSIENTARRAYPARAM_H */
+
+Property changes on: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22471)
+@@ -33,6 +33,7 @@
+ #include "./StringParam.h"
+ #include "./DoubleMatArrayParam.h"
+ #include "./TransientParam.h"
++#include "./TransientArrayParam.h"
+ 
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+@@ -219,6 +220,12 @@
+ 				transparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+ 				this->AddObject(transparam);
+ 			}
++			else if(obj_enum==TransientArrayParamEnum){
++				TransientArrayParam* transarrayparam=NULL;
++				transarrayparam=new TransientArrayParam();
++				transarrayparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
++				this->AddObject(transarrayparam);
++			}
+ 			else if(obj_enum==GenericParamEnum){
+ 				/*Skip for now (we don't want to Marhsall Comms*/
+ 			}
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22471)
+@@ -0,0 +1,143 @@
++/*!\file TransientArrayParam.c
++ * \brief: implementation of the TransientArrayParam object
++ */
++
++/*header files: */
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../classes.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++/*TransientArrayParam constructors and destructor*/
++TransientArrayParam::TransientArrayParam(){/*{{{*/
++	return;
++}
++/*}}}*/
++TransientArrayParam::TransientArrayParam(int in_enum_type,IssmDouble* in_values,IssmDouble* in_time,bool interpolation_on,int in_N,int in_M){/*{{{*/
++
++	_assert_(in_values && in_time);
++
++	enum_type=in_enum_type;
++	N=in_N; //Number of time steps
++	M=in_M; //Number of rows
++	interpolation=interpolation_on;
++
++	values=xNew<IssmDouble>(N*M);
++	xMemCpy<IssmDouble>(values,in_values,N*M);
++
++	timesteps=xNew<IssmDouble>(N);
++	xMemCpy<IssmDouble>(timesteps,in_time,N);
++}
++/*}}}*/
++TransientArrayParam::~TransientArrayParam(){/*{{{*/
++	xDelete<IssmDouble>(values);
++	xDelete<IssmDouble>(timesteps);
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++Param* TransientArrayParam::copy() {/*{{{*/
++
++	return new TransientArrayParam(this->enum_type,this->values,this->timesteps,this->interpolation,this->N,this->M);
++
++}
++/*}}}*/
++void TransientArrayParam::DeepEcho(void){/*{{{*/
++
++	_printf_("TransientArrayParam:\n");
++	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++	_printf_("   number of time steps: " << this->N << "\n");
++	_printf_("   number of rows: " << this->M << "\n");
++	for(int i=0;i<this->N;i++){
++		_printf_("	time: " << this->timesteps[i] << "\n");
++		for(int k=0;k<this->M;k++){
++			_printf_("		values: " << this->values[k*N+i] << "\n");
++		}
++		_printf_("\n");
++	}
++}
++/*}}}*/
++void TransientArrayParam::Echo(void){/*{{{*/
++
++	_printf_("TransientArrayParam:\n");
++	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++	_printf_("   size: " << this->N << " by " << this->M << "\n");
++
++}
++/*}}}*/
++int  TransientArrayParam::Id(void){ return -1; }/*{{{*/
++/*}}}*/
++void TransientArrayParam::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
++
++	MARSHALLING_ENUM(TransientArrayParamEnum);
++
++	MARSHALLING(enum_type);
++	MARSHALLING(interpolation);
++	MARSHALLING(M);
++	MARSHALLING(N);
++	if(marshall_direction==MARSHALLING_BACKWARD){
++		values=xNew<IssmDouble>(N*M);
++		timesteps=xNew<IssmDouble>(N*M);
++	}
++	MARSHALLING_ARRAY(values,IssmDouble,N*M);
++	MARSHALLING_ARRAY(timesteps,IssmDouble,N*M);
++
++}/*}}}*/
++int  TransientArrayParam::ObjectEnum(void){/*{{{*/
++
++	return TransientArrayParamEnum;
++
++}
++/*}}}*/
++
++/*TransientArrayParam virtual functions definitions: */
++void  TransientArrayParam::GetParameterValue(IssmDouble* pdouble,IssmDouble time, int row){/*{{{*/
++
++	IssmDouble output;
++	bool   found;
++
++	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
++	 *fall within. Then interpolate the values on this interval: */
++	if(time<this->timesteps[0]){
++		/*get values for the first time: */
++		output=this->values[row*this->N];
++		found=true;
++	}
++	else if(time>this->timesteps[this->N-1]){
++		/*get values for the last time: */
++		output=this->values[(row+1)*this->N-1];
++		found=true;
++	}
++	else{
++		/*Find which interval we fall within: */
++		for(int i=0;i<this->N;i++){
++			if(time==this->timesteps[i]){
++				/*We are right on one step time: */
++				output=this->values[row*this->N+i];
++				found=true;
++				break; //we are done with the time interpolation.
++			}
++			else{
++				if(this->timesteps[i]<time && time<this->timesteps[i+1]){
++					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
++					IssmDouble deltat=this->timesteps[i+1]-this->timesteps[i];
++					IssmDouble alpha=(time-this->timesteps[i])/deltat;
++					if(interpolation==true) output=(1.0-alpha)*this->values[row*this->N+i] + alpha*this->values[row*this->N+i+1];
++					else output=this->values[row*this->N+i];
++					found=true;
++					break;
++				}
++				else continue; //keep looking on the next interval
++			}
++		}
++	}
++	if(!found)_error_("did not find time interval on which to interpolate values");
++	*pdouble=output;
++}
++/*}}}*/
+
+Property changes on: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22471)
+@@ -139,6 +139,7 @@
+ 		ElementMatrix*     NewElementMatrix(int approximation_enum=NoneApproximationEnum);
+ 		ElementMatrix*     NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
+ 		ElementVector*     NewElementVector(int approximation_enum=NoneApproximationEnum);
++		void					 PicoFloatingiceMeltingRate();
+ 		void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
+ 		IssmDouble         PureIceEnthalpy(IssmDouble pressure);
+ 		void               ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
+@@ -271,6 +272,7 @@
+ 		virtual void       NormalTop(IssmDouble* normal,IssmDouble* xyz_list)=0;
+ 		virtual int        NumberofNodesPressure(void)=0;
+ 		virtual int        NumberofNodesVelocity(void)=0;
++		virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
+ 		virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+ 		virtual int        PressureInterpolation()=0;
+ 		virtual void       ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22471)
+@@ -109,6 +109,7 @@
+ 		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
++		void        PicoUpdateBoxid(int* pmax_boxid_basin);
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int         PressureInterpolation();
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22471)
+@@ -138,6 +138,7 @@
+ 		int            NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		int            NumberofNodesPressure(void);
+ 		int            NumberofNodesVelocity(void);
++		void				PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
+ 		void           PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int            PressureInterpolation();
+ 		void           ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22471)
+@@ -127,6 +127,7 @@
+ 		void        NormalTop(IssmDouble* normal,IssmDouble* xyz_list){_error_("not implemented yet");};
+ 		int         NumberofNodesPressure(void){_error_("not implemented yet");};
+ 		int         NumberofNodesVelocity(void){_error_("not implemented yet");};
++		void        PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void){_error_("not implemented yet");};
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22471)
+@@ -135,6 +135,7 @@
+ 		void        NormalTop(IssmDouble* normal,IssmDouble* xyz_list);
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
++		void			PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};	
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void);
+ 		void        ResetFSBasalBoundaryCondition(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22471)
+@@ -2127,6 +2127,31 @@
+ 	return new ElementVector(nodes,this->GetNumberOfNodes(),this->parameters,approximation_enum);
+ }
+ /*}}}*/
++void       Element::PicoFloatingiceMeltingRate(){/*{{{*/
++
++	int numvertices      = this->GetNumberOfVertices();
++	IssmDouble  deepwaterel,upperwaterel,deepwatermelt;
++	IssmDouble* base     = xNew<IssmDouble>(numvertices);
++	IssmDouble* values   = xNew<IssmDouble>(numvertices);
++	IssmDouble time;
++
++	parameters->FindParam(&time,TimeEnum);
++	parameters->FindParam(&deepwaterel,BasalforcingsDeepwaterElevationEnum,time);
++	parameters->FindParam(&upperwaterel,BasalforcingsUpperwaterElevationEnum,time);
++	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum,time);
++
++	this->GetInputListOnVertices(base,BaseEnum);
++	for(int i=0;i<numvertices;i++){
++		if(base[i]>upperwaterel)      values[i]=0;
++		else if (base[i]<deepwaterel) values[i]=deepwatermelt;
++		else values[i]=deepwatermelt*(base[i]-upperwaterel)/(deepwaterel-upperwaterel);
++	}
++
++	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
++	xDelete<IssmDouble>(base);
++	xDelete<IssmDouble>(values);
++
++}/*}}}*/
+ void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac){/*{{{*/
+ 
+ 	int  numvertices = this->GetNumberOfVertices();
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22471)
+@@ -177,6 +177,17 @@
+ 		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+ 		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+ 	}
++
++	int basalforcing_model;
++	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
++	switch(basalforcing_model){
++		case BasalforcingsPicoEnum:
++			iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
++			break;
++		default: // Do nothing
++			break;
++	}
++	
+ }/*}}}*/
+ void MasstransportAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22471)
+@@ -92,10 +92,13 @@
+ 		case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins";
+ 		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
+ 		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
++		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
+ 		case BasalforcingsPicoOverturningCoeffEnum : return "BasalforcingsPicoOverturningCoeff";
+ 		case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT";
+-		case BasalforcingsPicoBox0temperatureEnum : return "BasalforcingsPicoBox0temperature";
+-		case BasalforcingsPicoBox0salinityEnum : return "BasalforcingsPicoBox0salinity";
++		case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature";
++		case BasalforcingsPicoFarOceansalinityEnum : return "BasalforcingsPicoFarOceansalinity";
++		case DistanceToGroundinglineEnum : return "DistanceToGroundingline";
++		case DistanceToCalvingfrontEnum : return "DistanceToCalvingfront";
+ 		case BedEnum : return "Bed";
+ 		case BaseEnum : return "Base";
+ 		case ConstantsGEnum : return "ConstantsG";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22471)
+@@ -92,10 +92,13 @@
+ 	      else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoBox0temperature")==0) return BasalforcingsPicoBox0temperatureEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoBox0salinity")==0) return BasalforcingsPicoBox0salinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum;
++	      else if (strcmp(name,"BasalforcingsPicoFarOceansalinity")==0) return BasalforcingsPicoFarOceansalinityEnum;
++	      else if (strcmp(name,"DistanceToGroundingline")==0) return DistanceToGroundinglineEnum;
++	      else if (strcmp(name,"DistanceToCalvingfront")==0) return DistanceToCalvingfrontEnum;
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"Base")==0) return BaseEnum;
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+@@ -133,13 +136,13 @@
+ 	      else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum;
+ 	      else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
+ 	      else if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
+-	      else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
+-	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
+-	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
++	      if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
++	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
++	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
++	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
+ 	      else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
+ 	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
+ 	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
+@@ -256,13 +259,13 @@
+ 	      else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
+-	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"DamageF")==0) return DamageFEnum;
++	      if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
++	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
++	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
++	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+@@ -379,13 +382,13 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
+-	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+-	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+-	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
++	      if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
++	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
++	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
++	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum;
+@@ -502,7 +505,10 @@
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+ 	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+-	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
+ 	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+ 	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
+ 	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
+@@ -511,15 +517,9 @@
+ 	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
+ 	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
+ 	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
++	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+ 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
++	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+ 	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
+ 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+@@ -628,7 +628,10 @@
+ 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+ 	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+ 	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+-	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+ 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+ 	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+ 	      else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum;
+@@ -637,15 +640,9 @@
+ 	      else if (strcmp(name,"Divergence")==0) return DivergenceEnum;
+ 	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
++	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+@@ -754,7 +751,10 @@
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+-	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+@@ -763,15 +763,9 @@
+ 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"VxObs")==0) return VxObsEnum;
++	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
++	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+@@ -880,7 +874,10 @@
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+ 	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+ 	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+-	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
+ 	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
+ 	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
+ 	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
+@@ -889,15 +886,9 @@
+ 	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
+ 	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
+ 	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
++	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
+ 	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
++	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+ 	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+@@ -1006,7 +997,10 @@
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+ 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+-	      else if (strcmp(name,"Option")==0) return OptionEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+@@ -1015,16 +1009,10 @@
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
++	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+ 	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+ 	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
+ 	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+@@ -1132,7 +1120,10 @@
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+-	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+ 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+ 	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
+@@ -1141,16 +1132,10 @@
+ 	      else if (strcmp(name,"Open")==0) return OpenEnum;
+ 	      else if (strcmp(name,"Air")==0) return AirEnum;
+ 	      else if (strcmp(name,"Ice")==0) return IceEnum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"Melange")==0) return MelangeEnum;
++	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
++	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+ 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22470)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22471)
+@@ -161,6 +161,7 @@
+ 		case 2: return LinearFloatingMeltRateEnum;
+ 		case 3: return MismipFloatingMeltRateEnum;
+ 		case 4: return MantlePlumeGeothermalFluxEnum;
++		case 5: return BasalforcingsPicoEnum;
+ 		default: _error_("Marshalled Basal Forcings code \""<<enum_in<<"\" not supported yet");
+ 	}
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22471-22472.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22471-22472.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22471-22472.diff	(revision 22755)
@@ -0,0 +1,285 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 22471)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 22472)
+@@ -483,6 +483,7 @@
+ syn keyword cType Nodalvalue
+ syn keyword cType Node
+ syn keyword cType Nodes
++syn keyword cType Numberedcostfunction
+ syn keyword cType Numericalflux
+ syn keyword cType Observation
+ syn keyword cType Observations
+@@ -516,6 +517,7 @@
+ syn keyword cType Tetra
+ syn keyword cType TetraInput
+ syn keyword cType TetraRef
++syn keyword cType TransientArrayParam
+ syn keyword cType TransientInput
+ syn keyword cType TransientParam
+ syn keyword cType Tria
+@@ -637,6 +639,17 @@
+ syn keyword cConstant LinearFloatingMeltRateEnum
+ syn keyword cConstant MismipFloatingMeltRateEnum
+ syn keyword cConstant MantlePlumeGeothermalFluxEnum
++syn keyword cConstant BasalforcingsPicoEnum
++syn keyword cConstant BasalforcingsPicoNumBasinsEnum
++syn keyword cConstant BasalforcingsPicoBasinIdEnum
++syn keyword cConstant BasalforcingsPicoMaxboxcountEnum
++syn keyword cConstant BasalforcingsPicoBoxIdEnum
++syn keyword cConstant BasalforcingsPicoOverturningCoeffEnum
++syn keyword cConstant BasalforcingsPicoGammaTEnum
++syn keyword cConstant BasalforcingsPicoFarOceantemperatureEnum
++syn keyword cConstant BasalforcingsPicoFarOceansalinityEnum
++syn keyword cConstant DistanceToGroundinglineEnum
++syn keyword cConstant DistanceToCalvingfrontEnum
+ syn keyword cConstant BedEnum
+ syn keyword cConstant BaseEnum
+ syn keyword cConstant ConstantsGEnum
+@@ -682,15 +695,25 @@
+ syn keyword cConstant FrictionCouplingEnum
+ syn keyword cConstant GeometryHydrostaticRatioEnum
+ syn keyword cConstant HydrologyModelEnum
++syn keyword cConstant HydrologyNumRequestedOutputsEnum
++syn keyword cConstant HydrologyRequestedOutputsEnum
+ syn keyword cConstant HydrologyshreveEnum
+ syn keyword cConstant HydrologyshreveStabilizationEnum
+ syn keyword cConstant HydrologydcEnum
++syn keyword cConstant HydrologydtEnum
++syn keyword cConstant HydrologyStepsPerStepEnum
+ syn keyword cConstant SedimentHeadEnum
+ syn keyword cConstant SedimentHeadOldEnum
++syn keyword cConstant SedimentHeadStackedEnum
++syn keyword cConstant SedimentHeadTimeAverageEnum
+ syn keyword cConstant SedimentHeadResidualEnum
+ syn keyword cConstant EffectivePressureEnum
++syn keyword cConstant EffectivePressureStackedEnum
++syn keyword cConstant EffectivePressureTimeAverageEnum
+ syn keyword cConstant EplHeadEnum
+ syn keyword cConstant EplHeadOldEnum
++syn keyword cConstant EplHeadStackedEnum
++syn keyword cConstant EplHeadTimeAverageEnum
+ syn keyword cConstant EplHeadSlopeXEnum
+ syn keyword cConstant EplHeadSlopeYEnum
+ syn keyword cConstant EplZigZagCounterEnum
+@@ -710,6 +733,8 @@
+ syn keyword cConstant HydrologydcEplMaxThicknessEnum
+ syn keyword cConstant HydrologydcEplThicknessEnum
+ syn keyword cConstant HydrologydcEplThicknessOldEnum
++syn keyword cConstant HydrologydcEplThicknessStackedEnum
++syn keyword cConstant HydrologydcEplThicknessTimeAverageEnum
+ syn keyword cConstant HydrologydcEplThickCompEnum
+ syn keyword cConstant HydrologydcEplConductivityEnum
+ syn keyword cConstant HydrologydcIsefficientlayerEnum
+@@ -722,9 +747,6 @@
+ syn keyword cConstant HydrologydcPenaltyLockEnum
+ syn keyword cConstant HydrologydcEplflipLockEnum
+ syn keyword cConstant HydrologydcBasalMoulinInputEnum
+-syn keyword cConstant HydrologyLayerEnum
+-syn keyword cConstant HydrologySedimentEnum
+-syn keyword cConstant HydrologyEfficientEnum
+ syn keyword cConstant HydrologySedimentKmaxEnum
+ syn keyword cConstant HydrologysommersEnum
+ syn keyword cConstant HydrologyHeadEnum
+@@ -739,6 +761,7 @@
+ syn keyword cConstant HydrologyRelaxationEnum
+ syn keyword cConstant HydrologyBasalFluxEnum
+ syn keyword cConstant HydrologyStorageEnum
++syn keyword cConstant DegreeOfChannelizationEnum
+ syn keyword cConstant InversionControlParametersEnum
+ syn keyword cConstant InversionControlScalingFactorsEnum
+ syn keyword cConstant InversionCostFunctionThresholdEnum
+@@ -767,6 +790,7 @@
+ syn keyword cConstant InversionVxObsEnum
+ syn keyword cConstant InversionVyObsEnum
+ syn keyword cConstant InversionVzObsEnum
++syn keyword cConstant InversionVelObsEnum
+ syn keyword cConstant MaskIceLevelsetEnum
+ syn keyword cConstant MaskOceanLevelsetEnum
+ syn keyword cConstant MaskLandLevelsetEnum
+@@ -809,9 +833,17 @@
+ syn keyword cConstant CalvingLawEnum
+ syn keyword cConstant CalvingCalvingrateEnum
+ syn keyword cConstant CalvingMeltingrateEnum
++syn keyword cConstant CalvingHeightAboveFloatationEnum
+ syn keyword cConstant CalvingLevermannEnum
+-syn keyword cConstant CalvingDevEnum
++syn keyword cConstant CalvingVonmisesEnum
+ syn keyword cConstant CalvingMinthicknessEnum
++syn keyword cConstant CalvingHabEnum
++syn keyword cConstant CalvingCrevasseDepthEnum
++syn keyword cConstant CalvingDev2Enum
++syn keyword cConstant SurfaceCrevasseEnum
++syn keyword cConstant BasalCrevasseEnum
++syn keyword cConstant CrevasseDepthEnum
++syn keyword cConstant WaterheightEnum
+ syn keyword cConstant DefaultCalvingEnum
+ syn keyword cConstant CalvinglevermannCoeffEnum
+ syn keyword cConstant CalvinglevermannMeltingrateEnum
+@@ -823,6 +855,7 @@
+ syn keyword cConstant CalvingStressThresholdGroundediceEnum
+ syn keyword cConstant CalvingStressThresholdFloatingiceEnum
+ syn keyword cConstant CalvingMaxEnum
++syn keyword cConstant SigmaVMEnum
+ syn keyword cConstant StrainRateparallelEnum
+ syn keyword cConstant StrainRateperpendicularEnum
+ syn keyword cConstant StrainRateeffectiveEnum
+@@ -839,9 +872,12 @@
+ syn keyword cConstant MaterialsMantleDensityEnum
+ syn keyword cConstant MaterialsEarthDensityEnum
+ syn keyword cConstant MeshAverageVertexConnectivityEnum
++syn keyword cConstant MeshLatEnum
++syn keyword cConstant MeshLongEnum
+ syn keyword cConstant MeshXEnum
+ syn keyword cConstant MeshYEnum
+ syn keyword cConstant MeshZEnum
++syn keyword cConstant MeshScaleFactorEnum
+ syn keyword cConstant MeshElementsEnum
+ syn keyword cConstant MeshNumberofelementsEnum
+ syn keyword cConstant MeshNumberoflayersEnum
+@@ -908,8 +944,10 @@
+ syn keyword cConstant TimesteppingTimeAdaptEnum
+ syn keyword cConstant TimesteppingTimeStepEnum
+ syn keyword cConstant TimesteppingInterpForcingsEnum
++syn keyword cConstant TimesteppingCouplingTimeEnum
+ syn keyword cConstant TransientIssmbEnum
+ syn keyword cConstant TransientIscouplerEnum
++syn keyword cConstant TransientIsoceancouplingEnum
+ syn keyword cConstant TransientIsstressbalanceEnum
+ syn keyword cConstant TransientIsgroundinglineEnum
+ syn keyword cConstant TransientIsmasstransportEnum
+@@ -922,9 +960,11 @@
+ syn keyword cConstant TransientIsslrEnum
+ syn keyword cConstant TransientNumRequestedOutputsEnum
+ syn keyword cConstant TransientRequestedOutputsEnum
++syn keyword cConstant BalancethicknessSpcthicknessEnum
+ syn keyword cConstant BalancethicknessApparentMassbalanceEnum
+ syn keyword cConstant BalancethicknessDiffusionCoefficientEnum
+ syn keyword cConstant BalancethicknessOmegaEnum
++syn keyword cConstant BalancethicknessOmega0Enum
+ syn keyword cConstant BalancethicknessD0Enum
+ syn keyword cConstant SmbEnum
+ syn keyword cConstant SmbAnalysisEnum
+@@ -983,6 +1023,8 @@
+ syn keyword cConstant SmbWEnum
+ syn keyword cConstant SmbAEnum
+ syn keyword cConstant SmbTEnum
++syn keyword cConstant SmbAValueEnum
++syn keyword cConstant SmbTeValueEnum
+ syn keyword cConstant SmbIsgraingrowthEnum
+ syn keyword cConstant SmbIsalbedoEnum
+ syn keyword cConstant SmbIsshortwaveEnum
+@@ -997,6 +1039,7 @@
+ syn keyword cConstant SmbDelta18oEnum
+ syn keyword cConstant SmbDelta18oSurfaceEnum
+ syn keyword cConstant SmbIsdelta18oEnum
++syn keyword cConstant SmbIssetpddfacEnum
+ syn keyword cConstant SmbIsmungsmEnum
+ syn keyword cConstant SmbIsd18opdEnum
+ syn keyword cConstant SmbPrecipitationsPresentdayEnum
+@@ -1004,6 +1047,8 @@
+ syn keyword cConstant SmbTemperaturesPresentdayEnum
+ syn keyword cConstant SmbTemperaturesLgmEnum
+ syn keyword cConstant SmbPrecipitationEnum
++syn keyword cConstant SmbPddfacSnowEnum
++syn keyword cConstant SmbPddfacIceEnum
+ syn keyword cConstant SmbDesfacEnum
+ syn keyword cConstant SmbS0pEnum
+ syn keyword cConstant SmbS0tEnum
+@@ -1064,6 +1109,9 @@
+ syn keyword cConstant TemperaturePDDEnum
+ syn keyword cConstant ThicknessAbsMisfitEnum
+ syn keyword cConstant SurfaceAbsMisfitEnum
++syn keyword cConstant OmegaAbsGradientEnum
++syn keyword cConstant EtaDiffEnum
++syn keyword cConstant EtaAbsGradientEnum
+ syn keyword cConstant VelEnum
+ syn keyword cConstant VelocityEnum
+ syn keyword cConstant VxAverageEnum
+@@ -1250,6 +1298,7 @@
+ syn keyword cConstant RegionaloutputEnum
+ syn keyword cConstant VxObsEnum
+ syn keyword cConstant VyObsEnum
++syn keyword cConstant NumberedcostfunctionEnum
+ syn keyword cConstant AbsoluteEnum
+ syn keyword cConstant IncrementalEnum
+ syn keyword cConstant AugmentedLagrangianREnum
+@@ -1263,6 +1312,7 @@
+ syn keyword cConstant SubelementMigrationEnum
+ syn keyword cConstant SubelementMigration2Enum
+ syn keyword cConstant SubelementMigration3Enum
++syn keyword cConstant SubelementMigration4Enum
+ syn keyword cConstant ContactEnum
+ syn keyword cConstant GroundingOnlyEnum
+ syn keyword cConstant MaskGroundediceLevelsetEnum
+@@ -1365,9 +1415,15 @@
+ syn keyword cConstant LoveHiEnum
+ syn keyword cConstant LoveKiEnum
+ syn keyword cConstant LoveLiEnum
++syn keyword cConstant LoveKernelsEnum
++syn keyword cConstant LoveKernelsRealEnum
++syn keyword cConstant LoveKernelsImagEnum
+ syn keyword cConstant EsaUmotionEnum
+ syn keyword cConstant EsaNmotionEnum
+ syn keyword cConstant EsaEmotionEnum
++syn keyword cConstant EsaXmotionEnum
++syn keyword cConstant EsaYmotionEnum
++syn keyword cConstant EsaHemisphereEnum
+ syn keyword cConstant EsaStrainratexxEnum
+ syn keyword cConstant EsaStrainratexyEnum
+ syn keyword cConstant EsaStrainrateyyEnum
+@@ -1380,10 +1436,10 @@
+ syn keyword cConstant EsaNumRequestedOutputsEnum
+ syn keyword cConstant TransientAmrFrequencyEnum
+ syn keyword cConstant AmrTypeEnum
++syn keyword cConstant AmrRestartEnum
+ syn keyword cConstant AmrNeopzEnum
+ syn keyword cConstant AmrLevelMaxEnum
+ syn keyword cConstant AmrLagEnum
+-syn keyword cConstant AmrRadiusLevelMaxEnum
+ syn keyword cConstant AmrBamgEnum
+ syn keyword cConstant AmrHminEnum
+ syn keyword cConstant AmrHmaxEnum
+@@ -1397,8 +1453,12 @@
+ syn keyword cConstant AmrIceFrontDistanceEnum
+ syn keyword cConstant AmrThicknessErrorResolutionEnum
+ syn keyword cConstant AmrThicknessErrorThresholdEnum
++syn keyword cConstant AmrThicknessErrorGroupThresholdEnum
++syn keyword cConstant AmrThicknessErrorMaximumEnum
+ syn keyword cConstant AmrDeviatoricErrorResolutionEnum
+ syn keyword cConstant AmrDeviatoricErrorThresholdEnum
++syn keyword cConstant AmrDeviatoricErrorGroupThresholdEnum
++syn keyword cConstant AmrDeviatoricErrorMaximumEnum
+ syn keyword cConstant DeviatoricStressErrorEstimatorEnum
+ syn keyword cConstant ThicknessErrorEstimatorEnum
+ syn keyword cConstant ParametersENDEnum
+@@ -1427,6 +1487,7 @@
+ syn keyword cConstant IntParamEnum
+ syn keyword cConstant IntVecParamEnum
+ syn keyword cConstant TransientParamEnum
++syn keyword cConstant TransientArrayParamEnum
+ syn keyword cConstant MaticeEnum
+ syn keyword cConstant MatlithoEnum
+ syn keyword cConstant MatdamageiceEnum
+@@ -1551,13 +1612,21 @@
+ syn keyword cConstant MaxVzEnum
+ syn keyword cConstant MaxAbsVzEnum
+ syn keyword cConstant FloatingAreaEnum
++syn keyword cConstant FloatingAreaScaledEnum
+ syn keyword cConstant GroundedAreaEnum
++syn keyword cConstant GroundedAreaScaledEnum
+ syn keyword cConstant IceMassEnum
++syn keyword cConstant IceMassScaledEnum
+ syn keyword cConstant IceVolumeEnum
++syn keyword cConstant IceVolumeScaledEnum
+ syn keyword cConstant IceVolumeAboveFloatationEnum
++syn keyword cConstant IceVolumeAboveFloatationScaledEnum
+ syn keyword cConstant TotalFloatingBmbEnum
++syn keyword cConstant TotalFloatingBmbScaledEnum
+ syn keyword cConstant TotalGroundedBmbEnum
++syn keyword cConstant TotalGroundedBmbScaledEnum
+ syn keyword cConstant TotalSmbEnum
++syn keyword cConstant TotalSmbScaledEnum
+ syn keyword cConstant P0Enum
+ syn keyword cConstant P0ArrayEnum
+ syn keyword cConstant P1Enum
Index: /issm/oecreview/Archive/21724-22754/ISSM-22472-22473.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22472-22473.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22472-22473.diff	(revision 22755)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22472)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22473)
+@@ -106,7 +106,7 @@
+ 	}
+ 
+ 	//2 Get area of the boxes
+-	boxareas=new Vector<IssmDouble>(num_basins*maxbox);
++	boxareas=xNew<IssmDouble>(num_basins*maxbox);
+ 	for(i=0;i<num_basins*maxbox;i++){boxareas[i]=0.;}
+ 	for(i=0;i<femmodel->elements->Size();i++){
+ 		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+@@ -113,7 +113,8 @@
+ 		if(!element->IsFloating()) continue;
+ 		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 		element->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-		boxareas[basinid*maxbox+boxid]+=element->GetArea();
++		_error_("fix thi");
++		//boxareas[basinid*maxbox+boxid]+=element->GetArea();
+ 	}
+ 
+ 	//3 Compute variables in first box
+@@ -137,5 +138,4 @@
+ 	xDelete<IssmDouble>(boxareas);
+ 	xDelete<IssmDouble>(t_farocean);
+    xDelete<IssmDouble>(s_farocean);
+-	xDelete<IssmDouble>(element);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22472)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22473)
+@@ -212,9 +212,9 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_temperature");
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceanTemperatureEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
+ 				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_salinity");
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceanSalinityEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
+ 			break;
+ 		default:
+ 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22472)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22473)
+@@ -110,6 +110,7 @@
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
+ 		void        PicoUpdateBoxid(int* pmax_boxid_basin);
++		void        PicoUpdateFirstBox(void);
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int         PressureInterpolation();
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22472)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22473)
+@@ -273,6 +273,7 @@
+ 		virtual int        NumberofNodesPressure(void)=0;
+ 		virtual int        NumberofNodesVelocity(void)=0;
+ 		virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
++		virtual void       PicoUpdateFirstBox(void){_error_("not implemented");};
+ 		virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+ 		virtual int        PressureInterpolation()=0;
+ 		virtual void       ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22472)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22473)
+@@ -2787,7 +2787,7 @@
+ 	rhoi			= this->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	rhow			= this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
+-	rho_star		= 1033;             //kg/m^3
++	rho_star		= 1033.;             //kg/m^3
+ 	nu				= rhoi/rhow;
+ 	latentheat	= this->GetMaterialParameter(MaterialsLatentheatEnum);
+ 	c_p_ocean	= this->GetMaterialParameter(MaterialsThermalExchangeVelocityEnum);
+@@ -2800,8 +2800,8 @@
+ 
+ 	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+ 	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+-	this->parameters->FindParam(&t_farocean,BasalforcingsPicoFarOceanTemperatureEnum);
+-	this->parameters->FindParam(&s_farocean,BasalforcingsPicoFarOceanSalinityEnum);
++	this->parameters->FindParam(&t_farocean,BasalforcingsPicoFarOceansalinityEnum);
++	this->parameters->FindParam(&s_farocean,BasalforcingsPicoFarOceansalinityEnum);
+ 
+ 	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+@@ -2808,6 +2808,9 @@
+ 	this->inputs->GetInputValue(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+ 	this->inputs->GetInputValue(&thickness,ThicknessEnum);
+ 
++	_error_("to be continued");
++	/*
++
+ 	toc_farocean = t_farocean[basinid];
+ 	soc_farocean = s_farocean[basinid];
+ 	area_box1 = areas[basinid*maxbox+boxid];
+@@ -2826,6 +2829,7 @@
+ 	overturning = overturning_coeff*rho_star*(Beta*(soc_farocean-Soc)-alpha*(toc_farocean-Toc));
+ 
+ 	this->AddInput(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,this->GetElementType());
++	*/
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22473-22474.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22473-22474.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22473-22474.diff	(revision 22755)
@@ -0,0 +1,207 @@
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22473)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22474)
+@@ -69,6 +69,7 @@
+ 			break;
+ 		case CalvingHabEnum:
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
++			iomodel->FetchDataToInput(elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);
+ 			break;
+ 		case CalvingCrevasseDepthEnum:
+ 			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
+@@ -99,7 +100,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.min_thickness",CalvingMinthicknessEnum));
+ 			break;
+ 		case CalvingHabEnum:
+-			parameters->AddObject(iomodel->CopyConstantObject("md.calving.flotation_fraction",CalvingHabEnum));
+ 			break;
+ 		case CalvingCrevasseDepthEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.calving.critical_fraction",CalvingCrevasseDepthEnum));
+@@ -739,9 +739,10 @@
+ 
+ 	/*Intermediaries*/
+ 	int         calvinglaw;
+-	IssmDouble  min_thickness,thickness,flotation_fraction;
++	IssmDouble  min_thickness,thickness,hab_fraction;
+ 	IssmDouble  rho_ice,rho_water,constant_g,rheology_B,rheology_n;
+ 	IssmDouble  bed,water_depth;
++	IssmDouble  levelset;
+ 
+ 	femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum);
+ 
+@@ -778,8 +779,9 @@
+ 	if(calvinglaw==CalvingHabEnum){
+ 
+ 		/*Get the fraction of the flotation thickness at the terminus*/
+-		femmodel->parameters->FindParam(&flotation_fraction,CalvingHabEnum);
+-
++		femmodel->elements->InputDuplicate(MaskIceLevelsetEnum, DistanceToCalvingfrontEnum);
++		femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum);
++		
+ 		/*Loop over all elements of this partition*/
+ 		for(int i=0;i<femmodel->elements->Size();i++){
+ 			Element* element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+@@ -787,10 +789,12 @@
+ 			rho_ice = element->GetMaterialParameter(MaterialsRhoIceEnum);
+ 			rho_water = element->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 
+-			int      numnodes = element->GetNumberOfNodes();
+-			Gauss*   gauss    = element->NewGauss();
+-			Input*   H_input  = element->GetInput(ThicknessEnum); _assert_(H_input);
+-			Input*   bed      = element->GetInput(BedEnum); _assert_(bed);
++			int      numnodes           = element->GetNumberOfNodes();
++			Gauss*   gauss              = element->NewGauss();
++			Input*   H_input            = element->GetInput(ThicknessEnum); _assert_(H_input);
++			Input*   bed                = element->GetInput(BedEnum); _assert_(bed);
++			Input*   hab_fraction_input = element->GetInput(CalvingHabFractionEnum); _assert_(hab_fraction_input);
++			Input*   ls_input           = element->GetInput(DistanceToCalvingfrontEnum); _assert_(ls_input);
+ 
+ 			/*Potentially constrain nodes of this element*/
+ 			for(int in=0;in<numnodes;in++){
+@@ -798,7 +802,10 @@
+ 				Node* node=element->GetNode(in);
+ 				H_input->GetInputValue(&thickness,gauss);
+ 				bed->GetInputValue(&water_depth,gauss);
+-				if(thickness<((rho_water/rho_ice)*(1+flotation_fraction)*-water_depth)){
++				ls_input->GetInputValue(&levelset,gauss);
++				hab_fraction_input->GetInputValue(&hab_fraction,gauss);
++
++				if(thickness<((rho_water/rho_ice)*(1+hab_fraction)*-water_depth) && levelset>-300){
+ 					node->ApplyConstraint(0,+1.);
+ 				}
+ 				else {
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22473)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22474)
+@@ -281,6 +281,7 @@
+ 	CalvingVonmisesEnum,
+ 	CalvingMinthicknessEnum,
+ 	CalvingHabEnum,
++	CalvingHabFractionEnum,
+ 	CalvingCrevasseDepthEnum,
+ 	CalvingDev2Enum,
+ 	SurfaceCrevasseEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22473)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22474)
+@@ -287,6 +287,7 @@
+ 		case CalvingVonmisesEnum : return "CalvingVonmises";
+ 		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+ 		case CalvingHabEnum : return "CalvingHab";
++		case CalvingHabFractionEnum : return "CalvingHabFraction";
+ 		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
+ 		case CalvingDev2Enum : return "CalvingDev2";
+ 		case SurfaceCrevasseEnum : return "SurfaceCrevasse";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22473)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22474)
+@@ -293,6 +293,7 @@
+ 	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+ 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
++	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+ 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
+ 	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
+ 	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+-	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
++	      if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
++	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+-	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
++	      if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
++	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
+ 	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+ 	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
+ 	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+ 	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+-	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
++	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
++	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+ 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+ 	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+ 	      else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+-	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
++	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+ 	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+-	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
++	      if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
++	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
+ 	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
+ 	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
+ 	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+-	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"Option")==0) return OptionEnum;
++	      if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
++	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+-	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
++	      if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
++	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+ 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+ 	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22474-22475.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22474-22475.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22474-22475.diff	(revision 22755)
@@ -0,0 +1,435 @@
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22474)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22475)
+@@ -177,6 +177,7 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdensification",SmbIsdensificationEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isturbulentflux",SmbIsturbulentfluxEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum));
++			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ThermoDeltaTScaling",SmbThermoDeltaTScalingEnum));
+ 			break;
+ 		case SMBpddEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22474)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22475)
+@@ -434,6 +434,7 @@
+ 	/*SMBgemb*/
+ 	SMBgembEnum,
+ 	SmbInitDensityScalingEnum,
++	SmbThermoDeltaTScalingEnum,
+ 	SmbTaEnum,
+ 	SmbVEnum,
+ 	SmbDswrfEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22474)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22475)
+@@ -436,6 +436,7 @@
+ 		case SmbMassBalanceEnum : return "SmbMassBalance";
+ 		case SMBgembEnum : return "SMBgemb";
+ 		case SmbInitDensityScalingEnum : return "SmbInitDensityScaling";
++		case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling";
+ 		case SmbTaEnum : return "SmbTa";
+ 		case SmbVEnum : return "SmbV";
+ 		case SmbDswrfEnum : return "SmbDswrf";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22474)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22475)
+@@ -445,6 +445,7 @@
+ 	      else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;
+ 	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
+ 	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
++	      else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
+ 	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
+ 	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
+ 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+-	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
++	      if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
++	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+ 	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
+ 	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+ 	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+-	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
++	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
++	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+ 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+ 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+ 	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+ 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+ 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+-	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
++	      if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
++	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+ 	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
+ 	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
+ 	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+-	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
++	      if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
++	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+-	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
++	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
++	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+ 	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+ 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22474)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22475)
+@@ -26,7 +26,7 @@
+ void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid);
+ void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
+ void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
+-void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid);
++void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid);
+ void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, int aIdx,IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow, IssmDouble dIce, int sid); 
+ void melt(IssmDouble* pM, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble* pdz_add, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin, IssmDouble zTop, IssmDouble dIce, int sid);
+ void densification(IssmDouble** pd,IssmDouble** pdz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean, IssmDouble dIce, int m, int sid);
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22474)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22475)
+@@ -344,11 +344,12 @@
+ 	//   2 : effective grain radius (Brun et al., 2009)
+ 	//   3 : density and cloud amount (Greuell & Konzelmann, 1994)
+ 	//   4 : exponential time decay & wetness (Bougamont & Bamber, 2005)
++	//   5 : ingest MODIS mode, direct input from aValue parameter applied to surface ice only
+ 
+ 	//// Inputs
+ 	// aIdx      = albedo method to use
+ 
+-	// Method 0
++	// Method 0 & 5
+ 	//  aValue   = direct input value for albedo
+ 
+ 	// Methods 1 & 2
+@@ -494,7 +495,10 @@
+         xDelete<IssmDouble>(d_a);
+ 
+ 	}
+-	else _error_("albedo method switch should range from 0 to 4!");
++	else if(aIdx==5){
++		for(int i=0;i<m;i++)if(dIce - d[i]<Dtol) a[i] = aValue;
++	}
++	else _error_("albedo method switch should range from 0 to 5!");
+ 	
+ 	// Check for erroneous values
+ 	if (a[0] > 1) _printf_("albedo > 1.0\n");
+@@ -505,7 +509,7 @@
+ 	*pa=a;
+ 
+ }  /*}}}*/
+-void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble dIce, int sid) { /*{{{*/
++void thermo(IssmDouble* pEC, IssmDouble** pT, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlwrf, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid) { /*{{{*/
+ 
+ 	/* ENGLACIAL THERMODYNAMICS*/
+ 	 
+@@ -527,6 +531,7 @@
+ 	//  elev: surface elevation [m a.s.l.] 
+ 	//  Vz: air temperature height above surface [m]
+ 	//  Tz: wind height above surface [m]
++	//  thermo_scaling: scaling factor to multiply the thermal diffusion timestep (delta t) 
+ 
+ 	// OUTPUTS
+ 	// T: grid cell temperature [k]
+@@ -663,9 +668,9 @@
+ 	for(int i=0;i<m-1;i++) dzD[i] = dz[i+1];
+ 
+ 	// determine minimum acceptable delta t (diffusion number > 1/2) [s]
+-	// NS: 2.16.18 divided dt by 11 for stability (changed 3 to 33)
++	// NS: 2.16.18 divided dt by scaling factor, default set to 1/11 for stability
+ 	dt=1e12; 
+-	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (33 * K[i]));
++	for(int i=0;i<m;i++)dt = fmin(dt,CI * pow(dz[i],2) * d[i]  / (3 * K[i]) * thermo_scaling);
+ 
+ 	// smallest possible even integer of 60 min where diffusion number > 1/2
+ 	// must go evenly into one hour or the data frequency if it is smaller
+@@ -1170,7 +1175,7 @@
+ 				T[0] = (T_air * P + T[0] * mInit[0])/mass;
+ 
+ 				// adjust a, re, gdn & gsp
+-				if(aIdx>0)a[0] = (aSnow * P + a[0] * mInit[0])/mass;
++				if(aIdx>0 | aIdx!=5 | (aIdx==5 & !(dIce - d[0]<Dtol)))a[0] = (aSnow * P + a[0] * mInit[0])/mass;
+ 				re[0] = (reNew * P + re[0] * mInit[0])/mass;
+ 				gdn[0] = (gdnNew * P + gdn[0] * mInit[0])/mass;
+ 				gsp[0] = (gspNew * P + gsp[0] * mInit[0])/mass;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22474)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22475)
+@@ -2604,6 +2604,7 @@
+ 	IssmDouble dMass=0.0;
+ 	bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux;
+ 	IssmDouble init_scaling=0.0;
++	IssmDouble thermo_scaling=1.0;
+ 
+ 	/*}}}*/
+ 	/*Output variables:{{{ */
+@@ -2665,6 +2666,7 @@
+ 	parameters->FindParam(&isdensification,SmbIsdensificationEnum);
+ 	parameters->FindParam(&isturbulentflux,SmbIsturbulentfluxEnum);
+ 	parameters->FindParam(&init_scaling,SmbInitDensityScalingEnum);
++	parameters->FindParam(&thermo_scaling,SmbThermoDeltaTScalingEnum);
+ 
+ 	/*}}}*/
+ 	/*Retrieve inputs: {{{*/
+@@ -2848,7 +2850,7 @@
+ 		netSW = cellsum(swf,m);
+ 
+ 		/*Thermal profile computation:*/
+-		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, teValue, W[0], smb_dt, m, Vz, Tz,rho_ice,this->Sid());
++		if(isthermal)thermo(&EC, &T, dz, d, swf, dlw, Ta, V, eAir, pAir, teValue, W[0], smb_dt, m, Vz, Tz, thermo_scaling,rho_ice,this->Sid());
+ 
+ 		/*Change in thickness of top cell due to evaporation/condensation  assuming same density as top cell. 
+ 		 * need to fix this in case all or more of cell evaporates */
+Index: ../trunk-jpl/src/m/classes/SMBgemb.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.py	(revision 22474)
++++ ../trunk-jpl/src/m/classes/SMBgemb.py	(revision 22475)
+@@ -65,6 +65,8 @@
+ 					  # 2: effective grain radius [Brun et al., 2009]
+ 					  # 3: density and cloud amount [Greuell & Konzelmann, 1994]
+ 					  # 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
++					  # 5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only
++
+ 		swIdx  = float('NaN')	# apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
+ 
+ 		denIdx = float('NaN')	#densification model to use (default is 2):
+@@ -95,6 +97,9 @@
+ 
+ 		#densities:
+ 		InitDensityScaling =  float('NaN')	#initial scaling factor multiplying the density of ice, which describes the density of the snowpack.
++
++		#thermo:
++		ThermoDeltaTScaling = float('NaN') #scaling factor to multiply the thermal diffusion timestep (delta t)
+ 		
+ 		requested_outputs      = []
+ 
+@@ -137,6 +142,7 @@
+ 		string = "%s\n%s"%(string,fielddisplay(self,'zMin','initial min model depth (default is min(thickness,30)) [m]'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'InitDensityScaling',['initial scaling factor multiplying the density of ice','which describes the density of the snowpack.']))
++		string = "%s\n%s"%(string,fielddisplay(self,'ThermoDeltaTScaling','scaling factor to multiply the thermal diffusion timestep (delta t)'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'))
+ 		string = "%s\n%s"%(string,fielddisplay(self,'aIdx',['method for calculating albedo and subsurface absorption (default is 1)',
+ 			         '0: direct input from aValue parameter',
+@@ -143,7 +149,8 @@
+ 						'1: effective grain radius [Gardner & Sharp, 2009]',
+ 						'2: effective grain radius [Brun et al., 2009]',
+ 						'3: density and cloud amount [Greuell & Konzelmann, 1994]',
+-						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]']))
++						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',
++						'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only']))
+ 
+ 		string = "%s\n%s"%(string,fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)'))
+                                
+@@ -163,8 +170,10 @@
+ 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
+ 			string = "%s\n%s"%(string,fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)'))
+ 			string = "%s\n%s"%(string,fielddisplay(self,'aIce','albedo of ice (0.27-0.58)'))
+-		elif self.aIdx == 0:
+-			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.'))
++		elif elf.aIdx == 0:
++			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}'))
++		elif elf.aIdx == 5:
++			string = "%s\n%s"%(string,fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}'))
+ 		elif self.aIdx == 3:
+ 			string = "%s\n%s"%(string,fielddisplay(self,'cldFrac','average cloud amount'))
+ 		elif self.aIdx == 4:
+@@ -193,7 +202,7 @@
+ 		self.eAir = project3d(md,'vector',self.eAir,'type','node')
+ 		self.pAir = project3d(md,'vector',self.pAir,'type','node')
+ 
+-		if aIdx == 0 and np.isnan(self.aValue):
++		if (aIdx == 0 or aIdx == 5) and np.isnan(self.aValue):
+ 			self.aValue=project3d(md,'vector',self.aValue,'type','node');
+ 		if np.isnan(self.teValue):
+ 			self.teValue=project3d(md,'vector',self.teValue,'type','node');
+@@ -221,6 +230,7 @@
+ 		self.dzTop = .05* np.ones((mesh.numberofelements,))
+ 		self.dzMin = self.dzTop/2
+ 		self.InitDensityScaling = 1.0
++		self.ThermoDeltaTScaling = 1/11.0
+ 		
+ 		self.zMax = 250*np.ones((mesh.numberofelements,))
+ 		self.zMin = 130*np.ones((mesh.numberofelements,))
+@@ -277,7 +287,7 @@
+ 
+ 		md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
+ 
+-		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4])
++		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5])
+ 		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1])
+ 		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5])
+ 
+@@ -287,6 +297,7 @@
+ 		md = checkfield(md,'fieldname','smb.zY','NaN',1,'Inf',1,'> = ',1)
+ 		md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365) #10 years max 
+ 		md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
++		md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
+ 
+ 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
+ 			md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'> = ',.64,'< = ',.89)
+@@ -348,6 +359,7 @@
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','swIdx','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double')
++		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ThermoDeltaTScaling','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIce','format','Double')
+Index: ../trunk-jpl/src/m/classes/SMBgemb.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22474)
++++ ../trunk-jpl/src/m/classes/SMBgemb.m	(revision 22475)
+@@ -59,6 +59,8 @@
+ 					  % 2: effective grain radius [Brun et al., 2009]
+ 					  % 3: density and cloud amount [Greuell & Konzelmann, 1994]
+ 					  % 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
++					  % 5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only
++
+ 		swIdx  = NaN; % apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
+ 
+ 		denIdx = NaN; %densification model to use (default is 2):
+@@ -89,6 +91,9 @@
+ 
+ 		%densities:
+ 		InitDensityScaling= NaN; %initial scaling factor multiplying the density of ice, which describes the density of the snowpack.
++
++		%thermal:
++		ThermoDeltaTScaling= NaN; %scaling factor to multiply the thermal diffusion timestep (delta t)
+ 		
+ 		requested_outputs      = {};
+ 
+@@ -119,7 +124,7 @@
+ 			self.eAir=project3d(md,'vector',self.eAir,'type','node');
+ 			self.pAir=project3d(md,'vector',self.pAir,'type','node');
+ 
+-			if aIdx == 0 & ~isnan(self.aValue)
++			if (aIdx == 0 | aIdx == 5) & ~isnan(self.aValue)
+ 				self.aValue=project3d(md,'vector',self.aValue,'type','node');
+ 			end
+ 			if ~isnan(self.teValue)
+@@ -149,6 +154,7 @@
+ 		self.dzTop = .05* ones (mesh.numberofelements,1);
+ 		self.dzMin = self.dzTop/2;
+ 		self.InitDensityScaling = 1.0;
++		self.ThermoDeltaTScaling = 1/11;
+ 		
+ 		self.zMax=250*ones(mesh.numberofelements,1);
+ 		self.zMin=130*ones(mesh.numberofelements,1);
+@@ -205,7 +211,7 @@
+ 
+ 			md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
+ 
+-			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4]);
++			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5]);
+ 			md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]);
+ 			md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]);
+ 
+@@ -215,6 +221,7 @@
+ 			md = checkfield(md,'fieldname','smb.zY','NaN',1,'Inf',1,'>=',1);
+ 			md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365); %10 years max 
+ 			md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
++			md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
+ 
+ 			switch self.aIdx,
+ 				case 0
+@@ -268,13 +275,15 @@
+ 			fielddisplay(self,'zMin','initial min model depth (default is min(thickness,30)) [m]');
+ 			fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]');
+ 			fielddisplay(self,'InitDensityScaling',{'initial scaling factor multiplying the density of ice','which describes the density of the snowpack.'});
++			fielddisplay(self,'ThermoDeltaTScaling',{'scaling factor to multiply the thermal diffusion timestep (delta t)'});
+ 			fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)');
+ 			fielddisplay(self,'aIdx',{'method for calculating albedo and subsurface absorption (default is 1)',...
+-				               '0: direct input from aValue parameter',...
+-									'1: effective grain radius [Gardner & Sharp, 2009]',...
+-									'2: effective grain radius [Brun et al., 2009]',...
+-									'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
+-									'4: exponential time decay & wetness [Bougamont & Bamber, 2005]'});
++				'0: direct input from aValue parameter',...
++				'1: effective grain radius [Gardner & Sharp, 2009]',...
++				'2: effective grain radius [Brun et al., 2009]',...
++				'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
++				'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',...
++				'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only'});
+ 
+ 			fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)');
+                                 
+@@ -293,8 +302,8 @@
+             
+ 			%additional albedo parameters: 
+ 			switch self.aIdx
+-			case 0
+-				fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == 0.');
++			case {0 5}
++				fielddisplay(self,'aValue','Albedo forcing at every element.  Used only if aIdx == {0,5}.');
+ 			case {1 2}
+ 				fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)');
+ 				fielddisplay(self,'aIce','albedo of ice (0.27-0.58)');
+@@ -355,6 +364,7 @@
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','swIdx','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double');
++			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ThermoDeltaTScaling','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIce','format','Double');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22475-22476.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22475-22476.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22475-22476.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22475)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22476)
+@@ -91,8 +91,8 @@
+ 		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
+ 		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 		for(k=0; k<numvertices; k++){
+-			if(abs(distances[k])>dist_max){dist_max=abs(distances[k]);}
+-			if(abs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=abs(distances[k]);}
++			if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
++			if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
+ 		}
+ 	}
+ 	//1 Define pico boxes
Index: /issm/oecreview/Archive/21724-22754/ISSM-22476-22477.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22476-22477.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22476-22477.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22476)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22477)
+@@ -97,9 +97,13 @@
+ 	}
+ 	//1 Define pico boxes
+ 	nd=xNew<int>(num_basins);
++	#ifndef _HAVE_ADOLC_ //we want to avoid the round operation at all cost. Not differentiable.
+ 	for(i=0; i<num_basins;i++){
+ 		nd[i] = round(sqrt(dmax_basin[i]/dist_max)*(maxbox-1)); //0-based
+ 	}
++	#else
++	_error_("Don't know how to call round with AD on (present in other parts of the code as well");
++	#endif
+ 	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->PicoUpdateBoxid(nd);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22477-22478.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22477-22478.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22477-22478.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90
+===================================================================
+--- ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22477)
++++ ../trunk-jpl/src/c/modules/FourierLoveCorex/lovenb_sub.f90	(revision 22478)
+@@ -377,9 +377,9 @@
+    !print *, nbc 
+    do j = 1,nbc/6
+       !!! y4, y2, y6 are not scaled yet =>>> ask lambert ==>>> 
+-      love_kernels((j-1)*6+1,1) = sc((j-1)*6+1,1)               ! y4 NOT SCALED YET 
+-      love_kernels((j-1)*6+2,1) = sc((j-1)*6+2,1)               ! y2 NOT SCALED YET 
+-      love_kernels((j-1)*6+3,1) = sc((j-1)*6+3,1)               ! y6 NOT SCALED YET 
++      !love_kernels((j-1)*6+1,1) = sc((j-1)*6+1,1)               ! y4 NOT SCALED YET 
++      !love_kernels((j-1)*6+2,1) = sc((j-1)*6+2,1)               ! y2 NOT SCALED YET 
++      !love_kernels((j-1)*6+3,1) = sc((j-1)*6+3,1)               ! y6 NOT SCALED YET 
+       love_kernels((j-1)*6+4,1) = sc((j-1)*6+4,1)*ra*go_surf    ! y1 => love_h 
+       love_kernels((j-1)*6+5,1) = sc((j-1)*6+5,1)*ra*go_surf    ! y3 => love_l 
+       love_kernels((j-1)*6+6,1) = sc((j-1)*6+6,1)*ra*go0        ! y5 => love_k
+@@ -387,17 +387,30 @@
+       !   print *, real(love_kernels((j-1)*6+1,1)), real(love_kernels((j-1)*6+4,1))
+       !end if 
+    end do
+-
++   ! some reshuffling is needed for y4, y2, y6...
++   do j = 2,nbc/6
++      !!! y4, y2, y6 are not scaled yet =>>> ask lambert ==>>> 
++      love_kernels((j-2)*6+1,1) = sc((j-1)*6+1,1)               ! y4 NOT SCALED YET 
++      love_kernels((j-2)*6+2,1) = sc((j-1)*6+2,1)               ! y2 NOT SCALED YET 
++      love_kernels((j-2)*6+3,1) = sc((j-1)*6+3,1)               ! y6 NOT SCALED YET 
++   end do
++   !!! these are surface values... 
++   love_kernels(nbc-5,1) = sc(1,1)               ! y4 NOT SCALED YET 
++   love_kernels(nbc-4,1) = sc(2,1)               ! y4 NOT SCALED YET 
++   love_kernels(nbc-3,1) = sc(3,1)               ! y4 NOT SCALED YET 
++ 
++   !print *, ' ************* ' 
+    !if (deg==2) then
+    !  do ibc=1,nbc/6
+-   !      print *, real(sc( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
+-   !   end do 
+-   !   print *, ' ************* ' 
+-   !   do ibc=1,nbc/6
++         !print *, real(sc( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
+    !      print *, real(love_kernels( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
+-   !   end do 
+-   !   print *, ' ************* ' 
+-   !   print*, ra*go_surf, ra*go0, mu0
++    !  end do 
++      !print *, ' ************* ' 
++      !do ibc=1,nbc/6
++      !   print *, real(love_kernels( (ibc-1)*6+1:(ibc-1)*6+6 , 1))
++      !end do 
++      !print *, ' ************* ' 
++      !print*, ra*go_surf, ra*go0, mu0
+    !end if 
+    !!! >>> SA 
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22478-22479.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22478-22479.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22478-22479.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive2085.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22479-22480.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22479-22480.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22479-22480.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/cores/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/control_core.cpp	(revision 22479)
++++ ../trunk-jpl/src/c/cores/control_core.cpp	(revision 22480)
+@@ -185,6 +185,7 @@
+ 
+ 	/*output: */
+ 	IssmDouble J;
++	int        temp;
+ 
+ 	/*parameters: */
+ 	void (*adjointcore)(FemModel*)=NULL;
+@@ -202,7 +203,7 @@
+ 	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&scalar_list,NULL,NULL,InversionGradientScalingEnum);
++	femmodel->parameters->FindParam(&scalar_list,&temp,&temp,InversionGradientScalingEnum);
+ 	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);   _assert_(num_controls);
+ 	numvertices=femmodel->vertices->NumberOfVertices();
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22482-22483.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22482-22483.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22482-22483.diff	(revision 22755)
@@ -0,0 +1,219 @@
+Index: ../trunk-jpl/src/m/classes/slr.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/slr.js	(revision 22482)
++++ ../trunk-jpl/src/m/classes/slr.js	(revision 22483)
+@@ -37,6 +37,10 @@
+ 		//numerical discretization accuracy
+ 		this.degacc=.01;
+ 		
++		//steric: 
++		this.steric_rate=0;
++		
++		
+ 		//output default:
+ 		this.requested_outputs=['default'];
+ 
+@@ -62,6 +66,7 @@
+ 			md = checkfield(md,'fieldname','slr.angular_velocity','NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','slr.reltol','size',[1, 1]);
+ 			md = checkfield(md,'fieldname','slr.abstol','size',[1, 1]);
++			md = checkfield(md,'fieldname','slr.steric_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+ 			md = checkfield(md,'fieldname','slr.maxiter','size',[1, 1],'>=',1);
+ 			md = checkfield(md,'fieldname','slr.degacc','size',[1, 1],'>=',1e-10);
+ 			md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
+@@ -80,29 +85,30 @@
+ 		}// }}}
+ 		this.disp= function(){// {{{
+ 			
+-		console.log(sprintf('   Sealevelrise solution parameters:'));
++			console.log(sprintf('   Sealevelrise solution parameters:'));
+ 
+-		fielddisplay(this,'deltathickness','thickness change (main loading of the slr solution core [m]');
+-		fielddisplay(this,'sealevel','current sea level (prior to computation) [m]');
+-		fielddisplay(this,'reltol','sea level rise relative convergence criterion, (NaN: not applied)');
+-		fielddisplay(this,'abstol','sea level rise absolute convergence criterion, (default, NaN: not applied');
+-		fielddisplay(this,'maxiter','maximum number of nonlinear iterations');
+-		fielddisplay(this,'love_h','load Love number for radial displacement');
+-		fielddisplay(this,'love_k','load Love number for gravitational potential perturbation');
+-		fielddisplay(this,'love_l','load Love number for horizontal displacements'); 
+-		fielddisplay(this,'tide_love_h','tidal love number (degree 2)');
+-		fielddisplay(this,'tide_love_k','tidal love number (degree 2)');
+-		fielddisplay(this,'fluid_love','secular fluid Love number');
+-		fielddisplay(this,'equatorial_moi','mean equatorial moment of inertia [kg m^2]');
+-		fielddisplay(this,'polar_moi','polar moment of inertia [kg m^2]');
+-		fielddisplay(this,'angular_velocity','mean rotational velocity of earth [per second]'); 
+-		fielddisplay(this,'rigid','rigid earth graviational potential perturbation');
+-		fielddisplay(this,'elastic','elastic earth graviational potential perturbation');
+-		fielddisplay(this,'rotation','rotational earth potential perturbation');
+-		fielddisplay(this,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
+-		fielddisplay(this,'degacc',"accuracy (default .01 deg) for numerical discretization of the Green's functions");
+-		fielddisplay(this,'transitions','indices into parts of the mesh that will be icecaps');
+-		fielddisplay(this,'requested_outputs','additional outputs requested');
++			fielddisplay(this,'deltathickness','thickness change (main loading of the slr solution core [m]');
++			fielddisplay(this,'sealevel','current sea level (prior to computation) [m]');
++			fielddisplay(this,'reltol','sea level rise relative convergence criterion, (NaN: not applied)');
++			fielddisplay(this,'abstol','sea level rise absolute convergence criterion, (default, NaN: not applied');
++			fielddisplay(this,'maxiter','maximum number of nonlinear iterations');
++			fielddisplay(this,'love_h','load Love number for radial displacement');
++			fielddisplay(this,'love_k','load Love number for gravitational potential perturbation');
++			fielddisplay(this,'love_l','load Love number for horizontal displacements'); 
++			fielddisplay(this,'tide_love_h','tidal love number (degree 2)');
++			fielddisplay(this,'tide_love_k','tidal love number (degree 2)');
++			fielddisplay(this,'fluid_love','secular fluid Love number');
++			fielddisplay(this,'equatorial_moi','mean equatorial moment of inertia [kg m^2]');
++			fielddisplay(this,'polar_moi','polar moment of inertia [kg m^2]');
++			fielddisplay(this,'angular_velocity','mean rotational velocity of earth [per second]'); 
++			fielddisplay(this,'rigid','rigid earth graviational potential perturbation');
++			fielddisplay(this,'elastic','elastic earth graviational potential perturbation');
++			fielddisplay(this,'rotation','rotational earth potential perturbation');
++			fielddisplay(this,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'); 
++			fielddisplay(this,'steric_rate','rate of steric ocean expansion (in mm/yr)'); 
++			fielddisplay(this,'degacc',"accuracy (default .01 deg) for numerical discretization of the Green's functions");
++			fielddisplay(this,'transitions','indices into parts of the mesh that will be icecaps');
++			fielddisplay(this,'requested_outputs','additional outputs requested');
+ 		} //}}}
+ 		this.marshall=function(md,prefix,fid) { //{{{
+ 
+@@ -124,6 +130,7 @@
+ 			WriteData(fid,prefix,'object',this,'fieldname','elastic','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','rotation','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','ocean_area_scaling','format','Boolean');
++			WriteData(fid,prefix,'object',this,'fieldname','steric_rate','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts);
+ 			WriteData(fid,prefix,'object',this,'fieldname','degacc','format','Double');
+ 			WriteData(fid,prefix,'object',this,'fieldname','transitions','format','MatArray');
+ 
+@@ -157,6 +164,7 @@
+ 			this.elastic=NullFix(this.elastic,NaN);
+ 			this.rotation=NullFix(this.rotation,NaN);
+ 			this.ocean_area_scaling=NullFix(this.ocean_area_scaling,NaN);
++			this.steric_rate=NullFix(this.steric_rate,NaN);
+ 			this.degacc=NullFix(this.degacc,NaN);
+ 		}//}}}
+ 	//properties
+@@ -179,6 +187,7 @@
+ 	this.elastic        = 0;
+ 	this.rotation       = 0;
+ 	this.ocean_area_scaling = 0;
++	this.steric_rate    = 0; //rate of ocean expansion from steric effects. 
+ 	this.degacc         = 0;
+ 	this.requested_outputs = [];
+ 	this.transitions    = [];
+Index: ../trunk-jpl/src/m/classes/trans.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/trans.js	(revision 22482)
++++ ../trunk-jpl/src/m/classes/trans.js	(revision 22483)
+@@ -19,6 +19,7 @@
+ 		this.ismovingfront     = 0;
+ 		this.ishydrology       = 0;
+ 		this.isslr             = 0;
++		this.isoceancoupling   = 0;
+ 		this.iscoupler         = 0;
+ 		this.amr_frequency     = 0;
+ 
+@@ -41,6 +42,7 @@
+ 		fielddisplay(this,'ismovingfront','indicates whether a moving front capability is used in the transient');
+ 		fielddisplay(this,'ishydrology','indicates whether an hydrology model is used');
+ 		fielddisplay(this,'isslr','indicates whether a sea-level rise model is used');
++		fielddisplay(this,'isoceancoupling','indicates whether a coupling with an ocean model is used in the transient');
+ 		fielddisplay(this,'iscoupler','indicates whether different models are being run with need for coupling');
+ 		fielddisplay(this,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
+ 		fielddisplay(this,'requested_outputs','list of additional outputs requested');
+@@ -55,18 +57,19 @@
+ 			//Early return
+ 			if (solution!='TransientSolution') return;
+ 
+-			checkfield(md,'fieldname','trans.issmb','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.ismasstransport','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isstressbalance','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isthermal','numel',[1],'values',[0 ,1]);
++			checkfield(md,'fieldname','trans.issmb','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.ismasstransport','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.isstressbalance','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.isthermal','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isgroundingline','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isgia','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isesa','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.isdamageevolution','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.ismovingfront','numel',[1],'values',[0, 1]);
+-			checkfield(md,'fieldname','trans.ishydrology','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.iscoupler','numel',[1],'values',[0 ,1]);
+-			checkfield(md,'fieldname','trans.isslr','numel',[1],'values',[0 ,1]);
++			checkfield(md,'fieldname','trans.ishydrology','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.isslr','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.isoceancoupling','numel',[1],'values',[0, 1]);
++			checkfield(md,'fieldname','trans.iscoupler','numel',[1],'values',[0, 1]);
+ 			checkfield(md,'fieldname','trans.amr_frequency','numel',[1],'>=',0,'NaN',1,'Inf',1);
+ 			checkfield(md,'fieldname','trans.requested_outputs','stringrow',1);
+ 		} // }}}
+@@ -84,6 +87,7 @@
+ 			WriteData(fid,prefix,'object',this,'fieldname','ishydrology','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','ismovingfront','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isslr','format','Boolean');
++			WriteData(fid,prefix,'object',this,'fieldname','isoceancoupling','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','iscoupler','format','Boolean');
+ 			WriteData(fid,prefix,'object',this,'fieldname','amr_frequency','format','Integer');
+ 
+@@ -118,8 +122,9 @@
+ 	this.ismovingfront     = 0;
+ 	this.ishydrology       = 0;
+ 	this.isslr             = 0;
++	this.isoceancoupling   = 0;
+ 	this.iscoupler         = 0;
+-	this.amr_frequency	  = 0;
++	this.amr_frequency	   = 0;
+ 	this.requested_outputs = [];
+ 
+ 	this.setdefaultparameters();
+Index: ../trunk-jpl/src/m/classes/thermal.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.js	(revision 22482)
++++ ../trunk-jpl/src/m/classes/thermal.js	(revision 22483)
+@@ -27,6 +27,9 @@
+ 
+ 		//will basal boundary conditions be set dynamically
+ 		this.isdynamicbasalspc=0;
++		
++		//Linear elements by default
++		this.fe='P1';
+ 
+ 		//default output
+ 		this.requested_outputs=['default'];
+@@ -45,6 +48,7 @@
+ 		fielddisplay(this,'penalty_factor','scaling exponent (default is 3)');
+ 		fielddisplay(this,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+ 		fielddisplay(this,'isdynamicbasalspc','enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)');
++		fielddisplay(this,'fe','Finite Element type: "P1" (default), "P1xP2"');
+ 		fielddisplay(this,'requested_outputs','additional outputs requested');
+ 
+ 	}// }}}
+@@ -87,6 +91,7 @@
+ 
+ 		checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 ,1, 2]);
+ 		checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1);
++		checkfield(md,'fieldname','thermal.fe','values',{'P1','P1xP2','P1xP3'});
+ 		if(ArrayAnyEqual(ArrayIsMember('EnthalpyAnalysis',analyses),1) & md.thermal.isenthalpy & md.mesh.dimension() == 3){
+ 			
+ 			for(var i=0;i<md.mesh.numberofvertices;i++){
+@@ -121,6 +126,7 @@
+ 			WriteData(fid,prefix,'object',this,'fieldname','penalty_lock','format','Integer');
+ 			WriteData(fid,prefix,'object',this,'fieldname','penalty_factor','format','Double');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isenthalpy','format','Boolean');
++			WriteData(fid,prefix,'object',this,'fieldname','fe','format','String');
+ 			WriteData(fid,prefix,'object',this,'fieldname','isdynamicbasalspc','format','Boolean');
+ 
+ 			//process requested outputs
+@@ -148,12 +154,13 @@
+ 	this.spctemperature    = NaN;
+ 	this.penalty_threshold = 0;
+ 	this.stabilization     = 0;
+-	this.reltol				= 0;
++	this.reltol			   = 0;
+ 	this.maxiter           = 0;
+ 	this.penalty_lock      = 0;
+ 	this.penalty_factor    = 0;
+ 	this.isenthalpy        = 0;
+ 	this.isdynamicbasalspc = 0;
++	this.fe                = 'P1';
+ 	this.requested_outputs = [];
+ 
+ 	this.setdefaultparameters();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22483-22484.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22483-22484.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22483-22484.diff	(revision 22755)
@@ -0,0 +1,133 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22483)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22484)
+@@ -19,8 +19,10 @@
+ 
+ 	/*Output*/
+ 	IssmDouble *spcvector  = NULL;
++	IssmDouble *spcvectorstatic  = NULL;
+ 	IssmDouble* times=NULL;
+ 	IssmDouble* values=NULL;
++	IssmDouble* issurface = NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->FindConstant(&heatcapacity,"md.materials.heatcapacity");
+@@ -31,16 +33,10 @@
+ 	if(iomodel->domaintype==Domain2DhorizontalEnum) return;
+ 
+ 	/*Fetch data: */
++	iomodel->FetchData(&issurface,&M,&N,"md.mesh.vertexonsurface"); _assert_(N>0); _assert_(M==iomodel->numberofvertices);
+ 	iomodel->FetchData(&spcvector,&M,&N,"md.thermal.spctemperature");
++	iomodel->FetchData(&spcvectorstatic,&M,&N,"md.thermal.spctemperature");
+ 
+-	/*Convert spcs from temperatures to enthalpy*/
+-	_assert_(N>0); _assert_(M>=iomodel->numberofvertices);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		for(int j=0;j<N;j++){
+-			spcvector[i*N+j] = heatcapacity*(spcvector[i*N+j]-referencetemperature);
+-		}
+-	}
+-
+ 	/*Specific case for PDD, we want the constaints to be updated by the PDD scheme itself*/
+ 	bool isdynamic = false;
+ 	if (iomodel->solution_enum==TransientSolutionEnum){
+@@ -50,8 +46,29 @@
+ 		if(smb_model==SMBd18opddEnum) isdynamic=true;
+ 	}
+ 
++	/*Convert spcs from temperatures to enthalpy*/
++	_assert_(N>0); _assert_(M>=iomodel->numberofvertices);
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		for(int j=0;j<N;j++){
++			if (isdynamic){
++				if (issurface[i]==1){
++					spcvector[i*N+j] = heatcapacity*(spcvector[i*N+j]-referencetemperature);
++					spcvectorstatic[i*N+j] = nan("");
++				}
++				else{
++					spcvector[i*N+j] = nan("");
++					spcvectorstatic[i*N+j] = heatcapacity*(spcvectorstatic[i*N+j]-referencetemperature);
++				}
++			}
++			else{
++				spcvector[i*N+j] = heatcapacity*(spcvector[i*N+j]-referencetemperature);
++			}
++		}
++	}
++
+ 	if(isdynamic){
+-		IoModelToDynamicConstraintsx(constraints,iomodel,spcvector,M,N,EnthalpyAnalysisEnum,finiteelement);
++		IoModelToDynamicConstraintsx(constraints,iomodel,spcvector,iomodel->numberofvertices,1,EnthalpyAnalysisEnum,finiteelement);
++		IoModelToConstraintsx(constraints,iomodel,spcvectorstatic,M,N,EnthalpyAnalysisEnum,finiteelement);
+ 	}
+ 	else{
+ 		IoModelToConstraintsx(constraints,iomodel,spcvector,M,N,EnthalpyAnalysisEnum,finiteelement);
+@@ -59,6 +76,8 @@
+ 
+ 	/*Free ressources:*/
+ 	iomodel->DeleteData(spcvector,"md.thermal.spctemperature");
++	iomodel->DeleteData(spcvectorstatic,"md.thermal.spctemperature");
++	iomodel->DeleteData(issurface,"md.mesh.vertexonsurface");
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22483)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22484)
+@@ -8,10 +8,16 @@
+ void ThermalAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
++	int        M,N;
+ 	int finiteelement;
+ 	iomodel->FindConstant(&finiteelement,"md.thermal.fe");
+ 	_assert_(finiteelement==P1Enum); 
+ 
++	/*Output*/
++	IssmDouble *spcvector  = NULL;
++	IssmDouble *spcvectorstatic  = NULL;
++	IssmDouble *issurface = NULL;
++
+ 	/*Only 3d mesh supported*/
+ 	if(iomodel->domaintype!=Domain3DEnum) _error_("not supported yet");
+ 
+@@ -33,13 +39,35 @@
+ 		_error_("Solution "<<EnumToStringx(iomodel->solution_enum)<<" not supported yet");
+ 	}
+ 
++	/*Fetch data: */
++	iomodel->FetchData(&issurface,&M,&N,"md.mesh.vertexonsurface"); _assert_(N>0); _assert_(M==iomodel->numberofvertices);
++	iomodel->FetchData(&spcvector,&M,&N,"md.thermal.spctemperature");
++	iomodel->FetchData(&spcvectorstatic,&M,&N,"md.thermal.spctemperature");
++
++	/*Convert spcs from temperatures to enthalpy*/
++	_assert_(N>0); _assert_(M>=iomodel->numberofvertices);
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		for(int j=0;j<N;j++){
++			if (isdynamic){
++				if (issurface[i]==1)spcvectorstatic[i*N+j] = nan("");
++				else spcvector[i*N+j] = nan("");
++			}
++		}
++	}
++
+ 	if(isdynamic){
+-		IoModelToDynamicConstraintsx(constraints,iomodel,"md.thermal.spctemperature",ThermalAnalysisEnum,finiteelement);
++		IoModelToDynamicConstraintsx(constraints,iomodel,spcvector,iomodel->numberofvertices,1,ThermalAnalysisEnum,finiteelement);
++		IoModelToConstraintsx(constraints,iomodel,spcvectorstatic,M,N,ThermalAnalysisEnum,finiteelement);
+ 	}
+ 	else{
+-		IoModelToConstraintsx(constraints,iomodel,"md.thermal.spctemperature",ThermalAnalysisEnum,finiteelement);
++		IoModelToConstraintsx(constraints,iomodel,spcvector,M,N,ThermalAnalysisEnum,finiteelement);
+ 	}
+ 
++	/*Free ressources:*/
++	iomodel->DeleteData(spcvector,"md.thermal.spctemperature");
++	iomodel->DeleteData(spcvectorstatic,"md.thermal.spctemperature");
++	iomodel->DeleteData(issurface,"md.mesh.vertexonsurface");
++
+ }/*}}}*/
+ void ThermalAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22484-22485.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22484-22485.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22484-22485.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22484)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22485)
+@@ -53,10 +53,10 @@
+ 			if (isdynamic){
+ 				if (issurface[i]==1){
+ 					spcvector[i*N+j] = heatcapacity*(spcvector[i*N+j]-referencetemperature);
+-					spcvectorstatic[i*N+j] = nan("");
++					spcvectorstatic[i*N+j] = NAN;
+ 				}
+ 				else{
+-					spcvector[i*N+j] = nan("");
++					spcvector[i*N+j] = NAN;
+ 					spcvectorstatic[i*N+j] = heatcapacity*(spcvectorstatic[i*N+j]-referencetemperature);
+ 				}
+ 			}
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22484)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22485)
+@@ -49,8 +49,8 @@
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		for(int j=0;j<N;j++){
+ 			if (isdynamic){
+-				if (issurface[i]==1)spcvectorstatic[i*N+j] = nan("");
+-				else spcvector[i*N+j] = nan("");
++				if (issurface[i]==1)spcvectorstatic[i*N+j] = NAN;
++				else spcvector[i*N+j] = NAN;
+ 			}
+ 		}
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22485-22486.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22485-22486.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22485-22486.diff	(revision 22755)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh	(revision 22486)
+@@ -0,0 +1,34 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install petsc-3.8.0 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.0.tar.gz' 'petsc-3.8.0.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.8.0.tar.gz
++mv petsc-3.8.0/* src/
++rm -rf petsc-3.8.0
++
++#configure
++cd src
++./config/configure.py \
++	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mpi-dir="$ISSM_DIR/externalpackages/mpich/install" \
++	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++	--with-debugging=1 \
++	--with-valgrind=0 \
++	--with-x=0 \
++	--with-ssl=0 \
++	--with-shared-libraries=1 \
++	--download-metis=1 \
++	--download-parmetis=1 \
++	--download-mumps=1 \
++	--download-scalapack=1
++
++#Compile and intall
++make
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22486-22487.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22486-22487.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22486-22487.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh	(revision 22486)
++++ ../trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh	(revision 22487)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.8.0 src
++rm -rf install petsc-3.8.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.0.tar.gz' 'petsc-3.8.0.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.3.tar.gz' 'petsc-3.8.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.8.0.tar.gz
+-mv petsc-3.8.0/* src/
+-rm -rf petsc-3.8.0
++tar -zxvf  petsc-3.8.3.tar.gz
++mv petsc-3.8.3/* src/
++rm -rf petsc-3.8.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh	(revision 22486)
++++ ../trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh	(revision 22487)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.8.0 src
++rm -rf install petsc-3.8.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.0.tar.gz' 'petsc-3.8.0.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.8.3.tar.gz' 'petsc-3.8.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.8.0.tar.gz
+-mv petsc-3.8.0/* src/
+-rm -rf petsc-3.8.0
++tar -zxvf  petsc-3.8.3.tar.gz
++mv petsc-3.8.3/* src/
++rm -rf petsc-3.8.3
+ 
+ #configure
+ cd src
Index: /issm/oecreview/Archive/21724-22754/ISSM-22487-22488.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22487-22488.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22487-22488.diff	(revision 22755)
@@ -0,0 +1,336 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22487)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22488)
+@@ -301,11 +301,11 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  calvingrate[NUMVERTICES];
+ 	IssmDouble  vx,vy,vel;
+-	IssmDouble  rheology_B,critical_fraction,water_height;
+-	IssmDouble  bathymetry,Ho,thickness,float_depth,groundedice;
++	IssmDouble  critical_fraction,water_height;
++	IssmDouble  bed,Ho,thickness,float_depth;
+ 	IssmDouble  surface_crevasse[NUMVERTICES], basal_crevasse[NUMVERTICES], crevasse_depth[NUMVERTICES], H_surf, H_surfbasal;
+ 	IssmDouble  strainparallel, straineffective;
+-	IssmDouble  yts;
++	IssmDouble  s_xx,s_xy,s_yy,s1,s2,stmp;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -312,7 +312,6 @@
+ 		
+ 	/*Get the critical fraction of thickness surface and basal crevasses penetrate for calving onset*/
+ 	this->parameters->FindParam(&critical_fraction,CalvingCrevasseDepthEnum);
+-	this->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 		
+ 	IssmDouble rho_ice        = this->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	IssmDouble rho_seawater   = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+@@ -320,72 +319,71 @@
+ 	IssmDouble constant_g     = this->GetMaterialParameter(ConstantsGEnum);
+ 	IssmDouble rheology_n     = this->GetMaterialParameter(MaterialsRheologyNEnum);
+ 
+-	Input*   B_input       = inputs->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+-	Input*   H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
+-	Input*   bed           = inputs->GetInput(BedEnum); _assert_(bed);
+-	Input*   surface       = inputs->GetInput(SurfaceEnum); _assert_(surface);
+-	Input*	strainrateparallel  = inputs->GetInput(StrainRateparallelEnum);  _assert_(strainrateparallel);
+-	Input*	strainrateeffective = inputs->GetInput(StrainRateeffectiveEnum); _assert_(strainrateeffective);
+-	Input*	vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);
+-	Input*	vy_input = inputs->GetInput(VxEnum); _assert_(vy_input);
+-	Input*	gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);
+-	Input*   waterheight_input = inputs->GetInput(WaterheightEnum); _assert_(waterheight_input);
+-
++	Input*   H_input                 = inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	Input*   bed_input               = inputs->GetInput(BedEnum); _assert_(bed_input);
++	Input*   surface_input           = inputs->GetInput(SurfaceEnum); _assert_(surface_input);
++	Input*	strainrateparallel_input  = inputs->GetInput(StrainRateparallelEnum);  _assert_(strainrateparallel_input);
++	Input*	strainrateeffective_input = inputs->GetInput(StrainRateeffectiveEnum); _assert_(strainrateeffective_input);
++	Input*	vx_input                  = inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input*	vy_input                  = inputs->GetInput(VxEnum); _assert_(vy_input);
++	Input*   waterheight_input       = inputs->GetInput(WaterheightEnum); _assert_(waterheight_input);
++	Input*   s_xx_input              = inputs->GetInput(DeviatoricStressxxEnum);     _assert_(s_xx_input);
++	Input*   s_xy_input              = inputs->GetInput(DeviatoricStressxyEnum);     _assert_(s_xy_input);
++	Input*   s_yy_input              = inputs->GetInput(DeviatoricStressyyEnum);     _assert_(s_yy_input);
++	
+ 	/*Loop over all elements of this partition*/
+ 	GaussTria* gauss=new GaussTria();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 	
+-		B_input->GetInputValue(&rheology_B,gauss);
+ 		H_input->GetInputValue(&thickness,gauss);
+-		bed->GetInputValue(&bathymetry,gauss);
+-		surface->GetInputValue(&float_depth,gauss);
+-		strainrateparallel->GetInputValue(&strainparallel,gauss);
+-		strainrateeffective->GetInputValue(&straineffective,gauss);
++		bed_input->GetInputValue(&bed,gauss);
++		surface_input->GetInputValue(&float_depth,gauss);
++		strainrateparallel_input->GetInputValue(&strainparallel,gauss);
++		strainrateeffective_input->GetInputValue(&straineffective,gauss);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+-		gr_input->GetInputValue(&groundedice,gauss);
+ 		waterheight_input->GetInputValue(&water_height,gauss);
++		s_xx_input->GetInputValue(&s_xx,gauss);
++		s_xy_input->GetInputValue(&s_xy,gauss);
++		s_yy_input->GetInputValue(&s_yy,gauss);
++		
+ 		vel=sqrt(vx*vx+vy*vy)+1.e-14;
+ 
+-		Ho = thickness - (rho_seawater/rho_ice) * (-bathymetry);
++		s1=(s_xx+s_yy)/2.+sqrt(pow((s_xx-s_yy)/2.,2)+pow(s_xy,2));
++		s2=(s_xx+s_yy)/2.-sqrt(pow((s_xx-s_yy)/2.,2)+pow(s_xy,2));
++		if(fabs(s2)>fabs(s1)){stmp=s2; s2=s1; s1=stmp;}
++		
++		Ho = thickness - (rho_seawater/rho_ice) * (-bed);
+ 		if(Ho<0.)  Ho=0.;
+ 
+ 		/*Otero2010: balance between the tensile deviatoric stress and ice overburden pressure*/
+ 		/*surface crevasse*/
+-		surface_crevasse[iv] = rheology_B * strainparallel * pow(straineffective, ((1 / rheology_n)-1)) / (rho_ice * constant_g);
+-		//surface_crevasse[iv] = 2 * rheology_B * pow(max(strainparallel,0.),(1/rheology_n)) / (rho_ice * constant_g);
++		//surface_crevasse[iv] = rheology_B * strainparallel * pow(straineffective, ((1 / rheology_n)-1)) / (rho_ice * constant_g);
++		surface_crevasse[iv] = s1 / (rho_ice*constant_g);
+ 		if (surface_crevasse[iv]<0.) {
+ 			surface_crevasse[iv]=0.;
+ 			water_height = 0.;
+ 		}
+-		if (surface_crevasse[iv]<water_height){
+-			water_height = surface_crevasse[iv];
+-		}
++		//if (surface_crevasse[iv]<water_height){
++		//	water_height = surface_crevasse[iv];
++		//}
+ 		
+ 		/*basal crevasse*/
+-		basal_crevasse[iv] = (rho_ice/(rho_seawater-rho_ice)) * (rheology_B * strainparallel * pow(straineffective,((1/rheology_n)-1)) / (rho_ice*constant_g) - Ho);
+-		//basal_crevasse[iv] = (rho_ice/(rho_seawater-rho_ice)) * (2 * rheology_B * pow(max(strainparallel,0.),(1/rheology_n)) / (rho_ice*constant_g) - Ho);
++		//basal_crevasse[iv] = (rho_ice/(rho_seawater-rho_ice)) * (rheology_B * strainparallel * pow(straineffective,((1/rheology_n)-1)) / (rho_ice*constant_g) - Ho);
++		basal_crevasse[iv] = (rho_ice/(rho_seawater-rho_ice))* (s1/ (rho_ice*constant_g)-Ho);
+ 		if (basal_crevasse[iv]<0.) basal_crevasse[iv]=0.;
+-		if (bathymetry>0.) basal_crevasse[iv] = 0.; 
++		if (bed>0.) basal_crevasse[iv] = 0.; 
+ 	
+ 		H_surf = surface_crevasse[iv] + (rho_freshwater/rho_ice)*water_height - critical_fraction*float_depth;
+ 		H_surfbasal = (surface_crevasse[iv] + (rho_freshwater/rho_ice)*water_height + basal_crevasse[iv])-(critical_fraction*thickness);
+ 		
+ 		crevasse_depth[iv] = max(H_surf,H_surfbasal);
++	}
+ 	
+-		/*Assign values */
+-		if(crevasse_depth[iv]>=0. && bathymetry<=0.){
+-		 calvingrate[iv] = vel+3000./yts;
+-		}	
+-		else
+-		 calvingrate[iv]=0.;
+-	}
+-
+ 	this->inputs->AddInput(new TriaInput(SurfaceCrevasseEnum,&surface_crevasse[0],P1Enum));
+ 	this->inputs->AddInput(new TriaInput(BasalCrevasseEnum,&basal_crevasse[0],P1Enum));
+ 	this->inputs->AddInput(new TriaInput(CrevasseDepthEnum,&crevasse_depth[0],P1Enum));
+-	this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));
+ 
+ 	delete gauss;
+ }
+Index: ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22487)
++++ ../trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp	(revision 22488)
+@@ -22,6 +22,7 @@
+ 		case CalvingCrevasseDepthEnum:
+ 			femmodel->StrainRateparallelx();
+ 			femmodel->StrainRateeffectivex();
++			femmodel->DeviatoricStressx();
+ 			femmodel->ElementOperationx(&Element::CalvingCrevasseDepth);
+ 			break;
+ 		case CalvingLevermannEnum:
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22487)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22488)
+@@ -263,7 +263,6 @@
+ 		case CalvingCrevasseDepthEnum:
+ 			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+ 			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+-			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+ 			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+ 			break;
+ 		case CalvingDev2Enum:
+@@ -385,12 +384,8 @@
+ 			case CalvingCrevasseDepthEnum:
+ 				lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
+ 				if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
+-				calvingrate_input->GetInputValue(&calvingrate,gauss);
+ 				meltingrate_input->GetInputValue(&meltingrate,gauss);
+ 
+-				/*Limit calving rate to c <= v + 3 km/yr */
+-				vel=sqrt(v[0]*v[0] + v[1]*v[1]);
+-				if(calvingrate>calvingmax+vel) calvingrate = vel+calvingmax;
+ 				if(groundedice<0) meltingrate = 0.;
+ 				
+ 				norm_dlsf=0.;
+@@ -399,7 +394,7 @@
+ 
+ 				if(norm_dlsf>1.e-10)
+ 				 for(i=0;i<dim;i++){ 
+-					 c[i]=calvingrate*dlsf[i]/norm_dlsf;
++					 c[i]=0.;
+ 					 m[i]=meltingrate*dlsf[i]/norm_dlsf;
+ 				 }
+ 				else
+@@ -739,11 +734,11 @@
+ 
+ 	/*Intermediaries*/
+ 	int         calvinglaw;
+-	IssmDouble  min_thickness,thickness,hab_fraction;
+-	IssmDouble  rho_ice,rho_water,constant_g,rheology_B,rheology_n;
++	IssmDouble  min_thickness,thickness,hab_fraction,crevassedepth;
++	IssmDouble  rho_ice,rho_water;
+ 	IssmDouble  bed,water_depth;
+ 	IssmDouble  levelset;
+-
++	
+ 	femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum);
+ 
+ 	if(calvinglaw==CalvingMinthicknessEnum){
+@@ -792,7 +787,7 @@
+ 			int      numnodes           = element->GetNumberOfNodes();
+ 			Gauss*   gauss              = element->NewGauss();
+ 			Input*   H_input            = element->GetInput(ThicknessEnum); _assert_(H_input);
+-			Input*   bed                = element->GetInput(BedEnum); _assert_(bed);
++			Input*   bed_input          = element->GetInput(BedEnum); _assert_(bed_input);
+ 			Input*   hab_fraction_input = element->GetInput(CalvingHabFractionEnum); _assert_(hab_fraction_input);
+ 			Input*   ls_input           = element->GetInput(DistanceToCalvingfrontEnum); _assert_(ls_input);
+ 
+@@ -801,11 +796,11 @@
+ 				gauss->GaussNode(element->GetElementType(),in);
+ 				Node* node=element->GetNode(in);
+ 				H_input->GetInputValue(&thickness,gauss);
+-				bed->GetInputValue(&water_depth,gauss);
++				bed_input->GetInputValue(&water_depth,gauss);
+ 				ls_input->GetInputValue(&levelset,gauss);
+ 				hab_fraction_input->GetInputValue(&hab_fraction,gauss);
+ 
+-				if(thickness<((rho_water/rho_ice)*(1+hab_fraction)*-water_depth) && levelset>-300){
++				if(thickness<((rho_water/rho_ice)*(1+hab_fraction)*-water_depth) && levelset>-300. && levelset<0.){
+ 					node->ApplyConstraint(0,+1.);
+ 				}
+ 				else {
+@@ -817,6 +812,117 @@
+ 		}
+ 	}
+ 	
++	if(calvinglaw==CalvingCrevasseDepthEnum){
++	
++		int                 nflipped,local_nflipped;
++		Vector<IssmDouble>* vec_constraint_nodes = NULL;
++		IssmDouble* constraint_nodes = NULL;
++		
++		/*Get the DistanceToCalvingfront*/
++		femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
++		femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum);
++
++		/*Vector of size number of nodes*/
++		vec_constraint_nodes=new Vector<IssmDouble>(femmodel->nodes->NumberOfNodes(LevelsetAnalysisEnum));
++
++		for(int i=0;i<femmodel->elements->Size();i++){
++			Element* element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++			int      numnodes = element->GetNumberOfNodes();
++			Gauss*   gauss    = element->NewGauss();
++			Input*   crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);
++			Input*   bed_input = element->GetInput(BedEnum); _assert_(bed_input);
++
++			/*First, look at ice front and figure out if any of the nodes will be calved*/
++			if(element->IsIcefront()){
++				for(int in=0;in<numnodes;in++){
++					gauss->GaussNode(element->GetElementType(),in);
++					Node* node=element->GetNode(in);
++					crevassedepth_input->GetInputValue(&crevassedepth,gauss);
++					bed_input->GetInputValue(&bed,gauss);
++					if(crevassedepth>0. && bed<0.){
++						vec_constraint_nodes->SetValue(node->Sid(),1.0,INS_VAL);
++					}
++				}
++			}
++			delete gauss;
++		}
++		/*Assemble vector and serialize: */
++		vec_constraint_nodes->Assemble();
++		constraint_nodes=vec_constraint_nodes->ToMPISerial();
++
++		nflipped=1;
++		while(nflipped){
++			local_nflipped=0;
++			for(int i=0;i<femmodel->elements->Size();i++){
++				Element* element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++				int      numnodes = element->GetNumberOfNodes();
++				Gauss*   gauss    = element->NewGauss();
++				Input*   levelset_input  = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);
++				Input*   crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);
++				Input*   bed_input = element->GetInput(BedEnum); _assert_(bed_input);
++
++				/*Is this element connected to a node that should be calved*/
++				bool isconnected = false;
++				for(int in=0;in<numnodes;in++){
++					Node* node=element->GetNode(in);
++					if(constraint_nodes[node->Sid()]==1.){
++						isconnected = true;
++						break;
++					}
++				}
++
++				/*Check status if connected*/
++				if(isconnected){
++					for(int in=0;in<numnodes;in++){
++						gauss->GaussNode(element->GetElementType(),in);
++						Node* node=element->GetNode(in);
++						levelset_input->GetInputValue(&levelset,gauss);
++						crevassedepth_input->GetInputValue(&crevassedepth,gauss);
++						bed_input->GetInputValue(&bed,gauss);
++
++						if(crevassedepth>0. && bed<0. && levelset>-300. && levelset<0. && constraint_nodes[node->Sid()]==0.){
++							local_nflipped++;
++							vec_constraint_nodes->SetValue(node->Sid(),1.0,INS_VAL);
++						}
++					}
++				}
++			}
++
++			/*Count how many new nodes were found*/
++			ISSM_MPI_Allreduce(&local_nflipped,&nflipped,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
++			//_printf0_("Found "<<nflipped<<" to flip\n");
++
++			/*Assemble and serialize flag vector*/
++			vec_constraint_nodes->Assemble();
++			xDelete<IssmDouble>(constraint_nodes);
++			constraint_nodes=vec_constraint_nodes->ToMPISerial();
++		}
++		/*Free ressources:*/
++		delete vec_constraint_nodes;
++
++		/*Contrain the nodes that will be calved*/
++		for(int i=0;i<femmodel->elements->Size();i++){
++			Element* element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++			int      numnodes = element->GetNumberOfNodes();
++			Gauss*   gauss    = element->NewGauss();
++			/*Potentially constrain nodes of this element*/
++			for(int in=0;in<numnodes;in++){
++				gauss->GaussNode(element->GetElementType(),in);
++				Node* node=element->GetNode(in);
++				
++				if(constraint_nodes[node->Sid()]){
++					node->ApplyConstraint(0,+1.);
++				}
++				else {
++					/* no ice, set no spc */
++					node->DofInFSet(0);
++				}
++			}
++			delete gauss;
++		}
++		xDelete<IssmDouble>(constraint_nodes);
++	}
++
+ 	/*Default, do nothing*/
+ 	return;
+ }/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22488-22489.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22488-22489.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22488-22489.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/calvinghab.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvinghab.m	(revision 22488)
++++ ../trunk-jpl/src/m/classes/calvinghab.m	(revision 22489)
+@@ -51,7 +51,7 @@
+ 		function marshall(self,prefix,md,fid) % {{{
+ 			yts=md.constants.yts;
+ 			WriteData(fid,prefix,'name','md.calving.law','data',5,'format','Integer');
+-			WriteData(fid,prefix,'object',self,'fieldname','flotation_fraction','format','Double');
++			WriteData(fid,prefix,'object',self,'fieldname','flotation_fraction','format','DoubleMat','mattype',1);
+ 			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/calvingcrevassedepth.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/calvingcrevassedepth.m	(revision 22488)
++++ ../trunk-jpl/src/m/classes/calvingcrevassedepth.m	(revision 22489)
+@@ -56,7 +56,7 @@
+ 			yts=md.constants.yts;
+ 			WriteData(fid,prefix,'name','md.calving.law','data',6,'format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','critical_fraction','format','Double');
+-			WriteData(fid,prefix,'object',self,'fieldname','water_height','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
++			WriteData(fid,prefix,'object',self,'fieldname','water_height','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1./yts);
+ 		end % }}}
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22489-22490.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22489-22490.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22489-22490.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22489)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22490)
+@@ -41,15 +41,15 @@
+ 
+ 	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, my_local_size, 0, &tomitgcmcomm); 
+ 
+-	/*send an integer:*/
+-	int dummy1,dummy2;
+-	dummy1=3; dummy2=0;
+-	if(my_local_rank==0){
+-		MPI_Send(&dummy1,1,MPI_INT,0,1,tomitgcmcomm);
+-		MPI_Recv(&dummy2,1,MPI_INT,0,1,tomitgcmcomm,&status);
+-	}
+-	MPI_Bcast(&dummy2,1,MPI_INT,0,modelcomm);
+-	printf("Ice: dummy received: %i\n",dummy2);
++//	/*send an integer:*/
++//	int dummy1,dummy2;
++//	dummy1=3; dummy2=0;
++//	if(my_local_rank==0){
++//		MPI_Send(&dummy1,1,MPI_INT,0,1,tomitgcmcomm);
++//		MPI_Recv(&dummy2,1,MPI_INT,0,1,tomitgcmcomm,&status);
++//	}
++//	MPI_Bcast(&dummy2,1,MPI_INT,0,modelcomm);
++//	printf("Ice: dummy received: %i\n",dummy2);
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,modelcomm);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22490-22491.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22490-22491.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22490-22491.diff	(revision 22755)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22490)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22491)
+@@ -20,7 +20,7 @@
+ 
+ 	/*parameters: */
+ 	IssmDouble finaltime,dt,yts;
+-	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology;
++	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology,isoceancoupling;
+ 	bool       save_results,dakota_analysis;
+ 	int        timestepping;
+ 	int        output_frequency;
+@@ -56,6 +56,7 @@
+ 	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
+ 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+ 	femmodel->parameters->FindParam(&ismovingfront,TransientIsmovingfrontEnum);
++	femmodel->parameters->FindParam(&isoceancoupling,TransientIsoceancouplingEnum);
+ 	femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum);
+ 	femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
+ 	femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
+@@ -71,6 +72,46 @@
+ 	}
+ 	#endif
+ 
++	if(isoceancoupling){
++		printf("startin ocean coupling \n");
++		int my_rank;
++		int oceannxsize,oceannysize;
++		IssmDouble *oceangridx;
++		IssmDouble *oceangridy;
++		IssmDouble *oceanmelt;
++		IssmDouble *icebase;
++		IssmDouble coupling_time,oceantime;
++		ISSM_MPI_Comm tomitgcmcomm;
++		ISSM_MPI_Status status;
++
++		my_rank=IssmComm::GetRank();
++		femmodel->parameters->FindParam(&coupling_time,TimesteppingCouplingTimeEnum);
++		GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum));
++		if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
++		tomitgcmcomm=parcom->GetParameterValue();
++		if(my_rank==0){
++			printf("starting ocean coupling rank 0 \n");
++			printf("coupling time: %g \n",coupling_time);
++			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
++			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
++			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
++			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
++			//ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
++			//oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
++			//ISSM_MPI_Recv(&oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++			//icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
++			//ISSM_MPI_Send(&icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++			//oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
++			//ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++			//xDelete<IssmDouble>(icebase);
++			//xDelete<IssmDouble>(oceangridx);
++			//xDelete<IssmDouble>(oceangridy);
++			//xDelete<IssmDouble>(oceanmelt);
++		}
++	}
++
+ 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
+ 
+ 		/*Time Increment*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22491-22492.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22491-22492.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22491-22492.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22491)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22492)
+@@ -910,7 +910,7 @@
+ 				gauss->GaussNode(element->GetElementType(),in);
+ 				Node* node=element->GetNode(in);
+ 				
+-				if(constraint_nodes[node->Sid()]){
++				if(constraint_nodes[node->Sid()]>0.){
+ 					node->ApplyConstraint(0,+1.);
+ 				}
+ 				else {
Index: /issm/oecreview/Archive/21724-22754/ISSM-22492-22493.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22492-22493.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22492-22493.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/coordsystems/xy2ll.py
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/xy2ll.py	(revision 22492)
++++ ../trunk-jpl/src/m/coordsystems/xy2ll.py	(revision 22493)
+@@ -72,7 +72,7 @@
+ 	
+ 	res1 = np.nonzero(rho <= 0.1)[0]
+ 	if len(res1) > 0:
+-		lat[res1] = 90. * sgn
++		lat[res1] = pi/2. * sgn
+ 		lon[res1] = 0.0
+ 	
+ 	lon = lon * 180. / pi
+Index: ../trunk-jpl/src/m/coordsystems/xy2ll.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/xy2ll.m	(revision 22492)
++++ ../trunk-jpl/src/m/coordsystems/xy2ll.m	(revision 22493)
+@@ -71,7 +71,7 @@
+ 
+ [res1,res2] = find(rho(:) <= 0.1);
+ if res1
+-	lat(res1) = 90. * sgn;
++	lat(res1) = pi/2. * sgn;
+ 	lon(res1) = 0.0;
+ end
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22495-22496.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22495-22496.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22495-22496.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22495)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22496)
+@@ -610,7 +610,7 @@
+ 	else z0 = 0.0013;                            // 1.3 mm for wet snow
+ 
+ 	// if V = 0 goes to infinity therfore if V = 0 change
+-	if(V<0.01+Dtol)V=0.01;
++	if(V<0.01-Dtol)V=0.01;
+ 	
+ 	// Bulk-transfer coefficient for turbulent fluxes
+ 	An =  pow(0.4,2) / pow(log(Tz/z0),2);     // Bulk-transfer coefficient
Index: /issm/oecreview/Archive/21724-22754/ISSM-22496-22497.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22496-22497.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22496-22497.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22496)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22497)
+@@ -400,7 +400,7 @@
+ 	//some constants:
+ 	const IssmDouble dSnow = 300;   // density of fresh snow [kg m-3]       
+ 
+-	if(aIdx==0 | (adThresh - d[0]<Dtol)){
++	if(aIdx==0 || (adThresh - d[0]<Dtol)){
+ 		a[0] = aValue;
+ 	}
+ 	else{
Index: /issm/oecreview/Archive/21724-22754/ISSM-22497-22498.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22497-22498.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22497-22498.diff	(revision 22755)
@@ -0,0 +1,4422 @@
+Index: ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(nonexistent)
+@@ -1,201 +0,0 @@
+-/*!\file TriMeshx
+- * \brief: x code for TriMesh mesher
+- */
+-
+-/*Header files: {{{*/
+-#include "./TriMeshx.h"
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-/*ANSI_DECLARATORS needed to call triangle library: */
+-#if defined(_HAVE_TRIANGLE_)
+-	#ifndef ANSI_DECLARATORS
+-	#define ANSI_DECLARATORS
+-	#endif
+-	#include "triangle.h"
+-	#undef ANSI_DECLARATORS
+-#endif
+-/*}}}*/
+-
+-void TriMeshx(int** pindex,IssmPDouble** px,IssmPDouble** py,int** psegments,int** psegmentmarkerlist,int* pnels,int* pnods, int* pnsegs,Contours* domain,Contours* rifts,double area){
+-
+-#if !defined(_HAVE_TRIANGLE_)
+-	_error_("triangle has not been installed");
+-#else
+-	/*indexing: */
+-	int i,j;
+-
+-	/*output: */
+-	int    *index             = NULL;
+-	double *x                 = NULL;
+-	double *y                 = NULL;
+-	int    *segments          = NULL;
+-	int    *segmentmarkerlist = NULL;
+-
+-	/*intermediary: */
+-	int counter,counter2,backcounter;
+-	Contour<IssmPDouble> *contour = NULL;
+-
+-	/* Triangle structures needed to call Triangle library routines: */
+-	struct triangulateio in,out;
+-	char   options[256];
+-
+-	/*Create initial triangulation to call triangulate(). First number of points:*/
+-	in.numberofpoints=0;
+-	for (i=0;i<domain->Size();i++){
+-		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
+-		in.numberofpoints+=contour->nods-1;
+-	}
+-	for (i=0;i<rifts->Size();i++){
+-		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
+-		in.numberofpoints+=contour->nods;
+-	}
+-
+-	/*number of point attributes: */
+-	in.numberofpointattributes=1;
+-
+-	/*fill in the point list: */
+-	in.pointlist = xNew<REAL>(in.numberofpoints*2);
+-
+-	counter=0;
+-	for (i=0;i<domain->Size();i++){
+-		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
+-		for (j=0;j<contour->nods-1;j++){
+-			in.pointlist[2*counter+0]=contour->x[j];
+-			in.pointlist[2*counter+1]=contour->y[j];
+-			counter++;
+-		}
+-	}
+-	for (i=0;i<rifts->Size();i++){
+-		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
+-		for (j=0;j<contour->nods;j++){
+-			in.pointlist[2*counter+0]=contour->x[j];
+-			in.pointlist[2*counter+1]=contour->y[j];
+-			counter++;
+-		}
+-	}
+-
+-	/*fill in the point attribute list: */
+-	in.pointattributelist = xNew<REAL>(in.numberofpoints*in.numberofpointattributes);
+-	for (i=0;i<in.numberofpoints;i++) in.pointattributelist[i] = 0.0;
+-
+-	/*fill in the point marker list: */
+-	in.pointmarkerlist = xNew<int>(in.numberofpoints);
+-	for(i=0;i<in.numberofpoints;i++) in.pointmarkerlist[i] = 0;
+-
+-	/*Build segments. First figure out number of segments: holes and closed outlines have as many segments as vertices: */
+-	in.numberofsegments=0;
+-	for (i=0;i<domain->Size();i++){
+-		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
+-		in.numberofsegments+=contour->nods-1;
+-	}
+-	for(i=0;i<rifts->Size();i++){
+-		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
+-		/*for rifts, we have one less segment as we have vertices*/
+-		in.numberofsegments+=contour->nods-1;
+-	}
+-
+-	in.segmentlist = xNew<int>(in.numberofsegments*2);
+-	in.segmentmarkerlist = xNewZeroInit<int>(in.numberofsegments);
+-	counter=0;
+-	backcounter=0;
+-	for (i=0;i<domain->Size();i++){
+-		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
+-		for (j=0;j<contour->nods-2;j++){
+-			in.segmentlist[2*counter+0]=counter;
+-			in.segmentlist[2*counter+1]=counter+1;
+-			in.segmentmarkerlist[counter]=0;
+-			counter++;
+-		}
+-		/*Close this profile: */
+-		 in.segmentlist[2*counter+0]=counter;
+-		 in.segmentlist[2*counter+1]=backcounter;
+-		 in.segmentmarkerlist[counter]=0;
+-		 counter++;
+-		 backcounter=counter;
+-	}
+-	counter2=counter;
+-	for (i=0;i<rifts->Size();i++){
+-		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
+-		for (j=0;j<(contour->nods-1);j++){
+-			in.segmentlist[2*counter2+0]=counter;
+-			in.segmentlist[2*counter2+1]=counter+1;
+-			in.segmentmarkerlist[counter2]=2+i;
+-			counter2++;
+-			counter++;
+-		}
+-		counter++;
+-	}
+-
+-	/*Build regions: */
+-	in.numberofregions = 0;
+-
+-	/*Build holes: */
+-	in.numberofholes = domain->Size()-1; /*everything is a hole, but for the first profile.*/
+-	if(in.numberofholes){
+-		in.holelist = xNew<REAL>(in.numberofholes*2);
+-		for (i=0;i<domain->Size()-1;i++){
+-			contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i+1);
+-			GridInsideHole(&in.holelist[2*i+0],&in.holelist[2*i+1],contour->nods-1,contour->x,contour->y);
+-		}
+-	}
+-
+-	/* Make necessary initializations so that Triangle can return a triangulation in `out': */
+-	out.pointlist             = (REAL*)NULL;
+-	out.pointattributelist    = (REAL*)NULL;
+-	out.pointmarkerlist       = (int *)NULL;
+-	out.trianglelist          = (int *)NULL;
+-	out.triangleattributelist = (REAL*)NULL;
+-	out.neighborlist          = (int *)NULL;
+-	out.segmentlist           = (int *)NULL;
+-	out.segmentmarkerlist     = (int *)NULL;
+-	out.edgelist              = (int *)NULL;
+-	out.edgemarkerlist        = (int *)NULL;
+-
+-	/* Triangulate the points:.  Switches are chosen to read and write a  */
+-	/*   PSLG (p), preserve the convex hull (c), number everything from  */
+-	/*   zero (z), assign a regional attribute to each element (A), and  */
+-	/*   produce an edge list (e), a Voronoi diagram (v), and a triangle */
+-	/*   neighbor list (n).                                              */
+-	sprintf(options,"%s%lf","pQzDq30ia",area); /*replace V by Q to quiet down the logging*/
+-	triangulate(options, &in, &out, NULL);
+-	/*report(&out, 0, 1, 1, 1, 1, 0);*/
+-
+-	/*Allocate index, x and y: */
+-	index=xNew<int>(3*out.numberoftriangles);
+-	x=xNew<double>(out.numberofpoints);
+-	y=xNew<double>(out.numberofpoints);
+-	segments=xNew<int>(3*out.numberofsegments);
+-	segmentmarkerlist=xNew<int>(out.numberofsegments);
+-
+-	for (i = 0; i< out.numberoftriangles; i++) {
+-		for (j = 0; j < out.numberofcorners; j++) {
+-			index[3*i+j]=(int)out.trianglelist[i*out.numberofcorners+j]+1;
+-		}
+-	}
+-	for (i = 0; i< out.numberofpoints; i++){
+-		x[i]=(double)out.pointlist[i*2+0];
+-		y[i]=(double)out.pointlist[i*2+1];
+-	}
+-	for (i = 0; i<out.numberofsegments;i++){
+-		segments[3*i+0]=(int)out.segmentlist[i*2+0]+1;
+-		segments[3*i+1]=(int)out.segmentlist[i*2+1]+1;
+-		segmentmarkerlist[i]=(int)out.segmentmarkerlist[i];
+-	}
+-
+-	/*Associate elements with segments: */
+-	AssociateSegmentToElement(&segments,out.numberofsegments,index,out.numberoftriangles);
+-
+-	/*Order segments so that their normals point outside the domain: */
+-	OrderSegments(&segments,out.numberofsegments, index,out.numberoftriangles);
+-
+-	/*Output : */
+-	*pindex=index;
+-	*px=x;
+-	*py=y;
+-	*psegments=segments;
+-	*psegmentmarkerlist=segmentmarkerlist;
+-	*pnels=out.numberoftriangles;
+-	*pnods=out.numberofpoints;
+-	*pnsegs=out.numberofsegments;
+-#endif
+-}
+Index: ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(nonexistent)
+@@ -1,13 +0,0 @@
+-/*!\file:  TriMeshx.h
+- * \brief header file for TriMeshx module
+- */ 
+-
+-#ifndef _TRIMESHX_H_
+-#define _TRIMESHX_H_
+-
+-#include <string.h>
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void TriMeshx(int** pindex,IssmPDouble** px,IssmPDouble** py,int** psegments,int** psegmentmarkerlist,int* pnels,int* pnods, int* pnseg,Contours* domain,Contours* rifts,double area);
+-#endif  /* _TRIMESHX_H */
+Index: ../trunk-jpl/src/c/modules/TriMeshx
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshx	(nonexistent)
+
+Property changes on: ../trunk-jpl/src/c/modules/TriMeshx
+___________________________________________________________________
+Deleted: svn:ignore
+## -1,2 +0,0 ##
+-.deps
+-.dirstamp
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h	(nonexistent)
+@@ -1,12 +0,0 @@
+-/*!\file:  TriMeshProcessRiftsx.h
+- * \brief header file for TriMeshProcessRifts module
+- */ 
+-
+-#ifndef _TRIMESHPROCESSRIFTX_H
+-#define _TRIMESHPROCESSRIFTX_H
+-
+-class RiftStruct;
+-
+-void TriMeshProcessRiftsx(int** pindex,int* pnel,double** px,double** py,int* pnods,int** psegments,int** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct);
+-
+-#endif  /* _TRIMESHPROCESSRIFTX_H*/
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp	(nonexistent)
+@@ -1,78 +0,0 @@
+-/*!\file:  TriMeshProcessRifts.cpp
+- * \brief split a mesh where a rift (or fault) is present
+- */ 
+-
+-#include "./TriMeshProcessRiftsx.h"
+-#include "../../classes/RiftStruct.h"
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-
+-void TriMeshProcessRiftsx(int** pindex, int* pnel,double** px,double** py,int* pnods,int** psegments,int** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct){
+-
+-	/*Output*/
+-	int      numrifts,numrifts0;
+-	int     *riftsnumsegments     = NULL;
+-	int    **riftssegments        = NULL;
+-	int     *riftsnumpairs        = NULL;
+-	int    **riftspairs           = NULL;
+-	int     *riftstips            = NULL;
+-	double **riftspenaltypairs    = NULL;
+-	int     *riftsnumpenaltypairs = NULL;
+-
+-	/*Recover initial mesh*/
+-	int     nel            = *pnel;
+-	int    *index          = *pindex;
+-	double *x              = *px;
+-	double *y              = *py;
+-	int     nods           = *pnods;
+-	int    *segments       = *psegments;
+-	int    *segmentmarkers = *psegmentmarkers;
+-	int     num_seg        = *pnum_seg;
+-
+-	/*Intermediary*/
+-	int     riftflag;
+-
+-	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
+-	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
+-	RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
+-
+-	/*Figure out if we have rifts, and how many: */
+-	IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
+-
+-	if(!riftflag) _error_("No rift present in mesh");
+-
+-	/*Split mesh*/
+-	SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
+-
+-	/*Order segments so that their normals point outside the domain: */
+-	OrderSegments(&segments,num_seg, index,nel);
+-
+-	/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
+-	 *segmentmarkerlist:*/
+-	SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
+-
+-	/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
+-	PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
+-
+-	/*Order rifts so that they start from one tip, go to the other tip, and back: */
+-	OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
+-
+-	/*Create penalty pairs, used by Imp: */
+-	PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
+-
+-	/*Create Riftstruct*/
+-	RiftStruct* riftstruct = new RiftStruct(numrifts,riftsnumsegments,riftssegments,riftsnumpairs,riftspairs,riftsnumpenaltypairs,riftspenaltypairs,riftstips);
+-
+-	/*Assign output pointers for mesh*/
+-	*pnel            = nel;
+-	*pindex          = index;
+-	*px              = x;
+-	*py              = y;
+-	*pnods           = nods;
+-	*psegments       = segments;
+-	*psegmentmarkers = segmentmarkers;
+-	*pnum_seg        = num_seg;
+-
+-	/*Assign output pointers for rifts*/
+-	*priftstruct = riftstruct;
+-}
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx	(revision 22497)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx	(nonexistent)
+
+Property changes on: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx
+___________________________________________________________________
+Deleted: svn:ignore
+## -1,2 +0,0 ##
+-.deps
+-.dirstamp
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 22497)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 22498)
+@@ -90,8 +90,8 @@
+ #include "./SystemMatricesx/SystemMatricesx.h"
+ #include "./SpcNodesx/SpcNodesx.h"
+ #include "./SurfaceAreax/SurfaceAreax.h"
+-#include "./TriMeshx/TriMeshx.h"
+-#include "./TriMeshProcessRiftsx/TriMeshProcessRiftsx.h"
++#include "./Trianglex/Trianglex.h"
++#include "./ProcessRiftsx/ProcessRiftsx.h"
+ #include "./ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
+ #include "./ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+ #include "./ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+Index: ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.h	(nonexistent)
++++ ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.h	(revision 22498)
+@@ -0,0 +1,12 @@
++/*!\file:  ProcessRiftsx.h
++ * \brief header file for ProcessRifts module
++ */ 
++
++#ifndef _PROCESSRIFTX_H
++#define _PROCESSRIFTX_H
++
++class RiftStruct;
++
++void ProcessRiftsx(int** pindex,int* pnel,double** px,double** py,int* pnods,int** psegments,int** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct);
++
++#endif  /* _PROCESSRIFTX_H*/
+Index: ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.cpp	(revision 22498)
+@@ -0,0 +1,78 @@
++/*!\file:  ProcessRifts.cpp
++ * \brief split a mesh where a rift (or fault) is present
++ */ 
++
++#include "./ProcessRiftsx.h"
++#include "../../classes/RiftStruct.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++
++void ProcessRiftsx(int** pindex, int* pnel,double** px,double** py,int* pnods,int** psegments,int** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct){
++
++	/*Output*/
++	int      numrifts,numrifts0;
++	int     *riftsnumsegments     = NULL;
++	int    **riftssegments        = NULL;
++	int     *riftsnumpairs        = NULL;
++	int    **riftspairs           = NULL;
++	int     *riftstips            = NULL;
++	double **riftspenaltypairs    = NULL;
++	int     *riftsnumpenaltypairs = NULL;
++
++	/*Recover initial mesh*/
++	int     nel            = *pnel;
++	int    *index          = *pindex;
++	double *x              = *px;
++	double *y              = *py;
++	int     nods           = *pnods;
++	int    *segments       = *psegments;
++	int    *segmentmarkers = *psegmentmarkers;
++	int     num_seg        = *pnum_seg;
++
++	/*Intermediary*/
++	int     riftflag;
++
++	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
++	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
++	RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
++
++	/*Figure out if we have rifts, and how many: */
++	IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
++
++	if(!riftflag) _error_("No rift present in mesh");
++
++	/*Split mesh*/
++	SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
++
++	/*Order segments so that their normals point outside the domain: */
++	OrderSegments(&segments,num_seg, index,nel);
++
++	/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
++	 *segmentmarkerlist:*/
++	SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
++
++	/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
++	PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
++
++	/*Order rifts so that they start from one tip, go to the other tip, and back: */
++	OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
++
++	/*Create penalty pairs, used by Imp: */
++	PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
++
++	/*Create Riftstruct*/
++	RiftStruct* riftstruct = new RiftStruct(numrifts,riftsnumsegments,riftssegments,riftsnumpairs,riftspairs,riftsnumpenaltypairs,riftspenaltypairs,riftstips);
++
++	/*Assign output pointers for mesh*/
++	*pnel            = nel;
++	*pindex          = index;
++	*px              = x;
++	*py              = y;
++	*pnods           = nods;
++	*psegments       = segments;
++	*psegmentmarkers = segmentmarkers;
++	*pnum_seg        = num_seg;
++
++	/*Assign output pointers for rifts*/
++	*priftstruct = riftstruct;
++}
+Index: ../trunk-jpl/src/c/modules/ProcessRiftsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ProcessRiftsx	(nonexistent)
++++ ../trunk-jpl/src/c/modules/ProcessRiftsx	(revision 22498)
+
+Property changes on: ../trunk-jpl/src/c/modules/ProcessRiftsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Trianglex/Trianglex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Trianglex/Trianglex.h	(nonexistent)
++++ ../trunk-jpl/src/c/modules/Trianglex/Trianglex.h	(revision 22498)
+@@ -0,0 +1,13 @@
++/*!\file:  Trianglex.h
++ * \brief header file for Trianglex module
++ */ 
++
++#ifndef _TRIANGLEX_H_
++#define _TRIANGLEX_H_
++
++#include <string.h>
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void Trianglex(int** pindex,IssmPDouble** px,IssmPDouble** py,int** psegments,int** psegmentmarkerlist,int* pnels,int* pnods, int* pnseg,Contours* domain,Contours* rifts,double area);
++#endif  /* _TRIANGLEX_H */
+Index: ../trunk-jpl/src/c/modules/Trianglex/Trianglex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Trianglex/Trianglex.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/modules/Trianglex/Trianglex.cpp	(revision 22498)
+@@ -0,0 +1,201 @@
++/*!\file Trianglex
++ * \brief: x code for Triangle mesher
++ */
++
++/*Header files: {{{*/
++#include "./Trianglex.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++/*ANSI_DECLARATORS needed to call triangle library: */
++#if defined(_HAVE_TRIANGLE_)
++	#ifndef ANSI_DECLARATORS
++	#define ANSI_DECLARATORS
++	#endif
++	#include "triangle.h"
++	#undef ANSI_DECLARATORS
++#endif
++/*}}}*/
++
++void Trianglex(int** pindex,IssmPDouble** px,IssmPDouble** py,int** psegments,int** psegmentmarkerlist,int* pnels,int* pnods, int* pnsegs,Contours* domain,Contours* rifts,double area){
++
++#if !defined(_HAVE_TRIANGLE_)
++	_error_("triangle has not been installed");
++#else
++	/*indexing: */
++	int i,j;
++
++	/*output: */
++	int    *index             = NULL;
++	double *x                 = NULL;
++	double *y                 = NULL;
++	int    *segments          = NULL;
++	int    *segmentmarkerlist = NULL;
++
++	/*intermediary: */
++	int counter,counter2,backcounter;
++	Contour<IssmPDouble> *contour = NULL;
++
++	/* Triangle structures needed to call Triangle library routines: */
++	struct triangulateio in,out;
++	char   options[256];
++
++	/*Create initial triangulation to call triangulate(). First number of points:*/
++	in.numberofpoints=0;
++	for (i=0;i<domain->Size();i++){
++		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
++		in.numberofpoints+=contour->nods-1;
++	}
++	for (i=0;i<rifts->Size();i++){
++		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
++		in.numberofpoints+=contour->nods;
++	}
++
++	/*number of point attributes: */
++	in.numberofpointattributes=1;
++
++	/*fill in the point list: */
++	in.pointlist = xNew<REAL>(in.numberofpoints*2);
++
++	counter=0;
++	for (i=0;i<domain->Size();i++){
++		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
++		for (j=0;j<contour->nods-1;j++){
++			in.pointlist[2*counter+0]=contour->x[j];
++			in.pointlist[2*counter+1]=contour->y[j];
++			counter++;
++		}
++	}
++	for (i=0;i<rifts->Size();i++){
++		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
++		for (j=0;j<contour->nods;j++){
++			in.pointlist[2*counter+0]=contour->x[j];
++			in.pointlist[2*counter+1]=contour->y[j];
++			counter++;
++		}
++	}
++
++	/*fill in the point attribute list: */
++	in.pointattributelist = xNew<REAL>(in.numberofpoints*in.numberofpointattributes);
++	for (i=0;i<in.numberofpoints;i++) in.pointattributelist[i] = 0.0;
++
++	/*fill in the point marker list: */
++	in.pointmarkerlist = xNew<int>(in.numberofpoints);
++	for(i=0;i<in.numberofpoints;i++) in.pointmarkerlist[i] = 0;
++
++	/*Build segments. First figure out number of segments: holes and closed outlines have as many segments as vertices: */
++	in.numberofsegments=0;
++	for (i=0;i<domain->Size();i++){
++		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
++		in.numberofsegments+=contour->nods-1;
++	}
++	for(i=0;i<rifts->Size();i++){
++		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
++		/*for rifts, we have one less segment as we have vertices*/
++		in.numberofsegments+=contour->nods-1;
++	}
++
++	in.segmentlist = xNew<int>(in.numberofsegments*2);
++	in.segmentmarkerlist = xNewZeroInit<int>(in.numberofsegments);
++	counter=0;
++	backcounter=0;
++	for (i=0;i<domain->Size();i++){
++		contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i);
++		for (j=0;j<contour->nods-2;j++){
++			in.segmentlist[2*counter+0]=counter;
++			in.segmentlist[2*counter+1]=counter+1;
++			in.segmentmarkerlist[counter]=0;
++			counter++;
++		}
++		/*Close this profile: */
++		 in.segmentlist[2*counter+0]=counter;
++		 in.segmentlist[2*counter+1]=backcounter;
++		 in.segmentmarkerlist[counter]=0;
++		 counter++;
++		 backcounter=counter;
++	}
++	counter2=counter;
++	for (i=0;i<rifts->Size();i++){
++		contour=(Contour<IssmPDouble>*)rifts->GetObjectByOffset(i);
++		for (j=0;j<(contour->nods-1);j++){
++			in.segmentlist[2*counter2+0]=counter;
++			in.segmentlist[2*counter2+1]=counter+1;
++			in.segmentmarkerlist[counter2]=2+i;
++			counter2++;
++			counter++;
++		}
++		counter++;
++	}
++
++	/*Build regions: */
++	in.numberofregions = 0;
++
++	/*Build holes: */
++	in.numberofholes = domain->Size()-1; /*everything is a hole, but for the first profile.*/
++	if(in.numberofholes){
++		in.holelist = xNew<REAL>(in.numberofholes*2);
++		for (i=0;i<domain->Size()-1;i++){
++			contour=(Contour<IssmPDouble>*)domain->GetObjectByOffset(i+1);
++			GridInsideHole(&in.holelist[2*i+0],&in.holelist[2*i+1],contour->nods-1,contour->x,contour->y);
++		}
++	}
++
++	/* Make necessary initializations so that Triangle can return a triangulation in `out': */
++	out.pointlist             = (REAL*)NULL;
++	out.pointattributelist    = (REAL*)NULL;
++	out.pointmarkerlist       = (int *)NULL;
++	out.trianglelist          = (int *)NULL;
++	out.triangleattributelist = (REAL*)NULL;
++	out.neighborlist          = (int *)NULL;
++	out.segmentlist           = (int *)NULL;
++	out.segmentmarkerlist     = (int *)NULL;
++	out.edgelist              = (int *)NULL;
++	out.edgemarkerlist        = (int *)NULL;
++
++	/* Triangulate the points:.  Switches are chosen to read and write a  */
++	/*   PSLG (p), preserve the convex hull (c), number everything from  */
++	/*   zero (z), assign a regional attribute to each element (A), and  */
++	/*   produce an edge list (e), a Voronoi diagram (v), and a triangle */
++	/*   neighbor list (n).                                              */
++	sprintf(options,"%s%lf","pQzDq30ia",area); /*replace V by Q to quiet down the logging*/
++	triangulate(options, &in, &out, NULL);
++	/*report(&out, 0, 1, 1, 1, 1, 0);*/
++
++	/*Allocate index, x and y: */
++	index=xNew<int>(3*out.numberoftriangles);
++	x=xNew<double>(out.numberofpoints);
++	y=xNew<double>(out.numberofpoints);
++	segments=xNew<int>(3*out.numberofsegments);
++	segmentmarkerlist=xNew<int>(out.numberofsegments);
++
++	for (i = 0; i< out.numberoftriangles; i++) {
++		for (j = 0; j < out.numberofcorners; j++) {
++			index[3*i+j]=(int)out.trianglelist[i*out.numberofcorners+j]+1;
++		}
++	}
++	for (i = 0; i< out.numberofpoints; i++){
++		x[i]=(double)out.pointlist[i*2+0];
++		y[i]=(double)out.pointlist[i*2+1];
++	}
++	for (i = 0; i<out.numberofsegments;i++){
++		segments[3*i+0]=(int)out.segmentlist[i*2+0]+1;
++		segments[3*i+1]=(int)out.segmentlist[i*2+1]+1;
++		segmentmarkerlist[i]=(int)out.segmentmarkerlist[i];
++	}
++
++	/*Associate elements with segments: */
++	AssociateSegmentToElement(&segments,out.numberofsegments,index,out.numberoftriangles);
++
++	/*Order segments so that their normals point outside the domain: */
++	OrderSegments(&segments,out.numberofsegments, index,out.numberoftriangles);
++
++	/*Output : */
++	*pindex=index;
++	*px=x;
++	*py=y;
++	*psegments=segments;
++	*psegmentmarkerlist=segmentmarkerlist;
++	*pnels=out.numberoftriangles;
++	*pnods=out.numberofpoints;
++	*pnsegs=out.numberofsegments;
++#endif
++}
+Index: ../trunk-jpl/src/c/modules/Trianglex
+===================================================================
+--- ../trunk-jpl/src/c/modules/Trianglex	(nonexistent)
++++ ../trunk-jpl/src/c/modules/Trianglex	(revision 22498)
+
+Property changes on: ../trunk-jpl/src/c/modules/Trianglex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/CoordinateSystemTransformx/CoordinateSystemTransformx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CoordinateSystemTransformx/CoordinateSystemTransformx.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/modules/CoordinateSystemTransformx/CoordinateSystemTransformx.cpp	(revision 22498)
+@@ -1,5 +1,5 @@
+-/*!\file TriMeshx
+- * \brief: x code for TriMesh mesher
++/*!\file CoordinateSystemTransformx
++ * \brief: x code for CoordinateSystemTransformx
+  */
+ 
+ /*Header files*/
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22497)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22498)
+@@ -560,13 +560,13 @@
+ modules_sources= ./shared/Threads/LaunchThread.cpp\
+ 			./shared/Threads/PartitionRange.cpp\
+ 			./shared/Exp/exp.cpp\
+-			./shared/TriMesh/AssociateSegmentToElement.cpp\
+-			./shared/TriMesh/GridInsideHole.cpp\
+-			./shared/TriMesh/OrderSegments.cpp\
+-			./shared/TriMesh/SplitMeshForRifts.cpp\
+-			./shared/TriMesh/TriMeshUtils.cpp\
+-			./modules/TriMeshx/TriMeshx.cpp\
+-			./modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp\
++			./shared/Triangle/AssociateSegmentToElement.cpp\
++			./shared/Triangle/GridInsideHole.cpp\
++			./shared/Triangle/OrderSegments.cpp\
++			./shared/Triangle/SplitMeshForRifts.cpp\
++			./shared/Triangle/TriangleUtils.cpp\
++			./modules/Trianglex/Trianglex.cpp\
++			./modules/ProcessRiftsx/ProcessRiftsx.cpp\
+ 			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp\
+ 			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp\
+ 			./modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp\
+Index: ../trunk-jpl/src/c/main/issm.js
+===================================================================
+--- ../trunk-jpl/src/c/main/issm.js	(revision 22497)
++++ ../trunk-jpl/src/c/main/issm.js	(revision 22498)
+@@ -10,7 +10,7 @@
+ 	var dbinaryPtr= Module._malloc(nb); var binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
+ 	binHeap.set(new Uint8Array(dbinary.buffer)); var binary=binHeap.byteOffset;
+ 
+-	//Declare TriMesh module: 
++	//Declare module: 
+ 	issm= Module.cwrap('main','number',['number','number']);
+ 	
+ 	//Call issm:
+Index: ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(nonexistent)
+@@ -1,96 +0,0 @@
+-/*
+- * SplitMeshForRifts.c:
+- */
+-#include "./trimesh.h"
+-#include "../MemOps/MemOps.h"
+-
+-int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist){
+-
+-	/*Some notes on dimensions: 
+-	index  of size nelx3
+-	x and y of size nodsx1
+-	segments of size nsegsx3*/
+-
+-	int i,j,k,l;
+-	int node;
+-	int el;
+-	int  nriftsegs;
+-	int* riftsegments=NULL; 
+-	int* flags=NULL;
+-	int  NumGridElementListOnOneSideOfRift;
+-	int* GridElementListOnOneSideOfRift=NULL;
+-
+-	/*Recover input: */
+-	int     nel               = *pnel;
+-	int    *index             = *pindex;
+-	int     nods              = *pnods;
+-	double *x                 = *px;
+-	double *y                 = *py;
+-	int     nsegs             = *pnsegs;
+-	int    *segments          = *psegments;
+-	int    *segmentmarkerlist = *psegmentmarkerlist;
+-
+-	/*Establish list of segments that belong to a rift: */
+-	/*riftsegments of size nriftsegsx4 (4 for first element on segment,second element,first node and second snode)*/
+-	RiftSegmentsFromSegments(&nriftsegs,&riftsegments,nel,index,nsegs,segments);
+-
+-	/*Go through all nodes of the rift segments, and start splitting the mesh: */
+-	flags=xNewZeroInit<int>(nods); //to make sure we don't split the same nodes twice!
+-	for (i=0;i<nriftsegs;i++){
+-		for (j=0;j<2;j++){
+-
+-			node=riftsegments[4*i+j+2];
+-			if(flags[node-1]){
+-				/*This node was already split, skip:*/
+-				continue;
+-			}
+-			else{
+-				flags[node-1]=1;
+-			}
+-
+-			if(IsGridOnRift(riftsegments,nriftsegs,node)){
+-
+-				DetermineGridElementListOnOneSideOfRift(&NumGridElementListOnOneSideOfRift,&GridElementListOnOneSideOfRift,i,nriftsegs,riftsegments,node,index,nel);
+-
+-				/*Summary: we have for node, a list of elements
+-				 * (GridElementListOnOneSideOfRift, of size
+-				 * NumGridElementListOnOneSideOfRift) that all contain node 
+-				 *and that are on the same side of the rift. For all these
+-				 elements, we clone node into another node, and we swap all
+-				 instances of node in the triangulation *for those elements, to the
+-				 new node.*/
+-
+-				//create new node
+-				x=xReNew<double>(x,nods,nods+1);
+-				y=xReNew<double>(y,nods,nods+1);
+-				x[nods]=x[node-1]; //matlab indexing
+-				y[nods]=y[node-1]; //matlab indexing
+-
+-				//augment number of nodes 
+-				nods++;
+-
+-				//change elements owning this node
+-				for (k=0;k<NumGridElementListOnOneSideOfRift;k++){
+-					el=GridElementListOnOneSideOfRift[k];
+-					for (l=0;l<3;l++){
+-						if (index[3*el+l]==node) index[3*el+l]=nods; //again, matlab indexing.
+-					}
+-				}
+-			}// if(IsGridOnRift(riftsegments,nriftsegs,node))
+-		} //for(j=0;j<2;j++)
+-	} //for (i=0;i<nriftsegs;i++)
+-
+-	/*update segments: they got modified completely by adding new nodes.*/
+-	UpdateSegments(&segments,&segmentmarkerlist, &nsegs,index,x,y,riftsegments,nriftsegs,nods,nel);
+-
+-	/*Assign output pointers: */
+-	*pnel=nel;
+-	*pindex=index;
+-	*pnods=nods;
+-	*px=x;
+-	*py=y;
+-	*pnsegs=nsegs;
+-	*psegments=segments;
+-	*psegmentmarkerlist=segmentmarkerlist;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/TriMesh/GridInsideHole.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/GridInsideHole.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/GridInsideHole.cpp	(nonexistent)
+@@ -1,51 +0,0 @@
+-/*
+- * GridInsideHole.c:
+- * from a convex set of points, figure out a point that for sure lies inside the profile.
+- */
+-
+-#include <math.h>
+-
+-#include "./trimesh.h"
+-#include "../Exp/exp.h"
+-
+-#undef M_PI
+-#define M_PI 3.141592653589793238462643
+-
+-int GridInsideHole(double* px0,double* py0,int n,double* x,double* y){
+-
+-	double flag=0.0;
+-	double xA,xB,xC,xD,xE;
+-	double yA,yB,yC,yD,yE;
+-
+-	/*Take first and last vertices: */
+-	xA=x[0];
+-	yA=y[0];
+-	xB=x[n-1];
+-	yB=y[n-1];
+-
+-	/*Figure out middle of segment [A B]: */
+-	xC=(xA+xB)/2;
+-	yC=(yA+yB)/2;
+-
+-	/*D and E are on each side of segment [A B], on the median line between segment [A  B], 
+-	 *at an angle of 10 degree (less than the minimum 30 enforced by the quality of the mesh: */
+-	xD=xC+tan(10./180.*M_PI)*(yC-yA);
+-	yD=yC+tan(10./180.*M_PI)*(xA-xC);
+-	xE=xC-tan(10./180.*M_PI)*(yC-yA);
+-	yE=yC-tan(10./180.*M_PI)*(xA-xC);
+-
+-	/*Either E or D is inside profile (x,y): */
+-	IsInPolySerial(&flag,&xD,&yD,1,x,y,n,2);
+-	/*FIXME: used to be 'flag' and not '!flag', check*/
+-	if(!flag){
+-		/*D is inside the poly: */
+-		*px0=xD;
+-		*py0=yD;
+-	}
+-	else{
+-		/*E is inside the poly: */
+-		*px0=xE;
+-		*py0=yE;
+-	}
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp	(nonexistent)
+@@ -1,24 +0,0 @@
+-/*!\file:  AssociateSegmentToElement.cpp
+- * \brief for each segment, look for the corresponding element.
+- */ 
+-
+-#include "./trimesh.h"
+-
+-int AssociateSegmentToElement(int** psegments,int nseg,int* index,int nel){
+-
+-	/*node indices: */
+-	int A,B;
+-
+-	/*Recover segments: */
+-	int* segments=*psegments;
+-
+-	for(int i=0;i<nseg;i++){
+-		A=segments[3*i+0];
+-		B=segments[3*i+1];
+-		segments[3*i+2]=FindElement(A,B,index,nel)+1; //matlab indexing.
+-	}
+-
+-	/*Assign output pointers: */
+-	*psegments=segments;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(nonexistent)
+@@ -1,912 +0,0 @@
+-/*
+- * TriMeshUtils: mesh manipulation routines: 
+- */
+-
+-#include <stdio.h>
+-
+-#include "./trimesh.h"
+-#include "../Exceptions/exceptions.h"
+-#include "../MemOps/MemOps.h"
+-
+-#define RIFTPENALTYPAIRSWIDTH 8
+-int IsGridOnRift(int* riftsegments, int nriftsegs, int node){/*{{{*/
+-
+-	/*Does this node belong to 4 elements, or just 2? If it belongs to 4 elements, it is inside a rift, 
+-	 *if it belongs to 2 elements, it is on the tip of a rift, or it has already been split across the rift (see below).*/
+-
+-	int i;
+-	int j;
+-	int count;
+-
+-	count=0;
+-	for (i=0;i<nriftsegs;i++){
+-		for (j=0;j<2;j++){
+-			if ((*(riftsegments+4*i+2+j))==node) count++;
+-		}
+-	}
+-	if (count==2){
+-		return 1;
+-	}
+-	else{
+-		return 0;
+-	}
+-}/*}}}*/
+-int GridElementsList(int** pGridElements, int* pNumGridElements,int node,int* index,int nel){/*{{{*/
+-
+-	/*From a node, recover all the elements that are connected to it: */
+-	int i,j;
+-	int noerr=1;
+-
+-	int max_number_elements=12;
+-	int current_size;
+-	int NumGridElements;
+-	int* GridElements=NULL;
+-	int* GridElementsRealloc=NULL;
+-
+-	/*From a mesh with 30 degrees minimum angle, we get 12 possible elements that own 
+-	 * the node. We start by allocating GridElements with that size, and realloc 
+-	 * more if needed.*/
+-
+-	current_size=max_number_elements;
+-	NumGridElements=0;
+-	GridElements=xNew<int>(max_number_elements);
+-
+-	for (i=0;i<nel;i++){
+-		for (j=0;j<3;j++){
+-			if (index[3*i+j]==node){
+-				if (NumGridElements<=(current_size-1)){
+-					GridElements[NumGridElements]=i;
+-					NumGridElements++;
+-					break;
+-				}
+-				else{
+-					/*Reallocate another max_number_elements slots in the GridElements: */
+-					GridElementsRealloc=xReNew<int>(GridElements,current_size,(current_size+max_number_elements));
+-					if (!GridElementsRealloc){
+-						noerr=0;
+-						goto cleanup_and_return;
+-					}
+-					current_size+=max_number_elements;
+-					GridElements=GridElementsRealloc;
+-					GridElements[NumGridElements]=i;
+-					NumGridElements++;
+-					break;
+-				}
+-			}
+-		}
+-	}
+-	cleanup_and_return:
+-	if(!noerr){
+-		xDelete<int>(GridElements);
+-	}
+-	/*Allocate return pointers: */
+-	*pGridElements=GridElements;
+-	*pNumGridElements=NumGridElements;
+-	return noerr;
+-}/*}}}*/
+-int IsNeighbor(int el1,int el2,int* index){/*{{{*/
+-	/*From a triangulation held in index, figure out if elements 1 and 2 have two nodes in common: */
+-	int i,j;
+-	int count=0;
+-	for (i=0;i<3;i++){
+-		for (j=0;j<3;j++){
+-			if (index[3*el1+i]==index[3*el2+j])count++;
+-		}
+-	}
+-	if (count==2){
+-		return 1;
+-	}
+-	else{
+-		return 0;
+-	}
+-}/*}}}*/
+-int IsOnRift(int el,int nriftsegs,int* riftsegments){/*{{{*/
+-	/*From a list of elements segments, figure out if el belongs to it: */
+-	int i;
+-	for (i=0;i<nriftsegs;i++){
+-		if ((*(riftsegments+4*i+0)==el) || (*(riftsegments+4*i+1)==el)){
+-			return 1;
+-		}
+-	}
+-	return 0;
+-}/*}}}*/
+-void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel,int* index,int nsegs,int* segments){/*{{{*/
+-
+-	int i,counter;
+-	int el,el2;
+-
+-	int  nriftsegs;
+-	int* riftsegments=NULL;
+-	int* riftsegments_uncompressed=NULL; 
+-	int  element_nodes[3];
+-
+-	/*Allocate segmentflags: */
+-	riftsegments_uncompressed=xNewZeroInit<int>(nsegs*5);
+-
+-	/*Find the segments that belong to a rift: they are the ones that see two elements. The other ones belong to a boundary 
+-	 *or a hole: */
+-	nriftsegs=0;
+-	for (i=0;i<nsegs;i++){
+-		el=(int)*(segments+3*i+2)-1; //element found in AssociateSegmentToElements
+-		/*Temporarily set nodes belonging to the segments to -1 in the triangulation index, and 
+-		 *then  proceed to find another element that owns the segment. If we don't find it, we know 
+-		 *we are dealing with a boundary or hole, otherwise, we are dealing with a rift: */
+-		element_nodes[0]=*(index+3*el+0);
+-		element_nodes[1]=*(index+3*el+1);
+-		element_nodes[2]=*(index+3*el+2);
+-
+-		index[3*el+0]=-1;
+-		index[3*el+1]=-1;
+-		index[3*el+2]=-1;
+-
+-		el2=FindElement(*(segments+3*i+0),*(segments+3*i+1),index,nel); 
+-
+-		/*Restore index: */
+-		index[3*el+0]=element_nodes[0];
+-		index[3*el+1]=element_nodes[1];
+-		index[3*el+2]=element_nodes[2];
+-
+-		if (el2!=-1){
+-			/*el and el2 are on a segment rift, facing one another, plug them into riftsegments_uncompressed: */
+-		    riftsegments_uncompressed[5*i+0]=1;
+-		    riftsegments_uncompressed[5*i+1]=el;
+-		    riftsegments_uncompressed[5*i+2]=el2;
+-		    riftsegments_uncompressed[5*i+3]=segments[3*i+0];
+-			 riftsegments_uncompressed[5*i+4]=segments[3*i+1];
+-			 nriftsegs++;
+-		}
+-	}
+-
+-	/*Compress riftsegments_uncompressed:*/
+-	riftsegments=xNew<int>(nriftsegs*4);
+-	counter=0;
+-	for (i=0;i<nsegs;i++){
+-		if (riftsegments_uncompressed[5*i+0]){
+-			riftsegments[counter*4+0]=riftsegments_uncompressed[5*i+1];
+-			riftsegments[counter*4+1]=riftsegments_uncompressed[5*i+2];
+-			riftsegments[counter*4+2]=riftsegments_uncompressed[5*i+3];
+-			riftsegments[counter*4+3]=riftsegments_uncompressed[5*i+4];
+-			counter++;
+-		}
+-	}
+-	xDelete<int>(riftsegments_uncompressed);
+-
+-	/*Assign output pointers: */
+-	*priftsegments=riftsegments;
+-	*pnriftsegs=nriftsegs;
+-}/*}}}*/
+-int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift, int segmentnumber, int nriftsegs, int* riftsegments, int node,int* index,int nel){/*{{{*/
+-
+-	int noerr=1;
+-	int k,l,counter;
+-	int newel;
+-
+-	int* GridElements=NULL;
+-	int  NumGridElements;
+-
+-	/*Output: */
+-	int NumGridElementListOnOneSideOfRift;
+-	int* GridElementListOnOneSideOfRift=NULL;
+-
+-	/*Build a list of all the elements connected to this node: */
+-	GridElementsList(&GridElements,&NumGridElements,node,index,nel);
+-
+-	/*Figure out the list of elements  that are on the same side of the rift. To do so, we start from one 
+-	 * side of the rift and keep rotating in the same direction:*/
+-	GridElementListOnOneSideOfRift=xNew<int>(NumGridElements);
+-	//bootstrap the GridElementListOnOneSideOfRift by filling elements from riftsegments: */
+-	GridElementListOnOneSideOfRift[0]=*(riftsegments+4*segmentnumber+0); /*this one does not belong to the same side, but is just there 
+-															   for a rotation direction, we 'll take it out when we are 
+-															   done rotating*/
+-	GridElementListOnOneSideOfRift[1]=*(riftsegments+4*segmentnumber+1);
+-	counter=1;
+-	for (;;){
+-		/*Find neighbour of element GridElementListOnOneSideOfRift[counter], not 
+-		 * equal to GridElementListOnOneSideOfRift[counter-1]*/
+-		for (k=0;k<NumGridElements;k++){
+-			if(IsNeighbor(GridElements[k],GridElementListOnOneSideOfRift[counter],index)){
+-				/*Verify this element is not already in our list of element on the same side of the rift: */
+-				newel=1;
+-				for (l=0;l<=counter;l++){
+-					if (GridElements[k]==GridElementListOnOneSideOfRift[l]){
+-						newel=0;
+-						break;
+-					}
+-				}
+-				if (newel){
+-					counter++;
+-					GridElementListOnOneSideOfRift[counter]=GridElements[k];
+-					if (IsOnRift(GridElements[k],nriftsegs,riftsegments)){
+-						break;
+-					}
+-					k=-1;
+-				}
+-			}
+-		}
+-		/*Reduce counter by 1 and get rift of first element in GridElementListOnOneSideOfRift:*/
+-		NumGridElementListOnOneSideOfRift=counter;
+-		for (l=0;l<NumGridElementListOnOneSideOfRift;l++){
+-			GridElementListOnOneSideOfRift[l]=GridElementListOnOneSideOfRift[l+1];
+-		}
+-		break;
+-	}// for (;;)
+-
+-	/*Free ressources: */
+-	xDelete<int>(GridElements);
+-	/*Assign output pointers: */
+-	*pNumGridElementListOnOneSideOfRift=NumGridElementListOnOneSideOfRift;
+-	*pGridElementListOnOneSideOfRift=GridElementListOnOneSideOfRift;
+-	return noerr;
+-}/*}}}*/
+-int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel){/*{{{*/
+-
+-	int noerr=1;
+-	int i,j,k;
+-	int el1,el2;
+-
+-	int *segments          = NULL;
+-	int *segmentmarkerlist = NULL;
+-	int  nsegs;
+-
+-	/*Recover input: */
+-	segments          = *psegments;
+-	segmentmarkerlist = *psegmentmarkerlist;
+-	nsegs             = *pnsegs;
+-
+-	/*Reallocate segments: */
+-	segments         =xReNew<int>(segments,         nsegs*3,(nsegs+nriftsegs)*3);
+-	segmentmarkerlist=xReNew<int>(segmentmarkerlist,nsegs,(nsegs+nriftsegs));
+-
+-	/*First, update the existing segments to the new nodes :*/
+-	for (i=0;i<nriftsegs;i++){
+-		el1=riftsegments[4*i+0];
+-		el2=riftsegments[4*i+1];
+-		for (j=0;j<nsegs;j++){
+-			if (segments[3*j+2]==(el1+1)){
+-				/*segment j is the same as rift segment i.Let's update segments[j][:] using  element el1 and the corresponding rift segment.
+-				 *Because riftsegments does not represent a list of rift segments anymore (it got heavily modified in SplitElementsForRifts, 
+-				 *we can only rely on the position (x,y) of the rift nodes to create a segment:*/
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){
+-						*(segments+3*j+0)=*(index+el1*3+k); _assert_(segments[3*j+0]<nods+1);
+-						break;
+-					}
+-				}
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1])  && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){
+-						*(segments+3*j+1)=*(index+el1*3+k); _assert_(segments[3*j+1]<nods+1);
+-						break;
+-					}
+-				}
+-				/*Deal with el2: */
+-				*(segments+3*(nsegs+i)+2)=el2+1;
+-				*(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j);
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){
+-						*(segments+3*(nsegs+i)+0)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+0]<nods+1);
+-						break;
+-					}
+-				}
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){
+-						*(segments+3*(nsegs+i)+1)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+1]<nods+1);
+-						break;
+-					}
+-				}
+-			}
+-			if (*(segments+3*j+2)==(el2+1)){
+-				/*segment j is the same as rift segment i.*/
+-				/*Let's update segments[j][:] using  element el2 and the corresponding rift segment: */
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){
+-						*(segments+3*j+0)=*(index+el2*3+k); _assert_(segments[3*j+0]<nods+1);
+-						break;
+-					}
+-				}
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){
+-						*(segments+3*j+1)=*(index+el2*3+k);_assert_(segments[3*j+1]<nods+1);
+-						break;
+-					}
+-				}
+-				/*Deal with el1: */
+-				*(segments+3*(nsegs+i)+2)=el1+1;
+-				*(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j);
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){
+-						*(segments+3*(nsegs+i)+0)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+0]<nods+1);
+-						break;
+-					}
+-				}
+-				for (k=0;k<3;k++){
+-					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){
+-						*(segments+3*(nsegs+i)+1)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+1]<nods+1);
+-						break;
+-					}
+-				}
+-			}
+-		}
+-	}
+-	nsegs+=nriftsegs;
+-
+-	/*Assign output pointers: */
+-	*psegments=segments;
+-	*psegmentmarkerlist=segmentmarkerlist;
+-	*pnsegs=nsegs;
+-
+-	return noerr;
+-}/*}}}*/
+-int FindElement(int A,int B,int* index,int nel){/*{{{*/
+-
+-	int el=-1;
+-	for (int n=0;n<nel;n++){
+-		if(((index[3*n+0]==A) || (index[3*n+1]==A) || (index[3*n+2]==A)) && ((index[3*n+0]==B) || (index[3*n+1]==B) || (index[3*n+2]==B))){
+-			el=n;
+-			break;
+-		}
+-	}
+-	return el;
+-}/*}}}*/
+-int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nel){/*{{{*/
+-
+-	/*Using segment markers, wring out the rift segments from the segments. Rift markers are 
+-	 *of the form 2+i where i=0 to number of rifts */
+-
+-	int noerr=1;
+-	int i,j,counter;
+-
+-	/*input: */
+-	int *segments          = NULL;
+-	int *segmentmarkerlist = NULL;
+-	int numsegs;
+-
+-	/*output: */
+-	int   new_numsegs;
+-	int  *riftsnumsegs       = NULL;
+-	int **riftssegments      = NULL;
+-	int  *new_segments       = NULL;
+-	int  *new_segmentmarkers = NULL;
+-
+-	/*intermediary: */
+-	int* riftsegment=NULL;
+-
+-	/*Recover input arguments: */
+-	segments          = *psegments;
+-	numsegs           = *pnumsegs;
+-	segmentmarkerlist = *psegmentmarkerlist;
+-
+-	/*First, figure out  how many segments will be left in 'segments': */
+-	counter=0;
+-	for (i=0;i<numsegs;i++){
+-		if (segmentmarkerlist[i]==1)counter++; //1 is default marker for non-rifts;
+-	}
+-	/*Allocate new segments: */
+-	new_numsegs=counter;
+-	new_segments=xNew<int>(new_numsegs*3);
+-	new_segmentmarkers=xNew<int>(new_numsegs);
+-
+-	/*Copy new segments info : */
+-	counter=0;
+-	for (i=0;i<numsegs;i++){
+-		if (segmentmarkerlist[i]==1){
+-			new_segments[3*counter+0]=segments[3*i+0];
+-			new_segments[3*counter+1]=segments[3*i+1];
+-			new_segments[3*counter+2]=segments[3*i+2];
+-			new_segmentmarkers[counter]=segmentmarkerlist[i];
+-			counter++;
+-		}
+-	}
+-
+-	/*Now deal with rift segments: */
+-	riftsnumsegs=xNew<int>(numrifts);
+-	riftssegments=xNew<int*>(numrifts);
+-	for (i=0;i<numrifts;i++){
+-		/*Figure out how many segments for rift i: */
+-		counter=0;
+-		for (j=0;j<numsegs;j++){
+-			if (segmentmarkerlist[j]==2+i)counter++;
+-		}
+-		riftsnumsegs[i]=counter;
+-		riftsegment=xNew<int>(counter*3);
+-		/*Copy new segments info :*/
+-		counter=0;
+-		for (j=0;j<numsegs;j++){
+-			if (segmentmarkerlist[j]==(2+i)){
+-				riftsegment[3*counter+0]=segments[3*j+0];_assert_(riftsegment[3*counter+0]<nods+1);
+-				riftsegment[3*counter+1]=segments[3*j+1];_assert_(riftsegment[3*counter+1]<nods+1);
+-				riftsegment[3*counter+2]=segments[3*j+2];_assert_(riftsegment[3*counter+2]<nel+1);
+-				counter++;
+-			}
+-		}
+-		*(riftssegments+i)=riftsegment;
+-	}
+-
+-	/*Free ressources: */
+-	xDelete<int>(segments);
+-
+-	/*Assign output pointers: */
+-	*psegments=new_segments;
+-	*psegmentmarkerlist=new_segmentmarkers;
+-	*pnumsegs=new_numsegs;
+-	*pnumrifts=numrifts;
+-	*priftssegments=riftssegments;
+-	*priftsnumsegs=riftsnumsegs;
+-	return noerr;
+-}/*}}}*/
+-int PairRiftElements(int** priftsnumpairs,int*** priftspairs,int numrifts,int* riftsnumsegments,int** riftssegments,double* x,double* y){/*{{{*/
+-
+-	int noerr=1;
+-	int i,j,k;
+-
+-	/*output: */
+-	int  *riftsnumpairs = NULL;
+-	int **riftspairs    = NULL;
+-
+-	/*intermediary :*/
+-	int  numsegs;
+-	int* segments=NULL;
+-	int* pairs=NULL;
+-	int  node1,node2,node3,node4;
+-
+-	riftsnumpairs=xNew<int>(numrifts);
+-	riftspairs=xNew<int*>(numrifts);
+-	for (i=0;i<numrifts;i++){
+-		segments=riftssegments[i];
+-		numsegs =riftsnumsegments[i];
+-		riftsnumpairs[i]=numsegs;
+-		pairs=xNew<int>(2*numsegs);
+-		for (j=0;j<numsegs;j++){
+-			pairs[2*j+0]=segments[3*j+2]; //retrieve element to which this segment belongs.
+-			node1=segments[3*j+0]-1; node2=segments[3*j+1]-1;
+-			/*Find element facing on other side of rift: */
+-			for (k=0;k<numsegs;k++){
+-				if (k==j)continue;
+-				node3=segments[3*k+0]-1; node4=segments[3*k+1]-1;
+-				/*We are trying to find 2 elements, where position of node3 == position of node1, and position of node4 == position of node2*/
+-				if (   ((x[node3]==x[node1]) && (y[node3]==y[node1]) && (x[node4]==x[node2]) && (y[node4]==y[node2]))
+-				    || ((x[node3]==x[node2]) && (y[node3]==y[node2]) && (x[node4]==x[node1]) && (y[node4]==y[node1]))  ){
+-					/*We found the corresponding element: */
+-					pairs[2*j+1]=segments[3*k+2];
+-					break;
+-				}
+-			}
+-		}
+-		riftspairs[i]=pairs;
+-	}
+-
+-	/*Assign output pointers: */
+-	*priftsnumpairs=riftsnumpairs;
+-	*priftspairs=riftspairs;
+-	return noerr;
+-}/*}}}*/
+-int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs){/*{{{*/
+-
+-	int i;
+-	int noerr=1;
+-
+-	/*output: */
+-	int riftflag=0;
+-	int numrifts=0;
+-
+-	int maxmark=1; //default marker for regular segments
+-
+-	/*Any marker >=2 indicates a certain rift: */
+-	numrifts=0;
+-	for (i=0;i<nsegs;i++){
+-		if (segmentmarkerlist[i]>maxmark){
+-			numrifts++;
+-			maxmark=segmentmarkerlist[i];
+-		}
+-	}
+-	if(numrifts)riftflag=1;
+-
+-	/*Assign output pointers:*/
+-	*priftflag=riftflag;
+-	*pnumrifts=numrifts;
+-	return noerr;
+-}/*}}}*/
+-int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels){/*{{{*/
+-
+-	int noerr=1;
+-	int i,j,k,counter;
+-
+-	/*intermediary: */
+-	int *riftsegments = NULL;
+-	int *riftpairs    = NULL;
+-	int numsegs;
+-
+-	/*ordering and copy: */
+-	int *order             = NULL;
+-	int *riftsegments_copy = NULL;
+-	int *riftpairs_copy    = NULL;
+-
+-	/*node and element manipulation: */
+-	int node1,node2,node3,node4,temp_node,tip1,tip2,node;
+-	int el2;
+-	int already_ordered=0;
+-
+-	/*output: */
+-	int* riftstips=NULL;
+-
+-	/*Allocate byproduct of this routine, riftstips: */
+-	riftstips=xNew<int>(numrifts*2);
+-
+-	/*Go through all rifts: */
+-	for (i=0;i<numrifts;i++){
+-		riftsegments = riftssegments[i];
+-		riftpairs    = riftspairs[i];
+-		numsegs      = riftsnumsegments[i];
+-
+-		/*Allocate copy of riftsegments and riftpairs, 
+-		 *as well as ordering vector: */
+-		riftsegments_copy=xNew<int>(numsegs*3);
+-		riftpairs_copy=xNew<int>(numsegs*2);
+-		order=xNew<int>(numsegs);
+-
+-		/*First find the tips, using the pairs. If a pair of elements has one node in common, this node is a rift tip: */
+-		tip1=-1;
+-		tip2=-1;
+-
+-		for (j=0;j<numsegs;j++){
+-			el2=*(riftpairs+2*j+1);
+-			node1=*(riftsegments+3*j+0);
+-			node2=*(riftsegments+3*j+1);
+-			/*Summary, el1 and el2 are facing one another across the rift. node1 and node2 belong to el1 and 
+-			 *are located on the rift. Find node3 and node4, nodes belonging to el2 and located on the rift: */
+-			for (k=0;k<numsegs;k++){
+-				if (*(riftsegments+3*k+2)==el2){
+-					node3=*(riftsegments+3*k+0);
+-					node4=*(riftsegments+3*k+1);
+-					break;
+-				}
+-			}
+-			/* Make sure node3 faces node1 and node4 faces node2: */
+-			_assert_(node1<nods+1 && node4<nods+1);
+-			_assert_(node1>0 && node4>0);
+-			if ((x[node1-1]==x[node4-1]) && (y[node1-1]==y[node4-1])){
+-				/*Swap node3 and node4:*/
+-				temp_node=node3;
+-				node3=node4;
+-				node4=temp_node;
+-			}
+-
+-			/*Figure out if a tip is on this element: */
+-			if (node3==node1){
+-				/*node1 is a tip*/
+-				if (tip1==-1) {
+-					tip1=node1;
+-					continue;
+-				}
+-				if ((tip2==-1) && (node1!=tip1)){
+-					tip2=node1;
+-					break;
+-				}
+-			}
+-
+-			if (node4==node2){
+-				/*node2 is a tip*/
+-				if (tip1==-1){
+-					tip1=node2;
+-					continue;
+-				}
+-				if ((tip2==-1) && (node2!=tip1)){
+-					tip2=node2;
+-					break;
+-				}
+-			}
+-		}
+-
+-		/*Record tips in riftstips: */
+-		*(riftstips+2*i+0)=tip1;
+-		*(riftstips+2*i+1)=tip2;
+-
+-		/*We have the two tips for this rift.  Go from tip1 to tip2, and figure out the order in which segments are sequential. 
+-		 *Because two elements are connected to tip1, we chose one first, which defines the direction we are rotating along the rift. */
+-		node=tip1;
+-		for (counter=0;counter<numsegs;counter++){
+-			for (j=0;j<numsegs;j++){
+-				node1=*(riftsegments+3*j+0);
+-				node2=*(riftsegments+3*j+1);
+-
+-				if ((node1==node) || (node2==node)){
+-					/*Ok, this segment is connected to node, plug its index into order, unless we already plugged it before: */
+-					already_ordered=0;
+-					for (k=0;k<counter;k++){
+-						if(order[k]==j){
+-							already_ordered=1;
+-							break;
+-						}
+-					}
+-					if (!already_ordered){
+-						order[counter]=j;
+-						if(node1==node){
+-							node=node2;
+-						}
+-						else if(node2==node){
+-							node=node1;
+-						}
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		/*Using the order vector, and the riftsegments_copy and riftspairs_copy, reorder the segments and the pairs: */
+-		for (j=0;j<numsegs;j++){
+-			_assert_(order[j]<numsegs);
+-			*(riftsegments_copy+3*j+0)=*(riftsegments+3*order[j]+0);
+-			*(riftsegments_copy+3*j+1)=*(riftsegments+3*order[j]+1);
+-			*(riftsegments_copy+3*j+2)=*(riftsegments+3*order[j]+2);
+-			*(riftpairs_copy+2*j+0)=*(riftpairs+2*order[j]+0);
+-			*(riftpairs_copy+2*j+1)=*(riftpairs+2*order[j]+1);
+-		}
+-
+-		for (j=0;j<numsegs;j++){
+-			*(riftsegments+3*j+0)=*(riftsegments_copy+3*j+0);
+-			*(riftsegments+3*j+1)=*(riftsegments_copy+3*j+1);
+-			*(riftsegments+3*j+2)=*(riftsegments_copy+3*j+2);
+-			*(riftpairs+2*j+0)=*(riftpairs_copy+2*j+0);
+-			*(riftpairs+2*j+1)=*(riftpairs_copy+2*j+1);
+-		}
+-
+-		xDelete<int>(order);
+-		xDelete<int>(riftsegments_copy);
+-		xDelete<int>(riftpairs_copy);
+-
+-	}
+-
+-	/*Assign output pointer:*/
+-	*priftstips=riftstips;
+-	return noerr;
+-}/*}}}*/
+-int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,int** riftssegments,/*{{{*/
+-		int* riftsnumsegs,int** riftspairs,int* riftstips,double* x,double* y){
+-
+-	int noerr=1;
+-	int i,j,k,k0;
+-
+-	double el1,el2,node1,node2,node3,node4;
+-	double temp_node;
+-
+-	/*output: */
+-	double **riftspenaltypairs    = NULL;
+-	double  *riftpenaltypairs     = NULL;
+-	int     *riftsnumpenaltypairs = NULL;
+-
+-	/*intermediary: */
+-	int numsegs;
+-	int* riftsegments=NULL;
+-	int* riftpairs=NULL;
+-	int counter;
+-	double normal[2];
+-	double length;
+-	int    k1,k2;
+-
+-	/*Allocate: */
+-	riftspenaltypairs=xNew<double*>(numrifts);
+-	riftsnumpenaltypairs=xNew<int>(numrifts);
+-
+-	for(i=0;i<numrifts;i++){
+-		numsegs=riftsnumsegs[i];
+-		riftsegments=riftssegments[i];
+-		riftpairs=riftspairs[i];
+-
+-		/*allocate riftpenaltypairs, and riftnumpenaltypairs: */
+-		if((numsegs/2-1)!=0)riftpenaltypairs=xNewZeroInit<double>((numsegs/2-1)*RIFTPENALTYPAIRSWIDTH);
+-
+-		/*Go through only one flank of the rifts, not counting the tips: */
+-		counter=0;
+-		for(j=0;j<(numsegs/2);j++){
+-			el1=*(riftpairs+2*j+0);
+-			el2=*(riftpairs+2*j+1);
+-			node1=*(riftsegments+3*j+0);
+-			node2=*(riftsegments+3*j+1);
+-			/*Find segment index to recover node3 and node4, facing node1 and node2: */
+-			k0=-1;
+-			for(k=0;k<numsegs;k++){
+-				if(*(riftsegments+3*k+2)==el2){
+-					k0=k;
+-					break;
+-				}
+-			}
+-			node3=*(riftsegments+3*k0+0);
+-			node4=*(riftsegments+3*k0+1);
+-
+-			/* Make sure node3 faces node1 and node4 faces node2: */
+-			if ((x[(int)node1-1]==x[(int)node4-1]) && (y[(int)node1-1]==y[(int)node4-1])){
+-				/*Swap node3 and node4:*/
+-				temp_node=node3;
+-				node3=node4;
+-				node4=temp_node;
+-			}	
+-			/*Ok, we have node1 facing node3, and node2 facing node4. Compute the normal to 
+-			 *this segment, and its length: */
+-			normal[0]=cos(atan2(x[(int)node1-1]-x[(int)node2-1],y[(int)node2-1]-y[(int)node1-1]));
+-			normal[1]=sin(atan2(x[(int)node1-1]-x[(int)node2-1],y[(int)node2-1]-y[(int)node1-1]));
+-			length=sqrt(pow(x[(int)node2-1]-x[(int)node1-1],(double)2)+pow(y[(int)node2-1]-y[(int)node1-1],(double)2));
+-
+-			/*Be careful here, we want penalty loads on each node, not on each segment. This means we cannot plug node1,
+-			 * node2, node3 and node4 directly into riftpenaltypairs. We need to include node1, node2, node3 and node4, 
+-			 * only once. We'll add the normals and the lengths : */
+-
+-			if(node1!=node3){ //exclude tips from loads
+-				k1=-1;
+-				for(k=0;k<counter;k++){
+-					if( (*(riftpenaltypairs+k*7+0))==node1){
+-						k1=k; 
+-						break;
+-					}
+-				}
+-				if(k1==-1){
+-					*(riftpenaltypairs+counter*7+0)=node1;
+-					*(riftpenaltypairs+counter*7+1)=node3;
+-					*(riftpenaltypairs+counter*7+2)=el1;
+-					*(riftpenaltypairs+counter*7+3)=el2;
+-					*(riftpenaltypairs+counter*7+4)=normal[0];
+-					*(riftpenaltypairs+counter*7+5)=normal[1];
+-					*(riftpenaltypairs+counter*7+6)=length/2;
+-					counter++;
+-				}
+-				else{
+-					*(riftpenaltypairs+k1*7+4)+=normal[0];
+-					*(riftpenaltypairs+k1*7+5)+=normal[1];
+-					*(riftpenaltypairs+k1*7+6)+=length/2;
+-				}
+-			}
+-			if(node2!=node4){
+-				k2=-1;
+-				for(k=0;k<counter;k++){
+-					if( (*(riftpenaltypairs+k*7+0))==node2){
+-						k2=k;
+-						break;
+-					}
+-				}
+-				if(k2==-1){
+-					*(riftpenaltypairs+counter*7+0)=node2;
+-					*(riftpenaltypairs+counter*7+1)=node4;
+-					*(riftpenaltypairs+counter*7+2)=el1;
+-					*(riftpenaltypairs+counter*7+3)=el2;
+-					*(riftpenaltypairs+counter*7+4)=normal[0];
+-					*(riftpenaltypairs+counter*7+5)=normal[1];
+-					*(riftpenaltypairs+counter*7+6)=length/2;
+-					counter++;
+-				}
+-				else{
+-					*(riftpenaltypairs+k2*7+4)+=normal[0];
+-					*(riftpenaltypairs+k2*7+5)+=normal[1];
+-					*(riftpenaltypairs+k2*7+6)+=length/2;
+-				}
+-			}
+-		}
+-		/*Renormalize normals: */
+-		for(j=0;j<counter;j++){
+-			double magnitude=sqrt(pow( double(riftpenaltypairs[j*7+4]),2) + pow( double(riftpenaltypairs[j*7+5]),2) );
+-			*(riftpenaltypairs+j*7+4)=*(riftpenaltypairs+j*7+4)/magnitude;
+-			*(riftpenaltypairs+j*7+5)=*(riftpenaltypairs+j*7+5)/magnitude;
+-		}
+-
+-		riftspenaltypairs[i]=riftpenaltypairs;
+-		riftsnumpenaltypairs[i]=(numsegs/2-1);
+-	}
+-
+-	/*Assign output pointers: */
+-	*priftspenaltypairs=riftspenaltypairs;
+-	*priftsnumpenaltypairs=riftsnumpenaltypairs;
+-	return noerr;
+-}/*}}}*/
+-int RemoveCornersFromRifts(int** pindex,int* pnel,double** px,double** py,int* pnods,int* segments,int* segmentmarkers,int num_seg){/*{{{*/
+-
+-	int noerr=1;
+-	int i,j,k;
+-	int node1,node2,node3;
+-	int el;
+-	double  pair[2];
+-	int     pair_count=0;
+-	int     triple=0;
+-
+-	/*Recover input: */
+-	int    *index = *pindex;
+-	int     nel   = *pnel;
+-	double *x     = *px;
+-	double *y     = *py;
+-	int     nods  = *pnods;
+-
+-	for (i=0;i<num_seg;i++){
+-		node1=*(segments+3*i+0);
+-		node2=*(segments+3*i+1);
+-		/*Find all elements connected to [node1 node2]: */
+-		pair_count=0;
+-		for (j=0;j<nel;j++){
+-			if (*(index+3*j+0)==node1){
+-				if ((*(index+3*j+1)==node2) || (*(index+3*j+2)==node2)){
+-					pair[pair_count]=j;
+-					pair_count++;
+-				}
+-			}
+-			if (*(index+3*j+1)==node1){
+-				if ((*(index+3*j+0)==node2) || (*(index+3*j+2)==node2)){
+-					pair[pair_count]=j;
+-					pair_count++;
+-				}
+-			}
+-			if (*(index+3*j+2)==node1){
+-				if ((*(index+3*j+0)==node2) || (*(index+3*j+1)==node2)){
+-					pair[pair_count]=j;
+-					pair_count++;
+-				}
+-			}
+-		}
+-		/*Ok, we have pair_count elements connected to this segment. For each of these elements, 
+-		 *figure out if the third node also belongs to a segment: */
+-		if ((pair_count==0) || (pair_count==1)){ //we only select the rift segments, which belong to  2 elements
+-			continue;
+-		}
+-		else{
+-			for (j=0;j<pair_count;j++){
+-				el=(int)pair[j];
+-				triple=0;
+-				/*First find node3: */
+-				if (*(index+3*el+0)==node1){
+-					if (*(index+3*el+1)==node2)node3=*(index+3*el+2);
+-					else node3=*(index+3*el+1);
+-				}
+-				if (*(index+3*el+1)==node1){
+-					if (*(index+3*el+0)==node2)node3=*(index+3*el+2);
+-					else node3=*(index+3*el+0);
+-				}
+-				if (*(index+3*el+2)==node1){
+-					if (*(index+3*el+0)==node2)node3=*(index+3*el+1);
+-					else node3=*(index+3*el+0);
+-				}
+-				/*Ok, we have node3. Does node3 belong to a segment? : */
+-				for (k=0;k<num_seg;k++){
+-					if ((node3==*(segments+3*k+0)) || (node3==*(segments+3*k+1))){
+-						triple=1;
+-						break;
+-					}
+-				}
+-				if(triple==1){
+-					/*el is a corner element: we need to split it in 3 triangles: */
+-					x=xReNew<double>(x,nods,nods+1);
+-					y=xReNew<double>(y,nods,nods+1);
+-					x[nods]=(x[(int)node1-1]+x[(int)node2-1]+x[(int)node3-1])/3;
+-					y[nods]=(y[(int)node1-1]+y[(int)node2-1]+y[(int)node3-1])/3;
+-					index=xReNew<int>(index,nel*3,(nel+2*3));
+-					/*First, reassign element el: */
+-					*(index+3*el+0)=node1;
+-					*(index+3*el+1)=node2;
+-					*(index+3*el+2)=nods+1;
+-					/*Other two elements: */
+-					*(index+3*nel+0)=node2;
+-					*(index+3*nel+1)=node3;
+-					*(index+3*nel+2)=nods+1;
+-
+-					*(index+3*(nel+1)+0)=node3;
+-					*(index+3*(nel+1)+1)=node1;
+-					*(index+3*(nel+1)+2)=nods+1;
+-					/*we need  to change the segment elements corresponding to el: */
+-					for (k=0;k<num_seg;k++){
+-						if (*(segments+3*k+2)==(el+1)){
+-							if ( ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node2)) || ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node1))) *(segments+3*k+2)=el+1;
+-							if ( ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node3)) || ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node2))) *(segments+3*k+2)=nel+1;
+-							if ( ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node1)) || ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node3))) *(segments+3*k+2)=nel+2;
+-						}
+-					}
+-
+-					nods=nods+1;
+-					nel=nel+2;
+-					i=0;
+-					break;
+-				}
+-			} //for (j=0;j<pair_count;j++)
+-		}
+-	}// for (i=0;i<num_seg;i++)
+-
+-	/*Assign output pointers: */
+-	*pindex=index;
+-	*pnel=nel;
+-	*px=x;
+-	*py=y;
+-	*pnods=nods;
+-	return noerr;
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/shared/TriMesh/trimesh.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(nonexistent)
+@@ -1,33 +0,0 @@
+-/*!\file:  trimesh.h
+- * \brief
+- */ 
+-
+-#ifndef _SHARED_TRIMESH_H
+-#define _SHARED_TRIMESH_H
+-
+-#include <stdio.h>
+-#include <math.h>
+-
+-//#define REAL double //took  it out because it may conflict with stdlib.h defines. put back if necessary
+-int AssociateSegmentToElement(int** psegments,int nseg,int* index,int nel);
+-int OrderSegments(int** psegments,int nseg, int* index,int nel);
+-int GridInsideHole(double* px0,double* py0,int n,double* x,double* y);
+-int FindElement(int A,int B,int* index,int nel);
+-int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist);
+-int IsGridOnRift(int* riftsegments, int nriftsegs, int node);
+-int GridElementsList(int** pGridElements, int* pNumGridElements,int node,double * index,int nel);
+-int IsNeighbor(int el1,int el2,int* index);
+-int IsOnRift(int el,int nriftsegs,int* riftsegments);
+-void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel,int* index, int nsegs,int* segments);
+-int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift,int segmentnumber, int nriftsegs,int* riftsegments, int node,int* index,int nel);
+-int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel);
+-int FindElement(double A,double B,int* index,int nel);
+-int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs);
+-int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nels);
+-int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels);
+-int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,int**  riftssegments,
+-		int* riftsnumsegments,int** riftspairs,int* riftstips,double* x,double* y);
+-int RemoveCornersFromRifts(int** pindex,int* pnel,double** px,double** py,int* pnods,int* segments,int* segmentmarkers,int num_seg);
+-int PairRiftElements(int** priftsnumpairs,int*** priftspairs,int numrifts,int* riftsnumsegments,int** riftssegments,double* x,double* y);
+-
+-#endif  /* _SHARED_TRIMESH_H */
+Index: ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp	(nonexistent)
+@@ -1,46 +0,0 @@
+-/*
+- * OrderSegments.c: 
+- * reorder segments so that their normals point outside the domain outline.
+- */
+-#include "./trimesh.h"
+-
+-int OrderSegments(int** psegments,int nseg,int* index,int nel){
+-
+-	/*vertex indices: */
+-	int A,B;
+-
+-	/*element index*/
+-	int el;
+-
+-	/*Recover segments: */
+-	int* segments=*psegments;
+-
+-	for(int i=0;i<nseg;i++){
+-		A=segments[3*i+0];
+-		B=segments[3*i+1];
+-		el=segments[3*i+2]-1; //after AssociateSegmentToElement, el was a matlab index, we need the c index now.
+-
+-		if (index[3*el+0]==A){
+-			if (index[3*el+2]==B){
+-				segments[3*i+0]=B;
+-				segments[3*i+1]=A;
+-			}
+-		}
+-		else if (index[3*el+1]==A){
+-			if (index[3*el+0]==B){
+-				segments[3*i+0]=B;
+-				segments[3*i+1]=A;
+-			}
+-		}
+-		else{
+-			if (index[3*el+1]==B){
+-				segments[3*i+0]=B;
+-				segments[3*i+1]=A;
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointers: */
+-	*psegments=segments;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/TriMesh
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh	(revision 22497)
++++ ../trunk-jpl/src/c/shared/TriMesh	(nonexistent)
+
+Property changes on: ../trunk-jpl/src/c/shared/TriMesh
+___________________________________________________________________
+Deleted: svn:ignore
+## -1,2 +0,0 ##
+-.deps
+-.dirstamp
+Index: ../trunk-jpl/src/c/shared/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/shared.h	(revision 22497)
++++ ../trunk-jpl/src/c/shared/shared.h	(revision 22498)
+@@ -18,7 +18,7 @@
+ #include "./Sorting/sorting.h"
+ #include "./String/sharedstring.h"
+ #include "./Threads/issm_threads.h"
+-#include "./TriMesh/trimesh.h"
++#include "./Triangle/triangle.h"
+ #include "./LatLong/latlong.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp	(revision 22498)
+@@ -0,0 +1,46 @@
++/*
++ * OrderSegments.c: 
++ * reorder segments so that their normals point outside the domain outline.
++ */
++#include "./trimesh.h"
++
++int OrderSegments(int** psegments,int nseg,int* index,int nel){
++
++	/*vertex indices: */
++	int A,B;
++
++	/*element index*/
++	int el;
++
++	/*Recover segments: */
++	int* segments=*psegments;
++
++	for(int i=0;i<nseg;i++){
++		A=segments[3*i+0];
++		B=segments[3*i+1];
++		el=segments[3*i+2]-1; //after AssociateSegmentToElement, el was a matlab index, we need the c index now.
++
++		if (index[3*el+0]==A){
++			if (index[3*el+2]==B){
++				segments[3*i+0]=B;
++				segments[3*i+1]=A;
++			}
++		}
++		else if (index[3*el+1]==A){
++			if (index[3*el+0]==B){
++				segments[3*i+0]=B;
++				segments[3*i+1]=A;
++			}
++		}
++		else{
++			if (index[3*el+1]==B){
++				segments[3*i+0]=B;
++				segments[3*i+1]=A;
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*psegments=segments;
++	return 1;
++}
+Index: ../trunk-jpl/src/c/shared/Triangle/TriangleUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/TriangleUtils.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/TriangleUtils.cpp	(revision 22498)
+@@ -0,0 +1,912 @@
++/*
++ * TriangleUtils: mesh manipulation routines: 
++ */
++
++#include <stdio.h>
++
++#include "./triangle.h"
++#include "../Exceptions/exceptions.h"
++#include "../MemOps/MemOps.h"
++
++#define RIFTPENALTYPAIRSWIDTH 8
++int IsGridOnRift(int* riftsegments, int nriftsegs, int node){/*{{{*/
++
++	/*Does this node belong to 4 elements, or just 2? If it belongs to 4 elements, it is inside a rift, 
++	 *if it belongs to 2 elements, it is on the tip of a rift, or it has already been split across the rift (see below).*/
++
++	int i;
++	int j;
++	int count;
++
++	count=0;
++	for (i=0;i<nriftsegs;i++){
++		for (j=0;j<2;j++){
++			if ((*(riftsegments+4*i+2+j))==node) count++;
++		}
++	}
++	if (count==2){
++		return 1;
++	}
++	else{
++		return 0;
++	}
++}/*}}}*/
++int GridElementsList(int** pGridElements, int* pNumGridElements,int node,int* index,int nel){/*{{{*/
++
++	/*From a node, recover all the elements that are connected to it: */
++	int i,j;
++	int noerr=1;
++
++	int max_number_elements=12;
++	int current_size;
++	int NumGridElements;
++	int* GridElements=NULL;
++	int* GridElementsRealloc=NULL;
++
++	/*From a mesh with 30 degrees minimum angle, we get 12 possible elements that own 
++	 * the node. We start by allocating GridElements with that size, and realloc 
++	 * more if needed.*/
++
++	current_size=max_number_elements;
++	NumGridElements=0;
++	GridElements=xNew<int>(max_number_elements);
++
++	for (i=0;i<nel;i++){
++		for (j=0;j<3;j++){
++			if (index[3*i+j]==node){
++				if (NumGridElements<=(current_size-1)){
++					GridElements[NumGridElements]=i;
++					NumGridElements++;
++					break;
++				}
++				else{
++					/*Reallocate another max_number_elements slots in the GridElements: */
++					GridElementsRealloc=xReNew<int>(GridElements,current_size,(current_size+max_number_elements));
++					if (!GridElementsRealloc){
++						noerr=0;
++						goto cleanup_and_return;
++					}
++					current_size+=max_number_elements;
++					GridElements=GridElementsRealloc;
++					GridElements[NumGridElements]=i;
++					NumGridElements++;
++					break;
++				}
++			}
++		}
++	}
++	cleanup_and_return:
++	if(!noerr){
++		xDelete<int>(GridElements);
++	}
++	/*Allocate return pointers: */
++	*pGridElements=GridElements;
++	*pNumGridElements=NumGridElements;
++	return noerr;
++}/*}}}*/
++int IsNeighbor(int el1,int el2,int* index){/*{{{*/
++	/*From a triangulation held in index, figure out if elements 1 and 2 have two nodes in common: */
++	int i,j;
++	int count=0;
++	for (i=0;i<3;i++){
++		for (j=0;j<3;j++){
++			if (index[3*el1+i]==index[3*el2+j])count++;
++		}
++	}
++	if (count==2){
++		return 1;
++	}
++	else{
++		return 0;
++	}
++}/*}}}*/
++int IsOnRift(int el,int nriftsegs,int* riftsegments){/*{{{*/
++	/*From a list of elements segments, figure out if el belongs to it: */
++	int i;
++	for (i=0;i<nriftsegs;i++){
++		if ((*(riftsegments+4*i+0)==el) || (*(riftsegments+4*i+1)==el)){
++			return 1;
++		}
++	}
++	return 0;
++}/*}}}*/
++void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel,int* index,int nsegs,int* segments){/*{{{*/
++
++	int i,counter;
++	int el,el2;
++
++	int  nriftsegs;
++	int* riftsegments=NULL;
++	int* riftsegments_uncompressed=NULL; 
++	int  element_nodes[3];
++
++	/*Allocate segmentflags: */
++	riftsegments_uncompressed=xNewZeroInit<int>(nsegs*5);
++
++	/*Find the segments that belong to a rift: they are the ones that see two elements. The other ones belong to a boundary 
++	 *or a hole: */
++	nriftsegs=0;
++	for (i=0;i<nsegs;i++){
++		el=(int)*(segments+3*i+2)-1; //element found in AssociateSegmentToElements
++		/*Temporarily set nodes belonging to the segments to -1 in the triangulation index, and 
++		 *then  proceed to find another element that owns the segment. If we don't find it, we know 
++		 *we are dealing with a boundary or hole, otherwise, we are dealing with a rift: */
++		element_nodes[0]=*(index+3*el+0);
++		element_nodes[1]=*(index+3*el+1);
++		element_nodes[2]=*(index+3*el+2);
++
++		index[3*el+0]=-1;
++		index[3*el+1]=-1;
++		index[3*el+2]=-1;
++
++		el2=FindElement(*(segments+3*i+0),*(segments+3*i+1),index,nel); 
++
++		/*Restore index: */
++		index[3*el+0]=element_nodes[0];
++		index[3*el+1]=element_nodes[1];
++		index[3*el+2]=element_nodes[2];
++
++		if (el2!=-1){
++			/*el and el2 are on a segment rift, facing one another, plug them into riftsegments_uncompressed: */
++		    riftsegments_uncompressed[5*i+0]=1;
++		    riftsegments_uncompressed[5*i+1]=el;
++		    riftsegments_uncompressed[5*i+2]=el2;
++		    riftsegments_uncompressed[5*i+3]=segments[3*i+0];
++			 riftsegments_uncompressed[5*i+4]=segments[3*i+1];
++			 nriftsegs++;
++		}
++	}
++
++	/*Compress riftsegments_uncompressed:*/
++	riftsegments=xNew<int>(nriftsegs*4);
++	counter=0;
++	for (i=0;i<nsegs;i++){
++		if (riftsegments_uncompressed[5*i+0]){
++			riftsegments[counter*4+0]=riftsegments_uncompressed[5*i+1];
++			riftsegments[counter*4+1]=riftsegments_uncompressed[5*i+2];
++			riftsegments[counter*4+2]=riftsegments_uncompressed[5*i+3];
++			riftsegments[counter*4+3]=riftsegments_uncompressed[5*i+4];
++			counter++;
++		}
++	}
++	xDelete<int>(riftsegments_uncompressed);
++
++	/*Assign output pointers: */
++	*priftsegments=riftsegments;
++	*pnriftsegs=nriftsegs;
++}/*}}}*/
++int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift, int segmentnumber, int nriftsegs, int* riftsegments, int node,int* index,int nel){/*{{{*/
++
++	int noerr=1;
++	int k,l,counter;
++	int newel;
++
++	int* GridElements=NULL;
++	int  NumGridElements;
++
++	/*Output: */
++	int NumGridElementListOnOneSideOfRift;
++	int* GridElementListOnOneSideOfRift=NULL;
++
++	/*Build a list of all the elements connected to this node: */
++	GridElementsList(&GridElements,&NumGridElements,node,index,nel);
++
++	/*Figure out the list of elements  that are on the same side of the rift. To do so, we start from one 
++	 * side of the rift and keep rotating in the same direction:*/
++	GridElementListOnOneSideOfRift=xNew<int>(NumGridElements);
++	//bootstrap the GridElementListOnOneSideOfRift by filling elements from riftsegments: */
++	GridElementListOnOneSideOfRift[0]=*(riftsegments+4*segmentnumber+0); /*this one does not belong to the same side, but is just there 
++															   for a rotation direction, we 'll take it out when we are 
++															   done rotating*/
++	GridElementListOnOneSideOfRift[1]=*(riftsegments+4*segmentnumber+1);
++	counter=1;
++	for (;;){
++		/*Find neighbour of element GridElementListOnOneSideOfRift[counter], not 
++		 * equal to GridElementListOnOneSideOfRift[counter-1]*/
++		for (k=0;k<NumGridElements;k++){
++			if(IsNeighbor(GridElements[k],GridElementListOnOneSideOfRift[counter],index)){
++				/*Verify this element is not already in our list of element on the same side of the rift: */
++				newel=1;
++				for (l=0;l<=counter;l++){
++					if (GridElements[k]==GridElementListOnOneSideOfRift[l]){
++						newel=0;
++						break;
++					}
++				}
++				if (newel){
++					counter++;
++					GridElementListOnOneSideOfRift[counter]=GridElements[k];
++					if (IsOnRift(GridElements[k],nriftsegs,riftsegments)){
++						break;
++					}
++					k=-1;
++				}
++			}
++		}
++		/*Reduce counter by 1 and get rift of first element in GridElementListOnOneSideOfRift:*/
++		NumGridElementListOnOneSideOfRift=counter;
++		for (l=0;l<NumGridElementListOnOneSideOfRift;l++){
++			GridElementListOnOneSideOfRift[l]=GridElementListOnOneSideOfRift[l+1];
++		}
++		break;
++	}// for (;;)
++
++	/*Free ressources: */
++	xDelete<int>(GridElements);
++	/*Assign output pointers: */
++	*pNumGridElementListOnOneSideOfRift=NumGridElementListOnOneSideOfRift;
++	*pGridElementListOnOneSideOfRift=GridElementListOnOneSideOfRift;
++	return noerr;
++}/*}}}*/
++int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel){/*{{{*/
++
++	int noerr=1;
++	int i,j,k;
++	int el1,el2;
++
++	int *segments          = NULL;
++	int *segmentmarkerlist = NULL;
++	int  nsegs;
++
++	/*Recover input: */
++	segments          = *psegments;
++	segmentmarkerlist = *psegmentmarkerlist;
++	nsegs             = *pnsegs;
++
++	/*Reallocate segments: */
++	segments         =xReNew<int>(segments,         nsegs*3,(nsegs+nriftsegs)*3);
++	segmentmarkerlist=xReNew<int>(segmentmarkerlist,nsegs,(nsegs+nriftsegs));
++
++	/*First, update the existing segments to the new nodes :*/
++	for (i=0;i<nriftsegs;i++){
++		el1=riftsegments[4*i+0];
++		el2=riftsegments[4*i+1];
++		for (j=0;j<nsegs;j++){
++			if (segments[3*j+2]==(el1+1)){
++				/*segment j is the same as rift segment i.Let's update segments[j][:] using  element el1 and the corresponding rift segment.
++				 *Because riftsegments does not represent a list of rift segments anymore (it got heavily modified in SplitElementsForRifts, 
++				 *we can only rely on the position (x,y) of the rift nodes to create a segment:*/
++				for (k=0;k<3;k++){
++					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){
++						*(segments+3*j+0)=*(index+el1*3+k); _assert_(segments[3*j+0]<nods+1);
++						break;
++					}
++				}
++				for (k=0;k<3;k++){
++					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1])  && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){
++						*(segments+3*j+1)=*(index+el1*3+k); _assert_(segments[3*j+1]<nods+1);
++						break;
++					}
++				}
++				/*Deal with el2: */
++				*(segments+3*(nsegs+i)+2)=el2+1;
++				*(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j);
++				for (k=0;k<3;k++){
++					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){
++						*(segments+3*(nsegs+i)+0)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+0]<nods+1);
++						break;
++					}
++				}
++				for (k=0;k<3;k++){
++					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){
++						*(segments+3*(nsegs+i)+1)=*(index+el2*3+k); _assert_(segments[3*(nsegs+i)+1]<nods+1);
++						break;
++					}
++				}
++			}
++			if (*(segments+3*j+2)==(el2+1)){
++				/*segment j is the same as rift segment i.*/
++				/*Let's update segments[j][:] using  element el2 and the corresponding rift segment: */
++				for (k=0;k<3;k++){
++					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+0)-1])){
++						*(segments+3*j+0)=*(index+el2*3+k); _assert_(segments[3*j+0]<nods+1);
++						break;
++					}
++				}
++				for (k=0;k<3;k++){
++					if ((x[*(index+el2*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el2*3+k)-1]==y[*(segments+3*j+1)-1])){
++						*(segments+3*j+1)=*(index+el2*3+k);_assert_(segments[3*j+1]<nods+1);
++						break;
++					}
++				}
++				/*Deal with el1: */
++				*(segments+3*(nsegs+i)+2)=el1+1;
++				*(segmentmarkerlist+(nsegs+i))=*(segmentmarkerlist+j);
++				for (k=0;k<3;k++){
++					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+0)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+0)-1])){
++						*(segments+3*(nsegs+i)+0)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+0]<nods+1);
++						break;
++					}
++				}
++				for (k=0;k<3;k++){
++					if ((x[*(index+el1*3+k)-1]==x[*(segments+3*j+1)-1]) && (y[*(index+el1*3+k)-1]==y[*(segments+3*j+1)-1])){
++						*(segments+3*(nsegs+i)+1)=*(index+el1*3+k);_assert_(segments[3*(nsegs+i)+1]<nods+1);
++						break;
++					}
++				}
++			}
++		}
++	}
++	nsegs+=nriftsegs;
++
++	/*Assign output pointers: */
++	*psegments=segments;
++	*psegmentmarkerlist=segmentmarkerlist;
++	*pnsegs=nsegs;
++
++	return noerr;
++}/*}}}*/
++int FindElement(int A,int B,int* index,int nel){/*{{{*/
++
++	int el=-1;
++	for (int n=0;n<nel;n++){
++		if(((index[3*n+0]==A) || (index[3*n+1]==A) || (index[3*n+2]==A)) && ((index[3*n+0]==B) || (index[3*n+1]==B) || (index[3*n+2]==B))){
++			el=n;
++			break;
++		}
++	}
++	return el;
++}/*}}}*/
++int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nel){/*{{{*/
++
++	/*Using segment markers, wring out the rift segments from the segments. Rift markers are 
++	 *of the form 2+i where i=0 to number of rifts */
++
++	int noerr=1;
++	int i,j,counter;
++
++	/*input: */
++	int *segments          = NULL;
++	int *segmentmarkerlist = NULL;
++	int numsegs;
++
++	/*output: */
++	int   new_numsegs;
++	int  *riftsnumsegs       = NULL;
++	int **riftssegments      = NULL;
++	int  *new_segments       = NULL;
++	int  *new_segmentmarkers = NULL;
++
++	/*intermediary: */
++	int* riftsegment=NULL;
++
++	/*Recover input arguments: */
++	segments          = *psegments;
++	numsegs           = *pnumsegs;
++	segmentmarkerlist = *psegmentmarkerlist;
++
++	/*First, figure out  how many segments will be left in 'segments': */
++	counter=0;
++	for (i=0;i<numsegs;i++){
++		if (segmentmarkerlist[i]==1)counter++; //1 is default marker for non-rifts;
++	}
++	/*Allocate new segments: */
++	new_numsegs=counter;
++	new_segments=xNew<int>(new_numsegs*3);
++	new_segmentmarkers=xNew<int>(new_numsegs);
++
++	/*Copy new segments info : */
++	counter=0;
++	for (i=0;i<numsegs;i++){
++		if (segmentmarkerlist[i]==1){
++			new_segments[3*counter+0]=segments[3*i+0];
++			new_segments[3*counter+1]=segments[3*i+1];
++			new_segments[3*counter+2]=segments[3*i+2];
++			new_segmentmarkers[counter]=segmentmarkerlist[i];
++			counter++;
++		}
++	}
++
++	/*Now deal with rift segments: */
++	riftsnumsegs=xNew<int>(numrifts);
++	riftssegments=xNew<int*>(numrifts);
++	for (i=0;i<numrifts;i++){
++		/*Figure out how many segments for rift i: */
++		counter=0;
++		for (j=0;j<numsegs;j++){
++			if (segmentmarkerlist[j]==2+i)counter++;
++		}
++		riftsnumsegs[i]=counter;
++		riftsegment=xNew<int>(counter*3);
++		/*Copy new segments info :*/
++		counter=0;
++		for (j=0;j<numsegs;j++){
++			if (segmentmarkerlist[j]==(2+i)){
++				riftsegment[3*counter+0]=segments[3*j+0];_assert_(riftsegment[3*counter+0]<nods+1);
++				riftsegment[3*counter+1]=segments[3*j+1];_assert_(riftsegment[3*counter+1]<nods+1);
++				riftsegment[3*counter+2]=segments[3*j+2];_assert_(riftsegment[3*counter+2]<nel+1);
++				counter++;
++			}
++		}
++		*(riftssegments+i)=riftsegment;
++	}
++
++	/*Free ressources: */
++	xDelete<int>(segments);
++
++	/*Assign output pointers: */
++	*psegments=new_segments;
++	*psegmentmarkerlist=new_segmentmarkers;
++	*pnumsegs=new_numsegs;
++	*pnumrifts=numrifts;
++	*priftssegments=riftssegments;
++	*priftsnumsegs=riftsnumsegs;
++	return noerr;
++}/*}}}*/
++int PairRiftElements(int** priftsnumpairs,int*** priftspairs,int numrifts,int* riftsnumsegments,int** riftssegments,double* x,double* y){/*{{{*/
++
++	int noerr=1;
++	int i,j,k;
++
++	/*output: */
++	int  *riftsnumpairs = NULL;
++	int **riftspairs    = NULL;
++
++	/*intermediary :*/
++	int  numsegs;
++	int* segments=NULL;
++	int* pairs=NULL;
++	int  node1,node2,node3,node4;
++
++	riftsnumpairs=xNew<int>(numrifts);
++	riftspairs=xNew<int*>(numrifts);
++	for (i=0;i<numrifts;i++){
++		segments=riftssegments[i];
++		numsegs =riftsnumsegments[i];
++		riftsnumpairs[i]=numsegs;
++		pairs=xNew<int>(2*numsegs);
++		for (j=0;j<numsegs;j++){
++			pairs[2*j+0]=segments[3*j+2]; //retrieve element to which this segment belongs.
++			node1=segments[3*j+0]-1; node2=segments[3*j+1]-1;
++			/*Find element facing on other side of rift: */
++			for (k=0;k<numsegs;k++){
++				if (k==j)continue;
++				node3=segments[3*k+0]-1; node4=segments[3*k+1]-1;
++				/*We are trying to find 2 elements, where position of node3 == position of node1, and position of node4 == position of node2*/
++				if (   ((x[node3]==x[node1]) && (y[node3]==y[node1]) && (x[node4]==x[node2]) && (y[node4]==y[node2]))
++				    || ((x[node3]==x[node2]) && (y[node3]==y[node2]) && (x[node4]==x[node1]) && (y[node4]==y[node1]))  ){
++					/*We found the corresponding element: */
++					pairs[2*j+1]=segments[3*k+2];
++					break;
++				}
++			}
++		}
++		riftspairs[i]=pairs;
++	}
++
++	/*Assign output pointers: */
++	*priftsnumpairs=riftsnumpairs;
++	*priftspairs=riftspairs;
++	return noerr;
++}/*}}}*/
++int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs){/*{{{*/
++
++	int i;
++	int noerr=1;
++
++	/*output: */
++	int riftflag=0;
++	int numrifts=0;
++
++	int maxmark=1; //default marker for regular segments
++
++	/*Any marker >=2 indicates a certain rift: */
++	numrifts=0;
++	for (i=0;i<nsegs;i++){
++		if (segmentmarkerlist[i]>maxmark){
++			numrifts++;
++			maxmark=segmentmarkerlist[i];
++		}
++	}
++	if(numrifts)riftflag=1;
++
++	/*Assign output pointers:*/
++	*priftflag=riftflag;
++	*pnumrifts=numrifts;
++	return noerr;
++}/*}}}*/
++int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels){/*{{{*/
++
++	int noerr=1;
++	int i,j,k,counter;
++
++	/*intermediary: */
++	int *riftsegments = NULL;
++	int *riftpairs    = NULL;
++	int numsegs;
++
++	/*ordering and copy: */
++	int *order             = NULL;
++	int *riftsegments_copy = NULL;
++	int *riftpairs_copy    = NULL;
++
++	/*node and element manipulation: */
++	int node1,node2,node3,node4,temp_node,tip1,tip2,node;
++	int el2;
++	int already_ordered=0;
++
++	/*output: */
++	int* riftstips=NULL;
++
++	/*Allocate byproduct of this routine, riftstips: */
++	riftstips=xNew<int>(numrifts*2);
++
++	/*Go through all rifts: */
++	for (i=0;i<numrifts;i++){
++		riftsegments = riftssegments[i];
++		riftpairs    = riftspairs[i];
++		numsegs      = riftsnumsegments[i];
++
++		/*Allocate copy of riftsegments and riftpairs, 
++		 *as well as ordering vector: */
++		riftsegments_copy=xNew<int>(numsegs*3);
++		riftpairs_copy=xNew<int>(numsegs*2);
++		order=xNew<int>(numsegs);
++
++		/*First find the tips, using the pairs. If a pair of elements has one node in common, this node is a rift tip: */
++		tip1=-1;
++		tip2=-1;
++
++		for (j=0;j<numsegs;j++){
++			el2=*(riftpairs+2*j+1);
++			node1=*(riftsegments+3*j+0);
++			node2=*(riftsegments+3*j+1);
++			/*Summary, el1 and el2 are facing one another across the rift. node1 and node2 belong to el1 and 
++			 *are located on the rift. Find node3 and node4, nodes belonging to el2 and located on the rift: */
++			for (k=0;k<numsegs;k++){
++				if (*(riftsegments+3*k+2)==el2){
++					node3=*(riftsegments+3*k+0);
++					node4=*(riftsegments+3*k+1);
++					break;
++				}
++			}
++			/* Make sure node3 faces node1 and node4 faces node2: */
++			_assert_(node1<nods+1 && node4<nods+1);
++			_assert_(node1>0 && node4>0);
++			if ((x[node1-1]==x[node4-1]) && (y[node1-1]==y[node4-1])){
++				/*Swap node3 and node4:*/
++				temp_node=node3;
++				node3=node4;
++				node4=temp_node;
++			}
++
++			/*Figure out if a tip is on this element: */
++			if (node3==node1){
++				/*node1 is a tip*/
++				if (tip1==-1) {
++					tip1=node1;
++					continue;
++				}
++				if ((tip2==-1) && (node1!=tip1)){
++					tip2=node1;
++					break;
++				}
++			}
++
++			if (node4==node2){
++				/*node2 is a tip*/
++				if (tip1==-1){
++					tip1=node2;
++					continue;
++				}
++				if ((tip2==-1) && (node2!=tip1)){
++					tip2=node2;
++					break;
++				}
++			}
++		}
++
++		/*Record tips in riftstips: */
++		*(riftstips+2*i+0)=tip1;
++		*(riftstips+2*i+1)=tip2;
++
++		/*We have the two tips for this rift.  Go from tip1 to tip2, and figure out the order in which segments are sequential. 
++		 *Because two elements are connected to tip1, we chose one first, which defines the direction we are rotating along the rift. */
++		node=tip1;
++		for (counter=0;counter<numsegs;counter++){
++			for (j=0;j<numsegs;j++){
++				node1=*(riftsegments+3*j+0);
++				node2=*(riftsegments+3*j+1);
++
++				if ((node1==node) || (node2==node)){
++					/*Ok, this segment is connected to node, plug its index into order, unless we already plugged it before: */
++					already_ordered=0;
++					for (k=0;k<counter;k++){
++						if(order[k]==j){
++							already_ordered=1;
++							break;
++						}
++					}
++					if (!already_ordered){
++						order[counter]=j;
++						if(node1==node){
++							node=node2;
++						}
++						else if(node2==node){
++							node=node1;
++						}
++						break;
++					}
++				}
++			}
++		}
++
++		/*Using the order vector, and the riftsegments_copy and riftspairs_copy, reorder the segments and the pairs: */
++		for (j=0;j<numsegs;j++){
++			_assert_(order[j]<numsegs);
++			*(riftsegments_copy+3*j+0)=*(riftsegments+3*order[j]+0);
++			*(riftsegments_copy+3*j+1)=*(riftsegments+3*order[j]+1);
++			*(riftsegments_copy+3*j+2)=*(riftsegments+3*order[j]+2);
++			*(riftpairs_copy+2*j+0)=*(riftpairs+2*order[j]+0);
++			*(riftpairs_copy+2*j+1)=*(riftpairs+2*order[j]+1);
++		}
++
++		for (j=0;j<numsegs;j++){
++			*(riftsegments+3*j+0)=*(riftsegments_copy+3*j+0);
++			*(riftsegments+3*j+1)=*(riftsegments_copy+3*j+1);
++			*(riftsegments+3*j+2)=*(riftsegments_copy+3*j+2);
++			*(riftpairs+2*j+0)=*(riftpairs_copy+2*j+0);
++			*(riftpairs+2*j+1)=*(riftpairs_copy+2*j+1);
++		}
++
++		xDelete<int>(order);
++		xDelete<int>(riftsegments_copy);
++		xDelete<int>(riftpairs_copy);
++
++	}
++
++	/*Assign output pointer:*/
++	*priftstips=riftstips;
++	return noerr;
++}/*}}}*/
++int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,int** riftssegments,/*{{{*/
++		int* riftsnumsegs,int** riftspairs,int* riftstips,double* x,double* y){
++
++	int noerr=1;
++	int i,j,k,k0;
++
++	double el1,el2,node1,node2,node3,node4;
++	double temp_node;
++
++	/*output: */
++	double **riftspenaltypairs    = NULL;
++	double  *riftpenaltypairs     = NULL;
++	int     *riftsnumpenaltypairs = NULL;
++
++	/*intermediary: */
++	int numsegs;
++	int* riftsegments=NULL;
++	int* riftpairs=NULL;
++	int counter;
++	double normal[2];
++	double length;
++	int    k1,k2;
++
++	/*Allocate: */
++	riftspenaltypairs=xNew<double*>(numrifts);
++	riftsnumpenaltypairs=xNew<int>(numrifts);
++
++	for(i=0;i<numrifts;i++){
++		numsegs=riftsnumsegs[i];
++		riftsegments=riftssegments[i];
++		riftpairs=riftspairs[i];
++
++		/*allocate riftpenaltypairs, and riftnumpenaltypairs: */
++		if((numsegs/2-1)!=0)riftpenaltypairs=xNewZeroInit<double>((numsegs/2-1)*RIFTPENALTYPAIRSWIDTH);
++
++		/*Go through only one flank of the rifts, not counting the tips: */
++		counter=0;
++		for(j=0;j<(numsegs/2);j++){
++			el1=*(riftpairs+2*j+0);
++			el2=*(riftpairs+2*j+1);
++			node1=*(riftsegments+3*j+0);
++			node2=*(riftsegments+3*j+1);
++			/*Find segment index to recover node3 and node4, facing node1 and node2: */
++			k0=-1;
++			for(k=0;k<numsegs;k++){
++				if(*(riftsegments+3*k+2)==el2){
++					k0=k;
++					break;
++				}
++			}
++			node3=*(riftsegments+3*k0+0);
++			node4=*(riftsegments+3*k0+1);
++
++			/* Make sure node3 faces node1 and node4 faces node2: */
++			if ((x[(int)node1-1]==x[(int)node4-1]) && (y[(int)node1-1]==y[(int)node4-1])){
++				/*Swap node3 and node4:*/
++				temp_node=node3;
++				node3=node4;
++				node4=temp_node;
++			}	
++			/*Ok, we have node1 facing node3, and node2 facing node4. Compute the normal to 
++			 *this segment, and its length: */
++			normal[0]=cos(atan2(x[(int)node1-1]-x[(int)node2-1],y[(int)node2-1]-y[(int)node1-1]));
++			normal[1]=sin(atan2(x[(int)node1-1]-x[(int)node2-1],y[(int)node2-1]-y[(int)node1-1]));
++			length=sqrt(pow(x[(int)node2-1]-x[(int)node1-1],(double)2)+pow(y[(int)node2-1]-y[(int)node1-1],(double)2));
++
++			/*Be careful here, we want penalty loads on each node, not on each segment. This means we cannot plug node1,
++			 * node2, node3 and node4 directly into riftpenaltypairs. We need to include node1, node2, node3 and node4, 
++			 * only once. We'll add the normals and the lengths : */
++
++			if(node1!=node3){ //exclude tips from loads
++				k1=-1;
++				for(k=0;k<counter;k++){
++					if( (*(riftpenaltypairs+k*7+0))==node1){
++						k1=k; 
++						break;
++					}
++				}
++				if(k1==-1){
++					*(riftpenaltypairs+counter*7+0)=node1;
++					*(riftpenaltypairs+counter*7+1)=node3;
++					*(riftpenaltypairs+counter*7+2)=el1;
++					*(riftpenaltypairs+counter*7+3)=el2;
++					*(riftpenaltypairs+counter*7+4)=normal[0];
++					*(riftpenaltypairs+counter*7+5)=normal[1];
++					*(riftpenaltypairs+counter*7+6)=length/2;
++					counter++;
++				}
++				else{
++					*(riftpenaltypairs+k1*7+4)+=normal[0];
++					*(riftpenaltypairs+k1*7+5)+=normal[1];
++					*(riftpenaltypairs+k1*7+6)+=length/2;
++				}
++			}
++			if(node2!=node4){
++				k2=-1;
++				for(k=0;k<counter;k++){
++					if( (*(riftpenaltypairs+k*7+0))==node2){
++						k2=k;
++						break;
++					}
++				}
++				if(k2==-1){
++					*(riftpenaltypairs+counter*7+0)=node2;
++					*(riftpenaltypairs+counter*7+1)=node4;
++					*(riftpenaltypairs+counter*7+2)=el1;
++					*(riftpenaltypairs+counter*7+3)=el2;
++					*(riftpenaltypairs+counter*7+4)=normal[0];
++					*(riftpenaltypairs+counter*7+5)=normal[1];
++					*(riftpenaltypairs+counter*7+6)=length/2;
++					counter++;
++				}
++				else{
++					*(riftpenaltypairs+k2*7+4)+=normal[0];
++					*(riftpenaltypairs+k2*7+5)+=normal[1];
++					*(riftpenaltypairs+k2*7+6)+=length/2;
++				}
++			}
++		}
++		/*Renormalize normals: */
++		for(j=0;j<counter;j++){
++			double magnitude=sqrt(pow( double(riftpenaltypairs[j*7+4]),2) + pow( double(riftpenaltypairs[j*7+5]),2) );
++			*(riftpenaltypairs+j*7+4)=*(riftpenaltypairs+j*7+4)/magnitude;
++			*(riftpenaltypairs+j*7+5)=*(riftpenaltypairs+j*7+5)/magnitude;
++		}
++
++		riftspenaltypairs[i]=riftpenaltypairs;
++		riftsnumpenaltypairs[i]=(numsegs/2-1);
++	}
++
++	/*Assign output pointers: */
++	*priftspenaltypairs=riftspenaltypairs;
++	*priftsnumpenaltypairs=riftsnumpenaltypairs;
++	return noerr;
++}/*}}}*/
++int RemoveCornersFromRifts(int** pindex,int* pnel,double** px,double** py,int* pnods,int* segments,int* segmentmarkers,int num_seg){/*{{{*/
++
++	int noerr=1;
++	int i,j,k;
++	int node1,node2,node3;
++	int el;
++	double  pair[2];
++	int     pair_count=0;
++	int     triple=0;
++
++	/*Recover input: */
++	int    *index = *pindex;
++	int     nel   = *pnel;
++	double *x     = *px;
++	double *y     = *py;
++	int     nods  = *pnods;
++
++	for (i=0;i<num_seg;i++){
++		node1=*(segments+3*i+0);
++		node2=*(segments+3*i+1);
++		/*Find all elements connected to [node1 node2]: */
++		pair_count=0;
++		for (j=0;j<nel;j++){
++			if (*(index+3*j+0)==node1){
++				if ((*(index+3*j+1)==node2) || (*(index+3*j+2)==node2)){
++					pair[pair_count]=j;
++					pair_count++;
++				}
++			}
++			if (*(index+3*j+1)==node1){
++				if ((*(index+3*j+0)==node2) || (*(index+3*j+2)==node2)){
++					pair[pair_count]=j;
++					pair_count++;
++				}
++			}
++			if (*(index+3*j+2)==node1){
++				if ((*(index+3*j+0)==node2) || (*(index+3*j+1)==node2)){
++					pair[pair_count]=j;
++					pair_count++;
++				}
++			}
++		}
++		/*Ok, we have pair_count elements connected to this segment. For each of these elements, 
++		 *figure out if the third node also belongs to a segment: */
++		if ((pair_count==0) || (pair_count==1)){ //we only select the rift segments, which belong to  2 elements
++			continue;
++		}
++		else{
++			for (j=0;j<pair_count;j++){
++				el=(int)pair[j];
++				triple=0;
++				/*First find node3: */
++				if (*(index+3*el+0)==node1){
++					if (*(index+3*el+1)==node2)node3=*(index+3*el+2);
++					else node3=*(index+3*el+1);
++				}
++				if (*(index+3*el+1)==node1){
++					if (*(index+3*el+0)==node2)node3=*(index+3*el+2);
++					else node3=*(index+3*el+0);
++				}
++				if (*(index+3*el+2)==node1){
++					if (*(index+3*el+0)==node2)node3=*(index+3*el+1);
++					else node3=*(index+3*el+0);
++				}
++				/*Ok, we have node3. Does node3 belong to a segment? : */
++				for (k=0;k<num_seg;k++){
++					if ((node3==*(segments+3*k+0)) || (node3==*(segments+3*k+1))){
++						triple=1;
++						break;
++					}
++				}
++				if(triple==1){
++					/*el is a corner element: we need to split it in 3 triangles: */
++					x=xReNew<double>(x,nods,nods+1);
++					y=xReNew<double>(y,nods,nods+1);
++					x[nods]=(x[(int)node1-1]+x[(int)node2-1]+x[(int)node3-1])/3;
++					y[nods]=(y[(int)node1-1]+y[(int)node2-1]+y[(int)node3-1])/3;
++					index=xReNew<int>(index,nel*3,(nel+2*3));
++					/*First, reassign element el: */
++					*(index+3*el+0)=node1;
++					*(index+3*el+1)=node2;
++					*(index+3*el+2)=nods+1;
++					/*Other two elements: */
++					*(index+3*nel+0)=node2;
++					*(index+3*nel+1)=node3;
++					*(index+3*nel+2)=nods+1;
++
++					*(index+3*(nel+1)+0)=node3;
++					*(index+3*(nel+1)+1)=node1;
++					*(index+3*(nel+1)+2)=nods+1;
++					/*we need  to change the segment elements corresponding to el: */
++					for (k=0;k<num_seg;k++){
++						if (*(segments+3*k+2)==(el+1)){
++							if ( ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node2)) || ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node1))) *(segments+3*k+2)=el+1;
++							if ( ((*(segments+3*k+0)==node2) && (*(segments+3*k+1)==node3)) || ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node2))) *(segments+3*k+2)=nel+1;
++							if ( ((*(segments+3*k+0)==node3) && (*(segments+3*k+1)==node1)) || ((*(segments+3*k+0)==node1) && (*(segments+3*k+1)==node3))) *(segments+3*k+2)=nel+2;
++						}
++					}
++
++					nods=nods+1;
++					nel=nel+2;
++					i=0;
++					break;
++				}
++			} //for (j=0;j<pair_count;j++)
++		}
++	}// for (i=0;i<num_seg;i++)
++
++	/*Assign output pointers: */
++	*pindex=index;
++	*pnel=nel;
++	*px=x;
++	*py=y;
++	*pnods=nods;
++	return noerr;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp	(revision 22498)
+@@ -0,0 +1,96 @@
++/*
++ * SplitMeshForRifts.c:
++ */
++#include "./trimesh.h"
++#include "../MemOps/MemOps.h"
++
++int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist){
++
++	/*Some notes on dimensions: 
++	index  of size nelx3
++	x and y of size nodsx1
++	segments of size nsegsx3*/
++
++	int i,j,k,l;
++	int node;
++	int el;
++	int  nriftsegs;
++	int* riftsegments=NULL; 
++	int* flags=NULL;
++	int  NumGridElementListOnOneSideOfRift;
++	int* GridElementListOnOneSideOfRift=NULL;
++
++	/*Recover input: */
++	int     nel               = *pnel;
++	int    *index             = *pindex;
++	int     nods              = *pnods;
++	double *x                 = *px;
++	double *y                 = *py;
++	int     nsegs             = *pnsegs;
++	int    *segments          = *psegments;
++	int    *segmentmarkerlist = *psegmentmarkerlist;
++
++	/*Establish list of segments that belong to a rift: */
++	/*riftsegments of size nriftsegsx4 (4 for first element on segment,second element,first node and second snode)*/
++	RiftSegmentsFromSegments(&nriftsegs,&riftsegments,nel,index,nsegs,segments);
++
++	/*Go through all nodes of the rift segments, and start splitting the mesh: */
++	flags=xNewZeroInit<int>(nods); //to make sure we don't split the same nodes twice!
++	for (i=0;i<nriftsegs;i++){
++		for (j=0;j<2;j++){
++
++			node=riftsegments[4*i+j+2];
++			if(flags[node-1]){
++				/*This node was already split, skip:*/
++				continue;
++			}
++			else{
++				flags[node-1]=1;
++			}
++
++			if(IsGridOnRift(riftsegments,nriftsegs,node)){
++
++				DetermineGridElementListOnOneSideOfRift(&NumGridElementListOnOneSideOfRift,&GridElementListOnOneSideOfRift,i,nriftsegs,riftsegments,node,index,nel);
++
++				/*Summary: we have for node, a list of elements
++				 * (GridElementListOnOneSideOfRift, of size
++				 * NumGridElementListOnOneSideOfRift) that all contain node 
++				 *and that are on the same side of the rift. For all these
++				 elements, we clone node into another node, and we swap all
++				 instances of node in the triangulation *for those elements, to the
++				 new node.*/
++
++				//create new node
++				x=xReNew<double>(x,nods,nods+1);
++				y=xReNew<double>(y,nods,nods+1);
++				x[nods]=x[node-1]; //matlab indexing
++				y[nods]=y[node-1]; //matlab indexing
++
++				//augment number of nodes 
++				nods++;
++
++				//change elements owning this node
++				for (k=0;k<NumGridElementListOnOneSideOfRift;k++){
++					el=GridElementListOnOneSideOfRift[k];
++					for (l=0;l<3;l++){
++						if (index[3*el+l]==node) index[3*el+l]=nods; //again, matlab indexing.
++					}
++				}
++			}// if(IsGridOnRift(riftsegments,nriftsegs,node))
++		} //for(j=0;j<2;j++)
++	} //for (i=0;i<nriftsegs;i++)
++
++	/*update segments: they got modified completely by adding new nodes.*/
++	UpdateSegments(&segments,&segmentmarkerlist, &nsegs,index,x,y,riftsegments,nriftsegs,nods,nel);
++
++	/*Assign output pointers: */
++	*pnel=nel;
++	*pindex=index;
++	*pnods=nods;
++	*px=x;
++	*py=y;
++	*pnsegs=nsegs;
++	*psegments=segments;
++	*psegmentmarkerlist=segmentmarkerlist;
++	return 1;
++}
+Index: ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp	(revision 22498)
+@@ -0,0 +1,51 @@
++/*
++ * GridInsideHole.c:
++ * from a convex set of points, figure out a point that for sure lies inside the profile.
++ */
++
++#include <math.h>
++
++#include "./trimesh.h"
++#include "../Exp/exp.h"
++
++#undef M_PI
++#define M_PI 3.141592653589793238462643
++
++int GridInsideHole(double* px0,double* py0,int n,double* x,double* y){
++
++	double flag=0.0;
++	double xA,xB,xC,xD,xE;
++	double yA,yB,yC,yD,yE;
++
++	/*Take first and last vertices: */
++	xA=x[0];
++	yA=y[0];
++	xB=x[n-1];
++	yB=y[n-1];
++
++	/*Figure out middle of segment [A B]: */
++	xC=(xA+xB)/2;
++	yC=(yA+yB)/2;
++
++	/*D and E are on each side of segment [A B], on the median line between segment [A  B], 
++	 *at an angle of 10 degree (less than the minimum 30 enforced by the quality of the mesh: */
++	xD=xC+tan(10./180.*M_PI)*(yC-yA);
++	yD=yC+tan(10./180.*M_PI)*(xA-xC);
++	xE=xC-tan(10./180.*M_PI)*(yC-yA);
++	yE=yC-tan(10./180.*M_PI)*(xA-xC);
++
++	/*Either E or D is inside profile (x,y): */
++	IsInPolySerial(&flag,&xD,&yD,1,x,y,n,2);
++	/*FIXME: used to be 'flag' and not '!flag', check*/
++	if(!flag){
++		/*D is inside the poly: */
++		*px0=xD;
++		*py0=yD;
++	}
++	else{
++		/*E is inside the poly: */
++		*px0=xE;
++		*py0=yE;
++	}
++	return 1;
++}
+Index: ../trunk-jpl/src/c/shared/Triangle/triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/triangle.h	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/triangle.h	(revision 22498)
+@@ -0,0 +1,33 @@
++/*!\file:  triangle.h
++ * \brief
++ */ 
++
++#ifndef _SHARED_TRIANGLE_H
++#define _SHARED_TRIANGLE_H
++
++#include <stdio.h>
++#include <math.h>
++
++//#define REAL double //took  it out because it may conflict with stdlib.h defines. put back if necessary
++int AssociateSegmentToElement(int** psegments,int nseg,int* index,int nel);
++int OrderSegments(int** psegments,int nseg, int* index,int nel);
++int GridInsideHole(double* px0,double* py0,int n,double* x,double* y);
++int FindElement(int A,int B,int* index,int nel);
++int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist);
++int IsGridOnRift(int* riftsegments, int nriftsegs, int node);
++int GridElementsList(int** pGridElements, int* pNumGridElements,int node,double * index,int nel);
++int IsNeighbor(int el1,int el2,int* index);
++int IsOnRift(int el,int nriftsegs,int* riftsegments);
++void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel,int* index, int nsegs,int* segments);
++int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift,int segmentnumber, int nriftsegs,int* riftsegments, int node,int* index,int nel);
++int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel);
++int FindElement(double A,double B,int* index,int nel);
++int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs);
++int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nels);
++int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels);
++int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,int**  riftssegments,
++		int* riftsnumsegments,int** riftspairs,int* riftstips,double* x,double* y);
++int RemoveCornersFromRifts(int** pindex,int* pnel,double** px,double** py,int* pnods,int* segments,int* segmentmarkers,int num_seg);
++int PairRiftElements(int** priftsnumpairs,int*** priftspairs,int numrifts,int* riftsnumsegments,int** riftssegments,double* x,double* y);
++
++#endif  /* _SHARED_TRIANGLE_H */
+Index: ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp	(revision 22498)
+@@ -0,0 +1,24 @@
++/*!\file:  AssociateSegmentToElement.cpp
++ * \brief for each segment, look for the corresponding element.
++ */ 
++
++#include "./trimesh.h"
++
++int AssociateSegmentToElement(int** psegments,int nseg,int* index,int nel){
++
++	/*node indices: */
++	int A,B;
++
++	/*Recover segments: */
++	int* segments=*psegments;
++
++	for(int i=0;i<nseg;i++){
++		A=segments[3*i+0];
++		B=segments[3*i+1];
++		segments[3*i+2]=FindElement(A,B,index,nel)+1; //matlab indexing.
++	}
++
++	/*Assign output pointers: */
++	*psegments=segments;
++	return 1;
++}
+Index: ../trunk-jpl/src/c/shared/Triangle
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle	(nonexistent)
++++ ../trunk-jpl/src/c/shared/Triangle	(revision 22498)
+
+Property changes on: ../trunk-jpl/src/c/shared/Triangle
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(nonexistent)
+@@ -1,65 +0,0 @@
+-/*
+- * TriMeshProcessRifts.h
+- */ 
+-
+-#ifndef _TRIMESH_PROCESSRIFTS_H_
+-#define _TRIMESH_PROCESSRIFTS_H_
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../bindings.h"
+-#include "../../c/main/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/shared/shared.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "TriMeshProcessRifts"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXIN          prhs[0]
+-#define XIN              prhs[1]
+-#define YIN              prhs[2]
+-#define SEGMENTSIN       prhs[3]
+-#define SEGMENTMARKERSIN prhs[4]
+-/* serial output macros: */
+-#define INDEXOUT          (mxArray**)&plhs[0]
+-#define XOUT              (mxArray**)&plhs[1]
+-#define YOUT              (mxArray**)&plhs[2]
+-#define SEGMENTSOUT       (mxArray**)&plhs[3]
+-#define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
+-#define RIFTSTRUCT        (mxArray**)&plhs[5]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXIN          PyTuple_GetItem(args,0)
+-#define XIN              PyTuple_GetItem(args,1)
+-#define YIN              PyTuple_GetItem(args,2)
+-#define SEGMENTSIN       PyTuple_GetItem(args,3)
+-#define SEGMENTMARKERSIN PyTuple_GetItem(args,4)
+-/* serial output macros: */
+-#define INDEXOUT          output,0
+-#define XOUT              output,1
+-#define YOUT              output,2
+-#define SEGMENTSOUT       output,3
+-#define SEGMENTMARKERSOUT output,4
+-#define RIFTSTRUCT        output,5
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  6
+-#undef NRHS
+-#define NRHS  5
+-
+-#endif
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(nonexistent)
+@@ -1,59 +0,0 @@
+-/*!\file:  TriMeshProcessRifts.cpp
+- * \brief split a mesh where a rift (or fault) is present
+- */ 
+-
+-#include "./TriMeshProcessRifts.h"
+-
+-void TriMeshProcessRiftsUsage(void){/*{{{*/
+-	_printf_("\n");
+-	_printf_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessrifts(index1,x1,y1,segments1,segmentmarkers1) \n");
+-	_printf_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.\n");
+-	_printf_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.\n");
+-}/*}}}*/
+-WRAPPER(TriMeshProcessRifts_python){
+-
+-	/* returned quantities: */
+-	RiftStruct *riftstruct = NULL;
+-
+-	/* input: */
+-	int     nel,nods;
+-	int    *index          = NULL;
+-	double *x              = NULL;
+-	double *y              = NULL;
+-	int    *segments       = NULL;
+-	int    *segmentmarkers = NULL;
+-	int     num_seg;
+-
+-	/*Boot module*/
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CHECKARGUMENTS(NLHS,NRHS,&TriMeshProcessRiftsUsage);
+-
+-	/*Fetch data */
+-	FetchData(&index,&nel,NULL,INDEXIN);
+-	FetchData(&x,&nods,XIN);
+-	FetchData(&y,NULL,YIN);
+-	FetchData(&segments,&num_seg,NULL,SEGMENTSIN);
+-	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
+-
+-	/*call x layer*/
+-	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,&riftstruct);
+-
+-	/*Output : */
+-	WriteData(INDEXOUT,index,nel,3);
+-	WriteData(XOUT,x,nods,1);
+-	WriteData(YOUT,y,nods,1);
+-	WriteData(SEGMENTSOUT,segments,num_seg,3);
+-	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
+-	WriteData(RIFTSTRUCT,riftstruct);
+-
+-	/*end module: */
+-	delete riftstruct;
+-	xDelete<int>(index);
+-	xDelete<double>(x);
+-	xDelete<double>(y);
+-	xDelete<int>(segments);
+-	xDelete<int>(segmentmarkers );
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts	(nonexistent)
+
+Property changes on: ../trunk-jpl/src/wrappers/TriMeshProcessRifts
+___________________________________________________________________
+Deleted: svn:ignore
+## -1,2 +0,0 ##
+-.deps
+-.dirstamp
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(nonexistent)
+@@ -1,63 +0,0 @@
+-/*
+- * TriMesh: mesh a domain using an .exp file
+- */
+-
+-#include "./TriMesh.h"
+-
+-void TriMeshUsage(void){/*{{{*/
+-	_printf_("\n");
+-	_printf_("   usage: [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,area) \n");
+-	_printf_("      where: index,x,y defines a triangulation, segments is an array made \n");
+-	_printf_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, \n");
+-	_printf_("      outlinefilename an Argus domain outline file, \n");
+-	_printf_("      area is the maximum area desired for any element of the resulting mesh, \n");
+-	_printf_("\n");
+-}/*}}}*/
+-WRAPPER(TriMesh_python){
+-	
+-	/*intermediary: */
+-	double    area;
+-	Contours *domain = NULL;
+-	Contours *rifts  = NULL;
+-
+-	/* output: */
+-	int    *index             = NULL;
+-	double *x                 = NULL;
+-	double *y                 = NULL;
+-	int    *segments          = NULL;
+-	int    *segmentmarkerlist = NULL;
+-	int     nel,nods,nsegs;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&TriMeshUsage);
+-
+-	/*Fetch data needed for meshing: */
+-	FetchData(&domain,DOMAINOUTLINE);
+-	FetchData(&rifts,RIFTSOUTLINE);
+-	FetchData(&area,AREA);
+-
+-	/*call x core: */
+-	TriMeshx(&index,&x,&y,&segments,&segmentmarkerlist,&nel,&nods,&nsegs,domain,rifts,area);
+-
+-	/*write outputs: */
+-	WriteData(INDEX,index,nel,3);
+-	WriteData(X,x,nods);
+-	WriteData(Y,y,nods);
+-	WriteData(SEGMENTS,segments,nsegs,3);
+-	WriteData(SEGMENTMARKERLIST,segmentmarkerlist,nsegs);
+-
+-	/*free ressources: */
+-	delete domain;
+-	delete rifts;
+-	xDelete<int>(index);
+-	xDelete<double>(x);
+-	xDelete<double>(y);
+-	xDelete<int>(segments);
+-	xDelete<int>(segmentmarkerlist);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(nonexistent)
+@@ -1,83 +0,0 @@
+-/*
+-	TriMesh.h
+-*/
+-
+-#ifndef _TRIMESH_H
+-#define _TRIMESH_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#ifdef _HAVE_JAVASCRIPT_MODULES_
+-#undef _DO_NOT_LOAD_GLOBALS_ /*only module where this needs to be undefined, so as to 
+-							   not include IssmComm several times in the javascript Modle construct.*/
+-#endif
+-
+-/*Header files: */
+-#include "../bindings.h"
+-#include "../../c/main/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/shared/io/io.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "TriMesh"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define DOMAINOUTLINE  prhs[0]
+-#define RIFTSOUTLINE   prhs[1]
+-#define AREA           prhs[2]
+-/* serial output macros: */
+-#define INDEX             (mxArray**)&plhs[0]
+-#define X                 (mxArray**)&plhs[1]
+-#define Y                 (mxArray**)&plhs[2]
+-#define SEGMENTS          (mxArray**)&plhs[3]
+-#define SEGMENTMARKERLIST (mxArray**)&plhs[4]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define DOMAINOUTLINE PyTuple_GetItem(args,0)
+-#define RIFTSOUTLINE  PyTuple_GetItem(args,1)
+-#define AREA          PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define INDEX             output,0
+-#define X                 output,1
+-#define Y                 output,2
+-#define SEGMENTS          output,3
+-#define SEGMENTMARKERLIST output,4
+-#endif
+-
+-#ifdef _HAVE_JAVASCRIPT_MODULES_
+-/* serial input macros: */
+-#define DOMAINOUTLINE domainx,domainy,domainnods
+-#define RIFTSOUTLINE  NULL,NULL,0
+-#define AREA          areain
+-/* serial output macros: */
+-#define INDEX             pindex,pnel
+-#define X                 px,pnods
+-#define Y                 py,pnods
+-#define SEGMENTS          psegments,pnsegs
+-#define SEGMENTMARKERLIST psegmentmarkers,pnsegs
+-#define WRAPPER(modulename) extern "C" { int  TriMeshModule(double** pindex, double** px, double** py, int* pnel, int* pnods, double** psegments, double** psegmentmarkers, int* pnsegs, double* domainx, double* domainy, int domainnods, double areain)
+-#define _DO_NOT_LOAD_GLOBALS_//we only load globals for TriMeshModule.js, not other modules!
+-#endif
+-
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  5
+-#undef NRHS
+-#define NRHS  3
+-
+-#endif  /* _TRIMESH_H */
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.js	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.js	(nonexistent)
+@@ -1,82 +0,0 @@
+-function TriMesh(md,domain,rifts, area){
+-/*TriMesh 
+-	   usage: var array = TriMesh(domain,rifts,area);
+-	      where: array is made of [index,x,y,segments,segmentmarkers]
+-		  and index,x,y defines a triangulation, segments is an array made 
+-	      of exterior segments to the mesh domain outline, segmentmarkers is an array 
+-		  flagging each segment, domain a js array defining the domain outline  (sames for 
+-		  rifts) and area is the maximum area desired for any element of the resulting mesh.
+-
+-		  Ok, for now, we are not dealing with rifts. Also, the domain is made of only one 
+-		  profile, this to avoid passing a double** pointer to js. 
+-*/
+-
+-	//Dynamic allocations: {{{
+-	//Retrieve domain arrays, and allocate on Module heap: 
+-	
+-	//input
+-	var dx=new Float64Array(domain['x']); var nx=dx.length * dx.BYTES_PER_ELEMENT;
+-	var dxPtr= Module._malloc(nx); var domainxHeap = new Uint8Array(Module.HEAPU8.buffer,dxPtr,nx);
+-	domainxHeap.set(new Uint8Array(dx.buffer)); var domainx=domainxHeap.byteOffset;
+-
+-	var dy=new Float64Array(domain['y']); var ny=dy.length * dy.BYTES_PER_ELEMENT;
+-	var dyPtr = Module._malloc(ny); var domainyHeap = new Uint8Array(Module.HEAPU8.buffer,dyPtr,ny);
+-	domainyHeap.set(new Uint8Array(dy.buffer)); var domainy=domainyHeap.byteOffset;
+-	
+-	//output
+-	var nel,indexlinear,index,nods,x,y;
+-	var pnel= Module._malloc(4); 
+-	var pindex= Module._malloc(4); 
+-	var pnods= Module._malloc(4); 
+-	var px= Module._malloc(4); 
+-	var py= Module._malloc(4); 
+-	var psegments= Module._malloc(4); 
+-	var psegmentmarkers= Module._malloc(4); 
+-	var pnsegs= Module._malloc(4); 
+-	//}}}
+-
+-	//Declare TriMesh module: 
+-	TriMeshModule = Module.cwrap('TriMeshModule','number',['number','number','number','number','number','number','number','number','number','number','number','number']);
+-	
+-	//Call TriMesh module: 
+-	TriMeshModule(pindex,px,py,pnel,pnods,psegments,psegmentmarkers,pnsegs, domainx,domainy,dx.length,area);
+-	
+-	/*Dynamic copying from heap: {{{*/
+-	//recover mesh: 
+-	nel = Module.getValue(pnel, 'i32');
+-	var indexptr = Module.getValue(pindex,'i32');
+-	indexlinear = Module.HEAPF64.slice(indexptr /8, indexptr/8 + nel*3);
+-	index = ListToMatrix(indexlinear,3);
+-
+-	nods = Module.getValue(pnods, 'i32');
+-	var xptr = Module.getValue(px,'i32');
+-	var yptr = Module.getValue(py,'i32');
+-	x = Module.HEAPF64.slice(xptr /8, xptr/8 + nods);
+-	y = Module.HEAPF64.slice(yptr /8, yptr/8 + nods);
+-	
+-	nsegs = Module.getValue(pnsegs, 'i32');
+-	var segmentsptr = Module.getValue(psegments,'i32');
+-	segmentslinear = Module.HEAPF64.slice(segmentsptr /8, segmentsptr/8 + nsegs*3);
+-	segments = ListToMatrix(segmentslinear,3);
+-	
+-	var segmentmarkersptr = Module.getValue(psegmentmarkers,'i32');
+-	segmentmarkers = Module.HEAPF64.slice(segmentmarkersptr /8, segmentmarkersptr/8 + nsegs);
+-	/*}}}*/
+-
+-	var return_array=[index,x,y,segments,segmentmarkers];
+-
+-	/*Free ressources: */
+-	Module._free(pindex); 
+-	Module._free(indexlinear); 
+-	Module._free(px); 
+-	Module._free(x); 
+-	Module._free(py); 
+-	Module._free(y); 
+-	Module._free(pnel); 
+-	Module._free(pnods); 
+-	Module._free(psegments); 
+-	Module._free(psegmentmarkers); 
+-	Module._free(pnsegs); 
+-
+-	return return_array;
+-}
+Index: ../trunk-jpl/src/wrappers/TriMesh
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh	(revision 22497)
++++ ../trunk-jpl/src/wrappers/TriMesh	(nonexistent)
+
+Property changes on: ../trunk-jpl/src/wrappers/TriMesh
+___________________________________________________________________
+Deleted: svn:ignore
+## -1,2 +0,0 ##
+-.deps
+-.dirstamp
+Index: ../trunk-jpl/src/wrappers/Triangle/Triangle.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/Triangle/Triangle.js	(nonexistent)
++++ ../trunk-jpl/src/wrappers/Triangle/Triangle.js	(revision 22498)
+@@ -0,0 +1,82 @@
++function Triangle(md,domain,rifts, area){
++/*Triangle 
++	   usage: var array = Triangle(domain,rifts,area);
++	      where: array is made of [index,x,y,segments,segmentmarkers]
++		  and index,x,y defines a triangulation, segments is an array made 
++	      of exterior segments to the mesh domain outline, segmentmarkers is an array 
++		  flagging each segment, domain a js array defining the domain outline  (sames for 
++		  rifts) and area is the maximum area desired for any element of the resulting mesh.
++
++		  Ok, for now, we are not dealing with rifts. Also, the domain is made of only one 
++		  profile, this to avoid passing a double** pointer to js. 
++*/
++
++	//Dynamic allocations: {{{
++	//Retrieve domain arrays, and allocate on Module heap: 
++	
++	//input
++	var dx=new Float64Array(domain['x']); var nx=dx.length * dx.BYTES_PER_ELEMENT;
++	var dxPtr= Module._malloc(nx); var domainxHeap = new Uint8Array(Module.HEAPU8.buffer,dxPtr,nx);
++	domainxHeap.set(new Uint8Array(dx.buffer)); var domainx=domainxHeap.byteOffset;
++
++	var dy=new Float64Array(domain['y']); var ny=dy.length * dy.BYTES_PER_ELEMENT;
++	var dyPtr = Module._malloc(ny); var domainyHeap = new Uint8Array(Module.HEAPU8.buffer,dyPtr,ny);
++	domainyHeap.set(new Uint8Array(dy.buffer)); var domainy=domainyHeap.byteOffset;
++	
++	//output
++	var nel,indexlinear,index,nods,x,y;
++	var pnel= Module._malloc(4); 
++	var pindex= Module._malloc(4); 
++	var pnods= Module._malloc(4); 
++	var px= Module._malloc(4); 
++	var py= Module._malloc(4); 
++	var psegments= Module._malloc(4); 
++	var psegmentmarkers= Module._malloc(4); 
++	var pnsegs= Module._malloc(4); 
++	//}}}
++
++	//Declare Triangle module: 
++	TriangleModule = Module.cwrap('TriangleModule','number',['number','number','number','number','number','number','number','number','number','number','number','number']);
++	
++	//Call Triangle module: 
++	TriangleModule(pindex,px,py,pnel,pnods,psegments,psegmentmarkers,pnsegs, domainx,domainy,dx.length,area);
++	
++	/*Dynamic copying from heap: {{{*/
++	//recover mesh: 
++	nel = Module.getValue(pnel, 'i32');
++	var indexptr = Module.getValue(pindex,'i32');
++	indexlinear = Module.HEAPF64.slice(indexptr /8, indexptr/8 + nel*3);
++	index = ListToMatrix(indexlinear,3);
++
++	nods = Module.getValue(pnods, 'i32');
++	var xptr = Module.getValue(px,'i32');
++	var yptr = Module.getValue(py,'i32');
++	x = Module.HEAPF64.slice(xptr /8, xptr/8 + nods);
++	y = Module.HEAPF64.slice(yptr /8, yptr/8 + nods);
++	
++	nsegs = Module.getValue(pnsegs, 'i32');
++	var segmentsptr = Module.getValue(psegments,'i32');
++	segmentslinear = Module.HEAPF64.slice(segmentsptr /8, segmentsptr/8 + nsegs*3);
++	segments = ListToMatrix(segmentslinear,3);
++	
++	var segmentmarkersptr = Module.getValue(psegmentmarkers,'i32');
++	segmentmarkers = Module.HEAPF64.slice(segmentmarkersptr /8, segmentmarkersptr/8 + nsegs);
++	/*}}}*/
++
++	var return_array=[index,x,y,segments,segmentmarkers];
++
++	/*Free ressources: */
++	Module._free(pindex); 
++	Module._free(indexlinear); 
++	Module._free(px); 
++	Module._free(x); 
++	Module._free(py); 
++	Module._free(y); 
++	Module._free(pnel); 
++	Module._free(pnods); 
++	Module._free(psegments); 
++	Module._free(psegmentmarkers); 
++	Module._free(pnsegs); 
++
++	return return_array;
++}
+Index: ../trunk-jpl/src/wrappers/Triangle/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Triangle/Triangle.cpp	(nonexistent)
++++ ../trunk-jpl/src/wrappers/Triangle/Triangle.cpp	(revision 22498)
+@@ -0,0 +1,63 @@
++/*
++ * Triangle: mesh a domain using an .exp file
++ */
++
++#include "./Triangle.h"
++
++void TriangleUsage(void){/*{{{*/
++	_printf_("\n");
++	_printf_("   usage: [index,x,y,segments,segmentmarkers]=Triangle(domainoutlinefilename,rifts,area) \n");
++	_printf_("      where: index,x,y defines a triangulation, segments is an array made \n");
++	_printf_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, \n");
++	_printf_("      outlinefilename an Argus domain outline file, \n");
++	_printf_("      area is the maximum area desired for any element of the resulting mesh, \n");
++	_printf_("\n");
++}/*}}}*/
++WRAPPER(Triangle_python){
++	
++	/*intermediary: */
++	double    area;
++	Contours *domain = NULL;
++	Contours *rifts  = NULL;
++
++	/* output: */
++	int    *index             = NULL;
++	double *x                 = NULL;
++	double *y                 = NULL;
++	int    *segments          = NULL;
++	int    *segmentmarkerlist = NULL;
++	int     nel,nods,nsegs;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&TriangleUsage);
++
++	/*Fetch data needed for meshing: */
++	FetchData(&domain,DOMAINOUTLINE);
++	FetchData(&rifts,RIFTSOUTLINE);
++	FetchData(&area,AREA);
++
++	/*call x core: */
++	Trianglex(&index,&x,&y,&segments,&segmentmarkerlist,&nel,&nods,&nsegs,domain,rifts,area);
++
++	/*write outputs: */
++	WriteData(INDEX,index,nel,3);
++	WriteData(X,x,nods);
++	WriteData(Y,y,nods);
++	WriteData(SEGMENTS,segments,nsegs,3);
++	WriteData(SEGMENTMARKERLIST,segmentmarkerlist,nsegs);
++
++	/*free ressources: */
++	delete domain;
++	delete rifts;
++	xDelete<int>(index);
++	xDelete<double>(x);
++	xDelete<double>(y);
++	xDelete<int>(segments);
++	xDelete<int>(segmentmarkerlist);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Triangle/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Triangle/Triangle.h	(nonexistent)
++++ ../trunk-jpl/src/wrappers/Triangle/Triangle.h	(revision 22498)
+@@ -0,0 +1,83 @@
++/*
++	Triangle.h
++*/
++
++#ifndef _TRIANGLE_H
++#define _TRIANGLE_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#ifdef _HAVE_JAVASCRIPT_MODULES_
++#undef _DO_NOT_LOAD_GLOBALS_ /*only module where this needs to be undefined, so as to 
++							   not include IssmComm several times in the javascript Modle construct.*/
++#endif
++
++/*Header files: */
++#include "../bindings.h"
++#include "../../c/main/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/modules/modules.h"
++#include "../../c/shared/shared.h"
++#include "../../c/shared/io/io.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Triangle"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define DOMAINOUTLINE  prhs[0]
++#define RIFTSOUTLINE   prhs[1]
++#define AREA           prhs[2]
++/* serial output macros: */
++#define INDEX             (mxArray**)&plhs[0]
++#define X                 (mxArray**)&plhs[1]
++#define Y                 (mxArray**)&plhs[2]
++#define SEGMENTS          (mxArray**)&plhs[3]
++#define SEGMENTMARKERLIST (mxArray**)&plhs[4]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define DOMAINOUTLINE PyTuple_GetItem(args,0)
++#define RIFTSOUTLINE  PyTuple_GetItem(args,1)
++#define AREA          PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define INDEX             output,0
++#define X                 output,1
++#define Y                 output,2
++#define SEGMENTS          output,3
++#define SEGMENTMARKERLIST output,4
++#endif
++
++#ifdef _HAVE_JAVASCRIPT_MODULES_
++/* serial input macros: */
++#define DOMAINOUTLINE domainx,domainy,domainnods
++#define RIFTSOUTLINE  NULL,NULL,0
++#define AREA          areain
++/* serial output macros: */
++#define INDEX             pindex,pnel
++#define X                 px,pnods
++#define Y                 py,pnods
++#define SEGMENTS          psegments,pnsegs
++#define SEGMENTMARKERLIST psegmentmarkers,pnsegs
++#define WRAPPER(modulename) extern "C" { int  TriangleModule(double** pindex, double** px, double** py, int* pnel, int* pnods, double** psegments, double** psegmentmarkers, int* pnsegs, double* domainx, double* domainy, int domainnods, double areain)
++#define _DO_NOT_LOAD_GLOBALS_//we only load globals for TriangleModule.js, not other modules!
++#endif
++
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  5
++#undef NRHS
++#define NRHS  3
++
++#endif  /* _TRIANGLE_H */
+Index: ../trunk-jpl/src/wrappers/Triangle
+===================================================================
+--- ../trunk-jpl/src/wrappers/Triangle	(nonexistent)
++++ ../trunk-jpl/src/wrappers/Triangle	(revision 22498)
+
+Property changes on: ../trunk-jpl/src/wrappers/Triangle
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/wrappers/javascript/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22497)
++++ ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22498)
+@@ -6,7 +6,7 @@
+ #define prefix (from http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Defining-Directories.html)
+ AM_CPPFLAGS+=  -DISSM_PREFIX='"$(prefix)"'
+ 
+-js_scripts = ${ISSM_DIR}/src/wrappers/TriMesh/TriMesh.js  \
++js_scripts = ${ISSM_DIR}/src/wrappers/Triangle/Triangle.js  \
+ 			 ${ISSM_DIR}/src/wrappers/NodeConnectivity/NodeConnectivity.js\
+ 			 ${ISSM_DIR}/src/wrappers/ContourToMesh/ContourToMesh.js\
+ 			 ${ISSM_DIR}/src/wrappers/ElementConnectivity/ElementConnectivity.js\
+@@ -80,7 +80,7 @@
+ libISSMApi_la_LDFLAGS = -static 
+ endif
+ 
+-IssmModule_SOURCES = ../TriMesh/TriMesh.cpp \
++IssmModule_SOURCES = ../Triangle/Triangle.cpp \
+ 					 ../NodeConnectivity/NodeConnectivity.cpp\
+ 					 ../ContourToMesh/ContourToMesh.cpp\
+ 					 ../ElementConnectivity/ElementConnectivity.cpp\
+@@ -88,6 +88,6 @@
+ 					 ../IssmConfig/IssmConfig.cpp\
+ 					 ../Issm/issm.cpp
+ 
+-IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriMeshModule','_NodeConnectivityModule','_ContourToMeshModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
++IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriangleModule','_NodeConnectivityModule','_ContourToMeshModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
+ IssmModule_LDADD = ${deps} $(TRIANGLELIB)  $(GSLLIB)
+ #}}}
+Index: ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.cpp	(nonexistent)
++++ ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.cpp	(revision 22498)
+@@ -0,0 +1,59 @@
++/*!\file:  ProcessRifts.cpp
++ * \brief split a mesh where a rift (or fault) is present
++ */ 
++
++#include "./ProcessRifts.h"
++
++void ProcessRiftsUsage(void){/*{{{*/
++	_printf_("\n");
++	_printf_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=ProcessRifts(index1,x1,y1,segments1,segmentmarkers1) \n");
++	_printf_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.\n");
++	_printf_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.\n");
++}/*}}}*/
++WRAPPER(ProcessRifts_python){
++
++	/* returned quantities: */
++	RiftStruct *riftstruct = NULL;
++
++	/* input: */
++	int     nel,nods;
++	int    *index          = NULL;
++	double *x              = NULL;
++	double *y              = NULL;
++	int    *segments       = NULL;
++	int    *segmentmarkers = NULL;
++	int     num_seg;
++
++	/*Boot module*/
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&ProcessRiftsUsage);
++
++	/*Fetch data */
++	FetchData(&index,&nel,NULL,INDEXIN);
++	FetchData(&x,&nods,XIN);
++	FetchData(&y,NULL,YIN);
++	FetchData(&segments,&num_seg,NULL,SEGMENTSIN);
++	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
++
++	/*call x layer*/
++	ProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,&riftstruct);
++
++	/*Output : */
++	WriteData(INDEXOUT,index,nel,3);
++	WriteData(XOUT,x,nods,1);
++	WriteData(YOUT,y,nods,1);
++	WriteData(SEGMENTSOUT,segments,num_seg,3);
++	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
++	WriteData(RIFTSTRUCT,riftstruct);
++
++	/*end module: */
++	delete riftstruct;
++	xDelete<int>(index);
++	xDelete<double>(x);
++	xDelete<double>(y);
++	xDelete<int>(segments);
++	xDelete<int>(segmentmarkers );
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.h	(nonexistent)
++++ ../trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.h	(revision 22498)
+@@ -0,0 +1,65 @@
++/*
++ * ProcessRifts.h
++ */ 
++
++#ifndef _PROCESSRIFTS_H_
++#define _PROCESSRIFTS_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../bindings.h"
++#include "../../c/main/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/shared/shared.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "ProcessRifts"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXIN          prhs[0]
++#define XIN              prhs[1]
++#define YIN              prhs[2]
++#define SEGMENTSIN       prhs[3]
++#define SEGMENTMARKERSIN prhs[4]
++/* serial output macros: */
++#define INDEXOUT          (mxArray**)&plhs[0]
++#define XOUT              (mxArray**)&plhs[1]
++#define YOUT              (mxArray**)&plhs[2]
++#define SEGMENTSOUT       (mxArray**)&plhs[3]
++#define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
++#define RIFTSTRUCT        (mxArray**)&plhs[5]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXIN          PyTuple_GetItem(args,0)
++#define XIN              PyTuple_GetItem(args,1)
++#define YIN              PyTuple_GetItem(args,2)
++#define SEGMENTSIN       PyTuple_GetItem(args,3)
++#define SEGMENTMARKERSIN PyTuple_GetItem(args,4)
++/* serial output macros: */
++#define INDEXOUT          output,0
++#define XOUT              output,1
++#define YOUT              output,2
++#define SEGMENTSOUT       output,3
++#define SEGMENTMARKERSOUT output,4
++#define RIFTSTRUCT        output,5
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  6
++#undef NRHS
++#define NRHS  5
++
++#endif
+Index: ../trunk-jpl/src/wrappers/ProcessRifts
+===================================================================
+--- ../trunk-jpl/src/wrappers/ProcessRifts	(nonexistent)
++++ ../trunk-jpl/src/wrappers/ProcessRifts	(revision 22498)
+
+Property changes on: ../trunk-jpl/src/wrappers/ProcessRifts
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 22497)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 22498)
+@@ -57,8 +57,8 @@
+ 						 MeshProfileIntersection_matlab.la\
+ 						 PointCloudFindNeighbors_matlab.la\
+ 						 PropagateFlagsFromConnectivity_matlab.la\
+-						 TriMesh_matlab.la\
+-						 TriMeshProcessRifts_matlab.la\
++						 Triangle_matlab.la\
++						 ProcessRifts_matlab.la\
+ 						 Scotch_matlab.la
+ 
+ if CHACO
+@@ -232,11 +232,11 @@
+ ShpRead_matlab_la_CXXFLAGS = ${AM_CXXFLAGS}
+ ShpRead_matlab_la_LIBADD = ${deps} $(SHAPELIBLIB) $(PETSCLIB) $(MPILIB) $(NEOPZLIB) $(GSLLIB) $(PROJ4LIB)
+ 
+-TriMesh_matlab_la_SOURCES = ../TriMesh/TriMesh.cpp
+-TriMesh_matlab_la_CXXFLAGS = ${AM_CXXFLAGS}
+-TriMesh_matlab_la_LIBADD = ${deps} $(PETSCLIB) $(MPILIB) $(TRIANGLELIB) $(NEOPZLIB) $(GSLLIB) $(PROJ4LIB)
++Triangle_matlab_la_SOURCES = ../Triangle/Triangle.cpp
++Triangle_matlab_la_CXXFLAGS = ${AM_CXXFLAGS}
++Triangle_matlab_la_LIBADD = ${deps} $(PETSCLIB) $(MPILIB) $(TRIANGLELIB) $(NEOPZLIB) $(GSLLIB) $(PROJ4LIB)
+ 
+-TriMeshProcessRifts_matlab_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp
+-TriMeshProcessRifts_matlab_la_CXXFLAGS = ${AM_CXXFLAGS}
+-TriMeshProcessRifts_matlab_la_LIBADD = ${deps} $(PETSCLIB) $(MPILIB) $(NEOPZLIB) $(GSLLIB) $(PROJ4LIB)
++ProcessRifts_matlab_la_SOURCES = ../ProcessRifts/ProcessRifts.cpp
++ProcessRifts_matlab_la_CXXFLAGS = ${AM_CXXFLAGS}
++ProcessRifts_matlab_la_LIBADD = ${deps} $(PETSCLIB) $(MPILIB) $(NEOPZLIB) $(GSLLIB) $(PROJ4LIB)
+ #}}}
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22497)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22498)
+@@ -40,8 +40,8 @@
+ 						IssmConfig_python.la\
+ 						MeshProfileIntersection_python.la\
+ 						NodeConnectivity_python.la\
+-						TriMesh_python.la\
+-						TriMeshProcessRifts_python.la
++						Triangle_python.la\
++						ProcessRifts_python.la
+ endif 
+ #}}}
+ #Flags and libraries {{{
+@@ -140,11 +140,11 @@
+ NodeConnectivity_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ NodeConnectivity_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+ 
+-TriMesh_python_la_SOURCES = ../TriMesh/TriMesh.cpp
+-TriMesh_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+-TriMesh_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB) $(GSLLIB) $(PROJ4LIB)
++Triangle_python_la_SOURCES = ../Triangle/Triangle.cpp
++Triangle_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++Triangle_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB) $(GSLLIB) $(PROJ4LIB)
+ 
+-TriMeshProcessRifts_python_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp
+-TriMeshProcessRifts_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+-TriMeshProcessRifts_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
++ProcessRifts_python_la_SOURCES = ../ProcessRifts/ProcessRifts.cpp
++ProcessRifts_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++ProcessRifts_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+ #}}}
+Index: ../trunk-jpl/src/m/mesh/triangle.js
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle.js	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/triangle.js	(revision 22498)
+@@ -1,7 +1,7 @@
+ function triangle(md){
+ //TRIANGLE - create model mesh using the triangle package
+ //
+-//   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++//   This routine creates a model mesh using Triangle and a domain outline, to within a certain resolution
+ //   where md is a @model object, domainname is the name of an Argus domain outline file, 
+ //   and resolution is a characteristic length for the mesh (same unit as the domain outline
+ //   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+@@ -35,7 +35,7 @@
+ 	var area=Math.pow(resolution,2);
+ 
+ 	//Call mesher: 
+-	var return_array=TriMesh(md, domain, rifts, area); 
++	var return_array=Triangle(md, domain, rifts, area); 
+ 
+ 	//Plug into md:
+ 	md.mesh.elements=return_array[0];
+Index: ../trunk-jpl/src/m/mesh/triangle2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle2dvertical.m	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/triangle2dvertical.m	(revision 22498)
+@@ -1,7 +1,7 @@
+ function md=triangle(md,domainname,resolution)
+ %TRIANGLE - create model mesh using the triangle package
+ %
+-%   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++%   This routine creates a model mesh using Triangle and a domain outline, to within a certain resolution
+ %   where md is a @model object, domainname is the name of an Argus domain outline file, 
+ %   and resolution is a characteristic length for the mesh (same unit as the domain outline
+ %   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+@@ -23,8 +23,8 @@
+ 
+ area=resolution^2;
+ 
+-%Mesh using TriMesh
+-[elements,x,z,segments,segmentmarkers]=TriMesh(domainname,'',area);
++%Mesh using Triangle
++[elements,x,z,segments,segmentmarkers]=Triangle(domainname,'',area);
+ 
+ %check that all the created nodes belong to at least one element
+ orphan=find(~ismember([1:length(x)],sort(unique(elements(:)))));
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 22498)
+@@ -1,5 +1,5 @@
+ import numpy as np
+-from TriMeshProcessRifts import TriMeshProcessRifts
++from ProcessRifts import ProcessRifts
+ from ContourToMesh import ContourToMesh
+ from meshprocessoutsiderifts import meshprocessoutsiderifts
+ from GetAreas import GetAreas
+@@ -21,7 +21,7 @@
+ 	"""
+ 
+ 	#Call MEX file
+-	md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct=TriMeshProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers)
++	md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct=ProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers)
+ 	md.mesh.elements=md.mesh.elements.astype(int)
+ 	md.mesh.x=md.mesh.x.reshape(-1)
+ 	md.mesh.y=md.mesh.y.reshape(-1)
+@@ -28,7 +28,7 @@
+ 	md.mesh.segments=md.mesh.segments.astype(int)
+ 	md.mesh.segmentmarkers=md.mesh.segmentmarkers.astype(int)
+ 	if not isinstance(md.rifts.riftstruct,list) or not md.rifts.riftstruct:
+-		raise RuntimeError("TriMeshProcessRifts did not find any rift")
++		raise RuntimeError("ProcessRifts did not find any rift")
+ 
+ 	#Fill in rest of fields:
+ 	numrifts=len(md.rifts.riftstruct)
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.m	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.m	(revision 22498)
+@@ -24,9 +24,9 @@
+ end
+ 
+ %Call MEX file
+-[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct]=TriMeshProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers);
++[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct]=ProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers);
+ if ~isstruct(md.rifts.riftstruct),
+-	error('TriMeshProcessRifts did not find any rift');
++	error('ProcessRifts did not find any rift');
+ end
+ 
+ %Fill in rest of fields:
+Index: ../trunk-jpl/src/m/mesh/argusmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/argusmesh.m	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/argusmesh.m	(revision 22498)
+@@ -8,7 +8,7 @@
+ %      md=argusmesh(md,infile)
+ %
+ %   Example:
+-%     md=argusmesh(md,'TriMesh.exp')
++%     md=argusmesh(md,'Domain.exp')
+ 
+ %some argument check: 
+ if nargin~=2 | nargout~=1,
+Index: ../trunk-jpl/src/m/mesh/triangle.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle.py	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/triangle.py	(revision 22498)
+@@ -1,7 +1,7 @@
+ import os.path
+ import numpy as np
+ from mesh2d import mesh2d
+-from TriMesh import TriMesh
++from Triangle import Triangle
+ from NodeConnectivity import NodeConnectivity
+ from ElementConnectivity import ElementConnectivity
+ import MatlabFuncs as m
+@@ -10,7 +10,7 @@
+ 	"""
+ 	TRIANGLE - create model mesh using the triangle package
+ 
+-	   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++	   This routine creates a model mesh using Triangle and a domain outline, to within a certain resolution
+ 	   where md is a @model object, domainname is the name of an Argus domain outline file, 
+ 	   and resolution is a characteristic length for the mesh (same unit as the domain outline
+ 	   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+@@ -47,9 +47,9 @@
+ 	if not os.path.exists(domainname):
+ 		raise IOError("file '%s' not found" % domainname)
+ 
+-	#Mesh using TriMesh
++	#Mesh using Triangle
+ 	md.mesh=mesh2d()
+-	md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers=TriMesh(domainname,riftname,area)
++	md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers=Triangle(domainname,riftname,area)
+ 	md.mesh.elements=md.mesh.elements.astype(int)
+ 	md.mesh.segments=md.mesh.segments.astype(int)
+ 	md.mesh.segmentmarkers=md.mesh.segmentmarkers.astype(int)
+Index: ../trunk-jpl/src/m/mesh/triangle.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle.m	(revision 22497)
++++ ../trunk-jpl/src/m/mesh/triangle.m	(revision 22498)
+@@ -1,7 +1,7 @@
+ function md=triangle(md,domainname,varargin)
+ %TRIANGLE - create model mesh using the triangle package
+ %
+-%   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++%   This routine creates a model mesh using Triangle and a domain outline, to within a certain resolution
+ %   where md is a @model object, domainname is the name of an Argus domain outline file, 
+ %   and resolution is a characteristic length for the mesh (same unit as the domain outline
+ %   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+@@ -41,8 +41,8 @@
+ 	error(['file "' domainname '" not found']);
+ end
+ 
+-%Mesh using TriMesh
+-[elements,x,y,segments,segmentmarkers]=TriMesh(domainname,riftname,area);
++%Mesh using Triangle
++[elements,x,y,segments,segmentmarkers]=Triangle(domainname,riftname,area);
+ 
+ %check that all the created nodes belong to at least one element
+ removeorphans=1;
+Index: ../trunk-jpl/src/m/modules/TriMesh.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/TriMesh.m	(revision 22497)
++++ ../trunk-jpl/src/m/modules/TriMesh.m	(nonexistent)
+@@ -1,21 +0,0 @@
+-function [index,x,y,segments,segmentmarkers] = TriMesh(domainoutlinefilename,rifts,mesh_area);
+-%TRIMESH - Mesh a domain using an .exp file
+-%
+-%   Usage: 
+-%     [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,mesh_area);
+-%	      
+-%   index,x,y:	Defines a triangulation 
+-%   segments:	Array made of exterior segments to the mesh domain outline 
+-%   segmentmarkers:	Array flagging each segment
+-%
+-%   domainoutlinefilename:	Argus domain outline file
+-%   mesh_area:	Maximum area desired for any element of the resulting mesh
+-
+-% Check usage
+-if nargin~=3 && nargout~=5
+-	help TriMesh
+-	error('Wrong usage (see above)');
+-end
+-
+-% Call mex module
+-[index,x,y,segments,segmentmarkers]=TriMesh_matlab(domainoutlinefilename,rifts,mesh_area);
+Index: ../trunk-jpl/src/m/modules/TriMesh.py
+===================================================================
+--- ../trunk-jpl/src/m/modules/TriMesh.py	(revision 22497)
++++ ../trunk-jpl/src/m/modules/TriMesh.py	(nonexistent)
+@@ -1,21 +0,0 @@
+-from TriMesh_python import TriMesh_python
+-
+-def TriMesh(domainoutlinefilename,rifts,mesh_area):
+-	"""
+-	TRIMESH - Mesh a domain using an .exp file
+-
+-	   Usage: 
+-			[index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,mesh_area); 
+-
+-	   index,x,y: defines a triangulation 
+-		segments: An array made of exterior segments to the mesh domain outline 
+-		segmentmarkers: An array flagging each segment
+-
+-	   domainoutlinefilename: an Argus domain outline file
+-		mesh_area: The maximum area desired for any element of the resulting mesh
+-	"""
+-	# Call mex module
+-	index,x,y,segments,segmentmarkers=TriMesh_python(domainoutlinefilename,rifts,mesh_area)
+-	# Return
+-	return index,x,y,segments,segmentmarkers
+-
+Index: ../trunk-jpl/src/m/modules/TriMeshProcessRifts.py
+===================================================================
+--- ../trunk-jpl/src/m/modules/TriMeshProcessRifts.py	(revision 22497)
++++ ../trunk-jpl/src/m/modules/TriMeshProcessRifts.py	(nonexistent)
+@@ -1,16 +0,0 @@
+-from TriMeshProcessRifts_python import TriMeshProcessRifts_python
+-
+-def TriMeshProcessRifts(index1,x1,y1,segments1,segmentmarkers1):
+-	"""
+-	TRIMESHPROCESSRIFTS - Split a mesh where a rift (or fault) is present
+-
+-	   Usage: 
+-		   [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessRifts(index1,x1,y1,segments1,segmentmarkers1);
+-
+-	   (index1,x1,y1,segments1,segmentmarkers1):	An initial triangulation.
+-	   [index2,x2,y2,segments2,segmentmarkers2,rifts2]:	The resulting triangulation where rifts have been processed.
+-	"""
+-	# Call mex module
+-	index2,x2,y2,segments2,segmentmarkers2,rifts2 = TriMeshProcessRifts_python(index1,x1,y1,segments1,segmentmarkers1)
+-	# Return
+-	return index2,x2,y2,segments2,segmentmarkers2,rifts2
+Index: ../trunk-jpl/src/m/modules/TriMeshProcessRifts.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/TriMeshProcessRifts.m	(revision 22497)
++++ ../trunk-jpl/src/m/modules/TriMeshProcessRifts.m	(nonexistent)
+@@ -1,17 +0,0 @@
+-function [index2,x2,y2,segments2,segmentmarkers2,rifts2] = TriMeshProcessRifts(index1,x1,y1,segments1,segmentmarkers1);
+-%TRIMESHPROCESSRIFTS - Split a mesh where a rift (or fault) is present
+-%
+-%   Usage: 
+-%      [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessRifts(index1,x1,y1,segments1,segmentmarkers1); 
+-%   
+-%   (index1,x1,y1,segments1,segmentmarkers1):	An initial triangulation.
+-%   [index2,x2,y2,segments2,segmentmarkers2,rifts2]:	The resulting triangulation where rifts have been processed.
+-
+-% Check usage
+-if nargin~=5 && nargout~=6
+-	help TriMeshProcessRifts
+-	error('Wrong usage (see above)');
+-end
+-
+-% Call mex module
+-[index2,x2,y2,segments2,segmentmarkers2,rifts2] = TriMeshProcessRifts_matlab(index1,x1,y1,segments1,segmentmarkers1);
+Index: ../trunk-jpl/src/m/modules/ProcessRifts.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/ProcessRifts.m	(nonexistent)
++++ ../trunk-jpl/src/m/modules/ProcessRifts.m	(revision 22498)
+@@ -0,0 +1,17 @@
++function [index2,x2,y2,segments2,segmentmarkers2,rifts2] = ProcessRifts(index1,x1,y1,segments1,segmentmarkers1);
++%TRIMESHPROCESSRIFTS - Split a mesh where a rift (or fault) is present
++%
++%   Usage: 
++%      [index2,x2,y2,segments2,segmentmarkers2,rifts2]=ProcessRifts(index1,x1,y1,segments1,segmentmarkers1); 
++%   
++%   (index1,x1,y1,segments1,segmentmarkers1):	An initial triangulation.
++%   [index2,x2,y2,segments2,segmentmarkers2,rifts2]:	The resulting triangulation where rifts have been processed.
++
++% Check usage
++if nargin~=5 && nargout~=6
++	help ProcessRifts
++	error('Wrong usage (see above)');
++end
++
++% Call mex module
++[index2,x2,y2,segments2,segmentmarkers2,rifts2] = ProcessRifts_matlab(index1,x1,y1,segments1,segmentmarkers1);
+Index: ../trunk-jpl/src/m/modules/Triangle.py
+===================================================================
+--- ../trunk-jpl/src/m/modules/Triangle.py	(nonexistent)
++++ ../trunk-jpl/src/m/modules/Triangle.py	(revision 22498)
+@@ -0,0 +1,21 @@
++from Triangle_python import Triangle_python
++
++def Triangle(domainoutlinefilename,rifts,mesh_area):
++	"""
++	TRIMESH - Mesh a domain using an .exp file
++
++	   Usage: 
++			[index,x,y,segments,segmentmarkers]=Triangle(domainoutlinefilename,rifts,mesh_area); 
++
++	   index,x,y: defines a triangulation 
++		segments: An array made of exterior segments to the mesh domain outline 
++		segmentmarkers: An array flagging each segment
++
++	   domainoutlinefilename: an Argus domain outline file
++		mesh_area: The maximum area desired for any element of the resulting mesh
++	"""
++	# Call mex module
++	index,x,y,segments,segmentmarkers=Triangle_python(domainoutlinefilename,rifts,mesh_area)
++	# Return
++	return index,x,y,segments,segmentmarkers
++
+Index: ../trunk-jpl/src/m/modules/Triangle.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/Triangle.m	(nonexistent)
++++ ../trunk-jpl/src/m/modules/Triangle.m	(revision 22498)
+@@ -0,0 +1,21 @@
++function [index,x,y,segments,segmentmarkers] = Triangle(domainoutlinefilename,rifts,mesh_area);
++%TRIMESH - Mesh a domain using an .exp file
++%
++%   Usage: 
++%     [index,x,y,segments,segmentmarkers]=Triangle(domainoutlinefilename,rifts,mesh_area);
++%	      
++%   index,x,y:	Defines a triangulation 
++%   segments:	Array made of exterior segments to the mesh domain outline 
++%   segmentmarkers:	Array flagging each segment
++%
++%   domainoutlinefilename:	Argus domain outline file
++%   mesh_area:	Maximum area desired for any element of the resulting mesh
++
++% Check usage
++if nargin~=3 && nargout~=5
++	help Triangle
++	error('Wrong usage (see above)');
++end
++
++% Call mex module
++[index,x,y,segments,segmentmarkers]=Triangle_matlab(domainoutlinefilename,rifts,mesh_area);
+Index: ../trunk-jpl/src/m/modules/ProcessRifts.py
+===================================================================
+--- ../trunk-jpl/src/m/modules/ProcessRifts.py	(nonexistent)
++++ ../trunk-jpl/src/m/modules/ProcessRifts.py	(revision 22498)
+@@ -0,0 +1,16 @@
++from ProcessRifts_python import ProcessRifts_python
++
++def ProcessRifts(index1,x1,y1,segments1,segmentmarkers1):
++	"""
++	TRIMESHPROCESSRIFTS - Split a mesh where a rift (or fault) is present
++
++	   Usage: 
++		   [index2,x2,y2,segments2,segmentmarkers2,rifts2]=ProcessRifts(index1,x1,y1,segments1,segmentmarkers1);
++
++	   (index1,x1,y1,segments1,segmentmarkers1):	An initial triangulation.
++	   [index2,x2,y2,segments2,segmentmarkers2,rifts2]:	The resulting triangulation where rifts have been processed.
++	"""
++	# Call mex module
++	index2,x2,y2,segments2,segmentmarkers2,rifts2 = ProcessRifts_python(index1,x1,y1,segments1,segmentmarkers1)
++	# Return
++	return index2,x2,y2,segments2,segmentmarkers2,rifts2
Index: /issm/oecreview/Archive/21724-22754/ISSM-22498-22499.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22498-22499.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22498-22499.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp	(revision 22498)
++++ ../trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp	(revision 22499)
+@@ -1,7 +1,7 @@
+ /*
+  * SplitMeshForRifts.c:
+  */
+-#include "./trimesh.h"
++#include "./triangle.h"
+ #include "../MemOps/MemOps.h"
+ 
+ int SplitMeshForRifts(int* pnel,int** pindex,int* pnods,double** px,double** py,int* pnsegs,int** psegments,int** psegmentmarkerlist){
+Index: ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp	(revision 22498)
++++ ../trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp	(revision 22499)
+@@ -5,7 +5,7 @@
+ 
+ #include <math.h>
+ 
+-#include "./trimesh.h"
++#include "./triangle.h"
+ #include "../Exp/exp.h"
+ 
+ #undef M_PI
+Index: ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp	(revision 22498)
++++ ../trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp	(revision 22499)
+@@ -2,7 +2,7 @@
+  * \brief for each segment, look for the corresponding element.
+  */ 
+ 
+-#include "./trimesh.h"
++#include "./triangle.h"
+ 
+ int AssociateSegmentToElement(int** psegments,int nseg,int* index,int nel){
+ 
+Index: ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp	(revision 22498)
++++ ../trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp	(revision 22499)
+@@ -2,7 +2,7 @@
+  * OrderSegments.c: 
+  * reorder segments so that their normals point outside the domain outline.
+  */
+-#include "./trimesh.h"
++#include "./triangle.h"
+ 
+ int OrderSegments(int** psegments,int nseg,int* index,int nel){
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22499-22500.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22499-22500.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22499-22500.diff	(revision 22755)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 22499)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 22500)
+@@ -14,16 +14,23 @@
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.iscontrol=1;
+ md.inversion.nsteps=2;
+-md.inversion.control_parameters={'Vx','Vy'};
++%md.inversion.control_parameters={'Vx','Vy'};
++md.inversion.control_parameters={'BalancethicknessSpcthickness'};
+ md.balancethickness.stabilization=1;
+-md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
+-md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
+-md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
++%md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
++md.inversion.gradient_scaling=[100];
++%md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
++%md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
++md.inversion.min_parameters=[md.geometry.thickness-100];
++md.inversion.max_parameters=[md.geometry.thickness+100];
+ md.inversion.cost_functions=201;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
++md.inversion = m1qn3inversion(md.inversion);
+ 
++md.inversion.surface_obs = ones(md.mesh.numberofvertices,1);
++
+ md.verbose.control=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,'Balancethickness');
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 22499)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 22500)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',2);
+ 
+ %output
+-md.stressbalance.requested_outputs={'default','DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++md.stressbalance.requested_outputs={'default','DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6','DeviatoricStresseffective'};
+ md.outputdefinition.definitions={...
+ 	massfluxatgate('name','MassFlux1','profilename',['../Exp/MassFlux1.exp'],'definitionstring','Outputdefinition1'),...
+ 	massfluxatgate('name','MassFlux2','profilename',['../Exp/MassFlux2.exp'],'definitionstring','Outputdefinition2'),...
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 22499)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 22500)
+@@ -11,15 +11,16 @@
+ 
+ for i=1:length(L_list),
+ 	L=L_list{i};
+-	nx=20; %numberof nodes in x direction
+-	ny=20;
++	nx=10; %numberof nodes in x direction
++	ny=10;
+ 	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+-	md=extrude(md,9,1.);
++	md=extrude(md,4,1.);
+ 
+-	md=setflowequation(md,'HO','all');
++	md=setflowequation(md,'FS','all');
++	md.flowequation.fe_FS='MINI';
+ 
+ 	%Create dirichlet on the bed only
+ 	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -41,7 +42,9 @@
+ 
+ 	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
++	md.stressbalance.maxiter=1;
+ 	md=solve(md,'Stressbalance');
++	error('S');
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.StressbalanceSolution.Vx);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22500-22501.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22500-22501.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22500-22501.diff	(revision 22755)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 22500)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 22501)
+@@ -14,23 +14,16 @@
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.iscontrol=1;
+ md.inversion.nsteps=2;
+-%md.inversion.control_parameters={'Vx','Vy'};
+-md.inversion.control_parameters={'BalancethicknessSpcthickness'};
++md.inversion.control_parameters={'Vx','Vy'};
+ md.balancethickness.stabilization=1;
+-%md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
+-md.inversion.gradient_scaling=[100];
+-%md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
+-%md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
+-md.inversion.min_parameters=[md.geometry.thickness-100];
+-md.inversion.max_parameters=[md.geometry.thickness+100];
++md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
++md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
++md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
+ md.inversion.cost_functions=201;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+-md.inversion = m1qn3inversion(md.inversion);
+ 
+-md.inversion.surface_obs = ones(md.mesh.numberofvertices,1);
+-
+ md.verbose.control=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,'Balancethickness');
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 22500)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 22501)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',2);
+ 
+ %output
+-md.stressbalance.requested_outputs={'default','DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6','DeviatoricStresseffective'};
++md.stressbalance.requested_outputs={'default','DeviatoricStressxx','DeviatoricStressyy','DeviatoricStressxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+ md.outputdefinition.definitions={...
+ 	massfluxatgate('name','MassFlux1','profilename',['../Exp/MassFlux1.exp'],'definitionstring','Outputdefinition1'),...
+ 	massfluxatgate('name','MassFlux2','profilename',['../Exp/MassFlux2.exp'],'definitionstring','Outputdefinition2'),...
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 22500)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 22501)
+@@ -11,16 +11,15 @@
+ 
+ for i=1:length(L_list),
+ 	L=L_list{i};
+-	nx=10; %numberof nodes in x direction
+-	ny=10;
++	nx=20; %numberof nodes in x direction
++	ny=20;
+ 	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+-	md=extrude(md,4,1.);
++	md=extrude(md,9,1.);
+ 
+-	md=setflowequation(md,'FS','all');
+-	md.flowequation.fe_FS='MINI';
++	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+ 	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -42,9 +41,7 @@
+ 
+ 	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md.stressbalance.maxiter=1;
+ 	md=solve(md,'Stressbalance');
+-	error('S');
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.StressbalanceSolution.Vx);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22501-22502.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22501-22502.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22501-22502.diff	(revision 22755)
@@ -0,0 +1,116 @@
+Index: ../trunk-jpl/src/m/mesh/squaremesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/squaremesh.m	(revision 22501)
++++ ../trunk-jpl/src/m/mesh/squaremesh.m	(revision 22502)
+@@ -1,4 +1,4 @@
+-function md=squaremesh(md,Lx,Ly,nx,ny)
++function md=squaremesh(md,Lx,Ly,nx,ny,computeconnectivity)
+ %SQUAREMESH - create a structured square mesh 
+ %
+ %   This script will generate a structured square mesh
+@@ -9,38 +9,73 @@
+ %   Usage:
+ %      [md]=squaremesh(md,Lx,Ly,nx,ny)
+ 
++%process options
++if nargin == 5,
++	computeconnectivity = 1;
++end
++
+ %get number of elements and number of nodes
+ nel=(nx-1)*(ny-1)*2;
+ nods=nx*ny;
+ 
+-%initialization
+-index=zeros(nel,3);
+-x=zeros(nx*ny,1);
+-y=zeros(nx*ny,1);
++%Old method
++if 0,
++	%initialization
++	index=zeros(nel,3);
++	x=zeros(nx*ny,1);
++	y=zeros(nx*ny,1);
+ 
+-%create coordinates
+-for n=1:nx,
+-	for m=1:ny,
+-		x((n-1)*ny+m)=(n-1.);
+-		y((n-1)*ny+m)=(m-1.);
++	%create coordinates
++	for n=1:nx,
++		for m=1:ny,
++			x((n-1)*ny+m)=(n-1.);
++			y((n-1)*ny+m)=(m-1.);
++		end
+ 	end
+-end
+ 
+-%create index
+-for n=1:(nx-1)
+-	for m=1:(ny-1),
+-		A=(n-1)*ny+m;
+-		B=A+1;
+-		C=n*ny+m;
+-		D=C+1;
+-		index((n-1)*(ny-1)*2+2*(m-1)+1,:)=[A C B];
+-		index((n-1)*(ny-1)*2+2*m,:)=[B C D];
++	%create index
++	for n=1:(nx-1)
++		for m=1:(ny-1),
++			A=(n-1)*ny+m;
++			B=A+1;
++			C=n*ny+m;
++			D=C+1;
++			index((n-1)*(ny-1)*2+2*(m-1)+1,:)=[A C B];
++			index((n-1)*(ny-1)*2+2*m,:)=[B C D];
++		end
+ 	end
++
++	%Scale  x and y
++	x=x/max(x)*Lx;
++	y=y/max(y)*Ly;
++else
++	%New method (faster!)
++	x = repmat(linspace(0,Lx,nx),[ny 1]);
++	x = reshape(x,[nx*ny 1]);
++	y = repmat(linspace(0,Ly,ny)',[1 nx]);
++	y = reshape(y,[nx*ny 1]);
++
++	%do first column of elements first
++	nels1 = 2*(ny-1);
++	index = ones(nels1,3);
++	%First column
++	index(2:2:nels1,1) = 2:ny;
++	index(3:2:nels1,1) = 2:ny-1;
++	%2d column
++	index(1:2:nels1,2) = ny+1:2*ny-1;
++	index(2:2:nels1,2) = ny+1:2*ny-1;
++	%3rd column
++	index(1:2:nels1,3) = 2:ny;
++	index(2:2:nels1,3) = ny+2:2*ny;
++
++	%Now copy column and offset with ny, nx times
++	index = repmat(index,[nx-1 1]);
++	offset = repmat([0:ny:(nx-2)*ny],[nels1 1]);
++	offset = reshape(offset,[(nx-1)*nels1,1]);
++	offset = repmat(offset,[1,3]);
++	index = index + offset;
+ end
+ 
+-%Scale  x and y
+-x=x/max(x)*Lx;
+-y=y/max(y)*Ly;
+ 
+ %create segments
+ segments=zeros(2*(nx-1)+2*(ny-1),3);
+@@ -66,5 +101,7 @@
+ md.mesh.numberofelements=nel;
+ 
+ %Now, build the connectivity tables for this mesh.
+-md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
+-md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
++if computeconnectivity,
++	md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
++	md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22502-22503.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22502-22503.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22502-22503.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22502)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22503)
+@@ -165,8 +165,10 @@
+ 		if(ismovingfront)	movingfront_core(femmodel);
+ 
+ 		/* from here on, prepare geometry for next time step*/
+-		if(issmb)smb_core(femmodel);
+ 
++		if(issmb)           smb_core(femmodel);
++		if(ismasstransport) FloatingiceMeltingRatex(femmodel);
++
+ 		if(ismasstransport){
+ 			masstransport_core(femmodel);
+ 			femmodel->UpdateVertexPositionsx();
+@@ -188,10 +190,6 @@
+ 				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 			}
+ 		}
+-		if(ismasstransport){
+-			/*Calculate new basal melting on floating ice*/
+-			FloatingiceMeltingRatex(femmodel);
+-		}
+ 
+ 		if(isgia){
+ 			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22503-22504.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22503-22504.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22503-22504.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive293.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22504-22505.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22504-22505.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22504-22505.diff	(revision 22755)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/m/classes/linearbasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22504)
++++ ../trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 22505)
+@@ -91,17 +91,7 @@
+ 
+ 		yts=md.constants.yts
+ 
+-		floatingice_melting_rate = np.zeros((md.mesh.numberofvertices))
+-
+-		pos = np.nonzero(md.geometry.base <= md.basalforcings.deepwater_elevation)
+-		floatingice_melting_rate[pos] = md.basalforcings.deepwater_melting_rate[0][0]
+-
+-		pos = np.nonzero(np.logical_and(md.geometry.base > md.basalforcings.deepwater_elevation, md.geometry.base < md.basalforcings.upperwater_elevation))
+-
+-		floatingice_melting_rate[pos] =	md.basalforcings.deepwater_melting_rate[0][0] * (md.geometry.base[pos] - md.basalforcings.upperwater_elevation) / (md.basalforcings.deepwater_elevation - md.basalforcings.upperwater_elevation)
+-
+ 		WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer')
+-		WriteData(fid,prefix,'data',floatingice_melting_rate,'name','md.basalforcings.floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','name','md.basalforcings.groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'name','md.basalforcings.deepwater_melting_rate','scale',1./yts,'yts',md.constants.yts)
+Index: ../trunk-jpl/src/m/classes/linearbasalforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 22504)
++++ ../trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 22505)
+@@ -78,12 +78,7 @@
+ 
+ 			yts=md.constants.yts;
+ 
+-			floatingice_melting_rate=zeros(md.mesh.numberofvertices,1);
+-			floatingice_melting_rate(find(md.geometry.base<=md.basalforcings.deepwater_elevation(1,1)))=md.basalforcings.deepwater_melting_rate(1,1);
+-			pos=find(md.geometry.base>md.basalforcings.deepwater_elevation(1,1) & md.geometry.base<md.basalforcings.upperwater_elevation(1,1));
+-			floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate(1,1)*(md.geometry.base(pos)-md.basalforcings.upperwater_elevation(1,1))/(md.basalforcings.deepwater_elevation(1,1)-md.basalforcings.upperwater_elevation(1,1));
+ 			WriteData(fid,prefix,'name','md.basalforcings.model','data',2,'format','Integer');
+-			WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','DoubleMat','mattype',3,'timeserieslength',2,'name','md.basalforcings.deepwater_melting_rate','scale',1./yts,'yts',md.constants.yts)
+Index: ../trunk-jpl/src/m/classes/mismipbasalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 22504)
++++ ../trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 22505)
+@@ -85,11 +85,7 @@
+         if yts!=365.2422*24.*3600.:
+             print 'WARNING: value of yts for MISMIP+ runs different from ISSM default!'
+ 
+-        floatingice_melting_rate = np.zeros((md.mesh.numberofvertices))
+-        floatingice_melting_rate = md.basalforcings.meltrate_factor*np.tanh((md.geometry.base-md.geometry.bed)/md.basalforcings.threshold_thickness)*(md.basalforcings.upperdepth_melt-md.geometry.base)
+-
+ 	WriteData(fid,prefix,'name','md.basalforcings.model','data',3,'format','Integer')
+-	WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 	WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 	WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 	WriteData(fid,prefix,'object',self,'fieldname','meltrate_factor','format','Double','scale',1./yts)
+Index: ../trunk-jpl/src/m/classes/mismipbasalforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mismipbasalforcings.m	(revision 22504)
++++ ../trunk-jpl/src/m/classes/mismipbasalforcings.m	(revision 22505)
+@@ -84,11 +84,7 @@
+ 				disp('WARNING: value of yts for MISMIP+ runs different from ISSM default!');
+ 			end
+ 
+-			floatingice_melting_rate=zeros(md.mesh.numberofvertices,1);
+-			floatingice_melting_rate=md.basalforcings.meltrate_factor*tanh((md.geometry.base-md.geometry.bed)./md.basalforcings.threshold_thickness).*max(md.basalforcings.upperdepth_melt-md.geometry.base,0);
+-
+ 			WriteData(fid,prefix,'name','md.basalforcings.model','data',3,'format','Integer');
+-			WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
+ 			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 			WriteData(fid,prefix,'object',self,'fieldname','meltrate_factor','format','Double','scale',1./yts)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22505-22506.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22505-22506.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22505-22506.diff	(revision 22755)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22505)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22506)
+@@ -111,7 +111,7 @@
+ 		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+ 	}
+ 	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum,0.);
+ 	//iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum,0.);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum,0.);
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22505)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 22506)
+@@ -155,10 +155,29 @@
+ 	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+ 
++	/*Get what we need for ocean-induced basal melting*/
++	int basalforcing_model;
++	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
++	switch(basalforcing_model){
++		case FloatingMeltRateEnum:
++			iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
++			break;
++		case LinearFloatingMeltRateEnum:
++			break;
++		case MismipFloatingMeltRateEnum:
++			break;
++		case MantlePlumeGeothermalFluxEnum:
++			break;
++		case BasalforcingsPicoEnum:
++			iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
++			break;
++		default:
++			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
++	}
++
+ 	if(isoceancoupling){
+ 		iomodel->FetchDataToInput(elements,"md.mesh.lat",MeshLatEnum);
+ 		iomodel->FetchDataToInput(elements,"md.mesh.long",MeshLongEnum);
+@@ -177,16 +196,6 @@
+ 		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+ 		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+ 	}
+-
+-	int basalforcing_model;
+-	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+-	switch(basalforcing_model){
+-		case BasalforcingsPicoEnum:
+-			iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
+-			break;
+-		default: // Do nothing
+-			break;
+-	}
+ 	
+ }/*}}}*/
+ void MasstransportAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 22505)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 22506)
+@@ -78,7 +78,7 @@
+ 	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+ 	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);
+ 	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+ 	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22506-22507.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22506-22507.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22506-22507.diff	(revision 22755)
@@ -0,0 +1,1084 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22506)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22507)
+@@ -758,6 +758,8 @@
+ 	VxObsEnum,
+ 	VyObsEnum,
+ 	NumberedcostfunctionEnum,
++	CfsurfacesquareEnum,
++	CfsurfacelogvelEnum,
+ 	/*}}}*/
+ 	/*Relaxation{{{*/
+ 	AbsoluteEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22506)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22507)
+@@ -752,6 +752,8 @@
+ 		case VxObsEnum : return "VxObs";
+ 		case VyObsEnum : return "VyObs";
+ 		case NumberedcostfunctionEnum : return "Numberedcostfunction";
++		case CfsurfacesquareEnum : return "Cfsurfacesquare";
++		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
+ 		case AbsoluteEnum : return "Absolute";
+ 		case IncrementalEnum : return "Incremental";
+ 		case AugmentedLagrangianREnum : return "AugmentedLagrangianR";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22506)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22507)
+@@ -770,6 +770,8 @@
+ 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+ 	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
++	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
++	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+ 	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+@@ -872,12 +874,12 @@
+ 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+-	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+-	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
++	      if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
++	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
++	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+ 	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+ 	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+@@ -995,12 +997,12 @@
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+ 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+-	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+-	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
++	      else if (strcmp(name,"Penta")==0) return PentaEnum;
++	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+ 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+@@ -1118,12 +1120,12 @@
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"MINI")==0) return MINIEnum;
++	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22506)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22507)
+@@ -75,6 +75,8 @@
+ 					./classes/Nodes.cpp\
+ 					./classes/Numberedcostfunction.cpp\
+ 					./classes/Misfit.cpp\
++					./classes/Cfsurfacesquare.cpp\
++					./classes/Cfsurfacelogvel.cpp\
+ 					./classes/Regionaloutput.cpp\
+ 					./classes/Nodalvalue.cpp\
+ 					./classes/Node.cpp\
+Index: ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 22507)
+@@ -0,0 +1,222 @@
++/*!\file Cfsurfacelogvel.cpp
++ * \brief: Cfsurfacelogvel Object
++ */
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./classes.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
++/*}}}*/
++		
++/*Cfsurfacelogvel constructors, destructors :*/
++Cfsurfacelogvel::Cfsurfacelogvel(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->misfit=0;
++	this->lock=0;
++	this->datatime=0.;
++	this->timepassedflag = false;
++
++}
++/*}}}*/
++Cfsurfacelogvel::Cfsurfacelogvel(char* in_name, int in_definitionenum, IssmDouble in_datatime, bool in_timepassedflag){/*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	
++	this->name		= xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->datatime=in_datatime;
++	this->timepassedflag=in_timepassedflag;
++	
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++Cfsurfacelogvel::~Cfsurfacelogvel(){/*{{{*/
++	if(this->name)xDelete(this->name);
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++/*Object virtual function resolutoin: */
++Object* Cfsurfacelogvel::copy() {/*{{{*/
++	Cfsurfacelogvel* mf = new Cfsurfacelogvel(this->name,this->definitionenum,this->datatime,this->timepassedflag);
++	mf->misfit=this->misfit;
++	mf->lock=this->lock;
++	return (Object*) mf;
++}
++/*}}}*/
++void Cfsurfacelogvel::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Cfsurfacelogvel::Echo(void){/*{{{*/
++	_printf_(" Cfsurfacelogvel: " << name << " " << this->definitionenum << "\n");
++	_printf_("    datatime: " << datatime << "\n");
++	_printf_("	  timepassedflag: "<<timepassedflag<<"\n");
++}
++/*}}}*/
++int Cfsurfacelogvel::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Cfsurfacelogvel::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Cfsurfacelogvel::ObjectEnum(void){/*{{{*/
++	return CfsurfacelogvelEnum;
++}
++/*}}}*/
++/*Definition virtual function resolutoin: */
++int Cfsurfacelogvel::DefinitionEnum(){/*{{{*/
++	return this->definitionenum;
++}
++/*}}}*/
++char* Cfsurfacelogvel::Name(){/*{{{*/
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Cfsurfacelogvel::Response(FemModel* femmodel){/*{{{*/
++		 
++	 /*diverse: */
++	 IssmDouble time;
++	 
++	 /*recover time parameters: */
++	 femmodel->parameters->FindParam(&time,TimeEnum);
++
++/*ELLEN UNFINISHED*/
++		 int i;
++		 IssmDouble J=0.;
++		 IssmDouble J_sum=0.;
++	
++	 if(datatime<=time && !timepassedflag){
++		 for(i=0;i<femmodel->elements->Size();i++){
++			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++			 J+=this->Cfsurfacelogvel_Calculation(element,definitionenum);
++		 }
++
++		 ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++		 J=J_sum;
++		
++		 timepassedflag = true;
++		 return J;
++		}
++	 else return J;
++ }
++	/*}}}*/
++IssmDouble Cfsurfacelogvel::Cfsurfacelogvel_Calculation(Element* element, int definitionenum){/*{{{*/
++
++	int        domaintype,numcomponents;
++	IssmDouble Jelem=0.;
++	IssmDouble epsvel=2.220446049250313e-16;
++	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
++	IssmDouble velocity_mag,obs_velocity_mag;
++	IssmDouble misfit,Jdet;
++	IssmDouble vx,vy,vxobs,vyobs,weight;
++	IssmDouble* xyz_list = NULL;
++	
++	/*Get basal element*/
++	if(!element->IsOnSurface()) return 0.;
++
++	/*If on water, return 0: */
++	if(!element->IsIceInElement()) return 0.;
++
++	/*Get problem dimension*/
++	element->FindParam(&domaintype,DomainTypeEnum);
++	switch(domaintype){
++		case Domain2DverticalEnum:   numcomponents   = 1; break;
++		case Domain3DEnum:           numcomponents   = 2; break;
++		case Domain2DhorizontalEnum: numcomponents   = 2; break;
++		default: _error_("not supported yet");
++	}
++
++	/*Spawn surface element*/
++	Element* topelement = element->SpawnTopElement();
++
++	/* Get node coordinates*/
++	topelement->GetVerticesCoordinates(&xyz_list);
++	
++	/*Get model values*/
++	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
++	Input* vy_input	  =NULL;
++	if(numcomponents==2){
++	      vy_input    =topelement->GetInput(VyEnum);							              _assert_(vy_input);
++	}
++
++	/*Retrieve all inputs we will be needing: */
++	DatasetInput*    datasetinput = NULL;
++	Input*  tempinput = topelement->GetInput(definitionenum);
++	/*Cast it to a Datasetinput*/
++	if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do");
++	datasetinput = (DatasetInput*)tempinput;
++
++
++	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=topelement->NewGauss(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		/* Get Jacobian determinant: */
++		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
++
++		/*Get all parameters at gaussian point*/
++		datasetinput->GetInputValue(&weight,gauss,WeightsSurfaceObservationEnum);
++		vx_input->GetInputValue(&vx,gauss);
++		datasetinput->GetInputValue(&vxobs,gauss,VxObsEnum);
++		if(numcomponents==2){
++			vy_input->GetInputValue(&vy,gauss);
++			datasetinput->GetInputValue(&vyobs,gauss,VyObsEnum);
++		}
++
++		/*Compute SurfaceLogVelMisfit:
++		 *        *                 [        vel + eps     ] 2
++		 *               * J = 4 \bar{v}^2 | log ( -----------  ) |
++		 *                      *                 [       vel   + eps    ]
++		 *                             *                            obs
++		 *                                    */
++		if(numcomponents==1){
++			velocity_mag    =fabs(vx)+epsvel;
++			obs_velocity_mag=fabs(vxobs)+epsvel;
++		}
++		else{
++			velocity_mag    =sqrt(vx*vx+vy*vy)+epsvel;
++			obs_velocity_mag=sqrt(vxobs*vxobs+vyobs*vyobs)+epsvel;
++		}
++
++		misfit=4*pow(meanvel,2)*pow(log(velocity_mag/obs_velocity_mag),2);
++
++		/*Add to cost function*/
++		Jelem+=misfit*weight*Jdet*gauss->weight;
++
++	}
++
++	/*clean up and Return: */
++	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
++	xDelete<IssmDouble>(xyz_list);
++	delete gauss;
++	return Jelem;
++}/*}}}*/
++
+Index: ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(revision 22507)
+@@ -0,0 +1,46 @@
++/*!\file Cfsurfacelogvel.h
++ * \brief: header file for Cfsurfacelogvel object
++ */
++
++#ifndef _CFSURFACESQUARE_H_
++#define _CFSURFACESQUARE_H_
++
++/*Headers:*/
++#include "./Definition.h"
++#include "./FemModel.h"
++
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
++void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
++
++class Cfsurfacelogvel: public Object, public Definition{
++
++	public: 
++
++		int         definitionenum;
++		char*       name;
++		IssmDouble	datatime;
++		bool			timepassedflag;
++		
++		int         lock; // if lock is on, we just return the value stored in "misfit".  this is used so we don't compute misfit past the final_time
++		IssmDouble  misfit; //value carried over in time.
++		
++		/*Cfsurfacelogvel constructors, destructors :*/
++		Cfsurfacelogvel();
++		Cfsurfacelogvel(char* in_name, int in_definitionenum, IssmDouble in_datatime, bool timepassedflag);
++		~Cfsurfacelogvel();
++		
++		/*Object virtual function resolutoin: */
++		Object* copy();
++		void DeepEcho(void);
++		void Echo(void);
++		int Id(void);
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int ObjectEnum(void);
++		
++		/*Definition virtual function resolutoin: */
++		int DefinitionEnum();
++		char* Name();
++		IssmDouble Response(FemModel* femmodel);
++		IssmDouble Cfsurfacelogvel_Calculation(Element* element, int definitionenum);
++};
++#endif  /* _CFSURFACESQUARE_H_ */
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.h	(revision 22507)
+@@ -0,0 +1,51 @@
++/*!\file Cfsurfacesquare.h
++ * \brief: header file for Cfsurfacesquare object
++ */
++
++#ifndef _TIMEMISFIT_H_
++#define _TIMEMISFIT_H_
++
++/*Headers:*/
++#include "./Definition.h"
++#include "./FemModel.h"
++
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
++void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
++
++class Cfsurfacesquare: public Object, public Definition{
++
++	public: 
++
++		int         definitionenum;
++		int         local;     
++		int         model_enum;
++		char*       name;
++		int         observation_enum;
++		char*       timeinterpolation;
++		int         weights_enum;
++		IssmDouble	datatime;
++		bool			timepassedflag;
++		
++		int         lock; // if lock is on, we just return the value stored in "misfit".  this is used so we don't compute misfit past the final_time
++		IssmDouble  misfit; //value carried over in time.
++		
++		/*Cfsurfacesquare constructors, destructors :*/
++		Cfsurfacesquare();
++		Cfsurfacesquare(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, int in_weights_enum, IssmDouble in_datatime, bool timepassedflag);
++		~Cfsurfacesquare();
++		
++		/*Object virtual function resolutoin: */
++		Object* copy();
++		void DeepEcho(void);
++		void Echo(void);
++		int Id(void);
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int ObjectEnum(void);
++		
++		/*Definition virtual function resolutoin: */
++		int DefinitionEnum();
++		char* Name();
++		IssmDouble Response(FemModel* femmodel);
++		IssmDouble Cfsurfacesquare_Calculation(Element* element, int model_enum, int observation_enum, int weights_enum);
++};
++#endif  /* _TIMEMISFIT_H_ */
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 22506)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 22507)
+@@ -19,6 +19,8 @@
+ #include "./Misfit.h"
+ #include "./Nodalvalue.h"
+ #include "./Numberedcostfunction.h"
++#include "./Cfsurfacesquare.h"
++#include "./Cfsurfacelogvel.h"
+ #include "./Masscon.h"
+ #include "./Massconaxpby.h"
+ #include "./Regionaloutput.h"
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22506)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22507)
+@@ -64,7 +64,7 @@
+ 			}
+ 			else if (output_definition_enums[i]==MisfitEnum){
+ 				/*Deal with misfits: {{{*/
+-				
++			
+ 				/*misfit variables: */
+ 				int          nummisfits;
+ 				char**       misfit_name_s						= NULL;    
+@@ -156,6 +156,195 @@
+ 				xDelete<char*>(misfit_weights_string_s);
+ 				/*}}}*/
+ 			}
++			else if (output_definition_enums[i]==CfsurfacesquareEnum){
++				/*Deal with cfsurfacesquare: {{{*/
++				
++				/*cfsurfacesquare variables: */
++				int          num_cfsurfacesquares;
++				char**       cfsurfacesquare_name_s						= NULL;    
++				char**		 cfsurfacesquare_definitionstring_s		= NULL;    
++				char**       cfsurfacesquare_model_string_s			= NULL;
++				IssmDouble** cfsurfacesquare_observation_s			= NULL;
++				char**		 cfsurfacesquare_observation_string_s	= NULL;
++				int*         cfsurfacesquare_observation_M_s			= NULL;
++				int*         cfsurfacesquare_observation_N_s			= NULL;
++				IssmDouble** cfsurfacesquare_weights_s					= NULL;
++				int*         cfsurfacesquare_weights_M_s				= NULL;
++				int*         cfsurfacesquare_weights_N_s				= NULL;
++				char**       cfsurfacesquare_weights_string_s		= NULL;
++				int*	 cfsurfacesquare_datatime_s				= NULL;
++
++				/*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfsurfacesquare.m): */
++				iomodel->FetchMultipleData(&cfsurfacesquare_name_s,&num_cfsurfacesquares,                                                        "md.cfsurfacesquare.name");
++				iomodel->FetchMultipleData(&cfsurfacesquare_definitionstring_s,&num_cfsurfacesquares,                                            "md.cfsurfacesquare.definitionstring");
++				iomodel->FetchMultipleData(&cfsurfacesquare_model_string_s,&num_cfsurfacesquares,                                                "md.cfsurfacesquare.model_string");
++				iomodel->FetchMultipleData(&cfsurfacesquare_observation_s,&cfsurfacesquare_observation_M_s,&cfsurfacesquare_observation_N_s,&num_cfsurfacesquares, "md.cfsurfacesquare.observation");
++				iomodel->FetchMultipleData(&cfsurfacesquare_observation_string_s,&num_cfsurfacesquares,                                          "md.cfsurfacesquare.observation_string");
++				iomodel->FetchMultipleData(&cfsurfacesquare_weights_s,&cfsurfacesquare_weights_M_s,&cfsurfacesquare_weights_N_s,&num_cfsurfacesquares,             "md.cfsurfacesquare.weights");
++				iomodel->FetchMultipleData(&cfsurfacesquare_weights_string_s,&num_cfsurfacesquares,                                              "md.cfsurfacesquare.weights_string");
++				iomodel->FetchMultipleData(&cfsurfacesquare_datatime_s,&num_cfsurfacesquares,																	 "md.cfsurfacesquare.datatime");
++
++				for(j=0;j<num_cfsurfacesquares;j++){
++
++					int obs_vector_type=0;
++					if ((cfsurfacesquare_observation_M_s[j]==iomodel->numberofvertices) || (cfsurfacesquare_observation_M_s[j]==iomodel->numberofvertices+1)){
++						obs_vector_type=1;
++					}
++					else if ((cfsurfacesquare_observation_M_s[j]==iomodel->numberofelements) || (cfsurfacesquare_observation_M_s[j]==iomodel->numberofelements+1)){
++						obs_vector_type=2;
++					}
++					else
++					 _error_("cfsurfacesquare observation size not supported yet");
++
++					int weight_vector_type=0;
++					if ((cfsurfacesquare_weights_M_s[j]==iomodel->numberofvertices) || (cfsurfacesquare_weights_M_s[j]==iomodel->numberofvertices+1)){
++						weight_vector_type=1;
++					}
++					else if ((cfsurfacesquare_weights_M_s[j]==iomodel->numberofelements) || (cfsurfacesquare_weights_M_s[j]==iomodel->numberofelements+1)){
++						weight_vector_type=2;
++					}
++					else
++					 _error_("cfsurfacesquare weight size not supported yet");
++
++					/*First create a cfsurfacesquare object for that specific string (cfsurfacesquare_model_string_s[j]):*/
++					output_definitions->AddObject(new Cfsurfacesquare(cfsurfacesquare_name_s[j],StringToEnumx(cfsurfacesquare_definitionstring_s[j]),StringToEnumx(cfsurfacesquare_model_string_s[j]),StringToEnumx(cfsurfacesquare_observation_string_s[j]),StringToEnumx(cfsurfacesquare_weights_string_s[j]),cfsurfacesquare_datatime_s[j],false));
++
++					/*Now, for this particular cfsurfacesquare object, make sure we plug into the elements: the observation, and the weights.*/
++					for(int k=0;k<elements->Size();k++){
++
++						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
++						
++						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j], iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum);
++						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j], iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
++
++					}
++
++				}
++
++				/*Free ressources:*/
++				for(j=0;j<num_cfsurfacesquares;j++){
++					char* string=NULL;
++					IssmDouble* matrix = NULL;
++
++					string = cfsurfacesquare_definitionstring_s[j];		xDelete<char>(string);
++					string = cfsurfacesquare_observation_string_s[j];	xDelete<char>(string);
++					string = cfsurfacesquare_model_string_s[j];			xDelete<char>(string);
++					string = cfsurfacesquare_weights_string_s[j];		xDelete<char>(string);
++					string = cfsurfacesquare_name_s[j];    xDelete<char>(string);
++					matrix = cfsurfacesquare_observation_s[j]; xDelete<IssmDouble>(matrix);
++					matrix = cfsurfacesquare_weights_s[j]; xDelete<IssmDouble>(matrix);
++				}
++				xDelete<char*>(cfsurfacesquare_name_s);
++				xDelete<char*>(cfsurfacesquare_model_string_s);
++				xDelete<char*>(cfsurfacesquare_definitionstring_s);
++				xDelete<IssmDouble*>(cfsurfacesquare_observation_s);
++				xDelete<char*>(cfsurfacesquare_observation_string_s);
++				xDelete<int>(cfsurfacesquare_observation_M_s);
++				xDelete<int>(cfsurfacesquare_observation_N_s);
++				xDelete<IssmDouble*>(cfsurfacesquare_weights_s);
++				xDelete<int>(cfsurfacesquare_weights_M_s);
++				xDelete<int>(cfsurfacesquare_weights_N_s);
++				xDelete<char*>(cfsurfacesquare_weights_string_s);
++				xDelete<int>(cfsurfacesquare_datatime_s);
++				/*}}}*/
++			}
++			else if (output_definition_enums[i]==CfsurfacelogvelEnum){
++				/*Deal with cfsurfacelogvel: {{{*/
++				
++				/*cfsurfacelogvel variables: */
++				int          num_cfsurfacelogvels;
++				char**       cfsurfacelogvel_name						= NULL;    
++				char**		 cfsurfacelogvel_definitionstring		= NULL;    
++				IssmDouble** cfsurfacelogvel_vxobs			= NULL;
++				IssmDouble** cfsurfacelogvel_vyobs			= NULL;
++				char**		 cfsurfacelogvel_vxobs_string	= NULL;
++				char**		 cfsurfacelogvel_vyobs_string	= NULL;
++				int*         cfsurfacelogvel_observation_M			= NULL;
++				int*         cfsurfacelogvel_observation_N			= NULL;
++				IssmDouble** cfsurfacelogvel_weights					= NULL;
++				int*         cfsurfacelogvel_weights_M				= NULL;
++				int*         cfsurfacelogvel_weights_N				= NULL;
++				char**       cfsurfacelogvel_weightstring		= NULL;
++				int*				cfsurfacelogvel_datatime				= NULL;
++
++				/*Fetch name, modeltring, observation, observationtring, etc ... (see src/m/classes/cfsurfacelogvel.m): */
++				iomodel->FetchMultipleData(&cfsurfacelogvel_name,&num_cfsurfacelogvels,                                                        "md.cfsurfacelogvel.name");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_definitionstring,&num_cfsurfacelogvels,                                            "md.cfsurfacelogvel.definitionstring");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_vxobs,&cfsurfacelogvel_observation_M,&cfsurfacelogvel_observation_N,&num_cfsurfacelogvels, "md.cfsurfacelogvel.vxobs");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_vxobs_string,&num_cfsurfacelogvels,                                          "md.cfsurfacelogvel.vxobs_string");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_vyobs,&cfsurfacelogvel_observation_M,&cfsurfacelogvel_observation_N,&num_cfsurfacelogvels, "md.cfsurfacelogvel.vyobs");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_vyobs_string,&num_cfsurfacelogvels,                                          "md.cfsurfacelogvel.vyobs_string");			iomodel->FetchMultipleData(&cfsurfacelogvel_weights,&cfsurfacelogvel_weights_M,&cfsurfacelogvel_weights_N,&num_cfsurfacelogvels,             "md.cfsurfacelogvel.weights");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_weightstring,&num_cfsurfacelogvels,                                              "md.cfsurfacelogvel.weights_string");
++				_printf_("Num with weight string: "<<num_cfsurfacelogvels<<"\n");
++				iomodel->FetchMultipleData(&cfsurfacelogvel_datatime,&num_cfsurfacelogvels,																	 "md.cfsurfacelogvel.datatime");
++
++				for(j=0;j<num_cfsurfacelogvels;j++){
++
++					int obs_vector_type=0;
++					if ((cfsurfacelogvel_observation_M[j]==iomodel->numberofvertices) || (cfsurfacelogvel_observation_M[j]==iomodel->numberofvertices+1)){
++						obs_vector_type=1;
++					}
++					else if ((cfsurfacelogvel_observation_M[j]==iomodel->numberofelements) || (cfsurfacelogvel_observation_M[j]==iomodel->numberofelements+1)){
++						obs_vector_type=2;
++					}
++					else
++					 _error_("cfsurfacelogvel observation size not supported yet");
++
++					int weight_vector_type=0;
++					if ((cfsurfacelogvel_weights_M[j]==iomodel->numberofvertices) || (cfsurfacelogvel_weights_M[j]==iomodel->numberofvertices+1)){
++						weight_vector_type=1;
++					}
++					else if ((cfsurfacelogvel_weights_M[j]==iomodel->numberofelements) || (cfsurfacelogvel_weights_M[j]==iomodel->numberofelements+1)){
++						weight_vector_type=2;
++					}
++					else
++					 _error_("cfsurfacelogvel weight size not supported yet");
++
++					/*First create a cfsurfacelogvel object for that specific string (cfsurfacelogvel_modeltring[j]):*/
++					output_definitions->AddObject(new Cfsurfacelogvel(cfsurfacelogvel_name[j],StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_datatime[j],false));
++
++					/*Now, for this particular cfsurfacelogvel object, make sure we plug into the elements: the observation, and the weights.*/
++					for(int k=0;k<elements->Size();k++){
++
++						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
++						
++						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j], iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),7,VxObsEnum);
++							element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j], iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]),7,VyObsEnum);
++						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j], iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]),7,WeightsSurfaceObservationEnum);
++
++					}
++
++				}
++
++				/*Free ressources:*/
++				for(j=0;j<num_cfsurfacelogvels;j++){
++					char* string=NULL;
++					IssmDouble* matrix = NULL;
++
++					string = cfsurfacelogvel_definitionstring[j];		xDelete<char>(string);
++					string = cfsurfacelogvel_vxobs_string[j];	xDelete<char>(string);
++					string = cfsurfacelogvel_vyobs_string[j];	xDelete<char>(string);
++					string = cfsurfacelogvel_weightstring[j];		xDelete<char>(string);
++					string = cfsurfacelogvel_name[j];    xDelete<char>(string);
++					matrix = cfsurfacelogvel_weights[j]; xDelete<IssmDouble>(matrix);
++					matrix = cfsurfacelogvel_vxobs[j]; xDelete<IssmDouble>(matrix);
++					matrix = cfsurfacelogvel_vyobs[j]; xDelete<IssmDouble>(matrix);
++				}
++				xDelete<char*>(cfsurfacelogvel_name);
++				xDelete<char*>(cfsurfacelogvel_definitionstring);
++				xDelete<int>(cfsurfacelogvel_observation_M);
++				xDelete<IssmDouble*>(cfsurfacelogvel_vxobs);
++				xDelete<IssmDouble*>(cfsurfacelogvel_vyobs);
++				xDelete<char*>(cfsurfacelogvel_vxobs_string);
++				xDelete<char*>(cfsurfacelogvel_vyobs_string);
++				xDelete<int>(cfsurfacelogvel_observation_N);
++				xDelete<IssmDouble*>(cfsurfacelogvel_weights);
++				xDelete<int>(cfsurfacelogvel_weights_M);
++				xDelete<int>(cfsurfacelogvel_weights_N);
++				xDelete<char*>(cfsurfacelogvel_weightstring);
++				xDelete<int>(cfsurfacelogvel_datatime);
++				/*}}}*/
++			}
+ 			else if (output_definition_enums[i]==NodalvalueEnum){
+ 				/*Deal with nodal values: {{{*/
+ 				
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22507)
+@@ -0,0 +1,215 @@
++/*!\file Cfsurfacesquare.cpp
++ * \brief: Cfsurfacesquare Object
++ */
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./classes.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
++/*}}}*/
++		
++/*Cfsurfacesquare constructors, destructors :*/
++Cfsurfacesquare::Cfsurfacesquare(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->model_enum = UNDEF;
++	this->observation_enum = UNDEF;
++	this->weights_enum = UNDEF;
++	this->misfit=0;
++	this->lock=0;
++	this->datatime=0.;
++	this->timepassedflag = false;
++
++}
++/*}}}*/
++Cfsurfacesquare::Cfsurfacesquare(char* in_name, int in_definitionenum, int in_model_enum, int in_observation_enum, int in_weights_enum, IssmDouble in_datatime, bool in_timepassedflag){/*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	
++	this->name		= xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->model_enum=in_model_enum;
++	this->observation_enum=in_observation_enum;
++	this->weights_enum=in_weights_enum;
++	this->datatime=in_datatime;
++	this->timepassedflag=in_timepassedflag;
++	
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++Cfsurfacesquare::~Cfsurfacesquare(){/*{{{*/
++	if(this->name)xDelete(this->name);
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++/*Object virtual function resolutoin: */
++Object* Cfsurfacesquare::copy() {/*{{{*/
++	Cfsurfacesquare* mf = new Cfsurfacesquare(this->name,this->definitionenum, this->model_enum,this->observation_enum,this->weights_enum,this->datatime,this->timepassedflag);
++	mf->misfit=this->misfit;
++	mf->lock=this->lock;
++	return (Object*) mf;
++}
++/*}}}*/
++void Cfsurfacesquare::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Cfsurfacesquare::Echo(void){/*{{{*/
++	_printf_(" Cfsurfacesquare: " << name << " " << this->definitionenum << "\n");
++	_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
++	_printf_("    observation_enum: " << observation_enum << " " << EnumToStringx(observation_enum) << "\n");
++	_printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
++	_printf_("    datatime: " << datatime << "\n");
++	_printf_("	  timepassedflag: "<<timepassedflag<<"\n");
++}
++/*}}}*/
++int Cfsurfacesquare::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Cfsurfacesquare::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Cfsurfacesquare::ObjectEnum(void){/*{{{*/
++	return CfsurfacesquareEnum;
++}
++/*}}}*/
++/*Definition virtual function resolutoin: */
++int Cfsurfacesquare::DefinitionEnum(){/*{{{*/
++	return this->definitionenum;
++}
++/*}}}*/
++char* Cfsurfacesquare::Name(){/*{{{*/
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Cfsurfacesquare::Response(FemModel* femmodel){/*{{{*/
++		 
++	 /*diverse: */
++	 IssmDouble time;
++	 
++	 /*recover time parameters: */
++	 femmodel->parameters->FindParam(&time,TimeEnum);
++
++/*ELLEN UNFINISHED*/
++		 int i;
++		 IssmDouble J=0.;
++		 IssmDouble J_sum=0.;
++	
++	 if(datatime<=time && !timepassedflag){
++		 for(i=0;i<femmodel->elements->Size();i++){
++			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++			 J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum);
++		 }
++
++		 ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++		 J=J_sum;
++		
++		 timepassedflag = true;
++		 return J;
++		}
++	 else return J;
++ }
++	/*}}}*/
++IssmDouble Cfsurfacesquare::Cfsurfacesquare_Calculation(Element* element, int model_enum, int observation_enum, int weights_enum){/*{{{*/
++
++	int        domaintype,numcomponents;
++	IssmDouble Jelem=0.;
++	IssmDouble misfit,Jdet;
++	IssmDouble model,obs,weight;
++	IssmDouble* xyz_list = NULL;
++
++	/*Get basal element*/
++	if(!element->IsOnSurface()) return 0.;
++
++	/*If on water, return 0: */
++	if(!element->IsIceInElement()) return 0.;
++
++	/*Get problem dimension*/
++	element->FindParam(&domaintype,DomainTypeEnum);
++	switch(domaintype){
++		case Domain2DverticalEnum:   numcomponents   = 1; break;
++		case Domain3DEnum:           numcomponents   = 2; break;
++		case Domain2DhorizontalEnum: numcomponents   = 2; break;
++		default: _error_("not supported yet");
++	}
++
++	/*Spawn surface element*/
++	Element* topelement = element->SpawnTopElement();
++
++	/* Get node coordinates*/
++	topelement->GetVerticesCoordinates(&xyz_list);
++
++	/*Retrieve all inputs we will be needing: */
++
++	DatasetInput*    datasetinput = NULL;
++
++	/*Get input if it already exists*/
++	Input*  tempinput = topelement->GetInput(definitionenum);
++	
++	/*Cast it to a Datasetinput*/
++	if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do");
++	datasetinput = (DatasetInput*)tempinput;
++
++	Input* model_input=topelement->GetInput(model_enum);												_assert_(model_input);
++	//Input* observation_input=topelement->GetInput(observation_enum);								_assert_(observation_input);
++	//Input* weights_input     =topelement->GetInput(weights_enum);									_assert_(weights_input);
++
++	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=topelement->NewGauss(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		/* Get Jacobian determinant: */
++		topelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
++
++		/*Get all parameters at gaussian point*/
++		datasetinput->GetInputValue(&weight,gauss,WeightsSurfaceObservationEnum);
++		model_input->GetInputValue(&model,gauss);
++		datasetinput->GetInputValue(&obs,gauss,SurfaceObservationEnum);
++
++		/*Compute SurfaceAbsVelMisfitEnum:
++		 *        *
++		 *               *      1  [           2              2 ]
++		 *                      * J = --- | (u - u   )  +  (v - v   )  |
++		 *                             *      2  [       obs            obs   ]
++		 *                                    *
++		 *                                           */
++		misfit=0.5*(model-obs)*(model-obs);
++
++		/*Add to cost function*/
++		Jelem+=misfit*weight*Jdet*gauss->weight;
++	}
++
++	/*clean up and Return: */
++	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
++	xDelete<IssmDouble>(xyz_list);
++	delete gauss;
++	return Jelem;
++}/*}}}*/
++
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22506)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22507)
+@@ -1488,8 +1488,7 @@
+ void       Element::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){/*{{{*/
+     
+     /*Intermediaries*/
+-    int        i,t;
+-    IssmDouble time;
++    int i,t;
+     
+     /*Branch on type of vector: nodal or elementary: */
+     if(vector_type==1){ //nodal vector
+@@ -1604,6 +1603,181 @@
+     else _error_("Cannot add input for vector type " << vector_type << " (not supported)");
+ }
+ /*}}}*/
++void       Element::DatasetInputAdd(int enum_type,IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum){/*{{{*/
++    /*enum_type: the name of the DatasetInput (eg Outputdefinition1)
++	  * vector: information being stored (eg observations)
++	  * vector_type: is if by element or by vertex
++	  * vector_enum: is the name of the vector being stored
++	  * code: what type of data is in the vector (booleans, ints, doubles)
++	  */
++    
++	 /*Intermediaries*/
++    int					i,t;
++	 DatasetInput*		datasetinput = NULL;
++
++	 /*Get input if it already exists*/
++	 Input*  tempinput = GetInput(enum_type);
++	 if(tempinput){
++		 /*Cast it to a Datasetinput*/
++		 if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do");
++		 datasetinput = (DatasetInput*)tempinput;
++	 }
++	 else{
++		 datasetinput=new DatasetInput(enum_type);
++	   this->inputs->AddInput(datasetinput);
++	}
++
++
++    /*Branch on type of vector: nodal or elementary: */
++    if(vector_type==1){ //nodal vector
++        
++        int         numvertices = this->GetNumberOfVertices();
++        int        *vertexids   = xNew<int>(numvertices);
++        IssmDouble *values      = xNew<IssmDouble>(numvertices);
++        
++        /*Recover vertices ids needed to initialize inputs*/
++        _assert_(iomodel->elements);
++        for(i=0;i<numvertices;i++){
++            vertexids[i]=reCast<int>(iomodel->elements[numvertices*this->Sid()+i]); //ids for vertices are in the elements array from Matlab
++        }
++        
++        /*Are we in transient or static? */
++		  if(M==1){
++			  values[0]=vector[0];
++				switch(this->ObjectEnum()){
++                    case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P0Enum),input_enum); break;
++                    case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P0Enum),input_enum); break;
++                    case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P0Enum),input_enum); break;
++                    default: _error_("Not implemented yet");
++				} 
++		  }
++		  else if(M==iomodel->numberofvertices){
++            for(i=0;i<numvertices;i++) values[i]=vector[vertexids[i]-1];
++				switch(this->ObjectEnum()){
++                    case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P1Enum),input_enum); break;
++                    case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P1Enum),input_enum); break;
++                    case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P1Enum),input_enum); break;
++                    default: _error_("Not implemented yet");
++				}  }
++        else if(M==iomodel->numberofvertices+1){
++            /*create transient input: */
++            IssmDouble* times = xNew<IssmDouble>(N);
++            for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
++            TransientInput* transientinput=new TransientInput(vector_enum,times,N);
++            for(t=0;t<N;t++){
++                for(i=0;i<numvertices;i++) values[i]=vector[N*(vertexids[i]-1)+t];
++                switch(this->ObjectEnum()){
++                    case TriaEnum:  transientinput->AddTimeInput(new TriaInput( vector_enum,values,P1Enum)); break;
++                    case PentaEnum: transientinput->AddTimeInput(new PentaInput(vector_enum,values,P1Enum)); break;
++                    case TetraEnum: transientinput->AddTimeInput(new TetraInput(vector_enum,values,P1Enum)); break;
++                    default: _error_("Not implemented yet");
++                }
++            }
++            datasetinput->AddInput(transientinput,input_enum);
++            xDelete<IssmDouble>(times);
++        }
++        else if(M==iomodel->numberofelements){
++
++			  /*This is a Patch!*/
++			  xDelete<IssmDouble>(values);
++			  values = xNew<IssmDouble>(N);
++			  for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j];
++
++			  if     (N==this->GetNumberOfNodes(P1Enum)   ){
++				  switch(this->ObjectEnum()){
++					  case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P1Enum),input_enum); break;
++					  case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P1Enum),input_enum); break;
++					  case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P1Enum),input_enum); break;
++					  default: _error_("Not implemented yet");
++				  }
++			  }
++			  else if(N==this->GetNumberOfNodes(P0Enum)   ){
++				  switch(this->ObjectEnum()){
++					  case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P0Enum),input_enum); break;
++					  case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P0Enum),input_enum); break;
++					  case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P0Enum),input_enum); break;
++					  default: _error_("Not implemented yet");
++				  }	  
++			  }
++			  else if(N==this->GetNumberOfNodes(P1xP2Enum)){
++				  switch(this->ObjectEnum()){
++					  case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P1xP2Enum),input_enum); break;
++					  case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P1xP2Enum),input_enum); break;
++					  case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P1xP2Enum),input_enum); break;
++					  default: _error_("Not implemented yet");
++				  }
++			  }
++			  else if(N==this->GetNumberOfNodes(P1xP3Enum)) {
++				 switch(this->ObjectEnum()){
++					  case TriaEnum:  datasetinput->AddInput(new TriaInput(vector_enum,values,P1xP3Enum),input_enum); break;
++					  case PentaEnum: datasetinput->AddInput(new PentaInput(vector_enum,values,P1xP3Enum),input_enum); break;
++					  case TetraEnum: datasetinput->AddInput(new TetraInput(vector_enum,values,P1xP3Enum),input_enum); break;
++					  default: _error_("Not implemented yet");
++				  }
++			  }
++			  else _error_("Patch interpolation not supported yet");
++
++		  }
++		  else{
++			  _error_("nodal vector is either numberofvertices or numberofvertices+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++		  }
++        
++        xDelete<IssmDouble>(values);
++        xDelete<int>(vertexids);
++    }
++    else if(vector_type==2){ //element vector
++        
++        IssmDouble value;
++        
++        /*Are we in transient or static? */
++        if(M==iomodel->numberofelements){
++            if (code==5){ //boolean
++                datasetinput->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[this->Sid()])),input_enum);
++            }
++            else if (code==6){ //integer
++                datasetinput->AddInput(new IntInput(vector_enum,reCast<int>(vector[this->Sid()])),input_enum);
++            }
++            else if (code==7){ //IssmDouble
++                datasetinput->AddInput(new DoubleInput(vector_enum,vector[this->Sid()]),input_enum);
++            }
++            else _error_("could not recognize nature of vector from code " << code);
++        }
++        else if(M==iomodel->numberofelements+1){
++            /*create transient input: */
++            IssmDouble* times = xNew<IssmDouble>(N);
++            for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
++            TransientInput* transientinput=new TransientInput(vector_enum,times,N);
++            TriaInput* bof=NULL;
++            for(t=0;t<N;t++){
++                value=vector[N*this->Sid()+t];
++                switch(this->ObjectEnum()){
++                    case TriaEnum:  transientinput->AddTimeInput(new TriaInput( vector_enum,&value,P0Enum)); break;
++                    case PentaEnum: transientinput->AddTimeInput(new PentaInput(vector_enum,&value,P0Enum)); break;
++                    case TetraEnum: transientinput->AddTimeInput(new TetraInput(vector_enum,&value,P0Enum)); break;
++                    default: _error_("Not implemented yet");
++                }
++            }
++            datasetinput->AddInput(transientinput,input_enum);
++            xDelete<IssmDouble>(times);
++        }
++        else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++    }
++    else if(vector_type==3){ //element vector
++        
++        /*For right now we are static */
++        if(M==iomodel->numberofelements){
++            /*create transient input: */
++            IssmDouble* layers = xNewZeroInit<IssmDouble>(N);;
++            for(t=0;t<N;t++) layers[t] = vector[N*this->Sid()+t];
++            DoubleArrayInput* arrayinput=new DoubleArrayInput(vector_enum,layers,N);
++            datasetinput->AddInput(arrayinput,input_enum);
++            xDelete<IssmDouble>(layers);
++        }
++        else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++    }
++    else _error_("Cannot add input for vector type " << vector_type << " (not supported)");
++}
++/*}}}*/
+ void       Element::InputDuplicate(int original_enum,int new_enum){/*{{{*/
+ 
+ 	if(!IsInput(original_enum)) _error_("Enum "<<EnumToStringx(original_enum)<<" is not in IsInput");
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22506)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22507)
+@@ -121,6 +121,7 @@
+ 		int                Id();
+ 		void               InputChangeName(int enum_type,int enum_type_old);
+ 		void               InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
++		void					 DatasetInputAdd(int enum_type,IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum);
+ 		void               InputDuplicate(int original_enum,int new_enum);
+ 		void               InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void               InputUpdateFromConstant(int constant, int name);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22507-22508.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22507-22508.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22507-22508.diff	(revision 22755)
@@ -0,0 +1,217 @@
+Index: ../trunk-jpl/src/m/classes/cfsurfacelogvel.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/cfsurfacelogvel.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/cfsurfacelogvel.m	(revision 22508)
+@@ -0,0 +1,104 @@
++%MISFIT class definition
++%
++%   Usage:
++%      cfsurfacelogvel=cfsurfacelogvel();
++%      cfsurfacelogvel=cfsurfacelogvel('name','SurfaceAltimetry',...
++%                    'definitionstring','Outputdefinition1',... 
++%                    'observation_string','SurfaceObservations',...
++%                    'observation',md.geometry.surface,...
++%                    'weights',ones(md.mesh.numberofvertices,1),...
++%                    'weights_string','WeightsSurfaceObservations',...
++%							'datatime',time);
++%
++%
++
++classdef cfsurfacelogvel
++	properties (SetAccess=public)
++		%cfsurfacelogvel
++		name               = '';
++		definitionstring   = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
++		vxobs					 = NaN; %observed field that we compare the model against
++		vxobs_string		 = ''; %string for observed field.
++		vyobs			       = NaN; %observed field that we compare the model against
++		vyobs_string		 = ''; %string for observed field.
++		weights            = NaN; %weight coefficients for every vertex
++		weights_string     = ''; %string to identify this particular set of weights
++		datatime				 = 0; %time in years from start that the data is from 
++		cumulated          = NaN; %do we cumulate cfsurfacelogvel through time?
++	end
++	
++	methods
++		function self = extrude(self,md) % {{{
++			if ~isnan(self.weights)
++				self.weights=project3d(md,'vector',self.weights,'type','node');
++			end
++			if ~isnan(self.vxobs)
++				self.vxobs=project3d(md,'vector',self.vxobs,'type','node');
++			end
++		end % }}}
++		function self = cfsurfacelogvel(varargin) % {{{
++			if nargin==0,
++				self=setdefaultparameters(self);
++			else
++				%use provided options to change fields
++				options=pairoptions(varargin{:});
++
++				%get name
++				self.name=getfieldvalue(options,'name','');
++				self.definitionstring=getfieldvalue(options,'definitionstring');
++				self.vxobs=getfieldvalue(options,'vxobs',NaN);
++				self.vyobs=getfieldvalue(options,'vyobs',NaN);
++				self.vxobs_string=getfieldvalue(options,'vxobs_string');			
++				self.vyobs_string=getfieldvalue(options,'vyobs_string');
++				self.weights=getfieldvalue(options,'weights',NaN);
++				self.weights_string=getfieldvalue(options,'weights_string','');
++				self.datatime = getfieldvalue(options, 'datatime');
++
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++			self.datatime = 0;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			if ~ischar(self.name),
++				error('cfsurfacelogvel error message: ''name'' field should be a string!');
++			end
++			OutputdefinitionStringArray={};
++			for i=1:100
++				OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
++			end
++			md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
++
++			md = checkfield(md,'fieldname','self.vxobs','field',self.vxobs,'timeseries',1,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','self.datatime','field',self.datatime,'<=',md.timestepping.final_time);
++
++		end % }}}
++		function md = disp(self) % {{{
++		
++			disp(sprintf('   TimeMisfit:\n'));
++
++			fielddisplay(self,'name','identifier for this cfsurfacelogvel response');
++			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10]''');
++			fielddisplay(self,'vxobs','observed field that we compare the model against');
++			fielddisplay(self,'vxobs_string','observation string');
++			fielddisplay(self,'weights','weights (at vertices) to apply to the cfsurfacelogvel');
++			fielddisplay(self,'weights_string','string for weights for identification purposes');
++			fielddisplay(self,'datatime','time to compare data to model for misfit');
++
++		end % }}}
++		function md = marshall(self,prefix,md,fid) % {{{
++
++		WriteData(fid,prefix,'data',self.name,'name','md.cfsurfacelogvel.name','format','String');
++		WriteData(fid,prefix,'data',self.definitionstring,'name','md.cfsurfacelogvel.definitionstring','format','String');
++		WriteData(fid,prefix,'data',self.vxobs,'name','md.cfsurfacelogvel.vxobs','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'data',self.vxobs_string,'name','md.cfsurfacelogvel.vxobs_string','format','String');
++		WriteData(fid,prefix,'data',self.vyobs,'name','md.cfsurfacelogvel.vyobs','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'data',self.vyobs_string,'name','md.cfsurfacelogvel.vyobs_string','format','String');
++		WriteData(fid,prefix,'data',self.weights,'name','md.cfsurfacelogvel.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'data',self.weights_string,'name','md.cfsurfacelogvel.weights_string','format','String');
++		WriteData(fid,prefix,'data',round(self.datatime*md.constants.yts),'name','md.cfsurfacelogvel.datatime','format','Integer');
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/cfsurfacesquare.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/cfsurfacesquare.m	(nonexistent)
++++ ../trunk-jpl/src/m/classes/cfsurfacesquare.m	(revision 22508)
+@@ -0,0 +1,103 @@
++%MISFIT class definition
++%
++%   Usage:
++%      cfsurfacesquare=cfsurfacesquare();
++%      cfsurfacesquare=cfsurfacesquare('name','SurfaceAltimetry',...
++%                    'definitionstring','Outputdefinition1',... 
++%							'model_string','Surface',...
++%                    'observation_string','SurfaceObservations',...
++%                    'observation',md.geometry.surface,...
++%                    'weights',ones(md.mesh.numberofvertices,1),...
++%                    'weights_string','WeightsSurfaceObservations',...
++%							'datatime',time);
++%
++%
++
++classdef cfsurfacesquare
++	properties (SetAccess=public)
++		%cfsurfacesquare
++		name               = '';
++		definitionstring   = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
++		model_string       = ''; %string for field that is modeled
++		observation        = NaN; %observed field that we compare the model against
++		observation_string = ''; %string for observed field.
++		weights            = NaN; %weight coefficients for every vertex
++		weights_string     = ''; %string to identify this particular set of weights
++		datatime				 = 0; %time in years from start that the data is from 
++		cumulated          = NaN; %do we cumulate cfsurfacesquare through time?
++	end
++	
++	methods
++		function self = extrude(self,md) % {{{
++			if ~isnan(self.weights)
++				self.weights=project3d(md,'vector',self.weights,'type','node');
++			end
++			if ~isnan(self.observation)
++				self.observation=project3d(md,'vector',self.observation,'type','node');
++			end
++		end % }}}
++		function self = cfsurfacesquare(varargin) % {{{
++			if nargin==0,
++				self=setdefaultparameters(self);
++			else
++				%use provided options to change fields
++				options=pairoptions(varargin{:});
++
++				%get name
++				self.name=getfieldvalue(options,'name','');
++				self.definitionstring=getfieldvalue(options,'definitionstring');
++				self.model_string=getfieldvalue(options,'model_string');
++				self.observation=getfieldvalue(options,'observation',NaN);
++				self.observation_string=getfieldvalue(options,'observation_string');
++				self.weights=getfieldvalue(options,'weights',NaN);
++				self.weights_string=getfieldvalue(options,'weights_string','');
++				self.datatime = getfieldvalue(options, 'datatime');
++
++			end
++		end % }}}
++		function self = setdefaultparameters(self) % {{{
++			self.datatime = 0;
++		end % }}}
++		function md = checkconsistency(self,md,solution,analyses) % {{{
++
++			if ~ischar(self.name),
++				error('cfsurfacesquare error message: ''name'' field should be a string!');
++			end
++			OutputdefinitionStringArray={};
++			for i=1:100
++				OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
++			end
++			md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
++
++			md = checkfield(md,'fieldname','self.observation','field',self.observation,'timeseries',1,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1,'Inf',1);
++			md = checkfield(md,'fieldname','self.datatime','field',self.datatime,'<=',md.timestepping.final_time);
++
++		end % }}}
++		function md = disp(self) % {{{
++		
++			disp(sprintf('   TimeMisfit:\n'));
++
++			fielddisplay(self,'name','identifier for this cfsurfacesquare response');
++			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10]''');
++			fielddisplay(self,'model_string','string for field that is modeled');
++			fielddisplay(self,'observation','observed field that we compare the model against');
++			fielddisplay(self,'observation_string','observation string');
++			fielddisplay(self,'weights','weights (at vertices) to apply to the cfsurfacesquare');
++			fielddisplay(self,'weights_string','string for weights for identification purposes');
++			fielddisplay(self,'datatime','time to compare data to model for misfit');
++
++		end % }}}
++		function md = marshall(self,prefix,md,fid) % {{{
++
++		WriteData(fid,prefix,'data',self.name,'name','md.cfsurfacesquare.name','format','String');
++		WriteData(fid,prefix,'data',self.definitionstring,'name','md.cfsurfacesquare.definitionstring','format','String');
++		WriteData(fid,prefix,'data',self.model_string,'name','md.cfsurfacesquare.model_string','format','String');
++		WriteData(fid,prefix,'data',self.observation,'name','md.cfsurfacesquare.observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'data',self.observation_string,'name','md.cfsurfacesquare.observation_string','format','String');
++		WriteData(fid,prefix,'data',self.weights,'name','md.cfsurfacesquare.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
++		WriteData(fid,prefix,'data',self.weights_string,'name','md.cfsurfacesquare.weights_string','format','String');
++		WriteData(fid,prefix,'data',round(self.datatime*md.constants.yts),'name','md.cfsurfacesquare.datatime','format','Integer');
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22508-22509.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22508-22509.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22508-22509.diff	(revision 22755)
@@ -0,0 +1,105 @@
+Index: ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh	(revision 22508)
++++ ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh	(nonexistent)
+@@ -1,24 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf install valgrind-3.10.0
+-mkdir install
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.10.0.tar.bz2' 'valgrind-3.10.0.tar.bz2'
+-
+-#Untar 
+-tar -jxvf  valgrind-3.10.0.tar.bz2
+-
+-#Move valgrind into install directory
+-mv valgrind-3.10.0/* install
+-rm -rf valgrind-3.10.0
+-
+-#configure
+-cd install
+-./configure  --prefix="$ISSM_DIR/externalpackages/valgrind/install" --enable-only32bit
+-
+-#Compile valgrind
+-make  -j 4
+-make install
+
+Property changes on: ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh
+___________________________________________________________________
+Deleted: svn:executable
+## -1 +0,0 ##
+-*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/valgrind/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-linux64.sh	(revision 22508)
++++ ../trunk-jpl/externalpackages/valgrind/install-linux64.sh	(revision 22509)
+@@ -2,27 +2,20 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.10.0
+-mkdir install
++rm -rf install 
+ 
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.10.0.tar.bz2' 'valgrind-3.10.0.tar.bz2'
++#Download development version
++git clone git://sourceware.org/git/valgrind.git install
+ 
+-#Untar 
+-tar -jxvf  valgrind-3.10.0.tar.bz2
+-
+-#Move valgrind into install directory
+-mv valgrind-3.10.0/* install
+-rm -rf valgrind-3.10.0
+-
+ #configure
+ cd install
+-./configure  --prefix="$ISSM_DIR/externalpackages/valgrind/install"
++./autogen.sh
++./configure  --prefix="$ISSM_DIR/externalpackages/valgrind/install" --enable-only64bit
+ 
+ #Compile valgrind
+-make  -j 4
+-make install
+-
+-#final thing: if mpi is compiled in, soft link its target to a simpler name
+-cd lib
+-ln -s valgrind/libmpiwrap-*  ./libmpidebug.so
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install 
+Index: ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 22508)
++++ ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 22509)
+@@ -5,7 +5,7 @@
+ rm -rf install
+ 
+ #Download development version, the current release never supports the latest OS X releases
+-svn co svn://svn.valgrind.org/valgrind/trunk install
++git clone git://sourceware.org/git/valgrind.git install
+ 
+ #configure
+ cd install
+@@ -13,6 +13,9 @@
+ ./configure  --prefix="$ISSM_DIR/externalpackages/valgrind/install" --enable-only64bit
+ 
+ #Compile valgrind
+-
+-make  -j 8
+-make install
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22509-22510.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22509-22510.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22509-22510.diff	(revision 22755)
@@ -0,0 +1,142 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22509)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22510)
+@@ -2335,9 +2335,8 @@
+ 	int numdof   = numnodes*(dim-1);
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke = element->NewElementMatrix(HOApproximationEnum);
+-	IssmDouble*    B  = xNew<IssmDouble>((dim-1)*numdof);
+-	IssmDouble*    D  = xNewZeroInit<IssmDouble>((dim-1)*(dim-1));
++	ElementMatrix* Ke     = element->NewElementMatrix(HOApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinatesBase(&xyz_list_base);
+@@ -2369,14 +2368,24 @@
+ 			if(gllevelset<0.) alpha2=0.;
+ 		}
+ 
+-		this->GetBHOFriction(B,element,dim,xyz_list_base,gauss);
+ 		element->JacobianDeterminantBase(&Jdet,xyz_list_base,gauss);
+-		for(int i=0;i<dim-1;i++) D[i*(dim-1)+i]=alpha2*gauss->weight*Jdet;
++		element->NodalFunctions(basis,gauss);
+ 
+-		TripleMultiply(B,dim-1,numdof,1,
+-					D,dim-1,dim-1,0,
+-					B,dim-1,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==3){
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[2*i*2*numnodes+2*j]       += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++				}
++			}
++		}
++		else{
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++				}
++			}
++		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -2386,8 +2395,7 @@
+ 	delete gauss;
+ 	delete friction;
+ 	xDelete<IssmDouble>(xyz_list_base);
+-	xDelete<IssmDouble>(B);
+-	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(basis);
+ 	return Ke;
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOViscous(Element* element){/*{{{*/
+@@ -2399,13 +2407,10 @@
+ 	int         dim,bsize;
+ 	IssmDouble  viscosity,newviscosity,oldviscosity;
+ 	IssmDouble  viscosity_overshoot,thickness,Jdet;
+-	IssmDouble  D_scalar;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Get problem dimension*/
+ 	element->FindParam(&dim,DomainDimensionEnum);
+-	if(dim==2) bsize = 2;
+-	else       bsize = 5;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = element->GetNumberOfNodes();
+@@ -2413,9 +2418,7 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = element->NewElementMatrix(HOApproximationEnum);
+-	IssmDouble*    B      = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    Bprime = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    D      = xNewZeroInit<IssmDouble>(bsize*bsize);
++	IssmDouble*    dbasis = xNew<IssmDouble>(dim*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -2435,20 +2438,39 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		this->GetBHO(B,element,dim,xyz_list,gauss);
+-		this->GetBHOprime(Bprime,element,dim,xyz_list,gauss);
+-
++		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->material->ViscosityHO(&viscosity,dim,xyz_list,gauss,vx_input,vy_input);
+ 		element->material->ViscosityHO(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input);
+ 
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+-		D_scalar=2.*newviscosity*gauss->weight*Jdet;
+-		for(int i=0;i<bsize;i++) D[i*bsize+i]=D_scalar;
+ 
+-		TripleMultiply(B,bsize,numdof,1,
+-					D,bsize,bsize,0,
+-					Bprime,bsize,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==3){
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*(
++								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
++								);
++					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*(
++								2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
++								);
++					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*(
++								2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
++								);
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*(
++								dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
++								);
++				}
++			}
++		}
++		else{
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += gauss->weight*Jdet*newviscosity*(
++								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
++								);
++				}
++			}
++		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -2457,9 +2479,7 @@
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(D);
+-	xDelete<IssmDouble>(Bprime);
+-	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(dbasis);
+ 	return Ke;
+ }/*}}}*/
+ #ifdef FSANALYTICAL
Index: /issm/oecreview/Archive/21724-22754/ISSM-22510-22511.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22510-22511.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22510-22511.diff	(revision 22755)
@@ -0,0 +1,248 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22510)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22511)
+@@ -241,7 +241,7 @@
+ ElementMatrix* StressbalanceVerticalAnalysis::CreateKMatrixVolume(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries*/
+-	IssmDouble  D,Jdet;
++	IssmDouble  Jdet;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -249,8 +249,8 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = element->NewElementMatrix(NoneApproximationEnum);
+-	IssmDouble*    B      = xNew<IssmDouble>(numnodes);
+-	IssmDouble*    Bprime = xNew<IssmDouble>(numnodes);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    dbasis = xNew<IssmDouble>(3*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -261,21 +261,23 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		this->GetB(B,element,xyz_list,gauss);
+-		this->GetBprime(Bprime,element,xyz_list,gauss);
+-		D=gauss->weight*Jdet;
++		element->NodalFunctions(basis,gauss);
++		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+-		TripleMultiply(B,1,numnodes,1,
+-					&D,1,1,0,
+-					Bprime,1,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
++							basis[j]*dbasis[2*numnodes+i]
++							);
++			}
++		}
+ 	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(Bprime);
+-	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(dbasis);
++	xDelete<IssmDouble>(basis);
+ 	return Ke;
+ 
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22510)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 22511)
+@@ -568,9 +568,7 @@
+ 	ElementMatrix* Ke       = element->NewElementMatrix();
+ 	IssmDouble*    basis    = xNew<IssmDouble>(numnodes);
+ 	IssmDouble*    dbasis   = xNew<IssmDouble>(3*numnodes);
+-	IssmDouble*    B        = xNew<IssmDouble>(3*numnodes);
+ 	IssmDouble*    Bprime   = xNew<IssmDouble>(3*numnodes);
+-	IssmDouble     D[3][3]  = {0.};
+ 	IssmDouble     K[3][3];
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -599,41 +597,41 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++		element->NodalFunctions(basis,gauss);
++		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 		D_scalar=gauss->weight*Jdet;
+ 		if(dt!=0.) D_scalar=D_scalar*dt;
+ 
+ 		/*Conduction: */
+-		GetBConduct(B,element,xyz_list,gauss); 
+-		D[0][0]=D_scalar*kappa/rho_ice;
+-		D[1][1]=D_scalar*kappa/rho_ice;
+-		D[2][2]=D_scalar*kappa/rho_ice;
+-		TripleMultiply(B,3,numnodes,1,
+-					&D[0][0],3,3,0,
+-					B,3,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += D_scalar*kappa/rho_ice*(
++							dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
++							);
++			}
++		}
+ 
+ 		/*Advection: */
+-		GetBAdvec(B,element,xyz_list,gauss); 
+-		GetBAdvecprime(Bprime,element,xyz_list,gauss); 
+ 		vx_input->GetInputValue(&u,gauss); vxm_input->GetInputValue(&um,gauss); vx=u-um;
+ 		vy_input->GetInputValue(&v,gauss); vym_input->GetInputValue(&vm,gauss); vy=v-vm;
+ 		vz_input->GetInputValue(&w,gauss); vzm_input->GetInputValue(&wm,gauss); vz=w-wm;
+-		D[0][0]=D_scalar*vx;
+-		D[1][1]=D_scalar*vy;
+-		D[2][2]=D_scalar*vz;
+-		TripleMultiply(B,3,numnodes,1,
+-					&D[0][0],3,3,0,
+-					Bprime,3,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += D_scalar*(
++							vx*dbasis[0*numnodes+j]*basis[i] + vy*dbasis[1*numnodes+j]*basis[i] +vz*dbasis[2*numnodes+j]*basis[i]
++							);
++			}
++		}
+ 
+ 		/*Transient: */
+ 		if(dt!=0.){
+ 			D_scalar=gauss->weight*Jdet;
+-			element->NodalFunctions(basis,gauss);
+-			TripleMultiply(basis,numnodes,1,0,
+-						&D_scalar,1,1,0,
+-						basis,1,numnodes,0,
+-						&Ke->values[0],1);
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i];
++				}
++			}
+ 			D_scalar=D_scalar*dt;
+ 		}
+ 
+@@ -677,7 +675,6 @@
+ 	xDelete<IssmDouble>(xyz_list);
+ 	xDelete<IssmDouble>(basis);
+ 	xDelete<IssmDouble>(dbasis);
+-	xDelete<IssmDouble>(B);
+ 	xDelete<IssmDouble>(Bprime);
+ 	delete gauss;
+ 	return Ke;
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22510)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22511)
+@@ -367,9 +367,8 @@
+ 	/*Intermediaries */
+ 	int         stabilization;
+ 	IssmDouble  Jdet,dt,u,v,w,um,vm,wm,vel;
+-	IssmDouble  h,hx,hy,hz,vx,vy,vz;
++	IssmDouble  h,hx,hy,hz,vx,vy,vz,D_scalar;
+ 	IssmDouble  tau_parameter,diameter;
+-	IssmDouble  D_scalar;
+ 	IssmDouble* xyz_list = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -379,9 +378,7 @@
+ 	ElementMatrix* Ke     = element->NewElementMatrix();
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 	IssmDouble*    dbasis = xNew<IssmDouble>(3*numnodes);
+-	IssmDouble*    B      = xNew<IssmDouble>(3*numnodes);
+ 	IssmDouble*    Bprime = xNew<IssmDouble>(3*numnodes);
+-	IssmDouble     D[3][3]={0.};
+ 	IssmDouble     K[3][3];
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -408,41 +405,41 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
++		element->NodalFunctions(basis,gauss);
++		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 		D_scalar=gauss->weight*Jdet;
+ 		if(dt!=0.) D_scalar=D_scalar*dt;
+ 
+ 		/*Conduction: */
+-		GetBConduct(B,element,xyz_list,gauss); 
+-		D[0][0]=D_scalar*kappa;
+-		D[1][1]=D_scalar*kappa;
+-		D[2][2]=D_scalar*kappa;
+-		TripleMultiply(B,3,numnodes,1,
+-					&D[0][0],3,3,0,
+-					B,3,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += D_scalar*kappa*(
++							dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
++							);
++			}
++		}
+ 
+ 		/*Advection: */
+-		GetBAdvec(B,element,xyz_list,gauss); 
+-		GetBAdvecprime(Bprime,element,xyz_list,gauss); 
+ 		vx_input->GetInputValue(&u,gauss); vxm_input->GetInputValue(&um,gauss); vx=u-um;
+ 		vy_input->GetInputValue(&v,gauss); vym_input->GetInputValue(&vm,gauss); vy=v-vm;
+ 		vz_input->GetInputValue(&w,gauss); vzm_input->GetInputValue(&wm,gauss); vz=w-wm;
+-		D[0][0]=D_scalar*vx;
+-		D[1][1]=D_scalar*vy;
+-		D[2][2]=D_scalar*vz;
+-		TripleMultiply(B,3,numnodes,1,
+-					&D[0][0],3,3,0,
+-					Bprime,3,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += D_scalar*(
++							vx*dbasis[0*numnodes+j]*basis[i] + vy*dbasis[1*numnodes+j]*basis[i] +vz*dbasis[2*numnodes+j]*basis[i]
++							);
++			}
++		}
+ 
+ 		/*Transient: */
+ 		if(dt!=0.){
+ 			D_scalar=gauss->weight*Jdet;
+-			element->NodalFunctions(basis,gauss);
+-			TripleMultiply(basis,numnodes,1,0,
+-						&D_scalar,1,1,0,
+-						basis,1,numnodes,0,
+-						&Ke->values[0],1);
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i];
++				}
++			}
+ 			D_scalar=D_scalar*dt;
+ 		}
+ 
+@@ -455,7 +452,6 @@
+ 			K[1][0]=h/(2.*vel)*fabs(vy*vx);  K[1][1]=h/(2.*vel)*fabs(vy*vy); K[1][2]=h/(2.*vel)*fabs(vy*vz);
+ 			K[2][0]=h/(2.*vel)*fabs(vz*vx);  K[2][1]=h/(2.*vel)*fabs(vz*vy); K[2][2]=h/(2.*vel)*fabs(vz*vz);
+ 			for(int i=0;i<3;i++) for(int j=0;j<3;j++) K[i][j] = D_scalar*K[i][j];
+-
+ 			GetBAdvecprime(Bprime,element,xyz_list,gauss); 
+ 
+ 			TripleMultiply(Bprime,3,numnodes,1,
+@@ -485,7 +481,6 @@
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(B);
+ 	xDelete<IssmDouble>(Bprime);
+ 	xDelete<IssmDouble>(basis);
+ 	xDelete<IssmDouble>(dbasis);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22511-22512.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22511-22512.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22511-22512.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive437.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22512-22513.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22512-22513.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22512-22513.diff	(revision 22755)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22512)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22513)
+@@ -1306,8 +1306,7 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke = element->NewElementMatrix(SSAApproximationEnum);
+-	IssmDouble*    B  = xNew<IssmDouble>(dim*numdof);
+-	IssmDouble*    D  = xNewZeroInit<IssmDouble>(dim*dim);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -1340,14 +1339,24 @@
+ 			if(gllevelset<0.) alpha2=0.;
+ 		}
+ 
+-		this->GetBSSAFriction(B,element,dim,xyz_list,gauss);
++		element->NodalFunctions(basis,gauss);
+ 		element->JacobianDeterminant(&Jdet, xyz_list,gauss);
+-		for(int i=0;i<dim;i++) D[i*dim+i]=alpha2*gauss->weight*Jdet;
+ 
+-		TripleMultiply(B,dim,numdof,1,
+-					D,dim,dim,0,
+-					B,dim,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==2){
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[2*i*2*numnodes+2*j]       += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++				}
++			}
++		}
++		else{
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += alpha2*gauss->weight*Jdet*basis[i]*basis[j];
++				}
++			}
++		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -1357,8 +1366,7 @@
+ 	delete gauss;
+ 	delete friction;
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(B);
+-	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(basis);
+ 	return Ke;
+ }/*}}}*/
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSALateralFriction(Element* element){/*{{{*/
+@@ -1433,18 +1441,17 @@
+ 	if(!element->IsIceInElement()) return NULL;
+ 
+ 	/*Intermediaries*/
+-	int         dim,domaintype,bsize;
++	int         dim,domaintype;
+ 	IssmDouble  viscosity,newviscosity,oldviscosity;
+ 	IssmDouble  viscosity_overshoot,thickness,Jdet;
+-	IssmDouble  D_scalar;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Get problem dimension*/
+ 	element->FindParam(&domaintype,DomainTypeEnum);
+ 	switch(domaintype){
+-		case Domain2DverticalEnum:   dim = 1; bsize = 1; break;
+-		case Domain2DhorizontalEnum: dim = 2; bsize = 3; break;
+-		case Domain3DEnum:           dim = 2; bsize = 3; break;
++		case Domain2DverticalEnum:   dim = 1; break;
++		case Domain2DhorizontalEnum: dim = 2; break;
++		case Domain3DEnum:           dim = 2; break;
+ 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
+ 	}
+ 
+@@ -1454,9 +1461,7 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = element->NewElementMatrix(SSAApproximationEnum);
+-	IssmDouble*    B      = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    Bprime = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    D      = xNewZeroInit<IssmDouble>(bsize*bsize);
++	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -1477,21 +1482,40 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		this->GetBSSA(B,element,dim,xyz_list,gauss);
+-		this->GetBSSAprime(Bprime,element,dim,xyz_list,gauss);
++		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
++		thickness_input->GetInputValue(&thickness, gauss);
+ 		element->material->ViscositySSA(&viscosity,dim,xyz_list,gauss,vx_input,vy_input);
+ 		element->material->ViscositySSA(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input);
+-		thickness_input->GetInputValue(&thickness, gauss);
+-
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+-		D_scalar=2.*newviscosity*thickness*gauss->weight*Jdet;
+-		for(int i=0;i<bsize;i++) D[i*bsize+i]=D_scalar;
+ 
+-		TripleMultiply(B,bsize,numdof,1,
+-					D,bsize,bsize,0,
+-					Bprime,bsize,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==2){
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*(
++								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
++								);
++					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*(
++								2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
++								);
++					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*(
++								2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
++								);
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*(
++								dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
++								);
++				}
++			}
++		}
++		else{
++			for(int i=0;i<numnodes;i++){
++				for(int j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += gauss->weight*Jdet*newviscosity*thickness*(
++								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
++								);
++				}
++			}
++		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -1500,9 +1524,7 @@
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(D);
+-	xDelete<IssmDouble>(Bprime);
+-	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(dbasis);
+ 	return Ke;
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorSSA(Element* element){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22513-22514.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22513-22514.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22513-22514.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 22513)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 22514)
+@@ -53,7 +53,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={...
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,...
+-	3e-11,3e-11,9e-10,7e-11,6e-09,1e-07,1e-09,1e-10,1e-13,...
++	3e-11,3e-11,9e-10,7e-11,6e-09,2e-07,1e-09,1e-10,1e-13,...
+ 	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+Index: ../trunk-jpl/test/NightlyRun/test339.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test339.m	(revision 22513)
++++ ../trunk-jpl/test/NightlyRun/test339.m	(revision 22514)
+@@ -30,8 +30,8 @@
+ 	'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SmbMassBalance4'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
++	2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test435.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.py	(revision 22513)
++++ ../trunk-jpl/test/NightlyRun/test435.py	(revision 22514)
+@@ -64,7 +64,7 @@
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
+ field_tolerances = [
+ 	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
+-	3e-11,3e-11,9e-10,7e-11,9e-09,1e-07,1e-09,1e-10,1e-13,
++	3e-11,3e-11,9e-10,7e-11,9e-09,2e-07,1e-09,1e-10,1e-13,
+ 	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
+ field_values = [
+ 	md.results.TransientSolution[0].Base,
+Index: ../trunk-jpl/test/NightlyRun/test339.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test339.py	(revision 22513)
++++ ../trunk-jpl/test/NightlyRun/test339.py	(revision 22514)
+@@ -39,8 +39,8 @@
+ 						 'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SmbMassBalance3',
+ 						 'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SmbMassBalance4']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
++									2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+ 									1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+-									1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+ 									1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[md.results.TransientSolution[0].Vx,
+ 							md.results.TransientSolution[0].Vy,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22514-22515.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22514-22515.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22514-22515.diff	(revision 22755)
@@ -0,0 +1,1251 @@
+Index: ../trunk-jpl/src/m/classes/adm1qn3inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/adm1qn3inversion.m	(revision 22514)
++++ ../trunk-jpl/src/m/classes/adm1qn3inversion.m	(revision 22515)
+@@ -6,22 +6,10 @@
+ classdef adm1qn3inversion
+ 	properties (SetAccess=public) 
+ 		iscontrol                   = 0
+-		control_parameters          = NaN
+-		control_scaling_factors     = NaN
+ 		maxsteps                    = 0
+ 		maxiter                     = 0
+ 		dxmin                       = 0
+ 		gttol                       = 0
+-		cost_functions              = NaN
+-		cost_functions_coefficients = NaN
+-		min_parameters              = NaN
+-		max_parameters              = NaN
+-		vx_obs                      = NaN
+-		vy_obs                      = NaN
+-		vz_obs                      = NaN
+-		vel_obs                     = NaN
+-		thickness_obs               = NaN
+-		surface_obs                 = NaN
+ 
+ 	end
+ 	methods
+@@ -36,13 +24,6 @@
+ 			end
+ 		end % }}}
+ 		function self = extrude(self,md) % {{{
+-			self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
+-			self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
+-			self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
+-			self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
+-			if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
+-			if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
+-			if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+@@ -49,18 +30,12 @@
+ 
+ 			%parameter to be inferred by control methods (only
+ 			%drag and B are supported yet)
+-			self.control_parameters={'FrictionCoefficient'};
++			%self.control_parameters={'FrictionCoefficient'};
+ 
+-			%Scaling factor for each control
+-			self.control_scaling_factors=1;
+-
+ 			%number of iterations
+ 			self.maxsteps=20;
+ 			self.maxiter=40;
+ 
+-			%several responses can be used:
+-			self.cost_functions=101;
+-
+ 			%m1qn3 parameters
+ 			self.dxmin  = 0.1;
+ 			self.gttol = 1e-4;
+@@ -74,61 +49,21 @@
+ 			if ~IssmConfig('_HAVE_M1QN3_'),
+ 				md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with M1QN3']);
+ 			end
+-			num_controls=numel(md.inversion.control_parameters);
+-			num_costfunc=size(md.inversion.cost_functions,2);
+ 
+ 			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
+-			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
+-			md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
+ 			md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
+ 			md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
+ 			md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
+-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
+-			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+-			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+-			md = checkfield(md,'fieldname','inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
+ 
+-			if strcmp(solution,'BalancethicknessSolution')
+-				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-			elseif strcmp(solution,'BalancethicknessSoftSolution')
+-				md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-			else
+-				md = checkfield(md,'fieldname','inversion.vx_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				if ~strcmp(domaintype(md.mesh),'2Dvertical'),
+-					md = checkfield(md,'fieldname','inversion.vy_obs','size',[md.mesh.numberofvertices 1],'NaN',1,'Inf',1);
+-				end
+-			end
+-		end % }}}
++	end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   adm1qn3inversion parameters:'));
+ 			fielddisplay(self,'iscontrol','is inversion activated?');
+-			fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');
+-			fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');
+ 			fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)');
+ 			fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)');
+ 			fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
+ 			fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');
+-			fielddisplay(self,'cost_functions','indicate the type of response for each optimization step');
+-			fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
+-			fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
+-			fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
+-			fielddisplay(self,'vx_obs','observed velocity x component [m/yr]');
+-			fielddisplay(self,'vy_obs','observed velocity y component [m/yr]');
+-			fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]');
+-			fielddisplay(self,'thickness_obs','observed thickness [m]');
+-			fielddisplay(self,'surface_obs','observed surface elevation [m]');
+-			disp('Available cost functions:');
+-			disp('   101: SurfaceAbsVelMisfit');
+-			disp('   102: SurfaceRelVelMisfit');
+-			disp('   103: SurfaceLogVelMisfit');
+-			disp('   104: SurfaceLogVxVyMisfit');
+-			disp('   105: SurfaceAverageVelMisfit');
+-			disp('   201: ThicknessAbsMisfit');
+-			disp('   501: DragCoefficientAbsGradient');
+-			disp('   502: RheologyBbarAbsGradient');
+-			disp('   503: ThicknessAbsGradient');
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+ 
+@@ -137,56 +72,19 @@
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+ 			WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
+ 			if ~self.iscontrol, return; end
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vel_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+-			if(numel(self.thickness_obs)==md.mesh.numberofelements),
+-				mattype=2;
+-			else
+-				mattype=1;
+-			end
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+-			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+ 
+-			%process control parameters
+-			num_control_parameters=numel(self.control_parameters);
+-			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+-			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
+-
+-			%process cost functions
+-			num_cost_functions=size(self.cost_functions,2);
+-			data=marshallcostfunctions(self.cost_functions);
+-			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','StringArray');
+-			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
+ 		end % }}}
+ 		function savemodeljs(self,fid,modelname) % {{{
+ 		
+ 			writejsdouble(fid,[modelname '.inversion.iscontrol'],self.iscontrol);
+-			writejscellstring(fid,[modelname '.inversion.control_parameters'],self.control_parameters);
+-			writejsdouble(fid,[modelname '.inversion.control_scaling_factors'],self.control_scaling_factors);
+ 			writejsdouble(fid,[modelname '.inversion.maxsteps'],self.maxsteps);
+ 			writejsdouble(fid,[modelname '.inversion.maxiter'],self.maxiter);
+ 			writejsdouble(fid,[modelname '.inversion.dxmin'],self.dxmin);
+ 			writejsdouble(fid,[modelname '.inversion.gttol'],self.gttol);
+-			writejs2Darray(fid,[modelname '.inversion.cost_functions'],self.cost_functions);
+-			writejs2Darray(fid,[modelname '.inversion.cost_functions_coefficients'],self.cost_functions_coefficients);
+-			writejs1Darray(fid,[modelname '.inversion.min_parameters'],self.min_parameters);
+-			writejs1Darray(fid,[modelname '.inversion.max_parameters'],self.max_parameters);
+-			writejs1Darray(fid,[modelname '.inversion.vx_obs'],self.vx_obs);
+-			writejs1Darray(fid,[modelname '.inversion.vy_obs'],self.vy_obs);
+-			writejs1Darray(fid,[modelname '.inversion.vz_obs'],self.vz_obs);
+-			writejs1Darray(fid,[modelname '.inversion.vel_obs'],self.vel_obs);
+-			writejs1Darray(fid,[modelname '.inversion.thickness_obs'],self.thickness_obs);
+-			writejs1Darray(fid,[modelname '.inversion.surface_obs'],self.surface_obs);
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 22514)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 22515)
+@@ -129,9 +129,17 @@
+ 
+ 					names{i}=indep.name;
+ 					types(i)=indep.typetoscalar();
++					min_parameters(:,i)=indep.min_parameters;
++					max_parameters(:,i)=indep.max_parameters;
++					scaling_factors(i)=indep.control_scaling_factor;
+ 				end
+ 				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','StringArray');
+ 				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
++				WriteData(fid,prefix,'data',min_parameters,'name','md.autodiff.independent_min_parameters','format','DoubleMat','mattype',3);
++	         WriteData(fid,prefix,'data',max_parameters,'name','md.autodiff.independent_max_parameters','format','DoubleMat','mattype',3);
++	         WriteData(fid,prefix,'data',scaling_factors,'name','md.autodiff.independent_scaling_factors','format','DoubleMat','mattype',3);
++
++
+ 			end
+ 			%}}}
+ 			%if driver is fos_forward, build index:  {{{
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 22514)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 22515)
+@@ -10,6 +10,9 @@
+ 		fos_forward_index    = NaN;
+ 		fov_forward_indices  = [];
+ 		nods                 = 0;
++		min_parameters			= NaN;
++		max_parameters			= NaN;
++		control_scaling_factor     = NaN
+ 	end
+ 	methods
+ 		function self = independent(varargin) % {{{
+@@ -44,6 +47,10 @@
+ 					error('independent checkconsistency error: nods should be set to the size of the independent variable');
+ 				end
+ 				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=',self.nods,'size',[NaN 1]);
++				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.min_parameters'],'size',[md.mesh.numberofvertices 1]);
++				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.max_parameters'],'size',[md.mesh.numberofvertices 1]);
++				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.control_scaling_factors'],'size',[1 1],'>',0,'NaN',1,'Inf',1);
++
+ 			end
+ 
+ 		end % }}}
+@@ -53,6 +60,9 @@
+ 			fielddisplay(self,'name','variable name (must match corresponding String)');
+ 			fielddisplay(self,'type','type of variable (''vertex'' or ''scalar'')');
+ 			fielddisplay(self,'nods','size of dependent variables');
++			fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
++			fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
++			fielddisplay(self,'control_scaling_factor','order of magnitude of each control (useful for multi-parameter optimization)');
+ 			if ~isnan(self.fos_forward_index),
+ 				fielddisplay(self,'fos_forward_index','index for fos_foward driver of ADOLC');
+ 			end
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22515)
+@@ -10,126 +10,126 @@
+ 
+ 	/*output*/
+ 	char* fieldname = NULL;
+-	int   param_enum = -1;
++	int   input_enum = -1;
+ 
+ 	if(strcmp(string_in,"Thickness")==0){
+ 		const char* field = "md.geometry.thickness";
+-		param_enum        = ThicknessEnum;
++		input_enum        = ThicknessEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"MaterialsRheologyB")==0){
+ 		const char* field = "md.materials.rheology_B";
+-		param_enum        = MaterialsRheologyBEnum;
++		input_enum        = MaterialsRheologyBEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbMassBalance")==0){
+ 		const char* field = "md.smb.mass_balance";
+-		param_enum        = SmbMassBalanceEnum;
++		input_enum        = SmbMassBalanceEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbAccumulation")==0){
+ 		const char* field = "md.smb.accumulation";
+-		param_enum        = SmbAccumulationEnum;
++		input_enum        = SmbAccumulationEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbMelt")==0){
+ 		const char* field = "md.smb.melt";
+-		param_enum        = SmbMeltEnum;
++		input_enum        = SmbMeltEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbRefreeze")==0){
+ 		const char* field = "md.smb.refreeze";
+-		param_enum        = SmbRefreezeEnum;
++		input_enum        = SmbRefreezeEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbRunoff")==0){
+ 		const char* field = "md.smb.runoff";
+-		param_enum        = SmbRunoffEnum;
++		input_enum        = SmbRunoffEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbEvaporation")==0){
+ 		const char* field = "md.smb.evaporation";
+-		param_enum        = SmbEvaporationEnum;
++		input_enum        = SmbEvaporationEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbTa")==0){
+ 		const char* field = "md.smb.Ta";
+-		param_enum        = SmbTaEnum;
++		input_enum        = SmbTaEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbV")==0){
+ 		const char* field = "md.smb.V";
+-		param_enum        = SmbVEnum;
++		input_enum        = SmbVEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbDswrf")==0){
+ 		const char* field = "md.smb.dswrf";
+-		param_enum        = SmbDswrfEnum;
++		input_enum        = SmbDswrfEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbDlwrf")==0){
+ 		const char* field = "md.smb.dlwrf";
+-		param_enum        = SmbDlwrfEnum;
++		input_enum        = SmbDlwrfEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbP")==0){
+ 		const char* field = "md.smb.P";
+-		param_enum        = SmbPEnum;
++		input_enum        = SmbPEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbEAir")==0){
+ 		const char* field = "md.smb.eAir";
+-		param_enum        = SmbEAirEnum;
++		input_enum        = SmbEAirEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbPAir")==0){
+ 		const char* field = "md.smb.pAir";
+-		param_enum        = SmbPAirEnum;
++		input_enum        = SmbPAirEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbVz")==0){
+ 		const char* field = "md.smb.Vz";
+-		param_enum        = SmbVzEnum;
++		input_enum        = SmbVzEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbTz")==0){
+ 		const char* field = "md.smb.Tz";
+-		param_enum        = SmbTzEnum;
++		input_enum        = SmbTzEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"SmbC")==0){
+ 		const char* field = "md.smb.C";
+-		param_enum        = SmbCEnum;
++		input_enum        = SmbCEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"BasalforcingsFloatingiceMeltingRate")==0){
+ 		const char* field = "md.basalforcings.floatingice_melting_rate";
+-		param_enum        = BasalforcingsFloatingiceMeltingRateEnum;
++		input_enum        = BasalforcingsFloatingiceMeltingRateEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+-	else if(strcmp(string_in,"FrictionCoefficient")==0){
++	else if(strcmp(string_in,"FrictionCoefficient")==0 || strcmp(string_in,"md.friction.coefficient")==0){
+ 		const char* field = "md.friction.coefficient";
+-		param_enum        = FrictionCoefficientEnum;
++		input_enum        = FrictionCoefficientEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"Vx")==0){
+ 		 const char* field = "md.initialization.vx";
+-		 param_enum        = VxEnum;
++		 input_enum        = VxEnum;
+ 		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	 }
+ 	else if(strcmp(string_in,"Vy")==0){
+ 		 const char* field = "md.initialization.vy";
+-		 param_enum        = VyEnum;
++		 input_enum        = VyEnum;
+ 		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	 }
+ 	else if(strcmp(string_in,"BalancethicknessThickeningRate")==0){
+ 		 const char* field = "md.balancethickness.thickening_rate";
+-		 param_enum        = BalancethicknessThickeningRateEnum;
++		 input_enum        = BalancethicknessThickeningRateEnum;
+ 		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else if(strcmp(string_in,"BalancethicknessSpcthickness")==0){
+ 		 const char* field = "md.balancethickness.spcthickness";
+-		 param_enum        = BalancethicknessSpcthicknessEnum;
++		 input_enum        = BalancethicknessSpcthicknessEnum;
+ 		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
+ 	else{
+@@ -137,7 +137,7 @@
+ 	}
+ 
+ 	/*Assign output pointers*/
+-	*out_enum = param_enum;
++	*out_enum = input_enum;
+ 	*pfield   = fieldname;
+ 	return;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22515)
+@@ -506,12 +506,15 @@
+ 				/*Deal with numbered cost function: {{{*/
+ 
+ 				/*Intermediary*/
+-				int    numout;
+-				char **ncf_name_s             = NULL;
+-				char **ncf_definitionstring_s = NULL;
+-				char **cost_functions         = NULL;
+-				int    cost_function ,domaintype;
+-				int    num_cost_functions;
++				int          numout,numout2;
++				char       **ncf_name_s             = NULL;
++				char       **ncf_definitionstring_s = NULL;
++				char       **cost_functions         = NULL;
++				IssmDouble **cost_functions_weights = NULL;
++				int*         cost_functions_weights_M = NULL;
++				int*         cost_functions_weights_N = NULL;
++				int          cost_function,domaintype;
++				int          num_cost_functions;
+ 
+ 				/*Process cost functions and convert from string to enums*/
+ 				iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions");
+@@ -522,11 +525,10 @@
+ 					cost_function_enums[i]=StringToEnumx(cost_functions[i]);
+ 				}
+ 
+-				//iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients");
+-
+ 				iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name");
+-				iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring");
+-				if(numout>1) _error_("not implemented yet, check code here");
++				iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout2,"md.numberedcostfunction.definitionstring"); _assert_(numout2 == numout); 
++				iomodel->FetchMultipleData(&cost_functions_weights,&cost_functions_weights_M,&cost_functions_weights_N,&numout2,"md.numberedcostfunction.cost_functions_coefficients");  _assert_(numout2 == numout);
++				if(numout!=1) _error_("not implemented yet, check code here");
+ 
+ 				/*Fetch Observations */
+ 				iomodel->FindConstant(&domaintype,"md.mesh.domain_type");
+@@ -542,18 +544,19 @@
+ 						iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);
+ 						if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);
+ 					}
+-
+ 				}
+ 
+ 				for(j=0;j<numout;j++){
+ 
++					/*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/
++					for(int k=0;k<elements->Size();k++){
++						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
++						element->DatasetInputCreate(cost_functions_weights[i],cost_functions_weights_M[i],cost_functions_weights_N[i],cost_function_enums,num_cost_functions,iomodel,InversionCostFunctionsCoefficientsEnum);
++					}
+ 					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums));
+-
+ 				}
+-
+ 				
+ 				/*Free data: */
+-				//iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients");
+ 				iomodel->DeleteData(2,"md.numberedcostfunction.name","md.numberedcostfunction.definitionstring");
+ 				xDelete<int>(cost_function_enums);
+ 				for(int i=0;i<num_cost_functions;i++) xDelete<char>(cost_functions[i]);
+@@ -563,9 +566,13 @@
+ 				for(j=0;j<numout;j++){
+ 					xDelete<char>(ncf_name_s[j]);
+ 					xDelete<char>(ncf_definitionstring_s[j]);
++					xDelete<IssmDouble>(cost_functions_weights[j]);
+ 				}
+ 				xDelete<char*>(ncf_name_s);
+ 				xDelete<char*>(ncf_definitionstring_s);
++				xDelete<int>(cost_functions_weights_M);
++				xDelete<int>(cost_functions_weights_N);
++				xDelete<IssmDouble*>(cost_functions_weights);
+ 			}
+ 			/*}}}*/
+ 		else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!");
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22515)
+@@ -346,6 +346,7 @@
+ 
+ 	#ifdef _HAVE_ADOLC_
+ 	if(VerboseMProcessor()) _printf0_("   starting autodiff parameters \n");
++	printf("-------------- file: CreateParameters.cpp line: %i\n",__LINE__); 
+ 	CreateParametersAutodiff(parameters,iomodel);
+ 	if(VerboseMProcessor()) _printf0_("   ending autodiff parameters \n");
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22515)
+@@ -14,6 +14,7 @@
+ 	int materials_type;
+ 	bool control_analysis;
+ 	bool dakota_analysis;
++	bool adolc_analysis;
+ 	int nnat,dummy;
+ 	int* nature=NULL;
+ 
+@@ -21,6 +22,7 @@
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+ 	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+ 	iomodel->FindConstant(&materials_type,"md.materials.type");
++	iomodel->FindConstant(&adolc_analysis,"md.autodiff.isautodiff");
+ 
+ 	/*Did we already create the elements? : */
+ 	_assert_(elements->Size()==0);
+@@ -29,7 +31,8 @@
+ 	iomodel->matparcounter=iomodel->numberofelements+1;
+ 
+ 	/*Create elements*/
+-	if(control_analysis)iomodel->FetchData(2,"md.inversion.min_parameters","md.inversion.max_parameters");
++	if(control_analysis && !adolc_analysis)iomodel->FetchData(2,"md.inversion.min_parameters","md.inversion.max_parameters");
++	
+ 	switch(iomodel->meshelementtype){
+ 		case TriaEnum:
+ 			for(i=0;i<iomodel->numberofelements;i++){
+@@ -217,8 +220,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(7,"md.mesh.upperelements","md.mesh.lowerelements","md.material.rheology_B",
+-				"md.material.rheology_n","md.damage.D","md.inversion.min_parameters","md.inversion.max_parameters");
++	iomodel->DeleteData(7,"md.mesh.upperelements","md.mesh.lowerelements","md.material.rheology_B","md.material.rheology_n","md.damage.D","md.inversion.min_parameters","md.inversion.max_parameters");
+ 
+ 	/*Add new constant material property to materials, at the end: */
+ 	materials->AddObject(new Matpar(iomodel));//put it at the end of the materials
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22515)
+@@ -27,10 +27,6 @@
+ 
+ 	if(control_analysis){
+ 
+-		/*How many controls and how many responses?*/
+-		parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_control_parameters",InversionNumControlParametersEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
+-
+ 		/*What solution type?*/
+ 		if(solution_type==SteadystateSolutionEnum){
+ 			parameters->AddObject(new BoolParam(ControlSteadyEnum,true));
+@@ -39,29 +35,92 @@
+ 			parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
+ 		}
+ 
+-		/*recover controls and convert to Enums*/
+-		iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters");
+-		if(num_controls<1) _error_("no controls found");
+-		int* control_enums=xNew<int>(num_controls);
+-		for(int i=0;i<num_controls;i++){
+-			control_enums[i]=StringToEnumx(controls[i]);
+-			xDelete<char>(controls[i]);
++		switch(inversiontype){
++			_printf_("Inversiontype: "<<inversiontype<<"\n");
++			  {
++			case 0:/*Brent Search*/
++			case 1:/*TAO*/
++			case 2:/*M1QN3*/
++			case 3:/*Validation*/
++				/*How many controls and how many responses?*/
++				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_control_parameters",InversionNumControlParametersEnum));
++				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
++
++				/*recover controls and convert to Enums*/
++				iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters");
++				if(num_controls<1) _error_("no controls found");
++				int* control_enums=xNew<int>(num_controls);
++				for(int i=0;i<num_controls;i++){
++					control_enums[i]=StringToEnumx(controls[i]);
++					xDelete<char>(controls[i]);
++				}
++				xDelete<char*>(controls);
++				parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_enums,num_controls));
++
++				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions");
++				if(num_costfunc<1) _error_ ("no cost functions found");
++				int* costfunc_enums=xNew<int>(num_costfunc);
++				for(int i=0;i<num_costfunc;i++){
++					costfunc_enums[i]=StringToEnumx(cm_responses[i]);
++					xDelete<char>(cm_responses[i]);
++				}
++				xDelete<char*>(cm_responses);
++				parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
++
++				xDelete<int>(control_enums);
++				xDelete<int>(costfunc_enums);
++
++				break;
+ 		}
+-		xDelete<char*>(controls);
+-		parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_enums,num_controls));
++			case 4:/*AD M1QN3*/
++			{
++			/*Intermediaries*/
++			int            num_independent_objects,M;
++			char**         names                   = NULL;
++				
++				/*this is done somewhere else*/
++				parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.num_independent_objects",InversionNumControlParametersEnum));
++			   parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.num_dependent_objects",InversionNumCostFunctionsEnum));
++				
++				/*Step1: create controls (independents)*/
++				iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects");
++				_assert_(num_independent_objects>0);
++				iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names");
++				_assert_(M==num_independent_objects);
++				int* ind_enums=xNew<int>(num_independent_objects);
++				for(int i=0;i<num_independent_objects;i++){
++					ind_enums[i]=StringToEnumx(names[i]);
++					xDelete<char>(names[i]);
++				}
+ 
+-		iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions");
+-		if(num_costfunc<1) _error_ ("no cost functions found");
+-		int* costfunc_enums=xNew<int>(num_costfunc);
+-		for(int i=0;i<num_costfunc;i++){
+-			costfunc_enums[i]=StringToEnumx(cm_responses[i]);
+-			xDelete<char>(cm_responses[i]);
++				parameters->AddObject(new IntVecParam(InversionControlParametersEnum,ind_enums,num_independent_objects));
++				//iomodel->FetchData(&num_costfunc,"md.numberedcostfunction.num_cost_functions");
++				      _assert_(num_costfunc>0);
++				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.autodiff.dependent_object_names");
++				if(num_costfunc<1) _error_ ("no cost functions found");
++				int* costfunc_enums=xNew<int>(num_costfunc);
++				for(int i=0;i<num_costfunc;i++){
++					costfunc_enums[i]=StringToEnumx(cm_responses[i]);
++					xDelete<char>(cm_responses[i]);
++				}
++				xDelete<char*>(cm_responses);
++				parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
++				
++				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.autodiff.independent_scaling_factors");
++				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_independent_objects));
++	
++				/*cleanup*/
++				for(int i=0;i<num_independent_objects;i++){
++					xDelete<char>(names[i]);
++				}
++				xDelete<char*>(names);
++				xDelete<int>(ind_enums);	
++				xDelete<int>(costfunc_enums);
++				break;
++			}
++			default:
++				_error_("not supported");
+ 		}
+-		xDelete<char*>(cm_responses);
+-		parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc));
+-		
+-		xDelete<int>(control_enums);
+-		xDelete<int>(costfunc_enums);
+ 
+ 		/*Inversion type specifics*/
+ 		switch(inversiontype){
+@@ -106,14 +165,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxsteps",InversionMaxstepsEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxiter",InversionMaxiterEnum));
+-				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.inversion.control_scaling_factors");
+-				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls));
+-				break;
++			break;
+ 			default:
+ 				_error_("not supported");
+ 		}
+ 
+-		xDelete<int>(control_enums);
+ 		xDelete<int>(maxiter);
+ 		xDelete<IssmDouble>(control_scaling_factors);
+ 		iomodel->DeleteData(cm_jump,"md.inversion.step_threshold");
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22515)
+@@ -354,15 +354,17 @@
+ 	/*Optimization criterions*/
+ 	long niter = long(maxsteps); /*Maximum number of iterations*/
+ 	long nsim  = long(maxiter);/*Maximum number of function calls*/
+-
++	
+ 	/*Get initial guess*/
+ 	Vector<double> *Xpetsc = NULL;
++
++	/*THIS IS WHERE IT FAILS*/
+ 	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+ 	X = Xpetsc->ToMPISerial();
+ 	Xpetsc->GetSize(&intn);
+ 	delete Xpetsc;
+ 	_assert_(intn==numberofvertices*num_controls);
+-
++ 
+ 	/*Get problem dimension and initialize gradient and initial guess*/
+ 	long n = long(intn);
+ 	G = xNew<double>(n);
+@@ -394,6 +396,7 @@
+ 	mystruct.i        = xNewZeroInit<int>(1);
+ 	/*Initialize Gradient and cost function of M1QN3*/
+ 	indic = 4; /*gradient required*/
++printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
+ 	/*Estimation of the expected decrease in f during the first iteration*/
+ 	double df1=f;
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22515)
+@@ -118,8 +118,10 @@
+ 		 int i;
+ 		 IssmDouble J=0.;
+ 		 IssmDouble J_sum=0.;
+-	
++	printf("-------------- file: Cfsurfacesquare.cpp line: %i\n",__LINE__);
++	_printf_("current time: "<<time<<"   datatime: "<<datatime<<"\n");
+ 	 if(datatime<=time && !timepassedflag){
++printf("-------------- file: Cfsurfacesquare.cpp line: %i\n",__LINE__); 
+ 		 for(i=0;i<femmodel->elements->Size();i++){
+ 			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+ 			 J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22515)
+@@ -121,6 +121,7 @@
+ 		int                Id();
+ 		void               InputChangeName(int enum_type,int enum_type_old);
+ 		void               InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
++		void               ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,IoModel* iomodel,int M,int N,int input_enum,int id);
+ 		void					 DatasetInputAdd(int enum_type,IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum);
+ 		void               InputDuplicate(int original_enum,int new_enum);
+ 		void               InputUpdateFromConstant(IssmDouble constant, int name);
+@@ -187,6 +188,8 @@
+ 		/*Virtual functions*/
+ 		virtual void       AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum)=0;
+ 		virtual void       AddInput(int input_enum, IssmDouble* values, int interpolation_enum)=0;
++		virtual void       AddControlInput(int input_enum, IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");};
++		virtual void       DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum){_error_("not supported");};
+ 		virtual void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
+ 		virtual void		 BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
+ 		virtual void       CalvingRateVonmises(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22515)
+@@ -169,6 +169,36 @@
+ 	this->inputs->AddInput(new TriaInput(input_enum,values,interpolation_enum));
+ }
+ /*}}}*/
++void       Tria::AddControlInput(int input_enum,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/
++
++	/*Call inputs method*/
++	_assert_(this->inputs);
++	this->inputs->AddInput(new ControlInput(input_enum,TriaInputEnum,values,values_min,values_max,interpolation_enum,id));
++}
++/*}}}*/
++void       Tria::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum){/*{{{*/
++
++	IssmDouble nodeinputs[NUMVERTICES];
++	if(num_inputs<1) _error_("Cannot create a DatasetInput of size <1");
++	if(M!=iomodel->numberofvertices) _error_("not supported yet");
++	if(N!=num_inputs) _error_("sizes are not consistent");
++
++	int        tria_vertex_ids[3];
++	
++	for(int k=0;k<3;k++){
++		tria_vertex_ids[k]=reCast<int>(iomodel->elements[3*this->Sid()+k]); //ids for vertices are in the elements array from Matlab
++	}
++	/*Create inputs and add to DataSetInput*/
++	DatasetInput* datasetinput=new DatasetInput(input_enum);
++	for(int i=0;i<num_inputs;i++){
++		for(int j=0;j<NUMVERTICES;j++)nodeinputs[j]=array[(tria_vertex_ids[j]-1)*N+i];
++		datasetinput->AddInput(new TriaInput(input_enum,nodeinputs,P1Enum),individual_enums[i]);
++	}
++
++	/*Add datasetinput to element inputs*/
++	this->inputs->AddInput(datasetinput);
++}
++/*}}}*/
+ void       Tria::AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){/*{{{*/
+ 
+ 	bool       already = false;
+@@ -1910,7 +1940,7 @@
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble cmmininputs[3];
+ 	IssmDouble cmmaxinputs[3];
+-	bool       control_analysis   = false;
++	bool       control_analysis,ad_analysis   = false;
+ 	int        num_control_type,num_responses;
+ 	char**     controls = NULL;
+ 	IssmDouble yts;
+@@ -1918,9 +1948,14 @@
+ 	/*Get parameters: */
+ 	iomodel->FindConstant(&yts,"md.constants.yts"); 
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+-	if(control_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
+-	if(control_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
++	iomodel->FindConstant(&ad_analysis, "md.autodiff.isautodiff");
++	if(control_analysis && !ad_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
++	if(control_analysis && !ad_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
++	if(control_analysis && ad_analysis) iomodel->FindConstant(&num_control_type,"md.autodiff.num_independent_objects");
++	if(control_analysis && ad_analysis) iomodel->FindConstant(&num_responses,"md.autodiff.num_dependent_objects");
+ 
++
++
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+ 		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+@@ -1933,7 +1968,9 @@
+ 
+ 	/*Control Inputs*/
+ 	if (control_analysis){
+-		iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");
++		if(!ad_analysis)iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");
++		if(ad_analysis)iomodel->FindConstant(&controls,NULL,"md.autodiff.independent_object_names");
++
+ 		for(i=0;i<num_control_type;i++){
+ 			_assert_(controls[i]);
+ 			int control = StringToEnumx(controls[i]);
+@@ -1943,7 +1980,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VxEnum:
+@@ -1951,7 +1988,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VyEnum:
+@@ -1959,7 +1996,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case ThicknessEnum:
+@@ -1967,7 +2004,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.geometry.thickness")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case BalancethicknessSpcthicknessEnum:
+@@ -1975,7 +2012,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.spcthickness")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case BalancethicknessOmegaEnum:
+@@ -1983,7 +2020,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.omega")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(BalancethicknessOmegaEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessOmegaEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case FrictionCoefficientEnum:
+@@ -1991,7 +2028,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+@@ -1999,7 +2036,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case DamageDbarEnum:
+@@ -2007,7 +2044,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tria_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				default:
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22515)
+@@ -161,6 +161,8 @@
+ 		/*Tria specific routines:{{{*/
+ 		void           AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum);
+ 		void           AddInput(int input_enum, IssmDouble* values, int interpolation_enum);
++		void           AddControlInput(int input_enum, IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
++		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum);
+ 		IssmDouble     GetArea(void);
+ 		IssmDouble 	   GetArea3D(void);
+ 		IssmDouble 	   GetAreaIce(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22515)
+@@ -1399,7 +1399,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VxEnum:
+@@ -1407,7 +1407,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VxEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VxEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VyEnum:
+@@ -1415,7 +1415,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VyEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VyEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case FrictionCoefficientEnum:
+@@ -1423,7 +1423,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+@@ -1431,7 +1431,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case DamageDbarEnum:
+@@ -1439,7 +1439,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[penta_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				default:
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 22515)
+@@ -393,7 +393,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VxEnum:
+@@ -401,7 +401,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VxEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VxEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case VyEnum:
+@@ -409,7 +409,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VyEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VyEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case FrictionCoefficientEnum:
+@@ -417,7 +417,7 @@
+ 						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+@@ -425,7 +425,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				case DamageDbarEnum:
+@@ -433,7 +433,7 @@
+ 						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tetra_vertex_ids[j]-1];
+ 						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(DamageDEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(DamageDEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));
+ 					}
+ 					break;
+ 				default:
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22515)
+@@ -1603,6 +1603,45 @@
+     else _error_("Cannot add input for vector type " << vector_type << " (not supported)");
+ }
+ /*}}}*/
++void       Element::ControlInputCreate(IssmDouble* vector,IssmDouble* min_vector,IssmDouble* max_vector,IoModel* iomodel,int M,int N,int input_enum,int id){/*{{{*/
++
++	/*Intermediaries*/
++	int         numvertices = this->GetNumberOfVertices();
++	int        *vertexids   = xNew<int>(numvertices);
++	IssmDouble *values      = xNew<IssmDouble>(numvertices);
++	IssmDouble *values_min  = xNew<IssmDouble>(numvertices);
++	IssmDouble *values_max  = xNew<IssmDouble>(numvertices);
++
++	/*Some sanity checks*/
++	_assert_(vector); 
++	_assert_(min_vector); 
++	_assert_(max_vector); 
++
++	/*For now we only support nodal vectors*/
++	if(M!=iomodel->numberofvertices) _error_("not supported");
++	if(N!=1) _error_("not supported");
++
++	/*Recover vertices ids needed to initialize inputs*/
++	_assert_(iomodel->elements);
++	for(int i=0;i<numvertices;i++){
++		vertexids[i]=reCast<int>(iomodel->elements[numvertices*this->Sid()+i]); //ids for vertices are in the elements array from Matlab
++	}
++
++	/*Are we in transient or static? */
++	if(M==iomodel->numberofvertices){
++		for(int i=0;i<numvertices;i++){
++			values[i]=vector[vertexids[i]-1];
++			values_min[i] = min_vector[vertexids[i]-1];
++			values_max[i] = max_vector[vertexids[i]-1];
++		}
++		this->AddControlInput(input_enum,values,min_vector,max_vector,P1Enum,id);
++	}
++
++	/*clean up*/
++	xDelete<IssmDouble>(values);
++	xDelete<int>(vertexids);
++}
++/*}}}*/
+ void       Element::DatasetInputAdd(int enum_type,IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum){/*{{{*/
+     /*enum_type: the name of the DatasetInput (eg Outputdefinition1)
+ 	  * vector: information being stored (eg observations)
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 22515)
+@@ -21,26 +21,28 @@
+ 	gradient    = NULL;
+ }
+ /*}}}*/
+-ControlInput::ControlInput(int in_enum_type,int enum_input,IssmDouble* pvalues,IssmDouble* pmin,IssmDouble* pmax,int id){/*{{{*/
++ControlInput::ControlInput(int in_enum_type,int input_layout_enum,IssmDouble* pvalues,IssmDouble* pmin,IssmDouble* pmax,int interp,int id){/*{{{*/
+ 
+ 	control_id=id;
+ 	enum_type=in_enum_type;
+ 
+-	switch(enum_input){
++	_assert_(interp==P1Enum);
++
++	switch(input_layout_enum){
+ 		case TriaInputEnum:
+-			values     =new TriaInput(enum_type,pvalues,P1Enum);
+-			savedvalues=new TriaInput(enum_type,pvalues,P1Enum);
+-			minvalues  =new TriaInput(enum_type,pmin,P1Enum);
+-			maxvalues  =new TriaInput(enum_type,pmax,P1Enum);
++			values     =new TriaInput(enum_type,pvalues,interp);
++			savedvalues=new TriaInput(enum_type,pvalues,interp);
++			minvalues  =new TriaInput(enum_type,pmin,interp);
++			maxvalues  =new TriaInput(enum_type,pmax,interp);
+ 			break;
+ 		case PentaInputEnum:
+-			values     =new PentaInput(enum_type,pvalues,P1Enum);
+-			savedvalues=new PentaInput(enum_type,pvalues,P1Enum);
+-			minvalues  =new PentaInput(enum_type,pmin,P1Enum);
+-			maxvalues  =new PentaInput(enum_type,pmax,P1Enum);
++			values     =new PentaInput(enum_type,pvalues,interp);
++			savedvalues=new PentaInput(enum_type,pvalues,interp);
++			minvalues  =new PentaInput(enum_type,pmin,interp);
++			maxvalues  =new PentaInput(enum_type,pmax,interp);
+ 			break;
+ 		default:
+-			_error_("Input of Enum " << EnumToStringx(enum_input) << " not supported yet by ControlInput");
++			_error_("Input of Enum " << EnumToStringx(input_layout_enum) << " not supported yet by ControlInput");
+ 	}
+ 	gradient   =NULL;
+ }
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22514)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22515)
+@@ -25,7 +25,7 @@
+ 
+ 		/*ControlInput constructors, destructors: {{{*/
+ 		ControlInput();
+-		ControlInput(int enum_type,int enum_input,IssmDouble* pvalues,IssmDouble* pmin,IssmDouble* pmax,int id);
++		ControlInput(int enum_type,int enum_input,IssmDouble* pvalues,IssmDouble* pmin,IssmDouble* pmax,int interp,int id);
+ 		~ControlInput();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22514)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22515)
+@@ -8,8 +8,10 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
++
++#if !defined(_HAVE_ADOLC_)
+ void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
+-
++	
+ 	/*Intermediary*/
+ 	bool       control_analysis;
+ 	int        control,cost_function,domaintype;
+@@ -20,6 +22,8 @@
+ 	char     **controls         = NULL;
+ 	char     **cost_functions   = NULL;
+ 
++	if(_HAVE_ADOLC_) return;
++
+ 	/*Fetch parameters: */
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+ 	if(control_analysis) iomodel->FindConstant(&num_controls,"md.inversion.num_control_parameters");
+@@ -26,7 +30,7 @@
+ 
+ 	/*Now, return if no control*/
+ 	if(!control_analysis) return;
+-
++	
+ 	/*Process controls and convert from string to enums*/
+ 	iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters");
+ 	if(num_controls<1) _error_("no controls found");
+@@ -124,3 +128,73 @@
+ 	for(int i=0;i<num_controls;i++) xDelete<char>(controls[i]);
+ 	xDelete<char*>(controls);
+ }
++#else 
++void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
++
++	/*Intermediaries*/
++	int				num_independent_objects,M,N;
++	char**			names                   = NULL;
++	int*				types							= NULL;
++	IssmDouble*		independent					= NULL;
++	IssmDouble**	independents_min			= NULL;
++	IssmDouble**	independents_max			= NULL;
++
++	/*Step1: create controls (independents)*/
++	iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects");
++	_assert_(num_independent_objects>0); 
++	iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names");
++	_assert_(M==num_independent_objects);
++	iomodel->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types");
++
++		
++	/*TODO: fetch min and max*/
++	independents_min = xNew<IssmDouble*>(num_independent_objects);
++	independents_max = xNew<IssmDouble*>(num_independent_objects);
++	for(int i=0;i<num_independent_objects;i++) independents_min[i]=NULL;
++	for(int i=0;i<num_independent_objects;i++) independents_max[i]=NULL;
++
++	/*create independent objects, and at the same time, fetch the corresponding independent variables, 
++	 *and declare them as such in ADOLC: */
++	for(int i=0;i<num_independent_objects;i++){
++
++		if(types[i]==1){ /* vector:*/
++
++			/*Get field name and input Enum from independent name*/
++			char* iofieldname  = NULL;
++			int   input_enum;
++			FieldAndEnumFromCode(&input_enum,&iofieldname,names[i]);
++
++			/*Fetch required data*/
++			iomodel->FetchData(&independent,&M,&N,iofieldname);
++			iomodel->FetchData(&independents_min[i],&M,&N,"md.autodiff.independent_min_parameters");
++			iomodel->FetchData(&independents_max[i],&M,&N,"md.autodiff.independent_max_parameters");
++			
++			_assert_(independent); 
++
++			for(int j=0;j<elements->Size();j++){
++				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
++				element->ControlInputCreate(independent,independents_min[i],independents_max[i],iomodel,M,N,input_enum,i+1);
++			}
++			xDelete<IssmDouble>(independent);
++		}
++		else{
++			_error_("Independent cannot be of size " << types[i]);
++		}
++	}
++
++	/*cleanup*/
++	for(int i=0;i<num_independent_objects;i++){
++		xDelete<char>(names[i]);
++		xDelete<IssmDouble>(independents_min[i]);
++		xDelete<IssmDouble>(independents_max[i]);
++	}
++	xDelete<IssmDouble*>(independents_min);
++	xDelete<IssmDouble*>(independents_max);
++	xDelete<char*>(names);
++	xDelete<int>(types);
++
++	/*Step2: create cost functions (dependents)*/
++
++	return;
++}
++#endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-22515-22516.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22515-22516.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22515-22516.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22515)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22516)
+@@ -22,7 +22,6 @@
+ 	char     **controls         = NULL;
+ 	char     **cost_functions   = NULL;
+ 
+-	if(_HAVE_ADOLC_) return;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22516-22517.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22516-22517.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22516-22517.diff	(revision 22755)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22516)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22517)
+@@ -114,14 +114,10 @@
+ 	 /*recover time parameters: */
+ 	 femmodel->parameters->FindParam(&time,TimeEnum);
+ 
+-/*ELLEN UNFINISHED*/
+ 		 int i;
+ 		 IssmDouble J=0.;
+ 		 IssmDouble J_sum=0.;
+-	printf("-------------- file: Cfsurfacesquare.cpp line: %i\n",__LINE__);
+-	_printf_("current time: "<<time<<"   datatime: "<<datatime<<"\n");
+ 	 if(datatime<=time && !timepassedflag){
+-printf("-------------- file: Cfsurfacesquare.cpp line: %i\n",__LINE__); 
+ 		 for(i=0;i<femmodel->elements->Size();i++){
+ 			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+ 			 J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22516)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22517)
+@@ -346,7 +346,6 @@
+ 
+ 	#ifdef _HAVE_ADOLC_
+ 	if(VerboseMProcessor()) _printf0_("   starting autodiff parameters \n");
+-	printf("-------------- file: CreateParameters.cpp line: %i\n",__LINE__); 
+ 	CreateParametersAutodiff(parameters,iomodel);
+ 	if(VerboseMProcessor()) _printf0_("   ending autodiff parameters \n");
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22516)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22517)
+@@ -140,7 +140,7 @@
+ 
+ 	/*Step1: create controls (independents)*/
+ 	iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects");
+-	_assert_(num_independent_objects>0); 
++//_assert_(num_independent_objects>0); 
+ 	iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names");
+ 	_assert_(M==num_independent_objects);
+ 	iomodel->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types");
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22516)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22517)
+@@ -36,7 +36,6 @@
+ 		}
+ 
+ 		switch(inversiontype){
+-			_printf_("Inversiontype: "<<inversiontype<<"\n");
+ 			  {
+ 			case 0:/*Brent Search*/
+ 			case 1:/*TAO*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22517-22518.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22517-22518.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22517-22518.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22517)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22518)
+@@ -53,20 +53,6 @@
+ 	return 1;
+ }
+ /*}}}*/
+-void  Inputs::AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum){/*{{{*/
+-
+-	/*Find x and y inputs: */
+-	Input* xinput=xDynamicCast<Input*>(this->GetInput(inputx_enum));
+-	Input* yinput=xDynamicCast<Input*>(this->GetInput(inputy_enum));
+-
+-	/*some checks: */
+-	if(!xinput) _error_("input " << EnumToStringx(inputx_enum) << " could not be found!");
+-	if(!yinput) _error_("input " << EnumToStringx(inputy_enum) << " could not be found!");
+-
+-	/*Apply AXPY: */
+-	yinput->AXPY(xinput,scalar);
+-}
+-/*}}}*/
+ void  Inputs::ChangeEnum(int oldenumtype,int newenumtype){/*{{{*/
+ 
+ 	/*Go through dataset of inputs and look for input with 
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 22517)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 22518)
+@@ -22,7 +22,6 @@
+ 
+ 		/*numerics*/
+ 		int         AddInput(Input* in_input);
+-		void        AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum);
+ 		void        ChangeEnum(int enumtype,int new_enumtype);
+ 		void        Configure(Parameters* parameters);
+ 		int         DeleteInput(int enum_type);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22518-22519.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22518-22519.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22518-22519.diff	(revision 22755)
@@ -0,0 +1,280 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 22519)
+@@ -61,7 +61,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+-		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/TetraInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 22519)
+@@ -61,7 +61,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+-		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 22519)
+@@ -43,7 +43,6 @@
+ 		virtual void   AXPY(Input* xinput,IssmDouble scalar)=0;
+ 		virtual void   Extrude(int start)=0;
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
+-		virtual IssmDouble InfinityNorm(void)=0;
+ 		virtual IssmDouble Max(void)=0;
+ 		virtual IssmDouble MaxAbs(void)=0;
+ 		virtual IssmDouble Min(void)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22519)
+@@ -66,7 +66,6 @@
+ 		int  GetResultNumberOfNodes(void);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void){_error_("not implemented yet");};
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 22519)
+@@ -62,7 +62,6 @@
+ 		int GetResultInterpolation(void){_error_("not implemented yet");};
+ 		int GetResultNumberOfNodes(void){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+-		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void){_error_("not implemented yet");};
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+ 		IssmDouble Min(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 22519)
+@@ -60,7 +60,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		IssmDouble InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
+ 		IssmDouble Max(void){_error_("Max not implemented for integers");};
+ 		IssmDouble MaxAbs(void){_error_("Max not implemented for integers");};
+ 		IssmDouble Min(void){_error_("Min not implemented for integers");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22519)
+@@ -275,16 +275,6 @@
+ 	const int numvertices=3;
+ 	vector->SetValues(numvertices,doflist,this->values,INS_VAL);
+ } /*}}}*/
+-IssmDouble TriaInput::InfinityNorm(void){/*{{{*/
+-
+-	/*Output*/
+-	IssmDouble norm=0.;
+-	int numnodes=this->NumberofNodes(this->interpolation_type);
+-
+-	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
+-	return norm;
+-}
+-/*}}}*/
+ IssmDouble TriaInput::Max(void){/*{{{*/
+ 
+ 	int  numnodes=this->NumberofNodes(this->interpolation_type);
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 22519)
+@@ -56,7 +56,6 @@
+ 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+-		IssmDouble InfinityNorm(void){_error_("InfinityNorm not implemented for booleans");};
+ 		IssmDouble Max(void){_error_("Max not implemented for booleans");};
+ 		IssmDouble MaxAbs(void){_error_("Max not implemented for booleans");};
+ 		IssmDouble Min(void){_error_("Min not implemented for booleans");};
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22519)
+@@ -253,26 +253,6 @@
+ 
+ }
+ /*}}}*/
+-IssmDouble Inputs::InfinityNorm(int enumtype){/*{{{*/
+-
+-	/*Output*/
+-	IssmDouble norm;
+-
+-	/*Get input*/
+-	Input* input=xDynamicCast<Input*>(this->GetInput(enumtype));
+-
+-	/*Apply ContrainMin: */
+-	if (input){
+-		norm=input->InfinityNorm();
+-	}
+-	else{
+-		norm=0;
+-	}
+-
+-	/*Return output*/
+-	return norm;
+-}
+-/*}}}*/
+ IssmDouble Inputs::Max(int enumtype){/*{{{*/
+ 
+ 	/*Output*/
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 22519)
+@@ -61,7 +61,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
+ 		int  GetInputInterpolationType(){return interpolation_type;};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22519)
+@@ -527,25 +527,6 @@
+ 	delete input;
+ 
+ } /*}}}*/
+-IssmDouble TransientInput::InfinityNorm(void){/*{{{*/
+-
+-	IssmDouble time;
+-	IssmDouble infnorm;
+-
+-	/*First, recover current time from parameters: */
+-	parameters->FindParam(&time,TimeEnum);
+-
+-   /*Retrieve interpolated values for this time step: */
+-	Input* input=GetTimeInput(time);
+-
+-	/*Call input function*/
+-	infnorm=input->InfinityNorm();
+-
+-	/*Clean-up and return*/
+-	delete input;
+-	return infnorm;
+-}
+-/*}}}*/
+ IssmDouble TransientInput::Max(void){/*{{{*/
+ 
+ 	IssmDouble time;
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 22519)
+@@ -32,7 +32,6 @@
+ 		void        GetInputValue(bool* pvalue,int enum_type);
+ 		void        GetInputValue(int* pvalue,int enum_type);
+ 		void        GetInputValue(IssmDouble* pvalue,int enum_type);
+-		IssmDouble  InfinityNorm(int enumtype);
+ 		IssmDouble  Max(int enumtype);
+ 		IssmDouble  MaxAbs(int enumtype);
+ 		IssmDouble  Min(int enumtype);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 22519)
+@@ -274,16 +274,6 @@
+ 	const int numvertices=6;
+ 	vector->SetValues(numvertices,doflist,this->values,INS_VAL);
+ } /*}}}*/
+-IssmDouble PentaInput::InfinityNorm(void){/*{{{*/
+-
+-	/*Output*/
+-	IssmDouble norm=0.;
+-	int numnodes=this->NumberofNodes(this->interpolation_type);
+-
+-	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
+-	return norm;
+-}
+-/*}}}*/
+ IssmDouble PentaInput::Max(void){/*{{{*/
+ 
+ 	int  numnodes=this->NumberofNodes(this->interpolation_type);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22519)
+@@ -70,7 +70,6 @@
+ 		int  GetTimeInputOffset(IssmDouble time);
+ 		void GetTimeValues(IssmDouble* values,IssmDouble time){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 22519)
+@@ -58,7 +58,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+-		IssmDouble InfinityNorm(void);
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+ 		IssmDouble Min(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 22519)
+@@ -58,7 +58,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+ 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
+-		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void){_error_("not implemented yet");};
+ 		IssmDouble MaxAbs(void){_error_("not implemented yet");};
+ 		IssmDouble Min(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 22519)
+@@ -241,16 +241,6 @@
+ 	const int numvertices=4;
+ 	vector->SetValues(numvertices,doflist,this->values,INS_VAL);
+ } /*}}}*/
+-IssmDouble TetraInput::InfinityNorm(void){/*{{{*/
+-
+-	/*Output*/
+-	IssmDouble norm=0.;
+-	int numnodes=this->NumberofNodes(this->interpolation_type);
+-
+-	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
+-	return norm;
+-}
+-/*}}}*/
+ IssmDouble TetraInput::MinAbs(void){/*{{{*/
+ 
+ 	const int  numnodes=this->NumberofNodes(this->interpolation_type);
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 22518)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 22519)
+@@ -59,7 +59,6 @@
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		int  GetInputInterpolationType(){return P0Enum; };
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+ 		IssmDouble Max(void);
+ 		IssmDouble MaxAbs(void);
+ 		IssmDouble Min(void);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22519-22520.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22519-22520.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22519-22520.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test435.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.py	(revision 22519)
++++ ../trunk-jpl/test/NightlyRun/test435.py	(revision 22520)
+@@ -63,7 +63,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3']
+ field_tolerances = [
+-	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,
++	2e-11,5e-12,2e-11,1e-11,7e-10,3e-08,6e-10,1e-13,1e-13,
+ 	3e-11,3e-11,9e-10,7e-11,9e-09,2e-07,1e-09,1e-10,1e-13,
+ 	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13]
+ field_values = [
+Index: ../trunk-jpl/test/NightlyRun/test435.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test435.m	(revision 22519)
++++ ../trunk-jpl/test/NightlyRun/test435.m	(revision 22520)
+@@ -52,7 +52,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Vz2','Pressure2','FloatingiceMeltingrate2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Vz3','Pressure3','FloatingiceMeltingrate3',};
+ field_tolerances={...
+-	2e-11,5e-12,2e-11,1e-11,5e-10,3e-08,6e-10,1e-13,1e-13,...
++	2e-11,5e-12,2e-11,1e-11,7e-10,3e-08,6e-10,1e-13,1e-13,...
+ 	3e-11,3e-11,9e-10,7e-11,6e-09,2e-07,1e-09,1e-10,1e-13,...
+ 	1e-9,2e-08,7e-09,2e-7 ,1e-03,8e-04,2e-09,1e-10,1e-13};
+ field_values={...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22520-22521.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22520-22521.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22520-22521.diff	(revision 22755)
@@ -0,0 +1,349 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22520)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22521)
+@@ -30,24 +30,12 @@
+ /*Object management*/
+ int  Inputs::AddInput(Input* in_input){/*{{{*/
+ 
+-	/*First, go through dataset of inputs and check whether any input 
+-	 * with the same name is already in. If so, erase the corresponding 
+-	 * object before adding this new one: */
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
++	_assert_(in_input); 
+ 
+-	/*In debugging mode, check that the input is not a NULL pointer*/
+-	_assert_(in_input);
++	/*Delete input if it already exists*/
++	this->DeleteInput(in_input->InstanceEnum());
+ 
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-
+-		if (input->InstanceEnum()==in_input->InstanceEnum()){
+-			this->DeleteObject(input);
+-			break;
+-		}
+-	}
++	/*Now add new input to the dataset*/
+ 	this->AddObject(in_input);
+ 
+ 	return 1;
+@@ -55,33 +43,13 @@
+ /*}}}*/
+ void  Inputs::ChangeEnum(int oldenumtype,int newenumtype){/*{{{*/
+ 
+-	/*Go through dataset of inputs and look for input with 
+-	 * same enum as input enum, once found, just change its name */
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
++	/*Delete input if it already exists*/
++	this->DeleteInput(newenumtype);
+ 
+-	/*Delete existing input of newenumtype if it exists*/
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-		input=xDynamicCast<Input*>(*object);
+-
+-		if (input->InstanceEnum()==newenumtype){
+-			this->DeleteObject(input);
+-			break;
+-		}
+-	}
+-
+-	/*Change enum_type of input of oldenumtype*/
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-
+-		if (input->InstanceEnum()==oldenumtype){
+-			input->ChangeEnum(newenumtype);
+-			break;
+-		}
+-	}
+-}
+-/*}}}*/
++	/*Now get old input and change its enum (do not error out if not found)*/
++	Input* input=this->GetInput(oldenumtype);
++	if(input) input->ChangeEnum(newenumtype);
++}/*}}}*/
+ void Inputs::Configure(Parameters* parameters){/*{{{*/
+ 
+ 	vector<Object*>::iterator object;
+@@ -98,19 +66,8 @@
+ /*}}}*/
+ int  Inputs::DeleteInput(int enum_type){/*{{{*/
+ 
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
+-
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-
+-		if (input->InstanceEnum()==enum_type){
+-			this->DeleteObject(input);
+-			break;
+-		}
+-	}
+-
++	Input* input=this->GetInput(enum_type);
++	if(input) this->DeleteObject(input);
+ 	return 1;
+ 
+ }
+@@ -118,7 +75,7 @@
+ void  Inputs::DuplicateInput(int original_enum,int new_enum){/*{{{*/
+ 
+ 	/*Make a copy of the original input: */
+-	Input* original=xDynamicCast<Input*>(this->GetInput(original_enum));
++	Input* original=this->GetInput(original_enum);
+ 	if(!original)_error_("could not find input with enum: " << EnumToStringx(original_enum)); 
+ 	Input* copy=xDynamicCast<Input*>(original->copy());
+ 
+@@ -135,38 +92,19 @@
+ 	Input* input=NULL;
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+ 		input=xDynamicCast<Input*>(*object);
++		if (input->InstanceEnum()==enum_name) return input;
++	}
+ 
+-		if (input->InstanceEnum()==enum_name){
+-			return input;
+-		}
+-	}
+ 	return NULL;
+ }
+ /*}}}*/
+ void Inputs::GetInputAverage(IssmDouble* pvalue,int enum_type){/*{{{*/
+ 
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
+-	bool   found=false;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enum_type);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Go through inputs and check whether any input with the same name is already in: */
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-		if (input->InstanceEnum()==enum_type){
+-			found=true;
+-			break;
+-		}
+-	}
+-
+-	if (!found){
+-		/*we could not find an input with the correct enum type. No defaults values were provided, 
+-		 * error out: */
+-		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+-	}
+-
+ 	/*Ok, we have an input if we made it here, request the input to return the value: */
+ 	input->GetInputAverage(pvalue);
+ 
+@@ -174,26 +112,10 @@
+ /*}}}*/
+ void Inputs::GetInputValue(bool* pvalue,int enum_type){/*{{{*/
+ 
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
+-	bool   found=false;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enum_type);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Go through inputs and check whether any input with the same name is already in: */
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-		if (input->InstanceEnum()==enum_type){
+-			found=true;
+-			break;
+-		}
+-	}
+-
+-	if (!found){
+-		/*we could not find an input with the correct enum type. No defaults values were provided, 
+-		 * error out: */
+-		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+-	}
+-
+ 	/*Ok, we have an input if we made it here, request the input to return the value: */
+ 	input->GetInputValue(pvalue);
+ 
+@@ -201,138 +123,64 @@
+ /*}}}*/
+ void Inputs::GetInputValue(int* pvalue,int enum_type){/*{{{*/
+ 
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
+-	bool   found=false;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enum_type);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Go through inputs and check whether any input with the same name is already in: */
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object);
+-		if (input->InstanceEnum()==enum_type){
+-			found=true;
+-			break;
+-		}
+-	}
+-
+-	if (!found){
+-		/*we could not find an input with the correct enum type. No defaults values were provided, 
+-		 * error out: */
+-		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+-	}
+-
+ 	/*Ok, we have an input if we made it here, request the input to return the value: */
+ 	input->GetInputValue(pvalue);
+ 
+-}
+-/*}}}*/
++}/*}}}*/
+ void Inputs::GetInputValue(IssmDouble* pvalue,int enum_type){/*{{{*/
+ 
+-	vector<Object*>::iterator object;
+-	Input* input=NULL;
+-	bool   found=false;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enum_type);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Go through inputs and check whether any input with the same name is already in: */
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		input=xDynamicCast<Input*>(*object); 
+-		if (input->InstanceEnum()==enum_type){
+-			found=true;
+-			break;
+-		}
+-	}
+-
+-	if (!found){
+-		/*we could not find an input with the correct enum type. No defaults values were provided, 
+-		 * error out: */
+-		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+-	}
+-
+ 	/*Ok, we have an input if we made it here, request the input to return the value: */
+ 	input->GetInputValue(pvalue);
+ 
+-}
+-/*}}}*/
++}/*}}}*/
+ IssmDouble Inputs::Max(int enumtype){/*{{{*/
+ 
+-	/*Output*/
+-	IssmDouble max;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enumtype);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Get input*/
+-	Input* input=xDynamicCast<Input*>(this->GetInput(enumtype));
++	/*Return output*/
++	return input->Max();
+ 
+-	/*Apply ContrainMin: */
+-	if (input){
+-		max=input->Max();
+-	}
+-	else{
+-		_error_("Input " << EnumToStringx(enumtype) << " not found");
+-	}
+-
+-	/*Return output*/
+-	return max;
+-}
+-/*}}}*/
++}/*}}}*/
+ IssmDouble Inputs::MaxAbs(int enumtype){/*{{{*/
+ 
+-	/*Output*/
+-	IssmDouble max;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enumtype);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Get input*/
+-	Input* input=xDynamicCast<Input*>(this->GetInput(enumtype));
++	/*Return output*/
++	return input->MaxAbs();
+ 
+-	/*Apply ContrainMin: */
+-	if (input){
+-		max=input->MaxAbs();
+-	}
+-	else{
+-		_error_("Input " << EnumToStringx(enumtype) << " not found");
+-	}
+-
+-	/*Return output*/
+-	return max;
+-}
+-/*}}}*/
++}/*}}}*/
+ IssmDouble Inputs::Min(int enumtype){/*{{{*/
+ 
+-	/*Output*/
+-	IssmDouble min;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enumtype);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Get input*/
+-	Input* input=xDynamicCast<Input*>(this->GetInput(enumtype));
++	/*Return output*/
++	return input->Min();
+ 
+-	/*Apply ContrainMin: */
+-	if (input){
+-		min=input->Min();
+-	}
+-	else{
+-		_error_("Input " << EnumToStringx(enumtype) << " not found");
+-	}
+-
+-	/*Return output*/
+-	return min;
+-}
+-/*}}}*/
++}/*}}}*/
+ IssmDouble Inputs::MinAbs(int enumtype){/*{{{*/
+ 
+-	/*Output*/
+-	IssmDouble min;
++	/*Find input in current dataset*/
++	Input* input=this->GetInput(enumtype);
++	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+ 
+-	/*Get input*/
+-	Input* input=xDynamicCast<Input*>(this->GetInput(enumtype));
++	/*Return output*/
++	return input->MinAbs();
+ 
+-	/*Apply ContrainMin: */
+-	if (input){
+-		min=input->MinAbs();
+-	}
+-	else{
+-		_error_("Input " << EnumToStringx(enumtype) << " not found");
+-	}
+-
+-	/*Return output*/
+-	return min;
+-}
+-/*}}}*/
++}/*}}}*/
+ Inputs* Inputs::SpawnSegInputs(int index1,int index2){/*{{{*/
+ 
+ 	/*Intermediary*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22521-22522.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22521-22522.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22521-22522.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22521)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22522)
+@@ -145,7 +145,7 @@
+ 
+ 	/*Find input in current dataset*/
+ 	Input* input=this->GetInput(enumtype);
+-	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
++	if (!input) _error_("could not find input with enum " << EnumToStringx(enumtype));
+ 
+ 	/*Return output*/
+ 	return input->Max();
+@@ -155,7 +155,7 @@
+ 
+ 	/*Find input in current dataset*/
+ 	Input* input=this->GetInput(enumtype);
+-	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
++	if (!input) _error_("could not find input with enum " << EnumToStringx(enumtype));
+ 
+ 	/*Return output*/
+ 	return input->MaxAbs();
+@@ -165,7 +165,7 @@
+ 
+ 	/*Find input in current dataset*/
+ 	Input* input=this->GetInput(enumtype);
+-	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
++	if (!input) _error_("could not find input with enum " << EnumToStringx(enumtype));
+ 
+ 	/*Return output*/
+ 	return input->Min();
+@@ -175,7 +175,7 @@
+ 
+ 	/*Find input in current dataset*/
+ 	Input* input=this->GetInput(enumtype);
+-	if (!input) _error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
++	if (!input) _error_("could not find input with enum " << EnumToStringx(enumtype));
+ 
+ 	/*Return output*/
+ 	return input->MinAbs();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22522-22523.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22522-22523.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22522-22523.diff	(revision 22755)
@@ -0,0 +1,161 @@
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22522)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 22523)
+@@ -460,7 +460,6 @@
+ 						&Ke->values[0],1);
+ 		}
+ 		else if(stabilization==2){
+-			element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 			tau_parameter=element->StabilizationParameter(u-um,v-vm,w-wm,diameter,kappa);
+ 			for(int i=0;i<numnodes;i++){
+ 				for(int j=0;j<numnodes;j++){
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22522)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22523)
+@@ -155,11 +155,11 @@
+ 
+ 	/*Intermediaries */
+ 	int  stabilization,dim, domaintype, calvinglaw;
+-	int i, row, col;
++	int i,j,k,row, col;
+ 	IssmDouble kappa;
+ 	IssmDouble Jdet, dt, D_scalar;
+ 	IssmDouble h,hx,hy,hz;
+-	IssmDouble vel;
++	IssmDouble vel,v[3],w[3],c[3],m[3],dlsf[3];
+ 	IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice;
+ 	IssmDouble calvingmax, calvinghaf, heaviside, haf_eps;
+ 	IssmDouble* xyz_list = NULL;
+@@ -183,14 +183,11 @@
+ 	/*Initialize Element vector and other vectors*/
+ 	ElementMatrix* Ke       = basalelement->NewElementMatrix();
+ 	IssmDouble*    basis    = xNew<IssmDouble>(numnodes);
+-	IssmDouble*    B        = xNew<IssmDouble>(dim*numnodes);
+-	IssmDouble*    Bprime   = xNew<IssmDouble>(dim*numnodes);
+-	IssmDouble*    D        = xNew<IssmDouble>(dim*dim);
+-	IssmDouble*    v        = xNew<IssmDouble>(dim);
+-	IssmDouble*    w        = xNew<IssmDouble>(dim);
+-	IssmDouble*    c        = xNewZeroInit<IssmDouble>(dim);
+-	IssmDouble*    m        = xNewZeroInit<IssmDouble>(dim);
+-	IssmDouble*    dlsf     = xNew<IssmDouble>(dim);
++	IssmDouble*    dbasis   = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    Bprime = NULL;
++	if(stabilization==2){
++		Bprime   = xNew<IssmDouble>(dim*numnodes);
++	}
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	basalelement->GetVerticesCoordinates(&xyz_list);
+@@ -282,21 +279,21 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
++		basalelement->NodalFunctions(basis,gauss);
++		basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		D_scalar=gauss->weight*Jdet;
+ 
+ 		/* Transient */
+ 		if(dt!=0.){
+-			basalelement->NodalFunctions(basis,gauss);
+-			TripleMultiply(basis,numnodes,1,0,
+-						&D_scalar,1,1,0,
+-						basis,1,numnodes,0,
+-						&Ke->values[0],1);
+-			D_scalar*=dt;
++			for(i=0;i<numnodes;i++){
++				for(j=0;j<numnodes;j++){
++					Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i];
++				}
++			}
++			D_scalar=D_scalar*dt;
+ 		}
+ 
+ 		/* Advection */
+-		GetB(B,basalelement,xyz_list,gauss); 
+-		GetBprime(Bprime,basalelement,xyz_list,gauss); 
+ 		vx_input->GetInputValue(&v[0],gauss);
+ 		vy_input->GetInputValue(&v[1],gauss); 
+ 		gr_input->GetInputValue(&groundedice,gauss);
+@@ -457,20 +454,14 @@
+ 		for(i=0;i<dim;i++) w[i]=v[i]-c[i]-m[i];
+ 
+ 		/*Compute D*/
+-		for(row=0;row<dim;row++){
+-			for(col=0;col<dim;col++){
+-				if(row==col)
+-				 D[row*dim+col]=D_scalar*w[row];
+-				else
+-				 D[row*dim+col]=0.;
++		for(i=0;i<numnodes;i++){
++			for(j=0;j<numnodes;j++){
++				for(k=0;k<dim;k++){
++					Ke->values[i*numnodes+j] += D_scalar*w[k]*dbasis[k*numnodes+j]*basis[i];
++				}
+ 			}
+ 		}
+ 
+-		TripleMultiply(B,dim,numnodes,1,
+-					D,dim,dim,0,
+-					Bprime,dim,numnodes,0,
+-					&Ke->values[0],1);
+-
+ 		/* Stabilization */
+ 		vel=0.;
+ 		for(i=0;i<dim;i++) vel+=w[i]*w[i];
+@@ -484,28 +475,26 @@
+ 				basalelement->ElementSizes(&hx,&hy,&hz);
+ 				h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) ); 
+ 				kappa=h*vel/2.;
+-				for(row=0;row<dim;row++)
+-					for(col=0;col<dim;col++)
+-					if(row==col)
+-						D[row*dim+col]=D_scalar*kappa;
+-					else
+-						D[row*dim+col]=0.;
+-
+-				TripleMultiply(Bprime,dim,numnodes,1,
+-							D,dim,dim,0,
+-							Bprime,dim,numnodes,0,
+-							&Ke->values[0],1);
++				for(i=0;i<numnodes;i++){
++					for(j=0;j<numnodes;j++){
++						for(k=0;k<dim;k++){
++							Ke->values[i*numnodes+j] += D_scalar*kappa*dbasis[k*numnodes+j]*dbasis[k*numnodes+i];
++						}
++					}
++				}
+ 				break;	
+ 			case 2:
+ 				/* Streamline Upwinding */
+ 				basalelement->ElementSizes(&hx,&hy,&hz);
+ 				h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) );
++				IssmDouble D[3*3];
+ 				for(row=0;row<dim;row++) 
+ 					for(col=0;col<dim;col++) 
+ 						D[row*dim+col] = D_scalar*h/(2.*vel)*w[row]*w[col];
++				GetBprime(Bprime,basalelement,xyz_list,gauss);
+ 
+ 				TripleMultiply(Bprime,dim,numnodes,1,
+-							D,dim,dim,0,
++							&D[0],dim,dim,0,
+ 							Bprime,dim,numnodes,0,
+ 							&Ke->values[0],1);
+ 				break;
+@@ -517,14 +506,8 @@
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
+ 	xDelete<IssmDouble>(basis);
+-	xDelete<IssmDouble>(B);
+-	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(dbasis);
+ 	xDelete<IssmDouble>(Bprime);
+-	xDelete<IssmDouble>(v);
+-	xDelete<IssmDouble>(w);
+-	xDelete<IssmDouble>(c);
+-	xDelete<IssmDouble>(m);
+-	xDelete<IssmDouble>(dlsf);
+ 	delete gauss;
+ 	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+ 	return Ke;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22523-22524.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22523-22524.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22523-22524.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22523)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22524)
+@@ -487,7 +487,7 @@
+ 				/* Streamline Upwinding */
+ 				basalelement->ElementSizes(&hx,&hy,&hz);
+ 				h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) );
+-				IssmDouble D[3*3];
++				IssmDouble D[9];
+ 				for(row=0;row<dim;row++) 
+ 					for(col=0;col<dim;col++) 
+ 						D[row*dim+col] = D_scalar*h/(2.*vel)*w[row]*w[col];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22524-22525.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22524-22525.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22524-22525.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 22524)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 22525)
+@@ -13,7 +13,7 @@
+ 	md.flowequation.fe_HO=i{1};
+ 	md=solve(md,'Stressbalance');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
+-	field_tolerances={field_tolerances{:},6.5e-08,5e-08,2e-08,5e-08,1e-13};
++	field_tolerances={field_tolerances{:},6.7e-08,5e-08,2e-08,5e-08,1e-13};
+ 	field_values={field_values{:},...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test285.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.py	(revision 22524)
++++ ../trunk-jpl/test/NightlyRun/test285.py	(revision 22525)
+@@ -23,7 +23,7 @@
+ 	md.flowequation.fe_HO=i
+ 	md=solve(md,'Stressbalance')
+ 	field_names     =field_names+['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
+-	field_tolerances=field_tolerances+[6.5e-08,5e-08,2e-08,5e-08,1e-13]
++	field_tolerances=field_tolerances+[6.7e-08,5e-08,2e-08,5e-08,1e-13]
+ 	field_values=field_values+[\
+ 		md.results.StressbalanceSolution.Vx,\
+ 		md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22525-22526.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22525-22526.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22525-22526.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22525)
++++ ../trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 22526)
+@@ -104,10 +104,11 @@
+ 			vy = 0.1/yts;
+ 			vel = sqrt(vx*vx+vy*vy);
+ 		}
+-		else if(vel<0.1/yts){
+-			vx = vx/vel*0.1;
+-			vy = vy/vel*0.1;
++		else if(vel<30./yts){
++			vx = 0.;//vx/vel*0.01;
++			vy = 0.;//vy/vel*0.01;
+ 			vel = sqrt(vx*vx+vy*vy);
++			vel = 30./yts*500000.;
+ 		}
+ 
+ 		for(int i=0;i<numnodes;i++){
+@@ -127,6 +128,7 @@
+ }/*}}}*/
+ ElementVector* Balancethickness2Analysis::CreatePVector(Element* element){/*{{{*/
+ 
++	return NULL;
+ 	/*Intermediaries */
+ 	IssmDouble  dhdt[2],mb[2],ms[2],Jdet;
+ 	IssmDouble* xyz_list = NULL;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22526-22527.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22526-22527.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22526-22527.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/modules/Kriging.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/Kriging.m	(revision 22526)
++++ ../trunk-jpl/src/m/modules/Kriging.m	(revision 22527)
+@@ -1,4 +1,4 @@
+-function predictions = Kriging(x,y,observations,x_interp,y_interp,varargin);
++function [predictions errors]= Kriging(x,y,observations,x_interp,y_interp,varargin);
+ %KRIGING - Linear predictor
+ %   Usage: predictions = Kriging(x,y,observations,x_interp,y_interp,'options');
+ %   
+@@ -19,4 +19,4 @@
+ %	   -'numthreads':   number of threads, default is "<<num << "
+ 
+ % Call mex module
+-predictions = Kriging_matlab(x,y,observations,x_interp,y_interp,varargin{:});
++[predictions errors]= Kriging_matlab(x,y,observations,x_interp,y_interp,varargin{:});
Index: /issm/oecreview/Archive/21724-22754/ISSM-22527-22528.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22527-22528.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22527-22528.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 22527)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 22528)
+@@ -50,6 +50,8 @@
+ 	solutionstring = 'TransientSolution';
+ elseif strcmpi(solutionstring,'mc') || strcmpi(solutionstring,'Balancethickness')
+ 	solutionstring = 'BalancethicknessSolution';
++elseif strcmpi(solutionstring,'Balancethickness2')
++	solutionstring = 'Balancethickness2Solution';
+ elseif strcmpi(solutionstring,'mcsoft') || strcmpi(solutionstring,'BalancethicknessSoft')
+ 	solutionstring = 'BalancethicknessSoftSolution';
+ elseif strcmpi(solutionstring,'bv') || strcmpi(solutionstring,'Balancevelocity')
Index: /issm/oecreview/Archive/21724-22754/ISSM-22528-22529.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22528-22529.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22528-22529.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/externalpackages/gslib/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gslib/install.sh	(revision 22528)
++++ ../trunk-jpl/externalpackages/gslib/install.sh	(revision 22529)
+@@ -17,8 +17,8 @@
+ 
+ #Change compiler to gfortran
+ cd install
+-cat Makefile | sed -e "s/FC=g95/FC=ifort/g" > Makefile.bak
++cat Makefile | sed -e "s/FC=g95/FC=gfortran/g" > Makefile.bak
+ mv Makefile.bak Makefile
+-cat gslib/Makefile | sed -e "s/FC=g95/FC=ifort/g" > Makefile.bak
++cat gslib/Makefile | sed -e "s/FC=g95/FC=gfortran/g" > Makefile.bak
+ mv Makefile.bak gslib/Makefile
+ make 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22529-22530.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22529-22530.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22529-22530.diff	(revision 22755)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/externalpackages/valgrind/issm.supp
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 22529)
++++ ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 22530)
+@@ -55,6 +55,24 @@
+ 	  obj:*
+ 	  obj:*
+ }
++{
++	<OS3>
++	  Memcheck:Cond
++	  fun:index
++	  fun:expand_dynamic_string_token
++	  fun:_dl_map_object
++	  fun:map_doit
++	  fun:_dl_catch_error
++	  fun:do_preload
++	  fun:handle_ld_preload
++	  fun:dl_main
++	  fun:_dl_sysdep_start
++	  fun:_dl_start_final
++	  fun:_dl_start
++	  obj:/lib/x86_64-linux-gnu/ld-2.19.so
++	  obj:*
++	  obj:*
++}
+ #}}}
+ #PETSc {{{
+ {
Index: /issm/oecreview/Archive/21724-22754/ISSM-22530-22531.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22530-22531.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22530-22531.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22530)
++++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 22531)
+@@ -484,6 +484,7 @@
+ 				}
+ 				break;	
+ 			case 2:
++				  {
+ 				/* Streamline Upwinding */
+ 				basalelement->ElementSizes(&hx,&hy,&hz);
+ 				h=sqrt( pow(hx*w[0]/vel,2) + pow(hy*w[1]/vel,2) );
+@@ -497,6 +498,7 @@
+ 							&D[0],dim,dim,0,
+ 							Bprime,dim,numnodes,0,
+ 							&Ke->values[0],1);
++				  }
+ 				break;
+ 			default:
+ 				_error_("unknown type of stabilization in LevelsetAnalysis.cpp");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22531-22532.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22531-22532.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22531-22532.diff	(revision 22755)
@@ -0,0 +1,1635 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22531)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22532)
+@@ -66,12 +66,11 @@
+ #endif
+ #ifdef ALLOW_CPL_ISSM
+       COMMON /CPL_MPI_ID/
+-     &     mpiMyWid
+-      integer :: mpiMyWid, numprocsworld
+-      integer my_local_rank,my_local_size
+-      integer toissmcomm
+-      integer  dummy1(1),dummy2(1)
+-      integer, dimension(mpi_status_size) :: status
++     &     mpiMyWid, toissmcomm
++      INTEGER mpiMyWid, toissmcomm
++      integer my_local_rank,my_local_size, numprocsworld
++      integer dummy1(1),dummy2(1)
++      integer status(MPI_STATUS_SIZE)
+ #endif /* ALLOW_CPL_ISSM */
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+       INTEGER mpiMyWid, color
+@@ -209,14 +208,13 @@
+       dummy1(1)=4; dummy2(1)=2;
+          
+       if (my_local_rank .eq. 0) then
+-          call MPI_Send(dummy2,1,MPI_INT,0,1,toissmcomm,mpiRC)
+-          call MPI_Recv(dummy1,1,MPI_INT,0,1,toissmcomm,status,mpiRC)
++cdb          call MPI_Send(dummy2,1,MPI_INT,0,1,toissmcomm,mpiRC)
++cdb          call MPI_Recv(dummy1,1,MPI_INT,0,1,toissmcomm,status,mpiRC)
+       end if
+       
+-      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
+-      print*, 'Ocean : dummy received:',dummy1
++cdb      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
++cdb      print*, 'Ocean : dummy received:',dummy1
+ 
+-
+ #endif /* ALLOW_CPL_ISSM */
+ 
+ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
+Index: ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F	(revision 22532)
+@@ -0,0 +1,1196 @@
++C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.149 2017/02/12 20:18:24 gforget Exp $
++C $Name:  $
++
++#include "PACKAGES_CONFIG.h"
++#include "CPP_OPTIONS.h"
++#ifdef ALLOW_AUTODIFF
++# include "AUTODIFF_OPTIONS.h"
++#endif
++#ifdef ALLOW_CTRL
++# include "CTRL_OPTIONS.h"
++#endif
++#ifdef ALLOW_SALT_PLUME
++# include "SALT_PLUME_OPTIONS.h"
++#endif
++#ifdef ALLOW_ECCO
++# include "ECCO_OPTIONS.h"
++#endif
++
++#ifdef ALLOW_AUTODIFF
++# ifdef ALLOW_GGL90
++#  include "GGL90_OPTIONS.h"
++# endif
++# ifdef ALLOW_GMREDI
++#  include "GMREDI_OPTIONS.h"
++# endif
++# ifdef ALLOW_KPP
++#  include "KPP_OPTIONS.h"
++# endif
++# ifdef ALLOW_SEAICE
++#  include "SEAICE_OPTIONS.h"
++# endif
++# ifdef ALLOW_EXF
++#  include "EXF_OPTIONS.h"
++# endif
++#endif /* ALLOW_AUTODIFF */
++
++CBOP
++C     !ROUTINE: DO_OCEANIC_PHYS
++C     !INTERFACE:
++      SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)
++C     !DESCRIPTION: \bv
++C     *==========================================================*
++C     | SUBROUTINE DO_OCEANIC_PHYS
++C     | o Controlling routine for oceanic physics and
++C     |   parameterization
++C     *==========================================================*
++C     | o originally, part of S/R thermodynamics
++C     *==========================================================*
++C     \ev
++
++C     !CALLING SEQUENCE:
++C     DO_OCEANIC_PHYS
++C       |
++C       |-- OBCS_CALC
++C       |
++C       |-- OCN_APPLY_IMPORT
++C       |
++C       |-- FRAZIL_CALC_RHS
++C       |
++C       |-- THSICE_MAIN
++C       |
++C       |-- SEAICE_FAKE
++C       |-- SEAICE_MODEL
++C       |-- SEAICE_COST_SENSI
++C       |
++C       |-- OCN_EXPORT_DATA
++C       |
++C       |-- SHELFICE_THERMODYNAMICS
++C       |
++C       |-- ICEFRONT_THERMODYNAMICS
++C       |
++C       |-- SALT_PLUME_DO_EXCH
++C       |
++C       |-- FREEZE_SURFACE
++C       |
++C       |-- EXTERNAL_FORCING_SURF
++C       |
++C       |- k loop (Nr:1):
++C       | - DWNSLP_CALC_RHO
++C       | - BBL_CALC_RHO
++C       | - FIND_RHO_2D @ p(k)
++C       | - FIND_RHO_2D @ p(k-1)
++C       | - GRAD_SIGMA
++C       | - CALC_IVDC
++C       | - DIAGS_RHO_L
++C       |- end k loop.
++C       |
++C       |-- CALC_OCE_MXLAYER
++C       |
++C       |-- SALT_PLUME_CALC_DEPTH
++C       |-- SALT_PLUME_VOLFRAC
++C       |-- SALT_PLUME_APPLY
++C       |-- SALT_PLUME_APPLY
++C       |-- SALT_PLUME_FORCING_SURF
++C       |
++C       |-- KPP_CALC
++C       |-- KPP_CALC_DUMMY
++C       |
++C       |-- PP81_CALC
++C       |
++C       |-- KL10_CALC
++C       |
++C       |-- MY82_CALC
++C       |
++C       |-- GGL90_CALC
++C       |
++C       |-- TIMEAVE_SURF_FLUX
++C       |
++C       |-- GMREDI_CALC_TENSOR
++C       |-- GMREDI_CALC_TENSOR_DUMMY
++C       |
++C       |-- DWNSLP_CALC_FLOW
++C       |-- DWNSLP_CALC_FLOW
++C       |
++C       |-- OFFLINE_GET_DIFFUS
++C       |
++C       |-- BBL_CALC_RHS
++C       |
++C       |-- MYPACKAGE_CALC_RHS
++C       |
++C       |-- GMREDI_DO_EXCH
++C       |
++C       |-- KPP_DO_EXCH
++C       |
++C       |-- DIAGS_RHO_G
++C       |-- DIAGS_OCEANIC_SURF_FLUX
++C       |-- SALT_PLUME_DIAGNOSTICS_FILL
++C       |
++C       |-- ECCO_PHYS
++
++C     !USES:
++      IMPLICIT NONE
++C     == Global variables ===
++#include "SIZE.h"
++#include "EEPARAMS.h"
++#include "PARAMS.h"
++#include "GRID.h"
++#include "DYNVARS.h"
++#ifdef ALLOW_TIMEAVE
++# include "TIMEAVE_STATV.h"
++#endif
++#ifdef ALLOW_OFFLINE
++# include "OFFLINE_SWITCH.h"
++#endif
++
++#ifdef ALLOW_AUTODIFF
++# include "AUTODIFF_MYFIELDS.h"
++# include "tamc.h"
++# include "tamc_keys.h"
++# include "FFIELDS.h"
++# include "SURFACE.h"
++# include "EOS.h"
++# ifdef ALLOW_GMREDI
++#  include "GMREDI.h"
++# endif
++# ifdef ALLOW_KPP
++#  include "KPP.h"
++# endif
++# ifdef ALLOW_GGL90
++#  include "GGL90.h"
++# endif
++# ifdef ALLOW_EBM
++#  include "EBM.h"
++# endif
++# ifdef ALLOW_EXF
++#  include "ctrl.h"
++#  include "EXF_FIELDS.h"
++#  ifdef ALLOW_BULKFORMULAE
++#   include "EXF_CONSTANTS.h"
++#  endif
++# endif
++# ifdef ALLOW_SEAICE
++#  include "SEAICE_SIZE.h"
++#  include "SEAICE.h"
++#  include "SEAICE_PARAMS.h"
++# endif
++# ifdef ALLOW_THSICE
++#  include "THSICE_VARS.h"
++# endif
++# ifdef ALLOW_SALT_PLUME
++#  include "SALT_PLUME.h"
++# endif
++# ifdef ALLOW_ECCO
++#  ifdef ALLOW_SIGMAR_COST_CONTRIBUTION
++#   include "ecco_cost.h"
++#  endif
++# endif
++#endif /* ALLOW_AUTODIFF */
++
++C     !INPUT/OUTPUT PARAMETERS:
++C     == Routine arguments ==
++C     myTime :: Current time in simulation
++C     myIter :: Current iteration number in simulation
++C     myThid :: Thread number for this instance of the routine.
++      _RL myTime
++      INTEGER myIter
++      INTEGER myThid
++
++C     !LOCAL VARIABLES:
++C     == Local variables
++C     rhoK, rhoKm1  :: Density at current level, and level above
++C     iMin, iMax    :: Ranges and sub-block indices on which calculations
++C     jMin, jMax       are applied.
++C     bi, bj        :: tile indices
++C     msgBuf        :: Temp. for building output string
++C     i,j,k         :: loop indices
++      _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
++      _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
++      _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
++      _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
++      _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
++      INTEGER iMin, iMax
++      INTEGER jMin, jMax
++      INTEGER bi, bj
++      INTEGER i, j, k
++      CHARACTER*(MAX_LEN_MBUF) msgBuf
++      INTEGER doDiagsRho
++      LOGICAL calcGMRedi, calcKPP, calcConvect
++#ifdef ALLOW_DIAGNOSTICS
++      LOGICAL  DIAGNOSTICS_IS_ON
++      EXTERNAL DIAGNOSTICS_IS_ON
++#endif /* ALLOW_DIAGNOSTICS */
++#ifdef ALLOW_AUTODIFF
++      _RL thetaRef
++#endif /* ALLOW_AUTODIFF */
++CEOP
++
++#ifdef ALLOW_AUTODIFF_TAMC
++C--   dummy statement to end declaration part
++      itdkey = 1
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++#ifdef ALLOW_DEBUG
++      IF (debugMode) CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
++#endif
++
++      doDiagsRho = 0
++#ifdef ALLOW_DIAGNOSTICS
++      IF ( useDiagnostics .AND. fluidIsWater ) THEN
++        IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
++     &       doDiagsRho = doDiagsRho + 1
++        IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
++     &       doDiagsRho = doDiagsRho + 2
++        IF ( DIAGNOSTICS_IS_ON('WdRHO_P ',myThid) )
++     &       doDiagsRho = doDiagsRho + 4
++        IF ( DIAGNOSTICS_IS_ON('WdRHOdP ',myThid) )
++     &       doDiagsRho = doDiagsRho + 8
++      ENDIF
++#endif /* ALLOW_DIAGNOSTICS */
++
++      calcGMRedi  = useGMRedi
++      calcKPP     = useKPP
++      calcConvect = ivdc_kappa.NE.0.
++#ifdef ALLOW_OFFLINE
++      IF ( useOffLine ) THEN
++        calcGMRedi = useGMRedi .AND. .NOT.offlineLoadGMRedi
++        calcKPP    = useKPP    .AND. .NOT.offlineLoadKPP
++        calcConvect=calcConvect.AND. .NOT.offlineLoadConvec
++      ENDIF
++#endif /* ALLOW_OFFLINE */
++
++#ifdef  ALLOW_OBCS
++      IF (useOBCS) THEN
++C--   Calculate future values on open boundaries
++C--   moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
++# ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE salt  = comlev1, key=ikey_dynamics, kind=isbyte
++# endif
++# ifdef ALLOW_DEBUG
++       IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
++# endif
++       CALL OBCS_CALC( myTime+deltaTClock, myIter+1,
++     I                 uVel, vVel, wVel, theta, salt, myThid )
++      ENDIF
++#endif  /* ALLOW_OBCS */
++
++#ifdef ALLOW_OCN_COMPON_INTERF
++C--    Apply imported data (from coupled interface) to forcing fields
++C jmc: moved here before any freezing/seaice pkg adjustment of surf-fluxes
++      IF ( useCoupler ) THEN
++         CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_OCN_COMPON_INTERF */
++
++#ifdef ALLOW_AUTODIFF
++# ifdef ALLOW_SALT_PLUME
++      DO bj=myByLo(myThid),myByHi(myThid)
++       DO bi=myBxLo(myThid),myBxHi(myThid)
++        DO j=1-OLy,sNy+OLy
++         DO i=1-OLx,sNx+OLx
++          saltPlumeDepth(i,j,bi,bj) = 0. _d 0
++          saltPlumeFlux(i,j,bi,bj)  = 0. _d 0
++         ENDDO
++        ENDDO
++       ENDDO
++      ENDDO
++# endif
++# ifdef ALLOW_ECCO
++#  ifdef ALLOW_SIGMAR_COST_CONTRIBUTION
++      DO bj=myByLo(myThid),myByHi(myThid)
++       DO bi=myBxLo(myThid),myBxHi(myThid)
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++           sigmaRfield(i,j,k,bi,bj) = 0. _d 0
++          ENDDO
++         ENDDO
++        ENDDO
++       ENDDO
++      ENDDO
++#  endif
++# endif
++#endif /* ALLOW_AUTODIFF */
++
++#ifdef ALLOW_FRAZIL
++      IF ( useFRAZIL ) THEN
++C--   Freeze water in the ocean interior and let it rise to the surface
++CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE salt  = comlev1, key=ikey_dynamics, kind=isbyte
++       CALL FRAZIL_CALC_RHS( myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_FRAZIL */
++
++#ifndef OLD_THSICE_CALL_SEQUENCE
++#if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
++      IF ( useThSIce .AND. fluidIsWater ) THEN
++# ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE uice,vice         = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE snowHeight, Tsrf  = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE Qice1, Qice2      = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE sHeating, snowAge = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE hocemxl = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE icflxsw = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE salt,theta        = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE uvel,vvel         = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE qnet,qsw, empmr   = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE atemp,aqh,precip  = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE swdown,lwdown     = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  ifdef NONLIN_FRSURF
++CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++# endif /* ALLOW_AUTODIFF_TAMC */
++# ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
++# endif
++C--     Step forward Therm.Sea-Ice variables
++C       and modify forcing terms including effects from ice
++        CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
++        CALL THSICE_MAIN( myTime, myIter, myThid )
++        CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
++      ENDIF
++#endif /* ALLOW_THSICE */
++#endif /* ndef OLD_THSICE_CALL_SEQUENCE */
++
++#ifdef ALLOW_SEAICE
++# ifdef ALLOW_AUTODIFF
++CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE fu,fv  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE qnet   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE qsw    = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE theta  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE salt   = comlev1, key=ikey_dynamics, kind=isbyte
++#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
++CADJ STORE evap   = comlev1, key=ikey_dynamics, kind=isbyte
++#endif
++      IF ( .NOT.useSEAICE .AND. SEAICEadjMODE .EQ. -1 ) THEN
++        CALL SEAICE_FAKE( myTime, myIter, myThid )
++      ENDIF
++CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE fu,fv  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE qnet   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE qsw    = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE theta  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE salt   = comlev1, key=ikey_dynamics, kind=isbyte
++#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
++CADJ STORE evap   = comlev1, key=ikey_dynamics, kind=isbyte
++#endif
++# endif /* ALLOW_AUTODIFF */
++#endif /* ALLOW_SEAICE */
++
++#ifdef ALLOW_SEAICE
++      IF ( useSEAICE ) THEN
++# ifdef ALLOW_AUTODIFF_TAMC
++cph-adj-test(
++CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE hsnow  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE heff   = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE tices  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE empmr, qnet  = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE qsw,saltflux = comlev1, key=ikey_dynamics, kind=isbyte
++CADJ STORE fu, fv = comlev1, key=ikey_dynamics, kind=isbyte
++cCADJ STORE theta  = comlev1, key=ikey_dynamics, kind=isbyte
++cCADJ STORE salt   = comlev1, key=ikey_dynamics, kind=isbyte
++cph-adj-test)
++c#ifdef ALLOW_EXF
++CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE evap                = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE uwind,vwind         = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++c#endif
++CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  ifdef SEAICE_CGRID
++CADJ STORE stressdivergencex   = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE stressdivergencey   = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++#  ifdef SEAICE_ALLOW_DYNAMICS
++CADJ STORE uice                = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE vice                = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE dwatn               = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#   ifdef SEAICE_ALLOW_EVP
++CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#   endif
++#  endif
++#  ifdef SEAICE_VARIABLE_SALINITY
++CADJ STORE hsalt               = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++#  ifdef ATMOSPHERIC_LOADING
++CADJ STORE pload               = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE siceload            = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++#  ifdef NONLIN_FRSURF
++CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++#  ifdef ANNUAL_BALANCE
++CADJ STORE balance_itcount     = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif /* ANNUAL_BALANCE */
++#  ifdef ALLOW_THSICE
++C-- store thSIce vars before advection (called from SEAICE_MODEL) update them:
++CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE snowHeight, hOceMxL = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE Qice1, Qice2  = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif /* ALLOW_THSICE */
++# endif /* ALLOW_AUTODIFF_TAMC */
++# ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid)
++# endif
++        CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
++        CALL SEAICE_MODEL( myTime, myIter, myThid )
++        CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
++# ifdef ALLOW_COST
++        CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
++# endif
++      ENDIF
++#endif /* ALLOW_SEAICE */
++
++#if (defined ALLOW_OCN_COMPON_INTERF) && (defined ALLOW_THSICE)
++C--   After seaice-dyn and advection of pkg/thsice fields,
++C     Export ocean coupling fields to coupled interface (only with pkg/thsice)
++      IF ( useCoupler ) THEN
++# ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('OCN_EXPORT_DATA',myThid)
++# endif
++         CALL TIMER_START('OCN_EXPORT_DATA [DO_OCEANIC_PHYS]', myThid)
++         CALL OCN_EXPORT_DATA( myTime, myIter, myThid )
++         CALL TIMER_STOP ('OCN_EXPORT_DATA [DO_OCEANIC_PHYS]', myThid)
++      ENDIF
++#endif /* ALLOW_OCN_COMPON_INTERF & ALLOW_THSICE */
++
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE qsw                = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++# ifdef ALLOW_SEAICE
++CADJ STORE area               = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++# endif
++#endif
++
++#ifdef OLD_THSICE_CALL_SEQUENCE
++#if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
++      IF ( useThSIce .AND. fluidIsWater ) THEN
++# ifdef ALLOW_AUTODIFF_TAMC
++cph(
++#  ifdef NONLIN_FRSURF
++CADJ STORE uice,vice        = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE salt,theta       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE qnet,qsw, empmr  = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#  endif
++# endif
++# ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
++# endif
++C--     Step forward Therm.Sea-Ice variables
++C       and modify forcing terms including effects from ice
++        CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
++        CALL THSICE_MAIN( myTime, myIter, myThid )
++        CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
++      ENDIF
++#endif /* ALLOW_THSICE */
++#endif /* OLD_THSICE_CALL_SEQUENCE */
++
++#define ALLOW_CPL_ISSM
++#ifdef ALLOW_CPL_ISSM
++      CALL CPL_ISSM( myTime, myIter, myThid )
++#endif
++
++#ifdef ALLOW_SHELFICE
++      IF ( useShelfIce .AND. fluidIsWater ) THEN
++#ifdef ALLOW_DEBUG
++       IF (debugMode) CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
++#endif
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++CADJ STORE uvel, vvel = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#endif
++C     compute temperature and (virtual) salt flux at the
++C     shelf-ice ocean interface
++       CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
++     &       myThid)
++       CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
++       CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
++     &      myThid)
++      ENDIF
++#endif /* ALLOW_SHELFICE */
++
++#ifdef ALLOW_ICEFRONT
++      IF ( useICEFRONT .AND. fluidIsWater ) THEN
++#ifdef ALLOW_DEBUG
++       IF (debugMode) CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
++#endif
++C     compute temperature and (virtual) salt flux at the
++C     ice-front ocean interface
++       CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
++     &       myThid)
++       CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
++       CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
++     &      myThid)
++      ENDIF
++#endif /* ALLOW_ICEFRONT */
++
++#ifdef ALLOW_SALT_PLUME
++      IF ( useSALT_PLUME ) THEN
++Catn: exchanging saltPlumeFlux:
++          CALL SALT_PLUME_DO_EXCH( myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_SALT_PLUME */
++
++C--   Freeze water at the surface
++      IF ( allowFreezing ) THEN
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE theta = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#endif
++        CALL FREEZE_SURFACE( myTime, myIter, myThid )
++      ENDIF
++
++      iMin = 1-OLx
++      iMax = sNx+OLx
++      jMin = 1-OLy
++      jMax = sNy+OLy
++
++C---  Determines forcing terms based on external fields
++C     relaxation terms, etc.
++#ifdef ALLOW_AUTODIFF
++CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
++CADJ &     kind = isbyte
++#else  /* ALLOW_AUTODIFF */
++C--   if fluid is not water, by-pass surfaceForcing, find_rho, gmredi
++C     and all vertical mixing schemes, but keep OBCS_CALC
++      IF ( fluidIsWater ) THEN
++#endif /* ALLOW_AUTODIFF */
++#ifdef ALLOW_DEBUG
++      IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
++#endif
++        CALL EXTERNAL_FORCING_SURF(
++     I             iMin, iMax, jMin, jMax,
++     I             myTime, myIter, myThid )
++
++#ifdef ALLOW_AUTODIFF_TAMC
++C--   HPF directive to help TAMC
++CHPF$ INDEPENDENT
++#endif /* ALLOW_AUTODIFF_TAMC */
++      DO bj=myByLo(myThid),myByHi(myThid)
++#ifdef ALLOW_AUTODIFF_TAMC
++C--   HPF directive to help TAMC
++CHPF$ INDEPENDENT
++#endif /* ALLOW_AUTODIFF_TAMC */
++       DO bi=myBxLo(myThid),myBxHi(myThid)
++
++#ifdef ALLOW_AUTODIFF_TAMC
++          act1 = bi - myBxLo(myThid)
++          max1 = myBxHi(myThid) - myBxLo(myThid) + 1
++          act2 = bj - myByLo(myThid)
++          max2 = myByHi(myThid) - myByLo(myThid) + 1
++          act3 = myThid - 1
++          max3 = nTx*nTy
++          act4 = ikey_dynamics - 1
++          itdkey = (act1 + 1) + act2*max1
++     &                      + act3*max1*max2
++     &                      + act4*max1*max2*max3
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++C--   Set up work arrays with valid (i.e. not NaN) values
++C     These inital values do not alter the numerical results. They
++C     just ensure that all memory references are to valid floating
++C     point numbers. This prevents spurious hardware signals due to
++C     uninitialised but inert locations.
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
++           sigmaX(i,j,k) = 0. _d 0
++           sigmaY(i,j,k) = 0. _d 0
++           sigmaR(i,j,k) = 0. _d 0
++          ENDDO
++         ENDDO
++        ENDDO
++
++#ifdef ALLOW_AUTODIFF
++        DO j=1-OLy,sNy+OLy
++         DO i=1-OLx,sNx+OLx
++          rhoKm1 (i,j)   = 0. _d 0
++          rhoKp1 (i,j)   = 0. _d 0
++         ENDDO
++        ENDDO
++cph all the following init. are necessary for TAF
++cph although some of these are re-initialised later.
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++           rhoInSitu(i,j,k,bi,bj) = 0.
++# ifdef ALLOW_GGL90
++           GGL90viscArU(i,j,k,bi,bj)  = 0. _d 0
++           GGL90viscArV(i,j,k,bi,bj)  = 0. _d 0
++           GGL90diffKr(i,j,k,bi,bj)  = 0. _d 0
++# endif /* ALLOW_GGL90 */
++# ifdef ALLOW_SALT_PLUME
++#  ifdef SALT_PLUME_VOLUME
++           SPforcingS(i,j,k,bi,bj) = 0. _d 0
++           SPforcingT(i,j,k,bi,bj) = 0. _d 0
++#  endif
++# endif /* ALLOW_SALT_PLUME */
++          ENDDO
++         ENDDO
++        ENDDO
++#ifdef ALLOW_OFFLINE
++       IF ( calcConvect ) THEN
++#endif
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++           IVDConvCount(i,j,k,bi,bj) = 0.
++          ENDDO
++         ENDDO
++        ENDDO
++#ifdef ALLOW_OFFLINE
++       ENDIF
++       IF ( calcGMRedi ) THEN
++#endif
++# ifdef ALLOW_GMREDI
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++           Kwx(i,j,k,bi,bj)  = 0. _d 0
++           Kwy(i,j,k,bi,bj)  = 0. _d 0
++           Kwz(i,j,k,bi,bj)  = 0. _d 0
++#  ifdef GM_NON_UNITY_DIAGONAL
++           Kux(i,j,k,bi,bj)  = 0. _d 0
++           Kvy(i,j,k,bi,bj)  = 0. _d 0
++#  endif
++#  ifdef GM_EXTRA_DIAGONAL
++           Kuz(i,j,k,bi,bj)  = 0. _d 0
++           Kvz(i,j,k,bi,bj)  = 0. _d 0
++#  endif
++#  ifdef GM_BOLUS_ADVEC
++           GM_PsiX(i,j,k,bi,bj)  = 0. _d 0
++           GM_PsiY(i,j,k,bi,bj)  = 0. _d 0
++#  endif
++#  ifdef GM_VISBECK_VARIABLE_K
++           VisbeckK(i,j,bi,bj)   = 0. _d 0
++#  endif
++          ENDDO
++         ENDDO
++        ENDDO
++# endif /* ALLOW_GMREDI */
++#ifdef ALLOW_OFFLINE
++       ENDIF
++       IF ( calcKPP ) THEN
++#endif
++# ifdef ALLOW_KPP
++        DO k=1,Nr
++         DO j=1-OLy,sNy+OLy
++          DO i=1-OLx,sNx+OLx
++           KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
++           KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
++          ENDDO
++         ENDDO
++        ENDDO
++# endif /* ALLOW_KPP */
++#ifdef ALLOW_OFFLINE
++       ENDIF
++#endif
++#endif /* ALLOW_AUTODIFF */
++
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE totphihyd(:,:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++# ifdef ALLOW_KPP
++CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++# endif
++# ifdef ALLOW_SALT_PLUME
++CADJ STORE saltplumedepth(:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE saltplumeflux(:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++# endif
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++C--   Always compute density (stored in common block) here; even when it is not
++C     needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
++#ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid)
++#endif
++#ifdef ALLOW_AUTODIFF
++        IF ( fluidIsWater ) THEN
++#endif /* ALLOW_AUTODIFF */
++#ifdef ALLOW_DOWN_SLOPE
++         IF ( useDOWN_SLOPE ) THEN
++           DO k=1,Nr
++            CALL DWNSLP_CALC_RHO(
++     I                  theta, salt,
++     O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
++     I                  k, bi, bj, myTime, myIter, myThid )
++           ENDDO
++         ENDIF
++#endif /* ALLOW_DOWN_SLOPE */
++#ifdef ALLOW_BBL
++         IF ( useBBL ) THEN
++C     pkg/bbl requires in-situ bbl density for depths equal to and deeper than the bbl.
++C     To reduce computation and storage requirement, these densities are stored in the
++C     dry grid boxes of rhoInSitu.  See BBL_CALC_RHO for details.
++           DO k=Nr,1,-1
++            CALL BBL_CALC_RHO(
++     I                  theta, salt,
++     O                  rhoInSitu,
++     I                  k, bi, bj, myTime, myIter, myThid )
++
++           ENDDO
++         ENDIF
++#endif /* ALLOW_BBL */
++         IF ( .NOT. ( useDOWN_SLOPE .OR. useBBL ) ) THEN
++           DO k=1,Nr
++            CALL FIND_RHO_2D(
++     I                iMin, iMax, jMin, jMax, k,
++     I                theta(1-OLx,1-OLy,k,bi,bj),
++     I                salt (1-OLx,1-OLy,k,bi,bj),
++     O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
++     I                k, bi, bj, myThid )
++           ENDDO
++         ENDIF
++#ifdef ALLOW_AUTODIFF
++        ELSE
++C-        fluid is not water:
++          DO k=1,Nr
++           IF ( select_rStar.GE.1 .OR. selectSigmaCoord.GE.1 ) THEN
++C-    isothermal (theta=const) reference state
++             thetaRef = thetaConst
++           ELSE
++C-    horizontally uniform (tRef) reference state
++             thetaRef = tRef(k)
++           ENDIF
++           DO j=1-OLy,sNy+OLy
++            DO i=1-OLx,sNx+OLx
++             rhoInSitu(i,j,k,bi,bj) =
++     &         ( theta(i,j,k,bi,bj)
++     &              *( salt(i,j,k,bi,bj)*atm_Rq + oneRL )
++     &         - thetaRef )*maskC(i,j,k,bi,bj)
++            ENDDO
++           ENDDO
++          ENDDO
++        ENDIF
++#endif /* ALLOW_AUTODIFF */
++
++#ifdef ALLOW_DEBUG
++        IF (debugMode) THEN
++          WRITE(msgBuf,'(A,2(I4,A))')
++     &         'ENTERING UPWARD K LOOP (bi=', bi, ', bj=', bj,')'
++          CALL DEBUG_MSG(msgBuf(1:43),myThid)
++        ENDIF
++#endif
++
++C--     Start of diagnostic loop
++        DO k=Nr,1,-1
++
++#ifdef ALLOW_AUTODIFF_TAMC
++C? Patrick, is this formula correct now that we change the loop range?
++C? Do we still need this?
++cph kkey formula corrected.
++cph Needed for rhoK, rhoKm1, in the case useGMREDI.
++          kkey = (itdkey-1)*Nr + k
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++c#ifdef ALLOW_AUTODIFF_TAMC
++cCADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
++cCADJ &     kind = isbyte
++cCADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
++cCADJ &     kind = isbyte
++c#endif /* ALLOW_AUTODIFF_TAMC */
++
++C--       Calculate gradients of potential density for isoneutral
++C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
++          IF ( calcGMRedi .OR. (k.GT.1 .AND. calcConvect)
++     &         .OR. usePP81 .OR. useKL10
++     &         .OR. useMY82 .OR. useGGL90
++     &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
++            IF (k.GT.1) THEN
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
++CADJ &     kind = isbyte
++CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
++CADJ &     kind = isbyte
++CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
++CADJ &     kind = isbyte
++#endif /* ALLOW_AUTODIFF_TAMC */
++             CALL FIND_RHO_2D(
++     I                 iMin, iMax, jMin, jMax, k,
++     I                 theta(1-OLx,1-OLy,k-1,bi,bj),
++     I                 salt (1-OLx,1-OLy,k-1,bi,bj),
++     O                 rhoKm1,
++     I                 k-1, bi, bj, myThid )
++            ENDIF
++#ifdef ALLOW_DEBUG
++            IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid)
++#endif
++cph Avoid variable aliasing for adjoint !!!
++            DO j=jMin,jMax
++             DO i=iMin,iMax
++              rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
++             ENDDO
++            ENDDO
++            CALL GRAD_SIGMA(
++     I             bi, bj, iMin, iMax, jMin, jMax, k,
++     I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
++     O             sigmaX, sigmaY, sigmaR,
++     I             myThid )
++#ifdef ALLOW_ECCO
++# ifdef ALLOW_SIGMAR_COST_CONTRIBUTION
++            DO j=jMin,jMax
++             DO i=iMin,iMax
++              sigmaRfield(i,j,k,bi,bj)=sigmaR(i,j,k)
++             ENDDO
++            ENDDO
++# endif
++#endif /* ALLOW_ECCO */
++#ifdef ALLOW_AUTODIFF
++#ifdef GMREDI_WITH_STABLE_ADJOINT
++cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
++cgf -> cuts adjoint dependency from slope to state
++            CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
++            CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
++            CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
++#endif
++#endif /* ALLOW_AUTODIFF */
++          ENDIF
++
++C--       Implicit Vertical Diffusion for Convection
++          IF (k.GT.1 .AND. calcConvect) THEN
++#ifdef ALLOW_DEBUG
++            IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid)
++#endif
++            CALL CALC_IVDC(
++     I        bi, bj, iMin, iMax, jMin, jMax, k,
++     I        sigmaR,
++     I        myTime, myIter, myThid)
++          ENDIF
++
++#ifdef ALLOW_DIAGNOSTICS
++          IF ( doDiagsRho.GE.4 ) THEN
++            CALL DIAGS_RHO_L( doDiagsRho, k, bi, bj,
++     I                        rhoInSitu(1-OLx,1-OLy,1,bi,bj),
++     I                        rhoKm1, wVel,
++     I                        myTime, myIter, myThid )
++          ENDIF
++#endif
++
++C--     end of diagnostic k loop (Nr:1)
++        ENDDO
++
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE IVDConvCount(:,:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++#endif
++
++C--     Diagnose Mixed Layer Depth:
++        IF ( calcGMRedi .OR. MOD(doDiagsRho,2).EQ.1 ) THEN
++          CALL CALC_OCE_MXLAYER(
++     I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
++     I              bi, bj, myTime, myIter, myThid )
++        ENDIF
++
++#ifdef ALLOW_SALT_PLUME
++        IF ( useSALT_PLUME ) THEN
++          CALL SALT_PLUME_CALC_DEPTH(
++     I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
++     I              bi, bj, myTime, myIter, myThid )
++#ifdef SALT_PLUME_VOLUME
++          CALL SALT_PLUME_VOLFRAC(
++     I              bi, bj, myTime, myIter, myThid )
++C-- get forcings for kpp
++          CALL SALT_PLUME_APPLY(
++     I              1, bi, bj, recip_hFacC(1-OLx,1-OLy,1,bi,bj),
++     I              theta, 0,
++     I              myTime, myIter, myThid )
++          CALL SALT_PLUME_APPLY(
++     I              2, bi, bj, recip_hFacC(1-OLx,1-OLy,1,bi,bj),
++     I              salt, 0,
++     I              myTime, myIter, myThid )
++C-- need to call this S/R from here to apply just before kpp
++          CALL SALT_PLUME_FORCING_SURF(
++     I              bi, bj, iMin, iMax, jMin, jMax,
++     I              myTime, myIter, myThid )
++#endif /* SALT_PLUME_VOLUME */
++        ENDIF
++#endif /* ALLOW_SALT_PLUME */
++
++#ifdef ALLOW_DIAGNOSTICS
++        IF ( MOD(doDiagsRho,4).GE.2 ) THEN
++          CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
++     &         2, bi, bj, myThid)
++        ENDIF
++#endif /* ALLOW_DIAGNOSTICS */
++
++C--    This is where EXTERNAL_FORCING_SURF(bi,bj) used to be called;
++C      now called earlier, before bi,bj loop.
++
++#ifdef ALLOW_AUTODIFF_TAMC
++cph needed for KPP
++CADJ STORE surfaceForcingU(:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE surfaceForcingV(:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE surfaceForcingS(:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE surfaceForcingT(:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE surfaceForcingTice(:,:,bi,bj)
++CADJ &     = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++#ifdef  ALLOW_KPP
++C--     Compute KPP mixing coefficients
++        IF ( calcKPP ) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid)
++#endif
++          CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
++          CALL KPP_CALC(
++     I                  bi, bj, myTime, myIter, myThid )
++          CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
++#if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE)
++        ELSE
++          CALL KPP_CALC_DUMMY(
++     I                  bi, bj, myTime, myIter, myThid )
++#endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */
++        ENDIF
++#endif  /* ALLOW_KPP */
++
++#ifdef  ALLOW_PP81
++C--     Compute PP81 mixing coefficients
++        IF (usePP81) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid)
++#endif
++          CALL PP81_CALC(
++     I                     bi, bj, sigmaR, myTime, myIter, myThid )
++        ENDIF
++#endif /* ALLOW_PP81 */
++
++#ifdef  ALLOW_KL10
++C--     Compute KL10 mixing coefficients
++        IF (useKL10) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('KL10_CALC',myThid)
++#endif
++          CALL KL10_CALC(
++     I                     bi, bj, sigmaR, myTime, myIter, myThid )
++        ENDIF
++#endif /* ALLOW_KL10 */
++
++#ifdef  ALLOW_MY82
++C--     Compute MY82 mixing coefficients
++        IF (useMY82) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid)
++#endif
++          CALL MY82_CALC(
++     I                     bi, bj, sigmaR, myTime, myIter, myThid )
++        ENDIF
++#endif /* ALLOW_MY82 */
++
++#ifdef  ALLOW_GGL90
++#ifdef ALLOW_AUTODIFF_TAMC
++CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++#endif /* ALLOW_AUTODIFF_TAMC */
++C--     Compute GGL90 mixing coefficients
++        IF (useGGL90) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('GGL90_CALC',myThid)
++#endif
++          CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
++          CALL GGL90_CALC(
++     I                     bi, bj, sigmaR, myTime, myIter, myThid )
++          CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
++        ENDIF
++#endif /* ALLOW_GGL90 */
++
++#ifdef ALLOW_TIMEAVE
++        IF ( taveFreq.GT. 0. _d 0 ) THEN
++          CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
++        ENDIF
++        IF ( taveFreq.GT.0. .AND. calcConvect ) THEN
++          CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
++     I                           Nr, deltaTClock, bi, bj, myThid)
++        ENDIF
++#endif /* ALLOW_TIMEAVE */
++
++#ifdef ALLOW_GMREDI
++#ifdef ALLOW_AUTODIFF_TAMC
++# ifndef GM_EXCLUDE_CLIPPING
++cph storing here is needed only for one GMREDI_OPTIONS:
++cph define GM_BOLUS_ADVEC
++cph keep it although TAF says you dont need to.
++cph but I have avoided the #ifdef for now, in case more things change
++CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
++CADJ &     kind = isbyte
++# endif
++#endif /* ALLOW_AUTODIFF_TAMC */
++
++C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
++        IF ( calcGMRedi ) THEN
++#ifdef ALLOW_DEBUG
++          IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
++#endif
++          CALL GMREDI_CALC_TENSOR(
++     I             iMin, iMax, jMin, jMax,
++     I             sigmaX, sigmaY, sigmaR,
++     I             bi, bj, myTime, myIter, myThid )
++#if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE)
++        ELSE
++          CALL GMREDI_CALC_TENSOR_DUMMY(
++     I             iMin, iMax, jMin, jMax,
++     I             sigmaX, sigmaY, sigmaR,
++     I             bi, bj, myTime, myIter, myThid )
++#endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */
++        ENDIF
++#endif /* ALLOW_GMREDI */
++
++#ifdef ALLOW_DOWN_SLOPE
++        IF ( useDOWN_SLOPE ) THEN
++C--     Calculate Downsloping Flow for Down_Slope parameterization
++         IF ( usingPCoords ) THEN
++          CALL DWNSLP_CALC_FLOW(
++     I                bi, bj, kSurfC, rhoInSitu,
++     I                myTime, myIter, myThid )
++         ELSE
++          CALL DWNSLP_CALC_FLOW(
++     I                bi, bj, kLowC, rhoInSitu,
++     I                myTime, myIter, myThid )
++         ENDIF
++        ENDIF
++#endif /* ALLOW_DOWN_SLOPE */
++
++C--   end bi,bj loops.
++       ENDDO
++      ENDDO
++
++#ifndef ALLOW_AUTODIFF
++C---  if fluid Is Water: end
++      ENDIF
++#endif
++
++#ifdef ALLOW_OFFLINE
++      IF ( useOffLine ) THEN
++#ifdef ALLOW_DEBUG
++        IF (debugMode) CALL DEBUG_CALL('OFFLINE_GET_DIFFUS',myThid)
++#endif /* ALLOW_DEBUG */
++        CALL OFFLINE_GET_DIFFUS( myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_OFFLINE */
++
++#ifdef ALLOW_BBL
++      IF ( useBBL ) THEN
++       CALL BBL_CALC_RHS(
++     I                          myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_BBL */
++
++#ifdef ALLOW_MYPACKAGE
++      IF ( useMYPACKAGE ) THEN
++       CALL MYPACKAGE_CALC_RHS(
++     I                          myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_MYPACKAGE */
++
++#ifdef ALLOW_GMREDI
++      IF ( calcGMRedi ) THEN
++        CALL GMREDI_DO_EXCH( myTime, myIter, myThid )
++      ENDIF
++#endif /* ALLOW_GMREDI */
++
++#ifdef ALLOW_KPP
++      IF ( calcKPP ) THEN
++        CALL KPP_DO_EXCH( myThid )
++      ENDIF
++#endif /* ALLOW_KPP */
++
++#ifdef ALLOW_DIAGNOSTICS
++      IF ( fluidIsWater .AND. useDiagnostics ) THEN
++        CALL DIAGS_RHO_G(
++     I                    rhoInSitu, uVel, vVel, wVel,
++     I                    myTime, myIter, myThid )
++      ENDIF
++      IF ( useDiagnostics ) THEN
++        CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
++      ENDIF
++      IF ( calcConvect .AND. useDiagnostics ) THEN
++        CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
++     &                               0, Nr, 0, 1, 1, myThid )
++      ENDIF
++#ifdef ALLOW_SALT_PLUME
++      IF ( useDiagnostics )
++     &      CALL SALT_PLUME_DIAGNOSTICS_FILL(bi,bj,myThid)
++#endif
++#endif
++
++#ifdef ALLOW_DEBUG
++      IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
++#endif
++
++      RETURN
++      END
+Index: ../trunk-jpl/test/MITgcm/code/EESUPPORT.h
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/EESUPPORT.h	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/EESUPPORT.h	(revision 22532)
+@@ -0,0 +1,298 @@
++C $Header: /u/gcmpack/MITgcm/eesupp/inc/EESUPPORT.h,v 1.10 2009/04/21 16:00:53 jmc Exp $
++C $Name:  $
++CBOP
++C     !ROUTINE: EESUPPORT.h
++C     !INTERFACE:
++C     include "EESUPPORT.h"
++C
++C     !DESCRIPTION:
++C     *==========================================================*
++C     | EESUPPORT.h                                              |
++C     *==========================================================*
++C     | Support data structures for the MITgcm UV execution      |
++C     | environment code. This data should be private to the     |
++C     | execution environment routines. Data which needs to be   |
++C     | accessed directly by a numerical model goes in           |
++C     | EEPARAMS.h.                                              |
++C     *==========================================================*
++CEOP
++
++C     ERROR_HEADER        - String which prefixes error messages
++      CHARACTER*(*) ERROR_HEADER
++      PARAMETER ( ERROR_HEADER = ' *** ERROR ***' )
++C     PROCESS_HEADER      - String which prefixes processor number
++      CHARACTER*(*) PROCESS_HEADER
++      PARAMETER ( PROCESS_HEADER = 'PID.TID' )
++
++C     MAX_NUM_COMM_MODES - Maximum number of communication modes
++C     COMM_NONE       - No edge communication
++C     COMM_MSG        - Use messages to communicate edges
++C     COMM_PUT        - Use put to communicate edges
++C     COMM_GET        - Use get to communicate edges
++C     Note - commName holds an identifying name for each communication
++C            mode. The COMM_ parameters are used to index commName
++C            so the COMM_ parameters need to be in the range
++C            1 : MAX_NUM_COMM_MODES.
++      INTEGER MAX_NUM_COMM_MODES
++      PARAMETER ( MAX_NUM_COMM_MODES = 4 )
++      INTEGER COMM_NONE
++      PARAMETER ( COMM_NONE   =   1 )
++      INTEGER COMM_MSG
++      PARAMETER ( COMM_MSG    =   2 )
++      INTEGER COMM_PUT
++      PARAMETER ( COMM_PUT    =   3 )
++      INTEGER COMM_GET
++      PARAMETER ( COMM_GET    =   4 )
++      COMMON /EESUPP_COMMNAME/ commName
++      CHARACTER*10 commName(MAX_NUM_COMM_MODES)
++
++C     Tile identifiers
++C     Tiles have a number that is unique over the global domain.
++C     A tile that is not there has its number set to NULL_TILE
++      INTEGER NULL_TILE
++      PARAMETER ( NULL_TILE = -1 )
++
++
++C--   COMMON /EESUPP_C/ Execution environment support character variables
++C     myProcessStr - String identifying my process number
++      COMMON /EESUPP_C/ myProcessStr
++      CHARACTER*128 myProcessStr
++
++C--   COMMON /EESUPP_L/ Execution environment support logical variables
++C     initMPError - Flag indicating error during multi-processing
++C                   initialisation.
++C     finMPError  - Flag indicating error during multi-processing
++C                   termination.
++C     ThError     - Thread detected an error.
++C     usingMPI    - Flag controlling use of MPI routines. This flag
++C                   allows either MPI or threads to be used in a
++C                   shared memory environment which can be a useful
++C                   debugging/performance analysis tool.
++C     usingSyncMessages - Flag that causes blocking communication to be used
++C                         if possible. When false non-blocking EXCH routines
++C                         will be used if possible.
++C     notUsingXPeriodicity - Flag indicating no X/Y boundary wrap around
++C     notUsingYPeriodicity   This affects the communication routines but
++C                            is generally ignored in the numerical model
++C                            code.
++C     threadIsRunning, threadIsComplete - Flags used to check for correct behaviour
++C                                         of multi-threaded code.
++C                                         threadIsRunning is used to check that the
++C                                         threads we need are running. This catches the
++C                                         situation where a program eedata file has nTthreads
++C                                         greater than the setenv PARALLEL or NCPUS variable.
++C                                         threadIsComplete is used to flag that a thread has
++C                                         reached the end of the model. This is used as a check to
++C                                         trap problems that might occur if one thread "escapes"
++C                                         the main.F master loop. This should not happen
++C                                         if the multi-threading compilation tools works right.
++C                                         But (see for example KAP) this is not always the case!
++      COMMON /EESUPP_L/ thError, threadIsRunning, threadIsComplete,
++     & allMyEdgesAreSharedMemory, usingMPI, usingSyncMessages,
++     & notUsingXPeriodicity, notUsingYPeriodicity
++      LOGICAL thError(MAX_NO_THREADS)
++      LOGICAL threadIsRunning(MAX_NO_THREADS)
++      LOGICAL threadIsComplete(MAX_NO_THREADS)
++      LOGICAL allMyEdgesAreSharedMemory(MAX_NO_THREADS)
++      LOGICAL usingMPI
++      LOGICAL usingSyncMessages
++      LOGICAL notUsingXPeriodicity
++      LOGICAL notUsingYPeriodicity
++
++C--   COMMON /EESUPP_I/ Parallel support integer globals
++C     pidW   -  Process  ID of neighbor to West
++C     pidE   -           ditto             East
++C     pidN   -           ditto             North
++C     pidS   -           ditto             South
++C              Note: pid[XY] is not necessairily the UNIX
++C                    process id - it is just an identifying
++C                    number.
++C     myPid  - My own process id
++C     nProcs - Number of processes
++C     westCommunicationMode  - Mode of communication for each tile face
++C     eastCommunicationMode
++C     northCommunicationMode
++C     southCommunicationMode
++C     bi0   - Low cartesian tile index for this process
++C     bj0     Note - In a tile distribution with holes bi0 and bj0
++C                    are not useful. Neighboring tile indices must
++C                    be derived some other way.
++C     tileNo       - Tile identification number for my tile and
++C     tileNo[WENS]   my N,S,E,W neighbor tiles.
++C     tilePid[WENS] - Process identification number for
++C                     my N,S,E,W neighbor tiles.
++C     nTx, nTy    - No. threads in X and Y. This assumes a simple
++C                   cartesian gridding of the threads which is not
++C                   required elsewhere but that makes it easier.
++      COMMON /EESUPP_I/
++     & myPid, nProcs, pidW, pidE, pidN, pidS,
++     & tileCommModeW,  tileCommModeE,
++     & tileCommModeN,  tileCommModeS,
++     & tileNo, tileNoW, tileNoE, tileNoS, tileNoN,
++     &  tilePidW, tilePidE, tilePidS, tilePidN,
++     &  tileBiW, tileBiE, tileBiS, tileBiN,
++     & tileBjW, tileBjE, tileBjS, tileBjN,
++     & tileTagSendW, tileTagSendE, tileTagSendS, tileTagSendN,
++     & tileTagRecvW, tileTagRecvE, tileTagRecvS, tileTagRecvN
++      INTEGER myPid
++      INTEGER nProcs
++      INTEGER pidW
++      INTEGER pidE
++      INTEGER pidN
++      INTEGER pidS
++      INTEGER tileCommModeW ( nSx, nSy )
++      INTEGER tileCommModeE ( nSx, nSy )
++      INTEGER tileCommModeN ( nSx, nSy )
++      INTEGER tileCommModeS ( nSx, nSy )
++      INTEGER tileNo( nSx, nSy )
++      INTEGER tileNoW( nSx, nSy )
++      INTEGER tileNoE( nSx, nSy )
++      INTEGER tileNoN( nSx, nSy )
++      INTEGER tileNoS( nSx, nSy )
++      INTEGER tilePidW( nSx, nSy )
++      INTEGER tilePidE( nSx, nSy )
++      INTEGER tilePidN( nSx, nSy )
++      INTEGER tilePidS( nSx, nSy )
++      INTEGER tileBiW( nSx, nSy )
++      INTEGER tileBiE( nSx, nSy )
++      INTEGER tileBiN( nSx, nSy )
++      INTEGER tileBiS( nSx, nSy )
++      INTEGER tileBjW( nSx, nSy )
++      INTEGER tileBjE( nSx, nSy )
++      INTEGER tileBjN( nSx, nSy )
++      INTEGER tileBjS( nSx, nSy )
++      INTEGER tileTagSendW( nSx, nSy )
++      INTEGER tileTagSendE( nSx, nSy )
++      INTEGER tileTagSendN( nSx, nSy )
++      INTEGER tileTagSendS( nSx, nSy )
++      INTEGER tileTagRecvW( nSx, nSy )
++      INTEGER tileTagRecvE( nSx, nSy )
++      INTEGER tileTagRecvN( nSx, nSy )
++      INTEGER tileTagRecvS( nSx, nSy )
++
++#ifdef ALLOW_USE_MPI
++C--   Include MPI standard Fortran header file
++#include "mpif.h"
++#define _mpiTRUE_  1
++#define _mpiFALSE_ 0
++
++C--   COMMON /EESUPP_MPI_I/ MPI parallel support integer globals
++C     mpiPidW   - MPI process id for west neighbor.
++C     mpiPidE   - MPI process id for east neighbor.
++C     mpiPidN   - MPI process id for north neighbor.
++C     mpiPidS   - MPI process id for south neighbor.
++C     mpiPidNW  - MPI process id for northwest neighbor.
++C     mpiPidNE  - MPI process id for northeast neighbor.
++C     mpiPidSW  - MPI process id for southwest neighbor.
++C     mpiPidSE  - MPI process id for southeast neighbor.
++C     mpiPidIO  - MPI process to use for IO.
++C     mpiNprocs - No. of MPI processes.
++C     mpiMyId   - MPI process id of me.
++C     mpiComm   - MPI communicator to use.
++C     mpiPx     - My MPI proc. grid X coord
++C     mpiPy     - My MPI proc. grid Y coord
++C     mpiXGlobalLo - My bottom-left (south-west) x-coordinate in
++C                    global domain.
++C     mpiYGlobalLo - My bottom-left (south-west) y-coordinate in
++C                    global domain.
++C     mpiTypeXFaceBlock_xy_r4  - Primitives for communicating edge
++C     mpiTypeXFaceBlock_xy_r8    of a block.
++C     mpiTypeYFaceBlock_xy_r4    XFace is used in east-west transfer
++C     mpiTypeYFaceBlock_xy_r8    YFace is used in nrth-south transfer
++C     mpiTypeXFaceBlock_xyz_r4   xy is used in two-dimensional arrays
++C     mpiTypeXFaceBlock_xyz_r8   xyz is used with three-dimensional arrays
++C     mpiTypeYFaceBlock_xyz_r4   r4 is used for real*4 data
++C     mpiTypeYFaceBlock_xyz_r8   r8 is used for real*8 data
++C     mpiTypeXFaceThread_xy_r4  - Composites of the above primitives
++C     mpiTypeXFaceThread_xy_r8    for communicating edges of all blocks
++C     mpiTypeYFaceThread_xy_r4    owned by a thread.
++C     mpiTypeYFaceThread_xy_r8
++C     mpiTypeXFaceThread_xyz_r4
++C     mpiTypeXFaceThread_xyz_r8
++C     mpiTypeYFaceThread_xyz_r4
++C     mpiTypeYFaceBlock_xyz_r8
++C     mpiTagE       - Tags are needed to mark requests when MPI is running
++C     mpiTagW         between multithreaded processes or when the same process.
++C     mpiTagS         is a neighbor in more than one direction. The tags ensure that
++C     mpiTagN         a thread will get the message it is looking for.
++C     mpiTagSW        The scheme adopted is to tag messages according to
++C     mpiTagSE        the direction they are travelling. Thus a message
++C     mpiTagNW        travelling east is tagged mpiTagE. However, in a
++C     mpiTagNE        multi-threaded environemnt several messages could
++C                     be travelling east from the same process at the
++C                     same time. The tag is therefore modified to
++C                     be mpiTag[EWS...]*nThreads+myThid. This requires that
++C                     each thread also know the thread ids of its "neighbor"
++C                     threads.
++      COMMON /EESUPP_MPI_I/
++     & mpiPidW,  mpiPidE,  mpiPidS,  mpiPidN,
++     & mpiPidSE, mpiPidSW, mpiPidNE, mpiPidNW,
++     & mpiPidIo, mpiMyId, mpiNProcs, mpiComm,
++     & mpiPx, mpiPy, mpiXGlobalLo, mpiYGlobalLo,
++     & mpiTypeXFaceBlock_xy_r4, mpiTypeXFaceBlock_xy_r8,
++     & mpiTypeYFaceBlock_xy_r4, mpiTypeYFaceBlock_xy_r8,
++     & mpiTypeXFaceBlock_xyz_r4, mpiTypeXFaceBlock_xyz_r8,
++     & mpiTypeYFaceBlock_xyz_r4, mpiTypeYFaceBlock_xyz_r8,
++     & mpiTypeXFaceThread_xy_r4, mpiTypeXFaceThread_xy_r8,
++     & mpiTypeYFaceThread_xy_r4, mpiTypeYFaceThread_xy_r8,
++     & mpiTypeXFaceThread_xyz_r4, mpiTypeXFaceThread_xyz_r8,
++     & mpiTypeYFaceThread_xyz_r4, mpiTypeYFaceThread_xyz_r8,
++     & mpiTagE, mpiTagW, mpiTagN, mpiTagS,
++     & mpiTagSE, mpiTagSW, mpiTagNW, mpiTagNE
++
++      INTEGER mpiPidW
++      INTEGER mpiPidE
++      INTEGER mpiPidS
++      INTEGER mpiPidN
++      INTEGER mpiPidSW
++      INTEGER mpiPidSE
++      INTEGER mpiPidNW
++      INTEGER mpiPidNE
++      INTEGER mpiPidIO
++      INTEGER mpiMyId
++      INTEGER mpiNProcs
++      INTEGER mpiComm
++      INTEGER mpiPx
++      INTEGER mpiPy
++      INTEGER mpiXGlobalLo
++      INTEGER mpiYGlobalLo
++      INTEGER mpiTypeXFaceBlock_xy_r4
++      INTEGER mpiTypeXFaceBlock_xy_r8
++      INTEGER mpiTypeYFaceBlock_xy_r4
++      INTEGER mpiTypeYFaceBlock_xy_r8
++      INTEGER mpiTypeXFaceBlock_xyz_r4
++      INTEGER mpiTypeXFaceBlock_xyz_r8
++      INTEGER mpiTypeYFaceBlock_xyz_r4
++      INTEGER mpiTypeYFaceBlock_xyz_r8
++      INTEGER mpiTypeXFaceThread_xy_r4(MAX_NO_THREADS)
++      INTEGER mpiTypeXFaceThread_xy_r8(MAX_NO_THREADS)
++      INTEGER mpiTypeYFaceThread_xy_r4(MAX_NO_THREADS)
++      INTEGER mpiTypeYFaceThread_xy_r8(MAX_NO_THREADS)
++      INTEGER mpiTypeXFaceThread_xyz_r4(MAX_NO_THREADS)
++      INTEGER mpiTypeXFaceThread_xyz_r8(MAX_NO_THREADS)
++      INTEGER mpiTypeYFaceThread_xyz_r4(MAX_NO_THREADS)
++      INTEGER mpiTypeYFaceThread_xyz_r8(MAX_NO_THREADS)
++      INTEGER mpiTagNW
++      INTEGER mpiTagNE
++      INTEGER mpiTagSW
++      INTEGER mpiTagSE
++      INTEGER mpiTagW
++      INTEGER mpiTagE
++      INTEGER mpiTagN
++      INTEGER mpiTagS
++
++C--   COMMON /MPI_FULLMAP_I/ holds integer arrays of the full list of MPI process
++C     mpi_myXGlobalLo :: List of all processors bottom-left X-index in global domain
++C     mpi_myYGlobalLo :: List of all processors bottom-left Y-index in global domain
++C                        Note: needed for mpi gather/scatter routines & singleCpuIO.
++      COMMON /MPI_FULLMAP_I/
++     &        mpi_myXGlobalLo, mpi_myYGlobalLo
++      INTEGER mpi_myXGlobalLo(nPx*nPy)
++      INTEGER mpi_myYGlobalLo(nPx*nPy)
++
++C MPI communicator describing this model realization
++      COMMON /MPI_COMMS/
++     &        MPI_COMM_MODEL
++      INTEGER MPI_COMM_MODEL
++
++#endif /* ALLOW_USE_MPI */
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22532)
+@@ -0,0 +1,85 @@
++#include "PACKAGES_CONFIG.h"
++#include "CPP_OPTIONS.h"
++
++#define ALLOW_CPL_ISSM
++
++CBOP
++C     !ROUTINE: CPL_ISSM
++C     !INTERFACE:
++      SUBROUTINE CPL_ISSM( myTime, myIter, myThid )
++
++C     !DESCRIPTION: \bv
++C     *==================================================================
++C     | SUBROUTINE cpl_issm
++C     | o Couple MITgcm ocean model with ISSM ice sheet model
++C     *==================================================================
++C     \ev
++
++C     !USES:
++      IMPLICIT NONE
++C     == Global variables ==
++#include "SIZE.h"
++#include "EEPARAMS.h"
++#include "PARAMS.h"
++#include "DYNVARS.h"
++#include "GRID.h"
++#include "FFIELDS.h"
++#include "SHELFICE_OPTIONS.h"
++#include "SHELFICE.h"
++#ifdef ALLOW_EXF
++# include "EXF_OPTIONS.h"
++# include "EXF_FIELDS.h"
++#endif
++
++      LOGICAL  DIFFERENT_MULTIPLE
++      EXTERNAL DIFFERENT_MULTIPLE
++
++C     !LOCAL VARIABLES:
++C     mytime - time counter for this thread (seconds)
++C     myiter - iteration counter for this thread
++C     mythid - thread number for this instance of the routine.
++      _RL     mytime
++      INTEGER myiter, mythid 
++CEOP
++
++#ifdef ALLOW_CPL_ISSM
++#include "EESUPPORT.h"
++      COMMON /CPL_MPI_ID/
++     &     mpiMyWid, toissmcomm
++      INTEGER mpiMyWid, toissmcomm
++      integer mpistatus(MPI_STATUS_SIZE), mpiRC
++      real*8 CouplingTime, IceModelTime
++
++      print*,'choubi 1'
++      
++      IF( myTime .EQ. startTime ) THEN
++      print*,'choubi 2'
++
++C     Send deltatimestep
++       _BEGIN_MASTER( myThid )
++
++       print*,'choubi 3'
++
++         call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,toissmcomm,
++     &        mpistatus,mpiRC)
++         print*, 'Ocean received CouplingTime: ', CouplingTime
++         call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,toissmcomm,
++     &        mpistatus,mpiRC)
++         print*, 'Ocean received IceModelTime: ', IceModelTime
++         call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,toissmcomm,
++     &        mpistatus,mpiRC)
++         call MPI_Send(Nx,1,MPI_INT,0,10001003,toissmcomm,
++     &        mpistatus,mpiRC)
++         call MPI_Send(Ny,1,MPI_INT,0,10001004,toissmcomm,
++     &        mpistatus,mpiRC)
++      
++cdb      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
++cdb      print*, 'Ocean : dummy received:',dummy1
++
++      _END_MASTER( myThid )
++      ENDIF
++       
++#endif /* ALLOW_CPL_MPMICE */
++
++      RETURN
++      END
Index: /issm/oecreview/Archive/21724-22754/ISSM-22532-22533.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22532-22533.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22532-22533.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22532)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22533)
+@@ -97,6 +97,9 @@
+ 			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
++			printf("ocean time: %g \n",oceantime);
++			printf("nx size: %i \n",oceannxsize);
++			printf("ny size: %i \n",oceannysize);
+ 			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			//ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+ 			//oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22533-22534.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22533-22534.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22533-22534.diff	(revision 22755)
@@ -0,0 +1,187 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22533)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22534)
+@@ -3134,20 +3134,17 @@
+ ElementMatrix* StressbalanceAnalysis::CreateKMatrixFSViscous(Element* element){/*{{{*/
+ 
+ 	/*Intermediaries*/
+-	int         i,dim,epssize;
++	int         i,dim;
+ 	IssmDouble  viscosity,FSreconditioning,Jdet;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Get problem dimension*/
+ 	element->FindParam(&dim,DomainDimensionEnum);
+-	if(dim==2) epssize = 3;
+-	else       epssize = 6;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int vnumnodes = element->NumberofNodesVelocity();
+ 	int pnumnodes = element->NumberofNodesPressure();
+ 	int numdof    = vnumnodes*dim + pnumnodes;
+-	int bsize     = epssize + 2;
+ 
+ 	/*Prepare coordinate system list*/
+ 	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
+@@ -3156,10 +3153,9 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke     = element->NewElementMatrix(FSvelocityEnum);
+-	IssmDouble*    B      = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    Bprime = xNew<IssmDouble>(bsize*numdof);
+-	IssmDouble*    D      = xNewZeroInit<IssmDouble>(bsize*bsize);
++	ElementMatrix* Ke   = element->NewElementMatrix(FSvelocityEnum);
++	IssmDouble* vdbasis = xNew<IssmDouble>(dim*vnumnodes);
++	IssmDouble* pbasis  = xNew<IssmDouble>(pnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+@@ -3166,7 +3162,7 @@
+ 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
+ 	Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
+-	Input* vz_input;
++	Input* vz_input = NULL;
+ 	if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -3175,17 +3171,61 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+-		this->GetBFS(B,element,dim,xyz_list,gauss);
+-		this->GetBFSprime(Bprime,element,dim,xyz_list,gauss);
+-
++		element->NodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss);
++		element->NodalFunctionsPressure(pbasis,gauss);
+ 		element->material->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input);
+-		for(i=0;i<epssize;i++)     D[i*bsize+i] = + 2.*viscosity*gauss->weight*Jdet;
+-		for(i=epssize;i<bsize;i++) D[i*bsize+i] = - FSreconditioning*gauss->weight*Jdet;
+ 
+-		TripleMultiply(B,bsize,numdof,1,
+-					D,bsize,bsize,0,
+-					Bprime,bsize,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==3){
++			/*Stress balance*/
++			for(int i=0;i<vnumnodes;i++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(3*i+0)*numdof+3*j+0] += gauss->weight*Jdet*viscosity*(2.*vdbasis[0*vnumnodes+j]*vdbasis[0*vnumnodes+i] + vdbasis[1*vnumnodes+j]*vdbasis[1*vnumnodes+i] + vdbasis[2*vnumnodes+j]*vdbasis[2*vnumnodes+i]);
++					Ke->values[(3*i+0)*numdof+3*j+1] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[1*vnumnodes+i]);
++					Ke->values[(3*i+0)*numdof+3*j+2] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[2*vnumnodes+i]);
++					Ke->values[(3*i+1)*numdof+3*j+0] += gauss->weight*Jdet*viscosity*(vdbasis[1*vnumnodes+j]*vdbasis[0*vnumnodes+i]);
++					Ke->values[(3*i+1)*numdof+3*j+1] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[0*vnumnodes+i] + 2.*vdbasis[1*vnumnodes+j]*vdbasis[1*vnumnodes+i] + vdbasis[2*vnumnodes+j]*vdbasis[2*vnumnodes+i]);
++					Ke->values[(3*i+1)*numdof+3*j+2] += gauss->weight*Jdet*viscosity*(vdbasis[1*vnumnodes+j]*vdbasis[2*vnumnodes+i]);
++					Ke->values[(3*i+2)*numdof+3*j+0] += gauss->weight*Jdet*viscosity*(vdbasis[2*vnumnodes+j]*vdbasis[0*vnumnodes+i]);
++					Ke->values[(3*i+2)*numdof+3*j+1] += gauss->weight*Jdet*viscosity*(vdbasis[2*vnumnodes+j]*vdbasis[1*vnumnodes+i]);
++					Ke->values[(3*i+2)*numdof+3*j+2] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[0*vnumnodes+i] + vdbasis[1*vnumnodes+j]*vdbasis[1*vnumnodes+i] + 2.*vdbasis[2*vnumnodes+j]*vdbasis[2*vnumnodes+i]);
++				}
++				for(int k=0;k<pnumnodes;k++){
++					Ke->values[(3*i+0)*numdof+3*vnumnodes+k] += gauss->weight*Jdet*FSreconditioning*(-pbasis[k]*vdbasis[0*vnumnodes+i]);
++					Ke->values[(3*i+1)*numdof+3*vnumnodes+k] += gauss->weight*Jdet*FSreconditioning*(-pbasis[k]*vdbasis[1*vnumnodes+i]);
++					Ke->values[(3*i+2)*numdof+3*vnumnodes+k] += gauss->weight*Jdet*FSreconditioning*(-pbasis[k]*vdbasis[2*vnumnodes+i]);
++				}
++			}
++			/*Incompressibility*/
++			for(int k=0;k<pnumnodes;k++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(3*vnumnodes+k)*numdof+3*j+0] += gauss->weight*Jdet*(-FSreconditioning*vdbasis[0*vnumnodes+j]*pbasis[k]);
++					Ke->values[(3*vnumnodes+k)*numdof+3*j+1] += gauss->weight*Jdet*(-FSreconditioning*vdbasis[1*vnumnodes+j]*pbasis[k]);
++					Ke->values[(3*vnumnodes+k)*numdof+3*j+2] += gauss->weight*Jdet*(-FSreconditioning*vdbasis[2*vnumnodes+j]*pbasis[k]);
++				}
++			}
++		}
++		else{
++			/*Stress balance*/
++			for(int i=0;i<vnumnodes;i++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(2*i+0)*numdof+2*j+0] += gauss->weight*Jdet*viscosity*(2.*vdbasis[0*vnumnodes+j]*vdbasis[0*vnumnodes+i] + vdbasis[1*vnumnodes+j]*vdbasis[1*vnumnodes+i]);
++					Ke->values[(2*i+0)*numdof+2*j+1] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[1*vnumnodes+i]);
++					Ke->values[(2*i+1)*numdof+2*j+0] += gauss->weight*Jdet*viscosity*(vdbasis[1*vnumnodes+j]*vdbasis[0*vnumnodes+i]);
++					Ke->values[(2*i+1)*numdof+2*j+1] += gauss->weight*Jdet*viscosity*(vdbasis[0*vnumnodes+j]*vdbasis[0*vnumnodes+i] + 2.*vdbasis[1*vnumnodes+j]*vdbasis[1*vnumnodes+i]);
++				}
++				for(int k=0;k<pnumnodes;k++){
++					Ke->values[(2*i+0)*numdof+2*vnumnodes+k] += gauss->weight*Jdet*FSreconditioning*(-pbasis[k]*vdbasis[0*vnumnodes+i]);
++					Ke->values[(2*i+1)*numdof+2*vnumnodes+k] += gauss->weight*Jdet*FSreconditioning*(-pbasis[k]*vdbasis[1*vnumnodes+i]);
++				}
++			}
++			/*Incompressibility*/
++			for(int k=0;k<pnumnodes;k++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(2*vnumnodes+k)*numdof+2*j+0] += gauss->weight*Jdet*(-FSreconditioning*vdbasis[0*vnumnodes+j]*pbasis[k]);
++					Ke->values[(2*vnumnodes+k)*numdof+2*j+1] += gauss->weight*Jdet*(-FSreconditioning*vdbasis[1*vnumnodes+j]*pbasis[k]);
++				}
++			}
++		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -3194,9 +3234,8 @@
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	xDelete<IssmDouble>(xyz_list);
+-	xDelete<IssmDouble>(D);
+-	xDelete<IssmDouble>(Bprime);
+-	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(pbasis);
++	xDelete<IssmDouble>(vdbasis);
+ 	xDelete<int>(cs_list);
+ 	return Ke;
+ }/*}}}*/
+@@ -3705,8 +3744,7 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke = element->NewElementMatrix(FSvelocityEnum);
+-	IssmDouble*    B  = xNew<IssmDouble>(dim*numdof);
+-	IssmDouble*    D  = xNewZeroInit<IssmDouble>(dim*dim);
++	IssmDouble* vbasis=xNew<IssmDouble>(vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinatesBase(&xyz_list_base);
+@@ -3740,14 +3778,28 @@
+ 			if(gllevelset<0.) alpha2=0.;
+ 		}
+ 
+-		this->GetBFSFriction(B,element,dim,xyz_list_base,gauss);
+ 		element->JacobianDeterminantBase(&Jdet,xyz_list_base,gauss);
+-		for(int i=0;i<dim;i++) D[i*dim+i] = alpha2*gauss->weight*Jdet; //taub_x = -alpha2 v_x (same for y)
++		element->NodalFunctionsVelocity(vbasis,gauss);
+ 
+-		TripleMultiply(B,dim,numdof,1,
+-					D,dim,dim,0,
+-					B,dim,numdof,0,
+-					&Ke->values[0],1);
++		if(dim==3){
++			/*Stress balance*/
++			for(int i=0;i<vnumnodes;i++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(3*i+0)*numdof+3*j+0] += alpha2*gauss->weight*Jdet*vbasis[i]*vbasis[j];
++					Ke->values[(3*i+1)*numdof+3*j+1] += alpha2*gauss->weight*Jdet*vbasis[i]*vbasis[j];
++					Ke->values[(3*i+2)*numdof+3*j+2] += alpha2*gauss->weight*Jdet*vbasis[i]*vbasis[j];
++				}
++			}
++		}
++		else{
++			/*Stress balance*/
++			for(int i=0;i<vnumnodes;i++){
++				for(int j=0;j<vnumnodes;j++){
++					Ke->values[(2*i+0)*numdof+2*j+0] += alpha2*gauss->weight*Jdet*vbasis[i]*vbasis[j];
++					Ke->values[(2*i+1)*numdof+2*j+1] += alpha2*gauss->weight*Jdet*vbasis[i]*vbasis[j];
++				}
++			}
++		}
+ 	}
+ 
+ 	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
+@@ -3756,8 +3808,7 @@
+ 	delete gauss;
+ 	delete friction;
+ 	xDelete<IssmDouble>(xyz_list_base);
+-	xDelete<IssmDouble>(B);
+-	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(vbasis);
+ 	return Ke;
+ }/*}}}*/
+ ElementVector* StressbalanceAnalysis::CreatePVectorFS(Element* element){/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22534-22535.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22534-22535.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22534-22535.diff	(revision 22755)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22534)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22535)
+@@ -478,30 +478,6 @@
+ 	xDelete<IssmDouble>(xyz_list);
+ 	return pe;
+ }/*}}}*/
+-void           StressbalanceVerticalAnalysis::GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
+-	/*	Compute B  matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
+-		where hi is the interpolation function for node i.*/
+-
+-	/*Fetch number of nodes for this finite element*/
+-	int numnodes = element->GetNumberOfNodes();
+-
+-	/*Get nodal functions derivatives*/
+-	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
+-	element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+-
+-	/*Build B: */
+-	for(int i=0;i<numnodes;i++){
+-		B[i] = dbasis[2*numnodes+i];  
+-	}
+-
+-	/*Clean-up*/
+-	xDelete<IssmDouble>(dbasis);
+-}/*}}}*/
+-void           StressbalanceVerticalAnalysis::GetBprime(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
+-
+-	element->NodalFunctions(Bprime,gauss);
+-
+-}/*}}}*/
+ void           StressbalanceVerticalAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
+ 	element->GetSolutionFromInputsOneDof(solution,VzEnum);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 22534)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 22535)
+@@ -31,8 +31,6 @@
+ 		ElementVector* CreatePVectorBase(Element* element);
+ 		ElementVector* CreatePVectorSurface(Element* element);
+ 		ElementVector* CreatePVectorVolume(Element* element);
+-		void           GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss);
+-		void           GetBprime(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss);
+ 		void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
+ 		void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
+ 		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22535-22536.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22535-22536.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22535-22536.diff	(revision 22755)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22535)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22536)
+@@ -130,6 +130,7 @@
+ #else 
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
+ 
++
+ 	/*Intermediaries*/
+ 	int				num_independent_objects,M,N;
+ 	char**			names                   = NULL;
+@@ -137,10 +138,16 @@
+ 	IssmDouble*		independent					= NULL;
+ 	IssmDouble**	independents_min			= NULL;
+ 	IssmDouble**	independents_max			= NULL;
++	bool				control_analysis			=false;
+ 
++	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
++	
++	/*Now, return if no control*/
++	if(!control_analysis) return;
++
+ 	/*Step1: create controls (independents)*/
+ 	iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects");
+-//_assert_(num_independent_objects>0); 
++	_assert_(num_independent_objects>0); 
+ 	iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names");
+ 	_assert_(M==num_independent_objects);
+ 	iomodel->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22536-22537.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22536-22537.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22536-22537.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 22536)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 22537)
+@@ -47,9 +47,9 @@
+ 					error('independent checkconsistency error: nods should be set to the size of the independent variable');
+ 				end
+ 				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=',self.nods,'size',[NaN 1]);
+-				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.min_parameters'],'size',[md.mesh.numberofvertices 1]);
+-				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.max_parameters'],'size',[md.mesh.numberofvertices 1]);
+-				md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.control_scaling_factors'],'size',[1 1],'>',0,'NaN',1,'Inf',1);
++				%md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.min_parameters'],'size',[md.mesh.numberofvertices 1]);
++				%md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.max_parameters'],'size',[md.mesh.numberofvertices 1]);
++				%md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.control_scaling_factors'],'size',[1 1],'>',0,'NaN',1,'Inf',1);
+ 
+ 			end
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22537-22538.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22537-22538.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22537-22538.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22537)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22538)
+@@ -1301,25 +1301,33 @@
+ 	fi
+ 	dnl }}}
+ 	dnl scalapack{{{
++
++	dnl Here, either just the directory is provided, or the library, we handle both cases
+ 	AC_ARG_WITH([scalapack-dir],
+ 	  AS_HELP_STRING([--with-scalapack-dir=DIR],[scalapack root directory]),
+ 	  [SCALAPACK_ROOT=$withval],[SCALAPACK_ROOT="no"])
++
++	AC_ARG_WITH([scalapack-lib],
++	  AS_HELP_STRING([--with-scalapack-lib=LIBS],[scalapack libraries to include]),
++	  [SCALAPACKLIB=$withval],[SCALAPACKLIB="no"])
+ 			  
+ 	dnl Check whether scalapack is enabled
+ 	AC_MSG_CHECKING([for scalapack])
+ 	if test "x$SCALAPACK_ROOT" = "xno" ; then
+-		HAVE_SCALAPACK=no
++		if test "x$SCALAPACKLIB" = "xno" ; then
++			HAVE_SCALAPACK=no
++		fi
+ 	else
+ 		HAVE_SCALAPACK=yes
+ 		if ! test -d "$SCALAPACK_ROOT"; then
+ 			AC_MSG_ERROR([scalapack directory provided ($SCALAPACK_ROOT) does not exist]);
+ 		fi
++		SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
+ 	fi
+ 	AC_MSG_RESULT($HAVE_SCALAPACK)
+ 	
+ 	dnl scalapack headers and libraries
+ 	if test "x$HAVE_SCALAPACK" == "xyes"; then
+-		SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
+ 		AC_DEFINE([_HAVE_SCALAPACK_],[1],[with Scalapack in ISSM src])
+ 		AC_SUBST([SCALAPACKLIB])
+ 	fi
Index: /issm/oecreview/Archive/21724-22754/ISSM-22538-22539.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22538-22539.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22538-22539.diff	(revision 22755)
@@ -0,0 +1,483 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22538)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22539)
+@@ -2815,6 +2815,7 @@
+ 	IssmDouble sumW=0.0;
+ 	IssmDouble sumMassAdd=0.0;
+ 	IssmDouble sumdz_add=0.0;
++	IssmDouble fac=0.0;
+ 	IssmDouble sumMass=0.0;
+ 	IssmDouble dMass=0.0;
+ 	bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux;
+@@ -3116,10 +3117,14 @@
+ 		sumW = cellsum(W,m);
+ 		sumP = P +  sumP;
+ 		sumEC = sumEC + EC;  // evap (-)/cond(+)
+-		sumdz_add=dz_add+sumdz_add;
+ 
+ 		/*Calculate total system mass:*/
+-		sumMass=0; for(int i=0;i<m;i++) sumMass += dz[i]*d[i];
++		sumMass=0; 
++		fac=0;
++		for(int i=0;i<m;i++){
++			sumMass += dz[i]*d[i];
++			fac += dz[i]*(rho_ice - fmin(d[i],rho_ice));
++		}
+ 
+ 		#ifndef _HAVE_ADOLC_ //we want to avoid the round operation at all cost. Not differentiable.
+ 		dMass = sumMass + sumR + sumW - sumP - sumEC - initMass - sumMassAdd;
+@@ -3153,8 +3158,9 @@
+ 	this->AddInput(new DoubleInput(SmbMeltEnum,sumM/dt/rho_ice));
+ 	this->AddInput(new DoubleInput(SmbRunoffEnum,sumR/dt/rho_ice));
+ 	this->AddInput(new DoubleInput(SmbPrecipitationEnum,sumP/dt/rho_ice));
+-	this->AddInput(new DoubleInput(SmbDz_addEnum,sumdz_add/yts));
+-	this->AddInput(new DoubleInput(SmbM_addEnum,sumMassAdd/dt));
++	this->AddInput(new DoubleInput(SmbDzAddEnum,sumdz_add));
++	this->AddInput(new DoubleInput(SmbMAddEnum,sumMassAdd/dt));
++	this->AddInput(new DoubleInput(SmbFACEnum,fac/1000)); // output in meters
+ 
+ 	/*Free allocations:{{{*/
+ 	if(dz) xDelete<IssmDouble>(dz);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22538)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22539)
+@@ -483,8 +483,9 @@
+ 	SmbIsmeltEnum,
+ 	SmbIsdensificationEnum,
+ 	SmbIsturbulentfluxEnum,
+-	SmbDz_addEnum,
+-	SmbM_addEnum,
++	SmbDzAddEnum,
++	SmbMAddEnum,
++	SmbFACEnum,
+ 	/*SMBpdd*/
+ 	SMBpddEnum,	
+ 	SmbDelta18oEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22538)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22539)
+@@ -485,8 +485,9 @@
+ 		case SmbIsmeltEnum : return "SmbIsmelt";
+ 		case SmbIsdensificationEnum : return "SmbIsdensification";
+ 		case SmbIsturbulentfluxEnum : return "SmbIsturbulentflux";
+-		case SmbDz_addEnum : return "SmbDz_add";
+-		case SmbM_addEnum : return "SmbM_add";
++		case SmbDzAddEnum : return "SmbDzAdd";
++		case SmbMAddEnum : return "SmbMAdd";
++		case SmbFACEnum : return "SmbFAC";
+ 		case SMBpddEnum : return "SMBpdd";
+ 		case SmbDelta18oEnum : return "SmbDelta18o";
+ 		case SmbDelta18oSurfaceEnum : return "SmbDelta18oSurface";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22538)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22539)
+@@ -494,8 +494,9 @@
+ 	      else if (strcmp(name,"SmbIsmelt")==0) return SmbIsmeltEnum;
+ 	      else if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum;
+ 	      else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
+-	      else if (strcmp(name,"SmbDz_add")==0) return SmbDz_addEnum;
+-	      else if (strcmp(name,"SmbM_add")==0) return SmbM_addEnum;
++	      else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
++	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
++	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
+ 	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
+ 	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
+ 	      else if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
+-	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
++	      if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
++	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+ 	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
+ 	      else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
+ 	      else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
+-	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
++	      if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
++	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+ 	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+ 	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+ 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+-	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++	      if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
++	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
++	      if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
++	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+ 	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+ 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+-	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
++	      if (strcmp(name,"Tetra")==0) return TetraEnum;
++	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+-	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22538)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22539)
+@@ -582,13 +582,10 @@
+ 	
+ 	/*outputs:*/
+ 	IssmDouble EC=0.0;
+-	IssmDouble* T=NULL;
++	IssmDouble* T=*pT;
+ 
+ 	if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0)_printf0_("   thermal module\n");
+ 
+-	/*Recover pointers: */
+-	T=*pT;
+-
+ 	ds = d[0];      // density of top grid cell
+ 
+ 	// calculated air density [kg/m3]
+@@ -685,7 +682,7 @@
+ 		if (f[i]<dt-Dtol)if(f[i]>=max_fdt-Dtol)max_fdt=f[i];
+ 	}
+ 	dt=max_fdt;
+-	
++
+ 	// determine mean (harmonic mean) of K/dz for u, d, & p
+ 	Au = xNew<IssmDouble>(m);
+ 	Ad = xNew<IssmDouble>(m);
+@@ -782,7 +779,7 @@
+ 		}
+ 		
+ 		// calculate heat/wind 'coef_H' stability factor
+-		if (Ri < -0.03-Ttol) coefH = 1.3 * coefM;
++		if (Ri <= -0.03+Ttol) coefH = coefM/1.3;
+ 		else coefH = coefM;
+ 		
+ 		//// Sensible Heat
+@@ -789,26 +786,28 @@
+ 		// calculate the sensible heat flux [W m-2](Patterson, 1998)
+ 		shf = C * CA * (Ta - Ts);
+ 
+-		// adjust using MoninObukhov stability theory
++		// adjust using Monin-Obukhov stability theory
+ 		shf = shf / (coefM * coefH);
+ 
+ 		//// Latent Heat
+ 		// determine if snow pack is melting & calcualte surface vapour pressure over ice or liquid water
+ 		if (Ts >= CtoK-Ttol){
+-			L = LV;
++			L = LV; //for liquid water at 273.15 k to vapor
+ 
++			//for liquid surface (assume liquid on surface when Ts == 0 deg C)
++			// Wright (1997), US Meteorological Handbook from Murphy and Koop, 2005 Appendix A
++			eS = 611.21 * exp(17.502 * (Ts - CtoK) / (240.97 + Ts - CtoK));
++		}
++		else{
++			L = LS; // latent heat of sublimation 
++			
+ 			// for an ice surface Murphy and Koop, 2005 [Equation 7]
+ 			eS = exp(9.550426 - 5723.265/Ts + 3.53068 * log(Ts) - 0.00728332 * Ts);
+ 		}
+-		else{
+-			L = LS; // latent heat of sublimation for liquid surface (assume liquid on surface when Ts == 0 deg C)
+-			// Wright (1997), US Meteorological Handbook from Murphy and Koop, 2005 Appendix A
+-			eS = 611.21 * exp(17.502 * (Ts - CtoK) / (240.97 + Ts - CtoK));
+-		}
+-		
++
+ 		// Latent heat flux [W m-2]
+ 		lhf = C * L * (eAir - eS) * 0.622 / pAir;
+-		
++
+ 		// adjust using Monin-Obukhov stability theory (if lhf '+' then there is energy and mass gained at the surface, 
+ 		// if '-' then there is mass and energy loss at the surface.
+ 		lhf = lhf / (coefM * coefH);
+@@ -831,7 +830,7 @@
+ 		T[0] = T[0] + dT_dlw + dT_ulw + dT_turb;
+ 		
+ 		// temperature diffusion
+-		for(int j=0;j<m;j++)T0[1+j]=T[j];
++		for(int j=0;j<m;j++) T0[1+j]=T[j];
+ 		for(int j=0;j<m;j++) Tu[j] = T0[j];
+ 		for(int j=0;j<m;j++) Td[j] = T0[2+j];
+ 		for(int j=0;j<m;j++) T[j] = (Np[j] * T[j]) + (Nu[j] * Tu[j]) + (Nd[j] * Td[j]);
+@@ -838,7 +837,7 @@
+ 		
+ 		// calculate cumulative evaporation (+)/condensation(-)
+ 		EC = EC + (EC_day/dts)*dt;
+-    
++
+ 		/* CHECK FOR ENERGY (E) CONSERVATION [UNITS: J]
+ 		//energy flux across lower boundary (energy supplied by underling ice)
+ 		base_flux = Ad(-1)*(T_init()-T_init(-1)) * dt;
+@@ -853,7 +852,7 @@
+ 		_error_("energy not conserved in thermodynamics equations");
+ 		*/
+ 	}
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(K);
+ 	xDelete<IssmDouble>(KU);
+@@ -1679,7 +1678,7 @@
+ 	//// CORRECT FOR TOTAL MODEL DEPTH
+ 	// WORKS FINE BUT HAS BEEN DISABLED FOR CONVIENCE OF MODEL OUTPUT
+ 	// INTERPRETATION
+-	// // calculate total model depth
++	// calculate total model depth
+ 	Ztot = cellsum(dz,n);
+     
+ 	if (Ztot < zMin-Dtol){
+@@ -1992,24 +1991,29 @@
+ 	// Journal of Climatology, 2, 65-84.
+ 
+ 	// if V = 0 goes to infinity therfore if V = 0 change
+-	if(V < 0.01) V=0.01;
++	if(V<0.01-Dtol)V=0.01;
+ 
+ 	// calculate the Bulk Richardson Number (Ri)
+ 	Ri = (2.0*9.81* (Vz - z0) * (Ta - Ts)) / ((Ta + Ts)* pow(V,2));
+ 
+ 	// calculate Monin-Obukhov stability factors 'coef_M' and 'coef_H'
+-
++	
+ 	// do not allow Ri to exceed 0.19
+-	if(Ri>0.19-Ttol)Ri= 0.19;
++	Ri = fmin(Ri, 0.19);
+ 
+-	// calculate momentum 'coef_M' stability factor
+-	if (Ri > 0.0) coef_M = pow(1.0-5.2*Ri,-1.0); // if stable
+-	else coef_M = pow(1.0-18*Ri,-0.25);
++	// calculate momentum 'coefM' stability factor
++	if (Ri > 0.0+Ttol){
++		// if stable
++		coef_M = 1.0/(1.0-5.2*Ri);
++	}
++	else {
++		coef_M =pow (1.0-18*Ri,-0.25);
++	}
+ 
+ 	// calculate heat/wind 'coef_H' stability factor
+-	if (Ri < -0.03) coef_H = 1.3 * coef_M;
++	if (Ri <= -0.03+Ttol) coef_H = coef_M/1.3;
+ 	else coef_H = coef_M;
+-		
++
+ 	//// Bulk-transfer coefficient
+ 	An =  pow(0.4,2) / pow(log(Tz/z0),2);     // Bulk-transfer coefficient
+ 	C = An * d_air * V;             // shf & lhf common coefficient
+@@ -2021,23 +2025,23 @@
+ 	// adjust using Monin-Obukhov stability theory
+ 	shf = shf / (coef_M * coef_H);
+ 
+-	//// Latent Heat
+-	// determine if snow pack is melting & calcualte surface vapour pressure
+-	// over ice or liquid water
++	// Latent Heat
++	// determine if snow pack is melting & calcualte surface vapour pressure over ice or liquid water
+ 	if (Ts >= CtoK-Ttol){
+-		L = LV;
++		L = LV; //for liquid water at 273.15 k to vapor
+ 
+-		// for an ice surface Murphy and Koop, 2005 [Equation 7]
+-		eS = exp(9.550426 - 5723.265/Ts + 3.53068 * log(Ts)- 0.00728332 * Ts);
++		//for liquid surface (assume liquid on surface when Ts == 0 deg C)
++		// Wright (1997), US Meteorological Handbook from Murphy and Koop, 2005 Appendix A
++		eS = 611.21 * exp(17.502 * (Ts - CtoK) / (240.97 + Ts - CtoK));
+ 	}
+ 	else{
+ 		L = LS; // latent heat of sublimation
+-		// for liquid surface (assume liquid on surface when Ts == 0 deg C)
+-		// Wright (1997), US Meteorological Handbook from Murphy and Koop,
+-		// 2005 Apendix A
+-		eS = 611.21 * exp(17.502 * (Ts - CtoK) / (240.97 + Ts - CtoK));
++
++		// for an ice surface Murphy and Koop, 2005 [Equation 7]
++		eS = exp(9.550426 - 5723.265/Ts + 3.53068 * log(Ts) - 0.00728332 * Ts);
+ 	}
+ 
++
+ 	// Latent heat flux [W m-2]
+ 	lhf = C * L * (eAir - eS) * 0.622 / pAir;
+ 
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22538)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 22539)
+@@ -208,6 +208,10 @@
+ 			field = field*yts
+ 		elif fieldname=='SmbRunoff':
+ 			field = field*yts
++                elif fieldname=='SmbEvaporation':
++                        field = field*yts;
++                elif fieldname=='SmbRefreeze':
++                        field = field*yts;
+ 		elif fieldname=='SmbEC':
+ 			field = field*yts
+ 		elif fieldname=='SmbAccumulation':
+@@ -214,10 +218,8 @@
+ 			field = field*yts
+ 		elif fieldname=='SmbMelt':
+ 			field = field*yts
+-    		elif fieldname=='SmbDz_add':
++    		elif fieldname=='SmbMAdd':
+         		field = field*yts
+-    		elif fieldname=='SmbM_add':
+-        		field = field*yts
+ 		elif fieldname=='CalvingCalvingrate':
+ 			field = field*yts
+ 		elif fieldname=='LoveKernelsReal' or fieldname=='LoveKernelsImag':
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22538)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22539)
+@@ -198,6 +198,10 @@
+ 		field = field*yts;
+ 	elseif strcmp(fieldname,'SmbRunoff'),
+ 		field = field*yts;
++	elseif strcmp(fieldname,'SmbEvaporation'),
++		field = field*yts;
++	elseif strcmp(fieldname,'SmbRefreeze'),
++		field = field*yts;
+ 	elseif strcmp(fieldname,'SmbEC'),
+ 		field = field*yts;
+ 	elseif strcmp(fieldname,'SmbAccumulation'),
+@@ -204,10 +208,8 @@
+ 		field = field*yts;
+ 	elseif strcmp(fieldname,'SmbMelt'),
+ 		field = field*yts;
+-    elseif strcmp(fieldname,'SmbDz_add'),
+-        field = field*yts;
+-    elseif strcmp(fieldname,'SmbM_add'),
+-        field = field*yts;
++	elseif strcmp(fieldname,'SmbMAdd'),
++		field = field*yts;
+ 	elseif strcmp(fieldname,'CalvingCalvingrate'),
+ 		field = field*yts;
+ 	elseif (strcmp(fieldname,'LoveKernelsReal') | strcmp(fieldname,'LoveKernelsImag')),
+Index: ../trunk-jpl/test/Archives/Archive243.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive244.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/NightlyRun/test243.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.m	(revision 22538)
++++ ../trunk-jpl/test/NightlyRun/test243.m	(revision 22539)
+@@ -26,7 +26,7 @@
+ md.smb.C=repmat(inputs.LP.C,md.mesh.numberofelements,1);
+ 
+ %smb settings
+-md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance'};
++md.smb.requested_outputs={'SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC'};
+ 
+ %only run smb core: 
+ md.transient.isstressbalance=0;
+@@ -43,8 +43,8 @@
+ md=solve(md,'Transient');
+ 
+ %Fields and tolerances to track changes
+-field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance'};
+-field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12};
++field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC'};
++field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ 
+ field_values={...
+ 	(md.results.TransientSolution(end).SmbDz(1,1:240)),...
+@@ -56,4 +56,7 @@
+ 	(md.results.TransientSolution(end).SmbA(1,1:240)),...
+ 	(md.results.TransientSolution(end).SmbEC(1)),...
+ 	(md.results.TransientSolution(end).SmbMassBalance(1)),...
++	(md.results.TransientSolution(end).SmbMAdd(1)),...
++	(md.results.TransientSolution(end).SmbDzAdd(1)),...
++	(md.results.TransientSolution(end).SmbFAC(1))
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test243.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.py	(revision 22538)
++++ ../trunk-jpl/test/NightlyRun/test243.py	(revision 22539)
+@@ -39,7 +39,7 @@
+ md.smb.C = np.tile(np.conjugate(inputs['LP']['C']),(md.mesh.numberofelements,1)).flatten()
+ 
+ #smb settings
+-md.smb.requested_outputs = ['SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance']
++md.smb.requested_outputs = ['SmbDz','SmbT','SmbD','SmbRe','SmbGdn','SmbGsp','SmbEC','SmbA','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC']
+ 
+ #only run smb core: 
+ md.transient.isstressbalance = 0
+@@ -56,8 +56,8 @@
+ md = solve(md,'Transient')
+ 
+ #Fields and tolerances to track changes
+-field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance']
+-field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12]
++field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC']
++field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ #shape is different in python solution (fixed using reshape) which can cause test failure:
+ field_values = [
+ 	md.results.TransientSolution[-1].SmbDz[0,0:240].reshape(1,-1),
+@@ -69,4 +69,7 @@
+ 	md.results.TransientSolution[-1].SmbA[0,0:240].reshape(1,-1),
+ 	md.results.TransientSolution[-1].SmbEC[0],
+ 	md.results.TransientSolution[-1].SmbMassBalance[0],
++        md.results.TransientSolution[-1].SmbMAdd[0],
++        md.results.TransientSolution[-1].SmbDzAdd[0],
++        md.results.TransientSolution[-1].SmbFAC[0],
+ 	]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22539-22540.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22539-22540.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22539-22540.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/test/NightlyRun/test243.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.m	(revision 22539)
++++ ../trunk-jpl/test/NightlyRun/test243.m	(revision 22540)
+@@ -44,7 +44,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC'};
+-field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
++field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-11};
+ 
+ field_values={...
+ 	(md.results.TransientSolution(end).SmbDz(1,1:240)),...
+Index: ../trunk-jpl/test/NightlyRun/test243.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.py	(revision 22539)
++++ ../trunk-jpl/test/NightlyRun/test243.py	(revision 22540)
+@@ -57,7 +57,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC']
+-field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-11]
+ #shape is different in python solution (fixed using reshape) which can cause test failure:
+ field_values = [
+ 	md.results.TransientSolution[-1].SmbDz[0,0:240].reshape(1,-1),
+@@ -69,7 +69,7 @@
+ 	md.results.TransientSolution[-1].SmbA[0,0:240].reshape(1,-1),
+ 	md.results.TransientSolution[-1].SmbEC[0],
+ 	md.results.TransientSolution[-1].SmbMassBalance[0],
+-        md.results.TransientSolution[-1].SmbMAdd[0],
+-        md.results.TransientSolution[-1].SmbDzAdd[0],
+-        md.results.TransientSolution[-1].SmbFAC[0],
++	md.results.TransientSolution[-1].SmbMAdd[0],
++	md.results.TransientSolution[-1].SmbDzAdd[0],
++	md.results.TransientSolution[-1].SmbFAC[0],
+ 	]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22540-22541.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22540-22541.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22540-22541.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22540)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22541)
+@@ -91,13 +91,13 @@
+ 		tomitgcmcomm=parcom->GetParameterValue();
+ 		if(my_rank==0){
+ 			printf("starting ocean coupling rank 0 \n");
+-			printf("coupling time: %g \n",coupling_time);
++			printf("coupling time: "<< coupling_time <<"\n");
+ 			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+ 			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+ 			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+-			printf("ocean time: %g \n",oceantime);
++			printf("ocean time: "<< oceantime<<"\n");
+ 			printf("nx size: %i \n",oceannxsize);
+ 			printf("ny size: %i \n",oceannysize);
+ 			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22541-22542.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22541-22542.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22541-22542.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/mech/basalstress.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/basalstress.m	(revision 22541)
++++ ../trunk-jpl/src/m/mech/basalstress.m	(revision 22542)
+@@ -18,6 +18,6 @@
+ uby=md.initialization.vy/md.constants.yts;
+ 
+ %compute basal drag
+-bx=(md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.base)).^r.*(md.friction.coefficient).^2.*ubx.^s;
+-by=(md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.base)).^r.*(md.friction.coefficient).^2.*uby.^s;
+-b=(md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.base)).^r.*(md.friction.coefficient).^2.*ub.^s;
++bx = - (md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.base)).^r.*(md.friction.coefficient).^2.*ubx.^s;
++by = - (md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.base)).^r.*(md.friction.coefficient).^2.*uby.^s;
++b  = sqrt(bx.^2+by.^2);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22542-22543.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22542-22543.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22542-22543.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/cores/levelsetfunctionslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/levelsetfunctionslope_core.cpp	(revision 22542)
++++ ../trunk-jpl/src/c/cores/levelsetfunctionslope_core.cpp	(revision 22543)
+@@ -35,18 +35,4 @@
+ 		femmodel->parameters->SetParam(LevelsetfunctionSlopeXEnum,InputToExtrudeEnum);
+ 		extrudefrombase_core(femmodel);
+ 	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("saving results:\n");
+-		if(domaintype!=Domain2DverticalEnum){
+-			int outputs[2] = {LevelsetfunctionSlopeXEnum,LevelsetfunctionSlopeYEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-
+-		}
+-		else{
+-			int outputs = LevelsetfunctionSlopeXEnum;
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+-		}
+-	}
+-
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22543-22544.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22543-22544.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22543-22544.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22543)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22544)
+@@ -73,7 +73,7 @@
+ 	#endif
+ 
+ 	if(isoceancoupling){
+-		printf("startin ocean coupling \n");
++		_printf_("startin ocean coupling \n");
+ 		int my_rank;
+ 		int oceannxsize,oceannysize;
+ 		IssmDouble *oceangridx;
+@@ -90,14 +90,14 @@
+ 		if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
+ 		tomitgcmcomm=parcom->GetParameterValue();
+ 		if(my_rank==0){
+-			printf("starting ocean coupling rank 0 \n");
+-			printf("coupling time: "<< coupling_time <<"\n");
++			_printf_("starting ocean coupling rank 0 \n");
++			_printf_("coupling time: "<< coupling_time <<"\n");
+ 			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+ 			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+ 			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+-			printf("ocean time: "<< oceantime<<"\n");
++			_printf_("ocean time: "<< oceantime<<"\n");
+ 			printf("nx size: %i \n",oceannxsize);
+ 			printf("ny size: %i \n",oceannysize);
+ 			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22544-22545.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22544-22545.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22544-22545.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test219.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.js	(revision 22544)
++++ ../trunk-jpl/test/NightlyRun/test219.js	(revision 22545)
+@@ -10,7 +10,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure'];
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13];
++field_tolerances=[5e-09,5e-09,5e-09,5e-09,1e-13];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Vx),
+ 	(md.results.StressbalanceSolution[0].Vy),
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 22544)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 22545)
+@@ -21,7 +21,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
++field_tolerances=[5e-09,5e-09,5e-09,5e-09,1e-13]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 22544)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 22545)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-13};
++field_tolerances={5e-09,5e-09,5e-09,5e-09,1e-13};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22545-22546.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22545-22546.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22545-22546.diff	(revision 22755)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22545)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22546)
+@@ -47,36 +47,64 @@
+       COMMON /CPL_MPI_ID/
+      &     mpiMyWid, toissmcomm
+       INTEGER mpiMyWid, toissmcomm
+-      integer mpistatus(MPI_STATUS_SIZE), mpiRC
++      integer mpistatus(MPI_STATUS_SIZE)
+       real*8 CouplingTime, IceModelTime
++      integer i, j, bi, bj, buffsize
++      Real*8  xfer_array(Nx,Ny)
++      _RL     local(1:sNx,1:sNy,nSx,nSy)
+ 
+-      print*,'choubi 1'
+-      
+       IF( myTime .EQ. startTime ) THEN
+-      print*,'choubi 2'
+ 
+ C     Send deltatimestep
+-       _BEGIN_MASTER( myThid )
+-
+-       print*,'choubi 3'
+-
++         _BEGIN_MASTER( myThid )
+          call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,toissmcomm,
+-     &        mpistatus,mpiRC)
++     &        mpistatus)
+          print*, 'Ocean received CouplingTime: ', CouplingTime
+          call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,toissmcomm,
+-     &        mpistatus,mpiRC)
++     &        mpistatus)
+          print*, 'Ocean received IceModelTime: ', IceModelTime
+          call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,toissmcomm,
+-     &        mpistatus,mpiRC)
++     &        mpistatus)
+          call MPI_Send(Nx,1,MPI_INT,0,10001003,toissmcomm,
+-     &        mpistatus,mpiRC)
++     &        mpistatus)
+          call MPI_Send(Ny,1,MPI_INT,0,10001004,toissmcomm,
+-     &        mpistatus,mpiRC)
+-      
+-cdb      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
+-cdb      print*, 'Ocean : dummy received:',dummy1
++     &        mpistatus)
++         _END_MASTER( myThid )
+ 
+-      _END_MASTER( myThid )
++C     Send longitude East of center of cell
++         DO bj=1,nSy
++            DO bi=1,nSx
++               DO j=1,sNy
++                  DO i=1,sNx
++                     local(i,j,bi,bj) = xC(i,j,bi,bj)
++                  ENDDO
++               ENDDO
++            ENDDO
++         ENDDO
++         CALL GATHER_2D_R8( xfer_array, local, myThid )
++         _BEGIN_MASTER( myThid )
++         buffsize = Nx*Ny
++         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &        0,10001005,toissmcomm,mpistatus)
++         _END_MASTER( myThid )
++         
++C     Send latitude North of center of cell
++         DO bj=1,nSy
++            DO bi=1,nSx
++               DO j=1,sNy
++                  DO i=1,sNx
++                     local(i,j,bi,bj) = yC(i,j,bi,bj)
++                  ENDDO
++               ENDDO
++            ENDDO
++         ENDDO
++         CALL GATHER_2D_R8( xfer_array, local, myThid )
++         _BEGIN_MASTER( myThid )
++         buffsize = Nx*Ny
++         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &        0,10001006,toissmcomm,mpistatus)
++         _END_MASTER( myThid )
++
+       ENDIF
+        
+ #endif /* ALLOW_CPL_MPMICE */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22546-22547.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22546-22547.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22546-22547.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22546)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22547)
+@@ -98,12 +98,14 @@
+ 			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+ 			_printf_("ocean time: "<< oceantime<<"\n");
+-			printf("nx size: %i \n",oceannxsize);
+-			printf("ny size: %i \n",oceannysize);
+-			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			//ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+-			//oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			//ISSM_MPI_Recv(&oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++			_printf_("nx size : "<< oceannxsize<<"\n");
++			_printf_("ny size : "<< oceannysize<<"\n");
++			oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
++			ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
++			_printf_("gridx received \n");
++			oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
++			ISSM_MPI_Recv(&oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++			_printf_("gridy received \n");
+ 			//icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			//ISSM_MPI_Send(&icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+ 			//oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22547-22548.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22547-22548.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22547-22548.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22547)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22548)
+@@ -1309,7 +1309,7 @@
+ 
+ 	AC_ARG_WITH([scalapack-lib],
+ 	  AS_HELP_STRING([--with-scalapack-lib=LIBS],[scalapack libraries to include]),
+-	  [SCALAPACKLIB=$withval],[SCALAPACKLIB="no"])
++	  [SCALAPACKLIB=$withval],[SCALAPACKLIB=""])
+ 			  
+ 	dnl Check whether scalapack is enabled
+ 	AC_MSG_CHECKING([for scalapack])
Index: /issm/oecreview/Archive/21724-22754/ISSM-22548-22549.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22548-22549.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22548-22549.diff	(revision 22755)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22548)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22549)
+@@ -1309,25 +1309,27 @@
+ 
+ 	AC_ARG_WITH([scalapack-lib],
+ 	  AS_HELP_STRING([--with-scalapack-lib=LIBS],[scalapack libraries to include]),
+-	  [SCALAPACKLIB=$withval],[SCALAPACKLIB=""])
++	  [SCALAPACKLIB=$withval],[SCALAPACKLIB="no"])
+ 			  
+ 	dnl Check whether scalapack is enabled
+ 	AC_MSG_CHECKING([for scalapack])
+-	if test "x$SCALAPACK_ROOT" = "xno" ; then
+-		if test "x$SCALAPACKLIB" = "xno" ; then
++	if test "x$SCALAPACK_ROOT" = "xno" && test "x$SCALAPACKLIB" = "xno"; then
+ 			HAVE_SCALAPACK=no
++	else if test "x$SCALAPACK_ROOT" != "xno"; then
++		if ! test -d "$SCALAPACK_ROOT"; then
++		 AC_MSG_ERROR([scalapack directory provided ($SCALAPACK_ROOT) does not exist]);
+ 		fi
+-	else
+ 		HAVE_SCALAPACK=yes
+-		if ! test -d "$SCALAPACK_ROOT"; then
+-			AC_MSG_ERROR([scalapack directory provided ($SCALAPACK_ROOT) does not exist]);
+-		fi
+ 		SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
++	else if test "x$SCALAPACKLIB" != "xno"; then
++		HAVE_SCALAPACK=yes
++	else
++	   AC_MSG_ERROR([cannot provide both scalapack dir and scalapack-lib])
+ 	fi
+ 	AC_MSG_RESULT($HAVE_SCALAPACK)
+ 	
+ 	dnl scalapack headers and libraries
+-	if test "x$HAVE_SCALAPACK" == "xyes"; then
++	if test "x$HAVE_SCALAPACK" = "xyes"; then
+ 		AC_DEFINE([_HAVE_SCALAPACK_],[1],[with Scalapack in ISSM src])
+ 		AC_SUBST([SCALAPACKLIB])
+ 	fi
Index: /issm/oecreview/Archive/21724-22754/ISSM-22549-22550.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22549-22550.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22549-22550.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22549)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22550)
+@@ -1326,6 +1326,8 @@
+ 	else
+ 	   AC_MSG_ERROR([cannot provide both scalapack dir and scalapack-lib])
+ 	fi
++	fi
++	fi
+ 	AC_MSG_RESULT($HAVE_SCALAPACK)
+ 	
+ 	dnl scalapack headers and libraries
Index: /issm/oecreview/Archive/21724-22754/ISSM-22550-22551.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22550-22551.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22550-22551.diff	(revision 22755)
@@ -0,0 +1,739 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22551)
+@@ -67,15 +67,15 @@
+ 
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+-	profiler->Tag(START);
++	profiler->Start(TOTAL);
+ 
+ 	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
+ 	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&restartfilename,&rootpath,argc,argv);
+ 
+ 	/*Create femmodel from input files: */
+-	profiler->Tag(STARTINIT);
++	profiler->Start(MPROCESSOR);
+ 	this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,restartfilename, solution_type,trace,NULL);
+-	profiler->Tag(FINISHINIT);
++	profiler->Stop(MPROCESSOR);
+ 
+ 	/*Save communicator in the parameters dataset: */
+ 	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
+@@ -141,9 +141,9 @@
+ 	IssmComm::SetComm(incomm);
+ 
+ 	/*Create femmodel from input files, with trace activated: */
+-	profiler->Tag(STARTINIT);
++	profiler->Start(MPROCESSOR);
+ 	this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, solution_type,traceon,X);
+-	profiler->Tag(FINISHINIT);
++	profiler->Stop(MPROCESSOR);
+ 
+ 	#if defined(_HAVE_NEOPZ_) && !defined(_HAVE_ADOLC_)
+ 	this->amr = NULL;
+@@ -252,15 +252,16 @@
+ 	}
+ 
+ 	/*Before we delete the profiler, report statistics for this run: */
+-	profiler->Tag(FINISH);  //final tagging
++	profiler->Stop(TOTAL);  //final tagging
+ 	_printf0_("\n");
+-	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
+-	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->TotalTime(MPROCESSOR) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->TotalTime(CORE) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"Solver elapsed time:"<<profiler->TotalTime(SOLVER) << "\n");
+ 	_printf0_("\n");
+ 	_printf0_("   Total elapsed time: "
+-				<<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
+-				<<profiler->DeltaTimeModMin(START,FINISH)<<" min "
+-				<<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
++				<<profiler->TotalTimeModHour(TOTAL)<<" hrs "
++				<<profiler->TotalTimeModMin(TOTAL)<<" min "
++				<<profiler->TotalTimeModSec(TOTAL)<<" sec"
+ 				);
+ 	_printf0_("\n");
+ 
+@@ -825,22 +826,22 @@
+ 	WrapperCorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
+ 
+ 	/*run solution core: */
+-	profiler->Tag(STARTCORE);   
++	profiler->Start(CORE);   
+ 	solutioncore(this); 
+-	profiler->Tag(FINISHCORE);
++	profiler->Stop(CORE);
+ 
+ 	/*run AD core if needed: */
+-	profiler->Tag(STARTADCORE); 
++	profiler->Start(ADCORE); 
+ 	ad_core(this);      
+-	profiler->Tag(FINISHADCORE);
++	profiler->Stop(ADCORE);
+ 
+ 	/*some profiling results for the core: */
+ 	parameters->FindParam(&profiling,DebugProfilingEnum);
+ 	if(profiling){
+ 
+-		solution_time=profiler->DeltaTime(STARTCORE,FINISHCORE);
+-		solution_flops=profiler->DeltaFlops(STARTCORE,FINISHCORE);
+-		solution_memory=profiler->Memory(FINISHCORE);
++		solution_time=profiler->TotalTime(CORE);
++		solution_flops=profiler->TotalFlops(CORE);
++		solution_memory=profiler->Memory(CORE);
+ 
+ 		_printf0_("Core solution elapsed time    : " << solution_time   << " Seconds\n");
+ 		_printf0_("Core solution number of flops : " << solution_flops  << " Flops\n");
+@@ -852,9 +853,9 @@
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops));
+ 
+ 		#ifdef _HAVE_ADOLC_
+-		solution_time=profiler->DeltaTime(STARTADCORE,FINISHADCORE);
+-		solution_flops=profiler->DeltaFlops(STARTADCORE,FINISHADCORE);
+-		solution_memory=profiler->Memory(FINISHADCORE);
++		solution_time=profiler->TotalTime(ADCORE);
++		solution_flops=profiler->TotalFlops(ADCORE);
++		solution_memory=profiler->Memory(ADCORE);
+ 
+ 		_printf0_("AD Solution elapsed time    : " << solution_time   << " Seconds\n");
+ 		_printf0_("AD Solution number of flops : " << solution_flops  << " Flops\n");
+@@ -4727,15 +4728,15 @@
+ 
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+-	profiler->Tag(START);
++	profiler->Start(TOTAL);
+ 
+ 	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
+ 	solution_type=StringToEnumx(solution);
+ 	
+ 	/*Create femmodel from input files: */
+-	profiler->Tag(STARTINIT);
++	profiler->Start(START);
+ 	this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
+-	profiler->Tag(FINISHINIT);
++	profiler->Stop(MPROCESSOR);
+ 	
+ 	/*Save communicator in the parameters dataset: */
+ 	this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum));
+@@ -4753,15 +4754,15 @@
+ 
+ 	
+ 	/*Before we delete the profiler, report statistics for this run: */
+-	profiler->Tag(FINISH);  //final tagging
++	profiler->Stop(TOTAL);  //final tagging
+ 	_printf0_("\n");
+-	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(STARTINIT,FINISHINIT) << "\n");
+-	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(STARTCORE,FINISHCORE) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->TotalTime(MPROCESSOR) << "\n");
++	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->TotalTime(CORE) << "\n");
+ 	_printf0_("\n");
+ 	_printf0_("   Total elapsed time: "
+-				<<profiler->DeltaTimeModHour(START,FINISH)<<" hrs "
+-				<<profiler->DeltaTimeModMin(START,FINISH)<<" min "
+-				<<profiler->DeltaTimeModSec(START,FINISH)<<" sec"
++				<<profiler->TotalTimeModHour(TOTAL)<<" hrs "
++				<<profiler->TotalTimeModMin(TOTAL)<<" min "
++				<<profiler->TotalTimeModSec(TOTAL)<<" sec"
+ 				);
+ 	_printf0_("\n");
+ 	
+Index: ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 22551)
+@@ -23,7 +23,7 @@
+ 		/*Build an femmodel if you are a slave, using the corresponding communicator:*/
+ 		if(world_rank!=0){
+ 			femmodel_init= new FemModel(argc,argv,evaluation_comm);
+-			femmodel_init->profiler->Tag(STARTCORE);
++			femmodel_init->profiler->Start(CORE);
+ 		}
+ 
+ 	}
+@@ -36,7 +36,7 @@
+ 		if(world_rank!=0){
+ 
+ 			/*Wrap up: */
+-			femmodel_init->profiler->Tag(FINISHCORE);
++			femmodel_init->profiler->Stop(CORE);
+ 			femmodel_init->CleanUp(); //only close file pointers on rank 0 of slave 1!
+ 
+ 			/*Delete Model: */
+Index: ../trunk-jpl/src/c/classes/Profiler.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Profiler.h	(revision 22550)
++++ ../trunk-jpl/src/c/classes/Profiler.h	(revision 22551)
+@@ -6,51 +6,49 @@
+ #define _PROFILER_H_
+ 
+ /*Headers:*/
+-/*{{{*/
++#include "../shared/shared.h"
+ #include "../datastructures/datastructures.h"
+-#include "../shared/shared.h"
+-/*}}}*/
+ 
+-class DoubleParam;
++/*Macros*/
++#define TOTAL 0      /*Profiling Total time */ 
++#define MPROCESSOR 1 /*Profiling Model processor*/ 
++#define CORE 2       /*Profiling solution */ 
++#define SOLVER 3     /*Profiling solution */ 
++#define ADCORE 4     /*Profiling AD */ 
++#define MAXIMUMSIZE 5
+ 
+-#define START 0
+-#define STARTINIT 1
+-#define FINISHINIT 2
+-#define STARTCORE 3
+-#define FINISHCORE 4
+-#define STARTADCORE 5
+-#define FINISHADCORE 6
+-#define FINISH 7
+-#define MAXIMUMSIZE 8 
+-
+ class Profiler: public Object{
+ 
+ 	public: 
+-		IssmDouble flops[MAXIMUMSIZE];
+-		IssmDouble memory[MAXIMUMSIZE];
+-		IssmDouble time[MAXIMUMSIZE];
++		IssmPDouble flops[MAXIMUMSIZE];
++		IssmPDouble flops_start[MAXIMUMSIZE];
++		IssmPDouble memory[MAXIMUMSIZE];
++		IssmPDouble memory_start[MAXIMUMSIZE];
++		IssmPDouble time[MAXIMUMSIZE];
++		IssmPDouble time_start[MAXIMUMSIZE];
++		bool        running[MAXIMUMSIZE];
+ 
+-		/*Profiler constructors, destructors {{{*/
++		/*Profiler constructors, destructors */
+ 		Profiler();
+ 		~Profiler();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
++
++		/*Object virtual functions definitions*/
+ 		Object *copy();
+ 		void    DeepEcho();
+ 		void    Echo();
+ 		int     Id();
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+ 		int     ObjectEnum();
+-		/*}}}*/
+-		/*Profiler routines {{{*/
+-		IssmDouble  DeltaFlops(int inittag, int finaltag);
+-		IssmDouble  DeltaTime(int inittag, int finaltag);
+-		int     DeltaTimeModHour(int inittag, int finaltag);
+-		int     DeltaTimeModMin(int inittag, int finaltag);
+-		int     DeltaTimeModSec(int inittag, int finaltag);
+-		IssmDouble  Memory(int tag);
+-		void    Tag(int tagenum,bool dontmpisync=false);
+-		/*}}}*/
++
++		/*Profiler routines*/
++		IssmPDouble  TotalFlops(int tag);
++		IssmPDouble  TotalTime(int tag);
++		int          TotalTimeModHour(int tag);
++		int          TotalTimeModMin(int tag);
++		int          TotalTimeModSec(int tag);
++		IssmPDouble  Memory(int tag);
++		void         Start(int tagenum,bool dontmpisync=false);
++		void         Stop(int tagenum,bool dontmpisync=false);
+ };
+ 
+ #endif  /* _PROFILER_H_ */
+Index: ../trunk-jpl/src/c/classes/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 22551)
+@@ -2,7 +2,7 @@
+  * \brief: implementation of the Profiler object
+  */
+ 
+-/*Include files: {{{*/
++/*Include files*/
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -10,16 +10,18 @@
+ #endif
+ 
+ #include "./Profiler.h"
+-#include "./Params/DoubleParam.h"
+ #include "../toolkits/toolkits.h"
+-/*}}}*/
+ 
+ /*Profiler constructors and destructors:*/
+ Profiler::Profiler(){/*{{{*/
+ 	for(int i=0;i<MAXIMUMSIZE;i++){
+-		this->time[i]  =NAN;
+-		this->flops[i] =NAN;
+-		this->memory[i]=NAN;
++		this->time[i]          = 0.;
++		this->time_start[i]    = 0.;
++		this->flops[i]         = 0.;
++		this->flops_start[i]   = 0.;
++		this->memory[i]        = 0.;
++		this->memory_start[i]  = 0.;
++		this->running[i]       = false;
+ 	}
+ } /*}}}*/
+ Profiler::~Profiler(){/*{{{*/
+@@ -41,101 +43,87 @@
+ 
+ /*Object virtual functions definitions:*/
+ void Profiler::DeepEcho(void){/*{{{*/
+-
+ 	this->Echo();
+-
+-}
+-/*}}}*/
++}/*}}}*/
+ void Profiler::Echo(void){/*{{{*/
+ 
+ 	_printf_("Profiler:\n");
+ 	for(int i=0;i<MAXIMUMSIZE;i++){
+ 		_printf_("    Tag "<<i<<":\n");
+-		_printf_("       flops:  "<<this->flops[i]<<"\n");
+-		_printf_("       memory: "<<this->memory[i]<<"\n");
+-		_printf_("       time:   "<<this->time[i]<<"\n");
++		_printf_("       flops:   "<<this->flops[i]<<"\n");
++		_printf_("       memory:  "<<this->memory[i]<<"\n");
++		_printf_("       time:    "<<this->time[i]<<"\n");
++		_printf_("       running: "<<this->time[i]<<"\n");
+ 	}
+ 
+ }
+ /*}}}*/
+-int  Profiler::Id(void){ return -1; }/*{{{*/
++int  Profiler::Id(void){ /*{{{*/
++	return -1; 
++}
+ /*}}}*/
+ void Profiler::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+ 
+ 	IssmDouble* pointer = NULL;
++	bool*       bpointer = NULL;
+ 
+ 	MARSHALLING_ENUM(ProfilerEnum);
+ 	pointer = &this->time[0];
+-	MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
++	MARSHALLING_DYNAMIC(pointer,IssmPDouble,MAXIMUMSIZE);
+ 	pointer = &this->flops[0];
+-	MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
++	MARSHALLING_DYNAMIC(pointer,IssmPDouble,MAXIMUMSIZE);
+ 	pointer = &this->memory[0];
+-	MARSHALLING_DYNAMIC(pointer,IssmDouble,MAXIMUMSIZE);
++	MARSHALLING_DYNAMIC(pointer,IssmPDouble,MAXIMUMSIZE);
++	bpointer = &this->running[0];
++	MARSHALLING_DYNAMIC(bpointer,bool,MAXIMUMSIZE);
+ 
+ } /*}}}*/
+ int  Profiler::ObjectEnum(void){/*{{{*/
+-
+ 	return ProfilerEnum;
++}/*}}}*/
+ 
+-}
+-/*}}}*/
+-
+ /*Profiler routines:*/
+-IssmDouble  Profiler::DeltaFlops(int inittag, int finaltag){/*{{{*/
++IssmPDouble  Profiler::TotalFlops(int tag){/*{{{*/
+ 
+-	/*Get initial flops*/
+-	_assert_(inittag>=0); 
+-	_assert_(inittag<MAXIMUMSIZE); 
+-	if(xIsNan<IssmDouble>(this->flops[inittag])) _error_("Tag not set");
+-	IssmDouble init = this->flops[inittag];
++	/*Get tag*/
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	if(this->running[tag]) _error_("Tag "<<tag<<" has not been stopped");
+ 
+-	/*Get final flops*/
+-	_assert_(finaltag>=0); 
+-	_assert_(finaltag<MAXIMUMSIZE); 
+-	if(xIsNan<IssmDouble>(this->flops[finaltag])) _error_("Tag not set");
+-	IssmDouble final = this->flops[finaltag];
++	return this->flops[tag];
++}/*}}}*/
++IssmPDouble  Profiler::TotalTime(int tag){/*{{{*/
+ 
+-	return final-init;
+-}
+-/*}}}*/
+-IssmDouble  Profiler::DeltaTime(int inittag, int finaltag){/*{{{*/
++	/*Get tag*/
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	if(this->running[tag]) _error_("Tag "<<tag<<" has not been stopped");
+ 
+-	/*Get initial time*/
+-	_assert_(inittag>=0); 
+-	_assert_(inittag<MAXIMUMSIZE); 
+-	if(xIsNan<IssmDouble>(this->time[inittag])) _error_("Tag "<<inittag<<" not set");
+-	IssmDouble init = this->time[inittag];
+ 
+-	/*Get final time*/
+-	_assert_(finaltag>=0); 
+-	_assert_(finaltag<MAXIMUMSIZE); 
+-	if(xIsNan<IssmDouble>(this->time[finaltag])) _error_("Tag "<<finaltag<<" not set");
+-	IssmDouble final = this->time[finaltag];
+-
+ 	#ifdef _HAVE_MPI_
+-	return final-init;
++	return this->time[tag];
+ 	#else
+-	return (final-init)/CLOCKS_PER_SEC;
++	return this->time[tag]/CLOCKS_PER_SEC;
+ 	#endif
+ }
+ /*}}}*/
+-int Profiler::DeltaTimeModHour(int inittag, int finishtag){/*{{{*/
++int Profiler::TotalTimeModHour(int tag){/*{{{*/
+ 
+-	IssmDouble delta = this->DeltaTime(inittag,finishtag);
+-	return int((reCast<int,IssmDouble>(delta))/3600);
++	IssmPDouble delta = this->TotalTime(tag);
++	return int((reCast<int,IssmPDouble>(delta))/3600);
+ 
+ }
+ /*}}}*/
+-int Profiler::DeltaTimeModMin(int inittag, int finishtag){/*{{{*/
++int Profiler::TotalTimeModMin(int tag){/*{{{*/
+ 
+-	IssmDouble delta = this->DeltaTime(inittag,finishtag);
+-	return int(int(reCast<int,IssmDouble>(delta))%3600/60);
++	IssmPDouble delta = this->TotalTime(tag);
++	return int(int(reCast<int,IssmPDouble>(delta))%3600/60);
+ }
+ /*}}}*/
+-int Profiler::DeltaTimeModSec(int inittag, int finishtag){/*{{{*/
++int Profiler::TotalTimeModSec(int tag){/*{{{*/
+ 
+-	IssmDouble delta = this->DeltaTime(inittag,finishtag);
+-	return int(reCast<int,IssmDouble>(delta)%60);
++	IssmPDouble delta = this->TotalTime(tag);
++	return int(reCast<int,IssmPDouble>(delta)%60);
+ }
+ /*}}}*/
+ IssmDouble  Profiler::Memory(int tag){/*{{{*/
+@@ -143,18 +131,20 @@
+ 	/*Get initial flops*/
+ 	_assert_(tag>=0); 
+ 	_assert_(tag<MAXIMUMSIZE); 
+-	if(xIsNan<IssmDouble>(this->flops[tag])) _error_("Tag not set");
++	if(this->running[tag]) _error_("Tag "<<tag<<" has not been stopped");
++
+ 	return this->memory[tag];
+ }
+ /*}}}*/
+-void  Profiler::Tag(int tagenum,bool dontmpisync){/*{{{*/
++void  Profiler::Start(int tag,bool dontmpisync){/*{{{*/
+ 
+-	IssmDouble t;
+-	IssmDouble f;
+-	IssmDouble m;
++	/*Check tag*/
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	if(this->running[tag]) _error_("Tag "<<tag<<" is already running");
+ 
+-	/*If mpisync requested, make sure all the cpus are at the same point 
+-	 *in the execution: */
++
++	/*If mpisync requested, make sure all the cpus are at the same point in the execution: */
+ 	if(!dontmpisync){
+ 		ISSM_MPI_Barrier(IssmComm::GetComm()); 
+ 	}
+@@ -161,12 +151,14 @@
+ 
+ 	/*Capture time: */
+ 	#ifdef _HAVE_MPI_
+-	t=ISSM_MPI_Wtime();
++	IssmPDouble t=ISSM_MPI_Wtime();
+ 	#else
+-	t=(IssmPDouble)clock();
++	IssmPDouble t=(IssmPDouble)clock();
+ 	#endif
+ 
+ 	/*Capture flops: */
++	IssmPDouble f = 0.;
++	IssmPDouble m = 0.;
+ 	#ifdef _HAVE_PETSC_
+ 		PetscGetFlops(&f);
+ 		PetscMemoryGetCurrentUsage(&m);
+@@ -175,14 +167,52 @@
+ 	#endif
+ 
+ 	/*Plug into this->time: */
+-	_assert_(tagenum>=0); 
+-	_assert_(tagenum<MAXIMUMSIZE); 
+-	if(!xIsNan<IssmDouble>(this->time[tagenum])) _error_("Tag already exists");
+-	this->time[tagenum]  = t;
+-	if(!xIsNan<IssmDouble>(this->flops[tagenum])) _error_("Tag already exists");
+-	this->flops[tagenum] = f;
+-	if(!xIsNan<IssmDouble>(this->memory[tagenum])) _error_("Tag already exists");
+-	this->memory[tagenum]= m;
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	this->time_start[tag]   = t;
++	this->flops_start[tag]  = f;
++	this->memory_start[tag] = m;
+ 
+-}
+-/*}}}*/
++	/*turn on running*/
++	this->running[tag] = true;
++}/*}}}*/
++void  Profiler::Stop(int tag,bool dontmpisync){/*{{{*/
++
++	/*Check tag*/
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	if(!this->running[tag]) _error_("Tag "<<tag<<" is not running");
++
++
++	/*If mpisync requested, make sure all the cpus are at the same point in the execution: */
++	if(!dontmpisync){
++		ISSM_MPI_Barrier(IssmComm::GetComm()); 
++	}
++
++	/*Capture time: */
++	#ifdef _HAVE_MPI_
++	IssmPDouble t=ISSM_MPI_Wtime();
++	#else
++	IssmPDouble t=(IssmPDouble)clock();
++	#endif
++
++	/*Capture flops: */
++	IssmPDouble f = 0.;
++	IssmPDouble m = 0.;
++	#ifdef _HAVE_PETSC_
++	PetscGetFlops(&f);
++	PetscMemoryGetCurrentUsage(&m);
++	#else
++	/*do nothing for now:*/
++	#endif
++
++	/*Plug into this->time: */
++	_assert_(tag>=0); 
++	_assert_(tag<MAXIMUMSIZE); 
++	this->time[tag]   += t - this->time_start[tag];
++	this->flops[tag]  += f - this->flops_start[tag];
++	this->memory[tag] += m - this->memory_start[tag];
++
++	/*turn off running*/
++	this->running[tag] = false;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 22551)
+@@ -66,7 +66,9 @@
+ 		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);
++		femmodel->profiler->Stop(SOLVER);
+ 		Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+ 
+ 		convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); delete Kff; delete pf; delete df;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_shakti_nonlinear.cpp	(revision 22551)
+@@ -51,7 +51,9 @@
+ 		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);
++		femmodel->profiler->Stop(SOLVER);
+ 		Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+ 
+ 		convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); delete Kff; delete pf; delete df;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 22551)
+@@ -103,7 +103,11 @@
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+ 				delete uf_sed;
++
++				femmodel->profiler->Start(SOLVER);
+ 				Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
++				femmodel->profiler->Stop(SOLVER);
++
+ 				delete Kff; delete pf; delete df;
+ 				delete ug_sed;
+ 				Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+@@ -185,7 +189,9 @@
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+ 				delete uf_epl;
++				femmodel->profiler->Start(SOLVER);
+ 				Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
++				femmodel->profiler->Stop(SOLVER);
+ 				delete Kff; delete pf; delete df;
+ 				delete uf_epl_sub_iter;
+ 				uf_epl_sub_iter=uf_epl->Duplicate();
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 22551)
+@@ -34,7 +34,10 @@
+ 	SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys); delete Kfs;
++
++	femmodel->profiler->Start(SOLVER);
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
++	femmodel->profiler->Stop(SOLVER);
+ 	
+ 	/*Check that the solver converged nicely: */
+ 		
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 22551)
+@@ -62,7 +62,9 @@
+ 			SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 			Reduceloadx(pf,Kfs,ys);delete Kfs;
++			femmodel->profiler->Start(SOLVER);
+ 			Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);delete df; delete Kff; delete pf;
++			femmodel->profiler->Stop(SOLVER);
+ 			Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+ 			InputUpdateFromSolutionx(femmodel,ug);
+ 			delete old_ug;old_ug=ug;
+@@ -80,7 +82,9 @@
+ 		pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);
+ 
+ 		CreateJacobianMatrixx(&Jff,femmodel,kmax);
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); delete Jff; delete pJf;
++		femmodel->profiler->Stop(SOLVER);
+ 		uf->AXPY(duf, 1.0); delete duf;
+ 		Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+ 		InputUpdateFromSolutionx(femmodel,ug);
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_fct.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_fct.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_fct.cpp	(revision 22551)
+@@ -403,7 +403,9 @@
+ 	delete uf;
+ 	
+ 	/*Go solve lower order solution*/
++	femmodel->profiler->Start(SOLVER);
+ 	SolverxPetsc(&u,LHS,RHS,NULL,NULL, femmodel->parameters); 
++	femmodel->profiler->Stop(SOLVER);
+ 	MatFree(&LHS);
+ 	VecFree(&RHS);
+ 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_la.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_la.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_la.cpp	(revision 22551)
+@@ -63,7 +63,11 @@
+ 			SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 			Reduceloadx(pf, Kfs, ys); delete Kfs;
++
++			femmodel->profiler->Start(SOLVER);
+ 			Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
++			femmodel->profiler->Stop(SOLVER);
++
+ 			delete Kff; delete pf; delete df;
+ 			Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
+ 
+@@ -94,7 +98,11 @@
+ 		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
++
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
++		femmodel->profiler->Stop(SOLVER);
++
+ 		delete Kff; delete pf; delete df;
+ 		Mergesolutionfromftogx(&pug, uf,ys,femmodel->nodes,femmodel->parameters); delete uf; delete ys;
+ 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 22551)
+@@ -67,7 +67,9 @@
+ 		SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_horiz, Kfs_horiz, ys); delete Kfs_horiz;
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
++		femmodel->profiler->Stop(SOLVER);
+ 		Mergesolutionfromftogx(&ug_horiz, uf_horiz,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 		InputUpdateFromSolutionx(femmodel,ug_horiz);
+ 
+@@ -81,7 +83,9 @@
+ 		SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert, &df_vert,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_vert, Kfs_vert, ys); delete Kfs_vert;
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf_vert, Kff_vert, pf_vert, NULL, df_vert,femmodel->parameters); delete Kff_vert; delete pf_vert; delete df_vert;
++		femmodel->profiler->Stop(SOLVER);
+ 		Mergesolutionfromftogx(&ug_vert, uf_vert,ys,femmodel->nodes,femmodel->parameters);
+ 		delete uf_vert; 
+ 		delete ys; 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_la_theta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_la_theta.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_la_theta.cpp	(revision 22551)
+@@ -58,7 +58,11 @@
+ 		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
++
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
++		femmodel->profiler->Stop(SOLVER);
++
+ 		delete Kff; delete pf; delete df;
+ 		Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
+ 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 22551)
+@@ -76,7 +76,9 @@
+ 		delete tg;
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
++		femmodel->profiler->Start(SOLVER);
+ 		Solverx(&tf, Kff, pf, tf_old, df, femmodel->parameters);
++		femmodel->profiler->Stop(SOLVER);
+ 		Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 		if(isenthalpy){ 
+ 			convergence(&converged,Kff,pf,tf,tf_old,0.05,eps_rel,NAN); 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 22550)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 22551)
+@@ -28,7 +28,11 @@
+ 	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys,true); delete Kfs; //true means spc = 0
++
++	femmodel->profiler->Start(SOLVER);
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); delete Kff; delete pf; delete df;
++	femmodel->profiler->Stop(SOLVER);
++
+ 	Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters,true); delete ys; //true means spc0
+ 	InputUpdateFromSolutionx(femmodel,ug);
+ 	delete ug; delete uf;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22551-22552.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22551-22552.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22551-22552.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22551)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22552)
+@@ -1315,6 +1315,7 @@
+ 	AC_MSG_CHECKING([for scalapack])
+ 	if test "x$SCALAPACK_ROOT" = "xno" && test "x$SCALAPACKLIB" = "xno"; then
+ 			HAVE_SCALAPACK=no
++			SCALAPACKLIB=
+ 	else if test "x$SCALAPACK_ROOT" != "xno"; then
+ 		if ! test -d "$SCALAPACK_ROOT"; then
+ 		 AC_MSG_ERROR([scalapack directory provided ($SCALAPACK_ROOT) does not exist]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22552-22553.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22552-22553.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22552-22553.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22552)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22553)
+@@ -4734,7 +4734,7 @@
+ 	solution_type=StringToEnumx(solution);
+ 	
+ 	/*Create femmodel from input files: */
+-	profiler->Start(START);
++	profiler->Start(MPROCESSOR);
+ 	this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
+ 	profiler->Stop(MPROCESSOR);
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22553-22554.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22553-22554.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22553-22554.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 22553)
++++ ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 22554)
+@@ -64,7 +64,7 @@
+ /*}}}*/
+ void Profiler::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+ 
+-	IssmDouble* pointer = NULL;
++	IssmPDouble* pointer = NULL;
+ 	bool*       bpointer = NULL;
+ 
+ 	MARSHALLING_ENUM(ProfilerEnum);
+@@ -126,7 +126,7 @@
+ 	return int(reCast<int,IssmPDouble>(delta)%60);
+ }
+ /*}}}*/
+-IssmDouble  Profiler::Memory(int tag){/*{{{*/
++IssmPDouble  Profiler::Memory(int tag){/*{{{*/
+ 
+ 	/*Get initial flops*/
+ 	_assert_(tag>=0); 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22554-22555.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22554-22555.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22554-22555.diff	(revision 22755)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22554)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 22555)
+@@ -31,11 +31,22 @@
+ int  Inputs::AddInput(Input* in_input){/*{{{*/
+ 
+ 	_assert_(in_input); 
++	int enum_name = in_input->InstanceEnum();
+ 
+-	/*Delete input if it already exists*/
+-	this->DeleteInput(in_input->InstanceEnum());
++	/*Go through current inputs*/
++	int size = this->Size();
++	for(int i=0;i<size;i++){
++		Input* input=xDynamicCast<Input*>(this->objects[i]);
+ 
+-	/*Now add new input to the dataset*/
++		/*If it's already there, remove it and replace it with in_input*/
++		if(input->InstanceEnum()==enum_name){
++			delete input;
++			this->objects[i] = in_input;
++			return 1;
++		}
++	}
++
++	/*It is new, add input to the dataset*/
+ 	this->AddObject(in_input);
+ 
+ 	return 1;
+@@ -46,9 +57,17 @@
+ 	/*Delete input if it already exists*/
+ 	this->DeleteInput(newenumtype);
+ 
+-	/*Now get old input and change its enum (do not error out if not found)*/
+-	Input* input=this->GetInput(oldenumtype);
+-	if(input) input->ChangeEnum(newenumtype);
++	/*Go through current inputs*/
++	int size = this->Size();
++	for(int i=0;i<size;i++){
++		Input* input=xDynamicCast<Input*>(this->objects[i]);
++
++		/*If it's already there, remove it and replace it with in_input*/
++		if(input->InstanceEnum()==oldenumtype){
++			input->ChangeEnum(newenumtype);
++			return;
++		}
++	}
+ }/*}}}*/
+ void Inputs::Configure(Parameters* parameters){/*{{{*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22555-22556.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22555-22556.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22555-22556.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/shared/Bamg/HeapSort.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/HeapSort.h	(revision 22555)
++++ ../trunk-jpl/src/c/shared/Bamg/HeapSort.h	(revision 22556)
+@@ -59,7 +59,8 @@
+ 	r=n;
+ 	c--; //the array must starts at 1 and not 0 
+ 	order = new int[n];
+-	for(i=0;i<n;i++) order[i]=i+1;
++	for(i=0;i<n;i++) order[i]=i;
++	order--;
+ 
+ 	/*Sorting algorithm*/
+ 	for(;;){
+@@ -80,8 +81,14 @@
+ 			j=2*j;
+ 			if  (j>r) {c[i]=crit;order[i]=pos;break;}
+ 			if ((j<r) && (c[j] < c[j+1]))j++;
+-			if (crit < c[j]) {c[i]=c[j];order[i]=order[j];}
+-			else{c[i]=crit;order[i]=pos;break;}
++			if (crit < c[j]){
++				c[i]=c[j];
++				order[i]=order[j];
++			}
++			else{
++				c[i]=crit;order[i]=pos;
++				break;
++			}
+ 		}
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22556-22557.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22556-22557.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22556-22557.diff	(revision 22755)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 22556)
++++ ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 22557)
+@@ -57,23 +57,14 @@
+ }
+ /*}}}*/
+ void IntVecParam::DeepEcho(void){/*{{{*/
+-
+-	int i;
+-
+-	_printf_("IntVecParam:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   vector size: " << this->M << "\n");
+-	for(i=0;i<this->M;i++){
+-		_printf_(i << " " << this->values[i] << "\n");
+-	}
++	_printf_(setw(22)<<"   IntVecParam "<<setw(35)<<left<<EnumToStringx(this->enum_type)<<" [");
++	for(int i=0;i<this->M;i++) _printf_(" "<<this->values[i]);
++	_printf_("]\n");
+ }
+ /*}}}*/
+ void IntVecParam::Echo(void){/*{{{*/
+ 
+-	_printf_("IntVecParam:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   vector size: " << this->M << "\n");
+-
++	this->DeepEcho();
+ }
+ /*}}}*/
+ int  IntVecParam::Id(void){ return -1; }/*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22557-22558.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22557-22558.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22557-22558.diff	(revision 22755)
@@ -0,0 +1,479 @@
+Index: ../trunk-jpl/src/c/main/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/main/globals.h	(revision 22557)
++++ ../trunk-jpl/src/c/main/globals.h	(revision 22558)
+@@ -15,6 +15,7 @@
+ /*String that is used to characterize our toolkits, ends up in Petsc Options
+  * database if we use Petsc. Can also be used to characterize the ISSM toolkit,
+  * often used when Petsc is not allowed*/
++char* ToolkitOptions::toolkittype;
+ char* ToolkitOptions::toolkitoptions;
+ #endif
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22557)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22558)
+@@ -808,6 +808,7 @@
+ 	InputFileNameEnum,
+ 	LockFileNameEnum,
+ 	RestartFileNameEnum,
++	ToolkitsTypesEnum,
+ 	ToolkitsOptionsAnalysesEnum,
+ 	ToolkitsOptionsStringsEnum,
+ 	QmuErrNameEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22558)
+@@ -796,6 +796,7 @@
+ 		case InputFileNameEnum : return "InputFileName";
+ 		case LockFileNameEnum : return "LockFileName";
+ 		case RestartFileNameEnum : return "RestartFileName";
++		case ToolkitsTypesEnum : return "ToolkitsTypes";
+ 		case ToolkitsOptionsAnalysesEnum : return "ToolkitsOptionsAnalyses";
+ 		case ToolkitsOptionsStringsEnum : return "ToolkitsOptionsStrings";
+ 		case QmuErrNameEnum : return "QmuErrName";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22558)
+@@ -814,6 +814,7 @@
+ 	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+ 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+ 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
++	      else if (strcmp(name,"ToolkitsTypes")==0) return ToolkitsTypesEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+ 	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
+ 	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
+-	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
++	      if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
++	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+ 	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+ 	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+ 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"Seg")==0) return SegEnum;
+ 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+-	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"Tetra")==0) return TetraEnum;
++	      if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
++	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+ 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+-	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
++	      if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
++	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 22558)
+@@ -20,6 +20,7 @@
+ 	int*        indices=NULL;
+ 	int         num_indices;
+ 	char* options=NULL;
++	char* toolkit=NULL;
+ 
+ 	IssmDouble* xp=NULL;
+ 	IssmDouble* xp_backup=NULL;
+@@ -34,8 +35,8 @@
+ 		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+ 
+ 		/*Solver pointers depend on what type of solver we are implementing: */
+-		options=OptionsFromAnalysis(parameters,DefaultAnalysisEnum); //options database is not filled in yet, use default.
+-		ToolkitOptions::Init(options);
++		options=OptionsFromAnalysis(&toolkit,parameters,DefaultAnalysisEnum);
++		ToolkitOptions::Init(toolkit,options);
+ 
+ 		switch(IssmSolverTypeFromToolkitOptions()){
+ 			case MumpsEnum:{
+Index: ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp	(revision 22558)
+@@ -18,18 +18,22 @@
+ 
+ void ParseToolkitsOptionsx(Parameters* parameters,FILE* fid){
+ 
+-	char line [1000];
++	char line[1000];
++	char word1[1000];
++	char word2[1000];
+ 	int my_rank;
+ 	int i;
+ 
+ 	/*intermediary: */
+-	IssmDouble* analyses=NULL;
+-	char** strings=NULL;
+-	int numanalyses;
+-	char* string=NULL;
+-	char* newstring=NULL;
+-	char* catstring=NULL;
+-	int   stringlength;
++	int         *analyses     = NULL;
++	char       **strings      = NULL;
++	char        *string       = NULL;
++	char       **toolkits     = NULL;
++	char        *toolkit      = NULL;
++	char        *newstring    = NULL;
++	char        *catstring    = NULL;
++	int          numanalyses;
++	int          stringlength,toolkitlength;
+ 
+ 	/*Get my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+@@ -38,23 +42,29 @@
+ 
+ 		/*Now, go through lines and figure out how many analyses we have: */
+ 		numanalyses=0;
+-		while ( fgets(line, sizeof line, fid) ){
++		while(fgets(line, sizeof line, fid)){
+ 			/*skip comments and empty lines: */
+-			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
++			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r')) continue;
+ 			/*ok, first time, we should get an analysis enum, starting with a +: */
+-			if (line[0]=='+')numanalyses++;
+-			else continue;
++			if (line[0]=='+'){
++				numanalyses++;
++			}
++			else{
++				continue;
++			}
+ 		}
+ 
+ 		/*Now, allocate analyses and strings: */
+-		analyses=xNew<IssmDouble>(numanalyses);
+-		strings=xNew<char*>(numanalyses);
+-		for(i=0;i<numanalyses;i++)strings[i]=NULL; 
++		analyses = xNew<int>(numanalyses);
++		strings  = xNew<char*>(numanalyses);
++		toolkits = xNew<char*>(numanalyses);
++		for(i=0;i<numanalyses;i++) strings[i]  = NULL; 
++		for(i=0;i<numanalyses;i++) toolkits[i] = NULL; 
+ 
+ 		/*Go back to beginning of file:*/
+ 		fseek(fid,0,SEEK_SET);
+ 		numanalyses=0;
+-		while ( fgets(line, sizeof line, fid) ){
++		while( fgets(line, sizeof line, fid)){
+ 
+ 			/*skip comments and empty lines: */
+ 			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
+@@ -62,12 +72,20 @@
+ 			/*Get rid of end of line: */
+ 			line[strlen(line)-1]='\0';
+ 
+-			if (line[0]=='+'){ /*this is the analysis line: */
++			if(line[0]=='+'){ /*this is the analysis line: */
+ 				analyses[numanalyses]=StringToEnumx(&line[1]);  //skip the '+'
+ 				numanalyses++;
++				/*Now get toolkit (should be following line)*/
++				if(!fgets(line, sizeof line, fid)) _error_("could not read toolkit for analysis " << &line[1]);
++				sscanf(line,"-%s %s",&word1[0],&word2[0]);
++				if(strcmp(word1,"toolkit")!=0) _error_("toolkit option does not follow analysis");
++				toolkit=xNew<char>((strlen(word2)+1)); 
++				xMemCpy<char>(toolkit,word2,(strlen(word2)+1));
++				toolkits[numanalyses-1]=toolkit;
++				continue;
+ 			}
+-			else{ /*this is an option corresponding to analysis numanalyses-1. Add it 
+-			to the already existing options*/
++			else{
++				/*this is an option corresponding to analysis numanalyses-1. Add it to the already existing options*/
+ 				if(strings[numanalyses-1]==NULL){
+ 					string=xNew<char>((strlen(line)+1)); 
+ 					xMemCpy<char>(string,line,(strlen(line)+1));
+@@ -96,11 +114,22 @@
+ 	/*Ok, broadcast to other cpus: */
+ 	ISSM_MPI_Bcast(&numanalyses,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	if(my_rank!=0){
+-		analyses=xNew<IssmDouble>(numanalyses);
+-		strings=xNew<char*>(numanalyses);
++		analyses  = xNew<int>(numanalyses);
++		toolkits  = xNew<char*>(numanalyses);
++		strings   = xNew<char*>(numanalyses);
+ 	}
+-	ISSM_MPI_Bcast(analyses,numanalyses,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(analyses,numanalyses,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	for(i=0;i<numanalyses;i++){
++		char* toolkit=toolkits[i];
++		if(my_rank==0){
++			if(toolkit==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found");
++		}
++		if(my_rank==0)toolkitlength=(strlen(toolkit)+1)*sizeof(char);
++		ISSM_MPI_Bcast(&toolkitlength,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++		if(my_rank!=0)toolkit=xNew<char>(toolkitlength);
++		ISSM_MPI_Bcast(toolkit,toolkitlength,ISSM_MPI_CHAR,0,IssmComm::GetComm());
++		if(my_rank!=0)toolkits[i]=toolkit;
++
+ 		char* string=strings[i];
+ 		if(my_rank==0){
+ 			if(string==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found");
+@@ -114,11 +143,14 @@
+ 
+ 	/*Ok, out of strings and analyses and numanalyses, create parameters, and plug them into parameters container: */
+ 	parameters->AddObject(new StringArrayParam(ToolkitsOptionsStringsEnum,strings,numanalyses));
+-	parameters->AddObject(new DoubleVecParam(ToolkitsOptionsAnalysesEnum,analyses,numanalyses));
++	parameters->AddObject(new StringArrayParam(ToolkitsTypesEnum,toolkits,numanalyses));
++	parameters->AddObject(new IntVecParam(ToolkitsOptionsAnalysesEnum,analyses,numanalyses));
+ 
+ 	/*Clean up and return*/
+ 	for(i=0;i<numanalyses;i++) xDelete<char>(strings[i]);
++	for(i=0;i<numanalyses;i++) xDelete<char>(toolkits[i]);
+ 	xDelete<char*>(strings);
+-	xDelete<IssmDouble>(analyses);
++	xDelete<char*>(toolkits);
++	xDelete<int>(analyses);
+ 	return;
+ }
+Index: ../trunk-jpl/src/c/toolkits/objects/Vector.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/objects/Vector.h	(revision 22557)
++++ ../trunk-jpl/src/c/toolkits/objects/Vector.h	(revision 22558)
+@@ -97,8 +97,6 @@
+ 		#endif
+ 		void InitCheckAndSetType(void){ /*{{{*/
+ 
+-			char* toolkittype=NULL;
+-
+ 			#ifdef _HAVE_PETSC_
+ 			pvector=NULL;
+ 			#endif
+@@ -105,10 +103,11 @@
+ 			ivector=NULL;
+ 
+ 			/*retrieve toolkittype: */
+-			toolkittype=ToolkitOptions::GetToolkitType();
++			char* toolkittype=ToolkitOptions::GetToolkitType();
++			_assert_(toolkittype); 
+ 
+ 			/*set vector type: */
+-			if (strcmp(toolkittype,"petsc")==0){
++			if(strcmp(toolkittype,"petsc")==0){
+ 				#ifdef _HAVE_PETSC_
+ 				type=PetscVecType; 
+ 				#else
+@@ -119,7 +118,9 @@
+ 				/*let this choice stand:*/
+ 				type=IssmVecType;
+ 			}
+-			else _error_("unknow toolkit type ");
++			else{
++				_error_("unknow toolkit type ");
++			}
+ 
+ 			/*Free ressources: */
+ 			xDelete<char>(toolkittype);
+Index: ../trunk-jpl/src/c/toolkits/objects/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/objects/Matrix.h	(revision 22557)
++++ ../trunk-jpl/src/c/toolkits/objects/Matrix.h	(revision 22558)
+@@ -126,8 +126,6 @@
+ 		/*}}}*/
+ 		void InitCheckAndSetType(void){/*{{{*/
+ 
+-			char* toolkittype=NULL;
+-
+ 			#ifdef _HAVE_PETSC_
+ 			pmatrix=NULL;
+ 			#endif
+@@ -134,7 +132,7 @@
+ 			imatrix=NULL;
+ 
+ 			/*retrieve toolkittype: */
+-			toolkittype=ToolkitOptions::GetToolkitType();
++			char* toolkittype=ToolkitOptions::GetToolkitType();
+ 
+ 			/*set matrix type: */
+ 			if (strcmp(toolkittype,"petsc")==0){
+@@ -148,7 +146,9 @@
+ 				/*let this choice stand:*/
+ 				type=IssmMatType;
+ 			}
+-			else _error_("unknow toolkit type ");
++			else{
++				_error_("unknow toolkit type ");
++			}
+ 
+ 			/*Free ressources: */
+ 			xDelete<char>(toolkittype);
+Index: ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp	(revision 22558)
+@@ -8,23 +8,26 @@
+ #include "../shared/Exceptions/exceptions.h"
+ #include "../shared/MemOps/MemOps.h"
+ 
+-void ToolkitOptions::Init(char* options){ /*{{{*/
++void  ToolkitOptions::Init(const char* toolkit_in,const char* options){ /*{{{*/
+ 
+ 	/*First, avoid a leak: */
+ 	xDelete<char>(toolkitoptions);
++	xDelete<char>(toolkittype);
+ 
+ 	/*copy options into toolkitoptions:*/
++	_assert_(toolkit_in);
+ 	_assert_(options);
+-	toolkitoptions= xNew<char>(strlen(options)+1); 
+-	sprintf(toolkitoptions,   "%s",options);
+-
++	toolkittype = xNew<char>(strlen(toolkit_in)+1); 
++	sprintf(toolkittype,"%s",toolkit_in);
++	toolkitoptions = xNew<char>(strlen(options)+1); 
++	sprintf(toolkitoptions,"%s",options);
+ }/*}}}*/
+ char* ToolkitOptions::GetToolkitType(){  /*{{{*/
+ 
+-	/*Look for token: -toolkit, and return value:*/
+-
+-	return TokenValue(toolkitoptions,"toolkit");
+-
++	_assert_(toolkittype); 
++	char* toolkittype_out = xNew<char>(strlen(toolkittype)+1); 
++	sprintf(toolkittype_out,"%s",toolkittype);
++	return toolkittype_out;
+ }/*}}}*/
+ char* ToolkitOptions::GetToolkitOptionValue(const char* option){  /*{{{*/
+ 
+Index: ../trunk-jpl/src/c/toolkits/ToolkitOptions.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/ToolkitOptions.h	(revision 22557)
++++ ../trunk-jpl/src/c/toolkits/ToolkitOptions.h	(revision 22558)
+@@ -10,10 +10,11 @@
+ class ToolkitOptions {
+ 
+ 	private:
++		static char* toolkittype;
+ 		static char* toolkitoptions;
+ 
+ 	public:
+-		static void Init(char* options);
++		static void Init(const char* type_in,const char* options);
+ 		static char* GetToolkitType(void);
+ 		static char* GetToolkitOptionValue(const char* option);
+ };
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22557)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22558)
+@@ -571,27 +571,29 @@
+ /*}}}*/
+ 
+ /*Methods relating to parameters: */
+-char* OptionsFromAnalysis(Parameters* parameters,int analysis_type){ /*{{{*/
++char* OptionsFromAnalysis(char** pouttoolkit,Parameters* parameters,int analysis_type){ /*{{{*/
+ 
+ 	/* figure out ISSM options for current analysis, return a string. */ 
+ 
+ 	/*output: */
+-	char*   outstring=NULL;
++	char *outstring  = NULL;
++	char *outtoolkit = NULL;
+ 
+ 	/*intermediary: */
+ 	int          dummy;
+-	IssmDouble  *analyses    = NULL;
++	int         *analyses    = NULL;
+ 	char       **strings     = NULL;
+ 	char        *string      = NULL;
++	char       **toolkits    = NULL;
++	char        *toolkit     = NULL;
+ 	int          numanalyses;
+ 	int          found       = -1;
+ 	int          i;
+ 
+-	numanalyses=0;
+ 	parameters->FindParam(&strings,&numanalyses,ToolkitsOptionsStringsEnum);
++	parameters->FindParam(&toolkits,&dummy,ToolkitsTypesEnum); _assert_(dummy==numanalyses); 
++	parameters->FindParam(&analyses,&dummy,ToolkitsOptionsAnalysesEnum); _assert_(dummy==numanalyses); 
+ 
+-	parameters->FindParam(&analyses,&dummy,ToolkitsOptionsAnalysesEnum);
+-
+ 	if(numanalyses==0)return NULL; //we did not find petsc options, don't bother.
+ 
+ 	/*ok, go through analyses and figure out if it corresponds to our analysis_type: */
+@@ -610,21 +612,27 @@
+ 			}
+ 		}
+ 	}
+-	if (found==-1){
++	if(found==-1){
+ 		_error_("could find neither a default analysis nor analysis " << EnumToStringx(analysis_type));
+ 	}
+ 
+-	/*ok, grab the option string: */
++	/*1. Grab the option toolkit: */
++	outtoolkit=xNew<char>(strlen(toolkits[found])+1);
++	strcpy(outtoolkit,toolkits[found]);
++	*pouttoolkit = outtoolkit;
++
++	/*2. Grab the option string: */
+ 	outstring=xNew<char>(strlen(strings[found])+1);
+ 	strcpy(outstring,strings[found]);
+ 
+ 	/*Free ressources*/
+-	xDelete<IssmDouble>(analyses);
+ 	for(i=0;i<numanalyses;i++){
+-		string=strings[i];
+-		xDelete<char>(string);
++		xDelete<char>(toolkits[i]);
++		xDelete<char>(strings[i]);
+ 	}
++	xDelete<char*>(toolkits);
+ 	xDelete<char*>(strings);
++	xDelete<int>(analyses);
+ 	return outstring;
+ } 
+ /*}}}*/
+@@ -637,13 +645,14 @@
+ 	 * and parameters
+ 	 */ 
+ 
+-	char* options=NULL;
++	char* options = NULL;
++	char* toolkit = NULL;
+ 
+ 	/*Recover first the options string for this analysis: */
+-	options=OptionsFromAnalysis(parameters,analysis_type);
++	options=OptionsFromAnalysis(&toolkit,parameters,analysis_type);
+ 
+ 	/*Initialize our Toolkit Options: */
+-	ToolkitOptions::Init(options);
++	ToolkitOptions::Init(toolkit,options);
+ 
+ 	#ifdef _HAVE_PETSC_
+ 		/*In case we are using PETSC, we do not rely on issmoptions. Instead, we dump issmoptions into the Petsc 
+@@ -671,6 +680,7 @@
+ 	#endif
+ 
+ 	xDelete<char>(options);
++	xDelete<char>(toolkit);
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22558-22559.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22558-22559.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22558-22559.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22558)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22559)
+@@ -75,7 +75,7 @@
+ };
+ 
+ /*Methods relating to parameters: */
+-char *OptionsFromAnalysis(Parameters *parameters,int analysis_type);
++char *OptionsFromAnalysis(char** ptoolkit,Parameters *parameters,int analysis_type);
+ void  ToolkitsOptionsFromAnalysis(Parameters* parameters,int analysis_type);
+ 
+ #endif //ifndef _PARAMETERS_H_
Index: /issm/oecreview/Archive/21724-22754/ISSM-22559-22560.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22559-22560.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22559-22560.diff	(revision 22755)
@@ -0,0 +1,63 @@
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22559)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22560)
+@@ -657,15 +657,6 @@
+ 	#ifdef _HAVE_PETSC_
+ 		/*In case we are using PETSC, we do not rely on issmoptions. Instead, we dump issmoptions into the Petsc 
+ 		 * options database: */
+-
+-		#if _PETSC_MAJOR_ == 2 
+-		PetscOptionsDestroy();
+-		PetscOptionsCreate();
+-		//PetscOptionsCheckInitial_Private();
+-		//PetscOptionsCheckInitial_Components();
+-		PetscOptionsSetFromOptions();
+-		PetscOptionsInsertMultipleString(options); //our patch
+-		#else
+ 		#if (_PETSC_MINOR_>=7)
+ 		PetscOptionsSetFromOptions(NULL);
+ 		PetscOptionsClear(NULL);
+@@ -673,9 +664,10 @@
+ 		PetscOptionsSetFromOptions();
+ 		PetscOptionsClear();
+ 		#endif
+-		//PetscOptionsSetFromOptions();
+-		PetscOptionsInsertMultipleString(options); //our patch
+-		#endif
++		int ierr = PetscOptionsInsertString(NULL,options);
++		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120 -mat_mumps_icntl_28 2 -mat_mumps_icntl_29 2");
++		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120");
++		if(ierr) _error_("Could not enter PETSc options");
+ 
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 22559)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 22560)
+@@ -24,7 +24,7 @@
+ 	Mat outmatrix=NULL;
+ 
+ 	/*parameters: */
+-	double sparsity=.001; //default
++	double sparsity=0.001; //default
+ 	int    m,n;
+ 	int    d_nz,o_nz,nnz;
+ 
+@@ -113,15 +113,9 @@
+ 	/*preallocation  according to type: */
+ 	MatGetType(outmatrix,&type);
+ 
+-	#if _PETSC_MAJOR_ == 2 
+-	if((strcmp(type,"mpiaij")==0) || (strcmp(type,"aijmumps")==0)){
+-		MatMPIAIJSetPreallocation(outmatrix,d_nz,NULL,o_nz,NULL);
+-	}
+-	#else
+ 	if((strcmp(type,"mpiaij")==0) || (strcmp(type,"mpidense")==0)){
+ 		MatMPIAIJSetPreallocation(outmatrix,d_nz,NULL,o_nz,NULL);
+ 	}
+-	#endif
+ 
+ 	return outmatrix;
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22560-22561.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22560-22561.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22560-22561.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22560)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22561)
+@@ -660,13 +660,15 @@
+ 		#if (_PETSC_MINOR_>=7)
+ 		PetscOptionsSetFromOptions(NULL);
+ 		PetscOptionsClear(NULL);
++		int ierr = PetscOptionsInsertString(NULL,options);
++		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120 -mat_mumps_icntl_28 2 -mat_mumps_icntl_29 2");
++		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120");
+ 		#else
+ 		PetscOptionsSetFromOptions();
+ 		PetscOptionsClear();
++		int ierr = PetscOptionsInsertString(options);
+ 		#endif
+-		int ierr = PetscOptionsInsertString(NULL,options);
+-		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120 -mat_mumps_icntl_28 2 -mat_mumps_icntl_29 2");
+-		//int ierr = PetscOptionsInsertString(NULL,"-mat_type mpiaij -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps -mat_mumps_icntl_14 120");
++
+ 		if(ierr) _error_("Could not enter PETSc options");
+ 
+ 	#endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-22561-22562.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22561-22562.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22561-22562.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/solvers/mumpsoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 22561)
++++ ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 22562)
+@@ -29,6 +29,6 @@
+ 	mumps.pc_factor_shift_positive_definite=getfieldvalue(options,'pc_factor_shift_positive_definite','true');
+ 
+ 	%These 2 lines make raijin break (ptwgts error during solver with PETSc 3.3)
+-	%mumps.mat_mumps_icntl_28=2; %1=serial, 2=parallel
+-	%mumps.mat_mumps_icntl_29=2; %parallel ordering 1 = ptscotch, 2 = parmetis
++	mumps.mat_mumps_icntl_28=2; %1=serial, 2=parallel
++	mumps.mat_mumps_icntl_29=2; %parallel ordering 1 = ptscotch, 2 = parmetis
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22562-22563.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22562-22563.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22562-22563.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test540.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.m	(revision 22562)
++++ ../trunk-jpl/test/NightlyRun/test540.m	(revision 22563)
+@@ -15,6 +15,8 @@
+ pos = find(md.mesh.vertexonboundary);
+ md.levelset.spclevelset(pos) = md.mask.ice_levelset(pos);
+ 
++%Force MUMPS sequential analysis
++md.toolkits.DefaultAnalysis.mat_mumps_icntl_28=1;
+ md.cluster=generic('name',oshostname(),'np',2);
+ md=solve(md,'Transient');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test540.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test540.py	(revision 22562)
++++ ../trunk-jpl/test/NightlyRun/test540.py	(revision 22563)
+@@ -24,6 +24,8 @@
+ pos = np.where(md.mesh.vertexonboundary)
+ md.levelset.spclevelset[pos] = md.mask.ice_levelset[pos]
+ 
++#Force MUMPS sequential analysis
++md.toolkits.DefaultAnalysis.mat_mumps_icntl_28=1
+ md.cluster = generic('name',gethostname(),'np',2)
+ md = solve(md,'Transient')
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22563-22564.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22563-22564.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22563-22564.diff	(revision 22755)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/test/NightlyRun/test460.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.py	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test460.py	(revision 22564)
+@@ -28,7 +28,7 @@
+ 	md = setflowequation(md,i,'all')
+ 	md = solve(md,'Stressbalance')
+ 	field_names     = field_names + ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
+-	field_tolerances = field_tolerances + [6e-07,6e-07,2e-06,1e-06,5e-07]
++	field_tolerances = field_tolerances + [6e-07,9e-07,2e-06,1e-06,5e-07]
+ 	field_values = field_values + [
+ 			md.results.StressbalanceSolution.Vx,
+ 			md.results.StressbalanceSolution.Vy,
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 22564)
+@@ -31,7 +31,7 @@
+ 									'Bed2','Surface2','Thickness2','Floatingice2',
+ 									'Bed3','Surface3','Thickness3','Floatingice3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,
+-									5e-12,3e-12,7e-12,2e-11,
++									5e-12,4e-12,7e-12,2e-11,
+ 									1e-10,5e-11,1e-10,7e-10]
+ field_values=[md.results.TransientSolution[0].Base,
+ 							md.results.TransientSolution[0].Surface,
+Index: ../trunk-jpl/test/NightlyRun/test460.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.m	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test460.m	(revision 22564)
+@@ -20,7 +20,7 @@
+ 	md=setflowequation(md,i{1},'all');
+ 	md=solve(md,'Stressbalance');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
+-	field_tolerances={field_tolerances{:},6e-07,6e-07,2e-06,1e-06,5e-07};
++	field_tolerances={field_tolerances{:},6e-07,9e-07,2e-06,1e-06,5e-07};
+ 	field_values={field_values{:},...
+ 		(md.results.StressbalanceSolution.Vx),...
+ 		(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 22564)
+@@ -23,7 +23,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	5e-12,3e-12,7e-12,2e-11,...
++	5e-12,4e-12,7e-12,2e-11,...
+ 	1e-10,5e-11,1e-10,7e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+Index: ../trunk-jpl/test/NightlyRun/test215.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.js	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test215.js	(revision 22564)
+@@ -24,7 +24,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'];
+-field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,5e-09,2e-09];
++field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,7e-09,2e-09];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Gradient1),
+ 	(md.results.StressbalanceSolution[0].J),
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 22564)
+@@ -40,7 +40,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+-field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,5e-09,2e-09]
++field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,7e-09,2e-09]
+ field_values=[md.results.StressbalanceSolution.Gradient1,
+ 							md.results.StressbalanceSolution.J,
+ 							md.results.StressbalanceSolution.MaterialsRheologyBbar,
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 22563)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 22564)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+-field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,5e-09,2e-09};
++field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,7e-09,2e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22564-22565.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22564-22565.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22564-22565.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/test/NightlyRun/test243.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.m	(revision 22564)
++++ ../trunk-jpl/test/NightlyRun/test243.m	(revision 22565)
+@@ -44,7 +44,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names      ={'SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC'};
+-field_tolerances ={1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-11};
++field_tolerances ={1e-11,1e-12,1e-11,2e-11,1e-11,1e-11,1e-12,2e-12,1e-12,1e-12,1e-12,1e-11};
+ 
+ field_values={...
+ 	(md.results.TransientSolution(end).SmbDz(1,1:240)),...
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22564)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22565)
+@@ -34,8 +34,8 @@
+         'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,4e-12,4e-12,2e-12,2e-12,5e-12,5e-12,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,4e-12,2e-12,5e-11,5e-11,5e-11,5e-11]
++        1e-11,1e-10,1e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,5e-12,5e-11,5e-11]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 22564)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 22565)
+@@ -25,7 +25,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,3e-11,2e-12,5e-12,2e-12,5e-12,2e-12,2e-12,5e-12,5e-12,...
++	1e-11,1e-10,1e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,...
+ 	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,5e-12,5e-11,5e-11};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+Index: ../trunk-jpl/test/NightlyRun/test243.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test243.py	(revision 22564)
++++ ../trunk-jpl/test/NightlyRun/test243.py	(revision 22565)
+@@ -57,7 +57,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names      = ['SmbDz','SmbT' ,'SmbD' ,'SmbRe','SmbGdn','SmbGsp','SmbA' ,'SmbEC','SmbMassBalance','SmbMAdd','SmbDzAdd','SmbFAC']
+-field_tolerances = [1e-11,1e-12,1e-11,1e-11,1e-11,1e-11,1e-12,1e-12,1e-12,1e-12,1e-12,1e-11]
++field_tolerances = [1e-11,1e-12,1e-11,2e-11,1e-11,1e-11,1e-12,2e-12,1e-12,1e-12,1e-12,1e-11]
+ #shape is different in python solution (fixed using reshape) which can cause test failure:
+ field_values = [
+ 	md.results.TransientSolution[-1].SmbDz[0,0:240].reshape(1,-1),
Index: /issm/oecreview/Archive/21724-22754/ISSM-22565-22566.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22565-22566.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22565-22566.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 22565)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 22566)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[6e-07,6e-07,2e-06,1e-06,5e-07]
++field_tolerances=[7e-07,7e-07,2e-06,1e-06,5e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 22565)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 22566)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={6e-07,6e-07,2e-06,1e-06,5e-07};
++field_tolerances={7e-07,7e-07,2e-06,1e-06,5e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22566-22567.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22566-22567.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22566-22567.diff	(revision 22755)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 22566)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 22567)
+@@ -60,7 +60,6 @@
+ md.friction.q = numpy.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot = 0.3
+ md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 22566)
++++ ../trunk-jpl/test/Par/79North.par	(revision 22567)
+@@ -40,7 +40,6 @@
+ md.smb.mass_balance=15.*ones(md.mesh.numberofvertices,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 22566)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 22567)
+@@ -41,7 +41,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 22566)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 22567)
+@@ -40,7 +40,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 22566)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 22567)
+@@ -41,7 +41,6 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3
+ md.masstransport.stabilization=1.
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 22566)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 22567)
+@@ -40,7 +40,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 22566)
++++ ../trunk-jpl/test/Par/79North.py	(revision 22567)
+@@ -43,7 +43,6 @@
+ md.smb.mass_balance=15*numpy.ones((md.mesh.numberofvertices))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.3
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 22566)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 22567)
+@@ -61,7 +61,6 @@
+ md.friction.q = numpy.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot = 0.3
+ md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
Index: /issm/oecreview/Archive/21724-22754/ISSM-22567-22568.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22567-22568.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22567-22568.diff	(revision 22755)
@@ -0,0 +1,248 @@
+Index: ../trunk-jpl/test/Archives/Archive211.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive220.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1601.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive209.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive807.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive203.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive227.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive212.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive236.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive221.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive230.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive808.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive219.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive204.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive272.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive228.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive213.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive237.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive222.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive290.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive231.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive336.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive240.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive205.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive273.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive229.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive214.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive238.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive223.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive291.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive232.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive337.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive241.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive206.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive274.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive239.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive224.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive292.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive233.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive338.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive242.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive207.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive275.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive260.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive216.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive201.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive225.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive293.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1501.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive210.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive339.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive208.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive806.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive261.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive217.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive285.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive202.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive270.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive226.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1502.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22568-22569.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22568-22569.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22568-22569.diff	(revision 22755)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/test/NightlyRun/test460.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.m	(revision 22568)
++++ ../trunk-jpl/test/NightlyRun/test460.m	(revision 22569)
+@@ -20,7 +20,7 @@
+ 	md=setflowequation(md,i{1},'all');
+ 	md=solve(md,'Stressbalance');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
+-	field_tolerances={field_tolerances{:},6e-07,9e-07,2e-06,1e-06,5e-07};
++	field_tolerances={field_tolerances{:},6e-07,1e-06,2e-06,1e-06,5e-07};
+ 	field_values={field_values{:},...
+ 		(md.results.StressbalanceSolution.Vx),...
+ 		(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test460.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.py	(revision 22568)
++++ ../trunk-jpl/test/NightlyRun/test460.py	(revision 22569)
+@@ -28,7 +28,7 @@
+ 	md = setflowequation(md,i,'all')
+ 	md = solve(md,'Stressbalance')
+ 	field_names     = field_names + ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
+-	field_tolerances = field_tolerances + [6e-07,9e-07,2e-06,1e-06,5e-07]
++	field_tolerances = field_tolerances + [6e-07,1e-06,2e-06,1e-06,5e-07]
+ 	field_values = field_values + [
+ 			md.results.StressbalanceSolution.Vx,
+ 			md.results.StressbalanceSolution.Vy,
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 22568)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 22569)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+-field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,7e-09,2e-09};
++field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,8e-09,2e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+Index: ../trunk-jpl/test/NightlyRun/test215.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.js	(revision 22568)
++++ ../trunk-jpl/test/NightlyRun/test215.js	(revision 22569)
+@@ -24,7 +24,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'];
+-field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,7e-09,2e-09];
++field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,8e-09,2e-09];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Gradient1),
+ 	(md.results.StressbalanceSolution[0].J),
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 22568)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 22569)
+@@ -40,7 +40,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+-field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,7e-09,2e-09]
++field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,8e-09,2e-09]
+ field_values=[md.results.StressbalanceSolution.Gradient1,
+ 							md.results.StressbalanceSolution.J,
+ 							md.results.StressbalanceSolution.MaterialsRheologyBbar,
+Index: ../trunk-jpl/test/Archives/Archive531.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive540.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive515.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive516.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive501.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive511.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive530.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive504.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22569-22570.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22569-22570.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22569-22570.diff	(revision 22755)
@@ -0,0 +1,178 @@
+Index: ../trunk-jpl/test/NightlyRun/test233.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.js	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test233.js	(revision 22570)
+@@ -19,7 +19,7 @@
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09, 
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, 
+ 	1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, 
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06];
++	1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06];
+ field_values=[
+ 	(md.results.TransientSolution[0](1).Vx),
+ 	(md.results.TransientSolution[0](1).Vy),
+Index: ../trunk-jpl/test/NightlyRun/test233.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.m	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test233.m	(revision 22570)
+@@ -18,7 +18,7 @@
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09, ...
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, ...
+ 	1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, ...
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06};
++	1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 22570)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={7e-07,7e-07,2e-06,1e-06,5e-07};
++field_tolerances={7e-07,7e-07,2e-06,1e-06,6e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test233.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.py	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test233.py	(revision 22570)
+@@ -22,50 +22,50 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsGroundediceMeltingRate1',
+-									'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',
+-									'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3',
+-									'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','Temperature4','BasalforcingsGroundediceMeltingRate4']
++        'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsGroundediceMeltingRate2',
++        'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsGroundediceMeltingRate3',
++        'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','Temperature4','BasalforcingsGroundediceMeltingRate4']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,
+-									1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
+-									1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
+-									1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
++        1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
++        1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,
++        1e-08,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
+ field_values=[md.results.TransientSolution[0].Vx,
+-							md.results.TransientSolution[0].Vy,
+-							md.results.TransientSolution[0].Vz,
+-							md.results.TransientSolution[0].Vel,
+-							md.results.TransientSolution[0].Pressure,
+-							md.results.TransientSolution[0].Base,
+-							md.results.TransientSolution[0].Surface,
+-							md.results.TransientSolution[0].Thickness,
+-							md.results.TransientSolution[0].Temperature,
+-							md.results.TransientSolution[0].BasalforcingsGroundediceMeltingRate,
+-							md.results.TransientSolution[1].Vx,
+-							md.results.TransientSolution[1].Vy,
+-							md.results.TransientSolution[1].Vz,
+-							md.results.TransientSolution[1].Vel,
+-							md.results.TransientSolution[1].Pressure,
+-							md.results.TransientSolution[1].Base,
+-							md.results.TransientSolution[1].Surface,
+-							md.results.TransientSolution[1].Thickness,
+-							md.results.TransientSolution[1].Temperature,
+-							md.results.TransientSolution[1].BasalforcingsGroundediceMeltingRate,
+-							md.results.TransientSolution[2].Vx,
+-							md.results.TransientSolution[2].Vy,
+-							md.results.TransientSolution[2].Vz,
+-							md.results.TransientSolution[2].Vel,
+-							md.results.TransientSolution[2].Pressure,
+-							md.results.TransientSolution[2].Base,
+-							md.results.TransientSolution[2].Surface,
+-							md.results.TransientSolution[2].Thickness,
+-							md.results.TransientSolution[2].Temperature,
+-							md.results.TransientSolution[2].BasalforcingsGroundediceMeltingRate,
+-							md.results.TransientSolution[3].Vx,
+-							md.results.TransientSolution[3].Vy,
+-							md.results.TransientSolution[3].Vz,
+-							md.results.TransientSolution[3].Vel,
+-							md.results.TransientSolution[3].Pressure,
+-							md.results.TransientSolution[3].Base,
+-							md.results.TransientSolution[3].Surface,
+-							md.results.TransientSolution[3].Thickness,
+-							md.results.TransientSolution[3].Temperature,
+-							md.results.TransientSolution[3].BasalforcingsGroundediceMeltingRate]
++        md.results.TransientSolution[0].Vy,
++        md.results.TransientSolution[0].Vz,
++        md.results.TransientSolution[0].Vel,
++        md.results.TransientSolution[0].Pressure,
++        md.results.TransientSolution[0].Base,
++        md.results.TransientSolution[0].Surface,
++        md.results.TransientSolution[0].Thickness,
++        md.results.TransientSolution[0].Temperature,
++        md.results.TransientSolution[0].BasalforcingsGroundediceMeltingRate,
++        md.results.TransientSolution[1].Vx,
++        md.results.TransientSolution[1].Vy,
++        md.results.TransientSolution[1].Vz,
++        md.results.TransientSolution[1].Vel,
++        md.results.TransientSolution[1].Pressure,
++        md.results.TransientSolution[1].Base,
++        md.results.TransientSolution[1].Surface,
++        md.results.TransientSolution[1].Thickness,
++        md.results.TransientSolution[1].Temperature,
++        md.results.TransientSolution[1].BasalforcingsGroundediceMeltingRate,
++        md.results.TransientSolution[2].Vx,
++        md.results.TransientSolution[2].Vy,
++        md.results.TransientSolution[2].Vz,
++        md.results.TransientSolution[2].Vel,
++        md.results.TransientSolution[2].Pressure,
++        md.results.TransientSolution[2].Base,
++        md.results.TransientSolution[2].Surface,
++        md.results.TransientSolution[2].Thickness,
++        md.results.TransientSolution[2].Temperature,
++        md.results.TransientSolution[2].BasalforcingsGroundediceMeltingRate,
++        md.results.TransientSolution[3].Vx,
++        md.results.TransientSolution[3].Vy,
++        md.results.TransientSolution[3].Vz,
++        md.results.TransientSolution[3].Vel,
++        md.results.TransientSolution[3].Pressure,
++        md.results.TransientSolution[3].Base,
++        md.results.TransientSolution[3].Surface,
++        md.results.TransientSolution[3].Thickness,
++        md.results.TransientSolution[3].Temperature,
++        md.results.TransientSolution[3].BasalforcingsGroundediceMeltingRate]
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 22570)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[7e-07,7e-07,2e-06,1e-06,5e-07]
++field_tolerances=[7e-07,7e-07,2e-06,1e-06,6e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test460.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.m	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test460.m	(revision 22570)
+@@ -20,7 +20,7 @@
+ 	md=setflowequation(md,i{1},'all');
+ 	md=solve(md,'Stressbalance');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
+-	field_tolerances={field_tolerances{:},6e-07,1e-06,2e-06,1e-06,5e-07};
++	field_tolerances={field_tolerances{:},2e-06,2e-06,2e-06,2e-06,5e-07};
+ 	field_values={field_values{:},...
+ 		(md.results.StressbalanceSolution.Vx),...
+ 		(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test460.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.py	(revision 22569)
++++ ../trunk-jpl/test/NightlyRun/test460.py	(revision 22570)
+@@ -28,7 +28,7 @@
+ 	md = setflowequation(md,i,'all')
+ 	md = solve(md,'Stressbalance')
+ 	field_names     = field_names + ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
+-	field_tolerances = field_tolerances + [6e-07,1e-06,2e-06,1e-06,5e-07]
++	field_tolerances = field_tolerances + [2e-06,2e-06,2e-06,2e-06,5e-07]
+ 	field_values = field_values + [
+ 			md.results.StressbalanceSolution.Vx,
+ 			md.results.StressbalanceSolution.Vy,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22570-22571.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22570-22571.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22570-22571.diff	(revision 22755)
@@ -0,0 +1,173 @@
+Index: ../trunk-jpl/jenkins/linux64_ross
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross	(revision 22571)
+@@ -36,7 +36,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools     install.sh                
++EXTERNALPACKAGES="autotools     install.sh
++						cmake        install.sh                
+ 						mpich         install-3.2-linux64.sh    
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+Index: ../trunk-jpl/jenkins/linux64_ross_python
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_python	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_python	(revision 22571)
+@@ -36,6 +36,7 @@
+ 
+ #List of external pakages to be installed and their installation scripts
+ EXTERNALPACKAGES="mpich         install-3.2-linux64.sh    
++						cmake         install.sh    
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+ 						chaco         install.sh 
+Index: ../trunk-jpl/jenkins/linux64_caladan_ad
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_caladan_ad	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_caladan_ad	(revision 22571)
+@@ -27,7 +27,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools install.sh                
++EXTERNALPACKAGES="autotools install.sh
++					cmake install.sh                
+ 					 mpich install-3.2-linux64.sh
+ 					 petsc install-3.7-linux64.sh
+ 					 metis install-5.0.1-linux64.sh
+Index: ../trunk-jpl/jenkins/linux64_caladan_ampi
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_caladan_ampi	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_caladan_ampi	(revision 22571)
+@@ -36,7 +36,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools install.sh 
++EXTERNALPACKAGES="autotools install.sh
++					 cmake install.sh 
+ 					 mpich install-3.2-linux64.sh
+ 					 petsc install-3.7-linux64.sh
+ 					 metis install-5.0.1-linux64.sh
+Index: ../trunk-jpl/jenkins/linux64_ross_ad
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_ad	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_ad	(revision 22571)
+@@ -33,7 +33,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools install.sh                
++EXTERNALPACKAGES="autotools install.sh
++					 cmake install.sh                
+ 					 mpich install-3.2-linux64.sh
+ 					 petsc install-3.7-linux64.sh
+ 					 metis install-5.0.1-linux64.sh
+Index: ../trunk-jpl/jenkins/linux64_ross_ampi
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_ampi	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_ampi	(revision 22571)
+@@ -39,7 +39,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools install.sh 
++EXTERNALPACKAGES="autotools install.sh
++					 cmake install.sh 
+ 					 mpich install-3.2-linux64.sh
+ 					 petsc install-3.7-linux64.sh
+ 					 metis install-5.0.1-linux64.sh
+Index: ../trunk-jpl/jenkins/linux64_ross_gia
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_gia	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_gia	(revision 22571)
+@@ -37,6 +37,7 @@
+ 
+ #List of external pakages to be installed and their installation scripts
+ EXTERNALPACKAGES="autotools     install.sh
++					 	cmake 		  install.sh
+ 						mpich         install-3.2-linux64.sh    
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+Index: ../trunk-jpl/jenkins/linux64_ross_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22571)
+@@ -36,7 +36,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools     install.sh                
++EXTERNALPACKAGES="autotools     install.sh
++						cmake        install.sh                
+ 						mpich         install-3.2-linux64.sh    
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22571)
+@@ -32,9 +32,9 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools     install.sh                
+-						mpich         install-3.2-linux64.sh    
++EXTERNALPACKAGES="autotools     install.sh    
+ 						cmake         install.sh                
++						mpich      	  install-3.2-linux64.sh                
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+ 						shell2junit   install.sh"
+Index: ../trunk-jpl/jenkins/linux64_caladan
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_caladan	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_caladan	(revision 22571)
+@@ -38,7 +38,8 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools     install.sh                
++EXTERNALPACKAGES="autotools     install.sh
++						cmake        install.sh                
+ 						mpich         install-3.2-linux64.sh    
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+Index: ../trunk-jpl/jenkins/linux64_ross_se
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_se	(revision 22570)
++++ ../trunk-jpl/jenkins/linux64_ross_se	(revision 22571)
+@@ -4,7 +4,7 @@
+ #-------------------------------#
+ 
+ #MATLAB path
+-MATLAB_PATH="/usr/local/MATLAB/R2015a"
++MATLAB_PATH="/usr/local/MATLAB/R2017b"
+ 
+ #ISSM CONFIGURATION 
+ ISSM_CONFIG='--prefix=$ISSM_DIR\
+@@ -14,7 +14,7 @@
+ 	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi" \
++	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi -lmpicxx -lmpifort" \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+@@ -35,9 +35,9 @@
+ #-----------------------------------#
+ 
+ #List of external pakages to be installed and their installation scripts
+-EXTERNALPACKAGES="autotools     install.sh                
+-						mpich         install-3.2-linux64.sh    
+-						cmake         install.sh
++EXTERNALPACKAGES="autotools     install.sh    
++						cmake         install.sh                
++						mpich         install-3.2-linux64.sh
+ 						petsc         install-3.7-linux64.sh    
+ 						triangle      install-linux64.sh        
+ 						boost         install-1.55-linux.sh
Index: /issm/oecreview/Archive/21724-22754/ISSM-22571-22572.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22571-22572.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22571-22572.diff	(revision 22755)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.js	(revision 22571)
++++ ../trunk-jpl/test/NightlyRun/test216.js	(revision 22572)
+@@ -17,7 +17,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure'];
+-field_tolerances=[8e-7,5e-8,7e-8,2e-11];
++field_tolerances=[9e-7,5e-8,7e-8,2e-11];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Vx),
+ 	(md.results.StressbalanceSolution[0].Vy),
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 22571)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 22572)
+@@ -30,7 +30,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[4e-11,2e-11,4e-11,2e-11]
++field_tolerances=[9e-7,5e-8,7e-8,2e-11]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 22571)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 22572)
+@@ -16,7 +16,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={8e-7,5e-8,7e-8,2e-11};
++field_tolerances={9e-7,5e-8,7e-8,2e-11};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test339.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test339.m	(revision 22571)
++++ ../trunk-jpl/test/NightlyRun/test339.m	(revision 22572)
+@@ -29,8 +29,8 @@
+ 	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SmbMassBalance3', ...
+ 	'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SmbMassBalance4'};
+ field_tolerances={...
+-	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
++	2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
+Index: ../trunk-jpl/test/NightlyRun/test339.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test339.py	(revision 22571)
++++ ../trunk-jpl/test/NightlyRun/test339.py	(revision 22572)
+@@ -38,7 +38,7 @@
+ 						 'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SmbMassBalance2',
+ 						 'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SmbMassBalance3',
+ 						 'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SmbMassBalance4']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
++field_tolerances=[2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+ 									2e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+ 									1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,
+ 									1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22572-22573.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22572-22573.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22572-22573.diff	(revision 22755)
@@ -0,0 +1,331 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22572)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22573)
+@@ -544,7 +544,6 @@
+ 	 * Slope configuration.*/
+ 	int found=-1;
+ 	for(int i=0;i<nummodels;i++){
+-	
+ 		if (analysis_type_list[i]==configuration_type){
+ 			found=i;
+ 			break;
+@@ -565,11 +564,10 @@
+ 	/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
+ 	if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
+ 		ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
+-		if(VerboseSolver()) _printf0_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
++		if(VerboseSolver()) _printf0_("      toolkits Options set for analysis: " << EnumToStringx(analysis_type) << "\n");
+ 	}
+ 
+-}
+-/*}}}*/
++}/*}}}*/
+ void FemModel::SetCurrentConfiguration(int configuration_type){/*{{{*/
+ 	this->SetCurrentConfiguration(configuration_type,configuration_type);
+ }
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22572)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 22573)
+@@ -872,7 +872,6 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.rift_penalty_threshold",StressbalanceRiftPenaltyThresholdEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.FSreconditioning",StressbalanceFSreconditioningEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.shelf_dampening",StressbalanceShelfDampeningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.viscosity_overshoot",StressbalanceViscosityOvershootEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
+ 
+ 	/*XTH LATH parameters*/
+@@ -1442,8 +1441,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         dim,domaintype;
+-	IssmDouble  viscosity,newviscosity,oldviscosity;
+-	IssmDouble  viscosity_overshoot,thickness,Jdet;
++	IssmDouble  viscosity,thickness,Jdet;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Get problem dimension*/
+@@ -1467,14 +1465,10 @@
+ 	element->GetVerticesCoordinates(&xyz_list);
+ 	Input* thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 	Input* vx_input=element->GetInput(VxEnum);               _assert_(vx_input);
+-	Input* vxold_input=element->GetInput(VxPicardEnum);      _assert_(vxold_input);
+ 	Input* vy_input    = NULL;
+-	Input* vyold_input = NULL;
+ 	if(dim==2){
+ 		vy_input    = element->GetInput(VyEnum);       _assert_(vy_input);
+-		vyold_input = element->GetInput(VyPicardEnum); _assert_(vyold_input);
+ 	}
+-	element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss = element->NewGauss(2);
+@@ -1486,22 +1480,20 @@
+ 
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		element->material->ViscositySSA(&viscosity,dim,xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscositySSA(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input);
+-		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 
+ 		if(dim==2){
+ 			for(int i=0;i<numnodes;i++){
+ 				for(int j=0;j<numnodes;j++){
+-					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*(
++					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*thickness*(
+ 								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
+ 								);
+-					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*(
++					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*thickness*(
+ 								2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
+ 								);
+-					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*thickness*(
++					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*thickness*(
+ 								2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
+ 								);
+-					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*thickness*(
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*thickness*(
+ 								dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
+ 								);
+ 				}
+@@ -1510,7 +1502,7 @@
+ 		else{
+ 			for(int i=0;i<numnodes;i++){
+ 				for(int j=0;j<numnodes;j++){
+-					Ke->values[i*numnodes+j] += gauss->weight*Jdet*newviscosity*thickness*(
++					Ke->values[i*numnodes+j] += gauss->weight*Jdet*viscosity*thickness*(
+ 								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
+ 								);
+ 				}
+@@ -1907,11 +1899,6 @@
+ 		for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
+ 	}
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	if(dim==2)element->InputChangeName(VyEnum,VyPicardEnum);
+-
+ 	/*Add vx and vy as inputs to the tria element: */
+ 	element->AddBasalInput(VxEnum,vx,element->GetElementType());
+ 	if(dim==2)element->AddBasalInput(VyEnum,vy,element->GetElementType());
+@@ -2235,11 +2222,6 @@
+ 	basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.);
+ 	for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-
+ 	/*Add vx and vy as inputs to the tria element: */
+ 	element->AddBasalInput(VxEnum,vx,element->GetElementType());
+ 	element->AddBasalInput(VyEnum,vy,element->GetElementType());
+@@ -2427,8 +2409,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         dim,bsize;
+-	IssmDouble  viscosity,newviscosity,oldviscosity;
+-	IssmDouble  viscosity_overshoot,thickness,Jdet;
++	IssmDouble  viscosity,thickness,Jdet;
+ 	IssmDouble *xyz_list = NULL;
+ 
+ 	/*Get problem dimension*/
+@@ -2445,14 +2426,10 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+ 	Input* vx_input    = element->GetInput(VxEnum);       _assert_(vx_input);
+-	Input* vxold_input = element->GetInput(VxPicardEnum); _assert_(vxold_input);
+ 	Input* vy_input    = NULL;
+-	Input* vyold_input = NULL;
+ 	if(dim==3){
+ 		vy_input=element->GetInput(VyEnum);          _assert_(vy_input);
+-		vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input);
+ 	}
+-	element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss = element->NewGauss(5);
+@@ -2462,23 +2439,20 @@
+ 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
+ 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 		element->material->ViscosityHO(&viscosity,dim,xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscosityHO(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input);
+ 
+-		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+-
+ 		if(dim==3){
+ 			for(int i=0;i<numnodes;i++){
+ 				for(int j=0;j<numnodes;j++){
+-					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*(
++					Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*(
+ 								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
+ 								);
+-					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*(
++					Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*(
+ 								2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
+ 								);
+-					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*newviscosity*(
++					Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*(
+ 								2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
+ 								);
+-					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*newviscosity*(
++					Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*(
+ 								dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[2*numnodes+j]*dbasis[2*numnodes+i]
+ 								);
+ 				}
+@@ -2487,7 +2461,7 @@
+ 		else{
+ 			for(int i=0;i<numnodes;i++){
+ 				for(int j=0;j<numnodes;j++){
+-					Ke->values[i*numnodes+j] += gauss->weight*Jdet*newviscosity*(
++					Ke->values[i*numnodes+j] += gauss->weight*Jdet*viscosity*(
+ 								4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
+ 								);
+ 				}
+@@ -2905,11 +2879,6 @@
+ 		for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
+ 	}
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	if(dim==3)element->InputChangeName(VyEnum,VyPicardEnum);
+-
+ 	/*Add vx and vy as inputs to the element: */
+ 	element->AddInput(VxEnum,vx,element->GetElementType());
+ 	if(dim==3)element->AddInput(VyEnum,vy,element->GetElementType());
+@@ -5084,17 +5053,10 @@
+ 	if(dim==3) for(i=0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 	else       for(i=0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
+ 
+-	/*Now, we have to move the previous inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-	if(pnumdof>0) element->InputChangeName(PressureEnum,PressurePicardEnum);
+-	if(dim==3) element->InputChangeName(VzEnum,VzPicardEnum);
+-
+ 	/*Add vx and vy as inputs to the tria element: */
+-	element->AddInput(VxEnum,      vx,      element->VelocityInterpolation());
+-	element->AddInput(VyEnum,      vy,      element->VelocityInterpolation());
+-	element->AddInput(VelEnum,     vel,     element->VelocityInterpolation());
++	element->AddInput(VxEnum, vx, element->VelocityInterpolation());
++	element->AddInput(VyEnum, vy, element->VelocityInterpolation());
++	element->AddInput(VelEnum,vel,element->VelocityInterpolation());
+ 	if(pnumdof>0) element->AddInput(PressureEnum,pressure,element->PressureInterpolation());
+ 	if(dim==3) element->AddInput(VzEnum,vz, element->VelocityInterpolation());
+ 
+@@ -5878,7 +5840,7 @@
+ 
+ 	/*Intermediaries */
+ 	int         i,j;
+-	IssmDouble  Jdet,viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
++	IssmDouble  Jdet,viscosity;
+ 	IssmDouble  *xyz_list      = NULL;
+ 	IssmDouble* B              = xNew<IssmDouble>(3*numdofp);
+ 	IssmDouble* Bprime         = xNew<IssmDouble>(3*numdofm);
+@@ -5908,11 +5870,8 @@
+ 
+ 	/* Get node coordinates and dof list: */
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 	Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
+-	Input* vxold_input=element->GetInput(VxPicardEnum); _assert_(vxold_input);
+-	Input* vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	Gauss* gauss=element->NewGauss(5);
+@@ -5926,10 +5885,8 @@
+ 		this->GetBSSAHO(B, element,xyz_list, gauss);
+ 		this->GetBSSAprime(Bprime,basaltria,2,xyz_list, gauss_tria); 
+ 		element->material->ViscosityHO(&viscosity,3,xyz_list,gauss,vx_input,vy_input);
+-		element->material->ViscosityHO(&oldviscosity,3,xyz_list,gauss,vxold_input,vyold_input);
+ 
+-		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+-		D_scalar=2*newviscosity*gauss->weight*Jdet;
++		D_scalar=2*viscosity*gauss->weight*Jdet;
+ 		for (i=0;i<3;i++) D[i][i]=D_scalar;
+ 
+ 		TripleMultiply( B,3,numdofp,1,
+@@ -6050,7 +6007,7 @@
+ 	/*Intermediaries */
+ 	int         i,j,approximation;
+ 	int         dim=3;
+-	IssmDouble  Jdet,viscosity,oldviscosity,newviscosity,viscosity_overshoot;
++	IssmDouble  Jdet,viscosity;
+ 	IssmDouble  epsilon[5],oldepsilon[5];       /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble  epsilons[6];                    //6 for FS
+ 	IssmDouble  B[3][numdof2d];
+@@ -6070,11 +6027,8 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	element->GetVerticesCoordinates(&xyz_list);
+-	element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 	Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
+-	Input* vxold_input=element->GetInput(VxPicardEnum); _assert_(vxold_input);
+-	Input* vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input);
+ 	Input* vz_input   =element->GetInput(VzEnum);       _assert_(vz_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -6091,15 +6045,13 @@
+ 
+ 		if(approximation==SSAHOApproximationEnum){
+ 			element->material->ViscosityHO(&viscosity,dim,xyz_list,gauss,vx_input,vy_input);
+-			element->material->ViscosityHO(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input);
+-			newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 		}
+ 		else if (approximation==SSAFSApproximationEnum){
+-			element->material->ViscosityFS(&newviscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input);
++			element->material->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input);
+ 		}
+ 		else _error_("approximation " << approximation << " (" << EnumToStringx(approximation) << ") not supported yet");
+ 
+-		D_scalar=2*newviscosity*gauss->weight*Jdet;
++		D_scalar=2*viscosity*gauss->weight*Jdet;
+ 		for (i=0;i<3;i++) D[i][i]=D_scalar;
+ 
+ 		TripleMultiply( &B[0][0],3,numdof2d,1,
+@@ -7017,13 +6969,6 @@
+ 		vel[i]= sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 	}
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-	element->InputChangeName(VzEnum,VzPicardEnum);
+-	element->InputChangeName(PressureEnum,PressurePicardEnum);
+-
+ 	/*Add vx and vy as inputs to element: */
+ 	element->AddInput(VxEnum,vx,P1Enum);
+ 	element->AddInput(VyEnum,vy,P1Enum);
+@@ -7127,13 +7072,6 @@
+ 		vel[i]= sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 	}
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-	element->InputChangeName(VzEnum,VzPicardEnum);
+-	element->InputChangeName(PressureEnum,PressurePicardEnum);
+-
+ 	/*Add vx and vy as inputs to element: */
+ 	element->AddInput(VxEnum,vx,P1Enum);
+ 	element->AddInput(VyEnum,vy,P1Enum);
+@@ -7227,12 +7165,6 @@
+ 	element->GetInputListOnNodes(&surface[0],SurfaceEnum);
+ 	for(i=0;i<numnodes;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-	element->InputChangeName(PressureEnum,PressurePicardEnum);
+-
+ 	/*Add vx and vy as inputs to element: */
+ 	element->AddInput(VxEnum,vx,P1Enum);
+ 	element->AddInput(VyEnum,vy,P1Enum);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22573-22574.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22573-22574.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22573-22574.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive251.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive234.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive235.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive250.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22574-22575.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22574-22575.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22574-22575.diff	(revision 22755)
@@ -0,0 +1,240 @@
+Index: ../trunk-jpl/test/Par/IceCube.par
+===================================================================
+--- ../trunk-jpl/test/Par/IceCube.par	(revision 22574)
++++ ../trunk-jpl/test/Par/IceCube.par	(revision 22575)
+@@ -26,7 +26,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 22574)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 22575)
+@@ -81,7 +81,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/IceCube.py
+===================================================================
+--- ../trunk-jpl/test/Par/IceCube.py	(revision 22574)
++++ ../trunk-jpl/test/Par/IceCube.py	(revision 22575)
+@@ -35,7 +35,6 @@
+ md.friction.q=np.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose=verbose(0)
+Index: ../trunk-jpl/test/Par/ValleyGlacierShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/ValleyGlacierShelf.par	(revision 22574)
++++ ../trunk-jpl/test/Par/ValleyGlacierShelf.par	(revision 22575)
+@@ -68,7 +68,6 @@
+ 
+ %Stressbalance
+ md.stressbalance.maxiter = 100;
+-md.stressbalance.viscosity_overshoot = 0.0;
+ md.stressbalance.restol = 0.05;
+ md.stressbalance.reltol = 0.05;
+ md.stressbalance.abstol = NaN;
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 22575)
+@@ -48,7 +48,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/ValleyGlacierShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/ValleyGlacierShelf.py	(revision 22574)
++++ ../trunk-jpl/test/Par/ValleyGlacierShelf.py	(revision 22575)
+@@ -75,7 +75,6 @@
+ 
+ #Stressbalance
+ md.stressbalance.maxiter=100
+-md.stressbalance.viscosity_overshoot=0.0
+ md.stressbalance.restol=0.05
+ md.stressbalance.reltol=0.05
+ md.stressbalance.abstol=float('nan')
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 22575)
+@@ -46,7 +46,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py	(revision 22574)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py	(revision 22575)
+@@ -64,7 +64,6 @@
+ md.friction.q = np.ones((md.mesh.numberofelements,))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot = 0.0
+ md.masstransport.stabilization = 1
+ md.thermal.stabilization = 1.
+ md.verbose = verbose(0)
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 22575)
+@@ -52,7 +52,6 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 22575)
+@@ -46,7 +46,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py	(revision 22574)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py	(revision 22575)
+@@ -64,7 +64,6 @@
+ md.friction.q = np.ones((md.mesh.numberofelements,))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot = 0.0
+ md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.verbose = verbose(0)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 22575)
+@@ -48,7 +48,6 @@
+ md.friction.q=np.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose=verbose(0)
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.js
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.js	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.js	(revision 22575)
+@@ -50,7 +50,6 @@
+ 	md.friction.q=NewArrayFill(md.mesh.numberofelements,1);
+ 
+ 	//Numerical parameters
+-	md.stressbalance.viscosity_overshoot=0.0;
+ 	md.masstransport.stabilization=1;
+ 	md.thermal.stabilization=1;
+ 	md.verbose=new verbose(0);
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 22574)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 22575)
+@@ -89,7 +89,6 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.par	(revision 22574)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksAB.par	(revision 22575)
+@@ -56,7 +56,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.par	(revision 22574)
++++ ../trunk-jpl/test/Par/GiaIvinsBenchmarksCD.par	(revision 22575)
+@@ -55,7 +55,6 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 22574)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 22575)
+@@ -51,7 +51,6 @@
+ md.friction.q=np.ones((md.mesh.numberofelements))
+ 
+ #Numerical parameters
+-md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose = verbose(0)
+Index: ../trunk-jpl/test/NightlyRun/test221.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.js	(revision 22574)
++++ ../trunk-jpl/test/NightlyRun/test221.js	(revision 22575)
+@@ -6,7 +6,6 @@
+ md.extrude(md,2,1.);
+ setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ //md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.viscosity_overshoot=0;
+ md=solve(md,'Stressbalance');
+ 
+ //Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 22574)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 22575)
+@@ -14,7 +14,6 @@
+ md.extrude(2,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',gethostname(),'np',3)
+-md.stressbalance.viscosity_overshoot=0
+ md=solve(md,'Stressbalance')
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 22574)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 22575)
+@@ -5,7 +5,6 @@
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.viscosity_overshoot=0;
+ md=solve(md,'Stressbalance');
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/21724-22754/ISSM-22575-22576.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22575-22576.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22575-22576.diff	(revision 22755)
@@ -0,0 +1,525 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22575)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22576)
+@@ -549,7 +549,6 @@
+ 	MeltingOffsetEnum,
+ 	MisfitEnum,
+ 	PressureEnum,
+-	PressurePicardEnum,
+ 	AndroidFrictionCoefficientEnum,
+ 	ResetPenaltiesEnum,
+ 	SurfaceAbsVelMisfitEnum,
+@@ -572,14 +571,11 @@
+ 	VelocityEnum,
+ 	VxAverageEnum,
+ 	VxEnum,
+-	VxPicardEnum,
+ 	VyAverageEnum,
+ 	VyEnum,
+-	VyPicardEnum,
+ 	VzEnum,
+ 	VzSSAEnum,
+ 	VzHOEnum,
+-	VzPicardEnum,
+ 	VzFSEnum,
+ 	VxMeshEnum,
+ 	VyMeshEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22575)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22576)
+@@ -547,7 +547,6 @@
+ 		case MeltingOffsetEnum : return "MeltingOffset";
+ 		case MisfitEnum : return "Misfit";
+ 		case PressureEnum : return "Pressure";
+-		case PressurePicardEnum : return "PressurePicard";
+ 		case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
+ 		case ResetPenaltiesEnum : return "ResetPenalties";
+ 		case SurfaceAbsVelMisfitEnum : return "SurfaceAbsVelMisfit";
+@@ -570,14 +569,11 @@
+ 		case VelocityEnum : return "Velocity";
+ 		case VxAverageEnum : return "VxAverage";
+ 		case VxEnum : return "Vx";
+-		case VxPicardEnum : return "VxPicard";
+ 		case VyAverageEnum : return "VyAverage";
+ 		case VyEnum : return "Vy";
+-		case VyPicardEnum : return "VyPicard";
+ 		case VzEnum : return "Vz";
+ 		case VzSSAEnum : return "VzSSA";
+ 		case VzHOEnum : return "VzHO";
+-		case VzPicardEnum : return "VzPicard";
+ 		case VzFSEnum : return "VzFS";
+ 		case VxMeshEnum : return "VxMesh";
+ 		case VyMeshEnum : return "VyMesh";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22575)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22576)
+@@ -559,7 +559,6 @@
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+ 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+-	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+ 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
+@@ -582,14 +581,11 @@
+ 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
+ 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+ 	      else if (strcmp(name,"Vx")==0) return VxEnum;
+-	      else if (strcmp(name,"VxPicard")==0) return VxPicardEnum;
+ 	      else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
+ 	      else if (strcmp(name,"Vy")==0) return VyEnum;
+-	      else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
+ 	      else if (strcmp(name,"Vz")==0) return VzEnum;
+ 	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
+ 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
+-	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
+ 	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
+ 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
+ 	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
+@@ -628,14 +624,14 @@
+ 	      else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
+ 	      else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
+ 	      else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
++	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
++	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
++	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
++	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
+-	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+-	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+-	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+-	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
++	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+ 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+ 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+ 	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+@@ -751,14 +747,14 @@
+ 	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+ 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
++	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
++	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
++	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+-	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+-	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+-	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+@@ -874,14 +870,14 @@
+ 	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
++	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
++	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
++	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
++	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+-	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+-	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+-	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
++	      if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+ 	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+ 	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+@@ -997,14 +993,14 @@
+ 	      else if (strcmp(name,"Seg")==0) return SegEnum;
+ 	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
++	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
++	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
++	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
++	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+-	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+-	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+-	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+ 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+@@ -1120,14 +1116,14 @@
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
++	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
++	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+-	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+-	      else if (strcmp(name,"MINI")==0) return MINIEnum;
++	      if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22575)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22576)
+@@ -1994,8 +1994,6 @@
+ 				name==LoadingforceXEnum ||
+ 				name==LoadingforceYEnum ||
+ 				name==VelEnum ||
+-				name==VxPicardEnum ||
+-				name==VyPicardEnum ||
+ 				name==DeviatoricStressxxEnum ||
+ 				name==DeviatoricStressyyEnum ||
+ 				name==DeviatoricStressxyEnum ||
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22575)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 22576)
+@@ -566,13 +566,7 @@
+ 		element->GetInputListOnNodes(&surface[0],SurfaceEnum,0.);
+ 		for(i=0;i<numnodes;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
+ 	}
+-
+-	/*Now, we have to move the previous Vz inputs to old 
+-	 * status, otherwise, we'll wipe them off and add the new inputs: */
+-	element->InputChangeName(VzEnum,VzPicardEnum);
+-
+ 	if(approximation!=HOFSApproximationEnum && approximation!=SSAFSApproximationEnum){
+-		element->InputChangeName(PressureEnum,PressurePicardEnum);
+ 		element->AddInput(PressureEnum,pressure,element->GetElementType());
+ 	}
+ 	else if(approximation==HOFSApproximationEnum){
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 22575)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 22576)
+@@ -620,12 +620,6 @@
+ 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
+ 	}
+ 
+-	/*Now, we have to move the previous Vx and Vy inputs  to old 
+-	 * status, otherwise, we'll wipe them off: */
+-	element->InputChangeName(VxEnum,VxPicardEnum);
+-	element->InputChangeName(VyEnum,VyPicardEnum);
+-	element->InputChangeName(PressureEnum,PressurePicardEnum);
+-
+ 	/*Add vx and vy as inputs to the tria element: */
+ 	element->AddInput(VxEnum,vx,P1Enum);
+ 	element->AddInput(VyEnum,vy,P1Enum);
+Index: ../trunk-jpl/src/py3/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/py3/classes/stressbalance.py	(revision 22575)
++++ ../trunk-jpl/src/py3/classes/stressbalance.py	(revision 22576)
+@@ -17,25 +17,24 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.spcvx                    = float('NaN')
+-		self.spcvy                    = float('NaN')
+-		self.spcvz                    = float('NaN')
+-		self.restol                   = 0
+-		self.reltol                   = 0
+-		self.abstol                   = 0
+-		self.isnewton                 = 0
+-		self.FSreconditioning     = 0
+-		self.viscosity_overshoot      = 0
+-		self.icefront                 = float('NaN')
+-		self.maxiter                  = 0
+-		self.shelf_dampening          = 0
+-		self.vertex_pairing           = float('NaN')
+-		self.penalty_factor           = float('NaN')
+-		self.rift_penalty_lock        = float('NaN')
+-		self.rift_penalty_threshold   = 0
+-		self.referential              = float('NaN')
+-		self.loadingforce             = float('NaN')
+-		self.requested_outputs        = []
++		self.spcvx                  = float('NaN')
++		self.spcvy                  = float('NaN')
++		self.spcvz                  = float('NaN')
++		self.restol                 = 0
++		self.reltol                 = 0
++		self.abstol                 = 0
++		self.isnewton               = 0
++		self.FSreconditioning       = 0
++		self.icefront               = float('NaN')
++		self.maxiter                = 0
++		self.shelf_dampening        = 0
++		self.vertex_pairing         = float('NaN')
++		self.penalty_factor         = float('NaN')
++		self.rift_penalty_lock      = float('NaN')
++		self.rift_penalty_threshold = 0
++		self.referential            = float('NaN')
++		self.loadingforce           = float('NaN')
++		self.requested_outputs      = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -50,7 +49,6 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations'))
+-		string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
+ 
+ 		string="%s\n%s"%(string,'\n      boundary conditions:')
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]'))
+@@ -99,11 +97,6 @@
+ 		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+ 		self.penalty_factor=3
+ 
+-		#coefficient to update the viscosity between each iteration of
+-		#a stressbalance according to the following formula
+-		#viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-		self.viscosity_overshoot=0
+-
+ 		#Stop the iterations of rift if below a threshold
+ 		self.rift_penalty_threshold=0
+ 
+@@ -141,7 +134,6 @@
+ 		md = checkfield(md,'fieldname','stressbalance.abstol','size',[1])
+ 		md = checkfield(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'fieldname','stressbalance.FSreconditioning','size',[1],'NaN',1,'Inf',1)
+-		md = checkfield(md,'fieldname','stressbalance.viscosity_overshoot','size',[1],'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','stressbalance.maxiter','size',[1],'>=',1)
+ 		md = checkfield(md,'fieldname','stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'fieldname','stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+@@ -185,7 +177,6 @@
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts)
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
+-		WriteData(fid,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+Index: ../trunk-jpl/src/py3/modifier.sh
+===================================================================
+--- ../trunk-jpl/src/py3/modifier.sh	(revision 22575)
++++ ../trunk-jpl/src/py3/modifier.sh	(revision 22576)
+@@ -259,7 +259,6 @@
+ sed -i 's/(md,'fieldname','stressbalance.abstol',size=[1])/(md,fieldname='stressbalance.abstol','size',[1])/g' ./classes/stressbalance.py:		
+ sed -i 's/(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0,1,2])/(md,fieldname='stressbalance.isnewton',numel=[1],values=[0,1,2])/g' ./classes/stressbalance.py:		
+ sed -i 's/(md,'fieldname','stressbalance.FSreconditioning',size=[1],'NaN',1)/(md,fieldname='stressbalance.FSreconditioning','size',[1],NaN=1)/g' ./classes/stressbalance.py:		
+-sed -i 's/(md,'fieldname','stressbalance.viscosity_overshoot',size=[1],'NaN',1)/(md,fieldname='stressbalance.viscosity_overshoot','size',[1],NaN=1)/g' ./classes/stressbalance.py:		
+ sed -i 's/(md,'fieldname','stressbalance.maxiter',size=[1],'>=',1)/(md,fieldname='stressbalance.maxiter','size',[1],ge=1)/g' ./classes/stressbalance.py:		
+ sed -i 's/(md,'fieldname','stressbalance.referential',size=[md.mesh.numberofvertices,6])/(md,fieldname='stressbalance.referential','size',[md.mesh.numberofvertices,6])/g' ./classes/stressbalance.py:		
+ sed -i 's/(md,'fieldname','stressbalance.loadingforce',size=[md.mesh.numberofvertices,3])/(md,fieldname='stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])/g' ./classes/stressbalance.py:		
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 22575)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 22576)
+@@ -16,25 +16,24 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.spcvx                    = float('NaN')
+-		self.spcvy                    = float('NaN')
+-		self.spcvz                    = float('NaN')
+-		self.restol                   = 0
+-		self.reltol                   = 0
+-		self.abstol                   = 0
+-		self.isnewton                 = 0
+-		self.FSreconditioning     = 0
+-		self.viscosity_overshoot      = 0
+-		self.icefront                 = float('NaN')
+-		self.maxiter                  = 0
+-		self.shelf_dampening          = 0
+-		self.vertex_pairing           = float('NaN')
+-		self.penalty_factor           = float('NaN')
+-		self.rift_penalty_lock        = float('NaN')
+-		self.rift_penalty_threshold   = 0
+-		self.referential              = float('NaN')
+-		self.loadingforce             = float('NaN')
+-		self.requested_outputs        = []
++		self.spcvx                  = float('NaN')
++		self.spcvy                  = float('NaN')
++		self.spcvz                  = float('NaN')
++		self.restol                 = 0
++		self.reltol                 = 0
++		self.abstol                 = 0
++		self.isnewton               = 0
++		self.FSreconditioning       = 0
++		self.icefront               = float('NaN')
++		self.maxiter                = 0
++		self.shelf_dampening        = 0
++		self.vertex_pairing         = float('NaN')
++		self.penalty_factor         = float('NaN')
++		self.rift_penalty_lock      = float('NaN')
++		self.rift_penalty_threshold = 0
++		self.referential            = float('NaN')
++		self.loadingforce           = float('NaN')
++		self.requested_outputs      = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -49,7 +48,6 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations'))
+-		string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
+ 
+ 		string="%s\n%s"%(string,'\n      boundary conditions:')
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]'))
+@@ -98,11 +96,6 @@
+ 		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+ 		self.penalty_factor=3
+ 
+-		#coefficient to update the viscosity between each iteration of
+-		#a stressbalance according to the following formula
+-		#viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-		self.viscosity_overshoot=0
+-
+ 		#Stop the iterations of rift if below a threshold
+ 		self.rift_penalty_threshold=0
+ 
+@@ -140,7 +133,6 @@
+ 		md = checkfield(md,'fieldname','stressbalance.abstol','size',[1])
+ 		md = checkfield(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'fieldname','stressbalance.FSreconditioning','size',[1],'NaN',1,'Inf',1)
+-		md = checkfield(md,'fieldname','stressbalance.viscosity_overshoot','size',[1],'NaN',1,'Inf',1)
+ 		md = checkfield(md,'fieldname','stressbalance.maxiter','size',[1],'>=',1)
+ 		md = checkfield(md,'fieldname','stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'fieldname','stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+@@ -186,7 +178,6 @@
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts)
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
+-		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double')
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer')
+ 		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double')
+Index: ../trunk-jpl/src/m/classes/stressbalance.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.js	(revision 22575)
++++ ../trunk-jpl/src/m/classes/stressbalance.js	(revision 22576)
+@@ -21,11 +21,6 @@
+ 		//Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+ 		this.penalty_factor=3;
+ 
+-		//coefficient to update the viscosity between each iteration of
+-		//a stressbalance according to the following formula
+-		//viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-		this.viscosity_overshoot=0;
+-
+ 		//Stop the iterations of rift if below a threshold
+ 		this.rift_penalty_threshold=0;
+ 
+@@ -47,7 +42,6 @@
+ 		fielddisplay(this,'abstol','velocity absolute convergence criterion, NaN: not applied');
+ 		fielddisplay(this,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid");
+ 		fielddisplay(this,'maxiter','maximum number of nonlinear iterations');
+-		fielddisplay(this,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
+ 
+ 		console.log(sprintf('\n      %s','boundary conditions:'));
+ 		fielddisplay(this,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
+@@ -96,7 +90,6 @@
+ 		checkfield(md,'fieldname','stressbalance.abstol','size',[1, 1]);
+ 		checkfield(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0, 1, 2]);
+ 		checkfield(md,'fieldname','stressbalance.FSreconditioning','size',[1, 1],'NaN',1,'Inf',1);
+-		checkfield(md,'fieldname','stressbalance.viscosity_overshoot','size',[1, 1],'NaN',1,'Inf',1);
+ 		checkfield(md,'fieldname','stressbalance.maxiter','size',[1, 1],'>=',1);
+ 		checkfield(md,'fieldname','stressbalance.referential','size',[md.mesh.numberofvertices, 6]);
+ 		checkfield(md,'fieldname','stressbalance.loadingforce','size',[md.mesh.numberofvertices, 3]);
+@@ -157,7 +150,6 @@
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','isnewton','format','Integer');
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','FSreconditioning','format','Double');
+-		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','maxiter','format','Integer');
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
+ 		WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','penalty_factor','format','Double');
+@@ -213,7 +205,6 @@
+ 	this.abstol                 = 0;
+ 	this.isnewton               = 0;
+ 	this.FSreconditioning       = 0;
+-	this.viscosity_overshoot    = 0;
+ 	this.maxiter                = 0;
+ 	this.shelf_dampening        = 0;
+ 	this.vertex_pairing         = NaN;
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 22575)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 22576)
+@@ -462,7 +462,6 @@
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','abstol','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','isnewton','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','FSreconditioning','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','viscosity_overshoot','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','maxiter','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','shelf_dampening','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 22575)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 22576)
+@@ -13,7 +13,6 @@
+ 		abstol                 = 0;
+ 		isnewton               = 0;
+ 		FSreconditioning       = 0;
+-		viscosity_overshoot    = 0;
+ 		maxiter                = 0;
+ 		shelf_dampening        = 0;
+ 		vertex_pairing         = NaN;
+@@ -67,11 +66,6 @@
+ 			 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+ 			 self.penalty_factor=3;
+ 
+-			 %coefficient to update the viscosity between each iteration of
+-			 %a stressbalance according to the following formula
+-			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-			 self.viscosity_overshoot=0;
+-
+ 			 %Stop the iterations of rift if below a threshold
+ 			 self.rift_penalty_threshold=0;
+ 
+@@ -98,7 +92,6 @@
+ 			md = checkfield(md,'fieldname','stressbalance.abstol','size',[1 1]);
+ 			md = checkfield(md,'fieldname','stressbalance.isnewton','numel',[1],'values',[0 1 2]);
+ 			md = checkfield(md,'fieldname','stressbalance.FSreconditioning','size',[1 1],'NaN',1,'Inf',1);
+-			md = checkfield(md,'fieldname','stressbalance.viscosity_overshoot','size',[1 1],'NaN',1,'Inf',1);
+ 			md = checkfield(md,'fieldname','stressbalance.maxiter','size',[1 1],'>=',1);
+ 			md = checkfield(md,'fieldname','stressbalance.referential','size',[md.mesh.numberofvertices 6]);
+ 			md = checkfield(md,'fieldname','stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
+@@ -149,7 +142,6 @@
+ 			fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied');
+ 			fielddisplay(self,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
+ 			fielddisplay(self,'maxiter','maximum number of nonlinear iterations');
+-			fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
+ 
+ 			disp(sprintf('\n      %s','boundary conditions:'));
+ 			fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
+@@ -186,7 +178,6 @@
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double');
+-			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double');
+@@ -219,7 +210,6 @@
+ 			writejsdouble(fid,[modelname '.stressbalance.abstol'],self.abstol);
+ 			writejsdouble(fid,[modelname '.stressbalance.isnewton'],self.isnewton);
+ 			writejsdouble(fid,[modelname '.stressbalance.FSreconditioning'],self.FSreconditioning);
+-			writejsdouble(fid,[modelname '.stressbalance.viscosity_overshoot'],self.viscosity_overshoot);
+ 			writejsdouble(fid,[modelname '.stressbalance.maxiter'],self.maxiter);
+ 			writejsdouble(fid,[modelname '.stressbalance.shelf_dampening'],self.shelf_dampening);
+ 			writejs1Darray(fid,[modelname '.stressbalance.vertex_pairing'],self.vertex_pairing);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22576-22577.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22576-22577.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22576-22577.diff	(revision 22755)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 22576)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 22577)
+@@ -1,5 +1,4 @@
+ #Test Name: SquareShelfCMBFS
+-
+ from model import *
+ from socket import gethostname
+ import numpy as np
+@@ -18,7 +17,6 @@
+ 
+ 
+ # control parameters
+-
+ md.inversion.iscontrol=1
+ md.inversion.control_parameters=['MaterialsRheologyBbar']
+ md.inversion.min_parameters=1e6*np.ones((md.mesh.numberofvertices))
+@@ -32,19 +30,17 @@
+ md.inversion.vx_obs=md.initialization.vx
+ md.inversion.vy_obs=md.initialization.vy
+ 
+-
+ md.cluster=generic('name',gethostname(),'np',3)
+ md=solve(md,'Stressbalance')
+ 
+ 
+ # Fields and tolerances to track changes
+-
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+-field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,8e-09,2e-09]
++field_tolerances=[4.6e-08,1e-08,2e-09,1e-08,2e-09,1e-08,1e-08]
+ field_values=[md.results.StressbalanceSolution.Gradient1,
+-							md.results.StressbalanceSolution.J,
+-							md.results.StressbalanceSolution.MaterialsRheologyBbar,
+-							md.results.StressbalanceSolution.Pressure,
+-							md.results.StressbalanceSolution.Vel,
+-							md.results.StressbalanceSolution.Vx,
+-							md.results.StressbalanceSolution.Vy]
++        md.results.StressbalanceSolution.J,
++        md.results.StressbalanceSolution.MaterialsRheologyBbar,
++        md.results.StressbalanceSolution.Pressure,
++        md.results.StressbalanceSolution.Vel,
++        md.results.StressbalanceSolution.Vx,
++        md.results.StressbalanceSolution.Vy]
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 22576)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 22577)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+-field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,8e-09,2e-09};
++field_tolerances={4.6e-08,1e-08,2e-08,1e-09,2e-09,1e-08,1e-08};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+Index: ../trunk-jpl/test/NightlyRun/test215.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.js	(revision 22576)
++++ ../trunk-jpl/test/NightlyRun/test215.js	(revision 22577)
+@@ -24,7 +24,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'];
+-field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,8e-09,2e-09];
++field_tolerances=[4.6e-08,1e-08,2e-08,1e-09,2e-09,1e-08,1e-08];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Gradient1),
+ 	(md.results.StressbalanceSolution[0].J),
Index: /issm/oecreview/Archive/21724-22754/ISSM-22577-22578.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22577-22578.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22577-22578.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test411.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.py	(revision 22577)
++++ ../trunk-jpl/test/NightlyRun/test411.py	(revision 22578)
+@@ -20,7 +20,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsGroundediceMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
++field_tolerances=[2e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
+ ]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22578-22579.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22578-22579.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22578-22579.diff	(revision 22755)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 22578)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 22579)
+@@ -30,7 +30,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[9e-7,5e-8,7e-8,2e-11]
++field_tolerances=[9e-7,7e-8,9e-8,2e-11]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 22578)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 22579)
+@@ -16,7 +16,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={9e-7,5e-8,7e-8,2e-11};
++field_tolerances={9e-7,7e-8,9e-8,2e-11};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test216.js
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.js	(revision 22578)
++++ ../trunk-jpl/test/NightlyRun/test216.js	(revision 22579)
+@@ -17,7 +17,7 @@
+ 
+ //Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure'];
+-field_tolerances=[9e-7,5e-8,7e-8,2e-11];
++field_tolerances=[9e-7,7e-8,9e-8,2e-11];
+ field_values=[
+ 	(md.results.StressbalanceSolution[0].Vx),
+ 	(md.results.StressbalanceSolution[0].Vy),
Index: /issm/oecreview/Archive/21724-22754/ISSM-22579-22580.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22579-22580.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22579-22580.diff	(revision 22755)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 22579)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(nonexistent)
+@@ -1,103 +0,0 @@
+-/*!\file PetscOptionsInsertMultipleString.cpp
+- * \brief: create distributed Petsc vector.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include <petscmat.h>
+-#include <petscvec.h>
+-#include <petscksp.h>
+-
+-#include "./petscpatches.h"
+-
+-#include "../../../shared/shared.h"
+-
+-void PetscOptionsInsertMultipleString(char* options_string){
+-
+-	/*The list of options is going to be pairs of the type "-option option_value"*/
+-	#if _PETSC_MAJOR_ == 2
+-		PetscToken *token=NULL ;
+-	#else
+-		PetscToken token=NULL;
+-	#endif
+-	char* first=NULL;
+-	char* second=NULL;
+-	size_t len;
+-	int first_token=1;
+-
+-	PetscTokenCreate(options_string,' ',&token);
+-	for (;;){
+-
+-		/*Read next tokens*/
+-		if(first_token){
+-			PetscTokenFind(token,&first);
+-		}
+-		PetscTokenFind(token,&second);
+-
+-		if (!first){
+-			/*We are at the end of options*/
+-			break;
+-		}
+-		if(!second){
+-			/*We have no second value, just take first
+-			 * and set the option, then end the token analysis.*/
+-			if(first[0]!='-'){
+-				/*This is not good, the option does not have '-'! Get out*/
+-				_error_("Option " << first << " should be preceded by '-'!");
+-			}
+-			/*Reduce first to bare option value*/
+-			PetscStrlen(first,&len);
+-			while (len > 0 && first[len-1] == ' ') {
+-				len--; first[len] = 0;
+-			}
+-			#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 7
+-			PetscOptionsSetValue(first,second);
+-			#else
+-			PetscOptionsSetValue(NULL,first,second);
+-			#endif
+-			break;
+-		}
+-		else{
+-			/*Ok, we have a second token coming in. Is it another option, or 'first' option's value?*/
+-			if (second[0]=='-'){
+-				/*Second is another option, ignore it*/
+-				PetscStrlen(first,&len);
+-				while (len > 0 && first[len-1] == ' ' ) {
+-					len--; first[len] = 0;
+-				}
+-				#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 7
+-				PetscOptionsSetValue(first,NULL);
+-				#else
+-				PetscOptionsSetValue(NULL,first,NULL);
+-				#endif
+-				/*Preparing next loop step*/
+-				first=second;
+-				first_token=0;
+-			}
+-			else{
+-				/*Second is 'first' option's value*/
+-				PetscStrlen(second,&len);
+-				while (len > 0 && second[len-1] == ' ') {
+-					len--; second[len] = 0;
+-				}
+-				#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 7
+-				PetscOptionsSetValue(first,second);
+-				#else
+-				PetscOptionsSetValue(NULL,first,second);
+-				#endif
+-				first_token=1;
+-			}
+-		}
+-	}
+-
+-#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 2
+-	PetscTokenDestroy(&token);
+-#else
+-	PetscTokenDestroy(token);
+-#endif
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 22579)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 22580)
+@@ -28,7 +28,6 @@
+ void KSPFree(KSP* pksp);
+ int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size ,
+ 		double* col_partition_vector,int col_partition_vector_size);
+-void PetscOptionsInsertMultipleString(char* options_string);
+ void PetscOptionsDetermineSolverType(int* psolver_type);
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size);
+ void MatMultPatch(Mat A,Vec X, Vec AX,ISSM_MPI_Comm comm);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22579)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22580)
+@@ -337,7 +337,6 @@
+ 					./toolkits/petsc/patches/VecMerge.cpp\
+ 					./toolkits/petsc/patches/NewVec.cpp\
+ 					./toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp\
+-					./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\
+ 					./toolkits/petsc/patches/NewMat.cpp\
+ 					./toolkits/petsc/patches/VecFree.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22580-22581.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22580-22581.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22580-22581.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_se
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_se	(revision 22580)
++++ ../trunk-jpl/jenkins/linux64_ross_se	(revision 22581)
+@@ -4,7 +4,7 @@
+ #-------------------------------#
+ 
+ #MATLAB path
+-MATLAB_PATH="/usr/local/MATLAB/R2017b"
++MATLAB_PATH="/usr/local/MATLAB/R2015a"
+ 
+ #ISSM CONFIGURATION 
+ ISSM_CONFIG='--prefix=$ISSM_DIR\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22581-22582.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22581-22582.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22581-22582.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22581)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22582)
+@@ -88,6 +88,7 @@
+ 
+ template <class T> ISSM_MPI_Datatype TypeToMPIType(){assert(false);};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmDouble>(){return ISSM_MPI_DOUBLE;};
++template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmPDouble>(){return ISSM_MPI_PDOUBLE;};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<int>(){return ISSM_MPI_INT;};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<char>(){return ISSM_MPI_CHAR;};
+ template <class T> int ISSM_MPI_Bcast(T *buffer, int count,int root, ISSM_MPI_Comm comm){  /*{{{*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22582-22583.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22582-22583.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22582-22583.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22582)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22583)
+@@ -84,13 +84,17 @@
+ 	#define ISSM_MPI_ANY_TAG       2
+ 	#define ISSM_MPI_ANY_SOURCE    3
+ 	/*}}}*/
+-# endif 
++#endif 
+ 
++/*Dynamically return ISSM_MPI type from variable type */
+ template <class T> ISSM_MPI_Datatype TypeToMPIType(){assert(false);};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmDouble>(){return ISSM_MPI_DOUBLE;};
++#ifdef _HAVE_ADOLC_
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmPDouble>(){return ISSM_MPI_PDOUBLE;};
++#endif
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<int>(){return ISSM_MPI_INT;};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<char>(){return ISSM_MPI_CHAR;};
++
+ template <class T> int ISSM_MPI_Bcast(T *buffer, int count,int root, ISSM_MPI_Comm comm){  /*{{{*/
+ 
+ 	int rc=0;
+@@ -117,7 +121,6 @@
+ #endif
+ 	return rc;
+ }/*}}}*/
+-
+ /* interfaces  {{{*/
+ int ISSM_MPI_Allgather(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcount, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm);
+ int ISSM_MPI_Allgatherv(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm); 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22583-22584.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22583-22584.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22583-22584.diff	(revision 22755)
@@ -0,0 +1,295 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22583)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22584)
+@@ -36,6 +36,7 @@
+ 	TimesteppingTimeStepMinEnum,
+ 	TimesteppingTimeStepMaxEnum,
+ 	/*}}}*/
++	InputsSTARTEnum,
+ 	/*Model fields {{{*/
+ 	AutodiffIsautodiffEnum, 
+ 	AutodiffNumDependentsEnum,
+@@ -943,6 +944,21 @@
+ 	ThicknessErrorEstimatorEnum,
+ 	/*}}}*/
+ 	ParametersENDEnum,
++	/*Approximations {{{*/
++	ApproximationEnum,
++	NoneApproximationEnum,
++	SIAApproximationEnum,
++	SSAApproximationEnum,
++	SSAHOApproximationEnum,
++	SSAFSApproximationEnum,
++	L1L2ApproximationEnum,
++	HOApproximationEnum,
++	HOFSApproximationEnum,
++	FSApproximationEnum,
++	FSvelocityEnum,
++	FSpressureEnum,
++	/*}}}*/
++	InputsENDEnum,
+ 	/*Coordinate Systems{{{*/
+ 	XYEnum,
+ 	XYZEnum,
+@@ -1070,20 +1086,6 @@
+ 	LevelsetAnalysisEnum,
+ 	ExtrapolationAnalysisEnum,
+ 	/*}}}*/
+-	/*Approximations {{{*/
+-	ApproximationEnum,
+-	NoneApproximationEnum,
+-	SIAApproximationEnum,
+-	SSAApproximationEnum,
+-	SSAHOApproximationEnum,
+-	SSAFSApproximationEnum,
+-	L1L2ApproximationEnum,
+-	HOApproximationEnum,
+-	HOFSApproximationEnum,
+-	FSApproximationEnum,
+-	FSvelocityEnum,
+-	FSpressureEnum,
+-	/*}}}*/
+ 	/*Gauss{{{*/
+ 	GaussSegEnum,
+ 	GaussTriaEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22583)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22584)
+@@ -43,6 +43,7 @@
+ 		case AdaptiveTimesteppingEnum : return "AdaptiveTimestepping";
+ 		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
+ 		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
++		case InputsSTARTEnum : return "InputsSTART";
+ 		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+ 		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
+ 		case AutodiffDependentObjectsEnum : return "AutodiffDependentObjects";
+@@ -915,6 +916,19 @@
+ 		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+ 		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+ 		case ParametersENDEnum : return "ParametersEND";
++		case ApproximationEnum : return "Approximation";
++		case NoneApproximationEnum : return "NoneApproximation";
++		case SIAApproximationEnum : return "SIAApproximation";
++		case SSAApproximationEnum : return "SSAApproximation";
++		case SSAHOApproximationEnum : return "SSAHOApproximation";
++		case SSAFSApproximationEnum : return "SSAFSApproximation";
++		case L1L2ApproximationEnum : return "L1L2Approximation";
++		case HOApproximationEnum : return "HOApproximation";
++		case HOFSApproximationEnum : return "HOFSApproximation";
++		case FSApproximationEnum : return "FSApproximation";
++		case FSvelocityEnum : return "FSvelocity";
++		case FSpressureEnum : return "FSpressure";
++		case InputsENDEnum : return "InputsEND";
+ 		case XYEnum : return "XY";
+ 		case XYZEnum : return "XYZ";
+ 		case GenericParamEnum : return "GenericParam";
+@@ -1034,18 +1048,6 @@
+ 		case LoveAnalysisEnum : return "LoveAnalysis";
+ 		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
+ 		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+-		case ApproximationEnum : return "Approximation";
+-		case NoneApproximationEnum : return "NoneApproximation";
+-		case SIAApproximationEnum : return "SIAApproximation";
+-		case SSAApproximationEnum : return "SSAApproximation";
+-		case SSAHOApproximationEnum : return "SSAHOApproximation";
+-		case SSAFSApproximationEnum : return "SSAFSApproximation";
+-		case L1L2ApproximationEnum : return "L1L2Approximation";
+-		case HOApproximationEnum : return "HOApproximation";
+-		case HOFSApproximationEnum : return "HOFSApproximation";
+-		case FSApproximationEnum : return "FSApproximation";
+-		case FSvelocityEnum : return "FSvelocity";
+-		case FSpressureEnum : return "FSpressure";
+ 		case GaussSegEnum : return "GaussSeg";
+ 		case GaussTriaEnum : return "GaussTria";
+ 		case GaussTetraEnum : return "GaussTetra";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22583)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22584)
+@@ -43,6 +43,7 @@
+ 	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
++	      else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum;
+ 	      else if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+ 	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjects")==0) return AutodiffDependentObjectsEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+ 	      else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum;
+ 	      else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
+-	      else if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
++	      if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
++	      else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
+ 	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
+ 	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
+ 	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
++	      if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
+ 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+ 	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+-	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
++	      if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
++	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
+ 	      else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
+ 	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
+-	      else if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
++	      if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
++	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
+ 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+ 	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+ 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+-	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
++	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
++	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+ 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+ 	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+ 	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+ 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+ 	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+-	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
++	      if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
++	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+ 	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+ 	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+ 	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+@@ -936,6 +937,19 @@
+ 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
++	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
++	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
++	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
++	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
++	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
++	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
++	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
++	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
++	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
++	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
++	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
++	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+@@ -983,7 +997,10 @@
+ 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+@@ -997,10 +1014,7 @@
+ 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+ 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+ 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+@@ -1058,18 +1072,6 @@
+ 	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+ 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+-	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+-	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+-	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+-	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+-	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+-	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+-	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+-	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+-	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+-	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
+-	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
+-	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
+ 	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
+ 	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
+ 	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
+@@ -1118,12 +1120,12 @@
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+ 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+ 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"MINI")==0) return MINIEnum;
++	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22584-22585.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22584-22585.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22584-22585.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22584)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 22585)
+@@ -89,7 +89,7 @@
+ /*Dynamically return ISSM_MPI type from variable type */
+ template <class T> ISSM_MPI_Datatype TypeToMPIType(){assert(false);};
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmDouble>(){return ISSM_MPI_DOUBLE;};
+-#ifdef _HAVE_ADOLC_
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_) 
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<IssmPDouble>(){return ISSM_MPI_PDOUBLE;};
+ #endif
+ template <> inline ISSM_MPI_Datatype TypeToMPIType<int>(){return ISSM_MPI_INT;};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22585-22586.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22585-22586.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22585-22586.diff	(revision 22755)
@@ -0,0 +1,109 @@
+Index: ../trunk-jpl/src/c/cores/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22585)
++++ ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 22586)
+@@ -13,7 +13,7 @@
+ void stressbalance_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	bool       dakota_analysis;
++	bool       dakota_analysis,control_analysis;
+ 	int        domaintype;
+ 	bool       isSIA,isSSA,isL1L2,isHO,isFS;
+ 	bool       save_results;
+@@ -33,6 +33,7 @@
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,StressbalanceNumRequestedOutputsEnum);
++	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,StressbalanceRequestedOutputsEnum);
+ 	
+ 	if(VerboseSolution()) _printf0_("   computing new velocity\n");
+@@ -78,9 +79,9 @@
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
++	
++	if(solution_type==StressbalanceSolutionEnum && !control_analysis)femmodel->RequestedDependentsx();
+ 
+-	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+-
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
+ }
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22585)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22586)
+@@ -19,8 +19,8 @@
+ void transient_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	IssmDouble finaltime,dt,yts;
+-	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology,isoceancoupling;
++	IssmDouble finaltime,dt,yts,starttime;
++	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology,isoceancoupling,iscontrol,isautodiff;
+ 	bool       save_results,dakota_analysis;
+ 	int        timestepping;
+ 	int        output_frequency;
+@@ -43,6 +43,7 @@
+ 	femmodel->parameters->FindParam(&step,StepEnum);
+ 	femmodel->parameters->FindParam(&time,TimeEnum);
+ 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
++	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
+ 	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+@@ -61,6 +62,8 @@
+ 	femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
+ 	femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
+ 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum);
++	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+ 	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+@@ -117,6 +120,22 @@
+ 		}
+ 	}
+ 
++		IssmDouble  output_value;
++		int         num_dependents;
++		IssmPDouble *dependents;
++		DataSet*    dependent_objects=NULL;
++		IssmDouble  J=0.;
++
++	if(iscontrol && isautodiff){
++
++		femmodel->parameters->SetParam(starttime,TimeEnum);
++		femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++		femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
++
++		/*Go through our dependent variables, and compute the response:*/
++		dependents=xNew<IssmPDouble>(num_dependents);
++	}
++
+ 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
+ 
+ 		/*Time Increment*/
+@@ -240,9 +259,19 @@
+ 			_error_("AMR not suppored with ADOLC");
+ 			#endif
+ 		}
++
++		if (iscontrol && isautodiff) {
++			/*Go through our dependent variables, and compute the response:*/
++			for(int i=0;i<dependent_objects->Size();i++){
++				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++				 dep->Responsex(&output_value,femmodel);
++				 dep->AddValue(output_value);
++				}
++			}
+ 	}
+ 	
+-	femmodel->RequestedDependentsx();
++	if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx();
++	femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
+ 
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22586-22587.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22586-22587.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22586-22587.diff	(revision 22755)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/c/classes/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 22586)
++++ ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 22587)
+@@ -17,6 +17,7 @@
+ 	this->name=NULL;
+ 	this->type=0;
+ 	this->index=-1;
++	this->response_value=0.;
+ }
+ /*}}}*/
+ DependentObject::DependentObject(char* in_name, int in_type,int in_index){/*{{{*/
+@@ -26,9 +27,21 @@
+ 	this->index=in_index;
+ 	if(in_type!=0 && in_type!=1)_error_("cannot create an DependentObject of type " << in_type);
+ 	if(in_type==1)_error_("not implemented yet!");
++	this->response_value=0.;
+ 
+ }
+ /*}}}*/
++DependentObject::DependentObject(char* in_name, int in_type,int in_index,IssmDouble in_response){/*{{{*/
++
++	this->name=xNew<char>(strlen(in_name)+1); xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++	this->type=in_type;
++	this->index=in_index;
++	if(in_type!=0 && in_type!=1)_error_("cannot create an DependentObject of type " << in_type);
++	if(in_type==1)_error_("not implemented yet!");
++	this->response_value=in_response;
++
++}
++/*}}}*/
+ DependentObject::~DependentObject(){ //destructor/*{{{*/
+ 	xDelete<char>(this->name);
+ }
+@@ -36,7 +49,7 @@
+ 
+ /*Object virtual functions definitions:*/
+ Object* DependentObject::copy(void) { /*{{{*/
+-	return new DependentObject(name,type,index);
++	return new DependentObject(name,type,index,response_value);
+ } /*}}}*/
+ void DependentObject::DeepEcho(void){/*{{{*/
+ 	this->Echo();
+@@ -84,6 +97,17 @@
+ 		*poutput_value=OutputDefinitionsResponsex(femmodel,this->name);
+ 	}
+ 	else femmodel->Responsex(poutput_value,this->name);
+-
+ }
+ /*}}}*/
++IssmDouble DependentObject::GetValue(void){/*{{{*/
++	return this->response_value;
++}
++/*}}}*/
++void DependentObject::AddValue(IssmDouble in_value){/*{{{*/
++	this->response_value+=in_value;
++}
++/*}}}*/
++void DependentObject::ResetResponseValue(){/*{{{*/
++	this->response_value=0.;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.h	(revision 22586)
++++ ../trunk-jpl/src/c/classes/DependentObject.h	(revision 22587)
+@@ -19,27 +19,28 @@
+ 		char* name;
+ 		int type;  /*0: scalar, 1: vertex*/
+ 		int index;  /*0: scalar, 1: vertex*/
++		IssmDouble response_value;
+ 
+-		/*DependentObject constructors, destructors {{{*/
++		/*DependentObject constructors, destructors */
+ 		DependentObject();
+ 		DependentObject(char* name, int type,int index);
++		DependentObject(char* name, int type,int index,IssmDouble in_response);
+ 		~DependentObject();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
++
++		/*Object virtual functions definitions*/
+ 		Object* copy(void);
+ 		void  DeepEcho();
+ 		void  Echo();
+ 		int   Id(); 
+ 		int   ObjectEnum();
+-		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+-			_error_("not implemented yet!"); 
+-		} 
+-		/*}}}*/
+-		/*}}}*/
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){_error_("not implemented yet!"); };
+ 
+ 		/*DependentObject methods: */
+ 		int  NumDependents(void);
+ 		void Responsex(IssmDouble* poutput_value,FemModel* femmodel);
++		IssmDouble GetValue(void);
++		void AddValue(IssmDouble in_value);
++		void ResetResponseValue(void);
+ 
+ };
+ #endif //ifndef _DEPENDENTOBJECT_H_
Index: /issm/oecreview/Archive/21724-22754/ISSM-22587-22588.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22587-22588.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22587-22588.diff	(revision 22755)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22587)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22588)
+@@ -69,7 +69,7 @@
+ 		void  SetValue(int* pintarray,int M,int N){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a int array");}
+ 		void  SetValue(Vector<IssmDouble>* vec){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Vec");}
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+-		void  SetValue(DataSet* dataset){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a DataSet yet");}
++		void  SetValue(DataSet* dataset);
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22587)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22588)
+@@ -553,8 +553,12 @@
+ 	/*first, figure out if the param has already been created: */
+ 	param=xDynamicCast<Param*>(this->FindParamObject(enum_type));
+ 
+-	if(param) param->SetValue(dataset); //already exists, just set it.
+-	else this->AddObject(new DataSetParam(enum_type,dataset)); //just add the new parameter.
++	if(param){
++		param->SetValue(dataset); //already exists, just set it.
++	}
++	else{
++		this->AddObject(new DataSetParam(enum_type,dataset)); //just add the new parameter.
++	}
+ }
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/classes/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22587)
++++ ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22588)
+@@ -52,6 +52,7 @@
+ 		virtual void  SetValue(IssmDouble scalar)=0;
+ 		virtual void  SetValue(char* string)=0;
+ 		virtual void  SetValue(char** stringarray,int M)=0;
++		virtual void  SetValue(DataSet* dataset){_error_("not implemented yet");};
+ 		virtual void  SetValue(IssmDouble* IssmDoublearray,int M)=0;
+ 		virtual void  SetValue(IssmDouble* pIssmDoublearray,int M,int N)=0;
+ 		virtual void  SetValue(int* intarray,int M)=0;
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 22587)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 22588)
+@@ -23,7 +23,7 @@
+ DataSetParam::DataSetParam(int in_enum_type,DataSet* in_value){/*{{{*/
+ 
+ 	enum_type=in_enum_type;
+-	value=in_value->Copy();;
++	value=in_value->Copy();
+ }
+ /*}}}*/
+ DataSetParam::~DataSetParam(){/*{{{*/
+@@ -73,3 +73,7 @@
+ 	*pdataset=value->Copy();
+ }
+ /*}}}*/
++void DataSetParam::SetValue(DataSet* dataset){/*{{{*/
++	this->value=dataset;
++}
++/*}}}*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22588-22589.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22588-22589.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22588-22589.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22588)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22589)
+@@ -271,7 +271,7 @@
+ 	}
+ 	
+ 	if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx();
+-	femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
++	if(iscontrol && is autodiff) femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
+ 
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22589-22590.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22589-22590.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22589-22590.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22589)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22590)
+@@ -271,7 +271,7 @@
+ 	}
+ 	
+ 	if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx();
+-	if(iscontrol && is autodiff) femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
++	if(iscontrol && isautodiff) femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
+ 
+ 	/*Free ressources:*/	
+ 	if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22590-22591.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22590-22591.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22590-22591.diff	(revision 22755)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22590)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22591)
+@@ -249,7 +249,7 @@
+ 
+ 			for(i=0;i<num_procs;i++){
+ 				ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+-				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
++				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, TypeToMPIType<doubletype>(), values_fromcpu[i], numvalues_fromcpu[i], TypeToMPIType<doubletype>(), i, comm);
+ 				ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+ 			}
+ 			/*}}}*/
+@@ -401,6 +401,7 @@
+ 			comm=IssmComm::GetComm();
+ 			num_procs=IssmComm::GetSize();
+ 
++
+ 			/*Allocate: */
+ // AD performance is sensitive to calls to ensurecontiguous.
+ // Providing "t" will cause ensurecontiguous to be called.
+@@ -423,8 +424,7 @@
+ 			ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,comm);
+ 
+ 			/*All gather:*/
+-			ISSM_MPI_Allgatherv(this->vector, this->m, ISSM_MPI_DOUBLE, buffer, recvcounts, displs, ISSM_MPI_DOUBLE,comm);
+-
++			ISSM_MPI_Allgatherv(this->vector, this->m, TypeToMPIType<doubletype>(), buffer, recvcounts, displs, TypeToMPIType<doubletype>(),comm);
+ 			/*free ressources: */
+ 			xDelete<int>(recvcounts);
+ 			xDelete<int>(displs);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22591-22592.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22591-22592.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22591-22592.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 22591)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 22592)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[7e-07,7e-07,2e-06,1e-06,6e-07]
++field_tolerances=[7e-07,9e-07,2e-06,1e-06,6e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 22591)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 22592)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={7e-07,7e-07,2e-06,1e-06,6e-07};
++field_tolerances={7e-07,9e-07,2e-06,1e-06,6e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22592-22593.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22592-22593.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22592-22593.diff	(revision 22755)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 22592)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 22593)
+@@ -378,6 +378,9 @@
+ 	%if we are zooming on a basin, don't take the mesh for the boundaries!
+ 	if exist(options,'basin'),
+ 		[mdx mdy]=basinzoom(options);
++	elseif exist(options,'xlim') | exist(options,'ylim'),
++		mdx=getfieldvalue(options,'xlim');
++		mdy=getfieldvalue(options,'ylim');
+ 	else
+ 		mdx=[min(md.mesh.x)-offset max(md.mesh.x)+offset];
+ 		mdy=[min(md.mesh.y)-offset max(md.mesh.y)+offset];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22593-22594.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22593-22594.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22593-22594.diff	(revision 22755)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 22593)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 22594)
+@@ -54,10 +54,7 @@
+ 	/*FS: */
+ 	IS         isv=NULL;
+ 	IS         isp=NULL;
+-
+-	#if _PETSC_MAJOR_ >= 3 
+ 	char ksp_type[50];
+-	#endif
+ 
+ 	/*Display message*/
+ 	#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+@@ -79,14 +76,12 @@
+ 
+ 	/*Initial guess */
+ 	/*Now, check that we are not giving an initial guess to the solver, if we are running a direct solver: */
+-	#if _PETSC_MAJOR_ >= 3 
+-		#if _PETSC_MINOR_<7
+-		PetscOptionsGetString(PETSC_NULL,"-ksp_type",ksp_type,49,&flg);
+-		#else
+-		PetscOptionsGetString(NULL,PETSC_NULL,"-ksp_type",ksp_type,49,&flg);
+-		#endif
++	#if _PETSC_MINOR_<7
++	PetscOptionsGetString(PETSC_NULL,"-ksp_type",ksp_type,49,&flg);
++	#else
++	PetscOptionsGetString(NULL,PETSC_NULL,"-ksp_type",ksp_type,49,&flg);
++	#endif
+ 	if (strcmp(ksp_type,"preonly")==0)uf0=NULL;
+-	#endif
+ 
+ 	/*If initial guess for the solution exists, use it to create uf, otherwise, 
+ 	 * duplicate the right hand side so that the solution vector has the same structure*/
+@@ -102,10 +97,8 @@
+ 
+ 	/*Check the solver is available*/
+ 	if(solver_type==MUMPSPACKAGE_LU || solver_type==MUMPSPACKAGE_CHOL){
+-		#if _PETSC_MAJOR_ >=3
+-			#ifndef _HAVE_MUMPS_
+-			_error_("requested MUMPS solver, which was not compiled into ISSM!\n");
+-			#endif
++		#ifndef _HAVE_MUMPS_
++		_error_("requested MUMPS solver, which was not compiled into ISSM!\n");
+ 		#endif
+ 	}
+ 
+@@ -118,12 +111,11 @@
+ 	#endif
+ 	KSPSetFromOptions(ksp);
+ 
+-	#if _PETSC_MAJOR_==3
+ 	/*Specific solver?: */
+ 	KSPGetPC(ksp,&pc);
+ 	if (solver_type==MUMPSPACKAGE_LU){
+-		#if _PETSC_MINOR_==1
+-		PCFactorSetMatSolverPackage(pc,MAT_SOLVER_MUMPS);
++		#if defined(_HAVE_PETSCDEV_)
++		PCFactorSetMatSolverType(pc,MATSOLVERMUMPS);
+ 		#else
+ 		PCFactorSetMatSolverPackage(pc,MATSOLVERMUMPS);
+ 		#endif
+@@ -146,7 +138,6 @@
+ 		#endif
+ 
+ 	}
+-	#endif
+ 
+ 	/*If there is an initial guess for the solution, use it
+ 	 * except if we are using the MUMPS direct solver
Index: /issm/oecreview/Archive/21724-22754/ISSM-22594-22595.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22594-22595.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22594-22595.diff	(revision 22755)
@@ -0,0 +1,90 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 22594)
++++ ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 22595)
+@@ -1,27 +1,18 @@
+ #!/bin/bash
+ 
+-STEP=1
++STEP=2
+ 
+ if [ $STEP -eq 1 ]; then
+-	# Used Mercurial to get code
+ 	rm -rf src
+-	hg clone http://petsc.cs.iit.edu/petsc/petsc-dev src
+-	cd src
+-	hg clone http://petsc.cs.iit.edu/petsc/BuildSystem config/BuildSystem
++	git clone https://bitbucket.org/petsc/petsc src
+ fi
+ 
+-# To update (via Mercurial):
+-#      cd petsc-dev
+-#      hg pull -u
+-#      cd config/BuildSystem
+-#      hg pull -u
++# To update 
++#      cd src
++#      git pull
+ 
+ # configure script
+ # Note: 
+-#  Metis: -using metis from externalpackages did not work...
+-#         -for now download new metis
+-#         -rename metis in externalpackages to metis2
+-#
+ # SuperLU: -If download-..-=yes does not work try downloading from
+ #    --download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
+ 
+@@ -29,30 +20,29 @@
+ if [ $STEP -eq 2 ]; then
+ 	rm -rf install
+ 	cd src
+-	./config/configure.py \
+-	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-mpi-dir="$ISSM_DIR/externalpackages/mpich/install" \
+-	--with-clanguage=C++ \
+-	--PETSC_ARCH=linux-gnu-amd64 \
+-	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+-	--with-debugging=0 \
+-	--with-shared-libraries=1 \
+-	--download-mumps=yes \
+-	--download-scalapack=yes \
+-	--download-blacs=yes  \
+-	--download-blas=yes \
+-	--download-f-blas-lapack=yes \
+-	--download-parmetis=yes \
+-	--download-metis=yes \
+-	--download-trilinos=yes \
+-	--download-euclid=yes \
+-	--download-spooles=yes \
+-	--download-spai=yes \
+-	--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
+-	--download-hypre=yes \
+-	--download-c2html=yes
+-#	--with-pic=1
++	./configure \
++		--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++		--with-mpi-dir="$ISSM_DIR/externalpackages/mpich/install" \
++		--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++		--with-debugging=1 \
++		--with-valgrind=0 \
++		--with-x=0 \
++		--with-ssl=0 \
++		--with-shared-libraries=1 \
++		--download-metis=1 \
++		--download-parmetis=1 \
++		--download-mumps=1 \
++		--download-scalapack=1 \
++		--download-fblaslapack=1 \
++		--with-pic=1
+ 
++#	--download-trilinos=yes \
++#	--download-euclid=yes \
++#	--download-spooles=yes \
++#	--download-spai=yes \
++#	--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
++#	--download-hypre=yes \
++
+ 	#Compile petsc and install it
+ 	make
+ 	make install
Index: /issm/oecreview/Archive/21724-22754/ISSM-22595-22596.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22595-22596.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22595-22596.diff	(revision 22755)
@@ -0,0 +1,6080 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22595)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22596)
+@@ -7,657 +7,1012 @@
+ #define _ENUM_DEFINITIONS_
+ 
+ enum definitions{
+-	FemModelEnum,
+ 	ParametersSTARTEnum,
+-	/*Parameters {{{*/
++	/*Parameters{{{*/
+ 	AdolcParamEnum,
+-	FSSolverEnum,
+-	FemModelCommEnum,
+-	WorldCommEnum,
+-	IcecapToEarthCommEnum,
+-	ToMITgcmCommEnum,
+-	NumModelsEnum,
+-	ModelIdEnum,
+-	EarthIdEnum,
+-	SolutionTypeEnum,
++	AmrDeviatoricErrorGroupThresholdEnum,
++	AmrDeviatoricErrorMaximumEnum,
++	AmrDeviatoricErrorResolutionEnum,
++	AmrDeviatoricErrorThresholdEnum,
++	AmrErrEnum,
++	AmrFieldEnum,
++	AmrGradationEnum,
++	AmrGroundingLineDistanceEnum,
++	AmrGroundingLineResolutionEnum,
++	AmrHmaxEnum,
++	AmrHminEnum,
++	AmrIceFrontDistanceEnum,
++	AmrIceFrontResolutionEnum,
++	AmrKeepMetricEnum,
++	AmrLagEnum,
++	AmrLevelMaxEnum,
++	AmrRestartEnum,
++	AmrThicknessErrorGroupThresholdEnum,
++	AmrThicknessErrorMaximumEnum,
++	AmrThicknessErrorResolutionEnum,
++	AmrThicknessErrorThresholdEnum,
++	AmrTypeEnum,
++	AnalysisCounterEnum,
+ 	AnalysisTypeEnum,
+-	AnalysisCounterEnum,
+-	ConfigurationTypeEnum,
+-	InputToExtrudeEnum,
+-	InputToL2ProjectEnum,
+-	InputToDepthaverageInEnum,
+-	InputToDepthaverageOutEnum,
+-	InputToSmoothEnum,
+-	SmoothThicknessMultiplierEnum,
+-	LevelsetStabilizationEnum,
+-	TimesteppingTypeEnum,
+-	FixedTimesteppingEnum,
+-	AdaptiveTimesteppingEnum,
+-	TimesteppingTimeStepMinEnum,
+-	TimesteppingTimeStepMaxEnum,
+-	/*}}}*/
+-	InputsSTARTEnum,
+-	/*Model fields {{{*/
+-	AutodiffIsautodiffEnum, 
+-	AutodiffNumDependentsEnum,
++	AugmentedLagrangianREnum,
++	AugmentedLagrangianRholambdaEnum,
++	AugmentedLagrangianRhopEnum,
++	AugmentedLagrangianRlambdaEnum,
++	AugmentedLagrangianThetaEnum,
++	AutodiffCbufsizeEnum,
+ 	AutodiffDependentObjectsEnum,
+-	AutodiffNumIndependentsEnum,
+-	AutodiffJacobianEnum,
+-	AutodiffXpEnum,
+ 	AutodiffDriverEnum,
+ 	AutodiffFosForwardIndexEnum,
++	AutodiffFosReverseIndexEnum,
+ 	AutodiffFovForwardIndicesEnum,
+-	AutodiffFosReverseIndexEnum,
+-	AutodiffKeepEnum,
++	AutodiffGcTriggerMaxSizeEnum,
++	AutodiffGcTriggerRatioEnum,
++	AutodiffIsautodiffEnum,
++	AutodiffLbufsizeEnum,
++	AutodiffNumDependentsEnum,
++	AutodiffNumIndependentsEnum,
+ 	AutodiffObufsizeEnum,
+-	AutodiffLbufsizeEnum,
+-	AutodiffCbufsizeEnum,
+ 	AutodiffTbufsizeEnum,
+-	AutodiffGcTriggerRatioEnum,
+-	AutodiffGcTriggerMaxSizeEnum,
++	AutodiffXpEnum,
+ 	BalancethicknessStabilizationEnum,
+-	BalancethicknessThickeningRateEnum,
++	BasalforcingsBottomplumedepthEnum,
++	BasalforcingsCrustthicknessEnum,
++	BasalforcingsDeepwaterElevationEnum,
++	BasalforcingsDeepwaterMeltingRateEnum,
++	BasalforcingsDtbgEnum,
+ 	BasalforcingsEnum,
+-	BasalforcingsGeothermalfluxEnum,
+-	BasalforcingsGroundediceMeltingRateEnum,
+-	BasalforcingsFloatingiceMeltingRateEnum,
+-	BasalforcingsDeepwaterMeltingRateEnum,
+-	BasalforcingsDeepwaterElevationEnum,
+-	BasalforcingsUpperwaterElevationEnum,
++	BasalforcingsLowercrustheatEnum,
++	BasalforcingsMantleconductivityEnum,
+ 	BasalforcingsMeltrateFactorEnum,
+-	BasalforcingsThresholdThicknessEnum,
+-	BasalforcingsUpperdepthMeltEnum,
+-	BasalforcingsMantleconductivityEnum,
+ 	BasalforcingsNusseltEnum,
+-	BasalforcingsDtbgEnum,
++	BasalforcingsPicoFarOceansalinityEnum,
++	BasalforcingsPicoGammaTEnum,
++	BasalforcingsPicoNumBasinsEnum,
++	BasalforcingsPicoOverturningCoeffEnum,
+ 	BasalforcingsPlumeradiusEnum,
+-	BasalforcingsTopplumedepthEnum,
+-	BasalforcingsBottomplumedepthEnum,
+ 	BasalforcingsPlumexEnum,
+ 	BasalforcingsPlumeyEnum,
+-	BasalforcingsCrustthicknessEnum,
++	BasalforcingsThresholdThicknessEnum,
++	BasalforcingsTopplumedepthEnum,
++	BasalforcingsUppercrustheatEnum,
+ 	BasalforcingsUppercrustthicknessEnum,
+-	BasalforcingsUppercrustheatEnum,
+-	BasalforcingsLowercrustheatEnum,
+-	FloatingMeltRateEnum,
+-	LinearFloatingMeltRateEnum,
+-	MismipFloatingMeltRateEnum,
+-	MantlePlumeGeothermalFluxEnum,
+-	BasalforcingsPicoEnum,
+-	BasalforcingsPicoNumBasinsEnum,
+-	BasalforcingsPicoBasinIdEnum,
+-	BasalforcingsPicoMaxboxcountEnum,
+-	BasalforcingsPicoBoxIdEnum,
+-	BasalforcingsPicoOverturningCoeffEnum,
+-	BasalforcingsPicoGammaTEnum,
+-	BasalforcingsPicoFarOceantemperatureEnum,
+-	BasalforcingsPicoFarOceansalinityEnum,
+-	DistanceToGroundinglineEnum,
+-	DistanceToCalvingfrontEnum,
+-	BedEnum,
+-	BaseEnum,
+-	ConstantsGEnum,
+-	ConstantsReferencetemperatureEnum,
++	BasalforcingsUpperdepthMeltEnum,
++	BasalforcingsUpperwaterElevationEnum,
++	CalvingCrevasseDepthEnum,
++	CalvingHeightAboveFloatationEnum,
++	CalvingLawEnum,
++	CalvingMaxEnum,
++	CalvingMinthicknessEnum,
++	ConfigurationTypeEnum,
+ 	ConstantsYtsEnum,
+-	DependentObjectEnum,
+-	StressbalanceAbstolEnum,
+-	StressbalanceConvergenceNumStepsEnum,
+-	StressbalanceIsnewtonEnum,
+-	StressbalanceMaxiterEnum,
+-	StressbalancePenaltyFactorEnum,
+-	StressbalanceReltolEnum,
+-	StressbalanceNumRequestedOutputsEnum,
+-	StressbalanceRequestedOutputsEnum,
+-	StressbalanceRestolEnum,
+-	StressbalanceRiftPenaltyThresholdEnum,
+-	StressbalanceShelfDampeningEnum,
+-	StressbalanceFSreconditioningEnum,
+-	StressbalanceViscosityOvershootEnum,
+-	LoadingforceXEnum,
+-	LoadingforceYEnum,
+-	LoadingforceZEnum,
++	DamageC1Enum,
++	DamageC2Enum,
++	DamageC3Enum,
++	DamageEnum,
++	DamageEquivStressEnum,
++	DamageEvolutionNumRequestedOutputsEnum,
++	DamageEvolutionRequestedOutputsEnum,
++	DamageHealingEnum,
++	DamageKappaEnum,
++	DamageLawEnum,
++	DamageMaxDamageEnum,
++	DamageStabilizationEnum,
++	DamageStressThresholdEnum,
++	DebugProfilingEnum,
++	DomainDimensionEnum,
++	DomainTypeEnum,
++	EarthIdEnum,
++	EplZigZagCounterEnum,
++	EsaHElasticEnum,
++	EsaHemisphereEnum,
++	EsaRequestedOutputsEnum,
++	EsaUElasticEnum,
++	ExtrapolationVariableEnum,
++	FlowequationFeFSEnum,
++	FlowequationIsFSEnum,
++	FlowequationIsHOEnum,
++	FlowequationIsL1L2Enum,
+ 	FlowequationIsSIAEnum,
+ 	FlowequationIsSSAEnum,
+-	FlowequationIsL1L2Enum,
+-	FlowequationIsHOEnum,
+-	FlowequationIsFSEnum,
+-	FlowequationFeFSEnum,
+-	FlowequationBorderFSEnum,
+-	FrictionAsEnum,
+-	FrictionCoefficientEnum,
+-	FrictionCoefficientcoulombEnum,
+-	FrictionPressureAdjustedTemperatureEnum,
+-	FrictionPEnum,
+-	FrictionQEnum,
+-	FrictionMEnum,
+-	FrictionCEnum,
++	FrictionCouplingEnum,
++	FrictionFEnum,
++	FrictionGammaEnum,
+ 	FrictionLawEnum,
+-	FrictionGammaEnum,
+-	FrictionFEnum,
+-	FrictionWaterLayerEnum,
+-	FrictionEffectivePressureEnum,
+-	FrictionCouplingEnum,
+-	GeometryHydrostaticRatioEnum,
+-	HydrologyModelEnum,
+-	HydrologyNumRequestedOutputsEnum,
+-	HydrologyRequestedOutputsEnum,
+-	HydrologyshreveEnum,
+-	HydrologyshreveStabilizationEnum,
+-	HydrologydcEnum,
+-	HydrologydtEnum,
+-	HydrologyStepsPerStepEnum,
+-	SedimentHeadEnum,
+-	SedimentHeadOldEnum,
+-	SedimentHeadStackedEnum,
+-	SedimentHeadTimeAverageEnum,
+-	SedimentHeadResidualEnum,
+-	EffectivePressureEnum,
+-	EffectivePressureStackedEnum,
+-	EffectivePressureTimeAverageEnum,
+-	EplHeadEnum,
+-	EplHeadOldEnum,
+-	EplHeadStackedEnum,
+-	EplHeadTimeAverageEnum,
+-	EplHeadSlopeXEnum,
+-	EplHeadSlopeYEnum,
+-	EplZigZagCounterEnum,
++	GiaCrossSectionShapeEnum,
++	GroundinglineMigrationEnum,
++	HydrologydcEplflipLockEnum,
++	HydrologydcEplThickCompEnum,
++	HydrologydcIsefficientlayerEnum,
++	HydrologydcLeakageFactorEnum,
+ 	HydrologydcMaxIterEnum,
++	HydrologydcPenaltyFactorEnum,
++	HydrologydcPenaltyLockEnum,
+ 	HydrologydcRelTolEnum,
+-	HydrologydcSedimentCompressibilityEnum,
+-	HydrologydcSedimentPorosityEnum,
+-	HydrologydcSedimentThicknessEnum,
+-	HydrologydcSedimentTransmitivityEnum,
+-	HydrologydcWaterCompressibilityEnum,
+-	HydrologydcMaskEplactiveNodeEnum,
+-	HydrologydcMaskEplactiveEltEnum,
+-	HydrologydcEplCompressibilityEnum,
+-	HydrologydcEplPorosityEnum,
+-	HydrologydcEplInitialThicknessEnum,
+-	HydrologydcEplColapseThicknessEnum,
+-	HydrologydcEplMaxThicknessEnum,
+-	HydrologydcEplThicknessEnum,
+-	HydrologydcEplThicknessOldEnum,
+-	HydrologydcEplThicknessStackedEnum,
+-	HydrologydcEplThicknessTimeAverageEnum,
+-	HydrologydcEplThickCompEnum,
+-	HydrologydcEplConductivityEnum,
+-	HydrologydcIsefficientlayerEnum,
++	HydrologydcSedimentlimitEnum,
+ 	HydrologydcSedimentlimitFlagEnum,
+-	HydrologydcSedimentlimitEnum,
+ 	HydrologydcTransferFlagEnum,
+ 	HydrologydcUnconfinedFlagEnum,
+-	HydrologydcLeakageFactorEnum,
+-	HydrologydcPenaltyFactorEnum,
+-	HydrologydcPenaltyLockEnum,
+-	HydrologydcEplflipLockEnum,
+-	HydrologydcBasalMoulinInputEnum,
++	HydrologydtEnum,
++	HydrologyModelEnum,
++	HydrologyNumRequestedOutputsEnum,
++	HydrologyRelaxationEnum,
++	HydrologyRequestedOutputsEnum,
+ 	HydrologySedimentKmaxEnum,
+-	HydrologysommersEnum,
+-	HydrologyHeadEnum,
+-	HydrologyHeadOldEnum,
+-	HydrologyGapHeightEnum,
+-	HydrologyBumpSpacingEnum,
+-	HydrologyBumpHeightEnum,
+-	HydrologyEnglacialInputEnum,
+-	HydrologyMoulinInputEnum,
+-	HydrologyReynoldsEnum,
+-	HydrologyNeumannfluxEnum,
+-	HydrologyRelaxationEnum,
+-	HydrologyBasalFluxEnum,
++	HydrologyshreveStabilizationEnum,
++	HydrologyStepsPerStepEnum,
+ 	HydrologyStorageEnum,
+-	DegreeOfChannelizationEnum,
++	IcecapToEarthCommEnum,
++	IndexEnum,
++	InputFileNameEnum,
++	InputToDepthaverageInEnum,
++	InputToDepthaverageOutEnum,
++	InputToExtrudeEnum,
++	InputToL2ProjectEnum,
++	InputToSmoothEnum,
++	InversionAlgorithmEnum,
+ 	InversionControlParametersEnum,
+ 	InversionControlScalingFactorsEnum,
+-	InversionCostFunctionThresholdEnum,
+-	InversionCostFunctionsCoefficientsEnum,
+ 	InversionCostFunctionsEnum,
++	InversionDxminEnum,
++	InversionGatolEnum,
+ 	InversionGradientScalingEnum,
++	InversionGrtolEnum,
++	InversionGttolEnum,
++	InversionIncompleteAdjointEnum,
+ 	InversionIscontrolEnum,
+-	InversionTypeEnum,
+-	InversionIncompleteAdjointEnum,
++	InversionMaxiterEnum,
+ 	InversionMaxiterPerStepEnum,
+-	InversionMaxiterEnum,
+ 	InversionMaxstepsEnum,
+-	InversionFatolEnum,
+-	InversionFrtolEnum,
+-	InversionGatolEnum,
+-	InversionGrtolEnum,
+-	InversionGttolEnum,
+-	InversionAlgorithmEnum,
+ 	InversionNstepsEnum,
+-	InversionDxminEnum,
+ 	InversionNumControlParametersEnum,
+ 	InversionNumCostFunctionsEnum,
+ 	InversionStepThresholdEnum,
+-	InversionThicknessObsEnum,
+-	InversionSurfaceObsEnum,
+-	InversionVxObsEnum,
+-	InversionVyObsEnum,
+-	InversionVzObsEnum,
+-	InversionVelObsEnum,
+-	MaskIceLevelsetEnum,
+-	MaskOceanLevelsetEnum,
+-	MaskLandLevelsetEnum,
+-	MaterialsBetaEnum,
+-	MaterialsHeatcapacityEnum,
+-	MaterialsLatentheatEnum,
+-	MaterialsMeltingpointEnum,
+-	MaterialsMixedLayerCapacityEnum,
+-	MaterialsRheologyBEnum,
+-	MaterialsRheologyBbarEnum,
+-	MaterialsRheologyLawEnum,
+-	MaterialsRheologyNEnum,
+-	MaterialsRheologyEEnum,
+-	MaterialsRheologyEbarEnum,
+-	MaterialsRheologyEcEnum,
+-	MaterialsRheologyEcbarEnum,
+-	MaterialsRheologyEsEnum,
+-	MaterialsRheologyEsbarEnum,
+-	DamageDEnum,
+-	DamageFEnum,
+-	DamageDbarEnum,
+-	DamageLawEnum,
+-	DamageC1Enum,
+-	DamageC2Enum,
+-	DamageC3Enum,
+-	DamageC4Enum,
+-	DamageElementinterpEnum,
+-	DamageHealingEnum,
+-	DamageStressThresholdEnum,
+-	DamageKappaEnum,
+-	DamageStabilizationEnum,
+-	DamageMaxiterEnum,
+-	DamageMaxDamageEnum,
+-	DamageEquivStressEnum,
+-	DamageEvolutionNumRequestedOutputsEnum,
+-	DamageEvolutionRequestedOutputsEnum,
+-	DamageEnum,
+-	NewDamageEnum,
+-	StressIntensityFactorEnum,
+-	CalvingLawEnum,
+-	CalvingCalvingrateEnum,
+-	CalvingMeltingrateEnum,
+-	CalvingHeightAboveFloatationEnum,
+-	CalvingLevermannEnum,
+-	CalvingVonmisesEnum,
+-	CalvingMinthicknessEnum,
+-	CalvingHabEnum,
+-	CalvingHabFractionEnum,
+-	CalvingCrevasseDepthEnum,
+-	CalvingDev2Enum,
+-	SurfaceCrevasseEnum,
+-	BasalCrevasseEnum,
+-	CrevasseDepthEnum,
+-	WaterheightEnum,
+-	DefaultCalvingEnum,
+-	CalvinglevermannCoeffEnum,
+-	CalvinglevermannMeltingrateEnum,
+-	CalvingdevCoeffEnum,
+-	CalvingratexEnum,
+-	CalvingrateyEnum,
+-	CalvingratexAverageEnum,
+-	CalvingrateyAverageEnum,
+-	CalvingStressThresholdGroundediceEnum,
+-	CalvingStressThresholdFloatingiceEnum,
+-	CalvingMaxEnum,
+-	SigmaVMEnum,
+-	StrainRateparallelEnum,
+-	StrainRateperpendicularEnum,
+-	StrainRateeffectiveEnum,
+-	MaterialsRhoIceEnum,
+-	MaterialsRhoSeawaterEnum,
+-	MaterialsRhoFreshwaterEnum,
+-	MaterialsMuWaterEnum,
+-	MaterialsThermalExchangeVelocityEnum,
+-	MaterialsThermalconductivityEnum,
+-	MaterialsTemperateiceconductivityEnum,
+-	MaterialsLithosphereShearModulusEnum,
+-	MaterialsLithosphereDensityEnum,
+-	MaterialsMantleShearModulusEnum,
+-	MaterialsMantleDensityEnum,
+-	MaterialsEarthDensityEnum,
+-	MeshAverageVertexConnectivityEnum,
+-	MeshLatEnum,
+-	MeshLongEnum,
+-	MeshXEnum,
+-	MeshYEnum,
+-	MeshZEnum,
+-	MeshScaleFactorEnum,
+-	MeshElementsEnum,
+-	MeshNumberofelementsEnum,
+-	MeshNumberoflayersEnum,
+-	MeshNumberofverticesEnum,
+-	MeshVertexonbaseEnum,
+-	MeshVertexonsurfaceEnum,
+-	MeshVertexonboundaryEnum,
+-	MeshElementtypeEnum,
+-	DomainTypeEnum,
+-	DomainDimensionEnum,
+-	Domain2DhorizontalEnum,
+-	Domain2DverticalEnum,
+-	Domain3DEnum,
+-	Domain3DsurfaceEnum,
++	InversionTypeEnum,
++	LevelsetReinitFrequencyEnum,
++	LevelsetStabilizationEnum,
++	LockFileNameEnum,
++	LoveAllowLayerDeletionEnum,
++	LoveForcingTypeEnum,
++	LoveFrequenciesEnum,
++	LoveG0Enum,
++	LoveKernelsEnum,
++	LoveMu0Enum,
++	LoveNfreqEnum,
++	LoveR0Enum,
++	LoveShNmaxEnum,
++	LoveShNminEnum,
++	MassFluxSegmentsEnum,
++	MassFluxSegmentsPresentEnum,
+ 	MasstransportHydrostaticAdjustmentEnum,
+ 	MasstransportIsfreesurfaceEnum,
+ 	MasstransportMinThicknessEnum,
++	MasstransportNumRequestedOutputsEnum,
+ 	MasstransportPenaltyFactorEnum,
+-	MasstransportSpcthicknessEnum,
++	MasstransportRequestedOutputsEnum,
+ 	MasstransportStabilizationEnum,
+-	MasstransportNumRequestedOutputsEnum,
+-	MasstransportRequestedOutputsEnum,
++	MeltingOffsetEnum,
++	MeshAverageVertexConnectivityEnum,
++	MeshElementtypeEnum,
++	MeshNumberoflayersEnum,
++	MeshNumberofverticesEnum,
++	ModelIdEnum,
++	NodesEnum,
++	NumModelsEnum,
++	OutputBufferPointerEnum,
++	OutputBufferSizePointerEnum,
++	OutputdefinitionEnum,
++	OutputFileNameEnum,
++	OutputFilePointerEnum,
++	ParamEnum,
++	ParametersEnum,
++	QmuErrNameEnum,
++	QmuInNameEnum,
+ 	QmuIsdakotaEnum,
+-	MassFluxSegmentsEnum,
+-	MassFluxSegmentsPresentEnum,
+ 	QmuNumberofpartitionsEnum,
+-	QmuNumberofresponsesEnum,
++	QmuOutNameEnum,
+ 	QmuPartitionEnum,
+ 	QmuResponsedescriptorsEnum,
+-	QmuVariabledescriptorsEnum,
+-	SettingsResultsOnNodesEnum,
++	RestartFileNameEnum,
++	ResultsEnum,
++	RootPathEnum,
++	SaveResultsEnum,
++	SealevelriseAbstolEnum,
++	SealevelriseAngularVelocityEnum,
++	SealevelriseElasticEnum,
++	SealevelriseEquatorialMoiEnum,
++	SealevelriseFluidLoveEnum,
++	SealevelriseGElasticEnum,
++	SealevelriseHElasticEnum,
++	SealevelriseMaxiterEnum,
++	SealevelriseOceanAreaScalingEnum,
++	SealevelrisePolarMoiEnum,
++	SealevelriseReltolEnum,
++	SealevelriseRequestedOutputsEnum,
++	SealevelriseRigidEnum,
++	SealevelriseRotationEnum,
++	SealevelriseTidalLoveHEnum,
++	SealevelriseTidalLoveKEnum,
++	SealevelriseTransitionsEnum,
++	SealevelriseUElasticEnum,
+ 	SettingsIoGatherEnum,
+-	SettingsLowmemEnum,
+ 	SettingsOutputFrequencyEnum,
+ 	SettingsRecordingFrequencyEnum,
++	SettingsResultsOnNodesEnum,
++	SettingsSolverResidueThresholdEnum,
+ 	SettingsWaitonlockEnum,
+-	SettingsSolverResidueThresholdEnum,
+-	DebugProfilingEnum,
+-	ProfilingCurrentMemEnum,
+-	ProfilingCurrentFlopsEnum,
+-	ProfilingSolutionTimeEnum,
++	SmbAdThreshEnum,
++	SmbAIceEnum,
++	SmbAIdxEnum,
++	SmbASnowEnum,
++	SmbCldFracEnum,
++	SmbDelta18oEnum,
++	SmbDelta18oSurfaceEnum,
++	SmbDenIdxEnum,
++	SmbDtEnum,
++	SmbEnum,
++	SmbFEnum,
++	SmbInitDensityScalingEnum,
++	SmbIsaccumulationEnum,
++	SmbIsalbedoEnum,
++	SmbIsd18opdEnum,
++	SmbIsdelta18oEnum,
++	SmbIsdensificationEnum,
++	SmbIsgraingrowthEnum,
++	SmbIsmeltEnum,
++	SmbIsmungsmEnum,
++	SmbIssetpddfacEnum,
++	SmbIsshortwaveEnum,
++	SmbIstemperaturescaledEnum,
++	SmbIsthermalEnum,
++	SmbIsturbulentfluxEnum,
++	SmbKEnum,
++	SmbNumRequestedOutputsEnum,
++	SmbPfacEnum,
++	SmbRequestedOutputsEnum,
++	SmbSealevEnum,
++	SmbSwIdxEnum,
++	SmbT0dryEnum,
++	SmbT0wetEnum,
++	SmbTdiffEnum,
++	SmbThermoDeltaTScalingEnum,
++	SmoothThicknessMultiplierEnum,
++	SolutionTypeEnum,
+ 	SteadystateMaxiterEnum,
+ 	SteadystateNumRequestedOutputsEnum,
+ 	SteadystateReltolEnum,
+ 	SteadystateRequestedOutputsEnum,
+-	SurfaceEnum,
++	StepEnum,
++	StressbalanceAbstolEnum,
++	StressbalanceFSreconditioningEnum,
++	StressbalanceIsnewtonEnum,
++	StressbalanceMaxiterEnum,
++	StressbalanceNumRequestedOutputsEnum,
++	StressbalancePenaltyFactorEnum,
++	StressbalanceReltolEnum,
++	StressbalanceRequestedOutputsEnum,
++	StressbalanceRestolEnum,
++	StressbalanceRiftPenaltyThresholdEnum,
++	StressbalanceShelfDampeningEnum,
++	ThermalIsdynamicbasalspcEnum,
+ 	ThermalIsenthalpyEnum,
+-	ThermalIsdynamicbasalspcEnum,
+-	ThermalReltolEnum,
+ 	ThermalMaxiterEnum,
++	ThermalNumRequestedOutputsEnum,
+ 	ThermalPenaltyFactorEnum,
+ 	ThermalPenaltyLockEnum,
+ 	ThermalPenaltyThresholdEnum,
+-	ThermalSpctemperatureEnum,
++	ThermalReltolEnum,
++	ThermalRequestedOutputsEnum,
+ 	ThermalStabilizationEnum,
+-	ThermalNumRequestedOutputsEnum,
+-	ThermalRequestedOutputsEnum,
+-	GiaMantleViscosityEnum,
+-	GiaLithosphereThicknessEnum,
+-	ThicknessEnum,
++	TimeEnum,
++	TimesteppingCflCoefficientEnum,
++	TimesteppingCouplingTimeEnum,
++	TimesteppingFinalTimeEnum,
++	TimesteppingInterpForcingsEnum,
+ 	TimesteppingStartTimeEnum,
+-	TimesteppingFinalTimeEnum,
+-	TimesteppingCflCoefficientEnum,
+-	TimesteppingTimeAdaptEnum,
+ 	TimesteppingTimeStepEnum,
+-	TimesteppingInterpForcingsEnum,
+-	TimesteppingCouplingTimeEnum,
+-	TransientIssmbEnum,
++	TimesteppingTimeStepMaxEnum,
++	TimesteppingTimeStepMinEnum,
++	TimesteppingTypeEnum,
++	ToMITgcmCommEnum,
++	ToolkitsFileNameEnum,
++	ToolkitsOptionsAnalysesEnum,
++	ToolkitsOptionsStringsEnum,
++	ToolkitsTypesEnum,
++	TransientAmrFrequencyEnum,
+ 	TransientIscouplerEnum,
+-	TransientIsoceancouplingEnum,
+-	TransientIsstressbalanceEnum,
++	TransientIsdamageevolutionEnum,
++	TransientIsesaEnum,
++	TransientIsgiaEnum,
+ 	TransientIsgroundinglineEnum,
++	TransientIshydrologyEnum,
+ 	TransientIsmasstransportEnum,
+-	TransientIsthermalEnum,
+-	TransientIsgiaEnum,
+-	TransientIsesaEnum,
+-	TransientIsdamageevolutionEnum,
+-	TransientIshydrologyEnum,
+ 	TransientIsmovingfrontEnum,
++	TransientIsoceancouplingEnum,
+ 	TransientIsslrEnum,
++	TransientIssmbEnum,
++	TransientIsstressbalanceEnum,
++	TransientIsthermalEnum,
+ 	TransientNumRequestedOutputsEnum,
+ 	TransientRequestedOutputsEnum,
+-	BalancethicknessSpcthicknessEnum,
+-	BalancethicknessApparentMassbalanceEnum,
+-	BalancethicknessDiffusionCoefficientEnum,
++	VelocityEnum,
++	/*}}}*/
++	ParametersENDEnum,
++	InputsSTARTEnum,
++	/*Inputs{{{*/
++	AdjointEnum,
++	AdjointxEnum,
++	AdjointyEnum,
++	AdjointzEnum,
++	AirEnum,
++	ApproximationEnum,
++	BalancethicknessMisfitEnum,
++	BalancethicknessOmega0Enum,
+ 	BalancethicknessOmegaEnum,
+-	BalancethicknessOmega0Enum,
+-	BalancethicknessD0Enum,
+-	/*}}}*/
+-	/*Smb{{{*/
+-	SmbEnum,
+-	SmbAnalysisEnum,
+-	SmbSolutionEnum,
+-	SmbNumRequestedOutputsEnum,
+-	SmbRequestedOutputsEnum,
+-	SmbIsInitializedEnum,
++	BalancethicknessThickeningRateEnum,
++	BasalforcingsFloatingiceMeltingRateEnum,
++	BasalforcingsGeothermalfluxEnum,
++	BasalforcingsGroundediceMeltingRateEnum,
++	BasalforcingsPicoBasinIdEnum,
++	BasalforcingsPicoBoxIdEnum,
++	BasalforcingsPicoMaxboxcountEnum,
++	BaseEnum,
++	BedEnum,
++	BedSlopeXEnum,
++	BedSlopeYEnum,
++	CalvingCalvingrateEnum,
++	CalvingHabFractionEnum,
++	CalvinglevermannCoeffEnum,
++	CalvinglevermannMeltingrateEnum,
++	CalvingMeltingrateEnum,
++	CalvingratexAverageEnum,
++	CalvingratexEnum,
++	CalvingrateyAverageEnum,
++	CalvingrateyEnum,
++	CalvingStressThresholdFloatingiceEnum,
++	CalvingStressThresholdGroundediceEnum,
++	ConvergedEnum,
++	CrevasseDepthEnum,
++	DamageDbarEnum,
++	DamageDEnum,
++	DamageFEnum,
++	DeviatoricStressxxEnum,
++	DeviatoricStressxyEnum,
++	DeviatoricStressxzEnum,
++	DeviatoricStressyyEnum,
++	DeviatoricStressyzEnum,
++	DeviatoricStresszzEnum,
++	DistanceToCalvingfrontEnum,
++	DistanceToGroundinglineEnum,
++	Domain2DhorizontalEnum,
++	Domain2DverticalEnum,
++	Domain3DEnum,
++	DragCoefficientAbsGradientEnum,
++	DrivingStressXEnum,
++	DrivingStressYEnum,
++	EffectivePressureEnum,
++	EnthalpyEnum,
++	EnthalpyPicardEnum,
++	EplHeadEnum,
++	EplHeadOldEnum,
++	EplHeadSlopeXEnum,
++	EplHeadSlopeYEnum,
++	EsaDeltathicknessEnum,
++	EsaXmotionEnum,
++	EsaYmotionEnum,
++	EtaDiffEnum,
++	FrictionAsEnum,
++	FrictionCEnum,
++	FrictionCoefficientcoulombEnum,
++	FrictionCoefficientEnum,
++	FrictionEffectivePressureEnum,
++	FrictionMEnum,
++	FrictionPEnum,
++	FrictionPressureAdjustedTemperatureEnum,
++	FrictionQEnum,
++	FrictionWaterLayerEnum,
++	GeometryHydrostaticRatioEnum,
++	GiaLithosphereThicknessEnum,
++	GiaMantleViscosityEnum,
++	GradientEnum,
++	HydrologyBumpHeightEnum,
++	HydrologyBumpSpacingEnum,
++	HydrologydcBasalMoulinInputEnum,
++	HydrologydcEplThicknessEnum,
++	HydrologydcEplThicknessOldEnum,
++	HydrologydcMaskEplactiveEltEnum,
++	HydrologydcMaskEplactiveNodeEnum,
++	HydrologydcSedimentTransmitivityEnum,
++	HydrologyEnglacialInputEnum,
++	HydrologyGapHeightEnum,
++	HydrologyHeadEnum,
++	HydrologyHeadOldEnum,
++	HydrologyMoulinInputEnum,
++	HydrologyNeumannfluxEnum,
++	HydrologyReynoldsEnum,
++	HydrologyWaterVxEnum,
++	HydrologyWaterVyEnum,
++	IceEnum,
++	IceMaskNodeActivationEnum,
++	InputEnum,
++	InversionCostFunctionsCoefficientsEnum,
++	InversionSurfaceObsEnum,
++	InversionThicknessObsEnum,
++	InversionVelObsEnum,
++	InversionVxObsEnum,
++	InversionVyObsEnum,
++	LevelsetfunctionSlopeXEnum,
++	LevelsetfunctionSlopeYEnum,
++	LoadingforceXEnum,
++	LoadingforceYEnum,
++	LoadingforceZEnum,
++	MaskGroundediceLevelsetEnum,
++	MaskIceLevelsetEnum,
++	MasstransportSpcthicknessEnum,
++	MaterialsRheologyBbarEnum,
++	MaterialsRheologyBEnum,
++	MaterialsRheologyEbarEnum,
++	MaterialsRheologyEcbarEnum,
++	MaterialsRheologyEcEnum,
++	MaterialsRheologyEEnum,
++	MaterialsRheologyEsbarEnum,
++	MaterialsRheologyEsEnum,
++	MaterialsRheologyNEnum,
++	MeshScaleFactorEnum,
++	MeshVertexonbaseEnum,
++	MeshVertexonboundaryEnum,
++	MeshVertexonsurfaceEnum,
++	MisfitEnum,
++	NeumannfluxEnum,
++	NodeEnum,
++	OmegaAbsGradientEnum,
++	P0Enum,
++	P1Enum,
++	PressureEnum,
++	RheologyBAbsGradientEnum,
++	RheologyBbarAbsGradientEnum,
++	SealevelEnum,
++	SealevelriseDeltathicknessEnum,
++	SedimentHeadEnum,
++	SedimentHeadOldEnum,
++	SedimentHeadResidualEnum,
++	SigmaNNEnum,
++	SmbAccumulationEnum,
++	SmbAEnum,
++	SmbAiniEnum,
++	SmbAValueEnum,
++	SmbBMaxEnum,
++	SmbBMinEnum,
++	SmbBNegEnum,
++	SmbBPosEnum,
++	SmbCEnum,
++	SmbDEnum,
++	SmbDiniEnum,
++	SmbDlwrfEnum,
++	SmbDswrfEnum,
++	SmbDzEnum,
+ 	SmbDziniEnum,
+-	SmbDiniEnum,
+-	SmbReiniEnum,
++	SmbDzMinEnum,
++	SmbDzTopEnum,
++	SmbEAirEnum,
++	SmbECEnum,
++	SmbECiniEnum,
++	SmbElaEnum,
++	SmbEvaporationEnum,
++	SmbGdnEnum,
+ 	SmbGdniniEnum,
++	SmbGspEnum,
+ 	SmbGspiniEnum,
+-	SmbECiniEnum,
+-	SmbWiniEnum,
+-	SmbAiniEnum,
+-	SmbTiniEnum,
+-	SmbSizeiniEnum,
+-	/*SMBforcing*/
+-	SMBforcingEnum,
++	SmbHrefEnum,
++	SmbIsInitializedEnum,
+ 	SmbMassBalanceEnum,
+-	/*SMBgemb*/
+-	SMBgembEnum,
+-	SmbInitDensityScalingEnum,
+-	SmbThermoDeltaTScalingEnum,
+-	SmbAdThreshEnum,
+-	SmbTaEnum,
+-	SmbVEnum,
+-	SmbDswrfEnum,
+-	SmbDlwrfEnum,
+-	SmbPEnum, 
+-	SmbEAirEnum, 
++	SmbMeltEnum,
++	SmbMonthlytemperaturesEnum,
+ 	SmbPAirEnum,
+-	SmbTmeanEnum,
+-	SmbCEnum,
+-	SmbTzEnum,
+-	SmbVzEnum, 
+-	SmbDtEnum,
+-	SmbDzEnum,
+-	SmbAIdxEnum,
+-	SmbSwIdxEnum,
+-	SmbDenIdxEnum,
+-	SmbZTopEnum, 
+-	SmbDzTopEnum, 
+-	SmbDzMinEnum, 
+-	SmbZYEnum, 
+-	SmbZMaxEnum, 
+-	SmbZMinEnum, 
+-	SmbOutputFreqEnum, 
+-	SmbASnowEnum, 
+-	SmbAIceEnum, 
+-	SmbCldFracEnum, 
+-	SmbT0wetEnum, 
+-	SmbT0dryEnum, 
+-	SmbKEnum, 
+-	SmbDEnum,
++	SmbPddfacIceEnum,
++	SmbPddfacSnowEnum,
++	SmbPEnum,
++	SmbPrecipitationEnum,
++	SmbPrecipitationsLgmEnum,
++	SmbPrecipitationsPresentdayEnum,
+ 	SmbReEnum,
+-	SmbGdnEnum,
+-	SmbGspEnum,
+-	SmbECEnum,
+-	SmbWEnum,
+-	SmbAEnum,
+-	SmbTEnum,
+-	SmbAValueEnum,
+-	SmbTeValueEnum,
+-	SmbIsgraingrowthEnum,
+-	SmbIsalbedoEnum,
+-	SmbIsshortwaveEnum,
+-	SmbIsthermalEnum,
+-	SmbIsaccumulationEnum,
+-	SmbIsmeltEnum,
+-	SmbIsdensificationEnum,
+-	SmbIsturbulentfluxEnum,
+-	SmbDzAddEnum,
+-	SmbMAddEnum,
+-	SmbFACEnum,
+-	/*SMBpdd*/
+-	SMBpddEnum,	
+-	SmbDelta18oEnum,
+-	SmbDelta18oSurfaceEnum,
+-	SmbIsdelta18oEnum,
+-	SmbIssetpddfacEnum,
+-	SmbIsmungsmEnum,
+-	SmbIsd18opdEnum,
+-	SmbIstemperaturescaledEnum,
+-	SmbPrecipitationsPresentdayEnum,
+-	SmbPrecipitationsLgmEnum,
+-	SmbTemperaturesPresentdayEnum,
+-	SmbTemperaturesLgmEnum,
+-	SmbPrecipitationEnum,
+-	SmbPddfacSnowEnum,
+-	SmbPddfacIceEnum,
+-	SmbDesfacEnum,
++	SmbRefreezeEnum,
++	SmbReiniEnum,
++	SmbRunoffEnum,
+ 	SmbS0pEnum,
+ 	SmbS0tEnum,
+-	SmbRlapsEnum,
+-	SmbRlapslgmEnum,
+-	SmbPfacEnum,
+-	SmbTdiffEnum,
+-	SmbSealevEnum,
+-	SMBd18opddEnum,
+-	SmbDpermilEnum,
+-	SmbFEnum,
+-	SMBgradientsEnum,
+-	SmbMonthlytemperaturesEnum,
+-	SmbHrefEnum,
++	SmbSizeiniEnum,
+ 	SmbSmbrefEnum,
+-	SmbBPosEnum,
+-	SmbBNegEnum,
+-	SMBhenningEnum,
+-	SMBcomponentsEnum,
+-	SmbAccumulationEnum,
+-	SmbEvaporationEnum,
+-	SmbRunoffEnum,
+-	SMBmeltcomponentsEnum,
+-	SmbMeltEnum,
+-	SmbRefreezeEnum,
+-	SMBgcmEnum,
+-	/*SMBgradientsela*/
+-	SMBgradientselaEnum,
+-	SmbElaEnum,
+-	SmbBMaxEnum,
+-	SmbBMinEnum,
+-	/*}}}*/
+-	/*Inputs {{{*/
+-	AdjointpEnum,
+-	AdjointxEnum,
+-	AdjointyEnum,
+-	AdjointzEnum,
+-	BalancethicknessMisfitEnum,
+-	BedSlopeXEnum,
+-	BedSlopeYEnum,
+-	BoundaryEnum,
+-	ConvergedEnum,
+-	InternalEnum,
+-	MassFluxEnum,
+-	MeltingOffsetEnum,
+-	MisfitEnum,
+-	PressureEnum,
+-	AndroidFrictionCoefficientEnum,
+-	ResetPenaltiesEnum,
++	SmbTaEnum,
++	SmbTemperaturesLgmEnum,
++	SmbTemperaturesPresentdayEnum,
++	SmbTEnum,
++	SmbTeValueEnum,
++	SmbTiniEnum,
++	SmbTmeanEnum,
++	SmbTzEnum,
++	SmbVEnum,
++	SmbVzEnum,
++	SmbWEnum,
++	SmbWiniEnum,
++	SmbZMaxEnum,
++	SmbZMinEnum,
++	SmbZTopEnum,
++	SmbZYEnum,
++	StrainRateeffectiveEnum,
++	StrainRateparallelEnum,
++	StrainRateperpendicularEnum,
++	StrainRatexxEnum,
++	StrainRatexyEnum,
++	StrainRatexzEnum,
++	StrainRateyyEnum,
++	StrainRateyzEnum,
++	StrainRatezzEnum,
++	StressMaxPrincipalEnum,
++	StressTensorxxEnum,
++	StressTensorxyEnum,
++	StressTensorxzEnum,
++	StressTensoryyEnum,
++	StressTensoryzEnum,
++	StressTensorzzEnum,
++	SurfaceAbsMisfitEnum,
+ 	SurfaceAbsVelMisfitEnum,
+ 	SurfaceAreaEnum,
+ 	SurfaceAverageVelMisfitEnum,
++	SurfaceEnum,
+ 	SurfaceLogVelMisfitEnum,
+ 	SurfaceLogVxVyMisfitEnum,
++	SurfaceObservationEnum,
+ 	SurfaceRelVelMisfitEnum,
+ 	SurfaceSlopeXEnum,
+ 	SurfaceSlopeYEnum,
+ 	TemperatureEnum,
+ 	TemperaturePicardEnum,
+-	TemperaturePDDEnum,
++	ThicknessAbsGradientEnum,
+ 	ThicknessAbsMisfitEnum,
+-	SurfaceAbsMisfitEnum,
+-	OmegaAbsGradientEnum,
+-	EtaDiffEnum,
+-	EtaAbsGradientEnum,
++	ThicknessAcrossGradientEnum,
++	ThicknessAlongGradientEnum,
++	ThicknessEnum,
++	ThicknessPositiveEnum,
+ 	VelEnum,
+-	VelocityEnum,
+ 	VxAverageEnum,
+ 	VxEnum,
++	VxMeshEnum,
++	VxObsEnum,
+ 	VyAverageEnum,
+ 	VyEnum,
++	VyMeshEnum,
++	VyObsEnum,
+ 	VzEnum,
+-	VzSSAEnum,
++	VzFSEnum,
+ 	VzHOEnum,
+-	VzFSEnum,
+-	VxMeshEnum,
+-	VyMeshEnum,
+ 	VzMeshEnum,
+-	EnthalpyEnum,
+-	EnthalpyPicardEnum,
+-	ThicknessAbsGradientEnum,
+-	ThicknessAlongGradientEnum,
+-	ThicknessAcrossGradientEnum,
+-	ThicknessPositiveEnum,
+-	IntMatParamEnum,
+-	RheologyBbarAbsGradientEnum,
+-	RheologyBAbsGradientEnum,
+-	DragCoefficientAbsGradientEnum,
+-	TransientInputEnum,
+-	WaterfractionEnum,
++	VzSSAEnum,
++	WatercolumnEnum,
++	WaterColumnOldEnum,
+ 	WaterfractionDrainageEnum,
+ 	WaterfractionDrainageIntegratedEnum,
+-	WatercolumnEnum,
+-	ViscousHeatingEnum,
+-	HydrologyWaterVxEnum,
+-	HydrologyWaterVyEnum,
+-	DrivingStressXEnum,
+-	DrivingStressYEnum,
+-	SigmaNNEnum,
+-	StressTensorEnum,
+-	StressTensorxxEnum,
+-	StressTensorxyEnum,
+-	StressTensorxzEnum,
+-	StressTensoryyEnum,
+-	StressTensoryzEnum,
+-	StressTensorzzEnum,
+-	StressMaxPrincipalEnum,
+-	DeviatoricStressEnum,
+-	DeviatoricStressxxEnum,
+-	DeviatoricStressxyEnum,
+-	DeviatoricStressxzEnum,
+-	DeviatoricStressyyEnum,
+-	DeviatoricStressyzEnum,
+-	DeviatoricStresszzEnum,
++	WaterfractionEnum,
++	WaterheightEnum,
++	WeightsSurfaceObservationEnum,
++	/*}}}*/
++	InputsENDEnum,
++	/*Other{{{*/
++	AbsoluteEnum,
++	AdaptiveTimesteppingEnum,
++	AdjointBalancethickness2AnalysisEnum,
++	AdjointBalancethicknessAnalysisEnum,
++	AdjointHorizAnalysisEnum,
++	AdjointpEnum,
++	AggressiveMigrationEnum,
++	AmrBamgEnum,
++	AmrNeopzEnum,
++	AndroidFrictionCoefficientEnum,
++	ArrheniusEnum,
++	AutodiffJacobianEnum,
++	AutodiffKeepEnum,
++	Balancethickness2AnalysisEnum,
++	Balancethickness2SolutionEnum,
++	BalancethicknessAnalysisEnum,
++	BalancethicknessApparentMassbalanceEnum,
++	BalancethicknessSoftAnalysisEnum,
++	BalancethicknessSoftSolutionEnum,
++	BalancethicknessSolutionEnum,
++	BalancethicknessSpcthicknessEnum,
++	BalancevelocityAnalysisEnum,
++	BalancevelocitySolutionEnum,
++	BasalCrevasseEnum,
++	BasalforcingsPicoEnum,
++	BasalforcingsPicoFarOceantemperatureEnum,
++	BedSlopeSolutionEnum,
++	BoolExternalResultEnum,
++	BoolInputEnum,
++	BoolParamEnum,
++	BoundaryEnum,
++	BuddJackaEnum,
++	CalvingDev2Enum,
++	CalvingHabEnum,
++	CalvingLevermannEnum,
++	CalvingVonmisesEnum,
++	CfsurfacelogvelEnum,
++	CfsurfacesquareEnum,
++	ClosedEnum,
++	ColinearEnum,
++	ConstantsGEnum,
++	ConstantsReferencetemperatureEnum,
++	ConstraintsEnum,
++	ContactEnum,
++	ContourEnum,
++	ContoursEnum,
++	ControlInputEnum,
++	ControlSteadyEnum,
++	CrouzeixRaviartEnum,
++	CuffeyEnum,
++	CuffeyTemperateEnum,
++	DamageC4Enum,
++	DamageElementinterpEnum,
++	DamageEvolutionAnalysisEnum,
++	DamageEvolutionSolutionEnum,
++	DamageMaxiterEnum,
++	DataSetEnum,
++	DatasetInputEnum,
++	DataSetParamEnum,
++	DefaultAnalysisEnum,
++	DefaultCalvingEnum,
++	DegreeOfChannelizationEnum,
++	DenseEnum,
++	DependentObjectEnum,
++	DepthAverageAnalysisEnum,
+ 	DeviatoricStresseffectiveEnum,
+-	LambdaSEnum,
+-	StrainRateEnum,
+-	StrainRatexxEnum,
+-	StrainRatexyEnum,
+-	StrainRatexzEnum,
+-	StrainRateyyEnum,
+-	StrainRateyzEnum,
+-	StrainRatezzEnum,
++	DeviatoricStressErrorEstimatorEnum,
+ 	DivergenceEnum,
+-	MaxDivergenceEnum,
+-	GiaCrossSectionShapeEnum,
+-	GiadWdtEnum,
+-	GiaWEnum, 
+-	/*}}}*/
+-	/*Results{{{*/
+-	SaveResultsEnum,
+-	BoolExternalResultEnum,
++	Domain3DsurfaceEnum,
++	DoubleArrayInputEnum,
+ 	DoubleExternalResultEnum,
++	DoubleInputEnum,
++	DoubleMatArrayParamEnum,
+ 	DoubleMatExternalResultEnum,
++	DoubleMatParamEnum,
++	DoubleParamEnum,
++	DoubleVecParamEnum,
++	EffectivePressureStackedEnum,
++	EffectivePressureTimeAverageEnum,
++	ElementEnum,
++	ElementHookEnum,
++	ElementSIdEnum,
++	EnthalpyAnalysisEnum,
++	EplHeadStackedEnum,
++	EplHeadTimeAverageEnum,
++	EsaAnalysisEnum,
++	EsaEmotionEnum,
++	EsaNmotionEnum,
++	EsaNumRequestedOutputsEnum,
++	EsaRotationrateEnum,
++	EsaSolutionEnum,
++	EsaStrainratexxEnum,
++	EsaStrainratexyEnum,
++	EsaStrainrateyyEnum,
++	EsaTransitionsEnum,
++	EsaUmotionEnum,
++	ExternalResultEnum,
++	ExtrapolationAnalysisEnum,
++	ExtrudeFromBaseAnalysisEnum,
++	ExtrudeFromTopAnalysisEnum,
++	FemModelCommEnum,
++	FemModelEnum,
++	FileParamEnum,
++	FixedTimesteppingEnum,
++	FloatingAreaEnum,
++	FloatingAreaScaledEnum,
++	FloatingMeltRateEnum,
++	FlowequationBorderFSEnum,
++	FreeEnum,
++	FreeSurfaceBaseAnalysisEnum,
++	FreeSurfaceTopAnalysisEnum,
++	FSApproximationEnum,
++	FsetEnum,
++	FSpressureEnum,
++	FSSolverEnum,
++	FSvelocityEnum,
++	GaussPentaEnum,
++	GaussSegEnum,
++	GaussTetraEnum,
++	GaussTriaEnum,
++	GenericOptionEnum,
++	GenericParamEnum,
++	GiadWdtEnum,
++	GiaIvinsAnalysisEnum,
++	GiaSolutionEnum,
++	GiaWEnum,
++	Gradient1Enum,
++	Gradient2Enum,
++	Gradient3Enum,
++	GroundedAreaEnum,
++	GroundedAreaScaledEnum,
++	GroundingOnlyEnum,
++	GsetEnum,
++	GslEnum,
++	HOApproximationEnum,
++	HOFSApproximationEnum,
++	HookEnum,
++	HydrologyBasalFluxEnum,
++	HydrologyDCEfficientAnalysisEnum,
++	HydrologydcEnum,
++	HydrologydcEplColapseThicknessEnum,
++	HydrologydcEplCompressibilityEnum,
++	HydrologydcEplConductivityEnum,
++	HydrologydcEplInitialThicknessEnum,
++	HydrologydcEplMaxThicknessEnum,
++	HydrologydcEplPorosityEnum,
++	HydrologydcEplThicknessStackedEnum,
++	HydrologydcEplThicknessTimeAverageEnum,
++	HydrologyDCInefficientAnalysisEnum,
++	HydrologydcSedimentCompressibilityEnum,
++	HydrologydcSedimentPorosityEnum,
++	HydrologydcSedimentThicknessEnum,
++	HydrologydcWaterCompressibilityEnum,
++	HydrologyShreveAnalysisEnum,
++	HydrologyshreveEnum,
++	HydrologySolutionEnum,
++	HydrologySommersAnalysisEnum,
++	HydrologysommersEnum,
++	IceMassEnum,
++	IceMassScaledEnum,
++	IceVolumeAboveFloatationEnum,
++	IceVolumeAboveFloatationScaledEnum,
++	IceVolumeEnum,
++	IceVolumeScaledEnum,
++	IncrementalEnum,
++	IndexedEnum,
++	InternalEnum,
++	IntersectEnum,
+ 	IntExternalResultEnum,
++	IntInputEnum,
+ 	IntMatExternalResultEnum,
++	IntMatParamEnum,
++	IntParamEnum,
++	IntVecParamEnum,
++	InversionCostFunctionThresholdEnum,
++	InversionFatolEnum,
++	InversionFrtolEnum,
++	InversionVzObsEnum,
+ 	JEnum,
++	L1L2ApproximationEnum,
++	L2ProjectionBaseAnalysisEnum,
++	L2ProjectionEPLAnalysisEnum,
++	LACrouzeixRaviartEnum,
++	LambdaSEnum,
++	LATaylorHoodEnum,
++	LevelsetAnalysisEnum,
++	LevelsetfunctionPicardEnum,
++	LinearFloatingMeltRateEnum,
++	LliboutryDuvalEnum,
++	LoadsEnum,
++	LoveAnalysisEnum,
++	LoveHiEnum,
++	LoveHrEnum,
++	LoveKernelsImagEnum,
++	LoveKernelsRealEnum,
++	LoveKiEnum,
++	LoveKrEnum,
++	LoveLiEnum,
++	LoveLrEnum,
++	LoveSolutionEnum,
++	MantlePlumeGeothermalFluxEnum,
++	MaskLandLevelsetEnum,
++	MaskOceanLevelsetEnum,
++	MassconaxpbyEnum,
++	MassconEnum,
++	MassfluxatgateEnum,
++	MassFluxEnum,
++	MasstransportAnalysisEnum,
++	MasstransportSolutionEnum,
++	MatdamageiceEnum,
++	MatenhancediceEnum,
++	MaterialsBetaEnum,
++	MaterialsEarthDensityEnum,
++	MaterialsEnum,
++	MaterialsHeatcapacityEnum,
++	MaterialsLatentheatEnum,
++	MaterialsLithosphereDensityEnum,
++	MaterialsLithosphereShearModulusEnum,
++	MaterialsMantleDensityEnum,
++	MaterialsMantleShearModulusEnum,
++	MaterialsMeltingpointEnum,
++	MaterialsMixedLayerCapacityEnum,
++	MaterialsMuWaterEnum,
++	MaterialsRheologyLawEnum,
++	MaterialsRhoFreshwaterEnum,
++	MaterialsRhoIceEnum,
++	MaterialsRhoSeawaterEnum,
++	MaterialsTemperateiceconductivityEnum,
++	MaterialsThermalconductivityEnum,
++	MaterialsThermalExchangeVelocityEnum,
++	MatestarEnum,
++	MaticeEnum,
++	MatlithoEnum,
++	MatparEnum,
++	MatrixParamEnum,
++	MaxAbsVxEnum,
++	MaxAbsVyEnum,
++	MaxAbsVzEnum,
++	MaxDivergenceEnum,
++	MaxVelEnum,
++	MaxVxEnum,
++	MaxVyEnum,
++	MaxVzEnum,
++	MelangeEnum,
++	MeltingAnalysisEnum,
++	MeshElementsEnum,
++	MeshLatEnum,
++	MeshLongEnum,
++	MeshNumberofelementsEnum,
++	MeshXEnum,
++	MeshYEnum,
++	MINIcondensedEnum,
++	MINIEnum,
++	MinVelEnum,
++	MinVxEnum,
++	MinVyEnum,
++	MinVzEnum,
++	MismipFloatingMeltRateEnum,
++	MoulinEnum,
++	MpiDenseEnum,
++	MpiEnum,
++	MpiSparseEnum,
++	MumpsEnum,
++	NewDamageEnum,
++	NodalEnum,
++	NodalvalueEnum,
++	NodeSIdEnum,
++	NoneApproximationEnum,
++	NoneEnum,
++	NumberedcostfunctionEnum,
++	NumericalfluxEnum,
++	OldGradientEnum,
++	OneLayerP4zEnum,
++	OpenEnum,
++	OptionEnum,
++	Outputdefinition100Enum,
++	Outputdefinition1Enum,
++	P0ArrayEnum,
++	P1bubblecondensedEnum,
++	P1bubbleEnum,
++	P1DGEnum,
++	P1P1Enum,
++	P1P1GLSEnum,
++	P1xP2Enum,
++	P1xP3Enum,
++	P1xP4Enum,
++	P2bubblecondensedEnum,
++	P2bubbleEnum,
++	P2Enum,
++	P2xP1Enum,
++	P2xP4Enum,
++	PatersonEnum,
++	PengridEnum,
++	PenpairEnum,
++	PentaEnum,
++	PentaInputEnum,
++	ProfilerEnum,
++	ProfilingCurrentFlopsEnum,
++	ProfilingCurrentMemEnum,
++	ProfilingSolutionTimeEnum,
++	QmuNumberofresponsesEnum,
++	QmuVariabledescriptorsEnum,
++	RegionaloutputEnum,
++	RegularEnum,
++	ResetPenaltiesEnum,
++	RiftfrontEnum,
++	ScaledEnum,
++	SealevelAbsoluteEnum,
++	SealevelEmotionEnum,
++	SealevelEustaticEnum,
++	SealevelInertiaTensorXZEnum,
++	SealevelInertiaTensorYZEnum,
++	SealevelInertiaTensorZZEnum,
++	SealevelNmotionEnum,
++	SealevelriseAnalysisEnum,
++	SealevelriseNumRequestedOutputsEnum,
++	SealevelriseSolutionEnum,
++	SealevelriseStericRateEnum,
++	SealevelUmotionEnum,
++	SedimentHeadStackedEnum,
++	SedimentHeadTimeAverageEnum,
++	SegEnum,
++	SegInputEnum,
++	SegmentEnum,
++	SegmentRiftfrontEnum,
++	SeparateEnum,
++	SeqEnum,
++	SettingsLowmemEnum,
++	SIAApproximationEnum,
++	SigmaVMEnum,
++	SmbAnalysisEnum,
++	SMBcomponentsEnum,
++	SMBd18opddEnum,
++	SmbDesfacEnum,
++	SmbDpermilEnum,
++	SmbDzAddEnum,
++	SmbFACEnum,
++	SMBforcingEnum,
++	SMBgcmEnum,
++	SMBgembEnum,
++	SMBgradientselaEnum,
++	SMBgradientsEnum,
++	SMBhenningEnum,
++	SmbMAddEnum,
++	SMBmeltcomponentsEnum,
++	SmbOutputFreqEnum,
++	SMBpddEnum,
++	SmbRlapsEnum,
++	SmbRlapslgmEnum,
++	SmbSolutionEnum,
++	SmoothAnalysisEnum,
++	SoftMigrationEnum,
++	SpcDynamicEnum,
++	SpcStaticEnum,
++	SpcTransientEnum,
++	SSAApproximationEnum,
++	SSAFSApproximationEnum,
++	SSAHOApproximationEnum,
++	SsetEnum,
++	SteadystateSolutionEnum,
++	StressbalanceAnalysisEnum,
++	StressbalanceConvergenceNumStepsEnum,
++	StressbalanceSIAAnalysisEnum,
++	StressbalanceSolutionEnum,
++	StressbalanceVerticalAnalysisEnum,
++	StressIntensityFactorEnum,
++	StringArrayParamEnum,
+ 	StringExternalResultEnum,
+-	StepEnum,
+-	TimeEnum,
+-	WaterColumnOldEnum,
++	StringParamEnum,
++	SubelementMigration2Enum,
++	SubelementMigration3Enum,
++	SubelementMigrationEnum,
++	SurfaceCrevasseEnum,
++	SurfaceSlopeSolutionEnum,
++	TaylorHoodEnum,
++	TemperaturePDDEnum,
++	TetraEnum,
++	TetraInputEnum,
++	ThermalAnalysisEnum,
++	ThermalSolutionEnum,
++	ThermalSpctemperatureEnum,
++	ThicknessErrorEstimatorEnum,
++	TotalFloatingBmbEnum,
++	TotalFloatingBmbScaledEnum,
++	TotalGroundedBmbEnum,
++	TotalGroundedBmbScaledEnum,
++	TotalSmbEnum,
++	TotalSmbScaledEnum,
++	TransientArrayParamEnum,
++	TransientInputEnum,
++	TransientParamEnum,
++	TransientSolutionEnum,
++	TriaEnum,
++	TriaInputEnum,
++	UzawaPressureAnalysisEnum,
++	VectorParamEnum,
++	VertexEnum,
++	VertexPIdEnum,
++	VertexSIdEnum,
++	VerticesEnum,
++	ViscousHeatingEnum,
++	WaterEnum,
++	WorldCommEnum,
++	XTaylorHoodEnum,
++	XYEnum,
++	XYZEnum,
+ 	/*}}}*/
+-	/*Output Definitions{{{*/
+-	SurfaceObservationEnum,
+-	WeightsSurfaceObservationEnum,
+-	OutputdefinitionEnum,
+-	Outputdefinition1Enum,
+-	Outputdefinition2Enum,
+-	Outputdefinition3Enum,
+-	Outputdefinition4Enum,
+-	Outputdefinition5Enum,
+-	Outputdefinition6Enum,
+-	Outputdefinition7Enum,
+-	Outputdefinition8Enum,
+-	Outputdefinition9Enum,
++	/*Unused?{{{*/
++	BalancethicknessD0Enum,
++	BalancethicknessDiffusionCoefficientEnum,
++	BilinearInterpEnum,
++	CalvingdevCoeffEnum,
++	DeviatoricStressEnum,
++	EtaAbsGradientEnum,
++	MeshZEnum,
++	NearestInterpEnum,
+ 	Outputdefinition10Enum,
+ 	Outputdefinition11Enum,
+ 	Outputdefinition12Enum,
+@@ -678,6 +1033,7 @@
+ 	Outputdefinition27Enum,
+ 	Outputdefinition28Enum,
+ 	Outputdefinition29Enum,
++	Outputdefinition2Enum,
+ 	Outputdefinition30Enum,
+ 	Outputdefinition31Enum,
+ 	Outputdefinition32Enum,
+@@ -688,6 +1044,7 @@
+ 	Outputdefinition37Enum,
+ 	Outputdefinition38Enum,
+ 	Outputdefinition39Enum,
++	Outputdefinition3Enum,
+ 	Outputdefinition40Enum,
+ 	Outputdefinition41Enum,
+ 	Outputdefinition42Enum,
+@@ -698,6 +1055,7 @@
+ 	Outputdefinition47Enum,
+ 	Outputdefinition48Enum,
+ 	Outputdefinition49Enum,
++	Outputdefinition4Enum,
+ 	Outputdefinition50Enum,
+ 	Outputdefinition51Enum,
+ 	Outputdefinition52Enum,
+@@ -708,6 +1066,7 @@
+ 	Outputdefinition57Enum,
+ 	Outputdefinition58Enum,
+ 	Outputdefinition59Enum,
++	Outputdefinition5Enum,
+ 	Outputdefinition60Enum,
+ 	Outputdefinition61Enum,
+ 	Outputdefinition62Enum,
+@@ -718,6 +1077,7 @@
+ 	Outputdefinition67Enum,
+ 	Outputdefinition68Enum,
+ 	Outputdefinition69Enum,
++	Outputdefinition6Enum,
+ 	Outputdefinition70Enum,
+ 	Outputdefinition71Enum,
+ 	Outputdefinition72Enum,
+@@ -728,6 +1088,7 @@
+ 	Outputdefinition77Enum,
+ 	Outputdefinition78Enum,
+ 	Outputdefinition79Enum,
++	Outputdefinition7Enum,
+ 	Outputdefinition80Enum,
+ 	Outputdefinition81Enum,
+ 	Outputdefinition82Enum,
+@@ -738,6 +1099,7 @@
+ 	Outputdefinition87Enum,
+ 	Outputdefinition88Enum,
+ 	Outputdefinition89Enum,
++	Outputdefinition8Enum,
+ 	Outputdefinition90Enum,
+ 	Outputdefinition91Enum,
+ 	Outputdefinition92Enum,
+@@ -748,432 +1110,17 @@
+ 	Outputdefinition97Enum,
+ 	Outputdefinition98Enum,
+ 	Outputdefinition99Enum,
+-	Outputdefinition100Enum,   
++	Outputdefinition9Enum,
+ 	OutputdefinitionListEnum,
+-	MassfluxatgateEnum,
+-	NodalvalueEnum,
+-	RegionaloutputEnum,
+-	VxObsEnum,
+-	VyObsEnum,
+-	NumberedcostfunctionEnum,
+-	CfsurfacesquareEnum,
+-	CfsurfacelogvelEnum,
+-	/*}}}*/
+-	/*Relaxation{{{*/
+-	AbsoluteEnum,
+-	IncrementalEnum,
+-	AugmentedLagrangianREnum,
+-	AugmentedLagrangianRhopEnum,
+-	AugmentedLagrangianRlambdaEnum,
+-	AugmentedLagrangianRholambdaEnum,
+-	AugmentedLagrangianThetaEnum,
+-	/*}}}*/
+-	/*Grounding Line{{{*/
+-	NoneEnum,
+-	AggressiveMigrationEnum,
+-	SoftMigrationEnum,
+-	SubelementMigrationEnum,
+-	SubelementMigration2Enum,
+-	SubelementMigration3Enum,
+-	SubelementMigration4Enum,
+-	ContactEnum,
+-	GroundingOnlyEnum,
+-	MaskGroundediceLevelsetEnum,
+-	/*}}}*/
+-	/*Parameters{{{*/
+-	AdjointEnum,
+-	ColinearEnum,
+-	ControlSteadyEnum,
+-	FsetEnum,
+-	Gradient1Enum,
+-	Gradient2Enum,
+-	Gradient3Enum,
+-	GradientEnum,
+-	GroundinglineMigrationEnum,
+-	GsetEnum,
+-	IndexEnum,
+-	IndexedEnum,
+-	IntersectEnum,
+-	NodalEnum,
+-	OldGradientEnum,
+-	OutputBufferPointerEnum,
+-	OutputBufferSizePointerEnum,
+-	OutputFilePointerEnum,
+-	ToolkitsFileNameEnum,
+-	RootPathEnum,
+-	OutputFileNameEnum,
+-	InputFileNameEnum,
+-	LockFileNameEnum,
+-	RestartFileNameEnum,
+-	ToolkitsTypesEnum,
+-	ToolkitsOptionsAnalysesEnum,
+-	ToolkitsOptionsStringsEnum,
+-	QmuErrNameEnum,
+-	QmuInNameEnum,
+-	QmuOutNameEnum,
+-	RegularEnum,
+-	ScaledEnum,
+-	SeparateEnum,
+-	SsetEnum,
+-	/*}}}*/
+-	/*Toolkits{{{*/
+-	DenseEnum,
+-	MpiDenseEnum,
+-	MpiSparseEnum,
+-	SeqEnum,
+-	MpiEnum,
+-	MumpsEnum,
+-	GslEnum,
+-	/*}}}*/
+-	/*Rheology law (move to Material) {{{*/
+-	CuffeyEnum,
+-	BuddJackaEnum,
+-	CuffeyTemperateEnum,
+-	PatersonEnum,
+-	ArrheniusEnum,
+-	LliboutryDuvalEnum,
+-	/*}}}*/
+-	/*Levelset related enums (will be moved to appropriate place when finished){{{*/
+-	ExtrapolationVariableEnum,
+-	IceMaskNodeActivationEnum,
+-	LevelsetfunctionSlopeXEnum,
+-	LevelsetfunctionSlopeYEnum,
+-	LevelsetfunctionPicardEnum,
+-	LevelsetReinitFrequencyEnum,
+-	/*}}}*/
+-	/*Sea Level Rise{{{*/
+-	SealevelEnum,
+-	SealevelUmotionEnum,
+-	SealevelNmotionEnum,
+-	SealevelEmotionEnum,
+-	SealevelAbsoluteEnum,
+-	SealevelEustaticEnum,
+-	SealevelInertiaTensorXZEnum,
+-	SealevelInertiaTensorYZEnum,
+-	SealevelInertiaTensorZZEnum,
+ 	SealevelObsEnum,
+ 	SealevelWeightsEnum,
+-	SealevelriseDeltathicknessEnum,
+-	SealevelriseMaxiterEnum,
+-	SealevelriseReltolEnum,
+-	SealevelriseAbstolEnum,
+-	SealevelriseRigidEnum,
+-	SealevelriseElasticEnum,
+-	SealevelriseRotationEnum,
+-	SealevelriseTidalLoveHEnum,
+-	SealevelriseTidalLoveKEnum, 
+-	SealevelriseFluidLoveEnum, 
+-	SealevelriseEquatorialMoiEnum, 
+-	SealevelrisePolarMoiEnum, 
+-	SealevelriseAngularVelocityEnum,
+-	SealevelriseOceanAreaScalingEnum,
+-	SealevelriseStericRateEnum,
+-	SealevelriseGElasticEnum,
+-	SealevelriseUElasticEnum,
+-	SealevelriseHElasticEnum,
+-	SealevelriseTransitionsEnum,
+-	SealevelriseRequestedOutputsEnum,
+-	SealevelriseNumRequestedOutputsEnum,
+-	/*}}}*/
+-	/*Love Numbers{{{*/
+-	LoveNfreqEnum,
+-	LoveFrequenciesEnum,
+-	LoveShNmaxEnum,
+-	LoveShNminEnum,
+-	LoveG0Enum,
+-	LoveR0Enum,
+-	LoveMu0Enum,
+-	LoveAllowLayerDeletionEnum,
+-	LoveForcingTypeEnum,
+-	LoveHrEnum,
+-	LoveKrEnum,
+-	LoveLrEnum,
+-	LoveHiEnum,
+-	LoveKiEnum,
+-	LoveLiEnum,
+-	LoveKernelsEnum,
+-	LoveKernelsRealEnum,
+-	LoveKernelsImagEnum,
+-
+-	/*}}}*/
+-	/*Elastic adjustment (ESA){{{*/
+-	EsaUmotionEnum,
+-	EsaNmotionEnum,
+-	EsaEmotionEnum,
+-	EsaXmotionEnum,
+-	EsaYmotionEnum,
+-	EsaHemisphereEnum, 
+-	EsaStrainratexxEnum,
+-   EsaStrainratexyEnum,
+-   EsaStrainrateyyEnum,
+-   EsaRotationrateEnum,
+-	EsaDeltathicknessEnum,
+-	EsaUElasticEnum,
+-	EsaHElasticEnum,
+-	EsaTransitionsEnum,
+-	EsaRequestedOutputsEnum,
+-	EsaNumRequestedOutputsEnum,
+-	/*}}}*/
+-	/*Adaptive mesh refinement (AMR){{{*/
+-	TransientAmrFrequencyEnum,
+-	AmrTypeEnum,
+-	AmrRestartEnum,
+-	AmrNeopzEnum,
+-	AmrLevelMaxEnum,
+-	AmrLagEnum,
+-	AmrBamgEnum,
+-	AmrHminEnum,
+-	AmrHmaxEnum,
+-	AmrFieldEnum,
+-	AmrErrEnum,
+-	AmrKeepMetricEnum,
+-	AmrGradationEnum,
+-	AmrGroundingLineResolutionEnum,
+-	AmrGroundingLineDistanceEnum,
+-	AmrIceFrontResolutionEnum,
+-	AmrIceFrontDistanceEnum,
+-	AmrThicknessErrorResolutionEnum,
+-	AmrThicknessErrorThresholdEnum,
+-	AmrThicknessErrorGroupThresholdEnum,
+-	AmrThicknessErrorMaximumEnum,
+-	AmrDeviatoricErrorResolutionEnum,
+-	AmrDeviatoricErrorThresholdEnum,
+-	AmrDeviatoricErrorGroupThresholdEnum,
+-	AmrDeviatoricErrorMaximumEnum,
+-	DeviatoricStressErrorEstimatorEnum,
+-	ThicknessErrorEstimatorEnum,
+-	/*}}}*/
+-	ParametersENDEnum,
+-	/*Approximations {{{*/
+-	ApproximationEnum,
+-	NoneApproximationEnum,
+-	SIAApproximationEnum,
+-	SSAApproximationEnum,
+-	SSAHOApproximationEnum,
+-	SSAFSApproximationEnum,
+-	L1L2ApproximationEnum,
+-	HOApproximationEnum,
+-	HOFSApproximationEnum,
+-	FSApproximationEnum,
+-	FSvelocityEnum,
+-	FSpressureEnum,
+-	/*}}}*/
+-	InputsENDEnum,
+-	/*Coordinate Systems{{{*/
+-	XYEnum,
+-	XYZEnum,
+-	/*}}}*/
+-	/*Objects {{{*/
+-	GenericParamEnum,
+-	BoolInputEnum,
+-	BoolParamEnum,
+-	ContourEnum,
+-	ControlInputEnum,
+-	DatasetInputEnum,
+-	DoubleInputEnum,
+-	DoubleArrayInputEnum,
+-	DataSetParamEnum,
+-	DoubleMatArrayParamEnum,
+-	DoubleMatParamEnum,
+-	DoubleParamEnum,
+-	DoubleVecParamEnum,
+-	ElementEnum,
+-	ElementHookEnum,
+-	HookEnum,
+-	ExternalResultEnum,
+-	FileParamEnum,
+-	InputEnum,
+-	IntInputEnum,
+-	IntParamEnum,
+-	IntVecParamEnum,
+-	TransientParamEnum,
+-	TransientArrayParamEnum,
+-	MaticeEnum,
+-	MatlithoEnum,
+-	MatdamageiceEnum,
+-	MatenhancediceEnum,
+-	MatestarEnum,
+-	MatparEnum,
+-	NodeEnum,
+-	NumericalfluxEnum,
+-	NeumannfluxEnum,
+-	ParamEnum,
+-	MoulinEnum,
+-	PengridEnum,
+-	PenpairEnum,
+-	ProfilerEnum,
+-	MatrixParamEnum,
+-	MassconEnum,
+-	MassconaxpbyEnum,
+-	NodeSIdEnum,
+-	ElementSIdEnum,
+-	VectorParamEnum,
+-	RiftfrontEnum,
+-	SegmentEnum,
+-	SegmentRiftfrontEnum,
+-	SpcDynamicEnum,
+-	SpcStaticEnum,
+-	SpcTransientEnum,
+-	StringArrayParamEnum,
+-	StringParamEnum,
+-	SegEnum,
+-	SegInputEnum,
+-	TriaEnum,
+-	TriaInputEnum,
+-	TetraEnum,
+-	TetraInputEnum,
+-	PentaEnum,
+-	PentaInputEnum,
+-	VertexEnum,
+-	VertexPIdEnum,
+-	VertexSIdEnum,
+-	/*}}}*/
+-	/*Options{{{*/
+-	OptionEnum,
+-	GenericOptionEnum,
+-	/*}}}*/
+-	/*Solutions and Analyses{{{ */
+-	AdjointBalancethicknessAnalysisEnum,
+-	AdjointBalancethickness2AnalysisEnum,
+-	AdjointHorizAnalysisEnum,
+-	DefaultAnalysisEnum,
+-	BalancethicknessAnalysisEnum,
+-	BalancethicknessSolutionEnum,
+-	Balancethickness2AnalysisEnum,
+-	Balancethickness2SolutionEnum,
+-	BalancethicknessSoftAnalysisEnum,
+-	BalancethicknessSoftSolutionEnum,
+-	BalancevelocityAnalysisEnum,
+-	BalancevelocitySolutionEnum,
+-	L2ProjectionEPLAnalysisEnum,
+-	L2ProjectionBaseAnalysisEnum,
+-	BedSlopeSolutionEnum,
+-	DamageEvolutionSolutionEnum,
+-	DamageEvolutionAnalysisEnum,
+-	StressbalanceAnalysisEnum,
+-	StressbalanceSIAAnalysisEnum,
+-	StressbalanceSolutionEnum,
+-	StressbalanceVerticalAnalysisEnum,
+-	EnthalpyAnalysisEnum,
+-	HydrologyShreveAnalysisEnum,
+-	HydrologyDCInefficientAnalysisEnum,
+-	HydrologyDCEfficientAnalysisEnum,
+-	HydrologySommersAnalysisEnum,
+-	HydrologySolutionEnum,
+-	MeltingAnalysisEnum,
+-	MasstransportAnalysisEnum,
+-	MasstransportSolutionEnum,
+-	FreeSurfaceBaseAnalysisEnum,
+-	FreeSurfaceTopAnalysisEnum,
+-	ExtrudeFromBaseAnalysisEnum,
+-	ExtrudeFromTopAnalysisEnum,
+-	DepthAverageAnalysisEnum,
+-	SealevelriseSolutionEnum,
+-	SealevelriseAnalysisEnum,
+-	SteadystateSolutionEnum,
+-	SurfaceSlopeSolutionEnum,
+-	SmoothAnalysisEnum,
+-	ThermalAnalysisEnum,
+-	ThermalSolutionEnum,
+-	TransientSolutionEnum,
+-	UzawaPressureAnalysisEnum,
+-	GiaSolutionEnum,
+-	GiaIvinsAnalysisEnum,
+-	EsaSolutionEnum,
+-	EsaAnalysisEnum,
+-	LoveSolutionEnum,
+-	LoveAnalysisEnum,
+-	LevelsetAnalysisEnum,
+-	ExtrapolationAnalysisEnum,
+-	/*}}}*/
+-	/*Gauss{{{*/
+-	GaussSegEnum,
+-	GaussTriaEnum,
+-	GaussTetraEnum,
+-	GaussPentaEnum,
+-	/*}}}*/
+-	/*Interpolation {{{*/
++	StrainRateEnum,
++	StressbalanceViscosityOvershootEnum,
++	StressTensorEnum,
++	SubelementMigration4Enum,
++	TimesteppingTimeAdaptEnum,
+ 	TriangleInterpEnum,
+-	BilinearInterpEnum,
+-	NearestInterpEnum,
+ 	/*}}}*/
+-	/*Responses{{{*/
+-	MinVelEnum,
+-	MaxVelEnum,
+-	MinVxEnum,
+-	MaxVxEnum,
+-	MaxAbsVxEnum,
+-	MinVyEnum,
+-	MaxVyEnum,
+-	MaxAbsVyEnum,
+-	MinVzEnum,
+-	MaxVzEnum,
+-	MaxAbsVzEnum,
+-	FloatingAreaEnum,
+-	FloatingAreaScaledEnum,
+-	GroundedAreaEnum,
+-	GroundedAreaScaledEnum,
+-	IceMassEnum,
+-	IceMassScaledEnum,
+-	IceVolumeEnum,
+-	IceVolumeScaledEnum,
+-	IceVolumeAboveFloatationEnum,
+-	IceVolumeAboveFloatationScaledEnum,
+-	TotalFloatingBmbEnum,
+-	TotalFloatingBmbScaledEnum,
+-	TotalGroundedBmbEnum,
+-	TotalGroundedBmbScaledEnum,
+-	TotalSmbEnum,
+-	TotalSmbScaledEnum,
+-	/*}}}*/
+-	/*Element Interpolations{{{*/
+-	P0Enum,
+-	P0ArrayEnum,
+-	P1Enum,
+-	P1DGEnum,
+-	P1bubbleEnum,
+-	P1bubblecondensedEnum,
+-	P2Enum,
+-	P2bubbleEnum,
+-	P2bubblecondensedEnum,
+-	P2xP1Enum,
+-	P1xP2Enum,
+-	P1xP3Enum,
+-	P1xP4Enum,
+-	P2xP4Enum,
+-	P1P1Enum,
+-	P1P1GLSEnum,
+-	MINIEnum,
+-	MINIcondensedEnum,
+-	TaylorHoodEnum,
+-	LATaylorHoodEnum,
+-	XTaylorHoodEnum,
+-	OneLayerP4zEnum,
+-	CrouzeixRaviartEnum,
+-	LACrouzeixRaviartEnum,
+-	/*}}}*/
+-	/*Rift state {{{*/
+-	ClosedEnum,
+-	FreeEnum,
+-	OpenEnum,
+-	/*}}}*/
+-	/*Fill {{{*/
+-	AirEnum,
+-	IceEnum,
+-	MelangeEnum,
+-	WaterEnum,
+-	/*}}}*/
+-	/*Datasets {{{*/
+-	DataSetEnum,
+-	ConstraintsEnum,
+-	LoadsEnum,
+-	MaterialsEnum,
+-	NodesEnum,
+-	ContoursEnum,
+-	ParametersEnum,
+-	VerticesEnum,
+-	ResultsEnum,
+-	/*}}}*/
+ 	MaximumNumberOfDefinitionsEnum
+ };
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22595)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22596)
+@@ -16,642 +16,1005 @@
+ 
+ 	switch(en){
+ 
+-		case FemModelEnum : return "FemModel";
+ 		case ParametersSTARTEnum : return "ParametersSTART";
+ 		case AdolcParamEnum : return "AdolcParam";
+-		case FSSolverEnum : return "FSSolver";
+-		case FemModelCommEnum : return "FemModelComm";
+-		case WorldCommEnum : return "WorldComm";
+-		case IcecapToEarthCommEnum : return "IcecapToEarthComm";
+-		case ToMITgcmCommEnum : return "ToMITgcmComm";
+-		case NumModelsEnum : return "NumModels";
+-		case ModelIdEnum : return "ModelId";
+-		case EarthIdEnum : return "EarthId";
+-		case SolutionTypeEnum : return "SolutionType";
++		case AmrDeviatoricErrorGroupThresholdEnum : return "AmrDeviatoricErrorGroupThreshold";
++		case AmrDeviatoricErrorMaximumEnum : return "AmrDeviatoricErrorMaximum";
++		case AmrDeviatoricErrorResolutionEnum : return "AmrDeviatoricErrorResolution";
++		case AmrDeviatoricErrorThresholdEnum : return "AmrDeviatoricErrorThreshold";
++		case AmrErrEnum : return "AmrErr";
++		case AmrFieldEnum : return "AmrField";
++		case AmrGradationEnum : return "AmrGradation";
++		case AmrGroundingLineDistanceEnum : return "AmrGroundingLineDistance";
++		case AmrGroundingLineResolutionEnum : return "AmrGroundingLineResolution";
++		case AmrHmaxEnum : return "AmrHmax";
++		case AmrHminEnum : return "AmrHmin";
++		case AmrIceFrontDistanceEnum : return "AmrIceFrontDistance";
++		case AmrIceFrontResolutionEnum : return "AmrIceFrontResolution";
++		case AmrKeepMetricEnum : return "AmrKeepMetric";
++		case AmrLagEnum : return "AmrLag";
++		case AmrLevelMaxEnum : return "AmrLevelMax";
++		case AmrRestartEnum : return "AmrRestart";
++		case AmrThicknessErrorGroupThresholdEnum : return "AmrThicknessErrorGroupThreshold";
++		case AmrThicknessErrorMaximumEnum : return "AmrThicknessErrorMaximum";
++		case AmrThicknessErrorResolutionEnum : return "AmrThicknessErrorResolution";
++		case AmrThicknessErrorThresholdEnum : return "AmrThicknessErrorThreshold";
++		case AmrTypeEnum : return "AmrType";
++		case AnalysisCounterEnum : return "AnalysisCounter";
+ 		case AnalysisTypeEnum : return "AnalysisType";
+-		case AnalysisCounterEnum : return "AnalysisCounter";
+-		case ConfigurationTypeEnum : return "ConfigurationType";
+-		case InputToExtrudeEnum : return "InputToExtrude";
+-		case InputToL2ProjectEnum : return "InputToL2Project";
+-		case InputToDepthaverageInEnum : return "InputToDepthaverageIn";
+-		case InputToDepthaverageOutEnum : return "InputToDepthaverageOut";
+-		case InputToSmoothEnum : return "InputToSmooth";
+-		case SmoothThicknessMultiplierEnum : return "SmoothThicknessMultiplier";
+-		case LevelsetStabilizationEnum : return "LevelsetStabilization";
+-		case TimesteppingTypeEnum : return "TimesteppingType";
+-		case FixedTimesteppingEnum : return "FixedTimestepping";
+-		case AdaptiveTimesteppingEnum : return "AdaptiveTimestepping";
+-		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
+-		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
+-		case InputsSTARTEnum : return "InputsSTART";
+-		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+-		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
++		case AugmentedLagrangianREnum : return "AugmentedLagrangianR";
++		case AugmentedLagrangianRholambdaEnum : return "AugmentedLagrangianRholambda";
++		case AugmentedLagrangianRhopEnum : return "AugmentedLagrangianRhop";
++		case AugmentedLagrangianRlambdaEnum : return "AugmentedLagrangianRlambda";
++		case AugmentedLagrangianThetaEnum : return "AugmentedLagrangianTheta";
++		case AutodiffCbufsizeEnum : return "AutodiffCbufsize";
+ 		case AutodiffDependentObjectsEnum : return "AutodiffDependentObjects";
+-		case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
+-		case AutodiffJacobianEnum : return "AutodiffJacobian";
+-		case AutodiffXpEnum : return "AutodiffXp";
+ 		case AutodiffDriverEnum : return "AutodiffDriver";
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
++		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
+-		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+-		case AutodiffKeepEnum : return "AutodiffKeep";
++		case AutodiffGcTriggerMaxSizeEnum : return "AutodiffGcTriggerMaxSize";
++		case AutodiffGcTriggerRatioEnum : return "AutodiffGcTriggerRatio";
++		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
++		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
++		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
++		case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
+ 		case AutodiffObufsizeEnum : return "AutodiffObufsize";
+-		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
+-		case AutodiffCbufsizeEnum : return "AutodiffCbufsize";
+ 		case AutodiffTbufsizeEnum : return "AutodiffTbufsize";
+-		case AutodiffGcTriggerRatioEnum : return "AutodiffGcTriggerRatio";
+-		case AutodiffGcTriggerMaxSizeEnum : return "AutodiffGcTriggerMaxSize";
++		case AutodiffXpEnum : return "AutodiffXp";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+-		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
++		case BasalforcingsBottomplumedepthEnum : return "BasalforcingsBottomplumedepth";
++		case BasalforcingsCrustthicknessEnum : return "BasalforcingsCrustthickness";
++		case BasalforcingsDeepwaterElevationEnum : return "BasalforcingsDeepwaterElevation";
++		case BasalforcingsDeepwaterMeltingRateEnum : return "BasalforcingsDeepwaterMeltingRate";
++		case BasalforcingsDtbgEnum : return "BasalforcingsDtbg";
+ 		case BasalforcingsEnum : return "Basalforcings";
+-		case BasalforcingsGeothermalfluxEnum : return "BasalforcingsGeothermalflux";
+-		case BasalforcingsGroundediceMeltingRateEnum : return "BasalforcingsGroundediceMeltingRate";
+-		case BasalforcingsFloatingiceMeltingRateEnum : return "BasalforcingsFloatingiceMeltingRate";
+-		case BasalforcingsDeepwaterMeltingRateEnum : return "BasalforcingsDeepwaterMeltingRate";
+-		case BasalforcingsDeepwaterElevationEnum : return "BasalforcingsDeepwaterElevation";
+-		case BasalforcingsUpperwaterElevationEnum : return "BasalforcingsUpperwaterElevation";
++		case BasalforcingsLowercrustheatEnum : return "BasalforcingsLowercrustheat";
++		case BasalforcingsMantleconductivityEnum : return "BasalforcingsMantleconductivity";
+ 		case BasalforcingsMeltrateFactorEnum : return "BasalforcingsMeltrateFactor";
+-		case BasalforcingsThresholdThicknessEnum : return "BasalforcingsThresholdThickness";
+-		case BasalforcingsUpperdepthMeltEnum : return "BasalforcingsUpperdepthMelt";
+-		case BasalforcingsMantleconductivityEnum : return "BasalforcingsMantleconductivity";
+ 		case BasalforcingsNusseltEnum : return "BasalforcingsNusselt";
+-		case BasalforcingsDtbgEnum : return "BasalforcingsDtbg";
++		case BasalforcingsPicoFarOceansalinityEnum : return "BasalforcingsPicoFarOceansalinity";
++		case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT";
++		case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins";
++		case BasalforcingsPicoOverturningCoeffEnum : return "BasalforcingsPicoOverturningCoeff";
+ 		case BasalforcingsPlumeradiusEnum : return "BasalforcingsPlumeradius";
+-		case BasalforcingsTopplumedepthEnum : return "BasalforcingsTopplumedepth";
+-		case BasalforcingsBottomplumedepthEnum : return "BasalforcingsBottomplumedepth";
+ 		case BasalforcingsPlumexEnum : return "BasalforcingsPlumex";
+ 		case BasalforcingsPlumeyEnum : return "BasalforcingsPlumey";
+-		case BasalforcingsCrustthicknessEnum : return "BasalforcingsCrustthickness";
++		case BasalforcingsThresholdThicknessEnum : return "BasalforcingsThresholdThickness";
++		case BasalforcingsTopplumedepthEnum : return "BasalforcingsTopplumedepth";
++		case BasalforcingsUppercrustheatEnum : return "BasalforcingsUppercrustheat";
+ 		case BasalforcingsUppercrustthicknessEnum : return "BasalforcingsUppercrustthickness";
+-		case BasalforcingsUppercrustheatEnum : return "BasalforcingsUppercrustheat";
+-		case BasalforcingsLowercrustheatEnum : return "BasalforcingsLowercrustheat";
+-		case FloatingMeltRateEnum : return "FloatingMeltRate";
+-		case LinearFloatingMeltRateEnum : return "LinearFloatingMeltRate";
+-		case MismipFloatingMeltRateEnum : return "MismipFloatingMeltRate";
+-		case MantlePlumeGeothermalFluxEnum : return "MantlePlumeGeothermalFlux";
+-		case BasalforcingsPicoEnum : return "BasalforcingsPico";
+-		case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins";
+-		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
+-		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
+-		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
+-		case BasalforcingsPicoOverturningCoeffEnum : return "BasalforcingsPicoOverturningCoeff";
+-		case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT";
+-		case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature";
+-		case BasalforcingsPicoFarOceansalinityEnum : return "BasalforcingsPicoFarOceansalinity";
+-		case DistanceToGroundinglineEnum : return "DistanceToGroundingline";
+-		case DistanceToCalvingfrontEnum : return "DistanceToCalvingfront";
+-		case BedEnum : return "Bed";
+-		case BaseEnum : return "Base";
+-		case ConstantsGEnum : return "ConstantsG";
+-		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
++		case BasalforcingsUpperdepthMeltEnum : return "BasalforcingsUpperdepthMelt";
++		case BasalforcingsUpperwaterElevationEnum : return "BasalforcingsUpperwaterElevation";
++		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
++		case CalvingHeightAboveFloatationEnum : return "CalvingHeightAboveFloatation";
++		case CalvingLawEnum : return "CalvingLaw";
++		case CalvingMaxEnum : return "CalvingMax";
++		case CalvingMinthicknessEnum : return "CalvingMinthickness";
++		case ConfigurationTypeEnum : return "ConfigurationType";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
+-		case DependentObjectEnum : return "DependentObject";
+-		case StressbalanceAbstolEnum : return "StressbalanceAbstol";
+-		case StressbalanceConvergenceNumStepsEnum : return "StressbalanceConvergenceNumSteps";
+-		case StressbalanceIsnewtonEnum : return "StressbalanceIsnewton";
+-		case StressbalanceMaxiterEnum : return "StressbalanceMaxiter";
+-		case StressbalancePenaltyFactorEnum : return "StressbalancePenaltyFactor";
+-		case StressbalanceReltolEnum : return "StressbalanceReltol";
+-		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
+-		case StressbalanceRequestedOutputsEnum : return "StressbalanceRequestedOutputs";
+-		case StressbalanceRestolEnum : return "StressbalanceRestol";
+-		case StressbalanceRiftPenaltyThresholdEnum : return "StressbalanceRiftPenaltyThreshold";
+-		case StressbalanceShelfDampeningEnum : return "StressbalanceShelfDampening";
+-		case StressbalanceFSreconditioningEnum : return "StressbalanceFSreconditioning";
+-		case StressbalanceViscosityOvershootEnum : return "StressbalanceViscosityOvershoot";
+-		case LoadingforceXEnum : return "LoadingforceX";
+-		case LoadingforceYEnum : return "LoadingforceY";
+-		case LoadingforceZEnum : return "LoadingforceZ";
++		case DamageC1Enum : return "DamageC1";
++		case DamageC2Enum : return "DamageC2";
++		case DamageC3Enum : return "DamageC3";
++		case DamageEnum : return "Damage";
++		case DamageEquivStressEnum : return "DamageEquivStress";
++		case DamageEvolutionNumRequestedOutputsEnum : return "DamageEvolutionNumRequestedOutputs";
++		case DamageEvolutionRequestedOutputsEnum : return "DamageEvolutionRequestedOutputs";
++		case DamageHealingEnum : return "DamageHealing";
++		case DamageKappaEnum : return "DamageKappa";
++		case DamageLawEnum : return "DamageLaw";
++		case DamageMaxDamageEnum : return "DamageMaxDamage";
++		case DamageStabilizationEnum : return "DamageStabilization";
++		case DamageStressThresholdEnum : return "DamageStressThreshold";
++		case DebugProfilingEnum : return "DebugProfiling";
++		case DomainDimensionEnum : return "DomainDimension";
++		case DomainTypeEnum : return "DomainType";
++		case EarthIdEnum : return "EarthId";
++		case EplZigZagCounterEnum : return "EplZigZagCounter";
++		case EsaHElasticEnum : return "EsaHElastic";
++		case EsaHemisphereEnum : return "EsaHemisphere";
++		case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
++		case EsaUElasticEnum : return "EsaUElastic";
++		case ExtrapolationVariableEnum : return "ExtrapolationVariable";
++		case FlowequationFeFSEnum : return "FlowequationFeFS";
++		case FlowequationIsFSEnum : return "FlowequationIsFS";
++		case FlowequationIsHOEnum : return "FlowequationIsHO";
++		case FlowequationIsL1L2Enum : return "FlowequationIsL1L2";
+ 		case FlowequationIsSIAEnum : return "FlowequationIsSIA";
+ 		case FlowequationIsSSAEnum : return "FlowequationIsSSA";
+-		case FlowequationIsL1L2Enum : return "FlowequationIsL1L2";
+-		case FlowequationIsHOEnum : return "FlowequationIsHO";
+-		case FlowequationIsFSEnum : return "FlowequationIsFS";
+-		case FlowequationFeFSEnum : return "FlowequationFeFS";
+-		case FlowequationBorderFSEnum : return "FlowequationBorderFS";
+-		case FrictionAsEnum : return "FrictionAs";
+-		case FrictionCoefficientEnum : return "FrictionCoefficient";
+-		case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb";
+-		case FrictionPressureAdjustedTemperatureEnum : return "FrictionPressureAdjustedTemperature";
+-		case FrictionPEnum : return "FrictionP";
+-		case FrictionQEnum : return "FrictionQ";
+-		case FrictionMEnum : return "FrictionM";
+-		case FrictionCEnum : return "FrictionC";
++		case FrictionCouplingEnum : return "FrictionCoupling";
++		case FrictionFEnum : return "FrictionF";
++		case FrictionGammaEnum : return "FrictionGamma";
+ 		case FrictionLawEnum : return "FrictionLaw";
+-		case FrictionGammaEnum : return "FrictionGamma";
+-		case FrictionFEnum : return "FrictionF";
+-		case FrictionWaterLayerEnum : return "FrictionWaterLayer";
+-		case FrictionEffectivePressureEnum : return "FrictionEffectivePressure";
+-		case FrictionCouplingEnum : return "FrictionCoupling";
+-		case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
+-		case HydrologyModelEnum : return "HydrologyModel";
+-		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
+-		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+-		case HydrologyshreveEnum : return "Hydrologyshreve";
+-		case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization";
+-		case HydrologydcEnum : return "Hydrologydc";
+-		case HydrologydtEnum : return "Hydrologydt";
+-		case HydrologyStepsPerStepEnum : return "HydrologyStepsPerStep";
+-		case SedimentHeadEnum : return "SedimentHead";
+-		case SedimentHeadOldEnum : return "SedimentHeadOld";
+-		case SedimentHeadStackedEnum : return "SedimentHeadStacked";
+-		case SedimentHeadTimeAverageEnum : return "SedimentHeadTimeAverage";
+-		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
+-		case EffectivePressureEnum : return "EffectivePressure";
+-		case EffectivePressureStackedEnum : return "EffectivePressureStacked";
+-		case EffectivePressureTimeAverageEnum : return "EffectivePressureTimeAverage";
+-		case EplHeadEnum : return "EplHead";
+-		case EplHeadOldEnum : return "EplHeadOld";
+-		case EplHeadStackedEnum : return "EplHeadStacked";
+-		case EplHeadTimeAverageEnum : return "EplHeadTimeAverage";
+-		case EplHeadSlopeXEnum : return "EplHeadSlopeX";
+-		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
+-		case EplZigZagCounterEnum : return "EplZigZagCounter";
++		case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
++		case GroundinglineMigrationEnum : return "GroundinglineMigration";
++		case HydrologydcEplflipLockEnum : return "HydrologydcEplflipLock";
++		case HydrologydcEplThickCompEnum : return "HydrologydcEplThickComp";
++		case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer";
++		case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor";
+ 		case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
++		case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor";
++		case HydrologydcPenaltyLockEnum : return "HydrologydcPenaltyLock";
+ 		case HydrologydcRelTolEnum : return "HydrologydcRelTol";
+-		case HydrologydcSedimentCompressibilityEnum : return "HydrologydcSedimentCompressibility";
+-		case HydrologydcSedimentPorosityEnum : return "HydrologydcSedimentPorosity";
+-		case HydrologydcSedimentThicknessEnum : return "HydrologydcSedimentThickness";
+-		case HydrologydcSedimentTransmitivityEnum : return "HydrologydcSedimentTransmitivity";
+-		case HydrologydcWaterCompressibilityEnum : return "HydrologydcWaterCompressibility";
+-		case HydrologydcMaskEplactiveNodeEnum : return "HydrologydcMaskEplactiveNode";
+-		case HydrologydcMaskEplactiveEltEnum : return "HydrologydcMaskEplactiveElt";
+-		case HydrologydcEplCompressibilityEnum : return "HydrologydcEplCompressibility";
+-		case HydrologydcEplPorosityEnum : return "HydrologydcEplPorosity";
+-		case HydrologydcEplInitialThicknessEnum : return "HydrologydcEplInitialThickness";
+-		case HydrologydcEplColapseThicknessEnum : return "HydrologydcEplColapseThickness";
+-		case HydrologydcEplMaxThicknessEnum : return "HydrologydcEplMaxThickness";
+-		case HydrologydcEplThicknessEnum : return "HydrologydcEplThickness";
+-		case HydrologydcEplThicknessOldEnum : return "HydrologydcEplThicknessOld";
+-		case HydrologydcEplThicknessStackedEnum : return "HydrologydcEplThicknessStacked";
+-		case HydrologydcEplThicknessTimeAverageEnum : return "HydrologydcEplThicknessTimeAverage";
+-		case HydrologydcEplThickCompEnum : return "HydrologydcEplThickComp";
+-		case HydrologydcEplConductivityEnum : return "HydrologydcEplConductivity";
+-		case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer";
++		case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit";
+ 		case HydrologydcSedimentlimitFlagEnum : return "HydrologydcSedimentlimitFlag";
+-		case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit";
+ 		case HydrologydcTransferFlagEnum : return "HydrologydcTransferFlag";
+ 		case HydrologydcUnconfinedFlagEnum : return "HydrologydcUnconfinedFlag";
+-		case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor";
+-		case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor";
+-		case HydrologydcPenaltyLockEnum : return "HydrologydcPenaltyLock";
+-		case HydrologydcEplflipLockEnum : return "HydrologydcEplflipLock";
+-		case HydrologydcBasalMoulinInputEnum : return "HydrologydcBasalMoulinInput";
++		case HydrologydtEnum : return "Hydrologydt";
++		case HydrologyModelEnum : return "HydrologyModel";
++		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
++		case HydrologyRelaxationEnum : return "HydrologyRelaxation";
++		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+ 		case HydrologySedimentKmaxEnum : return "HydrologySedimentKmax";
+-		case HydrologysommersEnum : return "Hydrologysommers";
+-		case HydrologyHeadEnum : return "HydrologyHead";
+-		case HydrologyHeadOldEnum : return "HydrologyHeadOld";
+-		case HydrologyGapHeightEnum : return "HydrologyGapHeight";
+-		case HydrologyBumpSpacingEnum : return "HydrologyBumpSpacing";
+-		case HydrologyBumpHeightEnum : return "HydrologyBumpHeight";
+-		case HydrologyEnglacialInputEnum : return "HydrologyEnglacialInput";
+-		case HydrologyMoulinInputEnum : return "HydrologyMoulinInput";
+-		case HydrologyReynoldsEnum : return "HydrologyReynolds";
+-		case HydrologyNeumannfluxEnum : return "HydrologyNeumannflux";
+-		case HydrologyRelaxationEnum : return "HydrologyRelaxation";
+-		case HydrologyBasalFluxEnum : return "HydrologyBasalFlux";
++		case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization";
++		case HydrologyStepsPerStepEnum : return "HydrologyStepsPerStep";
+ 		case HydrologyStorageEnum : return "HydrologyStorage";
+-		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
++		case IcecapToEarthCommEnum : return "IcecapToEarthComm";
++		case IndexEnum : return "Index";
++		case InputFileNameEnum : return "InputFileName";
++		case InputToDepthaverageInEnum : return "InputToDepthaverageIn";
++		case InputToDepthaverageOutEnum : return "InputToDepthaverageOut";
++		case InputToExtrudeEnum : return "InputToExtrude";
++		case InputToL2ProjectEnum : return "InputToL2Project";
++		case InputToSmoothEnum : return "InputToSmooth";
++		case InversionAlgorithmEnum : return "InversionAlgorithm";
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
+-		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+-		case InversionCostFunctionsCoefficientsEnum : return "InversionCostFunctionsCoefficients";
+ 		case InversionCostFunctionsEnum : return "InversionCostFunctions";
++		case InversionDxminEnum : return "InversionDxmin";
++		case InversionGatolEnum : return "InversionGatol";
+ 		case InversionGradientScalingEnum : return "InversionGradientScaling";
++		case InversionGrtolEnum : return "InversionGrtol";
++		case InversionGttolEnum : return "InversionGttol";
++		case InversionIncompleteAdjointEnum : return "InversionIncompleteAdjoint";
+ 		case InversionIscontrolEnum : return "InversionIscontrol";
+-		case InversionTypeEnum : return "InversionType";
+-		case InversionIncompleteAdjointEnum : return "InversionIncompleteAdjoint";
++		case InversionMaxiterEnum : return "InversionMaxiter";
+ 		case InversionMaxiterPerStepEnum : return "InversionMaxiterPerStep";
+-		case InversionMaxiterEnum : return "InversionMaxiter";
+ 		case InversionMaxstepsEnum : return "InversionMaxsteps";
+-		case InversionFatolEnum : return "InversionFatol";
+-		case InversionFrtolEnum : return "InversionFrtol";
+-		case InversionGatolEnum : return "InversionGatol";
+-		case InversionGrtolEnum : return "InversionGrtol";
+-		case InversionGttolEnum : return "InversionGttol";
+-		case InversionAlgorithmEnum : return "InversionAlgorithm";
+ 		case InversionNstepsEnum : return "InversionNsteps";
+-		case InversionDxminEnum : return "InversionDxmin";
+ 		case InversionNumControlParametersEnum : return "InversionNumControlParameters";
+ 		case InversionNumCostFunctionsEnum : return "InversionNumCostFunctions";
+ 		case InversionStepThresholdEnum : return "InversionStepThreshold";
+-		case InversionThicknessObsEnum : return "InversionThicknessObs";
+-		case InversionSurfaceObsEnum : return "InversionSurfaceObs";
+-		case InversionVxObsEnum : return "InversionVxObs";
+-		case InversionVyObsEnum : return "InversionVyObs";
+-		case InversionVzObsEnum : return "InversionVzObs";
+-		case InversionVelObsEnum : return "InversionVelObs";
+-		case MaskIceLevelsetEnum : return "MaskIceLevelset";
+-		case MaskOceanLevelsetEnum : return "MaskOceanLevelset";
+-		case MaskLandLevelsetEnum : return "MaskLandLevelset";
+-		case MaterialsBetaEnum : return "MaterialsBeta";
+-		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+-		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
+-		case MaterialsMeltingpointEnum : return "MaterialsMeltingpoint";
+-		case MaterialsMixedLayerCapacityEnum : return "MaterialsMixedLayerCapacity";
+-		case MaterialsRheologyBEnum : return "MaterialsRheologyB";
+-		case MaterialsRheologyBbarEnum : return "MaterialsRheologyBbar";
+-		case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw";
+-		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+-		case MaterialsRheologyEEnum : return "MaterialsRheologyE";
+-		case MaterialsRheologyEbarEnum : return "MaterialsRheologyEbar";
+-		case MaterialsRheologyEcEnum : return "MaterialsRheologyEc";
+-		case MaterialsRheologyEcbarEnum : return "MaterialsRheologyEcbar";
+-		case MaterialsRheologyEsEnum : return "MaterialsRheologyEs";
+-		case MaterialsRheologyEsbarEnum : return "MaterialsRheologyEsbar";
+-		case DamageDEnum : return "DamageD";
+-		case DamageFEnum : return "DamageF";
+-		case DamageDbarEnum : return "DamageDbar";
+-		case DamageLawEnum : return "DamageLaw";
+-		case DamageC1Enum : return "DamageC1";
+-		case DamageC2Enum : return "DamageC2";
+-		case DamageC3Enum : return "DamageC3";
+-		case DamageC4Enum : return "DamageC4";
+-		case DamageElementinterpEnum : return "DamageElementinterp";
+-		case DamageHealingEnum : return "DamageHealing";
+-		case DamageStressThresholdEnum : return "DamageStressThreshold";
+-		case DamageKappaEnum : return "DamageKappa";
+-		case DamageStabilizationEnum : return "DamageStabilization";
+-		case DamageMaxiterEnum : return "DamageMaxiter";
+-		case DamageMaxDamageEnum : return "DamageMaxDamage";
+-		case DamageEquivStressEnum : return "DamageEquivStress";
+-		case DamageEvolutionNumRequestedOutputsEnum : return "DamageEvolutionNumRequestedOutputs";
+-		case DamageEvolutionRequestedOutputsEnum : return "DamageEvolutionRequestedOutputs";
+-		case DamageEnum : return "Damage";
+-		case NewDamageEnum : return "NewDamage";
+-		case StressIntensityFactorEnum : return "StressIntensityFactor";
+-		case CalvingLawEnum : return "CalvingLaw";
+-		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
+-		case CalvingMeltingrateEnum : return "CalvingMeltingrate";
+-		case CalvingHeightAboveFloatationEnum : return "CalvingHeightAboveFloatation";
+-		case CalvingLevermannEnum : return "CalvingLevermann";
+-		case CalvingVonmisesEnum : return "CalvingVonmises";
+-		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+-		case CalvingHabEnum : return "CalvingHab";
+-		case CalvingHabFractionEnum : return "CalvingHabFraction";
+-		case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth";
+-		case CalvingDev2Enum : return "CalvingDev2";
+-		case SurfaceCrevasseEnum : return "SurfaceCrevasse";
+-		case BasalCrevasseEnum : return "BasalCrevasse";
+-		case CrevasseDepthEnum : return "CrevasseDepth";
+-		case WaterheightEnum : return "Waterheight";
+-		case DefaultCalvingEnum : return "DefaultCalving";
+-		case CalvinglevermannCoeffEnum : return "CalvinglevermannCoeff";
+-		case CalvinglevermannMeltingrateEnum : return "CalvinglevermannMeltingrate";
+-		case CalvingdevCoeffEnum : return "CalvingdevCoeff";
+-		case CalvingratexEnum : return "Calvingratex";
+-		case CalvingrateyEnum : return "Calvingratey";
+-		case CalvingratexAverageEnum : return "CalvingratexAverage";
+-		case CalvingrateyAverageEnum : return "CalvingrateyAverage";
+-		case CalvingStressThresholdGroundediceEnum : return "CalvingStressThresholdGroundedice";
+-		case CalvingStressThresholdFloatingiceEnum : return "CalvingStressThresholdFloatingice";
+-		case CalvingMaxEnum : return "CalvingMax";
+-		case SigmaVMEnum : return "SigmaVM";
+-		case StrainRateparallelEnum : return "StrainRateparallel";
+-		case StrainRateperpendicularEnum : return "StrainRateperpendicular";
+-		case StrainRateeffectiveEnum : return "StrainRateeffective";
+-		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+-		case MaterialsRhoSeawaterEnum : return "MaterialsRhoSeawater";
+-		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+-		case MaterialsMuWaterEnum : return "MaterialsMuWater";
+-		case MaterialsThermalExchangeVelocityEnum : return "MaterialsThermalExchangeVelocity";
+-		case MaterialsThermalconductivityEnum : return "MaterialsThermalconductivity";
+-		case MaterialsTemperateiceconductivityEnum : return "MaterialsTemperateiceconductivity";
+-		case MaterialsLithosphereShearModulusEnum : return "MaterialsLithosphereShearModulus";
+-		case MaterialsLithosphereDensityEnum : return "MaterialsLithosphereDensity";
+-		case MaterialsMantleShearModulusEnum : return "MaterialsMantleShearModulus";
+-		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
+-		case MaterialsEarthDensityEnum : return "MaterialsEarthDensity";
+-		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+-		case MeshLatEnum : return "MeshLat";
+-		case MeshLongEnum : return "MeshLong";
+-		case MeshXEnum : return "MeshX";
+-		case MeshYEnum : return "MeshY";
+-		case MeshZEnum : return "MeshZ";
+-		case MeshScaleFactorEnum : return "MeshScaleFactor";
+-		case MeshElementsEnum : return "MeshElements";
+-		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+-		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
+-		case MeshNumberofverticesEnum : return "MeshNumberofvertices";
+-		case MeshVertexonbaseEnum : return "MeshVertexonbase";
+-		case MeshVertexonsurfaceEnum : return "MeshVertexonsurface";
+-		case MeshVertexonboundaryEnum : return "MeshVertexonboundary";
+-		case MeshElementtypeEnum : return "MeshElementtype";
+-		case DomainTypeEnum : return "DomainType";
+-		case DomainDimensionEnum : return "DomainDimension";
+-		case Domain2DhorizontalEnum : return "Domain2Dhorizontal";
+-		case Domain2DverticalEnum : return "Domain2Dvertical";
+-		case Domain3DEnum : return "Domain3D";
+-		case Domain3DsurfaceEnum : return "Domain3Dsurface";
++		case InversionTypeEnum : return "InversionType";
++		case LevelsetReinitFrequencyEnum : return "LevelsetReinitFrequency";
++		case LevelsetStabilizationEnum : return "LevelsetStabilization";
++		case LockFileNameEnum : return "LockFileName";
++		case LoveAllowLayerDeletionEnum : return "LoveAllowLayerDeletion";
++		case LoveForcingTypeEnum : return "LoveForcingType";
++		case LoveFrequenciesEnum : return "LoveFrequencies";
++		case LoveG0Enum : return "LoveG0";
++		case LoveKernelsEnum : return "LoveKernels";
++		case LoveMu0Enum : return "LoveMu0";
++		case LoveNfreqEnum : return "LoveNfreq";
++		case LoveR0Enum : return "LoveR0";
++		case LoveShNmaxEnum : return "LoveShNmax";
++		case LoveShNminEnum : return "LoveShNmin";
++		case MassFluxSegmentsEnum : return "MassFluxSegments";
++		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+ 		case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
+ 		case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface";
+ 		case MasstransportMinThicknessEnum : return "MasstransportMinThickness";
++		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
+ 		case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor";
+-		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
++		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
+ 		case MasstransportStabilizationEnum : return "MasstransportStabilization";
+-		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
+-		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
++		case MeltingOffsetEnum : return "MeltingOffset";
++		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
++		case MeshElementtypeEnum : return "MeshElementtype";
++		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
++		case MeshNumberofverticesEnum : return "MeshNumberofvertices";
++		case ModelIdEnum : return "ModelId";
++		case NodesEnum : return "Nodes";
++		case NumModelsEnum : return "NumModels";
++		case OutputBufferPointerEnum : return "OutputBufferPointer";
++		case OutputBufferSizePointerEnum : return "OutputBufferSizePointer";
++		case OutputdefinitionEnum : return "Outputdefinition";
++		case OutputFileNameEnum : return "OutputFileName";
++		case OutputFilePointerEnum : return "OutputFilePointer";
++		case ParamEnum : return "Param";
++		case ParametersEnum : return "Parameters";
++		case QmuErrNameEnum : return "QmuErrName";
++		case QmuInNameEnum : return "QmuInName";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+-		case MassFluxSegmentsEnum : return "MassFluxSegments";
+-		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+-		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
++		case QmuOutNameEnum : return "QmuOutName";
+ 		case QmuPartitionEnum : return "QmuPartition";
+ 		case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors";
+-		case QmuVariabledescriptorsEnum : return "QmuVariabledescriptors";
+-		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
++		case RestartFileNameEnum : return "RestartFileName";
++		case ResultsEnum : return "Results";
++		case RootPathEnum : return "RootPath";
++		case SaveResultsEnum : return "SaveResults";
++		case SealevelriseAbstolEnum : return "SealevelriseAbstol";
++		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
++		case SealevelriseElasticEnum : return "SealevelriseElastic";
++		case SealevelriseEquatorialMoiEnum : return "SealevelriseEquatorialMoi";
++		case SealevelriseFluidLoveEnum : return "SealevelriseFluidLove";
++		case SealevelriseGElasticEnum : return "SealevelriseGElastic";
++		case SealevelriseHElasticEnum : return "SealevelriseHElastic";
++		case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
++		case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
++		case SealevelrisePolarMoiEnum : return "SealevelrisePolarMoi";
++		case SealevelriseReltolEnum : return "SealevelriseReltol";
++		case SealevelriseRequestedOutputsEnum : return "SealevelriseRequestedOutputs";
++		case SealevelriseRigidEnum : return "SealevelriseRigid";
++		case SealevelriseRotationEnum : return "SealevelriseRotation";
++		case SealevelriseTidalLoveHEnum : return "SealevelriseTidalLoveH";
++		case SealevelriseTidalLoveKEnum : return "SealevelriseTidalLoveK";
++		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
++		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
+ 		case SettingsIoGatherEnum : return "SettingsIoGather";
+-		case SettingsLowmemEnum : return "SettingsLowmem";
+ 		case SettingsOutputFrequencyEnum : return "SettingsOutputFrequency";
+ 		case SettingsRecordingFrequencyEnum : return "SettingsRecordingFrequency";
++		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
++		case SettingsSolverResidueThresholdEnum : return "SettingsSolverResidueThreshold";
+ 		case SettingsWaitonlockEnum : return "SettingsWaitonlock";
+-		case SettingsSolverResidueThresholdEnum : return "SettingsSolverResidueThreshold";
+-		case DebugProfilingEnum : return "DebugProfiling";
+-		case ProfilingCurrentMemEnum : return "ProfilingCurrentMem";
+-		case ProfilingCurrentFlopsEnum : return "ProfilingCurrentFlops";
+-		case ProfilingSolutionTimeEnum : return "ProfilingSolutionTime";
++		case SmbAdThreshEnum : return "SmbAdThresh";
++		case SmbAIceEnum : return "SmbAIce";
++		case SmbAIdxEnum : return "SmbAIdx";
++		case SmbASnowEnum : return "SmbASnow";
++		case SmbCldFracEnum : return "SmbCldFrac";
++		case SmbDelta18oEnum : return "SmbDelta18o";
++		case SmbDelta18oSurfaceEnum : return "SmbDelta18oSurface";
++		case SmbDenIdxEnum : return "SmbDenIdx";
++		case SmbDtEnum : return "SmbDt";
++		case SmbEnum : return "Smb";
++		case SmbFEnum : return "SmbF";
++		case SmbInitDensityScalingEnum : return "SmbInitDensityScaling";
++		case SmbIsaccumulationEnum : return "SmbIsaccumulation";
++		case SmbIsalbedoEnum : return "SmbIsalbedo";
++		case SmbIsd18opdEnum : return "SmbIsd18opd";
++		case SmbIsdelta18oEnum : return "SmbIsdelta18o";
++		case SmbIsdensificationEnum : return "SmbIsdensification";
++		case SmbIsgraingrowthEnum : return "SmbIsgraingrowth";
++		case SmbIsmeltEnum : return "SmbIsmelt";
++		case SmbIsmungsmEnum : return "SmbIsmungsm";
++		case SmbIssetpddfacEnum : return "SmbIssetpddfac";
++		case SmbIsshortwaveEnum : return "SmbIsshortwave";
++		case SmbIstemperaturescaledEnum : return "SmbIstemperaturescaled";
++		case SmbIsthermalEnum : return "SmbIsthermal";
++		case SmbIsturbulentfluxEnum : return "SmbIsturbulentflux";
++		case SmbKEnum : return "SmbK";
++		case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs";
++		case SmbPfacEnum : return "SmbPfac";
++		case SmbRequestedOutputsEnum : return "SmbRequestedOutputs";
++		case SmbSealevEnum : return "SmbSealev";
++		case SmbSwIdxEnum : return "SmbSwIdx";
++		case SmbT0dryEnum : return "SmbT0dry";
++		case SmbT0wetEnum : return "SmbT0wet";
++		case SmbTdiffEnum : return "SmbTdiff";
++		case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling";
++		case SmoothThicknessMultiplierEnum : return "SmoothThicknessMultiplier";
++		case SolutionTypeEnum : return "SolutionType";
+ 		case SteadystateMaxiterEnum : return "SteadystateMaxiter";
+ 		case SteadystateNumRequestedOutputsEnum : return "SteadystateNumRequestedOutputs";
+ 		case SteadystateReltolEnum : return "SteadystateReltol";
+ 		case SteadystateRequestedOutputsEnum : return "SteadystateRequestedOutputs";
+-		case SurfaceEnum : return "Surface";
++		case StepEnum : return "Step";
++		case StressbalanceAbstolEnum : return "StressbalanceAbstol";
++		case StressbalanceFSreconditioningEnum : return "StressbalanceFSreconditioning";
++		case StressbalanceIsnewtonEnum : return "StressbalanceIsnewton";
++		case StressbalanceMaxiterEnum : return "StressbalanceMaxiter";
++		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
++		case StressbalancePenaltyFactorEnum : return "StressbalancePenaltyFactor";
++		case StressbalanceReltolEnum : return "StressbalanceReltol";
++		case StressbalanceRequestedOutputsEnum : return "StressbalanceRequestedOutputs";
++		case StressbalanceRestolEnum : return "StressbalanceRestol";
++		case StressbalanceRiftPenaltyThresholdEnum : return "StressbalanceRiftPenaltyThreshold";
++		case StressbalanceShelfDampeningEnum : return "StressbalanceShelfDampening";
++		case ThermalIsdynamicbasalspcEnum : return "ThermalIsdynamicbasalspc";
+ 		case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
+-		case ThermalIsdynamicbasalspcEnum : return "ThermalIsdynamicbasalspc";
+-		case ThermalReltolEnum : return "ThermalReltol";
+ 		case ThermalMaxiterEnum : return "ThermalMaxiter";
++		case ThermalNumRequestedOutputsEnum : return "ThermalNumRequestedOutputs";
+ 		case ThermalPenaltyFactorEnum : return "ThermalPenaltyFactor";
+ 		case ThermalPenaltyLockEnum : return "ThermalPenaltyLock";
+ 		case ThermalPenaltyThresholdEnum : return "ThermalPenaltyThreshold";
+-		case ThermalSpctemperatureEnum : return "ThermalSpctemperature";
++		case ThermalReltolEnum : return "ThermalReltol";
++		case ThermalRequestedOutputsEnum : return "ThermalRequestedOutputs";
+ 		case ThermalStabilizationEnum : return "ThermalStabilization";
+-		case ThermalNumRequestedOutputsEnum : return "ThermalNumRequestedOutputs";
+-		case ThermalRequestedOutputsEnum : return "ThermalRequestedOutputs";
+-		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
+-		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
+-		case ThicknessEnum : return "Thickness";
++		case TimeEnum : return "Time";
++		case TimesteppingCflCoefficientEnum : return "TimesteppingCflCoefficient";
++		case TimesteppingCouplingTimeEnum : return "TimesteppingCouplingTime";
++		case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
++		case TimesteppingInterpForcingsEnum : return "TimesteppingInterpForcings";
+ 		case TimesteppingStartTimeEnum : return "TimesteppingStartTime";
+-		case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
+-		case TimesteppingCflCoefficientEnum : return "TimesteppingCflCoefficient";
+-		case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
+ 		case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
+-		case TimesteppingInterpForcingsEnum : return "TimesteppingInterpForcings";
+-		case TimesteppingCouplingTimeEnum : return "TimesteppingCouplingTime";
+-		case TransientIssmbEnum : return "TransientIssmb";
++		case TimesteppingTimeStepMaxEnum : return "TimesteppingTimeStepMax";
++		case TimesteppingTimeStepMinEnum : return "TimesteppingTimeStepMin";
++		case TimesteppingTypeEnum : return "TimesteppingType";
++		case ToMITgcmCommEnum : return "ToMITgcmComm";
++		case ToolkitsFileNameEnum : return "ToolkitsFileName";
++		case ToolkitsOptionsAnalysesEnum : return "ToolkitsOptionsAnalyses";
++		case ToolkitsOptionsStringsEnum : return "ToolkitsOptionsStrings";
++		case ToolkitsTypesEnum : return "ToolkitsTypes";
++		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
+ 		case TransientIscouplerEnum : return "TransientIscoupler";
+-		case TransientIsoceancouplingEnum : return "TransientIsoceancoupling";
+-		case TransientIsstressbalanceEnum : return "TransientIsstressbalance";
++		case TransientIsdamageevolutionEnum : return "TransientIsdamageevolution";
++		case TransientIsesaEnum : return "TransientIsesa";
++		case TransientIsgiaEnum : return "TransientIsgia";
+ 		case TransientIsgroundinglineEnum : return "TransientIsgroundingline";
++		case TransientIshydrologyEnum : return "TransientIshydrology";
+ 		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+-		case TransientIsthermalEnum : return "TransientIsthermal";
+-		case TransientIsgiaEnum : return "TransientIsgia";
+-		case TransientIsesaEnum : return "TransientIsesa";
+-		case TransientIsdamageevolutionEnum : return "TransientIsdamageevolution";
+-		case TransientIshydrologyEnum : return "TransientIshydrology";
+ 		case TransientIsmovingfrontEnum : return "TransientIsmovingfront";
++		case TransientIsoceancouplingEnum : return "TransientIsoceancoupling";
+ 		case TransientIsslrEnum : return "TransientIsslr";
++		case TransientIssmbEnum : return "TransientIssmb";
++		case TransientIsstressbalanceEnum : return "TransientIsstressbalance";
++		case TransientIsthermalEnum : return "TransientIsthermal";
+ 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+ 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
+-		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+-		case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance";
+-		case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient";
++		case VelocityEnum : return "Velocity";
++		case ParametersENDEnum : return "ParametersEND";
++		case InputsSTARTEnum : return "InputsSTART";
++		case AdjointEnum : return "Adjoint";
++		case AdjointxEnum : return "Adjointx";
++		case AdjointyEnum : return "Adjointy";
++		case AdjointzEnum : return "Adjointz";
++		case AirEnum : return "Air";
++		case ApproximationEnum : return "Approximation";
++		case BalancethicknessMisfitEnum : return "BalancethicknessMisfit";
++		case BalancethicknessOmega0Enum : return "BalancethicknessOmega0";
+ 		case BalancethicknessOmegaEnum : return "BalancethicknessOmega";
+-		case BalancethicknessOmega0Enum : return "BalancethicknessOmega0";
+-		case BalancethicknessD0Enum : return "BalancethicknessD0";
+-		case SmbEnum : return "Smb";
+-		case SmbAnalysisEnum : return "SmbAnalysis";
+-		case SmbSolutionEnum : return "SmbSolution";
+-		case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs";
+-		case SmbRequestedOutputsEnum : return "SmbRequestedOutputs";
+-		case SmbIsInitializedEnum : return "SmbIsInitialized";
++		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
++		case BasalforcingsFloatingiceMeltingRateEnum : return "BasalforcingsFloatingiceMeltingRate";
++		case BasalforcingsGeothermalfluxEnum : return "BasalforcingsGeothermalflux";
++		case BasalforcingsGroundediceMeltingRateEnum : return "BasalforcingsGroundediceMeltingRate";
++		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
++		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
++		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
++		case BaseEnum : return "Base";
++		case BedEnum : return "Bed";
++		case BedSlopeXEnum : return "BedSlopeX";
++		case BedSlopeYEnum : return "BedSlopeY";
++		case CalvingCalvingrateEnum : return "CalvingCalvingrate";
++		case CalvingHabFractionEnum : return "CalvingHabFraction";
++		case CalvinglevermannCoeffEnum : return "CalvinglevermannCoeff";
++		case CalvinglevermannMeltingrateEnum : return "CalvinglevermannMeltingrate";
++		case CalvingMeltingrateEnum : return "CalvingMeltingrate";
++		case CalvingratexAverageEnum : return "CalvingratexAverage";
++		case CalvingratexEnum : return "Calvingratex";
++		case CalvingrateyAverageEnum : return "CalvingrateyAverage";
++		case CalvingrateyEnum : return "Calvingratey";
++		case CalvingStressThresholdFloatingiceEnum : return "CalvingStressThresholdFloatingice";
++		case CalvingStressThresholdGroundediceEnum : return "CalvingStressThresholdGroundedice";
++		case ConvergedEnum : return "Converged";
++		case CrevasseDepthEnum : return "CrevasseDepth";
++		case DamageDbarEnum : return "DamageDbar";
++		case DamageDEnum : return "DamageD";
++		case DamageFEnum : return "DamageF";
++		case DeviatoricStressxxEnum : return "DeviatoricStressxx";
++		case DeviatoricStressxyEnum : return "DeviatoricStressxy";
++		case DeviatoricStressxzEnum : return "DeviatoricStressxz";
++		case DeviatoricStressyyEnum : return "DeviatoricStressyy";
++		case DeviatoricStressyzEnum : return "DeviatoricStressyz";
++		case DeviatoricStresszzEnum : return "DeviatoricStresszz";
++		case DistanceToCalvingfrontEnum : return "DistanceToCalvingfront";
++		case DistanceToGroundinglineEnum : return "DistanceToGroundingline";
++		case Domain2DhorizontalEnum : return "Domain2Dhorizontal";
++		case Domain2DverticalEnum : return "Domain2Dvertical";
++		case Domain3DEnum : return "Domain3D";
++		case DragCoefficientAbsGradientEnum : return "DragCoefficientAbsGradient";
++		case DrivingStressXEnum : return "DrivingStressX";
++		case DrivingStressYEnum : return "DrivingStressY";
++		case EffectivePressureEnum : return "EffectivePressure";
++		case EnthalpyEnum : return "Enthalpy";
++		case EnthalpyPicardEnum : return "EnthalpyPicard";
++		case EplHeadEnum : return "EplHead";
++		case EplHeadOldEnum : return "EplHeadOld";
++		case EplHeadSlopeXEnum : return "EplHeadSlopeX";
++		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
++		case EsaDeltathicknessEnum : return "EsaDeltathickness";
++		case EsaXmotionEnum : return "EsaXmotion";
++		case EsaYmotionEnum : return "EsaYmotion";
++		case EtaDiffEnum : return "EtaDiff";
++		case FrictionAsEnum : return "FrictionAs";
++		case FrictionCEnum : return "FrictionC";
++		case FrictionCoefficientcoulombEnum : return "FrictionCoefficientcoulomb";
++		case FrictionCoefficientEnum : return "FrictionCoefficient";
++		case FrictionEffectivePressureEnum : return "FrictionEffectivePressure";
++		case FrictionMEnum : return "FrictionM";
++		case FrictionPEnum : return "FrictionP";
++		case FrictionPressureAdjustedTemperatureEnum : return "FrictionPressureAdjustedTemperature";
++		case FrictionQEnum : return "FrictionQ";
++		case FrictionWaterLayerEnum : return "FrictionWaterLayer";
++		case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio";
++		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
++		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
++		case GradientEnum : return "Gradient";
++		case HydrologyBumpHeightEnum : return "HydrologyBumpHeight";
++		case HydrologyBumpSpacingEnum : return "HydrologyBumpSpacing";
++		case HydrologydcBasalMoulinInputEnum : return "HydrologydcBasalMoulinInput";
++		case HydrologydcEplThicknessEnum : return "HydrologydcEplThickness";
++		case HydrologydcEplThicknessOldEnum : return "HydrologydcEplThicknessOld";
++		case HydrologydcMaskEplactiveEltEnum : return "HydrologydcMaskEplactiveElt";
++		case HydrologydcMaskEplactiveNodeEnum : return "HydrologydcMaskEplactiveNode";
++		case HydrologydcSedimentTransmitivityEnum : return "HydrologydcSedimentTransmitivity";
++		case HydrologyEnglacialInputEnum : return "HydrologyEnglacialInput";
++		case HydrologyGapHeightEnum : return "HydrologyGapHeight";
++		case HydrologyHeadEnum : return "HydrologyHead";
++		case HydrologyHeadOldEnum : return "HydrologyHeadOld";
++		case HydrologyMoulinInputEnum : return "HydrologyMoulinInput";
++		case HydrologyNeumannfluxEnum : return "HydrologyNeumannflux";
++		case HydrologyReynoldsEnum : return "HydrologyReynolds";
++		case HydrologyWaterVxEnum : return "HydrologyWaterVx";
++		case HydrologyWaterVyEnum : return "HydrologyWaterVy";
++		case IceEnum : return "Ice";
++		case IceMaskNodeActivationEnum : return "IceMaskNodeActivation";
++		case InputEnum : return "Input";
++		case InversionCostFunctionsCoefficientsEnum : return "InversionCostFunctionsCoefficients";
++		case InversionSurfaceObsEnum : return "InversionSurfaceObs";
++		case InversionThicknessObsEnum : return "InversionThicknessObs";
++		case InversionVelObsEnum : return "InversionVelObs";
++		case InversionVxObsEnum : return "InversionVxObs";
++		case InversionVyObsEnum : return "InversionVyObs";
++		case LevelsetfunctionSlopeXEnum : return "LevelsetfunctionSlopeX";
++		case LevelsetfunctionSlopeYEnum : return "LevelsetfunctionSlopeY";
++		case LoadingforceXEnum : return "LoadingforceX";
++		case LoadingforceYEnum : return "LoadingforceY";
++		case LoadingforceZEnum : return "LoadingforceZ";
++		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
++		case MaskIceLevelsetEnum : return "MaskIceLevelset";
++		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
++		case MaterialsRheologyBbarEnum : return "MaterialsRheologyBbar";
++		case MaterialsRheologyBEnum : return "MaterialsRheologyB";
++		case MaterialsRheologyEbarEnum : return "MaterialsRheologyEbar";
++		case MaterialsRheologyEcbarEnum : return "MaterialsRheologyEcbar";
++		case MaterialsRheologyEcEnum : return "MaterialsRheologyEc";
++		case MaterialsRheologyEEnum : return "MaterialsRheologyE";
++		case MaterialsRheologyEsbarEnum : return "MaterialsRheologyEsbar";
++		case MaterialsRheologyEsEnum : return "MaterialsRheologyEs";
++		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
++		case MeshScaleFactorEnum : return "MeshScaleFactor";
++		case MeshVertexonbaseEnum : return "MeshVertexonbase";
++		case MeshVertexonboundaryEnum : return "MeshVertexonboundary";
++		case MeshVertexonsurfaceEnum : return "MeshVertexonsurface";
++		case MisfitEnum : return "Misfit";
++		case NeumannfluxEnum : return "Neumannflux";
++		case NodeEnum : return "Node";
++		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
++		case P0Enum : return "P0";
++		case P1Enum : return "P1";
++		case PressureEnum : return "Pressure";
++		case RheologyBAbsGradientEnum : return "RheologyBAbsGradient";
++		case RheologyBbarAbsGradientEnum : return "RheologyBbarAbsGradient";
++		case SealevelEnum : return "Sealevel";
++		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
++		case SedimentHeadEnum : return "SedimentHead";
++		case SedimentHeadOldEnum : return "SedimentHeadOld";
++		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
++		case SigmaNNEnum : return "SigmaNN";
++		case SmbAccumulationEnum : return "SmbAccumulation";
++		case SmbAEnum : return "SmbA";
++		case SmbAiniEnum : return "SmbAini";
++		case SmbAValueEnum : return "SmbAValue";
++		case SmbBMaxEnum : return "SmbBMax";
++		case SmbBMinEnum : return "SmbBMin";
++		case SmbBNegEnum : return "SmbBNeg";
++		case SmbBPosEnum : return "SmbBPos";
++		case SmbCEnum : return "SmbC";
++		case SmbDEnum : return "SmbD";
++		case SmbDiniEnum : return "SmbDini";
++		case SmbDlwrfEnum : return "SmbDlwrf";
++		case SmbDswrfEnum : return "SmbDswrf";
++		case SmbDzEnum : return "SmbDz";
+ 		case SmbDziniEnum : return "SmbDzini";
+-		case SmbDiniEnum : return "SmbDini";
+-		case SmbReiniEnum : return "SmbReini";
++		case SmbDzMinEnum : return "SmbDzMin";
++		case SmbDzTopEnum : return "SmbDzTop";
++		case SmbEAirEnum : return "SmbEAir";
++		case SmbECEnum : return "SmbEC";
++		case SmbECiniEnum : return "SmbECini";
++		case SmbElaEnum : return "SmbEla";
++		case SmbEvaporationEnum : return "SmbEvaporation";
++		case SmbGdnEnum : return "SmbGdn";
+ 		case SmbGdniniEnum : return "SmbGdnini";
++		case SmbGspEnum : return "SmbGsp";
+ 		case SmbGspiniEnum : return "SmbGspini";
+-		case SmbECiniEnum : return "SmbECini";
+-		case SmbWiniEnum : return "SmbWini";
+-		case SmbAiniEnum : return "SmbAini";
+-		case SmbTiniEnum : return "SmbTini";
++		case SmbHrefEnum : return "SmbHref";
++		case SmbIsInitializedEnum : return "SmbIsInitialized";
++		case SmbMassBalanceEnum : return "SmbMassBalance";
++		case SmbMeltEnum : return "SmbMelt";
++		case SmbMonthlytemperaturesEnum : return "SmbMonthlytemperatures";
++		case SmbPAirEnum : return "SmbPAir";
++		case SmbPddfacIceEnum : return "SmbPddfacIce";
++		case SmbPddfacSnowEnum : return "SmbPddfacSnow";
++		case SmbPEnum : return "SmbP";
++		case SmbPrecipitationEnum : return "SmbPrecipitation";
++		case SmbPrecipitationsLgmEnum : return "SmbPrecipitationsLgm";
++		case SmbPrecipitationsPresentdayEnum : return "SmbPrecipitationsPresentday";
++		case SmbReEnum : return "SmbRe";
++		case SmbRefreezeEnum : return "SmbRefreeze";
++		case SmbReiniEnum : return "SmbReini";
++		case SmbRunoffEnum : return "SmbRunoff";
++		case SmbS0pEnum : return "SmbS0p";
++		case SmbS0tEnum : return "SmbS0t";
+ 		case SmbSizeiniEnum : return "SmbSizeini";
+-		case SMBforcingEnum : return "SMBforcing";
+-		case SmbMassBalanceEnum : return "SmbMassBalance";
+-		case SMBgembEnum : return "SMBgemb";
+-		case SmbInitDensityScalingEnum : return "SmbInitDensityScaling";
+-		case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling";
+-		case SmbAdThreshEnum : return "SmbAdThresh";
++		case SmbSmbrefEnum : return "SmbSmbref";
+ 		case SmbTaEnum : return "SmbTa";
+-		case SmbVEnum : return "SmbV";
+-		case SmbDswrfEnum : return "SmbDswrf";
+-		case SmbDlwrfEnum : return "SmbDlwrf";
+-		case SmbPEnum : return "SmbP";
+-		case SmbEAirEnum : return "SmbEAir";
+-		case SmbPAirEnum : return "SmbPAir";
++		case SmbTemperaturesLgmEnum : return "SmbTemperaturesLgm";
++		case SmbTemperaturesPresentdayEnum : return "SmbTemperaturesPresentday";
++		case SmbTEnum : return "SmbT";
++		case SmbTeValueEnum : return "SmbTeValue";
++		case SmbTiniEnum : return "SmbTini";
+ 		case SmbTmeanEnum : return "SmbTmean";
+-		case SmbCEnum : return "SmbC";
+ 		case SmbTzEnum : return "SmbTz";
++		case SmbVEnum : return "SmbV";
+ 		case SmbVzEnum : return "SmbVz";
+-		case SmbDtEnum : return "SmbDt";
+-		case SmbDzEnum : return "SmbDz";
+-		case SmbAIdxEnum : return "SmbAIdx";
+-		case SmbSwIdxEnum : return "SmbSwIdx";
+-		case SmbDenIdxEnum : return "SmbDenIdx";
++		case SmbWEnum : return "SmbW";
++		case SmbWiniEnum : return "SmbWini";
++		case SmbZMaxEnum : return "SmbZMax";
++		case SmbZMinEnum : return "SmbZMin";
+ 		case SmbZTopEnum : return "SmbZTop";
+-		case SmbDzTopEnum : return "SmbDzTop";
+-		case SmbDzMinEnum : return "SmbDzMin";
+ 		case SmbZYEnum : return "SmbZY";
+-		case SmbZMaxEnum : return "SmbZMax";
+-		case SmbZMinEnum : return "SmbZMin";
+-		case SmbOutputFreqEnum : return "SmbOutputFreq";
+-		case SmbASnowEnum : return "SmbASnow";
+-		case SmbAIceEnum : return "SmbAIce";
+-		case SmbCldFracEnum : return "SmbCldFrac";
+-		case SmbT0wetEnum : return "SmbT0wet";
+-		case SmbT0dryEnum : return "SmbT0dry";
+-		case SmbKEnum : return "SmbK";
+-		case SmbDEnum : return "SmbD";
+-		case SmbReEnum : return "SmbRe";
+-		case SmbGdnEnum : return "SmbGdn";
+-		case SmbGspEnum : return "SmbGsp";
+-		case SmbECEnum : return "SmbEC";
+-		case SmbWEnum : return "SmbW";
+-		case SmbAEnum : return "SmbA";
+-		case SmbTEnum : return "SmbT";
+-		case SmbAValueEnum : return "SmbAValue";
+-		case SmbTeValueEnum : return "SmbTeValue";
+-		case SmbIsgraingrowthEnum : return "SmbIsgraingrowth";
+-		case SmbIsalbedoEnum : return "SmbIsalbedo";
+-		case SmbIsshortwaveEnum : return "SmbIsshortwave";
+-		case SmbIsthermalEnum : return "SmbIsthermal";
+-		case SmbIsaccumulationEnum : return "SmbIsaccumulation";
+-		case SmbIsmeltEnum : return "SmbIsmelt";
+-		case SmbIsdensificationEnum : return "SmbIsdensification";
+-		case SmbIsturbulentfluxEnum : return "SmbIsturbulentflux";
+-		case SmbDzAddEnum : return "SmbDzAdd";
+-		case SmbMAddEnum : return "SmbMAdd";
+-		case SmbFACEnum : return "SmbFAC";
+-		case SMBpddEnum : return "SMBpdd";
+-		case SmbDelta18oEnum : return "SmbDelta18o";
+-		case SmbDelta18oSurfaceEnum : return "SmbDelta18oSurface";
+-		case SmbIsdelta18oEnum : return "SmbIsdelta18o";
+-		case SmbIssetpddfacEnum : return "SmbIssetpddfac";
+-		case SmbIsmungsmEnum : return "SmbIsmungsm";
+-		case SmbIsd18opdEnum : return "SmbIsd18opd";
+-		case SmbIstemperaturescaledEnum : return "SmbIstemperaturescaled";
+-		case SmbPrecipitationsPresentdayEnum : return "SmbPrecipitationsPresentday";
+-		case SmbPrecipitationsLgmEnum : return "SmbPrecipitationsLgm";
+-		case SmbTemperaturesPresentdayEnum : return "SmbTemperaturesPresentday";
+-		case SmbTemperaturesLgmEnum : return "SmbTemperaturesLgm";
+-		case SmbPrecipitationEnum : return "SmbPrecipitation";
+-		case SmbPddfacSnowEnum : return "SmbPddfacSnow";
+-		case SmbPddfacIceEnum : return "SmbPddfacIce";
+-		case SmbDesfacEnum : return "SmbDesfac";
+-		case SmbS0pEnum : return "SmbS0p";
+-		case SmbS0tEnum : return "SmbS0t";
+-		case SmbRlapsEnum : return "SmbRlaps";
+-		case SmbRlapslgmEnum : return "SmbRlapslgm";
+-		case SmbPfacEnum : return "SmbPfac";
+-		case SmbTdiffEnum : return "SmbTdiff";
+-		case SmbSealevEnum : return "SmbSealev";
+-		case SMBd18opddEnum : return "SMBd18opdd";
+-		case SmbDpermilEnum : return "SmbDpermil";
+-		case SmbFEnum : return "SmbF";
+-		case SMBgradientsEnum : return "SMBgradients";
+-		case SmbMonthlytemperaturesEnum : return "SmbMonthlytemperatures";
+-		case SmbHrefEnum : return "SmbHref";
+-		case SmbSmbrefEnum : return "SmbSmbref";
+-		case SmbBPosEnum : return "SmbBPos";
+-		case SmbBNegEnum : return "SmbBNeg";
+-		case SMBhenningEnum : return "SMBhenning";
+-		case SMBcomponentsEnum : return "SMBcomponents";
+-		case SmbAccumulationEnum : return "SmbAccumulation";
+-		case SmbEvaporationEnum : return "SmbEvaporation";
+-		case SmbRunoffEnum : return "SmbRunoff";
+-		case SMBmeltcomponentsEnum : return "SMBmeltcomponents";
+-		case SmbMeltEnum : return "SmbMelt";
+-		case SmbRefreezeEnum : return "SmbRefreeze";
+-		case SMBgcmEnum : return "SMBgcm";
+-		case SMBgradientselaEnum : return "SMBgradientsela";
+-		case SmbElaEnum : return "SmbEla";
+-		case SmbBMaxEnum : return "SmbBMax";
+-		case SmbBMinEnum : return "SmbBMin";
+-		case AdjointpEnum : return "Adjointp";
+-		case AdjointxEnum : return "Adjointx";
+-		case AdjointyEnum : return "Adjointy";
+-		case AdjointzEnum : return "Adjointz";
+-		case BalancethicknessMisfitEnum : return "BalancethicknessMisfit";
+-		case BedSlopeXEnum : return "BedSlopeX";
+-		case BedSlopeYEnum : return "BedSlopeY";
+-		case BoundaryEnum : return "Boundary";
+-		case ConvergedEnum : return "Converged";
+-		case InternalEnum : return "Internal";
+-		case MassFluxEnum : return "MassFlux";
+-		case MeltingOffsetEnum : return "MeltingOffset";
+-		case MisfitEnum : return "Misfit";
+-		case PressureEnum : return "Pressure";
+-		case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
+-		case ResetPenaltiesEnum : return "ResetPenalties";
++		case StrainRateeffectiveEnum : return "StrainRateeffective";
++		case StrainRateparallelEnum : return "StrainRateparallel";
++		case StrainRateperpendicularEnum : return "StrainRateperpendicular";
++		case StrainRatexxEnum : return "StrainRatexx";
++		case StrainRatexyEnum : return "StrainRatexy";
++		case StrainRatexzEnum : return "StrainRatexz";
++		case StrainRateyyEnum : return "StrainRateyy";
++		case StrainRateyzEnum : return "StrainRateyz";
++		case StrainRatezzEnum : return "StrainRatezz";
++		case StressMaxPrincipalEnum : return "StressMaxPrincipal";
++		case StressTensorxxEnum : return "StressTensorxx";
++		case StressTensorxyEnum : return "StressTensorxy";
++		case StressTensorxzEnum : return "StressTensorxz";
++		case StressTensoryyEnum : return "StressTensoryy";
++		case StressTensoryzEnum : return "StressTensoryz";
++		case StressTensorzzEnum : return "StressTensorzz";
++		case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit";
+ 		case SurfaceAbsVelMisfitEnum : return "SurfaceAbsVelMisfit";
+ 		case SurfaceAreaEnum : return "SurfaceArea";
+ 		case SurfaceAverageVelMisfitEnum : return "SurfaceAverageVelMisfit";
++		case SurfaceEnum : return "Surface";
+ 		case SurfaceLogVelMisfitEnum : return "SurfaceLogVelMisfit";
+ 		case SurfaceLogVxVyMisfitEnum : return "SurfaceLogVxVyMisfit";
++		case SurfaceObservationEnum : return "SurfaceObservation";
+ 		case SurfaceRelVelMisfitEnum : return "SurfaceRelVelMisfit";
+ 		case SurfaceSlopeXEnum : return "SurfaceSlopeX";
+ 		case SurfaceSlopeYEnum : return "SurfaceSlopeY";
+ 		case TemperatureEnum : return "Temperature";
+ 		case TemperaturePicardEnum : return "TemperaturePicard";
+-		case TemperaturePDDEnum : return "TemperaturePDD";
++		case ThicknessAbsGradientEnum : return "ThicknessAbsGradient";
+ 		case ThicknessAbsMisfitEnum : return "ThicknessAbsMisfit";
+-		case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit";
+-		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
+-		case EtaDiffEnum : return "EtaDiff";
+-		case EtaAbsGradientEnum : return "EtaAbsGradient";
++		case ThicknessAcrossGradientEnum : return "ThicknessAcrossGradient";
++		case ThicknessAlongGradientEnum : return "ThicknessAlongGradient";
++		case ThicknessEnum : return "Thickness";
++		case ThicknessPositiveEnum : return "ThicknessPositive";
+ 		case VelEnum : return "Vel";
+-		case VelocityEnum : return "Velocity";
+ 		case VxAverageEnum : return "VxAverage";
+ 		case VxEnum : return "Vx";
++		case VxMeshEnum : return "VxMesh";
++		case VxObsEnum : return "VxObs";
+ 		case VyAverageEnum : return "VyAverage";
+ 		case VyEnum : return "Vy";
++		case VyMeshEnum : return "VyMesh";
++		case VyObsEnum : return "VyObs";
+ 		case VzEnum : return "Vz";
+-		case VzSSAEnum : return "VzSSA";
++		case VzFSEnum : return "VzFS";
+ 		case VzHOEnum : return "VzHO";
+-		case VzFSEnum : return "VzFS";
+-		case VxMeshEnum : return "VxMesh";
+-		case VyMeshEnum : return "VyMesh";
+ 		case VzMeshEnum : return "VzMesh";
+-		case EnthalpyEnum : return "Enthalpy";
+-		case EnthalpyPicardEnum : return "EnthalpyPicard";
+-		case ThicknessAbsGradientEnum : return "ThicknessAbsGradient";
+-		case ThicknessAlongGradientEnum : return "ThicknessAlongGradient";
+-		case ThicknessAcrossGradientEnum : return "ThicknessAcrossGradient";
+-		case ThicknessPositiveEnum : return "ThicknessPositive";
+-		case IntMatParamEnum : return "IntMatParam";
+-		case RheologyBbarAbsGradientEnum : return "RheologyBbarAbsGradient";
+-		case RheologyBAbsGradientEnum : return "RheologyBAbsGradient";
+-		case DragCoefficientAbsGradientEnum : return "DragCoefficientAbsGradient";
+-		case TransientInputEnum : return "TransientInput";
+-		case WaterfractionEnum : return "Waterfraction";
++		case VzSSAEnum : return "VzSSA";
++		case WatercolumnEnum : return "Watercolumn";
++		case WaterColumnOldEnum : return "WaterColumnOld";
+ 		case WaterfractionDrainageEnum : return "WaterfractionDrainage";
+ 		case WaterfractionDrainageIntegratedEnum : return "WaterfractionDrainageIntegrated";
+-		case WatercolumnEnum : return "Watercolumn";
+-		case ViscousHeatingEnum : return "ViscousHeating";
+-		case HydrologyWaterVxEnum : return "HydrologyWaterVx";
+-		case HydrologyWaterVyEnum : return "HydrologyWaterVy";
+-		case DrivingStressXEnum : return "DrivingStressX";
+-		case DrivingStressYEnum : return "DrivingStressY";
+-		case SigmaNNEnum : return "SigmaNN";
+-		case StressTensorEnum : return "StressTensor";
+-		case StressTensorxxEnum : return "StressTensorxx";
+-		case StressTensorxyEnum : return "StressTensorxy";
+-		case StressTensorxzEnum : return "StressTensorxz";
+-		case StressTensoryyEnum : return "StressTensoryy";
+-		case StressTensoryzEnum : return "StressTensoryz";
+-		case StressTensorzzEnum : return "StressTensorzz";
+-		case StressMaxPrincipalEnum : return "StressMaxPrincipal";
+-		case DeviatoricStressEnum : return "DeviatoricStress";
+-		case DeviatoricStressxxEnum : return "DeviatoricStressxx";
+-		case DeviatoricStressxyEnum : return "DeviatoricStressxy";
+-		case DeviatoricStressxzEnum : return "DeviatoricStressxz";
+-		case DeviatoricStressyyEnum : return "DeviatoricStressyy";
+-		case DeviatoricStressyzEnum : return "DeviatoricStressyz";
+-		case DeviatoricStresszzEnum : return "DeviatoricStresszz";
++		case WaterfractionEnum : return "Waterfraction";
++		case WaterheightEnum : return "Waterheight";
++		case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
++		case InputsENDEnum : return "InputsEND";
++		case AbsoluteEnum : return "Absolute";
++		case AdaptiveTimesteppingEnum : return "AdaptiveTimestepping";
++		case AdjointBalancethickness2AnalysisEnum : return "AdjointBalancethickness2Analysis";
++		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
++		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
++		case AdjointpEnum : return "Adjointp";
++		case AggressiveMigrationEnum : return "AggressiveMigration";
++		case AmrBamgEnum : return "AmrBamg";
++		case AmrNeopzEnum : return "AmrNeopz";
++		case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
++		case ArrheniusEnum : return "Arrhenius";
++		case AutodiffJacobianEnum : return "AutodiffJacobian";
++		case AutodiffKeepEnum : return "AutodiffKeep";
++		case Balancethickness2AnalysisEnum : return "Balancethickness2Analysis";
++		case Balancethickness2SolutionEnum : return "Balancethickness2Solution";
++		case BalancethicknessAnalysisEnum : return "BalancethicknessAnalysis";
++		case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance";
++		case BalancethicknessSoftAnalysisEnum : return "BalancethicknessSoftAnalysis";
++		case BalancethicknessSoftSolutionEnum : return "BalancethicknessSoftSolution";
++		case BalancethicknessSolutionEnum : return "BalancethicknessSolution";
++		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
++		case BalancevelocityAnalysisEnum : return "BalancevelocityAnalysis";
++		case BalancevelocitySolutionEnum : return "BalancevelocitySolution";
++		case BasalCrevasseEnum : return "BasalCrevasse";
++		case BasalforcingsPicoEnum : return "BasalforcingsPico";
++		case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature";
++		case BedSlopeSolutionEnum : return "BedSlopeSolution";
++		case BoolExternalResultEnum : return "BoolExternalResult";
++		case BoolInputEnum : return "BoolInput";
++		case BoolParamEnum : return "BoolParam";
++		case BoundaryEnum : return "Boundary";
++		case BuddJackaEnum : return "BuddJacka";
++		case CalvingDev2Enum : return "CalvingDev2";
++		case CalvingHabEnum : return "CalvingHab";
++		case CalvingLevermannEnum : return "CalvingLevermann";
++		case CalvingVonmisesEnum : return "CalvingVonmises";
++		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
++		case CfsurfacesquareEnum : return "Cfsurfacesquare";
++		case ClosedEnum : return "Closed";
++		case ColinearEnum : return "Colinear";
++		case ConstantsGEnum : return "ConstantsG";
++		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
++		case ConstraintsEnum : return "Constraints";
++		case ContactEnum : return "Contact";
++		case ContourEnum : return "Contour";
++		case ContoursEnum : return "Contours";
++		case ControlInputEnum : return "ControlInput";
++		case ControlSteadyEnum : return "ControlSteady";
++		case CrouzeixRaviartEnum : return "CrouzeixRaviart";
++		case CuffeyEnum : return "Cuffey";
++		case CuffeyTemperateEnum : return "CuffeyTemperate";
++		case DamageC4Enum : return "DamageC4";
++		case DamageElementinterpEnum : return "DamageElementinterp";
++		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
++		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
++		case DamageMaxiterEnum : return "DamageMaxiter";
++		case DataSetEnum : return "DataSet";
++		case DatasetInputEnum : return "DatasetInput";
++		case DataSetParamEnum : return "DataSetParam";
++		case DefaultAnalysisEnum : return "DefaultAnalysis";
++		case DefaultCalvingEnum : return "DefaultCalving";
++		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
++		case DenseEnum : return "Dense";
++		case DependentObjectEnum : return "DependentObject";
++		case DepthAverageAnalysisEnum : return "DepthAverageAnalysis";
+ 		case DeviatoricStresseffectiveEnum : return "DeviatoricStresseffective";
+-		case LambdaSEnum : return "LambdaS";
+-		case StrainRateEnum : return "StrainRate";
+-		case StrainRatexxEnum : return "StrainRatexx";
+-		case StrainRatexyEnum : return "StrainRatexy";
+-		case StrainRatexzEnum : return "StrainRatexz";
+-		case StrainRateyyEnum : return "StrainRateyy";
+-		case StrainRateyzEnum : return "StrainRateyz";
+-		case StrainRatezzEnum : return "StrainRatezz";
++		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+ 		case DivergenceEnum : return "Divergence";
+-		case MaxDivergenceEnum : return "MaxDivergence";
+-		case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
++		case Domain3DsurfaceEnum : return "Domain3Dsurface";
++		case DoubleArrayInputEnum : return "DoubleArrayInput";
++		case DoubleExternalResultEnum : return "DoubleExternalResult";
++		case DoubleInputEnum : return "DoubleInput";
++		case DoubleMatArrayParamEnum : return "DoubleMatArrayParam";
++		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
++		case DoubleMatParamEnum : return "DoubleMatParam";
++		case DoubleParamEnum : return "DoubleParam";
++		case DoubleVecParamEnum : return "DoubleVecParam";
++		case EffectivePressureStackedEnum : return "EffectivePressureStacked";
++		case EffectivePressureTimeAverageEnum : return "EffectivePressureTimeAverage";
++		case ElementEnum : return "Element";
++		case ElementHookEnum : return "ElementHook";
++		case ElementSIdEnum : return "ElementSId";
++		case EnthalpyAnalysisEnum : return "EnthalpyAnalysis";
++		case EplHeadStackedEnum : return "EplHeadStacked";
++		case EplHeadTimeAverageEnum : return "EplHeadTimeAverage";
++		case EsaAnalysisEnum : return "EsaAnalysis";
++		case EsaEmotionEnum : return "EsaEmotion";
++		case EsaNmotionEnum : return "EsaNmotion";
++		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
++		case EsaRotationrateEnum : return "EsaRotationrate";
++		case EsaSolutionEnum : return "EsaSolution";
++		case EsaStrainratexxEnum : return "EsaStrainratexx";
++		case EsaStrainratexyEnum : return "EsaStrainratexy";
++		case EsaStrainrateyyEnum : return "EsaStrainrateyy";
++		case EsaTransitionsEnum : return "EsaTransitions";
++		case EsaUmotionEnum : return "EsaUmotion";
++		case ExternalResultEnum : return "ExternalResult";
++		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
++		case ExtrudeFromBaseAnalysisEnum : return "ExtrudeFromBaseAnalysis";
++		case ExtrudeFromTopAnalysisEnum : return "ExtrudeFromTopAnalysis";
++		case FemModelCommEnum : return "FemModelComm";
++		case FemModelEnum : return "FemModel";
++		case FileParamEnum : return "FileParam";
++		case FixedTimesteppingEnum : return "FixedTimestepping";
++		case FloatingAreaEnum : return "FloatingArea";
++		case FloatingAreaScaledEnum : return "FloatingAreaScaled";
++		case FloatingMeltRateEnum : return "FloatingMeltRate";
++		case FlowequationBorderFSEnum : return "FlowequationBorderFS";
++		case FreeEnum : return "Free";
++		case FreeSurfaceBaseAnalysisEnum : return "FreeSurfaceBaseAnalysis";
++		case FreeSurfaceTopAnalysisEnum : return "FreeSurfaceTopAnalysis";
++		case FSApproximationEnum : return "FSApproximation";
++		case FsetEnum : return "Fset";
++		case FSpressureEnum : return "FSpressure";
++		case FSSolverEnum : return "FSSolver";
++		case FSvelocityEnum : return "FSvelocity";
++		case GaussPentaEnum : return "GaussPenta";
++		case GaussSegEnum : return "GaussSeg";
++		case GaussTetraEnum : return "GaussTetra";
++		case GaussTriaEnum : return "GaussTria";
++		case GenericOptionEnum : return "GenericOption";
++		case GenericParamEnum : return "GenericParam";
+ 		case GiadWdtEnum : return "GiadWdt";
++		case GiaIvinsAnalysisEnum : return "GiaIvinsAnalysis";
++		case GiaSolutionEnum : return "GiaSolution";
+ 		case GiaWEnum : return "GiaW";
+-		case SaveResultsEnum : return "SaveResults";
+-		case BoolExternalResultEnum : return "BoolExternalResult";
+-		case DoubleExternalResultEnum : return "DoubleExternalResult";
+-		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
++		case Gradient1Enum : return "Gradient1";
++		case Gradient2Enum : return "Gradient2";
++		case Gradient3Enum : return "Gradient3";
++		case GroundedAreaEnum : return "GroundedArea";
++		case GroundedAreaScaledEnum : return "GroundedAreaScaled";
++		case GroundingOnlyEnum : return "GroundingOnly";
++		case GsetEnum : return "Gset";
++		case GslEnum : return "Gsl";
++		case HOApproximationEnum : return "HOApproximation";
++		case HOFSApproximationEnum : return "HOFSApproximation";
++		case HookEnum : return "Hook";
++		case HydrologyBasalFluxEnum : return "HydrologyBasalFlux";
++		case HydrologyDCEfficientAnalysisEnum : return "HydrologyDCEfficientAnalysis";
++		case HydrologydcEnum : return "Hydrologydc";
++		case HydrologydcEplColapseThicknessEnum : return "HydrologydcEplColapseThickness";
++		case HydrologydcEplCompressibilityEnum : return "HydrologydcEplCompressibility";
++		case HydrologydcEplConductivityEnum : return "HydrologydcEplConductivity";
++		case HydrologydcEplInitialThicknessEnum : return "HydrologydcEplInitialThickness";
++		case HydrologydcEplMaxThicknessEnum : return "HydrologydcEplMaxThickness";
++		case HydrologydcEplPorosityEnum : return "HydrologydcEplPorosity";
++		case HydrologydcEplThicknessStackedEnum : return "HydrologydcEplThicknessStacked";
++		case HydrologydcEplThicknessTimeAverageEnum : return "HydrologydcEplThicknessTimeAverage";
++		case HydrologyDCInefficientAnalysisEnum : return "HydrologyDCInefficientAnalysis";
++		case HydrologydcSedimentCompressibilityEnum : return "HydrologydcSedimentCompressibility";
++		case HydrologydcSedimentPorosityEnum : return "HydrologydcSedimentPorosity";
++		case HydrologydcSedimentThicknessEnum : return "HydrologydcSedimentThickness";
++		case HydrologydcWaterCompressibilityEnum : return "HydrologydcWaterCompressibility";
++		case HydrologyShreveAnalysisEnum : return "HydrologyShreveAnalysis";
++		case HydrologyshreveEnum : return "Hydrologyshreve";
++		case HydrologySolutionEnum : return "HydrologySolution";
++		case HydrologySommersAnalysisEnum : return "HydrologySommersAnalysis";
++		case HydrologysommersEnum : return "Hydrologysommers";
++		case IceMassEnum : return "IceMass";
++		case IceMassScaledEnum : return "IceMassScaled";
++		case IceVolumeAboveFloatationEnum : return "IceVolumeAboveFloatation";
++		case IceVolumeAboveFloatationScaledEnum : return "IceVolumeAboveFloatationScaled";
++		case IceVolumeEnum : return "IceVolume";
++		case IceVolumeScaledEnum : return "IceVolumeScaled";
++		case IncrementalEnum : return "Incremental";
++		case IndexedEnum : return "Indexed";
++		case InternalEnum : return "Internal";
++		case IntersectEnum : return "Intersect";
+ 		case IntExternalResultEnum : return "IntExternalResult";
++		case IntInputEnum : return "IntInput";
+ 		case IntMatExternalResultEnum : return "IntMatExternalResult";
++		case IntMatParamEnum : return "IntMatParam";
++		case IntParamEnum : return "IntParam";
++		case IntVecParamEnum : return "IntVecParam";
++		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
++		case InversionFatolEnum : return "InversionFatol";
++		case InversionFrtolEnum : return "InversionFrtol";
++		case InversionVzObsEnum : return "InversionVzObs";
+ 		case JEnum : return "J";
++		case L1L2ApproximationEnum : return "L1L2Approximation";
++		case L2ProjectionBaseAnalysisEnum : return "L2ProjectionBaseAnalysis";
++		case L2ProjectionEPLAnalysisEnum : return "L2ProjectionEPLAnalysis";
++		case LACrouzeixRaviartEnum : return "LACrouzeixRaviart";
++		case LambdaSEnum : return "LambdaS";
++		case LATaylorHoodEnum : return "LATaylorHood";
++		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
++		case LevelsetfunctionPicardEnum : return "LevelsetfunctionPicard";
++		case LinearFloatingMeltRateEnum : return "LinearFloatingMeltRate";
++		case LliboutryDuvalEnum : return "LliboutryDuval";
++		case LoadsEnum : return "Loads";
++		case LoveAnalysisEnum : return "LoveAnalysis";
++		case LoveHiEnum : return "LoveHi";
++		case LoveHrEnum : return "LoveHr";
++		case LoveKernelsImagEnum : return "LoveKernelsImag";
++		case LoveKernelsRealEnum : return "LoveKernelsReal";
++		case LoveKiEnum : return "LoveKi";
++		case LoveKrEnum : return "LoveKr";
++		case LoveLiEnum : return "LoveLi";
++		case LoveLrEnum : return "LoveLr";
++		case LoveSolutionEnum : return "LoveSolution";
++		case MantlePlumeGeothermalFluxEnum : return "MantlePlumeGeothermalFlux";
++		case MaskLandLevelsetEnum : return "MaskLandLevelset";
++		case MaskOceanLevelsetEnum : return "MaskOceanLevelset";
++		case MassconaxpbyEnum : return "Massconaxpby";
++		case MassconEnum : return "Masscon";
++		case MassfluxatgateEnum : return "Massfluxatgate";
++		case MassFluxEnum : return "MassFlux";
++		case MasstransportAnalysisEnum : return "MasstransportAnalysis";
++		case MasstransportSolutionEnum : return "MasstransportSolution";
++		case MatdamageiceEnum : return "Matdamageice";
++		case MatenhancediceEnum : return "Matenhancedice";
++		case MaterialsBetaEnum : return "MaterialsBeta";
++		case MaterialsEarthDensityEnum : return "MaterialsEarthDensity";
++		case MaterialsEnum : return "Materials";
++		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
++		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
++		case MaterialsLithosphereDensityEnum : return "MaterialsLithosphereDensity";
++		case MaterialsLithosphereShearModulusEnum : return "MaterialsLithosphereShearModulus";
++		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
++		case MaterialsMantleShearModulusEnum : return "MaterialsMantleShearModulus";
++		case MaterialsMeltingpointEnum : return "MaterialsMeltingpoint";
++		case MaterialsMixedLayerCapacityEnum : return "MaterialsMixedLayerCapacity";
++		case MaterialsMuWaterEnum : return "MaterialsMuWater";
++		case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw";
++		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
++		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
++		case MaterialsRhoSeawaterEnum : return "MaterialsRhoSeawater";
++		case MaterialsTemperateiceconductivityEnum : return "MaterialsTemperateiceconductivity";
++		case MaterialsThermalconductivityEnum : return "MaterialsThermalconductivity";
++		case MaterialsThermalExchangeVelocityEnum : return "MaterialsThermalExchangeVelocity";
++		case MatestarEnum : return "Matestar";
++		case MaticeEnum : return "Matice";
++		case MatlithoEnum : return "Matlitho";
++		case MatparEnum : return "Matpar";
++		case MatrixParamEnum : return "MatrixParam";
++		case MaxAbsVxEnum : return "MaxAbsVx";
++		case MaxAbsVyEnum : return "MaxAbsVy";
++		case MaxAbsVzEnum : return "MaxAbsVz";
++		case MaxDivergenceEnum : return "MaxDivergence";
++		case MaxVelEnum : return "MaxVel";
++		case MaxVxEnum : return "MaxVx";
++		case MaxVyEnum : return "MaxVy";
++		case MaxVzEnum : return "MaxVz";
++		case MelangeEnum : return "Melange";
++		case MeltingAnalysisEnum : return "MeltingAnalysis";
++		case MeshElementsEnum : return "MeshElements";
++		case MeshLatEnum : return "MeshLat";
++		case MeshLongEnum : return "MeshLong";
++		case MeshNumberofelementsEnum : return "MeshNumberofelements";
++		case MeshXEnum : return "MeshX";
++		case MeshYEnum : return "MeshY";
++		case MINIcondensedEnum : return "MINIcondensed";
++		case MINIEnum : return "MINI";
++		case MinVelEnum : return "MinVel";
++		case MinVxEnum : return "MinVx";
++		case MinVyEnum : return "MinVy";
++		case MinVzEnum : return "MinVz";
++		case MismipFloatingMeltRateEnum : return "MismipFloatingMeltRate";
++		case MoulinEnum : return "Moulin";
++		case MpiDenseEnum : return "MpiDense";
++		case MpiEnum : return "Mpi";
++		case MpiSparseEnum : return "MpiSparse";
++		case MumpsEnum : return "Mumps";
++		case NewDamageEnum : return "NewDamage";
++		case NodalEnum : return "Nodal";
++		case NodalvalueEnum : return "Nodalvalue";
++		case NodeSIdEnum : return "NodeSId";
++		case NoneApproximationEnum : return "NoneApproximation";
++		case NoneEnum : return "None";
++		case NumberedcostfunctionEnum : return "Numberedcostfunction";
++		case NumericalfluxEnum : return "Numericalflux";
++		case OldGradientEnum : return "OldGradient";
++		case OneLayerP4zEnum : return "OneLayerP4z";
++		case OpenEnum : return "Open";
++		case OptionEnum : return "Option";
++		case Outputdefinition100Enum : return "Outputdefinition100";
++		case Outputdefinition1Enum : return "Outputdefinition1";
++		case P0ArrayEnum : return "P0Array";
++		case P1bubblecondensedEnum : return "P1bubblecondensed";
++		case P1bubbleEnum : return "P1bubble";
++		case P1DGEnum : return "P1DG";
++		case P1P1Enum : return "P1P1";
++		case P1P1GLSEnum : return "P1P1GLS";
++		case P1xP2Enum : return "P1xP2";
++		case P1xP3Enum : return "P1xP3";
++		case P1xP4Enum : return "P1xP4";
++		case P2bubblecondensedEnum : return "P2bubblecondensed";
++		case P2bubbleEnum : return "P2bubble";
++		case P2Enum : return "P2";
++		case P2xP1Enum : return "P2xP1";
++		case P2xP4Enum : return "P2xP4";
++		case PatersonEnum : return "Paterson";
++		case PengridEnum : return "Pengrid";
++		case PenpairEnum : return "Penpair";
++		case PentaEnum : return "Penta";
++		case PentaInputEnum : return "PentaInput";
++		case ProfilerEnum : return "Profiler";
++		case ProfilingCurrentFlopsEnum : return "ProfilingCurrentFlops";
++		case ProfilingCurrentMemEnum : return "ProfilingCurrentMem";
++		case ProfilingSolutionTimeEnum : return "ProfilingSolutionTime";
++		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
++		case QmuVariabledescriptorsEnum : return "QmuVariabledescriptors";
++		case RegionaloutputEnum : return "Regionaloutput";
++		case RegularEnum : return "Regular";
++		case ResetPenaltiesEnum : return "ResetPenalties";
++		case RiftfrontEnum : return "Riftfront";
++		case ScaledEnum : return "Scaled";
++		case SealevelAbsoluteEnum : return "SealevelAbsolute";
++		case SealevelEmotionEnum : return "SealevelEmotion";
++		case SealevelEustaticEnum : return "SealevelEustatic";
++		case SealevelInertiaTensorXZEnum : return "SealevelInertiaTensorXZ";
++		case SealevelInertiaTensorYZEnum : return "SealevelInertiaTensorYZ";
++		case SealevelInertiaTensorZZEnum : return "SealevelInertiaTensorZZ";
++		case SealevelNmotionEnum : return "SealevelNmotion";
++		case SealevelriseAnalysisEnum : return "SealevelriseAnalysis";
++		case SealevelriseNumRequestedOutputsEnum : return "SealevelriseNumRequestedOutputs";
++		case SealevelriseSolutionEnum : return "SealevelriseSolution";
++		case SealevelriseStericRateEnum : return "SealevelriseStericRate";
++		case SealevelUmotionEnum : return "SealevelUmotion";
++		case SedimentHeadStackedEnum : return "SedimentHeadStacked";
++		case SedimentHeadTimeAverageEnum : return "SedimentHeadTimeAverage";
++		case SegEnum : return "Seg";
++		case SegInputEnum : return "SegInput";
++		case SegmentEnum : return "Segment";
++		case SegmentRiftfrontEnum : return "SegmentRiftfront";
++		case SeparateEnum : return "Separate";
++		case SeqEnum : return "Seq";
++		case SettingsLowmemEnum : return "SettingsLowmem";
++		case SIAApproximationEnum : return "SIAApproximation";
++		case SigmaVMEnum : return "SigmaVM";
++		case SmbAnalysisEnum : return "SmbAnalysis";
++		case SMBcomponentsEnum : return "SMBcomponents";
++		case SMBd18opddEnum : return "SMBd18opdd";
++		case SmbDesfacEnum : return "SmbDesfac";
++		case SmbDpermilEnum : return "SmbDpermil";
++		case SmbDzAddEnum : return "SmbDzAdd";
++		case SmbFACEnum : return "SmbFAC";
++		case SMBforcingEnum : return "SMBforcing";
++		case SMBgcmEnum : return "SMBgcm";
++		case SMBgembEnum : return "SMBgemb";
++		case SMBgradientselaEnum : return "SMBgradientsela";
++		case SMBgradientsEnum : return "SMBgradients";
++		case SMBhenningEnum : return "SMBhenning";
++		case SmbMAddEnum : return "SmbMAdd";
++		case SMBmeltcomponentsEnum : return "SMBmeltcomponents";
++		case SmbOutputFreqEnum : return "SmbOutputFreq";
++		case SMBpddEnum : return "SMBpdd";
++		case SmbRlapsEnum : return "SmbRlaps";
++		case SmbRlapslgmEnum : return "SmbRlapslgm";
++		case SmbSolutionEnum : return "SmbSolution";
++		case SmoothAnalysisEnum : return "SmoothAnalysis";
++		case SoftMigrationEnum : return "SoftMigration";
++		case SpcDynamicEnum : return "SpcDynamic";
++		case SpcStaticEnum : return "SpcStatic";
++		case SpcTransientEnum : return "SpcTransient";
++		case SSAApproximationEnum : return "SSAApproximation";
++		case SSAFSApproximationEnum : return "SSAFSApproximation";
++		case SSAHOApproximationEnum : return "SSAHOApproximation";
++		case SsetEnum : return "Sset";
++		case SteadystateSolutionEnum : return "SteadystateSolution";
++		case StressbalanceAnalysisEnum : return "StressbalanceAnalysis";
++		case StressbalanceConvergenceNumStepsEnum : return "StressbalanceConvergenceNumSteps";
++		case StressbalanceSIAAnalysisEnum : return "StressbalanceSIAAnalysis";
++		case StressbalanceSolutionEnum : return "StressbalanceSolution";
++		case StressbalanceVerticalAnalysisEnum : return "StressbalanceVerticalAnalysis";
++		case StressIntensityFactorEnum : return "StressIntensityFactor";
++		case StringArrayParamEnum : return "StringArrayParam";
+ 		case StringExternalResultEnum : return "StringExternalResult";
+-		case StepEnum : return "Step";
+-		case TimeEnum : return "Time";
+-		case WaterColumnOldEnum : return "WaterColumnOld";
+-		case SurfaceObservationEnum : return "SurfaceObservation";
+-		case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
+-		case OutputdefinitionEnum : return "Outputdefinition";
+-		case Outputdefinition1Enum : return "Outputdefinition1";
+-		case Outputdefinition2Enum : return "Outputdefinition2";
+-		case Outputdefinition3Enum : return "Outputdefinition3";
+-		case Outputdefinition4Enum : return "Outputdefinition4";
+-		case Outputdefinition5Enum : return "Outputdefinition5";
+-		case Outputdefinition6Enum : return "Outputdefinition6";
+-		case Outputdefinition7Enum : return "Outputdefinition7";
+-		case Outputdefinition8Enum : return "Outputdefinition8";
+-		case Outputdefinition9Enum : return "Outputdefinition9";
++		case StringParamEnum : return "StringParam";
++		case SubelementMigration2Enum : return "SubelementMigration2";
++		case SubelementMigration3Enum : return "SubelementMigration3";
++		case SubelementMigrationEnum : return "SubelementMigration";
++		case SurfaceCrevasseEnum : return "SurfaceCrevasse";
++		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
++		case TaylorHoodEnum : return "TaylorHood";
++		case TemperaturePDDEnum : return "TemperaturePDD";
++		case TetraEnum : return "Tetra";
++		case TetraInputEnum : return "TetraInput";
++		case ThermalAnalysisEnum : return "ThermalAnalysis";
++		case ThermalSolutionEnum : return "ThermalSolution";
++		case ThermalSpctemperatureEnum : return "ThermalSpctemperature";
++		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
++		case TotalFloatingBmbEnum : return "TotalFloatingBmb";
++		case TotalFloatingBmbScaledEnum : return "TotalFloatingBmbScaled";
++		case TotalGroundedBmbEnum : return "TotalGroundedBmb";
++		case TotalGroundedBmbScaledEnum : return "TotalGroundedBmbScaled";
++		case TotalSmbEnum : return "TotalSmb";
++		case TotalSmbScaledEnum : return "TotalSmbScaled";
++		case TransientArrayParamEnum : return "TransientArrayParam";
++		case TransientInputEnum : return "TransientInput";
++		case TransientParamEnum : return "TransientParam";
++		case TransientSolutionEnum : return "TransientSolution";
++		case TriaEnum : return "Tria";
++		case TriaInputEnum : return "TriaInput";
++		case UzawaPressureAnalysisEnum : return "UzawaPressureAnalysis";
++		case VectorParamEnum : return "VectorParam";
++		case VertexEnum : return "Vertex";
++		case VertexPIdEnum : return "VertexPId";
++		case VertexSIdEnum : return "VertexSId";
++		case VerticesEnum : return "Vertices";
++		case ViscousHeatingEnum : return "ViscousHeating";
++		case WaterEnum : return "Water";
++		case WorldCommEnum : return "WorldComm";
++		case XTaylorHoodEnum : return "XTaylorHood";
++		case XYEnum : return "XY";
++		case XYZEnum : return "XYZ";
++		case BalancethicknessD0Enum : return "BalancethicknessD0";
++		case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient";
++		case BilinearInterpEnum : return "BilinearInterp";
++		case CalvingdevCoeffEnum : return "CalvingdevCoeff";
++		case DeviatoricStressEnum : return "DeviatoricStress";
++		case EtaAbsGradientEnum : return "EtaAbsGradient";
++		case MeshZEnum : return "MeshZ";
++		case NearestInterpEnum : return "NearestInterp";
+ 		case Outputdefinition10Enum : return "Outputdefinition10";
+ 		case Outputdefinition11Enum : return "Outputdefinition11";
+ 		case Outputdefinition12Enum : return "Outputdefinition12";
+@@ -672,6 +1035,7 @@
+ 		case Outputdefinition27Enum : return "Outputdefinition27";
+ 		case Outputdefinition28Enum : return "Outputdefinition28";
+ 		case Outputdefinition29Enum : return "Outputdefinition29";
++		case Outputdefinition2Enum : return "Outputdefinition2";
+ 		case Outputdefinition30Enum : return "Outputdefinition30";
+ 		case Outputdefinition31Enum : return "Outputdefinition31";
+ 		case Outputdefinition32Enum : return "Outputdefinition32";
+@@ -682,6 +1046,7 @@
+ 		case Outputdefinition37Enum : return "Outputdefinition37";
+ 		case Outputdefinition38Enum : return "Outputdefinition38";
+ 		case Outputdefinition39Enum : return "Outputdefinition39";
++		case Outputdefinition3Enum : return "Outputdefinition3";
+ 		case Outputdefinition40Enum : return "Outputdefinition40";
+ 		case Outputdefinition41Enum : return "Outputdefinition41";
+ 		case Outputdefinition42Enum : return "Outputdefinition42";
+@@ -692,6 +1057,7 @@
+ 		case Outputdefinition47Enum : return "Outputdefinition47";
+ 		case Outputdefinition48Enum : return "Outputdefinition48";
+ 		case Outputdefinition49Enum : return "Outputdefinition49";
++		case Outputdefinition4Enum : return "Outputdefinition4";
+ 		case Outputdefinition50Enum : return "Outputdefinition50";
+ 		case Outputdefinition51Enum : return "Outputdefinition51";
+ 		case Outputdefinition52Enum : return "Outputdefinition52";
+@@ -702,6 +1068,7 @@
+ 		case Outputdefinition57Enum : return "Outputdefinition57";
+ 		case Outputdefinition58Enum : return "Outputdefinition58";
+ 		case Outputdefinition59Enum : return "Outputdefinition59";
++		case Outputdefinition5Enum : return "Outputdefinition5";
+ 		case Outputdefinition60Enum : return "Outputdefinition60";
+ 		case Outputdefinition61Enum : return "Outputdefinition61";
+ 		case Outputdefinition62Enum : return "Outputdefinition62";
+@@ -712,6 +1079,7 @@
+ 		case Outputdefinition67Enum : return "Outputdefinition67";
+ 		case Outputdefinition68Enum : return "Outputdefinition68";
+ 		case Outputdefinition69Enum : return "Outputdefinition69";
++		case Outputdefinition6Enum : return "Outputdefinition6";
+ 		case Outputdefinition70Enum : return "Outputdefinition70";
+ 		case Outputdefinition71Enum : return "Outputdefinition71";
+ 		case Outputdefinition72Enum : return "Outputdefinition72";
+@@ -722,6 +1090,7 @@
+ 		case Outputdefinition77Enum : return "Outputdefinition77";
+ 		case Outputdefinition78Enum : return "Outputdefinition78";
+ 		case Outputdefinition79Enum : return "Outputdefinition79";
++		case Outputdefinition7Enum : return "Outputdefinition7";
+ 		case Outputdefinition80Enum : return "Outputdefinition80";
+ 		case Outputdefinition81Enum : return "Outputdefinition81";
+ 		case Outputdefinition82Enum : return "Outputdefinition82";
+@@ -732,6 +1101,7 @@
+ 		case Outputdefinition87Enum : return "Outputdefinition87";
+ 		case Outputdefinition88Enum : return "Outputdefinition88";
+ 		case Outputdefinition89Enum : return "Outputdefinition89";
++		case Outputdefinition8Enum : return "Outputdefinition8";
+ 		case Outputdefinition90Enum : return "Outputdefinition90";
+ 		case Outputdefinition91Enum : return "Outputdefinition91";
+ 		case Outputdefinition92Enum : return "Outputdefinition92";
+@@ -742,386 +1112,16 @@
+ 		case Outputdefinition97Enum : return "Outputdefinition97";
+ 		case Outputdefinition98Enum : return "Outputdefinition98";
+ 		case Outputdefinition99Enum : return "Outputdefinition99";
+-		case Outputdefinition100Enum : return "Outputdefinition100";
++		case Outputdefinition9Enum : return "Outputdefinition9";
+ 		case OutputdefinitionListEnum : return "OutputdefinitionList";
+-		case MassfluxatgateEnum : return "Massfluxatgate";
+-		case NodalvalueEnum : return "Nodalvalue";
+-		case RegionaloutputEnum : return "Regionaloutput";
+-		case VxObsEnum : return "VxObs";
+-		case VyObsEnum : return "VyObs";
+-		case NumberedcostfunctionEnum : return "Numberedcostfunction";
+-		case CfsurfacesquareEnum : return "Cfsurfacesquare";
+-		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
+-		case AbsoluteEnum : return "Absolute";
+-		case IncrementalEnum : return "Incremental";
+-		case AugmentedLagrangianREnum : return "AugmentedLagrangianR";
+-		case AugmentedLagrangianRhopEnum : return "AugmentedLagrangianRhop";
+-		case AugmentedLagrangianRlambdaEnum : return "AugmentedLagrangianRlambda";
+-		case AugmentedLagrangianRholambdaEnum : return "AugmentedLagrangianRholambda";
+-		case AugmentedLagrangianThetaEnum : return "AugmentedLagrangianTheta";
+-		case NoneEnum : return "None";
+-		case AggressiveMigrationEnum : return "AggressiveMigration";
+-		case SoftMigrationEnum : return "SoftMigration";
+-		case SubelementMigrationEnum : return "SubelementMigration";
+-		case SubelementMigration2Enum : return "SubelementMigration2";
+-		case SubelementMigration3Enum : return "SubelementMigration3";
+-		case SubelementMigration4Enum : return "SubelementMigration4";
+-		case ContactEnum : return "Contact";
+-		case GroundingOnlyEnum : return "GroundingOnly";
+-		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
+-		case AdjointEnum : return "Adjoint";
+-		case ColinearEnum : return "Colinear";
+-		case ControlSteadyEnum : return "ControlSteady";
+-		case FsetEnum : return "Fset";
+-		case Gradient1Enum : return "Gradient1";
+-		case Gradient2Enum : return "Gradient2";
+-		case Gradient3Enum : return "Gradient3";
+-		case GradientEnum : return "Gradient";
+-		case GroundinglineMigrationEnum : return "GroundinglineMigration";
+-		case GsetEnum : return "Gset";
+-		case IndexEnum : return "Index";
+-		case IndexedEnum : return "Indexed";
+-		case IntersectEnum : return "Intersect";
+-		case NodalEnum : return "Nodal";
+-		case OldGradientEnum : return "OldGradient";
+-		case OutputBufferPointerEnum : return "OutputBufferPointer";
+-		case OutputBufferSizePointerEnum : return "OutputBufferSizePointer";
+-		case OutputFilePointerEnum : return "OutputFilePointer";
+-		case ToolkitsFileNameEnum : return "ToolkitsFileName";
+-		case RootPathEnum : return "RootPath";
+-		case OutputFileNameEnum : return "OutputFileName";
+-		case InputFileNameEnum : return "InputFileName";
+-		case LockFileNameEnum : return "LockFileName";
+-		case RestartFileNameEnum : return "RestartFileName";
+-		case ToolkitsTypesEnum : return "ToolkitsTypes";
+-		case ToolkitsOptionsAnalysesEnum : return "ToolkitsOptionsAnalyses";
+-		case ToolkitsOptionsStringsEnum : return "ToolkitsOptionsStrings";
+-		case QmuErrNameEnum : return "QmuErrName";
+-		case QmuInNameEnum : return "QmuInName";
+-		case QmuOutNameEnum : return "QmuOutName";
+-		case RegularEnum : return "Regular";
+-		case ScaledEnum : return "Scaled";
+-		case SeparateEnum : return "Separate";
+-		case SsetEnum : return "Sset";
+-		case DenseEnum : return "Dense";
+-		case MpiDenseEnum : return "MpiDense";
+-		case MpiSparseEnum : return "MpiSparse";
+-		case SeqEnum : return "Seq";
+-		case MpiEnum : return "Mpi";
+-		case MumpsEnum : return "Mumps";
+-		case GslEnum : return "Gsl";
+-		case CuffeyEnum : return "Cuffey";
+-		case BuddJackaEnum : return "BuddJacka";
+-		case CuffeyTemperateEnum : return "CuffeyTemperate";
+-		case PatersonEnum : return "Paterson";
+-		case ArrheniusEnum : return "Arrhenius";
+-		case LliboutryDuvalEnum : return "LliboutryDuval";
+-		case ExtrapolationVariableEnum : return "ExtrapolationVariable";
+-		case IceMaskNodeActivationEnum : return "IceMaskNodeActivation";
+-		case LevelsetfunctionSlopeXEnum : return "LevelsetfunctionSlopeX";
+-		case LevelsetfunctionSlopeYEnum : return "LevelsetfunctionSlopeY";
+-		case LevelsetfunctionPicardEnum : return "LevelsetfunctionPicard";
+-		case LevelsetReinitFrequencyEnum : return "LevelsetReinitFrequency";
+-		case SealevelEnum : return "Sealevel";
+-		case SealevelUmotionEnum : return "SealevelUmotion";
+-		case SealevelNmotionEnum : return "SealevelNmotion";
+-		case SealevelEmotionEnum : return "SealevelEmotion";
+-		case SealevelAbsoluteEnum : return "SealevelAbsolute";
+-		case SealevelEustaticEnum : return "SealevelEustatic";
+-		case SealevelInertiaTensorXZEnum : return "SealevelInertiaTensorXZ";
+-		case SealevelInertiaTensorYZEnum : return "SealevelInertiaTensorYZ";
+-		case SealevelInertiaTensorZZEnum : return "SealevelInertiaTensorZZ";
+ 		case SealevelObsEnum : return "SealevelObs";
+ 		case SealevelWeightsEnum : return "SealevelWeights";
+-		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
+-		case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
+-		case SealevelriseReltolEnum : return "SealevelriseReltol";
+-		case SealevelriseAbstolEnum : return "SealevelriseAbstol";
+-		case SealevelriseRigidEnum : return "SealevelriseRigid";
+-		case SealevelriseElasticEnum : return "SealevelriseElastic";
+-		case SealevelriseRotationEnum : return "SealevelriseRotation";
+-		case SealevelriseTidalLoveHEnum : return "SealevelriseTidalLoveH";
+-		case SealevelriseTidalLoveKEnum : return "SealevelriseTidalLoveK";
+-		case SealevelriseFluidLoveEnum : return "SealevelriseFluidLove";
+-		case SealevelriseEquatorialMoiEnum : return "SealevelriseEquatorialMoi";
+-		case SealevelrisePolarMoiEnum : return "SealevelrisePolarMoi";
+-		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
+-		case SealevelriseOceanAreaScalingEnum : return "SealevelriseOceanAreaScaling";
+-		case SealevelriseStericRateEnum : return "SealevelriseStericRate";
+-		case SealevelriseGElasticEnum : return "SealevelriseGElastic";
+-		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
+-		case SealevelriseHElasticEnum : return "SealevelriseHElastic";
+-		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
+-		case SealevelriseRequestedOutputsEnum : return "SealevelriseRequestedOutputs";
+-		case SealevelriseNumRequestedOutputsEnum : return "SealevelriseNumRequestedOutputs";
+-		case LoveNfreqEnum : return "LoveNfreq";
+-		case LoveFrequenciesEnum : return "LoveFrequencies";
+-		case LoveShNmaxEnum : return "LoveShNmax";
+-		case LoveShNminEnum : return "LoveShNmin";
+-		case LoveG0Enum : return "LoveG0";
+-		case LoveR0Enum : return "LoveR0";
+-		case LoveMu0Enum : return "LoveMu0";
+-		case LoveAllowLayerDeletionEnum : return "LoveAllowLayerDeletion";
+-		case LoveForcingTypeEnum : return "LoveForcingType";
+-		case LoveHrEnum : return "LoveHr";
+-		case LoveKrEnum : return "LoveKr";
+-		case LoveLrEnum : return "LoveLr";
+-		case LoveHiEnum : return "LoveHi";
+-		case LoveKiEnum : return "LoveKi";
+-		case LoveLiEnum : return "LoveLi";
+-		case LoveKernelsEnum : return "LoveKernels";
+-		case LoveKernelsRealEnum : return "LoveKernelsReal";
+-		case LoveKernelsImagEnum : return "LoveKernelsImag";
+-		case EsaUmotionEnum : return "EsaUmotion";
+-		case EsaNmotionEnum : return "EsaNmotion";
+-		case EsaEmotionEnum : return "EsaEmotion";
+-		case EsaXmotionEnum : return "EsaXmotion";
+-		case EsaYmotionEnum : return "EsaYmotion";
+-		case EsaHemisphereEnum : return "EsaHemisphere";
+-		case EsaStrainratexxEnum : return "EsaStrainratexx";
+-		case EsaStrainratexyEnum : return "EsaStrainratexy";
+-		case EsaStrainrateyyEnum : return "EsaStrainrateyy";
+-		case EsaRotationrateEnum : return "EsaRotationrate";
+-		case EsaDeltathicknessEnum : return "EsaDeltathickness";
+-		case EsaUElasticEnum : return "EsaUElastic";
+-		case EsaHElasticEnum : return "EsaHElastic";
+-		case EsaTransitionsEnum : return "EsaTransitions";
+-		case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
+-		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
+-		case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
+-		case AmrTypeEnum : return "AmrType";
+-		case AmrRestartEnum : return "AmrRestart";
+-		case AmrNeopzEnum : return "AmrNeopz";
+-		case AmrLevelMaxEnum : return "AmrLevelMax";
+-		case AmrLagEnum : return "AmrLag";
+-		case AmrBamgEnum : return "AmrBamg";
+-		case AmrHminEnum : return "AmrHmin";
+-		case AmrHmaxEnum : return "AmrHmax";
+-		case AmrFieldEnum : return "AmrField";
+-		case AmrErrEnum : return "AmrErr";
+-		case AmrKeepMetricEnum : return "AmrKeepMetric";
+-		case AmrGradationEnum : return "AmrGradation";
+-		case AmrGroundingLineResolutionEnum : return "AmrGroundingLineResolution";
+-		case AmrGroundingLineDistanceEnum : return "AmrGroundingLineDistance";
+-		case AmrIceFrontResolutionEnum : return "AmrIceFrontResolution";
+-		case AmrIceFrontDistanceEnum : return "AmrIceFrontDistance";
+-		case AmrThicknessErrorResolutionEnum : return "AmrThicknessErrorResolution";
+-		case AmrThicknessErrorThresholdEnum : return "AmrThicknessErrorThreshold";
+-		case AmrThicknessErrorGroupThresholdEnum : return "AmrThicknessErrorGroupThreshold";
+-		case AmrThicknessErrorMaximumEnum : return "AmrThicknessErrorMaximum";
+-		case AmrDeviatoricErrorResolutionEnum : return "AmrDeviatoricErrorResolution";
+-		case AmrDeviatoricErrorThresholdEnum : return "AmrDeviatoricErrorThreshold";
+-		case AmrDeviatoricErrorGroupThresholdEnum : return "AmrDeviatoricErrorGroupThreshold";
+-		case AmrDeviatoricErrorMaximumEnum : return "AmrDeviatoricErrorMaximum";
+-		case DeviatoricStressErrorEstimatorEnum : return "DeviatoricStressErrorEstimator";
+-		case ThicknessErrorEstimatorEnum : return "ThicknessErrorEstimator";
+-		case ParametersENDEnum : return "ParametersEND";
+-		case ApproximationEnum : return "Approximation";
+-		case NoneApproximationEnum : return "NoneApproximation";
+-		case SIAApproximationEnum : return "SIAApproximation";
+-		case SSAApproximationEnum : return "SSAApproximation";
+-		case SSAHOApproximationEnum : return "SSAHOApproximation";
+-		case SSAFSApproximationEnum : return "SSAFSApproximation";
+-		case L1L2ApproximationEnum : return "L1L2Approximation";
+-		case HOApproximationEnum : return "HOApproximation";
+-		case HOFSApproximationEnum : return "HOFSApproximation";
+-		case FSApproximationEnum : return "FSApproximation";
+-		case FSvelocityEnum : return "FSvelocity";
+-		case FSpressureEnum : return "FSpressure";
+-		case InputsENDEnum : return "InputsEND";
+-		case XYEnum : return "XY";
+-		case XYZEnum : return "XYZ";
+-		case GenericParamEnum : return "GenericParam";
+-		case BoolInputEnum : return "BoolInput";
+-		case BoolParamEnum : return "BoolParam";
+-		case ContourEnum : return "Contour";
+-		case ControlInputEnum : return "ControlInput";
+-		case DatasetInputEnum : return "DatasetInput";
+-		case DoubleInputEnum : return "DoubleInput";
+-		case DoubleArrayInputEnum : return "DoubleArrayInput";
+-		case DataSetParamEnum : return "DataSetParam";
+-		case DoubleMatArrayParamEnum : return "DoubleMatArrayParam";
+-		case DoubleMatParamEnum : return "DoubleMatParam";
+-		case DoubleParamEnum : return "DoubleParam";
+-		case DoubleVecParamEnum : return "DoubleVecParam";
+-		case ElementEnum : return "Element";
+-		case ElementHookEnum : return "ElementHook";
+-		case HookEnum : return "Hook";
+-		case ExternalResultEnum : return "ExternalResult";
+-		case FileParamEnum : return "FileParam";
+-		case InputEnum : return "Input";
+-		case IntInputEnum : return "IntInput";
+-		case IntParamEnum : return "IntParam";
+-		case IntVecParamEnum : return "IntVecParam";
+-		case TransientParamEnum : return "TransientParam";
+-		case TransientArrayParamEnum : return "TransientArrayParam";
+-		case MaticeEnum : return "Matice";
+-		case MatlithoEnum : return "Matlitho";
+-		case MatdamageiceEnum : return "Matdamageice";
+-		case MatenhancediceEnum : return "Matenhancedice";
+-		case MatestarEnum : return "Matestar";
+-		case MatparEnum : return "Matpar";
+-		case NodeEnum : return "Node";
+-		case NumericalfluxEnum : return "Numericalflux";
+-		case NeumannfluxEnum : return "Neumannflux";
+-		case ParamEnum : return "Param";
+-		case MoulinEnum : return "Moulin";
+-		case PengridEnum : return "Pengrid";
+-		case PenpairEnum : return "Penpair";
+-		case ProfilerEnum : return "Profiler";
+-		case MatrixParamEnum : return "MatrixParam";
+-		case MassconEnum : return "Masscon";
+-		case MassconaxpbyEnum : return "Massconaxpby";
+-		case NodeSIdEnum : return "NodeSId";
+-		case ElementSIdEnum : return "ElementSId";
+-		case VectorParamEnum : return "VectorParam";
+-		case RiftfrontEnum : return "Riftfront";
+-		case SegmentEnum : return "Segment";
+-		case SegmentRiftfrontEnum : return "SegmentRiftfront";
+-		case SpcDynamicEnum : return "SpcDynamic";
+-		case SpcStaticEnum : return "SpcStatic";
+-		case SpcTransientEnum : return "SpcTransient";
+-		case StringArrayParamEnum : return "StringArrayParam";
+-		case StringParamEnum : return "StringParam";
+-		case SegEnum : return "Seg";
+-		case SegInputEnum : return "SegInput";
+-		case TriaEnum : return "Tria";
+-		case TriaInputEnum : return "TriaInput";
+-		case TetraEnum : return "Tetra";
+-		case TetraInputEnum : return "TetraInput";
+-		case PentaEnum : return "Penta";
+-		case PentaInputEnum : return "PentaInput";
+-		case VertexEnum : return "Vertex";
+-		case VertexPIdEnum : return "VertexPId";
+-		case VertexSIdEnum : return "VertexSId";
+-		case OptionEnum : return "Option";
+-		case GenericOptionEnum : return "GenericOption";
+-		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
+-		case AdjointBalancethickness2AnalysisEnum : return "AdjointBalancethickness2Analysis";
+-		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
+-		case DefaultAnalysisEnum : return "DefaultAnalysis";
+-		case BalancethicknessAnalysisEnum : return "BalancethicknessAnalysis";
+-		case BalancethicknessSolutionEnum : return "BalancethicknessSolution";
+-		case Balancethickness2AnalysisEnum : return "Balancethickness2Analysis";
+-		case Balancethickness2SolutionEnum : return "Balancethickness2Solution";
+-		case BalancethicknessSoftAnalysisEnum : return "BalancethicknessSoftAnalysis";
+-		case BalancethicknessSoftSolutionEnum : return "BalancethicknessSoftSolution";
+-		case BalancevelocityAnalysisEnum : return "BalancevelocityAnalysis";
+-		case BalancevelocitySolutionEnum : return "BalancevelocitySolution";
+-		case L2ProjectionEPLAnalysisEnum : return "L2ProjectionEPLAnalysis";
+-		case L2ProjectionBaseAnalysisEnum : return "L2ProjectionBaseAnalysis";
+-		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+-		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
+-		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
+-		case StressbalanceAnalysisEnum : return "StressbalanceAnalysis";
+-		case StressbalanceSIAAnalysisEnum : return "StressbalanceSIAAnalysis";
+-		case StressbalanceSolutionEnum : return "StressbalanceSolution";
+-		case StressbalanceVerticalAnalysisEnum : return "StressbalanceVerticalAnalysis";
+-		case EnthalpyAnalysisEnum : return "EnthalpyAnalysis";
+-		case HydrologyShreveAnalysisEnum : return "HydrologyShreveAnalysis";
+-		case HydrologyDCInefficientAnalysisEnum : return "HydrologyDCInefficientAnalysis";
+-		case HydrologyDCEfficientAnalysisEnum : return "HydrologyDCEfficientAnalysis";
+-		case HydrologySommersAnalysisEnum : return "HydrologySommersAnalysis";
+-		case HydrologySolutionEnum : return "HydrologySolution";
+-		case MeltingAnalysisEnum : return "MeltingAnalysis";
+-		case MasstransportAnalysisEnum : return "MasstransportAnalysis";
+-		case MasstransportSolutionEnum : return "MasstransportSolution";
+-		case FreeSurfaceBaseAnalysisEnum : return "FreeSurfaceBaseAnalysis";
+-		case FreeSurfaceTopAnalysisEnum : return "FreeSurfaceTopAnalysis";
+-		case ExtrudeFromBaseAnalysisEnum : return "ExtrudeFromBaseAnalysis";
+-		case ExtrudeFromTopAnalysisEnum : return "ExtrudeFromTopAnalysis";
+-		case DepthAverageAnalysisEnum : return "DepthAverageAnalysis";
+-		case SealevelriseSolutionEnum : return "SealevelriseSolution";
+-		case SealevelriseAnalysisEnum : return "SealevelriseAnalysis";
+-		case SteadystateSolutionEnum : return "SteadystateSolution";
+-		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+-		case SmoothAnalysisEnum : return "SmoothAnalysis";
+-		case ThermalAnalysisEnum : return "ThermalAnalysis";
+-		case ThermalSolutionEnum : return "ThermalSolution";
+-		case TransientSolutionEnum : return "TransientSolution";
+-		case UzawaPressureAnalysisEnum : return "UzawaPressureAnalysis";
+-		case GiaSolutionEnum : return "GiaSolution";
+-		case GiaIvinsAnalysisEnum : return "GiaIvinsAnalysis";
+-		case EsaSolutionEnum : return "EsaSolution";
+-		case EsaAnalysisEnum : return "EsaAnalysis";
+-		case LoveSolutionEnum : return "LoveSolution";
+-		case LoveAnalysisEnum : return "LoveAnalysis";
+-		case LevelsetAnalysisEnum : return "LevelsetAnalysis";
+-		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+-		case GaussSegEnum : return "GaussSeg";
+-		case GaussTriaEnum : return "GaussTria";
+-		case GaussTetraEnum : return "GaussTetra";
+-		case GaussPentaEnum : return "GaussPenta";
++		case StrainRateEnum : return "StrainRate";
++		case StressbalanceViscosityOvershootEnum : return "StressbalanceViscosityOvershoot";
++		case StressTensorEnum : return "StressTensor";
++		case SubelementMigration4Enum : return "SubelementMigration4";
++		case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
+ 		case TriangleInterpEnum : return "TriangleInterp";
+-		case BilinearInterpEnum : return "BilinearInterp";
+-		case NearestInterpEnum : return "NearestInterp";
+-		case MinVelEnum : return "MinVel";
+-		case MaxVelEnum : return "MaxVel";
+-		case MinVxEnum : return "MinVx";
+-		case MaxVxEnum : return "MaxVx";
+-		case MaxAbsVxEnum : return "MaxAbsVx";
+-		case MinVyEnum : return "MinVy";
+-		case MaxVyEnum : return "MaxVy";
+-		case MaxAbsVyEnum : return "MaxAbsVy";
+-		case MinVzEnum : return "MinVz";
+-		case MaxVzEnum : return "MaxVz";
+-		case MaxAbsVzEnum : return "MaxAbsVz";
+-		case FloatingAreaEnum : return "FloatingArea";
+-		case FloatingAreaScaledEnum : return "FloatingAreaScaled";
+-		case GroundedAreaEnum : return "GroundedArea";
+-		case GroundedAreaScaledEnum : return "GroundedAreaScaled";
+-		case IceMassEnum : return "IceMass";
+-		case IceMassScaledEnum : return "IceMassScaled";
+-		case IceVolumeEnum : return "IceVolume";
+-		case IceVolumeScaledEnum : return "IceVolumeScaled";
+-		case IceVolumeAboveFloatationEnum : return "IceVolumeAboveFloatation";
+-		case IceVolumeAboveFloatationScaledEnum : return "IceVolumeAboveFloatationScaled";
+-		case TotalFloatingBmbEnum : return "TotalFloatingBmb";
+-		case TotalFloatingBmbScaledEnum : return "TotalFloatingBmbScaled";
+-		case TotalGroundedBmbEnum : return "TotalGroundedBmb";
+-		case TotalGroundedBmbScaledEnum : return "TotalGroundedBmbScaled";
+-		case TotalSmbEnum : return "TotalSmb";
+-		case TotalSmbScaledEnum : return "TotalSmbScaled";
+-		case P0Enum : return "P0";
+-		case P0ArrayEnum : return "P0Array";
+-		case P1Enum : return "P1";
+-		case P1DGEnum : return "P1DG";
+-		case P1bubbleEnum : return "P1bubble";
+-		case P1bubblecondensedEnum : return "P1bubblecondensed";
+-		case P2Enum : return "P2";
+-		case P2bubbleEnum : return "P2bubble";
+-		case P2bubblecondensedEnum : return "P2bubblecondensed";
+-		case P2xP1Enum : return "P2xP1";
+-		case P1xP2Enum : return "P1xP2";
+-		case P1xP3Enum : return "P1xP3";
+-		case P1xP4Enum : return "P1xP4";
+-		case P2xP4Enum : return "P2xP4";
+-		case P1P1Enum : return "P1P1";
+-		case P1P1GLSEnum : return "P1P1GLS";
+-		case MINIEnum : return "MINI";
+-		case MINIcondensedEnum : return "MINIcondensed";
+-		case TaylorHoodEnum : return "TaylorHood";
+-		case LATaylorHoodEnum : return "LATaylorHood";
+-		case XTaylorHoodEnum : return "XTaylorHood";
+-		case OneLayerP4zEnum : return "OneLayerP4z";
+-		case CrouzeixRaviartEnum : return "CrouzeixRaviart";
+-		case LACrouzeixRaviartEnum : return "LACrouzeixRaviart";
+-		case ClosedEnum : return "Closed";
+-		case FreeEnum : return "Free";
+-		case OpenEnum : return "Open";
+-		case AirEnum : return "Air";
+-		case IceEnum : return "Ice";
+-		case MelangeEnum : return "Melange";
+-		case WaterEnum : return "Water";
+-		case DataSetEnum : return "DataSet";
+-		case ConstraintsEnum : return "Constraints";
+-		case LoadsEnum : return "Loads";
+-		case MaterialsEnum : return "Materials";
+-		case NodesEnum : return "Nodes";
+-		case ContoursEnum : return "Contours";
+-		case ParametersEnum : return "Parameters";
+-		case VerticesEnum : return "Vertices";
+-		case ResultsEnum : return "Results";
+ 		case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions";
+ 		default : return "unknown";
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22595)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22596)
+@@ -16,657 +16,1029 @@
+    int  stage=1;
+ 
+    if(stage==1){
+-	      if (strcmp(name,"FemModel")==0) return FemModelEnum;
+-	      else if (strcmp(name,"ParametersSTART")==0) return ParametersSTARTEnum;
++	      if (strcmp(name,"ParametersSTART")==0) return ParametersSTARTEnum;
+ 	      else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;
+-	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
+-	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
+-	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
+-	      else if (strcmp(name,"IcecapToEarthComm")==0) return IcecapToEarthCommEnum;
+-	      else if (strcmp(name,"ToMITgcmComm")==0) return ToMITgcmCommEnum;
+-	      else if (strcmp(name,"NumModels")==0) return NumModelsEnum;
+-	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
+-	      else if (strcmp(name,"EarthId")==0) return EarthIdEnum;
+-	      else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorGroupThreshold")==0) return AmrDeviatoricErrorGroupThresholdEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorMaximum")==0) return AmrDeviatoricErrorMaximumEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
++	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
++	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
++	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
++	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
++	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
++	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
++	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
++	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
++	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
++	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
++	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
++	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
++	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
++	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
++	      else if (strcmp(name,"AmrThicknessErrorGroupThreshold")==0) return AmrThicknessErrorGroupThresholdEnum;
++	      else if (strcmp(name,"AmrThicknessErrorMaximum")==0) return AmrThicknessErrorMaximumEnum;
++	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
++	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
++	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
++	      else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
+ 	      else if (strcmp(name,"AnalysisType")==0) return AnalysisTypeEnum;
+-	      else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
+-	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
+-	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
+-	      else if (strcmp(name,"InputToL2Project")==0) return InputToL2ProjectEnum;
+-	      else if (strcmp(name,"InputToDepthaverageIn")==0) return InputToDepthaverageInEnum;
+-	      else if (strcmp(name,"InputToDepthaverageOut")==0) return InputToDepthaverageOutEnum;
+-	      else if (strcmp(name,"InputToSmooth")==0) return InputToSmoothEnum;
+-	      else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
+-	      else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum;
+-	      else if (strcmp(name,"TimesteppingType")==0) return TimesteppingTypeEnum;
+-	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
+-	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+-	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
+-	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
+-	      else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum;
+-	      else if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+-	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
++	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
++	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
++	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
++	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
++	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
++	      else if (strcmp(name,"AutodiffCbufsize")==0) return AutodiffCbufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjects")==0) return AutodiffDependentObjectsEnum;
+-	      else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
+-	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+-	      else if (strcmp(name,"AutodiffXp")==0) return AutodiffXpEnum;
+ 	      else if (strcmp(name,"AutodiffDriver")==0) return AutodiffDriverEnum;
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
++	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
+-	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+-	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
++	      else if (strcmp(name,"AutodiffGcTriggerMaxSize")==0) return AutodiffGcTriggerMaxSizeEnum;
++	      else if (strcmp(name,"AutodiffGcTriggerRatio")==0) return AutodiffGcTriggerRatioEnum;
++	      else if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
++	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
++	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
++	      else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
+ 	      else if (strcmp(name,"AutodiffObufsize")==0) return AutodiffObufsizeEnum;
+-	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
+-	      else if (strcmp(name,"AutodiffCbufsize")==0) return AutodiffCbufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffTbufsize")==0) return AutodiffTbufsizeEnum;
+-	      else if (strcmp(name,"AutodiffGcTriggerRatio")==0) return AutodiffGcTriggerRatioEnum;
+-	      else if (strcmp(name,"AutodiffGcTriggerMaxSize")==0) return AutodiffGcTriggerMaxSizeEnum;
++	      else if (strcmp(name,"AutodiffXp")==0) return AutodiffXpEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+-	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
++	      else if (strcmp(name,"BasalforcingsBottomplumedepth")==0) return BasalforcingsBottomplumedepthEnum;
++	      else if (strcmp(name,"BasalforcingsCrustthickness")==0) return BasalforcingsCrustthicknessEnum;
++	      else if (strcmp(name,"BasalforcingsDeepwaterElevation")==0) return BasalforcingsDeepwaterElevationEnum;
++	      else if (strcmp(name,"BasalforcingsDeepwaterMeltingRate")==0) return BasalforcingsDeepwaterMeltingRateEnum;
++	      else if (strcmp(name,"BasalforcingsDtbg")==0) return BasalforcingsDtbgEnum;
+ 	      else if (strcmp(name,"Basalforcings")==0) return BasalforcingsEnum;
+-	      else if (strcmp(name,"BasalforcingsGeothermalflux")==0) return BasalforcingsGeothermalfluxEnum;
+-	      else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum;
+-	      else if (strcmp(name,"BasalforcingsFloatingiceMeltingRate")==0) return BasalforcingsFloatingiceMeltingRateEnum;
+-	      else if (strcmp(name,"BasalforcingsDeepwaterMeltingRate")==0) return BasalforcingsDeepwaterMeltingRateEnum;
+-	      else if (strcmp(name,"BasalforcingsDeepwaterElevation")==0) return BasalforcingsDeepwaterElevationEnum;
+-	      else if (strcmp(name,"BasalforcingsUpperwaterElevation")==0) return BasalforcingsUpperwaterElevationEnum;
++	      else if (strcmp(name,"BasalforcingsLowercrustheat")==0) return BasalforcingsLowercrustheatEnum;
++	      else if (strcmp(name,"BasalforcingsMantleconductivity")==0) return BasalforcingsMantleconductivityEnum;
+ 	      else if (strcmp(name,"BasalforcingsMeltrateFactor")==0) return BasalforcingsMeltrateFactorEnum;
+-	      else if (strcmp(name,"BasalforcingsThresholdThickness")==0) return BasalforcingsThresholdThicknessEnum;
+-	      else if (strcmp(name,"BasalforcingsUpperdepthMelt")==0) return BasalforcingsUpperdepthMeltEnum;
+-	      else if (strcmp(name,"BasalforcingsMantleconductivity")==0) return BasalforcingsMantleconductivityEnum;
+ 	      else if (strcmp(name,"BasalforcingsNusselt")==0) return BasalforcingsNusseltEnum;
+-	      else if (strcmp(name,"BasalforcingsDtbg")==0) return BasalforcingsDtbgEnum;
++	      else if (strcmp(name,"BasalforcingsPicoFarOceansalinity")==0) return BasalforcingsPicoFarOceansalinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum;
++	      else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum;
++	      else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum;
+ 	      else if (strcmp(name,"BasalforcingsPlumeradius")==0) return BasalforcingsPlumeradiusEnum;
+-	      else if (strcmp(name,"BasalforcingsTopplumedepth")==0) return BasalforcingsTopplumedepthEnum;
+-	      else if (strcmp(name,"BasalforcingsBottomplumedepth")==0) return BasalforcingsBottomplumedepthEnum;
+ 	      else if (strcmp(name,"BasalforcingsPlumex")==0) return BasalforcingsPlumexEnum;
+ 	      else if (strcmp(name,"BasalforcingsPlumey")==0) return BasalforcingsPlumeyEnum;
+-	      else if (strcmp(name,"BasalforcingsCrustthickness")==0) return BasalforcingsCrustthicknessEnum;
++	      else if (strcmp(name,"BasalforcingsThresholdThickness")==0) return BasalforcingsThresholdThicknessEnum;
++	      else if (strcmp(name,"BasalforcingsTopplumedepth")==0) return BasalforcingsTopplumedepthEnum;
++	      else if (strcmp(name,"BasalforcingsUppercrustheat")==0) return BasalforcingsUppercrustheatEnum;
+ 	      else if (strcmp(name,"BasalforcingsUppercrustthickness")==0) return BasalforcingsUppercrustthicknessEnum;
+-	      else if (strcmp(name,"BasalforcingsUppercrustheat")==0) return BasalforcingsUppercrustheatEnum;
+-	      else if (strcmp(name,"BasalforcingsLowercrustheat")==0) return BasalforcingsLowercrustheatEnum;
+-	      else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
+-	      else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum;
+-	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+-	      else if (strcmp(name,"MantlePlumeGeothermalFlux")==0) return MantlePlumeGeothermalFluxEnum;
+-	      else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoFarOceansalinity")==0) return BasalforcingsPicoFarOceansalinityEnum;
+-	      else if (strcmp(name,"DistanceToGroundingline")==0) return DistanceToGroundinglineEnum;
+-	      else if (strcmp(name,"DistanceToCalvingfront")==0) return DistanceToCalvingfrontEnum;
+-	      else if (strcmp(name,"Bed")==0) return BedEnum;
+-	      else if (strcmp(name,"Base")==0) return BaseEnum;
+-	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+-	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
++	      else if (strcmp(name,"BasalforcingsUpperdepthMelt")==0) return BasalforcingsUpperdepthMeltEnum;
++	      else if (strcmp(name,"BasalforcingsUpperwaterElevation")==0) return BasalforcingsUpperwaterElevationEnum;
++	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
++	      else if (strcmp(name,"CalvingHeightAboveFloatation")==0) return CalvingHeightAboveFloatationEnum;
++	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
++	      else if (strcmp(name,"CalvingMax")==0) return CalvingMaxEnum;
++	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
++	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+-	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
+-	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
+-	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
+-	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
+-	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
+-	      else if (strcmp(name,"StressbalancePenaltyFactor")==0) return StressbalancePenaltyFactorEnum;
+-	      else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum;
+-	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum;
+-	      else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum;
+-	      else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum;
+-	      else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum;
+-	      else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
+-	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
+-	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
+-	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
+-	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
++	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
++	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
++	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
++	      else if (strcmp(name,"Damage")==0) return DamageEnum;
++	      else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum;
++	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
++	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
++	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
++	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
++	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
++	      else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
++	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
++	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
++	      else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
++	      else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
++	      else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
++	      else if (strcmp(name,"EarthId")==0) return EarthIdEnum;
++	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
++	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
++	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
++	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
++	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
++	      else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
++	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
++	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
++	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
++	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
+ 	      else if (strcmp(name,"FlowequationIsSIA")==0) return FlowequationIsSIAEnum;
+ 	      else if (strcmp(name,"FlowequationIsSSA")==0) return FlowequationIsSSAEnum;
+-	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
+-	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
+-	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
+-	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
+-	      else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum;
+-	      else if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum;
+-	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
+-	      else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum;
+-	      else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum;
+-	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+-	      else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum;
+-	      else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
++	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
++	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
++	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
++	      else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
++	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
++	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
++	      else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum;
++	      else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum;
++	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
++	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
++	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
++	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
++	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
++	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
+-	      else if (strcmp(name,"FrictionLaw")==0) return FrictionLawEnum;
+-	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
+-	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
+-	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
+-	      else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
+-	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
+-	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
++	      if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
++	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
++	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
++	      else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum;
++	      else if (strcmp(name,"Hydrologydt")==0) return HydrologydtEnum;
+ 	      else if (strcmp(name,"HydrologyModel")==0) return HydrologyModelEnum;
+ 	      else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
++	      else if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum;
+ 	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+-	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
++	      else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
+ 	      else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;
+-	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+-	      else if (strcmp(name,"Hydrologydt")==0) return HydrologydtEnum;
+ 	      else if (strcmp(name,"HydrologyStepsPerStep")==0) return HydrologyStepsPerStepEnum;
+-	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+-	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+-	      else if (strcmp(name,"SedimentHeadStacked")==0) return SedimentHeadStackedEnum;
+-	      else if (strcmp(name,"SedimentHeadTimeAverage")==0) return SedimentHeadTimeAverageEnum;
+-	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+-	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
+-	      else if (strcmp(name,"EffectivePressureStacked")==0) return EffectivePressureStackedEnum;
+-	      else if (strcmp(name,"EffectivePressureTimeAverage")==0) return EffectivePressureTimeAverageEnum;
+-	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
+-	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
+-	      else if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
+-	      else if (strcmp(name,"EplHeadTimeAverage")==0) return EplHeadTimeAverageEnum;
+-	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+-	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
+-	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
+-	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+-	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentCompressibility")==0) return HydrologydcSedimentCompressibilityEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentPorosity")==0) return HydrologydcSedimentPorosityEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentThickness")==0) return HydrologydcSedimentThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
+-	      else if (strcmp(name,"HydrologydcWaterCompressibility")==0) return HydrologydcWaterCompressibilityEnum;
+-	      else if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum;
+-	      else if (strcmp(name,"HydrologydcMaskEplactiveElt")==0) return HydrologydcMaskEplactiveEltEnum;
+-	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+-	      else if (strcmp(name,"HydrologydcEplPorosity")==0) return HydrologydcEplPorosityEnum;
+-	      else if (strcmp(name,"HydrologydcEplInitialThickness")==0) return HydrologydcEplInitialThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
+-	      else if (strcmp(name,"HydrologydcEplThicknessStacked")==0) return HydrologydcEplThicknessStackedEnum;
+-	      else if (strcmp(name,"HydrologydcEplThicknessTimeAverage")==0) return HydrologydcEplThicknessTimeAverageEnum;
+-	      else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum;
+-	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+-	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+-	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+-	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
+-	      else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum;
+-	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+-	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+-	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+-	      else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum;
+-	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
+-	      else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
+-	      else if (strcmp(name,"Hydrologysommers")==0) return HydrologysommersEnum;
+-	      else if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum;
+-	      else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum;
+-	      else if (strcmp(name,"HydrologyGapHeight")==0) return HydrologyGapHeightEnum;
+-	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
+-	      else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
+-	      else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
+-	      else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum;
+-	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
+-	      else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
+-	      else if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum;
+-	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyStorage")==0) return HydrologyStorageEnum;
+-	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
++	      else if (strcmp(name,"IcecapToEarthComm")==0) return IcecapToEarthCommEnum;
++	      else if (strcmp(name,"Index")==0) return IndexEnum;
++	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
++	      else if (strcmp(name,"InputToDepthaverageIn")==0) return InputToDepthaverageInEnum;
++	      else if (strcmp(name,"InputToDepthaverageOut")==0) return InputToDepthaverageOutEnum;
++	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
++	      else if (strcmp(name,"InputToL2Project")==0) return InputToL2ProjectEnum;
++	      else if (strcmp(name,"InputToSmooth")==0) return InputToSmoothEnum;
++	      else if (strcmp(name,"InversionAlgorithm")==0) return InversionAlgorithmEnum;
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
+-	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+-	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
++	      else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
++	      else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
++	      else if (strcmp(name,"InversionGrtol")==0) return InversionGrtolEnum;
++	      else if (strcmp(name,"InversionGttol")==0) return InversionGttolEnum;
++	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+-	      else if (strcmp(name,"InversionType")==0) return InversionTypeEnum;
+-	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
++	      else if (strcmp(name,"InversionMaxiter")==0) return InversionMaxiterEnum;
+ 	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+-	      else if (strcmp(name,"InversionMaxiter")==0) return InversionMaxiterEnum;
+ 	      else if (strcmp(name,"InversionMaxsteps")==0) return InversionMaxstepsEnum;
+-	      else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum;
+-	      else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum;
+-	      else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
+-	      else if (strcmp(name,"InversionGrtol")==0) return InversionGrtolEnum;
+-	      else if (strcmp(name,"InversionGttol")==0) return InversionGttolEnum;
+-	      else if (strcmp(name,"InversionAlgorithm")==0) return InversionAlgorithmEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+-	      else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+ 	      else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
+ 	      else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
+-	      else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
+-	      else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum;
+-	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+-	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+-	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+-	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
+-	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
+-	      else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
+-	      else if (strcmp(name,"MaskLandLevelset")==0) return MaskLandLevelsetEnum;
+-	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+-	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+-	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
+-	      else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
+-	      else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
+-	      else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
+-	      else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum;
+-	      else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
+-	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+-	      else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
+-	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
+-	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+-	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
+-	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+-	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+-	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+-	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+-	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+-	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+-	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+-	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+-	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+-	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+-	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
+-	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
+-	      else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
+-	      else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum;
+-	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+-	      else if (strcmp(name,"Damage")==0) return DamageEnum;
+-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+-	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+-	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
+-	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+-	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+-	      else if (strcmp(name,"CalvingHeightAboveFloatation")==0) return CalvingHeightAboveFloatationEnum;
+-	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
+-	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+-	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+-	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+-	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+-	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
+-	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
+-	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
+-	      else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
+-	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+-	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+-	      else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
+-	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+-	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+-	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
+-	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+-	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+-	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+-	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+-	      else if (strcmp(name,"CalvingMax")==0) return CalvingMaxEnum;
+-	      else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum;
+-	      else if (strcmp(name,"StrainRateparallel")==0) return StrainRateparallelEnum;
+-	      else if (strcmp(name,"StrainRateperpendicular")==0) return StrainRateperpendicularEnum;
+-	      else if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum;
+-	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+-	      else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
+-	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+-	      else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
+-	      else if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
+-	      else if (strcmp(name,"MaterialsThermalconductivity")==0) return MaterialsThermalconductivityEnum;
+-	      else if (strcmp(name,"MaterialsTemperateiceconductivity")==0) return MaterialsTemperateiceconductivityEnum;
+-	      else if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
+-	      else if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
+-	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
+-	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+-	      else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
+-	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+-	      else if (strcmp(name,"MeshLat")==0) return MeshLatEnum;
+-	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
+-	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+-	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+-	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+-	      else if (strcmp(name,"MeshScaleFactor")==0) return MeshScaleFactorEnum;
+-	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+-	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+-	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
+-	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
+-	      else if (strcmp(name,"MeshVertexonbase")==0) return MeshVertexonbaseEnum;
+-	      else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
+-	      else if (strcmp(name,"MeshVertexonboundary")==0) return MeshVertexonboundaryEnum;
+-	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
+-	      else if (strcmp(name,"DomainType")==0) return DomainTypeEnum;
+-	      else if (strcmp(name,"DomainDimension")==0) return DomainDimensionEnum;
+-	      else if (strcmp(name,"Domain2Dhorizontal")==0) return Domain2DhorizontalEnum;
+-	      else if (strcmp(name,"Domain2Dvertical")==0) return Domain2DverticalEnum;
+-	      else if (strcmp(name,"Domain3D")==0) return Domain3DEnum;
+-	      else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum;
++	      else if (strcmp(name,"InversionType")==0) return InversionTypeEnum;
++	      else if (strcmp(name,"LevelsetReinitFrequency")==0) return LevelsetReinitFrequencyEnum;
++	      else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum;
++	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
++	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
++	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
++	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
++	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
++	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
++	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
++	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
++	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
++	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
++	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
++	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
++	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
+ 	      else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum;
+ 	      else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum;
++	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum;
+-	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
++	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
+ 	      else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
+-	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
++	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
++	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
++	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
++	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
++	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
++	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
++	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
++	      else if (strcmp(name,"NumModels")==0) return NumModelsEnum;
++	      else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum;
++	      else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;
++	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
++	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
++	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
++	      else if (strcmp(name,"Param")==0) return ParamEnum;
++	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
++	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
++	      else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+-	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
+-	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+-	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
++	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+ 	      else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum;
+-	      else if (strcmp(name,"QmuVariabledescriptors")==0) return QmuVariabledescriptorsEnum;
+-	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
++	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
++	      else if (strcmp(name,"Results")==0) return ResultsEnum;
++	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
++	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
++	      else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
++	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
++	      else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
++	      else if (strcmp(name,"SealevelriseEquatorialMoi")==0) return SealevelriseEquatorialMoiEnum;
++	      else if (strcmp(name,"SealevelriseFluidLove")==0) return SealevelriseFluidLoveEnum;
++	      else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
++	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
++	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
++	      else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
++	      else if (strcmp(name,"SealevelrisePolarMoi")==0) return SealevelrisePolarMoiEnum;
++	      else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
++	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
++	      else if (strcmp(name,"SealevelriseRigid")==0) return SealevelriseRigidEnum;
++	      else if (strcmp(name,"SealevelriseRotation")==0) return SealevelriseRotationEnum;
++	      else if (strcmp(name,"SealevelriseTidalLoveH")==0) return SealevelriseTidalLoveHEnum;
++	      else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum;
++	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
++	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+ 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+-	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
+ 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
++	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
++	      else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum;
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+-	      else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum;
+-	      else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
+-	      else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
+-	      else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
+-	      else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
++	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
++	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
++	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
++	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
++	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
++	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
++	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
++	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
++	      else if (strcmp(name,"Smb")==0) return SmbEnum;
++	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
++	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
++	      else if (strcmp(name,"SmbIsaccumulation")==0) return SmbIsaccumulationEnum;
++	      else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum;
++	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
++	      else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum;
++	      else if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum;
++	      else if (strcmp(name,"SmbIsgraingrowth")==0) return SmbIsgraingrowthEnum;
++	      else if (strcmp(name,"SmbIsmelt")==0) return SmbIsmeltEnum;
++	      else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
++	      else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
++	      else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum;
++	      else if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
++	      else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum;
++	      else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
++	      else if (strcmp(name,"SmbK")==0) return SmbKEnum;
++	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
++	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
++	      else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum;
++	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
++	      else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
++	      else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
++	      else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
++	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
++	      else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
++	      else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
++	      else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
+ 	      else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
+ 	      else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;
+ 	      else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
+-	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
++	      else if (strcmp(name,"Step")==0) return StepEnum;
++	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
++	      else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
++	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
++	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
++	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
++	      else if (strcmp(name,"StressbalancePenaltyFactor")==0) return StressbalancePenaltyFactorEnum;
++	      else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum;
++	      else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum;
++	      else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum;
++	      else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum;
++	      else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum;
++	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+-	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
++	      else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+-	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
++	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
++	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+-	      else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
+-	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+-	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"Time")==0) return TimeEnum;
++	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
++	      else if (strcmp(name,"TimesteppingCouplingTime")==0) return TimesteppingCouplingTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+-	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+-	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+-	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+-	      else if (strcmp(name,"TimesteppingCouplingTime")==0) return TimesteppingCouplingTimeEnum;
+-	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
++	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
++	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
++	      else if (strcmp(name,"TimesteppingType")==0) return TimesteppingTypeEnum;
++	      else if (strcmp(name,"ToMITgcmComm")==0) return ToMITgcmCommEnum;
++	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
++	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
++	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
++	      else if (strcmp(name,"ToolkitsTypes")==0) return ToolkitsTypesEnum;
++	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+ 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
+-	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+-	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
++	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
++	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
++	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
++	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+-	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+-	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+-	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
+-	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+-	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+ 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
++	      else if (strcmp(name,"TransientIsoceancoupling")==0) return TransientIsoceancouplingEnum;
+ 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
++	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
++	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
++	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
+-	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+-	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+-	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
++	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
++	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
++	      else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum;
++	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
++	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
++	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
++	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
++	      else if (strcmp(name,"Air")==0) return AirEnum;
++	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
++	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
++	      else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum;
+ 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
+-	      else if (strcmp(name,"BalancethicknessOmega0")==0) return BalancethicknessOmega0Enum;
+-	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+-	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+-	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
+-	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
+-	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum;
+-	      else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum;
+-	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
++	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
++	      else if (strcmp(name,"BasalforcingsFloatingiceMeltingRate")==0) return BasalforcingsFloatingiceMeltingRateEnum;
++	      else if (strcmp(name,"BasalforcingsGeothermalflux")==0) return BasalforcingsGeothermalfluxEnum;
++	      else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
++	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
++	      else if (strcmp(name,"Base")==0) return BaseEnum;
++	      else if (strcmp(name,"Bed")==0) return BedEnum;
++	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
++	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
++	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
++	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
++	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
++	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
++	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
++	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
++	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
++	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
++	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
++	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
++	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Converged")==0) return ConvergedEnum;
++	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
++	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
++	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
++	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
++	      else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
++	      else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
++	      else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
++	      else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
++	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
++	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
++	      else if (strcmp(name,"DistanceToCalvingfront")==0) return DistanceToCalvingfrontEnum;
++	      else if (strcmp(name,"DistanceToGroundingline")==0) return DistanceToGroundinglineEnum;
++	      else if (strcmp(name,"Domain2Dhorizontal")==0) return Domain2DhorizontalEnum;
++	      else if (strcmp(name,"Domain2Dvertical")==0) return Domain2DverticalEnum;
++	      else if (strcmp(name,"Domain3D")==0) return Domain3DEnum;
++	      else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
++	      else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
++	      else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum;
++	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
++	      else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum;
++	      else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
++	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
++	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
++	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
++	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
++	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
++	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
++	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
++	      else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
++	      else if (strcmp(name,"FrictionAs")==0) return FrictionAsEnum;
++	      else if (strcmp(name,"FrictionC")==0) return FrictionCEnum;
++	      else if (strcmp(name,"FrictionCoefficientcoulomb")==0) return FrictionCoefficientcoulombEnum;
++	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
++	      else if (strcmp(name,"FrictionEffectivePressure")==0) return FrictionEffectivePressureEnum;
++	      else if (strcmp(name,"FrictionM")==0) return FrictionMEnum;
++	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
++	      else if (strcmp(name,"FrictionPressureAdjustedTemperature")==0) return FrictionPressureAdjustedTemperatureEnum;
++	      else if (strcmp(name,"FrictionQ")==0) return FrictionQEnum;
++	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
++	      else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum;
++	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
++	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
++	      else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
++	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
++	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
++	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
++	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
++	      else if (strcmp(name,"HydrologydcMaskEplactiveElt")==0) return HydrologydcMaskEplactiveEltEnum;
++	      else if (strcmp(name,"HydrologydcMaskEplactiveNode")==0) return HydrologydcMaskEplactiveNodeEnum;
++	      else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
++	      else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
++	      else if (strcmp(name,"HydrologyGapHeight")==0) return HydrologyGapHeightEnum;
++	      else if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum;
++	      else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum;
++	      else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum;
++	      else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
++	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
++	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
++	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
++	      else if (strcmp(name,"Ice")==0) return IceEnum;
++	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
++	      else if (strcmp(name,"Input")==0) return InputEnum;
++	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
++	      else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum;
++	      else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
++	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
++	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
++	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
++	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
++	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
++	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
++	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
++	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
++	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
++	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
++	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
++	      else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
++	      else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
++	      else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;
++	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
++	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
++	      else if (strcmp(name,"MeshScaleFactor")==0) return MeshScaleFactorEnum;
++	      else if (strcmp(name,"MeshVertexonbase")==0) return MeshVertexonbaseEnum;
++	      else if (strcmp(name,"MeshVertexonboundary")==0) return MeshVertexonboundaryEnum;
++	      else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
++	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
++	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
++	      else if (strcmp(name,"Node")==0) return NodeEnum;
++	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
++	      else if (strcmp(name,"P0")==0) return P0Enum;
++	      else if (strcmp(name,"P1")==0) return P1Enum;
++	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
++	      else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
++	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
++	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
++	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
++	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
++	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
++	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
++	      else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
++	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
++	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
++	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
++	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
++	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
++	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
++	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
++	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
++	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
++	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+-	      else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
++	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
++	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
++	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
++	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
++	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
++	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
++	      else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
++	      else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
++	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
++	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
++	      else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum;
+ 	      else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
++	      else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
+ 	      else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
+-	      else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
+-	      else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
+-	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
+-	      else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
++	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
++	      else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum;
++	      else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;
++	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
++	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
++	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
++	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
++	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
++	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
++	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
++	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
++	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
++	      else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
++	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
++	      else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;
++	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
++	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
++	      else if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum;
+ 	      else if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum;
+-	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
+-	      else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;
+-	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
+-	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
+-	      else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
+-	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
++	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+ 	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
+-	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
+-	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+-	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+-	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
+-	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
+-	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
++	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
++	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
++	      else if (strcmp(name,"SmbT")==0) return SmbTEnum;
++	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
++	      else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
+ 	      else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
+-	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+ 	      else if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
++	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
+ 	      else if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
+-	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+-	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+-	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+-	      else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum;
+-	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++	      else if (strcmp(name,"SmbW")==0) return SmbWEnum;
++	      else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
++	      else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
++	      else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum;
+ 	      else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum;
+-	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+-	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+ 	      else if (strcmp(name,"SmbZY")==0) return SmbZYEnum;
+-	      else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
+-	      else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum;
+-	      else if (strcmp(name,"SmbOutputFreq")==0) return SmbOutputFreqEnum;
+-	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+-	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+-	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+-	      else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
+-	      else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
+-	      else if (strcmp(name,"SmbK")==0) return SmbKEnum;
+-	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+-	      else if (strcmp(name,"SmbRe")==0) return SmbReEnum;
+-	      else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum;
+-	      else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
+-	      else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
+-	      else if (strcmp(name,"SmbW")==0) return SmbWEnum;
+-	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+-	      else if (strcmp(name,"SmbT")==0) return SmbTEnum;
+-	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
+-	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
+-	      else if (strcmp(name,"SmbIsgraingrowth")==0) return SmbIsgraingrowthEnum;
+-	      else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum;
+-	      else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum;
+-	      else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum;
+-	      else if (strcmp(name,"SmbIsaccumulation")==0) return SmbIsaccumulationEnum;
+-	      else if (strcmp(name,"SmbIsmelt")==0) return SmbIsmeltEnum;
+-	      else if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum;
+-	      else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
+-	      else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
+-	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
+-	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
+-	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
+-	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+-	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+-	      else if (strcmp(name,"SmbIsdelta18o")==0) return SmbIsdelta18oEnum;
+-	      else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
+-	      else if (strcmp(name,"SmbIsmungsm")==0) return SmbIsmungsmEnum;
+-	      else if (strcmp(name,"SmbIsd18opd")==0) return SmbIsd18opdEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
+-	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
+-	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
+-	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+-	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+-	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
+-	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
+-	      else if (strcmp(name,"SmbPddfacIce")==0) return SmbPddfacIceEnum;
+-	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
+-	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
+-	      else if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum;
+-	      else if (strcmp(name,"SmbRlaps")==0) return SmbRlapsEnum;
+-	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
+-	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
+-	      else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
+-	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
+-	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
+-	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
+-	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+-	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
+-	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
+-	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+-	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
+-	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+-	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+-	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+-	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+-	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+-	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
+-	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+-	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+-	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
+-	      else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;
+-	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
+-	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
+-	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
+-	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+-	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+-	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+-	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+-	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+-	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+-	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
+-	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+-	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+-	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
+-	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+-	      else if (strcmp(name,"Internal")==0) return InternalEnum;
+-	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+-	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+-	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+-	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+-	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+-	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
++	      else if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum;
++	      else if (strcmp(name,"StrainRateparallel")==0) return StrainRateparallelEnum;
++	      else if (strcmp(name,"StrainRateperpendicular")==0) return StrainRateperpendicularEnum;
++	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
++	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
++	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
++	      else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum;
++	      else if (strcmp(name,"StrainRateyz")==0) return StrainRateyzEnum;
++	      else if (strcmp(name,"StrainRatezz")==0) return StrainRatezzEnum;
++	      else if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum;
++	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
++	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
++	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+ 	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
++	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
+ 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
++	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+ 	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+-	      else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
++	      else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+-	      else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum;
+-	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
+-	      else if (strcmp(name,"EtaDiff")==0) return EtaDiffEnum;
+-	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
++	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
++	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+-	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
+ 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+ 	      else if (strcmp(name,"Vx")==0) return VxEnum;
++	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
++	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+ 	      else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
+ 	      else if (strcmp(name,"Vy")==0) return VyEnum;
++	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
++	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+ 	      else if (strcmp(name,"Vz")==0) return VzEnum;
+-	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
++	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
+ 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
+-	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
+-	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
+-	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
+ 	      else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
+-	      else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum;
+-	      else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
+-	      else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
+-	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
+-	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
+-	      else if (strcmp(name,"ThicknessPositive")==0) return ThicknessPositiveEnum;
+-	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+-	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
+-	      else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
+-	      else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
+-	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+-	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
++	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
++	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
++	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
+ 	      else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
+-	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+-	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+-	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+-	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+-	      else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum;
+-	      else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum;
+-	      else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
+-	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+-	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+-	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+-	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+-	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+-	      else if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum;
+-	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
+-	      else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
+-	      else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
+-	      else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
+-	      else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
+-	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
+-	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
+-	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
++	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
++	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
++	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
++	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
++	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
++	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
++	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
++	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
++	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
++	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
++	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
++	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
++	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
++	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
++	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
++	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
++	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
++	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
++	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+-	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+-	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
+-	      else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum;
+-	      else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum;
+-	      else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum;
+-	      else if (strcmp(name,"StrainRateyz")==0) return StrainRateyzEnum;
+-	      else if (strcmp(name,"StrainRatezz")==0) return StrainRatezzEnum;
++	      if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
++	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
++	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
++	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
++	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
++	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
++	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
++	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
++	      else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
++	      else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum;
++	      else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum;
++	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
++	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
++	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
++	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
++	      else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
++	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
++	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
++	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
++	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
++	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
++	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
++	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
++	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
++	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
++	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
++	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
++	      else if (strcmp(name,"Contact")==0) return ContactEnum;
++	      else if (strcmp(name,"Contour")==0) return ContourEnum;
++	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
++	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
++	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
++	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
++	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
++	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
++	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
++	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
++	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
++	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
++	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
++	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
++	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
++	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
++	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
++	      else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
++	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
++	      else if (strcmp(name,"Dense")==0) return DenseEnum;
++	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
++	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
++	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
++	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+ 	      else if (strcmp(name,"Divergence")==0) return DivergenceEnum;
+-	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
+-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
++	      else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum;
++	      else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum;
++	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
++	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
++	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
++	      else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
++	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
++	      else if (strcmp(name,"EffectivePressureStacked")==0) return EffectivePressureStackedEnum;
++	      else if (strcmp(name,"EffectivePressureTimeAverage")==0) return EffectivePressureTimeAverageEnum;
++	      else if (strcmp(name,"Element")==0) return ElementEnum;
++	      else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
++	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
++	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
++	      else if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
++	      else if (strcmp(name,"EplHeadTimeAverage")==0) return EplHeadTimeAverageEnum;
++	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
++	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
++	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
++	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
++	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
++	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
++	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
++	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
++	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
++	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
++	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
++	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
++	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
++	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
++	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
++	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
++	      else if (strcmp(name,"FemModel")==0) return FemModelEnum;
++	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
++	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
++	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
++	      else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
++	      else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum;
++	      else if (strcmp(name,"Free")==0) return FreeEnum;
++	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
++	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
++	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
++	      else if (strcmp(name,"Fset")==0) return FsetEnum;
++	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
++	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
++	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
++	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
++	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
++	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
++	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
++	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
++	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
++	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+-	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+-	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+-	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
++	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
++	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
++	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
++	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
++	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
++	      else if (strcmp(name,"Gset")==0) return GsetEnum;
++	      else if (strcmp(name,"Gsl")==0) return GslEnum;
++	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
++	      else if (strcmp(name,"Hook")==0) return HookEnum;
++	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
++	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
++	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
++	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
++	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
++	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
++	      else if (strcmp(name,"HydrologydcEplInitialThickness")==0) return HydrologydcEplInitialThicknessEnum;
++	      else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum;
++	      else if (strcmp(name,"HydrologydcEplPorosity")==0) return HydrologydcEplPorosityEnum;
++	      else if (strcmp(name,"HydrologydcEplThicknessStacked")==0) return HydrologydcEplThicknessStackedEnum;
++	      else if (strcmp(name,"HydrologydcEplThicknessTimeAverage")==0) return HydrologydcEplThicknessTimeAverageEnum;
++	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
++	      else if (strcmp(name,"HydrologydcSedimentCompressibility")==0) return HydrologydcSedimentCompressibilityEnum;
++	      else if (strcmp(name,"HydrologydcSedimentPorosity")==0) return HydrologydcSedimentPorosityEnum;
++	      else if (strcmp(name,"HydrologydcSedimentThickness")==0) return HydrologydcSedimentThicknessEnum;
++	      else if (strcmp(name,"HydrologydcWaterCompressibility")==0) return HydrologydcWaterCompressibilityEnum;
++	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
++	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
++	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
++	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
++	      else if (strcmp(name,"Hydrologysommers")==0) return HydrologysommersEnum;
++	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
++	      else if (strcmp(name,"IceMassScaled")==0) return IceMassScaledEnum;
++	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
++	      else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum;
++	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
++	      else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum;
++	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
++	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
++	      else if (strcmp(name,"Internal")==0) return InternalEnum;
++	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
++	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
++	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
++	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
++	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
++	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
++	      else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum;
++	      else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum;
++	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
++	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
++	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
++	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
++	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
++	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
++	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
++	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
++	      else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
++	      else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum;
++	      else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
++	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
++	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
++	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
++	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
++	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
++	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
++	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
++	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
++	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
++	      else if (strcmp(name,"LoveLr")==0) return LoveLrEnum;
++	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
++	      else if (strcmp(name,"MantlePlumeGeothermalFlux")==0) return MantlePlumeGeothermalFluxEnum;
++	      else if (strcmp(name,"MaskLandLevelset")==0) return MaskLandLevelsetEnum;
++	      else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum;
++	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
++	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
++	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
++	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
++	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
++	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
++	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
++	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
++	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
++	      else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
++	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
++	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
++	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
++	      else if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
++	      else if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
++	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
++	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
++	      else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
++	      else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
++	      else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
++	      else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
++	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
++	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
++	      else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
++	      else if (strcmp(name,"MaterialsTemperateiceconductivity")==0) return MaterialsTemperateiceconductivityEnum;
++	      else if (strcmp(name,"MaterialsThermalconductivity")==0) return MaterialsThermalconductivityEnum;
++	      else if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
++	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
++	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
++	      else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
++	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
++	      else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
++	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
++	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
++	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
++	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
++	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
++	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
++	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
++	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
++	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
++	      else if (strcmp(name,"MeshLat")==0) return MeshLatEnum;
++	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
++	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
++	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
++	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
++	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++	      else if (strcmp(name,"MINI")==0) return MINIEnum;
++	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
++	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"MinVy")==0) return MinVyEnum;
++	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
++	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
++	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
++	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
++	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
++	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
++	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
++	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
++	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
++	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
++	      else if (strcmp(name,"None")==0) return NoneEnum;
++	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
++	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
++	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
++	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
++	      else if (strcmp(name,"Open")==0) return OpenEnum;
++	      else if (strcmp(name,"Option")==0) return OptionEnum;
++	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
++	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
++	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
++	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
++	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
++	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
++	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
++	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
++	      else if (strcmp(name,"P2")==0) return P2Enum;
++	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
++	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
++	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
++	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
++	      else if (strcmp(name,"Penta")==0) return PentaEnum;
++	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
++	      else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
++	      else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
++	      else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
++	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
++	      else if (strcmp(name,"QmuVariabledescriptors")==0) return QmuVariabledescriptorsEnum;
++	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
++	      else if (strcmp(name,"Regular")==0) return RegularEnum;
++	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
++	      else if (strcmp(name,"SealevelAbsolute")==0) return SealevelAbsoluteEnum;
++	      else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum;
++	      else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum;
++	      else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum;
++	      else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum;
++	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
++	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
++	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
++	      else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
++	      else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum;
++	      else if (strcmp(name,"SedimentHeadStacked")==0) return SedimentHeadStackedEnum;
++	      else if (strcmp(name,"SedimentHeadTimeAverage")==0) return SedimentHeadTimeAverageEnum;
++	      else if (strcmp(name,"Seg")==0) return SegEnum;
++	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
++	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
++	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
++	      else if (strcmp(name,"Seq")==0) return SeqEnum;
++	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
++	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
++	      else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum;
++	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
++	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
++	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
++	      else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum;
++	      else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum;
++	      else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
++	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
++	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
++	      else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
++	      else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
++	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
++	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
++	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
++	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
++	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
++	      else if (strcmp(name,"SmbOutputFreq")==0) return SmbOutputFreqEnum;
++	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
++	      else if (strcmp(name,"SmbRlaps")==0) return SmbRlapsEnum;
++	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
++	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
++	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
++	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
++	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
++	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
++	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
++	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
++	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
++	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
++	      else if (strcmp(name,"Sset")==0) return SsetEnum;
++	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
++	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
++	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
++	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
++	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
++	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+-	      else if (strcmp(name,"Step")==0) return StepEnum;
+-	      else if (strcmp(name,"Time")==0) return TimeEnum;
+-	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+-	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
+-	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+-	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+-	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
+-	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
+-	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+-	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+-	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+-	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+-	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+-	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+-	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
++	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
++	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
++	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
++	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
++	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
++	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
++	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
++	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
++	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
++	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
++	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
++	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
++	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
++	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
++	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
++	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
++	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
++	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
++	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
++	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
++	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
++	      else if (strcmp(name,"Tria")==0) return TriaEnum;
++	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
++	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
++	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
++	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
++	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
++	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
++	      else if (strcmp(name,"Water")==0) return WaterEnum;
++	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
++	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
++	      else if (strcmp(name,"XY")==0) return XYEnum;
++	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
++	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
++	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
++	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
++	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
++	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
++	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
++	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
++	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
+ 	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+ 	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+@@ -687,6 +1059,7 @@
+ 	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
+ 	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
+ 	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
++	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
+ 	      else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
+ 	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
+ 	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
+@@ -697,6 +1070,7 @@
+ 	      else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum;
+ 	      else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum;
+ 	      else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum;
++	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+ 	      else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum;
+ 	      else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum;
+ 	      else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum;
+@@ -707,6 +1081,7 @@
+ 	      else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum;
+ 	      else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum;
+ 	      else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum;
++	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+ 	      else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;
+ 	      else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;
+ 	      else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;
+@@ -717,6 +1092,7 @@
+ 	      else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
+ 	      else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
+ 	      else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
++	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+ 	      else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
+ 	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
+ 	      else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
+@@ -727,6 +1103,7 @@
+ 	      else if (strcmp(name,"Outputdefinition67")==0) return Outputdefinition67Enum;
+ 	      else if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum;
+ 	      else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum;
++	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+ 	      else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum;
+ 	      else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;
+ 	      else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
+@@ -737,418 +1114,41 @@
+ 	      else if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum;
+ 	      else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
+ 	      else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
++	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+ 	      else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
+ 	      else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
+ 	      else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
+ 	      else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
+ 	      else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
+-	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
+ 	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
+ 	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
+ 	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+ 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
++	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+ 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+-	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
++	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+-	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+-	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+-	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+-	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+-	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+-	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
+-	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
+-	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
+-	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+-	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRhop")==0) return AugmentedLagrangianRhopEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRlambda")==0) return AugmentedLagrangianRlambdaEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianRholambda")==0) return AugmentedLagrangianRholambdaEnum;
+-	      else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
+-	      else if (strcmp(name,"None")==0) return NoneEnum;
+-	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+-	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+-	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+-	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+-	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+-	      else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
+-	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+-	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+-	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+-	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+-	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+-	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+-	      else if (strcmp(name,"Fset")==0) return FsetEnum;
+-	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
+-	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+-	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+-	      else if (strcmp(name,"Gradient")==0) return GradientEnum;
+-	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+-	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+-	      else if (strcmp(name,"Index")==0) return IndexEnum;
+-	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
+-	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
+-	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+-	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
+-	      else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum;
+-	      else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;
+-	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
+-	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
+-	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+-	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+-	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+-	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+-	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+-	      else if (strcmp(name,"ToolkitsTypes")==0) return ToolkitsTypesEnum;
+-	      else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum;
+-	      else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum;
+-	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+-	      else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
+-	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+-	      else if (strcmp(name,"Regular")==0) return RegularEnum;
+-	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
+-	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+-	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+-	      else if (strcmp(name,"Dense")==0) return DenseEnum;
+-	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+-	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+-	      else if (strcmp(name,"Seq")==0) return SeqEnum;
+-	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+-	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+-	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+-	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
+-	      else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
+-	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
+-	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+-	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+-	      else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
+-	      else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
+-	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
+-	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
+-	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
+-	      else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum;
+-	      else if (strcmp(name,"LevelsetReinitFrequency")==0) return LevelsetReinitFrequencyEnum;
+-	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
+-	      else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum;
+-	      else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum;
+-	      else if (strcmp(name,"SealevelEmotion")==0) return SealevelEmotionEnum;
+-	      else if (strcmp(name,"SealevelAbsolute")==0) return SealevelAbsoluteEnum;
+-	      else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum;
+-	      else if (strcmp(name,"SealevelInertiaTensorXZ")==0) return SealevelInertiaTensorXZEnum;
+-	      else if (strcmp(name,"SealevelInertiaTensorYZ")==0) return SealevelInertiaTensorYZEnum;
+-	      else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum;
+ 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+ 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
+-	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
+-	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
+-	      else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
+-	      else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
+-	      else if (strcmp(name,"SealevelriseRigid")==0) return SealevelriseRigidEnum;
+-	      else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
+-	      else if (strcmp(name,"SealevelriseRotation")==0) return SealevelriseRotationEnum;
+-	      else if (strcmp(name,"SealevelriseTidalLoveH")==0) return SealevelriseTidalLoveHEnum;
+-	      else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum;
+-	      else if (strcmp(name,"SealevelriseFluidLove")==0) return SealevelriseFluidLoveEnum;
+-	      else if (strcmp(name,"SealevelriseEquatorialMoi")==0) return SealevelriseEquatorialMoiEnum;
+-	      else if (strcmp(name,"SealevelrisePolarMoi")==0) return SealevelrisePolarMoiEnum;
+-	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
+-	      else if (strcmp(name,"SealevelriseOceanAreaScaling")==0) return SealevelriseOceanAreaScalingEnum;
+-	      else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
+-	      else if (strcmp(name,"SealevelriseGElastic")==0) return SealevelriseGElasticEnum;
+-	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+-	      else if (strcmp(name,"SealevelriseHElastic")==0) return SealevelriseHElasticEnum;
+-	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+-	      else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum;
+-	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum;
+-	      else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
+-	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
+-	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+-	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+-	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
+-	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
+-	      else if (strcmp(name,"LoveForcingType")==0) return LoveForcingTypeEnum;
+-	      else if (strcmp(name,"LoveHr")==0) return LoveHrEnum;
+-	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
+-	      else if (strcmp(name,"LoveLr")==0) return LoveLrEnum;
+-	      else if (strcmp(name,"LoveHi")==0) return LoveHiEnum;
+-	      else if (strcmp(name,"LoveKi")==0) return LoveKiEnum;
+-	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
+-	      else if (strcmp(name,"LoveKernels")==0) return LoveKernelsEnum;
+-	      else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum;
+-	      else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
+-	      else if (strcmp(name,"EsaUmotion")==0) return EsaUmotionEnum;
+-	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+-	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+-	      else if (strcmp(name,"EsaXmotion")==0) return EsaXmotionEnum;
+-	      else if (strcmp(name,"EsaYmotion")==0) return EsaYmotionEnum;
+-	      else if (strcmp(name,"EsaHemisphere")==0) return EsaHemisphereEnum;
+-	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+-	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
+-	      else if (strcmp(name,"EsaStrainrateyy")==0) return EsaStrainrateyyEnum;
+-	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+-	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
+-	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+-	      else if (strcmp(name,"EsaHElastic")==0) return EsaHElasticEnum;
+-	      else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum;
+-	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+-	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
+-	      else if (strcmp(name,"AmrType")==0) return AmrTypeEnum;
+-	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
+-	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+-	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+-	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
+-	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+-	      else if (strcmp(name,"AmrHmin")==0) return AmrHminEnum;
+-	      else if (strcmp(name,"AmrHmax")==0) return AmrHmaxEnum;
+-	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
+-	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
+-	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
+-	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
+-	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
+-	      else if (strcmp(name,"AmrGroundingLineDistance")==0) return AmrGroundingLineDistanceEnum;
+-	      else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum;
+-	      else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorGroupThreshold")==0) return AmrThicknessErrorGroupThresholdEnum;
+-	      else if (strcmp(name,"AmrThicknessErrorMaximum")==0) return AmrThicknessErrorMaximumEnum;
+-	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+-	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
+-	      else if (strcmp(name,"AmrDeviatoricErrorGroupThreshold")==0) return AmrDeviatoricErrorGroupThresholdEnum;
+-	      else if (strcmp(name,"AmrDeviatoricErrorMaximum")==0) return AmrDeviatoricErrorMaximumEnum;
+-	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
+-	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+-	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+-	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+-	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+-	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+-	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
+-	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+-	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+-	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+-	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+-	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+-	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
+-	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
+-	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
+-	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
+-	      else if (strcmp(name,"XY")==0) return XYEnum;
+-	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+-	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+-	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+-	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
+-	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+-	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+-	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
+-	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
+-	      else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum;
+-	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
+-	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
+-	      else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
+-	      else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
+-	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
+-	      else if (strcmp(name,"Element")==0) return ElementEnum;
+-	      else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
+-	      else if (strcmp(name,"Hook")==0) return HookEnum;
+-	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+-	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+-	      else if (strcmp(name,"Input")==0) return InputEnum;
+-	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+-	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+-	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+-	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
+-	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+-	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
+-	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+-	      else if (strcmp(name,"Node")==0) return NodeEnum;
+-	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+-	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+-	      else if (strcmp(name,"Param")==0) return ParamEnum;
+-	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+-	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+-	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+-	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+-	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+-	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
+-	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
+-	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+-	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"Segment")==0) return SegmentEnum;
+-	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+-	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+-	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+-	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+-	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+-	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+-	      else if (strcmp(name,"Seg")==0) return SegEnum;
+-	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+-	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+-	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+-	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+-	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+-	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+-	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+-	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+-	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+-	      else if (strcmp(name,"Option")==0) return OptionEnum;
+-	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+-	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+-	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+-	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
+-	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+-	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+-	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+-	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+-	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+-	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+-	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+-	      else if (strcmp(name,"L2ProjectionEPLAnalysis")==0) return L2ProjectionEPLAnalysisEnum;
+-	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+-	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+-	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+-	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+-	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+-	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+-	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
+-	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+-	      else if (strcmp(name,"HydrologySommersAnalysis")==0) return HydrologySommersAnalysisEnum;
+-	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+-	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+-	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+-	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+-	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+-	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+-	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+-	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
+-	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
+-	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
+-	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+-	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+-	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
+-	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+-	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+-	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+-	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
+-	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+-	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+-	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+-	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+-	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
+-	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+-	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
+-	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+-	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
+-	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
+-	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
+-	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
++	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
++	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
++	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
++	      else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
++	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+-	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+-	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+-	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+-	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+-	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+-	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+-	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+-	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+-	      else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
+-	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+-	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+-	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+-	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
+-	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
+-	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+-	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+-	      else if (strcmp(name,"IceMass")==0) return IceMassEnum;
+-	      else if (strcmp(name,"IceMassScaled")==0) return IceMassScaledEnum;
+-	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+-	      else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum;
+-	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+-	      else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum;
+-	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+-	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
+-	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+-	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+-	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+-	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+-	      else if (strcmp(name,"P0")==0) return P0Enum;
+-	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+-	      else if (strcmp(name,"P1")==0) return P1Enum;
+-	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+-	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+-	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+-	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+-	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+-	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+-	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+-	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+-	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+-	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+-	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+-	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+-	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
+-	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+-	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
+-	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+-	      else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
+-	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
+-	      else if (strcmp(name,"Free")==0) return FreeEnum;
+-	      else if (strcmp(name,"Open")==0) return OpenEnum;
+-	      else if (strcmp(name,"Air")==0) return AirEnum;
+-	      else if (strcmp(name,"Ice")==0) return IceEnum;
+-	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
+-	      else if (strcmp(name,"Water")==0) return WaterEnum;
+-	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+-	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+-	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+-	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+-	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+-	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+-	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+-	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+-	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+ 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
+          else stage=11;
+    }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22596-22597.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22596-22597.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22596-22597.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/jenkins/macosx_pine-island_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22596)
++++ ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22597)
+@@ -50,10 +50,10 @@
+ 
+ #number of cpus used in ISSM installation and compilation (one is usually
+ #safer as some packages are very sensitive to parallel compilation)
+-NUMCPUS_INSTALL=4
++NUMCPUS_INSTALL=1
+ 
+ #number of cpus used in the nightly runs.
+-NUMCPUS_RUN=2
++NUMCPUS_RUN=1
+ 
+ #Nightly run options. The matlab routine runme.m will be called
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
Index: /issm/oecreview/Archive/21724-22754/ISSM-22597-22598.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22597-22598.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22597-22598.diff	(revision 22755)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22597)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22598)
+@@ -235,6 +235,7 @@
+ 	SealevelriseTransitionsEnum,
+ 	SealevelriseUElasticEnum,
+ 	SettingsIoGatherEnum,
++	SettingsLowmemEnum,
+ 	SettingsOutputFrequencyEnum,
+ 	SettingsRecordingFrequencyEnum,
+ 	SettingsResultsOnNodesEnum,
+@@ -924,7 +925,6 @@
+ 	SegmentRiftfrontEnum,
+ 	SeparateEnum,
+ 	SeqEnum,
+-	SettingsLowmemEnum,
+ 	SIAApproximationEnum,
+ 	SigmaVMEnum,
+ 	SmbAnalysisEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22597)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22598)
+@@ -243,6 +243,7 @@
+ 		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
+ 		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
+ 		case SettingsIoGatherEnum : return "SettingsIoGather";
++		case SettingsLowmemEnum : return "SettingsLowmem";
+ 		case SettingsOutputFrequencyEnum : return "SettingsOutputFrequency";
+ 		case SettingsRecordingFrequencyEnum : return "SettingsRecordingFrequency";
+ 		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
+@@ -928,7 +929,6 @@
+ 		case SegmentRiftfrontEnum : return "SegmentRiftfront";
+ 		case SeparateEnum : return "Separate";
+ 		case SeqEnum : return "Seq";
+-		case SettingsLowmemEnum : return "SettingsLowmem";
+ 		case SIAApproximationEnum : return "SIAApproximation";
+ 		case SigmaVMEnum : return "SigmaVM";
+ 		case SmbAnalysisEnum : return "SmbAnalysis";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22597)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22598)
+@@ -246,6 +246,7 @@
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+ 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
++	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
+ 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+-	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
++	      if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+ 	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Converged")==0) return ConvergedEnum;
++	      if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
++	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+-	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
++	      if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
++	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+ 	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+ 	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
++	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+-	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
++	      if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+-	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"MinVy")==0) return MinVyEnum;
++	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
++	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+@@ -949,7 +950,6 @@
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+ 	      else if (strcmp(name,"Seq")==0) return SeqEnum;
+-	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
+ 	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+ 	      else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum;
+ 	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22598-22599.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22598-22599.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22598-22599.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22598)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22599)
+@@ -193,6 +193,7 @@
+ 	MeltingOffsetEnum,
+ 	MeshAverageVertexConnectivityEnum,
+ 	MeshElementtypeEnum,
++	MeshNumberofelementsEnum,
+ 	MeshNumberoflayersEnum,
+ 	MeshNumberofverticesEnum,
+ 	ModelIdEnum,
+@@ -846,7 +847,6 @@
+ 	MeshElementsEnum,
+ 	MeshLatEnum,
+ 	MeshLongEnum,
+-	MeshNumberofelementsEnum,
+ 	MeshXEnum,
+ 	MeshYEnum,
+ 	MINIcondensedEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22598)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22599)
+@@ -201,6 +201,7 @@
+ 		case MeltingOffsetEnum : return "MeltingOffset";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+ 		case MeshElementtypeEnum : return "MeshElementtype";
++		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+ 		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
+ 		case MeshNumberofverticesEnum : return "MeshNumberofvertices";
+ 		case ModelIdEnum : return "ModelId";
+@@ -850,7 +851,6 @@
+ 		case MeshElementsEnum : return "MeshElements";
+ 		case MeshLatEnum : return "MeshLat";
+ 		case MeshLongEnum : return "MeshLong";
+-		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+ 		case MeshXEnum : return "MeshX";
+ 		case MeshYEnum : return "MeshY";
+ 		case MINIcondensedEnum : return "MINIcondensed";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22598)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22599)
+@@ -204,6 +204,7 @@
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
++	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
+ 	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
+ 	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+-	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++	      if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
++	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
++	      if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
++	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+-	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
++	      if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
++	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+ 	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+-	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++	      if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
++	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+-	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++	      if (strcmp(name,"Gsl")==0) return GslEnum;
++	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+@@ -868,7 +869,6 @@
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLat")==0) return MeshLatEnum;
+ 	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
+-	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22599-22600.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22599-22600.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22599-22600.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22599)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22600)
+@@ -84,6 +84,7 @@
+ 	CalvingMaxEnum,
+ 	CalvingMinthicknessEnum,
+ 	ConfigurationTypeEnum,
++	ConstantsReferencetemperatureEnum,
+ 	ConstantsYtsEnum,
+ 	DamageC1Enum,
+ 	DamageC2Enum,
+@@ -640,7 +641,6 @@
+ 	ClosedEnum,
+ 	ColinearEnum,
+ 	ConstantsGEnum,
+-	ConstantsReferencetemperatureEnum,
+ 	ConstraintsEnum,
+ 	ContactEnum,
+ 	ContourEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22599)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22600)
+@@ -92,6 +92,7 @@
+ 		case CalvingMaxEnum : return "CalvingMax";
+ 		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+ 		case ConfigurationTypeEnum : return "ConfigurationType";
++		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
+ 		case DamageC1Enum : return "DamageC1";
+ 		case DamageC2Enum : return "DamageC2";
+@@ -644,7 +645,6 @@
+ 		case ClosedEnum : return "Closed";
+ 		case ColinearEnum : return "Colinear";
+ 		case ConstantsGEnum : return "ConstantsG";
+-		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstraintsEnum : return "Constraints";
+ 		case ContactEnum : return "Contact";
+ 		case ContourEnum : return "Contour";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22599)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22600)
+@@ -92,6 +92,7 @@
+ 	      else if (strcmp(name,"CalvingMax")==0) return CalvingMaxEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+ 	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
++	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+ 	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+-	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
++	      if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
++	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+-	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
++	      if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
++	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+ 	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+-	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
++	      if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
++	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+-	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
++	      if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
++	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+ 	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+-	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
++	      if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
++	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+@@ -659,7 +660,6 @@
+ 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+-	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22600-22601.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22600-22601.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22600-22601.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22600)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22601)
+@@ -109,6 +109,7 @@
+ 	EsaRequestedOutputsEnum,
+ 	EsaUElasticEnum,
+ 	ExtrapolationVariableEnum,
++	FemModelCommEnum,
+ 	FlowequationFeFSEnum,
+ 	FlowequationIsFSEnum,
+ 	FlowequationIsHOEnum,
+@@ -699,7 +700,6 @@
+ 	ExtrapolationAnalysisEnum,
+ 	ExtrudeFromBaseAnalysisEnum,
+ 	ExtrudeFromTopAnalysisEnum,
+-	FemModelCommEnum,
+ 	FemModelEnum,
+ 	FileParamEnum,
+ 	FixedTimesteppingEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22600)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22601)
+@@ -117,6 +117,7 @@
+ 		case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
+ 		case EsaUElasticEnum : return "EsaUElastic";
+ 		case ExtrapolationVariableEnum : return "ExtrapolationVariable";
++		case FemModelCommEnum : return "FemModelComm";
+ 		case FlowequationFeFSEnum : return "FlowequationFeFS";
+ 		case FlowequationIsFSEnum : return "FlowequationIsFS";
+ 		case FlowequationIsHOEnum : return "FlowequationIsHO";
+@@ -703,7 +704,6 @@
+ 		case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
+ 		case ExtrudeFromBaseAnalysisEnum : return "ExtrudeFromBaseAnalysis";
+ 		case ExtrudeFromTopAnalysisEnum : return "ExtrudeFromTopAnalysis";
+-		case FemModelCommEnum : return "FemModelComm";
+ 		case FemModelEnum : return "FemModel";
+ 		case FileParamEnum : return "FileParam";
+ 		case FixedTimesteppingEnum : return "FixedTimestepping";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22600)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22601)
+@@ -117,6 +117,7 @@
+ 	      else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaUElastic")==0) return EsaUElasticEnum;
+ 	      else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
++	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
+ 	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
+ 	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
+ 	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+-	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
++	      if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
++	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+ 	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+-	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
++	      if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
++	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+ 	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+-	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
++	      if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
++	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+ 	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+-	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
++	      if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
++	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+ 	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+-	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
++	      if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
++	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+@@ -718,7 +719,6 @@
+ 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+-	      else if (strcmp(name,"FemModelComm")==0) return FemModelCommEnum;
+ 	      else if (strcmp(name,"FemModel")==0) return FemModelEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22601-22602.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22601-22602.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22601-22602.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22601)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22602)
+@@ -86,6 +86,7 @@
+ 	ConfigurationTypeEnum,
+ 	ConstantsReferencetemperatureEnum,
+ 	ConstantsYtsEnum,
++	ControlSteadyEnum,
+ 	DamageC1Enum,
+ 	DamageC2Enum,
+ 	DamageC3Enum,
+@@ -647,7 +648,6 @@
+ 	ContourEnum,
+ 	ContoursEnum,
+ 	ControlInputEnum,
+-	ControlSteadyEnum,
+ 	CrouzeixRaviartEnum,
+ 	CuffeyEnum,
+ 	CuffeyTemperateEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22601)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22602)
+@@ -94,6 +94,7 @@
+ 		case ConfigurationTypeEnum : return "ConfigurationType";
+ 		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
++		case ControlSteadyEnum : return "ControlSteady";
+ 		case DamageC1Enum : return "DamageC1";
+ 		case DamageC2Enum : return "DamageC2";
+ 		case DamageC3Enum : return "DamageC3";
+@@ -651,7 +652,6 @@
+ 		case ContourEnum : return "Contour";
+ 		case ContoursEnum : return "Contours";
+ 		case ControlInputEnum : return "ControlInput";
+-		case ControlSteadyEnum : return "ControlSteady";
+ 		case CrouzeixRaviartEnum : return "CrouzeixRaviart";
+ 		case CuffeyEnum : return "Cuffey";
+ 		case CuffeyTemperateEnum : return "CuffeyTemperate";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22601)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22602)
+@@ -94,6 +94,7 @@
+ 	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
+ 	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
++	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+ 	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+ 	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
+ 	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+-	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
++	      if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
++	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+ 	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+ 	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+-	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
++	      if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
++	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+ 	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+-	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
++	      if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
++	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+ 	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+-	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
++	      if (strcmp(name,"SmbD")==0) return SmbDEnum;
++	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+ 	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+-	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
++	      if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
++	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+@@ -666,7 +667,6 @@
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+ 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+ 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+-	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+ 	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
+ 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22602-22603.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22602-22603.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22602-22603.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/jenkins/macosx_pine-island_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22602)
++++ ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22603)
+@@ -20,7 +20,7 @@
+ 	--with-boost-dir=$ISSM_DIR/externalpackages/boost/install \
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-numthreads=4 \
++	--with-numthreads=1 \
+ 	--enable-debugging \
+ 	--enable-development'
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22603-22604.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22603-22604.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22603-22604.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/jenkins/macosx_pine-island_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22603)
++++ ../trunk-jpl/jenkins/macosx_pine-island_dakota	(revision 22604)
+@@ -20,7 +20,7 @@
+ 	--with-boost-dir=$ISSM_DIR/externalpackages/boost/install \
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-numthreads=1 \
++	--with-numthreads=4 \
+ 	--enable-debugging \
+ 	--enable-development'
+ 
+@@ -50,10 +50,10 @@
+ 
+ #number of cpus used in ISSM installation and compilation (one is usually
+ #safer as some packages are very sensitive to parallel compilation)
+-NUMCPUS_INSTALL=1
++NUMCPUS_INSTALL=4
+ 
+ #number of cpus used in the nightly runs.
+-NUMCPUS_RUN=1
++NUMCPUS_RUN=2
+ 
+ #Nightly run options. The matlab routine runme.m will be called
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
Index: /issm/oecreview/Archive/21724-22754/ISSM-22604-22605.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22604-22605.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22604-22605.diff	(revision 22755)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22604)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22605)
+@@ -156,6 +156,7 @@
+ 	InversionControlParametersEnum,
+ 	InversionControlScalingFactorsEnum,
+ 	InversionCostFunctionsEnum,
++	InversionCostFunctionThresholdEnum,
+ 	InversionDxminEnum,
+ 	InversionGatolEnum,
+ 	InversionGradientScalingEnum,
+@@ -773,7 +774,6 @@
+ 	IntMatParamEnum,
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+-	InversionCostFunctionThresholdEnum,
+ 	InversionFatolEnum,
+ 	InversionFrtolEnum,
+ 	InversionVzObsEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22604)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22605)
+@@ -164,6 +164,7 @@
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
+ 		case InversionCostFunctionsEnum : return "InversionCostFunctions";
++		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+ 		case InversionDxminEnum : return "InversionDxmin";
+ 		case InversionGatolEnum : return "InversionGatol";
+ 		case InversionGradientScalingEnum : return "InversionGradientScaling";
+@@ -777,7 +778,6 @@
+ 		case IntMatParamEnum : return "IntMatParam";
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+-		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+ 		case InversionFatolEnum : return "InversionFatol";
+ 		case InversionFrtolEnum : return "InversionFrtol";
+ 		case InversionVzObsEnum : return "InversionVzObs";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22604)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22605)
+@@ -167,6 +167,7 @@
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
++	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
+ 	      else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+ 	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+-	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
++	      if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
++	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+-	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
++	      if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
++	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+-	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbD")==0) return SmbDEnum;
++	      if (strcmp(name,"SmbC")==0) return SmbCEnum;
++	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+-	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
++	      if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
++	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+-	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Gsl")==0) return GslEnum;
++	      if (strcmp(name,"Gset")==0) return GsetEnum;
++	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+@@ -795,7 +796,6 @@
+ 	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum;
+ 	      else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22605-22606.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22605-22606.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22605-22606.diff	(revision 22755)
@@ -0,0 +1,583 @@
+Index: ../trunk-jpl/src/c/shared/Enum/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 22605)
++++ ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 22606)
+@@ -12,6 +12,7 @@
+ NUMENUMS=$(wc -l temp | awk '{printf("%s",$1);}');
+ 
+ #Deal with Analyses
++if false ; then
+ #Build EnumToAnalysis.cpp {{{
+ #Header
+ cat <<END > $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
+@@ -84,6 +85,7 @@
+ ])
+ END
+ #}}}
++fi
+ 
+ #Enum to String conversions
+ #Build EnumToStringx.cpp {{{
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22605)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22606)
+@@ -84,9 +84,7 @@
+ 	CalvingMaxEnum,
+ 	CalvingMinthicknessEnum,
+ 	ConfigurationTypeEnum,
+-	ConstantsReferencetemperatureEnum,
+ 	ConstantsYtsEnum,
+-	ControlSteadyEnum,
+ 	DamageC1Enum,
+ 	DamageC2Enum,
+ 	DamageC3Enum,
+@@ -156,7 +154,6 @@
+ 	InversionControlParametersEnum,
+ 	InversionControlScalingFactorsEnum,
+ 	InversionCostFunctionsEnum,
+-	InversionCostFunctionThresholdEnum,
+ 	InversionDxminEnum,
+ 	InversionGatolEnum,
+ 	InversionGradientScalingEnum,
+@@ -197,7 +194,6 @@
+ 	MeltingOffsetEnum,
+ 	MeshAverageVertexConnectivityEnum,
+ 	MeshElementtypeEnum,
+-	MeshNumberofelementsEnum,
+ 	MeshNumberoflayersEnum,
+ 	MeshNumberofverticesEnum,
+ 	ModelIdEnum,
+@@ -240,7 +236,6 @@
+ 	SealevelriseTransitionsEnum,
+ 	SealevelriseUElasticEnum,
+ 	SettingsIoGatherEnum,
+-	SettingsLowmemEnum,
+ 	SettingsOutputFrequencyEnum,
+ 	SettingsRecordingFrequencyEnum,
+ 	SettingsResultsOnNodesEnum,
+@@ -644,6 +639,7 @@
+ 	ClosedEnum,
+ 	ColinearEnum,
+ 	ConstantsGEnum,
++	ConstantsReferencetemperatureEnum,
+ 	ConstraintsEnum,
+ 	ContactEnum,
+ 	ContourEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22606)
+@@ -92,9 +92,7 @@
+ 		case CalvingMaxEnum : return "CalvingMax";
+ 		case CalvingMinthicknessEnum : return "CalvingMinthickness";
+ 		case ConfigurationTypeEnum : return "ConfigurationType";
+-		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
+-		case ControlSteadyEnum : return "ControlSteady";
+ 		case DamageC1Enum : return "DamageC1";
+ 		case DamageC2Enum : return "DamageC2";
+ 		case DamageC3Enum : return "DamageC3";
+@@ -164,7 +162,6 @@
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
+ 		case InversionCostFunctionsEnum : return "InversionCostFunctions";
+-		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+ 		case InversionDxminEnum : return "InversionDxmin";
+ 		case InversionGatolEnum : return "InversionGatol";
+ 		case InversionGradientScalingEnum : return "InversionGradientScaling";
+@@ -205,7 +202,6 @@
+ 		case MeltingOffsetEnum : return "MeltingOffset";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+ 		case MeshElementtypeEnum : return "MeshElementtype";
+-		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+ 		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
+ 		case MeshNumberofverticesEnum : return "MeshNumberofvertices";
+ 		case ModelIdEnum : return "ModelId";
+@@ -248,7 +244,6 @@
+ 		case SealevelriseTransitionsEnum : return "SealevelriseTransitions";
+ 		case SealevelriseUElasticEnum : return "SealevelriseUElastic";
+ 		case SettingsIoGatherEnum : return "SettingsIoGather";
+-		case SettingsLowmemEnum : return "SettingsLowmem";
+ 		case SettingsOutputFrequencyEnum : return "SettingsOutputFrequency";
+ 		case SettingsRecordingFrequencyEnum : return "SettingsRecordingFrequency";
+ 		case SettingsResultsOnNodesEnum : return "SettingsResultsOnNodes";
+@@ -648,6 +643,7 @@
+ 		case ClosedEnum : return "Closed";
+ 		case ColinearEnum : return "Colinear";
+ 		case ConstantsGEnum : return "ConstantsG";
++		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstraintsEnum : return "Constraints";
+ 		case ContactEnum : return "Contact";
+ 		case ContourEnum : return "Contour";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22606)
+@@ -92,9 +92,7 @@
+ 	      else if (strcmp(name,"CalvingMax")==0) return CalvingMaxEnum;
+ 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
+ 	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
+-	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+-	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+ 	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+ 	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+@@ -136,12 +134,12 @@
+ 	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
+ 	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
++	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
++	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+-	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+-	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
++	      if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
+@@ -167,7 +165,6 @@
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+-	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
+ 	      else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+@@ -208,7 +205,6 @@
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
+-	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
+ 	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
+ 	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
+@@ -251,7 +247,6 @@
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+ 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+-	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
+ 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
+@@ -259,15 +254,15 @@
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+ 	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
++	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+ 	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+-	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+@@ -382,15 +377,15 @@
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
++	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+@@ -505,15 +500,15 @@
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbC")==0) return SmbCEnum;
++	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+ 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+-	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+ 	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+@@ -628,15 +623,15 @@
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
++	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+@@ -663,6 +658,7 @@
+ 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
++	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+@@ -751,14 +747,14 @@
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
++	      else if (strcmp(name,"Gset")==0) return GsetEnum;
++	      else if (strcmp(name,"Gsl")==0) return GslEnum;
++	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Gset")==0) return GsetEnum;
+-	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+-	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+-	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+-	      else if (strcmp(name,"Hook")==0) return HookEnum;
++	      if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+@@ -874,14 +870,14 @@
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
++	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
++	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
++	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
++	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+-	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+-	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+-	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
++	      if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+@@ -997,14 +993,14 @@
+ 	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
++	      else if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
++	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
++	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
++	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TemperaturePDD")==0) return TemperaturePDDEnum;
+-	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+-	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+-	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+-	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++	      if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+@@ -1120,14 +1116,14 @@
+ 	      else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
+ 	      else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
+ 	      else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
++	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
++	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
++	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
++	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
+-	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
+-	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
+-	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+-	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
++	      if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22606)
+@@ -53,11 +53,9 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.output_frequency",SettingsOutputFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.recording_frequency",SettingsRecordingFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.constants.yts",ConstantsYtsEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.settings.lowmem",SettingsLowmemEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.debug.profiling",DebugProfilingEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.average_vertex_connectivity",MeshAverageVertexConnectivityEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.waitonlock",SettingsWaitonlockEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberofelements",MeshNumberofelementsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberofvertices",MeshNumberofverticesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.results_on_nodes",SettingsResultsOnNodesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.settings.io_gather",SettingsIoGatherEnum));
+@@ -92,7 +90,6 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.mesh.elementtype",MeshElementtypeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.reltol",SteadystateReltolEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.maxiter",SteadystateMaxiterEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.constants.referencetemperature",ConstantsReferencetemperatureEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.groundingline.migration",GroundinglineMigrationEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isstressbalance",TransientIsstressbalanceEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismasstransport",TransientIsmasstransportEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22606)
+@@ -27,14 +27,6 @@
+ 
+ 	if(control_analysis){
+ 
+-		/*What solution type?*/
+-		if(solution_type==SteadystateSolutionEnum){
+-			parameters->AddObject(new BoolParam(ControlSteadyEnum,true));
+-		}
+-		else{
+-			parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
+-		}
+-
+ 		switch(inversiontype){
+ 			  {
+ 			case 0:/*Brent Search*/
+@@ -126,7 +118,6 @@
+ 			case 0:/*Brent Search*/
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.nsteps",InversionNstepsEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.cost_function_threshold",InversionCostFunctionThresholdEnum));
+ 				iomodel->FetchData(&cm_jump,&nsteps,NULL,"md.inversion.step_threshold");
+ 				iomodel->FetchData(&optscal,NULL,NULL,"md.inversion.gradient_scaling");
+ 				iomodel->FetchData(&maxiter,NULL,NULL,"md.inversion.maxiter_per_step");
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22606)
+@@ -184,7 +184,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+ 			iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o");
+@@ -217,7 +216,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isd18opd",SmbIsd18opdEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+ 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22605)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 22606)
+@@ -13,24 +13,21 @@
+ Analysis* EnumToAnalysis(int analysis_enum){
+ 
+ 	switch(analysis_enum){
+-		#ifdef _HAVE_SMB_
+-		case SmbAnalysisEnum : return new SmbAnalysis();
++		#ifdef _HAVE_ADJOINTBALANCETHICKNESS2_
++		case AdjointBalancethickness2AnalysisEnum : return new AdjointBalancethickness2Analysis();
+ 		#endif
+ 		#ifdef _HAVE_ADJOINTBALANCETHICKNESS_
+ 		case AdjointBalancethicknessAnalysisEnum : return new AdjointBalancethicknessAnalysis();
+ 		#endif
+-		#ifdef _HAVE_ADJOINTBALANCETHICKNESS2_
+-		case AdjointBalancethickness2AnalysisEnum : return new AdjointBalancethickness2Analysis();
+-		#endif
+ 		#ifdef _HAVE_ADJOINTHORIZ_
+ 		case AdjointHorizAnalysisEnum : return new AdjointHorizAnalysis();
+ 		#endif
++		#ifdef _HAVE_BALANCETHICKNESS2_
++		case Balancethickness2AnalysisEnum : return new Balancethickness2Analysis();
++		#endif
+ 		#ifdef _HAVE_BALANCETHICKNESS_
+ 		case BalancethicknessAnalysisEnum : return new BalancethicknessAnalysis();
+ 		#endif
+-		#ifdef _HAVE_BALANCETHICKNESS2_
+-		case Balancethickness2AnalysisEnum : return new Balancethickness2Analysis();
+-		#endif
+ 		#ifdef _HAVE_BALANCETHICKNESSSOFT_
+ 		case BalancethicknessSoftAnalysisEnum : return new BalancethicknessSoftAnalysis();
+ 		#endif
+@@ -37,66 +34,84 @@
+ 		#ifdef _HAVE_BALANCEVELOCITY_
+ 		case BalancevelocityAnalysisEnum : return new BalancevelocityAnalysis();
+ 		#endif
+-		#ifdef _HAVE_L2PROJECTIONEPL_
+-		case L2ProjectionEPLAnalysisEnum : return new L2ProjectionEPLAnalysis();
+-		#endif
+-		#ifdef _HAVE_L2PROJECTIONBASE_
+-		case L2ProjectionBaseAnalysisEnum : return new L2ProjectionBaseAnalysis();
+-		#endif
+ 		#ifdef _HAVE_DAMAGEEVOLUTION_
+ 		case DamageEvolutionAnalysisEnum : return new DamageEvolutionAnalysis();
+ 		#endif
+-		#ifdef _HAVE_STRESSBALANCE_
+-		case StressbalanceAnalysisEnum : return new StressbalanceAnalysis();
++		#ifdef _HAVE_DEPTHAVERAGE_
++		case DepthAverageAnalysisEnum : return new DepthAverageAnalysis();
+ 		#endif
+-		#ifdef _HAVE_STRESSBALANCESIA_
+-		case StressbalanceSIAAnalysisEnum : return new StressbalanceSIAAnalysis();
+-		#endif
+-		#ifdef _HAVE_STRESSBALANCEVERTICAL_
+-		case StressbalanceVerticalAnalysisEnum : return new StressbalanceVerticalAnalysis();
+-		#endif
+ 		#ifdef _HAVE_ENTHALPY_
+ 		case EnthalpyAnalysisEnum : return new EnthalpyAnalysis();
+ 		#endif
+-		#ifdef _HAVE_HYDROLOGYSHREVE_
+-		case HydrologyShreveAnalysisEnum : return new HydrologyShreveAnalysis();
++		#ifdef _HAVE_ESA_
++		case EsaAnalysisEnum : return new EsaAnalysis();
+ 		#endif
+-		#ifdef _HAVE_HYDROLOGYDCINEFFICIENT_
+-		case HydrologyDCInefficientAnalysisEnum : return new HydrologyDCInefficientAnalysis();
++		#ifdef _HAVE_EXTRAPOLATION_
++		case ExtrapolationAnalysisEnum : return new ExtrapolationAnalysis();
+ 		#endif
++		#ifdef _HAVE_EXTRUDEFROMBASE_
++		case ExtrudeFromBaseAnalysisEnum : return new ExtrudeFromBaseAnalysis();
++		#endif
++		#ifdef _HAVE_EXTRUDEFROMTOP_
++		case ExtrudeFromTopAnalysisEnum : return new ExtrudeFromTopAnalysis();
++		#endif
++		#ifdef _HAVE_FREESURFACEBASE_
++		case FreeSurfaceBaseAnalysisEnum : return new FreeSurfaceBaseAnalysis();
++		#endif
++		#ifdef _HAVE_FREESURFACETOP_
++		case FreeSurfaceTopAnalysisEnum : return new FreeSurfaceTopAnalysis();
++		#endif
++		#ifdef _HAVE_GIAIVINS_
++		case GiaIvinsAnalysisEnum : return new GiaIvinsAnalysis();
++		#endif
+ 		#ifdef _HAVE_HYDROLOGYDCEFFICIENT_
+ 		case HydrologyDCEfficientAnalysisEnum : return new HydrologyDCEfficientAnalysis();
+ 		#endif
++		#ifdef _HAVE_HYDROLOGYDCINEFFICIENT_
++		case HydrologyDCInefficientAnalysisEnum : return new HydrologyDCInefficientAnalysis();
++		#endif
++		#ifdef _HAVE_HYDROLOGYSHREVE_
++		case HydrologyShreveAnalysisEnum : return new HydrologyShreveAnalysis();
++		#endif
+ 		#ifdef _HAVE_HYDROLOGYSOMMERS_
+ 		case HydrologySommersAnalysisEnum : return new HydrologySommersAnalysis();
+ 		#endif
+-		#ifdef _HAVE_MELTING_
+-		case MeltingAnalysisEnum : return new MeltingAnalysis();
++		#ifdef _HAVE_L2PROJECTIONBASE_
++		case L2ProjectionBaseAnalysisEnum : return new L2ProjectionBaseAnalysis();
+ 		#endif
+-		#ifdef _HAVE_MASSTRANSPORT_
+-		case MasstransportAnalysisEnum : return new MasstransportAnalysis();
++		#ifdef _HAVE_L2PROJECTIONEPL_
++		case L2ProjectionEPLAnalysisEnum : return new L2ProjectionEPLAnalysis();
+ 		#endif
+-		#ifdef _HAVE_FREESURFACEBASE_
+-		case FreeSurfaceBaseAnalysisEnum : return new FreeSurfaceBaseAnalysis();
++		#ifdef _HAVE_LEVELSET_
++		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
+ 		#endif
+-		#ifdef _HAVE_FREESURFACETOP_
+-		case FreeSurfaceTopAnalysisEnum : return new FreeSurfaceTopAnalysis();
++		#ifdef _HAVE_LOVE_
++		case LoveAnalysisEnum : return new LoveAnalysis();
+ 		#endif
+-		#ifdef _HAVE_EXTRUDEFROMBASE_
+-		case ExtrudeFromBaseAnalysisEnum : return new ExtrudeFromBaseAnalysis();
++		#ifdef _HAVE_MASSTRANSPORT_
++		case MasstransportAnalysisEnum : return new MasstransportAnalysis();
+ 		#endif
+-		#ifdef _HAVE_EXTRUDEFROMTOP_
+-		case ExtrudeFromTopAnalysisEnum : return new ExtrudeFromTopAnalysis();
++		#ifdef _HAVE_MELTING_
++		case MeltingAnalysisEnum : return new MeltingAnalysis();
+ 		#endif
+-		#ifdef _HAVE_DEPTHAVERAGE_
+-		case DepthAverageAnalysisEnum : return new DepthAverageAnalysis();
+-		#endif
+ 		#ifdef _HAVE_SEALEVELRISE_
+ 		case SealevelriseAnalysisEnum : return new SealevelriseAnalysis();
+ 		#endif
++		#ifdef _HAVE_SMB_
++		case SmbAnalysisEnum : return new SmbAnalysis();
++		#endif
+ 		#ifdef _HAVE_SMOOTH_
+ 		case SmoothAnalysisEnum : return new SmoothAnalysis();
+ 		#endif
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum : return new StressbalanceAnalysis();
++		#endif
++		#ifdef _HAVE_STRESSBALANCESIA_
++		case StressbalanceSIAAnalysisEnum : return new StressbalanceSIAAnalysis();
++		#endif
++		#ifdef _HAVE_STRESSBALANCEVERTICAL_
++		case StressbalanceVerticalAnalysisEnum : return new StressbalanceVerticalAnalysis();
++		#endif
+ 		#ifdef _HAVE_THERMAL_
+ 		case ThermalAnalysisEnum : return new ThermalAnalysis();
+ 		#endif
+@@ -103,21 +118,6 @@
+ 		#ifdef _HAVE_UZAWAPRESSURE_
+ 		case UzawaPressureAnalysisEnum : return new UzawaPressureAnalysis();
+ 		#endif
+-		#ifdef _HAVE_GIAIVINS_
+-		case GiaIvinsAnalysisEnum : return new GiaIvinsAnalysis();
+-		#endif
+-		#ifdef _HAVE_ESA_
+-		case EsaAnalysisEnum : return new EsaAnalysis();
+-		#endif
+-		#ifdef _HAVE_LOVE_
+-		case LoveAnalysisEnum : return new LoveAnalysis();
+-		#endif
+-		#ifdef _HAVE_LEVELSET_
+-		case LevelsetAnalysisEnum : return new LevelsetAnalysis();
+-		#endif
+-		#ifdef _HAVE_EXTRAPOLATION_
+-		case ExtrapolationAnalysisEnum : return new ExtrapolationAnalysis();
+-		#endif
+ 		default : _error_("enum provided not supported ("<<EnumToStringx(analysis_enum)<<")");
+ 	}
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22606-22607.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22606-22607.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22606-22607.diff	(revision 22755)
@@ -0,0 +1,197 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22606)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22607)
+@@ -127,8 +127,6 @@
+ 				break;
+ 			case 1:/*TAO*/
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.fatol",InversionFatolEnum));
+-				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.frtol",InversionFrtolEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gatol",InversionGatolEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.grtol",InversionGrtolEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22606)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22607)
+@@ -184,8 +184,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+ 			iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o");
+ 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+ 
+@@ -216,8 +214,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isd18opd",SmbIsd18opdEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.issetpddfac",SmbIssetpddfacEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+ 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+ 			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
+ 			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 22606)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 22607)
+@@ -77,9 +77,7 @@
+ 	/*retrieve some parameters: */
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.damage.law",DamageLawEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.damage.stabilization",DamageStabilizationEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.damage.maxiter",DamageMaxiterEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject("md.damage.max_damage",DamageMaxDamageEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject("md.damage.elementinterp",DamageElementinterpEnum));
+ 
+ 	/*Requested outputs*/
+ 	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.damage.requested_outputs");
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22606)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22607)
+@@ -649,10 +649,8 @@
+ 	CuffeyEnum,
+ 	CuffeyTemperateEnum,
+ 	DamageC4Enum,
+-	DamageElementinterpEnum,
+ 	DamageEvolutionAnalysisEnum,
+ 	DamageEvolutionSolutionEnum,
+-	DamageMaxiterEnum,
+ 	DataSetEnum,
+ 	DatasetInputEnum,
+ 	DataSetParamEnum,
+@@ -770,8 +768,6 @@
+ 	IntMatParamEnum,
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+-	InversionFatolEnum,
+-	InversionFrtolEnum,
+ 	InversionVzObsEnum,
+ 	JEnum,
+ 	L1L2ApproximationEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22606)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22607)
+@@ -653,10 +653,8 @@
+ 		case CuffeyEnum : return "Cuffey";
+ 		case CuffeyTemperateEnum : return "CuffeyTemperate";
+ 		case DamageC4Enum : return "DamageC4";
+-		case DamageElementinterpEnum : return "DamageElementinterp";
+ 		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
+ 		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
+-		case DamageMaxiterEnum : return "DamageMaxiter";
+ 		case DataSetEnum : return "DataSet";
+ 		case DatasetInputEnum : return "DatasetInput";
+ 		case DataSetParamEnum : return "DataSetParam";
+@@ -774,8 +772,6 @@
+ 		case IntMatParamEnum : return "IntMatParam";
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+-		case InversionFatolEnum : return "InversionFatol";
+-		case InversionFrtolEnum : return "InversionFrtol";
+ 		case InversionVzObsEnum : return "InversionVzObs";
+ 		case JEnum : return "J";
+ 		case L1L2ApproximationEnum : return "L1L2Approximation";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22606)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22607)
+@@ -668,10 +668,8 @@
+ 	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
+ 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
+ 	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+-	      else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum;
+ 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+-	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+ 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
+ 	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
+@@ -751,12 +749,12 @@
+ 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
++	      else if (strcmp(name,"Hook")==0) return HookEnum;
++	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Hook")==0) return HookEnum;
+-	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+-	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
++	      if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+@@ -792,8 +790,6 @@
+ 	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum;
+-	      else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+@@ -874,14 +870,14 @@
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
++	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
++	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
++	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
++	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Moulin")==0) return MoulinEnum;
+-	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+-	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+-	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+-	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
++	      if (strcmp(name,"Mumps")==0) return MumpsEnum;
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+@@ -997,14 +993,14 @@
+ 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
+ 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
++	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
++	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
++	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+-	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+-	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+-	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+-	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
++	      if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+@@ -1120,14 +1116,14 @@
+ 	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
+ 	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
+ 	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
++	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
++	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
++	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
++	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
+-	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+-	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+-	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+-	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++	      if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22607-22608.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22607-22608.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22607-22608.diff	(revision 22755)
@@ -0,0 +1,159 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22607)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22608)
+@@ -648,7 +648,6 @@
+ 	CrouzeixRaviartEnum,
+ 	CuffeyEnum,
+ 	CuffeyTemperateEnum,
+-	DamageC4Enum,
+ 	DamageEvolutionAnalysisEnum,
+ 	DamageEvolutionSolutionEnum,
+ 	DataSetEnum,
+@@ -934,7 +933,6 @@
+ 	SMBhenningEnum,
+ 	SmbMAddEnum,
+ 	SMBmeltcomponentsEnum,
+-	SmbOutputFreqEnum,
+ 	SMBpddEnum,
+ 	SmbRlapsEnum,
+ 	SmbRlapslgmEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22607)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22608)
+@@ -652,7 +652,6 @@
+ 		case CrouzeixRaviartEnum : return "CrouzeixRaviart";
+ 		case CuffeyEnum : return "Cuffey";
+ 		case CuffeyTemperateEnum : return "CuffeyTemperate";
+-		case DamageC4Enum : return "DamageC4";
+ 		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
+ 		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
+ 		case DataSetEnum : return "DataSet";
+@@ -938,7 +937,6 @@
+ 		case SMBhenningEnum : return "SMBhenning";
+ 		case SmbMAddEnum : return "SmbMAdd";
+ 		case SMBmeltcomponentsEnum : return "SMBmeltcomponents";
+-		case SmbOutputFreqEnum : return "SmbOutputFreq";
+ 		case SMBpddEnum : return "SMBpdd";
+ 		case SmbRlapsEnum : return "SmbRlaps";
+ 		case SmbRlapslgmEnum : return "SmbRlapslgm";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22607)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22608)
+@@ -667,7 +667,6 @@
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+ 	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
+ 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
+-	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
+ 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+ 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
+@@ -751,11 +750,11 @@
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
++	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+-	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
++	      if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+@@ -874,11 +873,11 @@
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
++	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Mumps")==0) return MumpsEnum;
+-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+@@ -959,7 +958,6 @@
+ 	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+ 	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
+ 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
+-	      else if (strcmp(name,"SmbOutputFreq")==0) return SmbOutputFreqEnum;
+ 	      else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
+ 	      else if (strcmp(name,"SmbRlaps")==0) return SmbRlapsEnum;
+ 	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
+@@ -997,12 +995,12 @@
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
++	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
++	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
+-	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
+-	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
++	      if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+ 	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+@@ -1120,12 +1118,12 @@
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
++	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+-	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+Index: ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22607)
++++ ../trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22608)
+@@ -160,7 +160,6 @@
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.aIdx",SmbAIdxEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.swIdx",SmbSwIdxEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.denIdx",SmbDenIdxEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject("md.smb.outputFreq",SmbOutputFreqEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.cldFrac",SmbCldFracEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.t0wet",SmbT0wetEnum));
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.t0dry",SmbT0dryEnum));
+@@ -218,13 +217,11 @@
+ 			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
+ 			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
+ 			if(isd18opd){
++				parameters->AddObject(iomodel->CopyConstantObject("md.smb.f",SmbFEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.smb.istemperaturescaled",SmbIstemperaturescaledEnum));
+ 				iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2);
+ 				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
+ 				iomodel->DeleteData(temp,"md.smb.delta18o");
+-				
+-				parameters->AddObject(iomodel->CopyConstantObject("md.smb.dpermil",SmbDpermilEnum));
+-			   parameters->AddObject(iomodel->CopyConstantObject("md.smb.f",SmbFEnum));
+ 			}
+ 			break;
+ 		case SMBgradientsEnum:
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 22607)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 22608)
+@@ -96,7 +96,6 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c1",DamageC1Enum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c2",DamageC2Enum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c3",DamageC3Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c4",DamageC4Enum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.stress_threshold",DamageStressThresholdEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.kappa",DamageKappaEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.damage.healing",DamageHealingEnum));
Index: /issm/oecreview/Archive/21724-22754/ISSM-22608-22609.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22608-22609.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22608-22609.diff	(revision 22755)
@@ -0,0 +1,196 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22608)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22609)
+@@ -610,7 +610,6 @@
+ 	AndroidFrictionCoefficientEnum,
+ 	ArrheniusEnum,
+ 	AutodiffJacobianEnum,
+-	AutodiffKeepEnum,
+ 	Balancethickness2AnalysisEnum,
+ 	Balancethickness2SolutionEnum,
+ 	BalancethicknessAnalysisEnum,
+@@ -682,7 +681,6 @@
+ 	EsaAnalysisEnum,
+ 	EsaEmotionEnum,
+ 	EsaNmotionEnum,
+-	EsaNumRequestedOutputsEnum,
+ 	EsaRotationrateEnum,
+ 	EsaSolutionEnum,
+ 	EsaStrainratexxEnum,
+@@ -904,7 +902,6 @@
+ 	SealevelInertiaTensorZZEnum,
+ 	SealevelNmotionEnum,
+ 	SealevelriseAnalysisEnum,
+-	SealevelriseNumRequestedOutputsEnum,
+ 	SealevelriseSolutionEnum,
+ 	SealevelriseStericRateEnum,
+ 	SealevelUmotionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22608)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22609)
+@@ -614,7 +614,6 @@
+ 		case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
+ 		case ArrheniusEnum : return "Arrhenius";
+ 		case AutodiffJacobianEnum : return "AutodiffJacobian";
+-		case AutodiffKeepEnum : return "AutodiffKeep";
+ 		case Balancethickness2AnalysisEnum : return "Balancethickness2Analysis";
+ 		case Balancethickness2SolutionEnum : return "Balancethickness2Solution";
+ 		case BalancethicknessAnalysisEnum : return "BalancethicknessAnalysis";
+@@ -686,7 +685,6 @@
+ 		case EsaAnalysisEnum : return "EsaAnalysis";
+ 		case EsaEmotionEnum : return "EsaEmotion";
+ 		case EsaNmotionEnum : return "EsaNmotion";
+-		case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
+ 		case EsaRotationrateEnum : return "EsaRotationrate";
+ 		case EsaSolutionEnum : return "EsaSolution";
+ 		case EsaStrainratexxEnum : return "EsaStrainratexx";
+@@ -908,7 +906,6 @@
+ 		case SealevelInertiaTensorZZEnum : return "SealevelInertiaTensorZZ";
+ 		case SealevelNmotionEnum : return "SealevelNmotion";
+ 		case SealevelriseAnalysisEnum : return "SealevelriseAnalysis";
+-		case SealevelriseNumRequestedOutputsEnum : return "SealevelriseNumRequestedOutputs";
+ 		case SealevelriseSolutionEnum : return "SealevelriseSolution";
+ 		case SealevelriseStericRateEnum : return "SealevelriseStericRate";
+ 		case SealevelUmotionEnum : return "SealevelUmotion";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22608)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22609)
+@@ -626,13 +626,12 @@
+ 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+-	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
++	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+-	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
++	      if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+@@ -701,7 +700,6 @@
+ 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+ 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
+ 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
+-	      else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+ 	      else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum;
+ 	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
+@@ -751,12 +749,12 @@
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
++	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
++	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+-	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+-	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
++	      if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplInitialThickness")==0) return HydrologydcEplInitialThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum;
+@@ -874,12 +872,12 @@
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+ 	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
++	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+-	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+-	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
++	      if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+@@ -929,7 +927,6 @@
+ 	      else if (strcmp(name,"SealevelInertiaTensorZZ")==0) return SealevelInertiaTensorZZEnum;
+ 	      else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum;
+ 	      else if (strcmp(name,"SealevelriseAnalysis")==0) return SealevelriseAnalysisEnum;
+-	      else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SealevelriseSolution")==0) return SealevelriseSolutionEnum;
+ 	      else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum;
+ 	      else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum;
+@@ -997,13 +994,13 @@
+ 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
+ 	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalGroundedBmb")==0) return TotalGroundedBmbEnum;
++	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
++	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
++	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+-	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+-	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+-	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
++	      if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+ 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+@@ -1120,13 +1117,13 @@
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+ 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
++	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+-	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+-	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+-	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
++	      if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+ 	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 22608)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 22609)
+@@ -74,7 +74,6 @@
+ 
+ 	if(isautodiff){
+ 		/*Copy some parameters from IoModel to parameters dataset: {{{*/
+-		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.keep",AutodiffKeepEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.obufsize",AutodiffObufsizeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.cbufsize",AutodiffCbufsizeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.lbufsize",AutodiffLbufsizeEnum));
+Index: ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 22608)
++++ ../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 22609)
+@@ -218,7 +218,6 @@
+ 
+ 	/*Requested outputs*/
+ 	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.slr.requested_outputs");
+-	parameters->AddObject(new IntParam(SealevelriseNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new StringArrayParam(SealevelriseRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.slr.requested_outputs");
+ 
+Index: ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 22608)
++++ ../trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 22609)
+@@ -167,7 +167,6 @@
+ 
+ 	/*Requested outputs*/
+ 	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.esa.requested_outputs");
+-	parameters->AddObject(new IntParam(EsaNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new StringArrayParam(EsaRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.esa.requested_outputs");
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22609-22610.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22609-22610.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22609-22610.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/cores/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22609)
++++ ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 22610)
+@@ -25,7 +25,7 @@
+ 	int     dummy;
+ 	int     num_dependents=0;
+ 	int     num_independents=0;
+-	bool    isautodiff       = false;
++	bool    isautodiff,iscontrol;
+ 	char   *driver           = NULL;
+ 	size_t  tape_stats[15];
+ 
+@@ -36,8 +36,9 @@
+ 
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++	femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum);
+ 
+-	if(isautodiff){
++	if(isautodiff && !iscontrol){
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22610-22611.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22610-22611.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22610-22611.diff	(revision 22755)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22610)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22611)
+@@ -887,8 +887,6 @@
+ 	ProfilingCurrentFlopsEnum,
+ 	ProfilingCurrentMemEnum,
+ 	ProfilingSolutionTimeEnum,
+-	QmuNumberofresponsesEnum,
+-	QmuVariabledescriptorsEnum,
+ 	RegionaloutputEnum,
+ 	RegularEnum,
+ 	ResetPenaltiesEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22610)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22611)
+@@ -891,8 +891,6 @@
+ 		case ProfilingCurrentFlopsEnum : return "ProfilingCurrentFlops";
+ 		case ProfilingCurrentMemEnum : return "ProfilingCurrentMem";
+ 		case ProfilingSolutionTimeEnum : return "ProfilingSolutionTime";
+-		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+-		case QmuVariabledescriptorsEnum : return "QmuVariabledescriptors";
+ 		case RegionaloutputEnum : return "Regionaloutput";
+ 		case RegularEnum : return "Regular";
+ 		case ResetPenaltiesEnum : return "ResetPenalties";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22610)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22611)
+@@ -912,8 +912,6 @@
+ 	      else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
+ 	      else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
+ 	      else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
+-	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+-	      else if (strcmp(name,"QmuVariabledescriptors")==0) return QmuVariabledescriptorsEnum;
+ 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
+ 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
+ 	      else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+@@ -997,12 +995,12 @@
+ 	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
++	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
++	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+-	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+@@ -1120,12 +1118,12 @@
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
++	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
++	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+-	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+-	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
++	      if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+ 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 22610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 22611)
+@@ -58,15 +58,11 @@
+ 		/*Fetch variable descriptors*/
+ 		iomodel->FindConstant(&variabledescriptors,&numvariabledescriptors,"md.qmu.variabledescriptors");
+ 
+-		/*Ok, we have all the variable descriptors. Build a parameter with it: */
+-		parameters->AddObject(new StringArrayParam(QmuVariabledescriptorsEnum,variabledescriptors,numvariabledescriptors));
+-
+ 		/*Fetch response descriptors*/
+ 		iomodel->FindConstant(&responsedescriptors,&numresponsedescriptors,"md.qmu.responsedescriptors");
+ 
+ 		/*Ok, we have all the response descriptors. Build a parameter with it: */
+ 		parameters->AddObject(new StringArrayParam(QmuResponsedescriptorsEnum,responsedescriptors,numresponsedescriptors));
+-		parameters->AddObject(new    IntParam(QmuNumberofresponsesEnum,numberofresponses));
+ 
+ 		/*Deal with partitioning*/
+ 		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22611-22612.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22611-22612.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22611-22612.diff	(revision 22755)
@@ -0,0 +1,777 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22611)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22612)
+@@ -76,6 +76,7 @@
+ 					./classes/Numberedcostfunction.cpp\
+ 					./classes/Misfit.cpp\
+ 					./classes/Cfsurfacesquare.cpp\
++					./classes/Cfdragcoeffabsgrad.cpp\
+ 					./classes/Cfsurfacelogvel.cpp\
+ 					./classes/Regionaloutput.cpp\
+ 					./classes/Nodalvalue.cpp\
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22612)
+@@ -64,7 +64,15 @@
+ 
+ 	/*Recover Arguments*/
+ 	m1qn3_struct *input_struct = (m1qn3_struct*)dzs;
+-	FemModel     *femmodel     = input_struct->femmodel;
++
++	FemModel* femmodel = input_struct->femmodel;
++	int num_responses,num_controls,numberofvertices,solution_type;
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	
++	if (solution_type == TransientSolutionEnum){
++		femmodel = input_struct->femmodel->copy();
++		}
++
+ 	IssmPDouble  *Jlist        = input_struct->Jlist;
+ 	int           JlistM       = input_struct->M;
+ 	int           JlistN       = input_struct->N;
+@@ -72,12 +80,10 @@
+ 	int           intn         = (int)*n;
+ 
+ 	/*Recover some parameters*/
+-	int num_responses,num_controls,numberofvertices,solution_type;
+ 	IssmDouble* scaling_factors = NULL;
+ 	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+ 	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	numberofvertices=femmodel->vertices->NumberOfVertices();
+ 
+ 	/*Constrain input vector and update controls*/
+@@ -97,7 +103,7 @@
+ 	/*Start Tracing*/
+ 	simul_starttrace(femmodel);
+ 
+-	/*Set X as our new control input abd as INDEPENDENT!!*/
++	/*Set X as our new control input and as INDEPENDENT*/
+ #ifdef _HAVE_AD_
+ 	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
+ #else
+@@ -111,18 +117,29 @@
+ 	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	SetControlInputsFromVectorx(femmodel,aX);
+ 	xDelete<IssmDouble>(aX);
+-
++	
+ 	/*Compute solution (forward)*/
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
++
++	/*Reset the time to zero for next optimization*/
++	if(solution_type==TransientSolutionEnum){
++		IssmDouble restart_time;
++	
++		femmodel->parameters->FindParam(&restart_time,TimesteppingStartTimeEnum);
++		femmodel->parameters->SetParam(restart_time,TimeEnum);
++
++	}
++
+ 	/*Get Dependents*/
+ 	IssmDouble  output_value;
+ 	int         num_dependents;
+ 	IssmPDouble *dependents;
+ 	DataSet*    dependent_objects=NULL;
+-
++	IssmDouble	J=0.;
++	
+ 	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+ 
+@@ -130,9 +147,11 @@
+ 	dependents=xNew<IssmPDouble>(num_dependents);
+ 	for(int i=0;i<dependent_objects->Size();i++){
+ 		DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-		dep->Responsex(&output_value,femmodel);
++		if(solution_type==TransientSolutionEnum) output_value = dep->GetValue();
++		if(solution_type!=TransientSolutionEnum) dep->Responsex(&output_value,femmodel);
+ 		if (my_rank==0) {
+ 			output_value>>=dependents[i];
++			J+=output_value;
+ 		}
+ 	}
+ 
+@@ -217,7 +236,7 @@
+ 
+ 	/* Ok, now we are going to call the fos_reverse in a loop on the index, from 0 to num_dependents, so
+ 	 * as to generate num_dependents gradients: */
+-	totalgradient=xNewZeroInit<IssmPDouble>(num_independents);
++	totalgradient=xNewZeroInit<IssmPDouble>(num_independents_old);
+ 
+ 	for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){
+ 
+@@ -252,22 +271,17 @@
+ 
+ 	/*Broadcast gradient to other ranks*/
+ 	ISSM_MPI_Bcast(totalgradient,num_independents_old,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
+-
+ 	/*Check size of Jlist to avoid crashes*/
+ 	_assert_((*Jlisti)<JlistM);
+ 	_assert_(JlistN==num_responses+1);
+ 
+ 	/*Compute objective function*/
+-	IssmDouble* Jtemp = NULL;
+-	IssmDouble J;
+-	femmodel->CostFunctionx(&J,&Jtemp,NULL);
+ 	*pf = reCast<double>(J);
+ 	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
+ 
+ 	/*Record cost function values and delete Jtemp*/
+-	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(Jtemp[i]);
++	for(int i=0;i<num_responses;i++) Jlist[(*Jlisti)*JlistN+i] = reCast<IssmPDouble>(dependents[i]);
+ 	Jlist[(*Jlisti)*JlistN+num_responses] = reCast<IssmPDouble>(J);
+-	xDelete<IssmDouble>(Jtemp);
+ 
+ 	if(*indic==0){
+ 		/*dry run, no gradient required*/
+@@ -284,7 +298,7 @@
+ 	}
+ 
+ 	/*Compute gradient*/
+-	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
++	for(long i=0;i<num_independents_old;i++)	G[i] = totalgradient[i];
+ 
+ 	/*Constrain Gradient*/
+ 	IssmDouble  Gnorm = 0.;
+@@ -358,7 +372,6 @@
+ 	/*Get initial guess*/
+ 	Vector<double> *Xpetsc = NULL;
+ 
+-	/*THIS IS WHERE IT FAILS*/
+ 	GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+ 	X = Xpetsc->ToMPISerial();
+ 	Xpetsc->GetSize(&intn);
+@@ -396,16 +409,19 @@
+ 	mystruct.i        = xNewZeroInit<int>(1);
+ 	/*Initialize Gradient and cost function of M1QN3*/
+ 	indic = 4; /*gradient required*/
+-printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	/*Estimation of the expected decrease in f during the first iteration*/
+ 	double df1=f;
+ 
++printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	/*Call M1QN3 solver*/
+ 	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
+ 				&n,X,&f,G,&dxmin,&df1,
+ 				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
+ 				&reverse,&indic,izs,rzs,(void*)&mystruct);
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	switch(int(omode)){
+ 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+@@ -419,10 +435,13 @@
+ 	}
+ 	/*Constrain solution vector*/
+ 	double  *XL = NULL;
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	double  *XU = NULL;
+ 	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 
++	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+Index: ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 22612)
+@@ -0,0 +1,195 @@
++/*!\file Cfdragcoeffabsgrad.cpp
++ * \brief: Cfdragcoeffabsgrad Object
++ */
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./classes.h"
++#include "./ExternalResults/ExternalResult.h"
++#include "./ExternalResults/Results.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++#include "../modules/SurfaceAreax/SurfaceAreax.h"
++#include "../classes/Params/Parameters.h"
++#include "../classes/Inputs/Input.h"
++#include "../classes/gauss/Gauss.h"
++/*}}}*/
++		
++/*Cfdragcoeffabsgrad constructors, destructors :*/
++Cfdragcoeffabsgrad::Cfdragcoeffabsgrad(){/*{{{*/
++
++	this->definitionenum = -1;
++	this->name = NULL;
++	this->weights_enum = UNDEF;
++	this->misfit=0;
++	this->lock=0;
++	this->datatime=0.;
++	this->timepassedflag = false;
++	this->last_time = 0.;
++
++}
++/*}}}*/
++Cfdragcoeffabsgrad::Cfdragcoeffabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, IssmDouble in_datatime, bool in_timepassedflag){/*{{{*/
++
++	this->definitionenum=in_definitionenum;
++	
++	this->name		= xNew<char>(strlen(in_name)+1);
++	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++	this->weights_enum=in_weights_enum;
++	this->datatime=in_datatime;
++	this->timepassedflag=in_timepassedflag;
++	
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++Cfdragcoeffabsgrad::~Cfdragcoeffabsgrad(){/*{{{*/
++	if(this->name)xDelete(this->name);
++	this->misfit=0;
++	this->lock=0;
++}
++/*}}}*/
++/*Object virtual function resolutoin: */
++Object* Cfdragcoeffabsgrad::copy() {/*{{{*/
++	Cfdragcoeffabsgrad* mf = new Cfdragcoeffabsgrad(this->name,this->definitionenum, this->weights_enum,this->datatime,this->timepassedflag);
++	mf->misfit=this->misfit;
++	mf->lock=this->lock;
++	return (Object*) mf;
++}
++/*}}}*/
++void Cfdragcoeffabsgrad::DeepEcho(void){/*{{{*/
++	this->Echo();
++}
++/*}}}*/
++void Cfdragcoeffabsgrad::Echo(void){/*{{{*/
++	_printf_(" Cfdragcoeffabsgrad: " << name << " " << this->definitionenum << "\n");
++	_printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
++	_printf_("    datatime: " << datatime << "\n");
++	_printf_("	  timepassedflag: "<<timepassedflag<<"\n");
++}
++/*}}}*/
++int Cfdragcoeffabsgrad::Id(void){/*{{{*/
++	return -1;
++}
++/*}}}*/
++void Cfdragcoeffabsgrad::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
++	_error_("not implemented yet!"); 
++} 
++/*}}}*/
++int Cfdragcoeffabsgrad::ObjectEnum(void){/*{{{*/
++	return CfdragcoeffabsgradEnum;
++}
++/*}}}*/
++/*Definition virtual function resolutoin: */
++int Cfdragcoeffabsgrad::DefinitionEnum(){/*{{{*/
++	return this->definitionenum;
++}
++/*}}}*/
++char* Cfdragcoeffabsgrad::Name(){/*{{{*/
++	char* name2=xNew<char>(strlen(this->name)+1);
++	xMemCpy(name2,this->name,strlen(this->name)+1);
++
++	return name2;
++}
++/*}}}*/
++IssmDouble Cfdragcoeffabsgrad::Response(FemModel* femmodel){/*{{{*/
++	 /*diverse: */
++	 IssmDouble time;
++	 
++	 /*recover time parameters: */
++	 femmodel->parameters->FindParam(&time,TimeEnum);
++	 if(time < last_time) timepassedflag = false;
++	 last_time = time;
++
++		 int i;
++		 IssmDouble J=0.;
++		 IssmDouble J_sum=0.;
++
++	 if(datatime<=time && !timepassedflag){
++		 for(i=0;i<femmodel->elements->Size();i++){
++			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
++			 J+=this->Cfdragcoeffabsgrad_Calculation(element,weights_enum);
++		 }
++
++		 ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++		 J=J_sum;
++		
++		 timepassedflag = true;
++		 return J;
++	}
++	 else return J;
++ }
++	/*}}}*/
++IssmDouble Cfdragcoeffabsgrad::Cfdragcoeffabsgrad_Calculation(Element* element, int weights_enum){/*{{{*/
++
++	int        domaintype,numcomponents;
++	IssmDouble Jelem=0.;
++	IssmDouble misfit,Jdet;
++	IssmDouble dp[2],weight;
++	IssmDouble* xyz_list = NULL;
++
++	/*Get basal element*/
++	if(!element->IsOnBase()) return 0.;
++
++	/*If on water, return 0: */
++	if(!element->IsIceInElement()) return 0.;
++
++	/*Get problem dimension*/
++	element->FindParam(&domaintype,DomainTypeEnum);
++	switch(domaintype){
++		case Domain2DverticalEnum:   numcomponents   = 1; break;
++		case Domain3DEnum:           numcomponents   = 2; break;
++		case Domain2DhorizontalEnum: numcomponents   = 2; break;
++		default: _error_("not supported yet");
++	}
++
++	/*Spawn surface element*/
++	Element* basalelement = element->SpawnBasalElement();
++
++	/* Get node coordinates*/
++	basalelement->GetVerticesCoordinates(&xyz_list);
++
++	/*Get input if it already exists*/
++	Input*  tempinput = basalelement->GetInput(definitionenum);
++	/*Cast it to a Datasetinput*/
++	if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do! confused!");
++	DatasetInput* datasetinput = (DatasetInput*)tempinput;
++
++	/*Get the drag from the model*/
++	Input* drag_input=basalelement->GetInput(FrictionCoefficientEnum);	_assert_(drag_input);
++
++	/* Start  looping on the number of gaussian points: */
++	Gauss* gauss=basalelement->NewGauss(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		/* Get Jacobian determinant: */
++		basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
++
++		/*Get all parameters at gaussian point*/
++		datasetinput->GetInputValue(&weight,gauss,WeightsSurfaceObservationEnum);
++		drag_input->GetInputDerivativeValue(&dp[0],xyz_list,gauss);
++
++		/*Add to cost function*/
++		Jelem+=weight*.5*dp[0]*dp[0]*Jdet*gauss->weight;
++		if(numcomponents==2) Jelem+=weight*.5*dp[1]*dp[1]*Jdet*gauss->weight;
++	}
++
++	/*clean up and Return: */
++	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
++	xDelete<IssmDouble>(xyz_list);
++	delete gauss;
++	return Jelem;
++}/*}}}*/
++
+Index: ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(revision 22611)
++++ ../trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(revision 22612)
+@@ -2,8 +2,8 @@
+  * \brief: header file for Cfsurfacelogvel object
+  */
+ 
+-#ifndef _CFSURFACESQUARE_H_
+-#define _CFSURFACESQUARE_H_
++#ifndef _CFSURFACELOGVEL_H_
++#define _CFSURFACELOGVEL_H_
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+@@ -20,6 +20,7 @@
+ 		char*       name;
+ 		IssmDouble	datatime;
+ 		bool			timepassedflag;
++		IssmDouble	last_time;
+ 		
+ 		int         lock; // if lock is on, we just return the value stored in "misfit".  this is used so we don't compute misfit past the final_time
+ 		IssmDouble  misfit; //value carried over in time.
+@@ -43,4 +44,4 @@
+ 		IssmDouble Response(FemModel* femmodel);
+ 		IssmDouble Cfsurfacelogvel_Calculation(Element* element, int definitionenum);
+ };
+-#endif  /* _CFSURFACESQUARE_H_ */
++#endif  /* _CFSURFACELOGVEL_H_ */
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.h	(revision 22611)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.h	(revision 22612)
+@@ -2,8 +2,8 @@
+  * \brief: header file for Cfsurfacesquare object
+  */
+ 
+-#ifndef _TIMEMISFIT_H_
+-#define _TIMEMISFIT_H_
++#ifndef _CFSURFACESQUARE_H_
++#define _CFSURFACESQUARE_H_
+ 
+ /*Headers:*/
+ #include "./Definition.h"
+@@ -25,6 +25,7 @@
+ 		int         weights_enum;
+ 		IssmDouble	datatime;
+ 		bool			timepassedflag;
++		IssmDouble	last_time;
+ 		
+ 		int         lock; // if lock is on, we just return the value stored in "misfit".  this is used so we don't compute misfit past the final_time
+ 		IssmDouble  misfit; //value carried over in time.
+@@ -48,4 +49,4 @@
+ 		IssmDouble Response(FemModel* femmodel);
+ 		IssmDouble Cfsurfacesquare_Calculation(Element* element, int model_enum, int observation_enum, int weights_enum);
+ };
+-#endif  /* _TIMEMISFIT_H_ */
++#endif  /* _CFSURFACESQUARE_H_ */
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 22611)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 22612)
+@@ -20,6 +20,7 @@
+ #include "./Nodalvalue.h"
+ #include "./Numberedcostfunction.h"
+ #include "./Cfsurfacesquare.h"
++#include "./Cfdragcoeffabsgrad.h"
+ #include "./Cfsurfacelogvel.h"
+ #include "./Masscon.h"
+ #include "./Massconaxpby.h"
+Index: ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 22612)
+@@ -32,6 +32,7 @@
+ 	this->lock=0;
+ 	this->datatime=0.;
+ 	this->timepassedflag = false;
++	this->last_time=0.;
+ 
+ }
+ /*}}}*/
+@@ -104,8 +105,9 @@
+ 	 
+ 	 /*recover time parameters: */
+ 	 femmodel->parameters->FindParam(&time,TimeEnum);
++	 if(time < last_time) timepassedflag = false;
++	 last_time = time;
+ 
+-/*ELLEN UNFINISHED*/
+ 		 int i;
+ 		 IssmDouble J=0.;
+ 		 IssmDouble J_sum=0.;
+Index: ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h	(nonexistent)
++++ ../trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h	(revision 22612)
+@@ -0,0 +1,48 @@
++/*!\file Cfdragcoeffabsgrad.h
++ * \brief: header file for Cfdragcoeffabsgrad object
++ */
++
++#ifndef _CFDRAGCOEFFABSGRAD_H_
++#define _CFDRAGCOEFFABSGRAD_H_
++
++/*Headers:*/
++#include "./Definition.h"
++#include "./FemModel.h"
++
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
++void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
++
++class Cfdragcoeffabsgrad: public Object, public Definition{
++
++	public: 
++
++		int         definitionenum;
++		char*       name;
++		int         weights_enum;
++		IssmDouble	datatime;
++		bool			timepassedflag;
++		IssmDouble	last_time;
++		
++		int         lock; // if lock is on, we just return the value stored in "misfit".  this is used so we don't compute misfit past the final_time
++		IssmDouble  misfit; //value carried over in time.
++		
++		/*Cfdragcoeffabsgrad constructors, destructors :*/
++		Cfdragcoeffabsgrad();
++		Cfdragcoeffabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, IssmDouble in_datatime, bool timepassedflag);
++		~Cfdragcoeffabsgrad();
++		
++		/*Object virtual function resolutoin: */
++		Object* copy();
++		void DeepEcho(void);
++		void Echo(void);
++		int Id(void);
++		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
++		int ObjectEnum(void);
++		
++		/*Definition virtual function resolutoin: */
++		int DefinitionEnum();
++		char* Name();
++		IssmDouble Response(FemModel* femmodel);
++		IssmDouble Cfdragcoeffabsgrad_Calculation(Element* element, int weights_enum);
++};
++#endif  /* _CFDRAGCOEFFABSGRAD_H_ */
+Index: ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 22612)
+@@ -35,6 +35,7 @@
+ 	this->lock=0;
+ 	this->datatime=0.;
+ 	this->timepassedflag = false;
++	this->last_time = 0.;
+ 
+ }
+ /*}}}*/
+@@ -107,16 +108,18 @@
+ }
+ /*}}}*/
+ IssmDouble Cfsurfacesquare::Response(FemModel* femmodel){/*{{{*/
+-		 
+ 	 /*diverse: */
+ 	 IssmDouble time;
+ 	 
+ 	 /*recover time parameters: */
+ 	 femmodel->parameters->FindParam(&time,TimeEnum);
++	 if(time < last_time) timepassedflag = false;
++	 last_time = time;
+ 
+ 		 int i;
+ 		 IssmDouble J=0.;
+ 		 IssmDouble J_sum=0.;
++
+ 	 if(datatime<=time && !timepassedflag){
+ 		 for(i=0;i<femmodel->elements->Size();i++){
+ 			 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+@@ -129,7 +132,7 @@
+ 		
+ 		 timepassedflag = true;
+ 		 return J;
+-		}
++	}
+ 	 else return J;
+  }
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22612)
+@@ -639,6 +639,7 @@
+ 		case CalvingVonmisesEnum : return "CalvingVonmises";
+ 		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
+ 		case CfsurfacesquareEnum : return "Cfsurfacesquare";
++		case CfdragcoeffabsgradEnum : return "Cfdragcoeffabsgrad";
+ 		case ClosedEnum : return "Closed";
+ 		case ColinearEnum : return "Colinear";
+ 		case ConstantsGEnum : return "ConstantsG";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22612)
+@@ -654,6 +654,7 @@
+ 	      else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
+ 	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
+ 	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
++	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
+ 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+-	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
++	      if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
++	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplInitialThickness")==0) return HydrologydcEplInitialThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+ 	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+ 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+-	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
++	      if (strcmp(name,"Nodal")==0) return NodalEnum;
++	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"None")==0) return NoneEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+ 	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+-	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
++	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+-	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
++	      if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
++	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+ 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22611)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22612)
+@@ -635,6 +635,7 @@
+ 	CalvingVonmisesEnum,
+ 	CfsurfacelogvelEnum,
+ 	CfsurfacesquareEnum,
++	CfdragcoeffabsgradEnum,
+ 	ClosedEnum,
+ 	ColinearEnum,
+ 	ConstantsGEnum,
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22612)
+@@ -12,7 +12,7 @@
+ 	char* fieldname = NULL;
+ 	int   input_enum = -1;
+ 
+-	if(strcmp(string_in,"Thickness")==0){
++	if(strcmp(string_in,"Thickness")==0 || strcmp(string_in,"md.geometry.thickness")==0){
+ 		const char* field = "md.geometry.thickness";
+ 		input_enum        = ThicknessEnum;
+ 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 22612)
+@@ -85,9 +85,8 @@
+ 				}
+ 
+ 				parameters->AddObject(new IntVecParam(InversionControlParametersEnum,ind_enums,num_independent_objects));
+-				//iomodel->FetchData(&num_costfunc,"md.numberedcostfunction.num_cost_functions");
++				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.autodiff.dependent_object_names");
+ 				      _assert_(num_costfunc>0);
+-				iomodel->FindConstant(&cm_responses,&num_costfunc,"md.autodiff.dependent_object_names");
+ 				if(num_costfunc<1) _error_ ("no cost functions found");
+ 				int* costfunc_enums=xNew<int>(num_costfunc);
+ 				for(int i=0;i<num_costfunc;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22611)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 22612)
+@@ -248,6 +248,71 @@
+ 				xDelete<int>(cfsurfacesquare_datatime_s);
+ 				/*}}}*/
+ 			}
++			else if (output_definition_enums[i]==CfdragcoeffabsgradEnum){
++				/*Deal with cfdragcoeffabsgrad: {{{*/
++				
++				/*cfdragcoeffabsgrad variables: */
++				int          num_cfdragcoeffabsgrads;
++				char**       cfdragcoeffabsgrad_name_s						= NULL;    
++				char**		 cfdragcoeffabsgrad_definitionstring_s		= NULL;    
++				IssmDouble** cfdragcoeffabsgrad_weights_s					= NULL;
++				int*         cfdragcoeffabsgrad_weights_M_s				= NULL;
++				int*         cfdragcoeffabsgrad_weights_N_s				= NULL;
++				char**       cfdragcoeffabsgrad_weights_string_s		= NULL;
++				int*			 cfdragcoeffabsgrad_datatime_s				= NULL;
++
++				/*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfdragcoeffabsgrad.m): */
++				iomodel->FetchMultipleData(&cfdragcoeffabsgrad_name_s,&num_cfdragcoeffabsgrads,                                                        "md.cfdragcoeffabsgrad.name");
++				iomodel->FetchMultipleData(&cfdragcoeffabsgrad_definitionstring_s,&num_cfdragcoeffabsgrads,                                            "md.cfdragcoeffabsgrad.definitionstring");
++				iomodel->FetchMultipleData(&cfdragcoeffabsgrad_weights_s,&cfdragcoeffabsgrad_weights_M_s,&cfdragcoeffabsgrad_weights_N_s,&num_cfdragcoeffabsgrads,             "md.cfdragcoeffabsgrad.weights");
++				iomodel->FetchMultipleData(&cfdragcoeffabsgrad_weights_string_s,&num_cfdragcoeffabsgrads,                                              "md.cfdragcoeffabsgrad.weights_string");
++				iomodel->FetchMultipleData(&cfdragcoeffabsgrad_datatime_s,&num_cfdragcoeffabsgrads,																	 "md.cfdragcoeffabsgrad.datatime");
++
++				for(j=0;j<num_cfdragcoeffabsgrads;j++){
++
++					int weight_vector_type=0;
++					if ((cfdragcoeffabsgrad_weights_M_s[j]==iomodel->numberofvertices) || (cfdragcoeffabsgrad_weights_M_s[j]==iomodel->numberofvertices+1)){
++						weight_vector_type=1;
++					}
++					else if ((cfdragcoeffabsgrad_weights_M_s[j]==iomodel->numberofelements) || (cfdragcoeffabsgrad_weights_M_s[j]==iomodel->numberofelements+1)){
++						weight_vector_type=2;
++					}
++					else
++					 _error_("cfdragcoeffabsgrad weight size not supported yet");
++
++					/*First create a cfdragcoeffabsgrad object for that specific string (cfdragcoeffabsgrad_model_string_s[j]):*/
++					output_definitions->AddObject(new Cfdragcoeffabsgrad(cfdragcoeffabsgrad_name_s[j],StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),cfdragcoeffabsgrad_datatime_s[j],false));
++
++					/*Now, for this particular cfdragcoeffabsgrad object, make sure we plug into the elements: the observation, and the weights.*/
++					for(int k=0;k<elements->Size();k++){
++
++						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
++						
++						element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j], iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
++
++					}
++
++				}
++
++				/*Free ressources:*/
++				for(j=0;j<num_cfdragcoeffabsgrads;j++){
++					char* string=NULL;
++					IssmDouble* matrix = NULL;
++
++					string = cfdragcoeffabsgrad_definitionstring_s[j];		xDelete<char>(string);
++					string = cfdragcoeffabsgrad_weights_string_s[j];		xDelete<char>(string);
++					string = cfdragcoeffabsgrad_name_s[j];    xDelete<char>(string);
++					matrix = cfdragcoeffabsgrad_weights_s[j]; xDelete<IssmDouble>(matrix);
++				}
++				xDelete<char*>(cfdragcoeffabsgrad_name_s);
++				xDelete<char*>(cfdragcoeffabsgrad_definitionstring_s);
++				xDelete<IssmDouble*>(cfdragcoeffabsgrad_weights_s);
++				xDelete<int>(cfdragcoeffabsgrad_weights_M_s);
++				xDelete<int>(cfdragcoeffabsgrad_weights_N_s);
++				xDelete<char*>(cfdragcoeffabsgrad_weights_string_s);
++				xDelete<int>(cfdragcoeffabsgrad_datatime_s);
++				/*}}}*/
++			}
+ 			else if (output_definition_enums[i]==CfsurfacelogvelEnum){
+ 				/*Deal with cfsurfacelogvel: {{{*/
+ 				
+@@ -551,7 +616,7 @@
+ 					/*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/
+ 					for(int k=0;k<elements->Size();k++){
+ 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
+-						element->DatasetInputCreate(cost_functions_weights[i],cost_functions_weights_M[i],cost_functions_weights_N[i],cost_function_enums,num_cost_functions,iomodel,InversionCostFunctionsCoefficientsEnum);
++						element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,iomodel,InversionCostFunctionsCoefficientsEnum);
+ 					}
+ 					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums));
+ 				}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22612-22613.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22612-22613.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22612-22613.diff	(revision 22755)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_dakota
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22612)
++++ ../trunk-jpl/jenkins/linux64_ross_dakota	(revision 22613)
+@@ -12,20 +12,20 @@
+ 	--with-matlab-dir=$MATLAB_PATH \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi" \
++	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib -lmpi -lmpicxx -lmpifort" \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
++	--with-chaco-dir=$ISSM_DIR/externalpackages/chaco/install \
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	--with-boost-dir=$ISSM_DIR/externalpackages/boost/install/ \
+-	--with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.9/ -lgfortran" \
++	--with-boost-dir=$ISSM_DIR/externalpackages/boost/install \
++	--with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran" \
+ 	--with-m1qn3-dir=$ISSM_DIR/externalpackages/m1qn3/install \
+ 	--with-numthreads=4 \
+ 	--enable-development \
+-	--enable-debugging '
++	--enable-debugging'
+ 
+ #PYTHON and MATLAB testing
+ MATLAB_TEST=1
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(revision 22612)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(revision 22613)
+@@ -2,5 +2,4 @@
+ < # TODO: Can't this be integrated into the following logic?
+ ---
+ > # TODO: Can't this be integrated into the following logic?
+-> set(BLAS_LIBS "-L/u/astrid-r1b/schlegel/issm/trunk/externalpackages/petsc/install/lib/ -lfblas -L/usr/lib/gcc/x86_64-linux-gnu/4.8/ -lgfortran")
+-> set(LAPACK_LIBS "-L/u/astrid-r1b/schlegel/issm/trunk/externalpackages/petsc/install/lib/ -lflapack -L/usr/lib/gcc/x86_64-linux-gnu/4.8/ -lgfortran")
++> set(BLAS_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lfblas -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran") > set(LAPACK_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lflapack -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran")
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22612)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22613)
+@@ -25,6 +25,7 @@
+ cp $DAK_SRC/cmake/BuildDakotaTemplate.cmake $DAK_SRC/cmake/BuildDakotaCustom.cmake
+ patch $DAK_SRC/cmake/BuildDakotaCustom.cmake configs/6.2/BuildDakotaCustom.cmake.patch
+ patch $DAK_SRC/cmake/DakotaDev.cmake configs/6.2/DakotaDev.cmake.patch
++patch $DAK_SRC/CMakeLists.txt configs/6.2/CMakeLists.txt.petsclibs.patch
+ 
+ #Apply patches
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
Index: /issm/oecreview/Archive/21724-22754/ISSM-22613-22614.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22613-22614.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22613-22614.diff	(revision 22755)
@@ -0,0 +1,225 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22613)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22614)
+@@ -1246,7 +1246,6 @@
+ 	IssmDouble* exsT=NULL;
+ 	IssmDouble* surpT=NULL;
+ 	IssmDouble* surpE=NULL;
+-	IssmDouble* F=NULL;
+ 	IssmDouble* flxDn=NULL;
+ 	IssmDouble  ER=0.0;
+ 	IssmDouble* EI=NULL;
+@@ -1310,8 +1309,8 @@
+ 
+ 	/*Allocations: */
+ 	M=xNewZeroInit<IssmDouble>(n); 
+-	maxF=xNew<IssmDouble>(n); 
+-	dW=xNew<IssmDouble>(n); 
++	maxF=xNewZeroInit<IssmDouble>(n); 
++	dW=xNewZeroInit<IssmDouble>(n); 
+ 
+ 	// store initial mass [kg] and energy [J]
+ 	m=xNew<IssmDouble>(n); for(int i=0;i<n;i++) m[i] = dz[i]* d[i];                    // grid cell mass [kg]
+@@ -1354,7 +1353,7 @@
+ 		for(int i=0;i<n;i++) T[i] = T[i] + (dW[i]*(LF+(CtoK - T[i])*CI)/(m[i]*CI));      // temperature [K]
+ 
+ 		// if pore water froze in ice then adjust d and dz thickness
+-		for(int i=0;i<n;i++)if(d[i]>dIce)d[i]=dIce;
++		for(int i=0;i<n;i++)if(d[i]>dIce-Dtol)d[i]=dIce;
+ 		for(int i=0;i<n;i++) dz[i]= m[i]/d[i];
+ 	}
+ 
+@@ -1374,9 +1373,9 @@
+ 		// if so redistribute temperature to lower cells (temperature surplus)
+ 		// (maximum T of snow before entire grid cell melts is a constant
+ 		// LF/CI = 159.1342)
+-		surpT=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpT[i] = fmax(0.0, exsT[i]- 159.1342);
++		surpT=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpT[i] = fmax(0.0, exsT[i]- LF/CI);
+         
+-		if (cellsum(surpT,n) > 0.0 + Ttol ){
++		if (cellsum(surpT,n) > 0.0 + Ttol){
+ 			// _printf_("T Surplus");
+ 			// calculate surplus energy
+ 			surpE=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpE[i] = surpT[i] * CI * m[i];
+@@ -1389,11 +1388,11 @@
+ 				exsT[i+1] = fmax(0.0, T[i+1] - CtoK) + exsT[i+1];
+ 				T[i+1] = fmin(CtoK, T[i+1]);
+                 
+-				surpT[i+1] = fmax(0.0, exsT[i+1] - 159.1342);
++				surpT[i+1] = fmax(0.0, exsT[i+1] - LF/CI);
+ 				surpE[i+1] = surpT[i+1] * CI * m[i+1];
+                 
+ 				// adjust current cell properties (again 159.1342 is the max T)
+-				exsT[i] = 159.1342;
++				exsT[i] = LF/CI;
+ 				surpE[i] = 0.0;
+ 				i = i + 1;
+ 			}
+@@ -1400,8 +1399,8 @@
+ 		}
+ 
+ 		// convert temperature excess to melt [kg]
+-		for(int i=0;i<n;i++) M[i] = exsT[i] * d[i] * dz[i] * CI / LF;      // melt
+-		sumM = cellsum(M,n);                                               // total melt [kg]
++		for(int i=0;i<n;i++) M[i] = fmin(exsT[i] * d[i] * dz[i] * CI / LF, m[i]);  // melt
++		sumM = cellsum(M,n);                                                       // total melt [kg]
+ 
+ 		// calculate maximum refreeze amount, maxF [kg]
+ 		for(int i=0;i<n;i++)maxF[i] = fmax(0.0, -((T[i] - CtoK) * d[i] * dz[i] * CI)/ LF);
+@@ -1408,10 +1407,10 @@
+ 
+ 		// initialize refreeze, runoff, flxDn and dW vectors [kg]
+  		IssmDouble* F = xNewZeroInit<IssmDouble>(n);
+-		IssmDouble* R=xNewZeroInit<IssmDouble>(n);
++		IssmDouble* R = xNewZeroInit<IssmDouble>(n);
+ 
+ 		for(int i=0;i<n;i++)dW[i] = 0.0;
+-		flxDn=xNewZeroInit<IssmDouble>(n+1); for(int i=0;i<n;i++)flxDn[i+1]=F[i];
++		flxDn=xNewZeroInit<IssmDouble>(n+1);
+ 
+ 		// determine the deepest grid cell where melt/pore water is generated
+ 		X = 0;
+@@ -1441,8 +1440,9 @@
+ 
+ 				m[i] = m[i] - M[i];                     // mass after melt
+ 				Wi = (dIce-d[i]) * Swi * (m[i]/d[i]);    // irreducible water 
+-				dW[i] = fmin(inM, Wi - W[i]);            // change in pore water
++				dW[i] = fmax(fmin(inM, Wi - W[i]),-1*W[i]);            // change in pore water
+ 				R[i] = fmax(0.0, inM - dW[i]);             // runoff
++				F[i] = 0.0;
+ 			}
+ 			// check if no energy to refreeze meltwater
+ 			else if (fabs(maxF[i]) < Dtol){
+@@ -1452,8 +1452,9 @@
+ 
+ 				m[i] = m[i] - M[i];                     // mass after melt
+ 				Wi = (dIce-d[i]) * Swi * (m[i]/d[i]);    // irreducible water 
+-				dW[i] = fmin(inM, Wi-W[i]);              // change in pore water
+-				flxDn[i+1] = fmax(0.0, inM-dW[i]);         // meltwater out
++				dW[i] = fmax(fmin(inM, Wi - W[i]),-1*W[i]);              // change in pore water
++				flxDn[i+1] = fmax(0.0, inM - dW[i]);         // meltwater out
++				R[i] = 0.0;
+ 				F[i] = 0.0;                               // no freeze 
+ 			}
+ 			// some or all meltwater refreezes
+@@ -1461,6 +1462,7 @@
+ 				// change in density density and temperature
+ 				// _printf_("MELT REFREEZE");
+ 				//-----------------------melt water-----------------------------
++				m[i] = m[i] - M[i];
+ 				IssmDouble dz_0 = m[i]/d[i];          
+ 				IssmDouble dMax = (dIce - d[i])*dz_0;              // d max = dIce
+ 				IssmDouble F1 = fmin(fmin(inM,dMax),maxF[i]);         // maximum refreeze               
+@@ -1470,7 +1472,7 @@
+ 				//-----------------------pore water-----------------------------
+ 				Wi = (dIce-d[i])* Swi * dz_0;            // irreducible water 
+ 				dW[i] = fmin(inM - F1, Wi-W[i]);         // change in pore water
+-				if (-1*dW[i]>W[i]-Wtol ){
++				if (dW[i] < 0.0-Wtol && -1*dW[i]>W[i]-Wtol ){
+ 					dW[i]= -1*W[i];
+ 				}
+ 				IssmDouble F2 = 0.0;                                 
+@@ -1481,9 +1483,12 @@
+ 					F2 = fmin(-1*dW[i], maxF2);            // pore water refreeze
+ 					m[i] = m[i] + F2;                   // mass after refreeze
+ 					d[i] = m[i]/dz_0;
++					dW[i] = dW[i] - F2;
+ 				}
+ 
+-				flxDn[i+1] = inM - F1 - dW[i] - F2;     // meltwater out        
++				F[i] = F1 + F2;
++
++				flxDn[i+1] = inM - F1 - dW[i];     // meltwater out        
+ 				T[i] = T[i] + ((F1+F2)*(LF+(CtoK - T[i])*CI)/(m[i]*CI));// change in temperature
+ 
+ 
+@@ -1506,11 +1511,14 @@
+ 		// adjust pore water
+ 		for(int i=0;i<n;i++)W[i] += dW[i];
+ 
++		//calculate Rsum:
++		Rsum=cellsum(R,n);
++
+ 		// delete all cells with zero mass
+-		D_size=0; for(int i=0;i<n;i++)if(m[i]!=0)D_size++; 
++		D_size=0; for(int i=0;i<n;i++)if(m[i]>0.0)D_size++; 
+ 		D=xNew<int>(D_size);
+-		D_size=0; for(int i=0;i<n;i++)if(m[i]!=0){ D[D_size] = i; D_size++;}
+-		
++		D_size=0; for(int i=0;i<n;i++)if(m[i]>0.0){ D[D_size] = i; D_size++;}
++
+ 		celldelete(&m,n,D,D_size);
+ 		celldelete(&W,n,D,D_size);
+ 		celldelete(&d,n,D,D_size);
+@@ -1521,7 +1529,6 @@
+ 		celldelete(&gsp,n,D,D_size);
+ 		celldelete(&EI,n,D,D_size);
+ 		celldelete(&EW,n,D,D_size);
+-		celldelete(&R,n,D,D_size);
+ 		n=D_size;
+ 		xDelete<int>(D);
+ 	
+@@ -1528,9 +1535,6 @@
+ 		// calculate new grid lengths
+ 		for(int i=0;i<n;i++)dz[i] = m[i] / d[i];
+ 
+-		//calculate Rsum:
+-		Rsum=cellsum(R,n);
+-
+ 		/*Free ressources:*/
+ 		xDelete<IssmDouble>(F);
+ 		xDelete<IssmDouble>(R);
+@@ -1591,7 +1595,7 @@
+ 			m[i+1] = m_new;                             // combine top masses
+             
+ 			// set cell to 99999 for deletion
+-			m[i] = 99999;
++			m[i] = -99999;
+ 		}
+ 	}
+ 
+@@ -1599,7 +1603,7 @@
+ 	if(lastCellFlag){
+          //find closest cell to merge with
+ 		for(int i=n-2;i>=0;i--){
+-			if(m[i]!=99999){
++			if(m[i]!=-99999){
+ 				X2=i;
+ 				X1=n-1;
+ 				break;
+@@ -1621,13 +1625,13 @@
+ 		m[X1] = m_new;                             // combine top masses
+         
+ 		// set cell to 99999 for deletion
+-		m[X2] = 99999;
++		m[X2] = -99999;
+ 	}
+ 
+ 	// delete combined cells
+-	D_size=0; for(int i=0;i<n;i++)if(m[i]!=99999)D_size++; 
++	D_size=0; for(int i=0;i<n;i++)if(m[i]!=-99999)D_size++; 
+ 	D=xNew<int>(D_size); 
+-	D_size=0; for(int i=0;i<n;i++)if(m[i]!=99999){ D[D_size] = i; D_size++;}
++	D_size=0; for(int i=0;i<n;i++)if(m[i]!=-99999){ D[D_size] = i; D_size++;}
+ 
+ 	celldelete(&m,n,D,D_size);
+ 	celldelete(&W,n,D,D_size);
+@@ -1722,7 +1726,7 @@
+ 		addE = -(T[n-1]*m[n-1]*CI);
+ 		dz_add=-(dz[n-1]);
+         
+-		// add a grid cell of the same size and temperature to the bottom
++		// remove a grid cell from the bottom
+ 		D_size=n-1;
+ 		D=xNew<int>(D_size);
+         
+@@ -1755,7 +1759,7 @@
+ 
+ 	/*checks: */
+ 	for(int i=0;i<n;i++) if (W[i]<0.0-Wtol) _error_("negative pore water generated in melt equations\n");
+-	
++
+ 	/*only in forward mode! avoid round in AD mode as it is not differentiable: */
+ 	#ifndef _HAVE_ADOLC_
+ 	dm = round(mSum0 - mSum1 + mAdd);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22614-22615.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22614-22615.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22614-22615.diff	(revision 22755)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/test/NightlyRun/test803.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test803.py	(revision 22614)
++++ ../trunk-jpl/test/NightlyRun/test803.py	(revision 22615)
+@@ -34,35 +34,35 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Thickness1','Surface1','MaskIceLevelset1','Enthalpy1','Watercolumn1',
+-									'Vx2','Vy2','Vel2','Pressure2','Thickness2','Surface2','MaskIceLevelset2','Enthalpy2','Watercolumn2',
+-									'Vx3','Vy3','Vel3','Pressure3','Thickness3','Surface3','MaskIceLevelset3','Enthalpy3','Watercolumn3']
+-field_tolerances=[1e-10,1e-10,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-									1e-9,1e-9,1e-10,1e-10,1e-10,1e-10,1e-10,1e-9,1e-10,
+-									1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++        'Vx2','Vy2','Vel2','Pressure2','Thickness2','Surface2','MaskIceLevelset2','Enthalpy2','Watercolumn2',
++        'Vx3','Vy3','Vel3','Pressure3','Thickness3','Surface3','MaskIceLevelset3','Enthalpy3','Watercolumn3']
++field_tolerances=[1e-10,1e-10,1e-10,1e-13,1e-12,1e-12,1e-13,1e-13,1e-13,
++        1e-9,1e-9,1e-10,1e-10,1e-10,1e-10,1e-10,1e-9,1e-10,
++        1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[md.results.TransientSolution[0].Vx,
+-							md.results.TransientSolution[0].Vy,
+-							md.results.TransientSolution[0].Vel,
+-							md.results.TransientSolution[0].Pressure,
+-							md.results.TransientSolution[0].Thickness,
+-							md.results.TransientSolution[0].Surface,
+-							md.results.TransientSolution[0].MaskIceLevelset,
+-							md.results.TransientSolution[0].Enthalpy,
+-							md.results.TransientSolution[0].Watercolumn,
+-							md.results.TransientSolution[1].Vx,
+-							md.results.TransientSolution[1].Vy,
+-							md.results.TransientSolution[1].Vel,
+-							md.results.TransientSolution[1].Pressure,
+-							md.results.TransientSolution[1].Thickness,
+-							md.results.TransientSolution[1].Surface,
+-							md.results.TransientSolution[1].MaskIceLevelset,
+-							md.results.TransientSolution[1].Enthalpy,
+-							md.results.TransientSolution[1].Watercolumn,
+-							md.results.TransientSolution[2].Vx,
+-							md.results.TransientSolution[2].Vy,
+-							md.results.TransientSolution[2].Vel,
+-							md.results.TransientSolution[2].Pressure,
+-							md.results.TransientSolution[2].Thickness,
+-							md.results.TransientSolution[2].Surface,
+-							md.results.TransientSolution[2].MaskIceLevelset,
+-							md.results.TransientSolution[2].Enthalpy,
+-							md.results.TransientSolution[2].Watercolumn]
++        md.results.TransientSolution[0].Vy,
++        md.results.TransientSolution[0].Vel,
++        md.results.TransientSolution[0].Pressure,
++        md.results.TransientSolution[0].Thickness,
++        md.results.TransientSolution[0].Surface,
++        md.results.TransientSolution[0].MaskIceLevelset,
++        md.results.TransientSolution[0].Enthalpy,
++        md.results.TransientSolution[0].Watercolumn,
++        md.results.TransientSolution[1].Vx,
++        md.results.TransientSolution[1].Vy,
++        md.results.TransientSolution[1].Vel,
++        md.results.TransientSolution[1].Pressure,
++        md.results.TransientSolution[1].Thickness,
++        md.results.TransientSolution[1].Surface,
++        md.results.TransientSolution[1].MaskIceLevelset,
++        md.results.TransientSolution[1].Enthalpy,
++        md.results.TransientSolution[1].Watercolumn,
++        md.results.TransientSolution[2].Vx,
++        md.results.TransientSolution[2].Vy,
++        md.results.TransientSolution[2].Vel,
++        md.results.TransientSolution[2].Pressure,
++        md.results.TransientSolution[2].Thickness,
++        md.results.TransientSolution[2].Surface,
++        md.results.TransientSolution[2].MaskIceLevelset,
++        md.results.TransientSolution[2].Enthalpy,
++        md.results.TransientSolution[2].Watercolumn]
+Index: ../trunk-jpl/test/NightlyRun/test803.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test803.m	(revision 22614)
++++ ../trunk-jpl/test/NightlyRun/test803.m	(revision 22615)
+@@ -27,7 +27,7 @@
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Thickness1','Surface1','MaskIceLevelset1','Enthalpy1','Watercolumn1',...
+ 		'Vx2','Vy2','Vel2','Pressure2','Thickness2','Surface2','MaskIceLevelset2','Enthalpy2','Watercolumn2',...
+ 		'Vx3','Vy3','Vel3','Pressure3','Thickness3','Surface3','MaskIceLevelset3','Enthalpy3','Watercolumn3'};
+-field_tolerances={1e-10,1e-10,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++field_tolerances={1e-10,1e-10,1e-10,1e-13,1e-12,1e-12,1e-13,1e-13,1e-13,...
+ 		1e-9,1e-9,1e-10,1e-10,1e-10,1e-10,1e-10,1e-9,1e-10,...
+ 		1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22615-22616.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22615-22616.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22615-22616.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(revision 22615)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch	(revision 22616)
+@@ -2,4 +2,5 @@
+ < # TODO: Can't this be integrated into the following logic?
+ ---
+ > # TODO: Can't this be integrated into the following logic?
+-> set(BLAS_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lfblas -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran") > set(LAPACK_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lflapack -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran")
++> set(BLAS_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lfblas -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran")
++> set(LAPACK_LIBS "-L$ENV{ISSM_DIR}/externalpackages/petsc/install/lib -lflapack -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -lgfortran")
Index: /issm/oecreview/Archive/21724-22754/ISSM-22616-22617.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22616-22617.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22616-22617.diff	(revision 22755)
@@ -0,0 +1,453 @@
+Index: ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 22617)
+@@ -44,99 +44,98 @@
+ 		}
+ 	}
+ 	/*}}}*/
+-			int IssmParallelDirectApplicInterface::derived_map_ac(const Dakota::String& ac_name){/*{{{*/
++	int IssmParallelDirectApplicInterface::derived_map_ac(const Dakota::String& ac_name){/*{{{*/
+ 
+-				FemModel* femmodel;
+-				
+-				char     **responses_descriptors    = NULL;      //these are ours! there are only numresponsedescriptors of them, not d_numresponses!!!
+-				char      *response_descriptor      = NULL;
+-				int        numresponsedescriptors;
+-				int        solution_type;
+-				bool       control_analysis         = false;
+-				void     (*solutioncore)(FemModel*) = NULL;
+-				bool       nodakotacore             = true;
++		FemModel* femmodel;
+ 
+-				int world_rank;
+-				ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&world_rank);
++		char     **responses_descriptors    = NULL;      //these are ours! there are only numresponsedescriptors of them, not d_numresponses!!!
++		char      *response_descriptor      = NULL;
++		int        numresponsedescriptors;
++		int        solution_type;
++		bool       control_analysis         = false;
++		void     (*solutioncore)(FemModel*) = NULL;
++		bool       nodakotacore             = true;
+ 
+-				/*Only have slaves work!:*/
+-				if(world_rank==0)return 0;
++		int world_rank;
++		ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&world_rank);
+ 
+-				#ifdef MPI_DEBUG
+-				Cout << "eval server id" << evalServerId << " invoking " << ac_name << " within SIM::IssmParallelDirectApplicInterface." << std::endl;
+-				#endif // MPI_DEBUG
++		/*Only have slaves work!:*/
++		if(world_rank==0)return 0;
+ 
+-				int i;
+-				IssmDouble* variables=NULL;
+-				char** variable_descriptors=NULL;
+-				char*  variable_descriptor=NULL;
+-				IssmDouble* responses=NULL;
++		#ifdef MPI_DEBUG
++		Cout << "eval server id" << evalServerId << " invoking " << ac_name << " within SIM::IssmParallelDirectApplicInterface." << std::endl;
++		#endif // MPI_DEBUG
+ 
+-				/*Before launching evaluation, we need to transfer the dakota inputs into Issm readable variables: */
++		int i;
++		IssmDouble  *variables            = NULL;
++		char       **variable_descriptors = NULL;
++		char        *variable_descriptor  = NULL;
++		IssmDouble  *responses            = NULL;
+ 
+-				/*First, the variables: */
+-				variables=xNew<IssmDouble>(numACV);
+-				for(i=0;i<numACV;i++){
+-					variables[i]=xC[i];
+-				}
+-				/*The descriptors: */
+-				variable_descriptors=xNew<char*>(numACV);
+-				for(i=0;i<numACV;i++){
+-					std::string label=xCLabels[i];
+-					variable_descriptor=xNew<char>(strlen(label.c_str())+1);
+-					memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
++		/*Before launching evaluation, we need to transfer the dakota inputs into Issm readable variables: */
+ 
+-					variable_descriptors[i]=variable_descriptor;
+-				}
++		/*First, the variables: */
++		variables=xNew<IssmDouble>(numACV);
++		for(i=0;i<numACV;i++){
++			variables[i]=xC[i];
++		}
++		/*The descriptors: */
++		variable_descriptors=xNew<char*>(numACV);
++		for(i=0;i<numACV;i++){
++			std::string label=xCLabels[i];
++			variable_descriptor=xNew<char>(strlen(label.c_str())+1);
++			memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
+ 
+-				/*Initialize responses: */
+-				responses=xNewZeroInit<IssmDouble>(numFns);
++			variable_descriptors[i]=variable_descriptor;
++		}
+ 
+-				/*Make a copy of femmodel, so we start this new evaluation run for this specific sample with a brand 
+-				 * new copy of the model, which has not been tempered with by previous evaluation runs: */
++		/*Initialize responses: */
++		responses=xNewZeroInit<IssmDouble>(numFns);
+ 
+-				femmodel=femmodel_init->copy();
++		/*Make a copy of femmodel, so we start this new evaluation run for this specific sample with a brand 
++		 * new copy of the model, which has not been tempered with by previous evaluation runs: */
++		femmodel=femmodel_init->copy();
+ 
+-				/*retrieve parameters: */
+-				femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+-				femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-				femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++		/*retrieve parameters: */
++		femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
++		femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++		femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+ 
+-				/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
+-				InputUpdateFromDakotax(femmodel,variables,variable_descriptors,numACV);
++		/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
++		InputUpdateFromDakotax(femmodel,variables,variable_descriptors,numACV);
+ 
+-				/*Determine solution sequence: */
+-				if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n");
+-				WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
++		/*Determine solution sequence: */
++		if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n");
++		WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
+ 
+-				/*Run the core solution sequence: */
+-				solutioncore(femmodel);
++		/*Run the core solution sequence: */
++		solutioncore(femmodel);
+ 
+-				/*compute responses: */
+-				if(VerboseQmu()) _printf0_("compute dakota responses:\n");
+-				femmodel->DakotaResponsesx(responses,responses_descriptors,numresponsedescriptors,numFns);
++		/*compute responses: */
++		if(VerboseQmu()) _printf0_("compute dakota responses:\n");
++		femmodel->DakotaResponsesx(responses,responses_descriptors,numresponsedescriptors,numFns);
+ 
+-				/*populate responses: */
+-				for(i=0;i<numFns;i++){
+-					fnVals[i]=responses[i];
+-				}
++		/*populate responses: */
++		for(i=0;i<numFns;i++){
++			fnVals[i]=responses[i];
++		}
+ 
+-				/*Free ressources:*/
+-				xDelete<IssmDouble>(variables);
+-				for(i=0;i<numACV;i++){
+-					variable_descriptor=variable_descriptors[i];
+-					xDelete<char>(variable_descriptor);
+-				}
+-				xDelete<char*>(variable_descriptors);
+-				for(i=0;i<numresponsedescriptors;i++){
+-					response_descriptor=responses_descriptors[i];
+-					xDelete<char>(response_descriptor);
+-				}
+-				if(responses_descriptors) xDelete<char*>(responses_descriptors);
+-				xDelete<IssmDouble>(responses);
+-				delete femmodel;
++		/*Free ressources:*/
++		xDelete<IssmDouble>(variables);
++		for(i=0;i<numACV;i++){
++			variable_descriptor=variable_descriptors[i];
++			xDelete<char>(variable_descriptor);
++		}
++		xDelete<char*>(variable_descriptors);
++		for(i=0;i<numresponsedescriptors;i++){
++			response_descriptor=responses_descriptors[i];
++			xDelete<char>(response_descriptor);
++		}
++		if(responses_descriptors) xDelete<char*>(responses_descriptors);
++		xDelete<IssmDouble>(responses);
++		delete femmodel;
+ 
+-				return 0;
+-			}/*}}}*/
++		return 0;
++	}/*}}}*/
+ }
+ #endif
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22617)
+@@ -63,8 +63,8 @@
+ 
+ 	/*Get index in array*/
+ 	#ifdef _ISSM_DEBUG_
+-	if(param_enum<=ParametersSTARTEnum) _error_("Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");
+-	if(param_enum>=ParametersENDEnum)   _error_("Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");
++	if(param_enum<=ParametersSTARTEnum) _error_("Cannot add param: Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");
++	if(param_enum>=ParametersENDEnum)   _error_("Cannot add param: Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");
+ 	#endif
+ 	int index = param_enum - ParametersSTARTEnum -1;
+ 
+@@ -413,7 +413,30 @@
+ 	this->params[index]->GetParameterValue(pdataset);
+ }
+ /*}}}*/
++void Parameters::FindParamInDataset(IssmDouble** pIssmDoublearray,int* pM,int* pN,int dataset_type,int enum_type){/*{{{*/
++	_assert_(this);
+ 
++	_assert_(dataset_type>ParametersSTARTEnum);
++	_assert_(dataset_type<ParametersENDEnum);
++
++	int index = dataset_type - ParametersSTARTEnum -1;
++	if(!this->params[index]) _error_("Parameter " << EnumToStringx(dataset_type) <<" not set");
++	if(this->params[index]->ObjectEnum()!=DataSetParamEnum) _error_("Parameter " << EnumToStringx(dataset_type) <<" is not a DataSetParam!");
++
++	DataSetParam* dataset_param = xDynamicCast<DataSetParam*>(this->params[index]);
++	for( vector<Object*>::iterator object=dataset_param->value->objects.begin() ; object < dataset_param->value->objects.end(); object++ ){
++		Param* param = xDynamicCast<Param*>(*object);
++		if(param->InstanceEnum()==enum_type){
++			param->GetParameterValue(pIssmDoublearray,pM,pN);
++			return;
++		}
++	}
++
++	/*Error out if we reached this point*/
++	_error_("Could not find Enum "<<EnumToStringx(enum_type)<<" in dataset param "<<EnumToStringx(dataset_type));
++}
++/*}}}*/
++
+ void   Parameters::SetParam(bool boolean,int enum_type){/*{{{*/
+ 
+ 	Param* param=NULL;
+@@ -565,8 +588,8 @@
+ Param* Parameters::FindParamObject(int param_enum){/*{{{*/
+ 
+ 	#ifdef _ISSM_DEBUG_
+-	if(param_enum<=ParametersSTARTEnum) _error_("Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");
+-	if(param_enum>=ParametersENDEnum)   _error_("Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");
++	if(param_enum<=ParametersSTARTEnum) _error_("Cannot find param: Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");
++	if(param_enum>=ParametersENDEnum)   _error_("Cannot find param: Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");
+ 	#endif
+ 
+ 	int index = param_enum - ParametersSTARTEnum -1;
+Index: ../trunk-jpl/src/c/classes/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22616)
++++ ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22617)
+@@ -18,7 +18,7 @@
+ #include "../Node.h"
+ /*}}}*/
+ 
+-class Param{
++class Param: public Object{
+ 
+ 	public: 
+ 		virtual        ~Param(){};
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22616)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22617)
+@@ -50,6 +50,7 @@
+ 		void  FindParam(Matrix<IssmDouble>** pmat,int enum_type);
+ 		void  FindParam(FILE** pfid,int enum_type);
+ 		void  FindParam(DataSet** pdataset, int enum_type);
++		void  FindParamInDataset(IssmDouble** pIssmDoublearray,int* pM,int* pN,int dataset_type,int enum_type);
+ 
+ 		void  SetParam(bool boolean,int enum_type);
+ 		void  SetParam(int integer,int enum_type);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22616)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22617)
+@@ -213,6 +213,7 @@
+ 	QmuOutNameEnum,
+ 	QmuPartitionEnum,
+ 	QmuResponsedescriptorsEnum,
++	QmuVariableDescriptorsEnum,
+ 	RestartFileNameEnum,
+ 	ResultsEnum,
+ 	RootPathEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22617)
+@@ -221,6 +221,7 @@
+ 		case QmuOutNameEnum : return "QmuOutName";
+ 		case QmuPartitionEnum : return "QmuPartition";
+ 		case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors";
++		case QmuVariableDescriptorsEnum : return "QmuVariableDescriptors";
+ 		case RestartFileNameEnum : return "RestartFileName";
+ 		case ResultsEnum : return "Results";
+ 		case RootPathEnum : return "RootPath";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22617)
+@@ -224,6 +224,7 @@
+ 	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+ 	      else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum;
++	      else if (strcmp(name,"QmuVariableDescriptors")==0) return QmuVariableDescriptorsEnum;
+ 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
+ 	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+ 	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+-	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
++	      if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
++	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+ 	      else if (strcmp(name,"SmbF")==0) return SmbFEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+-	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
++	      if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
++	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+-	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
++	      if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
++	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+ 	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
++	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+-	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
++	      if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
++	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplInitialThickness")==0) return HydrologydcEplInitialThicknessEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+ 	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"Nodal")==0) return NodalEnum;
++	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+-	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
++	      if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
++	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+@@ -1119,11 +1120,11 @@
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+-	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+          else stage=10;
+    }
+    if(stage==10){
+-	      if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
++	      if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
++	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 22617)
+@@ -53,7 +53,7 @@
+ 			}
+ 
+ 			/*Now, pick up the parameter corresponding to root: */
+-			femmodel->parameters->FindParam(&parameter,&nrows,&ncols,StringToEnumx(root));
++			femmodel->parameters->FindParamInDataset(&parameter,&nrows,&ncols,QmuVariableDescriptorsEnum,StringToEnumx(root));
+ 
+ 			/*We've got the parameter, we need to update it using qmu_part (a partitioning vector), 
+ 			 * and the distributed_values. Two cases: we either have a nrows=numberofvertices, in 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 22616)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 22617)
+@@ -78,6 +78,7 @@
+ 		parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,iomodel->numberofvertices));
+ 
+ 		/*Deal with data needed because of qmu variables*/
++		DataSet* dataset_variable_descriptors = new DataSet(QmuVariableDescriptorsEnum);
+ 		for(i=0;i<numvariabledescriptors;i++){
+ 			if (strncmp(variabledescriptors[i],"scaled_",7)==0){
+ 				/*Ok, we are dealing with a variable that is distributed over nodes. Recover the name of the variable (ex: scaled_Thickness): */
+@@ -91,15 +92,17 @@
+ 				/*Recover data: */
+ 				iomodel->FetchData(&dakota_parameter,&nrows,&ncols,fieldname);
+ 				if(nrows==iomodel->numberofvertices){
+-					parameters->AddObject(new DoubleMatParam(param_enum,dakota_parameter,nrows,ncols));
++					dataset_variable_descriptors->AddObject(new DoubleMatParam(param_enum,dakota_parameter,nrows,ncols));
+ 				}
+ 				else{
+-					parameters->AddObject(new DoubleTransientMatParam(param_enum,dakota_parameter,nrows,ncols));
++					dataset_variable_descriptors->AddObject(new DoubleTransientMatParam(param_enum,dakota_parameter,nrows,ncols));
+ 				}
+ 				xDelete<double>(dakota_parameter);
+ 				xDelete<char>(fieldname);
+ 			}
+ 		}
++		parameters->AddObject(new DataSetParam(QmuVariableDescriptorsEnum,dataset_variable_descriptors));
++		delete dataset_variable_descriptors;
+ 
+ 		/*clean-up*/
+ 		for(i=0;i<numresponsedescriptors;i++){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22617-22618.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22617-22618.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22617-22618.diff	(revision 22755)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 22617)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 22618)
+@@ -261,6 +261,9 @@
+ 				%compress the files into one zip.
+ 				compressstring=['tar -zcf ' dirname '.tar.gz '];
+ 				for i=1:numel(filelist),
++					if ~exist(filelist{i},'file')
++						error(['File ' filelist{i} ' not found']);
++					end
+ 					compressstring = [compressstring ' ' filelist{i}];
+ 				end
+ 				if cluster.interactive,
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 22617)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 22618)
+@@ -125,11 +125,11 @@
+ 
+ %Upload all required files
+ modelname = md.miscellaneous.name;
+-filelist  = {[modelname '.bin '] [modelname '.toolkits ']};
++filelist  = {[modelname '.bin'] [modelname '.toolkits']};
+ if ispc,
+-	filelist{end+1}=[modelname '.bat '];
++	filelist{end+1}=[modelname '.bat'];
+ else
+-	filelist{end+1}=[modelname '.queue '];
++	filelist{end+1}=[modelname '.queue'];
+ end
+ 
+ if md.qmu.isdakota,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22618-22619.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22618-22619.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22618-22619.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22618)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22619)
+@@ -156,6 +156,7 @@
+ 			echo "======================================================";
+ 			echo "    ERROR: installation of $PACKAGENAME failed        ";
+ 			echo "======================================================";
++			cat compil.log
+ 			echo "<testcase classname=\"externalpackages\" name=\"$PACKAGENAME\">" >> $EXTERNAL_TEST_FILE
+ 			echo '<failure message="failure">External packages did not install right. Check it.' >> $EXTERNAL_TEST_FILE
+ 			cat compil.log >> $EXTERNAL_TEST_FILE
Index: /issm/oecreview/Archive/21724-22754/ISSM-22619-22620.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22619-22620.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22619-22620.diff	(revision 22755)
@@ -0,0 +1,217 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22619)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22620)
+@@ -864,8 +864,106 @@
+ 	OneLayerP4zEnum,
+ 	OpenEnum,
+ 	OptionEnum,
++	Outputdefinition1Enum,
++	Outputdefinition10Enum,
++	Outputdefinition11Enum,
++	Outputdefinition12Enum,
++	Outputdefinition13Enum,
++	Outputdefinition14Enum,
++	Outputdefinition15Enum,
++	Outputdefinition16Enum,
++	Outputdefinition17Enum,
++	Outputdefinition18Enum,
++	Outputdefinition19Enum,
++	Outputdefinition20Enum,
++	Outputdefinition21Enum,
++	Outputdefinition22Enum,
++	Outputdefinition23Enum,
++	Outputdefinition24Enum,
++	Outputdefinition25Enum,
++	Outputdefinition26Enum,
++	Outputdefinition27Enum,
++	Outputdefinition28Enum,
++	Outputdefinition29Enum,
++	Outputdefinition2Enum,
++	Outputdefinition30Enum,
++	Outputdefinition31Enum,
++	Outputdefinition32Enum,
++	Outputdefinition33Enum,
++	Outputdefinition34Enum,
++	Outputdefinition35Enum,
++	Outputdefinition36Enum,
++	Outputdefinition37Enum,
++	Outputdefinition38Enum,
++	Outputdefinition39Enum,
++	Outputdefinition3Enum,
++	Outputdefinition40Enum,
++	Outputdefinition41Enum,
++	Outputdefinition42Enum,
++	Outputdefinition43Enum,
++	Outputdefinition44Enum,
++	Outputdefinition45Enum,
++	Outputdefinition46Enum,
++	Outputdefinition47Enum,
++	Outputdefinition48Enum,
++	Outputdefinition49Enum,
++	Outputdefinition4Enum,
++	Outputdefinition50Enum,
++	Outputdefinition51Enum,
++	Outputdefinition52Enum,
++	Outputdefinition53Enum,
++	Outputdefinition54Enum,
++	Outputdefinition55Enum,
++	Outputdefinition56Enum,
++	Outputdefinition57Enum,
++	Outputdefinition58Enum,
++	Outputdefinition59Enum,
++	Outputdefinition5Enum,
++	Outputdefinition60Enum,
++	Outputdefinition61Enum,
++	Outputdefinition62Enum,
++	Outputdefinition63Enum,
++	Outputdefinition64Enum,
++	Outputdefinition65Enum,
++	Outputdefinition66Enum,
++	Outputdefinition67Enum,
++	Outputdefinition68Enum,
++	Outputdefinition69Enum,
++	Outputdefinition6Enum,
++	Outputdefinition70Enum,
++	Outputdefinition71Enum,
++	Outputdefinition72Enum,
++	Outputdefinition73Enum,
++	Outputdefinition74Enum,
++	Outputdefinition75Enum,
++	Outputdefinition76Enum,
++	Outputdefinition77Enum,
++	Outputdefinition78Enum,
++	Outputdefinition79Enum,
++	Outputdefinition7Enum,
++	Outputdefinition80Enum,
++	Outputdefinition81Enum,
++	Outputdefinition82Enum,
++	Outputdefinition83Enum,
++	Outputdefinition84Enum,
++	Outputdefinition85Enum,
++	Outputdefinition86Enum,
++	Outputdefinition87Enum,
++	Outputdefinition88Enum,
++	Outputdefinition89Enum,
++	Outputdefinition8Enum,
++	Outputdefinition90Enum,
++	Outputdefinition91Enum,
++	Outputdefinition92Enum,
++	Outputdefinition93Enum,
++	Outputdefinition94Enum,
++	Outputdefinition95Enum,
++	Outputdefinition96Enum,
++	Outputdefinition97Enum,
++	Outputdefinition98Enum,
++	Outputdefinition99Enum,
++	Outputdefinition9Enum,
+ 	Outputdefinition100Enum,
+-	Outputdefinition1Enum,
+ 	P0ArrayEnum,
+ 	P1bubblecondensedEnum,
+ 	P1bubbleEnum,
+@@ -1000,104 +1098,6 @@
+ 	EtaAbsGradientEnum,
+ 	MeshZEnum,
+ 	NearestInterpEnum,
+-	Outputdefinition10Enum,
+-	Outputdefinition11Enum,
+-	Outputdefinition12Enum,
+-	Outputdefinition13Enum,
+-	Outputdefinition14Enum,
+-	Outputdefinition15Enum,
+-	Outputdefinition16Enum,
+-	Outputdefinition17Enum,
+-	Outputdefinition18Enum,
+-	Outputdefinition19Enum,
+-	Outputdefinition20Enum,
+-	Outputdefinition21Enum,
+-	Outputdefinition22Enum,
+-	Outputdefinition23Enum,
+-	Outputdefinition24Enum,
+-	Outputdefinition25Enum,
+-	Outputdefinition26Enum,
+-	Outputdefinition27Enum,
+-	Outputdefinition28Enum,
+-	Outputdefinition29Enum,
+-	Outputdefinition2Enum,
+-	Outputdefinition30Enum,
+-	Outputdefinition31Enum,
+-	Outputdefinition32Enum,
+-	Outputdefinition33Enum,
+-	Outputdefinition34Enum,
+-	Outputdefinition35Enum,
+-	Outputdefinition36Enum,
+-	Outputdefinition37Enum,
+-	Outputdefinition38Enum,
+-	Outputdefinition39Enum,
+-	Outputdefinition3Enum,
+-	Outputdefinition40Enum,
+-	Outputdefinition41Enum,
+-	Outputdefinition42Enum,
+-	Outputdefinition43Enum,
+-	Outputdefinition44Enum,
+-	Outputdefinition45Enum,
+-	Outputdefinition46Enum,
+-	Outputdefinition47Enum,
+-	Outputdefinition48Enum,
+-	Outputdefinition49Enum,
+-	Outputdefinition4Enum,
+-	Outputdefinition50Enum,
+-	Outputdefinition51Enum,
+-	Outputdefinition52Enum,
+-	Outputdefinition53Enum,
+-	Outputdefinition54Enum,
+-	Outputdefinition55Enum,
+-	Outputdefinition56Enum,
+-	Outputdefinition57Enum,
+-	Outputdefinition58Enum,
+-	Outputdefinition59Enum,
+-	Outputdefinition5Enum,
+-	Outputdefinition60Enum,
+-	Outputdefinition61Enum,
+-	Outputdefinition62Enum,
+-	Outputdefinition63Enum,
+-	Outputdefinition64Enum,
+-	Outputdefinition65Enum,
+-	Outputdefinition66Enum,
+-	Outputdefinition67Enum,
+-	Outputdefinition68Enum,
+-	Outputdefinition69Enum,
+-	Outputdefinition6Enum,
+-	Outputdefinition70Enum,
+-	Outputdefinition71Enum,
+-	Outputdefinition72Enum,
+-	Outputdefinition73Enum,
+-	Outputdefinition74Enum,
+-	Outputdefinition75Enum,
+-	Outputdefinition76Enum,
+-	Outputdefinition77Enum,
+-	Outputdefinition78Enum,
+-	Outputdefinition79Enum,
+-	Outputdefinition7Enum,
+-	Outputdefinition80Enum,
+-	Outputdefinition81Enum,
+-	Outputdefinition82Enum,
+-	Outputdefinition83Enum,
+-	Outputdefinition84Enum,
+-	Outputdefinition85Enum,
+-	Outputdefinition86Enum,
+-	Outputdefinition87Enum,
+-	Outputdefinition88Enum,
+-	Outputdefinition89Enum,
+-	Outputdefinition8Enum,
+-	Outputdefinition90Enum,
+-	Outputdefinition91Enum,
+-	Outputdefinition92Enum,
+-	Outputdefinition93Enum,
+-	Outputdefinition94Enum,
+-	Outputdefinition95Enum,
+-	Outputdefinition96Enum,
+-	Outputdefinition97Enum,
+-	Outputdefinition98Enum,
+-	Outputdefinition99Enum,
+-	Outputdefinition9Enum,
+ 	OutputdefinitionListEnum,
+ 	SealevelObsEnum,
+ 	SealevelWeightsEnum,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22620-22621.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22620-22621.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22620-22621.diff	(revision 22755)
@@ -0,0 +1,469 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22620)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22621)
+@@ -868,8 +868,106 @@
+ 		case OneLayerP4zEnum : return "OneLayerP4z";
+ 		case OpenEnum : return "Open";
+ 		case OptionEnum : return "Option";
++		case Outputdefinition1Enum : return "Outputdefinition1";
++		case Outputdefinition10Enum : return "Outputdefinition10";
++		case Outputdefinition11Enum : return "Outputdefinition11";
++		case Outputdefinition12Enum : return "Outputdefinition12";
++		case Outputdefinition13Enum : return "Outputdefinition13";
++		case Outputdefinition14Enum : return "Outputdefinition14";
++		case Outputdefinition15Enum : return "Outputdefinition15";
++		case Outputdefinition16Enum : return "Outputdefinition16";
++		case Outputdefinition17Enum : return "Outputdefinition17";
++		case Outputdefinition18Enum : return "Outputdefinition18";
++		case Outputdefinition19Enum : return "Outputdefinition19";
++		case Outputdefinition20Enum : return "Outputdefinition20";
++		case Outputdefinition21Enum : return "Outputdefinition21";
++		case Outputdefinition22Enum : return "Outputdefinition22";
++		case Outputdefinition23Enum : return "Outputdefinition23";
++		case Outputdefinition24Enum : return "Outputdefinition24";
++		case Outputdefinition25Enum : return "Outputdefinition25";
++		case Outputdefinition26Enum : return "Outputdefinition26";
++		case Outputdefinition27Enum : return "Outputdefinition27";
++		case Outputdefinition28Enum : return "Outputdefinition28";
++		case Outputdefinition29Enum : return "Outputdefinition29";
++		case Outputdefinition2Enum : return "Outputdefinition2";
++		case Outputdefinition30Enum : return "Outputdefinition30";
++		case Outputdefinition31Enum : return "Outputdefinition31";
++		case Outputdefinition32Enum : return "Outputdefinition32";
++		case Outputdefinition33Enum : return "Outputdefinition33";
++		case Outputdefinition34Enum : return "Outputdefinition34";
++		case Outputdefinition35Enum : return "Outputdefinition35";
++		case Outputdefinition36Enum : return "Outputdefinition36";
++		case Outputdefinition37Enum : return "Outputdefinition37";
++		case Outputdefinition38Enum : return "Outputdefinition38";
++		case Outputdefinition39Enum : return "Outputdefinition39";
++		case Outputdefinition3Enum : return "Outputdefinition3";
++		case Outputdefinition40Enum : return "Outputdefinition40";
++		case Outputdefinition41Enum : return "Outputdefinition41";
++		case Outputdefinition42Enum : return "Outputdefinition42";
++		case Outputdefinition43Enum : return "Outputdefinition43";
++		case Outputdefinition44Enum : return "Outputdefinition44";
++		case Outputdefinition45Enum : return "Outputdefinition45";
++		case Outputdefinition46Enum : return "Outputdefinition46";
++		case Outputdefinition47Enum : return "Outputdefinition47";
++		case Outputdefinition48Enum : return "Outputdefinition48";
++		case Outputdefinition49Enum : return "Outputdefinition49";
++		case Outputdefinition4Enum : return "Outputdefinition4";
++		case Outputdefinition50Enum : return "Outputdefinition50";
++		case Outputdefinition51Enum : return "Outputdefinition51";
++		case Outputdefinition52Enum : return "Outputdefinition52";
++		case Outputdefinition53Enum : return "Outputdefinition53";
++		case Outputdefinition54Enum : return "Outputdefinition54";
++		case Outputdefinition55Enum : return "Outputdefinition55";
++		case Outputdefinition56Enum : return "Outputdefinition56";
++		case Outputdefinition57Enum : return "Outputdefinition57";
++		case Outputdefinition58Enum : return "Outputdefinition58";
++		case Outputdefinition59Enum : return "Outputdefinition59";
++		case Outputdefinition5Enum : return "Outputdefinition5";
++		case Outputdefinition60Enum : return "Outputdefinition60";
++		case Outputdefinition61Enum : return "Outputdefinition61";
++		case Outputdefinition62Enum : return "Outputdefinition62";
++		case Outputdefinition63Enum : return "Outputdefinition63";
++		case Outputdefinition64Enum : return "Outputdefinition64";
++		case Outputdefinition65Enum : return "Outputdefinition65";
++		case Outputdefinition66Enum : return "Outputdefinition66";
++		case Outputdefinition67Enum : return "Outputdefinition67";
++		case Outputdefinition68Enum : return "Outputdefinition68";
++		case Outputdefinition69Enum : return "Outputdefinition69";
++		case Outputdefinition6Enum : return "Outputdefinition6";
++		case Outputdefinition70Enum : return "Outputdefinition70";
++		case Outputdefinition71Enum : return "Outputdefinition71";
++		case Outputdefinition72Enum : return "Outputdefinition72";
++		case Outputdefinition73Enum : return "Outputdefinition73";
++		case Outputdefinition74Enum : return "Outputdefinition74";
++		case Outputdefinition75Enum : return "Outputdefinition75";
++		case Outputdefinition76Enum : return "Outputdefinition76";
++		case Outputdefinition77Enum : return "Outputdefinition77";
++		case Outputdefinition78Enum : return "Outputdefinition78";
++		case Outputdefinition79Enum : return "Outputdefinition79";
++		case Outputdefinition7Enum : return "Outputdefinition7";
++		case Outputdefinition80Enum : return "Outputdefinition80";
++		case Outputdefinition81Enum : return "Outputdefinition81";
++		case Outputdefinition82Enum : return "Outputdefinition82";
++		case Outputdefinition83Enum : return "Outputdefinition83";
++		case Outputdefinition84Enum : return "Outputdefinition84";
++		case Outputdefinition85Enum : return "Outputdefinition85";
++		case Outputdefinition86Enum : return "Outputdefinition86";
++		case Outputdefinition87Enum : return "Outputdefinition87";
++		case Outputdefinition88Enum : return "Outputdefinition88";
++		case Outputdefinition89Enum : return "Outputdefinition89";
++		case Outputdefinition8Enum : return "Outputdefinition8";
++		case Outputdefinition90Enum : return "Outputdefinition90";
++		case Outputdefinition91Enum : return "Outputdefinition91";
++		case Outputdefinition92Enum : return "Outputdefinition92";
++		case Outputdefinition93Enum : return "Outputdefinition93";
++		case Outputdefinition94Enum : return "Outputdefinition94";
++		case Outputdefinition95Enum : return "Outputdefinition95";
++		case Outputdefinition96Enum : return "Outputdefinition96";
++		case Outputdefinition97Enum : return "Outputdefinition97";
++		case Outputdefinition98Enum : return "Outputdefinition98";
++		case Outputdefinition99Enum : return "Outputdefinition99";
++		case Outputdefinition9Enum : return "Outputdefinition9";
+ 		case Outputdefinition100Enum : return "Outputdefinition100";
+-		case Outputdefinition1Enum : return "Outputdefinition1";
+ 		case P0ArrayEnum : return "P0Array";
+ 		case P1bubblecondensedEnum : return "P1bubblecondensed";
+ 		case P1bubbleEnum : return "P1bubble";
+@@ -1002,104 +1100,6 @@
+ 		case EtaAbsGradientEnum : return "EtaAbsGradient";
+ 		case MeshZEnum : return "MeshZ";
+ 		case NearestInterpEnum : return "NearestInterp";
+-		case Outputdefinition10Enum : return "Outputdefinition10";
+-		case Outputdefinition11Enum : return "Outputdefinition11";
+-		case Outputdefinition12Enum : return "Outputdefinition12";
+-		case Outputdefinition13Enum : return "Outputdefinition13";
+-		case Outputdefinition14Enum : return "Outputdefinition14";
+-		case Outputdefinition15Enum : return "Outputdefinition15";
+-		case Outputdefinition16Enum : return "Outputdefinition16";
+-		case Outputdefinition17Enum : return "Outputdefinition17";
+-		case Outputdefinition18Enum : return "Outputdefinition18";
+-		case Outputdefinition19Enum : return "Outputdefinition19";
+-		case Outputdefinition20Enum : return "Outputdefinition20";
+-		case Outputdefinition21Enum : return "Outputdefinition21";
+-		case Outputdefinition22Enum : return "Outputdefinition22";
+-		case Outputdefinition23Enum : return "Outputdefinition23";
+-		case Outputdefinition24Enum : return "Outputdefinition24";
+-		case Outputdefinition25Enum : return "Outputdefinition25";
+-		case Outputdefinition26Enum : return "Outputdefinition26";
+-		case Outputdefinition27Enum : return "Outputdefinition27";
+-		case Outputdefinition28Enum : return "Outputdefinition28";
+-		case Outputdefinition29Enum : return "Outputdefinition29";
+-		case Outputdefinition2Enum : return "Outputdefinition2";
+-		case Outputdefinition30Enum : return "Outputdefinition30";
+-		case Outputdefinition31Enum : return "Outputdefinition31";
+-		case Outputdefinition32Enum : return "Outputdefinition32";
+-		case Outputdefinition33Enum : return "Outputdefinition33";
+-		case Outputdefinition34Enum : return "Outputdefinition34";
+-		case Outputdefinition35Enum : return "Outputdefinition35";
+-		case Outputdefinition36Enum : return "Outputdefinition36";
+-		case Outputdefinition37Enum : return "Outputdefinition37";
+-		case Outputdefinition38Enum : return "Outputdefinition38";
+-		case Outputdefinition39Enum : return "Outputdefinition39";
+-		case Outputdefinition3Enum : return "Outputdefinition3";
+-		case Outputdefinition40Enum : return "Outputdefinition40";
+-		case Outputdefinition41Enum : return "Outputdefinition41";
+-		case Outputdefinition42Enum : return "Outputdefinition42";
+-		case Outputdefinition43Enum : return "Outputdefinition43";
+-		case Outputdefinition44Enum : return "Outputdefinition44";
+-		case Outputdefinition45Enum : return "Outputdefinition45";
+-		case Outputdefinition46Enum : return "Outputdefinition46";
+-		case Outputdefinition47Enum : return "Outputdefinition47";
+-		case Outputdefinition48Enum : return "Outputdefinition48";
+-		case Outputdefinition49Enum : return "Outputdefinition49";
+-		case Outputdefinition4Enum : return "Outputdefinition4";
+-		case Outputdefinition50Enum : return "Outputdefinition50";
+-		case Outputdefinition51Enum : return "Outputdefinition51";
+-		case Outputdefinition52Enum : return "Outputdefinition52";
+-		case Outputdefinition53Enum : return "Outputdefinition53";
+-		case Outputdefinition54Enum : return "Outputdefinition54";
+-		case Outputdefinition55Enum : return "Outputdefinition55";
+-		case Outputdefinition56Enum : return "Outputdefinition56";
+-		case Outputdefinition57Enum : return "Outputdefinition57";
+-		case Outputdefinition58Enum : return "Outputdefinition58";
+-		case Outputdefinition59Enum : return "Outputdefinition59";
+-		case Outputdefinition5Enum : return "Outputdefinition5";
+-		case Outputdefinition60Enum : return "Outputdefinition60";
+-		case Outputdefinition61Enum : return "Outputdefinition61";
+-		case Outputdefinition62Enum : return "Outputdefinition62";
+-		case Outputdefinition63Enum : return "Outputdefinition63";
+-		case Outputdefinition64Enum : return "Outputdefinition64";
+-		case Outputdefinition65Enum : return "Outputdefinition65";
+-		case Outputdefinition66Enum : return "Outputdefinition66";
+-		case Outputdefinition67Enum : return "Outputdefinition67";
+-		case Outputdefinition68Enum : return "Outputdefinition68";
+-		case Outputdefinition69Enum : return "Outputdefinition69";
+-		case Outputdefinition6Enum : return "Outputdefinition6";
+-		case Outputdefinition70Enum : return "Outputdefinition70";
+-		case Outputdefinition71Enum : return "Outputdefinition71";
+-		case Outputdefinition72Enum : return "Outputdefinition72";
+-		case Outputdefinition73Enum : return "Outputdefinition73";
+-		case Outputdefinition74Enum : return "Outputdefinition74";
+-		case Outputdefinition75Enum : return "Outputdefinition75";
+-		case Outputdefinition76Enum : return "Outputdefinition76";
+-		case Outputdefinition77Enum : return "Outputdefinition77";
+-		case Outputdefinition78Enum : return "Outputdefinition78";
+-		case Outputdefinition79Enum : return "Outputdefinition79";
+-		case Outputdefinition7Enum : return "Outputdefinition7";
+-		case Outputdefinition80Enum : return "Outputdefinition80";
+-		case Outputdefinition81Enum : return "Outputdefinition81";
+-		case Outputdefinition82Enum : return "Outputdefinition82";
+-		case Outputdefinition83Enum : return "Outputdefinition83";
+-		case Outputdefinition84Enum : return "Outputdefinition84";
+-		case Outputdefinition85Enum : return "Outputdefinition85";
+-		case Outputdefinition86Enum : return "Outputdefinition86";
+-		case Outputdefinition87Enum : return "Outputdefinition87";
+-		case Outputdefinition88Enum : return "Outputdefinition88";
+-		case Outputdefinition89Enum : return "Outputdefinition89";
+-		case Outputdefinition8Enum : return "Outputdefinition8";
+-		case Outputdefinition90Enum : return "Outputdefinition90";
+-		case Outputdefinition91Enum : return "Outputdefinition91";
+-		case Outputdefinition92Enum : return "Outputdefinition92";
+-		case Outputdefinition93Enum : return "Outputdefinition93";
+-		case Outputdefinition94Enum : return "Outputdefinition94";
+-		case Outputdefinition95Enum : return "Outputdefinition95";
+-		case Outputdefinition96Enum : return "Outputdefinition96";
+-		case Outputdefinition97Enum : return "Outputdefinition97";
+-		case Outputdefinition98Enum : return "Outputdefinition98";
+-		case Outputdefinition99Enum : return "Outputdefinition99";
+-		case Outputdefinition9Enum : return "Outputdefinition9";
+ 		case OutputdefinitionListEnum : return "OutputdefinitionList";
+ 		case SealevelObsEnum : return "SealevelObs";
+ 		case SealevelWeightsEnum : return "SealevelWeights";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22620)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22621)
+@@ -889,8 +889,106 @@
+ 	      else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
+ 	      else if (strcmp(name,"Open")==0) return OpenEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
++	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
++	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
++	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
++	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
++	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
++	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
++	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
++	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
++	      else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum;
++	      else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum;
++	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
++	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
++	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
++	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
++	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
++	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
++	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
++	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
++	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
++	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
++	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
++	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
++	      else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
++	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
++	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
++	      else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
++	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
++	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
++	      else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
++	      else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum;
++	      else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum;
++	      else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum;
++	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
++	      else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum;
++	      else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum;
++	      else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum;
++	      else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum;
++	      else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum;
++	      else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum;
++	      else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum;
++	      else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum;
++	      else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum;
++	      else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum;
++	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
++	      else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;
++	      else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;
++	      else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;
++	      else if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum;
++	      else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
++	      else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
++	      else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
++	      else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
++	      else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
++	      else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
++	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
++	      else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
++	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
++	      else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
++	      else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum;
++	      else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum;
++	      else if (strcmp(name,"Outputdefinition65")==0) return Outputdefinition65Enum;
++	      else if (strcmp(name,"Outputdefinition66")==0) return Outputdefinition66Enum;
++	      else if (strcmp(name,"Outputdefinition67")==0) return Outputdefinition67Enum;
++	      else if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum;
++	      else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum;
++	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
++	      else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum;
++	      else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;
++	      else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
++	      else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum;
++	      else if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
++	      else if (strcmp(name,"Outputdefinition75")==0) return Outputdefinition75Enum;
++	      else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum;
++	      else if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum;
++	      else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
++	      else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
++	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
++	      else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
++	      else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
++	      else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
++	      else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
++	      else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
++	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
++	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
++	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
++	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
++	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
++	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
++	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
++	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
++	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
++	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
++	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
++	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
++	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
++	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
++	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
++	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+-	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+@@ -899,7 +997,10 @@
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+-	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+ 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+@@ -997,10 +1098,7 @@
+ 	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
++	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+ 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+@@ -1022,111 +1120,13 @@
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
+-	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
+ 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+-	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
+-	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
+-	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
+-	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
+-	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+-	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
+-	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
+-	      else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum;
+-	      else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum;
+-	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
+-	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
+-	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+-	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+-	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
+-	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
+-	      else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
+-	      else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
+-	      else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
+-	      else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
+-	      else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum;
+-	      else if (strcmp(name,"Outputdefinition2")==0) return Outputdefinition2Enum;
+-	      else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
+-	      else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
+-	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
+-	      else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
+-	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
+-	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
+-	      else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
+-	      else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum;
+-	      else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum;
+-	      else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum;
+-	      else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum;
+-	      else if (strcmp(name,"Outputdefinition40")==0) return Outputdefinition40Enum;
+-	      else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum;
+-	      else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum;
+-	      else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum;
+-	      else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum;
+-	      else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum;
+-	      else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum;
+-	      else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum;
+-	      else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum;
+-	      else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum;
+-	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+-	      else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;
+-	      else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;
+-	      else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;
+-	      else if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum;
+-	      else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
+-	      else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
+-	      else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
+-	      else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
+-	      else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
+-	      else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
+-	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+-	      else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
+-	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
+-	      else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
+-	      else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum;
+-	      else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum;
+-	      else if (strcmp(name,"Outputdefinition65")==0) return Outputdefinition65Enum;
+-	      else if (strcmp(name,"Outputdefinition66")==0) return Outputdefinition66Enum;
+-	      else if (strcmp(name,"Outputdefinition67")==0) return Outputdefinition67Enum;
+-	      else if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum;
+-	      else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum;
+-	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+-	      else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum;
+-	      else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;
+-	      else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum;
+-	      else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum;
+-	      else if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum;
+-	      else if (strcmp(name,"Outputdefinition75")==0) return Outputdefinition75Enum;
+-	      else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum;
+-	      else if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum;
+-	      else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum;
+-	      else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum;
+-	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
+-	      else if (strcmp(name,"Outputdefinition80")==0) return Outputdefinition80Enum;
+-	      else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
+-	      else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
+-	      else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
+-	      else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
+-	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
+-	      else if (strcmp(name,"Outputdefinition86")==0) return Outputdefinition86Enum;
+-	      else if (strcmp(name,"Outputdefinition87")==0) return Outputdefinition87Enum;
+-	      else if (strcmp(name,"Outputdefinition88")==0) return Outputdefinition88Enum;
+-	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
+-	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+-	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+-	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+-	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+-	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+-	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+-	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+-	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+-	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+-	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+-	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+ 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
+ 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22623-22624.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22623-22624.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22623-22624.diff	(revision 22755)
@@ -0,0 +1,113 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22623)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22624)
+@@ -10,11 +10,9 @@
+     --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install-javascript" \
+     --with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install-javascript" \
+ 	--without-Love \
+-    --without-kml\
+-    --without-kriging\
+-    --with-cxxoptflags=""\
+-    CXXFLAGS=""\
+-    CFLAGS=""'
++    --without-kml \
++    --without-kriging \
++    --with-cxxoptflags="-O2"'
+ 
+ #PYTHON and MATLAB testing
+ MATLAB_TEST=0
+Index: ../trunk-jpl/externalpackages/gsl/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 22623)
++++ ../trunk-jpl/externalpackages/gsl/install-javascript.sh	(revision 22624)
+@@ -1,6 +1,14 @@
+ #!/bin/bash
+ set -eu
+ 
++#Source emscripten to ensure emcc/em++ compiler are in env
++source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
++export CC=emcc
++export CXX=em++
++
++# Issue with variadic function signatures.
++export CFLAGS=-DSTDC_HEADERS
++
+ #Some cleanup
+ rm -rf src-javascript install-javascript gsl-1.15
+ mkdir src-javascript install-javascript
+@@ -18,14 +26,6 @@
+ #Configure gsl
+ cd src-javascript
+ 
+-#Source emscripten to ensure emcc/em++ compiler are in env
+-source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+-export CC=emcc
+-export CXX=em++
+-
+-# Issue with variadic function signatures.
+-export CFLAGS=-DSTDC_HEADERS
+-
+ ./configure --prefix="$ISSM_DIR/externalpackages/gsl/install-javascript" \
+ 	--disable-shared
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-javascript.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 22623)
++++ ../trunk-jpl/externalpackages/triangle/install-javascript.sh	(revision 22624)
+@@ -1,6 +1,11 @@
+ #!/bin/bash
+ set -eu
+ 
++#Source emscripten to ensure emcc/em++ compiler are in env
++source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
++export CC=emcc
++export CXX=em++
++
+ #Some cleanup 
+ rm -rf install-javascript triangle
+ mkdir install-javascript
+@@ -8,11 +13,6 @@
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/triangle.zip' 'triangle.zip'
+ 
+-#Source emscripten to ensure emcc/em++ compiler are in env
+-source $ISSM_DIR/externalpackages/emscripten/install/emsdk_env.sh
+-export CXX=em++
+-export CC=emcc
+-
+ #Untar 
+ cd install-javascript
+ cp ../triangle.zip ./
+Index: ../trunk-jpl/externalpackages/emscripten/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 22623)
++++ ../trunk-jpl/externalpackages/emscripten/install.sh	(revision 22624)
+@@ -1,6 +1,9 @@
+ #!/bin/bash
+ set -eu
+ 
++export CC=gcc
++export CXX=g++
++
+ #Some cleanup
+ rm -rf install
+ 
+@@ -11,14 +14,11 @@
+ tar -zxvf  emsdk-portable.tar.gz
+ mv emsdk_portable install
+ 
+-cd install 
++cd install
+ 
+-export CXX=g++
+-export CC=gcc
+-
+ ./emsdk update
+-./emsdk install latest
+-./emsdk activate latest
++./emsdk install sdk-tag-1.34.12-64bit
++./emsdk activate sdk-tag-1.34.12-64bit
+ 
+ #Related to moving the install path after installation - However, not safe to install in dir named "install" since a failure would not be noticed by jenkins when triggering
+ #Not reliable - when executed in subshell without sourcing the install file, this has no effect. Safer to explicitly source for each dependent externalpackage.
Index: /issm/oecreview/Archive/21724-22754/ISSM-22624-22625.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22624-22625.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22624-22625.diff	(revision 22755)
@@ -0,0 +1,1679 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22625)
+@@ -0,0 +1,76 @@
++%Test Name: PicoMeltRate
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%Set Pico Parameters
++md.basalforcings = basalforcingspico(md.basalforcings);
++md.basalforcings.basin_id = zeros(md.mesh.numberofelements,1);
++yE = mean(md.mesh.y(md.mesh.elements),2);
++pos1 = find(yE>=5e5);	 md.basalforcings.basin_id(pos1)=1;
++pos2 = find(yE<5e5);     md.basalforcings.basin_id(pos2)=2;
++md.basalforcings.num_basins = 2;
++md.basalforcings.farocean_temperature = [271.15 272.15 273.15; 274.15 275.15 276.15; 0.5 1 1.5]; %K
++md.basalforcings.farocean_salinity    = [31 32 33; 34 35 36; 0.5 1 1.5]; %PSU                
++md.basalforcings.maxboxcount=5;
++
++%Boundary conditions:
++md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(md.mesh.x==max(md.mesh.x)))=0;
++
++%Model conditions
++md.transient.isthermal=0;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismasstransport=1;
++md.transient.issmb=1;
++md.transient.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
++md.groundingline.migration='SubelementMigration';
++md.timestepping.final_time=1.5;
++md.timestepping.time_step=0.5;
++
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'Transient');
++
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
++	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
++	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
++	   3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
++	   1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
++field_values={...
++	   (md.results.TransientSolution(1).Base),...
++	   (md.results.TransientSolution(1).Surface),...
++	   (md.results.TransientSolution(1).Thickness),...
++	   (md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	   (md.results.TransientSolution(1).Vx),...
++	   (md.results.TransientSolution(1).Vy),...
++	   (md.results.TransientSolution(1).Pressure),...
++	   (md.results.TransientSolution(1).BasalforcingsFloatingiceMeltingRate),...
++	   (md.results.TransientSolution(2).Base),...
++	   (md.results.TransientSolution(2).Surface),...
++	   (md.results.TransientSolution(2).Thickness),...
++	   (md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	   (md.results.TransientSolution(2).Vx),...
++	   (md.results.TransientSolution(2).Vy),...
++	   (md.results.TransientSolution(2).Pressure),...
++	   (md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
++	   (md.results.TransientSolution(3).Base),...
++	   (md.results.TransientSolution(3).Surface),...
++	   (md.results.TransientSolution(3).Thickness),...
++	   (md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	   (md.results.TransientSolution(3).Vx),...
++	   (md.results.TransientSolution(3).Vy),...
++	   (md.results.TransientSolution(3).Pressure),...
++	   (md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
++	   };
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive470.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive470.arch	(revision 22625)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive470.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/classes/basalforcingspico.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcingspico.m	(revision 22624)
++++ ../trunk-jpl/src/m/classes/basalforcingspico.m	(revision 22625)
+@@ -10,14 +10,16 @@
+ 		maxboxcount               = 0;
+ 		overturning_coeff         = 0.;
+ 		gamma_T                   = 0.;
+-		box0temperature           = NaN;
+-		box0salinity              = NaN;
++		farocean_temperature      = NaN;
++		farocean_salinity         = NaN;
+ 		geothermalflux            = NaN;
++		groundedice_melting_rate  = NaN;
+ 	end
+ 	methods
+ 		function self = extrude(self,md) % {{{
+ 			self.basin_id=project3d(md,'vector',self.basin_id,'type','element','layer',1);
+ 			self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','element','layer',1); %bedrock only gets geothermal flux
++			self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
+ 		end % }}}
+ 		function self = basalforcingspico(varargin) % {{{
+ 			switch nargin
+@@ -45,6 +47,11 @@
+ 				self.gamma_T = 2e-5; %m/s
+ 				disp('      no turbulent temperature exchange velocity set, setting value to 2e-5');
+ 			end
++			if isnan(self.groundedice_melting_rate),
++				self.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++				disp('      no basalforcings.groundedice_melting_rate specified: values set as zero');
++			end
++
+ 		end % }}}
+ 		function self = setdefaultparameters(self) % {{{
+ 
+@@ -56,13 +63,14 @@
+ 		function md = checkconsistency(self,md,solution,analyses) % {{{
+ 
+ 				md = checkfield(md,'fieldname','basalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0);
+-				md = checkfield(md,'fieldname','basalforcings.basin_id','Inf',1,'>',0,'<=',md.basalforcings.num_basins,'size',[md.mesh.numberofelements 1]);
++				md = checkfield(md,'fieldname','basalforcings.basin_id','Inf',1,'>=',0,'<=',md.basalforcings.num_basins,'size',[md.mesh.numberofelements 1]);
+ 				md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
+ 				md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
+ 				md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
+-				md = checkfield(md,'fieldname','basalforcings.box0temperature','NaN',1,'Inf',1,'>',0);
+-				md = checkfield(md,'fieldname','basalforcings.box0salinity','NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0);
+ 				md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
++				md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+ 
+ 		end % }}}
+ 		function disp(self) % {{{
+@@ -72,9 +80,10 @@
+ 			fielddisplay(self,'maxboxcount','maximum number of boxes initialized under all ice shelves');
+ 			fielddisplay(self,'overturning_coeff','Overturning strength [m^3/s]');
+ 			fielddisplay(self,'gamma_T','Turbulent temperature exchange velocity [m/s]');
+-			fielddisplay(self,'box0temperature','depth averaged ocean temperature in front of the ice shelf for basin i [K]');
+-			fielddisplay(self,'box0salinity','depth averaged ocean salinity in front of the ice shelf for basin i [psu]');
++			fielddisplay(self,'farocean_temperature','depth averaged ocean temperature in front of the ice shelf for basin i [K]');
++			fielddisplay(self,'farocean_salinity','depth averaged ocean salinity in front of the ice shelf for basin i [psu]');
+ 			fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]');
++			fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]');
+ 
+ 		end % }}}
+ 		function marshall(self,prefix,md,fid) % {{{
+@@ -86,10 +95,12 @@
+ 			WriteData(fid,prefix,'object',self,'fieldname','maxboxcount','format','Integer');
+ 			WriteData(fid,prefix,'object',self,'fieldname','overturning_coeff','format','Double');
+ 			WriteData(fid,prefix,'object',self,'fieldname','gamma_T','format','Double');
+-			WriteData(fid,prefix,'object',self,'fieldname','box0temperature','format','DoubleMat','name','md.basalforcings.box0temperature','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
+-			WriteData(fid,prefix,'object',self,'fieldname','box0salinity','format','DoubleMat','name','md.basalforcings.box0salinity','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
+-			WriteData(fid,prefix,'object',self,'fieldname','basin_id','format','DoubleMat','name','md.basalforcings.basin_id','mattype',2);
++			WriteData(fid,prefix,'object',self,'fieldname','farocean_temperature','format','DoubleMat','name','md.basalforcings.farocean_temperature','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'fieldname','farocean_salinity','format','DoubleMat','name','md.basalforcings.farocean_salinity','timeserieslength',md.basalforcings.num_basins+1,'yts',md.constants.yts);
++			%WriteData(fid,prefix,'object',self,'fieldname','basin_id','format','DoubleMat','name','md.basalforcings.basin_id','mattype',2);
++			WriteData(fid,prefix,'object',self,'fieldname','basin_id','data',self.basin_id-1,'name','md.basalforcings.basin_id','format','IntMat','mattype',2);   %Change to 0-indexing
+ 			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','name','md.basalforcings.geothermalflux','mattype',1,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
++			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 22625)
+@@ -30,7 +30,7 @@
+ 			break;
+ 		case BasalforcingsPicoEnum:
+ 			if(VerboseSolution())_printf0_(" call Pico Floating melting rate module\n");
+-			PicoFloatingiceMeltingRatex(femmodel);
++			FloatingiceMeltingRatePicox(femmodel);
+ 			break;
+ 		default:
+ 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+@@ -55,91 +55,3 @@
+ }
+ /*}}}*/
+ 
+-void PicoFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/
+-
+-	int i,k,p,numvertices;
+-	int num_basins,maxbox,basinid,boxid;
+-	IssmDouble dist_max,area,earth_grav,rhoi,rhow,rho_star,nu,latentheat;
+-	IssmDouble c_p_ocean,lambda,a,b,c,alpha,Beta,gamma_T,overturning_coeff;
+-	IssmDouble g1,g2,s1,p_coeff,tavg,savg,overturning_avg;
+-	IssmDouble mean_toc,mean_soc,mean_overturning,pressure,T_star;
+-	IssmDouble q_coeff,potential_pressure_melting_point,T_pressure_melting,overturning;
+-	IssmDouble thickness,toc_farocean,soc_farocean,area_box1,Toc,Soc,basalmeltrate_shelf;
+-	int* nd=NULL;
+-	IssmDouble* dmax_basin=NULL;
+-	IssmDouble* t_farocean=NULL;
+-	IssmDouble* s_farocean=NULL;
+-	IssmDouble* distances=NULL;
+-	IssmDouble* boxareas=NULL;
+-	Element* element=NULL;
+-
+-	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
+-	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	dmax_basin=xNew<IssmDouble>(num_basins);
+-	femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
+-	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
+-	// find maximum distance to grounding line
+-	dist_max=-1.;
+-	for(i=0;i<num_basins;i++){
+-		dmax_basin[i]=-1;
+-	}
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		if(!element->IsFloating()) continue;
+-		numvertices = element->GetNumberOfVertices();
+-		distances=xNew<IssmDouble>(numvertices);
+-		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
+-		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-		for(k=0; k<numvertices; k++){
+-			if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
+-			if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
+-		}
+-	}
+-	//1 Define pico boxes
+-	nd=xNew<int>(num_basins);
+-	#ifndef _HAVE_ADOLC_ //we want to avoid the round operation at all cost. Not differentiable.
+-	for(i=0; i<num_basins;i++){
+-		nd[i] = round(sqrt(dmax_basin[i]/dist_max)*(maxbox-1)); //0-based
+-	}
+-	#else
+-	_error_("Don't know how to call round with AD on (present in other parts of the code as well");
+-	#endif
+-	for(int i=0;i<femmodel->elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->PicoUpdateBoxid(nd);
+-	}
+-
+-	//2 Get area of the boxes
+-	boxareas=xNew<IssmDouble>(num_basins*maxbox);
+-	for(i=0;i<num_basins*maxbox;i++){boxareas[i]=0.;}
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		if(!element->IsFloating()) continue;
+-		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-		element->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-		_error_("fix thi");
+-		//boxareas[basinid*maxbox+boxid]+=element->GetArea();
+-	}
+-
+-	//3 Compute variables in first box
+-	for(int p=0;p<femmodel->elements->Size();p++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(p));
+-		element->PicoUpdateFirstBox();
+-		//Need to save the box1 average of temp, sal, and overt for input into next box.
+-	}
+-
+-
+-	//4 Compute variables of all other boxes
+-
+-// 	for(int i=0;i<femmodel->elements->Size();i++){
+-// 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-// 		element->PicoFloatingiceMeltingRate();
+-// 	}
+-	/*Cleanup and return */
+-	xDelete<int>(nd);
+-	xDelete<IssmDouble>(dmax_basin);
+-	xDelete<IssmDouble>(distances);
+-	xDelete<IssmDouble>(boxareas);
+-	xDelete<IssmDouble>(t_farocean);
+-   xDelete<IssmDouble>(s_farocean);
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h	(revision 22624)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h	(revision 22625)
+@@ -6,11 +6,11 @@
+ #define _FloatingiceMeltingRatex_H
+ 
+ #include "../../classes/classes.h"
++#include "../FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h"
+ 
+ /* local prototypes: */
+ void FloatingiceMeltingRatex(FemModel* femmodel);
+ void LinearFloatingiceMeltingRatex(FemModel* femmodel);
+ void MismipFloatingiceMeltingRatex(FemModel* femmodel);
+-void PicoFloatingiceMeltingRatex(FemModel* femmodel);
+ 
+ #endif  /* _FloatingiceMeltingRatex_H*/
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22625)
+@@ -0,0 +1,226 @@
++/*!\file FloatingiceMeltingRatePicox
++ * \brief: calculates Floating ice melting rate following the PICO model (Reese et al., 2017)
++ */
++
++#include "./FloatingiceMeltingRatePicox.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++
++void FloatingiceMeltingRatePicox(FemModel* femmodel){/*{{{*/
++
++	int maxbox;
++
++	/*First, reset all melt to 0 */
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		int numvertices = element->GetNumberOfVertices();
++		IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
++		element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
++		xDelete<IssmDouble>(values);
++	}
++
++	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	UpdateBoxIdsPico(femmodel);
++	ComputeBoxAreasPico(femmodel);
++	UpdateFirstBoxPico(femmodel);
++	for(int i=1;i<maxbox;i++){
++		ComputeAverageOceanvarsPico(femmodel, i-1);
++		UpdateNextBoxPico(femmodel, i);
++	}
++}/*}}}*/
++
++void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
++
++	int i,k,numvertices,num_basins,maxbox,basinid;
++	IssmDouble dist_max,val;
++	int* nd=NULL;
++	IssmDouble* dmax_basin=NULL;
++	IssmDouble* distances=NULL;
++
++	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
++	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	dmax_basin=xNew<IssmDouble>(num_basins);
++
++	femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
++	femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
++	
++	femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
++	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
++
++	/*find maximum distance to grounding line per domain and per basin*/
++	dist_max=-1.;
++	for(i=0;i<num_basins;i++){dmax_basin[i]=-1;}
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		if(!element->IsIceInElement() || !element->IsFloating()) continue;
++		numvertices = element->GetNumberOfVertices();
++		distances=xNew<IssmDouble>(numvertices);
++		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
++		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++		for(k=0; k<numvertices; k++){
++			if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
++			if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
++		}
++		xDelete<IssmDouble>(distances);
++	}
++
++	/*Define maximum number of boxes per basin*/
++	nd=xNew<int>(num_basins);
++	for(i=0; i<num_basins;i++){
++		val=sqrt(dmax_basin[i]/dist_max)*(maxbox-1);
++		k=0;
++		while(k<val+.5){k++;}
++		nd[i]=k;
++	} 
++
++	/*Assign box numbers*/
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->PicoUpdateBoxid(nd);
++	}
++
++	/*Cleanup and return */
++	xDelete<int>(nd);
++	xDelete<IssmDouble>(dmax_basin);
++
++}/*}}}*/
++void ComputeBoxAreasPico(FemModel* femmodel){/*{{{*/
++
++	int num_basins,maxbox,basinid,boxid;
++	IssmDouble dist_max,area;
++
++	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
++	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	
++	IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		if(!element->IsIceInElement() || !element->IsFloating()) continue;
++		element->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
++		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++		boxareas[basinid*maxbox+boxid]+=element->GetHorizontalSurfaceArea();
++	}
++
++	/*Synchronize across cpus*/
++	IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
++	ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++
++	/*Update parameters to keep track of the new areas in future calculations*/
++	femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins));
++
++	/*Cleanup and return */
++	xDelete<IssmDouble>(boxareas);
++	xDelete<IssmDouble>(sumareas);
++
++}/*}}}*/
++void UpdateFirstBoxPico(FemModel* femmodel){/*{{{*/
++
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->PicoUpdateFirstBox();
++	}
++
++}/*}}}*/
++void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid){/*{{{*/
++
++	int i,k,p, num_basins, basinid, maxbox, M;
++	IssmDouble area, toc, soc, overturning;
++	IssmDouble* boxareas=NULL;
++	IssmDouble* overturning_weighted_avg=NULL;
++	Element* element;
++   Gauss* gauss;
++
++	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
++	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	M=maxbox*num_basins;
++	femmodel->parameters->FindParam(&boxareas,&M, BasalforcingsPicoBoxAreaEnum);
++	IssmDouble* toc_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* soc_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* toc_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* soc_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* overturning_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
++
++	/* Compute Toc and Soc weighted avg (boxes 0 to n-1) */
++	for(i=0;i<femmodel->elements->Size();i++){
++		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		if(!element->IsIceInElement() || !element->IsFloating()) continue;
++		int el_boxid;
++		element->inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);
++		if(el_boxid!=boxid) continue;
++
++		Input* tocs_input=element->GetInput(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(tocs_input); 
++		Input* socs_input=element->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input);
++
++		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++		gauss=element->NewGauss(1); gauss->GaussPoint(0);
++		tocs_input->GetInputValue(&toc,gauss);
++		socs_input->GetInputValue(&soc,gauss);
++		delete gauss;
++		area=element->GetHorizontalSurfaceArea();
++		toc_weighted_avg[basinid]+=toc*area;
++		soc_weighted_avg[basinid]+=soc*area;
++	}
++
++	/*Syncronize across cpus*/
++	ISSM_MPI_Allreduce(toc_weighted_avg,toc_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce(soc_weighted_avg,soc_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++
++	for(k=0;k<num_basins;k++){
++		p=k*maxbox+boxid; 
++		if(boxareas[p]==0) continue;	
++		toc_sumweightedavg[k] = toc_sumweightedavg[k]/boxareas[p];
++		soc_sumweightedavg[k] = soc_sumweightedavg[k]/boxareas[p];
++	}
++
++	femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoAverageTemperatureEnum,toc_sumweightedavg,num_basins));
++	femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoAverageSalinityEnum,soc_sumweightedavg,num_basins));
++
++	/* Compute overturning weighted avg (box 0 only) */
++	if(boxid==0){ 
++		overturning_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
++		for(i=0;i<femmodel->elements->Size();i++){
++			element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++			if(!element->IsIceInElement() || !element->IsFloating()) continue;
++			int el_boxid;
++			element->inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);
++			if(el_boxid!=boxid) continue;
++
++	     	Input* overturnings_input=element->GetInput(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input);
++
++			element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++			gauss=element->NewGauss(1); gauss->GaussPoint(0);
++			overturnings_input->GetInputValue(&overturning,gauss);
++			delete gauss;
++			area=element->GetHorizontalSurfaceArea();
++			overturning_weighted_avg[basinid]+=overturning*area;
++		}
++
++		/*Syncronize across cpus*/
++		ISSM_MPI_Allreduce(overturning_weighted_avg,overturning_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++
++		for(k=0;k<num_basins;k++){
++			element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++			p=k*maxbox+boxid;
++			if(boxareas[p]==0) continue;
++			overturning_sumweightedavg[k] = overturning_sumweightedavg[k]/boxareas[p];
++		}
++		femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoAverageOverturningEnum,overturning_sumweightedavg,num_basins));
++	}
++
++	/*Cleanup and return */
++	xDelete<IssmDouble>(overturning_sumweightedavg);
++	xDelete<IssmDouble>(toc_sumweightedavg);
++	xDelete<IssmDouble>(soc_sumweightedavg);
++	xDelete<IssmDouble>(overturning_weighted_avg);
++	xDelete<IssmDouble>(toc_weighted_avg);
++	xDelete<IssmDouble>(soc_weighted_avg);
++	xDelete<IssmDouble>(boxareas);
++
++}/*}}}*/
++void UpdateNextBoxPico(FemModel* femmodel, int loopboxid){/*{{{*/
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->PicoUpdateNextBox(loopboxid);	
++	}
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(nonexistent)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(revision 22625)
+@@ -0,0 +1,19 @@
++/*!\file:  FloatingiceMeltingRatePicox.h
++ * \brief header file for Floatingice melting rate
++ */ 
++
++#ifndef _FloatingiceMeltingRatePicox_H
++#define _FloatingiceMeltingRatePicox_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void FloatingiceMeltingRatePicox(FemModel* femmodel);
++
++void UpdateBoxIdsPico(FemModel* femmodel);
++void ComputeBoxAreasPico(FemModel* femmodel);
++void UpdateFirstBoxPico(FemModel* femmodel);
++void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid);
++void UpdateNextBoxPico(FemModel* femmodel, int loopboxid);
++
++#endif  /* _FloatingiceMeltingRatePicox_H*/
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 22624)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 22625)
+@@ -59,6 +59,7 @@
+ #include "./Kml2Expx/Kml2Expx.h"
+ #include "./Krigingx/Krigingx.h"
+ #include "./FloatingiceMeltingRatex/FloatingiceMeltingRatex.h"
++#include "./FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h"
+ #include "./Mergesolutionfromftogx/Mergesolutionfromftogx.h"
+ #include "./MeshPartitionx/MeshPartitionx.h"
+ #include "./MeshProfileIntersectionx/MeshProfileIntersectionx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 22624)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 22625)
+@@ -222,6 +222,7 @@
+ 					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp\
+ 					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
+ 					./modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp\
++					./modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
+ 					./modules/SpcNodesx/SpcNodesx.cpp\
+ 					./modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp\
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22625)
+@@ -139,6 +139,8 @@
+ 		int            NumberofNodesPressure(void);
+ 		int            NumberofNodesVelocity(void);
+ 		void				PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
++		void				PicoUpdateFirstBox(){_error_("not implemented yet");};
++		void				PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
+ 		void           PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int            PressureInterpolation();
+ 		void           ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22625)
+@@ -128,6 +128,8 @@
+ 		int         NumberofNodesPressure(void){_error_("not implemented yet");};
+ 		int         NumberofNodesVelocity(void){_error_("not implemented yet");};
+ 		void        PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
++		void			PicoUpdateFirstBox(){_error_("not implemented yet");};
++		void			PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void){_error_("not implemented yet");};
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22625)
+@@ -136,6 +136,8 @@
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
+ 		void			PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};	
++		void			PicoUpdateFirstBox(){_error_("not implemented yet");};
++		void			PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void);
+ 		void        ResetFSBasalBoundaryCondition(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22625)
+@@ -2340,31 +2340,6 @@
+ 	return new ElementVector(nodes,this->GetNumberOfNodes(),this->parameters,approximation_enum);
+ }
+ /*}}}*/
+-void       Element::PicoFloatingiceMeltingRate(){/*{{{*/
+-
+-	int numvertices      = this->GetNumberOfVertices();
+-	IssmDouble  deepwaterel,upperwaterel,deepwatermelt;
+-	IssmDouble* base     = xNew<IssmDouble>(numvertices);
+-	IssmDouble* values   = xNew<IssmDouble>(numvertices);
+-	IssmDouble time;
+-
+-	parameters->FindParam(&time,TimeEnum);
+-	parameters->FindParam(&deepwaterel,BasalforcingsDeepwaterElevationEnum,time);
+-	parameters->FindParam(&upperwaterel,BasalforcingsUpperwaterElevationEnum,time);
+-	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum,time);
+-
+-	this->GetInputListOnVertices(base,BaseEnum);
+-	for(int i=0;i<numvertices;i++){
+-		if(base[i]>upperwaterel)      values[i]=0;
+-		else if (base[i]<deepwaterel) values[i]=deepwatermelt;
+-		else values[i]=deepwatermelt*(base[i]-upperwaterel)/(deepwaterel-upperwaterel);
+-	}
+-
+-	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+-	xDelete<IssmDouble>(base);
+-	xDelete<IssmDouble>(values);
+-
+-}/*}}}*/
+ void       Element::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac){/*{{{*/
+ 
+ 	int  numvertices = this->GetNumberOfVertices();
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22625)
+@@ -141,7 +141,6 @@
+ 		ElementMatrix*     NewElementMatrix(int approximation_enum=NoneApproximationEnum);
+ 		ElementMatrix*     NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
+ 		ElementVector*     NewElementVector(int approximation_enum=NoneApproximationEnum);
+-		void					 PicoFloatingiceMeltingRate();
+ 		void               PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm,bool ismungsm,bool issetpddfac);
+ 		IssmDouble         PureIceEnthalpy(IssmDouble pressure);
+ 		void               ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
+@@ -212,6 +211,7 @@
+ 		virtual void       FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating)=0;
+ 		virtual Element*   GetBasalElement(void)=0;
+ 		virtual int        GetElementType(void)=0;
++		virtual IssmDouble GetHorizontalSurfaceArea(void){_error_("not implemented");};
+ 		virtual void       GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating)=0;
+ 		virtual IssmDouble GetGroundedPortion(IssmDouble* xyz_list)=0;
+ 		virtual void       GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
+@@ -277,7 +277,8 @@
+ 		virtual int        NumberofNodesPressure(void)=0;
+ 		virtual int        NumberofNodesVelocity(void)=0;
+ 		virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
+-		virtual void       PicoUpdateFirstBox(void){_error_("not implemented");};
++		virtual void       PicoUpdateFirstBox()=0;
++		virtual void       PicoUpdateNextBox(int loopboxid)=0;
+ 		virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+ 		virtual int        PressureInterpolation()=0;
+ 		virtual void       ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22625)
+@@ -110,7 +110,8 @@
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
+ 		void        PicoUpdateBoxid(int* pmax_boxid_basin);
+-		void        PicoUpdateFirstBox(void);
++		void        PicoUpdateFirstBox();
++		void        PicoUpdateNextBox(int loopboxid);
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int         PressureInterpolation();
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+@@ -164,6 +165,7 @@
+ 		void           AddControlInput(int input_enum, IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
+ 		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum);
+ 		IssmDouble     GetArea(void);
++		IssmDouble     GetHorizontalSurfaceArea(void);
+ 		IssmDouble 	   GetArea3D(void);
+ 		IssmDouble 	   GetAreaIce(void);
+ 		IssmDouble 	   GetAreaSpherical(void);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22624)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22625)
+@@ -65,8 +65,14 @@
+ 	BasalforcingsMantleconductivityEnum,
+ 	BasalforcingsMeltrateFactorEnum,
+ 	BasalforcingsNusseltEnum,
++	BasalforcingsPicoAverageOverturningEnum,
++	BasalforcingsPicoAverageSalinityEnum,
++	BasalforcingsPicoAverageTemperatureEnum,
++	BasalforcingsPicoBoxAreaEnum,
+ 	BasalforcingsPicoFarOceansalinityEnum,
++	BasalforcingsPicoFarOceantemperatureEnum,
+ 	BasalforcingsPicoGammaTEnum,
++	BasalforcingsPicoMaxboxcountEnum,
+ 	BasalforcingsPicoNumBasinsEnum,
+ 	BasalforcingsPicoOverturningCoeffEnum,
+ 	BasalforcingsPlumeradiusEnum,
+@@ -356,7 +362,9 @@
+ 	BasalforcingsGroundediceMeltingRateEnum,
+ 	BasalforcingsPicoBasinIdEnum,
+ 	BasalforcingsPicoBoxIdEnum,
+-	BasalforcingsPicoMaxboxcountEnum,
++	BasalforcingsPicoSubShelfOceanOverturningEnum,
++	BasalforcingsPicoSubShelfOceanSalinityEnum,
++	BasalforcingsPicoSubShelfOceanTempEnum,
+ 	BaseEnum,
+ 	BedEnum,
+ 	BedSlopeXEnum,
+@@ -623,7 +631,6 @@
+ 	BalancevelocitySolutionEnum,
+ 	BasalCrevasseEnum,
+ 	BasalforcingsPicoEnum,
+-	BasalforcingsPicoFarOceantemperatureEnum,
+ 	BedSlopeSolutionEnum,
+ 	BoolExternalResultEnum,
+ 	BoolInputEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22625)
+@@ -73,8 +73,14 @@
+ 		case BasalforcingsMantleconductivityEnum : return "BasalforcingsMantleconductivity";
+ 		case BasalforcingsMeltrateFactorEnum : return "BasalforcingsMeltrateFactor";
+ 		case BasalforcingsNusseltEnum : return "BasalforcingsNusselt";
++		case BasalforcingsPicoAverageOverturningEnum : return "BasalforcingsPicoAverageOverturning";
++		case BasalforcingsPicoAverageSalinityEnum : return "BasalforcingsPicoAverageSalinity";
++		case BasalforcingsPicoAverageTemperatureEnum : return "BasalforcingsPicoAverageTemperature";
++		case BasalforcingsPicoBoxAreaEnum : return "BasalforcingsPicoBoxArea";
+ 		case BasalforcingsPicoFarOceansalinityEnum : return "BasalforcingsPicoFarOceansalinity";
++		case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature";
+ 		case BasalforcingsPicoGammaTEnum : return "BasalforcingsPicoGammaT";
++		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
+ 		case BasalforcingsPicoNumBasinsEnum : return "BasalforcingsPicoNumBasins";
+ 		case BasalforcingsPicoOverturningCoeffEnum : return "BasalforcingsPicoOverturningCoeff";
+ 		case BasalforcingsPlumeradiusEnum : return "BasalforcingsPlumeradius";
+@@ -362,7 +368,9 @@
+ 		case BasalforcingsGroundediceMeltingRateEnum : return "BasalforcingsGroundediceMeltingRate";
+ 		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
+ 		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
+-		case BasalforcingsPicoMaxboxcountEnum : return "BasalforcingsPicoMaxboxcount";
++		case BasalforcingsPicoSubShelfOceanOverturningEnum : return "BasalforcingsPicoSubShelfOceanOverturning";
++		case BasalforcingsPicoSubShelfOceanSalinityEnum : return "BasalforcingsPicoSubShelfOceanSalinity";
++		case BasalforcingsPicoSubShelfOceanTempEnum : return "BasalforcingsPicoSubShelfOceanTemp";
+ 		case BaseEnum : return "Base";
+ 		case BedEnum : return "Bed";
+ 		case BedSlopeXEnum : return "BedSlopeX";
+@@ -627,7 +635,6 @@
+ 		case BalancevelocitySolutionEnum : return "BalancevelocitySolution";
+ 		case BasalCrevasseEnum : return "BasalCrevasse";
+ 		case BasalforcingsPicoEnum : return "BasalforcingsPico";
+-		case BasalforcingsPicoFarOceantemperatureEnum : return "BasalforcingsPicoFarOceantemperature";
+ 		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+ 		case BoolExternalResultEnum : return "BoolExternalResult";
+ 		case BoolInputEnum : return "BoolInput";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22625)
+@@ -73,8 +73,14 @@
+ 	      else if (strcmp(name,"BasalforcingsMantleconductivity")==0) return BasalforcingsMantleconductivityEnum;
+ 	      else if (strcmp(name,"BasalforcingsMeltrateFactor")==0) return BasalforcingsMeltrateFactorEnum;
+ 	      else if (strcmp(name,"BasalforcingsNusselt")==0) return BasalforcingsNusseltEnum;
++	      else if (strcmp(name,"BasalforcingsPicoAverageOverturning")==0) return BasalforcingsPicoAverageOverturningEnum;
++	      else if (strcmp(name,"BasalforcingsPicoAverageSalinity")==0) return BasalforcingsPicoAverageSalinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoAverageTemperature")==0) return BasalforcingsPicoAverageTemperatureEnum;
++	      else if (strcmp(name,"BasalforcingsPicoBoxArea")==0) return BasalforcingsPicoBoxAreaEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoFarOceansalinity")==0) return BasalforcingsPicoFarOceansalinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoGammaT")==0) return BasalforcingsPicoGammaTEnum;
++	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoNumBasins")==0) return BasalforcingsPicoNumBasinsEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoOverturningCoeff")==0) return BasalforcingsPicoOverturningCoeffEnum;
+ 	      else if (strcmp(name,"BasalforcingsPlumeradius")==0) return BasalforcingsPlumeradiusEnum;
+@@ -130,16 +136,16 @@
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum;
+ 	      else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum;
+-	      else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum;
++         else stage=2;
++   }
++   if(stage==2){
++	      if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum;
+ 	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
+ 	      else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
+ 	      else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
+-         else stage=2;
+-   }
+-   if(stage==2){
+-	      if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
++	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
+ 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
+ 	      else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
+@@ -253,16 +259,16 @@
+ 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
+ 	      else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum;
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+-	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+ 	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+ 	      else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum;
+ 	      else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
++	      else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;
+ 	      else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;
+ 	      else if (strcmp(name,"SmbDt")==0) return SmbDtEnum;
+ 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
+@@ -368,13 +374,18 @@
+ 	      else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoMaxboxcount")==0) return BasalforcingsPicoMaxboxcountEnum;
++	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;
++	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum;
+ 	      else if (strcmp(name,"Base")==0) return BaseEnum;
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+ 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+-	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+@@ -382,10 +393,7 @@
+ 	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+ 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
+ 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
++	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
+ 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum;
+@@ -497,7 +505,10 @@
+ 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+ 	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
+ 	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
+-	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+@@ -505,10 +516,7 @@
+ 	      else if (strcmp(name,"SmbD")==0) return SmbDEnum;
+ 	      else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum;
+ 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
++	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
+ 	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
+ 	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+ 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
+@@ -620,7 +628,10 @@
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+-	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+@@ -628,10 +639,7 @@
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
++	      else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+@@ -642,7 +650,6 @@
+ 	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+ 	      else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum;
+ 	      else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoFarOceantemperature")==0) return BasalforcingsPicoFarOceantemperatureEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+@@ -744,7 +751,10 @@
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+ 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+-	      else if (strcmp(name,"Gset")==0) return GsetEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+@@ -751,10 +761,7 @@
+ 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+ 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
++	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+ 	      else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum;
+ 	      else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum;
+ 	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
+@@ -867,7 +874,10 @@
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+ 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+-	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"MinVz")==0) return MinVzEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+@@ -874,10 +884,7 @@
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+ 	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
++	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+@@ -990,7 +997,10 @@
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+ 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+-	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+@@ -997,10 +1007,7 @@
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
++	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+ 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+@@ -1113,7 +1120,10 @@
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+ 	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
+-	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+@@ -1120,10 +1130,7 @@
+ 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
++	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
+ 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22625)
+@@ -210,8 +210,10 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_temperature");
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				xDelete<IssmDouble>(transparam);
+ 				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_salinity");
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				xDelete<IssmDouble>(transparam);
+ 			break;
+ 		default:
+ 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22625)
+@@ -141,3 +141,58 @@
+ 	*pdouble=output;
+ }
+ /*}}}*/
++void  TransientArrayParam::GetParameterValue(IssmDouble** pIssmDoubleArray, int* pM, IssmDouble time){/*{{{*/
++
++	IssmDouble* output=NULL;
++	bool   found;
++	int M=*pM;
++
++	output=xNew<IssmDouble>(M);
++
++	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
++	 *fall within. Then interpolate the values on this interval: */
++	if(time<this->timesteps[0]){
++		/*get values for the first time: */
++		for(int k=0; k<M;k++){
++			output[k]=this->values[k*this->N];
++			found=true;
++		}
++	}
++	else if(time>this->timesteps[this->N-1]){
++		/*get values for the last time: */
++		for(int k=0; k<M;k++){
++			output[k]=this->values[(k+1)*this->N-1];
++			found=true;
++		}
++	}
++	else{
++		/*Find which interval we fall within: */
++		for(int i=0;i<this->N;i++){
++			if(time==this->timesteps[i]){
++				/*We are right on one step time: */
++				for(int k=0; k<M;k++){
++					output[k]=this->values[k*this->N+i];
++				}
++				found=true;
++				break; //we are done with the time interpolation.
++			}
++			else{
++				if(this->timesteps[i]<time && time<this->timesteps[i+1]){
++					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
++					IssmDouble deltat=this->timesteps[i+1]-this->timesteps[i];
++					IssmDouble alpha=(time-this->timesteps[i])/deltat;
++					for(int k=0; k<M;k++){
++						if(interpolation==true) output[k]=(1.0-alpha)*this->values[k*this->N+i] + alpha*this->values[k*this->N+i+1];
++						else output[k]=this->values[k*this->N+i];
++					}
++					found=true;
++					break;
++				}
++				else continue; //keep looking on the next interval
++			}
++		}
++	}
++	if(!found)_error_("did not find time interval on which to interpolate values");
++	*pIssmDoubleArray=output;
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM);
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring);
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/TransientParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 22625)
+@@ -47,6 +47,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time);
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22625)
+@@ -299,6 +299,16 @@
+ 	this->params[index]->GetParameterValue(pscalar,time);
+ }
+ /*}}}*/
++void Parameters::FindParam(IssmDouble** pIssmDoublearray, int* pM, IssmDouble time, int param_enum){ _assert_(this);/*{{{*/
++
++	_assert_(param_enum>ParametersSTARTEnum);
++	_assert_(param_enum<ParametersENDEnum);
++
++	int index = param_enum - ParametersSTARTEnum -1;
++	if(!this->params[index]) _error_("Parameter " << EnumToStringx(param_enum) <<" not set");
++	this->params[index]->GetParameterValue(pIssmDoublearray, pM, time);
++}
++/*}}}*/
+ void Parameters::FindParam(char** pstring,int param_enum){ _assert_(this);/*{{{*/
+ 
+ 	_assert_(param_enum>ParametersSTARTEnum);
+@@ -348,8 +358,10 @@
+ 	_assert_(param_enum<ParametersENDEnum);
+ 
+ 	int index = param_enum - ParametersSTARTEnum -1;
++
+ 	if(!this->params[index]) _error_("Parameter " << EnumToStringx(param_enum) <<" not set");
+ 	this->params[index]->GetParameterValue(pIssmDoublearray,pM);
++
+ }
+ /*}}}*/
+ void Parameters::FindParam(IssmDouble** pIssmDoublearray,int* pM, int* pN,int param_enum){ _assert_(this);/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22625)
+@@ -33,6 +33,7 @@
+ 		virtual void  GetParameterValue(int** pintarray,int* pM,int* pN)=0;
+ 		virtual void  GetParameterValue(IssmDouble* pIssmDouble)=0;
+ 		virtual void  GetParameterValue(IssmDouble* pdouble,IssmDouble time)=0;
++		virtual void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time)=0;
+ 		virtual void  GetParameterValue(char** pstring)=0;
+ 		virtual void  GetParameterValue(char*** pstringarray,int* pM)=0;
+ 		virtual void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM)=0;
+Index: ../trunk-jpl/src/c/classes/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 22625)
+@@ -44,6 +44,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(revision 22625)
+@@ -48,6 +48,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time,int row);
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time);
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Parameter " <<EnumToStringx(enum_type) << " needs row to be specified");}
+ 		void  GetParameterValue(char** pstring){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string array");}
+Index: ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");};
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM);
+Index: ../trunk-jpl/src/c/classes/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22625)
+@@ -44,8 +44,9 @@
+ 		void  GetParameterValue(int** pintarray,int* pM);
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){*pIssmDouble=value;}
++		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+-		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM);
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, int* pN);
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 22625)
+@@ -47,6 +47,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << "cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 22625)
+@@ -70,6 +70,7 @@
+                 void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return an array of integers");}
+                 void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble");}
+                 void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble for a given time");}
++					 void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDoubleArray for a given time");}
+                 void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string");}
+                 void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string array");}
+                 void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 22625)
+@@ -47,6 +47,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22625)
+@@ -39,6 +39,7 @@
+ 		void  FindParam(int* pinteger,int enum_type);
+ 		void  FindParam(IssmDouble* pscalar, int enum_type);
+ 		void  FindParam(IssmDouble* pscalar, int enum_type,IssmDouble time);
++		void	FindParam(IssmDouble** pIssmDoublearray, int* pM, IssmDouble time, int enum_type);
+ 		void  FindParam(char** pstring,int enum_type);
+ 		void  FindParam(char*** pstringarray,int* pM,int enum_type);
+ 		void  FindParam(int** pintarray,int* pM,int enum_type);
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22625)
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(FILE** pfile){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a file pointer");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+Index: ../trunk-jpl/src/c/classes/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 22625)
+@@ -46,6 +46,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a matrix");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array (maybe in serial?)");}
+Index: ../trunk-jpl/src/c/classes/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 22625)
+@@ -38,7 +38,7 @@
+ 		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+ 		int   ObjectEnum();
+ 		/*}}}*/
+-		/*Param vritual function definitions: {{{*/
++		/*Param virtual function definitions: {{{*/
+ 		void  GetParameterValue(bool* pbool){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a bool");}
+ 		void  GetParameterValue(int* pinteger){*pinteger=value;}
+ 		void  GetParameterValue(int** pintarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+@@ -45,6 +45,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 22625)
+@@ -44,6 +44,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 22625)
+@@ -46,6 +46,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22624)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22625)
+@@ -1108,6 +1108,11 @@
+ 	return (x2*y3 - y2*x3 + x1*y2 - y1*x2 + x3*y1 - y3*x1)/2;
+ }
+ /*}}}*/
++IssmDouble Tria::GetHorizontalSurfaceArea(void){/*{{{*/
++
++	return this->GetArea();
++}
++/*}}}*/
+ IssmDouble Tria::GetArea3D(void){/*{{{*/
+ 
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -2775,34 +2780,38 @@
+ 
+ 	if(!this->IsIceInElement() || !this->IsFloating()) return;
+ 
+-	//Load inputs and params
+-	int i, boxid;
+-	int basin_id, boxid_max;
+-	IssmDouble dist_gl;
+-	IssmDouble dist_cf;
+-	IssmDouble rel_dist_gl;
++	int i,boxid,basin_id,boxid_max;
++	IssmDouble dist_gl,dist_cf,rel_dist_gl,lowbound,highbound;
+ 
+ 	inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
+-	boxid_max=pmax_boxid_basin[basin_id]; //0-based
++	boxid_max=pmax_boxid_basin[basin_id]; 
+ 
+-	Input* dist_gl_input=NULL;
+-	Input* dist_cf_input=NULL;
+-	dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
+-	dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
++	Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
++	Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
+ 
++	/*Get dist_gl and dist_cf at center of element*/
+ 	Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0);
+ 	dist_gl_input->GetInputValue(&dist_gl,gauss);
+ 	dist_cf_input->GetInputValue(&dist_cf,gauss);
++	
++	/*Ensure values are positive for floating ice*/
++	if(dist_gl<0){dist_gl=dist_gl*(-1);}
++	if(dist_cf<0){dist_cf=dist_cf*(-1);}
+ 
++	/*Compute relative distance to grounding line*/
+ 	rel_dist_gl=dist_gl/(dist_gl+dist_cf);
+ 
++	/*Assign box numbers based on rel_dist_gl*/
+ 	boxid=-1;
+ 	for(i=0;i<boxid_max;i++){
+-		if(rel_dist_gl>=(1-sqrt((boxid_max-i)/boxid_max)) && rel_dist_gl<=(1-sqrt((boxid_max-i-1)/boxid_max))){
+-			boxid=i; break;
++		lowbound = 1-sqrt((boxid_max-i-0.0)/boxid_max);
++		highbound = 1-sqrt((boxid_max-i-1.0)/boxid_max);
++		if(rel_dist_gl>=lowbound && rel_dist_gl<=highbound){
++			boxid=i;
++			break;
+ 		}
+ 	}
+-	if(boxid==-1){_error_("no boxid found for element" << this->Sid());}
++	if(boxid==-1){_error_("No boxid found for element " << this->Sid() << "!");}
+ 
+ 	this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));	
+ 
+@@ -2812,60 +2821,179 @@
+ /*}}}*/
+ void       Tria::PicoUpdateFirstBox(){/*{{{*/
+ 
+-	IssmDouble rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
+-	IssmDouble alpha, Beta, gamma_T, overturning_coeff, t_farocean, s_farocean;
+-	IssmDouble basinid, boxid, thickness, toc_farocean, soc_farocean, area_box1;
+-	IssmDouble pressure, T_star, g1, s1, p_coeff, q_coeff, Toc, Soc, potential_pressure_melting_point;
+-	IssmDouble basalmeltrate_shelf, overturning, maxbox;
++	if(!this->IsIceInElement() || !this->IsFloating()) return;
+ 
+-	//Get variables
++	int boxid;
++	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
++	if(!boxid==0) return;
++
++	int basinid, maxbox, num_basins, numnodes, M;
++	IssmDouble time, rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
++	IssmDouble alpha, Beta, gamma_T, overturning_coeff;
++	IssmDouble thickness, toc_farocean, soc_farocean, area_box1;
++	IssmDouble pressure, T_star, g1, s1, p_coeff, q_coeff;
++	IssmDouble* boxareas=NULL;
++	IssmDouble* t_farocean=NULL;
++	IssmDouble* s_farocean=NULL;
++
++	/*Get variables*/
+ 	rhoi			= this->GetMaterialParameter(MaterialsRhoIceEnum);
+ 	rhow			= this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+ 	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
+-	rho_star		= 1033.;             //kg/m^3
++	rho_star		= 1033.;             // kg/m^3
+ 	nu				= rhoi/rhow;
+ 	latentheat	= this->GetMaterialParameter(MaterialsLatentheatEnum);
+-	c_p_ocean	= this->GetMaterialParameter(MaterialsThermalExchangeVelocityEnum);
++	c_p_ocean	= this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
+ 	lambda		= latentheat/c_p_ocean;
+-	a				= -0.0572;          //K/psu
++	a				= -0.0572;           // K/psu
+ 	b				= 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
+-	c				= this->GetMaterialParameter(MaterialsBetaEnum);
+-	alpha			= 0.000075;         //1/K
+-	Beta			= 0.00077;          //K
++	c           = 7.77e-4;
++	alpha			= 7.5e-5;            // 1/K
++	Beta			= 7.7e-4;            // K
+ 
++	/* Get parameters and inputs */
++	this->parameters->FindParam(&time,TimeEnum);
++	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
+ 	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+ 	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+-	this->parameters->FindParam(&t_farocean,BasalforcingsPicoFarOceansalinityEnum);
+-	this->parameters->FindParam(&s_farocean,BasalforcingsPicoFarOceansalinityEnum);
++	this->parameters->FindParam(&t_farocean, &num_basins, time, BasalforcingsPicoFarOceantemperatureEnum);
++	this->parameters->FindParam(&s_farocean, &num_basins, time, BasalforcingsPicoFarOceansalinityEnum);
++	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	M = num_basins*maxbox;
++	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
++	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++	
++	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 
+-	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
++	toc_farocean							= t_farocean[basinid];
++	soc_farocean							= s_farocean[basinid];
++	area_box1								= boxareas[basinid*maxbox+boxid];
++	g1											= area_box1*gamma_T;
++	s1											= soc_farocean/(nu*lambda);
++
++   IssmDouble basalmeltrates_shelf[NUMVERTICES];
++	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
++	IssmDouble Tocs[NUMVERTICES];							
++   IssmDouble Socs[NUMVERTICES];
++   IssmDouble overturnings[NUMVERTICES];
++
++	/* Start looping on the number of nodes and calculate ocean vars */
++	Gauss* gauss=this->NewGauss();
++	for (int i=0;i<NUMVERTICES;i++){
++		gauss->GaussVertex(i);
++		thickness_input->GetInputValue(&thickness,gauss);
++		pressure = (rhoi*earth_grav*1e-4)*thickness;
++		T_star = a*soc_farocean+b-c*pressure-toc_farocean;
++		p_coeff = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
++		q_coeff = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
++
++		/* To avoid negatives under the square root */
++		if ((0.25*pow(p_coeff,2)-q_coeff)<0){
++			q_coeff = (0.25*pow(p_coeff,2));
++		}
++
++		Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
++		Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]);
++		potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
++		basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
++		overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i]));
++	}
++
++	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
++	this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
++	this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
++	this->AddInput(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1Enum);
++
++	/*Cleanup and return */
++	delete gauss;
++	xDelete<IssmDouble>(t_farocean);
++	xDelete<IssmDouble>(s_farocean);
++	xDelete<IssmDouble>(boxareas);
++}
++/*}}}*/
++void       Tria::PicoUpdateNextBox(int loopboxid){/*{{{*/	
++
++	if(!this->IsIceInElement() || !this->IsFloating()) return;
++	
++	int boxid;
+ 	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-	this->inputs->GetInputValue(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	this->inputs->GetInputValue(&thickness,ThicknessEnum);
++	if(loopboxid!=boxid) return;
+ 
+-	_error_("to be continued");
+-	/*
++	int basinid, maxbox, num_basins, numnodes,M;
++	IssmDouble rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
++	IssmDouble alpha, Beta, gamma_T, overturning_coeff;
++	IssmDouble thickness, toc_farocean, soc_farocean, area_boxi;
++	IssmDouble mean_toc,mean_soc,mean_overturning;
++	IssmDouble pressure, T_star, g1, g2, p_coeff, q_coeff;
++	IssmDouble* toc_weighted_avg=NULL;
++	IssmDouble* soc_weighted_avg=NULL;
++	IssmDouble* overturning_weighted_avg=NULL;
++	IssmDouble* boxareas=NULL;
+ 
+-	toc_farocean = t_farocean[basinid];
+-	soc_farocean = s_farocean[basinid];
+-	area_box1 = areas[basinid*maxbox+boxid];
+-	pressure = (rhoi*earth_grav)*thickness;
+-	T_star = a*soc_farocean+b-c*pressure-toc_farocean;
+-	g1 = area_box1*gamma_T;
+-	s1 = soc_farocean/(nu*lambda);
+-	p_coeff = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
+-	q_coeff = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
+-	if ((0.25*(p_coeff)^(2) - q_coeff) < 0)
+-	  {q_coeff = (0.25*(p_coeff)^(2))}
+-	Toc = toc_farocean-(-0.5*p_coeff+sqrt(0.25*p_coeff^(2)-q_coeff));
+-	Soc = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Toc);
+-	potential_pressure_melting_point = a*Soc+b-c*pressure;
+-	basalmeltrate_shelf = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point-Toc);
+-	overturning = overturning_coeff*rho_star*(Beta*(soc_farocean-Soc)-alpha*(toc_farocean-Toc));
++	/*Get variables*/
++	rhoi        = this->GetMaterialParameter(MaterialsRhoIceEnum);
++	rhow        = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
++	rho_star    = 1033.;             // kg/m^3
++	nu          = rhoi/rhow;
++	latentheat  = this->GetMaterialParameter(MaterialsLatentheatEnum);
++	c_p_ocean   = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
++	lambda      = latentheat/c_p_ocean;
++	a           = -0.0572;          // K/psu
++	b           = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
++	c           = 7.77e-4;
++	alpha       = 7.5e-5;           // 1/K
++	Beta        = 7.7e-4;           // K
+ 
+-	this->AddInput(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,this->GetElementType());
+-	*/
++	/* Get parameters and inputs */
++	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
++	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
++	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
++	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++	this->parameters->FindParam(&toc_weighted_avg,&num_basins,BasalforcingsPicoAverageTemperatureEnum);
++	this->parameters->FindParam(&soc_weighted_avg,&num_basins,BasalforcingsPicoAverageSalinityEnum);
++	this->parameters->FindParam(&overturning_weighted_avg,&num_basins,BasalforcingsPicoAverageOverturningEnum);
++	M=num_basins*maxbox;
++	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
++	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 
++   Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
++
++	area_boxi								= boxareas[basinid*maxbox+boxid];
++   mean_toc									= toc_weighted_avg[basinid];
++	mean_soc									= soc_weighted_avg[basinid];
++	mean_overturning						= overturning_weighted_avg[basinid];
++	g1											= area_boxi*gamma_T;
++   g2											= g2/(nu*lambda);
++
++	IssmDouble basalmeltrates_shelf[NUMVERTICES];
++	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
++	IssmDouble Tocs[NUMVERTICES];							
++   IssmDouble Socs[NUMVERTICES];
++
++	/* Start looping on the number of nodes and calculate ocean vars */
++	Gauss* gauss=this->NewGauss();
++	for (int i=0;i<NUMVERTICES;i++){
++		gauss->GaussVertex(i);
++		thickness_input->GetInputValue(&thickness,gauss);
++		pressure = (rhoi*earth_grav*1e-4)*thickness;
++		T_star = a*mean_soc+b-c*pressure-mean_toc;
++		Tocs[i] = mean_toc+T_star*(g1/(mean_overturning+g1-g2*a*mean_soc));
++		Socs[i] = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
++		potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
++		basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
++	}
++
++	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
++	this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
++	this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
++
++	/*Cleanup and return */
++	delete gauss;
++	xDelete<IssmDouble>(boxareas);
++	xDelete<IssmDouble>(toc_weighted_avg);
++	xDelete<IssmDouble>(soc_weighted_avg);
++	xDelete<IssmDouble>(overturning_weighted_avg);
+ }
+ /*}}}*/
+ void       Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){/*{{{*/
+@@ -3719,6 +3847,12 @@
+ 	IssmDouble maxvalue = input->Max();
+ 	if(minvalue>fieldvalue || maxvalue<fieldvalue) return;
+ 
++	/* check #2: If only one vertex is on fieldvalue, there is no segment here */
++	IssmDouble lsf[NUMVERTICES];
++	this->GetInputListOnVertices(&lsf[0],fieldenum);
++	int nrice=0;       
++	for(int i=0;i<NUMVERTICES;i++) if(lsf[i]==fieldvalue) nrice++;
++	if(nrice==1) return;
+ 
+ 	/*2. Write segments*/
+ 	IssmDouble* xyz_list_zero = NULL;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22625-22626.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22625-22626.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22625-22626.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 22625)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 22626)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[6e-07,6e-07,2e-05,6e-07,6e-07]
++field_tolerances=[7e-07,6e-07,2e-05,6e-07,6e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 22625)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 22626)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={6e-07,6e-07,2e-05,6e-07,6e-07};
++field_tolerances={7e-07,6e-07,2e-05,6e-07,6e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22626-22627.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22626-22627.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22626-22627.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22626)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22627)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=1:12;
++steps=12;
+ final_time=1;
+ 
+ %Organizer
+@@ -842,11 +842,20 @@
+ % {{{ RunCoupledMITgcmISSM2: 
+ if perform(org,'RunCoupledMITgcmISSM2'),
+ 	
++	loaddata(org,'ParameterizeIce');
++	
++	md.transient.isoceancoupling=0;
+ 	md.miscellaneous.name='test4002';
+ 	md.results=[];
+ 	md.results.TransientSolution=[];
++	md.timestepping.coupling_time=1/12;
+ 	md=solve(md,'Transient','runtimename',false);
+ 
++	md.transient.isoceancoupling=1;
++	md.timestepping.coupling_time=1/12;
++
++	md=solve(md,'Transient','runtimename',false);
++
+ 	eval(['!cp ' md.cluster.executionpath '/' md.miscellaneous.name '/* run/ ']);
+ 	cd run
+ 	%eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' ']);
+@@ -857,6 +866,7 @@
+ 
+ 
+ 
++error
+ %Fields and tolerances to track changes
+ fnm=['run/SHICE_fwFluxtave_0000004380.data'];
+ melting_rate_1=readbin(fnm,[Nx Ny]);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22627-22628.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22627-22628.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22627-22628.diff	(revision 22755)
@@ -0,0 +1,733 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22627)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22628)
+@@ -208,11 +208,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.maxboxcount",BasalforcingsPicoMaxboxcountEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+-				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_temperature");
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+-				iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.farocean_salinity");
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,&transparam[0],&transparam[M*(N-1)],interp,M,N));
++				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+ 			break;
+ 		default:
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(FILE** pfile){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a file pointer");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+Index: ../trunk-jpl/src/c/classes/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 22628)
+@@ -46,7 +46,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a matrix");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array (maybe in serial?)");}
+Index: ../trunk-jpl/src/c/classes/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 22628)
+@@ -44,7 +44,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 22628)
+@@ -46,7 +46,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22628)
+@@ -24,27 +24,26 @@
+ 	_assert_(in_values && in_time);
+ 
+ 	enum_type=in_enum_type;
+-	N=in_N; //Number of time steps
+-	M=in_M; //Number of rows
++	M=in_M; //Number of time steps
++	N=in_N; //Number of rows
+ 	interpolation=interpolation_on;
+ 
+-	values=xNew<IssmDouble>(N*M);
+-	xMemCpy<IssmDouble>(values,in_values,N*M);
++	values=xNew<IssmDouble>(M*N);
++	xMemCpy<IssmDouble>(values,in_values,M*N);
+ 
+-	timesteps=xNew<IssmDouble>(N);
+-	xMemCpy<IssmDouble>(timesteps,in_time,N);
++	timesteps=xNew<IssmDouble>(M);
++	xMemCpy<IssmDouble>(timesteps,in_time,M);
+ }
+ /*}}}*/
+ TransientArrayParam::~TransientArrayParam(){/*{{{*/
+ 	xDelete<IssmDouble>(values);
+ 	xDelete<IssmDouble>(timesteps);
+-}
+-/*}}}*/
++}/*}}}*/
+ 
+ /*Object virtual functions definitions:*/
+ Param* TransientArrayParam::copy() {/*{{{*/
+ 
+-	return new TransientArrayParam(this->enum_type,this->values,this->timesteps,this->interpolation,this->N,this->M);
++	return new TransientArrayParam(this->enum_type,this->values,this->timesteps,this->interpolation,this->M,this->N);
+ 
+ }
+ /*}}}*/
+@@ -67,7 +66,7 @@
+ 
+ 	_printf_("TransientArrayParam:\n");
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   size: " << this->N << " by " << this->M << "\n");
++	_printf_("   size: " << this->M << " by " << this->N << "\n");
+ 
+ }
+ /*}}}*/
+@@ -82,11 +81,11 @@
+ 	MARSHALLING(M);
+ 	MARSHALLING(N);
+ 	if(marshall_direction==MARSHALLING_BACKWARD){
+-		values=xNew<IssmDouble>(N*M);
+-		timesteps=xNew<IssmDouble>(N*M);
++		values    = xNew<IssmDouble>(M*N);
++		timesteps = xNew<IssmDouble>(N);
+ 	}
+-	MARSHALLING_ARRAY(values,IssmDouble,N*M);
+-	MARSHALLING_ARRAY(timesteps,IssmDouble,N*M);
++	MARSHALLING_ARRAY(values,IssmDouble,M*N);
++	MARSHALLING_ARRAY(timesteps,IssmDouble,N);
+ 
+ }/*}}}*/
+ int  TransientArrayParam::ObjectEnum(void){/*{{{*/
+@@ -93,14 +92,13 @@
+ 
+ 	return TransientArrayParamEnum;
+ 
+-}
+-/*}}}*/
++}/*}}}*/
+ 
+ /*TransientArrayParam virtual functions definitions: */
+-void  TransientArrayParam::GetParameterValue(IssmDouble* pdouble,IssmDouble time, int row){/*{{{*/
++void  TransientArrayParam::GetParameterValue(IssmDouble* pdouble,int row,IssmDouble time){/*{{{*/
+ 
+ 	IssmDouble output;
+-	bool   found;
++	bool       found;
+ 
+ 	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+@@ -141,58 +139,3 @@
+ 	*pdouble=output;
+ }
+ /*}}}*/
+-void  TransientArrayParam::GetParameterValue(IssmDouble** pIssmDoubleArray, int* pM, IssmDouble time){/*{{{*/
+-
+-	IssmDouble* output=NULL;
+-	bool   found;
+-	int M=*pM;
+-
+-	output=xNew<IssmDouble>(M);
+-
+-	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
+-	 *fall within. Then interpolate the values on this interval: */
+-	if(time<this->timesteps[0]){
+-		/*get values for the first time: */
+-		for(int k=0; k<M;k++){
+-			output[k]=this->values[k*this->N];
+-			found=true;
+-		}
+-	}
+-	else if(time>this->timesteps[this->N-1]){
+-		/*get values for the last time: */
+-		for(int k=0; k<M;k++){
+-			output[k]=this->values[(k+1)*this->N-1];
+-			found=true;
+-		}
+-	}
+-	else{
+-		/*Find which interval we fall within: */
+-		for(int i=0;i<this->N;i++){
+-			if(time==this->timesteps[i]){
+-				/*We are right on one step time: */
+-				for(int k=0; k<M;k++){
+-					output[k]=this->values[k*this->N+i];
+-				}
+-				found=true;
+-				break; //we are done with the time interpolation.
+-			}
+-			else{
+-				if(this->timesteps[i]<time && time<this->timesteps[i+1]){
+-					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
+-					IssmDouble deltat=this->timesteps[i+1]-this->timesteps[i];
+-					IssmDouble alpha=(time-this->timesteps[i])/deltat;
+-					for(int k=0; k<M;k++){
+-						if(interpolation==true) output[k]=(1.0-alpha)*this->values[k*this->N+i] + alpha*this->values[k*this->N+i+1];
+-						else output[k]=this->values[k*this->N+i];
+-					}
+-					found=true;
+-					break;
+-				}
+-				else continue; //keep looking on the next interval
+-			}
+-		}
+-	}
+-	if(!found)_error_("did not find time interval on which to interpolate values");
+-	*pIssmDoubleArray=output;
+-
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 22628)
+@@ -76,33 +76,25 @@
+ /*}}}*/
+ 
+ /*DoubleVecParam virtual functions definitions: */
+-void  DoubleVecParam::GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){/*{{{*/
+-	IssmDouble* output=NULL;
+-	int M;
++void  DoubleVecParam::GetParameterValue(IssmDouble** poutput,int* pM){/*{{{*/
+ 
+-	M=this->M;
+-	output=xNew<IssmDouble>(M);
++	IssmDouble* output=xNew<IssmDouble>(M);
+ 	xMemCpy<IssmDouble>(output,values,M);
+ 
+ 	/*Assign output pointers:*/
+ 	if(pM) *pM=M;
+-	*pIssmDoublearray=output;
++	*poutput=output;
+ }
+ /*}}}*/
+-void  DoubleVecParam::GetParameterValue(IssmDouble** pIssmDoublearray,int* pM,int* pN){/*{{{*/
+-	IssmDouble* output=NULL;
+-	int M;
+-	int N;
++void  DoubleVecParam::GetParameterValue(IssmDouble** poutput,int* pM,int* pN){/*{{{*/
+ 
+-	N=1;
+-	M=this->M;
+-	output=xNew<IssmDouble>(M);
++	IssmDouble* output=xNew<IssmDouble>(this->M);
+ 	xMemCpy<IssmDouble>(output,values,M);
+ 
+ 	/*Assign output pointers:*/
+-	if(pM) *pM=M;
+-	if(pN) *pN=N;
+-	*pIssmDoublearray=output;
++	if(pM) *pM=this->M;
++	if(pN) *pN=1;
++	*poutput=output;
+ }
+ /*}}}*/
+ void  DoubleVecParam::GetParameterValue(int** pintarray,int* pM){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM);
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring);
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/TransientParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 22628)
+@@ -47,7 +47,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time);
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 22628)
+@@ -299,7 +299,7 @@
+ 	this->params[index]->GetParameterValue(pscalar,time);
+ }
+ /*}}}*/
+-void Parameters::FindParam(IssmDouble** pIssmDoublearray, int* pM, IssmDouble time, int param_enum){ _assert_(this);/*{{{*/
++void Parameters::FindParam(IssmDouble* pscalar,int row,IssmDouble time, int param_enum){ _assert_(this);/*{{{*/
+ 
+ 	_assert_(param_enum>ParametersSTARTEnum);
+ 	_assert_(param_enum<ParametersENDEnum);
+@@ -306,7 +306,7 @@
+ 
+ 	int index = param_enum - ParametersSTARTEnum -1;
+ 	if(!this->params[index]) _error_("Parameter " << EnumToStringx(param_enum) <<" not set");
+-	this->params[index]->GetParameterValue(pIssmDoublearray, pM, time);
++	this->params[index]->GetParameterValue(pscalar,row,time);
+ }
+ /*}}}*/
+ void Parameters::FindParam(char** pstring,int param_enum){ _assert_(this);/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/Param.h	(revision 22628)
+@@ -33,7 +33,7 @@
+ 		virtual void  GetParameterValue(int** pintarray,int* pM,int* pN)=0;
+ 		virtual void  GetParameterValue(IssmDouble* pIssmDouble)=0;
+ 		virtual void  GetParameterValue(IssmDouble* pdouble,IssmDouble time)=0;
+-		virtual void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time)=0;
++		virtual void  GetParameterValue(IssmDouble* pdouble,int row, IssmDouble time){_error_("not implemented yet");};
+ 		virtual void  GetParameterValue(char** pstring)=0;
+ 		virtual void  GetParameterValue(char*** pstringarray,int* pM)=0;
+ 		virtual void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM)=0;
+Index: ../trunk-jpl/src/c/classes/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 22628)
+@@ -44,7 +44,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.h	(revision 22628)
+@@ -47,8 +47,7 @@
+ 		void  GetParameterValue(int** pintarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return an array of integers");}
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+-		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time,int row);
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time);
++		void  GetParameterValue(IssmDouble* pdouble,int row,IssmDouble time);
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Parameter " <<EnumToStringx(enum_type) << " needs row to be specified");}
+ 		void  GetParameterValue(char** pstring){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a string array");}
+Index: ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return an array of integers");};
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM);
+Index: ../trunk-jpl/src/c/classes/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22628)
+@@ -45,7 +45,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){*pIssmDouble=value;}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM);
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 22628)
+@@ -47,7 +47,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << "cannot return an array of integers");}
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 22628)
+@@ -47,7 +47,6 @@
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+ 		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
+ 		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
+-		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDoubleArray for a given time");}
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 22628)
+@@ -70,7 +70,6 @@
+                 void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return an array of integers");}
+                 void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble");}
+                 void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble for a given time");}
+-					 void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, IssmDouble time){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDoubleArray for a given time");}
+                 void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string");}
+                 void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a string array");}
+                 void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a IssmDouble array");}
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.h	(revision 22628)
+@@ -39,7 +39,7 @@
+ 		void  FindParam(int* pinteger,int enum_type);
+ 		void  FindParam(IssmDouble* pscalar, int enum_type);
+ 		void  FindParam(IssmDouble* pscalar, int enum_type,IssmDouble time);
+-		void	FindParam(IssmDouble** pIssmDoublearray, int* pM, IssmDouble time, int enum_type);
++		void  FindParam(IssmDouble* pscalar, int row,IssmDouble time,int enum_type);
+ 		void  FindParam(char** pstring,int enum_type);
+ 		void  FindParam(char*** pstringarray,int* pM,int enum_type);
+ 		void  FindParam(int** pintarray,int* pM,int enum_type);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22627)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22628)
+@@ -2776,36 +2776,37 @@
+ 	return TriaRef::NumberofNodes(this->VelocityInterpolation());
+ }
+ /*}}}*/
+-void       Tria::PicoUpdateBoxid(int* pmax_boxid_basin){/*{{{*/
++void       Tria::PicoUpdateBoxid(int* max_boxid_basin_list){/*{{{*/
+ 
+ 	if(!this->IsIceInElement() || !this->IsFloating()) return;
+ 
+-	int i,boxid,basin_id,boxid_max;
+-	IssmDouble dist_gl,dist_cf,rel_dist_gl,lowbound,highbound;
++	int        basin_id;
++	IssmDouble dist_gl,dist_cf;
+ 
+ 	inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
+-	boxid_max=pmax_boxid_basin[basin_id]; 
++	IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id]);
+ 
+ 	Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
+-	Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);
++	Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum);  _assert_(dist_cf_input);
+ 
+ 	/*Get dist_gl and dist_cf at center of element*/
+ 	Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0);
+ 	dist_gl_input->GetInputValue(&dist_gl,gauss);
+ 	dist_cf_input->GetInputValue(&dist_cf,gauss);
++	delete gauss;
+ 	
+ 	/*Ensure values are positive for floating ice*/
+-	if(dist_gl<0){dist_gl=dist_gl*(-1);}
+-	if(dist_cf<0){dist_cf=dist_cf*(-1);}
++	dist_gl = fabs(dist_gl);
++	dist_cf = fabs(dist_cf);
+ 
+ 	/*Compute relative distance to grounding line*/
+-	rel_dist_gl=dist_gl/(dist_gl+dist_cf);
++	IssmDouble rel_dist_gl=dist_gl/(dist_gl+dist_cf);
+ 
+ 	/*Assign box numbers based on rel_dist_gl*/
+-	boxid=-1;
+-	for(i=0;i<boxid_max;i++){
+-		lowbound = 1-sqrt((boxid_max-i-0.0)/boxid_max);
+-		highbound = 1-sqrt((boxid_max-i-1.0)/boxid_max);
++	int boxid = -1;
++	for(IssmDouble i=0.;i<boxid_max;i++){
++		IssmDouble lowbound  = 1. -sqrt((boxid_max-i   )/boxid_max);
++		IssmDouble highbound = 1. -sqrt((boxid_max-i-1.)/boxid_max);
+ 		if(rel_dist_gl>=lowbound && rel_dist_gl<=highbound){
+ 			boxid=i;
+ 			break;
+@@ -2814,11 +2815,7 @@
+ 	if(boxid==-1){_error_("No boxid found for element " << this->Sid() << "!");}
+ 
+ 	this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));	
+-
+-	/*Cleanup & return: */
+-	delete gauss;
+-}
+-/*}}}*/
++}/*}}}*/
+ void       Tria::PicoUpdateFirstBox(){/*{{{*/
+ 
+ 	if(!this->IsIceInElement() || !this->IsFloating()) return;
+@@ -2828,28 +2825,24 @@
+ 	if(!boxid==0) return;
+ 
+ 	int basinid, maxbox, num_basins, numnodes, M;
+-	IssmDouble time, rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
+-	IssmDouble alpha, Beta, gamma_T, overturning_coeff;
+-	IssmDouble thickness, toc_farocean, soc_farocean, area_box1;
+-	IssmDouble pressure, T_star, g1, s1, p_coeff, q_coeff;
+-	IssmDouble* boxareas=NULL;
+-	IssmDouble* t_farocean=NULL;
+-	IssmDouble* s_farocean=NULL;
++	IssmDouble time, gamma_T, overturning_coeff,thickness;
++	IssmDouble pressure, T_star,p_coeff, q_coeff,toc_farocean,soc_farocean;
++	IssmDouble* boxareas   = NULL;
+ 
+ 	/*Get variables*/
+-	rhoi			= this->GetMaterialParameter(MaterialsRhoIceEnum);
+-	rhow			= this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+-	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
+-	rho_star		= 1033.;             // kg/m^3
+-	nu				= rhoi/rhow;
+-	latentheat	= this->GetMaterialParameter(MaterialsLatentheatEnum);
+-	c_p_ocean	= this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
+-	lambda		= latentheat/c_p_ocean;
+-	a				= -0.0572;           // K/psu
+-	b				= 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
+-	c           = 7.77e-4;
+-	alpha			= 7.5e-5;            // 1/K
+-	Beta			= 7.7e-4;            // K
++	IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
++	IssmDouble rhow       = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	IssmDouble earth_grav = this->GetMaterialParameter(ConstantsGEnum);
++	IssmDouble rho_star   = 1033.;             // kg/m^3
++	IssmDouble nu         = rhoi/rhow;
++	IssmDouble latentheat = this->GetMaterialParameter(MaterialsLatentheatEnum);
++	IssmDouble c_p_ocean  = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
++	IssmDouble lambda     = latentheat/c_p_ocean;
++	IssmDouble a          = -0.0572;           // K/psu
++	IssmDouble b          = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
++	IssmDouble c          = 7.77e-4;
++	IssmDouble alpha      = 7.5e-5;            // 1/K
++	IssmDouble Beta       = 7.7e-4;            // K
+ 
+ 	/* Get parameters and inputs */
+ 	this->parameters->FindParam(&time,TimeEnum);
+@@ -2856,21 +2849,17 @@
+ 	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
+ 	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+ 	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+-	this->parameters->FindParam(&t_farocean, &num_basins, time, BasalforcingsPicoFarOceantemperatureEnum);
+-	this->parameters->FindParam(&s_farocean, &num_basins, time, BasalforcingsPicoFarOceansalinityEnum);
++	this->parameters->FindParam(&toc_farocean, basinid, time, BasalforcingsPicoFarOceantemperatureEnum);
++	this->parameters->FindParam(&soc_farocean, basinid, time, BasalforcingsPicoFarOceansalinityEnum);
+ 	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	M = num_basins*maxbox;
+ 	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+ 	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-	
+ 	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
++	IssmDouble area_box1    = boxareas[basinid*maxbox+boxid];
++	IssmDouble g1           = area_box1*gamma_T;
++	IssmDouble s1           = soc_farocean/(nu*lambda);
+ 
+-	toc_farocean							= t_farocean[basinid];
+-	soc_farocean							= s_farocean[basinid];
+-	area_box1								= boxareas[basinid*maxbox+boxid];
+-	g1											= area_box1*gamma_T;
+-	s1											= soc_farocean/(nu*lambda);
+-
++	/*Define new inputs*/
+    IssmDouble basalmeltrates_shelf[NUMVERTICES];
+ 	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
+ 	IssmDouble Tocs[NUMVERTICES];							
+@@ -2879,17 +2868,17 @@
+ 
+ 	/* Start looping on the number of nodes and calculate ocean vars */
+ 	Gauss* gauss=this->NewGauss();
+-	for (int i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<NUMVERTICES;i++){
+ 		gauss->GaussVertex(i);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		pressure = (rhoi*earth_grav*1e-4)*thickness;
+-		T_star = a*soc_farocean+b-c*pressure-toc_farocean;
+-		p_coeff = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
+-		q_coeff = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
++		T_star   = a*soc_farocean+b-c*pressure-toc_farocean;
++		p_coeff  = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
++		q_coeff  = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
+ 
+ 		/* To avoid negatives under the square root */
+-		if ((0.25*pow(p_coeff,2)-q_coeff)<0){
+-			q_coeff = (0.25*pow(p_coeff,2));
++		if((0.25*pow(p_coeff,2)-q_coeff)<0){
++			q_coeff = 0.25*p_coeff*p_coeff;
+ 		}
+ 
+ 		Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
+@@ -2906,8 +2895,6 @@
+ 
+ 	/*Cleanup and return */
+ 	delete gauss;
+-	xDelete<IssmDouble>(t_farocean);
+-	xDelete<IssmDouble>(s_farocean);
+ 	xDelete<IssmDouble>(boxareas);
+ }
+ /*}}}*/
+@@ -2919,31 +2906,29 @@
+ 	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+ 	if(loopboxid!=boxid) return;
+ 
+-	int basinid, maxbox, num_basins, numnodes,M;
+-	IssmDouble rhoi, rhow, earth_grav, rho_star, nu, latentheat, c_p_ocean, lambda, a, b, c;
+-	IssmDouble alpha, Beta, gamma_T, overturning_coeff;
+-	IssmDouble thickness, toc_farocean, soc_farocean, area_boxi;
+-	IssmDouble mean_toc,mean_soc,mean_overturning;
+-	IssmDouble pressure, T_star, g1, g2, p_coeff, q_coeff;
+-	IssmDouble* toc_weighted_avg=NULL;
+-	IssmDouble* soc_weighted_avg=NULL;
+-	IssmDouble* overturning_weighted_avg=NULL;
+-	IssmDouble* boxareas=NULL;
++	int        basinid, maxbox, num_basins, numnodes,M;
++	IssmDouble gamma_T, overturning_coeff;
++	IssmDouble thickness, toc_farocean, soc_farocean;
++	IssmDouble pressure, T_star,p_coeff, q_coeff;
++	IssmDouble* toc_weighted_avg         = NULL;
++	IssmDouble* soc_weighted_avg         = NULL;
++	IssmDouble* overturning_weighted_avg = NULL;
++	IssmDouble* boxareas                 = NULL;
+ 
+ 	/*Get variables*/
+-	rhoi        = this->GetMaterialParameter(MaterialsRhoIceEnum);
+-	rhow        = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+-	earth_grav  = this->GetMaterialParameter(ConstantsGEnum);
+-	rho_star    = 1033.;             // kg/m^3
+-	nu          = rhoi/rhow;
+-	latentheat  = this->GetMaterialParameter(MaterialsLatentheatEnum);
+-	c_p_ocean   = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
+-	lambda      = latentheat/c_p_ocean;
+-	a           = -0.0572;          // K/psu
+-	b           = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
+-	c           = 7.77e-4;
+-	alpha       = 7.5e-5;           // 1/K
+-	Beta        = 7.7e-4;           // K
++	IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
++	IssmDouble rhow       = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
++	IssmDouble earth_grav = this->GetMaterialParameter(ConstantsGEnum);
++	IssmDouble rho_star   = 1033.;             // kg/m^3
++	IssmDouble nu         = rhoi/rhow;
++	IssmDouble latentheat = this->GetMaterialParameter(MaterialsLatentheatEnum);
++	IssmDouble c_p_ocean  = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
++	IssmDouble lambda     = latentheat/c_p_ocean;
++	IssmDouble a          = -0.0572;          // K/psu
++	IssmDouble b          = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
++	IssmDouble c          = 7.77e-4;
++	IssmDouble alpha      = 7.5e-5;           // 1/K
++	IssmDouble Beta       = 7.7e-4;           // K
+ 
+ 	/* Get parameters and inputs */
+ 	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
+@@ -2953,18 +2938,17 @@
+ 	this->parameters->FindParam(&toc_weighted_avg,&num_basins,BasalforcingsPicoAverageTemperatureEnum);
+ 	this->parameters->FindParam(&soc_weighted_avg,&num_basins,BasalforcingsPicoAverageSalinityEnum);
+ 	this->parameters->FindParam(&overturning_weighted_avg,&num_basins,BasalforcingsPicoAverageOverturningEnum);
+-	M=num_basins*maxbox;
+ 	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+ 	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-
+    Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 
+-	area_boxi								= boxareas[basinid*maxbox+boxid];
+-   mean_toc									= toc_weighted_avg[basinid];
+-	mean_soc									= soc_weighted_avg[basinid];
+-	mean_overturning						= overturning_weighted_avg[basinid];
+-	g1											= area_boxi*gamma_T;
+-   g2											= g2/(nu*lambda);
++	_assert_(basinid<=num_basins); 
++	IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
++	IssmDouble mean_toc         = toc_weighted_avg[basinid];
++	IssmDouble mean_soc         = soc_weighted_avg[basinid];
++	IssmDouble mean_overturning = overturning_weighted_avg[basinid];
++	IssmDouble g1               = area_boxi*gamma_T;
++	IssmDouble g2               = g2/(nu*lambda);
+ 
+ 	IssmDouble basalmeltrates_shelf[NUMVERTICES];
+ 	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
+@@ -2973,13 +2957,13 @@
+ 
+ 	/* Start looping on the number of nodes and calculate ocean vars */
+ 	Gauss* gauss=this->NewGauss();
+-	for (int i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<NUMVERTICES;i++){
+ 		gauss->GaussVertex(i);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+-		pressure = (rhoi*earth_grav*1e-4)*thickness;
+-		T_star = a*mean_soc+b-c*pressure-mean_toc;
+-		Tocs[i] = mean_toc+T_star*(g1/(mean_overturning+g1-g2*a*mean_soc));
+-		Socs[i] = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
++		pressure = (rhoi*earth_grav*1.e-4)*thickness;
++		T_star   = a*mean_soc+b-c*pressure-mean_toc;
++		Tocs[i]  = mean_toc+T_star*(g1/(mean_overturning+g1-g2*a*mean_soc));
++		Socs[i]  = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
+ 		potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
+ 		basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22628-22629.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22628-22629.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22628-22629.diff	(revision 22755)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22628)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22629)
+@@ -46,7 +46,7 @@
+ #include "EESUPPORT.h"
+       COMMON /CPL_MPI_ID/
+      &     mpiMyWid, toissmcomm
+-      INTEGER mpiMyWid, toissmcomm
++      INTEGER mpiMyWid, toissmcomm, mpiRC
+       integer mpistatus(MPI_STATUS_SIZE)
+       real*8 CouplingTime, IceModelTime
+       integer i, j, bi, bj, buffsize
+@@ -58,10 +58,10 @@
+ C     Send deltatimestep
+          _BEGIN_MASTER( myThid )
+          call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,toissmcomm,
+-     &        mpistatus)
++     &        mpistatus,mpiRC)
+          print*, 'Ocean received CouplingTime: ', CouplingTime
+          call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,toissmcomm,
+-     &        mpistatus)
++     &        mpistatus,mpiRC)
+          print*, 'Ocean received IceModelTime: ', IceModelTime
+          call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,toissmcomm,
+      &        mpistatus)
+@@ -81,7 +81,7 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-         CALL GATHER_2D_R8( xfer_array, local, myThid )
++CDM         CALL GATHER_2D_R8( xfer_array, local, myThid )
+          _BEGIN_MASTER( myThid )
+          buffsize = Nx*Ny
+          CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+@@ -98,7 +98,7 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-         CALL GATHER_2D_R8( xfer_array, local, myThid )
++CDM         CALL GATHER_2D_R8( xfer_array, local, myThid )
+          _BEGIN_MASTER( myThid )
+          buffsize = Nx*Ny
+          CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+@@ -106,7 +106,9 @@
+          _END_MASTER( myThid )
+ 
+       ENDIF
+-       
++
++      print*,'Done Sending XC/YC arrays.'
++
+ #endif /* ALLOW_CPL_MPMICE */
+ 
+       RETURN
Index: /issm/oecreview/Archive/21724-22754/ISSM-22629-22630.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22629-22630.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22629-22630.diff	(revision 22755)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22629)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22630)
+@@ -343,6 +343,7 @@
+ 	TransientNumRequestedOutputsEnum,
+ 	TransientRequestedOutputsEnum,
+ 	VelocityEnum,
++	WorldCommEnum,
+ 	/*}}}*/
+ 	ParametersENDEnum,
+ 	InputsSTARTEnum,
+@@ -1091,7 +1092,6 @@
+ 	VerticesEnum,
+ 	ViscousHeatingEnum,
+ 	WaterEnum,
+-	WorldCommEnum,
+ 	XTaylorHoodEnum,
+ 	XYEnum,
+ 	XYZEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22629)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22630)
+@@ -351,6 +351,7 @@
+ 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+ 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
+ 		case VelocityEnum : return "Velocity";
++		case WorldCommEnum : return "WorldComm";
+ 		case ParametersENDEnum : return "ParametersEND";
+ 		case InputsSTARTEnum : return "InputsSTART";
+ 		case AdjointEnum : return "Adjoint";
+@@ -1095,7 +1096,6 @@
+ 		case VerticesEnum : return "Vertices";
+ 		case ViscousHeatingEnum : return "ViscousHeating";
+ 		case WaterEnum : return "Water";
+-		case WorldCommEnum : return "WorldComm";
+ 		case XTaylorHoodEnum : return "XTaylorHood";
+ 		case XYEnum : return "XY";
+ 		case XYZEnum : return "XYZ";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22629)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22630)
+@@ -357,6 +357,7 @@
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
+ 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
++	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
+ 	      else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
+ 	      else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum;
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+-	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
++	      if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
++	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+ 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+ 	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
+-	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
++	      if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
++	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+ 	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+@@ -627,11 +628,11 @@
+ 	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+-	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
++	      if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
++	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+ 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+@@ -750,11 +751,11 @@
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+-	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+          else stage=7;
+    }
+    if(stage==7){
+-	      if (strcmp(name,"Gset")==0) return GsetEnum;
++	      if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
++	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+@@ -873,11 +874,11 @@
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+          else stage=8;
+    }
+    if(stage==8){
+-	      if (strcmp(name,"MinVz")==0) return MinVzEnum;
++	      if (strcmp(name,"MinVy")==0) return MinVyEnum;
++	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+@@ -996,11 +997,11 @@
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+-	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+          else stage=9;
+    }
+    if(stage==9){
+-	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
++	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+@@ -1119,7 +1120,6 @@
+ 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+-	      else if (strcmp(name,"WorldComm")==0) return WorldCommEnum;
+          else stage=10;
+    }
+    if(stage==10){
Index: /issm/oecreview/Archive/21724-22754/ISSM-22630-22631.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22630-22631.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22630-22631.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22630)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22631)
+@@ -2808,7 +2808,7 @@
+ 		IssmDouble lowbound  = 1. -sqrt((boxid_max-i   )/boxid_max);
+ 		IssmDouble highbound = 1. -sqrt((boxid_max-i-1.)/boxid_max);
+ 		if(rel_dist_gl>=lowbound && rel_dist_gl<=highbound){
+-			boxid=i;
++			boxid=reCast<int>(i);
+ 			break;
+ 		}
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22631-22632.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22631-22632.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22631-22632.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22631)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22632)
+@@ -45,9 +45,9 @@
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
+ 	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
+ 	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
+-	   3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
+-	   1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
++field_tolerances={6e-9,1e-7,1e-7,1e-8,5e-8,5e-08,1e-13,1e-13,...
++	   6e-9,1e-7,1e-7,7e-11,1e-8,5e-8,1e-7,1e-13,...
++	   6e-9,1e-7,1e-7,7e-11,1e-8,5e-8,1e-7,1e-13};
+ field_values={...
+ 	   (md.results.TransientSolution(1).Base),...
+ 	   (md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22632-22633.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22632-22633.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22632-22633.diff	(revision 22755)
@@ -0,0 +1,89 @@
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22632)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22633)
+@@ -123,7 +123,6 @@
+ 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
+-
+ 	/*Reset the time to zero for next optimization*/
+ 	if(solution_type==TransientSolutionEnum){
+ 		IssmDouble restart_time;
+@@ -275,8 +274,9 @@
+ 	_assert_((*Jlisti)<JlistM);
+ 	_assert_(JlistN==num_responses+1);
+ 
+-	/*Compute objective function*/
++	/*Compute objective function and broadcast it to other cpus*/
+ 	*pf = reCast<double>(J);
++	ISSM_MPI_Bcast(pf,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
+ 	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
+ 
+ 	/*Record cost function values and delete Jtemp*/
+@@ -409,19 +409,15 @@
+ 	mystruct.i        = xNewZeroInit<int>(1);
+ 	/*Initialize Gradient and cost function of M1QN3*/
+ 	indic = 4; /*gradient required*/
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	simul_ad(&indic,&n,X,&f,G,izs,rzs,(void*)&mystruct);
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	/*Estimation of the expected decrease in f during the first iteration*/
+ 	double df1=f;
+ 
+-printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	/*Call M1QN3 solver*/
+ 	m1qn3_(simul_ptr,prosca,&ctonbe_,&ctcabe_,
+ 				&n,X,&f,G,&dxmin,&df1,
+ 				&gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
+ 				&reverse,&indic,izs,rzs,(void*)&mystruct);
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	switch(int(omode)){
+ 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
+ 		case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
+@@ -433,15 +429,13 @@
+ 		case 7:  _printf0_("   <g,d> > 0  or  <y,s> <0\n"); break;
+ 		default: _printf0_("   Unknown end condition\n");
+ 	}
++
+ 	/*Constrain solution vector*/
+ 	double  *XL = NULL;
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	double  *XU = NULL;
+ 	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 
+-	printf("-------------- file: controladm1qn3_core.cpp line: %i\n",__LINE__); 
+ 	for(int i=0;i<numberofvertices;i++){
+ 		for(int c=0;c<num_controls;c++){
+ 			int index = num_controls*i+c;
+@@ -464,9 +458,18 @@
+ 	xDelete(aG);
+ 
+ 	/*Add last cost function to results*/
++
++	if (solution_type == TransientSolutionEnum){
++		int step = 1;
++		femmodel->parameters->SetParam(step,StepEnum);
++		femmodel->OutputControlsx(&femmodel->results);
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,1,0));
++	}
++	else{
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
++
+ 	femmodel->OutputControlsx(&femmodel->results);
+-	femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+-
++	}
+ 	/*Finalize*/
+ 	if(VerboseControl()) _printf0_("   preparing final solution\n");
+ 	femmodel->parameters->SetParam(true,SaveResultsEnum);
+@@ -474,7 +477,6 @@
+ 	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
+-
+ 	/*Clean-up and return*/
+ 	xDelete<double>(G);
+ 	xDelete<double>(X);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22633-22634.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22633-22634.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22633-22634.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 22633)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 22634)
+@@ -60,15 +60,15 @@
+ #define ExceptionTrapEnd(); }\
+ 	catch(ErrorException &exception){\
+ 		exception.Report();\
+-		return 0;\
++		return 1;\
+ 	}\
+ 	catch(exception& e) {\
+ 		_printf_("Standard exception: " << e.what() << "\n\n");\
+-		return 0;\
++		return 1;\
+ 	}\
+ 	catch(...){\
+ 		_printf_("An unexpected error occurred \n\n");\
+-		return 0;\
++		return 1;\
+ 	}
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22634-22635.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22634-22635.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22634-22635.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22634)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22635)
+@@ -46,8 +46,8 @@
+ 	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
+ 	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
+ field_tolerances={6e-9,1e-7,1e-7,1e-8,5e-8,5e-08,1e-13,1e-13,...
+-	   6e-9,1e-7,1e-7,7e-11,1e-8,5e-8,1e-7,1e-13,...
+-	   6e-9,1e-7,1e-7,7e-11,1e-8,5e-8,1e-7,1e-13};
++	   6e-9,1e-7,1e-7,1e-8,5e-7,5e-8,1e-7,1e-13,...
++	   6e-9,1e-7,1e-7,1e-8,5e-7,5e-8,1e-7,1e-13};
+ field_values={...
+ 	   (md.results.TransientSolution(1).Base),...
+ 	   (md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22635-22636.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22635-22636.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22635-22636.diff	(revision 22755)
@@ -0,0 +1,147 @@
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22635)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22636)
+@@ -65,12 +65,11 @@
+       INTEGER mpiMyWid
+ #endif
+ #ifdef ALLOW_CPL_ISSM
+-      COMMON /CPL_MPI_ID/
+-     &     mpiMyWid, toissmcomm
+-      INTEGER mpiMyWid, toissmcomm
+-      integer my_local_rank,my_local_size, numprocsworld
+-      integer dummy1(1),dummy2(1)
+-      integer status(MPI_STATUS_SIZE)
++      COMMON /CPL_MPI_ID/ mpiMyWid, toissmcomm
++      INTEGER             mpiMyWid, toissmcomm
++      INTEGER my_local_rank,my_local_size, numprocsworld
++      INTEGER dummy1(1),dummy2(1)
++      INTEGER status(MPI_STATUS_SIZE)
+ #endif /* ALLOW_CPL_ISSM */
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+       INTEGER mpiMyWid, color
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22635)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22636)
+@@ -44,34 +44,36 @@
+ 
+ #ifdef ALLOW_CPL_ISSM
+ #include "EESUPPORT.h"
+-      COMMON /CPL_MPI_ID/
+-     &     mpiMyWid, toissmcomm
++      COMMON /CPL_MPI_ID/ mpiMyWid, toissmcomm
+       INTEGER mpiMyWid, toissmcomm, mpiRC
+-      integer mpistatus(MPI_STATUS_SIZE)
+-      real*8 CouplingTime, IceModelTime
+-      integer i, j, bi, bj, buffsize
+-      Real*8  xfer_array(Nx,Ny)
+-      _RL     local(1:sNx,1:sNy,nSx,nSy)
++      INTEGER mpistatus(MPI_STATUS_SIZE)
++      INTEGER i, j, bi, bj, buffsize
++      _R8 CouplingTime, IceModelTime
++      _R8 xfer_array(Nx,Ny)
++      _R8 local(1:sNx,1:sNy,nSx,nSy)
+ 
+       IF( myTime .EQ. startTime ) THEN
+ 
+-C     Send deltatimestep
+-         _BEGIN_MASTER( myThid )
+-         call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,toissmcomm,
+-     &        mpistatus,mpiRC)
+-         print*, 'Ocean received CouplingTime: ', CouplingTime
+-         call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,toissmcomm,
+-     &        mpistatus,mpiRC)
+-         print*, 'Ocean received IceModelTime: ', IceModelTime
+-         call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,toissmcomm,
+-     &        mpistatus)
+-         call MPI_Send(Nx,1,MPI_INT,0,10001003,toissmcomm,
+-     &        mpistatus)
+-         call MPI_Send(Ny,1,MPI_INT,0,10001004,toissmcomm,
+-     &        mpistatus)
+-         _END_MASTER( myThid )
++C     Send/receive scalar values
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )         
++            call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,
++     &           toissmcomm,mpistatus,mpiRC)
++            print*, 'Ocean received CouplingTime: ', CouplingTime
++            call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,
++     &           toissmcomm,mpistatus,mpiRC)
++            print*, 'Ocean received IceModelTime: ', IceModelTime
++            call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,
++     &           toissmcomm,mpistatus)
++            call MPI_Send(Nx,1,MPI_INT,0,10001003,
++     &           toissmcomm,mpistatus)
++            call MPI_Send(Ny,1,MPI_INT,0,10001004,
++     &           toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         endif
+ 
+ C     Send longitude East of center of cell
++         print*,'this is xC',xC
+          DO bj=1,nSy
+             DO bi=1,nSx
+                DO j=1,sNy
+@@ -81,14 +83,22 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-CDM         CALL GATHER_2D_R8( xfer_array, local, myThid )
+-         _BEGIN_MASTER( myThid )
+-         buffsize = Nx*Ny
+-         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+-     &        0,10001005,toissmcomm,mpistatus)
+-         _END_MASTER( myThid )
+-         
++         print*,'this is local xC',local
++         CALL BAR2( myThid ) 
++         CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
++     &        .FALSE., .FALSE., myThid )
++         print*,'this is global XC',xfer_array
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )
++            buffsize = Nx*Ny
++            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &           0,10001005,toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         ENDIF
++         CALL BAR2( myThid )
++
+ C     Send latitude North of center of cell
++         print*,'this is yC',yC
+          DO bj=1,nSy
+             DO bi=1,nSx
+                DO j=1,sNy
+@@ -98,17 +108,23 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-CDM         CALL GATHER_2D_R8( xfer_array, local, myThid )
+-         _BEGIN_MASTER( myThid )
+-         buffsize = Nx*Ny
+-         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+-     &        0,10001006,toissmcomm,mpistatus)
+-         _END_MASTER( myThid )
++         print*,'this is local yC',local
++         CALL BAR2( myThid ) 
++         CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
++     &                      .FALSE., .FALSE., myThid )
++         print*,'this is global YC',xfer_array
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )
++            buffsize = Nx*Ny
++            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &           0,10001006,toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         ENDIF
++         CALL BAR2( myThid )
++         print*,'Done Sending XC/YC arrays.'
+ 
+       ENDIF
+ 
+-      print*,'Done Sending XC/YC arrays.'
+-
+ #endif /* ALLOW_CPL_MPMICE */
+ 
+       RETURN
Index: /issm/oecreview/Archive/21724-22754/ISSM-22636-22637.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22636-22637.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22636-22637.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22636)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22637)
+@@ -606,6 +606,7 @@
+ 		xDelete<IssmDouble>(old_thickness);
+ 		xDelete<IssmDouble>(ice_thickness);
+ 		xDelete<IssmDouble>(bed);
++		xDelete<IssmDouble>(B);
+ 	}
+ }/*}}}*/
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22637-22638.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22637-22638.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22637-22638.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22637)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22638)
+@@ -104,13 +104,19 @@
+ 			_printf_("nx size : "<< oceannxsize<<"\n");
+ 			_printf_("ny size : "<< oceannysize<<"\n");
+ 			oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+ 			_printf_("gridx received \n");
+ 			oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(&oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
+ 			_printf_("gridy received \n");
+-			//icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			//ISSM_MPI_Send(&icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++			icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
++			for(int i=0;i<oceannxsize;i++){
++				for(int j=0;j<oceannysize;j++){
++					icebase[i*oceannysize+j]=2*oceangridx[i*oceannysize+j];
++				}
++			}
++			ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++			_printf_("base sent\n");
+ 			//oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			//ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+ 			//xDelete<IssmDouble>(icebase);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22638-22639.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22638-22639.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22638-22639.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22638)
++++ ../trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22639)
+@@ -213,6 +213,7 @@
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(xyz_list);
++	xDelete<IssmDouble>(basis);
+ 	xDelete<IssmDouble>(dbasis);
+ 	delete gauss;
+ 	return Ke;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22639-22640.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22639-22640.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22639-22640.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22639)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22640)
+@@ -123,6 +123,14 @@
+          CALL BAR2( myThid )
+          print*,'Done Sending XC/YC arrays.'
+ 
++C     Receive icebase
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )         
++            call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &           0,10001008,toissmcomm,mpistatus,mpiRC)
++            print*, 'Ocean received icebase',xfer_array
++            _END_MASTER( myThid )
++         ENDIF
+       ENDIF
+ 
+ #endif /* ALLOW_CPL_MPMICE */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22640-22641.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22640-22641.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22640-22641.diff	(revision 22755)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/m/classes/clusters/camhpc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/camhpc.m	(revision 22640)
++++ ../trunk-jpl/src/m/classes/clusters/camhpc.m	(revision 22641)
+@@ -57,7 +57,7 @@
+ 		 %}}}
+ 		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+-			 available_queues={'ARNOLD-SL3'};
++			 available_queues={'ARNOLD-SL3-CPU'}; % Updated for csd3 NSA 28/3/18
+ 			 queue_requirements_time=[Inf Inf];
+ 			 queue_requirements_np=[80 80];
+ 
+@@ -76,6 +76,7 @@
+ 			 if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
+ 
+ 			 %write queuing script 
++             disp(modelname)
+ 			 fid=fopen([modelname '.queue'],'w');
+ 			 fprintf(fid,'#!/bin/bash\n');
+ 			 fprintf(fid,'#SBATCH --job-name=%s\n',modelname);
+@@ -83,7 +84,7 @@
+ 			 fprintf(fid,'#SBATCH -A %s \n',cluster.project);
+ 			 fprintf(fid,'#SBATCH --mail-type=ALL\n');
+ 			 fprintf(fid,'#SBATCH -N %i -n %i\n',cluster.numnodes,cluster.cpuspernode);
+-			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60); %walltime is in seconds.
++			 fprintf(fid,'#SBATCH --time=%i\n',cluster.time*60) %walltime is in seconds.
+ 			 fprintf(fid,'#SBATCH --mem-per-cpu=%igb\n',cluster.memory);
+ 			 fprintf(fid,'#SBATCH -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#SBATCH -e %s.errlog \n\n',modelname);
+@@ -129,11 +130,13 @@
+ 		 function LaunchQueueJob(cluster,modelname,dirname,filelist,restart,batch)% {{{
+ 
+ 			 disp('launching solution sequence on remote cluster');
++             %
++             % qsub replaced by sbatch for csd3 system NSA 28/3/18
+ 			 if ~isempty(restart)
+ 				 launchcommand=['cd ' cluster.executionpath ' && cd ' dirname ' && hostname && qsub ' modelname '.queue '];
+ 			 else
+ 				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+-					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && qsub ' modelname '.queue '];
++					 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && hostname && sbatch ' modelname '.queue '];
+ 			 end
+ 			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+ 		 end %}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22641-22642.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22641-22642.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22641-22642.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22641)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22642)
+@@ -2822,7 +2822,7 @@
+ 
+ 	int boxid;
+ 	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-	if(!boxid==0) return;
++	if(boxid!=0) return;
+ 
+ 	int basinid, maxbox, num_basins, numnodes, M;
+ 	IssmDouble time, gamma_T, overturning_coeff,thickness;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22642-22643.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22642-22643.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22642-22643.diff	(revision 22755)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22642)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22643)
+@@ -177,11 +177,35 @@
+ 		case LinearFloatingMeltRateEnum:
+ 			iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
+ 			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.deepwater_melting_rate"); 
+-			parameters->AddObject(new TransientParam(BasalforcingsDeepwaterMeltingRateEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
++			if(N==1){
++				_assert_(M==1);
++				parameters->AddObject(new DoubleParam(BasalforcingsDeepwaterMeltingRateEnum,transparam[0]));
++			}
++			else{
++				_assert_(N==2);
++				parameters->AddObject(new TransientParam(BasalforcingsDeepwaterMeltingRateEnum,&transparam[0],&transparam[M],interp,M));
++			}
++			xDelete<IssmDouble>(transparam);
+ 			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.deepwater_elevation"); 
+-			parameters->AddObject(new TransientParam(BasalforcingsDeepwaterElevationEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
++			if(N==1){
++				_assert_(M==1);
++				parameters->AddObject(new DoubleParam(BasalforcingsDeepwaterElevationEnum,transparam[0]));
++			}
++			else{
++				_assert_(N==2);
++				parameters->AddObject(new TransientParam(BasalforcingsDeepwaterElevationEnum,&transparam[0],&transparam[M],interp,M)); 
++			}
++			xDelete<IssmDouble>(transparam);
+ 			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.upperwater_elevation"); 
+-			parameters->AddObject(new TransientParam(BasalforcingsUpperwaterElevationEnum,&transparam[0],&transparam[M],interp,M)); _assert_(N==2 || N==1);
++			if(N==1){
++				_assert_(M==1);
++				parameters->AddObject(new DoubleParam(BasalforcingsUpperwaterElevationEnum,transparam[0]));
++			}
++			else{
++				_assert_(N==2);
++				parameters->AddObject(new TransientParam(BasalforcingsUpperwaterElevationEnum,&transparam[0],&transparam[M],interp,M));
++			}
++			xDelete<IssmDouble>(transparam);
+ 			break;
+ 		case MismipFloatingMeltRateEnum:
+ 			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum));
+@@ -209,9 +233,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
++				_assert_(M==2 && N>1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
++				_assert_(M==2 && N>1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22642)
++++ ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 22643)
+@@ -43,8 +43,8 @@
+ 		void  GetParameterValue(int* pinteger);
+ 		void  GetParameterValue(int** pintarray,int* pM);
+ 		void  GetParameterValue(int** pintarray,int* pM,int* pN);
+-		void  GetParameterValue(IssmDouble* pIssmDouble){*pIssmDouble=value;}
+-		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(IssmDouble* pIssmDouble){*pIssmDouble=value;};
++		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){*pdouble=value;};
+ 		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
+ 		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
+ 		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22643-22644.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22643-22644.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22643-22644.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 22643)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 22644)
+@@ -133,10 +133,10 @@
+ 	disp(sprintf('%s%i%s','----------------starting:',id,'-----------------------'));
+ 	try,
+ 		%Execute test
+-		eval(['cd ' root ]);
++		cd(root);
+ 		id_string='N/A';
+ 		id_string=IdToName(id);
+-		eval(['test' num2str(id)]);
++		run(['test' num2str(id)]);
+ 
+ 		%UPDATE ARCHIVE?
+ 		archive_name=['Archive' num2str(id) ];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22644-22645.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22644-22645.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22644-22645.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/os/issmdir.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmdir.m	(revision 22644)
++++ ../trunk-jpl/src/m/os/issmdir.m	(revision 22645)
+@@ -6,17 +6,17 @@
+ 
+ %Initialize output ISSM_DIR
+ ISSM_DIR='';
+-slash=filesep();
+ 
+ %Get ISSM_DIR from function path (we do not want to force users to edit their bashrc)
+-path=which('issmdir');
++path = mfilename('fullpath');
+ 
+ %issmdir might be in bin,
+-pos=strfind(path,['bin' slash 'issmdir.m']);
++slash = filesep();
++pos   = strfind(path,['bin' slash 'issmdir']);
+ if ~isempty(pos),
+ 	ISSM_DIR=path(1:pos-1);
+ else
+-	pos=strfind(path,['src' slash 'm' slash 'os' slash 'issmdir.m']);
++	pos=strfind(path,['src' slash 'm' slash 'os' slash 'issmdir']);
+ 	if ~isempty(pos),
+ 		ISSM_DIR=path(1:pos-1);
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22645-22646.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22645-22646.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22645-22646.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22645)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22646)
+@@ -233,11 +233,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
+-				_assert_(M==2 && N>1); 
++				_assert_(M>1 && N>1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
+-				_assert_(M==2 && N>1); 
++				_assert_(M>1 && N>1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,M,N));
+ 				xDelete<IssmDouble>(transparam);
+ 			break;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22646-22647.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22646-22647.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22646-22647.diff	(revision 22755)
@@ -0,0 +1,183 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22647)
+@@ -24,8 +24,8 @@
+ #define NUMVERTICES1D 2
+ 
+ /*Constructors/destructor/copy*/
+-Tria::Tria(int tria_id, int tria_sid, int index, IoModel* iomodel,int nummodels)/*{{{*/
+-	:ElementHook(nummodels,index+1,NUMVERTICES,iomodel){
++Tria::Tria(int tria_id, int tria_sid, IoModel* iomodel,int nummodels)/*{{{*/
++	:ElementHook(nummodels,tria_id,NUMVERTICES,iomodel){
+ 
+ 		/*id: */
+ 		this->id  = tria_id;
+@@ -3603,6 +3603,7 @@
+ 
+ 	/*Checks if debuging*/
+ 	_assert_(iomodel->elements);
++	_assert_(index==this->sid); 
+ 
+ 	/*Recover element type*/
+ 	this->element_type_list[analysis_counter]=finiteelement_type;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22647)
+@@ -33,7 +33,7 @@
+ 
+ 		/*Tria constructors, destructors {{{*/
+ 		Tria(){};
+-		Tria(int tria_id,int tria_sid,int i, IoModel* iomodel,int nummodels);
++		Tria(int tria_id,int tria_sid,IoModel* iomodel,int nummodels);
+ 		~Tria();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22647)
+@@ -23,8 +23,8 @@
+ 	this->parameters=NULL;
+ }
+ /*}}}*/
+-Penta::Penta(int penta_id, int penta_sid, int index, IoModel* iomodel,int nummodels)/*{{{*/
+-	:ElementHook(nummodels,index+1,NUMVERTICES,iomodel){
++Penta::Penta(int penta_id, int penta_sid,IoModel* iomodel,int nummodels)/*{{{*/
++	:ElementHook(nummodels,penta_id,NUMVERTICES,iomodel){
+ 
+ 	int penta_elements_ids[2];
+ 
+@@ -37,10 +37,10 @@
+ 	this->sid = penta_sid;
+ 
+ 	/*Build neighbors list*/
+-	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.upperelements")[index]) || iomodel->Data("md.mesh.upperelements")[index]==-1.) penta_elements_ids[1]=this->id; //upper penta is the same penta
+-	else                                    penta_elements_ids[1]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.upperelements")[index]));
+-	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.lowerelements")[index]) || iomodel->Data("md.mesh.lowerelements")[index]==-1.) penta_elements_ids[0]=this->id; //lower penta is the same penta
+-	else                                    penta_elements_ids[0]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.lowerelements")[index]));
++	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.upperelements")[penta_sid]) || iomodel->Data("md.mesh.upperelements")[penta_sid]==-1.) penta_elements_ids[1]=this->id; //upper penta is the same penta
++	else                                    penta_elements_ids[1]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.upperelements")[penta_sid]));
++	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.lowerelements")[penta_sid]) || iomodel->Data("md.mesh.lowerelements")[penta_sid]==-1.) penta_elements_ids[0]=this->id; //lower penta is the same penta
++	else                                    penta_elements_ids[0]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.lowerelements")[penta_sid]));
+ 	this->InitHookNeighbors(penta_elements_ids);
+ 
+ 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+@@ -2800,6 +2800,7 @@
+ 
+ 	/*Checks if debuging*/
+ 	_assert_(iomodel->elements);
++	_assert_(index==this->sid); 
+ 
+ 	/*Recover element type*/
+ 	this->element_type_list[analysis_counter]=finiteelement_type;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22647)
+@@ -35,7 +35,7 @@
+ 
+ 		/*Penta constructors and destructor: {{{*/
+ 		Penta(){};
+-		Penta(int penta_id,int penta_sid,int i, IoModel* iomodel,int nummodels);
++		Penta(int penta_id,int penta_sid,IoModel* iomodel,int nummodels);
+ 		~Penta();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions: {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 22647)
+@@ -18,8 +18,8 @@
+ /*Element macros*/
+ #define NUMVERTICES 2
+ /*Constructors/destructor/copy*/
+-Seg::Seg(int seg_id, int seg_sid, int index, IoModel* iomodel,int nummodels)/*{{{*/
+-		:ElementHook(nummodels,index+1,NUMVERTICES,iomodel){
++Seg::Seg(int seg_id, int seg_sid,IoModel* iomodel,int nummodels)/*{{{*/
++		:ElementHook(nummodels,seg_id,NUMVERTICES,iomodel){
+ 
+ 			/*id: */
+ 			this->id  = seg_id;
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 22647)
+@@ -19,12 +19,12 @@
+ #define NUMVERTICES 4
+ 
+ /*Constructors/destructor/copy*/
+-Tetra::Tetra(int seg_id, int seg_sid, int index, IoModel* iomodel,int nummodels)/*{{{*/
+-		:ElementHook(nummodels,index+1,NUMVERTICES,iomodel){
++Tetra::Tetra(int tet_id, int tet_sid,IoModel* iomodel,int nummodels)/*{{{*/
++		:ElementHook(nummodels,tet_id,NUMVERTICES,iomodel){
+ 
+ 			/*id: */
+-			this->id  = seg_id;
+-			this->sid = seg_sid;
++			this->id  = tet_id;
++			this->sid = tet_sid;
+ 
+ 			//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 			this->parameters = NULL;
+@@ -903,6 +903,7 @@
+ 
+ 	/*Checks if debuging*/
+ 	_assert_(iomodel->elements);
++	_assert_(index==this->sid); 
+ 
+ 	/*Recover element type*/
+ 	this->element_type_list[analysis_counter]=finiteelement_type;
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22647)
+@@ -31,7 +31,7 @@
+ 
+ 		/*Seg constructors, destructors {{{*/
+ 		Seg(){};
+-		Seg(int seg_id,int seg_sid,int i, IoModel* iomodel,int nummodels);
++		Seg(int seg_id,int seg_sid,IoModel* iomodel,int nummodels);
+ 		~Seg();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22646)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22647)
+@@ -31,7 +31,7 @@
+ 
+ 		/*Tetra constructors, destructors {{{*/
+ 		Tetra(){};
+-		Tetra(int seg_id,int seg_sid,int i, IoModel* iomodel,int nummodels);
++		Tetra(int tet_id,int tet_sid,IoModel* iomodel,int nummodels);
+ 		~Tetra();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22646)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 22647)
+@@ -36,18 +36,18 @@
+ 	switch(iomodel->meshelementtype){
+ 		case TriaEnum:
+ 			for(i=0;i<iomodel->numberofelements;i++){
+-				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
++				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,iomodel,nummodels));
+ 			}
+ 			break;
+ 		case TetraEnum:
+ 			for(i=0;i<iomodel->numberofelements;i++){
+-				if(iomodel->my_elements[i]) elements->AddObject(new Tetra(i+1,i,i,iomodel,nummodels));
++				if(iomodel->my_elements[i]) elements->AddObject(new Tetra(i+1,i,iomodel,nummodels));
+ 			}
+ 			break;
+ 		case PentaEnum:
+ 			iomodel->FetchData(2,"md.mesh.upperelements","md.mesh.lowerelements");
+ 			for(i=0;i<iomodel->numberofelements;i++){
+-				if(iomodel->my_elements[i]) elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
++				if(iomodel->my_elements[i]) elements->AddObject(new Penta(i+1,i,iomodel,nummodels));
+ 			}
+ 			break;
+ 		default:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22647-22648.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22647-22648.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22647-22648.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22647)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22648)
+@@ -63,3 +63,15 @@
+ 6. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
+ 
+ ...
++
++
++TODO/WISH LIST
++* finish initialization 
++   - MITgcm runs 1 time step with ocean ice base, not from ISSM
++	- MITgcm sends initial melt rate
++* test4002 working cleanly
++	- ocean running on its own (Dimitris)
++	- fix ice runs so that it does not need to crash first (Helene)
++* ISSM works on interpolation
++* 1 + 1 = 2 (so pickup working)
++* change MITgcm to include new base and changes in ocean
Index: /issm/oecreview/Archive/21724-22754/ISSM-22648-22649.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22648-22649.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22648-22649.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22648)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22649)
+@@ -117,12 +117,13 @@
+ 			}
+ 			ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+ 			_printf_("base sent\n");
+-			//oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			//ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+-			//xDelete<IssmDouble>(icebase);
+-			//xDelete<IssmDouble>(oceangridx);
+-			//xDelete<IssmDouble>(oceangridy);
+-			//xDelete<IssmDouble>(oceanmelt);
++			oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
++			ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++			_printf_("ocean melt received\n");
++			xDelete<IssmDouble>(icebase);
++			xDelete<IssmDouble>(oceangridx);
++			xDelete<IssmDouble>(oceangridy);
++			xDelete<IssmDouble>(oceanmelt);
+ 		}
+ 	}
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22652-22653.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22652-22653.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22652-22653.diff	(revision 22755)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22652)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22653)
+@@ -131,6 +131,33 @@
+             print*, 'Ocean received icebase',xfer_array
+             _END_MASTER( myThid )
+          ENDIF
++
++C     Send melt rate
++         print*,'this is yC',yC
++         DO bj=1,nSy
++            DO bi=1,nSx
++               DO j=1,sNy
++                  DO i=1,sNx
++                     local(i,j,bi,bj) = shelficeHeatFlux(i,j,bi,bj)
++                  ENDDO
++               ENDDO
++            ENDDO
++         ENDDO
++         print*,'this is local shelficeHeatFlux',local
++         CALL BAR2( myThid ) 
++         CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
++     &                      .FALSE., .FALSE., myThid )
++         print*,'this is global shelficeHeatFlux',xfer_array
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )
++            buffsize = Nx*Ny
++            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &           0,10001007,toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         ENDIF
++         CALL BAR2( myThid )
++         print*,'Done Sending shelficeHeatFlux array.'
++
+       ENDIF
+ 
+ #endif /* ALLOW_CPL_MPMICE */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22653-22654.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22653-22654.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22653-22654.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22653)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22654)
+@@ -118,7 +118,7 @@
+ 			ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+ 			_printf_("base sent\n");
+ 			oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+ 			_printf_("ocean melt received\n");
+ 			xDelete<IssmDouble>(icebase);
+ 			xDelete<IssmDouble>(oceangridx);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22654-22655.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22654-22655.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22654-22655.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22654)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22655)
+@@ -68,7 +68,6 @@
+ TODO/WISH LIST
+ * finish initialization 
+    - MITgcm runs 1 time step with ocean ice base, not from ISSM
+-	- MITgcm sends initial melt rate
+ * test4002 working cleanly
+ 	- ocean running on its own (Dimitris)
+ 	- fix ice runs so that it does not need to crash first (Helene)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22655-22656.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22655-22656.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22655-22656.diff	(revision 22755)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22655)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22656)
+@@ -76,7 +76,7 @@
+ 	#endif
+ 
+ 	if(isoceancoupling){
+-		_printf_("startin ocean coupling \n");
++		if(VerboseSolution()) _printf0_("   ocean coupling: initialization \n");
+ 		int my_rank;
+ 		int oceannxsize,oceannysize;
+ 		IssmDouble *oceangridx;
+@@ -93,22 +93,15 @@
+ 		if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
+ 		tomitgcmcomm=parcom->GetParameterValue();
+ 		if(my_rank==0){
+-			_printf_("starting ocean coupling rank 0 \n");
+-			_printf_("coupling time: "<< coupling_time <<"\n");
+ 			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+ 			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+ 			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+-			_printf_("ocean time: "<< oceantime<<"\n");
+-			_printf_("nx size : "<< oceannxsize<<"\n");
+-			_printf_("ny size : "<< oceannysize<<"\n");
+ 			oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			ISSM_MPI_Recv(oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+-			_printf_("gridx received \n");
+ 			oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			ISSM_MPI_Recv(oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
+-			_printf_("gridy received \n");
+ 			icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			for(int i=0;i<oceannxsize;i++){
+ 				for(int j=0;j<oceannysize;j++){
+@@ -116,10 +109,8 @@
+ 				}
+ 			}
+ 			ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+-			_printf_("base sent\n");
+ 			oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+ 			ISSM_MPI_Recv(oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+-			_printf_("ocean melt received\n");
+ 			xDelete<IssmDouble>(icebase);
+ 			xDelete<IssmDouble>(oceangridx);
+ 			xDelete<IssmDouble>(oceangridy);
+Index: ../trunk-jpl/src/c/main/issm_ocean.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22655)
++++ ../trunk-jpl/src/c/main/issm_ocean.cpp	(revision 22656)
+@@ -30,28 +30,13 @@
+ 	/*ice comm size: */
+ 	icecommsize=(int) strtol(argv[2], (char **)NULL, 10);
+ 
+-	printf("Ice: My global rank: %i My world size: %i \n",my_rank,my_size);
+-
+ 	/*Split world into sub-communicators for each and every model:*/
+ 	ISSM_MPI_Comm_split(worldcomm,0, my_rank, &modelcomm);
+ 	ISSM_MPI_Comm_rank(modelcomm,&my_local_rank);
+ 	ISSM_MPI_Comm_size(modelcomm,&my_local_size);
+ 
+-	printf("Ice: My global rank: %i My local rank: %i My world size: %i My local size: %i\n",my_rank,my_local_rank,my_size,my_local_size);
+-
+ 	ISSM_MPI_Intercomm_create( modelcomm, 0, worldcomm, my_local_size, 0, &tomitgcmcomm); 
+ 
+-//	/*send an integer:*/
+-//	int dummy1,dummy2;
+-//	dummy1=3; dummy2=0;
+-//	if(my_local_rank==0){
+-//		MPI_Send(&dummy1,1,MPI_INT,0,1,tomitgcmcomm);
+-//		MPI_Recv(&dummy2,1,MPI_INT,0,1,tomitgcmcomm,&status);
+-//	}
+-//	MPI_Bcast(&dummy2,1,MPI_INT,0,modelcomm);
+-//	printf("Ice: dummy received: %i\n",dummy2);
+-
+-	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,modelcomm);
+ 	
+ 	/*Now that the models are initialized, keep communicator information in the parameters datasets of each model: */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22656-22657.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22656-22657.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22656-22657.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 22656)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 22657)
+@@ -25,8 +25,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2','IceMass2','IceVolumeAboveFloatationScaled2','GroundedArea2','GroundedAreaScaled2','FloatingArea2','FloatingAreaScaled2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,...
+-	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,5e-12,5e-11,5e-11};
++	1e-11,1e-10,2e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,...
++	1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,7e-12,7e-11,7e-11};
+ field_values={...
+ 	(md.results.TransientSolution(1).Base),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 22656)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 22657)
+@@ -13,7 +13,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Vx_damp','Vy_damp','Vz_damp','Vel_damp','Pressure_damp'};
+-field_tolerances={1e-08,1e-08,2e-06,1e-08,1e-08,1e-08,1e-08,2e-07,1e-08,1e-08};
++field_tolerances={1e-08,1e-08,4e-06,1e-08,1e-08,1e-08,1e-08,2e-07,1e-08,1e-08};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22657-22658.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22657-22658.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22657-22658.diff	(revision 22755)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 22657)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 22658)
+@@ -34,8 +34,8 @@
+         'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3','IceMass3','IceVolumeAboveFloatationScaled3','GroundedArea3','GroundedAreaScaled3','FloatingArea3','FloatingAreaScaled3']
+ 
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,
+-        1e-11,1e-10,1e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,
+-        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,5e-12,5e-11,5e-11]
++        1e-11,1e-10,2e-11,3e-11,2e-12,6e-12,2e-12,6e-12,2e-12,2e-12,6e-12,6e-12,
++        1e-10,1e-10,1e-10,5e-11,2e-12,5e-12,2e-12,5e-12,5e-11,7e-12,7e-11,7e-11]
+ 
+ field_values=[md.results.TransientSolution[0].Base,
+         md.results.TransientSolution[0].Surface,
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 22657)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 22658)
+@@ -26,7 +26,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,1e-08,2e-06,1e-08,1e-08]
++field_tolerances=[1e-08,1e-08,4e-06,1e-08,1e-08]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/21724-22754/ISSM-22658-22659.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22658-22659.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22658-22659.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/solve/solveiceocean.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solveiceocean.m	(revision 22658)
++++ ../trunk-jpl/src/m/solve/solveiceocean.m	(revision 22659)
+@@ -88,11 +88,11 @@
+ 
+ %Upload all required files
+ modelname = md.miscellaneous.name;
+-filelist  = {[modelname '.bin '] [modelname '.toolkits ']};
++filelist  = {[modelname '.bin'] [modelname '.toolkits']};
+ if ispc,
+-	filelist{end+1}=[modelname '.bat '];
++	filelist{end+1}=[modelname '.bat'];
+ else
+-	filelist{end+1}=[modelname '.queue '];
++	filelist{end+1}=[modelname '.queue'];
+ end
+ 
+ if md.qmu.isdakota,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22659-22660.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22659-22660.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22659-22660.diff	(revision 22755)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(nonexistent)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22660)
+@@ -0,0 +1,174 @@
++/**
++ * INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points
++ *
++ * This function interpolates a field defined on a grid to a list of points based on a bilinear interpolation.
++ *
++ * Usage:
++ *	var data_mesh=InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue);\
++ * 
++ *	xIn,yIn						: coordinates of matrix data. (x and y must be in increasing order)
++ *	dataIn						: matrix holding the data to be interpolated onto the mesh
++ *	xMeshIn,yMeshIn				: coordinates of the points onto which we interpolate
++ *	defaultValue (optional)		: default value if no data is found (holes)
++ * 	dataMesh					: array of mesh interpolated data
++ */
++function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue) {
++	/*
++		Variables
++	*/
++	//{{{
++	var data 			= {};
++	var dataMesh 		= {};
++	var dataMeshPtr 	= {};
++	var ddata			= {};
++	var ddataHeap 		= {};
++	var ddataPtr 		= {};
++	var defaultValue 	= 0; // Default value for defaultValue :)
++	var dx				= {};
++	var dxHeap 			= {};
++	var dxMesh 			= {};
++	var dxMeshHeap 		= {};
++	var dxMeshPtr 		= {};
++	var dxPtr 			= {};
++	var dy				= {};
++	var dyHeap 			= {};
++	var dyMesh			= {};
++	var dyMeshHeap 		= {};
++	var dyMeshPtr 		= {};
++	var dyPtr 			= {};
++	var ndata			= {};
++	var nods 			= 0;
++	var nx 				= {};
++	var nxMesh 			= {};
++	var ny 				= {};
++	var nyMesh 			= {};
++	var pdataMesh 		= {};
++	var x 				= {};
++	var xMesh 			= {};
++	var y				= {};
++	var yMesh 			= {};
++	//}}}
++	
++	
++	/*
++		Retrieve default value
++	*/
++	//{{{
++	if (arguments.length === 6) {
++		var defaultValue = arguments[5];
++	}
++	//}}}
++	
++	
++	/*
++		Dynamic allocations
++	*/
++	//{{{
++	
++	/*
++		Input
++	*/
++	//{{{
++	dx 			= new Float64Array(xIn);
++	nx 			= dx.length * dx.BYTES_PER_ELEMENT;
++	dxPtr 		= Module._malloc(nx);
++	dxHeap 		= new Uint8Array(Module.HEAPU8.buffer, dxPtr, nx);
++	dxHeap.set(new Uint8Array(dx.buffer));
++	x 			= dxHeap.byteOffset;
++	
++	dy 			= new Float64Array(yIn);
++	ny 			= dy.length * dy.BYTES_PER_ELEMENT;
++	dyPtr 		= Module._malloc(ny);
++	dyHeap 		= new Uint8Array(Module.HEAPU8.buffer, dyPtr, ny);
++	dyHeap.set(new Uint8Array(dy.buffer));
++	y 			= dyHeap.byteOffset;
++	
++	ddata 		= new Float64Array(dataIn);
++	ndata 		= ddata.length * ddata.BYTES_PER_ELEMENT;
++	ddataPtr 	= Module._malloc(ndata);
++	ddataHeap 	= new Uint8Array(Module.HEAPU8.buffer, ddataPtr, ndata);
++	ddataHeap.set(new Uint8Array(ddata.buffer));
++	data 		= ddataHeap.byteOffset;
++	
++	dxMesh 		= new Float64Array(xMeshIn);
++	nxMesh 		= dxMesh.length * dxMesh.BYTES_PER_ELEMENT;
++	dxMeshPtr 	= Module._malloc(nxMesh);
++	dxMeshHeap 	= new Uint8Array(Module.HEAPU8.buffer, dxMeshPtr, nxMesh);
++	dxMeshHeap.set(new Uint8Array(dxMesh.buffer));
++	xMesh 		= dxMeshHeap.byteOffset;
++	
++	dyMesh 		= new Float64Array(yMeshIn);
++	nyMesh 		= dyMesh.length * dyMesh.BYTES_PER_ELEMENT;
++	dyMeshPtr 	= Module._malloc(nyMesh);
++	dyMeshHeap 	= new Uint8Array(Module.HEAPU8.buffer, dyMeshPtr, nyMesh);
++	dyMeshHeap.set(new Uint8Array(dyMesh.buffer));
++	yMesh 		= dyMeshHeap.byteOffset;
++	
++	nods 		= xIn.length;
++	
++	
++	/*
++		Output
++	*/
++	dataMeshPtr = Module._malloc(4);
++	//}}}
++	
++	//}}}
++	
++	
++	/*
++		Declare InterpFromGridToMesh module
++	*/
++	//{{{
++	InterpFromGridToMeshModule = Module.cwrap(
++		'InterpFromGridToMeshModule', 
++		'number', 
++		[
++			'number', 
++			'number', 
++			'number', 
++			'number', 
++			'number', 
++			'number', 
++			'number'
++		]
++	);
++	//}}}
++	
++	
++	/*
++		Call InterpFromGridToMesh module
++	*/
++	//{{{
++	InterpFromGrid2MeshModule(
++		dataMeshPtr, 
++		x, 
++		y, 
++		data, 
++		xMesh, 
++		yMesh, 
++		nods, 
++		defaultValue
++	);
++	//}}}
++	
++	
++	/*
++		Dynamic copying from heap
++	*/
++	//{{{
++	dataMeshPtr	= Module.getValue(pdataMesh, 'i32');
++	dataMesh	= Module.HEAP64.slice(dataMeshPtr / 8, dataMeshPtr / 8 + nods);
++	//}}}
++	
++	
++	/*
++		Free resources
++	*/
++	//{{{
++	Module._free(pdataMesh);
++	//}}}
++	
++	
++	return dataMesh;
++}
+\ No newline at end of file
Index: /issm/oecreview/Archive/21724-22754/ISSM-22660-22661.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22660-22661.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22660-22661.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/wrappers/javascript/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22660)
++++ ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22661)
+@@ -10,7 +10,9 @@
+ 			 ${ISSM_DIR}/src/wrappers/NodeConnectivity/NodeConnectivity.js\
+ 			 ${ISSM_DIR}/src/wrappers/ContourToMesh/ContourToMesh.js\
+ 			 ${ISSM_DIR}/src/wrappers/ElementConnectivity/ElementConnectivity.js\
++			 ${ISSM_DIR}/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\
+ 			 ${ISSM_DIR}/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.js\
++			 
+ 			 ${ISSM_DIR}/src/wrappers/IssmConfig/IssmConfig.js\
+ 			 ${ISSM_DIR}/src/wrappers/Issm/issm.js
+ 
+@@ -84,6 +86,7 @@
+ 					 ../NodeConnectivity/NodeConnectivity.cpp\
+ 					 ../ContourToMesh/ContourToMesh.cpp\
+ 					 ../ElementConnectivity/ElementConnectivity.cpp\
++					 ../InterpFromGridToMesh/InterpFromGridToMesh.cpp\
+ 					 ../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp\
+ 					 ../IssmConfig/IssmConfig.cpp\
+ 					 ../Issm/issm.cpp
Index: /issm/oecreview/Archive/21724-22754/ISSM-22661-22662.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22661-22662.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22661-22662.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/wrappers/javascript/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22661)
++++ ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22662)
+@@ -12,7 +12,6 @@
+ 			 ${ISSM_DIR}/src/wrappers/ElementConnectivity/ElementConnectivity.js\
+ 			 ${ISSM_DIR}/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\
+ 			 ${ISSM_DIR}/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.js\
+-			 
+ 			 ${ISSM_DIR}/src/wrappers/IssmConfig/IssmConfig.js\
+ 			 ${ISSM_DIR}/src/wrappers/Issm/issm.js
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22662-22663.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22662-22663.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22662-22663.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22662)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22663)
+@@ -12,7 +12,7 @@
+  *	defaultValue (optional)		: default value if no data is found (holes)
+  * 	dataMesh					: array of mesh interpolated data
+  */
+-function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue) {
++function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValueIn) {
+ 	/*
+ 		Variables
+ 	*/
Index: /issm/oecreview/Archive/21724-22754/ISSM-22663-22664.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22663-22664.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22663-22664.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/localpfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 22663)
++++ ../trunk-jpl/src/m/classes/clusters/localpfe.m	(revision 22664)
+@@ -156,7 +156,7 @@
+ 
+ 			fid=fopen([modelname '.queue'],'w');
+ 			fprintf(fid,'#!%s\n',cluster.shell);
+-			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s: -np %i ./mitgcmuv\n',cluster.np,cluster.codepath,executable,solution,cluster.executionpath,modelname,cluster.npocean);
++			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s : -np %i ./mitgcmuv\n',cluster.np,cluster.codepath,executable,solution,cluster.executionpath,modelname,cluster.npocean);
+ 			fclose(fid);
+ 
+ 			%in interactive mode, create a run file, and errlog and outlog file
Index: /issm/oecreview/Archive/21724-22754/ISSM-22664-22665.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22664-22665.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22664-22665.diff	(revision 22755)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/solve/solveiceocean.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solveiceocean.m	(revision 22664)
++++ ../trunk-jpl/src/m/solve/solveiceocean.m	(revision 22665)
+@@ -41,7 +41,7 @@
+ md.private.solution=solutionstring;
+ cluster=md.cluster;
+ if strcmpi(getfieldvalue(options,'batch','no'),'yes') batch=1; else batch=0; end
+-if ~isclass(cluster,'localpfe'),
++if ~isa(cluster,'localpfe') & ~isa(cluster,'generic'),
+ 	error('cannot run ice/ocean simulation on any other cluster than localpfe');
+ end
+ 
+@@ -130,7 +130,7 @@
+ 	if md.verbose.solution,
+ 		disp('loading results from cluster');
+ 	end
+-	md=loadresultsfromcluster(md);
++	md=loadresultsfromcluster(md,'');
+ elseif md.settings.waitonlock==0,
+ 	 disp('Model results must be loaded manually with md=loadresultsfromcluster(md);');
+ end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22665-22666.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22665-22666.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22665-22666.diff	(revision 22755)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 22665)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 22666)
+@@ -10,6 +10,7 @@
+ 		name          = '';
+ 		login         = '';
+ 		np            = 1;
++		npocean       = 1;
+ 		port          = 0;
+ 		interactive   = 1;
+ 		codepath      = [IssmConfig('ISSM_PREFIX') '/bin'];
+@@ -51,6 +52,7 @@
+ 			disp(sprintf('    name: %s',cluster.name));
+ 			disp(sprintf('    login: %s',cluster.login));
+ 			disp(sprintf('    np: %i',cluster.np));
++			disp(sprintf('    npocean: %i',cluster.npocean));
+ 			disp(sprintf('    port: %i',cluster.port));
+ 			disp(sprintf('    codepath: %s',cluster.codepath));
+ 			disp(sprintf('    executionpath: %s',cluster.executionpath));
+@@ -208,6 +210,24 @@
+ 			end
+ 		end
+ 		%}}}
++		function BuildQueueScriptIceOcean(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof,isdakota) % {{{
++
++			%write queuing script 
++			%what is the executable being called? 
++			executable='issm_ocean.exe';
++
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#!%s\n',cluster.shell);
++			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s : -np %i ./mitgcmuv\n',cluster.np,cluster.codepath,executable,solution,cluster.executionpath,modelname,cluster.npocean);
++			fclose(fid);
++
++			%in interactive mode, create a run file, and errlog and outlog file
++			if cluster.interactive,
++				fid=fopen([modelname '.errlog'],'w'); fclose(fid);
++				fid=fopen([modelname '.outlog'],'w'); fclose(fid);
++			end
++		end
++		%}}}
+ 		function BuildKrigingQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
+ 
+ 			%write queuing script 
+@@ -305,6 +325,35 @@
+ 			end
+ 
+ 		end %}}}
++		function LaunchQueueJobIceOcean(cluster,modelname,dirname,filelist,restart,batch)% {{{
++
++			if ~ispc,
++
++				%figure out what shell extension we will use:
++				if isempty(strfind(cluster.shell,'csh')),
++					shellext='sh';
++				else
++					shellext='csh';
++				end
++
++				if cluster.verbose, disp('launching solution sequence on remote cluster'); end
++
++				if ~isempty(restart)
++					launchcommand=['source ' cluster.etcpath '/environment.' shellext ' && cd ' cluster.executionpath ' && cd ' dirname ' && source ' modelname '.queue '];
++				else
++					if ~batch,
++					launchcommand=['source ' cluster.etcpath '/environment.' shellext ' && cd ' cluster.executionpath ' && tar -zxf ' dirname '.tar.gz  && source  ' modelname '.queue '];
++					else
++					launchcommand=['source ' cluster.etcpath '/environment.' shellext ' && cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++						' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz '];
++					end
++				end
++				issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
++			else
++				system([modelname '.bat']);
++			end
++
++		end %}}}
+ 		function Download(cluster,dirname,filelist)% {{{
+ 
+ 			if ispc(),
Index: /issm/oecreview/Archive/21724-22754/ISSM-22666-22667.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22666-22667.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22666-22667.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22666)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22667)
+@@ -38,10 +38,15 @@
+ 						InterpFromGridToMesh_python.la\
+ 						InterpFromMeshToGrid_python.la\
+ 						IssmConfig_python.la\
++						MeshPartition_python.la\
+ 						MeshProfileIntersection_python.la\
+ 						NodeConnectivity_python.la\
+ 						Triangle_python.la\
+ 						ProcessRifts_python.la
++
++if CHACO
++lib_LTLIBRARIES += Chaco_python.la
++endif
+ endif 
+ #}}}
+ #Flags and libraries {{{
+@@ -100,6 +105,12 @@
+ BamgTriangulate_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ BamgTriangulate_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+ 
++if CHACO
++Chaco_python_la_SOURCES = ../Chaco/Chaco.cpp
++Chaco_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++Chaco_python_la_LIBADD = ${deps} $(MPILIB)  $(CHACOLIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
++endif
++
+ ContourToMesh_python_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp
+ ContourToMesh_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ ContourToMesh_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+@@ -132,6 +143,10 @@
+ IssmConfig_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ IssmConfig_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
++MeshPartition_python_la_SOURCES = ../MeshPartition/MeshPartition.cpp
++MeshPartition_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++MeshPartition_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
++
+ MeshProfileIntersection_python_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp
+ MeshProfileIntersection_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ MeshProfileIntersection_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22667-22668.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22667-22668.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22667-22668.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22667)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22668)
+@@ -38,15 +38,10 @@
+ 						InterpFromGridToMesh_python.la\
+ 						InterpFromMeshToGrid_python.la\
+ 						IssmConfig_python.la\
+-						MeshPartition_python.la\
+ 						MeshProfileIntersection_python.la\
+ 						NodeConnectivity_python.la\
+ 						Triangle_python.la\
+ 						ProcessRifts_python.la
+-
+-if CHACO
+-lib_LTLIBRARIES += Chaco_python.la
+-endif
+ endif 
+ #}}}
+ #Flags and libraries {{{
+@@ -105,12 +100,6 @@
+ BamgTriangulate_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ BamgTriangulate_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+ 
+-if CHACO
+-Chaco_python_la_SOURCES = ../Chaco/Chaco.cpp
+-Chaco_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+-Chaco_python_la_LIBADD = ${deps} $(MPILIB)  $(CHACOLIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+-endif
+-
+ ContourToMesh_python_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp
+ ContourToMesh_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ ContourToMesh_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+@@ -143,10 +132,6 @@
+ IssmConfig_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ IssmConfig_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
+-MeshPartition_python_la_SOURCES = ../MeshPartition/MeshPartition.cpp
+-MeshPartition_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+-MeshPartition_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+-
+ MeshProfileIntersection_python_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp
+ MeshProfileIntersection_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ MeshProfileIntersection_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
Index: /issm/oecreview/Archive/21724-22754/ISSM-22668-22669.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22668-22669.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22668-22669.diff	(revision 22755)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/test/MITgcm/build.sh
+===================================================================
+--- ../trunk-jpl/test/MITgcm/build.sh	(revision 22668)
++++ ../trunk-jpl/test/MITgcm/build.sh	(revision 22669)
+@@ -12,7 +12,7 @@
+ # Clean up build directory
+ cd $modelpath
+ if [ ! -d "build" ]; then mkdir build; fi
+-\rm -f build/*
++rm -f build/*
+ 
+ # Get MITgcm code, if needed
+ if [ ! -d "$SLR_DIR/components/mitgcm/install" ]; then
+@@ -32,4 +32,4 @@
+ 	fi
+     make depend
+ fi
+-make -j 8
++make -j 4
Index: /issm/oecreview/Archive/21724-22754/ISSM-22669-22670.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22669-22670.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22669-22670.diff	(revision 22755)
@@ -0,0 +1,150 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22669)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22670)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=12;
++steps=[1 2 3 4 5 7 8 9 10 12];
+ final_time=1;
+ 
+ %Organizer
+@@ -842,40 +842,41 @@
+ % {{{ RunCoupledMITgcmISSM2: 
+ if perform(org,'RunCoupledMITgcmISSM2'),
+ 	
++	loaddata(org,'Parameters');
+ 	loaddata(org,'ParameterizeIce');
++
++	if exist ('run')
++		!\rm -rf run/test4002*
++	end
+ 	
+-	md.transient.isoceancoupling=0;
+-	md.miscellaneous.name='test4002';
+-	md.results=[];
+-	md.results.TransientSolution=[];
+-	md.timestepping.coupling_time=1/12;
+-	md=solve(md,'Transient','runtimename',false);
+-
+ 	md.transient.isoceancoupling=1;
++	md.transient.isgroundingline=1;
+ 	md.timestepping.coupling_time=1/12;
++	md.cluster.npocean=nPx*nPy;
++	md.cluster.executionpath=[pwd '/run'];
++	md.masstransport.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
+ 
+-	md=solve(md,'Transient','runtimename',false);
++	md=solveiceocean(md,'Transient','runtimename',false);
+ 
+-	eval(['!cp ' md.cluster.executionpath '/' md.miscellaneous.name '/* run/ ']);
+-	cd run
+-	%eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' ']);
+-	eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' : -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
+-
++%	%eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' ']);
++%	eval(['!mpiexec -np ' int2str(md.cluster.np) ' ' md.cluster.codepath '/issm_ocean.exe TransientSolution ' pwd ' ' md.miscellaneous.name ' : -np ' int2str(nPx*nPy) ' ./mitgcmuv']);
+ end
+ % }}}
+ 
+-
+-
+-error
+ %Fields and tolerances to track changes
+-fnm=['run/SHICE_fwFluxtave_0000004380.data'];
++fnm=['run/SHICE_fwFluxtave.0000000146.data'];
+ melting_rate_1=readbin(fnm,[Nx Ny]);
+-fnm=['run/SHICE_fwFluxtave_0000008760.data'];
+-melting_rate_2=readbin(fnm,[Nx Ny]);
+-fnm=['run/SHICE_fwFluxtave_0000013140.data'];
+-melting_rate_3=readbin(fnm,[Nx Ny]);
+-fnm=['run/SHICE_fwFluxtave_0000017520.data'];
+-melting_rate_4=readbin(fnm,[Nx Ny]);
++melting_rate_2=melting_rate_1;
++melting_rate_3=melting_rate_1;
++melting_rate_4=melting_rate_1;
++%fnm=['run/SHICE_fwFluxtave_0000004380.data'];
++%melting_rate_1=readbin(fnm,[Nx Ny]);
++%fnm=['run/SHICE_fwFluxtave_0000008760.data'];
++%melting_rate_2=readbin(fnm,[Nx Ny]);
++%fnm=['run/SHICE_fwFluxtave_0000013140.data'];
++%melting_rate_3=readbin(fnm,[Nx Ny]);
++%fnm=['run/SHICE_fwFluxtave_0000017520.data'];
++%melting_rate_4=readbin(fnm,[Nx Ny]);
+ field_names     ={'Base1','Melting1','Vx2','Vy2','Thickness2','Base2','MaskGroundediceLevelset2','FloatingiceMeltingRate2',...
+ 	'Melting2','Vx3','Vy3','Thickness3','Base3','MaskGroundediceLevelset3','FloatingiceMeltingRate3',...
+ 	'Melting3','Vx4','Vy4','Thickness4','Base4','MaskGroundediceLevelset4','FloatingiceMeltingRate4','Melting4'};
+@@ -883,27 +884,52 @@
+ 	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13,...
+ 	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 };
+ field_values={...
+-	(md.results(1).TransientSolution(end).Base),...
++	(md.results.TransientSolution(1).Base),...
+ 	(melting_rate_1(:)),...
+-	(md.results(2).TransientSolution(end).Vx),...
+-	(md.results(2).TransientSolution(end).Vy),...
+-	(md.results(2).TransientSolution(end).Thickness),...
+-	(md.results(2).TransientSolution(end).Base),...
+-	(md.results(2).TransientSolution(end).MaskGroundediceLevelset),...
+-	(md.results(2).TransientSolution(end).FloatingiceMeltingRate),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).Base),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).BasalforcingsFloatingiceMeltingRate),...
+ 	(melting_rate_2(:)),...
+-	(md.results(3).TransientSolution(end).Vx),...
+-	(md.results(3).TransientSolution(end).Vy),...
+-	(md.results(3).TransientSolution(end).Thickness),...
+-	(md.results(3).TransientSolution(end).Base),...
+-	(md.results(3).TransientSolution(end).MaskGroundediceLevelset),...
+-	(md.results(3).TransientSolution(end).FloatingiceMeltingRate),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).Base),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).BasalforcingsFloatingiceMeltingRate),...
+ 	(melting_rate_3(:)),...
+-	(md.results(4).TransientSolution(end).Vx),...
+-	(md.results(4).TransientSolution(end).Vy),...
+-	(md.results(4).TransientSolution(end).Thickness),...
+-	(md.results(4).TransientSolution(end).Base),...
+-	(md.results(4).TransientSolution(end).MaskGroundediceLevelset),...
+-	(md.results(4).TransientSolution(end).FloatingiceMeltingRate),...
++	(md.results.TransientSolution(4).Vx),...
++	(md.results.TransientSolution(4).Vy),...
++	(md.results.TransientSolution(4).Thickness),...
++	(md.results.TransientSolution(4).Base),...
++	(md.results.TransientSolution(4).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(4).BasalforcingsFloatingiceMeltingRate),...
+ 	(melting_rate_4(:)),...
+ 	};
++%field_values={...
++%	(md.results(1).TransientSolution(end).Base),...
++%	(melting_rate_1(:)),...
++%	(md.results(2).TransientSolution(end).Vx),...
++%	(md.results(2).TransientSolution(end).Vy),...
++%	(md.results(2).TransientSolution(end).Thickness),...
++%	(md.results(2).TransientSolution(end).Base),...
++%	(md.results(2).TransientSolution(end).MaskGroundediceLevelset),...
++%	(md.results(2).TransientSolution(end).FloatingiceMeltingRate),...
++%	(melting_rate_2(:)),...
++%	(md.results(3).TransientSolution(end).Vx),...
++%	(md.results(3).TransientSolution(end).Vy),...
++%	(md.results(3).TransientSolution(end).Thickness),...
++%	(md.results(3).TransientSolution(end).Base),...
++%	(md.results(3).TransientSolution(end).MaskGroundediceLevelset),...
++%	(md.results(3).TransientSolution(end).FloatingiceMeltingRate),...
++%	(melting_rate_3(:)),...
++%	(md.results(4).TransientSolution(end).Vx),...
++%	(md.results(4).TransientSolution(end).Vy),...
++%	(md.results(4).TransientSolution(end).Thickness),...
++%	(md.results(4).TransientSolution(end).Base),...
++%	(md.results(4).TransientSolution(end).MaskGroundediceLevelset),...
++%	(md.results(4).TransientSolution(end).FloatingiceMeltingRate),...
++%	(melting_rate_4(:)),...
++%	};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22670-22671.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22670-22671.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22670-22671.diff	(revision 22755)
@@ -0,0 +1,224 @@
+Index: ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 22670)
++++ ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 22671)
+@@ -22,28 +22,18 @@
+ 
+ 	/*Inputs: */
+ 	int     nvtxs;               /* number of vertices in graph           */
+-	int    *start;               /* start of edge list for each vertex    */
+-	int    *adjacency;           /* edge list data                        */
++	int    *start = NULL;        /* start of edge list for each vertex    */
++	int    *adjacency = NULL;    /* edge list data                        */
+ 	int    *vwgts       = NULL;  /* weights for all vertices              */
+-	int     nedges;
+ 	float  *ewgts       = NULL;  /* weights for all edges                 */
+ 	float  *x           = NULL;
+ 	float  *y           = NULL;
+ 	float  *z           = NULL;  /* coordinates for inertial method       */
+-	double  options[10] = {1,1,0,0,1,1,50,0,.001,7654321}; /* architecture and partitioning options */
++	double  options[10] = {1,1,0,0,1,1,50,0,0.001,7654321}; /* architecture and partitioning options */
+ 	double *in_options  = NULL;
+-	int    *nparts      = NULL;   /* number of parts options               */
+ 	int     npart;
+ 	double *goal        = NULL;   /* desired set sizes                     */
+ 
+-	/*intermediary pointers: */
+-	mwIndex *mwstart, *mwadjacency;
+-	double  *doublepointer;
+-
+-	/*output: */
+-   short  *assignment       = NULL; /* set number of each vtx (length nvtxs+1)                */
+-   double *doubleassignment = NULL; /*holds assignment, in double format, to return to matlab */
+-
+ 	#ifndef _HAVE_CHACO_ //only works if dakota library has been compiled in.
+ 	_error_("Chaco not available! Cannot carry out Chaco partitioning!");
+ 	#endif
+@@ -52,27 +42,10 @@
+ 	MODULEBOOT();
+ 
+ 	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&ChacoUsage);
++	CHECKARGUMENTS(NLHS,NRHS,&ChacoUsage);
+ 
+-	/*Fetch adjacency matrix: */
+-	nvtxs = mxGetN(A_IN);
+-	mwstart = mxGetJc(A_IN);
+-	start=xNew<int>((nvtxs+1));
+-	for (i=0; i<nvtxs+1;i++)start[i]=(int)mwstart[i];
+-
+-	mwadjacency = mxGetIr(A_IN);
+-	adjacency = xNew<int>(mxGetNzmax(A_IN));
+-	for (i=0; i<mxGetNzmax(A_IN); i++) adjacency[i]= (int)mwadjacency[i];
+-
+-	nedges = start[nvtxs];
+-	if(!mxIsEmpty(EWGTS_IN)){
+-		ewgts = xNewZeroInit<float>(nedges);
+-		doublepointer=mxGetPr(A_IN);
+-		for (i = 0; i < nedges; i++)ewgts[i] = (float)doublepointer[i];
+-	}
+-	else ewgts=NULL;
+-
+-	/*Fetch rest of data: */
++	/*Fetch Data*/
++	FetchChacoData(&nvtxs,&adjacency,&start,&ewgts,A_IN,EWGTS_IN);
+ 	FetchData(&vwgts,&nterms,VWGTS_IN); 
+ 	FetchData(&x,&nterms,X_IN); 
+ 	FetchData(&y,&nterms,Y_IN); 
+@@ -80,47 +53,22 @@
+ 	FetchData(&in_options,&nterms,OPTNS_IN); 
+ 	for (i=0;i<(nterms<10?nterms:10);i++) options[i]=in_options[i]; //copy in_options into default options
+ 	FetchData(&npart,NPARTS_IN); 
+-	nparts=xNew<int>(1); nparts[0]=npart; //weird Chacox interface ain't it?
++	//int * nparts=xNew<int>(1); nparts[0]=npart; //weird Chacox interface ain't it?
+ 	FetchData(&goal,&nterms,GOAL_IN); 
+ 
+-	/*Some debugging print: {{{*/
+-	#ifdef _DEBUG_
+-	_printf_("nvtxs: " << nvtxs << "\n");
+-	_printf_("options: [");
+-	for(i=0;i<10;i++)_printf_(options[i] << "|");
+-	_printf_("]\n");
+-	_printf_("start: \n");
+-	for (i=0; i<nvtxs+1;i++)_printf_(start[i] << " ");
+-	_printf_("\n");
+-	_printf_("adjacency: \n");
+-	for (i=0; i<mxGetNzmax(A_IN);i++)_printf_("" <<adjacency[i]<< " ");i++)
+-	_printf_("\n");
+-	_printf_("nedges: " << nedges << " " << ewgts << "\n");
+-	if(ewgts) for (i = 0; i < nedges; i++)_printf_(ewgts[i] << " ");
+-	_printf_("\n");
+-	_printf_("vwgts:\n");
+-	for (i = 0; i < nvtxs; i++)_printf_(vwgts[i] << " ");
+-	_printf_("\n");
+-	_printf_("nparts: " << nparts[0] << "\n");
+-	_printf_("goal: " << goal << "\n");
+-	#endif
+-	/*}}}*/
+-
+ 	/*Allocate output: */
+-	assignment = xNewZeroInit<short>(nvtxs);
++	short* assignment = xNewZeroInit<short>(nvtxs);
+ 
+     /*Call core: */
+-	Chacox(nvtxs, start, adjacency, vwgts, ewgts, x, y, z, assignment, options, nparts, goal);
++	Chacox(nvtxs, start, adjacency, vwgts, ewgts, x, y, z, assignment, options,&npart, goal);
+ 
+     /*Output data: */
+-	doubleassignment=xNew<double>(nvtxs);
+-	for(i=0;i<nvtxs;i++) doubleassignment[i]=(double)assignment[i];
+-	WriteData(ASSGN_OUT,doubleassignment,nvtxs);
++	WriteData(ASSGN_OUT,assignment,nvtxs);
+ 
+ 	/*Free ressources:*/
+ 	xDelete<short>(assignment); 
+ 	xDelete<double>(goal);
+-	xDelete<int>(nparts);
++	//xDelete<int>(nparts);
+ 	xDelete<float>(z);
+ 	xDelete<float>(y);
+ 	xDelete<float>(x);
+@@ -128,7 +76,6 @@
+ 	xDelete<int>(vwgts);
+ 	xDelete<int>(adjacency);
+ 	xDelete<int>(start);
+-	xDelete<double>(doubleassignment);
+ 
+ 	/*end module: */
+ 	MODULEEND();
+Index: ../trunk-jpl/src/wrappers/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 22670)
++++ ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 22671)
+@@ -22,6 +22,7 @@
+ void WriteData(mxArray** pdataref,int*    matrix, int M,int N);
+ void WriteData(mxArray** pdataref,IssmSeqVec<double>* vector);
+ void WriteData(mxArray** pdataref,double* vector, int M);
++void WriteData(mxArray** pdataref,short* vector, int M);
+ void WriteData(mxArray** pdataref,int* vector, int M);
+ void WriteData(mxArray** pdataref,int integer);
+ void WriteData(mxArray** pdataref,bool boolean);
+@@ -52,6 +53,7 @@
+ void FetchData(BamgOpts** bamgopts,const mxArray* dataref);
+ void FetchData(Options** poptions,int istart, int nrhs,const mxArray** pdataref);
+ void FetchData(Contours** pcontours,const mxArray* dataref);
++void FetchChacoData(int* pnvtxs,int** padjacency,int** pstart,float** pewgts,const mxArray* A_IN, const mxArray* EWGTS_IN);
+ 
+ Option* OptionParse(char* name, const mxArray* prhs[]);
+ GenericOption<double>*    OptionDoubleParse( char* name, const mxArray* prhs[]);
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22670)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 22671)
+@@ -641,7 +641,37 @@
+ 	*pcontours=contours;
+ }
+ /*}}}*/
++void FetchChacoData(int* pnvtxs,int** padjacency,int** pstart,float** pewgts,const mxArray* A_IN, const mxArray* EWGTS_IN){/*{{{*/
+ 
++	/*Fetch adjacency matrix: */
++	int      nvtxs       = mxGetN(A_IN);
++	mwIndex* mwstart     = mxGetJc(A_IN);
++	mwIndex* mwadjacency = mxGetIr(A_IN);
++	int      nzmax       = mxGetNzmax(A_IN);
++
++	int* start = xNew<int>(nvtxs+1);
++	for(int i=0;i<nvtxs+1;i++) start[i]=(int)mwstart[i];
++
++	int* adjacency = xNew<int>(nzmax);
++	for(int i=0; i<nzmax; i++) adjacency[i]= (int)mwadjacency[i];
++
++	/*Get edges weights*/
++	int nedges = start[nvtxs];
++	float* ewgts = NULL;
++	if(!mxIsEmpty(EWGTS_IN)){
++		ewgts = xNewZeroInit<float>(nedges);
++		double* doublepointer = mxGetPr(A_IN);
++		for(int i = 0; i<nedges;i++) ewgts[i] = (float)doublepointer[i];
++	}
++
++	/*Assign output pointers*/
++	*pnvtxs     = nvtxs;
++	*padjacency = adjacency;
++	*pstart     = start;
++	*pewgts     = ewgts;
++}
++/*}}}*/
++
+ /*Toolkit*/
+ /*FUNCTION MatlabMatrixToDoubleMatrix {{{*/
+ int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
+Index: ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp	(revision 22670)
++++ ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp	(revision 22671)
+@@ -108,6 +108,29 @@
+ 	*pdataref=dataref;
+ }
+ /*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,short* vector, int M){{{*/
++void WriteData(mxArray** pdataref,short* vector, int M){
++
++	mxArray* dataref       = NULL;
++	double*  vector_matlab = NULL;
++
++	if(vector){
++
++		/*create the matlab vector with Matlab's memory manager */
++		vector_matlab=(double*)mxMalloc(M*sizeof(double));
++		for(int i=0;i<M;i++) vector_matlab[i]=double(vector[i]);
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(dataref,(mwSize)M);
++		mxSetN(dataref,(mwSize)1);
++		mxSetPr(dataref,vector_matlab);
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++
++	*pdataref=dataref;
++}
++/*}}}*/
+ /*FUNCTION WriteData(mxArray** pdataref,double scalar){{{*/
+ void WriteData(mxArray** pdataref,double scalar){
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22671-22672.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22671-22672.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22671-22672.diff	(revision 22755)
@@ -0,0 +1,167 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22671)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22672)
+@@ -573,9 +573,6 @@
+         !\cp ../MITgcm/build/mitgcmuv run
+         !\cp ../MITgcm/input/* run
+ 
+-        %load data: 
+-        loaddata(org,'Parameters');
+-
+         % initial salinity
+         S=iniSalt*ones(Nx,Ny,Nz);
+         writebin('run/Salt.bin',S);
+@@ -844,11 +841,148 @@
+ 	
+ 	loaddata(org,'Parameters');
+ 	loaddata(org,'ParameterizeIce');
++	loaddata(org,'Bathymetry');
++	loaddata(org,'IceSheetGeometry');
++        endtime = round(MITgcmDeltaT * ...
++         floor(time_step*y2s*async_step_MITgcm_multiplier/MITgcmDeltaT));
+ 
+-	if exist ('run')
+-		!\rm -rf run/test4002*
+-	end
+-	
++        % {{{ prepare MITgcm 
++        % rename previous run directory and create new one
++        if exist ('run.old')
++            !\rm -rf run.old
++        end
++        if exist ('run')
++            !\mv run run.old
++        end
++        !\mkdir run
++        !\cp ../MITgcm/build/mitgcmuv run
++        !\cp ../MITgcm/input/* run
++
++        % initial salinity
++        S=iniSalt*ones(Nx,Ny,Nz);
++        writebin('run/Salt.bin',S);
++
++        % initial temperature
++        T=iniTheta*ones(Nx,Ny,Nz);
++        writebin('run/Theta.bin',T);
++
++        % initial velocity
++        Z=zeros(Nx,Ny,Nz);
++        writebin('run/Uvel.bin',Z);
++        writebin('run/Vvel.bin',Z);
++
++        % initial sea surface height
++        Z=zeros(Nx,Ny);
++        writebin('run/Etan.bin',Z);
++
++        % salinity boundary conditions
++        S=obcSalt*ones(Ny,Nz);
++        thk=delZ*ones(Nz,1);
++        bot=cumsum(thk);
++        ik=find(bot<=mlDepth);
++        S(:,ik)=mlSalt;
++        writebin('run/OBs.bin',S);
++
++        % temperature boundary conditions
++        T=obcTheta*ones(Ny,Nz);
++        T(:,ik)=mlTheta;
++        writebin('run/OBt.bin',T);
++
++        % zonal velocity boundary conditions
++        U=obcUvel*ones(Ny,Nz);
++        writebin('run/OBu.bin',U);
++
++        % zero boundary conditions
++        Z=zeros(Ny,Nz);
++        writebin('run/zeros.bin',Z);
++
++        % build parameter file data.obcs
++        fidi=fopen('../MITgcm/input/data.obcs','r');
++        fido=fopen('run/data.obcs','w');
++        tline = fgetl(fidi);
++        fprintf(fido,'%s\n',tline);
++        while 1
++            tline = fgetl(fidi);
++            if ~ischar(tline), break, end
++            %do the change here: 
++            if strcmpi(tline,' OB_Iwest = 40*1,'),
++                fprintf(fido,'%s%i%s\n',' OB_Iwest = ',Ny,'*1,');
++                continue;
++            end
++            if strcmpi(tline,' OB_Ieast = 40*-1,'),
++                fprintf(fido,'%s%i%s\n',' OB_Ieast = ',Ny,'*-1,');
++                continue;
++            end
++            fprintf(fido,'%s\n',tline);
++        end
++        %close  files
++        fclose(fidi);
++        fclose(fido);
++
++        %save bathymetry and bedrock in run directory
++        writebin('run/bathymetry.bin',bathymetry);
++        writebin('run/icetopo.bin',draft);
++        % }}}
++        % {{{ generate MITgcm parameter file data 
++        fidi=fopen('../MITgcm/input/data','r');
++        fido=fopen('run/data','w');
++        tline = fgetl(fidi);
++        fprintf(fido,'%s\n',tline);
++        while 1
++            tline = fgetl(fidi);
++            if ~ischar(tline), break, end
++            %do the change here: 
++            if strcmpi(tline,' xgOrigin = 0.0,'),
++                fprintf(fido,'%s%i%s\n',' xgOrigin = ',xgOrigin,',');
++                continue;
++            end
++            if strcmpi(tline,' ygOrigin = -80.0,'),
++                fprintf(fido,'%s%i%s\n',' ygOrigin = ',ygOrigin,',');
++                continue;
++            end
++            if strcmpi(tline,' delX = 20*0.25,'),
++                fprintf(fido,'%s%i*%g%s\n',' delX = ',Nx,dLong,',');
++                continue;
++            end
++            if strcmpi(tline,' delY = 20*0.25,'),
++                fprintf(fido,'%s%i*%g%s\n',' delY = ',Ny,dLat,',');
++                continue;
++            end
++            if strcmpi(tline,' delZ = 30*30.0,'),
++                fprintf(fido,'%s%i*%g%s\n',' delZ = ',Nz,delZ,',');
++                continue;
++            end
++            if strcmpi(tline,' endTime=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' endTime= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' deltaT=1200.0,'),
++                fprintf(fido,'%s%i%s\n',' deltaT= ',MITgcmDeltaT,',');
++                continue;
++            end
++            if strcmpi(tline,' pChkptFreq=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' pChkptFreq= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' taveFreq=2592000.,'),
++                fprintf(fido,'%s%i%s\n',' taveFreq= ',endtime,',');
++                continue;
++            end
++            if strcmpi(tline,' rhoConst=1030.,'),
++                fprintf(fido,'%s%i%s\n',' rhoConst= ',rho_water,',');
++                continue;
++            end
++            if strcmpi(tline,' rhoNil=1030.,'),
++                fprintf(fido,'%s%i%s\n',' rhoNil= ',rho_water,',');
++                continue;
++            end
++            fprintf(fido,'%s\n',tline);
++        end
++        %close  files
++        fclose(fidi);
++        fclose(fido);
++        % }}}
++	        
+ 	md.transient.isoceancoupling=1;
+ 	md.transient.isgroundingline=1;
+ 	md.timestepping.coupling_time=1/12;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22672-22673.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22672-22673.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22672-22673.diff	(revision 22755)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22672)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22673)
+@@ -50,6 +50,20 @@
+ #define DATAMESH output,0
+ #endif
+ 
++#ifdef _HAVE_JAVASCRIPT_MODULES_
++/* serial input macros: */
++#define XHANDLE       xIn,nodsIn,1
++#define YHANDLE       yIn,nodsIn,1
++#define DATAHANDLE    dataIn,nodsIn,1
++#define XMESHHANDLE   xMeshIn,nodsIn,1
++#define YMESHHANDLE   yMeshIn,nodsIn,1
++#define DEFAULTHANDLE defaultValueIn
++#define INTERPENUM    interpTypeIn
++/* serial output macros: */
++#define DATAMESH pdataMesh,NULL
++#define WRAPPER(modulename) extern "C" { int InterpFromGridToMeshModule(double** pdataMesh, double* xIn, double* yIn, double* dataIn, double* xMeshIn, double* yMeshIn, double defaultValue, int nodsIn, char* interpTypeIn)
++#endif
++
+ /* serial arg counts: */
+ #undef NLHS
+ #define NLHS  1
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22672)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22673)
+@@ -4,15 +4,16 @@
+  * This function interpolates a field defined on a grid to a list of points based on a bilinear interpolation.
+  *
+  * Usage:
+- *	var data_mesh=InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue);\
++ *	var data_mesh=InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue,interpType);\
+  * 
+  *	xIn,yIn						: coordinates of matrix data. (x and y must be in increasing order)
+  *	dataIn						: matrix holding the data to be interpolated onto the mesh
+  *	xMeshIn,yMeshIn				: coordinates of the points onto which we interpolate
+- *	defaultValue (optional)		: default value if no data is found (holes)
++ *	defaultValue 				: default value if no data is found (holes)
++ *	interpType (optional) 		: interpolation type
+  * 	dataMesh					: array of mesh interpolated data
+  */
+-function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValueIn) {
++function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue) {
+ 	/*
+ 		Variables
+ 	*/
+@@ -23,7 +24,6 @@
+ 	var ddata			= {};
+ 	var ddataHeap 		= {};
+ 	var ddataPtr 		= {};
+-	var defaultValue 	= 0; // Default value for defaultValue :)
+ 	var dx				= {};
+ 	var dxHeap 			= {};
+ 	var dxMesh 			= {};
+@@ -36,6 +36,7 @@
+ 	var dyMeshHeap 		= {};
+ 	var dyMeshPtr 		= {};
+ 	var dyPtr 			= {};
++	var interpType 		= '';
+ 	var ndata			= {};
+ 	var nods 			= 0;
+ 	var nx 				= {};
+@@ -49,18 +50,8 @@
+ 	var yMesh 			= {};
+ 	//}}}
+ 	
+-	
++
+ 	/*
+-		Retrieve default value
+-	*/
+-	//{{{
+-	if (arguments.length === 6) {
+-		var defaultValue = arguments[5];
+-	}
+-	//}}}
+-	
+-	
+-	/*
+ 		Dynamic allocations
+ 	*/
+ 	//{{{
+@@ -108,9 +99,20 @@
+ 	
+ 	
+ 	/*
++		Retrieve interpolation type
++	*/
++	//{{{
++	if (arguments.length === 7) {
++		interpType = arguments[6];
++	} else {
++		interpType = 'bilinear';
++	}
++	//}}}
++	
++	/*
+ 		Output
+ 	*/
+-	dataMeshPtr = Module._malloc(4);
++	pdataMesh = Module._malloc(4);
+ 	//}}}
+ 	
+ 	//}}}
+@@ -124,13 +126,15 @@
+ 		'InterpFromGridToMeshModule', 
+ 		'number', 
+ 		[
+-			'number', 
+-			'number', 
+-			'number', 
+-			'number', 
+-			'number', 
+-			'number', 
+-			'number'
++			'number', // output : pdataMesh
++			'number', // input	: x
++			'number', // input	: y
++			'number', // input 	: data
++			'number', // input 	: xMesh
++			'number', // input	: yMesh
++			'number', // input 	: defaultValue
++			'number', // input	: nods
++			'string', // input	: interpType
+ 		]
+ 	);
+ 	//}}}
+@@ -140,15 +144,16 @@
+ 		Call InterpFromGridToMesh module
+ 	*/
+ 	//{{{
+-	InterpFromGrid2MeshModule(
+-		dataMeshPtr, 
++	InterpFromGridToMeshModule(
++		pdataMesh, 
+ 		x, 
+ 		y, 
+ 		data, 
+ 		xMesh, 
+ 		yMesh, 
+-		nods, 
+-		defaultValue
++		defaultValue, 
++		nods,
++		interpType
+ 	);
+ 	//}}}
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22673-22674.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22673-22674.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22673-22674.diff	(revision 22755)
@@ -0,0 +1,428 @@
+Index: ../trunk-jpl/src/m/modules/MeshPartition.m
+===================================================================
+--- ../trunk-jpl/src/m/modules/MeshPartition.m	(revision 22673)
++++ ../trunk-jpl/src/m/modules/MeshPartition.m	(revision 22674)
+@@ -2,7 +2,7 @@
+ %MESHPARTITION - Partition mesh according to the number of areas, using Metis library.
+ %
+ %	   Usage:
+-%			[element_partitioning,node_partitioning]=MeshPartition(md.mesh,numpartitions)");
++%			[element_partitioning,node_partitioning]=MeshPartition(md,numpartitions)");
+ %
+ %	   element_partitioning: Vector of partitioning area numbers, for every element.
+ %	   node_partitioning: Vector of partitioning area numbers, for every node.
+@@ -13,5 +13,25 @@
+ 	error('Wrong usage (see above)');
+ end
+ 
++%Get mesh info from md.mesh
++numberofvertices = md.mesh.numberofvertices;
++numberofelements = md.mesh.numberofelements;
++elements         = md.mesh.elements;
++numberofelements2d = 0;
++numberofvertices2d = 0;
++numberoflayers     = 1;
++elements2d         = [];
++if isa(md.mesh,'mesh3dprisms')
++	elementtype = 'Penta';
++	numberofelements2d = md.mesh.numberofelements2d;
++	numberofvertices2d = md.mesh.numberofvertices2d;
++	numberoflayers     = md.mesh.numberoflayers;
++	elements2d         = md.mesh.elements2d;
++elseif isa(md.mesh,'mesh2d')
++	elementtype = 'Tria';
++elseif isa(md.mesh,'mesh2dvertical')
++	elementtype = 'Tria';
++end
++
+ % Call mex module
+-[element_partitioning, node_partitioning] = MeshPartition_matlab(md.mesh,numpartitions);
++[element_partitioning, node_partitioning] = MeshPartition_matlab(numberofvertices,elements,numberofvertices2d,elements2d,numberoflayers,meshelementtype,numpartitions);
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22673)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 22674)
+@@ -38,10 +38,15 @@
+ 						InterpFromGridToMesh_python.la\
+ 						InterpFromMeshToGrid_python.la\
+ 						IssmConfig_python.la\
++						MeshPartition_python.la\
+ 						MeshProfileIntersection_python.la\
+ 						NodeConnectivity_python.la\
+ 						Triangle_python.la\
+ 						ProcessRifts_python.la
++
++if CHACO
++lib_LTLIBRARIES += Chaco_python.la
++endif
+ endif 
+ #}}}
+ #Flags and libraries {{{
+@@ -100,6 +105,12 @@
+ BamgTriangulate_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ BamgTriangulate_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+ 
++if CHACO
++Chaco_python_la_SOURCES = ../Chaco/Chaco.cpp
++Chaco_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++Chaco_python_la_LIBADD = ${deps} $(MPILIB)  $(CHACOLIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
++endif
++
+ ContourToMesh_python_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp
+ ContourToMesh_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ ContourToMesh_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+@@ -132,6 +143,10 @@
+ IssmConfig_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ IssmConfig_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
++MeshPartition_python_la_SOURCES = ../MeshPartition/MeshPartition.cpp
++MeshPartition_python_la_CXXFLAGS = ${AM_CXXFLAGS}
++MeshPartition_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
++
+ MeshProfileIntersection_python_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp
+ MeshProfileIntersection_python_la_CXXFLAGS = ${AM_CXXFLAGS}
+ MeshProfileIntersection_python_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(PROJ4LIB)
+Index: ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 22673)
++++ ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 22674)
+@@ -45,6 +45,36 @@
+ 	*pscalar=dscalar;
+ }
+ /*}}}*/
++/*FUNCTION FetchData(float* pscalar,PyObject* py_float){{{*/
++void FetchData(float* pscalar,PyObject* py_float){
++
++	float fscalar;
++
++	/*return internal value: */
++	if  (PyFloat_Check(py_float))
++	 fscalar=PyFloat_AsDouble(py_float);
++	else if (PyLong_Check(py_float)){
++		#if _PYTHON_MAJOR_ == 3
++		fscalar=(float)PyLong_AsLong(py_float);
++		#else
++		fscalar=(float)PyLong_AsDouble(py_float);
++		#endif
++	}
++	else if (PyInt_Check(py_float))
++	 fscalar=(float)PyInt_AsLong(py_float);
++	else if (PyBool_Check(py_float))
++	 fscalar=(float)PyLong_AsLong(py_float);
++	else if (PyTuple_Check(py_float) && (int)PyTuple_Size(py_float)==1)
++	 FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
++	else if (PyList_Check(py_float) && (int)PyList_Size(py_float)==1)
++	 FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
++	else
++	 _error_("unrecognized float type in input!");
++
++	/*output: */
++	*pscalar=fscalar;
++}
++/*}}}*/
+ /*FUNCTION FetchData(int* pscalar,PyObject* py_long){{{*/
+ void FetchData(int* pscalar, PyObject* py_long){
+ 
+@@ -463,6 +493,91 @@
+ 	if(pvector)*pvector=vector;
+ }
+ /*}}}*/
++/*FUNCTION FetchData(float** pvector,int* pM, PyObject* py_vector){{{*/
++void FetchData(float** pvector,int* pM,PyObject* py_vector){
++
++	/*output: */
++	float* vector=NULL;
++	int M;
++	int ndim;
++	npy_intp*  dims=NULL;
++
++	/*intermediary:*/
++	long*   lvector=NULL;
++	bool*   bvector=NULL;
++	double* dvector=NULL;
++	int i;
++	PyObject* py_vector2=NULL;
++
++	if     (PyArray_Check((PyArrayObject*)py_vector)) {
++		/*retrieve dimensions: */
++		ndim=PyArray_NDIM((const PyArrayObject*)py_vector);
++		if      (ndim==1) {
++			dims=PyArray_DIMS((PyArrayObject*)py_vector);
++			M=dims[0]; 
++		}
++		else if (ndim==2) {
++			dims=PyArray_DIMS((PyArrayObject*)py_vector);
++			if (dims[1]==1)
++			 M=dims[0]; 
++			else
++			 _error_("expecting an Mx1 matrix or M vector in input!");
++		}
++		else
++		 _error_("expecting an Mx1 matrix or M vector in input!");
++
++		if (M) {
++			if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
++				py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_LONG,ndim,ndim);
++				py_vector=py_vector2;
++			}
++
++			if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
++				/*retrieve internal value: */
++				dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
++
++				/*transform into int vector: */
++				vector=xNew<float>(M);
++				for(i=0;i<M;i++)vector[i]=(float)lvector[i];
++			}
++
++			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
++				/*retrieve internal value: */
++				lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
++
++				/*transform into int vector: */
++				vector=xNew<float>(M);
++				for(i=0;i<M;i++)vector[i]=(float)lvector[i];
++			}
++
++			else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
++				/*retrieve internal value: */
++				bvector=(bool*)PyArray_DATA((PyArrayObject*)py_vector);
++
++				/*transform into int vector: */
++				vector=xNew<float>(M);
++				for(i=0;i<M;i++)vector[i]=(float)bvector[i];
++			}
++
++			else
++			 _error_("unrecognized int pyarray type in input!");
++
++			if(py_vector2) delete(py_vector2);
++		}
++		else
++		 vector=NULL;
++	}
++	else{
++		M=1;
++		vector=xNew<float>(M);
++		FetchData(&(vector[0]),py_vector);
++	}
++
++	/*output: */
++	if(pM)*pM=M;
++	if(pvector)*pvector=vector;
++}
++/*}}}*/
+ /*FUNCTION FetchData(int** pvector,int* pM, PyObject* py_vector){{{*/
+ void FetchData(int** pvector,int* pM,PyObject* py_vector){
+ 
+@@ -808,6 +923,9 @@
+ 	*pcontours=contours;
+ }
+ /*}}}*/
++void FetchChacoData(int* pnvtxs,int** padjacency,int** pstart,float** pewgts,PyObject* A_IN,PyObject* EWGTS_IN){
++	_error_("Nathan... I need your help here");
++}
+ 
+ /*Python version dependent: */
+ #if _PYTHON_MAJOR_ >= 3 
+Index: ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 22673)
++++ ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 22674)
+@@ -96,6 +96,23 @@
+ 	PyTuple_SetItem(py_tuple, index, array);
+ 
+ }/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index, short* vector, int M){{{*/
++void WriteData(PyObject* py_tuple, int index,short* vector, int M){
++
++	long* lvector=NULL;
++	npy_intp dim=10;
++	PyObject* array=NULL;
++
++	/*transform into long matrix: */
++	lvector=xNew<long>(M);
++	for(int i=0;i<M;i++)lvector[i]=(long)vector[i];
++
++	dim=(npy_intp)M;
++	array=PyArray_SimpleNewFromData(1,&dim,NPY_INT64,lvector);
++
++	PyTuple_SetItem(py_tuple, index, array);
++
++}/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index, int* vector, int M){{{*/
+ void WriteData(PyObject* py_tuple, int index, int* vector, int M){
+ 
+Index: ../trunk-jpl/src/wrappers/python/io/pythonio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 22673)
++++ ../trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 22674)
+@@ -21,6 +21,7 @@
+ void WriteData(PyObject* py_tuple,int index, bool* matrix, int M,int N);
+ void WriteData(PyObject* py_tuple,int index, int integer);
+ void WriteData(PyObject* py_tuple,int index, double* vector, int M);
++void WriteData(PyObject* py_tuple,int index, short* vector, int M);
+ void WriteData(PyObject* py_tuple,int index, int* vector, int M);
+ void WriteData(PyObject* py_tuple,int index, char* string);
+ void WriteData(PyObject* py_tuple,int index);
+@@ -34,10 +35,12 @@
+ void FetchData(int** pmatrix,int* pM,int *pN,PyObject* py_matrix);
+ void FetchData(bool** pmatrix,int* pM,int *pN,PyObject* py_matrix);
+ void FetchData(double** pvector,int* pM,PyObject* py_ref);
++void FetchData(float** pvector,int* pM,PyObject* dataref);
+ void FetchData(int** pvector,int* pM,PyObject* py_ref);
+ void FetchData(bool** pvector,int* pM,PyObject* py_ref);
+ void FetchData(char** pstring,PyObject* py_unicode);
+ void FetchData(double* pscalar,PyObject* py_float);
++void FetchData(short* pscalar,PyObject* py_float);
+ void FetchData(int* pscalar,PyObject* py_long);
+ void FetchData(bool* pbool,PyObject* py_boolean);
+ void FetchData(BamgGeom** bamggeom,PyObject* py_dict);
+@@ -45,6 +48,7 @@
+ void FetchData(BamgOpts** bamgopts,PyObject* py_dict);
+ void FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple);
+ void FetchData(Contours** pcontours,PyObject* py_list);
++void FetchChacoData(int* pnvtxs,int** padjacency,int** pstart,float** pewgts,PyObject* A_IN,PyObject* EWGTS_IN);
+ 
+ int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void ));
+ 
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 22673)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 22674)
+@@ -26,8 +26,13 @@
+ 
+ #ifdef _HAVE_MATLAB_MODULES_
+ /* serial input macros: */
+-#define MESH    prhs[0]
+-#define NUMAREAS prhs[1]
++#define NUMBEROFVERTICES   prhs[0]
++#define ELEMENTS           prhs[1]
++#define NUMBEROFVERTICES2D prhs[2]
++#define ELEMENTS2D         prhs[3]
++#define NUMBEROFLAYERS     prhs[4]
++#define MESHELEMENTTYPE    prhs[5]
++#define NUMAREAS           prhs[6]
+ /* serial output macros: */
+ #define ELEMENTPARTITIONING (mxArray**)&plhs[0]
+ #define NODEPARTITIONING (mxArray**)&plhs[1]
+@@ -35,8 +40,13 @@
+ 
+ #ifdef _HAVE_PYTHON_MODULES_
+ /* serial input macros: */
+-#define MESH     PyTuple_GetItem(args,0)
+-#define NUMAREAS PyTuple_GetItem(args,1)
++#define NUMBEROFVERTICES   PyTuple_GetItem(args,0)
++#define ELEMENTS           PyTuple_GetItem(args,1)
++#define NUMBEROFVERTICES2D PyTuple_GetItem(args,2)
++#define ELEMENTS2D         PyTuple_GetItem(args,3)
++#define NUMBEROFLAYERS     PyTuple_GetItem(args,4)
++#define MESHELEMENTTYPE    PyTuple_GetItem(args,5)
++#define NUMAREAS           PyTuple_GetItem(args,6)
+ /* serial output macros: */
+ #define ELEMENTPARTITIONING output,0
+ #define NODEPARTITIONING output,1
+@@ -46,6 +56,6 @@
+ #undef NLHS
+ #define NLHS  2
+ #undef NRHS
+-#define NRHS  2
++#define NRHS  7
+ 
+ #endif  /* _MESHPARTITION_H */
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 22673)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 22674)
+@@ -14,20 +14,14 @@
+ }/*}}}*/
+ WRAPPER(MeshPartition_python){
+ 
+-	/*Indexing: */
+-	int i,j;
+-
+ 	/* required input: */
+-	int  meshelementtype;
+ 	int  numberofelements;
+ 	int  numberofvertices;
+-	int *elements         = NULL;
++	int *elements = NULL;
+ 	int  elements_width;
+-
+ 	int numberofelements2d=0;
+ 	int numberofvertices2d=0;
+ 	int* elements2d=NULL;
+-
+ 	int numberoflayers;
+ 	int numareas=1;
+ 
+@@ -41,33 +35,22 @@
+ 	MODULEBOOT();
+ 
+ 	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshPartitionUsage);
++	CHECKARGUMENTS(NLHS,NRHS,&MeshPartitionUsage);
+ 
+ 	/*Fetch data: */
+-	FetchData(&numberofelements,mxGetAssignedField(MESH,0,"numberofelements"));
+-	FetchData(&numberofvertices,mxGetAssignedField(MESH,0,"numberofvertices"));
+-	FetchData(&elements,NULL,&elements_width,mxGetAssignedField(MESH,0,"elements"));
+-
+-	if(strcmp(mxGetClassName(MESH),"mesh3dprisms")==0){
+-		meshelementtype = PentaEnum;
+-		FetchData(&numberofelements2d,mxGetAssignedField(MESH,0,"numberofelements2d"));
+-		FetchData(&numberofvertices2d,mxGetAssignedField(MESH,0,"numberofvertices2d"));
+-		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MESH,0,"elements2d"));
+-		FetchData(&numberoflayers,mxGetAssignedField(MESH,0,"numberoflayers"));
+-	}
+-	else if(strcmp(mxGetClassName(MESH),"mesh2d")==0){
+-		meshelementtype = TriaEnum;
+-		numberoflayers=1;
+-	}
+-	else if(strcmp(mxGetClassName(MESH),"mesh2dvertical")==0){
+-		meshelementtype = TriaEnum;
+-		numberoflayers=1;
+-	}
+-	else{
+-		_error_("Mesh type "<<mxGetClassName(MESH)<<" not supported yet");
+-	}
++	FetchData(&numberofvertices,NUMBEROFVERTICES);
++	FetchData(&elements,&numberofelements,&elements_width,ELEMENTS);
++	FetchData(&numberofvertices2d,NUMBEROFVERTICES2D);
++	FetchData(&elements2d,&numberofelements2d,NULL,ELEMENTS2D);
++	FetchData(&numberoflayers,NUMBEROFLAYERS);
+ 	FetchData(&numareas,NUMAREAS);
+ 
++	/*Get mesh element type and convert to Enum*/
++	char* meshtype_str = NULL;
++	FetchData(&meshtype_str,MESHELEMENTTYPE);
++	int meshelementtype = StringToEnumx(meshtype_str); 
++	xDelete<char>(meshtype_str);
++
+ 	/*Run partitioning algorithm based on a "clever" use of the Metis partitioner: */
+ 	MeshPartitionx(&int_element_partitioning,&int_node_partitioning,numberofelements,numberofvertices,elements,
+ 		numberofelements2d,numberofvertices2d,elements2d,numberoflayers,elements_width,meshelementtype,numareas);
+@@ -74,12 +57,12 @@
+ 
+ 	/*Post process node_partitioning and element_partitioning to be in double format. Metis needed them in int* format: */
+ 	element_partitioning=xNew<double>(numberofelements);
+-	for (i=0;i<numberofelements;i++){
++	for(int i=0;i<numberofelements;i++){
+ 		element_partitioning[i]=(double)int_element_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
+ 	}
+ 
+ 	node_partitioning=xNew<double>(numberofvertices);
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<numberofvertices;i++){
+ 		node_partitioning[i]=(double)int_node_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
+ 	}
+ 
+@@ -89,7 +72,7 @@
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(elements);
+-	xDelete<int>( elements2d);
++	xDelete<int>(elements2d);
+ 	xDelete<int>(int_element_partitioning);
+ 	xDelete<int>(int_node_partitioning);
+ 	xDelete<double>(element_partitioning);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22674-22675.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22674-22675.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22674-22675.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/Chacox/user_params.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/user_params.cpp	(revision 22674)
++++ ../trunk-jpl/src/c/modules/Chacox/user_params.cpp	(revision 22675)
+@@ -118,7 +118,7 @@
+ int       NSQRTS = 1000;	/* # square roots to precompute if coarsening */
+ int       MAKE_VWGTS = FALSE;	/* Make vtx weights degrees+1? (TRUE/FALSE) */
+ int       FREE_GRAPH = FALSE;	/* Free input graph data? (TRUE/FALSE) */
+-char     *PARAMS_FILENAME = "User_Params";	/* File of parameter changes */
++const char  *PARAMS_FILENAME = "User_Params";	/* File of parameter changes */
+ 
+ /* Parameters that control debugging output */
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22675-22676.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22675-22676.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22675-22676.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22675)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22676)
+@@ -57,11 +57,12 @@
+ #define DATAHANDLE    dataIn,nodsIn,1
+ #define XMESHHANDLE   xMeshIn,nodsIn,1
+ #define YMESHHANDLE   yMeshIn,nodsIn,1
+-#define DEFAULTHANDLE defaultValueIn
+-#define INTERPENUM    interpTypeIn
++#define DEFAULTHANDLE defaultValue
++#define INTERPENUM    interpType
+ /* serial output macros: */
+-#define DATAMESH pdataMesh,NULL
+-#define WRAPPER(modulename) extern "C" { int InterpFromGridToMeshModule(double** pdataMesh, double* xIn, double* yIn, double* dataIn, double* xMeshIn, double* yMeshIn, double defaultValue, int nodsIn, char* interpTypeIn)
++#define DATAMESH pdataMesh
++#define WRAPPER(modulename) extern "C" { int InterpFromGridToMeshModule(double** pdataMesh, double* xIn, double* yIn, double* dataIn, double* xMeshIn, double* yMeshIn, double defaultValue, int nodsIn, char* interpType)
++#define nrhs 6
+ #endif
+ 
+ /* serial arg counts: */
Index: /issm/oecreview/Archive/21724-22754/ISSM-22676-22677.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22676-22677.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22676-22677.diff	(revision 22755)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/classes/thermal.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.js	(revision 22676)
++++ ../trunk-jpl/src/m/classes/thermal.js	(revision 22677)
+@@ -91,7 +91,7 @@
+ 
+ 		checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 ,1, 2]);
+ 		checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1);
+-		checkfield(md,'fieldname','thermal.fe','values',{'P1','P1xP2','P1xP3'});
++		checkfield(md,'fieldname','thermal.fe','values',['P1','P1xP2','P1xP3']);
+ 		if(ArrayAnyEqual(ArrayIsMember('EnthalpyAnalysis',analyses),1) & md.thermal.isenthalpy & md.mesh.dimension() == 3){
+ 			
+ 			for(var i=0;i<md.mesh.numberofvertices;i++){
+Index: ../trunk-jpl/src/wrappers/javascript/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22676)
++++ ../trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 22677)
+@@ -90,6 +90,6 @@
+ 					 ../IssmConfig/IssmConfig.cpp\
+ 					 ../Issm/issm.cpp
+ 
+-IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriangleModule','_NodeConnectivityModule','_ContourToMeshModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
++IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriangleModule','_NodeConnectivityModule','_ContourToMeshModule','_ElementConnectivityModule','_InterpFromGridToMeshModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
+ IssmModule_LDADD = ${deps} $(TRIANGLELIB)  $(GSLLIB)
+ #}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22677-22678.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22677-22678.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22677-22678.diff	(revision 22755)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22677)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22678)
+@@ -54,14 +54,14 @@
+ /* serial input macros: */
+ #define XHANDLE       xIn,nodsIn,1
+ #define YHANDLE       yIn,nodsIn,1
+-#define DATAHANDLE    dataIn,nodsIn,1
+-#define XMESHHANDLE   xMeshIn,nodsIn,1
+-#define YMESHHANDLE   yMeshIn,nodsIn,1
++#define DATAHANDLE    dataIn,dataNumRowsIn,dataNumColsIn
++#define XMESHHANDLE   xMeshIn,meshNumRowsIn,1
++#define YMESHHANDLE   yMeshIn,meshNumRowsIn,1
+ #define DEFAULTHANDLE defaultValue
+ #define INTERPENUM    interpType
+ /* serial output macros: */
+ #define DATAMESH pdataMesh
+-#define WRAPPER(modulename) extern "C" { int InterpFromGridToMeshModule(double** pdataMesh, double* xIn, double* yIn, double* dataIn, double* xMeshIn, double* yMeshIn, double defaultValue, int nodsIn, char* interpType)
++#define WRAPPER(modulename) extern "C" { int InterpFromGridToMeshModule(double** pdataMesh, double* xIn, double* yIn, double* dataIn, double* xMeshIn, double* yMeshIn, double defaultValue, int nodsIn, int dataNumRowsIn, int dataNumColsIn, int meshNumRowsIn, char* interpType)
+ #define nrhs 6
+ #endif
+ 
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22677)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22678)
+@@ -21,6 +21,8 @@
+ 	var data 			= {};
+ 	var dataMesh 		= {};
+ 	var dataMeshPtr 	= {};
++	var	dataNumCols		= 0;
++	var	dataNumRows		= 0;
+ 	var ddata			= {};
+ 	var ddataHeap 		= {};
+ 	var ddataPtr 		= {};
+@@ -37,6 +39,7 @@
+ 	var dyMeshPtr 		= {};
+ 	var dyPtr 			= {};
+ 	var interpType 		= '';
++	var meshNumRows		= 0;
+ 	var ndata			= {};
+ 	var nods 			= 0;
+ 	var nx 				= {};
+@@ -96,6 +99,9 @@
+ 	yMesh 		= dyMeshHeap.byteOffset;
+ 	
+ 	nods 		= xIn.length;
++	dataNumRows	= dataIn.length;
++	dataNumCols	= dataIn[0].length;
++	meshNumRows	= xMeshIn.length;
+ 	
+ 	
+ 	/*
+@@ -134,6 +140,9 @@
+ 			'number', // input	: yMesh
+ 			'number', // input 	: defaultValue
+ 			'number', // input	: nods
++			'number', // input	: dataNumRows
++			'number', // input	: dataNumCols
++			'number', // input	: meshNumRows
+ 			'string', // input	: interpType
+ 		]
+ 	);
+@@ -153,6 +162,9 @@
+ 		yMesh, 
+ 		defaultValue, 
+ 		nods,
++		dataNumRows,
++		dataNumCols,
++		meshNumRows,
+ 		interpType
+ 	);
+ 	//}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22678-22679.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22678-22679.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22678-22679.diff	(revision 22755)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22678)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22679)
+@@ -13,7 +13,7 @@
+  *	interpType (optional) 		: interpolation type
+  * 	dataMesh					: array of mesh interpolated data
+  */
+-function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue) {
++function InterpFromGridToMesh(xIn,yIn,dataIn,dataNumColsIn,dataNumRowsIn,xMeshIn,yMeshIn,defaultValue) {
+ 	/*
+ 		Variables
+ 	*/
+@@ -21,8 +21,6 @@
+ 	var data 			= {};
+ 	var dataMesh 		= {};
+ 	var dataMeshPtr 	= {};
+-	var	dataNumCols		= 0;
+-	var	dataNumRows		= 0;
+ 	var ddata			= {};
+ 	var ddataHeap 		= {};
+ 	var ddataPtr 		= {};
+@@ -99,8 +97,6 @@
+ 	yMesh 		= dyMeshHeap.byteOffset;
+ 	
+ 	nods 		= xIn.length;
+-	dataNumRows	= dataIn.length;
+-	dataNumCols	= dataIn[0].length;
+ 	meshNumRows	= xMeshIn.length;
+ 	
+ 	
+@@ -143,7 +139,7 @@
+ 			'number', // input	: dataNumRows
+ 			'number', // input	: dataNumCols
+ 			'number', // input	: meshNumRows
+-			'string', // input	: interpType
++			'string'  // input	: interpType
+ 		]
+ 	);
+ 	//}}}
+@@ -162,8 +158,8 @@
+ 		yMesh, 
+ 		defaultValue, 
+ 		nods,
+-		dataNumRows,
+-		dataNumCols,
++		dataNumRowsIn,
++		dataNumColsIn,
+ 		meshNumRows,
+ 		interpType
+ 	);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22679-22680.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22679-22680.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22679-22680.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22679)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22680)
+@@ -171,7 +171,7 @@
+ 	*/
+ 	//{{{
+ 	dataMeshPtr	= Module.getValue(pdataMesh, 'i32');
+-	dataMesh	= Module.HEAP64.slice(dataMeshPtr / 8, dataMeshPtr / 8 + nods);
++	dataMesh	= Module.HEAPF64.slice(dataMeshPtr / 8, dataMeshPtr / 8 + nods);
+ 	//}}}
+ 	
+ 	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22680-22681.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22680-22681.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22680-22681.diff	(revision 22755)
@@ -0,0 +1,298 @@
+Index: ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F	(revision 22680)
++++ ../trunk-jpl/test/MITgcm/code/do_oceanic_phys.F	(revision 22681)
+@@ -533,9 +533,8 @@
+ #endif /* ALLOW_THSICE */
+ #endif /* OLD_THSICE_CALL_SEQUENCE */
+ 
+-#define ALLOW_CPL_ISSM
+ #ifdef ALLOW_CPL_ISSM
+-      CALL CPL_ISSM( myTime, myIter, myThid )
++      IF ( useCoupler) CALL CPL_ISSM( myTime, myIter, myThid )
+ #endif
+ 
+ #ifdef ALLOW_SHELFICE
+Index: ../trunk-jpl/test/MITgcm/code/CPP_EEOPTIONS.h
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/CPP_EEOPTIONS.h	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/code/CPP_EEOPTIONS.h	(revision 22681)
+@@ -0,0 +1,167 @@
++C $Header: /u/gcmpack/MITgcm/eesupp/inc/CPP_EEOPTIONS.h,v 1.43 2017/09/14 19:47:35 jmc Exp $
++C $Name:  $
++
++CBOP
++C     !ROUTINE: CPP_EEOPTIONS.h
++C     !INTERFACE:
++C     include "CPP_EEOPTIONS.h"
++C
++C     !DESCRIPTION:
++C     *==========================================================*
++C     | CPP\_EEOPTIONS.h                                         |
++C     *==========================================================*
++C     | C preprocessor "execution environment" supporting        |
++C     | flags. Use this file to set flags controlling the        |
++C     | execution environment in which a model runs - as opposed |
++C     | to the dynamical problem the model solves.               |
++C     | Note: Many options are implemented with both compile time|
++C     |       and run-time switches. This allows options to be   |
++C     |       removed altogether, made optional at run-time or   |
++C     |       to be permanently enabled. This convention helps   |
++C     |       with the data-dependence analysis performed by the |
++C     |       adjoint model compiler. This data dependency       |
++C     |       analysis can be upset by runtime switches that it  |
++C     |       is unable to recoginise as being fixed for the     |
++C     |       duration of an integration.                        |
++C     |       A reasonable way to use these flags is to          |
++C     |       set all options as selectable at runtime but then  |
++C     |       once an experimental configuration has been        |
++C     |       identified, rebuild the code with the appropriate  |
++C     |       options set at compile time.                       |
++C     *==========================================================*
++CEOP
++
++#ifndef _CPP_EEOPTIONS_H_
++#define _CPP_EEOPTIONS_H_
++
++C     In general the following convention applies:
++C     ALLOW  - indicates an feature will be included but it may
++C     CAN      have a run-time flag to allow it to be switched
++C              on and off.
++C              If ALLOW or CAN directives are "undef'd" this generally
++C              means that the feature will not be available i.e. it
++C              will not be included in the compiled code and so no
++C              run-time option to use the feature will be available.
++C
++C     ALWAYS - indicates the choice will be fixed at compile time
++C              so no run-time option will be present
++
++C=== Macro related options ===
++C--   Control storage of floating point operands
++C     On many systems it improves performance only to use
++C     8-byte precision for time stepped variables.
++C     Constant in time terms ( geometric factors etc.. )
++C     can use 4-byte precision, reducing memory utilisation and
++C     boosting performance because of a smaller working set size.
++C     However, on vector CRAY systems this degrades performance.
++C     Enable to switch REAL4_IS_SLOW from genmake2 (with LET_RS_BE_REAL4):
++#ifdef LET_RS_BE_REAL4
++#undef REAL4_IS_SLOW
++#else /* LET_RS_BE_REAL4 */
++#define REAL4_IS_SLOW
++#endif /* LET_RS_BE_REAL4 */
++
++C--   Control use of "double" precision constants.
++C     Use D0 where it means REAL*8 but not where it means REAL*16
++#define D0 d0
++
++C--   Enable some old macro conventions for backward compatibility
++#undef USE_OLD_MACROS_R4R8toRSRL
++
++C=== IO related options ===
++C--   Flag used to indicate whether Fortran formatted write
++C     and read are threadsafe. On SGI the routines can be thread
++C     safe, on Sun it is not possible - if you are unsure then
++C     undef this option.
++#undef FMTFTN_IO_THREAD_SAFE
++
++C--   Flag used to indicate whether Binary write to Local file (i.e.,
++C     a different file for each tile) and read are thread-safe.
++#undef LOCBIN_IO_THREAD_SAFE
++
++C--   Flag to turn off the writing of error message to ioUnit zero
++#undef DISABLE_WRITE_TO_UNIT_ZERO
++
++C--   Alternative formulation of BYTESWAP, faster than
++C     compiler flag -byteswapio on the Altix.
++#undef FAST_BYTESWAP
++
++C--   Flag to turn on old default of opening scratch files with the
++C     STATUS='SCRATCH' option. This method, while perfectly FORTRAN-standard,
++C     caused filename conflicts on some multi-node/multi-processor platforms
++C     in the past and has been replace by something (hopefully) more robust.
++#undef USE_FORTRAN_SCRATCH_FILES
++
++C--   Flag defined for eeboot_minimal.F, eeset_parms.F and open_copy_data_file.F
++C     to write STDOUT, STDERR and scratch files from process 0 only.
++C WARNING: to use only when absolutely confident that the setup is working
++C     since any message (error/warning/print) from any proc <> 0 will be lost.
++#undef SINGLE_DISK_IO
++
++C=== MPI, EXCH and GLOBAL_SUM related options ===
++C--   Flag turns off MPI_SEND ready_to_receive polling in the
++C     gather_* subroutines to speed up integrations.
++#undef DISABLE_MPI_READY_TO_RECEIVE
++
++C--   Control MPI based parallel processing
++CXXX We no longer select the use of MPI via this file (CPP_EEOPTIONS.h)
++CXXX To use MPI, use an appropriate genmake2 options file or use
++CXXX genmake2 -mpi .
++CXXX #undef  ALLOW_USE_MPI
++
++C--   Control use of communication that might overlap computation.
++C     Under MPI selects/deselects "non-blocking" sends and receives.
++#define ALLOW_ASYNC_COMMUNICATION
++#undef  ALLOW_ASYNC_COMMUNICATION
++#undef  ALWAYS_USE_ASYNC_COMMUNICATION
++C--   Control use of communication that is atomic to computation.
++C     Under MPI selects/deselects "blocking" sends and receives.
++#define ALLOW_SYNC_COMMUNICATION
++#undef  ALWAYS_USE_SYNC_COMMUNICATION
++
++C--   Control XY periodicity in processor to grid mappings
++C     Note: Model code does not need to know whether a domain is
++C           periodic because it has overlap regions for every box.
++C           Model assume that these values have been
++C           filled in some way.
++#undef  ALWAYS_PREVENT_X_PERIODICITY
++#undef  ALWAYS_PREVENT_Y_PERIODICITY
++#define CAN_PREVENT_X_PERIODICITY
++#define CAN_PREVENT_Y_PERIODICITY
++
++C--   disconnect tiles (no exchange between tiles, just fill-in edges
++C     assuming locally periodic subdomain)
++#undef DISCONNECTED_TILES
++
++C--   Always cumulate tile local-sum in the same order by applying MPI allreduce
++C     to array of tiles ; can get slower with large number of tiles (big set-up)
++#define GLOBAL_SUM_ORDER_TILES
++
++C--   Alternative way of doing global sum without MPI allreduce call
++C     but instead, explicit MPI send & recv calls. Expected to be slower.
++#undef GLOBAL_SUM_SEND_RECV
++
++C--   Alternative way of doing global sum on a single CPU
++C     to eliminate tiling-dependent roundoff errors. Note: This is slow.
++#undef  CG2D_SINGLECPU_SUM
++
++C=== Other options (to add/remove pieces of code) ===
++C--   Flag to turn on checking for errors from all threads and procs
++C     (calling S/R STOP_IF_ERROR) before stopping.
++#define USE_ERROR_STOP
++
++C--   Control use of communication with other component:
++C     allow to import and export from/to Coupler interface.
++#undef COMPONENT_MODULE
++
++C--   Options used to couple MITgcm and ISSM
++C     Eventually this option can probably be merged with COMPONENT_MODULE
++#define ALLOW_CPL_ISSM
++
++C--   Activate some pieces of code for coupling to GEOS AGCM
++#undef HACK_FOR_GMAO_CPL
++
++#endif /* _CPP_EEOPTIONS_H_ */
++
++#include "CPP_EEMACROS.h"
++
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22680)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22681)
+@@ -1,8 +1,6 @@
+ #include "PACKAGES_CONFIG.h"
+ #include "CPP_OPTIONS.h"
+ 
+-#define ALLOW_CPL_ISSM
+-
+ CBOP
+ C     !ROUTINE: CPL_ISSM
+ C     !INTERFACE:
+Index: ../trunk-jpl/test/MITgcm/code/eedie.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eedie.F	(revision 22680)
++++ ../trunk-jpl/test/MITgcm/code/eedie.F	(revision 22681)
+@@ -87,13 +87,12 @@
+ 
+ C--   MPI style multiple-process termination
+ C--   ======================================
+-#ifdef COMPONENT_MODULE
++#if (defined COMPONENT_MODULE) || (defined ALLOW_CPL_ISSM)
+        IF ( useCoupler) CALL MPI_BARRIER( MPI_COMM_WORLD, mpiRC )
+ #endif
+ #ifdef ALLOW_OASIS
+        IF ( useOASIS ) CALL OASIS_FINALIZE
+ #endif
+-       CALL MPI_BARRIER( MPI_COMM_WORLD, mpiRC )
+        CALL MPI_FINALIZE  ( mpiRC )
+        IF ( mpiRC .NE. MPI_SUCCESS ) THEN
+         eeEndError = .TRUE.
+Index: ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22680)
++++ ../trunk-jpl/test/MITgcm/code/eeboot_minimal.F	(revision 22681)
+@@ -4,8 +4,6 @@
+ #include "PACKAGES_CONFIG.h"
+ #include "CPP_EEOPTIONS.h"
+ 
+-#define ALLOW_CPL_ISSM
+-
+ CBOP
+ C     !ROUTINE: EEBOOT_MINIMAL
+ 
+@@ -68,7 +66,6 @@
+       COMMON /CPL_MPI_ID/ mpiMyWid, toissmcomm
+       INTEGER             mpiMyWid, toissmcomm
+       INTEGER my_local_rank,my_local_size, numprocsworld
+-      INTEGER dummy1(1),dummy2(1)
+       INTEGER status(MPI_STATUS_SIZE)
+ #endif /* ALLOW_CPL_ISSM */
+ #if defined(ALLOW_NEST_PARENT) || defined(ALLOW_NEST_CHILD)
+@@ -182,38 +179,31 @@
+ #endif /* ALLOW_NEST_PARENT | ALLOW_NEST_CHILD */
+ 
+ #ifdef ALLOW_CPL_ISSM
+-       call MPI_COMM_RANK(MPI_COMM_WORLD, mpiMyWid, mpiRC)
+-       call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocsworld, mpiRC)
++C     add a 1rst preliminary call EESET_PARAMS to set useCoupler
++       CALL MPI_COMM_RANK(MPI_COMM_WORLD, mpiMyWid, mpiRC)
++       CALL EESET_PARMS ( mpiMyWId, doReport )
+ 
++       IF ( useCoupler ) THEN
++          CALL MPI_COMM_SIZE(MPI_COMM_WORLD, numprocsworld, mpiRC)
++
+ c     Split world into sub-communicators for each and every model:*/
+-      call MPI_COMM_SPLIT(MPI_COMM_WORLD,1,MPIMYWID,
+-     &                    MPI_COMM_MODEL,mpiRC)
++          CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,1,MPIMYWID,
++     &         MPI_COMM_MODEL,mpiRC)
+ 
+-      print*,'Oc My global rank',mpiMyWid
+-      print*,'Oc My world size:',numprocsworld
++          print*,'Oc My global rank',mpiMyWid
++          print*,'Oc My world size:',numprocsworld
+ 
+-      call MPI_INTERCOMM_CREATE(MPI_COMM_MODEL,0,MPI_COMM_WORLD,
+-     &                          0,0,toissmcomm,mpiRC)
+-      
+-      call MPI_COMM_RANK(MPI_COMM_MODEL, my_local_rank, mpiRC)
+-      call MPI_COMM_SIZE(MPI_COMM_MODEL, my_local_size, mpiRC)
++          CALL MPI_INTERCOMM_CREATE(MPI_COMM_MODEL,0,MPI_COMM_WORLD,
++     &         0,0,toissmcomm,mpiRC)
+ 
+-      print*,'Oc My global rank',mpiMyWid,'MyLocal rank: ',my_local_rank
+-      print*,'Oc My world size:',numprocsworld,'My local size: ',
+-     &     my_local_size
++          CALL MPI_COMM_RANK(MPI_COMM_MODEL, my_local_rank, mpiRC)
++          CALL MPI_COMM_SIZE(MPI_COMM_MODEL, my_local_size, mpiRC)
+ 
+-
+-c     receive and send an integer:
+-      dummy1(1)=4; dummy2(1)=2;
+-         
+-      if (my_local_rank .eq. 0) then
+-cdb          call MPI_Send(dummy2,1,MPI_INT,0,1,toissmcomm,mpiRC)
+-cdb          call MPI_Recv(dummy1,1,MPI_INT,0,1,toissmcomm,status,mpiRC)
+-      end if
+-      
+-cdb      call MPI_Bcast(dummy1,1,MPI_INT,0,MPI_COMM_MODEL,mpiRC)
+-cdb      print*, 'Ocean : dummy received:',dummy1
+-
++          print*,'Oc My global rank',mpiMyWid,'MyLocal rank: ',
++     &         my_local_rank
++          print*,'Oc My world size:',numprocsworld,'My local size: ',
++     &         my_local_size
++       ENDIF
+ #endif /* ALLOW_CPL_ISSM */
+ 
+ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
Index: /issm/oecreview/Archive/21724-22754/ISSM-22681-22682.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22681-22682.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22681-22682.diff	(revision 22755)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/test/MITgcm/input/eedata_uncoupled
+===================================================================
+--- ../trunk-jpl/test/MITgcm/input/eedata_uncoupled	(nonexistent)
++++ ../trunk-jpl/test/MITgcm/input/eedata_uncoupled	(revision 22682)
+@@ -0,0 +1,10 @@
++# Example "eedata" file
++# Lines beginning "#" are comments
++# nTx - No. threads per process in X
++# nTy - No. threads per process in Y
++ &EEPARMS
++ useCoupler=.FALSE.,
++ &
++# Note: Some systems use & as the
++# namelist terminator. Other systems
++# use a / character (as shown here).
+Index: ../trunk-jpl/test/MITgcm/input/eedata
+===================================================================
+--- ../trunk-jpl/test/MITgcm/input/eedata	(revision 22681)
++++ ../trunk-jpl/test/MITgcm/input/eedata	(revision 22682)
+@@ -3,6 +3,7 @@
+ # nTx - No. threads per process in X
+ # nTy - No. threads per process in Y
+  &EEPARMS
++ useCoupler=.TRUE.,
+  &
+ # Note: Some systems use & as the
+ # namelist terminator. Other systems
Index: /issm/oecreview/Archive/21724-22754/ISSM-22682-22683.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22682-22683.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22682-22683.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22682)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22683)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[1 2 3 4 5 7 8 9 10 12];
++steps=[1 2 3 4 5 6 7 8 9 10 12];
+ final_time=1;
+ 
+ %Organizer
+@@ -190,6 +190,7 @@
+     !\mkdir run
+     !\cp ../MITgcm/build/mitgcmuv run
+     !\cp ../MITgcm/input/* run
++    !\cp ../MITgcm/input/eedata_uncoupled run/eedata
+     
+     %load data: 
+     loaddata(org,'Parameters');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22683-22684.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22683-22684.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22683-22684.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22683)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22684)
+@@ -68,9 +68,8 @@
+ TODO/WISH LIST
+ * finish initialization 
+    - MITgcm runs 1 time step with ocean ice base, not from ISSM
+-* test4002 working cleanly
+-	- ocean running on its own (Dimitris)
+-	- fix ice runs so that it does not need to crash first (Helene)
+ * ISSM works on interpolation
+ * 1 + 1 = 2 (so pickup working)
+ * change MITgcm to include new base and changes in ocean
++* make sure that RunCoupledMITgcmISSM and RunCoupledMITgcmISSM2
++  can produce the same results!
Index: /issm/oecreview/Archive/21724-22754/ISSM-22684-22685.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22684-22685.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22684-22685.diff	(revision 22755)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22684)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js	(revision 22685)
+@@ -96,7 +96,7 @@
+ 	dyMeshHeap.set(new Uint8Array(dyMesh.buffer));
+ 	yMesh 		= dyMeshHeap.byteOffset;
+ 	
+-	nods 		= xIn.length;
++	nods 		= xMeshIn.length;
+ 	meshNumRows	= xMeshIn.length;
+ 	
+ 	
+@@ -136,8 +136,8 @@
+ 			'number', // input	: yMesh
+ 			'number', // input 	: defaultValue
+ 			'number', // input	: nods
+-			'number', // input	: dataNumRows
+-			'number', // input	: dataNumCols
++			'number', // input	: dataNumRowsIn
++			'number', // input	: dataNumColsIn
+ 			'number', // input	: meshNumRows
+ 			'string'  // input	: interpType
+ 		]
+@@ -184,4 +184,4 @@
+ 	
+ 	
+ 	return dataMesh;
+-}
+\ No newline at end of file
++}
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22684)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22685)
+@@ -52,8 +52,8 @@
+ 
+ #ifdef _HAVE_JAVASCRIPT_MODULES_
+ /* serial input macros: */
+-#define XHANDLE       xIn,nodsIn,1
+-#define YHANDLE       yIn,nodsIn,1
++#define XHANDLE       xIn,dataNumRowsIn,1
++#define YHANDLE       yIn,dataNumColsIn,1
+ #define DATAHANDLE    dataIn,dataNumRowsIn,dataNumColsIn
+ #define XMESHHANDLE   xMeshIn,meshNumRowsIn,1
+ #define YMESHHANDLE   yMeshIn,meshNumRowsIn,1
Index: /issm/oecreview/Archive/21724-22754/ISSM-22685-22686.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22685-22686.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22685-22686.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/jenkins/jenkins.sh
+===================================================================
+--- ../trunk-jpl/jenkins/jenkins.sh	(revision 22685)
++++ ../trunk-jpl/jenkins/jenkins.sh	(revision 22686)
+@@ -240,6 +240,12 @@
+ 	else
+ 		make
+ 	fi
++	if [ $? -ne 0 ] && [ $NUMCPUS_INSTALL -gt 1 ]; then 
++		echo " "
++		echo "Compilation failed, trying to compile with only one threatd"
++		echo " "
++		make
++	fi
+ 	if [ $? -ne 0 ]; then 
+ 		echo "ISSM_COMPILATION failed!"
+ 		exit 1
Index: /issm/oecreview/Archive/21724-22754/ISSM-22686-22687.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22686-22687.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22686-22687.diff	(revision 22755)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/test/NightlyRun/test4001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4001.m	(revision 22686)
++++ ../trunk-jpl/test/NightlyRun/test4001.m	(revision 22687)
+@@ -190,6 +190,7 @@
+     !\mkdir run
+     !\cp ../MITgcm/build/mitgcmuv run
+     !\cp ../MITgcm/input/* run
++    !\cp ../MITgcm/input/eedata_uncoupled run/eedata
+     
+     %load data: 
+     loaddata(org,'Parameters');
+@@ -572,6 +573,7 @@
+         !\mkdir run
+         !\cp ../MITgcm/build/mitgcmuv run
+         !\cp ../MITgcm/input/* run
++        !\cp ../MITgcm/input/eedata_uncoupled run/eedata
+ 
+         %load data: 
+         loaddata(org,'Parameters');
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22686)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22687)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[1 2 3 4 5 6 7 8 9 10 12];
++steps=[1 2 3 4 5 6 7 8 9 10 11 12];
+ final_time=1;
+ 
+ %Organizer
+@@ -573,6 +573,7 @@
+         !\mkdir run
+         !\cp ../MITgcm/build/mitgcmuv run
+         !\cp ../MITgcm/input/* run
++        !\cp ../MITgcm/input/eedata_uncoupled run/eedata
+ 
+         % initial salinity
+         S=iniSalt*ones(Nx,Ny,Nz);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22687-22688.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22687-22688.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22687-22688.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22687)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22688)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',4001"
++MATLAB_NROPTIONS="'benchmark','all','id',[4001 4002]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22688-22689.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22688-22689.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22688-22689.diff	(revision 22755)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/wrappers/javascript/io/WriteJavascriptData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/io/WriteJavascriptData.cpp	(revision 22688)
++++ ../trunk-jpl/src/wrappers/javascript/io/WriteJavascriptData.cpp	(revision 22689)
+@@ -77,6 +77,28 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION WriteData(IssmPDouble* pdouble, IssmSeqVec<double> vector){{{*/
++void WriteData(IssmPDouble** pdataref, IssmSeqVec<double>* vector){
++
++    double*  dataref=NULL;
++    double*  vector_ptr=NULL;
++    int      rows;
++
++    if(vector){
++        /*call toolkit routine: */
++        vector_ptr=vector->ToMPISerial();
++        vector->GetSize(&rows);
++
++        /*now create the js vector */
++		dataref=xNew<double>(rows); 
++        for(int i=0;i<rows;i++) dataref[i]=vector_ptr[i];
++    }
++
++    /*Clean-up and return*/
++    xDelete<double>(vector_ptr);
++    *pdataref=dataref;
++}
++/*}}}*/
+ /*FUNCTION WriteData(IssmPDouble* pdouble, IssmPDouble double){{{*/
+ void WriteData(IssmPDouble* pdouble, IssmPDouble doublein){
+ 
+Index: ../trunk-jpl/src/wrappers/javascript/io/javascriptio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/javascript/io/javascriptio.h	(revision 22688)
++++ ../trunk-jpl/src/wrappers/javascript/io/javascriptio.h	(revision 22689)
+@@ -24,6 +24,7 @@
+ void WriteData(IssmPDouble** px, int* pnods, double* vector, int M);
+ void WriteData(char** pstring, char* stringin);
+ void WriteData(IssmPDouble* pdouble, IssmPDouble doublein);
++void WriteData(IssmPDouble** pdataref, IssmSeqVec<double>* vector);
+ void WriteData(IssmPDouble** pdouble, void*);
+ 
+ void FetchData(char** pstring, char* stringin);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22689-22690.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22689-22690.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22689-22690.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22689)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22690)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',[4001 4002]"
++MATLAB_NROPTIONS="'benchmark','all','id',4001"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22690-22691.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22690-22691.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22690-22691.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22690)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22691)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',4001"
++MATLAB_NROPTIONS="'benchmark','all','id',4002"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22691-22692.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22691-22692.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22691-22692.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22691)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22692)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',4002"
++MATLAB_NROPTIONS="'benchmark','all','id',4001"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22692-22693.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22692-22693.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22692-22693.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22692)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22693)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[1 2 3 4 5 6 7 8 9 10 11 12];
++steps=[1 2 3 4 5 6 7 8 9 10 11];
+ final_time=1;
+ 
+ %Organizer
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22692)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22693)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',4001"
++MATLAB_NROPTIONS="'benchmark','all','id',4002"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22693-22694.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22693-22694.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22693-22694.diff	(revision 22755)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22693)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22694)
+@@ -54,5 +54,5 @@
+ #as follows: runme($MATLAB_NROPTIONS). The options must be understandable
+ #by Matlab and runme.m
+ #ex: "'id',[101 102 103]"
+-MATLAB_NROPTIONS="'benchmark','all','id',4002"
++MATLAB_NROPTIONS="'benchmark','all','id',[4001 4002]"
+ PYTHON_NROPTIONS=""
Index: /issm/oecreview/Archive/21724-22754/ISSM-22694-22695.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22694-22695.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22694-22695.diff	(revision 22755)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22694)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22695)
+@@ -27,6 +27,7 @@
+ 1. ISSM sends ice model time IceTimeTag
+ 2. MITgcm sends ocean model time OceanTimeTag
+ 3. ISSM sends CouplingTime=0 base to MITgcm (this is duplicate of Initialization)
++		base should be 9999 in areas not covered by the ice grid
+ 4. ISSM integrates for CouplingTime=0:1
+ 5. MITgcm integrates for CouplingTime=1:2
+ 6. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
+@@ -37,6 +38,7 @@
+ 1. ISSM sends ice model time IceTimeTag
+ 2. MITgcm sends ocean model time OceanTimeTag
+ 3. ISSM sends CouplingTime=N-1 base to MITgcm
++		base should be 9999 in areas not covered by the ice grid
+ 4. ISSM integrates for CouplingTime=(N-1):N
+ 5. MITgcm integrates for CouplingTime=N:(N+1)
+ 6. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
+@@ -58,6 +60,7 @@
+ 1. ISSM sends ice model time IceTimeTag
+ 2. MITgcm sends ocean model time OceanTimeTag
+ 3. ISSM sends CouplingTime=N base to MITgcm
++		base should be 9999 in areas not covered by the ice grid
+ 4. ISSM integrates for CouplingTime=N:(N+1)
+ 5. MITgcm integrates for CouplingTime=(N+1):(N+2)
+ 6. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
+@@ -68,6 +71,7 @@
+ TODO/WISH LIST
+ * finish initialization 
+    - MITgcm runs 1 time step with ocean ice base, not from ISSM
++* do other time steps (coupling time = N)
+ * ISSM works on interpolation
+ * 1 + 1 = 2 (so pickup working)
+ * change MITgcm to include new base and changes in ocean
Index: /issm/oecreview/Archive/21724-22754/ISSM-22695-22696.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22695-22696.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22695-22696.diff	(revision 22755)
@@ -0,0 +1,105 @@
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ export BOOST_ROOT=$ISSM_DIR/externalpackages/boost/install
+ 
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ export BOOST_ROOT=$ISSM_DIR/externalpackages/boost/install
+ 
+Index: ../trunk-jpl/externalpackages/dakota/configs/6.2/sandia_rules.cpp.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/6.2/sandia_rules.cpp.patch	(nonexistent)
++++ ../trunk-jpl/externalpackages/dakota/configs/6.2/sandia_rules.cpp.patch	(revision 22696)
+@@ -0,0 +1,4 @@
++24145c24145
++<     if ( i_hi < 0 )
++---
++>     if ( *i_hi < 0 )
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22695)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22696)
+@@ -31,6 +31,7 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Setting CXXFLAGS to deal with C++11 incompatibility with Matlab's Boost
+ export CXXFLAGS='-std=c++98'
Index: /issm/oecreview/Archive/21724-22754/ISSM-22696-22697.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22696-22697.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22696-22697.diff	(revision 22755)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/externalpackages/valgrind/issm.supp
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 22696)
++++ ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 22697)
+@@ -73,6 +73,23 @@
+ 	  obj:*
+ 	  obj:*
+ }
++{
++	<OS4>
++	  Memcheck:Cond
++	  fun:index
++	  fun:expand_dynamic_string_token
++	  fun:fillin_rpath
++	  fun:_dl_init_paths
++	  fun:dl_main
++	  fun:_dl_sysdep_start
++	  fun:_dl_start_final
++	  fun:_dl_start
++	  obj:/lib/x86_64-linux-gnu/ld-2.19.so
++	  obj:*
++	  obj:*
++	  obj:*
++	  obj:*
++}
+ #}}}
+ #PETSc {{{
+ {
+@@ -276,4 +293,36 @@
+ 	  fun:dmumps_
+ 	  fun:dmumps_f77_
+ }
++{
++	<mumps16>
++	  Memcheck:Cond
++	  fun:MPIC_Waitall
++	  fun:MPIR_Alltoall_intra
++	  fun:MPIR_Alltoall
++	  fun:MPIR_Alltoall_impl
++	  fun:PMPI_Alltoall
++	  fun:PMPI_ALLTOALL
++	  fun:__dmumps_parallel_analysis_MOD_dmumps_build_dist_graph
++	  fun:__dmumps_parallel_analysis_MOD_dmumps_parmetis_ord
++	  fun:__dmumps_parallel_analysis_MOD_dmumps_do_par_ord
++	  fun:__dmumps_parallel_analysis_MOD_dmumps_ana_f_par
++	  fun:dmumps_ana_driver_
++	  fun:dmumps_
++}
++{
++	<iparmetis1>
++	  Memcheck:Cond
++	  fun:MPIC_Waitall
++	  fun:MPIR_Scatterv
++	  fun:MPIR_Scatterv_impl
++	  fun:PMPI_Scatterv
++	  fun:libparmetis__gkMPI_Scatterv
++	  fun:libparmetis__InitMultisection
++	  fun:libparmetis__Order_Partition
++	  fun:libparmetis__Order_Partition_Multiple
++	  fun:libparmetis__MultilevelOrder
++	  fun:ParMETIS_V32_NodeND
++	  fun:ParMETIS_V3_NodeND
++	  fun:mumps_parmetis_
++}
+ #}}}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22697-22698.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22697-22698.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22697-22698.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vimrc
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 22697)
++++ ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 22698)
+@@ -207,7 +207,7 @@
+ au BufRead,BufNewFile *.html   iabbr <silent> H3 <h3></h3><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+ au BufRead,BufNewFile *.html   iabbr <silent> CO <code></code><Left><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+ au BufRead,BufNewFile *.html   iabbr <silent> PP <p></p><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-"au BufRead,BufNewFile *.m      iabbr <silent> p1  disp('');<Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.m      iabbr <silent> p1  disp('');<Left><Left><Left><C-R>=Eatchar('\s')<CR>
+ au BufRead,BufNewFile *.m      iab <expr> p0  "disp('-------------- file: ".expand('%')." line: ".line(".")."');"
+ au BufRead,BufNewFile *.c*,*.h iabbr <silent> p1  printf("\n");<Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+ au BufRead,BufNewFile *.c*,*.h iabbr <silent> ER  _error_("");<Left><Left><Left><C-R>=Eatchar('\s')<CR>
Index: /issm/oecreview/Archive/21724-22754/ISSM-22698-22699.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22698-22699.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22698-22699.diff	(revision 22755)
@@ -0,0 +1,178 @@
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-highsierra.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-highsierra.sh	(nonexistent)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-highsierra.sh	(revision 22699)
+@@ -0,0 +1,70 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf Dakota
++rm -rf src 
++rm -rf build 
++rm -rf install 
++mkdir src build install 
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/dakota-6.2-public.src.tar.gz' 'dakota-6.2-public-src.tar.gz'
++
++#Untar 
++tar -zxvf dakota-6.2-public-src.tar.gz
++
++#Move Dakota to src directory
++mv dakota-6.2.0.src/* src
++rm -rf dakota-6.2.0.src
++
++#Set up Dakota cmake variables and config
++export DAK_SRC=$ISSM_DIR/externalpackages/dakota/src
++export DAK_BUILD=$ISSM_DIR/externalpackages/dakota/build
++export MPIHOME=$ISSM_DIR/externalpackages/mpich/install
++cp $DAK_SRC/cmake/BuildDakotaTemplate.cmake $DAK_SRC/cmake/BuildDakotaCustom.cmake
++patch $DAK_SRC/cmake/BuildDakotaCustom.cmake configs/6.2/BuildDakotaCustom.cmake.mac.patch
++patch $DAK_SRC/cmake/DakotaDev.cmake configs/6.2/DakotaDev.cmake.patch
++patch $DAK_SRC/CMakeLists.txt configs/6.2/CMakeLists.txt.patch
++
++#Apply patches
++patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
++patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
++patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
++patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
++
++export BOOST_ROOT=$ISSM_DIR/externalpackages/boost/install
++
++#Configure dakota
++# Set your local gcc compiler here
++cd $DAK_BUILD
++cmake -DBoost_NO_BOOST_CMAKE=TRUE \
++	-DBoost_NO_SYSTEM_PATHS=TRUE \
++	-DBOOST_ROOT:PATHNAME=$BOOST_ROOT \
++	-DBoost_LIBRARY_DIRS:FILEPATH=${BOOST_ROOT}/lib \
++	-D CMAKE_C_COMPILER=$ISSM_DIR/externalpackages/mpich/install/bin/mpicc \
++	-D CMAKE_CXX_COMPILER=$ISSM_DIR/externalpackages/mpich/install/bin/mpicxx \
++	-D CMAKE_Fortran_COMPILER=$ISSM_DIR/externalpackages/mpich/install/bin/mpif77 \
++	-D CMAKE_CXX_FLAGS=-fdelayed-template-parsing \
++	-DHAVE_ACRO=off \
++	-DHAVE_JEGA=off \
++	-C $DAK_SRC/cmake/BuildDakotaCustom.cmake \
++	-C $DAK_SRC/cmake/DakotaDev.cmake \
++	$DAK_SRC
++cd ..
++
++# Snowleopard: Mpi should be made with these compilers
++#-DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_CC_COMPILER=/usr/bin/gcc \
++#-DCMAKE_Fortran_COMPILER=/usr/local/gfortran/bin/x86_64-apple-darwin10-gfortran \
++
++#Compile and install dakota
++cd $DAK_BUILD
++if [ $# -eq 0 ];
++then
++	make
++	make install
++else
++	make -j $1
++	make -j $1 install
++fi
++cd ..
+
+Property changes on: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-highsierra.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ export BOOST_ROOT=$ISSM_DIR/externalpackages/boost/install
+ 
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Configure dakota
+ cd $DAK_BUILD
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ export BOOST_ROOT=$ISSM_DIR/externalpackages/boost/install
+ 
+Index: ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22698)
++++ ../trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh	(revision 22699)
+@@ -31,7 +31,6 @@
+ patch src/src/NonDSampling.cpp configs/6.2/NonDSampling.cpp.patch
+ patch src/src/NonDLocalReliability.cpp configs/6.2/NonDLocalReliability.cpp.patch
+ patch src/packages/pecos/src/pecos_global_defs.hpp configs/6.2/pecos_global_defs.hpp.patch
+-patch src/packages/VPISparseGrid/src/sandia_rules.cpp configs/6.2/sandia_rules.cpp.patch
+ 
+ #Setting CXXFLAGS to deal with C++11 incompatibility with Matlab's Boost
+ export CXXFLAGS='-std=c++98'
Index: /issm/oecreview/Archive/21724-22754/ISSM-22699-22700.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22699-22700.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22699-22700.diff	(revision 22755)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22699)
++++ ../trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 22700)
+@@ -132,6 +132,16 @@
+ 		 input_enum        = BalancethicknessSpcthicknessEnum;
+ 		 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+ 	}
++	else if(strcmp(string_in,"CalvingMeltingrate")==0){
++		const char* field = "md.calving.meltingrate";
++		input_enum        = CalvingMeltingrateEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
++	else if(strcmp(string_in,"CalvingStressThresholdGroundedice")==0){
++		const char* field = "md.calving.stress_threshold_groundedice";
++		input_enum        = CalvingStressThresholdGroundediceEnum;
++		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
++	}
+ 	else{
+ 		_error_("Field \""<<string_in<<"\" not supported yet");
+ 	}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22700-22701.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22700-22701.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22700-22701.diff	(revision 22755)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/plot/plot_gridded.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 22700)
++++ ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 22701)
+@@ -50,11 +50,17 @@
+ map    = getcolormap(options);
+ image_rgb = ind2rgb(uint16((data_grid - data_min)*(length(map)/(data_max-data_min))),map);
+ if exist(options,'shaded'),
++
++	if exist(options,'dem'),
++		dem_grid=InterpFromMeshToGrid(elements,x,y,getfieldvalue(options,'dem'),x_m,y_m,NaN);
++	else
++		dem_grid=data_grid_save;
++	end
+ 	a    = -45;
+ 	scut = 0.2;
+ 	c    = 1;
+ 	% computes lighting from elevation gradient
+-	[fx,fy] = gradient(data_grid_save,x_m,y_m);
++	[fx,fy] = gradient(dem_grid,x_m,y_m);
+ 	fxy = -fx*sind(a) - fy*cosd(a);
+ 	clear fx fy % free some memory...
+ 	fxy(isnan(fxy)) = 0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22701-22702.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22701-22702.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22701-22702.diff	(revision 22755)
@@ -0,0 +1,165 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22701)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22702)
+@@ -475,6 +475,10 @@
+ 	MisfitEnum,
+ 	NeumannfluxEnum,
+ 	NodeEnum,
++	OceanGridNxEnum,
++	OceanGridNyEnum,
++	OceanGridXEnum,
++	OceanGridYEnum,
+ 	OmegaAbsGradientEnum,
+ 	P0Enum,
+ 	P1Enum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22701)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22702)
+@@ -481,6 +481,10 @@
+ 		case MisfitEnum : return "Misfit";
+ 		case NeumannfluxEnum : return "Neumannflux";
+ 		case NodeEnum : return "Node";
++		case OceanGridNxEnum : return "OceanGridNx";
++		case OceanGridNyEnum : return "OceanGridNy";
++		case OceanGridXEnum : return "OceanGridX";
++		case OceanGridYEnum : return "OceanGridY";
+ 		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
+ 		case P0Enum : return "P0";
+ 		case P1Enum : return "P1";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22701)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22702)
+@@ -490,6 +490,10 @@
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+ 	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
++	      else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum;
++	      else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum;
++	      else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum;
++	      else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum;
+ 	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+@@ -501,14 +505,14 @@
+ 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+ 	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+ 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+-	      else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+ 	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
++	      else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum;
+ 	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+ 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
+ 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
+@@ -624,14 +628,14 @@
+ 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+ 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+ 	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
+-	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
++         else stage=6;
++   }
++   if(stage==6){
++	      if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+-         else stage=6;
+-   }
+-   if(stage==6){
+-	      if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
++	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+ 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
+ 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
+ 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+@@ -747,14 +751,14 @@
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
+-	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
++	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
+ 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
+ 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+@@ -870,14 +874,14 @@
+ 	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+-	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"MinVy")==0) return MinVyEnum;
++	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
+ 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
+ 	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+ 	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+@@ -993,14 +997,14 @@
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+-	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
++	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+@@ -1116,14 +1120,14 @@
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+-	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+ 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
++	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22702-22703.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22702-22703.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22702-22703.diff	(revision 22755)
@@ -0,0 +1,246 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22702)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22703)
+@@ -205,6 +205,10 @@
+ 	ModelIdEnum,
+ 	NodesEnum,
+ 	NumModelsEnum,
++	OceanGridNxEnum,
++	OceanGridNyEnum,
++	OceanGridXEnum,
++	OceanGridYEnum,
+ 	OutputBufferPointerEnum,
+ 	OutputBufferSizePointerEnum,
+ 	OutputdefinitionEnum,
+@@ -475,10 +479,6 @@
+ 	MisfitEnum,
+ 	NeumannfluxEnum,
+ 	NodeEnum,
+-	OceanGridNxEnum,
+-	OceanGridNyEnum,
+-	OceanGridXEnum,
+-	OceanGridYEnum,
+ 	OmegaAbsGradientEnum,
+ 	P0Enum,
+ 	P1Enum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22702)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22703)
+@@ -213,6 +213,10 @@
+ 		case ModelIdEnum : return "ModelId";
+ 		case NodesEnum : return "Nodes";
+ 		case NumModelsEnum : return "NumModels";
++		case OceanGridNxEnum : return "OceanGridNx";
++		case OceanGridNyEnum : return "OceanGridNy";
++		case OceanGridXEnum : return "OceanGridX";
++		case OceanGridYEnum : return "OceanGridY";
+ 		case OutputBufferPointerEnum : return "OutputBufferPointer";
+ 		case OutputBufferSizePointerEnum : return "OutputBufferSizePointer";
+ 		case OutputdefinitionEnum : return "Outputdefinition";
+@@ -481,10 +485,6 @@
+ 		case MisfitEnum : return "Misfit";
+ 		case NeumannfluxEnum : return "Neumannflux";
+ 		case NodeEnum : return "Node";
+-		case OceanGridNxEnum : return "OceanGridNx";
+-		case OceanGridNyEnum : return "OceanGridNy";
+-		case OceanGridXEnum : return "OceanGridX";
+-		case OceanGridYEnum : return "OceanGridY";
+ 		case OmegaAbsGradientEnum : return "OmegaAbsGradient";
+ 		case P0Enum : return "P0";
+ 		case P1Enum : return "P1";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22702)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22703)
+@@ -216,6 +216,10 @@
+ 	      else if (strcmp(name,"ModelId")==0) return ModelIdEnum;
+ 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+ 	      else if (strcmp(name,"NumModels")==0) return NumModelsEnum;
++	      else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum;
++	      else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum;
++	      else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum;
++	      else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum;
+ 	      else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum;
+ 	      else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+@@ -255,14 +259,14 @@
+ 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+ 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+ 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+-	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
+ 	      else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum;
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
++	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
+ 	      else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum;
+ 	      else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum;
+ 	      else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum;
+@@ -378,14 +382,14 @@
+ 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum;
+-	      else if (strcmp(name,"Base")==0) return BaseEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Base")==0) return BaseEnum;
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
++	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+ 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+ 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
+ 	      else if (strcmp(name,"CalvinglevermannMeltingrate")==0) return CalvinglevermannMeltingrateEnum;
+@@ -490,10 +494,6 @@
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+ 	      else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+-	      else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum;
+-	      else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum;
+-	      else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum;
+-	      else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum;
+ 	      else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22702)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22703)
+@@ -75,10 +75,10 @@
+ 	}
+ 	#endif
+ 
+-	if(isoceancoupling){
++	if(isoceancoupling){ {{{
+ 		if(VerboseSolution()) _printf0_("   ocean coupling: initialization \n");
+ 		int my_rank;
+-		int oceannxsize,oceannysize;
++		int oceangridnxsize,oceangridnysize;
+ 		IssmDouble *oceangridx;
+ 		IssmDouble *oceangridy;
+ 		IssmDouble *oceanmelt;
+@@ -96,21 +96,23 @@
+ 			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+ 			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+ 			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+-			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+-			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+-			oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+-			oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
+-			icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			for(int i=0;i<oceannxsize;i++){
+-				for(int j=0;j<oceannysize;j++){
+-					icebase[i*oceannysize+j]=2*oceangridx[i*oceannysize+j];
++			ISSM_MPI_Recv(&oceangridnxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
++			ISSM_MPI_Recv(&oceangridnysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
++			femmodel->parameters->SetParam(oceangridnxsize,OceanGridNxEnum);
++			femmodel->parameters->SetParam(oceangridnysize,OceanGridNyEnum);
++			oceangridx = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++			ISSM_MPI_Recv(oceangridx,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
++			oceangridy = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++			ISSM_MPI_Recv(oceangridy,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++			icebase = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++			for(int i=0;i<oceangridnxsize;i++){
++				for(int j=0;j<oceangridnysize;j++){
++					icebase[i*oceangridnysize+j]=2*oceangridx[i*oceangridnysize+j];
+ 				}
+ 			}
+-			ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+-			oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+-			ISSM_MPI_Recv(oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++			ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++			oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++			ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+ 			xDelete<IssmDouble>(icebase);
+ 			xDelete<IssmDouble>(oceangridx);
+ 			xDelete<IssmDouble>(oceangridy);
+@@ -117,6 +119,7 @@
+ 			xDelete<IssmDouble>(oceanmelt);
+ 		}
+ 	}
++	}}}
+ 
+ 		IssmDouble  output_value;
+ 		int         num_dependents;
+@@ -161,6 +164,36 @@
+ 		 save_results=false;
+ 		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
+ 
++		if(isoceancoupling){ {{{
++			if(VerboseSolution()) _printf0_("   ocean coupling: sending ice base\n");
++			int my_rank;
++			int oceangridnxsize,oceangridnysize;
++			IssmDouble *icebase;
++			IssmDouble oceantime;
++			ISSM_MPI_Comm tomitgcmcomm;
++			ISSM_MPI_Status status;
++
++			my_rank=IssmComm::GetRank();
++			GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum));
++			if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
++			tomitgcmcomm=parcom->GetParameterValue();
++			if(my_rank==0){
++				ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
++				ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
++				if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts)) _error_("Ocean and ice time are starting to diverge");
++				femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum);
++				femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum);
++				for(int i=0;i<oceangridnxsize;i++){
++					for(int j=0;j<oceangridnysize;j++){
++						icebase[i*oceangridnysize+j]=9999.;
++					}
++				}
++				ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++				xDelete<IssmDouble>(icebase);
++			}
++		}
++		}}}
++
+ 		if(isthermal && domaintype==Domain3DEnum){ 
+ 			if(issmb){
+ 				bool isenthalpy;
+@@ -238,6 +271,28 @@
+ 			OutputResultsx(femmodel);
+ 		}
+ 
++		if(isoceancoupling){ {{{
++			if(VerboseSolution()) _printf0_("   ocean coupling: receiving melt\n");
++			int my_rank;
++			int oceangridnxsize,oceangridnysize;
++			IssmDouble *oceanmelt;
++			ISSM_MPI_Comm tomitgcmcomm;
++			ISSM_MPI_Status status;
++
++			my_rank=IssmComm::GetRank();
++			GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum));
++			if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
++			tomitgcmcomm=parcom->GetParameterValue();
++			if(my_rank==0){
++				femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum);
++				femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum);
++				oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++				ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++				xDelete<IssmDouble>(oceanmelt);
++			}
++		}
++		}}}
++
+ 		if(recording_frequency && (step%recording_frequency==0)){
+ 			if(VerboseSolution()) _printf0_("   checkpointing model \n");
+ 			femmodel->CheckPoint();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22703-22704.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22703-22704.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22703-22704.diff	(revision 22755)
@@ -0,0 +1,109 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22703)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22704)
+@@ -1870,7 +1870,30 @@
+ 	dnl neopz headers and libraries
+ 	if test "x$HAVE_NEOPZ" == "xyes"; then
+ 	  NEOPZLIB="$NEOPZ_ROOT/lib/libpz.a"
+-     NEOPZINCL=-I"$NEOPZ_ROOT/include"
++     NEOPZINCL=" -I$NEOPZ_ROOT/include"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Analysis"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Common"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/External"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Frontal"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Geom"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Integral"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/LinearSolvers"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Material"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Matrix"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Mesh"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Multigrid"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/PerfUtil"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Post"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Pre"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Refine"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Save"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Shape"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/SpecialMaps"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/StrMatrix"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/SubStruct"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Topology"
++	  NEOPZINCL+=" -I$NEOPZ_ROOT/include/Util"
++	  CXXFLAGS+=" -std=c++11"
+ 	  AC_DEFINE([_HAVE_NEOPZ_],[1],[with NEOPZ in ISSM src])
+ 	  AC_SUBST([NEOPZINCL])
+ 	  AC_SUBST([NEOPZLIB])
+Index: ../trunk-jpl/externalpackages/neopz/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/neopz/install.sh	(revision 22703)
++++ ../trunk-jpl/externalpackages/neopz/install.sh	(revision 22704)
+@@ -22,14 +22,9 @@
+ cmake -DCMAKE_INSTALL_PREFIX:PATH=$PROJECT_BINARY_DIR
+ 
+ cd $PROJECT_SOURCE_DIR
+-#Compile and install 
+-if [ $# -eq 0 ]; then
+-	make
+-	make install
+-else
+-	make -j $1
+-	make -j $1 install
+-fi
++make
++make install
++
+ cd $PROJECT_BINARY_DIR/pzlib
+ mv lib ../
+ mv include ../
+Index: ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22703)
++++ ../trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h	(revision 22704)
+@@ -11,19 +11,7 @@
+ #include <cfloat>
+ 
+ /*NeoPZ includes*/
+-/*REAL and STATE definitions, NeoPZ variables itapopo should be read by NeoPZ's config.h*/
+-#ifndef REFPATTERNDIR
+-	#define REFPATTERNDIR "/home/santos/trunk-jpl/externalpackages/neopz/install/include/refpatterns"
+-#endif
+-
+-#ifndef REALdouble
+-	#define REALdouble
+-#endif
+-
+-#ifndef STATEdouble
+-	#define STATEdouble
+-#endif
+-
++#include <pz_config.h>
+ #include <pzreal.h>
+ #include <pzgmesh.h>
+ #include <pzvec.h>
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22703)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 22704)
+@@ -5156,16 +5156,16 @@
+ 		newz=xNewZeroInit<IssmDouble>(newnumberofvertices);
+ 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the ReMeshNeopz.");
+ 	}
+-	else{
++
++	/*Send new mesh to others CPU*/
++	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	if(my_rank){
+ 		newx=xNew<IssmDouble>(newnumberofvertices);
+ 		newy=xNew<IssmDouble>(newnumberofvertices);
+ 		newz=xNew<IssmDouble>(newnumberofvertices);
+ 		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
+ 	}
+-
+-	/*Send new mesh to others CPU*/
+-	ISSM_MPI_Bcast(&newnumberofvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(&newnumberofelements,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	ISSM_MPI_Bcast(newx,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+ 	ISSM_MPI_Bcast(newy,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
+ 	ISSM_MPI_Bcast(newz,newnumberofvertices,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());	
Index: /issm/oecreview/Archive/21724-22754/ISSM-22704-22705.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22704-22705.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22704-22705.diff	(revision 22755)
@@ -0,0 +1,185 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22704)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22705)
+@@ -14,57 +14,140 @@
+ 
+ >>>> INITIALIZATION FROM SCRATCH
+ 
+-Initialization (CouplingTime=0)
+-1. ISSM sends CouplingTime for the interval at which we couple
+-2. ISSM sends ice model time IceTimeTag
+-3. MITgcm sends ocean model time OceanTimeTag
+-4. MITgcm sends grid size (NX and NY) and grid coordinates of
+-   center of cells (longitude -180 <= XC < 180 and latitude YC)
+-5. MITgcm integrates for CouplingTime=0:1
+-6. MITgcm sends CouplingTime=0:1-time-mean melt rate to ISSM
++Initialization:
++IceModelTime   = 0
++OceanModelTime = 0
+ 
+-CouplingTime=1
+-1. ISSM sends ice model time IceTimeTag
+-2. MITgcm sends ocean model time OceanTimeTag
+-3. ISSM sends CouplingTime=0 base to MITgcm (this is duplicate of Initialization)
+-		base should be 9999 in areas not covered by the ice grid
+-4. ISSM integrates for CouplingTime=0:1
+-5. MITgcm integrates for CouplingTime=1:2
+-6. MITgcm sends CouplingTime=1:2-time-mean melt rate to ISSM
++  I1. ISSM sends CouplingTime
++      (the interval at which we couple)
+ 
++  I2. MITgcm sends grid size (NX and NY)
++
++  I3. MITgcm sends grid coordinates of center of cells
++      (longitude -180 <= XC < 180 and latitude YC)
++
++  I4. ISSM sends ice model time IceTimeTag
++
++  I5. MITgcm sends ocean model time OceanTimeTag
++
++  I6. ISSM sends IceModelTime=0 base to MITgcm
++      (base should be 9999 in areas not covered by ice grid)
++
++  I7. MITgcm integrates from OceanModelTime=0
++                          to OceanModelTime=CouplingTime
++
++First Coupling Exchange:
++IceModelTime   = 0
++OceanModelTime = CouplingTime
++
++  C1. ISSM sends ice model time IceTimeTag
++
++  C2. MITgcm sends ocean model time OceanTimeTag
++
++  C3. MITgcm sends
++      0 <= OceanModelTime < CouplingTime
++      time-mean melt rate to ISSM
++  
++  C4. ISSM sends IceModelTime=0 base to MITgcm
++      (this is duplicate of Initialization)
++
++  C5i. ISSM integrates from IceModelTime=0
++                         to IceModelTime=CouplingTime
++
++  C5o. MITgcm integrates from OceanModelTime=CouplingTime
++                           to OceanModelTime=2*CouplingTime
++
+ ...
+ 
+-CouplingTime=N
+-1. ISSM sends ice model time IceTimeTag
+-2. MITgcm sends ocean model time OceanTimeTag
+-3. ISSM sends CouplingTime=N-1 base to MITgcm
+-		base should be 9999 in areas not covered by the ice grid
+-4. ISSM integrates for CouplingTime=(N-1):N
+-5. MITgcm integrates for CouplingTime=N:(N+1)
+-6. MITgcm sends CouplingTime=N:(N+1)-time-mean melt rate to ISSM
++Coupling Exchange N:
++IceModelTime   = (N-1) * CouplingTime
++OceanModelTime =   N   * CouplingTime
+ 
+-Termination (CouplingTime=N+1)
+-1. ISSM saves CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
+-2. MITgcm saves CouplingTime=N+1 MITgcm state
++  C1. ISSM sends ice model time IceTimeTag
+ 
++  C2. MITgcm sends ocean model time OceanTimeTag
+ 
++  C3. MITgcm sends
++      (N-1)*CouplingTime <= OceanModelTime < N*CouplingTime
++      time-mean melt rate to ISSM
++  
++  C4. ISSM sends IceModelTime=(N-1)*CouplingTime base to MITgcm
++
++  C5i. ISSM integrates from IceModelTime=(N-1)*CouplingTime
++                         to IceModelTime=N*CouplingTime
++
++  C5o. MITgcm integrates from OceanModelTime=N*CouplingTime
++                           to OceanModelTime=(N+1)*CouplingTime
++
++Termination:
++IceModelTime   =   N   * CouplingTime
++OceanModelTime = (N+1) * CouplingTime
++
++  C1. ISSM sends ice model time IceTimeTag
++
++  C2. MITgcm sends ocean model time OceanTimeTag
++
++  C3. MITgcm sends
++      N*CouplingTime <= OceanModelTime < (N+1)*CouplingTime
++      time-mean melt rate to ISSM
++  
++  C4i. ISSM saves to restart files the IceModelTime=N state and
++       the N*CouplingTime to (N+1)*CouplingTime mean melt rate
++
++  C4o. MITgcm saves to restart files
++       the OceanModelTime=(N+1)*CouplingTime state
++
++
+ >>>> RESTART FROM SAVED STATE
+ 
+-Initialization (CouplingTime=N+1)
+-1. ISSM sends ice model time IceTimeTag
+-2. MITgcm sends ocean model time OceanTimeTag
+-3. ISSM reads CouplingTime=N ISSM state and N:(N+1)-time-mean melt rate
+-4. MITgcm reads CouplingTime=N+1 MITgcm state
++Initialization:
++IceModelTime   =   N   * CouplingTime
++OceanModelTime = (N+1) * CouplingTime
+ 
+-CouplingTime=N+1
+-1. ISSM sends ice model time IceTimeTag
+-2. MITgcm sends ocean model time OceanTimeTag
+-3. ISSM sends CouplingTime=N base to MITgcm
+-		base should be 9999 in areas not covered by the ice grid
+-4. ISSM integrates for CouplingTime=N:(N+1)
+-5. MITgcm integrates for CouplingTime=(N+1):(N+2)
+-6. MITgcm sends CouplingTime=(N+1):(N+2)-time-mean melt rate to ISSM
++  I1. ISSM sends CouplingTime
+ 
++  I2. MITgcm sends grid size (NX and NY)
++
++  I3. MITgcm sends grid coordinates (XC and YC)
++
++  I4i. ISSM reads from restart files the IceModelTime=N state and
++       the N*CouplingTime to (N+1)*CouplingTime mean melt rate
++
++  I4o. MITgcm reads from restart files
++       the OceanModelTime=(N+1)*CouplingTime state
++
++  I5. ISSM sends ice model time IceTimeTag
++
++  I6. MITgcm sends ocean model time OceanTimeTag
++
++  I7. ISSM sends IceModelTime=N base to MITgcm
++
++  I8i. ISSM integrates from IceModelTime=N*CouplingTime
++                         to IceModelTime=(N+1)*CouplingTime
++
++  I8o. MITgcm integrates from OceanModelTime=(N+1)*CouplingTime
++                          to OceanModelTime=(N+2)*CouplingTime
++
++First Coupling Exchange:
++IceModelTime   = (N+1)   * CouplingTime
++OceanModelTime = (N+2) * CouplingTime
++
++  C1. ISSM sends ice model time IceTimeTag
++
++  C2. MITgcm sends ocean model time OceanTimeTag
++
++  C3. MITgcm sends
++      (N+1)*CouplingTime <= OceanModelTime < (N+2)*CouplingTime
++      time-mean melt rate to ISSM
++  
++  C4. ISSM sends IceModelTime=(N+1)*CouplingTime base to MITgcm
++
++  C5i. ISSM integrates from IceModelTime=(N+1)*CouplingTime
++                         to IceModelTime=(N+2)*CouplingTime
++
++  C5o. MITgcm integrates from OceanModelTime=(N+2)*CouplingTime
++                           to OceanModelTime=(N+3)*CouplingTime
++
+ ...
+ 
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22705-22706.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22705-22706.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22705-22706.diff	(revision 22755)
@@ -0,0 +1,161 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22705)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22706)
+@@ -13,47 +13,33 @@
+ OceanMelt              Nx*Ny       Real*8  10001008
+ 
+ >>>> INITIALIZATION FROM SCRATCH
+-
+-Initialization:
+ IceModelTime   = 0
+ OceanModelTime = 0
+ 
+-  I1. ISSM sends CouplingTime
+-      (the interval at which we couple)
+-
++Initialization:
++  I1. ISSM sends CouplingTime, the interval at which we couple
+   I2. MITgcm sends grid size (NX and NY)
+-
+   I3. MITgcm sends grid coordinates of center of cells
+       (longitude -180 <= XC < 180 and latitude YC)
+-
+   I4. ISSM sends ice model time IceTimeTag
+-
+   I5. MITgcm sends ocean model time OceanTimeTag
+-
+   I6. ISSM sends IceModelTime=0 base to MITgcm
+       (base should be 9999 in areas not covered by ice grid)
++  I7o. MITgcm integrates from OceanModelTime=0
++                           to OceanModelTime=CouplingTime
+ 
+-  I7. MITgcm integrates from OceanModelTime=0
+-                          to OceanModelTime=CouplingTime
+-
+-First Coupling Exchange:
++First Recurrent Coupling Exchange:
+ IceModelTime   = 0
+ OceanModelTime = CouplingTime
+-
+   C1. ISSM sends ice model time IceTimeTag
+-
+   C2. MITgcm sends ocean model time OceanTimeTag
+-
+   C3. MITgcm sends
+       0 <= OceanModelTime < CouplingTime
+       time-mean melt rate to ISSM
+-  
+   C4. ISSM sends IceModelTime=0 base to MITgcm
+       (this is duplicate of Initialization)
+-
+   C5i. ISSM integrates from IceModelTime=0
+                          to IceModelTime=CouplingTime
+-
+   C5o. MITgcm integrates from OceanModelTime=CouplingTime
+                            to OceanModelTime=2*CouplingTime
+ 
+@@ -62,20 +48,14 @@
+ Coupling Exchange N:
+ IceModelTime   = (N-1) * CouplingTime
+ OceanModelTime =   N   * CouplingTime
+-
+   C1. ISSM sends ice model time IceTimeTag
+-
+   C2. MITgcm sends ocean model time OceanTimeTag
+-
+   C3. MITgcm sends
+       (N-1)*CouplingTime <= OceanModelTime < N*CouplingTime
+       time-mean melt rate to ISSM
+-  
+   C4. ISSM sends IceModelTime=(N-1)*CouplingTime base to MITgcm
+-
+   C5i. ISSM integrates from IceModelTime=(N-1)*CouplingTime
+                          to IceModelTime=N*CouplingTime
+-
+   C5o. MITgcm integrates from OceanModelTime=N*CouplingTime
+                            to OceanModelTime=(N+1)*CouplingTime
+ 
+@@ -82,69 +62,50 @@
+ Termination:
+ IceModelTime   =   N   * CouplingTime
+ OceanModelTime = (N+1) * CouplingTime
+-
+   C1. ISSM sends ice model time IceTimeTag
+-
+   C2. MITgcm sends ocean model time OceanTimeTag
+-
+   C3. MITgcm sends
+       N*CouplingTime <= OceanModelTime < (N+1)*CouplingTime
+       time-mean melt rate to ISSM
+-  
+   C4i. ISSM saves to restart files the IceModelTime=N state and
+        the N*CouplingTime to (N+1)*CouplingTime mean melt rate
+-
+   C4o. MITgcm saves to restart files
+        the OceanModelTime=(N+1)*CouplingTime state
+ 
+ 
+ >>>> RESTART FROM SAVED STATE
+-
+-Initialization:
+ IceModelTime   =   N   * CouplingTime
+ OceanModelTime = (N+1) * CouplingTime
+ 
++  - ISSM reads from restart files the IceModelTime=N state and
++      the N*CouplingTime to (N+1)*CouplingTime mean melt rate
++      
++  - MITgcm reads from restart files
++      the OceanModelTime=(N+1)*CouplingTime state
++
++Initialization:
+   I1. ISSM sends CouplingTime
+-
+   I2. MITgcm sends grid size (NX and NY)
+-
+   I3. MITgcm sends grid coordinates (XC and YC)
+-
+-  I4i. ISSM reads from restart files the IceModelTime=N state and
+-       the N*CouplingTime to (N+1)*CouplingTime mean melt rate
+-
+-  I4o. MITgcm reads from restart files
+-       the OceanModelTime=(N+1)*CouplingTime state
+-
+-  I5. ISSM sends ice model time IceTimeTag
+-
+-  I6. MITgcm sends ocean model time OceanTimeTag
+-
+-  I7. ISSM sends IceModelTime=N base to MITgcm
+-
+-  I8i. ISSM integrates from IceModelTime=N*CouplingTime
++  I4. ISSM sends ice model time IceTimeTag
++  I5. MITgcm sends ocean model time OceanTimeTag
++  I6. ISSM sends IceModelTime=N base to MITgcm
++  I7i. ISSM integrates from IceModelTime=N*CouplingTime
+                          to IceModelTime=(N+1)*CouplingTime
+-
+-  I8o. MITgcm integrates from OceanModelTime=(N+1)*CouplingTime
++  I7o. MITgcm integrates from OceanModelTime=(N+1)*CouplingTime
+                           to OceanModelTime=(N+2)*CouplingTime
+ 
+-First Coupling Exchange:
++First Recurrent Coupling Exchange:
+ IceModelTime   = (N+1)   * CouplingTime
+ OceanModelTime = (N+2) * CouplingTime
+-
+   C1. ISSM sends ice model time IceTimeTag
+-
+   C2. MITgcm sends ocean model time OceanTimeTag
+-
+   C3. MITgcm sends
+       (N+1)*CouplingTime <= OceanModelTime < (N+2)*CouplingTime
+       time-mean melt rate to ISSM
+-  
+   C4. ISSM sends IceModelTime=(N+1)*CouplingTime base to MITgcm
+-
+   C5i. ISSM integrates from IceModelTime=(N+1)*CouplingTime
+                          to IceModelTime=(N+2)*CouplingTime
+-
+   C5o. MITgcm integrates from OceanModelTime=(N+2)*CouplingTime
+                            to OceanModelTime=(N+3)*CouplingTime
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22706-22707.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22706-22707.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22706-22707.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/test/MITgcm/coupling_rules.txt
+===================================================================
+--- ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22706)
++++ ../trunk-jpl/test/MITgcm/coupling_rules.txt	(revision 22707)
+@@ -21,11 +21,11 @@
+   I2. MITgcm sends grid size (NX and NY)
+   I3. MITgcm sends grid coordinates of center of cells
+       (longitude -180 <= XC < 180 and latitude YC)
+-  I4. ISSM sends ice model time IceTimeTag
+-  I5. MITgcm sends ocean model time OceanTimeTag
+-  I6. ISSM sends IceModelTime=0 base to MITgcm
++  C1. ISSM sends ice model time IceTimeTag
++  C2. MITgcm sends ocean model time OceanTimeTag
++  C4. ISSM sends IceModelTime=0 base to MITgcm
+       (base should be 9999 in areas not covered by ice grid)
+-  I7o. MITgcm integrates from OceanModelTime=0
++  C5o. MITgcm integrates from OceanModelTime=0
+                            to OceanModelTime=CouplingTime
+ 
+ First Recurrent Coupling Exchange:
+@@ -67,9 +67,9 @@
+   C3. MITgcm sends
+       N*CouplingTime <= OceanModelTime < (N+1)*CouplingTime
+       time-mean melt rate to ISSM
+-  C4i. ISSM saves to restart files the IceModelTime=N state and
++  Ti. ISSM saves to restart files the IceModelTime=N state and
+        the N*CouplingTime to (N+1)*CouplingTime mean melt rate
+-  C4o. MITgcm saves to restart files
++  To. MITgcm saves to restart files
+        the OceanModelTime=(N+1)*CouplingTime state
+ 
+ 
+@@ -87,12 +87,12 @@
+   I1. ISSM sends CouplingTime
+   I2. MITgcm sends grid size (NX and NY)
+   I3. MITgcm sends grid coordinates (XC and YC)
+-  I4. ISSM sends ice model time IceTimeTag
+-  I5. MITgcm sends ocean model time OceanTimeTag
+-  I6. ISSM sends IceModelTime=N base to MITgcm
+-  I7i. ISSM integrates from IceModelTime=N*CouplingTime
++  C1. ISSM sends ice model time IceTimeTag
++  C2. MITgcm sends ocean model time OceanTimeTag
++  C4. ISSM sends IceModelTime=N base to MITgcm
++  C5i. ISSM integrates from IceModelTime=N*CouplingTime
+                          to IceModelTime=(N+1)*CouplingTime
+-  I7o. MITgcm integrates from OceanModelTime=(N+1)*CouplingTime
++  C5o. MITgcm integrates from OceanModelTime=(N+1)*CouplingTime
+                           to OceanModelTime=(N+2)*CouplingTime
+ 
+ First Recurrent Coupling Exchange:
Index: /issm/oecreview/Archive/21724-22754/ISSM-22707-22708.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22707-22708.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22707-22708.diff	(revision 22755)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22707)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22708)
+@@ -50,28 +50,31 @@
+       _R8 xfer_array(Nx,Ny)
+       _R8 local(1:sNx,1:sNy,nSx,nSy)
+ 
++C Initialization steps I1, I2, and I3:
+       IF( myTime .EQ. startTime ) THEN
+ 
+-C     Send/receive scalar values
++C   I1. ISSM sends CouplingTime, the interval at which we couple
+          IF( myProcId .EQ. 0 ) THEN
+-            _BEGIN_MASTER( myThid )         
++            _BEGIN_MASTER( myThid )
+             call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,
+      &           toissmcomm,mpistatus,mpiRC)
+             print*, 'Ocean received CouplingTime: ', CouplingTime
+-            call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,
+-     &           toissmcomm,mpistatus,mpiRC)
+-            print*, 'Ocean received IceModelTime: ', IceModelTime
+-            call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,
+-     &           toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         ENDIF
++
++C   I2. MITgcm sends grid size (NX and NY)
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )
+             call MPI_Send(Nx,1,MPI_INT,0,10001003,
+      &           toissmcomm,mpistatus)
+             call MPI_Send(Ny,1,MPI_INT,0,10001004,
+      &           toissmcomm,mpistatus)
+             _END_MASTER( myThid )
+-         endif
++         ENDIF
+ 
++C   I3. MITgcm sends grid coordinates of center of cells
++C       (longitude -180 <= XC < 180 and latitude YC)
+ C     Send longitude East of center of cell
+-         print*,'this is xC',xC
+          DO bj=1,nSy
+             DO bi=1,nSx
+                DO j=1,sNy
+@@ -81,11 +84,9 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-         print*,'this is local xC',local
+          CALL BAR2( myThid ) 
+          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
+      &        .FALSE., .FALSE., myThid )
+-         print*,'this is global XC',xfer_array
+          IF( myProcId .EQ. 0 ) THEN
+             _BEGIN_MASTER( myThid )
+             buffsize = Nx*Ny
+@@ -94,9 +95,7 @@
+             _END_MASTER( myThid )
+          ENDIF
+          CALL BAR2( myThid )
+-
+ C     Send latitude North of center of cell
+-         print*,'this is yC',yC
+          DO bj=1,nSy
+             DO bi=1,nSx
+                DO j=1,sNy
+@@ -106,11 +105,9 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-         print*,'this is local yC',local
+          CALL BAR2( myThid ) 
+          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
+-     &                      .FALSE., .FALSE., myThid )
+-         print*,'this is global YC',xfer_array
++     &        .FALSE., .FALSE., myThid )
+          IF( myProcId .EQ. 0 ) THEN
+             _BEGIN_MASTER( myThid )
+             buffsize = Nx*Ny
+@@ -119,19 +116,40 @@
+             _END_MASTER( myThid )
+          ENDIF
+          CALL BAR2( myThid )
+-         print*,'Done Sending XC/YC arrays.'
+ 
+-C     Receive icebase
++      ENDIF
++C End initialization steps I1, I2, and I3.
++
++C Recurring steps C1 and C2:
++      IF( MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN
++
++
++C   C1. ISSM sends ice model time IceTimeTag
+          IF( myProcId .EQ. 0 ) THEN
+-            _BEGIN_MASTER( myThid )         
+-            call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+-     &           0,10001008,toissmcomm,mpistatus,mpiRC)
+-            print*, 'Ocean received icebase',xfer_array
++            _BEGIN_MASTER( myThid )
++            call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,
++     &           toissmcomm,mpistatus,mpiRC)
++            print*, 'Ocean received IceModelTime: ', IceModelTime
+             _END_MASTER( myThid )
+          ENDIF
+ 
+-C     Send melt rate
+-         print*,'this is yC',yC
++C   C2. MITgcm sends ocean model time OceanTimeTag
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )
++            call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,
++     &           toissmcomm,mpistatus)
++            _END_MASTER( myThid )
++         ENDIF
++
++      ENDIF
++C End recurring steps C1 and C2.
++
++C Recurring step C3 except during Initialization:
++C  C3. MITgcm sends
++C      (N-1)*CouplingTime <= OceanModelTime < N*CouplingTime
++C      time-mean melt rate to ISSM
++      IF( myTime .NE. startTime .AND.
++     &     MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN
+          DO bj=1,nSy
+             DO bi=1,nSx
+                DO j=1,sNy
+@@ -141,11 +159,9 @@
+                ENDDO
+             ENDDO
+          ENDDO
+-         print*,'this is local shelficeHeatFlux',local
+          CALL BAR2( myThid ) 
+          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
+-     &                      .FALSE., .FALSE., myThid )
+-         print*,'this is global shelficeHeatFlux',xfer_array
++     &        .FALSE., .FALSE., myThid )
+          IF( myProcId .EQ. 0 ) THEN
+             _BEGIN_MASTER( myThid )
+             buffsize = Nx*Ny
+@@ -155,10 +171,25 @@
+          ENDIF
+          CALL BAR2( myThid )
+          print*,'Done Sending shelficeHeatFlux array.'
++         
++      ENDIF
++C End recurring step C3.
+ 
++C Recurring step C4 except during Termination:
++C  C4. ISSM sends IceModelTime=(N-1)*CouplingTime base to MITgcm
++      IF( myTime .NE. endtime .AND.
++     &     MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN         
++         IF( myProcId .EQ. 0 ) THEN
++            _BEGIN_MASTER( myThid )         
++            call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
++     &           0,10001008,toissmcomm,mpistatus,mpiRC)
++            print*, 'Ocean received icebase',xfer_array
++            _END_MASTER( myThid )
++         ENDIF
+       ENDIF
++C End recurring step C4.
+ 
+-#endif /* ALLOW_CPL_MPMICE */
++#endif /* ALLOW_CPL_ISSM */
+ 
+       RETURN
+       END
Index: /issm/oecreview/Archive/21724-22754/ISSM-22708-22709.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22708-22709.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22708-22709.diff	(revision 22755)
@@ -0,0 +1,102 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22708)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22709)
+@@ -81,7 +81,6 @@
+ 		int oceangridnxsize,oceangridnysize;
+ 		IssmDouble *oceangridx;
+ 		IssmDouble *oceangridy;
+-		IssmDouble *oceanmelt;
+ 		IssmDouble *icebase;
+ 		IssmDouble coupling_time,oceantime;
+ 		ISSM_MPI_Comm tomitgcmcomm;
+@@ -94,8 +93,6 @@
+ 		tomitgcmcomm=parcom->GetParameterValue();
+ 		if(my_rank==0){
+ 			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+-			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+-			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceangridnxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+ 			ISSM_MPI_Recv(&oceangridnysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+ 			femmodel->parameters->SetParam(oceangridnxsize,OceanGridNxEnum);
+@@ -104,6 +101,9 @@
+ 			ISSM_MPI_Recv(oceangridx,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+ 			oceangridy = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+ 			ISSM_MPI_Recv(oceangridy,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
++
++			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
++			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+ 			icebase = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+ 			for(int i=0;i<oceangridnxsize;i++){
+ 				for(int j=0;j<oceangridnysize;j++){
+@@ -111,12 +111,9 @@
+ 				}
+ 			}
+ 			ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+-			oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+-			ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+ 			xDelete<IssmDouble>(icebase);
+ 			xDelete<IssmDouble>(oceangridx);
+ 			xDelete<IssmDouble>(oceangridy);
+-			xDelete<IssmDouble>(oceanmelt);
+ 		}
+ 	}
+ 	}}}
+@@ -165,9 +162,10 @@
+ 		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
+ 
+ 		if(isoceancoupling){ {{{
+-			if(VerboseSolution()) _printf0_("   ocean coupling: sending ice base\n");
++			if(VerboseSolution()) _printf0_("   ocean coupling: exchanging information\n");
+ 			int my_rank;
+ 			int oceangridnxsize,oceangridnysize;
++			IssmDouble *oceanmelt;
+ 			IssmDouble *icebase;
+ 			IssmDouble oceantime;
+ 			ISSM_MPI_Comm tomitgcmcomm;
+@@ -183,6 +181,8 @@
+ 				if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts)) _error_("Ocean and ice time are starting to diverge");
+ 				femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum);
+ 				femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum);
++				oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
++				ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+ 				for(int i=0;i<oceangridnxsize;i++){
+ 					for(int j=0;j<oceangridnysize;j++){
+ 						icebase[i*oceangridnysize+j]=9999.;
+@@ -189,6 +189,7 @@
+ 					}
+ 				}
+ 				ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
++				xDelete<IssmDouble>(oceanmelt);
+ 				xDelete<IssmDouble>(icebase);
+ 			}
+ 		}
+@@ -271,28 +272,6 @@
+ 			OutputResultsx(femmodel);
+ 		}
+ 
+-		if(isoceancoupling){ {{{
+-			if(VerboseSolution()) _printf0_("   ocean coupling: receiving melt\n");
+-			int my_rank;
+-			int oceangridnxsize,oceangridnysize;
+-			IssmDouble *oceanmelt;
+-			ISSM_MPI_Comm tomitgcmcomm;
+-			ISSM_MPI_Status status;
+-
+-			my_rank=IssmComm::GetRank();
+-			GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum));
+-			if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
+-			tomitgcmcomm=parcom->GetParameterValue();
+-			if(my_rank==0){
+-				femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum);
+-				femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum);
+-				oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+-				ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+-				xDelete<IssmDouble>(oceanmelt);
+-			}
+-		}
+-		}}}
+-
+ 		if(recording_frequency && (step%recording_frequency==0)){
+ 			if(VerboseSolution()) _printf0_("   checkpointing model \n");
+ 			femmodel->CheckPoint();
Index: /issm/oecreview/Archive/21724-22754/ISSM-22709-22710.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22709-22710.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22709-22710.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/m/qmu/dakota_out_parse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_out_parse.m	(revision 22709)
++++ ../trunk-jpl/src/m/qmu/dakota_out_parse.m	(revision 22710)
+@@ -78,15 +78,24 @@
+ 
+ 	%%  loop through the file to find the Dakota method name
+ 
+-	[fline]=findline(fidi,'methodName = ');
++	[fline]=findline(fidi,'method');
+ 	if ~ischar(fline)
+ 		%do nothing
+ 	else
+ 		% display(['  ' deblank(fline)]);
+-
+ 		[ntokens,tokens]=fltokens(fline);
+-		method=tokens{1}{3};
+-		display(sprintf('Dakota methodName=''%s''.',method));
++		%dakota version >6
++		if strcmp(tokens{1}{1}(7),',')
++			fline=fgetl(fidi);
++			[ntokens,tokens]=fltokens(fline);
++			method=tokens{1}{1};
++			display(sprintf('Dakota method =''%s''.',method));
++		elseif strcmp(tokens{1}{1}(7),'N')
++			[fline]=findline(fidi,'methodName = ');
++			[ntokens,tokens]=fltokens(fline);
++			method=tokens{1}{3};
++			display(sprintf('Dakota methodName=''%s''.',method));
++		end
+ 	end
+ 
+ 	dresp=struct([]);
+@@ -140,6 +149,8 @@
+ 				~isempty(strfind(fline(16:end),' completed.'))
+ 			[method]=itcomp_read(fidi,fline);
+ 		elseif strncmp(fline,'-----',5)
++		elseif strncmp(fline,'<<<<< Environment execution completed',37)
++			break;
+ 		else
+ 			display(['Unexpected line: ' deblank(fline)]);
+ 		end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22710-22711.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22710-22711.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22710-22711.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22710)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 22711)
+@@ -183,6 +183,7 @@
+ 				femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum);
+ 				oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+ 				ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
++                                icebase = xNew<IssmDouble>(oceangridnxsize*oceangridnysize);
+ 				for(int i=0;i<oceangridnxsize;i++){
+ 					for(int j=0;j<oceangridnysize;j++){
+ 						icebase[i*oceangridnysize+j]=9999.;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22711-22712.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22711-22712.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22711-22712.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/test/MITgcm/code/cpl_issm.F
+===================================================================
+--- ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22711)
++++ ../trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22712)
+@@ -46,6 +46,7 @@
+       INTEGER mpiMyWid, toissmcomm, mpiRC
+       INTEGER mpistatus(MPI_STATUS_SIZE)
+       INTEGER i, j, bi, bj, buffsize
++      COMMON /CPL_ISSM_TIME/ CouplingTime
+       _R8 CouplingTime, IceModelTime
+       _R8 xfer_array(Nx,Ny)
+       _R8 local(1:sNx,1:sNy,nSx,nSy)
+@@ -58,9 +59,13 @@
+             _BEGIN_MASTER( myThid )
+             call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,
+      &           toissmcomm,mpistatus,mpiRC)
+-            print*, 'Ocean received CouplingTime: ', CouplingTime
+             _END_MASTER( myThid )
+          ENDIF
++         _BEGIN_MASTER( myThid )
++         CALL MPI_BCAST(CouplingTime,1,MPI_DOUBLE,0,
++     &        MPI_COMM_MODEL,mpiRC)
++         _END_MASTER( myThid )
++         print*, 'Ocean received CouplingTime: ', CouplingTime
+ 
+ C   I2. MITgcm sends grid size (NX and NY)
+          IF( myProcId .EQ. 0 ) THEN
+@@ -123,7 +128,6 @@
+ C Recurring steps C1 and C2:
+       IF( MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN
+ 
+-
+ C   C1. ISSM sends ice model time IceTimeTag
+          IF( myProcId .EQ. 0 ) THEN
+             _BEGIN_MASTER( myThid )
+@@ -183,7 +187,6 @@
+             _BEGIN_MASTER( myThid )         
+             call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+      &           0,10001008,toissmcomm,mpistatus,mpiRC)
+-            print*, 'Ocean received icebase',xfer_array
+             _END_MASTER( myThid )
+          ENDIF
+       ENDIF
Index: /issm/oecreview/Archive/21724-22754/ISSM-22712-22713.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22712-22713.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22712-22713.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22712)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22713)
+@@ -2,8 +2,8 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[1 2 3 4 5 6 7 8 9 10 11];
+-final_time=1;
++steps=[1 2 3 4 5 6 7 8 9 10 11 12];
++final_time=1/365;
+ 
+ %Organizer
+ mkdir Models
+@@ -42,10 +42,10 @@
+ 	MITgcmDeltaT=600; % MITgcm time step in seconds
+ 	y2s=31536000; % year to seconds conversion, i.e., seconds per year
+ 
+-	% start_time, final_time, and time_step
++	% start_time and time_step
+ 	start_time=0; % in decimal years
+-	time_step=1/12; % coupling interval in decimal years
+-	async_step_MITgcm_multiplier=1/30; % used to reduce run time for MItgcm
++	time_step=1/(365*24); % coupling interval in decimal years
++	async_step_MITgcm_multiplier=1; % used to reduce run time for MItgcm
+ 
+ 	% bedrock/bathymetry
+ 	hmax=1000;
+@@ -845,8 +845,7 @@
+ 	loaddata(org,'ParameterizeIce');
+ 	loaddata(org,'Bathymetry');
+ 	loaddata(org,'IceSheetGeometry');
+-        endtime = round(MITgcmDeltaT * ...
+-         floor(time_step*y2s*async_step_MITgcm_multiplier/MITgcmDeltaT));
++        endtime = round(MITgcmDeltaT * floor(final_time*y2s/MITgcmDeltaT));
+ 
+         % {{{ prepare MITgcm 
+         % rename previous run directory and create new one
+@@ -987,7 +986,9 @@
+ 	        
+ 	md.transient.isoceancoupling=1;
+ 	md.transient.isgroundingline=1;
+-	md.timestepping.coupling_time=1/12;
++	md.timestepping.coupling_time=time_step;
++        md.timestepping.time_step=time_step;
++	md.timestepping.final_time=final_time;
+ 	md.cluster.npocean=nPx*nPy;
+ 	md.cluster.executionpath=[pwd '/run'];
+ 	md.masstransport.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22713-22714.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22713-22714.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22713-22714.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/MITgcm/input/data
+===================================================================
+--- ../trunk-jpl/test/MITgcm/input/data	(revision 22713)
++++ ../trunk-jpl/test/MITgcm/input/data	(revision 22714)
+@@ -49,7 +49,7 @@
+  chkptFreq=0.,
+  dumpFreq=0.,
+  taveFreq=2592000.,
+- monitorFreq=86400.,
++ monitorFreq=1200.,
+  monitorSelect=2,
+  &
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22714-22715.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22714-22715.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22714-22715.diff	(revision 22755)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/plot/plot_mesh.js
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 22714)
++++ ../trunk-jpl/src/m/plot/plot_mesh.js	(revision 22715)
+@@ -6,7 +6,7 @@
+ 	//
+ 	//   See also: PLOTMODEL, PLOT_MANAGER
+ 
+-	if ('mesh' in  canvas.nodes && options.getfieldvalue('cachenodes','on') === 'on') return;
++	//if ('mesh' in  canvas.nodes && options.getfieldvalue('cachenodes','on') === 'on') return;
+ 	
+ 	//{{{ declare variables:
+ 	//Process data and model
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22714)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 22715)
+@@ -52,8 +52,8 @@
+ 
+ #ifdef _HAVE_JAVASCRIPT_MODULES_
+ /* serial input macros: */
+-#define XHANDLE       xIn,dataNumRowsIn,1
+-#define YHANDLE       yIn,dataNumColsIn,1
++#define XHANDLE       xIn,dataNumColsIn,1
++#define YHANDLE       yIn,dataNumRowsIn,1
+ #define DATAHANDLE    dataIn,dataNumRowsIn,dataNumColsIn
+ #define XMESHHANDLE   xMeshIn,meshNumRowsIn,1
+ #define YMESHHANDLE   yMeshIn,meshNumRowsIn,1
+Index: ../trunk-jpl/jenkins/linux64_ross_javascript
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22714)
++++ ../trunk-jpl/jenkins/linux64_ross_javascript	(revision 22715)
+@@ -12,7 +12,9 @@
+ 	--without-Love \
+     --without-kml \
+     --without-kriging \
+-    --with-cxxoptflags="-O2"'
++    --with-cxxoptflags="-O2" \
++    CXXFLAGS="-O2" \
++    CFLAGS="-O2"'
+ 
+ #PYTHON and MATLAB testing
+ MATLAB_TEST=0
Index: /issm/oecreview/Archive/21724-22754/ISSM-22715-22716.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22715-22716.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22715-22716.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/solve/solve.js
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.js	(revision 22715)
++++ ../trunk-jpl/src/m/solve/solve.js	(revision 22716)
+@@ -164,6 +164,7 @@
+ 	else { //{{{
+ 
+ 		/*We are running somewhere else on a computational server. Send the buffer to that server and retrieve output: */
++		console.log('running issm remotely');
+ 		cluster.UploadAndRun(md,callbackfunction,callbackerrorfunction,callbackid,fid,toolkitsstring,solutionstring,md.miscellaneous.name,md.priv.runtimename);
+ 
+ 		return md;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22716-22717.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22716-22717.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22716-22717.diff	(revision 22755)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/solvers/issmmumpssolver.js
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmmumpssolver.js	(nonexistent)
++++ ../trunk-jpl/src/m/solvers/issmmumpssolver.js	(revision 22717)
+@@ -0,0 +1,21 @@
++function issmmumpssolver(){
++//ISSMMUMPSSOLVER - 
++//
++//   Usage:
++//      options=issmmumpssolver(varargin);
++
++	//Retrieve options provided in varargin. First convert arguments to array:
++	var args = Array.prototype.slice.call(arguments);
++
++	//Then process options
++	var  options = new pairoptions(args.slice(1,args.length));
++
++	//default issmoptions options
++	var issmoptions={};
++	issmoptions['toolkit']='issm';
++	issmoptions['mat_type']=options.getfieldvalue('mat_type','mpisparse');
++	issmoptions['vec_type']=options.getfieldvalue('vec_type','mpi');
++	issmoptions['solver_type']=options.getfieldvalue('solver_type','mumps');
++
++	return issmoptions;
++}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22717-22718.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22717-22718.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22717-22718.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/trans.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/trans.js	(revision 22717)
++++ ../trunk-jpl/src/m/classes/trans.js	(revision 22718)
+@@ -11,7 +11,7 @@
+ 		this.issmb             = 1;
+ 		this.ismasstransport   = 1;
+ 		this.isstressbalance   = 1;
+-		this.isthermal         = 1;
++		this.isthermal         = 0;
+ 		this.isgroundingline   = 0;
+ 		this.isgia             = 0;
+ 		this.isesa             = 0;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22718-22719.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22718-22719.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22718-22719.diff	(revision 22755)
@@ -0,0 +1,133 @@
+Index: ../trunk-jpl/src/m/classes/model.js
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.js	(revision 22718)
++++ ../trunk-jpl/src/m/classes/model.js	(revision 22719)
+@@ -359,6 +359,128 @@
+ 				md.mesh.average_vertex_connectivity=100;
+ 			}
+ 		} //}}}
++		this.extract = function(md,area) { //{{{
++			//extract - extract a model according to an Argus contour or flag list
++			//
++			//   This routine extracts a submodel from a bigger model with respect to a given contour
++			//   md must be followed by the corresponding exp file or flags list
++			//   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++			//   If user wants every element outside the domain to be 
++			//   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
++			//   an empty string '' will be considered as an empty domain
++			//   a string 'all' will be considered as the entire domain
++			//
++			//   Usage:
++			//      md2=extract(md,area);
++			//
++			//   Examples:
++			//      md2=extract(md,'Domain.exp');
++			//
++			//   See also: EXTRUDE, COLLAPSE
++
++			//some checks on list of arguments
++			var argc = arguments.length;
++
++			if (!((argc == 2) | (argc == 1))) {
++				throw "extract error message: bad usage";
++			}
++			
++			//get elements that are inside area
++			flag_elem=FlagElements(this,area);
++
++			if (!ArrayAnyEqual(flag_elem,1))throw "extracted model is empty!"
++
++			/*kick out all elements with 3 dirichlets: actually, not so fast, not good for javscript usually.
++			spc_elem=find(~flag_elem);
++			spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
++			flag=ones(md1.mesh.numberofvertices,1);
++			flag(spc_node)=0;
++			pos=find(sum(flag(md1.mesh.elements),2)==0);
++			flag_elem(pos)=0;*/
++
++			//extracted elements and nodes lists
++			var pos_elem = ArrayFind(flag_elem,1);
++			var dup_nodes= new Array(pos_elem.length*3);
++			for(var i=0;i<pos_elem.length;i++){
++				dup_nodes[3*i]=md.mesh.elements[pos_elem[i]][0]-1;
++				dup_nodes[3*i+1]=md.mesh.elements[pos_elem[i]][1]-1;
++				dup_nodes[3*i+2]=md.mesh.elements[pos_elem[i]][2]-1;
++			}
++			pos_node=ArrayUnique(dup_nodes); pos_node=ArraySort(pos_node);
++
++			//keep track of some fields
++			var numberofvertices1=md.mesh.numberofvertices;
++			var numberofelements1=md.mesh.numberofelements;
++			var numberofvertices2=pos_node.length;
++			var numberofelements2=pos_elem.length;
++			var flag_node=NewArrayFill(numberofvertices1,0);
++			for (var i=0;i<pos_node.length;i++)flag_node[pos_node[i]]=1;
++
++			//Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++			Pelem=NewArrayFill(numberofelements1,0);
++			for (var i=0;i<numberofelements2;i++) Pelem[pos_elem[i]]=i;
++			Pnode=NewArrayFill(numberofvertices1,0);
++			for (var i=0;i<numberofvertices2;i++) Pnode[pos_node[i]]=i;
++			//renumber the elements (some nodes won't exist anymore)
++			var elements_2=NewArrayFill2D(numberofelements2,3,0);
++			for (var i=0;i<numberofelements2;i++){
++				for (var j=0;j<3;j++){
++					elements_2[i][j]=Pnode[md.mesh.elements[i][j]-1]+1;
++				}
++			}
++			
++			/*if isa(md.mesh,'mesh3dprisms'),
++				elements_2(:,4)=Pnode(elements_2(:,4));
++				elements_2(:,5)=Pnode(elements_2(:,5));
++				elements_2(:,6)=Pnode(elements_2(:,6));
++			end
++			*/
++			
++			//OK, now create the new model!
++
++			//take every field from model
++			var md2=md.deepcopy(md);
++			//var md2=new model(); md2.mesh=new mesh3dsurface();
++			
++			//deal with mesh: {{{
++			md2.mesh.numberofvertices=numberofvertices2;
++			md2.mesh.numberofelements=numberofelements2;
++			md2.mesh.elements=elements_2;
++
++			md2.mesh.x=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.x[i]=md.mesh.x[pos_node[i]];
++			md2.mesh.y=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.y[i]=md.mesh.y[pos_node[i]];
++			md2.mesh.z=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.z[i]=md.mesh.z[pos_node[i]];
++			md2.mesh.lat=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.lat[i]=md.mesh.lat[pos_node[i]];
++			md2.mesh.long=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.long[i]=md.mesh.long[pos_node[i]];
++			md2.mesh.r=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.mesh.r[i]=md.mesh.r[pos_node[i]];
++			//}}}
++			//deal with geometry: {{{
++			md2.geometry.base=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.geometry.base[i]=md.geometry.base[pos_node[i]];
++			md2.geometry.thickness=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.geometry.thickness[i]=md.geometry.thickness[pos_node[i]];
++			md2.geometry.surface=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.geometry.surface[i]=md.geometry.surface[pos_node[i]];
++			md2.geometry.bed=new Array(numberofvertices2); for (var i=0;i<numberofvertices2;i++)md2.geometry.bed[i]=md.geometry.bed[pos_node[i]];
++			//}}}
++
++			//Keep track of pos_node and pos_elem
++			for (var i=0;i<md2.mesh.numberofvertices;i++)pos_node[i]=pos_node[i]+1;
++			for (var i=0;i<md2.mesh.numberofelements;i++)pos_elem[i]=pos_elem[i]+1;
++			md2.mesh.extractedvertices=pos_node;
++			md2.mesh.extractedelements=pos_elem;
++
++			return md2;
++
++
++
++			//automatically modify fields
++
++			//loop over model fields
++			//model_fields=fields(md);
++
++
++
++
++
++		} //}}}
+ 		this.collapse = function(md) { //{{{
+ 			/*
+ 			 *COLLAPSE - collapses a 3d mesh into a 2d mesh
Index: /issm/oecreview/Archive/21724-22754/ISSM-22719-22720.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22719-22720.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22719-22720.diff	(revision 22755)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 22719)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 22720)
+@@ -1,10 +1,7 @@
+ %Test Name: SquareBamgMesh
+ 
+ %Simple mesh
+-disp(' -======== STARTING===========');
+-md=model();
+-disp('ok');
+-md=bamg(md,'domain','../Exp/Square.exp','hmax',100000.);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
Index: /issm/oecreview/Archive/21724-22754/ISSM-22720-22721.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22720-22721.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22720-22721.diff	(revision 22755)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 22720)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 22721)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[7e-07,6e-07,2e-05,6e-07,9e-07]
++field_tolerances=[8e-07,6e-07,2e-05,6e-07,9e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 22720)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 22721)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={7e-07,6e-07,2e-05,6e-07,9e-07};
++field_tolerances={8e-07,6e-07,2e-05,6e-07,9e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test460.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.py	(revision 22720)
++++ ../trunk-jpl/test/NightlyRun/test460.py	(revision 22721)
+@@ -28,7 +28,7 @@
+ 	md = setflowequation(md,i,'all')
+ 	md = solve(md,'Stressbalance')
+ 	field_names     = field_names + ['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
+-	field_tolerances = field_tolerances + [2e-06,2e-06,2e-06,2e-06,5e-07]
++	field_tolerances = field_tolerances + [2e-06,3e-06,2e-06,2e-06,5e-07]
+ 	field_values = field_values + [
+ 			md.results.StressbalanceSolution.Vx,
+ 			md.results.StressbalanceSolution.Vy,
+Index: ../trunk-jpl/test/NightlyRun/test460.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test460.m	(revision 22720)
++++ ../trunk-jpl/test/NightlyRun/test460.m	(revision 22721)
+@@ -20,7 +20,7 @@
+ 	md=setflowequation(md,i{1},'all');
+ 	md=solve(md,'Stressbalance');
+ 	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
+-	field_tolerances={field_tolerances{:},2e-06,2e-06,2e-06,2e-06,5e-07};
++	field_tolerances={field_tolerances{:},2e-06,3e-06,2e-06,2e-06,5e-07};
+ 	field_values={field_values{:},...
+ 		(md.results.StressbalanceSolution.Vx),...
+ 		(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22721-22722.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22721-22722.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22721-22722.diff	(revision 22755)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22721)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22722)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[1 2 3 4 5 6 7 8 9 10 11 12];
++steps=[12];
+ final_time=1/365;
+ 
+ %Organizer
+@@ -987,8 +987,8 @@
+ 	md.transient.isoceancoupling=1;
+ 	md.transient.isgroundingline=1;
+ 	md.timestepping.coupling_time=time_step;
+-        md.timestepping.time_step=time_step;
+-	md.timestepping.final_time=final_time;
++   md.timestepping.time_step=time_step;
++	md.timestepping.final_time=final_time-time_step;
+ 	md.cluster.npocean=nPx*nPy;
+ 	md.cluster.executionpath=[pwd '/run'];
+ 	md.masstransport.requested_outputs={'default','BasalforcingsFloatingiceMeltingRate'};
Index: /issm/oecreview/Archive/21724-22754/ISSM-22722-22723.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22722-22723.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22722-22723.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22722)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22723)
+@@ -2,7 +2,7 @@
+ %ISSM/MITgcm coupled set-up
+ %
+ %Script control parameters
+-steps=[12];
++steps=[1 2 3 4 5 6 7 8 9 10 11 12];
+ final_time=1/365;
+ 
+ %Organizer
Index: /issm/oecreview/Archive/21724-22754/ISSM-22723-22724.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22723-22724.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22723-22724.diff	(revision 22755)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/jenkins/linux64_ross_iceocean
+===================================================================
+--- ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22723)
++++ ../trunk-jpl/jenkins/linux64_ross_iceocean	(revision 22724)
+@@ -19,6 +19,7 @@
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.9/ -lgfortran" \
++	--with-ocean=yes \
+ 	--with-numthreads=4 \
+ 	--enable-development \
+ 	--enable-debugging '
Index: /issm/oecreview/Archive/21724-22754/ISSM-22724-22725.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22724-22725.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22724-22725.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 22724)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 22725)
+@@ -1932,8 +1932,8 @@
+ 	dnl }}}
+ 	dnl with-kml{{{
+ 	AC_ARG_WITH([kml],
+-		AS_HELP_STRING([--with-kml = YES],[compile with kml capabilities (default is yes)]),
+-		[KML=$withval],[KML=yes]) 
++		AS_HELP_STRING([--with-kml = YES],[compile with kml capabilities (default is no)]),
++		[KML=$withval],[KML=no]) 
+ 	AC_MSG_CHECKING(for kml capability compilation)
+ 
+ 	HAVE_KML=no
Index: /issm/oecreview/Archive/21724-22754/ISSM-22725-22726.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22725-22726.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22725-22726.diff	(revision 22755)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/test/NightlyRun/test4002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22725)
++++ ../trunk-jpl/test/NightlyRun/test4002.m	(revision 22726)
+@@ -845,7 +845,8 @@
+ 	loaddata(org,'ParameterizeIce');
+ 	loaddata(org,'Bathymetry');
+ 	loaddata(org,'IceSheetGeometry');
+-        endtime = round(MITgcmDeltaT * floor(final_time*y2s/MITgcmDeltaT));
++		endtime = round(MITgcmDeltaT * floor(final_time*y2s/MITgcmDeltaT));
++		outputtime = round(MITgcmDeltaT * floor(time_step*y2s/MITgcmDeltaT));
+ 
+         % {{{ prepare MITgcm 
+         % rename previous run directory and create new one
+@@ -966,7 +967,7 @@
+                 continue;
+             end
+             if strcmpi(tline,' taveFreq=2592000.,'),
+-                fprintf(fido,'%s%i%s\n',' taveFreq= ',endtime,',');
++                fprintf(fido,'%s%i%s\n',' taveFreq= ',outputtime,',');
+                 continue;
+             end
+             if strcmpi(tline,' rhoConst=1030.,'),
+@@ -1001,19 +1002,14 @@
+ % }}}
+ 
+ %Fields and tolerances to track changes
+-fnm=['run/SHICE_fwFluxtave.0000000146.data'];
++fnm=['run/SHICE_fwFluxtave.0000000006.data'];
+ melting_rate_1=readbin(fnm,[Nx Ny]);
+-melting_rate_2=melting_rate_1;
+-melting_rate_3=melting_rate_1;
+-melting_rate_4=melting_rate_1;
+-%fnm=['run/SHICE_fwFluxtave_0000004380.data'];
+-%melting_rate_1=readbin(fnm,[Nx Ny]);
+-%fnm=['run/SHICE_fwFluxtave_0000008760.data'];
+-%melting_rate_2=readbin(fnm,[Nx Ny]);
+-%fnm=['run/SHICE_fwFluxtave_0000013140.data'];
+-%melting_rate_3=readbin(fnm,[Nx Ny]);
+-%fnm=['run/SHICE_fwFluxtave_0000017520.data'];
+-%melting_rate_4=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave.0000000012.data'];
++melting_rate_2=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave.0000000018.data'];
++melting_rate_3=readbin(fnm,[Nx Ny]);
++fnm=['run/SHICE_fwFluxtave.0000000024.data'];
++melting_rate_4=readbin(fnm,[Nx Ny]);
+ field_names     ={'Base1','Melting1','Vx2','Vy2','Thickness2','Base2','MaskGroundediceLevelset2','FloatingiceMeltingRate2',...
+ 	'Melting2','Vx3','Vy3','Thickness3','Base3','MaskGroundediceLevelset3','FloatingiceMeltingRate3',...
+ 	'Melting3','Vx4','Vy4','Thickness4','Base4','MaskGroundediceLevelset4','FloatingiceMeltingRate4','Melting4'};
+@@ -1045,28 +1041,3 @@
+ 	(md.results.TransientSolution(4).BasalforcingsFloatingiceMeltingRate),...
+ 	(melting_rate_4(:)),...
+ 	};
+-%field_values={...
+-%	(md.results(1).TransientSolution(end).Base),...
+-%	(melting_rate_1(:)),...
+-%	(md.results(2).TransientSolution(end).Vx),...
+-%	(md.results(2).TransientSolution(end).Vy),...
+-%	(md.results(2).TransientSolution(end).Thickness),...
+-%	(md.results(2).TransientSolution(end).Base),...
+-%	(md.results(2).TransientSolution(end).MaskGroundediceLevelset),...
+-%	(md.results(2).TransientSolution(end).FloatingiceMeltingRate),...
+-%	(melting_rate_2(:)),...
+-%	(md.results(3).TransientSolution(end).Vx),...
+-%	(md.results(3).TransientSolution(end).Vy),...
+-%	(md.results(3).TransientSolution(end).Thickness),...
+-%	(md.results(3).TransientSolution(end).Base),...
+-%	(md.results(3).TransientSolution(end).MaskGroundediceLevelset),...
+-%	(md.results(3).TransientSolution(end).FloatingiceMeltingRate),...
+-%	(melting_rate_3(:)),...
+-%	(md.results(4).TransientSolution(end).Vx),...
+-%	(md.results(4).TransientSolution(end).Vy),...
+-%	(md.results(4).TransientSolution(end).Thickness),...
+-%	(md.results(4).TransientSolution(end).Base),...
+-%	(md.results(4).TransientSolution(end).MaskGroundediceLevelset),...
+-%	(md.results(4).TransientSolution(end).FloatingiceMeltingRate),...
+-%	(melting_rate_4(:)),...
+-%	};
+Index: ../trunk-jpl/test/Archives/Archive4002.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive4002.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive4002.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive4002.arch	(revision 22726)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive4002.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22726-22727.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22726-22727.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22726-22727.diff	(revision 22755)
@@ -0,0 +1,224 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22726)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22727)
+@@ -159,6 +159,8 @@
+ 	InversionAlgorithmEnum,
+ 	InversionControlParametersEnum,
+ 	InversionControlScalingFactorsEnum,
++	ControlInputSizeMEnum,
++	ControlInputSizeNEnum,
+ 	InversionCostFunctionsEnum,
+ 	InversionDxminEnum,
+ 	InversionGatolEnum,
+@@ -658,6 +660,10 @@
+ 	ContourEnum,
+ 	ContoursEnum,
+ 	ControlInputEnum,
++	ControlInputValuesEnum,
++	ControlInputMinsEnum,
++	ControlInputMaxsEnum,
++	ControlInputGradEnum,
+ 	CrouzeixRaviartEnum,
+ 	CuffeyEnum,
+ 	CuffeyTemperateEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22726)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22727)
+@@ -167,6 +167,8 @@
+ 		case InversionAlgorithmEnum : return "InversionAlgorithm";
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
++		case ControlInputSizeMEnum : return "ControlInputSizeM";
++		case ControlInputSizeNEnum : return "ControlInputSizeN";
+ 		case InversionCostFunctionsEnum : return "InversionCostFunctions";
+ 		case InversionDxminEnum : return "InversionDxmin";
+ 		case InversionGatolEnum : return "InversionGatol";
+@@ -662,6 +664,10 @@
+ 		case ContourEnum : return "Contour";
+ 		case ContoursEnum : return "Contours";
+ 		case ControlInputEnum : return "ControlInput";
++		case ControlInputValuesEnum : return "ControlInputValues";
++		case ControlInputMinsEnum : return "ControlInputMins";
++		case ControlInputMaxsEnum : return "ControlInputMaxs";
++		case ControlInputGradEnum : return "ControlInputGrad";
+ 		case CrouzeixRaviartEnum : return "CrouzeixRaviart";
+ 		case CuffeyEnum : return "Cuffey";
+ 		case CuffeyTemperateEnum : return "CuffeyTemperate";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22726)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22727)
+@@ -170,6 +170,8 @@
+ 	      else if (strcmp(name,"InversionAlgorithm")==0) return InversionAlgorithmEnum;
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
++	      else if (strcmp(name,"ControlInputSizeM")==0) return ControlInputSizeMEnum;
++	      else if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+ 	      else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
+ 	      else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
+@@ -257,12 +259,12 @@
+ 	      else if (strcmp(name,"SealevelriseTidalLoveK")==0) return SealevelriseTidalLoveKEnum;
+ 	      else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum;
+ 	      else if (strcmp(name,"SealevelriseUElastic")==0) return SealevelriseUElasticEnum;
+-	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+-	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
++	      if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
++	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
++	      else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum;
+ 	      else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
+ 	      else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum;
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
+ 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
+-	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Base")==0) return BaseEnum;
++	      if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
++	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum;
++	      else if (strcmp(name,"Base")==0) return BaseEnum;
+ 	      else if (strcmp(name,"Bed")==0) return BedEnum;
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
+ 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
+ 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+-	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
+-	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
++	      if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
++	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
++	      else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
+ 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
+ 	      else if (strcmp(name,"SmbA")==0) return SmbAEnum;
+ 	      else if (strcmp(name,"SmbAini")==0) return SmbAiniEnum;
+@@ -626,12 +628,12 @@
+ 	      else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
+ 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+ 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+-	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+-	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
+          else stage=6;
+    }
+    if(stage==6){
+-	      if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
++	      if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
++	      else if (strcmp(name,"InputsEND")==0) return InputsENDEnum;
++	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"AdaptiveTimestepping")==0) return AdaptiveTimesteppingEnum;
+ 	      else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+@@ -677,6 +679,10 @@
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+ 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
+ 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
++	      else if (strcmp(name,"ControlInputValues")==0) return ControlInputValuesEnum;
++	      else if (strcmp(name,"ControlInputMins")==0) return ControlInputMinsEnum;
++	      else if (strcmp(name,"ControlInputMaxs")==0) return ControlInputMaxsEnum;
++	      else if (strcmp(name,"ControlInputGrad")==0) return ControlInputGradEnum;
+ 	      else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
+ 	      else if (strcmp(name,"Cuffey")==0) return CuffeyEnum;
+ 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
+@@ -745,16 +751,16 @@
+ 	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
+ 	      else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+-	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
++         else stage=7;
++   }
++   if(stage==7){
++	      if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum;
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
+-         else stage=7;
+-   }
+-   if(stage==7){
+-	      if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
++	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
+ 	      else if (strcmp(name,"Gradient3")==0) return Gradient3Enum;
+ 	      else if (strcmp(name,"GroundedArea")==0) return GroundedAreaEnum;
+ 	      else if (strcmp(name,"GroundedAreaScaled")==0) return GroundedAreaScaledEnum;
+@@ -868,16 +874,16 @@
+ 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
+ 	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+ 	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
+-	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
++         else stage=8;
++   }
++   if(stage==8){
++	      if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLat")==0) return MeshLatEnum;
+ 	      else if (strcmp(name,"MeshLong")==0) return MeshLongEnum;
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+-         else stage=8;
+-   }
+-   if(stage==8){
+-	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+@@ -991,16 +997,16 @@
+ 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
+ 	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+ 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+-	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
++         else stage=9;
++   }
++   if(stage==9){
++	      if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+ 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+ 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+ 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+ 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
+ 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
+-         else stage=9;
+-   }
+-   if(stage==9){
+-	      if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
++	      else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum;
+ 	      else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum;
+ 	      else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
+ 	      else if (strcmp(name,"Outputdefinition100")==0) return Outputdefinition100Enum;
+@@ -1114,16 +1120,16 @@
+ 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+-	      else if (strcmp(name,"Tria")==0) return TriaEnum;
++         else stage=10;
++   }
++   if(stage==10){
++	      if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+ 	      else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+ 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+-         else stage=10;
+-   }
+-   if(stage==10){
+-	      if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
++	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+ 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"Water")==0) return WaterEnum;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22727-22728.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22727-22728.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22727-22728.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22727)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22728)
+@@ -820,7 +820,7 @@
+ 		dT_turb = turb  / TCs;
+ 
+ 		// upward longwave contribution
+-		ulw = - SB * pow(Ts,4.0)* teValue * dt;
++		ulw = - (SB * pow(Ts,4.0)* teValue) * dt ;
+ 		dT_ulw = ulw / TCs;
+ 		
+ 		// new grid point temperature
+@@ -1512,7 +1512,7 @@
+ 		for(int i=0;i<n;i++)W[i] += dW[i];
+ 
+ 		//calculate Rsum:
+-		Rsum=cellsum(R,n);
++		Rsum=cellsum(R,n) + flxDn[n];
+ 
+ 		// delete all cells with zero mass
+ 		D_size=0; for(int i=0;i<n;i++)if(m[i]>0.0)D_size++; 
+@@ -1539,7 +1539,7 @@
+ 		xDelete<IssmDouble>(F);
+ 		xDelete<IssmDouble>(R);
+ 	}
+-    
++
+ 	//Merging of cells as they are burried under snow.
+ 	Zcum=xNew<IssmDouble>(n);
+ 	dzMin2=xNew<IssmDouble>(n);
+@@ -1668,8 +1668,8 @@
+ 				cellsplit(&T, n, j,1.0);
+ 				cellsplit(&d, n, j,1.0);
+ 				cellsplit(&a, n, j,1.0);
+-				cellsplit(&EI, n, j,1.0);
+-				cellsplit(&EW, n, j,1.0);
++				cellsplit(&EI, n, j,.5);
++				cellsplit(&EW, n, j,.5);
+ 				cellsplit(&re, n, j,1.0);
+ 				cellsplit(&gdn, n, j,1.0);
+ 				cellsplit(&gsp, n, j,1.0);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22728-22729.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22728-22729.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22728-22729.diff	(revision 22755)
@@ -0,0 +1,168 @@
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 22728)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 22729)
+@@ -22,7 +22,7 @@
+ WRAPPER(InterpFromMeshToGrid_python){
+ 
+ 	/*inputs */
+-	double* index=NULL;
++	int*    index=NULL;
+ 	double* x=NULL;
+ 	double* y=NULL;
+ 	int     nel,nods;
+@@ -62,7 +62,7 @@
+ 	WriteData(GRIDDATA,griddata,nlines,ncols);
+ 
+ 	/*Free ressources: */
+-	xDelete<double>(index);
++	xDelete<int>(index);
+ 	xDelete<double>(x);
+ 	xDelete<double>(y);
+ 	xDelete<double>(meshdata);
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h	(revision 22728)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h	(revision 22729)
+@@ -7,6 +7,6 @@
+ 
+ #include "../../toolkits/toolkits.h"
+ 
+-void InterpFromMeshToGridx(double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value);
++void InterpFromMeshToGridx(double** pgriddata,int* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value);
+ 
+ #endif /* _INTERPFROMMESHTOGRIDX_H */
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 22728)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 22729)
+@@ -5,10 +5,9 @@
+ #include "./InterpFromMeshToGridx.h"
+ #include "../../shared/shared.h"
+ 
+-void InterpFromMeshToGridx(double** pgriddata,double* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value){
++void InterpFromMeshToGridx(double** pgriddata,int* index_mesh, double* x_mesh, double* y_mesh, int nods,int nels, double* data_mesh,int data_length,double* x_grid,double* y_grid,int nlines,int ncols,double default_value){
+ 
+ 	/*Intermediary*/
+-	int    i,j;
+ 	int    i1,i2,j1,j2;
+ 	int    interpolation_type;
+ 	double area;
+@@ -27,20 +26,18 @@
+ 	else if(data_length==nels) interpolation_type=2;
+ 	else _error_("length of vector data not supported yet. It should be of length (number of nodes) or (number of elements)!");
+ 
+-	/*First, allocate pointers: */
+-	double* griddata=xNewZeroInit<double>(nlines*ncols);
++	/*First, prepare output*/
++	double* griddata=xNew<double>(nlines*ncols);
++	for(int i=0;i<nlines;i++) for(int j=0;j<ncols; j++) griddata[i*ncols+j]=default_value;
+ 
+-	/*Set debug to 1 if there are lots of elements*/
++	/*Set debug to "true" if there are lots of elements*/
+ 	bool debug=(bool)((double)ncols*nlines*nels >= 5.e10);
+ 
+-	/*Initialize coordintes and griddata*/
+-	for(i=0;i<nlines;i++) for(j=0;j<ncols; j++) griddata[i*ncols+j]=default_value;
+-
+ 	/*figure out if x or y are flipped*/
+ 	bool xflip = false;
+ 	bool yflip = false;
+-	if (x_grid[1]-x_grid[0]<0) xflip=true;
+-	if (y_grid[1]-y_grid[0]<0) yflip=true;
++	if(x_grid[1]-x_grid[0]<0) xflip=true;
++	if(y_grid[1]-y_grid[0]<0) yflip=true;
+ 
+ 	/*Get min/max coordinates of the grid*/
+ 	double xposting = x_grid[1]-x_grid[0];
+@@ -66,23 +63,23 @@
+ 	for(int n=0;n<nels;n++){
+ 
+ 		/*display current iteration*/
+-		if(debug && fmod((double)n,(double)100)==0)
++		if(debug && fmod(double(n),1000)==0)
+ 		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(n)/double(nels)*100<<"%   ");
+ 
+ 		/*Get extrema coordinates of current elements*/
+-		x_tria_min=x_mesh[(int)index_mesh[3*n+0]-1]; x_tria_max=x_tria_min;
+-		y_tria_min=y_mesh[(int)index_mesh[3*n+0]-1]; y_tria_max=y_tria_min;
+-		for(i=1;i<3;i++){
+-			if(x_mesh[(int)index_mesh[3*n+i]-1]<x_tria_min) x_tria_min=x_mesh[(int)index_mesh[3*n+i]-1];
+-			if(x_mesh[(int)index_mesh[3*n+i]-1]>x_tria_max) x_tria_max=x_mesh[(int)index_mesh[3*n+i]-1];
+-			if(y_mesh[(int)index_mesh[3*n+i]-1]<y_tria_min) y_tria_min=y_mesh[(int)index_mesh[3*n+i]-1];
+-			if(y_mesh[(int)index_mesh[3*n+i]-1]>y_tria_max) y_tria_max=y_mesh[(int)index_mesh[3*n+i]-1];
++		x_tria_min=x_mesh[index_mesh[3*n+0]-1]; x_tria_max=x_tria_min;
++		y_tria_min=y_mesh[index_mesh[3*n+0]-1]; y_tria_max=y_tria_min;
++		for(int i=1;i<3;i++){
++			if(x_mesh[index_mesh[3*n+i]-1]<x_tria_min) x_tria_min=x_mesh[index_mesh[3*n+i]-1];
++			if(x_mesh[index_mesh[3*n+i]-1]>x_tria_max) x_tria_max=x_mesh[index_mesh[3*n+i]-1];
++			if(y_mesh[index_mesh[3*n+i]-1]<y_tria_min) y_tria_min=y_mesh[index_mesh[3*n+i]-1];
++			if(y_mesh[index_mesh[3*n+i]-1]>y_tria_max) y_tria_max=y_mesh[index_mesh[3*n+i]-1];
+ 		}
+ 
+ 		/*if the current triangle is not in the grid, continue*/
+ 		if( (x_tria_min>x_grid_max) || (x_tria_max<x_grid_min) || (y_tria_min>y_grid_max) || (y_tria_max<y_grid_min) ) continue;
+ 
+-		/*Get indices i and j that form a square around the currant triangle*/
++		/*Get indices i and j that form a square around the current triangle*/
+ 		if(yflip){
+ 			i1=max(0,       (int)floor((y_tria_max-y_grid_max)/yposting)-1);
+ 			i2=min(nlines-1,(int)ceil((y_tria_min-y_grid_max)/yposting));
+@@ -102,37 +99,37 @@
+ 
+ 		/*get area of the current element (Jacobian = 2 * area)*/
+ 		//area =x2 * y3 - y2*x3 + x1 * y2 - y1 * x2 + x3 * y1 - y3 * x1;
+-		area=x_mesh[(int)index_mesh[3*n+1]-1]*y_mesh[(int)index_mesh[3*n+2]-1]-y_mesh[(int)index_mesh[3*n+1]-1]*x_mesh[(int)index_mesh[3*n+2]-1]
+-		  +  x_mesh[(int)index_mesh[3*n+0]-1]*y_mesh[(int)index_mesh[3*n+1]-1]-y_mesh[(int)index_mesh[3*n+0]-1]*x_mesh[(int)index_mesh[3*n+1]-1]
+-		  +  x_mesh[(int)index_mesh[3*n+2]-1]*y_mesh[(int)index_mesh[3*n+0]-1]-y_mesh[(int)index_mesh[3*n+2]-1]*x_mesh[(int)index_mesh[3*n+0]-1];
++		area=x_mesh[index_mesh[3*n+1]-1]*y_mesh[index_mesh[3*n+2]-1]-y_mesh[index_mesh[3*n+1]-1]*x_mesh[index_mesh[3*n+2]-1]
++		  +  x_mesh[index_mesh[3*n+0]-1]*y_mesh[index_mesh[3*n+1]-1]-y_mesh[index_mesh[3*n+0]-1]*x_mesh[index_mesh[3*n+1]-1]
++		  +  x_mesh[index_mesh[3*n+2]-1]*y_mesh[index_mesh[3*n+0]-1]-y_mesh[index_mesh[3*n+2]-1]*x_mesh[index_mesh[3*n+0]-1];
+ 
+ 		/*Go through x_grid and y_grid and interpolate if necessary*/
+-		for(i=i1;i<=i2;i++){
++		for(int i=i1;i<=i2;i++){
+ 
+ 			//exit if y not between y_tria_min and y_tria_max
+ 			if((y_grid[i]>y_tria_max) || (y_grid[i]<y_tria_min)) continue;
+ 
+-			for(j=j1;j<=j2; j++){
++			for(int j=j1;j<=j2; j++){
+ 
+ 				//exit if x not between x_tria_min and x_tria_max
+ 				if((x_grid[j]>x_tria_max) || (x_grid[j]<x_tria_min)) continue;
+ 
+ 				/*Get first area coordinate = det(x-x3  x2-x3 ; y-y3   y2-y3)/area*/
+-				area_1=((x_grid[j]-x_mesh[(int)index_mesh[3*n+2]-1])*(y_mesh[(int)index_mesh[3*n+1]-1]-y_mesh[(int)index_mesh[3*n+2]-1]) 
+-							-  (y_grid[i]-y_mesh[(int)index_mesh[3*n+2]-1])*(x_mesh[(int)index_mesh[3*n+1]-1]-x_mesh[(int)index_mesh[3*n+2]-1]))/area;
++				area_1=((x_grid[j]-x_mesh[index_mesh[3*n+2]-1])*(y_mesh[index_mesh[3*n+1]-1]-y_mesh[index_mesh[3*n+2]-1]) 
++							-  (y_grid[i]-y_mesh[index_mesh[3*n+2]-1])*(x_mesh[index_mesh[3*n+1]-1]-x_mesh[index_mesh[3*n+2]-1]))/area;
+ 				/*Get second area coordinate =det(x1-x3  x-x3 ; y1-y3   y-y3)/area*/
+-				area_2=((x_mesh[(int)index_mesh[3*n+0]-1]-x_mesh[(int)index_mesh[3*n+2]-1])*(y_grid[i]-y_mesh[(int)index_mesh[3*n+2]-1]) 
+-							- (y_mesh[(int)index_mesh[3*n+0]-1]-y_mesh[(int)index_mesh[3*n+2]-1])*(x_grid[j]-x_mesh[(int)index_mesh[3*n+2]-1]))/area;
++				area_2=((x_mesh[index_mesh[3*n+0]-1]-x_mesh[index_mesh[3*n+2]-1])*(y_grid[i]-y_mesh[index_mesh[3*n+2]-1]) 
++							- (y_mesh[index_mesh[3*n+0]-1]-y_mesh[index_mesh[3*n+2]-1])*(x_grid[j]-x_mesh[index_mesh[3*n+2]-1]))/area;
+ 				/*Get third area coordinate = 1-area1-area2*/
+ 				area_3=1.-area_1-area_2;
+ 
+ 				/*is the current point in the current element?*/
+-				if(area_1>-10e-12 && area_2>-10e-12 && area_3>-10e-12){
++				if(area_1>-1e-12 && area_2>-1e-12 && area_3>-1e-12){
+ 
+ 					/*Yes ! compute the value on the point*/
+ 					if(interpolation_type==1){
+ 						/*nodal interpolation*/
+-						data_value=area_1*data_mesh[(int)index_mesh[3*n+0]-1]+area_2*data_mesh[(int)index_mesh[3*n+1]-1]+area_3*data_mesh[(int)index_mesh[3*n+2]-1];
++						data_value=area_1*data_mesh[index_mesh[3*n+0]-1]+area_2*data_mesh[index_mesh[3*n+1]-1]+area_3*data_mesh[index_mesh[3*n+2]-1];
+ 					}
+ 					else{
+ 						/*element interpolation*/
+@@ -146,7 +143,7 @@
+ 			}
+ 		}
+ 	}
+-	if(debug) _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
++	if(debug) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<fixed<<100.<<"%   \n");
+ 
+ 	/*Assign output pointers:*/
+ 	*pgriddata=griddata;
Index: /issm/oecreview/Archive/21724-22754/ISSM-22729-22730.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22729-22730.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22729-22730.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/ApiPrintf.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/ApiPrintf.cpp	(revision 22729)
++++ ../trunk-jpl/src/wrappers/matlab/io/ApiPrintf.cpp	(revision 22730)
+@@ -14,6 +14,7 @@
+ void ApiPrintf(const char* string){
+ 
+ 	/*use mexPrintf in matlab: */
+-	mexPrintf(string);
++	//mexPrintf(string); /*Messes up percentages (like "interpolation progress: 100.00%")*/
++	printf("%s",string);
+ 	return;
+ }
Index: /issm/oecreview/Archive/21724-22754/ISSM-22730-22731.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22730-22731.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22730-22731.diff	(revision 22755)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h	(revision 22730)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h	(revision 22731)
+@@ -14,7 +14,7 @@
+ 	int                 interpolation_type;
+ 	bool                debug;
+ 	int                 nels_data;
+-	double              *index_data;
++	int                *index_data;
+ 	double              *x_data;
+ 	double              *y_data;
+ 	double              *data;
+@@ -30,7 +30,7 @@
+ 
+ } InterpFromMesh2dxThreadStruct;
+ 
+-int InterpFromMesh2dx(IssmSeqVec<IssmPDouble>** pdata_prime,double* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length, double* x_prime, double* y_prime, int nods_prime,
++int InterpFromMesh2dx(IssmSeqVec<IssmPDouble>** pdata_prime,int* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length, double* x_prime, double* y_prime, int nods_prime,
+ 		double* default_values,int num_default_values,Contour<IssmPDouble>** contours,int numcontours);
+ 
+ void* InterpFromMesh2dxt(void* vInterpFromMesh2dxThreadStruct);
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 22730)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 22731)
+@@ -9,7 +9,7 @@
+ #include "../ContourToNodesx/ContourToNodesx.h"
+ 
+ int InterpFromMesh2dx(IssmSeqVec<IssmPDouble>** pdata_prime,
+-			double* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length,
++			int* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length,
+ 			double* x_prime, double* y_prime, int nods_prime,
+ 			double* default_values,int num_default_values,Contour<IssmPDouble>** contours,int numcontours){
+ 
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 22730)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 22731)
+@@ -22,7 +22,7 @@
+ 	int     interpolation_type      = gate->interpolation_type;
+ 	bool    debug                   = gate->debug;
+ 	int     nels_data               = gate->nels_data;
+-	double *index_data              = gate->index_data;
++	int    *index_data              = gate->index_data;
+ 	double *x_data                  = gate->x_data;
+ 	double *y_data                  = gate->y_data;
+ 	double *data                    = gate->data;
+@@ -49,16 +49,16 @@
+ 		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%   ");
+ 
+ 		/*if there is no point inside the domain, go to next iteration*/
+-		if ( (x_data[(int)index_data[3*i+0]-1]<xmin) && (x_data[(int)index_data[3*i+1]-1]<xmin) && (x_data[(int)index_data[3*i+2]-1]<xmin)) continue;
+-		if ( (x_data[(int)index_data[3*i+0]-1]>xmax) && (x_data[(int)index_data[3*i+1]-1]>xmax) && (x_data[(int)index_data[3*i+2]-1]>xmax)) continue;
+-		if ( (y_data[(int)index_data[3*i+0]-1]<ymin) && (y_data[(int)index_data[3*i+1]-1]<ymin) && (y_data[(int)index_data[3*i+2]-1]<ymin)) continue;
+-		if ( (y_data[(int)index_data[3*i+0]-1]>ymax) && (y_data[(int)index_data[3*i+1]-1]>ymax) && (y_data[(int)index_data[3*i+2]-1]>ymax)) continue;
++		if ( (x_data[index_data[3*i+0]-1]<xmin) && (x_data[index_data[3*i+1]-1]<xmin) && (x_data[index_data[3*i+2]-1]<xmin)) continue;
++		if ( (x_data[index_data[3*i+0]-1]>xmax) && (x_data[index_data[3*i+1]-1]>xmax) && (x_data[index_data[3*i+2]-1]>xmax)) continue;
++		if ( (y_data[index_data[3*i+0]-1]<ymin) && (y_data[index_data[3*i+1]-1]<ymin) && (y_data[index_data[3*i+2]-1]<ymin)) continue;
++		if ( (y_data[index_data[3*i+0]-1]>ymax) && (y_data[index_data[3*i+1]-1]>ymax) && (y_data[index_data[3*i+2]-1]>ymax)) continue;
+ 
+ 		/*get area of the current element (Jacobian = 2 * area)*/
+ 		//area =x2 * y3 - y2*x3 + x1 * y2 - y1 * x2 + x3 * y1 - y3 * x1;
+-		area=x_data[(int)index_data[3*i+1]-1]*y_data[(int)index_data[3*i+2]-1]-y_data[(int)index_data[3*i+1]-1]*x_data[(int)index_data[3*i+2]-1]
+-		  +  x_data[(int)index_data[3*i+0]-1]*y_data[(int)index_data[3*i+1]-1]-y_data[(int)index_data[3*i+0]-1]*x_data[(int)index_data[3*i+1]-1]
+-		  +  x_data[(int)index_data[3*i+2]-1]*y_data[(int)index_data[3*i+0]-1]-y_data[(int)index_data[3*i+2]-1]*x_data[(int)index_data[3*i+0]-1];
++		area=x_data[index_data[3*i+1]-1]*y_data[index_data[3*i+2]-1]-y_data[index_data[3*i+1]-1]*x_data[index_data[3*i+2]-1]
++		  +  x_data[index_data[3*i+0]-1]*y_data[index_data[3*i+1]-1]-y_data[index_data[3*i+0]-1]*x_data[index_data[3*i+1]-1]
++		  +  x_data[index_data[3*i+2]-1]*y_data[index_data[3*i+0]-1]-y_data[index_data[3*i+2]-1]*x_data[index_data[3*i+0]-1];
+ 
+ 		/*loop over the prime nodes*/
+ 		for (j=0;j<nods_prime;j++){
+@@ -66,11 +66,11 @@
+ 			if(incontour[j]){
+ 
+ 				/*Get first area coordinate = det(x-x3  x2-x3 ; y-y3   y2-y3)/area*/
+-				area_1=((x_prime[j]-x_data[(int)index_data[3*i+2]-1])*(y_data[(int)index_data[3*i+1]-1]-y_data[(int)index_data[3*i+2]-1]) 
+-						-  (y_prime[j]-y_data[(int)index_data[3*i+2]-1])*(x_data[(int)index_data[3*i+1]-1]-x_data[(int)index_data[3*i+2]-1]))/area;
++				area_1=((x_prime[j]-x_data[index_data[3*i+2]-1])*(y_data[index_data[3*i+1]-1]-y_data[index_data[3*i+2]-1]) 
++						-  (y_prime[j]-y_data[index_data[3*i+2]-1])*(x_data[index_data[3*i+1]-1]-x_data[index_data[3*i+2]-1]))/area;
+ 				/*Get second area coordinate =det(x1-x3  x-x3 ; y1-y3   y-y3)/area*/
+-				area_2=((x_data[(int)index_data[3*i+0]-1]-x_data[(int)index_data[3*i+2]-1])*(y_prime[j]-y_data[(int)index_data[3*i+2]-1]) 
+-						- (y_data[(int)index_data[3*i+0]-1]-y_data[(int)index_data[3*i+2]-1])*(x_prime[j]-x_data[(int)index_data[3*i+2]-1]))/area;
++				area_2=((x_data[index_data[3*i+0]-1]-x_data[index_data[3*i+2]-1])*(y_prime[j]-y_data[index_data[3*i+2]-1]) 
++						- (y_data[index_data[3*i+0]-1]-y_data[index_data[3*i+2]-1])*(x_prime[j]-x_data[index_data[3*i+2]-1]))/area;
+ 				/*Get third area coordinate = 1-area1-area2*/
+ 				area_3=1-area_1-area_2;
+ 
+@@ -80,7 +80,7 @@
+ 					/*Yes ! compute the value on the point*/
+ 					if (interpolation_type==1){
+ 						/*nodal interpolation*/
+-						data_value=area_1*data[(int)index_data[3*i+0]-1]+area_2*data[(int)index_data[3*i+1]-1]+area_3*data[(int)index_data[3*i+2]-1];
++						data_value=area_1*data[index_data[3*i+0]-1]+area_2*data[index_data[3*i+1]-1]+area_3*data[index_data[3*i+2]-1];
+ 					}
+ 					else{
+ 						/*element interpolation*/
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 22730)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 22731)
+@@ -63,7 +63,7 @@
+ 	for(int n=0;n<nels;n++){
+ 
+ 		/*display current iteration*/
+-		if(debug && fmod(double(n),1000)==0)
++		if(debug && n%10000==0)
+ 		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(n)/double(nels)*100<<"%   ");
+ 
+ 		/*Get extrema coordinates of current elements*/
+Index: ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 22730)
++++ ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 22731)
+@@ -22,26 +22,20 @@
+ WRAPPER(InterpFromMesh2d_python){
+ 
+ 	/*input: */
+-	double* index_data=NULL;
++	int*    index_data=NULL;
+ 	int     index_data_rows;
+ 	int     dummy;
+-
+ 	double* x_data=NULL;
+ 	int     x_data_rows;
+-
+ 	double* y_data=NULL;
+ 	int     y_data_rows;
+-
+ 	double* data=NULL; 
+ 	int     data_rows;
+ 	int     data_cols;
+-
+ 	double* x_prime=NULL;
+ 	double* y_prime=NULL;
+-
+ 	int     x_prime_rows;
+ 	int     y_prime_rows;
+-
+ 	double* default_values=NULL;
+ 	int     num_default_values=0;
+ 
+@@ -138,7 +132,7 @@
+ 	WriteData(DATAPRIME,data_prime);
+ 
+ 	/*end module: */
+-	xDelete<double>(index_data);
++	xDelete<int>(index_data);
+ 	xDelete<double>(x_data);
+ 	xDelete<double>(y_data);
+ 	xDelete<double>(data);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22731-22732.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22731-22732.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22731-22732.diff	(revision 22755)
@@ -0,0 +1,636 @@
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(revision 22731)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(revision 22732)
+@@ -12,8 +12,7 @@
+ 
+ void UpdateBoxIdsPico(FemModel* femmodel);
+ void ComputeBoxAreasPico(FemModel* femmodel);
+-void UpdateFirstBoxPico(FemModel* femmodel);
++void UpdateBoxPico(FemModel* femmodel, int loopboxid);
+ void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid);
+-void UpdateNextBoxPico(FemModel* femmodel, int loopboxid);
+ 
+ #endif  /* _FloatingiceMeltingRatePicox_H*/
+Index: ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp	(revision 22732)
+@@ -23,16 +23,16 @@
+ 
+ 	_assert_(in_values && in_time);
+ 
+-	enum_type=in_enum_type;
+-	M=in_M; //Number of time steps
+-	N=in_N; //Number of rows
+-	interpolation=interpolation_on;
++	this->enum_type=in_enum_type;
++	this->M=in_M; //Number of rows
++	this->N=in_N; //Number of timesteps
++	this->interpolation=interpolation_on;
+ 
+-	values=xNew<IssmDouble>(M*N);
++	this->values=xNew<IssmDouble>(M*N);
+ 	xMemCpy<IssmDouble>(values,in_values,M*N);
+ 
+-	timesteps=xNew<IssmDouble>(M);
+-	xMemCpy<IssmDouble>(timesteps,in_time,M);
++	this->timesteps=xNew<IssmDouble>(N);
++	xMemCpy<IssmDouble>(timesteps,in_time,N);
+ }
+ /*}}}*/
+ TransientArrayParam::~TransientArrayParam(){/*{{{*/
+@@ -99,8 +99,9 @@
+ 
+ 	IssmDouble output;
+ 	bool       found;
++	_assert_(row>=0 && row<this->M); 
+ 
+-	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
++	/*Ok, we have the time and row, go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+ 	if(time<this->timesteps[0]){
+ 		/*get values for the first time: */
+@@ -117,15 +118,15 @@
+ 		for(int i=0;i<this->N;i++){
+ 			if(time==this->timesteps[i]){
+ 				/*We are right on one step time: */
+-				output=this->values[row*this->N+i];
++				output = this->values[row*this->N+i];
+ 				found=true;
+ 				break; //we are done with the time interpolation.
+ 			}
+ 			else{
+ 				if(this->timesteps[i]<time && time<this->timesteps[i+1]){
+-					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
+-					IssmDouble deltat=this->timesteps[i+1]-this->timesteps[i];
+-					IssmDouble alpha=(time-this->timesteps[i])/deltat;
++					/*ok, we have the interval [i:i+1]. Interpolate linearly for now: */
++					IssmDouble deltat = this->timesteps[i+1]-this->timesteps[i];
++					IssmDouble alpha  = (time-this->timesteps[i])/deltat;
+ 					if(interpolation==true) output=(1.0-alpha)*this->values[row*this->N+i] + alpha*this->values[row*this->N+i+1];
+ 					else output=this->values[row*this->N+i];
+ 					found=true;
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22731)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22732)
+@@ -10,30 +10,27 @@
+ 
+ 	int maxbox;
+ 
+-	/*First, reset all melt to 0 */
+-	for(int i=0;i<femmodel->elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		int numvertices = element->GetNumberOfVertices();
+-		IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
+-		element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+-		xDelete<IssmDouble>(values);
+-	}
++   /*First, reset all melt to 0 */
++   for(int i=0;i<femmodel->elements->Size();i++){
++	      Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++	      int numvertices = element->GetNumberOfVertices();
++	      IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
++	      element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
++	      xDelete<IssmDouble>(values);
++	   }
+ 
+-	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	UpdateBoxIdsPico(femmodel);
+-	ComputeBoxAreasPico(femmodel);
+-	UpdateFirstBoxPico(femmodel);
+-	for(int i=1;i<maxbox;i++){
+-		ComputeAverageOceanvarsPico(femmodel, i-1);
+-		UpdateNextBoxPico(femmodel, i);
++   femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
++   UpdateBoxIdsPico(femmodel);
++   ComputeBoxAreasPico(femmodel);
++   for(int i=0;i<maxbox;i++){
++	      UpdateBoxPico(femmodel,i);
++	      ComputeAverageOceanvarsPico(femmodel,i);
+ 	}
+ }/*}}}*/
+ 
+ void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
+ 
+-	int i,k,numvertices,num_basins,maxbox,basinid;
+-	IssmDouble dist_max,val;
+-	int* nd=NULL;
++	int         numvertices,num_basins,maxbox,basinid;
+ 	IssmDouble* dmax_basin=NULL;
+ 	IssmDouble* distances=NULL;
+ 
+@@ -48,9 +45,9 @@
+ 	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
+ 
+ 	/*find maximum distance to grounding line per domain and per basin*/
+-	dist_max=-1.;
+-	for(i=0;i<num_basins;i++){dmax_basin[i]=-1;}
+-	for(i=0;i<femmodel->elements->Size();i++){
++	IssmDouble dist_max=-1.;
++	for(int i=0;i<num_basins;i++){dmax_basin[i]=-1;}
++	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		if(!element->IsIceInElement() || !element->IsFloating()) continue;
+ 		numvertices = element->GetNumberOfVertices();
+@@ -57,7 +54,7 @@
+ 		distances=xNew<IssmDouble>(numvertices);
+ 		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
+ 		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-		for(k=0; k<numvertices; k++){
++		for(int k=0; k<numvertices; k++){
+ 			if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
+ 			if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
+ 		}
+@@ -65,16 +62,22 @@
+ 	}
+ 
+ 	/*Define maximum number of boxes per basin*/
+-	nd=xNew<int>(num_basins);
+-	for(i=0; i<num_basins;i++){
+-		val=sqrt(dmax_basin[i]/dist_max)*(maxbox-1);
+-		k=0;
+-		while(k<val+.5){k++;}
++	int* nd=xNew<int>(num_basins);
++	for(int i=0; i<num_basins;i++){
++		IssmDouble val=sqrt(dmax_basin[i]/dist_max)*(maxbox-1);
++
++		#ifdef _HAVE_ADOLC_
++		/*Do not use floor when AD is on*/
++		int k=0; while(k<val+.5){k++;}
+ 		nd[i]=k;
++
++		#else
++		nd[i]= reCast<int>(floor(val));
++		#endif
+ 	} 
+ 
+ 	/*Assign box numbers*/
+-	for(i=0;i<femmodel->elements->Size();i++){
++	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->PicoUpdateBoxid(nd);
+ 	}
+@@ -113,36 +116,31 @@
+ 	xDelete<IssmDouble>(sumareas);
+ 
+ }/*}}}*/
+-void UpdateFirstBoxPico(FemModel* femmodel){/*{{{*/
+-
++void UpdateBoxPico(FemModel* femmodel, int loopboxid){/*{{{*/
+ 	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->PicoUpdateFirstBox();
++		element->PicoUpdateBox(loopboxid);
+ 	}
+-
+ }/*}}}*/
+ void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid){/*{{{*/
+ 
+-	int i,k,p, num_basins, basinid, maxbox, M;
++	int num_basins, basinid, maxbox, M;
+ 	IssmDouble area, toc, soc, overturning;
+ 	IssmDouble* boxareas=NULL;
+ 	IssmDouble* overturning_weighted_avg=NULL;
+-	Element* element;
+-   Gauss* gauss;
+ 
+ 	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
+ 	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	M=maxbox*num_basins;
+ 	femmodel->parameters->FindParam(&boxareas,&M, BasalforcingsPicoBoxAreaEnum);
+-	IssmDouble* toc_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
+-	IssmDouble* soc_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
+-	IssmDouble* toc_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
+-	IssmDouble* soc_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
+-	IssmDouble* overturning_sumweightedavg =xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* toc_weighted_avg           = xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* soc_weighted_avg           = xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* toc_sumweightedavg         = xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* soc_sumweightedavg         = xNewZeroInit<IssmDouble>(num_basins);
++	IssmDouble* overturning_sumweightedavg = xNewZeroInit<IssmDouble>(num_basins);
+ 
+ 	/* Compute Toc and Soc weighted avg (boxes 0 to n-1) */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		if(!element->IsIceInElement() || !element->IsFloating()) continue;
+ 		int el_boxid;
+ 		element->inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);
+@@ -152,7 +150,7 @@
+ 		Input* socs_input=element->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input);
+ 
+ 		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-		gauss=element->NewGauss(1); gauss->GaussPoint(0);
++		Gauss* gauss=element->NewGauss(1); gauss->GaussPoint(0);
+ 		tocs_input->GetInputValue(&toc,gauss);
+ 		socs_input->GetInputValue(&soc,gauss);
+ 		delete gauss;
+@@ -165,8 +163,8 @@
+ 	ISSM_MPI_Allreduce(toc_weighted_avg,toc_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	ISSM_MPI_Allreduce(soc_weighted_avg,soc_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 
+-	for(k=0;k<num_basins;k++){
+-		p=k*maxbox+boxid; 
++	for(int k=0;k<num_basins;k++){
++		int p=k*maxbox+boxid; 
+ 		if(boxareas[p]==0) continue;	
+ 		toc_sumweightedavg[k] = toc_sumweightedavg[k]/boxareas[p];
+ 		soc_sumweightedavg[k] = soc_sumweightedavg[k]/boxareas[p];
+@@ -178,8 +176,8 @@
+ 	/* Compute overturning weighted avg (box 0 only) */
+ 	if(boxid==0){ 
+ 		overturning_weighted_avg=xNewZeroInit<IssmDouble>(num_basins);
+-		for(i=0;i<femmodel->elements->Size();i++){
+-			element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		for(int i=0;i<femmodel->elements->Size();i++){
++			Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 			if(!element->IsIceInElement() || !element->IsFloating()) continue;
+ 			int el_boxid;
+ 			element->inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);
+@@ -188,7 +186,7 @@
+ 	     	Input* overturnings_input=element->GetInput(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input);
+ 
+ 			element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-			gauss=element->NewGauss(1); gauss->GaussPoint(0);
++			Gauss* gauss=element->NewGauss(1); gauss->GaussPoint(0);
+ 			overturnings_input->GetInputValue(&overturning,gauss);
+ 			delete gauss;
+ 			area=element->GetHorizontalSurfaceArea();
+@@ -198,10 +196,9 @@
+ 		/*Syncronize across cpus*/
+ 		ISSM_MPI_Allreduce(overturning_weighted_avg,overturning_sumweightedavg,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 
+-		for(k=0;k<num_basins;k++){
+-			element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-			p=k*maxbox+boxid;
+-			if(boxareas[p]==0) continue;
++		for(int k=0;k<num_basins;k++){
++			int p=k*maxbox+boxid;
++			if(boxareas[p]==0.) continue;
+ 			overturning_sumweightedavg[k] = overturning_sumweightedavg[k]/boxareas[p];
+ 		}
+ 		femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoAverageOverturningEnum,overturning_sumweightedavg,num_basins));
+@@ -215,12 +212,4 @@
+ 	xDelete<IssmDouble>(toc_weighted_avg);
+ 	xDelete<IssmDouble>(soc_weighted_avg);
+ 	xDelete<IssmDouble>(boxareas);
+-
+ }/*}}}*/
+-void UpdateNextBoxPico(FemModel* femmodel, int loopboxid){/*{{{*/
+-	for(int i=0;i<femmodel->elements->Size();i++){
+-		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->PicoUpdateNextBox(loopboxid);	
+-	}
+-
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22731)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22732)
+@@ -234,11 +234,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
+ 				_assert_(M>1 && N>1); 
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,M,N));
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M));
+ 				xDelete<IssmDouble>(transparam);
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
+ 				_assert_(M>1 && N>1); 
+-				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,M,N));
++				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M));
+ 				xDelete<IssmDouble>(transparam);
+ 			break;
+ 		default:
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22732)
+@@ -110,8 +110,7 @@
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
+ 		void        PicoUpdateBoxid(int* pmax_boxid_basin);
+-		void        PicoUpdateFirstBox();
+-		void        PicoUpdateNextBox(int loopboxid);
++		void        PicoUpdateBox(int loopboxid);
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int         PressureInterpolation();
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22732)
+@@ -139,8 +139,7 @@
+ 		int            NumberofNodesPressure(void);
+ 		int            NumberofNodesVelocity(void);
+ 		void				PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
+-		void				PicoUpdateFirstBox(){_error_("not implemented yet");};
+-		void				PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
++		void				PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
+ 		void           PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int            PressureInterpolation();
+ 		void           ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22732)
+@@ -128,8 +128,7 @@
+ 		int         NumberofNodesPressure(void){_error_("not implemented yet");};
+ 		int         NumberofNodesVelocity(void){_error_("not implemented yet");};
+ 		void        PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
+-		void			PicoUpdateFirstBox(){_error_("not implemented yet");};
+-		void			PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
++		void			PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void){_error_("not implemented yet");};
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22732)
+@@ -136,8 +136,7 @@
+ 		int         NumberofNodesPressure(void);
+ 		int         NumberofNodesVelocity(void);
+ 		void			PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};	
+-		void			PicoUpdateFirstBox(){_error_("not implemented yet");};
+-		void			PicoUpdateNextBox(int loopboxid){_error_("not implemented yet");};
++		void			PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
+ 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
+ 		int         PressureInterpolation(void);
+ 		void        ResetFSBasalBoundaryCondition(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22732)
+@@ -277,8 +277,7 @@
+ 		virtual int        NumberofNodesPressure(void)=0;
+ 		virtual int        NumberofNodesVelocity(void)=0;
+ 		virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
+-		virtual void       PicoUpdateFirstBox()=0;
+-		virtual void       PicoUpdateNextBox(int loopboxid)=0;
++		virtual void       PicoUpdateBox(int loopboxid)=0;
+ 		virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+ 		virtual int        PressureInterpolation()=0;
+ 		virtual void       ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22731)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22732)
+@@ -2816,18 +2816,18 @@
+ 
+ 	this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));	
+ }/*}}}*/
+-void       Tria::PicoUpdateFirstBox(){/*{{{*/
++void       Tria::PicoUpdateBox(int loopboxid){/*{{{*/
+ 
+ 	if(!this->IsIceInElement() || !this->IsFloating()) return;
+ 
+ 	int boxid;
+ 	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-	if(boxid!=0) return;
++	if(loopboxid!=boxid) return;
+ 
+-	int basinid, maxbox, num_basins, numnodes, M;
+-	IssmDouble time, gamma_T, overturning_coeff,thickness;
+-	IssmDouble pressure, T_star,p_coeff, q_coeff,toc_farocean,soc_farocean;
+-	IssmDouble* boxareas   = NULL;
++	int        basinid, maxbox, num_basins, numnodes, M;
++	IssmDouble gamma_T, overturning_coeff, thickness;
++	IssmDouble pressure, T_star,p_coeff, q_coeff;
++	IssmDouble* boxareas  = NULL;
+ 
+ 	/*Get variables*/
+ 	IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
+@@ -2838,146 +2838,111 @@
+ 	IssmDouble latentheat = this->GetMaterialParameter(MaterialsLatentheatEnum);
+ 	IssmDouble c_p_ocean  = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
+ 	IssmDouble lambda     = latentheat/c_p_ocean;
+-	IssmDouble a          = -0.0572;           // K/psu
++	IssmDouble a          = -0.0572;          // K/psu
+ 	IssmDouble b          = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
+ 	IssmDouble c          = 7.77e-4;
+-	IssmDouble alpha      = 7.5e-5;            // 1/K
+-	IssmDouble Beta       = 7.7e-4;            // K
++	IssmDouble alpha      = 7.5e-5;           // 1/K
++	IssmDouble Beta       = 7.7e-4;           // K
+ 
+-	/* Get parameters and inputs */
+-	this->parameters->FindParam(&time,TimeEnum);
++	/* Get non-box-specific parameters and inputs */
+ 	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
+ 	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+ 	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+-	this->parameters->FindParam(&toc_farocean, basinid, time, BasalforcingsPicoFarOceantemperatureEnum);
+-	this->parameters->FindParam(&soc_farocean, basinid, time, BasalforcingsPicoFarOceansalinityEnum);
+ 	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+ 	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+ 	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+-	IssmDouble area_box1    = boxareas[basinid*maxbox+boxid];
+-	IssmDouble g1           = area_box1*gamma_T;
+-	IssmDouble s1           = soc_farocean/(nu*lambda);
++	_assert_(basinid<=num_basins);
+ 
+-	/*Define new inputs*/
+-   IssmDouble basalmeltrates_shelf[NUMVERTICES];
+-	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
+-	IssmDouble Tocs[NUMVERTICES];							
+-   IssmDouble Socs[NUMVERTICES];
+-   IssmDouble overturnings[NUMVERTICES];
++	IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
++	IssmDouble g1               = area_boxi*gamma_T;
+ 
+-	/* Start looping on the number of nodes and calculate ocean vars */
+-	Gauss* gauss=this->NewGauss();
+-	for(int i=0;i<NUMVERTICES;i++){
+-		gauss->GaussVertex(i);
+-		thickness_input->GetInputValue(&thickness,gauss);
+-		pressure = (rhoi*earth_grav*1e-4)*thickness;
+-		T_star   = a*soc_farocean+b-c*pressure-toc_farocean;
+-		p_coeff  = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
+-		q_coeff  = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
++	IssmDouble basalmeltrates_shelf[NUMVERTICES];
++	IssmDouble potential_pressure_melting_point[NUMVERTICES];
++	IssmDouble Tocs[NUMVERTICES];
++	IssmDouble Socs[NUMVERTICES];
+ 
+-		/* To avoid negatives under the square root */
+-		if((0.25*pow(p_coeff,2)-q_coeff)<0){
+-			q_coeff = 0.25*p_coeff*p_coeff;
+-		}
++	/* First box calculations */
++	if(boxid==0){
++		/* Get box1 parameters and inputs */
++		IssmDouble time, toc_farocean, soc_farocean;
++		this->parameters->FindParam(&time,TimeEnum);
++		this->parameters->FindParam(&toc_farocean, basinid, time, BasalforcingsPicoFarOceantemperatureEnum);
++		this->parameters->FindParam(&soc_farocean, basinid, time, BasalforcingsPicoFarOceansalinityEnum);
++		IssmDouble s1 = soc_farocean/(nu*lambda);
++		IssmDouble overturnings[NUMVERTICES];
+ 
+-		Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
+-		Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]);
+-		potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
+-		basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
+-		overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i]));
+-	}
++		/* Start looping on the number of verticies and calculate ocean vars */
++		Gauss* gauss=this->NewGauss();
++		for(int i=0;i<NUMVERTICES;i++){
++			gauss->GaussVertex(i);
++			thickness_input->GetInputValue(&thickness,gauss);
++			pressure = (rhoi*earth_grav*1e-4)*thickness;
++			T_star   = a*soc_farocean+b-c*pressure-toc_farocean;
++			p_coeff  = g1/(overturning_coeff*rho_star*(Beta*s1-alpha));
++			q_coeff  = T_star*(g1/(overturning_coeff*rho_star*(Beta*s1-alpha)));
+ 
+-	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
+-	this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
+-	this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
+-	this->AddInput(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1Enum);
++			/* To avoid negatives under the square root */
++			if((0.25*pow(p_coeff,2)-q_coeff)<0){
++				q_coeff = 0.25*p_coeff*p_coeff;
++			}
+ 
+-	/*Cleanup and return */
+-	delete gauss;
+-	xDelete<IssmDouble>(boxareas);
+-}
+-/*}}}*/
+-void       Tria::PicoUpdateNextBox(int loopboxid){/*{{{*/	
++			Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
++			Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]);
++			potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
++			basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
++			overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i]));
++		}
+ 
+-	if(!this->IsIceInElement() || !this->IsFloating()) return;
+-	
+-	int boxid;
+-	this->inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
+-	if(loopboxid!=boxid) return;
++		this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
++		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
++		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
++		this->AddInput(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1Enum);
+ 
+-	int        basinid, maxbox, num_basins, numnodes,M;
+-	IssmDouble gamma_T, overturning_coeff;
+-	IssmDouble thickness, toc_farocean, soc_farocean;
+-	IssmDouble pressure, T_star,p_coeff, q_coeff;
+-	IssmDouble* toc_weighted_avg         = NULL;
+-	IssmDouble* soc_weighted_avg         = NULL;
+-	IssmDouble* overturning_weighted_avg = NULL;
+-	IssmDouble* boxareas                 = NULL;
++		/*Cleanup and return*/
++		delete gauss;
++	}
+ 
+-	/*Get variables*/
+-	IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
+-	IssmDouble rhow       = this->GetMaterialParameter(MaterialsRhoSeawaterEnum);
+-	IssmDouble earth_grav = this->GetMaterialParameter(ConstantsGEnum);
+-	IssmDouble rho_star   = 1033.;             // kg/m^3
+-	IssmDouble nu         = rhoi/rhow;
+-	IssmDouble latentheat = this->GetMaterialParameter(MaterialsLatentheatEnum);
+-	IssmDouble c_p_ocean  = this->GetMaterialParameter(MaterialsMixedLayerCapacityEnum);
+-	IssmDouble lambda     = latentheat/c_p_ocean;
+-	IssmDouble a          = -0.0572;          // K/psu
+-	IssmDouble b          = 0.0788 + this->GetMaterialParameter(MaterialsMeltingpointEnum);  //K
+-	IssmDouble c          = 7.77e-4;
+-	IssmDouble alpha      = 7.5e-5;           // 1/K
+-	IssmDouble Beta       = 7.7e-4;           // K
++	/* Subsequent box calculations */
++	else {
++		/* Get subsequent box parameters and inputs */
++		IssmDouble* toc_weighted_avg         = NULL;
++		IssmDouble* soc_weighted_avg         = NULL;
++		IssmDouble* overturning_weighted_avg = NULL;
++		this->parameters->FindParam(&toc_weighted_avg,&num_basins,BasalforcingsPicoAverageTemperatureEnum);
++		this->parameters->FindParam(&soc_weighted_avg,&num_basins,BasalforcingsPicoAverageSalinityEnum);
++		this->parameters->FindParam(&overturning_weighted_avg,&num_basins,BasalforcingsPicoAverageOverturningEnum);
++		IssmDouble mean_toc                  = toc_weighted_avg[basinid];
++		IssmDouble mean_soc                  = soc_weighted_avg[basinid];
++		IssmDouble mean_overturning          = overturning_weighted_avg[basinid];
++		IssmDouble g2                        = g1/(nu*lambda);
+ 
+-	/* Get parameters and inputs */
+-	this->parameters->FindParam(&num_basins, BasalforcingsPicoNumBasinsEnum);
+-	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+-	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+-	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	this->parameters->FindParam(&toc_weighted_avg,&num_basins,BasalforcingsPicoAverageTemperatureEnum);
+-	this->parameters->FindParam(&soc_weighted_avg,&num_basins,BasalforcingsPicoAverageSalinityEnum);
+-	this->parameters->FindParam(&overturning_weighted_avg,&num_basins,BasalforcingsPicoAverageOverturningEnum);
+-	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+-	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+-   Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
++		/* Start looping on the number of verticies and calculate ocean vars */
++		Gauss* gauss=this->NewGauss();
++		for(int i=0;i<NUMVERTICES;i++){
++			gauss->GaussVertex(i);
++			thickness_input->GetInputValue(&thickness,gauss);
++			pressure = (rhoi*earth_grav*1.e-4)*thickness;
++			T_star   = a*mean_soc+b-c*pressure-mean_toc;
++			Tocs[i]  = mean_toc+T_star*(g1/(mean_overturning+g1-g2*a*mean_soc));
++			Socs[i]  = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
++			potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
++			basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
++		}
+ 
+-	_assert_(basinid<=num_basins); 
+-	IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
+-	IssmDouble mean_toc         = toc_weighted_avg[basinid];
+-	IssmDouble mean_soc         = soc_weighted_avg[basinid];
+-	IssmDouble mean_overturning = overturning_weighted_avg[basinid];
+-	IssmDouble g1               = area_boxi*gamma_T;
+-	IssmDouble g2               = g2/(nu*lambda);
++		this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
++		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
++		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
+ 
+-	IssmDouble basalmeltrates_shelf[NUMVERTICES];
+-	IssmDouble potential_pressure_melting_point[NUMVERTICES];   
+-	IssmDouble Tocs[NUMVERTICES];							
+-   IssmDouble Socs[NUMVERTICES];
+-
+-	/* Start looping on the number of nodes and calculate ocean vars */
+-	Gauss* gauss=this->NewGauss();
+-	for(int i=0;i<NUMVERTICES;i++){
+-		gauss->GaussVertex(i);
+-		thickness_input->GetInputValue(&thickness,gauss);
+-		pressure = (rhoi*earth_grav*1.e-4)*thickness;
+-		T_star   = a*mean_soc+b-c*pressure-mean_toc;
+-		Tocs[i]  = mean_toc+T_star*(g1/(mean_overturning+g1-g2*a*mean_soc));
+-		Socs[i]  = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
+-		potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
+-		basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
++		/*Cleanup and return*/
++		xDelete<IssmDouble>(toc_weighted_avg);
++		xDelete<IssmDouble>(soc_weighted_avg);
++		xDelete<IssmDouble>(overturning_weighted_avg);
++		delete gauss;
+ 	}
+ 
+-	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
+-	this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
+-	this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
+-
+-	/*Cleanup and return */
+-	delete gauss;
++	/*Cleanup and return*/
+ 	xDelete<IssmDouble>(boxareas);
+-	xDelete<IssmDouble>(toc_weighted_avg);
+-	xDelete<IssmDouble>(soc_weighted_avg);
+-	xDelete<IssmDouble>(overturning_weighted_avg);
+ }
+ /*}}}*/
+ void       Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){/*{{{*/
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22732-22733.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22732-22733.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22732-22733.diff	(revision 22755)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22733-22734.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22733-22734.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22733-22734.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22733)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22734)
+@@ -1,5 +1,5 @@
+ %Test Name: PicoMeltRate
+-md=triangle(model(),'../Exp/Square.exp',100000.);
++md=triangle(model(),'../Exp/Square.exp',90000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md.initialization.vx(:)=1.;
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/21724-22754/ISSM-22734-22735.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22734-22735.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22734-22735.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22734)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22735)
+@@ -45,9 +45,9 @@
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
+ 	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
+ 	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
+-field_tolerances={6e-9,1e-7,1e-7,1e-8,5e-8,5e-08,1e-13,1e-13,...
+-	   6e-9,1e-7,1e-7,1e-8,5e-7,5e-8,1e-7,1e-13,...
+-	   6e-9,1e-7,1e-7,1e-8,5e-7,5e-8,1e-7,1e-13};
++field_tolerances={1,1,1,1,1,1,1,1,...
++	   1,1,1,1,1,1,1,1,...
++	   1,1,1,1,1,1,1,1};
+ field_values={...
+ 	   (md.results.TransientSolution(1).Base),...
+ 	   (md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22735-22736.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22735-22736.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22735-22736.diff	(revision 22755)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22735)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22736)
+@@ -1332,7 +1332,7 @@
+ 	for(int i=0;i<n;i++) exsT[i]= fmax(0.0, T[i] - CtoK);        // [K] to [degC]
+ 
+ 	// new grid point center temperature, T [K]
+-	//for(int i=0;i<n;i++) T[i]-=exsT[i];
++	// for(int i=0;i<n;i++) T[i]-=exsT[i];
+ 	for(int i=0;i<n;i++) T[i]=fmin(T[i],CtoK);
+ 	
+ 	// specify irreducible water content saturation [fraction]
+@@ -1381,21 +1381,20 @@
+ 			surpE=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpE[i] = surpT[i] * CI * m[i];
+             
+ 			int i = 0;
+-			while (cellsum(surpE,n) > 0.0 + Ttol){
++			while (cellsum(surpE,n) > 0.0 + Ttol && i<n-1){
++
+ 				// use surplus energy to increase the temperature of lower cell
+ 				T[i+1] = surpE[i]/m[i+1]/CI + T[i+1];
+-                
+-				exsT[i+1] = fmax(0.0, T[i+1] - CtoK) + exsT[i+1];
+-				T[i+1] = fmin(CtoK, T[i+1]);
+-                
+-				surpT[i+1] = fmax(0.0, exsT[i+1] - LF/CI);
++				surpT[i+1] = fmax(0.0, (T[i+1] - CtoK - LF/CI));
+ 				surpE[i+1] = surpT[i+1] * CI * m[i+1];
+-                
++
+ 				// adjust current cell properties (again 159.1342 is the max T)
+-				exsT[i] = LF/CI;
++				T[i] = T[i]-surpE[i]/m[i+1]/CI;
+ 				surpE[i] = 0.0;
+ 				i = i + 1;
+ 			}
++			// recalculate temperature excess above 0 deg C 
++			for(int i=0;i<n;i++) exsT[i] = fmax(0.0, T[i] - CtoK);  
+ 		}
+ 
+ 		// convert temperature excess to melt [kg]
+@@ -1689,7 +1688,7 @@
+ 		// printf("Total depth < zMin %f \n", Ztot);
+ 		// mass and energy to be added
+ 		mAdd = m[n-1]+W[n-1];
+-		addE = T[n-1]*m[n-1]*CI;
++		addE = T[n-1]*m[n-1]*CI + W[n-1]*(LF+CtoK*CI);
+         
+ 		// add a grid cell of the same size and temperature to the bottom
+ 		dz_bot=dz[n-1];
+@@ -1723,7 +1722,7 @@
+ 		// printf("Total depth > zMax %f \n", Ztot);
+ 		// mass and energy loss
+ 		mAdd = -(m[n-1]+W[n-1]);
+-		addE = -(T[n-1]*m[n-1]*CI);
++		addE = -(T[n-1]*m[n-1]*CI) - (W[n-1]*(LF+CtoK*CI));
+ 		dz_add=-(dz[n-1]);
+         
+ 		// remove a grid cell from the bottom
+@@ -1744,7 +1743,6 @@
+ 		celldelete(&EW,n,D,D_size);
+ 		n=D_size;
+ 		xDelete<int>(D);
+-        
+ 	}
+ 
+ 	//// CHECK FOR MASS AND ENERGY CONSERVATION
+@@ -1762,7 +1760,7 @@
+ 
+ 	/*only in forward mode! avoid round in AD mode as it is not differentiable: */
+ 	#ifndef _HAVE_ADOLC_
+-	dm = round(mSum0 - mSum1 + mAdd);
++	dm = round((mSum0 - mSum1 + mAdd)*1000);
+ 	dE = round(sumE0 - sumE1 - sumER +  addE);
+ 	if (dm !=0  || dE !=0) _error_("mass or energy are not conserved in melt equations\n"
+ 			<< "dm: " << dm << " dE: " << dE << "\n");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22736-22737.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22736-22737.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22736-22737.diff	(revision 22755)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 22737)
+@@ -23,7 +23,6 @@
+ #include "./IssmMpiVec.h"
+ #include "./SparseRow.h"
+ #include <math.h>
+-
+ /*}}}*/
+ 
+ /*We need to template this class, in case we want to create Matrices that hold
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 22737)
+@@ -310,7 +310,7 @@
+ 
+ 			switch(mode){
+ 				case NORM_INF:
+-					local_norm=0;
++					local_norm=0.;
+ 					for(i=0;i<this->m;i++){
+ 						absolute=0;
+ 						for(j=0;j<this->N;j++){
+@@ -323,10 +323,10 @@
+ 					return norm;
+ 					break; 
+ 				case NORM_FROB:
+-					local_norm=0;
++					local_norm=0.;
+ 					for(i=0;i<this->m;i++){
+ 						for(j=0;j<this->N;j++){
+-							local_norm+=pow(this->matrix[N*i+j],2);
++							local_norm+=this->matrix[N*i+j]*this->matrix[N*i+j];
+ 						}
+ 					}
+ 					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 22737)
+@@ -225,13 +225,13 @@
+ 
+ 			switch(mode){
+ 				case NORM_INF:
+-					//norm=0; for(i=0;i<this->M;i++)norm=max(norm,fabs(this->vector[i]));
+-					norm=0; for(i=0;i<this->M;i++)norm=max(norm,this->vector[i]);
++					norm=0.; for(i=0;i<this->M;i++)norm=max(norm,fabs(this->vector[i]));
++					//norm=0.; for(i=0;i<this->M;i++)norm=max(norm,this->vector[i]);
+ 					return norm;
+ 					break;
+ 				case NORM_TWO:
+-					norm=0; 
+-					for(i=0;i<this->M;i++)norm+=pow(this->vector[i],2);
++					norm=0.; 
++					for(i=0;i<this->M;i++)norm+=this->vector[i]*this->vector[i];
+ 					return sqrt(norm);
+ 					break;
+ 				default:
+Index: ../trunk-jpl/src/c/toolkits/issm/SparseRow.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 22737)
+@@ -101,7 +101,7 @@
+ 		doubletype Norm(NormMode mode){ /*{{{*/
+ 
+ 			int i;
+-			doubletype norm=0;
++			doubletype norm=0.;
+ 
+ 			switch(mode){
+ 				case NORM_INF:
+@@ -112,7 +112,7 @@
+ 					break; 
+ 				case NORM_FROB:
+ 					for(i=0;i<ncols;i++){
+-						norm+=pow(values[i],2);
++						norm+=values[i]*values[i];
+ 					}
+ 					return norm;
+ 					break; 
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 22737)
+@@ -139,7 +139,7 @@
+ 
+ 			switch(mode){
+ 				case NORM_INF:
+-					norm=0;
++					norm=0.;
+ 					for(i=0;i<this->M;i++){
+ 						absolute=0;
+ 						for(j=0;j<this->N;j++){
+@@ -150,10 +150,10 @@
+ 					return norm;
+ 					break; 
+ 				case NORM_FROB:
+-					norm=0;
++					norm=0.;
+ 					for(i=0;i<this->M;i++){
+ 						for(j=0;j<this->N;j++){
+-							norm+=pow(this->matrix[N*i+j],2);
++							norm+=this->matrix[N*i+j]*this->matrix[N*i+j];
+ 						}
+ 					}
+ 					return sqrt(norm);
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22736)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22737)
+@@ -460,15 +460,15 @@
+ 
+ 			switch(mode){
+ 				case NORM_INF:
+-					//local_norm=0; for(i=0;i<this->m;i++)local_norm=max(local_norm,fabs(this->vector[i]));
+-					local_norm=0; for(i=0;i<this->m;i++)local_norm=max(local_norm,this->vector[i]);
++					local_norm=0.; for(i=0;i<this->m;i++)local_norm=max(local_norm,fabs(this->vector[i]));
++					//local_norm=0; for(i=0;i<this->m;i++)local_norm=max(local_norm,this->vector[i]);
+ 					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_MAX, 0, IssmComm::GetComm());
+ 					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return norm;
+ 					break;
+ 				case NORM_TWO:
+-					local_norm=0; 
+-					for(i=0;i<this->m;i++)local_norm+=pow(this->vector[i],2);
++					local_norm=0.; 
++					for(i=0;i<this->m;i++)local_norm+=this->vector[i]*this->vector[i];
+ 					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
+ 					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return sqrt(norm);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22737-22738.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22737-22738.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22737-22738.diff	(revision 22755)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22737)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 22738)
+@@ -140,13 +140,6 @@
+ 
+ 			/*Do a synchronized dump across all the rows: */
+ 			for(i=0;i<IssmComm::GetSize();i++){
+-				if (IssmComm::GetRank()==i){
+-					_printf_("cpu " << i << " #rows: " << this->m << "\n");
+-					for (j=0;j<this->m;j++){
+-						_printf_("row " << j << " " << this->vector[j] << "\n");
+-					}
+-					_printf_("\n");
+-				}
+ 				ISSM_MPI_Barrier(IssmComm::GetComm());
+ 			}
+ 		}
Index: /issm/oecreview/Archive/21724-22754/ISSM-22738-22739.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22738-22739.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22738-22739.diff	(revision 22755)
@@ -0,0 +1,1552 @@
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 22739)
+@@ -8,40 +8,84 @@
+ 
+ void GetVectorFromControlInputsx(Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data,bool onsid){/*{{{*/
+ 
+-	int  num_controls;
+-	int *control_type = NULL;
+-	Vector<IssmDouble>*  vector=NULL;
++	bool isautodiff;
++	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++	if(isautodiff){
++		int*  N = NULL;
++		int*  M = NULL;
++		int  num_controls;
++		int* control_type = NULL;
++		Vector<IssmDouble>*  vector=NULL;
+ 
+-	/*Retrieve some parameters*/
+-	parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		/*Retrieve some parameters*/
++		parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
++		parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
+ 
+-	/*Allocate and populate gradient*/
+-	vector=new Vector<IssmDouble>(num_controls*vertices->NumberOfVertices());
++		/*1. Get vector size*/
++		int size = 0;
++		for(int i=0;i<num_controls;i++) size+=M[i]*N[i];
+ 
+-	for(int i=0;i<num_controls;i++){
+-		for(int j=0;j<elements->Size();j++){
+-			Element* element=(Element*)elements->GetObjectByOffset(j);
+-			element->GetVectorFromControlInputs(vector,control_type[i],i,data,onsid);
++
++		/*2. Allocate vector*/
++		vector=new Vector<IssmDouble>(size);
++
++		/*3. Populate vector*/
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<elements->Size();j++){
++				Element* element=(Element*)elements->GetObjectByOffset(j);
++				element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset,onsid);
++			}
++			offset += M[i]*N[i];
+ 		}
++
++		vector->Assemble();
++
++		/*Assign output pointers:*/
++		xDelete<int>(control_type);
++		xDelete<int>(M);
++		xDelete<int>(N);
++
++		*pvector=vector;
+ 	}
++	else{
++		int  num_controls;
++		int* control_type = NULL;
++		Vector<IssmDouble>*  vector=NULL;
+ 
+-	vector->Assemble();
++		/*Retrieve some parameters*/
++		parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+ 
+-	/*Assign output pointers:*/
+-	xDelete<int>(control_type);
+-	*pvector=vector;
++
++		/*2. Allocate vector*/
++		vector=new Vector<IssmDouble>(num_controls*vertices->NumberOfVertices());
++
++		/*3. Populate vector*/
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<elements->Size();j++){
++				Element* element=(Element*)elements->GetObjectByOffset(j);
++				element->GetVectorFromControlInputs(vector,control_type[i],i,data,onsid);
++			}
++		}
++		vector->Assemble();
++
++		/*Assign output pointers:*/
++		xDelete<int>(control_type);
++		*pvector=vector;
++	}
++
+ }/*}}}*/
+ void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data,bool onsid){/*{{{*/
+ 
+-	/*output: */
+-	IssmDouble* vector=NULL;
+-
+ 	/*intermediary: */
+ 	Vector<IssmDouble>* vec_vector=NULL;
+ 
+ 	GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data,onsid);
+-	vector=vec_vector->ToMPISerial();
++	IssmDouble* vector=vec_vector->ToMPISerial();
+ 
+ 	/*Free ressources:*/
+ 	delete vec_vector;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 22739)
+@@ -68,7 +68,7 @@
+ 
+ 	/*Solution specific updates*/
+ 	if(VerboseMProcessor()) _printf0_("   updating elements and materials for control parameters" << "\n");
+-	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
++	UpdateElementsAndMaterialsControl(elements,parameters,materials,iomodel);
+ 	#ifdef _HAVE_DAKOTA_
+ 	if(VerboseMProcessor()) _printf0_("   updating elements and materials for uncertainty quantification" << "\n");
+ 	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 22738)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 22739)
+@@ -17,7 +17,7 @@
+ void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type);
+ void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath);
+ void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel);
+-void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
++void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel);
+ void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_type);
+ void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+Index: ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 22739)
+@@ -8,21 +8,47 @@
+ 
+ void SetControlInputsFromVectorx(FemModel* femmodel,IssmDouble* vector){
+ 
+-	int  num_controls;
+-	int *control_type = NULL;
++	bool isautodiff; 
++	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++	if(isautodiff){
++		int  num_controls;
++		int* control_type = NULL;
++		int* M = NULL;
++		int* N = NULL;
+ 
+-	/*Retrieve some parameters*/
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		/*Retrieve some parameters*/
++		femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		femmodel->parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
++		femmodel->parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
+ 
+-	for(int i=0;i<num_controls;i++){
+-		for(int j=0;j<femmodel->elements->Size();j++){
+-			Element* element=(Element*)femmodel->elements->GetObjectByOffset(j);
+-			element->SetControlInputsFromVector(vector,control_type[i],i);
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<femmodel->elements->Size();j++){
++				Element* element=(Element*)femmodel->elements->GetObjectByOffset(j);
++				element->SetControlInputsFromVector(vector,control_type[i],i,offset,N[i],M[i]);
++			}
++		offset += M[i]*N[i]; 
+ 		}
++
++
++		xDelete<int>(control_type);
+ 	}
++	else{
+ 
+-	xDelete<int>(control_type);
++		int  num_controls;
++		int* control_type = NULL;
++		femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<femmodel->elements->Size();j++){
++				Element* element=(Element*)femmodel->elements->GetObjectByOffset(j);
++				element->SetControlInputsFromVector(vector,control_type[i],i);
++			}
++		}
++		xDelete<int>(control_type);
++	}
+ }
+ 
+ void SetControlInputsFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector){
+Index: ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 22739)
+@@ -68,10 +68,12 @@
+ 	FemModel* femmodel = input_struct->femmodel;
+ 	int num_responses,num_controls,numberofvertices,solution_type;
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	
++	int* N = NULL;
++	int N_add = 0;
++
+ 	if (solution_type == TransientSolutionEnum){
+ 		femmodel = input_struct->femmodel->copy();
+-		}
++	}
+ 
+ 	IssmPDouble  *Jlist        = input_struct->Jlist;
+ 	int           JlistM       = input_struct->M;
+@@ -84,6 +86,7 @@
+ 	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+ 	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
++	femmodel->parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
+ 	numberofvertices=femmodel->vertices->NumberOfVertices();
+ 
+ 	/*Constrain input vector and update controls*/
+@@ -91,9 +94,11 @@
+ 	double  *XU = NULL;
+ 	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+ 	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
++
++	N_add = 0;
++	for (int c=0;c<num_controls;c++){
++		for(int i=0;i<numberofvertices*N[c];i++){
++			int index = N_add*numberofvertices+i;
+ 			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+ 			if(X[index]>XU[index]) X[index]=XU[index];
+ 			if(X[index]<XL[index]) X[index]=XL[index];
+@@ -102,12 +107,11 @@
+ 
+ 	/*Start Tracing*/
+ 	simul_starttrace(femmodel);
+-
+ 	/*Set X as our new control input and as INDEPENDENT*/
+ #ifdef _HAVE_AD_
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices,"t");
++	IssmDouble* aX=xNew<IssmDouble>(intn,"t");
+ #else
+-	IssmDouble* aX=xNew<IssmDouble>(num_controls*numberofvertices);
++	IssmDouble* aX=xNew<IssmDouble>(intn);
+ #endif
+ 	if(my_rank==0){
+ 		for(int i=0;i<intn;i++){
+@@ -114,6 +118,7 @@
+ 			aX[i]<<=X[i];
+ 		}
+ 	}
++
+ 	ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	SetControlInputsFromVectorx(femmodel,aX);
+ 	xDelete<IssmDouble>(aX);
+@@ -126,7 +131,6 @@
+ 	/*Reset the time to zero for next optimization*/
+ 	if(solution_type==TransientSolutionEnum){
+ 		IssmDouble restart_time;
+-	
+ 		femmodel->parameters->FindParam(&restart_time,TimesteppingStartTimeEnum);
+ 		femmodel->parameters->SetParam(restart_time,TimeEnum);
+ 
+@@ -138,7 +142,6 @@
+ 	IssmPDouble *dependents;
+ 	DataSet*    dependent_objects=NULL;
+ 	IssmDouble	J=0.;
+-	
+ 	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+ 
+@@ -261,7 +264,9 @@
+ 		fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+ 
+ 		/*Add to totalgradient: */
+-		if(my_rank==0) for(int i=0;i<num_independents;i++) totalgradient[i]+=weightVectorTimesJac[i];
++		if(my_rank==0) for(int i=0;i<num_independents;i++) {
++			totalgradient[i]+=weightVectorTimesJac[i];
++		}
+ 
+ 		/*free resources :*/
+ 		xDelete(weightVectorTimesJac);
+@@ -298,13 +303,14 @@
+ 	}
+ 
+ 	/*Compute gradient*/
+-	for(long i=0;i<num_independents_old;i++)	G[i] = totalgradient[i];
++	for(long i=0;i<num_independents_old;i++) G[i] = totalgradient[i];
+ 
+ 	/*Constrain Gradient*/
+ 	IssmDouble  Gnorm = 0.;
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
++	N_add = 0;
++	for (int c=0;c<num_controls;c++){
++		for(int i=0;i<numberofvertices*N[c];i++){
++			int index = N_add*numberofvertices+i;
+ 			if(X[index]>=XU[index]) G[index]=0.;
+ 			if(X[index]<=XL[index]) G[index]=0.;
+ 			G[index] = G[index]*reCast<double>(scaling_factors[c]);
+@@ -338,6 +344,9 @@
+ 	IssmDouble	*scaling_factors = NULL;
+ 	double      *X  = NULL;
+ 	double      *G  = NULL;
++	int*			N	= NULL;
++	int offset = 0;
++	int N_add;
+ 
+ 	/*Recover some parameters*/
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+@@ -349,6 +358,7 @@
+ 	femmodel->parameters->FindParamAndMakePassive(&gttol,InversionGttolEnum);
+ 	femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum);
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	femmodel->parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
+ 	numberofvertices=femmodel->vertices->NumberOfVertices();
+ 
+ 	/*Initialize M1QN3 parameters*/
+@@ -376,7 +386,7 @@
+ 	X = Xpetsc->ToMPISerial();
+ 	Xpetsc->GetSize(&intn);
+ 	delete Xpetsc;
+-	_assert_(intn==numberofvertices*num_controls);
++	//_assert_(intn==numberofvertices*num_controls);
+  
+ 	/*Get problem dimension and initialize gradient and initial guess*/
+ 	long n = long(intn);
+@@ -383,13 +393,15 @@
+ 	G = xNew<double>(n);
+ 
+ 	/*Scale control for M1QN3*/
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
++	N_add = 0;
++	for (int c=0;c<num_controls;c++){
++		for(int i=0;i<numberofvertices*N[c];i++){
++			int index = N_add*numberofvertices+i;
+ 			X[index] = X[index]/reCast<IssmPDouble>(scaling_factors[c]);
+ 		}
++		N_add+=N[c];
+ 	}
+-
++	
+ 	/*Allocate m1qn3 working arrays (see documentation)*/
+ 	long      m   = 100;
+ 	long      ndz = 4*n+m*(2*n+1);
+@@ -436,34 +448,39 @@
+ 	GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+ 	GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+ 
+-	for(int i=0;i<numberofvertices;i++){
+-		for(int c=0;c<num_controls;c++){
+-			int index = num_controls*i+c;
++	N_add = 0;
++	for (int c=0;c<num_controls;c++){
++		for(int i=0;i<numberofvertices*N[c];i++){
++			int index = N_add*numberofvertices+i;
+ 			X[index] = X[index]*reCast<double>(scaling_factors[c]);
+ 			if(X[index]>XU[index]) X[index]=XU[index];
+ 			if(X[index]<XL[index]) X[index]=XL[index];
+ 		}
++		N_add +=N[c];
+ 	}
+ 		
+ 	/*Set X as our new control*/
+ 	IssmDouble* aX=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aX[i] = reCast<IssmDouble>(X[i]);
++	for(int i=0;i<intn;i++) {
++		aX[i] = reCast<IssmDouble>(X[i]); 
++		}
+ 	SetControlInputsFromVectorx(femmodel,aX);
+ 	xDelete(aX);
+ 
+ 	/*Set final gradient in inputs*/
+ 	IssmDouble* aG=xNew<IssmDouble>(intn);
+-	for(int i=0;i<intn;i++) aG[i] = reCast<IssmDouble>(G[i]);
++	for(int i=0;i<intn;i++) {
++		aG[i] = reCast<IssmDouble>(G[i]);
++	}
+ 	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG);
+-	xDelete(aG);
+ 
+-	/*Add last cost function to results*/
+-
+ 	if (solution_type == TransientSolutionEnum){
+ 		int step = 1;
+ 		femmodel->parameters->SetParam(step,StepEnum);
+ 		femmodel->OutputControlsx(&femmodel->results);
+ 		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,1,0));
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,Gradient1Enum,G,numberofvertices,intn/numberofvertices,1,0));
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,InversionControlParametersEnum,X,numberofvertices,intn/numberofvertices,1,0));
+ 	}
+ 	else{
+ 		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,mystruct.Jlist,(*mystruct.i),mystruct.N,0,0));
+@@ -470,6 +487,11 @@
+ 
+ 	femmodel->OutputControlsx(&femmodel->results);
+ 	}
++
++	xDelete(aG);
++
++	/*Add last cost function to results*/
++
+ 	/*Finalize*/
+ 	if(VerboseControl()) _printf0_("   preparing final solution\n");
+ 	femmodel->parameters->SetParam(true,SaveResultsEnum);
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 22739)
+@@ -17,6 +17,7 @@
+ 	public:
+ 		int    control_id;
+ 		int    enum_type;
++		int	 layout_enum;
+ 		Input* gradient;
+ 		Input* maxvalues;
+ 		Input* minvalues;
+@@ -26,6 +27,7 @@
+ 		/*ControlInput constructors, destructors: {{{*/
+ 		ControlInput();
+ 		ControlInput(int enum_type,int enum_input,IssmDouble* pvalues,IssmDouble* pmin,IssmDouble* pmax,int interp,int id);
++		ControlInput(int enum_type,int enum_input,Input* pvalues,Input* pmin,Input* pmax,Input* pgrad,int interp,int id);
+ 		~ControlInput();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+@@ -74,8 +76,10 @@
+ 		void SaveValue(void);
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
++		void SetGradient(Input* gradient_in,int timestep);
+ 		void SetGradient(Input* gradient_in);
+ 		void SetInput(Input* in_input);
++		void SetInput(Input* in_input, int timeoffset);
+ 		void UpdateValue(IssmDouble scalar);
+ 		/*}}}*/
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 22739)
+@@ -25,6 +25,7 @@
+ 
+ 	control_id=id;
+ 	enum_type=in_enum_type;
++	layout_enum = input_layout_enum;
+ 
+ 	_assert_(interp==P1Enum);
+ 
+@@ -47,12 +48,28 @@
+ 	gradient   =NULL;
+ }
+ /*}}}*/
++ControlInput::ControlInput(int in_enum_type,int input_layout_enum,Input* input_pvalues,Input* input_pmin,Input* input_pmax,Input* input_pgrad,int interp,int id){/*{{{*/
++
++	this->control_id=id;
++	this->enum_type=in_enum_type;
++	this->layout_enum = input_layout_enum;
++
++	_assert_(interp==P1Enum);
++	if(input_layout_enum!=TransientInputEnum) _error_("Wrong type of layout_enum, needs to be a TransientInputEnum");
++
++			this->values = input_pvalues;
++			this->savedvalues= NULL;
++			this->minvalues  = input_pmin;
++			this->maxvalues  = input_pmax;
++			this->gradient =  input_pgrad;
++	}
++/*}}}*/
+ ControlInput::~ControlInput(){/*{{{*/
+-	delete values;
+-	delete savedvalues;
+-	delete minvalues;
+-	delete maxvalues;
+-	delete gradient;
++	if(values)      delete values;
++	if(savedvalues) delete savedvalues;
++	if(minvalues)   delete minvalues;
++	if(maxvalues)   delete maxvalues;
++	if(gradient)    delete gradient;
+ }
+ /*}}}*/
+ 
+@@ -64,6 +81,7 @@
+ 	output = new ControlInput();
+ 	output->enum_type=this->enum_type;
+ 	output->control_id=this->control_id;
++	output->layout_enum = this->control_id;
+ 
+ 	if(values)      output->values      = xDynamicCast<Input*>(this->values->copy());
+ 	if(savedvalues) output->savedvalues = xDynamicCast<Input*>(this->savedvalues->copy());
+@@ -78,6 +96,7 @@
+ 
+ 	_printf_("ControlInput:\n");
+ 	_printf_(setw(15)<<"   ControlInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<"\n");
++	_printf_(setw(15)<<"   ControlInput "<<setw(25)<<left<<EnumToStringx(this->layout_enum)<<"\n");
+ 	_printf_("---values: \n");     if (values)      values->Echo();
+ 	_printf_("---savedvalues: \n");if (savedvalues) savedvalues->Echo();
+ 	_printf_("---minvalues: \n");  if (minvalues)   minvalues->Echo();
+@@ -97,6 +116,7 @@
+ 
+ 	MARSHALLING(enum_type);
+ 	MARSHALLING(control_id);
++	MARSHALLING(layout_enum);
+ 
+ 	if (marshall_direction == MARSHALLING_BACKWARD){
+ 		switch(enum_type){
+@@ -114,6 +134,13 @@
+ 				maxvalues  =new PentaInput();
+ 				gradient   =new PentaInput();
+ 				break;
++			case TransientInputEnum:
++				values	  =new TransientInput();
++				savedvalues=new TransientInput();
++				minvalues  =new TransientInput();
++				maxvalues  =new TransientInput();
++				gradient   =new TransientInput();
++				break;
+ 			default:
+ 				_error_("Input of Enum " << EnumToStringx(enum_type) << " not supported yet by ControlInput");
+ 		}
+@@ -145,6 +172,12 @@
+ 	values->AXPY(xinput,scalar);
+ }/*}}}*/
+ void ControlInput::Configure(Parameters* parameters){/*{{{*/
++	if(this->values->ObjectEnum()==TransientInputEnum){
++		this->values->Configure(parameters);
++		this->minvalues->Configure(parameters);
++		this->maxvalues->Configure(parameters);
++		this->gradient->Configure(parameters);
++	}
+ 	/*do nothing: */
+ }
+ /*}}}*/
+@@ -193,7 +226,7 @@
+ 	values->GetVectorFromInputs(vector,doflist);
+ }/*}}}*/
+ void ControlInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data){/*{{{*/
+-	 if(strcmp(data,"value")==0){
++	if(strcmp(data,"value")==0){
+ 		 _assert_(values);
+ 		 values->GetVectorFromInputs(vector,doflist);
+ 	 }
+@@ -225,6 +258,43 @@
+ 	if(savedvalues) delete this->savedvalues;
+ 	this->savedvalues=xDynamicCast<Input*>(this->values->copy());
+ }/*}}}*/
++void ControlInput::SetGradient(Input* gradient_in,int timestep){/*{{{*/
++if(this->values->ObjectEnum()!=TransientInputEnum)_error_("you are in the wrong place, go home");
++
++	/*Get enum for current gradient*/
++	switch(this->control_id){
++		case 1:
++			gradient_in->ChangeEnum(Gradient1Enum);
++			break;
++		case 2:
++			gradient_in->ChangeEnum(Gradient2Enum);
++			break;
++		case 3:
++			gradient_in->ChangeEnum(Gradient3Enum);
++			break;
++		default:
++			_error_("more than 3 controls not implemented yet (Gradient " << this->control_id << " was requested). EnumDefinitions.h needs to be updated.");
++	}
++
++	TransientInput* transient_input = xDynamicCast<TransientInput*>(this->gradient);
++	TransientInput* values_input = xDynamicCast<TransientInput*>(this->values);
++	if(values_input->numtimesteps==transient_input->numtimesteps){
++		TransientInput* new_trans_input = new TransientInput(ControlInputGradEnum);
++		IssmDouble time = transient_input->GetTimeByOffset(timestep);
++		for(int i=0;i<transient_input->numtimesteps;i++){
++			if(transient_input->timesteps[i]==time) new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(gradient_in),time);
++			else {
++				Input* input = transient_input->GetTimeInput(transient_input->timesteps[i]);
++				new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(input),transient_input->timesteps[i]);
++			}
++		}
++		this->gradient=new_trans_input;
++	}
++	else{
++		IssmDouble time = values_input->GetTimeByOffset(timestep);
++		transient_input->AddTimeInput(gradient_in,time);
++	}
++}/*}}}*/
+ void ControlInput::SetGradient(Input* gradient_in){/*{{{*/
+ 
+ 	/*Get enum for current gradient*/
+@@ -249,10 +319,31 @@
+ }/*}}}*/
+ void ControlInput::SetInput(Input* in_input){/*{{{*/
+ 
++	if(layout_enum==TransientInputEnum)_error_("need two arguments in SetInput for TransientInput Controls");
+ 	delete values; this->values=in_input;
+ 	this->SaveValue(); //because this is what SpawnResult saves FIXME
+ 
+ }/*}}}*/
++void ControlInput::SetInput(Input* in_input,int timeoffset){/*{{{*/
++	Input* input = this->values;
++	if(input->ObjectEnum()!=TransientInputEnum)_error_("cannot have timeoffset argument if not TransientInput Control");
++	TransientInput* transient_input = xDynamicCast<TransientInput*>(input);
++	IssmDouble time = transient_input->GetTimeByOffset(timeoffset);
++	TransientInput* new_trans_input = new TransientInput(ControlInputValuesEnum);
++	for(int i=0;i<transient_input->numtimesteps;i++){
++		if(transient_input->timesteps[i]==time) new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(in_input),time);
++		else {
++			input = transient_input->GetTimeInput(transient_input->timesteps[i]);
++			new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(input),transient_input->timesteps[i]);
++		}
++	}
++	this->values=new_trans_input;
++
++	//	this->values->Echo();
++	//this->values->Echo();
++	//new_trans_input->Echo();
++
++}/*}}}*/
+ Input* ControlInput::SpawnSegInput(int index1,int index2){/*{{{*/
+ 	return values->SpawnSegInput(index1,index2);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22739)
+@@ -51,6 +51,7 @@
+ 		void        ComputeSigmaNN(){_error_("not implemented yet");};
+ 		void        ComputeStressTensor(){_error_("not implemented yet");};
+ 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
++		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");};
+ 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
+ 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
+ 		void        ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
+@@ -71,6 +72,7 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
++		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinates(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
+@@ -134,6 +136,7 @@
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");};
+ 		void        ResetFSBasalBoundaryCondition(void){_error_("not implemented yet");};
+ 		void        ResetHooks(){_error_("not implemented yet");};
++		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M){_error_("not implemented yet");};
+ 		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){_error_("not implemented yet");};
+ 		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
+ 		void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22739)
+@@ -51,6 +51,7 @@
+ 		void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
+ 		void        ComputeEsaStrainAndVorticity(){_error_("not implemented yet!");};
+ 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
++		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");};
+ 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
+ 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
+ 		IssmDouble  DragCoefficientAbsGradient(void){_error_("not implemented yet");};
+@@ -77,6 +78,7 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
+ 		int         GetNumberOfVertices(void);
++		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid){_error_("not implemented yet");};
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+@@ -142,6 +144,7 @@
+ 		void        ResetFSBasalBoundaryCondition(void);
+ 		void        ResetHooks();
+ 		void        ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
++		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N, int M){_error_("not implemented yet");};
+ 		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){_error_("not implemented yet");};
+ 		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+ 		void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 22739)
+@@ -201,6 +201,7 @@
+ 		virtual void       ComputeStressTensor(void)=0;
+ 		virtual void       ComputeEsaStrainAndVorticity(void)=0;
+ 		virtual void       Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
++		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0;
+ 		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
+ 		virtual void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
+ 		virtual void       CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum){_error_("not implemented yet");};
+@@ -223,7 +224,8 @@
+ 		virtual int        GetNumberOfNodes(void)=0;
+ 		virtual int        GetNumberOfNodes(int enum_type)=0;
+ 		virtual int        GetNumberOfVertices(void)=0;
+-		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
++		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset, bool onsid)=0;
++		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data, bool onsid)=0;
+ 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
+ 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+ 		virtual IssmDouble GroundedArea(bool scaled)=0;
+@@ -284,6 +286,7 @@
+ 		virtual void       ResetFSBasalBoundaryCondition()=0;
+ 		virtual void       ResetHooks()=0;
+ 		virtual void       ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments){_error_("not implemented yet");};
++		virtual void       SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M)=0;
+ 		virtual void       SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
+ 		virtual void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
+ 		virtual void       SetTemporaryElementType(int element_type_in)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22739)
+@@ -62,6 +62,7 @@
+ 		void        ComputeStressTensor();
+ 		void        ComputeSurfaceNormalVelocity();
+ 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
++		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M);
+ 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+ 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
+ 		void        CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum);
+@@ -84,6 +85,7 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         GetNumberOfNodes(int enum_type);
+ 		int         GetNumberOfVertices(void);
++		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid);
+ 		void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
+ 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+@@ -117,6 +119,7 @@
+ 		void        ResetFSBasalBoundaryCondition(void);
+ 		void        ResetHooks();
+ 		void        ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments);
++		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M);
+ 		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
+ 		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+ 	   Element*    SpawnBasalElement(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22739)
+@@ -57,6 +57,7 @@
+ 		void           ComputeSigmaNN(){_error_("not implemented yet");};
+ 		void           ComputeStressTensor();
+ 		void           Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
++		void           ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M);
+ 		void           ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+ 		void           ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
+ 		ElementMatrix* CreateBasalMassMatrix(void);
+@@ -85,6 +86,7 @@
+ 		Penta*         GetLowerPenta(void);
+ 		Penta*         GetUpperPenta(void);
+ 		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
++		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,int offset,bool onsid);
+ 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
+ 		void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+ 		IssmDouble     GroundedArea(bool scaled);
+@@ -147,6 +149,7 @@
+ 		void           ResetHooks();
+ 		void           ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments);
+ 		void	         SetClone(int* minranks);
++		void           SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset, int N,int M);
+ 		void           SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
+ 		void           SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+ 		void           SetTemporaryElementType(int element_type_in);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22739)
+@@ -9,9 +9,11 @@
+ #include "../ModelProcessorx.h"
+ 
+ 
+-#if !defined(_HAVE_ADOLC_)
+-void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
+-	
++//#if !defined(_HAVE_ADOLC_)
++void	UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
++	bool isautodiff; 
++	iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff");
++	if(!isautodiff){
+ 	/*Intermediary*/
+ 	bool       control_analysis;
+ 	int        control,cost_function,domaintype;
+@@ -64,6 +66,7 @@
+ 			if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.inversion.vy_obs",InversionVyObsEnum); 
+ 		}
+ 	}
++	parameters->AddObject(new IntParam(ControlInputSizeMEnum,iomodel->numberofvertices));
+ 
+ 	for(int i=0;i<num_controls;i++){
+ 		control = control_enums[i];
+@@ -127,21 +130,24 @@
+ 	for(int i=0;i<num_controls;i++) xDelete<char>(controls[i]);
+ 	xDelete<char*>(controls);
+ }
+-#else 
+-void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
++//}
++//#else 
++//void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
++else{
+ 
+-
+ 	/*Intermediaries*/
+-	int				num_independent_objects,M,N;
++	int				num_independent_objects,M,N,M_par,N_par;
+ 	char**			names                   = NULL;
+ 	int*				types							= NULL;
++	int*				control_sizes				= NULL;
++	int*				M_all							= NULL;
+ 	IssmDouble*		independent					= NULL;
+-	IssmDouble**	independents_min			= NULL;
+-	IssmDouble**	independents_max			= NULL;
++	IssmDouble*		independents_fullmin    = NULL;
++	IssmDouble*		independents_fullmax		= NULL;
+ 	bool				control_analysis			=false;
+ 
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+-	
++
+ 	/*Now, return if no control*/
+ 	if(!control_analysis) return;
+ 
+@@ -153,54 +159,80 @@
+ 	iomodel->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types");
+ 
+ 		
+-	/*TODO: fetch min and max*/
+-	independents_min = xNew<IssmDouble*>(num_independent_objects);
+-	independents_max = xNew<IssmDouble*>(num_independent_objects);
+-	for(int i=0;i<num_independent_objects;i++) independents_min[i]=NULL;
+-	for(int i=0;i<num_independent_objects;i++) independents_max[i]=NULL;
++	M_all = xNew<int>(num_independent_objects);
+ 
+ 	/*create independent objects, and at the same time, fetch the corresponding independent variables, 
+ 	 *and declare them as such in ADOLC: */
++	iomodel->FetchData(&independents_fullmin,&M_par,&N_par,"md.autodiff.independent_min_parameters");
++	iomodel->FetchData(&independents_fullmax,&M_par,&N_par,"md.autodiff.independent_max_parameters");
++	iomodel->FetchData(&control_sizes,NULL,NULL,"md.autodiff.independent_control_sizes");
++	
++	int* start_point = NULL;
++	start_point = xNew<int>(num_independent_objects);
++	int counter = 0;
+ 	for(int i=0;i<num_independent_objects;i++){
++		start_point[i]=counter; 
++		counter+=control_sizes[i];
++	}
+ 
++	for(int i=0;i<num_independent_objects;i++){
++
+ 		if(types[i]==1){ /* vector:*/
+ 
+ 			/*Get field name and input Enum from independent name*/
+ 			char* iofieldname  = NULL;
+ 			int   input_enum;
++			IssmDouble*  	independents_min			= NULL;
++			IssmDouble*	   independents_max			= NULL;
++	
+ 			FieldAndEnumFromCode(&input_enum,&iofieldname,names[i]);
+ 
+ 			/*Fetch required data*/
+ 			iomodel->FetchData(&independent,&M,&N,iofieldname);
+-			iomodel->FetchData(&independents_min[i],&M,&N,"md.autodiff.independent_min_parameters");
+-			iomodel->FetchData(&independents_max[i],&M,&N,"md.autodiff.independent_max_parameters");
+-			
+-			_assert_(independent); 
++			_assert_(independent);
++			_assert_(N==control_sizes[i]);
++			_printf_("N control size: "<<control_sizes[i]<<"\n");
++		
++			independents_min = NULL; independents_min = xNew<IssmDouble>(M*N);
++			independents_max = NULL; independents_max = xNew<IssmDouble>(M*N);
++			for(int m=0;m<M;m++){
++				for(int n=0;n<N;n++){
++					independents_min[N*m+n]=independents_fullmin[N_par*m+start_point[i]+n];
++					independents_max[N*m+n]=independents_fullmax[N_par*m+start_point[i]+n];
++				}
++			}
++			if(N!=1) M_all[i]=M-1;
++			else M_all[i]=M;
+ 
+ 			for(int j=0;j<elements->Size();j++){
+ 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+-				element->ControlInputCreate(independent,independents_min[i],independents_max[i],iomodel,M,N,input_enum,i+1);
++				element->ControlInputCreate(independent,independents_min,independents_max,iomodel,M,N,input_enum,i+1);
+ 			}
+ 			xDelete<IssmDouble>(independent);
++			xDelete<IssmDouble>(independents_min);
++			xDelete<IssmDouble>(independents_max);
++	
+ 		}
+ 		else{
+ 			_error_("Independent cannot be of size " << types[i]);
+ 		}
+ 	}
++	parameters->AddObject(new IntVecParam(ControlInputSizeNEnum,control_sizes,num_independent_objects));
++	parameters->AddObject(new IntVecParam(ControlInputSizeMEnum,M_all,num_independent_objects));
+ 
+ 	/*cleanup*/
+ 	for(int i=0;i<num_independent_objects;i++){
+ 		xDelete<char>(names[i]);
+-		xDelete<IssmDouble>(independents_min[i]);
+-		xDelete<IssmDouble>(independents_max[i]);
+ 	}
+-	xDelete<IssmDouble*>(independents_min);
+-	xDelete<IssmDouble*>(independents_max);
+ 	xDelete<char*>(names);
+ 	xDelete<int>(types);
+-
++	xDelete<int>(M_all);
++	xDelete<IssmDouble>(independents_fullmin);
++	xDelete<IssmDouble>(independents_fullmax);
++	xDelete<int>(start_point);
+ 	/*Step2: create cost functions (dependents)*/
+ 
+ 	return;
+ }
+-#endif
++}
++//#endif
+Index: ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp	(revision 22739)
+@@ -8,24 +8,53 @@
+ 
+ void ControlInputSetGradientx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* gradient){
+ 
+-	/*Intermediaries*/
+-	int  num_controls;
+-	int *control_type = NULL;
++	bool isautodiff;
++	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++	if(isautodiff){
++		/*Intermediaries*/
++		int  num_controls;
++		int *control_type = NULL;
++		int* M_all;
++		int* N_all;
+ 
+-	/*Retrieve some parameters*/
+-	parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		/*Retrieve some parameters*/
++		parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++		parameters->FindParam(&M_all,NULL,ControlInputSizeMEnum);
++		parameters->FindParam(&N_all,NULL,ControlInputSizeNEnum);
+ 
+-	for(int i=0;i<num_controls;i++){
+-		for(int j=0;j<elements->Size();j++){
+-			Element* element=(Element*)elements->GetObjectByOffset(j);
+-			element->ControlInputSetGradient(gradient,control_type[i],i);
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<elements->Size();j++){
++				Element* element=(Element*)elements->GetObjectByOffset(j);
++				element->ControlInputSetGradient(gradient,control_type[i],i,offset,N_all[i],M_all[i]);
++			}
++			offset+=M_all[i]*N_all[i];
+ 		}
++
++		/*Clean up and return*/
++		xDelete<int>(control_type);
+ 	}
++	else{
++		int  num_controls;
++		int *control_type = NULL;
+ 
+-	/*Clean up and return*/
+-	xDelete<int>(control_type);
++		/*Retrieve some parameters*/
++		parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++		parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+ 
++		int offset = 0;
++		for(int i=0;i<num_controls;i++){
++			for(int j=0;j<elements->Size();j++){
++				Element* element=(Element*)elements->GetObjectByOffset(j);
++				element->ControlInputSetGradient(gradient,control_type[i],i);
++			}
++		}
++
++		/*Clean up and return*/
++		xDelete<int>(control_type);
++	}
++
+ }
+ void ControlInputSetGradientx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* gradient){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22739)
+@@ -82,6 +82,7 @@
+ void TransientInput::DeepEcho(void){/*{{{*/
+ 
+ 	int i;
++	printf("-------------- file: TransientInput.cpp line: %i\n",__LINE__); 
+ 
+ 	_printf_("TransientInput:\n");
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+@@ -231,7 +232,7 @@
+ 	IssmDouble time;
+ 
+ 	/*First, recover current time from parameters: */
+-	this->parameters->FindParam(&time,TimeEnum);
++	parameters->FindParam(&time,TimeEnum);
+ 
+ 	/*Retrieve interpolated values for this time step: */
+ 	Input* input=GetTimeInput(time);
+@@ -267,10 +268,8 @@
+ }
+ /*}}}*/
+ IssmDouble  TransientInput::GetTimeByOffset(int offset){/*{{{*/
+-
+ 	if (offset < 0) offset=0;
+-	_assert_(offset<this->numtimesteps);
+-
++	_assert_(offset<(this->numtimesteps));
+ 	return this->timesteps[offset];
+ }
+ /*}}}*/
+@@ -468,7 +467,7 @@
+ 	IssmDouble alpha1,alpha2;
+ 	int        found;
+ 	int        offset;
+-	bool       interp;
++	bool       interp=false;
+ 
+ 	/*First, recover interp bool: */
+ 	this->parameters->FindParam(&interp,TimesteppingInterpForcingsEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22739)
+@@ -1386,23 +1386,42 @@
+ 
+ 	/*Get number of controls*/
+ 	int num_controls;
++	bool isautodiff;
+ 	parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+ 
++
+ 	/*Get number of vertices*/
+ 	int numvertices = this->GetNumberOfVertices();
++	if(isautodiff){
++		int* N;
++		int* M;
++		int start = 0;
++		parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
++		parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
++		if(control_index>0) for(int n=0;n<control_index-1;n++) start+=N[n]*M[n];
+ 
+-	/*get gradient indices*/
+-	if(onsid){
+-		for(int i=0;i<numvertices;i++){
+-			indexing[i]=num_controls*this->vertices[i]->Sid() + control_index;
++		for(int n=0;n<N[control_index];n++){
++			for(int i=0;i<numvertices;i++){
++				indexing[i+n*numvertices]=this->vertices[i]->Sid() + start + n*M[control_index];
++			}
+ 		}
+ 	}
+ 	else{
+-		for(int i=0;i<numvertices;i++){
+-			indexing[i]=num_controls*this->vertices[i]->Pid() + control_index;
++		int M;
++		parameters->FindParam(&M,ControlInputSizeMEnum);
++	/*get gradient indices*/
++		if(onsid){
++			for(int i=0;i<numvertices;i++){
++				indexing[i]=this->vertices[i]->Sid() + (control_index)*M;
++			}
+ 		}
++		else{
++			for(int i=0;i<numvertices;i++){
++				indexing[i]=this->vertices[i]->Pid() + (control_index)*M;
++			}
++		}
+ 	}
+-
+ }
+ /*}}}*/
+ IssmDouble Element::GroundedArea(IssmDouble* mask, bool scaled){/*{{{*/
+@@ -1618,8 +1637,8 @@
+ 	_assert_(max_vector); 
+ 
+ 	/*For now we only support nodal vectors*/
+-	if(M!=iomodel->numberofvertices) _error_("not supported");
+-	if(N!=1) _error_("not supported");
++	//if(M!=iomodel->numberofvertices) _error_("not supported");
++	//if(N!=1) _error_("not supported");
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	_assert_(iomodel->elements);
+@@ -1637,6 +1656,46 @@
+ 		this->AddControlInput(input_enum,values,min_vector,max_vector,P1Enum,id);
+ 	}
+ 
++	else if(M==iomodel->numberofvertices+1){
++            /*create transient input: */
++            IssmDouble* times = xNew<IssmDouble>(N);
++            for(int t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
++				/*Create the three transient inputs for the control input*/
++            TransientInput* values_input=new TransientInput(ControlInputValuesEnum,times,N);
++				TransientInput* mins_input = new TransientInput(ControlInputMinsEnum,times,N);
++				TransientInput* maxs_input = new TransientInput(ControlInputMaxsEnum,times,N);
++			   TransientInput* grad_input = new TransientInput(ControlInputGradEnum);
++				for(int t=0;t<N;t++){
++                for(int i=0;i<numvertices;i++){ 
++						values[i]=vector[N*(vertexids[i]-1)+t];
++						values_min[i] = min_vector[N*(vertexids[i]-1)+t];
++						values_max[i] = max_vector[N*(vertexids[i]-1)+t];
++					 } 
++					switch(this->ObjectEnum()){
++                    case TriaEnum:
++									values_input->AddTimeInput(new TriaInput(ControlInputValuesEnum,values,P1Enum)); 
++									mins_input->AddTimeInput(new TriaInput(ControlInputMinsEnum,values_min,P1Enum)); 
++									maxs_input->AddTimeInput(new TriaInput(ControlInputMaxsEnum,values_max,P1Enum));
++								break;
++                    case PentaEnum:
++								printf("-------------- file: Element.cpp line: %i\n",__LINE__); 
++									values_input->AddTimeInput(new PentaInput(ControlInputValuesEnum,values,P1Enum)); 
++									mins_input->AddTimeInput(new PentaInput(ControlInputMinsEnum,values_min,P1Enum)); 
++									maxs_input->AddTimeInput(new PentaInput(ControlInputMaxsEnum,values_max,P1Enum)); 
++									break;
++                    case TetraEnum:
++									values_input->AddTimeInput(new TetraInput(ControlInputValuesEnum,values,P1Enum)); 
++									mins_input->AddTimeInput(new TetraInput(ControlInputMinsEnum,values_min,P1Enum)); 
++									maxs_input->AddTimeInput(new TetraInput(ControlInputMaxsEnum,values_max,P1Enum)); 
++									break;
++                    default: _error_("Not implemented yet");
++                }
++            }
++            this->inputs->AddInput(new ControlInput(input_enum,TransientInputEnum,values_input,mins_input,maxs_input,grad_input,P1Enum,id));
++            xDelete<IssmDouble>(times);
++        }
++		  else _error_("not currently supported type of M and N attempted");
++
+ 	/*clean up*/
+ 	xDelete<IssmDouble>(values);
+ 	xDelete<int>(vertexids);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22739)
+@@ -741,6 +741,39 @@
+ 
+ }
+ /*}}}*/
++void       Tria::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M){/*{{{*/
++
++	int    idlist[NUMVERTICES];
++	int	gradidlist[NUMVERTICES];
++	IssmDouble grad_list[NUMVERTICES];
++	Input* grad_input=NULL;
++
++	Input* input=inputs->GetInput(enum_type);
++	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
++	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
++
++	GradientIndexing(&gradidlist[0],control_index,true);
++
++	for(int n=0;n<N;n++){
++		for(int i=0;i<NUMVERTICES;i++){
++			idlist[i] = offset + this->vertices[i]->Sid()+n*M;
++			grad_list[i]=gradient[idlist[i]];
++		}
++
++		ControlInput* controlinput = xDynamicCast<ControlInput*>(input);
++		if(controlinput->layout_enum!=TransientInputEnum){
++			grad_input=new TriaInput(GradientEnum,grad_list,P1Enum);
++			controlinput->SetGradient(grad_input);
++		}
++		else{
++			grad_input = new TriaInput(GradientEnum,grad_list,P1Enum);
++			controlinput->SetGradient(grad_input,n);
++			controlinput->Configure(parameters);
++		}
++	}
++
++		
++}/*}}}*/
+ void       Tria::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){/*{{{*/
+ 
+ 	int    vertexpidlist[NUMVERTICES];
+@@ -1677,6 +1710,82 @@
+ 	((ControlInput*)input)->GetVectorFromInputs(vector,&vertexidlist[0],data);
+ }
+ /*}}}*/
++void       Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset, bool onsid){/*{{{*/
++
++	int* idlist = NULL;
++	IssmDouble* values = NULL;
++	int* M;
++
++	/*Get out if this is not an element input*/
++	if(!IsInput(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput");
++	Input* input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
++
++	parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
++	
++	/*Cast to Controlinput*/
++	if(input->ObjectEnum()!=ControlInputEnum) _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
++	ControlInput* controlinput = xDynamicCast<ControlInput*>(input);
++	
++	if(strcmp(data,"value")==0){
++		input  = controlinput->values;
++	}
++	else if (strcmp(data,"lowerbound")==0){
++		input = controlinput->minvalues;
++	}
++	else if (strcmp(data,"upperbound")==0){
++		input = controlinput->maxvalues;
++	}
++	else if (strcmp(data,"gradient")==0){
++		input = controlinput->gradient;
++	}
++	else{
++		_error_("Data " << data << " not supported yet");
++	}
++	/*Check what input we are dealing with*/
++	
++	switch(input->ObjectEnum()){
++		case TriaInputEnum:
++			  {
++				TriaInput* triainput = xDynamicCast<TriaInput*>(input);
++				if(triainput->interpolation_type!=P1Enum) _error_("not supported yet");
++
++				/*Create list of indices and values for global vector*/
++				idlist = xNew<int>(NUMVERTICES);
++				values = xNew<IssmDouble>(NUMVERTICES);
++				GradientIndexing(&idlist[0],control_index,true);
++				for(int i=0;i<NUMVERTICES;i++){
++					values[i] = triainput->values[i];
++				}
++				vector->SetValues(NUMVERTICES,idlist,values,INS_VAL);
++				break;
++			  }
++			
++		case TransientInputEnum:
++				{
++					TransientInput* transientinput = xDynamicCast<TransientInput*>(input);
++					int N = transientinput->numtimesteps;
++					idlist = xNew<int>(NUMVERTICES*N);
++					values = xNew<IssmDouble>(NUMVERTICES*N);
++					for(int t=0;t<transientinput->numtimesteps;t++) {
++						IssmDouble time = transientinput->GetTimeByOffset(t);
++						input = transientinput->GetTimeInput(time);
++						TriaInput* timeinput = xDynamicCast<TriaInput*>(input);
++						if(timeinput->interpolation_type!=P1Enum) _error_("not supported yet");
++						/*Create list of indices and values for global vector*/
++						for(int i=0;i<NUMVERTICES;i++){
++								idlist[N*i+t] = offset + this->vertices[i]->Sid()+t*M[control_index];
++								values[N*i+t] = timeinput->values[i];
++						}
++					}
++					vector->SetValues(NUMVERTICES*transientinput->numtimesteps,idlist,values,INS_VAL);
++					break;
++				}
++		default: _error_("input "<<input->ObjectEnum()<<" not supported yet");
++	}
++	xDelete<int>(idlist);
++	xDelete<IssmDouble>(values);
++}
++/*}}}*/
+ void       Tria::GetVerticesCoordinatesBase(IssmDouble** pxyz_list){/*{{{*/
+ 
+ 	int        indices[2];
+@@ -1951,7 +2060,7 @@
+ 	IssmDouble yts;
+ 
+ 	/*Get parameters: */
+-	iomodel->FindConstant(&yts,"md.constants.yts"); 
++	iomodel->FindConstant(&yts,"md.constants.yts");
+ 	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+ 	iomodel->FindConstant(&ad_analysis, "md.autodiff.isautodiff");
+ 	if(control_analysis && !ad_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
+@@ -1962,7 +2071,7 @@
+ 
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+-	for(i=0;i<3;i++){ 
++	for(i=0;i<3;i++){
+ 		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+ 	}
+ 
+@@ -2062,11 +2171,11 @@
+ 
+ 	/*DatasetInputs*/
+ 	if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")){
+-	
++
+ 		/*Generate cost functions associated with the iomodel*/
+-		char**	cost_functions			= NULL;
+-		int*		cost_functions_enums = NULL;
+-		int		num_cost_functions;
++		char**   cost_functions       = NULL;
++		int*     cost_functions_enums = NULL;
++		int      num_cost_functions;
+ 
+ 		iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions");
+ 		iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.inversion.cost_functions");
+@@ -2090,7 +2199,6 @@
+ 		xDelete<char*>(cost_functions);
+ 	}
+ }
+-/*}}}*/
+ void       Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/
+ 
+ 	/*Intermediary*/
+@@ -3150,6 +3258,60 @@
+ 	_error_("not implemented yet");
+ }
+ /*}}}*/
++void       Tria::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N, int M){/*{{{*/
++
++	IssmDouble  values[NUMVERTICES];
++	int         idlist[NUMVERTICES],control_init;
++
++
++	/*Get Domain type*/
++	int domaintype;
++	parameters->FindParam(&domaintype,DomainTypeEnum);
++
++	/*Specific case for depth averaged quantities*/
++	control_init=control_enum;
++	if(domaintype==Domain2DverticalEnum){
++		if(control_enum==MaterialsRheologyBbarEnum){
++			control_enum=MaterialsRheologyBEnum;
++			if(!IsOnBase()) return;
++		}
++		if(control_enum==DamageDbarEnum){
++			control_enum=DamageDEnum;
++			if(!IsOnBase()) return;
++		}
++	}
++
++	/*Get out if this is not an element input*/
++	if(!IsInput(control_enum)) return;
++	
++	Input* input     = (Input*)this->inputs->GetInput(control_enum);   _assert_(input);
++	if(input->ObjectEnum()!=ControlInputEnum){
++		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
++	}
++
++	ControlInput* controlinput = xDynamicCast<ControlInput*>(input);
++	input = controlinput->values;
++
++	/*Get values on vertices*/
++	for(int n=0;n<N;n++){
++		for(int i=0;i<NUMVERTICES;i++){
++			idlist[i]=offset + this->vertices[i]->Sid()+n*M;
++			values[i]=vector[idlist[i]];
++			//_printf_("index: "<<idlist[i]<<" -- value: "<<values[i]<<"\n");
++		}
++		if(input->ObjectEnum()==TriaInputEnum){
++			Input* new_input = new TriaInput(control_enum,values,P1Enum);
++			controlinput->SetInput(new_input);
++		}
++		else if(input->ObjectEnum()==TransientInputEnum){
++			Input* new_input = new TriaInput(control_enum,values,P1Enum);
++			controlinput->SetInput(new_input,n);
++			controlinput->Configure(parameters);
++		}
++		else _error_("Type not supported");
++	}
++}
++/*}}}*/
+ void       Tria::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){/*{{{*/
+ 
+ 	IssmDouble  values[NUMVERTICES];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22738)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22739)
+@@ -560,6 +560,32 @@
+ 	this->inputs->Configure(parameters);
+ }
+ /*}}}*/
++void       Penta::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){/*{{{*/
++
++	int    vertexpidlist[NUMVERTICES];
++	IssmDouble grad_list[NUMVERTICES];
++	Input* grad_input=NULL;
++	Input* input=NULL;
++
++	if(enum_type==MaterialsRheologyBbarEnum){
++		input=(Input*)inputs->GetInput(MaterialsRheologyBEnum);
++	}
++	else if(enum_type==DamageDbarEnum){
++		input=(Input*)inputs->GetInput(DamageDEnum);
++	}
++	else{
++		input=inputs->GetInput(enum_type);
++	}
++	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
++	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
++
++	GradientIndexing(&vertexpidlist[0],control_index);
++	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]];
++	grad_input=new PentaInput(GradientEnum,grad_list,P1Enum);
++	((ControlInput*)input)->SetGradient(grad_input);
++
++}
++/*}}}*/
+ void       Penta::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){/*{{{*/
+ 
+ 	int    vertexpidlist[NUMVERTICES];
+@@ -1149,6 +1175,85 @@
+ 	((ControlInput*)input)->GetVectorFromInputs(vector,&vertexidlist[0],data);
+ }
+ /*}}}*/
++void       Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset,bool onsid){/*{{{*/
++
++	int* idlist = NULL;
++	IssmDouble* values = NULL;
++	int* M;
++
++	/*Get out if this is not an element input*/
++	if(!IsInput(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput");
++	Input* input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
++
++
++	/*Cast to Controlinput*/
++	if(input->ObjectEnum()!=ControlInputEnum) _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
++	ControlInput* controlinput = xDynamicCast<ControlInput*>(input);
++
++	if(strcmp(data,"value")==0){
++		input  = controlinput->values;
++	}
++	else if (strcmp(data,"lowerbound")==0){
++		input = controlinput->minvalues;
++	}
++	else if (strcmp(data,"upperbound")==0){
++		input = controlinput->maxvalues;
++	}
++	else if (strcmp(data,"gradient")==0){
++		input = controlinput->gradient;
++	}
++	else{
++		_error_("Data " << data << " not supported yet");
++	}
++	/*Check what input we are dealing with*/
++
++	switch(input->ObjectEnum()){
++		case PentaInputEnum:
++				  {
++					PentaInput* pentainput = xDynamicCast<PentaInput*>(input);
++					if(pentainput->interpolation_type!=P1Enum) _error_("not supported yet");
++
++					/*Create list of indices and values for global vector*/
++					idlist = xNew<int>(NUMVERTICES);
++					values = xNew<IssmDouble>(NUMVERTICES);
++					GradientIndexing(&idlist[0],control_index,true);
++					for(int i=0;i<NUMVERTICES;i++){
++						values[i] = pentainput->values[i];
++						//if(this->Id()<=10)_printf_("index "<<idlist[i]<<"\n");
++					}
++					vector->SetValues(NUMVERTICES,idlist,values,INS_VAL);
++					break;
++				  }
++
++				case TransientInputEnum:
++				  {
++					parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
++					TransientInput* transientinput = xDynamicCast<TransientInput*>(input);
++					int N = transientinput->numtimesteps;
++					idlist = xNew<int>(NUMVERTICES*N);
++					values = xNew<IssmDouble>(NUMVERTICES*N);
++					for(int t=0;t<transientinput->numtimesteps;t++) {
++						IssmDouble time = transientinput->GetTimeByOffset(t);
++						input = transientinput->GetTimeInput(time);
++						TriaInput* timeinput = xDynamicCast<TriaInput*>(input);
++						if(timeinput->interpolation_type!=P1Enum) _error_("not supported yet");
++						/*Create list of indices and values for global vector*/
++						for(int i=0;i<NUMVERTICES;i++){
++							idlist[N*i+t] = offset + this->vertices[i]->Sid()+t*M[control_index];
++							values[N*i+t] = timeinput->values[i];
++						}
++					}
++
++					vector->SetValues(NUMVERTICES*transientinput->numtimesteps,idlist,values,INS_VAL);
++					break;
++				  }
++				default: _error_("input "<<input->ObjectEnum()<<" not supported yet");
++
++		}
++			xDelete<int>(idlist);
++			xDelete<IssmDouble>(values);
++	}
++/*}}}*/
+ void       Penta::GetVerticesCoordinatesBase(IssmDouble** pxyz_list){/*{{{*/
+ 
+ 	IssmDouble* xyz_list = xNew<IssmDouble>(NUMVERTICES2D*3);
+@@ -2252,6 +2357,48 @@
+ }
+ 
+ /*}}}*/
++void       Penta::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset, int N, int M){/*{{{*/
++
++	IssmDouble  values[NUMVERTICES];
++	int         vertexpidlist[NUMVERTICES],control_init;
++
++	/*Specific case for depth averaged quantities*/
++	control_init=control_enum;
++	if(control_enum==MaterialsRheologyBbarEnum){
++		control_enum=MaterialsRheologyBEnum;
++		if(!IsOnBase()) return;
++	}
++	if(control_enum==DamageDbarEnum){
++		control_enum=DamageDEnum;
++		if(!IsOnBase()) return;
++	}
++
++	/*Get out if this is not an element input*/
++	if(!IsInput(control_enum)) return;
++
++	/*Prepare index list*/
++	GradientIndexing(&vertexpidlist[0],control_index);
++
++	/*Get values on vertices*/
++	for(int i=0;i<NUMVERTICES;i++){
++		values[i]=vector[vertexpidlist[i]];
++	}
++	Input* new_input = new PentaInput(control_enum,values,P1Enum);
++	Input* input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
++	if(input->ObjectEnum()!=ControlInputEnum){
++		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
++	}
++
++	((ControlInput*)input)->SetInput(new_input);
++
++	if(control_init==MaterialsRheologyBbarEnum){
++		this->InputExtrude(control_enum,-1);
++	}
++	if(control_init==DamageDbarEnum){
++		this->InputExtrude(control_enum,-1);
++	}
++}
++/*}}}*/
+ void       Penta::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){/*{{{*/
+ 
+ 	IssmDouble  values[NUMVERTICES];
Index: /issm/oecreview/Archive/21724-22754/ISSM-22739-22740.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22739-22740.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22739-22740.diff	(revision 22755)
@@ -0,0 +1,104 @@
+Index: ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp	(revision 22740)
+@@ -14,8 +14,8 @@
+ 		/*Intermediaries*/
+ 		int  num_controls;
+ 		int *control_type = NULL;
+-		int* M_all;
+-		int* N_all;
++		int* M_all = NULL;
++		int* N_all = NULL;
+ 
+ 		/*Retrieve some parameters*/
+ 		parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 22740)
+@@ -1179,7 +1179,7 @@
+ 
+ 	int* idlist = NULL;
+ 	IssmDouble* values = NULL;
+-	int* M;
++	int* M = NULL;
+ 
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput");
+@@ -1219,7 +1219,6 @@
+ 					GradientIndexing(&idlist[0],control_index,true);
+ 					for(int i=0;i<NUMVERTICES;i++){
+ 						values[i] = pentainput->values[i];
+-						//if(this->Id()<=10)_printf_("index "<<idlist[i]<<"\n");
+ 					}
+ 					vector->SetValues(NUMVERTICES,idlist,values,INS_VAL);
+ 					break;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22740)
+@@ -1394,8 +1394,8 @@
+ 	/*Get number of vertices*/
+ 	int numvertices = this->GetNumberOfVertices();
+ 	if(isautodiff){
+-		int* N;
+-		int* M;
++		int* N=NULL;
++		int* M=NULL;
+ 		int start = 0;
+ 		parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
+ 		parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
+@@ -1678,7 +1678,6 @@
+ 									maxs_input->AddTimeInput(new TriaInput(ControlInputMaxsEnum,values_max,P1Enum));
+ 								break;
+                     case PentaEnum:
+-								printf("-------------- file: Element.cpp line: %i\n",__LINE__); 
+ 									values_input->AddTimeInput(new PentaInput(ControlInputValuesEnum,values,P1Enum)); 
+ 									mins_input->AddTimeInput(new PentaInput(ControlInputMinsEnum,values_min,P1Enum)); 
+ 									maxs_input->AddTimeInput(new PentaInput(ControlInputMaxsEnum,values_max,P1Enum)); 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22740)
+@@ -82,7 +82,6 @@
+ void TransientInput::DeepEcho(void){/*{{{*/
+ 
+ 	int i;
+-	printf("-------------- file: TransientInput.cpp line: %i\n",__LINE__); 
+ 
+ 	_printf_("TransientInput:\n");
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22740)
+@@ -191,7 +191,6 @@
+ 			iomodel->FetchData(&independent,&M,&N,iofieldname);
+ 			_assert_(independent);
+ 			_assert_(N==control_sizes[i]);
+-			_printf_("N control size: "<<control_sizes[i]<<"\n");
+ 		
+ 			independents_min = NULL; independents_min = xNew<IssmDouble>(M*N);
+ 			independents_max = NULL; independents_max = xNew<IssmDouble>(M*N);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22739)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22740)
+@@ -1714,7 +1714,7 @@
+ 
+ 	int* idlist = NULL;
+ 	IssmDouble* values = NULL;
+-	int* M;
++	int* M = NULL;
+ 
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput");
+@@ -3297,7 +3297,6 @@
+ 		for(int i=0;i<NUMVERTICES;i++){
+ 			idlist[i]=offset + this->vertices[i]->Sid()+n*M;
+ 			values[i]=vector[idlist[i]];
+-			//_printf_("index: "<<idlist[i]<<" -- value: "<<values[i]<<"\n");
+ 		}
+ 		if(input->ObjectEnum()==TriaInputEnum){
+ 			Input* new_input = new TriaInput(control_enum,values,P1Enum);
Index: /issm/oecreview/Archive/21724-22754/ISSM-22740-22741.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22740-22741.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22740-22741.diff	(revision 22755)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22740)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22741)
+@@ -47,7 +47,6 @@
+ 	else
+ 		index = counter;
+ 	end
+-	results(index).(result.fieldname)=result.field;
+ 	if(result.step~=-9999),
+ 		results(index).step=result.step;
+ 	end
+@@ -54,6 +53,7 @@
+ 	if(result.time~=-9999),
+ 		results(index).time=result.time;
+ 	end
++	results(index).(result.fieldname)=result.field;
+ 
+ 	%read next result
+ 	try,
Index: /issm/oecreview/Archive/21724-22754/ISSM-22741-22742.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22741-22742.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22741-22742.diff	(revision 22755)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22741)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22742)
+@@ -1355,6 +1355,7 @@
+ 		// if pore water froze in ice then adjust d and dz thickness
+ 		for(int i=0;i<n;i++)if(d[i]>dIce-Dtol)d[i]=dIce;
+ 		for(int i=0;i<n;i++) dz[i]= m[i]/d[i];
++
+ 	}
+ 
+ 	// squeeze water from snow pack
+@@ -1374,27 +1375,28 @@
+ 		// (maximum T of snow before entire grid cell melts is a constant
+ 		// LF/CI = 159.1342)
+ 		surpT=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpT[i] = fmax(0.0, exsT[i]- LF/CI);
+-        
+-		if (cellsum(surpT,n) > 0.0 + Ttol){
++
++		if (cellsum(surpT,n) > 0.0 + Ttol ){
+ 			// _printf_("T Surplus");
+ 			// calculate surplus energy
+ 			surpE=xNew<IssmDouble>(n); for(int i=0;i<n;i++)surpE[i] = surpT[i] * CI * m[i];
+-            
++
+ 			int i = 0;
+-			while (cellsum(surpE,n) > 0.0 + Ttol && i<n-1){
+-
++			while (cellsum(surpE,n) > 0.0 + Ttol){
+ 				// use surplus energy to increase the temperature of lower cell
+ 				T[i+1] = surpE[i]/m[i+1]/CI + T[i+1];
+-				surpT[i+1] = fmax(0.0, (T[i+1] - CtoK - LF/CI));
++
++				exsT[i+1] = fmax(0.0, T[i+1] - CtoK) + exsT[i+1];
++				T[i+1] = fmin(CtoK, T[i+1]);
++
++				surpT[i+1] = fmax(0.0, exsT[i+1] - LF/CI);
+ 				surpE[i+1] = surpT[i+1] * CI * m[i+1];
+ 
+ 				// adjust current cell properties (again 159.1342 is the max T)
+-				T[i] = T[i]-surpE[i]/m[i+1]/CI;
++				exsT[i] = LF/CI;
+ 				surpE[i] = 0.0;
+ 				i = i + 1;
+ 			}
+-			// recalculate temperature excess above 0 deg C 
+-			for(int i=0;i<n;i++) exsT[i] = fmax(0.0, T[i] - CtoK);  
+ 		}
+ 
+ 		// convert temperature excess to melt [kg]
Index: /issm/oecreview/Archive/21724-22754/ISSM-22742-22743.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22742-22743.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22742-22743.diff	(revision 22755)
@@ -0,0 +1,194 @@
+Index: ../trunk-jpl/test/NightlyRun/test480.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test480.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test480.m	(revision 22743)
+@@ -0,0 +1,74 @@
++%Test Name: SquareShelfAdolcStaticControls
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%control parameters
++md.inversion=adm1qn3inversion(md.inversion);
++md.inversion.iscontrol=1;
++md.autodiff.isautodiff=1;
++
++md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
++md.autodiff.independents = {independent('name','FrictionCoefficient',...
++	'md_name','md.friction.coefficient',...
++	'control_size',1,...
++	'type','vertex',...
++	'min_parameters',ones(md.mesh.numberofvertices,1),...
++	'max_parameters',500*ones(md.mesh.numberofvertices,1),...
++	'control_scaling_factor',1)...
++	};
++
++md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
++	'definitionstring','Outputdefinition1',...
++	'model_string','Vy',...
++	'observation_string','VyObs',...
++	'observation',md.initialization.vy/md.constants.yts,...
++	'weights',ones(md.mesh.numberofvertices,1),...
++	'weights_string','WeightsSurfaceObservation',...
++	'datatime',0.75);
++
++md.timestepping.interp_forcings=0;
++md.timestepping.time_step=0.5;
++md.timestepping.final_time=1.5;
++
++md.transient.ismasstransport=1;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismovingfront=0;
++md.transient.isthermal=0;
++
++pos=find(md.mask.groundedice_levelset<0);
++md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
++
++md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
++md.inversion.maxiter = 2;
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
++field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
++field_values={...
++	(md.results.TransientSolution(1).Gradient1),...
++	md.results.TransientSolution(1).J,...
++	(md.results.TransientSolution(1).FrictionCoefficient),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(7).Pressure),...
++	(md.results.TransientSolution(7).Vel),...
++	(md.results.TransientSolution(7).Vx),...
++	(md.results.TransientSolution(7).Vy)
++};
+Index: ../trunk-jpl/test/NightlyRun/test481.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test481.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test481.m	(revision 22743)
+@@ -0,0 +1,80 @@
++%Test Name: SquareShelfAdolcTransientControls
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%control parameters
++md.inversion=adm1qn3inversion(md.inversion);
++md.inversion.iscontrol=1;
++md.autodiff.isautodiff=1;
++
++md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
++md.friction.coefficient(1:md.mesh.numberofvertices,2)=25;
++md.friction.coefficient(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++min_parameters(1:md.mesh.numberofvertices,1:2)=1;
++min_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++max_parameters(1:md.mesh.numberofvertices,1:2)=500;
++max_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++md.autodiff.independents = {independent('name','FrictionCoefficient',...
++	'md_name','md.friction.coefficient',...
++	'control_size',2,...
++	'type','vertex',...
++	'min_parameters',min_parameters,...
++	'max_parameters',max_parameters,...
++	'control_scaling_factor',1)...
++	};
++
++md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
++	'definitionstring','Outputdefinition1',...
++	'model_string','Vy',...
++	'observation_string','VyObs',...
++	'observation',md.initialization.vy/md.constants.yts,...
++	'weights',ones(md.mesh.numberofvertices,1),...
++	'weights_string','WeightsSurfaceObservation',...
++	'datatime',0.75);
++
++md.timestepping.interp_forcings=1;
++md.timestepping.time_step=0.5;
++md.timestepping.final_time=1.5;
++
++md.transient.ismasstransport=1;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismovingfront=0;
++md.transient.isthermal=0;
++
++pos=find(md.mask.groundedice_levelset<0);
++md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
++
++md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
++md.inversion.maxiter = 2;
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
++field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
++field_values={...
++	(md.results.TransientSolution(1).Gradient1),...
++	md.results.TransientSolution(1).J,...
++	(md.results.TransientSolution(1).FrictionCoefficient),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(7).Pressure),...
++	(md.results.TransientSolution(7).Vel),...
++	(md.results.TransientSolution(7).Vx),...
++	(md.results.TransientSolution(7).Vy)
++};
+Index: ../trunk-jpl/test/Archives/Archive480.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive480.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive480.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive480.arch	(revision 22743)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive480.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive481.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive481.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive481.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive481.arch	(revision 22743)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive481.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22743-22744.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22743-22744.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22743-22744.diff	(revision 22755)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 22743)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 22744)
+@@ -129,17 +129,19 @@
+ 
+ 					names{i}=indep.name;
+ 					types(i)=indep.typetoscalar();
+-					min_parameters(:,i)=indep.min_parameters;
+-					max_parameters(:,i)=indep.max_parameters;
++					min_parameters(:,:,i)=indep.min_parameters;
++					max_parameters(:,:,i)=indep.max_parameters;
+ 					scaling_factors(i)=indep.control_scaling_factor;
++					control_sizes(i) = indep.control_size;
++
+ 				end
+ 				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','StringArray');
+ 				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
+ 				WriteData(fid,prefix,'data',min_parameters,'name','md.autodiff.independent_min_parameters','format','DoubleMat','mattype',3);
+ 	         WriteData(fid,prefix,'data',max_parameters,'name','md.autodiff.independent_max_parameters','format','DoubleMat','mattype',3);
+-	         WriteData(fid,prefix,'data',scaling_factors,'name','md.autodiff.independent_scaling_factors','format','DoubleMat','mattype',3);
++	         WriteData(fid,prefix,'data',scaling_factors,'name','md.autodiff.independent_scaling_factors','format','IntMat','mattype',3);
++				WriteData(fid,prefix,'data',control_sizes,'name','md.autodiff.independent_control_sizes','format','IntMat','mattype',3);
+ 
+-
+ 			end
+ 			%}}}
+ 			%if driver is fos_forward, build index:  {{{
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 22743)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 22744)
+@@ -5,14 +5,17 @@
+ 
+ classdef independent
+ 	properties (SetAccess=public) 
+-		name                 = '';
+-		type                 = '';
+-		fos_forward_index    = NaN;
+-		fov_forward_indices  = [];
+-		nods                 = 0;
+-		min_parameters			= NaN;
+-		max_parameters			= NaN;
+-		control_scaling_factor     = NaN
++		name			               = '';
++		md_name							= '';
++		type					         = '';
++		fos_forward_index			   = NaN;
++		fov_forward_indices			= [];
++		nods								= 0;
++		min_parameters					= NaN;
++		max_parameters					= NaN;
++		control_scaling_factor     = NaN;
++		control_size					= 0;
++
+ 	end
+ 	methods
+ 		function self = independent(varargin) % {{{
+@@ -23,6 +26,7 @@
+ 			%OK get other fields
+ 			self=AssignObjectFields(pairoptions(varargin{:}),self);
+ 
++
+ 		end
+ 		%}}}
+ 		function self = setdefaultparameters(self) % {{{
+@@ -52,8 +56,8 @@
+ 				%md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.control_scaling_factors'],'size',[1 1],'>',0,'NaN',1,'Inf',1);
+ 
+ 			end
++		end % }}}
+ 
+-		end % }}}
+ 		function disp(self) % {{{
+ 			disp(sprintf('   independent variable:'));
+ 
+@@ -60,6 +64,7 @@
+ 			fielddisplay(self,'name','variable name (must match corresponding String)');
+ 			fielddisplay(self,'type','type of variable (''vertex'' or ''scalar'')');
+ 			fielddisplay(self,'nods','size of dependent variables');
++			fielddisplay(self,'control_size','number of timesteps');
+ 			fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
+ 			fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
+ 			fielddisplay(self,'control_scaling_factor','order of magnitude of each control (useful for multi-parameter optimization)');
Index: /issm/oecreview/Archive/21724-22754/ISSM-22744-22745.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22744-22745.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22744-22745.diff	(revision 22755)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/test/NightlyRun/README
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/README	(revision 22744)
++++ ../trunk-jpl/test/NightlyRun/README	(revision 22745)
+@@ -1,36 +1 @@
+-
+-# running a test
+------------------
+-
+-To run a test, just type: testxxx in matlab
+-To check that the results of a test are similar to the Archive, type: runme('id',xxx)
+-Several tests can be run at the same time.
+-If no id if specified, all the tests will be done.
+-All the archives are contained in ../Archives
+-To update a test archive, use runme('procedure','update','id',xxx)
+-Once again, if no id is specified, all the archives will be updated.
+-
+-
+-# How to create a new test
+---------------------------
+-
+-This directory contains all the tests that run every night to check the code.
+-The file IdToName associate a test id to its name.
+-All the files necessary to run the tests can be found in:
+-../Exp/ for the exp files (domains, contours, ...)
+-../Par/ for the parameter files (to parameterize a model)
+-../Data/ for the datasets needed to initialize a model
+-To add a test, create a new testxxx.m and a testxxx_nightly.m
+-
+-The first number of the id correspond to the type of test:
+-1: SquareShelfConstrained (no icefront)
+-2: SquareShelf (with an icefront)
+-3: SquareSheetConstrained (no icefront)
+-4: SquareSheetShelf (Marine ice sheet with an ice shelf at the end)
+-5: Pine Island Glacier
+-6: 79North
+-Add the id and testname in IdToName.m (incresing order)
+-We try not to create too many .par and .exp files, so try to use the existing ones as much as possible.
+-To modify some characteristics, do it in the testxxx.m file.
+-Specify the field_names the field_values and the tolerance at the end of the test file.
+-Don't forget to commit the archive (Archivexxx.arch in ../Archives)
++For more info: https://issm.ess.uci.edu/trac/issm/wiki/addnewNR
Index: /issm/oecreview/Archive/21724-22754/ISSM-22745-22746.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22745-22746.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22745-22746.diff	(revision 22755)
@@ -0,0 +1,388 @@
+Index: ../trunk-jpl/test/NightlyRun/test480.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test480.m	(revision 22745)
++++ ../trunk-jpl/test/NightlyRun/test480.m	(nonexistent)
+@@ -1,74 +0,0 @@
+-%Test Name: SquareShelfAdolcStaticControls
+-md=triangle(model(),'../Exp/Square.exp',100000.);
+-md=setmask(md,'../Exp/SquareShelf.exp','');
+-md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md.initialization.vx(:)=1.;
+-md.initialization.vy(:)=1.;
+-md.geometry.thickness(:)=500-md.mesh.x/10000;
+-md.geometry.bed =-100-md.mesh.x/1000;
+-md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
+-md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
+-pos=find(md.mask.groundedice_levelset>=0);
+-md.geometry.base(pos)=md.geometry.bed(pos);
+-md.geometry.surface=md.geometry.base+md.geometry.thickness;
+-md=setflowequation(md,'SSA','all');
+-
+-%control parameters
+-md.inversion=adm1qn3inversion(md.inversion);
+-md.inversion.iscontrol=1;
+-md.autodiff.isautodiff=1;
+-
+-md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
+-md.autodiff.independents = {independent('name','FrictionCoefficient',...
+-	'md_name','md.friction.coefficient',...
+-	'control_size',1,...
+-	'type','vertex',...
+-	'min_parameters',ones(md.mesh.numberofvertices,1),...
+-	'max_parameters',500*ones(md.mesh.numberofvertices,1),...
+-	'control_scaling_factor',1)...
+-	};
+-
+-md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
+-	'definitionstring','Outputdefinition1',...
+-	'model_string','Vy',...
+-	'observation_string','VyObs',...
+-	'observation',md.initialization.vy/md.constants.yts,...
+-	'weights',ones(md.mesh.numberofvertices,1),...
+-	'weights_string','WeightsSurfaceObservation',...
+-	'datatime',0.75);
+-
+-md.timestepping.interp_forcings=0;
+-md.timestepping.time_step=0.5;
+-md.timestepping.final_time=1.5;
+-
+-md.transient.ismasstransport=1;
+-md.transient.isstressbalance=1;
+-md.transient.isgroundingline=1;
+-md.transient.ismovingfront=0;
+-md.transient.isthermal=0;
+-
+-pos=find(md.mask.groundedice_levelset<0);
+-md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
+-md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
+-
+-md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
+-md.inversion.maxiter = 2;
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,'transient');
+-
+-%Fields and tolerances to track changes
+-field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
+-field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
+-field_values={...
+-	(md.results.TransientSolution(1).Gradient1),...
+-	md.results.TransientSolution(1).J,...
+-	(md.results.TransientSolution(1).FrictionCoefficient),...
+-	(md.results.TransientSolution(1).Pressure),...
+-	(md.results.TransientSolution(1).Vel),...
+-	(md.results.TransientSolution(1).Vx),...
+-	(md.results.TransientSolution(1).Vy),...
+-	(md.results.TransientSolution(7).Pressure),...
+-	(md.results.TransientSolution(7).Vel),...
+-	(md.results.TransientSolution(7).Vx),...
+-	(md.results.TransientSolution(7).Vy)
+-};
+Index: ../trunk-jpl/test/NightlyRun/test481.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test481.m	(revision 22745)
++++ ../trunk-jpl/test/NightlyRun/test481.m	(nonexistent)
+@@ -1,80 +0,0 @@
+-%Test Name: SquareShelfAdolcTransientControls
+-md=triangle(model(),'../Exp/Square.exp',100000.);
+-md=setmask(md,'../Exp/SquareShelf.exp','');
+-md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md.initialization.vx(:)=1.;
+-md.initialization.vy(:)=1.;
+-md.geometry.thickness(:)=500-md.mesh.x/10000;
+-md.geometry.bed =-100-md.mesh.x/1000;
+-md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
+-md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
+-pos=find(md.mask.groundedice_levelset>=0);
+-md.geometry.base(pos)=md.geometry.bed(pos);
+-md.geometry.surface=md.geometry.base+md.geometry.thickness;
+-md=setflowequation(md,'SSA','all');
+-
+-%control parameters
+-md.inversion=adm1qn3inversion(md.inversion);
+-md.inversion.iscontrol=1;
+-md.autodiff.isautodiff=1;
+-
+-md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
+-md.friction.coefficient(1:md.mesh.numberofvertices,2)=25;
+-md.friction.coefficient(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
+-min_parameters(1:md.mesh.numberofvertices,1:2)=1;
+-min_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
+-max_parameters(1:md.mesh.numberofvertices,1:2)=500;
+-max_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
+-md.autodiff.independents = {independent('name','FrictionCoefficient',...
+-	'md_name','md.friction.coefficient',...
+-	'control_size',2,...
+-	'type','vertex',...
+-	'min_parameters',min_parameters,...
+-	'max_parameters',max_parameters,...
+-	'control_scaling_factor',1)...
+-	};
+-
+-md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
+-	'definitionstring','Outputdefinition1',...
+-	'model_string','Vy',...
+-	'observation_string','VyObs',...
+-	'observation',md.initialization.vy/md.constants.yts,...
+-	'weights',ones(md.mesh.numberofvertices,1),...
+-	'weights_string','WeightsSurfaceObservation',...
+-	'datatime',0.75);
+-
+-md.timestepping.interp_forcings=1;
+-md.timestepping.time_step=0.5;
+-md.timestepping.final_time=1.5;
+-
+-md.transient.ismasstransport=1;
+-md.transient.isstressbalance=1;
+-md.transient.isgroundingline=1;
+-md.transient.ismovingfront=0;
+-md.transient.isthermal=0;
+-
+-pos=find(md.mask.groundedice_levelset<0);
+-md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
+-md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
+-
+-md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
+-md.inversion.maxiter = 2;
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,'transient');
+-
+-%Fields and tolerances to track changes
+-field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
+-field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
+-field_values={...
+-	(md.results.TransientSolution(1).Gradient1),...
+-	md.results.TransientSolution(1).J,...
+-	(md.results.TransientSolution(1).FrictionCoefficient),...
+-	(md.results.TransientSolution(1).Pressure),...
+-	(md.results.TransientSolution(1).Vel),...
+-	(md.results.TransientSolution(1).Vx),...
+-	(md.results.TransientSolution(1).Vy),...
+-	(md.results.TransientSolution(7).Pressure),...
+-	(md.results.TransientSolution(7).Vel),...
+-	(md.results.TransientSolution(7).Vx),...
+-	(md.results.TransientSolution(7).Vy)
+-};
+Index: ../trunk-jpl/test/NightlyRun/test3480.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3480.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test3480.m	(revision 22746)
+@@ -0,0 +1,74 @@
++%Test Name: SquareShelfAdolcStaticControls
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%control parameters
++md.inversion=adm1qn3inversion(md.inversion);
++md.inversion.iscontrol=1;
++md.autodiff.isautodiff=1;
++
++md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
++md.autodiff.independents = {independent('name','FrictionCoefficient',...
++	'md_name','md.friction.coefficient',...
++	'control_size',1,...
++	'type','vertex',...
++	'min_parameters',ones(md.mesh.numberofvertices,1),...
++	'max_parameters',500*ones(md.mesh.numberofvertices,1),...
++	'control_scaling_factor',1)...
++	};
++
++md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
++	'definitionstring','Outputdefinition1',...
++	'model_string','Vy',...
++	'observation_string','VyObs',...
++	'observation',md.initialization.vy/md.constants.yts,...
++	'weights',ones(md.mesh.numberofvertices,1),...
++	'weights_string','WeightsSurfaceObservation',...
++	'datatime',0.75);
++
++md.timestepping.interp_forcings=0;
++md.timestepping.time_step=0.5;
++md.timestepping.final_time=1.5;
++
++md.transient.ismasstransport=1;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismovingfront=0;
++md.transient.isthermal=0;
++
++pos=find(md.mask.groundedice_levelset<0);
++md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
++
++md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
++md.inversion.maxiter = 2;
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
++field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
++field_values={...
++	(md.results.TransientSolution(1).Gradient1),...
++	md.results.TransientSolution(1).J,...
++	(md.results.TransientSolution(1).FrictionCoefficient),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(7).Pressure),...
++	(md.results.TransientSolution(7).Vel),...
++	(md.results.TransientSolution(7).Vx),...
++	(md.results.TransientSolution(7).Vy)
++};
+Index: ../trunk-jpl/test/NightlyRun/test3481.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3481.m	(nonexistent)
++++ ../trunk-jpl/test/NightlyRun/test3481.m	(revision 22746)
+@@ -0,0 +1,80 @@
++%Test Name: SquareShelfAdolcTransientControls
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md.initialization.vx(:)=1.;
++md.initialization.vy(:)=1.;
++md.geometry.thickness(:)=500-md.mesh.x/10000;
++md.geometry.bed =-100-md.mesh.x/1000;
++md.geometry.base=-md.geometry.thickness*md.materials.rho_ice/md.materials.rho_water;
++md.mask.groundedice_levelset=md.geometry.thickness+md.materials.rho_water/md.materials.rho_ice*md.geometry.bed;
++pos=find(md.mask.groundedice_levelset>=0);
++md.geometry.base(pos)=md.geometry.bed(pos);
++md.geometry.surface=md.geometry.base+md.geometry.thickness;
++md=setflowequation(md,'SSA','all');
++
++%control parameters
++md.inversion=adm1qn3inversion(md.inversion);
++md.inversion.iscontrol=1;
++md.autodiff.isautodiff=1;
++
++md.friction.coefficient(1:md.mesh.numberofvertices,1)=50;
++md.friction.coefficient(1:md.mesh.numberofvertices,2)=25;
++md.friction.coefficient(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++min_parameters(1:md.mesh.numberofvertices,1:2)=1;
++min_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++max_parameters(1:md.mesh.numberofvertices,1:2)=500;
++max_parameters(md.mesh.numberofvertices+1,1:2)=[0.75,1.25];
++md.autodiff.independents = {independent('name','FrictionCoefficient',...
++	'md_name','md.friction.coefficient',...
++	'control_size',2,...
++	'type','vertex',...
++	'min_parameters',min_parameters,...
++	'max_parameters',max_parameters,...
++	'control_scaling_factor',1)...
++	};
++
++md.outputdefinition.definitions{1}=cfsurfacesquare('name','VyMisfit1',...
++	'definitionstring','Outputdefinition1',...
++	'model_string','Vy',...
++	'observation_string','VyObs',...
++	'observation',md.initialization.vy/md.constants.yts,...
++	'weights',ones(md.mesh.numberofvertices,1),...
++	'weights_string','WeightsSurfaceObservation',...
++	'datatime',0.75);
++
++md.timestepping.interp_forcings=1;
++md.timestepping.time_step=0.5;
++md.timestepping.final_time=1.5;
++
++md.transient.ismasstransport=1;
++md.transient.isstressbalance=1;
++md.transient.isgroundingline=1;
++md.transient.ismovingfront=0;
++md.transient.isthermal=0;
++
++pos=find(md.mask.groundedice_levelset<0);
++md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
++md.basalforcings.floatingice_melting_rate=25*zeros(md.mesh.numberofvertices,1);
++
++md.autodiff.dependents{1} = dependent('name','Outputdefinition1','type','scalar','fos_reverse_index',1);
++md.inversion.maxiter = 2;
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,'transient');
++
++%Fields and tolerances to track changes
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure1','Vel1','Vx1','Vy1','Pressure2','Vel2','Vx2','Vy2'};
++field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
++field_values={...
++	(md.results.TransientSolution(1).Gradient1),...
++	md.results.TransientSolution(1).J,...
++	(md.results.TransientSolution(1).FrictionCoefficient),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(7).Pressure),...
++	(md.results.TransientSolution(7).Vel),...
++	(md.results.TransientSolution(7).Vx),...
++	(md.results.TransientSolution(7).Vy)
++};
+Index: ../trunk-jpl/test/Archives/Archive480.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive480.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive480.arch	(revision 22745)
++++ ../trunk-jpl/test/Archives/Archive480.arch	(nonexistent)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive480.arch
+___________________________________________________________________
+Deleted: svn:mime-type
+## -1 +0,0 ##
+-application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive481.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive481.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive481.arch	(revision 22745)
++++ ../trunk-jpl/test/Archives/Archive481.arch	(nonexistent)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive481.arch
+___________________________________________________________________
+Deleted: svn:mime-type
+## -1 +0,0 ##
+-application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3480.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3480.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3480.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive3480.arch	(revision 22746)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3480.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3481.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3481.arch
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3481.arch	(nonexistent)
++++ ../trunk-jpl/test/Archives/Archive3481.arch	(revision 22746)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3481.arch
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/21724-22754/ISSM-22746-22747.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22746-22747.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22746-22747.diff	(revision 22755)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22746)
++++ ../trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22747)
+@@ -1762,7 +1762,7 @@
+ 
+ 	/*only in forward mode! avoid round in AD mode as it is not differentiable: */
+ 	#ifndef _HAVE_ADOLC_
+-	dm = round((mSum0 - mSum1 + mAdd)*1000);
++	dm = round((mSum0 - mSum1 + mAdd)*100.0)/100.0;
+ 	dE = round(sumE0 - sumE1 - sumER +  addE);
+ 	if (dm !=0  || dE !=0) _error_("mass or energy are not conserved in melt equations\n"
+ 			<< "dm: " << dm << " dE: " << dE << "\n");
Index: /issm/oecreview/Archive/21724-22754/ISSM-22747-22748.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22747-22748.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22747-22748.diff	(revision 22755)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/IdFromString.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdFromString.m	(revision 22747)
++++ ../trunk-jpl/test/NightlyRun/IdFromString.m	(revision 22748)
+@@ -33,9 +33,7 @@
+ %Process string (delete return carriage);
+ ids_raw=strsplit_strict(ids_raw,char(10));
+ ids_raw=ids_raw(1:end-1);
+-for i=1:length(ids_raw),
+-	eval(['ids=[ids ' ids_raw{i} '];']); 
+-end
++ids=cellfun(@str2num,ids_raw);
+ ids=sort(ids);
+ 
+ %Display names
Index: /issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22748-22749.diff	(revision 22755)
@@ -0,0 +1,167 @@
+Index: ../trunk-jpl/test/Archives/Archive470.arch
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/m/classes/basalforcingspico.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcingspico.m	(revision 22748)
++++ ../trunk-jpl/src/m/classes/basalforcingspico.m	(revision 22749)
+@@ -67,8 +67,8 @@
+ 				md = checkfield(md,'fieldname','basalforcings.maxboxcount','numel',1,'NaN',1,'Inf',1,'>',0);
+ 				md = checkfield(md,'fieldname','basalforcings.overturning_coeff','numel',1,'NaN',1,'Inf',1,'>',0);
+ 				md = checkfield(md,'fieldname','basalforcings.gamma_T','numel',1,'NaN',1,'Inf',1,'>',0);
+-				md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0);
+-				md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0);
++				md = checkfield(md,'fieldname','basalforcings.farocean_temperature','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
++				md = checkfield(md,'fieldname','basalforcings.farocean_salinity','NaN',1,'Inf',1,'>',0,'size',[md.basalforcings.num_basins+1 NaN]);
+ 				md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'>=',0,'timeseries',1);
+ 				md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
+ 
+Index: ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22748)
++++ ../trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22749)
+@@ -31,12 +31,13 @@
+ void UpdateBoxIdsPico(FemModel* femmodel){/*{{{*/
+ 
+ 	int         numvertices,num_basins,maxbox,basinid;
+-	IssmDouble* dmax_basin=NULL;
++	IssmDouble  dist_max;
++	IssmDouble* dmax_basin_cpu=NULL;
+ 	IssmDouble* distances=NULL;
+ 
+ 	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
+ 	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	dmax_basin=xNew<IssmDouble>(num_basins);
++	dmax_basin_cpu=xNew<IssmDouble>(num_basins);
+ 
+ 	femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
+ 	femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
+@@ -45,8 +46,8 @@
+ 	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
+ 
+ 	/*find maximum distance to grounding line per domain and per basin*/
+-	IssmDouble dist_max=-1.;
+-	for(int i=0;i<num_basins;i++){dmax_basin[i]=-1;}
++	IssmDouble maxdist_cpu=-1.;
++	for(int i=0;i<num_basins;i++){dmax_basin_cpu[i]=-1;}
+ 	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		if(!element->IsIceInElement() || !element->IsFloating()) continue;
+@@ -55,12 +56,17 @@
+ 		element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum);
+ 		element->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 		for(int k=0; k<numvertices; k++){
+-			if(fabs(distances[k])>dist_max){dist_max=fabs(distances[k]);}
+-			if(fabs(distances[k])>dmax_basin[basinid]){dmax_basin[basinid]=fabs(distances[k]);}
++			if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);}
++			if(fabs(distances[k])>dmax_basin_cpu[basinid]){dmax_basin_cpu[basinid]=fabs(distances[k]);}
+ 		}
+ 		xDelete<IssmDouble>(distances);
+ 	}
+ 
++	/*Synchronize across cpus*/
++	IssmDouble* dmax_basin=xNew<IssmDouble>(num_basins);
++	ISSM_MPI_Allreduce((void*)&maxdist_cpu,(void*)&dist_max,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Allreduce(dmax_basin_cpu,dmax_basin,num_basins,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,IssmComm::GetComm());
++
+ 	/*Define maximum number of boxes per basin*/
+ 	int* nd=xNew<int>(num_basins);
+ 	for(int i=0; i<num_basins;i++){
+@@ -96,6 +102,7 @@
+ 	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+ 	
+ 	IssmDouble* boxareas=xNewZeroInit<IssmDouble>(num_basins*maxbox);
++
+ 	for(int i=0;i<femmodel->elements->Size();i++){
+ 		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		if(!element->IsIceInElement() || !element->IsFloating()) continue;
+@@ -107,7 +114,8 @@
+ 	/*Synchronize across cpus*/
+ 	IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
+ 	ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+-
++	if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
++	
+ 	/*Update parameters to keep track of the new areas in future calculations*/
+ 	femmodel->parameters->AddObject(new DoubleVecParam(BasalforcingsPicoBoxAreaEnum,sumareas,maxbox*num_basins));
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 22749)
+@@ -233,11 +233,11 @@
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum));
+ 				parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_T",BasalforcingsPicoGammaTEnum));
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_temperature");
+-				_assert_(M>1 && N>1); 
++				_assert_(M>=1 && N>=1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceantemperatureEnum,transparam,&transparam[N*(M-1)],interp,N,M));
+ 				xDelete<IssmDouble>(transparam);
+ 				iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.farocean_salinity");
+-				_assert_(M>1 && N>1); 
++				_assert_(M>=1 && N>=1); 
+ 				parameters->AddObject(new TransientArrayParam(BasalforcingsPicoFarOceansalinityEnum,transparam,&transparam[N*(M-1)],interp,N,M));
+ 				xDelete<IssmDouble>(transparam);
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22748)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22749)
+@@ -2199,6 +2199,7 @@
+ 		xDelete<char*>(cost_functions);
+ 	}
+ }
++/*}}}*/
+ void       Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){/*{{{*/
+ 
+ 	/*Intermediary*/
+@@ -2892,7 +2893,7 @@
+ 	IssmDouble dist_gl,dist_cf;
+ 
+ 	inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);
+-	IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id]);
++	IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.;
+ 
+ 	Input* dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
+ 	Input* dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum);  _assert_(dist_cf_input);
+@@ -2935,7 +2936,6 @@
+ 	int        basinid, maxbox, num_basins, numnodes, M;
+ 	IssmDouble gamma_T, overturning_coeff, thickness;
+ 	IssmDouble pressure, T_star,p_coeff, q_coeff;
+-	IssmDouble* boxareas  = NULL;
+ 
+ 	/*Get variables*/
+ 	IssmDouble rhoi       = this->GetMaterialParameter(MaterialsRhoIceEnum);
+@@ -2957,11 +2957,13 @@
+ 	this->parameters->FindParam(&gamma_T,BasalforcingsPicoGammaTEnum);
+ 	this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum);
+ 	this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
+-	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+ 	this->inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
+ 	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 	_assert_(basinid<=num_basins);
+ 
++   IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox);
++	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
++
+ 	IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
+ 	IssmDouble g1               = area_boxi*gamma_T;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22748)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22749)
+@@ -45,9 +45,9 @@
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
+ 	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
+ 	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
+-field_tolerances={1,1,1,1,1,1,1,1,...
+-	   1,1,1,1,1,1,1,1,...
+-	   1,1,1,1,1,1,1,1};
++field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
++	   3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
++	   1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
+ field_values={...
+ 	   (md.results.TransientSolution(1).Base),...
+ 	   (md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22749-22750.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22749-22750.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22749-22750.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22749)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22750)
+@@ -152,10 +152,10 @@
+ 		field=char(field(1:end-1)');
+ 	elseif type==3,
+ 		N=fread(fid,1,'int');
+-		field=transpose(fread(fid,[N M],'double'));
++		field=fread(fid,[M N],'double');
+ 	elseif type==4,
+ 		N=fread(fid,1,'int');
+-		field=transpose(fread(fid,[N M],'int'));
++		field=fread(fid,[M N],'int');
+ 	else
+ 		error(['cannot read data of type ' num2str(type) ]);
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22750-22751.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22750-22751.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22750-22751.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22750)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 22751)
+@@ -152,10 +152,10 @@
+ 		field=char(field(1:end-1)');
+ 	elseif type==3,
+ 		N=fread(fid,1,'int');
+-		field=fread(fid,[M N],'double');
++		field=fread(fid,[N M],'double')';
+ 	elseif type==4,
+ 		N=fread(fid,1,'int');
+-		field=fread(fid,[M N],'int');
++		field=fread(fid,[N M],'int')';
+ 	else
+ 		error(['cannot read data of type ' num2str(type) ]);
+ 	end
Index: /issm/oecreview/Archive/21724-22754/ISSM-22751-22752.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22751-22752.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22751-22752.diff	(revision 22755)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/test/NightlyRun/test470.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test470.m	(revision 22751)
++++ ../trunk-jpl/test/NightlyRun/test470.m	(revision 22752)
+@@ -45,9 +45,9 @@
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','Vx1','Vy1','Pressure1','FloatingiceMeltingrate1',...
+ 	   'Bed2','Surface2','Thickness2','Floatingice2','Vx2','Vy2','Pressure2','FloatingiceMeltingrate2',...
+ 	   'Bed3','Surface3','Thickness3','Floatingice3','Vx3','Vy3','Pressure3','FloatingiceMeltingrate3'};
+-field_tolerances={2e-11,5e-12,2e-11,1e-11,5e-10,1e-08,1e-13,1e-13,...
+-	   3e-11,3e-11,9e-10,7e-11,1e-09,5e-08,1e-10,1e-13,...
+-	   1e-10,3e-11,1e-10,7e-11,1e-09,5e-08,1e-10,1e-13};
++field_tolerances={7e-09,8e-09,8e-09,7e-09,6e-08,7e-08,6e-09,8e-10,...
++	   7e-09,8e-09,8e-09,7e-09,6e-08,7e-08,6e-09,8e-10,...
++	   7e-09,8e-09,8e-09,7e-09,6e-08,7e-08,6e-09,8e-10};
+ field_values={...
+ 	   (md.results.TransientSolution(1).Base),...
+ 	   (md.results.TransientSolution(1).Surface),...
Index: /issm/oecreview/Archive/21724-22754/ISSM-22752-22753.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22752-22753.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22752-22753.diff	(revision 22755)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22752)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 22753)
+@@ -9,11 +9,8 @@
+ #include "../ModelProcessorx.h"
+ 
+ 
+-//#if !defined(_HAVE_ADOLC_)
++#if !defined(_HAVE_ADOLC_)
+ void	UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
+-	bool isautodiff; 
+-	iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff");
+-	if(!isautodiff){
+ 	/*Intermediary*/
+ 	bool       control_analysis;
+ 	int        control,cost_function,domaintype;
+@@ -130,10 +127,8 @@
+ 	for(int i=0;i<num_controls;i++) xDelete<char>(controls[i]);
+ 	xDelete<char*>(controls);
+ }
+-//}
+-//#else 
+-//void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
+-else{
++#else 
++void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
+ 
+ 	/*Intermediaries*/
+ 	int				num_independent_objects,M,N,M_par,N_par;
+@@ -233,5 +228,4 @@
+ 
+ 	return;
+ }
+-}
+-//#endif
++#endif
Index: /issm/oecreview/Archive/21724-22754/ISSM-22753-22754.diff
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-22753-22754.diff	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-22753-22754.diff	(revision 22755)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.py	(revision 22753)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.py	(revision 22754)
+@@ -124,16 +124,6 @@
+ 
+ 	##plug onto the model
+ 	##NB: Matlab sorts the eigen value in increasing order, we want the reverse
+-	stress=results()
+-	stress.xx=tau_xx
+-	stress.yy=tau_yy
+-	stress.xy=tau_xy
+-	stress.principalvalue1=valuesstress[:,0]
+-	stress.principalaxis1=directionsstress[:,0:2]
+-	stress.principalvalue2=valuesstress[:,1]
+-	stress.principalaxis2=directionsstress[:,2:4]
+-	stress.effectivevalue=1./np.sqrt(2.)*np.sqrt(stress.xx**2+stress.yy**2+2.*stress.xy**2)
+-	md.results.stress=stress
+ 	
+ 	strainrate=results()
+ 	strainrate.xx=ux*md.constants.yts #strain rate in 1/a instead of 1/s
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 22753)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 22754)
+@@ -110,18 +110,6 @@
+ 
+ %plug onto the model
+ %NB: Matlab sorts the eigen value in increasing order, we want the reverse
+-%NOTE: all stresses below are deviatoric
+-stress=struct('xx',[],'yy',[],'xy',[],'principalvalue1',[],'principalaxis1',[],'principalvalue2',[],'principalaxis2',[],'effectivevalue',[]);
+-stress.xx=tau_xx;
+-stress.yy=tau_yy;
+-stress.xy=tau_xy;
+-stress.principalvalue1=valuesstress(:,1);
+-stress.principalaxis1=directionsstress(:,1:2);
+-stress.principalvalue2=valuesstress(:,2);
+-stress.principalaxis2=directionsstress(:,3:4);
+-stress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2); % effective shear stress (sqrt(J2))
+-md.results.stress=stress;
+-
+ strainrate=struct('xx',[],'yy',[],'xy',[],'principalvalue1',[],'principalaxis1',[],'principalvalue2',[],'principalaxis2',[],'effectivevalue',[]);
+ strainrate.xx=ux*md.constants.yts; %strain rate in 1/a instead of 1/s
+ strainrate.yy=vy*md.constants.yts; 
Index: /issm/oecreview/Archive/21724-22754/ISSM-DocReview-21724-22754.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/ISSM-DocReview-21724-22754.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/ISSM-DocReview-21724-22754.tex	(revision 22755)
@@ -0,0 +1,67 @@
+\documentclass[]{report}   % list options between brackets
+\usepackage{graphicx}              % list packages between braces
+
+% type user-defined commands here
+
+\begin{document}
+
+\title{JPL EXPORT ADMINISTRATION \\ DOCUMENT REVIEW RECORD}   % type title between braces
+\author{Tom Scavo}         % type author(s) between braces
+\date{October 27, 1995}    % type date between braces
+%\maketitle
+
+
+\begin{center}
+\begin{tabular}{ |c|c| }
+\hline
+JPL EXPORT ADMINISTRATION \\
+\textit{ DOCUMENT REVIEW RECORD} \\
+\hline
+\end{tabular}
+\end{center}
+
+\hfill Log \#: \underline{\input{LogNumber}}
+
+\vspace{1cm}
+\noindent (Note: This form and process do not replace the procedures described in JPL Policy relating to review and approval of proposals and contractual 
+documents. This process is intended to document the review and coordination of requests to ascertain the export control ramifications relating to specific 
+documents. Export Administration signature does not convey authority to export or release the "Exporter of Record" from any export laws or regulations.)\\
+
+\noindent \textbf{Program:} \underline{ISSM: Ice Sheet System Model} \\ \\
+\noindent \textbf{Person Requesting or Initiating Export}: \underline{Dr. Eric Larour}\\ \\
+\noindent \textbf{Date Received}: \underline{\input{Date}}\\ \\
+\noindent \textbf{Document Title/Description}: ISSM changes from revision \input{r1} to revision \input{r2} \\ \\
+\noindent \textbf{Release to:} \underline{http://issm.ess.uci.edu/svn/issm/issm/trunk on ISSM svn repository}\\ \\
+\noindent \textbf{JPL Intranet:} \underline{murdo.jpl.nasa.gov/proj/ice/larour/issm-uci/trunk-jpl}\\ \\
+
+\noindent \textbf{Disposition: 6 } 
+Does not contain export-controlled information. May be released/disclosed as requested subject to 
+Company guidelines on protection of proprietary information (if applicable). \\
+
+\noindent \textbf{Comments:}  see table of changes below. \\ \\
+\noindent \textbf{Reviewed by ISSM Export Transfer Liaison:} Dr. Eric Larour \hfill \textbf{Date:} \input{Date} \\ 
+\includegraphics[scale=1]{signature}
+
+\noindent JPL Export Administration Form TBS – June 29, 2011
+
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+\noindent \textbf{Disposition:} \\
+1:	  Public Domain Information (Ref ITAR Section 120.11) \\
+2:	  Qualifies for ITAR Exemption				 \\
+3:	  Covered by Department of State License/Agreement Number					  \\
+4:	  Covered by Department of Commerce validated license or exception				 \\
+5:	  New License Required \\
+6:	  Does not contain export-controlled information.  May be released/disclosed as requested subject
+   to Company guidelines on protection of proprietary information (if applicable). \\
+7:	 Other (specify)   
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+
+\input{log}
+
+\end{document}
Index: /issm/oecreview/Archive/21724-22754/LogNumber.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/LogNumber.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/LogNumber.tex	(revision 22755)
@@ -0,0 +1,1 @@
+21724-22754
Index: /issm/oecreview/Archive/21724-22754/Makefile
===================================================================
--- /issm/oecreview/Archive/21724-22754/Makefile	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/Makefile	(revision 22755)
@@ -0,0 +1,8 @@
+TARGET=ISSM-DocReview-21724-22754
+
+all: 
+	pdflatex -interaction=errorstopmode -file-line-error -halt-on-error $(TARGET).tex
+	rm -rf *.log *.aux 
+
+clean:
+	rm -rf *.log *.aux
Index: /issm/oecreview/Archive/21724-22754/log.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/log.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/log.tex	(revision 22755)
@@ -0,0 +1,6461 @@
+\noindent \textbf{Change \#1} with diff file ISSM-21724-21725.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/googlemaps.m\\
+Export determination: 6. \\
+Rationale: CHG: added error message output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#2} with diff file ISSM-21725-21726.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/scaleruler.m\\
+Export determination: 6. \\
+Rationale: CHG: put on top text and bar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#3} with diff file ISSM-21728-21729.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/externalpackages/mpich/install-3.0-linux64-static.sh M /issm/trunk-jpl/jenkins/linux64\_ross\_static M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/packagers/macosx/package.sh M /issm/trunk-jpl/packagers/macosx-dakota/package.sh M /issm/trunk-jpl/src M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: merged trunk and trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#4} with diff file ISSM-21730-21731.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/src M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: Block revision 21729 from being merged into trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#5} with diff file ISSM-21731-21732.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: update version number\\
+\vspace{3em}
+
+\noindent \textbf{Change \#6} with diff file ISSM-21736-21737.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_overlay.m\\
+Export determination: 6. \\
+Rationale: CHG: control background to white option.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#7} with diff file ISSM-21737-21738.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_unit.m\\
+Export determination: 6. \\
+Rationale: CHG: option to plot NaN faces in white instead of transparent.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#8} with diff file ISSM-21738-21739.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/misfit.m\\
+Export determination: 6. \\
+Rationale: CHG: introducing new way of computing misfit (local==2) in a discretized way.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#9} with diff file ISSM-21739-21740.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/friction.m M /issm/trunk-jpl/src/m/classes/friction.py M /issm/trunk-jpl/src/m/classes/frictionhydro.m A /issm/trunk-jpl/src/m/classes/frictionhydro.py\\
+Export determination: 6. \\
+Rationale: NEW: adding a friction effective pressure flag\\
+\vspace{3em}
+
+\noindent \textbf{Change \#10} with diff file ISSM-21740-21741.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp\\
+Export determination: 6. \\
+Rationale: NEW: adding a friction effective pressure flag\\
+\vspace{3em}
+
+\noindent \textbf{Change \#11} with diff file ISSM-21741-21742.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: ensure contiguous had to be enabled for the G\_elastic and co arrays because they are quite big.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#12} with diff file ISSM-21742-21743.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: shield ensureContiguous statement.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#13} with diff file ISSM-21743-21744.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/friction.m\\
+Export determination: 6. \\
+Rationale: CHG: removed comments\\
+\vspace{3em}
+
+\noindent \textbf{Change \#14} with diff file ISSM-21744-21745.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: misfit output definitions updated + massconaxpby was not compatible with new enum definitions system.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#15} with diff file ISSM-21745-21746.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/massconaxpby.m\\
+Export determination: 6. \\
+Rationale: CHG: masscon axpby observation enum now a string.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#16} with diff file ISSM-21746-21747.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h\\
+Export determination: 6. \\
+Rationale: CHG: now possible to retrieve without an vector type.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#17} with diff file ISSM-21747-21748.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.h\\
+Export determination: 6. \\
+Rationale: CHG: added element discrete integrtaion.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#18} with diff file ISSM-21748-21749.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: CHG: new method to retrieve interpolation type.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#19} with diff file ISSM-21749-21750.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more verbosing.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#20} with diff file ISSM-21750-21751.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more comments.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#21} with diff file ISSM-21751-21752.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: add F90 compilation.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#22} with diff file ISSM-21752-21753.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp M /issm/trunk-jpl/src/c/cores/sealevelrise\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/slr.m\\
+Export determination: 6. \\
+Rationale: CHG: introduce steric rate in the SLR solution.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#23} with diff file ISSM-21753-21754.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2002.m M /issm/trunk-jpl/test/NightlyRun/test2003.m\\
+Export determination: 6. \\
+Rationale: CHG: new steric rate to take into account.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#24} with diff file ISSM-21755-21756.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/sealevelrise\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: steric rate pattern.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#25} with diff file ISSM-21760-21761.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/sealevelrise\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: wrong set id for the steric rate.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#26} with diff file ISSM-21762-21763.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: NEW: Added Zienkiewicz and Zhu error estimator in the FemModel class for Adaptive Mesh Refinement process. Not totally tested, just keeping the code.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#27} with diff file ISSM-21763-21764.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_unit.py\\
+Export determination: 6. \\
+Rationale: BUG:fixing py plotting when tricontourf does not show extremum values\\
+\vspace{3em}
+
+\noindent \textbf{Change \#28} with diff file ISSM-21764-21765.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/clusters/localpfe.m\\
+Export determination: 6. \\
+Rationale: CHG: new local class to run generic on pleiades cluster.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#29} with diff file ISSM-21765-21766.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/localpfe.m\\
+Export determination: 6. \\
+Rationale: CHG: missing isoceancoupling parameter.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#30} with diff file ISSM-21766-21767.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/waitonlock.m\\
+Export determination: 6. \\
+Rationale: CHG: hack for running local pfe.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#31} with diff file ISSM-21767-21768.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.6-discover.sh M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: update discover for newest build and s1690 accout\\
+\vspace{3em}
+
+\noindent \textbf{Change \#32} with diff file ISSM-21768-21769.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.js M /issm/trunk-jpl/src/m/plot/applyoptions.js M /issm/trunk-jpl/src/m/plot/plot\_manager.js M /issm/trunk-jpl/src/m/plot/plot\_mesh.js M /issm/trunk-jpl/src/m/plot/plot\_overlay.js M /issm/trunk-jpl/src/m/plot/plot\_quiver.js A /issm/trunk-jpl/src/m/plot/plot\_transient\_movie.js M /issm/trunk-jpl/src/m/plot/plot\_transient\_movie.m M /issm/trunk-jpl/src/m/plot/plot\_unit.js M /issm/trunk-jpl/src/m/plot/plotdoc.js M /issm/trunk-jpl/src/m/plot/processdata.js M /issm/trunk-jpl/src/m/plot/webgl.js A /issm/trunk-jpl/src/m/plot/webgl\_node.js\\
+Export determination: 6. \\
+Rationale: CHG: Updating js plot routines.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#33} with diff file ISSM-21769-21770.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/transientrestart.m\\
+Export determination: 6. \\
+Rationale: CHG: optionnaly provide step numer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#34} with diff file ISSM-21770-21771.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: new pfe file for upgrade to sles12\\
+\vspace{3em}
+
+\noindent \textbf{Change \#35} with diff file ISSM-21771-21772.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: Try again with newest moduls for sles12 upgrade\\
+\vspace{3em}
+
+\noindent \textbf{Change \#36} with diff file ISSM-21772-21773.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/timeadaptation.m M /issm/trunk-jpl/src/m/classes/timestepping.js M /issm/trunk-jpl/src/m/classes/timestepping.m M /issm/trunk-jpl/src/m/classes/timestepping.py\\
+Export determination: 6. \\
+Rationale: CHG: working on a new time stepping class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#37} with diff file ISSM-21773-21774.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h\\
+Export determination: 6. \\
+Rationale: CHG: added class to handle constrained adaptive time stepping\\
+\vspace{3em}
+
+\noindent \textbf{Change \#38} with diff file ISSM-21774-21775.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added some checks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#39} with diff file ISSM-21775-21776.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing a problem with uint8\\
+\vspace{3em}
+
+\noindent \textbf{Change \#40} with diff file ISSM-21776-21777.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing Basile's commit\\
+\vspace{3em}
+
+\noindent \textbf{Change \#41} with diff file ISSM-21777-21778.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#42} with diff file ISSM-21778-21779.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#43} with diff file ISSM-21779-21780.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed Viscous Heating output (was crashing because we are not looking for the right nodes) and fixed also memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#44} with diff file ISSM-21780-21781.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/exp/expcoarsen.m M /issm/trunk-jpl/src/m/exp/expread.m M /issm/trunk-jpl/src/m/exp/exptool.m\\
+Export determination: 6. \\
+Rationale: CHG: some exp changes, check on NaNs, change header of expcoarsen for nargin=2, figure copy is a default again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#45} with diff file ISSM-21781-21782.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/shp/shp2exp.m\\
+Export determination: 6. \\
+Rationale: CHG: more flexibiligty\\
+\vspace{3em}
+
+\noindent \textbf{Change \#46} with diff file ISSM-21782-21783.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/kmlgroundoverlay.m\\
+Export determination: 6. \\
+Rationale: CHG allow for kmz\\
+\vspace{3em}
+
+\noindent \textbf{Change \#47} with diff file ISSM-21783-21784.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_overlay.m\\
+Export determination: 6. \\
+Rationale: CHG: more flexible plot\_overlay.m for RGB images\\
+\vspace{3em}
+
+\noindent \textbf{Change \#48} with diff file ISSM-21784-21785.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/googlemaps.m\\
+Export determination: 6. \\
+Rationale: CHG: special case if lat long proj provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#49} with diff file ISSM-21785-21786.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive430.arch A /issm/trunk-jpl/test/NightlyRun/test430.m\\
+Export determination: 6. \\
+Rationale: added grounding line migration test in 2d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#50} with diff file ISSM-21786-21787.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive430.arch M /issm/trunk-jpl/test/Archives/Archive435.arch M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: minor added basal melt field\\
+\vspace{3em}
+
+\noindent \textbf{Change \#51} with diff file ISSM-21787-21788.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp M /issm/trunk-jpl/src/m/classes/model.py D /issm/trunk-jpl/src/m/classes/timeadaptation.m M /issm/trunk-jpl/src/m/classes/timestepping.js M /issm/trunk-jpl/src/m/classes/timestepping.m M /issm/trunk-jpl/src/m/classes/timestepping.py A /issm/trunk-jpl/src/m/classes/timesteppingadaptive.js A /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m (from /issm/trunk-jpl/src/m/classes/timeadaptation.m:21786) A /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py M /issm/trunk-jpl/test/NightlyRun/test226.js M /issm/trunk-jpl/test/NightlyRun/test226.m M /issm/trunk-jpl/test/NightlyRun/test226.py M /issm/trunk-jpl/test/NightlyRun/test227.js M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test227.py M /issm/trunk-jpl/test/NightlyRun/test323.m M /issm/trunk-jpl/test/NightlyRun/test323.py M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test4001.m\\
+Export determination: 6. \\
+Rationale: NEW: created new class for time adaptation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#52} with diff file ISSM-21788-21789.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m\\
+Export determination: 6. \\
+Rationale: CHG: removed arning for ice front missing, it has been more than 2 years now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#53} with diff file ISSM-21789-21790.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#54} with diff file ISSM-21790-21791.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive441.arch A /issm/trunk-jpl/test/Archives/Archive442.arch A /issm/trunk-jpl/test/NightlyRun/test441.m A /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: NEW: additional tests to test melting subelement\\
+\vspace{3em}
+
+\noindent \textbf{Change \#55} with diff file ISSM-21791-21792.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.cpp M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.h M /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/bamg/Triangle.h M /issm/trunk-jpl/src/c/bamg/det.h M /issm/trunk-jpl/src/c/bamg/typedefs.h\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of IcoorX\\
+\vspace{3em}
+
+\noindent \textbf{Change \#56} with diff file ISSM-21792-21793.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no more Icoor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#57} with diff file ISSM-21793-21794.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: missing enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#58} with diff file ISSM-21794-21795.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: NEW: included improved treatment of melting under partially floating elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#59} with diff file ISSM-21795-21796.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: updating tolerances in test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#60} with diff file ISSM-21796-21797.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#61} with diff file ISSM-21797-21798.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: confusion between CG and DG\\
+\vspace{3em}
+
+\noindent \textbf{Change \#62} with diff file ISSM-21798-21799.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: confusion between floating and grounded\\
+\vspace{3em}
+
+\noindent \textbf{Change \#63} with diff file ISSM-21799-21800.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/cores/depthaverage\_core.cpp M /issm/trunk-jpl/src/c/cores/extrudefrombase\_core.cpp M /issm/trunk-jpl/src/c/cores/extrudefromtop\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed huge leak for output\_frequency !=1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#64} with diff file ISSM-21800-21801.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive409.arch M /issm/trunk-jpl/test/Archives/Archive426.arch M /issm/trunk-jpl/test/Archives/Archive427.arch M /issm/trunk-jpl/test/Archives/Archive430.arch M /issm/trunk-jpl/test/Archives/Archive435.arch M /issm/trunk-jpl/test/Archives/Archive439.arch M /issm/trunk-jpl/test/Archives/Archive441.arch M /issm/trunk-jpl/test/Archives/Archive442.arch M /issm/trunk-jpl/test/Archives/Archive505.arch M /issm/trunk-jpl/test/Archives/Archive506.arch M /issm/trunk-jpl/test/Archives/Archive507.arch M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive805.arch M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: updated archives with improved melt calculation under partially floating cells\\
+\vspace{3em}
+
+\noindent \textbf{Change \#65} with diff file ISSM-21801-21802.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: tolerances new tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#66} with diff file ISSM-21802-21803.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/bamg/BamgOpts.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp A /issm/trunk-jpl/src/c/classes/AmrBamg.cpp A /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h M /issm/trunk-jpl/src/m/classes/amr.m A /issm/trunk-jpl/src/m/classes/amrbamg.m M /issm/trunk-jpl/src/m/classes/trans.js M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: CHG: working on bamg amr\\
+\vspace{3em}
+
+\noindent \textbf{Change \#67} with diff file ISSM-21803-21804.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#68} with diff file ISSM-21804-21805.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed amr bamgss\\
+\vspace{3em}
+
+\noindent \textbf{Change \#69} with diff file ISSM-21805-21806.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plotmodel.m\\
+Export determination: 6. \\
+Rationale: CHG: adding Byron's settings to figureposition\\
+\vspace{3em}
+
+\noindent \textbf{Change \#70} with diff file ISSM-21806-21807.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m\\
+Export determination: 6. \\
+Rationale: CHG: added error estimator for thickness, adjuted AMR with NeoPZ. Working with unrefinement and delete element process.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#71} with diff file ISSM-21807-21808.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: updating tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#72} with diff file ISSM-21808-21809.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Massfluxatgate.h A /issm/trunk-jpl/src/c/classes/Regionaloutput.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/masscon.m M /issm/trunk-jpl/src/m/classes/massconaxpby.m M /issm/trunk-jpl/src/m/classes/massfluxatgate.m M /issm/trunk-jpl/src/m/classes/massfluxatgate.py M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/classes/outputdefinition.py A /issm/trunk-jpl/src/m/classes/regionaloutput.m A /issm/trunk-jpl/src/m/classes/regionaloutput.py\\
+Export determination: 6. \\
+Rationale: Add capability for regional output definitions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#73} with diff file ISSM-21809-21810.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/SMBforcing.m M /issm/trunk-jpl/src/m/classes/misfit.m\\
+Export determination: 6. \\
+Rationale: CHG: add an extrude function for misfit output def\\
+\vspace{3em}
+
+\noindent \textbf{Change \#74} with diff file ISSM-21810-21811.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/SMBforcing.m\\
+Export determination: 6. \\
+Rationale: CHG: revert SMBforcing compressed mat back for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#75} with diff file ISSM-21811-21812.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Regionaloutput.h\\
+Export determination: 6. \\
+Rationale: CHG: Add FloatingArea as a regional output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#76} with diff file ISSM-21812-21813.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: done with metric\\
+\vspace{3em}
+
+\noindent \textbf{Change \#77} with diff file ISSM-21813-21814.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.7-aci.sh\\
+Export determination: 6. \\
+Rationale: NEW: added aci installation script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#78} with diff file ISSM-21814-21815.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.7-aci.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixed script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#79} with diff file ISSM-21815-21816.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.7-aci.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixed script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#80} with diff file ISSM-21816-21817.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: check for ifort first for fcc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#81} with diff file ISSM-21817-21818.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: tolerances again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#82} with diff file ISSM-21818-21819.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/clusters/aci.m\\
+Export determination: 6. \\
+Rationale: CHG: added ACI cluster class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#83} with diff file ISSM-21819-21820.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: CHG: add output definitions as options for Responsex\\
+\vspace{3em}
+
+\noindent \textbf{Change \#84} with diff file ISSM-21820-21821.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive426.arch A /issm/trunk-jpl/test/Archives/Archive443.arch A /issm/trunk-jpl/test/Archives/Archive444.arch M /issm/trunk-jpl/test/NightlyRun/test408.m M /issm/trunk-jpl/test/NightlyRun/test426.m A /issm/trunk-jpl/test/NightlyRun/test443.m A /issm/trunk-jpl/test/NightlyRun/test444.m\\
+Export determination: 6. \\
+Rationale: NEW: add testing for regional outputs, test for output frequency > 1, and test extrude/collapse of regional output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#85} with diff file ISSM-21821-21822.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#86} with diff file ISSM-21822-21823.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed leak in amr\\
+\vspace{3em}
+
+\noindent \textbf{Change \#87} with diff file ISSM-21823-21824.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive426.arch M /issm/trunk-jpl/test/Archives/Archive443.arch\\
+Export determination: 6. \\
+Rationale: CHG: fix the archives from last checkin created from branched code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#88} with diff file ISSM-21824-21825.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/exp/contourlevelzero.m M /issm/trunk-jpl/src/m/plot/plot\_contour.m\\
+Export determination: 6. \\
+Rationale: CHG: Enables detection of level 0 on domain edge\\
+\vspace{3em}
+
+\noindent \textbf{Change \#89} with diff file ISSM-21825-21826.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: update the 426 python to include IceMAss\\
+\vspace{3em}
+
+\noindent \textbf{Change \#90} with diff file ISSM-21826-21827.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matestar.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/shared/Elements/EstarComponents.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h\\
+Export determination: 6. \\
+Rationale: BUG: made eps\_eff for viscosity calculation consistent between matice and matestar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#91} with diff file ISSM-21827-21828.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/classes/regionaloutput.py M /issm/trunk-jpl/test/Archives/Archive443.arch M /issm/trunk-jpl/test/NightlyRun/test408.py M /issm/trunk-jpl/test/NightlyRun/test443.m A /issm/trunk-jpl/test/NightlyRun/test443.py\\
+Export determination: 6. \\
+Rationale: CHG: add a python test for 443, regional output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#92} with diff file ISSM-21828-21829.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h M /issm/trunk-jpl/src/m/kml/kmlimagesc.m M /issm/trunk-jpl/src/m/miscellaneous/diagnostics.m M /issm/trunk-jpl/src/m/modules/InterpFromMeshToGrid.m M /issm/trunk-jpl/src/m/modules/InterpFromMeshToGrid.py M /issm/trunk-jpl/src/m/plot/kmlgridded.m M /issm/trunk-jpl/src/m/plot/plot\_googlemaps.m M /issm/trunk-jpl/src/m/plot/plot\_gridded.m M /issm/trunk-jpl/src/m/plot/plot\_overlay.m M /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp M /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h\\
+Export determination: 6. \\
+Rationale: CHG: simplified the arguments of InterpFromMeshToGrid\\
+\vspace{3em}
+
+\noindent \textbf{Change \#93} with diff file ISSM-21829-21830.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix windows build\\
+\vspace{3em}
+
+\noindent \textbf{Change \#94} with diff file ISSM-21830-21831.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#95} with diff file ISSM-21831-21832.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m\\
+Export determination: 6. \\
+Rationale: CHG: add executable to issm call for dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#96} with diff file ISSM-21832-21833.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed destructor of FemModel with amr\\
+\vspace{3em}
+
+\noindent \textbf{Change \#97} with diff file ISSM-21833-21834.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: update tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#98} with diff file ISSM-21834-21835.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed output formatting of python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#99} with diff file ISSM-21835-21836.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test505.py\\
+Export determination: 6. \\
+Rationale: CHG: adjusting tolerances so that they are the same as MATLAB's\\
+\vspace{3em}
+
+\noindent \textbf{Change \#100} with diff file ISSM-21836-21837.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed one isscalar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#101} with diff file ISSM-21837-21838.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/bamg/BamgOpts.cpp M /issm/trunk-jpl/src/c/bamg/BamgOpts.h M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added some checks on Fortran and isivins\\
+\vspace{3em}
+
+\noindent \textbf{Change \#102} with diff file ISSM-21838-21839.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/BamgOpts.cpp M /issm/trunk-jpl/src/c/bamg/BamgOpts.h M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reverting bamg tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#103} with diff file ISSM-21839-21840.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test324.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#104} with diff file ISSM-21840-21841.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: added some checks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#105} with diff file ISSM-21841-21842.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test293.m M /issm/trunk-jpl/test/NightlyRun/test315.m M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test316.m M /issm/trunk-jpl/test/NightlyRun/test316.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#106} with diff file ISSM-21842-21843.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows\\
+Export determination: 6. \\
+Rationale: CHG: removing dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#107} with diff file ISSM-21843-21844.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#108} with diff file ISSM-21844-21845.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix AD:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#109} with diff file ISSM-21845-21846.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD (no need to have a specialization for int*\\
+\vspace{3em}
+
+\noindent \textbf{Change \#110} with diff file ISSM-21846-21847.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD (no need to have a specialization for int*\\
+\vspace{3em}
+
+\noindent \textbf{Change \#111} with diff file ISSM-21847-21848.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#112} with diff file ISSM-21848-21849.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#113} with diff file ISSM-21849-21850.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#114} with diff file ISSM-21850-21851.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#115} with diff file ISSM-21851-21852.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#116} with diff file ISSM-21852-21853.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/clusters/localpfe.m A /issm/trunk-jpl/src/m/solve/solveiceocean.m\\
+Export determination: 6. \\
+Rationale: NEW: starting to implement direct ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#117} with diff file ISSM-21853-21854.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/localpfe.m\\
+Export determination: 6. \\
+Rationale: NEW: number of ocean processors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#118} with diff file ISSM-21854-21855.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#119} with diff file ISSM-21855-21856.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: do not compile BamgAmr if adolc is on\\
+\vspace{3em}
+
+\noindent \textbf{Change \#120} with diff file ISSM-21856-21857.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h\\
+Export determination: 6. \\
+Rationale: CHG: back to double\\
+\vspace{3em}
+
+\noindent \textbf{Change \#121} with diff file ISSM-21857-21858.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: shielding AMR stuff from adolc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#122} with diff file ISSM-21858-21859.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: shielding AMR stuff from adolc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#123} with diff file ISSM-21859-21860.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: fixing ADOLC/AMR compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#124} with diff file ISSM-21860-21861.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: fixing ADOLC/AMR compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#125} with diff file ISSM-21861-21862.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing adolc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#126} with diff file ISSM-21862-21863.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: updated cluster script (ocean runs) for pleiades upgrade\\
+\vspace{3em}
+
+\noindent \textbf{Change \#127} with diff file ISSM-21863-21864.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_ampi\\
+Export determination: 6. \\
+Rationale: CHG: trying one more flag\\
+\vspace{3em}
+
+\noindent \textbf{Change \#128} with diff file ISSM-21864-21865.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/BamgOpts.cpp M /issm/trunk-jpl/src/c/bamg/BamgOpts.h M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp\\
+Export determination: 6. \\
+Rationale: NEW: no more random seed in bamg, no more MaxCornerAngle and geometrical metric\\
+\vspace{3em}
+
+\noindent \textbf{Change \#129} with diff file ISSM-21865-21866.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp M /issm/trunk-jpl/src/c/bamg/BamgVertex.h M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h D /issm/trunk-jpl/src/c/shared/Bamg/BinaryRand.h M /issm/trunk-jpl/src/c/shared/Bamg/shared.h\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of BinaryRand\\
+\vspace{3em}
+
+\noindent \textbf{Change \#130} with diff file ISSM-21866-21867.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixing server for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#131} with diff file ISSM-21867-21868.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.h\\
+Export determination: 6. \\
+Rationale: CHG: no more qualite function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#132} with diff file ISSM-21868-21869.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/ggg2\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#133} with diff file ISSM-21869-21870.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: back to https server\\
+\vspace{3em}
+
+\noindent \textbf{Change \#134} with diff file ISSM-21870-21871.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive119.arch M /issm/trunk-jpl/test/Archives/Archive514.arch M /issm/trunk-jpl/test/Archives/Archive701.arch M /issm/trunk-jpl/test/Archives/Archive702.arch M /issm/trunk-jpl/test/Archives/Archive703.arch\\
+Export determination: 6. \\
+Rationale: CHG: new tests now that bamg has changed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#135} with diff file ISSM-21871-21872.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_caladan M /issm/trunk-jpl/jenkins/linux64\_ross M /issm/trunk-jpl/jenkins/linux64\_ross\_dakota M /issm/trunk-jpl/jenkins/linux64\_ross\_python M /issm/trunk-jpl/jenkins/linux64\_ross\_static M /issm/trunk-jpl/jenkins/linux64\_ross\_test M /issm/trunk-jpl/jenkins/macosx\_pine-island M /issm/trunk-jpl/jenkins/macosx\_pine-island\_dakota\_static\\
+Export determination: 6. \\
+Rationale: CHG: adding more tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#136} with diff file ISSM-21872-21873.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: CHG: better way to depth average + some clean up\\
+\vspace{3em}
+
+\noindent \textbf{Change \#137} with diff file ISSM-21873-21874.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added support for friction law 9\\
+\vspace{3em}
+
+\noindent \textbf{Change \#138} with diff file ISSM-21874-21875.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed coupling param missing for friction 9\\
+\vspace{3em}
+
+\noindent \textbf{Change \#139} with diff file ISSM-21875-21876.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed coupling param missing for friction 9\\
+\vspace{3em}
+
+\noindent \textbf{Change \#140} with diff file ISSM-21876-21877.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/main/issm\_dakota.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cleaned up some memory leaks during copy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#141} with diff file ISSM-21877-21878.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test119.py M /issm/trunk-jpl/test/NightlyRun/test514.m M /issm/trunk-jpl/test/NightlyRun/test514.py\\
+Export determination: 6. \\
+Rationale: CHG: no more geometrical metric\\
+\vspace{3em}
+
+\noindent \textbf{Change \#142} with diff file ISSM-21878-21879.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp\\
+Export determination: 6. \\
+Rationale: BUG: use correct size of array in delete loop\\
+\vspace{3em}
+
+\noindent \textbf{Change \#143} with diff file ISSM-21879-21880.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tol\\
+\vspace{3em}
+
+\noindent \textbf{Change \#144} with diff file ISSM-21880-21881.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test343.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#145} with diff file ISSM-21881-21882.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed for old versions of MATLAB\\
+\vspace{3em}
+
+\noindent \textbf{Change \#146} with diff file ISSM-21882-21883.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: forgot to retrieve migration style\\
+\vspace{3em}
+
+\noindent \textbf{Change \#147} with diff file ISSM-21883-21884.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixinf non initialized variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#148} with diff file ISSM-21884-21885.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows\\
+Export determination: 6. \\
+Rationale: CHG: exclude 119 for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#149} with diff file ISSM-21885-21886.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive430.arch M /issm/trunk-jpl/test/Archives/Archive431.arch M /issm/trunk-jpl/test/Archives/Archive441.arch M /issm/trunk-jpl/test/Archives/Archive442.arch M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive805.arch\\
+Export determination: 6. \\
+Rationale: NEW: archives with improved melt param\\
+\vspace{3em}
+
+\noindent \textbf{Change \#150} with diff file ISSM-21886-21887.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: BUG: fixed GetSolutionFromInputs for higher order elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#151} with diff file ISSM-21887-21888.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: minor toleratnces 442\\
+\vspace{3em}
+
+\noindent \textbf{Change \#152} with diff file ISSM-21888-21889.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive435.arch M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: saved archive and relaxed tol\\
+\vspace{3em}
+
+\noindent \textbf{Change \#153} with diff file ISSM-21889-21890.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed potential segmentation fault\\
+\vspace{3em}
+
+\noindent \textbf{Change \#154} with diff file ISSM-21890-21891.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: yet another problem fixed with melting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#155} with diff file ISSM-21891-21892.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: removed printf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#156} with diff file ISSM-21892-21893.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h\\
+Export determination: 6. \\
+Rationale: BUG: fixed subelement migration 2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#157} with diff file ISSM-21893-21894.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive430.arch M /issm/trunk-jpl/test/Archives/Archive435.arch M /issm/trunk-jpl/test/Archives/Archive441.arch M /issm/trunk-jpl/test/Archives/Archive442.arch\\
+Export determination: 6. \\
+Rationale: NEW: Archives improved subelement migration\\
+\vspace{3em}
+
+\noindent \textbf{Change \#158} with diff file ISSM-21894-21895.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp\\
+Export determination: 6. \\
+Rationale: CHG: extrude melt rates to avoid error\\
+\vspace{3em}
+
+\noindent \textbf{Change \#159} with diff file ISSM-21895-21896.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Enables iomodel to read patches\\
+\vspace{3em}
+
+\noindent \textbf{Change \#160} with diff file ISSM-21896-21897.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#161} with diff file ISSM-21897-21898.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h\\
+Export determination: 6. \\
+Rationale: CHG: added Max function for Seg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#162} with diff file ISSM-21898-21899.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h\\
+Export determination: 6. \\
+Rationale: CHG: added Max function for Seg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#163} with diff file ISSM-21899-21900.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to get domain type\\
+\vspace{3em}
+
+\noindent \textbf{Change \#164} with diff file ISSM-21900-21901.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: assert was not at the right position\\
+\vspace{3em}
+
+\noindent \textbf{Change \#165} with diff file ISSM-21901-21902.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerance test435\\
+\vspace{3em}
+
+\noindent \textbf{Change \#166} with diff file ISSM-21902-21903.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive437.arch\\
+Export determination: 6. \\
+Rationale: CHG: minor updated Archive 437 for new thermal interpolation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#167} with diff file ISSM-21903-21904.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#168} with diff file ISSM-21904-21905.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test442.m\\
+Export determination: 6. \\
+Rationale: CHG: added Max function for Seg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#169} with diff file ISSM-21905-21906.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh M /issm/trunk-jpl/externalpackages/scotch/scotch.patch M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/m/partition/partitioner.m\\
+Export determination: 6. \\
+Rationale: CHG: minor updates for scotch package\\
+\vspace{3em}
+
+\noindent \textbf{Change \#170} with diff file ISSM-21906-21907.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.csh\\
+Export determination: 6. \\
+Rationale: CHG: also update for scotch csh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#171} with diff file ISSM-21907-21908.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/scotch/Makefile.inc.mac A /issm/trunk-jpl/externalpackages/scotch/install\_macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: fix scotch compile on macs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#172} with diff file ISSM-21908-21909.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/cores/sealevelrise\_core.cpp M /issm/trunk-jpl/src/c/cores/sealevelrise\_core\_noneustatic.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: extract components of moment of intertia tensor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#173} with diff file ISSM-21909-21910.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test437.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tol\\
+\vspace{3em}
+
+\noindent \textbf{Change \#174} with diff file ISSM-21910-21911.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with double declaration in M1Qn3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#175} with diff file ISSM-21911-21912.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/array/arrayoperations.js M /issm/trunk-jpl/src/m/classes/clusters/generic.js M /issm/trunk-jpl/src/m/plot/applyoptions.js M /issm/trunk-jpl/src/m/plot/plot\_mesh.js M /issm/trunk-jpl/src/m/plot/plot\_overlay.js M /issm/trunk-jpl/src/m/plot/plot\_quiver.js M /issm/trunk-jpl/src/m/plot/plot\_unit.js M /issm/trunk-jpl/src/m/plot/webgl.js M /issm/trunk-jpl/src/m/plot/webgl\_node.js M /issm/trunk-jpl/src/m/solve/WriteData.js\\
+Export determination: 6. \\
+Rationale: CHG: Updating js scripts.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#176} with diff file ISSM-21912-21913.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp M /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed M1qn3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#177} with diff file ISSM-21913-21914.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#178} with diff file ISSM-21914-21915.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: minor pfe ocean build\\
+\vspace{3em}
+
+\noindent \textbf{Change \#179} with diff file ISSM-21915-21916.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp M /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Params/StringParam.cpp M /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp M /issm/trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetx.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cppcheck changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#180} with diff file ISSM-21916-21917.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: FIX: minor else condition missing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#181} with diff file ISSM-21917-21918.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/m/classes/SMBd18opdd.m M /issm/trunk-jpl/src/m/classes/SMBd18opdd.py\\
+Export determination: 6. \\
+Rationale: CHG: add capability for more than one climatology to be passed in\\
+\vspace{3em}
+
+\noindent \textbf{Change \#182} with diff file ISSM-21918-21919.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test436.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#183} with diff file ISSM-21919-21920.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/amrbamg.m M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: NEW: adaptive mesh refinement with Bamg for grounding line and ice front dynamics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#184} with diff file ISSM-21920-21921.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed compilation errors, fmod needs floating points\\
+\vspace{3em}
+
+\noindent \textbf{Change \#185} with diff file ISSM-21921-21922.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test322.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#186} with diff file ISSM-21922-21923.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript M /issm/trunk-jpl/jenkins/windows\\
+Export determination: 6. \\
+Rationale: CHG: install GSL first, and them emstruc truc, and removed some tests from windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#187} with diff file ISSM-21923-21924.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test3019.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#188} with diff file ISSM-21924-21925.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive3015.arch M /issm/trunk-jpl/test/NightlyRun/test3015.m\\
+Export determination: 6. \\
+Rationale: CHG: Updating archives for test3015\\
+\vspace{3em}
+
+\noindent \textbf{Change \#189} with diff file ISSM-21925-21926.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3015.py\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#190} with diff file ISSM-21926-21927.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/emscripten/install.sh M /issm/trunk-jpl/jenkins/jenkins.sh M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Addressing JS compilation issues.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#191} with diff file ISSM-21927-21928.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive444.arch M /issm/trunk-jpl/test/NightlyRun/test444.m\\
+Export determination: 6. \\
+Rationale: add tests for regional dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#192} with diff file ISSM-21928-21929.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/emscripten/install.sh M /issm/trunk-jpl/externalpackages/gsl/install-javascript.sh M /issm/trunk-jpl/externalpackages/triangle/install-javascript.sh\\
+Export determination: 6. \\
+Rationale: CHG: Explicitly sourcing emscripten for gsl and triangle before compilation.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#193} with diff file ISSM-21929-21930.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: Sourcing emscripten envvars during jeknins JS compilation.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#194} with diff file ISSM-21930-21931.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/amrbamg.m\\
+Export determination: 6. \\
+Rationale: CHG: added gradation option to the adaptive mesh refinement with bamg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#195} with diff file ISSM-21931-21932.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h D /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp D /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/bamg/GeomEdge.cpp M /issm/trunk-jpl/src/c/bamg/GeomEdge.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h D /issm/trunk-jpl/src/c/cores/meshdeformation\_core.cpp M /issm/trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp M /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.h\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#196} with diff file ISSM-21932-21933.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#197} with diff file ISSM-21933-21934.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_scatter.m\\
+Export determination: 6. \\
+Rationale: CHG: use plot instead of plot3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#198} with diff file ISSM-21934-21935.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m\\
+Export determination: 6. \\
+Rationale: CHG: allow valgrind on mac for issm\_dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#199} with diff file ISSM-21935-21936.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/friction.m M /issm/trunk-jpl/src/m/classes/timestepping.m\\
+Export determination: 6. \\
+Rationale: CHG: allow to change friction and timestepping\\
+\vspace{3em}
+
+\noindent \textbf{Change \#200} with diff file ISSM-21936-21937.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#201} with diff file ISSM-21937-21938.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive444.arch M /issm/trunk-jpl/test/NightlyRun/test444.m\\
+Export determination: 6. \\
+Rationale: CHG: update number of partitions so that mac is identical to linux\\
+\vspace{3em}
+
+\noindent \textbf{Change \#202} with diff file ISSM-21938-21939.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test224.js M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test224.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#203} with diff file ISSM-21939-21940.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/slr.m\\
+Export determination: 6. \\
+Rationale: CHG: yts problem resolved for deltathickness time series\\
+\vspace{3em}
+
+\noindent \textbf{Change \#204} with diff file ISSM-21940-21941.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_se\\
+Export determination: 6. \\
+Rationale: CHG: run on 1 cpu only\\
+\vspace{3em}
+
+\noindent \textbf{Change \#205} with diff file ISSM-21941-21942.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/coordsystems/gmtmask.m\\
+Export determination: 6. \\
+Rationale: CHG: file renaming\\
+\vspace{3em}
+
+\noindent \textbf{Change \#206} with diff file ISSM-21942-21943.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/coordsystems/gmtmask.m\\
+Export determination: 6. \\
+Rationale: CHG: further renaming of the txt files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#207} with diff file ISSM-21943-21944.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2002.py\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#208} with diff file ISSM-21944-21945.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/javascript/karma/index.html M /issm/trunk-jpl/jenkins/javascript/karma/karma.conf.js D /issm/trunk-jpl/jenkins/javascript/karma/lib D /issm/trunk-jpl/jenkins/javascript/karma/node\_modules M /issm/trunk-jpl/jenkins/javascript/karma/scripts/runscript.js D /issm/trunk-jpl/jenkins/javascript/karma/spec\\
+Export determination: 6. \\
+Rationale: CHG: Updating javascript testing files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#209} with diff file ISSM-21945-21946.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am M /issm/trunk-jpl/src/m/classes/friction.js M /issm/trunk-jpl/src/m/classes/model.js M /issm/trunk-jpl/src/m/classes/trans.js\\
+Export determination: 6. \\
+Rationale: CHG: Updating model.js with esa and amr fields. Updating friction.js with coupling and effective\_pressure handling.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#210} with diff file ISSM-21946-21947.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some minor but systematic improvements to slr rotational feedback\\
+\vspace{3em}
+
+\noindent \textbf{Change \#211} with diff file ISSM-21947-21948.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test2010.m\\
+Export determination: 6. \\
+Rationale: NEW: new test for moment of intertia\\
+\vspace{3em}
+
+\noindent \textbf{Change \#212} with diff file ISSM-21948-21949.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive2010.arch\\
+Export determination: 6. \\
+Rationale: NEW: archiving test2010 results\\
+\vspace{3em}
+
+\noindent \textbf{Change \#213} with diff file ISSM-21949-21950.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/slr.py\\
+Export determination: 6. \\
+Rationale: CHG: steric\_rate defined\\
+\vspace{3em}
+
+\noindent \textbf{Change \#214} with diff file ISSM-21950-21951.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2010.arch\\
+Export determination: 6. \\
+Rationale: CHG: archive updated to resolve mac vs linux issue with gmsh mesh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#215} with diff file ISSM-21951-21952.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#216} with diff file ISSM-21952-21953.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp A /issm/trunk-jpl/test/Archives/Archive462.arch A /issm/trunk-jpl/test/Archives/Archive463.arch A /issm/trunk-jpl/test/Archives/Archive464.arch A /issm/trunk-jpl/test/Archives/Archive465.arch A /issm/trunk-jpl/test/NightlyRun/test462.m A /issm/trunk-jpl/test/NightlyRun/test463.m A /issm/trunk-jpl/test/NightlyRun/test464.m A /issm/trunk-jpl/test/NightlyRun/test465.m\\
+Export determination: 6. \\
+Rationale: NEW: added test files to check AMR\_Bamg capability\\
+\vspace{3em}
+
+\noindent \textbf{Change \#217} with diff file ISSM-21953-21954.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#218} with diff file ISSM-21954-21955.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: after jenkins upgrade, list of modified files has a different format\\
+\vspace{3em}
+
+\noindent \textbf{Change \#219} with diff file ISSM-21955-21956.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive462.arch M /issm/trunk-jpl/test/Archives/Archive463.arch M /issm/trunk-jpl/test/Archives/Archive464.arch M /issm/trunk-jpl/test/Archives/Archive465.arch M /issm/trunk-jpl/test/NightlyRun/test462.m M /issm/trunk-jpl/test/NightlyRun/test463.m M /issm/trunk-jpl/test/NightlyRun/test464.m M /issm/trunk-jpl/test/NightlyRun/test465.m\\
+Export determination: 6. \\
+Rationale: CHG: changed final time to compare the tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#220} with diff file ISSM-21956-21957.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive462.arch M /issm/trunk-jpl/test/Archives/Archive464.arch M /issm/trunk-jpl/test/NightlyRun/test463.m M /issm/trunk-jpl/test/NightlyRun/test465.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances and saved archive (Thiago does not know yet why his archives are different)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#221} with diff file ISSM-21957-21958.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m M /issm/trunk-jpl/test/NightlyRun/test220.js M /issm/trunk-jpl/test/NightlyRun/test220.m\\
+Export determination: 6. \\
+Rationale: CHG: silencing some verbose\\
+\vspace{3em}
+
+\noindent \textbf{Change \#222} with diff file ISSM-21958-21959.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/processdata.m M /issm/trunk-jpl/src/m/plot/processmesh.m\\
+Export determination: 6. \\
+Rationale: CHG: enable plot for amr\\
+\vspace{3em}
+
+\noindent \textbf{Change \#223} with diff file ISSM-21959-21960.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows M /issm/trunk-jpl/test/NightlyRun/test227.js M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test227.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances and exclude AMR tests from windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#224} with diff file ISSM-21960-21961.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_static\\
+Export determination: 6. \\
+Rationale: CHG: missing mpifort library\\
+\vspace{3em}
+
+\noindent \textbf{Change \#225} with diff file ISSM-21962-21963.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/regionaloutput.m\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#226} with diff file ISSM-21963-21964.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/emscripten/install.sh M /issm/trunk-jpl/externalpackages/gsl/install-javascript.sh M /issm/trunk-jpl/externalpackages/triangle/install-javascript.sh\\
+Export determination: 6. \\
+Rationale: CHG: Updating emscripten install directory to avoid reinstallation on jenkins build. Fixing gsl JS unesolved symbols during linking with --disable-shared option.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#227} with diff file ISSM-21964-21965.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW:adding a bypass for unconfined scheme (transitory for nondev use\\
+\vspace{3em}
+
+\noindent \textbf{Change \#228} with diff file ISSM-21965-21966.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test301.py M /issm/trunk-jpl/test/NightlyRun/test330.m M /issm/trunk-jpl/test/NightlyRun/test330.py\\
+Export determination: 6. \\
+Rationale: NEW:adding a bypass for unconfined scheme (transitory for nondev use\\
+\vspace{3em}
+
+\noindent \textbf{Change \#229} with diff file ISSM-21966-21967.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/hydrologydc.m M /issm/trunk-jpl/src/m/classes/hydrologydc.py\\
+Export determination: 6. \\
+Rationale: NEW:adding a bypass for unconfined scheme (transitory for nondev use)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#230} with diff file ISSM-21967-21968.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: update discover cluster for newest run constraints\\
+\vspace{3em}
+
+\noindent \textbf{Change \#231} with diff file ISSM-21968-21969.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/code/packages.conf\\
+Export determination: 6. \\
+Rationale: BUG: missing file for MITgcm NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#232} with diff file ISSM-21969-21970.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4001.m\\
+Export determination: 6. \\
+Rationale: BUG: fixed ice ocean test (where to compile the MITgcm)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#233} with diff file ISSM-21970-21971.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive4001.arch\\
+Export determination: 6. \\
+Rationale: CHG: updated ice/ocean archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#234} with diff file ISSM-21974-21975.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup\\
+\vspace{3em}
+
+\noindent \textbf{Change \#235} with diff file ISSM-21975-21976.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh R /issm/trunk-jpl/jenkins/linux64\_ross\_javascript (from /issm/trunk-jpl/jenkins/linux64\_ross\_javascript:21974)\\
+Export determination: 6. \\
+Rationale: CHG: Fixing emscripten install path in jenkins.sh. Removing optimizations from lin\_ross\_javascript for now.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#236} with diff file ISSM-21976-21977.diff: \\
+Function name: \\
+R /issm/trunk-jpl/externalpackages/gsl/install-javascript.sh (from /issm/trunk-jpl/externalpackages/gsl/install-javascript.sh:21974) M /issm/trunk-jpl/externalpackages/triangle/install-javascript.sh\\
+Export determination: 6. \\
+Rationale: CHG: Explicit compiler declaration for triangle JS installs.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#237} with diff file ISSM-21977-21978.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding necessary enums for the LOVE core.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#238} with diff file ISSM-21978-21979.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed step numbering in transient\_core (needed to use ceil rather than floor)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#239} with diff file ISSM-21979-21980.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m\\
+Export determination: 6. \\
+Rationale: CHG: love solution check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#240} with diff file ISSM-21980-21981.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/geometry.m\\
+Export determination: 6. \\
+Rationale: CHG: love solution check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#241} with diff file ISSM-21981-21982.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: CHG: new nightly test2084, not hooked up yet.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#242} with diff file ISSM-21982-21983.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/analyses.m4\\
+Export determination: 6. \\
+Rationale: CHG:added love solution hookup.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#243} with diff file ISSM-21983-21984.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: return if not ice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#244} with diff file ISSM-21984-21985.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/cython/install-26.sh\\
+Export determination: 6. \\
+Rationale: CHG: new 26 installer.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#245} with diff file ISSM-21985-21986.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: CHG: test 2084 deleted for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#246} with diff file ISSM-21986-21987.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-stallo.sh\\
+Export determination: 6. \\
+Rationale: NEW:Stallo's configure file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#247} with diff file ISSM-21987-21988.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/clusters/stallo.py\\
+Export determination: 6. \\
+Rationale: NEW:Stallo's cluster file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#248} with diff file ISSM-21988-21989.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/asmoptions.m M /issm/trunk-jpl/src/m/solvers/asmoptions.py M /issm/trunk-jpl/src/m/solvers/iluasmoptions.m M /issm/trunk-jpl/src/m/solvers/iluasmoptions.py M /issm/trunk-jpl/src/m/solvers/jacobiasmoptions.m M /issm/trunk-jpl/src/m/solvers/jacobiasmoptions.py M /issm/trunk-jpl/src/m/solvers/jacobicgoptions.m M /issm/trunk-jpl/src/m/solvers/jacobicgoptions.py M /issm/trunk-jpl/src/m/solvers/soroptions.m M /issm/trunk-jpl/src/m/solvers/soroptions.py\\
+Export determination: 6. \\
+Rationale: CHG: seems like mat\_type should now be mpiaij, otherwise we get weird errors like sevfaults or Must call MatXXXSetPreallocation() or MatSetUp() on argument 1 mat before MatSetValues()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#249} with diff file ISSM-21989-21990.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/fielddisplay.m\\
+Export determination: 6. \\
+Rationale: CHG: allow for 3d/4d matrices\\
+\vspace{3em}
+
+\noindent \textbf{Change \#250} with diff file ISSM-21990-21991.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/iluasmoptions.m M /issm/trunk-jpl/src/m/solvers/iluasmoptions.py\\
+Export determination: 6. \\
+Rationale: CHG: solver for windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#251} with diff file ISSM-21991-21992.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/googlemaps.m\\
+Export determination: 6. \\
+Rationale: CHG: allow googlemaps to be passed zoom as first argument\\
+\vspace{3em}
+
+\noindent \textbf{Change \#252} with diff file ISSM-21992-21993.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/calvingminthickness.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#253} with diff file ISSM-21993-21994.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/manualcb.m\\
+Export determination: 6. \\
+Rationale: CHG: allow for different font color\\
+\vspace{3em}
+
+\noindent \textbf{Change \#254} with diff file ISSM-21994-21995.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs/config-linux64-hexagon.sh D /issm/trunk-jpl/configs/config-linux64-stallo.sh D /issm/trunk-jpl/configs/config-linux64-vilje.sh\\
+Export determination: 6. \\
+Rationale: NEW:removing UIB's config files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#255} with diff file ISSM-21995-21996.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/levelset.m M /issm/trunk-jpl/src/m/classes/levelset.py\\
+Export determination: 6. \\
+Rationale: CHG: switch to stabilization = 1 by default (more stable)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#256} with diff file ISSM-21996-21997.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs\\
+Export determination: 6. \\
+Rationale: CHG: removed configs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#257} with diff file ISSM-21997-21998.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive804.arch M /issm/trunk-jpl/test/Archives/Archive806.arch M /issm/trunk-jpl/test/Archives/Archive807.arch M /issm/trunk-jpl/test/MITgcm/install.sh M /issm/trunk-jpl/test/NightlyRun/test801.m M /issm/trunk-jpl/test/NightlyRun/test801.py M /issm/trunk-jpl/test/NightlyRun/test805.m M /issm/trunk-jpl/test/NightlyRun/test805.py\\
+Export determination: 6. \\
+Rationale: CHG: updating archives now that default stabilization has changed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#258} with diff file ISSM-21998-21999.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive808.arch\\
+Export determination: 6. \\
+Rationale: CHG: updating archives now that default stabilization has changed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#259} with diff file ISSM-21999-22000.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test808.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#260} with diff file ISSM-22000-22001.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/analyses.m4 M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Options/GenericOption.h M /issm/trunk-jpl/src/c/classes/Options/Options.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h\\
+Export determination: 6. \\
+Rationale: CHG: simplifying options: do not allow for cells and structs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#261} with diff file ISSM-22001-22002.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: no love analysis for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#262} with diff file ISSM-22002-22003.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.discover16.patch A /issm/trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.6-discover.sh\\
+Export determination: 6. \\
+Rationale: CHG: update discover modules for intel16 compiler\\
+\vspace{3em}
+
+\noindent \textbf{Change \#263} with diff file ISSM-22003-22004.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: update discover modules for intel16 compiler\\
+\vspace{3em}
+
+\noindent \textbf{Change \#264} with diff file ISSM-22004-22005.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matestar.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h A /issm/trunk-jpl/src/c/classes/Materials/Matlitho.cpp A /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/Vertices.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/cores.h A /issm/trunk-jpl/src/c/cores/love\_core.cpp A /issm/trunk-jpl/src/c/modules/FourierLoveCorex A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lnb\_param.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90.bak A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/util.f90 M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp A /issm/trunk-jpl/src/m/classes/fourierlove.m A /issm/trunk-jpl/src/m/classes/fourierlove.py M /issm/trunk-jpl/src/m/classes/maskpsl.m M /issm/trunk-jpl/src/m/classes/materials.m A /issm/trunk-jpl/src/m/classes/materials.py M /issm/trunk-jpl/src/m/classes/mesh2d.m M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/classes/mesh3dprisms.m M /issm/trunk-jpl/src/m/classes/mesh3dsurface.m M /issm/trunk-jpl/src/m/classes/mesh3dtetras.m M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py M /issm/trunk-jpl/src/m/solve/marshall.py M /issm/trunk-jpl/src/m/solve/solve.m M /issm/trunk-jpl/src/m/solve/solve.py\\
+Export determination: 6. \\
+Rationale: ADD and CHG: introducing new love solution. This involves a new fourierlove class, a new .love field in the model, new enums, new materials class in particular, which can now dynamically, during the constructor phase, initialize internal structure fields relevant to only 'ice', 'litho', or any other material. The goal is to fade away the m/classes/material classes (matice, maticeenhanced, etc...) in favor of the @materials class, which will be all encompassing. New love\_core core, and new FourierLoveCorex module, where all of the fortran files from Lambert Caron are placed, with all his love solution code. Interfacing is done between C++ and Fortran in this module. Also, rheology\_law now taken out of the parameters, should be in the materials themeselves.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#265} with diff file ISSM-22005-22006.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: no love analysis if no fortran, like gia\\
+\vspace{3em}
+
+\noindent \textbf{Change \#266} with diff file ISSM-22006-22007.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows\\
+Export determination: 6. \\
+Rationale: CHG: do not compile love on windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#267} with diff file ISSM-22007-22008.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added check that fortran is provided if love is on\\
+\vspace{3em}
+
+\noindent \textbf{Change \#268} with diff file ISSM-22008-22009.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90.bak\\
+Export determination: 6. \\
+Rationale: CHG: not needed.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#269} with diff file ISSM-22009-22010.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/gia\_core.cpp M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not call love\_core if \_HAVE\_LOVE\_ is not defined\\
+\vspace{3em}
+
+\noindent \textbf{Change \#270} with diff file ISSM-22010-22011.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matestar.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h\\
+Export determination: 6. \\
+Rationale: CHG: move rheology\_law to matpar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#271} with diff file ISSM-22011-22012.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h\\
+Export determination: 6. \\
+Rationale: BUG: fixing AD, GetMNaterialsParameter returns a double, not an int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#272} with diff file ISSM-22012-22013.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h\\
+Export determination: 6. \\
+Rationale: CHG: GetIntegerMaterialParameter\\
+\vspace{3em}
+
+\noindent \textbf{Change \#273} with diff file ISSM-22013-22014.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#274} with diff file ISSM-22014-22015.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: BUG: calling wrong function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#275} with diff file ISSM-22015-22016.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/love\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#276} with diff file ISSM-22016-22017.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h\\
+Export determination: 6. \\
+Rationale: CHG: returning int instead of double\\
+\vspace{3em}
+
+\noindent \textbf{Change \#277} with diff file ISSM-22017-22018.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_ad\\
+Export determination: 6. \\
+Rationale: CHG: no Love compilation for AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#278} with diff file ISSM-22019-22020.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing md.love issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#279} with diff file ISSM-22021-22022.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh D /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh A /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx.sh (from /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh:22020) D /issm/trunk-jpl/externalpackages/python/install-3.2.2-macosx-lion.sh A /issm/trunk-jpl/externalpackages/python/install-3.2.2-macosx.sh (from /issm/trunk-jpl/externalpackages/python/install-3.2.2-macosx-lion.sh:22020)\\
+Export determination: 6. \\
+Rationale: CHG: merging several macos versions that are similar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#280} with diff file ISSM-22022-22023.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/boost/install-1.55-linux.sh D /issm/trunk-jpl/externalpackages/boost/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: removed set -eu because some targets do fail and it is not a problem\\
+\vspace{3em}
+
+\noindent \textbf{Change \#281} with diff file ISSM-22024-22025.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/autotools/install-win.sh\\
+Export determination: 6. \\
+Rationale: CHG: Adding m4 to install-win.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#282} with diff file ISSM-22025-22026.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: exclude boost from checks because it might fail even though most of it is built\\
+\vspace{3em}
+
+\noindent \textbf{Change \#283} with diff file ISSM-22026-22027.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/autotools/install-win.sh\\
+Export determination: 6. \\
+Rationale: CHG: Reverting change to m4 installation on windows for now due to issues on jenkins.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#284} with diff file ISSM-22027-22028.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/autotools/install-win.sh\\
+Export determination: 6. \\
+Rationale: CHG: Correcting omitted package in autotool windows install script.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#285} with diff file ISSM-22028-22029.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/autotools/install-win.sh A /issm/trunk-jpl/externalpackages/autotools/patches/ar-lib.patch M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: ADD: ar-lib.patch for windows compilation/linking bug. CHG: Updating autotools/install-win.sh to install m4. Updating jenkins.sh to add windows compilers to path before externalpackages to allow for m4 compilation.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#286} with diff file ISSM-22031-22032.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/autotools/install-win.sh\\
+Export determination: 6. \\
+Rationale: CHG: m4 only installs on cygwin-windows with gcc installed as cygwin package. Removing from install-win.sh for now.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#287} with diff file ISSM-22033-22034.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_caladan M /issm/trunk-jpl/jenkins/linux64\_ross\_se M /issm/trunk-jpl/jenkins/linux64\_ross\_test\\
+Export determination: 6. \\
+Rationale: CHG: changed boost installation script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#288} with diff file ISSM-22035-22036.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90\\
+Export determination: 6. \\
+Rationale: BUG:fixing compilation bugs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#289} with diff file ISSM-22036-22037.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90 M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.f90\\
+Export determination: 6. \\
+Rationale: BUG:replacing -complex- comands by -cmplx- to avoid lib link issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#290} with diff file ISSM-22037-22038.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.py\\
+Export determination: 6. \\
+Rationale: BUG:Fixing colapse issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#291} with diff file ISSM-22039-22040.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp\\
+Export determination: 6. \\
+Rationale: FIX: improved friction coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#292} with diff file ISSM-22040-22041.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/timestepping.m\\
+Export determination: 6. \\
+Rationale: CHG: had to rename love lovefourier\\
+\vspace{3em}
+
+\noindent \textbf{Change \#293} with diff file ISSM-22041-22042.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive408.arch M /issm/trunk-jpl/test/Archives/Archive443.arch\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#294} with diff file ISSM-22042-22043.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive540.arch A /issm/trunk-jpl/test/NightlyRun/test540.m\\
+Export determination: 6. \\
+Rationale: CHG: added new calving test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#295} with diff file ISSM-22043-22044.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: CHG: enabling nodal inputs of size one to be interpreted as constant input\\
+\vspace{3em}
+
+\noindent \textbf{Change \#296} with diff file ISSM-22044-22045.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: sigma max can now be a vector (if necessary)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#297} with diff file ISSM-22045-22046.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/calvingdev.m\\
+Export determination: 6. \\
+Rationale: CHG: allowing 2d fields for calvingdev\\
+\vspace{3em}
+
+\noindent \textbf{Change \#298} with diff file ISSM-22046-22047.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test540.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#299} with diff file ISSM-22047-22048.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#300} with diff file ISSM-22048-22049.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag(Neff) for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#301} with diff file ISSM-22049-22050.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag(Neff) for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#302} with diff file ISSM-22050-22051.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag(Neff) for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#303} with diff file ISSM-22051-22052.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/frictioncoulomb.m\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag(Neff) for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#304} with diff file ISSM-22052-22053.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/frictioncoulomb.py\\
+Export determination: 6. \\
+Rationale: NEW: added CoupledFlag(Neff) for frictionlaw 7, coulomb\\
+\vspace{3em}
+
+\noindent \textbf{Change \#305} with diff file ISSM-22053-22054.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.py\\
+Export determination: 6. \\
+Rationale: BUG: fixinf extrusion in py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#306} with diff file ISSM-22054-22055.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/vilje.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing np\\
+\vspace{3em}
+
+\noindent \textbf{Change \#307} with diff file ISSM-22055-22056.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/oshostname.m\\
+Export determination: 6. \\
+Rationale: NEW: check with java to get oshostname when all other methods fail\\
+\vspace{3em}
+
+\noindent \textbf{Change \#308} with diff file ISSM-22056-22057.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/oshostname.m\\
+Export determination: 6. \\
+Rationale: CHG: better operation ordering\\
+\vspace{3em}
+
+\noindent \textbf{Change \#309} with diff file ISSM-22057-22058.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.py\\
+Export determination: 6. \\
+Rationale: CHG:minor cleanup, indent fix and removing MatlabFuncs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#310} with diff file ISSM-22058-22059.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lnb\_param.f90 D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90 D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.f90 D /issm/trunk-jpl/src/c/modules/FourierLoveCorex/util.f90\\
+Export determination: 6. \\
+Rationale: Fourierlove fixed some single precision functions that were meant to be double\\
+\vspace{3em}
+
+\noindent \textbf{Change \#311} with diff file ISSM-22059-22060.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/Makefile A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lnb\_param.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lnb\_param.mod A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.mod A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.mod A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/util.f90 A /issm/trunk-jpl/src/c/modules/FourierLoveCorex/util.mod\\
+Export determination: 6. \\
+Rationale: Deleted files by mistake in the last commit\\
+\vspace{3em}
+
+\noindent \textbf{Change \#312} with diff file ISSM-22060-22061.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test2084.m A /issm/trunk-jpl/test/NightlyRun/test2084.py\\
+Export determination: 6. \\
+Rationale: Updated test2084 for module Fourierlove\\
+\vspace{3em}
+
+\noindent \textbf{Change \#313} with diff file ISSM-22061-22062.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: Updated test2084 for module Fourierlove\\
+\vspace{3em}
+
+\noindent \textbf{Change \#314} with diff file ISSM-22062-22063.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: CHG: added return statement to line 67 in an attempt to revert change that caused break.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#315} with diff file ISSM-22063-22064.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/test2084.m D /issm/trunk-jpl/test/NightlyRun/test2084.py\\
+Export determination: 6. \\
+Rationale: DEL: Removed test 2084 temporarily. Lambert will recommit once the test succeeds locally.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#316} with diff file ISSM-22064-22065.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/vilje.m\\
+Export determination: 6. \\
+Rationale: CHG: minor edits to cluster file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#317} with diff file ISSM-22065-22066.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/vilje.m\\
+Export determination: 6. \\
+Rationale: CHG: minor edits to cluster file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#318} with diff file ISSM-22066-22067.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: add GEMB input to inputs for dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#319} with diff file ISSM-22067-22068.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript\\
+Export determination: 6. \\
+Rationale: CHG: Disabling Love for JS builds.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#320} with diff file ISSM-22068-22069.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive2084.arch A /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: New test2084 with archive, only matlab for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#321} with diff file ISSM-22069-22070.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/qmu.m M /issm/trunk-jpl/src/m/modules/MeshPartition.m M /issm/trunk-jpl/src/m/partition/partitioner.m M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp\\
+Export determination: 6. \\
+Rationale: CHG: allow dakota to sample element vectors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#322} with diff file ISSM-22070-22071.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive244.arch A /issm/trunk-jpl/test/NightlyRun/test244.m\\
+Export determination: 6. \\
+Rationale: CHG: add test for dakota sampling of GEMB input\\
+\vspace{3em}
+
+\noindent \textbf{Change \#323} with diff file ISSM-22071-22072.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test244.m\\
+Export determination: 6. \\
+Rationale: CHG: update tol for new test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#324} with diff file ISSM-22072-22073.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows\_test\\
+Export determination: 6. \\
+Rationale: CHG: Added test 244 to exclude list for Windows builds.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#325} with diff file ISSM-22073-22074.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/windows M /issm/trunk-jpl/jenkins/windows\_test\\
+Export determination: 6. \\
+Rationale: CHG: Added test 244 to exclude list for Windows builds.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#326} with diff file ISSM-22074-22075.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added P1P2 case\\
+\vspace{3em}
+
+\noindent \textbf{Change \#327} with diff file ISSM-22075-22076.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding P1xP4 element (to be validated)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#328} with diff file ISSM-22076-22077.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Options/OptionUtilities.cpp M /issm/trunk-jpl/src/c/classes/Options/OptionUtilities.h M /issm/trunk-jpl/src/c/classes/Options/Options.h M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h\\
+Export determination: 6. \\
+Rationale: CHG: simplifying Options* interface, not finished yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#329} with diff file ISSM-22077-22078.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp\\
+Export determination: 6. \\
+Rationale: CHG: continuing implementation of P1xP4\\
+\vspace{3em}
+
+\noindent \textbf{Change \#330} with diff file ISSM-22078-22079.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing nodal function derivatives for P1xP4\\
+\vspace{3em}
+
+\noindent \textbf{Change \#331} with diff file ISSM-22079-22080.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: updating field tolerances of test2084\\
+\vspace{3em}
+
+\noindent \textbf{Change \#332} with diff file ISSM-22080-22081.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: added one option to enforce boundary edges\\
+\vspace{3em}
+
+\noindent \textbf{Change \#333} with diff file ISSM-22081-22082.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2084.arch M /issm/trunk-jpl/test/NightlyRun/test2084.m\\
+Export determination: 6. \\
+Rationale: Correcting frequency intervals in test2084 and updating the corresponding archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#334} with diff file ISSM-22096-22097.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/geometry.py M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/classes/materials.py M /issm/trunk-jpl/src/m/classes/mesh2d.py A /issm/trunk-jpl/test/NightlyRun/test2084.py (from /issm/trunk-jpl/test/NightlyRun/test2084.py:22062)\\
+Export determination: 6. \\
+Rationale: NEW: completed test2084.py and modified corresponding py files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#335} with diff file ISSM-22097-22098.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90\\
+Export determination: 6. \\
+Rationale: BUG: Using spaces instead of horizotnal skip characters in love core print formatting in to enable compatibility with Jenkins python test parser.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#336} with diff file ISSM-22098-22099.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am M /issm/trunk-jpl/src/m/array/arrayoperations.js A /issm/trunk-jpl/src/m/classes/fourierlove.js M /issm/trunk-jpl/src/m/classes/inversion.js M /issm/trunk-jpl/src/m/classes/model.js M /issm/trunk-jpl/src/m/classes/qmu.js M /issm/trunk-jpl/src/m/classes/thermal.js M /issm/trunk-jpl/src/m/extrusion/project3d.js\\
+Export determination: 6. \\
+Rationale: BUG: Fixing issues with test102.js extrusion functions. NEW: Adding fourierlove.js. CHG: Updating m/Makefile.am.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#337} with diff file ISSM-22099-22100.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/settings.js\\
+Export determination: 6. \\
+Rationale: BUG: Fixing incorrrect sovler\_residue\_tolerance assignment in settings.js\\
+\vspace{3em}
+
+\noindent \textbf{Change \#338} with diff file ISSM-22100-22101.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/amr.js M /issm/trunk-jpl/src/m/classes/amr.m M /issm/trunk-jpl/src/m/classes/amr.py D /issm/trunk-jpl/src/m/classes/amrbamg.m M /issm/trunk-jpl/test/NightlyRun/test462.m M /issm/trunk-jpl/test/NightlyRun/test463.m M /issm/trunk-jpl/test/NightlyRun/test464.m M /issm/trunk-jpl/test/NightlyRun/test465.m\\
+Export determination: 6. \\
+Rationale: CHG: now, AMR with Bamg is the default; with NeoPZ is an option (amrneopz.m). CHG: updated (minor) test files 462, 463, 464 and 465. CHG: amr with NeoPZ merges fields (grounding line, ice front and error estimators)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#339} with diff file ISSM-22101-22102.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test322.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#340} with diff file ISSM-22102-22103.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch\\
+Export determination: 6. \\
+Rationale: CHG: add example CMake patch to use petsc libs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#341} with diff file ISSM-22103-22104.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/FSanalyticals/fsanalyticals.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#342} with diff file ISSM-22104-22105.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/misfit.py M /issm/trunk-jpl/test/NightlyRun/runme.py A /issm/trunk-jpl/test/NightlyRun/test123.py A /issm/trunk-jpl/test/NightlyRun/test124.py\\
+Export determination: 6. \\
+Rationale: NEW: Added misfit.py, translated from misfit.m. Added test123.py, translated from test123.m. Added test124.py, translated from test124.m. Fixed future-warning from runme.py regarding comparison to None\\
+\vspace{3em}
+
+\noindent \textbf{Change \#343} with diff file ISSM-22105-22106.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matestar.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h\\
+Export determination: 6. \\
+Rationale: CHG: passing gauss as argument so that B is not necessarily averaged\\
+\vspace{3em}
+
+\noindent \textbf{Change \#344} with diff file ISSM-22107-22108.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/slr.js M /issm/trunk-jpl/src/m/classes/slr.m M /issm/trunk-jpl/src/m/classes/slr.py\\
+Export determination: 6. \\
+Rationale: CHG: reltol set as default criterion for RSL convergence\\
+\vspace{3em}
+
+\noindent \textbf{Change \#345} with diff file ISSM-22109-22110.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2002.m\\
+Export determination: 6. \\
+Rationale: CHG: max number of iteration reverted back to the original value\\
+\vspace{3em}
+
+\noindent \textbf{Change \#346} with diff file ISSM-22110-22111.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2002.py\\
+Export determination: 6. \\
+Rationale: CHG: max number of iteration reverted back to the original value\\
+\vspace{3em}
+
+\noindent \textbf{Change \#347} with diff file ISSM-22116-22117.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed threshold limit for the error estimators (AMR with Bamg)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#348} with diff file ISSM-22117-22118.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/dakota/configs/6.2/BuildDakotaCustom.cmake.patch\\
+Export determination: 6. \\
+Rationale: CHG: add MPI EXTRA LIBRARY def for custom patch\\
+\vspace{3em}
+
+\noindent \textbf{Change \#349} with diff file ISSM-22122-22123.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/balancethickness.py M /issm/trunk-jpl/src/m/classes/constants.py M /issm/trunk-jpl/src/m/classes/esa.py M /issm/trunk-jpl/src/m/classes/fourierlove.py M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/classes/slr.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed several bugs: incorrect output streams, high error rates, and mistranslated lines. Added omega to constants.py from constants.m. Added esa to model.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#350} with diff file ISSM-22123-22124.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no calving is bed>0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#351} with diff file ISSM-22124-22125.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: calving = 0 if grounded above sea level\\
+\vspace{3em}
+
+\noindent \textbf{Change \#352} with diff file ISSM-22125-22126.diff: \\
+Function name: \\
+M /issm/trunk-jpl/examples/UncertaintyQuantification/runme.m\\
+Export determination: 6. \\
+Rationale: CHG: can't plot log with zero values\\
+\vspace{3em}
+
+\noindent \textbf{Change \#353} with diff file ISSM-22126-22127.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive540.arch\\
+Export determination: 6. \\
+Rationale: CHG: updating calving dev test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#354} with diff file ISSM-22127-22128.diff: \\
+Function name: \\
+M /issm/trunk-jpl/examples/Data/Download.sh\\
+Export determination: 6. \\
+Rationale: CHG: update download file for Ant velocities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#355} with diff file ISSM-22128-22129.diff: \\
+Function name: \\
+D /issm/trunk-jpl/examples/Data/Download.sh\\
+Export determination: 6. \\
+Rationale: CHG: do not use script, it does not work 99% of the time, have user follow directions on the website instead\\
+\vspace{3em}
+
+\noindent \textbf{Change \#356} with diff file ISSM-22129-22130.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#357} with diff file ISSM-22130-22131.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmsh/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: Updated install script for gmsh as developers switched to git from svn.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#358} with diff file ISSM-22131-22132.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmsh/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: Fixed install script for gmsh (missing `src`).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#359} with diff file ISSM-22132-22133.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerance for Bed3 in MATLAB-435.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#360} with diff file ISSM-22133-22134.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/coordsystems/gmtmask.py M /issm/trunk-jpl/src/m/parameterization/setmask.py M /issm/trunk-jpl/src/m/solve/WriteData.py M /issm/trunk-jpl/src/m/solve/solve.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed a few bugs present in these files in preparation for 2xxx series tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#361} with diff file ISSM-22134-22135.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test2003.py A /issm/trunk-jpl/test/NightlyRun/test2010.py A /issm/trunk-jpl/test/NightlyRun/test2051.py A /issm/trunk-jpl/test/NightlyRun/test2052.py A /issm/trunk-jpl/test/NightlyRun/test2053.py A /issm/trunk-jpl/test/NightlyRun/test2071.py A /issm/trunk-jpl/test/NightlyRun/test2072.py A /issm/trunk-jpl/test/NightlyRun/test2073.py A /issm/trunk-jpl/test/NightlyRun/test2081.py A /issm/trunk-jpl/test/NightlyRun/test2082.py A /issm/trunk-jpl/test/NightlyRun/test2083.py A /issm/trunk-jpl/test/NightlyRun/test2101.py A /issm/trunk-jpl/test/NightlyRun/test2110.py A /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py A /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py\\
+Export determination: 6. \\
+Rationale: ADD: added missing python 2xxx series tests and relevent parameter files; except 2424 and 2425\\
+\vspace{3em}
+
+\noindent \textbf{Change \#362} with diff file ISSM-22135-22136.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.h\\
+Export determination: 6. \\
+Rationale: CHG: added check for time integration (if time=0, do not integrate)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#363} with diff file ISSM-22136-22137.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/m/classes/linearbasalforcings.m M /issm/trunk-jpl/src/m/consistency/checkfield.m\\
+Export determination: 6. \\
+Rationale: NEW: adding capability to have transient params in linearbasalforcings class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#364} with diff file ISSM-22137-22138.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed misfit issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#365} with diff file ISSM-22138-22139.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/linearbasalforcings.py\\
+Export determination: 6. \\
+Rationale: FIX: fixed marcshalling of linearbasalforcings in python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#366} with diff file ISSM-22141-22142.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.m\\
+Export determination: 6. \\
+Rationale: FIX: fixed checkfield for singletimeseries\\
+\vspace{3em}
+
+\noindent \textbf{Change \#367} with diff file ISSM-22142-22143.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test292.m\\
+Export determination: 6. \\
+Rationale: NEW: varying melt rate in test292\\
+\vspace{3em}
+
+\noindent \textbf{Change \#368} with diff file ISSM-22145-22146.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2002.arch M /issm/trunk-jpl/test/Archives/Archive2003.arch M /issm/trunk-jpl/test/Archives/Archive2010.arch M /issm/trunk-jpl/test/Archives/Archive2101.arch\\
+Export determination: 6. \\
+Rationale: CHG: archives updated to comply with new gmsh mesher\\
+\vspace{3em}
+
+\noindent \textbf{Change \#369} with diff file ISSM-22146-22147.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: FIX: added missing checks on ice presence in coupling routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#370} with diff file ISSM-22147-22148.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/calcbackstress.m\\
+Export determination: 6. \\
+Rationale: BUG\\
+\vspace{3em}
+
+\noindent \textbf{Change \#371} with diff file ISSM-22148-22149.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2101.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed minor indexing bug in test2101 that resulted in failure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#372} with diff file ISSM-22149-22150.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2003.py M /issm/trunk-jpl/test/NightlyRun/test2010.py M /issm/trunk-jpl/test/NightlyRun/test2110.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed bug in python tests 2003 and 2010 resulting in error. Removed extra commented imports in test2110.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#373} with diff file ISSM-22150-22151.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/linearbasalforcings.py M /issm/trunk-jpl/src/m/classes/mesh2d.py M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/classes/settings.py M /issm/trunk-jpl/src/m/consistency/checkfield.py M /issm/trunk-jpl/test/NightlyRun/test292.py\\
+Export determination: 6. \\
+Rationale: CHG: matched changes from m files to py files including test292, checkfield, and linearbasalforcings; and some class files that led to excess differences in m vs py test bin files (mostly a few things that were out of order).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#374} with diff file ISSM-22151-22152.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/geometry/ThicknessCorrection.m\\
+Export determination: 6. \\
+Rationale: DEL: this was a bad piece of code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#375} with diff file ISSM-22152-22153.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/transientrestart.m\\
+Export determination: 6. \\
+Rationale: CHG: by default use last step instead of step 1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#376} with diff file ISSM-22153-22154.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/geometry/VolumeAboveFloatation.m\\
+Export determination: 6. \\
+Rationale: CHG: Added VolumeAboveFloatation.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#377} with diff file ISSM-22154-22155.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh\\
+Export determination: 6. \\
+Rationale: NEW: added install-3.8-linux64.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#378} with diff file ISSM-22158-22159.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive292.arch M /issm/trunk-jpl/test/NightlyRun/test292.m M /issm/trunk-jpl/test/NightlyRun/test292.py\\
+Export determination: 6. \\
+Rationale: CHG: varying time forcing in test292\\
+\vspace{3em}
+
+\noindent \textbf{Change \#379} with diff file ISSM-22173-22174.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/stallo.py M /issm/trunk-jpl/src/m/classes/clusters/vilje.py M /issm/trunk-jpl/src/m/classes/model.py M /issm/trunk-jpl/src/m/geometry/slope.py\\
+Export determination: 6. \\
+Rationale: Slope fix and cluster modifs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#380} with diff file ISSM-22174-22175.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dakota\_method.m\\
+Export determination: 6. \\
+Rationale: NEW adding bayes\_calibration as a method in dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#381} with diff file ISSM-22175-22176.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m\\
+Export determination: 6. \\
+Rationale: NEW adding parameter requirements for bayes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#382} with diff file ISSM-22176-22177.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/qmu/dakota\_in\_write.m M /issm/trunk-jpl/src/m/qmu/rlist\_write.m\\
+Export determination: 6. \\
+Rationale: NEW: making script work for calibration functions and bayes method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#383} with diff file ISSM-22177-22178.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/qmu/calibration\_function.m\\
+Export determination: 6. \\
+Rationale: NEW: Need new class for bayes method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#384} with diff file ISSM-22178-22179.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/cores/adjointbalancethickness2\_core.cpp M /issm/trunk-jpl/src/c/cores/balancethickness2\_core.cpp M /issm/trunk-jpl/src/c/cores/controlvalidation\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: working on balancethickness2 with Jerome, new model, new implementation, new adjoint\\
+\vspace{3em}
+
+\noindent \textbf{Change \#385} with diff file ISSM-22181-22182.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding calving parameterizations (crevasse-depth and height-above-buoyancy laws), minor changes for calvingdev and levermann\\
+\vspace{3em}
+
+\noindent \textbf{Change \#386} with diff file ISSM-22183-22184.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor changes for the crevasse-depth parameterization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#387} with diff file ISSM-22184-22185.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive806.arch\\
+Export determination: 6. \\
+Rationale: CHG: updated archive after change to Levermann calving law\\
+\vspace{3em}
+
+\noindent \textbf{Change \#388} with diff file ISSM-22185-22186.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added degree of channelization as output; CHG: removed lower cap on water pressure to allow negative pressure, turned off geothermal flux and frictional heat in melt rate for SHMIP simulations\\
+\vspace{3em}
+
+\noindent \textbf{Change \#389} with diff file ISSM-22186-22187.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: geothermal flux and frictional heat included in melt rate calculation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#390} with diff file ISSM-22187-22188.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive350.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archive for test 350\\
+\vspace{3em}
+
+\noindent \textbf{Change \#391} with diff file ISSM-22188-22189.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive350.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archive for test 350 (forgot to update ISSM first).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#392} with diff file ISSM-22189-22190.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: add color options for partition plotting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#393} with diff file ISSM-22190-22191.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp M /issm/trunk-jpl/src/c/main/issm\_slr.cpp\\
+Export determination: 6. \\
+Rationale: CHG: needed \#include <stdlib.h> for strtol\\
+\vspace{3em}
+
+\noindent \textbf{Change \#394} with diff file ISSM-22191-22192.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.html\\
+Export determination: 6. \\
+Rationale: CHG: adding plotmodel back to test101.html.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#395} with diff file ISSM-22192-22193.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp D /issm/trunk-jpl/src/m/classes/calvingdev.m A /issm/trunk-jpl/src/m/classes/calvingvonmises.m M /issm/trunk-jpl/test/NightlyRun/test540.m\\
+Export determination: 6. \\
+Rationale: CHG: change Calving Dev to Calving Von Mises\\
+\vspace{3em}
+
+\noindent \textbf{Change \#396} with diff file ISSM-22193-22194.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: updated enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#397} with diff file ISSM-22194-22195.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: CHG: added backward compatibility check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#398} with diff file ISSM-22195-22196.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/oldclasses/calvingdev.m\\
+Export determination: 6. \\
+Rationale: CHG: need the old class in order to run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#399} with diff file ISSM-22196-22197.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: BUG: new enum for calving\\
+\vspace{3em}
+
+\noindent \textbf{Change \#400} with diff file ISSM-22197-22198.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Removed extraneous member initiailization in Element constructor.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#401} with diff file ISSM-22198-22199.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive540.arch M /issm/trunk-jpl/test/NightlyRun/test540.m\\
+Export determination: 6. \\
+Rationale: BUG: fixing instable NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#402} with diff file ISSM-22199-22200.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp A /issm/trunk-jpl/src/m/classes/calvingdev2.m\\
+Export determination: 6. \\
+Rationale: NEW: New CalvingDev for calving of tidewaterglaciers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#403} with diff file ISSM-22200-22201.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h M /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h M /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added inflow constraint as a possible variable for dakota, only working for MC for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#404} with diff file ISSM-22201-22202.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added inflow constraint as a possible variable for dakota, only working for MC for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#405} with diff file ISSM-22202-22203.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: BUG: do not update Constraints every time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#406} with diff file ISSM-22203-22204.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/clusters/fram.py M /issm/trunk-jpl/src/m/classes/clusters/stallo.py\\
+Export determination: 6. \\
+Rationale: adding Fram cluster file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#407} with diff file ISSM-22204-22205.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am A /issm/trunk-jpl/src/m/classes/frictionwaterlayer.py M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: CHG: Adding Nathan's frictionwaterlayer.py and committing a fix for WriteData.py when marshalling yts/timestep fields.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#408} with diff file ISSM-22207-22208.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/calvingdev2.m\\
+Export determination: 6. \\
+Rationale: CHG: prescribe sigma\_max\_floating as time series\\
+\vspace{3em}
+
+\noindent \textbf{Change \#409} with diff file ISSM-22210-22211.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: added subdomains\\
+\vspace{3em}
+
+\noindent \textbf{Change \#410} with diff file ISSM-22211-22212.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed degree of channelization to be ratio of opening by melt to total opening by sliding and melt\\
+\vspace{3em}
+
+\noindent \textbf{Change \#411} with diff file ISSM-22212-22213.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: NEW: added holes and subdomains options, provided as extra .exp files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#412} with diff file ISSM-22213-22214.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#413} with diff file ISSM-22214-22215.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing NR 514\\
+\vspace{3em}
+
+\noindent \textbf{Change \#414} with diff file ISSM-22215-22216.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/test/Archives/Archive514.arch M /issm/trunk-jpl/test/NightlyRun/test514.m\\
+Export determination: 6. \\
+Rationale: CHG: make sure domain has the right reference number and now save x instead of only y\\
+\vspace{3em}
+
+\noindent \textbf{Change \#415} with diff file ISSM-22216-22217.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/test/NightlyRun/test514.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#416} with diff file ISSM-22236-22237.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG:Change in the initialization of epl head\\
+\vspace{3em}
+
+\noindent \textbf{Change \#417} with diff file ISSM-22237-22238.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use P0 before\\
+\vspace{3em}
+
+\noindent \textbf{Change \#418} with diff file ISSM-22238-22239.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: EW and EI must evolve layers like other variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#419} with diff file ISSM-22239-22240.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp\\
+Export determination: 6. \\
+Rationale: CHG: clean up some GEMB deletes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#420} with diff file ISSM-22240-22241.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: fix time limit for discover debug queue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#421} with diff file ISSM-22241-22242.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/m/classes/amr.js M /issm/trunk-jpl/src/m/classes/amr.m M /issm/trunk-jpl/src/m/classes/amr.py M /issm/trunk-jpl/src/m/contrib/tsantos/AMRexportVTK.m M /issm/trunk-jpl/src/m/contrib/tsantos/mismip/gl\_position.m M /issm/trunk-jpl/src/m/contrib/tsantos/mismip/ice\_evolution.m M /issm/trunk-jpl/src/m/contrib/tsantos/remesh.m\\
+Export determination: 6. \\
+Rationale: CHG: Updated AMR methods for NeoPZ and Bamg, insert option to restart a simulation using error estimators and Bamg, deleted some non-used methods.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#422} with diff file ISSM-22242-22243.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/amrneopz.m\\
+Export determination: 6. \\
+Rationale: CHG: Class for AMR with NeoPZ\\
+\vspace{3em}
+
+\noindent \textbf{Change \#423} with diff file ISSM-22243-22244.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: do not call femmodel->ReMesh() with Automatic Differentiation (AD)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#424} with diff file ISSM-22249-22250.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h M /issm/trunk-jpl/test/Archives/Archive243.arch M /issm/trunk-jpl/test/Archives/Archive244.arch M /issm/trunk-jpl/test/NightlyRun/test243.m\\
+Export determination: 6. \\
+Rationale: CHG: update Gemb code to use tolerances on all absolute comparisons, make stricter archive tolerances, Smb output is now in m/yr ice so that it can be run with issm mass transport on\\
+\vspace{3em}
+
+\noindent \textbf{Change \#425} with diff file ISSM-22250-22251.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test244.m\\
+Export determination: 6. \\
+Rationale: CHG: we can now tighten the dakota GEMB requirements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#426} with diff file ISSM-22251-22252.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h\\
+Export determination: 6. \\
+Rationale: BUG: 'long to int' conversions should be avoid (src/c/bamg/Mesh.cpp, RandomNumber usage)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#427} with diff file ISSM-22252-22253.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/modules/BamgConvertMeshx/BamgConvertMeshx.cpp M /issm/trunk-jpl/src/c/modules/BamgTriangulatex/BamgTriangulatex.cpp M /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: setting bamgopts->verbose in some Mesh.cpp methods, fixing bad 'int' variable (number too big to be int, changed to long).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#428} with diff file ISSM-22253-22254.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding verbose in src/c/bamg/Mesh.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#429} with diff file ISSM-22254-22255.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3103.m\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerance for StressTensoryz.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#430} with diff file ISSM-22255-22256.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3103.m\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerance for StressTensoryz.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#431} with diff file ISSM-22256-22257.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4001.m\\
+Export determination: 6. \\
+Rationale: CHG: minor clean-up of test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#432} with diff file ISSM-22257-22258.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: NEW: ice/ocean test for direct coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#433} with diff file ISSM-22258-22259.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed test4002\\
+\vspace{3em}
+
+\noindent \textbf{Change \#434} with diff file ISSM-22259-22260.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/googlemaps.m\\
+Export determination: 6. \\
+Rationale: CHG: added check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#435} with diff file ISSM-22260-22261.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/exp/functionSignatures.json\\
+Export determination: 6. \\
+Rationale: CHG: added functionSignatures.json file to autocomplete\\
+\vspace{3em}
+
+\noindent \textbf{Change \#436} with diff file ISSM-22261-22262.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/cores/movingfront\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no vz calculation on inactive elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#437} with diff file ISSM-22262-22263.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/movingfront\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix error\\
+\vspace{3em}
+
+\noindent \textbf{Change \#438} with diff file ISSM-22263-22264.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive805.arch\\
+Export determination: 6. \\
+Rationale: CHG: new archives now that vz is not computed where phi>0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#439} with diff file ISSM-22264-22265.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying out a new method to interpolate ice thickness based on diffusion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#440} with diff file ISSM-22265-22266.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: temporary commit, last code with Jerome\\
+\vspace{3em}
+
+\noindent \textbf{Change \#441} with diff file ISSM-22266-22267.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/cores/balancethickness2\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added more cost functions for Jerome and working on a new algorithm for ice thickness mapping\\
+\vspace{3em}
+
+\noindent \textbf{Change \#442} with diff file ISSM-22267-22268.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/SMBgemb.m A /issm/trunk-jpl/src/m/classes/SMBgemb.py M /issm/trunk-jpl/src/m/classes/SMBgradientsela.py M /issm/trunk-jpl/src/m/classes/amr.py M /issm/trunk-jpl/src/m/classes/basalforcings.py A /issm/trunk-jpl/src/m/classes/calvingdev.py A /issm/trunk-jpl/src/m/classes/calvingminthickness.py A /issm/trunk-jpl/src/m/classes/calvingvonmises.py M /issm/trunk-jpl/src/m/classes/constants.py M /issm/trunk-jpl/src/m/classes/flowequation.py A /issm/trunk-jpl/src/m/classes/frictionsommers.py A /issm/trunk-jpl/src/m/classes/hydrologysommers.py A /issm/trunk-jpl/src/m/classes/matenhancedice.py A /issm/trunk-jpl/src/m/classes/matestar.py A /issm/trunk-jpl/src/m/classes/mesh2dvertical.py M /issm/trunk-jpl/src/m/classes/mismipbasalforcings.py A /issm/trunk-jpl/src/m/classes/plumebasalforcings.py M /issm/trunk-jpl/src/m/classes/taoinversion.py M /issm/trunk-jpl/src/m/classes/thermal.py M /issm/trunk-jpl/src/m/classes/transient.py M /issm/trunk-jpl/src/m/consistency/checkfield.py M /issm/trunk-jpl/src/m/dev/devpath.py A /issm/trunk-jpl/src/m/geometry/NowickiProfile.py A /issm/trunk-jpl/src/m/mech/newforcing.py M /issm/trunk-jpl/src/m/mesh/bamg.py A /issm/trunk-jpl/src/m/mesh/bamgflowband.py A /issm/trunk-jpl/src/m/print/printmodel.py M /issm/trunk-jpl/src/m/solve/WriteData.py M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py A /issm/trunk-jpl/test/NightlyRun/test2424.py A /issm/trunk-jpl/test/NightlyRun/test2425.py A /issm/trunk-jpl/test/NightlyRun/test243.py A /issm/trunk-jpl/test/NightlyRun/test260.py A /issm/trunk-jpl/test/NightlyRun/test261.py A /issm/trunk-jpl/test/NightlyRun/test293.py A /issm/trunk-jpl/test/NightlyRun/test340.py A /issm/trunk-jpl/test/NightlyRun/test342.py A /issm/trunk-jpl/test/NightlyRun/test343.py A /issm/trunk-jpl/test/NightlyRun/test344.py A /issm/trunk-jpl/test/NightlyRun/test350.py A /issm/trunk-jpl/test/NightlyRun/test430.py A /issm/trunk-jpl/test/NightlyRun/test435.py A /issm/trunk-jpl/test/NightlyRun/test436.py A /issm/trunk-jpl/test/NightlyRun/test437.py A /issm/trunk-jpl/test/NightlyRun/test438.py A /issm/trunk-jpl/test/NightlyRun/test439.py A /issm/trunk-jpl/test/NightlyRun/test441.py A /issm/trunk-jpl/test/NightlyRun/test442.py A /issm/trunk-jpl/test/NightlyRun/test460.py A /issm/trunk-jpl/test/NightlyRun/test461.py A /issm/trunk-jpl/test/NightlyRun/test462.py A /issm/trunk-jpl/test/NightlyRun/test463.py A /issm/trunk-jpl/test/NightlyRun/test464.py A /issm/trunk-jpl/test/NightlyRun/test465.py A /issm/trunk-jpl/test/NightlyRun/test540.py A /issm/trunk-jpl/test/NightlyRun/test701.py A /issm/trunk-jpl/test/NightlyRun/test703.py A /issm/trunk-jpl/test/NightlyRun/test808.py M /issm/trunk-jpl/test/Par/ISMIPE.par M /issm/trunk-jpl/test/Par/ISMIPE.py M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: ADD: added python versions and dependecies for tests: 243,260,261,293,340,342,343,344,350,430,435,436,437,438,439,441,442,460,461,462,463,464,465,540,701,808,2424,2425\\
+\vspace{3em}
+
+\noindent \textbf{Change \#443} with diff file ISSM-22268-22269.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test293.py M /issm/trunk-jpl/test/NightlyRun/test701.py\\
+Export determination: 6. \\
+Rationale: CHG: left some print statments in by mistake\\
+\vspace{3em}
+
+\noindent \textbf{Change \#444} with diff file ISSM-22269-22270.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Geometry.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#445} with diff file ISSM-22270-22271.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/stallo.py M /issm/trunk-jpl/src/m/classes/hydrologydc.py\\
+Export determination: 6. \\
+Rationale: NEW:updating Stallo cluster to new softwares\\
+\vspace{3em}
+
+\noindent \textbf{Change \#446} with diff file ISSM-22271-22272.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py D /issm/trunk-jpl/test/NightlyRun/test703.py\\
+Export determination: 6. \\
+Rationale: FIX: fixed tests 119 and 514, removed 703 as it is incomplete\\
+\vspace{3em}
+
+\noindent \textbf{Change \#447} with diff file ISSM-22272-22273.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.py M /issm/trunk-jpl/test/NightlyRun/test1108.py A /issm/trunk-jpl/test/NightlyRun/test1109.py A /issm/trunk-jpl/test/NightlyRun/test1110.py\\
+Export determination: 6. \\
+Rationale: ADD: added/fixed python tests 1108, 1109, and 1110. Made a minor change to src/m/solve/WriteData.py to match it with the .m version. If this caused a problem it should have been fixed immediately (see scale option, data[0:-2,:], -2 vs -1).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#448} with diff file ISSM-22273-22274.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: FIX: minor change to WriteData.py broke some stuff. Fixed.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#449} with diff file ISSM-22274-22275.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_caladan M /issm/trunk-jpl/jenkins/linux64\_ross M /issm/trunk-jpl/jenkins/linux64\_ross\_dakota M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript M /issm/trunk-jpl/jenkins/linux64\_ross\_python M /issm/trunk-jpl/jenkins/linux64\_ross\_test M /issm/trunk-jpl/src/m/mesh/bamgflowband.py A /issm/trunk-jpl/test/NightlyRun/test703.py\\
+Export determination: 6. \\
+Rationale: CHG: changed some jenkins scripts to ignore test703.py, added 243, 701, and 435 back to jenkins testing. Fixed bamgflowband.py not working well with bamg.py and breaking either 701 or 514 and 119.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#450} with diff file ISSM-22275-22276.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross M /issm/trunk-jpl/jenkins/linux64\_ross\_dakota M /issm/trunk-jpl/jenkins/linux64\_ross\_python\\
+Export determination: 6. \\
+Rationale: BUG: removed 243 and 701 from jenkins testing until scipy can be installed via jenkins\\
+\vspace{3em}
+
+\noindent \textbf{Change \#451} with diff file ISSM-22276-22277.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/amrneopz.m\\
+Export determination: 6. \\
+Rationale: CHG: delete unused variable in AMR (radius\_level\_max); simplifying some AMR methods.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#452} with diff file ISSM-22277-22278.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Implementing substep framework in hydrologydc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#453} with diff file ISSM-22278-22279.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/hydrologydc.m M /issm/trunk-jpl/src/m/classes/hydrologydc.py\\
+Export determination: 6. \\
+Rationale: NEW: Implementing substep framework in hydrologydc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#454} with diff file ISSM-22279-22280.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG:Fixing leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#455} with diff file ISSM-22280-22281.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG: we should not copy if transient input is empty\\
+\vspace{3em}
+
+\noindent \textbf{Change \#456} with diff file ISSM-22281-22282.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG:implementing some 3D compliance and hydro\_core clean-up\\
+\vspace{3em}
+
+\noindent \textbf{Change \#457} with diff file ISSM-22282-22283.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#458} with diff file ISSM-22283-22284.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/hydrologydc.m M /issm/trunk-jpl/src/m/classes/hydrologydc.py M /issm/trunk-jpl/src/m/classes/hydrologyshreve.js M /issm/trunk-jpl/src/m/classes/hydrologyshreve.m M /issm/trunk-jpl/src/m/classes/hydrologyshreve.py M /issm/trunk-jpl/src/m/classes/hydrologysommers.m M /issm/trunk-jpl/src/m/classes/hydrologysommers.py\\
+Export determination: 6. \\
+Rationale: CHG:shifting the hydrology routines to requested\_output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#459} with diff file ISSM-22284-22285.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG:shifting the hydrology routines to requested\_output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#460} with diff file ISSM-22285-22286.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: NEW : Enum clean up and average field aditions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#461} with diff file ISSM-22286-22287.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/hydrologydc.m M /issm/trunk-jpl/src/m/classes/hydrologydc.py\\
+Export determination: 6. \\
+Rationale: NEW : Enum clean up and average field aditions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#462} with diff file ISSM-22287-22288.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive333.arch M /issm/trunk-jpl/test/NightlyRun/test333.m M /issm/trunk-jpl/test/NightlyRun/test333.py\\
+Export determination: 6. \\
+Rationale: NEW: adding sub-step final result check on 333\\
+\vspace{3em}
+
+\noindent \textbf{Change \#463} with diff file ISSM-22288-22289.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test333.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed resultS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#464} with diff file ISSM-22289-22290.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test333.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed (0) index\\
+\vspace{3em}
+
+\noindent \textbf{Change \#465} with diff file ISSM-22290-22291.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/m/classes/calvingdev2.m\\
+Export determination: 6. \\
+Rationale: ADD: adding frontal melting rate for calvingdev\\
+\vspace{3em}
+
+\noindent \textbf{Change \#466} with diff file ISSM-22291-22292.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_googlemaps.m\\
+Export determination: 6. \\
+Rationale: ADD:adding shaded option for use with googlemaps plotting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#467} with diff file ISSM-22292-22293.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/calvingcrevassedepth.m A /issm/trunk-jpl/src/m/classes/calvinghab.m M /issm/trunk-jpl/src/m/classes/calvinglevermann.m\\
+Export determination: 6. \\
+Rationale: CHG: some changes for calving laws (height above buoyancy, crevasse-depth, levermann)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#468} with diff file ISSM-22293-22294.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/dev/devpath.py\\
+Export determination: 6. \\
+Rationale: BUG: adding nightly run to sys.path which is needed to load runme\\
+\vspace{3em}
+
+\noindent \textbf{Change \#469} with diff file ISSM-22294-22295.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.cpp M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/AmrBamg.cpp M /issm/trunk-jpl/src/c/classes/AmrBamg.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/amr.js M /issm/trunk-jpl/src/m/classes/amr.m M /issm/trunk-jpl/src/m/classes/amr.py M /issm/trunk-jpl/src/m/classes/amrneopz.m M /issm/trunk-jpl/src/m/contrib/tsantos/mismip/ice\_evolution.m\\
+Export determination: 6. \\
+Rationale: CHG: added group threshold for error estimators (AMR)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#470} with diff file ISSM-22295-22296.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/amr.py\\
+Export determination: 6. \\
+Rationale: BUG: Python IndentationError in amr.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#471} with diff file ISSM-22296-22297.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/issmsettings.m M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/qmu/continuous\_design.m D /issm/trunk-jpl/src/m/classes/settings.m\\
+Export determination: 6. \\
+Rationale: BUG: had to rename settings class issmsettings in order to avoid compatibility issue with MATLAB's settings function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#472} with diff file ISSM-22297-22298.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/issmsettings.m\\
+Export determination: 6. \\
+Rationale: BUG: had to convert some issmsettings back to settings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#473} with diff file ISSM-22298-22299.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/issmsettings.js (from /issm/trunk-jpl/src/m/classes/settings.js:22297) A /issm/trunk-jpl/src/m/classes/issmsettings.py (from /issm/trunk-jpl/src/m/classes/settings.py:22297) M /issm/trunk-jpl/src/m/classes/matice.js M /issm/trunk-jpl/src/m/classes/model.js M /issm/trunk-jpl/src/m/classes/model.py D /issm/trunk-jpl/src/m/classes/settings.js D /issm/trunk-jpl/src/m/classes/settings.py\\
+Export determination: 6. \\
+Rationale: CHG: renaming settings issmsettings for consistency with MATLAB\\
+\vspace{3em}
+
+\noindent \textbf{Change \#474} with diff file ISSM-22299-22300.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: NEW: implemeting domain orientation in python bamg (holes and subdomain too)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#475} with diff file ISSM-22300-22301.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: CHG: better error message\\
+\vspace{3em}
+
+\noindent \textbf{Change \#476} with diff file ISSM-22301-22302.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: changed settings to issmsettings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#477} with diff file ISSM-22302-22303.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmbbftpin.m M /issm/trunk-jpl/src/m/os/issmscpin.m\\
+Export determination: 6. \\
+Rationale: CHG: better way of dealing with warnings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#478} with diff file ISSM-22303-22304.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversionvalidation.m M /issm/trunk-jpl/src/m/classes/m1qn3inversion.m\\
+Export determination: 6. \\
+Rationale: CHG: marhsal velobs if provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#479} with diff file ISSM-22304-22305.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/balancethickness.m M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/materials.m\\
+Export determination: 6. \\
+Rationale: CHG: added P1xP4 for HO\\
+\vspace{3em}
+
+\noindent \textbf{Change \#480} with diff file ISSM-22305-22306.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/materials.m\\
+Export determination: 6. \\
+Rationale: BUG: revert to previous version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#481} with diff file ISSM-22306-22307.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp\\
+Export determination: 6. \\
+Rationale: CHG: WARNING This is a significant change, we do not average B, D and E over the element anymore because this makes models with few layers but high degree of interpolation useless\\
+\vspace{3em}
+
+\noindent \textbf{Change \#482} with diff file ISSM-22307-22308.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing SIA now that B is not depth averaged\\
+\vspace{3em}
+
+\noindent \textbf{Change \#483} with diff file ISSM-22308-22309.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not call element->GetMaterialParameter(MaterialsRheologyBEnum) anymore since this is NOT a constant\\
+\vspace{3em}
+
+\noindent \textbf{Change \#484} with diff file ISSM-22309-22310.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive111.arch M /issm/trunk-jpl/test/Archives/Archive121.arch M /issm/trunk-jpl/test/Archives/Archive122.arch M /issm/trunk-jpl/test/Archives/Archive124.arch M /issm/trunk-jpl/test/Archives/Archive207.arch M /issm/trunk-jpl/test/Archives/Archive209.arch M /issm/trunk-jpl/test/Archives/Archive210.arch M /issm/trunk-jpl/test/Archives/Archive211.arch M /issm/trunk-jpl/test/Archives/Archive212.arch M /issm/trunk-jpl/test/Archives/Archive213.arch M /issm/trunk-jpl/test/Archives/Archive214.arch M /issm/trunk-jpl/test/Archives/Archive215.arch M /issm/trunk-jpl/test/Archives/Archive224.arch M /issm/trunk-jpl/test/Archives/Archive225.arch M /issm/trunk-jpl/test/Archives/Archive227.arch M /issm/trunk-jpl/test/Archives/Archive232.arch M /issm/trunk-jpl/test/Archives/Archive233.arch M /issm/trunk-jpl/test/Archives/Archive237.arch M /issm/trunk-jpl/test/Archives/Archive261.arch M /issm/trunk-jpl/test/Archives/Archive272.arch M /issm/trunk-jpl/test/Archives/Archive315.arch M /issm/trunk-jpl/test/Archives/Archive317.arch M /issm/trunk-jpl/test/Archives/Archive318.arch M /issm/trunk-jpl/test/Archives/Archive324.arch M /issm/trunk-jpl/test/Archives/Archive326.arch M /issm/trunk-jpl/test/Archives/Archive327.arch M /issm/trunk-jpl/test/Archives/Archive329.arch M /issm/trunk-jpl/test/Archives/Archive333.arch M /issm/trunk-jpl/test/Archives/Archive335.arch M /issm/trunk-jpl/test/Archives/Archive344.arch M /issm/trunk-jpl/test/Archives/Archive409.arch M /issm/trunk-jpl/test/Archives/Archive410.arch M /issm/trunk-jpl/test/Archives/Archive411.arch M /issm/trunk-jpl/test/Archives/Archive415.arch M /issm/trunk-jpl/test/Archives/Archive416.arch M /issm/trunk-jpl/test/Archives/Archive431.arch M /issm/trunk-jpl/test/Archives/Archive432.arch M /issm/trunk-jpl/test/Archives/Archive436.arch M /issm/trunk-jpl/test/Archives/Archive439.arch M /issm/trunk-jpl/test/Archives/Archive461.arch M /issm/trunk-jpl/test/Archives/Archive505.arch M /issm/trunk-jpl/test/Archives/Archive506.arch M /issm/trunk-jpl/test/Archives/Archive507.arch M /issm/trunk-jpl/test/Archives/Archive508.arch M /issm/trunk-jpl/test/Archives/Archive509.arch M /issm/trunk-jpl/test/Archives/Archive510.arch M /issm/trunk-jpl/test/Archives/Archive511.arch M /issm/trunk-jpl/test/Archives/Archive513.arch M /issm/trunk-jpl/test/Archives/Archive515.arch M /issm/trunk-jpl/test/Archives/Archive540.arch M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive805.arch\\
+Export determination: 6. \\
+Rationale: CHG: new archives now that B is not constant by element\\
+\vspace{3em}
+
+\noindent \textbf{Change \#485} with diff file ISSM-22310-22311.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#486} with diff file ISSM-22311-22312.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#487} with diff file ISSM-22312-22313.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#488} with diff file ISSM-22313-22314.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test436.m M /issm/trunk-jpl/test/NightlyRun/test436.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#489} with diff file ISSM-22314-22315.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#490} with diff file ISSM-22315-22316.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#491} with diff file ISSM-22316-22317.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances (again).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#492} with diff file ISSM-22317-22318.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances (forgot Python).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#493} with diff file ISSM-22318-22319.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test210.js M /issm/trunk-jpl/test/NightlyRun/test210.m M /issm/trunk-jpl/test/NightlyRun/test210.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#494} with diff file ISSM-22319-22320.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/roundmesh.m M /issm/trunk-jpl/test/Archives/Archive1205.arch M /issm/trunk-jpl/test/Archives/Archive423.arch M /issm/trunk-jpl/test/Archives/Archive433.arch\\
+Export determination: 6. \\
+Rationale: CHG: fixed roundmesh, need to use linspace rather than colon operator\\
+\vspace{3em}
+
+\noindent \textbf{Change \#495} with diff file ISSM-22320-22321.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/roundmesh.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed python version of roundmesh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#496} with diff file ISSM-22321-22322.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1205.arch M /issm/trunk-jpl/test/Archives/Archive1206.arch M /issm/trunk-jpl/test/Archives/Archive1207.arch M /issm/trunk-jpl/test/Archives/Archive2110.arch\\
+Export determination: 6. \\
+Rationale: CHG: new archives now that roundmesh has changed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#497} with diff file ISSM-22322-22323.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test318.py\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#498} with diff file ISSM-22323-22324.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mesh2d.js M /issm/trunk-jpl/src/m/classes/mesh2d.m M /issm/trunk-jpl/src/m/classes/mesh2d.py M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/classes/mesh2dvertical.py M /issm/trunk-jpl/src/m/classes/mesh3dprisms.js M /issm/trunk-jpl/src/m/classes/mesh3dprisms.m M /issm/trunk-jpl/src/m/classes/mesh3dprisms.py M /issm/trunk-jpl/src/m/classes/mesh3dtetras.m\\
+Export determination: 6. \\
+Rationale: CHG: adding area correction to compute volumes and areas\\
+\vspace{3em}
+
+\noindent \textbf{Change \#499} with diff file ISSM-22324-22325.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.js M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/model.py\\
+Export determination: 6. \\
+Rationale: CHG: added scale\_factor to extrusion/collapse\\
+\vspace{3em}
+
+\noindent \textbf{Change \#500} with diff file ISSM-22325-22326.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2d.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#501} with diff file ISSM-22326-22327.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding scale factor in volume computation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#502} with diff file ISSM-22327-22328.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2d.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#503} with diff file ISSM-22328-22329.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2d.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed length check on scale\_factor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#504} with diff file ISSM-22329-22330.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2dvertical.py M /issm/trunk-jpl/src/m/classes/mesh3dprisms.py\\
+Export determination: 6. \\
+Rationale: FIX: fixed other python scalefactor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#505} with diff file ISSM-22330-22331.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/m/solve/parseresultsfrombuffer.js M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py\\
+Export determination: 6. \\
+Rationale: NEW: finished implementing scaled correction functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#506} with diff file ISSM-22331-22332.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive504.arch M /issm/trunk-jpl/test/Archives/Archive506.arch M /issm/trunk-jpl/test/NightlyRun/test504.m M /issm/trunk-jpl/test/NightlyRun/test504.py M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test506.py\\
+Export determination: 6. \\
+Rationale: NEW: added test for new scaled routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#507} with diff file ISSM-22332-22333.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive424.arch M /issm/trunk-jpl/test/Archives/Archive426.arch M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: NEW: more test for scaled outputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#508} with diff file ISSM-22333-22334.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test426.m\\
+Export determination: 6. \\
+Rationale: CHG: tolerances matlab test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#509} with diff file ISSM-22334-22335.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: FIX: scaling factor was different in matlab and python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#510} with diff file ISSM-22335-22336.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test504.py M /issm/trunk-jpl/test/NightlyRun/test506.py\\
+Export determination: 6. \\
+Rationale: FIX: minor typos in output requested\\
+\vspace{3em}
+
+\noindent \textbf{Change \#511} with diff file ISSM-22336-22337.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Regionaloutput.h\\
+Export determination: 6. \\
+Rationale: FIX: forgot to add scaling factor in Regionaloutput\\
+\vspace{3em}
+
+\noindent \textbf{Change \#512} with diff file ISSM-22337-22338.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive424.arch M /issm/trunk-jpl/test/Archives/Archive426.arch M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: NEW: change scaling factor to something different than 1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#513} with diff file ISSM-22338-22339.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive443.arch M /issm/trunk-jpl/test/NightlyRun/test443.m M /issm/trunk-jpl/test/NightlyRun/test443.py\\
+Export determination: 6. \\
+Rationale: CHG: added scaling in test443\\
+\vspace{3em}
+
+\noindent \textbf{Change \#514} with diff file ISSM-22339-22340.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/coordsystems/ll2xy.m M /issm/trunk-jpl/src/m/coordsystems/xy2ll.m\\
+Export determination: 6. \\
+Rationale: NEW: added scaling\_factor option for polar stereographic projections in ll2xy and xy2ll\\
+\vspace{3em}
+
+\noindent \textbf{Change \#515} with diff file ISSM-22340-22341.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/TransientParam.cpp\\
+Export determination: 6. \\
+Rationale: FIX: fixed problem with interpolation in transient input\\
+\vspace{3em}
+
+\noindent \textbf{Change \#516} with diff file ISSM-22341-22342.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive292.arch M /issm/trunk-jpl/test/NightlyRun/test292.m M /issm/trunk-jpl/test/NightlyRun/test292.py\\
+Export determination: 6. \\
+Rationale: CHG: changed timestepping interpolation to no interpolation to test TransientParam\\
+\vspace{3em}
+
+\noindent \textbf{Change \#517} with diff file ISSM-22342-22343.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: updated tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#518} with diff file ISSM-22343-22344.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test504.py\\
+Export determination: 6. \\
+Rationale: FIX: missing values\\
+\vspace{3em}
+
+\noindent \textbf{Change \#519} with diff file ISSM-22344-22345.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: updated tolerances test426\\
+\vspace{3em}
+
+\noindent \textbf{Change \#520} with diff file ISSM-22345-22346.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_unit.py\\
+Export determination: 6. \\
+Rationale: BUG: Bug fix in log for plotmodel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#521} with diff file ISSM-22346-22347.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive240.arch\\
+Export determination: 6. \\
+Rationale: CHG: updated archive for fixed TransientParam\\
+\vspace{3em}
+
+\noindent \textbf{Change \#522} with diff file ISSM-22347-22348.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: tolerances test426.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#523} with diff file ISSM-22348-22349.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.py M /issm/trunk-jpl/test/NightlyRun/test442.py\\
+Export determination: 6. \\
+Rationale: CHG: update some python tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#524} with diff file ISSM-22349-22350.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/cores/esa\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/esa.m\\
+Export determination: 6. \\
+Rationale: CHG: ESA2D can now compute north east components of 2D crustal disp vector\\
+\vspace{3em}
+
+\noindent \textbf{Change \#525} with diff file ISSM-22350-22351.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Exp/Ais.exp M /issm/trunk-jpl/test/NightlyRun/test2110.m M /issm/trunk-jpl/test/NightlyRun/test2110.py A /issm/trunk-jpl/test/NightlyRun/test2111.m A /issm/trunk-jpl/test/NightlyRun/test2111.py A /issm/trunk-jpl/test/NightlyRun/test2112.m A /issm/trunk-jpl/test/NightlyRun/test2112.py A /issm/trunk-jpl/test/NightlyRun/test2113.m A /issm/trunk-jpl/test/NightlyRun/test2113.py\\
+Export determination: 6. \\
+Rationale: NEW: nightly for new features of ESA2D to compute north east components of disp vector\\
+\vspace{3em}
+
+\noindent \textbf{Change \#526} with diff file ISSM-22351-22352.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2110.arch A /issm/trunk-jpl/test/Archives/Archive2111.arch A /issm/trunk-jpl/test/Archives/Archive2112.arch A /issm/trunk-jpl/test/Archives/Archive2113.arch\\
+Export determination: 6. \\
+Rationale: NEW: archives for new tests for ESA2D\\
+\vspace{3em}
+
+\noindent \textbf{Change \#527} with diff file ISSM-22352-22353.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/esa.js M /issm/trunk-jpl/src/m/classes/esa.m M /issm/trunk-jpl/src/m/classes/esa.py\\
+Export determination: 6. \\
+Rationale: CHG: md.esa.hemisphere introduced\\
+\vspace{3em}
+
+\noindent \textbf{Change \#528} with diff file ISSM-22353-22354.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/love\_numbers.py\\
+Export determination: 6. \\
+Rationale: CHG: center of frame reference frame implemented\\
+\vspace{3em}
+
+\noindent \textbf{Change \#529} with diff file ISSM-22354-22355.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/love\_numbers.py\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#530} with diff file ISSM-22355-22356.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2110.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed index error in test2110.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#531} with diff file ISSM-22356-22357.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/love\_numbers.py\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#532} with diff file ISSM-22357-22358.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/love\_numbers.py\\
+Export determination: 6. \\
+Rationale: CHG: correct element is replaced for CF\\
+\vspace{3em}
+
+\noindent \textbf{Change \#533} with diff file ISSM-22358-22359.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2113.py\\
+Export determination: 6. \\
+Rationale: CHG: correct load location\\
+\vspace{3em}
+
+\noindent \textbf{Change \#534} with diff file ISSM-22359-22360.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/love\_numbers.py\\
+Export determination: 6. \\
+Rationale: CHG: changed love\_numbers.py to more closely resemble the .m version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#535} with diff file ISSM-22360-22361.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: optimization of some AMR methods (ReMesh,CreateConstraints,InterpolationInputs).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#536} with diff file ISSM-22361-22362.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp M /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h M /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp M /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h\\
+Export determination: 6. \\
+Rationale: CHG: sid is actually id\\
+\vspace{3em}
+
+\noindent \textbf{Change \#537} with diff file ISSM-22362-22363.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with counter, we had several constraints with the same ID\\
+\vspace{3em}
+
+\noindent \textbf{Change \#538} with diff file ISSM-22363-22364.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc/install-withampi.sh\\
+Export determination: 6. \\
+Rationale: CHG: changing installation script for ronne, will see if it breaks anything :(\\
+\vspace{3em}
+
+\noindent \textbf{Change \#539} with diff file ISSM-22364-22365.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing AD's compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#540} with diff file ISSM-22365-22366.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmsh/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: Fix to gmsh installation script.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#541} with diff file ISSM-22366-22367.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmsh/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: Fix to gmsh installation script.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#542} with diff file ISSM-22367-22368.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing options fetching char*\\
+\vspace{3em}
+
+\noindent \textbf{Change \#543} with diff file ISSM-22368-22369.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmsh/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: Modified gmsh install script to explicitly download version 3.0.5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#544} with diff file ISSM-22369-22370.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not check basal conditions in convergence tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#545} with diff file ISSM-22370-22371.diff: \\
+Function name: \\
+A /issm/trunk-jpl/examples/shakti A /issm/trunk-jpl/examples/shakti/moulin.par A /issm/trunk-jpl/examples/shakti/outline.exp A /issm/trunk-jpl/examples/shakti/runme.m\\
+Export determination: 6. \\
+Rationale: CHG: added shakti tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#546} with diff file ISSM-22371-22372.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not do convergence tests by default\\
+\vspace{3em}
+
+\noindent \textbf{Change \#547} with diff file ISSM-22372-22373.diff: \\
+Function name: \\
+M /issm/trunk-jpl/examples/shakti/runme.m M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp A /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_shakti\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h\\
+Export determination: 6. \\
+Rationale: CHG: now have one solution sequence for shakti\\
+\vspace{3em}
+
+\noindent \textbf{Change \#548} with diff file ISSM-22373-22374.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2002.arch M /issm/trunk-jpl/test/Archives/Archive2003.arch M /issm/trunk-jpl/test/Archives/Archive2010.arch M /issm/trunk-jpl/test/Archives/Archive2101.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archives for SE tests after changing to gmsh-3.0.5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#549} with diff file ISSM-22374-22375.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive350.arch\\
+Export determination: 6. \\
+Rationale: CHG: updated archive now that shakti has its own solution sequence\\
+\vspace{3em}
+
+\noindent \textbf{Change \#550} with diff file ISSM-22375-22376.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/cgnoneoptions.m\\
+Export determination: 6. \\
+Rationale: BUG: wrong function name in src/m/solvers/cgnoneoptions.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#551} with diff file ISSM-22376-22377.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: NEW: implementing coupling with MITgcm\\
+\vspace{3em}
+
+\noindent \textbf{Change \#552} with diff file ISSM-22377-22378.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: adding code/eeboot\_minimal.F\\
+\vspace{3em}
+
+\noindent \textbf{Change \#553} with diff file ISSM-22378-22379.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: NEW: using issm\_ocean\\
+\vspace{3em}
+
+\noindent \textbf{Change \#554} with diff file ISSM-22379-22380.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryx.cpp M /issm/trunk-jpl/src/c/modules/DistanceToMaskBoundaryx/DistanceToMaskBoundaryxt.cpp\\
+Export determination: 6. \\
+Rationale: CHG: working on automating distance to GL or IF\\
+\vspace{3em}
+
+\noindent \textbf{Change \#555} with diff file ISSM-22380-22381.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing bug if initial mesh is not generated by bamg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#556} with diff file ISSM-22381-22382.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: This allows MITgcm and ISSM to run in parallel, but does not yet do any communications between the two.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#557} with diff file ISSM-22382-22383.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/love\_core.cpp M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.cpp M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/FourierLoveCorex.h M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/love\_numbers.f90 M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90 M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/model.f90 M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: extracting love numbers at depth\\
+\vspace{3em}
+
+\noindent \textbf{Change \#558} with diff file ISSM-22383-22384.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/fourierlove.js M /issm/trunk-jpl/src/m/classes/fourierlove.m M /issm/trunk-jpl/src/m/classes/fourierlove.py M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m\\
+Export determination: 6. \\
+Rationale: NEW: extracting love numbers at depth\\
+\vspace{3em}
+
+\noindent \textbf{Change \#559} with diff file ISSM-22384-22385.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive2085.arch A /issm/trunk-jpl/test/NightlyRun/test2085.m\\
+Export determination: 6. \\
+Rationale: NEW: test2085 for love numbers at depth\\
+\vspace{3em}
+
+\noindent \textbf{Change \#560} with diff file ISSM-22385-22386.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: better check of misfit input data\\
+\vspace{3em}
+
+\noindent \textbf{Change \#561} with diff file ISSM-22386-22387.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: improved error message\\
+\vspace{3em}
+
+\noindent \textbf{Change \#562} with diff file ISSM-22387-22388.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/numberedcostfunction.m\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#563} with diff file ISSM-22388-22389.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/fourierlove.m\\
+Export determination: 6. \\
+Rationale: CHG: default should be 0 for scalar valued fields\\
+\vspace{3em}
+
+\noindent \textbf{Change \#564} with diff file ISSM-22389-22390.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed intercomm\\
+\vspace{3em}
+
+\noindent \textbf{Change \#565} with diff file ISSM-22390-22391.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: removing rankzeros array and using default values for MPI\_INTERCOMM\_CREATE\\
+\vspace{3em}
+
+\noindent \textbf{Change \#566} with diff file ISSM-22391-22392.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to exchange information\\
+\vspace{3em}
+
+\noindent \textbf{Change \#567} with diff file ISSM-22392-22393.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: adding test exchange\\
+\vspace{3em}
+
+\noindent \textbf{Change \#568} with diff file ISSM-22393-22394.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/code/eedie.F\\
+Export determination: 6. \\
+Rationale: adding MPI\_Barrier to eedie for a clean shutdown\\
+\vspace{3em}
+
+\noindent \textbf{Change \#569} with diff file ISSM-22394-22395.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleaning\\
+\vspace{3em}
+
+\noindent \textbf{Change \#570} with diff file ISSM-22395-22396.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2002.arch M /issm/trunk-jpl/test/Archives/Archive2003.arch M /issm/trunk-jpl/test/Archives/Archive2010.arch M /issm/trunk-jpl/test/Archives/Archive2084.arch M /issm/trunk-jpl/test/Archives/Archive2085.arch M /issm/trunk-jpl/test/Archives/Archive2101.arch\\
+Export determination: 6. \\
+Rationale: CHG: archives updated to comply with new mesh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#571} with diff file ISSM-22396-22397.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2002.arch M /issm/trunk-jpl/test/Archives/Archive2003.arch M /issm/trunk-jpl/test/Archives/Archive2010.arch M /issm/trunk-jpl/test/Archives/Archive2101.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archives for gmsh 3.0.5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#572} with diff file ISSM-22397-22398.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2084.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archives for gmsh 3.0.5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#573} with diff file ISSM-22398-22399.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py A /issm/trunk-jpl/test/NightlyRun/test2085.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed test2085.py and paresresultsfromdisk.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#574} with diff file ISSM-22399-22400.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py\\
+Export determination: 6. \\
+Rationale: BUG: parseresultsfromdisk.py was using a function that is not available until numpy 1.8, fixed using older functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#575} with diff file ISSM-22400-22401.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2084.arch\\
+Export determination: 6. \\
+Rationale: CHG: archive updated\\
+\vspace{3em}
+
+\noindent \textbf{Change \#576} with diff file ISSM-22401-22402.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2084.m M /issm/trunk-jpl/test/NightlyRun/test2084.py\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#577} with diff file ISSM-22402-22403.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/numberedcostfunction.m\\
+Export determination: 6. \\
+Rationale: CHG: adding complexity to numcostfunctions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#578} with diff file ISSM-22403-22404.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/misfit.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#579} with diff file ISSM-22404-22405.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h\\
+Export determination: 6. \\
+Rationale: CHG: adding enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#580} with diff file ISSM-22405-22406.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#581} with diff file ISSM-22406-22407.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#582} with diff file ISSM-22407-22408.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#583} with diff file ISSM-22408-22409.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/classes.h\\
+Export determination: 6. \\
+Rationale: CHG: add new class Numberedcostfunction\\
+\vspace{3em}
+
+\noindent \textbf{Change \#584} with diff file ISSM-22409-22410.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Added outputdenfition compatability with Numberedcostfunction\\
+\vspace{3em}
+
+\noindent \textbf{Change \#585} with diff file ISSM-22410-22411.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed memory leaks among other small things\\
+\vspace{3em}
+
+\noindent \textbf{Change \#586} with diff file ISSM-22411-22412.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2084.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archives for gmsh 3.0.5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#587} with diff file ISSM-22412-22413.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test2084.m M /issm/trunk-jpl/test/NightlyRun/test2084.py\\
+Export determination: 6. \\
+Rationale: CHG: Adjusted tolerances for test 2084.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#588} with diff file ISSM-22413-22414.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2d.m M /issm/trunk-jpl/src/m/classes/mesh2d.py M /issm/trunk-jpl/src/m/classes/mesh3dprisms.m M /issm/trunk-jpl/src/m/classes/mesh3dprisms.py\\
+Export determination: 6. \\
+Rationale: CHG: marshalling lat/long for when oceancoupling activated (needed to interpolate with their coordinate system)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#589} with diff file ISSM-22414-22415.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/classes/adinversion.m D /issm/trunk-jpl/src/m/classes/adinversion.py\\
+Export determination: 6. \\
+Rationale: CHG: removed class not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#590} with diff file ISSM-22415-22416.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/coordsystems/gdaltransform.m\\
+Export determination: 6. \\
+Rationale: CHG: more flexible gdaltransform\\
+\vspace{3em}
+
+\noindent \textbf{Change \#591} with diff file ISSM-22416-22417.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: recover lat/long if ocean coupling is activated\\
+\vspace{3em}
+
+\noindent \textbf{Change \#592} with diff file ISSM-22417-22418.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: better shielding of bamg functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#593} with diff file ISSM-22418-22419.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: better way to deal with BAMG compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#594} with diff file ISSM-22419-22420.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/basalforcingspico.m\\
+Export determination: 6. \\
+Rationale: NEW: adding new class that will eventually implement PICO\\
+\vspace{3em}
+
+\noindent \textbf{Change \#595} with diff file ISSM-22420-22421.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: fixing symbol from interp2d not found\\
+\vspace{3em}
+
+\noindent \textbf{Change \#596} with diff file ISSM-22421-22422.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: apply frontal undercutting only for almost grounded ice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#597} with diff file ISSM-22422-22423.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h\\
+Export determination: 6. \\
+Rationale: CHG: changed from header file to .cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#598} with diff file ISSM-22423-22424.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/classes/Numberedcostfunction.cpp\\
+Export determination: 6. \\
+Rationale: ADD: Added Numberedcostfunction.cpp and converted .h to header file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#599} with diff file ISSM-22424-22425.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h\\
+Export determination: 6. \\
+Rationale: CHG: added PassiveVector option for ADOLC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#600} with diff file ISSM-22425-22426.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/classes/Params/Parameters.h\\
+Export determination: 6. \\
+Rationale: CHG: added FindParamAndMakePassive for ADOLC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#601} with diff file ISSM-22426-22427.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Added Numberedcostfunction.cpp to the list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#602} with diff file ISSM-22427-22428.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/classes/Misfit.cpp M /issm/trunk-jpl/src/c/classes/Misfit.h A /issm/trunk-jpl/src/c/classes/Nodalvalue.cpp M /issm/trunk-jpl/src/c/classes/Nodalvalue.h A /issm/trunk-jpl/src/c/classes/Regionaloutput.cpp M /issm/trunk-jpl/src/c/classes/Regionaloutput.h\\
+Export determination: 6. \\
+Rationale: CHG: adding cpp files for Nodalvalues, Misfit, and Regionaloutput\\
+\vspace{3em}
+
+\noindent \textbf{Change \#603} with diff file ISSM-22428-22429.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: adding Nodalvalue, Misfit, and Regionaloutput to Makefile list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#604} with diff file ISSM-22429-22430.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h M /issm/trunk-jpl/test/Archives/Archive243.arch M /issm/trunk-jpl/test/Archives/Archive244.arch M /issm/trunk-jpl/test/NightlyRun/test244.m\\
+Export determination: 6. \\
+Rationale: CHG: make dt thermo much smaller for diffusion stability\\
+\vspace{3em}
+
+\noindent \textbf{Change \#605} with diff file ISSM-22430-22431.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive243.arch\\
+Export determination: 6. \\
+Rationale: CHG: update Gemb archive for linux\\
+\vspace{3em}
+
+\noindent \textbf{Change \#606} with diff file ISSM-22431-22432.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test243.m\\
+Export determination: 6. \\
+Rationale: CHG: loosen GEMB constraints\\
+\vspace{3em}
+
+\noindent \textbf{Change \#607} with diff file ISSM-22432-22433.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/test/Archives/Archive243.arch M /issm/trunk-jpl/test/Archives/Archive244.arch M /issm/trunk-jpl/test/NightlyRun/test243.m M /issm/trunk-jpl/test/NightlyRun/test243.py\\
+Export determination: 6. \\
+Rationale: CHG: decreasing gemb thermo dt to 1/11\\
+\vspace{3em}
+
+\noindent \textbf{Change \#608} with diff file ISSM-22433-22434.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/colorbars.js\\
+Export determination: 6. \\
+Rationale: CHG: Adding additional colorbars.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#609} with diff file ISSM-22434-22435.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.js M /issm/trunk-jpl/src/m/plot/plot\_mesh.js M /issm/trunk-jpl/src/m/plot/plot\_overlay.js M /issm/trunk-jpl/src/m/plot/plot\_quiver.js M /issm/trunk-jpl/src/m/plot/plot\_transient\_movie.js M /issm/trunk-jpl/src/m/plot/plot\_unit.js M /issm/trunk-jpl/src/m/plot/plotdoc.js M /issm/trunk-jpl/src/m/plot/plotmodel.js M /issm/trunk-jpl/src/m/plot/webgl.js M /issm/trunk-jpl/src/m/plot/webgl\_node.js\\
+Export determination: 6. \\
+Rationale: CHG (JS): Updating js scripts.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#610} with diff file ISSM-22435-22436.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/amr.js\\
+Export determination: 6. \\
+Rationale: BUG (JS): Fixing typos and formatting for amr.js.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#611} with diff file ISSM-22436-22437.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor adding coupling rules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#612} with diff file ISSM-22437-22438.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.cpp M /issm/trunk-jpl/src/c/classes/Misfit.h M /issm/trunk-jpl/src/c/classes/Nodalvalue.h M /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h M /issm/trunk-jpl/src/c/classes/Regionaloutput.cpp M /issm/trunk-jpl/src/c/classes/Regionaloutput.h M /issm/trunk-jpl/src/c/cores/ad\_core.cpp A /issm/trunk-jpl/src/c/cores/controlADm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/controlm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp\\
+Export determination: 6. \\
+Rationale: ADD: allows AD to be used with m1qn3 core, not compliled in now (dead code)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#613} with diff file ISSM-22438-22439.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.cpp M /issm/trunk-jpl/src/c/classes/Misfit.h M /issm/trunk-jpl/src/c/classes/Nodalvalue.h M /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h M /issm/trunk-jpl/src/c/classes/Regionaloutput.cpp M /issm/trunk-jpl/src/c/classes/Regionaloutput.h M /issm/trunk-jpl/src/c/cores/ad\_core.cpp D /issm/trunk-jpl/src/c/cores/controlADm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/controlm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reverting previous commit\\
+\vspace{3em}
+
+\noindent \textbf{Change \#614} with diff file ISSM-22439-22440.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp\\
+Export determination: 6. \\
+Rationale: ADD: allows AD to be used with m1qn3 core, not compliled in now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#615} with diff file ISSM-22440-22441.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/MITgcm/build/mitgcmuv\\
+Export determination: 6. \\
+Rationale: mitgcmuv executable should not be version-controlled, it is built\\
+\vspace{3em}
+
+\noindent \textbf{Change \#616} with diff file ISSM-22441-22442.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Misfit.h M /issm/trunk-jpl/src/c/classes/Nodalvalue.h M /issm/trunk-jpl/src/c/classes/Numberedcostfunction.h M /issm/trunk-jpl/src/c/classes/Regionaloutput.h\\
+Export determination: 6. \\
+Rationale: CHG: cosmetic changes and slimmed down number of files in headers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#617} with diff file ISSM-22442-22443.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages M /issm/trunk-jpl/lib M /issm/trunk-jpl/src/c M /issm/trunk-jpl/src/c/classes/Dakota M /issm/trunk-jpl/src/c/main M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp M /issm/trunk-jpl/src/c/modules M /issm/trunk-jpl/src/c/modules/DistanceToMaskBoundaryx M /issm/trunk-jpl/src/c/modules/FourierLoveCorex M /issm/trunk-jpl/src/c/modules/GeothermalFluxx M /issm/trunk-jpl/src/c/modules/GiaDeflectionCorex M /issm/trunk-jpl/src/c/shared/io/Marshalling M /issm/trunk-jpl/src/wrappers M /issm/trunk-jpl/src/wrappers/DistanceToMaskBoundary M /issm/trunk-jpl/src/wrappers/Issm M /issm/trunk-jpl/src/wrappers/javascript/io M /issm/trunk-jpl/test/MITgcm M /issm/trunk-jpl/test/MITgcm/build M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt M /issm/trunk-jpl/test/NightlyRun\\
+Export determination: 6. \\
+Rationale: - starting to add text to test/MITgcm/coupling\_rules.txt - adding some ignore file commands using: svn propedit svn:ignore .\\
+\vspace{3em}
+
+\noindent \textbf{Change \#618} with diff file ISSM-22443-22444.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/cores.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp A /issm/trunk-jpl/src/m/classes/adm1qn3inversion.m\\
+Export determination: 6. \\
+Rationale: CHG/ADD: new adm1qn3inversion m class and modify files to make ad/m1qn3 work\\
+\vspace{3em}
+
+\noindent \textbf{Change \#619} with diff file ISSM-22444-22445.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: more careful definitions of initialization/termination procedures\\
+\vspace{3em}
+
+\noindent \textbf{Change \#620} with diff file ISSM-22445-22446.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp M /issm/trunk-jpl/src/c/cores/controlm1qn3\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added if adolc for controlad to compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#621} with diff file ISSM-22446-22447.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.js\\
+Export determination: 6. \\
+Rationale: CHG (JS): Adding deepCopy routine to model.js.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#622} with diff file ISSM-22447-22448.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.js\\
+Export determination: 6. \\
+Rationale: BUG (JS): Correcting deepCopy routine undefined reference error.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#623} with diff file ISSM-22448-22449.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp M /issm/trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/SMBd18opdd.m M /issm/trunk-jpl/src/m/classes/SMBd18opdd.py M /issm/trunk-jpl/src/m/classes/SMBpdd.m M /issm/trunk-jpl/src/m/classes/SMBpdd.py\\
+Export determination: 6. \\
+Rationale: CHG: add pdd factor input field\\
+\vspace{3em}
+
+\noindent \textbf{Change \#624} with diff file ISSM-22449-22450.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test323.m M /issm/trunk-jpl/test/NightlyRun/test323.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#625} with diff file ISSM-22450-22451.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/SMBgemb.m M /issm/trunk-jpl/src/m/classes/SMBgemb.py\\
+Export determination: 6. \\
+Rationale: CHG: add albedo and emissivity input to SMBgemb class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#626} with diff file ISSM-22451-22452.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive243.arch\\
+Export determination: 6. \\
+Rationale: CHG: update albedo archive, since lower layers are no longer changed in schemes 1-4\\
+\vspace{3em}
+
+\noindent \textbf{Change \#627} with diff file ISSM-22452-22453.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/parameterization/reinitializelevelset.m\\
+Export determination: 6. \\
+Rationale: CHG: added handy function to change levelset to a signed distance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#628} with diff file ISSM-22453-22454.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor base not bed is send by ISSM\\
+\vspace{3em}
+
+\noindent \textbf{Change \#629} with diff file ISSM-22454-22455.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor missing grid properties\\
+\vspace{3em}
+
+\noindent \textbf{Change \#630} with diff file ISSM-22455-22456.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor change\\
+\vspace{3em}
+
+\noindent \textbf{Change \#631} with diff file ISSM-22456-22457.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#632} with diff file ISSM-22457-22458.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: added more rules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#633} with diff file ISSM-22458-22459.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ExpToLevelSetx/ExpToLevelSetxt.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#634} with diff file ISSM-22459-22460.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/timestepping.js M /issm/trunk-jpl/src/m/classes/timestepping.m M /issm/trunk-jpl/src/m/classes/timestepping.py M /issm/trunk-jpl/src/m/classes/timesteppingadaptive.js M /issm/trunk-jpl/src/m/classes/timesteppingadaptive.m M /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py\\
+Export determination: 6. \\
+Rationale: ADD: adding coupling\_time for ice/ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#635} with diff file ISSM-22460-22461.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/timesteppingadaptive.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python class with coupling\_time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#636} with diff file ISSM-22461-22462.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: big change here, we do not extrapolate the nodes that are active but on places where phi>0, this will affect results and tests. Best thing to do before the week end...\\
+\vspace{3em}
+
+\noindent \textbf{Change \#637} with diff file ISSM-22462-22463.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: some changes in the coupling rules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#638} with diff file ISSM-22463-22464.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: ADD: new enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#639} with diff file ISSM-22464-22465.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive540.arch M /issm/trunk-jpl/test/Archives/Archive801.arch M /issm/trunk-jpl/test/Archives/Archive802.arch M /issm/trunk-jpl/test/Archives/Archive803.arch M /issm/trunk-jpl/test/Archives/Archive804.arch M /issm/trunk-jpl/test/Archives/Archive805.arch M /issm/trunk-jpl/test/Archives/Archive806.arch M /issm/trunk-jpl/test/Archives/Archive807.arch M /issm/trunk-jpl/test/Archives/Archive808.arch\\
+Export determination: 6. \\
+Rationale: CHG: updating calving archives now that no extrapolation is done on frontal nodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#640} with diff file ISSM-22465-22466.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: ADD: some parameters needed for the ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#641} with diff file ISSM-22466-22467.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h\\
+Export determination: 6. \\
+Rationale: NEW: Added enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#642} with diff file ISSM-22467-22468.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Added enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#643} with diff file ISSM-22468-22469.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Added enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#644} with diff file ISSM-22469-22470.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Added enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#645} with diff file ISSM-22470-22471.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Added enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#646} with diff file ISSM-22471-22472.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp A /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp A /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added Pico\\
+\vspace{3em}
+
+\noindent \textbf{Change \#647} with diff file ISSM-22472-22473.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: syncing Enum highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#648} with diff file ISSM-22473-22474.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixgin compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#649} with diff file ISSM-22474-22475.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some changes for calvinghab\\
+\vspace{3em}
+
+\noindent \textbf{Change \#650} with diff file ISSM-22475-22476.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/SMBgemb.m M /issm/trunk-jpl/src/m/classes/SMBgemb.py\\
+Export determination: 6. \\
+Rationale: CHG: add thermo scaling factor as input and add an option for ingestion of albedo for only areas of ice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#651} with diff file ISSM-22476-22477.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: abs is not a C++ standard function, replaced with fabs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#652} with diff file ISSM-22477-22478.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: shielding ADLOC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#653} with diff file ISSM-22478-22479.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/FourierLoveCorex/lovenb\_sub.f90\\
+Export determination: 6. \\
+Rationale: CHG: ordering issue regardg even yi resolved\\
+\vspace{3em}
+
+\noindent \textbf{Change \#654} with diff file ISSM-22479-22480.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive2085.arch\\
+Export determination: 6. \\
+Rationale: CHG: archive updated for Love kernels\\
+\vspace{3em}
+
+\noindent \textbf{Change \#655} with diff file ISSM-22480-22481.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/control\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed NULL pointer to avoid compilation issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#656} with diff file ISSM-22482-22483.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/SMBgemb.m M /issm/trunk-jpl/src/m/classes/SMBgemb.py M /issm/trunk-jpl/test/Archives/Archive243.arch\\
+Export determination: 6. \\
+Rationale: CHG: add option for forcing albedo only above a specific surface density\\
+\vspace{3em}
+
+\noindent \textbf{Change \#657} with diff file ISSM-22483-22484.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/slr.js M /issm/trunk-jpl/src/m/classes/thermal.js M /issm/trunk-jpl/src/m/classes/trans.js\\
+Export determination: 6. \\
+Rationale: CHG (JS): Updating missing js fields.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#658} with diff file ISSM-22484-22485.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: add option for static spc for the SMB Pdd schemes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#659} with diff file ISSM-22485-22486.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use NAN to set static spc for the SMB Pdd schemes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#660} with diff file ISSM-22486-22487.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: added install-3.8-macosx64.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#661} with diff file ISSM-22487-22488.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.8-linux64.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.8-macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: upgrading to 3.8.3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#662} with diff file ISSM-22488-22489.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: updated crevasse-depth calving law\\
+\vspace{3em}
+
+\noindent \textbf{Change \#663} with diff file ISSM-22489-22490.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/calvingcrevassedepth.m M /issm/trunk-jpl/src/m/classes/calvinghab.m\\
+Export determination: 6. \\
+Rationale: CHG: updated crevasse-depth and hab calving law\\
+\vspace{3em}
+
+\noindent \textbf{Change \#664} with diff file ISSM-22490-22491.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing test to exchange information\\
+\vspace{3em}
+
+\noindent \textbf{Change \#665} with diff file ISSM-22491-22492.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: ADD: starting to exchange info with MITgcm, will clean up later\\
+\vspace{3em}
+
+\noindent \textbf{Change \#666} with diff file ISSM-22492-22493.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed AD suff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#667} with diff file ISSM-22493-22494.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/coordsystems/xy2ll.m M /issm/trunk-jpl/src/m/coordsystems/xy2ll.py\\
+Export determination: 6. \\
+Rationale: BUG: lat lon are in radiant first, and then we convert them to degrees:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#668} with diff file ISSM-22495-22496.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/shared/Elements/ComputeD18OTemperaturePrecipitationFromPD.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/SMBd18opdd.m M /issm/trunk-jpl/src/m/classes/SMBd18opdd.py\\
+Export determination: 6. \\
+Rationale: CHG: add option to turn off temperature scaling for the d18opdd scheme\\
+\vspace{3em}
+
+\noindent \textbf{Change \#669} with diff file ISSM-22496-22497.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor update to velocity min value for gemb thermo module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#670} with diff file ISSM-22497-22498.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: use || instead of |\\
+\vspace{3em}
+
+\noindent \textbf{Change \#671} with diff file ISSM-22498-22499.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/main/issm.js M /issm/trunk-jpl/src/c/modules/CoordinateSystemTransformx/CoordinateSystemTransformx.cpp A /issm/trunk-jpl/src/c/modules/ProcessRiftsx (from /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx:22497) A /issm/trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.cpp (from /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp:22496) A /issm/trunk-jpl/src/c/modules/ProcessRiftsx/ProcessRiftsx.h (from /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h:22496) D /issm/trunk-jpl/src/c/modules/ProcessRiftsx/TriMeshProcessRiftsx.cpp D /issm/trunk-jpl/src/c/modules/ProcessRiftsx/TriMeshProcessRiftsx.h D /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx D /issm/trunk-jpl/src/c/modules/TriMeshx A /issm/trunk-jpl/src/c/modules/Trianglex (from /issm/trunk-jpl/src/c/modules/TriMeshx:22497) D /issm/trunk-jpl/src/c/modules/Trianglex/TriMeshx.cpp D /issm/trunk-jpl/src/c/modules/Trianglex/TriMeshx.h A /issm/trunk-jpl/src/c/modules/Trianglex/Trianglex.cpp (from /issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp:22496) A /issm/trunk-jpl/src/c/modules/Trianglex/Trianglex.h (from /issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h:22496) M /issm/trunk-jpl/src/c/modules/modules.h D /issm/trunk-jpl/src/c/shared/TriMesh A /issm/trunk-jpl/src/c/shared/Triangle (from /issm/trunk-jpl/src/c/shared/TriMesh:22497) D /issm/trunk-jpl/src/c/shared/Triangle/TriMeshUtils.cpp A /issm/trunk-jpl/src/c/shared/Triangle/TriangleUtils.cpp (from /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp:22496) A /issm/trunk-jpl/src/c/shared/Triangle/triangle.h (from /issm/trunk-jpl/src/c/shared/TriMesh/trimesh.h:22496) D /issm/trunk-jpl/src/c/shared/Triangle/trimesh.h M /issm/trunk-jpl/src/c/shared/shared.h M /issm/trunk-jpl/src/m/mesh/argusmesh.m M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessrifts.m M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py M /issm/trunk-jpl/src/m/mesh/triangle.js M /issm/trunk-jpl/src/m/mesh/triangle.m M /issm/trunk-jpl/src/m/mesh/triangle.py M /issm/trunk-jpl/src/m/mesh/triangle2dvertical.m A /issm/trunk-jpl/src/m/modules/ProcessRifts.m (from /issm/trunk-jpl/src/m/modules/TriMeshProcessRifts.m:22497) A /issm/trunk-jpl/src/m/modules/ProcessRifts.py (from /issm/trunk-jpl/src/m/modules/TriMeshProcessRifts.py:22497) D /issm/trunk-jpl/src/m/modules/TriMesh.m D /issm/trunk-jpl/src/m/modules/TriMesh.py D /issm/trunk-jpl/src/m/modules/TriMeshProcessRifts.m D /issm/trunk-jpl/src/m/modules/TriMeshProcessRifts.py A /issm/trunk-jpl/src/m/modules/Triangle.m (from /issm/trunk-jpl/src/m/modules/TriMesh.m:22497) A /issm/trunk-jpl/src/m/modules/Triangle.py (from /issm/trunk-jpl/src/m/modules/TriMesh.py:22497) A /issm/trunk-jpl/src/wrappers/ProcessRifts (from /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts:22497) A /issm/trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.cpp (from /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp:22496) A /issm/trunk-jpl/src/wrappers/ProcessRifts/ProcessRifts.h (from /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h:22496) D /issm/trunk-jpl/src/wrappers/ProcessRifts/TriMeshProcessRifts.cpp D /issm/trunk-jpl/src/wrappers/ProcessRifts/TriMeshProcessRifts.h D /issm/trunk-jpl/src/wrappers/TriMesh D /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts A /issm/trunk-jpl/src/wrappers/Triangle (from /issm/trunk-jpl/src/wrappers/TriMesh:22497) D /issm/trunk-jpl/src/wrappers/Triangle/TriMesh.cpp D /issm/trunk-jpl/src/wrappers/Triangle/TriMesh.h D /issm/trunk-jpl/src/wrappers/Triangle/TriMesh.js A /issm/trunk-jpl/src/wrappers/Triangle/Triangle.cpp (from /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp:22496) A /issm/trunk-jpl/src/wrappers/Triangle/Triangle.h (from /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.h:22496) A /issm/trunk-jpl/src/wrappers/Triangle/Triangle.js (from /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.js:22496) M /issm/trunk-jpl/src/wrappers/javascript/Makefile.am M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: renaming TriMesh Triangle, for consistency (we use a mesher whose name is triangle, Trimesh is another mesher that we do not uese)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#672} with diff file ISSM-22499-22500.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Triangle/AssociateSegmentToElement.cpp M /issm/trunk-jpl/src/c/shared/Triangle/GridInsideHole.cpp M /issm/trunk-jpl/src/c/shared/Triangle/OrderSegments.cpp M /issm/trunk-jpl/src/c/shared/Triangle/SplitMeshForRifts.cpp\\
+Export determination: 6. \\
+Rationale: CHG: forgot to change include trimesh to triangle\\
+\vspace{3em}
+
+\noindent \textbf{Change \#673} with diff file ISSM-22500-22501.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test613.m\\
+Export determination: 6. \\
+Rationale: CHG: sped up squaremesh (needed for BedMachine Ant.)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#674} with diff file ISSM-22501-22502.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test613.m\\
+Export determination: 6. \\
+Rationale: CHG: reverted tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#675} with diff file ISSM-22502-22503.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/squaremesh.m\\
+Export determination: 6. \\
+Rationale: CHG: sped up squaremesh (needed for BedMachine Ant.)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#676} with diff file ISSM-22503-22504.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: compute basal melt rates BEFORE masstransport\\
+\vspace{3em}
+
+\noindent \textbf{Change \#677} with diff file ISSM-22504-22505.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive293.arch\\
+Export determination: 6. \\
+Rationale: CHG: new archive now that melting rate is computed BEFORE masstransport\\
+\vspace{3em}
+
+\noindent \textbf{Change \#678} with diff file ISSM-22505-22506.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/linearbasalforcings.m M /issm/trunk-jpl/src/m/classes/linearbasalforcings.py M /issm/trunk-jpl/src/m/classes/mismipbasalforcings.m M /issm/trunk-jpl/src/m/classes/mismipbasalforcings.py\\
+Export determination: 6. \\
+Rationale: CHG: do not compute melt before marshalling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#679} with diff file ISSM-22506-22507.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not compute melt before marshalling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#680} with diff file ISSM-22507-22508.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp A /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.h A /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp A /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.h M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: ADD/CHG: allow for multiple outputdefinitions and take cost function measurements at specified points in time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#681} with diff file ISSM-22508-22509.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/cfsurfacelogvel.m A /issm/trunk-jpl/src/m/classes/cfsurfacesquare.m\\
+Export determination: 6. \\
+Rationale: ADD: .m files to make cost func at specific time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#682} with diff file ISSM-22509-22510.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/valgrind/install-linux64.sh D /issm/trunk-jpl/externalpackages/valgrind/install-macosx32.sh M /issm/trunk-jpl/externalpackages/valgrind/install-macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: now use latest version of valgrind\\
+\vspace{3em}
+
+\noindent \textbf{Change \#683} with diff file ISSM-22510-22511.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of TripleMultiply in HO (too much time lost with multiplications and xNew in GetB\\
+\vspace{3em}
+
+\noindent \textbf{Change \#684} with diff file ISSM-22511-22512.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing some TripleMulitply\\
+\vspace{3em}
+
+\noindent \textbf{Change \#685} with diff file ISSM-22512-22513.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive437.arch\\
+Export determination: 6. \\
+Rationale: CHG: slightly changed K matrix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#686} with diff file ISSM-22513-22514.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: switching to non matrixmultiply code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#687} with diff file ISSM-22514-22515.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test339.m M /issm/trunk-jpl/test/NightlyRun/test339.py M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test435.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#688} with diff file ISSM-22515-22516.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp M /issm/trunk-jpl/src/m/classes/adm1qn3inversion.m M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/independent.m\\
+Export determination: 6. \\
+Rationale: CHG: changes to allow AD/m1qn3 to work\\
+\vspace{3em}
+
+\noindent \textbf{Change \#689} with diff file ISSM-22516-22517.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: FIX: change so code will compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#690} with diff file ISSM-22517-22518.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetic changes and code to fix test failures\\
+\vspace{3em}
+
+\noindent \textbf{Change \#691} with diff file ISSM-22518-22519.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h\\
+Export determination: 6. \\
+Rationale: CHG: AXPY not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#692} with diff file ISSM-22519-22520.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: CHG: removing old function that we don't need\\
+\vspace{3em}
+
+\noindent \textbf{Change \#693} with diff file ISSM-22520-22521.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test435.m M /issm/trunk-jpl/test/NightlyRun/test435.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#694} with diff file ISSM-22521-22522.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simplifying implementation of inputs, should call GetInput rather than reimplementing the same thing over and over again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#695} with diff file ISSM-22522-22523.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#696} with diff file ISSM-22523-22524.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing TripleMultiply where needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#697} with diff file ISSM-22524-22525.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: AD compiler wants D[9] instead of D[3x3]\\
+\vspace{3em}
+
+\noindent \textbf{Change \#698} with diff file ISSM-22525-22526.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test285.m M /issm/trunk-jpl/test/NightlyRun/test285.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#699} with diff file ISSM-22526-22527.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: better handling of anisotropic diffusion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#700} with diff file ISSM-22527-22528.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/modules/Kriging.m\\
+Export determination: 6. \\
+Rationale: CHG: allow to have error as an output as well\\
+\vspace{3em}
+
+\noindent \textbf{Change \#701} with diff file ISSM-22528-22529.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/solve.m\\
+Export determination: 6. \\
+Rationale: CHG: new solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#702} with diff file ISSM-22529-22530.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gslib/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: use gfortran instead of ifort\\
+\vspace{3em}
+
+\noindent \textbf{Change \#703} with diff file ISSM-22530-22531.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/valgrind/issm.supp\\
+Export determination: 6. \\
+Rationale: CHG: more things to ignore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#704} with diff file ISSM-22531-22532.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#705} with diff file ISSM-22532-22533.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/code/EESUPPORT.h A /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F A /issm/trunk-jpl/test/MITgcm/code/do\_oceanic\_phys.F M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: moving communication to cpl\_issm.F called by do\_oceanic\_phys.F\\
+\vspace{3em}
+
+\noindent \textbf{Change \#706} with diff file ISSM-22533-22534.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cheking ocean parameters are recovered\\
+\vspace{3em}
+
+\noindent \textbf{Change \#707} with diff file ISSM-22534-22535.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: got rid of B and Bprime for FS, in hope to increase model performance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#708} with diff file ISSM-22535-22536.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h\\
+Export determination: 6. \\
+Rationale: CHG: removing GetB and GetBprime\\
+\vspace{3em}
+
+\noindent \textbf{Change \#709} with diff file ISSM-22536-22537.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: FIX: fix for ad nightly tests to work\\
+\vspace{3em}
+
+\noindent \textbf{Change \#710} with diff file ISSM-22537-22538.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/independent.m\\
+Export determination: 6. \\
+Rationale: FIX: fix for AD nightly runs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#711} with diff file ISSM-22538-22539.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: allow for --with-scalapack-lib option\\
+\vspace{3em}
+
+\noindent \textbf{Change \#712} with diff file ISSM-22539-22540.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py M /issm/trunk-jpl/test/Archives/Archive243.arch M /issm/trunk-jpl/test/Archives/Archive244.arch M /issm/trunk-jpl/test/NightlyRun/test243.m M /issm/trunk-jpl/test/NightlyRun/test243.py\\
+Export determination: 6. \\
+Rationale: CHG: edits to the GEMB thermo module, add FAC calculation, fix enums to remove underscore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#713} with diff file ISSM-22540-22541.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test243.m M /issm/trunk-jpl/test/NightlyRun/test243.py\\
+Export determination: 6. \\
+Rationale: CHG: loosen FAC constraint\\
+\vspace{3em}
+
+\noindent \textbf{Change \#714} with diff file ISSM-22541-22542.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#715} with diff file ISSM-22542-22543.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/basalstress.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed basal drag sign\\
+\vspace{3em}
+
+\noindent \textbf{Change \#716} with diff file ISSM-22543-22544.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/levelsetfunctionslope\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG:removing LSF slope as default requested output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#717} with diff file ISSM-22544-22545.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#718} with diff file ISSM-22545-22546.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test219.js M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test219.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#719} with diff file ISSM-22546-22547.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: MITgcm sends XC/YC to ISSM.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#720} with diff file ISSM-22547-22548.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: NEW: exchanging matrices for the coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#721} with diff file ISSM-22548-22549.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#722} with diff file ISSM-22549-22550.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: giving it another shot\\
+\vspace{3em}
+
+\noindent \textbf{Change \#723} with diff file ISSM-22550-22551.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: forgot to include to fi\\
+\vspace{3em}
+
+\noindent \textbf{Change \#724} with diff file ISSM-22551-22552.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Profiler.cpp M /issm/trunk-jpl/src/c/classes/Profiler.h M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_adjoint\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_fct.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_la.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_la\_theta.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_newton.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_shakti\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: revised how profiling is done and added solver time to see how much time we spend solver linear systems\\
+\vspace{3em}
+
+\noindent \textbf{Change \#725} with diff file ISSM-22552-22553.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix windows\\
+\vspace{3em}
+
+\noindent \textbf{Change \#726} with diff file ISSM-22553-22554.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing js compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#727} with diff file ISSM-22554-22555.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Profiler.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#728} with diff file ISSM-22555-22556.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp\\
+Export determination: 6. \\
+Rationale: CHG: slight increase in run speed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#729} with diff file ISSM-22556-22557.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Bamg/HeapSort.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing HeapSort with ordering requested as output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#730} with diff file ISSM-22557-22558.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/IntVecParam.cpp\\
+Export determination: 6. \\
+Rationale: CHG: better echo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#731} with diff file ISSM-22558-22559.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/main/globals.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/toolkits/ToolkitOptions.cpp M /issm/trunk-jpl/src/c/toolkits/ToolkitOptions.h M /issm/trunk-jpl/src/c/toolkits/objects/Matrix.h M /issm/trunk-jpl/src/c/toolkits/objects/Vector.h\\
+Export determination: 6. \\
+Rationale: CHG: better handling of toolkits, now remove option toolkit from options so that mkl does not get confused\\
+\vspace{3em}
+
+\noindent \textbf{Change \#732} with diff file ISSM-22559-22560.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#733} with diff file ISSM-22560-22561.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cleanup, forget about PETSc 2 now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#734} with diff file ISSM-22561-22562.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing windows, still using PETSC 3.6\\
+\vspace{3em}
+
+\noindent \textbf{Change \#735} with diff file ISSM-22562-22563.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/mumpsoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: speed up pleiades by a factor of 2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#736} with diff file ISSM-22563-22564.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test540.m M /issm/trunk-jpl/test/NightlyRun/test540.py\\
+Export determination: 6. \\
+Rationale: BUG: force MUMPS sequential analysis\\
+\vspace{3em}
+
+\noindent \textbf{Change \#737} with diff file ISSM-22564-22565.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test215.js M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test427.py M /issm/trunk-jpl/test/NightlyRun/test460.m M /issm/trunk-jpl/test/NightlyRun/test460.py\\
+Export determination: 6. \\
+Rationale: CHG: Adjusted tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#738} with diff file ISSM-22565-22566.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test243.m M /issm/trunk-jpl/test/NightlyRun/test243.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: Adjusted tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#739} with diff file ISSM-22566-22567.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolernaces\\
+\vspace{3em}
+
+\noindent \textbf{Change \#740} with diff file ISSM-22567-22568.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.par M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py\\
+Export determination: 6. \\
+Rationale: CHG: resetting overshoot to 0, many tests will fail and be updated accordingly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#741} with diff file ISSM-22568-22569.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1501.arch M /issm/trunk-jpl/test/Archives/Archive1502.arch M /issm/trunk-jpl/test/Archives/Archive1601.arch M /issm/trunk-jpl/test/Archives/Archive201.arch M /issm/trunk-jpl/test/Archives/Archive202.arch M /issm/trunk-jpl/test/Archives/Archive203.arch M /issm/trunk-jpl/test/Archives/Archive204.arch M /issm/trunk-jpl/test/Archives/Archive205.arch M /issm/trunk-jpl/test/Archives/Archive206.arch M /issm/trunk-jpl/test/Archives/Archive207.arch M /issm/trunk-jpl/test/Archives/Archive208.arch M /issm/trunk-jpl/test/Archives/Archive209.arch M /issm/trunk-jpl/test/Archives/Archive210.arch M /issm/trunk-jpl/test/Archives/Archive211.arch M /issm/trunk-jpl/test/Archives/Archive212.arch M /issm/trunk-jpl/test/Archives/Archive213.arch M /issm/trunk-jpl/test/Archives/Archive214.arch M /issm/trunk-jpl/test/Archives/Archive215.arch M /issm/trunk-jpl/test/Archives/Archive216.arch M /issm/trunk-jpl/test/Archives/Archive217.arch M /issm/trunk-jpl/test/Archives/Archive219.arch M /issm/trunk-jpl/test/Archives/Archive220.arch M /issm/trunk-jpl/test/Archives/Archive221.arch M /issm/trunk-jpl/test/Archives/Archive222.arch M /issm/trunk-jpl/test/Archives/Archive223.arch M /issm/trunk-jpl/test/Archives/Archive224.arch M /issm/trunk-jpl/test/Archives/Archive225.arch M /issm/trunk-jpl/test/Archives/Archive226.arch M /issm/trunk-jpl/test/Archives/Archive227.arch M /issm/trunk-jpl/test/Archives/Archive228.arch M /issm/trunk-jpl/test/Archives/Archive229.arch M /issm/trunk-jpl/test/Archives/Archive230.arch M /issm/trunk-jpl/test/Archives/Archive231.arch M /issm/trunk-jpl/test/Archives/Archive232.arch M /issm/trunk-jpl/test/Archives/Archive233.arch M /issm/trunk-jpl/test/Archives/Archive236.arch M /issm/trunk-jpl/test/Archives/Archive237.arch M /issm/trunk-jpl/test/Archives/Archive238.arch M /issm/trunk-jpl/test/Archives/Archive239.arch M /issm/trunk-jpl/test/Archives/Archive240.arch M /issm/trunk-jpl/test/Archives/Archive241.arch M /issm/trunk-jpl/test/Archives/Archive242.arch M /issm/trunk-jpl/test/Archives/Archive260.arch M /issm/trunk-jpl/test/Archives/Archive261.arch M /issm/trunk-jpl/test/Archives/Archive270.arch M /issm/trunk-jpl/test/Archives/Archive272.arch M /issm/trunk-jpl/test/Archives/Archive273.arch M /issm/trunk-jpl/test/Archives/Archive274.arch M /issm/trunk-jpl/test/Archives/Archive275.arch M /issm/trunk-jpl/test/Archives/Archive280.arch M /issm/trunk-jpl/test/Archives/Archive285.arch M /issm/trunk-jpl/test/Archives/Archive290.arch M /issm/trunk-jpl/test/Archives/Archive291.arch M /issm/trunk-jpl/test/Archives/Archive292.arch M /issm/trunk-jpl/test/Archives/Archive293.arch M /issm/trunk-jpl/test/Archives/Archive336.arch M /issm/trunk-jpl/test/Archives/Archive337.arch M /issm/trunk-jpl/test/Archives/Archive338.arch M /issm/trunk-jpl/test/Archives/Archive339.arch M /issm/trunk-jpl/test/Archives/Archive806.arch M /issm/trunk-jpl/test/Archives/Archive807.arch M /issm/trunk-jpl/test/Archives/Archive808.arch\\
+Export determination: 6. \\
+Rationale: CHG: updating archives now that overshoot is 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#742} with diff file ISSM-22569-22570.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive501.arch M /issm/trunk-jpl/test/Archives/Archive502.arch M /issm/trunk-jpl/test/Archives/Archive503.arch M /issm/trunk-jpl/test/Archives/Archive504.arch M /issm/trunk-jpl/test/Archives/Archive505.arch M /issm/trunk-jpl/test/Archives/Archive506.arch M /issm/trunk-jpl/test/Archives/Archive507.arch M /issm/trunk-jpl/test/Archives/Archive508.arch M /issm/trunk-jpl/test/Archives/Archive509.arch M /issm/trunk-jpl/test/Archives/Archive510.arch M /issm/trunk-jpl/test/Archives/Archive511.arch M /issm/trunk-jpl/test/Archives/Archive512.arch M /issm/trunk-jpl/test/Archives/Archive513.arch M /issm/trunk-jpl/test/Archives/Archive515.arch M /issm/trunk-jpl/test/Archives/Archive516.arch M /issm/trunk-jpl/test/Archives/Archive530.arch M /issm/trunk-jpl/test/Archives/Archive531.arch M /issm/trunk-jpl/test/Archives/Archive540.arch M /issm/trunk-jpl/test/NightlyRun/test215.js M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test460.m M /issm/trunk-jpl/test/NightlyRun/test460.py\\
+Export determination: 6. \\
+Rationale: CHG: updating archives now that overshoot is 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#743} with diff file ISSM-22570-22571.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test233.js M /issm/trunk-jpl/test/NightlyRun/test233.m M /issm/trunk-jpl/test/NightlyRun/test233.py M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py M /issm/trunk-jpl/test/NightlyRun/test460.m M /issm/trunk-jpl/test/NightlyRun/test460.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#744} with diff file ISSM-22571-22572.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_caladan M /issm/trunk-jpl/jenkins/linux64\_caladan\_ad M /issm/trunk-jpl/jenkins/linux64\_caladan\_ampi M /issm/trunk-jpl/jenkins/linux64\_ross M /issm/trunk-jpl/jenkins/linux64\_ross\_ad M /issm/trunk-jpl/jenkins/linux64\_ross\_ampi M /issm/trunk-jpl/jenkins/linux64\_ross\_dakota M /issm/trunk-jpl/jenkins/linux64\_ross\_gia M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean M /issm/trunk-jpl/jenkins/linux64\_ross\_python M /issm/trunk-jpl/jenkins/linux64\_ross\_se\\
+Export determination: 6. \\
+Rationale: CHG: Added cmake to Jenkins build config files, where applicable.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#745} with diff file ISSM-22572-22573.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.js M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test339.m M /issm/trunk-jpl/test/NightlyRun/test339.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#746} with diff file ISSM-22573-22574.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing overshoot from stress balance (makes models crash and is not faster)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#747} with diff file ISSM-22574-22575.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive234.arch M /issm/trunk-jpl/test/Archives/Archive235.arch M /issm/trunk-jpl/test/Archives/Archive250.arch M /issm/trunk-jpl/test/Archives/Archive251.arch\\
+Export determination: 6. \\
+Rationale: CHG: Updated archives.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#748} with diff file ISSM-22575-22576.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test221.js M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksAB.par M /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksAB.py M /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksCD.par M /issm/trunk-jpl/test/Par/GiaIvinsBenchmarksCD.py M /issm/trunk-jpl/test/Par/IceCube.par M /issm/trunk-jpl/test/Par/IceCube.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.js M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/ValleyGlacierShelf.par M /issm/trunk-jpl/test/Par/ValleyGlacierShelf.py\\
+Export determination: 6. \\
+Rationale: CHG: no more overshoot\\
+\vspace{3em}
+
+\noindent \textbf{Change \#749} with diff file ISSM-22576-22577.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/snowpack.m M /issm/trunk-jpl/src/m/classes/stressbalance.js M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/py3/classes/stressbalance.py M /issm/trunk-jpl/src/py3/modifier.sh\\
+Export determination: 6. \\
+Rationale: CHG: no more viscosity\_overhoot, makes models crash and they don't go facter\\
+\vspace{3em}
+
+\noindent \textbf{Change \#750} with diff file ISSM-22577-22578.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test215.js M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#751} with diff file ISSM-22578-22579.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test411.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#752} with diff file ISSM-22579-22580.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.js M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#753} with diff file ISSM-22580-22581.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: this function is no longer needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#754} with diff file ISSM-22581-22582.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_se\\
+Export determination: 6. \\
+Rationale: CHG: Corrected MATLAB path for Linux Solid Earth build.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#755} with diff file ISSM-22582-22583.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h\\
+Export determination: 6. \\
+Rationale: CHG: added support for PDOUBLE\\
+\vspace{3em}
+
+\noindent \textbf{Change \#756} with diff file ISSM-22583-22584.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h\\
+Export determination: 6. \\
+Rationale: BUG: fixed compilation for non adolc code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#757} with diff file ISSM-22584-22585.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added some Enums to test new interface for inputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#758} with diff file ISSM-22585-22586.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing compilation of modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#759} with diff file ISSM-22586-22587.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adolc/m1qn3 enabling so ind not double counted\\
+\vspace{3em}
+
+\noindent \textbf{Change \#760} with diff file ISSM-22587-22588.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/DependentObject.h\\
+Export determination: 6. \\
+Rationale: CHG: added functions to DependentObject\\
+\vspace{3em}
+
+\noindent \textbf{Change \#761} with diff file ISSM-22588-22589.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/Params/Param.h M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fix nightly tests errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#762} with diff file ISSM-22589-22590.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: FIX: nightly test fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#763} with diff file ISSM-22590-22591.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: FIX: compiling error\\
+\vspace{3em}
+
+\noindent \textbf{Change \#764} with diff file ISSM-22591-22592.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h\\
+Export determination: 6. \\
+Rationale: CHG: allow adolc to use mumpssolver\\
+\vspace{3em}
+
+\noindent \textbf{Change \#765} with diff file ISSM-22592-22593.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#766} with diff file ISSM-22593-22594.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: inset should take xlim and ylim into account.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#767} with diff file ISSM-22594-22595.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reenable petsc dev\\
+\vspace{3em}
+
+\noindent \textbf{Change \#768} with diff file ISSM-22595-22596.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-dev-linux64.sh\\
+Export determination: 6. \\
+Rationale: CHG: reenable petsc dev\\
+\vspace{3em}
+
+\noindent \textbf{Change \#769} with diff file ISSM-22596-22597.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reordering Enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#770} with diff file ISSM-22597-22598.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/macosx\_pine-island\_dakota\\
+Export determination: 6. \\
+Rationale: CHG: Testing Mac Dakota build with single core.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#771} with diff file ISSM-22598-22599.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving an enum to the parameter set\\
+\vspace{3em}
+
+\noindent \textbf{Change \#772} with diff file ISSM-22599-22600.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving an enum to the parameter set\\
+\vspace{3em}
+
+\noindent \textbf{Change \#773} with diff file ISSM-22600-22601.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving an enum to the parameter set\\
+\vspace{3em}
+
+\noindent \textbf{Change \#774} with diff file ISSM-22601-22602.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding more Enums to Parameters list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#775} with diff file ISSM-22602-22603.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding one more ENum to paramter list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#776} with diff file ISSM-22603-22604.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/macosx\_pine-island\_dakota\\
+Export determination: 6. \\
+Rationale: CHG: Testing Mac Dakota build with single thread.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#777} with diff file ISSM-22604-22605.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/macosx\_pine-island\_dakota\\
+Export determination: 6. \\
+Rationale: CHG: Reverting changes to Mac Dakota config.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#778} with diff file ISSM-22605-22606.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding more enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#779} with diff file ISSM-22606-22607.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixing some enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#780} with diff file ISSM-22607-22608.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more enum stuff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#781} with diff file ISSM-22608-22609.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changing enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#782} with diff file ISSM-22609-22610.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing some enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#783} with diff file ISSM-22610-22611.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: allow m1qn3/adolc to work\\
+\vspace{3em}
+
+\noindent \textbf{Change \#784} with diff file ISSM-22611-22612.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more enum stuff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#785} with diff file ISSM-22612-22613.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp A /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h M /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp M /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.h M /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp M /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: CHG/ADD: adding Cfgradcoeff class and making other code work for adolc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#786} with diff file ISSM-22613-22614.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch M /issm/trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh M /issm/trunk-jpl/jenkins/linux64\_ross\_dakota\\
+Export determination: 6. \\
+Rationale: CHG: Stability improvements for Linux\_Ubuntu\_Dakota build.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#787} with diff file ISSM-22614-22615.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: add runoff before delete of no mass layer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#788} with diff file ISSM-22615-22616.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test803.m M /issm/trunk-jpl/test/NightlyRun/test803.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#789} with diff file ISSM-22616-22617.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/dakota/configs/6.2/CMakeLists.txt.petsclibs.patch\\
+Export determination: 6. \\
+Rationale: BUG: fixed patch:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#790} with diff file ISSM-22617-22618.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp M /issm/trunk-jpl/src/c/classes/Params/Param.h M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/classes/Params/Parameters.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: variable descriptors should not be in params (it's really messed up because we have two objects with the same enum in params and inputs, which is totally confusing), created a special param to hold all of the variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#791} with diff file ISSM-22618-22619.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m M /issm/trunk-jpl/src/m/solve/solve.m\\
+Export determination: 6. \\
+Rationale: CHG: minor: added check on file existence\\
+\vspace{3em}
+
+\noindent \textbf{Change \#792} with diff file ISSM-22619-22620.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: show log if failed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#793} with diff file ISSM-22620-22621.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h\\
+Export determination: 6. \\
+Rationale: FIX: moving Outputdefinitions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#794} with diff file ISSM-22621-22622.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Enum changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#795} with diff file ISSM-22623-22624.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#796} with diff file ISSM-22624-22625.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/emscripten/install.sh M /issm/trunk-jpl/externalpackages/gsl/install-javascript.sh M /issm/trunk-jpl/externalpackages/triangle/install-javascript.sh M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript\\
+Export determination: 6. \\
+Rationale: CHG: Config adjustments for Linux JavaScript build.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#797} with diff file ISSM-22625-22626.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Params/BoolParam.h M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/Params/Param.h M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/classes/Params/Parameters.h M /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp M /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/TransientParam.h M /issm/trunk-jpl/src/c/classes/Params/VectorParam.h A /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox A /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp A /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/basalforcingspico.m A /issm/trunk-jpl/test/Archives/Archive470.arch A /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: NEW: added pico ocean melt parameterization and its nightly run test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#798} with diff file ISSM-22626-22627.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#799} with diff file ISSM-22627-22628.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: CHG: minor working on coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#800} with diff file ISSM-22628-22629.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Params/BoolParam.h M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/Params/Param.h M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/classes/Params/Parameters.h M /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp M /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/TransientParam.h M /issm/trunk-jpl/src/c/classes/Params/VectorParam.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cleaning up\\
+\vspace{3em}
+
+\noindent \textbf{Change \#801} with diff file ISSM-22629-22630.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#802} with diff file ISSM-22630-22631.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: WorldComm Enum is a Param\\
+\vspace{3em}
+
+\noindent \textbf{Change \#803} with diff file ISSM-22631-22632.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing AD, basin id needs to be cast as an int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#804} with diff file ISSM-22632-22633.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#805} with diff file ISSM-22633-22634.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp\\
+Export determination: 6. \\
+Rationale: FIX: allow for ad/m1qn3 to work in parallel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#806} with diff file ISSM-22634-22635.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h\\
+Export determination: 6. \\
+Rationale: CHG: to NOT return 0 if exception was caught!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#807} with diff file ISSM-22635-22636.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: CHG: no more overshoot\\
+\vspace{3em}
+
+\noindent \textbf{Change \#808} with diff file ISSM-22636-22637.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F\\
+Export determination: 6. \\
+Rationale: fixing a bug in cpl\_issm\\
+\vspace{3em}
+
+\noindent \textbf{Change \#809} with diff file ISSM-22637-22638.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#810} with diff file ISSM-22638-22639.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed coupling bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#811} with diff file ISSM-22639-22640.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#812} with diff file ISSM-22640-22641.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: receiving ice base\\
+\vspace{3em}
+
+\noindent \textbf{Change \#813} with diff file ISSM-22641-22642.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/camhpc.m\\
+Export determination: 6. \\
+Rationale: CHG: adapted for migration to CSD3 Mar 18\\
+\vspace{3em}
+
+\noindent \textbf{Change \#814} with diff file ISSM-22642-22643.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed problem with boxid!=0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#815} with diff file ISSM-22643-22644.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed valgrind error when param is not a transient param\\
+\vspace{3em}
+
+\noindent \textbf{Change \#816} with diff file ISSM-22644-22645.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m\\
+Export determination: 6. \\
+Rationale: CHG: removed eval from runme to gain some speed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#817} with diff file ISSM-22645-22646.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmdir.m\\
+Export determination: 6. \\
+Rationale: CHG: improved speed of issmdir by calling mfilename instead of which\\
+\vspace{3em}
+
+\noindent \textbf{Change \#818} with diff file ISSM-22646-22647.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#819} with diff file ISSM-22647-22648.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simplifying number of ids, removing index as it just repeats sid\\
+\vspace{3em}
+
+\noindent \textbf{Change \#820} with diff file ISSM-22648-22649.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: CHG: updating rules with TODO list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#821} with diff file ISSM-22649-22650.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added exchange of melt rate in ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#822} with diff file ISSM-22652-22653.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py\\
+Export determination: 6. \\
+Rationale: CHG: Eased tolerances.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#823} with diff file ISSM-22653-22654.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: sending melt rate\\
+\vspace{3em}
+
+\noindent \textbf{Change \#824} with diff file ISSM-22654-22655.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: small bug fix, array "is" a pointer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#825} with diff file ISSM-22655-22656.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#826} with diff file ISSM-22656-22657.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/main/issm\_ocean.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cleaning up ocean information exchange\\
+\vspace{3em}
+
+\noindent \textbf{Change \#827} with diff file ISSM-22657-22658.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test426.m\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#828} with diff file ISSM-22658-22659.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: minor tolerances python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#829} with diff file ISSM-22659-22660.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/solveiceocean.m\\
+Export determination: 6. \\
+Rationale: FIX: no space after file names\\
+\vspace{3em}
+
+\noindent \textbf{Change \#830} with diff file ISSM-22660-22661.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: ADD: Translation of InterpFromGridToMesh.cpp to JS.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#831} with diff file ISSM-22661-22662.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/javascript/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Added InterpFromGridToMesh to Javascript wrappers Makefile.am.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#832} with diff file ISSM-22662-22663.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/javascript/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Removed blank link following trailing backslash from Javascript wrappers Makefile.am.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#833} with diff file ISSM-22663-22664.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG: Changed name of argument defaultValue -> defaultValueIn.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#834} with diff file ISSM-22664-22665.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/localpfe.m\\
+Export determination: 6. \\
+Rationale: FIX: minor missing space\\
+\vspace{3em}
+
+\noindent \textbf{Change \#835} with diff file ISSM-22665-22666.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/solveiceocean.m\\
+Export determination: 6. \\
+Rationale: FIX: fixed solveiceocean\\
+\vspace{3em}
+
+\noindent \textbf{Change \#836} with diff file ISSM-22666-22667.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m\\
+Export determination: 6. \\
+Rationale: NEW: added functions in generic cluster for ice/ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#837} with diff file ISSM-22667-22668.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: NEW: added Chaco and MeshPartition to the list of python libs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#838} with diff file ISSM-22668-22669.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: switching back to previous version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#839} with diff file ISSM-22669-22670.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/build.sh\\
+Export determination: 6. \\
+Rationale: FIX: fixed build\\
+\vspace{3em}
+
+\noindent \textbf{Change \#840} with diff file ISSM-22670-22671.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: FIX: test now running with coupled model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#841} with diff file ISSM-22671-22672.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/Chaco/Chaco.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h\\
+Export determination: 6. \\
+Rationale: CHG: revising Chaco's interface to integrate python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#842} with diff file ISSM-22672-22673.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: adding lines that prepare MITgcm for step \#12: RunCoupledMITgcmISSM2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#843} with diff file ISSM-22673-22674.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG: Changes to InterpFromGridToMesh header and JS wrapper.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#844} with diff file ISSM-22674-22675.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/modules/MeshPartition.m M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h M /issm/trunk-jpl/src/wrappers/python/Makefile.am M /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp M /issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp M /issm/trunk-jpl/src/wrappers/python/io/pythonio.h\\
+Export determination: 6. \\
+Rationale: CHG: working on making Chaco and MeshPartition python friendly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#845} with diff file ISSM-22675-22676.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Chacox/user\_params.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing warning in Chaco\\
+\vspace{3em}
+
+\noindent \textbf{Change \#846} with diff file ISSM-22676-22677.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h\\
+Export determination: 6. \\
+Rationale: CHG: Corrections to InterpFromGridToMesh header to support JS wrapper.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#847} with diff file ISSM-22677-22678.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.js M /issm/trunk-jpl/src/wrappers/javascript/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG (JS): Fixing syntax issue in thermal.js. Adding InterpFromGridToMesh to exported functions in js builds.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#848} with diff file ISSM-22678-22679.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG: Modified JS module and header file for InterpFromGridToMesh to correctly retrieve data and mesh input lengths.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#849} with diff file ISSM-22679-22680.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG: Modified JS module to accept args for data width and length.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#850} with diff file ISSM-22680-22681.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG: Fixed typo HEAP64 -> HEAPF64.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#851} with diff file ISSM-22681-22682.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/MITgcm/code/CPP\_EEOPTIONS.h M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F M /issm/trunk-jpl/test/MITgcm/code/do\_oceanic\_phys.F M /issm/trunk-jpl/test/MITgcm/code/eeboot\_minimal.F M /issm/trunk-jpl/test/MITgcm/code/eedie.F\\
+Export determination: 6. \\
+Rationale: Adding runtime variable, which will allow running MITgcm with and without ISSM coupler!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#852} with diff file ISSM-22682-22683.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/input/eedata A /issm/trunk-jpl/test/MITgcm/input/eedata\_uncoupled\\
+Export determination: 6. \\
+Rationale: eedata\_uncoupled will allow same MITgcm executable to run in uncoupled mode\\
+\vspace{3em}
+
+\noindent \textbf{Change \#853} with diff file ISSM-22683-22684.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: Uncoupled MITgcm set-up now runs with same executable!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#854} with diff file ISSM-22684-22685.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: update wish list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#855} with diff file ISSM-22685-22686.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js\\
+Export determination: 6. \\
+Rationale: CHG (JS): JS debugging of InterpFromGridToMesh. Narrowing down WriteData bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#856} with diff file ISSM-22686-22687.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/jenkins.sh\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix compilation when it fails with multiple threads\\
+\vspace{3em}
+
+\noindent \textbf{Change \#857} with diff file ISSM-22687-22688.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4001.m M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: FIX: fixed standalone ocean in test4001 and 4002\\
+\vspace{3em}
+
+\noindent \textbf{Change \#858} with diff file ISSM-22688-22689.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: CHG: added second ocean test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#859} with diff file ISSM-22689-22690.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/javascript/io/WriteJavascriptData.cpp M /issm/trunk-jpl/src/wrappers/javascript/io/javascriptio.h\\
+Export determination: 6. \\
+Rationale: CHG (JS): Adding missing JS WriteData for IssmSeqVec.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#860} with diff file ISSM-22690-22691.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#861} with diff file ISSM-22691-22692.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#862} with diff file ISSM-22692-22693.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: CHG: minor trying to figure out the problem with jenkins ice/ocean\\
+\vspace{3em}
+
+\noindent \textbf{Change \#863} with diff file ISSM-22693-22694.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: CHG: tying to figure out why the second ocean test is not working\\
+\vspace{3em}
+
+\noindent \textbf{Change \#864} with diff file ISSM-22694-22695.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: CHG; adding both ocean tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#865} with diff file ISSM-22695-22696.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#866} with diff file ISSM-22696-22697.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/dakota/configs/6.2/sandia\_rules.cpp.patch M /issm/trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: patch dakota bug that throws error in high sierra\\
+\vspace{3em}
+
+\noindent \textbf{Change \#867} with diff file ISSM-22697-22698.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/valgrind/issm.supp\\
+Export determination: 6. \\
+Rationale: CHG: some more supressions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#868} with diff file ISSM-22698-22699.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vimrc\\
+Export determination: 6. \\
+Rationale: CHG: reactivating p1 for matlab\\
+\vspace{3em}
+
+\noindent \textbf{Change \#869} with diff file ISSM-22699-22700.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/dakota/install-6.2-intel15-discover.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-intel16-discover.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-linux64.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-lonestar.sh A /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64-highsierra.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64-snowleopard.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64-yosemite.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-macosx64.sh M /issm/trunk-jpl/externalpackages/dakota/install-6.2-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: revert high sierra patch and add new install for that OS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#870} with diff file ISSM-22700-22701.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: add some calving fields for sampling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#871} with diff file ISSM-22701-22702.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_gridded.m\\
+Export determination: 6. \\
+Rationale: CHG: added dem field if dem is not the same as field\\
+\vspace{3em}
+
+\noindent \textbf{Change \#872} with diff file ISSM-22702-22703.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: new enums for ocean coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#873} with diff file ISSM-22703-22704.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: adding coupling in regular time steps\\
+\vspace{3em}
+
+\noindent \textbf{Change \#874} with diff file ISSM-22704-22705.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/neopz/install.sh M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/classes/AdaptiveMeshRefinement.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed sub dir in NeoPZ install file. Fixed a bug on AMR calling NeoPZ\\
+\vspace{3em}
+
+\noindent \textbf{Change \#875} with diff file ISSM-22705-22706.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: rearranging send/receive operations, so easier to figure out what to do on MITgcm side and for improved clarity\\
+\vspace{3em}
+
+\noindent \textbf{Change \#876} with diff file ISSM-22706-22707.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: same order of exchanges, but use same numbering convention in start from scratch and restart\\
+\vspace{3em}
+
+\noindent \textbf{Change \#877} with diff file ISSM-22707-22708.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/coupling\_rules.txt\\
+Export determination: 6. \\
+Rationale: instructions unchanged. changing the numbering of the steps so that they have same number if they perform same function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#878} with diff file ISSM-22708-22709.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: implementing coupling rules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#879} with diff file ISSM-22709-22710.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed the order of the coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#880} with diff file ISSM-22710-22711.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/qmu/dakota\_out\_parse.m\\
+Export determination: 6. \\
+Rationale: CHG: update dakota parse to remove warnings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#881} with diff file ISSM-22711-22712.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: adding missing "icebase = xNew ..."\\
+\vspace{3em}
+
+\noindent \textbf{Change \#882} with diff file ISSM-22712-22713.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/code/cpl\_issm.F\\
+Export determination: 6. \\
+Rationale: saving in COMMON block and broadcasting CouplingTime\\
+\vspace{3em}
+
+\noindent \textbf{Change \#883} with diff file ISSM-22713-22714.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: setting async\_step\_MITgcm\_multiplier=1 and shortening the length of the experiments so that both offline and online versions can run the same experiment\\
+\vspace{3em}
+
+\noindent \textbf{Change \#884} with diff file ISSM-22714-22715.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/MITgcm/input/data\\
+Export determination: 6. \\
+Rationale: more frequent MITgcm diagnostics in STDOUT\\
+\vspace{3em}
+
+\noindent \textbf{Change \#885} with diff file ISSM-22715-22716.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_javascript M /issm/trunk-jpl/src/m/plot/plot\_mesh.js M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h\\
+Export determination: 6. \\
+Rationale: CHG (JS): Fixing transpose error in InterFromGridToMesh.js wrapper.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#886} with diff file ISSM-22716-22717.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/solve.js\\
+Export determination: 6. \\
+Rationale: CHG: diverse\\
+\vspace{3em}
+
+\noindent \textbf{Change \#887} with diff file ISSM-22717-22718.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/solvers/issmmumpssolver.js\\
+Export determination: 6. \\
+Rationale: CHG: diverse\\
+\vspace{3em}
+
+\noindent \textbf{Change \#888} with diff file ISSM-22718-22719.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/trans.js\\
+Export determination: 6. \\
+Rationale: CHG: changing default.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#889} with diff file ISSM-22719-22720.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.js\\
+Export determination: 6. \\
+Rationale: CHG: some changes.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#890} with diff file ISSM-22720-22721.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m\\
+Export determination: 6. \\
+Rationale: CHG: removed extraneous text\\
+\vspace{3em}
+
+\noindent \textbf{Change \#891} with diff file ISSM-22721-22722.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test460.m M /issm/trunk-jpl/test/NightlyRun/test460.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tol\\
+\vspace{3em}
+
+\noindent \textbf{Change \#892} with diff file ISSM-22722-22723.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#893} with diff file ISSM-22723-22724.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#894} with diff file ISSM-22724-22725.diff: \\
+Function name: \\
+M /issm/trunk-jpl/jenkins/linux64\_ross\_iceocean\\
+Export determination: 6. \\
+Rationale: CHG: added --with-ocean=yes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#895} with diff file ISSM-22725-22726.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: do not compile kml by default\\
+\vspace{3em}
+
+\noindent \textbf{Change \#896} with diff file ISSM-22726-22727.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive4002.arch M /issm/trunk-jpl/test/NightlyRun/test4002.m\\
+Export determination: 6. \\
+Rationale: CHG: archives for test 4002\\
+\vspace{3em}
+
+\noindent \textbf{Change \#897} with diff file ISSM-22727-22728.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: Adding Enums to enable transient ControlInputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#898} with diff file ISSM-22728-22729.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: add bottom layer flux to runoff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#899} with diff file ISSM-22729-22730.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.h M /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp\\
+Export determination: 6. \\
+Rationale: CHG: convert index to int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#900} with diff file ISSM-22730-22731.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/ApiPrintf.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use printf instead of mexPrintf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#901} with diff file ISSM-22731-22732.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving some double pointers to int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#902} with diff file ISSM-22732-22733.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Params/TransientArrayParam.cpp M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/test/Archives/Archive470.arch\\
+Export determination: 6. \\
+Rationale: CHG: Update PICO sub-shelf melting rate module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#903} with diff file ISSM-22733-22734.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive470.arch\\
+Export determination: 6. \\
+Rationale: CHG: Update NightlyRun 470 Archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#904} with diff file ISSM-22734-22735.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive470.arch M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: FIX: Fixed nightly test 470\\
+\vspace{3em}
+
+\noindent \textbf{Change \#905} with diff file ISSM-22735-22736.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: FIX: update nightly run test 470 again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#906} with diff file ISSM-22736-22737.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: conserve energy when adding or removing bottom layers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#907} with diff file ISSM-22737-22738.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h M /issm/trunk-jpl/src/c/toolkits/issm/SparseRow.h\\
+Export determination: 6. \\
+Rationale: CHG: corrected definition of norm inf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#908} with diff file ISSM-22738-22739.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h\\
+Export determination: 6. \\
+Rationale: Remove print statements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#909} with diff file ISSM-22739-22740.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tetra.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/cores/controladm1qn3\_core.cpp M /issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: allow for transient ControlInputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#910} with diff file ISSM-22740-22741.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: CHG: clean up code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#911} with diff file ISSM-22741-22742.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m\\
+Export determination: 6. \\
+Rationale: CHG: add time and step first, then field\\
+\vspace{3em}
+
+\noindent \textbf{Change \#912} with diff file ISSM-22742-22743.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: revert to surplus energy loop from clang\\
+\vspace{3em}
+
+\noindent \textbf{Change \#913} with diff file ISSM-22743-22744.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive480.arch A /issm/trunk-jpl/test/Archives/Archive481.arch A /issm/trunk-jpl/test/NightlyRun/test480.m A /issm/trunk-jpl/test/NightlyRun/test481.m\\
+Export determination: 6. \\
+Rationale: ADD: nightly tests for ADOLC m1qn3 with transient and static controlinputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#914} with diff file ISSM-22744-22745.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/independent.m\\
+Export determination: 6. \\
+Rationale: CHG: add .m fields for adolc m1qn3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#915} with diff file ISSM-22745-22746.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/README\\
+Export determination: 6. \\
+Rationale: CHG: website is more up to date than README\\
+\vspace{3em}
+
+\noindent \textbf{Change \#916} with diff file ISSM-22746-22747.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive3480.arch A /issm/trunk-jpl/test/Archives/Archive3481.arch D /issm/trunk-jpl/test/Archives/Archive480.arch D /issm/trunk-jpl/test/Archives/Archive481.arch A /issm/trunk-jpl/test/NightlyRun/test3480.m A /issm/trunk-jpl/test/NightlyRun/test3481.m D /issm/trunk-jpl/test/NightlyRun/test480.m D /issm/trunk-jpl/test/NightlyRun/test481.m\\
+Export determination: 6. \\
+Rationale: CHG: change names of nightly tests for adolc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#917} with diff file ISSM-22747-22748.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: check mass as done in other GEMB routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#918} with diff file ISSM-22748-22749.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdFromString.m\\
+Export determination: 6. \\
+Rationale: CHG: better way of retrieving Ids\\
+\vspace{3em}
+
+\noindent \textbf{Change \#919} with diff file ISSM-22749-22750.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/m/classes/basalforcingspico.m M /issm/trunk-jpl/test/Archives/Archive470.arch M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: CHG: Update Pico floating ice melt rate parameterization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#920} with diff file ISSM-22750-22751.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed handling of matrices in results, no need to transpose, fread takes care of reading the matrix and putting it in the appropriate format\\
+\vspace{3em}
+
+\noindent \textbf{Change \#921} with diff file ISSM-22751-22752.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m\\
+Export determination: 6. \\
+Rationale: BUG: reverted back, we acutally do need to transpose\\
+\vspace{3em}
+
+\noindent \textbf{Change \#922} with diff file ISSM-22752-22753.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test470.m\\
+Export determination: 6. \\
+Rationale: CHG: Update nightly test470\\
+\vspace{3em}
+
+\noindent \textbf{Change \#923} with diff file ISSM-22753-22754.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: CHG: switch from isautodiff to HAVE\_ADOLC as the if else for file\\
+\vspace{3em}
+
Index: /issm/oecreview/Archive/21724-22754/r1.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/r1.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/r1.tex	(revision 22755)
@@ -0,0 +1,1 @@
+21724
Index: /issm/oecreview/Archive/21724-22754/r2.tex
===================================================================
--- /issm/oecreview/Archive/21724-22754/r2.tex	(revision 22755)
+++ /issm/oecreview/Archive/21724-22754/r2.tex	(revision 22755)
@@ -0,0 +1,1 @@
+22754
